diff --git a/core/package.json b/core/package.json index a7e002f..3d32bac 100644 --- a/core/package.json +++ b/core/package.json @@ -19,7 +19,7 @@ "@vue/compiler-sfc": "3.2.45", "ant-design-vue": "^3.2.17", "dayjs": "^1.11.7", - "docx-preview": "^0.1.18", + "docx-preview": "^0.1.20", "exceljs": "^4.3.0", "lodash": "^4.17.21", "postcss": "^8.4.24", diff --git a/core/packages/js-docx/package.json b/core/packages/js-docx/package.json index 7ceeb1c..93e6ede 100644 --- a/core/packages/js-docx/package.json +++ b/core/packages/js-docx/package.json @@ -1,7 +1,7 @@ { "name": "@js-preview/docx", "type" :"module", - "version": "1.3.1", + "version": "1.3.2", "description": "", "main": "lib/index.js", "files": [ diff --git a/core/packages/vue-docx/package.json b/core/packages/vue-docx/package.json index b1e3f52..6126f97 100644 --- a/core/packages/vue-docx/package.json +++ b/core/packages/vue-docx/package.json @@ -1,6 +1,6 @@ { "name": "@vue-office/docx", - "version": "1.3.1", + "version": "1.3.2", "description": "", "main": "lib/index.js", "files": [ diff --git a/examples/dist/assets/DocxDemo-31898887.js b/examples/dist/assets/DocxDemo-31898887.js new file mode 100644 index 0000000..c216e3f --- /dev/null +++ b/examples/dist/assets/DocxDemo-31898887.js @@ -0,0 +1 @@ +import{d as r}from"./docx-346cfa6b.js";import{d as p}from"./url-de9b02cf.js";import{d as x,_ as l,r as u,o as h,w as v,a as _,c as g,b as w,e as y,f as D,g as B,u as O}from"./index-846e3dd9.js";import{P as R,u as f}from"./PreviewWrapper-a72046cf.js";import"./_commonjs-dynamic-modules-302442b1.js";typeof window.setImmediate>"u"&&(window.setImmediate=function(e,...o){setTimeout(()=>e(o))});const $=x({name:"VueOfficeDocx",props:{src:[String,ArrayBuffer,Blob],requestOptions:{type:Object,default:()=>({})},options:{type:Object,default:()=>({})}},emits:["rendered","error"],setup(e,{emit:o}){const t=u(null);let n=null;function a(){let c=t.value;r.getData(e.src,e.requestOptions).then(async d=>{n=await r.getBlob(d),r.render(n,c,e.options).then(()=>{o("rendered")}).catch(m=>{r.render("",c,e.options),o("error",m)})}).catch(d=>{r.render("",c,e.options),o("error",d)})}h(()=>{e.src&&a()}),v(()=>e.src,()=>{e.src?a():r.render("",t.value,e.options).then(()=>{o("rendered")})});function s(c){p(c||`vue-office-docx-${new Date().getTime()}.docx`,n)}return{rootRef:t,save:s}}}),b={class:"vue-office-docx"},k={class:"vue-office-docx-main",ref:"rootRef"};function V(e,o,t,n,a,s){return _(),g("div",b,[w("div",k,null,512)])}const i=l($,[["render",V]]);i.install=function(e){e.component(i.name,i)};const E={__name:"DocxDemo",setup(e){function o(){f.hideLoading()}function t(s){console.log("出差",s),f.hideLoading()}const n=location.origin+(location.pathname+"/").replace("//","/")+"static/test-files/test.docx",a=u();return(s,c)=>(_(),y(R,{accept:".docx",placeholder:"请输入docx文件地址","default-src":n},{default:D(d=>[B(O(i),{ref_key:"docxRef",ref:a,src:d.src,style:{flex:"1",height:"0"},onRendered:o,onError:t},null,8,["src"])]),_:1}))}},N=l(E,[["__scopeId","data-v-637d9a60"]]);export{N as default}; diff --git a/examples/dist/assets/ExcelDemo-2c93a7f6.js b/examples/dist/assets/ExcelDemo-2c93a7f6.js new file mode 100644 index 0000000..5bd9779 --- /dev/null +++ b/examples/dist/assets/ExcelDemo-2c93a7f6.js @@ -0,0 +1 @@ +import{l as R,r as B,S as T,a as m,g as D,b as $,t as L,c as k}from"./hack-a38f8b6f.js";import{d as q}from"./url-de9b02cf.js";import{d as F,_ as V,r as x,o as W,n as j,h as I,w as M,a as y,c as N,b as P,i as A,e as H,f as U,j as z,g as G,u as J}from"./index-846e3dd9.js";import{P as K,u as O}from"./PreviewWrapper-a72046cf.js";import"./_commonjs-dynamic-modules-302442b1.js";const E={minColLength:20},Q=F({name:"VueOfficeExcel",props:{src:[String,ArrayBuffer,Blob],requestOptions:{type:Object,default:()=>({})},options:{type:Object,default:()=>({...E})}},emits:["rendered","error"],setup(t,{emit:f}){const c=x(null),s=x(null);let r={_worksheets:[]},n=[],o=0,d=null,e=null,l=null,w=null;function _(i){w=i,$(i).then(u=>{if(!u._worksheets||u._worksheets.length===0)throw new Error("未获取到数据,可能文件格式不正确或文件已损坏");let{workbookData:h,medias:g,workbookSource:a}=L(u,{...E,...t.options});t.options.transformData&&typeof t.options.transformData=="function"&&(h=t.options.transformData(h)),n=g,r=a,l=null,o=0,k(),e.loadData(h),m(d,n,r._worksheets[o],l),f("rendered")}).catch(u=>{console.warn(u),n=[],r={_worksheets:[]},k(),e&&e.loadData({}),f("error",u)})}const v=R.debounce(B,200).bind(this,s.value),b=new MutationObserver(v),S={attributes:!0,childList:!0,subtree:!0};W(()=>{j(()=>{b.observe(s.value,S),v(s),e=new T(s.value,{mode:"read",showToolbar:!1,showContextmenu:t.options.showContextmenu||!1,view:{height:()=>c.value&&c.value.clientHeight||300,width:()=>c.value&&c.value.clientWidth||1200},row:{height:24,len:100},col:{len:26,width:80,indexWidth:60,minWidth:60},autoFocus:!1}).loadData({});let i=e.bottombar.swapFunc;e.bottombar.swapFunc=function(a){i.call(e.bottombar,a),o=a,setTimeout(()=>{e.reRender(),m(d,n,r._worksheets[o],l)})};let u=e.sheet.editor.clear;e.sheet.editor.clear=function(...a){u.apply(e.sheet.editor,a),setTimeout(()=>{m(d,n,r._worksheets[o],l)})};let h=e.sheet.editor.setOffset;e.sheet.editor.setOffset=function(...a){h.apply(e.sheet.editor,a),l=a[0],m(d,n,r._worksheets[o],l)},d=s.value.querySelector("canvas").getContext("2d"),t.src&&D(t.src,t.requestOptions).then(_).catch(a=>{e.loadData({}),f("error",a)})})}),I(()=>{b.disconnect(),e=null}),M(()=>t.src,()=>{t.src?D(t.src,t.requestOptions).then(_).catch(i=>{e.loadData({}),f("error",i)}):e.loadData({})});function C(i){q(i||`vue-office-excel-${new Date().getTime()}.xlsx`,w)}return{wrapperRef:c,rootRef:s,save:C}}}),X={class:"vue-office-excel",ref:"wrapperRef"},Y={class:"vue-office-excel-main",ref:"rootRef"};function Z(t,f,c,s,r,n){return y(),N("div",X,[P("div",Y,null,512)],512)}const p=V(Q,[["render",Z]]);p.install=function(t){t.component(p.name,p)};const re={__name:"ExcelDemo",setup(t){function f(){O.hideLoading()}function c(o){console.log("出差",o),O.hideLoading()}function s(o){return console.log("transformData",o),o}const r=location.origin+(location.pathname+"/").replace("//","/")+"static/test-files/test.xlsx",n=x();return(o,d)=>{const e=A("loading");return y(),H(K,{accept:".xlsx",placeholder:"请输入xlsx文件地址","default-src":r},{default:U(l=>[z(G(J(p),{ref_key:"docxRef",ref:n,src:l.src,options:{transformData:s},style:{flex:"1",height:"0"},onRendered:f,onError:c},null,8,["src","options"]),[[e,!0]])]),_:1})}}};export{re as default}; diff --git a/examples/dist/assets/ExcelDemo-54c0fcde.css b/examples/dist/assets/ExcelDemo-54c0fcde.css new file mode 100644 index 0000000..863736e --- /dev/null +++ b/examples/dist/assets/ExcelDemo-54c0fcde.css @@ -0,0 +1 @@ +body{margin:0}.x-spreadsheet{font-size:13px;line-height:normal;-webkit-user-select:none;user-select:none;-moz-user-select:none;font-family:Lato,Source Sans Pro,Roboto,Helvetica,Arial,sans-serif;box-sizing:content-box;background:#fff;-webkit-font-smoothing:antialiased}.x-spreadsheet textarea{font:400 13px Arial,Lato,Source Sans Pro,Roboto,Helvetica,sans-serif}.x-spreadsheet-sheet{position:relative;overflow:hidden}.x-spreadsheet-table{vertical-align:bottom}.x-spreadsheet-tooltip{font-family:inherit;position:absolute;padding:5px 10px;color:#fff;border-radius:1px;background:#000000;font-size:12px;z-index:201}.x-spreadsheet-tooltip:before{pointer-events:none;position:absolute;left:calc(50% - 4px);top:-4px;content:"";width:8px;height:8px;background:inherit;-webkit-transform:rotate(45deg);transform:rotate(45deg);z-index:1;box-shadow:1px 1px 3px -1px #0000004d}.x-spreadsheet-color-palette{padding:5px}.x-spreadsheet-color-palette table{margin:0;padding:0;border-collapse:separate;border-spacing:2;background:#fff}.x-spreadsheet-color-palette table td{margin:0;cursor:pointer;border:1px solid transparent}.x-spreadsheet-color-palette table td:hover{border-color:#ddd}.x-spreadsheet-color-palette table td .x-spreadsheet-color-palette-cell{width:16px;height:16px}.x-spreadsheet-border-palette{padding:6px}.x-spreadsheet-border-palette table{margin:0;padding:0;border-collapse:separate;border-spacing:0;background:#fff;table-layout:fixed}.x-spreadsheet-border-palette table td{margin:0}.x-spreadsheet-border-palette .x-spreadsheet-border-palette-left{border-right:1px solid #eee;padding-right:6px}.x-spreadsheet-border-palette .x-spreadsheet-border-palette-left .x-spreadsheet-border-palette-cell{width:30px;height:30px;cursor:pointer;text-align:center}.x-spreadsheet-border-palette .x-spreadsheet-border-palette-left .x-spreadsheet-border-palette-cell:hover{background-color:#eee}.x-spreadsheet-border-palette .x-spreadsheet-border-palette-right{padding-left:6px}.x-spreadsheet-border-palette .x-spreadsheet-border-palette-right .x-spreadsheet-line-type{position:relative;left:0;top:-3px}.x-spreadsheet-dropdown{position:relative}.x-spreadsheet-dropdown .x-spreadsheet-dropdown-content{position:absolute;z-index:200;background:#fff;box-shadow:1px 2px 5px 2px #33333326}.x-spreadsheet-dropdown.bottom-left .x-spreadsheet-dropdown-content{top:calc(100% + 5px);left:0}.x-spreadsheet-dropdown.bottom-right .x-spreadsheet-dropdown-content{top:calc(100% + 5px);right:0}.x-spreadsheet-dropdown.top-left .x-spreadsheet-dropdown-content{bottom:calc(100% + 5px);left:0}.x-spreadsheet-dropdown.top-right .x-spreadsheet-dropdown-content{bottom:calc(100% + 5px);right:0}.x-spreadsheet-dropdown .x-spreadsheet-dropdown-title{padding:0 5px;display:inline-block}.x-spreadsheet-resizer{position:absolute;z-index:11}.x-spreadsheet-resizer .x-spreadsheet-resizer-hover{background-color:#4b89ff40}.x-spreadsheet-resizer .x-spreadsheet-resizer-line{position:absolute}.x-spreadsheet-resizer.horizontal{cursor:row-resize}.x-spreadsheet-resizer.horizontal .x-spreadsheet-resizer-line{border-bottom:2px dashed #4b89ff;left:0;bottom:0}.x-spreadsheet-resizer.vertical{cursor:col-resize}.x-spreadsheet-resizer.vertical .x-spreadsheet-resizer-line{border-right:2px dashed #4b89ff;top:0;right:0}.x-spreadsheet-scrollbar{position:absolute;bottom:0;right:0;background-color:#f4f5f8;opacity:.9;z-index:12}.x-spreadsheet-scrollbar.horizontal{right:15px;overflow-x:scroll;overflow-y:hidden}.x-spreadsheet-scrollbar.horizontal>div{height:1px;background:#ddd}.x-spreadsheet-scrollbar.vertical{bottom:15px;overflow-x:hidden;overflow-y:scroll}.x-spreadsheet-scrollbar.vertical>div{width:1px;background:#ddd}.x-spreadsheet-overlayer{position:absolute;left:0;top:0;z-index:10}.x-spreadsheet-overlayer .x-spreadsheet-overlayer-content{position:absolute;overflow:hidden;pointer-events:none;width:100%;height:100%}.x-spreadsheet-editor,.x-spreadsheet-selector{box-sizing:content-box;position:absolute;overflow:hidden;pointer-events:none;top:0;left:0;width:100%;height:100%}.x-spreadsheet-selector .hide-input{position:absolute;z-index:0}.x-spreadsheet-selector .hide-input input{padding:0;width:0;border:none!important}.x-spreadsheet-selector .x-spreadsheet-selector-area{position:absolute;border:2px solid #4b89ff;background:rgba(75,137,255,.1);z-index:5}.x-spreadsheet-selector .x-spreadsheet-selector-clipboard,.x-spreadsheet-selector .x-spreadsheet-selector-autofill{position:absolute;background:transparent;z-index:100}.x-spreadsheet-selector .x-spreadsheet-selector-clipboard{border:2px dashed #4b89ff}.x-spreadsheet-selector .x-spreadsheet-selector-autofill{border:1px dashed rgba(0,0,0,.45)}.x-spreadsheet-selector .x-spreadsheet-selector-corner{pointer-events:auto;position:absolute;cursor:crosshair;font-size:0;height:5px;width:5px;right:-5px;bottom:-5px;border:2px solid #ffffff;background:#4b89ff}.x-spreadsheet-editor{z-index:20}.x-spreadsheet-editor .x-spreadsheet-editor-area{position:absolute;text-align:left;border:2px solid #4b89ff;line-height:0;z-index:100;pointer-events:auto}.x-spreadsheet-editor .x-spreadsheet-editor-area textarea{box-sizing:content-box;border:none;padding:0 3px;outline:none;resize:none;text-align:start;overflow-y:hidden;font:400 13px Arial,Lato,Source Sans Pro,Roboto,Helvetica,sans-serif;color:inherit;white-space:normal;word-wrap:break-word;line-height:22px;margin:0}.x-spreadsheet-editor .x-spreadsheet-editor-area .textline{overflow:hidden;visibility:hidden;position:fixed;top:0;left:0}.x-spreadsheet-item{-webkit-user-select:none;user-select:none;background:0;border:1px solid transparent;outline:none;height:26px;color:#000000e6;line-height:26px;list-style:none;padding:2px 10px;cursor:default;text-align:left;overflow:hidden}.x-spreadsheet-item.disabled{pointer-events:none;opacity:.5}.x-spreadsheet-item:hover,.x-spreadsheet-item.active{background:rgba(0,0,0,.05)}.x-spreadsheet-item.divider{height:0;padding:0;margin:5px 0;border:none;border-bottom:1px solid rgba(0,0,0,.1)}.x-spreadsheet-item .label{float:right;opacity:.65;font-size:1em}.x-spreadsheet-item.state,.x-spreadsheet-header.state{padding-left:35px!important;position:relative}.x-spreadsheet-item.state:before,.x-spreadsheet-header.state:before{content:"";position:absolute;width:10px;height:10px;left:12px;top:calc(50% - 5px);background:rgba(0,0,0,.08);border-radius:2px}.x-spreadsheet-item.state.checked:before,.x-spreadsheet-header.state.checked:before{background:#4b89ff}.x-spreadsheet-checkbox{position:relative;display:inline-block;backface-visibility:hidden;outline:0;vertical-align:baseline;font-style:normal;font-size:1rem;line-height:1em}.x-spreadsheet-checkbox>input{position:absolute;top:0;left:0;opacity:0!important;outline:0;z-index:-1}.x-spreadsheet-suggest,.x-spreadsheet-contextmenu,.x-spreadsheet-sort-filter{position:absolute;box-shadow:1px 2px 5px 2px #33333326;background:#fff;z-index:100;width:260px;pointer-events:auto;overflow:auto}.x-spreadsheet-suggest{width:200px}.x-spreadsheet-filter{border:1px solid #e9e9e9;font-size:12px;margin:10px}.x-spreadsheet-filter .x-spreadsheet-header{padding:.5em .75em;background:#f8f8f9;border-bottom:1px solid #e9e9e9;border-left:1px solid transparent}.x-spreadsheet-filter .x-spreadsheet-body{height:200px;overflow-y:auto}.x-spreadsheet-filter .x-spreadsheet-body .x-spreadsheet-item{height:20px;line-height:20px}.x-spreadsheet-sort-filter .x-spreadsheet-buttons{margin:10px}.x-spreadsheet-bottombar{height:40px;padding:0 30px;text-align:left;background:#f5f6f7;display:flex}.x-spreadsheet-bottombar{position:relative;border-top:1px solid #e0e2e4}.x-spreadsheet-bottombar .x-spreadsheet-menu>li{line-height:40px;height:40px;padding-top:0;padding-bottom:0;vertical-align:middle;border-right:1px solid #e8eaed}.x-spreadsheet-menu{display:flex;overflow-x:auto;list-style:none;margin:0;padding:0;-webkit-user-select:none;user-select:none}.x-spreadsheet-menu>li{float:left;line-height:1.25em;padding:.785em 1em;margin:0;vertical-align:middle;text-align:left;font-weight:400;color:#80868b;white-space:nowrap;cursor:pointer;transition:all .3s;font-weight:700}.x-spreadsheet-menu>li.active{background-color:#fff;color:#000000a6}.x-spreadsheet-menu>li .x-spreadsheet-dropdown{display:inline-block}.x-spreadsheet-print{position:absolute;left:0;top:0;z-index:100;width:100%;height:100%;display:flex;flex-direction:column}.x-spreadsheet-print-bar{background:#424242;height:60px;line-height:60px;padding:0 30px}.x-spreadsheet-print-bar .-title{color:#fff;font-weight:700;font-size:1.2em;float:left}.x-spreadsheet-print-bar .-right{float:right;margin-top:12px}.x-spreadsheet-print-content{display:flex;flex:auto;flex-direction:row;background:#d0d0d0;height:calc(100% - 60px)}.x-spreadsheet-print-content .-sider{flex:0 0 300px;width:300px;border-left:2px solid #ccc;background:#fff}.x-spreadsheet-print-content .-content{flex:auto;overflow-x:auto;overflow-y:scroll;height:100%}.x-spreadsheet-canvas-card-wraper{margin:40px 20px}.x-spreadsheet-canvas-card{background:#fff;margin:auto;page-break-before:auto;page-break-after:always;box-shadow:0 8px 10px 1px #00000024,0 3px 14px 3px #0000001f,0 4px 5px #0003}.x-spreadsheet-calendar{color:#000000a6;background:#ffffff;-webkit-user-select:none;user-select:none}.x-spreadsheet-calendar .calendar-header{font-weight:700;line-height:30px;text-align:center;width:100%;float:left;background:#f9fafb}.x-spreadsheet-calendar .calendar-header .calendar-header-left{padding-left:5px;float:left}.x-spreadsheet-calendar .calendar-header .calendar-header-right{float:right}.x-spreadsheet-calendar .calendar-header .calendar-header-right a{padding:3px 0;margin-right:2px;border-radius:2px}.x-spreadsheet-calendar .calendar-header .calendar-header-right a:hover{background:rgba(0,0,0,.08)}.x-spreadsheet-calendar .calendar-body{border-collapse:collapse;border-spacing:0}.x-spreadsheet-calendar .calendar-body th,.x-spreadsheet-calendar .calendar-body td{width:14.28571429%;min-width:32px;text-align:center;font-weight:700;line-height:30px;padding:0}.x-spreadsheet-calendar .calendar-body td>.cell:hover{background:#ecf6fd}.x-spreadsheet-calendar .calendar-body td>.cell.active,.x-spreadsheet-calendar .calendar-body td>.cell.active:hover{background:#ecf6fd;color:#2185d0}.x-spreadsheet-calendar .calendar-body td>.cell.disabled{pointer-events:none;opacity:.5}.x-spreadsheet-datepicker{box-shadow:2px 2px 5px #0003;position:absolute;left:0;top:calc(100% + 5px);z-index:10;width:auto}.x-spreadsheet-buttons{display:flex;justify-content:flex-end}.x-spreadsheet-buttons .x-spreadsheet-button{margin-left:8px}.x-spreadsheet-button{display:inline-block;border-radius:3px;line-height:1em;min-height:1em;white-space:nowrap;text-align:center;cursor:pointer;font-size:1em;font-weight:700;padding:.75em 1em;color:#0009;background:#E0E1E2;text-decoration:none;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;outline:none;vertical-align:baseline;zoom:1;-webkit-user-select:none;user-select:none;transition:all .1s linear}.x-spreadsheet-button.active,.x-spreadsheet-button:hover{background-color:#c0c1c2;color:#000c}.x-spreadsheet-button.primary{color:#fff;background-color:#2185d0}.x-spreadsheet-button.primary:hover,.x-spreadsheet-button.primary.active{color:#fff;background-color:#1678c2}.x-spreadsheet-form-input{font-size:1em;position:relative;font-weight:400;display:inline-flex;color:#000000de}.x-spreadsheet-form-input input{z-index:1;margin:0;max-width:100%;flex:1 0 auto;outline:0;-webkit-tap-highlight-color:rgba(255,255,255,0);text-align:left;line-height:30px;height:30px;padding:0 8px;background:#fff;border:1px solid #e9e9e9;border-radius:3px;transition:box-shadow .1s ease,border-color .1s ease;box-shadow:inset 0 1px 2px #0a0a0a0f}.x-spreadsheet-form-input input:focus{border-color:#4b89ff;box-shadow:inset 0 1px 2px #4b89ff33}.x-spreadsheet-form-select{position:relative;display:inline-block;background:#fff;border:1px solid #e9e9e9;border-radius:2px;cursor:pointer;color:#000000de;-webkit-user-select:none;user-select:none;box-shadow:inset 0 1px 2px #0a0a0a0f}.x-spreadsheet-form-select .input-text{text-overflow:ellipsis;white-space:nowrap;min-width:60px;width:auto;height:30px;line-height:30px;padding:0 8px}.x-spreadsheet-form-fields{display:flex;flex-direction:row;flex-wrap:wrap}.x-spreadsheet-form-fields .x-spreadsheet-form-field{flex:0 1 auto}.x-spreadsheet-form-fields .x-spreadsheet-form-field .label{display:inline-block;margin:0 10px 0 0}.x-spreadsheet-form-field{display:block;vertical-align:middle;margin-left:10px;margin-bottom:10px}.x-spreadsheet-form-field:first-child{margin-left:0}.x-spreadsheet-form-field.error .x-spreadsheet-form-select,.x-spreadsheet-form-field.error input{border-color:#f04134}.x-spreadsheet-form-field .tip{color:#f04134;font-size:.9em}.x-spreadsheet-dimmer{display:none;position:absolute;top:0!important;left:0!important;width:100%;height:100%;text-align:center;vertical-align:middle;background-color:#0009;opacity:0;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.5s;animation-duration:.5s;transition:background-color .5s linear;-webkit-user-select:none;user-select:none;z-index:1000}.x-spreadsheet-dimmer.active{display:block;opacity:1}form fieldset{border:none}form fieldset label{display:block;margin-bottom:.5em;font-size:1em;color:#666}form fieldset select{font-size:1.1em;width:100%;background-color:#fff;border:none;border-bottom:2px solid #ddd;padding:.5em .85em;border-radius:2px}.x-spreadsheet-modal,.x-spreadsheet-toast{font-size:13px;position:fixed;z-index:1001;text-align:left;line-height:1.25em;min-width:360px;color:#000000de;font-family:Lato,Source Sans Pro,Roboto,Helvetica,Arial,sans-serif;border-radius:4px;border:1px solid rgba(0,0,0,.1);background-color:#fff;background-clip:padding-box;box-shadow:#0003 0 2px 8px}.x-spreadsheet-toast{background-color:#ffffffd9}.x-spreadsheet-modal-header,.x-spreadsheet-toast-header{font-weight:600;background-clip:padding-box;background-color:#ffffffd9;border-bottom:1px solid rgba(0,0,0,.05);border-radius:4px 4px 0 0}.x-spreadsheet-toast-header{color:#f2711c}.x-spreadsheet-modal-header{border-bottom:1px solid #e0e2e4;background:rgba(0,0,0,.08);font-size:1.0785em}.x-spreadsheet-modal-header,.x-spreadsheet-modal-content,.x-spreadsheet-toast-header,.x-spreadsheet-toast-content{padding:.75em 1em}.x-spreadsheet-menu li:first-child{display:none}.vue-office-excel{height:100%} diff --git a/examples/dist/assets/JsDocxDemo-0b9a0df8.js b/examples/dist/assets/JsDocxDemo-0b9a0df8.js new file mode 100644 index 0000000..d2f8795 --- /dev/null +++ b/examples/dist/assets/JsDocxDemo-0b9a0df8.js @@ -0,0 +1 @@ +var p=Object.defineProperty;var c=(i,e,t)=>e in i?p(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var n=(i,e,t)=>(c(i,typeof e!="symbol"?e+"":e,t),t);import{d as r}from"./docx-346cfa6b.js";import{d as l}from"./url-de9b02cf.js";import{r as h,o as d,a as u,c as m}from"./index-846e3dd9.js";import"./_commonjs-dynamic-modules-302442b1.js";typeof window.setImmediate>"u"&&(window.setImmediate=function(i,...e){setTimeout(()=>i(e))});class w{constructor(e,t={},s={}){n(this,"container",null);n(this,"wrapper",null);n(this,"wrapperMain",null);n(this,"options",{});n(this,"requestOptions",{});n(this,"fileData",null);this.container=e,this.options=t,this.requestOptions=s,this.createWrapper()}createWrapper(){this.wrapper=document.createElement("div"),this.wrapper.className="vue-office-docx",this.wrapperMain=document.createElement("div"),this.wrapperMain.className="vue-office-docx-main",this.wrapper.appendChild(this.wrapperMain),this.container.appendChild(this.wrapper)}setOptions(e){this.options=e}setRequestOptions(e){this.requestOptions=e}preview(e){return new Promise((t,s)=>{r.getData(e,this.requestOptions).then(async o=>{this.fileData=await r.getBlob(o),r.render(this.fileData,this.wrapperMain,this.options).then(()=>{t()}).catch(a=>{r.render("",this.wrapperMain,this.options),s(a)})}).catch(o=>{r.render("",this.wrapperMain,this.options),s(o)})})}save(e){l(e||`js-preview-docx-${new Date().getTime()}.docx`,this.fileData)}destroy(){this.container.removeChild(this.wrapper),this.container=null,this.wrapper=null,this.wrapperMain=null,this.options=null,this.requestOptions=null}}function f(i,e,t){return new w(i,e,t)}const v={init:f};const q={__name:"JsDocxDemo",setup(i){const e=h(null);return d(()=>{let t=v.init(e.value);t.preview("/vue-office/examples/dist/static/test-files/test.docx").then(s=>{console.log("docx preview done"),setTimeout(()=>{t.preview("/vue-office/examples/dist/static/test-files/test2.docx")},3e3)}).catch(s=>{console.log("err",s)})}),(t,s)=>(u(),m("div",{ref_key:"dom",ref:e},null,512))}};export{q as default}; diff --git a/examples/dist/assets/JsExcelDemo-75fb2839.js b/examples/dist/assets/JsExcelDemo-75fb2839.js new file mode 100644 index 0000000..c1a6324 --- /dev/null +++ b/examples/dist/assets/JsExcelDemo-75fb2839.js @@ -0,0 +1 @@ +var c=Object.defineProperty;var p=(r,e,t)=>e in r?c(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var s=(r,e,t)=>(p(r,typeof e!="symbol"?e+"":e,t),t);import{S as u,a as h,b as d,t as w,c as l,l as x,r as m,g as f}from"./hack-a38f8b6f.js";import{d as k}from"./url-de9b02cf.js";/* empty css */import{r as v,o as b,a as S,c as D}from"./index-846e3dd9.js";import"./_commonjs-dynamic-modules-302442b1.js";const _={minColLength:20};class E{constructor(e,t={},i={}){s(this,"container",null);s(this,"wrapper",null);s(this,"wrapperMain",null);s(this,"options",{});s(this,"requestOptions",{});s(this,"mediasSource",[]);s(this,"workbookDataSource",{_worksheets:[]});s(this,"sheetIndex",1);s(this,"ctx",null);s(this,"xs",null);s(this,"offset",null);s(this,"observer",null);s(this,"fileData",null);this.container=e,this.options={..._,...t},this.requestOptions=i,this.createWrapper(),this.initSpreadsheet(),this.hack()}createWrapper(){this.wrapper=document.createElement("div"),this.wrapper.className="vue-office-excel",this.wrapperMain=document.createElement("div"),this.wrapperMain.className="vue-office-excel-main",this.wrapper.appendChild(this.wrapperMain),this.container.appendChild(this.wrapper)}initSpreadsheet(){this.xs=new u(this.wrapperMain,{mode:"read",showToolbar:!1,showContextmenu:this.options.showContextmenu||!1,view:{height:()=>this.wrapper&&this.wrapper.clientHeight||300,width:()=>this.wrapper&&this.wrapper.clientWidth||1200},row:{height:24,len:100},col:{len:26,width:80,indexWidth:60,minWidth:60},autoFocus:!1}).loadData({});let e=this,t=this.xs.bottombar.swapFunc;this.xs.bottombar.swapFunc=function(a){t.call(e.xs.bottombar,a),e.sheetIndex=a,setTimeout(()=>{e.xs.reRender(),h(e.ctx,e.mediasSource,e.workbookDataSource._worksheets[e.sheetIndex],e.offset)})};let i=this.xs.sheet.editor.clear;this.xs.sheet.editor.clear=function(...a){i.apply(e.xs.sheet.editor,a),setTimeout(()=>{h(e.ctx,e.mediasSource,e.workbookDataSource._worksheets[e.sheetIndex],e.offset)})};let o=this.xs.sheet.editor.setOffset;this.xs.sheet.editor.setOffset=function(...a){o.apply(e.xs.sheet.editor,a),e.offset=a[0],h(e.ctx,e.mediasSource,e.workbookDataSource._worksheets[e.sheetIndex],e.offset)};const n=this.wrapperMain.querySelector("canvas");this.ctx=n.getContext("2d")}renderExcel(e){return this.fileData=e,d(e).then(t=>{if(!t._worksheets||t._worksheets.length===0)throw new Error("未获取到数据,可能文件格式不正确或文件已损坏");const{workbookData:i,medias:o,workbookSource:n}=w(t,this.options);this.mediasSource=o,this.workbookDataSource=n,this.offset=null,this.sheetIndex=0,l(),this.xs.loadData(i),h(this.ctx,this.mediasSource,this.workbookDataSource._worksheets[this.sheetIndex],this.offset)}).catch(t=>(this.mediasSource=[],this.workbookDataSource={_worksheets:[]},l(),this.xs.loadData({}),Promise.reject(t)))}hack(){const e=x.debounce(m,200).bind(this,this.wrapperMain);this.observer=new MutationObserver(e);const t={attributes:!0,childList:!0,subtree:!0};this.observer.observe(this.wrapperMain,t),e(this.wrapperMain)}setOptions(e){this.options=e}setRequestOptions(e){this.requestOptions=e}preview(e){return new Promise((t,i)=>{f(e,this.requestOptions).then(o=>{this.renderExcel(o).then(t).catch(n=>{this.xs.loadData({}),i(n)})}).catch(o=>{this.xs.loadData({}),i(o)})})}save(e){k(e||`js-preview-excel-${new Date().getTime()}.xlsx`,this.fileData)}destroy(){this.observer.disconnect(),this.container.removeChild(this.wrapper),this.container=null,this.wrapper=null,this.wrapperMain=null,this.ctx=null,this.xs=null,this.observer=null,this.options=null,this.requestOptions=null,this.mediasSource=null,this.workbookDataSource=null}}function g(r,e,t){return new E(r,e,t)}const O={init:g},T={__name:"JsExcelDemo",setup(r){const e=v(null);return b(()=>{window.myExcelPreview=O.init(e.value,{}),window.myExcelPreview.preview("/vue-office/examples/dist/static/test-files/test.xlsx").then(t=>{console.log("excel preview done",window.myExcelPreview)}).catch(t=>{console.log("err",t)})}),(t,i)=>(S(),D("div",{ref_key:"dom",ref:e,style:{height:"calc(100vh - 50px)"}},null,512))}};export{T as default}; diff --git a/examples/dist/assets/JsPdfDemo-0872853e.js b/examples/dist/assets/JsPdfDemo-0872853e.js new file mode 100644 index 0000000..0c62507 --- /dev/null +++ b/examples/dist/assets/JsPdfDemo-0872853e.js @@ -0,0 +1 @@ +var V=Object.defineProperty;var y=(Z,I,g)=>I in Z?V(Z,I,{enumerable:!0,configurable:!0,writable:!0,value:g}):Z[I]=g;var c=(Z,I,g)=>(y(Z,typeof I!="symbol"?I+"":I,g),g);import{l as Y,g as u,d as i}from"./url-de9b02cf.js";import{o as L}from"./omit-bc810850.js";/* empty css */import{r as N,o as h,a as R,c as x}from"./index-846e3dd9.js";const s="KCgpPT57InVzZSBzdHJpY3QiO3ZhciBlPXs3NzU3OihlLHQscik9Pnt2YXIgbixhO2Z1bmN0aW9uIGkoZSx0LHIpe3JldHVybih0PWZ1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKGUsdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBlfHxudWxsPT09ZSlyZXR1cm4gZTt2YXIgcj1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09cil7dmFyIG49ci5jYWxsKGUsInN0cmluZyIpO2lmKCJvYmplY3QiIT10eXBlb2YgbilyZXR1cm4gbjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoZSl9KGUpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgdD90OlN0cmluZyh0KX0odCkpaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1yLGV9ZnVuY3Rpb24gcyhlLHQpe2woZSx0KSx0LmFkZChlKX1mdW5jdGlvbiBvKGUsdCxyKXtpZighdC5oYXMoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiByfWZ1bmN0aW9uIGMoZSx0LHIpe2woZSx0KSx0LnNldChlLHIpfWZ1bmN0aW9uIGwoZSx0KXtpZih0LmhhcyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIGgoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5nZXQ/dC5nZXQuY2FsbChlKTp0LnZhbHVlfShlLGQoZSx0LCJnZXQiKSl9ZnVuY3Rpb24gdShlLHQscil7cmV0dXJuIGZ1bmN0aW9uKGUsdCxyKXtpZih0LnNldCl0LnNldC5jYWxsKGUscik7ZWxzZXtpZighdC53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7dC52YWx1ZT1yfX0oZSxkKGUsdCwic2V0Iikscikscn1mdW5jdGlvbiBkKGUsdCxyKXtpZighdC5oYXMoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrcisiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIHQuZ2V0KGUpfXIoNTgzNykscigxNzAzKSxyKDk1NzUpLHIoMjQ3Mikscig4Njc1KSxyKDMxMDUpLHIoMzQwOCkscigyOTU4KSxyKDM0NjIpLHIoMzgyNCkscigyOTc0KSxyKDE0MzkpLHIoNzU4NSkscig1MzE1KSxyKDM5NDgpLHIoNzY1OCkscig4Njc0KSxyKDc3MjcpLHIoNDk0NCkscigzNzkyKSxyKDk3MTQpLHIoMTU1MCkscig0OTE2KSxyKDMxMjMpLHIoMTgxNykscig0NzIzKSxyKDYzMTQpLHIoNTMwNikscig3NjAxKSxyKDEyOTkpLHIoNzYzNSkscig4MjY0KSxyKDcyODcpLHIoOTc0MykscigyNzA3KSxyKDU1ODEpLHIoNzE0NSkscig2Njk5KSxyKDIwMjMpLHIoNjc1NSkscigyODUpLHIoMTYzNykscig2MjI5KSxyKDczMzApLHIoMjA2Mikscig4NzU3KSxyKDkxMzUpLHIoNDEyOSkscig2OTc3KSxyKDEwNTgpLHIoNDYwMykscig4NDUwKSxyKDQ2NzgpLHIoOTYwMSkscigyMjYyKSxyKDIwODcpLHIoNTQxKSxyKDMyMTApLHIoNTgyNykscig1NDM4KSxyKDgyNTUpLHIoNDE5Nykscig1MTI1KSxyKDQ1MDYpLHIoNTEwOSkscig2NDk1KSxyKDg4NjIpLHIoNzg1Mikscig3NzE0KSxyKDI4MDEpLHIoMTE3NCkscig3OTIyKSxlPXIuaG1kKGUpLG49Z2xvYmFsVGhpcyxhPSgpPT4oKCk9Pnt2YXIgZT1bLChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Xb3JrZXJUYXNrPXQuV29ya2VyTWVzc2FnZUhhbmRsZXI9dm9pZCAwLHIoMikscig4NCkscig5Mykscig5NCkscig5Nykscig5OSkscigxMDEpLHIoMTA1KSxyKDEwOCkscigxMTUpLHIoMTE2KSxyKDEyNikscigxMjgpLHIoMTMxKSxyKDEzMykscigxMzUpLHIoMTM3KSxyKDEzOSkscigxNDMpO3ZhciBuPXIoMTQ0KSxhPXIoMTQ5KSxpPXIoMTUwKSxzPXIoMTUyKSxvPXIoMTU2KSxjPXIoMjIyKSxsPXIoMjE2KSxoPXIoMjU3KSx1PXIoMjU4KTtjbGFzcyBke2NvbnN0cnVjdG9yKGUpe3RoaXMubmFtZT1lLHRoaXMudGVybWluYXRlZD0hMSx0aGlzLl9jYXBhYmlsaXR5PW5ldyBuLlByb21pc2VDYXBhYmlsaXR5fWdldCBmaW5pc2hlZCgpe3JldHVybiB0aGlzLl9jYXBhYmlsaXR5LnByb21pc2V9ZmluaXNoKCl7dGhpcy5fY2FwYWJpbGl0eS5yZXNvbHZlKCl9dGVybWluYXRlKCl7dGhpcy50ZXJtaW5hdGVkPSEwfWVuc3VyZU5vdFRlcm1pbmF0ZWQoKXtpZih0aGlzLnRlcm1pbmF0ZWQpdGhyb3cgbmV3IEVycm9yKCJXb3JrZXIgdGFzayB3YXMgdGVybWluYXRlZCIpfX10LldvcmtlclRhc2s9ZDtjbGFzcyBme3N0YXRpYyBzZXR1cChlLHQpe2xldCByPSExO2Uub24oInRlc3QiLChmdW5jdGlvbih0KXtyfHwocj0hMCxlLnNlbmQoInRlc3QiLHQgaW5zdGFuY2VvZiBVaW50OEFycmF5KSl9KSksZS5vbigiY29uZmlndXJlIiwoZnVuY3Rpb24oZSl7KDAsbi5zZXRWZXJib3NpdHlMZXZlbCkoZS52ZXJib3NpdHkpfSkpLGUub24oIkdldERvY1JlcXVlc3QiLChmdW5jdGlvbihlKXtyZXR1cm4gZi5jcmVhdGVEb2N1bWVudEhhbmRsZXIoZSx0KX0pKX1zdGF0aWMgY3JlYXRlRG9jdW1lbnRIYW5kbGVyKGUsdCl7bGV0IHIsZj0hMSxnPW51bGw7Y29uc3QgcD1uZXcgU2V0LG09KDAsbi5nZXRWZXJib3NpdHlMZXZlbCkoKSx7ZG9jSWQ6YixhcGlWZXJzaW9uOnl9PWUsdz0iMy45LjE3OSI7aWYoeSE9PXcpdGhyb3cgbmV3IEVycm9yKCdUaGUgQVBJIHZlcnNpb24gIicuY29uY2F0KHksJyIgZG9lcyBub3QgbWF0Y2ggdGhlIFdvcmtlciB2ZXJzaW9uICInKS5jb25jYXQodywnIi4nKSk7Y29uc3Qgdj1bXTtmb3IoY29uc3QgZSBpbltdKXYucHVzaChlKTtpZih2Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBgQXJyYXkucHJvdG90eXBlYCBjb250YWlucyB1bmV4cGVjdGVkIGVudW1lcmFibGUgcHJvcGVydGllczogIit2LmpvaW4oIiwgIikrIjsgdGh1cyBicmVha2luZyBlLmcuIGBmb3IuLi5pbmAgaXRlcmF0aW9uIG9mIGBBcnJheWBzLiIpO2NvbnN0IHg9YisiX3dvcmtlciI7bGV0IFM9bmV3IGguTWVzc2FnZUhhbmRsZXIoeCxiLHQpO2Z1bmN0aW9uIEEoKXtpZihmKXRocm93IG5ldyBFcnJvcigiV29ya2VyIHdhcyB0ZXJtaW5hdGVkIil9ZnVuY3Rpb24gayhlKXtwLmFkZChlKX1mdW5jdGlvbiBDKGUpe2UuZmluaXNoKCkscC5kZWxldGUoZSl9YXN5bmMgZnVuY3Rpb24gTyhlKXthd2FpdCByLmVuc3VyZURvYygiY2hlY2tIZWFkZXIiKSxhd2FpdCByLmVuc3VyZURvYygicGFyc2VTdGFydFhSZWYiKSxhd2FpdCByLmVuc3VyZURvYygicGFyc2UiLFtlXSksYXdhaXQgci5lbnN1cmVEb2MoImNoZWNrRmlyc3RQYWdlIixbZV0pLGF3YWl0IHIuZW5zdXJlRG9jKCJjaGVja0xhc3RQYWdlIixbZV0pO2NvbnN0IHQ9YXdhaXQgci5lbnN1cmVEb2MoImlzUHVyZVhmYSIpO2lmKHQpe2NvbnN0IGU9bmV3IGQoImxvYWRYZmFGb250cyIpO2soZSksYXdhaXQgUHJvbWlzZS5hbGwoW3IubG9hZFhmYUZvbnRzKFMsZSkuY2F0Y2goKGU9Pnt9KSkudGhlbigoKCk9PkMoZSkpKSxyLmxvYWRYZmFJbWFnZXMoKV0pfWNvbnN0W24sYV09YXdhaXQgUHJvbWlzZS5hbGwoW3IuZW5zdXJlRG9jKCJudW1QYWdlcyIpLHIuZW5zdXJlRG9jKCJmaW5nZXJwcmludHMiKV0pO3JldHVybntudW1QYWdlczpuLGZpbmdlcnByaW50czphLGh0bWxGb3JYZmE6dD9hd2FpdCByLmVuc3VyZURvYygiaHRtbEZvclhmYSIpOm51bGx9fXJldHVybiBTLm9uKCJHZXRQYWdlIiwoZnVuY3Rpb24oZSl7cmV0dXJuIHIuZ2V0UGFnZShlLnBhZ2VJbmRleCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UuYWxsKFtyLmVuc3VyZShlLCJyb3RhdGUiKSxyLmVuc3VyZShlLCJyZWYiKSxyLmVuc3VyZShlLCJ1c2VyVW5pdCIpLHIuZW5zdXJlKGUsInZpZXciKV0pLnRoZW4oKGZ1bmN0aW9uKGUpe2xldFt0LHIsbixhXT1lO3JldHVybntyb3RhdGU6dCxyZWY6cix1c2VyVW5pdDpuLHZpZXc6YX19KSl9KSl9KSksUy5vbigiR2V0UGFnZUluZGV4IiwoZnVuY3Rpb24oZSl7Y29uc3QgdD1pLlJlZi5nZXQoZS5udW0sZS5nZW4pO3JldHVybiByLmVuc3VyZUNhdGFsb2coImdldFBhZ2VJbmRleCIsW3RdKX0pKSxTLm9uKCJHZXREZXN0aW5hdGlvbnMiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJkZXN0aW5hdGlvbnMiKX0pKSxTLm9uKCJHZXREZXN0aW5hdGlvbiIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmVuc3VyZUNhdGFsb2coImdldERlc3RpbmF0aW9uIixbZS5pZF0pfSkpLFMub24oIkdldFBhZ2VMYWJlbHMiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJwYWdlTGFiZWxzIil9KSksUy5vbigiR2V0UGFnZUxheW91dCIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmVuc3VyZUNhdGFsb2coInBhZ2VMYXlvdXQiKX0pKSxTLm9uKCJHZXRQYWdlTW9kZSIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmVuc3VyZUNhdGFsb2coInBhZ2VNb2RlIil9KSksUy5vbigiR2V0Vmlld2VyUHJlZmVyZW5jZXMiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJ2aWV3ZXJQcmVmZXJlbmNlcyIpfSkpLFMub24oIkdldE9wZW5BY3Rpb24iLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJvcGVuQWN0aW9uIil9KSksUy5vbigiR2V0QXR0YWNobWVudHMiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJhdHRhY2htZW50cyIpfSkpLFMub24oIkdldEphdmFTY3JpcHQiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJqYXZhU2NyaXB0Iil9KSksUy5vbigiR2V0RG9jSlNBY3Rpb25zIiwoZnVuY3Rpb24oZSl7cmV0dXJuIHIuZW5zdXJlQ2F0YWxvZygianNBY3Rpb25zIil9KSksUy5vbigiR2V0UGFnZUpTQWN0aW9ucyIsKGZ1bmN0aW9uKGUpe2xldHtwYWdlSW5kZXg6dH09ZTtyZXR1cm4gci5nZXRQYWdlKHQpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiByLmVuc3VyZShlLCJqc0FjdGlvbnMiKX0pKX0pKSxTLm9uKCJHZXRPdXRsaW5lIiwoZnVuY3Rpb24oZSl7cmV0dXJuIHIuZW5zdXJlQ2F0YWxvZygiZG9jdW1lbnRPdXRsaW5lIil9KSksUy5vbigiR2V0T3B0aW9uYWxDb250ZW50Q29uZmlnIiwoZnVuY3Rpb24oZSl7cmV0dXJuIHIuZW5zdXJlQ2F0YWxvZygib3B0aW9uYWxDb250ZW50Q29uZmlnIil9KSksUy5vbigiR2V0UGVybWlzc2lvbnMiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJwZXJtaXNzaW9ucyIpfSkpLFMub24oIkdldE1ldGFkYXRhIiwoZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UuYWxsKFtyLmVuc3VyZURvYygiZG9jdW1lbnRJbmZvIiksci5lbnN1cmVDYXRhbG9nKCJtZXRhZGF0YSIpXSl9KSksUy5vbigiR2V0TWFya0luZm8iLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJtYXJrSW5mbyIpfSkpLFMub24oIkdldERhdGEiLChmdW5jdGlvbihlKXtyZXR1cm4gci5yZXF1ZXN0TG9hZGVkU3RyZWFtKCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuYnl0ZXN9KSl9KSksUy5vbigiR2V0QW5ub3RhdGlvbnMiLChmdW5jdGlvbihlKXtsZXR7cGFnZUluZGV4OnQsaW50ZW50Om59PWU7cmV0dXJuIHIuZ2V0UGFnZSh0KS50aGVuKChmdW5jdGlvbihlKXtjb25zdCByPW5ldyBkKCJHZXRBbm5vdGF0aW9uczogcGFnZSAiLmNvbmNhdCh0KSk7cmV0dXJuIGsociksZS5nZXRBbm5vdGF0aW9uc0RhdGEoUyxyLG4pLnRoZW4oKGU9PihDKHIpLGUpKSwoZT0+e3Rocm93IEMociksZX0pKX0pKX0pKSxTLm9uKCJHZXRGaWVsZE9iamVjdHMiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVEb2MoImZpZWxkT2JqZWN0cyIpfSkpLFMub24oIkhhc0pTQWN0aW9ucyIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmVuc3VyZURvYygiaGFzSlNBY3Rpb25zIil9KSksUy5vbigiR2V0Q2FsY3VsYXRpb25PcmRlcklkcyIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmVuc3VyZURvYygiY2FsY3VsYXRpb25PcmRlcklkcyIpfSkpLFMub24oIlNhdmVEb2N1bWVudCIsKGFzeW5jIGZ1bmN0aW9uKGUpe2xldHtpc1B1cmVYZmE6dCxudW1QYWdlczpzLGFubm90YXRpb25TdG9yYWdlOmMsZmlsZW5hbWU6aH09ZTtjb25zdCB1PVtyLnJlcXVlc3RMb2FkZWRTdHJlYW0oKSxyLmVuc3VyZUNhdGFsb2coImFjcm9Gb3JtIiksci5lbnN1cmVDYXRhbG9nKCJhY3JvRm9ybVJlZiIpLHIuZW5zdXJlRG9jKCJzdGFydFhSZWYiKSxyLmVuc3VyZURvYygibGluZWFyaXphdGlvbiIpXSxmPXQ/bnVsbDooMCxhLmdldE5ld0Fubm90YXRpb25zTWFwKShjKSxnPWF3YWl0IHIuZW5zdXJlRG9jKCJ4cmVmIik7aWYoZil7Y29uc3QgZT1vLkFubm90YXRpb25GYWN0b3J5LmdlbmVyYXRlSW1hZ2VzKGMudmFsdWVzKCksZyxyLmV2YWx1YXRvck9wdGlvbnMuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQpO2Zvcihjb25zdFt0LG5db2YgZil1LnB1c2goci5nZXRQYWdlKHQpLnRoZW4oKHI9Pntjb25zdCBhPW5ldyBkKCJTYXZlIChlZGl0b3IpOiBwYWdlICIuY29uY2F0KHQpKTtyZXR1cm4gci5zYXZlTmV3QW5ub3RhdGlvbnMoUyxhLG4sZSkuZmluYWxseSgoZnVuY3Rpb24oKXtDKGEpfSkpfSkpKX1pZih0KXUucHVzaChyLnNlcmlhbGl6ZVhmYURhdGEoYykpO2Vsc2UgZm9yKGxldCBlPTA7ZTxzO2UrKyl1LnB1c2goci5nZXRQYWdlKGUpLnRoZW4oKGZ1bmN0aW9uKHQpe2NvbnN0IHI9bmV3IGQoIlNhdmU6IHBhZ2UgIi5jb25jYXQoZSkpO3JldHVybiB0LnNhdmUoUyxyLGMpLmZpbmFsbHkoKGZ1bmN0aW9uKCl7QyhyKX0pKX0pKSk7cmV0dXJuIFByb21pc2UuYWxsKHUpLnRoZW4oKGZ1bmN0aW9uKGUpe2xldFtyLGEscyxvLGMsLi4udV09ZSxkPVtdLGY9bnVsbDtpZih0KXtpZihmPXVbMF0sIWYpcmV0dXJuIHIuYnl0ZXN9ZWxzZSBpZihkPXUuZmxhdCgyKSwwPT09ZC5sZW5ndGgpcmV0dXJuIHIuYnl0ZXM7Y29uc3QgcD1zJiZhIGluc3RhbmNlb2YgaS5EaWN0JiZkLnNvbWUoKGU9PmUubmVlZEFwcGVhcmFuY2VzKSksbT1hIGluc3RhbmNlb2YgaS5EaWN0JiZhLmdldCgiWEZBIil8fG51bGw7bGV0IGI9bnVsbCx5PSExO2lmKEFycmF5LmlzQXJyYXkobSkpe2ZvcihsZXQgZT0wLHQ9bS5sZW5ndGg7ZTx0O2UrPTIpImRhdGFzZXRzIj09PW1bZV0mJihiPW1bZSsxXSx5PSEwKTtudWxsPT09YiYmKGI9Zy5nZXROZXdUZW1wb3JhcnlSZWYoKSl9ZWxzZSBtJiYoMCxuLndhcm4pKCJVbnN1cHBvcnRlZCBYRkEgdHlwZS4iKTtsZXQgdz1PYmplY3QuY3JlYXRlKG51bGwpO2lmKGcudHJhaWxlcil7dmFyIHY7Y29uc3QgZT1PYmplY3QuY3JlYXRlKG51bGwpLHQ9Zy50cmFpbGVyLmdldCgiSW5mbyIpfHxudWxsO3QgaW5zdGFuY2VvZiBpLkRpY3QmJnQuZm9yRWFjaCgoKHQscik9Pnsic3RyaW5nIj09dHlwZW9mIHImJihlW3RdPSgwLG4uc3RyaW5nVG9QREZTdHJpbmcpKHIpKX0pKSx3PXtyb290UmVmOmcudHJhaWxlci5nZXRSYXcoIlJvb3QiKXx8bnVsbCxlbmNyeXB0UmVmOmcudHJhaWxlci5nZXRSYXcoIkVuY3J5cHQiKXx8bnVsbCxuZXdSZWY6Zy5nZXROZXdUZW1wb3JhcnlSZWYoKSxpbmZvUmVmOmcudHJhaWxlci5nZXRSYXcoIkluZm8iKXx8bnVsbCxpbmZvOmUsZmlsZUlkczpnLnRyYWlsZXIuZ2V0KCJJRCIpfHxudWxsLHN0YXJ0WFJlZjpjP286bnVsbCE9PSh2PWcubGFzdFhSZWZTdHJlYW1Qb3MpJiZ2b2lkIDAhPT12P3Y6byxmaWxlbmFtZTpofX1yZXR1cm4oMCxsLmluY3JlbWVudGFsVXBkYXRlKSh7b3JpZ2luYWxEYXRhOnIuYnl0ZXMseHJlZkluZm86dyxuZXdSZWZzOmQseHJlZjpnLGhhc1hmYTohIW0seGZhRGF0YXNldHNSZWY6YixoYXNYZmFEYXRhc2V0c0VudHJ5OnksbmVlZEFwcGVhcmFuY2VzOnAsYWNyb0Zvcm1SZWY6cyxhY3JvRm9ybTphLHhmYURhdGE6Zn0pLmZpbmFsbHkoKCgpPT57Zy5yZXNldE5ld1RlbXBvcmFyeVJlZigpfSkpfSkpfSkpLFMub24oIkdldE9wZXJhdG9yTGlzdCIsKGZ1bmN0aW9uKGUsdCl7Y29uc3QgYT1lLnBhZ2VJbmRleDtyLmdldFBhZ2UoYSkudGhlbigoZnVuY3Rpb24ocil7Y29uc3QgaT1uZXcgZCgiR2V0T3BlcmF0b3JMaXN0OiBwYWdlICIuY29uY2F0KGEpKTtrKGkpO2NvbnN0IHM9bT49bi5WZXJib3NpdHlMZXZlbC5JTkZPUz9EYXRlLm5vdygpOjA7ci5nZXRPcGVyYXRvckxpc3Qoe2hhbmRsZXI6UyxzaW5rOnQsdGFzazppLGludGVudDplLmludGVudCxjYWNoZUtleTplLmNhY2hlS2V5LGFubm90YXRpb25TdG9yYWdlOmUuYW5ub3RhdGlvblN0b3JhZ2V9KS50aGVuKChmdW5jdGlvbihlKXtDKGkpLHMmJigwLG4uaW5mbykoInBhZ2U9Ii5jb25jYXQoYSsxLCIgLSBnZXRPcGVyYXRvckxpc3Q6IHRpbWU9IikuY29uY2F0KERhdGUubm93KCktcywibXMsIGxlbj0iKS5jb25jYXQoZS5sZW5ndGgpKSx0LmNsb3NlKCl9KSwoZnVuY3Rpb24oZSl7QyhpKSxpLnRlcm1pbmF0ZWR8fHQuZXJyb3IoZSl9KSl9KSl9KSksUy5vbigiR2V0VGV4dENvbnRlbnQiLChmdW5jdGlvbihlLHQpe2NvbnN0e3BhZ2VJbmRleDphLGluY2x1ZGVNYXJrZWRDb250ZW50OmksZGlzYWJsZU5vcm1hbGl6YXRpb246c309ZTtyLmdldFBhZ2UoYSkudGhlbigoZnVuY3Rpb24oZSl7Y29uc3Qgcj1uZXcgZCgiR2V0VGV4dENvbnRlbnQ6IHBhZ2UgIithKTtrKHIpO2NvbnN0IG89bT49bi5WZXJib3NpdHlMZXZlbC5JTkZPUz9EYXRlLm5vdygpOjA7ZS5leHRyYWN0VGV4dENvbnRlbnQoe2hhbmRsZXI6Uyx0YXNrOnIsc2luazp0LGluY2x1ZGVNYXJrZWRDb250ZW50OmksZGlzYWJsZU5vcm1hbGl6YXRpb246c30pLnRoZW4oKGZ1bmN0aW9uKCl7QyhyKSxvJiYoMCxuLmluZm8pKCJwYWdlPSIuY29uY2F0KGErMSwiIC0gZ2V0VGV4dENvbnRlbnQ6IHRpbWU9IikrKERhdGUubm93KCktbykrIm1zIiksdC5jbG9zZSgpfSksKGZ1bmN0aW9uKGUpe0Mociksci50ZXJtaW5hdGVkfHx0LmVycm9yKGUpfSkpfSkpfSkpLFMub24oIkdldFN0cnVjdFRyZWUiLChmdW5jdGlvbihlKXtyZXR1cm4gci5nZXRQYWdlKGUucGFnZUluZGV4KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmUoZSwiZ2V0U3RydWN0VHJlZSIpfSkpfSkpLFMub24oIkZvbnRGYWxsYmFjayIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmZvbnRGYWxsYmFjayhlLmlkLFMpfSkpLFMub24oIkNsZWFudXAiLChmdW5jdGlvbihlKXtyZXR1cm4gci5jbGVhbnVwKCEwKX0pKSxTLm9uKCJUZXJtaW5hdGUiLChmdW5jdGlvbihlKXtmPSEwO2NvbnN0IHQ9W107aWYocil7ci50ZXJtaW5hdGUobmV3IG4uQWJvcnRFeGNlcHRpb24oIldvcmtlciB3YXMgdGVybWluYXRlZC4iKSk7Y29uc3QgZT1yLmNsZWFudXAoKTt0LnB1c2goZSkscj1udWxsfWVsc2UoMCxjLmNsZWFyR2xvYmFsQ2FjaGVzKSgpO2cmJmcobmV3IG4uQWJvcnRFeGNlcHRpb24oIldvcmtlciB3YXMgdGVybWluYXRlZC4iKSk7Zm9yKGNvbnN0IGUgb2YgcCl0LnB1c2goZS5maW5pc2hlZCksZS50ZXJtaW5hdGUoKTtyZXR1cm4gUHJvbWlzZS5hbGwodCkudGhlbigoZnVuY3Rpb24oKXtTLmRlc3Ryb3koKSxTPW51bGx9KSl9KSksUy5vbigiUmVhZHkiLChmdW5jdGlvbih0KXshZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXtBKCksUy5zZW5kKCJHZXREb2MiLHtwZGZJbmZvOmV9KX1mdW5jdGlvbiBpKGUpe2lmKEEoKSxlIGluc3RhbmNlb2Ygbi5QYXNzd29yZEV4Y2VwdGlvbil7Y29uc3QgdD1uZXcgZCgiUGFzc3dvcmRFeGNlcHRpb246IHJlc3BvbnNlICIuY29uY2F0KGUuY29kZSkpO2sodCksUy5zZW5kV2l0aFByb21pc2UoIlBhc3N3b3JkUmVxdWVzdCIsZSkudGhlbigoZnVuY3Rpb24oZSl7bGV0e3Bhc3N3b3JkOm59PWU7Qyh0KSxyLnVwZGF0ZVBhc3N3b3JkKG4pLG8oKX0pKS5jYXRjaCgoZnVuY3Rpb24oKXtDKHQpLFMuc2VuZCgiRG9jRXhjZXB0aW9uIixlKX0pKX1lbHNlIGUgaW5zdGFuY2VvZiBuLkludmFsaWRQREZFeGNlcHRpb258fGUgaW5zdGFuY2VvZiBuLk1pc3NpbmdQREZFeGNlcHRpb258fGUgaW5zdGFuY2VvZiBuLlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbnx8ZSBpbnN0YW5jZW9mIG4uVW5rbm93bkVycm9yRXhjZXB0aW9uP1Muc2VuZCgiRG9jRXhjZXB0aW9uIixlKTpTLnNlbmQoIkRvY0V4Y2VwdGlvbiIsbmV3IG4uVW5rbm93bkVycm9yRXhjZXB0aW9uKGUubWVzc2FnZSxlLnRvU3RyaW5nKCkpKX1mdW5jdGlvbiBvKCl7QSgpLE8oITEpLnRoZW4odCwoZnVuY3Rpb24oZSl7QSgpLGUgaW5zdGFuY2VvZiBhLlhSZWZQYXJzZUV4Y2VwdGlvbj9yLnJlcXVlc3RMb2FkZWRTdHJlYW0oKS50aGVuKChmdW5jdGlvbigpe0EoKSxPKCEwKS50aGVuKHQsaSl9KSk6aShlKX0pKX1BKCksZnVuY3Rpb24oZSl7bGV0e2RhdGE6dCxwYXNzd29yZDpyLGRpc2FibGVBdXRvRmV0Y2g6aSxyYW5nZUNodW5rU2l6ZTpvLGxlbmd0aDpjLGRvY0Jhc2VVcmw6bCxlbmFibGVYZmE6aCxldmFsdWF0b3JPcHRpb25zOmR9PWU7Y29uc3QgZj17c291cmNlOm51bGwsZGlzYWJsZUF1dG9GZXRjaDppLGRvY0Jhc2VVcmw6bCxkb2NJZDpiLGVuYWJsZVhmYTpoLGV2YWx1YXRvck9wdGlvbnM6ZCxoYW5kbGVyOlMsbGVuZ3RoOmMscGFzc3dvcmQ6cixyYW5nZUNodW5rU2l6ZTpvfSxwPW5ldyBuLlByb21pc2VDYXBhYmlsaXR5O2xldCBtO2lmKHQpe3RyeXtmLnNvdXJjZT10LG09bmV3IHMuTG9jYWxQZGZNYW5hZ2VyKGYpLHAucmVzb2x2ZShtKX1jYXRjaChlKXtwLnJlamVjdChlKX1yZXR1cm4gcC5wcm9taXNlfWxldCB5LHc9W107dHJ5e3k9bmV3IHUuUERGV29ya2VyU3RyZWFtKFMpfWNhdGNoKGUpe3JldHVybiBwLnJlamVjdChlKSxwLnByb21pc2V9Y29uc3Qgdj15LmdldEZ1bGxSZWFkZXIoKTt2LmhlYWRlcnNSZWFkeS50aGVuKChmdW5jdGlvbigpe2lmKHYuaXNSYW5nZVN1cHBvcnRlZCl7Zi5zb3VyY2U9eSxmLmxlbmd0aD12LmNvbnRlbnRMZW5ndGgsZi5kaXNhYmxlQXV0b0ZldGNofHwoZi5kaXNhYmxlQXV0b0ZldGNoPXYuaXNTdHJlYW1pbmdTdXBwb3J0ZWQpLG09bmV3IHMuTmV0d29ya1BkZk1hbmFnZXIoZik7Zm9yKGNvbnN0IGUgb2YgdyltLnNlbmRQcm9ncmVzc2l2ZURhdGEoZSk7dz1bXSxwLnJlc29sdmUobSksZz1udWxsfX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7cC5yZWplY3QoZSksZz1udWxsfSkpO2xldCB4PTA7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihlLHQpe3YucmVhZCgpLnRoZW4oKGZ1bmN0aW9uIGUocil7bGV0e3ZhbHVlOmksZG9uZTpvfT1yO3RyeXtpZihBKCksbylyZXR1cm4gbXx8ZnVuY3Rpb24oKXtjb25zdCBlPSgwLGEuYXJyYXlCdWZmZXJzVG9CeXRlcykodyk7YyYmZS5sZW5ndGghPT1jJiYoMCxuLndhcm4pKCJyZXBvcnRlZCBIVFRQIGxlbmd0aCBpcyBkaWZmZXJlbnQgZnJvbSBhY3R1YWwiKTt0cnl7Zi5zb3VyY2U9ZSxtPW5ldyBzLkxvY2FsUGRmTWFuYWdlcihmKSxwLnJlc29sdmUobSl9Y2F0Y2goZSl7cC5yZWplY3QoZSl9dz1bXX0oKSx2b2lkKGc9bnVsbCk7eCs9aS5ieXRlTGVuZ3RoLHYuaXNTdHJlYW1pbmdTdXBwb3J0ZWR8fFMuc2VuZCgiRG9jUHJvZ3Jlc3MiLHtsb2FkZWQ6eCx0b3RhbDpNYXRoLm1heCh4LHYuY29udGVudExlbmd0aHx8MCl9KSxtP20uc2VuZFByb2dyZXNzaXZlRGF0YShpKTp3LnB1c2goaSksdi5yZWFkKCkudGhlbihlLHQpfWNhdGNoKHIpe3Qocil9fSksdCl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3AucmVqZWN0KGUpLGc9bnVsbH0pKSxnPWZ1bmN0aW9uKGUpe3kuY2FuY2VsQWxsUmVxdWVzdHMoZSl9LHAucHJvbWlzZX0oZSkudGhlbigoZnVuY3Rpb24oZSl7aWYoZil0aHJvdyBlLnRlcm1pbmF0ZShuZXcgbi5BYm9ydEV4Y2VwdGlvbigiV29ya2VyIHdhcyB0ZXJtaW5hdGVkLiIpKSxuZXcgRXJyb3IoIldvcmtlciB3YXMgdGVybWluYXRlZCIpO3I9ZSxyLnJlcXVlc3RMb2FkZWRTdHJlYW0oITApLnRoZW4oKGU9PntTLnNlbmQoIkRhdGFMb2FkZWQiLHtsZW5ndGg6ZS5ieXRlcy5ieXRlTGVuZ3RofSl9KSl9KSkudGhlbihvLGkpfShlKSxlPW51bGx9KSkseH1zdGF0aWMgaW5pdGlhbGl6ZUZyb21Qb3J0KGUpe2NvbnN0IHQ9bmV3IGguTWVzc2FnZUhhbmRsZXIoIndvcmtlciIsIm1haW4iLGUpO2Yuc2V0dXAodCxlKSx0LnNlbmQoInJlYWR5IixudWxsKX19dC5Xb3JrZXJNZXNzYWdlSGFuZGxlcj1mLCJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93JiYhbi5pc05vZGVKUyYmInVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmJiZmdW5jdGlvbihlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZS5wb3N0TWVzc2FnZSYmIm9ubWVzc2FnZSJpbiBlfShzZWxmKSYmZi5pbml0aWFsaXplRnJvbVBvcnQoc2VsZil9LChlLHQscik9Pnt2YXIgbj1yKDMpLGE9cig0KSxpPXIoNjkpLHM9cig3MCksbz0iV2ViQXNzZW1ibHkiLGM9YVtvXSxsPTchPT1FcnJvcigiZSIse2NhdXNlOjd9KS5jYXVzZSxoPWZ1bmN0aW9uKGUsdCl7dmFyIHI9e307cltlXT1zKGUsdCxsKSxuKHtnbG9iYWw6ITAsY29uc3RydWN0b3I6ITAsYXJpdHk6MSxmb3JjZWQ6bH0scil9LHU9ZnVuY3Rpb24oZSx0KXtpZihjJiZjW2VdKXt2YXIgcj17fTtyW2VdPXMobysiLiIrZSx0LGwpLG4oe3RhcmdldDpvLHN0YXQ6ITAsY29uc3RydWN0b3I6ITAsYXJpdHk6MSxmb3JjZWQ6bH0scil9fTtoKCJFcnJvciIsKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaShlLHRoaXMsYXJndW1lbnRzKX19KSksaCgiRXZhbEVycm9yIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpKGUsdGhpcyxhcmd1bWVudHMpfX0pKSxoKCJSYW5nZUVycm9yIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpKGUsdGhpcyxhcmd1bWVudHMpfX0pKSxoKCJSZWZlcmVuY2VFcnJvciIsKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaShlLHRoaXMsYXJndW1lbnRzKX19KSksaCgiU3ludGF4RXJyb3IiLChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGkoZSx0aGlzLGFyZ3VtZW50cyl9fSkpLGgoIlR5cGVFcnJvciIsKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaShlLHRoaXMsYXJndW1lbnRzKX19KSksaCgiVVJJRXJyb3IiLChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGkoZSx0aGlzLGFyZ3VtZW50cyl9fSkpLHUoIkNvbXBpbGVFcnJvciIsKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaShlLHRoaXMsYXJndW1lbnRzKX19KSksdSgiTGlua0Vycm9yIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpKGUsdGhpcyxhcmd1bWVudHMpfX0pKSx1KCJSdW50aW1lRXJyb3IiLChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGkoZSx0aGlzLGFyZ3VtZW50cyl9fSkpfSwoZSx0LHIpPT57dmFyIG49cig0KSxhPXIoNSkuZixpPXIoNDQpLHM9cig0OCksbz1yKDM4KSxjPXIoNTYpLGw9cig2OCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIHIsaCx1LGQsZixnPWUudGFyZ2V0LHA9ZS5nbG9iYWwsbT1lLnN0YXQ7aWYocj1wP246bT9uW2ddfHxvKGcse30pOihuW2ddfHx7fSkucHJvdG90eXBlKWZvcihoIGluIHQpe2lmKGQ9dFtoXSx1PWUuZG9udENhbGxHZXRTZXQ/KGY9YShyLGgpKSYmZi52YWx1ZTpyW2hdLCFsKHA/aDpnKyhtPyIuIjoiIyIpK2gsZS5mb3JjZWQpJiZ2b2lkIDAhPT11KXtpZih0eXBlb2YgZD09dHlwZW9mIHUpY29udGludWU7YyhkLHUpfShlLnNoYW18fHUmJnUuc2hhbSkmJmkoZCwic2hhbSIsITApLHMocixoLGQsZSl9fX0sZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuTWF0aD09TWF0aCYmZX07ZS5leHBvcnRzPXQoIm9iamVjdCI9PXR5cGVvZiBnbG9iYWxUaGlzJiZnbG9iYWxUaGlzKXx8dCgib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93KXx8dCgib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYpfHx0KCJvYmplY3QiPT10eXBlb2Ygci5nJiZyLmcpfHxmdW5jdGlvbigpe3JldHVybiB0aGlzfSgpfHx0aGlzfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpfSwoZSx0LHIpPT57dmFyIG49cig2KSxhPXIoOCksaT1yKDEwKSxzPXIoMTEpLG89cigxMiksYz1yKDE4KSxsPXIoMzkpLGg9cig0MiksdT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO3QuZj1uP3U6ZnVuY3Rpb24oZSx0KXtpZihlPW8oZSksdD1jKHQpLGgpdHJ5e3JldHVybiB1KGUsdCl9Y2F0Y2goZSl7fWlmKGwoZSx0KSlyZXR1cm4gcyghYShpLmYsZSx0KSxlW3RdKX19LChlLHQscik9Pnt2YXIgbj1yKDcpO2UuZXhwb3J0cz0hbigoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LDEse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pWzFdfSkpfSxlPT57ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4hIWUoKX1jYXRjaChlKXtyZXR1cm4hMH19fSwoZSx0LHIpPT57dmFyIG49cig5KSxhPUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO2UuZXhwb3J0cz1uP2EuYmluZChhKTpmdW5jdGlvbigpe3JldHVybiBhLmFwcGx5KGEsYXJndW1lbnRzKX19LChlLHQscik9Pnt2YXIgbj1yKDcpO2UuZXhwb3J0cz0hbigoZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbigpe30uYmluZCgpO3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiBlfHxlLmhhc093blByb3BlcnR5KCJwcm90b3R5cGUiKX0pKX0sKGUsdCk9Pnt2YXIgcj17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsYT1uJiYhci5jYWxsKHsxOjJ9LDEpO3QuZj1hP2Z1bmN0aW9uKGUpe3ZhciB0PW4odGhpcyxlKTtyZXR1cm4hIXQmJnQuZW51bWVyYWJsZX06cn0sZT0+e2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybntlbnVtZXJhYmxlOiEoMSZlKSxjb25maWd1cmFibGU6ISgyJmUpLHdyaXRhYmxlOiEoNCZlKSx2YWx1ZTp0fX19LChlLHQscik9Pnt2YXIgbj1yKDEzKSxhPXIoMTYpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gbihhKGUpKX19LChlLHQscik9Pnt2YXIgbj1yKDE0KSxhPXIoNyksaT1yKDE1KSxzPU9iamVjdCxvPW4oIiIuc3BsaXQpO2UuZXhwb3J0cz1hKChmdW5jdGlvbigpe3JldHVybiFzKCJ6IikucHJvcGVydHlJc0VudW1lcmFibGUoMCl9KSk/ZnVuY3Rpb24oZSl7cmV0dXJuIlN0cmluZyI9PWkoZSk/byhlLCIiKTpzKGUpfTpzfSwoZSx0LHIpPT57dmFyIG49cig5KSxhPUZ1bmN0aW9uLnByb3RvdHlwZSxpPWEuY2FsbCxzPW4mJmEuYmluZC5iaW5kKGksaSk7ZS5leHBvcnRzPW4/czpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gaS5hcHBseShlLGFyZ3VtZW50cyl9fX0sKGUsdCxyKT0+e3ZhciBuPXIoMTQpLGE9bih7fS50b1N0cmluZyksaT1uKCIiLnNsaWNlKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGkoYShlKSw4LC0xKX19LChlLHQscik9Pnt2YXIgbj1yKDE3KSxhPVR5cGVFcnJvcjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYobihlKSl0aHJvdyBhKCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAiK2UpO3JldHVybiBlfX0sZT0+e2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZX19LChlLHQscik9Pnt2YXIgbj1yKDE5KSxhPXIoMjMpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1uKGUsInN0cmluZyIpO3JldHVybiBhKHQpP3Q6dCsiIn19LChlLHQscik9Pnt2YXIgbj1yKDgpLGE9cigyMCksaT1yKDIzKSxzPXIoMzApLG89cigzMyksYz1yKDM0KSxsPVR5cGVFcnJvcixoPWMoInRvUHJpbWl0aXZlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYoIWEoZSl8fGkoZSkpcmV0dXJuIGU7dmFyIHIsYz1zKGUsaCk7aWYoYyl7aWYodm9pZCAwPT09dCYmKHQ9ImRlZmF1bHQiKSxyPW4oYyxlLHQpLCFhKHIpfHxpKHIpKXJldHVybiByO3Rocm93IGwoIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfXJldHVybiB2b2lkIDA9PT10JiYodD0ibnVtYmVyIiksbyhlLHQpfX0sKGUsdCxyKT0+e3ZhciBuPXIoMjEpLGE9cigyMiksaT1hLmFsbDtlLmV4cG9ydHM9YS5JU19IVE1MRERBP2Z1bmN0aW9uKGUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgZT9udWxsIT09ZTpuKGUpfHxlPT09aX06ZnVuY3Rpb24oZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlP251bGwhPT1lOm4oZSl9fSwoZSx0LHIpPT57dmFyIG49cigyMiksYT1uLmFsbDtlLmV4cG9ydHM9bi5JU19IVE1MRERBP2Z1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlfHxlPT09YX06ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGV9fSxlPT57dmFyIHQ9Im9iamVjdCI9PXR5cGVvZiBkb2N1bWVudCYmZG9jdW1lbnQuYWxsLHI9dm9pZCAwPT09dCYmdm9pZCAwIT09dDtlLmV4cG9ydHM9e2FsbDp0LElTX0hUTUxEREE6cn19LChlLHQscik9Pnt2YXIgbj1yKDI0KSxhPXIoMjEpLGk9cigyNSkscz1yKDI2KSxvPU9iamVjdDtlLmV4cG9ydHM9cz9mdW5jdGlvbihlKXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3ZhciB0PW4oIlN5bWJvbCIpO3JldHVybiBhKHQpJiZpKHQucHJvdG90eXBlLG8oZSkpfX0sKGUsdCxyKT0+e3ZhciBuPXIoNCksYT1yKDIxKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyPyhyPW5bZV0sYShyKT9yOnZvaWQgMCk6bltlXSYmbltlXVt0XTt2YXIgcn19LChlLHQscik9Pnt2YXIgbj1yKDE0KTtlLmV4cG9ydHM9bih7fS5pc1Byb3RvdHlwZU9mKX0sKGUsdCxyKT0+e3ZhciBuPXIoMjcpO2UuZXhwb3J0cz1uJiYhU3ltYm9sLnNoYW0mJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yfSwoZSx0LHIpPT57dmFyIG49cigyOCksYT1yKDcpLGk9cig0KS5TdHJpbmc7ZS5leHBvcnRzPSEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmIWEoKGZ1bmN0aW9uKCl7dmFyIGU9U3ltYm9sKCk7cmV0dXJuIWkoZSl8fCEoT2JqZWN0KGUpaW5zdGFuY2VvZiBTeW1ib2wpfHwhU3ltYm9sLnNoYW0mJm4mJm48NDF9KSl9LChlLHQscik9Pnt2YXIgbixhLGk9cig0KSxzPXIoMjkpLG89aS5wcm9jZXNzLGM9aS5EZW5vLGw9byYmby52ZXJzaW9uc3x8YyYmYy52ZXJzaW9uLGg9bCYmbC52ODtoJiYoYT0obj1oLnNwbGl0KCIuIikpWzBdPjAmJm5bMF08ND8xOisoblswXStuWzFdKSksIWEmJnMmJighKG49cy5tYXRjaCgvRWRnZVwvKFxkKykvKSl8fG5bMV0+PTc0KSYmKG49cy5tYXRjaCgvQ2hyb21lXC8oXGQrKS8pKSYmKGE9K25bMV0pLGUuZXhwb3J0cz1hfSxlPT57ZS5leHBvcnRzPSJ1bmRlZmluZWQiIT10eXBlb2YgbmF2aWdhdG9yJiZTdHJpbmcobmF2aWdhdG9yLnVzZXJBZ2VudCl8fCIifSwoZSx0LHIpPT57dmFyIG49cigzMSksYT1yKDE3KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcj1lW3RdO3JldHVybiBhKHIpP3ZvaWQgMDpuKHIpfX0sKGUsdCxyKT0+e3ZhciBuPXIoMjEpLGE9cigzMiksaT1UeXBlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKG4oZSkpcmV0dXJuIGU7dGhyb3cgaShhKGUpKyIgaXMgbm90IGEgZnVuY3Rpb24iKX19LGU9Pnt2YXIgdD1TdHJpbmc7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4gdChlKX1jYXRjaChlKXtyZXR1cm4iT2JqZWN0In19fSwoZSx0LHIpPT57dmFyIG49cig4KSxhPXIoMjEpLGk9cigyMCkscz1UeXBlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbztpZigic3RyaW5nIj09PXQmJmEocj1lLnRvU3RyaW5nKSYmIWkobz1uKHIsZSkpKXJldHVybiBvO2lmKGEocj1lLnZhbHVlT2YpJiYhaShvPW4ocixlKSkpcmV0dXJuIG87aWYoInN0cmluZyIhPT10JiZhKHI9ZS50b1N0cmluZykmJiFpKG89bihyLGUpKSlyZXR1cm4gbzt0aHJvdyBzKCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWUiKX19LChlLHQscik9Pnt2YXIgbj1yKDQpLGE9cigzNSksaT1yKDM5KSxzPXIoNDEpLG89cigyNyksYz1yKDI2KSxsPW4uU3ltYm9sLGg9YSgid2tzIiksdT1jP2wuZm9yfHxsOmwmJmwud2l0aG91dFNldHRlcnx8cztlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGkoaCxlKXx8KGhbZV09byYmaShsLGUpP2xbZV06dSgiU3ltYm9sLiIrZSkpLGhbZV19fSwoZSx0LHIpPT57dmFyIG49cigzNiksYT1yKDM3KTsoZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGFbZV18fChhW2VdPXZvaWQgMCE9PXQ/dDp7fSl9KSgidmVyc2lvbnMiLFtdKS5wdXNoKHt2ZXJzaW9uOiIzLjMxLjEiLG1vZGU6bj8icHVyZSI6Imdsb2JhbCIsY29weXJpZ2h0OiLCqSAyMDE0LTIwMjMgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSkiLGxpY2Vuc2U6Imh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvdjMuMzEuMS9MSUNFTlNFIixzb3VyY2U6Imh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzIn0pfSxlPT57ZS5leHBvcnRzPSExfSwoZSx0LHIpPT57dmFyIG49cig0KSxhPXIoMzgpLGk9Il9fY29yZS1qc19zaGFyZWRfXyIscz1uW2ldfHxhKGkse30pO2UuZXhwb3J0cz1zfSwoZSx0LHIpPT57dmFyIG49cig0KSxhPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt0cnl7YShuLGUse3ZhbHVlOnQsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSl9Y2F0Y2gocil7bltlXT10fXJldHVybiB0fX0sKGUsdCxyKT0+e3ZhciBuPXIoMTQpLGE9cig0MCksaT1uKHt9Lmhhc093blByb3BlcnR5KTtlLmV4cG9ydHM9T2JqZWN0Lmhhc093bnx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaShhKGUpLHQpfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTYpLGE9T2JqZWN0O2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gYShuKGUpKX19LChlLHQscik9Pnt2YXIgbj1yKDE0KSxhPTAsaT1NYXRoLnJhbmRvbSgpLHM9bigxLi50b1N0cmluZyk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiJTeW1ib2woIisodm9pZCAwPT09ZT8iIjplKSsiKV8iK3MoKythK2ksMzYpfX0sKGUsdCxyKT0+e3ZhciBuPXIoNiksYT1yKDcpLGk9cig0Myk7ZS5leHBvcnRzPSFuJiYhYSgoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KGkoImRpdiIpLCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pKX0sKGUsdCxyKT0+e3ZhciBuPXIoNCksYT1yKDIwKSxpPW4uZG9jdW1lbnQscz1hKGkpJiZhKGkuY3JlYXRlRWxlbWVudCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBzP2kuY3JlYXRlRWxlbWVudChlKTp7fX19LChlLHQscik9Pnt2YXIgbj1yKDYpLGE9cig0NSksaT1yKDExKTtlLmV4cG9ydHM9bj9mdW5jdGlvbihlLHQscil7cmV0dXJuIGEuZihlLHQsaSgxLHIpKX06ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlW3RdPXIsZX19LChlLHQscik9Pnt2YXIgbj1yKDYpLGE9cig0MiksaT1yKDQ2KSxzPXIoNDcpLG89cigxOCksYz1UeXBlRXJyb3IsbD1PYmplY3QuZGVmaW5lUHJvcGVydHksaD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLHU9ImVudW1lcmFibGUiLGQ9ImNvbmZpZ3VyYWJsZSIsZj0id3JpdGFibGUiO3QuZj1uP2k/ZnVuY3Rpb24oZSx0LHIpe2lmKHMoZSksdD1vKHQpLHMociksImZ1bmN0aW9uIj09dHlwZW9mIGUmJiJwcm90b3R5cGUiPT09dCYmInZhbHVlImluIHImJmYgaW4gciYmIXJbZl0pe3ZhciBuPWgoZSx0KTtuJiZuW2ZdJiYoZVt0XT1yLnZhbHVlLHI9e2NvbmZpZ3VyYWJsZTpkIGluIHI/cltkXTpuW2RdLGVudW1lcmFibGU6dSBpbiByP3JbdV06blt1XSx3cml0YWJsZTohMX0pfXJldHVybiBsKGUsdCxyKX06bDpmdW5jdGlvbihlLHQscil7aWYocyhlKSx0PW8odCkscyhyKSxhKXRyeXtyZXR1cm4gbChlLHQscil9Y2F0Y2goZSl7fWlmKCJnZXQiaW4gcnx8InNldCJpbiByKXRocm93IGMoIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIik7cmV0dXJuInZhbHVlImluIHImJihlW3RdPXIudmFsdWUpLGV9fSwoZSx0LHIpPT57dmFyIG49cig2KSxhPXIoNyk7ZS5leHBvcnRzPW4mJmEoKGZ1bmN0aW9uKCl7cmV0dXJuIDQyIT1PYmplY3QuZGVmaW5lUHJvcGVydHkoKGZ1bmN0aW9uKCl7fSksInByb3RvdHlwZSIse3ZhbHVlOjQyLHdyaXRhYmxlOiExfSkucHJvdG90eXBlfSkpfSwoZSx0LHIpPT57dmFyIG49cigyMCksYT1TdHJpbmcsaT1UeXBlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKG4oZSkpcmV0dXJuIGU7dGhyb3cgaShhKGUpKyIgaXMgbm90IGFuIG9iamVjdCIpfX0sKGUsdCxyKT0+e3ZhciBuPXIoMjEpLGE9cig0NSksaT1yKDQ5KSxzPXIoMzgpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQscixvKXtvfHwobz17fSk7dmFyIGM9by5lbnVtZXJhYmxlLGw9dm9pZCAwIT09by5uYW1lP28ubmFtZTp0O2lmKG4ocikmJmkocixsLG8pLG8uZ2xvYmFsKWM/ZVt0XT1yOnModCxyKTtlbHNle3RyeXtvLnVuc2FmZT9lW3RdJiYoYz0hMCk6ZGVsZXRlIGVbdF19Y2F0Y2goZSl7fWM/ZVt0XT1yOmEuZihlLHQse3ZhbHVlOnIsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6IW8ubm9uQ29uZmlndXJhYmxlLHdyaXRhYmxlOiFvLm5vbldyaXRhYmxlfSl9cmV0dXJuIGV9fSwoZSx0LHIpPT57dmFyIG49cigxNCksYT1yKDcpLGk9cigyMSkscz1yKDM5KSxvPXIoNiksYz1yKDUwKS5DT05GSUdVUkFCTEUsbD1yKDUxKSxoPXIoNTIpLHU9aC5lbmZvcmNlLGQ9aC5nZXQsZj1TdHJpbmcsZz1PYmplY3QuZGVmaW5lUHJvcGVydHkscD1uKCIiLnNsaWNlKSxtPW4oIiIucmVwbGFjZSksYj1uKFtdLmpvaW4pLHk9byYmIWEoKGZ1bmN0aW9uKCl7cmV0dXJuIDghPT1nKChmdW5jdGlvbigpe30pLCJsZW5ndGgiLHt2YWx1ZTo4fSkubGVuZ3RofSkpLHc9U3RyaW5nKFN0cmluZykuc3BsaXQoIlN0cmluZyIpLHY9ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXsiU3ltYm9sKCI9PT1wKGYodCksMCw3KSYmKHQ9IlsiK20oZih0KSwvXlN5bWJvbFwoKFteKV0qKVwpLywiJDEiKSsiXSIpLHImJnIuZ2V0dGVyJiYodD0iZ2V0ICIrdCksciYmci5zZXR0ZXImJih0PSJzZXQgIit0KSwoIXMoZSwibmFtZSIpfHxjJiZlLm5hbWUhPT10KSYmKG8/ZyhlLCJuYW1lIix7dmFsdWU6dCxjb25maWd1cmFibGU6ITB9KTplLm5hbWU9dCkseSYmciYmcyhyLCJhcml0eSIpJiZlLmxlbmd0aCE9PXIuYXJpdHkmJmcoZSwibGVuZ3RoIix7dmFsdWU6ci5hcml0eX0pO3RyeXtyJiZzKHIsImNvbnN0cnVjdG9yIikmJnIuY29uc3RydWN0b3I/byYmZyhlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pOmUucHJvdG90eXBlJiYoZS5wcm90b3R5cGU9dm9pZCAwKX1jYXRjaChlKXt9dmFyIG49dShlKTtyZXR1cm4gcyhuLCJzb3VyY2UiKXx8KG4uc291cmNlPWIodywic3RyaW5nIj09dHlwZW9mIHQ/dDoiIikpLGV9O0Z1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZz12KChmdW5jdGlvbigpe3JldHVybiBpKHRoaXMpJiZkKHRoaXMpLnNvdXJjZXx8bCh0aGlzKX0pLCJ0b1N0cmluZyIpfSwoZSx0LHIpPT57dmFyIG49cig2KSxhPXIoMzkpLGk9RnVuY3Rpb24ucHJvdG90eXBlLHM9biYmT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixvPWEoaSwibmFtZSIpLGM9byYmInNvbWV0aGluZyI9PT1mdW5jdGlvbigpe30ubmFtZSxsPW8mJighbnx8biYmcyhpLCJuYW1lIikuY29uZmlndXJhYmxlKTtlLmV4cG9ydHM9e0VYSVNUUzpvLFBST1BFUjpjLENPTkZJR1VSQUJMRTpsfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTQpLGE9cigyMSksaT1yKDM3KSxzPW4oRnVuY3Rpb24udG9TdHJpbmcpO2EoaS5pbnNwZWN0U291cmNlKXx8KGkuaW5zcGVjdFNvdXJjZT1mdW5jdGlvbihlKXtyZXR1cm4gcyhlKX0pLGUuZXhwb3J0cz1pLmluc3BlY3RTb3VyY2V9LChlLHQscik9Pnt2YXIgbixhLGkscz1yKDUzKSxvPXIoNCksYz1yKDIwKSxsPXIoNDQpLGg9cigzOSksdT1yKDM3KSxkPXIoNTQpLGY9cig1NSksZz0iT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQiLHA9by5UeXBlRXJyb3IsbT1vLldlYWtNYXA7aWYoc3x8dS5zdGF0ZSl7dmFyIGI9dS5zdGF0ZXx8KHUuc3RhdGU9bmV3IG0pO2IuZ2V0PWIuZ2V0LGIuaGFzPWIuaGFzLGIuc2V0PWIuc2V0LG49ZnVuY3Rpb24oZSx0KXtpZihiLmhhcyhlKSl0aHJvdyBwKGcpO3JldHVybiB0LmZhY2FkZT1lLGIuc2V0KGUsdCksdH0sYT1mdW5jdGlvbihlKXtyZXR1cm4gYi5nZXQoZSl8fHt9fSxpPWZ1bmN0aW9uKGUpe3JldHVybiBiLmhhcyhlKX19ZWxzZXt2YXIgeT1kKCJzdGF0ZSIpO2ZbeV09ITAsbj1mdW5jdGlvbihlLHQpe2lmKGgoZSx5KSl0aHJvdyBwKGcpO3JldHVybiB0LmZhY2FkZT1lLGwoZSx5LHQpLHR9LGE9ZnVuY3Rpb24oZSl7cmV0dXJuIGgoZSx5KT9lW3ldOnt9fSxpPWZ1bmN0aW9uKGUpe3JldHVybiBoKGUseSl9fWUuZXhwb3J0cz17c2V0Om4sZ2V0OmEsaGFzOmksZW5mb3JjZTpmdW5jdGlvbihlKXtyZXR1cm4gaShlKT9hKGUpOm4oZSx7fSl9LGdldHRlckZvcjpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIHI7aWYoIWModCl8fChyPWEodCkpLnR5cGUhPT1lKXRocm93IHAoIkluY29tcGF0aWJsZSByZWNlaXZlciwgIitlKyIgcmVxdWlyZWQiKTtyZXR1cm4gcn19fX0sKGUsdCxyKT0+e3ZhciBuPXIoNCksYT1yKDIxKSxpPW4uV2Vha01hcDtlLmV4cG9ydHM9YShpKSYmL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhpKSl9LChlLHQscik9Pnt2YXIgbj1yKDM1KSxhPXIoNDEpLGk9bigia2V5cyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gaVtlXXx8KGlbZV09YShlKSl9fSxlPT57ZS5leHBvcnRzPXt9fSwoZSx0LHIpPT57dmFyIG49cigzOSksYT1yKDU3KSxpPXIoNSkscz1yKDQ1KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgbz1hKHQpLGM9cy5mLGw9aS5mLGg9MDtoPG8ubGVuZ3RoO2grKyl7dmFyIHU9b1toXTtuKGUsdSl8fHImJm4ocix1KXx8YyhlLHUsbCh0LHUpKX19fSwoZSx0LHIpPT57dmFyIG49cigyNCksYT1yKDE0KSxpPXIoNTgpLHM9cig2Nyksbz1yKDQ3KSxjPWEoW10uY29uY2F0KTtlLmV4cG9ydHM9bigiUmVmbGVjdCIsIm93bktleXMiKXx8ZnVuY3Rpb24oZSl7dmFyIHQ9aS5mKG8oZSkpLHI9cy5mO3JldHVybiByP2ModCxyKGUpKTp0fX0sKGUsdCxyKT0+e3ZhciBuPXIoNTkpLGE9cig2NikuY29uY2F0KCJsZW5ndGgiLCJwcm90b3R5cGUiKTt0LmY9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fGZ1bmN0aW9uKGUpe3JldHVybiBuKGUsYSl9fSwoZSx0LHIpPT57dmFyIG49cigxNCksYT1yKDM5KSxpPXIoMTIpLHM9cig2MCkuaW5kZXhPZixvPXIoNTUpLGM9bihbXS5wdXNoKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcixuPWkoZSksbD0wLGg9W107Zm9yKHIgaW4gbikhYShvLHIpJiZhKG4scikmJmMoaCxyKTtmb3IoO3QubGVuZ3RoPmw7KWEobixyPXRbbCsrXSkmJih+cyhoLHIpfHxjKGgscikpO3JldHVybiBofX0sKGUsdCxyKT0+e3ZhciBuPXIoMTIpLGE9cig2MSksaT1yKDY0KSxzPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LHIscyl7dmFyIG8sYz1uKHQpLGw9aShjKSxoPWEocyxsKTtpZihlJiZyIT1yKXtmb3IoO2w+aDspaWYoKG89Y1toKytdKSE9bylyZXR1cm4hMH1lbHNlIGZvcig7bD5oO2grKylpZigoZXx8aCBpbiBjKSYmY1toXT09PXIpcmV0dXJuIGV8fGh8fDA7cmV0dXJuIWUmJi0xfX07ZS5leHBvcnRzPXtpbmNsdWRlczpzKCEwKSxpbmRleE9mOnMoITEpfX0sKGUsdCxyKT0+e3ZhciBuPXIoNjIpLGE9TWF0aC5tYXgsaT1NYXRoLm1pbjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcj1uKGUpO3JldHVybiByPDA/YShyK3QsMCk6aShyLHQpfX0sKGUsdCxyKT0+e3ZhciBuPXIoNjMpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD0rZTtyZXR1cm4gdCE9dHx8MD09PXQ/MDpuKHQpfX0sZT0+e3ZhciB0PU1hdGguY2VpbCxyPU1hdGguZmxvb3I7ZS5leHBvcnRzPU1hdGgudHJ1bmN8fGZ1bmN0aW9uKGUpe3ZhciBuPStlO3JldHVybihuPjA/cjp0KShuKX19LChlLHQscik9Pnt2YXIgbj1yKDY1KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG4oZS5sZW5ndGgpfX0sKGUsdCxyKT0+e3ZhciBuPXIoNjIpLGE9TWF0aC5taW47ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBlPjA/YShuKGUpLDkwMDcxOTkyNTQ3NDA5OTEpOjB9fSxlPT57ZS5leHBvcnRzPVsiY29uc3RydWN0b3IiLCJoYXNPd25Qcm9wZXJ0eSIsImlzUHJvdG90eXBlT2YiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsInRvTG9jYWxlU3RyaW5nIiwidG9TdHJpbmciLCJ2YWx1ZU9mIl19LChlLHQpPT57dC5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHN9LChlLHQscik9Pnt2YXIgbj1yKDcpLGE9cigyMSksaT0vI3xcLnByb3RvdHlwZVwuLyxzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9Y1tvKGUpXTtyZXR1cm4gcj09aHx8ciE9bCYmKGEodCk/bih0KTohIXQpfSxvPXMubm9ybWFsaXplPWZ1bmN0aW9uKGUpe3JldHVybiBTdHJpbmcoZSkucmVwbGFjZShpLCIuIikudG9Mb3dlckNhc2UoKX0sYz1zLmRhdGE9e30sbD1zLk5BVElWRT0iTiIsaD1zLlBPTFlGSUxMPSJQIjtlLmV4cG9ydHM9c30sKGUsdCxyKT0+e3ZhciBuPXIoOSksYT1GdW5jdGlvbi5wcm90b3R5cGUsaT1hLmFwcGx5LHM9YS5jYWxsO2UuZXhwb3J0cz0ib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QuYXBwbHl8fChuP3MuYmluZChpKTpmdW5jdGlvbigpe3JldHVybiBzLmFwcGx5KGksYXJndW1lbnRzKX0pfSwoZSx0LHIpPT57dmFyIG49cigyNCksYT1yKDM5KSxpPXIoNDQpLHM9cigyNSksbz1yKDcxKSxjPXIoNTYpLGw9cig3NCksaD1yKDc1KSx1PXIoNzYpLGQ9cig4MCksZj1yKDgxKSxnPXIoNikscD1yKDM2KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsbSl7dmFyIGI9InN0YWNrVHJhY2VMaW1pdCIseT1tPzI6MSx3PWUuc3BsaXQoIi4iKSx2PXdbdy5sZW5ndGgtMV0seD1uLmFwcGx5KG51bGwsdyk7aWYoeCl7dmFyIFM9eC5wcm90b3R5cGU7aWYoIXAmJmEoUywiY2F1c2UiKSYmZGVsZXRlIFMuY2F1c2UsIXIpcmV0dXJuIHg7dmFyIEE9bigiRXJyb3IiKSxrPXQoKGZ1bmN0aW9uKGUsdCl7dmFyIHI9dShtP3Q6ZSx2b2lkIDApLG49bT9uZXcgeChlKTpuZXcgeDtyZXR1cm4gdm9pZCAwIT09ciYmaShuLCJtZXNzYWdlIixyKSxmKG4sayxuLnN0YWNrLDIpLHRoaXMmJnMoUyx0aGlzKSYmaChuLHRoaXMsayksYXJndW1lbnRzLmxlbmd0aD55JiZkKG4sYXJndW1lbnRzW3ldKSxufSkpO2lmKGsucHJvdG90eXBlPVMsIkVycm9yIiE9PXY/bz9vKGssQSk6YyhrLEEse25hbWU6ITB9KTpnJiZiIGluIHgmJihsKGsseCxiKSxsKGsseCwicHJlcGFyZVN0YWNrVHJhY2UiKSksYyhrLHgpLCFwKXRyeXtTLm5hbWUhPT12JiZpKFMsIm5hbWUiLHYpLFMuY29uc3RydWN0b3I9a31jYXRjaChlKXt9cmV0dXJuIGt9fX0sKGUsdCxyKT0+e3ZhciBuPXIoNzIpLGE9cig0NyksaT1yKDczKTtlLmV4cG9ydHM9T2JqZWN0LnNldFByb3RvdHlwZU9mfHwoIl9fcHJvdG9fXyJpbnt9P2Z1bmN0aW9uKCl7dmFyIGUsdD0hMSxyPXt9O3RyeXsoZT1uKE9iamVjdC5wcm90b3R5cGUsIl9fcHJvdG9fXyIsInNldCIpKShyLFtdKSx0PXIgaW5zdGFuY2VvZiBBcnJheX1jYXRjaChlKXt9cmV0dXJuIGZ1bmN0aW9uKHIsbil7cmV0dXJuIGEociksaShuKSx0P2UocixuKTpyLl9fcHJvdG9fXz1uLHJ9fSgpOnZvaWQgMCl9LChlLHQscik9Pnt2YXIgbj1yKDE0KSxhPXIoMzEpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7dHJ5e3JldHVybiBuKGEoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpW3JdKSl9Y2F0Y2goZSl7fX19LChlLHQscik9Pnt2YXIgbj1yKDIxKSxhPVN0cmluZyxpPVR5cGVFcnJvcjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoIm9iamVjdCI9PXR5cGVvZiBlfHxuKGUpKXJldHVybiBlO3Rocm93IGkoIkNhbid0IHNldCAiK2EoZSkrIiBhcyBhIHByb3RvdHlwZSIpfX0sKGUsdCxyKT0+e3ZhciBuPXIoNDUpLmY7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXtyIGluIGV8fG4oZSxyLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbcl19LHNldDpmdW5jdGlvbihlKXt0W3JdPWV9fSl9fSwoZSx0LHIpPT57dmFyIG49cigyMSksYT1yKDIwKSxpPXIoNzEpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7dmFyIHMsbztyZXR1cm4gaSYmbihzPXQuY29uc3RydWN0b3IpJiZzIT09ciYmYShvPXMucHJvdG90eXBlKSYmbyE9PXIucHJvdG90eXBlJiZpKGUsbyksZX19LChlLHQscik9Pnt2YXIgbj1yKDc3KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09ZT9hcmd1bWVudHMubGVuZ3RoPDI/IiI6dDpuKGUpfX0sKGUsdCxyKT0+e3ZhciBuPXIoNzgpLGE9U3RyaW5nO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZigiU3ltYm9sIj09PW4oZSkpdGhyb3cgVHlwZUVycm9yKCJDYW5ub3QgY29udmVydCBhIFN5bWJvbCB2YWx1ZSB0byBhIHN0cmluZyIpO3JldHVybiBhKGUpfX0sKGUsdCxyKT0+e3ZhciBuPXIoNzkpLGE9cigyMSksaT1yKDE1KSxzPXIoMzQpKCJ0b1N0cmluZ1RhZyIpLG89T2JqZWN0LGM9IkFyZ3VtZW50cyI9PWkoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKTtlLmV4cG9ydHM9bj9pOmZ1bmN0aW9uKGUpe3ZhciB0LHIsbjtyZXR1cm4gdm9pZCAwPT09ZT8iVW5kZWZpbmVkIjpudWxsPT09ZT8iTnVsbCI6InN0cmluZyI9PXR5cGVvZihyPWZ1bmN0aW9uKGUsdCl7dHJ5e3JldHVybiBlW3RdfWNhdGNoKGUpe319KHQ9byhlKSxzKSk/cjpjP2kodCk6Ik9iamVjdCI9PShuPWkodCkpJiZhKHQuY2FsbGVlKT8iQXJndW1lbnRzIjpufX0sKGUsdCxyKT0+e3ZhciBuPXt9O25bcigzNCkoInRvU3RyaW5nVGFnIildPSJ6IixlLmV4cG9ydHM9IltvYmplY3Qgel0iPT09U3RyaW5nKG4pfSwoZSx0LHIpPT57dmFyIG49cigyMCksYT1yKDQ0KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtuKHQpJiYiY2F1c2UiaW4gdCYmYShlLCJjYXVzZSIsdC5jYXVzZSl9fSwoZSx0LHIpPT57dmFyIG49cig0NCksYT1yKDgyKSxpPXIoODMpLHM9RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLG8pe2kmJihzP3MoZSx0KTpuKGUsInN0YWNrIixhKHIsbykpKX19LChlLHQscik9Pnt2YXIgbj1yKDE0KSxhPUVycm9yLGk9bigiIi5yZXBsYWNlKSxzPVN0cmluZyhhKCJ6eGNhc2QiKS5zdGFjayksbz0vXG5ccyphdCBbXjpdKjpbXlxuXSovLGM9by50ZXN0KHMpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKGMmJiJzdHJpbmciPT10eXBlb2YgZSYmIWEucHJlcGFyZVN0YWNrVHJhY2UpZm9yKDt0LS07KWU9aShlLG8sIiIpO3JldHVybiBlfX0sKGUsdCxyKT0+e3ZhciBuPXIoNyksYT1yKDExKTtlLmV4cG9ydHM9IW4oKGZ1bmN0aW9uKCl7dmFyIGU9RXJyb3IoImEiKTtyZXR1cm4hKCJzdGFjayJpbiBlKXx8KE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJzdGFjayIsYSgxLDcpKSw3IT09ZS5zdGFjayl9KSl9LChlLHQscik9Pnt2YXIgbj1yKDg1KSxhPXIoOTApLmZpbmRMYXN0LGk9bi5hVHlwZWRBcnJheTsoMCxuLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJmaW5kTGFzdCIsKGZ1bmN0aW9uKGUpe3JldHVybiBhKGkodGhpcyksZSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSl9LChlLHQscik9Pnt2YXIgbixhLGkscz1yKDg2KSxvPXIoNiksYz1yKDQpLGw9cigyMSksaD1yKDIwKSx1PXIoMzkpLGQ9cig3OCksZj1yKDMyKSxnPXIoNDQpLHA9cig0OCksbT1yKDg3KSxiPXIoMjUpLHk9cig4OCksdz1yKDcxKSx2PXIoMzQpLHg9cig0MSksUz1yKDUyKSxBPVMuZW5mb3JjZSxrPVMuZ2V0LEM9Yy5JbnQ4QXJyYXksTz1DJiZDLnByb3RvdHlwZSxGPWMuVWludDhDbGFtcGVkQXJyYXksST1GJiZGLnByb3RvdHlwZSxUPUMmJnkoQyksTT1PJiZ5KE8pLEU9T2JqZWN0LnByb3RvdHlwZSxQPWMuVHlwZUVycm9yLFI9digidG9TdHJpbmdUYWciKSxOPXgoIlRZUEVEX0FSUkFZX1RBRyIpLEQ9IlR5cGVkQXJyYXlDb25zdHJ1Y3RvciIsQj1zJiYhIXcmJiJPcGVyYSIhPT1kKGMub3BlcmEpLEw9ITEsXz17SW50OEFycmF5OjEsVWludDhBcnJheToxLFVpbnQ4Q2xhbXBlZEFycmF5OjEsSW50MTZBcnJheToyLFVpbnQxNkFycmF5OjIsSW50MzJBcnJheTo0LFVpbnQzMkFycmF5OjQsRmxvYXQzMkFycmF5OjQsRmxvYXQ2NEFycmF5Ojh9LGo9e0JpZ0ludDY0QXJyYXk6OCxCaWdVaW50NjRBcnJheTo4fSxVPWZ1bmN0aW9uKGUpe2lmKCFoKGUpKXJldHVybiExO3ZhciB0PWQoZSk7cmV0dXJuIHUoXyx0KXx8dShqLHQpfTtmb3IobiBpbiBfKShpPShhPWNbbl0pJiZhLnByb3RvdHlwZSk/QShpKVtEXT1hOkI9ITE7Zm9yKG4gaW4gaikoaT0oYT1jW25dKSYmYS5wcm90b3R5cGUpJiYoQShpKVtEXT1hKTtpZigoIUJ8fCFsKFQpfHxUPT09RnVuY3Rpb24ucHJvdG90eXBlKSYmKFQ9ZnVuY3Rpb24oKXt0aHJvdyBQKCJJbmNvcnJlY3QgaW52b2NhdGlvbiIpfSxCKSlmb3IobiBpbiBfKWNbbl0mJncoY1tuXSxUKTtpZigoIUJ8fCFNfHxNPT09RSkmJihNPVQucHJvdG90eXBlLEIpKWZvcihuIGluIF8pY1tuXSYmdyhjW25dLnByb3RvdHlwZSxNKTtpZihCJiZ5KEkpIT09TSYmdyhJLE0pLG8mJiF1KE0sUikpZm9yKG4gaW4gTD0hMCxtKE0sUix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBoKHRoaXMpP3RoaXNbTl06dm9pZCAwfX0pLF8pY1tuXSYmZyhjW25dLE4sbik7ZS5leHBvcnRzPXtOQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTOkIsVFlQRURfQVJSQVlfVEFHOkwmJk4sYVR5cGVkQXJyYXk6ZnVuY3Rpb24oZSl7aWYoVShlKSlyZXR1cm4gZTt0aHJvdyBQKCJUYXJnZXQgaXMgbm90IGEgdHlwZWQgYXJyYXkiKX0sYVR5cGVkQXJyYXlDb25zdHJ1Y3RvcjpmdW5jdGlvbihlKXtpZihsKGUpJiYoIXd8fGIoVCxlKSkpcmV0dXJuIGU7dGhyb3cgUChmKGUpKyIgaXMgbm90IGEgdHlwZWQgYXJyYXkgY29uc3RydWN0b3IiKX0sZXhwb3J0VHlwZWRBcnJheU1ldGhvZDpmdW5jdGlvbihlLHQscixuKXtpZihvKXtpZihyKWZvcih2YXIgYSBpbiBfKXt2YXIgaT1jW2FdO2lmKGkmJnUoaS5wcm90b3R5cGUsZSkpdHJ5e2RlbGV0ZSBpLnByb3RvdHlwZVtlXX1jYXRjaChyKXt0cnl7aS5wcm90b3R5cGVbZV09dH1jYXRjaChlKXt9fX1NW2VdJiYhcnx8cChNLGUscj90OkImJk9bZV18fHQsbil9fSxleHBvcnRUeXBlZEFycmF5U3RhdGljTWV0aG9kOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhO2lmKG8pe2lmKHcpe2lmKHIpZm9yKG4gaW4gXylpZigoYT1jW25dKSYmdShhLGUpKXRyeXtkZWxldGUgYVtlXX1jYXRjaChlKXt9aWYoVFtlXSYmIXIpcmV0dXJuO3RyeXtyZXR1cm4gcChULGUscj90OkImJlRbZV18fHQpfWNhdGNoKGUpe319Zm9yKG4gaW4gXykhKGE9Y1tuXSl8fGFbZV0mJiFyfHxwKGEsZSx0KX19LGdldFR5cGVkQXJyYXlDb25zdHJ1Y3RvcjpmdW5jdGlvbiBlKHQpe3ZhciByPXkodCk7aWYoaChyKSl7dmFyIG49ayhyKTtyZXR1cm4gbiYmdShuLEQpP25bRF06ZShyKX19LGlzVmlldzpmdW5jdGlvbihlKXtpZighaChlKSlyZXR1cm4hMTt2YXIgdD1kKGUpO3JldHVybiJEYXRhVmlldyI9PT10fHx1KF8sdCl8fHUoaix0KX0saXNUeXBlZEFycmF5OlUsVHlwZWRBcnJheTpULFR5cGVkQXJyYXlQcm90b3R5cGU6TX19LGU9PntlLmV4cG9ydHM9InVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmInVuZGVmaW5lZCIhPXR5cGVvZiBEYXRhVmlld30sKGUsdCxyKT0+e3ZhciBuPXIoNDkpLGE9cig0NSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gci5nZXQmJm4oci5nZXQsdCx7Z2V0dGVyOiEwfSksci5zZXQmJm4oci5zZXQsdCx7c2V0dGVyOiEwfSksYS5mKGUsdCxyKX19LChlLHQscik9Pnt2YXIgbj1yKDM5KSxhPXIoMjEpLGk9cig0MCkscz1yKDU0KSxvPXIoODkpLGM9cygiSUVfUFJPVE8iKSxsPU9iamVjdCxoPWwucHJvdG90eXBlO2UuZXhwb3J0cz1vP2wuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7dmFyIHQ9aShlKTtpZihuKHQsYykpcmV0dXJuIHRbY107dmFyIHI9dC5jb25zdHJ1Y3RvcjtyZXR1cm4gYShyKSYmdCBpbnN0YW5jZW9mIHI/ci5wcm90b3R5cGU6dCBpbnN0YW5jZW9mIGw/aDpudWxsfX0sKGUsdCxyKT0+e3ZhciBuPXIoNyk7ZS5leHBvcnRzPSFuKChmdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPW51bGwsT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyBlKSE9PWUucHJvdG90eXBlfSkpfSwoZSx0LHIpPT57dmFyIG49cig5MSksYT1yKDEzKSxpPXIoNDApLHM9cig2NCksbz1mdW5jdGlvbihlKXt2YXIgdD0xPT1lO3JldHVybiBmdW5jdGlvbihyLG8sYyl7Zm9yKHZhciBsLGg9aShyKSx1PWEoaCksZD1uKG8sYyksZj1zKHUpO2YtLSA+MDspaWYoZChsPXVbZl0sZixoKSlzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiBsO2Nhc2UgMTpyZXR1cm4gZn1yZXR1cm4gdD8tMTp2b2lkIDB9fTtlLmV4cG9ydHM9e2ZpbmRMYXN0Om8oMCksZmluZExhc3RJbmRleDpvKDEpfX0sKGUsdCxyKT0+e3ZhciBuPXIoOTIpLGE9cigzMSksaT1yKDkpLHM9bihuLmJpbmQpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBhKGUpLHZvaWQgMD09PXQ/ZTppP3MoZSx0KTpmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHQsYXJndW1lbnRzKX19fSwoZSx0LHIpPT57dmFyIG49cigxNSksYT1yKDE0KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoIkZ1bmN0aW9uIj09PW4oZSkpcmV0dXJuIGEoZSl9fSwoZSx0LHIpPT57dmFyIG49cig4NSksYT1yKDkwKS5maW5kTGFzdEluZGV4LGk9bi5hVHlwZWRBcnJheTsoMCxuLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QpKCJmaW5kTGFzdEluZGV4IiwoZnVuY3Rpb24oZSl7cmV0dXJuIGEoaSh0aGlzKSxlLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0pKX0sKGUsdCxyKT0+e3ZhciBuPXIoNCksYT1yKDgpLGk9cig4NSkscz1yKDY0KSxvPXIoOTUpLGM9cig0MCksbD1yKDcpLGg9bi5SYW5nZUVycm9yLHU9bi5JbnQ4QXJyYXksZD11JiZ1LnByb3RvdHlwZSxmPWQmJmQuc2V0LGc9aS5hVHlwZWRBcnJheSxwPWkuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCxtPSFsKChmdW5jdGlvbigpe3ZhciBlPW5ldyBVaW50OENsYW1wZWRBcnJheSgyKTtyZXR1cm4gYShmLGUse2xlbmd0aDoxLDA6M30sMSksMyE9PWVbMV19KSksYj1tJiZpLk5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1MmJmwoKGZ1bmN0aW9uKCl7dmFyIGU9bmV3IHUoMik7cmV0dXJuIGUuc2V0KDEpLGUuc2V0KCIyIiwxKSwwIT09ZVswXXx8MiE9PWVbMV19KSk7cCgic2V0IiwoZnVuY3Rpb24oZSl7Zyh0aGlzKTt2YXIgdD1vKGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDEpLHI9YyhlKTtpZihtKXJldHVybiBhKGYsdGhpcyxyLHQpO3ZhciBuPXRoaXMubGVuZ3RoLGk9cyhyKSxsPTA7aWYoaSt0Pm4pdGhyb3cgaCgiV3JvbmcgbGVuZ3RoIik7Zm9yKDtsPGk7KXRoaXNbdCtsXT1yW2wrK119KSwhbXx8Yil9LChlLHQscik9Pnt2YXIgbj1yKDk2KSxhPVJhbmdlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9bihlKTtpZihyJXQpdGhyb3cgYSgiV3Jvbmcgb2Zmc2V0Iik7cmV0dXJuIHJ9fSwoZSx0LHIpPT57dmFyIG49cig2MiksYT1SYW5nZUVycm9yO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1uKGUpO2lmKHQ8MCl0aHJvdyBhKCJUaGUgYXJndW1lbnQgY2FuJ3QgYmUgbGVzcyB0aGFuIDAiKTtyZXR1cm4gdH19LChlLHQscik9Pnt2YXIgbj1yKDk4KSxhPXIoODUpLGk9YS5hVHlwZWRBcnJheSxzPWEuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCxvPWEuZ2V0VHlwZWRBcnJheUNvbnN0cnVjdG9yO3MoInRvUmV2ZXJzZWQiLChmdW5jdGlvbigpe3JldHVybiBuKGkodGhpcyksbyh0aGlzKSl9KSl9LChlLHQscik9Pnt2YXIgbj1yKDY0KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9bihlKSxhPW5ldyB0KHIpLGk9MDtpPHI7aSsrKWFbaV09ZVtyLWktMV07cmV0dXJuIGF9fSwoZSx0LHIpPT57dmFyIG49cig4NSksYT1yKDE0KSxpPXIoMzEpLHM9cigxMDApLG89bi5hVHlwZWRBcnJheSxjPW4uZ2V0VHlwZWRBcnJheUNvbnN0cnVjdG9yLGw9bi5leHBvcnRUeXBlZEFycmF5TWV0aG9kLGg9YShuLlR5cGVkQXJyYXlQcm90b3R5cGUuc29ydCk7bCgidG9Tb3J0ZWQiLChmdW5jdGlvbihlKXt2b2lkIDAhPT1lJiZpKGUpO3ZhciB0PW8odGhpcykscj1zKGModCksdCk7cmV0dXJuIGgocixlKX0pKX0sKGUsdCxyKT0+e3ZhciBuPXIoNjQpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj0wLGE9bih0KSxpPW5ldyBlKGEpO2E+cjspaVtyXT10W3IrK107cmV0dXJuIGl9fSwoZSx0LHIpPT57dmFyIG49cigxMDIpLGE9cig4NSksaT1yKDEwMykscz1yKDYyKSxvPXIoMTA0KSxjPWEuYVR5cGVkQXJyYXksbD1hLmdldFR5cGVkQXJyYXlDb25zdHJ1Y3RvcixoPWEuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCx1PSEhZnVuY3Rpb24oKXt0cnl7bmV3IEludDhBcnJheSgxKS53aXRoKDIse3ZhbHVlT2Y6ZnVuY3Rpb24oKXt0aHJvdyA4fX0pfWNhdGNoKGUpe3JldHVybiA4PT09ZX19KCk7aCgid2l0aCIse3dpdGg6ZnVuY3Rpb24oZSx0KXt2YXIgcj1jKHRoaXMpLGE9cyhlKSxoPWkocik/byh0KTordDtyZXR1cm4gbihyLGwociksYSxoKX19LndpdGgsIXUpfSwoZSx0LHIpPT57dmFyIG49cig2NCksYT1yKDYyKSxpPVJhbmdlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLHMpe3ZhciBvPW4oZSksYz1hKHIpLGw9YzwwP28rYzpjO2lmKGw+PW98fGw8MCl0aHJvdyBpKCJJbmNvcnJlY3QgaW5kZXgiKTtmb3IodmFyIGg9bmV3IHQobyksdT0wO3U8bzt1KyspaFt1XT11PT09bD9zOmVbdV07cmV0dXJuIGh9fSwoZSx0LHIpPT57dmFyIG49cig3OCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PW4oZSk7cmV0dXJuIkJpZ0ludDY0QXJyYXkiPT10fHwiQmlnVWludDY0QXJyYXkiPT10fX0sKGUsdCxyKT0+e3ZhciBuPXIoMTkpLGE9VHlwZUVycm9yO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1uKGUsIm51bWJlciIpO2lmKCJudW1iZXIiPT10eXBlb2YgdCl0aHJvdyBhKCJDYW4ndCBjb252ZXJ0IG51bWJlciB0byBiaWdpbnQiKTtyZXR1cm4gQmlnSW50KHQpfX0sKGUsdCxyKT0+e3ZhciBuPXIoNiksYT1yKDg3KSxpPXIoMTA2KSxzPUFycmF5QnVmZmVyLnByb3RvdHlwZTtuJiYhKCJkZXRhY2hlZCJpbiBzKSYmYShzLCJkZXRhY2hlZCIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaSh0aGlzKX19KX0sKGUsdCxyKT0+e3ZhciBuPXIoMTQpLGE9cigxMDcpLGk9bihBcnJheUJ1ZmZlci5wcm90b3R5cGUuc2xpY2UpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZigwIT09YShlKSlyZXR1cm4hMTt0cnl7cmV0dXJuIGkoZSwwLDApLCExfWNhdGNoKGUpe3JldHVybiEwfX19LChlLHQscik9Pnt2YXIgbj1yKDcyKSxhPXIoMTUpLGk9VHlwZUVycm9yO2UuZXhwb3J0cz1uKEFycmF5QnVmZmVyLnByb3RvdHlwZSwiYnl0ZUxlbmd0aCIsImdldCIpfHxmdW5jdGlvbihlKXtpZigiQXJyYXlCdWZmZXIiIT1hKGUpKXRocm93IGkoIkFycmF5QnVmZmVyIGV4cGVjdGVkIik7cmV0dXJuIGUuYnl0ZUxlbmd0aH19LChlLHQscik9Pnt2YXIgbj1yKDMpLGE9cigxMDkpO2EmJm4oe3RhcmdldDoiQXJyYXlCdWZmZXIiLHByb3RvOiEwfSx7dHJhbnNmZXI6ZnVuY3Rpb24oKXtyZXR1cm4gYSh0aGlzLGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzBdOnZvaWQgMCwhMCl9fSl9LChlLHQscik9Pnt2YXIgbj1yKDQpLGE9cigxNCksaT1yKDcyKSxzPXIoMTEwKSxvPXIoMTA2KSxjPXIoMTA3KSxsPXIoMTExKSxoPW4uVHlwZUVycm9yLHU9bi5zdHJ1Y3R1cmVkQ2xvbmUsZD1uLkFycmF5QnVmZmVyLGY9bi5EYXRhVmlldyxnPU1hdGgubWluLHA9ZC5wcm90b3R5cGUsbT1mLnByb3RvdHlwZSxiPWEocC5zbGljZSkseT1pKHAsInJlc2l6YWJsZSIsImdldCIpLHc9aShwLCJtYXhCeXRlTGVuZ3RoIiwiZ2V0Iiksdj1hKG0uZ2V0SW50OCkseD1hKG0uc2V0SW50OCk7ZS5leHBvcnRzPWwmJmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1jKGUpLGE9dm9pZCAwPT09dD9uOnModCksaT0heXx8IXkoZSk7aWYobyhlKSl0aHJvdyBoKCJBcnJheUJ1ZmZlciBpcyBkZXRhY2hlZCIpO3ZhciBsPXUoZSx7dHJhbnNmZXI6W2VdfSk7aWYobj09YSYmKHJ8fGkpKXJldHVybiBsO2lmKG4+PWEmJighcnx8aSkpcmV0dXJuIGIobCwwLGEpO2Zvcih2YXIgcD1yJiYhaSYmdz97bWF4Qnl0ZUxlbmd0aDp3KGwpfTp2b2lkIDAsbT1uZXcgZChhLHApLFM9bmV3IGYobCksQT1uZXcgZihtKSxrPWcoYSxuKSxDPTA7QzxrO0MrKyl4KEEsQyx2KFMsQykpO3JldHVybiBtfX0sKGUsdCxyKT0+e3ZhciBuPXIoNjIpLGE9cig2NSksaT1SYW5nZUVycm9yO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXJldHVybiAwO3ZhciB0PW4oZSkscj1hKHQpO2lmKHQhPT1yKXRocm93IGkoIldyb25nIGxlbmd0aCBvciBpbmRleCIpO3JldHVybiByfX0sKGUsdCxyKT0+e3ZhciBuPXIoNCksYT1yKDcpLGk9cigyOCkscz1yKDExMiksbz1yKDExMyksYz1yKDExNCksbD1uLnN0cnVjdHVyZWRDbG9uZTtlLmV4cG9ydHM9ISFsJiYhYSgoZnVuY3Rpb24oKXtpZihvJiZpPjkyfHxjJiZpPjk0fHxzJiZpPjk3KXJldHVybiExO3ZhciBlPW5ldyBBcnJheUJ1ZmZlcig4KSx0PWwoZSx7dHJhbnNmZXI6W2VdfSk7cmV0dXJuIDAhPWUuYnl0ZUxlbmd0aHx8OCE9dC5ieXRlTGVuZ3RofSkpfSwoZSx0LHIpPT57dmFyIG49cigxMTMpLGE9cigxMTQpO2UuZXhwb3J0cz0hbiYmIWEmJiJvYmplY3QiPT10eXBlb2Ygd2luZG93JiYib2JqZWN0Ij09dHlwZW9mIGRvY3VtZW50fSxlPT57ZS5leHBvcnRzPSJvYmplY3QiPT10eXBlb2YgRGVubyYmRGVubyYmIm9iamVjdCI9PXR5cGVvZiBEZW5vLnZlcnNpb259LChlLHQscik9Pnt2YXIgbj1yKDE1KTtlLmV4cG9ydHM9InVuZGVmaW5lZCIhPXR5cGVvZiBwcm9jZXNzJiYicHJvY2VzcyI9PW4ocHJvY2Vzcyl9LChlLHQscik9Pnt2YXIgbj1yKDMpLGE9cigxMDkpO2EmJm4oe3RhcmdldDoiQXJyYXlCdWZmZXIiLHByb3RvOiEwfSx7dHJhbnNmZXJUb0ZpeGVkTGVuZ3RoOmZ1bmN0aW9uKCl7cmV0dXJuIGEodGhpcyxhcmd1bWVudHMubGVuZ3RoP2FyZ3VtZW50c1swXTp2b2lkIDAsITEpfX0pfSwoZSx0LHIpPT57dmFyIG49cigzKSxhPXIoMTE3KTtuKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6IXIoMTI1KSgiZGlmZmVyZW5jZSIpfSx7ZGlmZmVyZW5jZTphfSl9LChlLHQscik9Pnt2YXIgbj1yKDExOCksYT1yKDExOSksaT1yKDEyMCkscz1yKDEyMyksbz1yKDEyNCksYz1yKDEyMSksbD1yKDEyMiksaD1hLmhhcyx1PWEucmVtb3ZlO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1uKHRoaXMpLHI9byhlKSxhPWkodCk7cmV0dXJuIHModCk8PXIuc2l6ZT9jKHQsKGZ1bmN0aW9uKGUpe3IuaW5jbHVkZXMoZSkmJnUoYSxlKX0pKTpsKHIuZ2V0SXRlcmF0b3IoKSwoZnVuY3Rpb24oZSl7aCh0LGUpJiZ1KGEsZSl9KSksYX19LChlLHQscik9Pnt2YXIgbj1yKDExOSkuaGFzO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gbihlKSxlfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTQpLGE9U2V0LnByb3RvdHlwZTtlLmV4cG9ydHM9e1NldCxhZGQ6bihhLmFkZCksaGFzOm4oYS5oYXMpLHJlbW92ZTpuKGEuZGVsZXRlKSxwcm90bzphfX0sKGUsdCxyKT0+e3ZhciBuPXIoMTE5KSxhPXIoMTIxKSxpPW4uU2V0LHM9bi5hZGQ7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBpO3JldHVybiBhKGUsKGZ1bmN0aW9uKGUpe3ModCxlKX0pKSx0fX0sKGUsdCxyKT0+e3ZhciBuPXIoMTQpLGE9cigxMjIpLGk9cigxMTkpLHM9aS5TZXQsbz1pLnByb3RvLGM9bihvLmZvckVhY2gpLGw9bihvLmtleXMpLGg9bChuZXcgcykubmV4dDtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiByP2EobChlKSx0LGgpOmMoZSx0KX19LChlLHQscik9Pnt2YXIgbj1yKDgpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7Zm9yKHZhciBhLGkscz1yfHxlLm5leHQ7IShhPW4ocyxlKSkuZG9uZTspaWYodm9pZCAwIT09KGk9dChhLnZhbHVlKSkpcmV0dXJuIGl9fSwoZSx0LHIpPT57dmFyIG49cig3MiksYT1yKDExOSk7ZS5leHBvcnRzPW4oYS5wcm90bywic2l6ZSIsImdldCIpfHxmdW5jdGlvbihlKXtyZXR1cm4gZS5zaXplfX0sKGUsdCxyKT0+e3ZhciBuPXIoMzEpLGE9cig0NyksaT1yKDgpLHM9cig2Miksbz1UeXBlRXJyb3IsYz1NYXRoLm1heCxsPWZ1bmN0aW9uKGUsdCxyLG4pe3RoaXMuc2V0PWUsdGhpcy5zaXplPXQsdGhpcy5oYXM9cix0aGlzLmtleXM9bn07bC5wcm90b3R5cGU9e2dldEl0ZXJhdG9yOmZ1bmN0aW9uKCl7cmV0dXJuIGEoaSh0aGlzLmtleXMsdGhpcy5zZXQpKX0saW5jbHVkZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGkodGhpcy5oYXMsdGhpcy5zZXQsZSl9fSxlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7YShlKTt2YXIgdD0rZS5zaXplO2lmKHQhPXQpdGhyb3cgbygiSW52YWxpZCBzaXplIik7cmV0dXJuIG5ldyBsKGUsYyhzKHQpLDApLG4oZS5oYXMpLG4oZS5rZXlzKSl9fSwoZSx0LHIpPT57dmFyIG49cigyNCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4obmV3KG4oIlNldCIpKSlbZV0oe3NpemU6MCxoYXM6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sa2V5czpmdW5jdGlvbigpe3JldHVybntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6ITB9fX19fSksITB9Y2F0Y2goZSl7cmV0dXJuITF9fX0sKGUsdCxyKT0+e3ZhciBuPXIoMyksYT1yKDcpLGk9cigxMjcpO24oe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDohcigxMjUpKCJpbnRlcnNlY3Rpb24iKXx8YSgoZnVuY3Rpb24oKXtyZXR1cm4iMywyIiE9QXJyYXkuZnJvbShuZXcgU2V0KFsxLDIsM10pLmludGVyc2VjdGlvbihuZXcgU2V0KFszLDJdKSkpfSkpfSx7aW50ZXJzZWN0aW9uOml9KX0sKGUsdCxyKT0+e3ZhciBuPXIoMTE4KSxhPXIoMTE5KSxpPXIoMTIzKSxzPXIoMTI0KSxvPXIoMTIxKSxjPXIoMTIyKSxsPWEuU2V0LGg9YS5hZGQsdT1hLmhhcztlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9bih0aGlzKSxyPXMoZSksYT1uZXcgbDtyZXR1cm4gaSh0KT5yLnNpemU/YyhyLmdldEl0ZXJhdG9yKCksKGZ1bmN0aW9uKGUpe3UodCxlKSYmaChhLGUpfSkpOm8odCwoZnVuY3Rpb24oZSl7ci5pbmNsdWRlcyhlKSYmaChhLGUpfSkpLGF9fSwoZSx0LHIpPT57dmFyIG49cigzKSxhPXIoMTI5KTtuKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6IXIoMTI1KSgiaXNEaXNqb2ludEZyb20iKX0se2lzRGlzam9pbnRGcm9tOmF9KX0sKGUsdCxyKT0+e3ZhciBuPXIoMTE4KSxhPXIoMTE5KS5oYXMsaT1yKDEyMykscz1yKDEyNCksbz1yKDEyMSksYz1yKDEyMiksbD1yKDEzMCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PW4odGhpcykscj1zKGUpO2lmKGkodCk8PXIuc2l6ZSlyZXR1cm4hMSE9PW8odCwoZnVuY3Rpb24oZSl7aWYoci5pbmNsdWRlcyhlKSlyZXR1cm4hMX0pLCEwKTt2YXIgaD1yLmdldEl0ZXJhdG9yKCk7cmV0dXJuITEhPT1jKGgsKGZ1bmN0aW9uKGUpe2lmKGEodCxlKSlyZXR1cm4gbChoLCJub3JtYWwiLCExKX0pKX19LChlLHQscik9Pnt2YXIgbj1yKDgpLGE9cig0NyksaT1yKDMwKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBzLG87YShlKTt0cnl7aWYoIShzPWkoZSwicmV0dXJuIikpKXtpZigidGhyb3ciPT09dCl0aHJvdyByO3JldHVybiByfXM9bihzLGUpfWNhdGNoKGUpe289ITAscz1lfWlmKCJ0aHJvdyI9PT10KXRocm93IHI7aWYobyl0aHJvdyBzO3JldHVybiBhKHMpLHJ9fSwoZSx0LHIpPT57dmFyIG49cigzKSxhPXIoMTMyKTtuKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6IXIoMTI1KSgiaXNTdWJzZXRPZiIpfSx7aXNTdWJzZXRPZjphfSl9LChlLHQscik9Pnt2YXIgbj1yKDExOCksYT1yKDEyMyksaT1yKDEyMSkscz1yKDEyNCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PW4odGhpcykscj1zKGUpO3JldHVybiEoYSh0KT5yLnNpemUpJiYhMSE9PWkodCwoZnVuY3Rpb24oZSl7aWYoIXIuaW5jbHVkZXMoZSkpcmV0dXJuITF9KSwhMCl9fSwoZSx0LHIpPT57dmFyIG49cigzKSxhPXIoMTM0KTtuKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6IXIoMTI1KSgiaXNTdXBlcnNldE9mIil9LHtpc1N1cGVyc2V0T2Y6YX0pfSwoZSx0LHIpPT57dmFyIG49cigxMTgpLGE9cigxMTkpLmhhcyxpPXIoMTIzKSxzPXIoMTI0KSxvPXIoMTIyKSxjPXIoMTMwKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9bih0aGlzKSxyPXMoZSk7aWYoaSh0KTxyLnNpemUpcmV0dXJuITE7dmFyIGw9ci5nZXRJdGVyYXRvcigpO3JldHVybiExIT09byhsLChmdW5jdGlvbihlKXtpZighYSh0LGUpKXJldHVybiBjKGwsIm5vcm1hbCIsITEpfSkpfX0sKGUsdCxyKT0+e3ZhciBuPXIoMyksYT1yKDEzNik7bih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiFyKDEyNSkoInN5bW1ldHJpY0RpZmZlcmVuY2UiKX0se3N5bW1ldHJpY0RpZmZlcmVuY2U6YX0pfSwoZSx0LHIpPT57dmFyIG49cigxMTgpLGE9cigxMTkpLGk9cigxMjApLHM9cigxMjQpLG89cigxMjIpLGM9YS5hZGQsbD1hLmhhcyxoPWEucmVtb3ZlO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1uKHRoaXMpLHI9cyhlKS5nZXRJdGVyYXRvcigpLGE9aSh0KTtyZXR1cm4gbyhyLChmdW5jdGlvbihlKXtsKHQsZSk/aChhLGUpOmMoYSxlKX0pKSxhfX0sKGUsdCxyKT0+e3ZhciBuPXIoMyksYT1yKDEzOCk7bih7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiFyKDEyNSkoInVuaW9uIil9LHt1bmlvbjphfSl9LChlLHQscik9Pnt2YXIgbj1yKDExOCksYT1yKDExOSkuYWRkLGk9cigxMjApLHM9cigxMjQpLG89cigxMjIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1uKHRoaXMpLHI9cyhlKS5nZXRJdGVyYXRvcigpLGM9aSh0KTtyZXR1cm4gbyhyLChmdW5jdGlvbihlKXthKGMsZSl9KSksY319LChlLHQscik9Pnt2YXIgbj1yKDMpLGE9cig0MCksaT1yKDY0KSxzPXIoMTQwKSxvPXIoMTQyKTtuKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxhcml0eToxLGZvcmNlZDpyKDcpKChmdW5jdGlvbigpe3JldHVybiA0Mjk0OTY3Mjk3IT09W10ucHVzaC5jYWxsKHtsZW5ndGg6NDI5NDk2NzI5Nn0sMSl9KSl8fCFmdW5jdGlvbigpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sImxlbmd0aCIse3dyaXRhYmxlOiExfSkucHVzaCgpfWNhdGNoKGUpe3JldHVybiBlIGluc3RhbmNlb2YgVHlwZUVycm9yfX0oKX0se3B1c2g6ZnVuY3Rpb24oZSl7dmFyIHQ9YSh0aGlzKSxyPWkodCksbj1hcmd1bWVudHMubGVuZ3RoO28ocituKTtmb3IodmFyIGM9MDtjPG47YysrKXRbcl09YXJndW1lbnRzW2NdLHIrKztyZXR1cm4gcyh0LHIpLHJ9fSl9LChlLHQscik9Pnt2YXIgbj1yKDYpLGE9cigxNDEpLGk9VHlwZUVycm9yLHM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixvPW4mJiFmdW5jdGlvbigpe2lmKHZvaWQgMCE9PXRoaXMpcmV0dXJuITA7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwibGVuZ3RoIix7d3JpdGFibGU6ITF9KS5sZW5ndGg9MX1jYXRjaChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIFR5cGVFcnJvcn19KCk7ZS5leHBvcnRzPW8/ZnVuY3Rpb24oZSx0KXtpZihhKGUpJiYhcyhlLCJsZW5ndGgiKS53cml0YWJsZSl0aHJvdyBpKCJDYW5ub3Qgc2V0IHJlYWQgb25seSAubGVuZ3RoIik7cmV0dXJuIGUubGVuZ3RoPXR9OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubGVuZ3RoPXR9fSwoZSx0LHIpPT57dmFyIG49cigxNSk7ZS5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVybiJBcnJheSI9PW4oZSl9fSxlPT57dmFyIHQ9VHlwZUVycm9yO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZihlPjkwMDcxOTkyNTQ3NDA5OTEpdGhyb3cgdCgiTWF4aW11bSBhbGxvd2VkIGluZGV4IGV4Y2VlZGVkIik7cmV0dXJuIGV9fSwoZSx0LHIpPT57dmFyIG49cigzKSxhPXIoNCksaT1yKDg3KSxzPXIoNiksbz1UeXBlRXJyb3IsYz1PYmplY3QuZGVmaW5lUHJvcGVydHksbD1hLnNlbGYhPT1hO3RyeXtpZihzKXt2YXIgaD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGEsInNlbGYiKTshbCYmaCYmaC5nZXQmJmguZW51bWVyYWJsZXx8aShhLCJzZWxmIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGF9LHNldDpmdW5jdGlvbihlKXtpZih0aGlzIT09YSl0aHJvdyBvKCJJbGxlZ2FsIGludm9jYXRpb24iKTtjKGEsInNlbGYiLHt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwfSl9LGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwfSl9ZWxzZSBuKHtnbG9iYWw6ITAsc2ltcGxlOiEwLGZvcmNlZDpsfSx7c2VsZjphfSl9Y2F0Y2goZSl7fX0sKGUsdCxyKT0+e3ZhciBuO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlZlcmJvc2l0eUxldmVsPXQuVXRpbD10LlVua25vd25FcnJvckV4Y2VwdGlvbj10LlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbj10LlRleHRSZW5kZXJpbmdNb2RlPXQuUmVuZGVyaW5nSW50ZW50RmxhZz10LlByb21pc2VDYXBhYmlsaXR5PXQuUGVybWlzc2lvbkZsYWc9dC5QYXNzd29yZFJlc3BvbnNlcz10LlBhc3N3b3JkRXhjZXB0aW9uPXQuUGFnZUFjdGlvbkV2ZW50VHlwZT10Lk9QUz10Lk1pc3NpbmdQREZFeGNlcHRpb249dC5NQVhfSU1BR0VfU0laRV9UT19DQUNIRT10LkxJTkVfRkFDVE9SPXQuTElORV9ERVNDRU5UX0ZBQ1RPUj10LkludmFsaWRQREZFeGNlcHRpb249dC5JbWFnZUtpbmQ9dC5JREVOVElUWV9NQVRSSVg9dC5Gb3JtYXRFcnJvcj10LkZlYXR1cmVUZXN0PXQuRk9OVF9JREVOVElUWV9NQVRSSVg9dC5Eb2N1bWVudEFjdGlvbkV2ZW50VHlwZT10LkNNYXBDb21wcmVzc2lvblR5cGU9dC5CYXNlRXhjZXB0aW9uPXQuQkFTRUxJTkVfRkFDVE9SPXQuQW5ub3RhdGlvblR5cGU9dC5Bbm5vdGF0aW9uUmVwbHlUeXBlPXQuQW5ub3RhdGlvbk1vZGU9dC5Bbm5vdGF0aW9uRmxhZz10LkFubm90YXRpb25GaWVsZEZsYWc9dC5Bbm5vdGF0aW9uRWRpdG9yVHlwZT10LkFubm90YXRpb25FZGl0b3JQcmVmaXg9dC5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZT10LkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGU9dC5Bbm5vdGF0aW9uQWN0aW9uRXZlbnRUeXBlPXQuQWJvcnRFeGNlcHRpb249dm9pZCAwLHQuYXNzZXJ0PWZ1bmN0aW9uKGUsdCl7ZXx8bCh0KX0sdC5ieXRlc1RvU3RyaW5nPWcsdC5jcmVhdGVWYWxpZEFic29sdXRlVXJsPWZ1bmN0aW9uKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsLHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOm51bGw7aWYoIWUpcmV0dXJuIG51bGw7dHJ5e2lmKHImJiJzdHJpbmciPT10eXBlb2YgZSl7aWYoci5hZGREZWZhdWx0UHJvdG9jb2wmJmUuc3RhcnRzV2l0aCgid3d3LiIpKXtjb25zdCB0PWUubWF0Y2goL1wuL2cpOyhudWxsPT10P3ZvaWQgMDp0Lmxlbmd0aCk+PTImJihlPSJodHRwOi8vIi5jb25jYXQoZSkpfWlmKHIudHJ5Q29udmVydEVuY29kaW5nKXRyeXtlPXkoZSl9Y2F0Y2goZSl7fX1jb25zdCBuPXQ/bmV3IFVSTChlLHQpOm5ldyBVUkwoZSk7aWYoZnVuY3Rpb24oZSl7c3dpdGNoKG51bGw9PWU/dm9pZCAwOmUucHJvdG9jb2wpe2Nhc2UiaHR0cDoiOmNhc2UiaHR0cHM6IjpjYXNlImZ0cDoiOmNhc2UibWFpbHRvOiI6Y2FzZSJ0ZWw6IjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0obikpcmV0dXJuIG59Y2F0Y2goZSl7fXJldHVybiBudWxsfSx0LmdldE1vZGlmaWNhdGlvbkRhdGU9ZnVuY3Rpb24oKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bmV3IERhdGU7cmV0dXJuW2UuZ2V0VVRDRnVsbFllYXIoKS50b1N0cmluZygpLChlLmdldFVUQ01vbnRoKCkrMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIiksZS5nZXRVVENEYXRlKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIiksZS5nZXRVVENIb3VycygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpLGUuZ2V0VVRDTWludXRlcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpLGUuZ2V0VVRDU2Vjb25kcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpXS5qb2luKCIiKX0sdC5nZXRVdWlkPWZ1bmN0aW9uKCl7dmFyIGUsdDtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGNyeXB0byYmImZ1bmN0aW9uIj09dHlwZW9mKG51bGw9PT0oZT1jcnlwdG8pfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnJhbmRvbVVVSUQpKXJldHVybiBjcnlwdG8ucmFuZG9tVVVJRCgpO2NvbnN0IHI9bmV3IFVpbnQ4QXJyYXkoMzIpO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgY3J5cHRvJiYiZnVuY3Rpb24iPT10eXBlb2YobnVsbD09PSh0PWNyeXB0byl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuZ2V0UmFuZG9tVmFsdWVzKSljcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKHIpO2Vsc2UgZm9yKGxldCBlPTA7ZTwzMjtlKyspcltlXT1NYXRoLmZsb29yKDI1NSpNYXRoLnJhbmRvbSgpKTtyZXR1cm4gZyhyKX0sdC5nZXRWZXJib3NpdHlMZXZlbD1mdW5jdGlvbigpe3JldHVybiBzfSx0LmluZm89ZnVuY3Rpb24oZSl7cz49aS5JTkZPUyYmY29uc29sZS5sb2coIkluZm86ICIuY29uY2F0KGUpKX0sdC5pc0FycmF5QnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgZSYmdm9pZCAwIT09KG51bGw9PWU/dm9pZCAwOmUuYnl0ZUxlbmd0aCl9LHQuaXNBcnJheUVxdWFsPWZ1bmN0aW9uKGUsdCl7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IHI9MCxuPWUubGVuZ3RoO3I8bjtyKyspaWYoZVtyXSE9PXRbcl0pcmV0dXJuITE7cmV0dXJuITB9LHQuaXNOb2RlSlM9dm9pZCAwLHQubm9ybWFsaXplVW5pY29kZT1mdW5jdGlvbihlKXtyZXR1cm4gd3x8KHc9LyhbXHhBMFx4QjVcdTAzN0VcdTBFQjNcdTIwMDAtXHUyMDBBXHUyMDJGXHUyMTI2XHVGQjAwLVx1RkIwNFx1RkIwNlx1RkIyMC1cdUZCMzZcdUZCMzgtXHVGQjNDXHVGQjNFXHVGQjQwXHVGQjQxXHVGQjQzXHVGQjQ0XHVGQjQ2LVx1RkJBMVx1RkJBNC1cdUZCQTlcdUZCQUUtXHVGQkIxXHVGQkQzLVx1RkJEQ1x1RkJERS1cdUZCRTdcdUZCRUEtXHVGQkY4XHVGQkZDXHVGQkZEXHVGQzAwLVx1RkM1RFx1RkM2NC1cdUZDRjFcdUZDRjUtXHVGRDNEXHVGRDg4XHVGREY0XHVGREZBXHVGREZCXHVGRTcxXHVGRTc3XHVGRTc5XHVGRTdCXHVGRTdEXSspfChcdUZCMDUrKS9nLHY9bmV3IE1hcChbWyLvrIUiLCLFv3QiXV0pKSxlLnJlcGxhY2VBbGwodywoKGUsdCxyKT0+dD90Lm5vcm1hbGl6ZSgiTkZLQyIpOnYuZ2V0KHIpKSl9LHQub2JqZWN0RnJvbU1hcD1mdW5jdGlvbihlKXtjb25zdCB0PU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGNvbnN0W3Isbl1vZiBlKXRbcl09bjtyZXR1cm4gdH0sdC5vYmplY3RTaXplPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Qua2V5cyhlKS5sZW5ndGh9LHQuc2V0VmVyYm9zaXR5TGV2ZWw9ZnVuY3Rpb24oZSl7TnVtYmVyLmlzSW50ZWdlcihlKSYmKHM9ZSl9LHQuc2hhZG93PWQsdC5zdHJpbmczMj1mdW5jdGlvbihlKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShlPj4yNCYyNTUsZT4+MTYmMjU1LGU+PjgmMjU1LDI1NSZlKX0sdC5zdHJpbmdUb0J5dGVzPXAsdC5zdHJpbmdUb1BERlN0cmluZz1mdW5jdGlvbihlKXtpZihlWzBdPj0iw68iKXtsZXQgdDtpZigiw74iPT09ZVswXSYmIsO/Ij09PWVbMV0/dD0idXRmLTE2YmUiOiLDvyI9PT1lWzBdJiYiw74iPT09ZVsxXT90PSJ1dGYtMTZsZSI6IsOvIj09PWVbMF0mJiLCuyI9PT1lWzFdJiYiwr8iPT09ZVsyXSYmKHQ9InV0Zi04IiksdCl0cnl7Y29uc3Qgcj1uZXcgVGV4dERlY29kZXIodCx7ZmF0YWw6ITB9KSxuPXAoZSk7cmV0dXJuIHIuZGVjb2RlKG4pfWNhdGNoKGUpe28oJ3N0cmluZ1RvUERGU3RyaW5nOiAiJy5jb25jYXQoZSwnIi4nKSl9fWNvbnN0IHQ9W107Zm9yKGxldCByPTAsbj1lLmxlbmd0aDtyPG47cisrKXtjb25zdCBuPWJbZS5jaGFyQ29kZUF0KHIpXTt0LnB1c2gobj9TdHJpbmcuZnJvbUNoYXJDb2RlKG4pOmUuY2hhckF0KHIpKX1yZXR1cm4gdC5qb2luKCIiKX0sdC5zdHJpbmdUb1VURjhTdHJpbmc9eSx0LnVucmVhY2hhYmxlPWwsdC51dGY4U3RyaW5nVG9TdHJpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChlKSl9LHQud2Fybj1vLHIoMikscigxNDUpLHIoMTQ3KSxyKDE0OCkscigxMzkpLHIoODQpLHIoOTMpLHIoOTQpLHIoOTcpLHIoOTkpLHIoMTAxKSxyKDEwNSkscigxMDgpLHIoMTE1KTtjb25zdCBhPSEoIm9iamVjdCIhPXR5cGVvZiBwcm9jZXNzfHxwcm9jZXNzKyIiIT0iW29iamVjdCBwcm9jZXNzXSJ8fHByb2Nlc3MudmVyc2lvbnMubnd8fHByb2Nlc3MudmVyc2lvbnMuZWxlY3Ryb24mJnByb2Nlc3MudHlwZSYmImJyb3dzZXIiIT09cHJvY2Vzcy50eXBlKTt0LmlzTm9kZUpTPWEsdC5JREVOVElUWV9NQVRSSVg9WzEsMCwwLDEsMCwwXSx0LkZPTlRfSURFTlRJVFlfTUFUUklYPVsuMDAxLDAsMCwuMDAxLDAsMF0sdC5NQVhfSU1BR0VfU0laRV9UT19DQUNIRT0xZTcsdC5MSU5FX0ZBQ1RPUj0xLjM1LHQuTElORV9ERVNDRU5UX0ZBQ1RPUj0uMzUsdC5CQVNFTElORV9GQUNUT1I9LjI1OTI1OTI1OTI1OTI1OTI0LHQuUmVuZGVyaW5nSW50ZW50RmxhZz17QU5ZOjEsRElTUExBWToyLFBSSU5UOjQsU0FWRTo4LEFOTk9UQVRJT05TX0ZPUk1TOjE2LEFOTk9UQVRJT05TX1NUT1JBR0U6MzIsQU5OT1RBVElPTlNfRElTQUJMRTo2NCxPUExJU1Q6MjU2fSx0LkFubm90YXRpb25Nb2RlPXtESVNBQkxFOjAsRU5BQkxFOjEsRU5BQkxFX0ZPUk1TOjIsRU5BQkxFX1NUT1JBR0U6M30sdC5Bbm5vdGF0aW9uRWRpdG9yUHJlZml4PSJwZGZqc19pbnRlcm5hbF9lZGl0b3JfIix0LkFubm90YXRpb25FZGl0b3JUeXBlPXtESVNBQkxFOi0xLE5PTkU6MCxGUkVFVEVYVDozLFNUQU1QOjEzLElOSzoxNX0sdC5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZT17UkVTSVpFOjEsRlJFRVRFWFRfU0laRToxMSxGUkVFVEVYVF9DT0xPUjoxMixGUkVFVEVYVF9PUEFDSVRZOjEzLElOS19DT0xPUjoyMSxJTktfVEhJQ0tORVNTOjIyLElOS19PUEFDSVRZOjIzfSx0LlBlcm1pc3Npb25GbGFnPXtQUklOVDo0LE1PRElGWV9DT05URU5UUzo4LENPUFk6MTYsTU9ESUZZX0FOTk9UQVRJT05TOjMyLEZJTExfSU5URVJBQ1RJVkVfRk9STVM6MjU2LENPUFlfRk9SX0FDQ0VTU0lCSUxJVFk6NTEyLEFTU0VNQkxFOjEwMjQsUFJJTlRfSElHSF9RVUFMSVRZOjIwNDh9LHQuVGV4dFJlbmRlcmluZ01vZGU9e0ZJTEw6MCxTVFJPS0U6MSxGSUxMX1NUUk9LRToyLElOVklTSUJMRTozLEZJTExfQUREX1RPX1BBVEg6NCxTVFJPS0VfQUREX1RPX1BBVEg6NSxGSUxMX1NUUk9LRV9BRERfVE9fUEFUSDo2LEFERF9UT19QQVRIOjcsRklMTF9TVFJPS0VfTUFTSzozLEFERF9UT19QQVRIX0ZMQUc6NH0sdC5JbWFnZUtpbmQ9e0dSQVlTQ0FMRV8xQlBQOjEsUkdCXzI0QlBQOjIsUkdCQV8zMkJQUDozfSx0LkFubm90YXRpb25UeXBlPXtURVhUOjEsTElOSzoyLEZSRUVURVhUOjMsTElORTo0LFNRVUFSRTo1LENJUkNMRTo2LFBPTFlHT046NyxQT0xZTElORTo4LEhJR0hMSUdIVDo5LFVOREVSTElORToxMCxTUVVJR0dMWToxMSxTVFJJS0VPVVQ6MTIsU1RBTVA6MTMsQ0FSRVQ6MTQsSU5LOjE1LFBPUFVQOjE2LEZJTEVBVFRBQ0hNRU5UOjE3LFNPVU5EOjE4LE1PVklFOjE5LFdJREdFVDoyMCxTQ1JFRU46MjEsUFJJTlRFUk1BUks6MjIsVFJBUE5FVDoyMyxXQVRFUk1BUks6MjQsVEhSRUVEOjI1LFJFREFDVDoyNn0sdC5Bbm5vdGF0aW9uUmVwbHlUeXBlPXtHUk9VUDoiR3JvdXAiLFJFUExZOiJSIn0sdC5Bbm5vdGF0aW9uRmxhZz17SU5WSVNJQkxFOjEsSElEREVOOjIsUFJJTlQ6NCxOT1pPT006OCxOT1JPVEFURToxNixOT1ZJRVc6MzIsUkVBRE9OTFk6NjQsTE9DS0VEOjEyOCxUT0dHTEVOT1ZJRVc6MjU2LExPQ0tFRENPTlRFTlRTOjUxMn0sdC5Bbm5vdGF0aW9uRmllbGRGbGFnPXtSRUFET05MWToxLFJFUVVJUkVEOjIsTk9FWFBPUlQ6NCxNVUxUSUxJTkU6NDA5NixQQVNTV09SRDo4MTkyLE5PVE9HR0xFVE9PRkY6MTYzODQsUkFESU86MzI3NjgsUFVTSEJVVFRPTjo2NTUzNixDT01CTzoxMzEwNzIsRURJVDoyNjIxNDQsU09SVDo1MjQyODgsRklMRVNFTEVDVDoxMDQ4NTc2LE1VTFRJU0VMRUNUOjIwOTcxNTIsRE9OT1RTUEVMTENIRUNLOjQxOTQzMDQsRE9OT1RTQ1JPTEw6ODM4ODYwOCxDT01COjE2Nzc3MjE2LFJJQ0hURVhUOjMzNTU0NDMyLFJBRElPU0lOVU5JU09OOjMzNTU0NDMyLENPTU1JVE9OU0VMQ0hBTkdFOjY3MTA4ODY0fSx0LkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGU9e1NPTElEOjEsREFTSEVEOjIsQkVWRUxFRDozLElOU0VUOjQsVU5ERVJMSU5FOjV9LHQuQW5ub3RhdGlvbkFjdGlvbkV2ZW50VHlwZT17RToiTW91c2UgRW50ZXIiLFg6Ik1vdXNlIEV4aXQiLEQ6Ik1vdXNlIERvd24iLFU6Ik1vdXNlIFVwIixGbzoiRm9jdXMiLEJsOiJCbHVyIixQTzoiUGFnZU9wZW4iLFBDOiJQYWdlQ2xvc2UiLFBWOiJQYWdlVmlzaWJsZSIsUEk6IlBhZ2VJbnZpc2libGUiLEs6IktleXN0cm9rZSIsRjoiRm9ybWF0IixWOiJWYWxpZGF0ZSIsQzoiQ2FsY3VsYXRlIn0sdC5Eb2N1bWVudEFjdGlvbkV2ZW50VHlwZT17V0M6IldpbGxDbG9zZSIsV1M6IldpbGxTYXZlIixEUzoiRGlkU2F2ZSIsV1A6IldpbGxQcmludCIsRFA6IkRpZFByaW50In0sdC5QYWdlQWN0aW9uRXZlbnRUeXBlPXtPOiJQYWdlT3BlbiIsQzoiUGFnZUNsb3NlIn07Y29uc3QgaT17RVJST1JTOjAsV0FSTklOR1M6MSxJTkZPUzo1fTt0LlZlcmJvc2l0eUxldmVsPWksdC5DTWFwQ29tcHJlc3Npb25UeXBlPXtOT05FOjAsQklOQVJZOjF9LHQuT1BTPXtkZXBlbmRlbmN5OjEsc2V0TGluZVdpZHRoOjIsc2V0TGluZUNhcDozLHNldExpbmVKb2luOjQsc2V0TWl0ZXJMaW1pdDo1LHNldERhc2g6NixzZXRSZW5kZXJpbmdJbnRlbnQ6NyxzZXRGbGF0bmVzczo4LHNldEdTdGF0ZTo5LHNhdmU6MTAscmVzdG9yZToxMSx0cmFuc2Zvcm06MTIsbW92ZVRvOjEzLGxpbmVUbzoxNCxjdXJ2ZVRvOjE1LGN1cnZlVG8yOjE2LGN1cnZlVG8zOjE3LGNsb3NlUGF0aDoxOCxyZWN0YW5nbGU6MTksc3Ryb2tlOjIwLGNsb3NlU3Ryb2tlOjIxLGZpbGw6MjIsZW9GaWxsOjIzLGZpbGxTdHJva2U6MjQsZW9GaWxsU3Ryb2tlOjI1LGNsb3NlRmlsbFN0cm9rZToyNixjbG9zZUVPRmlsbFN0cm9rZToyNyxlbmRQYXRoOjI4LGNsaXA6MjksZW9DbGlwOjMwLGJlZ2luVGV4dDozMSxlbmRUZXh0OjMyLHNldENoYXJTcGFjaW5nOjMzLHNldFdvcmRTcGFjaW5nOjM0LHNldEhTY2FsZTozNSxzZXRMZWFkaW5nOjM2LHNldEZvbnQ6Mzcsc2V0VGV4dFJlbmRlcmluZ01vZGU6Mzgsc2V0VGV4dFJpc2U6MzksbW92ZVRleHQ6NDAsc2V0TGVhZGluZ01vdmVUZXh0OjQxLHNldFRleHRNYXRyaXg6NDIsbmV4dExpbmU6NDMsc2hvd1RleHQ6NDQsc2hvd1NwYWNlZFRleHQ6NDUsbmV4dExpbmVTaG93VGV4dDo0NixuZXh0TGluZVNldFNwYWNpbmdTaG93VGV4dDo0NyxzZXRDaGFyV2lkdGg6NDgsc2V0Q2hhcldpZHRoQW5kQm91bmRzOjQ5LHNldFN0cm9rZUNvbG9yU3BhY2U6NTAsc2V0RmlsbENvbG9yU3BhY2U6NTEsc2V0U3Ryb2tlQ29sb3I6NTIsc2V0U3Ryb2tlQ29sb3JOOjUzLHNldEZpbGxDb2xvcjo1NCxzZXRGaWxsQ29sb3JOOjU1LHNldFN0cm9rZUdyYXk6NTYsc2V0RmlsbEdyYXk6NTcsc2V0U3Ryb2tlUkdCQ29sb3I6NTgsc2V0RmlsbFJHQkNvbG9yOjU5LHNldFN0cm9rZUNNWUtDb2xvcjo2MCxzZXRGaWxsQ01ZS0NvbG9yOjYxLHNoYWRpbmdGaWxsOjYyLGJlZ2luSW5saW5lSW1hZ2U6NjMsYmVnaW5JbWFnZURhdGE6NjQsZW5kSW5saW5lSW1hZ2U6NjUscGFpbnRYT2JqZWN0OjY2LG1hcmtQb2ludDo2NyxtYXJrUG9pbnRQcm9wczo2OCxiZWdpbk1hcmtlZENvbnRlbnQ6NjksYmVnaW5NYXJrZWRDb250ZW50UHJvcHM6NzAsZW5kTWFya2VkQ29udGVudDo3MSxiZWdpbkNvbXBhdDo3MixlbmRDb21wYXQ6NzMscGFpbnRGb3JtWE9iamVjdEJlZ2luOjc0LHBhaW50Rm9ybVhPYmplY3RFbmQ6NzUsYmVnaW5Hcm91cDo3NixlbmRHcm91cDo3NyxiZWdpbkFubm90YXRpb246ODAsZW5kQW5ub3RhdGlvbjo4MSxwYWludEltYWdlTWFza1hPYmplY3Q6ODMscGFpbnRJbWFnZU1hc2tYT2JqZWN0R3JvdXA6ODQscGFpbnRJbWFnZVhPYmplY3Q6ODUscGFpbnRJbmxpbmVJbWFnZVhPYmplY3Q6ODYscGFpbnRJbmxpbmVJbWFnZVhPYmplY3RHcm91cDo4NyxwYWludEltYWdlWE9iamVjdFJlcGVhdDo4OCxwYWludEltYWdlTWFza1hPYmplY3RSZXBlYXQ6ODkscGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrOjkwLGNvbnN0cnVjdFBhdGg6OTF9LHQuUGFzc3dvcmRSZXNwb25zZXM9e05FRURfUEFTU1dPUkQ6MSxJTkNPUlJFQ1RfUEFTU1dPUkQ6Mn07bGV0IHM9aS5XQVJOSU5HUztmdW5jdGlvbiBvKGUpe3M+PWkuV0FSTklOR1MmJmNvbnNvbGUubG9nKCJXYXJuaW5nOiAiLmNvbmNhdChlKSl9ZnVuY3Rpb24gbChlKXt0aHJvdyBuZXcgRXJyb3IoZSl9ZnVuY3Rpb24gZChlLHQscil7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiFuLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMX0pLHJ9Y29uc3QgZj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXt0aGlzLmNvbnN0cnVjdG9yPT09ZSYmbCgiQ2Fubm90IGluaXRpYWxpemUgQmFzZUV4Y2VwdGlvbi4iKSx0aGlzLm1lc3NhZ2U9dCx0aGlzLm5hbWU9cn1yZXR1cm4gZS5wcm90b3R5cGU9bmV3IEVycm9yLGUuY29uc3RydWN0b3I9ZSxlfSgpO2Z1bmN0aW9uIGcoZSl7Im9iamVjdCI9PXR5cGVvZiBlJiZ2b2lkIDAhPT0obnVsbD09ZT92b2lkIDA6ZS5sZW5ndGgpfHxsKCJJbnZhbGlkIGFyZ3VtZW50IGZvciBieXRlc1RvU3RyaW5nIik7Y29uc3QgdD1lLmxlbmd0aCxyPTgxOTI7aWYodDxyKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsZSk7Y29uc3Qgbj1bXTtmb3IobGV0IGE9MDthPHQ7YSs9cil7Y29uc3QgaT1NYXRoLm1pbihhK3IsdCkscz1lLnN1YmFycmF5KGEsaSk7bi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxzKSl9cmV0dXJuIG4uam9pbigiIil9ZnVuY3Rpb24gcChlKXsic3RyaW5nIiE9dHlwZW9mIGUmJmwoIkludmFsaWQgYXJndW1lbnQgZm9yIHN0cmluZ1RvQnl0ZXMiKTtjb25zdCB0PWUubGVuZ3RoLHI9bmV3IFVpbnQ4QXJyYXkodCk7Zm9yKGxldCBuPTA7bjx0OysrbilyW25dPTI1NSZlLmNoYXJDb2RlQXQobik7cmV0dXJuIHJ9dC5CYXNlRXhjZXB0aW9uPWYsdC5QYXNzd29yZEV4Y2VwdGlvbj1jbGFzcyBleHRlbmRzIGZ7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlLCJQYXNzd29yZEV4Y2VwdGlvbiIpLHRoaXMuY29kZT10fX0sdC5Vbmtub3duRXJyb3JFeGNlcHRpb249Y2xhc3MgZXh0ZW5kcyBme2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSwiVW5rbm93bkVycm9yRXhjZXB0aW9uIiksdGhpcy5kZXRhaWxzPXR9fSx0LkludmFsaWRQREZFeGNlcHRpb249Y2xhc3MgZXh0ZW5kcyBme2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsIkludmFsaWRQREZFeGNlcHRpb24iKX19LHQuTWlzc2luZ1BERkV4Y2VwdGlvbj1jbGFzcyBleHRlbmRzIGZ7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwiTWlzc2luZ1BERkV4Y2VwdGlvbiIpfX0sdC5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb249Y2xhc3MgZXh0ZW5kcyBme2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSwiVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uIiksdGhpcy5zdGF0dXM9dH19LHQuRm9ybWF0RXJyb3I9Y2xhc3MgZXh0ZW5kcyBme2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsIkZvcm1hdEVycm9yIil9fSx0LkFib3J0RXhjZXB0aW9uPWNsYXNzIGV4dGVuZHMgZntjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJBYm9ydEV4Y2VwdGlvbiIpfX0sdC5GZWF0dXJlVGVzdD1jbGFzc3tzdGF0aWMgZ2V0IGlzTGl0dGxlRW5kaWFuKCl7cmV0dXJuIGQodGhpcywiaXNMaXR0bGVFbmRpYW4iLGZ1bmN0aW9uKCl7Y29uc3QgZT1uZXcgVWludDhBcnJheSg0KTtyZXR1cm4gZVswXT0xLDE9PT1uZXcgVWludDMyQXJyYXkoZS5idWZmZXIsMCwxKVswXX0oKSl9c3RhdGljIGdldCBpc0V2YWxTdXBwb3J0ZWQoKXtyZXR1cm4gZCh0aGlzLCJpc0V2YWxTdXBwb3J0ZWQiLGZ1bmN0aW9uKCl7dHJ5e3JldHVybiBuZXcgRnVuY3Rpb24oIiIpLCEwfWNhdGNoKGUpe3JldHVybiExfX0oKSl9c3RhdGljIGdldCBpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCgpe3JldHVybiBkKHRoaXMsImlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkIiwidW5kZWZpbmVkIiE9dHlwZW9mIE9mZnNjcmVlbkNhbnZhcyl9c3RhdGljIGdldCBwbGF0Zm9ybSgpe3JldHVybiJ1bmRlZmluZWQiPT10eXBlb2YgbmF2aWdhdG9yP2QodGhpcywicGxhdGZvcm0iLHtpc1dpbjohMSxpc01hYzohMX0pOmQodGhpcywicGxhdGZvcm0iLHtpc1dpbjpuYXZpZ2F0b3IucGxhdGZvcm0uaW5jbHVkZXMoIldpbiIpLGlzTWFjOm5hdmlnYXRvci5wbGF0Zm9ybS5pbmNsdWRlcygiTWFjIil9KX19O2NvbnN0IG09Wy4uLkFycmF5KDI1Nikua2V5cygpXS5tYXAoKGU9PmUudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIjAiKSkpO3QuVXRpbD1jbGFzc3tzdGF0aWMgbWFrZUhleENvbG9yKGUsdCxyKXtyZXR1cm4iIyIuY29uY2F0KG1bZV0pLmNvbmNhdChtW3RdKS5jb25jYXQobVtyXSl9c3RhdGljIHNjYWxlTWluTWF4KGUsdCl7bGV0IHI7ZVswXT8oZVswXTwwJiYocj10WzBdLHRbMF09dFsxXSx0WzFdPXIpLHRbMF0qPWVbMF0sdFsxXSo9ZVswXSxlWzNdPDAmJihyPXRbMl0sdFsyXT10WzNdLHRbM109ciksdFsyXSo9ZVszXSx0WzNdKj1lWzNdKToocj10WzBdLHRbMF09dFsyXSx0WzJdPXIscj10WzFdLHRbMV09dFszXSx0WzNdPXIsZVsxXTwwJiYocj10WzJdLHRbMl09dFszXSx0WzNdPXIpLHRbMl0qPWVbMV0sdFszXSo9ZVsxXSxlWzJdPDAmJihyPXRbMF0sdFswXT10WzFdLHRbMV09ciksdFswXSo9ZVsyXSx0WzFdKj1lWzJdKSx0WzBdKz1lWzRdLHRbMV0rPWVbNF0sdFsyXSs9ZVs1XSx0WzNdKz1lWzVdfXN0YXRpYyB0cmFuc2Zvcm0oZSx0KXtyZXR1cm5bZVswXSp0WzBdK2VbMl0qdFsxXSxlWzFdKnRbMF0rZVszXSp0WzFdLGVbMF0qdFsyXStlWzJdKnRbM10sZVsxXSp0WzJdK2VbM10qdFszXSxlWzBdKnRbNF0rZVsyXSp0WzVdK2VbNF0sZVsxXSp0WzRdK2VbM10qdFs1XStlWzVdXX1zdGF0aWMgYXBwbHlUcmFuc2Zvcm0oZSx0KXtyZXR1cm5bZVswXSp0WzBdK2VbMV0qdFsyXSt0WzRdLGVbMF0qdFsxXStlWzFdKnRbM10rdFs1XV19c3RhdGljIGFwcGx5SW52ZXJzZVRyYW5zZm9ybShlLHQpe2NvbnN0IHI9dFswXSp0WzNdLXRbMV0qdFsyXTtyZXR1cm5bKGVbMF0qdFszXS1lWzFdKnRbMl0rdFsyXSp0WzVdLXRbNF0qdFszXSkvciwoLWVbMF0qdFsxXStlWzFdKnRbMF0rdFs0XSp0WzFdLXRbNV0qdFswXSkvcl19c3RhdGljIGdldEF4aWFsQWxpZ25lZEJvdW5kaW5nQm94KGUsdCl7Y29uc3Qgcj10aGlzLmFwcGx5VHJhbnNmb3JtKGUsdCksbj10aGlzLmFwcGx5VHJhbnNmb3JtKGUuc2xpY2UoMiw0KSx0KSxhPXRoaXMuYXBwbHlUcmFuc2Zvcm0oW2VbMF0sZVszXV0sdCksaT10aGlzLmFwcGx5VHJhbnNmb3JtKFtlWzJdLGVbMV1dLHQpO3JldHVybltNYXRoLm1pbihyWzBdLG5bMF0sYVswXSxpWzBdKSxNYXRoLm1pbihyWzFdLG5bMV0sYVsxXSxpWzFdKSxNYXRoLm1heChyWzBdLG5bMF0sYVswXSxpWzBdKSxNYXRoLm1heChyWzFdLG5bMV0sYVsxXSxpWzFdKV19c3RhdGljIGludmVyc2VUcmFuc2Zvcm0oZSl7Y29uc3QgdD1lWzBdKmVbM10tZVsxXSplWzJdO3JldHVybltlWzNdL3QsLWVbMV0vdCwtZVsyXS90LGVbMF0vdCwoZVsyXSplWzVdLWVbNF0qZVszXSkvdCwoZVs0XSplWzFdLWVbNV0qZVswXSkvdF19c3RhdGljIHNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKGUpe2NvbnN0IHQ9W2VbMF0sZVsyXSxlWzFdLGVbM11dLHI9ZVswXSp0WzBdK2VbMV0qdFsyXSxuPWVbMF0qdFsxXStlWzFdKnRbM10sYT1lWzJdKnRbMF0rZVszXSp0WzJdLGk9ZVsyXSp0WzFdK2VbM10qdFszXSxzPShyK2kpLzIsbz1NYXRoLnNxcnQoKHIraSkqKjItNCoocippLWEqbikpLzIsYz1zK298fDEsbD1zLW98fDE7cmV0dXJuW01hdGguc3FydChjKSxNYXRoLnNxcnQobCldfXN0YXRpYyBub3JtYWxpemVSZWN0KGUpe2NvbnN0IHQ9ZS5zbGljZSgwKTtyZXR1cm4gZVswXT5lWzJdJiYodFswXT1lWzJdLHRbMl09ZVswXSksZVsxXT5lWzNdJiYodFsxXT1lWzNdLHRbM109ZVsxXSksdH1zdGF0aWMgaW50ZXJzZWN0KGUsdCl7Y29uc3Qgcj1NYXRoLm1heChNYXRoLm1pbihlWzBdLGVbMl0pLE1hdGgubWluKHRbMF0sdFsyXSkpLG49TWF0aC5taW4oTWF0aC5tYXgoZVswXSxlWzJdKSxNYXRoLm1heCh0WzBdLHRbMl0pKTtpZihyPm4pcmV0dXJuIG51bGw7Y29uc3QgYT1NYXRoLm1heChNYXRoLm1pbihlWzFdLGVbM10pLE1hdGgubWluKHRbMV0sdFszXSkpLGk9TWF0aC5taW4oTWF0aC5tYXgoZVsxXSxlWzNdKSxNYXRoLm1heCh0WzFdLHRbM10pKTtyZXR1cm4gYT5pP251bGw6W3IsYSxuLGldfXN0YXRpYyBiZXppZXJCb3VuZGluZ0JveChlLHQscixuLGEsaSxzLG8pe2NvbnN0IGM9W10sbD1bW10sW11dO2xldCBoLHUsZCxmLGcscCxtLGI7Zm9yKGxldCBsPTA7bDwyOysrbClpZigwPT09bD8odT02KmUtMTIqcis2KmEsaD0tMyplKzkqci05KmErMypzLGQ9MypyLTMqZSk6KHU9Nip0LTEyKm4rNippLGg9LTMqdCs5Km4tOSppKzMqbyxkPTMqbi0zKnQpLE1hdGguYWJzKGgpPDFlLTEyKXtpZihNYXRoLmFicyh1KTwxZS0xMiljb250aW51ZTtmPS1kL3UsMDxmJiZmPDEmJmMucHVzaChmKX1lbHNlIG09dSp1LTQqZCpoLGI9TWF0aC5zcXJ0KG0pLG08MHx8KGc9KC11K2IpLygyKmgpLDA8ZyYmZzwxJiZjLnB1c2goZykscD0oLXUtYikvKDIqaCksMDxwJiZwPDEmJmMucHVzaChwKSk7bGV0IHksdz1jLmxlbmd0aDtjb25zdCB2PXc7Zm9yKDt3LS07KWY9Y1t3XSx5PTEtZixsWzBdW3ddPXkqeSp5KmUrMyp5KnkqZipyKzMqeSpmKmYqYStmKmYqZipzLGxbMV1bd109eSp5KnkqdCszKnkqeSpmKm4rMyp5KmYqZippK2YqZipmKm87cmV0dXJuIGxbMF1bdl09ZSxsWzFdW3ZdPXQsbFswXVt2KzFdPXMsbFsxXVt2KzFdPW8sbFswXS5sZW5ndGg9bFsxXS5sZW5ndGg9disyLFtNYXRoLm1pbiguLi5sWzBdKSxNYXRoLm1pbiguLi5sWzFdKSxNYXRoLm1heCguLi5sWzBdKSxNYXRoLm1heCguLi5sWzFdKV19fTtjb25zdCBiPVswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3MjgsNzExLDcxMCw3MjksNzMzLDczMSw3MzAsNzMyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDgyMjYsODIyNCw4MjI1LDgyMzAsODIxMiw4MjExLDQwMiw4MjYwLDgyNDksODI1MCw4NzIyLDgyNDAsODIyMiw4MjIwLDgyMjEsODIxNiw4MjE3LDgyMTgsODQ4Miw2NDI1Nyw2NDI1OCwzMjEsMzM4LDM1MiwzNzYsMzgxLDMwNSwzMjIsMzM5LDM1MywzODIsMCw4MzY0XTtmdW5jdGlvbiB5KGUpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKGUpKX10LlByb21pc2VDYXBhYmlsaXR5PShuPW5ldyBXZWFrTWFwLGNsYXNze2NvbnN0cnVjdG9yKCl7Yyh0aGlzLG4se3dyaXRhYmxlOiEwLHZhbHVlOiExfSksdGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKCgoZSx0KT0+e3RoaXMucmVzb2x2ZT10PT57dSh0aGlzLG4sITApLGUodCl9LHRoaXMucmVqZWN0PWU9Pnt1KHRoaXMsbiwhMCksdChlKX19KSl9Z2V0IHNldHRsZWQoKXtyZXR1cm4gaCh0aGlzLG4pfX0pO2xldCB3PW51bGwsdj1udWxsfSwoZSx0LHIpPT57dmFyIG49cig0OCksYT1yKDE0KSxpPXIoNzcpLHM9cigxNDYpLG89VVJMU2VhcmNoUGFyYW1zLGM9by5wcm90b3R5cGUsbD1hKGMuYXBwZW5kKSxoPWEoYy5kZWxldGUpLHU9YShjLmZvckVhY2gpLGQ9YShbXS5wdXNoKSxmPW5ldyBvKCJhPTEmYT0yIik7Zi5kZWxldGUoImEiLDEpLGYrIiIhPSJhPTIiJiZuKGMsImRlbGV0ZSIsKGZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGgscj10PDI/dm9pZCAwOmFyZ3VtZW50c1sxXTtpZih0JiZ2b2lkIDA9PT1yKXJldHVybiBoKHRoaXMsZSk7dmFyIG49W107dSh0aGlzLChmdW5jdGlvbihlLHQpe2Qobix7a2V5OnQsdmFsdWU6ZX0pfSkpLHModCwxKTtmb3IodmFyIGEsbz1pKGUpLGM9aShyKSxmPTAsZz0wLHA9ITEsbT1uLmxlbmd0aDtmPG07KWE9bltmKytdLHB8fGEua2V5PT09bz8ocD0hMCxoKHRoaXMsYS5rZXkpKTpnKys7Zm9yKDtnPG07KShhPW5bZysrXSkua2V5PT09byYmYS52YWx1ZT09PWN8fGwodGhpcyxhLmtleSxhLnZhbHVlKX0pLHtlbnVtZXJhYmxlOiEwLHVuc2FmZTohMH0pfSxlPT57dmFyIHQ9VHlwZUVycm9yO2UuZXhwb3J0cz1mdW5jdGlvbihlLHIpe2lmKGU8cil0aHJvdyB0KCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpO3JldHVybiBlfX0sKGUsdCxyKT0+e3ZhciBuPXIoNDgpLGE9cigxNCksaT1yKDc3KSxzPXIoMTQ2KSxvPVVSTFNlYXJjaFBhcmFtcyxjPW8ucHJvdG90eXBlLGw9YShjLmdldEFsbCksaD1hKGMuaGFzKTtuZXcgbygiYT0xIikuaGFzKCJhIiwyKSYmbihjLCJoYXMiLChmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoLHI9dDwyP3ZvaWQgMDphcmd1bWVudHNbMV07aWYodCYmdm9pZCAwPT09cilyZXR1cm4gaCh0aGlzLGUpO3ZhciBuPWwodGhpcyxlKTtzKHQsMSk7Zm9yKHZhciBhPWkociksbz0wO288bi5sZW5ndGg7KWlmKG5bbysrXT09PWEpcmV0dXJuITA7cmV0dXJuITF9KSx7ZW51bWVyYWJsZTohMCx1bnNhZmU6ITB9KX0sKGUsdCxyKT0+e3ZhciBuPXIoNiksYT1yKDE0KSxpPXIoODcpLHM9VVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZSxvPWEocy5mb3JFYWNoKTtuJiYhKCJzaXplImluIHMpJiZpKHMsInNpemUiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgZT0wO3JldHVybiBvKHRoaXMsKGZ1bmN0aW9uKCl7ZSsrfSkpLGV9LGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwfSl9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5YUmVmUGFyc2VFeGNlcHRpb249dC5YUmVmRW50cnlFeGNlcHRpb249dC5QYXJzZXJFT0ZFeGNlcHRpb249dC5QREZfVkVSU0lPTl9SRUdFWFA9dC5NaXNzaW5nRGF0YUV4Y2VwdGlvbj12b2lkIDAsdC5hcnJheUJ1ZmZlcnNUb0J5dGVzPWZ1bmN0aW9uKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7aWYoMD09PXQpcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO2lmKDE9PT10KXJldHVybiBuZXcgVWludDhBcnJheShlWzBdKTtsZXQgcj0wO2ZvcihsZXQgbj0wO248dDtuKyspcis9ZVtuXS5ieXRlTGVuZ3RoO2NvbnN0IG49bmV3IFVpbnQ4QXJyYXkocik7bGV0IGE9MDtmb3IobGV0IHI9MDtyPHQ7cisrKXtjb25zdCB0PW5ldyBVaW50OEFycmF5KGVbcl0pO24uc2V0KHQsYSksYSs9dC5ieXRlTGVuZ3RofXJldHVybiBufSx0LmNvbGxlY3RBY3Rpb25zPWZ1bmN0aW9uKGUsdCxyKXtjb25zdCBpPU9iamVjdC5jcmVhdGUobnVsbCkscz1oKHtkaWN0OnQsa2V5OiJBQSIsc3RvcFdoZW5Gb3VuZDohMX0pO2lmKHMpZm9yKGxldCB0PXMubGVuZ3RoLTE7dD49MDt0LS0pe2NvbnN0IG49c1t0XTtpZihuIGluc3RhbmNlb2YgYS5EaWN0KWZvcihjb25zdCB0IG9mIG4uZ2V0S2V5cygpKXtjb25zdCBzPXJbdF07aWYoIXMpY29udGludWU7Y29uc3Qgbz1bXTtkKG4uZ2V0UmF3KHQpLGUsbyxuZXcgYS5SZWZTZXQpLG8ubGVuZ3RoPjAmJihpW3NdPW8pfX1pZih0LmhhcygiQSIpKXtjb25zdCByPVtdO2QodC5nZXQoIkEiKSxlLHIsbmV3IGEuUmVmU2V0KSxyLmxlbmd0aD4wJiYoaS5BY3Rpb249cil9cmV0dXJuKDAsbi5vYmplY3RTaXplKShpKT4wP2k6bnVsbH0sdC5lbmNvZGVUb1htbFN0cmluZz1mdW5jdGlvbihlKXtjb25zdCB0PVtdO2xldCByPTA7Zm9yKGxldCBuPTAsYT1lLmxlbmd0aDtuPGE7bisrKXtjb25zdCBhPWUuY29kZVBvaW50QXQobik7aWYoMzI8PWEmJmE8PTEyNil7Y29uc3QgaT1mW2FdO2kmJihyPG4mJnQucHVzaChlLnN1YnN0cmluZyhyLG4pKSx0LnB1c2goaSkscj1uKzEpfWVsc2UgcjxuJiZ0LnB1c2goZS5zdWJzdHJpbmcocixuKSksdC5wdXNoKCImI3giLmNvbmNhdChhLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLCI7IikpLGE+NTUyOTUmJihhPDU3MzQ0fHxhPjY1NTMzKSYmbisrLHI9bisxfXJldHVybiAwPT09dC5sZW5ndGg/ZToocjxlLmxlbmd0aCYmdC5wdXNoKGUuc3Vic3RyaW5nKHIsZS5sZW5ndGgpKSx0LmpvaW4oIiIpKX0sdC5lc2NhcGVQREZOYW1lPWZ1bmN0aW9uKGUpe2NvbnN0IHQ9W107bGV0IHI9MDtmb3IobGV0IG49MCxhPWUubGVuZ3RoO248YTtuKyspe2NvbnN0IGE9ZS5jaGFyQ29kZUF0KG4pOyhhPDMzfHxhPjEyNnx8MzU9PT1hfHw0MD09PWF8fDQxPT09YXx8NjA9PT1hfHw2Mj09PWF8fDkxPT09YXx8OTM9PT1hfHwxMjM9PT1hfHwxMjU9PT1hfHw0Nz09PWF8fDM3PT09YSkmJihyPG4mJnQucHVzaChlLnN1YnN0cmluZyhyLG4pKSx0LnB1c2goIiMiLmNvbmNhdChhLnRvU3RyaW5nKDE2KSkpLHI9bisxKX1yZXR1cm4gMD09PXQubGVuZ3RoP2U6KHI8ZS5sZW5ndGgmJnQucHVzaChlLnN1YnN0cmluZyhyLGUubGVuZ3RoKSksdC5qb2luKCIiKSl9LHQuZXNjYXBlU3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2VBbGwoLyhbKClcXFxuXHJdKS9nLChlPT4iXG4iPT09ZT8iXFxuIjoiXHIiPT09ZT8iXFxyIjoiXFwiLmNvbmNhdChlKSkpfSx0LmdldEluaGVyaXRhYmxlUHJvcGVydHk9aCx0LmdldExvb2t1cFRhYmxlRmFjdG9yeT1mdW5jdGlvbihlKXtsZXQgdDtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSYmKHQ9T2JqZWN0LmNyZWF0ZShudWxsKSxlKHQpLGU9bnVsbCksdH19LHQuZ2V0TmV3QW5ub3RhdGlvbnNNYXA9ZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuIG51bGw7Y29uc3QgdD1uZXcgTWFwO2Zvcihjb25zdFtyLGFdb2YgZSl7aWYoIXIuc3RhcnRzV2l0aChuLkFubm90YXRpb25FZGl0b3JQcmVmaXgpKWNvbnRpbnVlO2xldCBlPXQuZ2V0KGEucGFnZUluZGV4KTtlfHwoZT1bXSx0LnNldChhLnBhZ2VJbmRleCxlKSksZS5wdXNoKGEpfXJldHVybiB0LnNpemU+MD90Om51bGx9LHQuZ2V0Um90YXRpb25NYXRyaXg9ZnVuY3Rpb24oZSx0LHIpe3N3aXRjaChlKXtjYXNlIDkwOnJldHVyblswLDEsLTEsMCx0LDBdO2Nhc2UgMTgwOnJldHVyblstMSwwLDAsLTEsdCxyXTtjYXNlIDI3MDpyZXR1cm5bMCwtMSwxLDAsMCxyXTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCByb3RhdGlvbiIpfX0sdC5pc0FzY2lpPWZ1bmN0aW9uKGUpe3JldHVybi9eW1x4MDAtXHg3Rl0qJC8udGVzdChlKX0sdC5pc1doaXRlU3BhY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIDMyPT09ZXx8OT09PWV8fDEzPT09ZXx8MTA9PT1lfSx0LmxvZzI9ZnVuY3Rpb24oZSl7cmV0dXJuIGU8PTA/MDpNYXRoLmNlaWwoTWF0aC5sb2cyKGUpKX0sdC5udW1iZXJUb1N0cmluZz1mdW5jdGlvbihlKXtpZihOdW1iZXIuaXNJbnRlZ2VyKGUpKXJldHVybiBlLnRvU3RyaW5nKCk7Y29uc3QgdD1NYXRoLnJvdW5kKDEwMCplKTtyZXR1cm4gdCUxMDA9PTA/KHQvMTAwKS50b1N0cmluZygpOnQlMTA9PTA/ZS50b0ZpeGVkKDEpOmUudG9GaXhlZCgyKX0sdC5wYXJzZVhGQVBhdGg9ZnVuY3Rpb24oZSl7Y29uc3QgdD0vKC4rKVxbKFxkKylcXSQvO3JldHVybiBlLnNwbGl0KCIuIikubWFwKChlPT57Y29uc3Qgcj1lLm1hdGNoKHQpO3JldHVybiByP3tuYW1lOnJbMV0scG9zOnBhcnNlSW50KHJbMl0sMTApfTp7bmFtZTplLHBvczowfX0pKX0sdC5yZWFkSW50OD1mdW5jdGlvbihlLHQpe3JldHVybiBlW3RdPDwyND4+MjR9LHQucmVhZFVpbnQxNj1mdW5jdGlvbihlLHQpe3JldHVybiBlW3RdPDw4fGVbdCsxXX0sdC5yZWFkVWludDMyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKGVbdF08PDI0fGVbdCsxXTw8MTZ8ZVt0KzJdPDw4fGVbdCszXSk+Pj4wfSx0LnJlY292ZXJKc1VSTD1mdW5jdGlvbihlKXtjb25zdCB0PW5ldyBSZWdFeHAoIl5cXHMqKCIrWyJhcHAubGF1bmNoVVJMIiwid2luZG93Lm9wZW4iLCJ4ZmEuaG9zdC5nb3RvVVJMIl0uam9pbigifCIpLnJlcGxhY2VBbGwoIi4iLCJcXC4iKSsiKVxcKCg/Oid8XCIpKFteJ1wiXSopKD86J3xcIikoPzosXFxzKihcXHcrKVxcKXxcXCkpIiwiaSIpLmV4ZWMoZSk7aWYobnVsbCE9dCYmdFsyXSl7Y29uc3QgZT10WzJdO2xldCByPSExO3JldHVybiJ0cnVlIj09PXRbM10mJiJhcHAubGF1bmNoVVJMIj09PXRbMV0mJihyPSEwKSx7dXJsOmUsbmV3V2luZG93OnJ9fXJldHVybiBudWxsfSx0LnN0cmluZ1RvVVRGMTZIZXhTdHJpbmc9ZnVuY3Rpb24oZSl7Y29uc3QgdD1bXTtmb3IobGV0IHI9MCxuPWUubGVuZ3RoO3I8bjtyKyspe2NvbnN0IG49ZS5jaGFyQ29kZUF0KHIpO3QucHVzaCgobj4+OCYyNTUpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCIwIiksKDI1NSZuKS50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKX1yZXR1cm4gdC5qb2luKCIiKX0sdC5zdHJpbmdUb1VURjE2U3RyaW5nPWZ1bmN0aW9uKGUpe2NvbnN0IHQ9W107YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSYmdC5wdXNoKCLDvsO/Iik7Zm9yKGxldCByPTAsbj1lLmxlbmd0aDtyPG47cisrKXtjb25zdCBuPWUuY2hhckNvZGVBdChyKTt0LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShuPj44JjI1NSksU3RyaW5nLmZyb21DaGFyQ29kZSgyNTUmbikpfXJldHVybiB0LmpvaW4oIiIpfSx0LnRvUm9tYW5OdW1lcmFscz1mdW5jdGlvbihlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdOygwLG4uYXNzZXJ0KShOdW1iZXIuaXNJbnRlZ2VyKGUpJiZlPjAsIlRoZSBudW1iZXIgc2hvdWxkIGJlIGEgcG9zaXRpdmUgaW50ZWdlci4iKTtjb25zdCByPVtdO2xldCBhO2Zvcig7ZT49MWUzOyllLT0xZTMsci5wdXNoKCJNIik7YT1lLzEwMHwwLGUlPTEwMCxyLnB1c2godVthXSksYT1lLzEwfDAsZSU9MTAsci5wdXNoKHVbMTArYV0pLHIucHVzaCh1WzIwK2VdKTtjb25zdCBpPXIuam9pbigiIik7cmV0dXJuIHQ/aS50b0xvd2VyQ2FzZSgpOml9LHQudmFsaWRhdGVDU1NGb250PWZ1bmN0aW9uKGUpe2NvbnN0IHQ9bmV3IFNldChbIjEwMCIsIjIwMCIsIjMwMCIsIjQwMCIsIjUwMCIsIjYwMCIsIjcwMCIsIjgwMCIsIjkwMCIsIjEwMDAiLCJub3JtYWwiLCJib2xkIiwiYm9sZGVyIiwibGlnaHRlciJdKSx7Zm9udEZhbWlseTpyLGZvbnRXZWlnaHQ6bixpdGFsaWNBbmdsZTphfT1lO2lmKCFnKHIsITApKXJldHVybiExO2NvbnN0IGk9bj9uLnRvU3RyaW5nKCk6IiI7ZS5mb250V2VpZ2h0PXQuaGFzKGkpP2k6IjQwMCI7Y29uc3Qgcz1wYXJzZUZsb2F0KGEpO3JldHVybiBlLml0YWxpY0FuZ2xlPWlzTmFOKHMpfHxzPC05MHx8cz45MD8iMTQiOmEudG9TdHJpbmcoKSwhMH0sdC52YWxpZGF0ZUZvbnROYW1lPWcscig4NCkscig5Mykscig5NCkscig5Nykscig5OSkscigxMDEpLHIoMTA1KSxyKDEwOCkscigxMTUpLHIoMTM5KSxyKDExNikscigxMjYpLHIoMTI4KSxyKDEzMSkscigxMzMpLHIoMTM1KSxyKDEzNykscigyKTt2YXIgbj1yKDE0NCksYT1yKDE1MCksaT1yKDE1MSk7dC5QREZfVkVSU0lPTl9SRUdFWFA9L15bMS05XVwuXGQkLztjbGFzcyBzIGV4dGVuZHMgbi5CYXNlRXhjZXB0aW9ue2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoIk1pc3NpbmcgZGF0YSBbIi5jb25jYXQoZSwiLCAiKS5jb25jYXQodCwiKSIpLCJNaXNzaW5nRGF0YUV4Y2VwdGlvbiIpLHRoaXMuYmVnaW49ZSx0aGlzLmVuZD10fX10Lk1pc3NpbmdEYXRhRXhjZXB0aW9uPXM7Y2xhc3MgbyBleHRlbmRzIG4uQmFzZUV4Y2VwdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJQYXJzZXJFT0ZFeGNlcHRpb24iKX19dC5QYXJzZXJFT0ZFeGNlcHRpb249bztjbGFzcyBjIGV4dGVuZHMgbi5CYXNlRXhjZXB0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsIlhSZWZFbnRyeUV4Y2VwdGlvbiIpfX10LlhSZWZFbnRyeUV4Y2VwdGlvbj1jO2NsYXNzIGwgZXh0ZW5kcyBuLkJhc2VFeGNlcHRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwiWFJlZlBhcnNlRXhjZXB0aW9uIil9fWZ1bmN0aW9uIGgoZSl7bGV0IHQse2RpY3Q6cixrZXk6bixnZXRBcnJheTppPSExLHN0b3BXaGVuRm91bmQ6cz0hMH09ZTtjb25zdCBvPW5ldyBhLlJlZlNldDtmb3IoO3IgaW5zdGFuY2VvZiBhLkRpY3QmJighci5vYmpJZHx8IW8uaGFzKHIub2JqSWQpKTspe3Iub2JqSWQmJm8ucHV0KHIub2JqSWQpO2NvbnN0IGU9aT9yLmdldEFycmF5KG4pOnIuZ2V0KG4pO2lmKHZvaWQgMCE9PWUpe2lmKHMpcmV0dXJuIGU7KHR8fCh0PVtdKSkucHVzaChlKX1yPXIuZ2V0KCJQYXJlbnQiKX1yZXR1cm4gdH10LlhSZWZQYXJzZUV4Y2VwdGlvbj1sO2NvbnN0IHU9WyIiLCJDIiwiQ0MiLCJDQ0MiLCJDRCIsIkQiLCJEQyIsIkRDQyIsIkRDQ0MiLCJDTSIsIiIsIlgiLCJYWCIsIlhYWCIsIlhMIiwiTCIsIkxYIiwiTFhYIiwiTFhYWCIsIlhDIiwiIiwiSSIsIklJIiwiSUlJIiwiSVYiLCJWIiwiVkkiLCJWSUkiLCJWSUlJIiwiSVgiXTtmdW5jdGlvbiBkKGUsdCxyLHMpe2lmKCFlKXJldHVybjtsZXQgbz1udWxsO2lmKGUgaW5zdGFuY2VvZiBhLlJlZil7aWYocy5oYXMoZSkpcmV0dXJuO289ZSxzLnB1dChvKSxlPXQuZmV0Y2goZSl9aWYoQXJyYXkuaXNBcnJheShlKSlmb3IoY29uc3QgbiBvZiBlKWQobix0LHIscyk7ZWxzZSBpZihlIGluc3RhbmNlb2YgYS5EaWN0KXtpZigoMCxhLmlzTmFtZSkoZS5nZXQoIlMiKSwiSmF2YVNjcmlwdCIpKXtjb25zdCB0PWUuZ2V0KCJKUyIpO2xldCBhO3QgaW5zdGFuY2VvZiBpLkJhc2VTdHJlYW0/YT10LmdldFN0cmluZygpOiJzdHJpbmciPT10eXBlb2YgdCYmKGE9dCksYSYmKGE9KDAsbi5zdHJpbmdUb1BERlN0cmluZykoYSkucmVwbGFjZUFsbCgiXDAiLCIiKSksYSYmci5wdXNoKGEpfWQoZS5nZXRSYXcoIk5leHQiKSx0LHIscyl9byYmcy5yZW1vdmUobyl9Y29uc3QgZj17NjA6IiZsdDsiLDYyOiImZ3Q7IiwzODoiJmFtcDsiLDM0OiImcXVvdDsiLDM5OiImYXBvczsifTtmdW5jdGlvbiBnKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07Y29uc3Qgcj0vXigifCcpLiooInwnKSQvLmV4ZWMoZSk7aWYociYmclsxXT09PXJbMl0pe2lmKG5ldyBSZWdFeHAoIlteXFxcXF0iLmNvbmNhdChyWzFdKSkudGVzdChlLnNsaWNlKDEsLTEpKSlyZXR1cm4gdCYmKDAsbi53YXJuKSgiRm9udEZhbWlseSBjb250YWlucyB1bmVzY2FwZWQgIi5jb25jYXQoclsxXSwiOiAiKS5jb25jYXQoZSwiLiIpKSwhMX1lbHNlIGZvcihjb25zdCByIG9mIGUuc3BsaXQoL1sgXHRdKy8pKWlmKC9eKFxkfCgtKFxkfC0pKSkvLnRlc3Qocil8fCEvXltcdy1cXF0rJC8udGVzdChyKSlyZXR1cm4gdCYmKDAsbi53YXJuKSgiRm9udEZhbWlseSBjb250YWlucyBpbnZhbGlkIDxjdXN0b20taWRlbnQ+OiAiLmNvbmNhdChlLCIuIikpLCExO3JldHVybiEwfX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlJlZlNldENhY2hlPXQuUmVmU2V0PXQuUmVmPXQuTmFtZT10LkVPRj10LkRpY3Q9dC5DbWQ9dC5DSVJDVUxBUl9SRUY9dm9pZCAwLHQuY2xlYXJQcmltaXRpdmVDYWNoZXM9ZnVuY3Rpb24oKXtzPU9iamVjdC5jcmVhdGUobnVsbCksbz1PYmplY3QuY3JlYXRlKG51bGwpLGM9T2JqZWN0LmNyZWF0ZShudWxsKX0sdC5pc0NtZD1mdW5jdGlvbihlLHQpe3JldHVybiBlIGluc3RhbmNlb2YgaCYmKHZvaWQgMD09PXR8fGUuY21kPT09dCl9LHQuaXNEaWN0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUgaW5zdGFuY2VvZiBkJiYodm9pZCAwPT09dHx8bShlLmdldCgiVHlwZSIpLHQpKX0sdC5pc05hbWU9bSx0LmlzUmVmc0VxdWFsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubnVtPT09dC5udW0mJmUuZ2VuPT09dC5nZW59LHIoMTM5KSxyKDExNikscigxMjYpLHIoMTI4KSxyKDEzMSkscigxMzMpLHIoMTM1KSxyKDEzNyk7dmFyIG49cigxNDQpO2NvbnN0IGE9U3ltYm9sKCJDSVJDVUxBUl9SRUYiKTt0LkNJUkNVTEFSX1JFRj1hO2NvbnN0IGk9U3ltYm9sKCJFT0YiKTt0LkVPRj1pO2xldCBzPU9iamVjdC5jcmVhdGUobnVsbCksbz1PYmplY3QuY3JlYXRlKG51bGwpLGM9T2JqZWN0LmNyZWF0ZShudWxsKTtjbGFzcyBse2NvbnN0cnVjdG9yKGUpe3RoaXMubmFtZT1lfXN0YXRpYyBnZXQoZSl7dmFyIHQ7cmV0dXJuKHQ9bylbZV18fCh0W2VdPW5ldyBsKGUpKX19dC5OYW1lPWw7Y2xhc3MgaHtjb25zdHJ1Y3RvcihlKXt0aGlzLmNtZD1lfXN0YXRpYyBnZXQoZSl7dmFyIHQ7cmV0dXJuKHQ9cylbZV18fCh0W2VdPW5ldyBoKGUpKX19dC5DbWQ9aDtjb25zdCB1PWZ1bmN0aW9uKCl7cmV0dXJuIHV9O2NsYXNzIGR7Y29uc3RydWN0b3IoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDt0aGlzLl9tYXA9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLnhyZWY9ZSx0aGlzLm9iaklkPW51bGwsdGhpcy5zdXBwcmVzc0VuY3J5cHRpb249ITEsdGhpcy5fX25vblNlcmlhbGl6YWJsZV9fPXV9YXNzaWduWHJlZihlKXt0aGlzLnhyZWY9ZX1nZXQgc2l6ZSgpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLl9tYXApLmxlbmd0aH1nZXQoZSx0LHIpe2xldCBuPXRoaXMuX21hcFtlXTtyZXR1cm4gdm9pZCAwPT09biYmdm9pZCAwIT09dCYmKG49dGhpcy5fbWFwW3RdLHZvaWQgMD09PW4mJnZvaWQgMCE9PXImJihuPXRoaXMuX21hcFtyXSkpLG4gaW5zdGFuY2VvZiBmJiZ0aGlzLnhyZWY/dGhpcy54cmVmLmZldGNoKG4sdGhpcy5zdXBwcmVzc0VuY3J5cHRpb24pOm59YXN5bmMgZ2V0QXN5bmMoZSx0LHIpe2xldCBuPXRoaXMuX21hcFtlXTtyZXR1cm4gdm9pZCAwPT09biYmdm9pZCAwIT09dCYmKG49dGhpcy5fbWFwW3RdLHZvaWQgMD09PW4mJnZvaWQgMCE9PXImJihuPXRoaXMuX21hcFtyXSkpLG4gaW5zdGFuY2VvZiBmJiZ0aGlzLnhyZWY/dGhpcy54cmVmLmZldGNoQXN5bmMobix0aGlzLnN1cHByZXNzRW5jcnlwdGlvbik6bn1nZXRBcnJheShlLHQscil7bGV0IG49dGhpcy5fbWFwW2VdO2lmKHZvaWQgMD09PW4mJnZvaWQgMCE9PXQmJihuPXRoaXMuX21hcFt0XSx2b2lkIDA9PT1uJiZ2b2lkIDAhPT1yJiYobj10aGlzLl9tYXBbcl0pKSxuIGluc3RhbmNlb2YgZiYmdGhpcy54cmVmJiYobj10aGlzLnhyZWYuZmV0Y2gobix0aGlzLnN1cHByZXNzRW5jcnlwdGlvbikpLEFycmF5LmlzQXJyYXkobikpe249bi5zbGljZSgpO2ZvcihsZXQgZT0wLHQ9bi5sZW5ndGg7ZTx0O2UrKyluW2VdaW5zdGFuY2VvZiBmJiZ0aGlzLnhyZWYmJihuW2VdPXRoaXMueHJlZi5mZXRjaChuW2VdLHRoaXMuc3VwcHJlc3NFbmNyeXB0aW9uKSl9cmV0dXJuIG59Z2V0UmF3KGUpe3JldHVybiB0aGlzLl9tYXBbZV19Z2V0S2V5cygpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLl9tYXApfWdldFJhd1ZhbHVlcygpe3JldHVybiBPYmplY3QudmFsdWVzKHRoaXMuX21hcCl9c2V0KGUsdCl7dGhpcy5fbWFwW2VdPXR9aGFzKGUpe3JldHVybiB2b2lkIDAhPT10aGlzLl9tYXBbZV19Zm9yRWFjaChlKXtmb3IoY29uc3QgdCBpbiB0aGlzLl9tYXApZSh0LHRoaXMuZ2V0KHQpKX1zdGF0aWMgZ2V0IGVtcHR5KCl7Y29uc3QgZT1uZXcgZChudWxsKTtyZXR1cm4gZS5zZXQ9KGUsdCk9PnsoMCxuLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIGBzZXRgIG9uIHRoZSBlbXB0eSBkaWN0aW9uYXJ5LiIpfSwoMCxuLnNoYWRvdykodGhpcywiZW1wdHkiLGUpfXN0YXRpYyBtZXJnZShlKXtsZXR7eHJlZjp0LGRpY3RBcnJheTpyLG1lcmdlU3ViRGljdHM6bj0hMX09ZTtjb25zdCBhPW5ldyBkKHQpLGk9bmV3IE1hcDtmb3IoY29uc3QgZSBvZiByKWlmKGUgaW5zdGFuY2VvZiBkKWZvcihjb25zdFt0LHJdb2YgT2JqZWN0LmVudHJpZXMoZS5fbWFwKSl7bGV0IGU9aS5nZXQodCk7aWYodm9pZCAwPT09ZSllPVtdLGkuc2V0KHQsZSk7ZWxzZSBpZighKG4mJnIgaW5zdGFuY2VvZiBkKSljb250aW51ZTtlLnB1c2gocil9Zm9yKGNvbnN0W2Uscl1vZiBpKXtpZigxPT09ci5sZW5ndGh8fCEoclswXWluc3RhbmNlb2YgZCkpe2EuX21hcFtlXT1yWzBdO2NvbnRpbnVlfWNvbnN0IG49bmV3IGQodCk7Zm9yKGNvbnN0IGUgb2Ygcilmb3IoY29uc3RbdCxyXW9mIE9iamVjdC5lbnRyaWVzKGUuX21hcCkpdm9pZCAwPT09bi5fbWFwW3RdJiYobi5fbWFwW3RdPXIpO24uc2l6ZT4wJiYoYS5fbWFwW2VdPW4pfXJldHVybiBpLmNsZWFyKCksYS5zaXplPjA/YTpkLmVtcHR5fX10LkRpY3Q9ZDtjbGFzcyBme2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5udW09ZSx0aGlzLmdlbj10fXRvU3RyaW5nKCl7cmV0dXJuIDA9PT10aGlzLmdlbj8iIi5jb25jYXQodGhpcy5udW0sIlIiKToiIi5jb25jYXQodGhpcy5udW0sIlIiKS5jb25jYXQodGhpcy5nZW4pfXN0YXRpYyBmcm9tU3RyaW5nKGUpe2NvbnN0IHQ9Y1tlXTtpZih0KXJldHVybiB0O2NvbnN0IHI9L14oXGQrKVIoXGQqKSQvLmV4ZWMoZSk7cmV0dXJuIHImJiIwIiE9PXJbMV0/Y1tlXT1uZXcgZihwYXJzZUludChyWzFdKSxyWzJdP3BhcnNlSW50KHJbMl0pOjApOm51bGx9c3RhdGljIGdldChlLHQpe3ZhciByO2NvbnN0IG49MD09PXQ/IiIuY29uY2F0KGUsIlIiKToiIi5jb25jYXQoZSwiUiIpLmNvbmNhdCh0KTtyZXR1cm4ocj1jKVtuXXx8KHJbbl09bmV3IGYoZSx0KSl9fXQuUmVmPWY7Y2xhc3MgZ3tjb25zdHJ1Y3Rvcigpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO3RoaXMuX3NldD1uZXcgU2V0KG51bGw9PWU/dm9pZCAwOmUuX3NldCl9aGFzKGUpe3JldHVybiB0aGlzLl9zZXQuaGFzKGUudG9TdHJpbmcoKSl9cHV0KGUpe3RoaXMuX3NldC5hZGQoZS50b1N0cmluZygpKX1yZW1vdmUoZSl7dGhpcy5fc2V0LmRlbGV0ZShlLnRvU3RyaW5nKCkpfVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIHRoaXMuX3NldC52YWx1ZXMoKX1jbGVhcigpe3RoaXMuX3NldC5jbGVhcigpfX10LlJlZlNldD1nO2NsYXNzIHB7Y29uc3RydWN0b3IoKXt0aGlzLl9tYXA9bmV3IE1hcH1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLl9tYXAuc2l6ZX1nZXQoZSl7cmV0dXJuIHRoaXMuX21hcC5nZXQoZS50b1N0cmluZygpKX1oYXMoZSl7cmV0dXJuIHRoaXMuX21hcC5oYXMoZS50b1N0cmluZygpKX1wdXQoZSx0KXt0aGlzLl9tYXAuc2V0KGUudG9TdHJpbmcoKSx0KX1wdXRBbGlhcyhlLHQpe3RoaXMuX21hcC5zZXQoZS50b1N0cmluZygpLHRoaXMuZ2V0KHQpKX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiB0aGlzLl9tYXAudmFsdWVzKCl9Y2xlYXIoKXt0aGlzLl9tYXAuY2xlYXIoKX19ZnVuY3Rpb24gbShlLHQpe3JldHVybiBlIGluc3RhbmNlb2YgbCYmKHZvaWQgMD09PXR8fGUubmFtZT09PXQpfXQuUmVmU2V0Q2FjaGU9cH0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkJhc2VTdHJlYW09dm9pZCAwO3ZhciBuPXIoMTQ0KTtjbGFzcyBhe2NvbnN0cnVjdG9yKCl7dGhpcy5jb25zdHJ1Y3Rvcj09PWEmJigwLG4udW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlU3RyZWFtLiIpfWdldCBsZW5ndGgoKXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgZ2V0dGVyIGBsZW5ndGhgIGFjY2Vzc2VkIil9Z2V0IGlzRW1wdHkoKXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgZ2V0dGVyIGBpc0VtcHR5YCBhY2Nlc3NlZCIpfWdldCBpc0RhdGFMb2FkZWQoKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiaXNEYXRhTG9hZGVkIiwhMCl9Z2V0Qnl0ZSgpeygwLG4udW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYGdldEJ5dGVgIGNhbGxlZCIpfWdldEJ5dGVzKGUpeygwLG4udW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYGdldEJ5dGVzYCBjYWxsZWQiKX1wZWVrQnl0ZSgpe2NvbnN0IGU9dGhpcy5nZXRCeXRlKCk7cmV0dXJuLTEhPT1lJiZ0aGlzLnBvcy0tLGV9cGVla0J5dGVzKGUpe2NvbnN0IHQ9dGhpcy5nZXRCeXRlcyhlKTtyZXR1cm4gdGhpcy5wb3MtPXQubGVuZ3RoLHR9Z2V0VWludDE2KCl7Y29uc3QgZT10aGlzLmdldEJ5dGUoKSx0PXRoaXMuZ2V0Qnl0ZSgpO3JldHVybi0xPT09ZXx8LTE9PT10Py0xOihlPDw4KSt0fWdldEludDMyKCl7cmV0dXJuKHRoaXMuZ2V0Qnl0ZSgpPDwyNCkrKHRoaXMuZ2V0Qnl0ZSgpPDwxNikrKHRoaXMuZ2V0Qnl0ZSgpPDw4KSt0aGlzLmdldEJ5dGUoKX1nZXRCeXRlUmFuZ2UoZSx0KXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBnZXRCeXRlUmFuZ2VgIGNhbGxlZCIpfWdldFN0cmluZyhlKXtyZXR1cm4oMCxuLmJ5dGVzVG9TdHJpbmcpKHRoaXMuZ2V0Qnl0ZXMoZSkpfXNraXAoZSl7dGhpcy5wb3MrPWV8fDF9cmVzZXQoKXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGByZXNldGAgY2FsbGVkIil9bW92ZVN0YXJ0KCl7KDAsbi51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgbW92ZVN0YXJ0YCBjYWxsZWQiKX1tYWtlU3ViU3RyZWFtKGUsdCl7KDAsbi51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgbWFrZVN1YlN0cmVhbWAgY2FsbGVkIil9Z2V0QmFzZVN0cmVhbXMoKXtyZXR1cm4gbnVsbH19dC5CYXNlU3RyZWFtPWF9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5OZXR3b3JrUGRmTWFuYWdlcj10LkxvY2FsUGRmTWFuYWdlcj12b2lkIDA7dmFyIG49cigxNDQpLGE9cigxNTMpLGk9cigxNDkpLHM9cigxNTUpLG89cigxNTQpO2NsYXNzIGN7Y29uc3RydWN0b3IoZSl7dmFyIHQ7dGhpcy5jb25zdHJ1Y3Rvcj09PWMmJigwLG4udW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlUGRmTWFuYWdlci4iKSx0aGlzLl9kb2NCYXNlVXJsPWZ1bmN0aW9uKGUpe2lmKGUpe2NvbnN0IHQ9KDAsbi5jcmVhdGVWYWxpZEFic29sdXRlVXJsKShlKTtpZih0KXJldHVybiB0LmhyZWY7KDAsbi53YXJuKSgnSW52YWxpZCBhYnNvbHV0ZSBkb2NCYXNlVXJsOiAiJy5jb25jYXQoZSwnIi4nKSl9cmV0dXJuIG51bGx9KGUuZG9jQmFzZVVybCksdGhpcy5fZG9jSWQ9ZS5kb2NJZCx0aGlzLl9wYXNzd29yZD1lLnBhc3N3b3JkLHRoaXMuZW5hYmxlWGZhPWUuZW5hYmxlWGZhLCh0PWUuZXZhbHVhdG9yT3B0aW9ucykuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQmJih0LmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkPW4uRmVhdHVyZVRlc3QuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQpLHRoaXMuZXZhbHVhdG9yT3B0aW9ucz1lLmV2YWx1YXRvck9wdGlvbnN9Z2V0IGRvY0lkKCl7cmV0dXJuIHRoaXMuX2RvY0lkfWdldCBwYXNzd29yZCgpe3JldHVybiB0aGlzLl9wYXNzd29yZH1nZXQgZG9jQmFzZVVybCgpe2NvbnN0IGU9dGhpcy5wZGZEb2N1bWVudC5jYXRhbG9nO3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJkb2NCYXNlVXJsIixlLmJhc2VVcmx8fHRoaXMuX2RvY0Jhc2VVcmwpfWVuc3VyZURvYyhlLHQpe3JldHVybiB0aGlzLmVuc3VyZSh0aGlzLnBkZkRvY3VtZW50LGUsdCl9ZW5zdXJlWFJlZihlLHQpe3JldHVybiB0aGlzLmVuc3VyZSh0aGlzLnBkZkRvY3VtZW50LnhyZWYsZSx0KX1lbnN1cmVDYXRhbG9nKGUsdCl7cmV0dXJuIHRoaXMuZW5zdXJlKHRoaXMucGRmRG9jdW1lbnQuY2F0YWxvZyxlLHQpfWdldFBhZ2UoZSl7cmV0dXJuIHRoaXMucGRmRG9jdW1lbnQuZ2V0UGFnZShlKX1mb250RmFsbGJhY2soZSx0KXtyZXR1cm4gdGhpcy5wZGZEb2N1bWVudC5mb250RmFsbGJhY2soZSx0KX1sb2FkWGZhRm9udHMoZSx0KXtyZXR1cm4gdGhpcy5wZGZEb2N1bWVudC5sb2FkWGZhRm9udHMoZSx0KX1sb2FkWGZhSW1hZ2VzKCl7cmV0dXJuIHRoaXMucGRmRG9jdW1lbnQubG9hZFhmYUltYWdlcygpfXNlcmlhbGl6ZVhmYURhdGEoZSl7cmV0dXJuIHRoaXMucGRmRG9jdW1lbnQuc2VyaWFsaXplWGZhRGF0YShlKX1jbGVhbnVwKCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtyZXR1cm4gdGhpcy5wZGZEb2N1bWVudC5jbGVhbnVwKGUpfWFzeW5jIGVuc3VyZShlLHQscil7KDAsbi51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgZW5zdXJlYCBjYWxsZWQiKX1yZXF1ZXN0UmFuZ2UoZSx0KXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGByZXF1ZXN0UmFuZ2VgIGNhbGxlZCIpfXJlcXVlc3RMb2FkZWRTdHJlYW0oKXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGByZXF1ZXN0TG9hZGVkU3RyZWFtYCBjYWxsZWQiKX1zZW5kUHJvZ3Jlc3NpdmVEYXRhKGUpeygwLG4udW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYHNlbmRQcm9ncmVzc2l2ZURhdGFgIGNhbGxlZCIpfXVwZGF0ZVBhc3N3b3JkKGUpe3RoaXMuX3Bhc3N3b3JkPWV9dGVybWluYXRlKGUpeygwLG4udW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYHRlcm1pbmF0ZWAgY2FsbGVkIil9fXQuTG9jYWxQZGZNYW5hZ2VyPWNsYXNzIGV4dGVuZHMgY3tjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTtjb25zdCB0PW5ldyBvLlN0cmVhbShlLnNvdXJjZSk7dGhpcy5wZGZEb2N1bWVudD1uZXcgcy5QREZEb2N1bWVudCh0aGlzLHQpLHRoaXMuX2xvYWRlZFN0cmVhbVByb21pc2U9UHJvbWlzZS5yZXNvbHZlKHQpfWFzeW5jIGVuc3VyZShlLHQscil7Y29uc3Qgbj1lW3RdO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuP24uYXBwbHkoZSxyKTpufXJlcXVlc3RSYW5nZShlLHQpe3JldHVybiBQcm9taXNlLnJlc29sdmUoKX1yZXF1ZXN0TG9hZGVkU3RyZWFtKCl7cmV0dXJuIHRoaXMuX2xvYWRlZFN0cmVhbVByb21pc2V9dGVybWluYXRlKGUpe319LHQuTmV0d29ya1BkZk1hbmFnZXI9Y2xhc3MgZXh0ZW5kcyBje2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpLHRoaXMuc3RyZWFtTWFuYWdlcj1uZXcgYS5DaHVua2VkU3RyZWFtTWFuYWdlcihlLnNvdXJjZSx7bXNnSGFuZGxlcjplLmhhbmRsZXIsbGVuZ3RoOmUubGVuZ3RoLGRpc2FibGVBdXRvRmV0Y2g6ZS5kaXNhYmxlQXV0b0ZldGNoLHJhbmdlQ2h1bmtTaXplOmUucmFuZ2VDaHVua1NpemV9KSx0aGlzLnBkZkRvY3VtZW50PW5ldyBzLlBERkRvY3VtZW50KHRoaXMsdGhpcy5zdHJlYW1NYW5hZ2VyLmdldFN0cmVhbSgpKX1hc3luYyBlbnN1cmUoZSx0LHIpe3RyeXtjb25zdCBuPWVbdF07cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5hcHBseShlLHIpOm59Y2F0Y2gobil7aWYoIShuIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbikpdGhyb3cgbjtyZXR1cm4gYXdhaXQgdGhpcy5yZXF1ZXN0UmFuZ2Uobi5iZWdpbixuLmVuZCksdGhpcy5lbnN1cmUoZSx0LHIpfX1yZXF1ZXN0UmFuZ2UoZSx0KXtyZXR1cm4gdGhpcy5zdHJlYW1NYW5hZ2VyLnJlcXVlc3RSYW5nZShlLHQpfXJlcXVlc3RMb2FkZWRTdHJlYW0oKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO3JldHVybiB0aGlzLnN0cmVhbU1hbmFnZXIucmVxdWVzdEFsbENodW5rcyhlKX1zZW5kUHJvZ3Jlc3NpdmVEYXRhKGUpe3RoaXMuc3RyZWFtTWFuYWdlci5vblJlY2VpdmVEYXRhKHtjaHVuazplfSl9dGVybWluYXRlKGUpe3RoaXMuc3RyZWFtTWFuYWdlci5hYm9ydChlKX19fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQ2h1bmtlZFN0cmVhbU1hbmFnZXI9dC5DaHVua2VkU3RyZWFtPXZvaWQgMCxyKDg0KSxyKDkzKSxyKDk0KSxyKDk3KSxyKDk5KSxyKDEwMSkscigxMDUpLHIoMTA4KSxyKDExNSkscigxMTYpLHIoMTI2KSxyKDEyOCkscigxMzEpLHIoMTMzKSxyKDEzNSkscigxMzcpLHIoMTM5KSxyKDIpO3ZhciBuPXIoMTQ5KSxhPXIoMTQ0KSxpPXIoMTU0KTtjbGFzcyBzIGV4dGVuZHMgaS5TdHJlYW17Y29uc3RydWN0b3IoZSx0LHIpe3N1cGVyKG5ldyBVaW50OEFycmF5KGUpLDAsZSxudWxsKSx0aGlzLmNodW5rU2l6ZT10LHRoaXMuX2xvYWRlZENodW5rcz1uZXcgU2V0LHRoaXMubnVtQ2h1bmtzPU1hdGguY2VpbChlL3QpLHRoaXMubWFuYWdlcj1yLHRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoPTAsdGhpcy5sYXN0U3VjY2Vzc2Z1bEVuc3VyZUJ5dGVDaHVuaz0tMX1nZXRNaXNzaW5nQ2h1bmtzKCl7Y29uc3QgZT1bXTtmb3IobGV0IHQ9MCxyPXRoaXMubnVtQ2h1bmtzO3Q8cjsrK3QpdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyh0KXx8ZS5wdXNoKHQpO3JldHVybiBlfWdldCBudW1DaHVua3NMb2FkZWQoKXtyZXR1cm4gdGhpcy5fbG9hZGVkQ2h1bmtzLnNpemV9Z2V0IGlzRGF0YUxvYWRlZCgpe3JldHVybiB0aGlzLm51bUNodW5rc0xvYWRlZD09PXRoaXMubnVtQ2h1bmtzfW9uUmVjZWl2ZURhdGEoZSx0KXtjb25zdCByPXRoaXMuY2h1bmtTaXplO2lmKGUlciE9MCl0aHJvdyBuZXcgRXJyb3IoIkJhZCBiZWdpbiBvZmZzZXQ6ICIuY29uY2F0KGUpKTtjb25zdCBuPWUrdC5ieXRlTGVuZ3RoO2lmKG4lciE9MCYmbiE9PXRoaXMuYnl0ZXMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiQmFkIGVuZCBvZmZzZXQ6ICIuY29uY2F0KG4pKTt0aGlzLmJ5dGVzLnNldChuZXcgVWludDhBcnJheSh0KSxlKTtjb25zdCBhPU1hdGguZmxvb3IoZS9yKSxpPU1hdGguZmxvb3IoKG4tMSkvcikrMTtmb3IobGV0IGU9YTtlPGk7KytlKXRoaXMuX2xvYWRlZENodW5rcy5hZGQoZSl9b25SZWNlaXZlUHJvZ3Jlc3NpdmVEYXRhKGUpe2xldCB0PXRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoO2NvbnN0IHI9TWF0aC5mbG9vcih0L3RoaXMuY2h1bmtTaXplKTt0aGlzLmJ5dGVzLnNldChuZXcgVWludDhBcnJheShlKSx0KSx0Kz1lLmJ5dGVMZW5ndGgsdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGg9dDtjb25zdCBuPXQ+PXRoaXMuZW5kP3RoaXMubnVtQ2h1bmtzOk1hdGguZmxvb3IodC90aGlzLmNodW5rU2l6ZSk7Zm9yKGxldCBlPXI7ZTxuOysrZSl0aGlzLl9sb2FkZWRDaHVua3MuYWRkKGUpfWVuc3VyZUJ5dGUoZSl7aWYoZTx0aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aClyZXR1cm47Y29uc3QgdD1NYXRoLmZsb29yKGUvdGhpcy5jaHVua1NpemUpO2lmKCEodD50aGlzLm51bUNodW5rcykmJnQhPT10aGlzLmxhc3RTdWNjZXNzZnVsRW5zdXJlQnl0ZUNodW5rKXtpZighdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyh0KSl0aHJvdyBuZXcgbi5NaXNzaW5nRGF0YUV4Y2VwdGlvbihlLGUrMSk7dGhpcy5sYXN0U3VjY2Vzc2Z1bEVuc3VyZUJ5dGVDaHVuaz10fX1lbnN1cmVSYW5nZShlLHQpe2lmKGU+PXQpcmV0dXJuO2lmKHQ8PXRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoKXJldHVybjtjb25zdCByPU1hdGguZmxvb3IoZS90aGlzLmNodW5rU2l6ZSk7aWYocj50aGlzLm51bUNodW5rcylyZXR1cm47Y29uc3QgYT1NYXRoLm1pbihNYXRoLmZsb29yKCh0LTEpL3RoaXMuY2h1bmtTaXplKSsxLHRoaXMubnVtQ2h1bmtzKTtmb3IobGV0IGk9cjtpPGE7KytpKWlmKCF0aGlzLl9sb2FkZWRDaHVua3MuaGFzKGkpKXRocm93IG5ldyBuLk1pc3NpbmdEYXRhRXhjZXB0aW9uKGUsdCl9bmV4dEVtcHR5Q2h1bmsoZSl7Y29uc3QgdD10aGlzLm51bUNodW5rcztmb3IobGV0IHI9MDtyPHQ7KytyKXtjb25zdCBuPShlK3IpJXQ7aWYoIXRoaXMuX2xvYWRlZENodW5rcy5oYXMobikpcmV0dXJuIG59cmV0dXJuIG51bGx9aGFzQ2h1bmsoZSl7cmV0dXJuIHRoaXMuX2xvYWRlZENodW5rcy5oYXMoZSl9Z2V0Qnl0ZSgpe2NvbnN0IGU9dGhpcy5wb3M7cmV0dXJuIGU+PXRoaXMuZW5kPy0xOihlPj10aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aCYmdGhpcy5lbnN1cmVCeXRlKGUpLHRoaXMuYnl0ZXNbdGhpcy5wb3MrK10pfWdldEJ5dGVzKGUpe2NvbnN0IHQ9dGhpcy5ieXRlcyxyPXRoaXMucG9zLG49dGhpcy5lbmQ7aWYoIWUpcmV0dXJuIG4+dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgmJnRoaXMuZW5zdXJlUmFuZ2UocixuKSx0LnN1YmFycmF5KHIsbik7bGV0IGE9citlO3JldHVybiBhPm4mJihhPW4pLGE+dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgmJnRoaXMuZW5zdXJlUmFuZ2UocixhKSx0aGlzLnBvcz1hLHQuc3ViYXJyYXkocixhKX1nZXRCeXRlUmFuZ2UoZSx0KXtyZXR1cm4gZTwwJiYoZT0wKSx0PnRoaXMuZW5kJiYodD10aGlzLmVuZCksdD50aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aCYmdGhpcy5lbnN1cmVSYW5nZShlLHQpLHRoaXMuYnl0ZXMuc3ViYXJyYXkoZSx0KX1tYWtlU3ViU3RyZWFtKGUsdCl7bGV0IHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOm51bGw7ZnVuY3Rpb24gbigpe310P2UrdD50aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aCYmdGhpcy5lbnN1cmVSYW5nZShlLGUrdCk6ZT49dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgmJnRoaXMuZW5zdXJlQnl0ZShlKSxuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHRoaXMpLG4ucHJvdG90eXBlLmdldE1pc3NpbmdDaHVua3M9ZnVuY3Rpb24oKXtjb25zdCBlPXRoaXMuY2h1bmtTaXplLHQ9TWF0aC5mbG9vcih0aGlzLnN0YXJ0L2UpLHI9TWF0aC5mbG9vcigodGhpcy5lbmQtMSkvZSkrMSxuPVtdO2ZvcihsZXQgZT10O2U8cjsrK2UpdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyhlKXx8bi5wdXNoKGUpO3JldHVybiBufSxPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsImlzRGF0YUxvYWRlZCIse2dldCgpe3JldHVybiB0aGlzLm51bUNodW5rc0xvYWRlZD09PXRoaXMubnVtQ2h1bmtzfHwwPT09dGhpcy5nZXRNaXNzaW5nQ2h1bmtzKCkubGVuZ3RofSxjb25maWd1cmFibGU6ITB9KTtjb25zdCBhPW5ldyBuO3JldHVybiBhLnBvcz1hLnN0YXJ0PWUsYS5lbmQ9ZSt0fHx0aGlzLmVuZCxhLmRpY3Q9cixhfWdldEJhc2VTdHJlYW1zKCl7cmV0dXJuW3RoaXNdfX10LkNodW5rZWRTdHJlYW09cyx0LkNodW5rZWRTdHJlYW1NYW5hZ2VyPWNsYXNze2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5sZW5ndGg9dC5sZW5ndGgsdGhpcy5jaHVua1NpemU9dC5yYW5nZUNodW5rU2l6ZSx0aGlzLnN0cmVhbT1uZXcgcyh0aGlzLmxlbmd0aCx0aGlzLmNodW5rU2l6ZSx0aGlzKSx0aGlzLnBkZk5ldHdvcmtTdHJlYW09ZSx0aGlzLmRpc2FibGVBdXRvRmV0Y2g9dC5kaXNhYmxlQXV0b0ZldGNoLHRoaXMubXNnSGFuZGxlcj10Lm1zZ0hhbmRsZXIsdGhpcy5jdXJyUmVxdWVzdElkPTAsdGhpcy5fY2h1bmtzTmVlZGVkQnlSZXF1ZXN0PW5ldyBNYXAsdGhpcy5fcmVxdWVzdHNCeUNodW5rPW5ldyBNYXAsdGhpcy5fcHJvbWlzZXNCeVJlcXVlc3Q9bmV3IE1hcCx0aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aD0wLHRoaXMuYWJvcnRlZD0hMSx0aGlzLl9sb2FkZWRTdHJlYW1DYXBhYmlsaXR5PW5ldyBhLlByb21pc2VDYXBhYmlsaXR5fXNlbmRSZXF1ZXN0KGUsdCl7Y29uc3Qgcj10aGlzLnBkZk5ldHdvcmtTdHJlYW0uZ2V0UmFuZ2VSZWFkZXIoZSx0KTtyLmlzU3RyZWFtaW5nU3VwcG9ydGVkfHwoci5vblByb2dyZXNzPXRoaXMub25Qcm9ncmVzcy5iaW5kKHRoaXMpKTtsZXQgYT1bXSxpPTA7cmV0dXJuIG5ldyBQcm9taXNlKCgoZSx0KT0+e2NvbnN0IHM9bz0+e2xldHt2YWx1ZTpjLGRvbmU6bH09bzt0cnl7aWYobCl7Y29uc3QgdD0oMCxuLmFycmF5QnVmZmVyc1RvQnl0ZXMpKGEpO3JldHVybiBhPW51bGwsdm9pZCBlKHQpfWkrPWMuYnl0ZUxlbmd0aCxyLmlzU3RyZWFtaW5nU3VwcG9ydGVkJiZ0aGlzLm9uUHJvZ3Jlc3Moe2xvYWRlZDppfSksYS5wdXNoKGMpLHIucmVhZCgpLnRoZW4ocyx0KX1jYXRjaChlKXt0KGUpfX07ci5yZWFkKCkudGhlbihzLHQpfSkpLnRoZW4oKHQ9Pnt0aGlzLmFib3J0ZWR8fHRoaXMub25SZWNlaXZlRGF0YSh7Y2h1bms6dCxiZWdpbjplfSl9KSl9cmVxdWVzdEFsbENodW5rcygpe2lmKCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSkpe2NvbnN0IGU9dGhpcy5zdHJlYW0uZ2V0TWlzc2luZ0NodW5rcygpO3RoaXMuX3JlcXVlc3RDaHVua3MoZSl9cmV0dXJuIHRoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkucHJvbWlzZX1fcmVxdWVzdENodW5rcyhlKXtjb25zdCB0PXRoaXMuY3VyclJlcXVlc3RJZCsrLHI9bmV3IFNldDt0aGlzLl9jaHVua3NOZWVkZWRCeVJlcXVlc3Quc2V0KHQscik7Zm9yKGNvbnN0IHQgb2YgZSl0aGlzLnN0cmVhbS5oYXNDaHVuayh0KXx8ci5hZGQodCk7aWYoMD09PXIuc2l6ZSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Y29uc3Qgbj1uZXcgYS5Qcm9taXNlQ2FwYWJpbGl0eTt0aGlzLl9wcm9taXNlc0J5UmVxdWVzdC5zZXQodCxuKTtjb25zdCBpPVtdO2Zvcihjb25zdCBlIG9mIHIpe2xldCByPXRoaXMuX3JlcXVlc3RzQnlDaHVuay5nZXQoZSk7cnx8KHI9W10sdGhpcy5fcmVxdWVzdHNCeUNodW5rLnNldChlLHIpLGkucHVzaChlKSksci5wdXNoKHQpfWlmKGkubGVuZ3RoPjApe2NvbnN0IGU9dGhpcy5ncm91cENodW5rcyhpKTtmb3IoY29uc3QgdCBvZiBlKXtjb25zdCBlPXQuYmVnaW5DaHVuayp0aGlzLmNodW5rU2l6ZSxyPU1hdGgubWluKHQuZW5kQ2h1bmsqdGhpcy5jaHVua1NpemUsdGhpcy5sZW5ndGgpO3RoaXMuc2VuZFJlcXVlc3QoZSxyKS5jYXRjaChuLnJlamVjdCl9fXJldHVybiBuLnByb21pc2UuY2F0Y2goKGU9PntpZighdGhpcy5hYm9ydGVkKXRocm93IGV9KSl9Z2V0U3RyZWFtKCl7cmV0dXJuIHRoaXMuc3RyZWFtfXJlcXVlc3RSYW5nZShlLHQpe3Q9TWF0aC5taW4odCx0aGlzLmxlbmd0aCk7Y29uc3Qgcj10aGlzLmdldEJlZ2luQ2h1bmsoZSksbj10aGlzLmdldEVuZENodW5rKHQpLGE9W107Zm9yKGxldCBlPXI7ZTxuOysrZSlhLnB1c2goZSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RDaHVua3MoYSl9cmVxdWVzdFJhbmdlcygpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbXTtjb25zdCB0PVtdO2Zvcihjb25zdCByIG9mIGUpe2NvbnN0IGU9dGhpcy5nZXRCZWdpbkNodW5rKHIuYmVnaW4pLG49dGhpcy5nZXRFbmRDaHVuayhyLmVuZCk7Zm9yKGxldCByPWU7cjxuOysrcil0LmluY2x1ZGVzKHIpfHx0LnB1c2gocil9cmV0dXJuIHQuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS10fSkpLHRoaXMuX3JlcXVlc3RDaHVua3ModCl9Z3JvdXBDaHVua3MoZSl7Y29uc3QgdD1bXTtsZXQgcj0tMSxuPS0xO2ZvcihsZXQgYT0wLGk9ZS5sZW5ndGg7YTxpOysrYSl7Y29uc3QgaT1lW2FdO3I8MCYmKHI9aSksbj49MCYmbisxIT09aSYmKHQucHVzaCh7YmVnaW5DaHVuazpyLGVuZENodW5rOm4rMX0pLHI9aSksYSsxPT09ZS5sZW5ndGgmJnQucHVzaCh7YmVnaW5DaHVuazpyLGVuZENodW5rOmkrMX0pLG49aX1yZXR1cm4gdH1vblByb2dyZXNzKGUpe3RoaXMubXNnSGFuZGxlci5zZW5kKCJEb2NQcm9ncmVzcyIse2xvYWRlZDp0aGlzLnN0cmVhbS5udW1DaHVua3NMb2FkZWQqdGhpcy5jaHVua1NpemUrZS5sb2FkZWQsdG90YWw6dGhpcy5sZW5ndGh9KX1vblJlY2VpdmVEYXRhKGUpe2NvbnN0IHQ9ZS5jaHVuayxyPXZvaWQgMD09PWUuYmVnaW4sbj1yP3RoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoOmUuYmVnaW4sYT1uK3QuYnl0ZUxlbmd0aCxpPU1hdGguZmxvb3Iobi90aGlzLmNodW5rU2l6ZSkscz1hPHRoaXMubGVuZ3RoP01hdGguZmxvb3IoYS90aGlzLmNodW5rU2l6ZSk6TWF0aC5jZWlsKGEvdGhpcy5jaHVua1NpemUpO3I/KHRoaXMuc3RyZWFtLm9uUmVjZWl2ZVByb2dyZXNzaXZlRGF0YSh0KSx0aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aD1hKTp0aGlzLnN0cmVhbS5vblJlY2VpdmVEYXRhKG4sdCksdGhpcy5zdHJlYW0uaXNEYXRhTG9hZGVkJiZ0aGlzLl9sb2FkZWRTdHJlYW1DYXBhYmlsaXR5LnJlc29sdmUodGhpcy5zdHJlYW0pO2NvbnN0IG89W107Zm9yKGxldCBlPWk7ZTxzOysrZSl7Y29uc3QgdD10aGlzLl9yZXF1ZXN0c0J5Q2h1bmsuZ2V0KGUpO2lmKHQpe3RoaXMuX3JlcXVlc3RzQnlDaHVuay5kZWxldGUoZSk7Zm9yKGNvbnN0IHIgb2YgdCl7Y29uc3QgdD10aGlzLl9jaHVua3NOZWVkZWRCeVJlcXVlc3QuZ2V0KHIpO3QuaGFzKGUpJiZ0LmRlbGV0ZShlKSx0LnNpemU+MHx8by5wdXNoKHIpfX19aWYoIXRoaXMuZGlzYWJsZUF1dG9GZXRjaCYmMD09PXRoaXMuX3JlcXVlc3RzQnlDaHVuay5zaXplKXtsZXQgZTtpZigxPT09dGhpcy5zdHJlYW0ubnVtQ2h1bmtzTG9hZGVkKXtjb25zdCB0PXRoaXMuc3RyZWFtLm51bUNodW5rcy0xO3RoaXMuc3RyZWFtLmhhc0NodW5rKHQpfHwoZT10KX1lbHNlIGU9dGhpcy5zdHJlYW0ubmV4dEVtcHR5Q2h1bmsocyk7TnVtYmVyLmlzSW50ZWdlcihlKSYmdGhpcy5fcmVxdWVzdENodW5rcyhbZV0pfWZvcihjb25zdCBlIG9mIG8pe2NvbnN0IHQ9dGhpcy5fcHJvbWlzZXNCeVJlcXVlc3QuZ2V0KGUpO3RoaXMuX3Byb21pc2VzQnlSZXF1ZXN0LmRlbGV0ZShlKSx0LnJlc29sdmUoKX10aGlzLm1zZ0hhbmRsZXIuc2VuZCgiRG9jUHJvZ3Jlc3MiLHtsb2FkZWQ6dGhpcy5zdHJlYW0ubnVtQ2h1bmtzTG9hZGVkKnRoaXMuY2h1bmtTaXplLHRvdGFsOnRoaXMubGVuZ3RofSl9b25FcnJvcihlKXt0aGlzLl9sb2FkZWRTdHJlYW1DYXBhYmlsaXR5LnJlamVjdChlKX1nZXRCZWdpbkNodW5rKGUpe3JldHVybiBNYXRoLmZsb29yKGUvdGhpcy5jaHVua1NpemUpfWdldEVuZENodW5rKGUpe3JldHVybiBNYXRoLmZsb29yKChlLTEpL3RoaXMuY2h1bmtTaXplKSsxfWFib3J0KGUpe3RoaXMuYWJvcnRlZD0hMCx0aGlzLnBkZk5ldHdvcmtTdHJlYW0mJnRoaXMucGRmTmV0d29ya1N0cmVhbS5jYW5jZWxBbGxSZXF1ZXN0cyhlKTtmb3IoY29uc3QgdCBvZiB0aGlzLl9wcm9taXNlc0J5UmVxdWVzdC52YWx1ZXMoKSl0LnJlamVjdChlKX19fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuU3RyaW5nU3RyZWFtPXQuU3RyZWFtPXQuTnVsbFN0cmVhbT12b2lkIDAscig4NCkscig5Mykscig5NCkscig5Nykscig5OSkscigxMDEpLHIoMTA1KSxyKDEwOCkscigxMTUpO3ZhciBuPXIoMTUxKSxhPXIoMTQ0KTtjbGFzcyBpIGV4dGVuZHMgbi5CYXNlU3RyZWFte2NvbnN0cnVjdG9yKGUsdCxyLG4pe3N1cGVyKCksdGhpcy5ieXRlcz1lIGluc3RhbmNlb2YgVWludDhBcnJheT9lOm5ldyBVaW50OEFycmF5KGUpLHRoaXMuc3RhcnQ9dHx8MCx0aGlzLnBvcz10aGlzLnN0YXJ0LHRoaXMuZW5kPXQrcnx8dGhpcy5ieXRlcy5sZW5ndGgsdGhpcy5kaWN0PW59Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLmVuZC10aGlzLnN0YXJ0fWdldCBpc0VtcHR5KCl7cmV0dXJuIDA9PT10aGlzLmxlbmd0aH1nZXRCeXRlKCl7cmV0dXJuIHRoaXMucG9zPj10aGlzLmVuZD8tMTp0aGlzLmJ5dGVzW3RoaXMucG9zKytdfWdldEJ5dGVzKGUpe2NvbnN0IHQ9dGhpcy5ieXRlcyxyPXRoaXMucG9zLG49dGhpcy5lbmQ7aWYoIWUpcmV0dXJuIHQuc3ViYXJyYXkocixuKTtsZXQgYT1yK2U7cmV0dXJuIGE+biYmKGE9biksdGhpcy5wb3M9YSx0LnN1YmFycmF5KHIsYSl9Z2V0Qnl0ZVJhbmdlKGUsdCl7cmV0dXJuIGU8MCYmKGU9MCksdD50aGlzLmVuZCYmKHQ9dGhpcy5lbmQpLHRoaXMuYnl0ZXMuc3ViYXJyYXkoZSx0KX1yZXNldCgpe3RoaXMucG9zPXRoaXMuc3RhcnR9bW92ZVN0YXJ0KCl7dGhpcy5zdGFydD10aGlzLnBvc31tYWtlU3ViU3RyZWFtKGUsdCl7bGV0IHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOm51bGw7cmV0dXJuIG5ldyBpKHRoaXMuYnl0ZXMuYnVmZmVyLGUsdCxyKX19dC5TdHJlYW09aSx0LlN0cmluZ1N0cmVhbT1jbGFzcyBleHRlbmRzIGl7Y29uc3RydWN0b3IoZSl7c3VwZXIoKDAsYS5zdHJpbmdUb0J5dGVzKShlKSl9fSx0Lk51bGxTdHJlYW09Y2xhc3MgZXh0ZW5kcyBpe2NvbnN0cnVjdG9yKCl7c3VwZXIobmV3IFVpbnQ4QXJyYXkoMCkpfX19LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5QYWdlPXQuUERGRG9jdW1lbnQ9dm9pZCAwLHIoMikscigxMzkpLHIoMTE2KSxyKDEyNikscigxMjgpLHIoMTMxKSxyKDEzMykscigxMzUpLHIoMTM3KSxyKDg0KSxyKDkzKSxyKDk0KSxyKDk3KSxyKDk5KSxyKDEwMSkscigxMDUpLHIoMTA4KSxyKDExNSk7dmFyIG49cigxNDQpLGE9cigxNTYpLGk9cigxNDkpLGM9cigxNTApLGw9cigyMDEpLGg9cigxNTEpLHU9cigyMTgpLGQ9cigyMjApLGY9cigyMjIpLGc9cigyNTUpLHA9cigxNjYpLG09cigxNTQpLGI9cigyMjYpLHk9cigyMTQpLHc9cigxNjMpLHY9cigxNjgpLHg9cigyMjUpLFM9cigyMTYpLEE9cigyMjcpLGs9cigyNTYpO2NvbnN0IEM9WzAsMCw2MTIsNzkyXTt2YXIgTz1uZXcgV2Vha1NldDtjbGFzcyBGe2NvbnN0cnVjdG9yKGUpe3ModGhpcyxPKTtsZXR7cGRmTWFuYWdlcjp0LHhyZWY6cixwYWdlSW5kZXg6bixwYWdlRGljdDphLHJlZjppLGdsb2JhbElkRmFjdG9yeTpvLGZvbnRDYWNoZTpjLGJ1aWx0SW5DTWFwQ2FjaGU6bCxzdGFuZGFyZEZvbnREYXRhQ2FjaGU6aCxnbG9iYWxJbWFnZUNhY2hlOnUsc3lzdGVtRm9udENhY2hlOmQsbm9uQmxlbmRNb2Rlc1NldDpmLHhmYUZhY3Rvcnk6Z309ZTt0aGlzLnBkZk1hbmFnZXI9dCx0aGlzLnBhZ2VJbmRleD1uLHRoaXMucGFnZURpY3Q9YSx0aGlzLnhyZWY9cix0aGlzLnJlZj1pLHRoaXMuZm9udENhY2hlPWMsdGhpcy5idWlsdEluQ01hcENhY2hlPWwsdGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGU9aCx0aGlzLmdsb2JhbEltYWdlQ2FjaGU9dSx0aGlzLnN5c3RlbUZvbnRDYWNoZT1kLHRoaXMubm9uQmxlbmRNb2Rlc1NldD1mLHRoaXMuZXZhbHVhdG9yT3B0aW9ucz10LmV2YWx1YXRvck9wdGlvbnMsdGhpcy5yZXNvdXJjZXNQcm9taXNlPW51bGwsdGhpcy54ZmFGYWN0b3J5PWc7Y29uc3QgcD17b2JqOjB9O3RoaXMuX2xvY2FsSWRGYWN0b3J5PWNsYXNzIGV4dGVuZHMgb3tzdGF0aWMgY3JlYXRlT2JqSWQoKXtyZXR1cm4icCIuY29uY2F0KG4sIl8iKS5jb25jYXQoKytwLm9iail9c3RhdGljIGdldFBhZ2VPYmpJZCgpe3JldHVybiJwIi5jb25jYXQoaS50b1N0cmluZygpKX19fV9nZXRJbmhlcml0YWJsZVByb3BlcnR5KGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07Y29uc3Qgcj0oMCxpLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0OnRoaXMucGFnZURpY3Qsa2V5OmUsZ2V0QXJyYXk6dCxzdG9wV2hlbkZvdW5kOiExfSk7cmV0dXJuIEFycmF5LmlzQXJyYXkocik/MSE9PXIubGVuZ3RoJiZyWzBdaW5zdGFuY2VvZiBjLkRpY3Q/Yy5EaWN0Lm1lcmdlKHt4cmVmOnRoaXMueHJlZixkaWN0QXJyYXk6cn0pOnJbMF06cn1nZXQgY29udGVudCgpe3JldHVybiB0aGlzLnBhZ2VEaWN0LmdldEFycmF5KCJDb250ZW50cyIpfWdldCByZXNvdXJjZXMoKXtjb25zdCBlPXRoaXMuX2dldEluaGVyaXRhYmxlUHJvcGVydHkoIlJlc291cmNlcyIpO3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJyZXNvdXJjZXMiLGUgaW5zdGFuY2VvZiBjLkRpY3Q/ZTpjLkRpY3QuZW1wdHkpfV9nZXRCb3VuZGluZ0JveChlKXtpZih0aGlzLnhmYURhdGEpcmV0dXJuIHRoaXMueGZhRGF0YS5iYm94O2xldCB0PXRoaXMuX2dldEluaGVyaXRhYmxlUHJvcGVydHkoZSwhMCk7aWYoQXJyYXkuaXNBcnJheSh0KSYmND09PXQubGVuZ3RoKXtpZih0PW4uVXRpbC5ub3JtYWxpemVSZWN0KHQpLHRbMl0tdFswXT4wJiZ0WzNdLXRbMV0+MClyZXR1cm4gdDsoMCxuLndhcm4pKCJFbXB0eSwgb3IgaW52YWxpZCwgLyIuY29uY2F0KGUsIiBlbnRyeS4iKSl9cmV0dXJuIG51bGx9Z2V0IG1lZGlhQm94KCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIm1lZGlhQm94Iix0aGlzLl9nZXRCb3VuZGluZ0JveCgiTWVkaWFCb3giKXx8Qyl9Z2V0IGNyb3BCb3goKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiY3JvcEJveCIsdGhpcy5fZ2V0Qm91bmRpbmdCb3goIkNyb3BCb3giKXx8dGhpcy5tZWRpYUJveCl9Z2V0IHVzZXJVbml0KCl7bGV0IGU9dGhpcy5wYWdlRGljdC5nZXQoIlVzZXJVbml0Iik7cmV0dXJuKCJudW1iZXIiIT10eXBlb2YgZXx8ZTw9MCkmJihlPTEpLCgwLG4uc2hhZG93KSh0aGlzLCJ1c2VyVW5pdCIsZSl9Z2V0IHZpZXcoKXtjb25zdHtjcm9wQm94OmUsbWVkaWFCb3g6dH09dGhpcztpZihlIT09dCYmISgwLG4uaXNBcnJheUVxdWFsKShlLHQpKXtjb25zdCByPW4uVXRpbC5pbnRlcnNlY3QoZSx0KTtpZihyJiZyWzJdLXJbMF0+MCYmclszXS1yWzFdPjApcmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsInZpZXciLHIpOygwLG4ud2FybikoIkVtcHR5IC9Dcm9wQm94IGFuZCAvTWVkaWFCb3ggaW50ZXJzZWN0aW9uLiIpfXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJ2aWV3Iix0KX1nZXQgcm90YXRlKCl7bGV0IGU9dGhpcy5fZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSgiUm90YXRlIil8fDA7cmV0dXJuIGUlOTAhPTA/ZT0wOmU+PTM2MD9lJT0zNjA6ZTwwJiYoZT0oZSUzNjArMzYwKSUzNjApLCgwLG4uc2hhZG93KSh0aGlzLCJyb3RhdGUiLGUpfV9vblN1YlN0cmVhbUVycm9yKGUsdCl7aWYoIXRoaXMuZXZhbHVhdG9yT3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgZTsoMCxuLndhcm4pKCJnZXRDb250ZW50U3RyZWFtIC0gaWdub3Jpbmcgc3ViLXN0cmVhbSAoIi5jb25jYXQodCwnKTogIicpLmNvbmNhdChlLCciLicpKX1nZXRDb250ZW50U3RyZWFtKCl7cmV0dXJuIHRoaXMucGRmTWFuYWdlci5lbnN1cmUodGhpcywiY29udGVudCIpLnRoZW4oKGU9PmUgaW5zdGFuY2VvZiBoLkJhc2VTdHJlYW0/ZTpBcnJheS5pc0FycmF5KGUpP25ldyB2LlN0cmVhbXNTZXF1ZW5jZVN0cmVhbShlLHRoaXMuX29uU3ViU3RyZWFtRXJyb3IuYmluZCh0aGlzKSk6bmV3IG0uTnVsbFN0cmVhbSkpfWdldCB4ZmFEYXRhKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsInhmYURhdGEiLHRoaXMueGZhRmFjdG9yeT97YmJveDp0aGlzLnhmYUZhY3RvcnkuZ2V0Qm91bmRpbmdCb3godGhpcy5wYWdlSW5kZXgpfTpudWxsKX1hc3luYyBzYXZlTmV3QW5ub3RhdGlvbnMoZSx0LHIsbil7aWYodGhpcy54ZmFGYWN0b3J5KXRocm93IG5ldyBFcnJvcigiWEZBOiBDYW5ub3Qgc2F2ZSBuZXcgYW5ub3RhdGlvbnMuIik7Y29uc3QgaT1uZXcgdy5QYXJ0aWFsRXZhbHVhdG9yKHt4cmVmOnRoaXMueHJlZixoYW5kbGVyOmUscGFnZUluZGV4OnRoaXMucGFnZUluZGV4LGlkRmFjdG9yeTp0aGlzLl9sb2NhbElkRmFjdG9yeSxmb250Q2FjaGU6dGhpcy5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUsc3RhbmRhcmRGb250RGF0YUNhY2hlOnRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlLGdsb2JhbEltYWdlQ2FjaGU6dGhpcy5nbG9iYWxJbWFnZUNhY2hlLHN5c3RlbUZvbnRDYWNoZTp0aGlzLnN5c3RlbUZvbnRDYWNoZSxvcHRpb25zOnRoaXMuZXZhbHVhdG9yT3B0aW9uc30pLHM9bmV3IGMuUmVmU2V0LGw9bmV3IGMuUmVmU2V0O28odGhpcyxPLEkpLmNhbGwodGhpcyxyLHMsbCk7Y29uc3QgaD10aGlzLnBhZ2VEaWN0LHU9dGhpcy5hbm5vdGF0aW9ucy5maWx0ZXIoKGU9PiEoZSBpbnN0YW5jZW9mIGMuUmVmJiZzLmhhcyhlKSkpKSxkPWF3YWl0IGEuQW5ub3RhdGlvbkZhY3Rvcnkuc2F2ZU5ld0Fubm90YXRpb25zKGksdCxyLG4pO2Zvcihjb25zdHtyZWY6ZX1vZiBkLmFubm90YXRpb25zKWUgaW5zdGFuY2VvZiBjLlJlZiYmIWwuaGFzKGUpJiZ1LnB1c2goZSk7Y29uc3QgZj1oLmdldCgiQW5ub3RzIik7aC5zZXQoIkFubm90cyIsdSk7Y29uc3QgZz1bXTtsZXQgcD1udWxsO3RoaXMueHJlZi5lbmNyeXB0JiYocD10aGlzLnhyZWYuZW5jcnlwdC5jcmVhdGVDaXBoZXJUcmFuc2Zvcm0odGhpcy5yZWYubnVtLHRoaXMucmVmLmdlbikpLGF3YWl0KDAsUy53cml0ZU9iamVjdCkodGhpcy5yZWYsaCxnLHApLGYmJmguc2V0KCJBbm5vdHMiLGYpO2NvbnN0IG09ZC5kZXBlbmRlbmNpZXM7cmV0dXJuIG0ucHVzaCh7cmVmOnRoaXMucmVmLGRhdGE6Zy5qb2luKCIiKX0sLi4uZC5hbm5vdGF0aW9ucyksbX1zYXZlKGUsdCxyKXtjb25zdCBhPW5ldyB3LlBhcnRpYWxFdmFsdWF0b3Ioe3hyZWY6dGhpcy54cmVmLGhhbmRsZXI6ZSxwYWdlSW5kZXg6dGhpcy5wYWdlSW5kZXgsaWRGYWN0b3J5OnRoaXMuX2xvY2FsSWRGYWN0b3J5LGZvbnRDYWNoZTp0aGlzLmZvbnRDYWNoZSxidWlsdEluQ01hcENhY2hlOnRoaXMuYnVpbHRJbkNNYXBDYWNoZSxzdGFuZGFyZEZvbnREYXRhQ2FjaGU6dGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsZ2xvYmFsSW1hZ2VDYWNoZTp0aGlzLmdsb2JhbEltYWdlQ2FjaGUsc3lzdGVtRm9udENhY2hlOnRoaXMuc3lzdGVtRm9udENhY2hlLG9wdGlvbnM6dGhpcy5ldmFsdWF0b3JPcHRpb25zfSk7cmV0dXJuIHRoaXMuX3BhcnNlZEFubm90YXRpb25zLnRoZW4oKGZ1bmN0aW9uKGUpe2NvbnN0IGk9W107Zm9yKGNvbnN0IHMgb2YgZSlzLm11c3RCZVByaW50ZWQocikmJmkucHVzaChzLnNhdmUoYSx0LHIpLmNhdGNoKChmdW5jdGlvbihlKXtyZXR1cm4oMCxuLndhcm4pKCdzYXZlIC0gaWdub3JpbmcgYW5ub3RhdGlvbiBkYXRhIGR1cmluZyAiJy5jb25jYXQodC5uYW1lLCciIHRhc2s6ICInKS5jb25jYXQoZSwnIi4nKSksbnVsbH0pKSk7cmV0dXJuIFByb21pc2UuYWxsKGkpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlLmZpbHRlcigoZT0+ISFlKSl9KSl9KSl9bG9hZFJlc291cmNlcyhlKXtyZXR1cm4gdGhpcy5yZXNvdXJjZXNQcm9taXNlfHwodGhpcy5yZXNvdXJjZXNQcm9taXNlPXRoaXMucGRmTWFuYWdlci5lbnN1cmUodGhpcywicmVzb3VyY2VzIikpLHRoaXMucmVzb3VyY2VzUHJvbWlzZS50aGVuKCgoKT0+bmV3IGIuT2JqZWN0TG9hZGVyKHRoaXMucmVzb3VyY2VzLGUsdGhpcy54cmVmKS5sb2FkKCkpKX1nZXRPcGVyYXRvckxpc3QoZSl7bGV0e2hhbmRsZXI6dCxzaW5rOnIsdGFzazpzLGludGVudDpsLGNhY2hlS2V5OmgsYW5ub3RhdGlvblN0b3JhZ2U6dT1udWxsfT1lO2NvbnN0IGQ9dGhpcy5nZXRDb250ZW50U3RyZWFtKCksZj10aGlzLmxvYWRSZXNvdXJjZXMoWyJDb2xvclNwYWNlIiwiRXh0R1N0YXRlIiwiRm9udCIsIlBhdHRlcm4iLCJQcm9wZXJ0aWVzIiwiU2hhZGluZyIsIlhPYmplY3QiXSksZz1uZXcgdy5QYXJ0aWFsRXZhbHVhdG9yKHt4cmVmOnRoaXMueHJlZixoYW5kbGVyOnQscGFnZUluZGV4OnRoaXMucGFnZUluZGV4LGlkRmFjdG9yeTp0aGlzLl9sb2NhbElkRmFjdG9yeSxmb250Q2FjaGU6dGhpcy5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUsc3RhbmRhcmRGb250RGF0YUNhY2hlOnRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlLGdsb2JhbEltYWdlQ2FjaGU6dGhpcy5nbG9iYWxJbWFnZUNhY2hlLHN5c3RlbUZvbnRDYWNoZTp0aGlzLnN5c3RlbUZvbnRDYWNoZSxvcHRpb25zOnRoaXMuZXZhbHVhdG9yT3B0aW9uc30pLHA9dGhpcy54ZmFGYWN0b3J5P251bGw6KDAsaS5nZXROZXdBbm5vdGF0aW9uc01hcCkodSk7bGV0IG09bnVsbCxiPVByb21pc2UucmVzb2x2ZShudWxsKTtpZihwKXtsZXQgZTtjb25zdCB0PXAuZ2V0KHRoaXMucGFnZUluZGV4KTtpZih0KXtjb25zdCByPW5ldyBTZXQ7Zm9yKGNvbnN0e2JpdG1hcElkOmUsYml0bWFwOm59b2YgdCkhZXx8bnx8ci5oYXMoZSl8fHIuYWRkKGUpO2NvbnN0e2lzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkOml9PXRoaXMuZXZhbHVhdG9yT3B0aW9ucztpZihyLnNpemU+MCl7Y29uc3Qgcz10LnNsaWNlKCk7Zm9yKGNvbnN0W2UsdF1vZiB1KWUuc3RhcnRzV2l0aChuLkFubm90YXRpb25FZGl0b3JQcmVmaXgpJiZ0LmJpdG1hcCYmci5oYXModC5iaXRtYXBJZCkmJnMucHVzaCh0KTtlPWEuQW5ub3RhdGlvbkZhY3RvcnkuZ2VuZXJhdGVJbWFnZXMocyx0aGlzLnhyZWYsaSl9ZWxzZSBlPWEuQW5ub3RhdGlvbkZhY3RvcnkuZ2VuZXJhdGVJbWFnZXModCx0aGlzLnhyZWYsaSk7bT1uZXcgYy5SZWZTZXQsbyh0aGlzLE8sSSkuY2FsbCh0aGlzLHQsbSxudWxsKSxiPWEuQW5ub3RhdGlvbkZhY3RvcnkucHJpbnROZXdBbm5vdGF0aW9ucyhnLHMsdCxlKX19Y29uc3Qgdj1Qcm9taXNlLmFsbChbZCxmXSkudGhlbigoZT0+e2xldFtuXT1lO2NvbnN0IGE9bmV3IHkuT3BlcmF0b3JMaXN0KGwscik7cmV0dXJuIHQuc2VuZCgiU3RhcnRSZW5kZXJQYWdlIix7dHJhbnNwYXJlbmN5OmcuaGFzQmxlbmRNb2Rlcyh0aGlzLnJlc291cmNlcyx0aGlzLm5vbkJsZW5kTW9kZXNTZXQpLHBhZ2VJbmRleDp0aGlzLnBhZ2VJbmRleCxjYWNoZUtleTpofSksZy5nZXRPcGVyYXRvckxpc3Qoe3N0cmVhbTpuLHRhc2s6cyxyZXNvdXJjZXM6dGhpcy5yZXNvdXJjZXMsb3BlcmF0b3JMaXN0OmF9KS50aGVuKChmdW5jdGlvbigpe3JldHVybiBhfSkpfSkpO3JldHVybiBQcm9taXNlLmFsbChbdix0aGlzLl9wYXJzZWRBbm5vdGF0aW9ucyxiXSkudGhlbigoZnVuY3Rpb24oZSl7bGV0W3QscixhXT1lO2lmKGEpe3I9ci5maWx0ZXIoKGU9PiEoZS5yZWYmJm0uaGFzKGUucmVmKSkpKTtmb3IobGV0IGU9MCx0PWEubGVuZ3RoO2U8dDtlKyspe2NvbnN0IG49YVtlXTtpZihuLnJlZlRvUmVwbGFjZSl7Y29uc3QgaT1yLmZpbmRJbmRleCgoZT0+ZS5yZWYmJigwLGMuaXNSZWZzRXF1YWwpKGUucmVmLG4ucmVmVG9SZXBsYWNlKSkpO2k+PTAmJihyLnNwbGljZShpLDEsbiksYS5zcGxpY2UoZS0tLDEpLHQtLSl9fXI9ci5jb25jYXQoYSl9aWYoMD09PXIubGVuZ3RofHxsJm4uUmVuZGVyaW5nSW50ZW50RmxhZy5BTk5PVEFUSU9OU19ESVNBQkxFKXJldHVybiB0LmZsdXNoKCEwKSx7bGVuZ3RoOnQudG90YWxMZW5ndGh9O2NvbnN0IGk9ISEobCZuLlJlbmRlcmluZ0ludGVudEZsYWcuQU5OT1RBVElPTlNfRk9STVMpLG89ISEobCZuLlJlbmRlcmluZ0ludGVudEZsYWcuQU5ZKSxoPSEhKGwmbi5SZW5kZXJpbmdJbnRlbnRGbGFnLkRJU1BMQVkpLGQ9ISEobCZuLlJlbmRlcmluZ0ludGVudEZsYWcuUFJJTlQpLGY9W107Zm9yKGNvbnN0IGUgb2Ygcikob3x8aCYmZS5tdXN0QmVWaWV3ZWQodSl8fGQmJmUubXVzdEJlUHJpbnRlZCh1KSkmJmYucHVzaChlLmdldE9wZXJhdG9yTGlzdChnLHMsbCxpLHUpLmNhdGNoKChmdW5jdGlvbihlKXtyZXR1cm4oMCxuLndhcm4pKCdnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBhbm5vdGF0aW9uIGRhdGEgZHVyaW5nICInLmNvbmNhdChzLm5hbWUsJyIgdGFzazogIicpLmNvbmNhdChlLCciLicpKSx7b3BMaXN0Om51bGwsc2VwYXJhdGVGb3JtOiExLHNlcGFyYXRlQ2FudmFzOiExfX0pKSk7cmV0dXJuIFByb21pc2UuYWxsKGYpLnRoZW4oKGZ1bmN0aW9uKGUpe2xldCByPSExLG49ITE7Zm9yKGNvbnN0e29wTGlzdDphLHNlcGFyYXRlRm9ybTppLHNlcGFyYXRlQ2FudmFzOnN9b2YgZSl0LmFkZE9wTGlzdChhKSxyfHwocj1pKSxufHwobj1zKTtyZXR1cm4gdC5mbHVzaCghMCx7Zm9ybTpyLGNhbnZhczpufSkse2xlbmd0aDp0LnRvdGFsTGVuZ3RofX0pKX0pKX1leHRyYWN0VGV4dENvbnRlbnQoZSl7bGV0e2hhbmRsZXI6dCx0YXNrOnIsaW5jbHVkZU1hcmtlZENvbnRlbnQ6bixkaXNhYmxlTm9ybWFsaXphdGlvbjphLHNpbms6aX09ZTtjb25zdCBzPXRoaXMuZ2V0Q29udGVudFN0cmVhbSgpLG89dGhpcy5sb2FkUmVzb3VyY2VzKFsiRXh0R1N0YXRlIiwiRm9udCIsIlByb3BlcnRpZXMiLCJYT2JqZWN0Il0pO3JldHVybiBQcm9taXNlLmFsbChbcyxvXSkudGhlbigoZT0+e2xldFtzXT1lO3JldHVybiBuZXcgdy5QYXJ0aWFsRXZhbHVhdG9yKHt4cmVmOnRoaXMueHJlZixoYW5kbGVyOnQscGFnZUluZGV4OnRoaXMucGFnZUluZGV4LGlkRmFjdG9yeTp0aGlzLl9sb2NhbElkRmFjdG9yeSxmb250Q2FjaGU6dGhpcy5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUsc3RhbmRhcmRGb250RGF0YUNhY2hlOnRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlLGdsb2JhbEltYWdlQ2FjaGU6dGhpcy5nbG9iYWxJbWFnZUNhY2hlLHN5c3RlbUZvbnRDYWNoZTp0aGlzLnN5c3RlbUZvbnRDYWNoZSxvcHRpb25zOnRoaXMuZXZhbHVhdG9yT3B0aW9uc30pLmdldFRleHRDb250ZW50KHtzdHJlYW06cyx0YXNrOnIscmVzb3VyY2VzOnRoaXMucmVzb3VyY2VzLGluY2x1ZGVNYXJrZWRDb250ZW50Om4sZGlzYWJsZU5vcm1hbGl6YXRpb246YSxzaW5rOmksdmlld0JveDp0aGlzLnZpZXd9KX0pKX1hc3luYyBnZXRTdHJ1Y3RUcmVlKCl7Y29uc3QgZT1hd2FpdCB0aGlzLnBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZygic3RydWN0VHJlZVJvb3QiKTtyZXR1cm4gZT8oYXdhaXQgdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZSh0aGlzLCJfcGFyc2VTdHJ1Y3RUcmVlIixbZV0pKS5zZXJpYWxpemFibGU6bnVsbH1fcGFyc2VTdHJ1Y3RUcmVlKGUpe2NvbnN0IHQ9bmV3IHguU3RydWN0VHJlZVBhZ2UoZSx0aGlzLnBhZ2VEaWN0KTtyZXR1cm4gdC5wYXJzZSgpLHR9YXN5bmMgZ2V0QW5ub3RhdGlvbnNEYXRhKGUsdCxyKXtjb25zdCBhPWF3YWl0IHRoaXMuX3BhcnNlZEFubm90YXRpb25zO2lmKDA9PT1hLmxlbmd0aClyZXR1cm5bXTtjb25zdCBpPVtdLHM9W107bGV0IG87Y29uc3QgYz0hIShyJm4uUmVuZGVyaW5nSW50ZW50RmxhZy5BTlkpLGw9ISEociZuLlJlbmRlcmluZ0ludGVudEZsYWcuRElTUExBWSksaD0hIShyJm4uUmVuZGVyaW5nSW50ZW50RmxhZy5QUklOVCk7Zm9yKGNvbnN0IHIgb2YgYSl7Y29uc3QgYT1jfHxsJiZyLnZpZXdhYmxlOyhhfHxoJiZyLnByaW50YWJsZSkmJmkucHVzaChyLmRhdGEpLHIuaGFzVGV4dENvbnRlbnQmJmEmJihvfHwobz1uZXcgdy5QYXJ0aWFsRXZhbHVhdG9yKHt4cmVmOnRoaXMueHJlZixoYW5kbGVyOmUscGFnZUluZGV4OnRoaXMucGFnZUluZGV4LGlkRmFjdG9yeTp0aGlzLl9sb2NhbElkRmFjdG9yeSxmb250Q2FjaGU6dGhpcy5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUsc3RhbmRhcmRGb250RGF0YUNhY2hlOnRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlLGdsb2JhbEltYWdlQ2FjaGU6dGhpcy5nbG9iYWxJbWFnZUNhY2hlLHN5c3RlbUZvbnRDYWNoZTp0aGlzLnN5c3RlbUZvbnRDYWNoZSxvcHRpb25zOnRoaXMuZXZhbHVhdG9yT3B0aW9uc30pKSxzLnB1c2goci5leHRyYWN0VGV4dENvbnRlbnQobyx0LFstMS8wLC0xLzAsMS8wLDEvMF0pLmNhdGNoKChmdW5jdGlvbihlKXsoMCxuLndhcm4pKCdnZXRBbm5vdGF0aW9uc0RhdGEgLSBpZ25vcmluZyB0ZXh0Q29udGVudCBkdXJpbmcgIicuY29uY2F0KHQubmFtZSwnIiB0YXNrOiAiJykuY29uY2F0KGUsJyIuJykpfSkpKSl9cmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKHMpLGl9Z2V0IGFubm90YXRpb25zKCl7Y29uc3QgZT10aGlzLl9nZXRJbmhlcml0YWJsZVByb3BlcnR5KCJBbm5vdHMiKTtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiYW5ub3RhdGlvbnMiLEFycmF5LmlzQXJyYXkoZSk/ZTpbXSl9Z2V0IF9wYXJzZWRBbm5vdGF0aW9ucygpe2NvbnN0IGU9dGhpcy5wZGZNYW5hZ2VyLmVuc3VyZSh0aGlzLCJhbm5vdGF0aW9ucyIpLnRoZW4oKCgpPT57Y29uc3QgZT1bXTtmb3IoY29uc3QgdCBvZiB0aGlzLmFubm90YXRpb25zKWUucHVzaChhLkFubm90YXRpb25GYWN0b3J5LmNyZWF0ZSh0aGlzLnhyZWYsdCx0aGlzLnBkZk1hbmFnZXIsdGhpcy5fbG9jYWxJZEZhY3RvcnksITEpLmNhdGNoKChmdW5jdGlvbihlKXtyZXR1cm4oMCxuLndhcm4pKCdfcGFyc2VkQW5ub3RhdGlvbnM6ICInLmNvbmNhdChlLCciLicpKSxudWxsfSkpKTtyZXR1cm4gUHJvbWlzZS5hbGwoZSkudGhlbigoZnVuY3Rpb24oZSl7aWYoMD09PWUubGVuZ3RoKXJldHVybiBlO2NvbnN0IHQ9W107bGV0IHI7Zm9yKGNvbnN0IG4gb2YgZSluJiYobiBpbnN0YW5jZW9mIGEuUG9wdXBBbm5vdGF0aW9uPyhyfHwocj1bXSkpLnB1c2gobik6dC5wdXNoKG4pKTtyZXR1cm4gciYmdC5wdXNoKC4uLnIpLHR9KSl9KSk7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIl9wYXJzZWRBbm5vdGF0aW9ucyIsZSl9Z2V0IGpzQWN0aW9ucygpe2NvbnN0IGU9KDAsaS5jb2xsZWN0QWN0aW9ucykodGhpcy54cmVmLHRoaXMucGFnZURpY3Qsbi5QYWdlQWN0aW9uRXZlbnRUeXBlKTtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywianNBY3Rpb25zIixlKX19ZnVuY3Rpb24gSShlLHQscil7Zm9yKGNvbnN0IGEgb2YgZSlpZihhLmlkKXtjb25zdCBlPWMuUmVmLmZyb21TdHJpbmcoYS5pZCk7aWYoIWUpeygwLG4ud2FybikoIkEgbm9uLWxpbmtlZCBhbm5vdGF0aW9uIGNhbm5vdCBiZSBtb2RpZmllZDogIi5jb25jYXQoYS5pZCkpO2NvbnRpbnVlfWlmKGEuZGVsZXRlZCl7dC5wdXQoZSk7Y29udGludWV9bnVsbD09cnx8ci5wdXQoZSksYS5yZWY9ZSxkZWxldGUgYS5pZH19dC5QYWdlPUY7Y29uc3QgVD1uZXcgVWludDhBcnJheShbMzcsODAsNjgsNzAsNDVdKSxNPW5ldyBVaW50OEFycmF5KFsxMTUsMTE2LDk3LDExNCwxMTYsMTIwLDExNCwxMDEsMTAyXSksRT1uZXcgVWludDhBcnJheShbMTAxLDExMCwxMDAsMTExLDk4LDEwNl0pO2Z1bmN0aW9uIFAoZSx0KXtsZXQgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MTAyNCxuPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM107Y29uc3QgYT10Lmxlbmd0aCxpPWUucGVla0J5dGVzKHIpLHM9aS5sZW5ndGgtYTtpZihzPD0wKXJldHVybiExO2lmKG4pe2NvbnN0IHI9YS0xO2xldCBuPWkubGVuZ3RoLTE7Zm9yKDtuPj1yOyl7bGV0IHM9MDtmb3IoO3M8YSYmaVtuLXNdPT09dFtyLXNdOylzKys7aWYocz49YSlyZXR1cm4gZS5wb3MrPW4tciwhMDtuLS19fWVsc2V7bGV0IHI9MDtmb3IoO3I8PXM7KXtsZXQgbj0wO2Zvcig7bjxhJiZpW3Irbl09PT10W25dOyluKys7aWYobj49YSlyZXR1cm4gZS5wb3MrPXIsITA7cisrfX1yZXR1cm4hMX10LlBERkRvY3VtZW50PWNsYXNze2NvbnN0cnVjdG9yKGUsdCl7aWYodC5sZW5ndGg8PTApdGhyb3cgbmV3IG4uSW52YWxpZFBERkV4Y2VwdGlvbigiVGhlIFBERiBmaWxlIGlzIGVtcHR5LCBpLmUuIGl0cyBzaXplIGlzIHplcm8gYnl0ZXMuIik7dGhpcy5wZGZNYW5hZ2VyPWUsdGhpcy5zdHJlYW09dCx0aGlzLnhyZWY9bmV3IGsuWFJlZih0LGUpLHRoaXMuX3BhZ2VQcm9taXNlcz1uZXcgTWFwLHRoaXMuX3ZlcnNpb249bnVsbDtjb25zdCByPXtmb250OjB9O3RoaXMuX2dsb2JhbElkRmFjdG9yeT1jbGFzc3tzdGF0aWMgZ2V0RG9jSWQoKXtyZXR1cm4iZ18iLmNvbmNhdChlLmRvY0lkKX1zdGF0aWMgY3JlYXRlRm9udElkKCl7cmV0dXJuImYiKyArK3IuZm9udH1zdGF0aWMgY3JlYXRlT2JqSWQoKXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBjcmVhdGVPYmpJZGAgY2FsbGVkLiIpfXN0YXRpYyBnZXRQYWdlT2JqSWQoKXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBnZXRQYWdlT2JqSWRgIGNhbGxlZC4iKX19fXBhcnNlKGUpe3RoaXMueHJlZi5wYXJzZShlKSx0aGlzLmNhdGFsb2c9bmV3IGQuQ2F0YWxvZyh0aGlzLnBkZk1hbmFnZXIsdGhpcy54cmVmKX1nZXQgbGluZWFyaXphdGlvbigpe2xldCBlPW51bGw7dHJ5e2U9cC5MaW5lYXJpemF0aW9uLmNyZWF0ZSh0aGlzLnN0cmVhbSl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIGkuTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxuLmluZm8pKGUpfXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJsaW5lYXJpemF0aW9uIixlKX1nZXQgc3RhcnRYUmVmKCl7Y29uc3QgZT10aGlzLnN0cmVhbTtsZXQgdD0wO2lmKHRoaXMubGluZWFyaXphdGlvbillLnJlc2V0KCksUChlLEUpJiYodD1lLnBvcys2LWUuc3RhcnQpO2Vsc2V7Y29uc3Qgcj0xMDI0LG49TS5sZW5ndGg7bGV0IGE9ITEscz1lLmVuZDtmb3IoOyFhJiZzPjA7KXMtPXItbixzPDAmJihzPTApLGUucG9zPXMsYT1QKGUsTSxyLCEwKTtpZihhKXtsZXQgcjtlLnNraXAoOSk7ZG97cj1lLmdldEJ5dGUoKX13aGlsZSgoMCxpLmlzV2hpdGVTcGFjZSkocikpO2xldCBuPSIiO2Zvcig7cj49MzImJnI8PTU3OyluKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHIpLHI9ZS5nZXRCeXRlKCk7dD1wYXJzZUludChuLDEwKSxpc05hTih0KSYmKHQ9MCl9fXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJzdGFydFhSZWYiLHQpfWNoZWNrSGVhZGVyKCl7Y29uc3QgZT10aGlzLnN0cmVhbTtpZihlLnJlc2V0KCksIVAoZSxUKSlyZXR1cm47ZS5tb3ZlU3RhcnQoKSxlLnNraXAoVC5sZW5ndGgpO2xldCB0LHI9IiI7Zm9yKDsodD1lLmdldEJ5dGUoKSk+MzImJnIubGVuZ3RoPDc7KXIrPVN0cmluZy5mcm9tQ2hhckNvZGUodCk7aS5QREZfVkVSU0lPTl9SRUdFWFAudGVzdChyKT90aGlzLl92ZXJzaW9uPXI6KDAsbi53YXJuKSgiSW52YWxpZCBQREYgaGVhZGVyIHZlcnNpb246ICIuY29uY2F0KHIpKX1wYXJzZVN0YXJ0WFJlZigpe3RoaXMueHJlZi5zZXRTdGFydFhSZWYodGhpcy5zdGFydFhSZWYpfWdldCBudW1QYWdlcygpe2xldCBlPTA7cmV0dXJuIGU9dGhpcy5jYXRhbG9nLmhhc0FjdHVhbE51bVBhZ2VzP3RoaXMuY2F0YWxvZy5udW1QYWdlczp0aGlzLnhmYUZhY3Rvcnk/dGhpcy54ZmFGYWN0b3J5LmdldE51bVBhZ2VzKCk6dGhpcy5saW5lYXJpemF0aW9uP3RoaXMubGluZWFyaXphdGlvbi5udW1QYWdlczp0aGlzLmNhdGFsb2cubnVtUGFnZXMsKDAsbi5zaGFkb3cpKHRoaXMsIm51bVBhZ2VzIixlKX1faGFzT25seURvY3VtZW50U2lnbmF0dXJlcyhlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MDtyZXR1cm4hIUFycmF5LmlzQXJyYXkoZSkmJmUuZXZlcnkoKGU9PntpZighKChlPXRoaXMueHJlZi5mZXRjaElmUmVmKGUpKWluc3RhbmNlb2YgYy5EaWN0KSlyZXR1cm4hMTtpZihlLmhhcygiS2lkcyIpKXJldHVybisrdD4xMD8oKDAsbi53YXJuKSgiX2hhc09ubHlEb2N1bWVudFNpZ25hdHVyZXM6IG1heGltdW0gcmVjdXJzaW9uIGRlcHRoIHJlYWNoZWQiKSwhMSk6dGhpcy5faGFzT25seURvY3VtZW50U2lnbmF0dXJlcyhlLmdldCgiS2lkcyIpLHQpO2NvbnN0IHI9KDAsYy5pc05hbWUpKGUuZ2V0KCJGVCIpLCJTaWciKSxhPWUuZ2V0KCJSZWN0IiksaT1BcnJheS5pc0FycmF5KGEpJiZhLmV2ZXJ5KChlPT4wPT09ZSkpO3JldHVybiByJiZpfSkpfWdldCBfeGZhU3RyZWFtcygpe2NvbnN0IGU9dGhpcy5jYXRhbG9nLmFjcm9Gb3JtO2lmKCFlKXJldHVybiBudWxsO2NvbnN0IHQ9ZS5nZXQoIlhGQSIpLHI9eyJ4ZHA6eGRwIjoiIix0ZW1wbGF0ZToiIixkYXRhc2V0czoiIixjb25maWc6IiIsY29ubmVjdGlvblNldDoiIixsb2NhbGVTZXQ6IiIsc3R5bGVzaGVldDoiIiwiL3hkcDp4ZHAiOiIifTtpZih0IGluc3RhbmNlb2YgaC5CYXNlU3RyZWFtJiYhdC5pc0VtcHR5KXJldHVybiByWyJ4ZHA6eGRwIl09dCxyO2lmKCFBcnJheS5pc0FycmF5KHQpfHwwPT09dC5sZW5ndGgpcmV0dXJuIG51bGw7Zm9yKGxldCBlPTAsbj10Lmxlbmd0aDtlPG47ZSs9Mil7bGV0IGE7aWYoYT0wPT09ZT8ieGRwOnhkcCI6ZT09PW4tMj8iL3hkcDp4ZHAiOnRbZV0sIXIuaGFzT3duUHJvcGVydHkoYSkpY29udGludWU7Y29uc3QgaT10aGlzLnhyZWYuZmV0Y2hJZlJlZih0W2UrMV0pO2kgaW5zdGFuY2VvZiBoLkJhc2VTdHJlYW0mJiFpLmlzRW1wdHkmJihyW2FdPWkpfXJldHVybiByfWdldCB4ZmFEYXRhc2V0cygpe2NvbnN0IGU9dGhpcy5feGZhU3RyZWFtcztpZighZSlyZXR1cm4oMCxuLnNoYWRvdykodGhpcywieGZhRGF0YXNldHMiLG51bGwpO2Zvcihjb25zdCB0IG9mWyJkYXRhc2V0cyIsInhkcDp4ZHAiXSl7Y29uc3Qgcj1lW3RdO2lmKHIpdHJ5e2NvbnN0IGU9e1t0XTooMCxuLnN0cmluZ1RvVVRGOFN0cmluZykoci5nZXRTdHJpbmcoKSl9O3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJ4ZmFEYXRhc2V0cyIsbmV3IGcuRGF0YXNldFJlYWRlcihlKSl9Y2F0Y2goZSl7KDAsbi53YXJuKSgiWEZBIC0gSW52YWxpZCB1dGYtOCBzdHJpbmcuIik7YnJlYWt9fXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJ4ZmFEYXRhc2V0cyIsbnVsbCl9Z2V0IHhmYURhdGEoKXtjb25zdCBlPXRoaXMuX3hmYVN0cmVhbXM7aWYoIWUpcmV0dXJuIG51bGw7Y29uc3QgdD1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcihjb25zdFtyLGFdb2YgT2JqZWN0LmVudHJpZXMoZSkpaWYoYSl0cnl7dFtyXT0oMCxuLnN0cmluZ1RvVVRGOFN0cmluZykoYS5nZXRTdHJpbmcoKSl9Y2F0Y2goZSl7cmV0dXJuKDAsbi53YXJuKSgiWEZBIC0gSW52YWxpZCB1dGYtOCBzdHJpbmcuIiksbnVsbH1yZXR1cm4gdH1nZXQgeGZhRmFjdG9yeSgpe2xldCBlO3JldHVybiB0aGlzLnBkZk1hbmFnZXIuZW5hYmxlWGZhJiZ0aGlzLmNhdGFsb2cubmVlZHNSZW5kZXJpbmcmJnRoaXMuZm9ybUluZm8uaGFzWGZhJiYhdGhpcy5mb3JtSW5mby5oYXNBY3JvRm9ybSYmKGU9dGhpcy54ZmFEYXRhKSwoMCxuLnNoYWRvdykodGhpcywieGZhRmFjdG9yeSIsZT9uZXcgQS5YRkFGYWN0b3J5KGUpOm51bGwpfWdldCBpc1B1cmVYZmEoKXtyZXR1cm4hIXRoaXMueGZhRmFjdG9yeSYmdGhpcy54ZmFGYWN0b3J5LmlzVmFsaWQoKX1nZXQgaHRtbEZvclhmYSgpe3JldHVybiB0aGlzLnhmYUZhY3Rvcnk/dGhpcy54ZmFGYWN0b3J5LmdldFBhZ2VzKCk6bnVsbH1hc3luYyBsb2FkWGZhSW1hZ2VzKCl7Y29uc3QgZT1hd2FpdCB0aGlzLnBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZygieGZhSW1hZ2VzIik7aWYoIWUpcmV0dXJuO2NvbnN0IHQ9ZS5nZXRLZXlzKCkscj1uZXcgYi5PYmplY3RMb2FkZXIoZSx0LHRoaXMueHJlZik7YXdhaXQgci5sb2FkKCk7Y29uc3Qgbj1uZXcgTWFwO2Zvcihjb25zdCByIG9mIHQpe2NvbnN0IHQ9ZS5nZXQocik7dCBpbnN0YW5jZW9mIGguQmFzZVN0cmVhbSYmbi5zZXQocix0LmdldEJ5dGVzKCkpfXRoaXMueGZhRmFjdG9yeS5zZXRJbWFnZXMobil9YXN5bmMgbG9hZFhmYUZvbnRzKGUsdCl7Y29uc3Qgcj1hd2FpdCB0aGlzLnBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZygiYWNyb0Zvcm0iKTtpZighcilyZXR1cm47Y29uc3QgYT1hd2FpdCByLmdldEFzeW5jKCJEUiIpO2lmKCEoYSBpbnN0YW5jZW9mIGMuRGljdCkpcmV0dXJuO2NvbnN0IHM9bmV3IGIuT2JqZWN0TG9hZGVyKGEsWyJGb250Il0sdGhpcy54cmVmKTthd2FpdCBzLmxvYWQoKTtjb25zdCBvPWEuZ2V0KCJGb250Iik7aWYoIShvIGluc3RhbmNlb2YgYy5EaWN0KSlyZXR1cm47Y29uc3QgaD1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5wZGZNYW5hZ2VyLmV2YWx1YXRvck9wdGlvbnMpO2gudXNlU3lzdGVtRm9udHM9ITE7Y29uc3QgdT1uZXcgdy5QYXJ0aWFsRXZhbHVhdG9yKHt4cmVmOnRoaXMueHJlZixoYW5kbGVyOmUscGFnZUluZGV4Oi0xLGlkRmFjdG9yeTp0aGlzLl9nbG9iYWxJZEZhY3RvcnksZm9udENhY2hlOnRoaXMuY2F0YWxvZy5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0aGlzLmNhdGFsb2cuYnVpbHRJbkNNYXBDYWNoZSxzdGFuZGFyZEZvbnREYXRhQ2FjaGU6dGhpcy5jYXRhbG9nLnN0YW5kYXJkRm9udERhdGFDYWNoZSxvcHRpb25zOmh9KSxkPW5ldyB5Lk9wZXJhdG9yTGlzdCxmPVtdLGc9e2dldCBmb250KCl7cmV0dXJuIGYuYXQoLTEpfSxzZXQgZm9udChlKXtmLnB1c2goZSl9LGNsb25lKCl7cmV0dXJuIHRoaXN9fSxwPW5ldyBNYXA7by5mb3JFYWNoKCgoZSx0KT0+e3Auc2V0KGUsdCl9KSk7Y29uc3QgbT1bXTtmb3IoY29uc3RbZSxyXW9mIHApe2NvbnN0IHM9ci5nZXQoIkZvbnREZXNjcmlwdG9yIik7aWYoIShzIGluc3RhbmNlb2YgYy5EaWN0KSljb250aW51ZTtsZXQgbz1zLmdldCgiRm9udEZhbWlseSIpO289by5yZXBsYWNlQWxsKC9bIF0rKFxkKS9nLCIkMSIpO2NvbnN0IGw9e2ZvbnRGYW1pbHk6byxmb250V2VpZ2h0OnMuZ2V0KCJGb250V2VpZ2h0IiksaXRhbGljQW5nbGU6LXMuZ2V0KCJJdGFsaWNBbmdsZSIpfTsoMCxpLnZhbGlkYXRlQ1NTRm9udCkobCkmJm0ucHVzaCh1LmhhbmRsZVNldEZvbnQoYSxbYy5OYW1lLmdldChlKSwxXSxudWxsLGQsdCxnLG51bGwsbCkuY2F0Y2goKGZ1bmN0aW9uKGUpe3JldHVybigwLG4ud2FybikoJ2xvYWRYZmFGb250czogIicuY29uY2F0KGUsJyIuJykpLG51bGx9KSkpfWF3YWl0IFByb21pc2UuYWxsKG0pO2NvbnN0IHY9dGhpcy54ZmFGYWN0b3J5LnNldEZvbnRzKGYpO2lmKCF2KXJldHVybjtoLmlnbm9yZUVycm9ycz0hMCxtLmxlbmd0aD0wLGYubGVuZ3RoPTA7Y29uc3QgeD1uZXcgU2V0O2Zvcihjb25zdCBlIG9mIHYpKDAsbC5nZXRYZmFGb250TmFtZSkoIiIuY29uY2F0KGUsIi1SZWd1bGFyIikpfHx4LmFkZChlKTt4LnNpemUmJnYucHVzaCgiUGRmSlMtRmFsbGJhY2siKTtmb3IoY29uc3QgZSBvZiB2KWlmKCF4LmhhcyhlKSlmb3IoY29uc3QgciBvZlt7bmFtZToiUmVndWxhciIsZm9udFdlaWdodDo0MDAsaXRhbGljQW5nbGU6MH0se25hbWU6IkJvbGQiLGZvbnRXZWlnaHQ6NzAwLGl0YWxpY0FuZ2xlOjB9LHtuYW1lOiJJdGFsaWMiLGZvbnRXZWlnaHQ6NDAwLGl0YWxpY0FuZ2xlOjEyfSx7bmFtZToiQm9sZEl0YWxpYyIsZm9udFdlaWdodDo3MDAsaXRhbGljQW5nbGU6MTJ9XSl7Y29uc3QgaT0iIi5jb25jYXQoZSwiLSIpLmNvbmNhdChyLm5hbWUpLHM9KDAsbC5nZXRYZmFGb250RGljdCkoaSk7bS5wdXNoKHUuaGFuZGxlU2V0Rm9udChhLFtjLk5hbWUuZ2V0KGkpLDFdLG51bGwsZCx0LGcscyx7Zm9udEZhbWlseTplLGZvbnRXZWlnaHQ6ci5mb250V2VpZ2h0LGl0YWxpY0FuZ2xlOnIuaXRhbGljQW5nbGV9KS5jYXRjaCgoZnVuY3Rpb24oZSl7cmV0dXJuKDAsbi53YXJuKSgnbG9hZFhmYUZvbnRzOiAiJy5jb25jYXQoZSwnIi4nKSksbnVsbH0pKSl9YXdhaXQgUHJvbWlzZS5hbGwobSksdGhpcy54ZmFGYWN0b3J5LmFwcGVuZEZvbnRzKGYseCl9YXN5bmMgc2VyaWFsaXplWGZhRGF0YShlKXtyZXR1cm4gdGhpcy54ZmFGYWN0b3J5P3RoaXMueGZhRmFjdG9yeS5zZXJpYWxpemVEYXRhKGUpOm51bGx9Z2V0IHZlcnNpb24oKXtyZXR1cm4gdGhpcy5jYXRhbG9nLnZlcnNpb258fHRoaXMuX3ZlcnNpb259Z2V0IGZvcm1JbmZvKCl7Y29uc3QgZT17aGFzRmllbGRzOiExLGhhc0Fjcm9Gb3JtOiExLGhhc1hmYTohMSxoYXNTaWduYXR1cmVzOiExfSx0PXRoaXMuY2F0YWxvZy5hY3JvRm9ybTtpZighdClyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiZm9ybUluZm8iLGUpO3RyeXtjb25zdCByPXQuZ2V0KCJGaWVsZHMiKSxuPUFycmF5LmlzQXJyYXkocikmJnIubGVuZ3RoPjA7ZS5oYXNGaWVsZHM9bjtjb25zdCBhPXQuZ2V0KCJYRkEiKTtlLmhhc1hmYT1BcnJheS5pc0FycmF5KGEpJiZhLmxlbmd0aD4wfHxhIGluc3RhbmNlb2YgaC5CYXNlU3RyZWFtJiYhYS5pc0VtcHR5O2NvbnN0IGk9ISEoMSZ0LmdldCgiU2lnRmxhZ3MiKSkscz1pJiZ0aGlzLl9oYXNPbmx5RG9jdW1lbnRTaWduYXR1cmVzKHIpO2UuaGFzQWNyb0Zvcm09biYmIXMsZS5oYXNTaWduYXR1cmVzPWl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIGkuTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxuLndhcm4pKCdDYW5ub3QgZmV0Y2ggZm9ybSBpbmZvcm1hdGlvbjogIicuY29uY2F0KGUsJyIuJykpfXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJmb3JtSW5mbyIsZSl9Z2V0IGRvY3VtZW50SW5mbygpe2NvbnN0IGU9e1BERkZvcm1hdFZlcnNpb246dGhpcy52ZXJzaW9uLExhbmd1YWdlOnRoaXMuY2F0YWxvZy5sYW5nLEVuY3J5cHRGaWx0ZXJOYW1lOnRoaXMueHJlZi5lbmNyeXB0P3RoaXMueHJlZi5lbmNyeXB0LmZpbHRlck5hbWU6bnVsbCxJc0xpbmVhcml6ZWQ6ISF0aGlzLmxpbmVhcml6YXRpb24sSXNBY3JvRm9ybVByZXNlbnQ6dGhpcy5mb3JtSW5mby5oYXNBY3JvRm9ybSxJc1hGQVByZXNlbnQ6dGhpcy5mb3JtSW5mby5oYXNYZmEsSXNDb2xsZWN0aW9uUHJlc2VudDohIXRoaXMuY2F0YWxvZy5jb2xsZWN0aW9uLElzU2lnbmF0dXJlc1ByZXNlbnQ6dGhpcy5mb3JtSW5mby5oYXNTaWduYXR1cmVzfTtsZXQgdDt0cnl7dD10aGlzLnhyZWYudHJhaWxlci5nZXQoIkluZm8iKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLG4uaW5mbykoIlRoZSBkb2N1bWVudCBpbmZvcm1hdGlvbiBkaWN0aW9uYXJ5IGlzIGludmFsaWQuIil9aWYoISh0IGluc3RhbmNlb2YgYy5EaWN0KSlyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiZG9jdW1lbnRJbmZvIixlKTtmb3IoY29uc3QgciBvZiB0LmdldEtleXMoKSl7Y29uc3QgYT10LmdldChyKTtzd2l0Y2gocil7Y2FzZSJUaXRsZSI6Y2FzZSJBdXRob3IiOmNhc2UiU3ViamVjdCI6Y2FzZSJLZXl3b3JkcyI6Y2FzZSJDcmVhdG9yIjpjYXNlIlByb2R1Y2VyIjpjYXNlIkNyZWF0aW9uRGF0ZSI6Y2FzZSJNb2REYXRlIjppZigic3RyaW5nIj09dHlwZW9mIGEpe2Vbcl09KDAsbi5zdHJpbmdUb1BERlN0cmluZykoYSk7Y29udGludWV9YnJlYWs7Y2FzZSJUcmFwcGVkIjppZihhIGluc3RhbmNlb2YgYy5OYW1lKXtlW3JdPWE7Y29udGludWV9YnJlYWs7ZGVmYXVsdDpsZXQgdDtzd2l0Y2godHlwZW9mIGEpe2Nhc2Uic3RyaW5nIjp0PSgwLG4uc3RyaW5nVG9QREZTdHJpbmcpKGEpO2JyZWFrO2Nhc2UibnVtYmVyIjpjYXNlImJvb2xlYW4iOnQ9YTticmVhaztkZWZhdWx0OmEgaW5zdGFuY2VvZiBjLk5hbWUmJih0PWEpfWlmKHZvaWQgMD09PXQpeygwLG4ud2FybikoJ0JhZCB2YWx1ZSwgZm9yIGN1c3RvbSBrZXkgIicuY29uY2F0KHIsJyIsIGluIEluZm86ICcpLmNvbmNhdChhLCIuIikpO2NvbnRpbnVlfWUuQ3VzdG9tfHwoZS5DdXN0b209T2JqZWN0LmNyZWF0ZShudWxsKSksZS5DdXN0b21bcl09dDtjb250aW51ZX0oMCxuLndhcm4pKCdCYWQgdmFsdWUsIGZvciBrZXkgIicuY29uY2F0KHIsJyIsIGluIEluZm86ICcpLmNvbmNhdChhLCIuIikpfXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJkb2N1bWVudEluZm8iLGUpfWdldCBmaW5nZXJwcmludHMoKXtmdW5jdGlvbiBlKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZSYmZS5sZW5ndGg+MCYmIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIiE9PWV9ZnVuY3Rpb24gdChlKXtjb25zdCB0PVtdO2Zvcihjb25zdCByIG9mIGUpe2NvbnN0IGU9ci50b1N0cmluZygxNik7dC5wdXNoKGUucGFkU3RhcnQoMiwiMCIpKX1yZXR1cm4gdC5qb2luKCIiKX1jb25zdCByPXRoaXMueHJlZi50cmFpbGVyLmdldCgiSUQiKTtsZXQgYSxpO3JldHVybiBBcnJheS5pc0FycmF5KHIpJiZlKHJbMF0pPyhhPSgwLG4uc3RyaW5nVG9CeXRlcykoclswXSksclsxXSE9PXJbMF0mJmUoclsxXSkmJihpPSgwLG4uc3RyaW5nVG9CeXRlcykoclsxXSkpKTphPSgwLHUuY2FsY3VsYXRlTUQ1KSh0aGlzLnN0cmVhbS5nZXRCeXRlUmFuZ2UoMCwxMDI0KSwwLDEwMjQpLCgwLG4uc2hhZG93KSh0aGlzLCJmaW5nZXJwcmludHMiLFt0KGEpLGk/dChpKTpudWxsXSl9YXN5bmMgX2dldExpbmVhcml6YXRpb25QYWdlKGUpe2NvbnN0e2NhdGFsb2c6dCxsaW5lYXJpemF0aW9uOnIseHJlZjphfT10aGlzLGk9Yy5SZWYuZ2V0KHIub2JqZWN0TnVtYmVyRmlyc3QsMCk7dHJ5e2NvbnN0IGU9YXdhaXQgYS5mZXRjaEFzeW5jKGkpO2lmKGUgaW5zdGFuY2VvZiBjLkRpY3Qpe2xldCByPWUuZ2V0UmF3KCJUeXBlIik7aWYociBpbnN0YW5jZW9mIGMuUmVmJiYocj1hd2FpdCBhLmZldGNoQXN5bmMocikpLCgwLGMuaXNOYW1lKShyLCJQYWdlIil8fCFlLmhhcygiVHlwZSIpJiYhZS5oYXMoIktpZHMiKSlyZXR1cm4gdC5wYWdlS2lkc0NvdW50Q2FjaGUuaGFzKGkpfHx0LnBhZ2VLaWRzQ291bnRDYWNoZS5wdXQoaSwxKSx0LnBhZ2VJbmRleENhY2hlLmhhcyhpKXx8dC5wYWdlSW5kZXhDYWNoZS5wdXQoaSwwKSxbZSxpXX10aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiVGhlIExpbmVhcml6YXRpb24gZGljdGlvbmFyeSBkb2Vzbid0IHBvaW50IHRvIGEgdmFsaWQgUGFnZSBkaWN0aW9uYXJ5LiIpfWNhdGNoKHIpe3JldHVybigwLG4ud2FybikoJ19nZXRMaW5lYXJpemF0aW9uUGFnZTogIicuY29uY2F0KHIubWVzc2FnZSwnIi4nKSksdC5nZXRQYWdlRGljdChlKX19Z2V0UGFnZShlKXtjb25zdCB0PXRoaXMuX3BhZ2VQcm9taXNlcy5nZXQoZSk7aWYodClyZXR1cm4gdDtjb25zdHtjYXRhbG9nOnIsbGluZWFyaXphdGlvbjpuLHhmYUZhY3Rvcnk6YX09dGhpcztsZXQgaTtyZXR1cm4gaT1hP1Byb21pc2UucmVzb2x2ZShbYy5EaWN0LmVtcHR5LG51bGxdKToobnVsbD09bj92b2lkIDA6bi5wYWdlRmlyc3QpPT09ZT90aGlzLl9nZXRMaW5lYXJpemF0aW9uUGFnZShlKTpyLmdldFBhZ2VEaWN0KGUpLGk9aS50aGVuKCh0PT57bGV0W24saV09dDtyZXR1cm4gbmV3IEYoe3BkZk1hbmFnZXI6dGhpcy5wZGZNYW5hZ2VyLHhyZWY6dGhpcy54cmVmLHBhZ2VJbmRleDplLHBhZ2VEaWN0Om4scmVmOmksZ2xvYmFsSWRGYWN0b3J5OnRoaXMuX2dsb2JhbElkRmFjdG9yeSxmb250Q2FjaGU6ci5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTpyLmJ1aWx0SW5DTWFwQ2FjaGUsc3RhbmRhcmRGb250RGF0YUNhY2hlOnIuc3RhbmRhcmRGb250RGF0YUNhY2hlLGdsb2JhbEltYWdlQ2FjaGU6ci5nbG9iYWxJbWFnZUNhY2hlLHN5c3RlbUZvbnRDYWNoZTpyLnN5c3RlbUZvbnRDYWNoZSxub25CbGVuZE1vZGVzU2V0OnIubm9uQmxlbmRNb2Rlc1NldCx4ZmFGYWN0b3J5OmF9KX0pKSx0aGlzLl9wYWdlUHJvbWlzZXMuc2V0KGUsaSksaX1hc3luYyBjaGVja0ZpcnN0UGFnZSgpe2lmKCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSkpdHJ5e2F3YWl0IHRoaXMuZ2V0UGFnZSgwKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgaS5YUmVmRW50cnlFeGNlcHRpb24pdGhyb3cgdGhpcy5fcGFnZVByb21pc2VzLmRlbGV0ZSgwKSxhd2FpdCB0aGlzLmNsZWFudXAoKSxuZXcgaS5YUmVmUGFyc2VFeGNlcHRpb259fWFzeW5jIGNoZWNrTGFzdFBhZ2UoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2NvbnN0e2NhdGFsb2c6dCxwZGZNYW5hZ2VyOnJ9PXRoaXM7bGV0IGE7dC5zZXRBY3R1YWxOdW1QYWdlcygpO3RyeXtpZihhd2FpdCBQcm9taXNlLmFsbChbci5lbnN1cmVEb2MoInhmYUZhY3RvcnkiKSxyLmVuc3VyZURvYygibGluZWFyaXphdGlvbiIpLHIuZW5zdXJlQ2F0YWxvZygibnVtUGFnZXMiKV0pLHRoaXMueGZhRmFjdG9yeSlyZXR1cm47aWYoYT10aGlzLmxpbmVhcml6YXRpb24/dGhpcy5saW5lYXJpemF0aW9uLm51bVBhZ2VzOnQubnVtUGFnZXMsIU51bWJlci5pc0ludGVnZXIoYSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlBhZ2UgY291bnQgaXMgbm90IGFuIGludGVnZXIuIik7aWYoYTw9MSlyZXR1cm47YXdhaXQgdGhpcy5nZXRQYWdlKGEtMSl9Y2F0Y2gocyl7aWYodGhpcy5fcGFnZVByb21pc2VzLmRlbGV0ZShhLTEpLGF3YWl0IHRoaXMuY2xlYW51cCgpLHMgaW5zdGFuY2VvZiBpLlhSZWZFbnRyeUV4Y2VwdGlvbiYmIWUpdGhyb3cgbmV3IGkuWFJlZlBhcnNlRXhjZXB0aW9uO2xldCBvOygwLG4ud2FybikoImNoZWNrTGFzdFBhZ2UgLSBpbnZhbGlkIC9QYWdlcyB0cmVlIC9Db3VudDogIi5jb25jYXQoYSwiLiIpKTt0cnl7bz1hd2FpdCB0LmdldEFsbFBhZ2VEaWN0cyhlKX1jYXRjaChyKXtpZihyIGluc3RhbmNlb2YgaS5YUmVmRW50cnlFeGNlcHRpb24mJiFlKXRocm93IG5ldyBpLlhSZWZQYXJzZUV4Y2VwdGlvbjtyZXR1cm4gdm9pZCB0LnNldEFjdHVhbE51bVBhZ2VzKDEpfWZvcihjb25zdFtlLFtuLGFdXW9mIG8pe2xldCBpO24gaW5zdGFuY2VvZiBFcnJvcj8oaT1Qcm9taXNlLnJlamVjdChuKSxpLmNhdGNoKCgoKT0+e30pKSk6aT1Qcm9taXNlLnJlc29sdmUobmV3IEYoe3BkZk1hbmFnZXI6cix4cmVmOnRoaXMueHJlZixwYWdlSW5kZXg6ZSxwYWdlRGljdDpuLHJlZjphLGdsb2JhbElkRmFjdG9yeTp0aGlzLl9nbG9iYWxJZEZhY3RvcnksZm9udENhY2hlOnQuZm9udENhY2hlLGJ1aWx0SW5DTWFwQ2FjaGU6dC5idWlsdEluQ01hcENhY2hlLHN0YW5kYXJkRm9udERhdGFDYWNoZTp0LnN0YW5kYXJkRm9udERhdGFDYWNoZSxnbG9iYWxJbWFnZUNhY2hlOnQuZ2xvYmFsSW1hZ2VDYWNoZSxzeXN0ZW1Gb250Q2FjaGU6dC5zeXN0ZW1Gb250Q2FjaGUsbm9uQmxlbmRNb2Rlc1NldDp0Lm5vbkJsZW5kTW9kZXNTZXQseGZhRmFjdG9yeTpudWxsfSkpLHRoaXMuX3BhZ2VQcm9taXNlcy5zZXQoZSxpKX10LnNldEFjdHVhbE51bVBhZ2VzKG8uc2l6ZSl9fWZvbnRGYWxsYmFjayhlLHQpe3JldHVybiB0aGlzLmNhdGFsb2cuZm9udEZhbGxiYWNrKGUsdCl9YXN5bmMgY2xlYW51cCgpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07cmV0dXJuIHRoaXMuY2F0YWxvZz90aGlzLmNhdGFsb2cuY2xlYW51cChlKTooMCxmLmNsZWFyR2xvYmFsQ2FjaGVzKSgpfV9jb2xsZWN0RmllbGRPYmplY3RzKGUsdCxyKXtjb25zdCBpPXRoaXMueHJlZi5mZXRjaElmUmVmKHQpO2lmKGkuaGFzKCJUIikpe2NvbnN0IHQ9KDAsbi5zdHJpbmdUb1BERlN0cmluZykoaS5nZXQoIlQiKSk7ZT0iIj09PWU/dDoiIi5jb25jYXQoZSwiLiIpLmNvbmNhdCh0KX1pZighaS5oYXMoIktpZHMiKSYmL1xbXGQrXF0kLy50ZXN0KGUpJiYoZT1lLnN1YnN0cmluZygwLGUubGFzdEluZGV4T2YoIlsiKSkpLHIuaGFzKGUpfHxyLnNldChlLFtdKSxyLmdldChlKS5wdXNoKGEuQW5ub3RhdGlvbkZhY3RvcnkuY3JlYXRlKHRoaXMueHJlZix0LHRoaXMucGRmTWFuYWdlcix0aGlzLl9sb2NhbElkRmFjdG9yeSwhMCkudGhlbigoZT0+bnVsbD09ZT92b2lkIDA6ZS5nZXRGaWVsZE9iamVjdCgpKSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3JldHVybigwLG4ud2FybikoJ19jb2xsZWN0RmllbGRPYmplY3RzOiAiJy5jb25jYXQoZSwnIi4nKSksbnVsbH0pKSksaS5oYXMoIktpZHMiKSl7Y29uc3QgdD1pLmdldCgiS2lkcyIpO2Zvcihjb25zdCBuIG9mIHQpdGhpcy5fY29sbGVjdEZpZWxkT2JqZWN0cyhlLG4scil9fWdldCBmaWVsZE9iamVjdHMoKXtpZighdGhpcy5mb3JtSW5mby5oYXNGaWVsZHMpcmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImZpZWxkT2JqZWN0cyIsUHJvbWlzZS5yZXNvbHZlKG51bGwpKTtjb25zdCBlPU9iamVjdC5jcmVhdGUobnVsbCksdD1uZXcgTWFwO2Zvcihjb25zdCBlIG9mIHRoaXMuY2F0YWxvZy5hY3JvRm9ybS5nZXQoIkZpZWxkcyIpKXRoaXMuX2NvbGxlY3RGaWVsZE9iamVjdHMoIiIsZSx0KTtjb25zdCByPVtdO2Zvcihjb25zdFtuLGFdb2YgdClyLnB1c2goUHJvbWlzZS5hbGwoYSkudGhlbigodD0+eyh0PXQuZmlsdGVyKChlPT4hIWUpKSkubGVuZ3RoPjAmJihlW25dPXQpfSkpKTtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiZmllbGRPYmplY3RzIixQcm9taXNlLmFsbChyKS50aGVuKCgoKT0+ZSkpKX1nZXQgaGFzSlNBY3Rpb25zKCl7Y29uc3QgZT10aGlzLnBkZk1hbmFnZXIuZW5zdXJlRG9jKCJfcGFyc2VIYXNKU0FjdGlvbnMiKTtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiaGFzSlNBY3Rpb25zIixlKX1hc3luYyBfcGFyc2VIYXNKU0FjdGlvbnMoKXtjb25zdFtlLHRdPWF3YWl0IFByb21pc2UuYWxsKFt0aGlzLnBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZygianNBY3Rpb25zIiksdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZURvYygiZmllbGRPYmplY3RzIildKTtyZXR1cm4hIWV8fCEhdCYmT2JqZWN0LnZhbHVlcyh0KS5zb21lKChlPT5lLnNvbWUoKGU9Pm51bGwhPT1lLmFjdGlvbnMpKSkpfWdldCBjYWxjdWxhdGlvbk9yZGVySWRzKCl7Y29uc3QgZT10aGlzLmNhdGFsb2cuYWNyb0Zvcm07aWYobnVsbD09ZXx8IWUuaGFzKCJDTyIpKXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJjYWxjdWxhdGlvbk9yZGVySWRzIixudWxsKTtjb25zdCB0PWUuZ2V0KCJDTyIpO2lmKCFBcnJheS5pc0FycmF5KHQpfHwwPT09dC5sZW5ndGgpcmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImNhbGN1bGF0aW9uT3JkZXJJZHMiLG51bGwpO2NvbnN0IHI9W107Zm9yKGNvbnN0IGUgb2YgdCllIGluc3RhbmNlb2YgYy5SZWYmJnIucHVzaChlLnRvU3RyaW5nKCkpO3JldHVybiAwPT09ci5sZW5ndGg/KDAsbi5zaGFkb3cpKHRoaXMsImNhbGN1bGF0aW9uT3JkZXJJZHMiLG51bGwpOigwLG4uc2hhZG93KSh0aGlzLCJjYWxjdWxhdGlvbk9yZGVySWRzIixyKX19fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuUG9wdXBBbm5vdGF0aW9uPXQuTWFya3VwQW5ub3RhdGlvbj10LkFubm90YXRpb25GYWN0b3J5PXQuQW5ub3RhdGlvbkJvcmRlclN0eWxlPXQuQW5ub3RhdGlvbj12b2lkIDAsdC5nZXRRdWFkUG9pbnRzPXYscigxMzkpLHIoODQpLHIoOTMpLHIoOTQpLHIoOTcpLHIoOTkpLHIoMTAxKSxyKDEwNSkscigxMDgpLHIoMTE1KSxyKDE1NykscigxNTkpO3ZhciBuPXIoMTQ0KSxhPXIoMTQ5KSxpPXIoMTYxKSxzPXIoMTUwKSxvPXIoMTU0KSxjPXIoMjE2KSxsPXIoMTUxKSxoPXIoMjEwKSx1PXIoMjIwKSxkPXIoMTYyKSxmPXIoMjIzKSxnPXIoMTc2KSxwPXIoMjI2KSxtPXIoMjE0KSxiPXIoMjI3KTtmdW5jdGlvbiB5KGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpuZXcgVWludDhDbGFtcGVkQXJyYXkoMyk7aWYoIUFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIHQ7Y29uc3Qgcj10fHxuZXcgVWludDhDbGFtcGVkQXJyYXkoMyk7c3dpdGNoKGUubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG51bGw7Y2FzZSAxOnJldHVybiBkLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5LmdldFJnYkl0ZW0oZSwwLHIsMCkscjtjYXNlIDM6cmV0dXJuIGQuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYi5nZXRSZ2JJdGVtKGUsMCxyLDApLHI7Y2FzZSA0OnJldHVybiBkLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5jbXlrLmdldFJnYkl0ZW0oZSwwLHIsMCkscjtkZWZhdWx0OnJldHVybiB0fX1mdW5jdGlvbiB3KGUpe3JldHVybiBBcnJheS5mcm9tKGUsKGU9PmUvMjU1KSl9ZnVuY3Rpb24gdihlLHQpe2NvbnN0IHI9ZS5nZXRBcnJheSgiUXVhZFBvaW50cyIpO2lmKCFBcnJheS5pc0FycmF5KHIpfHwwPT09ci5sZW5ndGh8fHIubGVuZ3RoJTg+MClyZXR1cm4gbnVsbDtjb25zdCBuPVtdO2ZvcihsZXQgZT0wLGE9ci5sZW5ndGgvODtlPGE7ZSsrKXtsZXQgYT0xLzAsaT0tMS8wLHM9MS8wLG89LTEvMDtmb3IobGV0IHQ9OCplLG49OCplKzg7dDxuO3QrPTIpe2NvbnN0IGU9clt0XSxuPXJbdCsxXTthPU1hdGgubWluKGUsYSksaT1NYXRoLm1heChlLGkpLHM9TWF0aC5taW4obixzKSxvPU1hdGgubWF4KG4sbyl9aWYobnVsbCE9PXQmJihhPHRbMF18fGk+dFsyXXx8czx0WzFdfHxvPnRbM10pKXJldHVybiBudWxsO24ucHVzaChbe3g6YSx5Om99LHt4OmkseTpvfSx7eDphLHk6c30se3g6aSx5OnN9XSl9cmV0dXJuIG59ZnVuY3Rpb24geChlLHQscil7Y29uc3RbYSxpLHMsb109bi5VdGlsLmdldEF4aWFsQWxpZ25lZEJvdW5kaW5nQm94KHQscik7aWYoYT09PXN8fGk9PT1vKXJldHVyblsxLDAsMCwxLGVbMF0sZVsxXV07Y29uc3QgYz0oZVsyXS1lWzBdKS8ocy1hKSxsPShlWzNdLWVbMV0pLyhvLWkpO3JldHVybltjLDAsMCxsLGVbMF0tYSpjLGVbMV0taSpsXX10LkFubm90YXRpb25GYWN0b3J5PWNsYXNze3N0YXRpYyBjcmVhdGUoZSx0LHIsbixhKXtyZXR1cm4gUHJvbWlzZS5hbGwoW3IuZW5zdXJlQ2F0YWxvZygiYWNyb0Zvcm0iKSxyLmVuc3VyZUNhdGFsb2coImJhc2VVcmwiKSxyLmVuc3VyZUNhdGFsb2coImF0dGFjaG1lbnRzIiksci5lbnN1cmVEb2MoInhmYURhdGFzZXRzIiksYT90aGlzLl9nZXRQYWdlSW5kZXgoZSx0LHIpOi0xXSkudGhlbigoaT0+e2xldFtzLG8sYyxsLGhdPWk7cmV0dXJuIHIuZW5zdXJlKHRoaXMsIl9jcmVhdGUiLFtlLHQscixuLHMsYyxsLGEsaF0pfSkpfXN0YXRpYyBfY3JlYXRlKGUsdCxyLGksbyl7bGV0IGM9YXJndW1lbnRzLmxlbmd0aD41JiZ2b2lkIDAhPT1hcmd1bWVudHNbNV0/YXJndW1lbnRzWzVdOm51bGwsbD1hcmd1bWVudHMubGVuZ3RoPjY/YXJndW1lbnRzWzZdOnZvaWQgMCxoPWFyZ3VtZW50cy5sZW5ndGg+Nz9hcmd1bWVudHNbN106dm9pZCAwLHU9YXJndW1lbnRzLmxlbmd0aD44JiZ2b2lkIDAhPT1hcmd1bWVudHNbOF0/YXJndW1lbnRzWzhdOi0xO2NvbnN0IGQ9ZS5mZXRjaElmUmVmKHQpO2lmKCEoZCBpbnN0YW5jZW9mIHMuRGljdCkpcmV0dXJuO2NvbnN0IGY9dCBpbnN0YW5jZW9mIHMuUmVmP3QudG9TdHJpbmcoKToiYW5ub3RfIi5jb25jYXQoaS5jcmVhdGVPYmpJZCgpKTtsZXQgZz1kLmdldCgiU3VidHlwZSIpO2c9ZyBpbnN0YW5jZW9mIHMuTmFtZT9nLm5hbWU6bnVsbDtjb25zdCBwPW8gaW5zdGFuY2VvZiBzLkRpY3Q/bzpzLkRpY3QuZW1wdHksbT17eHJlZjplLHJlZjp0LGRpY3Q6ZCxzdWJ0eXBlOmcsaWQ6ZixwZGZNYW5hZ2VyOnIsYWNyb0Zvcm06cCxhdHRhY2htZW50czpjLHhmYURhdGFzZXRzOmwsY29sbGVjdEZpZWxkczpoLG5lZWRBcHBlYXJhbmNlczohaCYmITA9PT1wLmdldCgiTmVlZEFwcGVhcmFuY2VzIikscGFnZUluZGV4OnUsZXZhbHVhdG9yT3B0aW9uczpyLmV2YWx1YXRvck9wdGlvbnN9O3N3aXRjaChnKXtjYXNlIkxpbmsiOnJldHVybiBuZXcgRShtKTtjYXNlIlRleHQiOnJldHVybiBuZXcgTShtKTtjYXNlIldpZGdldCI6bGV0IGU9KDAsYS5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7ZGljdDpkLGtleToiRlQifSk7c3dpdGNoKGU9ZSBpbnN0YW5jZW9mIHMuTmFtZT9lLm5hbWU6bnVsbCxlKXtjYXNlIlR4IjpyZXR1cm4gbmV3IE8obSk7Y2FzZSJCdG4iOnJldHVybiBuZXcgRihtKTtjYXNlIkNoIjpyZXR1cm4gbmV3IEkobSk7Y2FzZSJTaWciOnJldHVybiBuZXcgVChtKX1yZXR1cm4oMCxuLndhcm4pKCdVbmltcGxlbWVudGVkIHdpZGdldCBmaWVsZCB0eXBlICInLmNvbmNhdChlLCciLCBmYWxsaW5nIGJhY2sgdG8gYmFzZSBmaWVsZCB0eXBlLicpKSxuZXcgQyhtKTtjYXNlIlBvcHVwIjpyZXR1cm4gbmV3IFAobSk7Y2FzZSJGcmVlVGV4dCI6cmV0dXJuIG5ldyBSKG0pO2Nhc2UiTGluZSI6cmV0dXJuIG5ldyBOKG0pO2Nhc2UiU3F1YXJlIjpyZXR1cm4gbmV3IEQobSk7Y2FzZSJDaXJjbGUiOnJldHVybiBuZXcgQihtKTtjYXNlIlBvbHlMaW5lIjpyZXR1cm4gbmV3IEwobSk7Y2FzZSJQb2x5Z29uIjpyZXR1cm4gbmV3IF8obSk7Y2FzZSJDYXJldCI6cmV0dXJuIG5ldyBqKG0pO2Nhc2UiSW5rIjpyZXR1cm4gbmV3IFUobSk7Y2FzZSJIaWdobGlnaHQiOnJldHVybiBuZXcgJChtKTtjYXNlIlVuZGVybGluZSI6cmV0dXJuIG5ldyBYKG0pO2Nhc2UiU3F1aWdnbHkiOnJldHVybiBuZXcgSChtKTtjYXNlIlN0cmlrZU91dCI6cmV0dXJuIG5ldyBxKG0pO2Nhc2UiU3RhbXAiOnJldHVybiBuZXcgeihtKTtjYXNlIkZpbGVBdHRhY2htZW50IjpyZXR1cm4gbmV3IEcobSk7ZGVmYXVsdDpyZXR1cm4gaHx8KGc/KDAsbi53YXJuKSgnVW5pbXBsZW1lbnRlZCBhbm5vdGF0aW9uIHR5cGUgIicuY29uY2F0KGcsJyIsIGZhbGxpbmcgYmFjayB0byBiYXNlIGFubm90YXRpb24uJykpOigwLG4ud2FybikoIkFubm90YXRpb24gaXMgbWlzc2luZyB0aGUgcmVxdWlyZWQgL1N1YnR5cGUuIikpLG5ldyBTKG0pfX1zdGF0aWMgYXN5bmMgX2dldFBhZ2VJbmRleChlLHQscil7dHJ5e2NvbnN0IG49YXdhaXQgZS5mZXRjaElmUmVmQXN5bmModCk7aWYoIShuIGluc3RhbmNlb2Ygcy5EaWN0KSlyZXR1cm4tMTtjb25zdCBhPW4uZ2V0UmF3KCJQIik7cmV0dXJuIGEgaW5zdGFuY2VvZiBzLlJlZj9hd2FpdCByLmVuc3VyZUNhdGFsb2coImdldFBhZ2VJbmRleCIsW2FdKTotMX1jYXRjaChlKXtyZXR1cm4oMCxuLndhcm4pKCdfZ2V0UGFnZUluZGV4OiAiJy5jb25jYXQoZSwnIi4nKSksLTF9fXN0YXRpYyBnZW5lcmF0ZUltYWdlcyhlLHQscil7aWYoIXIpcmV0dXJuKDAsbi53YXJuKSgiZ2VuZXJhdGVJbWFnZXM6IE9mZnNjcmVlbkNhbnZhcyBpcyBub3Qgc3VwcG9ydGVkLCBjYW5ub3Qgc2F2ZSBvciBwcmludCBzb21lIGFubm90YXRpb25zIHdpdGggaW1hZ2VzLiIpLG51bGw7bGV0IGE7Zm9yKGNvbnN0e2JpdG1hcElkOnIsYml0bWFwOm59b2YgZSluJiYoYXx8KGE9bmV3IE1hcCksYS5zZXQocix6LmNyZWF0ZUltYWdlKG4sdCkpKTtyZXR1cm4gYX1zdGF0aWMgYXN5bmMgc2F2ZU5ld0Fubm90YXRpb25zKGUsdCxyLGEpe2NvbnN0IGk9ZS54cmVmO2xldCBvO2NvbnN0IGw9W10saD1bXSx7aXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ6dX09ZS5vcHRpb25zO2Zvcihjb25zdCBkIG9mIHIpaWYoIWQuZGVsZXRlZClzd2l0Y2goZC5hbm5vdGF0aW9uVHlwZSl7Y2FzZSBuLkFubm90YXRpb25FZGl0b3JUeXBlLkZSRUVURVhUOmlmKCFvKXtjb25zdCBlPW5ldyBzLkRpY3QoaSk7ZS5zZXQoIkJhc2VGb250IixzLk5hbWUuZ2V0KCJIZWx2ZXRpY2EiKSksZS5zZXQoIlR5cGUiLHMuTmFtZS5nZXQoIkZvbnQiKSksZS5zZXQoIlN1YnR5cGUiLHMuTmFtZS5nZXQoIlR5cGUxIikpLGUuc2V0KCJFbmNvZGluZyIscy5OYW1lLmdldCgiV2luQW5zaUVuY29kaW5nIikpO2NvbnN0IHQ9W107bz1pLmdldE5ld1RlbXBvcmFyeVJlZigpLGF3YWl0KDAsYy53cml0ZU9iamVjdCkobyxlLHQsbnVsbCksbC5wdXNoKHtyZWY6byxkYXRhOnQuam9pbigiIil9KX1oLnB1c2goUi5jcmVhdGVOZXdBbm5vdGF0aW9uKGksZCxsLHtldmFsdWF0b3I6ZSx0YXNrOnQsYmFzZUZvbnRSZWY6b30pKTticmVhaztjYXNlIG4uQW5ub3RhdGlvbkVkaXRvclR5cGUuSU5LOmgucHVzaChVLmNyZWF0ZU5ld0Fubm90YXRpb24oaSxkLGwpKTticmVhaztjYXNlIG4uQW5ub3RhdGlvbkVkaXRvclR5cGUuU1RBTVA6aWYoIXUpYnJlYWs7Y29uc3Qgcj1hd2FpdCBhLmdldChkLmJpdG1hcElkKTtpZihyLmltYWdlU3RyZWFtKXtjb25zdHtpbWFnZVN0cmVhbTplLHNtYXNrU3RyZWFtOnR9PXIsbj1bXTtpZih0KXtjb25zdCByPWkuZ2V0TmV3VGVtcG9yYXJ5UmVmKCk7YXdhaXQoMCxjLndyaXRlT2JqZWN0KShyLHQsbixudWxsKSxsLnB1c2goe3JlZjpyLGRhdGE6bi5qb2luKCIiKX0pLGUuZGljdC5zZXQoIlNNYXNrIixyKSxuLmxlbmd0aD0wfWNvbnN0IGE9ci5pbWFnZVJlZj1pLmdldE5ld1RlbXBvcmFyeVJlZigpO2F3YWl0KDAsYy53cml0ZU9iamVjdCkoYSxlLG4sbnVsbCksbC5wdXNoKHtyZWY6YSxkYXRhOm4uam9pbigiIil9KSxyLmltYWdlU3RyZWFtPXIuc21hc2tTdHJlYW09bnVsbH1oLnB1c2goei5jcmVhdGVOZXdBbm5vdGF0aW9uKGksZCxsLHtpbWFnZTpyfSkpfXJldHVybnthbm5vdGF0aW9uczphd2FpdCBQcm9taXNlLmFsbChoKSxkZXBlbmRlbmNpZXM6bH19c3RhdGljIGFzeW5jIHByaW50TmV3QW5ub3RhdGlvbnMoZSx0LHIsYSl7aWYoIXIpcmV0dXJuIG51bGw7Y29uc3R7b3B0aW9uczppLHhyZWY6c309ZSxvPVtdO2Zvcihjb25zdCBjIG9mIHIpaWYoIWMuZGVsZXRlZClzd2l0Y2goYy5hbm5vdGF0aW9uVHlwZSl7Y2FzZSBuLkFubm90YXRpb25FZGl0b3JUeXBlLkZSRUVURVhUOm8ucHVzaChSLmNyZWF0ZU5ld1ByaW50QW5ub3RhdGlvbihzLGMse2V2YWx1YXRvcjplLHRhc2s6dCxldmFsdWF0b3JPcHRpb25zOml9KSk7YnJlYWs7Y2FzZSBuLkFubm90YXRpb25FZGl0b3JUeXBlLklOSzpvLnB1c2goVS5jcmVhdGVOZXdQcmludEFubm90YXRpb24ocyxjLHtldmFsdWF0b3JPcHRpb25zOml9KSk7YnJlYWs7Y2FzZSBuLkFubm90YXRpb25FZGl0b3JUeXBlLlNUQU1QOmlmKCFpLmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKWJyZWFrO2NvbnN0IHI9YXdhaXQgYS5nZXQoYy5iaXRtYXBJZCk7aWYoci5pbWFnZVN0cmVhbSl7Y29uc3R7aW1hZ2VTdHJlYW06ZSxzbWFza1N0cmVhbTp0fT1yO3QmJmUuZGljdC5zZXQoIlNNYXNrIix0KSxyLmltYWdlUmVmPW5ldyBnLkpwZWdTdHJlYW0oZSxlLmxlbmd0aCksci5pbWFnZVN0cmVhbT1yLnNtYXNrU3RyZWFtPW51bGx9by5wdXNoKHouY3JlYXRlTmV3UHJpbnRBbm5vdGF0aW9uKHMsYyx7aW1hZ2U6cixldmFsdWF0b3JPcHRpb25zOml9KSl9cmV0dXJuIFByb21pc2UuYWxsKG8pfX07Y2xhc3MgU3tjb25zdHJ1Y3RvcihlKXtjb25zdHtkaWN0OnQseHJlZjpyfT1lO3RoaXMuc2V0VGl0bGUodC5nZXQoIlQiKSksdGhpcy5zZXRDb250ZW50cyh0LmdldCgiQ29udGVudHMiKSksdGhpcy5zZXRNb2RpZmljYXRpb25EYXRlKHQuZ2V0KCJNIikpLHRoaXMuc2V0RmxhZ3ModC5nZXQoIkYiKSksdGhpcy5zZXRSZWN0YW5nbGUodC5nZXRBcnJheSgiUmVjdCIpKSx0aGlzLnNldENvbG9yKHQuZ2V0QXJyYXkoIkMiKSksdGhpcy5zZXRCb3JkZXJTdHlsZSh0KSx0aGlzLnNldEFwcGVhcmFuY2UodCksdGhpcy5zZXRPcHRpb25hbENvbnRlbnQodCk7Y29uc3QgaT10LmdldCgiTUsiKTt0aGlzLnNldEJvcmRlckFuZEJhY2tncm91bmRDb2xvcnMoaSksdGhpcy5zZXRSb3RhdGlvbihpLHQpLHRoaXMucmVmPWUucmVmIGluc3RhbmNlb2Ygcy5SZWY/ZS5yZWY6bnVsbCx0aGlzLl9zdHJlYW1zPVtdLHRoaXMuYXBwZWFyYW5jZSYmdGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMuYXBwZWFyYW5jZSk7Y29uc3Qgbz0hISh0aGlzLmZsYWdzJm4uQW5ub3RhdGlvbkZsYWcuTE9DS0VEKSxjPSEhKHRoaXMuZmxhZ3Mmbi5Bbm5vdGF0aW9uRmxhZy5MT0NLRURDT05URU5UUyk7aWYodGhpcy5kYXRhPXthbm5vdGF0aW9uRmxhZ3M6dGhpcy5mbGFncyxib3JkZXJTdHlsZTp0aGlzLmJvcmRlclN0eWxlLGNvbG9yOnRoaXMuY29sb3IsYmFja2dyb3VuZENvbG9yOnRoaXMuYmFja2dyb3VuZENvbG9yLGJvcmRlckNvbG9yOnRoaXMuYm9yZGVyQ29sb3Iscm90YXRpb246dGhpcy5yb3RhdGlvbixjb250ZW50c09iajp0aGlzLl9jb250ZW50cyxoYXNBcHBlYXJhbmNlOiEhdGhpcy5hcHBlYXJhbmNlLGlkOmUuaWQsbW9kaWZpY2F0aW9uRGF0ZTp0aGlzLm1vZGlmaWNhdGlvbkRhdGUscmVjdDp0aGlzLnJlY3RhbmdsZSxzdWJ0eXBlOmUuc3VidHlwZSxoYXNPd25DYW52YXM6ITEsbm9Sb3RhdGU6ISEodGhpcy5mbGFncyZuLkFubm90YXRpb25GbGFnLk5PUk9UQVRFKSxub0hUTUw6byYmY30sZS5jb2xsZWN0RmllbGRzKXtjb25zdCBpPXQuZ2V0KCJLaWRzIik7aWYoQXJyYXkuaXNBcnJheShpKSl7Y29uc3QgZT1bXTtmb3IoY29uc3QgdCBvZiBpKXQgaW5zdGFuY2VvZiBzLlJlZiYmZS5wdXNoKHQudG9TdHJpbmcoKSk7MCE9PWUubGVuZ3RoJiYodGhpcy5kYXRhLmtpZElkcz1lKX10aGlzLmRhdGEuYWN0aW9ucz0oMCxhLmNvbGxlY3RBY3Rpb25zKShyLHQsbi5Bbm5vdGF0aW9uQWN0aW9uRXZlbnRUeXBlKSx0aGlzLmRhdGEuZmllbGROYW1lPXRoaXMuX2NvbnN0cnVjdEZpZWxkTmFtZSh0KSx0aGlzLmRhdGEucGFnZUluZGV4PWUucGFnZUluZGV4fXRoaXMuX2lzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkPWUuZXZhbHVhdG9yT3B0aW9ucy5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCx0aGlzLl9mYWxsYmFja0ZvbnREaWN0PW51bGwsdGhpcy5fbmVlZEFwcGVhcmFuY2VzPSExfV9oYXNGbGFnKGUsdCl7cmV0dXJuISEoZSZ0KX1faXNWaWV3YWJsZShlKXtyZXR1cm4hdGhpcy5faGFzRmxhZyhlLG4uQW5ub3RhdGlvbkZsYWcuSU5WSVNJQkxFKSYmIXRoaXMuX2hhc0ZsYWcoZSxuLkFubm90YXRpb25GbGFnLk5PVklFVyl9X2lzUHJpbnRhYmxlKGUpe3JldHVybiB0aGlzLl9oYXNGbGFnKGUsbi5Bbm5vdGF0aW9uRmxhZy5QUklOVCkmJiF0aGlzLl9oYXNGbGFnKGUsbi5Bbm5vdGF0aW9uRmxhZy5JTlZJU0lCTEUpfW11c3RCZVZpZXdlZChlKXt2YXIgdDtjb25zdCByPW51bGw9PWV8fG51bGw9PT0odD1lLmdldCh0aGlzLmRhdGEuaWQpKXx8dm9pZCAwPT09dD92b2lkIDA6dC5oaWRkZW47cmV0dXJuIHZvaWQgMCE9PXI/IXI6dGhpcy52aWV3YWJsZSYmIXRoaXMuX2hhc0ZsYWcodGhpcy5mbGFncyxuLkFubm90YXRpb25GbGFnLkhJRERFTil9bXVzdEJlUHJpbnRlZChlKXt2YXIgdDtjb25zdCByPW51bGw9PWV8fG51bGw9PT0odD1lLmdldCh0aGlzLmRhdGEuaWQpKXx8dm9pZCAwPT09dD92b2lkIDA6dC5wcmludDtyZXR1cm4gdm9pZCAwIT09cj9yOnRoaXMucHJpbnRhYmxlfWdldCB2aWV3YWJsZSgpe3JldHVybiBudWxsIT09dGhpcy5kYXRhLnF1YWRQb2ludHMmJigwPT09dGhpcy5mbGFnc3x8dGhpcy5faXNWaWV3YWJsZSh0aGlzLmZsYWdzKSl9Z2V0IHByaW50YWJsZSgpe3JldHVybiBudWxsIT09dGhpcy5kYXRhLnF1YWRQb2ludHMmJjAhPT10aGlzLmZsYWdzJiZ0aGlzLl9pc1ByaW50YWJsZSh0aGlzLmZsYWdzKX1fcGFyc2VTdHJpbmdIZWxwZXIoZSl7Y29uc3QgdD0ic3RyaW5nIj09dHlwZW9mIGU/KDAsbi5zdHJpbmdUb1BERlN0cmluZykoZSk6IiI7cmV0dXJue3N0cjp0LGRpcjp0JiYicnRsIj09PSgwLGguYmlkaSkodCkuZGlyPyJydGwiOiJsdHIifX1zZXREZWZhdWx0QXBwZWFyYW5jZShlKXtjb25zdCB0PSgwLGEuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6ZS5kaWN0LGtleToiREEifSl8fGUuYWNyb0Zvcm0uZ2V0KCJEQSIpO3RoaXMuX2RlZmF1bHRBcHBlYXJhbmNlPSJzdHJpbmciPT10eXBlb2YgdD90OiIiLHRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGE9KDAsaS5wYXJzZURlZmF1bHRBcHBlYXJhbmNlKSh0aGlzLl9kZWZhdWx0QXBwZWFyYW5jZSl9c2V0VGl0bGUoZSl7dGhpcy5fdGl0bGU9dGhpcy5fcGFyc2VTdHJpbmdIZWxwZXIoZSl9c2V0Q29udGVudHMoZSl7dGhpcy5fY29udGVudHM9dGhpcy5fcGFyc2VTdHJpbmdIZWxwZXIoZSl9c2V0TW9kaWZpY2F0aW9uRGF0ZShlKXt0aGlzLm1vZGlmaWNhdGlvbkRhdGU9InN0cmluZyI9PXR5cGVvZiBlP2U6bnVsbH1zZXRGbGFncyhlKXt0aGlzLmZsYWdzPU51bWJlci5pc0ludGVnZXIoZSkmJmU+MD9lOjB9aGFzRmxhZyhlKXtyZXR1cm4gdGhpcy5faGFzRmxhZyh0aGlzLmZsYWdzLGUpfXNldFJlY3RhbmdsZShlKXt0aGlzLnJlY3RhbmdsZT1BcnJheS5pc0FycmF5KGUpJiY0PT09ZS5sZW5ndGg/bi5VdGlsLm5vcm1hbGl6ZVJlY3QoZSk6WzAsMCwwLDBdfXNldENvbG9yKGUpe3RoaXMuY29sb3I9eShlKX1zZXRMaW5lRW5kaW5ncyhlKXtpZih0aGlzLmxpbmVFbmRpbmdzPVsiTm9uZSIsIk5vbmUiXSxBcnJheS5pc0FycmF5KGUpJiYyPT09ZS5sZW5ndGgpZm9yKGxldCB0PTA7dDwyO3QrKyl7Y29uc3Qgcj1lW3RdO2lmKHIgaW5zdGFuY2VvZiBzLk5hbWUpc3dpdGNoKHIubmFtZSl7Y2FzZSJOb25lIjpjb250aW51ZTtjYXNlIlNxdWFyZSI6Y2FzZSJDaXJjbGUiOmNhc2UiRGlhbW9uZCI6Y2FzZSJPcGVuQXJyb3ciOmNhc2UiQ2xvc2VkQXJyb3ciOmNhc2UiQnV0dCI6Y2FzZSJST3BlbkFycm93IjpjYXNlIlJDbG9zZWRBcnJvdyI6Y2FzZSJTbGFzaCI6dGhpcy5saW5lRW5kaW5nc1t0XT1yLm5hbWU7Y29udGludWV9KDAsbi53YXJuKSgiSWdub3JpbmcgaW52YWxpZCBsaW5lRW5kaW5nOiAiLmNvbmNhdChyKSl9fXNldFJvdGF0aW9uKGUsdCl7dGhpcy5yb3RhdGlvbj0wO2xldCByPWUgaW5zdGFuY2VvZiBzLkRpY3Q/ZS5nZXQoIlIiKXx8MDp0LmdldCgiUm90YXRlIil8fDA7TnVtYmVyLmlzSW50ZWdlcihyKSYmMCE9PXImJihyJT0zNjAscjwwJiYocis9MzYwKSxyJTkwPT0wJiYodGhpcy5yb3RhdGlvbj1yKSl9c2V0Qm9yZGVyQW5kQmFja2dyb3VuZENvbG9ycyhlKXtlIGluc3RhbmNlb2Ygcy5EaWN0Pyh0aGlzLmJvcmRlckNvbG9yPXkoZS5nZXRBcnJheSgiQkMiKSxudWxsKSx0aGlzLmJhY2tncm91bmRDb2xvcj15KGUuZ2V0QXJyYXkoIkJHIiksbnVsbCkpOnRoaXMuYm9yZGVyQ29sb3I9dGhpcy5iYWNrZ3JvdW5kQ29sb3I9bnVsbH1zZXRCb3JkZXJTdHlsZShlKXtpZih0aGlzLmJvcmRlclN0eWxlPW5ldyBBLGUgaW5zdGFuY2VvZiBzLkRpY3QpaWYoZS5oYXMoIkJTIikpe2NvbnN0IHQ9ZS5nZXQoIkJTIikscj10LmdldCgiVHlwZSIpO3ImJiEoMCxzLmlzTmFtZSkociwiQm9yZGVyIil8fCh0aGlzLmJvcmRlclN0eWxlLnNldFdpZHRoKHQuZ2V0KCJXIiksdGhpcy5yZWN0YW5nbGUpLHRoaXMuYm9yZGVyU3R5bGUuc2V0U3R5bGUodC5nZXQoIlMiKSksdGhpcy5ib3JkZXJTdHlsZS5zZXREYXNoQXJyYXkodC5nZXRBcnJheSgiRCIpKSl9ZWxzZSBpZihlLmhhcygiQm9yZGVyIikpe2NvbnN0IHQ9ZS5nZXRBcnJheSgiQm9yZGVyIik7QXJyYXkuaXNBcnJheSh0KSYmdC5sZW5ndGg+PTMmJih0aGlzLmJvcmRlclN0eWxlLnNldEhvcml6b250YWxDb3JuZXJSYWRpdXModFswXSksdGhpcy5ib3JkZXJTdHlsZS5zZXRWZXJ0aWNhbENvcm5lclJhZGl1cyh0WzFdKSx0aGlzLmJvcmRlclN0eWxlLnNldFdpZHRoKHRbMl0sdGhpcy5yZWN0YW5nbGUpLDQ9PT10Lmxlbmd0aCYmdGhpcy5ib3JkZXJTdHlsZS5zZXREYXNoQXJyYXkodFszXSwhMCkpfWVsc2UgdGhpcy5ib3JkZXJTdHlsZS5zZXRXaWR0aCgwKX1zZXRBcHBlYXJhbmNlKGUpe3RoaXMuYXBwZWFyYW5jZT1udWxsO2NvbnN0IHQ9ZS5nZXQoIkFQIik7aWYoISh0IGluc3RhbmNlb2Ygcy5EaWN0KSlyZXR1cm47Y29uc3Qgcj10LmdldCgiTiIpO2lmKHIgaW5zdGFuY2VvZiBsLkJhc2VTdHJlYW0pcmV0dXJuIHZvaWQodGhpcy5hcHBlYXJhbmNlPXIpO2lmKCEociBpbnN0YW5jZW9mIHMuRGljdCkpcmV0dXJuO2NvbnN0IG49ZS5nZXQoIkFTIik7aWYoIShuIGluc3RhbmNlb2Ygcy5OYW1lJiZyLmhhcyhuLm5hbWUpKSlyZXR1cm47Y29uc3QgYT1yLmdldChuLm5hbWUpO2EgaW5zdGFuY2VvZiBsLkJhc2VTdHJlYW0mJih0aGlzLmFwcGVhcmFuY2U9YSl9c2V0T3B0aW9uYWxDb250ZW50KGUpe3RoaXMub2M9bnVsbDtjb25zdCB0PWUuZ2V0KCJPQyIpO3QgaW5zdGFuY2VvZiBzLk5hbWU/KDAsbi53YXJuKSgic2V0T3B0aW9uYWxDb250ZW50OiBTdXBwb3J0IGZvciAvTmFtZS1lbnRyeSBpcyBub3QgaW1wbGVtZW50ZWQuIik6dCBpbnN0YW5jZW9mIHMuRGljdCYmKHRoaXMub2M9dCl9bG9hZFJlc291cmNlcyhlLHQpe3JldHVybiB0LmRpY3QuZ2V0QXN5bmMoIlJlc291cmNlcyIpLnRoZW4oKHQ9PntpZih0KXJldHVybiBuZXcgcC5PYmplY3RMb2FkZXIodCxlLHQueHJlZikubG9hZCgpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIHR9KSl9KSl9YXN5bmMgZ2V0T3BlcmF0b3JMaXN0KGUsdCxyLGEsaSl7Y29uc3QgYz10aGlzLmRhdGE7bGV0IGw9dGhpcy5hcHBlYXJhbmNlO2NvbnN0IGg9ISEodGhpcy5kYXRhLmhhc093bkNhbnZhcyYmciZuLlJlbmRlcmluZ0ludGVudEZsYWcuRElTUExBWSk7aWYoIWwpe2lmKCFoKXJldHVybntvcExpc3Q6bmV3IG0uT3BlcmF0b3JMaXN0LHNlcGFyYXRlRm9ybTohMSxzZXBhcmF0ZUNhbnZhczohMX07bD1uZXcgby5TdHJpbmdTdHJlYW0oIiIpLGwuZGljdD1uZXcgcy5EaWN0fWNvbnN0IHU9bC5kaWN0LGQ9YXdhaXQgdGhpcy5sb2FkUmVzb3VyY2VzKFsiRXh0R1N0YXRlIiwiQ29sb3JTcGFjZSIsIlBhdHRlcm4iLCJTaGFkaW5nIiwiWE9iamVjdCIsIkZvbnQiXSxsKSxmPXUuZ2V0QXJyYXkoIkJCb3giKXx8WzAsMCwxLDFdLGc9dS5nZXRBcnJheSgiTWF0cml4Iil8fFsxLDAsMCwxLDAsMF0scD14KGMucmVjdCxmLGcpLGI9bmV3IG0uT3BlcmF0b3JMaXN0O2xldCB5O3JldHVybiB0aGlzLm9jJiYoeT1hd2FpdCBlLnBhcnNlTWFya2VkQ29udGVudFByb3BzKHRoaXMub2MsbnVsbCkpLHZvaWQgMCE9PXkmJmIuYWRkT3Aobi5PUFMuYmVnaW5NYXJrZWRDb250ZW50UHJvcHMsWyJPQyIseV0pLGIuYWRkT3Aobi5PUFMuYmVnaW5Bbm5vdGF0aW9uLFtjLmlkLGMucmVjdCxwLGcsaF0pLGF3YWl0IGUuZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06bCx0YXNrOnQscmVzb3VyY2VzOmQsb3BlcmF0b3JMaXN0OmIsZmFsbGJhY2tGb250RGljdDp0aGlzLl9mYWxsYmFja0ZvbnREaWN0fSksYi5hZGRPcChuLk9QUy5lbmRBbm5vdGF0aW9uLFtdKSx2b2lkIDAhPT15JiZiLmFkZE9wKG4uT1BTLmVuZE1hcmtlZENvbnRlbnQsW10pLHRoaXMucmVzZXQoKSx7b3BMaXN0OmIsc2VwYXJhdGVGb3JtOiExLHNlcGFyYXRlQ2FudmFzOmh9fWFzeW5jIHNhdmUoZSx0LHIpe3JldHVybiBudWxsfWdldCBoYXNUZXh0Q29udGVudCgpe3JldHVybiExfWFzeW5jIGV4dHJhY3RUZXh0Q29udGVudChlLHQscil7aWYoIXRoaXMuYXBwZWFyYW5jZSlyZXR1cm47Y29uc3QgYT1hd2FpdCB0aGlzLmxvYWRSZXNvdXJjZXMoWyJFeHRHU3RhdGUiLCJGb250IiwiUHJvcGVydGllcyIsIlhPYmplY3QiXSx0aGlzLmFwcGVhcmFuY2UpLGk9W10scz1bXTtsZXQgbz1udWxsO2NvbnN0IGM9e2Rlc2lyZWRTaXplOk1hdGguSW5maW5pdHkscmVhZHk6ITAsZW5xdWV1ZShlLHQpe2Zvcihjb25zdCB0IG9mIGUuaXRlbXMpdm9pZCAwIT09dC5zdHImJihvfHwobz10LnRyYW5zZm9ybS5zbGljZSgtMikpLHMucHVzaCh0LnN0ciksdC5oYXNFT0wmJihpLnB1c2gocy5qb2luKCIiKSkscy5sZW5ndGg9MCkpfX07aWYoYXdhaXQgZS5nZXRUZXh0Q29udGVudCh7c3RyZWFtOnRoaXMuYXBwZWFyYW5jZSx0YXNrOnQscmVzb3VyY2VzOmEsaW5jbHVkZU1hcmtlZENvbnRlbnQ6ITAsc2luazpjLHZpZXdCb3g6cn0pLHRoaXMucmVzZXQoKSxzLmxlbmd0aCYmaS5wdXNoKHMuam9pbigiIikpLGkubGVuZ3RoPjF8fGlbMF0pe2NvbnN0IGU9dGhpcy5hcHBlYXJhbmNlLmRpY3QsdD1lLmdldEFycmF5KCJCQm94Iil8fFswLDAsMSwxXSxyPWUuZ2V0QXJyYXkoIk1hdHJpeCIpfHxbMSwwLDAsMSwwLDBdLGE9dGhpcy5kYXRhLnJlY3Qscz14KGEsdCxyKTtzWzRdLT1hWzBdLHNbNV0tPWFbMV0sbz1uLlV0aWwuYXBwbHlUcmFuc2Zvcm0obyxzKSxvPW4uVXRpbC5hcHBseVRyYW5zZm9ybShvLHIpLHRoaXMuZGF0YS50ZXh0UG9zaXRpb249byx0aGlzLmRhdGEudGV4dENvbnRlbnQ9aX19Z2V0RmllbGRPYmplY3QoKXtyZXR1cm4gdGhpcy5kYXRhLmtpZElkcz97aWQ6dGhpcy5kYXRhLmlkLGFjdGlvbnM6dGhpcy5kYXRhLmFjdGlvbnMsbmFtZTp0aGlzLmRhdGEuZmllbGROYW1lLHN0cm9rZUNvbG9yOnRoaXMuZGF0YS5ib3JkZXJDb2xvcixmaWxsQ29sb3I6dGhpcy5kYXRhLmJhY2tncm91bmRDb2xvcix0eXBlOiIiLGtpZElkczp0aGlzLmRhdGEua2lkSWRzLHBhZ2U6dGhpcy5kYXRhLnBhZ2VJbmRleCxyb3RhdGlvbjp0aGlzLnJvdGF0aW9ufTpudWxsfXJlc2V0KCl7Zm9yKGNvbnN0IGUgb2YgdGhpcy5fc3RyZWFtcyllLnJlc2V0KCl9X2NvbnN0cnVjdEZpZWxkTmFtZShlKXtpZighZS5oYXMoIlQiKSYmIWUuaGFzKCJQYXJlbnQiKSlyZXR1cm4oMCxuLndhcm4pKCJVbmtub3duIGZpZWxkIG5hbWUsIGZhbGxpbmcgYmFjayB0byBlbXB0eSBmaWVsZCBuYW1lLiIpLCIiO2lmKCFlLmhhcygiUGFyZW50IikpcmV0dXJuKDAsbi5zdHJpbmdUb1BERlN0cmluZykoZS5nZXQoIlQiKSk7Y29uc3QgdD1bXTtlLmhhcygiVCIpJiZ0LnVuc2hpZnQoKDAsbi5zdHJpbmdUb1BERlN0cmluZykoZS5nZXQoIlQiKSkpO2xldCByPWU7Y29uc3QgYT1uZXcgcy5SZWZTZXQ7Zm9yKGUub2JqSWQmJmEucHV0KGUub2JqSWQpO3IuaGFzKCJQYXJlbnQiKSYmKHI9ci5nZXQoIlBhcmVudCIpLHIgaW5zdGFuY2VvZiBzLkRpY3QmJighci5vYmpJZHx8IWEuaGFzKHIub2JqSWQpKSk7KWlmKHIub2JqSWQmJmEucHV0KHIub2JqSWQpLHIuaGFzKCJUIikpe2NvbnN0IGU9KDAsbi5zdHJpbmdUb1BERlN0cmluZykoci5nZXQoIlQiKSk7ZS5zdGFydHNXaXRoKCIjIil8fHQudW5zaGlmdChlKX1yZXR1cm4gdC5qb2luKCIuIil9fXQuQW5ub3RhdGlvbj1TO2NsYXNzIEF7Y29uc3RydWN0b3IoKXt0aGlzLndpZHRoPTEsdGhpcy5zdHlsZT1uLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuU09MSUQsdGhpcy5kYXNoQXJyYXk9WzNdLHRoaXMuaG9yaXpvbnRhbENvcm5lclJhZGl1cz0wLHRoaXMudmVydGljYWxDb3JuZXJSYWRpdXM9MH1zZXRXaWR0aChlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06WzAsMCwwLDBdO2lmKGUgaW5zdGFuY2VvZiBzLk5hbWUpdGhpcy53aWR0aD0wO2Vsc2UgaWYoIm51bWJlciI9PXR5cGVvZiBlKXtpZihlPjApe2NvbnN0IHI9KHRbMl0tdFswXSkvMixhPSh0WzNdLXRbMV0pLzI7cj4wJiZhPjAmJihlPnJ8fGU+YSkmJigoMCxuLndhcm4pKCJBbm5vdGF0aW9uQm9yZGVyU3R5bGUuc2V0V2lkdGggLSBpZ25vcmluZyB3aWR0aDogIi5jb25jYXQoZSkpLGU9MSl9dGhpcy53aWR0aD1lfX1zZXRTdHlsZShlKXtpZihlIGluc3RhbmNlb2Ygcy5OYW1lKXN3aXRjaChlLm5hbWUpe2Nhc2UiUyI6dGhpcy5zdHlsZT1uLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuU09MSUQ7YnJlYWs7Y2FzZSJEIjp0aGlzLnN0eWxlPW4uQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5EQVNIRUQ7YnJlYWs7Y2FzZSJCIjp0aGlzLnN0eWxlPW4uQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5CRVZFTEVEO2JyZWFrO2Nhc2UiSSI6dGhpcy5zdHlsZT1uLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuSU5TRVQ7YnJlYWs7Y2FzZSJVIjp0aGlzLnN0eWxlPW4uQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5VTkRFUkxJTkV9fXNldERhc2hBcnJheShlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2lmKEFycmF5LmlzQXJyYXkoZSkmJmUubGVuZ3RoPjApe2xldCByPSEwLG49ITA7Zm9yKGNvbnN0IHQgb2YgZSl7aWYoISgrdD49MCkpe3I9ITE7YnJlYWt9dD4wJiYobj0hMSl9ciYmIW4/KHRoaXMuZGFzaEFycmF5PWUsdCYmdGhpcy5zZXRTdHlsZShzLk5hbWUuZ2V0KCJEIikpKTp0aGlzLndpZHRoPTB9ZWxzZSBlJiYodGhpcy53aWR0aD0wKX1zZXRIb3Jpem9udGFsQ29ybmVyUmFkaXVzKGUpe051bWJlci5pc0ludGVnZXIoZSkmJih0aGlzLmhvcml6b250YWxDb3JuZXJSYWRpdXM9ZSl9c2V0VmVydGljYWxDb3JuZXJSYWRpdXMoZSl7TnVtYmVyLmlzSW50ZWdlcihlKSYmKHRoaXMudmVydGljYWxDb3JuZXJSYWRpdXM9ZSl9fXQuQW5ub3RhdGlvbkJvcmRlclN0eWxlPUE7Y2xhc3MgayBleHRlbmRzIFN7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7Y29uc3R7ZGljdDp0fT1lO2lmKHQuaGFzKCJJUlQiKSl7Y29uc3QgZT10LmdldFJhdygiSVJUIik7dGhpcy5kYXRhLmluUmVwbHlUbz1lIGluc3RhbmNlb2Ygcy5SZWY/ZS50b1N0cmluZygpOm51bGw7Y29uc3Qgcj10LmdldCgiUlQiKTt0aGlzLmRhdGEucmVwbHlUeXBlPXIgaW5zdGFuY2VvZiBzLk5hbWU/ci5uYW1lOm4uQW5ub3RhdGlvblJlcGx5VHlwZS5SRVBMWX1sZXQgcj1udWxsO2lmKHRoaXMuZGF0YS5yZXBseVR5cGU9PT1uLkFubm90YXRpb25SZXBseVR5cGUuR1JPVVApe2NvbnN0IGU9dC5nZXQoIklSVCIpO3RoaXMuc2V0VGl0bGUoZS5nZXQoIlQiKSksdGhpcy5kYXRhLnRpdGxlT2JqPXRoaXMuX3RpdGxlLHRoaXMuc2V0Q29udGVudHMoZS5nZXQoIkNvbnRlbnRzIikpLHRoaXMuZGF0YS5jb250ZW50c09iaj10aGlzLl9jb250ZW50cyxlLmhhcygiQ3JlYXRpb25EYXRlIik/KHRoaXMuc2V0Q3JlYXRpb25EYXRlKGUuZ2V0KCJDcmVhdGlvbkRhdGUiKSksdGhpcy5kYXRhLmNyZWF0aW9uRGF0ZT10aGlzLmNyZWF0aW9uRGF0ZSk6dGhpcy5kYXRhLmNyZWF0aW9uRGF0ZT1udWxsLGUuaGFzKCJNIik/KHRoaXMuc2V0TW9kaWZpY2F0aW9uRGF0ZShlLmdldCgiTSIpKSx0aGlzLmRhdGEubW9kaWZpY2F0aW9uRGF0ZT10aGlzLm1vZGlmaWNhdGlvbkRhdGUpOnRoaXMuZGF0YS5tb2RpZmljYXRpb25EYXRlPW51bGwscj1lLmdldFJhdygiUG9wdXAiKSxlLmhhcygiQyIpPyh0aGlzLnNldENvbG9yKGUuZ2V0QXJyYXkoIkMiKSksdGhpcy5kYXRhLmNvbG9yPXRoaXMuY29sb3IpOnRoaXMuZGF0YS5jb2xvcj1udWxsfWVsc2UgdGhpcy5kYXRhLnRpdGxlT2JqPXRoaXMuX3RpdGxlLHRoaXMuc2V0Q3JlYXRpb25EYXRlKHQuZ2V0KCJDcmVhdGlvbkRhdGUiKSksdGhpcy5kYXRhLmNyZWF0aW9uRGF0ZT10aGlzLmNyZWF0aW9uRGF0ZSxyPXQuZ2V0UmF3KCJQb3B1cCIpLHQuaGFzKCJDIil8fCh0aGlzLmRhdGEuY29sb3I9bnVsbCk7dGhpcy5kYXRhLnBvcHVwUmVmPXIgaW5zdGFuY2VvZiBzLlJlZj9yLnRvU3RyaW5nKCk6bnVsbCx0LmhhcygiUkMiKSYmKHRoaXMuZGF0YS5yaWNoVGV4dD1iLlhGQUZhY3RvcnkuZ2V0UmljaFRleHRBc0h0bWwodC5nZXQoIlJDIikpKX1zZXRDcmVhdGlvbkRhdGUoZSl7dGhpcy5jcmVhdGlvbkRhdGU9InN0cmluZyI9PXR5cGVvZiBlP2U6bnVsbH1fc2V0RGVmYXVsdEFwcGVhcmFuY2UoZSl7bGV0e3hyZWY6dCxleHRyYTpyLHN0cm9rZUNvbG9yOm4sZmlsbENvbG9yOmEsYmxlbmRNb2RlOmksc3Ryb2tlQWxwaGE6YyxmaWxsQWxwaGE6bCxwb2ludHNDYWxsYmFjazpofT1lLHU9TnVtYmVyLk1BWF9WQUxVRSxkPU51bWJlci5NQVhfVkFMVUUsZj1OdW1iZXIuTUlOX1ZBTFVFLGc9TnVtYmVyLk1JTl9WQUxVRTtjb25zdCBwPVsicSJdO3ImJnAucHVzaChyKSxuJiZwLnB1c2goIiIuY29uY2F0KG5bMF0sIiAiKS5jb25jYXQoblsxXSwiICIpLmNvbmNhdChuWzJdLCIgUkciKSksYSYmcC5wdXNoKCIiLmNvbmNhdChhWzBdLCIgIikuY29uY2F0KGFbMV0sIiAiKS5jb25jYXQoYVsyXSwiIHJnIikpO2xldCBtPXRoaXMuZGF0YS5xdWFkUG9pbnRzO218fChtPVtbe3g6dGhpcy5yZWN0YW5nbGVbMF0seTp0aGlzLnJlY3RhbmdsZVszXX0se3g6dGhpcy5yZWN0YW5nbGVbMl0seTp0aGlzLnJlY3RhbmdsZVszXX0se3g6dGhpcy5yZWN0YW5nbGVbMF0seTp0aGlzLnJlY3RhbmdsZVsxXX0se3g6dGhpcy5yZWN0YW5nbGVbMl0seTp0aGlzLnJlY3RhbmdsZVsxXX1dXSk7Zm9yKGNvbnN0IGUgb2YgbSl7Y29uc3RbdCxyLG4sYV09aChwLGUpO3U9TWF0aC5taW4odSx0KSxmPU1hdGgubWF4KGYsciksZD1NYXRoLm1pbihkLG4pLGc9TWF0aC5tYXgoZyxhKX1wLnB1c2goIlEiKTtjb25zdCBiPW5ldyBzLkRpY3QodCkseT1uZXcgcy5EaWN0KHQpO3kuc2V0KCJTdWJ0eXBlIixzLk5hbWUuZ2V0KCJGb3JtIikpO2NvbnN0IHc9bmV3IG8uU3RyaW5nU3RyZWFtKHAuam9pbigiICIpKTt3LmRpY3Q9eSxiLnNldCgiRm0wIix3KTtjb25zdCB2PW5ldyBzLkRpY3QodCk7aSYmdi5zZXQoIkJNIixzLk5hbWUuZ2V0KGkpKSwibnVtYmVyIj09dHlwZW9mIGMmJnYuc2V0KCJDQSIsYyksIm51bWJlciI9PXR5cGVvZiBsJiZ2LnNldCgiY2EiLGwpO2NvbnN0IHg9bmV3IHMuRGljdCh0KTt4LnNldCgiR1MwIix2KTtjb25zdCBTPW5ldyBzLkRpY3QodCk7Uy5zZXQoIkV4dEdTdGF0ZSIseCksUy5zZXQoIlhPYmplY3QiLGIpO2NvbnN0IEE9bmV3IHMuRGljdCh0KTtBLnNldCgiUmVzb3VyY2VzIixTKTtjb25zdCBrPXRoaXMuZGF0YS5yZWN0PVt1LGQsZixnXTtBLnNldCgiQkJveCIsayksdGhpcy5hcHBlYXJhbmNlPW5ldyBvLlN0cmluZ1N0cmVhbSgiL0dTMCBncyAvRm0wIERvIiksdGhpcy5hcHBlYXJhbmNlLmRpY3Q9QSx0aGlzLl9zdHJlYW1zLnB1c2godGhpcy5hcHBlYXJhbmNlLHcpfXN0YXRpYyBhc3luYyBjcmVhdGVOZXdBbm5vdGF0aW9uKGUsdCxyLG4pe2NvbnN0IGE9dC5yZWZ8fGUuZ2V0TmV3VGVtcG9yYXJ5UmVmKCksaT1hd2FpdCB0aGlzLmNyZWF0ZU5ld0FwcGVhcmFuY2VTdHJlYW0odCxlLG4pLHM9W107bGV0IG87aWYoaSl7Y29uc3Qgbj1lLmdldE5ld1RlbXBvcmFyeVJlZigpO289dGhpcy5jcmVhdGVOZXdEaWN0KHQsZSx7YXBSZWY6bn0pO2NvbnN0IGE9ZS5lbmNyeXB0P2UuZW5jcnlwdC5jcmVhdGVDaXBoZXJUcmFuc2Zvcm0obi5udW0sbi5nZW4pOm51bGw7YXdhaXQoMCxjLndyaXRlT2JqZWN0KShuLGkscyxhKSxyLnB1c2goe3JlZjpuLGRhdGE6cy5qb2luKCIiKX0pfWVsc2Ugbz10aGlzLmNyZWF0ZU5ld0RpY3QodCxlLHt9KTtzLmxlbmd0aD0wO2NvbnN0IGw9ZS5lbmNyeXB0P2UuZW5jcnlwdC5jcmVhdGVDaXBoZXJUcmFuc2Zvcm0oYS5udW0sYS5nZW4pOm51bGw7cmV0dXJuIGF3YWl0KDAsYy53cml0ZU9iamVjdCkoYSxvLHMsbCkse3JlZjphLGRhdGE6cy5qb2luKCIiKX19c3RhdGljIGFzeW5jIGNyZWF0ZU5ld1ByaW50QW5ub3RhdGlvbihlLHQscil7Y29uc3Qgbj1hd2FpdCB0aGlzLmNyZWF0ZU5ld0FwcGVhcmFuY2VTdHJlYW0odCxlLHIpLGE9dGhpcy5jcmVhdGVOZXdEaWN0KHQsZSx7YXA6bn0pLGk9bmV3IHRoaXMucHJvdG90eXBlLmNvbnN0cnVjdG9yKHtkaWN0OmEseHJlZjplLGV2YWx1YXRvck9wdGlvbnM6ci5ldmFsdWF0b3JPcHRpb25zfSk7cmV0dXJuIHQucmVmJiYoaS5yZWY9aS5yZWZUb1JlcGxhY2U9dC5yZWYpLGl9fXQuTWFya3VwQW5ub3RhdGlvbj1rO2NsYXNzIEMgZXh0ZW5kcyBTe2NvbnN0cnVjdG9yKGUpe3ZhciB0O3N1cGVyKGUpO2NvbnN0e2RpY3Q6cix4cmVmOml9PWUsbz10aGlzLmRhdGE7dGhpcy5fbmVlZEFwcGVhcmFuY2VzPWUubmVlZEFwcGVhcmFuY2VzLG8uYW5ub3RhdGlvblR5cGU9bi5Bbm5vdGF0aW9uVHlwZS5XSURHRVQsdm9pZCAwPT09by5maWVsZE5hbWUmJihvLmZpZWxkTmFtZT10aGlzLl9jb25zdHJ1Y3RGaWVsZE5hbWUocikpLG8uZmllbGROYW1lJiYvXFtcZCtcXSQvLnRlc3Qoby5maWVsZE5hbWUpJiYhci5oYXMoIktpZHMiKSYmKG8uYmFzZUZpZWxkTmFtZT1vLmZpZWxkTmFtZS5zdWJzdHJpbmcoMCxvLmZpZWxkTmFtZS5sYXN0SW5kZXhPZigiWyIpKSksdm9pZCAwPT09by5hY3Rpb25zJiYoby5hY3Rpb25zPSgwLGEuY29sbGVjdEFjdGlvbnMpKGkscixuLkFubm90YXRpb25BY3Rpb25FdmVudFR5cGUpKTtsZXQgYz0oMCxhLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0OnIsa2V5OiJWIixnZXRBcnJheTohMH0pO28uZmllbGRWYWx1ZT10aGlzLl9kZWNvZGVGb3JtVmFsdWUoYyk7Y29uc3QgbD0oMCxhLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0OnIsa2V5OiJEViIsZ2V0QXJyYXk6ITB9KTtpZihvLmRlZmF1bHRGaWVsZFZhbHVlPXRoaXMuX2RlY29kZUZvcm1WYWx1ZShsKSx2b2lkIDA9PT1jJiZlLnhmYURhdGFzZXRzKXtjb25zdCB0PXRoaXMuX3RpdGxlLnN0cjt0JiYodGhpcy5faGFzVmFsdWVGcm9tWEZBPSEwLG8uZmllbGRWYWx1ZT1jPWUueGZhRGF0YXNldHMuZ2V0VmFsdWUodCkpfXZvaWQgMD09PWMmJm51bGwhPT1vLmRlZmF1bHRGaWVsZFZhbHVlJiYoby5maWVsZFZhbHVlPW8uZGVmYXVsdEZpZWxkVmFsdWUpLG8uYWx0ZXJuYXRpdmVUZXh0PSgwLG4uc3RyaW5nVG9QREZTdHJpbmcpKHIuZ2V0KCJUVSIpfHwiIiksdGhpcy5zZXREZWZhdWx0QXBwZWFyYW5jZShlKSxvLmhhc0FwcGVhcmFuY2V8fChvLmhhc0FwcGVhcmFuY2U9dGhpcy5fbmVlZEFwcGVhcmFuY2VzJiZ2b2lkIDAhPT1vLmZpZWxkVmFsdWUmJm51bGwhPT1vLmZpZWxkVmFsdWUpO2NvbnN0IGg9KDAsYS5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7ZGljdDpyLGtleToiRlQifSk7by5maWVsZFR5cGU9aCBpbnN0YW5jZW9mIHMuTmFtZT9oLm5hbWU6bnVsbDtjb25zdCB1PSgwLGEuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6cixrZXk6IkRSIn0pLGQ9ZS5hY3JvRm9ybS5nZXQoIkRSIiksZj1udWxsPT09KHQ9dGhpcy5hcHBlYXJhbmNlKXx8dm9pZCAwPT09dD92b2lkIDA6dC5kaWN0LmdldCgiUmVzb3VyY2VzIik7dGhpcy5fZmllbGRSZXNvdXJjZXM9e2xvY2FsUmVzb3VyY2VzOnUsYWNyb0Zvcm1SZXNvdXJjZXM6ZCxhcHBlYXJhbmNlUmVzb3VyY2VzOmYsbWVyZ2VkUmVzb3VyY2VzOnMuRGljdC5tZXJnZSh7eHJlZjppLGRpY3RBcnJheTpbdSxmLGRdLG1lcmdlU3ViRGljdHM6ITB9KX0sby5maWVsZEZsYWdzPSgwLGEuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6cixrZXk6IkZmIn0pLCghTnVtYmVyLmlzSW50ZWdlcihvLmZpZWxkRmxhZ3MpfHxvLmZpZWxkRmxhZ3M8MCkmJihvLmZpZWxkRmxhZ3M9MCksby5yZWFkT25seT10aGlzLmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuUkVBRE9OTFkpLG8ucmVxdWlyZWQ9dGhpcy5oYXNGaWVsZEZsYWcobi5Bbm5vdGF0aW9uRmllbGRGbGFnLlJFUVVJUkVEKSxvLmhpZGRlbj10aGlzLl9oYXNGbGFnKG8uYW5ub3RhdGlvbkZsYWdzLG4uQW5ub3RhdGlvbkZsYWcuSElEREVOKX1fZGVjb2RlRm9ybVZhbHVlKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP2UuZmlsdGVyKChlPT4ic3RyaW5nIj09dHlwZW9mIGUpKS5tYXAoKGU9PigwLG4uc3RyaW5nVG9QREZTdHJpbmcpKGUpKSk6ZSBpbnN0YW5jZW9mIHMuTmFtZT8oMCxuLnN0cmluZ1RvUERGU3RyaW5nKShlLm5hbWUpOiJzdHJpbmciPT10eXBlb2YgZT8oMCxuLnN0cmluZ1RvUERGU3RyaW5nKShlKTpudWxsfWhhc0ZpZWxkRmxhZyhlKXtyZXR1cm4hISh0aGlzLmRhdGEuZmllbGRGbGFncyZlKX1nZXRSb3RhdGlvbk1hdHJpeChlKXt2YXIgdDtsZXQgcj1udWxsPT1lfHxudWxsPT09KHQ9ZS5nZXQodGhpcy5kYXRhLmlkKSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQucm90YXRpb247aWYodm9pZCAwPT09ciYmKHI9dGhpcy5yb3RhdGlvbiksMD09PXIpcmV0dXJuIG4uSURFTlRJVFlfTUFUUklYO2NvbnN0IGk9dGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF0scz10aGlzLmRhdGEucmVjdFszXS10aGlzLmRhdGEucmVjdFsxXTtyZXR1cm4oMCxhLmdldFJvdGF0aW9uTWF0cml4KShyLGkscyl9Z2V0Qm9yZGVyQW5kQmFja2dyb3VuZEFwcGVhcmFuY2VzKGUpe3ZhciB0O2xldCByPW51bGw9PWV8fG51bGw9PT0odD1lLmdldCh0aGlzLmRhdGEuaWQpKXx8dm9pZCAwPT09dD92b2lkIDA6dC5yb3RhdGlvbjtpZih2b2lkIDA9PT1yJiYocj10aGlzLnJvdGF0aW9uKSwhdGhpcy5iYWNrZ3JvdW5kQ29sb3ImJiF0aGlzLmJvcmRlckNvbG9yKXJldHVybiIiO2NvbnN0IG49dGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF0sYT10aGlzLmRhdGEucmVjdFszXS10aGlzLmRhdGEucmVjdFsxXSxzPTA9PT1yfHwxODA9PT1yPyIwIDAgIi5jb25jYXQobiwiICIpLmNvbmNhdChhLCIgcmUiKToiMCAwICIuY29uY2F0KGEsIiAiKS5jb25jYXQobiwiIHJlIik7bGV0IG89IiI7cmV0dXJuIHRoaXMuYmFja2dyb3VuZENvbG9yJiYobz0iIi5jb25jYXQoKDAsaS5nZXRQZGZDb2xvcikodGhpcy5iYWNrZ3JvdW5kQ29sb3IsITApLCIgIikuY29uY2F0KHMsIiBmICIpKSx0aGlzLmJvcmRlckNvbG9yJiYobys9IiIuY29uY2F0KHRoaXMuYm9yZGVyU3R5bGUud2lkdGh8fDEsIiB3ICIpLmNvbmNhdCgoMCxpLmdldFBkZkNvbG9yKSh0aGlzLmJvcmRlckNvbG9yLCExKSwiICIpLmNvbmNhdChzLCIgUyAiKSksb31hc3luYyBnZXRPcGVyYXRvckxpc3QoZSx0LHIsYSxpKXtpZihhJiYhKHRoaXMgaW5zdGFuY2VvZiBUKSYmIXRoaXMuZGF0YS5ub0hUTUwmJiF0aGlzLmRhdGEuaGFzT3duQ2FudmFzKXJldHVybntvcExpc3Q6bmV3IG0uT3BlcmF0b3JMaXN0LHNlcGFyYXRlRm9ybTohMCxzZXBhcmF0ZUNhbnZhczohMX07aWYoIXRoaXMuX2hhc1RleHQpcmV0dXJuIHN1cGVyLmdldE9wZXJhdG9yTGlzdChlLHQscixhLGkpO2NvbnN0IHM9YXdhaXQgdGhpcy5fZ2V0QXBwZWFyYW5jZShlLHQscixpKTtpZih0aGlzLmFwcGVhcmFuY2UmJm51bGw9PT1zKXJldHVybiBzdXBlci5nZXRPcGVyYXRvckxpc3QoZSx0LHIsYSxpKTtjb25zdCBjPW5ldyBtLk9wZXJhdG9yTGlzdDtpZighdGhpcy5fZGVmYXVsdEFwcGVhcmFuY2V8fG51bGw9PT1zKXJldHVybntvcExpc3Q6YyxzZXBhcmF0ZUZvcm06ITEsc2VwYXJhdGVDYW52YXM6ITF9O2NvbnN0IGw9ISEodGhpcy5kYXRhLmhhc093bkNhbnZhcyYmciZuLlJlbmRlcmluZ0ludGVudEZsYWcuRElTUExBWSksaD1bMCwwLHRoaXMuZGF0YS5yZWN0WzJdLXRoaXMuZGF0YS5yZWN0WzBdLHRoaXMuZGF0YS5yZWN0WzNdLXRoaXMuZGF0YS5yZWN0WzFdXSx1PXgodGhpcy5kYXRhLnJlY3QsaCxbMSwwLDAsMSwwLDBdKTtsZXQgZDt0aGlzLm9jJiYoZD1hd2FpdCBlLnBhcnNlTWFya2VkQ29udGVudFByb3BzKHRoaXMub2MsbnVsbCkpLHZvaWQgMCE9PWQmJmMuYWRkT3Aobi5PUFMuYmVnaW5NYXJrZWRDb250ZW50UHJvcHMsWyJPQyIsZF0pLGMuYWRkT3Aobi5PUFMuYmVnaW5Bbm5vdGF0aW9uLFt0aGlzLmRhdGEuaWQsdGhpcy5kYXRhLnJlY3QsdSx0aGlzLmdldFJvdGF0aW9uTWF0cml4KGkpLGxdKTtjb25zdCBmPW5ldyBvLlN0cmluZ1N0cmVhbShzKTtyZXR1cm4gYXdhaXQgZS5nZXRPcGVyYXRvckxpc3Qoe3N0cmVhbTpmLHRhc2s6dCxyZXNvdXJjZXM6dGhpcy5fZmllbGRSZXNvdXJjZXMubWVyZ2VkUmVzb3VyY2VzLG9wZXJhdG9yTGlzdDpjfSksYy5hZGRPcChuLk9QUy5lbmRBbm5vdGF0aW9uLFtdKSx2b2lkIDAhPT1kJiZjLmFkZE9wKG4uT1BTLmVuZE1hcmtlZENvbnRlbnQsW10pLHtvcExpc3Q6YyxzZXBhcmF0ZUZvcm06ITEsc2VwYXJhdGVDYW52YXM6bH19X2dldE1LRGljdChlKXtjb25zdCB0PW5ldyBzLkRpY3QobnVsbCk7cmV0dXJuIGUmJnQuc2V0KCJSIixlKSx0aGlzLmJvcmRlckNvbG9yJiZ0LnNldCgiQkMiLHcodGhpcy5ib3JkZXJDb2xvcikpLHRoaXMuYmFja2dyb3VuZENvbG9yJiZ0LnNldCgiQkciLHcodGhpcy5iYWNrZ3JvdW5kQ29sb3IpKSx0LnNpemU+MD90Om51bGx9YW1lbmRTYXZlZERpY3QoZSx0KXt9YXN5bmMgc2F2ZShlLHQscil7dmFyIGk7Y29uc3QgbD1udWxsPT1yP3ZvaWQgMDpyLmdldCh0aGlzLmRhdGEuaWQpO2xldCBoPW51bGw9PWw/dm9pZCAwOmwudmFsdWUsdT1udWxsPT1sP3ZvaWQgMDpsLnJvdGF0aW9uO2lmKGg9PT10aGlzLmRhdGEuZmllbGRWYWx1ZXx8dm9pZCAwPT09aCl7aWYoIXRoaXMuX2hhc1ZhbHVlRnJvbVhGQSYmdm9pZCAwPT09dSlyZXR1cm4gbnVsbDtofHwoaD10aGlzLmRhdGEuZmllbGRWYWx1ZSl9aWYodm9pZCAwPT09dSYmIXRoaXMuX2hhc1ZhbHVlRnJvbVhGQSYmQXJyYXkuaXNBcnJheShoKSYmQXJyYXkuaXNBcnJheSh0aGlzLmRhdGEuZmllbGRWYWx1ZSkmJmgubGVuZ3RoPT09dGhpcy5kYXRhLmZpZWxkVmFsdWUubGVuZ3RoJiZoLmV2ZXJ5KCgoZSx0KT0+ZT09PXRoaXMuZGF0YS5maWVsZFZhbHVlW3RdKSkpcmV0dXJuIG51bGw7dm9pZCAwPT09dSYmKHU9dGhpcy5yb3RhdGlvbik7bGV0IGQ9bnVsbDtpZighdGhpcy5fbmVlZEFwcGVhcmFuY2VzJiYoZD1hd2FpdCB0aGlzLl9nZXRBcHBlYXJhbmNlKGUsdCxuLlJlbmRlcmluZ0ludGVudEZsYWcuU0FWRSxyKSxudWxsPT09ZCkpcmV0dXJuIG51bGw7bGV0IGY9ITE7bnVsbCE9PShpPWQpJiZ2b2lkIDAhPT1pJiZpLm5lZWRBcHBlYXJhbmNlcyYmKGY9ITAsZD1udWxsKTtjb25zdHt4cmVmOmd9PWUscD1nLmZldGNoSWZSZWYodGhpcy5yZWYpO2lmKCEocCBpbnN0YW5jZW9mIHMuRGljdCkpcmV0dXJuIG51bGw7Y29uc3QgbT1uZXcgcy5EaWN0KGcpO2Zvcihjb25zdCBlIG9mIHAuZ2V0S2V5cygpKSJBUCIhPT1lJiZtLnNldChlLHAuZ2V0UmF3KGUpKTtjb25zdCBiPXtwYXRoOnRoaXMuZGF0YS5maWVsZE5hbWUsdmFsdWU6aH0seT1lPT4oMCxhLmlzQXNjaWkpKGUpP2U6KDAsYS5zdHJpbmdUb1VURjE2U3RyaW5nKShlLCEwKTttLnNldCgiViIsQXJyYXkuaXNBcnJheShoKT9oLm1hcCh5KTp5KGgpKSx0aGlzLmFtZW5kU2F2ZWREaWN0KHIsbSk7Y29uc3Qgdz10aGlzLl9nZXRNS0RpY3QodSk7dyYmbS5zZXQoIk1LIix3KTtjb25zdCB2PWcuZW5jcnlwdCx4PXY/di5jcmVhdGVDaXBoZXJUcmFuc2Zvcm0odGhpcy5yZWYubnVtLHRoaXMucmVmLmdlbik6bnVsbCxTPVtdLEE9W3tyZWY6dGhpcy5yZWYsZGF0YToiIix4ZmE6YixuZWVkQXBwZWFyYW5jZXM6Zn1dO2lmKG51bGwhPT1kKXtjb25zdCBlPWcuZ2V0TmV3VGVtcG9yYXJ5UmVmKCksdD1uZXcgcy5EaWN0KGcpO20uc2V0KCJBUCIsdCksdC5zZXQoIk4iLGUpO2xldCBhPW51bGw7diYmKGE9di5jcmVhdGVDaXBoZXJUcmFuc2Zvcm0oZS5udW0sZS5nZW4pKTtjb25zdCBpPXRoaXMuX2dldFNhdmVGaWVsZFJlc291cmNlcyhnKSxsPW5ldyBvLlN0cmluZ1N0cmVhbShkKSxoPWwuZGljdD1uZXcgcy5EaWN0KGcpO2guc2V0KCJTdWJ0eXBlIixzLk5hbWUuZ2V0KCJGb3JtIikpLGguc2V0KCJSZXNvdXJjZXMiLGkpLGguc2V0KCJCQm94IixbMCwwLHRoaXMuZGF0YS5yZWN0WzJdLXRoaXMuZGF0YS5yZWN0WzBdLHRoaXMuZGF0YS5yZWN0WzNdLXRoaXMuZGF0YS5yZWN0WzFdXSk7Y29uc3QgdT10aGlzLmdldFJvdGF0aW9uTWF0cml4KHIpO3UhPT1uLklERU5USVRZX01BVFJJWCYmaC5zZXQoIk1hdHJpeCIsdSksYXdhaXQoMCxjLndyaXRlT2JqZWN0KShlLGwsUyxhKSxBLnB1c2goe3JlZjplLGRhdGE6Uy5qb2luKCIiKSx4ZmE6bnVsbCxuZWVkQXBwZWFyYW5jZXM6ITF9KSxTLmxlbmd0aD0wfXJldHVybiBtLnNldCgiTSIsIkQ6Ii5jb25jYXQoKDAsbi5nZXRNb2RpZmljYXRpb25EYXRlKSgpKSksYXdhaXQoMCxjLndyaXRlT2JqZWN0KSh0aGlzLnJlZixtLFMseCksQVswXS5kYXRhPVMuam9pbigiIiksQX1hc3luYyBfZ2V0QXBwZWFyYW5jZShlLHQscixzKXtpZih0aGlzLmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuUEFTU1dPUkQpKXJldHVybiBudWxsO2NvbnN0IG89bnVsbD09cz92b2lkIDA6cy5nZXQodGhpcy5kYXRhLmlkKTtsZXQgYyxsO2lmKG8mJihjPW8uZm9ybWF0dGVkVmFsdWV8fG8udmFsdWUsbD1vLnJvdGF0aW9uKSx2b2lkIDA9PT1sJiZ2b2lkIDA9PT1jJiYhdGhpcy5fbmVlZEFwcGVhcmFuY2VzJiYoIXRoaXMuX2hhc1ZhbHVlRnJvbVhGQXx8dGhpcy5hcHBlYXJhbmNlKSlyZXR1cm4gbnVsbDtjb25zdCBoPXRoaXMuZ2V0Qm9yZGVyQW5kQmFja2dyb3VuZEFwcGVhcmFuY2VzKHMpO2lmKHZvaWQgMD09PWMmJihjPXRoaXMuZGF0YS5maWVsZFZhbHVlLCFjKSlyZXR1cm4iL1R4IEJNQyBxICIuY29uY2F0KGgsIlEgRU1DIik7aWYoQXJyYXkuaXNBcnJheShjKSYmMT09PWMubGVuZ3RoJiYoYz1jWzBdKSwoMCxuLmFzc2VydCkoInN0cmluZyI9PXR5cGVvZiBjLCJFeHBlY3RlZCBgdmFsdWVgIHRvIGJlIGEgc3RyaW5nLiIpLGM9Yy50cmltKCksdGhpcy5kYXRhLmNvbWJvKXtjb25zdCBlPXRoaXMuZGF0YS5vcHRpb25zLmZpbmQoKGU9PntsZXR7ZXhwb3J0VmFsdWU6dH09ZTtyZXR1cm4gYz09PXR9KSk7Yz0obnVsbD09ZT92b2lkIDA6ZS5kaXNwbGF5VmFsdWUpfHxjfWlmKCIiPT09YylyZXR1cm4iL1R4IEJNQyBxICIuY29uY2F0KGgsIlEgRU1DIik7dm9pZCAwPT09bCYmKGw9dGhpcy5yb3RhdGlvbik7bGV0IHUsZD0tMTt0aGlzLmRhdGEubXVsdGlMaW5lPyh1PWMuc3BsaXQoL1xyXG4/fFxuLykubWFwKChlPT5lLm5vcm1hbGl6ZSgiTkZDIikpKSxkPXUubGVuZ3RoKTp1PVtjLnJlcGxhY2UoL1xyXG4/fFxuLywiIikubm9ybWFsaXplKCJORkMiKV07bGV0IGY9dGhpcy5kYXRhLnJlY3RbM10tdGhpcy5kYXRhLnJlY3RbMV0sZz10aGlzLmRhdGEucmVjdFsyXS10aGlzLmRhdGEucmVjdFswXTs5MCE9PWwmJjI3MCE9PWx8fChbZyxmXT1bZixnXSksdGhpcy5fZGVmYXVsdEFwcGVhcmFuY2V8fCh0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhPSgwLGkucGFyc2VEZWZhdWx0QXBwZWFyYW5jZSkodGhpcy5fZGVmYXVsdEFwcGVhcmFuY2U9Ii9IZWx2ZXRpY2EgMCBUZiAwIGciKSk7bGV0IHAsbSxiLHk9YXdhaXQgQy5fZ2V0Rm9udERhdGEoZSx0LHRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEsdGhpcy5fZmllbGRSZXNvdXJjZXMubWVyZ2VkUmVzb3VyY2VzKTtjb25zdCB3PVtdO2xldCB2PSExO2Zvcihjb25zdCBlIG9mIHUpe2NvbnN0IHQ9eS5lbmNvZGVTdHJpbmcoZSk7dC5sZW5ndGg+MSYmKHY9ITApLHcucHVzaCh0LmpvaW4oIiIpKX1pZih2JiZyJm4uUmVuZGVyaW5nSW50ZW50RmxhZy5TQVZFKXJldHVybntuZWVkQXBwZWFyYW5jZXM6ITB9O2lmKHYmJnRoaXMuX2lzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKXtjb25zdCByPXRoaXMuZGF0YS5jb21iPyJtb25vc3BhY2UiOiJzYW5zLXNlcmlmIixuPW5ldyBpLkZha2VVbmljb2RlRm9udChlLnhyZWYscikscz1uLmNyZWF0ZUZvbnRSZXNvdXJjZXModS5qb2luKCIiKSksbz1zLmdldFJhdygiRm9udCIpO2lmKHRoaXMuX2ZpZWxkUmVzb3VyY2VzLm1lcmdlZFJlc291cmNlcy5oYXMoIkZvbnQiKSl7Y29uc3QgZT10aGlzLl9maWVsZFJlc291cmNlcy5tZXJnZWRSZXNvdXJjZXMuZ2V0KCJGb250Iik7Zm9yKGNvbnN0IHQgb2Ygby5nZXRLZXlzKCkpZS5zZXQodCxvLmdldFJhdyh0KSl9ZWxzZSB0aGlzLl9maWVsZFJlc291cmNlcy5tZXJnZWRSZXNvdXJjZXMuc2V0KCJGb250IixvKTtjb25zdCBsPW4uZm9udE5hbWUubmFtZTt5PWF3YWl0IEMuX2dldEZvbnREYXRhKGUsdCx7Zm9udE5hbWU6bCxmb250U2l6ZTowfSxzKTtmb3IobGV0IGU9MCx0PXcubGVuZ3RoO2U8dDtlKyspd1tlXT0oMCxhLnN0cmluZ1RvVVRGMTZTdHJpbmcpKHVbZV0pO2NvbnN0IGg9T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEpO3RoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEuZm9udFNpemU9MCx0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhLmZvbnROYW1lPWwsW3AsbSxiXT10aGlzLl9jb21wdXRlRm9udFNpemUoZi0yLGctNCxjLHksZCksdGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YT1ofWVsc2UgdGhpcy5faXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWR8fCgwLG4ud2FybikoIl9nZXRBcHBlYXJhbmNlOiBPZmZzY3JlZW5DYW52YXMgaXMgbm90IHN1cHBvcnRlZCwgYW5ub3RhdGlvbiBtYXkgbm90IHJlbmRlciBjb3JyZWN0bHkuIiksW3AsbSxiXT10aGlzLl9jb21wdXRlRm9udFNpemUoZi0yLGctNCxjLHksZCk7bGV0IHg9eS5kZXNjZW50O3g9aXNOYU4oeCk/bi5CQVNFTElORV9GQUNUT1IqYjpNYXRoLm1heChuLkJBU0VMSU5FX0ZBQ1RPUipiLE1hdGguYWJzKHgpKm0pO2NvbnN0IFM9TWF0aC5taW4oTWF0aC5mbG9vcigoZi1tKS8yKSwxKSxBPXRoaXMuZGF0YS50ZXh0QWxpZ25tZW50O2lmKHRoaXMuZGF0YS5tdWx0aUxpbmUpcmV0dXJuIHRoaXMuX2dldE11bHRpbGluZUFwcGVhcmFuY2UocCx3LHksbSxnLGYsQSwyLFMseCxiLHMpO2lmKHRoaXMuZGF0YS5jb21iKXJldHVybiB0aGlzLl9nZXRDb21iQXBwZWFyYW5jZShwLHksd1swXSxtLGcsZiwyLFMseCxiLHMpO2NvbnN0IGs9Uyt4O3JldHVybiAwPT09QXx8QT4yPyIvVHggQk1DIHEgIi5jb25jYXQoaCwiQlQgIikrcCsiIDEgMCAwIDEgIi5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykoMiksIiAiKS5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykoayksIiBUbSAoIikuY29uY2F0KCgwLGEuZXNjYXBlU3RyaW5nKSh3WzBdKSwiKSBUaiBFVCBRIEVNQyIpOiIvVHggQk1DIHEgIi5jb25jYXQoaCwiQlQgIikrcCsiIDEgMCAwIDEgMCAwIFRtICIuY29uY2F0KHRoaXMuX3JlbmRlclRleHQod1swXSx5LG0sZyxBLHtzaGlmdDowfSwyLGspLCIgRVQgUSBFTUMiKX1zdGF0aWMgYXN5bmMgX2dldEZvbnREYXRhKGUsdCxyLG4pe2NvbnN0IGE9bmV3IG0uT3BlcmF0b3JMaXN0LGk9e2ZvbnQ6bnVsbCxjbG9uZSgpe3JldHVybiB0aGlzfX0se2ZvbnROYW1lOm8sZm9udFNpemU6Y309cjtyZXR1cm4gYXdhaXQgZS5oYW5kbGVTZXRGb250KG4sW28mJnMuTmFtZS5nZXQobyksY10sbnVsbCxhLHQsaSxudWxsKSxpLmZvbnR9X2dldFRleHRXaWR0aChlLHQpe3JldHVybiB0LmNoYXJzVG9HbHlwaHMoZSkucmVkdWNlKCgoZSx0KT0+ZSt0LndpZHRoKSwwKS8xZTN9X2NvbXB1dGVGb250U2l6ZShlLHQscixhLHMpe2xldHtmb250U2l6ZTpvfT10aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhLGM9KG98fDEyKSpuLkxJTkVfRkFDVE9SLGw9TWF0aC5yb3VuZChlL2MpO2lmKCFvKXtjb25zdCBoPWU9Pk1hdGguZmxvb3IoMTAwKmUpLzEwMDtpZigtMT09PXMpe2NvbnN0IGk9dGhpcy5fZ2V0VGV4dFdpZHRoKHIsYSk7bz1oKE1hdGgubWluKGUvbi5MSU5FX0ZBQ1RPUixpPnQ/dC9pOjEvMCkpLGw9MX1lbHNle2NvbnN0IGk9ci5zcGxpdCgvXHJcbj98XG4vKSx1PVtdO2Zvcihjb25zdCBlIG9mIGkpe2NvbnN0IHQ9YS5lbmNvZGVTdHJpbmcoZSkuam9pbigiIikscj1hLmNoYXJzVG9HbHlwaHModCksbj1hLmdldENoYXJQb3NpdGlvbnModCk7dS5wdXNoKHtsaW5lOnQsZ2x5cGhzOnIscG9zaXRpb25zOm59KX1jb25zdCBkPXI9PntsZXQgbj0wO2Zvcihjb25zdCBpIG9mIHUpaWYobis9dGhpcy5fc3BsaXRMaW5lKG51bGwsYSxyLHQsaSkubGVuZ3RoKnIsbj5lKXJldHVybiEwO3JldHVybiExfTtmb3IobD1NYXRoLm1heChsLHMpO2M9ZS9sLG89aChjL24uTElORV9GQUNUT1IpLGQobyk7KWwrK31jb25zdHtmb250TmFtZTp1LGZvbnRDb2xvcjpkfT10aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhO3RoaXMuX2RlZmF1bHRBcHBlYXJhbmNlPSgwLGkuY3JlYXRlRGVmYXVsdEFwcGVhcmFuY2UpKHtmb250U2l6ZTpvLGZvbnROYW1lOnUsZm9udENvbG9yOmR9KX1yZXR1cm5bdGhpcy5fZGVmYXVsdEFwcGVhcmFuY2UsbyxlL2xdfV9yZW5kZXJUZXh0KGUsdCxyLG4saSxzLG8sYyl7bGV0IGw7bD0xPT09aT8obi10aGlzLl9nZXRUZXh0V2lkdGgoZSx0KSpyKS8yOjI9PT1pP24tdGhpcy5fZ2V0VGV4dFdpZHRoKGUsdCkqci1vOm87Y29uc3QgaD0oMCxhLm51bWJlclRvU3RyaW5nKShsLXMuc2hpZnQpO3JldHVybiBzLnNoaWZ0PWwsIiIuY29uY2F0KGgsIiAiKS5jb25jYXQoYz0oMCxhLm51bWJlclRvU3RyaW5nKShjKSwiIFRkICgiKS5jb25jYXQoKDAsYS5lc2NhcGVTdHJpbmcpKGUpLCIpIFRqIil9X2dldFNhdmVGaWVsZFJlc291cmNlcyhlKXt2YXIgdDtjb25zdHtsb2NhbFJlc291cmNlczpyLGFwcGVhcmFuY2VSZXNvdXJjZXM6bixhY3JvRm9ybVJlc291cmNlczphfT10aGlzLl9maWVsZFJlc291cmNlcyxpPW51bGw9PT0odD10aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhKXx8dm9pZCAwPT09dD92b2lkIDA6dC5mb250TmFtZTtpZighaSlyZXR1cm4gcnx8cy5EaWN0LmVtcHR5O2Zvcihjb25zdCBlIG9mW3Isbl0paWYoZSBpbnN0YW5jZW9mIHMuRGljdCl7Y29uc3QgdD1lLmdldCgiRm9udCIpO2lmKHQgaW5zdGFuY2VvZiBzLkRpY3QmJnQuaGFzKGkpKXJldHVybiBlfWlmKGEgaW5zdGFuY2VvZiBzLkRpY3Qpe2NvbnN0IHQ9YS5nZXQoIkZvbnQiKTtpZih0IGluc3RhbmNlb2Ygcy5EaWN0JiZ0LmhhcyhpKSl7Y29uc3Qgbj1uZXcgcy5EaWN0KGUpO24uc2V0KGksdC5nZXRSYXcoaSkpO2NvbnN0IGE9bmV3IHMuRGljdChlKTtyZXR1cm4gYS5zZXQoIkZvbnQiLG4pLHMuRGljdC5tZXJnZSh7eHJlZjplLGRpY3RBcnJheTpbYSxyXSxtZXJnZVN1YkRpY3RzOiEwfSl9fXJldHVybiByfHxzLkRpY3QuZW1wdHl9Z2V0RmllbGRPYmplY3QoKXtyZXR1cm4gbnVsbH19Y2xhc3MgTyBleHRlbmRzIEN7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksdGhpcy5kYXRhLmhhc093bkNhbnZhcz10aGlzLmRhdGEucmVhZE9ubHkmJiF0aGlzLmRhdGEubm9IVE1MLHRoaXMuX2hhc1RleHQ9ITA7Y29uc3QgdD1lLmRpY3Q7InN0cmluZyIhPXR5cGVvZiB0aGlzLmRhdGEuZmllbGRWYWx1ZSYmKHRoaXMuZGF0YS5maWVsZFZhbHVlPSIiKTtsZXQgcj0oMCxhLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0OnQsa2V5OiJRIn0pOyghTnVtYmVyLmlzSW50ZWdlcihyKXx8cjwwfHxyPjIpJiYocj1udWxsKSx0aGlzLmRhdGEudGV4dEFsaWdubWVudD1yO2xldCBpPSgwLGEuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6dCxrZXk6Ik1heExlbiJ9KTsoIU51bWJlci5pc0ludGVnZXIoaSl8fGk8MCkmJihpPTApLHRoaXMuZGF0YS5tYXhMZW49aSx0aGlzLmRhdGEubXVsdGlMaW5lPXRoaXMuaGFzRmllbGRGbGFnKG4uQW5ub3RhdGlvbkZpZWxkRmxhZy5NVUxUSUxJTkUpLHRoaXMuZGF0YS5jb21iPXRoaXMuaGFzRmllbGRGbGFnKG4uQW5ub3RhdGlvbkZpZWxkRmxhZy5DT01CKSYmIXRoaXMuaGFzRmllbGRGbGFnKG4uQW5ub3RhdGlvbkZpZWxkRmxhZy5NVUxUSUxJTkUpJiYhdGhpcy5oYXNGaWVsZEZsYWcobi5Bbm5vdGF0aW9uRmllbGRGbGFnLlBBU1NXT1JEKSYmIXRoaXMuaGFzRmllbGRGbGFnKG4uQW5ub3RhdGlvbkZpZWxkRmxhZy5GSUxFU0VMRUNUKSYmMCE9PXRoaXMuZGF0YS5tYXhMZW4sdGhpcy5kYXRhLmRvTm90U2Nyb2xsPXRoaXMuaGFzRmllbGRGbGFnKG4uQW5ub3RhdGlvbkZpZWxkRmxhZy5ET05PVFNDUk9MTCl9Z2V0IGhhc1RleHRDb250ZW50KCl7cmV0dXJuISF0aGlzLmFwcGVhcmFuY2UmJiF0aGlzLl9uZWVkQXBwZWFyYW5jZXN9X2dldENvbWJBcHBlYXJhbmNlKGUsdCxyLG4saSxzLG8sYyxsLGgsdSl7Y29uc3QgZD1pL3RoaXMuZGF0YS5tYXhMZW4sZj10aGlzLmdldEJvcmRlckFuZEJhY2tncm91bmRBcHBlYXJhbmNlcyh1KSxnPVtdLHA9dC5nZXRDaGFyUG9zaXRpb25zKHIpO2Zvcihjb25zdFtlLHRdb2YgcClnLnB1c2goIigiLmNvbmNhdCgoMCxhLmVzY2FwZVN0cmluZykoci5zdWJzdHJpbmcoZSx0KSksIikgVGoiKSk7Y29uc3QgbT1nLmpvaW4oIiAiLmNvbmNhdCgoMCxhLm51bWJlclRvU3RyaW5nKShkKSwiIDAgVGQgIikpO3JldHVybiIvVHggQk1DIHEgIi5jb25jYXQoZiwiQlQgIikrZSsiIDEgMCAwIDEgIi5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykobyksIiAiKS5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykoYytsKSwiIFRtICIpLmNvbmNhdChtLCIgRVQgUSBFTUMiKX1fZ2V0TXVsdGlsaW5lQXBwZWFyYW5jZShlLHQscixuLGkscyxvLGMsbCxoLHUsZCl7Y29uc3QgZj1bXSxnPWktMipjLHA9e3NoaWZ0OjB9O2ZvcihsZXQgZT0wLGE9dC5sZW5ndGg7ZTxhO2UrKyl7Y29uc3QgYT10W2VdLHM9dGhpcy5fc3BsaXRMaW5lKGEscixuLGcpO2ZvcihsZXQgdD0wLGE9cy5sZW5ndGg7dDxhO3QrKyl7Y29uc3QgYT1zW3RdLGQ9MD09PWUmJjA9PT10Py1sLSh1LWgpOi11O2YucHVzaCh0aGlzLl9yZW5kZXJUZXh0KGEscixuLGksbyxwLGMsZCkpfX1jb25zdCBtPXRoaXMuZ2V0Qm9yZGVyQW5kQmFja2dyb3VuZEFwcGVhcmFuY2VzKGQpLGI9Zi5qb2luKCJcbiIpO3JldHVybiIvVHggQk1DIHEgIi5jb25jYXQobSwiQlQgIikrZSsiIDEgMCAwIDEgMCAiLmNvbmNhdCgoMCxhLm51bWJlclRvU3RyaW5nKShzKSwiIFRtICIpLmNvbmNhdChiLCIgRVQgUSBFTUMiKX1fc3BsaXRMaW5lKGUsdCxyLG4pe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+NCYmdm9pZCAwIT09YXJndW1lbnRzWzRdP2FyZ3VtZW50c1s0XTp7fTtlPWEubGluZXx8ZTtjb25zdCBpPWEuZ2x5cGhzfHx0LmNoYXJzVG9HbHlwaHMoZSk7aWYoaS5sZW5ndGg8PTEpcmV0dXJuW2VdO2NvbnN0IHM9YS5wb3NpdGlvbnN8fHQuZ2V0Q2hhclBvc2l0aW9ucyhlKSxvPXIvMWUzLGM9W107bGV0IGw9LTEsaD0tMSx1PS0xLGQ9MCxmPTA7Zm9yKGxldCB0PTAscj1pLmxlbmd0aDt0PHI7dCsrKXtjb25zdFtyLGFdPXNbdF0sZz1pW3RdLHA9Zy53aWR0aCpvOyIgIj09PWcudW5pY29kZT9mK3A+bj8oYy5wdXNoKGUuc3Vic3RyaW5nKGQscikpLGQ9cixmPXAsbD0tMSx1PS0xKTooZis9cCxsPXIsaD1hLHU9dCk6ZitwPm4/LTEhPT1sPyhjLnB1c2goZS5zdWJzdHJpbmcoZCxoKSksZD1oLHQ9dSsxLGw9LTEsZj0wKTooYy5wdXNoKGUuc3Vic3RyaW5nKGQscikpLGQ9cixmPXApOmYrPXB9cmV0dXJuIGQ8ZS5sZW5ndGgmJmMucHVzaChlLnN1YnN0cmluZyhkLGUubGVuZ3RoKSksY31nZXRGaWVsZE9iamVjdCgpe3JldHVybntpZDp0aGlzLmRhdGEuaWQsdmFsdWU6dGhpcy5kYXRhLmZpZWxkVmFsdWUsZGVmYXVsdFZhbHVlOnRoaXMuZGF0YS5kZWZhdWx0RmllbGRWYWx1ZXx8IiIsbXVsdGlsaW5lOnRoaXMuZGF0YS5tdWx0aUxpbmUscGFzc3dvcmQ6dGhpcy5oYXNGaWVsZEZsYWcobi5Bbm5vdGF0aW9uRmllbGRGbGFnLlBBU1NXT1JEKSxjaGFyTGltaXQ6dGhpcy5kYXRhLm1heExlbixjb21iOnRoaXMuZGF0YS5jb21iLGVkaXRhYmxlOiF0aGlzLmRhdGEucmVhZE9ubHksaGlkZGVuOnRoaXMuZGF0YS5oaWRkZW4sbmFtZTp0aGlzLmRhdGEuZmllbGROYW1lLHJlY3Q6dGhpcy5kYXRhLnJlY3QsYWN0aW9uczp0aGlzLmRhdGEuYWN0aW9ucyxwYWdlOnRoaXMuZGF0YS5wYWdlSW5kZXgsc3Ryb2tlQ29sb3I6dGhpcy5kYXRhLmJvcmRlckNvbG9yLGZpbGxDb2xvcjp0aGlzLmRhdGEuYmFja2dyb3VuZENvbG9yLHJvdGF0aW9uOnRoaXMucm90YXRpb24sdHlwZToidGV4dCJ9fX1jbGFzcyBGIGV4dGVuZHMgQ3tjb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLmNoZWNrZWRBcHBlYXJhbmNlPW51bGwsdGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlPW51bGwsdGhpcy5kYXRhLmNoZWNrQm94PSF0aGlzLmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuUkFESU8pJiYhdGhpcy5oYXNGaWVsZEZsYWcobi5Bbm5vdGF0aW9uRmllbGRGbGFnLlBVU0hCVVRUT04pLHRoaXMuZGF0YS5yYWRpb0J1dHRvbj10aGlzLmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuUkFESU8pJiYhdGhpcy5oYXNGaWVsZEZsYWcobi5Bbm5vdGF0aW9uRmllbGRGbGFnLlBVU0hCVVRUT04pLHRoaXMuZGF0YS5wdXNoQnV0dG9uPXRoaXMuaGFzRmllbGRGbGFnKG4uQW5ub3RhdGlvbkZpZWxkRmxhZy5QVVNIQlVUVE9OKSx0aGlzLmRhdGEuaXNUb29sdGlwT25seT0hMSx0aGlzLmRhdGEuY2hlY2tCb3g/dGhpcy5fcHJvY2Vzc0NoZWNrQm94KGUpOnRoaXMuZGF0YS5yYWRpb0J1dHRvbj90aGlzLl9wcm9jZXNzUmFkaW9CdXR0b24oZSk6dGhpcy5kYXRhLnB1c2hCdXR0b24/KHRoaXMuZGF0YS5oYXNPd25DYW52YXM9ITAsdGhpcy5fcHJvY2Vzc1B1c2hCdXR0b24oZSkpOigwLG4ud2FybikoIkludmFsaWQgZmllbGQgZmxhZ3MgZm9yIGJ1dHRvbiB3aWRnZXQgYW5ub3RhdGlvbiIpfWFzeW5jIGdldE9wZXJhdG9yTGlzdChlLHQscixhLGkpe2lmKHRoaXMuZGF0YS5wdXNoQnV0dG9uKXJldHVybiBzdXBlci5nZXRPcGVyYXRvckxpc3QoZSx0LHIsITEsaSk7bGV0IHM9bnVsbCxvPW51bGw7aWYoaSl7Y29uc3QgZT1pLmdldCh0aGlzLmRhdGEuaWQpO3M9ZT9lLnZhbHVlOm51bGwsbz1lP2Uucm90YXRpb246bnVsbH1pZihudWxsPT09cyYmdGhpcy5hcHBlYXJhbmNlKXJldHVybiBzdXBlci5nZXRPcGVyYXRvckxpc3QoZSx0LHIsYSxpKTtudWxsPT1zJiYocz10aGlzLmRhdGEuY2hlY2tCb3g/dGhpcy5kYXRhLmZpZWxkVmFsdWU9PT10aGlzLmRhdGEuZXhwb3J0VmFsdWU6dGhpcy5kYXRhLmZpZWxkVmFsdWU9PT10aGlzLmRhdGEuYnV0dG9uVmFsdWUpO2NvbnN0IGM9cz90aGlzLmNoZWNrZWRBcHBlYXJhbmNlOnRoaXMudW5jaGVja2VkQXBwZWFyYW5jZTtpZihjKXtjb25zdCBzPXRoaXMuYXBwZWFyYW5jZSxsPWMuZGljdC5nZXRBcnJheSgiTWF0cml4Iil8fG4uSURFTlRJVFlfTUFUUklYO28mJmMuZGljdC5zZXQoIk1hdHJpeCIsdGhpcy5nZXRSb3RhdGlvbk1hdHJpeChpKSksdGhpcy5hcHBlYXJhbmNlPWM7Y29uc3QgaD1zdXBlci5nZXRPcGVyYXRvckxpc3QoZSx0LHIsYSxpKTtyZXR1cm4gdGhpcy5hcHBlYXJhbmNlPXMsYy5kaWN0LnNldCgiTWF0cml4IixsKSxofXJldHVybntvcExpc3Q6bmV3IG0uT3BlcmF0b3JMaXN0LHNlcGFyYXRlRm9ybTohMSxzZXBhcmF0ZUNhbnZhczohMX19YXN5bmMgc2F2ZShlLHQscil7cmV0dXJuIHRoaXMuZGF0YS5jaGVja0JveD90aGlzLl9zYXZlQ2hlY2tib3goZSx0LHIpOnRoaXMuZGF0YS5yYWRpb0J1dHRvbj90aGlzLl9zYXZlUmFkaW9CdXR0b24oZSx0LHIpOm51bGx9YXN5bmMgX3NhdmVDaGVja2JveChlLHQscil7aWYoIXIpcmV0dXJuIG51bGw7Y29uc3QgYT1yLmdldCh0aGlzLmRhdGEuaWQpO2xldCBpPW51bGw9PWE/dm9pZCAwOmEucm90YXRpb24sbz1udWxsPT1hP3ZvaWQgMDphLnZhbHVlO2lmKHZvaWQgMD09PWkpe2lmKHZvaWQgMD09PW8pcmV0dXJuIG51bGw7aWYodGhpcy5kYXRhLmZpZWxkVmFsdWU9PT10aGlzLmRhdGEuZXhwb3J0VmFsdWU9PT1vKXJldHVybiBudWxsfWNvbnN0IGw9ZS54cmVmLmZldGNoSWZSZWYodGhpcy5yZWYpO2lmKCEobCBpbnN0YW5jZW9mIHMuRGljdCkpcmV0dXJuIG51bGw7dm9pZCAwPT09aSYmKGk9dGhpcy5yb3RhdGlvbiksdm9pZCAwPT09byYmKG89dGhpcy5kYXRhLmZpZWxkVmFsdWU9PT10aGlzLmRhdGEuZXhwb3J0VmFsdWUpO2NvbnN0IGg9e3BhdGg6dGhpcy5kYXRhLmZpZWxkTmFtZSx2YWx1ZTpvP3RoaXMuZGF0YS5leHBvcnRWYWx1ZToiIn0sdT1zLk5hbWUuZ2V0KG8/dGhpcy5kYXRhLmV4cG9ydFZhbHVlOiJPZmYiKTtsLnNldCgiViIsdSksbC5zZXQoIkFTIix1KSxsLnNldCgiTSIsIkQ6Ii5jb25jYXQoKDAsbi5nZXRNb2RpZmljYXRpb25EYXRlKSgpKSk7Y29uc3QgZD10aGlzLl9nZXRNS0RpY3QoaSk7ZCYmbC5zZXQoIk1LIixkKTtjb25zdCBmPWUueHJlZi5lbmNyeXB0O2xldCBnPW51bGw7ZiYmKGc9Zi5jcmVhdGVDaXBoZXJUcmFuc2Zvcm0odGhpcy5yZWYubnVtLHRoaXMucmVmLmdlbikpO2NvbnN0IHA9WyIiLmNvbmNhdCh0aGlzLnJlZi5udW0sIiAiKS5jb25jYXQodGhpcy5yZWYuZ2VuLCIgb2JqXG4iKV07cmV0dXJuIGF3YWl0KDAsYy53cml0ZURpY3QpKGwscCxnKSxwLnB1c2goIlxuZW5kb2JqXG4iKSxbe3JlZjp0aGlzLnJlZixkYXRhOnAuam9pbigiIikseGZhOmh9XX1hc3luYyBfc2F2ZVJhZGlvQnV0dG9uKGUsdCxyKXtpZighcilyZXR1cm4gbnVsbDtjb25zdCBhPXIuZ2V0KHRoaXMuZGF0YS5pZCk7bGV0IGk9bnVsbD09YT92b2lkIDA6YS5yb3RhdGlvbixvPW51bGw9PWE/dm9pZCAwOmEudmFsdWU7aWYodm9pZCAwPT09aSl7aWYodm9pZCAwPT09bylyZXR1cm4gbnVsbDtpZih0aGlzLmRhdGEuZmllbGRWYWx1ZT09PXRoaXMuZGF0YS5idXR0b25WYWx1ZT09PW8pcmV0dXJuIG51bGx9Y29uc3QgbD1lLnhyZWYuZmV0Y2hJZlJlZih0aGlzLnJlZik7aWYoIShsIGluc3RhbmNlb2Ygcy5EaWN0KSlyZXR1cm4gbnVsbDt2b2lkIDA9PT1vJiYobz10aGlzLmRhdGEuZmllbGRWYWx1ZT09PXRoaXMuZGF0YS5idXR0b25WYWx1ZSksdm9pZCAwPT09aSYmKGk9dGhpcy5yb3RhdGlvbik7Y29uc3QgaD17cGF0aDp0aGlzLmRhdGEuZmllbGROYW1lLHZhbHVlOm8/dGhpcy5kYXRhLmJ1dHRvblZhbHVlOiIifSx1PXMuTmFtZS5nZXQobz90aGlzLmRhdGEuYnV0dG9uVmFsdWU6Ik9mZiIpO2xldCBkPW51bGw7Y29uc3QgZj1lLnhyZWYuZW5jcnlwdDtpZihvKWlmKHRoaXMucGFyZW50IGluc3RhbmNlb2Ygcy5SZWYpe2NvbnN0IHQ9ZS54cmVmLmZldGNoKHRoaXMucGFyZW50KTtsZXQgcj1udWxsO2YmJihyPWYuY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKHRoaXMucGFyZW50Lm51bSx0aGlzLnBhcmVudC5nZW4pKSx0LnNldCgiViIsdSksZD1bIiIuY29uY2F0KHRoaXMucGFyZW50Lm51bSwiICIpLmNvbmNhdCh0aGlzLnBhcmVudC5nZW4sIiBvYmpcbiIpXSxhd2FpdCgwLGMud3JpdGVEaWN0KSh0LGQsciksZC5wdXNoKCJcbmVuZG9ialxuIil9ZWxzZSB0aGlzLnBhcmVudCBpbnN0YW5jZW9mIHMuRGljdCYmdGhpcy5wYXJlbnQuc2V0KCJWIix1KTtsLnNldCgiQVMiLHUpLGwuc2V0KCJNIiwiRDoiLmNvbmNhdCgoMCxuLmdldE1vZGlmaWNhdGlvbkRhdGUpKCkpKTtjb25zdCBnPXRoaXMuX2dldE1LRGljdChpKTtnJiZsLnNldCgiTUsiLGcpO2xldCBwPW51bGw7ZiYmKHA9Zi5jcmVhdGVDaXBoZXJUcmFuc2Zvcm0odGhpcy5yZWYubnVtLHRoaXMucmVmLmdlbikpO2NvbnN0IG09WyIiLmNvbmNhdCh0aGlzLnJlZi5udW0sIiAiKS5jb25jYXQodGhpcy5yZWYuZ2VuLCIgb2JqXG4iKV07YXdhaXQoMCxjLndyaXRlRGljdCkobCxtLHApLG0ucHVzaCgiXG5lbmRvYmpcbiIpO2NvbnN0IGI9W3tyZWY6dGhpcy5yZWYsZGF0YTptLmpvaW4oIiIpLHhmYTpofV07cmV0dXJuIG51bGwhPT1kJiZiLnB1c2goe3JlZjp0aGlzLnBhcmVudCxkYXRhOmQuam9pbigiIikseGZhOm51bGx9KSxifV9nZXREZWZhdWx0Q2hlY2tlZEFwcGVhcmFuY2UoZSx0KXtjb25zdCByPXRoaXMuZGF0YS5yZWN0WzJdLXRoaXMuZGF0YS5yZWN0WzBdLGk9dGhpcy5kYXRhLnJlY3RbM10tdGhpcy5kYXRhLnJlY3RbMV0sYz1bMCwwLHIsaV0sbD0uOCpNYXRoLm1pbihyLGkpO2xldCBoLHU7ImNoZWNrIj09PXQ/KGg9e3dpZHRoOi43NTUqbCxoZWlnaHQ6LjcwNSpsfSx1PSIzIik6ImRpc2MiPT09dD8oaD17d2lkdGg6Ljc5MSpsLGhlaWdodDouNzA1Kmx9LHU9ImwiKTooMCxuLnVucmVhY2hhYmxlKSgiX2dldERlZmF1bHRDaGVja2VkQXBwZWFyYW5jZSAtIHVuc3VwcG9ydGVkIHR5cGU6ICIuY29uY2F0KHQpKTtjb25zdCBkPSJxIEJUIC9QZGZKc1phRGIgIi5jb25jYXQobCwiIFRmIDAgZyAiKS5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykoKHItaC53aWR0aCkvMiksIiAiKS5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykoKGktaC5oZWlnaHQpLzIpLCIgVGQgKCIpLmNvbmNhdCh1LCIpIFRqIEVUIFEiKSxmPW5ldyBzLkRpY3QoZS54cmVmKTtmLnNldCgiRm9ybVR5cGUiLDEpLGYuc2V0KCJTdWJ0eXBlIixzLk5hbWUuZ2V0KCJGb3JtIikpLGYuc2V0KCJUeXBlIixzLk5hbWUuZ2V0KCJYT2JqZWN0IikpLGYuc2V0KCJCQm94IixjKSxmLnNldCgiTWF0cml4IixbMSwwLDAsMSwwLDBdKSxmLnNldCgiTGVuZ3RoIixkLmxlbmd0aCk7Y29uc3QgZz1uZXcgcy5EaWN0KGUueHJlZikscD1uZXcgcy5EaWN0KGUueHJlZik7cC5zZXQoIlBkZkpzWmFEYiIsdGhpcy5mYWxsYmFja0ZvbnREaWN0KSxnLnNldCgiRm9udCIscCksZi5zZXQoIlJlc291cmNlcyIsZyksdGhpcy5jaGVja2VkQXBwZWFyYW5jZT1uZXcgby5TdHJpbmdTdHJlYW0oZCksdGhpcy5jaGVja2VkQXBwZWFyYW5jZS5kaWN0PWYsdGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMuY2hlY2tlZEFwcGVhcmFuY2UpfV9wcm9jZXNzQ2hlY2tCb3goZSl7Y29uc3QgdD1lLmRpY3QuZ2V0KCJBUCIpO2lmKCEodCBpbnN0YW5jZW9mIHMuRGljdCkpcmV0dXJuO2NvbnN0IHI9dC5nZXQoIk4iKTtpZighKHIgaW5zdGFuY2VvZiBzLkRpY3QpKXJldHVybjtjb25zdCBuPXRoaXMuX2RlY29kZUZvcm1WYWx1ZShlLmRpY3QuZ2V0KCJBUyIpKTsic3RyaW5nIj09dHlwZW9mIG4mJih0aGlzLmRhdGEuZmllbGRWYWx1ZT1uKTtjb25zdCBhPW51bGwhPT10aGlzLmRhdGEuZmllbGRWYWx1ZSYmIk9mZiIhPT10aGlzLmRhdGEuZmllbGRWYWx1ZT90aGlzLmRhdGEuZmllbGRWYWx1ZToiWWVzIixpPXIuZ2V0S2V5cygpO2lmKDA9PT1pLmxlbmd0aClpLnB1c2goIk9mZiIsYSk7ZWxzZSBpZigxPT09aS5sZW5ndGgpIk9mZiI9PT1pWzBdP2kucHVzaChhKTppLnVuc2hpZnQoIk9mZiIpO2Vsc2UgaWYoaS5pbmNsdWRlcyhhKSlpLmxlbmd0aD0wLGkucHVzaCgiT2ZmIixhKTtlbHNle2NvbnN0IGU9aS5maW5kKChlPT4iT2ZmIiE9PWUpKTtpLmxlbmd0aD0wLGkucHVzaCgiT2ZmIixlKX1pLmluY2x1ZGVzKHRoaXMuZGF0YS5maWVsZFZhbHVlKXx8KHRoaXMuZGF0YS5maWVsZFZhbHVlPSJPZmYiKSx0aGlzLmRhdGEuZXhwb3J0VmFsdWU9aVsxXTtjb25zdCBvPXIuZ2V0KHRoaXMuZGF0YS5leHBvcnRWYWx1ZSk7dGhpcy5jaGVja2VkQXBwZWFyYW5jZT1vIGluc3RhbmNlb2YgbC5CYXNlU3RyZWFtP286bnVsbDtjb25zdCBjPXIuZ2V0KCJPZmYiKTt0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2U9YyBpbnN0YW5jZW9mIGwuQmFzZVN0cmVhbT9jOm51bGwsdGhpcy5jaGVja2VkQXBwZWFyYW5jZT90aGlzLl9zdHJlYW1zLnB1c2godGhpcy5jaGVja2VkQXBwZWFyYW5jZSk6dGhpcy5fZ2V0RGVmYXVsdENoZWNrZWRBcHBlYXJhbmNlKGUsImNoZWNrIiksdGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlJiZ0aGlzLl9zdHJlYW1zLnB1c2godGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlKSx0aGlzLl9mYWxsYmFja0ZvbnREaWN0PXRoaXMuZmFsbGJhY2tGb250RGljdH1fcHJvY2Vzc1JhZGlvQnV0dG9uKGUpe3RoaXMuZGF0YS5maWVsZFZhbHVlPXRoaXMuZGF0YS5idXR0b25WYWx1ZT1udWxsO2NvbnN0IHQ9ZS5kaWN0LmdldCgiUGFyZW50Iik7aWYodCBpbnN0YW5jZW9mIHMuRGljdCl7dGhpcy5wYXJlbnQ9ZS5kaWN0LmdldFJhdygiUGFyZW50Iik7Y29uc3Qgcj10LmdldCgiViIpO3IgaW5zdGFuY2VvZiBzLk5hbWUmJih0aGlzLmRhdGEuZmllbGRWYWx1ZT10aGlzLl9kZWNvZGVGb3JtVmFsdWUocikpfWNvbnN0IHI9ZS5kaWN0LmdldCgiQVAiKTtpZighKHIgaW5zdGFuY2VvZiBzLkRpY3QpKXJldHVybjtjb25zdCBuPXIuZ2V0KCJOIik7aWYoIShuIGluc3RhbmNlb2Ygcy5EaWN0KSlyZXR1cm47Zm9yKGNvbnN0IGUgb2Ygbi5nZXRLZXlzKCkpaWYoIk9mZiIhPT1lKXt0aGlzLmRhdGEuYnV0dG9uVmFsdWU9dGhpcy5fZGVjb2RlRm9ybVZhbHVlKGUpO2JyZWFrfWNvbnN0IGE9bi5nZXQodGhpcy5kYXRhLmJ1dHRvblZhbHVlKTt0aGlzLmNoZWNrZWRBcHBlYXJhbmNlPWEgaW5zdGFuY2VvZiBsLkJhc2VTdHJlYW0/YTpudWxsO2NvbnN0IGk9bi5nZXQoIk9mZiIpO3RoaXMudW5jaGVja2VkQXBwZWFyYW5jZT1pIGluc3RhbmNlb2YgbC5CYXNlU3RyZWFtP2k6bnVsbCx0aGlzLmNoZWNrZWRBcHBlYXJhbmNlP3RoaXMuX3N0cmVhbXMucHVzaCh0aGlzLmNoZWNrZWRBcHBlYXJhbmNlKTp0aGlzLl9nZXREZWZhdWx0Q2hlY2tlZEFwcGVhcmFuY2UoZSwiZGlzYyIpLHRoaXMudW5jaGVja2VkQXBwZWFyYW5jZSYmdGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMudW5jaGVja2VkQXBwZWFyYW5jZSksdGhpcy5fZmFsbGJhY2tGb250RGljdD10aGlzLmZhbGxiYWNrRm9udERpY3R9X3Byb2Nlc3NQdXNoQnV0dG9uKGUpe2UuZGljdC5oYXMoIkEiKXx8ZS5kaWN0LmhhcygiQUEiKXx8dGhpcy5kYXRhLmFsdGVybmF0aXZlVGV4dD8odGhpcy5kYXRhLmlzVG9vbHRpcE9ubHk9IWUuZGljdC5oYXMoIkEiKSYmIWUuZGljdC5oYXMoIkFBIiksdS5DYXRhbG9nLnBhcnNlRGVzdERpY3Rpb25hcnkoe2Rlc3REaWN0OmUuZGljdCxyZXN1bHRPYmo6dGhpcy5kYXRhLGRvY0Jhc2VVcmw6ZS5wZGZNYW5hZ2VyLmRvY0Jhc2VVcmwsZG9jQXR0YWNobWVudHM6ZS5hdHRhY2htZW50c30pKTooMCxuLndhcm4pKCJQdXNoIGJ1dHRvbnMgd2l0aG91dCBhY3Rpb24gZGljdGlvbmFyaWVzIGFyZSBub3Qgc3VwcG9ydGVkIil9Z2V0RmllbGRPYmplY3QoKXtsZXQgZSx0PSJidXR0b24iO3JldHVybiB0aGlzLmRhdGEuY2hlY2tCb3g/KHQ9ImNoZWNrYm94IixlPXRoaXMuZGF0YS5leHBvcnRWYWx1ZSk6dGhpcy5kYXRhLnJhZGlvQnV0dG9uJiYodD0icmFkaW9idXR0b24iLGU9dGhpcy5kYXRhLmJ1dHRvblZhbHVlKSx7aWQ6dGhpcy5kYXRhLmlkLHZhbHVlOnRoaXMuZGF0YS5maWVsZFZhbHVlfHwiT2ZmIixkZWZhdWx0VmFsdWU6dGhpcy5kYXRhLmRlZmF1bHRGaWVsZFZhbHVlLGV4cG9ydFZhbHVlczplLGVkaXRhYmxlOiF0aGlzLmRhdGEucmVhZE9ubHksbmFtZTp0aGlzLmRhdGEuZmllbGROYW1lLHJlY3Q6dGhpcy5kYXRhLnJlY3QsaGlkZGVuOnRoaXMuZGF0YS5oaWRkZW4sYWN0aW9uczp0aGlzLmRhdGEuYWN0aW9ucyxwYWdlOnRoaXMuZGF0YS5wYWdlSW5kZXgsc3Ryb2tlQ29sb3I6dGhpcy5kYXRhLmJvcmRlckNvbG9yLGZpbGxDb2xvcjp0aGlzLmRhdGEuYmFja2dyb3VuZENvbG9yLHJvdGF0aW9uOnRoaXMucm90YXRpb24sdHlwZTp0fX1nZXQgZmFsbGJhY2tGb250RGljdCgpe2NvbnN0IGU9bmV3IHMuRGljdDtyZXR1cm4gZS5zZXQoIkJhc2VGb250IixzLk5hbWUuZ2V0KCJaYXBmRGluZ2JhdHMiKSksZS5zZXQoIlR5cGUiLHMuTmFtZS5nZXQoIkZhbGxiYWNrVHlwZSIpKSxlLnNldCgiU3VidHlwZSIscy5OYW1lLmdldCgiRmFsbGJhY2tUeXBlIikpLGUuc2V0KCJFbmNvZGluZyIscy5OYW1lLmdldCgiWmFwZkRpbmdiYXRzRW5jb2RpbmciKSksKDAsbi5zaGFkb3cpKHRoaXMsImZhbGxiYWNrRm9udERpY3QiLGUpfX1jbGFzcyBJIGV4dGVuZHMgQ3tjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTtjb25zdHtkaWN0OnQseHJlZjpyfT1lO3RoaXMuaW5kaWNlcz10LmdldEFycmF5KCJJIiksdGhpcy5oYXNJbmRpY2VzPUFycmF5LmlzQXJyYXkodGhpcy5pbmRpY2VzKSYmdGhpcy5pbmRpY2VzLmxlbmd0aD4wLHRoaXMuZGF0YS5vcHRpb25zPVtdO2NvbnN0IGk9KDAsYS5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7ZGljdDp0LGtleToiT3B0In0pO2lmKEFycmF5LmlzQXJyYXkoaSkpZm9yKGxldCBlPTAsdD1pLmxlbmd0aDtlPHQ7ZSsrKXtjb25zdCB0PXIuZmV0Y2hJZlJlZihpW2VdKSxuPUFycmF5LmlzQXJyYXkodCk7dGhpcy5kYXRhLm9wdGlvbnNbZV09e2V4cG9ydFZhbHVlOnRoaXMuX2RlY29kZUZvcm1WYWx1ZShuP3IuZmV0Y2hJZlJlZih0WzBdKTp0KSxkaXNwbGF5VmFsdWU6dGhpcy5fZGVjb2RlRm9ybVZhbHVlKG4/ci5mZXRjaElmUmVmKHRbMV0pOnQpfX1pZih0aGlzLmhhc0luZGljZXMpe3RoaXMuZGF0YS5maWVsZFZhbHVlPVtdO2NvbnN0IGU9dGhpcy5kYXRhLm9wdGlvbnMubGVuZ3RoO2Zvcihjb25zdCB0IG9mIHRoaXMuaW5kaWNlcylOdW1iZXIuaXNJbnRlZ2VyKHQpJiZ0Pj0wJiZ0PGUmJnRoaXMuZGF0YS5maWVsZFZhbHVlLnB1c2godGhpcy5kYXRhLm9wdGlvbnNbdF0uZXhwb3J0VmFsdWUpfWVsc2Uic3RyaW5nIj09dHlwZW9mIHRoaXMuZGF0YS5maWVsZFZhbHVlP3RoaXMuZGF0YS5maWVsZFZhbHVlPVt0aGlzLmRhdGEuZmllbGRWYWx1ZV06dGhpcy5kYXRhLmZpZWxkVmFsdWV8fCh0aGlzLmRhdGEuZmllbGRWYWx1ZT1bXSk7dGhpcy5kYXRhLmNvbWJvPXRoaXMuaGFzRmllbGRGbGFnKG4uQW5ub3RhdGlvbkZpZWxkRmxhZy5DT01CTyksdGhpcy5kYXRhLm11bHRpU2VsZWN0PXRoaXMuaGFzRmllbGRGbGFnKG4uQW5ub3RhdGlvbkZpZWxkRmxhZy5NVUxUSVNFTEVDVCksdGhpcy5faGFzVGV4dD0hMH1nZXRGaWVsZE9iamVjdCgpe2NvbnN0IGU9dGhpcy5kYXRhLmNvbWJvPyJjb21ib2JveCI6Imxpc3Rib3giLHQ9dGhpcy5kYXRhLmZpZWxkVmFsdWUubGVuZ3RoPjA/dGhpcy5kYXRhLmZpZWxkVmFsdWVbMF06bnVsbDtyZXR1cm57aWQ6dGhpcy5kYXRhLmlkLHZhbHVlOnQsZGVmYXVsdFZhbHVlOnRoaXMuZGF0YS5kZWZhdWx0RmllbGRWYWx1ZSxlZGl0YWJsZTohdGhpcy5kYXRhLnJlYWRPbmx5LG5hbWU6dGhpcy5kYXRhLmZpZWxkTmFtZSxyZWN0OnRoaXMuZGF0YS5yZWN0LG51bUl0ZW1zOnRoaXMuZGF0YS5maWVsZFZhbHVlLmxlbmd0aCxtdWx0aXBsZVNlbGVjdGlvbjp0aGlzLmRhdGEubXVsdGlTZWxlY3QsaGlkZGVuOnRoaXMuZGF0YS5oaWRkZW4sYWN0aW9uczp0aGlzLmRhdGEuYWN0aW9ucyxpdGVtczp0aGlzLmRhdGEub3B0aW9ucyxwYWdlOnRoaXMuZGF0YS5wYWdlSW5kZXgsc3Ryb2tlQ29sb3I6dGhpcy5kYXRhLmJvcmRlckNvbG9yLGZpbGxDb2xvcjp0aGlzLmRhdGEuYmFja2dyb3VuZENvbG9yLHJvdGF0aW9uOnRoaXMucm90YXRpb24sdHlwZTplfX1hbWVuZFNhdmVkRGljdChlLHQpe3ZhciByO2lmKCF0aGlzLmhhc0luZGljZXMpcmV0dXJuO2xldCBuPW51bGw9PWV8fG51bGw9PT0ocj1lLmdldCh0aGlzLmRhdGEuaWQpKXx8dm9pZCAwPT09cj92b2lkIDA6ci52YWx1ZTtBcnJheS5pc0FycmF5KG4pfHwobj1bbl0pO2NvbnN0IGE9W10se29wdGlvbnM6aX09dGhpcy5kYXRhO2ZvcihsZXQgZT0wLHQ9MCxyPWkubGVuZ3RoO2U8cjtlKyspaVtlXS5leHBvcnRWYWx1ZT09PW5bdF0mJihhLnB1c2goZSksdCs9MSk7dC5zZXQoIkkiLGEpfWFzeW5jIF9nZXRBcHBlYXJhbmNlKGUsdCxyLGEpe2lmKHRoaXMuZGF0YS5jb21ibylyZXR1cm4gc3VwZXIuX2dldEFwcGVhcmFuY2UoZSx0LHIsYSk7bGV0IHMsbztjb25zdCBjPW51bGw9PWE/dm9pZCAwOmEuZ2V0KHRoaXMuZGF0YS5pZCk7aWYoYyYmKG89Yy5yb3RhdGlvbixzPWMudmFsdWUpLHZvaWQgMD09PW8mJnZvaWQgMD09PXMmJiF0aGlzLl9uZWVkQXBwZWFyYW5jZXMpcmV0dXJuIG51bGw7dm9pZCAwPT09cz9zPXRoaXMuZGF0YS5maWVsZFZhbHVlOkFycmF5LmlzQXJyYXkocyl8fChzPVtzXSk7bGV0IGw9dGhpcy5kYXRhLnJlY3RbM10tdGhpcy5kYXRhLnJlY3RbMV0saD10aGlzLmRhdGEucmVjdFsyXS10aGlzLmRhdGEucmVjdFswXTs5MCE9PW8mJjI3MCE9PW98fChbaCxsXT1bbCxoXSk7Y29uc3QgdT10aGlzLmRhdGEub3B0aW9ucy5sZW5ndGgsZD1bXTtmb3IobGV0IGU9MDtlPHU7ZSsrKXtjb25zdHtleHBvcnRWYWx1ZTp0fT10aGlzLmRhdGEub3B0aW9uc1tlXTtzLmluY2x1ZGVzKHQpJiZkLnB1c2goZSl9dGhpcy5fZGVmYXVsdEFwcGVhcmFuY2V8fCh0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhPSgwLGkucGFyc2VEZWZhdWx0QXBwZWFyYW5jZSkodGhpcy5fZGVmYXVsdEFwcGVhcmFuY2U9Ii9IZWx2ZXRpY2EgMCBUZiAwIGciKSk7Y29uc3QgZj1hd2FpdCBDLl9nZXRGb250RGF0YShlLHQsdGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YSx0aGlzLl9maWVsZFJlc291cmNlcy5tZXJnZWRSZXNvdXJjZXMpO2xldCBnLHtmb250U2l6ZTpwfT10aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhO2lmKHApZz10aGlzLl9kZWZhdWx0QXBwZWFyYW5jZTtlbHNle2NvbnN0IGU9KGwtMSkvdTtsZXQgdCxyPS0xO2Zvcihjb25zdHtkaXNwbGF5VmFsdWU6ZX1vZiB0aGlzLmRhdGEub3B0aW9ucyl7Y29uc3Qgbj10aGlzLl9nZXRUZXh0V2lkdGgoZSxmKTtuPnImJihyPW4sdD1lKX1bZyxwXT10aGlzLl9jb21wdXRlRm9udFNpemUoZSxoLTQsdCxmLC0xKX1jb25zdCBtPXAqbi5MSU5FX0ZBQ1RPUixiPShtLXApLzIseT1NYXRoLmZsb29yKGwvbSk7bGV0IHc9MDtpZihkLmxlbmd0aD4wKXtjb25zdCBlPU1hdGgubWluKC4uLmQpLHQ9TWF0aC5tYXgoLi4uZCk7dz1NYXRoLm1heCgwLHQteSsxKSx3PmUmJih3PWUpfWNvbnN0IHY9TWF0aC5taW4odyt5KzEsdSkseD1bIi9UeCBCTUMgcSIsIjEgMSAiLmNvbmNhdChoLCIgIikuY29uY2F0KGwsIiByZSBXIG4iKV07aWYoZC5sZW5ndGgpe3gucHVzaCgiMC42MDAwMDYgMC43NTY4NjYgMC44NTQ5MDQgcmciKTtmb3IoY29uc3QgZSBvZiBkKXc8PWUmJmU8diYmeC5wdXNoKCIxICIuY29uY2F0KGwtKGUtdysxKSptLCIgIikuY29uY2F0KGgsIiAiKS5jb25jYXQobSwiIHJlIGYiKSl9eC5wdXNoKCJCVCIsZywiMSAwIDAgMSAwICIuY29uY2F0KGwsIiBUbSIpKTtjb25zdCBTPXtzaGlmdDowfTtmb3IobGV0IGU9dztlPHY7ZSsrKXtjb25zdHtkaXNwbGF5VmFsdWU6dH09dGhpcy5kYXRhLm9wdGlvbnNbZV0scj1lPT09dz9iOjA7eC5wdXNoKHRoaXMuX3JlbmRlclRleHQodCxmLHAsaCwwLFMsMiwtbStyKSl9cmV0dXJuIHgucHVzaCgiRVQgUSBFTUMiKSx4LmpvaW4oIlxuIil9fWNsYXNzIFQgZXh0ZW5kcyBDe2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpLHRoaXMuZGF0YS5maWVsZFZhbHVlPW51bGwsdGhpcy5kYXRhLmhhc093bkNhbnZhcz10aGlzLmRhdGEubm9Sb3RhdGV9Z2V0RmllbGRPYmplY3QoKXtyZXR1cm57aWQ6dGhpcy5kYXRhLmlkLHZhbHVlOm51bGwscGFnZTp0aGlzLmRhdGEucGFnZUluZGV4LHR5cGU6InNpZ25hdHVyZSJ9fX1jbGFzcyBNIGV4dGVuZHMga3tjb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLmRhdGEubm9Sb3RhdGU9ITAsdGhpcy5kYXRhLmhhc093bkNhbnZhcz10aGlzLmRhdGEubm9Sb3RhdGU7Y29uc3R7ZGljdDp0fT1lO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLlRFWFQsdGhpcy5kYXRhLmhhc0FwcGVhcmFuY2U/dGhpcy5kYXRhLm5hbWU9Ik5vSWNvbiI6KHRoaXMuZGF0YS5yZWN0WzFdPXRoaXMuZGF0YS5yZWN0WzNdLTIyLHRoaXMuZGF0YS5yZWN0WzJdPXRoaXMuZGF0YS5yZWN0WzBdKzIyLHRoaXMuZGF0YS5uYW1lPXQuaGFzKCJOYW1lIik/dC5nZXQoIk5hbWUiKS5uYW1lOiJOb3RlIiksdC5oYXMoIlN0YXRlIik/KHRoaXMuZGF0YS5zdGF0ZT10LmdldCgiU3RhdGUiKXx8bnVsbCx0aGlzLmRhdGEuc3RhdGVNb2RlbD10LmdldCgiU3RhdGVNb2RlbCIpfHxudWxsKToodGhpcy5kYXRhLnN0YXRlPW51bGwsdGhpcy5kYXRhLnN0YXRlTW9kZWw9bnVsbCl9fWNsYXNzIEUgZXh0ZW5kcyBTe2NvbnN0cnVjdG9yKGUpe3ZhciB0O3N1cGVyKGUpLHRoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLkxJTks7Y29uc3Qgcj12KGUuZGljdCx0aGlzLnJlY3RhbmdsZSk7ciYmKHRoaXMuZGF0YS5xdWFkUG9pbnRzPXIpLCh0PXRoaXMuZGF0YSkuYm9yZGVyQ29sb3J8fCh0LmJvcmRlckNvbG9yPXRoaXMuZGF0YS5jb2xvciksdS5DYXRhbG9nLnBhcnNlRGVzdERpY3Rpb25hcnkoe2Rlc3REaWN0OmUuZGljdCxyZXN1bHRPYmo6dGhpcy5kYXRhLGRvY0Jhc2VVcmw6ZS5wZGZNYW5hZ2VyLmRvY0Jhc2VVcmwsZG9jQXR0YWNobWVudHM6ZS5hdHRhY2htZW50c30pfX1jbGFzcyBQIGV4dGVuZHMgU3tjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTtjb25zdHtkaWN0OnR9PWU7dGhpcy5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuUE9QVVAsdGhpcy5kYXRhLnJlY3RbMF0hPT10aGlzLmRhdGEucmVjdFsyXSYmdGhpcy5kYXRhLnJlY3RbMV0hPT10aGlzLmRhdGEucmVjdFszXXx8KHRoaXMuZGF0YS5yZWN0PW51bGwpO2xldCByPXQuZ2V0KCJQYXJlbnQiKTtpZighcilyZXR1cm4gdm9pZCgwLG4ud2FybikoIlBvcHVwIGFubm90YXRpb24gaGFzIGEgbWlzc2luZyBvciBpbnZhbGlkIHBhcmVudCBhbm5vdGF0aW9uLiIpO2NvbnN0IGE9ci5nZXRBcnJheSgiUmVjdCIpO3RoaXMuZGF0YS5wYXJlbnRSZWN0PUFycmF5LmlzQXJyYXkoYSkmJjQ9PT1hLmxlbmd0aD9uLlV0aWwubm9ybWFsaXplUmVjdChhKTpudWxsO2NvbnN0IGk9ci5nZXQoIlJUIik7aWYoKDAscy5pc05hbWUpKGksbi5Bbm5vdGF0aW9uUmVwbHlUeXBlLkdST1VQKSYmKHI9ci5nZXQoIklSVCIpKSxyLmhhcygiTSIpPyh0aGlzLnNldE1vZGlmaWNhdGlvbkRhdGUoci5nZXQoIk0iKSksdGhpcy5kYXRhLm1vZGlmaWNhdGlvbkRhdGU9dGhpcy5tb2RpZmljYXRpb25EYXRlKTp0aGlzLmRhdGEubW9kaWZpY2F0aW9uRGF0ZT1udWxsLHIuaGFzKCJDIik/KHRoaXMuc2V0Q29sb3Ioci5nZXRBcnJheSgiQyIpKSx0aGlzLmRhdGEuY29sb3I9dGhpcy5jb2xvcik6dGhpcy5kYXRhLmNvbG9yPW51bGwsIXRoaXMudmlld2FibGUpe2NvbnN0IGU9ci5nZXQoIkYiKTt0aGlzLl9pc1ZpZXdhYmxlKGUpJiZ0aGlzLnNldEZsYWdzKGUpfXRoaXMuc2V0VGl0bGUoci5nZXQoIlQiKSksdGhpcy5kYXRhLnRpdGxlT2JqPXRoaXMuX3RpdGxlLHRoaXMuc2V0Q29udGVudHMoci5nZXQoIkNvbnRlbnRzIikpLHRoaXMuZGF0YS5jb250ZW50c09iaj10aGlzLl9jb250ZW50cyxyLmhhcygiUkMiKSYmKHRoaXMuZGF0YS5yaWNoVGV4dD1iLlhGQUZhY3RvcnkuZ2V0UmljaFRleHRBc0h0bWwoci5nZXQoIlJDIikpKSx0aGlzLmRhdGEub3Blbj0hIXQuZ2V0KCJPcGVuIil9fXQuUG9wdXBBbm5vdGF0aW9uPVA7Y2xhc3MgUiBleHRlbmRzIGt7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksdGhpcy5kYXRhLmhhc093bkNhbnZhcz0hMDtjb25zdHtldmFsdWF0b3JPcHRpb25zOnQseHJlZjpyfT1lO2lmKHRoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLkZSRUVURVhULHRoaXMuc2V0RGVmYXVsdEFwcGVhcmFuY2UoZSksdGhpcy5hcHBlYXJhbmNlKXtjb25zdHtmb250Q29sb3I6ZSxmb250U2l6ZTpufT0oMCxpLnBhcnNlQXBwZWFyYW5jZVN0cmVhbSkodGhpcy5hcHBlYXJhbmNlLHQscik7dGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YS5mb250Q29sb3I9ZSx0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhLmZvbnRTaXplPW58fDEwfWVsc2UgaWYodGhpcy5faXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQpe3ZhciBhO2NvbnN0IHQ9ZS5kaWN0LmdldCgiQ0EiKSxuPW5ldyBpLkZha2VVbmljb2RlRm9udChyLCJzYW5zLXNlcmlmIik7KGE9dGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YSkuZm9udFNpemV8fChhLmZvbnRTaXplPTEwKTtjb25zdHtmb250Q29sb3I6cyxmb250U2l6ZTpvfT10aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhO3RoaXMuYXBwZWFyYW5jZT1uLmNyZWF0ZUFwcGVhcmFuY2UodGhpcy5fY29udGVudHMuc3RyLHRoaXMucmVjdGFuZ2xlLHRoaXMucm90YXRpb24sbyxzLHQpLHRoaXMuX3N0cmVhbXMucHVzaCh0aGlzLmFwcGVhcmFuY2UsaS5GYWtlVW5pY29kZUZvbnQudG9Vbmljb2RlU3RyZWFtKX1lbHNlKDAsbi53YXJuKSgiRnJlZVRleHRBbm5vdGF0aW9uOiBPZmZzY3JlZW5DYW52YXMgaXMgbm90IHN1cHBvcnRlZCwgYW5ub3RhdGlvbiBtYXkgbm90IHJlbmRlciBjb3JyZWN0bHkuIil9Z2V0IGhhc1RleHRDb250ZW50KCl7cmV0dXJuISF0aGlzLmFwcGVhcmFuY2V9c3RhdGljIGNyZWF0ZU5ld0RpY3QoZSx0LHIpe2xldHthcFJlZjpvLGFwOmN9PXI7Y29uc3R7Y29sb3I6bCxmb250U2l6ZTpoLHJlY3Q6dSxyb3RhdGlvbjpkLHVzZXI6Zix2YWx1ZTpnfT1lLHA9bmV3IHMuRGljdCh0KTtwLnNldCgiVHlwZSIscy5OYW1lLmdldCgiQW5ub3QiKSkscC5zZXQoIlN1YnR5cGUiLHMuTmFtZS5nZXQoIkZyZWVUZXh0IikpLHAuc2V0KCJDcmVhdGlvbkRhdGUiLCJEOiIuY29uY2F0KCgwLG4uZ2V0TW9kaWZpY2F0aW9uRGF0ZSkoKSkpLHAuc2V0KCJSZWN0Iix1KTtjb25zdCBtPSIvSGVsdiAiLmNvbmNhdChoLCIgVGYgIikuY29uY2F0KCgwLGkuZ2V0UGRmQ29sb3IpKGwsITApKTtpZihwLnNldCgiREEiLG0pLHAuc2V0KCJDb250ZW50cyIsKDAsYS5pc0FzY2lpKShnKT9nOigwLGEuc3RyaW5nVG9VVEYxNlN0cmluZykoZywhMCkpLHAuc2V0KCJGIiw0KSxwLnNldCgiQm9yZGVyIixbMCwwLDBdKSxwLnNldCgiUm90YXRlIixkKSxmJiZwLnNldCgiVCIsKDAsYS5pc0FzY2lpKShmKT9mOigwLGEuc3RyaW5nVG9VVEYxNlN0cmluZykoZiwhMCkpLG98fGMpe2NvbnN0IGU9bmV3IHMuRGljdCh0KTtwLnNldCgiQVAiLGUpLG8/ZS5zZXQoIk4iLG8pOmUuc2V0KCJOIixjKX1yZXR1cm4gcH1zdGF0aWMgYXN5bmMgY3JlYXRlTmV3QXBwZWFyYW5jZVN0cmVhbShlLHQscil7Y29uc3R7YmFzZUZvbnRSZWY6YyxldmFsdWF0b3I6bCx0YXNrOmh9PXIse2NvbG9yOnUsZm9udFNpemU6ZCxyZWN0OmYscm90YXRpb246Zyx2YWx1ZTpwfT1lLG09bmV3IHMuRGljdCh0KSxiPW5ldyBzLkRpY3QodCk7aWYoYyliLnNldCgiSGVsdiIsYyk7ZWxzZXtjb25zdCBlPW5ldyBzLkRpY3QodCk7ZS5zZXQoIkJhc2VGb250IixzLk5hbWUuZ2V0KCJIZWx2ZXRpY2EiKSksZS5zZXQoIlR5cGUiLHMuTmFtZS5nZXQoIkZvbnQiKSksZS5zZXQoIlN1YnR5cGUiLHMuTmFtZS5nZXQoIlR5cGUxIikpLGUuc2V0KCJFbmNvZGluZyIscy5OYW1lLmdldCgiV2luQW5zaUVuY29kaW5nIikpLGIuc2V0KCJIZWx2IixlKX1tLnNldCgiRm9udCIsYik7Y29uc3QgeT1hd2FpdCBDLl9nZXRGb250RGF0YShsLGgse2ZvbnROYW1lOiJIZWx2Iixmb250U2l6ZTpkfSxtKSxbdyx2LHgsU109ZjtsZXQgQT14LXcsaz1TLXY7ZyUxODAhPTAmJihbQSxrXT1bayxBXSk7Y29uc3QgTz1wLnNwbGl0KCJcbiIpLEY9ZC8xZTM7bGV0IEk9LTEvMDtjb25zdCBUPVtdO2ZvcihsZXQgZSBvZiBPKXtjb25zdCB0PXkuZW5jb2RlU3RyaW5nKGUpO2lmKHQubGVuZ3RoPjEpcmV0dXJuIG51bGw7ZT10LmpvaW4oIiIpLFQucHVzaChlKTtsZXQgcj0wO2NvbnN0IG49eS5jaGFyc1RvR2x5cGhzKGUpO2Zvcihjb25zdCBlIG9mIG4pcis9ZS53aWR0aCpGO0k9TWF0aC5tYXgoSSxyKX1sZXQgTT0xO0k+QSYmKE09QS9JKTtsZXQgRT0xO2NvbnN0IFA9bi5MSU5FX0ZBQ1RPUipkLFI9KG4uTElORV9GQUNUT1Itbi5MSU5FX0RFU0NFTlRfRkFDVE9SKSpkLE49UCpPLmxlbmd0aDtOPmsmJihFPWsvTik7Y29uc3QgRD1kKk1hdGgubWluKE0sRSk7bGV0IEIsTCxfO3N3aXRjaChnKXtjYXNlIDA6Xz1bMSwwLDAsMV0sTD1bZlswXSxmWzFdLEEsa10sQj1bZlswXSxmWzNdLVJdO2JyZWFrO2Nhc2UgOTA6Xz1bMCwxLC0xLDBdLEw9W2ZbMV0sLWZbMl0sQSxrXSxCPVtmWzFdLC1mWzBdLVJdO2JyZWFrO2Nhc2UgMTgwOl89Wy0xLDAsMCwtMV0sTD1bLWZbMl0sLWZbM10sQSxrXSxCPVstZlsyXSwtZlsxXS1SXTticmVhaztjYXNlIDI3MDpfPVswLC0xLDEsMF0sTD1bLWZbM10sZlswXSxBLGtdLEI9Wy1mWzNdLGZbMl0tUl19Y29uc3Qgaj1bInEiLCIiLmNvbmNhdChfLmpvaW4oIiAiKSwiIDAgMCBjbSIpLCIiLmNvbmNhdChMLmpvaW4oIiAiKSwiIHJlIFcgbiIpLCJCVCIsIiIuY29uY2F0KCgwLGkuZ2V0UGRmQ29sb3IpKHUsITApKSwiMCBUYyAvSGVsdiAiLmNvbmNhdCgoMCxhLm51bWJlclRvU3RyaW5nKShEKSwiIFRmIildO2oucHVzaCgiIi5jb25jYXQoQi5qb2luKCIgIiksIiBUZCAoIikuY29uY2F0KCgwLGEuZXNjYXBlU3RyaW5nKShUWzBdKSwiKSBUaiIpKTtjb25zdCBVPSgwLGEubnVtYmVyVG9TdHJpbmcpKFApO2ZvcihsZXQgZT0xLHQ9VC5sZW5ndGg7ZTx0O2UrKyl7Y29uc3QgdD1UW2VdO2oucHVzaCgiMCAtIi5jb25jYXQoVSwiIFRkICgiKS5jb25jYXQoKDAsYS5lc2NhcGVTdHJpbmcpKHQpLCIpIFRqIikpfWoucHVzaCgiRVQiLCJRIik7Y29uc3QgJD1qLmpvaW4oIlxuIiksWD1uZXcgcy5EaWN0KHQpO1guc2V0KCJGb3JtVHlwZSIsMSksWC5zZXQoIlN1YnR5cGUiLHMuTmFtZS5nZXQoIkZvcm0iKSksWC5zZXQoIlR5cGUiLHMuTmFtZS5nZXQoIlhPYmplY3QiKSksWC5zZXQoIkJCb3giLGYpLFguc2V0KCJSZXNvdXJjZXMiLG0pLFguc2V0KCJNYXRyaXgiLFsxLDAsMCwxLC1mWzBdLC1mWzFdXSk7Y29uc3QgSD1uZXcgby5TdHJpbmdTdHJlYW0oJCk7cmV0dXJuIEguZGljdD1YLEh9fWNsYXNzIE4gZXh0ZW5kcyBre2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO2NvbnN0e2RpY3Q6dCx4cmVmOnJ9PWU7dGhpcy5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuTElORSx0aGlzLmRhdGEuaGFzT3duQ2FudmFzPXRoaXMuZGF0YS5ub1JvdGF0ZTtjb25zdCBhPXQuZ2V0QXJyYXkoIkwiKTtpZih0aGlzLmRhdGEubGluZUNvb3JkaW5hdGVzPW4uVXRpbC5ub3JtYWxpemVSZWN0KGEpLHRoaXMuc2V0TGluZUVuZGluZ3ModC5nZXRBcnJheSgiTEUiKSksdGhpcy5kYXRhLmxpbmVFbmRpbmdzPXRoaXMubGluZUVuZGluZ3MsIXRoaXMuYXBwZWFyYW5jZSl7Y29uc3QgZT10aGlzLmNvbG9yP3codGhpcy5jb2xvcik6WzAsMCwwXSxpPXQuZ2V0KCJDQSIpLHM9eSh0LmdldEFycmF5KCJJQyIpLG51bGwpLG89cz93KHMpOm51bGwsYz1vP2k6bnVsbCxsPXRoaXMuYm9yZGVyU3R5bGUud2lkdGh8fDEsaD0yKmwsdT1bdGhpcy5kYXRhLmxpbmVDb29yZGluYXRlc1swXS1oLHRoaXMuZGF0YS5saW5lQ29vcmRpbmF0ZXNbMV0taCx0aGlzLmRhdGEubGluZUNvb3JkaW5hdGVzWzJdK2gsdGhpcy5kYXRhLmxpbmVDb29yZGluYXRlc1szXStoXTtuLlV0aWwuaW50ZXJzZWN0KHRoaXMucmVjdGFuZ2xlLHUpfHwodGhpcy5yZWN0YW5nbGU9dSksdGhpcy5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6cixleHRyYToiIi5jb25jYXQobCwiIHciKSxzdHJva2VDb2xvcjplLGZpbGxDb2xvcjpvLHN0cm9rZUFscGhhOmksZmlsbEFscGhhOmMscG9pbnRzQ2FsbGJhY2s6KGUsdCk9PihlLnB1c2goIiIuY29uY2F0KGFbMF0sIiAiKS5jb25jYXQoYVsxXSwiIG0iKSwiIi5jb25jYXQoYVsyXSwiICIpLmNvbmNhdChhWzNdLCIgbCIpLCJTIiksW3RbMF0ueC1sLHRbMV0ueCtsLHRbM10ueS1sLHRbMV0ueStsXSl9KX19fWNsYXNzIEQgZXh0ZW5kcyBre2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO2NvbnN0e2RpY3Q6dCx4cmVmOnJ9PWU7aWYodGhpcy5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuU1FVQVJFLHRoaXMuZGF0YS5oYXNPd25DYW52YXM9dGhpcy5kYXRhLm5vUm90YXRlLCF0aGlzLmFwcGVhcmFuY2Upe2NvbnN0IGU9dGhpcy5jb2xvcj93KHRoaXMuY29sb3IpOlswLDAsMF0sbj10LmdldCgiQ0EiKSxhPXkodC5nZXRBcnJheSgiSUMiKSxudWxsKSxpPWE/dyhhKTpudWxsLHM9aT9uOm51bGw7aWYoMD09PXRoaXMuYm9yZGVyU3R5bGUud2lkdGgmJiFpKXJldHVybjt0aGlzLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjpyLGV4dHJhOiIiLmNvbmNhdCh0aGlzLmJvcmRlclN0eWxlLndpZHRoLCIgdyIpLHN0cm9rZUNvbG9yOmUsZmlsbENvbG9yOmksc3Ryb2tlQWxwaGE6bixmaWxsQWxwaGE6cyxwb2ludHNDYWxsYmFjazooZSx0KT0+e2NvbnN0IHI9dFsyXS54K3RoaXMuYm9yZGVyU3R5bGUud2lkdGgvMixuPXRbMl0ueSt0aGlzLmJvcmRlclN0eWxlLndpZHRoLzIsYT10WzNdLngtdFsyXS54LXRoaXMuYm9yZGVyU3R5bGUud2lkdGgscz10WzFdLnktdFszXS55LXRoaXMuYm9yZGVyU3R5bGUud2lkdGg7cmV0dXJuIGUucHVzaCgiIi5jb25jYXQociwiICIpLmNvbmNhdChuLCIgIikuY29uY2F0KGEsIiAiKS5jb25jYXQocywiIHJlIikpLGk/ZS5wdXNoKCJCIik6ZS5wdXNoKCJTIiksW3RbMF0ueCx0WzFdLngsdFszXS55LHRbMV0ueV19fSl9fX1jbGFzcyBCIGV4dGVuZHMga3tjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTtjb25zdHtkaWN0OnQseHJlZjpyfT1lO2lmKHRoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLkNJUkNMRSwhdGhpcy5hcHBlYXJhbmNlKXtjb25zdCBlPXRoaXMuY29sb3I/dyh0aGlzLmNvbG9yKTpbMCwwLDBdLG49dC5nZXQoIkNBIiksYT15KHQuZ2V0QXJyYXkoIklDIiksbnVsbCksaT1hP3coYSk6bnVsbCxzPWk/bjpudWxsO2lmKDA9PT10aGlzLmJvcmRlclN0eWxlLndpZHRoJiYhaSlyZXR1cm47Y29uc3Qgbz00LzMqTWF0aC50YW4oTWF0aC5QSS84KTt0aGlzLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjpyLGV4dHJhOiIiLmNvbmNhdCh0aGlzLmJvcmRlclN0eWxlLndpZHRoLCIgdyIpLHN0cm9rZUNvbG9yOmUsZmlsbENvbG9yOmksc3Ryb2tlQWxwaGE6bixmaWxsQWxwaGE6cyxwb2ludHNDYWxsYmFjazooZSx0KT0+e2NvbnN0IHI9dFswXS54K3RoaXMuYm9yZGVyU3R5bGUud2lkdGgvMixuPXRbMF0ueS10aGlzLmJvcmRlclN0eWxlLndpZHRoLzIsYT10WzNdLngtdGhpcy5ib3JkZXJTdHlsZS53aWR0aC8yLHM9dFszXS55K3RoaXMuYm9yZGVyU3R5bGUud2lkdGgvMixjPXIrKGEtcikvMixsPW4rKHMtbikvMixoPShhLXIpLzIqbyx1PShzLW4pLzIqbztyZXR1cm4gZS5wdXNoKCIiLmNvbmNhdChjLCIgIikuY29uY2F0KHMsIiBtIiksIiIuY29uY2F0KGMraCwiICIpLmNvbmNhdChzLCIgIikuY29uY2F0KGEsIiAiKS5jb25jYXQobCt1LCIgIikuY29uY2F0KGEsIiAiKS5jb25jYXQobCwiIGMiKSwiIi5jb25jYXQoYSwiICIpLmNvbmNhdChsLXUsIiAiKS5jb25jYXQoYytoLCIgIikuY29uY2F0KG4sIiAiKS5jb25jYXQoYywiICIpLmNvbmNhdChuLCIgYyIpLCIiLmNvbmNhdChjLWgsIiAiKS5jb25jYXQobiwiICIpLmNvbmNhdChyLCIgIikuY29uY2F0KGwtdSwiICIpLmNvbmNhdChyLCIgIikuY29uY2F0KGwsIiBjIiksIiIuY29uY2F0KHIsIiAiKS5jb25jYXQobCt1LCIgIikuY29uY2F0KGMtaCwiICIpLmNvbmNhdChzLCIgIikuY29uY2F0KGMsIiAiKS5jb25jYXQocywiIGMiKSwiaCIpLGk/ZS5wdXNoKCJCIik6ZS5wdXNoKCJTIiksW3RbMF0ueCx0WzFdLngsdFszXS55LHRbMV0ueV19fSl9fX1jbGFzcyBMIGV4dGVuZHMga3tjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTtjb25zdHtkaWN0OnQseHJlZjpyfT1lO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLlBPTFlMSU5FLHRoaXMuZGF0YS5oYXNPd25DYW52YXM9dGhpcy5kYXRhLm5vUm90YXRlLHRoaXMuZGF0YS52ZXJ0aWNlcz1bXSx0aGlzIGluc3RhbmNlb2YgX3x8KHRoaXMuc2V0TGluZUVuZGluZ3ModC5nZXRBcnJheSgiTEUiKSksdGhpcy5kYXRhLmxpbmVFbmRpbmdzPXRoaXMubGluZUVuZGluZ3MpO2NvbnN0IGE9dC5nZXRBcnJheSgiVmVydGljZXMiKTtpZihBcnJheS5pc0FycmF5KGEpKXtmb3IobGV0IGU9MCx0PWEubGVuZ3RoO2U8dDtlKz0yKXRoaXMuZGF0YS52ZXJ0aWNlcy5wdXNoKHt4OmFbZV0seTphW2UrMV19KTtpZighdGhpcy5hcHBlYXJhbmNlKXtjb25zdCBlPXRoaXMuY29sb3I/dyh0aGlzLmNvbG9yKTpbMCwwLDBdLGE9dC5nZXQoIkNBIiksaT10aGlzLmJvcmRlclN0eWxlLndpZHRofHwxLHM9MippLG89WzEvMCwxLzAsLTEvMCwtMS8wXTtmb3IoY29uc3QgZSBvZiB0aGlzLmRhdGEudmVydGljZXMpb1swXT1NYXRoLm1pbihvWzBdLGUueC1zKSxvWzFdPU1hdGgubWluKG9bMV0sZS55LXMpLG9bMl09TWF0aC5tYXgob1syXSxlLngrcyksb1szXT1NYXRoLm1heChvWzNdLGUueStzKTtuLlV0aWwuaW50ZXJzZWN0KHRoaXMucmVjdGFuZ2xlLG8pfHwodGhpcy5yZWN0YW5nbGU9byksdGhpcy5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6cixleHRyYToiIi5jb25jYXQoaSwiIHciKSxzdHJva2VDb2xvcjplLHN0cm9rZUFscGhhOmEscG9pbnRzQ2FsbGJhY2s6KGUsdCk9Pntjb25zdCByPXRoaXMuZGF0YS52ZXJ0aWNlcztmb3IobGV0IHQ9MCxuPXIubGVuZ3RoO3Q8bjt0KyspZS5wdXNoKCIiLmNvbmNhdChyW3RdLngsIiAiKS5jb25jYXQoclt0XS55LCIgIikuY29uY2F0KDA9PT10PyJtIjoibCIpKTtyZXR1cm4gZS5wdXNoKCJTIiksW3RbMF0ueCx0WzFdLngsdFszXS55LHRbMV0ueV19fSl9fX19Y2xhc3MgXyBleHRlbmRzIEx7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksdGhpcy5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuUE9MWUdPTn19Y2xhc3MgaiBleHRlbmRzIGt7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksdGhpcy5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuQ0FSRVR9fWNsYXNzIFUgZXh0ZW5kcyBre2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpLHRoaXMuZGF0YS5oYXNPd25DYW52YXM9dGhpcy5kYXRhLm5vUm90YXRlO2NvbnN0e2RpY3Q6dCx4cmVmOnJ9PWU7dGhpcy5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuSU5LLHRoaXMuZGF0YS5pbmtMaXN0cz1bXTtjb25zdCBhPXQuZ2V0QXJyYXkoIklua0xpc3QiKTtpZihBcnJheS5pc0FycmF5KGEpKXtmb3IobGV0IGU9MCx0PWEubGVuZ3RoO2U8dDsrK2Upe3RoaXMuZGF0YS5pbmtMaXN0cy5wdXNoKFtdKTtmb3IobGV0IHQ9MCxuPWFbZV0ubGVuZ3RoO3Q8bjt0Kz0yKXRoaXMuZGF0YS5pbmtMaXN0c1tlXS5wdXNoKHt4OnIuZmV0Y2hJZlJlZihhW2VdW3RdKSx5OnIuZmV0Y2hJZlJlZihhW2VdW3QrMV0pfSl9aWYoIXRoaXMuYXBwZWFyYW5jZSl7Y29uc3QgZT10aGlzLmNvbG9yP3codGhpcy5jb2xvcik6WzAsMCwwXSxhPXQuZ2V0KCJDQSIpLGk9dGhpcy5ib3JkZXJTdHlsZS53aWR0aHx8MSxzPTIqaSxvPVsxLzAsMS8wLC0xLzAsLTEvMF07Zm9yKGNvbnN0IGUgb2YgdGhpcy5kYXRhLmlua0xpc3RzKWZvcihjb25zdCB0IG9mIGUpb1swXT1NYXRoLm1pbihvWzBdLHQueC1zKSxvWzFdPU1hdGgubWluKG9bMV0sdC55LXMpLG9bMl09TWF0aC5tYXgob1syXSx0Lngrcyksb1szXT1NYXRoLm1heChvWzNdLHQueStzKTtuLlV0aWwuaW50ZXJzZWN0KHRoaXMucmVjdGFuZ2xlLG8pfHwodGhpcy5yZWN0YW5nbGU9byksdGhpcy5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6cixleHRyYToiIi5jb25jYXQoaSwiIHciKSxzdHJva2VDb2xvcjplLHN0cm9rZUFscGhhOmEscG9pbnRzQ2FsbGJhY2s6KGUsdCk9Pntmb3IoY29uc3QgdCBvZiB0aGlzLmRhdGEuaW5rTGlzdHMpe2ZvcihsZXQgcj0wLG49dC5sZW5ndGg7cjxuO3IrKyllLnB1c2goIiIuY29uY2F0KHRbcl0ueCwiICIpLmNvbmNhdCh0W3JdLnksIiAiKS5jb25jYXQoMD09PXI/Im0iOiJsIikpO2UucHVzaCgiUyIpfXJldHVyblt0WzBdLngsdFsxXS54LHRbM10ueSx0WzFdLnldfX0pfX19c3RhdGljIGNyZWF0ZU5ld0RpY3QoZSx0LHIpe2xldHthcFJlZjphLGFwOml9PXI7Y29uc3R7Y29sb3I6byxvcGFjaXR5OmMscGF0aHM6bCxyZWN0Omgscm90YXRpb246dSx0aGlja25lc3M6ZH09ZSxmPW5ldyBzLkRpY3QodCk7Zi5zZXQoIlR5cGUiLHMuTmFtZS5nZXQoIkFubm90IikpLGYuc2V0KCJTdWJ0eXBlIixzLk5hbWUuZ2V0KCJJbmsiKSksZi5zZXQoIkNyZWF0aW9uRGF0ZSIsIkQ6Ii5jb25jYXQoKDAsbi5nZXRNb2RpZmljYXRpb25EYXRlKSgpKSksZi5zZXQoIlJlY3QiLGgpLGYuc2V0KCJJbmtMaXN0IixsLm1hcCgoZT0+ZS5wb2ludHMpKSksZi5zZXQoIkYiLDQpLGYuc2V0KCJSb3RhdGUiLHUpO2NvbnN0IGc9bmV3IHMuRGljdCh0KTtmLnNldCgiQlMiLGcpLGcuc2V0KCJXIixkKSxmLnNldCgiQyIsQXJyYXkuZnJvbShvLChlPT5lLzI1NSkpKSxmLnNldCgiQ0EiLGMpO2NvbnN0IHA9bmV3IHMuRGljdCh0KTtyZXR1cm4gZi5zZXQoIkFQIixwKSxhP3Auc2V0KCJOIixhKTpwLnNldCgiTiIsaSksZn1zdGF0aWMgYXN5bmMgY3JlYXRlTmV3QXBwZWFyYW5jZVN0cmVhbShlLHQscil7Y29uc3R7Y29sb3I6bixyZWN0OmMscGF0aHM6bCx0aGlja25lc3M6aCxvcGFjaXR5OnV9PWUsZD1bIiIuY29uY2F0KGgsIiB3IDEgSiAxIGoiKSwiIi5jb25jYXQoKDAsaS5nZXRQZGZDb2xvcikobiwhMSkpXTsxIT09dSYmZC5wdXNoKCIvUjAgZ3MiKTtjb25zdCBmPVtdO2Zvcihjb25zdHtiZXppZXI6ZX1vZiBsKXtmLmxlbmd0aD0wLGYucHVzaCgiIi5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykoZVswXSksIiAiKS5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykoZVsxXSksIiBtIikpO2ZvcihsZXQgdD0yLHI9ZS5sZW5ndGg7dDxyO3QrPTYpe2NvbnN0IHI9ZS5zbGljZSh0LHQrNikubWFwKGEubnVtYmVyVG9TdHJpbmcpLmpvaW4oIiAiKTtmLnB1c2goIiIuY29uY2F0KHIsIiBjIikpfWYucHVzaCgiUyIpLGQucHVzaChmLmpvaW4oIlxuIikpfWNvbnN0IGc9ZC5qb2luKCJcbiIpLHA9bmV3IHMuRGljdCh0KTtpZihwLnNldCgiRm9ybVR5cGUiLDEpLHAuc2V0KCJTdWJ0eXBlIixzLk5hbWUuZ2V0KCJGb3JtIikpLHAuc2V0KCJUeXBlIixzLk5hbWUuZ2V0KCJYT2JqZWN0IikpLHAuc2V0KCJCQm94IixjKSxwLnNldCgiTGVuZ3RoIixnLmxlbmd0aCksMSE9PXUpe2NvbnN0IGU9bmV3IHMuRGljdCh0KSxyPW5ldyBzLkRpY3QodCksbj1uZXcgcy5EaWN0KHQpO24uc2V0KCJDQSIsdSksbi5zZXQoIlR5cGUiLHMuTmFtZS5nZXQoIkV4dEdTdGF0ZSIpKSxyLnNldCgiUjAiLG4pLGUuc2V0KCJFeHRHU3RhdGUiLHIpLHAuc2V0KCJSZXNvdXJjZXMiLGUpfWNvbnN0IG09bmV3IG8uU3RyaW5nU3RyZWFtKGcpO3JldHVybiBtLmRpY3Q9cCxtfX1jbGFzcyAkIGV4dGVuZHMga3tjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTtjb25zdHtkaWN0OnQseHJlZjpyfT1lO2lmKHRoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLkhJR0hMSUdIVCx0aGlzLmRhdGEucXVhZFBvaW50cz12KHQsbnVsbCkpe3ZhciBhO2NvbnN0IGU9bnVsbD09PShhPXRoaXMuYXBwZWFyYW5jZSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuZGljdC5nZXQoIlJlc291cmNlcyIpO2lmKCF0aGlzLmFwcGVhcmFuY2V8fG51bGw9PWV8fCFlLmhhcygiRXh0R1N0YXRlIikpe3RoaXMuYXBwZWFyYW5jZSYmKDAsbi53YXJuKSgiSGlnaGxpZ2h0QW5ub3RhdGlvbiAtIGlnbm9yaW5nIGJ1aWx0LWluIGFwcGVhcmFuY2Ugc3RyZWFtLiIpO2NvbnN0IGU9dGhpcy5jb2xvcj93KHRoaXMuY29sb3IpOlsxLDEsMF0sYT10LmdldCgiQ0EiKTt0aGlzLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjpyLGZpbGxDb2xvcjplLGJsZW5kTW9kZToiTXVsdGlwbHkiLGZpbGxBbHBoYTphLHBvaW50c0NhbGxiYWNrOihlLHQpPT4oZS5wdXNoKCIiLmNvbmNhdCh0WzBdLngsIiAiKS5jb25jYXQodFswXS55LCIgbSIpLCIiLmNvbmNhdCh0WzFdLngsIiAiKS5jb25jYXQodFsxXS55LCIgbCIpLCIiLmNvbmNhdCh0WzNdLngsIiAiKS5jb25jYXQodFszXS55LCIgbCIpLCIiLmNvbmNhdCh0WzJdLngsIiAiKS5jb25jYXQodFsyXS55LCIgbCIpLCJmIiksW3RbMF0ueCx0WzFdLngsdFszXS55LHRbMV0ueV0pfSl9fWVsc2UgdGhpcy5kYXRhLnBvcHVwUmVmPW51bGx9fWNsYXNzIFggZXh0ZW5kcyBre2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO2NvbnN0e2RpY3Q6dCx4cmVmOnJ9PWU7aWYodGhpcy5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuVU5ERVJMSU5FLHRoaXMuZGF0YS5xdWFkUG9pbnRzPXYodCxudWxsKSl7aWYoIXRoaXMuYXBwZWFyYW5jZSl7Y29uc3QgZT10aGlzLmNvbG9yP3codGhpcy5jb2xvcik6WzAsMCwwXSxuPXQuZ2V0KCJDQSIpO3RoaXMuX3NldERlZmF1bHRBcHBlYXJhbmNlKHt4cmVmOnIsZXh0cmE6IltdIDAgZCAwLjU3MSB3IixzdHJva2VDb2xvcjplLHN0cm9rZUFscGhhOm4scG9pbnRzQ2FsbGJhY2s6KGUsdCk9PihlLnB1c2goIiIuY29uY2F0KHRbMl0ueCwiICIpLmNvbmNhdCh0WzJdLnkrMS4zLCIgbSIpLCIiLmNvbmNhdCh0WzNdLngsIiAiKS5jb25jYXQodFszXS55KzEuMywiIGwiKSwiUyIpLFt0WzBdLngsdFsxXS54LHRbM10ueSx0WzFdLnldKX0pfX1lbHNlIHRoaXMuZGF0YS5wb3B1cFJlZj1udWxsfX1jbGFzcyBIIGV4dGVuZHMga3tjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTtjb25zdHtkaWN0OnQseHJlZjpyfT1lO2lmKHRoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLlNRVUlHR0xZLHRoaXMuZGF0YS5xdWFkUG9pbnRzPXYodCxudWxsKSl7aWYoIXRoaXMuYXBwZWFyYW5jZSl7Y29uc3QgZT10aGlzLmNvbG9yP3codGhpcy5jb2xvcik6WzAsMCwwXSxuPXQuZ2V0KCJDQSIpO3RoaXMuX3NldERlZmF1bHRBcHBlYXJhbmNlKHt4cmVmOnIsZXh0cmE6IltdIDAgZCAxIHciLHN0cm9rZUNvbG9yOmUsc3Ryb2tlQWxwaGE6bixwb2ludHNDYWxsYmFjazooZSx0KT0+e2NvbnN0IHI9KHRbMF0ueS10WzJdLnkpLzY7bGV0IG49cixhPXRbMl0ueDtjb25zdCBpPXRbMl0ueSxzPXRbM10ueDtlLnB1c2goIiIuY29uY2F0KGEsIiAiKS5jb25jYXQoaStuLCIgbSIpKTtkb3thKz0yLG49MD09PW4/cjowLGUucHVzaCgiIi5jb25jYXQoYSwiICIpLmNvbmNhdChpK24sIiBsIikpfXdoaWxlKGE8cyk7cmV0dXJuIGUucHVzaCgiUyIpLFt0WzJdLngscyxpLTIqcixpKzIqcl19fSl9fWVsc2UgdGhpcy5kYXRhLnBvcHVwUmVmPW51bGx9fWNsYXNzIHEgZXh0ZW5kcyBre2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO2NvbnN0e2RpY3Q6dCx4cmVmOnJ9PWU7aWYodGhpcy5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuU1RSSUtFT1VULHRoaXMuZGF0YS5xdWFkUG9pbnRzPXYodCxudWxsKSl7aWYoIXRoaXMuYXBwZWFyYW5jZSl7Y29uc3QgZT10aGlzLmNvbG9yP3codGhpcy5jb2xvcik6WzAsMCwwXSxuPXQuZ2V0KCJDQSIpO3RoaXMuX3NldERlZmF1bHRBcHBlYXJhbmNlKHt4cmVmOnIsZXh0cmE6IltdIDAgZCAxIHciLHN0cm9rZUNvbG9yOmUsc3Ryb2tlQWxwaGE6bixwb2ludHNDYWxsYmFjazooZSx0KT0+KGUucHVzaCgodFswXS54K3RbMl0ueCkvMisiICIrKHRbMF0ueSt0WzJdLnkpLzIrIiBtIiwodFsxXS54K3RbM10ueCkvMisiICIrKHRbMV0ueSt0WzNdLnkpLzIrIiBsIiwiUyIpLFt0WzBdLngsdFsxXS54LHRbM10ueSx0WzFdLnldKX0pfX1lbHNlIHRoaXMuZGF0YS5wb3B1cFJlZj1udWxsfX1jbGFzcyB6IGV4dGVuZHMga3tjb25zdHJ1Y3RvcihlKXtzdXBlcihlKSx0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9bi5Bbm5vdGF0aW9uVHlwZS5TVEFNUCx0aGlzLmRhdGEuaGFzT3duQ2FudmFzPXRoaXMuZGF0YS5ub1JvdGF0ZX1zdGF0aWMgYXN5bmMgY3JlYXRlSW1hZ2UoZSx0KXtjb25zdHt3aWR0aDpyLGhlaWdodDphfT1lLGk9bmV3IE9mZnNjcmVlbkNhbnZhcyhyLGEpLGM9aS5nZXRDb250ZXh0KCIyZCIse2FscGhhOiEwfSk7Yy5kcmF3SW1hZ2UoZSwwLDApO2NvbnN0IGw9Yy5nZXRJbWFnZURhdGEoMCwwLHIsYSkuZGF0YSxoPW5ldyBVaW50MzJBcnJheShsLmJ1ZmZlciksdT1oLnNvbWUobi5GZWF0dXJlVGVzdC5pc0xpdHRsZUVuZGlhbj9lPT5lPj4+MjQhPTI1NTplPT4yNTUhPSgyNTUmZSkpO3UmJihjLmZpbGxTdHlsZT0id2hpdGUiLGMuZmlsbFJlY3QoMCwwLHIsYSksYy5kcmF3SW1hZ2UoZSwwLDApKTtjb25zdCBkPWkuY29udmVydFRvQmxvYih7dHlwZToiaW1hZ2UvanBlZyIscXVhbGl0eToxfSkudGhlbigoZT0+ZS5hcnJheUJ1ZmZlcigpKSksZj1zLk5hbWUuZ2V0KCJYT2JqZWN0IiksZz1zLk5hbWUuZ2V0KCJJbWFnZSIpLHA9bmV3IHMuRGljdCh0KTtwLnNldCgiVHlwZSIsZikscC5zZXQoIlN1YnR5cGUiLGcpLHAuc2V0KCJCaXRzUGVyQ29tcG9uZW50Iiw4KSxwLnNldCgiQ29sb3JTcGFjZSIscy5OYW1lLmdldCgiRGV2aWNlUkdCIikpLHAuc2V0KCJGaWx0ZXIiLHMuTmFtZS5nZXQoIkRDVERlY29kZSIpKSxwLnNldCgiQkJveCIsWzAsMCxyLGFdKSxwLnNldCgiV2lkdGgiLHIpLHAuc2V0KCJIZWlnaHQiLGEpO2xldCBtPW51bGw7aWYodSl7Y29uc3QgZT1uZXcgVWludDhBcnJheShoLmxlbmd0aCk7aWYobi5GZWF0dXJlVGVzdC5pc0xpdHRsZUVuZGlhbilmb3IobGV0IHQ9MCxyPWgubGVuZ3RoO3Q8cjt0KyspZVt0XT1oW3RdPj4+MjQ7ZWxzZSBmb3IobGV0IHQ9MCxyPWgubGVuZ3RoO3Q8cjt0KyspZVt0XT0yNTUmaFt0XTtjb25zdCBpPW5ldyBzLkRpY3QodCk7aS5zZXQoIlR5cGUiLGYpLGkuc2V0KCJTdWJ0eXBlIixnKSxpLnNldCgiQml0c1BlckNvbXBvbmVudCIsOCksaS5zZXQoIkNvbG9yU3BhY2UiLHMuTmFtZS5nZXQoIkRldmljZUdyYXkiKSksaS5zZXQoIldpZHRoIixyKSxpLnNldCgiSGVpZ2h0IixhKSxtPW5ldyBvLlN0cmVhbShlLDAsMCxpKX1yZXR1cm57aW1hZ2VTdHJlYW06bmV3IG8uU3RyZWFtKGF3YWl0IGQsMCwwLHApLHNtYXNrU3RyZWFtOm0sd2lkdGg6cixoZWlnaHQ6YX19c3RhdGljIGNyZWF0ZU5ld0RpY3QoZSx0LHIpe2xldHthcFJlZjppLGFwOm99PXI7Y29uc3R7cmVjdDpjLHJvdGF0aW9uOmwsdXNlcjpofT1lLHU9bmV3IHMuRGljdCh0KTtpZih1LnNldCgiVHlwZSIscy5OYW1lLmdldCgiQW5ub3QiKSksdS5zZXQoIlN1YnR5cGUiLHMuTmFtZS5nZXQoIlN0YW1wIikpLHUuc2V0KCJDcmVhdGlvbkRhdGUiLCJEOiIuY29uY2F0KCgwLG4uZ2V0TW9kaWZpY2F0aW9uRGF0ZSkoKSkpLHUuc2V0KCJSZWN0IixjKSx1LnNldCgiRiIsNCksdS5zZXQoIkJvcmRlciIsWzAsMCwwXSksdS5zZXQoIlJvdGF0ZSIsbCksaCYmdS5zZXQoIlQiLCgwLGEuaXNBc2NpaSkoaCk/aDooMCxhLnN0cmluZ1RvVVRGMTZTdHJpbmcpKGgsITApKSxpfHxvKXtjb25zdCBlPW5ldyBzLkRpY3QodCk7dS5zZXQoIkFQIixlKSxpP2Uuc2V0KCJOIixpKTplLnNldCgiTiIsbyl9cmV0dXJuIHV9c3RhdGljIGFzeW5jIGNyZWF0ZU5ld0FwcGVhcmFuY2VTdHJlYW0oZSx0LHIpe2NvbnN0e3JvdGF0aW9uOm59PWUse2ltYWdlUmVmOmksd2lkdGg6YyxoZWlnaHQ6bH09ci5pbWFnZSxoPW5ldyBzLkRpY3QodCksdT1uZXcgcy5EaWN0KHQpO2guc2V0KCJYT2JqZWN0Iix1KSx1LnNldCgiSW0wIixpKTtjb25zdCBkPSJxICIuY29uY2F0KGMsIiAwIDAgIikuY29uY2F0KGwsIiAwIDAgY20gL0ltMCBEbyBRIiksZj1uZXcgcy5EaWN0KHQpO2lmKGYuc2V0KCJGb3JtVHlwZSIsMSksZi5zZXQoIlN1YnR5cGUiLHMuTmFtZS5nZXQoIkZvcm0iKSksZi5zZXQoIlR5cGUiLHMuTmFtZS5nZXQoIlhPYmplY3QiKSksZi5zZXQoIkJCb3giLFswLDAsYyxsXSksZi5zZXQoIlJlc291cmNlcyIsaCksbil7Y29uc3QgZT0oMCxhLmdldFJvdGF0aW9uTWF0cml4KShuLGMsbCk7Zi5zZXQoIk1hdHJpeCIsZSl9Y29uc3QgZz1uZXcgby5TdHJpbmdTdHJlYW0oZCk7cmV0dXJuIGcuZGljdD1mLGd9fWNsYXNzIEcgZXh0ZW5kcyBre2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO2NvbnN0e2RpY3Q6dCx4cmVmOnJ9PWUsYT1uZXcgZi5GaWxlU3BlYyh0LmdldCgiRlMiKSxyKTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9bi5Bbm5vdGF0aW9uVHlwZS5GSUxFQVRUQUNITUVOVCx0aGlzLmRhdGEuaGFzT3duQ2FudmFzPXRoaXMuZGF0YS5ub1JvdGF0ZSx0aGlzLmRhdGEuZmlsZT1hLnNlcmlhbGl6YWJsZTtjb25zdCBpPXQuZ2V0KCJOYW1lIik7dGhpcy5kYXRhLm5hbWU9aSBpbnN0YW5jZW9mIHMuTmFtZT8oMCxuLnN0cmluZ1RvUERGU3RyaW5nKShpLm5hbWUpOiJQdXNoUGluIn19fSwoZSx0LHIpPT57dmFyIG49cig0KSxhPXIoNiksaT1yKDg3KSxzPXIoMTU4KSxvPXIoNyksYz1uLlJlZ0V4cCxsPWMucHJvdG90eXBlO2EmJm8oKGZ1bmN0aW9uKCl7dmFyIGU9ITA7dHJ5e2MoIi4iLCJkIil9Y2F0Y2godCl7ZT0hMX12YXIgdD17fSxyPSIiLG49ZT8iZGdpbXN5IjoiZ2ltc3kiLGE9ZnVuY3Rpb24oZSxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcis9biwhMH19KX0saT17ZG90QWxsOiJzIixnbG9iYWw6ImciLGlnbm9yZUNhc2U6ImkiLG11bHRpbGluZToibSIsc3RpY2t5OiJ5In07Zm9yKHZhciBzIGluIGUmJihpLmhhc0luZGljZXM9ImQiKSxpKWEocyxpW3NdKTtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihsLCJmbGFncyIpLmdldC5jYWxsKHQpIT09bnx8ciE9PW59KSkmJmkobCwiZmxhZ3MiLHtjb25maWd1cmFibGU6ITAsZ2V0OnN9KX0sKGUsdCxyKT0+e3ZhciBuPXIoNDcpO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciBlPW4odGhpcyksdD0iIjtyZXR1cm4gZS5oYXNJbmRpY2VzJiYodCs9ImQiKSxlLmdsb2JhbCYmKHQrPSJnIiksZS5pZ25vcmVDYXNlJiYodCs9ImkiKSxlLm11bHRpbGluZSYmKHQrPSJtIiksZS5kb3RBbGwmJih0Kz0icyIpLGUudW5pY29kZSYmKHQrPSJ1IiksZS51bmljb2RlU2V0cyYmKHQrPSJ2IiksZS5zdGlja3kmJih0Kz0ieSIpLHR9fSwoZSx0LHIpPT57dmFyIG49cigzKSxhPXIoNDApLGk9cig2NCkscz1yKDE0MCksbz1yKDE2MCksYz1yKDE0Mik7bih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITAsYXJpdHk6MSxmb3JjZWQ6MSE9PVtdLnVuc2hpZnQoMCl8fCFmdW5jdGlvbigpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sImxlbmd0aCIse3dyaXRhYmxlOiExfSkudW5zaGlmdCgpfWNhdGNoKGUpe3JldHVybiBlIGluc3RhbmNlb2YgVHlwZUVycm9yfX0oKX0se3Vuc2hpZnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9YSh0aGlzKSxyPWkodCksbj1hcmd1bWVudHMubGVuZ3RoO2lmKG4pe2MocituKTtmb3IodmFyIGw9cjtsLS07KXt2YXIgaD1sK247bCBpbiB0P3RbaF09dFtsXTpvKHQsaCl9Zm9yKHZhciB1PTA7dTxuO3UrKyl0W3VdPWFyZ3VtZW50c1t1XX1yZXR1cm4gcyh0LHIrbil9fSl9LChlLHQscik9Pnt2YXIgbj1yKDMyKSxhPVR5cGVFcnJvcjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZighZGVsZXRlIGVbdF0pdGhyb3cgYSgiQ2Fubm90IGRlbGV0ZSBwcm9wZXJ0eSAiK24odCkrIiBvZiAiK24oZSkpfX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkZha2VVbmljb2RlRm9udD12b2lkIDAsdC5jcmVhdGVEZWZhdWx0QXBwZWFyYW5jZT1mdW5jdGlvbihlKXtsZXR7Zm9udFNpemU6dCxmb250TmFtZTpyLGZvbnRDb2xvcjpufT1lO3JldHVybiIvIi5jb25jYXQoKDAsYS5lc2NhcGVQREZOYW1lKShyKSwiICIpLmNvbmNhdCh0LCIgVGYgIikuY29uY2F0KGYobiwhMCkpfSx0LmdldFBkZkNvbG9yPWYsdC5wYXJzZUFwcGVhcmFuY2VTdHJlYW09ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBuZXcgZChlLHQscikucGFyc2UoKX0sdC5wYXJzZURlZmF1bHRBcHBlYXJhbmNlPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgdShlKS5wYXJzZSgpfSxyKDg0KSxyKDkzKSxyKDk0KSxyKDk3KSxyKDk5KSxyKDEwMSkscigxMDUpLHIoMTA4KSxyKDExNSkscigxMzkpO3ZhciBuPXIoMTUwKSxhPXIoMTQ5KSxpPXIoMTQ0KSxzPXIoMTYyKSxvPXIoMTYzKSxjPXIoMjA5KSxsPXIoMjA3KSxoPXIoMTU0KTtjbGFzcyB1IGV4dGVuZHMgby5FdmFsdWF0b3JQcmVwcm9jZXNzb3J7Y29uc3RydWN0b3IoZSl7c3VwZXIobmV3IGguU3RyaW5nU3RyZWFtKGUpKX1wYXJzZSgpe2NvbnN0IGU9e2ZuOjAsYXJnczpbXX0sdD17Zm9udFNpemU6MCxmb250TmFtZToiIixmb250Q29sb3I6bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMpfTt0cnl7Zm9yKDtlLmFyZ3MubGVuZ3RoPTAsdGhpcy5yZWFkKGUpOyl7aWYoMCE9PXRoaXMuc2F2ZWRTdGF0ZXNEZXB0aCljb250aW51ZTtjb25zdHtmbjpyLGFyZ3M6YX09ZTtzd2l0Y2goMHxyKXtjYXNlIGkuT1BTLnNldEZvbnQ6Y29uc3RbZSxyXT1hO2UgaW5zdGFuY2VvZiBuLk5hbWUmJih0LmZvbnROYW1lPWUubmFtZSksIm51bWJlciI9PXR5cGVvZiByJiZyPjAmJih0LmZvbnRTaXplPXIpO2JyZWFrO2Nhc2UgaS5PUFMuc2V0RmlsbFJHQkNvbG9yOnMuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYi5nZXRSZ2JJdGVtKGEsMCx0LmZvbnRDb2xvciwwKTticmVhaztjYXNlIGkuT1BTLnNldEZpbGxHcmF5OnMuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXkuZ2V0UmdiSXRlbShhLDAsdC5mb250Q29sb3IsMCk7YnJlYWs7Y2FzZSBpLk9QUy5zZXRGaWxsQ01ZS0NvbG9yOnMuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmNteWsuZ2V0UmdiSXRlbShhLDAsdC5mb250Q29sb3IsMCl9fX1jYXRjaChlKXsoMCxpLndhcm4pKCdwYXJzZURlZmF1bHRBcHBlYXJhbmNlIC0gaWdub3JpbmcgZXJyb3JzOiAiJy5jb25jYXQoZSwnIi4nKSl9cmV0dXJuIHR9fWNsYXNzIGQgZXh0ZW5kcyBvLkV2YWx1YXRvclByZXByb2Nlc3Nvcntjb25zdHJ1Y3RvcihlLHQscil7dmFyIG47c3VwZXIoZSksdGhpcy5zdHJlYW09ZSx0aGlzLmV2YWx1YXRvck9wdGlvbnM9dCx0aGlzLnhyZWY9cix0aGlzLnJlc291cmNlcz1udWxsPT09KG49ZS5kaWN0KXx8dm9pZCAwPT09bj92b2lkIDA6bi5nZXQoIlJlc291cmNlcyIpfXBhcnNlKCl7Y29uc3QgZT17Zm46MCxhcmdzOltdfTtsZXQgdD17c2NhbGVGYWN0b3I6MSxmb250U2l6ZTowLGZvbnROYW1lOiIiLGZvbnRDb2xvcjpuZXcgVWludDhDbGFtcGVkQXJyYXkoMyksZmlsbENvbG9yU3BhY2U6cy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheX0scj0hMTtjb25zdCBhPVtdO3RyeXtmb3IoO2UuYXJncy5sZW5ndGg9MCwhciYmdGhpcy5yZWFkKGUpOyl7Y29uc3R7Zm46byxhcmdzOmN9PWU7c3dpdGNoKDB8byl7Y2FzZSBpLk9QUy5zYXZlOmEucHVzaCh7c2NhbGVGYWN0b3I6dC5zY2FsZUZhY3Rvcixmb250U2l6ZTp0LmZvbnRTaXplLGZvbnROYW1lOnQuZm9udE5hbWUsZm9udENvbG9yOnQuZm9udENvbG9yLnNsaWNlKCksZmlsbENvbG9yU3BhY2U6dC5maWxsQ29sb3JTcGFjZX0pO2JyZWFrO2Nhc2UgaS5PUFMucmVzdG9yZTp0PWEucG9wKCl8fHQ7YnJlYWs7Y2FzZSBpLk9QUy5zZXRUZXh0TWF0cml4OnQuc2NhbGVGYWN0b3IqPU1hdGguaHlwb3QoY1swXSxjWzFdKTticmVhaztjYXNlIGkuT1BTLnNldEZvbnQ6Y29uc3RbZSxvXT1jO2UgaW5zdGFuY2VvZiBuLk5hbWUmJih0LmZvbnROYW1lPWUubmFtZSksIm51bWJlciI9PXR5cGVvZiBvJiZvPjAmJih0LmZvbnRTaXplPW8qdC5zY2FsZUZhY3Rvcik7YnJlYWs7Y2FzZSBpLk9QUy5zZXRGaWxsQ29sb3JTcGFjZTp0LmZpbGxDb2xvclNwYWNlPXMuQ29sb3JTcGFjZS5wYXJzZSh7Y3M6Y1swXSx4cmVmOnRoaXMueHJlZixyZXNvdXJjZXM6dGhpcy5yZXNvdXJjZXMscGRmRnVuY3Rpb25GYWN0b3J5OnRoaXMuX3BkZkZ1bmN0aW9uRmFjdG9yeSxsb2NhbENvbG9yU3BhY2VDYWNoZTp0aGlzLl9sb2NhbENvbG9yU3BhY2VDYWNoZX0pO2JyZWFrO2Nhc2UgaS5PUFMuc2V0RmlsbENvbG9yOnQuZmlsbENvbG9yU3BhY2UuZ2V0UmdiSXRlbShjLDAsdC5mb250Q29sb3IsMCk7YnJlYWs7Y2FzZSBpLk9QUy5zZXRGaWxsUkdCQ29sb3I6cy5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiLmdldFJnYkl0ZW0oYywwLHQuZm9udENvbG9yLDApO2JyZWFrO2Nhc2UgaS5PUFMuc2V0RmlsbEdyYXk6cy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheS5nZXRSZ2JJdGVtKGMsMCx0LmZvbnRDb2xvciwwKTticmVhaztjYXNlIGkuT1BTLnNldEZpbGxDTVlLQ29sb3I6cy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuY215ay5nZXRSZ2JJdGVtKGMsMCx0LmZvbnRDb2xvciwwKTticmVhaztjYXNlIGkuT1BTLnNob3dUZXh0OmNhc2UgaS5PUFMuc2hvd1NwYWNlZFRleHQ6Y2FzZSBpLk9QUy5uZXh0TGluZVNob3dUZXh0OmNhc2UgaS5PUFMubmV4dExpbmVTZXRTcGFjaW5nU2hvd1RleHQ6cj0hMH19fWNhdGNoKGUpeygwLGkud2FybikoJ3BhcnNlQXBwZWFyYW5jZVN0cmVhbSAtIGlnbm9yaW5nIGVycm9yczogIicuY29uY2F0KGUsJyIuJykpfXJldHVybiB0aGlzLnN0cmVhbS5yZXNldCgpLGRlbGV0ZSB0LnNjYWxlRmFjdG9yLGRlbGV0ZSB0LmZpbGxDb2xvclNwYWNlLHR9Z2V0IF9sb2NhbENvbG9yU3BhY2VDYWNoZSgpe3JldHVybigwLGkuc2hhZG93KSh0aGlzLCJfbG9jYWxDb2xvclNwYWNlQ2FjaGUiLG5ldyBjLkxvY2FsQ29sb3JTcGFjZUNhY2hlKX1nZXQgX3BkZkZ1bmN0aW9uRmFjdG9yeSgpe2NvbnN0IGU9bmV3IGwuUERGRnVuY3Rpb25GYWN0b3J5KHt4cmVmOnRoaXMueHJlZixpc0V2YWxTdXBwb3J0ZWQ6dGhpcy5ldmFsdWF0b3JPcHRpb25zLmlzRXZhbFN1cHBvcnRlZH0pO3JldHVybigwLGkuc2hhZG93KSh0aGlzLCJfcGRmRnVuY3Rpb25GYWN0b3J5IixlKX19ZnVuY3Rpb24gZihlLHQpe2lmKGVbMF09PT1lWzFdJiZlWzFdPT09ZVsyXSl7Y29uc3Qgcj1lWzBdLzI1NTtyZXR1cm4iIi5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykociksIiAiKS5jb25jYXQodD8iZyI6IkciKX1yZXR1cm4gQXJyYXkuZnJvbShlLChlPT4oMCxhLm51bWJlclRvU3RyaW5nKShlLzI1NSkpKS5qb2luKCIgIikrIiAiKyh0PyJyZyI6IlJHIil9Y2xhc3MgZ3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMueHJlZj1lLHRoaXMud2lkdGhzPW51bGwsdGhpcy5maXJzdENoYXI9MS8wLHRoaXMubGFzdENoYXI9LTEvMCx0aGlzLmZvbnRGYW1pbHk9dDtjb25zdCByPW5ldyBPZmZzY3JlZW5DYW52YXMoMSwxKTt0aGlzLmN0eE1lYXN1cmU9ci5nZXRDb250ZXh0KCIyZCIpLGcuX2ZvbnROYW1lSWR8fChnLl9mb250TmFtZUlkPTEpLHRoaXMuZm9udE5hbWU9bi5OYW1lLmdldCgiSW52YWxpZFBERmpzRm9udF8iLmNvbmNhdCh0LCJfIikuY29uY2F0KGcuX2ZvbnROYW1lSWQrKykpfWdldCB0b1VuaWNvZGVSZWYoKXtpZighZy5fdG9Vbmljb2RlUmVmKXtjb25zdCBlPSIvQ0lESW5pdCAvUHJvY1NldCBmaW5kcmVzb3VyY2UgYmVnaW5cbjEyIGRpY3QgYmVnaW5cbmJlZ2luY21hcFxuL0NJRFN5c3RlbUluZm9cbjw8IC9SZWdpc3RyeSAoQWRvYmUpXG4vT3JkZXJpbmcgKFVDUykgL1N1cHBsZW1lbnQgMCA+PiBkZWZcbi9DTWFwTmFtZSAvQWRvYmUtSWRlbnRpdHktVUNTIGRlZlxuL0NNYXBUeXBlIDIgZGVmXG4xIGJlZ2luY29kZXNwYWNlcmFuZ2VcbjwwMDAwPiA8RkZGRj5cbmVuZGNvZGVzcGFjZXJhbmdlXG4xIGJlZ2luYmZyYW5nZVxuPDAwMDA+IDxGRkZGPiA8MDAwMD5cbmVuZGJmcmFuZ2VcbmVuZGNtYXAgQ01hcE5hbWUgY3VycmVudGRpY3QgL0NNYXAgZGVmaW5lcmVzb3VyY2UgcG9wIGVuZCBlbmQiLHQ9Zy50b1VuaWNvZGVTdHJlYW09bmV3IGguU3RyaW5nU3RyZWFtKGUpLHI9bmV3IG4uRGljdCh0aGlzLnhyZWYpO3QuZGljdD1yLHIuc2V0KCJMZW5ndGgiLGUubGVuZ3RoKSxnLl90b1VuaWNvZGVSZWY9dGhpcy54cmVmLmdldE5ld1BlcnNpc3RlbnRSZWYodCl9cmV0dXJuIGcuX3RvVW5pY29kZVJlZn1nZXQgZm9udERlc2NyaXB0b3JSZWYoKXtpZighZy5fZm9udERlc2NyaXB0b3JSZWYpe2NvbnN0IGU9bmV3IG4uRGljdCh0aGlzLnhyZWYpO2Uuc2V0KCJUeXBlIixuLk5hbWUuZ2V0KCJGb250RGVzY3JpcHRvciIpKSxlLnNldCgiRm9udE5hbWUiLHRoaXMuZm9udE5hbWUpLGUuc2V0KCJGb250RmFtaWx5IiwiTXlyaWFkUHJvIFJlZ3VsYXIiKSxlLnNldCgiRm9udEJCb3giLFswLDAsMCwwXSksZS5zZXQoIkZvbnRTdHJldGNoIixuLk5hbWUuZ2V0KCJOb3JtYWwiKSksZS5zZXQoIkZvbnRXZWlnaHQiLDQwMCksZS5zZXQoIkl0YWxpY0FuZ2xlIiwwKSxnLl9mb250RGVzY3JpcHRvclJlZj10aGlzLnhyZWYuZ2V0TmV3UGVyc2lzdGVudFJlZihlKX1yZXR1cm4gZy5fZm9udERlc2NyaXB0b3JSZWZ9Z2V0IGRlc2NlbmRhbnRGb250UmVmKCl7Y29uc3QgZT1uZXcgbi5EaWN0KHRoaXMueHJlZik7ZS5zZXQoIkJhc2VGb250Iix0aGlzLmZvbnROYW1lKSxlLnNldCgiVHlwZSIsbi5OYW1lLmdldCgiRm9udCIpKSxlLnNldCgiU3VidHlwZSIsbi5OYW1lLmdldCgiQ0lERm9udFR5cGUwIikpLGUuc2V0KCJDSURUb0dJRE1hcCIsbi5OYW1lLmdldCgiSWRlbnRpdHkiKSksZS5zZXQoIkZpcnN0Q2hhciIsdGhpcy5maXJzdENoYXIpLGUuc2V0KCJMYXN0Q2hhciIsdGhpcy5sYXN0Q2hhciksZS5zZXQoIkZvbnREZXNjcmlwdG9yIix0aGlzLmZvbnREZXNjcmlwdG9yUmVmKSxlLnNldCgiRFciLDFlMyk7Y29uc3QgdD1bXSxyPVsuLi50aGlzLndpZHRocy5lbnRyaWVzKCldLnNvcnQoKTtsZXQgYT1udWxsLGk9bnVsbDtmb3IoY29uc3RbZSxuXW9mIHIpYT9lPT09YStpLmxlbmd0aD9pLnB1c2gobik6KHQucHVzaChhLGkpLGE9ZSxpPVtuXSk6KGE9ZSxpPVtuXSk7YSYmdC5wdXNoKGEsaSksZS5zZXQoIlciLHQpO2NvbnN0IHM9bmV3IG4uRGljdCh0aGlzLnhyZWYpO3JldHVybiBzLnNldCgiT3JkZXJpbmciLCJJZGVudGl0eSIpLHMuc2V0KCJSZWdpc3RyeSIsIkFkb2JlIikscy5zZXQoIlN1cHBsZW1lbnQiLDApLGUuc2V0KCJDSURTeXN0ZW1JbmZvIixzKSx0aGlzLnhyZWYuZ2V0TmV3UGVyc2lzdGVudFJlZihlKX1nZXQgYmFzZUZvbnRSZWYoKXtjb25zdCBlPW5ldyBuLkRpY3QodGhpcy54cmVmKTtyZXR1cm4gZS5zZXQoIkJhc2VGb250Iix0aGlzLmZvbnROYW1lKSxlLnNldCgiVHlwZSIsbi5OYW1lLmdldCgiRm9udCIpKSxlLnNldCgiU3VidHlwZSIsbi5OYW1lLmdldCgiVHlwZTAiKSksZS5zZXQoIkVuY29kaW5nIixuLk5hbWUuZ2V0KCJJZGVudGl0eS1IIikpLGUuc2V0KCJEZXNjZW5kYW50Rm9udHMiLFt0aGlzLmRlc2NlbmRhbnRGb250UmVmXSksZS5zZXQoIlRvVW5pY29kZSIsdGhpcy50b1VuaWNvZGVSZWYpLHRoaXMueHJlZi5nZXROZXdQZXJzaXN0ZW50UmVmKGUpfWdldCByZXNvdXJjZXMoKXtjb25zdCBlPW5ldyBuLkRpY3QodGhpcy54cmVmKSx0PW5ldyBuLkRpY3QodGhpcy54cmVmKTtyZXR1cm4gdC5zZXQodGhpcy5mb250TmFtZS5uYW1lLHRoaXMuYmFzZUZvbnRSZWYpLGUuc2V0KCJGb250Iix0KSxlfV9jcmVhdGVDb250ZXh0KCl7cmV0dXJuIHRoaXMud2lkdGhzPW5ldyBNYXAsdGhpcy5jdHhNZWFzdXJlLmZvbnQ9IjEwMDBweCAiLmNvbmNhdCh0aGlzLmZvbnRGYW1pbHkpLHRoaXMuY3R4TWVhc3VyZX1jcmVhdGVGb250UmVzb3VyY2VzKGUpe2NvbnN0IHQ9dGhpcy5fY3JlYXRlQ29udGV4dCgpO2Zvcihjb25zdCByIG9mIGUuc3BsaXQoL1xyXG4/fFxuLykpZm9yKGNvbnN0IGUgb2Ygci5zcGxpdCgiIikpe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KDApO2lmKHRoaXMud2lkdGhzLmhhcyhyKSljb250aW51ZTtjb25zdCBuPXQubWVhc3VyZVRleHQoZSksYT1NYXRoLmNlaWwobi53aWR0aCk7dGhpcy53aWR0aHMuc2V0KHIsYSksdGhpcy5maXJzdENoYXI9TWF0aC5taW4ocix0aGlzLmZpcnN0Q2hhciksdGhpcy5sYXN0Q2hhcj1NYXRoLm1heChyLHRoaXMubGFzdENoYXIpfXJldHVybiB0aGlzLnJlc291cmNlc31jcmVhdGVBcHBlYXJhbmNlKGUsdCxyLHMsbyxjKXtjb25zdCBsPXRoaXMuX2NyZWF0ZUNvbnRleHQoKSx1PVtdO2xldCBkPS0xLzA7Zm9yKGNvbnN0IHQgb2YgZS5zcGxpdCgvXHJcbj98XG4vKSl7dS5wdXNoKHQpO2NvbnN0IGU9bC5tZWFzdXJlVGV4dCh0KS53aWR0aDtkPU1hdGgubWF4KGQsZSk7Zm9yKGNvbnN0IGUgb2YgdC5zcGxpdCgiIikpe2NvbnN0IHQ9ZS5jaGFyQ29kZUF0KDApO2xldCByPXRoaXMud2lkdGhzLmdldCh0KTtpZih2b2lkIDA9PT1yKXtjb25zdCBuPWwubWVhc3VyZVRleHQoZSk7cj1NYXRoLmNlaWwobi53aWR0aCksdGhpcy53aWR0aHMuc2V0KHQsciksdGhpcy5maXJzdENoYXI9TWF0aC5taW4odCx0aGlzLmZpcnN0Q2hhciksdGhpcy5sYXN0Q2hhcj1NYXRoLm1heCh0LHRoaXMubGFzdENoYXIpfX19ZCo9cy8xZTM7Y29uc3RbZyxwLG0sYl09dDtsZXQgeT1tLWcsdz1iLXA7ciUxODAhPTAmJihbeSx3XT1bdyx5XSk7bGV0IHY9MTtkPnkmJih2PXkvZCk7bGV0IHg9MTtjb25zdCBTPWkuTElORV9GQUNUT1IqcyxBPWkuTElORV9ERVNDRU5UX0ZBQ1RPUipzLGs9Uyp1Lmxlbmd0aDtrPncmJih4PXcvayk7Y29uc3QgQz1zKk1hdGgubWluKHYseCksTz1bInEiLCIwIDAgIi5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykoeSksIiAiKS5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykodyksIiByZSBXIG4iKSwiQlQiLCIxIDAgMCAxIDAgIi5jb25jYXQoKDAsYS5udW1iZXJUb1N0cmluZykodytBKSwiIFRtIDAgVGMgIikuY29uY2F0KGYobywhMCkpLCIvIi5jb25jYXQodGhpcy5mb250TmFtZS5uYW1lLCIgIikuY29uY2F0KCgwLGEubnVtYmVyVG9TdHJpbmcpKEMpLCIgVGYiKV0se3Jlc291cmNlczpGfT10aGlzO2lmKDEhPT0oYz0ibnVtYmVyIj09dHlwZW9mIGMmJmM+PTAmJmM8PTE/YzoxKSl7Ty5wdXNoKCIvUjAgZ3MiKTtjb25zdCBlPW5ldyBuLkRpY3QodGhpcy54cmVmKSx0PW5ldyBuLkRpY3QodGhpcy54cmVmKTt0LnNldCgiY2EiLGMpLHQuc2V0KCJDQSIsYyksdC5zZXQoIlR5cGUiLG4uTmFtZS5nZXQoIkV4dEdTdGF0ZSIpKSxlLnNldCgiUjAiLHQpLEYuc2V0KCJFeHRHU3RhdGUiLGUpfWNvbnN0IEk9KDAsYS5udW1iZXJUb1N0cmluZykoUyk7Zm9yKGNvbnN0IGUgb2YgdSlPLnB1c2goIjAgLSIuY29uY2F0KEksIiBUZCA8IikuY29uY2F0KCgwLGEuc3RyaW5nVG9VVEYxNkhleFN0cmluZykoZSksIj4gVGoiKSk7Ty5wdXNoKCJFVCIsIlEiKTtjb25zdCBUPU8uam9pbigiXG4iKSxNPW5ldyBuLkRpY3QodGhpcy54cmVmKTtpZihNLnNldCgiU3VidHlwZSIsbi5OYW1lLmdldCgiRm9ybSIpKSxNLnNldCgiVHlwZSIsbi5OYW1lLmdldCgiWE9iamVjdCIpKSxNLnNldCgiQkJveCIsWzAsMCx5LHddKSxNLnNldCgiTGVuZ3RoIixULmxlbmd0aCksTS5zZXQoIlJlc291cmNlcyIsRikscil7Y29uc3QgZT0oMCxhLmdldFJvdGF0aW9uTWF0cml4KShyLHksdyk7TS5zZXQoIk1hdHJpeCIsZSl9Y29uc3QgRT1uZXcgaC5TdHJpbmdTdHJlYW0oVCk7cmV0dXJuIEUuZGljdD1NLEV9fXQuRmFrZVVuaWNvZGVGb250PWd9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Db2xvclNwYWNlPXZvaWQgMCxyKDg0KSxyKDkzKSxyKDk0KSxyKDk3KSxyKDk5KSxyKDEwMSkscigxMDUpLHIoMTA4KSxyKDExNSkscigyKTt2YXIgbj1yKDE0NCksYT1yKDE1MCksaT1yKDE1MSkscz1yKDE0OSk7Y2xhc3Mgb3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMuY29uc3RydWN0b3I9PT1vJiYoMCxuLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgQ29sb3JTcGFjZS4iKSx0aGlzLm5hbWU9ZSx0aGlzLm51bUNvbXBzPXR9Z2V0UmdiKGUsdCl7Y29uc3Qgcj1uZXcgVWludDhDbGFtcGVkQXJyYXkoMyk7cmV0dXJuIHRoaXMuZ2V0UmdiSXRlbShlLHQsciwwKSxyfWdldFJnYkl0ZW0oZSx0LHIsYSl7KDAsbi51bnJlYWNoYWJsZSkoIlNob3VsZCBub3QgY2FsbCBDb2xvclNwYWNlLmdldFJnYkl0ZW0iKX1nZXRSZ2JCdWZmZXIoZSx0LHIsYSxpLHMsbyl7KDAsbi51bnJlYWNoYWJsZSkoIlNob3VsZCBub3QgY2FsbCBDb2xvclNwYWNlLmdldFJnYkJ1ZmZlciIpfWdldE91dHB1dExlbmd0aChlLHQpeygwLG4udW5yZWFjaGFibGUpKCJTaG91bGQgbm90IGNhbGwgQ29sb3JTcGFjZS5nZXRPdXRwdXRMZW5ndGgiKX1pc1Bhc3N0aHJvdWdoKGUpe3JldHVybiExfWlzRGVmYXVsdERlY29kZShlLHQpe3JldHVybiBvLmlzRGVmYXVsdERlY29kZShlLHRoaXMubnVtQ29tcHMpfWZpbGxSZ2IoZSx0LHIsbixhLGkscyxvLGMpe2NvbnN0IGw9dCpyO2xldCBoPW51bGw7Y29uc3QgdT0xPDxzLGQ9ciE9PWF8fHQhPT1uO2lmKHRoaXMuaXNQYXNzdGhyb3VnaChzKSloPW87ZWxzZSBpZigxPT09dGhpcy5udW1Db21wcyYmbD51JiYiRGV2aWNlR3JheSIhPT10aGlzLm5hbWUmJiJEZXZpY2VSR0IiIT09dGhpcy5uYW1lKXtjb25zdCB0PXM8PTg/bmV3IFVpbnQ4QXJyYXkodSk6bmV3IFVpbnQxNkFycmF5KHUpO2ZvcihsZXQgZT0wO2U8dTtlKyspdFtlXT1lO2NvbnN0IHI9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMqdSk7aWYodGhpcy5nZXRSZ2JCdWZmZXIodCwwLHUsciwwLHMsMCksZCl7aD1uZXcgVWludDhBcnJheSgzKmwpO2xldCBlPTA7Zm9yKGxldCB0PTA7dDxsOysrdCl7Y29uc3Qgbj0zKm9bdF07aFtlKytdPXJbbl0saFtlKytdPXJbbisxXSxoW2UrK109cltuKzJdfX1lbHNle2xldCB0PTA7Zm9yKGxldCBuPTA7bjxsOysrbil7Y29uc3QgYT0zKm9bbl07ZVt0KytdPXJbYV0sZVt0KytdPXJbYSsxXSxlW3QrK109clthKzJdLHQrPWN9fX1lbHNlIGQ/KGg9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMqbCksdGhpcy5nZXRSZ2JCdWZmZXIobywwLGwsaCwwLHMsMCkpOnRoaXMuZ2V0UmdiQnVmZmVyKG8sMCxuKmksZSwwLHMsYyk7aWYoaClpZihkKSFmdW5jdGlvbihlLHQscixuLGEsaSxzKXtzPTEhPT1zPzA6cztjb25zdCBvPXIvYSxjPW4vaTtsZXQgbCxoPTA7Y29uc3QgdT1uZXcgVWludDE2QXJyYXkoYSksZD0zKnI7Zm9yKGxldCBlPTA7ZTxhO2UrKyl1W2VdPTMqTWF0aC5mbG9vcihlKm8pO2ZvcihsZXQgcj0wO3I8aTtyKyspe2NvbnN0IG49TWF0aC5mbG9vcihyKmMpKmQ7Zm9yKGxldCByPTA7cjxhO3IrKylsPW4rdVtyXSx0W2grK109ZVtsKytdLHRbaCsrXT1lW2wrK10sdFtoKytdPWVbbCsrXSxoKz1zfX0oaCxlLHQscixuLGEsYyk7ZWxzZXtsZXQgdD0wLHI9MDtmb3IobGV0IGE9MCxzPW4qaTthPHM7YSsrKWVbdCsrXT1oW3IrK10sZVt0KytdPWhbcisrXSxlW3QrK109aFtyKytdLHQrPWN9fWdldCB1c2VzWmVyb1RvT25lUmFuZ2UoKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywidXNlc1plcm9Ub09uZVJhbmdlIiwhMCl9c3RhdGljIF9jYWNoZShlLHQscixuKXtpZighcil0aHJvdyBuZXcgRXJyb3IoJ0NvbG9yU3BhY2UuX2NhY2hlIC0gZXhwZWN0ZWQgImxvY2FsQ29sb3JTcGFjZUNhY2hlIiBhcmd1bWVudC4nKTtpZighbil0aHJvdyBuZXcgRXJyb3IoJ0NvbG9yU3BhY2UuX2NhY2hlIC0gZXhwZWN0ZWQgInBhcnNlZENvbG9yU3BhY2UiIGFyZ3VtZW50LicpO2xldCBpLHM7ZSBpbnN0YW5jZW9mIGEuUmVmJiYocz1lLGU9dC5mZXRjaChlKSksZSBpbnN0YW5jZW9mIGEuTmFtZSYmKGk9ZS5uYW1lKSwoaXx8cykmJnIuc2V0KGkscyxuKX1zdGF0aWMgZ2V0Q2FjaGVkKGUsdCxyKXtpZighcil0aHJvdyBuZXcgRXJyb3IoJ0NvbG9yU3BhY2UuZ2V0Q2FjaGVkIC0gZXhwZWN0ZWQgImxvY2FsQ29sb3JTcGFjZUNhY2hlIiBhcmd1bWVudC4nKTtpZihlIGluc3RhbmNlb2YgYS5SZWYpe2NvbnN0IG49ci5nZXRCeVJlZihlKTtpZihuKXJldHVybiBuO3RyeXtlPXQuZmV0Y2goZSl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIHMuTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZX19aWYoZSBpbnN0YW5jZW9mIGEuTmFtZSl7Y29uc3QgdD1yLmdldEJ5TmFtZShlLm5hbWUpO2lmKHQpcmV0dXJuIHR9cmV0dXJuIG51bGx9c3RhdGljIGFzeW5jIHBhcnNlQXN5bmMoZSl7bGV0e2NzOnQseHJlZjpyLHJlc291cmNlczpuPW51bGwscGRmRnVuY3Rpb25GYWN0b3J5OmEsbG9jYWxDb2xvclNwYWNlQ2FjaGU6aX09ZTtjb25zdCBzPXRoaXMuX3BhcnNlKHQscixuLGEpO3JldHVybiB0aGlzLl9jYWNoZSh0LHIsaSxzKSxzfXN0YXRpYyBwYXJzZShlKXtsZXR7Y3M6dCx4cmVmOnIscmVzb3VyY2VzOm49bnVsbCxwZGZGdW5jdGlvbkZhY3Rvcnk6YSxsb2NhbENvbG9yU3BhY2VDYWNoZTppfT1lO2NvbnN0IHM9dGhpcy5nZXRDYWNoZWQodCxyLGkpO2lmKHMpcmV0dXJuIHM7Y29uc3Qgbz10aGlzLl9wYXJzZSh0LHIsbixhKTtyZXR1cm4gdGhpcy5fY2FjaGUodCxyLGksbyksb31zdGF0aWMgX3BhcnNlKGUsdCl7bGV0IHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOm51bGwsaT1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMDtpZigoZT10LmZldGNoSWZSZWYoZSkpaW5zdGFuY2VvZiBhLk5hbWUpc3dpdGNoKGUubmFtZSl7Y2FzZSJHIjpjYXNlIkRldmljZUdyYXkiOnJldHVybiB0aGlzLnNpbmdsZXRvbnMuZ3JheTtjYXNlIlJHQiI6Y2FzZSJEZXZpY2VSR0IiOnJldHVybiB0aGlzLnNpbmdsZXRvbnMucmdiO2Nhc2UiQ01ZSyI6Y2FzZSJEZXZpY2VDTVlLIjpyZXR1cm4gdGhpcy5zaW5nbGV0b25zLmNteWs7Y2FzZSJQYXR0ZXJuIjpyZXR1cm4gbmV3IGwobnVsbCk7ZGVmYXVsdDppZihyIGluc3RhbmNlb2YgYS5EaWN0KXtjb25zdCBuPXIuZ2V0KCJDb2xvclNwYWNlIik7aWYobiBpbnN0YW5jZW9mIGEuRGljdCl7Y29uc3Qgcz1uLmdldChlLm5hbWUpO2lmKHMpe2lmKHMgaW5zdGFuY2VvZiBhLk5hbWUpcmV0dXJuIHRoaXMuX3BhcnNlKHMsdCxyLGkpO2U9czticmVha319fXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbnJlY29nbml6ZWQgQ29sb3JTcGFjZTogIi5jb25jYXQoZS5uYW1lKSl9aWYoQXJyYXkuaXNBcnJheShlKSl7Y29uc3QgYT10LmZldGNoSWZSZWYoZVswXSkubmFtZTtsZXQgcyxvLHUsZCxmLGI7c3dpdGNoKGEpe2Nhc2UiRyI6Y2FzZSJEZXZpY2VHcmF5IjpyZXR1cm4gdGhpcy5zaW5nbGV0b25zLmdyYXk7Y2FzZSJSR0IiOmNhc2UiRGV2aWNlUkdCIjpyZXR1cm4gdGhpcy5zaW5nbGV0b25zLnJnYjtjYXNlIkNNWUsiOmNhc2UiRGV2aWNlQ01ZSyI6cmV0dXJuIHRoaXMuc2luZ2xldG9ucy5jbXlrO2Nhc2UiQ2FsR3JheSI6cmV0dXJuIHM9dC5mZXRjaElmUmVmKGVbMV0pLGQ9cy5nZXRBcnJheSgiV2hpdGVQb2ludCIpLGY9cy5nZXRBcnJheSgiQmxhY2tQb2ludCIpLGI9cy5nZXQoIkdhbW1hIiksbmV3IGcoZCxmLGIpO2Nhc2UiQ2FsUkdCIjpzPXQuZmV0Y2hJZlJlZihlWzFdKSxkPXMuZ2V0QXJyYXkoIldoaXRlUG9pbnQiKSxmPXMuZ2V0QXJyYXkoIkJsYWNrUG9pbnQiKSxiPXMuZ2V0QXJyYXkoIkdhbW1hIik7Y29uc3QgeT1zLmdldEFycmF5KCJNYXRyaXgiKTtyZXR1cm4gbmV3IHAoZCxmLGIseSk7Y2FzZSJJQ0NCYXNlZCI6Y29uc3Qgdz10LmZldGNoSWZSZWYoZVsxXSkuZGljdDtvPXcuZ2V0KCJOIik7Y29uc3Qgdj13LmdldCgiQWx0ZXJuYXRlIik7aWYodil7Y29uc3QgZT10aGlzLl9wYXJzZSh2LHQscixpKTtpZihlLm51bUNvbXBzPT09bylyZXR1cm4gZTsoMCxuLndhcm4pKCJJQ0NCYXNlZCBjb2xvciBzcGFjZTogSWdub3JpbmcgaW5jb3JyZWN0IC9BbHRlcm5hdGUgZW50cnkuIil9aWYoMT09PW8pcmV0dXJuIHRoaXMuc2luZ2xldG9ucy5ncmF5O2lmKDM9PT1vKXJldHVybiB0aGlzLnNpbmdsZXRvbnMucmdiO2lmKDQ9PT1vKXJldHVybiB0aGlzLnNpbmdsZXRvbnMuY215azticmVhaztjYXNlIlBhdHRlcm4iOnJldHVybiB1PWVbMV18fG51bGwsdSYmKHU9dGhpcy5fcGFyc2UodSx0LHIsaSkpLG5ldyBsKHUpO2Nhc2UiSSI6Y2FzZSJJbmRleGVkIjp1PXRoaXMuX3BhcnNlKGVbMV0sdCxyLGkpO2NvbnN0IHg9dC5mZXRjaElmUmVmKGVbMl0pKzEsUz10LmZldGNoSWZSZWYoZVszXSk7cmV0dXJuIG5ldyBoKHUseCxTKTtjYXNlIlNlcGFyYXRpb24iOmNhc2UiRGV2aWNlTiI6Y29uc3QgQT10LmZldGNoSWZSZWYoZVsxXSk7bz1BcnJheS5pc0FycmF5KEEpP0EubGVuZ3RoOjEsdT10aGlzLl9wYXJzZShlWzJdLHQscixpKTtjb25zdCBrPWkuY3JlYXRlKGVbM10pO3JldHVybiBuZXcgYyhvLHUsayk7Y2FzZSJMYWIiOnM9dC5mZXRjaElmUmVmKGVbMV0pLGQ9cy5nZXRBcnJheSgiV2hpdGVQb2ludCIpLGY9cy5nZXRBcnJheSgiQmxhY2tQb2ludCIpO2NvbnN0IEM9cy5nZXRBcnJheSgiUmFuZ2UiKTtyZXR1cm4gbmV3IG0oZCxmLEMpO2RlZmF1bHQ6dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlVuaW1wbGVtZW50ZWQgQ29sb3JTcGFjZSBvYmplY3Q6ICIuY29uY2F0KGEpKX19dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlVucmVjb2duaXplZCBDb2xvclNwYWNlIG9iamVjdDogIi5jb25jYXQoZSkpfXN0YXRpYyBpc0RlZmF1bHREZWNvZGUoZSx0KXtpZighQXJyYXkuaXNBcnJheShlKSlyZXR1cm4hMDtpZigyKnQhPT1lLmxlbmd0aClyZXR1cm4oMCxuLndhcm4pKCJUaGUgZGVjb2RlIG1hcCBpcyBub3QgdGhlIGNvcnJlY3QgbGVuZ3RoIiksITA7Zm9yKGxldCB0PTAscj1lLmxlbmd0aDt0PHI7dCs9MilpZigwIT09ZVt0XXx8MSE9PWVbdCsxXSlyZXR1cm4hMTtyZXR1cm4hMH1zdGF0aWMgZ2V0IHNpbmdsZXRvbnMoKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywic2luZ2xldG9ucyIse2dldCBncmF5KCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImdyYXkiLG5ldyB1KX0sZ2V0IHJnYigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJyZ2IiLG5ldyBkKX0sZ2V0IGNteWsoKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiY215ayIsbmV3IGYpfX0pfX10LkNvbG9yU3BhY2U9bztjbGFzcyBjIGV4dGVuZHMgb3tjb25zdHJ1Y3RvcihlLHQscil7c3VwZXIoIkFsdGVybmF0ZSIsZSksdGhpcy5iYXNlPXQsdGhpcy50aW50Rm49cix0aGlzLnRtcEJ1Zj1uZXcgRmxvYXQzMkFycmF5KHQubnVtQ29tcHMpfWdldFJnYkl0ZW0oZSx0LHIsbil7Y29uc3QgYT10aGlzLnRtcEJ1Zjt0aGlzLnRpbnRGbihlLHQsYSwwKSx0aGlzLmJhc2UuZ2V0UmdiSXRlbShhLDAscixuKX1nZXRSZ2JCdWZmZXIoZSx0LHIsbixhLGkscyl7Y29uc3Qgbz10aGlzLnRpbnRGbixjPXRoaXMuYmFzZSxsPTEvKCgxPDxpKS0xKSxoPWMubnVtQ29tcHMsdT1jLnVzZXNaZXJvVG9PbmVSYW5nZSxkPShjLmlzUGFzc3Rocm91Z2goOCl8fCF1KSYmMD09PXM7bGV0IGY9ZD9hOjA7Y29uc3QgZz1kP246bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGgqcikscD10aGlzLm51bUNvbXBzLG09bmV3IEZsb2F0MzJBcnJheShwKSxiPW5ldyBGbG9hdDMyQXJyYXkoaCk7bGV0IHksdztmb3IoeT0wO3k8cjt5Kyspe2Zvcih3PTA7dzxwO3crKyltW3ddPWVbdCsrXSpsO2lmKG8obSwwLGIsMCksdSlmb3Iodz0wO3c8aDt3KyspZ1tmKytdPTI1NSpiW3ddO2Vsc2UgYy5nZXRSZ2JJdGVtKGIsMCxnLGYpLGYrPWh9ZHx8Yy5nZXRSZ2JCdWZmZXIoZywwLHIsbixhLDgscyl9Z2V0T3V0cHV0TGVuZ3RoKGUsdCl7cmV0dXJuIHRoaXMuYmFzZS5nZXRPdXRwdXRMZW5ndGgoZSp0aGlzLmJhc2UubnVtQ29tcHMvdGhpcy5udW1Db21wcyx0KX19Y2xhc3MgbCBleHRlbmRzIG97Y29uc3RydWN0b3IoZSl7c3VwZXIoIlBhdHRlcm4iLG51bGwpLHRoaXMuYmFzZT1lfWlzRGVmYXVsdERlY29kZShlLHQpeygwLG4udW5yZWFjaGFibGUpKCJTaG91bGQgbm90IGNhbGwgUGF0dGVybkNTLmlzRGVmYXVsdERlY29kZSIpfX1jbGFzcyBoIGV4dGVuZHMgb3tjb25zdHJ1Y3RvcihlLHQscil7c3VwZXIoIkluZGV4ZWQiLDEpLHRoaXMuYmFzZT1lLHRoaXMuaGlnaFZhbD10O2NvbnN0IGE9ZS5udW1Db21wcyp0O2lmKHRoaXMubG9va3VwPW5ldyBVaW50OEFycmF5KGEpLHIgaW5zdGFuY2VvZiBpLkJhc2VTdHJlYW0pe2NvbnN0IGU9ci5nZXRCeXRlcyhhKTt0aGlzLmxvb2t1cC5zZXQoZSl9ZWxzZXtpZigic3RyaW5nIiE9dHlwZW9mIHIpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkluZGV4ZWRDUyAtIHVucmVjb2duaXplZCBsb29rdXAgdGFibGU6ICIuY29uY2F0KHIpKTtmb3IobGV0IGU9MDtlPGE7KytlKXRoaXMubG9va3VwW2VdPTI1NSZyLmNoYXJDb2RlQXQoZSl9fWdldFJnYkl0ZW0oZSx0LHIsbil7Y29uc3QgYT10aGlzLmJhc2UubnVtQ29tcHMsaT1lW3RdKmE7dGhpcy5iYXNlLmdldFJnYkJ1ZmZlcih0aGlzLmxvb2t1cCxpLDEscixuLDgsMCl9Z2V0UmdiQnVmZmVyKGUsdCxyLG4sYSxpLHMpe2NvbnN0IG89dGhpcy5iYXNlLGM9by5udW1Db21wcyxsPW8uZ2V0T3V0cHV0TGVuZ3RoKGMscyksaD10aGlzLmxvb2t1cDtmb3IobGV0IGk9MDtpPHI7KytpKXtjb25zdCByPWVbdCsrXSpjO28uZ2V0UmdiQnVmZmVyKGgsciwxLG4sYSw4LHMpLGErPWx9fWdldE91dHB1dExlbmd0aChlLHQpe3JldHVybiB0aGlzLmJhc2UuZ2V0T3V0cHV0TGVuZ3RoKGUqdGhpcy5iYXNlLm51bUNvbXBzLHQpfWlzRGVmYXVsdERlY29kZShlLHQpe3JldHVybiFBcnJheS5pc0FycmF5KGUpfHwoMiE9PWUubGVuZ3RoPygoMCxuLndhcm4pKCJEZWNvZGUgbWFwIGxlbmd0aCBpcyBub3QgY29ycmVjdCIpLCEwKTohTnVtYmVyLmlzSW50ZWdlcih0KXx8dDwxPygoMCxuLndhcm4pKCJCaXRzIHBlciBjb21wb25lbnQgaXMgbm90IGNvcnJlY3QiKSwhMCk6MD09PWVbMF0mJmVbMV09PT0oMTw8dCktMSl9fWNsYXNzIHUgZXh0ZW5kcyBve2NvbnN0cnVjdG9yKCl7c3VwZXIoIkRldmljZUdyYXkiLDEpfWdldFJnYkl0ZW0oZSx0LHIsbil7Y29uc3QgYT0yNTUqZVt0XTtyW25dPXJbbisxXT1yW24rMl09YX1nZXRSZ2JCdWZmZXIoZSx0LHIsbixhLGkscyl7Y29uc3Qgbz0yNTUvKCgxPDxpKS0xKTtsZXQgYz10LGw9YTtmb3IobGV0IHQ9MDt0PHI7Kyt0KXtjb25zdCB0PW8qZVtjKytdO25bbCsrXT10LG5bbCsrXT10LG5bbCsrXT10LGwrPXN9fWdldE91dHB1dExlbmd0aChlLHQpe3JldHVybiBlKigzK3QpfX1jbGFzcyBkIGV4dGVuZHMgb3tjb25zdHJ1Y3Rvcigpe3N1cGVyKCJEZXZpY2VSR0IiLDMpfWdldFJnYkl0ZW0oZSx0LHIsbil7cltuXT0yNTUqZVt0XSxyW24rMV09MjU1KmVbdCsxXSxyW24rMl09MjU1KmVbdCsyXX1nZXRSZ2JCdWZmZXIoZSx0LHIsbixhLGkscyl7aWYoOD09PWkmJjA9PT1zKXJldHVybiB2b2lkIG4uc2V0KGUuc3ViYXJyYXkodCx0KzMqciksYSk7Y29uc3Qgbz0yNTUvKCgxPDxpKS0xKTtsZXQgYz10LGw9YTtmb3IobGV0IHQ9MDt0PHI7Kyt0KW5bbCsrXT1vKmVbYysrXSxuW2wrK109byplW2MrK10sbltsKytdPW8qZVtjKytdLGwrPXN9Z2V0T3V0cHV0TGVuZ3RoKGUsdCl7cmV0dXJuIGUqKDMrdCkvM3wwfWlzUGFzc3Rocm91Z2goZSl7cmV0dXJuIDg9PT1lfX1jb25zdCBmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscixuLGEpe2NvbnN0IGk9ZVt0XSpyLHM9ZVt0KzFdKnIsbz1lW3QrMl0qcixjPWVbdCszXSpyO25bYV09MjU1K2kqKC00LjM4NzMzMjM4NDYwOTk4OCppKzU0LjQ4NjE1MTk0MTg5MTc2KnMrMTguODIyOTA1MDIxNjUzMDIqbysyMTIuMjU2NjI0NTE2Mzk1ODUqYy0yODUuMjMzMTAyNjEzNzAwNCkrcyooMS43MTQ5NzYzNDc3MzYyMTM0KnMtNS42MDk2NzM2OTA0MDQ3MzE1Km8rLTE3Ljg3Mzg3MDg2MTQxNTQ0NCpjLTUuNDk3MDA2NDI3MTk2MzY2KStvKigtMi41MjE3MzQwMTMxNjgzMDMzKm8tMjEuMjQ4OTIzMzM3MzUzMDczKmMrMTcuNTExOTI3MDg0MTgxMykrYyooLTIxLjg2MTIyMTQ3NDYzNjA1KmMtMTg5LjQ4MTgwODM1OTIyNzQ3KSxuW2ErMV09MjU1K2kqKDguODQxMDQxNDIyMDM2MTQ5KmkrNjAuMTE4MDI3MDQ1NTk3MzY2KnMrNi44NzE0MjU1OTIwNDkwMDcqbyszMS4xNTkxMDAxMzAwNTU5MjIqYy03OS4yOTcwODQ0ODE2NTQ4KStzKigtMTUuMzEwMzYxMzA2OTY3ODE3KnMrMTcuNTc1MjUxMjYxMTA5NDgyKm8rMTMxLjM1MjUwOTEyNDkzOTc2KmMtMTkwLjk0NTMzMDI1ODg5NTEpK28qKDQuNDQ0MzM5MTAyODUyNzM5Km8rOS44NjMyODYxNDkzNDA1KmMtMjQuODY3NDE1ODI1NTU4NzgpK2MqKC0yMC43MzczMjU0NzExODEwMzQqYy0xODcuODA0NTM3MDk3MTk1NzgpLG5bYSsyXT0yNTUraSooLjg4NDI1MjI0MzAwMDMyOTYqaSs4LjA3ODY3NzUwMzExMjkyOCpzKzMwLjg5OTc4MzA5NzAzNzI5Km8tLjIzODgzMjM4Njg5MTc4OTM0KmMtMTQuMTgzNTc2Nzk5NjczMjg2KStzKigxMC40OTU5MzI3MzQzMjA3MipzKzYzLjAyMzc4NDk0NzU0MDUyKm8rNTAuNjA2OTU3NjU2MzYwNzM0KmMtMTEyLjIzODg0MjUzNzE5MjQ4KStvKiguMDMyOTYwNDExMTQ4NzMyMTcqbysxMTUuNjAzODQ0NDk2NDY2NDEqYy0xOTMuNTgyMDkzNTY4NjE1MDUpK2MqKC0yMi4zMzgxNjgwNzMwOTg4NipjLTE4MC4xMjYxMzk3NDcwODM2Nyl9cmV0dXJuIGNsYXNzIGV4dGVuZHMgb3tjb25zdHJ1Y3Rvcigpe3N1cGVyKCJEZXZpY2VDTVlLIiw0KX1nZXRSZ2JJdGVtKHQscixuLGEpe2UodCxyLDEsbixhKX1nZXRSZ2JCdWZmZXIodCxyLG4sYSxpLHMsbyl7Y29uc3QgYz0xLygoMTw8cyktMSk7Zm9yKGxldCBzPTA7czxuO3MrKyllKHQscixjLGEsaSkscis9NCxpKz0zK299Z2V0T3V0cHV0TGVuZ3RoKGUsdCl7cmV0dXJuIGUvNCooMyt0KXwwfX19KCksZz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LHIsbixhLGkpe2NvbnN0IHM9KHRbcl0qaSkqKmUuRyxvPWUuWVcqcyxjPU1hdGgubWF4KDI5NS44Km8qKi4zMzMzMzMzMzMzMzMzMzMzLTQwLjgsMCk7blthXT1jLG5bYSsxXT1jLG5bYSsyXT1jfXJldHVybiBjbGFzcyBleHRlbmRzIG97Y29uc3RydWN0b3IoZSx0LHIpe2lmKHN1cGVyKCJDYWxHcmF5IiwxKSwhZSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiV2hpdGVQb2ludCBtaXNzaW5nIC0gcmVxdWlyZWQgZm9yIGNvbG9yIHNwYWNlIENhbEdyYXkiKTtpZih0fHwodD1bMCwwLDBdKSxyfHwocj0xKSx0aGlzLlhXPWVbMF0sdGhpcy5ZVz1lWzFdLHRoaXMuWlc9ZVsyXSx0aGlzLlhCPXRbMF0sdGhpcy5ZQj10WzFdLHRoaXMuWkI9dFsyXSx0aGlzLkc9cix0aGlzLlhXPDB8fHRoaXMuWlc8MHx8MSE9PXRoaXMuWVcpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgV2hpdGVQb2ludCBjb21wb25lbnRzIGZvciAiLmNvbmNhdCh0aGlzLm5hbWUsIiwgbm8gZmFsbGJhY2sgYXZhaWxhYmxlIikpOyh0aGlzLlhCPDB8fHRoaXMuWUI8MHx8dGhpcy5aQjwwKSYmKCgwLG4uaW5mbykoIkludmFsaWQgQmxhY2tQb2ludCBmb3IgIi5jb25jYXQodGhpcy5uYW1lLCIsIGZhbGxpbmcgYmFjayB0byBkZWZhdWx0LiIpKSx0aGlzLlhCPXRoaXMuWUI9dGhpcy5aQj0wKSwwPT09dGhpcy5YQiYmMD09PXRoaXMuWUImJjA9PT10aGlzLlpCfHwoMCxuLndhcm4pKCIiLmNvbmNhdCh0aGlzLm5hbWUsIiwgQmxhY2tQb2ludDogWEI6ICIpLmNvbmNhdCh0aGlzLlhCLCIsIFlCOiAiKS5jb25jYXQodGhpcy5ZQiwiLCBaQjogIikuY29uY2F0KHRoaXMuWkIsIiwgb25seSBkZWZhdWx0IHZhbHVlcyBhcmUgc3VwcG9ydGVkLiIpKSx0aGlzLkc8MSYmKCgwLG4uaW5mbykoIkludmFsaWQgR2FtbWE6ICIuY29uY2F0KHRoaXMuRywiIGZvciAiKS5jb25jYXQodGhpcy5uYW1lLCIsIGZhbGxpbmcgYmFjayB0byBkZWZhdWx0LiIpKSx0aGlzLkc9MSl9Z2V0UmdiSXRlbSh0LHIsbixhKXtlKHRoaXMsdCxyLG4sYSwxKX1nZXRSZ2JCdWZmZXIodCxyLG4sYSxpLHMsbyl7Y29uc3QgYz0xLygoMTw8cyktMSk7Zm9yKGxldCBzPTA7czxuOysrcyllKHRoaXMsdCxyLGEsaSxjKSxyKz0xLGkrPTMrb31nZXRPdXRwdXRMZW5ndGgoZSx0KXtyZXR1cm4gZSooMyt0KX19fSgpLHA9ZnVuY3Rpb24oKXtjb25zdCBlPW5ldyBGbG9hdDMyQXJyYXkoWy44OTUxLC4yNjY0LC0uMTYxNCwtLjc1MDIsMS43MTM1LC4wMzY3LC4wMzg5LC0uMDY4NSwxLjAyOTZdKSx0PW5ldyBGbG9hdDMyQXJyYXkoWy45ODY5OTI5LC0uMTQ3MDU0MywuMTU5OTYyNywuNDMyMzA1MywuNTE4MzYwMywuMDQ5MjkxMiwtLjAwODUyODcsLjA0MDA0MjgsLjk2ODQ4NjddKSxyPW5ldyBGbG9hdDMyQXJyYXkoWzMuMjQwNDU0MiwtMS41MzcxMzg1LC0uNDk4NTMxNCwtLjk2OTI2NiwxLjg3NjAxMDgsLjA0MTU1NiwuMDU1NjQzNCwtLjIwNDAyNTksMS4wNTcyMjUyXSksYT1uZXcgRmxvYXQzMkFycmF5KFsxLDEsMV0pLGk9bmV3IEZsb2F0MzJBcnJheSgzKSxzPW5ldyBGbG9hdDMyQXJyYXkoMyksYz1uZXcgRmxvYXQzMkFycmF5KDMpLGw9KDI0LzExNikqKjMvODtmdW5jdGlvbiBoKGUsdCxyKXtyWzBdPWVbMF0qdFswXStlWzFdKnRbMV0rZVsyXSp0WzJdLHJbMV09ZVszXSp0WzBdK2VbNF0qdFsxXStlWzVdKnRbMl0sclsyXT1lWzZdKnRbMF0rZVs3XSp0WzFdK2VbOF0qdFsyXX1mdW5jdGlvbiB1KGUpe3JldHVybiBlPD0uMDAzMTMwOD9kKDAsMSwxMi45MiplKTplPj0uOTk1NTQ1MjU/MTpkKDAsMSwxLjA1NSplKiooMS8yLjQpLS4wNTUpfWZ1bmN0aW9uIGQoZSx0LHIpe3JldHVybiBNYXRoLm1heChlLE1hdGgubWluKHQscikpfWZ1bmN0aW9uIGYoZSl7cmV0dXJuIGU8MD8tZigtZSk6ZT44PygoZSsxNikvMTE2KSoqMzplKmx9ZnVuY3Rpb24gZyhuLG8sbCxnLHAsbSl7Y29uc3QgYj1kKDAsMSxvW2xdKm0pLHk9ZCgwLDEsb1tsKzFdKm0pLHc9ZCgwLDEsb1tsKzJdKm0pLHY9MT09PWI/MTpiKipuLkdSLHg9MT09PXk/MTp5KipuLkdHLFM9MT09PXc/MTp3KipuLkdCLEE9bi5NWEEqdituLk1YQip4K24uTVhDKlMsaz1uLk1ZQSp2K24uTVlCKngrbi5NWUMqUyxDPW4uTVpBKnYrbi5NWkIqeCtuLk1aQypTLE89cztPWzBdPUEsT1sxXT1rLE9bMl09Qztjb25zdCBGPWM7IWZ1bmN0aW9uKHIsbixhKXtpZigxPT09clswXSYmMT09PXJbMl0pcmV0dXJuIGFbMF09blswXSxhWzFdPW5bMV0sdm9pZChhWzJdPW5bMl0pO2NvbnN0IHM9YTtoKGUsbixzKTtjb25zdCBvPWk7IWZ1bmN0aW9uKGUsdCxyKXtyWzBdPTEqdFswXS9lWzBdLHJbMV09MSp0WzFdL2VbMV0sclsyXT0xKnRbMl0vZVsyXX0ocixzLG8pLGgodCxvLGEpfShuLndoaXRlUG9pbnQsTyxGKTtjb25zdCBJPXM7IWZ1bmN0aW9uKGUsdCxyKXtpZigwPT09ZVswXSYmMD09PWVbMV0mJjA9PT1lWzJdKXJldHVybiByWzBdPXRbMF0sclsxXT10WzFdLHZvaWQoclsyXT10WzJdKTtjb25zdCBuPWYoMCksYT0oMS1uKS8oMS1mKGVbMF0pKSxpPTEtYSxzPSgxLW4pLygxLWYoZVsxXSkpLG89MS1zLGM9KDEtbikvKDEtZihlWzJdKSksbD0xLWM7clswXT10WzBdKmEraSxyWzFdPXRbMV0qcytvLHJbMl09dFsyXSpjK2x9KG4uYmxhY2tQb2ludCxGLEkpO2NvbnN0IFQ9YzshZnVuY3Rpb24ocixuLGEpe2NvbnN0IHM9YTtoKGUsbixzKTtjb25zdCBvPWk7IWZ1bmN0aW9uKGUsdCxyKXtyWzBdPS45NTA0Nyp0WzBdL2VbMF0sclsxXT0xKnRbMV0vZVsxXSxyWzJdPTEuMDg4ODMqdFsyXS9lWzJdfShyLHMsbyksaCh0LG8sYSl9KGEsSSxUKTtjb25zdCBNPXM7aChyLFQsTSksZ1twXT0yNTUqdShNWzBdKSxnW3ArMV09MjU1KnUoTVsxXSksZ1twKzJdPTI1NSp1KE1bMl0pfXJldHVybiBjbGFzcyBleHRlbmRzIG97Y29uc3RydWN0b3IoZSx0LHIsYSl7aWYoc3VwZXIoIkNhbFJHQiIsMyksIWUpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIldoaXRlUG9pbnQgbWlzc2luZyAtIHJlcXVpcmVkIGZvciBjb2xvciBzcGFjZSBDYWxSR0IiKTt0fHwodD1uZXcgRmxvYXQzMkFycmF5KDMpKSxyfHwocj1uZXcgRmxvYXQzMkFycmF5KFsxLDEsMV0pKSxhfHwoYT1uZXcgRmxvYXQzMkFycmF5KFsxLDAsMCwwLDEsMCwwLDAsMV0pKTtjb25zdCBpPWVbMF0scz1lWzFdLG89ZVsyXTt0aGlzLndoaXRlUG9pbnQ9ZTtjb25zdCBjPXRbMF0sbD10WzFdLGg9dFsyXTtpZih0aGlzLmJsYWNrUG9pbnQ9dCx0aGlzLkdSPXJbMF0sdGhpcy5HRz1yWzFdLHRoaXMuR0I9clsyXSx0aGlzLk1YQT1hWzBdLHRoaXMuTVlBPWFbMV0sdGhpcy5NWkE9YVsyXSx0aGlzLk1YQj1hWzNdLHRoaXMuTVlCPWFbNF0sdGhpcy5NWkI9YVs1XSx0aGlzLk1YQz1hWzZdLHRoaXMuTVlDPWFbN10sdGhpcy5NWkM9YVs4XSxpPDB8fG88MHx8MSE9PXMpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgV2hpdGVQb2ludCBjb21wb25lbnRzIGZvciAiLmNvbmNhdCh0aGlzLm5hbWUsIiwgbm8gZmFsbGJhY2sgYXZhaWxhYmxlIikpOyhjPDB8fGw8MHx8aDwwKSYmKCgwLG4uaW5mbykoIkludmFsaWQgQmxhY2tQb2ludCBmb3IgIi5jb25jYXQodGhpcy5uYW1lLCIgWyIpLmNvbmNhdChjLCIsICIpLmNvbmNhdChsLCIsICIpLmNvbmNhdChoLCJdLCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdC4iKSksdGhpcy5ibGFja1BvaW50PW5ldyBGbG9hdDMyQXJyYXkoMykpLCh0aGlzLkdSPDB8fHRoaXMuR0c8MHx8dGhpcy5HQjwwKSYmKCgwLG4uaW5mbykoIkludmFsaWQgR2FtbWEgWyIuY29uY2F0KHRoaXMuR1IsIiwgIikuY29uY2F0KHRoaXMuR0csIiwgIikuY29uY2F0KHRoaXMuR0IsIl0gZm9yICIpLmNvbmNhdCh0aGlzLm5hbWUsIiwgZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQuIikpLHRoaXMuR1I9dGhpcy5HRz10aGlzLkdCPTEpfWdldFJnYkl0ZW0oZSx0LHIsbil7Zyh0aGlzLGUsdCxyLG4sMSl9Z2V0UmdiQnVmZmVyKGUsdCxyLG4sYSxpLHMpe2NvbnN0IG89MS8oKDE8PGkpLTEpO2ZvcihsZXQgaT0wO2k8cjsrK2kpZyh0aGlzLGUsdCxuLGEsbyksdCs9MyxhKz0zK3N9Z2V0T3V0cHV0TGVuZ3RoKGUsdCl7cmV0dXJuIGUqKDMrdCkvM3wwfX19KCksbT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7cmV0dXJuIGU+PTYvMjk/ZSoqMzoxMDgvODQxKihlLTQvMjkpfWZ1bmN0aW9uIHQoZSx0LHIsbil7cmV0dXJuIHIrZSoobi1yKS90fWZ1bmN0aW9uIHIocixuLGEsaSxzLG8pe2xldCBjPW5bYV0sbD1uW2ErMV0saD1uW2ErMl07ITEhPT1pJiYoYz10KGMsaSwwLDEwMCksbD10KGwsaSxyLmFtaW4sci5hbWF4KSxoPXQoaCxpLHIuYm1pbixyLmJtYXgpKSxsPnIuYW1heD9sPXIuYW1heDpsPHIuYW1pbiYmKGw9ci5hbWluKSxoPnIuYm1heD9oPXIuYm1heDpoPHIuYm1pbiYmKGg9ci5ibWluKTtjb25zdCB1PShjKzE2KS8xMTYsZD11K2wvNTAwLGY9dS1oLzIwMCxnPXIuWFcqZShkKSxwPXIuWVcqZSh1KSxtPXIuWlcqZShmKTtsZXQgYix5LHc7ci5aVzwxPyhiPTMuMTMzOSpnKy0xLjYxNypwKy0uNDkwNiptLHk9LS45Nzg1KmcrMS45MTYqcCsuMDMzMyptLHc9LjA3MipnKy0uMjI5KnArMS40MDU3Km0pOihiPTMuMjQwNipnKy0xLjUzNzIqcCstLjQ5ODYqbSx5PS0uOTY4OSpnKzEuODc1OCpwKy4wNDE1Km0sdz0uMDU1NypnKy0uMjA0KnArMS4wNTcqbSksc1tvXT0yNTUqTWF0aC5zcXJ0KGIpLHNbbysxXT0yNTUqTWF0aC5zcXJ0KHkpLHNbbysyXT0yNTUqTWF0aC5zcXJ0KHcpfXJldHVybiBjbGFzcyBleHRlbmRzIG97Y29uc3RydWN0b3IoZSx0LHIpe2lmKHN1cGVyKCJMYWIiLDMpLCFlKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJXaGl0ZVBvaW50IG1pc3NpbmcgLSByZXF1aXJlZCBmb3IgY29sb3Igc3BhY2UgTGFiIik7aWYodHx8KHQ9WzAsMCwwXSkscnx8KHI9Wy0xMDAsMTAwLC0xMDAsMTAwXSksdGhpcy5YVz1lWzBdLHRoaXMuWVc9ZVsxXSx0aGlzLlpXPWVbMl0sdGhpcy5hbWluPXJbMF0sdGhpcy5hbWF4PXJbMV0sdGhpcy5ibWluPXJbMl0sdGhpcy5ibWF4PXJbM10sdGhpcy5YQj10WzBdLHRoaXMuWUI9dFsxXSx0aGlzLlpCPXRbMl0sdGhpcy5YVzwwfHx0aGlzLlpXPDB8fDEhPT10aGlzLllXKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFdoaXRlUG9pbnQgY29tcG9uZW50cywgbm8gZmFsbGJhY2sgYXZhaWxhYmxlIik7KHRoaXMuWEI8MHx8dGhpcy5ZQjwwfHx0aGlzLlpCPDApJiYoKDAsbi5pbmZvKSgiSW52YWxpZCBCbGFja1BvaW50LCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdCIpLHRoaXMuWEI9dGhpcy5ZQj10aGlzLlpCPTApLCh0aGlzLmFtaW4+dGhpcy5hbWF4fHx0aGlzLmJtaW4+dGhpcy5ibWF4KSYmKCgwLG4uaW5mbykoIkludmFsaWQgUmFuZ2UsIGZhbGxpbmcgYmFjayB0byBkZWZhdWx0cyIpLHRoaXMuYW1pbj0tMTAwLHRoaXMuYW1heD0xMDAsdGhpcy5ibWluPS0xMDAsdGhpcy5ibWF4PTEwMCl9Z2V0UmdiSXRlbShlLHQsbixhKXtyKHRoaXMsZSx0LCExLG4sYSl9Z2V0UmdiQnVmZmVyKGUsdCxuLGEsaSxzLG8pe2NvbnN0IGM9KDE8PHMpLTE7Zm9yKGxldCBzPTA7czxuO3MrKylyKHRoaXMsZSx0LGMsYSxpKSx0Kz0zLGkrPTMrb31nZXRPdXRwdXRMZW5ndGgoZSx0KXtyZXR1cm4gZSooMyt0KS8zfDB9aXNEZWZhdWx0RGVjb2RlKGUsdCl7cmV0dXJuITB9Z2V0IHVzZXNaZXJvVG9PbmVSYW5nZSgpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJ1c2VzWmVyb1RvT25lUmFuZ2UiLCExKX19fSgpfSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuUGFydGlhbEV2YWx1YXRvcj10LkV2YWx1YXRvclByZXByb2Nlc3Nvcj12b2lkIDAscigxMzkpLHIoMikscig4NCkscig5Mykscig5NCkscig5Nykscig5OSkscigxMDEpLHIoMTA1KSxyKDEwOCkscigxMTUpLHIoMTE2KSxyKDEyNikscigxMjgpLHIoMTMxKSxyKDEzMykscigxMzUpLHIoMTM3KSxyKDE1NykscigxNTkpO3ZhciBuPXIoMTQ0KSxhPXIoMTY0KSxzPXIoMTUwKSxvPXIoMTg0KSxjPXIoMTg3KSxsPXIoMTkxKSxoPXIoMjAwKSx1PXIoMjAxKSxkPXIoMTkyKSxmPXIoMjA3KSxnPXIoMTY2KSxwPXIoMjA5KSxtPXIoMTU0KSxiPXIoMTUxKSx5PXIoMjEwKSx3PXIoMTYyKSx2PXIoMTY4KSx4PXIoMTg4KSxTPXIoMjExKSxBPXIoMTg5KSxrPXIoMTQ5KSxDPXIoMTk1KSxPPXIoMTkwKSxGPXIoMjEyKSxJPXIoMjEzKSxUPXIoMjE0KSxNPXIoMjE1KTtjb25zdCBFPU9iamVjdC5mcmVlemUoe21heEltYWdlU2l6ZTotMSxkaXNhYmxlRm9udEZhY2U6ITEsaWdub3JlRXJyb3JzOiExLGlzRXZhbFN1cHBvcnRlZDohMCxpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDohMSxjYW52YXNNYXhBcmVhSW5CeXRlczotMSxmb250RXh0cmFQcm9wZXJ0aWVzOiExLHVzZVN5c3RlbUZvbnRzOiEwLGNNYXBVcmw6bnVsbCxzdGFuZGFyZEZvbnREYXRhVXJsOm51bGx9KSxQPVByb21pc2UucmVzb2x2ZSgpO2Z1bmN0aW9uIFIoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IoY29uc3QgdCBvZiBlKXtjb25zdCBlPVIodCwhMCk7aWYoZSlyZXR1cm4gZX1yZXR1cm4oMCxuLndhcm4pKCJVbnN1cHBvcnRlZCBibGVuZCBtb2RlIEFycmF5OiAiLmNvbmNhdChlKSksInNvdXJjZS1vdmVyIn1pZighKGUgaW5zdGFuY2VvZiBzLk5hbWUpKXJldHVybiB0P251bGw6InNvdXJjZS1vdmVyIjtzd2l0Y2goZS5uYW1lKXtjYXNlIk5vcm1hbCI6Y2FzZSJDb21wYXRpYmxlIjpyZXR1cm4ic291cmNlLW92ZXIiO2Nhc2UiTXVsdGlwbHkiOnJldHVybiJtdWx0aXBseSI7Y2FzZSJTY3JlZW4iOnJldHVybiJzY3JlZW4iO2Nhc2UiT3ZlcmxheSI6cmV0dXJuIm92ZXJsYXkiO2Nhc2UiRGFya2VuIjpyZXR1cm4iZGFya2VuIjtjYXNlIkxpZ2h0ZW4iOnJldHVybiJsaWdodGVuIjtjYXNlIkNvbG9yRG9kZ2UiOnJldHVybiJjb2xvci1kb2RnZSI7Y2FzZSJDb2xvckJ1cm4iOnJldHVybiJjb2xvci1idXJuIjtjYXNlIkhhcmRMaWdodCI6cmV0dXJuImhhcmQtbGlnaHQiO2Nhc2UiU29mdExpZ2h0IjpyZXR1cm4ic29mdC1saWdodCI7Y2FzZSJEaWZmZXJlbmNlIjpyZXR1cm4iZGlmZmVyZW5jZSI7Y2FzZSJFeGNsdXNpb24iOnJldHVybiJleGNsdXNpb24iO2Nhc2UiSHVlIjpyZXR1cm4iaHVlIjtjYXNlIlNhdHVyYXRpb24iOnJldHVybiJzYXR1cmF0aW9uIjtjYXNlIkNvbG9yIjpyZXR1cm4iY29sb3IiO2Nhc2UiTHVtaW5vc2l0eSI6cmV0dXJuImx1bWlub3NpdHkifXJldHVybiB0P251bGw6KCgwLG4ud2FybikoIlVuc3VwcG9ydGVkIGJsZW5kIG1vZGU6ICIuY29uY2F0KGUubmFtZSkpLCJzb3VyY2Utb3ZlciIpfWZ1bmN0aW9uIE4oZSl7dmFyIHQ7ZS5mbj09PW4uT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdCYmKG51bGw9PT0odD1lLmFyZ3NbMF0pfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmNvdW50KT4wJiZlLmFyZ3NbMF0uY291bnQrK31jbGFzcyBEe2NvbnN0cnVjdG9yKCl7dGhpcy5yZXNldCgpfWNoZWNrKCl7cmV0dXJuISgrK3RoaXMuY2hlY2tlZDxELkNIRUNLX1RJTUVfRVZFUlkpJiYodGhpcy5jaGVja2VkPTAsdGhpcy5lbmRUaW1lPD1EYXRlLm5vdygpKX1yZXNldCgpe3RoaXMuZW5kVGltZT1EYXRlLm5vdygpK0QuVElNRV9TTE9UX0RVUkFUSU9OX01TLHRoaXMuY2hlY2tlZD0wfX1pKEQsIlRJTUVfU0xPVF9EVVJBVElPTl9NUyIsMjApLGkoRCwiQ0hFQ0tfVElNRV9FVkVSWSIsMTAwKTtjbGFzcyBCe2NvbnN0cnVjdG9yKGUpe2xldHt4cmVmOnQsaGFuZGxlcjpyLHBhZ2VJbmRleDpuLGlkRmFjdG9yeTphLGZvbnRDYWNoZTppLGJ1aWx0SW5DTWFwQ2FjaGU6cyxzdGFuZGFyZEZvbnREYXRhQ2FjaGU6byxnbG9iYWxJbWFnZUNhY2hlOmMsc3lzdGVtRm9udENhY2hlOmwsb3B0aW9uczpoPW51bGx9PWU7dGhpcy54cmVmPXQsdGhpcy5oYW5kbGVyPXIsdGhpcy5wYWdlSW5kZXg9bix0aGlzLmlkRmFjdG9yeT1hLHRoaXMuZm9udENhY2hlPWksdGhpcy5idWlsdEluQ01hcENhY2hlPXMsdGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGU9byx0aGlzLmdsb2JhbEltYWdlQ2FjaGU9Yyx0aGlzLnN5c3RlbUZvbnRDYWNoZT1sLHRoaXMub3B0aW9ucz1ofHxFLHRoaXMucGFyc2luZ1R5cGUzRm9udD0hMSx0aGlzLl9yZWdpb25hbEltYWdlQ2FjaGU9bmV3IHAuUmVnaW9uYWxJbWFnZUNhY2hlLHRoaXMuX2ZldGNoQnVpbHRJbkNNYXBCb3VuZD10aGlzLmZldGNoQnVpbHRJbkNNYXAuYmluZCh0aGlzKSxGLkltYWdlUmVzaXplci5zZXRNYXhBcmVhKHRoaXMub3B0aW9ucy5jYW52YXNNYXhBcmVhSW5CeXRlcyl9Z2V0IF9wZGZGdW5jdGlvbkZhY3RvcnkoKXtjb25zdCBlPW5ldyBmLlBERkZ1bmN0aW9uRmFjdG9yeSh7eHJlZjp0aGlzLnhyZWYsaXNFdmFsU3VwcG9ydGVkOnRoaXMub3B0aW9ucy5pc0V2YWxTdXBwb3J0ZWR9KTtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiX3BkZkZ1bmN0aW9uRmFjdG9yeSIsZSl9Y2xvbmUoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDtjb25zdCB0PU9iamVjdC5jcmVhdGUodGhpcyk7cmV0dXJuIHQub3B0aW9ucz1PYmplY3QuYXNzaWduKE9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5vcHRpb25zLGUpLHR9aGFzQmxlbmRNb2RlcyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHMuRGljdCkpcmV0dXJuITE7aWYoZS5vYmpJZCYmdC5oYXMoZS5vYmpJZCkpcmV0dXJuITE7Y29uc3Qgcj1uZXcgcy5SZWZTZXQodCk7ZS5vYmpJZCYmci5wdXQoZS5vYmpJZCk7Y29uc3QgYT1bZV0saT10aGlzLnhyZWY7Zm9yKDthLmxlbmd0aDspe2NvbnN0IGU9YS5zaGlmdCgpLG89ZS5nZXQoIkV4dEdTdGF0ZSIpO2lmKG8gaW5zdGFuY2VvZiBzLkRpY3QpZm9yKGxldCBlIG9mIG8uZ2V0UmF3VmFsdWVzKCkpe2lmKGUgaW5zdGFuY2VvZiBzLlJlZil7aWYoci5oYXMoZSkpY29udGludWU7dHJ5e2U9aS5mZXRjaChlKX1jYXRjaCh0KXtyLnB1dChlKSwoMCxuLmluZm8pKCdoYXNCbGVuZE1vZGVzIC0gaWdub3JpbmcgRXh0R1N0YXRlOiAiJy5jb25jYXQodCwnIi4nKSk7Y29udGludWV9fWlmKCEoZSBpbnN0YW5jZW9mIHMuRGljdCkpY29udGludWU7ZS5vYmpJZCYmci5wdXQoZS5vYmpJZCk7Y29uc3QgYT1lLmdldCgiQk0iKTtpZihhIGluc3RhbmNlb2Ygcy5OYW1lKXtpZigiTm9ybWFsIiE9PWEubmFtZSlyZXR1cm4hMH1lbHNlIGlmKHZvaWQgMCE9PWEmJkFycmF5LmlzQXJyYXkoYSkpZm9yKGNvbnN0IGUgb2YgYSlpZihlIGluc3RhbmNlb2Ygcy5OYW1lJiYiTm9ybWFsIiE9PWUubmFtZSlyZXR1cm4hMH1jb25zdCBjPWUuZ2V0KCJYT2JqZWN0Iik7aWYoYyBpbnN0YW5jZW9mIHMuRGljdClmb3IobGV0IGUgb2YgYy5nZXRSYXdWYWx1ZXMoKSl7aWYoZSBpbnN0YW5jZW9mIHMuUmVmKXtpZihyLmhhcyhlKSljb250aW51ZTt0cnl7ZT1pLmZldGNoKGUpfWNhdGNoKHQpe3IucHV0KGUpLCgwLG4uaW5mbykoJ2hhc0JsZW5kTW9kZXMgLSBpZ25vcmluZyBYT2JqZWN0OiAiJy5jb25jYXQodCwnIi4nKSk7Y29udGludWV9fWlmKCEoZSBpbnN0YW5jZW9mIGIuQmFzZVN0cmVhbSkpY29udGludWU7ZS5kaWN0Lm9iaklkJiZyLnB1dChlLmRpY3Qub2JqSWQpO2NvbnN0IG89ZS5kaWN0LmdldCgiUmVzb3VyY2VzIik7IShvIGluc3RhbmNlb2Ygcy5EaWN0KXx8by5vYmpJZCYmci5oYXMoby5vYmpJZCl8fChhLnB1c2gobyksby5vYmpJZCYmci5wdXQoby5vYmpJZCkpfX1mb3IoY29uc3QgZSBvZiByKXQucHV0KGUpO3JldHVybiExfWFzeW5jIGZldGNoQnVpbHRJbkNNYXAoZSl7Y29uc3QgdD10aGlzLmJ1aWx0SW5DTWFwQ2FjaGUuZ2V0KGUpO2lmKHQpcmV0dXJuIHQ7bGV0IHI7aWYobnVsbCE9PXRoaXMub3B0aW9ucy5jTWFwVXJsKXtjb25zdCB0PSIiLmNvbmNhdCh0aGlzLm9wdGlvbnMuY01hcFVybCkuY29uY2F0KGUsIi5iY21hcCIpLGE9YXdhaXQgZmV0Y2godCk7aWYoIWEub2spdGhyb3cgbmV3IEVycm9yKCdmZXRjaEJ1aWx0SW5DTWFwOiBmYWlsZWQgdG8gZmV0Y2ggZmlsZSAiJy5jb25jYXQodCwnIiB3aXRoICInKS5jb25jYXQoYS5zdGF0dXNUZXh0LCciLicpKTtyPXtjTWFwRGF0YTpuZXcgVWludDhBcnJheShhd2FpdCBhLmFycmF5QnVmZmVyKCkpLGNvbXByZXNzaW9uVHlwZTpuLkNNYXBDb21wcmVzc2lvblR5cGUuQklOQVJZfX1lbHNlIHI9YXdhaXQgdGhpcy5oYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiRmV0Y2hCdWlsdEluQ01hcCIse25hbWU6ZX0pO3JldHVybiByLmNvbXByZXNzaW9uVHlwZSE9PW4uQ01hcENvbXByZXNzaW9uVHlwZS5OT05FJiZ0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUuc2V0KGUscikscn1hc3luYyBmZXRjaFN0YW5kYXJkRm9udERhdGEoZSl7Y29uc3QgdD10aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZS5nZXQoZSk7aWYodClyZXR1cm4gbmV3IG0uU3RyZWFtKHQpO2lmKHRoaXMub3B0aW9ucy51c2VTeXN0ZW1Gb250cyYmIlN5bWJvbCIhPT1lJiYiWmFwZkRpbmdiYXRzIiE9PWUpcmV0dXJuIG51bGw7Y29uc3Qgcj0oMCxsLmdldEZvbnROYW1lVG9GaWxlTWFwKSgpW2VdO2xldCBhO2lmKG51bGwhPT10aGlzLm9wdGlvbnMuc3RhbmRhcmRGb250RGF0YVVybCl7Y29uc3QgZT0iIi5jb25jYXQodGhpcy5vcHRpb25zLnN0YW5kYXJkRm9udERhdGFVcmwpLmNvbmNhdChyKSx0PWF3YWl0IGZldGNoKGUpO3Qub2s/YT1hd2FpdCB0LmFycmF5QnVmZmVyKCk6KDAsbi53YXJuKSgnZmV0Y2hTdGFuZGFyZEZvbnREYXRhOiBmYWlsZWQgdG8gZmV0Y2ggZmlsZSAiJy5jb25jYXQoZSwnIiB3aXRoICInKS5jb25jYXQodC5zdGF0dXNUZXh0LCciLicpKX1lbHNlIHRyeXthPWF3YWl0IHRoaXMuaGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkZldGNoU3RhbmRhcmRGb250RGF0YSIse2ZpbGVuYW1lOnJ9KX1jYXRjaChlKXsoMCxuLndhcm4pKCdmZXRjaFN0YW5kYXJkRm9udERhdGE6IGZhaWxlZCB0byBmZXRjaCBmaWxlICInLmNvbmNhdChyLCciIHdpdGggIicpLmNvbmNhdChlLCciLicpKX1yZXR1cm4gYT8odGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUuc2V0KGUsYSksbmV3IG0uU3RyZWFtKGEpKTpudWxsfWFzeW5jIGJ1aWxkRm9ybVhPYmplY3QoZSx0LHIsYSxpLG8sYyl7Y29uc3QgbD10LmRpY3QsaD1sLmdldEFycmF5KCJNYXRyaXgiKTtsZXQgdSxkLGY9bC5nZXRBcnJheSgiQkJveCIpO2Y9QXJyYXkuaXNBcnJheShmKSYmND09PWYubGVuZ3RoP24uVXRpbC5ub3JtYWxpemVSZWN0KGYpOm51bGwsbC5oYXMoIk9DIikmJih1PWF3YWl0IHRoaXMucGFyc2VNYXJrZWRDb250ZW50UHJvcHMobC5nZXQoIk9DIiksZSkpLHZvaWQgMCE9PXUmJmEuYWRkT3Aobi5PUFMuYmVnaW5NYXJrZWRDb250ZW50UHJvcHMsWyJPQyIsdV0pO2NvbnN0IGc9bC5nZXQoIkdyb3VwIik7aWYoZyl7ZD17bWF0cml4OmgsYmJveDpmLHNtYXNrOnIsaXNvbGF0ZWQ6ITEsa25vY2tvdXQ6ITF9O2NvbnN0IHQ9Zy5nZXQoIlMiKTtsZXQgaT1udWxsO2lmKCgwLHMuaXNOYW1lKSh0LCJUcmFuc3BhcmVuY3kiKSYmKGQuaXNvbGF0ZWQ9Zy5nZXQoIkkiKXx8ITEsZC5rbm9ja291dD1nLmdldCgiSyIpfHwhMSxnLmhhcygiQ1MiKSkpe2NvbnN0IHQ9Zy5nZXRSYXcoIkNTIik7aT13LkNvbG9yU3BhY2UuZ2V0Q2FjaGVkKHQsdGhpcy54cmVmLGMpfHxhd2FpdCB0aGlzLnBhcnNlQ29sb3JTcGFjZSh7Y3M6dCxyZXNvdXJjZXM6ZSxsb2NhbENvbG9yU3BhY2VDYWNoZTpjfSl9bnVsbCE9ciYmci5iYWNrZHJvcCYmKGl8fChpPXcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYiksci5iYWNrZHJvcD1pLmdldFJnYihyLmJhY2tkcm9wLDApKSxhLmFkZE9wKG4uT1BTLmJlZ2luR3JvdXAsW2RdKX1jb25zdCBwPWc/W2gsbnVsbF06W2gsZl07cmV0dXJuIGEuYWRkT3Aobi5PUFMucGFpbnRGb3JtWE9iamVjdEJlZ2luLHApLHRoaXMuZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06dCx0YXNrOmkscmVzb3VyY2VzOmwuZ2V0KCJSZXNvdXJjZXMiKXx8ZSxvcGVyYXRvckxpc3Q6YSxpbml0aWFsU3RhdGU6b30pLnRoZW4oKGZ1bmN0aW9uKCl7YS5hZGRPcChuLk9QUy5wYWludEZvcm1YT2JqZWN0RW5kLFtdKSxnJiZhLmFkZE9wKG4uT1BTLmVuZEdyb3VwLFtkXSksdm9pZCAwIT09dSYmYS5hZGRPcChuLk9QUy5lbmRNYXJrZWRDb250ZW50LFtdKX0pKX1fc2VuZEltZ0RhdGEoZSx0KXtsZXQgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2NvbnN0IG49dD9bdC5iaXRtYXB8fHQuZGF0YS5idWZmZXJdOm51bGw7cmV0dXJuIHRoaXMucGFyc2luZ1R5cGUzRm9udHx8cj90aGlzLmhhbmRsZXIuc2VuZCgiY29tbW9ub2JqIixbZSwiSW1hZ2UiLHRdLG4pOnRoaXMuaGFuZGxlci5zZW5kKCJvYmoiLFtlLHRoaXMucGFnZUluZGV4LCJJbWFnZSIsdF0sbil9YXN5bmMgYnVpbGRQYWludEltYWdlWE9iamVjdChlKXtsZXR7cmVzb3VyY2VzOnQsaW1hZ2U6cixpc0lubGluZTphPSExLG9wZXJhdG9yTGlzdDppLGNhY2hlS2V5OnMsbG9jYWxJbWFnZUNhY2hlOm8sbG9jYWxDb2xvclNwYWNlQ2FjaGU6Y309ZTtjb25zdCBsPXIuZGljdCxoPWwub2JqSWQsdT1sLmdldCgiVyIsIldpZHRoIiksZD1sLmdldCgiSCIsIkhlaWdodCIpO2lmKCF1fHwibnVtYmVyIiE9dHlwZW9mIHV8fCFkfHwibnVtYmVyIiE9dHlwZW9mIGQpcmV0dXJuIHZvaWQoMCxuLndhcm4pKCJJbWFnZSBkaW1lbnNpb25zIGFyZSBtaXNzaW5nLCBvciBub3QgbnVtYmVycy4iKTtjb25zdCBmPXRoaXMub3B0aW9ucy5tYXhJbWFnZVNpemU7aWYoLTEhPT1mJiZ1KmQ+Zil7Y29uc3QgZT0iSW1hZ2UgZXhjZWVkZWQgbWF4aW11bSBhbGxvd2VkIHNpemUgYW5kIHdhcyByZW1vdmVkLiI7aWYodGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycylyZXR1cm4gdm9pZCgwLG4ud2FybikoZSk7dGhyb3cgbmV3IEVycm9yKGUpfWxldCBnLHAsbTtpZihsLmhhcygiT0MiKSYmKGc9YXdhaXQgdGhpcy5wYXJzZU1hcmtlZENvbnRlbnRQcm9wcyhsLmdldCgiT0MiKSx0KSksbC5nZXQoIklNIiwiSW1hZ2VNYXNrIikpe2NvbnN0IGU9bC5nZXQoIkkiLCJJbnRlcnBvbGF0ZSIpLHQ9dSs3Pj4zLGE9ci5nZXRCeXRlcyh0KmQpLGM9bC5nZXRBcnJheSgiRCIsIkRlY29kZSIpO2lmKHRoaXMucGFyc2luZ1R5cGUzRm9udCl7aWYocD1NLlBERkltYWdlLmNyZWF0ZVJhd01hc2soe2ltZ0FycmF5OmEsd2lkdGg6dSxoZWlnaHQ6ZCxpbWFnZUlzRnJvbURlY29kZVN0cmVhbTpyIGluc3RhbmNlb2Ygdi5EZWNvZGVTdHJlYW0saW52ZXJzZURlY29kZToobnVsbD09Yz92b2lkIDA6Y1swXSk+MCxpbnRlcnBvbGF0ZTplfSkscC5jYWNoZWQ9ISFzLG09W3BdLGkuYWRkSW1hZ2VPcHMobi5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0LG0sZykscyl7Y29uc3QgZT17Zm46bi5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0LGFyZ3M6bSxvcHRpb25hbENvbnRlbnQ6Z307by5zZXQocyxoLGUpLGgmJnRoaXMuX3JlZ2lvbmFsSW1hZ2VDYWNoZS5zZXQobnVsbCxoLGUpfXJldHVybn1pZihwPWF3YWl0IE0uUERGSW1hZ2UuY3JlYXRlTWFzayh7aW1nQXJyYXk6YSx3aWR0aDp1LGhlaWdodDpkLGltYWdlSXNGcm9tRGVjb2RlU3RyZWFtOnIgaW5zdGFuY2VvZiB2LkRlY29kZVN0cmVhbSxpbnZlcnNlRGVjb2RlOihudWxsPT1jP3ZvaWQgMDpjWzBdKT4wLGludGVycG9sYXRlOmUsaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ6dGhpcy5vcHRpb25zLmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkfSkscC5pc1NpbmdsZU9wYXF1ZVBpeGVsKXtpZihpLmFkZEltYWdlT3BzKG4uT1BTLnBhaW50U29saWRDb2xvckltYWdlTWFzayxbXSxnKSxzKXtjb25zdCBlPXtmbjpuLk9QUy5wYWludFNvbGlkQ29sb3JJbWFnZU1hc2ssYXJnczpbXSxvcHRpb25hbENvbnRlbnQ6Z307by5zZXQocyxoLGUpLGgmJnRoaXMuX3JlZ2lvbmFsSW1hZ2VDYWNoZS5zZXQobnVsbCxoLGUpfXJldHVybn1jb25zdCBmPSJtYXNrXyIuY29uY2F0KHRoaXMuaWRGYWN0b3J5LmNyZWF0ZU9iaklkKCkpO2lmKGkuYWRkRGVwZW5kZW5jeShmKSx0aGlzLl9zZW5kSW1nRGF0YShmLHApLG09W3tkYXRhOmYsd2lkdGg6cC53aWR0aCxoZWlnaHQ6cC5oZWlnaHQsaW50ZXJwb2xhdGU6cC5pbnRlcnBvbGF0ZSxjb3VudDoxfV0saS5hZGRJbWFnZU9wcyhuLk9QUy5wYWludEltYWdlTWFza1hPYmplY3QsbSxnKSxzKXtjb25zdCBlPXtmbjpuLk9QUy5wYWludEltYWdlTWFza1hPYmplY3QsYXJnczptLG9wdGlvbmFsQ29udGVudDpnfTtvLnNldChzLGgsZSksaCYmdGhpcy5fcmVnaW9uYWxJbWFnZUNhY2hlLnNldChudWxsLGgsZSl9cmV0dXJufWlmKGEmJiFsLmhhcygiU01hc2siKSYmIWwuaGFzKCJNYXNrIikmJnUrZDwyMDApe2NvbnN0IGU9bmV3IE0uUERGSW1hZ2Uoe3hyZWY6dGhpcy54cmVmLHJlczp0LGltYWdlOnIsaXNJbmxpbmU6YSxwZGZGdW5jdGlvbkZhY3Rvcnk6dGhpcy5fcGRmRnVuY3Rpb25GYWN0b3J5LGxvY2FsQ29sb3JTcGFjZUNhY2hlOmN9KTtyZXR1cm4gcD1hd2FpdCBlLmNyZWF0ZUltYWdlRGF0YSghMCwhMSksaS5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZD10aGlzLm9wdGlvbnMuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQsdm9pZCBpLmFkZEltYWdlT3BzKG4uT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0LFtwXSxnKX1sZXQgYj0iaW1nXyIuY29uY2F0KHRoaXMuaWRGYWN0b3J5LmNyZWF0ZU9iaklkKCkpLHk9ITE7aWYodGhpcy5wYXJzaW5nVHlwZTNGb250P2I9IiIuY29uY2F0KHRoaXMuaWRGYWN0b3J5LmdldERvY0lkKCksIl90eXBlM18iKS5jb25jYXQoYik6aCYmKHk9dGhpcy5nbG9iYWxJbWFnZUNhY2hlLnNob3VsZENhY2hlKGgsdGhpcy5wYWdlSW5kZXgpLHkmJihiPSIiLmNvbmNhdCh0aGlzLmlkRmFjdG9yeS5nZXREb2NJZCgpLCJfIikuY29uY2F0KGIpKSksaS5hZGREZXBlbmRlbmN5KGIpLG09W2IsdSxkXSxNLlBERkltYWdlLmJ1aWxkSW1hZ2Uoe3hyZWY6dGhpcy54cmVmLHJlczp0LGltYWdlOnIsaXNJbmxpbmU6YSxwZGZGdW5jdGlvbkZhY3Rvcnk6dGhpcy5fcGRmRnVuY3Rpb25GYWN0b3J5LGxvY2FsQ29sb3JTcGFjZUNhY2hlOmN9KS50aGVuKChhc3luYyBlPT57aWYocD1hd2FpdCBlLmNyZWF0ZUltYWdlRGF0YSghMSx0aGlzLm9wdGlvbnMuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQpLHMmJmgmJnkpe2NvbnN0IGU9cC5iaXRtYXA/cC53aWR0aCpwLmhlaWdodCo0OnAuZGF0YS5sZW5ndGg7dGhpcy5nbG9iYWxJbWFnZUNhY2hlLmFkZEJ5dGVTaXplKGgsZSl9cmV0dXJuIHRoaXMuX3NlbmRJbWdEYXRhKGIscCx5KX0pKS5jYXRjaCgoZT0+KCgwLG4ud2FybikoJ1VuYWJsZSB0byBkZWNvZGUgaW1hZ2UgIicuY29uY2F0KGIsJyI6ICInKS5jb25jYXQoZSwnIi4nKSksdGhpcy5fc2VuZEltZ0RhdGEoYixudWxsLHkpKSkpLGkuYWRkSW1hZ2VPcHMobi5PUFMucGFpbnRJbWFnZVhPYmplY3QsbSxnKSxzKXtjb25zdCBlPXtmbjpuLk9QUy5wYWludEltYWdlWE9iamVjdCxhcmdzOm0sb3B0aW9uYWxDb250ZW50Omd9O28uc2V0KHMsaCxlKSxoJiYodGhpcy5fcmVnaW9uYWxJbWFnZUNhY2hlLnNldChudWxsLGgsZSkseSYmKCgwLG4uYXNzZXJ0KSghYSwiQ2Fubm90IGNhY2hlIGFuIGlubGluZSBpbWFnZSBnbG9iYWxseS4iKSx0aGlzLmdsb2JhbEltYWdlQ2FjaGUuc2V0RGF0YShoLHtvYmpJZDpiLGZuOm4uT1BTLnBhaW50SW1hZ2VYT2JqZWN0LGFyZ3M6bSxvcHRpb25hbENvbnRlbnQ6ZyxieXRlU2l6ZTowfSkpKX19aGFuZGxlU01hc2soZSx0LHIsbixhLGkpe2NvbnN0IHM9ZS5nZXQoIkciKSxvPXtzdWJ0eXBlOmUuZ2V0KCJTIikubmFtZSxiYWNrZHJvcDplLmdldCgiQkMiKX0sYz1lLmdldCgiVFIiKTtpZigoMCxmLmlzUERGRnVuY3Rpb24pKGMpKXtjb25zdCBlPXRoaXMuX3BkZkZ1bmN0aW9uRmFjdG9yeS5jcmVhdGUoYyksdD1uZXcgVWludDhBcnJheSgyNTYpLHI9bmV3IEZsb2F0MzJBcnJheSgxKTtmb3IobGV0IG49MDtuPDI1NjtuKyspclswXT1uLzI1NSxlKHIsMCxyLDApLHRbbl09MjU1KnJbMF18MDtvLnRyYW5zZmVyTWFwPXR9cmV0dXJuIHRoaXMuYnVpbGRGb3JtWE9iamVjdCh0LHMsbyxyLG4sYS5zdGF0ZS5jbG9uZSgpLGkpfWhhbmRsZVRyYW5zZmVyRnVuY3Rpb24oZSl7bGV0IHQ7aWYoQXJyYXkuaXNBcnJheShlKSl0PWU7ZWxzZXtpZighKDAsZi5pc1BERkZ1bmN0aW9uKShlKSlyZXR1cm4gbnVsbDt0PVtlXX1jb25zdCByPVtdO2xldCBuPTAsYT0wO2Zvcihjb25zdCBlIG9mIHQpe2NvbnN0IHQ9dGhpcy54cmVmLmZldGNoSWZSZWYoZSk7aWYobisrLCgwLHMuaXNOYW1lKSh0LCJJZGVudGl0eSIpKXtyLnB1c2gobnVsbCk7Y29udGludWV9aWYoISgwLGYuaXNQREZGdW5jdGlvbikodCkpcmV0dXJuIG51bGw7Y29uc3QgaT10aGlzLl9wZGZGdW5jdGlvbkZhY3RvcnkuY3JlYXRlKHQpLG89bmV3IFVpbnQ4QXJyYXkoMjU2KSxjPW5ldyBGbG9hdDMyQXJyYXkoMSk7Zm9yKGxldCBlPTA7ZTwyNTY7ZSsrKWNbMF09ZS8yNTUsaShjLDAsYywwKSxvW2VdPTI1NSpjWzBdfDA7ci5wdXNoKG8pLGErK31yZXR1cm4gMSE9PW4mJjQhPT1ufHwwPT09YT9udWxsOnJ9aGFuZGxlVGlsaW5nVHlwZShlLHQscixhLGksbyxjLGwpe2NvbnN0IHU9bmV3IFQuT3BlcmF0b3JMaXN0LGQ9cy5EaWN0Lm1lcmdlKHt4cmVmOnRoaXMueHJlZixkaWN0QXJyYXk6W2kuZ2V0KCJSZXNvdXJjZXMiKSxyXX0pO3JldHVybiB0aGlzLmdldE9wZXJhdG9yTGlzdCh7c3RyZWFtOmEsdGFzazpjLHJlc291cmNlczpkLG9wZXJhdG9yTGlzdDp1fSkudGhlbigoZnVuY3Rpb24oKXtjb25zdCByPXUuZ2V0SVIoKSxuPSgwLGguZ2V0VGlsaW5nUGF0dGVybklSKShyLGksdCk7by5hZGREZXBlbmRlbmNpZXModS5kZXBlbmRlbmNpZXMpLG8uYWRkT3AoZSxuKSxpLm9iaklkJiZsLnNldChudWxsLGkub2JqSWQse29wZXJhdG9yTGlzdElSOnIsZGljdDppfSl9KSkuY2F0Y2goKGU9PntpZighKGUgaW5zdGFuY2VvZiBuLkFib3J0RXhjZXB0aW9uKSl7aWYoIXRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgZTsoMCxuLndhcm4pKCdoYW5kbGVUaWxpbmdUeXBlIC0gaWdub3JpbmcgcGF0dGVybjogIicuY29uY2F0KGUsJyIuJykpfX0pKX1oYW5kbGVTZXRGb250KGUsdCxyLG4sYSxpKXtsZXQgYz1hcmd1bWVudHMubGVuZ3RoPjYmJnZvaWQgMCE9PWFyZ3VtZW50c1s2XT9hcmd1bWVudHNbNl06bnVsbCxsPWFyZ3VtZW50cy5sZW5ndGg+NyYmdm9pZCAwIT09YXJndW1lbnRzWzddP2FyZ3VtZW50c1s3XTpudWxsO2NvbnN0IGg9KG51bGw9PXQ/dm9pZCAwOnRbMF0paW5zdGFuY2VvZiBzLk5hbWU/dFswXS5uYW1lOm51bGw7cmV0dXJuIHRoaXMubG9hZEZvbnQoaCxyLGUsYyxsKS50aGVuKCh0PT50LmZvbnQuaXNUeXBlM0ZvbnQ/dC5sb2FkVHlwZTNEYXRhKHRoaXMsZSxhKS50aGVuKChmdW5jdGlvbigpe3JldHVybiBuLmFkZERlcGVuZGVuY2llcyh0LnR5cGUzRGVwZW5kZW5jaWVzKSx0fSkpLmNhdGNoKChlPT5uZXcgTCh7bG9hZGVkTmFtZToiZ19mb250X2Vycm9yIixmb250Om5ldyBvLkVycm9yRm9udCgiVHlwZTMgZm9udCBsb2FkIGVycm9yOiAiLmNvbmNhdChlKSksZGljdDp0LmZvbnQsZXZhbHVhdG9yT3B0aW9uczp0aGlzLm9wdGlvbnN9KSkpOnQpKS50aGVuKChlPT4oaS5mb250PWUuZm9udCxlLnNlbmQodGhpcy5oYW5kbGVyKSxlLmxvYWRlZE5hbWUpKSl9aGFuZGxlVGV4dChlLHQpe2NvbnN0IHI9dC5mb250LGE9ci5jaGFyc1RvR2x5cGhzKGUpO3JldHVybiByLmRhdGEmJih0LnRleHRSZW5kZXJpbmdNb2RlJm4uVGV4dFJlbmRlcmluZ01vZGUuQUREX1RPX1BBVEhfRkxBR3x8IlBhdHRlcm4iPT09dC5maWxsQ29sb3JTcGFjZS5uYW1lfHxyLmRpc2FibGVGb250RmFjZXx8dGhpcy5vcHRpb25zLmRpc2FibGVGb250RmFjZSkmJkIuYnVpbGRGb250UGF0aHMocixhLHRoaXMuaGFuZGxlcix0aGlzLm9wdGlvbnMpLGF9ZW5zdXJlU3RhdGVGb250KGUpe2lmKGUuZm9udClyZXR1cm47Y29uc3QgdD1uZXcgbi5Gb3JtYXRFcnJvcigiTWlzc2luZyBzZXRGb250IChUZikgb3BlcmF0b3IgYmVmb3JlIHRleHQgcmVuZGVyaW5nIG9wZXJhdG9yLiIpO2lmKCF0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKXRocm93IHQ7KDAsbi53YXJuKSgnZW5zdXJlU3RhdGVGb250OiAiJy5jb25jYXQodCwnIi4nKSl9YXN5bmMgc2V0R1N0YXRlKGUpe2xldHtyZXNvdXJjZXM6dCxnU3RhdGU6cixvcGVyYXRvckxpc3Q6YSxjYWNoZUtleTppLHRhc2s6byxzdGF0ZU1hbmFnZXI6Yyxsb2NhbEdTdGF0ZUNhY2hlOmwsbG9jYWxDb2xvclNwYWNlQ2FjaGU6aH09ZTtjb25zdCB1PXIub2JqSWQ7bGV0IGQ9ITA7Y29uc3QgZj1bXTtsZXQgZz1Qcm9taXNlLnJlc29sdmUoKTtmb3IoY29uc3QgZSBvZiByLmdldEtleXMoKSl7Y29uc3QgaT1yLmdldChlKTtzd2l0Y2goZSl7Y2FzZSJUeXBlIjpicmVhaztjYXNlIkxXIjpjYXNlIkxDIjpjYXNlIkxKIjpjYXNlIk1MIjpjYXNlIkQiOmNhc2UiUkkiOmNhc2UiRkwiOmNhc2UiQ0EiOmNhc2UiY2EiOmYucHVzaChbZSxpXSk7YnJlYWs7Y2FzZSJGb250IjpkPSExLGc9Zy50aGVuKCgoKT0+dGhpcy5oYW5kbGVTZXRGb250KHQsbnVsbCxpWzBdLGEsbyxjLnN0YXRlKS50aGVuKChmdW5jdGlvbih0KXthLmFkZERlcGVuZGVuY3kodCksZi5wdXNoKFtlLFt0LGlbMV1dXSl9KSkpKTticmVhaztjYXNlIkJNIjpmLnB1c2goW2UsUihpKV0pO2JyZWFrO2Nhc2UiU01hc2siOmlmKCgwLHMuaXNOYW1lKShpLCJOb25lIikpe2YucHVzaChbZSwhMV0pO2JyZWFrfWkgaW5zdGFuY2VvZiBzLkRpY3Q/KGQ9ITEsZz1nLnRoZW4oKCgpPT50aGlzLmhhbmRsZVNNYXNrKGksdCxhLG8sYyxoKSkpLGYucHVzaChbZSwhMF0pKTooMCxuLndhcm4pKCJVbnN1cHBvcnRlZCBTTWFzayB0eXBlIik7YnJlYWs7Y2FzZSJUUiI6Y29uc3Qgcj10aGlzLmhhbmRsZVRyYW5zZmVyRnVuY3Rpb24oaSk7Zi5wdXNoKFtlLHJdKTticmVhaztjYXNlIk9QIjpjYXNlIm9wIjpjYXNlIk9QTSI6Y2FzZSJCRyI6Y2FzZSJCRzIiOmNhc2UiVUNSIjpjYXNlIlVDUjIiOmNhc2UiVFIyIjpjYXNlIkhUIjpjYXNlIlNNIjpjYXNlIlNBIjpjYXNlIkFJUyI6Y2FzZSJUSyI6KDAsbi5pbmZvKSgiZ3JhcGhpYyBzdGF0ZSBvcGVyYXRvciAiK2UpO2JyZWFrO2RlZmF1bHQ6KDAsbi5pbmZvKSgiVW5rbm93biBncmFwaGljIHN0YXRlIG9wZXJhdG9yICIrZSl9fXJldHVybiBnLnRoZW4oKGZ1bmN0aW9uKCl7Zi5sZW5ndGg+MCYmYS5hZGRPcChuLk9QUy5zZXRHU3RhdGUsW2ZdKSxkJiZsLnNldChpLHUsZil9KSl9bG9hZEZvbnQoZSx0LHIpe3ZhciBhO2xldCBpPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTpudWxsLGM9YXJndW1lbnRzLmxlbmd0aD40JiZ2b2lkIDAhPT1hcmd1bWVudHNbNF0/YXJndW1lbnRzWzRdOm51bGw7Y29uc3QgbD1hc3luYygpPT5uZXcgTCh7bG9hZGVkTmFtZToiZ19mb250X2Vycm9yIixmb250Om5ldyBvLkVycm9yRm9udCgnRm9udCAiJy5jb25jYXQoZSwnIiBpcyBub3QgYXZhaWxhYmxlLicpKSxkaWN0OnQsZXZhbHVhdG9yT3B0aW9uczp0aGlzLm9wdGlvbnN9KTtsZXQgaDtpZih0KXQgaW5zdGFuY2VvZiBzLlJlZiYmKGg9dCk7ZWxzZXtjb25zdCB0PXIuZ2V0KCJGb250Iik7dCYmKGg9dC5nZXRSYXcoZSkpfWlmKGgpe2lmKHRoaXMucGFyc2luZ1R5cGUzRm9udCYmdGhpcy50eXBlM0ZvbnRSZWZzLmhhcyhoKSlyZXR1cm4gbCgpO2lmKHRoaXMuZm9udENhY2hlLmhhcyhoKSlyZXR1cm4gdGhpcy5mb250Q2FjaGUuZ2V0KGgpO3Q9dGhpcy54cmVmLmZldGNoSWZSZWYoaCl9aWYoISh0IGluc3RhbmNlb2Ygcy5EaWN0KSl7aWYoIXRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMmJiF0aGlzLnBhcnNpbmdUeXBlM0ZvbnQpcmV0dXJuKDAsbi53YXJuKSgnRm9udCAiJy5jb25jYXQoZSwnIiBpcyBub3QgYXZhaWxhYmxlLicpKSxsKCk7KDAsbi53YXJuKSgnRm9udCAiJy5jb25jYXQoZSwnIiBpcyBub3QgYXZhaWxhYmxlIC0tIGF0dGVtcHRpbmcgdG8gZmFsbGJhY2sgdG8gYSBkZWZhdWx0IGZvbnQuJykpLHQ9aXx8Qi5mYWxsYmFja0ZvbnREaWN0fWlmKHQuY2FjaGVLZXkmJnRoaXMuZm9udENhY2hlLmhhcyh0LmNhY2hlS2V5KSlyZXR1cm4gdGhpcy5mb250Q2FjaGUuZ2V0KHQuY2FjaGVLZXkpO2NvbnN0IHU9bmV3IG4uUHJvbWlzZUNhcGFiaWxpdHk7bGV0IGQ7dHJ5e2Q9dGhpcy5wcmVFdmFsdWF0ZUZvbnQodCksZC5jc3NGb250SW5mbz1jfWNhdGNoKGUpe3JldHVybigwLG4ud2FybikoJ2xvYWRGb250IC0gcHJlRXZhbHVhdGVGb250IGZhaWxlZDogIicuY29uY2F0KGUsJyIuJykpLGwoKX1jb25zdHtkZXNjcmlwdG9yOmYsaGFzaDpnfT1kLHA9aCBpbnN0YW5jZW9mIHMuUmVmO2xldCBtO2lmKGcmJmYgaW5zdGFuY2VvZiBzLkRpY3Qpe2NvbnN0IGU9Zi5mb250QWxpYXNlc3x8KGYuZm9udEFsaWFzZXM9T2JqZWN0LmNyZWF0ZShudWxsKSk7aWYoZVtnXSl7Y29uc3QgdD1lW2ddLmFsaWFzUmVmO2lmKHAmJnQmJnRoaXMuZm9udENhY2hlLmhhcyh0KSlyZXR1cm4gdGhpcy5mb250Q2FjaGUucHV0QWxpYXMoaCx0KSx0aGlzLmZvbnRDYWNoZS5nZXQoaCl9ZWxzZSBlW2ddPXtmb250SUQ6dGhpcy5pZEZhY3RvcnkuY3JlYXRlRm9udElkKCl9O3AmJihlW2ddLmFsaWFzUmVmPWgpLG09ZVtnXS5mb250SUR9ZWxzZSBtPXRoaXMuaWRGYWN0b3J5LmNyZWF0ZUZvbnRJZCgpO3JldHVybigwLG4uYXNzZXJ0KShudWxsPT09KGE9bSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuc3RhcnRzV2l0aCgiZiIpLCdUaGUgImZvbnRJRCIgbXVzdCBiZSAoY29ycmVjdGx5KSBkZWZpbmVkLicpLHA/dGhpcy5mb250Q2FjaGUucHV0KGgsdS5wcm9taXNlKToodC5jYWNoZUtleT0iY2FjaGVLZXlfIi5jb25jYXQobSksdGhpcy5mb250Q2FjaGUucHV0KHQuY2FjaGVLZXksdS5wcm9taXNlKSksdC5sb2FkZWROYW1lPSIiLmNvbmNhdCh0aGlzLmlkRmFjdG9yeS5nZXREb2NJZCgpLCJfIikuY29uY2F0KG0pLHRoaXMudHJhbnNsYXRlRm9udChkKS50aGVuKChlPT57dS5yZXNvbHZlKG5ldyBMKHtsb2FkZWROYW1lOnQubG9hZGVkTmFtZSxmb250OmUsZGljdDp0LGV2YWx1YXRvck9wdGlvbnM6dGhpcy5vcHRpb25zfSkpfSkpLmNhdGNoKChlPT57KDAsbi53YXJuKSgnbG9hZEZvbnQgLSB0cmFuc2xhdGVGb250IGZhaWxlZDogIicuY29uY2F0KGUsJyIuJykpLHUucmVzb2x2ZShuZXcgTCh7bG9hZGVkTmFtZTp0LmxvYWRlZE5hbWUsZm9udDpuZXcgby5FcnJvckZvbnQoZSBpbnN0YW5jZW9mIEVycm9yP2UubWVzc2FnZTplKSxkaWN0OnQsZXZhbHVhdG9yT3B0aW9uczp0aGlzLm9wdGlvbnN9KSl9KSksdS5wcm9taXNlfWJ1aWxkUGF0aChlLHQscil7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTtjb25zdCBpPWUubGVuZ3RoLTE7aWYocnx8KHI9W10pLGk8MHx8ZS5mbkFycmF5W2ldIT09bi5PUFMuY29uc3RydWN0UGF0aCl7bGV0IGk7c3dpdGNoKGEmJigoMCxuLndhcm4pKCdFbmNvdW50ZXJlZCBwYXRoIG9wZXJhdG9yICInLmNvbmNhdCh0LCciIGluc2lkZSBvZiBhIHRleHQgb2JqZWN0LicpKSxlLmFkZE9wKG4uT1BTLnNhdmUsbnVsbCkpLHQpe2Nhc2Ugbi5PUFMucmVjdGFuZ2xlOmNvbnN0IGU9clswXStyWzJdLHQ9clsxXStyWzNdO2k9W01hdGgubWluKHJbMF0sZSksTWF0aC5tYXgoclswXSxlKSxNYXRoLm1pbihyWzFdLHQpLE1hdGgubWF4KHJbMV0sdCldO2JyZWFrO2Nhc2Ugbi5PUFMubW92ZVRvOmNhc2Ugbi5PUFMubGluZVRvOmk9W3JbMF0sclswXSxyWzFdLHJbMV1dO2JyZWFrO2RlZmF1bHQ6aT1bMS8wLC0xLzAsMS8wLC0xLzBdfWUuYWRkT3Aobi5PUFMuY29uc3RydWN0UGF0aCxbW3RdLHIsaV0pLGEmJmUuYWRkT3Aobi5PUFMucmVzdG9yZSxudWxsKX1lbHNle2NvbnN0IGE9ZS5hcmdzQXJyYXlbaV07YVswXS5wdXNoKHQpLGFbMV0ucHVzaCguLi5yKTtjb25zdCBzPWFbMl07c3dpdGNoKHQpe2Nhc2Ugbi5PUFMucmVjdGFuZ2xlOmNvbnN0IGU9clswXStyWzJdLHQ9clsxXStyWzNdO3NbMF09TWF0aC5taW4oc1swXSxyWzBdLGUpLHNbMV09TWF0aC5tYXgoc1sxXSxyWzBdLGUpLHNbMl09TWF0aC5taW4oc1syXSxyWzFdLHQpLHNbM109TWF0aC5tYXgoc1szXSxyWzFdLHQpO2JyZWFrO2Nhc2Ugbi5PUFMubW92ZVRvOmNhc2Ugbi5PUFMubGluZVRvOnNbMF09TWF0aC5taW4oc1swXSxyWzBdKSxzWzFdPU1hdGgubWF4KHNbMV0sclswXSksc1syXT1NYXRoLm1pbihzWzJdLHJbMV0pLHNbM109TWF0aC5tYXgoc1szXSxyWzFdKX19fXBhcnNlQ29sb3JTcGFjZShlKXtsZXR7Y3M6dCxyZXNvdXJjZXM6cixsb2NhbENvbG9yU3BhY2VDYWNoZTphfT1lO3JldHVybiB3LkNvbG9yU3BhY2UucGFyc2VBc3luYyh7Y3M6dCx4cmVmOnRoaXMueHJlZixyZXNvdXJjZXM6cixwZGZGdW5jdGlvbkZhY3Rvcnk6dGhpcy5fcGRmRnVuY3Rpb25GYWN0b3J5LGxvY2FsQ29sb3JTcGFjZUNhY2hlOmF9KS5jYXRjaCgoZT0+e2lmKGUgaW5zdGFuY2VvZiBuLkFib3J0RXhjZXB0aW9uKXJldHVybiBudWxsO2lmKHRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMpcmV0dXJuKDAsbi53YXJuKSgncGFyc2VDb2xvclNwYWNlIC0gaWdub3JpbmcgQ29sb3JTcGFjZTogIicuY29uY2F0KGUsJyIuJykpLG51bGw7dGhyb3cgZX0pKX1wYXJzZVNoYWRpbmcoZSl7bGV0e3NoYWRpbmc6dCxyZXNvdXJjZXM6cixsb2NhbENvbG9yU3BhY2VDYWNoZTpuLGxvY2FsU2hhZGluZ1BhdHRlcm5DYWNoZTphfT1lLGk9YS5nZXQodCk7aWYoIWkpe2NvbnN0IGU9aC5QYXR0ZXJuLnBhcnNlU2hhZGluZyh0LHRoaXMueHJlZixyLHRoaXMuX3BkZkZ1bmN0aW9uRmFjdG9yeSxuKS5nZXRJUigpO2k9InBhdHRlcm5fIi5jb25jYXQodGhpcy5pZEZhY3RvcnkuY3JlYXRlT2JqSWQoKSksdGhpcy5wYXJzaW5nVHlwZTNGb250JiYoaT0iIi5jb25jYXQodGhpcy5pZEZhY3RvcnkuZ2V0RG9jSWQoKSwiX3R5cGUzXyIpLmNvbmNhdChpKSksYS5zZXQodCxpKSx0aGlzLnBhcnNpbmdUeXBlM0ZvbnQ/dGhpcy5oYW5kbGVyLnNlbmQoImNvbW1vbm9iaiIsW2ksIlBhdHRlcm4iLGVdKTp0aGlzLmhhbmRsZXIuc2VuZCgib2JqIixbaSx0aGlzLnBhZ2VJbmRleCwiUGF0dGVybiIsZV0pfXJldHVybiBpfWhhbmRsZUNvbG9yTihlLHQscixhLGksbyxjLGwsdSxkKXtjb25zdCBmPXIucG9wKCk7aWYoZiBpbnN0YW5jZW9mIHMuTmFtZSl7Y29uc3QgZz1pLmdldFJhdyhmLm5hbWUpLHA9ZyBpbnN0YW5jZW9mIHMuUmVmJiZ1LmdldEJ5UmVmKGcpO2lmKHApdHJ5e2NvbnN0IG49YS5iYXNlP2EuYmFzZS5nZXRSZ2IociwwKTpudWxsLGk9KDAsaC5nZXRUaWxpbmdQYXR0ZXJuSVIpKHAub3BlcmF0b3JMaXN0SVIscC5kaWN0LG4pO3JldHVybiB2b2lkIGUuYWRkT3AodCxpKX1jYXRjaChlKXt9Y29uc3QgbT10aGlzLnhyZWYuZmV0Y2hJZlJlZihnKTtpZihtKXtjb25zdCBpPW0gaW5zdGFuY2VvZiBiLkJhc2VTdHJlYW0/bS5kaWN0Om0scz1pLmdldCgiUGF0dGVyblR5cGUiKTtpZigxPT09cyl7Y29uc3Qgbj1hLmJhc2U/YS5iYXNlLmdldFJnYihyLDApOm51bGw7cmV0dXJuIHRoaXMuaGFuZGxlVGlsaW5nVHlwZSh0LG4sbyxtLGksZSxjLHUpfWlmKDI9PT1zKXtjb25zdCByPWkuZ2V0KCJTaGFkaW5nIiksbj1pLmdldEFycmF5KCJNYXRyaXgiKSxhPXRoaXMucGFyc2VTaGFkaW5nKHtzaGFkaW5nOnIscmVzb3VyY2VzOm8sbG9jYWxDb2xvclNwYWNlQ2FjaGU6bCxsb2NhbFNoYWRpbmdQYXR0ZXJuQ2FjaGU6ZH0pO3JldHVybiB2b2lkIGUuYWRkT3AodCxbIlNoYWRpbmciLGEsbl0pfXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbmtub3duIFBhdHRlcm5UeXBlOiAiLmNvbmNhdChzKSl9fXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbmtub3duIFBhdHRlcm5OYW1lOiAiLmNvbmNhdChmKSl9X3BhcnNlVmlzaWJpbGl0eUV4cHJlc3Npb24oZSx0LHIpe2lmKCsrdD4xMClyZXR1cm4gdm9pZCgwLG4ud2FybikoIlZpc2liaWxpdHkgZXhwcmVzc2lvbiBpcyB0b28gZGVlcGx5IG5lc3RlZCIpO2NvbnN0IGE9ZS5sZW5ndGgsaT10aGlzLnhyZWYuZmV0Y2hJZlJlZihlWzBdKTtpZighKGE8MikmJmkgaW5zdGFuY2VvZiBzLk5hbWUpe3N3aXRjaChpLm5hbWUpe2Nhc2UiQW5kIjpjYXNlIk9yIjpjYXNlIk5vdCI6ci5wdXNoKGkubmFtZSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gdm9pZCgwLG4ud2FybikoIkludmFsaWQgb3BlcmF0b3IgIi5jb25jYXQoaS5uYW1lLCIgaW4gdmlzaWJpbGl0eSBleHByZXNzaW9uIikpfWZvcihsZXQgbj0xO248YTtuKyspe2NvbnN0IGE9ZVtuXSxpPXRoaXMueHJlZi5mZXRjaElmUmVmKGEpO2lmKEFycmF5LmlzQXJyYXkoaSkpe2NvbnN0IGU9W107ci5wdXNoKGUpLHRoaXMuX3BhcnNlVmlzaWJpbGl0eUV4cHJlc3Npb24oaSx0LGUpfWVsc2UgYSBpbnN0YW5jZW9mIHMuUmVmJiZyLnB1c2goYS50b1N0cmluZygpKX19ZWxzZSgwLG4ud2FybikoIkludmFsaWQgdmlzaWJpbGl0eSBleHByZXNzaW9uIil9YXN5bmMgcGFyc2VNYXJrZWRDb250ZW50UHJvcHMoZSx0KXtsZXQgcjtpZihlIGluc3RhbmNlb2Ygcy5OYW1lKXI9dC5nZXQoIlByb3BlcnRpZXMiKS5nZXQoZS5uYW1lKTtlbHNle2lmKCEoZSBpbnN0YW5jZW9mIHMuRGljdCkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIk9wdGlvbmFsIGNvbnRlbnQgcHJvcGVydGllcyBtYWxmb3JtZWQuIik7cj1lfWNvbnN0IGE9ci5nZXQoIlR5cGUiKS5uYW1lO2lmKCJPQ0ciPT09YSlyZXR1cm57dHlwZTphLGlkOnIub2JqSWR9O2lmKCJPQ01EIj09PWEpe2NvbnN0IGU9ci5nZXQoIlZFIik7aWYoQXJyYXkuaXNBcnJheShlKSl7Y29uc3QgdD1bXTtpZih0aGlzLl9wYXJzZVZpc2liaWxpdHlFeHByZXNzaW9uKGUsMCx0KSx0Lmxlbmd0aD4wKXJldHVybnt0eXBlOiJPQ01EIixleHByZXNzaW9uOnR9fWNvbnN0IHQ9ci5nZXQoIk9DR3MiKTtpZihBcnJheS5pc0FycmF5KHQpfHx0IGluc3RhbmNlb2Ygcy5EaWN0KXtjb25zdCBlPVtdO2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKGNvbnN0IHIgb2YgdCllLnB1c2goci50b1N0cmluZygpKTtlbHNlIGUucHVzaCh0Lm9iaklkKTtyZXR1cm57dHlwZTphLGlkczplLHBvbGljeTpyLmdldCgiUCIpaW5zdGFuY2VvZiBzLk5hbWU/ci5nZXQoIlAiKS5uYW1lOm51bGwsZXhwcmVzc2lvbjpudWxsfX1pZih0IGluc3RhbmNlb2Ygcy5SZWYpcmV0dXJue3R5cGU6YSxpZDp0LnRvU3RyaW5nKCl9fXJldHVybiBudWxsfWdldE9wZXJhdG9yTGlzdChlKXtsZXR7c3RyZWFtOnQsdGFzazpyLHJlc291cmNlczphLG9wZXJhdG9yTGlzdDppLGluaXRpYWxTdGF0ZTpvPW51bGwsZmFsbGJhY2tGb250RGljdDpjPW51bGx9PWU7aWYoYXx8KGE9cy5EaWN0LmVtcHR5KSxvfHwobz1uZXcgVSksIWkpdGhyb3cgbmV3IEVycm9yKCdnZXRPcGVyYXRvckxpc3Q6IG1pc3NpbmcgIm9wZXJhdG9yTGlzdCIgcGFyYW1ldGVyJyk7Y29uc3QgbD10aGlzLGg9dGhpcy54cmVmO2xldCB1PSExO2NvbnN0IGQ9bmV3IHAuTG9jYWxJbWFnZUNhY2hlLGY9bmV3IHAuTG9jYWxDb2xvclNwYWNlQ2FjaGUsZz1uZXcgcC5Mb2NhbEdTdGF0ZUNhY2hlLG09bmV3IHAuTG9jYWxUaWxpbmdQYXR0ZXJuQ2FjaGUseT1uZXcgTWFwLHY9YS5nZXQoIlhPYmplY3QiKXx8cy5EaWN0LmVtcHR5LHg9YS5nZXQoIlBhdHRlcm4iKXx8cy5EaWN0LmVtcHR5LFM9bmV3IF8obyksQT1uZXcgJCh0LGgsUyksaz1uZXcgRDtmdW5jdGlvbiBDKGUpe2ZvcihsZXQgZT0wLHQ9QS5zYXZlZFN0YXRlc0RlcHRoO2U8dDtlKyspaS5hZGRPcChuLk9QUy5yZXN0b3JlLFtdKX1yZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uIGUodCxvKXtjb25zdCBwPWZ1bmN0aW9uKHIpe1Byb21pc2UuYWxsKFtyLGkucmVhZHldKS50aGVuKChmdW5jdGlvbigpe3RyeXtlKHQsbyl9Y2F0Y2goZSl7byhlKX19KSxvKX07ci5lbnN1cmVOb3RUZXJtaW5hdGVkKCksay5yZXNldCgpO2NvbnN0IE89e307bGV0IEYsSSxULE0sRSxSO2Zvcig7IShGPWsuY2hlY2soKSkmJihPLmFyZ3M9bnVsbCxBLnJlYWQoTykpOyl7bGV0IGU9Ty5hcmdzLHQ9Ty5mbjtzd2l0Y2goMHx0KXtjYXNlIG4uT1BTLnBhaW50WE9iamVjdDppZihSPWVbMF1pbnN0YW5jZW9mIHMuTmFtZSxFPWVbMF0ubmFtZSxSKXtjb25zdCB0PWQuZ2V0QnlOYW1lKEUpO2lmKHQpe2kuYWRkSW1hZ2VPcHModC5mbix0LmFyZ3MsdC5vcHRpb25hbENvbnRlbnQpLE4odCksZT1udWxsO2NvbnRpbnVlfX1yZXR1cm4gdm9pZCBwKG5ldyBQcm9taXNlKChmdW5jdGlvbihlLHQpe2lmKCFSKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJYT2JqZWN0IG11c3QgYmUgcmVmZXJyZWQgdG8gYnkgbmFtZS4iKTtsZXQgbz12LmdldFJhdyhFKTtpZihvIGluc3RhbmNlb2Ygcy5SZWYpe2NvbnN0IHQ9ZC5nZXRCeVJlZihvKXx8bC5fcmVnaW9uYWxJbWFnZUNhY2hlLmdldEJ5UmVmKG8pO2lmKHQpcmV0dXJuIGkuYWRkSW1hZ2VPcHModC5mbix0LmFyZ3MsdC5vcHRpb25hbENvbnRlbnQpLE4odCksdm9pZCBlKCk7Y29uc3Qgcj1sLmdsb2JhbEltYWdlQ2FjaGUuZ2V0RGF0YShvLGwucGFnZUluZGV4KTtpZihyKXJldHVybiBpLmFkZERlcGVuZGVuY3koci5vYmpJZCksaS5hZGRJbWFnZU9wcyhyLmZuLHIuYXJncyxyLm9wdGlvbmFsQ29udGVudCksdm9pZCBlKCk7bz1oLmZldGNoKG8pfWlmKCEobyBpbnN0YW5jZW9mIGIuQmFzZVN0cmVhbSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlhPYmplY3Qgc2hvdWxkIGJlIGEgc3RyZWFtIik7Y29uc3QgYz1vLmRpY3QuZ2V0KCJTdWJ0eXBlIik7aWYoIShjIGluc3RhbmNlb2Ygcy5OYW1lKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiWE9iamVjdCBzaG91bGQgaGF2ZSBhIE5hbWUgc3VidHlwZSIpO2lmKCJGb3JtIiE9PWMubmFtZSlpZigiSW1hZ2UiIT09Yy5uYW1lKXtpZigiUFMiIT09Yy5uYW1lKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbmhhbmRsZWQgWE9iamVjdCBzdWJ0eXBlICIuY29uY2F0KGMubmFtZSkpOygwLG4uaW5mbykoIklnbm9yZWQgWE9iamVjdCBzdWJ0eXBlIFBTIiksZSgpfWVsc2UgbC5idWlsZFBhaW50SW1hZ2VYT2JqZWN0KHtyZXNvdXJjZXM6YSxpbWFnZTpvLG9wZXJhdG9yTGlzdDppLGNhY2hlS2V5OkUsbG9jYWxJbWFnZUNhY2hlOmQsbG9jYWxDb2xvclNwYWNlQ2FjaGU6Zn0pLnRoZW4oZSx0KTtlbHNlIFMuc2F2ZSgpLGwuYnVpbGRGb3JtWE9iamVjdChhLG8sbnVsbCxpLHIsUy5zdGF0ZS5jbG9uZSgpLGYpLnRoZW4oKGZ1bmN0aW9uKCl7Uy5yZXN0b3JlKCksZSgpfSksdCl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2lmKCEoZSBpbnN0YW5jZW9mIG4uQWJvcnRFeGNlcHRpb24pKXtpZighbC5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlOygwLG4ud2FybikoJ2dldE9wZXJhdG9yTGlzdCAtIGlnbm9yaW5nIFhPYmplY3Q6ICInLmNvbmNhdChlLCciLicpKX19KSkpO2Nhc2Ugbi5PUFMuc2V0Rm9udDp2YXIgRD1lWzFdO3JldHVybiB2b2lkIHAobC5oYW5kbGVTZXRGb250KGEsZSxudWxsLGkscixTLnN0YXRlLGMpLnRoZW4oKGZ1bmN0aW9uKGUpe2kuYWRkRGVwZW5kZW5jeShlKSxpLmFkZE9wKG4uT1BTLnNldEZvbnQsW2UsRF0pfSkpKTtjYXNlIG4uT1BTLmJlZ2luVGV4dDp1PSEwO2JyZWFrO2Nhc2Ugbi5PUFMuZW5kVGV4dDp1PSExO2JyZWFrO2Nhc2Ugbi5PUFMuZW5kSW5saW5lSW1hZ2U6dmFyIEI9ZVswXS5jYWNoZUtleTtpZihCKXtjb25zdCB0PWQuZ2V0QnlOYW1lKEIpO2lmKHQpe2kuYWRkSW1hZ2VPcHModC5mbix0LmFyZ3MsdC5vcHRpb25hbENvbnRlbnQpLE4odCksZT1udWxsO2NvbnRpbnVlfX1yZXR1cm4gdm9pZCBwKGwuYnVpbGRQYWludEltYWdlWE9iamVjdCh7cmVzb3VyY2VzOmEsaW1hZ2U6ZVswXSxpc0lubGluZTohMCxvcGVyYXRvckxpc3Q6aSxjYWNoZUtleTpCLGxvY2FsSW1hZ2VDYWNoZTpkLGxvY2FsQ29sb3JTcGFjZUNhY2hlOmZ9KSk7Y2FzZSBuLk9QUy5zaG93VGV4dDppZighUy5zdGF0ZS5mb250KXtsLmVuc3VyZVN0YXRlRm9udChTLnN0YXRlKTtjb250aW51ZX1lWzBdPWwuaGFuZGxlVGV4dChlWzBdLFMuc3RhdGUpO2JyZWFrO2Nhc2Ugbi5PUFMuc2hvd1NwYWNlZFRleHQ6aWYoIVMuc3RhdGUuZm9udCl7bC5lbnN1cmVTdGF0ZUZvbnQoUy5zdGF0ZSk7Y29udGludWV9dmFyIEw9W10sXz1TLnN0YXRlO2Zvcihjb25zdCB0IG9mIGVbMF0pInN0cmluZyI9PXR5cGVvZiB0P0wucHVzaCguLi5sLmhhbmRsZVRleHQodCxfKSk6Im51bWJlciI9PXR5cGVvZiB0JiZMLnB1c2godCk7ZVswXT1MLHQ9bi5PUFMuc2hvd1RleHQ7YnJlYWs7Y2FzZSBuLk9QUy5uZXh0TGluZVNob3dUZXh0OmlmKCFTLnN0YXRlLmZvbnQpe2wuZW5zdXJlU3RhdGVGb250KFMuc3RhdGUpO2NvbnRpbnVlfWkuYWRkT3Aobi5PUFMubmV4dExpbmUpLGVbMF09bC5oYW5kbGVUZXh0KGVbMF0sUy5zdGF0ZSksdD1uLk9QUy5zaG93VGV4dDticmVhaztjYXNlIG4uT1BTLm5leHRMaW5lU2V0U3BhY2luZ1Nob3dUZXh0OmlmKCFTLnN0YXRlLmZvbnQpe2wuZW5zdXJlU3RhdGVGb250KFMuc3RhdGUpO2NvbnRpbnVlfWkuYWRkT3Aobi5PUFMubmV4dExpbmUpLGkuYWRkT3Aobi5PUFMuc2V0V29yZFNwYWNpbmcsW2Uuc2hpZnQoKV0pLGkuYWRkT3Aobi5PUFMuc2V0Q2hhclNwYWNpbmcsW2Uuc2hpZnQoKV0pLGVbMF09bC5oYW5kbGVUZXh0KGVbMF0sUy5zdGF0ZSksdD1uLk9QUy5zaG93VGV4dDticmVhaztjYXNlIG4uT1BTLnNldFRleHRSZW5kZXJpbmdNb2RlOlMuc3RhdGUudGV4dFJlbmRlcmluZ01vZGU9ZVswXTticmVhaztjYXNlIG4uT1BTLnNldEZpbGxDb2xvclNwYWNlOntjb25zdCB0PXcuQ29sb3JTcGFjZS5nZXRDYWNoZWQoZVswXSxoLGYpO2lmKHQpe1Muc3RhdGUuZmlsbENvbG9yU3BhY2U9dDtjb250aW51ZX1yZXR1cm4gdm9pZCBwKGwucGFyc2VDb2xvclNwYWNlKHtjczplWzBdLHJlc291cmNlczphLGxvY2FsQ29sb3JTcGFjZUNhY2hlOmZ9KS50aGVuKChmdW5jdGlvbihlKXtlJiYoUy5zdGF0ZS5maWxsQ29sb3JTcGFjZT1lKX0pKSl9Y2FzZSBuLk9QUy5zZXRTdHJva2VDb2xvclNwYWNlOntjb25zdCB0PXcuQ29sb3JTcGFjZS5nZXRDYWNoZWQoZVswXSxoLGYpO2lmKHQpe1Muc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZT10O2NvbnRpbnVlfXJldHVybiB2b2lkIHAobC5wYXJzZUNvbG9yU3BhY2Uoe2NzOmVbMF0scmVzb3VyY2VzOmEsbG9jYWxDb2xvclNwYWNlQ2FjaGU6Zn0pLnRoZW4oKGZ1bmN0aW9uKGUpe2UmJihTLnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U9ZSl9KSkpfWNhc2Ugbi5PUFMuc2V0RmlsbENvbG9yOk09Uy5zdGF0ZS5maWxsQ29sb3JTcGFjZSxlPU0uZ2V0UmdiKGUsMCksdD1uLk9QUy5zZXRGaWxsUkdCQ29sb3I7YnJlYWs7Y2FzZSBuLk9QUy5zZXRTdHJva2VDb2xvcjpNPVMuc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZSxlPU0uZ2V0UmdiKGUsMCksdD1uLk9QUy5zZXRTdHJva2VSR0JDb2xvcjticmVhaztjYXNlIG4uT1BTLnNldEZpbGxHcmF5OlMuc3RhdGUuZmlsbENvbG9yU3BhY2U9dy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheSxlPXcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXkuZ2V0UmdiKGUsMCksdD1uLk9QUy5zZXRGaWxsUkdCQ29sb3I7YnJlYWs7Y2FzZSBuLk9QUy5zZXRTdHJva2VHcmF5OlMuc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZT13LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5LGU9dy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheS5nZXRSZ2IoZSwwKSx0PW4uT1BTLnNldFN0cm9rZVJHQkNvbG9yO2JyZWFrO2Nhc2Ugbi5PUFMuc2V0RmlsbENNWUtDb2xvcjpTLnN0YXRlLmZpbGxDb2xvclNwYWNlPXcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmNteWssZT13LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5jbXlrLmdldFJnYihlLDApLHQ9bi5PUFMuc2V0RmlsbFJHQkNvbG9yO2JyZWFrO2Nhc2Ugbi5PUFMuc2V0U3Ryb2tlQ01ZS0NvbG9yOlMuc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZT13LkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5jbXlrLGU9dy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuY215ay5nZXRSZ2IoZSwwKSx0PW4uT1BTLnNldFN0cm9rZVJHQkNvbG9yO2JyZWFrO2Nhc2Ugbi5PUFMuc2V0RmlsbFJHQkNvbG9yOlMuc3RhdGUuZmlsbENvbG9yU3BhY2U9dy5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiLGU9dy5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiLmdldFJnYihlLDApO2JyZWFrO2Nhc2Ugbi5PUFMuc2V0U3Ryb2tlUkdCQ29sb3I6Uy5zdGF0ZS5zdHJva2VDb2xvclNwYWNlPXcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYixlPXcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYi5nZXRSZ2IoZSwwKTticmVhaztjYXNlIG4uT1BTLnNldEZpbGxDb2xvck46aWYoTT1TLnN0YXRlLmZpbGxDb2xvclNwYWNlLCJQYXR0ZXJuIj09PU0ubmFtZSlyZXR1cm4gdm9pZCBwKGwuaGFuZGxlQ29sb3JOKGksbi5PUFMuc2V0RmlsbENvbG9yTixlLE0seCxhLHIsZixtLHkpKTtlPU0uZ2V0UmdiKGUsMCksdD1uLk9QUy5zZXRGaWxsUkdCQ29sb3I7YnJlYWs7Y2FzZSBuLk9QUy5zZXRTdHJva2VDb2xvck46aWYoTT1TLnN0YXRlLnN0cm9rZUNvbG9yU3BhY2UsIlBhdHRlcm4iPT09TS5uYW1lKXJldHVybiB2b2lkIHAobC5oYW5kbGVDb2xvck4oaSxuLk9QUy5zZXRTdHJva2VDb2xvck4sZSxNLHgsYSxyLGYsbSx5KSk7ZT1NLmdldFJnYihlLDApLHQ9bi5PUFMuc2V0U3Ryb2tlUkdCQ29sb3I7YnJlYWs7Y2FzZSBuLk9QUy5zaGFkaW5nRmlsbDp2YXIgaj1hLmdldCgiU2hhZGluZyIpO2lmKCFqKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJObyBzaGFkaW5nIHJlc291cmNlIGZvdW5kIik7dmFyIFU9ai5nZXQoZVswXS5uYW1lKTtpZighVSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiTm8gc2hhZGluZyBvYmplY3QgZm91bmQiKTtlPVtsLnBhcnNlU2hhZGluZyh7c2hhZGluZzpVLHJlc291cmNlczphLGxvY2FsQ29sb3JTcGFjZUNhY2hlOmYsbG9jYWxTaGFkaW5nUGF0dGVybkNhY2hlOnl9KV0sdD1uLk9QUy5zaGFkaW5nRmlsbDticmVhaztjYXNlIG4uT1BTLnNldEdTdGF0ZTppZihSPWVbMF1pbnN0YW5jZW9mIHMuTmFtZSxFPWVbMF0ubmFtZSxSKXtjb25zdCB0PWcuZ2V0QnlOYW1lKEUpO2lmKHQpe3QubGVuZ3RoPjAmJmkuYWRkT3Aobi5PUFMuc2V0R1N0YXRlLFt0XSksZT1udWxsO2NvbnRpbnVlfX1yZXR1cm4gdm9pZCBwKG5ldyBQcm9taXNlKChmdW5jdGlvbihlLHQpe2lmKCFSKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJHU3RhdGUgbXVzdCBiZSByZWZlcnJlZCB0byBieSBuYW1lLiIpO2NvbnN0IG89YS5nZXQoIkV4dEdTdGF0ZSIpO2lmKCEobyBpbnN0YW5jZW9mIHMuRGljdCkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkV4dEdTdGF0ZSBzaG91bGQgYmUgYSBkaWN0aW9uYXJ5LiIpO2NvbnN0IGM9by5nZXQoRSk7aWYoIShjIGluc3RhbmNlb2Ygcy5EaWN0KSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiR1N0YXRlIHNob3VsZCBiZSBhIGRpY3Rpb25hcnkuIik7bC5zZXRHU3RhdGUoe3Jlc291cmNlczphLGdTdGF0ZTpjLG9wZXJhdG9yTGlzdDppLGNhY2hlS2V5OkUsdGFzazpyLHN0YXRlTWFuYWdlcjpTLGxvY2FsR1N0YXRlQ2FjaGU6Zyxsb2NhbENvbG9yU3BhY2VDYWNoZTpmfSkudGhlbihlLHQpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtpZighKGUgaW5zdGFuY2VvZiBuLkFib3J0RXhjZXB0aW9uKSl7aWYoIWwub3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgZTsoMCxuLndhcm4pKCdnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBFeHRHU3RhdGU6ICInLmNvbmNhdChlLCciLicpKX19KSkpO2Nhc2Ugbi5PUFMubW92ZVRvOmNhc2Ugbi5PUFMubGluZVRvOmNhc2Ugbi5PUFMuY3VydmVUbzpjYXNlIG4uT1BTLmN1cnZlVG8yOmNhc2Ugbi5PUFMuY3VydmVUbzM6Y2FzZSBuLk9QUy5jbG9zZVBhdGg6Y2FzZSBuLk9QUy5yZWN0YW5nbGU6bC5idWlsZFBhdGgoaSx0LGUsdSk7Y29udGludWU7Y2FzZSBuLk9QUy5tYXJrUG9pbnQ6Y2FzZSBuLk9QUy5tYXJrUG9pbnRQcm9wczpjYXNlIG4uT1BTLmJlZ2luQ29tcGF0OmNhc2Ugbi5PUFMuZW5kQ29tcGF0OmNvbnRpbnVlO2Nhc2Ugbi5PUFMuYmVnaW5NYXJrZWRDb250ZW50UHJvcHM6aWYoIShlWzBdaW5zdGFuY2VvZiBzLk5hbWUpKXsoMCxuLndhcm4pKCJFeHBlY3RlZCBuYW1lIGZvciBiZWdpbk1hcmtlZENvbnRlbnRQcm9wcyBhcmcwPSIuY29uY2F0KGVbMF0pKTtjb250aW51ZX1pZigiT0MiPT09ZVswXS5uYW1lKXJldHVybiB2b2lkIHAobC5wYXJzZU1hcmtlZENvbnRlbnRQcm9wcyhlWzFdLGEpLnRoZW4oKGU9PntpLmFkZE9wKG4uT1BTLmJlZ2luTWFya2VkQ29udGVudFByb3BzLFsiT0MiLGVdKX0pKS5jYXRjaCgoZT0+e2lmKCEoZSBpbnN0YW5jZW9mIG4uQWJvcnRFeGNlcHRpb24pKXtpZighbC5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlOygwLG4ud2FybikoJ2dldE9wZXJhdG9yTGlzdCAtIGlnbm9yaW5nIGJlZ2luTWFya2VkQ29udGVudFByb3BzOiAiJy5jb25jYXQoZSwnIi4nKSl9fSkpKTtlPVtlWzBdLm5hbWUsZVsxXWluc3RhbmNlb2Ygcy5EaWN0P2VbMV0uZ2V0KCJNQ0lEIik6bnVsbF07YnJlYWs7Y2FzZSBuLk9QUy5iZWdpbk1hcmtlZENvbnRlbnQ6Y2FzZSBuLk9QUy5lbmRNYXJrZWRDb250ZW50OmRlZmF1bHQ6aWYobnVsbCE9PWUpe2ZvcihJPTAsVD1lLmxlbmd0aDtJPFQmJiEoZVtJXWluc3RhbmNlb2Ygcy5EaWN0KTtJKyspO2lmKEk8VCl7KDAsbi53YXJuKSgiZ2V0T3BlcmF0b3JMaXN0IC0gaWdub3Jpbmcgb3BlcmF0b3I6ICIrdCk7Y29udGludWV9fX1pLmFkZE9wKHQsZSl9Rj9wKFApOihDKCksdCgpKX0pKS5jYXRjaCgoZT0+e2lmKCEoZSBpbnN0YW5jZW9mIG4uQWJvcnRFeGNlcHRpb24pKXtpZighdGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlOygwLG4ud2FybikoJ2dldE9wZXJhdG9yTGlzdCAtIGlnbm9yaW5nIGVycm9ycyBkdXJpbmcgIicuY29uY2F0KHIubmFtZSwnIiB0YXNrOiAiJykuY29uY2F0KGUsJyIuJykpLEMoKX19KSl9Z2V0VGV4dENvbnRlbnQoZSl7bGV0e3N0cmVhbTp0LHRhc2s6cixyZXNvdXJjZXM6YSxzdGF0ZU1hbmFnZXI6aT1udWxsLGluY2x1ZGVNYXJrZWRDb250ZW50Om89ITEsc2luazpjLHNlZW5TdHlsZXM6bD1uZXcgU2V0LHZpZXdCb3g6aCxtYXJrZWRDb250ZW50RGF0YTp1PW51bGwsZGlzYWJsZU5vcm1hbGl6YXRpb246ZD0hMX09ZTthfHwoYT1zLkRpY3QuZW1wdHkpLGl8fChpPW5ldyBfKG5ldyBqKSksbyYmKHV8fCh1PXtsZXZlbDowfSkpO2NvbnN0IGY9e2l0ZW1zOltdLHN0eWxlczpPYmplY3QuY3JlYXRlKG51bGwpfSxnPXtpbml0aWFsaXplZDohMSxzdHI6W10sdG90YWxXaWR0aDowLHRvdGFsSGVpZ2h0OjAsd2lkdGg6MCxoZWlnaHQ6MCx2ZXJ0aWNhbDohMSxwcmV2VHJhbnNmb3JtOm51bGwsdGV4dEFkdmFuY2VTY2FsZTowLHNwYWNlSW5GbG93TWluOjAsc3BhY2VJbkZsb3dNYXg6MCx0cmFja2luZ1NwYWNlTWluOjEvMCxuZWdhdGl2ZVNwYWNlTWF4Oi0xLzAsbm90QVNwYWNlOi0xLzAsdHJhbnNmb3JtOm51bGwsZm9udE5hbWU6bnVsbCxoYXNFT0w6ITF9LG09WyIgIiwiICJdO2xldCB3PTA7ZnVuY3Rpb24gdihlKXtjb25zdCB0PSh3KzEpJTIscj0iICIhPT1tW3ddJiYiICI9PT1tW3RdO3JldHVybiBtW3ddPWUsdz10LHJ9ZnVuY3Rpb24geCgpe3JldHVybiIgIiE9PW1bd10mJiIgIj09PW1bKHcrMSklMl19ZnVuY3Rpb24gUygpe21bMF09bVsxXT0iICIsdz0wfWNvbnN0IEE9dGhpcyxrPXRoaXMueHJlZixDPVtdO2xldCBPPW51bGw7Y29uc3QgRj1uZXcgcC5Mb2NhbEltYWdlQ2FjaGUsST1uZXcgcC5Mb2NhbEdTdGF0ZUNhY2hlLFQ9bmV3ICQodCxrLGkpO2xldCBNO2Z1bmN0aW9uIEUoZSl7bGV0e3dpZHRoOnQ9MCxoZWlnaHQ6cj0wLHRyYW5zZm9ybTpuPWcucHJldlRyYW5zZm9ybSxmb250TmFtZTphPWcuZm9udE5hbWV9PWU7Zi5pdGVtcy5wdXNoKHtzdHI6IiAiLGRpcjoibHRyIix3aWR0aDp0LGhlaWdodDpyLHRyYW5zZm9ybTpuLGZvbnROYW1lOmEsaGFzRU9MOiExfSl9ZnVuY3Rpb24gUigpe2NvbnN0IGU9TS5mb250LHQ9W00uZm9udFNpemUqTS50ZXh0SFNjYWxlLDAsMCxNLmZvbnRTaXplLDAsTS50ZXh0UmlzZV07aWYoZS5pc1R5cGUzRm9udCYmKE0uZm9udFNpemU8PTF8fGUuaXNDaGFyQkJveCkmJiEoMCxuLmlzQXJyYXlFcXVhbCkoTS5mb250TWF0cml4LG4uRk9OVF9JREVOVElUWV9NQVRSSVgpKXtjb25zdCByPWUuYmJveFszXS1lLmJib3hbMV07cj4wJiYodFszXSo9cipNLmZvbnRNYXRyaXhbM10pfXJldHVybiBuLlV0aWwudHJhbnNmb3JtKE0uY3RtLG4uVXRpbC50cmFuc2Zvcm0oTS50ZXh0TWF0cml4LHQpKX1mdW5jdGlvbiBOKCl7aWYoZy5pbml0aWFsaXplZClyZXR1cm4gZztjb25zdHtmb250OmUsbG9hZGVkTmFtZTp0fT1NO2wuaGFzKHQpfHwobC5hZGQodCksZi5zdHlsZXNbdF09e2ZvbnRGYW1pbHk6ZS5mYWxsYmFja05hbWUsYXNjZW50OmUuYXNjZW50LGRlc2NlbnQ6ZS5kZXNjZW50LHZlcnRpY2FsOmUudmVydGljYWx9KSxnLmZvbnROYW1lPXQ7Y29uc3Qgcj1nLnRyYW5zZm9ybT1SKCk7ZS52ZXJ0aWNhbD8oZy53aWR0aD1nLnRvdGFsV2lkdGg9TWF0aC5oeXBvdChyWzBdLHJbMV0pLGcuaGVpZ2h0PWcudG90YWxIZWlnaHQ9MCxnLnZlcnRpY2FsPSEwKTooZy53aWR0aD1nLnRvdGFsV2lkdGg9MCxnLmhlaWdodD1nLnRvdGFsSGVpZ2h0PU1hdGguaHlwb3QoclsyXSxyWzNdKSxnLnZlcnRpY2FsPSExKTtjb25zdCBuPU1hdGguaHlwb3QoTS50ZXh0TGluZU1hdHJpeFswXSxNLnRleHRMaW5lTWF0cml4WzFdKSxhPU1hdGguaHlwb3QoTS5jdG1bMF0sTS5jdG1bMV0pO2cudGV4dEFkdmFuY2VTY2FsZT1hKm47Y29uc3R7Zm9udFNpemU6aX09TTtyZXR1cm4gZy50cmFja2luZ1NwYWNlTWluPS4xMDIqaSxnLm5vdEFTcGFjZT0uMDMqaSxnLm5lZ2F0aXZlU3BhY2VNYXg9LS4yKmksZy5zcGFjZUluRmxvd01pbj0uMTAyKmksZy5zcGFjZUluRmxvd01heD0uNippLGcuaGFzRU9MPSExLGcuaW5pdGlhbGl6ZWQ9ITAsZ31mdW5jdGlvbiBCKCl7aWYoIWcuaW5pdGlhbGl6ZWQpcmV0dXJuO2NvbnN0IGU9TWF0aC5oeXBvdChNLnRleHRMaW5lTWF0cml4WzBdLE0udGV4dExpbmVNYXRyaXhbMV0pLHQ9TWF0aC5oeXBvdChNLmN0bVswXSxNLmN0bVsxXSkqZTt0IT09Zy50ZXh0QWR2YW5jZVNjYWxlJiYoZy52ZXJ0aWNhbD8oZy50b3RhbEhlaWdodCs9Zy5oZWlnaHQqZy50ZXh0QWR2YW5jZVNjYWxlLGcuaGVpZ2h0PTApOihnLnRvdGFsV2lkdGgrPWcud2lkdGgqZy50ZXh0QWR2YW5jZVNjYWxlLGcud2lkdGg9MCksZy50ZXh0QWR2YW5jZVNjYWxlPXQpfWZ1bmN0aW9uIEwoZSx0KXtyZXR1cm4gQS5sb2FkRm9udChlLHQsYSkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZm9udC5pc1R5cGUzRm9udD9lLmxvYWRUeXBlM0RhdGEoQSxhLHIpLmNhdGNoKChmdW5jdGlvbigpe30pKS50aGVuKChmdW5jdGlvbigpe3JldHVybiBlfSkpOmV9KSkudGhlbigoZnVuY3Rpb24oZSl7TS5sb2FkZWROYW1lPWUubG9hZGVkTmFtZSxNLmZvbnQ9ZS5mb250LE0uZm9udE1hdHJpeD1lLmZvbnQuZm9udE1hdHJpeHx8bi5GT05UX0lERU5USVRZX01BVFJJWH0pKX1mdW5jdGlvbiBVKGUsdCxyKXtjb25zdCBuPU1hdGguaHlwb3QoclswXSxyWzFdKTtyZXR1cm5bKHJbMF0qZStyWzFdKnQpL24sKHJbMl0qZStyWzNdKnQpL25dfWZ1bmN0aW9uIFgoZSl7dmFyIHQ7Y29uc3Qgcj1SKCk7bGV0IG49cls0XSxhPXJbNV07aWYobnVsbCE9PSh0PU0uZm9udCkmJnZvaWQgMCE9PXQmJnQudmVydGljYWwpe2lmKG48aFswXXx8bj5oWzJdfHxhK2U8aFsxXXx8YT5oWzNdKXJldHVybiExfWVsc2UgaWYobitlPGhbMF18fG4+aFsyXXx8YTxoWzFdfHxhPmhbM10pcmV0dXJuITE7aWYoIU0uZm9udHx8IWcucHJldlRyYW5zZm9ybSlyZXR1cm4hMDtsZXQgaT1nLnByZXZUcmFuc2Zvcm1bNF0scz1nLnByZXZUcmFuc2Zvcm1bNV07aWYoaT09PW4mJnM9PT1hKXJldHVybiEwO2xldCBvPS0xO3N3aXRjaChyWzBdJiYwPT09clsxXSYmMD09PXJbMl0/bz1yWzBdPjA/MDoxODA6clsxXSYmMD09PXJbMF0mJjA9PT1yWzNdJiYobz1yWzFdPjA/OTA6MjcwKSxvKXtjYXNlIDA6YnJlYWs7Y2FzZSA5MDpbbixhXT1bYSxuXSxbaSxzXT1bcyxpXTticmVhaztjYXNlIDE4MDpbbixhLGksc109Wy1uLC1hLC1pLC1zXTticmVhaztjYXNlIDI3MDpbbixhXT1bLWEsLW5dLFtpLHNdPVstcywtaV07YnJlYWs7ZGVmYXVsdDpbbixhXT1VKG4sYSxyKSxbaSxzXT1VKGkscyxnLnByZXZUcmFuc2Zvcm0pfWlmKE0uZm9udC52ZXJ0aWNhbCl7Y29uc3QgZT0ocy1hKS9nLnRleHRBZHZhbmNlU2NhbGUsdD1uLWkscj1NYXRoLnNpZ24oZy5oZWlnaHQpO3JldHVybiBlPHIqZy5uZWdhdGl2ZVNwYWNlTWF4P01hdGguYWJzKHQpPi41Kmcud2lkdGg/KHEoKSwhMCk6KFMoKSxHKCksITApOk1hdGguYWJzKHQpPmcud2lkdGg/KHEoKSwhMCk6KGU8PXIqZy5ub3RBU3BhY2UmJlMoKSxlPD1yKmcudHJhY2tpbmdTcGFjZU1pbj94KCk/KFMoKSxHKCksRSh7aGVpZ2h0Ok1hdGguYWJzKGUpfSkpOmcuaGVpZ2h0Kz1lOnooZSxnLnByZXZUcmFuc2Zvcm0scil8fCgwPT09Zy5zdHIubGVuZ3RoPyhTKCksRSh7aGVpZ2h0Ok1hdGguYWJzKGUpfSkpOmcuaGVpZ2h0Kz1lKSxNYXRoLmFicyh0KT4uMjUqZy53aWR0aCYmRygpLCEwKX1jb25zdCBjPShuLWkpL2cudGV4dEFkdmFuY2VTY2FsZSxsPWEtcyx1PU1hdGguc2lnbihnLndpZHRoKTtyZXR1cm4gYzx1KmcubmVnYXRpdmVTcGFjZU1heD9NYXRoLmFicyhsKT4uNSpnLmhlaWdodD8ocSgpLCEwKTooUygpLEcoKSwhMCk6TWF0aC5hYnMobCk+Zy5oZWlnaHQ/KHEoKSwhMCk6KGM8PXUqZy5ub3RBU3BhY2UmJlMoKSxjPD11KmcudHJhY2tpbmdTcGFjZU1pbj94KCk/KFMoKSxHKCksRSh7d2lkdGg6TWF0aC5hYnMoYyl9KSk6Zy53aWR0aCs9Yzp6KGMsZy5wcmV2VHJhbnNmb3JtLHUpfHwoMD09PWcuc3RyLmxlbmd0aD8oUygpLEUoe3dpZHRoOk1hdGguYWJzKGMpfSkpOmcud2lkdGgrPWMpLE1hdGguYWJzKGwpPi4yNSpnLmhlaWdodCYmRygpLCEwKX1mdW5jdGlvbiBIKGUpe2xldHtjaGFyczp0LGV4dHJhU3BhY2luZzpyfT1lO2NvbnN0IG49TS5mb250O2lmKCF0KXtjb25zdCBlPU0uY2hhclNwYWNpbmcrcjtyZXR1cm4gdm9pZChlJiYobi52ZXJ0aWNhbD9NLnRyYW5zbGF0ZVRleHRNYXRyaXgoMCwtZSk6TS50cmFuc2xhdGVUZXh0TWF0cml4KGUqTS50ZXh0SFNjYWxlLDApKSl9Y29uc3QgYT1uLmNoYXJzVG9HbHlwaHModCksaT1NLmZvbnRNYXRyaXhbMF0qTS5mb250U2l6ZTtmb3IobGV0IGU9MCx0PWEubGVuZ3RoO2U8dDtlKyspe2NvbnN0IHM9YVtlXSx7Y2F0ZWdvcnk6b309cztpZihvLmlzSW52aXNpYmxlRm9ybWF0TWFyayljb250aW51ZTtsZXQgYz1NLmNoYXJTcGFjaW5nKyhlKzE9PT10P3I6MCksbD1zLndpZHRoO24udmVydGljYWwmJihsPXMudm1ldHJpYz9zLnZtZXRyaWNbMF06LWwpO2xldCBoPWwqaTtpZihvLmlzV2hpdGVzcGFjZSl7bi52ZXJ0aWNhbD8oYys9LWgrTS53b3JkU3BhY2luZyxNLnRyYW5zbGF0ZVRleHRNYXRyaXgoMCwtYykpOihjKz1oK00ud29yZFNwYWNpbmcsTS50cmFuc2xhdGVUZXh0TWF0cml4KGMqTS50ZXh0SFNjYWxlLDApKSx2KCIgIik7Y29udGludWV9aWYoIW8uaXNaZXJvV2lkdGhEaWFjcml0aWMmJiFYKGgpKXtuLnZlcnRpY2FsP00udHJhbnNsYXRlVGV4dE1hdHJpeCgwLGgpOk0udHJhbnNsYXRlVGV4dE1hdHJpeChoKk0udGV4dEhTY2FsZSwwKTtjb250aW51ZX1jb25zdCB1PU4oKTtvLmlzWmVyb1dpZHRoRGlhY3JpdGljJiYoaD0wKSxuLnZlcnRpY2FsPyhNLnRyYW5zbGF0ZVRleHRNYXRyaXgoMCxoKSxoPU1hdGguYWJzKGgpLHUuaGVpZ2h0Kz1oKTooaCo9TS50ZXh0SFNjYWxlLE0udHJhbnNsYXRlVGV4dE1hdHJpeChoLDApLHUud2lkdGgrPWgpLGgmJih1LnByZXZUcmFuc2Zvcm09UigpKTtjb25zdCBkPXMudW5pY29kZTt2KGQpJiZ1LnN0ci5wdXNoKCIgIiksdS5zdHIucHVzaChkKSxjJiYobi52ZXJ0aWNhbD9NLnRyYW5zbGF0ZVRleHRNYXRyaXgoMCwtYyk6TS50cmFuc2xhdGVUZXh0TWF0cml4KGMqTS50ZXh0SFNjYWxlLDApKX19ZnVuY3Rpb24gcSgpe1MoKSxnLmluaXRpYWxpemVkPyhnLmhhc0VPTD0hMCxHKCkpOmYuaXRlbXMucHVzaCh7c3RyOiIiLGRpcjoibHRyIix3aWR0aDowLGhlaWdodDowLHRyYW5zZm9ybTpSKCksZm9udE5hbWU6TS5sb2FkZWROYW1lLGhhc0VPTDohMH0pfWZ1bmN0aW9uIHooZSx0LHIpe2lmKHIqZy5zcGFjZUluRmxvd01pbjw9ZSYmZTw9cipnLnNwYWNlSW5GbG93TWF4KXJldHVybiBnLmluaXRpYWxpemVkJiYoUygpLGcuc3RyLnB1c2goIiAiKSksITE7Y29uc3Qgbj1nLmZvbnROYW1lO2xldCBhPTA7cmV0dXJuIGcudmVydGljYWwmJihhPWUsZT0wKSxHKCksUygpLEUoe3dpZHRoOk1hdGguYWJzKGUpLGhlaWdodDpNYXRoLmFicyhhKSx0cmFuc2Zvcm06dHx8UigpLGZvbnROYW1lOm59KSwhMH1mdW5jdGlvbiBHKCl7Zy5pbml0aWFsaXplZCYmZy5zdHImJihnLnZlcnRpY2FsP2cudG90YWxIZWlnaHQrPWcuaGVpZ2h0KmcudGV4dEFkdmFuY2VTY2FsZTpnLnRvdGFsV2lkdGgrPWcud2lkdGgqZy50ZXh0QWR2YW5jZVNjYWxlLGYuaXRlbXMucHVzaChmdW5jdGlvbihlKXtsZXQgdD1lLnN0ci5qb2luKCIiKTtkfHwodD0oMCxuLm5vcm1hbGl6ZVVuaWNvZGUpKHQpKTtjb25zdCByPSgwLHkuYmlkaSkodCwtMSxlLnZlcnRpY2FsKTtyZXR1cm57c3RyOnIuc3RyLGRpcjpyLmRpcix3aWR0aDpNYXRoLmFicyhlLnRvdGFsV2lkdGgpLGhlaWdodDpNYXRoLmFicyhlLnRvdGFsSGVpZ2h0KSx0cmFuc2Zvcm06ZS50cmFuc2Zvcm0sZm9udE5hbWU6ZS5mb250TmFtZSxoYXNFT0w6ZS5oYXNFT0x9fShnKSksZy5pbml0aWFsaXplZD0hMSxnLnN0ci5sZW5ndGg9MCl9ZnVuY3Rpb24gVygpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07Y29uc3QgdD1mLml0ZW1zLmxlbmd0aDswPT09dHx8ZSYmdDwxMHx8KGMuZW5xdWV1ZShmLHQpLGYuaXRlbXM9W10sZi5zdHlsZXM9T2JqZWN0LmNyZWF0ZShudWxsKSl9Y29uc3QgVj1uZXcgRDtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uIGUodCxnKXtjb25zdCBwPWZ1bmN0aW9uKHIpe1coITApLFByb21pc2UuYWxsKFtyLGMucmVhZHldKS50aGVuKChmdW5jdGlvbigpe3RyeXtlKHQsZyl9Y2F0Y2goZSl7ZyhlKX19KSxnKX07ci5lbnN1cmVOb3RUZXJtaW5hdGVkKCksVi5yZXNldCgpO2NvbnN0IG09e307bGV0IHksdz1bXTtmb3IoOyEoeT1WLmNoZWNrKCkpJiYody5sZW5ndGg9MCxtLmFyZ3M9dyxULnJlYWQobSkpOyl7Y29uc3QgZT1NO009aS5zdGF0ZTtjb25zdCB0PW0uZm47c3dpdGNoKHc9bS5hcmdzLDB8dCl7Y2FzZSBuLk9QUy5zZXRGb250OnZhciB2PXdbMF0ubmFtZSx4PXdbMV07aWYoTS5mb250JiZ2PT09TS5mb250TmFtZSYmeD09PU0uZm9udFNpemUpYnJlYWs7cmV0dXJuIEcoKSxNLmZvbnROYW1lPXYsTS5mb250U2l6ZT14LHZvaWQgcChMKHYsbnVsbCkpO2Nhc2Ugbi5PUFMuc2V0VGV4dFJpc2U6TS50ZXh0UmlzZT13WzBdO2JyZWFrO2Nhc2Ugbi5PUFMuc2V0SFNjYWxlOk0udGV4dEhTY2FsZT13WzBdLzEwMDticmVhaztjYXNlIG4uT1BTLnNldExlYWRpbmc6TS5sZWFkaW5nPXdbMF07YnJlYWs7Y2FzZSBuLk9QUy5tb3ZlVGV4dDpNLnRyYW5zbGF0ZVRleHRMaW5lTWF0cml4KHdbMF0sd1sxXSksTS50ZXh0TWF0cml4PU0udGV4dExpbmVNYXRyaXguc2xpY2UoKTticmVhaztjYXNlIG4uT1BTLnNldExlYWRpbmdNb3ZlVGV4dDpNLmxlYWRpbmc9LXdbMV0sTS50cmFuc2xhdGVUZXh0TGluZU1hdHJpeCh3WzBdLHdbMV0pLE0udGV4dE1hdHJpeD1NLnRleHRMaW5lTWF0cml4LnNsaWNlKCk7YnJlYWs7Y2FzZSBuLk9QUy5uZXh0TGluZTpNLmNhcnJpYWdlUmV0dXJuKCk7YnJlYWs7Y2FzZSBuLk9QUy5zZXRUZXh0TWF0cml4Ok0uc2V0VGV4dE1hdHJpeCh3WzBdLHdbMV0sd1syXSx3WzNdLHdbNF0sd1s1XSksTS5zZXRUZXh0TGluZU1hdHJpeCh3WzBdLHdbMV0sd1syXSx3WzNdLHdbNF0sd1s1XSksQigpO2JyZWFrO2Nhc2Ugbi5PUFMuc2V0Q2hhclNwYWNpbmc6TS5jaGFyU3BhY2luZz13WzBdO2JyZWFrO2Nhc2Ugbi5PUFMuc2V0V29yZFNwYWNpbmc6TS53b3JkU3BhY2luZz13WzBdO2JyZWFrO2Nhc2Ugbi5PUFMuYmVnaW5UZXh0Ok0udGV4dE1hdHJpeD1uLklERU5USVRZX01BVFJJWC5zbGljZSgpLE0udGV4dExpbmVNYXRyaXg9bi5JREVOVElUWV9NQVRSSVguc2xpY2UoKTticmVhaztjYXNlIG4uT1BTLnNob3dTcGFjZWRUZXh0OmlmKCFpLnN0YXRlLmZvbnQpe0EuZW5zdXJlU3RhdGVGb250KGkuc3RhdGUpO2NvbnRpbnVlfWNvbnN0IHQ9KE0uZm9udC52ZXJ0aWNhbD8xOi0xKSpNLmZvbnRTaXplLzFlMyxnPXdbMF07Zm9yKGxldCBlPTAscj1nLmxlbmd0aDtlPHI7ZSsrKXtjb25zdCByPWdbZV07aWYoInN0cmluZyI9PXR5cGVvZiByKUMucHVzaChyKTtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgciYmMCE9PXIpe2NvbnN0IGU9Qy5qb2luKCIiKTtDLmxlbmd0aD0wLEgoe2NoYXJzOmUsZXh0cmFTcGFjaW5nOnIqdH0pfX1pZihDLmxlbmd0aD4wKXtjb25zdCBlPUMuam9pbigiIik7Qy5sZW5ndGg9MCxIKHtjaGFyczplLGV4dHJhU3BhY2luZzowfSl9YnJlYWs7Y2FzZSBuLk9QUy5zaG93VGV4dDppZighaS5zdGF0ZS5mb250KXtBLmVuc3VyZVN0YXRlRm9udChpLnN0YXRlKTtjb250aW51ZX1IKHtjaGFyczp3WzBdLGV4dHJhU3BhY2luZzowfSk7YnJlYWs7Y2FzZSBuLk9QUy5uZXh0TGluZVNob3dUZXh0OmlmKCFpLnN0YXRlLmZvbnQpe0EuZW5zdXJlU3RhdGVGb250KGkuc3RhdGUpO2NvbnRpbnVlfU0uY2FycmlhZ2VSZXR1cm4oKSxIKHtjaGFyczp3WzBdLGV4dHJhU3BhY2luZzowfSk7YnJlYWs7Y2FzZSBuLk9QUy5uZXh0TGluZVNldFNwYWNpbmdTaG93VGV4dDppZighaS5zdGF0ZS5mb250KXtBLmVuc3VyZVN0YXRlRm9udChpLnN0YXRlKTtjb250aW51ZX1NLndvcmRTcGFjaW5nPXdbMF0sTS5jaGFyU3BhY2luZz13WzFdLE0uY2FycmlhZ2VSZXR1cm4oKSxIKHtjaGFyczp3WzJdLGV4dHJhU3BhY2luZzowfSk7YnJlYWs7Y2FzZSBuLk9QUy5wYWludFhPYmplY3Q6RygpLE98fChPPWEuZ2V0KCJYT2JqZWN0Iil8fHMuRGljdC5lbXB0eSk7dmFyIFM9d1swXWluc3RhbmNlb2Ygcy5OYW1lLEU9d1swXS5uYW1lO2lmKFMmJkYuZ2V0QnlOYW1lKEUpKWJyZWFrO3JldHVybiB2b2lkIHAobmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsdCl7aWYoIVMpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlhPYmplY3QgbXVzdCBiZSByZWZlcnJlZCB0byBieSBuYW1lLiIpO2xldCBmPU8uZ2V0UmF3KEUpO2lmKGYgaW5zdGFuY2VvZiBzLlJlZil7aWYoRi5nZXRCeVJlZihmKSlyZXR1cm4gdm9pZCBlKCk7aWYoQS5nbG9iYWxJbWFnZUNhY2hlLmdldERhdGEoZixBLnBhZ2VJbmRleCkpcmV0dXJuIHZvaWQgZSgpO2Y9ay5mZXRjaChmKX1pZighKGYgaW5zdGFuY2VvZiBiLkJhc2VTdHJlYW0pKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJYT2JqZWN0IHNob3VsZCBiZSBhIHN0cmVhbSIpO2NvbnN0IGc9Zi5kaWN0LmdldCgiU3VidHlwZSIpO2lmKCEoZyBpbnN0YW5jZW9mIHMuTmFtZSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlhPYmplY3Qgc2hvdWxkIGhhdmUgYSBOYW1lIHN1YnR5cGUiKTtpZigiRm9ybSIhPT1nLm5hbWUpcmV0dXJuIEYuc2V0KEUsZi5kaWN0Lm9iaklkLCEwKSx2b2lkIGUoKTtjb25zdCBwPWkuc3RhdGUuY2xvbmUoKSxtPW5ldyBfKHApLHk9Zi5kaWN0LmdldEFycmF5KCJNYXRyaXgiKTtBcnJheS5pc0FycmF5KHkpJiY2PT09eS5sZW5ndGgmJm0udHJhbnNmb3JtKHkpLFcoKTtjb25zdCB3PXtlbnF1ZXVlSW52b2tlZDohMSxlbnF1ZXVlKGUsdCl7dGhpcy5lbnF1ZXVlSW52b2tlZD0hMCxjLmVucXVldWUoZSx0KX0sZ2V0IGRlc2lyZWRTaXplKCl7cmV0dXJuIGMuZGVzaXJlZFNpemV9LGdldCByZWFkeSgpe3JldHVybiBjLnJlYWR5fX07QS5nZXRUZXh0Q29udGVudCh7c3RyZWFtOmYsdGFzazpyLHJlc291cmNlczpmLmRpY3QuZ2V0KCJSZXNvdXJjZXMiKXx8YSxzdGF0ZU1hbmFnZXI6bSxpbmNsdWRlTWFya2VkQ29udGVudDpvLHNpbms6dyxzZWVuU3R5bGVzOmwsdmlld0JveDpoLG1hcmtlZENvbnRlbnREYXRhOnUsZGlzYWJsZU5vcm1hbGl6YXRpb246ZH0pLnRoZW4oKGZ1bmN0aW9uKCl7dy5lbnF1ZXVlSW52b2tlZHx8Ri5zZXQoRSxmLmRpY3Qub2JqSWQsITApLGUoKX0pLHQpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtpZighKGUgaW5zdGFuY2VvZiBuLkFib3J0RXhjZXB0aW9uKSl7aWYoIUEub3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgZTsoMCxuLndhcm4pKCdnZXRUZXh0Q29udGVudCAtIGlnbm9yaW5nIFhPYmplY3Q6ICInLmNvbmNhdChlLCciLicpKX19KSkpO2Nhc2Ugbi5PUFMuc2V0R1N0YXRlOmlmKFM9d1swXWluc3RhbmNlb2Ygcy5OYW1lLEU9d1swXS5uYW1lLFMmJkkuZ2V0QnlOYW1lKEUpKWJyZWFrO3JldHVybiB2b2lkIHAobmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsdCl7aWYoIVMpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkdTdGF0ZSBtdXN0IGJlIHJlZmVycmVkIHRvIGJ5IG5hbWUuIik7Y29uc3Qgcj1hLmdldCgiRXh0R1N0YXRlIik7aWYoIShyIGluc3RhbmNlb2Ygcy5EaWN0KSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiRXh0R1N0YXRlIHNob3VsZCBiZSBhIGRpY3Rpb25hcnkuIik7Y29uc3QgaT1yLmdldChFKTtpZighKGkgaW5zdGFuY2VvZiBzLkRpY3QpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJHU3RhdGUgc2hvdWxkIGJlIGEgZGljdGlvbmFyeS4iKTtjb25zdCBvPWkuZ2V0KCJGb250Iik7bz8oRygpLE0uZm9udE5hbWU9bnVsbCxNLmZvbnRTaXplPW9bMV0sTChudWxsLG9bMF0pLnRoZW4oZSx0KSk6KEkuc2V0KEUsaS5vYmpJZCwhMCksZSgpKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7aWYoIShlIGluc3RhbmNlb2Ygbi5BYm9ydEV4Y2VwdGlvbikpe2lmKCFBLm9wdGlvbnMuaWdub3JlRXJyb3JzKXRocm93IGU7KDAsbi53YXJuKSgnZ2V0VGV4dENvbnRlbnQgLSBpZ25vcmluZyBFeHRHU3RhdGU6ICInLmNvbmNhdChlLCciLicpKX19KSkpO2Nhc2Ugbi5PUFMuYmVnaW5NYXJrZWRDb250ZW50OkcoKSxvJiYodS5sZXZlbCsrLGYuaXRlbXMucHVzaCh7dHlwZToiYmVnaW5NYXJrZWRDb250ZW50Iix0YWc6d1swXWluc3RhbmNlb2Ygcy5OYW1lP3dbMF0ubmFtZTpudWxsfSkpO2JyZWFrO2Nhc2Ugbi5PUFMuYmVnaW5NYXJrZWRDb250ZW50UHJvcHM6aWYoRygpLG8pe3UubGV2ZWwrKztsZXQgZT1udWxsO3dbMV1pbnN0YW5jZW9mIHMuRGljdCYmKGU9d1sxXS5nZXQoIk1DSUQiKSksZi5pdGVtcy5wdXNoKHt0eXBlOiJiZWdpbk1hcmtlZENvbnRlbnRQcm9wcyIsaWQ6TnVtYmVyLmlzSW50ZWdlcihlKT8iIi5jb25jYXQoQS5pZEZhY3RvcnkuZ2V0UGFnZU9iaklkKCksIl9tYyIpLmNvbmNhdChlKTpudWxsLHRhZzp3WzBdaW5zdGFuY2VvZiBzLk5hbWU/d1swXS5uYW1lOm51bGx9KX1icmVhaztjYXNlIG4uT1BTLmVuZE1hcmtlZENvbnRlbnQ6aWYoRygpLG8pe2lmKDA9PT11LmxldmVsKWJyZWFrO3UubGV2ZWwtLSxmLml0ZW1zLnB1c2goe3R5cGU6ImVuZE1hcmtlZENvbnRlbnQifSl9YnJlYWs7Y2FzZSBuLk9QUy5yZXN0b3JlOiFlfHxlLmZvbnQ9PT1NLmZvbnQmJmUuZm9udFNpemU9PT1NLmZvbnRTaXplJiZlLmZvbnROYW1lPT09TS5mb250TmFtZXx8RygpfWlmKGYuaXRlbXMubGVuZ3RoPj1jLmRlc2lyZWRTaXplKXt5PSEwO2JyZWFrfX15P3AoUCk6KEcoKSxXKCksdCgpKX0pKS5jYXRjaCgoZT0+e2lmKCEoZSBpbnN0YW5jZW9mIG4uQWJvcnRFeGNlcHRpb24pKXtpZighdGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlOygwLG4ud2FybikoJ2dldFRleHRDb250ZW50IC0gaWdub3JpbmcgZXJyb3JzIGR1cmluZyAiJy5jb25jYXQoci5uYW1lLCciIHRhc2s6ICInKS5jb25jYXQoZSwnIi4nKSksRygpLFcoKX19KSl9ZXh0cmFjdERhdGFTdHJ1Y3R1cmVzKGUsdCxyKXtjb25zdCBhPXRoaXMueHJlZjtsZXQgaTtjb25zdCBvPXRoaXMucmVhZFRvVW5pY29kZShyLnRvVW5pY29kZXx8ZS5nZXQoIlRvVW5pY29kZSIpfHx0LmdldCgiVG9Vbmljb2RlIikpO2lmKHIuY29tcG9zaXRlKXtjb25zdCB0PWUuZ2V0KCJDSURTeXN0ZW1JbmZvIik7dCBpbnN0YW5jZW9mIHMuRGljdCYmKHIuY2lkU3lzdGVtSW5mbz17cmVnaXN0cnk6KDAsbi5zdHJpbmdUb1BERlN0cmluZykodC5nZXQoIlJlZ2lzdHJ5IikpLG9yZGVyaW5nOigwLG4uc3RyaW5nVG9QREZTdHJpbmcpKHQuZ2V0KCJPcmRlcmluZyIpKSxzdXBwbGVtZW50OnQuZ2V0KCJTdXBwbGVtZW50Iil9KTt0cnl7Y29uc3QgdD1lLmdldCgiQ0lEVG9HSURNYXAiKTt0IGluc3RhbmNlb2YgYi5CYXNlU3RyZWFtJiYoaT10LmdldEJ5dGVzKCkpfWNhdGNoKGUpe2lmKCF0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKXRocm93IGU7KDAsbi53YXJuKSgnZXh0cmFjdERhdGFTdHJ1Y3R1cmVzIC0gaWdub3JpbmcgQ0lEVG9HSURNYXAgZGF0YTogIicuY29uY2F0KGUsJyIuJykpfX1jb25zdCBoPVtdO2xldCB1LGQ9bnVsbDtpZihlLmhhcygiRW5jb2RpbmciKSl7aWYodT1lLmdldCgiRW5jb2RpbmciKSx1IGluc3RhbmNlb2Ygcy5EaWN0KXtpZihkPXUuZ2V0KCJCYXNlRW5jb2RpbmciKSxkPWQgaW5zdGFuY2VvZiBzLk5hbWU/ZC5uYW1lOm51bGwsdS5oYXMoIkRpZmZlcmVuY2VzIikpe2NvbnN0IGU9dS5nZXQoIkRpZmZlcmVuY2VzIik7bGV0IHQ9MDtmb3IoY29uc3QgciBvZiBlKXtjb25zdCBlPWEuZmV0Y2hJZlJlZihyKTtpZigibnVtYmVyIj09dHlwZW9mIGUpdD1lO2Vsc2V7aWYoIShlIGluc3RhbmNlb2Ygcy5OYW1lKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCBlbnRyeSBpbiAnRGlmZmVyZW5jZXMnIGFycmF5OiAiLmNvbmNhdChlKSk7aFt0KytdPWUubmFtZX19fX1lbHNlIGlmKHUgaW5zdGFuY2VvZiBzLk5hbWUpZD11Lm5hbWU7ZWxzZXtjb25zdCBlPSJFbmNvZGluZyBpcyBub3QgYSBOYW1lIG5vciBhIERpY3QiO2lmKCF0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKGUpOygwLG4ud2FybikoZSl9Ik1hY1JvbWFuRW5jb2RpbmciIT09ZCYmIk1hY0V4cGVydEVuY29kaW5nIiE9PWQmJiJXaW5BbnNpRW5jb2RpbmciIT09ZCYmKGQ9bnVsbCl9Y29uc3QgZj0hci5maWxlfHxyLmlzSW50ZXJuYWxGb250LGc9KDAsbC5nZXRTeW1ib2xzRm9udHMpKClbci5uYW1lXTtpZihkJiZmJiZnJiYoZD1udWxsKSxkKXIuZGVmYXVsdEVuY29kaW5nPSgwLGMuZ2V0RW5jb2RpbmcpKGQpO2Vsc2V7Y29uc3QgZT0hIShyLmZsYWdzJnguRm9udEZsYWdzLlN5bWJvbGljKSx0PSEhKHIuZmxhZ3MmeC5Gb250RmxhZ3MuTm9uc3ltYm9saWMpO3U9Yy5TdGFuZGFyZEVuY29kaW5nLCJUcnVlVHlwZSIhPT1yLnR5cGV8fHR8fCh1PWMuV2luQW5zaUVuY29kaW5nKSwoZXx8ZykmJih1PWMuTWFjUm9tYW5FbmNvZGluZyxmJiYoL1N5bWJvbC9pLnRlc3Qoci5uYW1lKT91PWMuU3ltYm9sU2V0RW5jb2Rpbmc6L0RpbmdiYXRzL2kudGVzdChyLm5hbWUpP3U9Yy5aYXBmRGluZ2JhdHNFbmNvZGluZzovV2luZ2RpbmdzL2kudGVzdChyLm5hbWUpJiYodT1jLldpbkFuc2lFbmNvZGluZykpKSxyLmRlZmF1bHRFbmNvZGluZz11fXJldHVybiByLmRpZmZlcmVuY2VzPWgsci5iYXNlRW5jb2RpbmdOYW1lPWQsci5oYXNFbmNvZGluZz0hIWR8fGgubGVuZ3RoPjAsci5kaWN0PWUsby50aGVuKChlPT4oci50b1VuaWNvZGU9ZSx0aGlzLmJ1aWxkVG9Vbmljb2RlKHIpKSkpLnRoZW4oKGU9PihyLnRvVW5pY29kZT1lLGkmJihyLmNpZFRvR2lkTWFwPXRoaXMucmVhZENpZFRvR2lkTWFwKGksZSkpLHIpKSl9X3NpbXBsZUZvbnRUb1VuaWNvZGUoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTsoMCxuLmFzc2VydCkoIWUuY29tcG9zaXRlLCJNdXN0IGJlIGEgc2ltcGxlIGZvbnQuIik7Y29uc3Qgcj1bXSxhPWUuZGVmYXVsdEVuY29kaW5nLnNsaWNlKCksaT1lLmJhc2VFbmNvZGluZ05hbWUscz1lLmRpZmZlcmVuY2VzO2Zvcihjb25zdCBlIGluIHMpe2NvbnN0IHQ9c1tlXTsiLm5vdGRlZiIhPT10JiYoYVtlXT10KX1jb25zdCBvPSgwLEEuZ2V0R2x5cGhzVW5pY29kZSkoKTtmb3IoY29uc3QgbiBpbiBhKXtsZXQgcz1hW25dO2lmKCIiPT09cyljb250aW51ZTtsZXQgbD1vW3NdO2lmKHZvaWQgMCE9PWwpe3Jbbl09U3RyaW5nLmZyb21DaGFyQ29kZShsKTtjb250aW51ZX1sZXQgaD0wO3N3aXRjaChzWzBdKXtjYXNlIkciOjM9PT1zLmxlbmd0aCYmKGg9cGFyc2VJbnQocy5zdWJzdHJpbmcoMSksMTYpKTticmVhaztjYXNlImciOjU9PT1zLmxlbmd0aCYmKGg9cGFyc2VJbnQocy5zdWJzdHJpbmcoMSksMTYpKTticmVhaztjYXNlIkMiOmNhc2UiYyI6aWYocy5sZW5ndGg+PTMmJnMubGVuZ3RoPD00KXtjb25zdCByPXMuc3Vic3RyaW5nKDEpO2lmKHQpe2g9cGFyc2VJbnQociwxNik7YnJlYWt9aWYoaD0rcixOdW1iZXIuaXNOYU4oaCkmJk51bWJlci5pc0ludGVnZXIocGFyc2VJbnQociwxNikpKXJldHVybiB0aGlzLl9zaW1wbGVGb250VG9Vbmljb2RlKGUsITApfWJyZWFrO2Nhc2UidSI6bD0oMCxPLmdldFVuaWNvZGVGb3JHbHlwaCkocyxvKSwtMSE9PWwmJihoPWwpO2JyZWFrO2RlZmF1bHQ6c3dpdGNoKHMpe2Nhc2UiZl9oIjpjYXNlImZfdCI6Y2FzZSJUX2giOnJbbl09cy5yZXBsYWNlQWxsKCJfIiwiIik7Y29udGludWV9fWlmKGg+MCYmaDw9MTExNDExMSYmTnVtYmVyLmlzSW50ZWdlcihoKSl7aWYoaSYmaD09PStuKXtjb25zdCBlPSgwLGMuZ2V0RW5jb2RpbmcpKGkpO2lmKGUmJihzPWVbbl0pKXtyW25dPVN0cmluZy5mcm9tQ2hhckNvZGUob1tzXSk7Y29udGludWV9fXJbbl09U3RyaW5nLmZyb21Db2RlUG9pbnQoaCl9fXJldHVybiByfWFzeW5jIGJ1aWxkVG9Vbmljb2RlKGUpe3ZhciB0O2lmKGUuaGFzSW5jbHVkZWRUb1VuaWNvZGVNYXA9KG51bGw9PT0odD1lLnRvVW5pY29kZSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQubGVuZ3RoKT4wLGUuaGFzSW5jbHVkZWRUb1VuaWNvZGVNYXApcmV0dXJuIWUuY29tcG9zaXRlJiZlLmhhc0VuY29kaW5nJiYoZS5mYWxsYmFja1RvVW5pY29kZT10aGlzLl9zaW1wbGVGb250VG9Vbmljb2RlKGUpKSxlLnRvVW5pY29kZTtpZighZS5jb21wb3NpdGUpcmV0dXJuIG5ldyBkLlRvVW5pY29kZU1hcCh0aGlzLl9zaW1wbGVGb250VG9Vbmljb2RlKGUpKTtpZihlLmNvbXBvc2l0ZSYmKGUuY01hcC5idWlsdEluQ01hcCYmIShlLmNNYXAgaW5zdGFuY2VvZiBhLklkZW50aXR5Q01hcCl8fCJBZG9iZSI9PT1lLmNpZFN5c3RlbUluZm8ucmVnaXN0cnkmJigiR0IxIj09PWUuY2lkU3lzdGVtSW5mby5vcmRlcmluZ3x8IkNOUzEiPT09ZS5jaWRTeXN0ZW1JbmZvLm9yZGVyaW5nfHwiSmFwYW4xIj09PWUuY2lkU3lzdGVtSW5mby5vcmRlcmluZ3x8IktvcmVhMSI9PT1lLmNpZFN5c3RlbUluZm8ub3JkZXJpbmcpKSl7Y29uc3R7cmVnaXN0cnk6dCxvcmRlcmluZzpyfT1lLmNpZFN5c3RlbUluZm8saT1zLk5hbWUuZ2V0KCIiLmNvbmNhdCh0LCItIikuY29uY2F0KHIsIi1VQ1MyIikpLG89YXdhaXQgYS5DTWFwRmFjdG9yeS5jcmVhdGUoe2VuY29kaW5nOmksZmV0Y2hCdWlsdEluQ01hcDp0aGlzLl9mZXRjaEJ1aWx0SW5DTWFwQm91bmQsdXNlQ01hcDpudWxsfSksYz1bXSxsPVtdO3JldHVybiBlLmNNYXAuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXtpZih0PjY1NTM1KXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJNYXggc2l6ZSBvZiBDSUQgaXMgNjUsNTM1Iik7Y29uc3Qgcj1vLmxvb2t1cCh0KTtpZihyKXtsLmxlbmd0aD0wO2ZvcihsZXQgZT0wLHQ9ci5sZW5ndGg7ZTx0O2UrPTIpbC5wdXNoKChyLmNoYXJDb2RlQXQoZSk8PDgpK3IuY2hhckNvZGVBdChlKzEpKTtjW2VdPVN0cmluZy5mcm9tQ2hhckNvZGUoLi4ubCl9fSkpLG5ldyBkLlRvVW5pY29kZU1hcChjKX1yZXR1cm4gbmV3IGQuSWRlbnRpdHlUb1VuaWNvZGVNYXAoZS5maXJzdENoYXIsZS5sYXN0Q2hhcil9cmVhZFRvVW5pY29kZShlKXtyZXR1cm4gZT9lIGluc3RhbmNlb2Ygcy5OYW1lP2EuQ01hcEZhY3RvcnkuY3JlYXRlKHtlbmNvZGluZzplLGZldGNoQnVpbHRJbkNNYXA6dGhpcy5fZmV0Y2hCdWlsdEluQ01hcEJvdW5kLHVzZUNNYXA6bnVsbH0pLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgYS5JZGVudGl0eUNNYXA/bmV3IGQuSWRlbnRpdHlUb1VuaWNvZGVNYXAoMCw2NTUzNSk6bmV3IGQuVG9Vbmljb2RlTWFwKGUuZ2V0TWFwKCkpfSkpOmUgaW5zdGFuY2VvZiBiLkJhc2VTdHJlYW0/YS5DTWFwRmFjdG9yeS5jcmVhdGUoe2VuY29kaW5nOmUsZmV0Y2hCdWlsdEluQ01hcDp0aGlzLl9mZXRjaEJ1aWx0SW5DTWFwQm91bmQsdXNlQ01hcDpudWxsfSkudGhlbigoZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIGEuSWRlbnRpdHlDTWFwKXJldHVybiBuZXcgZC5JZGVudGl0eVRvVW5pY29kZU1hcCgwLDY1NTM1KTtjb25zdCB0PW5ldyBBcnJheShlLmxlbmd0aCk7cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSxyKXtpZigibnVtYmVyIj09dHlwZW9mIHIpcmV0dXJuIHZvaWQodFtlXT1TdHJpbmcuZnJvbUNvZGVQb2ludChyKSk7Y29uc3Qgbj1bXTtmb3IobGV0IGU9MDtlPHIubGVuZ3RoO2UrPTIpe2NvbnN0IHQ9ci5jaGFyQ29kZUF0KGUpPDw4fHIuY2hhckNvZGVBdChlKzEpO2lmKDU1Mjk2IT0oNjM0ODgmdCkpe24ucHVzaCh0KTtjb250aW51ZX1lKz0yO2NvbnN0IGE9ci5jaGFyQ29kZUF0KGUpPDw4fHIuY2hhckNvZGVBdChlKzEpO24ucHVzaCgoKDEwMjMmdCk8PDEwKSsoMTAyMyZhKSs2NTUzNil9dFtlXT1TdHJpbmcuZnJvbUNvZGVQb2ludCguLi5uKX0pKSxuZXcgZC5Ub1VuaWNvZGVNYXAodCl9KSwoZT0+e2lmKGUgaW5zdGFuY2VvZiBuLkFib3J0RXhjZXB0aW9uKXJldHVybiBudWxsO2lmKHRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMpcmV0dXJuKDAsbi53YXJuKSgncmVhZFRvVW5pY29kZSAtIGlnbm9yaW5nIFRvVW5pY29kZSBkYXRhOiAiJy5jb25jYXQoZSwnIi4nKSksbnVsbDt0aHJvdyBlfSkpOlByb21pc2UucmVzb2x2ZShudWxsKTpQcm9taXNlLnJlc29sdmUobnVsbCl9cmVhZENpZFRvR2lkTWFwKGUsdCl7Y29uc3Qgcj1bXTtmb3IobGV0IG49MCxhPWUubGVuZ3RoO248YTtuKyspe2NvbnN0IGE9ZVtuKytdPDw4fGVbbl0saT1uPj4xOygwIT09YXx8dC5oYXMoaSkpJiYocltpXT1hKX1yZXR1cm4gcn1leHRyYWN0V2lkdGhzKGUsdCxyKXtjb25zdCBuPXRoaXMueHJlZjtsZXQgYT1bXSxpPTA7Y29uc3Qgbz1bXTtsZXQgYyxsLGgsdSxkLGYsZyxwO2lmKHIuY29tcG9zaXRlKXtpZihpPWUuaGFzKCJEVyIpP2UuZ2V0KCJEVyIpOjFlMyxwPWUuZ2V0KCJXIikscClmb3IobD0wLGg9cC5sZW5ndGg7bDxoO2wrKylpZihmPW4uZmV0Y2hJZlJlZihwW2wrK10pLGc9bi5mZXRjaElmUmVmKHBbbF0pLEFycmF5LmlzQXJyYXkoZykpZm9yKHU9MCxkPWcubGVuZ3RoO3U8ZDt1KyspYVtmKytdPW4uZmV0Y2hJZlJlZihnW3VdKTtlbHNle2NvbnN0IGU9bi5mZXRjaElmUmVmKHBbKytsXSk7Zm9yKHU9Zjt1PD1nO3UrKylhW3VdPWV9aWYoci52ZXJ0aWNhbCl7bGV0IHQ9ZS5nZXRBcnJheSgiRFcyIil8fFs4ODAsLTFlM107aWYoYz1bdFsxXSwuNSppLHRbMF1dLHQ9ZS5nZXQoIlcyIiksdClmb3IobD0wLGg9dC5sZW5ndGg7bDxoO2wrKylpZihmPW4uZmV0Y2hJZlJlZih0W2wrK10pLGc9bi5mZXRjaElmUmVmKHRbbF0pLEFycmF5LmlzQXJyYXkoZykpZm9yKHU9MCxkPWcubGVuZ3RoO3U8ZDt1Kyspb1tmKytdPVtuLmZldGNoSWZSZWYoZ1t1KytdKSxuLmZldGNoSWZSZWYoZ1t1KytdKSxuLmZldGNoSWZSZWYoZ1t1XSldO2Vsc2V7Y29uc3QgZT1bbi5mZXRjaElmUmVmKHRbKytsXSksbi5mZXRjaElmUmVmKHRbKytsXSksbi5mZXRjaElmUmVmKHRbKytsXSldO2Zvcih1PWY7dTw9Zzt1Kyspb1t1XT1lfX19ZWxzZXtjb25zdCBvPXIuZmlyc3RDaGFyO2lmKHA9ZS5nZXQoIldpZHRocyIpLHApe2Zvcih1PW8sbD0wLGg9cC5sZW5ndGg7bDxoO2wrKylhW3UrK109bi5mZXRjaElmUmVmKHBbbF0pO2k9cGFyc2VGbG9hdCh0LmdldCgiTWlzc2luZ1dpZHRoIikpfHwwfWVsc2V7Y29uc3QgdD1lLmdldCgiQmFzZUZvbnQiKTtpZih0IGluc3RhbmNlb2Ygcy5OYW1lKXtjb25zdCBlPXRoaXMuZ2V0QmFzZUZvbnRNZXRyaWNzKHQubmFtZSk7YT10aGlzLmJ1aWxkQ2hhckNvZGVUb1dpZHRoKGUud2lkdGhzLHIpLGk9ZS5kZWZhdWx0V2lkdGh9fX1sZXQgbT0hMCxiPWk7Zm9yKGNvbnN0IGUgaW4gYSl7Y29uc3QgdD1hW2VdO2lmKHQpaWYoYil7aWYoYiE9PXQpe209ITE7YnJlYWt9fWVsc2UgYj10fW0/ci5mbGFnc3w9eC5Gb250RmxhZ3MuRml4ZWRQaXRjaDpyLmZsYWdzJj1+eC5Gb250RmxhZ3MuRml4ZWRQaXRjaCxyLmRlZmF1bHRXaWR0aD1pLHIud2lkdGhzPWEsci5kZWZhdWx0Vk1ldHJpY3M9YyxyLnZtZXRyaWNzPW99aXNTZXJpZkZvbnQoZSl7Y29uc3QgdD1lLnNwbGl0KCItIilbMF07cmV0dXJuIHQgaW4oMCxsLmdldFNlcmlmRm9udHMpKCl8fC9zZXJpZi9naS50ZXN0KHQpfWdldEJhc2VGb250TWV0cmljcyhlKXtsZXQgdD0wLHI9T2JqZWN0LmNyZWF0ZShudWxsKSxuPSExLGE9KDAsbC5nZXRTdGRGb250TWFwKSgpW2VdfHxlO2NvbnN0IGk9KDAsQy5nZXRNZXRyaWNzKSgpO2EgaW4gaXx8KGE9dGhpcy5pc1NlcmlmRm9udChlKT8iVGltZXMtUm9tYW4iOiJIZWx2ZXRpY2EiKTtjb25zdCBzPWlbYV07cmV0dXJuIm51bWJlciI9PXR5cGVvZiBzPyh0PXMsbj0hMCk6cj1zKCkse2RlZmF1bHRXaWR0aDp0LG1vbm9zcGFjZTpuLHdpZHRoczpyfX1idWlsZENoYXJDb2RlVG9XaWR0aChlLHQpe2NvbnN0IHI9T2JqZWN0LmNyZWF0ZShudWxsKSxuPXQuZGlmZmVyZW5jZXMsYT10LmRlZmF1bHRFbmNvZGluZztmb3IobGV0IHQ9MDt0PDI1Njt0KyspdCBpbiBuJiZlW25bdF1dP3JbdF09ZVtuW3RdXTp0IGluIGEmJmVbYVt0XV0mJihyW3RdPWVbYVt0XV0pO3JldHVybiByfXByZUV2YWx1YXRlRm9udChlKXtjb25zdCB0PWU7bGV0IHI9ZS5nZXQoIlN1YnR5cGUiKTtpZighKHIgaW5zdGFuY2VvZiBzLk5hbWUpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJpbnZhbGlkIGZvbnQgU3VidHlwZSIpO2xldCBhLGksbz0hMTtpZigiVHlwZTAiPT09ci5uYW1lKXtjb25zdCB0PWUuZ2V0KCJEZXNjZW5kYW50Rm9udHMiKTtpZighdCl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiRGVzY2VuZGFudCBmb250cyBhcmUgbm90IHNwZWNpZmllZCIpO2lmKCEoKGU9QXJyYXkuaXNBcnJheSh0KT90aGlzLnhyZWYuZmV0Y2hJZlJlZih0WzBdKTp0KWluc3RhbmNlb2Ygcy5EaWN0KSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiRGVzY2VuZGFudCBmb250IGlzIG5vdCBhIGRpY3Rpb25hcnkuIik7aWYocj1lLmdldCgiU3VidHlwZSIpLCEociBpbnN0YW5jZW9mIHMuTmFtZSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoImludmFsaWQgZm9udCBTdWJ0eXBlIik7bz0hMH1jb25zdCBjPWUuZ2V0KCJGaXJzdENoYXIiKXx8MCxsPWUuZ2V0KCJMYXN0Q2hhciIpfHwobz82NTUzNToyNTUpLGg9ZS5nZXQoIkZvbnREZXNjcmlwdG9yIik7aWYoaCl7YT1uZXcgSS5NdXJtdXJIYXNoM182NDtjb25zdCByPXQuZ2V0UmF3KCJFbmNvZGluZyIpO2lmKHIgaW5zdGFuY2VvZiBzLk5hbWUpYS51cGRhdGUoci5uYW1lKTtlbHNlIGlmKHIgaW5zdGFuY2VvZiBzLlJlZilhLnVwZGF0ZShyLnRvU3RyaW5nKCkpO2Vsc2UgaWYociBpbnN0YW5jZW9mIHMuRGljdClmb3IoY29uc3QgZSBvZiByLmdldFJhd1ZhbHVlcygpKWlmKGUgaW5zdGFuY2VvZiBzLk5hbWUpYS51cGRhdGUoZS5uYW1lKTtlbHNlIGlmKGUgaW5zdGFuY2VvZiBzLlJlZilhLnVwZGF0ZShlLnRvU3RyaW5nKCkpO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShlKSl7Y29uc3QgdD1lLmxlbmd0aCxyPW5ldyBBcnJheSh0KTtmb3IobGV0IG49MDtuPHQ7bisrKXtjb25zdCB0PWVbbl07dCBpbnN0YW5jZW9mIHMuTmFtZT9yW25dPXQubmFtZTooIm51bWJlciI9PXR5cGVvZiB0fHx0IGluc3RhbmNlb2Ygcy5SZWYpJiYocltuXT10LnRvU3RyaW5nKCkpfWEudXBkYXRlKHIuam9pbigpKX1pZihhLnVwZGF0ZSgiIi5jb25jYXQoYywiLSIpLmNvbmNhdChsKSksaT1lLmdldCgiVG9Vbmljb2RlIil8fHQuZ2V0KCJUb1VuaWNvZGUiKSxpIGluc3RhbmNlb2YgYi5CYXNlU3RyZWFtKXtjb25zdCBlPWkuc3RyfHxpLHQ9ZS5idWZmZXI/bmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIuYnVmZmVyLDAsZS5idWZmZXJMZW5ndGgpOm5ldyBVaW50OEFycmF5KGUuYnl0ZXMuYnVmZmVyLGUuc3RhcnQsZS5lbmQtZS5zdGFydCk7YS51cGRhdGUodCl9ZWxzZSBpIGluc3RhbmNlb2Ygcy5OYW1lJiZhLnVwZGF0ZShpLm5hbWUpO2NvbnN0IG49ZS5nZXQoIldpZHRocyIpfHx0LmdldCgiV2lkdGhzIik7aWYoQXJyYXkuaXNBcnJheShuKSl7Y29uc3QgZT1bXTtmb3IoY29uc3QgdCBvZiBuKSgibnVtYmVyIj09dHlwZW9mIHR8fHQgaW5zdGFuY2VvZiBzLlJlZikmJmUucHVzaCh0LnRvU3RyaW5nKCkpO2EudXBkYXRlKGUuam9pbigpKX1pZihvKXthLnVwZGF0ZSgiY29tcG9zaXRlRm9udCIpO2NvbnN0IHI9ZS5nZXQoIlciKXx8dC5nZXQoIlciKTtpZihBcnJheS5pc0FycmF5KHIpKXtjb25zdCBlPVtdO2Zvcihjb25zdCB0IG9mIHIpaWYoIm51bWJlciI9PXR5cGVvZiB0fHx0IGluc3RhbmNlb2Ygcy5SZWYpZS5wdXNoKHQudG9TdHJpbmcoKSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKXtjb25zdCByPVtdO2Zvcihjb25zdCBlIG9mIHQpKCJudW1iZXIiPT10eXBlb2YgZXx8ZSBpbnN0YW5jZW9mIHMuUmVmKSYmci5wdXNoKGUudG9TdHJpbmcoKSk7ZS5wdXNoKCJbIi5jb25jYXQoci5qb2luKCksIl0iKSl9YS51cGRhdGUoZS5qb2luKCkpfWNvbnN0IG49ZS5nZXRSYXcoIkNJRFRvR0lETWFwIil8fHQuZ2V0UmF3KCJDSURUb0dJRE1hcCIpO24gaW5zdGFuY2VvZiBzLk5hbWU/YS51cGRhdGUobi5uYW1lKTpuIGluc3RhbmNlb2Ygcy5SZWY/YS51cGRhdGUobi50b1N0cmluZygpKTpuIGluc3RhbmNlb2YgYi5CYXNlU3RyZWFtJiZhLnVwZGF0ZShuLnBlZWtCeXRlcygpKX19cmV0dXJue2Rlc2NyaXB0b3I6aCxkaWN0OmUsYmFzZURpY3Q6dCxjb21wb3NpdGU6byx0eXBlOnIubmFtZSxmaXJzdENoYXI6YyxsYXN0Q2hhcjpsLHRvVW5pY29kZTppLGhhc2g6YT9hLmhleGRpZ2VzdCgpOiIifX1hc3luYyB0cmFuc2xhdGVGb250KGUpe3ZhciB0LHI7bGV0e2Rlc2NyaXB0b3I6aSxkaWN0OmMsYmFzZURpY3Q6aCxjb21wb3NpdGU6ZCx0eXBlOmYsZmlyc3RDaGFyOmcsbGFzdENoYXI6cCx0b1VuaWNvZGU6Yixjc3NGb250SW5mbzp5fT1lO2NvbnN0IHc9IlR5cGUzIj09PWY7bGV0IHY7aWYoIWkpe2lmKCF3KXtsZXQgZT1jLmdldCgiQmFzZUZvbnQiKTtpZighKGUgaW5zdGFuY2VvZiBzLk5hbWUpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJCYXNlIGZvbnQgaXMgbm90IHNwZWNpZmllZCIpO2U9ZS5uYW1lLnJlcGxhY2VBbGwoL1ssX10vZywiLSIpO2NvbnN0IHQ9dGhpcy5nZXRCYXNlRm9udE1ldHJpY3MoZSkscj1lLnNwbGl0KCItIilbMF0sYT0odGhpcy5pc1NlcmlmRm9udChyKT94LkZvbnRGbGFncy5TZXJpZjowKXwodC5tb25vc3BhY2U/eC5Gb250RmxhZ3MuRml4ZWRQaXRjaDowKXwoKDAsbC5nZXRTeW1ib2xzRm9udHMpKClbcl0/eC5Gb250RmxhZ3MuU3ltYm9saWM6eC5Gb250RmxhZ3MuTm9uc3ltYm9saWMpO3Y9e3R5cGU6ZixuYW1lOmUsbG9hZGVkTmFtZTpoLmxvYWRlZE5hbWUsc3lzdGVtRm9udEluZm86bnVsbCx3aWR0aHM6dC53aWR0aHMsZGVmYXVsdFdpZHRoOnQuZGVmYXVsdFdpZHRoLGlzU2ltdWxhdGVkRmxhZ3M6ITAsZmxhZ3M6YSxmaXJzdENoYXI6ZyxsYXN0Q2hhcjpwLHRvVW5pY29kZTpiLHhIZWlnaHQ6MCxjYXBIZWlnaHQ6MCxpdGFsaWNBbmdsZTowLGlzVHlwZTNGb250Ond9O2NvbnN0IGk9Yy5nZXQoIldpZHRocyIpLHU9KDAsbC5nZXRTdGFuZGFyZEZvbnROYW1lKShlKTtsZXQgZD1udWxsO3JldHVybiB1JiYoZD1hd2FpdCB0aGlzLmZldGNoU3RhbmRhcmRGb250RGF0YSh1KSx2LmlzSW50ZXJuYWxGb250PSEhZCksIXYuaXNJbnRlcm5hbEZvbnQmJnRoaXMub3B0aW9ucy51c2VTeXN0ZW1Gb250cyYmKHYuc3lzdGVtRm9udEluZm89KDAsUy5nZXRGb250U3Vic3RpdHV0aW9uKSh0aGlzLnN5c3RlbUZvbnRDYWNoZSx0aGlzLmlkRmFjdG9yeSx0aGlzLm9wdGlvbnMuc3RhbmRhcmRGb250RGF0YVVybCxlLHUpKSx0aGlzLmV4dHJhY3REYXRhU3RydWN0dXJlcyhjLGMsdikudGhlbigocj0+e2lmKGkpe2NvbnN0IGU9W107bGV0IHQ9Zztmb3IoY29uc3QgciBvZiBpKWVbdCsrXT10aGlzLnhyZWYuZmV0Y2hJZlJlZihyKTtyLndpZHRocz1lfWVsc2Ugci53aWR0aHM9dGhpcy5idWlsZENoYXJDb2RlVG9XaWR0aCh0LndpZHRocyxyKTtyZXR1cm4gbmV3IG8uRm9udChlLGQscil9KSl9aT1uZXcgcy5EaWN0KG51bGwpLGkuc2V0KCJGb250TmFtZSIscy5OYW1lLmdldChmKSksaS5zZXQoIkZvbnRCQm94IixjLmdldEFycmF5KCJGb250QkJveCIpfHxbMCwwLDAsMF0pfWxldCBBPWkuZ2V0KCJGb250TmFtZSIpLGs9Yy5nZXQoIkJhc2VGb250Iik7InN0cmluZyI9PXR5cGVvZiBBJiYoQT1zLk5hbWUuZ2V0KEEpKSwic3RyaW5nIj09dHlwZW9mIGsmJihrPXMuTmFtZS5nZXQoaykpO2NvbnN0IEM9bnVsbD09PSh0PUEpfHx2b2lkIDA9PT10P3ZvaWQgMDp0Lm5hbWUsTz1udWxsPT09KHI9ayl8fHZvaWQgMD09PXI/dm9pZCAwOnIubmFtZTtpZih3fHxDPT09T3x8KCgwLG4uaW5mbykoIlRoZSBGb250RGVzY3JpcHRvcidzIEZvbnROYW1lIGlzIFwiIi5jb25jYXQoQywnIiBidXQgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBGb250XCdzIEJhc2VGb250ICInKS5jb25jYXQoTywnIi4nKSksQyYmTyYmKE8uc3RhcnRzV2l0aChDKXx8ISgwLGwuaXNLbm93bkZvbnROYW1lKShDKSYmKDAsbC5pc0tub3duRm9udE5hbWUpKE8pKSYmKEE9bnVsbCkpLEF8fChBPWspLCEoQSBpbnN0YW5jZW9mIHMuTmFtZSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoImludmFsaWQgZm9udCBuYW1lIik7bGV0IEYsSSxULE0sRTt0cnl7Rj1pLmdldCgiRm9udEZpbGUiLCJGb250RmlsZTIiLCJGb250RmlsZTMiKX1jYXRjaChlKXtpZighdGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlOygwLG4ud2FybikoJ3RyYW5zbGF0ZUZvbnQgLSBmZXRjaGluZyAiJy5jb25jYXQoQS5uYW1lLCciIGZvbnQgZmlsZTogIicpLmNvbmNhdChlLCciLicpKSxGPW5ldyBtLk51bGxTdHJlYW19bGV0IFA9ITEsUj1udWxsLE49bnVsbDtpZihGKXtpZihGLmRpY3Qpe2NvbnN0IGU9Ri5kaWN0LmdldCgiU3VidHlwZSIpO2UgaW5zdGFuY2VvZiBzLk5hbWUmJihJPWUubmFtZSksVD1GLmRpY3QuZ2V0KCJMZW5ndGgxIiksTT1GLmRpY3QuZ2V0KCJMZW5ndGgyIiksRT1GLmRpY3QuZ2V0KCJMZW5ndGgzIil9fWVsc2UgaWYoeSl7Y29uc3QgZT0oMCx1LmdldFhmYUZvbnROYW1lKShBLm5hbWUpO2UmJih5LmZvbnRGYW1pbHk9IiIuY29uY2F0KHkuZm9udEZhbWlseSwiLVBkZkpTLVhGQSIpLHkubWV0cmljcz1lLm1ldHJpY3N8fG51bGwsUj1lLmZhY3RvcnN8fG51bGwsRj1hd2FpdCB0aGlzLmZldGNoU3RhbmRhcmRGb250RGF0YShlLm5hbWUpLFA9ISFGLGg9Yz0oMCx1LmdldFhmYUZvbnREaWN0KShBLm5hbWUpLGQ9ITApfWVsc2UgaWYoIXcpe2NvbnN0IGU9KDAsbC5nZXRTdGFuZGFyZEZvbnROYW1lKShBLm5hbWUpO2UmJihGPWF3YWl0IHRoaXMuZmV0Y2hTdGFuZGFyZEZvbnREYXRhKGUpLFA9ISFGKSwhUCYmdGhpcy5vcHRpb25zLnVzZVN5c3RlbUZvbnRzJiYoTj0oMCxTLmdldEZvbnRTdWJzdGl0dXRpb24pKHRoaXMuc3lzdGVtRm9udENhY2hlLHRoaXMuaWRGYWN0b3J5LHRoaXMub3B0aW9ucy5zdGFuZGFyZEZvbnREYXRhVXJsLEEubmFtZSxlKSl9aWYodj17dHlwZTpmLG5hbWU6QS5uYW1lLHN1YnR5cGU6SSxmaWxlOkYsbGVuZ3RoMTpULGxlbmd0aDI6TSxsZW5ndGgzOkUsaXNJbnRlcm5hbEZvbnQ6UCxsb2FkZWROYW1lOmgubG9hZGVkTmFtZSxjb21wb3NpdGU6ZCxmaXhlZFBpdGNoOiExLGZvbnRNYXRyaXg6Yy5nZXRBcnJheSgiRm9udE1hdHJpeCIpfHxuLkZPTlRfSURFTlRJVFlfTUFUUklYLGZpcnN0Q2hhcjpnLGxhc3RDaGFyOnAsdG9Vbmljb2RlOmIsYmJveDppLmdldEFycmF5KCJGb250QkJveCIpfHxjLmdldEFycmF5KCJGb250QkJveCIpLGFzY2VudDppLmdldCgiQXNjZW50IiksZGVzY2VudDppLmdldCgiRGVzY2VudCIpLHhIZWlnaHQ6aS5nZXQoIlhIZWlnaHQiKXx8MCxjYXBIZWlnaHQ6aS5nZXQoIkNhcEhlaWdodCIpfHwwLGZsYWdzOmkuZ2V0KCJGbGFncyIpLGl0YWxpY0FuZ2xlOmkuZ2V0KCJJdGFsaWNBbmdsZSIpfHwwLGlzVHlwZTNGb250OncsY3NzRm9udEluZm86eSxzY2FsZUZhY3RvcnM6UixzeXN0ZW1Gb250SW5mbzpOfSxkKXtjb25zdCBlPWguZ2V0KCJFbmNvZGluZyIpO2UgaW5zdGFuY2VvZiBzLk5hbWUmJih2LmNpZEVuY29kaW5nPWUubmFtZSk7Y29uc3QgdD1hd2FpdCBhLkNNYXBGYWN0b3J5LmNyZWF0ZSh7ZW5jb2Rpbmc6ZSxmZXRjaEJ1aWx0SW5DTWFwOnRoaXMuX2ZldGNoQnVpbHRJbkNNYXBCb3VuZCx1c2VDTWFwOm51bGx9KTt2LmNNYXA9dCx2LnZlcnRpY2FsPXYuY01hcC52ZXJ0aWNhbH1yZXR1cm4gdGhpcy5leHRyYWN0RGF0YVN0cnVjdHVyZXMoYyxoLHYpLnRoZW4oKGU9Pih0aGlzLmV4dHJhY3RXaWR0aHMoYyxpLGUpLG5ldyBvLkZvbnQoQS5uYW1lLEYsZSkpKSl9c3RhdGljIGJ1aWxkRm9udFBhdGhzKGUsdCxyLGEpe2Z1bmN0aW9uIGkodCl7Y29uc3QgaT0iIi5jb25jYXQoZS5sb2FkZWROYW1lLCJfcGF0aF8iKS5jb25jYXQodCk7dHJ5e2lmKGUucmVuZGVyZXIuaGFzQnVpbHRQYXRoKHQpKXJldHVybjtyLnNlbmQoImNvbW1vbm9iaiIsW2ksIkZvbnRQYXRoIixlLnJlbmRlcmVyLmdldFBhdGhKcyh0KV0pfWNhdGNoKGUpe2lmKGEuaWdub3JlRXJyb3JzKXJldHVybiB2b2lkKDAsbi53YXJuKSgiYnVpbGRGb250UGF0aHMgLSBpZ25vcmluZyAiLmNvbmNhdChpLCcgZ2x5cGg6ICInKS5jb25jYXQoZSwnIi4nKSk7dGhyb3cgZX19Zm9yKGNvbnN0IGUgb2YgdCl7aShlLmZvbnRDaGFyKTtjb25zdCB0PWUuYWNjZW50OyhudWxsPT10P3ZvaWQgMDp0LmZvbnRDaGFyKSYmaSh0LmZvbnRDaGFyKX19c3RhdGljIGdldCBmYWxsYmFja0ZvbnREaWN0KCl7Y29uc3QgZT1uZXcgcy5EaWN0O3JldHVybiBlLnNldCgiQmFzZUZvbnQiLHMuTmFtZS5nZXQoIkhlbHZldGljYSIpKSxlLnNldCgiVHlwZSIscy5OYW1lLmdldCgiRmFsbGJhY2tUeXBlIikpLGUuc2V0KCJTdWJ0eXBlIixzLk5hbWUuZ2V0KCJGYWxsYmFja1R5cGUiKSksZS5zZXQoIkVuY29kaW5nIixzLk5hbWUuZ2V0KCJXaW5BbnNpRW5jb2RpbmciKSksKDAsbi5zaGFkb3cpKHRoaXMsImZhbGxiYWNrRm9udERpY3QiLGUpfX10LlBhcnRpYWxFdmFsdWF0b3I9QjtjbGFzcyBMe2NvbnN0cnVjdG9yKGUpe2xldHtsb2FkZWROYW1lOnQsZm9udDpyLGRpY3Q6bixldmFsdWF0b3JPcHRpb25zOmF9PWU7dGhpcy5sb2FkZWROYW1lPXQsdGhpcy5mb250PXIsdGhpcy5kaWN0PW4sdGhpcy5fZXZhbHVhdG9yT3B0aW9ucz1hfHxFLHRoaXMudHlwZTNMb2FkZWQ9bnVsbCx0aGlzLnR5cGUzRGVwZW5kZW5jaWVzPXIuaXNUeXBlM0ZvbnQ/bmV3IFNldDpudWxsLHRoaXMuc2VudD0hMX1zZW5kKGUpe3RoaXMuc2VudHx8KHRoaXMuc2VudD0hMCxlLnNlbmQoImNvbW1vbm9iaiIsW3RoaXMubG9hZGVkTmFtZSwiRm9udCIsdGhpcy5mb250LmV4cG9ydERhdGEodGhpcy5fZXZhbHVhdG9yT3B0aW9ucy5mb250RXh0cmFQcm9wZXJ0aWVzKV0pKX1mYWxsYmFjayhlKXt0aGlzLmZvbnQuZGF0YSYmKHRoaXMuZm9udC5kaXNhYmxlRm9udEZhY2U9ITAsQi5idWlsZEZvbnRQYXRocyh0aGlzLmZvbnQsdGhpcy5mb250LmdseXBoQ2FjaGVWYWx1ZXMsZSx0aGlzLl9ldmFsdWF0b3JPcHRpb25zKSl9bG9hZFR5cGUzRGF0YShlLHQscil7aWYodGhpcy50eXBlM0xvYWRlZClyZXR1cm4gdGhpcy50eXBlM0xvYWRlZDtpZighdGhpcy5mb250LmlzVHlwZTNGb250KXRocm93IG5ldyBFcnJvcigiTXVzdCBiZSBhIFR5cGUzIGZvbnQuIik7Y29uc3QgYT1lLmNsb25lKHtpZ25vcmVFcnJvcnM6ITF9KTthLnBhcnNpbmdUeXBlM0ZvbnQ9ITA7Y29uc3QgaT1uZXcgcy5SZWZTZXQoZS50eXBlM0ZvbnRSZWZzKTt0aGlzLmRpY3Qub2JqSWQmJiFpLmhhcyh0aGlzLmRpY3Qub2JqSWQpJiZpLnB1dCh0aGlzLmRpY3Qub2JqSWQpLGEudHlwZTNGb250UmVmcz1pO2NvbnN0IG89dGhpcy5mb250LGM9dGhpcy50eXBlM0RlcGVuZGVuY2llcztsZXQgbD1Qcm9taXNlLnJlc29sdmUoKTtjb25zdCBoPXRoaXMuZGljdC5nZXQoIkNoYXJQcm9jcyIpLHU9dGhpcy5kaWN0LmdldCgiUmVzb3VyY2VzIil8fHQsZD1PYmplY3QuY3JlYXRlKG51bGwpLGY9bi5VdGlsLm5vcm1hbGl6ZVJlY3Qoby5iYm94fHxbMCwwLDAsMF0pLGc9ZlsyXS1mWzBdLHA9ZlszXS1mWzFdLG09TWF0aC5oeXBvdChnLHApO2Zvcihjb25zdCBlIG9mIGguZ2V0S2V5cygpKWw9bC50aGVuKCgoKT0+e2NvbnN0IHQ9aC5nZXQoZSksaT1uZXcgVC5PcGVyYXRvckxpc3Q7cmV0dXJuIGEuZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06dCx0YXNrOnIscmVzb3VyY2VzOnUsb3BlcmF0b3JMaXN0Oml9KS50aGVuKCgoKT0+e2kuZm5BcnJheVswXT09PW4uT1BTLnNldENoYXJXaWR0aEFuZEJvdW5kcyYmdGhpcy5fcmVtb3ZlVHlwZTNDb2xvck9wZXJhdG9ycyhpLG0pLGRbZV09aS5nZXRJUigpO2Zvcihjb25zdCBlIG9mIGkuZGVwZW5kZW5jaWVzKWMuYWRkKGUpfSkpLmNhdGNoKChmdW5jdGlvbih0KXsoMCxuLndhcm4pKCdUeXBlMyBmb250IHJlc291cmNlICInLmNvbmNhdChlLCciIGlzIG5vdCBhdmFpbGFibGUuJykpO2NvbnN0IHI9bmV3IFQuT3BlcmF0b3JMaXN0O2RbZV09ci5nZXRJUigpfSkpfSkpO3JldHVybiB0aGlzLnR5cGUzTG9hZGVkPWwudGhlbigoKCk9PntvLmNoYXJQcm9jT3BlcmF0b3JMaXN0PWQsdGhpcy5fYmJveCYmKG8uaXNDaGFyQkJveD0hMCxvLmJib3g9dGhpcy5fYmJveCl9KSksdGhpcy50eXBlM0xvYWRlZH1fcmVtb3ZlVHlwZTNDb2xvck9wZXJhdG9ycyhlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06TmFOO2NvbnN0IHI9bi5VdGlsLm5vcm1hbGl6ZVJlY3QoZS5hcmdzQXJyYXlbMF0uc2xpY2UoMikpLGE9clsyXS1yWzBdLGk9clszXS1yWzFdLHM9TWF0aC5oeXBvdChhLGkpOzA9PT1hfHwwPT09aT8oZS5mbkFycmF5LnNwbGljZSgwLDEpLGUuYXJnc0FycmF5LnNwbGljZSgwLDEpKTooMD09PXR8fE1hdGgucm91bmQocy90KT49MTApJiYodGhpcy5fYmJveHx8KHRoaXMuX2Jib3g9WzEvMCwxLzAsLTEvMCwtMS8wXSksdGhpcy5fYmJveFswXT1NYXRoLm1pbih0aGlzLl9iYm94WzBdLHJbMF0pLHRoaXMuX2Jib3hbMV09TWF0aC5taW4odGhpcy5fYmJveFsxXSxyWzFdKSx0aGlzLl9iYm94WzJdPU1hdGgubWF4KHRoaXMuX2Jib3hbMl0sclsyXSksdGhpcy5fYmJveFszXT1NYXRoLm1heCh0aGlzLl9iYm94WzNdLHJbM10pKTtsZXQgbz0wLGM9ZS5sZW5ndGg7Zm9yKDtvPGM7KXtzd2l0Y2goZS5mbkFycmF5W29dKXtjYXNlIG4uT1BTLnNldENoYXJXaWR0aEFuZEJvdW5kczpicmVhaztjYXNlIG4uT1BTLnNldFN0cm9rZUNvbG9yU3BhY2U6Y2FzZSBuLk9QUy5zZXRGaWxsQ29sb3JTcGFjZTpjYXNlIG4uT1BTLnNldFN0cm9rZUNvbG9yOmNhc2Ugbi5PUFMuc2V0U3Ryb2tlQ29sb3JOOmNhc2Ugbi5PUFMuc2V0RmlsbENvbG9yOmNhc2Ugbi5PUFMuc2V0RmlsbENvbG9yTjpjYXNlIG4uT1BTLnNldFN0cm9rZUdyYXk6Y2FzZSBuLk9QUy5zZXRGaWxsR3JheTpjYXNlIG4uT1BTLnNldFN0cm9rZVJHQkNvbG9yOmNhc2Ugbi5PUFMuc2V0RmlsbFJHQkNvbG9yOmNhc2Ugbi5PUFMuc2V0U3Ryb2tlQ01ZS0NvbG9yOmNhc2Ugbi5PUFMuc2V0RmlsbENNWUtDb2xvcjpjYXNlIG4uT1BTLnNoYWRpbmdGaWxsOmNhc2Ugbi5PUFMuc2V0UmVuZGVyaW5nSW50ZW50OmUuZm5BcnJheS5zcGxpY2UobywxKSxlLmFyZ3NBcnJheS5zcGxpY2UobywxKSxjLS07Y29udGludWU7Y2FzZSBuLk9QUy5zZXRHU3RhdGU6Y29uc3RbdF09ZS5hcmdzQXJyYXlbb107bGV0IHI9MCxhPXQubGVuZ3RoO2Zvcig7cjxhOyl7Y29uc3RbZV09dFtyXTtzd2l0Y2goZSl7Y2FzZSJUUiI6Y2FzZSJUUjIiOmNhc2UiSFQiOmNhc2UiQkciOmNhc2UiQkcyIjpjYXNlIlVDUiI6Y2FzZSJVQ1IyIjp0LnNwbGljZShyLDEpLGEtLTtjb250aW51ZX1yKyt9fW8rK319fWNsYXNzIF97Y29uc3RydWN0b3IoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bmV3IFU7dGhpcy5zdGF0ZT1lLHRoaXMuc3RhdGVTdGFjaz1bXX1zYXZlKCl7Y29uc3QgZT10aGlzLnN0YXRlO3RoaXMuc3RhdGVTdGFjay5wdXNoKHRoaXMuc3RhdGUpLHRoaXMuc3RhdGU9ZS5jbG9uZSgpfXJlc3RvcmUoKXtjb25zdCBlPXRoaXMuc3RhdGVTdGFjay5wb3AoKTtlJiYodGhpcy5zdGF0ZT1lKX10cmFuc2Zvcm0oZSl7dGhpcy5zdGF0ZS5jdG09bi5VdGlsLnRyYW5zZm9ybSh0aGlzLnN0YXRlLmN0bSxlKX19Y2xhc3Mgantjb25zdHJ1Y3Rvcigpe3RoaXMuY3RtPW5ldyBGbG9hdDMyQXJyYXkobi5JREVOVElUWV9NQVRSSVgpLHRoaXMuZm9udE5hbWU9bnVsbCx0aGlzLmZvbnRTaXplPTAsdGhpcy5sb2FkZWROYW1lPW51bGwsdGhpcy5mb250PW51bGwsdGhpcy5mb250TWF0cml4PW4uRk9OVF9JREVOVElUWV9NQVRSSVgsdGhpcy50ZXh0TWF0cml4PW4uSURFTlRJVFlfTUFUUklYLnNsaWNlKCksdGhpcy50ZXh0TGluZU1hdHJpeD1uLklERU5USVRZX01BVFJJWC5zbGljZSgpLHRoaXMuY2hhclNwYWNpbmc9MCx0aGlzLndvcmRTcGFjaW5nPTAsdGhpcy5sZWFkaW5nPTAsdGhpcy50ZXh0SFNjYWxlPTEsdGhpcy50ZXh0UmlzZT0wfXNldFRleHRNYXRyaXgoZSx0LHIsbixhLGkpe2NvbnN0IHM9dGhpcy50ZXh0TWF0cml4O3NbMF09ZSxzWzFdPXQsc1syXT1yLHNbM109bixzWzRdPWEsc1s1XT1pfXNldFRleHRMaW5lTWF0cml4KGUsdCxyLG4sYSxpKXtjb25zdCBzPXRoaXMudGV4dExpbmVNYXRyaXg7c1swXT1lLHNbMV09dCxzWzJdPXIsc1szXT1uLHNbNF09YSxzWzVdPWl9dHJhbnNsYXRlVGV4dE1hdHJpeChlLHQpe2NvbnN0IHI9dGhpcy50ZXh0TWF0cml4O3JbNF09clswXSplK3JbMl0qdCtyWzRdLHJbNV09clsxXSplK3JbM10qdCtyWzVdfXRyYW5zbGF0ZVRleHRMaW5lTWF0cml4KGUsdCl7Y29uc3Qgcj10aGlzLnRleHRMaW5lTWF0cml4O3JbNF09clswXSplK3JbMl0qdCtyWzRdLHJbNV09clsxXSplK3JbM10qdCtyWzVdfWNhcnJpYWdlUmV0dXJuKCl7dGhpcy50cmFuc2xhdGVUZXh0TGluZU1hdHJpeCgwLC10aGlzLmxlYWRpbmcpLHRoaXMudGV4dE1hdHJpeD10aGlzLnRleHRMaW5lTWF0cml4LnNsaWNlKCl9Y2xvbmUoKXtjb25zdCBlPU9iamVjdC5jcmVhdGUodGhpcyk7cmV0dXJuIGUudGV4dE1hdHJpeD10aGlzLnRleHRNYXRyaXguc2xpY2UoKSxlLnRleHRMaW5lTWF0cml4PXRoaXMudGV4dExpbmVNYXRyaXguc2xpY2UoKSxlLmZvbnRNYXRyaXg9dGhpcy5mb250TWF0cml4LnNsaWNlKCksZX19Y2xhc3MgVXtjb25zdHJ1Y3Rvcigpe3RoaXMuY3RtPW5ldyBGbG9hdDMyQXJyYXkobi5JREVOVElUWV9NQVRSSVgpLHRoaXMuZm9udD1udWxsLHRoaXMudGV4dFJlbmRlcmluZ01vZGU9bi5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMLHRoaXMuZmlsbENvbG9yU3BhY2U9dy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheSx0aGlzLnN0cm9rZUNvbG9yU3BhY2U9dy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheX1jbG9uZSgpe3JldHVybiBPYmplY3QuY3JlYXRlKHRoaXMpfX1jbGFzcyAke3N0YXRpYyBnZXQgb3BNYXAoKXtjb25zdCBlPSgwLGsuZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS53PXtpZDpuLk9QUy5zZXRMaW5lV2lkdGgsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZS5KPXtpZDpuLk9QUy5zZXRMaW5lQ2FwLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuaj17aWQ6bi5PUFMuc2V0TGluZUpvaW4sbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZS5NPXtpZDpuLk9QUy5zZXRNaXRlckxpbWl0LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuZD17aWQ6bi5PUFMuc2V0RGFzaCxudW1BcmdzOjIsdmFyaWFibGVBcmdzOiExfSxlLnJpPXtpZDpuLk9QUy5zZXRSZW5kZXJpbmdJbnRlbnQsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZS5pPXtpZDpuLk9QUy5zZXRGbGF0bmVzcyxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLmdzPXtpZDpuLk9QUy5zZXRHU3RhdGUsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZS5xPXtpZDpuLk9QUy5zYXZlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGUuUT17aWQ6bi5PUFMucmVzdG9yZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLmNtPXtpZDpuLk9QUy50cmFuc2Zvcm0sbnVtQXJnczo2LHZhcmlhYmxlQXJnczohMX0sZS5tPXtpZDpuLk9QUy5tb3ZlVG8sbnVtQXJnczoyLHZhcmlhYmxlQXJnczohMX0sZS5sPXtpZDpuLk9QUy5saW5lVG8sbnVtQXJnczoyLHZhcmlhYmxlQXJnczohMX0sZS5jPXtpZDpuLk9QUy5jdXJ2ZVRvLG51bUFyZ3M6Nix2YXJpYWJsZUFyZ3M6ITF9LGUudj17aWQ6bi5PUFMuY3VydmVUbzIsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMX0sZS55PXtpZDpuLk9QUy5jdXJ2ZVRvMyxudW1BcmdzOjQsdmFyaWFibGVBcmdzOiExfSxlLmg9e2lkOm4uT1BTLmNsb3NlUGF0aCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLnJlPXtpZDpuLk9QUy5yZWN0YW5nbGUsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMX0sZS5TPXtpZDpuLk9QUy5zdHJva2UsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5zPXtpZDpuLk9QUy5jbG9zZVN0cm9rZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLmY9e2lkOm4uT1BTLmZpbGwsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5GPXtpZDpuLk9QUy5maWxsLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGVbImYqIl09e2lkOm4uT1BTLmVvRmlsbCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLkI9e2lkOm4uT1BTLmZpbGxTdHJva2UsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZVsiQioiXT17aWQ6bi5PUFMuZW9GaWxsU3Ryb2tlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGUuYj17aWQ6bi5PUFMuY2xvc2VGaWxsU3Ryb2tlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGVbImIqIl09e2lkOm4uT1BTLmNsb3NlRU9GaWxsU3Ryb2tlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGUubj17aWQ6bi5PUFMuZW5kUGF0aCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLlc9e2lkOm4uT1BTLmNsaXAsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZVsiVyoiXT17aWQ6bi5PUFMuZW9DbGlwLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGUuQlQ9e2lkOm4uT1BTLmJlZ2luVGV4dCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLkVUPXtpZDpuLk9QUy5lbmRUZXh0LG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGUuVGM9e2lkOm4uT1BTLnNldENoYXJTcGFjaW5nLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuVHc9e2lkOm4uT1BTLnNldFdvcmRTcGFjaW5nLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuVHo9e2lkOm4uT1BTLnNldEhTY2FsZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLlRMPXtpZDpuLk9QUy5zZXRMZWFkaW5nLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuVGY9e2lkOm4uT1BTLnNldEZvbnQsbnVtQXJnczoyLHZhcmlhYmxlQXJnczohMX0sZS5Ucj17aWQ6bi5PUFMuc2V0VGV4dFJlbmRlcmluZ01vZGUsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZS5Ucz17aWQ6bi5PUFMuc2V0VGV4dFJpc2UsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZS5UZD17aWQ6bi5PUFMubW92ZVRleHQsbnVtQXJnczoyLHZhcmlhYmxlQXJnczohMX0sZS5URD17aWQ6bi5PUFMuc2V0TGVhZGluZ01vdmVUZXh0LG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGUuVG09e2lkOm4uT1BTLnNldFRleHRNYXRyaXgsbnVtQXJnczo2LHZhcmlhYmxlQXJnczohMX0sZVsiVCoiXT17aWQ6bi5PUFMubmV4dExpbmUsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5Uaj17aWQ6bi5PUFMuc2hvd1RleHQsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZS5USj17aWQ6bi5PUFMuc2hvd1NwYWNlZFRleHQsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZVsiJyJdPXtpZDpuLk9QUy5uZXh0TGluZVNob3dUZXh0LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGVbJyInXT17aWQ6bi5PUFMubmV4dExpbmVTZXRTcGFjaW5nU2hvd1RleHQsbnVtQXJnczozLHZhcmlhYmxlQXJnczohMX0sZS5kMD17aWQ6bi5PUFMuc2V0Q2hhcldpZHRoLG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGUuZDE9e2lkOm4uT1BTLnNldENoYXJXaWR0aEFuZEJvdW5kcyxudW1BcmdzOjYsdmFyaWFibGVBcmdzOiExfSxlLkNTPXtpZDpuLk9QUy5zZXRTdHJva2VDb2xvclNwYWNlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuY3M9e2lkOm4uT1BTLnNldEZpbGxDb2xvclNwYWNlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuU0M9e2lkOm4uT1BTLnNldFN0cm9rZUNvbG9yLG51bUFyZ3M6NCx2YXJpYWJsZUFyZ3M6ITB9LGUuU0NOPXtpZDpuLk9QUy5zZXRTdHJva2VDb2xvck4sbnVtQXJnczozMyx2YXJpYWJsZUFyZ3M6ITB9LGUuc2M9e2lkOm4uT1BTLnNldEZpbGxDb2xvcixudW1BcmdzOjQsdmFyaWFibGVBcmdzOiEwfSxlLnNjbj17aWQ6bi5PUFMuc2V0RmlsbENvbG9yTixudW1BcmdzOjMzLHZhcmlhYmxlQXJnczohMH0sZS5HPXtpZDpuLk9QUy5zZXRTdHJva2VHcmF5LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuZz17aWQ6bi5PUFMuc2V0RmlsbEdyYXksbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZS5SRz17aWQ6bi5PUFMuc2V0U3Ryb2tlUkdCQ29sb3IsbnVtQXJnczozLHZhcmlhYmxlQXJnczohMX0sZS5yZz17aWQ6bi5PUFMuc2V0RmlsbFJHQkNvbG9yLG51bUFyZ3M6Myx2YXJpYWJsZUFyZ3M6ITF9LGUuSz17aWQ6bi5PUFMuc2V0U3Ryb2tlQ01ZS0NvbG9yLG51bUFyZ3M6NCx2YXJpYWJsZUFyZ3M6ITF9LGUuaz17aWQ6bi5PUFMuc2V0RmlsbENNWUtDb2xvcixudW1BcmdzOjQsdmFyaWFibGVBcmdzOiExfSxlLnNoPXtpZDpuLk9QUy5zaGFkaW5nRmlsbCxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLkJJPXtpZDpuLk9QUy5iZWdpbklubGluZUltYWdlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGUuSUQ9e2lkOm4uT1BTLmJlZ2luSW1hZ2VEYXRhLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGUuRUk9e2lkOm4uT1BTLmVuZElubGluZUltYWdlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuRG89e2lkOm4uT1BTLnBhaW50WE9iamVjdCxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLk1QPXtpZDpuLk9QUy5tYXJrUG9pbnQsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZS5EUD17aWQ6bi5PUFMubWFya1BvaW50UHJvcHMsbnVtQXJnczoyLHZhcmlhYmxlQXJnczohMX0sZS5CTUM9e2lkOm4uT1BTLmJlZ2luTWFya2VkQ29udGVudCxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLkJEQz17aWQ6bi5PUFMuYmVnaW5NYXJrZWRDb250ZW50UHJvcHMsbnVtQXJnczoyLHZhcmlhYmxlQXJnczohMX0sZS5FTUM9e2lkOm4uT1BTLmVuZE1hcmtlZENvbnRlbnQsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5CWD17aWQ6bi5PUFMuYmVnaW5Db21wYXQsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5FWD17aWQ6bi5PUFMuZW5kQ29tcGF0LG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGUuQk09bnVsbCxlLkJEPW51bGwsZS50cnVlPW51bGwsZS5mYT1udWxsLGUuZmFsPW51bGwsZS5mYWxzPW51bGwsZS5mYWxzZT1udWxsLGUubnU9bnVsbCxlLm51bD1udWxsLGUubnVsbD1udWxsfSkpO3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJvcE1hcCIsZSgpKX1jb25zdHJ1Y3RvcihlLHQpe2xldCByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpuZXcgXzt0aGlzLnBhcnNlcj1uZXcgZy5QYXJzZXIoe2xleGVyOm5ldyBnLkxleGVyKGUsJC5vcE1hcCkseHJlZjp0fSksdGhpcy5zdGF0ZU1hbmFnZXI9cix0aGlzLm5vblByb2Nlc3NlZEFyZ3M9W10sdGhpcy5faXNQYXRoT3A9ITEsdGhpcy5fbnVtSW52YWxpZFBhdGhPUFM9MH1nZXQgc2F2ZWRTdGF0ZXNEZXB0aCgpe3JldHVybiB0aGlzLnN0YXRlTWFuYWdlci5zdGF0ZVN0YWNrLmxlbmd0aH1yZWFkKGUpe2xldCB0PWUuYXJncztmb3IoOzspe2NvbnN0IHI9dGhpcy5wYXJzZXIuZ2V0T2JqKCk7aWYociBpbnN0YW5jZW9mIHMuQ21kKXtjb25zdCBhPXIuY21kLGk9JC5vcE1hcFthXTtpZighaSl7KDAsbi53YXJuKSgnVW5rbm93biBjb21tYW5kICInLmNvbmNhdChhLCciLicpKTtjb250aW51ZX1jb25zdCBzPWkuaWQsbz1pLm51bUFyZ3M7bGV0IGM9bnVsbCE9PXQ/dC5sZW5ndGg6MDtpZih0aGlzLl9pc1BhdGhPcHx8KHRoaXMuX251bUludmFsaWRQYXRoT1BTPTApLHRoaXMuX2lzUGF0aE9wPXM+PW4uT1BTLm1vdmVUbyYmczw9bi5PUFMuZW5kUGF0aCxpLnZhcmlhYmxlQXJncyljPm8mJigwLG4uaW5mbykoIkNvbW1hbmQgIi5jb25jYXQoYSwiOiBleHBlY3RlZCBbMCwgIikuY29uY2F0KG8sIl0gYXJncywgYnV0IHJlY2VpdmVkICIpLmNvbmNhdChjLCIgYXJncy4iKSk7ZWxzZXtpZihjIT09byl7Y29uc3QgZT10aGlzLm5vblByb2Nlc3NlZEFyZ3M7Zm9yKDtjPm87KWUucHVzaCh0LnNoaWZ0KCkpLGMtLTtmb3IoO2M8byYmMCE9PWUubGVuZ3RoOyludWxsPT09dCYmKHQ9W10pLHQudW5zaGlmdChlLnBvcCgpKSxjKyt9aWYoYzxvKXtjb25zdCBlPSJjb21tYW5kICIuY29uY2F0KGEsIjogZXhwZWN0ZWQgIikuY29uY2F0KG8sIiBhcmdzLCBidXQgcmVjZWl2ZWQgIikuY29uY2F0KGMsIiBhcmdzLiIpO2lmKHRoaXMuX2lzUGF0aE9wJiYrK3RoaXMuX251bUludmFsaWRQYXRoT1BTPiQuTUFYX0lOVkFMSURfUEFUSF9PUFMpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgIi5jb25jYXQoZSkpOygwLG4ud2FybikoIlNraXBwaW5nICIuY29uY2F0KGUpKSxudWxsIT09dCYmKHQubGVuZ3RoPTApO2NvbnRpbnVlfX1yZXR1cm4gdGhpcy5wcmVwcm9jZXNzQ29tbWFuZChzLHQpLGUuZm49cyxlLmFyZ3M9dCwhMH1pZihyPT09cy5FT0YpcmV0dXJuITE7aWYobnVsbCE9PXImJihudWxsPT09dCYmKHQ9W10pLHQucHVzaChyKSx0Lmxlbmd0aD4zMykpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlRvbyBtYW55IGFyZ3VtZW50cyIpfX1wcmVwcm9jZXNzQ29tbWFuZChlLHQpe3N3aXRjaCgwfGUpe2Nhc2Ugbi5PUFMuc2F2ZTp0aGlzLnN0YXRlTWFuYWdlci5zYXZlKCk7YnJlYWs7Y2FzZSBuLk9QUy5yZXN0b3JlOnRoaXMuc3RhdGVNYW5hZ2VyLnJlc3RvcmUoKTticmVhaztjYXNlIG4uT1BTLnRyYW5zZm9ybTp0aGlzLnN0YXRlTWFuYWdlci50cmFuc2Zvcm0odCl9fX1pKCQsIk1BWF9JTlZBTElEX1BBVEhfT1BTIiwxMCksdC5FdmFsdWF0b3JQcmVwcm9jZXNzb3I9JH0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LklkZW50aXR5Q01hcD10LkNNYXBGYWN0b3J5PXQuQ01hcD12b2lkIDAscigxMzkpLHIoMik7dmFyIG49cigxNDQpLGE9cigxNTApLGk9cigxNTEpLHM9cigxNjUpLG89cigxNjYpLGM9cigxNDkpLGw9cigxNTQpO2NvbnN0IGg9WyJBZG9iZS1HQjEtVUNTMiIsIkFkb2JlLUNOUzEtVUNTMiIsIkFkb2JlLUphcGFuMS1VQ1MyIiwiQWRvYmUtS29yZWExLVVDUzIiLCI3OC1FVUMtSCIsIjc4LUVVQy1WIiwiNzgtSCIsIjc4LVJLU0otSCIsIjc4LVJLU0otViIsIjc4LVYiLCI3OG1zLVJLU0otSCIsIjc4bXMtUktTSi1WIiwiODNwdi1SS1NKLUgiLCI5MG1zLVJLU0otSCIsIjkwbXMtUktTSi1WIiwiOTBtc3AtUktTSi1IIiwiOTBtc3AtUktTSi1WIiwiOTBwdi1SS1NKLUgiLCI5MHB2LVJLU0otViIsIkFkZC1IIiwiQWRkLVJLU0otSCIsIkFkZC1SS1NKLVYiLCJBZGQtViIsIkFkb2JlLUNOUzEtMCIsIkFkb2JlLUNOUzEtMSIsIkFkb2JlLUNOUzEtMiIsIkFkb2JlLUNOUzEtMyIsIkFkb2JlLUNOUzEtNCIsIkFkb2JlLUNOUzEtNSIsIkFkb2JlLUNOUzEtNiIsIkFkb2JlLUdCMS0wIiwiQWRvYmUtR0IxLTEiLCJBZG9iZS1HQjEtMiIsIkFkb2JlLUdCMS0zIiwiQWRvYmUtR0IxLTQiLCJBZG9iZS1HQjEtNSIsIkFkb2JlLUphcGFuMS0wIiwiQWRvYmUtSmFwYW4xLTEiLCJBZG9iZS1KYXBhbjEtMiIsIkFkb2JlLUphcGFuMS0zIiwiQWRvYmUtSmFwYW4xLTQiLCJBZG9iZS1KYXBhbjEtNSIsIkFkb2JlLUphcGFuMS02IiwiQWRvYmUtS29yZWExLTAiLCJBZG9iZS1Lb3JlYTEtMSIsIkFkb2JlLUtvcmVhMS0yIiwiQjUtSCIsIkI1LVYiLCJCNXBjLUgiLCJCNXBjLVYiLCJDTlMtRVVDLUgiLCJDTlMtRVVDLVYiLCJDTlMxLUgiLCJDTlMxLVYiLCJDTlMyLUgiLCJDTlMyLVYiLCJFVEhLLUI1LUgiLCJFVEhLLUI1LVYiLCJFVGVuLUI1LUgiLCJFVGVuLUI1LVYiLCJFVGVubXMtQjUtSCIsIkVUZW5tcy1CNS1WIiwiRVVDLUgiLCJFVUMtViIsIkV4dC1IIiwiRXh0LVJLU0otSCIsIkV4dC1SS1NKLVYiLCJFeHQtViIsIkdCLUVVQy1IIiwiR0ItRVVDLVYiLCJHQi1IIiwiR0ItViIsIkdCSy1FVUMtSCIsIkdCSy1FVUMtViIsIkdCSzJLLUgiLCJHQksySy1WIiwiR0JLcC1FVUMtSCIsIkdCS3AtRVVDLVYiLCJHQlQtRVVDLUgiLCJHQlQtRVVDLVYiLCJHQlQtSCIsIkdCVC1WIiwiR0JUcGMtRVVDLUgiLCJHQlRwYy1FVUMtViIsIkdCcGMtRVVDLUgiLCJHQnBjLUVVQy1WIiwiSCIsIkhLZGxhLUI1LUgiLCJIS2RsYS1CNS1WIiwiSEtkbGItQjUtSCIsIkhLZGxiLUI1LVYiLCJIS2djY3MtQjUtSCIsIkhLZ2Njcy1CNS1WIiwiSEttMzE0LUI1LUgiLCJIS20zMTQtQjUtViIsIkhLbTQ3MS1CNS1IIiwiSEttNDcxLUI1LVYiLCJIS3Njcy1CNS1IIiwiSEtzY3MtQjUtViIsIkhhbmtha3UiLCJIaXJhZ2FuYSIsIktTQy1FVUMtSCIsIktTQy1FVUMtViIsIktTQy1IIiwiS1NDLUpvaGFiLUgiLCJLU0MtSm9oYWItViIsIktTQy1WIiwiS1NDbXMtVUhDLUgiLCJLU0Ntcy1VSEMtSFctSCIsIktTQ21zLVVIQy1IVy1WIiwiS1NDbXMtVUhDLVYiLCJLU0NwYy1FVUMtSCIsIktTQ3BjLUVVQy1WIiwiS2F0YWthbmEiLCJOV1AtSCIsIk5XUC1WIiwiUktTSi1IIiwiUktTSi1WIiwiUm9tYW4iLCJVbmlDTlMtVUNTMi1IIiwiVW5pQ05TLVVDUzItViIsIlVuaUNOUy1VVEYxNi1IIiwiVW5pQ05TLVVURjE2LVYiLCJVbmlDTlMtVVRGMzItSCIsIlVuaUNOUy1VVEYzMi1WIiwiVW5pQ05TLVVURjgtSCIsIlVuaUNOUy1VVEY4LVYiLCJVbmlHQi1VQ1MyLUgiLCJVbmlHQi1VQ1MyLVYiLCJVbmlHQi1VVEYxNi1IIiwiVW5pR0ItVVRGMTYtViIsIlVuaUdCLVVURjMyLUgiLCJVbmlHQi1VVEYzMi1WIiwiVW5pR0ItVVRGOC1IIiwiVW5pR0ItVVRGOC1WIiwiVW5pSklTLVVDUzItSCIsIlVuaUpJUy1VQ1MyLUhXLUgiLCJVbmlKSVMtVUNTMi1IVy1WIiwiVW5pSklTLVVDUzItViIsIlVuaUpJUy1VVEYxNi1IIiwiVW5pSklTLVVURjE2LVYiLCJVbmlKSVMtVVRGMzItSCIsIlVuaUpJUy1VVEYzMi1WIiwiVW5pSklTLVVURjgtSCIsIlVuaUpJUy1VVEY4LVYiLCJVbmlKSVMyMDA0LVVURjE2LUgiLCJVbmlKSVMyMDA0LVVURjE2LVYiLCJVbmlKSVMyMDA0LVVURjMyLUgiLCJVbmlKSVMyMDA0LVVURjMyLVYiLCJVbmlKSVMyMDA0LVVURjgtSCIsIlVuaUpJUzIwMDQtVVRGOC1WIiwiVW5pSklTUHJvLVVDUzItSFctViIsIlVuaUpJU1Byby1VQ1MyLVYiLCJVbmlKSVNQcm8tVVRGOC1WIiwiVW5pSklTWDAyMTMtVVRGMzItSCIsIlVuaUpJU1gwMjEzLVVURjMyLVYiLCJVbmlKSVNYMDIxMzIwMDQtVVRGMzItSCIsIlVuaUpJU1gwMjEzMjAwNC1VVEYzMi1WIiwiVW5pS1MtVUNTMi1IIiwiVW5pS1MtVUNTMi1WIiwiVW5pS1MtVVRGMTYtSCIsIlVuaUtTLVVURjE2LVYiLCJVbmlLUy1VVEYzMi1IIiwiVW5pS1MtVVRGMzItViIsIlVuaUtTLVVURjgtSCIsIlVuaUtTLVVURjgtViIsIlYiLCJXUC1TeW1ib2wiXSx1PTIqKjI0LTE7Y2xhc3MgZHtjb25zdHJ1Y3Rvcigpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07dGhpcy5jb2Rlc3BhY2VSYW5nZXM9W1tdLFtdLFtdLFtdXSx0aGlzLm51bUNvZGVzcGFjZVJhbmdlcz0wLHRoaXMuX21hcD1bXSx0aGlzLm5hbWU9IiIsdGhpcy52ZXJ0aWNhbD0hMSx0aGlzLnVzZUNNYXA9bnVsbCx0aGlzLmJ1aWx0SW5DTWFwPWV9YWRkQ29kZXNwYWNlUmFuZ2UoZSx0LHIpe3RoaXMuY29kZXNwYWNlUmFuZ2VzW2UtMV0ucHVzaCh0LHIpLHRoaXMubnVtQ29kZXNwYWNlUmFuZ2VzKyt9bWFwQ2lkUmFuZ2UoZSx0LHIpe2lmKHQtZT51KXRocm93IG5ldyBFcnJvcigibWFwQ2lkUmFuZ2UgLSBpZ25vcmluZyBkYXRhIGFib3ZlIE1BWF9NQVBfUkFOR0UuIik7Zm9yKDtlPD10Oyl0aGlzLl9tYXBbZSsrXT1yKyt9bWFwQmZSYW5nZShlLHQscil7aWYodC1lPnUpdGhyb3cgbmV3IEVycm9yKCJtYXBCZlJhbmdlIC0gaWdub3JpbmcgZGF0YSBhYm92ZSBNQVhfTUFQX1JBTkdFLiIpO2NvbnN0IG49ci5sZW5ndGgtMTtmb3IoO2U8PXQ7KXt0aGlzLl9tYXBbZSsrXT1yO2NvbnN0IHQ9ci5jaGFyQ29kZUF0KG4pKzE7cj10PjI1NT9yLnN1YnN0cmluZygwLG4tMSkrU3RyaW5nLmZyb21DaGFyQ29kZShyLmNoYXJDb2RlQXQobi0xKSsxKSsiXDAiOnIuc3Vic3RyaW5nKDAsbikrU3RyaW5nLmZyb21DaGFyQ29kZSh0KX19bWFwQmZSYW5nZVRvQXJyYXkoZSx0LHIpe2lmKHQtZT51KXRocm93IG5ldyBFcnJvcigibWFwQmZSYW5nZVRvQXJyYXkgLSBpZ25vcmluZyBkYXRhIGFib3ZlIE1BWF9NQVBfUkFOR0UuIik7Y29uc3Qgbj1yLmxlbmd0aDtsZXQgYT0wO2Zvcig7ZTw9dCYmYTxuOyl0aGlzLl9tYXBbZV09clthKytdLCsrZX1tYXBPbmUoZSx0KXt0aGlzLl9tYXBbZV09dH1sb29rdXAoZSl7cmV0dXJuIHRoaXMuX21hcFtlXX1jb250YWlucyhlKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fbWFwW2VdfWZvckVhY2goZSl7Y29uc3QgdD10aGlzLl9tYXAscj10Lmxlbmd0aDtpZihyPD02NTUzNilmb3IobGV0IG49MDtuPHI7bisrKXZvaWQgMCE9PXRbbl0mJmUobix0W25dKTtlbHNlIGZvcihjb25zdCByIGluIHQpZShyLHRbcl0pfWNoYXJDb2RlT2YoZSl7Y29uc3QgdD10aGlzLl9tYXA7aWYodC5sZW5ndGg8PTY1NTM2KXJldHVybiB0LmluZGV4T2YoZSk7Zm9yKGNvbnN0IHIgaW4gdClpZih0W3JdPT09ZSlyZXR1cm4gMHxyO3JldHVybi0xfWdldE1hcCgpe3JldHVybiB0aGlzLl9tYXB9cmVhZENoYXJDb2RlKGUsdCxyKXtsZXQgbj0wO2NvbnN0IGE9dGhpcy5jb2Rlc3BhY2VSYW5nZXM7Zm9yKGxldCBpPTAscz1hLmxlbmd0aDtpPHM7aSsrKXtuPShuPDw4fGUuY2hhckNvZGVBdCh0K2kpKT4+PjA7Y29uc3Qgcz1hW2ldO2ZvcihsZXQgZT0wLHQ9cy5sZW5ndGg7ZTx0Oyl7Y29uc3QgdD1zW2UrK10sYT1zW2UrK107aWYobj49dCYmbjw9YSlyZXR1cm4gci5jaGFyY29kZT1uLHZvaWQoci5sZW5ndGg9aSsxKX19ci5jaGFyY29kZT0wLHIubGVuZ3RoPTF9Z2V0Q2hhckNvZGVMZW5ndGgoZSl7Y29uc3QgdD10aGlzLmNvZGVzcGFjZVJhbmdlcztmb3IobGV0IHI9MCxuPXQubGVuZ3RoO3I8bjtyKyspe2NvbnN0IG49dFtyXTtmb3IobGV0IHQ9MCxhPW4ubGVuZ3RoO3Q8YTspe2NvbnN0IGE9blt0KytdLGk9blt0KytdO2lmKGU+PWEmJmU8PWkpcmV0dXJuIHIrMX19cmV0dXJuIDF9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLl9tYXAubGVuZ3RofWdldCBpc0lkZW50aXR5Q01hcCgpe2lmKCJJZGVudGl0eS1IIiE9PXRoaXMubmFtZSYmIklkZW50aXR5LVYiIT09dGhpcy5uYW1lKXJldHVybiExO2lmKDY1NTM2IT09dGhpcy5fbWFwLmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IGU9MDtlPDY1NTM2O2UrKylpZih0aGlzLl9tYXBbZV0hPT1lKXJldHVybiExO3JldHVybiEwfX10LkNNYXA9ZDtjbGFzcyBmIGV4dGVuZHMgZHtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKCksdGhpcy52ZXJ0aWNhbD1lLHRoaXMuYWRkQ29kZXNwYWNlUmFuZ2UodCwwLDY1NTM1KX1tYXBDaWRSYW5nZShlLHQscil7KDAsbi51bnJlYWNoYWJsZSkoInNob3VsZCBub3QgY2FsbCBtYXBDaWRSYW5nZSIpfW1hcEJmUmFuZ2UoZSx0LHIpeygwLG4udW5yZWFjaGFibGUpKCJzaG91bGQgbm90IGNhbGwgbWFwQmZSYW5nZSIpfW1hcEJmUmFuZ2VUb0FycmF5KGUsdCxyKXsoMCxuLnVucmVhY2hhYmxlKSgic2hvdWxkIG5vdCBjYWxsIG1hcEJmUmFuZ2VUb0FycmF5Iil9bWFwT25lKGUsdCl7KDAsbi51bnJlYWNoYWJsZSkoInNob3VsZCBub3QgY2FsbCBtYXBDaWRPbmUiKX1sb29rdXAoZSl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoZSkmJmU8PTY1NTM1P2U6dm9pZCAwfWNvbnRhaW5zKGUpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGUpJiZlPD02NTUzNX1mb3JFYWNoKGUpe2ZvcihsZXQgdD0wO3Q8PTY1NTM1O3QrKyllKHQsdCl9Y2hhckNvZGVPZihlKXtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihlKSYmZTw9NjU1MzU/ZTotMX1nZXRNYXAoKXtjb25zdCBlPW5ldyBBcnJheSg2NTUzNik7Zm9yKGxldCB0PTA7dDw9NjU1MzU7dCsrKWVbdF09dDtyZXR1cm4gZX1nZXQgbGVuZ3RoKCl7cmV0dXJuIDY1NTM2fWdldCBpc0lkZW50aXR5Q01hcCgpeygwLG4udW5yZWFjaGFibGUpKCJzaG91bGQgbm90IGFjY2VzcyAuaXNJZGVudGl0eUNNYXAiKX19ZnVuY3Rpb24gZyhlKXtsZXQgdD0wO2ZvcihsZXQgcj0wO3I8ZS5sZW5ndGg7cisrKXQ9dDw8OHxlLmNoYXJDb2RlQXQocik7cmV0dXJuIHQ+Pj4wfWZ1bmN0aW9uIHAoZSl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJNYWxmb3JtZWQgQ01hcDogZXhwZWN0ZWQgc3RyaW5nLiIpfWZ1bmN0aW9uIG0oZSl7aWYoIU51bWJlci5pc0ludGVnZXIoZSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIk1hbGZvcm1lZCBDTWFwOiBleHBlY3RlZCBpbnQuIil9ZnVuY3Rpb24gYihlLHQpe2Zvcig7Oyl7bGV0IHI9dC5nZXRPYmooKTtpZihyPT09YS5FT0YpYnJlYWs7aWYoKDAsYS5pc0NtZCkociwiZW5kYmZjaGFyIikpcmV0dXJuO3Aocik7Y29uc3Qgbj1nKHIpO3I9dC5nZXRPYmooKSxwKHIpO2NvbnN0IGk9cjtlLm1hcE9uZShuLGkpfX1mdW5jdGlvbiB5KGUsdCl7Zm9yKDs7KXtsZXQgcj10LmdldE9iaigpO2lmKHI9PT1hLkVPRilicmVhaztpZigoMCxhLmlzQ21kKShyLCJlbmRiZnJhbmdlIikpcmV0dXJuO3Aocik7Y29uc3Qgbj1nKHIpO3I9dC5nZXRPYmooKSxwKHIpO2NvbnN0IGk9ZyhyKTtpZihyPXQuZ2V0T2JqKCksTnVtYmVyLmlzSW50ZWdlcihyKXx8InN0cmluZyI9PXR5cGVvZiByKXtjb25zdCB0PU51bWJlci5pc0ludGVnZXIocik/U3RyaW5nLmZyb21DaGFyQ29kZShyKTpyO2UubWFwQmZSYW5nZShuLGksdCl9ZWxzZXtpZighKDAsYS5pc0NtZCkociwiWyIpKWJyZWFrO3tyPXQuZ2V0T2JqKCk7Y29uc3Qgcz1bXTtmb3IoOyEoMCxhLmlzQ21kKShyLCJdIikmJnIhPT1hLkVPRjspcy5wdXNoKHIpLHI9dC5nZXRPYmooKTtlLm1hcEJmUmFuZ2VUb0FycmF5KG4saSxzKX19fXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIGJmIHJhbmdlLiIpfWZ1bmN0aW9uIHcoZSx0KXtmb3IoOzspe2xldCByPXQuZ2V0T2JqKCk7aWYocj09PWEuRU9GKWJyZWFrO2lmKCgwLGEuaXNDbWQpKHIsImVuZGNpZGNoYXIiKSlyZXR1cm47cChyKTtjb25zdCBuPWcocik7cj10LmdldE9iaigpLG0ocik7Y29uc3QgaT1yO2UubWFwT25lKG4saSl9fWZ1bmN0aW9uIHYoZSx0KXtmb3IoOzspe2xldCByPXQuZ2V0T2JqKCk7aWYocj09PWEuRU9GKWJyZWFrO2lmKCgwLGEuaXNDbWQpKHIsImVuZGNpZHJhbmdlIikpcmV0dXJuO3Aocik7Y29uc3Qgbj1nKHIpO3I9dC5nZXRPYmooKSxwKHIpO2NvbnN0IGk9ZyhyKTtyPXQuZ2V0T2JqKCksbShyKTtjb25zdCBzPXI7ZS5tYXBDaWRSYW5nZShuLGkscyl9fWZ1bmN0aW9uIHgoZSx0KXtmb3IoOzspe2xldCByPXQuZ2V0T2JqKCk7aWYocj09PWEuRU9GKWJyZWFrO2lmKCgwLGEuaXNDbWQpKHIsImVuZGNvZGVzcGFjZXJhbmdlIikpcmV0dXJuO2lmKCJzdHJpbmciIT10eXBlb2YgcilicmVhaztjb25zdCBuPWcocik7aWYocj10LmdldE9iaigpLCJzdHJpbmciIT10eXBlb2YgcilicmVhaztjb25zdCBpPWcocik7ZS5hZGRDb2Rlc3BhY2VSYW5nZShyLmxlbmd0aCxuLGkpfXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIGNvZGVzcGFjZSByYW5nZS4iKX1mdW5jdGlvbiBTKGUsdCl7Y29uc3Qgcj10LmdldE9iaigpO051bWJlci5pc0ludGVnZXIocikmJihlLnZlcnRpY2FsPSEhcil9ZnVuY3Rpb24gQShlLHQpe2NvbnN0IHI9dC5nZXRPYmooKTtyIGluc3RhbmNlb2YgYS5OYW1lJiYoZS5uYW1lPXIubmFtZSl9YXN5bmMgZnVuY3Rpb24gayhlLHQscixpKXtsZXQgcyxvO2U6Zm9yKDs7KXRyeXtjb25zdCByPXQuZ2V0T2JqKCk7aWYocj09PWEuRU9GKWJyZWFrO2lmKHIgaW5zdGFuY2VvZiBhLk5hbWUpIldNb2RlIj09PXIubmFtZT9TKGUsdCk6IkNNYXBOYW1lIj09PXIubmFtZSYmQShlLHQpLHM9cjtlbHNlIGlmKHIgaW5zdGFuY2VvZiBhLkNtZClzd2l0Y2goci5jbWQpe2Nhc2UiZW5kY21hcCI6YnJlYWsgZTtjYXNlInVzZWNtYXAiOnMgaW5zdGFuY2VvZiBhLk5hbWUmJihvPXMubmFtZSk7YnJlYWs7Y2FzZSJiZWdpbmNvZGVzcGFjZXJhbmdlIjp4KGUsdCk7YnJlYWs7Y2FzZSJiZWdpbmJmY2hhciI6YihlLHQpO2JyZWFrO2Nhc2UiYmVnaW5jaWRjaGFyIjp3KGUsdCk7YnJlYWs7Y2FzZSJiZWdpbmJmcmFuZ2UiOnkoZSx0KTticmVhaztjYXNlImJlZ2luY2lkcmFuZ2UiOnYoZSx0KX19Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIGMuTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxuLndhcm4pKCJJbnZhbGlkIGNNYXAgZGF0YTogIitlKTtjb250aW51ZX1yZXR1cm4haSYmbyYmKGk9byksaT9DKGUscixpKTplfWFzeW5jIGZ1bmN0aW9uIEMoZSx0LHIpe2lmKGUudXNlQ01hcD1hd2FpdCBPKHIsdCksMD09PWUubnVtQ29kZXNwYWNlUmFuZ2VzKXtjb25zdCB0PWUudXNlQ01hcC5jb2Rlc3BhY2VSYW5nZXM7Zm9yKGxldCByPTA7cjx0Lmxlbmd0aDtyKyspZS5jb2Rlc3BhY2VSYW5nZXNbcl09dFtyXS5zbGljZSgpO2UubnVtQ29kZXNwYWNlUmFuZ2VzPWUudXNlQ01hcC5udW1Db2Rlc3BhY2VSYW5nZXN9cmV0dXJuIGUudXNlQ01hcC5mb3JFYWNoKChmdW5jdGlvbih0LHIpe2UuY29udGFpbnModCl8fGUubWFwT25lKHQsZS51c2VDTWFwLmxvb2t1cCh0KSl9KSksZX1hc3luYyBmdW5jdGlvbiBPKGUsdCl7aWYoIklkZW50aXR5LUgiPT09ZSlyZXR1cm4gbmV3IGYoITEsMik7aWYoIklkZW50aXR5LVYiPT09ZSlyZXR1cm4gbmV3IGYoITAsMik7aWYoIWguaW5jbHVkZXMoZSkpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIENNYXAgbmFtZTogIitlKTtpZighdCl0aHJvdyBuZXcgRXJyb3IoIkJ1aWx0LWluIENNYXAgcGFyYW1ldGVycyBhcmUgbm90IHByb3ZpZGVkLiIpO2NvbnN0e2NNYXBEYXRhOnIsY29tcHJlc3Npb25UeXBlOmF9PWF3YWl0IHQoZSksaT1uZXcgZCghMCk7aWYoYT09PW4uQ01hcENvbXByZXNzaW9uVHlwZS5CSU5BUlkpcmV0dXJuKG5ldyBzLkJpbmFyeUNNYXBSZWFkZXIpLnByb2Nlc3MocixpLChlPT5DKGksdCxlKSkpO2lmKGE9PT1uLkNNYXBDb21wcmVzc2lvblR5cGUuTk9ORSl7Y29uc3QgZT1uZXcgby5MZXhlcihuZXcgbC5TdHJlYW0ocikpO3JldHVybiBrKGksZSx0LG51bGwpfXRocm93IG5ldyBFcnJvcignSW52YWxpZCBDTWFwICJjb21wcmVzc2lvblR5cGUiIHZhbHVlOiAnLmNvbmNhdChhKSl9dC5JZGVudGl0eUNNYXA9Zix0LkNNYXBGYWN0b3J5PWNsYXNze3N0YXRpYyBhc3luYyBjcmVhdGUoZSl7bGV0e2VuY29kaW5nOnQsZmV0Y2hCdWlsdEluQ01hcDpyLHVzZUNNYXA6bn09ZTtpZih0IGluc3RhbmNlb2YgYS5OYW1lKXJldHVybiBPKHQubmFtZSxyKTtpZih0IGluc3RhbmNlb2YgaS5CYXNlU3RyZWFtKXtjb25zdCBlPWF3YWl0IGsobmV3IGQsbmV3IG8uTGV4ZXIodCkscixuKTtyZXR1cm4gZS5pc0lkZW50aXR5Q01hcD9PKGUubmFtZSxyKTplfXRocm93IG5ldyBFcnJvcigiRW5jb2RpbmcgcmVxdWlyZWQuIil9fX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkJpbmFyeUNNYXBSZWFkZXI9dm9pZCAwLHIoODQpLHIoOTMpLHIoOTQpLHIoOTcpLHIoOTkpLHIoMTAxKSxyKDEwNSkscigxMDgpLHIoMTE1KSxyKDIpO3ZhciBuPXIoMTQ0KTtmdW5jdGlvbiBhKGUsdCl7bGV0IHI9MDtmb3IobGV0IG49MDtuPD10O24rKylyPXI8PDh8ZVtuXTtyZXR1cm4gcj4+PjB9ZnVuY3Rpb24gaShlLHQpe3JldHVybiAxPT09dD9TdHJpbmcuZnJvbUNoYXJDb2RlKGVbMF0sZVsxXSk6Mz09PXQ/U3RyaW5nLmZyb21DaGFyQ29kZShlWzBdLGVbMV0sZVsyXSxlWzNdKTpTdHJpbmcuZnJvbUNoYXJDb2RlKC4uLmUuc3ViYXJyYXkoMCx0KzEpKX1mdW5jdGlvbiBzKGUsdCxyKXtsZXQgbj0wO2ZvcihsZXQgYT1yO2E+PTA7YS0tKW4rPWVbYV0rdFthXSxlW2FdPTI1NSZuLG4+Pj04fWZ1bmN0aW9uIG8oZSx0KXtsZXQgcj0xO2ZvcihsZXQgbj10O24+PTAmJnI+MDtuLS0pcis9ZVtuXSxlW25dPTI1NSZyLHI+Pj04fWNvbnN0IGM9MTY7Y2xhc3MgbHtjb25zdHJ1Y3RvcihlKXt0aGlzLmJ1ZmZlcj1lLHRoaXMucG9zPTAsdGhpcy5lbmQ9ZS5sZW5ndGgsdGhpcy50bXBCdWY9bmV3IFVpbnQ4QXJyYXkoMTkpfXJlYWRCeXRlKCl7cmV0dXJuIHRoaXMucG9zPj10aGlzLmVuZD8tMTp0aGlzLmJ1ZmZlclt0aGlzLnBvcysrXX1yZWFkTnVtYmVyKCl7bGV0IGUsdD0wO2Rve2NvbnN0IHI9dGhpcy5yZWFkQnl0ZSgpO2lmKHI8MCl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigidW5leHBlY3RlZCBFT0YgaW4gYmNtYXAiKTtlPSEoMTI4JnIpLHQ9dDw8N3wxMjcmcn13aGlsZSghZSk7cmV0dXJuIHR9cmVhZFNpZ25lZCgpe2NvbnN0IGU9dGhpcy5yZWFkTnVtYmVyKCk7cmV0dXJuIDEmZT9+KGU+Pj4xKTplPj4+MX1yZWFkSGV4KGUsdCl7ZS5zZXQodGhpcy5idWZmZXIuc3ViYXJyYXkodGhpcy5wb3MsdGhpcy5wb3MrdCsxKSksdGhpcy5wb3MrPXQrMX1yZWFkSGV4TnVtYmVyKGUsdCl7bGV0IHI7Y29uc3QgYT10aGlzLnRtcEJ1ZjtsZXQgaT0wO2Rve2NvbnN0IGU9dGhpcy5yZWFkQnl0ZSgpO2lmKGU8MCl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigidW5leHBlY3RlZCBFT0YgaW4gYmNtYXAiKTtyPSEoMTI4JmUpLGFbaSsrXT0xMjcmZX13aGlsZSghcik7bGV0IHM9dCxvPTAsYz0wO2Zvcig7cz49MDspe2Zvcig7Yzw4JiZhLmxlbmd0aD4wOylvfD1hWy0taV08PGMsYys9NztlW3NdPTI1NSZvLHMtLSxvPj49OCxjLT04fX1yZWFkSGV4U2lnbmVkKGUsdCl7dGhpcy5yZWFkSGV4TnVtYmVyKGUsdCk7Y29uc3Qgcj0xJmVbdF0/MjU1OjA7bGV0IG49MDtmb3IobGV0IGE9MDthPD10O2ErKyluPSgxJm4pPDw4fGVbYV0sZVthXT1uPj4xXnJ9cmVhZFN0cmluZygpe2NvbnN0IGU9dGhpcy5yZWFkTnVtYmVyKCksdD1uZXcgQXJyYXkoZSk7Zm9yKGxldCByPTA7cjxlO3IrKyl0W3JdPXRoaXMucmVhZE51bWJlcigpO3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKC4uLnQpfX10LkJpbmFyeUNNYXBSZWFkZXI9Y2xhc3N7YXN5bmMgcHJvY2VzcyhlLHQscil7Y29uc3Qgbj1uZXcgbChlKSxoPW4ucmVhZEJ5dGUoKTt0LnZlcnRpY2FsPSEhKDEmaCk7bGV0IHU9bnVsbDtjb25zdCBkPW5ldyBVaW50OEFycmF5KGMpLGY9bmV3IFVpbnQ4QXJyYXkoYyksZz1uZXcgVWludDhBcnJheShjKSxwPW5ldyBVaW50OEFycmF5KGMpLG09bmV3IFVpbnQ4QXJyYXkoYyk7bGV0IGIseTtmb3IoOyh5PW4ucmVhZEJ5dGUoKSk+PTA7KXtjb25zdCBlPXk+PjU7aWYoNz09PWUpe3N3aXRjaCgzMSZ5KXtjYXNlIDA6bi5yZWFkU3RyaW5nKCk7YnJlYWs7Y2FzZSAxOnU9bi5yZWFkU3RyaW5nKCl9Y29udGludWV9Y29uc3Qgcj0hISgxNiZ5KSxsPTE1Jnk7aWYobCsxPmMpdGhyb3cgbmV3IEVycm9yKCJCaW5hcnlDTWFwUmVhZGVyLnByb2Nlc3M6IEludmFsaWQgZGF0YVNpemUuIik7Y29uc3QgaD0xLHc9bi5yZWFkTnVtYmVyKCk7c3dpdGNoKGUpe2Nhc2UgMDpuLnJlYWRIZXgoZCxsKSxuLnJlYWRIZXhOdW1iZXIoZixsKSxzKGYsZCxsKSx0LmFkZENvZGVzcGFjZVJhbmdlKGwrMSxhKGQsbCksYShmLGwpKTtmb3IobGV0IGU9MTtlPHc7ZSsrKW8oZixsKSxuLnJlYWRIZXhOdW1iZXIoZCxsKSxzKGQsZixsKSxuLnJlYWRIZXhOdW1iZXIoZixsKSxzKGYsZCxsKSx0LmFkZENvZGVzcGFjZVJhbmdlKGwrMSxhKGQsbCksYShmLGwpKTticmVhaztjYXNlIDE6bi5yZWFkSGV4KGQsbCksbi5yZWFkSGV4TnVtYmVyKGYsbCkscyhmLGQsbCksbi5yZWFkTnVtYmVyKCk7Zm9yKGxldCBlPTE7ZTx3O2UrKylvKGYsbCksbi5yZWFkSGV4TnVtYmVyKGQsbCkscyhkLGYsbCksbi5yZWFkSGV4TnVtYmVyKGYsbCkscyhmLGQsbCksbi5yZWFkTnVtYmVyKCk7YnJlYWs7Y2FzZSAyOm4ucmVhZEhleChnLGwpLGI9bi5yZWFkTnVtYmVyKCksdC5tYXBPbmUoYShnLGwpLGIpO2ZvcihsZXQgZT0xO2U8dztlKyspbyhnLGwpLHJ8fChuLnJlYWRIZXhOdW1iZXIobSxsKSxzKGcsbSxsKSksYj1uLnJlYWRTaWduZWQoKSsoYisxKSx0Lm1hcE9uZShhKGcsbCksYik7YnJlYWs7Y2FzZSAzOm4ucmVhZEhleChkLGwpLG4ucmVhZEhleE51bWJlcihmLGwpLHMoZixkLGwpLGI9bi5yZWFkTnVtYmVyKCksdC5tYXBDaWRSYW5nZShhKGQsbCksYShmLGwpLGIpO2ZvcihsZXQgZT0xO2U8dztlKyspbyhmLGwpLHI/ZC5zZXQoZik6KG4ucmVhZEhleE51bWJlcihkLGwpLHMoZCxmLGwpKSxuLnJlYWRIZXhOdW1iZXIoZixsKSxzKGYsZCxsKSxiPW4ucmVhZE51bWJlcigpLHQubWFwQ2lkUmFuZ2UoYShkLGwpLGEoZixsKSxiKTticmVhaztjYXNlIDQ6bi5yZWFkSGV4KGcsaCksbi5yZWFkSGV4KHAsbCksdC5tYXBPbmUoYShnLGgpLGkocCxsKSk7Zm9yKGxldCBlPTE7ZTx3O2UrKylvKGcsaCkscnx8KG4ucmVhZEhleE51bWJlcihtLGgpLHMoZyxtLGgpKSxvKHAsbCksbi5yZWFkSGV4U2lnbmVkKG0sbCkscyhwLG0sbCksdC5tYXBPbmUoYShnLGgpLGkocCxsKSk7YnJlYWs7Y2FzZSA1Om4ucmVhZEhleChkLGgpLG4ucmVhZEhleE51bWJlcihmLGgpLHMoZixkLGgpLG4ucmVhZEhleChwLGwpLHQubWFwQmZSYW5nZShhKGQsaCksYShmLGgpLGkocCxsKSk7Zm9yKGxldCBlPTE7ZTx3O2UrKylvKGYsaCkscj9kLnNldChmKToobi5yZWFkSGV4TnVtYmVyKGQsaCkscyhkLGYsaCkpLG4ucmVhZEhleE51bWJlcihmLGgpLHMoZixkLGgpLG4ucmVhZEhleChwLGwpLHQubWFwQmZSYW5nZShhKGQsaCksYShmLGgpLGkocCxsKSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkJpbmFyeUNNYXBSZWFkZXIucHJvY2VzcyAtIHVua25vd24gdHlwZTogIi5jb25jYXQoZSkpfX1yZXR1cm4gdT9yKHUpOnR9fX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlBhcnNlcj10LkxpbmVhcml6YXRpb249dC5MZXhlcj12b2lkIDAscigxMzkpLHIoODQpLHIoOTMpLHIoOTQpLHIoOTcpLHIoOTkpLHIoMTAxKSxyKDEwNSkscigxMDgpLHIoMTE1KSxyKDIpO3ZhciBuPXIoMTQ0KSxhPXIoMTUwKSxpPXIoMTQ5KSxzPXIoMTU0KSxvPXIoMTY3KSxjPXIoMTY5KSxsPXIoMTcwKSxoPXIoMTcyKSx1PXIoMTczKSxkPXIoMTc2KSxmPXIoMTc5KSxnPXIoMTgxKSxwPXIoMTgyKSxtPXIoMTgzKTtjbGFzcyBie2NvbnN0cnVjdG9yKGUpe2xldHtsZXhlcjp0LHhyZWY6cixhbGxvd1N0cmVhbXM6bj0hMSxyZWNvdmVyeU1vZGU6YT0hMX09ZTt0aGlzLmxleGVyPXQsdGhpcy54cmVmPXIsdGhpcy5hbGxvd1N0cmVhbXM9bix0aGlzLnJlY292ZXJ5TW9kZT1hLHRoaXMuaW1hZ2VDYWNoZT1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2ltYWdlSWQ9MCx0aGlzLnJlZmlsbCgpfXJlZmlsbCgpe3RoaXMuYnVmMT10aGlzLmxleGVyLmdldE9iaigpLHRoaXMuYnVmMj10aGlzLmxleGVyLmdldE9iaigpfXNoaWZ0KCl7dGhpcy5idWYyIGluc3RhbmNlb2YgYS5DbWQmJiJJRCI9PT10aGlzLmJ1ZjIuY21kPyh0aGlzLmJ1ZjE9dGhpcy5idWYyLHRoaXMuYnVmMj1udWxsKToodGhpcy5idWYxPXRoaXMuYnVmMix0aGlzLmJ1ZjI9dGhpcy5sZXhlci5nZXRPYmooKSl9dHJ5U2hpZnQoKXt0cnl7cmV0dXJuIHRoaXMuc2hpZnQoKSwhMH1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlO3JldHVybiExfX1nZXRPYmooKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDtjb25zdCB0PXRoaXMuYnVmMTtpZih0aGlzLnNoaWZ0KCksdCBpbnN0YW5jZW9mIGEuQ21kKXN3aXRjaCh0LmNtZCl7Y2FzZSJCSSI6cmV0dXJuIHRoaXMubWFrZUlubGluZUltYWdlKGUpO2Nhc2UiWyI6Y29uc3Qgcj1bXTtmb3IoOyEoMCxhLmlzQ21kKSh0aGlzLmJ1ZjEsIl0iKSYmdGhpcy5idWYxIT09YS5FT0Y7KXIucHVzaCh0aGlzLmdldE9iaihlKSk7aWYodGhpcy5idWYxPT09YS5FT0Ype2lmKHRoaXMucmVjb3ZlcnlNb2RlKXJldHVybiByO3Rocm93IG5ldyBpLlBhcnNlckVPRkV4Y2VwdGlvbigiRW5kIG9mIGZpbGUgaW5zaWRlIGFycmF5LiIpfXJldHVybiB0aGlzLnNoaWZ0KCkscjtjYXNlIjw8Ijpjb25zdCBzPW5ldyBhLkRpY3QodGhpcy54cmVmKTtmb3IoOyEoMCxhLmlzQ21kKSh0aGlzLmJ1ZjEsIj4+IikmJnRoaXMuYnVmMSE9PWEuRU9GOyl7aWYoISh0aGlzLmJ1ZjEgaW5zdGFuY2VvZiBhLk5hbWUpKXsoMCxuLmluZm8pKCJNYWxmb3JtZWQgZGljdGlvbmFyeToga2V5IG11c3QgYmUgYSBuYW1lIG9iamVjdCIpLHRoaXMuc2hpZnQoKTtjb250aW51ZX1jb25zdCB0PXRoaXMuYnVmMS5uYW1lO2lmKHRoaXMuc2hpZnQoKSx0aGlzLmJ1ZjE9PT1hLkVPRilicmVhaztzLnNldCh0LHRoaXMuZ2V0T2JqKGUpKX1pZih0aGlzLmJ1ZjE9PT1hLkVPRil7aWYodGhpcy5yZWNvdmVyeU1vZGUpcmV0dXJuIHM7dGhyb3cgbmV3IGkuUGFyc2VyRU9GRXhjZXB0aW9uKCJFbmQgb2YgZmlsZSBpbnNpZGUgZGljdGlvbmFyeS4iKX1yZXR1cm4oMCxhLmlzQ21kKSh0aGlzLmJ1ZjIsInN0cmVhbSIpP3RoaXMuYWxsb3dTdHJlYW1zP3RoaXMubWFrZVN0cmVhbShzLGUpOnM6KHRoaXMuc2hpZnQoKSxzKTtkZWZhdWx0OnJldHVybiB0fWlmKE51bWJlci5pc0ludGVnZXIodCkpe2lmKE51bWJlci5pc0ludGVnZXIodGhpcy5idWYxKSYmKDAsYS5pc0NtZCkodGhpcy5idWYyLCJSIikpe2NvbnN0IGU9YS5SZWYuZ2V0KHQsdGhpcy5idWYxKTtyZXR1cm4gdGhpcy5zaGlmdCgpLHRoaXMuc2hpZnQoKSxlfXJldHVybiB0fXJldHVybiJzdHJpbmciPT10eXBlb2YgdCYmZT9lLmRlY3J5cHRTdHJpbmcodCk6dH1maW5kRGVmYXVsdElubGluZVN0cmVhbUVuZChlKXtjb25zdHtrbm93bkNvbW1hbmRzOnR9PXRoaXMubGV4ZXIscj1lLnBvcztsZXQgbyxjLGw9MDtmb3IoOy0xIT09KG89ZS5nZXRCeXRlKCkpOylpZigwPT09bClsPTY5PT09bz8xOjA7ZWxzZSBpZigxPT09bClsPTczPT09bz8yOjA7ZWxzZSBpZigzMj09PW98fDEwPT09b3x8MTM9PT1vKXtjPWUucG9zO2NvbnN0IHI9ZS5wZWVrQnl0ZXMoMTUpLGk9ci5sZW5ndGg7aWYoMD09PWkpYnJlYWs7Zm9yKGxldCBlPTA7ZTxpO2UrKylpZihvPXJbZV0sKDAhPT1vfHwwPT09cltlKzFdKSYmMTAhPT1vJiYxMyE9PW8mJihvPDMyfHxvPjEyNykpe2w9MDticmVha31pZigyIT09bCljb250aW51ZTtpZighdCl7KDAsbi53YXJuKSgiZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQgLSBgbGV4ZXIua25vd25Db21tYW5kc2AgaXMgdW5kZWZpbmVkLiIpO2NvbnRpbnVlfWNvbnN0IGg9bmV3IHYobmV3IHMuU3RyZWFtKHIuc2xpY2UoKSksdCk7aC5faGV4U3RyaW5nV2Fybj0oKT0+e307bGV0IHU9MDtmb3IoOzspe2NvbnN0IGU9aC5nZXRPYmooKTtpZihlPT09YS5FT0Ype2w9MDticmVha31pZihlIGluc3RhbmNlb2YgYS5DbWQpe2NvbnN0IHI9dFtlLmNtZF07aWYoIXIpe2w9MDticmVha31pZihyLnZhcmlhYmxlQXJncz91PD1yLm51bUFyZ3M6dT09PXIubnVtQXJncylicmVhazt1PTB9ZWxzZSB1Kyt9aWYoMj09PWwpYnJlYWt9ZWxzZSBsPTA7LTE9PT1vJiYoKDAsbi53YXJuKSgiZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQ6IFJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgc3RyZWFtIHdpdGhvdXQgZmluZGluZyBhIHZhbGlkIEVJIG1hcmtlciIpLGMmJigoMCxuLndhcm4pKCcuLi4gdHJ5aW5nIHRvIHJlY292ZXIgYnkgdXNpbmcgdGhlIGxhc3QgIkVJIiBvY2N1cnJlbmNlLicpLGUuc2tpcCgtKGUucG9zLWMpKSkpO2xldCBoPTQ7cmV0dXJuIGUuc2tpcCgtaCksbz1lLnBlZWtCeXRlKCksZS5za2lwKGgpLCgwLGkuaXNXaGl0ZVNwYWNlKShvKXx8aC0tLGUucG9zLWgtcn1maW5kRENURGVjb2RlSW5saW5lU3RyZWFtRW5kKGUpe2NvbnN0IHQ9ZS5wb3M7bGV0IHIsYSxpPSExO2Zvcig7LTEhPT0ocj1lLmdldEJ5dGUoKSk7KWlmKDI1NT09PXIpe3N3aXRjaChlLmdldEJ5dGUoKSl7Y2FzZSAwOmJyZWFrO2Nhc2UgMjU1OmUuc2tpcCgtMSk7YnJlYWs7Y2FzZSAyMTc6aT0hMDticmVhaztjYXNlIDE5MjpjYXNlIDE5MzpjYXNlIDE5NDpjYXNlIDE5NTpjYXNlIDE5NzpjYXNlIDE5ODpjYXNlIDE5OTpjYXNlIDIwMTpjYXNlIDIwMjpjYXNlIDIwMzpjYXNlIDIwNTpjYXNlIDIwNjpjYXNlIDIwNzpjYXNlIDE5NjpjYXNlIDIwNDpjYXNlIDIxODpjYXNlIDIxOTpjYXNlIDIyMDpjYXNlIDIyMTpjYXNlIDIyMjpjYXNlIDIyMzpjYXNlIDIyNDpjYXNlIDIyNTpjYXNlIDIyNjpjYXNlIDIyNzpjYXNlIDIyODpjYXNlIDIyOTpjYXNlIDIzMDpjYXNlIDIzMTpjYXNlIDIzMjpjYXNlIDIzMzpjYXNlIDIzNDpjYXNlIDIzNTpjYXNlIDIzNjpjYXNlIDIzNzpjYXNlIDIzODpjYXNlIDIzOTpjYXNlIDI1NDphPWUuZ2V0VWludDE2KCksYT4yP2Uuc2tpcChhLTIpOmUuc2tpcCgtMil9aWYoaSlicmVha31jb25zdCBzPWUucG9zLXQ7cmV0dXJuLTE9PT1yPygoMCxuLndhcm4pKCJJbmxpbmUgRENURGVjb2RlIGltYWdlIHN0cmVhbTogRU9JIG1hcmtlciBub3QgZm91bmQsIHNlYXJjaGluZyBmb3IgL0VJLyBpbnN0ZWFkLiIpLGUuc2tpcCgtcyksdGhpcy5maW5kRGVmYXVsdElubGluZVN0cmVhbUVuZChlKSk6KHRoaXMuaW5saW5lU3RyZWFtU2tpcEVJKGUpLHMpfWZpbmRBU0NJSTg1RGVjb2RlSW5saW5lU3RyZWFtRW5kKGUpe2NvbnN0IHQ9ZS5wb3M7bGV0IHI7Zm9yKDstMSE9PShyPWUuZ2V0Qnl0ZSgpKTspaWYoMTI2PT09cil7Y29uc3QgdD1lLnBvcztmb3Iocj1lLnBlZWtCeXRlKCk7KDAsaS5pc1doaXRlU3BhY2UpKHIpOyllLnNraXAoKSxyPWUucGVla0J5dGUoKTtpZig2Mj09PXIpe2Uuc2tpcCgpO2JyZWFrfWlmKGUucG9zPnQpe2NvbnN0IHQ9ZS5wZWVrQnl0ZXMoMik7aWYoNjk9PT10WzBdJiY3Mz09PXRbMV0pYnJlYWt9fWNvbnN0IGE9ZS5wb3MtdDtyZXR1cm4tMT09PXI/KCgwLG4ud2FybikoIklubGluZSBBU0NJSTg1RGVjb2RlIGltYWdlIHN0cmVhbTogRU9EIG1hcmtlciBub3QgZm91bmQsIHNlYXJjaGluZyBmb3IgL0VJLyBpbnN0ZWFkLiIpLGUuc2tpcCgtYSksdGhpcy5maW5kRGVmYXVsdElubGluZVN0cmVhbUVuZChlKSk6KHRoaXMuaW5saW5lU3RyZWFtU2tpcEVJKGUpLGEpfWZpbmRBU0NJSUhleERlY29kZUlubGluZVN0cmVhbUVuZChlKXtjb25zdCB0PWUucG9zO2xldCByO2Zvcig7LTEhPT0ocj1lLmdldEJ5dGUoKSkmJjYyIT09cjspO2NvbnN0IGE9ZS5wb3MtdDtyZXR1cm4tMT09PXI/KCgwLG4ud2FybikoIklubGluZSBBU0NJSUhleERlY29kZSBpbWFnZSBzdHJlYW06IEVPRCBtYXJrZXIgbm90IGZvdW5kLCBzZWFyY2hpbmcgZm9yIC9FSS8gaW5zdGVhZC4iKSxlLnNraXAoLWEpLHRoaXMuZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQoZSkpOih0aGlzLmlubGluZVN0cmVhbVNraXBFSShlKSxhKX1pbmxpbmVTdHJlYW1Ta2lwRUkoZSl7bGV0IHQscj0wO2Zvcig7LTEhPT0odD1lLmdldEJ5dGUoKSk7KWlmKDA9PT1yKXI9Njk9PT10PzE6MDtlbHNlIGlmKDE9PT1yKXI9NzM9PT10PzI6MDtlbHNlIGlmKDI9PT1yKWJyZWFrfW1ha2VJbmxpbmVJbWFnZShlKXtjb25zdCB0PXRoaXMubGV4ZXIscj10LnN0cmVhbSxpPU9iamVjdC5jcmVhdGUobnVsbCk7bGV0IHM7Zm9yKDshKDAsYS5pc0NtZCkodGhpcy5idWYxLCJJRCIpJiZ0aGlzLmJ1ZjEhPT1hLkVPRjspe2lmKCEodGhpcy5idWYxIGluc3RhbmNlb2YgYS5OYW1lKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiRGljdGlvbmFyeSBrZXkgbXVzdCBiZSBhIG5hbWUgb2JqZWN0Iik7Y29uc3QgdD10aGlzLmJ1ZjEubmFtZTtpZih0aGlzLnNoaWZ0KCksdGhpcy5idWYxPT09YS5FT0YpYnJlYWs7aVt0XT10aGlzLmdldE9iaihlKX0tMSE9PXQuYmVnaW5JbmxpbmVJbWFnZVBvcyYmKHM9ci5wb3MtdC5iZWdpbklubGluZUltYWdlUG9zKTtjb25zdCBvPXRoaXMueHJlZi5mZXRjaElmUmVmKGkuRnx8aS5GaWx0ZXIpO2xldCBjO2lmKG8gaW5zdGFuY2VvZiBhLk5hbWUpYz1vLm5hbWU7ZWxzZSBpZihBcnJheS5pc0FycmF5KG8pKXtjb25zdCBlPXRoaXMueHJlZi5mZXRjaElmUmVmKG9bMF0pO2UgaW5zdGFuY2VvZiBhLk5hbWUmJihjPWUubmFtZSl9Y29uc3QgbD1yLnBvcztsZXQgaCx1O3N3aXRjaChjKXtjYXNlIkRDVCI6Y2FzZSJEQ1REZWNvZGUiOmg9dGhpcy5maW5kRENURGVjb2RlSW5saW5lU3RyZWFtRW5kKHIpO2JyZWFrO2Nhc2UiQTg1IjpjYXNlIkFTQ0lJODVEZWNvZGUiOmg9dGhpcy5maW5kQVNDSUk4NURlY29kZUlubGluZVN0cmVhbUVuZChyKTticmVhaztjYXNlIkFIeCI6Y2FzZSJBU0NJSUhleERlY29kZSI6aD10aGlzLmZpbmRBU0NJSUhleERlY29kZUlubGluZVN0cmVhbUVuZChyKTticmVhaztkZWZhdWx0Omg9dGhpcy5maW5kRGVmYXVsdElubGluZVN0cmVhbUVuZChyKX1pZihoPDFlMyYmcz4wKXtjb25zdCBlPXIucG9zO3IucG9zPXQuYmVnaW5JbmxpbmVJbWFnZVBvcyx1PWZ1bmN0aW9uKGUpe2NvbnN0IHQ9W10scj1lLmxlbmd0aDtsZXQgbj0wO2Zvcig7bjxyLTE7KXQucHVzaChlW24rK108PDh8ZVtuKytdKTtyZXR1cm4gbjxyJiZ0LnB1c2goZVtuXSkscisiXyIrU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLHQpfShyLmdldEJ5dGVzKHMraCkpLHIucG9zPWU7Y29uc3Qgbj10aGlzLmltYWdlQ2FjaGVbdV07aWYodm9pZCAwIT09bilyZXR1cm4gdGhpcy5idWYyPWEuQ21kLmdldCgiRUkiKSx0aGlzLnNoaWZ0KCksbi5yZXNldCgpLG59Y29uc3QgZD1uZXcgYS5EaWN0KHRoaXMueHJlZik7Zm9yKGNvbnN0IGUgaW4gaSlkLnNldChlLGlbZV0pO2xldCBmPXIubWFrZVN1YlN0cmVhbShsLGgsZCk7cmV0dXJuIGUmJihmPWUuY3JlYXRlU3RyZWFtKGYsaCkpLGY9dGhpcy5maWx0ZXIoZixkLGgpLGYuZGljdD1kLHZvaWQgMCE9PXUmJihmLmNhY2hlS2V5PSJpbmxpbmVfaW1nXyIrICsrdGhpcy5faW1hZ2VJZCx0aGlzLmltYWdlQ2FjaGVbdV09ZiksdGhpcy5idWYyPWEuQ21kLmdldCgiRUkiKSx0aGlzLnNoaWZ0KCksZn1fZmluZFN0cmVhbUxlbmd0aChlLHQpe2NvbnN0e3N0cmVhbTpyfT10aGlzLmxleGVyO3IucG9zPWU7Y29uc3Qgbj10Lmxlbmd0aDtmb3IoO3IucG9zPHIuZW5kOyl7Y29uc3QgYT1yLnBlZWtCeXRlcygyMDQ4KSxpPWEubGVuZ3RoLW47aWYoaTw9MClicmVhaztsZXQgcz0wO2Zvcig7czxpOyl7bGV0IGk9MDtmb3IoO2k8biYmYVtzK2ldPT09dFtpXTspaSsrO2lmKGk+PW4pcmV0dXJuIHIucG9zKz1zLHIucG9zLWU7cysrfXIucG9zKz1pfXJldHVybi0xfW1ha2VTdHJlYW0oZSx0KXtjb25zdCByPXRoaXMubGV4ZXI7bGV0IHM9ci5zdHJlYW07ci5za2lwVG9OZXh0TGluZSgpO2NvbnN0IG89cy5wb3MtMTtsZXQgYz1lLmdldCgiTGVuZ3RoIik7aWYoTnVtYmVyLmlzSW50ZWdlcihjKXx8KCgwLG4uaW5mbykoJ0JhZCBsZW5ndGggIicuY29uY2F0KGMmJmMudG9TdHJpbmcoKSwnIiBpbiBzdHJlYW0uJykpLGM9MCkscy5wb3M9bytjLHIubmV4dENoYXIoKSx0aGlzLnRyeVNoaWZ0KCkmJigwLGEuaXNDbWQpKHRoaXMuYnVmMiwiZW5kc3RyZWFtIikpdGhpcy5zaGlmdCgpO2Vsc2V7Y29uc3QgZT1uZXcgVWludDhBcnJheShbMTAxLDExMCwxMDAsMTE1LDExNiwxMTQsMTAxLDk3LDEwOV0pO2xldCB0PXRoaXMuX2ZpbmRTdHJlYW1MZW5ndGgobyxlKTtpZih0PDApe2NvbnN0IHI9MTtmb3IobGV0IGE9MTthPD1yO2ErKyl7Y29uc3Qgcj1lLmxlbmd0aC1hLGM9ZS5zbGljZSgwLHIpLGw9dGhpcy5fZmluZFN0cmVhbUxlbmd0aChvLGMpO2lmKGw+PTApe2NvbnN0IGU9cy5wZWVrQnl0ZXMocisxKVtyXTtpZighKDAsaS5pc1doaXRlU3BhY2UpKGUpKWJyZWFrOygwLG4uaW5mbykoJ0ZvdW5kICInLmNvbmNhdCgoMCxuLmJ5dGVzVG9TdHJpbmcpKGMpLCciIHdoZW4gc2VhcmNoaW5nIGZvciBlbmRzdHJlYW0gY29tbWFuZC4nKSksdD1sO2JyZWFrfX1pZih0PDApdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIk1pc3NpbmcgZW5kc3RyZWFtIGNvbW1hbmQuIil9Yz10LHIubmV4dENoYXIoKSx0aGlzLnNoaWZ0KCksdGhpcy5zaGlmdCgpfXJldHVybiB0aGlzLnNoaWZ0KCkscz1zLm1ha2VTdWJTdHJlYW0obyxjLGUpLHQmJihzPXQuY3JlYXRlU3RyZWFtKHMsYykpLHM9dGhpcy5maWx0ZXIocyxlLGMpLHMuZGljdD1lLHN9ZmlsdGVyKGUsdCxyKXtsZXQgaT10LmdldCgiRiIsIkZpbHRlciIpLHM9dC5nZXQoIkRQIiwiRGVjb2RlUGFybXMiKTtpZihpIGluc3RhbmNlb2YgYS5OYW1lKXJldHVybiBBcnJheS5pc0FycmF5KHMpJiYoMCxuLndhcm4pKCIvRGVjb2RlUGFybXMgc2hvdWxkIG5vdCBiZSBhbiBBcnJheSwgd2hlbiAvRmlsdGVyIGlzIGEgTmFtZS4iKSx0aGlzLm1ha2VGaWx0ZXIoZSxpLm5hbWUscixzKTtsZXQgbz1yO2lmKEFycmF5LmlzQXJyYXkoaSkpe2NvbnN0IHQ9aSxyPXM7Zm9yKGxldCBjPTAsbD10Lmxlbmd0aDtjPGw7KytjKXtpZihpPXRoaXMueHJlZi5mZXRjaElmUmVmKHRbY10pLCEoaSBpbnN0YW5jZW9mIGEuTmFtZSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoJ0JhZCBmaWx0ZXIgbmFtZSAiJy5jb25jYXQoaSwnIicpKTtzPW51bGwsQXJyYXkuaXNBcnJheShyKSYmYyBpbiByJiYocz10aGlzLnhyZWYuZmV0Y2hJZlJlZihyW2NdKSksZT10aGlzLm1ha2VGaWx0ZXIoZSxpLm5hbWUsbyxzKSxvPW51bGx9fXJldHVybiBlfW1ha2VGaWx0ZXIoZSx0LHIsYSl7aWYoMD09PXIpcmV0dXJuKDAsbi53YXJuKSgnRW1wdHkgIicuY29uY2F0KHQsJyIgc3RyZWFtLicpKSxuZXcgcy5OdWxsU3RyZWFtO3RyeXtzd2l0Y2godCl7Y2FzZSJGbCI6Y2FzZSJGbGF0ZURlY29kZSI6cmV0dXJuIGE/bmV3IHAuUHJlZGljdG9yU3RyZWFtKG5ldyBoLkZsYXRlU3RyZWFtKGUscikscixhKTpuZXcgaC5GbGF0ZVN0cmVhbShlLHIpO2Nhc2UiTFpXIjpjYXNlIkxaV0RlY29kZSI6bGV0IHQ9MTtyZXR1cm4gYT8oYS5oYXMoIkVhcmx5Q2hhbmdlIikmJih0PWEuZ2V0KCJFYXJseUNoYW5nZSIpKSxuZXcgcC5QcmVkaWN0b3JTdHJlYW0obmV3IGcuTFpXU3RyZWFtKGUscix0KSxyLGEpKTpuZXcgZy5MWldTdHJlYW0oZSxyLHQpO2Nhc2UiRENUIjpjYXNlIkRDVERlY29kZSI6cmV0dXJuIG5ldyBkLkpwZWdTdHJlYW0oZSxyLGEpO2Nhc2UiSlBYIjpjYXNlIkpQWERlY29kZSI6cmV0dXJuIG5ldyBmLkpweFN0cmVhbShlLHIsYSk7Y2FzZSJBODUiOmNhc2UiQVNDSUk4NURlY29kZSI6cmV0dXJuIG5ldyBvLkFzY2lpODVTdHJlYW0oZSxyKTtjYXNlIkFIeCI6Y2FzZSJBU0NJSUhleERlY29kZSI6cmV0dXJuIG5ldyBjLkFzY2lpSGV4U3RyZWFtKGUscik7Y2FzZSJDQ0YiOmNhc2UiQ0NJVFRGYXhEZWNvZGUiOnJldHVybiBuZXcgbC5DQ0lUVEZheFN0cmVhbShlLHIsYSk7Y2FzZSJSTCI6Y2FzZSJSdW5MZW5ndGhEZWNvZGUiOnJldHVybiBuZXcgbS5SdW5MZW5ndGhTdHJlYW0oZSxyKTtjYXNlIkpCSUcyRGVjb2RlIjpyZXR1cm4gbmV3IHUuSmJpZzJTdHJlYW0oZSxyLGEpfXJldHVybigwLG4ud2FybikoJ0ZpbHRlciAiJy5jb25jYXQodCwnIiBpcyBub3Qgc3VwcG9ydGVkLicpKSxlfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7cmV0dXJuKDAsbi53YXJuKSgnSW52YWxpZCBzdHJlYW06ICInLmNvbmNhdChlLCciJykpLG5ldyBzLk51bGxTdHJlYW19fX10LlBhcnNlcj1iO2NvbnN0IHk9WzEsMCwwLDAsMCwwLDAsMCwwLDEsMSwwLDEsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMiwwLDAsMiwyLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDBdO2Z1bmN0aW9uIHcoZSl7cmV0dXJuIGU+PTQ4JiZlPD01Nz8xNSZlOmU+PTY1JiZlPD03MHx8ZT49OTcmJmU8PTEwMj85KygxNSZlKTotMX1jbGFzcyB2e2NvbnN0cnVjdG9yKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsO3RoaXMuc3RyZWFtPWUsdGhpcy5uZXh0Q2hhcigpLHRoaXMuc3RyQnVmPVtdLHRoaXMua25vd25Db21tYW5kcz10LHRoaXMuX2hleFN0cmluZ051bVdhcm49MCx0aGlzLmJlZ2luSW5saW5lSW1hZ2VQb3M9LTF9bmV4dENoYXIoKXtyZXR1cm4gdGhpcy5jdXJyZW50Q2hhcj10aGlzLnN0cmVhbS5nZXRCeXRlKCl9cGVla0NoYXIoKXtyZXR1cm4gdGhpcy5zdHJlYW0ucGVla0J5dGUoKX1nZXROdW1iZXIoKXtsZXQgZT10aGlzLmN1cnJlbnRDaGFyLHQ9ITEscj0wLGE9MTtpZig0NT09PWU/KGE9LTEsZT10aGlzLm5leHRDaGFyKCksNDU9PT1lJiYoZT10aGlzLm5leHRDaGFyKCkpKTo0Mz09PWUmJihlPXRoaXMubmV4dENoYXIoKSksMTA9PT1lfHwxMz09PWUpZG97ZT10aGlzLm5leHRDaGFyKCl9d2hpbGUoMTA9PT1lfHwxMz09PWUpO2lmKDQ2PT09ZSYmKHI9MTAsZT10aGlzLm5leHRDaGFyKCkpLGU8NDh8fGU+NTcpe2NvbnN0IHQ9IkludmFsaWQgbnVtYmVyOiAiLmNvbmNhdChTdHJpbmcuZnJvbUNoYXJDb2RlKGUpLCIgKGNoYXJDb2RlICIpLmNvbmNhdChlLCIpIik7aWYoKDAsaS5pc1doaXRlU3BhY2UpKGUpfHwtMT09PWUpcmV0dXJuKDAsbi5pbmZvKSgnTGV4ZXIuZ2V0TnVtYmVyIC0gIicuY29uY2F0KHQsJyIuJykpLDA7dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IodCl9bGV0IHM9ZS00OCxvPTAsYz0xO2Zvcig7KGU9dGhpcy5uZXh0Q2hhcigpKT49MDspaWYoZT49NDgmJmU8PTU3KXtjb25zdCBuPWUtNDg7dD9vPTEwKm8rbjooMCE9PXImJihyKj0xMCkscz0xMCpzK24pfWVsc2UgaWYoNDY9PT1lKXtpZigwIT09cilicmVhaztyPTF9ZWxzZSBpZig0NT09PWUpKDAsbi53YXJuKSgiQmFkbHkgZm9ybWF0dGVkIG51bWJlcjogbWludXMgc2lnbiBpbiB0aGUgbWlkZGxlIik7ZWxzZXtpZig2OSE9PWUmJjEwMSE9PWUpYnJlYWs7aWYoZT10aGlzLnBlZWtDaGFyKCksNDM9PT1lfHw0NT09PWUpYz00NT09PWU/LTE6MSx0aGlzLm5leHRDaGFyKCk7ZWxzZSBpZihlPDQ4fHxlPjU3KWJyZWFrO3Q9ITB9cmV0dXJuIDAhPT1yJiYocy89ciksdCYmKHMqPTEwKiooYypvKSksYSpzfWdldFN0cmluZygpe2xldCBlPTEsdD0hMTtjb25zdCByPXRoaXMuc3RyQnVmO3IubGVuZ3RoPTA7bGV0IGE9dGhpcy5uZXh0Q2hhcigpO2Zvcig7Oyl7bGV0IGk9ITE7c3dpdGNoKDB8YSl7Y2FzZS0xOigwLG4ud2FybikoIlVudGVybWluYXRlZCBzdHJpbmciKSx0PSEwO2JyZWFrO2Nhc2UgNDA6KytlLHIucHVzaCgiKCIpO2JyZWFrO2Nhc2UgNDE6MD09LS1lPyh0aGlzLm5leHRDaGFyKCksdD0hMCk6ci5wdXNoKCIpIik7YnJlYWs7Y2FzZSA5Mjpzd2l0Y2goYT10aGlzLm5leHRDaGFyKCksYSl7Y2FzZS0xOigwLG4ud2FybikoIlVudGVybWluYXRlZCBzdHJpbmciKSx0PSEwO2JyZWFrO2Nhc2UgMTEwOnIucHVzaCgiXG4iKTticmVhaztjYXNlIDExNDpyLnB1c2goIlxyIik7YnJlYWs7Y2FzZSAxMTY6ci5wdXNoKCJcdCIpO2JyZWFrO2Nhc2UgOTg6ci5wdXNoKCJcYiIpO2JyZWFrO2Nhc2UgMTAyOnIucHVzaCgiXGYiKTticmVhaztjYXNlIDkyOmNhc2UgNDA6Y2FzZSA0MTpyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShhKSk7YnJlYWs7Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUyOmNhc2UgNTM6Y2FzZSA1NDpjYXNlIDU1OmxldCBlPTE1JmE7YT10aGlzLm5leHRDaGFyKCksaT0hMCxhPj00OCYmYTw9NTUmJihlPShlPDwzKSsoMTUmYSksYT10aGlzLm5leHRDaGFyKCksYT49NDgmJmE8PTU1JiYoaT0hMSxlPShlPDwzKSsoMTUmYSkpKSxyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShlKSk7YnJlYWs7Y2FzZSAxMzoxMD09PXRoaXMucGVla0NoYXIoKSYmdGhpcy5uZXh0Q2hhcigpO2JyZWFrO2Nhc2UgMTA6YnJlYWs7ZGVmYXVsdDpyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShhKSl9YnJlYWs7ZGVmYXVsdDpyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShhKSl9aWYodClicmVhaztpfHwoYT10aGlzLm5leHRDaGFyKCkpfXJldHVybiByLmpvaW4oIiIpfWdldE5hbWUoKXtsZXQgZSx0O2NvbnN0IHI9dGhpcy5zdHJCdWY7Zm9yKHIubGVuZ3RoPTA7KGU9dGhpcy5uZXh0Q2hhcigpKT49MCYmIXlbZV07KWlmKDM1PT09ZSl7aWYoZT10aGlzLm5leHRDaGFyKCkseVtlXSl7KDAsbi53YXJuKSgiTGV4ZXJfZ2V0TmFtZTogTlVNQkVSIFNJR04gKCMpIHNob3VsZCBiZSBmb2xsb3dlZCBieSBhIGhleGFkZWNpbWFsIG51bWJlci4iKSxyLnB1c2goIiMiKTticmVha31jb25zdCBhPXcoZSk7aWYoLTEhPT1hKXt0PWUsZT10aGlzLm5leHRDaGFyKCk7Y29uc3QgaT13KGUpO2lmKC0xPT09aSl7aWYoKDAsbi53YXJuKSgiTGV4ZXJfZ2V0TmFtZTogSWxsZWdhbCBkaWdpdCAoIi5jb25jYXQoU3RyaW5nLmZyb21DaGFyQ29kZShlKSwiKSBpbiBoZXhhZGVjaW1hbCBudW1iZXIuIikpLHIucHVzaCgiIyIsU3RyaW5nLmZyb21DaGFyQ29kZSh0KSkseVtlXSlicmVhaztyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShlKSk7Y29udGludWV9ci5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoYTw8NHxpKSl9ZWxzZSByLnB1c2goIiMiLFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpfWVsc2Ugci5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpO3JldHVybiByLmxlbmd0aD4xMjcmJigwLG4ud2FybikoIk5hbWUgdG9rZW4gaXMgbG9uZ2VyIHRoYW4gYWxsb3dlZCBieSB0aGUgc3BlYzogIi5jb25jYXQoci5sZW5ndGgpKSxhLk5hbWUuZ2V0KHIuam9pbigiIikpfV9oZXhTdHJpbmdXYXJuKGUpezUhPXRoaXMuX2hleFN0cmluZ051bVdhcm4rKz90aGlzLl9oZXhTdHJpbmdOdW1XYXJuPjV8fCgwLG4ud2FybikoImdldEhleFN0cmluZyAtIGlnbm9yaW5nIGludmFsaWQgY2hhcmFjdGVyOiAiLmNvbmNhdChlKSk6KDAsbi53YXJuKSgiZ2V0SGV4U3RyaW5nIC0gaWdub3JpbmcgYWRkaXRpb25hbCBpbnZhbGlkIGNoYXJhY3RlcnMuIil9Z2V0SGV4U3RyaW5nKCl7Y29uc3QgZT10aGlzLnN0ckJ1ZjtlLmxlbmd0aD0wO2xldCB0LHIsYT10aGlzLmN1cnJlbnRDaGFyLGk9ITA7Zm9yKHRoaXMuX2hleFN0cmluZ051bVdhcm49MDs7KXtpZihhPDApeygwLG4ud2FybikoIlVudGVybWluYXRlZCBoZXggc3RyaW5nIik7YnJlYWt9aWYoNjI9PT1hKXt0aGlzLm5leHRDaGFyKCk7YnJlYWt9aWYoMSE9PXlbYV0pe2lmKGkpe2lmKHQ9dyhhKSwtMT09PXQpe3RoaXMuX2hleFN0cmluZ1dhcm4oYSksYT10aGlzLm5leHRDaGFyKCk7Y29udGludWV9fWVsc2V7aWYocj13KGEpLC0xPT09cil7dGhpcy5faGV4U3RyaW5nV2FybihhKSxhPXRoaXMubmV4dENoYXIoKTtjb250aW51ZX1lLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSh0PDw0fHIpKX1pPSFpLGE9dGhpcy5uZXh0Q2hhcigpfWVsc2UgYT10aGlzLm5leHRDaGFyKCl9cmV0dXJuIGUuam9pbigiIil9Z2V0T2JqKCl7bGV0IGU9ITEsdD10aGlzLmN1cnJlbnRDaGFyO2Zvcig7Oyl7aWYodDwwKXJldHVybiBhLkVPRjtpZihlKTEwIT09dCYmMTMhPT10fHwoZT0hMSk7ZWxzZSBpZigzNz09PXQpZT0hMDtlbHNlIGlmKDEhPT15W3RdKWJyZWFrO3Q9dGhpcy5uZXh0Q2hhcigpfXN3aXRjaCgwfHQpe2Nhc2UgNDg6Y2FzZSA0OTpjYXNlIDUwOmNhc2UgNTE6Y2FzZSA1MjpjYXNlIDUzOmNhc2UgNTQ6Y2FzZSA1NTpjYXNlIDU2OmNhc2UgNTc6Y2FzZSA0MzpjYXNlIDQ1OmNhc2UgNDY6cmV0dXJuIHRoaXMuZ2V0TnVtYmVyKCk7Y2FzZSA0MDpyZXR1cm4gdGhpcy5nZXRTdHJpbmcoKTtjYXNlIDQ3OnJldHVybiB0aGlzLmdldE5hbWUoKTtjYXNlIDkxOnJldHVybiB0aGlzLm5leHRDaGFyKCksYS5DbWQuZ2V0KCJbIik7Y2FzZSA5MzpyZXR1cm4gdGhpcy5uZXh0Q2hhcigpLGEuQ21kLmdldCgiXSIpO2Nhc2UgNjA6cmV0dXJuIHQ9dGhpcy5uZXh0Q2hhcigpLDYwPT09dD8odGhpcy5uZXh0Q2hhcigpLGEuQ21kLmdldCgiPDwiKSk6dGhpcy5nZXRIZXhTdHJpbmcoKTtjYXNlIDYyOnJldHVybiB0PXRoaXMubmV4dENoYXIoKSw2Mj09PXQ/KHRoaXMubmV4dENoYXIoKSxhLkNtZC5nZXQoIj4+IikpOmEuQ21kLmdldCgiPiIpO2Nhc2UgMTIzOnJldHVybiB0aGlzLm5leHRDaGFyKCksYS5DbWQuZ2V0KCJ7Iik7Y2FzZSAxMjU6cmV0dXJuIHRoaXMubmV4dENoYXIoKSxhLkNtZC5nZXQoIn0iKTtjYXNlIDQxOnRocm93IHRoaXMubmV4dENoYXIoKSxuZXcgbi5Gb3JtYXRFcnJvcigiSWxsZWdhbCBjaGFyYWN0ZXI6ICIuY29uY2F0KHQpKX1sZXQgcj1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpO2lmKHQ8MzJ8fHQ+MTI3KXtjb25zdCBlPXRoaXMucGVla0NoYXIoKTtpZihlPj0zMiYmZTw9MTI3KXJldHVybiB0aGlzLm5leHRDaGFyKCksYS5DbWQuZ2V0KHIpfWNvbnN0IGk9dGhpcy5rbm93bkNvbW1hbmRzO2xldCBzPXZvaWQgMCE9PShudWxsPT1pP3ZvaWQgMDppW3JdKTtmb3IoOyh0PXRoaXMubmV4dENoYXIoKSk+PTAmJiF5W3RdOyl7Y29uc3QgZT1yK1N0cmluZy5mcm9tQ2hhckNvZGUodCk7aWYocyYmdm9pZCAwPT09aVtlXSlicmVhaztpZigxMjg9PT1yLmxlbmd0aCl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiQ29tbWFuZCB0b2tlbiB0b28gbG9uZzogIi5jb25jYXQoci5sZW5ndGgpKTtyPWUscz12b2lkIDAhPT0obnVsbD09aT92b2lkIDA6aVtyXSl9cmV0dXJuInRydWUiPT09cnx8ImZhbHNlIiE9PXImJigibnVsbCI9PT1yP251bGw6KCJCSSI9PT1yJiYodGhpcy5iZWdpbklubGluZUltYWdlUG9zPXRoaXMuc3RyZWFtLnBvcyksYS5DbWQuZ2V0KHIpKSl9c2tpcFRvTmV4dExpbmUoKXtsZXQgZT10aGlzLmN1cnJlbnRDaGFyO2Zvcig7ZT49MDspe2lmKDEzPT09ZSl7ZT10aGlzLm5leHRDaGFyKCksMTA9PT1lJiZ0aGlzLm5leHRDaGFyKCk7YnJlYWt9aWYoMTA9PT1lKXt0aGlzLm5leHRDaGFyKCk7YnJlYWt9ZT10aGlzLm5leHRDaGFyKCl9fX10LkxleGVyPXYsdC5MaW5lYXJpemF0aW9uPWNsYXNze3N0YXRpYyBjcmVhdGUoZSl7ZnVuY3Rpb24gdChlLHQpe2xldCByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3Qgbj1lLmdldCh0KTtpZihOdW1iZXIuaXNJbnRlZ2VyKG4pJiYocj9uPj0wOm4+MCkpcmV0dXJuIG47dGhyb3cgbmV3IEVycm9yKCdUaGUgIicuY29uY2F0KHQsJyIgcGFyYW1ldGVyIGluIHRoZSBsaW5lYXJpemF0aW9uIGRpY3Rpb25hcnkgaXMgaW52YWxpZC4nKSl9Y29uc3Qgcj1uZXcgYih7bGV4ZXI6bmV3IHYoZSkseHJlZjpudWxsfSksbj1yLmdldE9iaigpLGk9ci5nZXRPYmooKSxzPXIuZ2V0T2JqKCksbz1yLmdldE9iaigpO2xldCBjLGw7aWYoIShOdW1iZXIuaXNJbnRlZ2VyKG4pJiZOdW1iZXIuaXNJbnRlZ2VyKGkpJiYoMCxhLmlzQ21kKShzLCJvYmoiKSYmbyBpbnN0YW5jZW9mIGEuRGljdCYmIm51bWJlciI9PXR5cGVvZihjPW8uZ2V0KCJMaW5lYXJpemVkIikpJiZjPjApKXJldHVybiBudWxsO2lmKChsPXQobywiTCIpKSE9PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcignVGhlICJMIiBwYXJhbWV0ZXIgaW4gdGhlIGxpbmVhcml6YXRpb24gZGljdGlvbmFyeSBkb2VzIG5vdCBlcXVhbCB0aGUgc3RyZWFtIGxlbmd0aC4nKTtyZXR1cm57bGVuZ3RoOmwsaGludHM6ZnVuY3Rpb24oZSl7Y29uc3QgdD1lLmdldCgiSCIpO2xldCByO2lmKEFycmF5LmlzQXJyYXkodCkmJigyPT09KHI9dC5sZW5ndGgpfHw0PT09cikpe2ZvcihsZXQgZT0wO2U8cjtlKyspe2NvbnN0IHI9dFtlXTtpZighKE51bWJlci5pc0ludGVnZXIocikmJnI+MCkpdGhyb3cgbmV3IEVycm9yKCJIaW50ICgiLmNvbmNhdChlLCIpIGluIHRoZSBsaW5lYXJpemF0aW9uIGRpY3Rpb25hcnkgaXMgaW52YWxpZC4iKSl9cmV0dXJuIHR9dGhyb3cgbmV3IEVycm9yKCJIaW50IGFycmF5IGluIHRoZSBsaW5lYXJpemF0aW9uIGRpY3Rpb25hcnkgaXMgaW52YWxpZC4iKX0obyksb2JqZWN0TnVtYmVyRmlyc3Q6dChvLCJPIiksZW5kRmlyc3Q6dChvLCJFIiksbnVtUGFnZXM6dChvLCJOIiksbWFpblhSZWZFbnRyaWVzT2Zmc2V0OnQobywiVCIpLHBhZ2VGaXJzdDpvLmhhcygiUCIpP3QobywiUCIsITApOjB9fX19LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Bc2NpaTg1U3RyZWFtPXZvaWQgMCxyKDg0KSxyKDkzKSxyKDk0KSxyKDk3KSxyKDk5KSxyKDEwMSkscigxMDUpLHIoMTA4KSxyKDExNSk7dmFyIG49cigxNjgpLGE9cigxNDkpO2NsYXNzIGkgZXh0ZW5kcyBuLkRlY29kZVN0cmVhbXtjb25zdHJ1Y3RvcihlLHQpe3QmJih0Kj0uOCksc3VwZXIodCksdGhpcy5zdHI9ZSx0aGlzLmRpY3Q9ZS5kaWN0LHRoaXMuaW5wdXQ9bmV3IFVpbnQ4QXJyYXkoNSl9cmVhZEJsb2NrKCl7Y29uc3QgZT10aGlzLnN0cjtsZXQgdD1lLmdldEJ5dGUoKTtmb3IoOygwLGEuaXNXaGl0ZVNwYWNlKSh0KTspdD1lLmdldEJ5dGUoKTtpZigtMT09PXR8fDEyNj09PXQpcmV0dXJuIHZvaWQodGhpcy5lb2Y9ITApO2NvbnN0IHI9dGhpcy5idWZmZXJMZW5ndGg7bGV0IG4saTtpZigxMjI9PT10KXtmb3Iobj10aGlzLmVuc3VyZUJ1ZmZlcihyKzQpLGk9MDtpPDQ7KytpKW5bcitpXT0wO3RoaXMuYnVmZmVyTGVuZ3RoKz00fWVsc2V7Y29uc3Qgcz10aGlzLmlucHV0O2ZvcihzWzBdPXQsaT0xO2k8NTsrK2kpe2Zvcih0PWUuZ2V0Qnl0ZSgpOygwLGEuaXNXaGl0ZVNwYWNlKSh0KTspdD1lLmdldEJ5dGUoKTtpZihzW2ldPXQsLTE9PT10fHwxMjY9PT10KWJyZWFrfWlmKG49dGhpcy5lbnN1cmVCdWZmZXIocitpLTEpLHRoaXMuYnVmZmVyTGVuZ3RoKz1pLTEsaTw1KXtmb3IoO2k8NTsrK2kpc1tpXT0xMTc7dGhpcy5lb2Y9ITB9bGV0IG89MDtmb3IoaT0wO2k8NTsrK2kpbz04NSpvKyhzW2ldLTMzKTtmb3IoaT0zO2k+PTA7LS1pKW5bcitpXT0yNTUmbyxvPj49OH19fXQuQXNjaWk4NVN0cmVhbT1pfSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuU3RyZWFtc1NlcXVlbmNlU3RyZWFtPXQuRGVjb2RlU3RyZWFtPXZvaWQgMCxyKDg0KSxyKDkzKSxyKDk0KSxyKDk3KSxyKDk5KSxyKDEwMSkscigxMDUpLHIoMTA4KSxyKDExNSkscigxMzkpO3ZhciBuPXIoMTUxKSxhPXIoMTU0KTtjb25zdCBpPW5ldyBVaW50OEFycmF5KDApO2NsYXNzIHMgZXh0ZW5kcyBuLkJhc2VTdHJlYW17Y29uc3RydWN0b3IoZSl7aWYoc3VwZXIoKSx0aGlzLl9yYXdNaW5CdWZmZXJMZW5ndGg9ZXx8MCx0aGlzLnBvcz0wLHRoaXMuYnVmZmVyTGVuZ3RoPTAsdGhpcy5lb2Y9ITEsdGhpcy5idWZmZXI9aSx0aGlzLm1pbkJ1ZmZlckxlbmd0aD01MTIsZSlmb3IoO3RoaXMubWluQnVmZmVyTGVuZ3RoPGU7KXRoaXMubWluQnVmZmVyTGVuZ3RoKj0yfWdldCBpc0VtcHR5KCl7Zm9yKDshdGhpcy5lb2YmJjA9PT10aGlzLmJ1ZmZlckxlbmd0aDspdGhpcy5yZWFkQmxvY2soKTtyZXR1cm4gMD09PXRoaXMuYnVmZmVyTGVuZ3RofWVuc3VyZUJ1ZmZlcihlKXtjb25zdCB0PXRoaXMuYnVmZmVyO2lmKGU8PXQuYnl0ZUxlbmd0aClyZXR1cm4gdDtsZXQgcj10aGlzLm1pbkJ1ZmZlckxlbmd0aDtmb3IoO3I8ZTspcio9Mjtjb25zdCBuPW5ldyBVaW50OEFycmF5KHIpO3JldHVybiBuLnNldCh0KSx0aGlzLmJ1ZmZlcj1ufWdldEJ5dGUoKXtjb25zdCBlPXRoaXMucG9zO2Zvcig7dGhpcy5idWZmZXJMZW5ndGg8PWU7KXtpZih0aGlzLmVvZilyZXR1cm4tMTt0aGlzLnJlYWRCbG9jaygpfXJldHVybiB0aGlzLmJ1ZmZlclt0aGlzLnBvcysrXX1nZXRCeXRlcyhlKXtjb25zdCB0PXRoaXMucG9zO2xldCByO2lmKGUpe2Zvcih0aGlzLmVuc3VyZUJ1ZmZlcih0K2UpLHI9dCtlOyF0aGlzLmVvZiYmdGhpcy5idWZmZXJMZW5ndGg8cjspdGhpcy5yZWFkQmxvY2soKTtjb25zdCBuPXRoaXMuYnVmZmVyTGVuZ3RoO3I+biYmKHI9bil9ZWxzZXtmb3IoOyF0aGlzLmVvZjspdGhpcy5yZWFkQmxvY2soKTtyPXRoaXMuYnVmZmVyTGVuZ3RofXJldHVybiB0aGlzLnBvcz1yLHRoaXMuYnVmZmVyLnN1YmFycmF5KHQscil9cmVzZXQoKXt0aGlzLnBvcz0wfW1ha2VTdWJTdHJlYW0oZSx0KXtsZXQgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbDtpZih2b2lkIDA9PT10KWZvcig7IXRoaXMuZW9mOyl0aGlzLnJlYWRCbG9jaygpO2Vsc2V7Y29uc3Qgcj1lK3Q7Zm9yKDt0aGlzLmJ1ZmZlckxlbmd0aDw9ciYmIXRoaXMuZW9mOyl0aGlzLnJlYWRCbG9jaygpfXJldHVybiBuZXcgYS5TdHJlYW0odGhpcy5idWZmZXIsZSx0LHIpfWdldEJhc2VTdHJlYW1zKCl7cmV0dXJuIHRoaXMuc3RyP3RoaXMuc3RyLmdldEJhc2VTdHJlYW1zKCk6bnVsbH19dC5EZWNvZGVTdHJlYW09cyx0LlN0cmVhbXNTZXF1ZW5jZVN0cmVhbT1jbGFzcyBleHRlbmRzIHN7Y29uc3RydWN0b3IoZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGwscj0wO2Zvcihjb25zdCB0IG9mIGUpcis9dCBpbnN0YW5jZW9mIHM/dC5fcmF3TWluQnVmZmVyTGVuZ3RoOnQubGVuZ3RoO3N1cGVyKHIpLHRoaXMuc3RyZWFtcz1lLHRoaXMuX29uRXJyb3I9dH1yZWFkQmxvY2soKXtjb25zdCBlPXRoaXMuc3RyZWFtcztpZigwPT09ZS5sZW5ndGgpcmV0dXJuIHZvaWQodGhpcy5lb2Y9ITApO2NvbnN0IHQ9ZS5zaGlmdCgpO2xldCByO3RyeXtyPXQuZ2V0Qnl0ZXMoKX1jYXRjaChlKXt2YXIgbjtpZih0aGlzLl9vbkVycm9yKXJldHVybiB2b2lkIHRoaXMuX29uRXJyb3IoZSxudWxsPT09KG49dC5kaWN0KXx8dm9pZCAwPT09bj92b2lkIDA6bi5vYmpJZCk7dGhyb3cgZX1jb25zdCBhPXRoaXMuYnVmZmVyTGVuZ3RoLGk9YStyLmxlbmd0aDt0aGlzLmVuc3VyZUJ1ZmZlcihpKS5zZXQocixhKSx0aGlzLmJ1ZmZlckxlbmd0aD1pfWdldEJhc2VTdHJlYW1zKCl7Y29uc3QgZT1bXTtmb3IoY29uc3QgdCBvZiB0aGlzLnN0cmVhbXMpe2NvbnN0IHI9dC5nZXRCYXNlU3RyZWFtcygpO3ImJmUucHVzaCguLi5yKX1yZXR1cm4gZS5sZW5ndGg+MD9lOm51bGx9fX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkFzY2lpSGV4U3RyZWFtPXZvaWQgMDt2YXIgbj1yKDE2OCk7Y2xhc3MgYSBleHRlbmRzIG4uRGVjb2RlU3RyZWFte2NvbnN0cnVjdG9yKGUsdCl7dCYmKHQqPS41KSxzdXBlcih0KSx0aGlzLnN0cj1lLHRoaXMuZGljdD1lLmRpY3QsdGhpcy5maXJzdERpZ2l0PS0xfXJlYWRCbG9jaygpe2NvbnN0IGU9dGhpcy5zdHIuZ2V0Qnl0ZXMoOGUzKTtpZighZS5sZW5ndGgpcmV0dXJuIHZvaWQodGhpcy5lb2Y9ITApO2NvbnN0IHQ9ZS5sZW5ndGgrMT4+MSxyPXRoaXMuZW5zdXJlQnVmZmVyKHRoaXMuYnVmZmVyTGVuZ3RoK3QpO2xldCBuPXRoaXMuYnVmZmVyTGVuZ3RoLGE9dGhpcy5maXJzdERpZ2l0O2Zvcihjb25zdCB0IG9mIGUpe2xldCBlO2lmKHQ+PTQ4JiZ0PD01NyllPTE1JnQ7ZWxzZXtpZighKHQ+PTY1JiZ0PD03MHx8dD49OTcmJnQ8PTEwMikpe2lmKDYyPT09dCl7dGhpcy5lb2Y9ITA7YnJlYWt9Y29udGludWV9ZT05KygxNSZ0KX1hPDA/YT1lOihyW24rK109YTw8NHxlLGE9LTEpfWE+PTAmJnRoaXMuZW9mJiYocltuKytdPWE8PDQsYT0tMSksdGhpcy5maXJzdERpZ2l0PWEsdGhpcy5idWZmZXJMZW5ndGg9bn19dC5Bc2NpaUhleFN0cmVhbT1hfSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQ0NJVFRGYXhTdHJlYW09dm9pZCAwO3ZhciBuPXIoMTcxKSxhPXIoMTY4KSxpPXIoMTUwKTtjbGFzcyBzIGV4dGVuZHMgYS5EZWNvZGVTdHJlYW17Y29uc3RydWN0b3IoZSx0LHIpe3N1cGVyKHQpLHRoaXMuc3RyPWUsdGhpcy5kaWN0PWUuZGljdCxyIGluc3RhbmNlb2YgaS5EaWN0fHwocj1pLkRpY3QuZW1wdHkpO2NvbnN0IGE9e25leHQ6KCk9PmUuZ2V0Qnl0ZSgpfTt0aGlzLmNjaXR0RmF4RGVjb2Rlcj1uZXcgbi5DQ0lUVEZheERlY29kZXIoYSx7SzpyLmdldCgiSyIpLEVuZE9mTGluZTpyLmdldCgiRW5kT2ZMaW5lIiksRW5jb2RlZEJ5dGVBbGlnbjpyLmdldCgiRW5jb2RlZEJ5dGVBbGlnbiIpLENvbHVtbnM6ci5nZXQoIkNvbHVtbnMiKSxSb3dzOnIuZ2V0KCJSb3dzIiksRW5kT2ZCbG9jazpyLmdldCgiRW5kT2ZCbG9jayIpLEJsYWNrSXMxOnIuZ2V0KCJCbGFja0lzMSIpfSl9cmVhZEJsb2NrKCl7Zm9yKDshdGhpcy5lb2Y7KXtjb25zdCBlPXRoaXMuY2NpdHRGYXhEZWNvZGVyLnJlYWROZXh0Q2hhcigpO2lmKC0xPT09ZSlyZXR1cm4gdm9pZCh0aGlzLmVvZj0hMCk7dGhpcy5lbnN1cmVCdWZmZXIodGhpcy5idWZmZXJMZW5ndGgrMSksdGhpcy5idWZmZXJbdGhpcy5idWZmZXJMZW5ndGgrK109ZX19fXQuQ0NJVFRGYXhTdHJlYW09c30sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkNDSVRURmF4RGVjb2Rlcj12b2lkIDAscigyKSxyKDg0KSxyKDkzKSxyKDk0KSxyKDk3KSxyKDk5KSxyKDEwMSkscigxMDUpLHIoMTA4KSxyKDExNSk7dmFyIG49cigxNDQpO2NvbnN0IGE9LTEsaT1bWy0xLC0xXSxbLTEsLTFdLFs3LDhdLFs3LDddLFs2LDZdLFs2LDZdLFs2LDVdLFs2LDVdLFs0LDBdLFs0LDBdLFs0LDBdLFs0LDBdLFs0LDBdLFs0LDBdLFs0LDBdLFs0LDBdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdXSxzPVtbLTEsLTFdLFsxMiwtMl0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFsxMSwxNzkyXSxbMTEsMTc5Ml0sWzEyLDE5ODRdLFsxMiwyMDQ4XSxbMTIsMjExMl0sWzEyLDIxNzZdLFsxMiwyMjQwXSxbMTIsMjMwNF0sWzExLDE4NTZdLFsxMSwxODU2XSxbMTEsMTkyMF0sWzExLDE5MjBdLFsxMiwyMzY4XSxbMTIsMjQzMl0sWzEyLDI0OTZdLFsxMiwyNTYwXV0sbz1bWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbOCwyOV0sWzgsMjldLFs4LDMwXSxbOCwzMF0sWzgsNDVdLFs4LDQ1XSxbOCw0Nl0sWzgsNDZdLFs3LDIyXSxbNywyMl0sWzcsMjJdLFs3LDIyXSxbNywyM10sWzcsMjNdLFs3LDIzXSxbNywyM10sWzgsNDddLFs4LDQ3XSxbOCw0OF0sWzgsNDhdLFs2LDEzXSxbNiwxM10sWzYsMTNdLFs2LDEzXSxbNiwxM10sWzYsMTNdLFs2LDEzXSxbNiwxM10sWzcsMjBdLFs3LDIwXSxbNywyMF0sWzcsMjBdLFs4LDMzXSxbOCwzM10sWzgsMzRdLFs4LDM0XSxbOCwzNV0sWzgsMzVdLFs4LDM2XSxbOCwzNl0sWzgsMzddLFs4LDM3XSxbOCwzOF0sWzgsMzhdLFs3LDE5XSxbNywxOV0sWzcsMTldLFs3LDE5XSxbOCwzMV0sWzgsMzFdLFs4LDMyXSxbOCwzMl0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMTJdLFs2LDEyXSxbNiwxMl0sWzYsMTJdLFs2LDEyXSxbNiwxMl0sWzYsMTJdLFs2LDEyXSxbOCw1M10sWzgsNTNdLFs4LDU0XSxbOCw1NF0sWzcsMjZdLFs3LDI2XSxbNywyNl0sWzcsMjZdLFs4LDM5XSxbOCwzOV0sWzgsNDBdLFs4LDQwXSxbOCw0MV0sWzgsNDFdLFs4LDQyXSxbOCw0Ml0sWzgsNDNdLFs4LDQzXSxbOCw0NF0sWzgsNDRdLFs3LDIxXSxbNywyMV0sWzcsMjFdLFs3LDIxXSxbNywyOF0sWzcsMjhdLFs3LDI4XSxbNywyOF0sWzgsNjFdLFs4LDYxXSxbOCw2Ml0sWzgsNjJdLFs4LDYzXSxbOCw2M10sWzgsMF0sWzgsMF0sWzgsMzIwXSxbOCwzMjBdLFs4LDM4NF0sWzgsMzg0XSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs3LDI3XSxbNywyN10sWzcsMjddLFs3LDI3XSxbOCw1OV0sWzgsNTldLFs4LDYwXSxbOCw2MF0sWzksMTQ3Ml0sWzksMTUzNl0sWzksMTYwMF0sWzksMTcyOF0sWzcsMThdLFs3LDE4XSxbNywxOF0sWzcsMThdLFs3LDI0XSxbNywyNF0sWzcsMjRdLFs3LDI0XSxbOCw0OV0sWzgsNDldLFs4LDUwXSxbOCw1MF0sWzgsNTFdLFs4LDUxXSxbOCw1Ml0sWzgsNTJdLFs3LDI1XSxbNywyNV0sWzcsMjVdLFs3LDI1XSxbOCw1NV0sWzgsNTVdLFs4LDU2XSxbOCw1Nl0sWzgsNTddLFs4LDU3XSxbOCw1OF0sWzgsNThdLFs2LDE5Ml0sWzYsMTkyXSxbNiwxOTJdLFs2LDE5Ml0sWzYsMTkyXSxbNiwxOTJdLFs2LDE5Ml0sWzYsMTkyXSxbNiwxNjY0XSxbNiwxNjY0XSxbNiwxNjY0XSxbNiwxNjY0XSxbNiwxNjY0XSxbNiwxNjY0XSxbNiwxNjY0XSxbNiwxNjY0XSxbOCw0NDhdLFs4LDQ0OF0sWzgsNTEyXSxbOCw1MTJdLFs5LDcwNF0sWzksNzY4XSxbOCw2NDBdLFs4LDY0MF0sWzgsNTc2XSxbOCw1NzZdLFs5LDgzMl0sWzksODk2XSxbOSw5NjBdLFs5LDEwMjRdLFs5LDEwODhdLFs5LDExNTJdLFs5LDEyMTZdLFs5LDEyODBdLFs5LDEzNDRdLFs5LDE0MDhdLFs3LDI1Nl0sWzcsMjU2XSxbNywyNTZdLFs3LDI1Nl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNiwxNl0sWzYsMTZdLFs2LDE2XSxbNiwxNl0sWzYsMTZdLFs2LDE2XSxbNiwxNl0sWzYsMTZdLFs2LDE3XSxbNiwxN10sWzYsMTddLFs2LDE3XSxbNiwxN10sWzYsMTddLFs2LDE3XSxbNiwxN10sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzYsMTRdLFs2LDE0XSxbNiwxNF0sWzYsMTRdLFs2LDE0XSxbNiwxNF0sWzYsMTRdLFs2LDE0XSxbNiwxNV0sWzYsMTVdLFs2LDE1XSxbNiwxNV0sWzYsMTVdLFs2LDE1XSxbNiwxNV0sWzYsMTVdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XV0sYz1bWy0xLC0xXSxbLTEsLTFdLFsxMiwtMl0sWzEyLC0yXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFsxMSwxNzkyXSxbMTEsMTc5Ml0sWzExLDE3OTJdLFsxMSwxNzkyXSxbMTIsMTk4NF0sWzEyLDE5ODRdLFsxMiwyMDQ4XSxbMTIsMjA0OF0sWzEyLDIxMTJdLFsxMiwyMTEyXSxbMTIsMjE3Nl0sWzEyLDIxNzZdLFsxMiwyMjQwXSxbMTIsMjI0MF0sWzEyLDIzMDRdLFsxMiwyMzA0XSxbMTEsMTg1Nl0sWzExLDE4NTZdLFsxMSwxODU2XSxbMTEsMTg1Nl0sWzExLDE5MjBdLFsxMSwxOTIwXSxbMTEsMTkyMF0sWzExLDE5MjBdLFsxMiwyMzY4XSxbMTIsMjM2OF0sWzEyLDI0MzJdLFsxMiwyNDMyXSxbMTIsMjQ5Nl0sWzEyLDI0OTZdLFsxMiwyNTYwXSxbMTIsMjU2MF0sWzEwLDE4XSxbMTAsMThdLFsxMCwxOF0sWzEwLDE4XSxbMTAsMThdLFsxMCwxOF0sWzEwLDE4XSxbMTAsMThdLFsxMiw1Ml0sWzEyLDUyXSxbMTMsNjQwXSxbMTMsNzA0XSxbMTMsNzY4XSxbMTMsODMyXSxbMTIsNTVdLFsxMiw1NV0sWzEyLDU2XSxbMTIsNTZdLFsxMywxMjgwXSxbMTMsMTM0NF0sWzEzLDE0MDhdLFsxMywxNDcyXSxbMTIsNTldLFsxMiw1OV0sWzEyLDYwXSxbMTIsNjBdLFsxMywxNTM2XSxbMTMsMTYwMF0sWzExLDI0XSxbMTEsMjRdLFsxMSwyNF0sWzExLDI0XSxbMTEsMjVdLFsxMSwyNV0sWzExLDI1XSxbMTEsMjVdLFsxMywxNjY0XSxbMTMsMTcyOF0sWzEyLDMyMF0sWzEyLDMyMF0sWzEyLDM4NF0sWzEyLDM4NF0sWzEyLDQ0OF0sWzEyLDQ0OF0sWzEzLDUxMl0sWzEzLDU3Nl0sWzEyLDUzXSxbMTIsNTNdLFsxMiw1NF0sWzEyLDU0XSxbMTMsODk2XSxbMTMsOTYwXSxbMTMsMTAyNF0sWzEzLDEwODhdLFsxMywxMTUyXSxbMTMsMTIxNl0sWzEwLDY0XSxbMTAsNjRdLFsxMCw2NF0sWzEwLDY0XSxbMTAsNjRdLFsxMCw2NF0sWzEwLDY0XSxbMTAsNjRdXSxsPVtbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzExLDIzXSxbMTEsMjNdLFsxMiw1MF0sWzEyLDUxXSxbMTIsNDRdLFsxMiw0NV0sWzEyLDQ2XSxbMTIsNDddLFsxMiw1N10sWzEyLDU4XSxbMTIsNjFdLFsxMiwyNTZdLFsxMCwxNl0sWzEwLDE2XSxbMTAsMTZdLFsxMCwxNl0sWzEwLDE3XSxbMTAsMTddLFsxMCwxN10sWzEwLDE3XSxbMTIsNDhdLFsxMiw0OV0sWzEyLDYyXSxbMTIsNjNdLFsxMiwzMF0sWzEyLDMxXSxbMTIsMzJdLFsxMiwzM10sWzEyLDQwXSxbMTIsNDFdLFsxMSwyMl0sWzExLDIyXSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs5LDE1XSxbOSwxNV0sWzksMTVdLFs5LDE1XSxbOSwxNV0sWzksMTVdLFs5LDE1XSxbOSwxNV0sWzEyLDEyOF0sWzEyLDE5Ml0sWzEyLDI2XSxbMTIsMjddLFsxMiwyOF0sWzEyLDI5XSxbMTEsMTldLFsxMSwxOV0sWzExLDIwXSxbMTEsMjBdLFsxMiwzNF0sWzEyLDM1XSxbMTIsMzZdLFsxMiwzN10sWzEyLDM4XSxbMTIsMzldLFsxMSwyMV0sWzExLDIxXSxbMTIsNDJdLFsxMiw0M10sWzEwLDBdLFsxMCwwXSxbMTAsMF0sWzEwLDBdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl1dLGg9W1stMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWzYsOV0sWzYsOF0sWzUsN10sWzUsN10sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl1dO3QuQ0NJVFRGYXhEZWNvZGVyPWNsYXNze2NvbnN0cnVjdG9yKGUpe3ZhciB0O2xldCByLG49YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2lmKCFlfHwiZnVuY3Rpb24iIT10eXBlb2YgZS5uZXh0KXRocm93IG5ldyBFcnJvcignQ0NJVFRGYXhEZWNvZGVyIC0gaW52YWxpZCAic291cmNlIiBwYXJhbWV0ZXIuJyk7Zm9yKHRoaXMuc291cmNlPWUsdGhpcy5lb2Y9ITEsdGhpcy5lbmNvZGluZz1uLkt8fDAsdGhpcy5lb2xpbmU9bi5FbmRPZkxpbmV8fCExLHRoaXMuYnl0ZUFsaWduPW4uRW5jb2RlZEJ5dGVBbGlnbnx8ITEsdGhpcy5jb2x1bW5zPW4uQ29sdW1uc3x8MTcyOCx0aGlzLnJvd3M9bi5Sb3dzfHwwLHRoaXMuZW9ibG9jaz1udWxsPT09KHQ9bi5FbmRPZkJsb2NrKXx8dm9pZCAwPT09dHx8dCx0aGlzLmJsYWNrPW4uQmxhY2tJczF8fCExLHRoaXMuY29kaW5nTGluZT1uZXcgVWludDMyQXJyYXkodGhpcy5jb2x1bW5zKzEpLHRoaXMucmVmTGluZT1uZXcgVWludDMyQXJyYXkodGhpcy5jb2x1bW5zKzIpLHRoaXMuY29kaW5nTGluZVswXT10aGlzLmNvbHVtbnMsdGhpcy5jb2RpbmdQb3M9MCx0aGlzLnJvdz0wLHRoaXMubmV4dExpbmUyRD10aGlzLmVuY29kaW5nPDAsdGhpcy5pbnB1dEJpdHM9MCx0aGlzLmlucHV0QnVmPTAsdGhpcy5vdXRwdXRCaXRzPTAsdGhpcy5yb3dzRG9uZT0hMTswPT09KHI9dGhpcy5fbG9va0JpdHMoMTIpKTspdGhpcy5fZWF0Qml0cygxKTsxPT09ciYmdGhpcy5fZWF0Qml0cygxMiksdGhpcy5lbmNvZGluZz4wJiYodGhpcy5uZXh0TGluZTJEPSF0aGlzLl9sb29rQml0cygxKSx0aGlzLl9lYXRCaXRzKDEpKX1yZWFkTmV4dENoYXIoKXtpZih0aGlzLmVvZilyZXR1cm4tMTtjb25zdCBlPXRoaXMucmVmTGluZSx0PXRoaXMuY29kaW5nTGluZSxyPXRoaXMuY29sdW1ucztsZXQgaSxzLG8sYyxsO2lmKDA9PT10aGlzLm91dHB1dEJpdHMpe2lmKHRoaXMucm93c0RvbmUmJih0aGlzLmVvZj0hMCksdGhpcy5lb2YpcmV0dXJuLTE7bGV0IG8sbCxoO2lmKHRoaXMuZXJyPSExLHRoaXMubmV4dExpbmUyRCl7Zm9yKGM9MDt0W2NdPHI7KytjKWVbY109dFtjXTtmb3IoZVtjKytdPXIsZVtjXT1yLHRbMF09MCx0aGlzLmNvZGluZ1Bvcz0wLGk9MCxzPTA7dFt0aGlzLmNvZGluZ1Bvc108cjspc3dpdGNoKG89dGhpcy5fZ2V0VHdvRGltQ29kZSgpLG8pe2Nhc2UgMDp0aGlzLl9hZGRQaXhlbHMoZVtpKzFdLHMpLGVbaSsxXTxyJiYoaSs9Mik7YnJlYWs7Y2FzZSAxOmlmKG89bD0wLHMpe2Rve28rPWg9dGhpcy5fZ2V0QmxhY2tDb2RlKCl9d2hpbGUoaD49NjQpO2Rve2wrPWg9dGhpcy5fZ2V0V2hpdGVDb2RlKCl9d2hpbGUoaD49NjQpfWVsc2V7ZG97bys9aD10aGlzLl9nZXRXaGl0ZUNvZGUoKX13aGlsZShoPj02NCk7ZG97bCs9aD10aGlzLl9nZXRCbGFja0NvZGUoKX13aGlsZShoPj02NCl9Zm9yKHRoaXMuX2FkZFBpeGVscyh0W3RoaXMuY29kaW5nUG9zXStvLHMpLHRbdGhpcy5jb2RpbmdQb3NdPHImJnRoaXMuX2FkZFBpeGVscyh0W3RoaXMuY29kaW5nUG9zXStsLDFecyk7ZVtpXTw9dFt0aGlzLmNvZGluZ1Bvc10mJmVbaV08cjspaSs9MjticmVhaztjYXNlIDc6aWYodGhpcy5fYWRkUGl4ZWxzKGVbaV0rMyxzKSxzXj0xLHRbdGhpcy5jb2RpbmdQb3NdPHIpZm9yKCsraTtlW2ldPD10W3RoaXMuY29kaW5nUG9zXSYmZVtpXTxyOylpKz0yO2JyZWFrO2Nhc2UgNTppZih0aGlzLl9hZGRQaXhlbHMoZVtpXSsyLHMpLHNePTEsdFt0aGlzLmNvZGluZ1Bvc108cilmb3IoKytpO2VbaV08PXRbdGhpcy5jb2RpbmdQb3NdJiZlW2ldPHI7KWkrPTI7YnJlYWs7Y2FzZSAzOmlmKHRoaXMuX2FkZFBpeGVscyhlW2ldKzEscyksc149MSx0W3RoaXMuY29kaW5nUG9zXTxyKWZvcigrK2k7ZVtpXTw9dFt0aGlzLmNvZGluZ1Bvc10mJmVbaV08cjspaSs9MjticmVhaztjYXNlIDI6aWYodGhpcy5fYWRkUGl4ZWxzKGVbaV0scyksc149MSx0W3RoaXMuY29kaW5nUG9zXTxyKWZvcigrK2k7ZVtpXTw9dFt0aGlzLmNvZGluZ1Bvc10mJmVbaV08cjspaSs9MjticmVhaztjYXNlIDg6aWYodGhpcy5fYWRkUGl4ZWxzTmVnKGVbaV0tMyxzKSxzXj0xLHRbdGhpcy5jb2RpbmdQb3NdPHIpZm9yKGk+MD8tLWk6KytpO2VbaV08PXRbdGhpcy5jb2RpbmdQb3NdJiZlW2ldPHI7KWkrPTI7YnJlYWs7Y2FzZSA2OmlmKHRoaXMuX2FkZFBpeGVsc05lZyhlW2ldLTIscyksc149MSx0W3RoaXMuY29kaW5nUG9zXTxyKWZvcihpPjA/LS1pOisraTtlW2ldPD10W3RoaXMuY29kaW5nUG9zXSYmZVtpXTxyOylpKz0yO2JyZWFrO2Nhc2UgNDppZih0aGlzLl9hZGRQaXhlbHNOZWcoZVtpXS0xLHMpLHNePTEsdFt0aGlzLmNvZGluZ1Bvc108cilmb3IoaT4wPy0taTorK2k7ZVtpXTw9dFt0aGlzLmNvZGluZ1Bvc10mJmVbaV08cjspaSs9MjticmVhaztjYXNlIGE6dGhpcy5fYWRkUGl4ZWxzKHIsMCksdGhpcy5lb2Y9ITA7YnJlYWs7ZGVmYXVsdDooMCxuLmluZm8pKCJiYWQgMmQgY29kZSIpLHRoaXMuX2FkZFBpeGVscyhyLDApLHRoaXMuZXJyPSEwfX1lbHNlIGZvcih0WzBdPTAsdGhpcy5jb2RpbmdQb3M9MCxzPTA7dFt0aGlzLmNvZGluZ1Bvc108cjspe2lmKG89MCxzKWRve28rPWg9dGhpcy5fZ2V0QmxhY2tDb2RlKCl9d2hpbGUoaD49NjQpO2Vsc2UgZG97bys9aD10aGlzLl9nZXRXaGl0ZUNvZGUoKX13aGlsZShoPj02NCk7dGhpcy5fYWRkUGl4ZWxzKHRbdGhpcy5jb2RpbmdQb3NdK28scyksc149MX1sZXQgdT0hMTtpZih0aGlzLmJ5dGVBbGlnbiYmKHRoaXMuaW5wdXRCaXRzJj0tOCksdGhpcy5lb2Jsb2NrfHx0aGlzLnJvdyE9PXRoaXMucm93cy0xKXtpZihvPXRoaXMuX2xvb2tCaXRzKDEyKSx0aGlzLmVvbGluZSlmb3IoO28hPT1hJiYxIT09bzspdGhpcy5fZWF0Qml0cygxKSxvPXRoaXMuX2xvb2tCaXRzKDEyKTtlbHNlIGZvcig7MD09PW87KXRoaXMuX2VhdEJpdHMoMSksbz10aGlzLl9sb29rQml0cygxMik7MT09PW8/KHRoaXMuX2VhdEJpdHMoMTIpLHU9ITApOm89PT1hJiYodGhpcy5lb2Y9ITApfWVsc2UgdGhpcy5yb3dzRG9uZT0hMDtpZighdGhpcy5lb2YmJnRoaXMuZW5jb2Rpbmc+MCYmIXRoaXMucm93c0RvbmUmJih0aGlzLm5leHRMaW5lMkQ9IXRoaXMuX2xvb2tCaXRzKDEpLHRoaXMuX2VhdEJpdHMoMSkpLHRoaXMuZW9ibG9jayYmdSYmdGhpcy5ieXRlQWxpZ24pe2lmKG89dGhpcy5fbG9va0JpdHMoMTIpLDE9PT1vKXtpZih0aGlzLl9lYXRCaXRzKDEyKSx0aGlzLmVuY29kaW5nPjAmJih0aGlzLl9sb29rQml0cygxKSx0aGlzLl9lYXRCaXRzKDEpKSx0aGlzLmVuY29kaW5nPj0wKWZvcihjPTA7Yzw0OysrYylvPXRoaXMuX2xvb2tCaXRzKDEyKSwxIT09byYmKDAsbi5pbmZvKSgiYmFkIHJ0YyBjb2RlOiAiK28pLHRoaXMuX2VhdEJpdHMoMTIpLHRoaXMuZW5jb2Rpbmc+MCYmKHRoaXMuX2xvb2tCaXRzKDEpLHRoaXMuX2VhdEJpdHMoMSkpO3RoaXMuZW9mPSEwfX1lbHNlIGlmKHRoaXMuZXJyJiZ0aGlzLmVvbGluZSl7Zm9yKDs7KXtpZihvPXRoaXMuX2xvb2tCaXRzKDEzKSxvPT09YSlyZXR1cm4gdGhpcy5lb2Y9ITAsLTE7aWYobz4+MT09MSlicmVhazt0aGlzLl9lYXRCaXRzKDEpfXRoaXMuX2VhdEJpdHMoMTIpLHRoaXMuZW5jb2Rpbmc+MCYmKHRoaXMuX2VhdEJpdHMoMSksdGhpcy5uZXh0TGluZTJEPSEoMSZvKSl9dGhpcy5vdXRwdXRCaXRzPXRbMF0+MD90W3RoaXMuY29kaW5nUG9zPTBdOnRbdGhpcy5jb2RpbmdQb3M9MV0sdGhpcy5yb3crK31pZih0aGlzLm91dHB1dEJpdHM+PTgpbD0xJnRoaXMuY29kaW5nUG9zPzA6MjU1LHRoaXMub3V0cHV0Qml0cy09OCwwPT09dGhpcy5vdXRwdXRCaXRzJiZ0W3RoaXMuY29kaW5nUG9zXTxyJiYodGhpcy5jb2RpbmdQb3MrKyx0aGlzLm91dHB1dEJpdHM9dFt0aGlzLmNvZGluZ1Bvc10tdFt0aGlzLmNvZGluZ1Bvcy0xXSk7ZWxzZXtvPTgsbD0wO2Rve2lmKCJudW1iZXIiIT10eXBlb2YgdGhpcy5vdXRwdXRCaXRzKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCdJbnZhbGlkIC9DQ0lUVEZheERlY29kZSBkYXRhLCAib3V0cHV0Qml0cyIgbXVzdCBiZSBhIG51bWJlci4nKTt0aGlzLm91dHB1dEJpdHM+bz8obDw8PW8sMSZ0aGlzLmNvZGluZ1Bvc3x8KGx8PTI1NT4+OC1vKSx0aGlzLm91dHB1dEJpdHMtPW8sbz0wKToobDw8PXRoaXMub3V0cHV0Qml0cywxJnRoaXMuY29kaW5nUG9zfHwobHw9MjU1Pj44LXRoaXMub3V0cHV0Qml0cyksby09dGhpcy5vdXRwdXRCaXRzLHRoaXMub3V0cHV0Qml0cz0wLHRbdGhpcy5jb2RpbmdQb3NdPHI/KHRoaXMuY29kaW5nUG9zKyssdGhpcy5vdXRwdXRCaXRzPXRbdGhpcy5jb2RpbmdQb3NdLXRbdGhpcy5jb2RpbmdQb3MtMV0pOm8+MCYmKGw8PD1vLG89MCkpfXdoaWxlKG8pfXJldHVybiB0aGlzLmJsYWNrJiYobF49MjU1KSxsfV9hZGRQaXhlbHMoZSx0KXtjb25zdCByPXRoaXMuY29kaW5nTGluZTtsZXQgYT10aGlzLmNvZGluZ1BvcztlPnJbYV0mJihlPnRoaXMuY29sdW1ucyYmKCgwLG4uaW5mbykoInJvdyBpcyB3cm9uZyBsZW5ndGgiKSx0aGlzLmVycj0hMCxlPXRoaXMuY29sdW1ucyksMSZhXnQmJisrYSxyW2FdPWUpLHRoaXMuY29kaW5nUG9zPWF9X2FkZFBpeGVsc05lZyhlLHQpe2NvbnN0IHI9dGhpcy5jb2RpbmdMaW5lO2xldCBhPXRoaXMuY29kaW5nUG9zO2lmKGU+clthXSllPnRoaXMuY29sdW1ucyYmKCgwLG4uaW5mbykoInJvdyBpcyB3cm9uZyBsZW5ndGgiKSx0aGlzLmVycj0hMCxlPXRoaXMuY29sdW1ucyksMSZhXnQmJisrYSxyW2FdPWU7ZWxzZSBpZihlPHJbYV0pe2ZvcihlPDAmJigoMCxuLmluZm8pKCJpbnZhbGlkIGNvZGUiKSx0aGlzLmVycj0hMCxlPTApO2E+MCYmZTxyW2EtMV07KS0tYTtyW2FdPWV9dGhpcy5jb2RpbmdQb3M9YX1fZmluZFRhYmxlQ29kZShlLHQscixuKXtjb25zdCBpPW58fDA7Zm9yKGxldCBuPWU7bjw9dDsrK24pe2xldCBlPXRoaXMuX2xvb2tCaXRzKG4pO2lmKGU9PT1hKXJldHVyblshMCwxLCExXTtpZihuPHQmJihlPDw9dC1uKSwhaXx8ZT49aSl7Y29uc3QgdD1yW2UtaV07aWYodFswXT09PW4pcmV0dXJuIHRoaXMuX2VhdEJpdHMobiksWyEwLHRbMV0sITBdfX1yZXR1cm5bITEsMCwhMV19X2dldFR3b0RpbUNvZGUoKXtsZXQgZSx0PTA7aWYodGhpcy5lb2Jsb2NrKXt2YXIgcjtpZih0PXRoaXMuX2xvb2tCaXRzKDcpLGU9aVt0XSwobnVsbD09PShyPWUpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyWzBdKT4wKXJldHVybiB0aGlzLl9lYXRCaXRzKGVbMF0pLGVbMV19ZWxzZXtjb25zdCBlPXRoaXMuX2ZpbmRUYWJsZUNvZGUoMSw3LGkpO2lmKGVbMF0mJmVbMl0pcmV0dXJuIGVbMV19cmV0dXJuKDAsbi5pbmZvKSgiQmFkIHR3byBkaW0gY29kZSIpLGF9X2dldFdoaXRlQ29kZSgpe2xldCBlLHQ9MDtpZih0aGlzLmVvYmxvY2spe2lmKHQ9dGhpcy5fbG9va0JpdHMoMTIpLHQ9PT1hKXJldHVybiAxO2lmKGU9dD4+NT09MD9zW3RdOm9bdD4+M10sZVswXT4wKXJldHVybiB0aGlzLl9lYXRCaXRzKGVbMF0pLGVbMV19ZWxzZXtsZXQgZT10aGlzLl9maW5kVGFibGVDb2RlKDEsOSxvKTtpZihlWzBdKXJldHVybiBlWzFdO2lmKGU9dGhpcy5fZmluZFRhYmxlQ29kZSgxMSwxMixzKSxlWzBdKXJldHVybiBlWzFdfXJldHVybigwLG4uaW5mbykoImJhZCB3aGl0ZSBjb2RlIiksdGhpcy5fZWF0Qml0cygxKSwxfV9nZXRCbGFja0NvZGUoKXtsZXQgZSx0O2lmKHRoaXMuZW9ibG9jayl7aWYoZT10aGlzLl9sb29rQml0cygxMyksZT09PWEpcmV0dXJuIDE7aWYodD1lPj43PT0wP2NbZV06ZT4+OT09MCYmZT4+NyE9MD9sWyhlPj4xKS02NF06aFtlPj43XSx0WzBdPjApcmV0dXJuIHRoaXMuX2VhdEJpdHModFswXSksdFsxXX1lbHNle2xldCBlPXRoaXMuX2ZpbmRUYWJsZUNvZGUoMiw2LGgpO2lmKGVbMF0pcmV0dXJuIGVbMV07aWYoZT10aGlzLl9maW5kVGFibGVDb2RlKDcsMTIsbCw2NCksZVswXSlyZXR1cm4gZVsxXTtpZihlPXRoaXMuX2ZpbmRUYWJsZUNvZGUoMTAsMTMsYyksZVswXSlyZXR1cm4gZVsxXX1yZXR1cm4oMCxuLmluZm8pKCJiYWQgYmxhY2sgY29kZSIpLHRoaXMuX2VhdEJpdHMoMSksMX1fbG9va0JpdHMoZSl7bGV0IHQ7Zm9yKDt0aGlzLmlucHV0Qml0czxlOyl7aWYoLTE9PT0odD10aGlzLnNvdXJjZS5uZXh0KCkpKXJldHVybiAwPT09dGhpcy5pbnB1dEJpdHM/YTp0aGlzLmlucHV0QnVmPDxlLXRoaXMuaW5wdXRCaXRzJjY1NTM1Pj4xNi1lO3RoaXMuaW5wdXRCdWY9dGhpcy5pbnB1dEJ1Zjw8OHx0LHRoaXMuaW5wdXRCaXRzKz04fXJldHVybiB0aGlzLmlucHV0QnVmPj50aGlzLmlucHV0Qml0cy1lJjY1NTM1Pj4xNi1lfV9lYXRCaXRzKGUpeyh0aGlzLmlucHV0Qml0cy09ZSk8MCYmKHRoaXMuaW5wdXRCaXRzPTApfX19LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5GbGF0ZVN0cmVhbT12b2lkIDAscig4NCkscig5Mykscig5NCkscig5Nykscig5OSkscigxMDEpLHIoMTA1KSxyKDEwOCkscigxMTUpO3ZhciBuPXIoMTY4KSxhPXIoMTQ0KTtjb25zdCBpPW5ldyBJbnQzMkFycmF5KFsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSkscz1uZXcgSW50MzJBcnJheShbMyw0LDUsNiw3LDgsOSwxMCw2NTU0Nyw2NTU0OSw2NTU1MSw2NTU1MywxMzEwOTEsMTMxMDk1LDEzMTA5OSwxMzExMDMsMTk2NjQzLDE5NjY1MSwxOTY2NTksMTk2NjY3LDI2MjIxMSwyNjIyMjcsMjYyMjQzLDI2MjI1OSwzMjc4MTEsMzI3ODQzLDMyNzg3NSwzMjc5MDcsMjU4LDI1OCwyNThdKSxvPW5ldyBJbnQzMkFycmF5KFsxLDIsMyw0LDY1NTQxLDY1NTQzLDEzMTA4MSwxMzEwODUsMTk2NjI1LDE5NjYzMywyNjIxNzcsMjYyMTkzLDMyNzc0NSwzMjc3NzcsMzkzMzQ1LDM5MzQwOSw0NTkwMDksNDU5MTM3LDUyNDgwMSw1MjUwNTcsNTkwODQ5LDU5MTM2MSw2NTc0MDksNjU4NDMzLDcyNDk5Myw3MjcwNDEsNzk0NjI1LDc5ODcyMSw4NjgzNTMsODc2NTQ1XSksYz1bbmV3IEludDMyQXJyYXkoWzQ1OTAwOCw1MjQzNjgsNTI0MzA0LDUyNDU2OCw0NTkwMjQsNTI0NDAwLDUyNDMzNiw1OTAwMTYsNDU5MDE2LDUyNDM4NCw1MjQzMjAsNTg5OTg0LDUyNDI4OCw1MjQ0MTYsNTI0MzUyLDU5MDA0OCw0NTkwMTIsNTI0Mzc2LDUyNDMxMiw1ODk5NjgsNDU5MDI4LDUyNDQwOCw1MjQzNDQsNTkwMDMyLDQ1OTAyMCw1MjQzOTIsNTI0MzI4LDU5ZTQsNTI0Mjk2LDUyNDQyNCw1MjQzNjAsNTkwMDY0LDQ1OTAxMCw1MjQzNzIsNTI0MzA4LDUyNDU3Miw0NTkwMjYsNTI0NDA0LDUyNDM0MCw1OTAwMjQsNDU5MDE4LDUyNDM4OCw1MjQzMjQsNTg5OTkyLDUyNDI5Miw1MjQ0MjAsNTI0MzU2LDU5MDA1Niw0NTkwMTQsNTI0MzgwLDUyNDMxNiw1ODk5NzYsNDU5MDMwLDUyNDQxMiw1MjQzNDgsNTkwMDQwLDQ1OTAyMiw1MjQzOTYsNTI0MzMyLDU5MDAwOCw1MjQzMDAsNTI0NDI4LDUyNDM2NCw1OTAwNzIsNDU5MDA5LDUyNDM3MCw1MjQzMDYsNTI0NTcwLDQ1OTAyNSw1MjQ0MDIsNTI0MzM4LDU5MDAyMCw0NTkwMTcsNTI0Mzg2LDUyNDMyMiw1ODk5ODgsNTI0MjkwLDUyNDQxOCw1MjQzNTQsNTkwMDUyLDQ1OTAxMyw1MjQzNzgsNTI0MzE0LDU4OTk3Miw0NTkwMjksNTI0NDEwLDUyNDM0Niw1OTAwMzYsNDU5MDIxLDUyNDM5NCw1MjQzMzAsNTkwMDA0LDUyNDI5OCw1MjQ0MjYsNTI0MzYyLDU5MDA2OCw0NTkwMTEsNTI0Mzc0LDUyNDMxMCw1MjQ1NzQsNDU5MDI3LDUyNDQwNiw1MjQzNDIsNTkwMDI4LDQ1OTAxOSw1MjQzOTAsNTI0MzI2LDU4OTk5Niw1MjQyOTQsNTI0NDIyLDUyNDM1OCw1OTAwNjAsNDU5MDE1LDUyNDM4Miw1MjQzMTgsNTg5OTgwLDQ1OTAzMSw1MjQ0MTQsNTI0MzUwLDU5MDA0NCw0NTkwMjMsNTI0Mzk4LDUyNDMzNCw1OTAwMTIsNTI0MzAyLDUyNDQzMCw1MjQzNjYsNTkwMDc2LDQ1OTAwOCw1MjQzNjksNTI0MzA1LDUyNDU2OSw0NTkwMjQsNTI0NDAxLDUyNDMzNyw1OTAwMTgsNDU5MDE2LDUyNDM4NSw1MjQzMjEsNTg5OTg2LDUyNDI4OSw1MjQ0MTcsNTI0MzUzLDU5MDA1MCw0NTkwMTIsNTI0Mzc3LDUyNDMxMyw1ODk5NzAsNDU5MDI4LDUyNDQwOSw1MjQzNDUsNTkwMDM0LDQ1OTAyMCw1MjQzOTMsNTI0MzI5LDU5MDAwMiw1MjQyOTcsNTI0NDI1LDUyNDM2MSw1OTAwNjYsNDU5MDEwLDUyNDM3Myw1MjQzMDksNTI0NTczLDQ1OTAyNiw1MjQ0MDUsNTI0MzQxLDU5MDAyNiw0NTkwMTgsNTI0Mzg5LDUyNDMyNSw1ODk5OTQsNTI0MjkzLDUyNDQyMSw1MjQzNTcsNTkwMDU4LDQ1OTAxNCw1MjQzODEsNTI0MzE3LDU4OTk3OCw0NTkwMzAsNTI0NDEzLDUyNDM0OSw1OTAwNDIsNDU5MDIyLDUyNDM5Nyw1MjQzMzMsNTkwMDEwLDUyNDMwMSw1MjQ0MjksNTI0MzY1LDU5MDA3NCw0NTkwMDksNTI0MzcxLDUyNDMwNyw1MjQ1NzEsNDU5MDI1LDUyNDQwMyw1MjQzMzksNTkwMDIyLDQ1OTAxNyw1MjQzODcsNTI0MzIzLDU4OTk5MCw1MjQyOTEsNTI0NDE5LDUyNDM1NSw1OTAwNTQsNDU5MDEzLDUyNDM3OSw1MjQzMTUsNTg5OTc0LDQ1OTAyOSw1MjQ0MTEsNTI0MzQ3LDU5MDAzOCw0NTkwMjEsNTI0Mzk1LDUyNDMzMSw1OTAwMDYsNTI0Mjk5LDUyNDQyNyw1MjQzNjMsNTkwMDcwLDQ1OTAxMSw1MjQzNzUsNTI0MzExLDUyNDU3NSw0NTkwMjcsNTI0NDA3LDUyNDM0Myw1OTAwMzAsNDU5MDE5LDUyNDM5MSw1MjQzMjcsNTg5OTk4LDUyNDI5NSw1MjQ0MjMsNTI0MzU5LDU5MDA2Miw0NTkwMTUsNTI0MzgzLDUyNDMxOSw1ODk5ODIsNDU5MDMxLDUyNDQxNSw1MjQzNTEsNTkwMDQ2LDQ1OTAyMyw1MjQzOTksNTI0MzM1LDU5MDAxNCw1MjQzMDMsNTI0NDMxLDUyNDM2Nyw1OTAwNzgsNDU5MDA4LDUyNDM2OCw1MjQzMDQsNTI0NTY4LDQ1OTAyNCw1MjQ0MDAsNTI0MzM2LDU5MDAxNyw0NTkwMTYsNTI0Mzg0LDUyNDMyMCw1ODk5ODUsNTI0Mjg4LDUyNDQxNiw1MjQzNTIsNTkwMDQ5LDQ1OTAxMiw1MjQzNzYsNTI0MzEyLDU4OTk2OSw0NTkwMjgsNTI0NDA4LDUyNDM0NCw1OTAwMzMsNDU5MDIwLDUyNDM5Miw1MjQzMjgsNTkwMDAxLDUyNDI5Niw1MjQ0MjQsNTI0MzYwLDU5MDA2NSw0NTkwMTAsNTI0MzcyLDUyNDMwOCw1MjQ1NzIsNDU5MDI2LDUyNDQwNCw1MjQzNDAsNTkwMDI1LDQ1OTAxOCw1MjQzODgsNTI0MzI0LDU4OTk5Myw1MjQyOTIsNTI0NDIwLDUyNDM1Niw1OTAwNTcsNDU5MDE0LDUyNDM4MCw1MjQzMTYsNTg5OTc3LDQ1OTAzMCw1MjQ0MTIsNTI0MzQ4LDU5MDA0MSw0NTkwMjIsNTI0Mzk2LDUyNDMzMiw1OTAwMDksNTI0MzAwLDUyNDQyOCw1MjQzNjQsNTkwMDczLDQ1OTAwOSw1MjQzNzAsNTI0MzA2LDUyNDU3MCw0NTkwMjUsNTI0NDAyLDUyNDMzOCw1OTAwMjEsNDU5MDE3LDUyNDM4Niw1MjQzMjIsNTg5OTg5LDUyNDI5MCw1MjQ0MTgsNTI0MzU0LDU5MDA1Myw0NTkwMTMsNTI0Mzc4LDUyNDMxNCw1ODk5NzMsNDU5MDI5LDUyNDQxMCw1MjQzNDYsNTkwMDM3LDQ1OTAyMSw1MjQzOTQsNTI0MzMwLDU5MDAwNSw1MjQyOTgsNTI0NDI2LDUyNDM2Miw1OTAwNjksNDU5MDExLDUyNDM3NCw1MjQzMTAsNTI0NTc0LDQ1OTAyNyw1MjQ0MDYsNTI0MzQyLDU5MDAyOSw0NTkwMTksNTI0MzkwLDUyNDMyNiw1ODk5OTcsNTI0Mjk0LDUyNDQyMiw1MjQzNTgsNTkwMDYxLDQ1OTAxNSw1MjQzODIsNTI0MzE4LDU4OTk4MSw0NTkwMzEsNTI0NDE0LDUyNDM1MCw1OTAwNDUsNDU5MDIzLDUyNDM5OCw1MjQzMzQsNTkwMDEzLDUyNDMwMiw1MjQ0MzAsNTI0MzY2LDU5MDA3Nyw0NTkwMDgsNTI0MzY5LDUyNDMwNSw1MjQ1NjksNDU5MDI0LDUyNDQwMSw1MjQzMzcsNTkwMDE5LDQ1OTAxNiw1MjQzODUsNTI0MzIxLDU4OTk4Nyw1MjQyODksNTI0NDE3LDUyNDM1Myw1OTAwNTEsNDU5MDEyLDUyNDM3Nyw1MjQzMTMsNTg5OTcxLDQ1OTAyOCw1MjQ0MDksNTI0MzQ1LDU5MDAzNSw0NTkwMjAsNTI0MzkzLDUyNDMyOSw1OTAwMDMsNTI0Mjk3LDUyNDQyNSw1MjQzNjEsNTkwMDY3LDQ1OTAxMCw1MjQzNzMsNTI0MzA5LDUyNDU3Myw0NTkwMjYsNTI0NDA1LDUyNDM0MSw1OTAwMjcsNDU5MDE4LDUyNDM4OSw1MjQzMjUsNTg5OTk1LDUyNDI5Myw1MjQ0MjEsNTI0MzU3LDU5MDA1OSw0NTkwMTQsNTI0MzgxLDUyNDMxNyw1ODk5NzksNDU5MDMwLDUyNDQxMyw1MjQzNDksNTkwMDQzLDQ1OTAyMiw1MjQzOTcsNTI0MzMzLDU5MDAxMSw1MjQzMDEsNTI0NDI5LDUyNDM2NSw1OTAwNzUsNDU5MDA5LDUyNDM3MSw1MjQzMDcsNTI0NTcxLDQ1OTAyNSw1MjQ0MDMsNTI0MzM5LDU5MDAyMyw0NTkwMTcsNTI0Mzg3LDUyNDMyMyw1ODk5OTEsNTI0MjkxLDUyNDQxOSw1MjQzNTUsNTkwMDU1LDQ1OTAxMyw1MjQzNzksNTI0MzE1LDU4OTk3NSw0NTkwMjksNTI0NDExLDUyNDM0Nyw1OTAwMzksNDU5MDIxLDUyNDM5NSw1MjQzMzEsNTkwMDA3LDUyNDI5OSw1MjQ0MjcsNTI0MzYzLDU5MDA3MSw0NTkwMTEsNTI0Mzc1LDUyNDMxMSw1MjQ1NzUsNDU5MDI3LDUyNDQwNyw1MjQzNDMsNTkwMDMxLDQ1OTAxOSw1MjQzOTEsNTI0MzI3LDU4OTk5OSw1MjQyOTUsNTI0NDIzLDUyNDM1OSw1OTAwNjMsNDU5MDE1LDUyNDM4Myw1MjQzMTksNTg5OTgzLDQ1OTAzMSw1MjQ0MTUsNTI0MzUxLDU5MDA0Nyw0NTkwMjMsNTI0Mzk5LDUyNDMzNSw1OTAwMTUsNTI0MzAzLDUyNDQzMSw1MjQzNjcsNTkwMDc5XSksOV0sbD1bbmV3IEludDMyQXJyYXkoWzMyNzY4MCwzMjc2OTYsMzI3Njg4LDMyNzcwNCwzMjc2ODQsMzI3NzAwLDMyNzY5MiwzMjc3MDgsMzI3NjgyLDMyNzY5OCwzMjc2OTAsMzI3NzA2LDMyNzY4NiwzMjc3MDIsMzI3Njk0LDAsMzI3NjgxLDMyNzY5NywzMjc2ODksMzI3NzA1LDMyNzY4NSwzMjc3MDEsMzI3NjkzLDMyNzcwOSwzMjc2ODMsMzI3Njk5LDMyNzY5MSwzMjc3MDcsMzI3Njg3LDMyNzcwMywzMjc2OTUsMF0pLDVdO2NsYXNzIGggZXh0ZW5kcyBuLkRlY29kZVN0cmVhbXtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKHQpLHRoaXMuc3RyPWUsdGhpcy5kaWN0PWUuZGljdDtjb25zdCByPWUuZ2V0Qnl0ZSgpLG49ZS5nZXRCeXRlKCk7aWYoLTE9PT1yfHwtMT09PW4pdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkludmFsaWQgaGVhZGVyIGluIGZsYXRlIHN0cmVhbTogIi5jb25jYXQociwiLCAiKS5jb25jYXQobikpO2lmKDghPSgxNSZyKSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiVW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QgaW4gZmxhdGUgc3RyZWFtOiAiLmNvbmNhdChyLCIsICIpLmNvbmNhdChuKSk7aWYoKChyPDw4KStuKSUzMSE9MCl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiQmFkIEZDSEVDSyBpbiBmbGF0ZSBzdHJlYW06ICIuY29uY2F0KHIsIiwgIikuY29uY2F0KG4pKTtpZigzMiZuKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJGRElDVCBiaXQgc2V0IGluIGZsYXRlIHN0cmVhbTogIi5jb25jYXQociwiLCAiKS5jb25jYXQobikpO3RoaXMuY29kZVNpemU9MCx0aGlzLmNvZGVCdWY9MH1nZXRCaXRzKGUpe2NvbnN0IHQ9dGhpcy5zdHI7bGV0IHIsbj10aGlzLmNvZGVTaXplLGk9dGhpcy5jb2RlQnVmO2Zvcig7bjxlOyl7aWYoLTE9PT0ocj10LmdldEJ5dGUoKSkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkJhZCBlbmNvZGluZyBpbiBmbGF0ZSBzdHJlYW0iKTtpfD1yPDxuLG4rPTh9cmV0dXJuIHI9aSYoMTw8ZSktMSx0aGlzLmNvZGVCdWY9aT4+ZSx0aGlzLmNvZGVTaXplPW4tPWUscn1nZXRDb2RlKGUpe2NvbnN0IHQ9dGhpcy5zdHIscj1lWzBdLG49ZVsxXTtsZXQgaSxzPXRoaXMuY29kZVNpemUsbz10aGlzLmNvZGVCdWY7Zm9yKDtzPG4mJi0xIT09KGk9dC5nZXRCeXRlKCkpOylvfD1pPDxzLHMrPTg7Y29uc3QgYz1yW28mKDE8PG4pLTFdLGw9Yz4+MTYsaD02NTUzNSZjO2lmKGw8MXx8czxsKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJCYWQgZW5jb2RpbmcgaW4gZmxhdGUgc3RyZWFtIik7cmV0dXJuIHRoaXMuY29kZUJ1Zj1vPj5sLHRoaXMuY29kZVNpemU9cy1sLGh9Z2VuZXJhdGVIdWZmbWFuVGFibGUoZSl7Y29uc3QgdD1lLmxlbmd0aDtsZXQgcixuPTA7Zm9yKHI9MDtyPHQ7KytyKWVbcl0+biYmKG49ZVtyXSk7Y29uc3QgYT0xPDxuLGk9bmV3IEludDMyQXJyYXkoYSk7Zm9yKGxldCBzPTEsbz0wLGM9MjtzPD1uOysrcyxvPDw9MSxjPDw9MSlmb3IobGV0IG49MDtuPHQ7KytuKWlmKGVbbl09PT1zKXtsZXQgZT0wLHQ9bztmb3Iocj0wO3I8czsrK3IpZT1lPDwxfDEmdCx0Pj49MTtmb3Iocj1lO3I8YTtyKz1jKWlbcl09czw8MTZ8bjsrK299cmV0dXJuW2ksbl19cmVhZEJsb2NrKCl7bGV0IGUsdDtjb25zdCByPXRoaXMuc3RyO2xldCBuLGgsdT10aGlzLmdldEJpdHMoMyk7aWYoMSZ1JiYodGhpcy5lb2Y9ITApLHU+Pj0xLDA9PT11KXtsZXQgdDtpZigtMT09PSh0PXIuZ2V0Qnl0ZSgpKSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiQmFkIGJsb2NrIGhlYWRlciBpbiBmbGF0ZSBzdHJlYW0iKTtsZXQgbj10O2lmKC0xPT09KHQ9ci5nZXRCeXRlKCkpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJCYWQgYmxvY2sgaGVhZGVyIGluIGZsYXRlIHN0cmVhbSIpO2lmKG58PXQ8PDgsLTE9PT0odD1yLmdldEJ5dGUoKSkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkJhZCBibG9jayBoZWFkZXIgaW4gZmxhdGUgc3RyZWFtIik7bGV0IGk9dDtpZigtMT09PSh0PXIuZ2V0Qnl0ZSgpKSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiQmFkIGJsb2NrIGhlYWRlciBpbiBmbGF0ZSBzdHJlYW0iKTtpZihpfD10PDw4LGkhPT0oNjU1MzUmfm4pJiYoMCE9PW58fDAhPT1pKSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiQmFkIHVuY29tcHJlc3NlZCBibG9jayBsZW5ndGggaW4gZmxhdGUgc3RyZWFtIik7dGhpcy5jb2RlQnVmPTAsdGhpcy5jb2RlU2l6ZT0wO2NvbnN0IHM9dGhpcy5idWZmZXJMZW5ndGgsbz1zK247aWYoZT10aGlzLmVuc3VyZUJ1ZmZlcihvKSx0aGlzLmJ1ZmZlckxlbmd0aD1vLDA9PT1uKS0xPT09ci5wZWVrQnl0ZSgpJiYodGhpcy5lb2Y9ITApO2Vsc2V7Y29uc3QgdD1yLmdldEJ5dGVzKG4pO2Uuc2V0KHQscyksdC5sZW5ndGg8biYmKHRoaXMuZW9mPSEwKX1yZXR1cm59aWYoMT09PXUpbj1jLGg9bDtlbHNle2lmKDIhPT11KXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJVbmtub3duIGJsb2NrIHR5cGUgaW4gZmxhdGUgc3RyZWFtIik7e2NvbnN0IGU9dGhpcy5nZXRCaXRzKDUpKzI1NyxyPXRoaXMuZ2V0Qml0cyg1KSsxLGE9dGhpcy5nZXRCaXRzKDQpKzQscz1uZXcgVWludDhBcnJheShpLmxlbmd0aCk7bGV0IG87Zm9yKG89MDtvPGE7KytvKXNbaVtvXV09dGhpcy5nZXRCaXRzKDMpO2NvbnN0IGM9dGhpcy5nZW5lcmF0ZUh1ZmZtYW5UYWJsZShzKTt0PTAsbz0wO2NvbnN0IGw9ZStyLHU9bmV3IFVpbnQ4QXJyYXkobCk7bGV0IGQsZixnO2Zvcig7bzxsOyl7Y29uc3QgZT10aGlzLmdldENvZGUoYyk7aWYoMTY9PT1lKWQ9MixmPTMsZz10O2Vsc2UgaWYoMTc9PT1lKWQ9MyxmPTMsZz10PTA7ZWxzZXtpZigxOCE9PWUpe3VbbysrXT10PWU7Y29udGludWV9ZD03LGY9MTEsZz10PTB9bGV0IHI9dGhpcy5nZXRCaXRzKGQpK2Y7Zm9yKDtyLS0gPjA7KXVbbysrXT1nfW49dGhpcy5nZW5lcmF0ZUh1ZmZtYW5UYWJsZSh1LnN1YmFycmF5KDAsZSkpLGg9dGhpcy5nZW5lcmF0ZUh1ZmZtYW5UYWJsZSh1LnN1YmFycmF5KGUsbCkpfX1lPXRoaXMuYnVmZmVyO2xldCBkPWU/ZS5sZW5ndGg6MCxmPXRoaXMuYnVmZmVyTGVuZ3RoO2Zvcig7Oyl7bGV0IHI9dGhpcy5nZXRDb2RlKG4pO2lmKHI8MjU2KXtmKzE+PWQmJihlPXRoaXMuZW5zdXJlQnVmZmVyKGYrMSksZD1lLmxlbmd0aCksZVtmKytdPXI7Y29udGludWV9aWYoMjU2PT09cilyZXR1cm4gdm9pZCh0aGlzLmJ1ZmZlckxlbmd0aD1mKTtyLT0yNTcscj1zW3JdO2xldCBhPXI+PjE2O2E+MCYmKGE9dGhpcy5nZXRCaXRzKGEpKSx0PSg2NTUzNSZyKSthLHI9dGhpcy5nZXRDb2RlKGgpLHI9b1tyXSxhPXI+PjE2LGE+MCYmKGE9dGhpcy5nZXRCaXRzKGEpKTtjb25zdCBpPSg2NTUzNSZyKSthO2YrdD49ZCYmKGU9dGhpcy5lbnN1cmVCdWZmZXIoZit0KSxkPWUubGVuZ3RoKTtmb3IobGV0IHI9MDtyPHQ7KytyLCsrZillW2ZdPWVbZi1pXX19fXQuRmxhdGVTdHJlYW09aH0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkpiaWcyU3RyZWFtPXZvaWQgMCxyKDEzOSk7dmFyIG49cigxNTEpLGE9cigxNjgpLGk9cigxNTApLHM9cigxNzQpLG89cigxNDQpO2NsYXNzIGMgZXh0ZW5kcyBhLkRlY29kZVN0cmVhbXtjb25zdHJ1Y3RvcihlLHQscil7c3VwZXIodCksdGhpcy5zdHJlYW09ZSx0aGlzLmRpY3Q9ZS5kaWN0LHRoaXMubWF5YmVMZW5ndGg9dCx0aGlzLnBhcmFtcz1yfWdldCBieXRlcygpe3JldHVybigwLG8uc2hhZG93KSh0aGlzLCJieXRlcyIsdGhpcy5zdHJlYW0uZ2V0Qnl0ZXModGhpcy5tYXliZUxlbmd0aCkpfWVuc3VyZUJ1ZmZlcihlKXt9cmVhZEJsb2NrKCl7aWYodGhpcy5lb2YpcmV0dXJuO2NvbnN0IGU9bmV3IHMuSmJpZzJJbWFnZSx0PVtdO2lmKHRoaXMucGFyYW1zIGluc3RhbmNlb2YgaS5EaWN0KXtjb25zdCBlPXRoaXMucGFyYW1zLmdldCgiSkJJRzJHbG9iYWxzIik7aWYoZSBpbnN0YW5jZW9mIG4uQmFzZVN0cmVhbSl7Y29uc3Qgcj1lLmdldEJ5dGVzKCk7dC5wdXNoKHtkYXRhOnIsc3RhcnQ6MCxlbmQ6ci5sZW5ndGh9KX19dC5wdXNoKHtkYXRhOnRoaXMuYnl0ZXMsc3RhcnQ6MCxlbmQ6dGhpcy5ieXRlcy5sZW5ndGh9KTtjb25zdCByPWUucGFyc2VDaHVua3ModCksYT1yLmxlbmd0aDtmb3IobGV0IGU9MDtlPGE7ZSsrKXJbZV1ePTI1NTt0aGlzLmJ1ZmZlcj1yLHRoaXMuYnVmZmVyTGVuZ3RoPWEsdGhpcy5lb2Y9ITB9fXQuSmJpZzJTdHJlYW09Y30sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkpiaWcySW1hZ2U9dm9pZCAwLHIoODQpLHIoOTMpLHIoOTQpLHIoOTcpLHIoOTkpLHIoMTAxKSxyKDEwNSkscigxMDgpLHIoMTE1KSxyKDEzOSkscigyKTt2YXIgbj1yKDE0NCksYT1yKDE0OSksaT1yKDE3NSkscz1yKDE3MSk7Y2xhc3MgbyBleHRlbmRzIG4uQmFzZUV4Y2VwdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcigiSkJJRzIgZXJyb3I6ICIuY29uY2F0KGUpLCJKYmlnMkVycm9yIil9fWNsYXNzIGN7Z2V0Q29udGV4dHMoZSl7cmV0dXJuIGUgaW4gdGhpcz90aGlzW2VdOnRoaXNbZV09bmV3IEludDhBcnJheSg2NTUzNil9fWNsYXNzIGx7Y29uc3RydWN0b3IoZSx0LHIpe3RoaXMuZGF0YT1lLHRoaXMuc3RhcnQ9dCx0aGlzLmVuZD1yfWdldCBkZWNvZGVyKCl7Y29uc3QgZT1uZXcgaS5Bcml0aG1ldGljRGVjb2Rlcih0aGlzLmRhdGEsdGhpcy5zdGFydCx0aGlzLmVuZCk7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImRlY29kZXIiLGUpfWdldCBjb250ZXh0Q2FjaGUoKXtjb25zdCBlPW5ldyBjO3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJjb250ZXh0Q2FjaGUiLGUpfX1jb25zdCBoPTIqKjMxLTEsdT0tKDIqKjMxKTtmdW5jdGlvbiBkKGUsdCxyKXtjb25zdCBuPWUuZ2V0Q29udGV4dHModCk7bGV0IGE9MTtmdW5jdGlvbiBpKGUpe2xldCB0PTA7Zm9yKGxldCBpPTA7aTxlO2krKyl7Y29uc3QgZT1yLnJlYWRCaXQobixhKTthPWE8MjU2P2E8PDF8ZTo1MTEmKGE8PDF8ZSl8MjU2LHQ9dDw8MXxlfXJldHVybiB0Pj4+MH1jb25zdCBzPWkoMSksbz1pKDEpP2koMSk/aSgxKT9pKDEpP2koMSk/aSgzMikrNDQzNjppKDEyKSszNDA6aSg4KSs4NDppKDYpKzIwOmkoNCkrNDppKDIpO2xldCBjO3JldHVybiAwPT09cz9jPW86bz4wJiYoYz0tbyksYz49dSYmYzw9aD9jOm51bGx9ZnVuY3Rpb24gZihlLHQscil7Y29uc3Qgbj1lLmdldENvbnRleHRzKCJJQUlEIik7bGV0IGE9MTtmb3IobGV0IGU9MDtlPHI7ZSsrKWE9YTw8MXx0LnJlYWRCaXQobixhKTtyZXR1cm4gcjwzMT9hJigxPDxyKS0xOjIxNDc0ODM2NDcmYX1jb25zdCBnPVsiU3ltYm9sRGljdGlvbmFyeSIsbnVsbCxudWxsLG51bGwsIkludGVybWVkaWF0ZVRleHRSZWdpb24iLG51bGwsIkltbWVkaWF0ZVRleHRSZWdpb24iLCJJbW1lZGlhdGVMb3NzbGVzc1RleHRSZWdpb24iLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwiUGF0dGVybkRpY3Rpb25hcnkiLG51bGwsbnVsbCxudWxsLCJJbnRlcm1lZGlhdGVIYWxmdG9uZVJlZ2lvbiIsbnVsbCwiSW1tZWRpYXRlSGFsZnRvbmVSZWdpb24iLCJJbW1lZGlhdGVMb3NzbGVzc0hhbGZ0b25lUmVnaW9uIixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwiSW50ZXJtZWRpYXRlR2VuZXJpY1JlZ2lvbiIsbnVsbCwiSW1tZWRpYXRlR2VuZXJpY1JlZ2lvbiIsIkltbWVkaWF0ZUxvc3NsZXNzR2VuZXJpY1JlZ2lvbiIsIkludGVybWVkaWF0ZUdlbmVyaWNSZWZpbmVtZW50UmVnaW9uIixudWxsLCJJbW1lZGlhdGVHZW5lcmljUmVmaW5lbWVudFJlZ2lvbiIsIkltbWVkaWF0ZUxvc3NsZXNzR2VuZXJpY1JlZmluZW1lbnRSZWdpb24iLG51bGwsbnVsbCxudWxsLG51bGwsIlBhZ2VJbmZvcm1hdGlvbiIsIkVuZE9mUGFnZSIsIkVuZE9mU3RyaXBlIiwiRW5kT2ZGaWxlIiwiUHJvZmlsZXMiLCJUYWJsZXMiLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwiRXh0ZW5zaW9uIl0scD1bW3t4Oi0xLHk6LTJ9LHt4OjAseTotMn0se3g6MSx5Oi0yfSx7eDotMix5Oi0xfSx7eDotMSx5Oi0xfSx7eDowLHk6LTF9LHt4OjEseTotMX0se3g6Mix5Oi0xfSx7eDotNCx5OjB9LHt4Oi0zLHk6MH0se3g6LTIseTowfSx7eDotMSx5OjB9XSxbe3g6LTEseTotMn0se3g6MCx5Oi0yfSx7eDoxLHk6LTJ9LHt4OjIseTotMn0se3g6LTIseTotMX0se3g6LTEseTotMX0se3g6MCx5Oi0xfSx7eDoxLHk6LTF9LHt4OjIseTotMX0se3g6LTMseTowfSx7eDotMix5OjB9LHt4Oi0xLHk6MH1dLFt7eDotMSx5Oi0yfSx7eDowLHk6LTJ9LHt4OjEseTotMn0se3g6LTIseTotMX0se3g6LTEseTotMX0se3g6MCx5Oi0xfSx7eDoxLHk6LTF9LHt4Oi0yLHk6MH0se3g6LTEseTowfV0sW3t4Oi0zLHk6LTF9LHt4Oi0yLHk6LTF9LHt4Oi0xLHk6LTF9LHt4OjAseTotMX0se3g6MSx5Oi0xfSx7eDotNCx5OjB9LHt4Oi0zLHk6MH0se3g6LTIseTowfSx7eDotMSx5OjB9XV0sbT1be2NvZGluZzpbe3g6MCx5Oi0xfSx7eDoxLHk6LTF9LHt4Oi0xLHk6MH1dLHJlZmVyZW5jZTpbe3g6MCx5Oi0xfSx7eDoxLHk6LTF9LHt4Oi0xLHk6MH0se3g6MCx5OjB9LHt4OjEseTowfSx7eDotMSx5OjF9LHt4OjAseToxfSx7eDoxLHk6MX1dfSx7Y29kaW5nOlt7eDotMSx5Oi0xfSx7eDowLHk6LTF9LHt4OjEseTotMX0se3g6LTEseTowfV0scmVmZXJlbmNlOlt7eDowLHk6LTF9LHt4Oi0xLHk6MH0se3g6MCx5OjB9LHt4OjEseTowfSx7eDowLHk6MX0se3g6MSx5OjF9XX1dLGI9WzM5NzE3LDE5NDEsMjI5LDQwNV0seT1bMzIsOF07ZnVuY3Rpb24gdyhlLHQscixuLGEsaSxzLG8pe2lmKGUpcmV0dXJuIEwobmV3IE4oby5kYXRhLG8uc3RhcnQsby5lbmQpLHQsciwhMSk7aWYoMD09PW4mJiFpJiYhYSYmND09PXMubGVuZ3RoJiYzPT09c1swXS54JiYtMT09PXNbMF0ueSYmLTM9PT1zWzFdLngmJi0xPT09c1sxXS55JiYyPT09c1syXS54JiYtMj09PXNbMl0ueSYmLTI9PT1zWzNdLngmJi0yPT09c1szXS55KXJldHVybiBmdW5jdGlvbihlLHQscil7Y29uc3Qgbj1yLmRlY29kZXIsYT1yLmNvbnRleHRDYWNoZS5nZXRDb250ZXh0cygiR0IiKSxpPVtdO2xldCBzLG8sYyxsLGgsdSxkO2ZvcihvPTA7bzx0O28rKylmb3IoaD1pW29dPW5ldyBVaW50OEFycmF5KGUpLHU9bzwxP2g6aVtvLTFdLGQ9bzwyP2g6aVtvLTJdLHM9ZFswXTw8MTN8ZFsxXTw8MTJ8ZFsyXTw8MTF8dVswXTw8N3x1WzFdPDw2fHVbMl08PDV8dVszXTw8NCxjPTA7YzxlO2MrKyloW2NdPWw9bi5yZWFkQml0KGEscykscz0oMzE3MzUmcyk8PDF8KGMrMzxlP2RbYyszXTw8MTE6MCl8KGMrNDxlP3VbYys0XTw8NDowKXxsO3JldHVybiBpfSh0LHIsbyk7Y29uc3QgYz0hIWksbD1wW25dLmNvbmNhdChzKTtsLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUueS10Lnl8fGUueC10Lnh9KSk7Y29uc3QgaD1sLmxlbmd0aCx1PW5ldyBJbnQ4QXJyYXkoaCksZD1uZXcgSW50OEFycmF5KGgpLGY9W107bGV0IGcsbSx5PTAsdz0wLHY9MCx4PTA7Zm9yKG09MDttPGg7bSsrKXVbbV09bFttXS54LGRbbV09bFttXS55LHc9TWF0aC5taW4odyxsW21dLngpLHY9TWF0aC5tYXgodixsW21dLngpLHg9TWF0aC5taW4oeCxsW21dLnkpLG08aC0xJiZsW21dLnk9PT1sW20rMV0ueSYmbFttXS54PT09bFttKzFdLngtMT95fD0xPDxoLTEtbTpmLnB1c2gobSk7Y29uc3QgUz1mLmxlbmd0aCxBPW5ldyBJbnQ4QXJyYXkoUyksaz1uZXcgSW50OEFycmF5KFMpLEM9bmV3IFVpbnQxNkFycmF5KFMpO2ZvcihnPTA7ZzxTO2crKyltPWZbZ10sQVtnXT1sW21dLngsa1tnXT1sW21dLnksQ1tnXT0xPDxoLTEtbTtjb25zdCBPPS13LEY9LXgsST10LXYsVD1iW25dO2xldCBNPW5ldyBVaW50OEFycmF5KHQpO2NvbnN0IEU9W10sUD1vLmRlY29kZXIsUj1vLmNvbnRleHRDYWNoZS5nZXRDb250ZXh0cygiR0IiKTtsZXQgRCxCLF8saixVLCQ9MCxYPTA7Zm9yKGxldCBlPTA7ZTxyO2UrKylpZihhJiYoJF49UC5yZWFkQml0KFIsVCksJCkpRS5wdXNoKE0pO2Vsc2UgZm9yKE09bmV3IFVpbnQ4QXJyYXkoTSksRS5wdXNoKE0pLEQ9MDtEPHQ7RCsrKXtpZihjJiZpW2VdW0RdKXtNW0RdPTA7Y29udGludWV9aWYoRD49TyYmRDxJJiZlPj1GKWZvcihYPVg8PDEmeSxtPTA7bTxTO20rKylCPWUra1ttXSxfPUQrQVttXSxqPUVbQl1bX10saiYmKGo9Q1ttXSxYfD1qKTtlbHNlIGZvcihYPTAsVT1oLTEsbT0wO208aDttKyssVS0tKV89RCt1W21dLF8+PTAmJl88dCYmKEI9ZStkW21dLEI+PTAmJihqPUVbQl1bX10saiYmKFh8PWo8PFUpKSk7Y29uc3Qgcj1QLnJlYWRCaXQoUixYKTtNW0RdPXJ9cmV0dXJuIEV9ZnVuY3Rpb24gdihlLHQscixuLGEsaSxzLGMsbCl7bGV0IGg9bVtyXS5jb2Rpbmc7MD09PXImJihoPWguY29uY2F0KFtjWzBdXSkpO2NvbnN0IHU9aC5sZW5ndGgsZD1uZXcgSW50MzJBcnJheSh1KSxmPW5ldyBJbnQzMkFycmF5KHUpO2xldCBnO2ZvcihnPTA7Zzx1O2crKylkW2ddPWhbZ10ueCxmW2ddPWhbZ10ueTtsZXQgcD1tW3JdLnJlZmVyZW5jZTswPT09ciYmKHA9cC5jb25jYXQoW2NbMV1dKSk7Y29uc3QgYj1wLmxlbmd0aCx3PW5ldyBJbnQzMkFycmF5KGIpLHY9bmV3IEludDMyQXJyYXkoYik7Zm9yKGc9MDtnPGI7ZysrKXdbZ109cFtnXS54LHZbZ109cFtnXS55O2NvbnN0IHg9blswXS5sZW5ndGgsUz1uLmxlbmd0aCxBPXlbcl0saz1bXSxDPWwuZGVjb2RlcixPPWwuY29udGV4dENhY2hlLmdldENvbnRleHRzKCJHUiIpO2xldCBGPTA7Zm9yKGxldCByPTA7cjx0O3IrKyl7aWYocyYmKEZePUMucmVhZEJpdChPLEEpLEYpKXRocm93IG5ldyBvKCJwcmVkaWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQiKTtjb25zdCB0PW5ldyBVaW50OEFycmF5KGUpO2sucHVzaCh0KTtmb3IobGV0IHM9MDtzPGU7cysrKXtsZXQgbyxjLGw9MDtmb3IoZz0wO2c8dTtnKyspbz1yK2ZbZ10sYz1zK2RbZ10sbzwwfHxjPDB8fGM+PWU/bDw8PTE6bD1sPDwxfGtbb11bY107Zm9yKGc9MDtnPGI7ZysrKW89cit2W2ddLWksYz1zK3dbZ10tYSxvPDB8fG8+PVN8fGM8MHx8Yz49eD9sPDw9MTpsPWw8PDF8bltvXVtjXTtjb25zdCBoPUMucmVhZEJpdChPLGwpO3Rbc109aH19cmV0dXJuIGt9ZnVuY3Rpb24geChlLHQscixuLGEsaSxzLGMsbCxoLHUsZyxwLG0sYix5LHcseCxTKXtpZihlJiZ0KXRocm93IG5ldyBvKCJyZWZpbmVtZW50IHdpdGggSHVmZm1hbiBpcyBub3Qgc3VwcG9ydGVkIik7Y29uc3QgQT1bXTtsZXQgayxDO2ZvcihrPTA7azxuO2srKyl7aWYoQz1uZXcgVWludDhBcnJheShyKSxhKWZvcihsZXQgZT0wO2U8cjtlKyspQ1tlXT1hO0EucHVzaChDKX1jb25zdCBPPXcuZGVjb2RlcixGPXcuY29udGV4dENhY2hlO2xldCBJPWU/LW0udGFibGVEZWx0YVQuZGVjb2RlKFMpOi1kKEYsIklBRFQiLE8pLFQ9MDtmb3Ioaz0wO2s8aTspe0krPWU/bS50YWJsZURlbHRhVC5kZWNvZGUoUyk6ZChGLCJJQURUIixPKSxUKz1lP20udGFibGVGaXJzdFMuZGVjb2RlKFMpOmQoRiwiSUFGUyIsTyk7bGV0IG49VDtmb3IoOzspe2xldCBhPTA7cz4xJiYoYT1lP1MucmVhZEJpdHMoeCk6ZChGLCJJQUlUIixPKSk7Y29uc3QgaT1zKkkrYSxUPWU/bS5zeW1ib2xJRFRhYmxlLmRlY29kZShTKTpmKEYsTyxsKSxNPXQmJihlP1MucmVhZEJpdCgpOmQoRiwiSUFSSSIsTykpO2xldCBFPWNbVF0sUD1FWzBdLmxlbmd0aCxSPUUubGVuZ3RoO2lmKE0pe2NvbnN0IGU9ZChGLCJJQVJEVyIsTyksdD1kKEYsIklBUkRIIixPKTtQKz1lLFIrPXQsRT12KFAsUixiLEUsKGU+PjEpK2QoRiwiSUFSRFgiLE8pLCh0Pj4xKStkKEYsIklBUkRZIixPKSwhMSx5LHcpfWNvbnN0IE49aS0oMSZnPzA6Ui0xKSxEPW4tKDImZz9QLTE6MCk7bGV0IEIsTCxfO2lmKGgpe2ZvcihCPTA7QjxSO0IrKyl7aWYoQz1BW0QrQl0sIUMpY29udGludWU7Xz1FW0JdO2NvbnN0IGU9TWF0aC5taW4oci1OLFApO3N3aXRjaChwKXtjYXNlIDA6Zm9yKEw9MDtMPGU7TCsrKUNbTitMXXw9X1tMXTticmVhaztjYXNlIDI6Zm9yKEw9MDtMPGU7TCsrKUNbTitMXV49X1tMXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBvKCJvcGVyYXRvciAiLmNvbmNhdChwLCIgaXMgbm90IHN1cHBvcnRlZCIpKX19bis9Ui0xfWVsc2V7Zm9yKEw9MDtMPFI7TCsrKWlmKEM9QVtOK0xdLEMpc3dpdGNoKF89RVtMXSxwKXtjYXNlIDA6Zm9yKEI9MDtCPFA7QisrKUNbRCtCXXw9X1tCXTticmVhaztjYXNlIDI6Zm9yKEI9MDtCPFA7QisrKUNbRCtCXV49X1tCXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBvKCJvcGVyYXRvciAiLmNvbmNhdChwLCIgaXMgbm90IHN1cHBvcnRlZCIpKX1uKz1QLTF9aysrO2NvbnN0IGo9ZT9tLnRhYmxlRGVsdGFTLmRlY29kZShTKTpkKEYsIklBRFMiLE8pO2lmKG51bGw9PT1qKWJyZWFrO24rPWordX19cmV0dXJuIEF9ZnVuY3Rpb24gUyhlLHQpe2NvbnN0IHI9e307ci5udW1iZXI9KDAsYS5yZWFkVWludDMyKShlLHQpO2NvbnN0IG49ZVt0KzRdLGk9NjMmbjtpZighZ1tpXSl0aHJvdyBuZXcgbygiaW52YWxpZCBzZWdtZW50IHR5cGU6ICIraSk7ci50eXBlPWksci50eXBlTmFtZT1nW2ldLHIuZGVmZXJyZWROb25SZXRhaW49ISEoMTI4Jm4pO2NvbnN0IHM9ISEoNjQmbiksYz1lW3QrNV07bGV0IGw9Yz4+NSY3O2NvbnN0IGg9WzMxJmNdO2xldCB1PXQrNjtpZig3PT09Yyl7bD01MzY4NzA5MTEmKDAsYS5yZWFkVWludDMyKShlLHUtMSksdSs9MztsZXQgdD1sKzc+PjM7Zm9yKGhbMF09ZVt1KytdOy0tdD4wOyloLnB1c2goZVt1KytdKX1lbHNlIGlmKDU9PT1jfHw2PT09Yyl0aHJvdyBuZXcgbygiaW52YWxpZCByZWZlcnJlZC10byBmbGFncyIpO3IucmV0YWluQml0cz1oO2xldCBkPTQ7ci5udW1iZXI8PTI1Nj9kPTE6ci5udW1iZXI8PTY1NTM2JiYoZD0yKTtjb25zdCBmPVtdO2xldCBwLG07Zm9yKHA9MDtwPGw7cCsrKXtsZXQgdDt0PTE9PT1kP2VbdV06Mj09PWQ/KDAsYS5yZWFkVWludDE2KShlLHUpOigwLGEucmVhZFVpbnQzMikoZSx1KSxmLnB1c2godCksdSs9ZH1pZihyLnJlZmVycmVkVG89ZixzPyhyLnBhZ2VBc3NvY2lhdGlvbj0oMCxhLnJlYWRVaW50MzIpKGUsdSksdSs9NCk6ci5wYWdlQXNzb2NpYXRpb249ZVt1KytdLHIubGVuZ3RoPSgwLGEucmVhZFVpbnQzMikoZSx1KSx1Kz00LDQyOTQ5NjcyOTU9PT1yLmxlbmd0aCl7aWYoMzghPT1pKXRocm93IG5ldyBvKCJpbnZhbGlkIHVua25vd24gc2VnbWVudCBsZW5ndGgiKTt7Y29uc3QgdD1rKGUsdSksbj0hISgxJmVbdStDXSksYT02LGk9bmV3IFVpbnQ4QXJyYXkoYSk7Zm9yKG58fChpWzBdPTI1NSxpWzFdPTE3MiksaVsyXT10LmhlaWdodD4+PjI0JjI1NSxpWzNdPXQuaGVpZ2h0Pj4xNiYyNTUsaVs0XT10LmhlaWdodD4+OCYyNTUsaVs1XT0yNTUmdC5oZWlnaHQscD11LG09ZS5sZW5ndGg7cDxtO3ArKyl7bGV0IHQ9MDtmb3IoO3Q8YSYmaVt0XT09PWVbcCt0XTspdCsrO2lmKHQ9PT1hKXtyLmxlbmd0aD1wK2E7YnJlYWt9fWlmKDQyOTQ5NjcyOTU9PT1yLmxlbmd0aCl0aHJvdyBuZXcgbygic2VnbWVudCBlbmQgd2FzIG5vdCBmb3VuZCIpfX1yZXR1cm4gci5oZWFkZXJFbmQ9dSxyfWZ1bmN0aW9uIEEoZSx0LHIsbil7Y29uc3QgYT1bXTtsZXQgaT1yO2Zvcig7aTxuOyl7Y29uc3Qgcj1TKHQsaSk7aT1yLmhlYWRlckVuZDtjb25zdCBuPXtoZWFkZXI6cixkYXRhOnR9O2lmKGUucmFuZG9tQWNjZXNzfHwobi5zdGFydD1pLGkrPXIubGVuZ3RoLG4uZW5kPWkpLGEucHVzaChuKSw1MT09PXIudHlwZSlicmVha31pZihlLnJhbmRvbUFjY2Vzcylmb3IobGV0IGU9MCx0PWEubGVuZ3RoO2U8dDtlKyspYVtlXS5zdGFydD1pLGkrPWFbZV0uaGVhZGVyLmxlbmd0aCxhW2VdLmVuZD1pO3JldHVybiBhfWZ1bmN0aW9uIGsoZSx0KXtyZXR1cm57d2lkdGg6KDAsYS5yZWFkVWludDMyKShlLHQpLGhlaWdodDooMCxhLnJlYWRVaW50MzIpKGUsdCs0KSx4OigwLGEucmVhZFVpbnQzMikoZSx0KzgpLHk6KDAsYS5yZWFkVWludDMyKShlLHQrMTIpLGNvbWJpbmF0aW9uT3BlcmF0b3I6NyZlW3QrMTZdfX1jb25zdCBDPTE3O2Z1bmN0aW9uIE8oZSx0KXtjb25zdCByPWUuaGVhZGVyLG49ZS5kYXRhLGk9ZS5lbmQ7bGV0IHMsYyxsLGgsdT1lLnN0YXJ0O3N3aXRjaChyLnR5cGUpe2Nhc2UgMDpjb25zdCBlPXt9LHQ9KDAsYS5yZWFkVWludDE2KShuLHUpO2lmKGUuaHVmZm1hbj0hISgxJnQpLGUucmVmaW5lbWVudD0hISgyJnQpLGUuaHVmZm1hbkRIU2VsZWN0b3I9dD4+MiYzLGUuaHVmZm1hbkRXU2VsZWN0b3I9dD4+NCYzLGUuYml0bWFwU2l6ZVNlbGVjdG9yPXQ+PjYmMSxlLmFnZ3JlZ2F0aW9uSW5zdGFuY2VzU2VsZWN0b3I9dD4+NyYxLGUuYml0bWFwQ29kaW5nQ29udGV4dFVzZWQ9ISEoMjU2JnQpLGUuYml0bWFwQ29kaW5nQ29udGV4dFJldGFpbmVkPSEhKDUxMiZ0KSxlLnRlbXBsYXRlPXQ+PjEwJjMsZS5yZWZpbmVtZW50VGVtcGxhdGU9dD4+MTImMSx1Kz0yLCFlLmh1ZmZtYW4pe2ZvcihoPTA9PT1lLnRlbXBsYXRlPzQ6MSxjPVtdLGw9MDtsPGg7bCsrKWMucHVzaCh7eDooMCxhLnJlYWRJbnQ4KShuLHUpLHk6KDAsYS5yZWFkSW50OCkobix1KzEpfSksdSs9MjtlLmF0PWN9aWYoZS5yZWZpbmVtZW50JiYhZS5yZWZpbmVtZW50VGVtcGxhdGUpe2ZvcihjPVtdLGw9MDtsPDI7bCsrKWMucHVzaCh7eDooMCxhLnJlYWRJbnQ4KShuLHUpLHk6KDAsYS5yZWFkSW50OCkobix1KzEpfSksdSs9MjtlLnJlZmluZW1lbnRBdD1jfWUubnVtYmVyT2ZFeHBvcnRlZFN5bWJvbHM9KDAsYS5yZWFkVWludDMyKShuLHUpLHUrPTQsZS5udW1iZXJPZk5ld1N5bWJvbHM9KDAsYS5yZWFkVWludDMyKShuLHUpLHUrPTQscz1bZSxyLm51bWJlcixyLnJlZmVycmVkVG8sbix1LGldO2JyZWFrO2Nhc2UgNjpjYXNlIDc6Y29uc3QgZD17fTtkLmluZm89ayhuLHUpLHUrPUM7Y29uc3QgZj0oMCxhLnJlYWRVaW50MTYpKG4sdSk7aWYodSs9MixkLmh1ZmZtYW49ISEoMSZmKSxkLnJlZmluZW1lbnQ9ISEoMiZmKSxkLmxvZ1N0cmlwU2l6ZT1mPj4yJjMsZC5zdHJpcFNpemU9MTw8ZC5sb2dTdHJpcFNpemUsZC5yZWZlcmVuY2VDb3JuZXI9Zj4+NCYzLGQudHJhbnNwb3NlZD0hISg2NCZmKSxkLmNvbWJpbmF0aW9uT3BlcmF0b3I9Zj4+NyYzLGQuZGVmYXVsdFBpeGVsVmFsdWU9Zj4+OSYxLGQuZHNPZmZzZXQ9Zjw8MTc+PjI3LGQucmVmaW5lbWVudFRlbXBsYXRlPWY+PjE1JjEsZC5odWZmbWFuKXtjb25zdCBlPSgwLGEucmVhZFVpbnQxNikobix1KTt1Kz0yLGQuaHVmZm1hbkZTPTMmZSxkLmh1ZmZtYW5EUz1lPj4yJjMsZC5odWZmbWFuRFQ9ZT4+NCYzLGQuaHVmZm1hblJlZmluZW1lbnREVz1lPj42JjMsZC5odWZmbWFuUmVmaW5lbWVudERIPWU+PjgmMyxkLmh1ZmZtYW5SZWZpbmVtZW50RFg9ZT4+MTAmMyxkLmh1ZmZtYW5SZWZpbmVtZW50RFk9ZT4+MTImMyxkLmh1ZmZtYW5SZWZpbmVtZW50U2l6ZVNlbGVjdG9yPSEhKDE2Mzg0JmUpfWlmKGQucmVmaW5lbWVudCYmIWQucmVmaW5lbWVudFRlbXBsYXRlKXtmb3IoYz1bXSxsPTA7bDwyO2wrKyljLnB1c2goe3g6KDAsYS5yZWFkSW50OCkobix1KSx5OigwLGEucmVhZEludDgpKG4sdSsxKX0pLHUrPTI7ZC5yZWZpbmVtZW50QXQ9Y31kLm51bWJlck9mU3ltYm9sSW5zdGFuY2VzPSgwLGEucmVhZFVpbnQzMikobix1KSx1Kz00LHM9W2Qsci5yZWZlcnJlZFRvLG4sdSxpXTticmVhaztjYXNlIDE2OmNvbnN0IGc9e30scD1uW3UrK107Zy5tbXI9ISEoMSZwKSxnLnRlbXBsYXRlPXA+PjEmMyxnLnBhdHRlcm5XaWR0aD1uW3UrK10sZy5wYXR0ZXJuSGVpZ2h0PW5bdSsrXSxnLm1heFBhdHRlcm5JbmRleD0oMCxhLnJlYWRVaW50MzIpKG4sdSksdSs9NCxzPVtnLHIubnVtYmVyLG4sdSxpXTticmVhaztjYXNlIDIyOmNhc2UgMjM6Y29uc3QgbT17fTttLmluZm89ayhuLHUpLHUrPUM7Y29uc3QgYj1uW3UrK107bS5tbXI9ISEoMSZiKSxtLnRlbXBsYXRlPWI+PjEmMyxtLmVuYWJsZVNraXA9ISEoOCZiKSxtLmNvbWJpbmF0aW9uT3BlcmF0b3I9Yj4+NCY3LG0uZGVmYXVsdFBpeGVsVmFsdWU9Yj4+NyYxLG0uZ3JpZFdpZHRoPSgwLGEucmVhZFVpbnQzMikobix1KSx1Kz00LG0uZ3JpZEhlaWdodD0oMCxhLnJlYWRVaW50MzIpKG4sdSksdSs9NCxtLmdyaWRPZmZzZXRYPTQyOTQ5NjcyOTUmKDAsYS5yZWFkVWludDMyKShuLHUpLHUrPTQsbS5ncmlkT2Zmc2V0WT00Mjk0OTY3Mjk1JigwLGEucmVhZFVpbnQzMikobix1KSx1Kz00LG0uZ3JpZFZlY3Rvclg9KDAsYS5yZWFkVWludDE2KShuLHUpLHUrPTIsbS5ncmlkVmVjdG9yWT0oMCxhLnJlYWRVaW50MTYpKG4sdSksdSs9MixzPVttLHIucmVmZXJyZWRUbyxuLHUsaV07YnJlYWs7Y2FzZSAzODpjYXNlIDM5OmNvbnN0IHk9e307eS5pbmZvPWsobix1KSx1Kz1DO2NvbnN0IHc9blt1KytdO2lmKHkubW1yPSEhKDEmdykseS50ZW1wbGF0ZT13Pj4xJjMseS5wcmVkaWN0aW9uPSEhKDgmdyksIXkubW1yKXtmb3IoaD0wPT09eS50ZW1wbGF0ZT80OjEsYz1bXSxsPTA7bDxoO2wrKyljLnB1c2goe3g6KDAsYS5yZWFkSW50OCkobix1KSx5OigwLGEucmVhZEludDgpKG4sdSsxKX0pLHUrPTI7eS5hdD1jfXM9W3ksbix1LGldO2JyZWFrO2Nhc2UgNDg6Y29uc3Qgdj17d2lkdGg6KDAsYS5yZWFkVWludDMyKShuLHUpLGhlaWdodDooMCxhLnJlYWRVaW50MzIpKG4sdSs0KSxyZXNvbHV0aW9uWDooMCxhLnJlYWRVaW50MzIpKG4sdSs4KSxyZXNvbHV0aW9uWTooMCxhLnJlYWRVaW50MzIpKG4sdSsxMil9OzQyOTQ5NjcyOTU9PT12LmhlaWdodCYmZGVsZXRlIHYuaGVpZ2h0O2NvbnN0IHg9blt1KzE2XTsoMCxhLnJlYWRVaW50MTYpKG4sdSsxNyksdi5sb3NzbGVzcz0hISgxJngpLHYucmVmaW5lbWVudD0hISgyJngpLHYuZGVmYXVsdFBpeGVsVmFsdWU9eD4+MiYxLHYuY29tYmluYXRpb25PcGVyYXRvcj14Pj4zJjMsdi5yZXF1aXJlc0J1ZmZlcj0hISgzMiZ4KSx2LmNvbWJpbmF0aW9uT3BlcmF0b3JPdmVycmlkZT0hISg2NCZ4KSxzPVt2XTticmVhaztjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDYyOmJyZWFrO2Nhc2UgNTM6cz1bci5udW1iZXIsbix1LGldO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IG8oInNlZ21lbnQgdHlwZSAiLmNvbmNhdChyLnR5cGVOYW1lLCIoIikuY29uY2F0KHIudHlwZSwiKSBpcyBub3QgaW1wbGVtZW50ZWQiKSl9Y29uc3QgZD0ib24iK3IudHlwZU5hbWU7ZCBpbiB0JiZ0W2RdLmFwcGx5KHQscyl9ZnVuY3Rpb24gRihlLHQpe2ZvcihsZXQgcj0wLG49ZS5sZW5ndGg7cjxuO3IrKylPKGVbcl0sdCl9Y2xhc3MgSXtvblBhZ2VJbmZvcm1hdGlvbihlKXt0aGlzLmN1cnJlbnRQYWdlSW5mbz1lO2NvbnN0IHQ9ZS53aWR0aCs3Pj4zLHI9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHQqZS5oZWlnaHQpO2UuZGVmYXVsdFBpeGVsVmFsdWUmJnIuZmlsbCgyNTUpLHRoaXMuYnVmZmVyPXJ9ZHJhd0JpdG1hcChlLHQpe2NvbnN0IHI9dGhpcy5jdXJyZW50UGFnZUluZm8sbj1lLndpZHRoLGE9ZS5oZWlnaHQsaT1yLndpZHRoKzc+PjMscz1yLmNvbWJpbmF0aW9uT3BlcmF0b3JPdmVycmlkZT9lLmNvbWJpbmF0aW9uT3BlcmF0b3I6ci5jb21iaW5hdGlvbk9wZXJhdG9yLGM9dGhpcy5idWZmZXIsbD0xMjg+Pig3JmUueCk7bGV0IGgsdSxkLGYsZz1lLnkqaSsoZS54Pj4zKTtzd2l0Y2gocyl7Y2FzZSAwOmZvcihoPTA7aDxhO2grKyl7Zm9yKGQ9bCxmPWcsdT0wO3U8bjt1KyspdFtoXVt1XSYmKGNbZl18PWQpLGQ+Pj0xLGR8fChkPTEyOCxmKyspO2crPWl9YnJlYWs7Y2FzZSAyOmZvcihoPTA7aDxhO2grKyl7Zm9yKGQ9bCxmPWcsdT0wO3U8bjt1KyspdFtoXVt1XSYmKGNbZl1ePWQpLGQ+Pj0xLGR8fChkPTEyOCxmKyspO2crPWl9YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgbygib3BlcmF0b3IgIi5jb25jYXQocywiIGlzIG5vdCBzdXBwb3J0ZWQiKSl9fW9uSW1tZWRpYXRlR2VuZXJpY1JlZ2lvbihlLHQscixuKXtjb25zdCBhPWUuaW5mbyxpPW5ldyBsKHQscixuKSxzPXcoZS5tbXIsYS53aWR0aCxhLmhlaWdodCxlLnRlbXBsYXRlLGUucHJlZGljdGlvbixudWxsLGUuYXQsaSk7dGhpcy5kcmF3Qml0bWFwKGEscyl9b25JbW1lZGlhdGVMb3NzbGVzc0dlbmVyaWNSZWdpb24oKXt0aGlzLm9uSW1tZWRpYXRlR2VuZXJpY1JlZ2lvbiguLi5hcmd1bWVudHMpfW9uU3ltYm9sRGljdGlvbmFyeShlLHQscixuLGkscyl7bGV0IGMsaDtlLmh1ZmZtYW4mJihjPWZ1bmN0aW9uKGUsdCxyKXtsZXQgbixhLGkscyxjPTA7c3dpdGNoKGUuaHVmZm1hbkRIU2VsZWN0b3Ipe2Nhc2UgMDpjYXNlIDE6bj1SKGUuaHVmZm1hbkRIU2VsZWN0b3IrNCk7YnJlYWs7Y2FzZSAzOm49RChjLHQsciksYysrO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IG8oImludmFsaWQgSHVmZm1hbiBESCBzZWxlY3RvciIpfXN3aXRjaChlLmh1ZmZtYW5EV1NlbGVjdG9yKXtjYXNlIDA6Y2FzZSAxOmE9UihlLmh1ZmZtYW5EV1NlbGVjdG9yKzIpO2JyZWFrO2Nhc2UgMzphPUQoYyx0LHIpLGMrKzticmVhaztkZWZhdWx0OnRocm93IG5ldyBvKCJpbnZhbGlkIEh1ZmZtYW4gRFcgc2VsZWN0b3IiKX1yZXR1cm4gZS5iaXRtYXBTaXplU2VsZWN0b3I/KGk9RChjLHQsciksYysrKTppPVIoMSkscz1lLmFnZ3JlZ2F0aW9uSW5zdGFuY2VzU2VsZWN0b3I/RChjLHQscik6UigxKSx7dGFibGVEZWx0YUhlaWdodDpuLHRhYmxlRGVsdGFXaWR0aDphLHRhYmxlQml0bWFwU2l6ZTppLHRhYmxlQWdncmVnYXRlSW5zdGFuY2VzOnN9fShlLHIsdGhpcy5jdXN0b21UYWJsZXMpLGg9bmV3IE4obixpLHMpKTtsZXQgdT10aGlzLnN5bWJvbHM7dXx8KHRoaXMuc3ltYm9scz11PXt9KTtjb25zdCBnPVtdO2Zvcihjb25zdCBlIG9mIHIpe2NvbnN0IHQ9dVtlXTt0JiZnLnB1c2goLi4udCl9Y29uc3QgcD1uZXcgbChuLGkscyk7dVt0XT1mdW5jdGlvbihlLHQscixuLGkscyxjLGwsaCx1LGcscCl7aWYoZSYmdCl0aHJvdyBuZXcgbygic3ltYm9sIHJlZmluZW1lbnQgd2l0aCBIdWZmbWFuIGlzIG5vdCBzdXBwb3J0ZWQiKTtjb25zdCBtPVtdO2xldCBiPTAseT0oMCxhLmxvZzIpKHIubGVuZ3RoK24pO2NvbnN0IFM9Zy5kZWNvZGVyLEE9Zy5jb250ZXh0Q2FjaGU7bGV0IGssQztmb3IoZSYmKGs9UigxKSxDPVtdLHk9TWF0aC5tYXgoeSwxKSk7bS5sZW5ndGg8bjspe2IrPWU/cy50YWJsZURlbHRhSGVpZ2h0LmRlY29kZShwKTpkKEEsIklBREgiLFMpO2xldCBuPTAsYT0wO2NvbnN0IGk9ZT9DLmxlbmd0aDowO2Zvcig7Oyl7Y29uc3QgaT1lP3MudGFibGVEZWx0YVdpZHRoLmRlY29kZShwKTpkKEEsIklBRFciLFMpO2lmKG51bGw9PT1pKWJyZWFrO2xldCBvO2lmKG4rPWksYSs9bix0KXtjb25zdCBhPWQoQSwiSUFBSSIsUyk7aWYoYT4xKW89eChlLHQsbixiLDAsYSwxLHIuY29uY2F0KG0pLHksMCwwLDEsMCxzLGgsdSxnLDAscCk7ZWxzZXtjb25zdCBlPWYoQSxTLHkpLHQ9ZChBLCJJQVJEWCIsUyksYT1kKEEsIklBUkRZIixTKTtvPXYobixiLGgsZTxyLmxlbmd0aD9yW2VdOm1bZS1yLmxlbmd0aF0sdCxhLCExLHUsZyl9bS5wdXNoKG8pfWVsc2UgZT9DLnB1c2gobik6KG89dyghMSxuLGIsYywhMSxudWxsLGwsZyksbS5wdXNoKG8pKX1pZihlJiYhdCl7Y29uc3QgZT1zLnRhYmxlQml0bWFwU2l6ZS5kZWNvZGUocCk7bGV0IHQ7aWYocC5ieXRlQWxpZ24oKSwwPT09ZSl0PUIocCxhLGIpO2Vsc2V7Y29uc3Qgcj1wLmVuZCxuPXAucG9zaXRpb24rZTtwLmVuZD1uLHQ9TChwLGEsYiwhMSkscC5lbmQ9cixwLnBvc2l0aW9uPW59Y29uc3Qgcj1DLmxlbmd0aDtpZihpPT09ci0xKW0ucHVzaCh0KTtlbHNle2xldCBlLG4sYSxzLG8sYz0wO2ZvcihlPWk7ZTxyO2UrKyl7Zm9yKHM9Q1tlXSxhPWMrcyxvPVtdLG49MDtuPGI7bisrKW8ucHVzaCh0W25dLnN1YmFycmF5KGMsYSkpO20ucHVzaChvKSxjPWF9fX19Y29uc3QgTz1bXSxGPVtdO2xldCBJLFQsTT0hMTtjb25zdCBFPXIubGVuZ3RoK247Zm9yKDtGLmxlbmd0aDxFOyl7bGV0IHQ9ZT9rLmRlY29kZShwKTpkKEEsIklBRVgiLFMpO2Zvcig7dC0tOylGLnB1c2goTSk7TT0hTX1mb3IoST0wLFQ9ci5sZW5ndGg7STxUO0krKylGW0ldJiZPLnB1c2gocltJXSk7Zm9yKGxldCBlPTA7ZTxuO0krKyxlKyspRltJXSYmTy5wdXNoKG1bZV0pO3JldHVybiBPfShlLmh1ZmZtYW4sZS5yZWZpbmVtZW50LGcsZS5udW1iZXJPZk5ld1N5bWJvbHMsZS5udW1iZXJPZkV4cG9ydGVkU3ltYm9scyxjLGUudGVtcGxhdGUsZS5hdCxlLnJlZmluZW1lbnRUZW1wbGF0ZSxlLnJlZmluZW1lbnRBdCxwLGgpfW9uSW1tZWRpYXRlVGV4dFJlZ2lvbihlLHQscixuLGkpe2NvbnN0IHM9ZS5pbmZvO2xldCBjLGg7Y29uc3QgdT10aGlzLnN5bWJvbHMsZD1bXTtmb3IoY29uc3QgZSBvZiB0KXtjb25zdCB0PXVbZV07dCYmZC5wdXNoKC4uLnQpfWNvbnN0IGY9KDAsYS5sb2cyKShkLmxlbmd0aCk7ZS5odWZmbWFuJiYoaD1uZXcgTihyLG4saSksYz1mdW5jdGlvbihlLHQscixuLGEpe2NvbnN0IGk9W107Zm9yKGxldCBlPTA7ZTw9MzQ7ZSsrKXtjb25zdCB0PWEucmVhZEJpdHMoNCk7aS5wdXNoKG5ldyBUKFtlLHQsMCwwXSkpfWNvbnN0IHM9bmV3IEUoaSwhMSk7aS5sZW5ndGg9MDtmb3IobGV0IGU9MDtlPG47KXtjb25zdCB0PXMuZGVjb2RlKGEpO2lmKHQ+PTMyKXtsZXQgcixuLHM7c3dpdGNoKHQpe2Nhc2UgMzI6aWYoMD09PWUpdGhyb3cgbmV3IG8oIm5vIHByZXZpb3VzIHZhbHVlIGluIHN5bWJvbCBJRCB0YWJsZSIpO249YS5yZWFkQml0cygyKSszLHI9aVtlLTFdLnByZWZpeExlbmd0aDticmVhaztjYXNlIDMzOm49YS5yZWFkQml0cygzKSszLHI9MDticmVhaztjYXNlIDM0Om49YS5yZWFkQml0cyg3KSsxMSxyPTA7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgbygiaW52YWxpZCBjb2RlIGxlbmd0aCBpbiBzeW1ib2wgSUQgdGFibGUiKX1mb3Iocz0wO3M8bjtzKyspaS5wdXNoKG5ldyBUKFtlLHIsMCwwXSkpLGUrK31lbHNlIGkucHVzaChuZXcgVChbZSx0LDAsMF0pKSxlKyt9YS5ieXRlQWxpZ24oKTtjb25zdCBjPW5ldyBFKGksITEpO2xldCBsLGgsdSxkPTA7c3dpdGNoKGUuaHVmZm1hbkZTKXtjYXNlIDA6Y2FzZSAxOmw9UihlLmh1ZmZtYW5GUys2KTticmVhaztjYXNlIDM6bD1EKGQsdCxyKSxkKys7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgbygiaW52YWxpZCBIdWZmbWFuIEZTIHNlbGVjdG9yIil9c3dpdGNoKGUuaHVmZm1hbkRTKXtjYXNlIDA6Y2FzZSAxOmNhc2UgMjpoPVIoZS5odWZmbWFuRFMrOCk7YnJlYWs7Y2FzZSAzOmg9RChkLHQsciksZCsrO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IG8oImludmFsaWQgSHVmZm1hbiBEUyBzZWxlY3RvciIpfXN3aXRjaChlLmh1ZmZtYW5EVCl7Y2FzZSAwOmNhc2UgMTpjYXNlIDI6dT1SKGUuaHVmZm1hbkRUKzExKTticmVhaztjYXNlIDM6dT1EKGQsdCxyKSxkKys7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgbygiaW52YWxpZCBIdWZmbWFuIERUIHNlbGVjdG9yIil9aWYoZS5yZWZpbmVtZW50KXRocm93IG5ldyBvKCJyZWZpbmVtZW50IHdpdGggSHVmZm1hbiBpcyBub3Qgc3VwcG9ydGVkIik7cmV0dXJue3N5bWJvbElEVGFibGU6Yyx0YWJsZUZpcnN0UzpsLHRhYmxlRGVsdGFTOmgsdGFibGVEZWx0YVQ6dX19KGUsdCx0aGlzLmN1c3RvbVRhYmxlcyxkLmxlbmd0aCxoKSk7Y29uc3QgZz1uZXcgbChyLG4saSkscD14KGUuaHVmZm1hbixlLnJlZmluZW1lbnQscy53aWR0aCxzLmhlaWdodCxlLmRlZmF1bHRQaXhlbFZhbHVlLGUubnVtYmVyT2ZTeW1ib2xJbnN0YW5jZXMsZS5zdHJpcFNpemUsZCxmLGUudHJhbnNwb3NlZCxlLmRzT2Zmc2V0LGUucmVmZXJlbmNlQ29ybmVyLGUuY29tYmluYXRpb25PcGVyYXRvcixjLGUucmVmaW5lbWVudFRlbXBsYXRlLGUucmVmaW5lbWVudEF0LGcsZS5sb2dTdHJpcFNpemUsaCk7dGhpcy5kcmF3Qml0bWFwKHMscCl9b25JbW1lZGlhdGVMb3NzbGVzc1RleHRSZWdpb24oKXt0aGlzLm9uSW1tZWRpYXRlVGV4dFJlZ2lvbiguLi5hcmd1bWVudHMpfW9uUGF0dGVybkRpY3Rpb25hcnkoZSx0LHIsbixhKXtsZXQgaT10aGlzLnBhdHRlcm5zO2l8fCh0aGlzLnBhdHRlcm5zPWk9e30pO2NvbnN0IHM9bmV3IGwocixuLGEpO2lbdF09ZnVuY3Rpb24oZSx0LHIsbixhLGkpe2NvbnN0IHM9W107ZXx8KHMucHVzaCh7eDotdCx5OjB9KSwwPT09YSYmcy5wdXNoKHt4Oi0zLHk6LTF9LHt4OjIseTotMn0se3g6LTIseTotMn0pKTtjb25zdCBvPXcoZSwobisxKSp0LHIsYSwhMSxudWxsLHMsaSksYz1bXTtmb3IobGV0IGU9MDtlPD1uO2UrKyl7Y29uc3Qgbj1bXSxhPXQqZSxpPWErdDtmb3IobGV0IGU9MDtlPHI7ZSsrKW4ucHVzaChvW2VdLnN1YmFycmF5KGEsaSkpO2MucHVzaChuKX1yZXR1cm4gY30oZS5tbXIsZS5wYXR0ZXJuV2lkdGgsZS5wYXR0ZXJuSGVpZ2h0LGUubWF4UGF0dGVybkluZGV4LGUudGVtcGxhdGUscyl9b25JbW1lZGlhdGVIYWxmdG9uZVJlZ2lvbihlLHQscixuLGkpe2NvbnN0IHM9dGhpcy5wYXR0ZXJuc1t0WzBdXSxjPWUuaW5mbyxoPW5ldyBsKHIsbixpKSx1PWZ1bmN0aW9uKGUsdCxyLG4saSxzLGMsbCxoLHUsZCxmLGcscCxtKXtpZihjKXRocm93IG5ldyBvKCJza2lwIGlzIG5vdCBzdXBwb3J0ZWQiKTtpZigwIT09bCl0aHJvdyBuZXcgbygnb3BlcmF0b3IgIicuY29uY2F0KGwsJyIgaXMgbm90IHN1cHBvcnRlZCBpbiBoYWxmdG9uZSByZWdpb24nKSk7Y29uc3QgYj1bXTtsZXQgeSx2LHg7Zm9yKHk9MDt5PGk7eSsrKXtpZih4PW5ldyBVaW50OEFycmF5KG4pLHMpZm9yKHY9MDt2PG47disrKXhbdl09cztiLnB1c2goeCl9Y29uc3QgUz10Lmxlbmd0aCxBPXRbMF0saz1BWzBdLmxlbmd0aCxDPUEubGVuZ3RoLE89KDAsYS5sb2cyKShTKSxGPVtdO2V8fChGLnB1c2goe3g6cjw9MT8zOjIseTotMX0pLDA9PT1yJiZGLnB1c2goe3g6LTMseTotMX0se3g6Mix5Oi0yfSx7eDotMix5Oi0yfSkpO2NvbnN0IEk9W107bGV0IFQsTSxFLFAsUixELEIsXyxqLFUsJDtmb3IoZSYmKFQ9bmV3IE4obS5kYXRhLG0uc3RhcnQsbS5lbmQpKSx5PU8tMTt5Pj0wO3ktLSlNPWU/TChULGgsdSwhMCk6dyghMSxoLHUsciwhMSxudWxsLEYsbSksSVt5XT1NO2ZvcihFPTA7RTx1O0UrKylmb3IoUD0wO1A8aDtQKyspe2ZvcihSPTAsRD0wLHY9Ty0xO3Y+PTA7di0tKVJePUlbdl1bRV1bUF0sRHw9Ujw8djtpZihCPXRbRF0sXz1kK0UqcCtQKmc+Pjgsaj1mK0UqZy1QKnA+PjgsXz49MCYmXytrPD1uJiZqPj0wJiZqK0M8PWkpZm9yKHk9MDt5PEM7eSsrKWZvcigkPWJbait5XSxVPUJbeV0sdj0wO3Y8azt2KyspJFtfK3ZdfD1VW3ZdO2Vsc2V7bGV0IGUsdDtmb3IoeT0wO3k8Qzt5KyspaWYodD1qK3ksISh0PDB8fHQ+PWkpKWZvcigkPWJbdF0sVT1CW3ldLHY9MDt2PGs7disrKWU9Xyt2LGU+PTAmJmU8biYmKCRbZV18PVVbdl0pfX1yZXR1cm4gYn0oZS5tbXIscyxlLnRlbXBsYXRlLGMud2lkdGgsYy5oZWlnaHQsZS5kZWZhdWx0UGl4ZWxWYWx1ZSxlLmVuYWJsZVNraXAsZS5jb21iaW5hdGlvbk9wZXJhdG9yLGUuZ3JpZFdpZHRoLGUuZ3JpZEhlaWdodCxlLmdyaWRPZmZzZXRYLGUuZ3JpZE9mZnNldFksZS5ncmlkVmVjdG9yWCxlLmdyaWRWZWN0b3JZLGgpO3RoaXMuZHJhd0JpdG1hcChjLHUpfW9uSW1tZWRpYXRlTG9zc2xlc3NIYWxmdG9uZVJlZ2lvbigpe3RoaXMub25JbW1lZGlhdGVIYWxmdG9uZVJlZ2lvbiguLi5hcmd1bWVudHMpfW9uVGFibGVzKGUsdCxyLG4pe2xldCBpPXRoaXMuY3VzdG9tVGFibGVzO2l8fCh0aGlzLmN1c3RvbVRhYmxlcz1pPXt9KSxpW2VdPWZ1bmN0aW9uKGUsdCxyKXtjb25zdCBuPWVbdF0saT00Mjk0OTY3Mjk1JigwLGEucmVhZFVpbnQzMikoZSx0KzEpLHM9NDI5NDk2NzI5NSYoMCxhLnJlYWRVaW50MzIpKGUsdCs1KSxvPW5ldyBOKGUsdCs5LHIpLGM9MSsobj4+MSY3KSxsPTErKG4+PjQmNyksaD1bXTtsZXQgdSxkLGY9aTtkb3t1PW8ucmVhZEJpdHMoYyksZD1vLnJlYWRCaXRzKGwpLGgucHVzaChuZXcgVChbZix1LGQsMF0pKSxmKz0xPDxkfXdoaWxlKGY8cyk7cmV0dXJuIHU9by5yZWFkQml0cyhjKSxoLnB1c2gobmV3IFQoW2ktMSx1LDMyLDAsImxvd2VyIl0pKSx1PW8ucmVhZEJpdHMoYyksaC5wdXNoKG5ldyBUKFtzLHUsMzIsMF0pKSwxJm4mJih1PW8ucmVhZEJpdHMoYyksaC5wdXNoKG5ldyBUKFt1LDBdKSkpLG5ldyBFKGgsITEpfSh0LHIsbil9fWNsYXNzIFR7Y29uc3RydWN0b3IoZSl7Mj09PWUubGVuZ3RoPyh0aGlzLmlzT09CPSEwLHRoaXMucmFuZ2VMb3c9MCx0aGlzLnByZWZpeExlbmd0aD1lWzBdLHRoaXMucmFuZ2VMZW5ndGg9MCx0aGlzLnByZWZpeENvZGU9ZVsxXSx0aGlzLmlzTG93ZXJSYW5nZT0hMSk6KHRoaXMuaXNPT0I9ITEsdGhpcy5yYW5nZUxvdz1lWzBdLHRoaXMucHJlZml4TGVuZ3RoPWVbMV0sdGhpcy5yYW5nZUxlbmd0aD1lWzJdLHRoaXMucHJlZml4Q29kZT1lWzNdLHRoaXMuaXNMb3dlclJhbmdlPSJsb3dlciI9PT1lWzRdKX19Y2xhc3MgTXtjb25zdHJ1Y3RvcihlKXt0aGlzLmNoaWxkcmVuPVtdLGU/KHRoaXMuaXNMZWFmPSEwLHRoaXMucmFuZ2VMZW5ndGg9ZS5yYW5nZUxlbmd0aCx0aGlzLnJhbmdlTG93PWUucmFuZ2VMb3csdGhpcy5pc0xvd2VyUmFuZ2U9ZS5pc0xvd2VyUmFuZ2UsdGhpcy5pc09PQj1lLmlzT09CKTp0aGlzLmlzTGVhZj0hMX1idWlsZFRyZWUoZSx0KXtjb25zdCByPWUucHJlZml4Q29kZT4+dCYxO2lmKHQ8PTApdGhpcy5jaGlsZHJlbltyXT1uZXcgTShlKTtlbHNle2xldCBuPXRoaXMuY2hpbGRyZW5bcl07bnx8KHRoaXMuY2hpbGRyZW5bcl09bj1uZXcgTShudWxsKSksbi5idWlsZFRyZWUoZSx0LTEpfX1kZWNvZGVOb2RlKGUpe2lmKHRoaXMuaXNMZWFmKXtpZih0aGlzLmlzT09CKXJldHVybiBudWxsO2NvbnN0IHQ9ZS5yZWFkQml0cyh0aGlzLnJhbmdlTGVuZ3RoKTtyZXR1cm4gdGhpcy5yYW5nZUxvdysodGhpcy5pc0xvd2VyUmFuZ2U/LXQ6dCl9Y29uc3QgdD10aGlzLmNoaWxkcmVuW2UucmVhZEJpdCgpXTtpZighdCl0aHJvdyBuZXcgbygiaW52YWxpZCBIdWZmbWFuIGRhdGEiKTtyZXR1cm4gdC5kZWNvZGVOb2RlKGUpfX1jbGFzcyBFe2NvbnN0cnVjdG9yKGUsdCl7dHx8dGhpcy5hc3NpZ25QcmVmaXhDb2RlcyhlKSx0aGlzLnJvb3ROb2RlPW5ldyBNKG51bGwpO2ZvcihsZXQgdD0wLHI9ZS5sZW5ndGg7dDxyO3QrKyl7Y29uc3Qgcj1lW3RdO3IucHJlZml4TGVuZ3RoPjAmJnRoaXMucm9vdE5vZGUuYnVpbGRUcmVlKHIsci5wcmVmaXhMZW5ndGgtMSl9fWRlY29kZShlKXtyZXR1cm4gdGhpcy5yb290Tm9kZS5kZWNvZGVOb2RlKGUpfWFzc2lnblByZWZpeENvZGVzKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7bGV0IHI9MDtmb3IobGV0IG49MDtuPHQ7bisrKXI9TWF0aC5tYXgocixlW25dLnByZWZpeExlbmd0aCk7Y29uc3Qgbj1uZXcgVWludDMyQXJyYXkocisxKTtmb3IobGV0IHI9MDtyPHQ7cisrKW5bZVtyXS5wcmVmaXhMZW5ndGhdKys7bGV0IGEsaSxzLG89MSxjPTA7Zm9yKG5bMF09MDtvPD1yOyl7Zm9yKGM9YytuW28tMV08PDEsYT1jLGk9MDtpPHQ7KXM9ZVtpXSxzLnByZWZpeExlbmd0aD09PW8mJihzLnByZWZpeENvZGU9YSxhKyspLGkrKztvKyt9fX1jb25zdCBQPXt9O2Z1bmN0aW9uIFIoZSl7bGV0IHQscj1QW2VdO2lmKHIpcmV0dXJuIHI7c3dpdGNoKGUpe2Nhc2UgMTp0PVtbMCwxLDQsMF0sWzE2LDIsOCwyXSxbMjcyLDMsMTYsNl0sWzY1ODA4LDMsMzIsN11dO2JyZWFrO2Nhc2UgMjp0PVtbMCwxLDAsMF0sWzEsMiwwLDJdLFsyLDMsMCw2XSxbMyw0LDMsMTRdLFsxMSw1LDYsMzBdLFs3NSw2LDMyLDYyXSxbNiw2M11dO2JyZWFrO2Nhc2UgMzp0PVtbLTI1Niw4LDgsMjU0XSxbMCwxLDAsMF0sWzEsMiwwLDJdLFsyLDMsMCw2XSxbMyw0LDMsMTRdLFsxMSw1LDYsMzBdLFstMjU3LDgsMzIsMjU1LCJsb3dlciJdLFs3NSw3LDMyLDEyNl0sWzYsNjJdXTticmVhaztjYXNlIDQ6dD1bWzEsMSwwLDBdLFsyLDIsMCwyXSxbMywzLDAsNl0sWzQsNCwzLDE0XSxbMTIsNSw2LDMwXSxbNzYsNSwzMiwzMV1dO2JyZWFrO2Nhc2UgNTp0PVtbLTI1NSw3LDgsMTI2XSxbMSwxLDAsMF0sWzIsMiwwLDJdLFszLDMsMCw2XSxbNCw0LDMsMTRdLFsxMiw1LDYsMzBdLFstMjU2LDcsMzIsMTI3LCJsb3dlciJdLFs3Niw2LDMyLDYyXV07YnJlYWs7Y2FzZSA2OnQ9W1stMjA0OCw1LDEwLDI4XSxbLTEwMjQsNCw5LDhdLFstNTEyLDQsOCw5XSxbLTI1Niw0LDcsMTBdLFstMTI4LDUsNiwyOV0sWy02NCw1LDUsMzBdLFstMzIsNCw1LDExXSxbMCwyLDcsMF0sWzEyOCwzLDcsMl0sWzI1NiwzLDgsM10sWzUxMiw0LDksMTJdLFsxMDI0LDQsMTAsMTNdLFstMjA0OSw2LDMyLDYyLCJsb3dlciJdLFsyMDQ4LDYsMzIsNjNdXTticmVhaztjYXNlIDc6dD1bWy0xMDI0LDQsOSw4XSxbLTUxMiwzLDgsMF0sWy0yNTYsNCw3LDldLFstMTI4LDUsNiwyNl0sWy02NCw1LDUsMjddLFstMzIsNCw1LDEwXSxbMCw0LDUsMTFdLFszMiw1LDUsMjhdLFs2NCw1LDYsMjldLFsxMjgsNCw3LDEyXSxbMjU2LDMsOCwxXSxbNTEyLDMsOSwyXSxbMTAyNCwzLDEwLDNdLFstMTAyNSw1LDMyLDMwLCJsb3dlciJdLFsyMDQ4LDUsMzIsMzFdXTticmVhaztjYXNlIDg6dD1bWy0xNSw4LDMsMjUyXSxbLTcsOSwxLDUwOF0sWy01LDgsMSwyNTNdLFstMyw5LDAsNTA5XSxbLTIsNywwLDEyNF0sWy0xLDQsMCwxMF0sWzAsMiwxLDBdLFsyLDUsMCwyNl0sWzMsNiwwLDU4XSxbNCwzLDQsNF0sWzIwLDYsMSw1OV0sWzIyLDQsNCwxMV0sWzM4LDQsNSwxMl0sWzcwLDUsNiwyN10sWzEzNCw1LDcsMjhdLFsyNjIsNiw3LDYwXSxbMzkwLDcsOCwxMjVdLFs2NDYsNiwxMCw2MV0sWy0xNiw5LDMyLDUxMCwibG93ZXIiXSxbMTY3MCw5LDMyLDUxMV0sWzIsMV1dO2JyZWFrO2Nhc2UgOTp0PVtbLTMxLDgsNCwyNTJdLFstMTUsOSwyLDUwOF0sWy0xMSw4LDIsMjUzXSxbLTcsOSwxLDUwOV0sWy01LDcsMSwxMjRdLFstMyw0LDEsMTBdLFstMSwzLDEsMl0sWzEsMywxLDNdLFszLDUsMSwyNl0sWzUsNiwxLDU4XSxbNywzLDUsNF0sWzM5LDYsMiw1OV0sWzQzLDQsNSwxMV0sWzc1LDQsNiwxMl0sWzEzOSw1LDcsMjddLFsyNjcsNSw4LDI4XSxbNTIzLDYsOCw2MF0sWzc3OSw3LDksMTI1XSxbMTI5MSw2LDExLDYxXSxbLTMyLDksMzIsNTEwLCJsb3dlciJdLFszMzM5LDksMzIsNTExXSxbMiwwXV07YnJlYWs7Y2FzZSAxMDp0PVtbLTIxLDcsNCwxMjJdLFstNSw4LDAsMjUyXSxbLTQsNywwLDEyM10sWy0zLDUsMCwyNF0sWy0yLDIsMiwwXSxbMiw1LDAsMjVdLFszLDYsMCw1NF0sWzQsNywwLDEyNF0sWzUsOCwwLDI1M10sWzYsMiw2LDFdLFs3MCw1LDUsMjZdLFsxMDIsNiw1LDU1XSxbMTM0LDYsNiw1Nl0sWzE5OCw2LDcsNTddLFszMjYsNiw4LDU4XSxbNTgyLDYsOSw1OV0sWzEwOTQsNiwxMCw2MF0sWzIxMTgsNywxMSwxMjVdLFstMjIsOCwzMiwyNTQsImxvd2VyIl0sWzQxNjYsOCwzMiwyNTVdLFsyLDJdXTticmVhaztjYXNlIDExOnQ9W1sxLDEsMCwwXSxbMiwyLDEsMl0sWzQsNCwwLDEyXSxbNSw0LDEsMTNdLFs3LDUsMSwyOF0sWzksNSwyLDI5XSxbMTMsNiwyLDYwXSxbMTcsNywyLDEyMl0sWzIxLDcsMywxMjNdLFsyOSw3LDQsMTI0XSxbNDUsNyw1LDEyNV0sWzc3LDcsNiwxMjZdLFsxNDEsNywzMiwxMjddXTticmVhaztjYXNlIDEyOnQ9W1sxLDEsMCwwXSxbMiwyLDAsMl0sWzMsMywxLDZdLFs1LDUsMCwyOF0sWzYsNSwxLDI5XSxbOCw2LDEsNjBdLFsxMCw3LDAsMTIyXSxbMTEsNywxLDEyM10sWzEzLDcsMiwxMjRdLFsxNyw3LDMsMTI1XSxbMjUsNyw0LDEyNl0sWzQxLDgsNSwyNTRdLFs3Myw4LDMyLDI1NV1dO2JyZWFrO2Nhc2UgMTM6dD1bWzEsMSwwLDBdLFsyLDMsMCw0XSxbMyw0LDAsMTJdLFs0LDUsMCwyOF0sWzUsNCwxLDEzXSxbNywzLDMsNV0sWzE1LDYsMSw1OF0sWzE3LDYsMiw1OV0sWzIxLDYsMyw2MF0sWzI5LDYsNCw2MV0sWzQ1LDYsNSw2Ml0sWzc3LDcsNiwxMjZdLFsxNDEsNywzMiwxMjddXTticmVhaztjYXNlIDE0OnQ9W1stMiwzLDAsNF0sWy0xLDMsMCw1XSxbMCwxLDAsMF0sWzEsMywwLDZdLFsyLDMsMCw3XV07YnJlYWs7Y2FzZSAxNTp0PVtbLTI0LDcsNCwxMjRdLFstOCw2LDIsNjBdLFstNCw1LDEsMjhdLFstMiw0LDAsMTJdLFstMSwzLDAsNF0sWzAsMSwwLDBdLFsxLDMsMCw1XSxbMiw0LDAsMTNdLFszLDUsMSwyOV0sWzUsNiwyLDYxXSxbOSw3LDQsMTI1XSxbLTI1LDcsMzIsMTI2LCJsb3dlciJdLFsyNSw3LDMyLDEyN11dO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IG8oInN0YW5kYXJkIHRhYmxlIEIuIi5jb25jYXQoZSwiIGRvZXMgbm90IGV4aXN0IikpfWZvcihsZXQgZT0wLHI9dC5sZW5ndGg7ZTxyO2UrKyl0W2VdPW5ldyBUKHRbZV0pO3JldHVybiByPW5ldyBFKHQsITApLFBbZV09cixyfWNsYXNzIE57Y29uc3RydWN0b3IoZSx0LHIpe3RoaXMuZGF0YT1lLHRoaXMuc3RhcnQ9dCx0aGlzLmVuZD1yLHRoaXMucG9zaXRpb249dCx0aGlzLnNoaWZ0PS0xLHRoaXMuY3VycmVudEJ5dGU9MH1yZWFkQml0KCl7aWYodGhpcy5zaGlmdDwwKXtpZih0aGlzLnBvc2l0aW9uPj10aGlzLmVuZCl0aHJvdyBuZXcgbygiZW5kIG9mIGRhdGEgd2hpbGUgcmVhZGluZyBiaXQiKTt0aGlzLmN1cnJlbnRCeXRlPXRoaXMuZGF0YVt0aGlzLnBvc2l0aW9uKytdLHRoaXMuc2hpZnQ9N31jb25zdCBlPXRoaXMuY3VycmVudEJ5dGU+PnRoaXMuc2hpZnQmMTtyZXR1cm4gdGhpcy5zaGlmdC0tLGV9cmVhZEJpdHMoZSl7bGV0IHQscj0wO2Zvcih0PWUtMTt0Pj0wO3QtLSlyfD10aGlzLnJlYWRCaXQoKTw8dDtyZXR1cm4gcn1ieXRlQWxpZ24oKXt0aGlzLnNoaWZ0PS0xfW5leHQoKXtyZXR1cm4gdGhpcy5wb3NpdGlvbj49dGhpcy5lbmQ/LTE6dGhpcy5kYXRhW3RoaXMucG9zaXRpb24rK119fWZ1bmN0aW9uIEQoZSx0LHIpe2xldCBuPTA7Zm9yKGxldCBhPTAsaT10Lmxlbmd0aDthPGk7YSsrKXtjb25zdCBpPXJbdFthXV07aWYoaSl7aWYoZT09PW4pcmV0dXJuIGk7bisrfX10aHJvdyBuZXcgbygiY2FuJ3QgZmluZCBjdXN0b20gSHVmZm1hbiB0YWJsZSIpfWZ1bmN0aW9uIEIoZSx0LHIpe2NvbnN0IG49W107Zm9yKGxldCBhPTA7YTxyO2ErKyl7Y29uc3Qgcj1uZXcgVWludDhBcnJheSh0KTtuLnB1c2gocik7Zm9yKGxldCBuPTA7bjx0O24rKylyW25dPWUucmVhZEJpdCgpO2UuYnl0ZUFsaWduKCl9cmV0dXJuIG59ZnVuY3Rpb24gTChlLHQscixuKXtjb25zdCBhPXtLOi0xLENvbHVtbnM6dCxSb3dzOnIsQmxhY2tJczE6ITAsRW5kT2ZCbG9jazpufSxpPW5ldyBzLkNDSVRURmF4RGVjb2RlcihlLGEpLG89W107bGV0IGMsbD0hMTtmb3IobGV0IGU9MDtlPHI7ZSsrKXtjb25zdCBlPW5ldyBVaW50OEFycmF5KHQpO28ucHVzaChlKTtsZXQgcj0tMTtmb3IobGV0IG49MDtuPHQ7bisrKXI8MCYmKGM9aS5yZWFkTmV4dENoYXIoKSwtMT09PWMmJihjPTAsbD0hMCkscj03KSxlW25dPWM+PnImMSxyLS19aWYobiYmIWwpe2NvbnN0IGU9NTtmb3IobGV0IHQ9MDt0PGUmJi0xIT09aS5yZWFkTmV4dENoYXIoKTt0KyspO31yZXR1cm4gb310LkpiaWcySW1hZ2U9Y2xhc3N7cGFyc2VDaHVua3MoZSl7cmV0dXJuIGZ1bmN0aW9uKGUpe2NvbnN0IHQ9bmV3IEk7Zm9yKGxldCByPTAsbj1lLmxlbmd0aDtyPG47cisrKXtjb25zdCBuPWVbcl07RihBKHt9LG4uZGF0YSxuLnN0YXJ0LG4uZW5kKSx0KX1yZXR1cm4gdC5idWZmZXJ9KGUpfXBhcnNlKGUpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkOiBKYmlnMkltYWdlLnBhcnNlIil9fX0sKGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Bcml0aG1ldGljRGVjb2Rlcj12b2lkIDA7Y29uc3Qgcj1be3FlOjIyMDE3LG5tcHM6MSxubHBzOjEsc3dpdGNoRmxhZzoxfSx7cWU6MTMzMTMsbm1wczoyLG5scHM6Nixzd2l0Y2hGbGFnOjB9LHtxZTo2MTQ1LG5tcHM6MyxubHBzOjksc3dpdGNoRmxhZzowfSx7cWU6Mjc1MyxubXBzOjQsbmxwczoxMixzd2l0Y2hGbGFnOjB9LHtxZToxMzEzLG5tcHM6NSxubHBzOjI5LHN3aXRjaEZsYWc6MH0se3FlOjU0NSxubXBzOjM4LG5scHM6MzMsc3dpdGNoRmxhZzowfSx7cWU6MjIwMTcsbm1wczo3LG5scHM6Nixzd2l0Y2hGbGFnOjF9LHtxZToyMTUwNSxubXBzOjgsbmxwczoxNCxzd2l0Y2hGbGFnOjB9LHtxZToxODQzMyxubXBzOjksbmxwczoxNCxzd2l0Y2hGbGFnOjB9LHtxZToxNDMzNyxubXBzOjEwLG5scHM6MTQsc3dpdGNoRmxhZzowfSx7cWU6MTIyODksbm1wczoxMSxubHBzOjE3LHN3aXRjaEZsYWc6MH0se3FlOjkyMTcsbm1wczoxMixubHBzOjE4LHN3aXRjaEZsYWc6MH0se3FlOjcxNjksbm1wczoxMyxubHBzOjIwLHN3aXRjaEZsYWc6MH0se3FlOjU2MzMsbm1wczoyOSxubHBzOjIxLHN3aXRjaEZsYWc6MH0se3FlOjIyMDE3LG5tcHM6MTUsbmxwczoxNCxzd2l0Y2hGbGFnOjF9LHtxZToyMTUwNSxubXBzOjE2LG5scHM6MTQsc3dpdGNoRmxhZzowfSx7cWU6MjA3Mzcsbm1wczoxNyxubHBzOjE1LHN3aXRjaEZsYWc6MH0se3FlOjE4NDMzLG5tcHM6MTgsbmxwczoxNixzd2l0Y2hGbGFnOjB9LHtxZToxNDMzNyxubXBzOjE5LG5scHM6MTcsc3dpdGNoRmxhZzowfSx7cWU6MTMzMTMsbm1wczoyMCxubHBzOjE4LHN3aXRjaEZsYWc6MH0se3FlOjEyMjg5LG5tcHM6MjEsbmxwczoxOSxzd2l0Y2hGbGFnOjB9LHtxZToxMDI0MSxubXBzOjIyLG5scHM6MTksc3dpdGNoRmxhZzowfSx7cWU6OTIxNyxubXBzOjIzLG5scHM6MjAsc3dpdGNoRmxhZzowfSx7cWU6ODcwNSxubXBzOjI0LG5scHM6MjEsc3dpdGNoRmxhZzowfSx7cWU6NzE2OSxubXBzOjI1LG5scHM6MjIsc3dpdGNoRmxhZzowfSx7cWU6NjE0NSxubXBzOjI2LG5scHM6MjMsc3dpdGNoRmxhZzowfSx7cWU6NTYzMyxubXBzOjI3LG5scHM6MjQsc3dpdGNoRmxhZzowfSx7cWU6NTEyMSxubXBzOjI4LG5scHM6MjUsc3dpdGNoRmxhZzowfSx7cWU6NDYwOSxubXBzOjI5LG5scHM6MjYsc3dpdGNoRmxhZzowfSx7cWU6NDM1MyxubXBzOjMwLG5scHM6Mjcsc3dpdGNoRmxhZzowfSx7cWU6Mjc1MyxubXBzOjMxLG5scHM6Mjgsc3dpdGNoRmxhZzowfSx7cWU6MjQ5NyxubXBzOjMyLG5scHM6Mjksc3dpdGNoRmxhZzowfSx7cWU6MjIwOSxubXBzOjMzLG5scHM6MzAsc3dpdGNoRmxhZzowfSx7cWU6MTMxMyxubXBzOjM0LG5scHM6MzEsc3dpdGNoRmxhZzowfSx7cWU6MTA4OSxubXBzOjM1LG5scHM6MzIsc3dpdGNoRmxhZzowfSx7cWU6NjczLG5tcHM6MzYsbmxwczozMyxzd2l0Y2hGbGFnOjB9LHtxZTo1NDUsbm1wczozNyxubHBzOjM0LHN3aXRjaEZsYWc6MH0se3FlOjMyMSxubXBzOjM4LG5scHM6MzUsc3dpdGNoRmxhZzowfSx7cWU6MjczLG5tcHM6MzksbmxwczozNixzd2l0Y2hGbGFnOjB9LHtxZToxMzMsbm1wczo0MCxubHBzOjM3LHN3aXRjaEZsYWc6MH0se3FlOjczLG5tcHM6NDEsbmxwczozOCxzd2l0Y2hGbGFnOjB9LHtxZTozNyxubXBzOjQyLG5scHM6Mzksc3dpdGNoRmxhZzowfSx7cWU6MjEsbm1wczo0MyxubHBzOjQwLHN3aXRjaEZsYWc6MH0se3FlOjksbm1wczo0NCxubHBzOjQxLHN3aXRjaEZsYWc6MH0se3FlOjUsbm1wczo0NSxubHBzOjQyLHN3aXRjaEZsYWc6MH0se3FlOjEsbm1wczo0NSxubHBzOjQzLHN3aXRjaEZsYWc6MH0se3FlOjIyMDE3LG5tcHM6NDYsbmxwczo0Nixzd2l0Y2hGbGFnOjB9XTt0LkFyaXRobWV0aWNEZWNvZGVyPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxyKXt0aGlzLmRhdGE9ZSx0aGlzLmJwPXQsdGhpcy5kYXRhRW5kPXIsdGhpcy5jaGlnaD1lW3RdLHRoaXMuY2xvdz0wLHRoaXMuYnl0ZUluKCksdGhpcy5jaGlnaD10aGlzLmNoaWdoPDw3JjY1NTM1fHRoaXMuY2xvdz4+OSYxMjcsdGhpcy5jbG93PXRoaXMuY2xvdzw8NyY2NTUzNSx0aGlzLmN0LT03LHRoaXMuYT0zMjc2OH1ieXRlSW4oKXtjb25zdCBlPXRoaXMuZGF0YTtsZXQgdD10aGlzLmJwOzI1NT09PWVbdF0/ZVt0KzFdPjE0Mz8odGhpcy5jbG93Kz02NTI4MCx0aGlzLmN0PTgpOih0KyssdGhpcy5jbG93Kz1lW3RdPDw5LHRoaXMuY3Q9Nyx0aGlzLmJwPXQpOih0KyssdGhpcy5jbG93Kz10PHRoaXMuZGF0YUVuZD9lW3RdPDw4OjY1MjgwLHRoaXMuY3Q9OCx0aGlzLmJwPXQpLHRoaXMuY2xvdz42NTUzNSYmKHRoaXMuY2hpZ2grPXRoaXMuY2xvdz4+MTYsdGhpcy5jbG93Jj02NTUzNSl9cmVhZEJpdChlLHQpe2xldCBuPWVbdF0+PjEsYT0xJmVbdF07Y29uc3QgaT1yW25dLHM9aS5xZTtsZXQgbyxjPXRoaXMuYS1zO2lmKHRoaXMuY2hpZ2g8cyljPHM/KGM9cyxvPWEsbj1pLm5tcHMpOihjPXMsbz0xXmEsMT09PWkuc3dpdGNoRmxhZyYmKGE9byksbj1pLm5scHMpO2Vsc2V7aWYodGhpcy5jaGlnaC09cywwIT0oMzI3NjgmYykpcmV0dXJuIHRoaXMuYT1jLGE7YzxzPyhvPTFeYSwxPT09aS5zd2l0Y2hGbGFnJiYoYT1vKSxuPWkubmxwcyk6KG89YSxuPWkubm1wcyl9ZG97MD09PXRoaXMuY3QmJnRoaXMuYnl0ZUluKCksYzw8PTEsdGhpcy5jaGlnaD10aGlzLmNoaWdoPDwxJjY1NTM1fHRoaXMuY2xvdz4+MTUmMSx0aGlzLmNsb3c9dGhpcy5jbG93PDwxJjY1NTM1LHRoaXMuY3QtLX13aGlsZSgwPT0oMzI3NjgmYykpO3JldHVybiB0aGlzLmE9YyxlW3RdPW48PDF8YSxvfX19LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5KcGVnU3RyZWFtPXZvaWQgMCxyKDg0KSxyKDkzKSxyKDk0KSxyKDk3KSxyKDk5KSxyKDEwMSkscigxMDUpLHIoMTA4KSxyKDExNSk7dmFyIG49cigxNjgpLGE9cigxNTApLGk9cigxNzcpLHM9cigxNDQpO2NsYXNzIG8gZXh0ZW5kcyBuLkRlY29kZVN0cmVhbXtjb25zdHJ1Y3RvcihlLHQscil7bGV0IG47Zm9yKDstMSE9PShuPWUuZ2V0Qnl0ZSgpKTspaWYoMjU1PT09bil7ZS5za2lwKC0xKTticmVha31zdXBlcih0KSx0aGlzLnN0cmVhbT1lLHRoaXMuZGljdD1lLmRpY3QsdGhpcy5tYXliZUxlbmd0aD10LHRoaXMucGFyYW1zPXJ9Z2V0IGJ5dGVzKCl7cmV0dXJuKDAscy5zaGFkb3cpKHRoaXMsImJ5dGVzIix0aGlzLnN0cmVhbS5nZXRCeXRlcyh0aGlzLm1heWJlTGVuZ3RoKSl9ZW5zdXJlQnVmZmVyKGUpe31yZWFkQmxvY2soKXtpZih0aGlzLmVvZilyZXR1cm47Y29uc3QgZT17ZGVjb2RlVHJhbnNmb3JtOnZvaWQgMCxjb2xvclRyYW5zZm9ybTp2b2lkIDB9LHQ9dGhpcy5kaWN0LmdldEFycmF5KCJEIiwiRGVjb2RlIik7aWYoKHRoaXMuZm9yY2VSR0JBfHx0aGlzLmZvcmNlUkdCKSYmQXJyYXkuaXNBcnJheSh0KSl7Y29uc3Qgcj10aGlzLmRpY3QuZ2V0KCJCUEMiLCJCaXRzUGVyQ29tcG9uZW50Iil8fDgsbj10Lmxlbmd0aCxhPW5ldyBJbnQzMkFycmF5KG4pO2xldCBpPSExO2NvbnN0IHM9KDE8PHIpLTE7Zm9yKGxldCBlPTA7ZTxuO2UrPTIpYVtlXT0yNTYqKHRbZSsxXS10W2VdKXwwLGFbZSsxXT10W2VdKnN8MCwyNTY9PT1hW2VdJiYwPT09YVtlKzFdfHwoaT0hMCk7aSYmKGUuZGVjb2RlVHJhbnNmb3JtPWEpfWlmKHRoaXMucGFyYW1zIGluc3RhbmNlb2YgYS5EaWN0KXtjb25zdCB0PXRoaXMucGFyYW1zLmdldCgiQ29sb3JUcmFuc2Zvcm0iKTtOdW1iZXIuaXNJbnRlZ2VyKHQpJiYoZS5jb2xvclRyYW5zZm9ybT10KX1jb25zdCByPW5ldyBpLkpwZWdJbWFnZShlKTtyLnBhcnNlKHRoaXMuYnl0ZXMpO2NvbnN0IG49ci5nZXREYXRhKHt3aWR0aDp0aGlzLmRyYXdXaWR0aCxoZWlnaHQ6dGhpcy5kcmF3SGVpZ2h0LGZvcmNlUkdCQTp0aGlzLmZvcmNlUkdCQSxmb3JjZVJHQjp0aGlzLmZvcmNlUkdCLGlzU291cmNlUERGOiEwfSk7dGhpcy5idWZmZXI9bix0aGlzLmJ1ZmZlckxlbmd0aD1uLmxlbmd0aCx0aGlzLmVvZj0hMH19dC5KcGVnU3RyZWFtPW99LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5KcGVnSW1hZ2U9dm9pZCAwLHIoODQpLHIoOTMpLHIoOTQpLHIoOTcpLHIoOTkpLHIoMTAxKSxyKDEwNSkscigxMDgpLHIoMTE1KSxyKDEzOSk7dmFyIG49cigxNDQpLGE9cigxNzgpLGk9cigxNDkpO2NsYXNzIHMgZXh0ZW5kcyBuLkJhc2VFeGNlcHRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoIkpQRUcgZXJyb3I6ICIuY29uY2F0KGUpLCJKcGVnRXJyb3IiKX19Y2xhc3MgbyBleHRlbmRzIG4uQmFzZUV4Y2VwdGlvbntjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsIkROTE1hcmtlckVycm9yIiksdGhpcy5zY2FuTGluZXM9dH19Y2xhc3MgYyBleHRlbmRzIG4uQmFzZUV4Y2VwdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJFT0lNYXJrZXJFcnJvciIpfX1jb25zdCBsPW5ldyBVaW50OEFycmF5KFswLDEsOCwxNiw5LDIsMywxMCwxNywyNCwzMiwyNSwxOCwxMSw0LDUsMTIsMTksMjYsMzMsNDAsNDgsNDEsMzQsMjcsMjAsMTMsNiw3LDE0LDIxLDI4LDM1LDQyLDQ5LDU2LDU3LDUwLDQzLDM2LDI5LDIyLDE1LDIzLDMwLDM3LDQ0LDUxLDU4LDU5LDUyLDQ1LDM4LDMxLDM5LDQ2LDUzLDYwLDYxLDU0LDQ3LDU1LDYyLDYzXSksaD00MDE3LHU9Nzk5LGQ9MzQwNixmPTIyNzYsZz0xNTY3LHA9Mzc4NCxtPTU3OTMsYj0yODk2O2Z1bmN0aW9uIHkoZSx0KXtsZXQgcixuLGE9MCxpPTE2O2Zvcig7aT4wJiYhZVtpLTFdOylpLS07Y29uc3Qgcz1be2NoaWxkcmVuOltdLGluZGV4OjB9XTtsZXQgbyxjPXNbMF07Zm9yKHI9MDtyPGk7cisrKXtmb3Iobj0wO248ZVtyXTtuKyspe2ZvcihjPXMucG9wKCksYy5jaGlsZHJlbltjLmluZGV4XT10W2FdO2MuaW5kZXg+MDspYz1zLnBvcCgpO2ZvcihjLmluZGV4Kysscy5wdXNoKGMpO3MubGVuZ3RoPD1yOylzLnB1c2gobz17Y2hpbGRyZW46W10saW5kZXg6MH0pLGMuY2hpbGRyZW5bYy5pbmRleF09by5jaGlsZHJlbixjPW87YSsrfXIrMTxpJiYocy5wdXNoKG89e2NoaWxkcmVuOltdLGluZGV4OjB9KSxjLmNoaWxkcmVuW2MuaW5kZXhdPW8uY2hpbGRyZW4sYz1vKX1yZXR1cm4gc1swXS5jaGlsZHJlbn1mdW5jdGlvbiB3KGUsdCxyKXtyZXR1cm4gNjQqKChlLmJsb2Nrc1BlckxpbmUrMSkqdCtyKX1mdW5jdGlvbiB2KGUsdCxyLGEsaCx1LGQsZixnKXtsZXQgcD1hcmd1bWVudHMubGVuZ3RoPjkmJnZvaWQgMCE9PWFyZ3VtZW50c1s5XSYmYXJndW1lbnRzWzldO2NvbnN0IG09ci5tY3VzUGVyTGluZSxiPXIucHJvZ3Jlc3NpdmUseT10O2xldCB2PTAseD0wO2Z1bmN0aW9uIFMoKXtpZih4PjApcmV0dXJuIHgtLSx2Pj54JjE7aWYodj1lW3QrK10sMjU1PT09dil7Y29uc3Qgbj1lW3QrK107aWYobil7aWYoMjIwPT09biYmcCl7dCs9Mjtjb25zdCBuPSgwLGkucmVhZFVpbnQxNikoZSx0KTtpZih0Kz0yLG4+MCYmbiE9PXIuc2NhbkxpbmVzKXRocm93IG5ldyBvKCJGb3VuZCBETkwgbWFya2VyICgweEZGREMpIHdoaWxlIHBhcnNpbmcgc2NhbiBkYXRhIixuKX1lbHNlIGlmKDIxNz09PW4pe2lmKHApe2NvbnN0IGU9TSooOD09PXIucHJlY2lzaW9uPzg6MCk7aWYoZT4wJiZNYXRoLnJvdW5kKHIuc2NhbkxpbmVzL2UpPj01KXRocm93IG5ldyBvKCJGb3VuZCBFT0kgbWFya2VyICgweEZGRDkpIHdoaWxlIHBhcnNpbmcgc2NhbiBkYXRhLCBwb3NzaWJseSBjYXVzZWQgYnkgaW5jb3JyZWN0IGBzY2FuTGluZXNgIHBhcmFtZXRlciIsZSl9dGhyb3cgbmV3IGMoIkZvdW5kIEVPSSBtYXJrZXIgKDB4RkZEOSkgd2hpbGUgcGFyc2luZyBzY2FuIGRhdGEiKX10aHJvdyBuZXcgcygidW5leHBlY3RlZCBtYXJrZXIgIi5jb25jYXQoKHY8PDh8bikudG9TdHJpbmcoMTYpKSl9fXJldHVybiB4PTcsdj4+Pjd9ZnVuY3Rpb24gayhlKXtsZXQgdD1lO2Zvcig7Oyl7c3dpdGNoKHQ9dFtTKCldLHR5cGVvZiB0KXtjYXNlIm51bWJlciI6cmV0dXJuIHQ7Y2FzZSJvYmplY3QiOmNvbnRpbnVlfXRocm93IG5ldyBzKCJpbnZhbGlkIGh1ZmZtYW4gc2VxdWVuY2UiKX19ZnVuY3Rpb24gQyhlKXtsZXQgdD0wO2Zvcig7ZT4wOyl0PXQ8PDF8UygpLGUtLTtyZXR1cm4gdH1mdW5jdGlvbiBPKGUpe2lmKDE9PT1lKXJldHVybiAxPT09UygpPzE6LTE7Y29uc3QgdD1DKGUpO3JldHVybiB0Pj0xPDxlLTE/dDp0KygtMTw8ZSkrMX1sZXQgRixJPTAsVD0wLE09MDtmdW5jdGlvbiBFKGUsdCxyLG4sYSl7Y29uc3QgaT1yJW07TT0oci9tfDApKmUudituO2NvbnN0IHM9aSplLmgrYTt0KGUsdyhlLE0scykpfWZ1bmN0aW9uIFAoZSx0LHIpe009ci9lLmJsb2Nrc1BlckxpbmV8MDtjb25zdCBuPXIlZS5ibG9ja3NQZXJMaW5lO3QoZSx3KGUsTSxuKSl9Y29uc3QgUj1hLmxlbmd0aDtsZXQgTixELEIsTCxfLGo7aj1iPzA9PT11PzA9PT1mP2Z1bmN0aW9uKGUsdCl7Y29uc3Qgcj1rKGUuaHVmZm1hblRhYmxlREMpLG49MD09PXI/MDpPKHIpPDxnO2UuYmxvY2tEYXRhW3RdPWUucHJlZCs9bn06ZnVuY3Rpb24oZSx0KXtlLmJsb2NrRGF0YVt0XXw9UygpPDxnfTowPT09Zj9mdW5jdGlvbihlLHQpe2lmKEk+MClyZXR1cm4gdm9pZCBJLS07bGV0IHI9dTtjb25zdCBuPWQ7Zm9yKDtyPD1uOyl7Y29uc3Qgbj1rKGUuaHVmZm1hblRhYmxlQUMpLGE9MTUmbixpPW4+PjQ7aWYoMD09PWEpe2lmKGk8MTUpe0k9QyhpKSsoMTw8aSktMTticmVha31yKz0xNjtjb250aW51ZX1yKz1pO2NvbnN0IHM9bFtyXTtlLmJsb2NrRGF0YVt0K3NdPU8oYSkqKDE8PGcpLHIrK319OmZ1bmN0aW9uKGUsdCl7bGV0IHI9dTtjb25zdCBuPWQ7bGV0IGEsaSxvPTA7Zm9yKDtyPD1uOyl7Y29uc3Qgbj10K2xbcl0sYz1lLmJsb2NrRGF0YVtuXTwwPy0xOjE7c3dpdGNoKFQpe2Nhc2UgMDppZihpPWsoZS5odWZmbWFuVGFibGVBQyksYT0xNSZpLG89aT4+NCwwPT09YSlvPDE1PyhJPUMobykrKDE8PG8pLFQ9NCk6KG89MTYsVD0xKTtlbHNle2lmKDEhPT1hKXRocm93IG5ldyBzKCJpbnZhbGlkIEFDbiBlbmNvZGluZyIpO0Y9TyhhKSxUPW8/MjozfWNvbnRpbnVlO2Nhc2UgMTpjYXNlIDI6ZS5ibG9ja0RhdGFbbl0/ZS5ibG9ja0RhdGFbbl0rPWMqKFMoKTw8Zyk6KG8tLSwwPT09byYmKFQ9Mj09PVQ/MzowKSk7YnJlYWs7Y2FzZSAzOmUuYmxvY2tEYXRhW25dP2UuYmxvY2tEYXRhW25dKz1jKihTKCk8PGcpOihlLmJsb2NrRGF0YVtuXT1GPDxnLFQ9MCk7YnJlYWs7Y2FzZSA0OmUuYmxvY2tEYXRhW25dJiYoZS5ibG9ja0RhdGFbbl0rPWMqKFMoKTw8ZykpfXIrK300PT09VCYmKEktLSwwPT09SSYmKFQ9MCkpfTpmdW5jdGlvbihlLHQpe2NvbnN0IHI9ayhlLmh1ZmZtYW5UYWJsZURDKSxuPTA9PT1yPzA6TyhyKTtlLmJsb2NrRGF0YVt0XT1lLnByZWQrPW47bGV0IGE9MTtmb3IoO2E8NjQ7KXtjb25zdCByPWsoZS5odWZmbWFuVGFibGVBQyksbj0xNSZyLGk9cj4+NDtpZigwPT09bil7aWYoaTwxNSlicmVhazthKz0xNjtjb250aW51ZX1hKz1pO2NvbnN0IHM9bFthXTtlLmJsb2NrRGF0YVt0K3NdPU8obiksYSsrfX07bGV0IFUsJD0wO2NvbnN0IFg9MT09PVI/YVswXS5ibG9ja3NQZXJMaW5lKmFbMF0uYmxvY2tzUGVyQ29sdW1uOm0qci5tY3VzUGVyQ29sdW1uO2xldCBILHE7Zm9yKDskPD1YOyl7Y29uc3Qgcj1oP01hdGgubWluKFgtJCxoKTpYO2lmKHI+MCl7Zm9yKEQ9MDtEPFI7RCsrKWFbRF0ucHJlZD0wO2lmKEk9MCwxPT09Uilmb3IoTj1hWzBdLF89MDtfPHI7XysrKVAoTixqLCQpLCQrKztlbHNlIGZvcihfPTA7XzxyO18rKyl7Zm9yKEQ9MDtEPFI7RCsrKWZvcihOPWFbRF0sSD1OLmgscT1OLnYsQj0wO0I8cTtCKyspZm9yKEw9MDtMPEg7TCsrKUUoTixqLCQsQixMKTskKyt9fWlmKHg9MCxVPUEoZSx0KSwhVSlicmVhaztpZihVLmludmFsaWQpe2NvbnN0IGU9cj4wPyJ1bmV4cGVjdGVkIjoiZXhjZXNzaXZlIjsoMCxuLndhcm4pKCJkZWNvZGVTY2FuIC0gIi5jb25jYXQoZSwiIE1DVSBkYXRhLCBjdXJyZW50IG1hcmtlciBpczogIikuY29uY2F0KFUuaW52YWxpZCkpLHQ9VS5vZmZzZXR9aWYoIShVLm1hcmtlcj49NjU0ODgmJlUubWFya2VyPD02NTQ5NSkpYnJlYWs7dCs9Mn1yZXR1cm4gdC15fWZ1bmN0aW9uIHgoZSx0LHIpe2NvbnN0IG49ZS5xdWFudGl6YXRpb25UYWJsZSxhPWUuYmxvY2tEYXRhO2xldCBpLG8sYyxsLHksdyx2LHgsUyxBLGssQyxPLEYsSSxULE07aWYoIW4pdGhyb3cgbmV3IHMoIm1pc3NpbmcgcmVxdWlyZWQgUXVhbnRpemF0aW9uIFRhYmxlLiIpO2ZvcihsZXQgZT0wO2U8NjQ7ZSs9OClTPWFbdCtlXSxBPWFbdCtlKzFdLGs9YVt0K2UrMl0sQz1hW3QrZSszXSxPPWFbdCtlKzRdLEY9YVt0K2UrNV0sST1hW3QrZSs2XSxUPWFbdCtlKzddLFMqPW5bZV0sMCE9KEF8a3xDfE98RnxJfFQpPyhBKj1uW2UrMV0sayo9bltlKzJdLEMqPW5bZSszXSxPKj1uW2UrNF0sRio9bltlKzVdLEkqPW5bZSs2XSxUKj1uW2UrN10saT1tKlMrMTI4Pj44LG89bSpPKzEyOD4+OCxjPWssbD1JLHk9YiooQS1UKSsxMjg+PjgseD1iKihBK1QpKzEyOD4+OCx3PUM8PDQsdj1GPDw0LGk9aStvKzE+PjEsbz1pLW8sTT1jKnArbCpnKzEyOD4+OCxjPWMqZy1sKnArMTI4Pj44LGw9TSx5PXkrdisxPj4xLHY9eS12LHg9eCt3KzE+PjEsdz14LXcsaT1pK2wrMT4+MSxsPWktbCxvPW8rYysxPj4xLGM9by1jLE09eSpmK3gqZCsyMDQ4Pj4xMix5PXkqZC14KmYrMjA0OD4+MTIseD1NLE09dyp1K3YqaCsyMDQ4Pj4xMix3PXcqaC12KnUrMjA0OD4+MTIsdj1NLHJbZV09aSt4LHJbZSs3XT1pLXgscltlKzFdPW8rdixyW2UrNl09by12LHJbZSsyXT1jK3cscltlKzVdPWMtdyxyW2UrM109bCt5LHJbZSs0XT1sLXkpOihNPW0qUys1MTI+PjEwLHJbZV09TSxyW2UrMV09TSxyW2UrMl09TSxyW2UrM109TSxyW2UrNF09TSxyW2UrNV09TSxyW2UrNl09TSxyW2UrN109TSk7Zm9yKGxldCBlPTA7ZTw4OysrZSlTPXJbZV0sQT1yW2UrOF0saz1yW2UrMTZdLEM9cltlKzI0XSxPPXJbZSszMl0sRj1yW2UrNDBdLEk9cltlKzQ4XSxUPXJbZSs1Nl0sMCE9KEF8a3xDfE98RnxJfFQpPyhpPW0qUysyMDQ4Pj4xMixvPW0qTysyMDQ4Pj4xMixjPWssbD1JLHk9YiooQS1UKSsyMDQ4Pj4xMix4PWIqKEErVCkrMjA0OD4+MTIsdz1DLHY9RixpPTQxMTIrKGkrbysxPj4xKSxvPWktbyxNPWMqcCtsKmcrMjA0OD4+MTIsYz1jKmctbCpwKzIwNDg+PjEyLGw9TSx5PXkrdisxPj4xLHY9eS12LHg9eCt3KzE+PjEsdz14LXcsaT1pK2wrMT4+MSxsPWktbCxvPW8rYysxPj4xLGM9by1jLE09eSpmK3gqZCsyMDQ4Pj4xMix5PXkqZC14KmYrMjA0OD4+MTIseD1NLE09dyp1K3YqaCsyMDQ4Pj4xMix3PXcqaC12KnUrMjA0OD4+MTIsdj1NLFM9aSt4LFQ9aS14LEE9byt2LEk9by12LGs9Yyt3LEY9Yy13LEM9bCt5LE89bC15LFM8MTY/Uz0wOlM+PTQwODA/Uz0yNTU6Uz4+PTQsQTwxNj9BPTA6QT49NDA4MD9BPTI1NTpBPj49NCxrPDE2P2s9MDprPj00MDgwP2s9MjU1Oms+Pj00LEM8MTY/Qz0wOkM+PTQwODA/Qz0yNTU6Qz4+PTQsTzwxNj9PPTA6Tz49NDA4MD9PPTI1NTpPPj49NCxGPDE2P0Y9MDpGPj00MDgwP0Y9MjU1OkY+Pj00LEk8MTY/ST0wOkk+PTQwODA/ST0yNTU6ST4+PTQsVDwxNj9UPTA6VD49NDA4MD9UPTI1NTpUPj49NCxhW3QrZV09UyxhW3QrZSs4XT1BLGFbdCtlKzE2XT1rLGFbdCtlKzI0XT1DLGFbdCtlKzMyXT1PLGFbdCtlKzQwXT1GLGFbdCtlKzQ4XT1JLGFbdCtlKzU2XT1UKTooTT1tKlMrODE5Mj4+MTQsTT1NPC0yMDQwPzA6TT49MjAyND8yNTU6TSsyMDU2Pj40LGFbdCtlXT1NLGFbdCtlKzhdPU0sYVt0K2UrMTZdPU0sYVt0K2UrMjRdPU0sYVt0K2UrMzJdPU0sYVt0K2UrNDBdPU0sYVt0K2UrNDhdPU0sYVt0K2UrNTZdPU0pfWZ1bmN0aW9uIFMoZSx0KXtjb25zdCByPXQuYmxvY2tzUGVyTGluZSxuPXQuYmxvY2tzUGVyQ29sdW1uLGE9bmV3IEludDE2QXJyYXkoNjQpO2ZvcihsZXQgZT0wO2U8bjtlKyspZm9yKGxldCBuPTA7bjxyO24rKyl4KHQsdyh0LGUsbiksYSk7cmV0dXJuIHQuYmxvY2tEYXRhfWZ1bmN0aW9uIEEoZSx0KXtsZXQgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06dDtjb25zdCBuPWUubGVuZ3RoLTE7bGV0IGE9cjx0P3I6dDtpZih0Pj1uKXJldHVybiBudWxsO2NvbnN0IHM9KDAsaS5yZWFkVWludDE2KShlLHQpO2lmKHM+PTY1NDcyJiZzPD02NTUzNClyZXR1cm57aW52YWxpZDpudWxsLG1hcmtlcjpzLG9mZnNldDp0fTtsZXQgbz0oMCxpLnJlYWRVaW50MTYpKGUsYSk7Zm9yKDshKG8+PTY1NDcyJiZvPD02NTUzNCk7KXtpZigrK2E+PW4pcmV0dXJuIG51bGw7bz0oMCxpLnJlYWRVaW50MTYpKGUsYSl9cmV0dXJue2ludmFsaWQ6cy50b1N0cmluZygxNiksbWFya2VyOm8sb2Zmc2V0OmF9fXQuSnBlZ0ltYWdlPWNsYXNze2NvbnN0cnVjdG9yKCl7bGV0e2RlY29kZVRyYW5zZm9ybTplPW51bGwsY29sb3JUcmFuc2Zvcm06dD0tMX09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O3RoaXMuX2RlY29kZVRyYW5zZm9ybT1lLHRoaXMuX2NvbG9yVHJhbnNmb3JtPXR9cGFyc2UoZSl7bGV0e2RubFNjYW5MaW5lczp0PW51bGx9PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtmdW5jdGlvbiByKCl7Y29uc3QgdD0oMCxpLnJlYWRVaW50MTYpKGUsZCk7ZCs9MjtsZXQgcj1kK3QtMjtjb25zdCBhPUEoZSxyLGQpO251bGwhPWEmJmEuaW52YWxpZCYmKCgwLG4ud2FybikoInJlYWREYXRhQmxvY2sgLSBpbmNvcnJlY3QgbGVuZ3RoLCBjdXJyZW50IG1hcmtlciBpczogIithLmludmFsaWQpLHI9YS5vZmZzZXQpO2NvbnN0IHM9ZS5zdWJhcnJheShkLHIpO3JldHVybiBkKz1zLmxlbmd0aCxzfWZ1bmN0aW9uIGEoZSl7Y29uc3QgdD1NYXRoLmNlaWwoZS5zYW1wbGVzUGVyTGluZS84L2UubWF4SCkscj1NYXRoLmNlaWwoZS5zY2FuTGluZXMvOC9lLm1heFYpO2Zvcihjb25zdCBuIG9mIGUuY29tcG9uZW50cyl7Y29uc3QgYT1NYXRoLmNlaWwoTWF0aC5jZWlsKGUuc2FtcGxlc1BlckxpbmUvOCkqbi5oL2UubWF4SCksaT1NYXRoLmNlaWwoTWF0aC5jZWlsKGUuc2NhbkxpbmVzLzgpKm4udi9lLm1heFYpLHM9dCpuLmgsbz1yKm4udio2NCoocysxKTtuLmJsb2NrRGF0YT1uZXcgSW50MTZBcnJheShvKSxuLmJsb2Nrc1BlckxpbmU9YSxuLmJsb2Nrc1BlckNvbHVtbj1pfWUubWN1c1BlckxpbmU9dCxlLm1jdXNQZXJDb2x1bW49cn1sZXQgaCx1LGQ9MCxmPW51bGwsZz1udWxsLHA9MDtjb25zdCBtPVtdLGI9W10sdz1bXTtsZXQgeD0oMCxpLnJlYWRVaW50MTYpKGUsZCk7aWYoZCs9Miw2NTQ5NiE9PXgpdGhyb3cgbmV3IHMoIlNPSSBub3QgZm91bmQiKTt4PSgwLGkucmVhZFVpbnQxNikoZSxkKSxkKz0yO2U6Zm9yKDs2NTQ5NyE9PXg7KXtsZXQgUyxrLEM7c3dpdGNoKHgpe2Nhc2UgNjU1MDQ6Y2FzZSA2NTUwNTpjYXNlIDY1NTA2OmNhc2UgNjU1MDc6Y2FzZSA2NTUwODpjYXNlIDY1NTA5OmNhc2UgNjU1MTA6Y2FzZSA2NTUxMTpjYXNlIDY1NTEyOmNhc2UgNjU1MTM6Y2FzZSA2NTUxNDpjYXNlIDY1NTE1OmNhc2UgNjU1MTY6Y2FzZSA2NTUxNzpjYXNlIDY1NTE4OmNhc2UgNjU1MTk6Y2FzZSA2NTUzNDpjb25zdCBPPXIoKTs2NTUwND09PXgmJjc0PT09T1swXSYmNzA9PT1PWzFdJiY3Mz09PU9bMl0mJjcwPT09T1szXSYmMD09PU9bNF0mJihmPXt2ZXJzaW9uOnttYWpvcjpPWzVdLG1pbm9yOk9bNl19LGRlbnNpdHlVbml0czpPWzddLHhEZW5zaXR5Ok9bOF08PDh8T1s5XSx5RGVuc2l0eTpPWzEwXTw8OHxPWzExXSx0aHVtYldpZHRoOk9bMTJdLHRodW1iSGVpZ2h0Ok9bMTNdLHRodW1iRGF0YTpPLnN1YmFycmF5KDE0LDE0KzMqT1sxMl0qT1sxM10pfSksNjU1MTg9PT14JiY2NT09PU9bMF0mJjEwMD09PU9bMV0mJjExMT09PU9bMl0mJjk4PT09T1szXSYmMTAxPT09T1s0XSYmKGc9e3ZlcnNpb246T1s1XTw8OHxPWzZdLGZsYWdzMDpPWzddPDw4fE9bOF0sZmxhZ3MxOk9bOV08PDh8T1sxMF0sdHJhbnNmb3JtQ29kZTpPWzExXX0pO2JyZWFrO2Nhc2UgNjU0OTk6Y29uc3QgRj0oMCxpLnJlYWRVaW50MTYpKGUsZCk7ZCs9Mjtjb25zdCBJPUYrZC0yO2xldCBUO2Zvcig7ZDxJOyl7Y29uc3QgdD1lW2QrK10scj1uZXcgVWludDE2QXJyYXkoNjQpO2lmKHQ+PjQ9PTApZm9yKGs9MDtrPDY0O2srKylUPWxba10scltUXT1lW2QrK107ZWxzZXtpZih0Pj40IT0xKXRocm93IG5ldyBzKCJEUVQgLSBpbnZhbGlkIHRhYmxlIHNwZWMiKTtmb3Ioaz0wO2s8NjQ7aysrKVQ9bFtrXSxyW1RdPSgwLGkucmVhZFVpbnQxNikoZSxkKSxkKz0yfW1bMTUmdF09cn1icmVhaztjYXNlIDY1NDcyOmNhc2UgNjU0NzM6Y2FzZSA2NTQ3NDppZihoKXRocm93IG5ldyBzKCJPbmx5IHNpbmdsZSBmcmFtZSBKUEVHcyBzdXBwb3J0ZWQiKTtkKz0yLGg9e30saC5leHRlbmRlZD02NTQ3Mz09PXgsaC5wcm9ncmVzc2l2ZT02NTQ3ND09PXgsaC5wcmVjaXNpb249ZVtkKytdO2NvbnN0IE09KDAsaS5yZWFkVWludDE2KShlLGQpO2QrPTIsaC5zY2FuTGluZXM9dHx8TSxoLnNhbXBsZXNQZXJMaW5lPSgwLGkucmVhZFVpbnQxNikoZSxkKSxkKz0yLGguY29tcG9uZW50cz1bXSxoLmNvbXBvbmVudElkcz17fTtjb25zdCBFPWVbZCsrXTtsZXQgUD0wLFI9MDtmb3IoUz0wO1M8RTtTKyspe2NvbnN0IHQ9ZVtkXSxyPWVbZCsxXT4+NCxuPTE1JmVbZCsxXTtQPHImJihQPXIpLFI8biYmKFI9bik7Y29uc3QgYT1lW2QrMl07Qz1oLmNvbXBvbmVudHMucHVzaCh7aDpyLHY6bixxdWFudGl6YXRpb25JZDphLHF1YW50aXphdGlvblRhYmxlOm51bGx9KSxoLmNvbXBvbmVudElkc1t0XT1DLTEsZCs9M31oLm1heEg9UCxoLm1heFY9UixhKGgpO2JyZWFrO2Nhc2UgNjU0NzY6Y29uc3QgTj0oMCxpLnJlYWRVaW50MTYpKGUsZCk7Zm9yKGQrPTIsUz0yO1M8Tjspe2NvbnN0IHQ9ZVtkKytdLHI9bmV3IFVpbnQ4QXJyYXkoMTYpO2xldCBuPTA7Zm9yKGs9MDtrPDE2O2srKyxkKyspbis9cltrXT1lW2RdO2NvbnN0IGE9bmV3IFVpbnQ4QXJyYXkobik7Zm9yKGs9MDtrPG47aysrLGQrKylhW2tdPWVbZF07Uys9MTcrbiwodD4+ND09MD93OmIpWzE1JnRdPXkocixhKX1icmVhaztjYXNlIDY1NTAxOmQrPTIsdT0oMCxpLnJlYWRVaW50MTYpKGUsZCksZCs9MjticmVhaztjYXNlIDY1NDk4OmNvbnN0IEQ9MT09KytwJiYhdDtkKz0yO2NvbnN0IEI9ZVtkKytdLEw9W107Zm9yKFM9MDtTPEI7UysrKXtjb25zdCB0PWVbZCsrXSxyPWguY29tcG9uZW50SWRzW3RdLG49aC5jb21wb25lbnRzW3JdO24uaW5kZXg9dDtjb25zdCBhPWVbZCsrXTtuLmh1ZmZtYW5UYWJsZURDPXdbYT4+NF0sbi5odWZmbWFuVGFibGVBQz1iWzE1JmFdLEwucHVzaChuKX1jb25zdCBfPWVbZCsrXSxqPWVbZCsrXSxVPWVbZCsrXTt0cnl7Y29uc3QgdD12KGUsZCxoLEwsdSxfLGosVT4+NCwxNSZVLEQpO2QrPXR9Y2F0Y2godCl7aWYodCBpbnN0YW5jZW9mIG8pcmV0dXJuKDAsbi53YXJuKSgiIi5jb25jYXQodC5tZXNzYWdlLCIgLS0gYXR0ZW1wdGluZyB0byByZS1wYXJzZSB0aGUgSlBFRyBpbWFnZS4iKSksdGhpcy5wYXJzZShlLHtkbmxTY2FuTGluZXM6dC5zY2FuTGluZXN9KTtpZih0IGluc3RhbmNlb2YgYyl7KDAsbi53YXJuKSgiIi5jb25jYXQodC5tZXNzYWdlLCIgLS0gaWdub3JpbmcgdGhlIHJlc3Qgb2YgdGhlIGltYWdlIGRhdGEuIikpO2JyZWFrIGV9dGhyb3cgdH1icmVhaztjYXNlIDY1NTAwOmQrPTQ7YnJlYWs7Y2FzZSA2NTUzNToyNTUhPT1lW2RdJiZkLS07YnJlYWs7ZGVmYXVsdDpjb25zdCAkPUEoZSxkLTIsZC0zKTtpZihudWxsIT0kJiYkLmludmFsaWQpeygwLG4ud2FybikoIkpwZWdJbWFnZS5wYXJzZSAtIHVuZXhwZWN0ZWQgZGF0YSwgY3VycmVudCBtYXJrZXIgaXM6ICIrJC5pbnZhbGlkKSxkPSQub2Zmc2V0O2JyZWFrfWlmKCEkfHxkPj1lLmxlbmd0aC0xKXsoMCxuLndhcm4pKCJKcGVnSW1hZ2UucGFyc2UgLSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGltYWdlIGRhdGEgd2l0aG91dCBmaW5kaW5nIGFuIEVPSSBtYXJrZXIgKDB4RkZEOSkuIik7YnJlYWsgZX10aHJvdyBuZXcgcygiSnBlZ0ltYWdlLnBhcnNlIC0gdW5rbm93biBtYXJrZXI6ICIreC50b1N0cmluZygxNikpfXg9KDAsaS5yZWFkVWludDE2KShlLGQpLGQrPTJ9dGhpcy53aWR0aD1oLnNhbXBsZXNQZXJMaW5lLHRoaXMuaGVpZ2h0PWguc2NhbkxpbmVzLHRoaXMuamZpZj1mLHRoaXMuYWRvYmU9Zyx0aGlzLmNvbXBvbmVudHM9W107Zm9yKGNvbnN0IGUgb2YgaC5jb21wb25lbnRzKXtjb25zdCB0PW1bZS5xdWFudGl6YXRpb25JZF07dCYmKGUucXVhbnRpemF0aW9uVGFibGU9dCksdGhpcy5jb21wb25lbnRzLnB1c2goe2luZGV4OmUuaW5kZXgsb3V0cHV0OlMoMCxlKSxzY2FsZVg6ZS5oL2gubWF4SCxzY2FsZVk6ZS52L2gubWF4VixibG9ja3NQZXJMaW5lOmUuYmxvY2tzUGVyTGluZSxibG9ja3NQZXJDb2x1bW46ZS5ibG9ja3NQZXJDb2x1bW59KX10aGlzLm51bUNvbXBvbmVudHM9dGhpcy5jb21wb25lbnRzLmxlbmd0aH1fZ2V0TGluZWFyaXplZEJsb2NrRGF0YShlLHQpe2xldCByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3Qgbj10aGlzLndpZHRoL2UsYT10aGlzLmhlaWdodC90O2xldCBpLHMsbyxjLGwsaCx1LGQsZixnLHAsbT0wO2NvbnN0IGI9dGhpcy5jb21wb25lbnRzLmxlbmd0aCx5PWUqdCpiLHc9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHkpLHY9bmV3IFVpbnQzMkFycmF5KGUpLHg9NDI5NDk2NzI4ODtsZXQgUztmb3IodT0wO3U8Yjt1Kyspe2lmKGk9dGhpcy5jb21wb25lbnRzW3VdLHM9aS5zY2FsZVgqbixvPWkuc2NhbGVZKmEsbT11LHA9aS5vdXRwdXQsYz1pLmJsb2Nrc1BlckxpbmUrMTw8MyxzIT09Uyl7Zm9yKGw9MDtsPGU7bCsrKWQ9MHxsKnMsdltsXT0oZCZ4KTw8M3w3JmQ7Uz1zfWZvcihoPTA7aDx0O2grKylmb3IoZD0wfGgqbyxnPWMqKGQmeCl8KDcmZCk8PDMsbD0wO2w8ZTtsKyspd1ttXT1wW2crdltsXV0sbSs9Yn1sZXQgQT10aGlzLl9kZWNvZGVUcmFuc2Zvcm07aWYocnx8NCE9PWJ8fEF8fChBPW5ldyBJbnQzMkFycmF5KFstMjU2LDI1NSwtMjU2LDI1NSwtMjU2LDI1NSwtMjU2LDI1NV0pKSxBKWZvcih1PTA7dTx5Oylmb3IoZD0wLGY9MDtkPGI7ZCsrLHUrKyxmKz0yKXdbdV09KHdbdV0qQVtmXT4+OCkrQVtmKzFdO3JldHVybiB3fWdldCBfaXNDb2xvckNvbnZlcnNpb25OZWVkZWQoKXtyZXR1cm4gdGhpcy5hZG9iZT8hIXRoaXMuYWRvYmUudHJhbnNmb3JtQ29kZTozPT09dGhpcy5udW1Db21wb25lbnRzPzAhPT10aGlzLl9jb2xvclRyYW5zZm9ybSYmKDgyIT09dGhpcy5jb21wb25lbnRzWzBdLmluZGV4fHw3MSE9PXRoaXMuY29tcG9uZW50c1sxXS5pbmRleHx8NjYhPT10aGlzLmNvbXBvbmVudHNbMl0uaW5kZXgpOjE9PT10aGlzLl9jb2xvclRyYW5zZm9ybX1fY29udmVydFljY1RvUmdiKGUpe2xldCB0LHIsbjtmb3IobGV0IGE9MCxpPWUubGVuZ3RoO2E8aTthKz0zKXQ9ZVthXSxyPWVbYSsxXSxuPWVbYSsyXSxlW2FdPXQtMTc5LjQ1NisxLjQwMipuLGVbYSsxXT10KzEzNS40NTktLjM0NCpyLS43MTQqbixlW2ErMl09dC0yMjYuODE2KzEuNzcyKnI7cmV0dXJuIGV9X2NvbnZlcnRZY2NUb1JnYmEoZSx0KXtmb3IobGV0IHI9MCxuPTAsYT1lLmxlbmd0aDtyPGE7cis9MyxuKz00KXtjb25zdCBhPWVbcl0saT1lW3IrMV0scz1lW3IrMl07dFtuXT1hLTE3OS40NTYrMS40MDIqcyx0W24rMV09YSsxMzUuNDU5LS4zNDQqaS0uNzE0KnMsdFtuKzJdPWEtMjI2LjgxNisxLjc3MippLHRbbiszXT0yNTV9cmV0dXJuIHR9X2NvbnZlcnRZY2NrVG9SZ2IoZSl7bGV0IHQscixuLGEsaT0wO2ZvcihsZXQgcz0wLG89ZS5sZW5ndGg7czxvO3MrPTQpdD1lW3NdLHI9ZVtzKzFdLG49ZVtzKzJdLGE9ZVtzKzNdLGVbaSsrXT1yKigtNjYwNjM1NjY5NDIwMzY0ZS0xOSpyKy4wMDA0MzcxMzA0NzU5MjYyMzIqbi01NDA4MDYxMDA2NDU5OWUtMTgqdCsuMDAwNDg0NDk3OTcxMjAyODEqYS0uMTU0MzYyMTUxODcxMTI2KS0xMjIuNjcxOTU0MDY4OTQrbiooLS4wMDA5NTc5NjQzNzg0NDU3NzMqbisuMDAwODE3MDc2OTExMzQ2NjI1KnQtLjAwNDc3MjcxNDA1NDA4NzQ3KmErMS41MzM4MDI1MzIyMTczNCkrdCooLjAwMDk2MTI1MDE4NDEzMDY4OCp0LS4wMDI2NjI1NzMzMjI4MzkzMyphKy40ODM1NzA4ODQ1MTI2NSkrYSooLS4wMDAzMzYxOTcxNzc2MTgzOTQqYSsuNDg0NzkxNTYxNDkwNzc2KSxlW2krK109MTA3LjI2ODAzOTM5NzcyNCtyKigyMTk5MjcxMDQ1MjU3NDFlLTE5KnItLjAwMDY0MDk5MjAxODI5Nzk0NSpuKy4wMDA2NTkzOTcwMDEyNDU1NzcqdCsuMDAwNDI2MTA1NjUyOTM4ODM3KmEtLjE3NjQ5MTc5MjQ2Mjg3NSkrbiooLS4wMDA3NzgyNjk5NDE1MTM2ODMqbisuMDAxMzA4NzIyNjE0MDgyNzUqdCsuMDAwNzcwNDgyNjMxODAxMTMyKmEtLjE1MTA1MTQ5Mjc3NTU2MikrdCooLjAwMTI2OTM1MzY4MTE0ODQzKnQtLjAwMjY1MDkwMTg5MDEwODk4KmErLjI1ODAyOTEwMjA2ODQ1KSthKigtLjAwMDMxODkxMzExNzU4ODMyOCphLS4yMTM3NDI0MDAzMjM2NjUpLGVbaSsrXT1yKigtLjAwMDU3MDExNTE5Njk3MzY3NypyLTI2MzQwOTA1MTAwNDU4OWUtMTkqbisuMDAyMDc0MTA4ODExNTAxMip0LS4wMDI4ODI2MDIzNjg1MzQ0MiphKy44MTQyNzI5NjgzNTkyOTUpLTIwLjgxMDAxMjU0Njk0NytuKigtMTUzNDk2MDU3NDQwOTc1ZS0xOSpuLS4wMDAxMzI2ODkwNDM5NjE0NDYqdCsuMDAwNTYwODMzNjkxMjQyODEyKmEtLjE5NTE1MjAyNzUzNDA0OSkrdCooLjAwMTc0NDE4MTMyOTI3NTgyKnQtLjAwMjU1MjQzMzIxNDM5MzQ3KmErLjExNjkzNTAyMDQ2NTE0NSkrYSooLS4wMDAzNDM1MzE5OTY1MTA1NTUqYSsuMjQxNjUyNjAyMzI0MDcpO3JldHVybiBlLnN1YmFycmF5KDAsaSl9X2NvbnZlcnRZY2NrVG9SZ2JhKGUpe2ZvcihsZXQgdD0wLHI9ZS5sZW5ndGg7dDxyO3QrPTQpe2NvbnN0IHI9ZVt0XSxuPWVbdCsxXSxhPWVbdCsyXSxpPWVbdCszXTtlW3RdPW4qKC02NjA2MzU2Njk0MjAzNjRlLTE5Km4rLjAwMDQzNzEzMDQ3NTkyNjIzMiphLTU0MDgwNjEwMDY0NTk5ZS0xOCpyKy4wMDA0ODQ0OTc5NzEyMDI4MSppLS4xNTQzNjIxNTE4NzExMjYpLTEyMi42NzE5NTQwNjg5NCthKigtLjAwMDk1Nzk2NDM3ODQ0NTc3MyphKy4wMDA4MTcwNzY5MTEzNDY2MjUqci0uMDA0NzcyNzE0MDU0MDg3NDcqaSsxLjUzMzgwMjUzMjIxNzM0KStyKiguMDAwOTYxMjUwMTg0MTMwNjg4KnItLjAwMjY2MjU3MzMyMjgzOTMzKmkrLjQ4MzU3MDg4NDUxMjY1KStpKigtLjAwMDMzNjE5NzE3NzYxODM5NCppKy40ODQ3OTE1NjE0OTA3NzYpLGVbdCsxXT0xMDcuMjY4MDM5Mzk3NzI0K24qKDIxOTkyNzEwNDUyNTc0MWUtMTkqbi0uMDAwNjQwOTkyMDE4Mjk3OTQ1KmErLjAwMDY1OTM5NzAwMTI0NTU3NypyKy4wMDA0MjYxMDU2NTI5Mzg4MzcqaS0uMTc2NDkxNzkyNDYyODc1KSthKigtLjAwMDc3ODI2OTk0MTUxMzY4MyphKy4wMDEzMDg3MjI2MTQwODI3NSpyKy4wMDA3NzA0ODI2MzE4MDExMzIqaS0uMTUxMDUxNDkyNzc1NTYyKStyKiguMDAxMjY5MzUzNjgxMTQ4NDMqci0uMDAyNjUwOTAxODkwMTA4OTgqaSsuMjU4MDI5MTAyMDY4NDUpK2kqKC0uMDAwMzE4OTEzMTE3NTg4MzI4KmktLjIxMzc0MjQwMDMyMzY2NSksZVt0KzJdPW4qKC0uMDAwNTcwMTE1MTk2OTczNjc3Km4tMjYzNDA5MDUxMDA0NTg5ZS0xOSphKy4wMDIwNzQxMDg4MTE1MDEyKnItLjAwMjg4MjYwMjM2ODUzNDQyKmkrLjgxNDI3Mjk2ODM1OTI5NSktMjAuODEwMDEyNTQ2OTQ3K2EqKC0xNTM0OTYwNTc0NDA5NzVlLTE5KmEtLjAwMDEzMjY4OTA0Mzk2MTQ0NipyKy4wMDA1NjA4MzM2OTEyNDI4MTIqaS0uMTk1MTUyMDI3NTM0MDQ5KStyKiguMDAxNzQ0MTgxMzI5Mjc1ODIqci0uMDAyNTUyNDMzMjE0MzkzNDcqaSsuMTE2OTM1MDIwNDY1MTQ1KStpKigtLjAwMDM0MzUzMTk5NjUxMDU1NSppKy4yNDE2NTI2MDIzMjQwNyksZVt0KzNdPTI1NX1yZXR1cm4gZX1fY29udmVydFljY2tUb0NteWsoZSl7bGV0IHQscixuO2ZvcihsZXQgYT0wLGk9ZS5sZW5ndGg7YTxpO2ErPTQpdD1lW2FdLHI9ZVthKzFdLG49ZVthKzJdLGVbYV09NDM0LjQ1Ni10LTEuNDAyKm4sZVthKzFdPTExOS41NDEtdCsuMzQ0KnIrLjcxNCpuLGVbYSsyXT00ODEuODE2LXQtMS43NzIqcjtyZXR1cm4gZX1fY29udmVydENteWtUb1JnYihlKXtsZXQgdCxyLG4sYSxpPTA7Zm9yKGxldCBzPTAsbz1lLmxlbmd0aDtzPG87cys9NCl0PWVbc10scj1lW3MrMV0sbj1lW3MrMl0sYT1lW3MrM10sZVtpKytdPTI1NSt0KigtNjc0NzE0NzA3MzYwMjQ0MWUtMjAqdCsuMDAwODM3OTI2MjEyMTAxMzcyNypyKy4wMDAyODk0NzE4MTg4NjQzMjk0Km4rLjAwMzI2NDIzMTA1NzUzNzgwNiphLTEuMTE4NTYxMTg2NzIwMzkzNykrciooMjYzNzQxMDc2MTYwODk0MDVlLTIxKnItODYyNjk0OTE1ODYzODU3MmUtMjAqbi0uMDAwMjc0ODc2OTA2NzQ5OTQ5MSphLS4wMjE1NTY4ODc5NDk3ODk2NykrbiooLTM4NzgwOTkyMTI4NjkzNjNlLTIwKm4tLjAwMDMyNjc4MDgyNzk0ODUyODYqYSsuMDY4Njc0MjIzODU5NTM0NSktYSooLjAwMDMzNjE5NzE3NzYxODM5MzcqYSsuNzQzMDY1OTE1MTM0MjI1NCksZVtpKytdPTI1NSt0KiguMDAwMTM1OTYzNzI4MTM1ODg4NDgqdCsuMDAwOTI0NTM3MTMyNTczNTg1KnIrLjAwMDEwNTY3MzU5NjE4NjgzNTkzKm4rLjAwMDQ3OTE4NjQ2ODc0MzY1MTIqYS0uMzEwOTY4OTU4NzUxNTg3NSkrciooLS4wMDAyMzU0NTM0NjEwODM3MDM0NCpyKy4wMDAyNzAyODQ1MjUzNTM0NzE0Km4rLjAwMjAyMDAzMDg5NzczMDcxNTYqYS0uNzQ4ODA1MjE2NzAxNTQ5NCkrbiooNjgzNDgxNTk5ODIzNTY2MmUtMjAqbisuMDAwMTUxNjg0NTIzNjM0NjA5NzMqYS0uMDk3NTE5Mjc3NzQ3Mjg5MzMpLWEqKC4wMDAzMTg5MTMxMTc1ODgzMjgxKmErLjczNjQ4ODM4MDc3MzMxNjgpLGVbaSsrXT0yNTUrdCooMTM1OTg2NTA0MTEzODUzMDdlLTIxKnQrLjAwMDEyNDIzOTU2MTc1NDkwODUxKnIrLjAwMDQ3NTE5ODUwOTc1ODM1ODkqbi0zNjcyOTMxNzQ3NjYzMDQyMmUtMjIqYS0uMDU1NjIxODY5ODAyNjQwMzQpK3IqKC4wMDAxNjE0MTM4MDU5ODcyNDY3NipyKy4wMDA5NjkyMjM5MTMwNzI1MTg2Km4rLjAwMDc3ODI2OTI0NTAwMzYyNTMqYS0uNDQwMTUyMzIzNjc1MjY0NjMpK24qKDUuMDY4ODgyOTE0MDY4NzY5ZS03Km4rLjAwMTc3NzgzNjkwMTEzNzUwNzEqYS0uNzU5MTQ1NDY0OTc0OTYwOSktYSooLjAwMDM0MzUzMTk5NjUxMDU1NTMqYSsuNzA2Mzc3MDE4NjE2MDE0NCk7cmV0dXJuIGUuc3ViYXJyYXkoMCxpKX1fY29udmVydENteWtUb1JnYmEoZSl7Zm9yKGxldCB0PTAscj1lLmxlbmd0aDt0PHI7dCs9NCl7Y29uc3Qgcj1lW3RdLG49ZVt0KzFdLGE9ZVt0KzJdLGk9ZVt0KzNdO2VbdF09MjU1K3IqKC02NzQ3MTQ3MDczNjAyNDQxZS0yMCpyKy4wMDA4Mzc5MjYyMTIxMDEzNzI3Km4rLjAwMDI4OTQ3MTgxODg2NDMyOTQqYSsuMDAzMjY0MjMxMDU3NTM3ODA2KmktMS4xMTg1NjExODY3MjAzOTM3KStuKigyNjM3NDEwNzYxNjA4OTQwNWUtMjEqbi04NjI2OTQ5MTU4NjM4NTcyZS0yMCphLS4wMDAyNzQ4NzY5MDY3NDk5NDkxKmktLjAyMTU1Njg4Nzk0OTc4OTY3KSthKigtMzg3ODA5OTIxMjg2OTM2M2UtMjAqYS0uMDAwMzI2NzgwODI3OTQ4NTI4NippKy4wNjg2NzQyMjM4NTk1MzQ1KS1pKiguMDAwMzM2MTk3MTc3NjE4MzkzNyppKy43NDMwNjU5MTUxMzQyMjU0KSxlW3QrMV09MjU1K3IqKC4wMDAxMzU5NjM3MjgxMzU4ODg0OCpyKy4wMDA5MjQ1MzcxMzI1NzM1ODUqbisuMDAwMTA1NjczNTk2MTg2ODM1OTMqYSsuMDAwNDc5MTg2NDY4NzQzNjUxMippLS4zMTA5Njg5NTg3NTE1ODc1KStuKigtLjAwMDIzNTQ1MzQ2MTA4MzcwMzQ0Km4rLjAwMDI3MDI4NDUyNTM1MzQ3MTQqYSsuMDAyMDIwMDMwODk3NzMwNzE1NippLS43NDg4MDUyMTY3MDE1NDk0KSthKig2ODM0ODE1OTk4MjM1NjYyZS0yMCphKy4wMDAxNTE2ODQ1MjM2MzQ2MDk3MyppLS4wOTc1MTkyNzc3NDcyODkzMyktaSooLjAwMDMxODkxMzExNzU4ODMyODEqaSsuNzM2NDg4MzgwNzczMzE2OCksZVt0KzJdPTI1NStyKigxMzU5ODY1MDQxMTM4NTMwN2UtMjEqcisuMDAwMTI0MjM5NTYxNzU0OTA4NTEqbisuMDAwNDc1MTk4NTA5NzU4MzU4OSphLTM2NzI5MzE3NDc2NjMwNDIyZS0yMippLS4wNTU2MjE4Njk4MDI2NDAzNCkrbiooLjAwMDE2MTQxMzgwNTk4NzI0Njc2Km4rLjAwMDk2OTIyMzkxMzA3MjUxODYqYSsuMDAwNzc4MjY5MjQ1MDAzNjI1MyppLS40NDAxNTIzMjM2NzUyNjQ2MykrYSooNS4wNjg4ODI5MTQwNjg3NjllLTcqYSsuMDAxNzc3ODM2OTAxMTM3NTA3MSppLS43NTkxNDU0NjQ5NzQ5NjA5KS1pKiguMDAwMzQzNTMxOTk2NTEwNTU1MyppKy43MDYzNzcwMTg2MTYwMTQ0KSxlW3QrM109MjU1fXJldHVybiBlfWdldERhdGEoZSl7bGV0e3dpZHRoOnQsaGVpZ2h0OnIsZm9yY2VSR0JBOm49ITEsZm9yY2VSR0I6aT0hMSxpc1NvdXJjZVBERjpvPSExfT1lO2lmKHRoaXMubnVtQ29tcG9uZW50cz40KXRocm93IG5ldyBzKCJVbnN1cHBvcnRlZCBjb2xvciBtb2RlIik7Y29uc3QgYz10aGlzLl9nZXRMaW5lYXJpemVkQmxvY2tEYXRhKHQscixvKTtpZigxPT09dGhpcy5udW1Db21wb25lbnRzJiYobnx8aSkpe2NvbnN0IGU9Yy5sZW5ndGgqKG4/NDozKSx0PW5ldyBVaW50OENsYW1wZWRBcnJheShlKTtsZXQgcj0wO2lmKG4pKDAsYS5ncmF5VG9SR0JBKShjLG5ldyBVaW50MzJBcnJheSh0LmJ1ZmZlcikpO2Vsc2UgZm9yKGNvbnN0IGUgb2YgYyl0W3IrK109ZSx0W3IrK109ZSx0W3IrK109ZTtyZXR1cm4gdH1pZigzPT09dGhpcy5udW1Db21wb25lbnRzJiZ0aGlzLl9pc0NvbG9yQ29udmVyc2lvbk5lZWRlZCl7aWYobil7Y29uc3QgZT1uZXcgVWludDhDbGFtcGVkQXJyYXkoYy5sZW5ndGgvMyo0KTtyZXR1cm4gdGhpcy5fY29udmVydFljY1RvUmdiYShjLGUpfXJldHVybiB0aGlzLl9jb252ZXJ0WWNjVG9SZ2IoYyl9aWYoND09PXRoaXMubnVtQ29tcG9uZW50cyl7aWYodGhpcy5faXNDb2xvckNvbnZlcnNpb25OZWVkZWQpcmV0dXJuIG4/dGhpcy5fY29udmVydFljY2tUb1JnYmEoYyk6aT90aGlzLl9jb252ZXJ0WWNja1RvUmdiKGMpOnRoaXMuX2NvbnZlcnRZY2NrVG9DbXlrKGMpO2lmKG4pcmV0dXJuIHRoaXMuX2NvbnZlcnRDbXlrVG9SZ2JhKGMpO2lmKGkpcmV0dXJuIHRoaXMuX2NvbnZlcnRDbXlrVG9SZ2IoYyl9cmV0dXJuIGN9fX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmNvbnZlcnRCbGFja0FuZFdoaXRlVG9SR0JBPWEsdC5jb252ZXJ0VG9SR0JBPWZ1bmN0aW9uKGUpe3N3aXRjaChlLmtpbmQpe2Nhc2Ugbi5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFA6cmV0dXJuIGEoZSk7Y2FzZSBuLkltYWdlS2luZC5SR0JfMjRCUFA6cmV0dXJuIGZ1bmN0aW9uKGUpe2xldHtzcmM6dCxzcmNQb3M6cj0wLGRlc3Q6YSxkZXN0UG9zOmk9MCx3aWR0aDpzLGhlaWdodDpvfT1lLGM9MDtjb25zdCBsPXQubGVuZ3RoPj4yLGg9bmV3IFVpbnQzMkFycmF5KHQuYnVmZmVyLHIsbCk7aWYobi5GZWF0dXJlVGVzdC5pc0xpdHRsZUVuZGlhbil7Zm9yKDtjPGwtMjtjKz0zLGkrPTQpe2NvbnN0IGU9aFtjXSx0PWhbYysxXSxyPWhbYysyXTthW2ldPTQyNzgxOTAwODB8ZSxhW2krMV09ZT4+PjI0fHQ8PDh8NDI3ODE5MDA4MCxhW2krMl09dD4+PjE2fHI8PDE2fDQyNzgxOTAwODAsYVtpKzNdPXI+Pj44fDQyNzgxOTAwODB9Zm9yKGxldCBlPTQqYyxyPXQubGVuZ3RoO2U8cjtlKz0zKWFbaSsrXT10W2VdfHRbZSsxXTw8OHx0W2UrMl08PDE2fDQyNzgxOTAwODB9ZWxzZXtmb3IoO2M8bC0yO2MrPTMsaSs9NCl7Y29uc3QgZT1oW2NdLHQ9aFtjKzFdLHI9aFtjKzJdO2FbaV09MjU1fGUsYVtpKzFdPWU8PDI0fHQ+Pj44fDI1NSxhW2krMl09dDw8MTZ8cj4+PjE2fDI1NSxhW2krM109cjw8OHwyNTV9Zm9yKGxldCBlPTQqYyxyPXQubGVuZ3RoO2U8cjtlKz0zKWFbaSsrXT10W2VdPDwyNHx0W2UrMV08PDE2fHRbZSsyXTw8OHwyNTV9cmV0dXJue3NyY1BvczpyLGRlc3RQb3M6aX19KGUpfXJldHVybiBudWxsfSx0LmdyYXlUb1JHQkE9ZnVuY3Rpb24oZSx0KXtpZihuLkZlYXR1cmVUZXN0LmlzTGl0dGxlRW5kaWFuKWZvcihsZXQgcj0wLG49ZS5sZW5ndGg7cjxuO3IrKyl0W3JdPTY1NzkzKmVbcl18NDI3ODE5MDA4MDtlbHNlIGZvcihsZXQgcj0wLG49ZS5sZW5ndGg7cjxuO3IrKyl0W3JdPTE2ODQzMDA4KmVbcl18MjU1fSxyKDg0KSxyKDkzKSxyKDk0KSxyKDk3KSxyKDk5KSxyKDEwMSkscigxMDUpLHIoMTA4KSxyKDExNSk7dmFyIG49cigxNDQpO2Z1bmN0aW9uIGEoZSl7bGV0e3NyYzp0LHNyY1BvczpyPTAsZGVzdDphLHdpZHRoOmksaGVpZ2h0OnMsbm9uQmxhY2tDb2xvcjpvPTQyOTQ5NjcyOTUsaW52ZXJzZURlY29kZTpjPSExfT1lO2NvbnN0IGw9bi5GZWF0dXJlVGVzdC5pc0xpdHRsZUVuZGlhbj80Mjc4MTkwMDgwOjI1NSxbaCx1XT1jP1tvLGxdOltsLG9dLGQ9aT4+MyxmPTcmaSxnPXQubGVuZ3RoO2E9bmV3IFVpbnQzMkFycmF5KGEuYnVmZmVyKTtsZXQgcD0wO2ZvcihsZXQgZT0wO2U8cztlKyspe2Zvcihjb25zdCBlPXIrZDtyPGU7cisrKXtjb25zdCBlPXI8Zz90W3JdOjI1NTthW3ArK109MTI4JmU/dTpoLGFbcCsrXT02NCZlP3U6aCxhW3ArK109MzImZT91OmgsYVtwKytdPTE2JmU/dTpoLGFbcCsrXT04JmU/dTpoLGFbcCsrXT00JmU/dTpoLGFbcCsrXT0yJmU/dTpoLGFbcCsrXT0xJmU/dTpofWlmKDA9PT1mKWNvbnRpbnVlO2NvbnN0IGU9cjxnP3RbcisrXToyNTU7Zm9yKGxldCB0PTA7dDxmO3QrKylhW3ArK109ZSYxPDw3LXQ/dTpofXJldHVybntzcmNQb3M6cixkZXN0UG9zOnB9fX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkpweFN0cmVhbT12b2lkIDAscig4NCkscig5Mykscig5NCkscig5Nykscig5OSkscigxMDEpLHIoMTA1KSxyKDEwOCkscigxMTUpO3ZhciBuPXIoMTY4KSxhPXIoMTgwKSxpPXIoMTQ0KTtjbGFzcyBzIGV4dGVuZHMgbi5EZWNvZGVTdHJlYW17Y29uc3RydWN0b3IoZSx0LHIpe3N1cGVyKHQpLHRoaXMuc3RyZWFtPWUsdGhpcy5kaWN0PWUuZGljdCx0aGlzLm1heWJlTGVuZ3RoPXQsdGhpcy5wYXJhbXM9cn1nZXQgYnl0ZXMoKXtyZXR1cm4oMCxpLnNoYWRvdykodGhpcywiYnl0ZXMiLHRoaXMuc3RyZWFtLmdldEJ5dGVzKHRoaXMubWF5YmVMZW5ndGgpKX1lbnN1cmVCdWZmZXIoZSl7fXJlYWRCbG9jaygpe2lmKHRoaXMuZW9mKXJldHVybjtjb25zdCBlPW5ldyBhLkpweEltYWdlO2UucGFyc2UodGhpcy5ieXRlcyk7Y29uc3QgdD1lLndpZHRoLHI9ZS5oZWlnaHQsbj1lLmNvbXBvbmVudHNDb3VudCxpPWUudGlsZXMubGVuZ3RoO2lmKDE9PT1pKXRoaXMuYnVmZmVyPWUudGlsZXNbMF0uaXRlbXM7ZWxzZXtjb25zdCBhPW5ldyBVaW50OENsYW1wZWRBcnJheSh0KnIqbik7Zm9yKGxldCByPTA7cjxpO3IrKyl7Y29uc3QgaT1lLnRpbGVzW3JdLHM9aS53aWR0aCxvPWkuaGVpZ2h0LGM9aS5sZWZ0LGw9aS50b3AsaD1pLml0ZW1zO2xldCB1PTAsZD0odCpsK2MpKm47Y29uc3QgZj10Km4sZz1zKm47Zm9yKGxldCBlPTA7ZTxvO2UrKyl7Y29uc3QgZT1oLnN1YmFycmF5KHUsdStnKTthLnNldChlLGQpLHUrPWcsZCs9Zn19dGhpcy5idWZmZXI9YX10aGlzLmJ1ZmZlckxlbmd0aD10aGlzLmJ1ZmZlci5sZW5ndGgsdGhpcy5lb2Y9ITB9fXQuSnB4U3RyZWFtPXN9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5KcHhJbWFnZT12b2lkIDAscigxMzkpLHIoMikscig4NCkscig5Mykscig5NCkscig5Nykscig5OSkscigxMDEpLHIoMTA1KSxyKDEwOCkscigxMTUpO3ZhciBuPXIoMTQ0KSxhPXIoMTQ5KSxzPXIoMTc1KTtjbGFzcyBvIGV4dGVuZHMgbi5CYXNlRXhjZXB0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKCJKUFggZXJyb3I6ICIuY29uY2F0KGUpLCJKcHhFcnJvciIpfX1jb25zdCBjPXtMTDowLExIOjEsSEw6MSxISDoyfTtmdW5jdGlvbiBsKGUsdCl7ZS54MD1NYXRoLmNlaWwodC5YT3Npei9lLlhSc2l6KSxlLngxPU1hdGguY2VpbCh0LlhzaXovZS5YUnNpeiksZS55MD1NYXRoLmNlaWwodC5ZT3Npei9lLllSc2l6KSxlLnkxPU1hdGguY2VpbCh0LllzaXovZS5ZUnNpeiksZS53aWR0aD1lLngxLWUueDAsZS5oZWlnaHQ9ZS55MS1lLnkwfWZ1bmN0aW9uIGgoZSx0KXtjb25zdCByPWUuU0laLG49W107bGV0IGE7Y29uc3QgaT1NYXRoLmNlaWwoKHIuWHNpei1yLlhUT3Npeikvci5YVHNpeikscz1NYXRoLmNlaWwoKHIuWXNpei1yLllUT3Npeikvci5ZVHNpeik7Zm9yKGxldCBlPTA7ZTxzO2UrKylmb3IobGV0IHQ9MDt0PGk7dCsrKWE9e30sYS50eDA9TWF0aC5tYXgoci5YVE9zaXordCpyLlhUc2l6LHIuWE9zaXopLGEudHkwPU1hdGgubWF4KHIuWVRPc2l6K2Uqci5ZVHNpeixyLllPc2l6KSxhLnR4MT1NYXRoLm1pbihyLlhUT3NpeisodCsxKSpyLlhUc2l6LHIuWHNpeiksYS50eTE9TWF0aC5taW4oci5ZVE9zaXorKGUrMSkqci5ZVHNpeixyLllzaXopLGEud2lkdGg9YS50eDEtYS50eDAsYS5oZWlnaHQ9YS50eTEtYS50eTAsYS5jb21wb25lbnRzPVtdLG4ucHVzaChhKTtlLnRpbGVzPW47Zm9yKGxldCBlPTAsaT1yLkNzaXo7ZTxpO2UrKyl7Y29uc3Qgcj10W2VdO2ZvcihsZXQgdD0wLGk9bi5sZW5ndGg7dDxpO3QrKyl7Y29uc3QgaT17fTthPW5bdF0saS50Y3gwPU1hdGguY2VpbChhLnR4MC9yLlhSc2l6KSxpLnRjeTA9TWF0aC5jZWlsKGEudHkwL3IuWVJzaXopLGkudGN4MT1NYXRoLmNlaWwoYS50eDEvci5YUnNpeiksaS50Y3kxPU1hdGguY2VpbChhLnR5MS9yLllSc2l6KSxpLndpZHRoPWkudGN4MS1pLnRjeDAsaS5oZWlnaHQ9aS50Y3kxLWkudGN5MCxhLmNvbXBvbmVudHNbZV09aX19fWZ1bmN0aW9uIHUoZSx0LHIpe2NvbnN0IG49dC5jb2RpbmdTdHlsZVBhcmFtZXRlcnMsYT17fTtyZXR1cm4gbi5lbnRyb3B5Q29kZXJXaXRoQ3VzdG9tUHJlY2luY3RzPyhhLlBQeD1uLnByZWNpbmN0c1NpemVzW3JdLlBQeCxhLlBQeT1uLnByZWNpbmN0c1NpemVzW3JdLlBQeSk6KGEuUFB4PTE1LGEuUFB5PTE1KSxhLnhjYl89cj4wP01hdGgubWluKG4ueGNiLGEuUFB4LTEpOk1hdGgubWluKG4ueGNiLGEuUFB4KSxhLnljYl89cj4wP01hdGgubWluKG4ueWNiLGEuUFB5LTEpOk1hdGgubWluKG4ueWNiLGEuUFB5KSxhfWZ1bmN0aW9uIGQoZSx0LHIpe2NvbnN0IG49MTw8ci5QUHgsYT0xPDxyLlBQeSxpPTA9PT10LnJlc0xldmVsLHM9MTw8ci5QUHgrKGk/MDotMSksbz0xPDxyLlBQeSsoaT8wOi0xKSxjPXQudHJ4MT50LnRyeDA/TWF0aC5jZWlsKHQudHJ4MS9uKS1NYXRoLmZsb29yKHQudHJ4MC9uKTowLGw9dC50cnkxPnQudHJ5MD9NYXRoLmNlaWwodC50cnkxL2EpLU1hdGguZmxvb3IodC50cnkwL2EpOjAsaD1jKmw7dC5wcmVjaW5jdFBhcmFtZXRlcnM9e3ByZWNpbmN0V2lkdGg6bixwcmVjaW5jdEhlaWdodDphLG51bXByZWNpbmN0c3dpZGU6YyxudW1wcmVjaW5jdHNoaWdoOmwsbnVtcHJlY2luY3RzOmgscHJlY2luY3RXaWR0aEluU3ViYmFuZDpzLHByZWNpbmN0SGVpZ2h0SW5TdWJiYW5kOm99fWZ1bmN0aW9uIGYoZSx0LHIpe2NvbnN0IG49ci54Y2JfLGE9ci55Y2JfLGk9MTw8bixzPTE8PGEsbz10LnRieDA+Pm4sYz10LnRieTA+PmEsbD10LnRieDEraS0xPj5uLGg9dC50YnkxK3MtMT4+YSx1PXQucmVzb2x1dGlvbi5wcmVjaW5jdFBhcmFtZXRlcnMsZD1bXSxmPVtdO2xldCBnLHAsbSxiO2ZvcihwPWM7cDxoO3ArKylmb3IoZz1vO2c8bDtnKyspe2lmKG09e2NieDpnLGNieTpwLHRieDA6aSpnLHRieTA6cypwLHRieDE6aSooZysxKSx0YnkxOnMqKHArMSl9LG0udGJ4MF89TWF0aC5tYXgodC50YngwLG0udGJ4MCksbS50YnkwXz1NYXRoLm1heCh0LnRieTAsbS50YnkwKSxtLnRieDFfPU1hdGgubWluKHQudGJ4MSxtLnRieDEpLG0udGJ5MV89TWF0aC5taW4odC50YnkxLG0udGJ5MSksYj1NYXRoLmZsb29yKChtLnRieDBfLXQudGJ4MCkvdS5wcmVjaW5jdFdpZHRoSW5TdWJiYW5kKStNYXRoLmZsb29yKChtLnRieTBfLXQudGJ5MCkvdS5wcmVjaW5jdEhlaWdodEluU3ViYmFuZCkqdS5udW1wcmVjaW5jdHN3aWRlLG0ucHJlY2luY3ROdW1iZXI9YixtLnN1YmJhbmRUeXBlPXQudHlwZSxtLkxibG9jaz0zLG0udGJ4MV88PW0udGJ4MF98fG0udGJ5MV88PW0udGJ5MF8pY29udGludWU7ZC5wdXNoKG0pO2xldCBlPWZbYl07dm9pZCAwIT09ZT8oZzxlLmNieE1pbj9lLmNieE1pbj1nOmc+ZS5jYnhNYXgmJihlLmNieE1heD1nKSxwPGUuY2J5TWluP2UuY2J4TWluPXA6cD5lLmNieU1heCYmKGUuY2J5TWF4PXApKTpmW2JdPWU9e2NieE1pbjpnLGNieU1pbjpwLGNieE1heDpnLGNieU1heDpwfSxtLnByZWNpbmN0PWV9dC5jb2RlYmxvY2tQYXJhbWV0ZXJzPXtjb2RlYmxvY2tXaWR0aDpuLGNvZGVibG9ja0hlaWdodDphLG51bWNvZGVibG9ja3dpZGU6bC1vKzEsbnVtY29kZWJsb2NraGlnaDpoLWMrMX0sdC5jb2RlYmxvY2tzPWQsdC5wcmVjaW5jdHM9Zn1mdW5jdGlvbiBnKGUsdCxyKXtjb25zdCBuPVtdLGE9ZS5zdWJiYW5kcztmb3IobGV0IGU9MCxyPWEubGVuZ3RoO2U8cjtlKyspe2NvbnN0IHI9YVtlXS5jb2RlYmxvY2tzO2ZvcihsZXQgZT0wLGE9ci5sZW5ndGg7ZTxhO2UrKyl7Y29uc3QgYT1yW2VdO2EucHJlY2luY3ROdW1iZXI9PT10JiZuLnB1c2goYSl9fXJldHVybntsYXllck51bWJlcjpyLGNvZGVibG9ja3M6bn19ZnVuY3Rpb24gcChlKXtjb25zdCB0PWUuU0laLHI9ZS5jdXJyZW50VGlsZS5pbmRleCxuPWUudGlsZXNbcl0sYT1uLmNvZGluZ1N0eWxlRGVmYXVsdFBhcmFtZXRlcnMubGF5ZXJzQ291bnQsaT10LkNzaXo7bGV0IHM9MDtmb3IobGV0IGU9MDtlPGk7ZSsrKXM9TWF0aC5tYXgocyxuLmNvbXBvbmVudHNbZV0uY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCk7bGV0IGM9MCxsPTAsaD0wLHU9MDt0aGlzLm5leHRQYWNrZXQ9ZnVuY3Rpb24oKXtmb3IoO2M8YTtjKyspe2Zvcig7bDw9cztsKyspe2Zvcig7aDxpO2grKyl7Y29uc3QgZT1uLmNvbXBvbmVudHNbaF07aWYobD5lLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpY29udGludWU7Y29uc3QgdD1lLnJlc29sdXRpb25zW2xdLHI9dC5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3RzO2Zvcig7dTxyOyl7Y29uc3QgZT1nKHQsdSxjKTtyZXR1cm4gdSsrLGV9dT0wfWg9MH1sPTB9dGhyb3cgbmV3IG8oIk91dCBvZiBwYWNrZXRzIil9fWZ1bmN0aW9uIG0oZSl7Y29uc3QgdD1lLlNJWixyPWUuY3VycmVudFRpbGUuaW5kZXgsbj1lLnRpbGVzW3JdLGE9bi5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50LGk9dC5Dc2l6O2xldCBzPTA7Zm9yKGxldCBlPTA7ZTxpO2UrKylzPU1hdGgubWF4KHMsbi5jb21wb25lbnRzW2VdLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpO2xldCBjPTAsbD0wLGg9MCx1PTA7dGhpcy5uZXh0UGFja2V0PWZ1bmN0aW9uKCl7Zm9yKDtjPD1zO2MrKyl7Zm9yKDtsPGE7bCsrKXtmb3IoO2g8aTtoKyspe2NvbnN0IGU9bi5jb21wb25lbnRzW2hdO2lmKGM+ZS5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50KWNvbnRpbnVlO2NvbnN0IHQ9ZS5yZXNvbHV0aW9uc1tjXSxyPXQucHJlY2luY3RQYXJhbWV0ZXJzLm51bXByZWNpbmN0cztmb3IoO3U8cjspe2NvbnN0IGU9Zyh0LHUsbCk7cmV0dXJuIHUrKyxlfXU9MH1oPTB9bD0wfXRocm93IG5ldyBvKCJPdXQgb2YgcGFja2V0cyIpfX1mdW5jdGlvbiBiKGUpe2NvbnN0IHQ9ZS5TSVoscj1lLmN1cnJlbnRUaWxlLmluZGV4LG49ZS50aWxlc1tyXSxhPW4uY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycy5sYXllcnNDb3VudCxpPXQuQ3NpejtsZXQgcyxjLGwsaCx1PTA7Zm9yKGw9MDtsPGk7bCsrKXtjb25zdCBlPW4uY29tcG9uZW50c1tsXTt1PU1hdGgubWF4KHUsZS5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50KX1jb25zdCBkPW5ldyBJbnQzMkFycmF5KHUrMSk7Zm9yKGM9MDtjPD11OysrYyl7bGV0IGU9MDtmb3IobD0wO2w8aTsrK2wpe2NvbnN0IHQ9bi5jb21wb25lbnRzW2xdLnJlc29sdXRpb25zO2M8dC5sZW5ndGgmJihlPU1hdGgubWF4KGUsdFtjXS5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3RzKSl9ZFtjXT1lfXM9MCxjPTAsbD0wLGg9MCx0aGlzLm5leHRQYWNrZXQ9ZnVuY3Rpb24oKXtmb3IoO2M8PXU7YysrKXtmb3IoO2g8ZFtjXTtoKyspe2Zvcig7bDxpO2wrKyl7Y29uc3QgZT1uLmNvbXBvbmVudHNbbF07aWYoYz5lLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpY29udGludWU7Y29uc3QgdD1lLnJlc29sdXRpb25zW2NdLHI9dC5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3RzO2lmKCEoaD49cikpe2Zvcig7czxhOyl7Y29uc3QgZT1nKHQsaCxzKTtyZXR1cm4gcysrLGV9cz0wfX1sPTB9aD0wfXRocm93IG5ldyBvKCJPdXQgb2YgcGFja2V0cyIpfX1mdW5jdGlvbiB5KGUpe2NvbnN0IHQ9ZS5TSVoscj1lLmN1cnJlbnRUaWxlLmluZGV4LG49ZS50aWxlc1tyXSxhPW4uY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycy5sYXllcnNDb3VudCxpPXQuQ3NpeixzPXgobiksYz1zO2xldCBsPTAsaD0wLHU9MCxkPTAsZj0wO3RoaXMubmV4dFBhY2tldD1mdW5jdGlvbigpe2Zvcig7ZjxjLm1heE51bUhpZ2g7ZisrKXtmb3IoO2Q8Yy5tYXhOdW1XaWRlO2QrKyl7Zm9yKDt1PGk7dSsrKXtjb25zdCBlPW4uY29tcG9uZW50c1t1XSx0PWUuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudDtmb3IoO2g8PXQ7aCsrKXtjb25zdCB0PWUucmVzb2x1dGlvbnNbaF0scj1zLmNvbXBvbmVudHNbdV0ucmVzb2x1dGlvbnNbaF0sbj12KGQsZixyLGMsdCk7aWYobnVsbCE9PW4pe2Zvcig7bDxhOyl7Y29uc3QgZT1nKHQsbixsKTtyZXR1cm4gbCsrLGV9bD0wfX1oPTB9dT0wfWQ9MH10aHJvdyBuZXcgbygiT3V0IG9mIHBhY2tldHMiKX19ZnVuY3Rpb24gdyhlKXtjb25zdCB0PWUuU0laLHI9ZS5jdXJyZW50VGlsZS5pbmRleCxuPWUudGlsZXNbcl0sYT1uLmNvZGluZ1N0eWxlRGVmYXVsdFBhcmFtZXRlcnMubGF5ZXJzQ291bnQsaT10LkNzaXoscz14KG4pO2xldCBjPTAsbD0wLGg9MCx1PTAsZD0wO3RoaXMubmV4dFBhY2tldD1mdW5jdGlvbigpe2Zvcig7aDxpOysraCl7Y29uc3QgZT1uLmNvbXBvbmVudHNbaF0sdD1zLmNvbXBvbmVudHNbaF0scj1lLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQ7Zm9yKDtkPHQubWF4TnVtSGlnaDtkKyspe2Zvcig7dTx0Lm1heE51bVdpZGU7dSsrKXtmb3IoO2w8PXI7bCsrKXtjb25zdCByPWUucmVzb2x1dGlvbnNbbF0sbj10LnJlc29sdXRpb25zW2xdLGk9dih1LGQsbix0LHIpO2lmKG51bGwhPT1pKXtmb3IoO2M8YTspe2NvbnN0IGU9ZyhyLGksYyk7cmV0dXJuIGMrKyxlfWM9MH19bD0wfXU9MH1kPTB9dGhyb3cgbmV3IG8oIk91dCBvZiBwYWNrZXRzIil9fWZ1bmN0aW9uIHYoZSx0LHIsbixhKXtjb25zdCBpPWUqbi5taW5XaWR0aCxzPXQqbi5taW5IZWlnaHQ7aWYoaSVyLndpZHRoIT0wfHxzJXIuaGVpZ2h0IT0wKXJldHVybiBudWxsO2NvbnN0IG89cy9yLndpZHRoKmEucHJlY2luY3RQYXJhbWV0ZXJzLm51bXByZWNpbmN0c3dpZGU7cmV0dXJuIGkvci5oZWlnaHQrb31mdW5jdGlvbiB4KGUpe2NvbnN0IHQ9ZS5jb21wb25lbnRzLmxlbmd0aDtsZXQgcj1OdW1iZXIuTUFYX1ZBTFVFLG49TnVtYmVyLk1BWF9WQUxVRSxhPTAsaT0wO2NvbnN0IHM9bmV3IEFycmF5KHQpO2ZvcihsZXQgbz0wO288dDtvKyspe2NvbnN0IHQ9ZS5jb21wb25lbnRzW29dLGM9dC5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50LGw9bmV3IEFycmF5KGMrMSk7bGV0IGg9TnVtYmVyLk1BWF9WQUxVRSx1PU51bWJlci5NQVhfVkFMVUUsZD0wLGY9MCxnPTE7Zm9yKGxldCBlPWM7ZT49MDstLWUpe2NvbnN0IHI9dC5yZXNvbHV0aW9uc1tlXSxuPWcqci5wcmVjaW5jdFBhcmFtZXRlcnMucHJlY2luY3RXaWR0aCxhPWcqci5wcmVjaW5jdFBhcmFtZXRlcnMucHJlY2luY3RIZWlnaHQ7aD1NYXRoLm1pbihoLG4pLHU9TWF0aC5taW4odSxhKSxkPU1hdGgubWF4KGQsci5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3Rzd2lkZSksZj1NYXRoLm1heChmLHIucHJlY2luY3RQYXJhbWV0ZXJzLm51bXByZWNpbmN0c2hpZ2gpLGxbZV09e3dpZHRoOm4saGVpZ2h0OmF9LGc8PD0xfXI9TWF0aC5taW4ocixoKSxuPU1hdGgubWluKG4sdSksYT1NYXRoLm1heChhLGQpLGk9TWF0aC5tYXgoaSxmKSxzW29dPXtyZXNvbHV0aW9uczpsLG1pbldpZHRoOmgsbWluSGVpZ2h0OnUsbWF4TnVtV2lkZTpkLG1heE51bUhpZ2g6Zn19cmV0dXJue2NvbXBvbmVudHM6cyxtaW5XaWR0aDpyLG1pbkhlaWdodDpuLG1heE51bVdpZGU6YSxtYXhOdW1IaWdoOml9fWZ1bmN0aW9uIFMoZSl7Y29uc3QgdD1lLlNJWixyPWUuY3VycmVudFRpbGUuaW5kZXgsbj1lLnRpbGVzW3JdLGE9dC5Dc2l6O2ZvcihsZXQgZT0wO2U8YTtlKyspe2NvbnN0IHQ9bi5jb21wb25lbnRzW2VdLHI9dC5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50LGE9W10saT1bXTtmb3IobGV0IGU9MDtlPD1yO2UrKyl7Y29uc3Qgbj11KDAsdCxlKSxzPXt9LG89MTw8ci1lO2xldCBjO2lmKHMudHJ4MD1NYXRoLmNlaWwodC50Y3gwL28pLHMudHJ5MD1NYXRoLmNlaWwodC50Y3kwL28pLHMudHJ4MT1NYXRoLmNlaWwodC50Y3gxL28pLHMudHJ5MT1NYXRoLmNlaWwodC50Y3kxL28pLHMucmVzTGV2ZWw9ZSxkKDAscyxuKSxhLnB1c2gocyksMD09PWUpYz17fSxjLnR5cGU9IkxMIixjLnRieDA9TWF0aC5jZWlsKHQudGN4MC9vKSxjLnRieTA9TWF0aC5jZWlsKHQudGN5MC9vKSxjLnRieDE9TWF0aC5jZWlsKHQudGN4MS9vKSxjLnRieTE9TWF0aC5jZWlsKHQudGN5MS9vKSxjLnJlc29sdXRpb249cyxmKDAsYyxuKSxpLnB1c2goYykscy5zdWJiYW5kcz1bY107ZWxzZXtjb25zdCBhPTE8PHItZSsxLG89W107Yz17fSxjLnR5cGU9IkhMIixjLnRieDA9TWF0aC5jZWlsKHQudGN4MC9hLS41KSxjLnRieTA9TWF0aC5jZWlsKHQudGN5MC9hKSxjLnRieDE9TWF0aC5jZWlsKHQudGN4MS9hLS41KSxjLnRieTE9TWF0aC5jZWlsKHQudGN5MS9hKSxjLnJlc29sdXRpb249cyxmKDAsYyxuKSxpLnB1c2goYyksby5wdXNoKGMpLGM9e30sYy50eXBlPSJMSCIsYy50YngwPU1hdGguY2VpbCh0LnRjeDAvYSksYy50YnkwPU1hdGguY2VpbCh0LnRjeTAvYS0uNSksYy50YngxPU1hdGguY2VpbCh0LnRjeDEvYSksYy50YnkxPU1hdGguY2VpbCh0LnRjeTEvYS0uNSksYy5yZXNvbHV0aW9uPXMsZigwLGMsbiksaS5wdXNoKGMpLG8ucHVzaChjKSxjPXt9LGMudHlwZT0iSEgiLGMudGJ4MD1NYXRoLmNlaWwodC50Y3gwL2EtLjUpLGMudGJ5MD1NYXRoLmNlaWwodC50Y3kwL2EtLjUpLGMudGJ4MT1NYXRoLmNlaWwodC50Y3gxL2EtLjUpLGMudGJ5MT1NYXRoLmNlaWwodC50Y3kxL2EtLjUpLGMucmVzb2x1dGlvbj1zLGYoMCxjLG4pLGkucHVzaChjKSxvLnB1c2goYykscy5zdWJiYW5kcz1vfX10LnJlc29sdXRpb25zPWEsdC5zdWJiYW5kcz1pfWNvbnN0IGk9bi5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLnByb2dyZXNzaW9uT3JkZXI7c3dpdGNoKGkpe2Nhc2UgMDpuLnBhY2tldHNJdGVyYXRvcj1uZXcgcChlKTticmVhaztjYXNlIDE6bi5wYWNrZXRzSXRlcmF0b3I9bmV3IG0oZSk7YnJlYWs7Y2FzZSAyOm4ucGFja2V0c0l0ZXJhdG9yPW5ldyBiKGUpO2JyZWFrO2Nhc2UgMzpuLnBhY2tldHNJdGVyYXRvcj1uZXcgeShlKTticmVhaztjYXNlIDQ6bi5wYWNrZXRzSXRlcmF0b3I9bmV3IHcoZSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgbygiVW5zdXBwb3J0ZWQgcHJvZ3Jlc3Npb24gb3JkZXIgIi5jb25jYXQoaSkpfX1mdW5jdGlvbiBBKGUsdCxyLG4pe2xldCBpLHM9MCxjPTAsbD0hMTtmdW5jdGlvbiBoKGUpe2Zvcig7YzxlOyl7Y29uc3QgZT10W3Irc107cysrLGw/KGk9aTw8N3xlLGMrPTcsbD0hMSk6KGk9aTw8OHxlLGMrPTgpLDI1NT09PWUmJihsPSEwKX1yZXR1cm4gYy09ZSxpPj4+YyYoMTw8ZSktMX1mdW5jdGlvbiB1KGUpe3JldHVybiAyNTU9PT10W3Ircy0xXSYmdFtyK3NdPT09ZT8oZCgxKSwhMCk6MjU1PT09dFtyK3NdJiZ0W3IrcysxXT09PWUmJihkKDIpLCEwKX1mdW5jdGlvbiBkKGUpe3MrPWV9ZnVuY3Rpb24gZigpe2M9MCxsJiYocysrLGw9ITEpfWZ1bmN0aW9uIGcoKXtpZigwPT09aCgxKSlyZXR1cm4gMTtpZigwPT09aCgxKSlyZXR1cm4gMjtsZXQgZT1oKDIpO3JldHVybiBlPDM/ZSszOihlPWgoNSksZTwzMT9lKzY6KGU9aCg3KSxlKzM3KSl9Y29uc3QgcD1lLmN1cnJlbnRUaWxlLmluZGV4LG09ZS50aWxlc1twXSxiPWUuQ09ELnNvcE1hcmtlclVzZWQseT1lLkNPRC5lcGhNYXJrZXJVc2VkLHc9bS5wYWNrZXRzSXRlcmF0b3I7Zm9yKDtzPG47KXtmKCksYiYmdSgxNDUpJiZkKDQpO2NvbnN0IGU9dy5uZXh0UGFja2V0KCk7aWYoIWgoMSkpY29udGludWU7Y29uc3Qgbj1lLmxheWVyTnVtYmVyLGk9W107bGV0IGM7Zm9yKGxldCB0PTAscj1lLmNvZGVibG9ja3MubGVuZ3RoO3Q8cjt0Kyspe2M9ZS5jb2RlYmxvY2tzW3RdO2xldCByPWMucHJlY2luY3Q7Y29uc3Qgcz1jLmNieC1yLmNieE1pbixsPWMuY2J5LXIuY2J5TWluO2xldCB1LGQsZj0hMSxwPSExO2lmKHZvaWQgMCE9PWMuaW5jbHVkZWQpZj0hIWgoMSk7ZWxzZXtsZXQgZTtpZihyPWMucHJlY2luY3Qsdm9pZCAwIT09ci5pbmNsdXNpb25UcmVlKWU9ci5pbmNsdXNpb25UcmVlO2Vsc2V7Y29uc3QgdD1yLmNieE1heC1yLmNieE1pbisxLGE9ci5jYnlNYXgtci5jYnlNaW4rMTtlPW5ldyBJKHQsYSxuKSxkPW5ldyBGKHQsYSksci5pbmNsdXNpb25UcmVlPWUsci56ZXJvQml0UGxhbmVzVHJlZT1kO2ZvcihsZXQgZT0wO2U8bjtlKyspaWYoMCE9PWgoMSkpdGhyb3cgbmV3IG8oIkludmFsaWQgdGFnIHRyZWUiKX1pZihlLnJlc2V0KHMsbCxuKSlmb3IoOzspe2lmKCFoKDEpKXtlLmluY3JlbWVudFZhbHVlKG4pO2JyZWFrfWlmKHU9IWUubmV4dExldmVsKCksdSl7Yy5pbmNsdWRlZD0hMCxmPXA9ITA7YnJlYWt9fX1pZighZiljb250aW51ZTtpZihwKXtmb3IoZD1yLnplcm9CaXRQbGFuZXNUcmVlLGQucmVzZXQocyxsKTs7KWlmKGgoMSkpe2lmKHU9IWQubmV4dExldmVsKCksdSlicmVha31lbHNlIGQuaW5jcmVtZW50VmFsdWUoKTtjLnplcm9CaXRQbGFuZXM9ZC52YWx1ZX1jb25zdCBtPWcoKTtmb3IoO2goMSk7KWMuTGJsb2NrKys7Y29uc3QgYj0oMCxhLmxvZzIpKG0pLHk9aCgobTwxPDxiP2ItMTpiKStjLkxibG9jayk7aS5wdXNoKHtjb2RlYmxvY2s6Yyxjb2RpbmdwYXNzZXM6bSxkYXRhTGVuZ3RoOnl9KX1mb3IoZigpLHkmJnUoMTQ2KTtpLmxlbmd0aD4wOyl7Y29uc3QgZT1pLnNoaWZ0KCk7Yz1lLmNvZGVibG9jayx2b2lkIDA9PT1jLmRhdGEmJihjLmRhdGE9W10pLGMuZGF0YS5wdXNoKHtkYXRhOnQsc3RhcnQ6citzLGVuZDpyK3MrZS5kYXRhTGVuZ3RoLGNvZGluZ3Bhc3NlczplLmNvZGluZ3Bhc3Nlc30pLHMrPWUuZGF0YUxlbmd0aH19cmV0dXJuIHN9ZnVuY3Rpb24gayhlLHQscixuLGEsaSxvLGMsbCl7Y29uc3QgaD1uLnRieDAsdT1uLnRieTAsZD1uLnRieDEtbi50YngwLGY9bi5jb2RlYmxvY2tzLGc9IkgiPT09bi50eXBlLmNoYXJBdCgwKT8xOjAscD0iSCI9PT1uLnR5cGUuY2hhckF0KDEpP3Q6MDtmb3IobGV0IHI9MCxtPWYubGVuZ3RoO3I8bTsrK3Ipe2NvbnN0IG09ZltyXSxiPW0udGJ4MV8tbS50YngwXyx5PW0udGJ5MV8tbS50YnkwXztpZigwPT09Ynx8MD09PXkpY29udGludWU7aWYodm9pZCAwPT09bS5kYXRhKWNvbnRpbnVlO2NvbnN0IHc9bmV3IFQoYix5LG0uc3ViYmFuZFR5cGUsbS56ZXJvQml0UGxhbmVzLGkpO2xldCB2PTI7Y29uc3QgeD1tLmRhdGE7bGV0IFMsQSxrLEM9MCxPPTA7Zm9yKFM9MCxBPXgubGVuZ3RoO1M8QTtTKyspaz14W1NdLEMrPWsuZW5kLWsuc3RhcnQsTys9ay5jb2RpbmdwYXNzZXM7Y29uc3QgRj1uZXcgVWludDhBcnJheShDKTtsZXQgST0wO2ZvcihTPTAsQT14Lmxlbmd0aDtTPEE7UysrKXtrPXhbU107Y29uc3QgZT1rLmRhdGEuc3ViYXJyYXkoay5zdGFydCxrLmVuZCk7Ri5zZXQoZSxJKSxJKz1lLmxlbmd0aH1jb25zdCBNPW5ldyBzLkFyaXRobWV0aWNEZWNvZGVyKEYsMCxDKTtmb3Iody5zZXREZWNvZGVyKE0pLFM9MDtTPE87UysrKXtzd2l0Y2godil7Y2FzZSAwOncucnVuU2lnbmlmaWNhbmNlUHJvcGFnYXRpb25QYXNzKCk7YnJlYWs7Y2FzZSAxOncucnVuTWFnbml0dWRlUmVmaW5lbWVudFBhc3MoKTticmVhaztjYXNlIDI6dy5ydW5DbGVhbnVwUGFzcygpLGMmJncuY2hlY2tTZWdtZW50YXRpb25TeW1ib2woKX1sJiZ3LnJlc2V0KCksdj0odisxKSUzfWxldCBFPW0udGJ4MF8taCsobS50YnkwXy11KSpkO2NvbnN0IFA9dy5jb2VmZmljZW50c1NpZ24sUj13LmNvZWZmaWNlbnRzTWFnbml0dWRlLE49dy5iaXRzRGVjb2RlZCxEPW8/MDouNTtsZXQgQixMLF87ST0wO2NvbnN0IGo9IkxMIiE9PW4udHlwZTtmb3IoUz0wO1M8eTtTKyspe2NvbnN0IHI9MiooRS9kfDApKih0LWQpK2crcDtmb3IoQj0wO0I8YjtCKyspTD1SW0ldLDAhPT1MJiYoTD0oTCtEKSphLDAhPT1QW0ldJiYoTD0tTCksXz1OW0ldLGVbaj9yKyhFPDwxKTpFXT1vJiZfPj1pP0w6TCooMTw8aS1fKSksRSsrLEkrKztFKz1kLWJ9fX1mdW5jdGlvbiBDKGUsdCxyKXtjb25zdCBuPXQuY29tcG9uZW50c1tyXSxhPW4uY29kaW5nU3R5bGVQYXJhbWV0ZXJzLGk9bi5xdWFudGl6YXRpb25QYXJhbWV0ZXJzLHM9YS5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQsbz1pLlNQcWNkcyxsPWkuc2NhbGFyRXhwb3VuZGVkLGg9aS5ndWFyZEJpdHMsdT1hLnNlZ21lbnRhdGlvblN5bWJvbFVzZWQsZD1hLnJlc2V0Q29udGV4dFByb2JhYmlsaXRpZXMsZj1lLmNvbXBvbmVudHNbcl0ucHJlY2lzaW9uLGc9YS5yZXZlcnNpYmxlVHJhbnNmb3JtYXRpb24scD1nP25ldyBQOm5ldyBFLG09W107bGV0IGI9MDtmb3IobGV0IGU9MDtlPD1zO2UrKyl7Y29uc3QgdD1uLnJlc29sdXRpb25zW2VdLHI9dC50cngxLXQudHJ4MCxhPXQudHJ5MS10LnRyeTAsaT1uZXcgRmxvYXQzMkFycmF5KHIqYSk7Zm9yKGxldCBuPTAsYT10LnN1YmJhbmRzLmxlbmd0aDtuPGE7bisrKXtsZXQgYSxzO2w/KGE9b1tiXS5tdSxzPW9bYl0uZXBzaWxvbixiKyspOihhPW9bMF0ubXUscz1vWzBdLmVwc2lsb24rKGU+MD8xLWU6MCkpO2NvbnN0IHA9dC5zdWJiYW5kc1tuXSxtPWNbcC50eXBlXTtrKGksciwwLHAsZz8xOjIqKihmK20tcykqKDErYS8yMDQ4KSxoK3MtMSxnLHUsZCl9bS5wdXNoKHt3aWR0aDpyLGhlaWdodDphLGl0ZW1zOml9KX1jb25zdCB5PXAuY2FsY3VsYXRlKG0sbi50Y3gwLG4udGN5MCk7cmV0dXJue2xlZnQ6bi50Y3gwLHRvcDpuLnRjeTAsd2lkdGg6eS53aWR0aCxoZWlnaHQ6eS5oZWlnaHQsaXRlbXM6eS5pdGVtc319ZnVuY3Rpb24gTyhlLHQpe2NvbnN0IHI9ZS5TSVouQ3NpeixuPWUudGlsZXNbdF07Zm9yKGxldCB0PTA7dDxyO3QrKyl7Y29uc3Qgcj1uLmNvbXBvbmVudHNbdF0sYT12b2lkIDAhPT1lLmN1cnJlbnRUaWxlLlFDQ1t0XT9lLmN1cnJlbnRUaWxlLlFDQ1t0XTplLmN1cnJlbnRUaWxlLlFDRDtyLnF1YW50aXphdGlvblBhcmFtZXRlcnM9YTtjb25zdCBpPXZvaWQgMCE9PWUuY3VycmVudFRpbGUuQ09DW3RdP2UuY3VycmVudFRpbGUuQ09DW3RdOmUuY3VycmVudFRpbGUuQ09EO3IuY29kaW5nU3R5bGVQYXJhbWV0ZXJzPWl9bi5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzPWUuY3VycmVudFRpbGUuQ09EfXQuSnB4SW1hZ2U9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmZhaWxPbkNvcnJ1cHRlZEltYWdlPSExfXBhcnNlKGUpe2lmKDY1MzU5PT09KDAsYS5yZWFkVWludDE2KShlLDApKXJldHVybiB2b2lkIHRoaXMucGFyc2VDb2Rlc3RyZWFtKGUsMCxlLmxlbmd0aCk7Y29uc3QgdD1lLmxlbmd0aDtsZXQgcj0wO2Zvcig7cjx0Oyl7bGV0IGk9OCxzPSgwLGEucmVhZFVpbnQzMikoZSxyKTtjb25zdCBjPSgwLGEucmVhZFVpbnQzMikoZSxyKzQpO2lmKHIrPWksMT09PXMmJihzPTQyOTQ5NjcyOTYqKDAsYS5yZWFkVWludDMyKShlLHIpKygwLGEucmVhZFVpbnQzMikoZSxyKzQpLHIrPTgsaSs9OCksMD09PXMmJihzPXQtcitpKSxzPGkpdGhyb3cgbmV3IG8oIkludmFsaWQgYm94IGZpZWxkIHNpemUiKTtjb25zdCBsPXMtaTtsZXQgaD0hMDtzd2l0Y2goYyl7Y2FzZSAxNzg1NzM3ODMyOmg9ITE7YnJlYWs7Y2FzZSAxNjY4MjQ2NjQyOmNvbnN0IHQ9ZVtyXTtpZigxPT09dCl7Y29uc3QgdD0oMCxhLnJlYWRVaW50MzIpKGUsciszKTtzd2l0Y2godCl7Y2FzZSAxNjpjYXNlIDE3OmNhc2UgMTg6YnJlYWs7ZGVmYXVsdDooMCxuLndhcm4pKCJVbmtub3duIGNvbG9yc3BhY2UgIit0KX19ZWxzZSAyPT09dCYmKDAsbi5pbmZvKSgiSUNDIHByb2ZpbGUgbm90IHN1cHBvcnRlZCIpO2JyZWFrO2Nhc2UgMTc4NTczNzgyNzp0aGlzLnBhcnNlQ29kZXN0cmVhbShlLHIscitsKTticmVhaztjYXNlIDE3ODM2MzZlMzoyMTg3OTM3MzghPT0oMCxhLnJlYWRVaW50MzIpKGUscikmJigwLG4ud2FybikoIkludmFsaWQgSlAyIHNpZ25hdHVyZSIpO2JyZWFrO2Nhc2UgMTc4MzYzNDQ1ODpjYXNlIDE3MTg5MDkyOTY6Y2FzZSAxOTIwMDk5Njk3OmNhc2UgMTkxOTI1MTIzMjpjYXNlIDE3Njg0NDkxMzg6YnJlYWs7ZGVmYXVsdDpjb25zdCBpPVN0cmluZy5mcm9tQ2hhckNvZGUoYz4+MjQmMjU1LGM+PjE2JjI1NSxjPj44JjI1NSwyNTUmYyk7KDAsbi53YXJuKSgiVW5zdXBwb3J0ZWQgaGVhZGVyIHR5cGUgIi5jb25jYXQoYywiICgiKS5jb25jYXQoaSwiKS4iKSl9aCYmKHIrPWwpfX1wYXJzZUltYWdlUHJvcGVydGllcyhlKXtsZXQgdD1lLmdldEJ5dGUoKTtmb3IoO3Q+PTA7KXtjb25zdCByPXQ7aWYodD1lLmdldEJ5dGUoKSw2NTM2MT09KHI8PDh8dCkpe2Uuc2tpcCg0KTtjb25zdCB0PWUuZ2V0SW50MzIoKT4+PjAscj1lLmdldEludDMyKCk+Pj4wLG49ZS5nZXRJbnQzMigpPj4+MCxhPWUuZ2V0SW50MzIoKT4+PjA7ZS5za2lwKDE2KTtjb25zdCBpPWUuZ2V0VWludDE2KCk7cmV0dXJuIHRoaXMud2lkdGg9dC1uLHRoaXMuaGVpZ2h0PXItYSx0aGlzLmNvbXBvbmVudHNDb3VudD1pLHZvaWQodGhpcy5iaXRzUGVyQ29tcG9uZW50PTgpfX10aHJvdyBuZXcgbygiTm8gc2l6ZSBtYXJrZXIgZm91bmQgaW4gSlBYIHN0cmVhbSIpfXBhcnNlQ29kZXN0cmVhbShlLHQscil7Y29uc3QgaT17fTtsZXQgcz0hMTt0cnl7bGV0IG89dDtmb3IoO28rMTxyOyl7Y29uc3QgdD0oMCxhLnJlYWRVaW50MTYpKGUsbyk7bys9MjtsZXQgcixjLHUsZCxmLGcscD0wO3N3aXRjaCh0KXtjYXNlIDY1MzU5OmkubWFpbkhlYWRlcj0hMDticmVhaztjYXNlIDY1NDk3OmJyZWFrO2Nhc2UgNjUzNjE6cD0oMCxhLnJlYWRVaW50MTYpKGUsbyk7Y29uc3QgbT17fTttLlhzaXo9KDAsYS5yZWFkVWludDMyKShlLG8rNCksbS5Zc2l6PSgwLGEucmVhZFVpbnQzMikoZSxvKzgpLG0uWE9zaXo9KDAsYS5yZWFkVWludDMyKShlLG8rMTIpLG0uWU9zaXo9KDAsYS5yZWFkVWludDMyKShlLG8rMTYpLG0uWFRzaXo9KDAsYS5yZWFkVWludDMyKShlLG8rMjApLG0uWVRzaXo9KDAsYS5yZWFkVWludDMyKShlLG8rMjQpLG0uWFRPc2l6PSgwLGEucmVhZFVpbnQzMikoZSxvKzI4KSxtLllUT3Npej0oMCxhLnJlYWRVaW50MzIpKGUsbyszMik7Y29uc3QgYj0oMCxhLnJlYWRVaW50MTYpKGUsbyszNik7bS5Dc2l6PWI7Y29uc3QgeT1bXTtyPW8rMzg7Zm9yKGxldCB0PTA7dDxiO3QrKyl7Y29uc3QgdD17cHJlY2lzaW9uOjErKDEyNyZlW3JdKSxpc1NpZ25lZDohISgxMjgmZVtyXSksWFJzaXo6ZVtyKzFdLFlSc2l6OmVbcisyXX07cis9MyxsKHQsbSkseS5wdXNoKHQpfWkuU0laPW0saS5jb21wb25lbnRzPXksaChpLHkpLGkuUUNDPVtdLGkuQ09DPVtdO2JyZWFrO2Nhc2UgNjUzNzI6cD0oMCxhLnJlYWRVaW50MTYpKGUsbyk7Y29uc3Qgdz17fTtzd2l0Y2gocj1vKzIsYz1lW3IrK10sMzEmYyl7Y2FzZSAwOmQ9OCxmPSEwO2JyZWFrO2Nhc2UgMTpkPTE2LGY9ITE7YnJlYWs7Y2FzZSAyOmQ9MTYsZj0hMDticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCBTUWNkIHZhbHVlICIrYyl9Zm9yKHcubm9RdWFudGl6YXRpb249OD09PWQsdy5zY2FsYXJFeHBvdW5kZWQ9Zix3Lmd1YXJkQml0cz1jPj41LHU9W107cjxwK287KXtjb25zdCB0PXt9Ozg9PT1kPyh0LmVwc2lsb249ZVtyKytdPj4zLHQubXU9MCk6KHQuZXBzaWxvbj1lW3JdPj4zLHQubXU9KDcmZVtyXSk8PDh8ZVtyKzFdLHIrPTIpLHUucHVzaCh0KX13LlNQcWNkcz11LGkubWFpbkhlYWRlcj9pLlFDRD13OihpLmN1cnJlbnRUaWxlLlFDRD13LGkuY3VycmVudFRpbGUuUUNDPVtdKTticmVhaztjYXNlIDY1MzczOnA9KDAsYS5yZWFkVWludDE2KShlLG8pO2NvbnN0IHY9e307bGV0IHg7c3dpdGNoKHI9bysyLGkuU0laLkNzaXo8MjU3P3g9ZVtyKytdOih4PSgwLGEucmVhZFVpbnQxNikoZSxyKSxyKz0yKSxjPWVbcisrXSwzMSZjKXtjYXNlIDA6ZD04LGY9ITA7YnJlYWs7Y2FzZSAxOmQ9MTYsZj0hMTticmVhaztjYXNlIDI6ZD0xNixmPSEwO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIFNRY2QgdmFsdWUgIitjKX1mb3Iodi5ub1F1YW50aXphdGlvbj04PT09ZCx2LnNjYWxhckV4cG91bmRlZD1mLHYuZ3VhcmRCaXRzPWM+PjUsdT1bXTtyPHArbzspe2NvbnN0IHQ9e307OD09PWQ/KHQuZXBzaWxvbj1lW3IrK10+PjMsdC5tdT0wKToodC5lcHNpbG9uPWVbcl0+PjMsdC5tdT0oNyZlW3JdKTw8OHxlW3IrMV0scis9MiksdS5wdXNoKHQpfXYuU1BxY2RzPXUsaS5tYWluSGVhZGVyP2kuUUNDW3hdPXY6aS5jdXJyZW50VGlsZS5RQ0NbeF09djticmVhaztjYXNlIDY1MzYyOnA9KDAsYS5yZWFkVWludDE2KShlLG8pO2NvbnN0IGs9e307cj1vKzI7Y29uc3QgQz1lW3IrK107ay5lbnRyb3B5Q29kZXJXaXRoQ3VzdG9tUHJlY2luY3RzPSEhKDEmQyksay5zb3BNYXJrZXJVc2VkPSEhKDImQyksay5lcGhNYXJrZXJVc2VkPSEhKDQmQyksay5wcm9ncmVzc2lvbk9yZGVyPWVbcisrXSxrLmxheWVyc0NvdW50PSgwLGEucmVhZFVpbnQxNikoZSxyKSxyKz0yLGsubXVsdGlwbGVDb21wb25lbnRUcmFuc2Zvcm09ZVtyKytdLGsuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50PWVbcisrXSxrLnhjYj0yKygxNSZlW3IrK10pLGsueWNiPTIrKDE1JmVbcisrXSk7Y29uc3QgRj1lW3IrK107aWYoay5zZWxlY3RpdmVBcml0aG1ldGljQ29kaW5nQnlwYXNzPSEhKDEmRiksay5yZXNldENvbnRleHRQcm9iYWJpbGl0aWVzPSEhKDImRiksay50ZXJtaW5hdGlvbk9uRWFjaENvZGluZ1Bhc3M9ISEoNCZGKSxrLnZlcnRpY2FsbHlTdHJpcGU9ISEoOCZGKSxrLnByZWRpY3RhYmxlVGVybWluYXRpb249ISEoMTYmRiksay5zZWdtZW50YXRpb25TeW1ib2xVc2VkPSEhKDMyJkYpLGsucmV2ZXJzaWJsZVRyYW5zZm9ybWF0aW9uPWVbcisrXSxrLmVudHJvcHlDb2RlcldpdGhDdXN0b21QcmVjaW5jdHMpe2NvbnN0IHQ9W107Zm9yKDtyPHArbzspe2NvbnN0IG49ZVtyKytdO3QucHVzaCh7UFB4OjE1Jm4sUFB5Om4+PjR9KX1rLnByZWNpbmN0c1NpemVzPXR9Y29uc3QgST1bXTtrLnNlbGVjdGl2ZUFyaXRobWV0aWNDb2RpbmdCeXBhc3MmJkkucHVzaCgic2VsZWN0aXZlQXJpdGhtZXRpY0NvZGluZ0J5cGFzcyIpLGsudGVybWluYXRpb25PbkVhY2hDb2RpbmdQYXNzJiZJLnB1c2goInRlcm1pbmF0aW9uT25FYWNoQ29kaW5nUGFzcyIpLGsudmVydGljYWxseVN0cmlwZSYmSS5wdXNoKCJ2ZXJ0aWNhbGx5U3RyaXBlIiksay5wcmVkaWN0YWJsZVRlcm1pbmF0aW9uJiZJLnB1c2goInByZWRpY3RhYmxlVGVybWluYXRpb24iKSxJLmxlbmd0aD4wJiYocz0hMCwoMCxuLndhcm4pKCJKUFg6IFVuc3VwcG9ydGVkIENPRCBvcHRpb25zICgiLmNvbmNhdChJLmpvaW4oIiwgIiksIikuIikpKSxpLm1haW5IZWFkZXI/aS5DT0Q9azooaS5jdXJyZW50VGlsZS5DT0Q9ayxpLmN1cnJlbnRUaWxlLkNPQz1bXSk7YnJlYWs7Y2FzZSA2NTQyNDpwPSgwLGEucmVhZFVpbnQxNikoZSxvKSxnPXt9LGcuaW5kZXg9KDAsYS5yZWFkVWludDE2KShlLG8rMiksZy5sZW5ndGg9KDAsYS5yZWFkVWludDMyKShlLG8rNCksZy5kYXRhRW5kPWcubGVuZ3RoK28tMixnLnBhcnRJbmRleD1lW28rOF0sZy5wYXJ0c0NvdW50PWVbbys5XSxpLm1haW5IZWFkZXI9ITEsMD09PWcucGFydEluZGV4JiYoZy5DT0Q9aS5DT0QsZy5DT0M9aS5DT0Muc2xpY2UoMCksZy5RQ0Q9aS5RQ0QsZy5RQ0M9aS5RQ0Muc2xpY2UoMCkpLGkuY3VycmVudFRpbGU9ZzticmVhaztjYXNlIDY1NDI3Omc9aS5jdXJyZW50VGlsZSwwPT09Zy5wYXJ0SW5kZXgmJihPKGksZy5pbmRleCksUyhpKSkscD1nLmRhdGFFbmQtbyxBKGksZSxvLHApO2JyZWFrO2Nhc2UgNjUzNjM6KDAsbi53YXJuKSgiSlBYOiBDb2Rlc3RyZWFtIGNvZGUgMHhGRjUzIChDT0MpIGlzIG5vdCBpbXBsZW1lbnRlZC4iKTtjYXNlIDY1MzY1OmNhc2UgNjUzNjc6Y2FzZSA2NTM2ODpjYXNlIDY1MzgwOnA9KDAsYS5yZWFkVWludDE2KShlLG8pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGNvZGVzdHJlYW0gY29kZTogIit0LnRvU3RyaW5nKDE2KSl9bys9cH19Y2F0Y2goZSl7aWYoc3x8dGhpcy5mYWlsT25Db3JydXB0ZWRJbWFnZSl0aHJvdyBuZXcgbyhlLm1lc3NhZ2UpOygwLG4ud2FybikoJ0pQWDogVHJ5aW5nIHRvIHJlY292ZXIgZnJvbTogIicuY29uY2F0KGUubWVzc2FnZSwnIi4nKSl9dGhpcy50aWxlcz1mdW5jdGlvbihlKXtjb25zdCB0PWUuU0laLHI9ZS5jb21wb25lbnRzLG49dC5Dc2l6LGE9W107Zm9yKGxldCB0PTAsaT1lLnRpbGVzLmxlbmd0aDt0PGk7dCsrKXtjb25zdCBpPWUudGlsZXNbdF0scz1bXTtmb3IobGV0IHQ9MDt0PG47dCsrKXNbdF09QyhlLGksdCk7Y29uc3Qgbz1zWzBdLGM9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KG8uaXRlbXMubGVuZ3RoKm4pLGw9e2xlZnQ6by5sZWZ0LHRvcDpvLnRvcCx3aWR0aDpvLndpZHRoLGhlaWdodDpvLmhlaWdodCxpdGVtczpjfTtsZXQgaCx1LGQsZixnLHAsbSxiPTA7aWYoaS5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLm11bHRpcGxlQ29tcG9uZW50VHJhbnNmb3JtKXtjb25zdCBlPTQ9PT1uLHQ9c1swXS5pdGVtcyxhPXNbMV0uaXRlbXMsbz1zWzJdLml0ZW1zLGw9ZT9zWzNdLml0ZW1zOm51bGw7aD1yWzBdLnByZWNpc2lvbi04LHU9LjUrKDEyODw8aCk7Y29uc3QgeT1pLmNvbXBvbmVudHNbMF0sdz1uLTM7aWYoZj10Lmxlbmd0aCx5LmNvZGluZ1N0eWxlUGFyYW1ldGVycy5yZXZlcnNpYmxlVHJhbnNmb3JtYXRpb24pZm9yKGQ9MDtkPGY7ZCsrLGIrPXcpe2c9dFtkXSt1LHA9YVtkXSxtPW9bZF07Y29uc3QgZT1nLShtK3A+PjIpO2NbYisrXT1lK20+PmgsY1tiKytdPWU+PmgsY1tiKytdPWUrcD4+aH1lbHNlIGZvcihkPTA7ZDxmO2QrKyxiKz13KWc9dFtkXSt1LHA9YVtkXSxtPW9bZF0sY1tiKytdPWcrMS40MDIqbT4+aCxjW2IrK109Zy0uMzQ0MTMqcC0uNzE0MTQqbT4+aCxjW2IrK109ZysxLjc3MipwPj5oO2lmKGUpZm9yKGQ9MCxiPTM7ZDxmO2QrKyxiKz00KWNbYl09bFtkXSt1Pj5ofWVsc2UgZm9yKGxldCBlPTA7ZTxuO2UrKyl7Y29uc3QgdD1zW2VdLml0ZW1zO2ZvcihoPXJbZV0ucHJlY2lzaW9uLTgsdT0uNSsoMTI4PDxoKSxiPWUsZD0wLGY9dC5sZW5ndGg7ZDxmO2QrKyljW2JdPXRbZF0rdT4+aCxiKz1ufWEucHVzaChsKX1yZXR1cm4gYX0oaSksdGhpcy53aWR0aD1pLlNJWi5Yc2l6LWkuU0laLlhPc2l6LHRoaXMuaGVpZ2h0PWkuU0laLllzaXotaS5TSVouWU9zaXosdGhpcy5jb21wb25lbnRzQ291bnQ9aS5TSVouQ3Npen19O2NsYXNzIEZ7Y29uc3RydWN0b3IoZSx0KXtjb25zdCByPSgwLGEubG9nMikoTWF0aC5tYXgoZSx0KSkrMTt0aGlzLmxldmVscz1bXTtmb3IobGV0IG49MDtuPHI7bisrKXtjb25zdCByPXt3aWR0aDplLGhlaWdodDp0LGl0ZW1zOltdfTt0aGlzLmxldmVscy5wdXNoKHIpLGU9TWF0aC5jZWlsKGUvMiksdD1NYXRoLmNlaWwodC8yKX19cmVzZXQoZSx0KXtsZXQgcixuPTAsYT0wO2Zvcig7bjx0aGlzLmxldmVscy5sZW5ndGg7KXtyPXRoaXMubGV2ZWxzW25dO2NvbnN0IGk9ZSt0KnIud2lkdGg7aWYodm9pZCAwIT09ci5pdGVtc1tpXSl7YT1yLml0ZW1zW2ldO2JyZWFrfXIuaW5kZXg9aSxlPj49MSx0Pj49MSxuKyt9bi0tLHI9dGhpcy5sZXZlbHNbbl0sci5pdGVtc1tyLmluZGV4XT1hLHRoaXMuY3VycmVudExldmVsPW4sZGVsZXRlIHRoaXMudmFsdWV9aW5jcmVtZW50VmFsdWUoKXtjb25zdCBlPXRoaXMubGV2ZWxzW3RoaXMuY3VycmVudExldmVsXTtlLml0ZW1zW2UuaW5kZXhdKyt9bmV4dExldmVsKCl7bGV0IGU9dGhpcy5jdXJyZW50TGV2ZWwsdD10aGlzLmxldmVsc1tlXTtjb25zdCByPXQuaXRlbXNbdC5pbmRleF07cmV0dXJuIGUtLSxlPDA/KHRoaXMudmFsdWU9ciwhMSk6KHRoaXMuY3VycmVudExldmVsPWUsdD10aGlzLmxldmVsc1tlXSx0Lml0ZW1zW3QuaW5kZXhdPXIsITApfX1jbGFzcyBJe2NvbnN0cnVjdG9yKGUsdCxyKXtjb25zdCBuPSgwLGEubG9nMikoTWF0aC5tYXgoZSx0KSkrMTt0aGlzLmxldmVscz1bXTtmb3IobGV0IGE9MDthPG47YSsrKXtjb25zdCBuPW5ldyBVaW50OEFycmF5KGUqdCk7Zm9yKGxldCBlPTAsdD1uLmxlbmd0aDtlPHQ7ZSsrKW5bZV09cjtjb25zdCBhPXt3aWR0aDplLGhlaWdodDp0LGl0ZW1zOm59O3RoaXMubGV2ZWxzLnB1c2goYSksZT1NYXRoLmNlaWwoZS8yKSx0PU1hdGguY2VpbCh0LzIpfX1yZXNldChlLHQscil7bGV0IG49MDtmb3IoO248dGhpcy5sZXZlbHMubGVuZ3RoOyl7Y29uc3QgYT10aGlzLmxldmVsc1tuXSxpPWUrdCphLndpZHRoO2EuaW5kZXg9aTtjb25zdCBzPWEuaXRlbXNbaV07aWYoMjU1PT09cylicmVhaztpZihzPnIpcmV0dXJuIHRoaXMuY3VycmVudExldmVsPW4sdGhpcy5wcm9wYWdhdGVWYWx1ZXMoKSwhMTtlPj49MSx0Pj49MSxuKyt9cmV0dXJuIHRoaXMuY3VycmVudExldmVsPW4tMSwhMH1pbmNyZW1lbnRWYWx1ZShlKXtjb25zdCB0PXRoaXMubGV2ZWxzW3RoaXMuY3VycmVudExldmVsXTt0Lml0ZW1zW3QuaW5kZXhdPWUrMSx0aGlzLnByb3BhZ2F0ZVZhbHVlcygpfXByb3BhZ2F0ZVZhbHVlcygpe2xldCBlPXRoaXMuY3VycmVudExldmVsLHQ9dGhpcy5sZXZlbHNbZV07Y29uc3Qgcj10Lml0ZW1zW3QuaW5kZXhdO2Zvcig7LS1lPj0wOyl0PXRoaXMubGV2ZWxzW2VdLHQuaXRlbXNbdC5pbmRleF09cn1uZXh0TGV2ZWwoKXtsZXQgZT10aGlzLmN1cnJlbnRMZXZlbCx0PXRoaXMubGV2ZWxzW2VdO2NvbnN0IHI9dC5pdGVtc1t0LmluZGV4XTtyZXR1cm4gdC5pdGVtc1t0LmluZGV4XT0yNTUsZS0tLCEoZTwwfHwodGhpcy5jdXJyZW50TGV2ZWw9ZSx0PXRoaXMubGV2ZWxzW2VdLHQuaXRlbXNbdC5pbmRleF09ciwwKSl9fWNsYXNzIFR7Y29uc3RydWN0b3IoZSx0LHIsbixhKXtsZXQgaTt0aGlzLndpZHRoPWUsdGhpcy5oZWlnaHQ9dCxpPSJISCI9PT1yP1QuSEhDb250ZXh0TGFiZWw6IkhMIj09PXI/VC5ITENvbnRleHRMYWJlbDpULkxMQW5kTEhDb250ZXh0c0xhYmVsLHRoaXMuY29udGV4dExhYmVsVGFibGU9aTtjb25zdCBzPWUqdDtsZXQgbzt0aGlzLm5laWdoYm9yc1NpZ25pZmljYW5jZT1uZXcgVWludDhBcnJheShzKSx0aGlzLmNvZWZmaWNlbnRzU2lnbj1uZXcgVWludDhBcnJheShzKSxvPWE+MTQ/bmV3IFVpbnQzMkFycmF5KHMpOmE+Nj9uZXcgVWludDE2QXJyYXkocyk6bmV3IFVpbnQ4QXJyYXkocyksdGhpcy5jb2VmZmljZW50c01hZ25pdHVkZT1vLHRoaXMucHJvY2Vzc2luZ0ZsYWdzPW5ldyBVaW50OEFycmF5KHMpO2NvbnN0IGM9bmV3IFVpbnQ4QXJyYXkocyk7aWYoMCE9PW4pZm9yKGxldCBlPTA7ZTxzO2UrKyljW2VdPW47dGhpcy5iaXRzRGVjb2RlZD1jLHRoaXMucmVzZXQoKX1zZXREZWNvZGVyKGUpe3RoaXMuZGVjb2Rlcj1lfXJlc2V0KCl7dGhpcy5jb250ZXh0cz1uZXcgSW50OEFycmF5KDE5KSx0aGlzLmNvbnRleHRzWzBdPTgsdGhpcy5jb250ZXh0c1tULlVOSUZPUk1fQ09OVEVYVF09OTIsdGhpcy5jb250ZXh0c1tULlJVTkxFTkdUSF9DT05URVhUXT02fXNldE5laWdoYm9yc1NpZ25pZmljYW5jZShlLHQscil7Y29uc3Qgbj10aGlzLm5laWdoYm9yc1NpZ25pZmljYW5jZSxhPXRoaXMud2lkdGgsaT10aGlzLmhlaWdodCxzPXQ+MCxvPXQrMTxhO2xldCBjO2U+MCYmKGM9ci1hLHMmJihuW2MtMV0rPTE2KSxvJiYobltjKzFdKz0xNiksbltjXSs9NCksZSsxPGkmJihjPXIrYSxzJiYobltjLTFdKz0xNiksbyYmKG5bYysxXSs9MTYpLG5bY10rPTQpLHMmJihuW3ItMV0rPTEpLG8mJihuW3IrMV0rPTEpLG5bcl18PTEyOH1ydW5TaWduaWZpY2FuY2VQcm9wYWdhdGlvblBhc3MoKXtjb25zdCBlPXRoaXMuZGVjb2Rlcix0PXRoaXMud2lkdGgscj10aGlzLmhlaWdodCxuPXRoaXMuY29lZmZpY2VudHNNYWduaXR1ZGUsYT10aGlzLmNvZWZmaWNlbnRzU2lnbixpPXRoaXMubmVpZ2hib3JzU2lnbmlmaWNhbmNlLHM9dGhpcy5wcm9jZXNzaW5nRmxhZ3Msbz10aGlzLmNvbnRleHRzLGM9dGhpcy5jb250ZXh0TGFiZWxUYWJsZSxsPXRoaXMuYml0c0RlY29kZWQ7Zm9yKGxldCBoPTA7aDxyO2grPTQpZm9yKGxldCB1PTA7dTx0O3UrKyl7bGV0IGQ9aCp0K3U7Zm9yKGxldCBmPTA7Zjw0O2YrKyxkKz10KXtjb25zdCB0PWgrZjtpZih0Pj1yKWJyZWFrO2lmKHNbZF0mPS0yLG5bZF18fCFpW2RdKWNvbnRpbnVlO2NvbnN0IGc9Y1tpW2RdXTtpZihlLnJlYWRCaXQobyxnKSl7Y29uc3QgZT10aGlzLmRlY29kZVNpZ25CaXQodCx1LGQpO2FbZF09ZSxuW2RdPTEsdGhpcy5zZXROZWlnaGJvcnNTaWduaWZpY2FuY2UodCx1LGQpLHNbZF18PTJ9bFtkXSsrLHNbZF18PTF9fX1kZWNvZGVTaWduQml0KGUsdCxyKXtjb25zdCBuPXRoaXMud2lkdGgsYT10aGlzLmhlaWdodCxpPXRoaXMuY29lZmZpY2VudHNNYWduaXR1ZGUscz10aGlzLmNvZWZmaWNlbnRzU2lnbjtsZXQgbyxjLGwsaCx1LGQ7aD10PjAmJjAhPT1pW3ItMV0sdCsxPG4mJjAhPT1pW3IrMV0/KGw9c1tyKzFdLGg/KGM9c1tyLTFdLG89MS1sLWMpOm89MS1sLWwpOmg/KGM9c1tyLTFdLG89MS1jLWMpOm89MDtjb25zdCBmPTMqbztyZXR1cm4gaD1lPjAmJjAhPT1pW3Itbl0sZSsxPGEmJjAhPT1pW3Irbl0/KGw9c1tyK25dLGg/KGM9c1tyLW5dLG89MS1sLWMrZik6bz0xLWwtbCtmKTpoPyhjPXNbci1uXSxvPTEtYy1jK2YpOm89ZixvPj0wPyh1PTkrbyxkPXRoaXMuZGVjb2Rlci5yZWFkQml0KHRoaXMuY29udGV4dHMsdSkpOih1PTktbyxkPTFedGhpcy5kZWNvZGVyLnJlYWRCaXQodGhpcy5jb250ZXh0cyx1KSksZH1ydW5NYWduaXR1ZGVSZWZpbmVtZW50UGFzcygpe2NvbnN0IGU9dGhpcy5kZWNvZGVyLHQ9dGhpcy53aWR0aCxyPXRoaXMuaGVpZ2h0LG49dGhpcy5jb2VmZmljZW50c01hZ25pdHVkZSxhPXRoaXMubmVpZ2hib3JzU2lnbmlmaWNhbmNlLGk9dGhpcy5jb250ZXh0cyxzPXRoaXMuYml0c0RlY29kZWQsbz10aGlzLnByb2Nlc3NpbmdGbGFncyxjPXQqcixsPTQqdDtmb3IobGV0IHIsaD0wO2g8YztoPXIpe3I9TWF0aC5taW4oYyxoK2wpO2ZvcihsZXQgYz0wO2M8dDtjKyspZm9yKGxldCBsPWgrYztsPHI7bCs9dCl7aWYoIW5bbF18fDAhPSgxJm9bbF0pKWNvbnRpbnVlO2xldCB0PTE2OzAhPSgyJm9bbF0pJiYob1tsXV49Mix0PTA9PSgxMjcmYVtsXSk/MTU6MTQpO2NvbnN0IHI9ZS5yZWFkQml0KGksdCk7bltsXT1uW2xdPDwxfHIsc1tsXSsrLG9bbF18PTF9fX1ydW5DbGVhbnVwUGFzcygpe2NvbnN0IGU9dGhpcy5kZWNvZGVyLHQ9dGhpcy53aWR0aCxyPXRoaXMuaGVpZ2h0LG49dGhpcy5uZWlnaGJvcnNTaWduaWZpY2FuY2UsYT10aGlzLmNvZWZmaWNlbnRzTWFnbml0dWRlLGk9dGhpcy5jb2VmZmljZW50c1NpZ24scz10aGlzLmNvbnRleHRzLG89dGhpcy5jb250ZXh0TGFiZWxUYWJsZSxjPXRoaXMuYml0c0RlY29kZWQsbD10aGlzLnByb2Nlc3NpbmdGbGFncyxoPXQsdT0yKnQsZD0zKnQ7bGV0IGY7Zm9yKGxldCBnPTA7ZzxyO2c9Zil7Zj1NYXRoLm1pbihnKzQscik7Y29uc3QgcD1nKnQsbT1nKzM8cjtmb3IobGV0IHI9MDtyPHQ7cisrKXtjb25zdCBiPXArcjtsZXQgeSx3PTAsdj1iLHg9ZztpZihtJiYwPT09bFtiXSYmMD09PWxbYitoXSYmMD09PWxbYit1XSYmMD09PWxbYitkXSYmMD09PW5bYl0mJjA9PT1uW2IraF0mJjA9PT1uW2IrdV0mJjA9PT1uW2IrZF0pe2lmKCFlLnJlYWRCaXQocyxULlJVTkxFTkdUSF9DT05URVhUKSl7Y1tiXSsrLGNbYitoXSsrLGNbYit1XSsrLGNbYitkXSsrO2NvbnRpbnVlfXc9ZS5yZWFkQml0KHMsVC5VTklGT1JNX0NPTlRFWFQpPDwxfGUucmVhZEJpdChzLFQuVU5JRk9STV9DT05URVhUKSwwIT09dyYmKHg9Zyt3LHYrPXcqdCkseT10aGlzLmRlY29kZVNpZ25CaXQoeCxyLHYpLGlbdl09eSxhW3ZdPTEsdGhpcy5zZXROZWlnaGJvcnNTaWduaWZpY2FuY2UoeCxyLHYpLGxbdl18PTIsdj1iO2ZvcihsZXQgZT1nO2U8PXg7ZSsrLHYrPXQpY1t2XSsrO3crK31mb3IoeD1nK3c7eDxmO3grKyx2Kz10KXtpZihhW3ZdfHwwIT0oMSZsW3ZdKSljb250aW51ZTtjb25zdCB0PW9bblt2XV07MT09PWUucmVhZEJpdChzLHQpJiYoeT10aGlzLmRlY29kZVNpZ25CaXQoeCxyLHYpLGlbdl09eSxhW3ZdPTEsdGhpcy5zZXROZWlnaGJvcnNTaWduaWZpY2FuY2UoeCxyLHYpLGxbdl18PTIpLGNbdl0rK319fX1jaGVja1NlZ21lbnRhdGlvblN5bWJvbCgpe2NvbnN0IGU9dGhpcy5kZWNvZGVyLHQ9dGhpcy5jb250ZXh0cztpZigxMCE9KGUucmVhZEJpdCh0LFQuVU5JRk9STV9DT05URVhUKTw8M3xlLnJlYWRCaXQodCxULlVOSUZPUk1fQ09OVEVYVCk8PDJ8ZS5yZWFkQml0KHQsVC5VTklGT1JNX0NPTlRFWFQpPDwxfGUucmVhZEJpdCh0LFQuVU5JRk9STV9DT05URVhUKSkpdGhyb3cgbmV3IG8oIkludmFsaWQgc2VnbWVudGF0aW9uIHN5bWJvbCIpfX1pKFQsIlVOSUZPUk1fQ09OVEVYVCIsMTcpLGkoVCwiUlVOTEVOR1RIX0NPTlRFWFQiLDE4KSxpKFQsIkxMQW5kTEhDb250ZXh0c0xhYmVsIixuZXcgVWludDhBcnJheShbMCw1LDgsMCwzLDcsOCwwLDQsNyw4LDAsMCwwLDAsMCwxLDYsOCwwLDMsNyw4LDAsNCw3LDgsMCwwLDAsMCwwLDIsNiw4LDAsMyw3LDgsMCw0LDcsOCwwLDAsMCwwLDAsMiw2LDgsMCwzLDcsOCwwLDQsNyw4LDAsMCwwLDAsMCwyLDYsOCwwLDMsNyw4LDAsNCw3LDhdKSksaShULCJITENvbnRleHRMYWJlbCIsbmV3IFVpbnQ4QXJyYXkoWzAsMyw0LDAsNSw3LDcsMCw4LDgsOCwwLDAsMCwwLDAsMSwzLDQsMCw2LDcsNywwLDgsOCw4LDAsMCwwLDAsMCwyLDMsNCwwLDYsNyw3LDAsOCw4LDgsMCwwLDAsMCwwLDIsMyw0LDAsNiw3LDcsMCw4LDgsOCwwLDAsMCwwLDAsMiwzLDQsMCw2LDcsNywwLDgsOCw4XSkpLGkoVCwiSEhDb250ZXh0TGFiZWwiLG5ldyBVaW50OEFycmF5KFswLDEsMiwwLDEsMiwyLDAsMiwyLDIsMCwwLDAsMCwwLDMsNCw1LDAsNCw1LDUsMCw1LDUsNSwwLDAsMCwwLDAsNiw3LDcsMCw3LDcsNywwLDcsNyw3LDAsMCwwLDAsMCw4LDgsOCwwLDgsOCw4LDAsOCw4LDgsMCwwLDAsMCwwLDgsOCw4LDAsOCw4LDgsMCw4LDgsOF0pKTtjbGFzcyBNe2NvbnN0cnVjdG9yKCl7dGhpcy5jb25zdHJ1Y3Rvcj09PU0mJigwLG4udW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBUcmFuc2Zvcm0uIil9Y2FsY3VsYXRlKGUsdCxyKXtsZXQgbj1lWzBdO2ZvcihsZXQgYT0xLGk9ZS5sZW5ndGg7YTxpO2ErKyluPXRoaXMuaXRlcmF0ZShuLGVbYV0sdCxyKTtyZXR1cm4gbn1leHRlbmQoZSx0LHIpe2xldCBuPXQtMSxhPXQrMSxpPXQrci0yLHM9dCtyO2Vbbi0tXT1lW2ErK10sZVtzKytdPWVbaS0tXSxlW24tLV09ZVthKytdLGVbcysrXT1lW2ktLV0sZVtuLS1dPWVbYSsrXSxlW3MrK109ZVtpLS1dLGVbbl09ZVthXSxlW3NdPWVbaV19ZmlsdGVyKGUsdCxyKXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBmaWx0ZXJgIGNhbGxlZCIpfWl0ZXJhdGUoZSx0LHIsbil7Y29uc3QgYT1lLndpZHRoLGk9ZS5oZWlnaHQ7bGV0IHM9ZS5pdGVtcztjb25zdCBvPXQud2lkdGgsYz10LmhlaWdodCxsPXQuaXRlbXM7bGV0IGgsdSxkLGYsZyxwO2ZvcihkPTAsaD0wO2g8aTtoKyspZm9yKGY9MipoKm8sdT0wO3U8YTt1KyssZCsrLGYrPTIpbFtmXT1zW2RdO3M9ZS5pdGVtcz1udWxsO2NvbnN0IG09bmV3IEZsb2F0MzJBcnJheShvKzgpO2lmKDE9PT1vKXtpZigwIT0oMSZyKSlmb3IocD0wLGQ9MDtwPGM7cCsrLGQrPW8pbFtkXSo9LjV9ZWxzZSBmb3IocD0wLGQ9MDtwPGM7cCsrLGQrPW8pbS5zZXQobC5zdWJhcnJheShkLGQrbyksNCksdGhpcy5leHRlbmQobSw0LG8pLHRoaXMuZmlsdGVyKG0sNCxvKSxsLnNldChtLnN1YmFycmF5KDQsNCtvKSxkKTtsZXQgYj0xNjtjb25zdCB5PVtdO2ZvcihoPTA7aDxiO2grKyl5LnB1c2gobmV3IEZsb2F0MzJBcnJheShjKzgpKTtsZXQgdyx2PTA7aWYoZT00K2MsMT09PWMpe2lmKDAhPSgxJm4pKWZvcihnPTA7ZzxvO2crKylsW2ddKj0uNX1lbHNlIGZvcihnPTA7ZzxvO2crKyl7aWYoMD09PXYpe2ZvcihiPU1hdGgubWluKG8tZyxiKSxkPWcsZj00O2Y8ZTtkKz1vLGYrKylmb3Iodz0wO3c8Yjt3KyspeVt3XVtmXT1sW2Qrd107dj1ifXYtLTtjb25zdCB0PXlbdl07aWYodGhpcy5leHRlbmQodCw0LGMpLHRoaXMuZmlsdGVyKHQsNCxjKSwwPT09dilmb3IoZD1nLWIrMSxmPTQ7ZjxlO2QrPW8sZisrKWZvcih3PTA7dzxiO3crKylsW2Qrd109eVt3XVtmXX1yZXR1cm57d2lkdGg6byxoZWlnaHQ6YyxpdGVtczpsfX19Y2xhc3MgRSBleHRlbmRzIE17ZmlsdGVyKGUsdCxyKXtjb25zdCBuPXI+PjE7bGV0IGEsaSxzLG87Y29uc3QgYz0tMS41ODYxMzQzNDIwNTk5MjQsbD0tLjA1Mjk4MDExODU3Mjk2MSxoPS44ODI5MTEwNzU1MzA5MzQsdT0uNDQzNTA2ODUyMDQzOTcxLGQ9MS4yMzAxNzQxMDQ5MTQwMDE7Zm9yKGE9KHR8PTApLTMsaT1uKzQ7aS0tO2ErPTIpZVthXSo9LjgxMjg5MzA2NjExNTk2MDk7Zm9yKGE9dC0yLHM9dSplW2EtMV0saT1uKzM7aS0tJiYobz11KmVbYSsxXSxlW2FdPWQqZVthXS1zLW8saS0tKTthKz0yKWErPTIscz11KmVbYSsxXSxlW2FdPWQqZVthXS1zLW87Zm9yKGE9dC0xLHM9aCplW2EtMV0saT1uKzI7aS0tJiYobz1oKmVbYSsxXSxlW2FdLT1zK28saS0tKTthKz0yKWErPTIscz1oKmVbYSsxXSxlW2FdLT1zK287Zm9yKGE9dCxzPWwqZVthLTFdLGk9bisxO2ktLSYmKG89bCplW2ErMV0sZVthXS09cytvLGktLSk7YSs9MilhKz0yLHM9bCplW2ErMV0sZVthXS09cytvO2lmKDAhPT1uKWZvcihhPXQrMSxzPWMqZVthLTFdLGk9bjtpLS0mJihvPWMqZVthKzFdLGVbYV0tPXMrbyxpLS0pO2ErPTIpYSs9MixzPWMqZVthKzFdLGVbYV0tPXMrb319Y2xhc3MgUCBleHRlbmRzIE17ZmlsdGVyKGUsdCxyKXtjb25zdCBuPXI+PjE7bGV0IGEsaTtmb3IoYT10fD0wLGk9bisxO2ktLTthKz0yKWVbYV0tPWVbYS0xXStlW2ErMV0rMj4+Mjtmb3IoYT10KzEsaT1uO2ktLTthKz0yKWVbYV0rPWVbYS0xXStlW2ErMV0+PjF9fX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkxaV1N0cmVhbT12b2lkIDAscig4NCkscig5Mykscig5NCkscig5Nykscig5OSkscigxMDEpLHIoMTA1KSxyKDEwOCkscigxMTUpO3ZhciBuPXIoMTY4KTtjbGFzcyBhIGV4dGVuZHMgbi5EZWNvZGVTdHJlYW17Y29uc3RydWN0b3IoZSx0LHIpe3N1cGVyKHQpLHRoaXMuc3RyPWUsdGhpcy5kaWN0PWUuZGljdCx0aGlzLmNhY2hlZERhdGE9MCx0aGlzLmJpdHNDYWNoZWQ9MDtjb25zdCBuPTQwOTYsYT17ZWFybHlDaGFuZ2U6cixjb2RlTGVuZ3RoOjksbmV4dENvZGU6MjU4LGRpY3Rpb25hcnlWYWx1ZXM6bmV3IFVpbnQ4QXJyYXkobiksZGljdGlvbmFyeUxlbmd0aHM6bmV3IFVpbnQxNkFycmF5KG4pLGRpY3Rpb25hcnlQcmV2Q29kZXM6bmV3IFVpbnQxNkFycmF5KG4pLGN1cnJlbnRTZXF1ZW5jZTpuZXcgVWludDhBcnJheShuKSxjdXJyZW50U2VxdWVuY2VMZW5ndGg6MH07Zm9yKGxldCBlPTA7ZTwyNTY7KytlKWEuZGljdGlvbmFyeVZhbHVlc1tlXT1lLGEuZGljdGlvbmFyeUxlbmd0aHNbZV09MTt0aGlzLmx6d1N0YXRlPWF9cmVhZEJpdHMoZSl7bGV0IHQ9dGhpcy5iaXRzQ2FjaGVkLHI9dGhpcy5jYWNoZWREYXRhO2Zvcig7dDxlOyl7Y29uc3QgZT10aGlzLnN0ci5nZXRCeXRlKCk7aWYoLTE9PT1lKXJldHVybiB0aGlzLmVvZj0hMCxudWxsO3I9cjw8OHxlLHQrPTh9cmV0dXJuIHRoaXMuYml0c0NhY2hlZD10LT1lLHRoaXMuY2FjaGVkRGF0YT1yLHRoaXMubGFzdENvZGU9bnVsbCxyPj4+dCYoMTw8ZSktMX1yZWFkQmxvY2soKXtsZXQgZSx0LHIsbj0xMDI0O2NvbnN0IGE9dGhpcy5sendTdGF0ZTtpZighYSlyZXR1cm47Y29uc3QgaT1hLmVhcmx5Q2hhbmdlO2xldCBzPWEubmV4dENvZGU7Y29uc3Qgbz1hLmRpY3Rpb25hcnlWYWx1ZXMsYz1hLmRpY3Rpb25hcnlMZW5ndGhzLGw9YS5kaWN0aW9uYXJ5UHJldkNvZGVzO2xldCBoPWEuY29kZUxlbmd0aCx1PWEucHJldkNvZGU7Y29uc3QgZD1hLmN1cnJlbnRTZXF1ZW5jZTtsZXQgZj1hLmN1cnJlbnRTZXF1ZW5jZUxlbmd0aCxnPTAscD10aGlzLmJ1ZmZlckxlbmd0aCxtPXRoaXMuZW5zdXJlQnVmZmVyKHRoaXMuYnVmZmVyTGVuZ3RoK24pO2ZvcihlPTA7ZTw1MTI7ZSsrKXtjb25zdCBlPXRoaXMucmVhZEJpdHMoaCksYT1mPjA7aWYoZTwyNTYpZFswXT1lLGY9MTtlbHNle2lmKCEoZT49MjU4KSl7aWYoMjU2PT09ZSl7aD05LHM9MjU4LGY9MDtjb250aW51ZX10aGlzLmVvZj0hMCxkZWxldGUgdGhpcy5sendTdGF0ZTticmVha31pZihlPHMpZm9yKGY9Y1tlXSx0PWYtMSxyPWU7dD49MDt0LS0pZFt0XT1vW3JdLHI9bFtyXTtlbHNlIGRbZisrXT1kWzBdfWlmKGEmJihsW3NdPXUsY1tzXT1jW3VdKzEsb1tzXT1kWzBdLHMrKyxoPXMraSZzK2ktMT9oOjB8TWF0aC5taW4oTWF0aC5sb2cocytpKS8uNjkzMTQ3MTgwNTU5OTQ1MysxLDEyKSksdT1lLGcrPWYsbjxnKXtkb3tuKz01MTJ9d2hpbGUobjxnKTttPXRoaXMuZW5zdXJlQnVmZmVyKHRoaXMuYnVmZmVyTGVuZ3RoK24pfWZvcih0PTA7dDxmO3QrKyltW3ArK109ZFt0XX1hLm5leHRDb2RlPXMsYS5jb2RlTGVuZ3RoPWgsYS5wcmV2Q29kZT11LGEuY3VycmVudFNlcXVlbmNlTGVuZ3RoPWYsdGhpcy5idWZmZXJMZW5ndGg9cH19dC5MWldTdHJlYW09YX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlByZWRpY3RvclN0cmVhbT12b2lkIDAscig4NCkscig5Mykscig5NCkscig5Nykscig5OSkscigxMDEpLHIoMTA1KSxyKDEwOCkscigxMTUpO3ZhciBuPXIoMTY4KSxhPXIoMTUwKSxpPXIoMTQ0KTtjbGFzcyBzIGV4dGVuZHMgbi5EZWNvZGVTdHJlYW17Y29uc3RydWN0b3IoZSx0LHIpe2lmKHN1cGVyKHQpLCEociBpbnN0YW5jZW9mIGEuRGljdCkpcmV0dXJuIGU7Y29uc3Qgbj10aGlzLnByZWRpY3Rvcj1yLmdldCgiUHJlZGljdG9yIil8fDE7aWYobjw9MSlyZXR1cm4gZTtpZigyIT09biYmKG48MTB8fG4+MTUpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJVbnN1cHBvcnRlZCBwcmVkaWN0b3I6ICIuY29uY2F0KG4pKTt0aGlzLnJlYWRCbG9jaz0yPT09bj90aGlzLnJlYWRCbG9ja1RpZmY6dGhpcy5yZWFkQmxvY2tQbmcsdGhpcy5zdHI9ZSx0aGlzLmRpY3Q9ZS5kaWN0O2NvbnN0IHM9dGhpcy5jb2xvcnM9ci5nZXQoIkNvbG9ycyIpfHwxLG89dGhpcy5iaXRzPXIuZ2V0KCJCUEMiLCJCaXRzUGVyQ29tcG9uZW50Iil8fDgsYz10aGlzLmNvbHVtbnM9ci5nZXQoIkNvbHVtbnMiKXx8MTtyZXR1cm4gdGhpcy5waXhCeXRlcz1zKm8rNz4+Myx0aGlzLnJvd0J5dGVzPWMqcypvKzc+PjMsdGhpc31yZWFkQmxvY2tUaWZmKCl7Y29uc3QgZT10aGlzLnJvd0J5dGVzLHQ9dGhpcy5idWZmZXJMZW5ndGgscj10aGlzLmVuc3VyZUJ1ZmZlcih0K2UpLG49dGhpcy5iaXRzLGE9dGhpcy5jb2xvcnMsaT10aGlzLnN0ci5nZXRCeXRlcyhlKTtpZih0aGlzLmVvZj0haS5sZW5ndGgsdGhpcy5lb2YpcmV0dXJuO2xldCBzLG89MCxjPTAsbD0wLGg9MCx1PXQ7aWYoMT09PW4mJjE9PT1hKWZvcihzPTA7czxlOysrcyl7bGV0IGU9aVtzXV5vO2VePWU+PjEsZV49ZT4+MixlXj1lPj40LG89KDEmZSk8PDcsclt1KytdPWV9ZWxzZSBpZig4PT09bil7Zm9yKHM9MDtzPGE7KytzKXJbdSsrXT1pW3NdO2Zvcig7czxlOysrcylyW3VdPXJbdS1hXStpW3NdLHUrK31lbHNlIGlmKDE2PT09bil7Y29uc3QgdD0yKmE7Zm9yKHM9MDtzPHQ7KytzKXJbdSsrXT1pW3NdO2Zvcig7czxlO3MrPTIpe2NvbnN0IGU9KCgyNTUmaVtzXSk8PDgpKygyNTUmaVtzKzFdKSsoKDI1NSZyW3UtdF0pPDw4KSsoMjU1JnJbdS10KzFdKTtyW3UrK109ZT4+OCYyNTUsclt1KytdPTI1NSZlfX1lbHNle2NvbnN0IGU9bmV3IFVpbnQ4QXJyYXkoYSsxKSx1PSgxPDxuKS0xO2xldCBkPTAsZj10O2NvbnN0IGc9dGhpcy5jb2x1bW5zO2ZvcihzPTA7czxnOysrcylmb3IobGV0IHQ9MDt0PGE7Kyt0KWw8biYmKG89bzw8OHwyNTUmaVtkKytdLGwrPTgpLGVbdF09ZVt0XSsobz4+bC1uKSZ1LGwtPW4sYz1jPDxufGVbdF0saCs9bixoPj04JiYocltmKytdPWM+PmgtOCYyNTUsaC09OCk7aD4wJiYocltmKytdPShjPDw4LWgpKyhvJigxPDw4LWgpLTEpKX10aGlzLmJ1ZmZlckxlbmd0aCs9ZX1yZWFkQmxvY2tQbmcoKXtjb25zdCBlPXRoaXMucm93Qnl0ZXMsdD10aGlzLnBpeEJ5dGVzLHI9dGhpcy5zdHIuZ2V0Qnl0ZSgpLG49dGhpcy5zdHIuZ2V0Qnl0ZXMoZSk7aWYodGhpcy5lb2Y9IW4ubGVuZ3RoLHRoaXMuZW9mKXJldHVybjtjb25zdCBhPXRoaXMuYnVmZmVyTGVuZ3RoLHM9dGhpcy5lbnN1cmVCdWZmZXIoYStlKTtsZXQgbz1zLnN1YmFycmF5KGEtZSxhKTswPT09by5sZW5ndGgmJihvPW5ldyBVaW50OEFycmF5KGUpKTtsZXQgYyxsLGgsdT1hO3N3aXRjaChyKXtjYXNlIDA6Zm9yKGM9MDtjPGU7KytjKXNbdSsrXT1uW2NdO2JyZWFrO2Nhc2UgMTpmb3IoYz0wO2M8dDsrK2Mpc1t1KytdPW5bY107Zm9yKDtjPGU7KytjKXNbdV09c1t1LXRdK25bY10mMjU1LHUrKzticmVhaztjYXNlIDI6Zm9yKGM9MDtjPGU7KytjKXNbdSsrXT1vW2NdK25bY10mMjU1O2JyZWFrO2Nhc2UgMzpmb3IoYz0wO2M8dDsrK2Mpc1t1KytdPShvW2NdPj4xKStuW2NdO2Zvcig7YzxlOysrYylzW3VdPShvW2NdK3NbdS10XT4+MSkrbltjXSYyNTUsdSsrO2JyZWFrO2Nhc2UgNDpmb3IoYz0wO2M8dDsrK2MpbD1vW2NdLGg9bltjXSxzW3UrK109bCtoO2Zvcig7YzxlOysrYyl7bD1vW2NdO2NvbnN0IGU9b1tjLXRdLHI9c1t1LXRdLGE9citsLWU7bGV0IGk9YS1yO2k8MCYmKGk9LWkpO2xldCBkPWEtbDtkPDAmJihkPS1kKTtsZXQgZj1hLWU7ZjwwJiYoZj0tZiksaD1uW2NdLHNbdSsrXT1pPD1kJiZpPD1mP3IraDpkPD1mP2wraDplK2h9YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiVW5zdXBwb3J0ZWQgcHJlZGljdG9yOiAiLmNvbmNhdChyKSl9dGhpcy5idWZmZXJMZW5ndGgrPWV9fXQuUHJlZGljdG9yU3RyZWFtPXN9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5SdW5MZW5ndGhTdHJlYW09dm9pZCAwO3ZhciBuPXIoMTY4KTtjbGFzcyBhIGV4dGVuZHMgbi5EZWNvZGVTdHJlYW17Y29uc3RydWN0b3IoZSx0KXtzdXBlcih0KSx0aGlzLnN0cj1lLHRoaXMuZGljdD1lLmRpY3R9cmVhZEJsb2NrKCl7Y29uc3QgZT10aGlzLnN0ci5nZXRCeXRlcygyKTtpZighZXx8ZS5sZW5ndGg8Mnx8MTI4PT09ZVswXSlyZXR1cm4gdm9pZCh0aGlzLmVvZj0hMCk7bGV0IHQscj10aGlzLmJ1ZmZlckxlbmd0aCxuPWVbMF07aWYobjwxMjgpe2lmKHQ9dGhpcy5lbnN1cmVCdWZmZXIocituKzEpLHRbcisrXT1lWzFdLG4+MCl7Y29uc3QgZT10aGlzLnN0ci5nZXRCeXRlcyhuKTt0LnNldChlLHIpLHIrPW59fWVsc2V7bj0yNTctbjtjb25zdCBhPWVbMV07dD10aGlzLmVuc3VyZUJ1ZmZlcihyK24rMSk7Zm9yKGxldCBlPTA7ZTxuO2UrKyl0W3IrK109YX10aGlzLmJ1ZmZlckxlbmd0aD1yfX10LlJ1bkxlbmd0aFN0cmVhbT1hfSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuRm9udD10LkVycm9yRm9udD12b2lkIDAscigxMTYpLHIoMTI2KSxyKDEyOCkscigxMzEpLHIoMTMzKSxyKDEzNSkscigxMzcpLHIoMTM5KSxyKDE1Nykscig4NCkscig5Mykscig5NCkscig5Nykscig5OSkscigxMDEpLHIoMTA1KSxyKDEwOCkscigxMTUpO3ZhciBuPXIoMTQ0KSxhPXIoMTg1KSxpPXIoMTg4KSxzPXIoMTkwKSxvPXIoMTg5KSxjPXIoMTg3KSxsPXIoMTkxKSxoPXIoMTkyKSx1PXIoMTkzKSxkPXIoMTk0KSxmPXIoMTk1KSxnPXIoMTk2KSxwPXIoMTY0KSxtPXIoMTk3KSxiPXIoMTQ5KSx5PXIoMTU0KSx3PXIoMTk4KTtjb25zdCB2PVtbNTczNDQsNjM3NDNdLFsxMDQ4NTc2LDExMTQxMDldXSx4PTFlMyxTPVsiYXNjZW50IiwiYmJveCIsImJsYWNrIiwiYm9sZCIsImNoYXJQcm9jT3BlcmF0b3JMaXN0IiwiY29tcG9zaXRlIiwiY3NzRm9udEluZm8iLCJkYXRhIiwiZGVmYXVsdFZNZXRyaWNzIiwiZGVmYXVsdFdpZHRoIiwiZGVzY2VudCIsImZhbGxiYWNrTmFtZSIsImZvbnRNYXRyaXgiLCJpc0ludmFsaWRQREZqc0ZvbnQiLCJpc1R5cGUzRm9udCIsIml0YWxpYyIsImxvYWRlZE5hbWUiLCJtaW1ldHlwZSIsIm1pc3NpbmdGaWxlIiwibmFtZSIsInJlbWVhc3VyZSIsInN1YnR5cGUiLCJzeXN0ZW1Gb250SW5mbyIsInR5cGUiLCJ2ZXJ0aWNhbCJdLEE9WyJjTWFwIiwiZGVmYXVsdEVuY29kaW5nIiwiZGlmZmVyZW5jZXMiLCJpc01vbm9zcGFjZSIsImlzU2VyaWZGb250IiwiaXNTeW1ib2xpY0ZvbnQiLCJzZWFjTWFwIiwidG9Gb250Q2hhciIsInRvVW5pY29kZSIsInZtZXRyaWNzIiwid2lkdGhzIl07ZnVuY3Rpb24gayhlKXtpZighZS5mb250TWF0cml4KXJldHVybjtpZihlLmZvbnRNYXRyaXhbMF09PT1uLkZPTlRfSURFTlRJVFlfTUFUUklYWzBdKXJldHVybjtjb25zdCB0PS4wMDEvZS5mb250TWF0cml4WzBdLHI9ZS53aWR0aHM7Zm9yKGNvbnN0IGUgaW4gcilyW2VdKj10O2UuZGVmYXVsdFdpZHRoKj10fWZ1bmN0aW9uIEMoZSl7aWYoIWUuZmFsbGJhY2tUb1VuaWNvZGUpcmV0dXJuO2lmKGUudG9Vbmljb2RlIGluc3RhbmNlb2YgaC5JZGVudGl0eVRvVW5pY29kZU1hcClyZXR1cm47Y29uc3QgdD1bXTtmb3IoY29uc3QgciBpbiBlLmZhbGxiYWNrVG9Vbmljb2RlKWUudG9Vbmljb2RlLmhhcyhyKXx8KHRbcl09ZS5mYWxsYmFja1RvVW5pY29kZVtyXSk7dC5sZW5ndGg+MCYmZS50b1VuaWNvZGUuYW1lbmQodCl9Y2xhc3MgT3tjb25zdHJ1Y3RvcihlLHQscixuLGEsaSxzLG8sYyl7dGhpcy5vcmlnaW5hbENoYXJDb2RlPWUsdGhpcy5mb250Q2hhcj10LHRoaXMudW5pY29kZT1yLHRoaXMuYWNjZW50PW4sdGhpcy53aWR0aD1hLHRoaXMudm1ldHJpYz1pLHRoaXMub3BlcmF0b3JMaXN0SWQ9cyx0aGlzLmlzU3BhY2U9byx0aGlzLmlzSW5Gb250PWN9Z2V0IGNhdGVnb3J5KCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImNhdGVnb3J5IiwoMCxzLmdldENoYXJVbmljb2RlQ2F0ZWdvcnkpKHRoaXMudW5pY29kZSksITApfX1mdW5jdGlvbiBGKGUsdCl7cmV0dXJuKGU8PDgpK3R9ZnVuY3Rpb24gSShlLHQscil7ZVt0KzFdPXIsZVt0XT1yPj4+OH1mdW5jdGlvbiBUKGUsdCl7Y29uc3Qgcj0oZTw8OCkrdDtyZXR1cm4gMzI3Njgmcj9yLTY1NTM2OnJ9ZnVuY3Rpb24gTShlKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShlPj44JjI1NSwyNTUmZSl9ZnVuY3Rpb24gRShlKXtyZXR1cm4gZT4zMjc2Nz9lPTMyNzY3OmU8LTMyNzY4JiYoZT0tMzI3NjgpLFN0cmluZy5mcm9tQ2hhckNvZGUoZT4+OCYyNTUsMjU1JmUpfWZ1bmN0aW9uIFAoZSl7Y29uc3QgdD1lLnBlZWtCeXRlcyg0KTtyZXR1cm4idHRjZiI9PT0oMCxuLmJ5dGVzVG9TdHJpbmcpKHQpfWZ1bmN0aW9uIFIoZSx0KXtmb3IoY29uc3QgciBpbiB0KWVbK3JdPXRbcl19ZnVuY3Rpb24gTihlLHQscil7Y29uc3Qgbj1bXTtsZXQgYTtmb3IobGV0IHI9MCxpPWUubGVuZ3RoO3I8aTtyKyspYT0oMCxzLmdldFVuaWNvZGVGb3JHbHlwaCkoZVtyXSx0KSwtMSE9PWEmJihuW3JdPWEpO2Zvcihjb25zdCBlIGluIHIpYT0oMCxzLmdldFVuaWNvZGVGb3JHbHlwaCkocltlXSx0KSwtMSE9PWEmJihuWytlXT1hKTtyZXR1cm4gbn1mdW5jdGlvbiBEKGUpe3JldHVybiAxPT09ZS5wbGF0Zm9ybSYmMD09PWUuZW5jb2RpbmcmJjA9PT1lLmxhbmd1YWdlfWZ1bmN0aW9uIEIoZSl7cmV0dXJuIDM9PT1lLnBsYXRmb3JtJiYxPT09ZS5lbmNvZGluZyYmMTAzMz09PWUubGFuZ3VhZ2V9ZnVuY3Rpb24gTChlLHQpe2xldCByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDE6cmV0dXJuIHQuY2hhckNvZGVBdCgwKTtjYXNlIDI6cmV0dXJuIHQuY2hhckNvZGVBdCgwKTw8OHx0LmNoYXJDb2RlQXQoMSl9Y29uc3QgYT0iVW5zdXBwb3J0ZWQgQ0lEIHN0cmluZyAoY2hhckNvZGUgIi5jb25jYXQoZSwnKTogIicpLmNvbmNhdCh0LCciLicpO2lmKHIpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoYSk7cmV0dXJuKDAsbi53YXJuKShhKSx0fWZ1bmN0aW9uIF8oZSx0LHIsYSl7Y29uc3QgaT1PYmplY3QuY3JlYXRlKG51bGwpLHM9bmV3IE1hcCxvPVtdLGM9bmV3IFNldDtsZXQgbD0wLGg9dltsXVswXSx1PXZbbF1bMV07Zm9yKGxldCBmIGluIGUpe2Z8PTA7bGV0IGc9ZVtmXTtpZighdChnKSljb250aW51ZTtpZihoPnUpe2lmKGwrKyxsPj12Lmxlbmd0aCl7KDAsbi53YXJuKSgiUmFuIG91dCBvZiBzcGFjZSBpbiBmb250IHByaXZhdGUgdXNlIGFyZWEuIik7YnJlYWt9aD12W2xdWzBdLHU9dltsXVsxXX1jb25zdCBwPWgrKzswPT09ZyYmKGc9cik7bGV0IG09YS5nZXQoZik7InN0cmluZyI9PXR5cGVvZiBtJiYobT1tLmNvZGVQb2ludEF0KDApKSwhbXx8KGQ9bSx2WzBdWzBdPD1kJiZkPD12WzBdWzFdfHx2WzFdWzBdPD1kJiZkPD12WzFdWzFdKXx8Yy5oYXMoZyl8fChzLnNldChtLGcpLGMuYWRkKGcpKSxpW3BdPWcsb1tmXT1wfXZhciBkO3JldHVybnt0b0ZvbnRDaGFyOm8sY2hhckNvZGVUb0dseXBoSWQ6aSx0b1VuaWNvZGVFeHRyYU1hcDpzLG5leHRBdmFpbGFibGVGb250Q2hhckNvZGU6aH19ZnVuY3Rpb24gaihlLHQscil7Y29uc3QgYT1mdW5jdGlvbihlLHQscil7Y29uc3Qgbj1bXTtmb3IoY29uc3QgdCBpbiBlKWVbdF0+PXJ8fG4ucHVzaCh7Zm9udENoYXJDb2RlOjB8dCxnbHlwaElkOmVbdF19KTtpZih0KWZvcihjb25zdFtlLGFdb2YgdClhPj1yfHxuLnB1c2goe2ZvbnRDaGFyQ29kZTplLGdseXBoSWQ6YX0pOzA9PT1uLmxlbmd0aCYmbi5wdXNoKHtmb250Q2hhckNvZGU6MCxnbHlwaElkOjB9KSxuLnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZm9udENoYXJDb2RlLXQuZm9udENoYXJDb2RlfSkpO2NvbnN0IGE9W10saT1uLmxlbmd0aDtmb3IobGV0IGU9MDtlPGk7KXtjb25zdCB0PW5bZV0uZm9udENoYXJDb2RlLHI9W25bZV0uZ2x5cGhJZF07KytlO2xldCBzPXQ7Zm9yKDtlPGkmJnMrMT09PW5bZV0uZm9udENoYXJDb2RlJiYoci5wdXNoKG5bZV0uZ2x5cGhJZCksKytzLCsrZSw2NTUzNSE9PXMpOyk7YS5wdXNoKFt0LHMscl0pfXJldHVybiBhfShlLHQsciksaT1hLmF0KC0xKVsxXT42NTUzNT8yOjE7bGV0IHMsbyxjLGwsaD0iXDBcMCIrTShpKSsiXDADXDABIisoMCxuLnN0cmluZzMyKSg0KzgqaSk7Zm9yKHM9YS5sZW5ndGgtMTtzPj0wJiYhKGFbc11bMF08PTY1NTM1KTstLXMpO2NvbnN0IHU9cysxO2Fbc11bMF08NjU1MzUmJjY1NTM1PT09YVtzXVsxXSYmKGFbc11bMV09NjU1MzQpO2NvbnN0IGQ9YVtzXVsxXTw2NTUzNT8xOjAsZj11K2QsZz1tLk9wZW5UeXBlRmlsZUJ1aWxkZXIuZ2V0U2VhcmNoUGFyYW1zKGYsMik7bGV0IHAsYix5LHcsdj0iIix4PSIiLFM9IiIsQT0iIixrPSIiLEM9MDtmb3Iocz0wLG89dTtzPG87cysrKXtwPWFbc10sYj1wWzBdLHk9cFsxXSx2Kz1NKGIpLHgrPU0oeSksdz1wWzJdO2xldCBlPSEwO2ZvcihjPTEsbD13Lmxlbmd0aDtjPGw7KytjKWlmKHdbY10hPT13W2MtMV0rMSl7ZT0hMTticmVha31pZihlKVMrPU0od1swXS1iJjY1NTM1KSxBKz1NKDApO2Vsc2V7Y29uc3QgZT0yKihmLXMpKzIqQztmb3IoQys9eS1iKzEsUys9TSgwKSxBKz1NKGUpLGM9MCxsPXcubGVuZ3RoO2M8bDsrK2Mpays9TSh3W2NdKX19ZD4wJiYoeCs9IsO/w78iLHYrPSLDv8O/IixTKz0iXDABIixBKz0iXDBcMCIpO2NvbnN0IE89IlwwXDAiK00oMipmKStNKGcucmFuZ2UpK00oZy5lbnRyeSkrTShnLnJhbmdlU2hpZnQpK3grIlwwXDAiK3YrUytBK2s7bGV0IEY9IiIsST0iIjtpZihpPjEpe2ZvcihoKz0iXDADXDBcbiIrKDAsbi5zdHJpbmczMikoNCs4KmkrNCtPLmxlbmd0aCksRj0iIixzPTAsbz1hLmxlbmd0aDtzPG87cysrKXtwPWFbc10sYj1wWzBdLHc9cFsyXTtsZXQgZT13WzBdO2ZvcihjPTEsbD13Lmxlbmd0aDtjPGw7KytjKXdbY10hPT13W2MtMV0rMSYmKHk9cFswXStjLTEsRis9KDAsbi5zdHJpbmczMikoYikrKDAsbi5zdHJpbmczMikoeSkrKDAsbi5zdHJpbmczMikoZSksYj15KzEsZT13W2NdKTtGKz0oMCxuLnN0cmluZzMyKShiKSsoMCxuLnN0cmluZzMyKShwWzFdKSsoMCxuLnN0cmluZzMyKShlKX1JPSJcMFxmXDBcMCIrKDAsbi5zdHJpbmczMikoRi5sZW5ndGgrMTYpKyJcMFwwXDBcMCIrKDAsbi5zdHJpbmczMikoRi5sZW5ndGgvMTIpfXJldHVybiBoKyJcMAQiK00oTy5sZW5ndGgrNCkrTytJK0Z9ZnVuY3Rpb24gVShlLHQscil7cnx8KHI9e3VuaXRzUGVyRW06MCx5TWF4OjAseU1pbjowLGFzY2VudDowLGRlc2NlbnQ6MH0pO2xldCBhPTAsaT0wLG89MCxjPTAsbD1udWxsLGg9MCx1PS0xO2lmKHQpe2ZvcihsZXQgZSBpbiB0KWlmKGV8PTAsKGw+ZXx8IWwpJiYobD1lKSxoPGUmJihoPWUpLHU9KDAscy5nZXRVbmljb2RlUmFuZ2VGb3IpKGUsdSksdTwzMilhfD0xPDx1O2Vsc2UgaWYodTw2NClpfD0xPDx1LTMyO2Vsc2UgaWYodTw5NilvfD0xPDx1LTY0O2Vsc2V7aWYoISh1PDEyMykpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlVuaWNvZGUgcmFuZ2VzIEJpdHMgPiAxMjMgYXJlIHJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2FnZSIpO2N8PTE8PHUtOTZ9aD42NTUzNSYmKGg9NjU1MzUpfWVsc2UgbD0wLGg9MjU1O2NvbnN0IGQ9ZS5iYm94fHxbMCwwLDAsMF0sZj1yLnVuaXRzUGVyRW18fDEvKGUuZm9udE1hdHJpeHx8bi5GT05UX0lERU5USVRZX01BVFJJWClbMF0sZz1lLmFzY2VudFNjYWxlZD8xOmYveCxwPXIuYXNjZW50fHxNYXRoLnJvdW5kKGcqKGUuYXNjZW50fHxkWzNdKSk7bGV0IG09ci5kZXNjZW50fHxNYXRoLnJvdW5kKGcqKGUuZGVzY2VudHx8ZFsxXSkpO20+MCYmZS5kZXNjZW50PjAmJmRbMV08MCYmKG09LW0pO2NvbnN0IGI9ci55TWF4fHxwLHk9LXIueU1pbnx8LW07cmV0dXJuIlwwAwIkAcO0XDAFXDBcMALCigLCu1wwXDBcMMKMAsKKAsK7XDBcMAHDn1x4MDAxAQJcMFwwXDBcMAYiK1N0cmluZy5mcm9tQ2hhckNvZGUoZS5maXhlZFBpdGNoPzk6MCkrIlwwXDBcMFwwXDBcMCIrKDAsbi5zdHJpbmczMikoYSkrKDAsbi5zdHJpbmczMikoaSkrKDAsbi5zdHJpbmczMikobykrKDAsbi5zdHJpbmczMikoYykrIioyMSoiK00oZS5pdGFsaWNBbmdsZT8xOjApK00obHx8ZS5maXJzdENoYXIpK00oaHx8ZS5sYXN0Q2hhcikrTShwKStNKG0pKyJcMGQiK00oYikrTSh5KSsiXDBcMFwwXDBcMFwwXDBcMCIrTShlLnhIZWlnaHQpK00oZS5jYXBIZWlnaHQpK00oMCkrTShsfHxlLmZpcnN0Q2hhcikrIlwwAyJ9ZnVuY3Rpb24gJChlKXtjb25zdCB0PU1hdGguZmxvb3IoNjU1MzYqZS5pdGFsaWNBbmdsZSk7cmV0dXJuIlwwA1wwXDAiKygwLG4uc3RyaW5nMzIpKHQpKyJcMFwwXDBcMCIrKDAsbi5zdHJpbmczMikoZS5maXhlZFBpdGNoPzE6MCkrIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIn1mdW5jdGlvbiBYKGUpe3JldHVybiBlLnJlcGxhY2VBbGwoL1teXHgyMS1ceDdFXXxbW1xdKCl7fTw+LyVdL2csIiIpLnNsaWNlKDAsNjMpfWZ1bmN0aW9uIEgoZSx0KXt0fHwodD1bW10sW11dKTtjb25zdCByPVt0WzBdWzBdfHwiT3JpZ2luYWwgbGljZW5jZSIsdFswXVsxXXx8ZSx0WzBdWzJdfHwiVW5rbm93biIsdFswXVszXXx8InVuaXF1ZUlEIix0WzBdWzRdfHxlLHRbMF1bNV18fCJWZXJzaW9uIDAuMTEiLHRbMF1bNl18fFgoZSksdFswXVs3XXx8IlVua25vd24iLHRbMF1bOF18fCJVbmtub3duIix0WzBdWzldfHwiVW5rbm93biJdLG49W107bGV0IGEsaSxzLG8sYztmb3IoYT0wLGk9ci5sZW5ndGg7YTxpO2ErKyl7Yz10WzFdW2FdfHxyW2FdO2NvbnN0IGU9W107Zm9yKHM9MCxvPWMubGVuZ3RoO3M8bztzKyspZS5wdXNoKE0oYy5jaGFyQ29kZUF0KHMpKSk7bi5wdXNoKGUuam9pbigiIikpfWNvbnN0IGw9W3Isbl0saD1bIlwwASIsIlwwAyJdLHU9WyJcMFwwIiwiXDABIl0sZD1bIlwwXDAiLCIEXHQiXSxmPXIubGVuZ3RoKmgubGVuZ3RoO2xldCBnPSJcMFwwIitNKGYpK00oMTIqZis2KSxwPTA7Zm9yKGE9MCxpPWgubGVuZ3RoO2E8aTthKyspe2NvbnN0IGU9bFthXTtmb3Iocz0wLG89ZS5sZW5ndGg7czxvO3MrKyljPWVbc10sZys9aFthXSt1W2FdK2RbYV0rTShzKStNKGMubGVuZ3RoKStNKHApLHArPWMubGVuZ3RofXJldHVybiBnKz1yLmpvaW4oIiIpK24uam9pbigiIiksZ310LkZvbnQ9Y2xhc3N7Y29uc3RydWN0b3IoZSx0LHIpe3ZhciBhO3RoaXMubmFtZT1lLHRoaXMucHNOYW1lPW51bGwsdGhpcy5taW1ldHlwZT1udWxsLHRoaXMuZGlzYWJsZUZvbnRGYWNlPSExLHRoaXMubG9hZGVkTmFtZT1yLmxvYWRlZE5hbWUsdGhpcy5pc1R5cGUzRm9udD1yLmlzVHlwZTNGb250LHRoaXMubWlzc2luZ0ZpbGU9ITEsdGhpcy5jc3NGb250SW5mbz1yLmNzc0ZvbnRJbmZvLHRoaXMuX2NoYXJzQ2FjaGU9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9nbHlwaENhY2hlPU9iamVjdC5jcmVhdGUobnVsbCk7bGV0IHM9ISEoci5mbGFncyZpLkZvbnRGbGFncy5TZXJpZik7aWYoIXMmJiFyLmlzU2ltdWxhdGVkRmxhZ3Mpe2NvbnN0IHQ9ZS5yZXBsYWNlQWxsKC9bLF9dL2csIi0iKS5zcGxpdCgiLSIpWzBdLHI9KDAsbC5nZXRTZXJpZkZvbnRzKSgpO2Zvcihjb25zdCBlIG9mIHQuc3BsaXQoIisiKSlpZihyW2VdKXtzPSEwO2JyZWFrfX10aGlzLmlzU2VyaWZGb250PXMsdGhpcy5pc1N5bWJvbGljRm9udD0hIShyLmZsYWdzJmkuRm9udEZsYWdzLlN5bWJvbGljKSx0aGlzLmlzTW9ub3NwYWNlPSEhKHIuZmxhZ3MmaS5Gb250RmxhZ3MuRml4ZWRQaXRjaCk7bGV0e3R5cGU6byxzdWJ0eXBlOmN9PXI7dGhpcy50eXBlPW8sdGhpcy5zdWJ0eXBlPWMsdGhpcy5zeXN0ZW1Gb250SW5mbz1yLnN5c3RlbUZvbnRJbmZvO2NvbnN0IGg9ZS5tYXRjaCgvXkludmFsaWRQREZqc0ZvbnRfKC4qKV9cZCskLyk7aWYodGhpcy5pc0ludmFsaWRQREZqc0ZvbnQ9ISFoLHRoaXMuaXNJbnZhbGlkUERGanNGb250P3RoaXMuZmFsbGJhY2tOYW1lPWhbMV06dGhpcy5pc01vbm9zcGFjZT90aGlzLmZhbGxiYWNrTmFtZT0ibW9ub3NwYWNlIjp0aGlzLmlzU2VyaWZGb250P3RoaXMuZmFsbGJhY2tOYW1lPSJzZXJpZiI6dGhpcy5mYWxsYmFja05hbWU9InNhbnMtc2VyaWYiLG51bGwhPT0oYT10aGlzLnN5c3RlbUZvbnRJbmZvKSYmdm9pZCAwIT09YSYmYS5ndWVzc0ZhbGxiYWNrJiYodGhpcy5zeXN0ZW1Gb250SW5mby5ndWVzc0ZhbGxiYWNrPSExLHRoaXMuc3lzdGVtRm9udEluZm8uY3NzKz0iLCIuY29uY2F0KHRoaXMuZmFsbGJhY2tOYW1lKSksdGhpcy5kaWZmZXJlbmNlcz1yLmRpZmZlcmVuY2VzLHRoaXMud2lkdGhzPXIud2lkdGhzLHRoaXMuZGVmYXVsdFdpZHRoPXIuZGVmYXVsdFdpZHRoLHRoaXMuY29tcG9zaXRlPXIuY29tcG9zaXRlLHRoaXMuY01hcD1yLmNNYXAsdGhpcy5jYXBIZWlnaHQ9ci5jYXBIZWlnaHQveCx0aGlzLmFzY2VudD1yLmFzY2VudC94LHRoaXMuZGVzY2VudD1yLmRlc2NlbnQveCx0aGlzLmxpbmVIZWlnaHQ9dGhpcy5hc2NlbnQtdGhpcy5kZXNjZW50LHRoaXMuZm9udE1hdHJpeD1yLmZvbnRNYXRyaXgsdGhpcy5iYm94PXIuYmJveCx0aGlzLmRlZmF1bHRFbmNvZGluZz1yLmRlZmF1bHRFbmNvZGluZyx0aGlzLnRvVW5pY29kZT1yLnRvVW5pY29kZSx0aGlzLnRvRm9udENoYXI9W10sIlR5cGUzIj09PXIudHlwZSl7Zm9yKGxldCBlPTA7ZTwyNTY7ZSsrKXRoaXMudG9Gb250Q2hhcltlXT10aGlzLmRpZmZlcmVuY2VzW2VdfHxyLmRlZmF1bHRFbmNvZGluZ1tlXTtyZXR1cm59aWYodGhpcy5jaWRFbmNvZGluZz1yLmNpZEVuY29kaW5nfHwiIix0aGlzLnZlcnRpY2FsPSEhci52ZXJ0aWNhbCx0aGlzLnZlcnRpY2FsJiYodGhpcy52bWV0cmljcz1yLnZtZXRyaWNzLHRoaXMuZGVmYXVsdFZNZXRyaWNzPXIuZGVmYXVsdFZNZXRyaWNzKSwhdHx8dC5pc0VtcHR5KXJldHVybiB0JiYoMCxuLndhcm4pKCdGb250IGZpbGUgaXMgZW1wdHkgaW4gIicrZSsnIiAoJyt0aGlzLmxvYWRlZE5hbWUrIikiKSx2b2lkIHRoaXMuZmFsbGJhY2tUb1N5c3RlbUZvbnQocik7bGV0IGQ7W28sY109ZnVuY3Rpb24oZSx0KXtsZXQgcixhLHt0eXBlOmksc3VidHlwZTpzLGNvbXBvc2l0ZTpvfT10O3JldHVybiBmdW5jdGlvbihlKXtjb25zdCB0PWUucGVla0J5dGVzKDQpO3JldHVybiA2NTUzNj09PSgwLGIucmVhZFVpbnQzMikodCwwKXx8InRydWUiPT09KDAsbi5ieXRlc1RvU3RyaW5nKSh0KX0oZSl8fFAoZSk/cj1vPyJDSURGb250VHlwZTIiOiJUcnVlVHlwZSI6ZnVuY3Rpb24oZSl7Y29uc3QgdD1lLnBlZWtCeXRlcyg0KTtyZXR1cm4iT1RUTyI9PT0oMCxuLmJ5dGVzVG9TdHJpbmcpKHQpfShlKT9yPW8/IkNJREZvbnRUeXBlMiI6Ik9wZW5UeXBlIjpmdW5jdGlvbihlKXtjb25zdCB0PWUucGVla0J5dGVzKDIpO3JldHVybiAzNz09PXRbMF0mJjMzPT09dFsxXXx8MTI4PT09dFswXSYmMT09PXRbMV19KGUpP3I9bz8iQ0lERm9udFR5cGUwIjoiTU1UeXBlMSI9PT1pPyJNTVR5cGUxIjoiVHlwZTEiOmZ1bmN0aW9uKGUpe2NvbnN0IHQ9ZS5wZWVrQnl0ZXMoNCk7cmV0dXJuIHRbMF0+PTEmJnRbM10+PTEmJnRbM108PTR9KGUpP28/KHI9IkNJREZvbnRUeXBlMCIsYT0iQ0lERm9udFR5cGUwQyIpOihyPSJNTVR5cGUxIj09PWk/Ik1NVHlwZTEiOiJUeXBlMSIsYT0iVHlwZTFDIik6KCgwLG4ud2FybikoImdldEZvbnRGaWxlVHlwZTogVW5hYmxlIHRvIGRldGVjdCBjb3JyZWN0IGZvbnQgZmlsZSBUeXBlL1N1YnR5cGUuIikscj1pLGE9cyksW3IsYV19KHQsciksbz09PXRoaXMudHlwZSYmYz09PXRoaXMuc3VidHlwZXx8KDAsbi5pbmZvKSgiSW5jb25zaXN0ZW50IGZvbnQgZmlsZSBUeXBlL1N1YlR5cGUsIGV4cGVjdGVkOiAiLmNvbmNhdCh0aGlzLnR5cGUsIi8iKS5jb25jYXQodGhpcy5zdWJ0eXBlLCIgYnV0IGZvdW5kOiAiKS5jb25jYXQobywiLyIpLmNvbmNhdChjLCIuIikpO3RyeXtzd2l0Y2gobyl7Y2FzZSJNTVR5cGUxIjooMCxuLmluZm8pKCJNTVR5cGUxIGZvbnQgKCIrZSsiKSwgZmFsbGluZyBiYWNrIHRvIFR5cGUxLiIpO2Nhc2UiVHlwZTEiOmNhc2UiQ0lERm9udFR5cGUwIjp0aGlzLm1pbWV0eXBlPSJmb250L29wZW50eXBlIjtjb25zdCBhPSJUeXBlMUMiPT09Y3x8IkNJREZvbnRUeXBlMEMiPT09Yz9uZXcgdS5DRkZGb250KHQscik6bmV3IHcuVHlwZTFGb250KGUsdCxyKTtrKHIpLGQ9dGhpcy5jb252ZXJ0KGUsYSxyKTticmVhaztjYXNlIk9wZW5UeXBlIjpjYXNlIlRydWVUeXBlIjpjYXNlIkNJREZvbnRUeXBlMiI6dGhpcy5taW1ldHlwZT0iZm9udC9vcGVudHlwZSIsZD10aGlzLmNoZWNrQW5kUmVwYWlyKGUsdCxyKSx0aGlzLmlzT3BlblR5cGUmJihrKHIpLG89Ik9wZW5UeXBlIik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiRm9udCAiLmNvbmNhdChvLCIgaXMgbm90IHN1cHBvcnRlZCIpKX19Y2F0Y2goZSl7cmV0dXJuKDAsbi53YXJuKShlKSx2b2lkIHRoaXMuZmFsbGJhY2tUb1N5c3RlbUZvbnQocil9QyhyKSx0aGlzLmRhdGE9ZCx0aGlzLnR5cGU9byx0aGlzLnN1YnR5cGU9Yyx0aGlzLmZvbnRNYXRyaXg9ci5mb250TWF0cml4LHRoaXMud2lkdGhzPXIud2lkdGhzLHRoaXMuZGVmYXVsdFdpZHRoPXIuZGVmYXVsdFdpZHRoLHRoaXMudG9Vbmljb2RlPXIudG9Vbmljb2RlLHRoaXMuc2VhY01hcD1yLnNlYWNNYXB9Z2V0IHJlbmRlcmVyKCl7Y29uc3QgZT1kLkZvbnRSZW5kZXJlckZhY3RvcnkuY3JlYXRlKHRoaXMsaS5TRUFDX0FOQUxZU0lTX0VOQUJMRUQpO3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJyZW5kZXJlciIsZSl9ZXhwb3J0RGF0YSgpe2NvbnN0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXT9bLi4uUywuLi5BXTpTLHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtsZXQgcixuO2ZvcihyIG9mIGUpbj10aGlzW3JdLHZvaWQgMCE9PW4mJih0W3JdPW4pO3JldHVybiB0fWZhbGxiYWNrVG9TeXN0ZW1Gb250KGUpe3RoaXMubWlzc2luZ0ZpbGU9ITA7Y29uc3R7bmFtZTp0LHR5cGU6cn09dGhpcztsZXQgbj0oMCxpLm5vcm1hbGl6ZUZvbnROYW1lKSh0KTtjb25zdCBhPSgwLGwuZ2V0U3RkRm9udE1hcCkoKSx1PSgwLGwuZ2V0Tm9uU3RkRm9udE1hcCkoKSxkPSEhYVtuXSxnPSEoIXVbbl18fCFhW3Vbbl1dKTtuPWFbbl18fHVbbl18fG47Y29uc3QgcD0oMCxmLmdldEZvbnRCYXNpY01ldHJpY3MpKClbbl07cCYmKGlzTmFOKHRoaXMuYXNjZW50KSYmKHRoaXMuYXNjZW50PXAuYXNjZW50L3gpLGlzTmFOKHRoaXMuZGVzY2VudCkmJih0aGlzLmRlc2NlbnQ9cC5kZXNjZW50L3gpLGlzTmFOKHRoaXMuY2FwSGVpZ2h0KSYmKHRoaXMuY2FwSGVpZ2h0PXAuY2FwSGVpZ2h0L3gpKSx0aGlzLmJvbGQ9L2JvbGQvZ2kudGVzdChuKSx0aGlzLml0YWxpYz0vb2JsaXF1ZXxpdGFsaWMvZ2kudGVzdChuKSx0aGlzLmJsYWNrPS9CbGFjay9nLnRlc3QodCk7Y29uc3QgbT0vTmFycm93L2cudGVzdCh0KTtpZih0aGlzLnJlbWVhc3VyZT0oIWR8fG0pJiZPYmplY3Qua2V5cyh0aGlzLndpZHRocykubGVuZ3RoPjAsKGR8fGcpJiYiQ0lERm9udFR5cGUyIj09PXImJnRoaXMuY2lkRW5jb2Rpbmcuc3RhcnRzV2l0aCgiSWRlbnRpdHktIikpe2NvbnN0IHI9ZS5jaWRUb0dpZE1hcCxuPVtdO2lmKFIobiwoMCxsLmdldEdseXBoTWFwRm9yU3RhbmRhcmRGb250cykoKSksL0FyaWFsLT9CbGFjay9pLnRlc3QodCk/UihuLCgwLGwuZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JBcmlhbEJsYWNrKSgpKTovQ2FsaWJyaS9pLnRlc3QodCkmJlIobiwoMCxsLmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQ2FsaWJyaSkoKSkscil7Zm9yKGNvbnN0IGUgaW4gbil7Y29uc3QgdD1uW2VdO3ZvaWQgMCE9PXJbdF0mJihuWytlXT1yW3RdKX1yLmxlbmd0aCE9PXRoaXMudG9Vbmljb2RlLmxlbmd0aCYmZS5oYXNJbmNsdWRlZFRvVW5pY29kZU1hcCYmdGhpcy50b1VuaWNvZGUgaW5zdGFuY2VvZiBoLklkZW50aXR5VG9Vbmljb2RlTWFwJiZ0aGlzLnRvVW5pY29kZS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe2NvbnN0IGE9bltlXTt2b2lkIDA9PT1yW2FdJiYoblsrZV09dCl9KSl9dGhpcy50b1VuaWNvZGUgaW5zdGFuY2VvZiBoLklkZW50aXR5VG9Vbmljb2RlTWFwfHx0aGlzLnRvVW5pY29kZS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe25bK2VdPXR9KSksdGhpcy50b0ZvbnRDaGFyPW4sdGhpcy50b1VuaWNvZGU9bmV3IGguVG9Vbmljb2RlTWFwKG4pfWVsc2UgaWYoL1N5bWJvbC9pLnRlc3QobikpdGhpcy50b0ZvbnRDaGFyPU4oYy5TeW1ib2xTZXRFbmNvZGluZywoMCxvLmdldEdseXBoc1VuaWNvZGUpKCksdGhpcy5kaWZmZXJlbmNlcyk7ZWxzZSBpZigvRGluZ2JhdHMvaS50ZXN0KG4pKXRoaXMudG9Gb250Q2hhcj1OKGMuWmFwZkRpbmdiYXRzRW5jb2RpbmcsKDAsby5nZXREaW5nYmF0c0dseXBoc1VuaWNvZGUpKCksdGhpcy5kaWZmZXJlbmNlcyk7ZWxzZSBpZihkKXtjb25zdCBlPU4odGhpcy5kZWZhdWx0RW5jb2RpbmcsKDAsby5nZXRHbHlwaHNVbmljb2RlKSgpLHRoaXMuZGlmZmVyZW5jZXMpOyJDSURGb250VHlwZTIiIT09cnx8dGhpcy5jaWRFbmNvZGluZy5zdGFydHNXaXRoKCJJZGVudGl0eS0iKXx8dGhpcy50b1VuaWNvZGUgaW5zdGFuY2VvZiBoLklkZW50aXR5VG9Vbmljb2RlTWFwfHx0aGlzLnRvVW5pY29kZS5mb3JFYWNoKChmdW5jdGlvbih0LHIpe2VbK3RdPXJ9KSksdGhpcy50b0ZvbnRDaGFyPWV9ZWxzZXtjb25zdCBlPSgwLG8uZ2V0R2x5cGhzVW5pY29kZSkoKSxyPVtdO3RoaXMudG9Vbmljb2RlLmZvckVhY2goKCh0LG4pPT57aWYoIXRoaXMuY29tcG9zaXRlKXtjb25zdCByPXRoaXMuZGlmZmVyZW5jZXNbdF18fHRoaXMuZGVmYXVsdEVuY29kaW5nW3RdLGE9KDAscy5nZXRVbmljb2RlRm9yR2x5cGgpKHIsZSk7LTEhPT1hJiYobj1hKX1yWyt0XT1ufSkpLHRoaXMuY29tcG9zaXRlJiZ0aGlzLnRvVW5pY29kZSBpbnN0YW5jZW9mIGguSWRlbnRpdHlUb1VuaWNvZGVNYXAmJi9UYWhvbWF8VmVyZGFuYS9pLnRlc3QodCkmJlIociwoMCxsLmdldEdseXBoTWFwRm9yU3RhbmRhcmRGb250cykoKSksdGhpcy50b0ZvbnRDaGFyPXJ9QyhlKSx0aGlzLmxvYWRlZE5hbWU9bi5zcGxpdCgiLSIpWzBdfWNoZWNrQW5kUmVwYWlyKGUsdCxyKXt2YXIgcyxsO2NvbnN0IGQ9WyJPUy8yIiwiY21hcCIsImhlYWQiLCJoaGVhIiwiaG10eCIsIm1heHAiLCJuYW1lIiwicG9zdCIsImxvY2EiLCJnbHlmIiwiZnBnbSIsInByZXAiLCJjdnQgIiwiQ0ZGICJdO2Z1bmN0aW9uIGYoZSx0KXtjb25zdCByPU9iamVjdC5jcmVhdGUobnVsbCk7clsiT1MvMiJdPW51bGwsci5jbWFwPW51bGwsci5oZWFkPW51bGwsci5oaGVhPW51bGwsci5obXR4PW51bGwsci5tYXhwPW51bGwsci5uYW1lPW51bGwsci5wb3N0PW51bGw7Zm9yKGxldCBuPTA7bjx0O24rKyl7Y29uc3QgdD1iKGUpO2QuaW5jbHVkZXModC50YWcpJiYwIT09dC5sZW5ndGgmJihyW3QudGFnXT10KX1yZXR1cm4gcn1mdW5jdGlvbiBiKGUpe2NvbnN0IHQ9ZS5nZXRTdHJpbmcoNCkscj1lLmdldEludDMyKCk+Pj4wLG49ZS5nZXRJbnQzMigpPj4+MCxhPWUuZ2V0SW50MzIoKT4+PjAsaT1lLnBvcztlLnBvcz1lLnN0YXJ0fHwwLGUuc2tpcChuKTtjb25zdCBzPWUuZ2V0Qnl0ZXMoYSk7cmV0dXJuIGUucG9zPWksImhlYWQiPT09dCYmKHNbOF09c1s5XT1zWzEwXT1zWzExXT0wLHNbMTddfD0zMikse3RhZzp0LGNoZWNrc3VtOnIsbGVuZ3RoOmEsb2Zmc2V0Om4sZGF0YTpzfX1mdW5jdGlvbiB3KGUpe3JldHVybnt2ZXJzaW9uOmUuZ2V0U3RyaW5nKDQpLG51bVRhYmxlczplLmdldFVpbnQxNigpLHNlYXJjaFJhbmdlOmUuZ2V0VWludDE2KCksZW50cnlTZWxlY3RvcjplLmdldFVpbnQxNigpLHJhbmdlU2hpZnQ6ZS5nZXRVaW50MTYoKX19ZnVuY3Rpb24gdihlLHQscixuLGEsaSl7Y29uc3Qgcz17bGVuZ3RoOjAsc2l6ZU9mSW5zdHJ1Y3Rpb25zOjB9O2lmKHQ8MHx8dD49ZS5sZW5ndGh8fHI+ZS5sZW5ndGh8fHItdDw9MTIpcmV0dXJuIHM7Y29uc3Qgbz1lLnN1YmFycmF5KHQsciksYz1UKG9bMl0sb1szXSksbD1UKG9bNF0sb1s1XSksaD1UKG9bNl0sb1s3XSksdT1UKG9bOF0sb1s5XSk7Yz5oJiYoSShvLDIsaCksSShvLDYsYykpLGw+dSYmKEkobyw0LHUpLEkobyw4LGwpKTtjb25zdCBkPVQob1swXSxvWzFdKTtpZihkPDApcmV0dXJuIGQ8LTF8fChuLnNldChvLGEpLHMubGVuZ3RoPW8ubGVuZ3RoKSxzO2xldCBmLGc9MTAscD0wO2ZvcihmPTA7ZjxkO2YrKylwPTErKG9bZ108PDh8b1tnKzFdKSxnKz0yO2NvbnN0IG09ZyxiPW9bZ108PDh8b1tnKzFdO3Muc2l6ZU9mSW5zdHJ1Y3Rpb25zPWIsZys9MitiO2NvbnN0IHk9ZztsZXQgdz0wO2ZvcihmPTA7ZjxwO2YrKyl7Y29uc3QgZT1vW2crK107MTkyJmUmJihvW2ctMV09NjMmZSk7bGV0IHQ9MjsyJmU/dD0xOjE2JmUmJih0PTApO2xldCByPTI7NCZlP3I9MTozMiZlJiYocj0wKTtjb25zdCBuPXQrcjtpZih3Kz1uLDgmZSl7Y29uc3QgZT1vW2crK107MD09PWUmJihvW2ctMV1ePTgpLGYrPWUsdys9ZSpufX1pZigwPT09dylyZXR1cm4gcztsZXQgdj1nK3c7cmV0dXJuIHY+by5sZW5ndGg/czohaSYmYj4wPyhuLnNldChvLnN1YmFycmF5KDAsbSksYSksbi5zZXQoWzAsMF0sYSttKSxuLnNldChvLnN1YmFycmF5KHksdiksYSttKzIpLHYtPWIsby5sZW5ndGgtdj4zJiYodj12KzMmLTQpLHMubGVuZ3RoPXYscyk6by5sZW5ndGgtdj4zPyh2PXYrMyYtNCxuLnNldChvLnN1YmFycmF5KDAsdiksYSkscy5sZW5ndGg9dixzKToobi5zZXQobyxhKSxzLmxlbmd0aD1vLmxlbmd0aCxzKX1mdW5jdGlvbiB4KGUpe2NvbnN0IHI9KHQuc3RhcnR8fDApK2Uub2Zmc2V0O3QucG9zPXI7Y29uc3Qgbj1bW10sW11dLGE9W10saT1lLmxlbmd0aCxzPXIraTtpZigwIT09dC5nZXRVaW50MTYoKXx8aTw2KXJldHVybltuLGFdO2NvbnN0IG89dC5nZXRVaW50MTYoKSxjPXQuZ2V0VWludDE2KCk7bGV0IGwsaDtmb3IobD0wO2w8byYmdC5wb3MrMTI8PXM7bCsrKXtjb25zdCBlPXtwbGF0Zm9ybTp0LmdldFVpbnQxNigpLGVuY29kaW5nOnQuZ2V0VWludDE2KCksbGFuZ3VhZ2U6dC5nZXRVaW50MTYoKSxuYW1lOnQuZ2V0VWludDE2KCksbGVuZ3RoOnQuZ2V0VWludDE2KCksb2Zmc2V0OnQuZ2V0VWludDE2KCl9OyhEKGUpfHxCKGUpKSYmYS5wdXNoKGUpfWZvcihsPTAsaD1hLmxlbmd0aDtsPGg7bCsrKXtjb25zdCBlPWFbbF07aWYoZS5sZW5ndGg8PTApY29udGludWU7Y29uc3QgaT1yK2MrZS5vZmZzZXQ7aWYoaStlLmxlbmd0aD5zKWNvbnRpbnVlO3QucG9zPWk7Y29uc3Qgbz1lLm5hbWU7aWYoZS5lbmNvZGluZyl7bGV0IHI9IiI7Zm9yKGxldCBuPTAsYT1lLmxlbmd0aDtuPGE7bis9MilyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHQuZ2V0VWludDE2KCkpO25bMV1bb109cn1lbHNlIG5bMF1bb109dC5nZXRTdHJpbmcoZS5sZW5ndGgpfXJldHVybltuLGFdfWNvbnN0IFM9WzAsMCwwLDAsMCwwLDAsMCwtMiwtMiwtMiwtMiwwLDAsLTIsLTUsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsMCwwLC0xLDAsLTEsLTEsLTEsLTEsMSwtMSwtOTk5LDAsMSwwLC0xLC0yLDAsLTEsLTIsLTEsLTEsMCwtMSwtMSwwLDAsLTk5OSwtOTk5LC0xLC0xLC0xLC0xLC0yLC05OTksLTIsLTIsLTk5OSwwLC0yLC0yLDAsMCwtMiwwLC0yLDAsMCwwLC0yLC0xLC0xLDEsMSwwLDAsLTEsLTEsLTEsLTEsLTEsLTEsLTEsMCwwLC0xLDAsLTEsLTEsMCwtOTk5LC0xLC0xLC0xLC0xLC0xLC0xLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLC0yLC05OTksLTk5OSwtOTk5LC05OTksLTk5OSwtMSwtMSwtMiwtMiwwLDAsMCwwLC0xLC0xLC05OTksLTIsLTIsMCwwLC0xLC0yLC0yLDAsMCwwLC0xLC0xLC0xLC0yXTtmdW5jdGlvbiBBKGUsdCl7bGV0IHIsYSxpLHMsbyxjPWUuZGF0YSxsPTAsaD0wLHU9MDtjb25zdCBkPVtdLGY9W10sZz1bXTtsZXQgcD10LnRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9ucyxtPSExLGI9MCx5PTA7Zm9yKGxldCBlPWMubGVuZ3RoO2w8ZTspe2NvbnN0IGU9Y1tsKytdO2lmKDY0PT09ZSlpZihhPWNbbCsrXSxtfHx5KWwrPWE7ZWxzZSBmb3Iocj0wO3I8YTtyKyspZC5wdXNoKGNbbCsrXSk7ZWxzZSBpZig2NT09PWUpaWYoYT1jW2wrK10sbXx8eSlsKz0yKmE7ZWxzZSBmb3Iocj0wO3I8YTtyKyspaT1jW2wrK10sZC5wdXNoKGk8PDh8Y1tsKytdKTtlbHNlIGlmKDE3Nj09KDI0OCZlKSlpZihhPWUtMTc2KzEsbXx8eSlsKz1hO2Vsc2UgZm9yKHI9MDtyPGE7cisrKWQucHVzaChjW2wrK10pO2Vsc2UgaWYoMTg0PT0oMjQ4JmUpKWlmKGE9ZS0xODQrMSxtfHx5KWwrPTIqYTtlbHNlIGZvcihyPTA7cjxhO3IrKylpPWNbbCsrXSxkLnB1c2goaTw8OHxjW2wrK10pO2Vsc2UgaWYoNDMhPT1lfHxwKWlmKDQ0IT09ZXx8cCl7aWYoNDU9PT1lKWlmKG0pbT0hMSxoPWw7ZWxzZXtpZihvPWYucG9wKCksIW8pcmV0dXJuKDAsbi53YXJuKSgiVFQ6IEVOREYgYmFkIHN0YWNrIiksdm9pZCh0LmhpbnRzVmFsaWQ9ITEpO3M9Zy5wb3AoKSxjPW8uZGF0YSxsPW8uaSx0LmZ1bmN0aW9uc1N0YWNrRGVsdGFzW3NdPWQubGVuZ3RoLW8uc3RhY2tUb3B9ZWxzZSBpZigxMzc9PT1lKShtfHx5KSYmKCgwLG4ud2FybikoIlRUOiBuZXN0ZWQgSURFRnMgbm90IGFsbG93ZWQiKSxwPSEwKSxtPSEwLHU9bDtlbHNlIGlmKDg4PT09ZSkrK2I7ZWxzZSBpZigyNz09PWUpeT1iO2Vsc2UgaWYoODk9PT1lKXk9PT1iJiYoeT0wKSwtLWI7ZWxzZSBpZigyOD09PWUmJiFtJiYheSl7Y29uc3QgZT1kLmF0KC0xKTtlPjAmJihsKz1lLTEpfX1lbHNlKG18fHkpJiYoKDAsbi53YXJuKSgiVFQ6IG5lc3RlZCBGREVGcyBub3QgYWxsb3dlZCIpLHA9ITApLG09ITAsdT1sLHM9ZC5wb3AoKSx0LmZ1bmN0aW9uc0RlZmluZWRbc109e2RhdGE6YyxpOmx9O2Vsc2UgaWYoIW0mJiF5KWlmKHM9ZC5hdCgtMSksaXNOYU4ocykpKDAsbi5pbmZvKSgiVFQ6IENBTEwgZW1wdHkgc3RhY2sgKG9yIGludmFsaWQgZW50cnkpLiIpO2Vsc2UgaWYodC5mdW5jdGlvbnNVc2VkW3NdPSEwLHMgaW4gdC5mdW5jdGlvbnNTdGFja0RlbHRhcyl7Y29uc3QgZT1kLmxlbmd0aCt0LmZ1bmN0aW9uc1N0YWNrRGVsdGFzW3NdO2lmKGU8MClyZXR1cm4oMCxuLndhcm4pKCJUVDogQ0FMTCBpbnZhbGlkIGZ1bmN0aW9ucyBzdGFjayBkZWx0YS4iKSx2b2lkKHQuaGludHNWYWxpZD0hMSk7ZC5sZW5ndGg9ZX1lbHNlIGlmKHMgaW4gdC5mdW5jdGlvbnNEZWZpbmVkJiYhZy5pbmNsdWRlcyhzKSl7aWYoZi5wdXNoKHtkYXRhOmMsaTpsLHN0YWNrVG9wOmQubGVuZ3RoLTF9KSxnLnB1c2gocyksbz10LmZ1bmN0aW9uc0RlZmluZWRbc10sIW8pcmV0dXJuKDAsbi53YXJuKSgiVFQ6IENBTEwgbm9uLWV4aXN0ZW50IGZ1bmN0aW9uIiksdm9pZCh0LmhpbnRzVmFsaWQ9ITEpO2M9by5kYXRhLGw9by5pfWlmKCFtJiYheSl7bGV0IHQ9MDtmb3IoZTw9MTQyP3Q9U1tlXTplPj0xOTImJmU8PTIyMz90PS0xOmU+PTIyNCYmKHQ9LTIpLGU+PTExMyYmZTw9MTE3JiYoYT1kLnBvcCgpLGlzTmFOKGEpfHwodD0yKi1hKSk7dDwwJiZkLmxlbmd0aD4wOylkLnBvcCgpLHQrKztmb3IoO3Q+MDspZC5wdXNoKE5hTiksdC0tfX10LnRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9ucz1wO2NvbnN0IHc9W2NdO2w+Yy5sZW5ndGgmJncucHVzaChuZXcgVWludDhBcnJheShsLWMubGVuZ3RoKSksdT5oJiYoKDAsbi53YXJuKSgiVFQ6IGNvbXBsZW1lbnRpbmcgYSBtaXNzaW5nIGZ1bmN0aW9uIHRhaWwiKSx3LnB1c2gobmV3IFVpbnQ4QXJyYXkoWzM0LDQ1XSkpKSxmdW5jdGlvbihlLHQpe2lmKHQubGVuZ3RoPjEpe2xldCByLG4sYT0wO2ZvcihyPTAsbj10Lmxlbmd0aDtyPG47cisrKWErPXRbcl0ubGVuZ3RoO2E9YSszJi00O2NvbnN0IGk9bmV3IFVpbnQ4QXJyYXkoYSk7bGV0IHM9MDtmb3Iocj0wLG49dC5sZW5ndGg7cjxuO3IrKylpLnNldCh0W3JdLHMpLHMrPXRbcl0ubGVuZ3RoO2UuZGF0YT1pLGUubGVuZ3RoPWF9fShlLHcpfWxldCBDLE8sTSxFO2lmKFAodD1uZXcgeS5TdHJlYW0obmV3IFVpbnQ4QXJyYXkodC5nZXRCeXRlcygpKSkpKXtjb25zdCBlPWZ1bmN0aW9uKGUsdCl7Y29uc3R7bnVtRm9udHM6cixvZmZzZXRUYWJsZTphfT1mdW5jdGlvbihlKXtjb25zdCB0PWUuZ2V0U3RyaW5nKDQpOygwLG4uYXNzZXJ0KSgidHRjZiI9PT10LCJNdXN0IGJlIGEgVHJ1ZVR5cGUgQ29sbGVjdGlvbiBmb250LiIpO2NvbnN0IHI9ZS5nZXRVaW50MTYoKSxhPWUuZ2V0VWludDE2KCksaT1lLmdldEludDMyKCk+Pj4wLHM9W107Zm9yKGxldCB0PTA7dDxpO3QrKylzLnB1c2goZS5nZXRJbnQzMigpPj4+MCk7Y29uc3Qgbz17dHRjVGFnOnQsbWFqb3JWZXJzaW9uOnIsbWlub3JWZXJzaW9uOmEsbnVtRm9udHM6aSxvZmZzZXRUYWJsZTpzfTtzd2l0Y2gocil7Y2FzZSAxOnJldHVybiBvO2Nhc2UgMjpyZXR1cm4gby5kc2lnVGFnPWUuZ2V0SW50MzIoKT4+PjAsby5kc2lnTGVuZ3RoPWUuZ2V0SW50MzIoKT4+PjAsby5kc2lnT2Zmc2V0PWUuZ2V0SW50MzIoKT4+PjAsb310aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCBUcnVlVHlwZSBDb2xsZWN0aW9uIG1ham9yVmVyc2lvbjogIi5jb25jYXQociwiLiIpKX0oZSksaT10LnNwbGl0KCIrIik7bGV0IHM7Zm9yKGxldCBjPTA7YzxyO2MrKyl7ZS5wb3M9KGUuc3RhcnR8fDApK2FbY107Y29uc3Qgcj13KGUpLGw9ZihlLHIubnVtVGFibGVzKTtpZighbC5uYW1lKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCdUcnVlVHlwZSBDb2xsZWN0aW9uIGZvbnQgbXVzdCBjb250YWluIGEgIm5hbWUiIHRhYmxlLicpO2NvbnN0W2hdPXgobC5uYW1lKTtmb3IobGV0IGU9MCxuPWgubGVuZ3RoO2U8bjtlKyspZm9yKGxldCBuPTAsYT1oW2VdLmxlbmd0aDtuPGE7bisrKXt2YXIgbztjb25zdCBhPW51bGw9PT0obz1oW2VdW25dKXx8dm9pZCAwPT09bz92b2lkIDA6by5yZXBsYWNlQWxsKC9ccy9nLCIiKTtpZihhKXtpZihhPT09dClyZXR1cm57aGVhZGVyOnIsdGFibGVzOmx9O2lmKCEoaS5sZW5ndGg8MikpZm9yKGNvbnN0IGUgb2YgaSlhPT09ZSYmKHM9e25hbWU6ZSxoZWFkZXI6cix0YWJsZXM6bH0pfX19aWYocylyZXR1cm4oMCxuLndhcm4pKCdUcnVlVHlwZSBDb2xsZWN0aW9uIGRvZXMgbm90IGNvbnRhaW4gIicuY29uY2F0KHQsJyIgZm9udCwgZmFsbGluZyBiYWNrIHRvICInKS5jb25jYXQocy5uYW1lLCciIGZvbnQgaW5zdGVhZC4nKSkse2hlYWRlcjpzLmhlYWRlcix0YWJsZXM6cy50YWJsZXN9O3Rocm93IG5ldyBuLkZvcm1hdEVycm9yKCdUcnVlVHlwZSBDb2xsZWN0aW9uIGRvZXMgbm90IGNvbnRhaW4gIicuY29uY2F0KHQsJyIgZm9udC4nKSl9KHQsdGhpcy5uYW1lKTtDPWUuaGVhZGVyLE89ZS50YWJsZXN9ZWxzZSBDPXcodCksTz1mKHQsQy5udW1UYWJsZXMpO2NvbnN0IFI9IU9bIkNGRiAiXTtpZihSKXtpZighTy5sb2NhKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCdSZXF1aXJlZCAibG9jYSIgdGFibGUgaXMgbm90IGZvdW5kJyk7Ty5nbHlmfHwoKDAsbi53YXJuKSgnUmVxdWlyZWQgImdseWYiIHRhYmxlIGlzIG5vdCBmb3VuZCAtLSB0cnlpbmcgdG8gcmVjb3Zlci4nKSxPLmdseWY9e3RhZzoiZ2x5ZiIsZGF0YTpuZXcgVWludDhBcnJheSgwKX0pLHRoaXMuaXNPcGVuVHlwZT0hMX1lbHNle3ZhciBOO2NvbnN0IHQ9ci5jb21wb3NpdGUmJigobnVsbD09PShOPXIuY2lkVG9HaWRNYXApfHx2b2lkIDA9PT1OP3ZvaWQgMDpOLmxlbmd0aCk+MHx8IShyLmNNYXAgaW5zdGFuY2VvZiBwLklkZW50aXR5Q01hcCkpO2lmKCJPVFRPIj09PUMudmVyc2lvbiYmIXR8fCFPLmhlYWR8fCFPLmhoZWF8fCFPLm1heHB8fCFPLnBvc3QpcmV0dXJuIEU9bmV3IHkuU3RyZWFtKE9bIkNGRiAiXS5kYXRhKSxNPW5ldyB1LkNGRkZvbnQoRSxyKSxrKHIpLHRoaXMuY29udmVydChlLE0scik7ZGVsZXRlIE8uZ2x5ZixkZWxldGUgTy5sb2NhLGRlbGV0ZSBPLmZwZ20sZGVsZXRlIE8ucHJlcCxkZWxldGUgT1siY3Z0ICJdLHRoaXMuaXNPcGVuVHlwZT0hMH1pZighTy5tYXhwKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCdSZXF1aXJlZCAibWF4cCIgdGFibGUgaXMgbm90IGZvdW5kJyk7dC5wb3M9KHQuc3RhcnR8fDApK08ubWF4cC5vZmZzZXQ7Y29uc3QgWD10LmdldEludDMyKCkscT10LmdldFVpbnQxNigpO2lmKChudWxsPT09KHM9ci5zY2FsZUZhY3RvcnMpfHx2b2lkIDA9PT1zP3ZvaWQgMDpzLmxlbmd0aCk9PT1xJiZSKXtjb25zdHtzY2FsZUZhY3RvcnM6ZX09cix0PUYoTy5oZWFkLmRhdGFbNTBdLE8uaGVhZC5kYXRhWzUxXSksbj1uZXcgZy5HbHlmVGFibGUoe2dseWZUYWJsZTpPLmdseWYuZGF0YSxpc0dseXBoTG9jYXRpb25zTG9uZzp0LGxvY2FUYWJsZTpPLmxvY2EuZGF0YSxudW1HbHlwaHM6cX0pO24uc2NhbGUoZSk7Y29uc3R7Z2x5ZjphLGxvY2E6aSxpc0xvY2F0aW9uTG9uZzpzfT1uLndyaXRlKCk7Ty5nbHlmLmRhdGE9YSxPLmxvY2EuZGF0YT1pLHMhPT0hIXQmJihPLmhlYWQuZGF0YVs1MF09MCxPLmhlYWQuZGF0YVs1MV09cz8xOjApO2NvbnN0IG89Ty5obXR4LmRhdGE7Zm9yKGxldCB0PTA7dDxxO3QrKyl7Y29uc3Qgcj00KnQsbj1NYXRoLnJvdW5kKGVbdF0qRihvW3JdLG9bcisxXSkpO29bcl09bj4+OCYyNTUsb1tyKzFdPTI1NSZuLEkobyxyKzIsTWF0aC5yb3VuZChlW3RdKlQob1tyKzJdLG9bciszXSkpKX19bGV0IHo9cSsxLEc9ITA7ej42NTUzNSYmKEc9ITEsej1xLCgwLG4ud2FybikoIk5vdCBlbm91Z2ggc3BhY2UgaW4gZ2x5ZnMgdG8gZHVwbGljYXRlIGZpcnN0IGdseXBoLiIpKTtsZXQgVz0wLFY9MDtYPj02NTUzNiYmTy5tYXhwLmxlbmd0aD49MjImJih0LnBvcys9OCx0LmdldFVpbnQxNigpPjImJihPLm1heHAuZGF0YVsxNF09MCxPLm1heHAuZGF0YVsxNV09MiksdC5wb3MrPTQsVz10LmdldFVpbnQxNigpLHQucG9zKz00LFY9dC5nZXRVaW50MTYoKSksTy5tYXhwLmRhdGFbNF09ej4+OCxPLm1heHAuZGF0YVs1XT0yNTUmejtjb25zdCBLPWZ1bmN0aW9uKGUsdCxyLGEpe2NvbnN0IGk9e2Z1bmN0aW9uc0RlZmluZWQ6W10sZnVuY3Rpb25zVXNlZDpbXSxmdW5jdGlvbnNTdGFja0RlbHRhczpbXSx0b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnM6ITEsaGludHNWYWxpZDohMH07aWYoZSYmQShlLGkpLHQmJkEodCxpKSxlJiZmdW5jdGlvbihlLHQpe2lmKCFlLnRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9ucylpZihlLmZ1bmN0aW9uc0RlZmluZWQubGVuZ3RoPnQpKDAsbi53YXJuKSgiVFQ6IG1vcmUgZnVuY3Rpb25zIGRlZmluZWQgdGhhbiBleHBlY3RlZCIpLGUuaGludHNWYWxpZD0hMTtlbHNlIGZvcihsZXQgcj0wLGE9ZS5mdW5jdGlvbnNVc2VkLmxlbmd0aDtyPGE7cisrKXtpZihyPnQpcmV0dXJuKDAsbi53YXJuKSgiVFQ6IGludmFsaWQgZnVuY3Rpb24gaWQ6ICIrciksdm9pZChlLmhpbnRzVmFsaWQ9ITEpO2lmKGUuZnVuY3Rpb25zVXNlZFtyXSYmIWUuZnVuY3Rpb25zRGVmaW5lZFtyXSlyZXR1cm4oMCxuLndhcm4pKCJUVDogdW5kZWZpbmVkIGZ1bmN0aW9uOiAiK3IpLHZvaWQoZS5oaW50c1ZhbGlkPSExKX19KGksYSksciYmMSZyLmxlbmd0aCl7Y29uc3QgZT1uZXcgVWludDhBcnJheShyLmxlbmd0aCsxKTtlLnNldChyLmRhdGEpLHIuZGF0YT1lfXJldHVybiBpLmhpbnRzVmFsaWR9KE8uZnBnbSxPLnByZXAsT1siY3Z0ICJdLFcpO2lmKEt8fChkZWxldGUgTy5mcGdtLGRlbGV0ZSBPLnByZXAsZGVsZXRlIE9bImN2dCAiXSksZnVuY3Rpb24oZSx0LHIsYSxpLHMpe2lmKCF0KXJldHVybiB2b2lkKHImJihyLmRhdGE9bnVsbCkpO2UucG9zPShlLnN0YXJ0fHwwKSt0Lm9mZnNldCxlLnBvcys9NCxlLnBvcys9MixlLnBvcys9MixlLnBvcys9MixlLnBvcys9MixlLnBvcys9MixlLnBvcys9MixlLnBvcys9MixlLnBvcys9MixlLnBvcys9Mjtjb25zdCBvPWUuZ2V0VWludDE2KCk7ZS5wb3MrPTgsZS5wb3MrPTI7bGV0IGM9ZS5nZXRVaW50MTYoKTswIT09byYmKDImRihhLmRhdGFbNDRdLGEuZGF0YVs0NV0pfHwodC5kYXRhWzIyXT0wLHQuZGF0YVsyM109MCkpLGM+aSYmKCgwLG4uaW5mbykoIlRoZSBudW1PZk1ldHJpY3MgKCIuY29uY2F0KGMsIikgc2hvdWxkIG5vdCBiZSBncmVhdGVyIHRoYW4gdGhlIG51bUdseXBocyAoIikuY29uY2F0KGksIikuIikpLGM9aSx0LmRhdGFbMzRdPSg2NTI4MCZjKT4+OCx0LmRhdGFbMzVdPTI1NSZjKTtjb25zdCBsPWktYy0oci5sZW5ndGgtNCpjPj4xKTtpZihsPjApe2NvbnN0IGU9bmV3IFVpbnQ4QXJyYXkoci5sZW5ndGgrMipsKTtlLnNldChyLmRhdGEpLHMmJihlW3IubGVuZ3RoXT1yLmRhdGFbMl0sZVtyLmxlbmd0aCsxXT1yLmRhdGFbM10pLHIuZGF0YT1lfX0odCxPLmhoZWEsTy5obXR4LE8uaGVhZCx6LEcpLCFPLmhlYWQpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoJ1JlcXVpcmVkICJoZWFkIiB0YWJsZSBpcyBub3QgZm91bmQnKTshZnVuY3Rpb24oZSx0LHIpe2NvbnN0IGE9ZS5kYXRhLGk9ZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuKGU8PDI0KSsodDw8MTYpKyhyPDw4KStufShhWzBdLGFbMV0sYVsyXSxhWzNdKTtpPj4xNiE9MSYmKCgwLG4uaW5mbykoIkF0dGVtcHRpbmcgdG8gZml4IGludmFsaWQgdmVyc2lvbiBpbiBoZWFkIHRhYmxlOiAiK2kpLGFbMF09MCxhWzFdPTEsYVsyXT0wLGFbM109MCk7Y29uc3Qgcz1GKGFbNTBdLGFbNTFdKTtpZihzPDB8fHM+MSl7KDAsbi5pbmZvKSgiQXR0ZW1wdGluZyB0byBmaXggaW52YWxpZCBpbmRleFRvTG9jRm9ybWF0IGluIGhlYWQgdGFibGU6ICIrcyk7Y29uc3QgZT10KzE7aWYocj09PWU8PDEpYVs1MF09MCxhWzUxXT0wO2Vsc2V7aWYociE9PWU8PDIpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkNvdWxkIG5vdCBmaXggaW5kZXhUb0xvY0Zvcm1hdDogIitzKTthWzUwXT0wLGFbNTFdPTF9fX0oTy5oZWFkLHEsUj9PLmxvY2EubGVuZ3RoOjApO2xldCBZPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoUil7Y29uc3QgZT1GKE8uaGVhZC5kYXRhWzUwXSxPLmhlYWQuZGF0YVs1MV0pLHQ9ZnVuY3Rpb24oZSx0LHIsbixhLGkscyl7bGV0IG8sYyxsO24/KG89NCxjPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF08PDI0fGVbdCsxXTw8MTZ8ZVt0KzJdPDw4fGVbdCszXX0sbD1mdW5jdGlvbihlLHQscil7ZVt0XT1yPj4+MjQmMjU1LGVbdCsxXT1yPj4xNiYyNTUsZVt0KzJdPXI+PjgmMjU1LGVbdCszXT0yNTUmcn0pOihvPTIsYz1mdW5jdGlvbihlLHQpe3JldHVybiBlW3RdPDw5fGVbdCsxXTw8MX0sbD1mdW5jdGlvbihlLHQscil7ZVt0XT1yPj45JjI1NSxlW3QrMV09cj4+MSYyNTV9KTtjb25zdCBoPWk/cisxOnIsdT1vKigxK2gpLGQ9bmV3IFVpbnQ4QXJyYXkodSk7ZC5zZXQoZS5kYXRhLnN1YmFycmF5KDAsdSkpLGUuZGF0YT1kO2NvbnN0IGY9dC5kYXRhLGc9Zi5sZW5ndGgscD1uZXcgVWludDhBcnJheShnKTtsZXQgbSxiO2NvbnN0IHk9W107Zm9yKG09MCxiPTA7bTxyKzE7bSsrLGIrPW8pe2xldCBlPWMoZCxiKTtlPmcmJihlPWcpLHkucHVzaCh7aW5kZXg6bSxvZmZzZXQ6ZSxlbmRPZmZzZXQ6MH0pfWZvcih5LnNvcnQoKChlLHQpPT5lLm9mZnNldC10Lm9mZnNldCkpLG09MDttPHI7bSsrKXlbbV0uZW5kT2Zmc2V0PXlbbSsxXS5vZmZzZXQ7Zm9yKHkuc29ydCgoKGUsdCk9PmUuaW5kZXgtdC5pbmRleCkpLG09MDttPHI7bSsrKXtjb25zdHtvZmZzZXQ6ZSxlbmRPZmZzZXQ6dH09eVttXTtpZigwIT09ZXx8MCE9PXQpYnJlYWs7Y29uc3Qgcj15W20rMV0ub2Zmc2V0O2lmKDAhPT1yKXt5W21dLmVuZE9mZnNldD1yO2JyZWFrfX1jb25zdCB3PU9iamVjdC5jcmVhdGUobnVsbCk7bGV0IHg9MDtmb3IobChkLDAseCksbT0wLGI9bzttPHI7bSsrLGIrPW8pe2NvbnN0IGU9dihmLHlbbV0ub2Zmc2V0LHlbbV0uZW5kT2Zmc2V0LHAseCxhKSx0PWUubGVuZ3RoOzA9PT10JiYod1ttXT0hMCksZS5zaXplT2ZJbnN0cnVjdGlvbnM+cyYmKHM9ZS5zaXplT2ZJbnN0cnVjdGlvbnMpLHgrPXQsbChkLGIseCl9aWYoMD09PXgpe2NvbnN0IGU9bmV3IFVpbnQ4QXJyYXkoWzAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw0OSwwXSk7Zm9yKG09MCxiPW87bTxoO20rKyxiKz1vKWwoZCxiLGUubGVuZ3RoKTt0LmRhdGE9ZX1lbHNlIGlmKGkpe2NvbnN0IHI9YyhkLG8pO3AubGVuZ3RoPnIreD90LmRhdGE9cC5zdWJhcnJheSgwLHIreCk6KHQuZGF0YT1uZXcgVWludDhBcnJheShyK3gpLHQuZGF0YS5zZXQocC5zdWJhcnJheSgwLHgpKSksdC5kYXRhLnNldChwLnN1YmFycmF5KDAscikseCksbChlLmRhdGEsZC5sZW5ndGgtbyx4K3IpfWVsc2UgdC5kYXRhPXAuc3ViYXJyYXkoMCx4KTtyZXR1cm57bWlzc2luZ0dseXBoczp3LG1heFNpemVPZkluc3RydWN0aW9uczpzfX0oTy5sb2NhLE8uZ2x5ZixxLGUsSyxHLFYpO1k9dC5taXNzaW5nR2x5cGhzLFg+PTY1NTM2JiZPLm1heHAubGVuZ3RoPj0yMiYmKE8ubWF4cC5kYXRhWzI2XT10Lm1heFNpemVPZkluc3RydWN0aW9ucz4+OCxPLm1heHAuZGF0YVsyN109MjU1JnQubWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zKX1pZighTy5oaGVhKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCdSZXF1aXJlZCAiaGhlYSIgdGFibGUgaXMgbm90IGZvdW5kJyk7MD09PU8uaGhlYS5kYXRhWzEwXSYmMD09PU8uaGhlYS5kYXRhWzExXSYmKE8uaGhlYS5kYXRhWzEwXT0yNTUsTy5oaGVhLmRhdGFbMTFdPTI1NSk7Y29uc3QgSj17dW5pdHNQZXJFbTpGKE8uaGVhZC5kYXRhWzE4XSxPLmhlYWQuZGF0YVsxOV0pLHlNYXg6VChPLmhlYWQuZGF0YVs0Ml0sTy5oZWFkLmRhdGFbNDNdKSx5TWluOlQoTy5oZWFkLmRhdGFbMzhdLE8uaGVhZC5kYXRhWzM5XSksYXNjZW50OlQoTy5oaGVhLmRhdGFbNF0sTy5oaGVhLmRhdGFbNV0pLGRlc2NlbnQ6VChPLmhoZWEuZGF0YVs2XSxPLmhoZWEuZGF0YVs3XSksbGluZUdhcDpUKE8uaGhlYS5kYXRhWzhdLE8uaGhlYS5kYXRhWzldKX07dGhpcy5hc2NlbnQ9Si5hc2NlbnQvSi51bml0c1BlckVtLHRoaXMuZGVzY2VudD1KLmRlc2NlbnQvSi51bml0c1BlckVtLHRoaXMubGluZUdhcD1KLmxpbmVHYXAvSi51bml0c1BlckVtLG51bGwhPT0obD10aGlzLmNzc0ZvbnRJbmZvKSYmdm9pZCAwIT09bCYmbC5saW5lSGVpZ2h0Pyh0aGlzLmxpbmVIZWlnaHQ9dGhpcy5jc3NGb250SW5mby5tZXRyaWNzLmxpbmVIZWlnaHQsdGhpcy5saW5lR2FwPXRoaXMuY3NzRm9udEluZm8ubWV0cmljcy5saW5lR2FwKTp0aGlzLmxpbmVIZWlnaHQ9dGhpcy5hc2NlbnQtdGhpcy5kZXNjZW50K3RoaXMubGluZUdhcCxPLnBvc3QmJmZ1bmN0aW9uKGUscixhKXtjb25zdCBzPSh0LnN0YXJ0fHwwKStlLm9mZnNldDt0LnBvcz1zO2NvbnN0IG89cytlLmxlbmd0aCxjPXQuZ2V0SW50MzIoKTt0LnNraXAoMjgpO2xldCBsLGgsdT0hMDtzd2l0Y2goYyl7Y2FzZSA2NTUzNjpsPWkuTWFjU3RhbmRhcmRHbHlwaE9yZGVyaW5nO2JyZWFrO2Nhc2UgMTMxMDcyOmNvbnN0IGU9dC5nZXRVaW50MTYoKTtpZihlIT09YSl7dT0hMTticmVha31jb25zdCBzPVtdO2ZvcihoPTA7aDxlOysraCl7Y29uc3QgZT10LmdldFVpbnQxNigpO2lmKGU+PTMyNzY4KXt1PSExO2JyZWFrfXMucHVzaChlKX1pZighdSlicmVhaztjb25zdCBkPVtdLGY9W107Zm9yKDt0LnBvczxvOyl7Y29uc3QgZT10LmdldEJ5dGUoKTtmb3IoZi5sZW5ndGg9ZSxoPTA7aDxlOysraClmW2hdPVN0cmluZy5mcm9tQ2hhckNvZGUodC5nZXRCeXRlKCkpO2QucHVzaChmLmpvaW4oIiIpKX1mb3IobD1bXSxoPTA7aDxlOysraCl7Y29uc3QgZT1zW2hdO2U8MjU4P2wucHVzaChpLk1hY1N0YW5kYXJkR2x5cGhPcmRlcmluZ1tlXSk6bC5wdXNoKGRbZS0yNThdKX1icmVhaztjYXNlIDE5NjYwODpicmVhaztkZWZhdWx0OigwLG4ud2FybikoIlVua25vd24vdW5zdXBwb3J0ZWQgcG9zdCB0YWJsZSB2ZXJzaW9uICIrYyksdT0hMSxyLmRlZmF1bHRFbmNvZGluZyYmKGw9ci5kZWZhdWx0RW5jb2RpbmcpfXIuZ2x5cGhOYW1lcz1sfShPLnBvc3QscixxKSxPLnBvc3Q9e3RhZzoicG9zdCIsZGF0YTokKHIpfTtjb25zdCBaPVtdO2Z1bmN0aW9uIFEoZSl7cmV0dXJuIVlbZV19aWYoci5jb21wb3NpdGUpe2NvbnN0IGU9ci5jaWRUb0dpZE1hcHx8W10sdD0wPT09ZS5sZW5ndGg7ci5jTWFwLmZvckVhY2goKGZ1bmN0aW9uKHIsYSl7aWYoInN0cmluZyI9PXR5cGVvZiBhJiYoYT1MKHIsYSwhMCkpLGE+NjU1MzUpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIk1heCBzaXplIG9mIENJRCBpcyA2NSw1MzUiKTtsZXQgaT0tMTt0P2k9YTp2b2lkIDAhPT1lW2FdJiYoaT1lW2FdKSxpPj0wJiZpPHEmJlEoaSkmJihaW3JdPWkpfSkpfWVsc2V7Y29uc3QgZT1mdW5jdGlvbihlLHQscixhKXtpZighZSlyZXR1cm4oMCxuLndhcm4pKCJObyBjbWFwIHRhYmxlIGF2YWlsYWJsZS4iKSx7cGxhdGZvcm1JZDotMSxlbmNvZGluZ0lkOi0xLG1hcHBpbmdzOltdLGhhc1Nob3J0Q21hcDohMX07bGV0IGkscz0odC5zdGFydHx8MCkrZS5vZmZzZXQ7dC5wb3M9cyx0LnNraXAoMik7Y29uc3Qgbz10LmdldFVpbnQxNigpO2xldCBjLGw9ITE7Zm9yKGxldCBlPTA7ZTxvO2UrKyl7dmFyIGgsdTtjb25zdCBuPXQuZ2V0VWludDE2KCksaT10LmdldFVpbnQxNigpLHM9dC5nZXRJbnQzMigpPj4+MDtsZXQgZD0hMTtpZigobnVsbD09PShoPWMpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLnBsYXRmb3JtSWQpIT09bnx8KG51bGw9PT0odT1jKXx8dm9pZCAwPT09dT92b2lkIDA6dS5lbmNvZGluZ0lkKSE9PWkpe2lmKDAhPT1ufHwwIT09aSYmMSE9PWkmJjMhPT1pKWlmKDE9PT1uJiYwPT09aSlkPSEwO2Vsc2UgaWYoMyE9PW58fDEhPT1pfHwhYSYmYyl7aWYociYmMz09PW4mJjA9PT1pKXtkPSEwO2xldCByPSEwO2lmKGU8by0xKXtjb25zdCBlPXQucGVla0J5dGVzKDIpO0YoZVswXSxlWzFdKTxuJiYocj0hMSl9ciYmKGw9ITApfX1lbHNlIGQ9ITAscnx8KGw9ITApO2Vsc2UgZD0hMDtpZihkJiYoYz17cGxhdGZvcm1JZDpuLGVuY29kaW5nSWQ6aSxvZmZzZXQ6c30pLGwpYnJlYWt9fWlmKGMmJih0LnBvcz1zK2Mub2Zmc2V0KSwhY3x8LTE9PT10LnBlZWtCeXRlKCkpcmV0dXJuKDAsbi53YXJuKSgiQ291bGQgbm90IGZpbmQgYSBwcmVmZXJyZWQgY21hcCB0YWJsZS4iKSx7cGxhdGZvcm1JZDotMSxlbmNvZGluZ0lkOi0xLG1hcHBpbmdzOltdLGhhc1Nob3J0Q21hcDohMX07Y29uc3QgZD10LmdldFVpbnQxNigpO2xldCBmPSExO2NvbnN0IGc9W107bGV0IHAsbTtpZigwPT09ZCl7Zm9yKHQuc2tpcCg0KSxwPTA7cDwyNTY7cCsrKXtjb25zdCBlPXQuZ2V0Qnl0ZSgpO2UmJmcucHVzaCh7Y2hhckNvZGU6cCxnbHlwaElkOmV9KX1mPSEwfWVsc2UgaWYoMj09PWQpe3Quc2tpcCg0KTtjb25zdCBlPVtdO2xldCByPTA7Zm9yKGxldCBuPTA7bjwyNTY7bisrKXtjb25zdCBuPXQuZ2V0VWludDE2KCk+PjM7ZS5wdXNoKG4pLHI9TWF0aC5tYXgobixyKX1jb25zdCBuPVtdO2ZvcihsZXQgZT0wO2U8PXI7ZSsrKW4ucHVzaCh7Zmlyc3RDb2RlOnQuZ2V0VWludDE2KCksZW50cnlDb3VudDp0LmdldFVpbnQxNigpLGlkRGVsdGE6VCh0LmdldEJ5dGUoKSx0LmdldEJ5dGUoKSksaWRSYW5nZVBvczp0LnBvcyt0LmdldFVpbnQxNigpfSk7Zm9yKGxldCByPTA7cjwyNTY7cisrKWlmKDA9PT1lW3JdKXQucG9zPW5bMF0uaWRSYW5nZVBvcysyKnIsbT10LmdldFVpbnQxNigpLGcucHVzaCh7Y2hhckNvZGU6cixnbHlwaElkOm19KTtlbHNle2NvbnN0IGE9bltlW3JdXTtmb3IocD0wO3A8YS5lbnRyeUNvdW50O3ArKyl7Y29uc3QgZT0ocjw8OCkrcCthLmZpcnN0Q29kZTt0LnBvcz1hLmlkUmFuZ2VQb3MrMipwLG09dC5nZXRVaW50MTYoKSwwIT09bSYmKG09KG0rYS5pZERlbHRhKSU2NTUzNiksZy5wdXNoKHtjaGFyQ29kZTplLGdseXBoSWQ6bX0pfX19ZWxzZSBpZig0PT09ZCl7dC5za2lwKDQpO2NvbnN0IGU9dC5nZXRVaW50MTYoKT4+MTt0LnNraXAoNik7Y29uc3Qgcj1bXTtsZXQgbjtmb3Iobj0wO248ZTtuKyspci5wdXNoKHtlbmQ6dC5nZXRVaW50MTYoKX0pO2Zvcih0LnNraXAoMiksbj0wO248ZTtuKyspcltuXS5zdGFydD10LmdldFVpbnQxNigpO2ZvcihuPTA7bjxlO24rKylyW25dLmRlbHRhPXQuZ2V0VWludDE2KCk7bGV0IGEsbz0wO2ZvcihuPTA7bjxlO24rKyl7aT1yW25dO2NvbnN0IHM9dC5nZXRVaW50MTYoKTtzPyhhPShzPj4xKS0oZS1uKSxpLm9mZnNldEluZGV4PWEsbz1NYXRoLm1heChvLGEraS5lbmQtaS5zdGFydCsxKSk6aS5vZmZzZXRJbmRleD0tMX1jb25zdCBjPVtdO2ZvcihwPTA7cDxvO3ArKyljLnB1c2godC5nZXRVaW50MTYoKSk7Zm9yKG49MDtuPGU7bisrKXtpPXJbbl0scz1pLnN0YXJ0O2NvbnN0IGU9aS5lbmQsdD1pLmRlbHRhO2ZvcihhPWkub2Zmc2V0SW5kZXgscD1zO3A8PWU7cCsrKTY1NTM1IT09cCYmKG09YTwwP3A6Y1thK3Atc10sbT1tK3QmNjU1MzUsZy5wdXNoKHtjaGFyQ29kZTpwLGdseXBoSWQ6bX0pKX19ZWxzZSBpZig2PT09ZCl7dC5za2lwKDQpO2NvbnN0IGU9dC5nZXRVaW50MTYoKSxyPXQuZ2V0VWludDE2KCk7Zm9yKHA9MDtwPHI7cCsrKXttPXQuZ2V0VWludDE2KCk7Y29uc3Qgcj1lK3A7Zy5wdXNoKHtjaGFyQ29kZTpyLGdseXBoSWQ6bX0pfX1lbHNle2lmKDEyIT09ZClyZXR1cm4oMCxuLndhcm4pKCJjbWFwIHRhYmxlIGhhcyB1bnN1cHBvcnRlZCBmb3JtYXQ6ICIrZCkse3BsYXRmb3JtSWQ6LTEsZW5jb2RpbmdJZDotMSxtYXBwaW5nczpbXSxoYXNTaG9ydENtYXA6ITF9O3t0LnNraXAoMTApO2NvbnN0IGU9dC5nZXRJbnQzMigpPj4+MDtmb3IocD0wO3A8ZTtwKyspe2NvbnN0IGU9dC5nZXRJbnQzMigpPj4+MCxyPXQuZ2V0SW50MzIoKT4+PjA7bGV0IG49dC5nZXRJbnQzMigpPj4+MDtmb3IobGV0IHQ9ZTt0PD1yO3QrKylnLnB1c2goe2NoYXJDb2RlOnQsZ2x5cGhJZDpuKyt9KX19fWcuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jaGFyQ29kZS10LmNoYXJDb2RlfSkpO2ZvcihsZXQgZT0xO2U8Zy5sZW5ndGg7ZSsrKWdbZS0xXS5jaGFyQ29kZT09PWdbZV0uY2hhckNvZGUmJihnLnNwbGljZShlLDEpLGUtLSk7cmV0dXJue3BsYXRmb3JtSWQ6Yy5wbGF0Zm9ybUlkLGVuY29kaW5nSWQ6Yy5lbmNvZGluZ0lkLG1hcHBpbmdzOmcsaGFzU2hvcnRDbWFwOmZ9fShPLmNtYXAsdCx0aGlzLmlzU3ltYm9saWNGb250LHIuaGFzRW5jb2RpbmcpLGE9ZS5wbGF0Zm9ybUlkLHM9ZS5lbmNvZGluZ0lkLGw9ZS5tYXBwaW5ncztsZXQgdT1bXSxkPSExO2lmKCFyLmhhc0VuY29kaW5nfHwiTWFjUm9tYW5FbmNvZGluZyIhPT1yLmJhc2VFbmNvZGluZ05hbWUmJiJXaW5BbnNpRW5jb2RpbmciIT09ci5iYXNlRW5jb2RpbmdOYW1lfHwodT0oMCxjLmdldEVuY29kaW5nKShyLmJhc2VFbmNvZGluZ05hbWUpKSxyLmhhc0VuY29kaW5nJiYhdGhpcy5pc1N5bWJvbGljRm9udCYmKDM9PT1hJiYxPT09c3x8MT09PWEmJjA9PT1zKSl7Y29uc3QgZT0oMCxvLmdldEdseXBoc1VuaWNvZGUpKCk7Zm9yKGxldCB0PTA7dDwyNTY7dCsrKXtsZXQgbjtpZihuPXZvaWQgMCE9PXRoaXMuZGlmZmVyZW5jZXNbdF0/dGhpcy5kaWZmZXJlbmNlc1t0XTp1Lmxlbmd0aCYmIiIhPT11W3RdP3VbdF06Yy5TdGFuZGFyZEVuY29kaW5nW3RdLCFuKWNvbnRpbnVlO2NvbnN0IG89KDAsaS5yZWNvdmVyR2x5cGhOYW1lKShuLGUpO2xldCBkO2lmKDM9PT1hJiYxPT09cz9kPWVbb106MT09PWEmJjA9PT1zJiYoZD1jLk1hY1JvbWFuRW5jb2RpbmcuaW5kZXhPZihvKSksdm9pZCAwPT09ZCl7aWYoIXIuZ2x5cGhOYW1lcyYmci5oYXNJbmNsdWRlZFRvVW5pY29kZU1hcCYmISh0aGlzLnRvVW5pY29kZSBpbnN0YW5jZW9mIGguSWRlbnRpdHlUb1VuaWNvZGVNYXApKXtjb25zdCBlPXRoaXMudG9Vbmljb2RlLmdldCh0KTtlJiYoZD1lLmNvZGVQb2ludEF0KDApKX1pZih2b2lkIDA9PT1kKWNvbnRpbnVlfWZvcihjb25zdCBlIG9mIGwpaWYoZS5jaGFyQ29kZT09PWQpe1pbdF09ZS5nbHlwaElkO2JyZWFrfX19ZWxzZSBpZigwPT09YSl7Zm9yKGNvbnN0IGUgb2YgbClaW2UuY2hhckNvZGVdPWUuZ2x5cGhJZDtkPSEwfWVsc2UgZm9yKGNvbnN0IGUgb2YgbCl7bGV0IHQ9ZS5jaGFyQ29kZTszPT09YSYmdD49NjE0NDAmJnQ8PTYxNjk1JiYodCY9MjU1KSxaW3RdPWUuZ2x5cGhJZH1pZihyLmdseXBoTmFtZXMmJih1Lmxlbmd0aHx8dGhpcy5kaWZmZXJlbmNlcy5sZW5ndGgpKWZvcihsZXQgZT0wO2U8MjU2OysrZSl7aWYoIWQmJnZvaWQgMCE9PVpbZV0pY29udGludWU7Y29uc3QgdD10aGlzLmRpZmZlcmVuY2VzW2VdfHx1W2VdO2lmKCF0KWNvbnRpbnVlO2NvbnN0IG49ci5nbHlwaE5hbWVzLmluZGV4T2YodCk7bj4wJiZRKG4pJiYoWltlXT1uKX19MD09PVoubGVuZ3RoJiYoWlswXT0wKTtsZXQgZWU9ei0xO2lmKEd8fChlZT0wKSwhci5jc3NGb250SW5mbyl7Y29uc3QgZT1fKFosUSxlZSx0aGlzLnRvVW5pY29kZSk7dGhpcy50b0ZvbnRDaGFyPWUudG9Gb250Q2hhcixPLmNtYXA9e3RhZzoiY21hcCIsZGF0YTpqKGUuY2hhckNvZGVUb0dseXBoSWQsZS50b1VuaWNvZGVFeHRyYU1hcCx6KX0sT1siT1MvMiJdJiZmdW5jdGlvbihlLHQpe3QucG9zPSh0LnN0YXJ0fHwwKStlLm9mZnNldDtjb25zdCByPXQuZ2V0VWludDE2KCk7dC5za2lwKDYwKTtjb25zdCBuPXQuZ2V0VWludDE2KCk7cmV0dXJuIShyPDQmJjc2OCZufHx0LmdldFVpbnQxNigpPnQuZ2V0VWludDE2KCl8fCh0LnNraXAoNiksMD09PXQuZ2V0VWludDE2KCl8fChlLmRhdGFbOF09ZS5kYXRhWzldPTAsMCkpKX0oT1siT1MvMiJdLHQpfHwoT1siT1MvMiJdPXt0YWc6Ik9TLzIiLGRhdGE6VShyLGUuY2hhckNvZGVUb0dseXBoSWQsSil9KX1pZighUil0cnl7RT1uZXcgeS5TdHJlYW0oT1siQ0ZGICJdLmRhdGEpLE09bmV3IGEuQ0ZGUGFyc2VyKEUscixpLlNFQUNfQU5BTFlTSVNfRU5BQkxFRCkucGFyc2UoKSxNLmR1cGxpY2F0ZUZpcnN0R2x5cGgoKTtjb25zdCBlPW5ldyBhLkNGRkNvbXBpbGVyKE0pO09bIkNGRiAiXS5kYXRhPWUuY29tcGlsZSgpfWNhdGNoKGUpeygwLG4ud2FybikoIkZhaWxlZCB0byBjb21waWxlIGZvbnQgIityLmxvYWRlZE5hbWUpfWlmKE8ubmFtZSl7Y29uc3RbdCxuXT14KE8ubmFtZSk7Ty5uYW1lLmRhdGE9SChlLHQpLHRoaXMucHNOYW1lPXRbMF1bNl18fG51bGwsci5jb21wb3NpdGV8fGZ1bmN0aW9uKGUsdCxyKXtpZihlLmlzSW50ZXJuYWxGb250KXJldHVybjtpZihlLmhhc0luY2x1ZGVkVG9Vbmljb2RlTWFwKXJldHVybjtpZihlLmhhc0VuY29kaW5nKXJldHVybjtpZihlLnRvVW5pY29kZSBpbnN0YW5jZW9mIGguSWRlbnRpdHlUb1VuaWNvZGVNYXApcmV0dXJuO2lmKCF0KXJldHVybjtpZigwPT09ci5sZW5ndGgpcmV0dXJuO2lmKGUuZGVmYXVsdEVuY29kaW5nPT09Yy5XaW5BbnNpRW5jb2RpbmcpcmV0dXJuO2Zvcihjb25zdCBlIG9mIHIpaWYoIUIoZSkpcmV0dXJuO2NvbnN0IG49Yy5XaW5BbnNpRW5jb2RpbmcsYT1bXSxpPSgwLG8uZ2V0R2x5cGhzVW5pY29kZSkoKTtmb3IoY29uc3QgZSBpbiBuKXtjb25zdCB0PW5bZV07aWYoIiI9PT10KWNvbnRpbnVlO2NvbnN0IHI9aVt0XTt2b2lkIDAhPT1yJiYoYVtlXT1TdHJpbmcuZnJvbUNoYXJDb2RlKHIpKX1hLmxlbmd0aD4wJiZlLnRvVW5pY29kZS5hbWVuZChhKX0ocix0aGlzLmlzU3ltYm9saWNGb250LG4pfWVsc2UgTy5uYW1lPXt0YWc6Im5hbWUiLGRhdGE6SCh0aGlzLm5hbWUpfTtjb25zdCB0ZT1uZXcgbS5PcGVuVHlwZUZpbGVCdWlsZGVyKEMudmVyc2lvbik7Zm9yKGNvbnN0IGUgaW4gTyl0ZS5hZGRUYWJsZShlLE9bZV0uZGF0YSk7cmV0dXJuIHRlLnRvQXJyYXkoKX1jb252ZXJ0KGUsdCxyKXtyLmZpeGVkUGl0Y2g9ITEsci5idWlsdEluRW5jb2RpbmcmJmZ1bmN0aW9uKGUsdCl7aWYoZS5pc0ludGVybmFsRm9udClyZXR1cm47aWYoZS5oYXNJbmNsdWRlZFRvVW5pY29kZU1hcClyZXR1cm47aWYodD09PWUuZGVmYXVsdEVuY29kaW5nKXJldHVybjtpZihlLnRvVW5pY29kZSBpbnN0YW5jZW9mIGguSWRlbnRpdHlUb1VuaWNvZGVNYXApcmV0dXJuO2NvbnN0IHI9W10sbj0oMCxvLmdldEdseXBoc1VuaWNvZGUpKCk7Zm9yKGNvbnN0IGEgaW4gdCl7aWYoZS5oYXNFbmNvZGluZyYmKGUuYmFzZUVuY29kaW5nTmFtZXx8dm9pZCAwIT09ZS5kaWZmZXJlbmNlc1thXSkpY29udGludWU7Y29uc3QgaT10W2FdLG89KDAscy5nZXRVbmljb2RlRm9yR2x5cGgpKGksbik7LTEhPT1vJiYoclthXT1TdHJpbmcuZnJvbUNoYXJDb2RlKG8pKX1yLmxlbmd0aD4wJiZlLnRvVW5pY29kZS5hbWVuZChyKX0ocixyLmJ1aWx0SW5FbmNvZGluZyk7bGV0IGE9MTt0IGluc3RhbmNlb2YgdS5DRkZGb250JiYoYT10Lm51bUdseXBocy0xKTtjb25zdCBsPXQuZ2V0R2x5cGhNYXBwaW5nKHIpO2xldCBkPW51bGwsZj1sLGc9bnVsbDtyLmNzc0ZvbnRJbmZvfHwoZD1fKGwsdC5oYXNHbHlwaElkLmJpbmQodCksYSx0aGlzLnRvVW5pY29kZSksdGhpcy50b0ZvbnRDaGFyPWQudG9Gb250Q2hhcixmPWQuY2hhckNvZGVUb0dseXBoSWQsZz1kLnRvVW5pY29kZUV4dHJhTWFwKTtjb25zdCBwPXQubnVtR2x5cGhzO2Z1bmN0aW9uIGIoZSx0KXtsZXQgcj1udWxsO2Zvcihjb25zdCBuIGluIGUpdD09PWVbbl0mJihyfHwocj1bXSkpLnB1c2goMHxuKTtyZXR1cm4gcn1mdW5jdGlvbiB5KGUsdCl7Zm9yKGNvbnN0IHIgaW4gZSlpZih0PT09ZVtyXSlyZXR1cm4gMHxyO3JldHVybiBkLmNoYXJDb2RlVG9HbHlwaElkW2QubmV4dEF2YWlsYWJsZUZvbnRDaGFyQ29kZV09dCxkLm5leHRBdmFpbGFibGVGb250Q2hhckNvZGUrK31jb25zdCB3PXQuc2VhY3M7aWYoZCYmaS5TRUFDX0FOQUxZU0lTX0VOQUJMRUQmJm51bGwhPXcmJncubGVuZ3RoKXtjb25zdCBlPXIuZm9udE1hdHJpeHx8bi5GT05UX0lERU5USVRZX01BVFJJWCxhPXQuZ2V0Q2hhcnNldCgpLGk9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IobGV0IHQgaW4gdyl7dHw9MDtjb25zdCByPXdbdF0sbj1jLlN0YW5kYXJkRW5jb2RpbmdbclsyXV0scz1jLlN0YW5kYXJkRW5jb2RpbmdbclszXV0sbz1hLmluZGV4T2YobiksaD1hLmluZGV4T2Yocyk7aWYobzwwfHxoPDApY29udGludWU7Y29uc3QgdT17eDpyWzBdKmVbMF0rclsxXSplWzJdK2VbNF0seTpyWzBdKmVbMV0rclsxXSplWzNdK2VbNV19LGY9YihsLHQpO2lmKGYpZm9yKGNvbnN0IGUgb2YgZil7Y29uc3QgdD1kLmNoYXJDb2RlVG9HbHlwaElkLHI9eSh0LG8pLG49eSh0LGgpO2lbZV09e2Jhc2VGb250Q2hhckNvZGU6cixhY2NlbnRGb250Q2hhckNvZGU6bixhY2NlbnRPZmZzZXQ6dX19fXIuc2VhY01hcD1pfWNvbnN0IHY9MS8oci5mb250TWF0cml4fHxuLkZPTlRfSURFTlRJVFlfTUFUUklYKVswXSx4PW5ldyBtLk9wZW5UeXBlRmlsZUJ1aWxkZXIoIk9UVE8iKTtyZXR1cm4geC5hZGRUYWJsZSgiQ0ZGICIsdC5kYXRhKSx4LmFkZFRhYmxlKCJPUy8yIixVKHIsZikpLHguYWRkVGFibGUoImNtYXAiLGooZixnLHApKSx4LmFkZFRhYmxlKCJoZWFkIiwiXDABXDBcMFwwXDAQXDBcMFwwXDBcMF8PPMO1XDBcMCIrRSh2KSsiXDBcMFwwXDDCnlx2fidcMFwwXDBcMMKeXHZ+J1wwXDAiK0Uoci5kZXNjZW50KSsiD8O/IitFKHIuYXNjZW50KStNKHIuaXRhbGljQW5nbGU/MjowKSsiXDARXDBcMFwwXDBcMFwwIikseC5hZGRUYWJsZSgiaGhlYSIsIlwwAVwwXDAiK0Uoci5hc2NlbnQpK0Uoci5kZXNjZW50KSsiXDBcMMO/w79cMFwwXDBcMFwwXDAiK0Uoci5jYXBIZWlnaHQpK0UoTWF0aC50YW4oci5pdGFsaWNBbmdsZSkqci54SGVpZ2h0KSsiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIitNKHApKSx4LmFkZFRhYmxlKCJobXR4IixmdW5jdGlvbigpe2NvbnN0IGU9dC5jaGFyc3RyaW5ncyxyPXQuY2ZmP3QuY2ZmLndpZHRoczpudWxsO2xldCBuPSJcMFwwXDBcMCI7Zm9yKGxldCB0PTEsYT1wO3Q8YTt0Kyspe2xldCBhPTA7aWYoZSl7Y29uc3Qgcj1lW3QtMV07YT0id2lkdGgiaW4gcj9yLndpZHRoOjB9ZWxzZSByJiYoYT1NYXRoLmNlaWwoclt0XXx8MCkpO24rPU0oYSkrTSgwKX1yZXR1cm4gbn0oKSkseC5hZGRUYWJsZSgibWF4cCIsIlwwXDBQXDAiK00ocCkpLHguYWRkVGFibGUoIm5hbWUiLEgoZSkpLHguYWRkVGFibGUoInBvc3QiLCQocikpLHgudG9BcnJheSgpfWdldCBzcGFjZVdpZHRoKCl7Y29uc3QgZT1bInNwYWNlIiwibWludXMiLCJvbmUiLCJpIiwiSSJdO2xldCB0O2Zvcihjb25zdCByIG9mIGUpe2lmKHIgaW4gdGhpcy53aWR0aHMpe3Q9dGhpcy53aWR0aHNbcl07YnJlYWt9Y29uc3QgZT0oMCxvLmdldEdseXBoc1VuaWNvZGUpKClbcl07bGV0IG49MDtpZih0aGlzLmNvbXBvc2l0ZSYmdGhpcy5jTWFwLmNvbnRhaW5zKGUpJiYobj10aGlzLmNNYXAubG9va3VwKGUpLCJzdHJpbmciPT10eXBlb2YgbiYmKG49TChlLG4pKSksIW4mJnRoaXMudG9Vbmljb2RlJiYobj10aGlzLnRvVW5pY29kZS5jaGFyQ29kZU9mKGUpKSxuPD0wJiYobj1lKSx0PXRoaXMud2lkdGhzW25dLHQpYnJlYWt9cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsInNwYWNlV2lkdGgiLHR8fHRoaXMuZGVmYXVsdFdpZHRoKX1fY2hhclRvR2x5cGgoZSl7dmFyIHQscixhLGk7bGV0IG8sYyxsLGg9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSx1PXRoaXMuX2dseXBoQ2FjaGVbZV07aWYoKG51bGw9PT0odD11KXx8dm9pZCAwPT09dD92b2lkIDA6dC5pc1NwYWNlKT09PWgpcmV0dXJuIHU7bGV0IGQ9ZTtudWxsIT09KHI9dGhpcy5jTWFwKSYmdm9pZCAwIT09ciYmci5jb250YWlucyhlKSYmKGQ9dGhpcy5jTWFwLmxvb2t1cChlKSwic3RyaW5nIj09dHlwZW9mIGQmJihkPUwoZSxkKSkpLGM9dGhpcy53aWR0aHNbZF0sIm51bWJlciIhPXR5cGVvZiBjJiYoYz10aGlzLmRlZmF1bHRXaWR0aCk7Y29uc3QgZj1udWxsPT09KGE9dGhpcy52bWV0cmljcyl8fHZvaWQgMD09PWE/dm9pZCAwOmFbZF07bGV0IGc9dGhpcy50b1VuaWNvZGUuZ2V0KGUpfHxlOyJudW1iZXIiPT10eXBlb2YgZyYmKGc9U3RyaW5nLmZyb21DaGFyQ29kZShnKSk7bGV0IHA9dm9pZCAwIT09dGhpcy50b0ZvbnRDaGFyW2VdO2lmKG89dGhpcy50b0ZvbnRDaGFyW2VdfHxlLHRoaXMubWlzc2luZ0ZpbGUpe2NvbnN0IHQ9dGhpcy5kaWZmZXJlbmNlc1tlXXx8dGhpcy5kZWZhdWx0RW5jb2RpbmdbZV07Ii5ub3RkZWYiIT09dCYmIiIhPT10fHwiVHlwZTEiIT09dGhpcy50eXBlfHwobz0zMiksbz0oMCxzLm1hcFNwZWNpYWxVbmljb2RlVmFsdWVzKShvKX10aGlzLmlzVHlwZTNGb250JiYobD1vKTtsZXQgbT1udWxsO2lmKG51bGwhPT0oaT10aGlzLnNlYWNNYXApJiZ2b2lkIDAhPT1pJiZpW2VdKXtwPSEwO2NvbnN0IHQ9dGhpcy5zZWFjTWFwW2VdO289dC5iYXNlRm9udENoYXJDb2RlLG09e2ZvbnRDaGFyOlN0cmluZy5mcm9tQ29kZVBvaW50KHQuYWNjZW50Rm9udENoYXJDb2RlKSxvZmZzZXQ6dC5hY2NlbnRPZmZzZXR9fWxldCBiPSIiO3JldHVybiJudW1iZXIiPT10eXBlb2YgbyYmKG88PTExMTQxMTE/Yj1TdHJpbmcuZnJvbUNvZGVQb2ludChvKTooMCxuLndhcm4pKCJjaGFyVG9HbHlwaCAtIGludmFsaWQgZm9udENoYXJDb2RlOiAiLmNvbmNhdChvKSkpLHU9bmV3IE8oZSxiLGcsbSxjLGYsbCxoLHApLHRoaXMuX2dseXBoQ2FjaGVbZV09dX1jaGFyc1RvR2x5cGhzKGUpe2xldCB0PXRoaXMuX2NoYXJzQ2FjaGVbZV07aWYodClyZXR1cm4gdDtpZih0PVtdLHRoaXMuY01hcCl7Y29uc3Qgcj1PYmplY3QuY3JlYXRlKG51bGwpLG49ZS5sZW5ndGg7bGV0IGE9MDtmb3IoO2E8bjspe3RoaXMuY01hcC5yZWFkQ2hhckNvZGUoZSxhLHIpO2NvbnN0e2NoYXJjb2RlOm4sbGVuZ3RoOml9PXI7YSs9aTtjb25zdCBzPXRoaXMuX2NoYXJUb0dseXBoKG4sMT09PWkmJjMyPT09ZS5jaGFyQ29kZUF0KGEtMSkpO3QucHVzaChzKX19ZWxzZSBmb3IobGV0IHI9MCxuPWUubGVuZ3RoO3I8bjsrK3Ipe2NvbnN0IG49ZS5jaGFyQ29kZUF0KHIpLGE9dGhpcy5fY2hhclRvR2x5cGgobiwzMj09PW4pO3QucHVzaChhKX1yZXR1cm4gdGhpcy5fY2hhcnNDYWNoZVtlXT10fWdldENoYXJQb3NpdGlvbnMoZSl7Y29uc3QgdD1bXTtpZih0aGlzLmNNYXApe2NvbnN0IHI9T2JqZWN0LmNyZWF0ZShudWxsKTtsZXQgbj0wO2Zvcig7bjxlLmxlbmd0aDspe3RoaXMuY01hcC5yZWFkQ2hhckNvZGUoZSxuLHIpO2NvbnN0IGE9ci5sZW5ndGg7dC5wdXNoKFtuLG4rYV0pLG4rPWF9fWVsc2UgZm9yKGxldCByPTAsbj1lLmxlbmd0aDtyPG47KytyKXQucHVzaChbcixyKzFdKTtyZXR1cm4gdH1nZXQgZ2x5cGhDYWNoZVZhbHVlcygpe3JldHVybiBPYmplY3QudmFsdWVzKHRoaXMuX2dseXBoQ2FjaGUpfWVuY29kZVN0cmluZyhlKXtjb25zdCB0PVtdLHI9W10sbj0oKT0+dC5sZW5ndGglMj09MSxhPXRoaXMudG9Vbmljb2RlIGluc3RhbmNlb2YgaC5JZGVudGl0eVRvVW5pY29kZU1hcD9lPT50aGlzLnRvVW5pY29kZS5jaGFyQ29kZU9mKGUpOmU9PnRoaXMudG9Vbmljb2RlLmNoYXJDb2RlT2YoU3RyaW5nLmZyb21Db2RlUG9pbnQoZSkpO2ZvcihsZXQgaT0wLHM9ZS5sZW5ndGg7aTxzO2krKyl7Y29uc3Qgcz1lLmNvZGVQb2ludEF0KGkpO2lmKHM+NTUyOTUmJihzPDU3MzQ0fHxzPjY1NTMzKSYmaSsrLHRoaXMudG9Vbmljb2RlKXtjb25zdCBlPWEocyk7aWYoLTEhPT1lKXtuKCkmJih0LnB1c2goci5qb2luKCIiKSksci5sZW5ndGg9MCk7Zm9yKGxldCB0PSh0aGlzLmNNYXA/dGhpcy5jTWFwLmdldENoYXJDb2RlTGVuZ3RoKGUpOjEpLTE7dD49MDt0LS0pci5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoZT4+OCp0JjI1NSkpO2NvbnRpbnVlfX1uKCl8fCh0LnB1c2goci5qb2luKCIiKSksci5sZW5ndGg9MCksci5wdXNoKFN0cmluZy5mcm9tQ29kZVBvaW50KHMpKX1yZXR1cm4gdC5wdXNoKHIuam9pbigiIikpLHR9fSx0LkVycm9yRm9udD1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLmVycm9yPWUsdGhpcy5sb2FkZWROYW1lPSJnX2ZvbnRfZXJyb3IiLHRoaXMubWlzc2luZ0ZpbGU9ITB9Y2hhcnNUb0dseXBocygpe3JldHVybltdfWVuY29kZVN0cmluZyhlKXtyZXR1cm5bZV19ZXhwb3J0RGF0YSgpe3JldHVybntlcnJvcjp0aGlzLmVycm9yfX19fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQ0ZGVG9wRGljdD10LkNGRlN0cmluZ3M9dC5DRkZTdGFuZGFyZFN0cmluZ3M9dC5DRkZQcml2YXRlRGljdD10LkNGRlBhcnNlcj10LkNGRkluZGV4PXQuQ0ZGSGVhZGVyPXQuQ0ZGRkRTZWxlY3Q9dC5DRkZDb21waWxlcj10LkNGRkNoYXJzZXQ9dC5DRkY9dm9pZCAwLHIoMTM5KSxyKDg0KSxyKDkzKSxyKDk0KSxyKDk3KSxyKDk5KSxyKDEwMSkscigxMDUpLHIoMTA4KSxyKDExNSk7dmFyIG49cigxNDQpLGE9cigxODYpLGk9cigxODcpO2NvbnN0IHM9WyIubm90ZGVmIiwic3BhY2UiLCJleGNsYW0iLCJxdW90ZWRibCIsIm51bWJlcnNpZ24iLCJkb2xsYXIiLCJwZXJjZW50IiwiYW1wZXJzYW5kIiwicXVvdGVyaWdodCIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3RlcmlzayIsInBsdXMiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiYXQiLCJBIiwiQiIsIkMiLCJEIiwiRSIsIkYiLCJHIiwiSCIsIkkiLCJKIiwiSyIsIkwiLCJNIiwiTiIsIk8iLCJQIiwiUSIsIlIiLCJTIiwiVCIsIlUiLCJWIiwiVyIsIlgiLCJZIiwiWiIsImJyYWNrZXRsZWZ0IiwiYmFja3NsYXNoIiwiYnJhY2tldHJpZ2h0IiwiYXNjaWljaXJjdW0iLCJ1bmRlcnNjb3JlIiwicXVvdGVsZWZ0IiwiYSIsImIiLCJjIiwiZCIsImUiLCJmIiwiZyIsImgiLCJpIiwiaiIsImsiLCJsIiwibSIsIm4iLCJvIiwicCIsInEiLCJyIiwicyIsInQiLCJ1IiwidiIsInciLCJ4IiwieSIsInoiLCJicmFjZWxlZnQiLCJiYXIiLCJicmFjZXJpZ2h0IiwiYXNjaWl0aWxkZSIsImV4Y2xhbWRvd24iLCJjZW50Iiwic3RlcmxpbmciLCJmcmFjdGlvbiIsInllbiIsImZsb3JpbiIsInNlY3Rpb24iLCJjdXJyZW5jeSIsInF1b3Rlc2luZ2xlIiwicXVvdGVkYmxsZWZ0IiwiZ3VpbGxlbW90bGVmdCIsImd1aWxzaW5nbGxlZnQiLCJndWlsc2luZ2xyaWdodCIsImZpIiwiZmwiLCJlbmRhc2giLCJkYWdnZXIiLCJkYWdnZXJkYmwiLCJwZXJpb2RjZW50ZXJlZCIsInBhcmFncmFwaCIsImJ1bGxldCIsInF1b3Rlc2luZ2xiYXNlIiwicXVvdGVkYmxiYXNlIiwicXVvdGVkYmxyaWdodCIsImd1aWxsZW1vdHJpZ2h0IiwiZWxsaXBzaXMiLCJwZXJ0aG91c2FuZCIsInF1ZXN0aW9uZG93biIsImdyYXZlIiwiYWN1dGUiLCJjaXJjdW1mbGV4IiwidGlsZGUiLCJtYWNyb24iLCJicmV2ZSIsImRvdGFjY2VudCIsImRpZXJlc2lzIiwicmluZyIsImNlZGlsbGEiLCJodW5nYXJ1bWxhdXQiLCJvZ29uZWsiLCJjYXJvbiIsImVtZGFzaCIsIkFFIiwib3JkZmVtaW5pbmUiLCJMc2xhc2giLCJPc2xhc2giLCJPRSIsIm9yZG1hc2N1bGluZSIsImFlIiwiZG90bGVzc2kiLCJsc2xhc2giLCJvc2xhc2giLCJvZSIsImdlcm1hbmRibHMiLCJvbmVzdXBlcmlvciIsImxvZ2ljYWxub3QiLCJtdSIsInRyYWRlbWFyayIsIkV0aCIsIm9uZWhhbGYiLCJwbHVzbWludXMiLCJUaG9ybiIsIm9uZXF1YXJ0ZXIiLCJkaXZpZGUiLCJicm9rZW5iYXIiLCJkZWdyZWUiLCJ0aG9ybiIsInRocmVlcXVhcnRlcnMiLCJ0d29zdXBlcmlvciIsInJlZ2lzdGVyZWQiLCJtaW51cyIsImV0aCIsIm11bHRpcGx5IiwidGhyZWVzdXBlcmlvciIsImNvcHlyaWdodCIsIkFhY3V0ZSIsIkFjaXJjdW1mbGV4IiwiQWRpZXJlc2lzIiwiQWdyYXZlIiwiQXJpbmciLCJBdGlsZGUiLCJDY2VkaWxsYSIsIkVhY3V0ZSIsIkVjaXJjdW1mbGV4IiwiRWRpZXJlc2lzIiwiRWdyYXZlIiwiSWFjdXRlIiwiSWNpcmN1bWZsZXgiLCJJZGllcmVzaXMiLCJJZ3JhdmUiLCJOdGlsZGUiLCJPYWN1dGUiLCJPY2lyY3VtZmxleCIsIk9kaWVyZXNpcyIsIk9ncmF2ZSIsIk90aWxkZSIsIlNjYXJvbiIsIlVhY3V0ZSIsIlVjaXJjdW1mbGV4IiwiVWRpZXJlc2lzIiwiVWdyYXZlIiwiWWFjdXRlIiwiWWRpZXJlc2lzIiwiWmNhcm9uIiwiYWFjdXRlIiwiYWNpcmN1bWZsZXgiLCJhZGllcmVzaXMiLCJhZ3JhdmUiLCJhcmluZyIsImF0aWxkZSIsImNjZWRpbGxhIiwiZWFjdXRlIiwiZWNpcmN1bWZsZXgiLCJlZGllcmVzaXMiLCJlZ3JhdmUiLCJpYWN1dGUiLCJpY2lyY3VtZmxleCIsImlkaWVyZXNpcyIsImlncmF2ZSIsIm50aWxkZSIsIm9hY3V0ZSIsIm9jaXJjdW1mbGV4Iiwib2RpZXJlc2lzIiwib2dyYXZlIiwib3RpbGRlIiwic2Nhcm9uIiwidWFjdXRlIiwidWNpcmN1bWZsZXgiLCJ1ZGllcmVzaXMiLCJ1Z3JhdmUiLCJ5YWN1dGUiLCJ5ZGllcmVzaXMiLCJ6Y2Fyb24iLCJleGNsYW1zbWFsbCIsIkh1bmdhcnVtbGF1dHNtYWxsIiwiZG9sbGFyb2xkc3R5bGUiLCJkb2xsYXJzdXBlcmlvciIsImFtcGVyc2FuZHNtYWxsIiwiQWN1dGVzbWFsbCIsInBhcmVubGVmdHN1cGVyaW9yIiwicGFyZW5yaWdodHN1cGVyaW9yIiwidHdvZG90ZW5sZWFkZXIiLCJvbmVkb3RlbmxlYWRlciIsInplcm9vbGRzdHlsZSIsIm9uZW9sZHN0eWxlIiwidHdvb2xkc3R5bGUiLCJ0aHJlZW9sZHN0eWxlIiwiZm91cm9sZHN0eWxlIiwiZml2ZW9sZHN0eWxlIiwic2l4b2xkc3R5bGUiLCJzZXZlbm9sZHN0eWxlIiwiZWlnaHRvbGRzdHlsZSIsIm5pbmVvbGRzdHlsZSIsImNvbW1hc3VwZXJpb3IiLCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoIiwicGVyaW9kc3VwZXJpb3IiLCJxdWVzdGlvbnNtYWxsIiwiYXN1cGVyaW9yIiwiYnN1cGVyaW9yIiwiY2VudHN1cGVyaW9yIiwiZHN1cGVyaW9yIiwiZXN1cGVyaW9yIiwiaXN1cGVyaW9yIiwibHN1cGVyaW9yIiwibXN1cGVyaW9yIiwibnN1cGVyaW9yIiwib3N1cGVyaW9yIiwicnN1cGVyaW9yIiwic3N1cGVyaW9yIiwidHN1cGVyaW9yIiwiZmYiLCJmZmkiLCJmZmwiLCJwYXJlbmxlZnRpbmZlcmlvciIsInBhcmVucmlnaHRpbmZlcmlvciIsIkNpcmN1bWZsZXhzbWFsbCIsImh5cGhlbnN1cGVyaW9yIiwiR3JhdmVzbWFsbCIsIkFzbWFsbCIsIkJzbWFsbCIsIkNzbWFsbCIsIkRzbWFsbCIsIkVzbWFsbCIsIkZzbWFsbCIsIkdzbWFsbCIsIkhzbWFsbCIsIklzbWFsbCIsIkpzbWFsbCIsIktzbWFsbCIsIkxzbWFsbCIsIk1zbWFsbCIsIk5zbWFsbCIsIk9zbWFsbCIsIlBzbWFsbCIsIlFzbWFsbCIsIlJzbWFsbCIsIlNzbWFsbCIsIlRzbWFsbCIsIlVzbWFsbCIsIlZzbWFsbCIsIldzbWFsbCIsIlhzbWFsbCIsIllzbWFsbCIsIlpzbWFsbCIsImNvbG9ubW9uZXRhcnkiLCJvbmVmaXR0ZWQiLCJydXBpYWgiLCJUaWxkZXNtYWxsIiwiZXhjbGFtZG93bnNtYWxsIiwiY2VudG9sZHN0eWxlIiwiTHNsYXNoc21hbGwiLCJTY2Fyb25zbWFsbCIsIlpjYXJvbnNtYWxsIiwiRGllcmVzaXNzbWFsbCIsIkJyZXZlc21hbGwiLCJDYXJvbnNtYWxsIiwiRG90YWNjZW50c21hbGwiLCJNYWNyb25zbWFsbCIsImZpZ3VyZWRhc2giLCJoeXBoZW5pbmZlcmlvciIsIk9nb25la3NtYWxsIiwiUmluZ3NtYWxsIiwiQ2VkaWxsYXNtYWxsIiwicXVlc3Rpb25kb3duc21hbGwiLCJvbmVlaWdodGgiLCJ0aHJlZWVpZ2h0aHMiLCJmaXZlZWlnaHRocyIsInNldmVuZWlnaHRocyIsIm9uZXRoaXJkIiwidHdvdGhpcmRzIiwiemVyb3N1cGVyaW9yIiwiZm91cnN1cGVyaW9yIiwiZml2ZXN1cGVyaW9yIiwic2l4c3VwZXJpb3IiLCJzZXZlbnN1cGVyaW9yIiwiZWlnaHRzdXBlcmlvciIsIm5pbmVzdXBlcmlvciIsInplcm9pbmZlcmlvciIsIm9uZWluZmVyaW9yIiwidHdvaW5mZXJpb3IiLCJ0aHJlZWluZmVyaW9yIiwiZm91cmluZmVyaW9yIiwiZml2ZWluZmVyaW9yIiwic2l4aW5mZXJpb3IiLCJzZXZlbmluZmVyaW9yIiwiZWlnaHRpbmZlcmlvciIsIm5pbmVpbmZlcmlvciIsImNlbnRpbmZlcmlvciIsImRvbGxhcmluZmVyaW9yIiwicGVyaW9kaW5mZXJpb3IiLCJjb21tYWluZmVyaW9yIiwiQWdyYXZlc21hbGwiLCJBYWN1dGVzbWFsbCIsIkFjaXJjdW1mbGV4c21hbGwiLCJBdGlsZGVzbWFsbCIsIkFkaWVyZXNpc3NtYWxsIiwiQXJpbmdzbWFsbCIsIkFFc21hbGwiLCJDY2VkaWxsYXNtYWxsIiwiRWdyYXZlc21hbGwiLCJFYWN1dGVzbWFsbCIsIkVjaXJjdW1mbGV4c21hbGwiLCJFZGllcmVzaXNzbWFsbCIsIklncmF2ZXNtYWxsIiwiSWFjdXRlc21hbGwiLCJJY2lyY3VtZmxleHNtYWxsIiwiSWRpZXJlc2lzc21hbGwiLCJFdGhzbWFsbCIsIk50aWxkZXNtYWxsIiwiT2dyYXZlc21hbGwiLCJPYWN1dGVzbWFsbCIsIk9jaXJjdW1mbGV4c21hbGwiLCJPdGlsZGVzbWFsbCIsIk9kaWVyZXNpc3NtYWxsIiwiT0VzbWFsbCIsIk9zbGFzaHNtYWxsIiwiVWdyYXZlc21hbGwiLCJVYWN1dGVzbWFsbCIsIlVjaXJjdW1mbGV4c21hbGwiLCJVZGllcmVzaXNzbWFsbCIsIllhY3V0ZXNtYWxsIiwiVGhvcm5zbWFsbCIsIllkaWVyZXNpc3NtYWxsIiwiMDAxLjAwMCIsIjAwMS4wMDEiLCIwMDEuMDAyIiwiMDAxLjAwMyIsIkJsYWNrIiwiQm9sZCIsIkJvb2siLCJMaWdodCIsIk1lZGl1bSIsIlJlZ3VsYXIiLCJSb21hbiIsIlNlbWlib2xkIl07dC5DRkZTdGFuZGFyZFN0cmluZ3M9cztjb25zdCBvPVtudWxsLHtpZDoiaHN0ZW0iLG1pbjoyLHN0YWNrQ2xlYXJpbmc6ITAsc3RlbTohMH0sbnVsbCx7aWQ6InZzdGVtIixtaW46MixzdGFja0NsZWFyaW5nOiEwLHN0ZW06ITB9LHtpZDoidm1vdmV0byIsbWluOjEsc3RhY2tDbGVhcmluZzohMH0se2lkOiJybGluZXRvIixtaW46MixyZXNldFN0YWNrOiEwfSx7aWQ6ImhsaW5ldG8iLG1pbjoxLHJlc2V0U3RhY2s6ITB9LHtpZDoidmxpbmV0byIsbWluOjEscmVzZXRTdGFjazohMH0se2lkOiJycmN1cnZldG8iLG1pbjo2LHJlc2V0U3RhY2s6ITB9LG51bGwse2lkOiJjYWxsc3ViciIsbWluOjEsdW5kZWZTdGFjazohMH0se2lkOiJyZXR1cm4iLG1pbjowLHVuZGVmU3RhY2s6ITB9LG51bGwsbnVsbCx7aWQ6ImVuZGNoYXIiLG1pbjowLHN0YWNrQ2xlYXJpbmc6ITB9LG51bGwsbnVsbCxudWxsLHtpZDoiaHN0ZW1obSIsbWluOjIsc3RhY2tDbGVhcmluZzohMCxzdGVtOiEwfSx7aWQ6ImhpbnRtYXNrIixtaW46MCxzdGFja0NsZWFyaW5nOiEwfSx7aWQ6ImNudHJtYXNrIixtaW46MCxzdGFja0NsZWFyaW5nOiEwfSx7aWQ6InJtb3ZldG8iLG1pbjoyLHN0YWNrQ2xlYXJpbmc6ITB9LHtpZDoiaG1vdmV0byIsbWluOjEsc3RhY2tDbGVhcmluZzohMH0se2lkOiJ2c3RlbWhtIixtaW46MixzdGFja0NsZWFyaW5nOiEwLHN0ZW06ITB9LHtpZDoicmN1cnZlbGluZSIsbWluOjgscmVzZXRTdGFjazohMH0se2lkOiJybGluZWN1cnZlIixtaW46OCxyZXNldFN0YWNrOiEwfSx7aWQ6InZ2Y3VydmV0byIsbWluOjQscmVzZXRTdGFjazohMH0se2lkOiJoaGN1cnZldG8iLG1pbjo0LHJlc2V0U3RhY2s6ITB9LG51bGwse2lkOiJjYWxsZ3N1YnIiLG1pbjoxLHVuZGVmU3RhY2s6ITB9LHtpZDoidmhjdXJ2ZXRvIixtaW46NCxyZXNldFN0YWNrOiEwfSx7aWQ6Imh2Y3VydmV0byIsbWluOjQscmVzZXRTdGFjazohMH1dLGM9W251bGwsbnVsbCxudWxsLHtpZDoiYW5kIixtaW46MixzdGFja0RlbHRhOi0xfSx7aWQ6Im9yIixtaW46MixzdGFja0RlbHRhOi0xfSx7aWQ6Im5vdCIsbWluOjEsc3RhY2tEZWx0YTowfSxudWxsLG51bGwsbnVsbCx7aWQ6ImFicyIsbWluOjEsc3RhY2tEZWx0YTowfSx7aWQ6ImFkZCIsbWluOjIsc3RhY2tEZWx0YTotMSxzdGFja0ZuKGUsdCl7ZVt0LTJdPWVbdC0yXStlW3QtMV19fSx7aWQ6InN1YiIsbWluOjIsc3RhY2tEZWx0YTotMSxzdGFja0ZuKGUsdCl7ZVt0LTJdPWVbdC0yXS1lW3QtMV19fSx7aWQ6ImRpdiIsbWluOjIsc3RhY2tEZWx0YTotMSxzdGFja0ZuKGUsdCl7ZVt0LTJdPWVbdC0yXS9lW3QtMV19fSxudWxsLHtpZDoibmVnIixtaW46MSxzdGFja0RlbHRhOjAsc3RhY2tGbihlLHQpe2VbdC0xXT0tZVt0LTFdfX0se2lkOiJlcSIsbWluOjIsc3RhY2tEZWx0YTotMX0sbnVsbCxudWxsLHtpZDoiZHJvcCIsbWluOjEsc3RhY2tEZWx0YTotMX0sbnVsbCx7aWQ6InB1dCIsbWluOjIsc3RhY2tEZWx0YTotMn0se2lkOiJnZXQiLG1pbjoxLHN0YWNrRGVsdGE6MH0se2lkOiJpZmVsc2UiLG1pbjo0LHN0YWNrRGVsdGE6LTN9LHtpZDoicmFuZG9tIixtaW46MCxzdGFja0RlbHRhOjF9LHtpZDoibXVsIixtaW46MixzdGFja0RlbHRhOi0xLHN0YWNrRm4oZSx0KXtlW3QtMl09ZVt0LTJdKmVbdC0xXX19LG51bGwse2lkOiJzcXJ0IixtaW46MSxzdGFja0RlbHRhOjB9LHtpZDoiZHVwIixtaW46MSxzdGFja0RlbHRhOjF9LHtpZDoiZXhjaCIsbWluOjIsc3RhY2tEZWx0YTowfSx7aWQ6ImluZGV4IixtaW46MixzdGFja0RlbHRhOjB9LHtpZDoicm9sbCIsbWluOjMsc3RhY2tEZWx0YTotMn0sbnVsbCxudWxsLG51bGwse2lkOiJoZmxleCIsbWluOjcscmVzZXRTdGFjazohMH0se2lkOiJmbGV4IixtaW46MTMscmVzZXRTdGFjazohMH0se2lkOiJoZmxleDEiLG1pbjo5LHJlc2V0U3RhY2s6ITB9LHtpZDoiZmxleDEiLG1pbjoxMSxyZXNldFN0YWNrOiEwfV07dC5DRkZQYXJzZXI9Y2xhc3N7Y29uc3RydWN0b3IoZSx0LHIpe3RoaXMuYnl0ZXM9ZS5nZXRCeXRlcygpLHRoaXMucHJvcGVydGllcz10LHRoaXMuc2VhY0FuYWx5c2lzRW5hYmxlZD0hIXJ9cGFyc2UoKXtjb25zdCBlPXRoaXMucHJvcGVydGllcyx0PW5ldyBsO3RoaXMuY2ZmPXQ7Y29uc3Qgcj10aGlzLnBhcnNlSGVhZGVyKCksbj10aGlzLnBhcnNlSW5kZXgoci5lbmRQb3MpLGE9dGhpcy5wYXJzZUluZGV4KG4uZW5kUG9zKSxpPXRoaXMucGFyc2VJbmRleChhLmVuZFBvcykscz10aGlzLnBhcnNlSW5kZXgoaS5lbmRQb3MpLG89dGhpcy5wYXJzZURpY3QoYS5vYmouZ2V0KDApKSxjPXRoaXMuY3JlYXRlRGljdChwLG8sdC5zdHJpbmdzKTt0LmhlYWRlcj1yLm9iaix0Lm5hbWVzPXRoaXMucGFyc2VOYW1lSW5kZXgobi5vYmopLHQuc3RyaW5ncz10aGlzLnBhcnNlU3RyaW5nSW5kZXgoaS5vYmopLHQudG9wRGljdD1jLHQuZ2xvYmFsU3VickluZGV4PXMub2JqLHRoaXMucGFyc2VQcml2YXRlRGljdCh0LnRvcERpY3QpLHQuaXNDSURGb250PWMuaGFzTmFtZSgiUk9TIik7Y29uc3QgaD1jLmdldEJ5TmFtZSgiQ2hhclN0cmluZ3MiKSx1PXRoaXMucGFyc2VJbmRleChoKS5vYmosZD1jLmdldEJ5TmFtZSgiRm9udE1hdHJpeCIpO2QmJihlLmZvbnRNYXRyaXg9ZCk7Y29uc3QgZj1jLmdldEJ5TmFtZSgiRm9udEJCb3giKTtsZXQgZyxtO2lmKGYmJihlLmFzY2VudD1NYXRoLm1heChmWzNdLGZbMV0pLGUuZGVzY2VudD1NYXRoLm1pbihmWzFdLGZbM10pLGUuYXNjZW50U2NhbGVkPSEwKSx0LmlzQ0lERm9udCl7Y29uc3QgZT10aGlzLnBhcnNlSW5kZXgoYy5nZXRCeU5hbWUoIkZEQXJyYXkiKSkub2JqO2ZvcihsZXQgcj0wLG49ZS5jb3VudDtyPG47KytyKXtjb25zdCBuPWUuZ2V0KHIpLGE9dGhpcy5jcmVhdGVEaWN0KHAsdGhpcy5wYXJzZURpY3QobiksdC5zdHJpbmdzKTt0aGlzLnBhcnNlUHJpdmF0ZURpY3QoYSksdC5mZEFycmF5LnB1c2goYSl9bT1udWxsLGc9dGhpcy5wYXJzZUNoYXJzZXRzKGMuZ2V0QnlOYW1lKCJjaGFyc2V0IiksdS5jb3VudCx0LnN0cmluZ3MsITApLHQuZmRTZWxlY3Q9dGhpcy5wYXJzZUZEU2VsZWN0KGMuZ2V0QnlOYW1lKCJGRFNlbGVjdCIpLHUuY291bnQpfWVsc2UgZz10aGlzLnBhcnNlQ2hhcnNldHMoYy5nZXRCeU5hbWUoImNoYXJzZXQiKSx1LmNvdW50LHQuc3RyaW5ncywhMSksbT10aGlzLnBhcnNlRW5jb2RpbmcoYy5nZXRCeU5hbWUoIkVuY29kaW5nIiksZSx0LnN0cmluZ3MsZy5jaGFyc2V0KTt0LmNoYXJzZXQ9Zyx0LmVuY29kaW5nPW07Y29uc3QgYj10aGlzLnBhcnNlQ2hhclN0cmluZ3Moe2NoYXJTdHJpbmdzOnUsbG9jYWxTdWJySW5kZXg6Yy5wcml2YXRlRGljdC5zdWJyc0luZGV4LGdsb2JhbFN1YnJJbmRleDpzLm9iaixmZFNlbGVjdDp0LmZkU2VsZWN0LGZkQXJyYXk6dC5mZEFycmF5LHByaXZhdGVEaWN0OmMucHJpdmF0ZURpY3R9KTtyZXR1cm4gdC5jaGFyU3RyaW5ncz1iLmNoYXJTdHJpbmdzLHQuc2VhY3M9Yi5zZWFjcyx0LndpZHRocz1iLndpZHRocyx0fXBhcnNlSGVhZGVyKCl7bGV0IGU9dGhpcy5ieXRlcztjb25zdCB0PWUubGVuZ3RoO2xldCByPTA7Zm9yKDtyPHQmJjEhPT1lW3JdOykrK3I7aWYocj49dCl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCBDRkYgaGVhZGVyIik7MCE9PXImJigoMCxuLmluZm8pKCJjZmYgZGF0YSBpcyBzaGlmdGVkIiksZT1lLnN1YmFycmF5KHIpLHRoaXMuYnl0ZXM9ZSk7Y29uc3QgYT1lWzBdLGk9ZVsxXSxzPWVbMl0sbz1lWzNdO3JldHVybntvYmo6bmV3IGgoYSxpLHMsbyksZW5kUG9zOnN9fXBhcnNlRGljdChlKXtsZXQgdD0wO2Z1bmN0aW9uIHIoKXtsZXQgcj1lW3QrK107cmV0dXJuIDMwPT09cj9mdW5jdGlvbigpe2xldCByPSIiO2NvbnN0IG49WyIwIiwiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiLiIsIkUiLCJFLSIsbnVsbCwiLSJdLGE9ZS5sZW5ndGg7Zm9yKDt0PGE7KXtjb25zdCBhPWVbdCsrXSxpPWE+PjQscz0xNSZhO2lmKDE1PT09aSlicmVhaztpZihyKz1uW2ldLDE1PT09cylicmVhaztyKz1uW3NdfXJldHVybiBwYXJzZUZsb2F0KHIpfSgpOjI4PT09cj8ocj1lW3QrK10scj0ocjw8MjR8ZVt0KytdPDwxNik+PjE2LHIpOjI5PT09cj8ocj1lW3QrK10scj1yPDw4fGVbdCsrXSxyPXI8PDh8ZVt0KytdLHI9cjw8OHxlW3QrK10scik6cj49MzImJnI8PTI0Nj9yLTEzOTpyPj0yNDcmJnI8PTI1MD8yNTYqKHItMjQ3KStlW3QrK10rMTA4OnI+PTI1MSYmcjw9MjU0Py0yNTYqKHItMjUxKS1lW3QrK10tMTA4OigoMCxuLndhcm4pKCdDRkZQYXJzZXJfcGFyc2VEaWN0OiAiJytyKyciIGlzIGEgcmVzZXJ2ZWQgY29tbWFuZC4nKSxOYU4pfWxldCBhPVtdO2NvbnN0IGk9W107dD0wO2NvbnN0IHM9ZS5sZW5ndGg7Zm9yKDt0PHM7KXtsZXQgbj1lW3RdO248PTIxPygxMj09PW4mJihuPW48PDh8ZVsrK3RdKSxpLnB1c2goW24sYV0pLGE9W10sKyt0KTphLnB1c2gocigpKX1yZXR1cm4gaX1wYXJzZUluZGV4KGUpe2NvbnN0IHQ9bmV3IGQscj10aGlzLmJ5dGVzLG49cltlKytdPDw4fHJbZSsrXSxhPVtdO2xldCBpLHMsbz1lO2lmKDAhPT1uKXtjb25zdCB0PXJbZSsrXSxjPWUrKG4rMSkqdC0xO2ZvcihpPTAscz1uKzE7aTxzOysraSl7bGV0IG49MDtmb3IobGV0IGE9MDthPHQ7KythKW48PD04LG4rPXJbZSsrXTthLnB1c2goYytuKX1vPWFbbl19Zm9yKGk9MCxzPWEubGVuZ3RoLTE7aTxzOysraSl7Y29uc3QgZT1hW2ldLG49YVtpKzFdO3QuYWRkKHIuc3ViYXJyYXkoZSxuKSl9cmV0dXJue29iajp0LGVuZFBvczpvfX1wYXJzZU5hbWVJbmRleChlKXtjb25zdCB0PVtdO2ZvcihsZXQgcj0wLGE9ZS5jb3VudDtyPGE7KytyKXtjb25zdCBhPWUuZ2V0KHIpO3QucHVzaCgoMCxuLmJ5dGVzVG9TdHJpbmcpKGEpKX1yZXR1cm4gdH1wYXJzZVN0cmluZ0luZGV4KGUpe2NvbnN0IHQ9bmV3IHU7Zm9yKGxldCByPTAsYT1lLmNvdW50O3I8YTsrK3Ipe2NvbnN0IGE9ZS5nZXQocik7dC5hZGQoKDAsbi5ieXRlc1RvU3RyaW5nKShhKSl9cmV0dXJuIHR9Y3JlYXRlRGljdChlLHQscil7Y29uc3Qgbj1uZXcgZShyKTtmb3IoY29uc3RbZSxyXW9mIHQpbi5zZXRCeUtleShlLHIpO3JldHVybiBufXBhcnNlQ2hhclN0cmluZyhlLHQscixhKXtpZighdHx8ZS5jYWxsRGVwdGg+MTApcmV0dXJuITE7bGV0IGk9ZS5zdGFja1NpemU7Y29uc3Qgcz1lLnN0YWNrO2xldCBsPXQubGVuZ3RoO2ZvcihsZXQgaD0wO2g8bDspe2NvbnN0IHU9dFtoKytdO2xldCBkPW51bGw7aWYoMTI9PT11KXtjb25zdCBlPXRbaCsrXTswPT09ZT8odFtoLTJdPTEzOSx0W2gtMV09MjIsaT0wKTpkPWNbZV19ZWxzZSBpZigyOD09PXUpc1tpXT0odFtoXTw8MjR8dFtoKzFdPDwxNik+PjE2LGgrPTIsaSsrO2Vsc2UgaWYoMTQ9PT11KXtpZihpPj00JiYoaS09NCx0aGlzLnNlYWNBbmFseXNpc0VuYWJsZWQpKXJldHVybiBlLnNlYWM9cy5zbGljZShpLGkrNCksITE7ZD1vW3VdfWVsc2UgaWYodT49MzImJnU8PTI0NilzW2ldPXUtMTM5LGkrKztlbHNlIGlmKHU+PTI0NyYmdTw9MjU0KXNbaV09dTwyNTE/KHUtMjQ3PDw4KSt0W2hdKzEwODotKHUtMjUxPDw4KS10W2hdLTEwOCxoKyssaSsrO2Vsc2UgaWYoMjU1PT09dSlzW2ldPSh0W2hdPDwyNHx0W2grMV08PDE2fHRbaCsyXTw8OHx0W2grM10pLzY1NTM2LGgrPTQsaSsrO2Vsc2UgaWYoMTk9PT11fHwyMD09PXUpe2lmKGUuaGludHMrPWk+PjEsMD09PWUuaGludHMpe3QuY29weVdpdGhpbihoLTEsaCwtMSksaC09MSxsLT0xO2NvbnRpbnVlfWgrPWUuaGludHMrNz4+MyxpJT0yLGQ9b1t1XX1lbHNle2lmKDEwPT09dXx8Mjk9PT11KXtjb25zdCB0PTEwPT09dT9yOmE7aWYoIXQpcmV0dXJuIGQ9b1t1XSwoMCxuLndhcm4pKCJNaXNzaW5nIHN1YnJzSW5kZXggZm9yICIrZC5pZCksITE7bGV0IGM9MzI3Njg7dC5jb3VudDwxMjQwP2M9MTA3OnQuY291bnQ8MzM5MDAmJihjPTExMzEpO2NvbnN0IGw9c1stLWldK2M7aWYobDwwfHxsPj10LmNvdW50fHxpc05hTihsKSlyZXR1cm4gZD1vW3VdLCgwLG4ud2FybikoIk91dCBvZiBib3VuZHMgc3VickluZGV4IGZvciAiK2QuaWQpLCExO2lmKGUuc3RhY2tTaXplPWksZS5jYWxsRGVwdGgrKywhdGhpcy5wYXJzZUNoYXJTdHJpbmcoZSx0LmdldChsKSxyLGEpKXJldHVybiExO2UuY2FsbERlcHRoLS0saT1lLnN0YWNrU2l6ZTtjb250aW51ZX1pZigxMT09PXUpcmV0dXJuIGUuc3RhY2tTaXplPWksITA7aWYoMD09PXUmJmg9PT10Lmxlbmd0aCl0W2gtMV09MTQsZD1vWzE0XTtlbHNle2lmKDk9PT11KXt0LmNvcHlXaXRoaW4oaC0xLGgsLTEpLGgtPTEsbC09MTtjb250aW51ZX1kPW9bdV19fWlmKGQpe2lmKGQuc3RlbSYmKGUuaGludHMrPWk+PjEsMz09PXV8fDIzPT09dT9lLmhhc1ZTdGVtcz0hMDohZS5oYXNWU3RlbXN8fDEhPT11JiYxOCE9PXV8fCgoMCxuLndhcm4pKCJDRkYgc3RlbSBoaW50cyBhcmUgaW4gd3Jvbmcgb3JkZXIiKSx0W2gtMV09MT09PXU/MzoyMykpLCJtaW4iaW4gZCYmIWUudW5kZWZTdGFjayYmaTxkLm1pbilyZXR1cm4oMCxuLndhcm4pKCJOb3QgZW5vdWdoIHBhcmFtZXRlcnMgZm9yICIrZC5pZCsiOyBhY3R1YWw6ICIraSsiLCBleHBlY3RlZDogIitkLm1pbiksMD09PWkmJih0W2gtMV09MTQsITApO2UuZmlyc3RTdGFja0NsZWFyaW5nJiZkLnN0YWNrQ2xlYXJpbmcmJihlLmZpcnN0U3RhY2tDbGVhcmluZz0hMSxpLT1kLm1pbixpPj0yJiZkLnN0ZW0/aSU9MjppPjEmJigwLG4ud2FybikoIkZvdW5kIHRvbyBtYW55IHBhcmFtZXRlcnMgZm9yIHN0YWNrLWNsZWFyaW5nIGNvbW1hbmQiKSxpPjAmJihlLndpZHRoPXNbaS0xXSkpLCJzdGFja0RlbHRhImluIGQ/KCJzdGFja0ZuImluIGQmJmQuc3RhY2tGbihzLGkpLGkrPWQuc3RhY2tEZWx0YSk6ZC5zdGFja0NsZWFyaW5nP2k9MDpkLnJlc2V0U3RhY2s/KGk9MCxlLnVuZGVmU3RhY2s9ITEpOmQudW5kZWZTdGFjayYmKGk9MCxlLnVuZGVmU3RhY2s9ITAsZS5maXJzdFN0YWNrQ2xlYXJpbmc9ITEpfX1yZXR1cm4gbDx0Lmxlbmd0aCYmdC5maWxsKDE0LGwpLGUuc3RhY2tTaXplPWksITB9cGFyc2VDaGFyU3RyaW5ncyhlKXtsZXR7Y2hhclN0cmluZ3M6dCxsb2NhbFN1YnJJbmRleDpyLGdsb2JhbFN1YnJJbmRleDphLGZkU2VsZWN0OmksZmRBcnJheTpzLHByaXZhdGVEaWN0Om99PWU7Y29uc3QgYz1bXSxsPVtdLGg9dC5jb3VudDtmb3IobGV0IGU9MDtlPGg7ZSsrKXtjb25zdCBoPXQuZ2V0KGUpLHU9e2NhbGxEZXB0aDowLHN0YWNrU2l6ZTowLHN0YWNrOltdLHVuZGVmU3RhY2s6ITAsaGludHM6MCxmaXJzdFN0YWNrQ2xlYXJpbmc6ITAsc2VhYzpudWxsLHdpZHRoOm51bGwsaGFzVlN0ZW1zOiExfTtsZXQgZD0hMCxmPW51bGwsZz1vO2lmKGkmJnMubGVuZ3RoKXtjb25zdCB0PWkuZ2V0RkRJbmRleChlKTstMT09PXQmJigoMCxuLndhcm4pKCJHbHlwaCBpbmRleCBpcyBub3QgaW4gZmQgc2VsZWN0LiIpLGQ9ITEpLHQ+PXMubGVuZ3RoJiYoKDAsbi53YXJuKSgiSW52YWxpZCBmZCBpbmRleCBmb3IgZ2x5cGggaW5kZXguIiksZD0hMSksZCYmKGc9c1t0XS5wcml2YXRlRGljdCxmPWcuc3VicnNJbmRleCl9ZWxzZSByJiYoZj1yKTtpZihkJiYoZD10aGlzLnBhcnNlQ2hhclN0cmluZyh1LGgsZixhKSksbnVsbCE9PXUud2lkdGgpe2NvbnN0IHQ9Zy5nZXRCeU5hbWUoIm5vbWluYWxXaWR0aFgiKTtsW2VdPXQrdS53aWR0aH1lbHNle2NvbnN0IHQ9Zy5nZXRCeU5hbWUoImRlZmF1bHRXaWR0aFgiKTtsW2VdPXR9bnVsbCE9PXUuc2VhYyYmKGNbZV09dS5zZWFjKSxkfHx0LnNldChlLG5ldyBVaW50OEFycmF5KFsxNF0pKX1yZXR1cm57Y2hhclN0cmluZ3M6dCxzZWFjczpjLHdpZHRoczpsfX1lbXB0eVByaXZhdGVEaWN0aW9uYXJ5KGUpe2NvbnN0IHQ9dGhpcy5jcmVhdGVEaWN0KGIsW10sZS5zdHJpbmdzKTtlLnNldEJ5S2V5KDE4LFswLDBdKSxlLnByaXZhdGVEaWN0PXR9cGFyc2VQcml2YXRlRGljdChlKXtpZighZS5oYXNOYW1lKCJQcml2YXRlIikpcmV0dXJuIHZvaWQgdGhpcy5lbXB0eVByaXZhdGVEaWN0aW9uYXJ5KGUpO2NvbnN0IHQ9ZS5nZXRCeU5hbWUoIlByaXZhdGUiKTtpZighQXJyYXkuaXNBcnJheSh0KXx8MiE9PXQubGVuZ3RoKXJldHVybiB2b2lkIGUucmVtb3ZlQnlOYW1lKCJQcml2YXRlIik7Y29uc3Qgcj10WzBdLG49dFsxXTtpZigwPT09cnx8bj49dGhpcy5ieXRlcy5sZW5ndGgpcmV0dXJuIHZvaWQgdGhpcy5lbXB0eVByaXZhdGVEaWN0aW9uYXJ5KGUpO2NvbnN0IGE9bityLGk9dGhpcy5ieXRlcy5zdWJhcnJheShuLGEpLHM9dGhpcy5wYXJzZURpY3QoaSksbz10aGlzLmNyZWF0ZURpY3QoYixzLGUuc3RyaW5ncyk7aWYoZS5wcml2YXRlRGljdD1vLDA9PT1vLmdldEJ5TmFtZSgiRXhwYW5zaW9uRmFjdG9yIikmJm8uc2V0QnlOYW1lKCJFeHBhbnNpb25GYWN0b3IiLC4wNiksIW8uZ2V0QnlOYW1lKCJTdWJycyIpKXJldHVybjtjb25zdCBjPW8uZ2V0QnlOYW1lKCJTdWJycyIpLGw9bitjO2lmKDA9PT1jfHxsPj10aGlzLmJ5dGVzLmxlbmd0aClyZXR1cm4gdm9pZCB0aGlzLmVtcHR5UHJpdmF0ZURpY3Rpb25hcnkoZSk7Y29uc3QgaD10aGlzLnBhcnNlSW5kZXgobCk7by5zdWJyc0luZGV4PWgub2JqfXBhcnNlQ2hhcnNldHMoZSx0LHIsaSl7aWYoMD09PWUpcmV0dXJuIG5ldyB3KCEwLHkuSVNPX0FET0JFLGEuSVNPQWRvYmVDaGFyc2V0KTtpZigxPT09ZSlyZXR1cm4gbmV3IHcoITAseS5FWFBFUlQsYS5FeHBlcnRDaGFyc2V0KTtpZigyPT09ZSlyZXR1cm4gbmV3IHcoITAseS5FWFBFUlRfU1VCU0VULGEuRXhwZXJ0U3Vic2V0Q2hhcnNldCk7Y29uc3Qgcz10aGlzLmJ5dGVzLG89ZSxjPXNbZSsrXSxsPVtpPzA6Ii5ub3RkZWYiXTtsZXQgaCx1LGQ7c3dpdGNoKHQtPTEsYyl7Y2FzZSAwOmZvcihkPTA7ZDx0O2QrKyloPXNbZSsrXTw8OHxzW2UrK10sbC5wdXNoKGk/aDpyLmdldChoKSk7YnJlYWs7Y2FzZSAxOmZvcig7bC5sZW5ndGg8PXQ7KWZvcihoPXNbZSsrXTw8OHxzW2UrK10sdT1zW2UrK10sZD0wO2Q8PXU7ZCsrKWwucHVzaChpP2grKzpyLmdldChoKyspKTticmVhaztjYXNlIDI6Zm9yKDtsLmxlbmd0aDw9dDspZm9yKGg9c1tlKytdPDw4fHNbZSsrXSx1PXNbZSsrXTw8OHxzW2UrK10sZD0wO2Q8PXU7ZCsrKWwucHVzaChpP2grKzpyLmdldChoKyspKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbmtub3duIGNoYXJzZXQgZm9ybWF0Iil9Y29uc3QgZj1lLGc9cy5zdWJhcnJheShvLGYpO3JldHVybiBuZXcgdyghMSxjLGwsZyl9cGFyc2VFbmNvZGluZyhlLHQscixhKXtjb25zdCBzPU9iamVjdC5jcmVhdGUobnVsbCksbz10aGlzLmJ5dGVzO2xldCBjLGwsaCx1PSExLGQ9bnVsbDtpZigwPT09ZXx8MT09PWUpe3U9ITAsYz1lO2NvbnN0IHQ9ZT9pLkV4cGVydEVuY29kaW5nOmkuU3RhbmRhcmRFbmNvZGluZztmb3IobD0wLGg9YS5sZW5ndGg7bDxoO2wrKyl7Y29uc3QgZT10LmluZGV4T2YoYVtsXSk7LTEhPT1lJiYoc1tlXT1sKX19ZWxzZXtjb25zdCB0PWU7c3dpdGNoKGM9b1tlKytdLDEyNyZjKXtjYXNlIDA6Y29uc3QgdD1vW2UrK107Zm9yKGw9MTtsPD10O2wrKylzW29bZSsrXV09bDticmVhaztjYXNlIDE6Y29uc3Qgcj1vW2UrK107bGV0IGE9MTtmb3IobD0wO2w8cjtsKyspe2NvbnN0IHQ9b1tlKytdLHI9b1tlKytdO2ZvcihsZXQgZT10O2U8PXQrcjtlKyspc1tlXT1hKyt9YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiVW5rbm93biBlbmNvZGluZyBmb3JtYXQ6ICIuY29uY2F0KGMsIiBpbiBDRkYiKSl9Y29uc3QgaT1lOzEyOCZjJiYob1t0XSY9MTI3LGZ1bmN0aW9uKCl7Y29uc3QgdD1vW2UrK107Zm9yKGw9MDtsPHQ7bCsrKXtjb25zdCB0PW9bZSsrXSxuPShvW2UrK108PDgpKygyNTUmb1tlKytdKTtzW3RdPWEuaW5kZXhPZihyLmdldChuKSl9fSgpKSxkPW8uc3ViYXJyYXkodCxpKX1yZXR1cm4gYyY9MTI3LG5ldyB2KHUsYyxzLGQpfXBhcnNlRkRTZWxlY3QoZSx0KXtjb25zdCByPXRoaXMuYnl0ZXMsYT1yW2UrK10saT1bXTtsZXQgcztzd2l0Y2goYSl7Y2FzZSAwOmZvcihzPTA7czx0Oysrcyl7Y29uc3QgdD1yW2UrK107aS5wdXNoKHQpfWJyZWFrO2Nhc2UgMzpjb25zdCBvPXJbZSsrXTw8OHxyW2UrK107Zm9yKHM9MDtzPG87KytzKXtsZXQgdD1yW2UrK108PDh8cltlKytdOzA9PT1zJiYwIT09dCYmKCgwLG4ud2FybikoInBhcnNlRkRTZWxlY3Q6IFRoZSBmaXJzdCByYW5nZSBtdXN0IGhhdmUgYSBmaXJzdCBHSUQgb2YgMCAtLSB0cnlpbmcgdG8gcmVjb3Zlci4iKSx0PTApO2NvbnN0IGE9cltlKytdLG89cltlXTw8OHxyW2UrMV07Zm9yKGxldCBlPXQ7ZTxvOysrZSlpLnB1c2goYSl9ZSs9MjticmVhaztkZWZhdWx0OnRocm93IG5ldyBuLkZvcm1hdEVycm9yKCdwYXJzZUZEU2VsZWN0OiBVbmtub3duIGZvcm1hdCAiJy5jb25jYXQoYSwnIi4nKSl9aWYoaS5sZW5ndGghPT10KXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJwYXJzZUZEU2VsZWN0OiBJbnZhbGlkIGZvbnQgZGF0YS4iKTtyZXR1cm4gbmV3IHgoYSxpKX19O2NsYXNzIGx7Y29uc3RydWN0b3IoKXt0aGlzLmhlYWRlcj1udWxsLHRoaXMubmFtZXM9W10sdGhpcy50b3BEaWN0PW51bGwsdGhpcy5zdHJpbmdzPW5ldyB1LHRoaXMuZ2xvYmFsU3VickluZGV4PW51bGwsdGhpcy5lbmNvZGluZz1udWxsLHRoaXMuY2hhcnNldD1udWxsLHRoaXMuY2hhclN0cmluZ3M9bnVsbCx0aGlzLmZkQXJyYXk9W10sdGhpcy5mZFNlbGVjdD1udWxsLHRoaXMuaXNDSURGb250PSExfWR1cGxpY2F0ZUZpcnN0R2x5cGgoKXtpZih0aGlzLmNoYXJTdHJpbmdzLmNvdW50Pj02NTUzNSlyZXR1cm4gdm9pZCgwLG4ud2FybikoIk5vdCBlbm91Z2ggc3BhY2UgaW4gY2hhcnN0cmluZ3MgdG8gZHVwbGljYXRlIGZpcnN0IGdseXBoLiIpO2NvbnN0IGU9dGhpcy5jaGFyU3RyaW5ncy5nZXQoMCk7dGhpcy5jaGFyU3RyaW5ncy5hZGQoZSksdGhpcy5pc0NJREZvbnQmJnRoaXMuZmRTZWxlY3QuZmRTZWxlY3QucHVzaCh0aGlzLmZkU2VsZWN0LmZkU2VsZWN0WzBdKX1oYXNHbHlwaElkKGUpe3JldHVybiEoZTwwfHxlPj10aGlzLmNoYXJTdHJpbmdzLmNvdW50KSYmdGhpcy5jaGFyU3RyaW5ncy5nZXQoZSkubGVuZ3RoPjB9fXQuQ0ZGPWw7Y2xhc3MgaHtjb25zdHJ1Y3RvcihlLHQscixuKXt0aGlzLm1ham9yPWUsdGhpcy5taW5vcj10LHRoaXMuaGRyU2l6ZT1yLHRoaXMub2ZmU2l6ZT1ufX10LkNGRkhlYWRlcj1oO2NsYXNzIHV7Y29uc3RydWN0b3IoKXt0aGlzLnN0cmluZ3M9W119Z2V0KGUpe3JldHVybiBlPj0wJiZlPD0zOTA/c1tlXTplLTM5MTw9dGhpcy5zdHJpbmdzLmxlbmd0aD90aGlzLnN0cmluZ3NbZS0zOTFdOnNbMF19Z2V0U0lEKGUpe2xldCB0PXMuaW5kZXhPZihlKTtyZXR1cm4tMSE9PXQ/dDoodD10aGlzLnN0cmluZ3MuaW5kZXhPZihlKSwtMSE9PXQ/dCszOTE6LTEpfWFkZChlKXt0aGlzLnN0cmluZ3MucHVzaChlKX1nZXQgY291bnQoKXtyZXR1cm4gdGhpcy5zdHJpbmdzLmxlbmd0aH19dC5DRkZTdHJpbmdzPXU7Y2xhc3MgZHtjb25zdHJ1Y3Rvcigpe3RoaXMub2JqZWN0cz1bXSx0aGlzLmxlbmd0aD0wfWFkZChlKXt0aGlzLmxlbmd0aCs9ZS5sZW5ndGgsdGhpcy5vYmplY3RzLnB1c2goZSl9c2V0KGUsdCl7dGhpcy5sZW5ndGgrPXQubGVuZ3RoLXRoaXMub2JqZWN0c1tlXS5sZW5ndGgsdGhpcy5vYmplY3RzW2VdPXR9Z2V0KGUpe3JldHVybiB0aGlzLm9iamVjdHNbZV19Z2V0IGNvdW50KCl7cmV0dXJuIHRoaXMub2JqZWN0cy5sZW5ndGh9fXQuQ0ZGSW5kZXg9ZDtjbGFzcyBme2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5rZXlUb05hbWVNYXA9ZS5rZXlUb05hbWVNYXAsdGhpcy5uYW1lVG9LZXlNYXA9ZS5uYW1lVG9LZXlNYXAsdGhpcy5kZWZhdWx0cz1lLmRlZmF1bHRzLHRoaXMudHlwZXM9ZS50eXBlcyx0aGlzLm9wY29kZXM9ZS5vcGNvZGVzLHRoaXMub3JkZXI9ZS5vcmRlcix0aGlzLnN0cmluZ3M9dCx0aGlzLnZhbHVlcz1PYmplY3QuY3JlYXRlKG51bGwpfXNldEJ5S2V5KGUsdCl7aWYoIShlIGluIHRoaXMua2V5VG9OYW1lTWFwKSlyZXR1cm4hMTtpZigwPT09dC5sZW5ndGgpcmV0dXJuITA7Zm9yKGNvbnN0IHIgb2YgdClpZihpc05hTihyKSlyZXR1cm4oMCxuLndhcm4pKCdJbnZhbGlkIENGRkRpY3QgdmFsdWU6ICInLmNvbmNhdCh0LCciIGZvciBrZXkgIicpLmNvbmNhdChlLCciLicpKSwhMDtjb25zdCByPXRoaXMudHlwZXNbZV07cmV0dXJuIm51bSIhPT1yJiYic2lkIiE9PXImJiJvZmZzZXQiIT09cnx8KHQ9dFswXSksdGhpcy52YWx1ZXNbZV09dCwhMH1zZXRCeU5hbWUoZSx0KXtpZighKGUgaW4gdGhpcy5uYW1lVG9LZXlNYXApKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCdJbnZhbGlkIGRpY3Rpb25hcnkgbmFtZSAiJy5jb25jYXQoZSwnIicpKTt0aGlzLnZhbHVlc1t0aGlzLm5hbWVUb0tleU1hcFtlXV09dH1oYXNOYW1lKGUpe3JldHVybiB0aGlzLm5hbWVUb0tleU1hcFtlXWluIHRoaXMudmFsdWVzfWdldEJ5TmFtZShlKXtpZighKGUgaW4gdGhpcy5uYW1lVG9LZXlNYXApKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIGRpY3Rpb25hcnkgbmFtZSAiLmNvbmNhdChlLCciJykpO2NvbnN0IHQ9dGhpcy5uYW1lVG9LZXlNYXBbZV07cmV0dXJuIHQgaW4gdGhpcy52YWx1ZXM/dGhpcy52YWx1ZXNbdF06dGhpcy5kZWZhdWx0c1t0XX1yZW1vdmVCeU5hbWUoZSl7ZGVsZXRlIHRoaXMudmFsdWVzW3RoaXMubmFtZVRvS2V5TWFwW2VdXX1zdGF0aWMgY3JlYXRlVGFibGVzKGUpe2NvbnN0IHQ9e2tleVRvTmFtZU1hcDp7fSxuYW1lVG9LZXlNYXA6e30sZGVmYXVsdHM6e30sdHlwZXM6e30sb3Bjb2Rlczp7fSxvcmRlcjpbXX07Zm9yKGNvbnN0IHIgb2YgZSl7Y29uc3QgZT1BcnJheS5pc0FycmF5KHJbMF0pPyhyWzBdWzBdPDw4KStyWzBdWzFdOnJbMF07dC5rZXlUb05hbWVNYXBbZV09clsxXSx0Lm5hbWVUb0tleU1hcFtyWzFdXT1lLHQudHlwZXNbZV09clsyXSx0LmRlZmF1bHRzW2VdPXJbM10sdC5vcGNvZGVzW2VdPUFycmF5LmlzQXJyYXkoclswXSk/clswXTpbclswXV0sdC5vcmRlci5wdXNoKGUpfXJldHVybiB0fX1jb25zdCBnPVtbWzEyLDMwXSwiUk9TIixbInNpZCIsInNpZCIsIm51bSJdLG51bGxdLFtbMTIsMjBdLCJTeW50aGV0aWNCYXNlIiwibnVtIixudWxsXSxbMCwidmVyc2lvbiIsInNpZCIsbnVsbF0sWzEsIk5vdGljZSIsInNpZCIsbnVsbF0sW1sxMiwwXSwiQ29weXJpZ2h0Iiwic2lkIixudWxsXSxbMiwiRnVsbE5hbWUiLCJzaWQiLG51bGxdLFszLCJGYW1pbHlOYW1lIiwic2lkIixudWxsXSxbNCwiV2VpZ2h0Iiwic2lkIixudWxsXSxbWzEyLDFdLCJpc0ZpeGVkUGl0Y2giLCJudW0iLDBdLFtbMTIsMl0sIkl0YWxpY0FuZ2xlIiwibnVtIiwwXSxbWzEyLDNdLCJVbmRlcmxpbmVQb3NpdGlvbiIsIm51bSIsLTEwMF0sW1sxMiw0XSwiVW5kZXJsaW5lVGhpY2tuZXNzIiwibnVtIiw1MF0sW1sxMiw1XSwiUGFpbnRUeXBlIiwibnVtIiwwXSxbWzEyLDZdLCJDaGFyc3RyaW5nVHlwZSIsIm51bSIsMl0sW1sxMiw3XSwiRm9udE1hdHJpeCIsWyJudW0iLCJudW0iLCJudW0iLCJudW0iLCJudW0iLCJudW0iXSxbLjAwMSwwLDAsLjAwMSwwLDBdXSxbMTMsIlVuaXF1ZUlEIiwibnVtIixudWxsXSxbNSwiRm9udEJCb3giLFsibnVtIiwibnVtIiwibnVtIiwibnVtIl0sWzAsMCwwLDBdXSxbWzEyLDhdLCJTdHJva2VXaWR0aCIsIm51bSIsMF0sWzE0LCJYVUlEIiwiYXJyYXkiLG51bGxdLFsxNSwiY2hhcnNldCIsIm9mZnNldCIsMF0sWzE2LCJFbmNvZGluZyIsIm9mZnNldCIsMF0sWzE3LCJDaGFyU3RyaW5ncyIsIm9mZnNldCIsMF0sWzE4LCJQcml2YXRlIixbIm9mZnNldCIsIm9mZnNldCJdLG51bGxdLFtbMTIsMjFdLCJQb3N0U2NyaXB0Iiwic2lkIixudWxsXSxbWzEyLDIyXSwiQmFzZUZvbnROYW1lIiwic2lkIixudWxsXSxbWzEyLDIzXSwiQmFzZUZvbnRCbGVuZCIsImRlbHRhIixudWxsXSxbWzEyLDMxXSwiQ0lERm9udFZlcnNpb24iLCJudW0iLDBdLFtbMTIsMzJdLCJDSURGb250UmV2aXNpb24iLCJudW0iLDBdLFtbMTIsMzNdLCJDSURGb250VHlwZSIsIm51bSIsMF0sW1sxMiwzNF0sIkNJRENvdW50IiwibnVtIiw4NzIwXSxbWzEyLDM1XSwiVUlEQmFzZSIsIm51bSIsbnVsbF0sW1sxMiwzN10sIkZEU2VsZWN0Iiwib2Zmc2V0IixudWxsXSxbWzEyLDM2XSwiRkRBcnJheSIsIm9mZnNldCIsbnVsbF0sW1sxMiwzOF0sIkZvbnROYW1lIiwic2lkIixudWxsXV07Y2xhc3MgcCBleHRlbmRzIGZ7c3RhdGljIGdldCB0YWJsZXMoKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywidGFibGVzIix0aGlzLmNyZWF0ZVRhYmxlcyhnKSl9Y29uc3RydWN0b3IoZSl7c3VwZXIocC50YWJsZXMsZSksdGhpcy5wcml2YXRlRGljdD1udWxsfX10LkNGRlRvcERpY3Q9cDtjb25zdCBtPVtbNiwiQmx1ZVZhbHVlcyIsImRlbHRhIixudWxsXSxbNywiT3RoZXJCbHVlcyIsImRlbHRhIixudWxsXSxbOCwiRmFtaWx5Qmx1ZXMiLCJkZWx0YSIsbnVsbF0sWzksIkZhbWlseU90aGVyQmx1ZXMiLCJkZWx0YSIsbnVsbF0sW1sxMiw5XSwiQmx1ZVNjYWxlIiwibnVtIiwuMDM5NjI1XSxbWzEyLDEwXSwiQmx1ZVNoaWZ0IiwibnVtIiw3XSxbWzEyLDExXSwiQmx1ZUZ1enoiLCJudW0iLDFdLFsxMCwiU3RkSFciLCJudW0iLG51bGxdLFsxMSwiU3RkVlciLCJudW0iLG51bGxdLFtbMTIsMTJdLCJTdGVtU25hcEgiLCJkZWx0YSIsbnVsbF0sW1sxMiwxM10sIlN0ZW1TbmFwViIsImRlbHRhIixudWxsXSxbWzEyLDE0XSwiRm9yY2VCb2xkIiwibnVtIiwwXSxbWzEyLDE3XSwiTGFuZ3VhZ2VHcm91cCIsIm51bSIsMF0sW1sxMiwxOF0sIkV4cGFuc2lvbkZhY3RvciIsIm51bSIsLjA2XSxbWzEyLDE5XSwiaW5pdGlhbFJhbmRvbVNlZWQiLCJudW0iLDBdLFsyMCwiZGVmYXVsdFdpZHRoWCIsIm51bSIsMF0sWzIxLCJub21pbmFsV2lkdGhYIiwibnVtIiwwXSxbMTksIlN1YnJzIiwib2Zmc2V0IixudWxsXV07Y2xhc3MgYiBleHRlbmRzIGZ7c3RhdGljIGdldCB0YWJsZXMoKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywidGFibGVzIix0aGlzLmNyZWF0ZVRhYmxlcyhtKSl9Y29uc3RydWN0b3IoZSl7c3VwZXIoYi50YWJsZXMsZSksdGhpcy5zdWJyc0luZGV4PW51bGx9fXQuQ0ZGUHJpdmF0ZURpY3Q9Yjtjb25zdCB5PXtJU09fQURPQkU6MCxFWFBFUlQ6MSxFWFBFUlRfU1VCU0VUOjJ9O2NsYXNzIHd7Y29uc3RydWN0b3IoZSx0LHIsbil7dGhpcy5wcmVkZWZpbmVkPWUsdGhpcy5mb3JtYXQ9dCx0aGlzLmNoYXJzZXQ9cix0aGlzLnJhdz1ufX10LkNGRkNoYXJzZXQ9dztjbGFzcyB2e2NvbnN0cnVjdG9yKGUsdCxyLG4pe3RoaXMucHJlZGVmaW5lZD1lLHRoaXMuZm9ybWF0PXQsdGhpcy5lbmNvZGluZz1yLHRoaXMucmF3PW59fWNsYXNzIHh7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmZvcm1hdD1lLHRoaXMuZmRTZWxlY3Q9dH1nZXRGREluZGV4KGUpe3JldHVybiBlPDB8fGU+PXRoaXMuZmRTZWxlY3QubGVuZ3RoPy0xOnRoaXMuZmRTZWxlY3RbZV19fXQuQ0ZGRkRTZWxlY3Q9eDtjbGFzcyBTe2NvbnN0cnVjdG9yKCl7dGhpcy5vZmZzZXRzPU9iamVjdC5jcmVhdGUobnVsbCl9aXNUcmFja2luZyhlKXtyZXR1cm4gZSBpbiB0aGlzLm9mZnNldHN9dHJhY2soZSx0KXtpZihlIGluIHRoaXMub2Zmc2V0cyl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiQWxyZWFkeSB0cmFja2luZyBsb2NhdGlvbiBvZiAiLmNvbmNhdChlKSk7dGhpcy5vZmZzZXRzW2VdPXR9b2Zmc2V0KGUpe2Zvcihjb25zdCB0IGluIHRoaXMub2Zmc2V0cyl0aGlzLm9mZnNldHNbdF0rPWV9c2V0RW50cnlMb2NhdGlvbihlLHQscil7aWYoIShlIGluIHRoaXMub2Zmc2V0cykpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIk5vdCB0cmFja2luZyBsb2NhdGlvbiBvZiAiLmNvbmNhdChlKSk7Y29uc3QgYT1yLmRhdGEsaT10aGlzLm9mZnNldHNbZV07Zm9yKGxldCBlPTAscj10Lmxlbmd0aDtlPHI7KytlKXtjb25zdCByPTUqZStpLHM9cisxLG89cisyLGM9ciszLGw9cis0O2lmKDI5IT09YVtyXXx8MCE9PWFbc118fDAhPT1hW29dfHwwIT09YVtjXXx8MCE9PWFbbF0pdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIndyaXRpbmcgdG8gYW4gb2Zmc2V0IHRoYXQgaXMgbm90IGVtcHR5Iik7Y29uc3QgaD10W2VdO2Fbcl09MjksYVtzXT1oPj4yNCYyNTUsYVtvXT1oPj4xNiYyNTUsYVtjXT1oPj44JjI1NSxhW2xdPTI1NSZofX19Y2xhc3MgQXtjb25zdHJ1Y3RvcihlKXt0aGlzLmNmZj1lfWNvbXBpbGUoKXtjb25zdCBlPXRoaXMuY2ZmLHQ9e2RhdGE6W10sbGVuZ3RoOjAsYWRkKGUpe3RyeXt0aGlzLmRhdGEucHVzaCguLi5lKX1jYXRjaCh0KXt0aGlzLmRhdGE9dGhpcy5kYXRhLmNvbmNhdChlKX10aGlzLmxlbmd0aD10aGlzLmRhdGEubGVuZ3RofX0scj10aGlzLmNvbXBpbGVIZWFkZXIoZS5oZWFkZXIpO3QuYWRkKHIpO2NvbnN0IGE9dGhpcy5jb21waWxlTmFtZUluZGV4KGUubmFtZXMpO2lmKHQuYWRkKGEpLGUuaXNDSURGb250JiZlLnRvcERpY3QuaGFzTmFtZSgiRm9udE1hdHJpeCIpKXtjb25zdCB0PWUudG9wRGljdC5nZXRCeU5hbWUoIkZvbnRNYXRyaXgiKTtlLnRvcERpY3QucmVtb3ZlQnlOYW1lKCJGb250TWF0cml4Iik7Zm9yKGNvbnN0IHIgb2YgZS5mZEFycmF5KXtsZXQgZT10LnNsaWNlKDApO3IuaGFzTmFtZSgiRm9udE1hdHJpeCIpJiYoZT1uLlV0aWwudHJhbnNmb3JtKGUsci5nZXRCeU5hbWUoIkZvbnRNYXRyaXgiKSkpLHIuc2V0QnlOYW1lKCJGb250TWF0cml4IixlKX19Y29uc3QgaT1lLnRvcERpY3QuZ2V0QnlOYW1lKCJYVUlEIik7KG51bGw9PWk/dm9pZCAwOmkubGVuZ3RoKT4xNiYmZS50b3BEaWN0LnJlbW92ZUJ5TmFtZSgiWFVJRCIpLGUudG9wRGljdC5zZXRCeU5hbWUoImNoYXJzZXQiLDApO2xldCBzPXRoaXMuY29tcGlsZVRvcERpY3RzKFtlLnRvcERpY3RdLHQubGVuZ3RoLGUuaXNDSURGb250KTt0LmFkZChzLm91dHB1dCk7Y29uc3Qgbz1zLnRyYWNrZXJzWzBdLGM9dGhpcy5jb21waWxlU3RyaW5nSW5kZXgoZS5zdHJpbmdzLnN0cmluZ3MpO3QuYWRkKGMpO2NvbnN0IGw9dGhpcy5jb21waWxlSW5kZXgoZS5nbG9iYWxTdWJySW5kZXgpO2lmKHQuYWRkKGwpLGUuZW5jb2RpbmcmJmUudG9wRGljdC5oYXNOYW1lKCJFbmNvZGluZyIpKWlmKGUuZW5jb2RpbmcucHJlZGVmaW5lZClvLnNldEVudHJ5TG9jYXRpb24oIkVuY29kaW5nIixbZS5lbmNvZGluZy5mb3JtYXRdLHQpO2Vsc2V7Y29uc3Qgcj10aGlzLmNvbXBpbGVFbmNvZGluZyhlLmVuY29kaW5nKTtvLnNldEVudHJ5TG9jYXRpb24oIkVuY29kaW5nIixbdC5sZW5ndGhdLHQpLHQuYWRkKHIpfWNvbnN0IGg9dGhpcy5jb21waWxlQ2hhcnNldChlLmNoYXJzZXQsZS5jaGFyU3RyaW5ncy5jb3VudCxlLnN0cmluZ3MsZS5pc0NJREZvbnQpO28uc2V0RW50cnlMb2NhdGlvbigiY2hhcnNldCIsW3QubGVuZ3RoXSx0KSx0LmFkZChoKTtjb25zdCB1PXRoaXMuY29tcGlsZUNoYXJTdHJpbmdzKGUuY2hhclN0cmluZ3MpO2lmKG8uc2V0RW50cnlMb2NhdGlvbigiQ2hhclN0cmluZ3MiLFt0Lmxlbmd0aF0sdCksdC5hZGQodSksZS5pc0NJREZvbnQpe28uc2V0RW50cnlMb2NhdGlvbigiRkRTZWxlY3QiLFt0Lmxlbmd0aF0sdCk7Y29uc3Qgcj10aGlzLmNvbXBpbGVGRFNlbGVjdChlLmZkU2VsZWN0KTt0LmFkZChyKSxzPXRoaXMuY29tcGlsZVRvcERpY3RzKGUuZmRBcnJheSx0Lmxlbmd0aCwhMCksby5zZXRFbnRyeUxvY2F0aW9uKCJGREFycmF5IixbdC5sZW5ndGhdLHQpLHQuYWRkKHMub3V0cHV0KTtjb25zdCBuPXMudHJhY2tlcnM7dGhpcy5jb21waWxlUHJpdmF0ZURpY3RzKGUuZmRBcnJheSxuLHQpfXJldHVybiB0aGlzLmNvbXBpbGVQcml2YXRlRGljdHMoW2UudG9wRGljdF0sW29dLHQpLHQuYWRkKFswXSksdC5kYXRhfWVuY29kZU51bWJlcihlKXtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihlKT90aGlzLmVuY29kZUludGVnZXIoZSk6dGhpcy5lbmNvZGVGbG9hdChlKX1zdGF0aWMgZ2V0IEVuY29kZUZsb2F0UmVnRXhwKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIkVuY29kZUZsb2F0UmVnRXhwIiwvXC4oXGQqPykoPzo5ezUsMjB9fDB7NSwyMH0pXGR7MCwyfSg/OmUoLispfCQpLyl9ZW5jb2RlRmxvYXQoZSl7bGV0IHQ9ZS50b1N0cmluZygpO2NvbnN0IHI9QS5FbmNvZGVGbG9hdFJlZ0V4cC5leGVjKHQpO2lmKHIpe2NvbnN0IG49cGFyc2VGbG9hdCgiMWUiKygoclsyXT8rclsyXTowKStyWzFdLmxlbmd0aCkpO3Q9KE1hdGgucm91bmQoZSpuKS9uKS50b1N0cmluZygpfWxldCBuLGEsaT0iIjtmb3Iobj0wLGE9dC5sZW5ndGg7bjxhOysrbil7Y29uc3QgZT10W25dO2krPSJlIj09PWU/Ii0iPT09dFsrK25dPyJjIjoiYiI6Ii4iPT09ZT8iYSI6Ii0iPT09ZT8iZSI6ZX1pKz0xJmkubGVuZ3RoPyJmIjoiZmYiO2NvbnN0IHM9WzMwXTtmb3Iobj0wLGE9aS5sZW5ndGg7bjxhO24rPTIpcy5wdXNoKHBhcnNlSW50KGkuc3Vic3RyaW5nKG4sbisyKSwxNikpO3JldHVybiBzfWVuY29kZUludGVnZXIoZSl7bGV0IHQ7cmV0dXJuIHQ9ZT49LTEwNyYmZTw9MTA3P1tlKzEzOV06ZT49MTA4JiZlPD0xMTMxP1syNDcrKChlLT0xMDgpPj44KSwyNTUmZV06ZT49LTExMzEmJmU8PS0xMDg/WzI1MSsoKGU9LWUtMTA4KT4+OCksMjU1JmVdOmU+PS0zMjc2OCYmZTw9MzI3Njc/WzI4LGU+PjgmMjU1LDI1NSZlXTpbMjksZT4+MjQmMjU1LGU+PjE2JjI1NSxlPj44JjI1NSwyNTUmZV0sdH1jb21waWxlSGVhZGVyKGUpe3JldHVybltlLm1ham9yLGUubWlub3IsNCxlLm9mZlNpemVdfWNvbXBpbGVOYW1lSW5kZXgoZSl7Y29uc3QgdD1uZXcgZDtmb3IoY29uc3QgciBvZiBlKXtjb25zdCBlPU1hdGgubWluKHIubGVuZ3RoLDEyNyk7bGV0IGE9bmV3IEFycmF5KGUpO2ZvcihsZXQgdD0wO3Q8ZTt0Kyspe2xldCBlPXJbdF07KGU8IiEifHxlPiJ+Inx8IlsiPT09ZXx8Il0iPT09ZXx8IigiPT09ZXx8IikiPT09ZXx8InsiPT09ZXx8In0iPT09ZXx8IjwiPT09ZXx8Ij4iPT09ZXx8Ii8iPT09ZXx8IiUiPT09ZSkmJihlPSJfIiksYVt0XT1lfWE9YS5qb2luKCIiKSwiIj09PWEmJihhPSJCYWRfRm9udF9OYW1lIiksdC5hZGQoKDAsbi5zdHJpbmdUb0J5dGVzKShhKSl9cmV0dXJuIHRoaXMuY29tcGlsZUluZGV4KHQpfWNvbXBpbGVUb3BEaWN0cyhlLHQscil7Y29uc3Qgbj1bXTtsZXQgYT1uZXcgZDtmb3IoY29uc3QgaSBvZiBlKXtyJiYoaS5yZW1vdmVCeU5hbWUoIkNJREZvbnRWZXJzaW9uIiksaS5yZW1vdmVCeU5hbWUoIkNJREZvbnRSZXZpc2lvbiIpLGkucmVtb3ZlQnlOYW1lKCJDSURGb250VHlwZSIpLGkucmVtb3ZlQnlOYW1lKCJDSURDb3VudCIpLGkucmVtb3ZlQnlOYW1lKCJVSURCYXNlIikpO2NvbnN0IGU9bmV3IFMscz10aGlzLmNvbXBpbGVEaWN0KGksZSk7bi5wdXNoKGUpLGEuYWRkKHMpLGUub2Zmc2V0KHQpfXJldHVybiBhPXRoaXMuY29tcGlsZUluZGV4KGEsbikse3RyYWNrZXJzOm4sb3V0cHV0OmF9fWNvbXBpbGVQcml2YXRlRGljdHMoZSx0LHIpe2ZvcihsZXQgYT0wLGk9ZS5sZW5ndGg7YTxpOysrYSl7Y29uc3QgaT1lW2FdLHM9aS5wcml2YXRlRGljdDtpZighc3x8IWkuaGFzTmFtZSgiUHJpdmF0ZSIpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJUaGVyZSBtdXN0IGJlIGEgcHJpdmF0ZSBkaWN0aW9uYXJ5LiIpO2NvbnN0IG89bmV3IFMsYz10aGlzLmNvbXBpbGVEaWN0KHMsbyk7bGV0IGw9ci5sZW5ndGg7aWYoby5vZmZzZXQobCksYy5sZW5ndGh8fChsPTApLHRbYV0uc2V0RW50cnlMb2NhdGlvbigiUHJpdmF0ZSIsW2MubGVuZ3RoLGxdLHIpLHIuYWRkKGMpLHMuc3VicnNJbmRleCYmcy5oYXNOYW1lKCJTdWJycyIpKXtjb25zdCBlPXRoaXMuY29tcGlsZUluZGV4KHMuc3VicnNJbmRleCk7by5zZXRFbnRyeUxvY2F0aW9uKCJTdWJycyIsW2MubGVuZ3RoXSxyKSxyLmFkZChlKX19fWNvbXBpbGVEaWN0KGUsdCl7Y29uc3Qgcj1bXTtmb3IoY29uc3QgYSBvZiBlLm9yZGVyKXtpZighKGEgaW4gZS52YWx1ZXMpKWNvbnRpbnVlO2xldCBpPWUudmFsdWVzW2FdLHM9ZS50eXBlc1thXTtpZihBcnJheS5pc0FycmF5KHMpfHwocz1bc10pLEFycmF5LmlzQXJyYXkoaSl8fChpPVtpXSksMCE9PWkubGVuZ3RoKXtmb3IobGV0IG89MCxjPXMubGVuZ3RoO288YzsrK28pe2NvbnN0IGM9c1tvXSxsPWlbb107c3dpdGNoKGMpe2Nhc2UibnVtIjpjYXNlInNpZCI6ci5wdXNoKC4uLnRoaXMuZW5jb2RlTnVtYmVyKGwpKTticmVhaztjYXNlIm9mZnNldCI6Y29uc3Qgcz1lLmtleVRvTmFtZU1hcFthXTt0LmlzVHJhY2tpbmcocyl8fHQudHJhY2socyxyLmxlbmd0aCksci5wdXNoKDI5LDAsMCwwLDApO2JyZWFrO2Nhc2UiYXJyYXkiOmNhc2UiZGVsdGEiOnIucHVzaCguLi50aGlzLmVuY29kZU51bWJlcihsKSk7Zm9yKGxldCBlPTEsdD1pLmxlbmd0aDtlPHQ7KytlKXIucHVzaCguLi50aGlzLmVuY29kZU51bWJlcihpW2VdKSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiVW5rbm93biBkYXRhIHR5cGUgb2YgIi5jb25jYXQoYykpfX1yLnB1c2goLi4uZS5vcGNvZGVzW2FdKX19cmV0dXJuIHJ9Y29tcGlsZVN0cmluZ0luZGV4KGUpe2NvbnN0IHQ9bmV3IGQ7Zm9yKGNvbnN0IHIgb2YgZSl0LmFkZCgoMCxuLnN0cmluZ1RvQnl0ZXMpKHIpKTtyZXR1cm4gdGhpcy5jb21waWxlSW5kZXgodCl9Y29tcGlsZUNoYXJTdHJpbmdzKGUpe2NvbnN0IHQ9bmV3IGQ7Zm9yKGxldCByPTA7cjxlLmNvdW50O3IrKyl7Y29uc3Qgbj1lLmdldChyKTswIT09bi5sZW5ndGg/dC5hZGQobik6dC5hZGQobmV3IFVpbnQ4QXJyYXkoWzEzOSwxNF0pKX1yZXR1cm4gdGhpcy5jb21waWxlSW5kZXgodCl9Y29tcGlsZUNoYXJzZXQoZSx0LHIsYSl7bGV0IGk7Y29uc3Qgcz10LTE7aWYoYSlpPW5ldyBVaW50OEFycmF5KFsyLDAsMCxzPj44JjI1NSwyNTUmc10pO2Vsc2V7aT1uZXcgVWludDhBcnJheSgxKzIqcyksaVswXT0wO2xldCB0PTA7Y29uc3QgYT1lLmNoYXJzZXQubGVuZ3RoO2xldCBvPSExO2ZvcihsZXQgcz0xO3M8aS5sZW5ndGg7cys9Mil7bGV0IGM9MDtpZih0PGEpe2NvbnN0IGE9ZS5jaGFyc2V0W3QrK107Yz1yLmdldFNJRChhKSwtMT09PWMmJihjPTAsb3x8KG89ITAsKDAsbi53YXJuKSgiQ291bGRuJ3QgZmluZCAiLmNvbmNhdChhLCIgaW4gQ0ZGIHN0cmluZ3MiKSkpKX1pW3NdPWM+PjgmMjU1LGlbcysxXT0yNTUmY319cmV0dXJuIHRoaXMuY29tcGlsZVR5cGVkQXJyYXkoaSl9Y29tcGlsZUVuY29kaW5nKGUpe3JldHVybiB0aGlzLmNvbXBpbGVUeXBlZEFycmF5KGUucmF3KX1jb21waWxlRkRTZWxlY3QoZSl7Y29uc3QgdD1lLmZvcm1hdDtsZXQgcixuO3N3aXRjaCh0KXtjYXNlIDA6Zm9yKHI9bmV3IFVpbnQ4QXJyYXkoMStlLmZkU2VsZWN0Lmxlbmd0aCksclswXT10LG49MDtuPGUuZmRTZWxlY3QubGVuZ3RoO24rKylyW24rMV09ZS5mZFNlbGVjdFtuXTticmVhaztjYXNlIDM6Y29uc3QgYT0wO2xldCBpPWUuZmRTZWxlY3RbMF07Y29uc3Qgcz1bdCwwLDAsYT4+OCYyNTUsMjU1JmEsaV07Zm9yKG49MTtuPGUuZmRTZWxlY3QubGVuZ3RoO24rKyl7Y29uc3QgdD1lLmZkU2VsZWN0W25dO3QhPT1pJiYocy5wdXNoKG4+PjgmMjU1LDI1NSZuLHQpLGk9dCl9Y29uc3Qgbz0ocy5sZW5ndGgtMykvMztzWzFdPW8+PjgmMjU1LHNbMl09MjU1Jm8scy5wdXNoKG4+PjgmMjU1LDI1NSZuKSxyPW5ldyBVaW50OEFycmF5KHMpfXJldHVybiB0aGlzLmNvbXBpbGVUeXBlZEFycmF5KHIpfWNvbXBpbGVUeXBlZEFycmF5KGUpe3JldHVybiBBcnJheS5mcm9tKGUpfWNvbXBpbGVJbmRleChlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W107Y29uc3Qgcj1lLm9iamVjdHMsbj1yLmxlbmd0aDtpZigwPT09bilyZXR1cm5bMCwwXTtjb25zdCBhPVtuPj44JjI1NSwyNTUmbl07bGV0IGkscyxvPTE7Zm9yKGk9MDtpPG47KytpKW8rPXJbaV0ubGVuZ3RoO3M9bzwyNTY/MTpvPDY1NTM2PzI6bzwxNjc3NzIxNj8zOjQsYS5wdXNoKHMpO2xldCBjPTE7Zm9yKGk9MDtpPG4rMTtpKyspMT09PXM/YS5wdXNoKDI1NSZjKToyPT09cz9hLnB1c2goYz4+OCYyNTUsMjU1JmMpOjM9PT1zP2EucHVzaChjPj4xNiYyNTUsYz4+OCYyNTUsMjU1JmMpOmEucHVzaChjPj4+MjQmMjU1LGM+PjE2JjI1NSxjPj44JjI1NSwyNTUmYykscltpXSYmKGMrPXJbaV0ubGVuZ3RoKTtmb3IoaT0wO2k8bjtpKyspdFtpXSYmdFtpXS5vZmZzZXQoYS5sZW5ndGgpLGEucHVzaCguLi5yW2ldKTtyZXR1cm4gYX19dC5DRkZDb21waWxlcj1BfSwoZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LklTT0Fkb2JlQ2hhcnNldD10LkV4cGVydFN1YnNldENoYXJzZXQ9dC5FeHBlcnRDaGFyc2V0PXZvaWQgMCx0LklTT0Fkb2JlQ2hhcnNldD1bIi5ub3RkZWYiLCJzcGFjZSIsImV4Y2xhbSIsInF1b3RlZGJsIiwibnVtYmVyc2lnbiIsImRvbGxhciIsInBlcmNlbnQiLCJhbXBlcnNhbmQiLCJxdW90ZXJpZ2h0IiwicGFyZW5sZWZ0IiwicGFyZW5yaWdodCIsImFzdGVyaXNrIiwicGx1cyIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwic2xhc2giLCJ6ZXJvIiwib25lIiwidHdvIiwidGhyZWUiLCJmb3VyIiwiZml2ZSIsInNpeCIsInNldmVuIiwiZWlnaHQiLCJuaW5lIiwiY29sb24iLCJzZW1pY29sb24iLCJsZXNzIiwiZXF1YWwiLCJncmVhdGVyIiwicXVlc3Rpb24iLCJhdCIsIkEiLCJCIiwiQyIsIkQiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJOIiwiTyIsIlAiLCJRIiwiUiIsIlMiLCJUIiwiVSIsIlYiLCJXIiwiWCIsIlkiLCJaIiwiYnJhY2tldGxlZnQiLCJiYWNrc2xhc2giLCJicmFja2V0cmlnaHQiLCJhc2NpaWNpcmN1bSIsInVuZGVyc2NvcmUiLCJxdW90ZWxlZnQiLCJhIiwiYiIsImMiLCJkIiwiZSIsImYiLCJnIiwiaCIsImkiLCJqIiwiayIsImwiLCJtIiwibiIsIm8iLCJwIiwicSIsInIiLCJzIiwidCIsInUiLCJ2IiwidyIsIngiLCJ5IiwieiIsImJyYWNlbGVmdCIsImJhciIsImJyYWNlcmlnaHQiLCJhc2NpaXRpbGRlIiwiZXhjbGFtZG93biIsImNlbnQiLCJzdGVybGluZyIsImZyYWN0aW9uIiwieWVuIiwiZmxvcmluIiwic2VjdGlvbiIsImN1cnJlbmN5IiwicXVvdGVzaW5nbGUiLCJxdW90ZWRibGxlZnQiLCJndWlsbGVtb3RsZWZ0IiwiZ3VpbHNpbmdsbGVmdCIsImd1aWxzaW5nbHJpZ2h0IiwiZmkiLCJmbCIsImVuZGFzaCIsImRhZ2dlciIsImRhZ2dlcmRibCIsInBlcmlvZGNlbnRlcmVkIiwicGFyYWdyYXBoIiwiYnVsbGV0IiwicXVvdGVzaW5nbGJhc2UiLCJxdW90ZWRibGJhc2UiLCJxdW90ZWRibHJpZ2h0IiwiZ3VpbGxlbW90cmlnaHQiLCJlbGxpcHNpcyIsInBlcnRob3VzYW5kIiwicXVlc3Rpb25kb3duIiwiZ3JhdmUiLCJhY3V0ZSIsImNpcmN1bWZsZXgiLCJ0aWxkZSIsIm1hY3JvbiIsImJyZXZlIiwiZG90YWNjZW50IiwiZGllcmVzaXMiLCJyaW5nIiwiY2VkaWxsYSIsImh1bmdhcnVtbGF1dCIsIm9nb25layIsImNhcm9uIiwiZW1kYXNoIiwiQUUiLCJvcmRmZW1pbmluZSIsIkxzbGFzaCIsIk9zbGFzaCIsIk9FIiwib3JkbWFzY3VsaW5lIiwiYWUiLCJkb3RsZXNzaSIsImxzbGFzaCIsIm9zbGFzaCIsIm9lIiwiZ2VybWFuZGJscyIsIm9uZXN1cGVyaW9yIiwibG9naWNhbG5vdCIsIm11IiwidHJhZGVtYXJrIiwiRXRoIiwib25laGFsZiIsInBsdXNtaW51cyIsIlRob3JuIiwib25lcXVhcnRlciIsImRpdmlkZSIsImJyb2tlbmJhciIsImRlZ3JlZSIsInRob3JuIiwidGhyZWVxdWFydGVycyIsInR3b3N1cGVyaW9yIiwicmVnaXN0ZXJlZCIsIm1pbnVzIiwiZXRoIiwibXVsdGlwbHkiLCJ0aHJlZXN1cGVyaW9yIiwiY29weXJpZ2h0IiwiQWFjdXRlIiwiQWNpcmN1bWZsZXgiLCJBZGllcmVzaXMiLCJBZ3JhdmUiLCJBcmluZyIsIkF0aWxkZSIsIkNjZWRpbGxhIiwiRWFjdXRlIiwiRWNpcmN1bWZsZXgiLCJFZGllcmVzaXMiLCJFZ3JhdmUiLCJJYWN1dGUiLCJJY2lyY3VtZmxleCIsIklkaWVyZXNpcyIsIklncmF2ZSIsIk50aWxkZSIsIk9hY3V0ZSIsIk9jaXJjdW1mbGV4IiwiT2RpZXJlc2lzIiwiT2dyYXZlIiwiT3RpbGRlIiwiU2Nhcm9uIiwiVWFjdXRlIiwiVWNpcmN1bWZsZXgiLCJVZGllcmVzaXMiLCJVZ3JhdmUiLCJZYWN1dGUiLCJZZGllcmVzaXMiLCJaY2Fyb24iLCJhYWN1dGUiLCJhY2lyY3VtZmxleCIsImFkaWVyZXNpcyIsImFncmF2ZSIsImFyaW5nIiwiYXRpbGRlIiwiY2NlZGlsbGEiLCJlYWN1dGUiLCJlY2lyY3VtZmxleCIsImVkaWVyZXNpcyIsImVncmF2ZSIsImlhY3V0ZSIsImljaXJjdW1mbGV4IiwiaWRpZXJlc2lzIiwiaWdyYXZlIiwibnRpbGRlIiwib2FjdXRlIiwib2NpcmN1bWZsZXgiLCJvZGllcmVzaXMiLCJvZ3JhdmUiLCJvdGlsZGUiLCJzY2Fyb24iLCJ1YWN1dGUiLCJ1Y2lyY3VtZmxleCIsInVkaWVyZXNpcyIsInVncmF2ZSIsInlhY3V0ZSIsInlkaWVyZXNpcyIsInpjYXJvbiJdLHQuRXhwZXJ0Q2hhcnNldD1bIi5ub3RkZWYiLCJzcGFjZSIsImV4Y2xhbXNtYWxsIiwiSHVuZ2FydW1sYXV0c21hbGwiLCJkb2xsYXJvbGRzdHlsZSIsImRvbGxhcnN1cGVyaW9yIiwiYW1wZXJzYW5kc21hbGwiLCJBY3V0ZXNtYWxsIiwicGFyZW5sZWZ0c3VwZXJpb3IiLCJwYXJlbnJpZ2h0c3VwZXJpb3IiLCJ0d29kb3RlbmxlYWRlciIsIm9uZWRvdGVubGVhZGVyIiwiY29tbWEiLCJoeXBoZW4iLCJwZXJpb2QiLCJmcmFjdGlvbiIsInplcm9vbGRzdHlsZSIsIm9uZW9sZHN0eWxlIiwidHdvb2xkc3R5bGUiLCJ0aHJlZW9sZHN0eWxlIiwiZm91cm9sZHN0eWxlIiwiZml2ZW9sZHN0eWxlIiwic2l4b2xkc3R5bGUiLCJzZXZlbm9sZHN0eWxlIiwiZWlnaHRvbGRzdHlsZSIsIm5pbmVvbGRzdHlsZSIsImNvbG9uIiwic2VtaWNvbG9uIiwiY29tbWFzdXBlcmlvciIsInRocmVlcXVhcnRlcnNlbWRhc2giLCJwZXJpb2RzdXBlcmlvciIsInF1ZXN0aW9uc21hbGwiLCJhc3VwZXJpb3IiLCJic3VwZXJpb3IiLCJjZW50c3VwZXJpb3IiLCJkc3VwZXJpb3IiLCJlc3VwZXJpb3IiLCJpc3VwZXJpb3IiLCJsc3VwZXJpb3IiLCJtc3VwZXJpb3IiLCJuc3VwZXJpb3IiLCJvc3VwZXJpb3IiLCJyc3VwZXJpb3IiLCJzc3VwZXJpb3IiLCJ0c3VwZXJpb3IiLCJmZiIsImZpIiwiZmwiLCJmZmkiLCJmZmwiLCJwYXJlbmxlZnRpbmZlcmlvciIsInBhcmVucmlnaHRpbmZlcmlvciIsIkNpcmN1bWZsZXhzbWFsbCIsImh5cGhlbnN1cGVyaW9yIiwiR3JhdmVzbWFsbCIsIkFzbWFsbCIsIkJzbWFsbCIsIkNzbWFsbCIsIkRzbWFsbCIsIkVzbWFsbCIsIkZzbWFsbCIsIkdzbWFsbCIsIkhzbWFsbCIsIklzbWFsbCIsIkpzbWFsbCIsIktzbWFsbCIsIkxzbWFsbCIsIk1zbWFsbCIsIk5zbWFsbCIsIk9zbWFsbCIsIlBzbWFsbCIsIlFzbWFsbCIsIlJzbWFsbCIsIlNzbWFsbCIsIlRzbWFsbCIsIlVzbWFsbCIsIlZzbWFsbCIsIldzbWFsbCIsIlhzbWFsbCIsIllzbWFsbCIsIlpzbWFsbCIsImNvbG9ubW9uZXRhcnkiLCJvbmVmaXR0ZWQiLCJydXBpYWgiLCJUaWxkZXNtYWxsIiwiZXhjbGFtZG93bnNtYWxsIiwiY2VudG9sZHN0eWxlIiwiTHNsYXNoc21hbGwiLCJTY2Fyb25zbWFsbCIsIlpjYXJvbnNtYWxsIiwiRGllcmVzaXNzbWFsbCIsIkJyZXZlc21hbGwiLCJDYXJvbnNtYWxsIiwiRG90YWNjZW50c21hbGwiLCJNYWNyb25zbWFsbCIsImZpZ3VyZWRhc2giLCJoeXBoZW5pbmZlcmlvciIsIk9nb25la3NtYWxsIiwiUmluZ3NtYWxsIiwiQ2VkaWxsYXNtYWxsIiwib25lcXVhcnRlciIsIm9uZWhhbGYiLCJ0aHJlZXF1YXJ0ZXJzIiwicXVlc3Rpb25kb3duc21hbGwiLCJvbmVlaWdodGgiLCJ0aHJlZWVpZ2h0aHMiLCJmaXZlZWlnaHRocyIsInNldmVuZWlnaHRocyIsIm9uZXRoaXJkIiwidHdvdGhpcmRzIiwiemVyb3N1cGVyaW9yIiwib25lc3VwZXJpb3IiLCJ0d29zdXBlcmlvciIsInRocmVlc3VwZXJpb3IiLCJmb3Vyc3VwZXJpb3IiLCJmaXZlc3VwZXJpb3IiLCJzaXhzdXBlcmlvciIsInNldmVuc3VwZXJpb3IiLCJlaWdodHN1cGVyaW9yIiwibmluZXN1cGVyaW9yIiwiemVyb2luZmVyaW9yIiwib25laW5mZXJpb3IiLCJ0d29pbmZlcmlvciIsInRocmVlaW5mZXJpb3IiLCJmb3VyaW5mZXJpb3IiLCJmaXZlaW5mZXJpb3IiLCJzaXhpbmZlcmlvciIsInNldmVuaW5mZXJpb3IiLCJlaWdodGluZmVyaW9yIiwibmluZWluZmVyaW9yIiwiY2VudGluZmVyaW9yIiwiZG9sbGFyaW5mZXJpb3IiLCJwZXJpb2RpbmZlcmlvciIsImNvbW1haW5mZXJpb3IiLCJBZ3JhdmVzbWFsbCIsIkFhY3V0ZXNtYWxsIiwiQWNpcmN1bWZsZXhzbWFsbCIsIkF0aWxkZXNtYWxsIiwiQWRpZXJlc2lzc21hbGwiLCJBcmluZ3NtYWxsIiwiQUVzbWFsbCIsIkNjZWRpbGxhc21hbGwiLCJFZ3JhdmVzbWFsbCIsIkVhY3V0ZXNtYWxsIiwiRWNpcmN1bWZsZXhzbWFsbCIsIkVkaWVyZXNpc3NtYWxsIiwiSWdyYXZlc21hbGwiLCJJYWN1dGVzbWFsbCIsIkljaXJjdW1mbGV4c21hbGwiLCJJZGllcmVzaXNzbWFsbCIsIkV0aHNtYWxsIiwiTnRpbGRlc21hbGwiLCJPZ3JhdmVzbWFsbCIsIk9hY3V0ZXNtYWxsIiwiT2NpcmN1bWZsZXhzbWFsbCIsIk90aWxkZXNtYWxsIiwiT2RpZXJlc2lzc21hbGwiLCJPRXNtYWxsIiwiT3NsYXNoc21hbGwiLCJVZ3JhdmVzbWFsbCIsIlVhY3V0ZXNtYWxsIiwiVWNpcmN1bWZsZXhzbWFsbCIsIlVkaWVyZXNpc3NtYWxsIiwiWWFjdXRlc21hbGwiLCJUaG9ybnNtYWxsIiwiWWRpZXJlc2lzc21hbGwiXSx0LkV4cGVydFN1YnNldENoYXJzZXQ9WyIubm90ZGVmIiwic3BhY2UiLCJkb2xsYXJvbGRzdHlsZSIsImRvbGxhcnN1cGVyaW9yIiwicGFyZW5sZWZ0c3VwZXJpb3IiLCJwYXJlbnJpZ2h0c3VwZXJpb3IiLCJ0d29kb3RlbmxlYWRlciIsIm9uZWRvdGVubGVhZGVyIiwiY29tbWEiLCJoeXBoZW4iLCJwZXJpb2QiLCJmcmFjdGlvbiIsInplcm9vbGRzdHlsZSIsIm9uZW9sZHN0eWxlIiwidHdvb2xkc3R5bGUiLCJ0aHJlZW9sZHN0eWxlIiwiZm91cm9sZHN0eWxlIiwiZml2ZW9sZHN0eWxlIiwic2l4b2xkc3R5bGUiLCJzZXZlbm9sZHN0eWxlIiwiZWlnaHRvbGRzdHlsZSIsIm5pbmVvbGRzdHlsZSIsImNvbG9uIiwic2VtaWNvbG9uIiwiY29tbWFzdXBlcmlvciIsInRocmVlcXVhcnRlcnNlbWRhc2giLCJwZXJpb2RzdXBlcmlvciIsImFzdXBlcmlvciIsImJzdXBlcmlvciIsImNlbnRzdXBlcmlvciIsImRzdXBlcmlvciIsImVzdXBlcmlvciIsImlzdXBlcmlvciIsImxzdXBlcmlvciIsIm1zdXBlcmlvciIsIm5zdXBlcmlvciIsIm9zdXBlcmlvciIsInJzdXBlcmlvciIsInNzdXBlcmlvciIsInRzdXBlcmlvciIsImZmIiwiZmkiLCJmbCIsImZmaSIsImZmbCIsInBhcmVubGVmdGluZmVyaW9yIiwicGFyZW5yaWdodGluZmVyaW9yIiwiaHlwaGVuc3VwZXJpb3IiLCJjb2xvbm1vbmV0YXJ5Iiwib25lZml0dGVkIiwicnVwaWFoIiwiY2VudG9sZHN0eWxlIiwiZmlndXJlZGFzaCIsImh5cGhlbmluZmVyaW9yIiwib25lcXVhcnRlciIsIm9uZWhhbGYiLCJ0aHJlZXF1YXJ0ZXJzIiwib25lZWlnaHRoIiwidGhyZWVlaWdodGhzIiwiZml2ZWVpZ2h0aHMiLCJzZXZlbmVpZ2h0aHMiLCJvbmV0aGlyZCIsInR3b3RoaXJkcyIsInplcm9zdXBlcmlvciIsIm9uZXN1cGVyaW9yIiwidHdvc3VwZXJpb3IiLCJ0aHJlZXN1cGVyaW9yIiwiZm91cnN1cGVyaW9yIiwiZml2ZXN1cGVyaW9yIiwic2l4c3VwZXJpb3IiLCJzZXZlbnN1cGVyaW9yIiwiZWlnaHRzdXBlcmlvciIsIm5pbmVzdXBlcmlvciIsInplcm9pbmZlcmlvciIsIm9uZWluZmVyaW9yIiwidHdvaW5mZXJpb3IiLCJ0aHJlZWluZmVyaW9yIiwiZm91cmluZmVyaW9yIiwiZml2ZWluZmVyaW9yIiwic2l4aW5mZXJpb3IiLCJzZXZlbmluZmVyaW9yIiwiZWlnaHRpbmZlcmlvciIsIm5pbmVpbmZlcmlvciIsImNlbnRpbmZlcmlvciIsImRvbGxhcmluZmVyaW9yIiwicGVyaW9kaW5mZXJpb3IiLCJjb21tYWluZmVyaW9yIl19LChlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuWmFwZkRpbmdiYXRzRW5jb2Rpbmc9dC5XaW5BbnNpRW5jb2Rpbmc9dC5TeW1ib2xTZXRFbmNvZGluZz10LlN0YW5kYXJkRW5jb2Rpbmc9dC5NYWNSb21hbkVuY29kaW5nPXQuRXhwZXJ0RW5jb2Rpbmc9dm9pZCAwLHQuZ2V0RW5jb2Rpbmc9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UiV2luQW5zaUVuY29kaW5nIjpyZXR1cm4gcztjYXNlIlN0YW5kYXJkRW5jb2RpbmciOnJldHVybiBpO2Nhc2UiTWFjUm9tYW5FbmNvZGluZyI6cmV0dXJuIGE7Y2FzZSJTeW1ib2xTZXRFbmNvZGluZyI6cmV0dXJuIG87Y2FzZSJaYXBmRGluZ2JhdHNFbmNvZGluZyI6cmV0dXJuIGM7Y2FzZSJFeHBlcnRFbmNvZGluZyI6cmV0dXJuIHI7Y2FzZSJNYWNFeHBlcnRFbmNvZGluZyI6cmV0dXJuIG47ZGVmYXVsdDpyZXR1cm4gbnVsbH19O2NvbnN0IHI9WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJzcGFjZSIsImV4Y2xhbXNtYWxsIiwiSHVuZ2FydW1sYXV0c21hbGwiLCIiLCJkb2xsYXJvbGRzdHlsZSIsImRvbGxhcnN1cGVyaW9yIiwiYW1wZXJzYW5kc21hbGwiLCJBY3V0ZXNtYWxsIiwicGFyZW5sZWZ0c3VwZXJpb3IiLCJwYXJlbnJpZ2h0c3VwZXJpb3IiLCJ0d29kb3RlbmxlYWRlciIsIm9uZWRvdGVubGVhZGVyIiwiY29tbWEiLCJoeXBoZW4iLCJwZXJpb2QiLCJmcmFjdGlvbiIsInplcm9vbGRzdHlsZSIsIm9uZW9sZHN0eWxlIiwidHdvb2xkc3R5bGUiLCJ0aHJlZW9sZHN0eWxlIiwiZm91cm9sZHN0eWxlIiwiZml2ZW9sZHN0eWxlIiwic2l4b2xkc3R5bGUiLCJzZXZlbm9sZHN0eWxlIiwiZWlnaHRvbGRzdHlsZSIsIm5pbmVvbGRzdHlsZSIsImNvbG9uIiwic2VtaWNvbG9uIiwiY29tbWFzdXBlcmlvciIsInRocmVlcXVhcnRlcnNlbWRhc2giLCJwZXJpb2RzdXBlcmlvciIsInF1ZXN0aW9uc21hbGwiLCIiLCJhc3VwZXJpb3IiLCJic3VwZXJpb3IiLCJjZW50c3VwZXJpb3IiLCJkc3VwZXJpb3IiLCJlc3VwZXJpb3IiLCIiLCIiLCIiLCJpc3VwZXJpb3IiLCIiLCIiLCJsc3VwZXJpb3IiLCJtc3VwZXJpb3IiLCJuc3VwZXJpb3IiLCJvc3VwZXJpb3IiLCIiLCIiLCJyc3VwZXJpb3IiLCJzc3VwZXJpb3IiLCJ0c3VwZXJpb3IiLCIiLCJmZiIsImZpIiwiZmwiLCJmZmkiLCJmZmwiLCJwYXJlbmxlZnRpbmZlcmlvciIsIiIsInBhcmVucmlnaHRpbmZlcmlvciIsIkNpcmN1bWZsZXhzbWFsbCIsImh5cGhlbnN1cGVyaW9yIiwiR3JhdmVzbWFsbCIsIkFzbWFsbCIsIkJzbWFsbCIsIkNzbWFsbCIsIkRzbWFsbCIsIkVzbWFsbCIsIkZzbWFsbCIsIkdzbWFsbCIsIkhzbWFsbCIsIklzbWFsbCIsIkpzbWFsbCIsIktzbWFsbCIsIkxzbWFsbCIsIk1zbWFsbCIsIk5zbWFsbCIsIk9zbWFsbCIsIlBzbWFsbCIsIlFzbWFsbCIsIlJzbWFsbCIsIlNzbWFsbCIsIlRzbWFsbCIsIlVzbWFsbCIsIlZzbWFsbCIsIldzbWFsbCIsIlhzbWFsbCIsIllzbWFsbCIsIlpzbWFsbCIsImNvbG9ubW9uZXRhcnkiLCJvbmVmaXR0ZWQiLCJydXBpYWgiLCJUaWxkZXNtYWxsIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiZXhjbGFtZG93bnNtYWxsIiwiY2VudG9sZHN0eWxlIiwiTHNsYXNoc21hbGwiLCIiLCIiLCJTY2Fyb25zbWFsbCIsIlpjYXJvbnNtYWxsIiwiRGllcmVzaXNzbWFsbCIsIkJyZXZlc21hbGwiLCJDYXJvbnNtYWxsIiwiIiwiRG90YWNjZW50c21hbGwiLCIiLCIiLCJNYWNyb25zbWFsbCIsIiIsIiIsImZpZ3VyZWRhc2giLCJoeXBoZW5pbmZlcmlvciIsIiIsIiIsIk9nb25la3NtYWxsIiwiUmluZ3NtYWxsIiwiQ2VkaWxsYXNtYWxsIiwiIiwiIiwiIiwib25lcXVhcnRlciIsIm9uZWhhbGYiLCJ0aHJlZXF1YXJ0ZXJzIiwicXVlc3Rpb25kb3duc21hbGwiLCJvbmVlaWdodGgiLCJ0aHJlZWVpZ2h0aHMiLCJmaXZlZWlnaHRocyIsInNldmVuZWlnaHRocyIsIm9uZXRoaXJkIiwidHdvdGhpcmRzIiwiIiwiIiwiemVyb3N1cGVyaW9yIiwib25lc3VwZXJpb3IiLCJ0d29zdXBlcmlvciIsInRocmVlc3VwZXJpb3IiLCJmb3Vyc3VwZXJpb3IiLCJmaXZlc3VwZXJpb3IiLCJzaXhzdXBlcmlvciIsInNldmVuc3VwZXJpb3IiLCJlaWdodHN1cGVyaW9yIiwibmluZXN1cGVyaW9yIiwiemVyb2luZmVyaW9yIiwib25laW5mZXJpb3IiLCJ0d29pbmZlcmlvciIsInRocmVlaW5mZXJpb3IiLCJmb3VyaW5mZXJpb3IiLCJmaXZlaW5mZXJpb3IiLCJzaXhpbmZlcmlvciIsInNldmVuaW5mZXJpb3IiLCJlaWdodGluZmVyaW9yIiwibmluZWluZmVyaW9yIiwiY2VudGluZmVyaW9yIiwiZG9sbGFyaW5mZXJpb3IiLCJwZXJpb2RpbmZlcmlvciIsImNvbW1haW5mZXJpb3IiLCJBZ3JhdmVzbWFsbCIsIkFhY3V0ZXNtYWxsIiwiQWNpcmN1bWZsZXhzbWFsbCIsIkF0aWxkZXNtYWxsIiwiQWRpZXJlc2lzc21hbGwiLCJBcmluZ3NtYWxsIiwiQUVzbWFsbCIsIkNjZWRpbGxhc21hbGwiLCJFZ3JhdmVzbWFsbCIsIkVhY3V0ZXNtYWxsIiwiRWNpcmN1bWZsZXhzbWFsbCIsIkVkaWVyZXNpc3NtYWxsIiwiSWdyYXZlc21hbGwiLCJJYWN1dGVzbWFsbCIsIkljaXJjdW1mbGV4c21hbGwiLCJJZGllcmVzaXNzbWFsbCIsIkV0aHNtYWxsIiwiTnRpbGRlc21hbGwiLCJPZ3JhdmVzbWFsbCIsIk9hY3V0ZXNtYWxsIiwiT2NpcmN1bWZsZXhzbWFsbCIsIk90aWxkZXNtYWxsIiwiT2RpZXJlc2lzc21hbGwiLCJPRXNtYWxsIiwiT3NsYXNoc21hbGwiLCJVZ3JhdmVzbWFsbCIsIlVhY3V0ZXNtYWxsIiwiVWNpcmN1bWZsZXhzbWFsbCIsIlVkaWVyZXNpc3NtYWxsIiwiWWFjdXRlc21hbGwiLCJUaG9ybnNtYWxsIiwiWWRpZXJlc2lzc21hbGwiXTt0LkV4cGVydEVuY29kaW5nPXI7Y29uc3Qgbj1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsInNwYWNlIiwiZXhjbGFtc21hbGwiLCJIdW5nYXJ1bWxhdXRzbWFsbCIsImNlbnRvbGRzdHlsZSIsImRvbGxhcm9sZHN0eWxlIiwiZG9sbGFyc3VwZXJpb3IiLCJhbXBlcnNhbmRzbWFsbCIsIkFjdXRlc21hbGwiLCJwYXJlbmxlZnRzdXBlcmlvciIsInBhcmVucmlnaHRzdXBlcmlvciIsInR3b2RvdGVubGVhZGVyIiwib25lZG90ZW5sZWFkZXIiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsImZyYWN0aW9uIiwiemVyb29sZHN0eWxlIiwib25lb2xkc3R5bGUiLCJ0d29vbGRzdHlsZSIsInRocmVlb2xkc3R5bGUiLCJmb3Vyb2xkc3R5bGUiLCJmaXZlb2xkc3R5bGUiLCJzaXhvbGRzdHlsZSIsInNldmVub2xkc3R5bGUiLCJlaWdodG9sZHN0eWxlIiwibmluZW9sZHN0eWxlIiwiY29sb24iLCJzZW1pY29sb24iLCIiLCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoIiwiIiwicXVlc3Rpb25zbWFsbCIsIiIsIiIsIiIsIiIsIkV0aHNtYWxsIiwiIiwiIiwib25lcXVhcnRlciIsIm9uZWhhbGYiLCJ0aHJlZXF1YXJ0ZXJzIiwib25lZWlnaHRoIiwidGhyZWVlaWdodGhzIiwiZml2ZWVpZ2h0aHMiLCJzZXZlbmVpZ2h0aHMiLCJvbmV0aGlyZCIsInR3b3RoaXJkcyIsIiIsIiIsIiIsIiIsIiIsIiIsImZmIiwiZmkiLCJmbCIsImZmaSIsImZmbCIsInBhcmVubGVmdGluZmVyaW9yIiwiIiwicGFyZW5yaWdodGluZmVyaW9yIiwiQ2lyY3VtZmxleHNtYWxsIiwiaHlwaGVuaW5mZXJpb3IiLCJHcmF2ZXNtYWxsIiwiQXNtYWxsIiwiQnNtYWxsIiwiQ3NtYWxsIiwiRHNtYWxsIiwiRXNtYWxsIiwiRnNtYWxsIiwiR3NtYWxsIiwiSHNtYWxsIiwiSXNtYWxsIiwiSnNtYWxsIiwiS3NtYWxsIiwiTHNtYWxsIiwiTXNtYWxsIiwiTnNtYWxsIiwiT3NtYWxsIiwiUHNtYWxsIiwiUXNtYWxsIiwiUnNtYWxsIiwiU3NtYWxsIiwiVHNtYWxsIiwiVXNtYWxsIiwiVnNtYWxsIiwiV3NtYWxsIiwiWHNtYWxsIiwiWXNtYWxsIiwiWnNtYWxsIiwiY29sb25tb25ldGFyeSIsIm9uZWZpdHRlZCIsInJ1cGlhaCIsIlRpbGRlc21hbGwiLCIiLCIiLCJhc3VwZXJpb3IiLCJjZW50c3VwZXJpb3IiLCIiLCIiLCIiLCIiLCJBYWN1dGVzbWFsbCIsIkFncmF2ZXNtYWxsIiwiQWNpcmN1bWZsZXhzbWFsbCIsIkFkaWVyZXNpc3NtYWxsIiwiQXRpbGRlc21hbGwiLCJBcmluZ3NtYWxsIiwiQ2NlZGlsbGFzbWFsbCIsIkVhY3V0ZXNtYWxsIiwiRWdyYXZlc21hbGwiLCJFY2lyY3VtZmxleHNtYWxsIiwiRWRpZXJlc2lzc21hbGwiLCJJYWN1dGVzbWFsbCIsIklncmF2ZXNtYWxsIiwiSWNpcmN1bWZsZXhzbWFsbCIsIklkaWVyZXNpc3NtYWxsIiwiTnRpbGRlc21hbGwiLCJPYWN1dGVzbWFsbCIsIk9ncmF2ZXNtYWxsIiwiT2NpcmN1bWZsZXhzbWFsbCIsIk9kaWVyZXNpc3NtYWxsIiwiT3RpbGRlc21hbGwiLCJVYWN1dGVzbWFsbCIsIlVncmF2ZXNtYWxsIiwiVWNpcmN1bWZsZXhzbWFsbCIsIlVkaWVyZXNpc3NtYWxsIiwiIiwiZWlnaHRzdXBlcmlvciIsImZvdXJpbmZlcmlvciIsInRocmVlaW5mZXJpb3IiLCJzaXhpbmZlcmlvciIsImVpZ2h0aW5mZXJpb3IiLCJzZXZlbmluZmVyaW9yIiwiU2Nhcm9uc21hbGwiLCIiLCJjZW50aW5mZXJpb3IiLCJ0d29pbmZlcmlvciIsIiIsIkRpZXJlc2lzc21hbGwiLCIiLCJDYXJvbnNtYWxsIiwib3N1cGVyaW9yIiwiZml2ZWluZmVyaW9yIiwiIiwiY29tbWFpbmZlcmlvciIsInBlcmlvZGluZmVyaW9yIiwiWWFjdXRlc21hbGwiLCIiLCJkb2xsYXJpbmZlcmlvciIsIiIsIiIsIlRob3Juc21hbGwiLCIiLCJuaW5laW5mZXJpb3IiLCJ6ZXJvaW5mZXJpb3IiLCJaY2Fyb25zbWFsbCIsIkFFc21hbGwiLCJPc2xhc2hzbWFsbCIsInF1ZXN0aW9uZG93bnNtYWxsIiwib25laW5mZXJpb3IiLCJMc2xhc2hzbWFsbCIsIiIsIiIsIiIsIiIsIiIsIiIsIkNlZGlsbGFzbWFsbCIsIiIsIiIsIiIsIiIsIiIsIk9Fc21hbGwiLCJmaWd1cmVkYXNoIiwiaHlwaGVuc3VwZXJpb3IiLCIiLCIiLCIiLCIiLCJleGNsYW1kb3duc21hbGwiLCIiLCJZZGllcmVzaXNzbWFsbCIsIiIsIm9uZXN1cGVyaW9yIiwidHdvc3VwZXJpb3IiLCJ0aHJlZXN1cGVyaW9yIiwiZm91cnN1cGVyaW9yIiwiZml2ZXN1cGVyaW9yIiwic2l4c3VwZXJpb3IiLCJzZXZlbnN1cGVyaW9yIiwibmluZXN1cGVyaW9yIiwiemVyb3N1cGVyaW9yIiwiIiwiZXN1cGVyaW9yIiwicnN1cGVyaW9yIiwidHN1cGVyaW9yIiwiIiwiIiwiaXN1cGVyaW9yIiwic3N1cGVyaW9yIiwiZHN1cGVyaW9yIiwiIiwiIiwiIiwiIiwiIiwibHN1cGVyaW9yIiwiT2dvbmVrc21hbGwiLCJCcmV2ZXNtYWxsIiwiTWFjcm9uc21hbGwiLCJic3VwZXJpb3IiLCJuc3VwZXJpb3IiLCJtc3VwZXJpb3IiLCJjb21tYXN1cGVyaW9yIiwicGVyaW9kc3VwZXJpb3IiLCJEb3RhY2NlbnRzbWFsbCIsIlJpbmdzbWFsbCIsIiIsIiIsIiIsIiJdLGE9WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJzcGFjZSIsImV4Y2xhbSIsInF1b3RlZGJsIiwibnVtYmVyc2lnbiIsImRvbGxhciIsInBlcmNlbnQiLCJhbXBlcnNhbmQiLCJxdW90ZXNpbmdsZSIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3RlcmlzayIsInBsdXMiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiYXQiLCJBIiwiQiIsIkMiLCJEIiwiRSIsIkYiLCJHIiwiSCIsIkkiLCJKIiwiSyIsIkwiLCJNIiwiTiIsIk8iLCJQIiwiUSIsIlIiLCJTIiwiVCIsIlUiLCJWIiwiVyIsIlgiLCJZIiwiWiIsImJyYWNrZXRsZWZ0IiwiYmFja3NsYXNoIiwiYnJhY2tldHJpZ2h0IiwiYXNjaWljaXJjdW0iLCJ1bmRlcnNjb3JlIiwiZ3JhdmUiLCJhIiwiYiIsImMiLCJkIiwiZSIsImYiLCJnIiwiaCIsImkiLCJqIiwiayIsImwiLCJtIiwibiIsIm8iLCJwIiwicSIsInIiLCJzIiwidCIsInUiLCJ2IiwidyIsIngiLCJ5IiwieiIsImJyYWNlbGVmdCIsImJhciIsImJyYWNlcmlnaHQiLCJhc2NpaXRpbGRlIiwiIiwiQWRpZXJlc2lzIiwiQXJpbmciLCJDY2VkaWxsYSIsIkVhY3V0ZSIsIk50aWxkZSIsIk9kaWVyZXNpcyIsIlVkaWVyZXNpcyIsImFhY3V0ZSIsImFncmF2ZSIsImFjaXJjdW1mbGV4IiwiYWRpZXJlc2lzIiwiYXRpbGRlIiwiYXJpbmciLCJjY2VkaWxsYSIsImVhY3V0ZSIsImVncmF2ZSIsImVjaXJjdW1mbGV4IiwiZWRpZXJlc2lzIiwiaWFjdXRlIiwiaWdyYXZlIiwiaWNpcmN1bWZsZXgiLCJpZGllcmVzaXMiLCJudGlsZGUiLCJvYWN1dGUiLCJvZ3JhdmUiLCJvY2lyY3VtZmxleCIsIm9kaWVyZXNpcyIsIm90aWxkZSIsInVhY3V0ZSIsInVncmF2ZSIsInVjaXJjdW1mbGV4IiwidWRpZXJlc2lzIiwiZGFnZ2VyIiwiZGVncmVlIiwiY2VudCIsInN0ZXJsaW5nIiwic2VjdGlvbiIsImJ1bGxldCIsInBhcmFncmFwaCIsImdlcm1hbmRibHMiLCJyZWdpc3RlcmVkIiwiY29weXJpZ2h0IiwidHJhZGVtYXJrIiwiYWN1dGUiLCJkaWVyZXNpcyIsIm5vdGVxdWFsIiwiQUUiLCJPc2xhc2giLCJpbmZpbml0eSIsInBsdXNtaW51cyIsImxlc3NlcXVhbCIsImdyZWF0ZXJlcXVhbCIsInllbiIsIm11IiwicGFydGlhbGRpZmYiLCJzdW1tYXRpb24iLCJwcm9kdWN0IiwicGkiLCJpbnRlZ3JhbCIsIm9yZGZlbWluaW5lIiwib3JkbWFzY3VsaW5lIiwiT21lZ2EiLCJhZSIsIm9zbGFzaCIsInF1ZXN0aW9uZG93biIsImV4Y2xhbWRvd24iLCJsb2dpY2Fsbm90IiwicmFkaWNhbCIsImZsb3JpbiIsImFwcHJveGVxdWFsIiwiRGVsdGEiLCJndWlsbGVtb3RsZWZ0IiwiZ3VpbGxlbW90cmlnaHQiLCJlbGxpcHNpcyIsInNwYWNlIiwiQWdyYXZlIiwiQXRpbGRlIiwiT3RpbGRlIiwiT0UiLCJvZSIsImVuZGFzaCIsImVtZGFzaCIsInF1b3RlZGJsbGVmdCIsInF1b3RlZGJscmlnaHQiLCJxdW90ZWxlZnQiLCJxdW90ZXJpZ2h0IiwiZGl2aWRlIiwibG96ZW5nZSIsInlkaWVyZXNpcyIsIllkaWVyZXNpcyIsImZyYWN0aW9uIiwiY3VycmVuY3kiLCJndWlsc2luZ2xsZWZ0IiwiZ3VpbHNpbmdscmlnaHQiLCJmaSIsImZsIiwiZGFnZ2VyZGJsIiwicGVyaW9kY2VudGVyZWQiLCJxdW90ZXNpbmdsYmFzZSIsInF1b3RlZGJsYmFzZSIsInBlcnRob3VzYW5kIiwiQWNpcmN1bWZsZXgiLCJFY2lyY3VtZmxleCIsIkFhY3V0ZSIsIkVkaWVyZXNpcyIsIkVncmF2ZSIsIklhY3V0ZSIsIkljaXJjdW1mbGV4IiwiSWRpZXJlc2lzIiwiSWdyYXZlIiwiT2FjdXRlIiwiT2NpcmN1bWZsZXgiLCJhcHBsZSIsIk9ncmF2ZSIsIlVhY3V0ZSIsIlVjaXJjdW1mbGV4IiwiVWdyYXZlIiwiZG90bGVzc2kiLCJjaXJjdW1mbGV4IiwidGlsZGUiLCJtYWNyb24iLCJicmV2ZSIsImRvdGFjY2VudCIsInJpbmciLCJjZWRpbGxhIiwiaHVuZ2FydW1sYXV0Iiwib2dvbmVrIiwiY2Fyb24iXTt0Lk1hY1JvbWFuRW5jb2Rpbmc9YTtjb25zdCBpPVsiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwic3BhY2UiLCJleGNsYW0iLCJxdW90ZWRibCIsIm51bWJlcnNpZ24iLCJkb2xsYXIiLCJwZXJjZW50IiwiYW1wZXJzYW5kIiwicXVvdGVyaWdodCIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3RlcmlzayIsInBsdXMiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiYXQiLCJBIiwiQiIsIkMiLCJEIiwiRSIsIkYiLCJHIiwiSCIsIkkiLCJKIiwiSyIsIkwiLCJNIiwiTiIsIk8iLCJQIiwiUSIsIlIiLCJTIiwiVCIsIlUiLCJWIiwiVyIsIlgiLCJZIiwiWiIsImJyYWNrZXRsZWZ0IiwiYmFja3NsYXNoIiwiYnJhY2tldHJpZ2h0IiwiYXNjaWljaXJjdW0iLCJ1bmRlcnNjb3JlIiwicXVvdGVsZWZ0IiwiYSIsImIiLCJjIiwiZCIsImUiLCJmIiwiZyIsImgiLCJpIiwiaiIsImsiLCJsIiwibSIsIm4iLCJvIiwicCIsInEiLCJyIiwicyIsInQiLCJ1IiwidiIsInciLCJ4IiwieSIsInoiLCJicmFjZWxlZnQiLCJiYXIiLCJicmFjZXJpZ2h0IiwiYXNjaWl0aWxkZSIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsImV4Y2xhbWRvd24iLCJjZW50Iiwic3RlcmxpbmciLCJmcmFjdGlvbiIsInllbiIsImZsb3JpbiIsInNlY3Rpb24iLCJjdXJyZW5jeSIsInF1b3Rlc2luZ2xlIiwicXVvdGVkYmxsZWZ0IiwiZ3VpbGxlbW90bGVmdCIsImd1aWxzaW5nbGxlZnQiLCJndWlsc2luZ2xyaWdodCIsImZpIiwiZmwiLCIiLCJlbmRhc2giLCJkYWdnZXIiLCJkYWdnZXJkYmwiLCJwZXJpb2RjZW50ZXJlZCIsIiIsInBhcmFncmFwaCIsImJ1bGxldCIsInF1b3Rlc2luZ2xiYXNlIiwicXVvdGVkYmxiYXNlIiwicXVvdGVkYmxyaWdodCIsImd1aWxsZW1vdHJpZ2h0IiwiZWxsaXBzaXMiLCJwZXJ0aG91c2FuZCIsIiIsInF1ZXN0aW9uZG93biIsIiIsImdyYXZlIiwiYWN1dGUiLCJjaXJjdW1mbGV4IiwidGlsZGUiLCJtYWNyb24iLCJicmV2ZSIsImRvdGFjY2VudCIsImRpZXJlc2lzIiwiIiwicmluZyIsImNlZGlsbGEiLCIiLCJodW5nYXJ1bWxhdXQiLCJvZ29uZWsiLCJjYXJvbiIsImVtZGFzaCIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIkFFIiwiIiwib3JkZmVtaW5pbmUiLCIiLCIiLCIiLCIiLCJMc2xhc2giLCJPc2xhc2giLCJPRSIsIm9yZG1hc2N1bGluZSIsIiIsIiIsIiIsIiIsIiIsImFlIiwiIiwiIiwiIiwiZG90bGVzc2kiLCIiLCIiLCJsc2xhc2giLCJvc2xhc2giLCJvZSIsImdlcm1hbmRibHMiLCIiLCIiLCIiLCIiXTt0LlN0YW5kYXJkRW5jb2Rpbmc9aTtjb25zdCBzPVsiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwic3BhY2UiLCJleGNsYW0iLCJxdW90ZWRibCIsIm51bWJlcnNpZ24iLCJkb2xsYXIiLCJwZXJjZW50IiwiYW1wZXJzYW5kIiwicXVvdGVzaW5nbGUiLCJwYXJlbmxlZnQiLCJwYXJlbnJpZ2h0IiwiYXN0ZXJpc2siLCJwbHVzIiwiY29tbWEiLCJoeXBoZW4iLCJwZXJpb2QiLCJzbGFzaCIsInplcm8iLCJvbmUiLCJ0d28iLCJ0aHJlZSIsImZvdXIiLCJmaXZlIiwic2l4Iiwic2V2ZW4iLCJlaWdodCIsIm5pbmUiLCJjb2xvbiIsInNlbWljb2xvbiIsImxlc3MiLCJlcXVhbCIsImdyZWF0ZXIiLCJxdWVzdGlvbiIsImF0IiwiQSIsIkIiLCJDIiwiRCIsIkUiLCJGIiwiRyIsIkgiLCJJIiwiSiIsIksiLCJMIiwiTSIsIk4iLCJPIiwiUCIsIlEiLCJSIiwiUyIsIlQiLCJVIiwiViIsIlciLCJYIiwiWSIsIloiLCJicmFja2V0bGVmdCIsImJhY2tzbGFzaCIsImJyYWNrZXRyaWdodCIsImFzY2lpY2lyY3VtIiwidW5kZXJzY29yZSIsImdyYXZlIiwiYSIsImIiLCJjIiwiZCIsImUiLCJmIiwiZyIsImgiLCJpIiwiaiIsImsiLCJsIiwibSIsIm4iLCJvIiwicCIsInEiLCJyIiwicyIsInQiLCJ1IiwidiIsInciLCJ4IiwieSIsInoiLCJicmFjZWxlZnQiLCJiYXIiLCJicmFjZXJpZ2h0IiwiYXNjaWl0aWxkZSIsImJ1bGxldCIsIkV1cm8iLCJidWxsZXQiLCJxdW90ZXNpbmdsYmFzZSIsImZsb3JpbiIsInF1b3RlZGJsYmFzZSIsImVsbGlwc2lzIiwiZGFnZ2VyIiwiZGFnZ2VyZGJsIiwiY2lyY3VtZmxleCIsInBlcnRob3VzYW5kIiwiU2Nhcm9uIiwiZ3VpbHNpbmdsbGVmdCIsIk9FIiwiYnVsbGV0IiwiWmNhcm9uIiwiYnVsbGV0IiwiYnVsbGV0IiwicXVvdGVsZWZ0IiwicXVvdGVyaWdodCIsInF1b3RlZGJsbGVmdCIsInF1b3RlZGJscmlnaHQiLCJidWxsZXQiLCJlbmRhc2giLCJlbWRhc2giLCJ0aWxkZSIsInRyYWRlbWFyayIsInNjYXJvbiIsImd1aWxzaW5nbHJpZ2h0Iiwib2UiLCJidWxsZXQiLCJ6Y2Fyb24iLCJZZGllcmVzaXMiLCJzcGFjZSIsImV4Y2xhbWRvd24iLCJjZW50Iiwic3RlcmxpbmciLCJjdXJyZW5jeSIsInllbiIsImJyb2tlbmJhciIsInNlY3Rpb24iLCJkaWVyZXNpcyIsImNvcHlyaWdodCIsIm9yZGZlbWluaW5lIiwiZ3VpbGxlbW90bGVmdCIsImxvZ2ljYWxub3QiLCJoeXBoZW4iLCJyZWdpc3RlcmVkIiwibWFjcm9uIiwiZGVncmVlIiwicGx1c21pbnVzIiwidHdvc3VwZXJpb3IiLCJ0aHJlZXN1cGVyaW9yIiwiYWN1dGUiLCJtdSIsInBhcmFncmFwaCIsInBlcmlvZGNlbnRlcmVkIiwiY2VkaWxsYSIsIm9uZXN1cGVyaW9yIiwib3JkbWFzY3VsaW5lIiwiZ3VpbGxlbW90cmlnaHQiLCJvbmVxdWFydGVyIiwib25laGFsZiIsInRocmVlcXVhcnRlcnMiLCJxdWVzdGlvbmRvd24iLCJBZ3JhdmUiLCJBYWN1dGUiLCJBY2lyY3VtZmxleCIsIkF0aWxkZSIsIkFkaWVyZXNpcyIsIkFyaW5nIiwiQUUiLCJDY2VkaWxsYSIsIkVncmF2ZSIsIkVhY3V0ZSIsIkVjaXJjdW1mbGV4IiwiRWRpZXJlc2lzIiwiSWdyYXZlIiwiSWFjdXRlIiwiSWNpcmN1bWZsZXgiLCJJZGllcmVzaXMiLCJFdGgiLCJOdGlsZGUiLCJPZ3JhdmUiLCJPYWN1dGUiLCJPY2lyY3VtZmxleCIsIk90aWxkZSIsIk9kaWVyZXNpcyIsIm11bHRpcGx5IiwiT3NsYXNoIiwiVWdyYXZlIiwiVWFjdXRlIiwiVWNpcmN1bWZsZXgiLCJVZGllcmVzaXMiLCJZYWN1dGUiLCJUaG9ybiIsImdlcm1hbmRibHMiLCJhZ3JhdmUiLCJhYWN1dGUiLCJhY2lyY3VtZmxleCIsImF0aWxkZSIsImFkaWVyZXNpcyIsImFyaW5nIiwiYWUiLCJjY2VkaWxsYSIsImVncmF2ZSIsImVhY3V0ZSIsImVjaXJjdW1mbGV4IiwiZWRpZXJlc2lzIiwiaWdyYXZlIiwiaWFjdXRlIiwiaWNpcmN1bWZsZXgiLCJpZGllcmVzaXMiLCJldGgiLCJudGlsZGUiLCJvZ3JhdmUiLCJvYWN1dGUiLCJvY2lyY3VtZmxleCIsIm90aWxkZSIsIm9kaWVyZXNpcyIsImRpdmlkZSIsIm9zbGFzaCIsInVncmF2ZSIsInVhY3V0ZSIsInVjaXJjdW1mbGV4IiwidWRpZXJlc2lzIiwieWFjdXRlIiwidGhvcm4iLCJ5ZGllcmVzaXMiXTt0LldpbkFuc2lFbmNvZGluZz1zO2NvbnN0IG89WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJzcGFjZSIsImV4Y2xhbSIsInVuaXZlcnNhbCIsIm51bWJlcnNpZ24iLCJleGlzdGVudGlhbCIsInBlcmNlbnQiLCJhbXBlcnNhbmQiLCJzdWNodGhhdCIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3Rlcmlza21hdGgiLCJwbHVzIiwiY29tbWEiLCJtaW51cyIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiY29uZ3J1ZW50IiwiQWxwaGEiLCJCZXRhIiwiQ2hpIiwiRGVsdGEiLCJFcHNpbG9uIiwiUGhpIiwiR2FtbWEiLCJFdGEiLCJJb3RhIiwidGhldGExIiwiS2FwcGEiLCJMYW1iZGEiLCJNdSIsIk51IiwiT21pY3JvbiIsIlBpIiwiVGhldGEiLCJSaG8iLCJTaWdtYSIsIlRhdSIsIlVwc2lsb24iLCJzaWdtYTEiLCJPbWVnYSIsIlhpIiwiUHNpIiwiWmV0YSIsImJyYWNrZXRsZWZ0IiwidGhlcmVmb3JlIiwiYnJhY2tldHJpZ2h0IiwicGVycGVuZGljdWxhciIsInVuZGVyc2NvcmUiLCJyYWRpY2FsZXgiLCJhbHBoYSIsImJldGEiLCJjaGkiLCJkZWx0YSIsImVwc2lsb24iLCJwaGkiLCJnYW1tYSIsImV0YSIsImlvdGEiLCJwaGkxIiwia2FwcGEiLCJsYW1iZGEiLCJtdSIsIm51Iiwib21pY3JvbiIsInBpIiwidGhldGEiLCJyaG8iLCJzaWdtYSIsInRhdSIsInVwc2lsb24iLCJvbWVnYTEiLCJvbWVnYSIsInhpIiwicHNpIiwiemV0YSIsImJyYWNlbGVmdCIsImJhciIsImJyYWNlcmlnaHQiLCJzaW1pbGFyIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiRXVybyIsIlVwc2lsb24xIiwibWludXRlIiwibGVzc2VxdWFsIiwiZnJhY3Rpb24iLCJpbmZpbml0eSIsImZsb3JpbiIsImNsdWIiLCJkaWFtb25kIiwiaGVhcnQiLCJzcGFkZSIsImFycm93Ym90aCIsImFycm93bGVmdCIsImFycm93dXAiLCJhcnJvd3JpZ2h0IiwiYXJyb3dkb3duIiwiZGVncmVlIiwicGx1c21pbnVzIiwic2Vjb25kIiwiZ3JlYXRlcmVxdWFsIiwibXVsdGlwbHkiLCJwcm9wb3J0aW9uYWwiLCJwYXJ0aWFsZGlmZiIsImJ1bGxldCIsImRpdmlkZSIsIm5vdGVxdWFsIiwiZXF1aXZhbGVuY2UiLCJhcHByb3hlcXVhbCIsImVsbGlwc2lzIiwiYXJyb3d2ZXJ0ZXgiLCJhcnJvd2hvcml6ZXgiLCJjYXJyaWFnZXJldHVybiIsImFsZXBoIiwiSWZyYWt0dXIiLCJSZnJha3R1ciIsIndlaWVyc3RyYXNzIiwiY2lyY2xlbXVsdGlwbHkiLCJjaXJjbGVwbHVzIiwiZW1wdHlzZXQiLCJpbnRlcnNlY3Rpb24iLCJ1bmlvbiIsInByb3BlcnN1cGVyc2V0IiwicmVmbGV4c3VwZXJzZXQiLCJub3RzdWJzZXQiLCJwcm9wZXJzdWJzZXQiLCJyZWZsZXhzdWJzZXQiLCJlbGVtZW50Iiwibm90ZWxlbWVudCIsImFuZ2xlIiwiZ3JhZGllbnQiLCJyZWdpc3RlcnNlcmlmIiwiY29weXJpZ2h0c2VyaWYiLCJ0cmFkZW1hcmtzZXJpZiIsInByb2R1Y3QiLCJyYWRpY2FsIiwiZG90bWF0aCIsImxvZ2ljYWxub3QiLCJsb2dpY2FsYW5kIiwibG9naWNhbG9yIiwiYXJyb3dkYmxib3RoIiwiYXJyb3dkYmxsZWZ0IiwiYXJyb3dkYmx1cCIsImFycm93ZGJscmlnaHQiLCJhcnJvd2RibGRvd24iLCJsb3plbmdlIiwiYW5nbGVsZWZ0IiwicmVnaXN0ZXJzYW5zIiwiY29weXJpZ2h0c2FucyIsInRyYWRlbWFya3NhbnMiLCJzdW1tYXRpb24iLCJwYXJlbmxlZnR0cCIsInBhcmVubGVmdGV4IiwicGFyZW5sZWZ0YnQiLCJicmFja2V0bGVmdHRwIiwiYnJhY2tldGxlZnRleCIsImJyYWNrZXRsZWZ0YnQiLCJicmFjZWxlZnR0cCIsImJyYWNlbGVmdG1pZCIsImJyYWNlbGVmdGJ0IiwiYnJhY2VleCIsIiIsImFuZ2xlcmlnaHQiLCJpbnRlZ3JhbCIsImludGVncmFsdHAiLCJpbnRlZ3JhbGV4IiwiaW50ZWdyYWxidCIsInBhcmVucmlnaHR0cCIsInBhcmVucmlnaHRleCIsInBhcmVucmlnaHRidCIsImJyYWNrZXRyaWdodHRwIiwiYnJhY2tldHJpZ2h0ZXgiLCJicmFja2V0cmlnaHRidCIsImJyYWNlcmlnaHR0cCIsImJyYWNlcmlnaHRtaWQiLCJicmFjZXJpZ2h0YnQiLCIiXTt0LlN5bWJvbFNldEVuY29kaW5nPW87Y29uc3QgYz1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsInNwYWNlIiwiYTEiLCJhMiIsImEyMDIiLCJhMyIsImE0IiwiYTUiLCJhMTE5IiwiYTExOCIsImExMTciLCJhMTEiLCJhMTIiLCJhMTMiLCJhMTQiLCJhMTUiLCJhMTYiLCJhMTA1IiwiYTE3IiwiYTE4IiwiYTE5IiwiYTIwIiwiYTIxIiwiYTIyIiwiYTIzIiwiYTI0IiwiYTI1IiwiYTI2IiwiYTI3IiwiYTI4IiwiYTYiLCJhNyIsImE4IiwiYTkiLCJhMTAiLCJhMjkiLCJhMzAiLCJhMzEiLCJhMzIiLCJhMzMiLCJhMzQiLCJhMzUiLCJhMzYiLCJhMzciLCJhMzgiLCJhMzkiLCJhNDAiLCJhNDEiLCJhNDIiLCJhNDMiLCJhNDQiLCJhNDUiLCJhNDYiLCJhNDciLCJhNDgiLCJhNDkiLCJhNTAiLCJhNTEiLCJhNTIiLCJhNTMiLCJhNTQiLCJhNTUiLCJhNTYiLCJhNTciLCJhNTgiLCJhNTkiLCJhNjAiLCJhNjEiLCJhNjIiLCJhNjMiLCJhNjQiLCJhNjUiLCJhNjYiLCJhNjciLCJhNjgiLCJhNjkiLCJhNzAiLCJhNzEiLCJhNzIiLCJhNzMiLCJhNzQiLCJhMjAzIiwiYTc1IiwiYTIwNCIsImE3NiIsImE3NyIsImE3OCIsImE3OSIsImE4MSIsImE4MiIsImE4MyIsImE4NCIsImE5NyIsImE5OCIsImE5OSIsImExMDAiLCIiLCJhODkiLCJhOTAiLCJhOTMiLCJhOTQiLCJhOTEiLCJhOTIiLCJhMjA1IiwiYTg1IiwiYTIwNiIsImE4NiIsImE4NyIsImE4OCIsImE5NSIsImE5NiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsImExMDEiLCJhMTAyIiwiYTEwMyIsImExMDQiLCJhMTA2IiwiYTEwNyIsImExMDgiLCJhMTEyIiwiYTExMSIsImExMTAiLCJhMTA5IiwiYTEyMCIsImExMjEiLCJhMTIyIiwiYTEyMyIsImExMjQiLCJhMTI1IiwiYTEyNiIsImExMjciLCJhMTI4IiwiYTEyOSIsImExMzAiLCJhMTMxIiwiYTEzMiIsImExMzMiLCJhMTM0IiwiYTEzNSIsImExMzYiLCJhMTM3IiwiYTEzOCIsImExMzkiLCJhMTQwIiwiYTE0MSIsImExNDIiLCJhMTQzIiwiYTE0NCIsImExNDUiLCJhMTQ2IiwiYTE0NyIsImExNDgiLCJhMTQ5IiwiYTE1MCIsImExNTEiLCJhMTUyIiwiYTE1MyIsImExNTQiLCJhMTU1IiwiYTE1NiIsImExNTciLCJhMTU4IiwiYTE1OSIsImExNjAiLCJhMTYxIiwiYTE2MyIsImExNjQiLCJhMTk2IiwiYTE2NSIsImExOTIiLCJhMTY2IiwiYTE2NyIsImExNjgiLCJhMTY5IiwiYTE3MCIsImExNzEiLCJhMTcyIiwiYTE3MyIsImExNjIiLCJhMTc0IiwiYTE3NSIsImExNzYiLCJhMTc3IiwiYTE3OCIsImExNzkiLCJhMTkzIiwiYTE4MCIsImExOTkiLCJhMTgxIiwiYTIwMCIsImExODIiLCIiLCJhMjAxIiwiYTE4MyIsImExODQiLCJhMTk3IiwiYTE4NSIsImExOTQiLCJhMTk4IiwiYTE4NiIsImExOTUiLCJhMTg3IiwiYTE4OCIsImExODkiLCJhMTkwIiwiYTE5MSIsIiJdO3QuWmFwZkRpbmdiYXRzRW5jb2Rpbmc9Y30sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlNFQUNfQU5BTFlTSVNfRU5BQkxFRD10Lk1hY1N0YW5kYXJkR2x5cGhPcmRlcmluZz10LkZvbnRGbGFncz12b2lkIDAsdC5ub3JtYWxpemVGb250TmFtZT1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlQWxsKC9bLF9dL2csIi0iKS5yZXBsYWNlQWxsKC9ccy9nLCIiKX0sdC5yZWNvdmVyR2x5cGhOYW1lPWMsdC50eXBlMUZvbnRHbHlwaE1hcHBpbmc9ZnVuY3Rpb24oZSx0LHIpe2NvbnN0IGk9T2JqZWN0LmNyZWF0ZShudWxsKTtsZXQgcyxsLGg7Y29uc3QgdT0hIShlLmZsYWdzJm8uU3ltYm9saWMpO2lmKGUuaXNJbnRlcm5hbEZvbnQpZm9yKGg9dCxsPTA7bDxoLmxlbmd0aDtsKyspcz1yLmluZGV4T2YoaFtsXSksaVtsXT1zPj0wP3M6MDtlbHNlIGlmKGUuYmFzZUVuY29kaW5nTmFtZSlmb3IoaD0oMCxuLmdldEVuY29kaW5nKShlLmJhc2VFbmNvZGluZ05hbWUpLGw9MDtsPGgubGVuZ3RoO2wrKylzPXIuaW5kZXhPZihoW2xdKSxpW2xdPXM+PTA/czowO2Vsc2UgaWYodSlmb3IobCBpbiB0KWlbbF09dFtsXTtlbHNlIGZvcihoPW4uU3RhbmRhcmRFbmNvZGluZyxsPTA7bDxoLmxlbmd0aDtsKyspcz1yLmluZGV4T2YoaFtsXSksaVtsXT1zPj0wP3M6MDtjb25zdCBkPWUuZGlmZmVyZW5jZXM7bGV0IGY7aWYoZClmb3IobCBpbiBkKXtjb25zdCBlPWRbbF07aWYocz1yLmluZGV4T2YoZSksLTE9PT1zKXtmfHwoZj0oMCxhLmdldEdseXBoc1VuaWNvZGUpKCkpO2NvbnN0IHQ9YyhlLGYpO3QhPT1lJiYocz1yLmluZGV4T2YodCkpfWlbbF09cz49MD9zOjB9cmV0dXJuIGl9LHIoMTU3KTt2YXIgbj1yKDE4NyksYT1yKDE4OSksaT1yKDE5MCkscz1yKDE0NCk7dC5TRUFDX0FOQUxZU0lTX0VOQUJMRUQ9ITA7Y29uc3Qgbz17Rml4ZWRQaXRjaDoxLFNlcmlmOjIsU3ltYm9saWM6NCxTY3JpcHQ6OCxOb25zeW1ib2xpYzozMixJdGFsaWM6NjQsQWxsQ2FwOjY1NTM2LFNtYWxsQ2FwOjEzMTA3MixGb3JjZUJvbGQ6MjYyMTQ0fTtmdW5jdGlvbiBjKGUsdCl7aWYodm9pZCAwIT09dFtlXSlyZXR1cm4gZTtjb25zdCByPSgwLGkuZ2V0VW5pY29kZUZvckdseXBoKShlLHQpO2lmKC0xIT09cilmb3IoY29uc3QgZSBpbiB0KWlmKHRbZV09PT1yKXJldHVybiBlO3JldHVybigwLHMuaW5mbykoIlVuYWJsZSB0byByZWNvdmVyIGEgc3RhbmRhcmQgZ2x5cGggbmFtZSBmb3I6ICIrZSksZX10LkZvbnRGbGFncz1vLHQuTWFjU3RhbmRhcmRHbHlwaE9yZGVyaW5nPVsiLm5vdGRlZiIsIi5udWxsIiwibm9ubWFya2luZ3JldHVybiIsInNwYWNlIiwiZXhjbGFtIiwicXVvdGVkYmwiLCJudW1iZXJzaWduIiwiZG9sbGFyIiwicGVyY2VudCIsImFtcGVyc2FuZCIsInF1b3Rlc2luZ2xlIiwicGFyZW5sZWZ0IiwicGFyZW5yaWdodCIsImFzdGVyaXNrIiwicGx1cyIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwic2xhc2giLCJ6ZXJvIiwib25lIiwidHdvIiwidGhyZWUiLCJmb3VyIiwiZml2ZSIsInNpeCIsInNldmVuIiwiZWlnaHQiLCJuaW5lIiwiY29sb24iLCJzZW1pY29sb24iLCJsZXNzIiwiZXF1YWwiLCJncmVhdGVyIiwicXVlc3Rpb24iLCJhdCIsIkEiLCJCIiwiQyIsIkQiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJOIiwiTyIsIlAiLCJRIiwiUiIsIlMiLCJUIiwiVSIsIlYiLCJXIiwiWCIsIlkiLCJaIiwiYnJhY2tldGxlZnQiLCJiYWNrc2xhc2giLCJicmFja2V0cmlnaHQiLCJhc2NpaWNpcmN1bSIsInVuZGVyc2NvcmUiLCJncmF2ZSIsImEiLCJiIiwiYyIsImQiLCJlIiwiZiIsImciLCJoIiwiaSIsImoiLCJrIiwibCIsIm0iLCJuIiwibyIsInAiLCJxIiwiciIsInMiLCJ0IiwidSIsInYiLCJ3IiwieCIsInkiLCJ6IiwiYnJhY2VsZWZ0IiwiYmFyIiwiYnJhY2VyaWdodCIsImFzY2lpdGlsZGUiLCJBZGllcmVzaXMiLCJBcmluZyIsIkNjZWRpbGxhIiwiRWFjdXRlIiwiTnRpbGRlIiwiT2RpZXJlc2lzIiwiVWRpZXJlc2lzIiwiYWFjdXRlIiwiYWdyYXZlIiwiYWNpcmN1bWZsZXgiLCJhZGllcmVzaXMiLCJhdGlsZGUiLCJhcmluZyIsImNjZWRpbGxhIiwiZWFjdXRlIiwiZWdyYXZlIiwiZWNpcmN1bWZsZXgiLCJlZGllcmVzaXMiLCJpYWN1dGUiLCJpZ3JhdmUiLCJpY2lyY3VtZmxleCIsImlkaWVyZXNpcyIsIm50aWxkZSIsIm9hY3V0ZSIsIm9ncmF2ZSIsIm9jaXJjdW1mbGV4Iiwib2RpZXJlc2lzIiwib3RpbGRlIiwidWFjdXRlIiwidWdyYXZlIiwidWNpcmN1bWZsZXgiLCJ1ZGllcmVzaXMiLCJkYWdnZXIiLCJkZWdyZWUiLCJjZW50Iiwic3RlcmxpbmciLCJzZWN0aW9uIiwiYnVsbGV0IiwicGFyYWdyYXBoIiwiZ2VybWFuZGJscyIsInJlZ2lzdGVyZWQiLCJjb3B5cmlnaHQiLCJ0cmFkZW1hcmsiLCJhY3V0ZSIsImRpZXJlc2lzIiwibm90ZXF1YWwiLCJBRSIsIk9zbGFzaCIsImluZmluaXR5IiwicGx1c21pbnVzIiwibGVzc2VxdWFsIiwiZ3JlYXRlcmVxdWFsIiwieWVuIiwibXUiLCJwYXJ0aWFsZGlmZiIsInN1bW1hdGlvbiIsInByb2R1Y3QiLCJwaSIsImludGVncmFsIiwib3JkZmVtaW5pbmUiLCJvcmRtYXNjdWxpbmUiLCJPbWVnYSIsImFlIiwib3NsYXNoIiwicXVlc3Rpb25kb3duIiwiZXhjbGFtZG93biIsImxvZ2ljYWxub3QiLCJyYWRpY2FsIiwiZmxvcmluIiwiYXBwcm94ZXF1YWwiLCJEZWx0YSIsImd1aWxsZW1vdGxlZnQiLCJndWlsbGVtb3RyaWdodCIsImVsbGlwc2lzIiwibm9uYnJlYWtpbmdzcGFjZSIsIkFncmF2ZSIsIkF0aWxkZSIsIk90aWxkZSIsIk9FIiwib2UiLCJlbmRhc2giLCJlbWRhc2giLCJxdW90ZWRibGxlZnQiLCJxdW90ZWRibHJpZ2h0IiwicXVvdGVsZWZ0IiwicXVvdGVyaWdodCIsImRpdmlkZSIsImxvemVuZ2UiLCJ5ZGllcmVzaXMiLCJZZGllcmVzaXMiLCJmcmFjdGlvbiIsImN1cnJlbmN5IiwiZ3VpbHNpbmdsbGVmdCIsImd1aWxzaW5nbHJpZ2h0IiwiZmkiLCJmbCIsImRhZ2dlcmRibCIsInBlcmlvZGNlbnRlcmVkIiwicXVvdGVzaW5nbGJhc2UiLCJxdW90ZWRibGJhc2UiLCJwZXJ0aG91c2FuZCIsIkFjaXJjdW1mbGV4IiwiRWNpcmN1bWZsZXgiLCJBYWN1dGUiLCJFZGllcmVzaXMiLCJFZ3JhdmUiLCJJYWN1dGUiLCJJY2lyY3VtZmxleCIsIklkaWVyZXNpcyIsIklncmF2ZSIsIk9hY3V0ZSIsIk9jaXJjdW1mbGV4IiwiYXBwbGUiLCJPZ3JhdmUiLCJVYWN1dGUiLCJVY2lyY3VtZmxleCIsIlVncmF2ZSIsImRvdGxlc3NpIiwiY2lyY3VtZmxleCIsInRpbGRlIiwibWFjcm9uIiwiYnJldmUiLCJkb3RhY2NlbnQiLCJyaW5nIiwiY2VkaWxsYSIsImh1bmdhcnVtbGF1dCIsIm9nb25layIsImNhcm9uIiwiTHNsYXNoIiwibHNsYXNoIiwiU2Nhcm9uIiwic2Nhcm9uIiwiWmNhcm9uIiwiemNhcm9uIiwiYnJva2VuYmFyIiwiRXRoIiwiZXRoIiwiWWFjdXRlIiwieWFjdXRlIiwiVGhvcm4iLCJ0aG9ybiIsIm1pbnVzIiwibXVsdGlwbHkiLCJvbmVzdXBlcmlvciIsInR3b3N1cGVyaW9yIiwidGhyZWVzdXBlcmlvciIsIm9uZWhhbGYiLCJvbmVxdWFydGVyIiwidGhyZWVxdWFydGVycyIsImZyYW5jIiwiR2JyZXZlIiwiZ2JyZXZlIiwiSWRvdGFjY2VudCIsIlNjZWRpbGxhIiwic2NlZGlsbGEiLCJDYWN1dGUiLCJjYWN1dGUiLCJDY2Fyb24iLCJjY2Fyb24iLCJkY3JvYXQiXX0sKGUsdCxyKT0+e3Iucih0KSxyLmQodCx7Z2V0RGluZ2JhdHNHbHlwaHNVbmljb2RlOigpPT5pLGdldEdseXBoc1VuaWNvZGU6KCk9PmF9KTt2YXIgbj1yKDE0OSk7Y29uc3QgYT0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2UuQT02NSxlLkFFPTE5OCxlLkFFYWN1dGU9NTA4LGUuQUVtYWNyb249NDgyLGUuQUVzbWFsbD02MzQ2MixlLkFhY3V0ZT0xOTMsZS5BYWN1dGVzbWFsbD02MzQ1NyxlLkFicmV2ZT0yNTgsZS5BYnJldmVhY3V0ZT03ODU0LGUuQWJyZXZlY3lyaWxsaWM9MTIzMixlLkFicmV2ZWRvdGJlbG93PTc4NjIsZS5BYnJldmVncmF2ZT03ODU2LGUuQWJyZXZlaG9va2Fib3ZlPTc4NTgsZS5BYnJldmV0aWxkZT03ODYwLGUuQWNhcm9uPTQ2MSxlLkFjaXJjbGU9OTM5OCxlLkFjaXJjdW1mbGV4PTE5NCxlLkFjaXJjdW1mbGV4YWN1dGU9Nzg0NCxlLkFjaXJjdW1mbGV4ZG90YmVsb3c9Nzg1MixlLkFjaXJjdW1mbGV4Z3JhdmU9Nzg0NixlLkFjaXJjdW1mbGV4aG9va2Fib3ZlPTc4NDgsZS5BY2lyY3VtZmxleHNtYWxsPTYzNDU4LGUuQWNpcmN1bWZsZXh0aWxkZT03ODUwLGUuQWN1dGU9NjMxNzcsZS5BY3V0ZXNtYWxsPTYzNDEyLGUuQWN5cmlsbGljPTEwNDAsZS5BZGJsZ3JhdmU9NTEyLGUuQWRpZXJlc2lzPTE5NixlLkFkaWVyZXNpc2N5cmlsbGljPTEyMzQsZS5BZGllcmVzaXNtYWNyb249NDc4LGUuQWRpZXJlc2lzc21hbGw9NjM0NjAsZS5BZG90YmVsb3c9Nzg0MCxlLkFkb3RtYWNyb249NDgwLGUuQWdyYXZlPTE5MixlLkFncmF2ZXNtYWxsPTYzNDU2LGUuQWhvb2thYm92ZT03ODQyLGUuQWllY3lyaWxsaWM9MTIzNixlLkFpbnZlcnRlZGJyZXZlPTUxNCxlLkFscGhhPTkxMyxlLkFscGhhdG9ub3M9OTAyLGUuQW1hY3Jvbj0yNTYsZS5BbW9ub3NwYWNlPTY1MzEzLGUuQW9nb25laz0yNjAsZS5BcmluZz0xOTcsZS5BcmluZ2FjdXRlPTUwNixlLkFyaW5nYmVsb3c9NzY4MCxlLkFyaW5nc21hbGw9NjM0NjEsZS5Bc21hbGw9NjMzMjksZS5BdGlsZGU9MTk1LGUuQXRpbGRlc21hbGw9NjM0NTksZS5BeWJhcm1lbmlhbj0xMzI5LGUuQj02NixlLkJjaXJjbGU9OTM5OSxlLkJkb3RhY2NlbnQ9NzY4MixlLkJkb3RiZWxvdz03Njg0LGUuQmVjeXJpbGxpYz0xMDQxLGUuQmVuYXJtZW5pYW49MTMzMCxlLkJldGE9OTE0LGUuQmhvb2s9Mzg1LGUuQmxpbmViZWxvdz03Njg2LGUuQm1vbm9zcGFjZT02NTMxNCxlLkJyZXZlc21hbGw9NjMyMjAsZS5Cc21hbGw9NjMzMzAsZS5CdG9wYmFyPTM4NixlLkM9NjcsZS5DYWFybWVuaWFuPTEzNDIsZS5DYWN1dGU9MjYyLGUuQ2Fyb249NjMxNzgsZS5DYXJvbnNtYWxsPTYzMjIxLGUuQ2Nhcm9uPTI2OCxlLkNjZWRpbGxhPTE5OSxlLkNjZWRpbGxhYWN1dGU9NzY4OCxlLkNjZWRpbGxhc21hbGw9NjM0NjMsZS5DY2lyY2xlPTk0MDAsZS5DY2lyY3VtZmxleD0yNjQsZS5DZG90PTI2NixlLkNkb3RhY2NlbnQ9MjY2LGUuQ2VkaWxsYXNtYWxsPTYzNDE2LGUuQ2hhYXJtZW5pYW49MTM1MyxlLkNoZWFia2hhc2lhbmN5cmlsbGljPTEyMTIsZS5DaGVjeXJpbGxpYz0xMDYzLGUuQ2hlZGVzY2VuZGVyYWJraGFzaWFuY3lyaWxsaWM9MTIxNCxlLkNoZWRlc2NlbmRlcmN5cmlsbGljPTEyMDYsZS5DaGVkaWVyZXNpc2N5cmlsbGljPTEyNjgsZS5DaGVoYXJtZW5pYW49MTM0NyxlLkNoZWtoYWthc3NpYW5jeXJpbGxpYz0xMjI3LGUuQ2hldmVydGljYWxzdHJva2VjeXJpbGxpYz0xMjA4LGUuQ2hpPTkzNSxlLkNob29rPTM5MSxlLkNpcmN1bWZsZXhzbWFsbD02MzIyMixlLkNtb25vc3BhY2U9NjUzMTUsZS5Db2FybWVuaWFuPTEzNjEsZS5Dc21hbGw9NjMzMzEsZS5EPTY4LGUuRFo9NDk3LGUuRFpjYXJvbj00NTIsZS5EYWFybWVuaWFuPTEzMzIsZS5EYWZyaWNhbj0zOTMsZS5EY2Fyb249MjcwLGUuRGNlZGlsbGE9NzY5NixlLkRjaXJjbGU9OTQwMSxlLkRjaXJjdW1mbGV4YmVsb3c9NzY5OCxlLkRjcm9hdD0yNzIsZS5EZG90YWNjZW50PTc2OTAsZS5EZG90YmVsb3c9NzY5MixlLkRlY3lyaWxsaWM9MTA0NCxlLkRlaWNvcHRpYz0xMDA2LGUuRGVsdGE9ODcxMCxlLkRlbHRhZ3JlZWs9OTE2LGUuRGhvb2s9Mzk0LGUuRGllcmVzaXM9NjMxNzksZS5EaWVyZXNpc0FjdXRlPTYzMTgwLGUuRGllcmVzaXNHcmF2ZT02MzE4MSxlLkRpZXJlc2lzc21hbGw9NjM0MDAsZS5EaWdhbW1hZ3JlZWs9OTg4LGUuRGplY3lyaWxsaWM9MTAyNixlLkRsaW5lYmVsb3c9NzY5NCxlLkRtb25vc3BhY2U9NjUzMTYsZS5Eb3RhY2NlbnRzbWFsbD02MzIyMyxlLkRzbGFzaD0yNzIsZS5Ec21hbGw9NjMzMzIsZS5EdG9wYmFyPTM5NSxlLkR6PTQ5OCxlLkR6Y2Fyb249NDUzLGUuRHplYWJraGFzaWFuY3lyaWxsaWM9MTI0OCxlLkR6ZWN5cmlsbGljPTEwMjksZS5EemhlY3lyaWxsaWM9MTAzOSxlLkU9NjksZS5FYWN1dGU9MjAxLGUuRWFjdXRlc21hbGw9NjM0NjUsZS5FYnJldmU9Mjc2LGUuRWNhcm9uPTI4MixlLkVjZWRpbGxhYnJldmU9NzcwOCxlLkVjaGFybWVuaWFuPTEzMzMsZS5FY2lyY2xlPTk0MDIsZS5FY2lyY3VtZmxleD0yMDIsZS5FY2lyY3VtZmxleGFjdXRlPTc4NzAsZS5FY2lyY3VtZmxleGJlbG93PTc3MDQsZS5FY2lyY3VtZmxleGRvdGJlbG93PTc4NzgsZS5FY2lyY3VtZmxleGdyYXZlPTc4NzIsZS5FY2lyY3VtZmxleGhvb2thYm92ZT03ODc0LGUuRWNpcmN1bWZsZXhzbWFsbD02MzQ2NixlLkVjaXJjdW1mbGV4dGlsZGU9Nzg3NixlLkVjeXJpbGxpYz0xMDI4LGUuRWRibGdyYXZlPTUxNixlLkVkaWVyZXNpcz0yMDMsZS5FZGllcmVzaXNzbWFsbD02MzQ2NyxlLkVkb3Q9Mjc4LGUuRWRvdGFjY2VudD0yNzgsZS5FZG90YmVsb3c9Nzg2NCxlLkVmY3lyaWxsaWM9MTA2MCxlLkVncmF2ZT0yMDAsZS5FZ3JhdmVzbWFsbD02MzQ2NCxlLkVoYXJtZW5pYW49MTMzNSxlLkVob29rYWJvdmU9Nzg2NixlLkVpZ2h0cm9tYW49ODU1MSxlLkVpbnZlcnRlZGJyZXZlPTUxOCxlLkVpb3RpZmllZGN5cmlsbGljPTExMjQsZS5FbGN5cmlsbGljPTEwNTEsZS5FbGV2ZW5yb21hbj04NTU0LGUuRW1hY3Jvbj0yNzQsZS5FbWFjcm9uYWN1dGU9NzcwMixlLkVtYWNyb25ncmF2ZT03NzAwLGUuRW1jeXJpbGxpYz0xMDUyLGUuRW1vbm9zcGFjZT02NTMxNyxlLkVuY3lyaWxsaWM9MTA1MyxlLkVuZGVzY2VuZGVyY3lyaWxsaWM9MTE4NixlLkVuZz0zMzAsZS5FbmdoZWN5cmlsbGljPTExODgsZS5Fbmhvb2tjeXJpbGxpYz0xMjIzLGUuRW9nb25laz0yODAsZS5Fb3Blbj00MDAsZS5FcHNpbG9uPTkxNyxlLkVwc2lsb250b25vcz05MDQsZS5FcmN5cmlsbGljPTEwNTYsZS5FcmV2ZXJzZWQ9Mzk4LGUuRXJldmVyc2VkY3lyaWxsaWM9MTA2OSxlLkVzY3lyaWxsaWM9MTA1NyxlLkVzZGVzY2VuZGVyY3lyaWxsaWM9MTE5NCxlLkVzaD00MjUsZS5Fc21hbGw9NjMzMzMsZS5FdGE9OTE5LGUuRXRhcm1lbmlhbj0xMzM2LGUuRXRhdG9ub3M9OTA1LGUuRXRoPTIwOCxlLkV0aHNtYWxsPTYzNDcyLGUuRXRpbGRlPTc4NjgsZS5FdGlsZGViZWxvdz03NzA2LGUuRXVybz04MzY0LGUuRXpoPTQzOSxlLkV6aGNhcm9uPTQ5NCxlLkV6aHJldmVyc2VkPTQ0MCxlLkY9NzAsZS5GY2lyY2xlPTk0MDMsZS5GZG90YWNjZW50PTc3MTAsZS5GZWhhcm1lbmlhbj0xMzY2LGUuRmVpY29wdGljPTk5NixlLkZob29rPTQwMSxlLkZpdGFjeXJpbGxpYz0xMTM4LGUuRml2ZXJvbWFuPTg1NDgsZS5GbW9ub3NwYWNlPTY1MzE4LGUuRm91cnJvbWFuPTg1NDcsZS5Gc21hbGw9NjMzMzQsZS5HPTcxLGUuR0JzcXVhcmU9MTMxOTEsZS5HYWN1dGU9NTAwLGUuR2FtbWE9OTE1LGUuR2FtbWFhZnJpY2FuPTQwNCxlLkdhbmdpYWNvcHRpYz0xMDAyLGUuR2JyZXZlPTI4NixlLkdjYXJvbj00ODYsZS5HY2VkaWxsYT0yOTAsZS5HY2lyY2xlPTk0MDQsZS5HY2lyY3VtZmxleD0yODQsZS5HY29tbWFhY2NlbnQ9MjkwLGUuR2RvdD0yODgsZS5HZG90YWNjZW50PTI4OCxlLkdlY3lyaWxsaWM9MTA0MyxlLkdoYWRhcm1lbmlhbj0xMzQ2LGUuR2hlbWlkZGxlaG9va2N5cmlsbGljPTExNzIsZS5HaGVzdHJva2VjeXJpbGxpYz0xMTcwLGUuR2hldXB0dXJuY3lyaWxsaWM9MTE2OCxlLkdob29rPTQwMyxlLkdpbWFybWVuaWFuPTEzMzEsZS5HamVjeXJpbGxpYz0xMDI3LGUuR21hY3Jvbj03NzEyLGUuR21vbm9zcGFjZT02NTMxOSxlLkdyYXZlPTYzMTgyLGUuR3JhdmVzbWFsbD02MzMyOCxlLkdzbWFsbD02MzMzNSxlLkdzbWFsbGhvb2s9NjY3LGUuR3N0cm9rZT00ODQsZS5IPTcyLGUuSDE4NTMzPTk2NzksZS5IMTg1NDM9OTY0MixlLkgxODU1MT05NjQzLGUuSDIyMDczPTk2MzMsZS5IUHNxdWFyZT0xMzI1OSxlLkhhYWJraGFzaWFuY3lyaWxsaWM9MTE5MixlLkhhZGVzY2VuZGVyY3lyaWxsaWM9MTIwMixlLkhhcmRzaWduY3lyaWxsaWM9MTA2NixlLkhiYXI9Mjk0LGUuSGJyZXZlYmVsb3c9NzcyMixlLkhjZWRpbGxhPTc3MjAsZS5IY2lyY2xlPTk0MDUsZS5IY2lyY3VtZmxleD0yOTIsZS5IZGllcmVzaXM9NzcxOCxlLkhkb3RhY2NlbnQ9NzcxNCxlLkhkb3RiZWxvdz03NzE2LGUuSG1vbm9zcGFjZT02NTMyMCxlLkhvYXJtZW5pYW49MTM0NCxlLkhvcmljb3B0aWM9MWUzLGUuSHNtYWxsPTYzMzM2LGUuSHVuZ2FydW1sYXV0PTYzMTgzLGUuSHVuZ2FydW1sYXV0c21hbGw9NjMyMjQsZS5IenNxdWFyZT0xMzIwMCxlLkk9NzMsZS5JQWN5cmlsbGljPTEwNzEsZS5JSj0zMDYsZS5JVWN5cmlsbGljPTEwNzAsZS5JYWN1dGU9MjA1LGUuSWFjdXRlc21hbGw9NjM0NjksZS5JYnJldmU9MzAwLGUuSWNhcm9uPTQ2MyxlLkljaXJjbGU9OTQwNixlLkljaXJjdW1mbGV4PTIwNixlLkljaXJjdW1mbGV4c21hbGw9NjM0NzAsZS5JY3lyaWxsaWM9MTAzMCxlLklkYmxncmF2ZT01MjAsZS5JZGllcmVzaXM9MjA3LGUuSWRpZXJlc2lzYWN1dGU9NzcyNixlLklkaWVyZXNpc2N5cmlsbGljPTEyNTIsZS5JZGllcmVzaXNzbWFsbD02MzQ3MSxlLklkb3Q9MzA0LGUuSWRvdGFjY2VudD0zMDQsZS5JZG90YmVsb3c9Nzg4MixlLkllYnJldmVjeXJpbGxpYz0xMjM4LGUuSWVjeXJpbGxpYz0xMDQ1LGUuSWZyYWt0dXI9ODQ2NSxlLklncmF2ZT0yMDQsZS5JZ3JhdmVzbWFsbD02MzQ2OCxlLklob29rYWJvdmU9Nzg4MCxlLklpY3lyaWxsaWM9MTA0OCxlLklpbnZlcnRlZGJyZXZlPTUyMixlLklpc2hvcnRjeXJpbGxpYz0xMDQ5LGUuSW1hY3Jvbj0yOTgsZS5JbWFjcm9uY3lyaWxsaWM9MTI1MCxlLkltb25vc3BhY2U9NjUzMjEsZS5Jbmlhcm1lbmlhbj0xMzM5LGUuSW9jeXJpbGxpYz0xMDI1LGUuSW9nb25laz0zMDIsZS5Jb3RhPTkyMSxlLklvdGFhZnJpY2FuPTQwNixlLklvdGFkaWVyZXNpcz05MzgsZS5Jb3RhdG9ub3M9OTA2LGUuSXNtYWxsPTYzMzM3LGUuSXN0cm9rZT00MDcsZS5JdGlsZGU9Mjk2LGUuSXRpbGRlYmVsb3c9NzcyNCxlLkl6aGl0c2FjeXJpbGxpYz0xMTQwLGUuSXpoaXRzYWRibGdyYXZlY3lyaWxsaWM9MTE0MixlLko9NzQsZS5KYWFybWVuaWFuPTEzNDUsZS5KY2lyY2xlPTk0MDcsZS5KY2lyY3VtZmxleD0zMDgsZS5KZWN5cmlsbGljPTEwMzIsZS5KaGVoYXJtZW5pYW49MTM1NSxlLkptb25vc3BhY2U9NjUzMjIsZS5Kc21hbGw9NjMzMzgsZS5LPTc1LGUuS0JzcXVhcmU9MTMxODksZS5LS3NxdWFyZT0xMzI2MSxlLkthYmFzaGtpcmN5cmlsbGljPTExODQsZS5LYWN1dGU9NzcyOCxlLkthY3lyaWxsaWM9MTA1MCxlLkthZGVzY2VuZGVyY3lyaWxsaWM9MTE3OCxlLkthaG9va2N5cmlsbGljPTEyMTksZS5LYXBwYT05MjIsZS5LYXN0cm9rZWN5cmlsbGljPTExODIsZS5LYXZlcnRpY2Fsc3Ryb2tlY3lyaWxsaWM9MTE4MCxlLktjYXJvbj00ODgsZS5LY2VkaWxsYT0zMTAsZS5LY2lyY2xlPTk0MDgsZS5LY29tbWFhY2NlbnQ9MzEwLGUuS2RvdGJlbG93PTc3MzAsZS5LZWhhcm1lbmlhbj0xMzY0LGUuS2VuYXJtZW5pYW49MTM0MyxlLktoYWN5cmlsbGljPTEwNjEsZS5LaGVpY29wdGljPTk5OCxlLktob29rPTQwOCxlLktqZWN5cmlsbGljPTEwMzYsZS5LbGluZWJlbG93PTc3MzIsZS5LbW9ub3NwYWNlPTY1MzIzLGUuS29wcGFjeXJpbGxpYz0xMTUyLGUuS29wcGFncmVlaz05OTAsZS5Lc2ljeXJpbGxpYz0xMTM0LGUuS3NtYWxsPTYzMzM5LGUuTD03NixlLkxKPTQ1NSxlLkxMPTYzMTY3LGUuTGFjdXRlPTMxMyxlLkxhbWJkYT05MjMsZS5MY2Fyb249MzE3LGUuTGNlZGlsbGE9MzE1LGUuTGNpcmNsZT05NDA5LGUuTGNpcmN1bWZsZXhiZWxvdz03NzQwLGUuTGNvbW1hYWNjZW50PTMxNSxlLkxkb3Q9MzE5LGUuTGRvdGFjY2VudD0zMTksZS5MZG90YmVsb3c9NzczNCxlLkxkb3RiZWxvd21hY3Jvbj03NzM2LGUuTGl3bmFybWVuaWFuPTEzNDAsZS5Maj00NTYsZS5MamVjeXJpbGxpYz0xMDMzLGUuTGxpbmViZWxvdz03NzM4LGUuTG1vbm9zcGFjZT02NTMyNCxlLkxzbGFzaD0zMjEsZS5Mc2xhc2hzbWFsbD02MzIyNSxlLkxzbWFsbD02MzM0MCxlLk09NzcsZS5NQnNxdWFyZT0xMzE5MCxlLk1hY3Jvbj02MzE4NCxlLk1hY3JvbnNtYWxsPTYzNDA3LGUuTWFjdXRlPTc3NDIsZS5NY2lyY2xlPTk0MTAsZS5NZG90YWNjZW50PTc3NDQsZS5NZG90YmVsb3c9Nzc0NixlLk1lbmFybWVuaWFuPTEzNDgsZS5NbW9ub3NwYWNlPTY1MzI1LGUuTXNtYWxsPTYzMzQxLGUuTXR1cm5lZD00MTIsZS5NdT05MjQsZS5OPTc4LGUuTko9NDU4LGUuTmFjdXRlPTMyMyxlLk5jYXJvbj0zMjcsZS5OY2VkaWxsYT0zMjUsZS5OY2lyY2xlPTk0MTEsZS5OY2lyY3VtZmxleGJlbG93PTc3NTQsZS5OY29tbWFhY2NlbnQ9MzI1LGUuTmRvdGFjY2VudD03NzQ4LGUuTmRvdGJlbG93PTc3NTAsZS5OaG9va2xlZnQ9NDEzLGUuTmluZXJvbWFuPTg1NTIsZS5Oaj00NTksZS5OamVjeXJpbGxpYz0xMDM0LGUuTmxpbmViZWxvdz03NzUyLGUuTm1vbm9zcGFjZT02NTMyNixlLk5vd2FybWVuaWFuPTEzNTAsZS5Oc21hbGw9NjMzNDIsZS5OdGlsZGU9MjA5LGUuTnRpbGRlc21hbGw9NjM0NzMsZS5OdT05MjUsZS5PPTc5LGUuT0U9MzM4LGUuT0VzbWFsbD02MzIyNixlLk9hY3V0ZT0yMTEsZS5PYWN1dGVzbWFsbD02MzQ3NSxlLk9iYXJyZWRjeXJpbGxpYz0xMjU2LGUuT2JhcnJlZGRpZXJlc2lzY3lyaWxsaWM9MTI1OCxlLk9icmV2ZT0zMzQsZS5PY2Fyb249NDY1LGUuT2NlbnRlcmVkdGlsZGU9NDE1LGUuT2NpcmNsZT05NDEyLGUuT2NpcmN1bWZsZXg9MjEyLGUuT2NpcmN1bWZsZXhhY3V0ZT03ODg4LGUuT2NpcmN1bWZsZXhkb3RiZWxvdz03ODk2LGUuT2NpcmN1bWZsZXhncmF2ZT03ODkwLGUuT2NpcmN1bWZsZXhob29rYWJvdmU9Nzg5MixlLk9jaXJjdW1mbGV4c21hbGw9NjM0NzYsZS5PY2lyY3VtZmxleHRpbGRlPTc4OTQsZS5PY3lyaWxsaWM9MTA1NCxlLk9kYmxhY3V0ZT0zMzYsZS5PZGJsZ3JhdmU9NTI0LGUuT2RpZXJlc2lzPTIxNCxlLk9kaWVyZXNpc2N5cmlsbGljPTEyNTQsZS5PZGllcmVzaXNzbWFsbD02MzQ3OCxlLk9kb3RiZWxvdz03ODg0LGUuT2dvbmVrc21hbGw9NjMyMjcsZS5PZ3JhdmU9MjEwLGUuT2dyYXZlc21hbGw9NjM0NzQsZS5PaGFybWVuaWFuPTEzNjUsZS5PaG09ODQ4NixlLk9ob29rYWJvdmU9Nzg4NixlLk9ob3JuPTQxNixlLk9ob3JuYWN1dGU9Nzg5OCxlLk9ob3JuZG90YmVsb3c9NzkwNixlLk9ob3JuZ3JhdmU9NzkwMCxlLk9ob3JuaG9va2Fib3ZlPTc5MDIsZS5PaG9ybnRpbGRlPTc5MDQsZS5PaHVuZ2FydW1sYXV0PTMzNixlLk9pPTQxOCxlLk9pbnZlcnRlZGJyZXZlPTUyNixlLk9tYWNyb249MzMyLGUuT21hY3JvbmFjdXRlPTc3NjIsZS5PbWFjcm9uZ3JhdmU9Nzc2MCxlLk9tZWdhPTg0ODYsZS5PbWVnYWN5cmlsbGljPTExMjAsZS5PbWVnYWdyZWVrPTkzNyxlLk9tZWdhcm91bmRjeXJpbGxpYz0xMTQ2LGUuT21lZ2F0aXRsb2N5cmlsbGljPTExNDgsZS5PbWVnYXRvbm9zPTkxMSxlLk9taWNyb249OTI3LGUuT21pY3JvbnRvbm9zPTkwOCxlLk9tb25vc3BhY2U9NjUzMjcsZS5PbmVyb21hbj04NTQ0LGUuT29nb25laz00OTAsZS5Pb2dvbmVrbWFjcm9uPTQ5MixlLk9vcGVuPTM5MCxlLk9zbGFzaD0yMTYsZS5Pc2xhc2hhY3V0ZT01MTAsZS5Pc2xhc2hzbWFsbD02MzQ4MCxlLk9zbWFsbD02MzM0MyxlLk9zdHJva2VhY3V0ZT01MTAsZS5PdGN5cmlsbGljPTExNTAsZS5PdGlsZGU9MjEzLGUuT3RpbGRlYWN1dGU9Nzc1NixlLk90aWxkZWRpZXJlc2lzPTc3NTgsZS5PdGlsZGVzbWFsbD02MzQ3NyxlLlA9ODAsZS5QYWN1dGU9Nzc2NCxlLlBjaXJjbGU9OTQxMyxlLlBkb3RhY2NlbnQ9Nzc2NixlLlBlY3lyaWxsaWM9MTA1NSxlLlBlaGFybWVuaWFuPTEzNTQsZS5QZW1pZGRsZWhvb2tjeXJpbGxpYz0xMTkwLGUuUGhpPTkzNCxlLlBob29rPTQyMCxlLlBpPTkyOCxlLlBpd3Jhcm1lbmlhbj0xMzYzLGUuUG1vbm9zcGFjZT02NTMyOCxlLlBzaT05MzYsZS5Qc2ljeXJpbGxpYz0xMTM2LGUuUHNtYWxsPTYzMzQ0LGUuUT04MSxlLlFjaXJjbGU9OTQxNCxlLlFtb25vc3BhY2U9NjUzMjksZS5Rc21hbGw9NjMzNDUsZS5SPTgyLGUuUmFhcm1lbmlhbj0xMzU2LGUuUmFjdXRlPTM0MCxlLlJjYXJvbj0zNDQsZS5SY2VkaWxsYT0zNDIsZS5SY2lyY2xlPTk0MTUsZS5SY29tbWFhY2NlbnQ9MzQyLGUuUmRibGdyYXZlPTUyOCxlLlJkb3RhY2NlbnQ9Nzc2OCxlLlJkb3RiZWxvdz03NzcwLGUuUmRvdGJlbG93bWFjcm9uPTc3NzIsZS5SZWhhcm1lbmlhbj0xMzYwLGUuUmZyYWt0dXI9ODQ3NixlLlJobz05MjksZS5SaW5nc21hbGw9NjMyMjgsZS5SaW52ZXJ0ZWRicmV2ZT01MzAsZS5SbGluZWJlbG93PTc3NzQsZS5SbW9ub3NwYWNlPTY1MzMwLGUuUnNtYWxsPTYzMzQ2LGUuUnNtYWxsaW52ZXJ0ZWQ9NjQxLGUuUnNtYWxsaW52ZXJ0ZWRzdXBlcmlvcj02OTQsZS5TPTgzLGUuU0YwMTAwMDA9OTQ4NCxlLlNGMDIwMDAwPTk0OTIsZS5TRjAzMDAwMD05NDg4LGUuU0YwNDAwMDA9OTQ5NixlLlNGMDUwMDAwPTk1MzIsZS5TRjA2MDAwMD05NTE2LGUuU0YwNzAwMDA9OTUyNCxlLlNGMDgwMDAwPTk1MDAsZS5TRjA5MDAwMD05NTA4LGUuU0YxMDAwMDA9OTQ3MixlLlNGMTEwMDAwPTk0NzQsZS5TRjE5MDAwMD05NTY5LGUuU0YyMDAwMDA9OTU3MCxlLlNGMjEwMDAwPTk1NTgsZS5TRjIyMDAwMD05NTU3LGUuU0YyMzAwMDA9OTU3MSxlLlNGMjQwMDAwPTk1NTMsZS5TRjI1MDAwMD05NTU5LGUuU0YyNjAwMDA9OTU2NSxlLlNGMjcwMDAwPTk1NjQsZS5TRjI4MDAwMD05NTYzLGUuU0YzNjAwMDA9OTU2NixlLlNGMzcwMDAwPTk1NjcsZS5TRjM4MDAwMD05NTYyLGUuU0YzOTAwMDA9OTU1NixlLlNGNDAwMDAwPTk1NzcsZS5TRjQxMDAwMD05NTc0LGUuU0Y0MjAwMDA9OTU2OCxlLlNGNDMwMDAwPTk1NTIsZS5TRjQ0MDAwMD05NTgwLGUuU0Y0NTAwMDA9OTU3NSxlLlNGNDYwMDAwPTk1NzYsZS5TRjQ3MDAwMD05NTcyLGUuU0Y0ODAwMDA9OTU3MyxlLlNGNDkwMDAwPTk1NjEsZS5TRjUwMDAwMD05NTYwLGUuU0Y1MTAwMDA9OTU1NCxlLlNGNTIwMDAwPTk1NTUsZS5TRjUzMDAwMD05NTc5LGUuU0Y1NDAwMDA9OTU3OCxlLlNhY3V0ZT0zNDYsZS5TYWN1dGVkb3RhY2NlbnQ9Nzc4MCxlLlNhbXBpZ3JlZWs9OTkyLGUuU2Nhcm9uPTM1MixlLlNjYXJvbmRvdGFjY2VudD03NzgyLGUuU2Nhcm9uc21hbGw9NjMyMjksZS5TY2VkaWxsYT0zNTAsZS5TY2h3YT0zOTksZS5TY2h3YWN5cmlsbGljPTEyNDAsZS5TY2h3YWRpZXJlc2lzY3lyaWxsaWM9MTI0MixlLlNjaXJjbGU9OTQxNixlLlNjaXJjdW1mbGV4PTM0OCxlLlNjb21tYWFjY2VudD01MzYsZS5TZG90YWNjZW50PTc3NzYsZS5TZG90YmVsb3c9Nzc3OCxlLlNkb3RiZWxvd2RvdGFjY2VudD03Nzg0LGUuU2VoYXJtZW5pYW49MTM1NyxlLlNldmVucm9tYW49ODU1MCxlLlNoYWFybWVuaWFuPTEzNTEsZS5TaGFjeXJpbGxpYz0xMDY0LGUuU2hjaGFjeXJpbGxpYz0xMDY1LGUuU2hlaWNvcHRpYz05OTQsZS5TaGhhY3lyaWxsaWM9MTIxMCxlLlNoaW1hY29wdGljPTEwMDQsZS5TaWdtYT05MzEsZS5TaXhyb21hbj04NTQ5LGUuU21vbm9zcGFjZT02NTMzMSxlLlNvZnRzaWduY3lyaWxsaWM9MTA2OCxlLlNzbWFsbD02MzM0NyxlLlN0aWdtYWdyZWVrPTk4NixlLlQ9ODQsZS5UYXU9OTMyLGUuVGJhcj0zNTgsZS5UY2Fyb249MzU2LGUuVGNlZGlsbGE9MzU0LGUuVGNpcmNsZT05NDE3LGUuVGNpcmN1bWZsZXhiZWxvdz03NzkyLGUuVGNvbW1hYWNjZW50PTM1NCxlLlRkb3RhY2NlbnQ9Nzc4NixlLlRkb3RiZWxvdz03Nzg4LGUuVGVjeXJpbGxpYz0xMDU4LGUuVGVkZXNjZW5kZXJjeXJpbGxpYz0xMTk2LGUuVGVucm9tYW49ODU1MyxlLlRldHNlY3lyaWxsaWM9MTIwNCxlLlRoZXRhPTkyMCxlLlRob29rPTQyOCxlLlRob3JuPTIyMixlLlRob3Juc21hbGw9NjM0ODYsZS5UaHJlZXJvbWFuPTg1NDYsZS5UaWxkZXNtYWxsPTYzMjMwLGUuVGl3bmFybWVuaWFuPTEzNTksZS5UbGluZWJlbG93PTc3OTAsZS5UbW9ub3NwYWNlPTY1MzMyLGUuVG9hcm1lbmlhbj0xMzM3LGUuVG9uZWZpdmU9NDQ0LGUuVG9uZXNpeD0zODgsZS5Ub25ldHdvPTQyMyxlLlRyZXRyb2ZsZXhob29rPTQzMCxlLlRzZWN5cmlsbGljPTEwNjIsZS5Uc2hlY3lyaWxsaWM9MTAzNSxlLlRzbWFsbD02MzM0OCxlLlR3ZWx2ZXJvbWFuPTg1NTUsZS5Ud29yb21hbj04NTQ1LGUuVT04NSxlLlVhY3V0ZT0yMTgsZS5VYWN1dGVzbWFsbD02MzQ4MixlLlVicmV2ZT0zNjQsZS5VY2Fyb249NDY3LGUuVWNpcmNsZT05NDE4LGUuVWNpcmN1bWZsZXg9MjE5LGUuVWNpcmN1bWZsZXhiZWxvdz03Nzk4LGUuVWNpcmN1bWZsZXhzbWFsbD02MzQ4MyxlLlVjeXJpbGxpYz0xMDU5LGUuVWRibGFjdXRlPTM2OCxlLlVkYmxncmF2ZT01MzIsZS5VZGllcmVzaXM9MjIwLGUuVWRpZXJlc2lzYWN1dGU9NDcxLGUuVWRpZXJlc2lzYmVsb3c9Nzc5NCxlLlVkaWVyZXNpc2Nhcm9uPTQ3MyxlLlVkaWVyZXNpc2N5cmlsbGljPTEyNjQsZS5VZGllcmVzaXNncmF2ZT00NzUsZS5VZGllcmVzaXNtYWNyb249NDY5LGUuVWRpZXJlc2lzc21hbGw9NjM0ODQsZS5VZG90YmVsb3c9NzkwOCxlLlVncmF2ZT0yMTcsZS5VZ3JhdmVzbWFsbD02MzQ4MSxlLlVob29rYWJvdmU9NzkxMCxlLlVob3JuPTQzMSxlLlVob3JuYWN1dGU9NzkxMixlLlVob3JuZG90YmVsb3c9NzkyMCxlLlVob3JuZ3JhdmU9NzkxNCxlLlVob3JuaG9va2Fib3ZlPTc5MTYsZS5VaG9ybnRpbGRlPTc5MTgsZS5VaHVuZ2FydW1sYXV0PTM2OCxlLlVodW5nYXJ1bWxhdXRjeXJpbGxpYz0xMjY2LGUuVWludmVydGVkYnJldmU9NTM0LGUuVWtjeXJpbGxpYz0xMTQ0LGUuVW1hY3Jvbj0zNjIsZS5VbWFjcm9uY3lyaWxsaWM9MTI2MixlLlVtYWNyb25kaWVyZXNpcz03ODAyLGUuVW1vbm9zcGFjZT02NTMzMyxlLlVvZ29uZWs9MzcwLGUuVXBzaWxvbj05MzMsZS5VcHNpbG9uMT05NzgsZS5VcHNpbG9uYWN1dGVob29rc3ltYm9sZ3JlZWs9OTc5LGUuVXBzaWxvbmFmcmljYW49NDMzLGUuVXBzaWxvbmRpZXJlc2lzPTkzOSxlLlVwc2lsb25kaWVyZXNpc2hvb2tzeW1ib2xncmVlaz05ODAsZS5VcHNpbG9uaG9va3N5bWJvbD05NzgsZS5VcHNpbG9udG9ub3M9OTEwLGUuVXJpbmc9MzY2LGUuVXNob3J0Y3lyaWxsaWM9MTAzOCxlLlVzbWFsbD02MzM0OSxlLlVzdHJhaWdodGN5cmlsbGljPTExOTgsZS5Vc3RyYWlnaHRzdHJva2VjeXJpbGxpYz0xMjAwLGUuVXRpbGRlPTM2MCxlLlV0aWxkZWFjdXRlPTc4MDAsZS5VdGlsZGViZWxvdz03Nzk2LGUuVj04NixlLlZjaXJjbGU9OTQxOSxlLlZkb3RiZWxvdz03ODA2LGUuVmVjeXJpbGxpYz0xMDQyLGUuVmV3YXJtZW5pYW49MTM1OCxlLlZob29rPTQzNCxlLlZtb25vc3BhY2U9NjUzMzQsZS5Wb2FybWVuaWFuPTEzNTIsZS5Wc21hbGw9NjMzNTAsZS5WdGlsZGU9NzgwNCxlLlc9ODcsZS5XYWN1dGU9NzgxMCxlLldjaXJjbGU9OTQyMCxlLldjaXJjdW1mbGV4PTM3MixlLldkaWVyZXNpcz03ODEyLGUuV2RvdGFjY2VudD03ODE0LGUuV2RvdGJlbG93PTc4MTYsZS5XZ3JhdmU9NzgwOCxlLldtb25vc3BhY2U9NjUzMzUsZS5Xc21hbGw9NjMzNTEsZS5YPTg4LGUuWGNpcmNsZT05NDIxLGUuWGRpZXJlc2lzPTc4MjAsZS5YZG90YWNjZW50PTc4MTgsZS5YZWhhcm1lbmlhbj0xMzQxLGUuWGk9OTI2LGUuWG1vbm9zcGFjZT02NTMzNixlLlhzbWFsbD02MzM1MixlLlk9ODksZS5ZYWN1dGU9MjIxLGUuWWFjdXRlc21hbGw9NjM0ODUsZS5ZYXRjeXJpbGxpYz0xMTIyLGUuWWNpcmNsZT05NDIyLGUuWWNpcmN1bWZsZXg9Mzc0LGUuWWRpZXJlc2lzPTM3NixlLllkaWVyZXNpc3NtYWxsPTYzNDg3LGUuWWRvdGFjY2VudD03ODIyLGUuWWRvdGJlbG93PTc5MjQsZS5ZZXJpY3lyaWxsaWM9MTA2NyxlLlllcnVkaWVyZXNpc2N5cmlsbGljPTEyNzIsZS5ZZ3JhdmU9NzkyMixlLllob29rPTQzNSxlLllob29rYWJvdmU9NzkyNixlLllpYXJtZW5pYW49MTM0OSxlLllpY3lyaWxsaWM9MTAzMSxlLllpd25hcm1lbmlhbj0xMzYyLGUuWW1vbm9zcGFjZT02NTMzNyxlLllzbWFsbD02MzM1MyxlLll0aWxkZT03OTI4LGUuWXVzYmlnY3lyaWxsaWM9MTEzMCxlLll1c2JpZ2lvdGlmaWVkY3lyaWxsaWM9MTEzMixlLll1c2xpdHRsZWN5cmlsbGljPTExMjYsZS5ZdXNsaXR0bGVpb3RpZmllZGN5cmlsbGljPTExMjgsZS5aPTkwLGUuWmFhcm1lbmlhbj0xMzM0LGUuWmFjdXRlPTM3NyxlLlpjYXJvbj0zODEsZS5aY2Fyb25zbWFsbD02MzIzMSxlLlpjaXJjbGU9OTQyMyxlLlpjaXJjdW1mbGV4PTc4MjQsZS5aZG90PTM3OSxlLlpkb3RhY2NlbnQ9Mzc5LGUuWmRvdGJlbG93PTc4MjYsZS5aZWN5cmlsbGljPTEwNDcsZS5aZWRlc2NlbmRlcmN5cmlsbGljPTExNzYsZS5aZWRpZXJlc2lzY3lyaWxsaWM9MTI0NixlLlpldGE9OTE4LGUuWmhlYXJtZW5pYW49MTMzOCxlLlpoZWJyZXZlY3lyaWxsaWM9MTIxNyxlLlpoZWN5cmlsbGljPTEwNDYsZS5aaGVkZXNjZW5kZXJjeXJpbGxpYz0xMTc0LGUuWmhlZGllcmVzaXNjeXJpbGxpYz0xMjQ0LGUuWmxpbmViZWxvdz03ODI4LGUuWm1vbm9zcGFjZT02NTMzOCxlLlpzbWFsbD02MzM1NCxlLlpzdHJva2U9NDM3LGUuYT05NyxlLmFhYmVuZ2FsaT0yNDM4LGUuYWFjdXRlPTIyNSxlLmFhZGV2YT0yMzEwLGUuYWFndWphcmF0aT0yNjk0LGUuYWFndXJtdWtoaT0yNTY2LGUuYWFtYXRyYWd1cm11a2hpPTI2MjIsZS5hYXJ1c3F1YXJlPTEzMDU5LGUuYWF2b3dlbHNpZ25iZW5nYWxpPTI0OTQsZS5hYXZvd2Vsc2lnbmRldmE9MjM2NixlLmFhdm93ZWxzaWduZ3VqYXJhdGk9Mjc1MCxlLmFiYnJldmlhdGlvbm1hcmthcm1lbmlhbj0xMzc1LGUuYWJicmV2aWF0aW9uc2lnbmRldmE9MjQxNixlLmFiZW5nYWxpPTI0MzcsZS5hYm9wb21vZm89MTI1NzAsZS5hYnJldmU9MjU5LGUuYWJyZXZlYWN1dGU9Nzg1NSxlLmFicmV2ZWN5cmlsbGljPTEyMzMsZS5hYnJldmVkb3RiZWxvdz03ODYzLGUuYWJyZXZlZ3JhdmU9Nzg1NyxlLmFicmV2ZWhvb2thYm92ZT03ODU5LGUuYWJyZXZldGlsZGU9Nzg2MSxlLmFjYXJvbj00NjIsZS5hY2lyY2xlPTk0MjQsZS5hY2lyY3VtZmxleD0yMjYsZS5hY2lyY3VtZmxleGFjdXRlPTc4NDUsZS5hY2lyY3VtZmxleGRvdGJlbG93PTc4NTMsZS5hY2lyY3VtZmxleGdyYXZlPTc4NDcsZS5hY2lyY3VtZmxleGhvb2thYm92ZT03ODQ5LGUuYWNpcmN1bWZsZXh0aWxkZT03ODUxLGUuYWN1dGU9MTgwLGUuYWN1dGViZWxvd2NtYj03OTEsZS5hY3V0ZWNtYj03NjksZS5hY3V0ZWNvbWI9NzY5LGUuYWN1dGVkZXZhPTIzODgsZS5hY3V0ZWxvd21vZD03MTksZS5hY3V0ZXRvbmVjbWI9ODMzLGUuYWN5cmlsbGljPTEwNzIsZS5hZGJsZ3JhdmU9NTEzLGUuYWRkYWtndXJtdWtoaT0yNjczLGUuYWRldmE9MjMwOSxlLmFkaWVyZXNpcz0yMjgsZS5hZGllcmVzaXNjeXJpbGxpYz0xMjM1LGUuYWRpZXJlc2lzbWFjcm9uPTQ3OSxlLmFkb3RiZWxvdz03ODQxLGUuYWRvdG1hY3Jvbj00ODEsZS5hZT0yMzAsZS5hZWFjdXRlPTUwOSxlLmFla29yZWFuPTEyNjI0LGUuYWVtYWNyb249NDgzLGUuYWZpaTAwMjA4PTgyMTMsZS5hZmlpMDg5NDE9ODM1NixlLmFmaWkxMDAxNz0xMDQwLGUuYWZpaTEwMDE4PTEwNDEsZS5hZmlpMTAwMTk9MTA0MixlLmFmaWkxMDAyMD0xMDQzLGUuYWZpaTEwMDIxPTEwNDQsZS5hZmlpMTAwMjI9MTA0NSxlLmFmaWkxMDAyMz0xMDI1LGUuYWZpaTEwMDI0PTEwNDYsZS5hZmlpMTAwMjU9MTA0NyxlLmFmaWkxMDAyNj0xMDQ4LGUuYWZpaTEwMDI3PTEwNDksZS5hZmlpMTAwMjg9MTA1MCxlLmFmaWkxMDAyOT0xMDUxLGUuYWZpaTEwMDMwPTEwNTI7ZS5hZmlpMTAwMzE9MTA1MyxlLmFmaWkxMDAzMj0xMDU0LGUuYWZpaTEwMDMzPTEwNTUsZS5hZmlpMTAwMzQ9MTA1NixlLmFmaWkxMDAzNT0xMDU3LGUuYWZpaTEwMDM2PTEwNTgsZS5hZmlpMTAwMzc9MTA1OSxlLmFmaWkxMDAzOD0xMDYwLGUuYWZpaTEwMDM5PTEwNjEsZS5hZmlpMTAwNDA9MTA2MixlLmFmaWkxMDA0MT0xMDYzLGUuYWZpaTEwMDQyPTEwNjQsZS5hZmlpMTAwNDM9MTA2NSxlLmFmaWkxMDA0ND0xMDY2LGUuYWZpaTEwMDQ1PTEwNjcsZS5hZmlpMTAwNDY9MTA2OCxlLmFmaWkxMDA0Nz0xMDY5LGUuYWZpaTEwMDQ4PTEwNzAsZS5hZmlpMTAwNDk9MTA3MSxlLmFmaWkxMDA1MD0xMTY4LGUuYWZpaTEwMDUxPTEwMjYsZS5hZmlpMTAwNTI9MTAyNyxlLmFmaWkxMDA1Mz0xMDI4LGUuYWZpaTEwMDU0PTEwMjksZS5hZmlpMTAwNTU9MTAzMCxlLmFmaWkxMDA1Nj0xMDMxLGUuYWZpaTEwMDU3PTEwMzIsZS5hZmlpMTAwNTg9MTAzMyxlLmFmaWkxMDA1OT0xMDM0LGUuYWZpaTEwMDYwPTEwMzUsZS5hZmlpMTAwNjE9MTAzNixlLmFmaWkxMDA2Mj0xMDM4LGUuYWZpaTEwMDYzPTYzMTcyLGUuYWZpaTEwMDY0PTYzMTczLGUuYWZpaTEwMDY1PTEwNzIsZS5hZmlpMTAwNjY9MTA3MyxlLmFmaWkxMDA2Nz0xMDc0LGUuYWZpaTEwMDY4PTEwNzUsZS5hZmlpMTAwNjk9MTA3NixlLmFmaWkxMDA3MD0xMDc3LGUuYWZpaTEwMDcxPTExMDUsZS5hZmlpMTAwNzI9MTA3OCxlLmFmaWkxMDA3Mz0xMDc5LGUuYWZpaTEwMDc0PTEwODAsZS5hZmlpMTAwNzU9MTA4MSxlLmFmaWkxMDA3Nj0xMDgyLGUuYWZpaTEwMDc3PTEwODMsZS5hZmlpMTAwNzg9MTA4NCxlLmFmaWkxMDA3OT0xMDg1LGUuYWZpaTEwMDgwPTEwODYsZS5hZmlpMTAwODE9MTA4NyxlLmFmaWkxMDA4Mj0xMDg4LGUuYWZpaTEwMDgzPTEwODksZS5hZmlpMTAwODQ9MTA5MCxlLmFmaWkxMDA4NT0xMDkxLGUuYWZpaTEwMDg2PTEwOTIsZS5hZmlpMTAwODc9MTA5MyxlLmFmaWkxMDA4OD0xMDk0LGUuYWZpaTEwMDg5PTEwOTUsZS5hZmlpMTAwOTA9MTA5NixlLmFmaWkxMDA5MT0xMDk3LGUuYWZpaTEwMDkyPTEwOTgsZS5hZmlpMTAwOTM9MTA5OSxlLmFmaWkxMDA5ND0xMTAwLGUuYWZpaTEwMDk1PTExMDEsZS5hZmlpMTAwOTY9MTEwMixlLmFmaWkxMDA5Nz0xMTAzLGUuYWZpaTEwMDk4PTExNjksZS5hZmlpMTAwOTk9MTEwNixlLmFmaWkxMDEwMD0xMTA3LGUuYWZpaTEwMTAxPTExMDgsZS5hZmlpMTAxMDI9MTEwOSxlLmFmaWkxMDEwMz0xMTEwLGUuYWZpaTEwMTA0PTExMTEsZS5hZmlpMTAxMDU9MTExMixlLmFmaWkxMDEwNj0xMTEzLGUuYWZpaTEwMTA3PTExMTQsZS5hZmlpMTAxMDg9MTExNSxlLmFmaWkxMDEwOT0xMTE2LGUuYWZpaTEwMTEwPTExMTgsZS5hZmlpMTAxNDU9MTAzOSxlLmFmaWkxMDE0Nj0xMTIyLGUuYWZpaTEwMTQ3PTExMzgsZS5hZmlpMTAxNDg9MTE0MCxlLmFmaWkxMDE5Mj02MzE3NCxlLmFmaWkxMDE5Mz0xMTE5LGUuYWZpaTEwMTk0PTExMjMsZS5hZmlpMTAxOTU9MTEzOSxlLmFmaWkxMDE5Nj0xMTQxLGUuYWZpaTEwODMxPTYzMTc1LGUuYWZpaTEwODMyPTYzMTc2LGUuYWZpaTEwODQ2PTEyNDEsZS5hZmlpMjk5PTgyMDYsZS5hZmlpMzAwPTgyMDcsZS5hZmlpMzAxPTgyMDUsZS5hZmlpNTczODE9MTY0MixlLmFmaWk1NzM4OD0xNTQ4LGUuYWZpaTU3MzkyPTE2MzIsZS5hZmlpNTczOTM9MTYzMyxlLmFmaWk1NzM5ND0xNjM0LGUuYWZpaTU3Mzk1PTE2MzUsZS5hZmlpNTczOTY9MTYzNixlLmFmaWk1NzM5Nz0xNjM3LGUuYWZpaTU3Mzk4PTE2MzgsZS5hZmlpNTczOTk9MTYzOSxlLmFmaWk1NzQwMD0xNjQwLGUuYWZpaTU3NDAxPTE2NDEsZS5hZmlpNTc0MDM9MTU2MyxlLmFmaWk1NzQwNz0xNTY3LGUuYWZpaTU3NDA5PTE1NjksZS5hZmlpNTc0MTA9MTU3MCxlLmFmaWk1NzQxMT0xNTcxLGUuYWZpaTU3NDEyPTE1NzIsZS5hZmlpNTc0MTM9MTU3MyxlLmFmaWk1NzQxND0xNTc0LGUuYWZpaTU3NDE1PTE1NzUsZS5hZmlpNTc0MTY9MTU3NixlLmFmaWk1NzQxNz0xNTc3LGUuYWZpaTU3NDE4PTE1NzgsZS5hZmlpNTc0MTk9MTU3OSxlLmFmaWk1NzQyMD0xNTgwLGUuYWZpaTU3NDIxPTE1ODEsZS5hZmlpNTc0MjI9MTU4MixlLmFmaWk1NzQyMz0xNTgzLGUuYWZpaTU3NDI0PTE1ODQsZS5hZmlpNTc0MjU9MTU4NSxlLmFmaWk1NzQyNj0xNTg2LGUuYWZpaTU3NDI3PTE1ODcsZS5hZmlpNTc0Mjg9MTU4OCxlLmFmaWk1NzQyOT0xNTg5LGUuYWZpaTU3NDMwPTE1OTAsZS5hZmlpNTc0MzE9MTU5MSxlLmFmaWk1NzQzMj0xNTkyLGUuYWZpaTU3NDMzPTE1OTMsZS5hZmlpNTc0MzQ9MTU5NCxlLmFmaWk1NzQ0MD0xNjAwLGUuYWZpaTU3NDQxPTE2MDEsZS5hZmlpNTc0NDI9MTYwMixlLmFmaWk1NzQ0Mz0xNjAzLGUuYWZpaTU3NDQ0PTE2MDQsZS5hZmlpNTc0NDU9MTYwNSxlLmFmaWk1NzQ0Nj0xNjA2LGUuYWZpaTU3NDQ4PTE2MDgsZS5hZmlpNTc0NDk9MTYwOSxlLmFmaWk1NzQ1MD0xNjEwLGUuYWZpaTU3NDUxPTE2MTEsZS5hZmlpNTc0NTI9MTYxMixlLmFmaWk1NzQ1Mz0xNjEzLGUuYWZpaTU3NDU0PTE2MTQsZS5hZmlpNTc0NTU9MTYxNSxlLmFmaWk1NzQ1Nj0xNjE2LGUuYWZpaTU3NDU3PTE2MTcsZS5hZmlpNTc0NTg9MTYxOCxlLmFmaWk1NzQ3MD0xNjA3LGUuYWZpaTU3NTA1PTE3MDAsZS5hZmlpNTc1MDY9MTY2MixlLmFmaWk1NzUwNz0xNjcwLGUuYWZpaTU3NTA4PTE2ODgsZS5hZmlpNTc1MDk9MTcxMSxlLmFmaWk1NzUxMT0xNjU3LGUuYWZpaTU3NTEyPTE2NzIsZS5hZmlpNTc1MTM9MTY4MSxlLmFmaWk1NzUxND0xNzIyLGUuYWZpaTU3NTE5PTE3NDYsZS5hZmlpNTc1MzQ9MTc0OSxlLmFmaWk1NzYzNj04MzYyLGUuYWZpaTU3NjQ1PTE0NzAsZS5hZmlpNTc2NTg9MTQ3NSxlLmFmaWk1NzY2ND0xNDg4LGUuYWZpaTU3NjY1PTE0ODksZS5hZmlpNTc2NjY9MTQ5MCxlLmFmaWk1NzY2Nz0xNDkxLGUuYWZpaTU3NjY4PTE0OTIsZS5hZmlpNTc2Njk9MTQ5MyxlLmFmaWk1NzY3MD0xNDk0LGUuYWZpaTU3NjcxPTE0OTUsZS5hZmlpNTc2NzI9MTQ5NixlLmFmaWk1NzY3Mz0xNDk3LGUuYWZpaTU3Njc0PTE0OTgsZS5hZmlpNTc2NzU9MTQ5OSxlLmFmaWk1NzY3Nj0xNTAwLGUuYWZpaTU3Njc3PTE1MDEsZS5hZmlpNTc2Nzg9MTUwMixlLmFmaWk1NzY3OT0xNTAzLGUuYWZpaTU3NjgwPTE1MDQsZS5hZmlpNTc2ODE9MTUwNSxlLmFmaWk1NzY4Mj0xNTA2LGUuYWZpaTU3NjgzPTE1MDcsZS5hZmlpNTc2ODQ9MTUwOCxlLmFmaWk1NzY4NT0xNTA5LGUuYWZpaTU3Njg2PTE1MTAsZS5hZmlpNTc2ODc9MTUxMSxlLmFmaWk1NzY4OD0xNTEyLGUuYWZpaTU3Njg5PTE1MTMsZS5hZmlpNTc2OTA9MTUxNCxlLmFmaWk1NzY5ND02NDI5OCxlLmFmaWk1NzY5NT02NDI5OSxlLmFmaWk1NzcwMD02NDMzMSxlLmFmaWk1NzcwNT02NDI4NyxlLmFmaWk1NzcxNj0xNTIwLGUuYWZpaTU3NzE3PTE1MjEsZS5hZmlpNTc3MTg9MTUyMixlLmFmaWk1NzcyMz02NDMwOSxlLmFmaWk1Nzc5Mz0xNDYwLGUuYWZpaTU3Nzk0PTE0NjEsZS5hZmlpNTc3OTU9MTQ2MixlLmFmaWk1Nzc5Nj0xNDY3LGUuYWZpaTU3Nzk3PTE0NjQsZS5hZmlpNTc3OTg9MTQ2MyxlLmFmaWk1Nzc5OT0xNDU2LGUuYWZpaTU3ODAwPTE0NTgsZS5hZmlpNTc4MDE9MTQ1NyxlLmFmaWk1NzgwMj0xNDU5LGUuYWZpaTU3ODAzPTE0NzQsZS5hZmlpNTc4MDQ9MTQ3MyxlLmFmaWk1NzgwNj0xNDY1LGUuYWZpaTU3ODA3PTE0NjgsZS5hZmlpNTc4Mzk9MTQ2OSxlLmFmaWk1Nzg0MT0xNDcxLGUuYWZpaTU3ODQyPTE0NzIsZS5hZmlpNTc5Mjk9NzAwLGUuYWZpaTYxMjQ4PTg0NTMsZS5hZmlpNjEyODk9ODQ2NyxlLmFmaWk2MTM1Mj04NDcwLGUuYWZpaTYxNTczPTgyMzYsZS5hZmlpNjE1NzQ9ODIzNyxlLmFmaWk2MTU3NT04MjM4LGUuYWZpaTYxNjY0PTgyMDQsZS5hZmlpNjMxNjc9MTY0NSxlLmFmaWk2NDkzNz03MDEsZS5hZ3JhdmU9MjI0LGUuYWd1amFyYXRpPTI2OTMsZS5hZ3VybXVraGk9MjU2NSxlLmFoaXJhZ2FuYT0xMjM1NCxlLmFob29rYWJvdmU9Nzg0MyxlLmFpYmVuZ2FsaT0yNDQ4LGUuYWlib3BvbW9mbz0xMjU3NCxlLmFpZGV2YT0yMzIwLGUuYWllY3lyaWxsaWM9MTIzNyxlLmFpZ3VqYXJhdGk9MjcwNCxlLmFpZ3VybXVraGk9MjU3NixlLmFpbWF0cmFndXJtdWtoaT0yNjMyLGUuYWluYXJhYmljPTE1OTMsZS5haW5maW5hbGFyYWJpYz02NTIyNixlLmFpbmluaXRpYWxhcmFiaWM9NjUyMjcsZS5haW5tZWRpYWxhcmFiaWM9NjUyMjgsZS5haW52ZXJ0ZWRicmV2ZT01MTUsZS5haXZvd2Vsc2lnbmJlbmdhbGk9MjUwNCxlLmFpdm93ZWxzaWduZGV2YT0yMzc2LGUuYWl2b3dlbHNpZ25ndWphcmF0aT0yNzYwLGUuYWthdGFrYW5hPTEyNDUwLGUuYWthdGFrYW5haGFsZndpZHRoPTY1MzkzLGUuYWtvcmVhbj0xMjYyMyxlLmFsZWY9MTQ4OCxlLmFsZWZhcmFiaWM9MTU3NSxlLmFsZWZkYWdlc2hoZWJyZXc9NjQzMDQsZS5hbGVmZmluYWxhcmFiaWM9NjUxNjYsZS5hbGVmaGFtemFhYm92ZWFyYWJpYz0xNTcxLGUuYWxlZmhhbXphYWJvdmVmaW5hbGFyYWJpYz02NTE1NixlLmFsZWZoYW16YWJlbG93YXJhYmljPTE1NzMsZS5hbGVmaGFtemFiZWxvd2ZpbmFsYXJhYmljPTY1MTYwLGUuYWxlZmhlYnJldz0xNDg4LGUuYWxlZmxhbWVkaGVicmV3PTY0MzM1LGUuYWxlZm1hZGRhYWJvdmVhcmFiaWM9MTU3MCxlLmFsZWZtYWRkYWFib3ZlZmluYWxhcmFiaWM9NjUxNTQsZS5hbGVmbWFrc3VyYWFyYWJpYz0xNjA5LGUuYWxlZm1ha3N1cmFmaW5hbGFyYWJpYz02NTI2NCxlLmFsZWZtYWtzdXJhaW5pdGlhbGFyYWJpYz02NTI2NyxlLmFsZWZtYWtzdXJhbWVkaWFsYXJhYmljPTY1MjY4LGUuYWxlZnBhdGFoaGVicmV3PTY0MzAyLGUuYWxlZnFhbWF0c2hlYnJldz02NDMwMyxlLmFsZXBoPTg1MDEsZS5hbGxlcXVhbD04NzgwLGUuYWxwaGE9OTQ1LGUuYWxwaGF0b25vcz05NDAsZS5hbWFjcm9uPTI1NyxlLmFtb25vc3BhY2U9NjUzNDUsZS5hbXBlcnNhbmQ9MzgsZS5hbXBlcnNhbmRtb25vc3BhY2U9NjUyODYsZS5hbXBlcnNhbmRzbWFsbD02MzI3MCxlLmFtc3F1YXJlPTEzMjUwLGUuYW5ib3BvbW9mbz0xMjU3OCxlLmFuZ2JvcG9tb2ZvPTEyNTgwLGUuYW5nYnJhY2tldGxlZnQ9MTIyOTYsZS5hbmdicmFja2V0cmlnaHQ9MTIyOTcsZS5hbmdraGFua2h1dGhhaT0zNjc0LGUuYW5nbGU9ODczNixlLmFuZ2xlYnJhY2tldGxlZnQ9MTIyOTYsZS5hbmdsZWJyYWNrZXRsZWZ0dmVydGljYWw9NjUwODcsZS5hbmdsZWJyYWNrZXRyaWdodD0xMjI5NyxlLmFuZ2xlYnJhY2tldHJpZ2h0dmVydGljYWw9NjUwODgsZS5hbmdsZWxlZnQ9OTAwMSxlLmFuZ2xlcmlnaHQ9OTAwMixlLmFuZ3N0cm9tPTg0OTEsZS5hbm90ZWxlaWE9OTAzLGUuYW51ZGF0dGFkZXZhPTIzODYsZS5hbnVzdmFyYWJlbmdhbGk9MjQzNCxlLmFudXN2YXJhZGV2YT0yMzA2LGUuYW51c3ZhcmFndWphcmF0aT0yNjkwLGUuYW9nb25laz0yNjEsZS5hcGFhdG9zcXVhcmU9MTMwNTYsZS5hcGFyZW49OTM3MixlLmFwb3N0cm9waGVhcm1lbmlhbj0xMzcwLGUuYXBvc3Ryb3BoZW1vZD03MDAsZS5hcHBsZT02Mzc0MyxlLmFwcHJvYWNoZXM9ODc4NCxlLmFwcHJveGVxdWFsPTg3NzYsZS5hcHByb3hlcXVhbG9yaW1hZ2U9ODc4NixlLmFwcHJveGltYXRlbHllcXVhbD04NzczLGUuYXJhZWFla29yZWFuPTEyNjg2LGUuYXJhZWFrb3JlYW49MTI2ODUsZS5hcmM9ODk3OCxlLmFyaWdodGhhbGZyaW5nPTc4MzQsZS5hcmluZz0yMjksZS5hcmluZ2FjdXRlPTUwNyxlLmFyaW5nYmVsb3c9NzY4MSxlLmFycm93Ym90aD04NTk2LGUuYXJyb3dkYXNoZG93bj04Njc1LGUuYXJyb3dkYXNobGVmdD04NjcyLGUuYXJyb3dkYXNocmlnaHQ9ODY3NCxlLmFycm93ZGFzaHVwPTg2NzMsZS5hcnJvd2RibGJvdGg9ODY2MCxlLmFycm93ZGJsZG93bj04NjU5LGUuYXJyb3dkYmxsZWZ0PTg2NTYsZS5hcnJvd2RibHJpZ2h0PTg2NTgsZS5hcnJvd2RibHVwPTg2NTcsZS5hcnJvd2Rvd249ODU5NSxlLmFycm93ZG93bmxlZnQ9ODYwMSxlLmFycm93ZG93bnJpZ2h0PTg2MDAsZS5hcnJvd2Rvd253aGl0ZT04NjgxLGUuYXJyb3doZWFkZG93bm1vZD03MDksZS5hcnJvd2hlYWRsZWZ0bW9kPTcwNixlLmFycm93aGVhZHJpZ2h0bW9kPTcwNyxlLmFycm93aGVhZHVwbW9kPTcwOCxlLmFycm93aG9yaXpleD02MzcxOSxlLmFycm93bGVmdD04NTkyLGUuYXJyb3dsZWZ0ZGJsPTg2NTYsZS5hcnJvd2xlZnRkYmxzdHJva2U9ODY1MyxlLmFycm93bGVmdG92ZXJyaWdodD04NjQ2LGUuYXJyb3dsZWZ0d2hpdGU9ODY3OCxlLmFycm93cmlnaHQ9ODU5NCxlLmFycm93cmlnaHRkYmxzdHJva2U9ODY1NSxlLmFycm93cmlnaHRoZWF2eT0xMDE0MixlLmFycm93cmlnaHRvdmVybGVmdD04NjQ0LGUuYXJyb3dyaWdodHdoaXRlPTg2ODAsZS5hcnJvd3RhYmxlZnQ9ODY3NixlLmFycm93dGFicmlnaHQ9ODY3NyxlLmFycm93dXA9ODU5MyxlLmFycm93dXBkbj04NTk3LGUuYXJyb3d1cGRuYnNlPTg2MTYsZS5hcnJvd3VwZG93bmJhc2U9ODYxNixlLmFycm93dXBsZWZ0PTg1OTgsZS5hcnJvd3VwbGVmdG9mZG93bj04NjQ1LGUuYXJyb3d1cHJpZ2h0PTg1OTksZS5hcnJvd3Vwd2hpdGU9ODY3OSxlLmFycm93dmVydGV4PTYzNzE4LGUuYXNjaWljaXJjdW09OTQsZS5hc2NpaWNpcmN1bW1vbm9zcGFjZT02NTM0MixlLmFzY2lpdGlsZGU9MTI2LGUuYXNjaWl0aWxkZW1vbm9zcGFjZT02NTM3NCxlLmFzY3JpcHQ9NTkzLGUuYXNjcmlwdHR1cm5lZD01OTQsZS5hc21hbGxoaXJhZ2FuYT0xMjM1MyxlLmFzbWFsbGthdGFrYW5hPTEyNDQ5LGUuYXNtYWxsa2F0YWthbmFoYWxmd2lkdGg9NjUzODMsZS5hc3Rlcmlzaz00MixlLmFzdGVyaXNrYWx0b25lYXJhYmljPTE2NDUsZS5hc3Rlcmlza2FyYWJpYz0xNjQ1LGUuYXN0ZXJpc2ttYXRoPTg3MjcsZS5hc3Rlcmlza21vbm9zcGFjZT02NTI5MCxlLmFzdGVyaXNrc21hbGw9NjUxMjEsZS5hc3RlcmlzbT04MjU4LGUuYXN1cGVyaW9yPTYzMjA5LGUuYXN5bXB0b3RpY2FsbHllcXVhbD04NzcxLGUuYXQ9NjQsZS5hdGlsZGU9MjI3LGUuYXRtb25vc3BhY2U9NjUzMTIsZS5hdHNtYWxsPTY1MTMxLGUuYXR1cm5lZD01OTIsZS5hdWJlbmdhbGk9MjQ1MixlLmF1Ym9wb21vZm89MTI1NzYsZS5hdWRldmE9MjMyNCxlLmF1Z3VqYXJhdGk9MjcwOCxlLmF1Z3VybXVraGk9MjU4MCxlLmF1bGVuZ3RobWFya2JlbmdhbGk9MjUxOSxlLmF1bWF0cmFndXJtdWtoaT0yNjM2LGUuYXV2b3dlbHNpZ25iZW5nYWxpPTI1MDgsZS5hdXZvd2Vsc2lnbmRldmE9MjM4MCxlLmF1dm93ZWxzaWduZ3VqYXJhdGk9Mjc2NCxlLmF2YWdyYWhhZGV2YT0yMzY1LGUuYXliYXJtZW5pYW49MTM3NyxlLmF5aW49MTUwNixlLmF5aW5hbHRvbmVoZWJyZXc9NjQyODgsZS5heWluaGVicmV3PTE1MDYsZS5iPTk4LGUuYmFiZW5nYWxpPTI0NzYsZS5iYWNrc2xhc2g9OTIsZS5iYWNrc2xhc2htb25vc3BhY2U9NjUzNDAsZS5iYWRldmE9MjM0OCxlLmJhZ3VqYXJhdGk9MjczMixlLmJhZ3VybXVraGk9MjYwNCxlLmJhaGlyYWdhbmE9MTI0MDAsZS5iYWh0dGhhaT0zNjQ3LGUuYmFrYXRha2FuYT0xMjQ5NixlLmJhcj0xMjQsZS5iYXJtb25vc3BhY2U9NjUzNzIsZS5iYm9wb21vZm89MTI1NDksZS5iY2lyY2xlPTk0MjUsZS5iZG90YWNjZW50PTc2ODMsZS5iZG90YmVsb3c9NzY4NSxlLmJlYW1lZHNpeHRlZW50aG5vdGVzPTk4MzYsZS5iZWNhdXNlPTg3NTcsZS5iZWN5cmlsbGljPTEwNzMsZS5iZWhhcmFiaWM9MTU3NixlLmJlaGZpbmFsYXJhYmljPTY1MTY4LGUuYmVoaW5pdGlhbGFyYWJpYz02NTE2OSxlLmJlaGlyYWdhbmE9MTI0MDksZS5iZWhtZWRpYWxhcmFiaWM9NjUxNzAsZS5iZWhtZWVtaW5pdGlhbGFyYWJpYz02NDY3MSxlLmJlaG1lZW1pc29sYXRlZGFyYWJpYz02NDUyMCxlLmJlaG5vb25maW5hbGFyYWJpYz02NDYyMSxlLmJla2F0YWthbmE9MTI1MDUsZS5iZW5hcm1lbmlhbj0xMzc4LGUuYmV0PTE0ODksZS5iZXRhPTk0NixlLmJldGFzeW1ib2xncmVlaz05NzYsZS5iZXRkYWdlc2g9NjQzMDUsZS5iZXRkYWdlc2hoZWJyZXc9NjQzMDUsZS5iZXRoZWJyZXc9MTQ4OSxlLmJldHJhZmVoZWJyZXc9NjQzMzIsZS5iaGFiZW5nYWxpPTI0NzcsZS5iaGFkZXZhPTIzNDksZS5iaGFndWphcmF0aT0yNzMzLGUuYmhhZ3VybXVraGk9MjYwNSxlLmJob29rPTU5NSxlLmJpaGlyYWdhbmE9MTI0MDMsZS5iaWthdGFrYW5hPTEyNDk5LGUuYmlsYWJpYWxjbGljaz02NjQsZS5iaW5kaWd1cm11a2hpPTI1NjIsZS5iaXJ1c3F1YXJlPTEzMTA1LGUuYmxhY2tjaXJjbGU9OTY3OSxlLmJsYWNrZGlhbW9uZD05NjcwLGUuYmxhY2tkb3ducG9pbnRpbmd0cmlhbmdsZT05NjYwLGUuYmxhY2tsZWZ0cG9pbnRpbmdwb2ludGVyPTk2NjgsZS5ibGFja2xlZnRwb2ludGluZ3RyaWFuZ2xlPTk2NjQsZS5ibGFja2xlbnRpY3VsYXJicmFja2V0bGVmdD0xMjMwNCxlLmJsYWNrbGVudGljdWxhcmJyYWNrZXRsZWZ0dmVydGljYWw9NjUwODMsZS5ibGFja2xlbnRpY3VsYXJicmFja2V0cmlnaHQ9MTIzMDUsZS5ibGFja2xlbnRpY3VsYXJicmFja2V0cmlnaHR2ZXJ0aWNhbD02NTA4NCxlLmJsYWNrbG93ZXJsZWZ0dHJpYW5nbGU9OTY5OSxlLmJsYWNrbG93ZXJyaWdodHRyaWFuZ2xlPTk2OTgsZS5ibGFja3JlY3RhbmdsZT05NjQ0LGUuYmxhY2tyaWdodHBvaW50aW5ncG9pbnRlcj05NjU4LGUuYmxhY2tyaWdodHBvaW50aW5ndHJpYW5nbGU9OTY1NCxlLmJsYWNrc21hbGxzcXVhcmU9OTY0MixlLmJsYWNrc21pbGluZ2ZhY2U9OTc4NyxlLmJsYWNrc3F1YXJlPTk2MzIsZS5ibGFja3N0YXI9OTczMyxlLmJsYWNrdXBwZXJsZWZ0dHJpYW5nbGU9OTcwMCxlLmJsYWNrdXBwZXJyaWdodHRyaWFuZ2xlPTk3MDEsZS5ibGFja3VwcG9pbnRpbmdzbWFsbHRyaWFuZ2xlPTk2NTIsZS5ibGFja3VwcG9pbnRpbmd0cmlhbmdsZT05NjUwLGUuYmxhbms9OTI1MSxlLmJsaW5lYmVsb3c9NzY4NyxlLmJsb2NrPTk2MDgsZS5ibW9ub3NwYWNlPTY1MzQ2LGUuYm9iYWltYWl0aGFpPTM2MTAsZS5ib2hpcmFnYW5hPTEyNDEyLGUuYm9rYXRha2FuYT0xMjUwOCxlLmJwYXJlbj05MzczLGUuYnFzcXVhcmU9MTMyNTEsZS5icmFjZWV4PTYzNzMyLGUuYnJhY2VsZWZ0PTEyMyxlLmJyYWNlbGVmdGJ0PTYzNzMxLGUuYnJhY2VsZWZ0bWlkPTYzNzMwLGUuYnJhY2VsZWZ0bW9ub3NwYWNlPTY1MzcxLGUuYnJhY2VsZWZ0c21hbGw9NjUxMTUsZS5icmFjZWxlZnR0cD02MzcyOSxlLmJyYWNlbGVmdHZlcnRpY2FsPTY1MDc5LGUuYnJhY2VyaWdodD0xMjUsZS5icmFjZXJpZ2h0YnQ9NjM3NDIsZS5icmFjZXJpZ2h0bWlkPTYzNzQxLGUuYnJhY2VyaWdodG1vbm9zcGFjZT02NTM3MyxlLmJyYWNlcmlnaHRzbWFsbD02NTExNixlLmJyYWNlcmlnaHR0cD02Mzc0MCxlLmJyYWNlcmlnaHR2ZXJ0aWNhbD02NTA4MCxlLmJyYWNrZXRsZWZ0PTkxLGUuYnJhY2tldGxlZnRidD02MzcyOCxlLmJyYWNrZXRsZWZ0ZXg9NjM3MjcsZS5icmFja2V0bGVmdG1vbm9zcGFjZT02NTMzOSxlLmJyYWNrZXRsZWZ0dHA9NjM3MjYsZS5icmFja2V0cmlnaHQ9OTMsZS5icmFja2V0cmlnaHRidD02MzczOSxlLmJyYWNrZXRyaWdodGV4PTYzNzM4LGUuYnJhY2tldHJpZ2h0bW9ub3NwYWNlPTY1MzQxLGUuYnJhY2tldHJpZ2h0dHA9NjM3MzcsZS5icmV2ZT03MjgsZS5icmV2ZWJlbG93Y21iPTgxNCxlLmJyZXZlY21iPTc3NCxlLmJyZXZlaW52ZXJ0ZWRiZWxvd2NtYj04MTUsZS5icmV2ZWludmVydGVkY21iPTc4NSxlLmJyZXZlaW52ZXJ0ZWRkb3VibGVjbWI9ODY1LGUuYnJpZGdlYmVsb3djbWI9ODEwLGUuYnJpZGdlaW52ZXJ0ZWRiZWxvd2NtYj04MjYsZS5icm9rZW5iYXI9MTY2LGUuYnN0cm9rZT0zODQsZS5ic3VwZXJpb3I9NjMyMTAsZS5idG9wYmFyPTM4NyxlLmJ1aGlyYWdhbmE9MTI0MDYsZS5idWthdGFrYW5hPTEyNTAyLGUuYnVsbGV0PTgyMjYsZS5idWxsZXRpbnZlcnNlPTk2ODgsZS5idWxsZXRvcGVyYXRvcj04NzI5LGUuYnVsbHNleWU9OTY3OCxlLmM9OTksZS5jYWFybWVuaWFuPTEzOTAsZS5jYWJlbmdhbGk9MjQ1OCxlLmNhY3V0ZT0yNjMsZS5jYWRldmE9MjMzMCxlLmNhZ3VqYXJhdGk9MjcxNCxlLmNhZ3VybXVraGk9MjU4NixlLmNhbHNxdWFyZT0xMzE5MixlLmNhbmRyYWJpbmR1YmVuZ2FsaT0yNDMzLGUuY2FuZHJhYmluZHVjbWI9Nzg0LGUuY2FuZHJhYmluZHVkZXZhPTIzMDUsZS5jYW5kcmFiaW5kdWd1amFyYXRpPTI2ODksZS5jYXBzbG9jaz04NjgyLGUuY2FyZW9mPTg0NTMsZS5jYXJvbj03MTEsZS5jYXJvbmJlbG93Y21iPTgxMixlLmNhcm9uY21iPTc4MCxlLmNhcnJpYWdlcmV0dXJuPTg2MjksZS5jYm9wb21vZm89MTI1NjgsZS5jY2Fyb249MjY5LGUuY2NlZGlsbGE9MjMxLGUuY2NlZGlsbGFhY3V0ZT03Njg5LGUuY2NpcmNsZT05NDI2LGUuY2NpcmN1bWZsZXg9MjY1LGUuY2N1cmw9NTk3LGUuY2RvdD0yNjcsZS5jZG90YWNjZW50PTI2NyxlLmNkc3F1YXJlPTEzMjUzLGUuY2VkaWxsYT0xODQsZS5jZWRpbGxhY21iPTgwNyxlLmNlbnQ9MTYyLGUuY2VudGlncmFkZT04NDUxLGUuY2VudGluZmVyaW9yPTYzMTk5LGUuY2VudG1vbm9zcGFjZT02NTUwNCxlLmNlbnRvbGRzdHlsZT02MzM5NCxlLmNlbnRzdXBlcmlvcj02MzIwMCxlLmNoYWFybWVuaWFuPTE0MDEsZS5jaGFiZW5nYWxpPTI0NTksZS5jaGFkZXZhPTIzMzEsZS5jaGFndWphcmF0aT0yNzE1LGUuY2hhZ3VybXVraGk9MjU4NyxlLmNoYm9wb21vZm89MTI1NjQsZS5jaGVhYmtoYXNpYW5jeXJpbGxpYz0xMjEzLGUuY2hlY2ttYXJrPTEwMDAzLGUuY2hlY3lyaWxsaWM9MTA5NSxlLmNoZWRlc2NlbmRlcmFia2hhc2lhbmN5cmlsbGljPTEyMTUsZS5jaGVkZXNjZW5kZXJjeXJpbGxpYz0xMjA3LGUuY2hlZGllcmVzaXNjeXJpbGxpYz0xMjY5LGUuY2hlaGFybWVuaWFuPTEzOTUsZS5jaGVraGFrYXNzaWFuY3lyaWxsaWM9MTIyOCxlLmNoZXZlcnRpY2Fsc3Ryb2tlY3lyaWxsaWM9MTIwOSxlLmNoaT05NjcsZS5jaGlldWNoYWNpcmNsZWtvcmVhbj0xMjkxOSxlLmNoaWV1Y2hhcGFyZW5rb3JlYW49MTI4MjMsZS5jaGlldWNoY2lyY2xla29yZWFuPTEyOTA1LGUuY2hpZXVjaGtvcmVhbj0xMjYxOCxlLmNoaWV1Y2hwYXJlbmtvcmVhbj0xMjgwOSxlLmNob2NoYW5ndGhhaT0zNTk0LGUuY2hvY2hhbnRoYWk9MzU5MixlLmNob2NoaW5ndGhhaT0zNTkzLGUuY2hvY2hvZXRoYWk9MzU5NixlLmNob29rPTM5MixlLmNpZXVjYWNpcmNsZWtvcmVhbj0xMjkxOCxlLmNpZXVjYXBhcmVua29yZWFuPTEyODIyLGUuY2lldWNjaXJjbGVrb3JlYW49MTI5MDQsZS5jaWV1Y2tvcmVhbj0xMjYxNixlLmNpZXVjcGFyZW5rb3JlYW49MTI4MDgsZS5jaWV1Y3VwYXJlbmtvcmVhbj0xMjgyOCxlLmNpcmNsZT05Njc1LGUuY2lyY2xlY29weXJ0PTE2OSxlLmNpcmNsZW11bHRpcGx5PTg4NTUsZS5jaXJjbGVvdD04ODU3LGUuY2lyY2xlcGx1cz04ODUzLGUuY2lyY2xlcG9zdGFsbWFyaz0xMjM0MixlLmNpcmNsZXdpdGhsZWZ0aGFsZmJsYWNrPTk2ODAsZS5jaXJjbGV3aXRocmlnaHRoYWxmYmxhY2s9OTY4MSxlLmNpcmN1bWZsZXg9NzEwLGUuY2lyY3VtZmxleGJlbG93Y21iPTgxMyxlLmNpcmN1bWZsZXhjbWI9NzcwLGUuY2xlYXI9ODk5OSxlLmNsaWNrYWx2ZW9sYXI9NDUwLGUuY2xpY2tkZW50YWw9NDQ4LGUuY2xpY2tsYXRlcmFsPTQ0OSxlLmNsaWNrcmV0cm9mbGV4PTQ1MSxlLmNsdWI9OTgyNyxlLmNsdWJzdWl0YmxhY2s9OTgyNyxlLmNsdWJzdWl0d2hpdGU9OTgzMSxlLmNtY3ViZWRzcXVhcmU9MTMyMjAsZS5jbW9ub3NwYWNlPTY1MzQ3LGUuY21zcXVhcmVkc3F1YXJlPTEzMjE2LGUuY29hcm1lbmlhbj0xNDA5LGUuY29sb249NTgsZS5jb2xvbm1vbmV0YXJ5PTgzNTMsZS5jb2xvbm1vbm9zcGFjZT02NTMwNixlLmNvbG9uc2lnbj04MzUzLGUuY29sb25zbWFsbD02NTEwOSxlLmNvbG9udHJpYW5ndWxhcmhhbGZtb2Q9NzIxLGUuY29sb250cmlhbmd1bGFybW9kPTcyMCxlLmNvbW1hPTQ0LGUuY29tbWFhYm92ZWNtYj03ODcsZS5jb21tYWFib3ZlcmlnaHRjbWI9Nzg5LGUuY29tbWFhY2NlbnQ9NjMxNzEsZS5jb21tYWFyYWJpYz0xNTQ4LGUuY29tbWFhcm1lbmlhbj0xMzczLGUuY29tbWFpbmZlcmlvcj02MzIwMSxlLmNvbW1hbW9ub3NwYWNlPTY1MjkyLGUuY29tbWFyZXZlcnNlZGFib3ZlY21iPTc4OCxlLmNvbW1hcmV2ZXJzZWRtb2Q9NzAxLGUuY29tbWFzbWFsbD02NTEwNCxlLmNvbW1hc3VwZXJpb3I9NjMyMDIsZS5jb21tYXR1cm5lZGFib3ZlY21iPTc4NixlLmNvbW1hdHVybmVkbW9kPTY5OSxlLmNvbXBhc3M9OTc4OCxlLmNvbmdydWVudD04NzczLGUuY29udG91cmludGVncmFsPTg3NTAsZS5jb250cm9sPTg5NjMsZS5jb250cm9sQUNLPTYsZS5jb250cm9sQkVMPTcsZS5jb250cm9sQlM9OCxlLmNvbnRyb2xDQU49MjQsZS5jb250cm9sQ1I9MTMsZS5jb250cm9sREMxPTE3LGUuY29udHJvbERDMj0xOCxlLmNvbnRyb2xEQzM9MTksZS5jb250cm9sREM0PTIwLGUuY29udHJvbERFTD0xMjcsZS5jb250cm9sRExFPTE2LGUuY29udHJvbEVNPTI1LGUuY29udHJvbEVOUT01LGUuY29udHJvbEVPVD00LGUuY29udHJvbEVTQz0yNyxlLmNvbnRyb2xFVEI9MjMsZS5jb250cm9sRVRYPTMsZS5jb250cm9sRkY9MTIsZS5jb250cm9sRlM9MjgsZS5jb250cm9sR1M9MjksZS5jb250cm9sSFQ9OSxlLmNvbnRyb2xMRj0xMCxlLmNvbnRyb2xOQUs9MjEsZS5jb250cm9sTlVMTD0wLGUuY29udHJvbFJTPTMwLGUuY29udHJvbFNJPTE1LGUuY29udHJvbFNPPTE0LGUuY29udHJvbFNPVD0yLGUuY29udHJvbFNUWD0xLGUuY29udHJvbFNVQj0yNixlLmNvbnRyb2xTWU49MjIsZS5jb250cm9sVVM9MzEsZS5jb250cm9sVlQ9MTEsZS5jb3B5cmlnaHQ9MTY5LGUuY29weXJpZ2h0c2Fucz02MzcyMSxlLmNvcHlyaWdodHNlcmlmPTYzMTkzLGUuY29ybmVyYnJhY2tldGxlZnQ9MTIzMDAsZS5jb3JuZXJicmFja2V0bGVmdGhhbGZ3aWR0aD02NTM3OCxlLmNvcm5lcmJyYWNrZXRsZWZ0dmVydGljYWw9NjUwODksZS5jb3JuZXJicmFja2V0cmlnaHQ9MTIzMDEsZS5jb3JuZXJicmFja2V0cmlnaHRoYWxmd2lkdGg9NjUzNzksZS5jb3JuZXJicmFja2V0cmlnaHR2ZXJ0aWNhbD02NTA5MCxlLmNvcnBvcmF0aW9uc3F1YXJlPTEzMTgzLGUuY29zcXVhcmU9MTMyNTUsZS5jb3Zlcmtnc3F1YXJlPTEzMjU0LGUuY3BhcmVuPTkzNzQsZS5jcnV6ZWlybz04MzU0LGUuY3N0cmV0Y2hlZD02NjMsZS5jdXJseWFuZD04OTExLGUuY3VybHlvcj04OTEwLGUuY3VycmVuY3k9MTY0LGUuY3lyQnJldmU9NjMxODUsZS5jeXJGbGV4PTYzMTg2LGUuY3lyYnJldmU9NjMxODgsZS5jeXJmbGV4PTYzMTg5LGUuZD0xMDAsZS5kYWFybWVuaWFuPTEzODAsZS5kYWJlbmdhbGk9MjQ3MCxlLmRhZGFyYWJpYz0xNTkwLGUuZGFkZXZhPTIzNDIsZS5kYWRmaW5hbGFyYWJpYz02NTIxNCxlLmRhZGluaXRpYWxhcmFiaWM9NjUyMTUsZS5kYWRtZWRpYWxhcmFiaWM9NjUyMTYsZS5kYWdlc2g9MTQ2OCxlLmRhZ2VzaGhlYnJldz0xNDY4LGUuZGFnZ2VyPTgyMjQsZS5kYWdnZXJkYmw9ODIyNSxlLmRhZ3VqYXJhdGk9MjcyNixlLmRhZ3VybXVraGk9MjU5OCxlLmRhaGlyYWdhbmE9MTIzODQsZS5kYWthdGFrYW5hPTEyNDgwLGUuZGFsYXJhYmljPTE1ODMsZS5kYWxldD0xNDkxLGUuZGFsZXRkYWdlc2g9NjQzMDcsZS5kYWxldGRhZ2VzaGhlYnJldz02NDMwNyxlLmRhbGV0aGVicmV3PTE0OTEsZS5kYWxmaW5hbGFyYWJpYz02NTE5NCxlLmRhbW1hYXJhYmljPTE2MTUsZS5kYW1tYWxvd2FyYWJpYz0xNjE1LGUuZGFtbWF0YW5hbHRvbmVhcmFiaWM9MTYxMixlLmRhbW1hdGFuYXJhYmljPTE2MTIsZS5kYW5kYT0yNDA0LGUuZGFyZ2FoZWJyZXc9MTQ0NyxlLmRhcmdhbGVmdGhlYnJldz0xNDQ3LGUuZGFzaWFwbmV1bWF0YWN5cmlsbGljY21iPTExNTcsZS5kYmxHcmF2ZT02MzE4NyxlLmRibGFuZ2xlYnJhY2tldGxlZnQ9MTIyOTgsZS5kYmxhbmdsZWJyYWNrZXRsZWZ0dmVydGljYWw9NjUwODUsZS5kYmxhbmdsZWJyYWNrZXRyaWdodD0xMjI5OSxlLmRibGFuZ2xlYnJhY2tldHJpZ2h0dmVydGljYWw9NjUwODYsZS5kYmxhcmNoaW52ZXJ0ZWRiZWxvd2NtYj04MTEsZS5kYmxhcnJvd2xlZnQ9ODY2MCxlLmRibGFycm93cmlnaHQ9ODY1OCxlLmRibGRhbmRhPTI0MDUsZS5kYmxncmF2ZT02MzE5MCxlLmRibGdyYXZlY21iPTc4MyxlLmRibGludGVncmFsPTg3NDgsZS5kYmxsb3dsaW5lPTgyMTUsZS5kYmxsb3dsaW5lY21iPTgxOSxlLmRibG92ZXJsaW5lY21iPTgzMSxlLmRibHByaW1lbW9kPTY5OCxlLmRibHZlcnRpY2FsYmFyPTgyMTQsZS5kYmx2ZXJ0aWNhbGxpbmVhYm92ZWNtYj03ODIsZS5kYm9wb21vZm89MTI1NTMsZS5kYnNxdWFyZT0xMzI1NixlLmRjYXJvbj0yNzEsZS5kY2VkaWxsYT03Njk3LGUuZGNpcmNsZT05NDI3LGUuZGNpcmN1bWZsZXhiZWxvdz03Njk5LGUuZGNyb2F0PTI3MyxlLmRkYWJlbmdhbGk9MjQ2NSxlLmRkYWRldmE9MjMzNyxlLmRkYWd1amFyYXRpPTI3MjEsZS5kZGFndXJtdWtoaT0yNTkzLGUuZGRhbGFyYWJpYz0xNjcyLGUuZGRhbGZpbmFsYXJhYmljPTY0MzkzLGUuZGRkaGFkZXZhPTIzOTYsZS5kZGhhYmVuZ2FsaT0yNDY2LGUuZGRoYWRldmE9MjMzOCxlLmRkaGFndWphcmF0aT0yNzIyLGUuZGRoYWd1cm11a2hpPTI1OTQsZS5kZG90YWNjZW50PTc2OTEsZS5kZG90YmVsb3c9NzY5MyxlLmRlY2ltYWxzZXBhcmF0b3JhcmFiaWM9MTY0MyxlLmRlY2ltYWxzZXBhcmF0b3JwZXJzaWFuPTE2NDMsZS5kZWN5cmlsbGljPTEwNzYsZS5kZWdyZWU9MTc2LGUuZGVoaWhlYnJldz0xNDUzLGUuZGVoaXJhZ2FuYT0xMjM5MSxlLmRlaWNvcHRpYz0xMDA3LGUuZGVrYXRha2FuYT0xMjQ4NyxlLmRlbGV0ZWxlZnQ9OTAwMyxlLmRlbGV0ZXJpZ2h0PTg5OTgsZS5kZWx0YT05NDgsZS5kZWx0YXR1cm5lZD0zOTcsZS5kZW5vbWluYXRvcm1pbnVzb25lbnVtZXJhdG9yYmVuZ2FsaT0yNTUyLGUuZGV6aD02NzYsZS5kaGFiZW5nYWxpPTI0NzEsZS5kaGFkZXZhPTIzNDMsZS5kaGFndWphcmF0aT0yNzI3LGUuZGhhZ3VybXVraGk9MjU5OSxlLmRob29rPTU5OSxlLmRpYWx5dGlrYXRvbm9zPTkwMSxlLmRpYWx5dGlrYXRvbm9zY21iPTgzNixlLmRpYW1vbmQ9OTgzMCxlLmRpYW1vbmRzdWl0d2hpdGU9OTgyNixlLmRpZXJlc2lzPTE2OCxlLmRpZXJlc2lzYWN1dGU9NjMxOTEsZS5kaWVyZXNpc2JlbG93Y21iPTgwNCxlLmRpZXJlc2lzY21iPTc3NixlLmRpZXJlc2lzZ3JhdmU9NjMxOTIsZS5kaWVyZXNpc3Rvbm9zPTkwMSxlLmRpaGlyYWdhbmE9MTIzODYsZS5kaWthdGFrYW5hPTEyNDgyLGUuZGl0dG9tYXJrPTEyMjkxLGUuZGl2aWRlPTI0NyxlLmRpdmlkZXM9ODczOSxlLmRpdmlzaW9uc2xhc2g9ODcyNSxlLmRqZWN5cmlsbGljPTExMDYsZS5ka3NoYWRlPTk2MTksZS5kbGluZWJlbG93PTc2OTUsZS5kbHNxdWFyZT0xMzIwNyxlLmRtYWNyb249MjczLGUuZG1vbm9zcGFjZT02NTM0OCxlLmRuYmxvY2s9OTYwNCxlLmRvY2hhZGF0aGFpPTM1OTgsZS5kb2Rla3RoYWk9MzYwNCxlLmRvaGlyYWdhbmE9MTIzOTMsZS5kb2thdGFrYW5hPTEyNDg5LGUuZG9sbGFyPTM2O2UuZG9sbGFyaW5mZXJpb3I9NjMyMDMsZS5kb2xsYXJtb25vc3BhY2U9NjUyODQsZS5kb2xsYXJvbGRzdHlsZT02MzI2OCxlLmRvbGxhcnNtYWxsPTY1MTI5LGUuZG9sbGFyc3VwZXJpb3I9NjMyMDQsZS5kb25nPTgzNjMsZS5kb3J1c3F1YXJlPTEzMDk0LGUuZG90YWNjZW50PTcyOSxlLmRvdGFjY2VudGNtYj03NzUsZS5kb3RiZWxvd2NtYj04MDMsZS5kb3RiZWxvd2NvbWI9ODAzLGUuZG90a2F0YWthbmE9MTI1MzksZS5kb3RsZXNzaT0zMDUsZS5kb3RsZXNzaj02MzE2NixlLmRvdGxlc3Nqc3Ryb2tlaG9vaz02NDQsZS5kb3RtYXRoPTg5MDEsZS5kb3R0ZWRjaXJjbGU9OTY3NixlLmRvdWJsZXlvZHBhdGFoPTY0Mjg3LGUuZG91YmxleW9kcGF0YWhoZWJyZXc9NjQyODcsZS5kb3dudGFja2JlbG93Y21iPTc5OCxlLmRvd250YWNrbW9kPTcyNSxlLmRwYXJlbj05Mzc1LGUuZHN1cGVyaW9yPTYzMjExLGUuZHRhaWw9NTk4LGUuZHRvcGJhcj0zOTYsZS5kdWhpcmFnYW5hPTEyMzg5LGUuZHVrYXRha2FuYT0xMjQ4NSxlLmR6PTQ5OSxlLmR6YWx0b25lPTY3NSxlLmR6Y2Fyb249NDU0LGUuZHpjdXJsPTY3NyxlLmR6ZWFia2hhc2lhbmN5cmlsbGljPTEyNDksZS5kemVjeXJpbGxpYz0xMTA5LGUuZHpoZWN5cmlsbGljPTExMTksZS5lPTEwMSxlLmVhY3V0ZT0yMzMsZS5lYXJ0aD05NzkzLGUuZWJlbmdhbGk9MjQ0NyxlLmVib3BvbW9mbz0xMjU3MixlLmVicmV2ZT0yNzcsZS5lY2FuZHJhZGV2YT0yMzE3LGUuZWNhbmRyYWd1amFyYXRpPTI3MDEsZS5lY2FuZHJhdm93ZWxzaWduZGV2YT0yMzczLGUuZWNhbmRyYXZvd2Vsc2lnbmd1amFyYXRpPTI3NTcsZS5lY2Fyb249MjgzLGUuZWNlZGlsbGFicmV2ZT03NzA5LGUuZWNoYXJtZW5pYW49MTM4MSxlLmVjaHlpd25hcm1lbmlhbj0xNDE1LGUuZWNpcmNsZT05NDI4LGUuZWNpcmN1bWZsZXg9MjM0LGUuZWNpcmN1bWZsZXhhY3V0ZT03ODcxLGUuZWNpcmN1bWZsZXhiZWxvdz03NzA1LGUuZWNpcmN1bWZsZXhkb3RiZWxvdz03ODc5LGUuZWNpcmN1bWZsZXhncmF2ZT03ODczLGUuZWNpcmN1bWZsZXhob29rYWJvdmU9Nzg3NSxlLmVjaXJjdW1mbGV4dGlsZGU9Nzg3NyxlLmVjeXJpbGxpYz0xMTA4LGUuZWRibGdyYXZlPTUxNyxlLmVkZXZhPTIzMTksZS5lZGllcmVzaXM9MjM1LGUuZWRvdD0yNzksZS5lZG90YWNjZW50PTI3OSxlLmVkb3RiZWxvdz03ODY1LGUuZWVndXJtdWtoaT0yNTc1LGUuZWVtYXRyYWd1cm11a2hpPTI2MzEsZS5lZmN5cmlsbGljPTEwOTIsZS5lZ3JhdmU9MjMyLGUuZWd1amFyYXRpPTI3MDMsZS5laGFybWVuaWFuPTEzODMsZS5laGJvcG9tb2ZvPTEyNTczLGUuZWhpcmFnYW5hPTEyMzYwLGUuZWhvb2thYm92ZT03ODY3LGUuZWlib3BvbW9mbz0xMjU3NSxlLmVpZ2h0PTU2LGUuZWlnaHRhcmFiaWM9MTY0MCxlLmVpZ2h0YmVuZ2FsaT0yNTQyLGUuZWlnaHRjaXJjbGU9OTMxOSxlLmVpZ2h0Y2lyY2xlaW52ZXJzZXNhbnNzZXJpZj0xMDEyOSxlLmVpZ2h0ZGV2YT0yNDE0LGUuZWlnaHRlZW5jaXJjbGU9OTMyOSxlLmVpZ2h0ZWVucGFyZW49OTM0OSxlLmVpZ2h0ZWVucGVyaW9kPTkzNjksZS5laWdodGd1amFyYXRpPTI3OTgsZS5laWdodGd1cm11a2hpPTI2NzAsZS5laWdodGhhY2thcmFiaWM9MTY0MCxlLmVpZ2h0aGFuZ3pob3U9MTIzMjgsZS5laWdodGhub3RlYmVhbWVkPTk4MzUsZS5laWdodGlkZW9ncmFwaGljcGFyZW49MTI4MzksZS5laWdodGluZmVyaW9yPTgzMjgsZS5laWdodG1vbm9zcGFjZT02NTMwNCxlLmVpZ2h0b2xkc3R5bGU9NjMyODgsZS5laWdodHBhcmVuPTkzMzksZS5laWdodHBlcmlvZD05MzU5LGUuZWlnaHRwZXJzaWFuPTE3ODQsZS5laWdodHJvbWFuPTg1NjcsZS5laWdodHN1cGVyaW9yPTgzMTIsZS5laWdodHRoYWk9MzY3MixlLmVpbnZlcnRlZGJyZXZlPTUxOSxlLmVpb3RpZmllZGN5cmlsbGljPTExMjUsZS5la2F0YWthbmE9MTI0NTYsZS5la2F0YWthbmFoYWxmd2lkdGg9NjUzOTYsZS5la29ua2FyZ3VybXVraGk9MjY3NixlLmVrb3JlYW49MTI2MjgsZS5lbGN5cmlsbGljPTEwODMsZS5lbGVtZW50PTg3MTIsZS5lbGV2ZW5jaXJjbGU9OTMyMixlLmVsZXZlbnBhcmVuPTkzNDIsZS5lbGV2ZW5wZXJpb2Q9OTM2MixlLmVsZXZlbnJvbWFuPTg1NzAsZS5lbGxpcHNpcz04MjMwLGUuZWxsaXBzaXN2ZXJ0aWNhbD04OTQyLGUuZW1hY3Jvbj0yNzUsZS5lbWFjcm9uYWN1dGU9NzcwMyxlLmVtYWNyb25ncmF2ZT03NzAxLGUuZW1jeXJpbGxpYz0xMDg0LGUuZW1kYXNoPTgyMTIsZS5lbWRhc2h2ZXJ0aWNhbD02NTA3MyxlLmVtb25vc3BhY2U9NjUzNDksZS5lbXBoYXNpc21hcmthcm1lbmlhbj0xMzcxLGUuZW1wdHlzZXQ9ODcwOSxlLmVuYm9wb21vZm89MTI1NzksZS5lbmN5cmlsbGljPTEwODUsZS5lbmRhc2g9ODIxMSxlLmVuZGFzaHZlcnRpY2FsPTY1MDc0LGUuZW5kZXNjZW5kZXJjeXJpbGxpYz0xMTg3LGUuZW5nPTMzMSxlLmVuZ2JvcG9tb2ZvPTEyNTgxLGUuZW5naGVjeXJpbGxpYz0xMTg5LGUuZW5ob29rY3lyaWxsaWM9MTIyNCxlLmVuc3BhY2U9ODE5NCxlLmVvZ29uZWs9MjgxLGUuZW9rb3JlYW49MTI2MjcsZS5lb3Blbj02MDMsZS5lb3BlbmNsb3NlZD02NjYsZS5lb3BlbnJldmVyc2VkPTYwNCxlLmVvcGVucmV2ZXJzZWRjbG9zZWQ9NjA2LGUuZW9wZW5yZXZlcnNlZGhvb2s9NjA1LGUuZXBhcmVuPTkzNzYsZS5lcHNpbG9uPTk0OSxlLmVwc2lsb250b25vcz05NDEsZS5lcXVhbD02MSxlLmVxdWFsbW9ub3NwYWNlPTY1MzA5LGUuZXF1YWxzbWFsbD02NTEyNixlLmVxdWFsc3VwZXJpb3I9ODMxNixlLmVxdWl2YWxlbmNlPTg4MDEsZS5lcmJvcG9tb2ZvPTEyNTgyLGUuZXJjeXJpbGxpYz0xMDg4LGUuZXJldmVyc2VkPTYwMCxlLmVyZXZlcnNlZGN5cmlsbGljPTExMDEsZS5lc2N5cmlsbGljPTEwODksZS5lc2Rlc2NlbmRlcmN5cmlsbGljPTExOTUsZS5lc2g9NjQzLGUuZXNoY3VybD02NDYsZS5lc2hvcnRkZXZhPTIzMTgsZS5lc2hvcnR2b3dlbHNpZ25kZXZhPTIzNzQsZS5lc2hyZXZlcnNlZGxvb3A9NDI2LGUuZXNoc3F1YXRyZXZlcnNlZD02NDUsZS5lc21hbGxoaXJhZ2FuYT0xMjM1OSxlLmVzbWFsbGthdGFrYW5hPTEyNDU1LGUuZXNtYWxsa2F0YWthbmFoYWxmd2lkdGg9NjUzODYsZS5lc3RpbWF0ZWQ9ODQ5NCxlLmVzdXBlcmlvcj02MzIxMixlLmV0YT05NTEsZS5ldGFybWVuaWFuPTEzODQsZS5ldGF0b25vcz05NDIsZS5ldGg9MjQwLGUuZXRpbGRlPTc4NjksZS5ldGlsZGViZWxvdz03NzA3LGUuZXRuYWh0YWZvdWtoaGVicmV3PTE0MjUsZS5ldG5haHRhZm91a2hsZWZ0aGVicmV3PTE0MjUsZS5ldG5haHRhaGVicmV3PTE0MjUsZS5ldG5haHRhbGVmdGhlYnJldz0xNDI1LGUuZXR1cm5lZD00NzcsZS5ldWtvcmVhbj0xMjY0MSxlLmV1cm89ODM2NCxlLmV2b3dlbHNpZ25iZW5nYWxpPTI1MDMsZS5ldm93ZWxzaWduZGV2YT0yMzc1LGUuZXZvd2Vsc2lnbmd1amFyYXRpPTI3NTksZS5leGNsYW09MzMsZS5leGNsYW1hcm1lbmlhbj0xMzcyLGUuZXhjbGFtZGJsPTgyNTIsZS5leGNsYW1kb3duPTE2MSxlLmV4Y2xhbWRvd25zbWFsbD02MzM5MyxlLmV4Y2xhbW1vbm9zcGFjZT02NTI4MSxlLmV4Y2xhbXNtYWxsPTYzMjY1LGUuZXhpc3RlbnRpYWw9ODcwNyxlLmV6aD02NTgsZS5lemhjYXJvbj00OTUsZS5lemhjdXJsPTY1OSxlLmV6aHJldmVyc2VkPTQ0MSxlLmV6aHRhaWw9NDQyLGUuZj0xMDIsZS5mYWRldmE9MjM5OCxlLmZhZ3VybXVraGk9MjY1NCxlLmZhaHJlbmhlaXQ9ODQ1NyxlLmZhdGhhYXJhYmljPTE2MTQsZS5mYXRoYWxvd2FyYWJpYz0xNjE0LGUuZmF0aGF0YW5hcmFiaWM9MTYxMSxlLmZib3BvbW9mbz0xMjU1MixlLmZjaXJjbGU9OTQyOSxlLmZkb3RhY2NlbnQ9NzcxMSxlLmZlaGFyYWJpYz0xNjAxLGUuZmVoYXJtZW5pYW49MTQxNCxlLmZlaGZpbmFsYXJhYmljPTY1MjM0LGUuZmVoaW5pdGlhbGFyYWJpYz02NTIzNSxlLmZlaG1lZGlhbGFyYWJpYz02NTIzNixlLmZlaWNvcHRpYz05OTcsZS5mZW1hbGU9OTc5MixlLmZmPTY0MjU2LGUuZl9mPTY0MjU2LGUuZmZpPTY0MjU5LGUuZl9mX2k9NjQyNTksZS5mZmw9NjQyNjAsZS5mX2ZfbD02NDI2MCxlLmZpPTY0MjU3LGUuZl9pPTY0MjU3LGUuZmlmdGVlbmNpcmNsZT05MzI2LGUuZmlmdGVlbnBhcmVuPTkzNDYsZS5maWZ0ZWVucGVyaW9kPTkzNjYsZS5maWd1cmVkYXNoPTgyMTAsZS5maWxsZWRib3g9OTYzMixlLmZpbGxlZHJlY3Q9OTY0NCxlLmZpbmFsa2FmPTE0OTgsZS5maW5hbGthZmRhZ2VzaD02NDMxNCxlLmZpbmFsa2FmZGFnZXNoaGVicmV3PTY0MzE0LGUuZmluYWxrYWZoZWJyZXc9MTQ5OCxlLmZpbmFsbWVtPTE1MDEsZS5maW5hbG1lbWhlYnJldz0xNTAxLGUuZmluYWxudW49MTUwMyxlLmZpbmFsbnVuaGVicmV3PTE1MDMsZS5maW5hbHBlPTE1MDcsZS5maW5hbHBlaGVicmV3PTE1MDcsZS5maW5hbHRzYWRpPTE1MDksZS5maW5hbHRzYWRpaGVicmV3PTE1MDksZS5maXJzdHRvbmVjaGluZXNlPTcxMyxlLmZpc2hleWU9OTY3MyxlLmZpdGFjeXJpbGxpYz0xMTM5LGUuZml2ZT01MyxlLmZpdmVhcmFiaWM9MTYzNyxlLmZpdmViZW5nYWxpPTI1MzksZS5maXZlY2lyY2xlPTkzMTYsZS5maXZlY2lyY2xlaW52ZXJzZXNhbnNzZXJpZj0xMDEyNixlLmZpdmVkZXZhPTI0MTEsZS5maXZlZWlnaHRocz04NTQxLGUuZml2ZWd1amFyYXRpPTI3OTUsZS5maXZlZ3VybXVraGk9MjY2NyxlLmZpdmVoYWNrYXJhYmljPTE2MzcsZS5maXZlaGFuZ3pob3U9MTIzMjUsZS5maXZlaWRlb2dyYXBoaWNwYXJlbj0xMjgzNixlLmZpdmVpbmZlcmlvcj04MzI1LGUuZml2ZW1vbm9zcGFjZT02NTMwMSxlLmZpdmVvbGRzdHlsZT02MzI4NSxlLmZpdmVwYXJlbj05MzM2LGUuZml2ZXBlcmlvZD05MzU2LGUuZml2ZXBlcnNpYW49MTc4MSxlLmZpdmVyb21hbj04NTY0LGUuZml2ZXN1cGVyaW9yPTgzMDksZS5maXZldGhhaT0zNjY5LGUuZmw9NjQyNTgsZS5mX2w9NjQyNTgsZS5mbG9yaW49NDAyLGUuZm1vbm9zcGFjZT02NTM1MCxlLmZtc3F1YXJlPTEzMjA5LGUuZm9mYW50aGFpPTM2MTUsZS5mb2ZhdGhhaT0zNjEzLGUuZm9uZ21hbnRoYWk9MzY2MyxlLmZvcmFsbD04NzA0LGUuZm91cj01MixlLmZvdXJhcmFiaWM9MTYzNixlLmZvdXJiZW5nYWxpPTI1MzgsZS5mb3VyY2lyY2xlPTkzMTUsZS5mb3VyY2lyY2xlaW52ZXJzZXNhbnNzZXJpZj0xMDEyNSxlLmZvdXJkZXZhPTI0MTAsZS5mb3VyZ3VqYXJhdGk9Mjc5NCxlLmZvdXJndXJtdWtoaT0yNjY2LGUuZm91cmhhY2thcmFiaWM9MTYzNixlLmZvdXJoYW5nemhvdT0xMjMyNCxlLmZvdXJpZGVvZ3JhcGhpY3BhcmVuPTEyODM1LGUuZm91cmluZmVyaW9yPTgzMjQsZS5mb3VybW9ub3NwYWNlPTY1MzAwLGUuZm91cm51bWVyYXRvcmJlbmdhbGk9MjU1MSxlLmZvdXJvbGRzdHlsZT02MzI4NCxlLmZvdXJwYXJlbj05MzM1LGUuZm91cnBlcmlvZD05MzU1LGUuZm91cnBlcnNpYW49MTc4MCxlLmZvdXJyb21hbj04NTYzLGUuZm91cnN1cGVyaW9yPTgzMDgsZS5mb3VydGVlbmNpcmNsZT05MzI1LGUuZm91cnRlZW5wYXJlbj05MzQ1LGUuZm91cnRlZW5wZXJpb2Q9OTM2NSxlLmZvdXJ0aGFpPTM2NjgsZS5mb3VydGh0b25lY2hpbmVzZT03MTUsZS5mcGFyZW49OTM3NyxlLmZyYWN0aW9uPTgyNjAsZS5mcmFuYz04MzU1LGUuZz0xMDMsZS5nYWJlbmdhbGk9MjQ1NSxlLmdhY3V0ZT01MDEsZS5nYWRldmE9MjMyNyxlLmdhZmFyYWJpYz0xNzExLGUuZ2FmZmluYWxhcmFiaWM9NjQ0MDMsZS5nYWZpbml0aWFsYXJhYmljPTY0NDA0LGUuZ2FmbWVkaWFsYXJhYmljPTY0NDA1LGUuZ2FndWphcmF0aT0yNzExLGUuZ2FndXJtdWtoaT0yNTgzLGUuZ2FoaXJhZ2FuYT0xMjM2NCxlLmdha2F0YWthbmE9MTI0NjAsZS5nYW1tYT05NDcsZS5nYW1tYWxhdGluc21hbGw9NjExLGUuZ2FtbWFzdXBlcmlvcj03MzYsZS5nYW5naWFjb3B0aWM9MTAwMyxlLmdib3BvbW9mbz0xMjU1NyxlLmdicmV2ZT0yODcsZS5nY2Fyb249NDg3LGUuZ2NlZGlsbGE9MjkxLGUuZ2NpcmNsZT05NDMwLGUuZ2NpcmN1bWZsZXg9Mjg1LGUuZ2NvbW1hYWNjZW50PTI5MSxlLmdkb3Q9Mjg5LGUuZ2RvdGFjY2VudD0yODksZS5nZWN5cmlsbGljPTEwNzUsZS5nZWhpcmFnYW5hPTEyMzcwLGUuZ2VrYXRha2FuYT0xMjQ2NixlLmdlb21ldHJpY2FsbHllcXVhbD04Nzg1LGUuZ2VyZXNoYWNjZW50aGVicmV3PTE0MzYsZS5nZXJlc2hoZWJyZXc9MTUyMyxlLmdlcmVzaG11cWRhbWhlYnJldz0xNDM3LGUuZ2VybWFuZGJscz0yMjMsZS5nZXJzaGF5aW1hY2NlbnRoZWJyZXc9MTQzOCxlLmdlcnNoYXlpbWhlYnJldz0xNTI0LGUuZ2V0YW1hcms9MTIzMDcsZS5naGFiZW5nYWxpPTI0NTYsZS5naGFkYXJtZW5pYW49MTM5NCxlLmdoYWRldmE9MjMyOCxlLmdoYWd1amFyYXRpPTI3MTIsZS5naGFndXJtdWtoaT0yNTg0LGUuZ2hhaW5hcmFiaWM9MTU5NCxlLmdoYWluZmluYWxhcmFiaWM9NjUyMzAsZS5naGFpbmluaXRpYWxhcmFiaWM9NjUyMzEsZS5naGFpbm1lZGlhbGFyYWJpYz02NTIzMixlLmdoZW1pZGRsZWhvb2tjeXJpbGxpYz0xMTczLGUuZ2hlc3Ryb2tlY3lyaWxsaWM9MTE3MSxlLmdoZXVwdHVybmN5cmlsbGljPTExNjksZS5naGhhZGV2YT0yMzk0LGUuZ2hoYWd1cm11a2hpPTI2NTAsZS5naG9vaz02MDgsZS5naHpzcXVhcmU9MTMyMDMsZS5naWhpcmFnYW5hPTEyMzY2LGUuZ2lrYXRha2FuYT0xMjQ2MixlLmdpbWFybWVuaWFuPTEzNzksZS5naW1lbD0xNDkwLGUuZ2ltZWxkYWdlc2g9NjQzMDYsZS5naW1lbGRhZ2VzaGhlYnJldz02NDMwNixlLmdpbWVsaGVicmV3PTE0OTAsZS5namVjeXJpbGxpYz0xMTA3LGUuZ2xvdHRhbGludmVydGVkc3Ryb2tlPTQ0NixlLmdsb3R0YWxzdG9wPTY2MCxlLmdsb3R0YWxzdG9waW52ZXJ0ZWQ9NjYyLGUuZ2xvdHRhbHN0b3Btb2Q9NzA0LGUuZ2xvdHRhbHN0b3ByZXZlcnNlZD02NjEsZS5nbG90dGFsc3RvcHJldmVyc2VkbW9kPTcwNSxlLmdsb3R0YWxzdG9wcmV2ZXJzZWRzdXBlcmlvcj03NDAsZS5nbG90dGFsc3RvcHN0cm9rZT02NzMsZS5nbG90dGFsc3RvcHN0cm9rZXJldmVyc2VkPTY3NCxlLmdtYWNyb249NzcxMyxlLmdtb25vc3BhY2U9NjUzNTEsZS5nb2hpcmFnYW5hPTEyMzcyLGUuZ29rYXRha2FuYT0xMjQ2OCxlLmdwYXJlbj05Mzc4LGUuZ3Bhc3F1YXJlPTEzMjI4LGUuZ3JhZGllbnQ9ODcxMSxlLmdyYXZlPTk2LGUuZ3JhdmViZWxvd2NtYj03OTAsZS5ncmF2ZWNtYj03NjgsZS5ncmF2ZWNvbWI9NzY4LGUuZ3JhdmVkZXZhPTIzODcsZS5ncmF2ZWxvd21vZD03MTgsZS5ncmF2ZW1vbm9zcGFjZT02NTM0NCxlLmdyYXZldG9uZWNtYj04MzIsZS5ncmVhdGVyPTYyLGUuZ3JlYXRlcmVxdWFsPTg4MDUsZS5ncmVhdGVyZXF1YWxvcmxlc3M9ODkyMyxlLmdyZWF0ZXJtb25vc3BhY2U9NjUzMTAsZS5ncmVhdGVyb3JlcXVpdmFsZW50PTg4MTksZS5ncmVhdGVyb3JsZXNzPTg4MjMsZS5ncmVhdGVyb3ZlcmVxdWFsPTg4MDcsZS5ncmVhdGVyc21hbGw9NjUxMjUsZS5nc2NyaXB0PTYwOSxlLmdzdHJva2U9NDg1LGUuZ3VoaXJhZ2FuYT0xMjM2OCxlLmd1aWxsZW1vdGxlZnQ9MTcxLGUuZ3VpbGxlbW90cmlnaHQ9MTg3LGUuZ3VpbHNpbmdsbGVmdD04MjQ5LGUuZ3VpbHNpbmdscmlnaHQ9ODI1MCxlLmd1a2F0YWthbmE9MTI0NjQsZS5ndXJhbXVzcXVhcmU9MTMwODAsZS5neXNxdWFyZT0xMzI1NyxlLmg9MTA0LGUuaGFhYmtoYXNpYW5jeXJpbGxpYz0xMTkzLGUuaGFhbHRvbmVhcmFiaWM9MTcyOSxlLmhhYmVuZ2FsaT0yNDg5LGUuaGFkZXNjZW5kZXJjeXJpbGxpYz0xMjAzLGUuaGFkZXZhPTIzNjEsZS5oYWd1amFyYXRpPTI3NDUsZS5oYWd1cm11a2hpPTI2MTcsZS5oYWhhcmFiaWM9MTU4MSxlLmhhaGZpbmFsYXJhYmljPTY1MTg2LGUuaGFoaW5pdGlhbGFyYWJpYz02NTE4NyxlLmhhaGlyYWdhbmE9MTIzOTksZS5oYWhtZWRpYWxhcmFiaWM9NjUxODgsZS5oYWl0dXNxdWFyZT0xMzA5OCxlLmhha2F0YWthbmE9MTI0OTUsZS5oYWthdGFrYW5haGFsZndpZHRoPTY1NDE4LGUuaGFsYW50Z3VybXVraGk9MjYzNyxlLmhhbXphYXJhYmljPTE1NjksZS5oYW16YWxvd2FyYWJpYz0xNTY5LGUuaGFuZ3VsZmlsbGVyPTEyNjQ0LGUuaGFyZHNpZ25jeXJpbGxpYz0xMDk4LGUuaGFycG9vbmxlZnRiYXJidXA9ODYzNixlLmhhcnBvb25yaWdodGJhcmJ1cD04NjQwLGUuaGFzcXVhcmU9MTMyNTgsZS5oYXRhZnBhdGFoPTE0NTgsZS5oYXRhZnBhdGFoMTY9MTQ1OCxlLmhhdGFmcGF0YWgyMz0xNDU4LGUuaGF0YWZwYXRhaDJmPTE0NTgsZS5oYXRhZnBhdGFoaGVicmV3PTE0NTgsZS5oYXRhZnBhdGFobmFycm93aGVicmV3PTE0NTgsZS5oYXRhZnBhdGFocXVhcnRlcmhlYnJldz0xNDU4LGUuaGF0YWZwYXRhaHdpZGVoZWJyZXc9MTQ1OCxlLmhhdGFmcWFtYXRzPTE0NTksZS5oYXRhZnFhbWF0czFiPTE0NTksZS5oYXRhZnFhbWF0czI4PTE0NTksZS5oYXRhZnFhbWF0czM0PTE0NTksZS5oYXRhZnFhbWF0c2hlYnJldz0xNDU5LGUuaGF0YWZxYW1hdHNuYXJyb3doZWJyZXc9MTQ1OSxlLmhhdGFmcWFtYXRzcXVhcnRlcmhlYnJldz0xNDU5LGUuaGF0YWZxYW1hdHN3aWRlaGVicmV3PTE0NTksZS5oYXRhZnNlZ29sPTE0NTcsZS5oYXRhZnNlZ29sMTc9MTQ1NyxlLmhhdGFmc2Vnb2wyND0xNDU3LGUuaGF0YWZzZWdvbDMwPTE0NTcsZS5oYXRhZnNlZ29saGVicmV3PTE0NTcsZS5oYXRhZnNlZ29sbmFycm93aGVicmV3PTE0NTcsZS5oYXRhZnNlZ29scXVhcnRlcmhlYnJldz0xNDU3LGUuaGF0YWZzZWdvbHdpZGVoZWJyZXc9MTQ1NyxlLmhiYXI9Mjk1LGUuaGJvcG9tb2ZvPTEyNTU5LGUuaGJyZXZlYmVsb3c9NzcyMyxlLmhjZWRpbGxhPTc3MjEsZS5oY2lyY2xlPTk0MzEsZS5oY2lyY3VtZmxleD0yOTMsZS5oZGllcmVzaXM9NzcxOSxlLmhkb3RhY2NlbnQ9NzcxNSxlLmhkb3RiZWxvdz03NzE3LGUuaGU9MTQ5MixlLmhlYXJ0PTk4MjksZS5oZWFydHN1aXRibGFjaz05ODI5LGUuaGVhcnRzdWl0d2hpdGU9OTgyNSxlLmhlZGFnZXNoPTY0MzA4LGUuaGVkYWdlc2hoZWJyZXc9NjQzMDgsZS5oZWhhbHRvbmVhcmFiaWM9MTcyOSxlLmhlaGFyYWJpYz0xNjA3LGUuaGVoZWJyZXc9MTQ5MixlLmhlaGZpbmFsYWx0b25lYXJhYmljPTY0NDIzLGUuaGVoZmluYWxhbHR0d29hcmFiaWM9NjUyNTgsZS5oZWhmaW5hbGFyYWJpYz02NTI1OCxlLmhlaGhhbXphYWJvdmVmaW5hbGFyYWJpYz02NDQyMSxlLmhlaGhhbXphYWJvdmVpc29sYXRlZGFyYWJpYz02NDQyMCxlLmhlaGluaXRpYWxhbHRvbmVhcmFiaWM9NjQ0MjQsZS5oZWhpbml0aWFsYXJhYmljPTY1MjU5LGUuaGVoaXJhZ2FuYT0xMjQwOCxlLmhlaG1lZGlhbGFsdG9uZWFyYWJpYz02NDQyNSxlLmhlaG1lZGlhbGFyYWJpYz02NTI2MCxlLmhlaXNlaWVyYXNxdWFyZT0xMzE3OSxlLmhla2F0YWthbmE9MTI1MDQsZS5oZWthdGFrYW5haGFsZndpZHRoPTY1NDIxLGUuaGVrdXRhYXJ1c3F1YXJlPTEzMTEwLGUuaGVuZ2hvb2s9NjE1LGUuaGVydXR1c3F1YXJlPTEzMTEzLGUuaGV0PTE0OTUsZS5oZXRoZWJyZXc9MTQ5NSxlLmhob29rPTYxNCxlLmhob29rc3VwZXJpb3I9Njg5LGUuaGlldWhhY2lyY2xla29yZWFuPTEyOTIzLGUuaGlldWhhcGFyZW5rb3JlYW49MTI4MjcsZS5oaWV1aGNpcmNsZWtvcmVhbj0xMjkwOSxlLmhpZXVoa29yZWFuPTEyNjIyLGUuaGlldWhwYXJlbmtvcmVhbj0xMjgxMyxlLmhpaGlyYWdhbmE9MTI0MDIsZS5oaWthdGFrYW5hPTEyNDk4LGUuaGlrYXRha2FuYWhhbGZ3aWR0aD02NTQxOSxlLmhpcmlxPTE0NjAsZS5oaXJpcTE0PTE0NjAsZS5oaXJpcTIxPTE0NjAsZS5oaXJpcTJkPTE0NjAsZS5oaXJpcWhlYnJldz0xNDYwLGUuaGlyaXFuYXJyb3doZWJyZXc9MTQ2MCxlLmhpcmlxcXVhcnRlcmhlYnJldz0xNDYwLGUuaGlyaXF3aWRlaGVicmV3PTE0NjAsZS5obGluZWJlbG93PTc4MzAsZS5obW9ub3NwYWNlPTY1MzUyLGUuaG9hcm1lbmlhbj0xMzkyLGUuaG9oaXB0aGFpPTM2MjcsZS5ob2hpcmFnYW5hPTEyNDExLGUuaG9rYXRha2FuYT0xMjUwNyxlLmhva2F0YWthbmFoYWxmd2lkdGg9NjU0MjIsZS5ob2xhbT0xNDY1LGUuaG9sYW0xOT0xNDY1LGUuaG9sYW0yNj0xNDY1LGUuaG9sYW0zMj0xNDY1LGUuaG9sYW1oZWJyZXc9MTQ2NSxlLmhvbGFtbmFycm93aGVicmV3PTE0NjUsZS5ob2xhbXF1YXJ0ZXJoZWJyZXc9MTQ2NSxlLmhvbGFtd2lkZWhlYnJldz0xNDY1LGUuaG9ub2todWt0aGFpPTM2MzAsZS5ob29rYWJvdmVjb21iPTc3NyxlLmhvb2tjbWI9Nzc3LGUuaG9va3BhbGF0YWxpemVkYmVsb3djbWI9ODAxLGUuaG9va3JldHJvZmxleGJlbG93Y21iPTgwMixlLmhvb25zcXVhcmU9MTMxMjIsZS5ob3JpY29wdGljPTEwMDEsZS5ob3Jpem9udGFsYmFyPTgyMTMsZS5ob3JuY21iPTc5NSxlLmhvdHNwcmluZ3M9OTgzMixlLmhvdXNlPTg5NjIsZS5ocGFyZW49OTM3OSxlLmhzdXBlcmlvcj02ODgsZS5odHVybmVkPTYxMyxlLmh1aGlyYWdhbmE9MTI0MDUsZS5odWlpdG9zcXVhcmU9MTMxMDcsZS5odWthdGFrYW5hPTEyNTAxLGUuaHVrYXRha2FuYWhhbGZ3aWR0aD02NTQyMCxlLmh1bmdhcnVtbGF1dD03MzMsZS5odW5nYXJ1bWxhdXRjbWI9Nzc5LGUuaHY9NDA1LGUuaHlwaGVuPTQ1LGUuaHlwaGVuaW5mZXJpb3I9NjMyMDUsZS5oeXBoZW5tb25vc3BhY2U9NjUyOTMsZS5oeXBoZW5zbWFsbD02NTEyMyxlLmh5cGhlbnN1cGVyaW9yPTYzMjA2LGUuaHlwaGVudHdvPTgyMDgsZS5pPTEwNSxlLmlhY3V0ZT0yMzcsZS5pYWN5cmlsbGljPTExMDMsZS5pYmVuZ2FsaT0yNDM5LGUuaWJvcG9tb2ZvPTEyNTgzLGUuaWJyZXZlPTMwMSxlLmljYXJvbj00NjQsZS5pY2lyY2xlPTk0MzIsZS5pY2lyY3VtZmxleD0yMzgsZS5pY3lyaWxsaWM9MTExMCxlLmlkYmxncmF2ZT01MjEsZS5pZGVvZ3JhcGhlYXJ0aGNpcmNsZT0xMjk0MyxlLmlkZW9ncmFwaGZpcmVjaXJjbGU9MTI5MzksZS5pZGVvZ3JhcGhpY2FsbGlhbmNlcGFyZW49MTI4NjMsZS5pZGVvZ3JhcGhpY2NhbGxwYXJlbj0xMjg1OCxlLmlkZW9ncmFwaGljY2VudHJlY2lyY2xlPTEyOTY1LGUuaWRlb2dyYXBoaWNjbG9zZT0xMjI5NCxlLmlkZW9ncmFwaGljY29tbWE9MTIyODksZS5pZGVvZ3JhcGhpY2NvbW1hbGVmdD02NTM4MCxlLmlkZW9ncmFwaGljY29uZ3JhdHVsYXRpb25wYXJlbj0xMjg1NSxlLmlkZW9ncmFwaGljY29ycmVjdGNpcmNsZT0xMjk2MyxlLmlkZW9ncmFwaGljZWFydGhwYXJlbj0xMjg0NyxlLmlkZW9ncmFwaGljZW50ZXJwcmlzZXBhcmVuPTEyODYxLGUuaWRlb2dyYXBoaWNleGNlbGxlbnRjaXJjbGU9MTI5NTcsZS5pZGVvZ3JhcGhpY2Zlc3RpdmFscGFyZW49MTI4NjQsZS5pZGVvZ3JhcGhpY2ZpbmFuY2lhbGNpcmNsZT0xMjk1MCxlLmlkZW9ncmFwaGljZmluYW5jaWFscGFyZW49MTI4NTQsZS5pZGVvZ3JhcGhpY2ZpcmVwYXJlbj0xMjg0MyxlLmlkZW9ncmFwaGljaGF2ZXBhcmVuPTEyODUwLGUuaWRlb2dyYXBoaWNoaWdoY2lyY2xlPTEyOTY0LGUuaWRlb2dyYXBoaWNpdGVyYXRpb25tYXJrPTEyMjkzLGUuaWRlb2dyYXBoaWNsYWJvcmNpcmNsZT0xMjk1MixlLmlkZW9ncmFwaGljbGFib3JwYXJlbj0xMjg1NixlLmlkZW9ncmFwaGljbGVmdGNpcmNsZT0xMjk2NyxlLmlkZW9ncmFwaGljbG93Y2lyY2xlPTEyOTY2LGUuaWRlb2dyYXBoaWNtZWRpY2luZWNpcmNsZT0xMjk2OSxlLmlkZW9ncmFwaGljbWV0YWxwYXJlbj0xMjg0NixlLmlkZW9ncmFwaGljbW9vbnBhcmVuPTEyODQyLGUuaWRlb2dyYXBoaWNuYW1lcGFyZW49MTI4NTIsZS5pZGVvZ3JhcGhpY3BlcmlvZD0xMjI5MCxlLmlkZW9ncmFwaGljcHJpbnRjaXJjbGU9MTI5NTgsZS5pZGVvZ3JhcGhpY3JlYWNocGFyZW49MTI4NjcsZS5pZGVvZ3JhcGhpY3JlcHJlc2VudHBhcmVuPTEyODU3LGUuaWRlb2dyYXBoaWNyZXNvdXJjZXBhcmVuPTEyODYyLGUuaWRlb2dyYXBoaWNyaWdodGNpcmNsZT0xMjk2OCxlLmlkZW9ncmFwaGljc2VjcmV0Y2lyY2xlPTEyOTUzLGUuaWRlb2dyYXBoaWNzZWxmcGFyZW49MTI4NjYsZS5pZGVvZ3JhcGhpY3NvY2lldHlwYXJlbj0xMjg1MSxlLmlkZW9ncmFwaGljc3BhY2U9MTIyODgsZS5pZGVvZ3JhcGhpY3NwZWNpYWxwYXJlbj0xMjg1MyxlLmlkZW9ncmFwaGljc3RvY2twYXJlbj0xMjg0OSxlLmlkZW9ncmFwaGljc3R1ZHlwYXJlbj0xMjg1OSxlLmlkZW9ncmFwaGljc3VucGFyZW49MTI4NDgsZS5pZGVvZ3JhcGhpY3N1cGVydmlzZXBhcmVuPTEyODYwLGUuaWRlb2dyYXBoaWN3YXRlcnBhcmVuPTEyODQ0LGUuaWRlb2dyYXBoaWN3b29kcGFyZW49MTI4NDUsZS5pZGVvZ3JhcGhpY3plcm89MTIyOTUsZS5pZGVvZ3JhcGhtZXRhbGNpcmNsZT0xMjk0MixlLmlkZW9ncmFwaG1vb25jaXJjbGU9MTI5MzgsZS5pZGVvZ3JhcGhuYW1lY2lyY2xlPTEyOTQ4LGUuaWRlb2dyYXBoc3VuY2lyY2xlPTEyOTQ0LGUuaWRlb2dyYXBod2F0ZXJjaXJjbGU9MTI5NDAsZS5pZGVvZ3JhcGh3b29kY2lyY2xlPTEyOTQxLGUuaWRldmE9MjMxMSxlLmlkaWVyZXNpcz0yMzksZS5pZGllcmVzaXNhY3V0ZT03NzI3LGUuaWRpZXJlc2lzY3lyaWxsaWM9MTI1MyxlLmlkb3RiZWxvdz03ODgzLGUuaWVicmV2ZWN5cmlsbGljPTEyMzksZS5pZWN5cmlsbGljPTEwNzcsZS5pZXVuZ2FjaXJjbGVrb3JlYW49MTI5MTcsZS5pZXVuZ2FwYXJlbmtvcmVhbj0xMjgyMSxlLmlldW5nY2lyY2xla29yZWFuPTEyOTAzLGUuaWV1bmdrb3JlYW49MTI2MTUsZS5pZXVuZ3BhcmVua29yZWFuPTEyODA3LGUuaWdyYXZlPTIzNixlLmlndWphcmF0aT0yNjk1LGUuaWd1cm11a2hpPTI1NjcsZS5paGlyYWdhbmE9MTIzNTYsZS5paG9va2Fib3ZlPTc4ODEsZS5paWJlbmdhbGk9MjQ0MCxlLmlpY3lyaWxsaWM9MTA4MCxlLmlpZGV2YT0yMzEyLGUuaWlndWphcmF0aT0yNjk2LGUuaWlndXJtdWtoaT0yNTY4LGUuaWltYXRyYWd1cm11a2hpPTI2MjQsZS5paW52ZXJ0ZWRicmV2ZT01MjMsZS5paXNob3J0Y3lyaWxsaWM9MTA4MSxlLmlpdm93ZWxzaWduYmVuZ2FsaT0yNDk2LGUuaWl2b3dlbHNpZ25kZXZhPTIzNjgsZS5paXZvd2Vsc2lnbmd1amFyYXRpPTI3NTIsZS5paj0zMDcsZS5pa2F0YWthbmE9MTI0NTIsZS5pa2F0YWthbmFoYWxmd2lkdGg9NjUzOTQsZS5pa29yZWFuPTEyNjQzLGUuaWxkZT03MzIsZS5pbHV5aGVicmV3PTE0NTIsZS5pbWFjcm9uPTI5OSxlLmltYWNyb25jeXJpbGxpYz0xMjUxLGUuaW1hZ2VvcmFwcHJveGltYXRlbHllcXVhbD04Nzg3LGUuaW1hdHJhZ3VybXVraGk9MjYyMyxlLmltb25vc3BhY2U9NjUzNTMsZS5pbmNyZW1lbnQ9ODcxMCxlLmluZmluaXR5PTg3MzQsZS5pbmlhcm1lbmlhbj0xMzg3LGUuaW50ZWdyYWw9ODc0NyxlLmludGVncmFsYm90dG9tPTg5OTMsZS5pbnRlZ3JhbGJ0PTg5OTMsZS5pbnRlZ3JhbGV4PTYzNzMzLGUuaW50ZWdyYWx0b3A9ODk5MixlLmludGVncmFsdHA9ODk5MixlLmludGVyc2VjdGlvbj04NzQ1LGUuaW50aXNxdWFyZT0xMzA2MSxlLmludmJ1bGxldD05Njg4LGUuaW52Y2lyY2xlPTk2ODksZS5pbnZzbWlsZWZhY2U9OTc4NyxlLmlvY3lyaWxsaWM9MTEwNSxlLmlvZ29uZWs9MzAzLGUuaW90YT05NTMsZS5pb3RhZGllcmVzaXM9OTcwLGUuaW90YWRpZXJlc2lzdG9ub3M9OTEyLGUuaW90YWxhdGluPTYxNyxlLmlvdGF0b25vcz05NDMsZS5pcGFyZW49OTM4MCxlLmlyaWd1cm11a2hpPTI2NzQsZS5pc21hbGxoaXJhZ2FuYT0xMjM1NSxlLmlzbWFsbGthdGFrYW5hPTEyNDUxLGUuaXNtYWxsa2F0YWthbmFoYWxmd2lkdGg9NjUzODQsZS5pc3NoYXJiZW5nYWxpPTI1NTQsZS5pc3Ryb2tlPTYxNixlLmlzdXBlcmlvcj02MzIxMyxlLml0ZXJhdGlvbmhpcmFnYW5hPTEyNDQ1LGUuaXRlcmF0aW9ua2F0YWthbmE9MTI1NDEsZS5pdGlsZGU9Mjk3LGUuaXRpbGRlYmVsb3c9NzcyNSxlLml1Ym9wb21vZm89MTI1ODUsZS5pdWN5cmlsbGljPTExMDIsZS5pdm93ZWxzaWduYmVuZ2FsaT0yNDk1LGUuaXZvd2Vsc2lnbmRldmE9MjM2NyxlLml2b3dlbHNpZ25ndWphcmF0aT0yNzUxLGUuaXpoaXRzYWN5cmlsbGljPTExNDEsZS5pemhpdHNhZGJsZ3JhdmVjeXJpbGxpYz0xMTQzLGUuaj0xMDYsZS5qYWFybWVuaWFuPTEzOTMsZS5qYWJlbmdhbGk9MjQ2MCxlLmphZGV2YT0yMzMyLGUuamFndWphcmF0aT0yNzE2LGUuamFndXJtdWtoaT0yNTg4LGUuamJvcG9tb2ZvPTEyNTYwLGUuamNhcm9uPTQ5NixlLmpjaXJjbGU9OTQzMyxlLmpjaXJjdW1mbGV4PTMwOSxlLmpjcm9zc2VkdGFpbD02NjksZS5qZG90bGVzc3N0cm9rZT02MDcsZS5qZWN5cmlsbGljPTExMTIsZS5qZWVtYXJhYmljPTE1ODAsZS5qZWVtZmluYWxhcmFiaWM9NjUxODIsZS5qZWVtaW5pdGlhbGFyYWJpYz02NTE4MyxlLmplZW1tZWRpYWxhcmFiaWM9NjUxODQsZS5qZWhhcmFiaWM9MTY4OCxlLmplaGZpbmFsYXJhYmljPTY0Mzk1LGUuamhhYmVuZ2FsaT0yNDYxLGUuamhhZGV2YT0yMzMzLGUuamhhZ3VqYXJhdGk9MjcxNyxlLmpoYWd1cm11a2hpPTI1ODksZS5qaGVoYXJtZW5pYW49MTQwMyxlLmppcz0xMjI5MixlLmptb25vc3BhY2U9NjUzNTQsZS5qcGFyZW49OTM4MSxlLmpzdXBlcmlvcj02OTAsZS5rPTEwNyxlLmthYmFzaGtpcmN5cmlsbGljPTExODUsZS5rYWJlbmdhbGk9MjQ1MyxlLmthY3V0ZT03NzI5LGUua2FjeXJpbGxpYz0xMDgyLGUua2FkZXNjZW5kZXJjeXJpbGxpYz0xMTc5LGUua2FkZXZhPTIzMjUsZS5rYWY9MTQ5OSxlLmthZmFyYWJpYz0xNjAzLGUua2FmZGFnZXNoPTY0MzE1LGUua2FmZGFnZXNoaGVicmV3PTY0MzE1LGUua2FmZmluYWxhcmFiaWM9NjUyNDIsZS5rYWZoZWJyZXc9MTQ5OSxlLmthZmluaXRpYWxhcmFiaWM9NjUyNDMsZS5rYWZtZWRpYWxhcmFiaWM9NjUyNDQsZS5rYWZyYWZlaGVicmV3PTY0MzMzLGUua2FndWphcmF0aT0yNzA5LGUua2FndXJtdWtoaT0yNTgxLGUua2FoaXJhZ2FuYT0xMjM2MyxlLmthaG9va2N5cmlsbGljPTEyMjAsZS5rYWthdGFrYW5hPTEyNDU5LGUua2FrYXRha2FuYWhhbGZ3aWR0aD02NTM5OCxlLmthcHBhPTk1NCxlLmthcHBhc3ltYm9sZ3JlZWs9MTAwOCxlLmthcHllb3VubWlldW1rb3JlYW49MTI2NTcsZS5rYXB5ZW91bnBoaWV1cGhrb3JlYW49MTI2NzYsZS5rYXB5ZW91bnBpZXVwa29yZWFuPTEyNjY0LGUua2FweWVvdW5zc2FuZ3BpZXVwa29yZWFuPTEyNjY1LGUua2Fyb3JpaXNxdWFyZT0xMzA2OSxlLmthc2hpZGFhdXRvYXJhYmljPTE2MDAsZS5rYXNoaWRhYXV0b25vc2lkZWJlYXJpbmdhcmFiaWM9MTYwMCxlLmthc21hbGxrYXRha2FuYT0xMjUzMyxlLmthc3F1YXJlPTEzMTg4LGUua2FzcmFhcmFiaWM9MTYxNixlLmthc3JhdGFuYXJhYmljPTE2MTMsZS5rYXN0cm9rZWN5cmlsbGljPTExODMsZS5rYXRhaGlyYXByb2xvbmdtYXJraGFsZndpZHRoPTY1MzkyLGUua2F2ZXJ0aWNhbHN0cm9rZWN5cmlsbGljPTExODEsZS5rYm9wb21vZm89MTI1NTgsZS5rY2Fsc3F1YXJlPTEzMTkzLGUua2Nhcm9uPTQ4OSxlLmtjZWRpbGxhPTMxMSxlLmtjaXJjbGU9OTQzNCxlLmtjb21tYWFjY2VudD0zMTEsZS5rZG90YmVsb3c9NzczMSxlLmtlaGFybWVuaWFuPTE0MTIsZS5rZWhpcmFnYW5hPTEyMzY5LGUua2VrYXRha2FuYT0xMjQ2NSxlLmtla2F0YWthbmFoYWxmd2lkdGg9NjU0MDEsZS5rZW5hcm1lbmlhbj0xMzkxLGUua2VzbWFsbGthdGFrYW5hPTEyNTM0LGUua2dyZWVubGFuZGljPTMxMixlLmtoYWJlbmdhbGk9MjQ1NCxlLmtoYWN5cmlsbGljPTEwOTMsZS5raGFkZXZhPTIzMjYsZS5raGFndWphcmF0aT0yNzEwLGUua2hhZ3VybXVraGk9MjU4MixlLmtoYWhhcmFiaWM9MTU4MixlLmtoYWhmaW5hbGFyYWJpYz02NTE5MCxlLmtoYWhpbml0aWFsYXJhYmljPTY1MTkxLGUua2hhaG1lZGlhbGFyYWJpYz02NTE5MixlLmtoZWljb3B0aWM9OTk5LGUua2hoYWRldmE9MjM5MyxlLmtoaGFndXJtdWtoaT0yNjQ5LGUua2hpZXVraGFjaXJjbGVrb3JlYW49MTI5MjAsZS5raGlldWtoYXBhcmVua29yZWFuPTEyODI0LGUua2hpZXVraGNpcmNsZWtvcmVhbj0xMjkwNixlLmtoaWV1a2hrb3JlYW49MTI2MTksZS5raGlldWtocGFyZW5rb3JlYW49MTI4MTAsZS5raG9raGFpdGhhaT0zNTg2LGUua2hva2hvbnRoYWk9MzU4OSxlLmtob2todWF0dGhhaT0zNTg3LGUua2hva2h3YWl0aGFpPTM1ODgsZS5raG9tdXR0aGFpPTM2NzUsZS5raG9vaz00MDksZS5raG9yYWtoYW5ndGhhaT0zNTkwLGUua2h6c3F1YXJlPTEzMjAxLGUua2loaXJhZ2FuYT0xMjM2NSxlLmtpa2F0YWthbmE9MTI0NjEsZS5raWthdGFrYW5haGFsZndpZHRoPTY1Mzk5LGUua2lyb2d1cmFtdXNxdWFyZT0xMzA3NyxlLmtpcm9tZWV0b3J1c3F1YXJlPTEzMDc4LGUua2lyb3NxdWFyZT0xMzA3NixlLmtpeWVva2FjaXJjbGVrb3JlYW49MTI5MTAsZS5raXllb2thcGFyZW5rb3JlYW49MTI4MTQsZS5raXllb2tjaXJjbGVrb3JlYW49MTI4OTYsZS5raXllb2trb3JlYW49MTI1OTMsZS5raXllb2twYXJlbmtvcmVhbj0xMjgwMCxlLmtpeWVva3Npb3Nrb3JlYW49MTI1OTU7ZS5ramVjeXJpbGxpYz0xMTE2LGUua2xpbmViZWxvdz03NzMzLGUua2xzcXVhcmU9MTMyMDgsZS5rbWN1YmVkc3F1YXJlPTEzMjIyLGUua21vbm9zcGFjZT02NTM1NSxlLmttc3F1YXJlZHNxdWFyZT0xMzIxOCxlLmtvaGlyYWdhbmE9MTIzNzEsZS5rb2htc3F1YXJlPTEzMjQ4LGUua29rYWl0aGFpPTM1ODUsZS5rb2thdGFrYW5hPTEyNDY3LGUua29rYXRha2FuYWhhbGZ3aWR0aD02NTQwMixlLmtvb3Bvc3F1YXJlPTEzMDg2LGUua29wcGFjeXJpbGxpYz0xMTUzLGUua29yZWFuc3RhbmRhcmRzeW1ib2w9MTI5MjcsZS5rb3JvbmlzY21iPTgzNSxlLmtwYXJlbj05MzgyLGUua3Bhc3F1YXJlPTEzMjI2LGUua3NpY3lyaWxsaWM9MTEzNSxlLmt0c3F1YXJlPTEzMjYzLGUua3R1cm5lZD02NzAsZS5rdWhpcmFnYW5hPTEyMzY3LGUua3VrYXRha2FuYT0xMjQ2MyxlLmt1a2F0YWthbmFoYWxmd2lkdGg9NjU0MDAsZS5rdnNxdWFyZT0xMzI0MCxlLmt3c3F1YXJlPTEzMjQ2LGUubD0xMDgsZS5sYWJlbmdhbGk9MjQ4MixlLmxhY3V0ZT0zMTQsZS5sYWRldmE9MjM1NCxlLmxhZ3VqYXJhdGk9MjczOCxlLmxhZ3VybXVraGk9MjYxMCxlLmxha2toYW5neWFvdGhhaT0zNjUzLGUubGFtYWxlZmZpbmFsYXJhYmljPTY1Mjc2LGUubGFtYWxlZmhhbXphYWJvdmVmaW5hbGFyYWJpYz02NTI3MixlLmxhbWFsZWZoYW16YWFib3ZlaXNvbGF0ZWRhcmFiaWM9NjUyNzEsZS5sYW1hbGVmaGFtemFiZWxvd2ZpbmFsYXJhYmljPTY1Mjc0LGUubGFtYWxlZmhhbXphYmVsb3dpc29sYXRlZGFyYWJpYz02NTI3MyxlLmxhbWFsZWZpc29sYXRlZGFyYWJpYz02NTI3NSxlLmxhbWFsZWZtYWRkYWFib3ZlZmluYWxhcmFiaWM9NjUyNzAsZS5sYW1hbGVmbWFkZGFhYm92ZWlzb2xhdGVkYXJhYmljPTY1MjY5LGUubGFtYXJhYmljPTE2MDQsZS5sYW1iZGE9OTU1LGUubGFtYmRhc3Ryb2tlPTQxMSxlLmxhbWVkPTE1MDAsZS5sYW1lZGRhZ2VzaD02NDMxNixlLmxhbWVkZGFnZXNoaGVicmV3PTY0MzE2LGUubGFtZWRoZWJyZXc9MTUwMCxlLmxhbWZpbmFsYXJhYmljPTY1MjQ2LGUubGFtaGFoaW5pdGlhbGFyYWJpYz02NDcxNCxlLmxhbWluaXRpYWxhcmFiaWM9NjUyNDcsZS5sYW1qZWVtaW5pdGlhbGFyYWJpYz02NDcxMyxlLmxhbWtoYWhpbml0aWFsYXJhYmljPTY0NzE1LGUubGFtbGFtaGVoaXNvbGF0ZWRhcmFiaWM9NjUwMTAsZS5sYW1tZWRpYWxhcmFiaWM9NjUyNDgsZS5sYW1tZWVtaGFoaW5pdGlhbGFyYWJpYz02NDkwNCxlLmxhbW1lZW1pbml0aWFsYXJhYmljPTY0NzE2LGUubGFyZ2VjaXJjbGU9OTcxMSxlLmxiYXI9NDEwLGUubGJlbHQ9NjIwLGUubGJvcG9tb2ZvPTEyNTU2LGUubGNhcm9uPTMxOCxlLmxjZWRpbGxhPTMxNixlLmxjaXJjbGU9OTQzNSxlLmxjaXJjdW1mbGV4YmVsb3c9Nzc0MSxlLmxjb21tYWFjY2VudD0zMTYsZS5sZG90PTMyMCxlLmxkb3RhY2NlbnQ9MzIwLGUubGRvdGJlbG93PTc3MzUsZS5sZG90YmVsb3dtYWNyb249NzczNyxlLmxlZnRhbmdsZWFib3ZlY21iPTc5NCxlLmxlZnR0YWNrYmVsb3djbWI9NzkyLGUubGVzcz02MCxlLmxlc3NlcXVhbD04ODA0LGUubGVzc2VxdWFsb3JncmVhdGVyPTg5MjIsZS5sZXNzbW9ub3NwYWNlPTY1MzA4LGUubGVzc29yZXF1aXZhbGVudD04ODE4LGUubGVzc29yZ3JlYXRlcj04ODIyLGUubGVzc292ZXJlcXVhbD04ODA2LGUubGVzc3NtYWxsPTY1MTI0LGUubGV6aD02MjIsZS5sZmJsb2NrPTk2MTIsZS5saG9va3JldHJvZmxleD02MjEsZS5saXJhPTgzNTYsZS5saXduYXJtZW5pYW49MTM4OCxlLmxqPTQ1NyxlLmxqZWN5cmlsbGljPTExMTMsZS5sbD02MzE2OCxlLmxsYWRldmE9MjM1NSxlLmxsYWd1amFyYXRpPTI3MzksZS5sbGluZWJlbG93PTc3MzksZS5sbGxhZGV2YT0yMzU2LGUubGx2b2NhbGljYmVuZ2FsaT0yNTI5LGUubGx2b2NhbGljZGV2YT0yNDAxLGUubGx2b2NhbGljdm93ZWxzaWduYmVuZ2FsaT0yNTMxLGUubGx2b2NhbGljdm93ZWxzaWduZGV2YT0yNDAzLGUubG1pZGRsZXRpbGRlPTYxOSxlLmxtb25vc3BhY2U9NjUzNTYsZS5sbXNxdWFyZT0xMzI2NCxlLmxvY2h1bGF0aGFpPTM2MjgsZS5sb2dpY2FsYW5kPTg3NDMsZS5sb2dpY2Fsbm90PTE3MixlLmxvZ2ljYWxub3RyZXZlcnNlZD04OTc2LGUubG9naWNhbG9yPTg3NDQsZS5sb2xpbmd0aGFpPTM2MjEsZS5sb25ncz0zODMsZS5sb3dsaW5lY2VudGVybGluZT02NTEwMixlLmxvd2xpbmVjbWI9ODE4LGUubG93bGluZWRhc2hlZD02NTEwMSxlLmxvemVuZ2U9OTY3NCxlLmxwYXJlbj05MzgzLGUubHNsYXNoPTMyMixlLmxzcXVhcmU9ODQ2NyxlLmxzdXBlcmlvcj02MzIxNCxlLmx0c2hhZGU9OTYxNyxlLmx1dGhhaT0zNjIyLGUubHZvY2FsaWNiZW5nYWxpPTI0NDQsZS5sdm9jYWxpY2RldmE9MjMxNixlLmx2b2NhbGljdm93ZWxzaWduYmVuZ2FsaT0yNTMwLGUubHZvY2FsaWN2b3dlbHNpZ25kZXZhPTI0MDIsZS5seHNxdWFyZT0xMzI2NyxlLm09MTA5LGUubWFiZW5nYWxpPTI0NzgsZS5tYWNyb249MTc1LGUubWFjcm9uYmVsb3djbWI9ODE3LGUubWFjcm9uY21iPTc3MixlLm1hY3Jvbmxvd21vZD03MTcsZS5tYWNyb25tb25vc3BhY2U9NjU1MDcsZS5tYWN1dGU9Nzc0MyxlLm1hZGV2YT0yMzUwLGUubWFndWphcmF0aT0yNzM0LGUubWFndXJtdWtoaT0yNjA2LGUubWFoYXBha2hoZWJyZXc9MTQ0NCxlLm1haGFwYWtobGVmdGhlYnJldz0xNDQ0LGUubWFoaXJhZ2FuYT0xMjQxNCxlLm1haWNoYXR0YXdhbG93bGVmdHRoYWk9NjM2MzcsZS5tYWljaGF0dGF3YWxvd3JpZ2h0dGhhaT02MzYzNixlLm1haWNoYXR0YXdhdGhhaT0zNjU5LGUubWFpY2hhdHRhd2F1cHBlcmxlZnR0aGFpPTYzNjM1LGUubWFpZWtsb3dsZWZ0dGhhaT02MzYyOCxlLm1haWVrbG93cmlnaHR0aGFpPTYzNjI3LGUubWFpZWt0aGFpPTM2NTYsZS5tYWlla3VwcGVybGVmdHRoYWk9NjM2MjYsZS5tYWloYW5ha2F0bGVmdHRoYWk9NjM2MjAsZS5tYWloYW5ha2F0dGhhaT0zNjMzLGUubWFpdGFpa2h1bGVmdHRoYWk9NjM2MjUsZS5tYWl0YWlraHV0aGFpPTM2NTUsZS5tYWl0aG9sb3dsZWZ0dGhhaT02MzYzMSxlLm1haXRob2xvd3JpZ2h0dGhhaT02MzYzMCxlLm1haXRob3RoYWk9MzY1NyxlLm1haXRob3VwcGVybGVmdHRoYWk9NjM2MjksZS5tYWl0cmlsb3dsZWZ0dGhhaT02MzYzNCxlLm1haXRyaWxvd3JpZ2h0dGhhaT02MzYzMyxlLm1haXRyaXRoYWk9MzY1OCxlLm1haXRyaXVwcGVybGVmdHRoYWk9NjM2MzIsZS5tYWl5YW1va3RoYWk9MzY1NCxlLm1ha2F0YWthbmE9MTI1MTAsZS5tYWthdGFrYW5haGFsZndpZHRoPTY1NDIzLGUubWFsZT05Nzk0LGUubWFuc3lvbnNxdWFyZT0xMzEyNyxlLm1hcWFmaGVicmV3PTE0NzAsZS5tYXJzPTk3OTQsZS5tYXNvcmFjaXJjbGVoZWJyZXc9MTQ1NSxlLm1hc3F1YXJlPTEzMTg3LGUubWJvcG9tb2ZvPTEyNTUxLGUubWJzcXVhcmU9MTMyNjgsZS5tY2lyY2xlPTk0MzYsZS5tY3ViZWRzcXVhcmU9MTMyMjEsZS5tZG90YWNjZW50PTc3NDUsZS5tZG90YmVsb3c9Nzc0NyxlLm1lZW1hcmFiaWM9MTYwNSxlLm1lZW1maW5hbGFyYWJpYz02NTI1MCxlLm1lZW1pbml0aWFsYXJhYmljPTY1MjUxLGUubWVlbW1lZGlhbGFyYWJpYz02NTI1MixlLm1lZW1tZWVtaW5pdGlhbGFyYWJpYz02NDcyMSxlLm1lZW1tZWVtaXNvbGF0ZWRhcmFiaWM9NjQ1ODQsZS5tZWV0b3J1c3F1YXJlPTEzMTMzLGUubWVoaXJhZ2FuYT0xMjQxNyxlLm1laXppZXJhc3F1YXJlPTEzMTgyLGUubWVrYXRha2FuYT0xMjUxMyxlLm1la2F0YWthbmFoYWxmd2lkdGg9NjU0MjYsZS5tZW09MTUwMixlLm1lbWRhZ2VzaD02NDMxOCxlLm1lbWRhZ2VzaGhlYnJldz02NDMxOCxlLm1lbWhlYnJldz0xNTAyLGUubWVuYXJtZW5pYW49MTM5NixlLm1lcmtoYWhlYnJldz0xNDQ1LGUubWVya2hha2VmdWxhaGVicmV3PTE0NDYsZS5tZXJraGFrZWZ1bGFsZWZ0aGVicmV3PTE0NDYsZS5tZXJraGFsZWZ0aGVicmV3PTE0NDUsZS5taG9vaz02MjUsZS5taHpzcXVhcmU9MTMyMDIsZS5taWRkbGVkb3RrYXRha2FuYWhhbGZ3aWR0aD02NTM4MSxlLm1pZGRvdD0xODMsZS5taWV1bWFjaXJjbGVrb3JlYW49MTI5MTQsZS5taWV1bWFwYXJlbmtvcmVhbj0xMjgxOCxlLm1pZXVtY2lyY2xla29yZWFuPTEyOTAwLGUubWlldW1rb3JlYW49MTI2MDksZS5taWV1bXBhbnNpb3Nrb3JlYW49MTI2NTYsZS5taWV1bXBhcmVua29yZWFuPTEyODA0LGUubWlldW1waWV1cGtvcmVhbj0xMjY1NCxlLm1pZXVtc2lvc2tvcmVhbj0xMjY1NSxlLm1paGlyYWdhbmE9MTI0MTUsZS5taWthdGFrYW5hPTEyNTExLGUubWlrYXRha2FuYWhhbGZ3aWR0aD02NTQyNCxlLm1pbnVzPTg3MjIsZS5taW51c2JlbG93Y21iPTgwMCxlLm1pbnVzY2lyY2xlPTg4NTQsZS5taW51c21vZD03MjcsZS5taW51c3BsdXM9ODcyMyxlLm1pbnV0ZT04MjQyLGUubWlyaWJhYXJ1c3F1YXJlPTEzMTMwLGUubWlyaXNxdWFyZT0xMzEyOSxlLm1sb25nbGVndHVybmVkPTYyNCxlLm1sc3F1YXJlPTEzMjA2LGUubW1jdWJlZHNxdWFyZT0xMzIxOSxlLm1tb25vc3BhY2U9NjUzNTcsZS5tbXNxdWFyZWRzcXVhcmU9MTMyMTUsZS5tb2hpcmFnYW5hPTEyNDE4LGUubW9obXNxdWFyZT0xMzI0OSxlLm1va2F0YWthbmE9MTI1MTQsZS5tb2thdGFrYW5haGFsZndpZHRoPTY1NDI3LGUubW9sc3F1YXJlPTEzMjcwLGUubW9tYXRoYWk9MzYxNyxlLm1vdmVyc3NxdWFyZT0xMzIyMyxlLm1vdmVyc3NxdWFyZWRzcXVhcmU9MTMyMjQsZS5tcGFyZW49OTM4NCxlLm1wYXNxdWFyZT0xMzIyNyxlLm1zc3F1YXJlPTEzMjM1LGUubXN1cGVyaW9yPTYzMjE1LGUubXR1cm5lZD02MjMsZS5tdT0xODEsZS5tdTE9MTgxLGUubXVhc3F1YXJlPTEzMTg2LGUubXVjaGdyZWF0ZXI9ODgxMSxlLm11Y2hsZXNzPTg4MTAsZS5tdWZzcXVhcmU9MTMxOTYsZS5tdWdyZWVrPTk1NixlLm11Z3NxdWFyZT0xMzE5NyxlLm11aGlyYWdhbmE9MTI0MTYsZS5tdWthdGFrYW5hPTEyNTEyLGUubXVrYXRha2FuYWhhbGZ3aWR0aD02NTQyNSxlLm11bHNxdWFyZT0xMzIwNSxlLm11bHRpcGx5PTIxNSxlLm11bXNxdWFyZT0xMzIxMSxlLm11bmFoaGVicmV3PTE0NDMsZS5tdW5haGxlZnRoZWJyZXc9MTQ0MyxlLm11c2ljYWxub3RlPTk4MzQsZS5tdXNpY2Fsbm90ZWRibD05ODM1LGUubXVzaWNmbGF0c2lnbj05ODM3LGUubXVzaWNzaGFycHNpZ249OTgzOSxlLm11c3NxdWFyZT0xMzIzNCxlLm11dnNxdWFyZT0xMzIzOCxlLm11d3NxdWFyZT0xMzI0NCxlLm12bWVnYXNxdWFyZT0xMzI0MSxlLm12c3F1YXJlPTEzMjM5LGUubXdtZWdhc3F1YXJlPTEzMjQ3LGUubXdzcXVhcmU9MTMyNDUsZS5uPTExMCxlLm5hYmVuZ2FsaT0yNDcyLGUubmFibGE9ODcxMSxlLm5hY3V0ZT0zMjQsZS5uYWRldmE9MjM0NCxlLm5hZ3VqYXJhdGk9MjcyOCxlLm5hZ3VybXVraGk9MjYwMCxlLm5haGlyYWdhbmE9MTIzOTQsZS5uYWthdGFrYW5hPTEyNDkwLGUubmFrYXRha2FuYWhhbGZ3aWR0aD02NTQxMyxlLm5hcG9zdHJvcGhlPTMyOSxlLm5hc3F1YXJlPTEzMTg1LGUubmJvcG9tb2ZvPTEyNTU1LGUubmJzcGFjZT0xNjAsZS5uY2Fyb249MzI4LGUubmNlZGlsbGE9MzI2LGUubmNpcmNsZT05NDM3LGUubmNpcmN1bWZsZXhiZWxvdz03NzU1LGUubmNvbW1hYWNjZW50PTMyNixlLm5kb3RhY2NlbnQ9Nzc0OSxlLm5kb3RiZWxvdz03NzUxLGUubmVoaXJhZ2FuYT0xMjM5NyxlLm5la2F0YWthbmE9MTI0OTMsZS5uZWthdGFrYW5haGFsZndpZHRoPTY1NDE2LGUubmV3c2hlcWVsc2lnbj04MzYyLGUubmZzcXVhcmU9MTMxOTUsZS5uZ2FiZW5nYWxpPTI0NTcsZS5uZ2FkZXZhPTIzMjksZS5uZ2FndWphcmF0aT0yNzEzLGUubmdhZ3VybXVraGk9MjU4NSxlLm5nb25ndXRoYWk9MzU5MSxlLm5oaXJhZ2FuYT0xMjQzNSxlLm5ob29rbGVmdD02MjYsZS5uaG9va3JldHJvZmxleD02MjcsZS5uaWV1bmFjaXJjbGVrb3JlYW49MTI5MTEsZS5uaWV1bmFwYXJlbmtvcmVhbj0xMjgxNSxlLm5pZXVuY2lldWNrb3JlYW49MTI1OTcsZS5uaWV1bmNpcmNsZWtvcmVhbj0xMjg5NyxlLm5pZXVuaGlldWhrb3JlYW49MTI1OTgsZS5uaWV1bmtvcmVhbj0xMjU5NixlLm5pZXVucGFuc2lvc2tvcmVhbj0xMjY0OCxlLm5pZXVucGFyZW5rb3JlYW49MTI4MDEsZS5uaWV1bnNpb3Nrb3JlYW49MTI2NDcsZS5uaWV1bnRpa2V1dGtvcmVhbj0xMjY0NixlLm5paGlyYWdhbmE9MTIzOTUsZS5uaWthdGFrYW5hPTEyNDkxLGUubmlrYXRha2FuYWhhbGZ3aWR0aD02NTQxNCxlLm5pa2hhaGl0bGVmdHRoYWk9NjM2NDEsZS5uaWtoYWhpdHRoYWk9MzY2MSxlLm5pbmU9NTcsZS5uaW5lYXJhYmljPTE2NDEsZS5uaW5lYmVuZ2FsaT0yNTQzLGUubmluZWNpcmNsZT05MzIwLGUubmluZWNpcmNsZWludmVyc2VzYW5zc2VyaWY9MTAxMzAsZS5uaW5lZGV2YT0yNDE1LGUubmluZWd1amFyYXRpPTI3OTksZS5uaW5lZ3VybXVraGk9MjY3MSxlLm5pbmVoYWNrYXJhYmljPTE2NDEsZS5uaW5laGFuZ3pob3U9MTIzMjksZS5uaW5laWRlb2dyYXBoaWNwYXJlbj0xMjg0MCxlLm5pbmVpbmZlcmlvcj04MzI5LGUubmluZW1vbm9zcGFjZT02NTMwNSxlLm5pbmVvbGRzdHlsZT02MzI4OSxlLm5pbmVwYXJlbj05MzQwLGUubmluZXBlcmlvZD05MzYwLGUubmluZXBlcnNpYW49MTc4NSxlLm5pbmVyb21hbj04NTY4LGUubmluZXN1cGVyaW9yPTgzMTMsZS5uaW5ldGVlbmNpcmNsZT05MzMwLGUubmluZXRlZW5wYXJlbj05MzUwLGUubmluZXRlZW5wZXJpb2Q9OTM3MCxlLm5pbmV0aGFpPTM2NzMsZS5uaj00NjAsZS5uamVjeXJpbGxpYz0xMTE0LGUubmthdGFrYW5hPTEyNTMxLGUubmthdGFrYW5haGFsZndpZHRoPTY1NDM3LGUubmxlZ3JpZ2h0bG9uZz00MTQsZS5ubGluZWJlbG93PTc3NTMsZS5ubW9ub3NwYWNlPTY1MzU4LGUubm1zcXVhcmU9MTMyMTAsZS5ubmFiZW5nYWxpPTI0NjcsZS5ubmFkZXZhPTIzMzksZS5ubmFndWphcmF0aT0yNzIzLGUubm5hZ3VybXVraGk9MjU5NSxlLm5ubmFkZXZhPTIzNDUsZS5ub2hpcmFnYW5hPTEyMzk4LGUubm9rYXRha2FuYT0xMjQ5NCxlLm5va2F0YWthbmFoYWxmd2lkdGg9NjU0MTcsZS5ub25icmVha2luZ3NwYWNlPTE2MCxlLm5vbmVudGhhaT0zNjAzLGUubm9udXRoYWk9MzYwOSxlLm5vb25hcmFiaWM9MTYwNixlLm5vb25maW5hbGFyYWJpYz02NTI1NCxlLm5vb25naHVubmFhcmFiaWM9MTcyMixlLm5vb25naHVubmFmaW5hbGFyYWJpYz02NDQxNSxlLm5vb25pbml0aWFsYXJhYmljPTY1MjU1LGUubm9vbmplZW1pbml0aWFsYXJhYmljPTY0NzIyLGUubm9vbmplZW1pc29sYXRlZGFyYWJpYz02NDU4NyxlLm5vb25tZWRpYWxhcmFiaWM9NjUyNTYsZS5ub29ubWVlbWluaXRpYWxhcmFiaWM9NjQ3MjUsZS5ub29ubWVlbWlzb2xhdGVkYXJhYmljPTY0NTkwLGUubm9vbm5vb25maW5hbGFyYWJpYz02NDY1MyxlLm5vdGNvbnRhaW5zPTg3MTYsZS5ub3RlbGVtZW50PTg3MTMsZS5ub3RlbGVtZW50b2Y9ODcxMyxlLm5vdGVxdWFsPTg4MDAsZS5ub3RncmVhdGVyPTg4MTUsZS5ub3RncmVhdGVybm9yZXF1YWw9ODgxNyxlLm5vdGdyZWF0ZXJub3JsZXNzPTg4MjUsZS5ub3RpZGVudGljYWw9ODgwMixlLm5vdGxlc3M9ODgxNCxlLm5vdGxlc3Nub3JlcXVhbD04ODE2LGUubm90cGFyYWxsZWw9ODc0MixlLm5vdHByZWNlZGVzPTg4MzIsZS5ub3RzdWJzZXQ9ODgzNixlLm5vdHN1Y2NlZWRzPTg4MzMsZS5ub3RzdXBlcnNldD04ODM3LGUubm93YXJtZW5pYW49MTM5OCxlLm5wYXJlbj05Mzg1LGUubnNzcXVhcmU9MTMyMzMsZS5uc3VwZXJpb3I9ODMxOSxlLm50aWxkZT0yNDEsZS5udT05NTcsZS5udWhpcmFnYW5hPTEyMzk2LGUubnVrYXRha2FuYT0xMjQ5MixlLm51a2F0YWthbmFoYWxmd2lkdGg9NjU0MTUsZS5udWt0YWJlbmdhbGk9MjQ5MixlLm51a3RhZGV2YT0yMzY0LGUubnVrdGFndWphcmF0aT0yNzQ4LGUubnVrdGFndXJtdWtoaT0yNjIwLGUubnVtYmVyc2lnbj0zNSxlLm51bWJlcnNpZ25tb25vc3BhY2U9NjUyODMsZS5udW1iZXJzaWduc21hbGw9NjUxMTksZS5udW1lcmFsc2lnbmdyZWVrPTg4NCxlLm51bWVyYWxzaWdubG93ZXJncmVlaz04ODUsZS5udW1lcm89ODQ3MCxlLm51bj0xNTA0LGUubnVuZGFnZXNoPTY0MzIwLGUubnVuZGFnZXNoaGVicmV3PTY0MzIwLGUubnVuaGVicmV3PTE1MDQsZS5udnNxdWFyZT0xMzIzNyxlLm53c3F1YXJlPTEzMjQzLGUubnlhYmVuZ2FsaT0yNDYyLGUubnlhZGV2YT0yMzM0LGUubnlhZ3VqYXJhdGk9MjcxOCxlLm55YWd1cm11a2hpPTI1OTAsZS5vPTExMSxlLm9hY3V0ZT0yNDMsZS5vYW5ndGhhaT0zNjI5LGUub2JhcnJlZD02MjksZS5vYmFycmVkY3lyaWxsaWM9MTI1NyxlLm9iYXJyZWRkaWVyZXNpc2N5cmlsbGljPTEyNTksZS5vYmVuZ2FsaT0yNDUxLGUub2JvcG9tb2ZvPTEyNTcxLGUub2JyZXZlPTMzNSxlLm9jYW5kcmFkZXZhPTIzMjEsZS5vY2FuZHJhZ3VqYXJhdGk9MjcwNSxlLm9jYW5kcmF2b3dlbHNpZ25kZXZhPTIzNzcsZS5vY2FuZHJhdm93ZWxzaWduZ3VqYXJhdGk9Mjc2MSxlLm9jYXJvbj00NjYsZS5vY2lyY2xlPTk0MzgsZS5vY2lyY3VtZmxleD0yNDQsZS5vY2lyY3VtZmxleGFjdXRlPTc4ODksZS5vY2lyY3VtZmxleGRvdGJlbG93PTc4OTcsZS5vY2lyY3VtZmxleGdyYXZlPTc4OTEsZS5vY2lyY3VtZmxleGhvb2thYm92ZT03ODkzLGUub2NpcmN1bWZsZXh0aWxkZT03ODk1LGUub2N5cmlsbGljPTEwODYsZS5vZGJsYWN1dGU9MzM3LGUub2RibGdyYXZlPTUyNSxlLm9kZXZhPTIzMjMsZS5vZGllcmVzaXM9MjQ2LGUub2RpZXJlc2lzY3lyaWxsaWM9MTI1NSxlLm9kb3RiZWxvdz03ODg1LGUub2U9MzM5LGUub2Vrb3JlYW49MTI2MzQsZS5vZ29uZWs9NzMxLGUub2dvbmVrY21iPTgwOCxlLm9ncmF2ZT0yNDIsZS5vZ3VqYXJhdGk9MjcwNyxlLm9oYXJtZW5pYW49MTQxMyxlLm9oaXJhZ2FuYT0xMjM2MixlLm9ob29rYWJvdmU9Nzg4NyxlLm9ob3JuPTQxNyxlLm9ob3JuYWN1dGU9Nzg5OSxlLm9ob3JuZG90YmVsb3c9NzkwNyxlLm9ob3JuZ3JhdmU9NzkwMSxlLm9ob3JuaG9va2Fib3ZlPTc5MDMsZS5vaG9ybnRpbGRlPTc5MDUsZS5vaHVuZ2FydW1sYXV0PTMzNyxlLm9pPTQxOSxlLm9pbnZlcnRlZGJyZXZlPTUyNyxlLm9rYXRha2FuYT0xMjQ1OCxlLm9rYXRha2FuYWhhbGZ3aWR0aD02NTM5NyxlLm9rb3JlYW49MTI2MzEsZS5vbGVoZWJyZXc9MTQ1MSxlLm9tYWNyb249MzMzLGUub21hY3JvbmFjdXRlPTc3NjMsZS5vbWFjcm9uZ3JhdmU9Nzc2MSxlLm9tZGV2YT0yMzg0LGUub21lZ2E9OTY5LGUub21lZ2ExPTk4MixlLm9tZWdhY3lyaWxsaWM9MTEyMSxlLm9tZWdhbGF0aW5jbG9zZWQ9NjMxLGUub21lZ2Fyb3VuZGN5cmlsbGljPTExNDcsZS5vbWVnYXRpdGxvY3lyaWxsaWM9MTE0OSxlLm9tZWdhdG9ub3M9OTc0LGUub21ndWphcmF0aT0yNzY4LGUub21pY3Jvbj05NTksZS5vbWljcm9udG9ub3M9OTcyLGUub21vbm9zcGFjZT02NTM1OSxlLm9uZT00OSxlLm9uZWFyYWJpYz0xNjMzLGUub25lYmVuZ2FsaT0yNTM1LGUub25lY2lyY2xlPTkzMTIsZS5vbmVjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmPTEwMTIyLGUub25lZGV2YT0yNDA3LGUub25lZG90ZW5sZWFkZXI9ODIyOCxlLm9uZWVpZ2h0aD04NTM5LGUub25lZml0dGVkPTYzMTk2LGUub25lZ3VqYXJhdGk9Mjc5MSxlLm9uZWd1cm11a2hpPTI2NjMsZS5vbmVoYWNrYXJhYmljPTE2MzMsZS5vbmVoYWxmPTE4OSxlLm9uZWhhbmd6aG91PTEyMzIxLGUub25laWRlb2dyYXBoaWNwYXJlbj0xMjgzMixlLm9uZWluZmVyaW9yPTgzMjEsZS5vbmVtb25vc3BhY2U9NjUyOTcsZS5vbmVudW1lcmF0b3JiZW5nYWxpPTI1NDgsZS5vbmVvbGRzdHlsZT02MzI4MSxlLm9uZXBhcmVuPTkzMzIsZS5vbmVwZXJpb2Q9OTM1MixlLm9uZXBlcnNpYW49MTc3NyxlLm9uZXF1YXJ0ZXI9MTg4LGUub25lcm9tYW49ODU2MCxlLm9uZXN1cGVyaW9yPTE4NSxlLm9uZXRoYWk9MzY2NSxlLm9uZXRoaXJkPTg1MzEsZS5vb2dvbmVrPTQ5MSxlLm9vZ29uZWttYWNyb249NDkzLGUub29ndXJtdWtoaT0yNTc5LGUub29tYXRyYWd1cm11a2hpPTI2MzUsZS5vb3Blbj01OTYsZS5vcGFyZW49OTM4NixlLm9wZW5idWxsZXQ9OTcwMixlLm9wdGlvbj04OTk3LGUub3JkZmVtaW5pbmU9MTcwLGUub3JkbWFzY3VsaW5lPTE4NixlLm9ydGhvZ29uYWw9ODczNSxlLm9zaG9ydGRldmE9MjMyMixlLm9zaG9ydHZvd2Vsc2lnbmRldmE9MjM3OCxlLm9zbGFzaD0yNDgsZS5vc2xhc2hhY3V0ZT01MTEsZS5vc21hbGxoaXJhZ2FuYT0xMjM2MSxlLm9zbWFsbGthdGFrYW5hPTEyNDU3LGUub3NtYWxsa2F0YWthbmFoYWxmd2lkdGg9NjUzODcsZS5vc3Ryb2tlYWN1dGU9NTExLGUub3N1cGVyaW9yPTYzMjE2LGUub3RjeXJpbGxpYz0xMTUxLGUub3RpbGRlPTI0NSxlLm90aWxkZWFjdXRlPTc3NTcsZS5vdGlsZGVkaWVyZXNpcz03NzU5LGUub3Vib3BvbW9mbz0xMjU3NyxlLm92ZXJsaW5lPTgyNTQsZS5vdmVybGluZWNlbnRlcmxpbmU9NjUwOTgsZS5vdmVybGluZWNtYj03NzMsZS5vdmVybGluZWRhc2hlZD02NTA5NyxlLm92ZXJsaW5lZGJsd2F2eT02NTEwMCxlLm92ZXJsaW5ld2F2eT02NTA5OSxlLm92ZXJzY29yZT0xNzUsZS5vdm93ZWxzaWduYmVuZ2FsaT0yNTA3LGUub3Zvd2Vsc2lnbmRldmE9MjM3OSxlLm92b3dlbHNpZ25ndWphcmF0aT0yNzYzLGUucD0xMTIsZS5wYWFtcHNzcXVhcmU9MTMxODQsZS5wYWFzZW50b3NxdWFyZT0xMzA5OSxlLnBhYmVuZ2FsaT0yNDc0LGUucGFjdXRlPTc3NjUsZS5wYWRldmE9MjM0NixlLnBhZ2Vkb3duPTg2NzEsZS5wYWdldXA9ODY3MCxlLnBhZ3VqYXJhdGk9MjczMCxlLnBhZ3VybXVraGk9MjYwMixlLnBhaGlyYWdhbmE9MTI0MDEsZS5wYWl5YW5ub2l0aGFpPTM2MzEsZS5wYWthdGFrYW5hPTEyNDk3LGUucGFsYXRhbGl6YXRpb25jeXJpbGxpY2NtYj0xMTU2LGUucGFsb2Noa2FjeXJpbGxpYz0xMjE2LGUucGFuc2lvc2tvcmVhbj0xMjY3MSxlLnBhcmFncmFwaD0xODIsZS5wYXJhbGxlbD04NzQxLGUucGFyZW5sZWZ0PTQwLGUucGFyZW5sZWZ0YWx0b25lYXJhYmljPTY0ODMwLGUucGFyZW5sZWZ0YnQ9NjM3MjUsZS5wYXJlbmxlZnRleD02MzcyNCxlLnBhcmVubGVmdGluZmVyaW9yPTgzMzMsZS5wYXJlbmxlZnRtb25vc3BhY2U9NjUyODgsZS5wYXJlbmxlZnRzbWFsbD02NTExMyxlLnBhcmVubGVmdHN1cGVyaW9yPTgzMTcsZS5wYXJlbmxlZnR0cD02MzcyMyxlLnBhcmVubGVmdHZlcnRpY2FsPTY1MDc3LGUucGFyZW5yaWdodD00MSxlLnBhcmVucmlnaHRhbHRvbmVhcmFiaWM9NjQ4MzEsZS5wYXJlbnJpZ2h0YnQ9NjM3MzYsZS5wYXJlbnJpZ2h0ZXg9NjM3MzUsZS5wYXJlbnJpZ2h0aW5mZXJpb3I9ODMzNCxlLnBhcmVucmlnaHRtb25vc3BhY2U9NjUyODksZS5wYXJlbnJpZ2h0c21hbGw9NjUxMTQsZS5wYXJlbnJpZ2h0c3VwZXJpb3I9ODMxOCxlLnBhcmVucmlnaHR0cD02MzczNCxlLnBhcmVucmlnaHR2ZXJ0aWNhbD02NTA3OCxlLnBhcnRpYWxkaWZmPTg3MDYsZS5wYXNlcWhlYnJldz0xNDcyLGUucGFzaHRhaGVicmV3PTE0MzMsZS5wYXNxdWFyZT0xMzIyNSxlLnBhdGFoPTE0NjMsZS5wYXRhaDExPTE0NjMsZS5wYXRhaDFkPTE0NjMsZS5wYXRhaDJhPTE0NjMsZS5wYXRhaGhlYnJldz0xNDYzLGUucGF0YWhuYXJyb3doZWJyZXc9MTQ2MyxlLnBhdGFocXVhcnRlcmhlYnJldz0xNDYzLGUucGF0YWh3aWRlaGVicmV3PTE0NjMsZS5wYXplcmhlYnJldz0xNDQxLGUucGJvcG9tb2ZvPTEyNTUwLGUucGNpcmNsZT05NDM5LGUucGRvdGFjY2VudD03NzY3LGUucGU9MTUwOCxlLnBlY3lyaWxsaWM9MTA4NyxlLnBlZGFnZXNoPTY0MzI0LGUucGVkYWdlc2hoZWJyZXc9NjQzMjQsZS5wZWV6aXNxdWFyZT0xMzExNSxlLnBlZmluYWxkYWdlc2hoZWJyZXc9NjQzMjMsZS5wZWhhcmFiaWM9MTY2MixlLnBlaGFybWVuaWFuPTE0MDIsZS5wZWhlYnJldz0xNTA4LGUucGVoZmluYWxhcmFiaWM9NjQzNDMsZS5wZWhpbml0aWFsYXJhYmljPTY0MzQ0LGUucGVoaXJhZ2FuYT0xMjQxMCxlLnBlaG1lZGlhbGFyYWJpYz02NDM0NSxlLnBla2F0YWthbmE9MTI1MDYsZS5wZW1pZGRsZWhvb2tjeXJpbGxpYz0xMTkxLGUucGVyYWZlaGVicmV3PTY0MzM0LGUucGVyY2VudD0zNyxlLnBlcmNlbnRhcmFiaWM9MTY0MixlLnBlcmNlbnRtb25vc3BhY2U9NjUyODUsZS5wZXJjZW50c21hbGw9NjUxMzAsZS5wZXJpb2Q9NDYsZS5wZXJpb2Rhcm1lbmlhbj0xNDE3LGUucGVyaW9kY2VudGVyZWQ9MTgzLGUucGVyaW9kaGFsZndpZHRoPTY1Mzc3LGUucGVyaW9kaW5mZXJpb3I9NjMyMDcsZS5wZXJpb2Rtb25vc3BhY2U9NjUyOTQsZS5wZXJpb2RzbWFsbD02NTEwNixlLnBlcmlvZHN1cGVyaW9yPTYzMjA4LGUucGVyaXNwb21lbmlncmVla2NtYj04MzQsZS5wZXJwZW5kaWN1bGFyPTg4NjksZS5wZXJ0aG91c2FuZD04MjQwLGUucGVzZXRhPTgzNTksZS5wZnNxdWFyZT0xMzE5NCxlLnBoYWJlbmdhbGk9MjQ3NSxlLnBoYWRldmE9MjM0NyxlLnBoYWd1amFyYXRpPTI3MzEsZS5waGFndXJtdWtoaT0yNjAzLGUucGhpPTk2NixlLnBoaTE9OTgxLGUucGhpZXVwaGFjaXJjbGVrb3JlYW49MTI5MjIsZS5waGlldXBoYXBhcmVua29yZWFuPTEyODI2LGUucGhpZXVwaGNpcmNsZWtvcmVhbj0xMjkwOCxlLnBoaWV1cGhrb3JlYW49MTI2MjEsZS5waGlldXBocGFyZW5rb3JlYW49MTI4MTIsZS5waGlsYXRpbj02MzIsZS5waGludGh1dGhhaT0zNjQyLGUucGhpc3ltYm9sZ3JlZWs9OTgxLGUucGhvb2s9NDIxLGUucGhvcGhhbnRoYWk9MzYxNCxlLnBob3BodW5ndGhhaT0zNjEyLGUucGhvc2FtcGhhb3RoYWk9MzYxNixlLnBpPTk2MCxlLnBpZXVwYWNpcmNsZWtvcmVhbj0xMjkxNSxlLnBpZXVwYXBhcmVua29yZWFuPTEyODE5LGUucGlldXBjaWV1Y2tvcmVhbj0xMjY2MixlLnBpZXVwY2lyY2xla29yZWFuPTEyOTAxLGUucGlldXBraXllb2trb3JlYW49MTI2NTgsZS5waWV1cGtvcmVhbj0xMjYxMCxlLnBpZXVwcGFyZW5rb3JlYW49MTI4MDUsZS5waWV1cHNpb3NraXllb2trb3JlYW49MTI2NjAsZS5waWV1cHNpb3Nrb3JlYW49MTI2MTIsZS5waWV1cHNpb3N0aWtldXRrb3JlYW49MTI2NjEsZS5waWV1cHRoaWV1dGhrb3JlYW49MTI2NjMsZS5waWV1cHRpa2V1dGtvcmVhbj0xMjY1OSxlLnBpaGlyYWdhbmE9MTI0MDQsZS5waWthdGFrYW5hPTEyNTAwLGUucGlzeW1ib2xncmVlaz05ODIsZS5waXdyYXJtZW5pYW49MTQxMSxlLnBsYW5ja292ZXIycGk9ODQ2MyxlLnBsYW5ja292ZXIycGkxPTg0NjMsZS5wbHVzPTQzLGUucGx1c2JlbG93Y21iPTc5OSxlLnBsdXNjaXJjbGU9ODg1MyxlLnBsdXNtaW51cz0xNzcsZS5wbHVzbW9kPTcyNixlLnBsdXNtb25vc3BhY2U9NjUyOTEsZS5wbHVzc21hbGw9NjUxMjIsZS5wbHVzc3VwZXJpb3I9ODMxNCxlLnBtb25vc3BhY2U9NjUzNjAsZS5wbXNxdWFyZT0xMzI3MixlLnBvaGlyYWdhbmE9MTI0MTMsZS5wb2ludGluZ2luZGV4ZG93bndoaXRlPTk3NTksZS5wb2ludGluZ2luZGV4bGVmdHdoaXRlPTk3NTYsZS5wb2ludGluZ2luZGV4cmlnaHR3aGl0ZT05NzU4LGUucG9pbnRpbmdpbmRleHVwd2hpdGU9OTc1NyxlLnBva2F0YWthbmE9MTI1MDksZS5wb3BsYXRoYWk9MzYxMSxlLnBvc3RhbG1hcms9MTIzMDYsZS5wb3N0YWxtYXJrZmFjZT0xMjMyMCxlLnBwYXJlbj05Mzg3LGUucHJlY2VkZXM9ODgyNixlLnByZXNjcmlwdGlvbj04NDc4LGUucHJpbWVtb2Q9Njk3LGUucHJpbWVyZXZlcnNlZD04MjQ1LGUucHJvZHVjdD04NzE5LGUucHJvamVjdGl2ZT04OTY1LGUucHJvbG9uZ2Vka2FuYT0xMjU0MCxlLnByb3BlbGxvcj04OTg0LGUucHJvcGVyc3Vic2V0PTg4MzQsZS5wcm9wZXJzdXBlcnNldD04ODM1LGUucHJvcG9ydGlvbj04NzU5LGUucHJvcG9ydGlvbmFsPTg3MzMsZS5wc2k9OTY4LGUucHNpY3lyaWxsaWM9MTEzNyxlLnBzaWxpcG5ldW1hdGFjeXJpbGxpY2NtYj0xMTU4LGUucHNzcXVhcmU9MTMyMzIsZS5wdWhpcmFnYW5hPTEyNDA3LGUucHVrYXRha2FuYT0xMjUwMyxlLnB2c3F1YXJlPTEzMjM2LGUucHdzcXVhcmU9MTMyNDIsZS5xPTExMyxlLnFhZGV2YT0yMzkyLGUucWFkbWFoZWJyZXc9MTQ0OCxlLnFhZmFyYWJpYz0xNjAyLGUucWFmZmluYWxhcmFiaWM9NjUyMzgsZS5xYWZpbml0aWFsYXJhYmljPTY1MjM5LGUucWFmbWVkaWFsYXJhYmljPTY1MjQwLGUucWFtYXRzPTE0NjQsZS5xYW1hdHMxMD0xNDY0LGUucWFtYXRzMWE9MTQ2NCxlLnFhbWF0czFjPTE0NjQsZS5xYW1hdHMyNz0xNDY0LGUucWFtYXRzMjk9MTQ2NCxlLnFhbWF0czMzPTE0NjQsZS5xYW1hdHNkZT0xNDY0LGUucWFtYXRzaGVicmV3PTE0NjQsZS5xYW1hdHNuYXJyb3doZWJyZXc9MTQ2NCxlLnFhbWF0c3FhdGFuaGVicmV3PTE0NjQsZS5xYW1hdHNxYXRhbm5hcnJvd2hlYnJldz0xNDY0LGUucWFtYXRzcWF0YW5xdWFydGVyaGVicmV3PTE0NjQsZS5xYW1hdHNxYXRhbndpZGVoZWJyZXc9MTQ2NCxlLnFhbWF0c3F1YXJ0ZXJoZWJyZXc9MTQ2NCxlLnFhbWF0c3dpZGVoZWJyZXc9MTQ2NCxlLnFhcm5leXBhcmFoZWJyZXc9MTQzOSxlLnFib3BvbW9mbz0xMjU2MSxlLnFjaXJjbGU9OTQ0MCxlLnFob29rPTY3MixlLnFtb25vc3BhY2U9NjUzNjEsZS5xb2Y9MTUxMSxlLnFvZmRhZ2VzaD02NDMyNyxlLnFvZmRhZ2VzaGhlYnJldz02NDMyNyxlLnFvZmhlYnJldz0xNTExLGUucXBhcmVuPTkzODgsZS5xdWFydGVybm90ZT05ODMzLGUucXVidXRzPTE0NjcsZS5xdWJ1dHMxOD0xNDY3LGUucXVidXRzMjU9MTQ2NyxlLnF1YnV0czMxPTE0NjcsZS5xdWJ1dHNoZWJyZXc9MTQ2NyxlLnF1YnV0c25hcnJvd2hlYnJldz0xNDY3LGUucXVidXRzcXVhcnRlcmhlYnJldz0xNDY3LGUucXVidXRzd2lkZWhlYnJldz0xNDY3LGUucXVlc3Rpb249NjMsZS5xdWVzdGlvbmFyYWJpYz0xNTY3LGUucXVlc3Rpb25hcm1lbmlhbj0xMzc0LGUucXVlc3Rpb25kb3duPTE5MSxlLnF1ZXN0aW9uZG93bnNtYWxsPTYzNDIzLGUucXVlc3Rpb25ncmVlaz04OTQsZS5xdWVzdGlvbm1vbm9zcGFjZT02NTMxMSxlLnF1ZXN0aW9uc21hbGw9NjMyOTUsZS5xdW90ZWRibD0zNCxlLnF1b3RlZGJsYmFzZT04MjIyLGUucXVvdGVkYmxsZWZ0PTgyMjAsZS5xdW90ZWRibG1vbm9zcGFjZT02NTI4MixlLnF1b3RlZGJscHJpbWU9MTIzMTgsZS5xdW90ZWRibHByaW1lcmV2ZXJzZWQ9MTIzMTcsZS5xdW90ZWRibHJpZ2h0PTgyMjEsZS5xdW90ZWxlZnQ9ODIxNixlLnF1b3RlbGVmdHJldmVyc2VkPTgyMTksZS5xdW90ZXJldmVyc2VkPTgyMTksZS5xdW90ZXJpZ2h0PTgyMTcsZS5xdW90ZXJpZ2h0bj0zMjksZS5xdW90ZXNpbmdsYmFzZT04MjE4LGUucXVvdGVzaW5nbGU9MzksZS5xdW90ZXNpbmdsZW1vbm9zcGFjZT02NTI4NyxlLnI9MTE0LGUucmFhcm1lbmlhbj0xNDA0LGUucmFiZW5nYWxpPTI0ODAsZS5yYWN1dGU9MzQxLGUucmFkZXZhPTIzNTIsZS5yYWRpY2FsPTg3MzAsZS5yYWRpY2FsZXg9NjM3MTcsZS5yYWRvdmVyc3NxdWFyZT0xMzIzMCxlLnJhZG92ZXJzc3F1YXJlZHNxdWFyZT0xMzIzMSxlLnJhZHNxdWFyZT0xMzIyOSxlLnJhZmU9MTQ3MSxlLnJhZmVoZWJyZXc9MTQ3MSxlLnJhZ3VqYXJhdGk9MjczNixlLnJhZ3VybXVraGk9MjYwOCxlLnJhaGlyYWdhbmE9MTI0MjUsZS5yYWthdGFrYW5hPTEyNTIxLGUucmFrYXRha2FuYWhhbGZ3aWR0aD02NTQzMSxlLnJhbG93ZXJkaWFnb25hbGJlbmdhbGk9MjU0NSxlLnJhbWlkZGxlZGlhZ29uYWxiZW5nYWxpPTI1NDQsZS5yYW1zaG9ybj02MTIsZS5yYXRpbz04NzU4LGUucmJvcG9tb2ZvPTEyNTY2LGUucmNhcm9uPTM0NSxlLnJjZWRpbGxhPTM0MyxlLnJjaXJjbGU9OTQ0MSxlLnJjb21tYWFjY2VudD0zNDMsZS5yZGJsZ3JhdmU9NTI5LGUucmRvdGFjY2VudD03NzY5LGUucmRvdGJlbG93PTc3NzEsZS5yZG90YmVsb3dtYWNyb249Nzc3MyxlLnJlZmVyZW5jZW1hcms9ODI1MSxlLnJlZmxleHN1YnNldD04ODM4LGUucmVmbGV4c3VwZXJzZXQ9ODgzOSxlLnJlZ2lzdGVyZWQ9MTc0LGUucmVnaXN0ZXJzYW5zPTYzNzIwLGUucmVnaXN0ZXJzZXJpZj02MzE5NCxlLnJlaGFyYWJpYz0xNTg1LGUucmVoYXJtZW5pYW49MTQwOCxlLnJlaGZpbmFsYXJhYmljPTY1MTk4LGUucmVoaXJhZ2FuYT0xMjQyOCxlLnJla2F0YWthbmE9MTI1MjQ7ZS5yZWthdGFrYW5haGFsZndpZHRoPTY1NDM0LGUucmVzaD0xNTEyLGUucmVzaGRhZ2VzaGhlYnJldz02NDMyOCxlLnJlc2hoZWJyZXc9MTUxMixlLnJldmVyc2VkdGlsZGU9ODc2NSxlLnJldmlhaGVicmV3PTE0MzEsZS5yZXZpYW11Z3Jhc2hoZWJyZXc9MTQzMSxlLnJldmxvZ2ljYWxub3Q9ODk3NixlLnJmaXNoaG9vaz02MzgsZS5yZmlzaGhvb2tyZXZlcnNlZD02MzksZS5yaGFiZW5nYWxpPTI1MjUsZS5yaGFkZXZhPTIzOTcsZS5yaG89OTYxLGUucmhvb2s9NjM3LGUucmhvb2t0dXJuZWQ9NjM1LGUucmhvb2t0dXJuZWRzdXBlcmlvcj02OTMsZS5yaG9zeW1ib2xncmVlaz0xMDA5LGUucmhvdGljaG9va21vZD03MzQsZS5yaWV1bGFjaXJjbGVrb3JlYW49MTI5MTMsZS5yaWV1bGFwYXJlbmtvcmVhbj0xMjgxNyxlLnJpZXVsY2lyY2xla29yZWFuPTEyODk5LGUucmlldWxoaWV1aGtvcmVhbj0xMjYwOCxlLnJpZXVsa2l5ZW9ra29yZWFuPTEyNjAyLGUucmlldWxraXllb2tzaW9za29yZWFuPTEyNjQ5LGUucmlldWxrb3JlYW49MTI2MDEsZS5yaWV1bG1pZXVta29yZWFuPTEyNjAzLGUucmlldWxwYW5zaW9za29yZWFuPTEyNjUyLGUucmlldWxwYXJlbmtvcmVhbj0xMjgwMyxlLnJpZXVscGhpZXVwaGtvcmVhbj0xMjYwNyxlLnJpZXVscGlldXBrb3JlYW49MTI2MDQsZS5yaWV1bHBpZXVwc2lvc2tvcmVhbj0xMjY1MSxlLnJpZXVsc2lvc2tvcmVhbj0xMjYwNSxlLnJpZXVsdGhpZXV0aGtvcmVhbj0xMjYwNixlLnJpZXVsdGlrZXV0a29yZWFuPTEyNjUwLGUucmlldWx5ZW9yaW5oaWV1aGtvcmVhbj0xMjY1MyxlLnJpZ2h0YW5nbGU9ODczNSxlLnJpZ2h0dGFja2JlbG93Y21iPTc5MyxlLnJpZ2h0dHJpYW5nbGU9ODg5NSxlLnJpaGlyYWdhbmE9MTI0MjYsZS5yaWthdGFrYW5hPTEyNTIyLGUucmlrYXRha2FuYWhhbGZ3aWR0aD02NTQzMixlLnJpbmc9NzMwLGUucmluZ2JlbG93Y21iPTgwNSxlLnJpbmdjbWI9Nzc4LGUucmluZ2hhbGZsZWZ0PTcwMyxlLnJpbmdoYWxmbGVmdGFybWVuaWFuPTEzNjksZS5yaW5naGFsZmxlZnRiZWxvd2NtYj03OTYsZS5yaW5naGFsZmxlZnRjZW50ZXJlZD03MjMsZS5yaW5naGFsZnJpZ2h0PTcwMixlLnJpbmdoYWxmcmlnaHRiZWxvd2NtYj04MjUsZS5yaW5naGFsZnJpZ2h0Y2VudGVyZWQ9NzIyLGUucmludmVydGVkYnJldmU9NTMxLGUucml0dG9ydXNxdWFyZT0xMzEzNyxlLnJsaW5lYmVsb3c9Nzc3NSxlLnJsb25nbGVnPTYzNixlLnJsb25nbGVndHVybmVkPTYzNCxlLnJtb25vc3BhY2U9NjUzNjIsZS5yb2hpcmFnYW5hPTEyNDI5LGUucm9rYXRha2FuYT0xMjUyNSxlLnJva2F0YWthbmFoYWxmd2lkdGg9NjU0MzUsZS5yb3J1YXRoYWk9MzYxOSxlLnJwYXJlbj05Mzg5LGUucnJhYmVuZ2FsaT0yNTI0LGUucnJhZGV2YT0yMzUzLGUucnJhZ3VybXVraGk9MjY1MixlLnJyZWhhcmFiaWM9MTY4MSxlLnJyZWhmaW5hbGFyYWJpYz02NDM5NyxlLnJydm9jYWxpY2JlbmdhbGk9MjUyOCxlLnJydm9jYWxpY2RldmE9MjQwMCxlLnJydm9jYWxpY2d1amFyYXRpPTI3ODQsZS5ycnZvY2FsaWN2b3dlbHNpZ25iZW5nYWxpPTI1MDAsZS5ycnZvY2FsaWN2b3dlbHNpZ25kZXZhPTIzNzIsZS5ycnZvY2FsaWN2b3dlbHNpZ25ndWphcmF0aT0yNzU2LGUucnN1cGVyaW9yPTYzMjE3LGUucnRibG9jaz05NjE2LGUucnR1cm5lZD02MzMsZS5ydHVybmVkc3VwZXJpb3I9NjkyLGUucnVoaXJhZ2FuYT0xMjQyNyxlLnJ1a2F0YWthbmE9MTI1MjMsZS5ydWthdGFrYW5haGFsZndpZHRoPTY1NDMzLGUucnVwZWVtYXJrYmVuZ2FsaT0yNTQ2LGUucnVwZWVzaWduYmVuZ2FsaT0yNTQ3LGUucnVwaWFoPTYzMTk3LGUucnV0aGFpPTM2MjAsZS5ydm9jYWxpY2JlbmdhbGk9MjQ0MyxlLnJ2b2NhbGljZGV2YT0yMzE1LGUucnZvY2FsaWNndWphcmF0aT0yNjk5LGUucnZvY2FsaWN2b3dlbHNpZ25iZW5nYWxpPTI0OTksZS5ydm9jYWxpY3Zvd2Vsc2lnbmRldmE9MjM3MSxlLnJ2b2NhbGljdm93ZWxzaWduZ3VqYXJhdGk9Mjc1NSxlLnM9MTE1LGUuc2FiZW5nYWxpPTI0ODgsZS5zYWN1dGU9MzQ3LGUuc2FjdXRlZG90YWNjZW50PTc3ODEsZS5zYWRhcmFiaWM9MTU4OSxlLnNhZGV2YT0yMzYwLGUuc2FkZmluYWxhcmFiaWM9NjUyMTAsZS5zYWRpbml0aWFsYXJhYmljPTY1MjExLGUuc2FkbWVkaWFsYXJhYmljPTY1MjEyLGUuc2FndWphcmF0aT0yNzQ0LGUuc2FndXJtdWtoaT0yNjE2LGUuc2FoaXJhZ2FuYT0xMjM3MyxlLnNha2F0YWthbmE9MTI0NjksZS5zYWthdGFrYW5haGFsZndpZHRoPTY1NDAzLGUuc2FsbGFsbGFob3VhbGF5aGV3YXNhbGxhbWFyYWJpYz02NTAxOCxlLnNhbWVraD0xNTA1LGUuc2FtZWtoZGFnZXNoPTY0MzIxLGUuc2FtZWtoZGFnZXNoaGVicmV3PTY0MzIxLGUuc2FtZWtoaGVicmV3PTE1MDUsZS5zYXJhYWF0aGFpPTM2MzQsZS5zYXJhYWV0aGFpPTM2NDksZS5zYXJhYWltYWltYWxhaXRoYWk9MzY1MixlLnNhcmFhaW1haW11YW50aGFpPTM2NTEsZS5zYXJhYW10aGFpPTM2MzUsZS5zYXJhYXRoYWk9MzYzMixlLnNhcmFldGhhaT0zNjQ4LGUuc2FyYWlpbGVmdHRoYWk9NjM2MjIsZS5zYXJhaWl0aGFpPTM2MzcsZS5zYXJhaWxlZnR0aGFpPTYzNjIxLGUuc2FyYWl0aGFpPTM2MzYsZS5zYXJhb3RoYWk9MzY1MCxlLnNhcmF1ZWVsZWZ0dGhhaT02MzYyNCxlLnNhcmF1ZWV0aGFpPTM2MzksZS5zYXJhdWVsZWZ0dGhhaT02MzYyMyxlLnNhcmF1ZXRoYWk9MzYzOCxlLnNhcmF1dGhhaT0zNjQwLGUuc2FyYXV1dGhhaT0zNjQxLGUuc2JvcG9tb2ZvPTEyNTY5LGUuc2Nhcm9uPTM1MyxlLnNjYXJvbmRvdGFjY2VudD03NzgzLGUuc2NlZGlsbGE9MzUxLGUuc2Nod2E9NjAxLGUuc2Nod2FjeXJpbGxpYz0xMjQxLGUuc2Nod2FkaWVyZXNpc2N5cmlsbGljPTEyNDMsZS5zY2h3YWhvb2s9NjAyLGUuc2NpcmNsZT05NDQyLGUuc2NpcmN1bWZsZXg9MzQ5LGUuc2NvbW1hYWNjZW50PTUzNyxlLnNkb3RhY2NlbnQ9Nzc3NyxlLnNkb3RiZWxvdz03Nzc5LGUuc2RvdGJlbG93ZG90YWNjZW50PTc3ODUsZS5zZWFndWxsYmVsb3djbWI9ODI4LGUuc2Vjb25kPTgyNDMsZS5zZWNvbmR0b25lY2hpbmVzZT03MTQsZS5zZWN0aW9uPTE2NyxlLnNlZW5hcmFiaWM9MTU4NyxlLnNlZW5maW5hbGFyYWJpYz02NTIwMixlLnNlZW5pbml0aWFsYXJhYmljPTY1MjAzLGUuc2Vlbm1lZGlhbGFyYWJpYz02NTIwNCxlLnNlZ29sPTE0NjIsZS5zZWdvbDEzPTE0NjIsZS5zZWdvbDFmPTE0NjIsZS5zZWdvbDJjPTE0NjIsZS5zZWdvbGhlYnJldz0xNDYyLGUuc2Vnb2xuYXJyb3doZWJyZXc9MTQ2MixlLnNlZ29scXVhcnRlcmhlYnJldz0xNDYyLGUuc2Vnb2x0YWhlYnJldz0xNDI2LGUuc2Vnb2x3aWRlaGVicmV3PTE0NjIsZS5zZWhhcm1lbmlhbj0xNDA1LGUuc2VoaXJhZ2FuYT0xMjM3OSxlLnNla2F0YWthbmE9MTI0NzUsZS5zZWthdGFrYW5haGFsZndpZHRoPTY1NDA2LGUuc2VtaWNvbG9uPTU5LGUuc2VtaWNvbG9uYXJhYmljPTE1NjMsZS5zZW1pY29sb25tb25vc3BhY2U9NjUzMDcsZS5zZW1pY29sb25zbWFsbD02NTEwOCxlLnNlbWl2b2ljZWRtYXJra2FuYT0xMjQ0NCxlLnNlbWl2b2ljZWRtYXJra2FuYWhhbGZ3aWR0aD02NTQzOSxlLnNlbnRpc3F1YXJlPTEzMDkwLGUuc2VudG9zcXVhcmU9MTMwOTEsZS5zZXZlbj01NSxlLnNldmVuYXJhYmljPTE2MzksZS5zZXZlbmJlbmdhbGk9MjU0MSxlLnNldmVuY2lyY2xlPTkzMTgsZS5zZXZlbmNpcmNsZWludmVyc2VzYW5zc2VyaWY9MTAxMjgsZS5zZXZlbmRldmE9MjQxMyxlLnNldmVuZWlnaHRocz04NTQyLGUuc2V2ZW5ndWphcmF0aT0yNzk3LGUuc2V2ZW5ndXJtdWtoaT0yNjY5LGUuc2V2ZW5oYWNrYXJhYmljPTE2MzksZS5zZXZlbmhhbmd6aG91PTEyMzI3LGUuc2V2ZW5pZGVvZ3JhcGhpY3BhcmVuPTEyODM4LGUuc2V2ZW5pbmZlcmlvcj04MzI3LGUuc2V2ZW5tb25vc3BhY2U9NjUzMDMsZS5zZXZlbm9sZHN0eWxlPTYzMjg3LGUuc2V2ZW5wYXJlbj05MzM4LGUuc2V2ZW5wZXJpb2Q9OTM1OCxlLnNldmVucGVyc2lhbj0xNzgzLGUuc2V2ZW5yb21hbj04NTY2LGUuc2V2ZW5zdXBlcmlvcj04MzExLGUuc2V2ZW50ZWVuY2lyY2xlPTkzMjgsZS5zZXZlbnRlZW5wYXJlbj05MzQ4LGUuc2V2ZW50ZWVucGVyaW9kPTkzNjgsZS5zZXZlbnRoYWk9MzY3MSxlLnNmdGh5cGhlbj0xNzMsZS5zaGFhcm1lbmlhbj0xMzk5LGUuc2hhYmVuZ2FsaT0yNDg2LGUuc2hhY3lyaWxsaWM9MTA5NixlLnNoYWRkYWFyYWJpYz0xNjE3LGUuc2hhZGRhZGFtbWFhcmFiaWM9NjQ2MDksZS5zaGFkZGFkYW1tYXRhbmFyYWJpYz02NDYwNixlLnNoYWRkYWZhdGhhYXJhYmljPTY0NjA4LGUuc2hhZGRha2FzcmFhcmFiaWM9NjQ2MTAsZS5zaGFkZGFrYXNyYXRhbmFyYWJpYz02NDYwNyxlLnNoYWRlPTk2MTgsZS5zaGFkZWRhcms9OTYxOSxlLnNoYWRlbGlnaHQ9OTYxNyxlLnNoYWRlbWVkaXVtPTk2MTgsZS5zaGFkZXZhPTIzNTgsZS5zaGFndWphcmF0aT0yNzQyLGUuc2hhZ3VybXVraGk9MjYxNCxlLnNoYWxzaGVsZXRoZWJyZXc9MTQyNyxlLnNoYm9wb21vZm89MTI1NjUsZS5zaGNoYWN5cmlsbGljPTEwOTcsZS5zaGVlbmFyYWJpYz0xNTg4LGUuc2hlZW5maW5hbGFyYWJpYz02NTIwNixlLnNoZWVuaW5pdGlhbGFyYWJpYz02NTIwNyxlLnNoZWVubWVkaWFsYXJhYmljPTY1MjA4LGUuc2hlaWNvcHRpYz05OTUsZS5zaGVxZWw9ODM2MixlLnNoZXFlbGhlYnJldz04MzYyLGUuc2hldmE9MTQ1NixlLnNoZXZhMTE1PTE0NTYsZS5zaGV2YTE1PTE0NTYsZS5zaGV2YTIyPTE0NTYsZS5zaGV2YTJlPTE0NTYsZS5zaGV2YWhlYnJldz0xNDU2LGUuc2hldmFuYXJyb3doZWJyZXc9MTQ1NixlLnNoZXZhcXVhcnRlcmhlYnJldz0xNDU2LGUuc2hldmF3aWRlaGVicmV3PTE0NTYsZS5zaGhhY3lyaWxsaWM9MTIxMSxlLnNoaW1hY29wdGljPTEwMDUsZS5zaGluPTE1MTMsZS5zaGluZGFnZXNoPTY0MzI5LGUuc2hpbmRhZ2VzaGhlYnJldz02NDMyOSxlLnNoaW5kYWdlc2hzaGluZG90PTY0MzAwLGUuc2hpbmRhZ2VzaHNoaW5kb3RoZWJyZXc9NjQzMDAsZS5zaGluZGFnZXNoc2luZG90PTY0MzAxLGUuc2hpbmRhZ2VzaHNpbmRvdGhlYnJldz02NDMwMSxlLnNoaW5kb3RoZWJyZXc9MTQ3MyxlLnNoaW5oZWJyZXc9MTUxMyxlLnNoaW5zaGluZG90PTY0Mjk4LGUuc2hpbnNoaW5kb3RoZWJyZXc9NjQyOTgsZS5zaGluc2luZG90PTY0Mjk5LGUuc2hpbnNpbmRvdGhlYnJldz02NDI5OSxlLnNob29rPTY0MixlLnNpZ21hPTk2MyxlLnNpZ21hMT05NjIsZS5zaWdtYWZpbmFsPTk2MixlLnNpZ21hbHVuYXRlc3ltYm9sZ3JlZWs9MTAxMCxlLnNpaGlyYWdhbmE9MTIzNzUsZS5zaWthdGFrYW5hPTEyNDcxLGUuc2lrYXRha2FuYWhhbGZ3aWR0aD02NTQwNCxlLnNpbHVxaGVicmV3PTE0NjksZS5zaWx1cWxlZnRoZWJyZXc9MTQ2OSxlLnNpbWlsYXI9ODc2NCxlLnNpbmRvdGhlYnJldz0xNDc0LGUuc2lvc2FjaXJjbGVrb3JlYW49MTI5MTYsZS5zaW9zYXBhcmVua29yZWFuPTEyODIwLGUuc2lvc2NpZXVja29yZWFuPTEyNjcwLGUuc2lvc2NpcmNsZWtvcmVhbj0xMjkwMixlLnNpb3NraXllb2trb3JlYW49MTI2NjYsZS5zaW9za29yZWFuPTEyNjEzLGUuc2lvc25pZXVua29yZWFuPTEyNjY3LGUuc2lvc3BhcmVua29yZWFuPTEyODA2LGUuc2lvc3BpZXVwa29yZWFuPTEyNjY5LGUuc2lvc3Rpa2V1dGtvcmVhbj0xMjY2OCxlLnNpeD01NCxlLnNpeGFyYWJpYz0xNjM4LGUuc2l4YmVuZ2FsaT0yNTQwLGUuc2l4Y2lyY2xlPTkzMTcsZS5zaXhjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmPTEwMTI3LGUuc2l4ZGV2YT0yNDEyLGUuc2l4Z3VqYXJhdGk9Mjc5NixlLnNpeGd1cm11a2hpPTI2NjgsZS5zaXhoYWNrYXJhYmljPTE2MzgsZS5zaXhoYW5nemhvdT0xMjMyNixlLnNpeGlkZW9ncmFwaGljcGFyZW49MTI4MzcsZS5zaXhpbmZlcmlvcj04MzI2LGUuc2l4bW9ub3NwYWNlPTY1MzAyLGUuc2l4b2xkc3R5bGU9NjMyODYsZS5zaXhwYXJlbj05MzM3LGUuc2l4cGVyaW9kPTkzNTcsZS5zaXhwZXJzaWFuPTE3ODIsZS5zaXhyb21hbj04NTY1LGUuc2l4c3VwZXJpb3I9ODMxMCxlLnNpeHRlZW5jaXJjbGU9OTMyNyxlLnNpeHRlZW5jdXJyZW5jeWRlbm9taW5hdG9yYmVuZ2FsaT0yNTUzLGUuc2l4dGVlbnBhcmVuPTkzNDcsZS5zaXh0ZWVucGVyaW9kPTkzNjcsZS5zaXh0aGFpPTM2NzAsZS5zbGFzaD00NyxlLnNsYXNobW9ub3NwYWNlPTY1Mjk1LGUuc2xvbmc9MzgzLGUuc2xvbmdkb3RhY2NlbnQ9NzgzNSxlLnNtaWxlZmFjZT05Nzg2LGUuc21vbm9zcGFjZT02NTM2MyxlLnNvZnBhc3VxaGVicmV3PTE0NzUsZS5zb2Z0aHlwaGVuPTE3MyxlLnNvZnRzaWduY3lyaWxsaWM9MTEwMCxlLnNvaGlyYWdhbmE9MTIzODEsZS5zb2thdGFrYW5hPTEyNDc3LGUuc29rYXRha2FuYWhhbGZ3aWR0aD02NTQwNyxlLnNvbGlkdXNsb25nb3ZlcmxheWNtYj04MjQsZS5zb2xpZHVzc2hvcnRvdmVybGF5Y21iPTgyMyxlLnNvcnVzaXRoYWk9MzYyNSxlLnNvc2FsYXRoYWk9MzYyNCxlLnNvc290aGFpPTM1OTUsZS5zb3N1YXRoYWk9MzYyNixlLnNwYWNlPTMyLGUuc3BhY2VoYWNrYXJhYmljPTMyLGUuc3BhZGU9OTgyNCxlLnNwYWRlc3VpdGJsYWNrPTk4MjQsZS5zcGFkZXN1aXR3aGl0ZT05ODI4LGUuc3BhcmVuPTkzOTAsZS5zcXVhcmViZWxvd2NtYj04MjcsZS5zcXVhcmVjYz0xMzI1MixlLnNxdWFyZWNtPTEzMjEzLGUuc3F1YXJlZGlhZ29uYWxjcm9zc2hhdGNoZmlsbD05NjQxLGUuc3F1YXJlaG9yaXpvbnRhbGZpbGw9OTYzNixlLnNxdWFyZWtnPTEzMTk5LGUuc3F1YXJla209MTMyMTQsZS5zcXVhcmVrbWNhcGl0YWw9MTMyNjIsZS5zcXVhcmVsbj0xMzI2NSxlLnNxdWFyZWxvZz0xMzI2NixlLnNxdWFyZW1nPTEzMTk4LGUuc3F1YXJlbWlsPTEzMjY5LGUuc3F1YXJlbW09MTMyMTIsZS5zcXVhcmVtc3F1YXJlZD0xMzIxNyxlLnNxdWFyZW9ydGhvZ29uYWxjcm9zc2hhdGNoZmlsbD05NjM4LGUuc3F1YXJldXBwZXJsZWZ0dG9sb3dlcnJpZ2h0ZmlsbD05NjM5LGUuc3F1YXJldXBwZXJyaWdodHRvbG93ZXJsZWZ0ZmlsbD05NjQwLGUuc3F1YXJldmVydGljYWxmaWxsPTk2MzcsZS5zcXVhcmV3aGl0ZXdpdGhzbWFsbGJsYWNrPTk2MzUsZS5zcnNxdWFyZT0xMzI3NSxlLnNzYWJlbmdhbGk9MjQ4NyxlLnNzYWRldmE9MjM1OSxlLnNzYWd1amFyYXRpPTI3NDMsZS5zc2FuZ2NpZXVja29yZWFuPTEyNjE3LGUuc3NhbmdoaWV1aGtvcmVhbj0xMjY3NyxlLnNzYW5naWV1bmdrb3JlYW49MTI2NzIsZS5zc2FuZ2tpeWVva2tvcmVhbj0xMjU5NCxlLnNzYW5nbmlldW5rb3JlYW49MTI2NDUsZS5zc2FuZ3BpZXVwa29yZWFuPTEyNjExLGUuc3NhbmdzaW9za29yZWFuPTEyNjE0LGUuc3Nhbmd0aWtldXRrb3JlYW49MTI2MDAsZS5zc3VwZXJpb3I9NjMyMTgsZS5zdGVybGluZz0xNjMsZS5zdGVybGluZ21vbm9zcGFjZT02NTUwNSxlLnN0cm9rZWxvbmdvdmVybGF5Y21iPTgyMixlLnN0cm9rZXNob3J0b3ZlcmxheWNtYj04MjEsZS5zdWJzZXQ9ODgzNCxlLnN1YnNldG5vdGVxdWFsPTg4NDIsZS5zdWJzZXRvcmVxdWFsPTg4MzgsZS5zdWNjZWVkcz04ODI3LGUuc3VjaHRoYXQ9ODcxNSxlLnN1aGlyYWdhbmE9MTIzNzcsZS5zdWthdGFrYW5hPTEyNDczLGUuc3VrYXRha2FuYWhhbGZ3aWR0aD02NTQwNSxlLnN1a3VuYXJhYmljPTE2MTgsZS5zdW1tYXRpb249ODcyMSxlLnN1bj05Nzg4LGUuc3VwZXJzZXQ9ODgzNSxlLnN1cGVyc2V0bm90ZXF1YWw9ODg0MyxlLnN1cGVyc2V0b3JlcXVhbD04ODM5LGUuc3ZzcXVhcmU9MTMyNzYsZS5zeW91d2FlcmFzcXVhcmU9MTMxODAsZS50PTExNixlLnRhYmVuZ2FsaT0yNDY4LGUudGFja2Rvd249ODg2OCxlLnRhY2tsZWZ0PTg4NjcsZS50YWRldmE9MjM0MCxlLnRhZ3VqYXJhdGk9MjcyNCxlLnRhZ3VybXVraGk9MjU5NixlLnRhaGFyYWJpYz0xNTkxLGUudGFoZmluYWxhcmFiaWM9NjUyMTgsZS50YWhpbml0aWFsYXJhYmljPTY1MjE5LGUudGFoaXJhZ2FuYT0xMjM4MyxlLnRhaG1lZGlhbGFyYWJpYz02NTIyMCxlLnRhaXN5b3VlcmFzcXVhcmU9MTMxODEsZS50YWthdGFrYW5hPTEyNDc5LGUudGFrYXRha2FuYWhhbGZ3aWR0aD02NTQwOCxlLnRhdHdlZWxhcmFiaWM9MTYwMCxlLnRhdT05NjQsZS50YXY9MTUxNCxlLnRhdmRhZ2VzPTY0MzMwLGUudGF2ZGFnZXNoPTY0MzMwLGUudGF2ZGFnZXNoaGVicmV3PTY0MzMwLGUudGF2aGVicmV3PTE1MTQsZS50YmFyPTM1OSxlLnRib3BvbW9mbz0xMjU1NCxlLnRjYXJvbj0zNTcsZS50Y2N1cmw9NjgwLGUudGNlZGlsbGE9MzU1LGUudGNoZWhhcmFiaWM9MTY3MCxlLnRjaGVoZmluYWxhcmFiaWM9NjQzNzksZS50Y2hlaGluaXRpYWxhcmFiaWM9NjQzODAsZS50Y2hlaG1lZGlhbGFyYWJpYz02NDM4MSxlLnRjaXJjbGU9OTQ0MyxlLnRjaXJjdW1mbGV4YmVsb3c9Nzc5MyxlLnRjb21tYWFjY2VudD0zNTUsZS50ZGllcmVzaXM9NzgzMSxlLnRkb3RhY2NlbnQ9Nzc4NyxlLnRkb3RiZWxvdz03Nzg5LGUudGVjeXJpbGxpYz0xMDkwLGUudGVkZXNjZW5kZXJjeXJpbGxpYz0xMTk3LGUudGVoYXJhYmljPTE1NzgsZS50ZWhmaW5hbGFyYWJpYz02NTE3NCxlLnRlaGhhaGluaXRpYWxhcmFiaWM9NjQ2NzQsZS50ZWhoYWhpc29sYXRlZGFyYWJpYz02NDUyNCxlLnRlaGluaXRpYWxhcmFiaWM9NjUxNzUsZS50ZWhpcmFnYW5hPTEyMzkwLGUudGVoamVlbWluaXRpYWxhcmFiaWM9NjQ2NzMsZS50ZWhqZWVtaXNvbGF0ZWRhcmFiaWM9NjQ1MjMsZS50ZWhtYXJidXRhYXJhYmljPTE1NzcsZS50ZWhtYXJidXRhZmluYWxhcmFiaWM9NjUxNzIsZS50ZWhtZWRpYWxhcmFiaWM9NjUxNzYsZS50ZWhtZWVtaW5pdGlhbGFyYWJpYz02NDY3NixlLnRlaG1lZW1pc29sYXRlZGFyYWJpYz02NDUyNixlLnRlaG5vb25maW5hbGFyYWJpYz02NDYyNyxlLnRla2F0YWthbmE9MTI0ODYsZS50ZWthdGFrYW5haGFsZndpZHRoPTY1NDExLGUudGVsZXBob25lPTg0ODEsZS50ZWxlcGhvbmVibGFjaz05NzQyLGUudGVsaXNoYWdlZG9sYWhlYnJldz0xNDQwLGUudGVsaXNoYXFldGFuYWhlYnJldz0xNDQ5LGUudGVuY2lyY2xlPTkzMjEsZS50ZW5pZGVvZ3JhcGhpY3BhcmVuPTEyODQxLGUudGVucGFyZW49OTM0MSxlLnRlbnBlcmlvZD05MzYxLGUudGVucm9tYW49ODU2OSxlLnRlc2g9Njc5LGUudGV0PTE0OTYsZS50ZXRkYWdlc2g9NjQzMTIsZS50ZXRkYWdlc2hoZWJyZXc9NjQzMTIsZS50ZXRoZWJyZXc9MTQ5NixlLnRldHNlY3lyaWxsaWM9MTIwNSxlLnRldmlyaGVicmV3PTE0MzUsZS50ZXZpcmxlZnRoZWJyZXc9MTQzNSxlLnRoYWJlbmdhbGk9MjQ2OSxlLnRoYWRldmE9MjM0MSxlLnRoYWd1amFyYXRpPTI3MjUsZS50aGFndXJtdWtoaT0yNTk3LGUudGhhbGFyYWJpYz0xNTg0LGUudGhhbGZpbmFsYXJhYmljPTY1MTk2LGUudGhhbnRoYWtoYXRsb3dsZWZ0dGhhaT02MzY0MCxlLnRoYW50aGFraGF0bG93cmlnaHR0aGFpPTYzNjM5LGUudGhhbnRoYWtoYXR0aGFpPTM2NjAsZS50aGFudGhha2hhdHVwcGVybGVmdHRoYWk9NjM2MzgsZS50aGVoYXJhYmljPTE1NzksZS50aGVoZmluYWxhcmFiaWM9NjUxNzgsZS50aGVoaW5pdGlhbGFyYWJpYz02NTE3OSxlLnRoZWhtZWRpYWxhcmFiaWM9NjUxODAsZS50aGVyZWV4aXN0cz04NzA3LGUudGhlcmVmb3JlPTg3NTYsZS50aGV0YT05NTIsZS50aGV0YTE9OTc3LGUudGhldGFzeW1ib2xncmVlaz05NzcsZS50aGlldXRoYWNpcmNsZWtvcmVhbj0xMjkyMSxlLnRoaWV1dGhhcGFyZW5rb3JlYW49MTI4MjUsZS50aGlldXRoY2lyY2xla29yZWFuPTEyOTA3LGUudGhpZXV0aGtvcmVhbj0xMjYyMCxlLnRoaWV1dGhwYXJlbmtvcmVhbj0xMjgxMSxlLnRoaXJ0ZWVuY2lyY2xlPTkzMjQsZS50aGlydGVlbnBhcmVuPTkzNDQsZS50aGlydGVlbnBlcmlvZD05MzY0LGUudGhvbmFuZ21vbnRob3RoYWk9MzYwMSxlLnRob29rPTQyOSxlLnRob3BodXRoYW90aGFpPTM2MDIsZS50aG9ybj0yNTQsZS50aG90aGFoYW50aGFpPTM2MDcsZS50aG90aGFudGhhaT0zNjAwLGUudGhvdGhvbmd0aGFpPTM2MDgsZS50aG90aHVuZ3RoYWk9MzYwNixlLnRob3VzYW5kY3lyaWxsaWM9MTE1NCxlLnRob3VzYW5kc3NlcGFyYXRvcmFyYWJpYz0xNjQ0LGUudGhvdXNhbmRzc2VwYXJhdG9ycGVyc2lhbj0xNjQ0LGUudGhyZWU9NTEsZS50aHJlZWFyYWJpYz0xNjM1LGUudGhyZWViZW5nYWxpPTI1MzcsZS50aHJlZWNpcmNsZT05MzE0LGUudGhyZWVjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmPTEwMTI0LGUudGhyZWVkZXZhPTI0MDksZS50aHJlZWVpZ2h0aHM9ODU0MCxlLnRocmVlZ3VqYXJhdGk9Mjc5MyxlLnRocmVlZ3VybXVraGk9MjY2NSxlLnRocmVlaGFja2FyYWJpYz0xNjM1LGUudGhyZWVoYW5nemhvdT0xMjMyMyxlLnRocmVlaWRlb2dyYXBoaWNwYXJlbj0xMjgzNCxlLnRocmVlaW5mZXJpb3I9ODMyMyxlLnRocmVlbW9ub3NwYWNlPTY1Mjk5LGUudGhyZWVudW1lcmF0b3JiZW5nYWxpPTI1NTAsZS50aHJlZW9sZHN0eWxlPTYzMjgzLGUudGhyZWVwYXJlbj05MzM0LGUudGhyZWVwZXJpb2Q9OTM1NCxlLnRocmVlcGVyc2lhbj0xNzc5LGUudGhyZWVxdWFydGVycz0xOTAsZS50aHJlZXF1YXJ0ZXJzZW1kYXNoPTYzMTk4LGUudGhyZWVyb21hbj04NTYyLGUudGhyZWVzdXBlcmlvcj0xNzksZS50aHJlZXRoYWk9MzY2NyxlLnRoenNxdWFyZT0xMzIwNCxlLnRpaGlyYWdhbmE9MTIzODUsZS50aWthdGFrYW5hPTEyNDgxLGUudGlrYXRha2FuYWhhbGZ3aWR0aD02NTQwOSxlLnRpa2V1dGFjaXJjbGVrb3JlYW49MTI5MTIsZS50aWtldXRhcGFyZW5rb3JlYW49MTI4MTYsZS50aWtldXRjaXJjbGVrb3JlYW49MTI4OTgsZS50aWtldXRrb3JlYW49MTI1OTksZS50aWtldXRwYXJlbmtvcmVhbj0xMjgwMixlLnRpbGRlPTczMixlLnRpbGRlYmVsb3djbWI9ODE2LGUudGlsZGVjbWI9NzcxLGUudGlsZGVjb21iPTc3MSxlLnRpbGRlZG91YmxlY21iPTg2NCxlLnRpbGRlb3BlcmF0b3I9ODc2NCxlLnRpbGRlb3ZlcmxheWNtYj04MjAsZS50aWxkZXZlcnRpY2FsY21iPTgzMCxlLnRpbWVzY2lyY2xlPTg4NTUsZS50aXBlaGFoZWJyZXc9MTQzMCxlLnRpcGVoYWxlZnRoZWJyZXc9MTQzMCxlLnRpcHBpZ3VybXVraGk9MjY3MixlLnRpdGxvY3lyaWxsaWNjbWI9MTE1NSxlLnRpd25hcm1lbmlhbj0xNDA3LGUudGxpbmViZWxvdz03NzkxLGUudG1vbm9zcGFjZT02NTM2NCxlLnRvYXJtZW5pYW49MTM4NSxlLnRvaGlyYWdhbmE9MTIzOTIsZS50b2thdGFrYW5hPTEyNDg4LGUudG9rYXRha2FuYWhhbGZ3aWR0aD02NTQxMixlLnRvbmViYXJleHRyYWhpZ2htb2Q9NzQxLGUudG9uZWJhcmV4dHJhbG93bW9kPTc0NSxlLnRvbmViYXJoaWdobW9kPTc0MixlLnRvbmViYXJsb3dtb2Q9NzQ0LGUudG9uZWJhcm1pZG1vZD03NDMsZS50b25lZml2ZT00NDUsZS50b25lc2l4PTM4OSxlLnRvbmV0d289NDI0LGUudG9ub3M9OTAwLGUudG9uc3F1YXJlPTEzMDk1LGUudG9wYXRha3RoYWk9MzU5OSxlLnRvcnRvaXNlc2hlbGxicmFja2V0bGVmdD0xMjMwOCxlLnRvcnRvaXNlc2hlbGxicmFja2V0bGVmdHNtYWxsPTY1MTE3LGUudG9ydG9pc2VzaGVsbGJyYWNrZXRsZWZ0dmVydGljYWw9NjUwODEsZS50b3J0b2lzZXNoZWxsYnJhY2tldHJpZ2h0PTEyMzA5LGUudG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodHNtYWxsPTY1MTE4LGUudG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodHZlcnRpY2FsPTY1MDgyLGUudG90YW90aGFpPTM2MDUsZS50cGFsYXRhbGhvb2s9NDI3LGUudHBhcmVuPTkzOTEsZS50cmFkZW1hcms9ODQ4MixlLnRyYWRlbWFya3NhbnM9NjM3MjIsZS50cmFkZW1hcmtzZXJpZj02MzE5NSxlLnRyZXRyb2ZsZXhob29rPTY0OCxlLnRyaWFnZG49OTY2MCxlLnRyaWFnbGY9OTY2OCxlLnRyaWFncnQ9OTY1OCxlLnRyaWFndXA9OTY1MCxlLnRzPTY3OCxlLnRzYWRpPTE1MTAsZS50c2FkaWRhZ2VzaD02NDMyNixlLnRzYWRpZGFnZXNoaGVicmV3PTY0MzI2LGUudHNhZGloZWJyZXc9MTUxMCxlLnRzZWN5cmlsbGljPTEwOTQsZS50c2VyZT0xNDYxLGUudHNlcmUxMj0xNDYxLGUudHNlcmUxZT0xNDYxLGUudHNlcmUyYj0xNDYxLGUudHNlcmVoZWJyZXc9MTQ2MSxlLnRzZXJlbmFycm93aGVicmV3PTE0NjEsZS50c2VyZXF1YXJ0ZXJoZWJyZXc9MTQ2MSxlLnRzZXJld2lkZWhlYnJldz0xNDYxLGUudHNoZWN5cmlsbGljPTExMTUsZS50c3VwZXJpb3I9NjMyMTksZS50dGFiZW5nYWxpPTI0NjMsZS50dGFkZXZhPTIzMzUsZS50dGFndWphcmF0aT0yNzE5LGUudHRhZ3VybXVraGk9MjU5MSxlLnR0ZWhhcmFiaWM9MTY1NyxlLnR0ZWhmaW5hbGFyYWJpYz02NDM1OSxlLnR0ZWhpbml0aWFsYXJhYmljPTY0MzYwLGUudHRlaG1lZGlhbGFyYWJpYz02NDM2MSxlLnR0aGFiZW5nYWxpPTI0NjQsZS50dGhhZGV2YT0yMzM2LGUudHRoYWd1amFyYXRpPTI3MjAsZS50dGhhZ3VybXVraGk9MjU5MixlLnR0dXJuZWQ9NjQ3LGUudHVoaXJhZ2FuYT0xMjM4OCxlLnR1a2F0YWthbmE9MTI0ODQsZS50dWthdGFrYW5haGFsZndpZHRoPTY1NDEwLGUudHVzbWFsbGhpcmFnYW5hPTEyMzg3LGUudHVzbWFsbGthdGFrYW5hPTEyNDgzLGUudHVzbWFsbGthdGFrYW5haGFsZndpZHRoPTY1MzkxLGUudHdlbHZlY2lyY2xlPTkzMjMsZS50d2VsdmVwYXJlbj05MzQzLGUudHdlbHZlcGVyaW9kPTkzNjMsZS50d2VsdmVyb21hbj04NTcxLGUudHdlbnR5Y2lyY2xlPTkzMzEsZS50d2VudHloYW5nemhvdT0yMTMxNixlLnR3ZW50eXBhcmVuPTkzNTEsZS50d2VudHlwZXJpb2Q9OTM3MSxlLnR3bz01MCxlLnR3b2FyYWJpYz0xNjM0LGUudHdvYmVuZ2FsaT0yNTM2LGUudHdvY2lyY2xlPTkzMTMsZS50d29jaXJjbGVpbnZlcnNlc2Fuc3NlcmlmPTEwMTIzLGUudHdvZGV2YT0yNDA4LGUudHdvZG90ZW5sZWFkZXI9ODIyOSxlLnR3b2RvdGxlYWRlcj04MjI5LGUudHdvZG90bGVhZGVydmVydGljYWw9NjUwNzIsZS50d29ndWphcmF0aT0yNzkyLGUudHdvZ3VybXVraGk9MjY2NCxlLnR3b2hhY2thcmFiaWM9MTYzNCxlLnR3b2hhbmd6aG91PTEyMzIyLGUudHdvaWRlb2dyYXBoaWNwYXJlbj0xMjgzMyxlLnR3b2luZmVyaW9yPTgzMjIsZS50d29tb25vc3BhY2U9NjUyOTgsZS50d29udW1lcmF0b3JiZW5nYWxpPTI1NDksZS50d29vbGRzdHlsZT02MzI4MixlLnR3b3BhcmVuPTkzMzMsZS50d29wZXJpb2Q9OTM1MyxlLnR3b3BlcnNpYW49MTc3OCxlLnR3b3JvbWFuPTg1NjEsZS50d29zdHJva2U9NDQzLGUudHdvc3VwZXJpb3I9MTc4LGUudHdvdGhhaT0zNjY2LGUudHdvdGhpcmRzPTg1MzIsZS51PTExNyxlLnVhY3V0ZT0yNTAsZS51YmFyPTY0OSxlLnViZW5nYWxpPTI0NDEsZS51Ym9wb21vZm89MTI1ODQsZS51YnJldmU9MzY1LGUudWNhcm9uPTQ2OCxlLnVjaXJjbGU9OTQ0NCxlLnVjaXJjdW1mbGV4PTI1MSxlLnVjaXJjdW1mbGV4YmVsb3c9Nzc5OSxlLnVjeXJpbGxpYz0xMDkxLGUudWRhdHRhZGV2YT0yMzg1LGUudWRibGFjdXRlPTM2OSxlLnVkYmxncmF2ZT01MzMsZS51ZGV2YT0yMzEzLGUudWRpZXJlc2lzPTI1MixlLnVkaWVyZXNpc2FjdXRlPTQ3MixlLnVkaWVyZXNpc2JlbG93PTc3OTUsZS51ZGllcmVzaXNjYXJvbj00NzQsZS51ZGllcmVzaXNjeXJpbGxpYz0xMjY1LGUudWRpZXJlc2lzZ3JhdmU9NDc2LGUudWRpZXJlc2lzbWFjcm9uPTQ3MCxlLnVkb3RiZWxvdz03OTA5LGUudWdyYXZlPTI0OSxlLnVndWphcmF0aT0yNjk3LGUudWd1cm11a2hpPTI1NjksZS51aGlyYWdhbmE9MTIzNTgsZS51aG9va2Fib3ZlPTc5MTEsZS51aG9ybj00MzIsZS51aG9ybmFjdXRlPTc5MTMsZS51aG9ybmRvdGJlbG93PTc5MjEsZS51aG9ybmdyYXZlPTc5MTUsZS51aG9ybmhvb2thYm92ZT03OTE3LGUudWhvcm50aWxkZT03OTE5LGUudWh1bmdhcnVtbGF1dD0zNjksZS51aHVuZ2FydW1sYXV0Y3lyaWxsaWM9MTI2NyxlLnVpbnZlcnRlZGJyZXZlPTUzNSxlLnVrYXRha2FuYT0xMjQ1NCxlLnVrYXRha2FuYWhhbGZ3aWR0aD02NTM5NSxlLnVrY3lyaWxsaWM9MTE0NSxlLnVrb3JlYW49MTI2MzYsZS51bWFjcm9uPTM2MyxlLnVtYWNyb25jeXJpbGxpYz0xMjYzLGUudW1hY3JvbmRpZXJlc2lzPTc4MDMsZS51bWF0cmFndXJtdWtoaT0yNjI1LGUudW1vbm9zcGFjZT02NTM2NSxlLnVuZGVyc2NvcmU9OTUsZS51bmRlcnNjb3JlZGJsPTgyMTUsZS51bmRlcnNjb3JlbW9ub3NwYWNlPTY1MzQzLGUudW5kZXJzY29yZXZlcnRpY2FsPTY1MDc1LGUudW5kZXJzY29yZXdhdnk9NjUxMDMsZS51bmlvbj04NzQ2LGUudW5pdmVyc2FsPTg3MDQsZS51b2dvbmVrPTM3MSxlLnVwYXJlbj05MzkyLGUudXBibG9jaz05NjAwLGUudXBwZXJkb3RoZWJyZXc9MTQ3NixlLnVwc2lsb249OTY1LGUudXBzaWxvbmRpZXJlc2lzPTk3MSxlLnVwc2lsb25kaWVyZXNpc3Rvbm9zPTk0NCxlLnVwc2lsb25sYXRpbj02NTAsZS51cHNpbG9udG9ub3M9OTczLGUudXB0YWNrYmVsb3djbWI9Nzk3LGUudXB0YWNrbW9kPTcyNCxlLnVyYWd1cm11a2hpPTI2NzUsZS51cmluZz0zNjcsZS51c2hvcnRjeXJpbGxpYz0xMTE4LGUudXNtYWxsaGlyYWdhbmE9MTIzNTcsZS51c21hbGxrYXRha2FuYT0xMjQ1MyxlLnVzbWFsbGthdGFrYW5haGFsZndpZHRoPTY1Mzg1LGUudXN0cmFpZ2h0Y3lyaWxsaWM9MTE5OSxlLnVzdHJhaWdodHN0cm9rZWN5cmlsbGljPTEyMDEsZS51dGlsZGU9MzYxLGUudXRpbGRlYWN1dGU9NzgwMSxlLnV0aWxkZWJlbG93PTc3OTcsZS51dWJlbmdhbGk9MjQ0MixlLnV1ZGV2YT0yMzE0LGUudXVndWphcmF0aT0yNjk4LGUudXVndXJtdWtoaT0yNTcwLGUudXVtYXRyYWd1cm11a2hpPTI2MjYsZS51dXZvd2Vsc2lnbmJlbmdhbGk9MjQ5OCxlLnV1dm93ZWxzaWduZGV2YT0yMzcwLGUudXV2b3dlbHNpZ25ndWphcmF0aT0yNzU0LGUudXZvd2Vsc2lnbmJlbmdhbGk9MjQ5NyxlLnV2b3dlbHNpZ25kZXZhPTIzNjksZS51dm93ZWxzaWduZ3VqYXJhdGk9Mjc1MyxlLnY9MTE4LGUudmFkZXZhPTIzNTcsZS52YWd1amFyYXRpPTI3NDEsZS52YWd1cm11a2hpPTI2MTMsZS52YWthdGFrYW5hPTEyNTM1LGUudmF2PTE0OTMsZS52YXZkYWdlc2g9NjQzMDksZS52YXZkYWdlc2g2NT02NDMwOSxlLnZhdmRhZ2VzaGhlYnJldz02NDMwOSxlLnZhdmhlYnJldz0xNDkzLGUudmF2aG9sYW09NjQzMzEsZS52YXZob2xhbWhlYnJldz02NDMzMSxlLnZhdnZhdmhlYnJldz0xNTIwLGUudmF2eW9kaGVicmV3PTE1MjEsZS52Y2lyY2xlPTk0NDUsZS52ZG90YmVsb3c9NzgwNyxlLnZlY3lyaWxsaWM9MTA3NCxlLnZlaGFyYWJpYz0xNzAwLGUudmVoZmluYWxhcmFiaWM9NjQzNjMsZS52ZWhpbml0aWFsYXJhYmljPTY0MzY0LGUudmVobWVkaWFsYXJhYmljPTY0MzY1LGUudmVrYXRha2FuYT0xMjUzNyxlLnZlbnVzPTk3OTIsZS52ZXJ0aWNhbGJhcj0xMjQsZS52ZXJ0aWNhbGxpbmVhYm92ZWNtYj03ODEsZS52ZXJ0aWNhbGxpbmViZWxvd2NtYj04MDksZS52ZXJ0aWNhbGxpbmVsb3dtb2Q9NzE2LGUudmVydGljYWxsaW5lbW9kPTcxMixlLnZld2FybWVuaWFuPTE0MDYsZS52aG9vaz02NTEsZS52aWthdGFrYW5hPTEyNTM2LGUudmlyYW1hYmVuZ2FsaT0yNTA5LGUudmlyYW1hZGV2YT0yMzgxLGUudmlyYW1hZ3VqYXJhdGk9Mjc2NSxlLnZpc2FyZ2FiZW5nYWxpPTI0MzUsZS52aXNhcmdhZGV2YT0yMzA3LGUudmlzYXJnYWd1amFyYXRpPTI2OTEsZS52bW9ub3NwYWNlPTY1MzY2LGUudm9hcm1lbmlhbj0xNDAwLGUudm9pY2VkaXRlcmF0aW9uaGlyYWdhbmE9MTI0NDYsZS52b2ljZWRpdGVyYXRpb25rYXRha2FuYT0xMjU0MixlLnZvaWNlZG1hcmtrYW5hPTEyNDQzLGUudm9pY2VkbWFya2thbmFoYWxmd2lkdGg9NjU0MzgsZS52b2thdGFrYW5hPTEyNTM4LGUudnBhcmVuPTkzOTMsZS52dGlsZGU9NzgwNSxlLnZ0dXJuZWQ9NjUyLGUudnVoaXJhZ2FuYT0xMjQzNixlLnZ1a2F0YWthbmE9MTI1MzIsZS53PTExOSxlLndhY3V0ZT03ODExLGUud2Fla29yZWFuPTEyNjMzLGUud2FoaXJhZ2FuYT0xMjQzMSxlLndha2F0YWthbmE9MTI1MjcsZS53YWthdGFrYW5haGFsZndpZHRoPTY1NDM2LGUud2Frb3JlYW49MTI2MzIsZS53YXNtYWxsaGlyYWdhbmE9MTI0MzAsZS53YXNtYWxsa2F0YWthbmE9MTI1MjYsZS53YXR0b3NxdWFyZT0xMzE0MyxlLndhdmVkYXNoPTEyMzE2LGUud2F2eXVuZGVyc2NvcmV2ZXJ0aWNhbD02NTA3NixlLndhd2FyYWJpYz0xNjA4LGUud2F3ZmluYWxhcmFiaWM9NjUyNjIsZS53YXdoYW16YWFib3ZlYXJhYmljPTE1NzIsZS53YXdoYW16YWFib3ZlZmluYWxhcmFiaWM9NjUxNTgsZS53YnNxdWFyZT0xMzI3NyxlLndjaXJjbGU9OTQ0NixlLndjaXJjdW1mbGV4PTM3MyxlLndkaWVyZXNpcz03ODEzLGUud2RvdGFjY2VudD03ODE1LGUud2RvdGJlbG93PTc4MTcsZS53ZWhpcmFnYW5hPTEyNDMzLGUud2VpZXJzdHJhc3M9ODQ3MixlLndla2F0YWthbmE9MTI1MjksZS53ZWtvcmVhbj0xMjYzOCxlLndlb2tvcmVhbj0xMjYzNyxlLndncmF2ZT03ODA5LGUud2hpdGVidWxsZXQ9OTcwMixlLndoaXRlY2lyY2xlPTk2NzUsZS53aGl0ZWNpcmNsZWludmVyc2U9OTY4OSxlLndoaXRlY29ybmVyYnJhY2tldGxlZnQ9MTIzMDIsZS53aGl0ZWNvcm5lcmJyYWNrZXRsZWZ0dmVydGljYWw9NjUwOTEsZS53aGl0ZWNvcm5lcmJyYWNrZXRyaWdodD0xMjMwMyxlLndoaXRlY29ybmVyYnJhY2tldHJpZ2h0dmVydGljYWw9NjUwOTIsZS53aGl0ZWRpYW1vbmQ9OTY3MSxlLndoaXRlZGlhbW9uZGNvbnRhaW5pbmdibGFja3NtYWxsZGlhbW9uZD05NjcyLGUud2hpdGVkb3ducG9pbnRpbmdzbWFsbHRyaWFuZ2xlPTk2NjM7ZS53aGl0ZWRvd25wb2ludGluZ3RyaWFuZ2xlPTk2NjEsZS53aGl0ZWxlZnRwb2ludGluZ3NtYWxsdHJpYW5nbGU9OTY2NyxlLndoaXRlbGVmdHBvaW50aW5ndHJpYW5nbGU9OTY2NSxlLndoaXRlbGVudGljdWxhcmJyYWNrZXRsZWZ0PTEyMzEwLGUud2hpdGVsZW50aWN1bGFyYnJhY2tldHJpZ2h0PTEyMzExLGUud2hpdGVyaWdodHBvaW50aW5nc21hbGx0cmlhbmdsZT05NjU3LGUud2hpdGVyaWdodHBvaW50aW5ndHJpYW5nbGU9OTY1NSxlLndoaXRlc21hbGxzcXVhcmU9OTY0MyxlLndoaXRlc21pbGluZ2ZhY2U9OTc4NixlLndoaXRlc3F1YXJlPTk2MzMsZS53aGl0ZXN0YXI9OTczNCxlLndoaXRldGVsZXBob25lPTk3NDMsZS53aGl0ZXRvcnRvaXNlc2hlbGxicmFja2V0bGVmdD0xMjMxMixlLndoaXRldG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodD0xMjMxMyxlLndoaXRldXBwb2ludGluZ3NtYWxsdHJpYW5nbGU9OTY1MyxlLndoaXRldXBwb2ludGluZ3RyaWFuZ2xlPTk2NTEsZS53aWhpcmFnYW5hPTEyNDMyLGUud2lrYXRha2FuYT0xMjUyOCxlLndpa29yZWFuPTEyNjM5LGUud21vbm9zcGFjZT02NTM2NyxlLndvaGlyYWdhbmE9MTI0MzQsZS53b2thdGFrYW5hPTEyNTMwLGUud29rYXRha2FuYWhhbGZ3aWR0aD02NTM4MixlLndvbj04MzYxLGUud29ubW9ub3NwYWNlPTY1NTEwLGUud293YWVudGhhaT0zNjIzLGUud3BhcmVuPTkzOTQsZS53cmluZz03ODMyLGUud3N1cGVyaW9yPTY5NSxlLnd0dXJuZWQ9NjUzLGUud3lubj00NDcsZS54PTEyMCxlLnhhYm92ZWNtYj04MjksZS54Ym9wb21vZm89MTI1NjIsZS54Y2lyY2xlPTk0NDcsZS54ZGllcmVzaXM9NzgyMSxlLnhkb3RhY2NlbnQ9NzgxOSxlLnhlaGFybWVuaWFuPTEzODksZS54aT05NTgsZS54bW9ub3NwYWNlPTY1MzY4LGUueHBhcmVuPTkzOTUsZS54c3VwZXJpb3I9NzM5LGUueT0xMjEsZS55YWFkb3NxdWFyZT0xMzEzNCxlLnlhYmVuZ2FsaT0yNDc5LGUueWFjdXRlPTI1MyxlLnlhZGV2YT0yMzUxLGUueWFla29yZWFuPTEyNjI2LGUueWFndWphcmF0aT0yNzM1LGUueWFndXJtdWtoaT0yNjA3LGUueWFoaXJhZ2FuYT0xMjQyMCxlLnlha2F0YWthbmE9MTI1MTYsZS55YWthdGFrYW5haGFsZndpZHRoPTY1NDI4LGUueWFrb3JlYW49MTI2MjUsZS55YW1ha2thbnRoYWk9MzY2MixlLnlhc21hbGxoaXJhZ2FuYT0xMjQxOSxlLnlhc21hbGxrYXRha2FuYT0xMjUxNSxlLnlhc21hbGxrYXRha2FuYWhhbGZ3aWR0aD02NTM4OCxlLnlhdGN5cmlsbGljPTExMjMsZS55Y2lyY2xlPTk0NDgsZS55Y2lyY3VtZmxleD0zNzUsZS55ZGllcmVzaXM9MjU1LGUueWRvdGFjY2VudD03ODIzLGUueWRvdGJlbG93PTc5MjUsZS55ZWhhcmFiaWM9MTYxMCxlLnllaGJhcnJlZWFyYWJpYz0xNzQ2LGUueWVoYmFycmVlZmluYWxhcmFiaWM9NjQ0MzEsZS55ZWhmaW5hbGFyYWJpYz02NTI2NixlLnllaGhhbXphYWJvdmVhcmFiaWM9MTU3NCxlLnllaGhhbXphYWJvdmVmaW5hbGFyYWJpYz02NTE2MixlLnllaGhhbXphYWJvdmVpbml0aWFsYXJhYmljPTY1MTYzLGUueWVoaGFtemFhYm92ZW1lZGlhbGFyYWJpYz02NTE2NCxlLnllaGluaXRpYWxhcmFiaWM9NjUyNjcsZS55ZWhtZWRpYWxhcmFiaWM9NjUyNjgsZS55ZWhtZWVtaW5pdGlhbGFyYWJpYz02NDczMyxlLnllaG1lZW1pc29sYXRlZGFyYWJpYz02NDYwMCxlLnllaG5vb25maW5hbGFyYWJpYz02NDY2MCxlLnllaHRocmVlZG90c2JlbG93YXJhYmljPTE3NDUsZS55ZWtvcmVhbj0xMjYzMCxlLnllbj0xNjUsZS55ZW5tb25vc3BhY2U9NjU1MDksZS55ZW9rb3JlYW49MTI2MjksZS55ZW9yaW5oaWV1aGtvcmVhbj0xMjY3OCxlLnllcmFoYmVueW9tb2hlYnJldz0xNDUwLGUueWVyYWhiZW55b21vbGVmdGhlYnJldz0xNDUwLGUueWVyaWN5cmlsbGljPTEwOTksZS55ZXJ1ZGllcmVzaXNjeXJpbGxpYz0xMjczLGUueWVzaWV1bmdrb3JlYW49MTI2NzMsZS55ZXNpZXVuZ3BhbnNpb3Nrb3JlYW49MTI2NzUsZS55ZXNpZXVuZ3Npb3Nrb3JlYW49MTI2NzQsZS55ZXRpdmhlYnJldz0xNDM0LGUueWdyYXZlPTc5MjMsZS55aG9vaz00MzYsZS55aG9va2Fib3ZlPTc5MjcsZS55aWFybWVuaWFuPTEzOTcsZS55aWN5cmlsbGljPTExMTEsZS55aWtvcmVhbj0xMjY0MixlLnlpbnlhbmc9OTc3NSxlLnlpd25hcm1lbmlhbj0xNDEwLGUueW1vbm9zcGFjZT02NTM2OSxlLnlvZD0xNDk3LGUueW9kZGFnZXNoPTY0MzEzLGUueW9kZGFnZXNoaGVicmV3PTY0MzEzLGUueW9kaGVicmV3PTE0OTcsZS55b2R5b2RoZWJyZXc9MTUyMixlLnlvZHlvZHBhdGFoaGVicmV3PTY0Mjg3LGUueW9oaXJhZ2FuYT0xMjQyNCxlLnlvaWtvcmVhbj0xMjY4MSxlLnlva2F0YWthbmE9MTI1MjAsZS55b2thdGFrYW5haGFsZndpZHRoPTY1NDMwLGUueW9rb3JlYW49MTI2MzUsZS55b3NtYWxsaGlyYWdhbmE9MTI0MjMsZS55b3NtYWxsa2F0YWthbmE9MTI1MTksZS55b3NtYWxsa2F0YWthbmFoYWxmd2lkdGg9NjUzOTAsZS55b3RncmVlaz0xMDExLGUueW95YWVrb3JlYW49MTI2ODAsZS55b3lha29yZWFuPTEyNjc5LGUueW95YWt0aGFpPTM2MTgsZS55b3lpbmd0aGFpPTM1OTcsZS55cGFyZW49OTM5NixlLnlwb2dlZ3JhbW1lbmk9ODkwLGUueXBvZ2VncmFtbWVuaWdyZWVrY21iPTgzNyxlLnlyPTQyMixlLnlyaW5nPTc4MzMsZS55c3VwZXJpb3I9Njk2LGUueXRpbGRlPTc5MjksZS55dHVybmVkPTY1NCxlLnl1aGlyYWdhbmE9MTI0MjIsZS55dWlrb3JlYW49MTI2ODQsZS55dWthdGFrYW5hPTEyNTE4LGUueXVrYXRha2FuYWhhbGZ3aWR0aD02NTQyOSxlLnl1a29yZWFuPTEyNjQwLGUueXVzYmlnY3lyaWxsaWM9MTEzMSxlLnl1c2JpZ2lvdGlmaWVkY3lyaWxsaWM9MTEzMyxlLnl1c2xpdHRsZWN5cmlsbGljPTExMjcsZS55dXNsaXR0bGVpb3RpZmllZGN5cmlsbGljPTExMjksZS55dXNtYWxsaGlyYWdhbmE9MTI0MjEsZS55dXNtYWxsa2F0YWthbmE9MTI1MTcsZS55dXNtYWxsa2F0YWthbmFoYWxmd2lkdGg9NjUzODksZS55dXlla29yZWFuPTEyNjgzLGUueXV5ZW9rb3JlYW49MTI2ODIsZS55eWFiZW5nYWxpPTI1MjcsZS55eWFkZXZhPTIzOTksZS56PTEyMixlLnphYXJtZW5pYW49MTM4MixlLnphY3V0ZT0zNzgsZS56YWRldmE9MjM5NSxlLnphZ3VybXVraGk9MjY1MSxlLnphaGFyYWJpYz0xNTkyLGUuemFoZmluYWxhcmFiaWM9NjUyMjIsZS56YWhpbml0aWFsYXJhYmljPTY1MjIzLGUuemFoaXJhZ2FuYT0xMjM3NCxlLnphaG1lZGlhbGFyYWJpYz02NTIyNCxlLnphaW5hcmFiaWM9MTU4NixlLnphaW5maW5hbGFyYWJpYz02NTIwMCxlLnpha2F0YWthbmE9MTI0NzAsZS56YXFlZmdhZG9saGVicmV3PTE0MjksZS56YXFlZnFhdGFuaGVicmV3PTE0MjgsZS56YXJxYWhlYnJldz0xNDMyLGUuemF5aW49MTQ5NCxlLnpheWluZGFnZXNoPTY0MzEwLGUuemF5aW5kYWdlc2hoZWJyZXc9NjQzMTAsZS56YXlpbmhlYnJldz0xNDk0LGUuemJvcG9tb2ZvPTEyNTY3LGUuemNhcm9uPTM4MixlLnpjaXJjbGU9OTQ0OSxlLnpjaXJjdW1mbGV4PTc4MjUsZS56Y3VybD02NTcsZS56ZG90PTM4MCxlLnpkb3RhY2NlbnQ9MzgwLGUuemRvdGJlbG93PTc4MjcsZS56ZWN5cmlsbGljPTEwNzksZS56ZWRlc2NlbmRlcmN5cmlsbGljPTExNzcsZS56ZWRpZXJlc2lzY3lyaWxsaWM9MTI0NyxlLnplaGlyYWdhbmE9MTIzODAsZS56ZWthdGFrYW5hPTEyNDc2LGUuemVybz00OCxlLnplcm9hcmFiaWM9MTYzMixlLnplcm9iZW5nYWxpPTI1MzQsZS56ZXJvZGV2YT0yNDA2LGUuemVyb2d1amFyYXRpPTI3OTAsZS56ZXJvZ3VybXVraGk9MjY2MixlLnplcm9oYWNrYXJhYmljPTE2MzIsZS56ZXJvaW5mZXJpb3I9ODMyMCxlLnplcm9tb25vc3BhY2U9NjUyOTYsZS56ZXJvb2xkc3R5bGU9NjMyODAsZS56ZXJvcGVyc2lhbj0xNzc2LGUuemVyb3N1cGVyaW9yPTgzMDQsZS56ZXJvdGhhaT0zNjY0LGUuemVyb3dpZHRoam9pbmVyPTY1Mjc5LGUuemVyb3dpZHRobm9uam9pbmVyPTgyMDQsZS56ZXJvd2lkdGhzcGFjZT04MjAzLGUuemV0YT05NTAsZS56aGJvcG9tb2ZvPTEyNTYzLGUuemhlYXJtZW5pYW49MTM4NixlLnpoZWJyZXZlY3lyaWxsaWM9MTIxOCxlLnpoZWN5cmlsbGljPTEwNzgsZS56aGVkZXNjZW5kZXJjeXJpbGxpYz0xMTc1LGUuemhlZGllcmVzaXNjeXJpbGxpYz0xMjQ1LGUuemloaXJhZ2FuYT0xMjM3NixlLnppa2F0YWthbmE9MTI0NzIsZS56aW5vcmhlYnJldz0xNDU0LGUuemxpbmViZWxvdz03ODI5LGUuem1vbm9zcGFjZT02NTM3MCxlLnpvaGlyYWdhbmE9MTIzODIsZS56b2thdGFrYW5hPTEyNDc4LGUuenBhcmVuPTkzOTcsZS56cmV0cm9mbGV4aG9vaz02NTYsZS56c3Ryb2tlPTQzOCxlLnp1aGlyYWdhbmE9MTIzNzgsZS56dWthdGFrYW5hPTEyNDc0LGVbIi5ub3RkZWYiXT0wLGUuYW5nYnJhY2tldGxlZnRiaWc9OTAwMSxlLmFuZ2JyYWNrZXRsZWZ0QmlnPTkwMDEsZS5hbmdicmFja2V0bGVmdGJpZ2c9OTAwMSxlLmFuZ2JyYWNrZXRsZWZ0QmlnZz05MDAxLGUuYW5nYnJhY2tldHJpZ2h0QmlnPTkwMDIsZS5hbmdicmFja2V0cmlnaHRiaWc9OTAwMixlLmFuZ2JyYWNrZXRyaWdodEJpZ2c9OTAwMixlLmFuZ2JyYWNrZXRyaWdodGJpZ2c9OTAwMixlLmFycm93aG9va2xlZnQ9ODYxOCxlLmFycm93aG9va3JpZ2h0PTg2MTcsZS5hcnJvd2xlZnR0b3BoYWxmPTg2MzYsZS5hcnJvd2xlZnRib3RoYWxmPTg2MzcsZS5hcnJvd25vcnRoZWFzdD04NTk5LGUuYXJyb3dub3J0aHdlc3Q9ODU5OCxlLmFycm93cmlnaHR0b3BoYWxmPTg2NDAsZS5hcnJvd3JpZ2h0Ym90aGFsZj04NjQxLGUuYXJyb3dzb3V0aGVhc3Q9ODYwMCxlLmFycm93c291dGh3ZXN0PTg2MDEsZS5iYWNrc2xhc2hiaWc9ODcyNixlLmJhY2tzbGFzaEJpZz04NzI2LGUuYmFja3NsYXNoQmlnZz04NzI2LGUuYmFja3NsYXNoYmlnZz04NzI2LGUuYmFyZGJsPTgyMTQsZS5icmFjZWh0aXBkb3dubGVmdD02NTA3OSxlLmJyYWNlaHRpcGRvd25yaWdodD02NTA3OSxlLmJyYWNlaHRpcHVwbGVmdD02NTA4MCxlLmJyYWNlaHRpcHVwcmlnaHQ9NjUwODAsZS5icmFjZWxlZnRCaWc9MTIzLGUuYnJhY2VsZWZ0YmlnPTEyMyxlLmJyYWNlbGVmdGJpZ2c9MTIzLGUuYnJhY2VsZWZ0QmlnZz0xMjMsZS5icmFjZXJpZ2h0QmlnPTEyNSxlLmJyYWNlcmlnaHRiaWc9MTI1LGUuYnJhY2VyaWdodGJpZ2c9MTI1LGUuYnJhY2VyaWdodEJpZ2c9MTI1LGUuYnJhY2tldGxlZnRiaWc9OTEsZS5icmFja2V0bGVmdEJpZz05MSxlLmJyYWNrZXRsZWZ0YmlnZz05MSxlLmJyYWNrZXRsZWZ0QmlnZz05MSxlLmJyYWNrZXRyaWdodEJpZz05MyxlLmJyYWNrZXRyaWdodGJpZz05MyxlLmJyYWNrZXRyaWdodGJpZ2c9OTMsZS5icmFja2V0cmlnaHRCaWdnPTkzLGUuY2VpbGluZ2xlZnRiaWc9ODk2OCxlLmNlaWxpbmdsZWZ0QmlnPTg5NjgsZS5jZWlsaW5nbGVmdEJpZ2c9ODk2OCxlLmNlaWxpbmdsZWZ0YmlnZz04OTY4LGUuY2VpbGluZ3JpZ2h0YmlnPTg5NjksZS5jZWlsaW5ncmlnaHRCaWc9ODk2OSxlLmNlaWxpbmdyaWdodGJpZ2c9ODk2OSxlLmNlaWxpbmdyaWdodEJpZ2c9ODk2OSxlLmNpcmNsZWRvdGRpc3BsYXk9ODg1NyxlLmNpcmNsZWRvdHRleHQ9ODg1NyxlLmNpcmNsZW11bHRpcGx5ZGlzcGxheT04ODU1LGUuY2lyY2xlbXVsdGlwbHl0ZXh0PTg4NTUsZS5jaXJjbGVwbHVzZGlzcGxheT04ODUzLGUuY2lyY2xlcGx1c3RleHQ9ODg1MyxlLmNvbnRpbnRlZ3JhbGRpc3BsYXk9ODc1MCxlLmNvbnRpbnRlZ3JhbHRleHQ9ODc1MCxlLmNvcHJvZHVjdGRpc3BsYXk9ODcyMCxlLmNvcHJvZHVjdHRleHQ9ODcyMCxlLmZsb29ybGVmdEJpZz04OTcwLGUuZmxvb3JsZWZ0YmlnPTg5NzAsZS5mbG9vcmxlZnRiaWdnPTg5NzAsZS5mbG9vcmxlZnRCaWdnPTg5NzAsZS5mbG9vcnJpZ2h0YmlnPTg5NzEsZS5mbG9vcnJpZ2h0QmlnPTg5NzEsZS5mbG9vcnJpZ2h0QmlnZz04OTcxLGUuZmxvb3JyaWdodGJpZ2c9ODk3MSxlLmhhdHdpZGU9NzcwLGUuaGF0d2lkZXI9NzcwLGUuaGF0d2lkZXN0PTc3MCxlLmludGVyY2FsPTc0ODgsZS5pbnRlZ3JhbGRpc3BsYXk9ODc0NyxlLmludGVncmFsdGV4dD04NzQ3LGUuaW50ZXJzZWN0aW9uZGlzcGxheT04ODk4LGUuaW50ZXJzZWN0aW9udGV4dD04ODk4LGUubG9naWNhbGFuZGRpc3BsYXk9ODc0MyxlLmxvZ2ljYWxhbmR0ZXh0PTg3NDMsZS5sb2dpY2Fsb3JkaXNwbGF5PTg3NDQsZS5sb2dpY2Fsb3J0ZXh0PTg3NDQsZS5wYXJlbmxlZnRCaWc9NDAsZS5wYXJlbmxlZnRiaWc9NDAsZS5wYXJlbmxlZnRCaWdnPTQwLGUucGFyZW5sZWZ0YmlnZz00MCxlLnBhcmVucmlnaHRCaWc9NDEsZS5wYXJlbnJpZ2h0YmlnPTQxLGUucGFyZW5yaWdodEJpZ2c9NDEsZS5wYXJlbnJpZ2h0YmlnZz00MSxlLnByaW1lPTgyNDIsZS5wcm9kdWN0ZGlzcGxheT04NzE5LGUucHJvZHVjdHRleHQ9ODcxOSxlLnJhZGljYWxiaWc9ODczMCxlLnJhZGljYWxCaWc9ODczMCxlLnJhZGljYWxCaWdnPTg3MzAsZS5yYWRpY2FsYmlnZz04NzMwLGUucmFkaWNhbGJ0PTg3MzAsZS5yYWRpY2FsdHA9ODczMCxlLnJhZGljYWx2ZXJ0ZXg9ODczMCxlLnNsYXNoYmlnPTQ3LGUuc2xhc2hCaWc9NDcsZS5zbGFzaEJpZ2c9NDcsZS5zbGFzaGJpZ2c9NDcsZS5zdW1tYXRpb25kaXNwbGF5PTg3MjEsZS5zdW1tYXRpb250ZXh0PTg3MjEsZS50aWxkZXdpZGU9NzMyLGUudGlsZGV3aWRlcj03MzIsZS50aWxkZXdpZGVzdD03MzIsZS51bmlvbmRpc3BsYXk9ODg5OSxlLnVuaW9ubXVsdGlkaXNwbGF5PTg4NDYsZS51bmlvbm11bHRpdGV4dD04ODQ2LGUudW5pb25zcWRpc3BsYXk9ODg1MixlLnVuaW9uc3F0ZXh0PTg4NTIsZS51bmlvbnRleHQ9ODg5OSxlLnZleHRlbmRkb3VibGU9ODc0MSxlLnZleHRlbmRzaW5nbGU9ODczOX0pKSxpPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5zcGFjZT0zMixlLmExPTk5ODUsZS5hMj05OTg2LGUuYTIwMj05OTg3LGUuYTM9OTk4OCxlLmE0PTk3NDIsZS5hNT05OTkwLGUuYTExOT05OTkxLGUuYTExOD05OTkyLGUuYTExNz05OTkzLGUuYTExPTk3NTUsZS5hMTI9OTc1OCxlLmExMz05OTk2LGUuYTE0PTk5OTcsZS5hMTU9OTk5OCxlLmExNj05OTk5LGUuYTEwNT0xZTQsZS5hMTc9MTAwMDEsZS5hMTg9MTAwMDIsZS5hMTk9MTAwMDMsZS5hMjA9MTAwMDQsZS5hMjE9MTAwMDUsZS5hMjI9MTAwMDYsZS5hMjM9MTAwMDcsZS5hMjQ9MTAwMDgsZS5hMjU9MTAwMDksZS5hMjY9MTAwMTAsZS5hMjc9MTAwMTEsZS5hMjg9MTAwMTIsZS5hNj0xMDAxMyxlLmE3PTEwMDE0LGUuYTg9MTAwMTUsZS5hOT0xMDAxNixlLmExMD0xMDAxNyxlLmEyOT0xMDAxOCxlLmEzMD0xMDAxOSxlLmEzMT0xMDAyMCxlLmEzMj0xMDAyMSxlLmEzMz0xMDAyMixlLmEzND0xMDAyMyxlLmEzNT05NzMzLGUuYTM2PTEwMDI1LGUuYTM3PTEwMDI2LGUuYTM4PTEwMDI3LGUuYTM5PTEwMDI4LGUuYTQwPTEwMDI5LGUuYTQxPTEwMDMwLGUuYTQyPTEwMDMxLGUuYTQzPTEwMDMyLGUuYTQ0PTEwMDMzLGUuYTQ1PTEwMDM0LGUuYTQ2PTEwMDM1LGUuYTQ3PTEwMDM2LGUuYTQ4PTEwMDM3LGUuYTQ5PTEwMDM4LGUuYTUwPTEwMDM5LGUuYTUxPTEwMDQwLGUuYTUyPTEwMDQxLGUuYTUzPTEwMDQyLGUuYTU0PTEwMDQzLGUuYTU1PTEwMDQ0LGUuYTU2PTEwMDQ1LGUuYTU3PTEwMDQ2LGUuYTU4PTEwMDQ3LGUuYTU5PTEwMDQ4LGUuYTYwPTEwMDQ5LGUuYTYxPTEwMDUwLGUuYTYyPTEwMDUxLGUuYTYzPTEwMDUyLGUuYTY0PTEwMDUzLGUuYTY1PTEwMDU0LGUuYTY2PTEwMDU1LGUuYTY3PTEwMDU2LGUuYTY4PTEwMDU3LGUuYTY5PTEwMDU4LGUuYTcwPTEwMDU5LGUuYTcxPTk2NzksZS5hNzI9MTAwNjEsZS5hNzM9OTYzMixlLmE3ND0xMDA2MyxlLmEyMDM9MTAwNjQsZS5hNzU9MTAwNjUsZS5hMjA0PTEwMDY2LGUuYTc2PTk2NTAsZS5hNzc9OTY2MCxlLmE3OD05NjcwLGUuYTc5PTEwMDcwLGUuYTgxPTk2ODcsZS5hODI9MTAwNzIsZS5hODM9MTAwNzMsZS5hODQ9MTAwNzQsZS5hOTc9MTAwNzUsZS5hOTg9MTAwNzYsZS5hOTk9MTAwNzcsZS5hMTAwPTEwMDc4LGUuYTEwMT0xMDA4MSxlLmExMDI9MTAwODIsZS5hMTAzPTEwMDgzLGUuYTEwND0xMDA4NCxlLmExMDY9MTAwODUsZS5hMTA3PTEwMDg2LGUuYTEwOD0xMDA4NyxlLmExMTI9OTgyNyxlLmExMTE9OTgzMCxlLmExMTA9OTgyOSxlLmExMDk9OTgyNCxlLmExMjA9OTMxMixlLmExMjE9OTMxMyxlLmExMjI9OTMxNCxlLmExMjM9OTMxNSxlLmExMjQ9OTMxNixlLmExMjU9OTMxNyxlLmExMjY9OTMxOCxlLmExMjc9OTMxOSxlLmExMjg9OTMyMCxlLmExMjk9OTMyMSxlLmExMzA9MTAxMDIsZS5hMTMxPTEwMTAzLGUuYTEzMj0xMDEwNCxlLmExMzM9MTAxMDUsZS5hMTM0PTEwMTA2LGUuYTEzNT0xMDEwNyxlLmExMzY9MTAxMDgsZS5hMTM3PTEwMTA5LGUuYTEzOD0xMDExMCxlLmExMzk9MTAxMTEsZS5hMTQwPTEwMTEyLGUuYTE0MT0xMDExMyxlLmExNDI9MTAxMTQsZS5hMTQzPTEwMTE1LGUuYTE0ND0xMDExNixlLmExNDU9MTAxMTcsZS5hMTQ2PTEwMTE4LGUuYTE0Nz0xMDExOSxlLmExNDg9MTAxMjAsZS5hMTQ5PTEwMTIxLGUuYTE1MD0xMDEyMixlLmExNTE9MTAxMjMsZS5hMTUyPTEwMTI0LGUuYTE1Mz0xMDEyNSxlLmExNTQ9MTAxMjYsZS5hMTU1PTEwMTI3LGUuYTE1Nj0xMDEyOCxlLmExNTc9MTAxMjksZS5hMTU4PTEwMTMwLGUuYTE1OT0xMDEzMSxlLmExNjA9MTAxMzIsZS5hMTYxPTg1OTQsZS5hMTYzPTg1OTYsZS5hMTY0PTg1OTcsZS5hMTk2PTEwMTM2LGUuYTE2NT0xMDEzNyxlLmExOTI9MTAxMzgsZS5hMTY2PTEwMTM5LGUuYTE2Nz0xMDE0MCxlLmExNjg9MTAxNDEsZS5hMTY5PTEwMTQyLGUuYTE3MD0xMDE0MyxlLmExNzE9MTAxNDQsZS5hMTcyPTEwMTQ1LGUuYTE3Mz0xMDE0NixlLmExNjI9MTAxNDcsZS5hMTc0PTEwMTQ4LGUuYTE3NT0xMDE0OSxlLmExNzY9MTAxNTAsZS5hMTc3PTEwMTUxLGUuYTE3OD0xMDE1MixlLmExNzk9MTAxNTMsZS5hMTkzPTEwMTU0LGUuYTE4MD0xMDE1NSxlLmExOTk9MTAxNTYsZS5hMTgxPTEwMTU3LGUuYTIwMD0xMDE1OCxlLmExODI9MTAxNTksZS5hMjAxPTEwMTYxLGUuYTE4Mz0xMDE2MixlLmExODQ9MTAxNjMsZS5hMTk3PTEwMTY0LGUuYTE4NT0xMDE2NSxlLmExOTQ9MTAxNjYsZS5hMTk4PTEwMTY3LGUuYTE4Nj0xMDE2OCxlLmExOTU9MTAxNjksZS5hMTg3PTEwMTcwLGUuYTE4OD0xMDE3MSxlLmExODk9MTAxNzIsZS5hMTkwPTEwMTczLGUuYTE5MT0xMDE3NCxlLmE4OT0xMDA4OCxlLmE5MD0xMDA4OSxlLmE5Mz0xMDA5MCxlLmE5ND0xMDA5MSxlLmE5MT0xMDA5MixlLmE5Mj0xMDA5MyxlLmEyMDU9MTAwOTQsZS5hODU9MTAwOTUsZS5hMjA2PTEwMDk2LGUuYTg2PTEwMDk3LGUuYTg3PTEwMDk4LGUuYTg4PTEwMDk5LGUuYTk1PTEwMTAwLGUuYTk2PTEwMTAxLGVbIi5ub3RkZWYiXT0wfSkpfSwoZSx0LHIpPT57ci5yKHQpLHIuZCh0LHtjbGVhclVuaWNvZGVDYWNoZXM6KCk9PnUsZ2V0Q2hhclVuaWNvZGVDYXRlZ29yeTooKT0+aCxnZXRVbmljb2RlRm9yR2x5cGg6KCk9PmksZ2V0VW5pY29kZVJhbmdlRm9yOigpPT5vLG1hcFNwZWNpYWxVbmljb2RlVmFsdWVzOigpPT5hfSk7Y29uc3Qgbj0oMCxyKDE0OSkuZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZVs2MzcyMV09MTY5LGVbNjMxOTNdPTE2OSxlWzYzNzIwXT0xNzQsZVs2MzE5NF09MTc0LGVbNjM3MjJdPTg0ODIsZVs2MzE5NV09ODQ4MixlWzYzNzI5XT05MTI3LGVbNjM3MzBdPTkxMjgsZVs2MzczMV09OTEyOSxlWzYzNzQwXT05MTMxLGVbNjM3NDFdPTkxMzIsZVs2Mzc0Ml09OTEzMyxlWzYzNzI2XT05MTIxLGVbNjM3MjddPTkxMjIsZVs2MzcyOF09OTEyMyxlWzYzNzM3XT05MTI0LGVbNjM3MzhdPTkxMjUsZVs2MzczOV09OTEyNixlWzYzNzIzXT05MTE1LGVbNjM3MjRdPTkxMTYsZVs2MzcyNV09OTExNyxlWzYzNzM0XT05MTE4LGVbNjM3MzVdPTkxMTksZVs2MzczNl09OTEyMH0pKTtmdW5jdGlvbiBhKGUpe3JldHVybiBlPj02NTUyMCYmZTw9NjU1MzU/MDplPj02Mjk3NiYmZTw9NjM3NDM/bigpW2VdfHxlOjE3Mz09PWU/NDU6ZX1mdW5jdGlvbiBpKGUsdCl7bGV0IHI9dFtlXTtpZih2b2lkIDAhPT1yKXJldHVybiByO2lmKCFlKXJldHVybi0xO2lmKCJ1Ij09PWVbMF0pe2NvbnN0IHQ9ZS5sZW5ndGg7bGV0IG47aWYoNz09PXQmJiJuIj09PWVbMV0mJiJpIj09PWVbMl0pbj1lLnN1YnN0cmluZygzKTtlbHNle2lmKCEodD49NSYmdDw9NykpcmV0dXJuLTE7bj1lLnN1YnN0cmluZygxKX1pZihuPT09bi50b1VwcGVyQ2FzZSgpJiYocj1wYXJzZUludChuLDE2KSxyPj0wKSlyZXR1cm4gcn1yZXR1cm4tMX1jb25zdCBzPVtbMCwxMjddLFsxMjgsMjU1XSxbMjU2LDM4M10sWzM4NCw1OTFdLFs1OTIsNjg3LDc0MjQsNzU1MSw3NTUyLDc2MTVdLFs2ODgsNzY3LDQyNzUyLDQyNzgzXSxbNzY4LDg3OSw3NjE2LDc2NzldLFs4ODAsMTAyM10sWzExMzkyLDExNTE5XSxbMTAyNCwxMjc5LDEyODAsMTMyNywxMTc0NCwxMTc3NSw0MjU2MCw0MjY1NV0sWzEzMjgsMTQyM10sWzE0MjQsMTUzNV0sWzQyMjQwLDQyNTU5XSxbMTUzNiwxNzkxLDE4NzIsMTkxOV0sWzE5ODQsMjA0N10sWzIzMDQsMjQzMV0sWzI0MzIsMjU1OV0sWzI1NjAsMjY4N10sWzI2ODgsMjgxNV0sWzI4MTYsMjk0M10sWzI5NDQsMzA3MV0sWzMwNzIsMzE5OV0sWzMyMDAsMzMyN10sWzMzMjgsMzQ1NV0sWzM1ODQsMzcxMV0sWzM3MTIsMzgzOV0sWzQyNTYsNDM1MSwxMTUyMCwxMTU2N10sWzY5MTIsNzAzOV0sWzQzNTIsNDYwN10sWzc2ODAsNzkzNSwxMTM2MCwxMTM5MSw0Mjc4NCw0MzAwN10sWzc5MzYsODE5MV0sWzgxOTIsODMwMywxMTc3NiwxMTkwM10sWzgzMDQsODM1MV0sWzgzNTIsODM5OV0sWzg0MDAsODQ0N10sWzg0NDgsODUyN10sWzg1MjgsODU5MV0sWzg1OTIsODcwMywxMDIyNCwxMDIzOSwxMDQ5NiwxMDYyMywxMTAwOCwxMTI2M10sWzg3MDQsODk1OSwxMDc1MiwxMTAwNywxMDE3NiwxMDIyMywxMDYyNCwxMDc1MV0sWzg5NjAsOTIxNV0sWzkyMTYsOTI3OV0sWzkyODAsOTMxMV0sWzkzMTIsOTQ3MV0sWzk0NzIsOTU5OV0sWzk2MDAsOTYzMV0sWzk2MzIsOTcyN10sWzk3MjgsOTk4M10sWzk5ODQsMTAxNzVdLFsxMjI4OCwxMjM1MV0sWzEyMzUyLDEyNDQ3XSxbMTI0NDgsMTI1NDMsMTI3ODQsMTI3OTldLFsxMjU0NCwxMjU5MSwxMjcwNCwxMjczNV0sWzEyNTkyLDEyNjg3XSxbNDMwNzIsNDMxMzVdLFsxMjgwMCwxMzA1NV0sWzEzMDU2LDEzMzExXSxbNDQwMzIsNTUyMTVdLFs1NTI5Niw1NzM0M10sWzY3ODQwLDY3ODcxXSxbMTk5NjgsNDA5NTksMTE5MDQsMTIwMzEsMTIwMzIsMTIyNTUsMTIyNzIsMTIyODcsMTMzMTIsMTk5MDMsMTMxMDcyLDE3Mzc5MSwxMjY4OCwxMjcwM10sWzU3MzQ0LDYzNzQzXSxbMTI3MzYsMTI3ODMsNjM3NDQsNjQyNTUsMTk0NTYwLDE5NTEwM10sWzY0MjU2LDY0MzM1XSxbNjQzMzYsNjUwMjNdLFs2NTA1Niw2NTA3MV0sWzY1MDQwLDY1MDU1XSxbNjUxMDQsNjUxMzVdLFs2NTEzNiw2NTI3OV0sWzY1MjgwLDY1NTE5XSxbNjU1MjAsNjU1MzVdLFszODQwLDQwOTVdLFsxNzkyLDE4NzFdLFsxOTIwLDE5ODNdLFszNDU2LDM1ODNdLFs0MDk2LDQyNTVdLFs0NjA4LDQ5OTEsNDk5Miw1MDIzLDExNjQ4LDExNzQzXSxbNTAyNCw1MTE5XSxbNTEyMCw1NzU5XSxbNTc2MCw1NzkxXSxbNTc5Miw1ODg3XSxbNjAxNiw2MTQzXSxbNjE0NCw2MzE5XSxbMTAyNDAsMTA0OTVdLFs0MDk2MCw0MjEyN10sWzU4ODgsNTkxOSw1OTIwLDU5NTEsNTk1Miw1OTgzLDU5ODQsNjAxNV0sWzY2MzA0LDY2MzUxXSxbNjYzNTIsNjYzODNdLFs2NjU2MCw2NjYzOV0sWzExODc4NCwxMTkwMzksMTE5MDQwLDExOTI5NSwxMTkyOTYsMTE5Mzc1XSxbMTE5ODA4LDEyMDgzMV0sWzEwNDQ0ODAsMTA0ODU3M10sWzY1MDI0LDY1MDM5LDkxNzc2MCw5MTc5OTldLFs5MTc1MDQsOTE3NjMxXSxbNjQwMCw2NDc5XSxbNjQ4MCw2NTI3XSxbNjUyOCw2NjIzXSxbNjY1Niw2Njg3XSxbMTEyNjQsMTEzNTldLFsxMTU2OCwxMTY0N10sWzE5OTA0LDE5OTY3XSxbNDMwMDgsNDMwNTVdLFs2NTUzNiw2NTY2Myw2NTY2NCw2NTc5MSw2NTc5Miw2NTg1NV0sWzY1ODU2LDY1OTM1XSxbNjY0MzIsNjY0NjNdLFs2NjQ2NCw2NjUyN10sWzY2NjQwLDY2Njg3XSxbNjY2ODgsNjY3MzVdLFs2NzU4NCw2NzY0N10sWzY4MDk2LDY4MTkxXSxbMTE5NTUyLDExOTY0N10sWzczNzI4LDc0NzUxLDc0NzUyLDc0ODc5XSxbMTE5NjQ4LDExOTY3OV0sWzcwNDAsNzEwM10sWzcxNjgsNzI0N10sWzcyNDgsNzI5NV0sWzQzMTM2LDQzMjMxXSxbNDMyNjQsNDMzMTFdLFs0MzMxMiw0MzM1OV0sWzQzNTIwLDQzNjE1XSxbNjU5MzYsNjU5OTldLFs2NmUzLDY2MDQ3XSxbNjYyMDgsNjYyNzEsNjYxNzYsNjYyMDcsNjc4NzIsNjc5MDNdLFsxMjcwMjQsMTI3MTM1LDEyNjk3NiwxMjcwMjNdXTtmdW5jdGlvbiBvKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTotMTtpZigtMSE9PXQpe2NvbnN0IHI9c1t0XTtmb3IobGV0IG49MCxhPXIubGVuZ3RoO248YTtuKz0yKWlmKGU+PXJbbl0mJmU8PXJbbisxXSlyZXR1cm4gdH1mb3IobGV0IHQ9MCxyPXMubGVuZ3RoO3Q8cjt0Kyspe2NvbnN0IHI9c1t0XTtmb3IobGV0IG49MCxhPXIubGVuZ3RoO248YTtuKz0yKWlmKGU+PXJbbl0mJmU8PXJbbisxXSlyZXR1cm4gdH1yZXR1cm4tMX1jb25zdCBjPW5ldyBSZWdFeHAoIl4oXFxzKXwoXFxwe01ufSl8KFxccHtDZn0pJCIsInUiKSxsPW5ldyBNYXA7ZnVuY3Rpb24gaChlKXtjb25zdCB0PWwuZ2V0KGUpO2lmKHQpcmV0dXJuIHQ7Y29uc3Qgcj1lLm1hdGNoKGMpLG49e2lzV2hpdGVzcGFjZTohKG51bGw9PXJ8fCFyWzFdKSxpc1plcm9XaWR0aERpYWNyaXRpYzohKG51bGw9PXJ8fCFyWzJdKSxpc0ludmlzaWJsZUZvcm1hdE1hcms6IShudWxsPT1yfHwhclszXSl9O3JldHVybiBsLnNldChlLG4pLG59ZnVuY3Rpb24gdSgpe2wuY2xlYXIoKX19LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZXRTZXJpZkZvbnRzPXQuZ2V0Tm9uU3RkRm9udE1hcD10LmdldEdseXBoTWFwRm9yU3RhbmRhcmRGb250cz10LmdldEZvbnROYW1lVG9GaWxlTWFwPXZvaWQgMCx0LmdldFN0YW5kYXJkRm9udE5hbWU9ZnVuY3Rpb24oZSl7Y29uc3QgdD0oMCxhLm5vcm1hbGl6ZUZvbnROYW1lKShlKTtyZXR1cm4gaSgpW3RdfSx0LmdldFN5bWJvbHNGb250cz10LmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQ2FsaWJyaT10LmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQXJpYWxCbGFjaz10LmdldFN0ZEZvbnRNYXA9dm9pZCAwLHQuaXNLbm93bkZvbnROYW1lPWZ1bmN0aW9uKGUpe2NvbnN0IHQ9KDAsYS5ub3JtYWxpemVGb250TmFtZSkoZSk7cmV0dXJuISEoaSgpW3RdfHxvKClbdF18fGMoKVt0XXx8bCgpW3RdKX07dmFyIG49cigxNDkpLGE9cigxODgpO2NvbnN0IGk9KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlWyJUaW1lcy1Sb21hbiJdPSJUaW1lcy1Sb21hbiIsZS5IZWx2ZXRpY2E9IkhlbHZldGljYSIsZS5Db3VyaWVyPSJDb3VyaWVyIixlLlN5bWJvbD0iU3ltYm9sIixlWyJUaW1lcy1Cb2xkIl09IlRpbWVzLUJvbGQiLGVbIkhlbHZldGljYS1Cb2xkIl09IkhlbHZldGljYS1Cb2xkIixlWyJDb3VyaWVyLUJvbGQiXT0iQ291cmllci1Cb2xkIixlLlphcGZEaW5nYmF0cz0iWmFwZkRpbmdiYXRzIixlWyJUaW1lcy1JdGFsaWMiXT0iVGltZXMtSXRhbGljIixlWyJIZWx2ZXRpY2EtT2JsaXF1ZSJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSIsZVsiQ291cmllci1PYmxpcXVlIl09IkNvdXJpZXItT2JsaXF1ZSIsZVsiVGltZXMtQm9sZEl0YWxpYyJdPSJUaW1lcy1Cb2xkSXRhbGljIixlWyJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIixlWyJDb3VyaWVyLUJvbGRPYmxpcXVlIl09IkNvdXJpZXItQm9sZE9ibGlxdWUiLGUuQXJpYWxOYXJyb3c9IkhlbHZldGljYSIsZVsiQXJpYWxOYXJyb3ctQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCIsZVsiQXJpYWxOYXJyb3ctQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLGVbIkFyaWFsTmFycm93LUl0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSIsZS5BcmlhbEJsYWNrPSJIZWx2ZXRpY2EiLGVbIkFyaWFsQmxhY2stQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCIsZVsiQXJpYWxCbGFjay1Cb2xkSXRhbGljIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSIsZVsiQXJpYWxCbGFjay1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGVbIkFyaWFsLUJsYWNrIl09IkhlbHZldGljYSIsZVsiQXJpYWwtQmxhY2stQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCIsZVsiQXJpYWwtQmxhY2stQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLGVbIkFyaWFsLUJsYWNrLUl0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSIsZS5BcmlhbD0iSGVsdmV0aWNhIixlWyJBcmlhbC1Cb2xkIl09IkhlbHZldGljYS1Cb2xkIixlWyJBcmlhbC1Cb2xkSXRhbGljIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSIsZVsiQXJpYWwtSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIixlLkFyaWFsTVQ9IkhlbHZldGljYSIsZVsiQXJpYWwtQm9sZEl0YWxpY01UIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSIsZVsiQXJpYWwtQm9sZE1UIl09IkhlbHZldGljYS1Cb2xkIixlWyJBcmlhbC1JdGFsaWNNVCJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSIsZVsiQXJpYWwtQm9sZEl0YWxpY01ULUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIixlWyJBcmlhbC1Cb2xkTVQtQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCIsZVsiQXJpYWwtSXRhbGljTVQtSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIixlLkFyaWFsVW5pY29kZU1TPSJIZWx2ZXRpY2EiLGVbIkFyaWFsVW5pY29kZU1TLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiLGVbIkFyaWFsVW5pY29kZU1TLUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIixlWyJBcmlhbFVuaWNvZGVNUy1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGVbIkNvdXJpZXItQm9sZEl0YWxpYyJdPSJDb3VyaWVyLUJvbGRPYmxpcXVlIixlWyJDb3VyaWVyLUl0YWxpYyJdPSJDb3VyaWVyLU9ibGlxdWUiLGUuQ291cmllck5ldz0iQ291cmllciIsZVsiQ291cmllck5ldy1Cb2xkIl09IkNvdXJpZXItQm9sZCIsZVsiQ291cmllck5ldy1Cb2xkSXRhbGljIl09IkNvdXJpZXItQm9sZE9ibGlxdWUiLGVbIkNvdXJpZXJOZXctSXRhbGljIl09IkNvdXJpZXItT2JsaXF1ZSIsZVsiQ291cmllck5ld1BTLUJvbGRJdGFsaWNNVCJdPSJDb3VyaWVyLUJvbGRPYmxpcXVlIixlWyJDb3VyaWVyTmV3UFMtQm9sZE1UIl09IkNvdXJpZXItQm9sZCIsZVsiQ291cmllck5ld1BTLUl0YWxpY01UIl09IkNvdXJpZXItT2JsaXF1ZSIsZS5Db3VyaWVyTmV3UFNNVD0iQ291cmllciIsZVsiSGVsdmV0aWNhLUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIixlWyJIZWx2ZXRpY2EtSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIixlWyJTeW1ib2wtQm9sZCJdPSJTeW1ib2wiLGVbIlN5bWJvbC1Cb2xkSXRhbGljIl09IlN5bWJvbCIsZVsiU3ltYm9sLUl0YWxpYyJdPSJTeW1ib2wiLGUuVGltZXNOZXdSb21hbj0iVGltZXMtUm9tYW4iLGVbIlRpbWVzTmV3Um9tYW4tQm9sZCJdPSJUaW1lcy1Cb2xkIixlWyJUaW1lc05ld1JvbWFuLUJvbGRJdGFsaWMiXT0iVGltZXMtQm9sZEl0YWxpYyIsZVsiVGltZXNOZXdSb21hbi1JdGFsaWMiXT0iVGltZXMtSXRhbGljIixlLlRpbWVzTmV3Um9tYW5QUz0iVGltZXMtUm9tYW4iLGVbIlRpbWVzTmV3Um9tYW5QUy1Cb2xkIl09IlRpbWVzLUJvbGQiLGVbIlRpbWVzTmV3Um9tYW5QUy1Cb2xkSXRhbGljIl09IlRpbWVzLUJvbGRJdGFsaWMiLGVbIlRpbWVzTmV3Um9tYW5QUy1Cb2xkSXRhbGljTVQiXT0iVGltZXMtQm9sZEl0YWxpYyIsZVsiVGltZXNOZXdSb21hblBTLUJvbGRNVCJdPSJUaW1lcy1Cb2xkIixlWyJUaW1lc05ld1JvbWFuUFMtSXRhbGljIl09IlRpbWVzLUl0YWxpYyIsZVsiVGltZXNOZXdSb21hblBTLUl0YWxpY01UIl09IlRpbWVzLUl0YWxpYyIsZS5UaW1lc05ld1JvbWFuUFNNVD0iVGltZXMtUm9tYW4iLGVbIlRpbWVzTmV3Um9tYW5QU01ULUJvbGQiXT0iVGltZXMtQm9sZCIsZVsiVGltZXNOZXdSb21hblBTTVQtQm9sZEl0YWxpYyJdPSJUaW1lcy1Cb2xkSXRhbGljIixlWyJUaW1lc05ld1JvbWFuUFNNVC1JdGFsaWMiXT0iVGltZXMtSXRhbGljIn0pKTt0LmdldFN0ZEZvbnRNYXA9aTtjb25zdCBzPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5Db3VyaWVyPSJGb3hpdEZpeGVkLnBmYiIsZVsiQ291cmllci1Cb2xkIl09IkZveGl0Rml4ZWRCb2xkLnBmYiIsZVsiQ291cmllci1Cb2xkT2JsaXF1ZSJdPSJGb3hpdEZpeGVkQm9sZEl0YWxpYy5wZmIiLGVbIkNvdXJpZXItT2JsaXF1ZSJdPSJGb3hpdEZpeGVkSXRhbGljLnBmYiIsZS5IZWx2ZXRpY2E9IkxpYmVyYXRpb25TYW5zLVJlZ3VsYXIudHRmIixlWyJIZWx2ZXRpY2EtQm9sZCJdPSJMaWJlcmF0aW9uU2Fucy1Cb2xkLnR0ZiIsZVsiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIl09IkxpYmVyYXRpb25TYW5zLUJvbGRJdGFsaWMudHRmIixlWyJIZWx2ZXRpY2EtT2JsaXF1ZSJdPSJMaWJlcmF0aW9uU2Fucy1JdGFsaWMudHRmIixlWyJUaW1lcy1Sb21hbiJdPSJGb3hpdFNlcmlmLnBmYiIsZVsiVGltZXMtQm9sZCJdPSJGb3hpdFNlcmlmQm9sZC5wZmIiLGVbIlRpbWVzLUJvbGRJdGFsaWMiXT0iRm94aXRTZXJpZkJvbGRJdGFsaWMucGZiIixlWyJUaW1lcy1JdGFsaWMiXT0iRm94aXRTZXJpZkl0YWxpYy5wZmIiLGUuU3ltYm9sPSJGb3hpdFN5bWJvbC5wZmIiLGUuWmFwZkRpbmdiYXRzPSJGb3hpdERpbmdiYXRzLnBmYiIsZVsiTGliZXJhdGlvblNhbnMtUmVndWxhciJdPSJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyLnR0ZiIsZVsiTGliZXJhdGlvblNhbnMtQm9sZCJdPSJMaWJlcmF0aW9uU2Fucy1Cb2xkLnR0ZiIsZVsiTGliZXJhdGlvblNhbnMtSXRhbGljIl09IkxpYmVyYXRpb25TYW5zLUl0YWxpYy50dGYiLGVbIkxpYmVyYXRpb25TYW5zLUJvbGRJdGFsaWMiXT0iTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYy50dGYifSkpO3QuZ2V0Rm9udE5hbWVUb0ZpbGVNYXA9cztjb25zdCBvPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5DYWxpYnJpPSJIZWx2ZXRpY2EiLGVbIkNhbGlicmktQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCIsZVsiQ2FsaWJyaS1Cb2xkSXRhbGljIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSIsZVsiQ2FsaWJyaS1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGUuQ2VudHVyeUdvdGhpYz0iSGVsdmV0aWNhIixlWyJDZW50dXJ5R290aGljLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiLGVbIkNlbnR1cnlHb3RoaWMtQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLGVbIkNlbnR1cnlHb3RoaWMtSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIixlLkNvbWljU2Fuc01TPSJDb21pYyBTYW5zIE1TIixlWyJDb21pY1NhbnNNUy1Cb2xkIl09IkNvbWljIFNhbnMgTVMtQm9sZCIsZVsiQ29taWNTYW5zTVMtQm9sZEl0YWxpYyJdPSJDb21pYyBTYW5zIE1TLUJvbGRJdGFsaWMiLGVbIkNvbWljU2Fuc01TLUl0YWxpYyJdPSJDb21pYyBTYW5zIE1TLUl0YWxpYyIsZS5JbXBhY3Q9IkhlbHZldGljYSIsZVsiSXRjU3ltYm9sLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiLGVbIkl0Y1N5bWJvbC1Cb2xkSXRhbGljIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSIsZVsiSXRjU3ltYm9sLUJvb2siXT0iSGVsdmV0aWNhIixlWyJJdGNTeW1ib2wtQm9va0l0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSIsZVsiSXRjU3ltYm9sLU1lZGl1bSJdPSJIZWx2ZXRpY2EiLGVbIkl0Y1N5bWJvbC1NZWRpdW1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGUuTHVjaWRhQ29uc29sZT0iQ291cmllciIsZVsiTHVjaWRhQ29uc29sZS1Cb2xkIl09IkNvdXJpZXItQm9sZCIsZVsiTHVjaWRhQ29uc29sZS1Cb2xkSXRhbGljIl09IkNvdXJpZXItQm9sZE9ibGlxdWUiLGVbIkx1Y2lkYUNvbnNvbGUtSXRhbGljIl09IkNvdXJpZXItT2JsaXF1ZSIsZVsiTHVjaWRhU2Fucy1EZW1pIl09IkhlbHZldGljYS1Cb2xkIixlWyJNUy1Hb3RoaWMiXT0iTVMgR290aGljIixlWyJNUy1Hb3RoaWMtQm9sZCJdPSJNUyBHb3RoaWMtQm9sZCIsZVsiTVMtR290aGljLUJvbGRJdGFsaWMiXT0iTVMgR290aGljLUJvbGRJdGFsaWMiLGVbIk1TLUdvdGhpYy1JdGFsaWMiXT0iTVMgR290aGljLUl0YWxpYyIsZVsiTVMtTWluY2hvIl09Ik1TIE1pbmNobyIsZVsiTVMtTWluY2hvLUJvbGQiXT0iTVMgTWluY2hvLUJvbGQiLGVbIk1TLU1pbmNoby1Cb2xkSXRhbGljIl09Ik1TIE1pbmNoby1Cb2xkSXRhbGljIixlWyJNUy1NaW5jaG8tSXRhbGljIl09Ik1TIE1pbmNoby1JdGFsaWMiLGVbIk1TLVBHb3RoaWMiXT0iTVMgUEdvdGhpYyIsZVsiTVMtUEdvdGhpYy1Cb2xkIl09Ik1TIFBHb3RoaWMtQm9sZCIsZVsiTVMtUEdvdGhpYy1Cb2xkSXRhbGljIl09Ik1TIFBHb3RoaWMtQm9sZEl0YWxpYyIsZVsiTVMtUEdvdGhpYy1JdGFsaWMiXT0iTVMgUEdvdGhpYy1JdGFsaWMiLGVbIk1TLVBNaW5jaG8iXT0iTVMgUE1pbmNobyIsZVsiTVMtUE1pbmNoby1Cb2xkIl09Ik1TIFBNaW5jaG8tQm9sZCIsZVsiTVMtUE1pbmNoby1Cb2xkSXRhbGljIl09Ik1TIFBNaW5jaG8tQm9sZEl0YWxpYyIsZVsiTVMtUE1pbmNoby1JdGFsaWMiXT0iTVMgUE1pbmNoby1JdGFsaWMiLGUuTnVwdGlhbFNjcmlwdD0iVGltZXMtSXRhbGljIixlLlNlZ29lVUlTeW1ib2w9IkhlbHZldGljYSJ9KSk7dC5nZXROb25TdGRGb250TWFwPW87Y29uc3QgYz0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2VbIkFkb2JlIEplbnNvbiJdPSEwLGVbIkFkb2JlIFRleHQiXT0hMCxlLkFsYmVydHVzPSEwLGUuQWxkdXM9ITAsZS5BbGV4YW5kcmlhPSEwLGUuQWxnZXJpYW49ITAsZVsiQW1lcmljYW4gVHlwZXdyaXRlciJdPSEwLGUuQW50aXF1YT0hMCxlLkFwZXg9ITAsZS5Bcm5vPSEwLGUuQXN0ZXI9ITAsZS5BdXJvcmE9ITAsZS5CYXNrZXJ2aWxsZT0hMCxlLkJlbGw9ITAsZS5CZW1ibz0hMCxlWyJCZW1ibyBTY2hvb2xib29rIl09ITAsZS5CZW5ndWlhdD0hMCxlWyJCZXJrZWxleSBPbGQgU3R5bGUiXT0hMCxlWyJCZXJuaGFyZCBNb2Rlcm4iXT0hMCxlWyJCZXJ0aG9sZCBDaXR5Il09ITAsZS5Cb2Rvbmk9ITAsZVsiQmF1ZXIgQm9kb25pIl09ITAsZVsiQm9vayBBbnRpcXVhIl09ITAsZS5Cb29rbWFuPSEwLGVbIkJvcmRlYXV4IFJvbWFuIl09ITAsZVsiQ2FsaWZvcm5pYW4gRkIiXT0hMCxlLkNhbGlzdG89ITAsZS5DYWx2ZXJ0PSEwLGUuQ2FwaXRhbHM9ITAsZS5DYW1icmlhPSEwLGUuQ2FydGllcj0hMCxlLkNhc2xvbj0hMCxlLkNhdHVsbD0hMCxlLkNlbnRhdXI9ITAsZVsiQ2VudHVyeSBPbGQgU3R5bGUiXT0hMCxlWyJDZW50dXJ5IFNjaG9vbGJvb2siXT0hMCxlLkNoYXBhcnJhbD0hMCxlWyJDaGFyaXMgU0lMIl09ITAsZS5DaGVsdGVuaGFtPSEwLGVbIkNob2xsYSBTbGFiIl09ITAsZS5DbGFyZW5kb249ITAsZS5DbGVhcmZhY2U9ITAsZS5Db2NoaW49ITAsZS5Db2xvbm5hPSEwLGVbIkNvbXB1dGVyIE1vZGVybiJdPSEwLGVbIkNvbmNyZXRlIFJvbWFuIl09ITAsZS5Db25zdGFudGlhPSEwLGVbIkNvb3BlciBCbGFjayJdPSEwLGUuQ29yb25hPSEwLGUuRWNvdHlwZT0hMCxlLkVneXB0aWVubmU9ITAsZS5FbGVwaGFudD0hMCxlLkV4Y2Vsc2lvcj0hMCxlLkZhaXJmaWVsZD0hMCxlWyJGRiBTY2FsYSJdPSEwLGUuRm9sa2FyZD0hMCxlLkZvb3RsaWdodD0hMCxlLkZyZWVTZXJpZj0hMCxlWyJGcml6IFF1YWRyYXRhIl09ITAsZS5HYXJhbW9uZD0hMCxlLkdlbnRpdW09ITAsZS5HZW9yZ2lhPSEwLGUuR2xvdWNlc3Rlcj0hMCxlWyJHb3VkeSBPbGQgU3R5bGUiXT0hMCxlWyJHb3VkeSBTY2hvb2xib29rIl09ITAsZVsiR291ZHkgUHJvIEZvbnQiXT0hMCxlLkdyYW5qb249ITAsZVsiR3VhcmRpYW4gRWd5cHRpYW4iXT0hMCxlLkhlYXRoZXI9ITAsZS5IZXJjdWxlcz0hMCxlWyJIaWdoIFRvd2VyIFRleHQiXT0hMCxlLkhpcm9zaGlnZT0hMCxlWyJIb2VmbGVyIFRleHQiXT0hMCxlWyJIdW1hbmEgU2VyaWYiXT0hMCxlLkltcHJpbnQ9ITAsZVsiSW9uaWMgTm8uIDUiXT0hMCxlLkphbnNvbj0hMCxlLkpvYW5uYT0hMCxlLktvcmlubmE9ITAsZS5MZXhpY29uPSEwLGUuTGliZXJhdGlvblNlcmlmPSEwLGVbIkxpYmVyYXRpb24gU2VyaWYiXT0hMCxlWyJMaW51eCBMaWJlcnRpbmUiXT0hMCxlLkxpdGVyYXR1cm5heWE9ITAsZS5MdWNpZGE9ITAsZVsiTHVjaWRhIEJyaWdodCJdPSEwLGUuTWVsaW9yPSEwLGUuTWVtcGhpcz0hMCxlLk1pbGxlcj0hMCxlLk1pbmlvbj0hMCxlLk1vZGVybj0hMCxlWyJNb25hIExpc2EiXT0hMCxlWyJNcnMgRWF2ZXMiXT0hMCxlWyJNUyBTZXJpZiJdPSEwLGVbIk11c2VvIFNsYWIiXT0hMCxlWyJOZXcgWW9yayJdPSEwLGVbIk5pbWJ1cyBSb21hbiJdPSEwLGVbIk5QUyBSYXdsaW5zb24gUm9hZHdheSJdPSEwLGUuTnVwdGlhbFNjcmlwdD0hMCxlLlBhbGF0aW5vPSEwLGUuUGVycGV0dWE9ITAsZS5QbGFudGluPSEwLGVbIlBsYW50aW4gU2Nob29sYm9vayJdPSEwLGUuUGxheWJpbGw9ITAsZVsiUG9vciBSaWNoYXJkIl09ITAsZVsiUmF3bGluc29uIFJvYWR3YXkiXT0hMCxlLlJlbmF1bHQ9ITAsZS5SZXF1aWVtPSEwLGUuUm9ja3dlbGw9ITAsZS5Sb21hbj0hMCxlWyJSb3RpcyBTZXJpZiJdPSEwLGUuU2Fib249ITAsZS5TY2FsYT0hMCxlLlNlYWd1bGw9ITAsZS5TaXN0aW5hPSEwLGUuU291dmVuaXI9ITAsZS5TVElYPSEwLGVbIlN0b25lIEluZm9ybWFsIl09ITAsZVsiU3RvbmUgU2VyaWYiXT0hMCxlLlN5bGZhZW49ITAsZS5UaW1lcz0hMCxlLlRyYWphbj0hMCxlWyJUcmluaXTDqSJdPSEwLGVbIlRydW1wIE1lZGlhZXZhbCJdPSEwLGUuVXRvcGlhPSEwLGVbIlZhbGUgVHlwZSJdPSEwLGVbIkJpdHN0cmVhbSBWZXJhIl09ITAsZVsiVmVyYSBTZXJpZiJdPSEwLGUuVmVyc2FpbGxlcz0hMCxlLldhbnRlZD0hMCxlLldlaXNzPSEwLGVbIldpZGUgTGF0aW4iXT0hMCxlLldpbmRzb3I9ITAsZS5YSVRTPSEwfSkpO3QuZ2V0U2VyaWZGb250cz1jO2NvbnN0IGw9KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLkRpbmdiYXRzPSEwLGUuU3ltYm9sPSEwLGUuWmFwZkRpbmdiYXRzPSEwLGUuV2luZ2RpbmdzPSEwLGVbIldpbmdkaW5ncy1Cb2xkIl09ITAsZVsiV2luZ2RpbmdzLVJlZ3VsYXIiXT0hMH0pKTt0LmdldFN5bWJvbHNGb250cz1sO2NvbnN0IGg9KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlWzJdPTEwLGVbM109MzIsZVs0XT0zMyxlWzVdPTM0LGVbNl09MzUsZVs3XT0zNixlWzhdPTM3LGVbOV09MzgsZVsxMF09MzksZVsxMV09NDAsZVsxMl09NDEsZVsxM109NDIsZVsxNF09NDMsZVsxNV09NDQsZVsxNl09NDUsZVsxN109NDYsZVsxOF09NDcsZVsxOV09NDgsZVsyMF09NDksZVsyMV09NTAsZVsyMl09NTEsZVsyM109NTIsZVsyNF09NTMsZVsyNV09NTQsZVsyNl09NTUsZVsyN109NTYsZVsyOF09NTcsZVsyOV09NTgsZVszMF09ODk0LGVbMzFdPTYwLGVbMzJdPTYxLGVbMzNdPTYyLGVbMzRdPTYzLGVbMzVdPTY0LGVbMzZdPTY1LGVbMzddPTY2LGVbMzhdPTY3LGVbMzldPTY4LGVbNDBdPTY5LGVbNDFdPTcwLGVbNDJdPTcxLGVbNDNdPTcyLGVbNDRdPTczLGVbNDVdPTc0LGVbNDZdPTc1LGVbNDddPTc2LGVbNDhdPTc3LGVbNDldPTc4LGVbNTBdPTc5LGVbNTFdPTgwLGVbNTJdPTgxLGVbNTNdPTgyLGVbNTRdPTgzLGVbNTVdPTg0LGVbNTZdPTg1LGVbNTddPTg2LGVbNThdPTg3LGVbNTldPTg4LGVbNjBdPTg5LGVbNjFdPTkwLGVbNjJdPTkxLGVbNjNdPTkyLGVbNjRdPTkzLGVbNjVdPTk0LGVbNjZdPTk1LGVbNjddPTk2LGVbNjhdPTk3LGVbNjldPTk4LGVbNzBdPTk5LGVbNzFdPTEwMCxlWzcyXT0xMDEsZVs3M109MTAyLGVbNzRdPTEwMyxlWzc1XT0xMDQsZVs3Nl09MTA1LGVbNzddPTEwNixlWzc4XT0xMDcsZVs3OV09MTA4LGVbODBdPTEwOSxlWzgxXT0xMTAsZVs4Ml09MTExLGVbODNdPTExMixlWzg0XT0xMTMsZVs4NV09MTE0LGVbODZdPTExNSxlWzg3XT0xMTYsZVs4OF09MTE3LGVbODldPTExOCxlWzkwXT0xMTksZVs5MV09MTIwLGVbOTJdPTEyMSxlWzkzXT0xMjIsZVs5NF09MTIzLGVbOTVdPTEyNCxlWzk2XT0xMjUsZVs5N109MTI2LGVbOThdPTE5NixlWzk5XT0xOTcsZVsxMDBdPTE5OSxlWzEwMV09MjAxLGVbMTAyXT0yMDksZVsxMDNdPTIxNCxlWzEwNF09MjIwLGVbMTA1XT0yMjUsZVsxMDZdPTIyNCxlWzEwN109MjI2LGVbMTA4XT0yMjgsZVsxMDldPTIyNyxlWzExMF09MjI5LGVbMTExXT0yMzEsZVsxMTJdPTIzMyxlWzExM109MjMyLGVbMTE0XT0yMzQsZVsxMTVdPTIzNSxlWzExNl09MjM3LGVbMTE3XT0yMzYsZVsxMThdPTIzOCxlWzExOV09MjM5LGVbMTIwXT0yNDEsZVsxMjFdPTI0MyxlWzEyMl09MjQyLGVbMTIzXT0yNDQsZVsxMjRdPTI0NixlWzEyNV09MjQ1LGVbMTI2XT0yNTAsZVsxMjddPTI0OSxlWzEyOF09MjUxLGVbMTI5XT0yNTIsZVsxMzBdPTgyMjQsZVsxMzFdPTE3NixlWzEzMl09MTYyLGVbMTMzXT0xNjMsZVsxMzRdPTE2NyxlWzEzNV09ODIyNixlWzEzNl09MTgyLGVbMTM3XT0yMjMsZVsxMzhdPTE3NCxlWzEzOV09MTY5LGVbMTQwXT04NDgyLGVbMTQxXT0xODAsZVsxNDJdPTE2OCxlWzE0M109ODgwMCxlWzE0NF09MTk4LGVbMTQ1XT0yMTYsZVsxNDZdPTg3MzQsZVsxNDddPTE3NyxlWzE0OF09ODgwNCxlWzE0OV09ODgwNSxlWzE1MF09MTY1LGVbMTUxXT0xODEsZVsxNTJdPTg3MDYsZVsxNTNdPTg3MjEsZVsxNTRdPTg3MTksZVsxNTZdPTg3NDcsZVsxNTddPTE3MCxlWzE1OF09MTg2LGVbMTU5XT04NDg2LGVbMTYwXT0yMzAsZVsxNjFdPTI0OCxlWzE2Ml09MTkxLGVbMTYzXT0xNjEsZVsxNjRdPTE3MixlWzE2NV09ODczMCxlWzE2Nl09NDAyLGVbMTY3XT04Nzc2LGVbMTY4XT04NzEwLGVbMTY5XT0xNzEsZVsxNzBdPTE4NyxlWzE3MV09ODIzMCxlWzE3OV09ODIyMCxlWzE4MF09ODIyMSxlWzE4MV09ODIxNixlWzE4Ml09ODIxNyxlWzIwMF09MTkzLGVbMjAzXT0yMDUsZVsyMDddPTIxMSxlWzIxMF09MjE4LGVbMjIzXT03MTEsZVsyMjRdPTMyMSxlWzIyNV09MzIyLGVbMjI2XT0zNTIsZVsyMjddPTM1MyxlWzIyOF09MzgxLGVbMjI5XT0zODIsZVsyMzNdPTIyMSxlWzIzNF09MjUzLGVbMjUyXT0yNjMsZVsyNTNdPTI2OCxlWzI1NF09MjY5LGVbMjU4XT0yNTgsZVsyNjBdPTI2MCxlWzI2MV09MjYxLGVbMjY1XT0yODAsZVsyNjZdPTI4MSxlWzI2N109MjgyLGVbMjY4XT0yODMsZVsyNjldPTMxMyxlWzI3NV09MzIzLGVbMjc2XT0zMjQsZVsyNzhdPTMyOCxlWzI4M109MzQ0LGVbMjg0XT0zNDUsZVsyODVdPTM0NixlWzI4Nl09MzQ3LGVbMjkyXT0zNjcsZVsyOTVdPTM3NyxlWzI5Nl09Mzc4LGVbMjk4XT0zODAsZVszMDVdPTk2MyxlWzMwNl09OTY0LGVbMzA3XT05NjYsZVszMDhdPTgyMTUsZVszMDldPTgyNTIsZVszMTBdPTgzMTksZVszMTFdPTgzNTksZVszMTJdPTg1OTIsZVszMTNdPTg1OTMsZVszMzddPTk1NTIsZVs0OTNdPTEwMzksZVs0OTRdPTEwNDAsZVs2NzJdPTE0ODgsZVs2NzNdPTE0ODksZVs2NzRdPTE0OTAsZVs2NzVdPTE0OTEsZVs2NzZdPTE0OTIsZVs2NzddPTE0OTMsZVs2NzhdPTE0OTQsZVs2NzldPTE0OTUsZVs2ODBdPTE0OTYsZVs2ODFdPTE0OTcsZVs2ODJdPTE0OTgsZVs2ODNdPTE0OTksZVs2ODRdPTE1MDAsZVs2ODVdPTE1MDEsZVs2ODZdPTE1MDIsZVs2ODddPTE1MDMsZVs2ODhdPTE1MDQsZVs2ODldPTE1MDUsZVs2OTBdPTE1MDYsZVs2OTFdPTE1MDcsZVs2OTJdPTE1MDgsZVs2OTNdPTE1MDksZVs2OTRdPTE1MTAsZVs2OTVdPTE1MTEsZVs2OTZdPTE1MTIsZVs2OTddPTE1MTMsZVs2OThdPTE1MTQsZVs3MDVdPTE1MjQsZVs3MDZdPTgzNjIsZVs3MTBdPTY0Mjg4LGVbNzExXT02NDI5OCxlWzc1OV09MTYxNyxlWzc2MV09MTc3NixlWzc2M109MTc3OCxlWzc3NV09MTY1MixlWzc3N109MTc2NCxlWzc3OF09MTc4MCxlWzc3OV09MTc4MSxlWzc4MF09MTc4MixlWzc4Ml09NzcxLGVbNzgzXT02NDcyNixlWzc4Nl09ODM2MyxlWzc4OF09ODUzMixlWzc5MF09NzY4LGVbNzkxXT03NjksZVs3OTJdPTc2OCxlWzc5NV09ODAzLGVbNzk3XT02NDMzNixlWzc5OF09NjQzMzcsZVs3OTldPTY0MzQyLGVbODAwXT02NDM0MyxlWzgwMV09NjQzNDQsZVs4MDJdPTY0MzQ1LGVbODAzXT02NDM2MixlWzgwNF09NjQzNjMsZVs4MDVdPTY0MzY0LGVbMjQyNF09NzgyMSxlWzI0MjVdPTc4MjIsZVsyNDI2XT03ODIzLGVbMjQyN109NzgyNCxlWzI0MjhdPTc4MjUsZVsyNDI5XT03ODI2LGVbMjQzMF09NzgyNyxlWzI0MzNdPTc2ODIsZVsyNjc4XT04MDQ1LGVbMjY3OV09ODA0NixlWzI4MzBdPTE1NTIsZVsyODM4XT02ODYsZVsyODQwXT03NTEsZVsyODQyXT03NTMsZVsyODQzXT03NTQsZVsyODQ0XT03NTUsZVsyODQ2XT03NTcsZVsyODU2XT03NjcsZVsyODU3XT04NDgsZVsyODU4XT04NDksZVsyODYyXT04NTMsZVsyODYzXT04NTQsZVsyODY0XT04NTUsZVsyODY1XT04NjEsZVsyODY2XT04NjIsZVsyOTA2XT03NDYwLGVbMjkwOF09NzQ2MixlWzI5MDldPTc0NjMsZVsyOTEwXT03NDY0LGVbMjkxMl09NzQ2NixlWzI5MTNdPTc0NjcsZVsyOTE0XT03NDY4LGVbMjkxNl09NzQ3MCxlWzI5MTddPTc0NzEsZVsyOTE4XT03NDcyLGVbMjkyMF09NzQ3NCxlWzI5MjFdPTc0NzUsZVsyOTIyXT03NDc2LGVbMjkyNF09NzQ3OCxlWzI5MjVdPTc0NzksZVsyOTI2XT03NDgwLGVbMjkyOF09NzQ4MixlWzI5MjldPTc0ODMsZVsyOTMwXT03NDg0LGVbMjkzMl09NzQ4NixlWzI5MzNdPTc0ODcsZVsyOTM0XT03NDg4LGVbMjkzNl09NzQ5MCxlWzI5MzddPTc0OTEsZVsyOTM4XT03NDkyLGVbMjk0MF09NzQ5NCxlWzI5NDFdPTc0OTUsZVsyOTQyXT03NDk2LGVbMjk0NF09NzQ5OCxlWzI5NDZdPTc1MDAsZVsyOTQ4XT03NTAyLGVbMjk1MF09NzUwNCxlWzI5NTFdPTc1MDUsZVsyOTUyXT03NTA2LGVbMjk1NF09NzUwOCxlWzI5NTVdPTc1MDksZVsyOTU2XT03NTEwLGVbMjk1OF09NzUxMixlWzI5NTldPTc1MTMsZVsyOTYwXT03NTE0LGVbMjk2Ml09NzUxNixlWzI5NjNdPTc1MTcsZVsyOTY0XT03NTE4LGVbMjk2Nl09NzUyMCxlWzI5NjddPTc1MjEsZVsyOTY4XT03NTIyLGVbMjk3MF09NzUyNCxlWzI5NzFdPTc1MjUsZVsyOTcyXT03NTI2LGVbMjk3NF09NzUyOCxlWzI5NzVdPTc1MjksZVsyOTc2XT03NTMwLGVbMjk3OF09MTUzNyxlWzI5NzldPTE1MzgsZVsyOTgwXT0xNTM5LGVbMjk4Ml09MTU0OSxlWzI5ODNdPTE1NTEsZVsyOTg0XT0xNTUyLGVbMjk4Nl09MTU1NCxlWzI5ODddPTE1NTUsZVsyOTg4XT0xNTU2LGVbMjk5MF09MTYyMyxlWzI5OTFdPTE2MjQsZVsyOTk1XT0xNzc1LGVbMjk5OV09MTc5MSxlWzMwMDJdPTY0MjkwLGVbMzAwM109NjQyOTEsZVszMDA0XT02NDI5MixlWzMwMDZdPTY0Mjk0LGVbMzAwN109NjQyOTUsZVszMDA4XT02NDI5NixlWzMwMTFdPTE5MDAsZVszMDE0XT04MjIzLGVbMzAxNV09ODI0NCxlWzMwMTddPTc1MzIsZVszMDE4XT03NTMzLGVbMzAxOV09NzUzNCxlWzMwNzVdPTc1OTAsZVszMDc2XT03NTkxLGVbMzA3OV09NzU5NCxlWzMwODBdPTc1OTUsZVszMDgzXT03NTk4LGVbMzA4NF09NzU5OSxlWzMwODddPTc2MDIsZVszMDg4XT03NjAzLGVbMzA5MV09NzYwNixlWzMwOTJdPTc2MDcsZVszMDk1XT03NjEwLGVbMzA5Nl09NzYxMSxlWzMwOTldPTc2MTQsZVszMTAwXT03NjE1LGVbMzEwM109NzYxOCxlWzMxMDRdPTc2MTksZVszMTA3XT04MzM3LGVbMzEwOF09ODMzOCxlWzMxMTZdPTE4ODQsZVszMTE5XT0xODg1LGVbMzEyMF09MTg4NSxlWzMxMjNdPTE4ODYsZVszMTI0XT0xODg2LGVbMzEyN109MTg4NyxlWzMxMjhdPTE4ODcsZVszMTMxXT0xODg4LGVbMzEzMl09MTg4OCxlWzMxMzVdPTE4ODksZVszMTM2XT0xODg5LGVbMzEzOV09MTg5MCxlWzMxNDBdPTE4OTAsZVszMTQzXT0xODkxLGVbMzE0NF09MTg5MSxlWzMxNDddPTE4OTIsZVszMTQ4XT0xODkyLGVbMzE1M109NTgwLGVbMzE1NF09NTgxLGVbMzE1N109NTg0LGVbMzE1OF09NTg1LGVbMzE2MV09NTg4LGVbMzE2Ml09NTg5LGVbMzE2NV09ODkxLGVbMzE2Nl09ODkyLGVbMzE2OV09MTI3NCxlWzMxNzBdPTEyNzUsZVszMTczXT0xMjc4LGVbMzE3NF09MTI3OSxlWzMxODFdPTc2MjIsZVszMTgyXT03NjIzLGVbMzI4Ml09MTE3OTksZVszMzE2XT01NzgsZVszMzc5XT00Mjc4NSxlWzMzOTNdPTExNTksZVszNDE2XT04Mzc3fSkpO3QuZ2V0R2x5cGhNYXBGb3JTdGFuZGFyZEZvbnRzPWg7Y29uc3QgdT0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2VbMjI3XT0zMjIsZVsyNjRdPTI2MSxlWzI5MV09MzQ2fSkpO3QuZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JBcmlhbEJsYWNrPXU7Y29uc3QgZD0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2VbMV09MzIsZVs0XT02NSxlWzVdPTE5MixlWzZdPTE5MyxlWzldPTE5NixlWzE3XT02NixlWzE4XT02NyxlWzIxXT0yNjgsZVsyNF09NjgsZVsyOF09NjksZVsyOV09MjAwLGVbMzBdPTIwMSxlWzMyXT0yODIsZVszOF09NzAsZVszOV09NzEsZVs0NF09NzIsZVs0N109NzMsZVs0OF09MjA0LGVbNDldPTIwNSxlWzU4XT03NCxlWzYwXT03NSxlWzYyXT03NixlWzY4XT03NyxlWzY5XT03OCxlWzc1XT03OSxlWzc2XT0yMTAsZVs4MF09MjE0LGVbODddPTgwLGVbODldPTgxLGVbOTBdPTgyLGVbOTJdPTM0NCxlWzk0XT04MyxlWzk3XT0zNTIsZVsxMDBdPTg0LGVbMTA0XT04NSxlWzEwOV09MjIwLGVbMTE1XT04NixlWzExNl09ODcsZVsxMjFdPTg4LGVbMTIyXT04OSxlWzEyNF09MjIxLGVbMTI3XT05MCxlWzEyOV09MzgxLGVbMjU4XT05NyxlWzI1OV09MjI0LGVbMjYwXT0yMjUsZVsyNjNdPTIyOCxlWzI2OF09MjYxLGVbMjcxXT05OCxlWzI3Ml09OTksZVsyNzNdPTI2MyxlWzI3NV09MjY5LGVbMjgyXT0xMDAsZVsyODZdPTEwMSxlWzI4N109MjMyLGVbMjg4XT0yMzMsZVsyOTBdPTI4MyxlWzI5NV09MjgxLGVbMjk2XT0xMDIsZVszMzZdPTEwMyxlWzM0Nl09MTA0LGVbMzQ5XT0xMDUsZVszNTBdPTIzNixlWzM1MV09MjM3LGVbMzYxXT0xMDYsZVszNjRdPTEwNyxlWzM2N109MTA4LGVbMzcxXT0zMjIsZVszNzNdPTEwOSxlWzM3NF09MTEwLGVbMzgxXT0xMTEsZVszODJdPTI0MixlWzM4M109MjQzLGVbMzg2XT0yNDYsZVszOTNdPTExMixlWzM5NV09MTEzLGVbMzk2XT0xMTQsZVszOThdPTM0NSxlWzQwMF09MTE1LGVbNDAxXT0zNDcsZVs0MDNdPTM1MyxlWzQxMF09MTE2LGVbNDM3XT0xMTcsZVs0NDJdPTI1MixlWzQ0OF09MTE4LGVbNDQ5XT0xMTksZVs0NTRdPTEyMCxlWzQ1NV09MTIxLGVbNDU3XT0yNTMsZVs0NjBdPTEyMixlWzQ2Ml09MzgyLGVbNDYzXT0zODAsZVs4NTNdPTQ0LGVbODU1XT01OCxlWzg1Nl09NDYsZVs4NzZdPTQ3LGVbODc4XT00NSxlWzg4Ml09NDUsZVs4OTRdPTQwLGVbODk1XT00MSxlWzg5Nl09OTEsZVs4OTddPTkzLGVbOTIzXT02NCxlWzEwMDRdPTQ4LGVbMTAwNV09NDksZVsxMDA2XT01MCxlWzEwMDddPTUxLGVbMTAwOF09NTIsZVsxMDA5XT01MyxlWzEwMTBdPTU0LGVbMTAxMV09NTUsZVsxMDEyXT01NixlWzEwMTNdPTU3LGVbMTA4MV09MzcsZVsxMDg1XT00MyxlWzEwODZdPTQ1fSkpO3QuZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JDYWxpYnJpPWR9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Ub1VuaWNvZGVNYXA9dC5JZGVudGl0eVRvVW5pY29kZU1hcD12b2lkIDA7dmFyIG49cigxNDQpO3QuVG9Vbmljb2RlTWFwPWNsYXNze2NvbnN0cnVjdG9yKCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOltdO3RoaXMuX21hcD1lfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5fbWFwLmxlbmd0aH1mb3JFYWNoKGUpe2Zvcihjb25zdCB0IGluIHRoaXMuX21hcCllKHQsdGhpcy5fbWFwW3RdLmNoYXJDb2RlQXQoMCkpfWhhcyhlKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fbWFwW2VdfWdldChlKXtyZXR1cm4gdGhpcy5fbWFwW2VdfWNoYXJDb2RlT2YoZSl7Y29uc3QgdD10aGlzLl9tYXA7aWYodC5sZW5ndGg8PTY1NTM2KXJldHVybiB0LmluZGV4T2YoZSk7Zm9yKGNvbnN0IHIgaW4gdClpZih0W3JdPT09ZSlyZXR1cm4gMHxyO3JldHVybi0xfWFtZW5kKGUpe2Zvcihjb25zdCB0IGluIGUpdGhpcy5fbWFwW3RdPWVbdF19fSx0LklkZW50aXR5VG9Vbmljb2RlTWFwPWNsYXNze2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5maXJzdENoYXI9ZSx0aGlzLmxhc3RDaGFyPXR9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLmxhc3RDaGFyKzEtdGhpcy5maXJzdENoYXJ9Zm9yRWFjaChlKXtmb3IobGV0IHQ9dGhpcy5maXJzdENoYXIscj10aGlzLmxhc3RDaGFyO3Q8PXI7dCsrKWUodCx0KX1oYXMoZSl7cmV0dXJuIHRoaXMuZmlyc3RDaGFyPD1lJiZlPD10aGlzLmxhc3RDaGFyfWdldChlKXtpZih0aGlzLmZpcnN0Q2hhcjw9ZSYmZTw9dGhpcy5sYXN0Q2hhcilyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShlKX1jaGFyQ29kZU9mKGUpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGUpJiZlPj10aGlzLmZpcnN0Q2hhciYmZTw9dGhpcy5sYXN0Q2hhcj9lOi0xfWFtZW5kKGUpeygwLG4udW5yZWFjaGFibGUpKCJTaG91bGQgbm90IGNhbGwgYW1lbmQoKSIpfX19LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5DRkZGb250PXZvaWQgMDt2YXIgbj1yKDE4NSksYT1yKDE4OCksaT1yKDE0NCk7dC5DRkZGb250PWNsYXNze2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5wcm9wZXJ0aWVzPXQ7Y29uc3Qgcj1uZXcgbi5DRkZQYXJzZXIoZSx0LGEuU0VBQ19BTkFMWVNJU19FTkFCTEVEKTt0aGlzLmNmZj1yLnBhcnNlKCksdGhpcy5jZmYuZHVwbGljYXRlRmlyc3RHbHlwaCgpO2NvbnN0IHM9bmV3IG4uQ0ZGQ29tcGlsZXIodGhpcy5jZmYpO3RoaXMuc2VhY3M9dGhpcy5jZmYuc2VhY3M7dHJ5e3RoaXMuZGF0YT1zLmNvbXBpbGUoKX1jYXRjaChyKXsoMCxpLndhcm4pKCJGYWlsZWQgdG8gY29tcGlsZSBmb250ICIrdC5sb2FkZWROYW1lKSx0aGlzLmRhdGE9ZX10aGlzLl9jcmVhdGVCdWlsdEluRW5jb2RpbmcoKX1nZXQgbnVtR2x5cGhzKCl7cmV0dXJuIHRoaXMuY2ZmLmNoYXJTdHJpbmdzLmNvdW50fWdldENoYXJzZXQoKXtyZXR1cm4gdGhpcy5jZmYuY2hhcnNldC5jaGFyc2V0fWdldEdseXBoTWFwcGluZygpe2NvbnN0IGU9dGhpcy5jZmYsdD10aGlzLnByb3BlcnRpZXMse2NpZFRvR2lkTWFwOnIsY01hcDpufT10LGk9ZS5jaGFyc2V0LmNoYXJzZXQ7bGV0IHMsbztpZih0LmNvbXBvc2l0ZSl7bGV0IHQsYTtpZigobnVsbD09cj92b2lkIDA6ci5sZW5ndGgpPjApe3Q9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IobGV0IGU9MCxuPXIubGVuZ3RoO2U8bjtlKyspe2NvbnN0IG49cltlXTt2b2lkIDAhPT1uJiYodFtuXT1lKX19aWYocz1PYmplY3QuY3JlYXRlKG51bGwpLGUuaXNDSURGb250KWZvcihvPTA7bzxpLmxlbmd0aDtvKyspe3ZhciBjO2NvbnN0IGU9aVtvXTthPW4uY2hhckNvZGVPZihlKSx2b2lkIDAhPT0obnVsbD09PShjPXQpfHx2b2lkIDA9PT1jP3ZvaWQgMDpjW2FdKSYmKGE9dFthXSksc1thXT1vfWVsc2UgZm9yKG89MDtvPGUuY2hhclN0cmluZ3MuY291bnQ7bysrKWE9bi5jaGFyQ29kZU9mKG8pLHNbYV09bztyZXR1cm4gc31sZXQgbD1lLmVuY29kaW5nP2UuZW5jb2RpbmcuZW5jb2Rpbmc6bnVsbDtyZXR1cm4gdC5pc0ludGVybmFsRm9udCYmKGw9dC5kZWZhdWx0RW5jb2RpbmcpLHM9KDAsYS50eXBlMUZvbnRHbHlwaE1hcHBpbmcpKHQsbCxpKSxzfWhhc0dseXBoSWQoZSl7cmV0dXJuIHRoaXMuY2ZmLmhhc0dseXBoSWQoZSl9X2NyZWF0ZUJ1aWx0SW5FbmNvZGluZygpe2NvbnN0e2NoYXJzZXQ6ZSxlbmNvZGluZzp0fT10aGlzLmNmZjtpZighZXx8IXQpcmV0dXJuO2NvbnN0IHI9ZS5jaGFyc2V0LG49dC5lbmNvZGluZyxhPVtdO2Zvcihjb25zdCBlIGluIG4pe2NvbnN0IHQ9bltlXTtpZih0Pj0wKXtjb25zdCBuPXJbdF07biYmKGFbZV09bil9fWEubGVuZ3RoPjAmJih0aGlzLnByb3BlcnRpZXMuYnVpbHRJbkVuY29kaW5nPWEpfX19LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Gb250UmVuZGVyZXJGYWN0b3J5PXZvaWQgMCxyKDEzOSkscigxNTcpLHIoMTU5KSxyKDg0KSxyKDkzKSxyKDk0KSxyKDk3KSxyKDk5KSxyKDEwMSkscigxMDUpLHIoMTA4KSxyKDExNSk7dmFyIG49cigxNDQpLGE9cigxODUpLGk9cigxODkpLHM9cigxODcpLG89cigxNTQpO2Z1bmN0aW9uIGMoZSx0KXtyZXR1cm4oZVt0XTw8MjR8ZVt0KzFdPDwxNnxlW3QrMl08PDh8ZVt0KzNdKT4+PjB9ZnVuY3Rpb24gbChlLHQpe3JldHVybiBlW3RdPDw4fGVbdCsxXX1mdW5jdGlvbiBoKGUsdCl7cmV0dXJuKGVbdF08PDI0fGVbdCsxXTw8MTYpPj4xNn1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuIGVbdF08PDI0Pj4yNH1mdW5jdGlvbiBkKGUsdCl7cmV0dXJuIGgoZSx0KS8xNjM4NH1mdW5jdGlvbiBmKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7bGV0IHI9MzI3Njg7cmV0dXJuIHQ8MTI0MD9yPTEwNzp0PDMzOTAwJiYocj0xMTMxKSxyfWZ1bmN0aW9uIGcoZSx0LHIpe2NvbnN0IGE9MT09PWwoZSx0KzIpP2MoZSx0KzgpOmMoZSx0KzE2KSxpPWwoZSx0K2EpO2xldCBzLG8saDtpZig0PT09aSl7bChlLHQrYSsyKTtjb25zdCByPWwoZSx0K2ErNik+PjE7Zm9yKG89dCthKzE0LHM9W10saD0wO2g8cjtoKyssbys9MilzW2hdPXtlbmQ6bChlLG8pfTtmb3Iobys9MixoPTA7aDxyO2grKyxvKz0yKXNbaF0uc3RhcnQ9bChlLG8pO2ZvcihoPTA7aDxyO2grKyxvKz0yKXNbaF0uaWREZWx0YT1sKGUsbyk7Zm9yKGg9MDtoPHI7aCsrLG8rPTIpe2xldCB0PWwoZSxvKTtpZigwIT09dCl7c1toXS5pZHM9W107Zm9yKGxldCByPTAsbj1zW2hdLmVuZC1zW2hdLnN0YXJ0KzE7cjxuO3IrKylzW2hdLmlkc1tyXT1sKGUsbyt0KSx0Kz0yfX1yZXR1cm4gc31pZigxMj09PWkpe2NvbnN0IHI9YyhlLHQrYSsxMik7Zm9yKG89dCthKzE2LHM9W10saD0wO2g8cjtoKyspdD1jKGUsbykscy5wdXNoKHtzdGFydDp0LGVuZDpjKGUsbys0KSxpZERlbHRhOmMoZSxvKzgpLXR9KSxvKz0xMjtyZXR1cm4gc310aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigidW5zdXBwb3J0ZWQgY21hcDogIi5jb25jYXQoaSkpfWZ1bmN0aW9uIHAoZSx0LHIsbil7dmFyIGkscztjb25zdCBjPW5ldyBhLkNGRlBhcnNlcihuZXcgby5TdHJlYW0oZSx0LHItdCkse30sbikucGFyc2UoKTtyZXR1cm57Z2x5cGhzOmMuY2hhclN0cmluZ3Mub2JqZWN0cyxzdWJyczpudWxsPT09KGk9Yy50b3BEaWN0LnByaXZhdGVEaWN0KXx8dm9pZCAwPT09aXx8bnVsbD09PShpPWkuc3VicnNJbmRleCl8fHZvaWQgMD09PWk/dm9pZCAwOmkub2JqZWN0cyxnc3VicnM6bnVsbD09PShzPWMuZ2xvYmFsU3VickluZGV4KXx8dm9pZCAwPT09cz92b2lkIDA6cy5vYmplY3RzLGlzQ0ZGQ0lERm9udDpjLmlzQ0lERm9udCxmZFNlbGVjdDpjLmZkU2VsZWN0LGZkQXJyYXk6Yy5mZEFycmF5fX1mdW5jdGlvbiBtKGUsdCl7Y29uc3Qgcj10LmNvZGVQb2ludEF0KDApO2xldCBuPTAsYT0wLGk9ZS5sZW5ndGgtMTtmb3IoO2E8aTspe2NvbnN0IHQ9YStpKzE+PjE7cjxlW3RdLnN0YXJ0P2k9dC0xOmE9dH1yZXR1cm4gZVthXS5zdGFydDw9ciYmcjw9ZVthXS5lbmQmJihuPWVbYV0uaWREZWx0YSsoZVthXS5pZHM/ZVthXS5pZHNbci1lW2FdLnN0YXJ0XTpyKSY2NTUzNSkse2NoYXJDb2RlOnIsZ2x5cGhJZDpufX1mdW5jdGlvbiBiKGUsdCxyKXtmdW5jdGlvbiBuKGUscil7dC5wdXNoKHtjbWQ6Im1vdmVUbyIsYXJnczpbZSxyXX0pfWZ1bmN0aW9uIGEoZSxyKXt0LnB1c2goe2NtZDoibGluZVRvIixhcmdzOltlLHJdfSl9ZnVuY3Rpb24gaShlLHIsbixhKXt0LnB1c2goe2NtZDoicXVhZHJhdGljQ3VydmVUbyIsYXJnczpbZSxyLG4sYV19KX1sZXQgcz0wO2NvbnN0IG89aChlLHMpO2xldCBjLGY9MCxnPTA7aWYocys9MTAsbzwwKWRve2M9bChlLHMpO2NvbnN0IG49bChlLHMrMik7bGV0IGEsaTtzKz00LDEmYz8oMiZjPyhhPWgoZSxzKSxpPWgoZSxzKzIpKTooYT1sKGUscyksaT1sKGUscysyKSkscys9NCk6MiZjPyhhPXUoZSxzKyspLGk9dShlLHMrKykpOihhPWVbcysrXSxpPWVbcysrXSksMiZjPyhmPWEsZz1pKTooZj0wLGc9MCk7bGV0IG89MSxwPTEsbT0wLHk9MDs4JmM/KG89cD1kKGUscykscys9Mik6NjQmYz8obz1kKGUscykscD1kKGUscysyKSxzKz00KToxMjgmYyYmKG89ZChlLHMpLG09ZChlLHMrMikseT1kKGUscys0KSxwPWQoZSxzKzYpLHMrPTgpO2NvbnN0IHc9ci5nbHlwaHNbbl07dyYmKHQucHVzaCh7Y21kOiJzYXZlIn0se2NtZDoidHJhbnNmb3JtIixhcmdzOltvLG0seSxwLGYsZ119KSxiKHcsdCxyKSx0LnB1c2goe2NtZDoicmVzdG9yZSJ9KSl9d2hpbGUoMzImYyk7ZWxzZXtjb25zdCB0PVtdO2xldCByLHU7Zm9yKHI9MDtyPG87cisrKXQucHVzaChsKGUscykpLHMrPTI7cys9MitsKGUscyk7Y29uc3QgZD10LmF0KC0xKSsxLHA9W107Zm9yKDtwLmxlbmd0aDxkOyl7Yz1lW3MrK107bGV0IHQ9MTtmb3IoOCZjJiYodCs9ZVtzKytdKTt0LS0gPjA7KXAucHVzaCh7ZmxhZ3M6Y30pfWZvcihyPTA7cjxkO3IrKyl7c3dpdGNoKDE4JnBbcl0uZmxhZ3Mpe2Nhc2UgMDpmKz1oKGUscykscys9MjticmVhaztjYXNlIDI6Zi09ZVtzKytdO2JyZWFrO2Nhc2UgMTg6Zis9ZVtzKytdfXBbcl0ueD1mfWZvcihyPTA7cjxkO3IrKyl7c3dpdGNoKDM2JnBbcl0uZmxhZ3Mpe2Nhc2UgMDpnKz1oKGUscykscys9MjticmVhaztjYXNlIDQ6Zy09ZVtzKytdO2JyZWFrO2Nhc2UgMzY6Zys9ZVtzKytdfXBbcl0ueT1nfWxldCBtPTA7Zm9yKHM9MDtzPG87cysrKXtjb25zdCBlPXRbc10sbz1wLnNsaWNlKG0sZSsxKTtpZigxJm9bMF0uZmxhZ3Mpby5wdXNoKG9bMF0pO2Vsc2UgaWYoMSZvLmF0KC0xKS5mbGFncylvLnVuc2hpZnQoby5hdCgtMSkpO2Vsc2V7Y29uc3QgZT17ZmxhZ3M6MSx4OihvWzBdLngrby5hdCgtMSkueCkvMix5OihvWzBdLnkrby5hdCgtMSkueSkvMn07by51bnNoaWZ0KGUpLG8ucHVzaChlKX1mb3IobihvWzBdLngsb1swXS55KSxyPTEsdT1vLmxlbmd0aDtyPHU7cisrKTEmb1tyXS5mbGFncz9hKG9bcl0ueCxvW3JdLnkpOjEmb1tyKzFdLmZsYWdzPyhpKG9bcl0ueCxvW3JdLnksb1tyKzFdLngsb1tyKzFdLnkpLHIrKyk6aShvW3JdLngsb1tyXS55LChvW3JdLngrb1tyKzFdLngpLzIsKG9bcl0ueStvW3IrMV0ueSkvMik7bT1lKzF9fX1mdW5jdGlvbiB5KGUsdCxyLGEpe2Z1bmN0aW9uIGkoZSxyKXt0LnB1c2goe2NtZDoibW92ZVRvIixhcmdzOltlLHJdfSl9ZnVuY3Rpb24gbyhlLHIpe3QucHVzaCh7Y21kOiJsaW5lVG8iLGFyZ3M6W2Uscl19KX1mdW5jdGlvbiBjKGUscixuLGEsaSxzKXt0LnB1c2goe2NtZDoiYmV6aWVyQ3VydmVUbyIsYXJnczpbZSxyLG4sYSxpLHNdfSl9Y29uc3QgbD1bXTtsZXQgaD0wLHU9MCxkPTA7IWZ1bmN0aW9uIGUoZyl7bGV0IHA9MDtmb3IoO3A8Zy5sZW5ndGg7KXtsZXQgdyx2LHgsUyxBLGssQyxPLEYsST0hMSxUPWdbcCsrXTtzd2l0Y2goVCl7Y2FzZSAxOmNhc2UgMzpjYXNlIDE4OmNhc2UgMjM6ZCs9bC5sZW5ndGg+PjEsST0hMDticmVhaztjYXNlIDQ6dSs9bC5wb3AoKSxpKGgsdSksST0hMDticmVhaztjYXNlIDU6Zm9yKDtsLmxlbmd0aD4wOyloKz1sLnNoaWZ0KCksdSs9bC5zaGlmdCgpLG8oaCx1KTticmVhaztjYXNlIDY6Zm9yKDtsLmxlbmd0aD4wJiYoaCs9bC5zaGlmdCgpLG8oaCx1KSwwIT09bC5sZW5ndGgpOyl1Kz1sLnNoaWZ0KCksbyhoLHUpO2JyZWFrO2Nhc2UgNzpmb3IoO2wubGVuZ3RoPjAmJih1Kz1sLnNoaWZ0KCksbyhoLHUpLDAhPT1sLmxlbmd0aCk7KWgrPWwuc2hpZnQoKSxvKGgsdSk7YnJlYWs7Y2FzZSA4OmZvcig7bC5sZW5ndGg+MDspdz1oK2wuc2hpZnQoKSx4PXUrbC5zaGlmdCgpLHY9dytsLnNoaWZ0KCksUz14K2wuc2hpZnQoKSxoPXYrbC5zaGlmdCgpLHU9UytsLnNoaWZ0KCksYyh3LHgsdixTLGgsdSk7YnJlYWs7Y2FzZSAxMDppZihPPWwucG9wKCksRj1udWxsLHIuaXNDRkZDSURGb250KXtjb25zdCBlPXIuZmRTZWxlY3QuZ2V0RkRJbmRleChhKTtpZihlPj0wJiZlPHIuZmRBcnJheS5sZW5ndGgpe3ZhciBiO2NvbnN0IHQ9ci5mZEFycmF5W2VdO2xldCBuOyhudWxsPT09KGI9dC5wcml2YXRlRGljdCl8fHZvaWQgMD09PWI/dm9pZCAwOmIuc3VicnNJbmRleCkmJihuPXQucHJpdmF0ZURpY3Quc3VicnNJbmRleC5vYmplY3RzKSxuJiYoTys9ZihuKSxGPW5bT10pfWVsc2UoMCxuLndhcm4pKCJJbnZhbGlkIGZkIGluZGV4IGZvciBnbHlwaCBpbmRleC4iKX1lbHNlIEY9ci5zdWJyc1tPK3Iuc3VicnNCaWFzXTtGJiZlKEYpO2JyZWFrO2Nhc2UgMTE6cmV0dXJuO2Nhc2UgMTI6c3dpdGNoKFQ9Z1twKytdLFQpe2Nhc2UgMzQ6dz1oK2wuc2hpZnQoKSx2PXcrbC5zaGlmdCgpLEE9dStsLnNoaWZ0KCksaD12K2wuc2hpZnQoKSxjKHcsdSx2LEEsaCxBKSx3PWgrbC5zaGlmdCgpLHY9dytsLnNoaWZ0KCksaD12K2wuc2hpZnQoKSxjKHcsQSx2LHUsaCx1KTticmVhaztjYXNlIDM1Onc9aCtsLnNoaWZ0KCkseD11K2wuc2hpZnQoKSx2PXcrbC5zaGlmdCgpLFM9eCtsLnNoaWZ0KCksaD12K2wuc2hpZnQoKSx1PVMrbC5zaGlmdCgpLGModyx4LHYsUyxoLHUpLHc9aCtsLnNoaWZ0KCkseD11K2wuc2hpZnQoKSx2PXcrbC5zaGlmdCgpLFM9eCtsLnNoaWZ0KCksaD12K2wuc2hpZnQoKSx1PVMrbC5zaGlmdCgpLGModyx4LHYsUyxoLHUpLGwucG9wKCk7YnJlYWs7Y2FzZSAzNjp3PWgrbC5zaGlmdCgpLEE9dStsLnNoaWZ0KCksdj13K2wuc2hpZnQoKSxrPUErbC5zaGlmdCgpLGg9ditsLnNoaWZ0KCksYyh3LEEsdixrLGgsayksdz1oK2wuc2hpZnQoKSx2PXcrbC5zaGlmdCgpLEM9aytsLnNoaWZ0KCksaD12K2wuc2hpZnQoKSxjKHcsayx2LEMsaCx1KTticmVhaztjYXNlIDM3OmNvbnN0IGU9aCx0PXU7dz1oK2wuc2hpZnQoKSx4PXUrbC5zaGlmdCgpLHY9dytsLnNoaWZ0KCksUz14K2wuc2hpZnQoKSxoPXYrbC5zaGlmdCgpLHU9UytsLnNoaWZ0KCksYyh3LHgsdixTLGgsdSksdz1oK2wuc2hpZnQoKSx4PXUrbC5zaGlmdCgpLHY9dytsLnNoaWZ0KCksUz14K2wuc2hpZnQoKSxoPXYsdT1TLE1hdGguYWJzKGgtZSk+TWF0aC5hYnModS10KT9oKz1sLnNoaWZ0KCk6dSs9bC5zaGlmdCgpLGModyx4LHYsUyxoLHUpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoInVua25vd24gb3BlcmF0b3I6IDEyICIuY29uY2F0KFQpKX1icmVhaztjYXNlIDE0OmlmKGwubGVuZ3RoPj00KXtjb25zdCBlPWwucG9wKCksbj1sLnBvcCgpO3U9bC5wb3AoKSxoPWwucG9wKCksdC5wdXNoKHtjbWQ6InNhdmUifSx7Y21kOiJ0cmFuc2xhdGUiLGFyZ3M6W2gsdV19KTtsZXQgYT1tKHIuY21hcCxTdHJpbmcuZnJvbUNoYXJDb2RlKHIuZ2x5cGhOYW1lTWFwW3MuU3RhbmRhcmRFbmNvZGluZ1tlXV0pKTt5KHIuZ2x5cGhzW2EuZ2x5cGhJZF0sdCxyLGEuZ2x5cGhJZCksdC5wdXNoKHtjbWQ6InJlc3RvcmUifSksYT1tKHIuY21hcCxTdHJpbmcuZnJvbUNoYXJDb2RlKHIuZ2x5cGhOYW1lTWFwW3MuU3RhbmRhcmRFbmNvZGluZ1tuXV0pKSx5KHIuZ2x5cGhzW2EuZ2x5cGhJZF0sdCxyLGEuZ2x5cGhJZCl9cmV0dXJuO2Nhc2UgMTk6Y2FzZSAyMDpkKz1sLmxlbmd0aD4+MSxwKz1kKzc+PjMsST0hMDticmVhaztjYXNlIDIxOnUrPWwucG9wKCksaCs9bC5wb3AoKSxpKGgsdSksST0hMDticmVhaztjYXNlIDIyOmgrPWwucG9wKCksaShoLHUpLEk9ITA7YnJlYWs7Y2FzZSAyNDpmb3IoO2wubGVuZ3RoPjI7KXc9aCtsLnNoaWZ0KCkseD11K2wuc2hpZnQoKSx2PXcrbC5zaGlmdCgpLFM9eCtsLnNoaWZ0KCksaD12K2wuc2hpZnQoKSx1PVMrbC5zaGlmdCgpLGModyx4LHYsUyxoLHUpO2grPWwuc2hpZnQoKSx1Kz1sLnNoaWZ0KCksbyhoLHUpO2JyZWFrO2Nhc2UgMjU6Zm9yKDtsLmxlbmd0aD42OyloKz1sLnNoaWZ0KCksdSs9bC5zaGlmdCgpLG8oaCx1KTt3PWgrbC5zaGlmdCgpLHg9dStsLnNoaWZ0KCksdj13K2wuc2hpZnQoKSxTPXgrbC5zaGlmdCgpLGg9ditsLnNoaWZ0KCksdT1TK2wuc2hpZnQoKSxjKHcseCx2LFMsaCx1KTticmVhaztjYXNlIDI2OmZvcihsLmxlbmd0aCUyJiYoaCs9bC5zaGlmdCgpKTtsLmxlbmd0aD4wOyl3PWgseD11K2wuc2hpZnQoKSx2PXcrbC5zaGlmdCgpLFM9eCtsLnNoaWZ0KCksaD12LHU9UytsLnNoaWZ0KCksYyh3LHgsdixTLGgsdSk7YnJlYWs7Y2FzZSAyNzpmb3IobC5sZW5ndGglMiYmKHUrPWwuc2hpZnQoKSk7bC5sZW5ndGg+MDspdz1oK2wuc2hpZnQoKSx4PXUsdj13K2wuc2hpZnQoKSxTPXgrbC5zaGlmdCgpLGg9ditsLnNoaWZ0KCksdT1TLGModyx4LHYsUyxoLHUpO2JyZWFrO2Nhc2UgMjg6bC5wdXNoKChnW3BdPDwyNHxnW3ArMV08PDE2KT4+MTYpLHArPTI7YnJlYWs7Y2FzZSAyOTpPPWwucG9wKCkrci5nc3VicnNCaWFzLEY9ci5nc3VicnNbT10sRiYmZShGKTticmVhaztjYXNlIDMwOmZvcig7bC5sZW5ndGg+MCYmKHc9aCx4PXUrbC5zaGlmdCgpLHY9dytsLnNoaWZ0KCksUz14K2wuc2hpZnQoKSxoPXYrbC5zaGlmdCgpLHU9UysoMT09PWwubGVuZ3RoP2wuc2hpZnQoKTowKSxjKHcseCx2LFMsaCx1KSwwIT09bC5sZW5ndGgpOyl3PWgrbC5zaGlmdCgpLHg9dSx2PXcrbC5zaGlmdCgpLFM9eCtsLnNoaWZ0KCksdT1TK2wuc2hpZnQoKSxoPXYrKDE9PT1sLmxlbmd0aD9sLnNoaWZ0KCk6MCksYyh3LHgsdixTLGgsdSk7YnJlYWs7Y2FzZSAzMTpmb3IoO2wubGVuZ3RoPjAmJih3PWgrbC5zaGlmdCgpLHg9dSx2PXcrbC5zaGlmdCgpLFM9eCtsLnNoaWZ0KCksdT1TK2wuc2hpZnQoKSxoPXYrKDE9PT1sLmxlbmd0aD9sLnNoaWZ0KCk6MCksYyh3LHgsdixTLGgsdSksMCE9PWwubGVuZ3RoKTspdz1oLHg9dStsLnNoaWZ0KCksdj13K2wuc2hpZnQoKSxTPXgrbC5zaGlmdCgpLGg9ditsLnNoaWZ0KCksdT1TKygxPT09bC5sZW5ndGg/bC5zaGlmdCgpOjApLGModyx4LHYsUyxoLHUpO2JyZWFrO2RlZmF1bHQ6aWYoVDwzMil0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigidW5rbm93biBvcGVyYXRvcjogIi5jb25jYXQoVCkpO1Q8MjQ3P2wucHVzaChULTEzOSk6VDwyNTE/bC5wdXNoKDI1NiooVC0yNDcpK2dbcCsrXSsxMDgpOlQ8MjU1P2wucHVzaCgyNTYqLShULTI1MSktZ1twKytdLTEwOCk6KGwucHVzaCgoZ1twXTw8MjR8Z1twKzFdPDwxNnxnW3ArMl08PDh8Z1twKzNdKS82NTUzNikscCs9NCl9SSYmKGwubGVuZ3RoPTApfX0oZSl9Y29uc3Qgdz1bXTtjbGFzcyB2e2NvbnN0cnVjdG9yKGUpe3RoaXMuY29uc3RydWN0b3I9PT12JiYoMCxuLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgQ29tcGlsZWRGb250LiIpLHRoaXMuZm9udE1hdHJpeD1lLHRoaXMuY29tcGlsZWRHbHlwaHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLmNvbXBpbGVkQ2hhckNvZGVUb0dseXBoSWQ9T2JqZWN0LmNyZWF0ZShudWxsKX1nZXRQYXRoSnMoZSl7Y29uc3R7Y2hhckNvZGU6dCxnbHlwaElkOnJ9PW0odGhpcy5jbWFwLGUpO2xldCBuPXRoaXMuY29tcGlsZWRHbHlwaHNbcl07aWYoIW4pdHJ5e249dGhpcy5jb21waWxlR2x5cGgodGhpcy5nbHlwaHNbcl0sciksdGhpcy5jb21waWxlZEdseXBoc1tyXT1ufWNhdGNoKGUpe3Rocm93IHRoaXMuY29tcGlsZWRHbHlwaHNbcl09dyx2b2lkIDA9PT10aGlzLmNvbXBpbGVkQ2hhckNvZGVUb0dseXBoSWRbdF0mJih0aGlzLmNvbXBpbGVkQ2hhckNvZGVUb0dseXBoSWRbdF09ciksZX1yZXR1cm4gdm9pZCAwPT09dGhpcy5jb21waWxlZENoYXJDb2RlVG9HbHlwaElkW3RdJiYodGhpcy5jb21waWxlZENoYXJDb2RlVG9HbHlwaElkW3RdPXIpLG59Y29tcGlsZUdseXBoKGUsdCl7aWYoIWV8fDA9PT1lLmxlbmd0aHx8MTQ9PT1lWzBdKXJldHVybiB3O2xldCByPXRoaXMuZm9udE1hdHJpeDtpZih0aGlzLmlzQ0ZGQ0lERm9udCl7Y29uc3QgZT10aGlzLmZkU2VsZWN0LmdldEZESW5kZXgodCk7ZT49MCYmZTx0aGlzLmZkQXJyYXkubGVuZ3RoP3I9dGhpcy5mZEFycmF5W2VdLmdldEJ5TmFtZSgiRm9udE1hdHJpeCIpfHxuLkZPTlRfSURFTlRJVFlfTUFUUklYOigwLG4ud2FybikoIkludmFsaWQgZmQgaW5kZXggZm9yIGdseXBoIGluZGV4LiIpfWNvbnN0IGE9W3tjbWQ6InNhdmUifSx7Y21kOiJ0cmFuc2Zvcm0iLGFyZ3M6ci5zbGljZSgpfSx7Y21kOiJzY2FsZSIsYXJnczpbInNpemUiLCItc2l6ZSJdfV07cmV0dXJuIHRoaXMuY29tcGlsZUdseXBoSW1wbChlLGEsdCksYS5wdXNoKHtjbWQ6InJlc3RvcmUifSksYX1jb21waWxlR2x5cGhJbXBsKCl7KDAsbi51bnJlYWNoYWJsZSkoIkNoaWxkcmVuIGNsYXNzZXMgc2hvdWxkIGltcGxlbWVudCB0aGlzLiIpfWhhc0J1aWx0UGF0aChlKXtjb25zdHtjaGFyQ29kZTp0LGdseXBoSWQ6cn09bSh0aGlzLmNtYXAsZSk7cmV0dXJuIHZvaWQgMCE9PXRoaXMuY29tcGlsZWRHbHlwaHNbcl0mJnZvaWQgMCE9PXRoaXMuY29tcGlsZWRDaGFyQ29kZVRvR2x5cGhJZFt0XX19Y2xhc3MgeCBleHRlbmRzIHZ7Y29uc3RydWN0b3IoZSx0LHIpe3N1cGVyKHJ8fFs0ODhlLTYsMCwwLDQ4OGUtNiwwLDBdKSx0aGlzLmdseXBocz1lLHRoaXMuY21hcD10fWNvbXBpbGVHbHlwaEltcGwoZSx0KXtiKGUsdCx0aGlzKX19Y2xhc3MgUyBleHRlbmRzIHZ7Y29uc3RydWN0b3IoZSx0LHIsbil7c3VwZXIocnx8Wy4wMDEsMCwwLC4wMDEsMCwwXSksdGhpcy5nbHlwaHM9ZS5nbHlwaHMsdGhpcy5nc3VicnM9ZS5nc3VicnN8fFtdLHRoaXMuc3VicnM9ZS5zdWJyc3x8W10sdGhpcy5jbWFwPXQsdGhpcy5nbHlwaE5hbWVNYXA9bnx8KDAsaS5nZXRHbHlwaHNVbmljb2RlKSgpLHRoaXMuZ3N1YnJzQmlhcz1mKHRoaXMuZ3N1YnJzKSx0aGlzLnN1YnJzQmlhcz1mKHRoaXMuc3VicnMpLHRoaXMuaXNDRkZDSURGb250PWUuaXNDRkZDSURGb250LHRoaXMuZmRTZWxlY3Q9ZS5mZFNlbGVjdCx0aGlzLmZkQXJyYXk9ZS5mZEFycmF5fWNvbXBpbGVHbHlwaEltcGwoZSx0LHIpe3koZSx0LHRoaXMscil9fXQuRm9udFJlbmRlcmVyRmFjdG9yeT1jbGFzc3tzdGF0aWMgY3JlYXRlKGUsdCl7Y29uc3Qgcj1uZXcgVWludDhBcnJheShlLmRhdGEpO2xldCBhLGkscyxvLGgsdTtjb25zdCBkPWwociw0KTtmb3IobGV0IGU9MCxmPTEyO2U8ZDtlKyssZis9MTYpe2NvbnN0IGU9KDAsbi5ieXRlc1RvU3RyaW5nKShyLnN1YmFycmF5KGYsZis0KSksZD1jKHIsZis4KSxtPWMocixmKzEyKTtzd2l0Y2goZSl7Y2FzZSJjbWFwIjphPWcocixkKTticmVhaztjYXNlImdseWYiOmk9ci5zdWJhcnJheShkLGQrbSk7YnJlYWs7Y2FzZSJsb2NhIjpzPXIuc3ViYXJyYXkoZCxkK20pO2JyZWFrO2Nhc2UiaGVhZCI6dT1sKHIsZCsxOCksaD1sKHIsZCs1MCk7YnJlYWs7Y2FzZSJDRkYgIjpvPXAocixkLGQrbSx0KX19aWYoaSl7Y29uc3QgdD11P1sxL3UsMCwwLDEvdSwwLDBdOmUuZm9udE1hdHJpeDtyZXR1cm4gbmV3IHgoZnVuY3Rpb24oZSx0LHIpe2xldCBuLGE7cj8obj00LGE9Yyk6KG49MixhPShlLHQpPT4yKmwoZSx0KSk7Y29uc3QgaT1bXTtsZXQgcz1hKHQsMCk7Zm9yKGxldCByPW47cjx0Lmxlbmd0aDtyKz1uKXtjb25zdCBuPWEodCxyKTtpLnB1c2goZS5zdWJhcnJheShzLG4pKSxzPW59cmV0dXJuIGl9KGkscyxoKSxhLHQpfXJldHVybiBuZXcgUyhvLGEsZS5mb250TWF0cml4LGUuZ2x5cGhOYW1lTWFwKX19fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2V0TWV0cmljcz10LmdldEZvbnRCYXNpY01ldHJpY3M9dm9pZCAwO3ZhciBuPXIoMTQ5KTtjb25zdCBhPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5Db3VyaWVyPTYwMCxlWyJDb3VyaWVyLUJvbGQiXT02MDAsZVsiQ291cmllci1Cb2xkT2JsaXF1ZSJdPTYwMCxlWyJDb3VyaWVyLU9ibGlxdWUiXT02MDAsZS5IZWx2ZXRpY2E9KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI3OCxlLmV4Y2xhbT0yNzgsZS5xdW90ZWRibD0zNTUsZS5udW1iZXJzaWduPTU1NixlLmRvbGxhcj01NTYsZS5wZXJjZW50PTg4OSxlLmFtcGVyc2FuZD02NjcsZS5xdW90ZXJpZ2h0PTIyMixlLnBhcmVubGVmdD0zMzMsZS5wYXJlbnJpZ2h0PTMzMyxlLmFzdGVyaXNrPTM4OSxlLnBsdXM9NTg0LGUuY29tbWE9Mjc4LGUuaHlwaGVuPTMzMyxlLnBlcmlvZD0yNzgsZS5zbGFzaD0yNzgsZS56ZXJvPTU1NixlLm9uZT01NTYsZS50d289NTU2LGUudGhyZWU9NTU2LGUuZm91cj01NTYsZS5maXZlPTU1NixlLnNpeD01NTYsZS5zZXZlbj01NTYsZS5laWdodD01NTYsZS5uaW5lPTU1NixlLmNvbG9uPTI3OCxlLnNlbWljb2xvbj0yNzgsZS5sZXNzPTU4NCxlLmVxdWFsPTU4NCxlLmdyZWF0ZXI9NTg0LGUucXVlc3Rpb249NTU2LGUuYXQ9MTAxNSxlLkE9NjY3LGUuQj02NjcsZS5DPTcyMixlLkQ9NzIyLGUuRT02NjcsZS5GPTYxMSxlLkc9Nzc4LGUuSD03MjIsZS5JPTI3OCxlLko9NTAwLGUuSz02NjcsZS5MPTU1NixlLk09ODMzLGUuTj03MjIsZS5PPTc3OCxlLlA9NjY3LGUuUT03NzgsZS5SPTcyMixlLlM9NjY3LGUuVD02MTEsZS5VPTcyMixlLlY9NjY3LGUuVz05NDQsZS5YPTY2NyxlLlk9NjY3LGUuWj02MTEsZS5icmFja2V0bGVmdD0yNzgsZS5iYWNrc2xhc2g9Mjc4LGUuYnJhY2tldHJpZ2h0PTI3OCxlLmFzY2lpY2lyY3VtPTQ2OSxlLnVuZGVyc2NvcmU9NTU2LGUucXVvdGVsZWZ0PTIyMixlLmE9NTU2LGUuYj01NTYsZS5jPTUwMCxlLmQ9NTU2LGUuZT01NTYsZS5mPTI3OCxlLmc9NTU2LGUuaD01NTYsZS5pPTIyMixlLmo9MjIyLGUuaz01MDAsZS5sPTIyMixlLm09ODMzLGUubj01NTYsZS5vPTU1NixlLnA9NTU2LGUucT01NTYsZS5yPTMzMyxlLnM9NTAwLGUudD0yNzgsZS51PTU1NixlLnY9NTAwLGUudz03MjIsZS54PTUwMCxlLnk9NTAwLGUuej01MDAsZS5icmFjZWxlZnQ9MzM0LGUuYmFyPTI2MCxlLmJyYWNlcmlnaHQ9MzM0LGUuYXNjaWl0aWxkZT01ODQsZS5leGNsYW1kb3duPTMzMyxlLmNlbnQ9NTU2LGUuc3Rlcmxpbmc9NTU2LGUuZnJhY3Rpb249MTY3LGUueWVuPTU1NixlLmZsb3Jpbj01NTYsZS5zZWN0aW9uPTU1NixlLmN1cnJlbmN5PTU1NixlLnF1b3Rlc2luZ2xlPTE5MSxlLnF1b3RlZGJsbGVmdD0zMzMsZS5ndWlsbGVtb3RsZWZ0PTU1NixlLmd1aWxzaW5nbGxlZnQ9MzMzLGUuZ3VpbHNpbmdscmlnaHQ9MzMzLGUuZmk9NTAwLGUuZmw9NTAwLGUuZW5kYXNoPTU1NixlLmRhZ2dlcj01NTYsZS5kYWdnZXJkYmw9NTU2LGUucGVyaW9kY2VudGVyZWQ9Mjc4LGUucGFyYWdyYXBoPTUzNyxlLmJ1bGxldD0zNTAsZS5xdW90ZXNpbmdsYmFzZT0yMjIsZS5xdW90ZWRibGJhc2U9MzMzLGUucXVvdGVkYmxyaWdodD0zMzMsZS5ndWlsbGVtb3RyaWdodD01NTYsZS5lbGxpcHNpcz0xZTMsZS5wZXJ0aG91c2FuZD0xZTMsZS5xdWVzdGlvbmRvd249NjExLGUuZ3JhdmU9MzMzLGUuYWN1dGU9MzMzLGUuY2lyY3VtZmxleD0zMzMsZS50aWxkZT0zMzMsZS5tYWNyb249MzMzLGUuYnJldmU9MzMzLGUuZG90YWNjZW50PTMzMyxlLmRpZXJlc2lzPTMzMyxlLnJpbmc9MzMzLGUuY2VkaWxsYT0zMzMsZS5odW5nYXJ1bWxhdXQ9MzMzLGUub2dvbmVrPTMzMyxlLmNhcm9uPTMzMyxlLmVtZGFzaD0xZTMsZS5BRT0xZTMsZS5vcmRmZW1pbmluZT0zNzAsZS5Mc2xhc2g9NTU2LGUuT3NsYXNoPTc3OCxlLk9FPTFlMyxlLm9yZG1hc2N1bGluZT0zNjUsZS5hZT04ODksZS5kb3RsZXNzaT0yNzgsZS5sc2xhc2g9MjIyLGUub3NsYXNoPTYxMSxlLm9lPTk0NCxlLmdlcm1hbmRibHM9NjExLGUuSWRpZXJlc2lzPTI3OCxlLmVhY3V0ZT01NTYsZS5hYnJldmU9NTU2LGUudWh1bmdhcnVtbGF1dD01NTYsZS5lY2Fyb249NTU2LGUuWWRpZXJlc2lzPTY2NyxlLmRpdmlkZT01ODQsZS5ZYWN1dGU9NjY3LGUuQWNpcmN1bWZsZXg9NjY3LGUuYWFjdXRlPTU1NixlLlVjaXJjdW1mbGV4PTcyMixlLnlhY3V0ZT01MDAsZS5zY29tbWFhY2NlbnQ9NTAwLGUuZWNpcmN1bWZsZXg9NTU2LGUuVXJpbmc9NzIyLGUuVWRpZXJlc2lzPTcyMixlLmFvZ29uZWs9NTU2LGUuVWFjdXRlPTcyMixlLnVvZ29uZWs9NTU2LGUuRWRpZXJlc2lzPTY2NyxlLkRjcm9hdD03MjIsZS5jb21tYWFjY2VudD0yNTAsZS5jb3B5cmlnaHQ9NzM3LGUuRW1hY3Jvbj02NjcsZS5jY2Fyb249NTAwLGUuYXJpbmc9NTU2LGUuTmNvbW1hYWNjZW50PTcyMixlLmxhY3V0ZT0yMjIsZS5hZ3JhdmU9NTU2LGUuVGNvbW1hYWNjZW50PTYxMSxlLkNhY3V0ZT03MjIsZS5hdGlsZGU9NTU2LGUuRWRvdGFjY2VudD02NjcsZS5zY2Fyb249NTAwLGUuc2NlZGlsbGE9NTAwLGUuaWFjdXRlPTI3OCxlLmxvemVuZ2U9NDcxLGUuUmNhcm9uPTcyMixlLkdjb21tYWFjY2VudD03NzgsZS51Y2lyY3VtZmxleD01NTYsZS5hY2lyY3VtZmxleD01NTYsZS5BbWFjcm9uPTY2NyxlLnJjYXJvbj0zMzMsZS5jY2VkaWxsYT01MDAsZS5aZG90YWNjZW50PTYxMSxlLlRob3JuPTY2NyxlLk9tYWNyb249Nzc4LGUuUmFjdXRlPTcyMixlLlNhY3V0ZT02NjcsZS5kY2Fyb249NjQzLGUuVW1hY3Jvbj03MjIsZS51cmluZz01NTYsZS50aHJlZXN1cGVyaW9yPTMzMyxlLk9ncmF2ZT03NzgsZS5BZ3JhdmU9NjY3LGUuQWJyZXZlPTY2NyxlLm11bHRpcGx5PTU4NCxlLnVhY3V0ZT01NTYsZS5UY2Fyb249NjExLGUucGFydGlhbGRpZmY9NDc2LGUueWRpZXJlc2lzPTUwMCxlLk5hY3V0ZT03MjIsZS5pY2lyY3VtZmxleD0yNzgsZS5FY2lyY3VtZmxleD02NjcsZS5hZGllcmVzaXM9NTU2LGUuZWRpZXJlc2lzPTU1NixlLmNhY3V0ZT01MDAsZS5uYWN1dGU9NTU2LGUudW1hY3Jvbj01NTYsZS5OY2Fyb249NzIyLGUuSWFjdXRlPTI3OCxlLnBsdXNtaW51cz01ODQsZS5icm9rZW5iYXI9MjYwLGUucmVnaXN0ZXJlZD03MzcsZS5HYnJldmU9Nzc4LGUuSWRvdGFjY2VudD0yNzgsZS5zdW1tYXRpb249NjAwLGUuRWdyYXZlPTY2NyxlLnJhY3V0ZT0zMzMsZS5vbWFjcm9uPTU1NixlLlphY3V0ZT02MTEsZS5aY2Fyb249NjExLGUuZ3JlYXRlcmVxdWFsPTU0OSxlLkV0aD03MjIsZS5DY2VkaWxsYT03MjIsZS5sY29tbWFhY2NlbnQ9MjIyLGUudGNhcm9uPTMxNyxlLmVvZ29uZWs9NTU2LGUuVW9nb25laz03MjIsZS5BYWN1dGU9NjY3LGUuQWRpZXJlc2lzPTY2NyxlLmVncmF2ZT01NTYsZS56YWN1dGU9NTAwLGUuaW9nb25laz0yMjIsZS5PYWN1dGU9Nzc4LGUub2FjdXRlPTU1NixlLmFtYWNyb249NTU2LGUuc2FjdXRlPTUwMCxlLmlkaWVyZXNpcz0yNzgsZS5PY2lyY3VtZmxleD03NzgsZS5VZ3JhdmU9NzIyLGUuRGVsdGE9NjEyLGUudGhvcm49NTU2LGUudHdvc3VwZXJpb3I9MzMzLGUuT2RpZXJlc2lzPTc3OCxlLm11PTU1NixlLmlncmF2ZT0yNzgsZS5vaHVuZ2FydW1sYXV0PTU1NixlLkVvZ29uZWs9NjY3LGUuZGNyb2F0PTU1NixlLnRocmVlcXVhcnRlcnM9ODM0LGUuU2NlZGlsbGE9NjY3LGUubGNhcm9uPTI5OSxlLktjb21tYWFjY2VudD02NjcsZS5MYWN1dGU9NTU2LGUudHJhZGVtYXJrPTFlMyxlLmVkb3RhY2NlbnQ9NTU2LGUuSWdyYXZlPTI3OCxlLkltYWNyb249Mjc4LGUuTGNhcm9uPTU1NixlLm9uZWhhbGY9ODM0LGUubGVzc2VxdWFsPTU0OSxlLm9jaXJjdW1mbGV4PTU1NixlLm50aWxkZT01NTYsZS5VaHVuZ2FydW1sYXV0PTcyMixlLkVhY3V0ZT02NjcsZS5lbWFjcm9uPTU1NixlLmdicmV2ZT01NTYsZS5vbmVxdWFydGVyPTgzNCxlLlNjYXJvbj02NjcsZS5TY29tbWFhY2NlbnQ9NjY3LGUuT2h1bmdhcnVtbGF1dD03NzgsZS5kZWdyZWU9NDAwLGUub2dyYXZlPTU1NixlLkNjYXJvbj03MjIsZS51Z3JhdmU9NTU2LGUucmFkaWNhbD00NTMsZS5EY2Fyb249NzIyLGUucmNvbW1hYWNjZW50PTMzMyxlLk50aWxkZT03MjIsZS5vdGlsZGU9NTU2LGUuUmNvbW1hYWNjZW50PTcyMixlLkxjb21tYWFjY2VudD01NTYsZS5BdGlsZGU9NjY3LGUuQW9nb25laz02NjcsZS5BcmluZz02NjcsZS5PdGlsZGU9Nzc4LGUuemRvdGFjY2VudD01MDAsZS5FY2Fyb249NjY3LGUuSW9nb25laz0yNzgsZS5rY29tbWFhY2NlbnQ9NTAwLGUubWludXM9NTg0LGUuSWNpcmN1bWZsZXg9Mjc4LGUubmNhcm9uPTU1NixlLnRjb21tYWFjY2VudD0yNzgsZS5sb2dpY2Fsbm90PTU4NCxlLm9kaWVyZXNpcz01NTYsZS51ZGllcmVzaXM9NTU2LGUubm90ZXF1YWw9NTQ5LGUuZ2NvbW1hYWNjZW50PTU1NixlLmV0aD01NTYsZS56Y2Fyb249NTAwLGUubmNvbW1hYWNjZW50PTU1NixlLm9uZXN1cGVyaW9yPTMzMyxlLmltYWNyb249Mjc4LGUuRXVybz01NTZ9KSksZVsiSGVsdmV0aWNhLUJvbGQiXT0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9Mjc4LGUuZXhjbGFtPTMzMyxlLnF1b3RlZGJsPTQ3NCxlLm51bWJlcnNpZ249NTU2LGUuZG9sbGFyPTU1NixlLnBlcmNlbnQ9ODg5LGUuYW1wZXJzYW5kPTcyMixlLnF1b3RlcmlnaHQ9Mjc4LGUucGFyZW5sZWZ0PTMzMyxlLnBhcmVucmlnaHQ9MzMzLGUuYXN0ZXJpc2s9Mzg5LGUucGx1cz01ODQsZS5jb21tYT0yNzgsZS5oeXBoZW49MzMzLGUucGVyaW9kPTI3OCxlLnNsYXNoPTI3OCxlLnplcm89NTU2LGUub25lPTU1NixlLnR3bz01NTYsZS50aHJlZT01NTYsZS5mb3VyPTU1NixlLmZpdmU9NTU2LGUuc2l4PTU1NixlLnNldmVuPTU1NixlLmVpZ2h0PTU1NixlLm5pbmU9NTU2LGUuY29sb249MzMzLGUuc2VtaWNvbG9uPTMzMyxlLmxlc3M9NTg0LGUuZXF1YWw9NTg0LGUuZ3JlYXRlcj01ODQsZS5xdWVzdGlvbj02MTEsZS5hdD05NzUsZS5BPTcyMixlLkI9NzIyLGUuQz03MjIsZS5EPTcyMixlLkU9NjY3LGUuRj02MTEsZS5HPTc3OCxlLkg9NzIyLGUuST0yNzgsZS5KPTU1NixlLks9NzIyLGUuTD02MTEsZS5NPTgzMyxlLk49NzIyLGUuTz03NzgsZS5QPTY2NyxlLlE9Nzc4LGUuUj03MjIsZS5TPTY2NyxlLlQ9NjExLGUuVT03MjIsZS5WPTY2NyxlLlc9OTQ0LGUuWD02NjcsZS5ZPTY2NyxlLlo9NjExLGUuYnJhY2tldGxlZnQ9MzMzLGUuYmFja3NsYXNoPTI3OCxlLmJyYWNrZXRyaWdodD0zMzMsZS5hc2NpaWNpcmN1bT01ODQsZS51bmRlcnNjb3JlPTU1NixlLnF1b3RlbGVmdD0yNzgsZS5hPTU1NixlLmI9NjExLGUuYz01NTYsZS5kPTYxMSxlLmU9NTU2LGUuZj0zMzMsZS5nPTYxMSxlLmg9NjExLGUuaT0yNzgsZS5qPTI3OCxlLms9NTU2LGUubD0yNzgsZS5tPTg4OSxlLm49NjExLGUubz02MTEsZS5wPTYxMSxlLnE9NjExLGUucj0zODksZS5zPTU1NixlLnQ9MzMzLGUudT02MTEsZS52PTU1NixlLnc9Nzc4LGUueD01NTYsZS55PTU1NixlLno9NTAwLGUuYnJhY2VsZWZ0PTM4OSxlLmJhcj0yODAsZS5icmFjZXJpZ2h0PTM4OSxlLmFzY2lpdGlsZGU9NTg0LGUuZXhjbGFtZG93bj0zMzMsZS5jZW50PTU1NixlLnN0ZXJsaW5nPTU1NixlLmZyYWN0aW9uPTE2NyxlLnllbj01NTYsZS5mbG9yaW49NTU2LGUuc2VjdGlvbj01NTYsZS5jdXJyZW5jeT01NTYsZS5xdW90ZXNpbmdsZT0yMzgsZS5xdW90ZWRibGxlZnQ9NTAwLGUuZ3VpbGxlbW90bGVmdD01NTYsZS5ndWlsc2luZ2xsZWZ0PTMzMyxlLmd1aWxzaW5nbHJpZ2h0PTMzMyxlLmZpPTYxMSxlLmZsPTYxMSxlLmVuZGFzaD01NTYsZS5kYWdnZXI9NTU2LGUuZGFnZ2VyZGJsPTU1NixlLnBlcmlvZGNlbnRlcmVkPTI3OCxlLnBhcmFncmFwaD01NTYsZS5idWxsZXQ9MzUwLGUucXVvdGVzaW5nbGJhc2U9Mjc4LGUucXVvdGVkYmxiYXNlPTUwMCxlLnF1b3RlZGJscmlnaHQ9NTAwLGUuZ3VpbGxlbW90cmlnaHQ9NTU2LGUuZWxsaXBzaXM9MWUzLGUucGVydGhvdXNhbmQ9MWUzLGUucXVlc3Rpb25kb3duPTYxMSxlLmdyYXZlPTMzMyxlLmFjdXRlPTMzMyxlLmNpcmN1bWZsZXg9MzMzLGUudGlsZGU9MzMzLGUubWFjcm9uPTMzMyxlLmJyZXZlPTMzMyxlLmRvdGFjY2VudD0zMzMsZS5kaWVyZXNpcz0zMzMsZS5yaW5nPTMzMyxlLmNlZGlsbGE9MzMzLGUuaHVuZ2FydW1sYXV0PTMzMyxlLm9nb25laz0zMzMsZS5jYXJvbj0zMzMsZS5lbWRhc2g9MWUzLGUuQUU9MWUzLGUub3JkZmVtaW5pbmU9MzcwLGUuTHNsYXNoPTYxMSxlLk9zbGFzaD03NzgsZS5PRT0xZTMsZS5vcmRtYXNjdWxpbmU9MzY1LGUuYWU9ODg5LGUuZG90bGVzc2k9Mjc4LGUubHNsYXNoPTI3OCxlLm9zbGFzaD02MTEsZS5vZT05NDQsZS5nZXJtYW5kYmxzPTYxMSxlLklkaWVyZXNpcz0yNzgsZS5lYWN1dGU9NTU2LGUuYWJyZXZlPTU1NixlLnVodW5nYXJ1bWxhdXQ9NjExLGUuZWNhcm9uPTU1NixlLllkaWVyZXNpcz02NjcsZS5kaXZpZGU9NTg0LGUuWWFjdXRlPTY2NyxlLkFjaXJjdW1mbGV4PTcyMixlLmFhY3V0ZT01NTYsZS5VY2lyY3VtZmxleD03MjIsZS55YWN1dGU9NTU2LGUuc2NvbW1hYWNjZW50PTU1NixlLmVjaXJjdW1mbGV4PTU1NixlLlVyaW5nPTcyMixlLlVkaWVyZXNpcz03MjIsZS5hb2dvbmVrPTU1NixlLlVhY3V0ZT03MjIsZS51b2dvbmVrPTYxMSxlLkVkaWVyZXNpcz02NjcsZS5EY3JvYXQ9NzIyLGUuY29tbWFhY2NlbnQ9MjUwLGUuY29weXJpZ2h0PTczNyxlLkVtYWNyb249NjY3LGUuY2Nhcm9uPTU1NixlLmFyaW5nPTU1NixlLk5jb21tYWFjY2VudD03MjIsZS5sYWN1dGU9Mjc4LGUuYWdyYXZlPTU1NixlLlRjb21tYWFjY2VudD02MTEsZS5DYWN1dGU9NzIyLGUuYXRpbGRlPTU1NixlLkVkb3RhY2NlbnQ9NjY3LGUuc2Nhcm9uPTU1NixlLnNjZWRpbGxhPTU1NixlLmlhY3V0ZT0yNzgsZS5sb3plbmdlPTQ5NCxlLlJjYXJvbj03MjIsZS5HY29tbWFhY2NlbnQ9Nzc4LGUudWNpcmN1bWZsZXg9NjExLGUuYWNpcmN1bWZsZXg9NTU2LGUuQW1hY3Jvbj03MjIsZS5yY2Fyb249Mzg5LGUuY2NlZGlsbGE9NTU2LGUuWmRvdGFjY2VudD02MTEsZS5UaG9ybj02NjcsZS5PbWFjcm9uPTc3OCxlLlJhY3V0ZT03MjIsZS5TYWN1dGU9NjY3LGUuZGNhcm9uPTc0MyxlLlVtYWNyb249NzIyLGUudXJpbmc9NjExLGUudGhyZWVzdXBlcmlvcj0zMzMsZS5PZ3JhdmU9Nzc4LGUuQWdyYXZlPTcyMixlLkFicmV2ZT03MjIsZS5tdWx0aXBseT01ODQsZS51YWN1dGU9NjExLGUuVGNhcm9uPTYxMSxlLnBhcnRpYWxkaWZmPTQ5NCxlLnlkaWVyZXNpcz01NTYsZS5OYWN1dGU9NzIyLGUuaWNpcmN1bWZsZXg9Mjc4LGUuRWNpcmN1bWZsZXg9NjY3LGUuYWRpZXJlc2lzPTU1NixlLmVkaWVyZXNpcz01NTYsZS5jYWN1dGU9NTU2LGUubmFjdXRlPTYxMSxlLnVtYWNyb249NjExLGUuTmNhcm9uPTcyMixlLklhY3V0ZT0yNzgsZS5wbHVzbWludXM9NTg0LGUuYnJva2VuYmFyPTI4MCxlLnJlZ2lzdGVyZWQ9NzM3LGUuR2JyZXZlPTc3OCxlLklkb3RhY2NlbnQ9Mjc4LGUuc3VtbWF0aW9uPTYwMCxlLkVncmF2ZT02NjcsZS5yYWN1dGU9Mzg5LGUub21hY3Jvbj02MTEsZS5aYWN1dGU9NjExLGUuWmNhcm9uPTYxMSxlLmdyZWF0ZXJlcXVhbD01NDksZS5FdGg9NzIyLGUuQ2NlZGlsbGE9NzIyLGUubGNvbW1hYWNjZW50PTI3OCxlLnRjYXJvbj0zODksZS5lb2dvbmVrPTU1NixlLlVvZ29uZWs9NzIyLGUuQWFjdXRlPTcyMixlLkFkaWVyZXNpcz03MjIsZS5lZ3JhdmU9NTU2LGUuemFjdXRlPTUwMCxlLmlvZ29uZWs9Mjc4LGUuT2FjdXRlPTc3OCxlLm9hY3V0ZT02MTEsZS5hbWFjcm9uPTU1NixlLnNhY3V0ZT01NTYsZS5pZGllcmVzaXM9Mjc4LGUuT2NpcmN1bWZsZXg9Nzc4LGUuVWdyYXZlPTcyMixlLkRlbHRhPTYxMixlLnRob3JuPTYxMSxlLnR3b3N1cGVyaW9yPTMzMyxlLk9kaWVyZXNpcz03NzgsZS5tdT02MTEsZS5pZ3JhdmU9Mjc4LGUub2h1bmdhcnVtbGF1dD02MTEsZS5Fb2dvbmVrPTY2NyxlLmRjcm9hdD02MTEsZS50aHJlZXF1YXJ0ZXJzPTgzNCxlLlNjZWRpbGxhPTY2NyxlLmxjYXJvbj00MDAsZS5LY29tbWFhY2NlbnQ9NzIyLGUuTGFjdXRlPTYxMSxlLnRyYWRlbWFyaz0xZTMsZS5lZG90YWNjZW50PTU1NixlLklncmF2ZT0yNzgsZS5JbWFjcm9uPTI3OCxlLkxjYXJvbj02MTEsZS5vbmVoYWxmPTgzNCxlLmxlc3NlcXVhbD01NDksZS5vY2lyY3VtZmxleD02MTEsZS5udGlsZGU9NjExLGUuVWh1bmdhcnVtbGF1dD03MjIsZS5FYWN1dGU9NjY3LGUuZW1hY3Jvbj01NTYsZS5nYnJldmU9NjExLGUub25lcXVhcnRlcj04MzQsZS5TY2Fyb249NjY3LGUuU2NvbW1hYWNjZW50PTY2NyxlLk9odW5nYXJ1bWxhdXQ9Nzc4LGUuZGVncmVlPTQwMCxlLm9ncmF2ZT02MTEsZS5DY2Fyb249NzIyLGUudWdyYXZlPTYxMSxlLnJhZGljYWw9NTQ5LGUuRGNhcm9uPTcyMixlLnJjb21tYWFjY2VudD0zODksZS5OdGlsZGU9NzIyLGUub3RpbGRlPTYxMSxlLlJjb21tYWFjY2VudD03MjIsZS5MY29tbWFhY2NlbnQ9NjExLGUuQXRpbGRlPTcyMixlLkFvZ29uZWs9NzIyLGUuQXJpbmc9NzIyLGUuT3RpbGRlPTc3OCxlLnpkb3RhY2NlbnQ9NTAwLGUuRWNhcm9uPTY2NyxlLklvZ29uZWs9Mjc4LGUua2NvbW1hYWNjZW50PTU1NixlLm1pbnVzPTU4NCxlLkljaXJjdW1mbGV4PTI3OCxlLm5jYXJvbj02MTEsZS50Y29tbWFhY2NlbnQ9MzMzLGUubG9naWNhbG5vdD01ODQsZS5vZGllcmVzaXM9NjExLGUudWRpZXJlc2lzPTYxMSxlLm5vdGVxdWFsPTU0OSxlLmdjb21tYWFjY2VudD02MTEsZS5ldGg9NjExLGUuemNhcm9uPTUwMCxlLm5jb21tYWFjY2VudD02MTEsZS5vbmVzdXBlcmlvcj0zMzMsZS5pbWFjcm9uPTI3OCxlLkV1cm89NTU2fSkpLGVbIkhlbHZldGljYS1Cb2xkT2JsaXF1ZSJdPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5zcGFjZT0yNzgsZS5leGNsYW09MzMzLGUucXVvdGVkYmw9NDc0LGUubnVtYmVyc2lnbj01NTYsZS5kb2xsYXI9NTU2LGUucGVyY2VudD04ODksZS5hbXBlcnNhbmQ9NzIyLGUucXVvdGVyaWdodD0yNzgsZS5wYXJlbmxlZnQ9MzMzLGUucGFyZW5yaWdodD0zMzMsZS5hc3Rlcmlzaz0zODksZS5wbHVzPTU4NCxlLmNvbW1hPTI3OCxlLmh5cGhlbj0zMzMsZS5wZXJpb2Q9Mjc4LGUuc2xhc2g9Mjc4LGUuemVybz01NTYsZS5vbmU9NTU2LGUudHdvPTU1NixlLnRocmVlPTU1NixlLmZvdXI9NTU2LGUuZml2ZT01NTYsZS5zaXg9NTU2LGUuc2V2ZW49NTU2LGUuZWlnaHQ9NTU2LGUubmluZT01NTYsZS5jb2xvbj0zMzMsZS5zZW1pY29sb249MzMzLGUubGVzcz01ODQsZS5lcXVhbD01ODQsZS5ncmVhdGVyPTU4NCxlLnF1ZXN0aW9uPTYxMSxlLmF0PTk3NSxlLkE9NzIyLGUuQj03MjIsZS5DPTcyMixlLkQ9NzIyLGUuRT02NjcsZS5GPTYxMSxlLkc9Nzc4LGUuSD03MjIsZS5JPTI3OCxlLko9NTU2LGUuSz03MjIsZS5MPTYxMSxlLk09ODMzLGUuTj03MjIsZS5PPTc3OCxlLlA9NjY3LGUuUT03NzgsZS5SPTcyMixlLlM9NjY3LGUuVD02MTEsZS5VPTcyMixlLlY9NjY3LGUuVz05NDQsZS5YPTY2NyxlLlk9NjY3LGUuWj02MTEsZS5icmFja2V0bGVmdD0zMzMsZS5iYWNrc2xhc2g9Mjc4LGUuYnJhY2tldHJpZ2h0PTMzMyxlLmFzY2lpY2lyY3VtPTU4NCxlLnVuZGVyc2NvcmU9NTU2LGUucXVvdGVsZWZ0PTI3OCxlLmE9NTU2LGUuYj02MTEsZS5jPTU1NixlLmQ9NjExLGUuZT01NTYsZS5mPTMzMyxlLmc9NjExLGUuaD02MTEsZS5pPTI3OCxlLmo9Mjc4LGUuaz01NTYsZS5sPTI3OCxlLm09ODg5LGUubj02MTEsZS5vPTYxMSxlLnA9NjExLGUucT02MTEsZS5yPTM4OSxlLnM9NTU2LGUudD0zMzMsZS51PTYxMSxlLnY9NTU2LGUudz03NzgsZS54PTU1NixlLnk9NTU2LGUuej01MDAsZS5icmFjZWxlZnQ9Mzg5LGUuYmFyPTI4MCxlLmJyYWNlcmlnaHQ9Mzg5LGUuYXNjaWl0aWxkZT01ODQsZS5leGNsYW1kb3duPTMzMyxlLmNlbnQ9NTU2LGUuc3Rlcmxpbmc9NTU2LGUuZnJhY3Rpb249MTY3LGUueWVuPTU1NixlLmZsb3Jpbj01NTYsZS5zZWN0aW9uPTU1NixlLmN1cnJlbmN5PTU1NixlLnF1b3Rlc2luZ2xlPTIzOCxlLnF1b3RlZGJsbGVmdD01MDAsZS5ndWlsbGVtb3RsZWZ0PTU1NixlLmd1aWxzaW5nbGxlZnQ9MzMzLGUuZ3VpbHNpbmdscmlnaHQ9MzMzLGUuZmk9NjExLGUuZmw9NjExLGUuZW5kYXNoPTU1NixlLmRhZ2dlcj01NTYsZS5kYWdnZXJkYmw9NTU2LGUucGVyaW9kY2VudGVyZWQ9Mjc4LGUucGFyYWdyYXBoPTU1NixlLmJ1bGxldD0zNTAsZS5xdW90ZXNpbmdsYmFzZT0yNzgsZS5xdW90ZWRibGJhc2U9NTAwLGUucXVvdGVkYmxyaWdodD01MDAsZS5ndWlsbGVtb3RyaWdodD01NTYsZS5lbGxpcHNpcz0xZTMsZS5wZXJ0aG91c2FuZD0xZTMsZS5xdWVzdGlvbmRvd249NjExLGUuZ3JhdmU9MzMzLGUuYWN1dGU9MzMzLGUuY2lyY3VtZmxleD0zMzMsZS50aWxkZT0zMzMsZS5tYWNyb249MzMzLGUuYnJldmU9MzMzLGUuZG90YWNjZW50PTMzMyxlLmRpZXJlc2lzPTMzMyxlLnJpbmc9MzMzLGUuY2VkaWxsYT0zMzMsZS5odW5nYXJ1bWxhdXQ9MzMzLGUub2dvbmVrPTMzMyxlLmNhcm9uPTMzMyxlLmVtZGFzaD0xZTMsZS5BRT0xZTMsZS5vcmRmZW1pbmluZT0zNzAsZS5Mc2xhc2g9NjExLGUuT3NsYXNoPTc3OCxlLk9FPTFlMyxlLm9yZG1hc2N1bGluZT0zNjUsZS5hZT04ODksZS5kb3RsZXNzaT0yNzgsZS5sc2xhc2g9Mjc4LGUub3NsYXNoPTYxMSxlLm9lPTk0NCxlLmdlcm1hbmRibHM9NjExLGUuSWRpZXJlc2lzPTI3OCxlLmVhY3V0ZT01NTYsZS5hYnJldmU9NTU2LGUudWh1bmdhcnVtbGF1dD02MTEsZS5lY2Fyb249NTU2LGUuWWRpZXJlc2lzPTY2NyxlLmRpdmlkZT01ODQsZS5ZYWN1dGU9NjY3LGUuQWNpcmN1bWZsZXg9NzIyLGUuYWFjdXRlPTU1NixlLlVjaXJjdW1mbGV4PTcyMixlLnlhY3V0ZT01NTYsZS5zY29tbWFhY2NlbnQ9NTU2LGUuZWNpcmN1bWZsZXg9NTU2LGUuVXJpbmc9NzIyLGUuVWRpZXJlc2lzPTcyMixlLmFvZ29uZWs9NTU2LGUuVWFjdXRlPTcyMixlLnVvZ29uZWs9NjExLGUuRWRpZXJlc2lzPTY2NyxlLkRjcm9hdD03MjIsZS5jb21tYWFjY2VudD0yNTAsZS5jb3B5cmlnaHQ9NzM3LGUuRW1hY3Jvbj02NjcsZS5jY2Fyb249NTU2LGUuYXJpbmc9NTU2LGUuTmNvbW1hYWNjZW50PTcyMixlLmxhY3V0ZT0yNzgsZS5hZ3JhdmU9NTU2LGUuVGNvbW1hYWNjZW50PTYxMSxlLkNhY3V0ZT03MjIsZS5hdGlsZGU9NTU2LGUuRWRvdGFjY2VudD02NjcsZS5zY2Fyb249NTU2LGUuc2NlZGlsbGE9NTU2LGUuaWFjdXRlPTI3OCxlLmxvemVuZ2U9NDk0LGUuUmNhcm9uPTcyMixlLkdjb21tYWFjY2VudD03NzgsZS51Y2lyY3VtZmxleD02MTEsZS5hY2lyY3VtZmxleD01NTYsZS5BbWFjcm9uPTcyMixlLnJjYXJvbj0zODksZS5jY2VkaWxsYT01NTYsZS5aZG90YWNjZW50PTYxMSxlLlRob3JuPTY2NyxlLk9tYWNyb249Nzc4LGUuUmFjdXRlPTcyMixlLlNhY3V0ZT02NjcsZS5kY2Fyb249NzQzLGUuVW1hY3Jvbj03MjIsZS51cmluZz02MTEsZS50aHJlZXN1cGVyaW9yPTMzMyxlLk9ncmF2ZT03NzgsZS5BZ3JhdmU9NzIyLGUuQWJyZXZlPTcyMixlLm11bHRpcGx5PTU4NCxlLnVhY3V0ZT02MTEsZS5UY2Fyb249NjExLGUucGFydGlhbGRpZmY9NDk0LGUueWRpZXJlc2lzPTU1NixlLk5hY3V0ZT03MjIsZS5pY2lyY3VtZmxleD0yNzgsZS5FY2lyY3VtZmxleD02NjcsZS5hZGllcmVzaXM9NTU2LGUuZWRpZXJlc2lzPTU1NixlLmNhY3V0ZT01NTYsZS5uYWN1dGU9NjExLGUudW1hY3Jvbj02MTEsZS5OY2Fyb249NzIyLGUuSWFjdXRlPTI3OCxlLnBsdXNtaW51cz01ODQsZS5icm9rZW5iYXI9MjgwLGUucmVnaXN0ZXJlZD03MzcsZS5HYnJldmU9Nzc4LGUuSWRvdGFjY2VudD0yNzgsZS5zdW1tYXRpb249NjAwLGUuRWdyYXZlPTY2NyxlLnJhY3V0ZT0zODksZS5vbWFjcm9uPTYxMSxlLlphY3V0ZT02MTEsZS5aY2Fyb249NjExLGUuZ3JlYXRlcmVxdWFsPTU0OSxlLkV0aD03MjIsZS5DY2VkaWxsYT03MjIsZS5sY29tbWFhY2NlbnQ9Mjc4LGUudGNhcm9uPTM4OSxlLmVvZ29uZWs9NTU2LGUuVW9nb25laz03MjIsZS5BYWN1dGU9NzIyLGUuQWRpZXJlc2lzPTcyMixlLmVncmF2ZT01NTYsZS56YWN1dGU9NTAwLGUuaW9nb25laz0yNzgsZS5PYWN1dGU9Nzc4LGUub2FjdXRlPTYxMSxlLmFtYWNyb249NTU2LGUuc2FjdXRlPTU1NixlLmlkaWVyZXNpcz0yNzgsZS5PY2lyY3VtZmxleD03NzgsZS5VZ3JhdmU9NzIyLGUuRGVsdGE9NjEyLGUudGhvcm49NjExLGUudHdvc3VwZXJpb3I9MzMzLGUuT2RpZXJlc2lzPTc3OCxlLm11PTYxMSxlLmlncmF2ZT0yNzgsZS5vaHVuZ2FydW1sYXV0PTYxMSxlLkVvZ29uZWs9NjY3LGUuZGNyb2F0PTYxMSxlLnRocmVlcXVhcnRlcnM9ODM0LGUuU2NlZGlsbGE9NjY3LGUubGNhcm9uPTQwMCxlLktjb21tYWFjY2VudD03MjIsZS5MYWN1dGU9NjExLGUudHJhZGVtYXJrPTFlMyxlLmVkb3RhY2NlbnQ9NTU2LGUuSWdyYXZlPTI3OCxlLkltYWNyb249Mjc4LGUuTGNhcm9uPTYxMSxlLm9uZWhhbGY9ODM0LGUubGVzc2VxdWFsPTU0OSxlLm9jaXJjdW1mbGV4PTYxMSxlLm50aWxkZT02MTEsZS5VaHVuZ2FydW1sYXV0PTcyMixlLkVhY3V0ZT02NjcsZS5lbWFjcm9uPTU1NixlLmdicmV2ZT02MTEsZS5vbmVxdWFydGVyPTgzNCxlLlNjYXJvbj02NjcsZS5TY29tbWFhY2NlbnQ9NjY3LGUuT2h1bmdhcnVtbGF1dD03NzgsZS5kZWdyZWU9NDAwLGUub2dyYXZlPTYxMSxlLkNjYXJvbj03MjIsZS51Z3JhdmU9NjExLGUucmFkaWNhbD01NDksZS5EY2Fyb249NzIyLGUucmNvbW1hYWNjZW50PTM4OSxlLk50aWxkZT03MjIsZS5vdGlsZGU9NjExLGUuUmNvbW1hYWNjZW50PTcyMixlLkxjb21tYWFjY2VudD02MTEsZS5BdGlsZGU9NzIyLGUuQW9nb25laz03MjIsZS5BcmluZz03MjIsZS5PdGlsZGU9Nzc4LGUuemRvdGFjY2VudD01MDAsZS5FY2Fyb249NjY3LGUuSW9nb25laz0yNzgsZS5rY29tbWFhY2NlbnQ9NTU2LGUubWludXM9NTg0LGUuSWNpcmN1bWZsZXg9Mjc4LGUubmNhcm9uPTYxMSxlLnRjb21tYWFjY2VudD0zMzMsZS5sb2dpY2Fsbm90PTU4NCxlLm9kaWVyZXNpcz02MTEsZS51ZGllcmVzaXM9NjExLGUubm90ZXF1YWw9NTQ5LGUuZ2NvbW1hYWNjZW50PTYxMSxlLmV0aD02MTEsZS56Y2Fyb249NTAwLGUubmNvbW1hYWNjZW50PTYxMSxlLm9uZXN1cGVyaW9yPTMzMyxlLmltYWNyb249Mjc4LGUuRXVybz01NTZ9KSksZVsiSGVsdmV0aWNhLU9ibGlxdWUiXT0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9Mjc4LGUuZXhjbGFtPTI3OCxlLnF1b3RlZGJsPTM1NSxlLm51bWJlcnNpZ249NTU2LGUuZG9sbGFyPTU1NixlLnBlcmNlbnQ9ODg5LGUuYW1wZXJzYW5kPTY2NyxlLnF1b3RlcmlnaHQ9MjIyLGUucGFyZW5sZWZ0PTMzMyxlLnBhcmVucmlnaHQ9MzMzLGUuYXN0ZXJpc2s9Mzg5LGUucGx1cz01ODQsZS5jb21tYT0yNzgsZS5oeXBoZW49MzMzLGUucGVyaW9kPTI3OCxlLnNsYXNoPTI3OCxlLnplcm89NTU2LGUub25lPTU1NixlLnR3bz01NTYsZS50aHJlZT01NTYsZS5mb3VyPTU1NixlLmZpdmU9NTU2LGUuc2l4PTU1NixlLnNldmVuPTU1NixlLmVpZ2h0PTU1NixlLm5pbmU9NTU2LGUuY29sb249Mjc4LGUuc2VtaWNvbG9uPTI3OCxlLmxlc3M9NTg0LGUuZXF1YWw9NTg0LGUuZ3JlYXRlcj01ODQsZS5xdWVzdGlvbj01NTYsZS5hdD0xMDE1LGUuQT02NjcsZS5CPTY2NyxlLkM9NzIyLGUuRD03MjIsZS5FPTY2NyxlLkY9NjExLGUuRz03NzgsZS5IPTcyMixlLkk9Mjc4LGUuSj01MDAsZS5LPTY2NyxlLkw9NTU2LGUuTT04MzMsZS5OPTcyMixlLk89Nzc4LGUuUD02NjcsZS5RPTc3OCxlLlI9NzIyLGUuUz02NjcsZS5UPTYxMSxlLlU9NzIyLGUuVj02NjcsZS5XPTk0NCxlLlg9NjY3LGUuWT02NjcsZS5aPTYxMSxlLmJyYWNrZXRsZWZ0PTI3OCxlLmJhY2tzbGFzaD0yNzgsZS5icmFja2V0cmlnaHQ9Mjc4LGUuYXNjaWljaXJjdW09NDY5LGUudW5kZXJzY29yZT01NTYsZS5xdW90ZWxlZnQ9MjIyLGUuYT01NTYsZS5iPTU1NixlLmM9NTAwLGUuZD01NTYsZS5lPTU1NixlLmY9Mjc4LGUuZz01NTYsZS5oPTU1NixlLmk9MjIyLGUuaj0yMjIsZS5rPTUwMCxlLmw9MjIyLGUubT04MzMsZS5uPTU1NixlLm89NTU2LGUucD01NTYsZS5xPTU1NixlLnI9MzMzLGUucz01MDAsZS50PTI3OCxlLnU9NTU2LGUudj01MDAsZS53PTcyMixlLng9NTAwLGUueT01MDAsZS56PTUwMCxlLmJyYWNlbGVmdD0zMzQsZS5iYXI9MjYwLGUuYnJhY2VyaWdodD0zMzQsZS5hc2NpaXRpbGRlPTU4NCxlLmV4Y2xhbWRvd249MzMzLGUuY2VudD01NTYsZS5zdGVybGluZz01NTYsZS5mcmFjdGlvbj0xNjcsZS55ZW49NTU2LGUuZmxvcmluPTU1NixlLnNlY3Rpb249NTU2LGUuY3VycmVuY3k9NTU2LGUucXVvdGVzaW5nbGU9MTkxLGUucXVvdGVkYmxsZWZ0PTMzMyxlLmd1aWxsZW1vdGxlZnQ9NTU2LGUuZ3VpbHNpbmdsbGVmdD0zMzMsZS5ndWlsc2luZ2xyaWdodD0zMzMsZS5maT01MDAsZS5mbD01MDAsZS5lbmRhc2g9NTU2LGUuZGFnZ2VyPTU1NixlLmRhZ2dlcmRibD01NTYsZS5wZXJpb2RjZW50ZXJlZD0yNzgsZS5wYXJhZ3JhcGg9NTM3LGUuYnVsbGV0PTM1MCxlLnF1b3Rlc2luZ2xiYXNlPTIyMixlLnF1b3RlZGJsYmFzZT0zMzMsZS5xdW90ZWRibHJpZ2h0PTMzMyxlLmd1aWxsZW1vdHJpZ2h0PTU1NixlLmVsbGlwc2lzPTFlMyxlLnBlcnRob3VzYW5kPTFlMyxlLnF1ZXN0aW9uZG93bj02MTEsZS5ncmF2ZT0zMzMsZS5hY3V0ZT0zMzMsZS5jaXJjdW1mbGV4PTMzMyxlLnRpbGRlPTMzMyxlLm1hY3Jvbj0zMzMsZS5icmV2ZT0zMzMsZS5kb3RhY2NlbnQ9MzMzLGUuZGllcmVzaXM9MzMzLGUucmluZz0zMzMsZS5jZWRpbGxhPTMzMyxlLmh1bmdhcnVtbGF1dD0zMzMsZS5vZ29uZWs9MzMzLGUuY2Fyb249MzMzLGUuZW1kYXNoPTFlMyxlLkFFPTFlMyxlLm9yZGZlbWluaW5lPTM3MCxlLkxzbGFzaD01NTYsZS5Pc2xhc2g9Nzc4LGUuT0U9MWUzLGUub3JkbWFzY3VsaW5lPTM2NSxlLmFlPTg4OSxlLmRvdGxlc3NpPTI3OCxlLmxzbGFzaD0yMjIsZS5vc2xhc2g9NjExLGUub2U9OTQ0LGUuZ2VybWFuZGJscz02MTEsZS5JZGllcmVzaXM9Mjc4LGUuZWFjdXRlPTU1NixlLmFicmV2ZT01NTYsZS51aHVuZ2FydW1sYXV0PTU1NixlLmVjYXJvbj01NTYsZS5ZZGllcmVzaXM9NjY3LGUuZGl2aWRlPTU4NCxlLllhY3V0ZT02NjcsZS5BY2lyY3VtZmxleD02NjcsZS5hYWN1dGU9NTU2LGUuVWNpcmN1bWZsZXg9NzIyLGUueWFjdXRlPTUwMCxlLnNjb21tYWFjY2VudD01MDAsZS5lY2lyY3VtZmxleD01NTYsZS5VcmluZz03MjIsZS5VZGllcmVzaXM9NzIyLGUuYW9nb25laz01NTYsZS5VYWN1dGU9NzIyLGUudW9nb25laz01NTYsZS5FZGllcmVzaXM9NjY3LGUuRGNyb2F0PTcyMixlLmNvbW1hYWNjZW50PTI1MCxlLmNvcHlyaWdodD03MzcsZS5FbWFjcm9uPTY2NyxlLmNjYXJvbj01MDAsZS5hcmluZz01NTYsZS5OY29tbWFhY2NlbnQ9NzIyLGUubGFjdXRlPTIyMixlLmFncmF2ZT01NTYsZS5UY29tbWFhY2NlbnQ9NjExLGUuQ2FjdXRlPTcyMixlLmF0aWxkZT01NTYsZS5FZG90YWNjZW50PTY2NyxlLnNjYXJvbj01MDAsZS5zY2VkaWxsYT01MDAsZS5pYWN1dGU9Mjc4LGUubG96ZW5nZT00NzEsZS5SY2Fyb249NzIyLGUuR2NvbW1hYWNjZW50PTc3OCxlLnVjaXJjdW1mbGV4PTU1NixlLmFjaXJjdW1mbGV4PTU1NixlLkFtYWNyb249NjY3LGUucmNhcm9uPTMzMyxlLmNjZWRpbGxhPTUwMCxlLlpkb3RhY2NlbnQ9NjExLGUuVGhvcm49NjY3LGUuT21hY3Jvbj03NzgsZS5SYWN1dGU9NzIyLGUuU2FjdXRlPTY2NyxlLmRjYXJvbj02NDMsZS5VbWFjcm9uPTcyMixlLnVyaW5nPTU1NixlLnRocmVlc3VwZXJpb3I9MzMzLGUuT2dyYXZlPTc3OCxlLkFncmF2ZT02NjcsZS5BYnJldmU9NjY3LGUubXVsdGlwbHk9NTg0LGUudWFjdXRlPTU1NixlLlRjYXJvbj02MTEsZS5wYXJ0aWFsZGlmZj00NzYsZS55ZGllcmVzaXM9NTAwLGUuTmFjdXRlPTcyMixlLmljaXJjdW1mbGV4PTI3OCxlLkVjaXJjdW1mbGV4PTY2NyxlLmFkaWVyZXNpcz01NTYsZS5lZGllcmVzaXM9NTU2LGUuY2FjdXRlPTUwMCxlLm5hY3V0ZT01NTYsZS51bWFjcm9uPTU1NixlLk5jYXJvbj03MjIsZS5JYWN1dGU9Mjc4LGUucGx1c21pbnVzPTU4NCxlLmJyb2tlbmJhcj0yNjAsZS5yZWdpc3RlcmVkPTczNyxlLkdicmV2ZT03NzgsZS5JZG90YWNjZW50PTI3OCxlLnN1bW1hdGlvbj02MDAsZS5FZ3JhdmU9NjY3LGUucmFjdXRlPTMzMyxlLm9tYWNyb249NTU2LGUuWmFjdXRlPTYxMSxlLlpjYXJvbj02MTEsZS5ncmVhdGVyZXF1YWw9NTQ5LGUuRXRoPTcyMixlLkNjZWRpbGxhPTcyMixlLmxjb21tYWFjY2VudD0yMjIsZS50Y2Fyb249MzE3LGUuZW9nb25laz01NTYsZS5Vb2dvbmVrPTcyMixlLkFhY3V0ZT02NjcsZS5BZGllcmVzaXM9NjY3LGUuZWdyYXZlPTU1NixlLnphY3V0ZT01MDAsZS5pb2dvbmVrPTIyMixlLk9hY3V0ZT03NzgsZS5vYWN1dGU9NTU2LGUuYW1hY3Jvbj01NTYsZS5zYWN1dGU9NTAwLGUuaWRpZXJlc2lzPTI3OCxlLk9jaXJjdW1mbGV4PTc3OCxlLlVncmF2ZT03MjIsZS5EZWx0YT02MTIsZS50aG9ybj01NTYsZS50d29zdXBlcmlvcj0zMzMsZS5PZGllcmVzaXM9Nzc4LGUubXU9NTU2LGUuaWdyYXZlPTI3OCxlLm9odW5nYXJ1bWxhdXQ9NTU2LGUuRW9nb25laz02NjcsZS5kY3JvYXQ9NTU2LGUudGhyZWVxdWFydGVycz04MzQsZS5TY2VkaWxsYT02NjcsZS5sY2Fyb249Mjk5LGUuS2NvbW1hYWNjZW50PTY2NyxlLkxhY3V0ZT01NTYsZS50cmFkZW1hcms9MWUzLGUuZWRvdGFjY2VudD01NTYsZS5JZ3JhdmU9Mjc4LGUuSW1hY3Jvbj0yNzgsZS5MY2Fyb249NTU2LGUub25laGFsZj04MzQsZS5sZXNzZXF1YWw9NTQ5LGUub2NpcmN1bWZsZXg9NTU2LGUubnRpbGRlPTU1NixlLlVodW5nYXJ1bWxhdXQ9NzIyLGUuRWFjdXRlPTY2NyxlLmVtYWNyb249NTU2LGUuZ2JyZXZlPTU1NixlLm9uZXF1YXJ0ZXI9ODM0LGUuU2Nhcm9uPTY2NyxlLlNjb21tYWFjY2VudD02NjcsZS5PaHVuZ2FydW1sYXV0PTc3OCxlLmRlZ3JlZT00MDAsZS5vZ3JhdmU9NTU2LGUuQ2Nhcm9uPTcyMixlLnVncmF2ZT01NTYsZS5yYWRpY2FsPTQ1MyxlLkRjYXJvbj03MjIsZS5yY29tbWFhY2NlbnQ9MzMzLGUuTnRpbGRlPTcyMixlLm90aWxkZT01NTYsZS5SY29tbWFhY2NlbnQ9NzIyLGUuTGNvbW1hYWNjZW50PTU1NixlLkF0aWxkZT02NjcsZS5Bb2dvbmVrPTY2NyxlLkFyaW5nPTY2NyxlLk90aWxkZT03NzgsZS56ZG90YWNjZW50PTUwMCxlLkVjYXJvbj02NjcsZS5Jb2dvbmVrPTI3OCxlLmtjb21tYWFjY2VudD01MDAsZS5taW51cz01ODQsZS5JY2lyY3VtZmxleD0yNzgsZS5uY2Fyb249NTU2LGUudGNvbW1hYWNjZW50PTI3OCxlLmxvZ2ljYWxub3Q9NTg0LGUub2RpZXJlc2lzPTU1NixlLnVkaWVyZXNpcz01NTYsZS5ub3RlcXVhbD01NDksZS5nY29tbWFhY2NlbnQ9NTU2LGUuZXRoPTU1NixlLnpjYXJvbj01MDAsZS5uY29tbWFhY2NlbnQ9NTU2LGUub25lc3VwZXJpb3I9MzMzLGUuaW1hY3Jvbj0yNzgsZS5FdXJvPTU1Nn0pKSxlLlN5bWJvbD0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9MjUwLGUuZXhjbGFtPTMzMyxlLnVuaXZlcnNhbD03MTMsZS5udW1iZXJzaWduPTUwMCxlLmV4aXN0ZW50aWFsPTU0OSxlLnBlcmNlbnQ9ODMzLGUuYW1wZXJzYW5kPTc3OCxlLnN1Y2h0aGF0PTQzOSxlLnBhcmVubGVmdD0zMzMsZS5wYXJlbnJpZ2h0PTMzMyxlLmFzdGVyaXNrbWF0aD01MDAsZS5wbHVzPTU0OSxlLmNvbW1hPTI1MCxlLm1pbnVzPTU0OSxlLnBlcmlvZD0yNTAsZS5zbGFzaD0yNzgsZS56ZXJvPTUwMCxlLm9uZT01MDAsZS50d289NTAwLGUudGhyZWU9NTAwLGUuZm91cj01MDAsZS5maXZlPTUwMCxlLnNpeD01MDAsZS5zZXZlbj01MDAsZS5laWdodD01MDAsZS5uaW5lPTUwMCxlLmNvbG9uPTI3OCxlLnNlbWljb2xvbj0yNzgsZS5sZXNzPTU0OSxlLmVxdWFsPTU0OSxlLmdyZWF0ZXI9NTQ5LGUucXVlc3Rpb249NDQ0LGUuY29uZ3J1ZW50PTU0OSxlLkFscGhhPTcyMixlLkJldGE9NjY3LGUuQ2hpPTcyMixlLkRlbHRhPTYxMixlLkVwc2lsb249NjExLGUuUGhpPTc2MyxlLkdhbW1hPTYwMyxlLkV0YT03MjIsZS5Jb3RhPTMzMyxlLnRoZXRhMT02MzEsZS5LYXBwYT03MjIsZS5MYW1iZGE9Njg2LGUuTXU9ODg5LGUuTnU9NzIyLGUuT21pY3Jvbj03MjIsZS5QaT03NjgsZS5UaGV0YT03NDEsZS5SaG89NTU2LGUuU2lnbWE9NTkyLGUuVGF1PTYxMSxlLlVwc2lsb249NjkwLGUuc2lnbWExPTQzOSxlLk9tZWdhPTc2OCxlLlhpPTY0NSxlLlBzaT03OTUsZS5aZXRhPTYxMSxlLmJyYWNrZXRsZWZ0PTMzMyxlLnRoZXJlZm9yZT04NjMsZS5icmFja2V0cmlnaHQ9MzMzLGUucGVycGVuZGljdWxhcj02NTgsZS51bmRlcnNjb3JlPTUwMCxlLnJhZGljYWxleD01MDAsZS5hbHBoYT02MzEsZS5iZXRhPTU0OSxlLmNoaT01NDksZS5kZWx0YT00OTQsZS5lcHNpbG9uPTQzOSxlLnBoaT01MjEsZS5nYW1tYT00MTEsZS5ldGE9NjAzLGUuaW90YT0zMjksZS5waGkxPTYwMyxlLmthcHBhPTU0OSxlLmxhbWJkYT01NDksZS5tdT01NzYsZS5udT01MjEsZS5vbWljcm9uPTU0OSxlLnBpPTU0OSxlLnRoZXRhPTUyMSxlLnJobz01NDksZS5zaWdtYT02MDMsZS50YXU9NDM5LGUudXBzaWxvbj01NzYsZS5vbWVnYTE9NzEzLGUub21lZ2E9Njg2LGUueGk9NDkzLGUucHNpPTY4NixlLnpldGE9NDk0LGUuYnJhY2VsZWZ0PTQ4MCxlLmJhcj0yMDAsZS5icmFjZXJpZ2h0PTQ4MCxlLnNpbWlsYXI9NTQ5LGUuRXVybz03NTAsZS5VcHNpbG9uMT02MjAsZS5taW51dGU9MjQ3LGUubGVzc2VxdWFsPTU0OSxlLmZyYWN0aW9uPTE2NyxlLmluZmluaXR5PTcxMyxlLmZsb3Jpbj01MDAsZS5jbHViPTc1MyxlLmRpYW1vbmQ9NzUzLGUuaGVhcnQ9NzUzLGUuc3BhZGU9NzUzLGUuYXJyb3dib3RoPTEwNDIsZS5hcnJvd2xlZnQ9OTg3LGUuYXJyb3d1cD02MDMsZS5hcnJvd3JpZ2h0PTk4NyxlLmFycm93ZG93bj02MDMsZS5kZWdyZWU9NDAwLGUucGx1c21pbnVzPTU0OSxlLnNlY29uZD00MTEsZS5ncmVhdGVyZXF1YWw9NTQ5LGUubXVsdGlwbHk9NTQ5LGUucHJvcG9ydGlvbmFsPTcxMyxlLnBhcnRpYWxkaWZmPTQ5NCxlLmJ1bGxldD00NjAsZS5kaXZpZGU9NTQ5LGUubm90ZXF1YWw9NTQ5LGUuZXF1aXZhbGVuY2U9NTQ5LGUuYXBwcm94ZXF1YWw9NTQ5LGUuZWxsaXBzaXM9MWUzLGUuYXJyb3d2ZXJ0ZXg9NjAzLGUuYXJyb3dob3JpemV4PTFlMyxlLmNhcnJpYWdlcmV0dXJuPTY1OCxlLmFsZXBoPTgyMyxlLklmcmFrdHVyPTY4NixlLlJmcmFrdHVyPTc5NSxlLndlaWVyc3RyYXNzPTk4NyxlLmNpcmNsZW11bHRpcGx5PTc2OCxlLmNpcmNsZXBsdXM9NzY4LGUuZW1wdHlzZXQ9ODIzLGUuaW50ZXJzZWN0aW9uPTc2OCxlLnVuaW9uPTc2OCxlLnByb3BlcnN1cGVyc2V0PTcxMyxlLnJlZmxleHN1cGVyc2V0PTcxMyxlLm5vdHN1YnNldD03MTMsZS5wcm9wZXJzdWJzZXQ9NzEzLGUucmVmbGV4c3Vic2V0PTcxMyxlLmVsZW1lbnQ9NzEzLGUubm90ZWxlbWVudD03MTMsZS5hbmdsZT03NjgsZS5ncmFkaWVudD03MTMsZS5yZWdpc3RlcnNlcmlmPTc5MCxlLmNvcHlyaWdodHNlcmlmPTc5MCxlLnRyYWRlbWFya3NlcmlmPTg5MCxlLnByb2R1Y3Q9ODIzLGUucmFkaWNhbD01NDksZS5kb3RtYXRoPTI1MCxlLmxvZ2ljYWxub3Q9NzEzLGUubG9naWNhbGFuZD02MDMsZS5sb2dpY2Fsb3I9NjAzLGUuYXJyb3dkYmxib3RoPTEwNDIsZS5hcnJvd2RibGxlZnQ9OTg3LGUuYXJyb3dkYmx1cD02MDMsZS5hcnJvd2RibHJpZ2h0PTk4NyxlLmFycm93ZGJsZG93bj02MDMsZS5sb3plbmdlPTQ5NCxlLmFuZ2xlbGVmdD0zMjksZS5yZWdpc3RlcnNhbnM9NzkwLGUuY29weXJpZ2h0c2Fucz03OTAsZS50cmFkZW1hcmtzYW5zPTc4NixlLnN1bW1hdGlvbj03MTMsZS5wYXJlbmxlZnR0cD0zODQsZS5wYXJlbmxlZnRleD0zODQsZS5wYXJlbmxlZnRidD0zODQsZS5icmFja2V0bGVmdHRwPTM4NCxlLmJyYWNrZXRsZWZ0ZXg9Mzg0LGUuYnJhY2tldGxlZnRidD0zODQsZS5icmFjZWxlZnR0cD00OTQsZS5icmFjZWxlZnRtaWQ9NDk0LGUuYnJhY2VsZWZ0YnQ9NDk0LGUuYnJhY2VleD00OTQsZS5hbmdsZXJpZ2h0PTMyOSxlLmludGVncmFsPTI3NCxlLmludGVncmFsdHA9Njg2LGUuaW50ZWdyYWxleD02ODYsZS5pbnRlZ3JhbGJ0PTY4NixlLnBhcmVucmlnaHR0cD0zODQsZS5wYXJlbnJpZ2h0ZXg9Mzg0LGUucGFyZW5yaWdodGJ0PTM4NCxlLmJyYWNrZXRyaWdodHRwPTM4NCxlLmJyYWNrZXRyaWdodGV4PTM4NCxlLmJyYWNrZXRyaWdodGJ0PTM4NCxlLmJyYWNlcmlnaHR0cD00OTQsZS5icmFjZXJpZ2h0bWlkPTQ5NCxlLmJyYWNlcmlnaHRidD00OTQsZS5hcHBsZT03OTB9KSksZVsiVGltZXMtUm9tYW4iXT0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9MjUwLGUuZXhjbGFtPTMzMyxlLnF1b3RlZGJsPTQwOCxlLm51bWJlcnNpZ249NTAwLGUuZG9sbGFyPTUwMCxlLnBlcmNlbnQ9ODMzLGUuYW1wZXJzYW5kPTc3OCxlLnF1b3RlcmlnaHQ9MzMzLGUucGFyZW5sZWZ0PTMzMyxlLnBhcmVucmlnaHQ9MzMzLGUuYXN0ZXJpc2s9NTAwLGUucGx1cz01NjQsZS5jb21tYT0yNTAsZS5oeXBoZW49MzMzLGUucGVyaW9kPTI1MCxlLnNsYXNoPTI3OCxlLnplcm89NTAwLGUub25lPTUwMCxlLnR3bz01MDAsZS50aHJlZT01MDAsZS5mb3VyPTUwMCxlLmZpdmU9NTAwLGUuc2l4PTUwMCxlLnNldmVuPTUwMCxlLmVpZ2h0PTUwMCxlLm5pbmU9NTAwLGUuY29sb249Mjc4LGUuc2VtaWNvbG9uPTI3OCxlLmxlc3M9NTY0LGUuZXF1YWw9NTY0LGUuZ3JlYXRlcj01NjQsZS5xdWVzdGlvbj00NDQsZS5hdD05MjEsZS5BPTcyMixlLkI9NjY3LGUuQz02NjcsZS5EPTcyMixlLkU9NjExLGUuRj01NTYsZS5HPTcyMixlLkg9NzIyLGUuST0zMzMsZS5KPTM4OSxlLks9NzIyLGUuTD02MTEsZS5NPTg4OSxlLk49NzIyLGUuTz03MjIsZS5QPTU1NixlLlE9NzIyLGUuUj02NjcsZS5TPTU1NixlLlQ9NjExLGUuVT03MjIsZS5WPTcyMixlLlc9OTQ0LGUuWD03MjIsZS5ZPTcyMixlLlo9NjExLGUuYnJhY2tldGxlZnQ9MzMzLGUuYmFja3NsYXNoPTI3OCxlLmJyYWNrZXRyaWdodD0zMzMsZS5hc2NpaWNpcmN1bT00NjksZS51bmRlcnNjb3JlPTUwMCxlLnF1b3RlbGVmdD0zMzMsZS5hPTQ0NCxlLmI9NTAwLGUuYz00NDQsZS5kPTUwMCxlLmU9NDQ0LGUuZj0zMzMsZS5nPTUwMCxlLmg9NTAwLGUuaT0yNzgsZS5qPTI3OCxlLms9NTAwLGUubD0yNzgsZS5tPTc3OCxlLm49NTAwLGUubz01MDAsZS5wPTUwMCxlLnE9NTAwLGUucj0zMzMsZS5zPTM4OSxlLnQ9Mjc4LGUudT01MDAsZS52PTUwMCxlLnc9NzIyLGUueD01MDAsZS55PTUwMCxlLno9NDQ0LGUuYnJhY2VsZWZ0PTQ4MCxlLmJhcj0yMDAsZS5icmFjZXJpZ2h0PTQ4MCxlLmFzY2lpdGlsZGU9NTQxLGUuZXhjbGFtZG93bj0zMzMsZS5jZW50PTUwMCxlLnN0ZXJsaW5nPTUwMCxlLmZyYWN0aW9uPTE2NyxlLnllbj01MDAsZS5mbG9yaW49NTAwLGUuc2VjdGlvbj01MDAsZS5jdXJyZW5jeT01MDAsZS5xdW90ZXNpbmdsZT0xODAsZS5xdW90ZWRibGxlZnQ9NDQ0LGUuZ3VpbGxlbW90bGVmdD01MDAsZS5ndWlsc2luZ2xsZWZ0PTMzMyxlLmd1aWxzaW5nbHJpZ2h0PTMzMyxlLmZpPTU1NixlLmZsPTU1NixlLmVuZGFzaD01MDAsZS5kYWdnZXI9NTAwLGUuZGFnZ2VyZGJsPTUwMCxlLnBlcmlvZGNlbnRlcmVkPTI1MCxlLnBhcmFncmFwaD00NTMsZS5idWxsZXQ9MzUwLGUucXVvdGVzaW5nbGJhc2U9MzMzLGUucXVvdGVkYmxiYXNlPTQ0NCxlLnF1b3RlZGJscmlnaHQ9NDQ0LGUuZ3VpbGxlbW90cmlnaHQ9NTAwLGUuZWxsaXBzaXM9MWUzLGUucGVydGhvdXNhbmQ9MWUzLGUucXVlc3Rpb25kb3duPTQ0NCxlLmdyYXZlPTMzMyxlLmFjdXRlPTMzMyxlLmNpcmN1bWZsZXg9MzMzLGUudGlsZGU9MzMzLGUubWFjcm9uPTMzMyxlLmJyZXZlPTMzMyxlLmRvdGFjY2VudD0zMzMsZS5kaWVyZXNpcz0zMzMsZS5yaW5nPTMzMyxlLmNlZGlsbGE9MzMzLGUuaHVuZ2FydW1sYXV0PTMzMyxlLm9nb25laz0zMzMsZS5jYXJvbj0zMzMsZS5lbWRhc2g9MWUzLGUuQUU9ODg5LGUub3JkZmVtaW5pbmU9Mjc2LGUuTHNsYXNoPTYxMSxlLk9zbGFzaD03MjIsZS5PRT04ODksZS5vcmRtYXNjdWxpbmU9MzEwLGUuYWU9NjY3LGUuZG90bGVzc2k9Mjc4LGUubHNsYXNoPTI3OCxlLm9zbGFzaD01MDAsZS5vZT03MjIsZS5nZXJtYW5kYmxzPTUwMCxlLklkaWVyZXNpcz0zMzMsZS5lYWN1dGU9NDQ0LGUuYWJyZXZlPTQ0NCxlLnVodW5nYXJ1bWxhdXQ9NTAwLGUuZWNhcm9uPTQ0NCxlLllkaWVyZXNpcz03MjIsZS5kaXZpZGU9NTY0LGUuWWFjdXRlPTcyMixlLkFjaXJjdW1mbGV4PTcyMixlLmFhY3V0ZT00NDQsZS5VY2lyY3VtZmxleD03MjIsZS55YWN1dGU9NTAwLGUuc2NvbW1hYWNjZW50PTM4OSxlLmVjaXJjdW1mbGV4PTQ0NCxlLlVyaW5nPTcyMixlLlVkaWVyZXNpcz03MjIsZS5hb2dvbmVrPTQ0NCxlLlVhY3V0ZT03MjIsZS51b2dvbmVrPTUwMCxlLkVkaWVyZXNpcz02MTEsZS5EY3JvYXQ9NzIyLGUuY29tbWFhY2NlbnQ9MjUwLGUuY29weXJpZ2h0PTc2MCxlLkVtYWNyb249NjExLGUuY2Nhcm9uPTQ0NCxlLmFyaW5nPTQ0NCxlLk5jb21tYWFjY2VudD03MjIsZS5sYWN1dGU9Mjc4LGUuYWdyYXZlPTQ0NCxlLlRjb21tYWFjY2VudD02MTEsZS5DYWN1dGU9NjY3LGUuYXRpbGRlPTQ0NCxlLkVkb3RhY2NlbnQ9NjExLGUuc2Nhcm9uPTM4OSxlLnNjZWRpbGxhPTM4OSxlLmlhY3V0ZT0yNzgsZS5sb3plbmdlPTQ3MSxlLlJjYXJvbj02NjcsZS5HY29tbWFhY2NlbnQ9NzIyLGUudWNpcmN1bWZsZXg9NTAwLGUuYWNpcmN1bWZsZXg9NDQ0LGUuQW1hY3Jvbj03MjIsZS5yY2Fyb249MzMzLGUuY2NlZGlsbGE9NDQ0LGUuWmRvdGFjY2VudD02MTEsZS5UaG9ybj01NTYsZS5PbWFjcm9uPTcyMixlLlJhY3V0ZT02NjcsZS5TYWN1dGU9NTU2LGUuZGNhcm9uPTU4OCxlLlVtYWNyb249NzIyLGUudXJpbmc9NTAwLGUudGhyZWVzdXBlcmlvcj0zMDAsZS5PZ3JhdmU9NzIyLGUuQWdyYXZlPTcyMixlLkFicmV2ZT03MjIsZS5tdWx0aXBseT01NjQsZS51YWN1dGU9NTAwLGUuVGNhcm9uPTYxMSxlLnBhcnRpYWxkaWZmPTQ3NixlLnlkaWVyZXNpcz01MDAsZS5OYWN1dGU9NzIyLGUuaWNpcmN1bWZsZXg9Mjc4LGUuRWNpcmN1bWZsZXg9NjExLGUuYWRpZXJlc2lzPTQ0NCxlLmVkaWVyZXNpcz00NDQsZS5jYWN1dGU9NDQ0LGUubmFjdXRlPTUwMCxlLnVtYWNyb249NTAwLGUuTmNhcm9uPTcyMixlLklhY3V0ZT0zMzMsZS5wbHVzbWludXM9NTY0LGUuYnJva2VuYmFyPTIwMCxlLnJlZ2lzdGVyZWQ9NzYwLGUuR2JyZXZlPTcyMixlLklkb3RhY2NlbnQ9MzMzLGUuc3VtbWF0aW9uPTYwMCxlLkVncmF2ZT02MTEsZS5yYWN1dGU9MzMzLGUub21hY3Jvbj01MDAsZS5aYWN1dGU9NjExLGUuWmNhcm9uPTYxMSxlLmdyZWF0ZXJlcXVhbD01NDksZS5FdGg9NzIyLGUuQ2NlZGlsbGE9NjY3LGUubGNvbW1hYWNjZW50PTI3OCxlLnRjYXJvbj0zMjYsZS5lb2dvbmVrPTQ0NCxlLlVvZ29uZWs9NzIyLGUuQWFjdXRlPTcyMixlLkFkaWVyZXNpcz03MjIsZS5lZ3JhdmU9NDQ0LGUuemFjdXRlPTQ0NCxlLmlvZ29uZWs9Mjc4LGUuT2FjdXRlPTcyMixlLm9hY3V0ZT01MDAsZS5hbWFjcm9uPTQ0NCxlLnNhY3V0ZT0zODksZS5pZGllcmVzaXM9Mjc4LGUuT2NpcmN1bWZsZXg9NzIyLGUuVWdyYXZlPTcyMixlLkRlbHRhPTYxMixlLnRob3JuPTUwMCxlLnR3b3N1cGVyaW9yPTMwMCxlLk9kaWVyZXNpcz03MjIsZS5tdT01MDAsZS5pZ3JhdmU9Mjc4LGUub2h1bmdhcnVtbGF1dD01MDAsZS5Fb2dvbmVrPTYxMSxlLmRjcm9hdD01MDAsZS50aHJlZXF1YXJ0ZXJzPTc1MCxlLlNjZWRpbGxhPTU1NixlLmxjYXJvbj0zNDQsZS5LY29tbWFhY2NlbnQ9NzIyLGUuTGFjdXRlPTYxMSxlLnRyYWRlbWFyaz05ODAsZS5lZG90YWNjZW50PTQ0NCxlLklncmF2ZT0zMzMsZS5JbWFjcm9uPTMzMyxlLkxjYXJvbj02MTEsZS5vbmVoYWxmPTc1MCxlLmxlc3NlcXVhbD01NDksZS5vY2lyY3VtZmxleD01MDAsZS5udGlsZGU9NTAwLGUuVWh1bmdhcnVtbGF1dD03MjIsZS5FYWN1dGU9NjExLGUuZW1hY3Jvbj00NDQsZS5nYnJldmU9NTAwLGUub25lcXVhcnRlcj03NTAsZS5TY2Fyb249NTU2LGUuU2NvbW1hYWNjZW50PTU1NixlLk9odW5nYXJ1bWxhdXQ9NzIyLGUuZGVncmVlPTQwMCxlLm9ncmF2ZT01MDAsZS5DY2Fyb249NjY3LGUudWdyYXZlPTUwMCxlLnJhZGljYWw9NDUzLGUuRGNhcm9uPTcyMixlLnJjb21tYWFjY2VudD0zMzMsZS5OdGlsZGU9NzIyLGUub3RpbGRlPTUwMCxlLlJjb21tYWFjY2VudD02NjcsZS5MY29tbWFhY2NlbnQ9NjExLGUuQXRpbGRlPTcyMixlLkFvZ29uZWs9NzIyLGUuQXJpbmc9NzIyLGUuT3RpbGRlPTcyMixlLnpkb3RhY2NlbnQ9NDQ0LGUuRWNhcm9uPTYxMSxlLklvZ29uZWs9MzMzLGUua2NvbW1hYWNjZW50PTUwMCxlLm1pbnVzPTU2NCxlLkljaXJjdW1mbGV4PTMzMyxlLm5jYXJvbj01MDAsZS50Y29tbWFhY2NlbnQ9Mjc4LGUubG9naWNhbG5vdD01NjQsZS5vZGllcmVzaXM9NTAwLGUudWRpZXJlc2lzPTUwMCxlLm5vdGVxdWFsPTU0OSxlLmdjb21tYWFjY2VudD01MDAsZS5ldGg9NTAwLGUuemNhcm9uPTQ0NCxlLm5jb21tYWFjY2VudD01MDAsZS5vbmVzdXBlcmlvcj0zMDAsZS5pbWFjcm9uPTI3OCxlLkV1cm89NTAwfSkpLGVbIlRpbWVzLUJvbGQiXT0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9MjUwLGUuZXhjbGFtPTMzMyxlLnF1b3RlZGJsPTU1NSxlLm51bWJlcnNpZ249NTAwLGUuZG9sbGFyPTUwMCxlLnBlcmNlbnQ9MWUzLGUuYW1wZXJzYW5kPTgzMyxlLnF1b3RlcmlnaHQ9MzMzLGUucGFyZW5sZWZ0PTMzMyxlLnBhcmVucmlnaHQ9MzMzLGUuYXN0ZXJpc2s9NTAwLGUucGx1cz01NzAsZS5jb21tYT0yNTAsZS5oeXBoZW49MzMzLGUucGVyaW9kPTI1MCxlLnNsYXNoPTI3OCxlLnplcm89NTAwLGUub25lPTUwMCxlLnR3bz01MDAsZS50aHJlZT01MDAsZS5mb3VyPTUwMCxlLmZpdmU9NTAwLGUuc2l4PTUwMCxlLnNldmVuPTUwMCxlLmVpZ2h0PTUwMCxlLm5pbmU9NTAwLGUuY29sb249MzMzLGUuc2VtaWNvbG9uPTMzMyxlLmxlc3M9NTcwLGUuZXF1YWw9NTcwLGUuZ3JlYXRlcj01NzAsZS5xdWVzdGlvbj01MDAsZS5hdD05MzAsZS5BPTcyMixlLkI9NjY3LGUuQz03MjIsZS5EPTcyMixlLkU9NjY3LGUuRj02MTEsZS5HPTc3OCxlLkg9Nzc4LGUuST0zODksZS5KPTUwMCxlLks9Nzc4LGUuTD02NjcsZS5NPTk0NCxlLk49NzIyLGUuTz03NzgsZS5QPTYxMSxlLlE9Nzc4LGUuUj03MjIsZS5TPTU1NixlLlQ9NjY3LGUuVT03MjIsZS5WPTcyMixlLlc9MWUzLGUuWD03MjIsZS5ZPTcyMixlLlo9NjY3LGUuYnJhY2tldGxlZnQ9MzMzLGUuYmFja3NsYXNoPTI3OCxlLmJyYWNrZXRyaWdodD0zMzMsZS5hc2NpaWNpcmN1bT01ODEsZS51bmRlcnNjb3JlPTUwMCxlLnF1b3RlbGVmdD0zMzMsZS5hPTUwMCxlLmI9NTU2LGUuYz00NDQsZS5kPTU1NixlLmU9NDQ0LGUuZj0zMzMsZS5nPTUwMCxlLmg9NTU2LGUuaT0yNzgsZS5qPTMzMyxlLms9NTU2LGUubD0yNzgsZS5tPTgzMyxlLm49NTU2LGUubz01MDAsZS5wPTU1NixlLnE9NTU2LGUucj00NDQsZS5zPTM4OSxlLnQ9MzMzLGUudT01NTYsZS52PTUwMCxlLnc9NzIyLGUueD01MDAsZS55PTUwMCxlLno9NDQ0LGUuYnJhY2VsZWZ0PTM5NCxlLmJhcj0yMjAsZS5icmFjZXJpZ2h0PTM5NCxlLmFzY2lpdGlsZGU9NTIwLGUuZXhjbGFtZG93bj0zMzMsZS5jZW50PTUwMCxlLnN0ZXJsaW5nPTUwMCxlLmZyYWN0aW9uPTE2NyxlLnllbj01MDAsZS5mbG9yaW49NTAwLGUuc2VjdGlvbj01MDAsZS5jdXJyZW5jeT01MDAsZS5xdW90ZXNpbmdsZT0yNzgsZS5xdW90ZWRibGxlZnQ9NTAwLGUuZ3VpbGxlbW90bGVmdD01MDAsZS5ndWlsc2luZ2xsZWZ0PTMzMyxlLmd1aWxzaW5nbHJpZ2h0PTMzMyxlLmZpPTU1NixlLmZsPTU1NixlLmVuZGFzaD01MDAsZS5kYWdnZXI9NTAwLGUuZGFnZ2VyZGJsPTUwMCxlLnBlcmlvZGNlbnRlcmVkPTI1MCxlLnBhcmFncmFwaD01NDAsZS5idWxsZXQ9MzUwLGUucXVvdGVzaW5nbGJhc2U9MzMzLGUucXVvdGVkYmxiYXNlPTUwMCxlLnF1b3RlZGJscmlnaHQ9NTAwLGUuZ3VpbGxlbW90cmlnaHQ9NTAwLGUuZWxsaXBzaXM9MWUzLGUucGVydGhvdXNhbmQ9MWUzLGUucXVlc3Rpb25kb3duPTUwMCxlLmdyYXZlPTMzMyxlLmFjdXRlPTMzMyxlLmNpcmN1bWZsZXg9MzMzLGUudGlsZGU9MzMzLGUubWFjcm9uPTMzMyxlLmJyZXZlPTMzMyxlLmRvdGFjY2VudD0zMzMsZS5kaWVyZXNpcz0zMzMsZS5yaW5nPTMzMyxlLmNlZGlsbGE9MzMzLGUuaHVuZ2FydW1sYXV0PTMzMyxlLm9nb25laz0zMzMsZS5jYXJvbj0zMzMsZS5lbWRhc2g9MWUzLGUuQUU9MWUzLGUub3JkZmVtaW5pbmU9MzAwLGUuTHNsYXNoPTY2NyxlLk9zbGFzaD03NzgsZS5PRT0xZTMsZS5vcmRtYXNjdWxpbmU9MzMwLGUuYWU9NzIyLGUuZG90bGVzc2k9Mjc4LGUubHNsYXNoPTI3OCxlLm9zbGFzaD01MDAsZS5vZT03MjIsZS5nZXJtYW5kYmxzPTU1NixlLklkaWVyZXNpcz0zODksZS5lYWN1dGU9NDQ0LGUuYWJyZXZlPTUwMCxlLnVodW5nYXJ1bWxhdXQ9NTU2LGUuZWNhcm9uPTQ0NCxlLllkaWVyZXNpcz03MjIsZS5kaXZpZGU9NTcwLGUuWWFjdXRlPTcyMixlLkFjaXJjdW1mbGV4PTcyMixlLmFhY3V0ZT01MDAsZS5VY2lyY3VtZmxleD03MjIsZS55YWN1dGU9NTAwLGUuc2NvbW1hYWNjZW50PTM4OSxlLmVjaXJjdW1mbGV4PTQ0NCxlLlVyaW5nPTcyMixlLlVkaWVyZXNpcz03MjIsZS5hb2dvbmVrPTUwMCxlLlVhY3V0ZT03MjIsZS51b2dvbmVrPTU1NixlLkVkaWVyZXNpcz02NjcsZS5EY3JvYXQ9NzIyLGUuY29tbWFhY2NlbnQ9MjUwLGUuY29weXJpZ2h0PTc0NyxlLkVtYWNyb249NjY3LGUuY2Nhcm9uPTQ0NCxlLmFyaW5nPTUwMCxlLk5jb21tYWFjY2VudD03MjIsZS5sYWN1dGU9Mjc4LGUuYWdyYXZlPTUwMCxlLlRjb21tYWFjY2VudD02NjcsZS5DYWN1dGU9NzIyLGUuYXRpbGRlPTUwMCxlLkVkb3RhY2NlbnQ9NjY3LGUuc2Nhcm9uPTM4OSxlLnNjZWRpbGxhPTM4OSxlLmlhY3V0ZT0yNzgsZS5sb3plbmdlPTQ5NCxlLlJjYXJvbj03MjIsZS5HY29tbWFhY2NlbnQ9Nzc4LGUudWNpcmN1bWZsZXg9NTU2LGUuYWNpcmN1bWZsZXg9NTAwLGUuQW1hY3Jvbj03MjIsZS5yY2Fyb249NDQ0LGUuY2NlZGlsbGE9NDQ0LGUuWmRvdGFjY2VudD02NjcsZS5UaG9ybj02MTEsZS5PbWFjcm9uPTc3OCxlLlJhY3V0ZT03MjIsZS5TYWN1dGU9NTU2LGUuZGNhcm9uPTY3MixlLlVtYWNyb249NzIyLGUudXJpbmc9NTU2LGUudGhyZWVzdXBlcmlvcj0zMDAsZS5PZ3JhdmU9Nzc4LGUuQWdyYXZlPTcyMixlLkFicmV2ZT03MjIsZS5tdWx0aXBseT01NzAsZS51YWN1dGU9NTU2LGUuVGNhcm9uPTY2NyxlLnBhcnRpYWxkaWZmPTQ5NCxlLnlkaWVyZXNpcz01MDAsZS5OYWN1dGU9NzIyLGUuaWNpcmN1bWZsZXg9Mjc4LGUuRWNpcmN1bWZsZXg9NjY3LGUuYWRpZXJlc2lzPTUwMCxlLmVkaWVyZXNpcz00NDQsZS5jYWN1dGU9NDQ0LGUubmFjdXRlPTU1NixlLnVtYWNyb249NTU2LGUuTmNhcm9uPTcyMixlLklhY3V0ZT0zODksZS5wbHVzbWludXM9NTcwLGUuYnJva2VuYmFyPTIyMCxlLnJlZ2lzdGVyZWQ9NzQ3LGUuR2JyZXZlPTc3OCxlLklkb3RhY2NlbnQ9Mzg5LGUuc3VtbWF0aW9uPTYwMCxlLkVncmF2ZT02NjcsZS5yYWN1dGU9NDQ0LGUub21hY3Jvbj01MDAsZS5aYWN1dGU9NjY3LGUuWmNhcm9uPTY2NyxlLmdyZWF0ZXJlcXVhbD01NDksZS5FdGg9NzIyLGUuQ2NlZGlsbGE9NzIyLGUubGNvbW1hYWNjZW50PTI3OCxlLnRjYXJvbj00MTYsZS5lb2dvbmVrPTQ0NCxlLlVvZ29uZWs9NzIyLGUuQWFjdXRlPTcyMixlLkFkaWVyZXNpcz03MjIsZS5lZ3JhdmU9NDQ0LGUuemFjdXRlPTQ0NCxlLmlvZ29uZWs9Mjc4LGUuT2FjdXRlPTc3OCxlLm9hY3V0ZT01MDAsZS5hbWFjcm9uPTUwMCxlLnNhY3V0ZT0zODksZS5pZGllcmVzaXM9Mjc4LGUuT2NpcmN1bWZsZXg9Nzc4LGUuVWdyYXZlPTcyMixlLkRlbHRhPTYxMixlLnRob3JuPTU1NixlLnR3b3N1cGVyaW9yPTMwMCxlLk9kaWVyZXNpcz03NzgsZS5tdT01NTYsZS5pZ3JhdmU9Mjc4LGUub2h1bmdhcnVtbGF1dD01MDAsZS5Fb2dvbmVrPTY2NyxlLmRjcm9hdD01NTYsZS50aHJlZXF1YXJ0ZXJzPTc1MCxlLlNjZWRpbGxhPTU1NixlLmxjYXJvbj0zOTQsZS5LY29tbWFhY2NlbnQ9Nzc4LGUuTGFjdXRlPTY2NyxlLnRyYWRlbWFyaz0xZTMsZS5lZG90YWNjZW50PTQ0NCxlLklncmF2ZT0zODksZS5JbWFjcm9uPTM4OSxlLkxjYXJvbj02NjcsZS5vbmVoYWxmPTc1MCxlLmxlc3NlcXVhbD01NDksZS5vY2lyY3VtZmxleD01MDAsZS5udGlsZGU9NTU2LGUuVWh1bmdhcnVtbGF1dD03MjIsZS5FYWN1dGU9NjY3LGUuZW1hY3Jvbj00NDQsZS5nYnJldmU9NTAwLGUub25lcXVhcnRlcj03NTAsZS5TY2Fyb249NTU2LGUuU2NvbW1hYWNjZW50PTU1NixlLk9odW5nYXJ1bWxhdXQ9Nzc4LGUuZGVncmVlPTQwMCxlLm9ncmF2ZT01MDAsZS5DY2Fyb249NzIyLGUudWdyYXZlPTU1NixlLnJhZGljYWw9NTQ5LGUuRGNhcm9uPTcyMixlLnJjb21tYWFjY2VudD00NDQsZS5OdGlsZGU9NzIyLGUub3RpbGRlPTUwMCxlLlJjb21tYWFjY2VudD03MjIsZS5MY29tbWFhY2NlbnQ9NjY3LGUuQXRpbGRlPTcyMixlLkFvZ29uZWs9NzIyLGUuQXJpbmc9NzIyLGUuT3RpbGRlPTc3OCxlLnpkb3RhY2NlbnQ9NDQ0LGUuRWNhcm9uPTY2NyxlLklvZ29uZWs9Mzg5LGUua2NvbW1hYWNjZW50PTU1NixlLm1pbnVzPTU3MCxlLkljaXJjdW1mbGV4PTM4OSxlLm5jYXJvbj01NTYsZS50Y29tbWFhY2NlbnQ9MzMzLGUubG9naWNhbG5vdD01NzAsZS5vZGllcmVzaXM9NTAwLGUudWRpZXJlc2lzPTU1NixlLm5vdGVxdWFsPTU0OSxlLmdjb21tYWFjY2VudD01MDAsZS5ldGg9NTAwLGUuemNhcm9uPTQ0NCxlLm5jb21tYWFjY2VudD01NTYsZS5vbmVzdXBlcmlvcj0zMDAsZS5pbWFjcm9uPTI3OCxlLkV1cm89NTAwfSkpLGVbIlRpbWVzLUJvbGRJdGFsaWMiXT0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9MjUwLGUuZXhjbGFtPTM4OSxlLnF1b3RlZGJsPTU1NSxlLm51bWJlcnNpZ249NTAwLGUuZG9sbGFyPTUwMCxlLnBlcmNlbnQ9ODMzLGUuYW1wZXJzYW5kPTc3OCxlLnF1b3RlcmlnaHQ9MzMzLGUucGFyZW5sZWZ0PTMzMyxlLnBhcmVucmlnaHQ9MzMzLGUuYXN0ZXJpc2s9NTAwLGUucGx1cz01NzAsZS5jb21tYT0yNTAsZS5oeXBoZW49MzMzLGUucGVyaW9kPTI1MCxlLnNsYXNoPTI3OCxlLnplcm89NTAwLGUub25lPTUwMCxlLnR3bz01MDAsZS50aHJlZT01MDAsZS5mb3VyPTUwMCxlLmZpdmU9NTAwLGUuc2l4PTUwMCxlLnNldmVuPTUwMCxlLmVpZ2h0PTUwMCxlLm5pbmU9NTAwLGUuY29sb249MzMzLGUuc2VtaWNvbG9uPTMzMyxlLmxlc3M9NTcwLGUuZXF1YWw9NTcwLGUuZ3JlYXRlcj01NzAsZS5xdWVzdGlvbj01MDAsZS5hdD04MzIsZS5BPTY2NyxlLkI9NjY3LGUuQz02NjcsZS5EPTcyMixlLkU9NjY3LGUuRj02NjcsZS5HPTcyMixlLkg9Nzc4LGUuST0zODksZS5KPTUwMCxlLks9NjY3LGUuTD02MTEsZS5NPTg4OSxlLk49NzIyLGUuTz03MjIsZS5QPTYxMSxlLlE9NzIyLGUuUj02NjcsZS5TPTU1NixlLlQ9NjExLGUuVT03MjIsZS5WPTY2NyxlLlc9ODg5LGUuWD02NjcsZS5ZPTYxMSxlLlo9NjExLGUuYnJhY2tldGxlZnQ9MzMzLGUuYmFja3NsYXNoPTI3OCxlLmJyYWNrZXRyaWdodD0zMzMsZS5hc2NpaWNpcmN1bT01NzAsZS51bmRlcnNjb3JlPTUwMCxlLnF1b3RlbGVmdD0zMzMsZS5hPTUwMCxlLmI9NTAwLGUuYz00NDQsZS5kPTUwMCxlLmU9NDQ0LGUuZj0zMzMsZS5nPTUwMCxlLmg9NTU2LGUuaT0yNzgsZS5qPTI3OCxlLms9NTAwLGUubD0yNzgsZS5tPTc3OCxlLm49NTU2LGUubz01MDAsZS5wPTUwMCxlLnE9NTAwLGUucj0zODksZS5zPTM4OSxlLnQ9Mjc4LGUudT01NTYsZS52PTQ0NCxlLnc9NjY3LGUueD01MDAsZS55PTQ0NCxlLno9Mzg5LGUuYnJhY2VsZWZ0PTM0OCxlLmJhcj0yMjAsZS5icmFjZXJpZ2h0PTM0OCxlLmFzY2lpdGlsZGU9NTcwLGUuZXhjbGFtZG93bj0zODksZS5jZW50PTUwMCxlLnN0ZXJsaW5nPTUwMCxlLmZyYWN0aW9uPTE2NyxlLnllbj01MDAsZS5mbG9yaW49NTAwLGUuc2VjdGlvbj01MDAsZS5jdXJyZW5jeT01MDAsZS5xdW90ZXNpbmdsZT0yNzgsZS5xdW90ZWRibGxlZnQ9NTAwLGUuZ3VpbGxlbW90bGVmdD01MDAsZS5ndWlsc2luZ2xsZWZ0PTMzMyxlLmd1aWxzaW5nbHJpZ2h0PTMzMyxlLmZpPTU1NixlLmZsPTU1NixlLmVuZGFzaD01MDAsZS5kYWdnZXI9NTAwLGUuZGFnZ2VyZGJsPTUwMCxlLnBlcmlvZGNlbnRlcmVkPTI1MCxlLnBhcmFncmFwaD01MDAsZS5idWxsZXQ9MzUwLGUucXVvdGVzaW5nbGJhc2U9MzMzLGUucXVvdGVkYmxiYXNlPTUwMCxlLnF1b3RlZGJscmlnaHQ9NTAwLGUuZ3VpbGxlbW90cmlnaHQ9NTAwLGUuZWxsaXBzaXM9MWUzLGUucGVydGhvdXNhbmQ9MWUzLGUucXVlc3Rpb25kb3duPTUwMCxlLmdyYXZlPTMzMyxlLmFjdXRlPTMzMyxlLmNpcmN1bWZsZXg9MzMzLGUudGlsZGU9MzMzLGUubWFjcm9uPTMzMyxlLmJyZXZlPTMzMyxlLmRvdGFjY2VudD0zMzMsZS5kaWVyZXNpcz0zMzMsZS5yaW5nPTMzMyxlLmNlZGlsbGE9MzMzLGUuaHVuZ2FydW1sYXV0PTMzMyxlLm9nb25laz0zMzMsZS5jYXJvbj0zMzMsZS5lbWRhc2g9MWUzLGUuQUU9OTQ0LGUub3JkZmVtaW5pbmU9MjY2LGUuTHNsYXNoPTYxMSxlLk9zbGFzaD03MjIsZS5PRT05NDQsZS5vcmRtYXNjdWxpbmU9MzAwLGUuYWU9NzIyLGUuZG90bGVzc2k9Mjc4LGUubHNsYXNoPTI3OCxlLm9zbGFzaD01MDAsZS5vZT03MjIsZS5nZXJtYW5kYmxzPTUwMCxlLklkaWVyZXNpcz0zODksZS5lYWN1dGU9NDQ0LGUuYWJyZXZlPTUwMCxlLnVodW5nYXJ1bWxhdXQ9NTU2LGUuZWNhcm9uPTQ0NCxlLllkaWVyZXNpcz02MTEsZS5kaXZpZGU9NTcwLGUuWWFjdXRlPTYxMSxlLkFjaXJjdW1mbGV4PTY2NyxlLmFhY3V0ZT01MDAsZS5VY2lyY3VtZmxleD03MjIsZS55YWN1dGU9NDQ0LGUuc2NvbW1hYWNjZW50PTM4OSxlLmVjaXJjdW1mbGV4PTQ0NCxlLlVyaW5nPTcyMixlLlVkaWVyZXNpcz03MjIsZS5hb2dvbmVrPTUwMCxlLlVhY3V0ZT03MjIsZS51b2dvbmVrPTU1NixlLkVkaWVyZXNpcz02NjcsZS5EY3JvYXQ9NzIyLGUuY29tbWFhY2NlbnQ9MjUwLGUuY29weXJpZ2h0PTc0NyxlLkVtYWNyb249NjY3LGUuY2Nhcm9uPTQ0NCxlLmFyaW5nPTUwMCxlLk5jb21tYWFjY2VudD03MjIsZS5sYWN1dGU9Mjc4LGUuYWdyYXZlPTUwMCxlLlRjb21tYWFjY2VudD02MTEsZS5DYWN1dGU9NjY3LGUuYXRpbGRlPTUwMCxlLkVkb3RhY2NlbnQ9NjY3LGUuc2Nhcm9uPTM4OSxlLnNjZWRpbGxhPTM4OSxlLmlhY3V0ZT0yNzgsZS5sb3plbmdlPTQ5NCxlLlJjYXJvbj02NjcsZS5HY29tbWFhY2NlbnQ9NzIyLGUudWNpcmN1bWZsZXg9NTU2LGUuYWNpcmN1bWZsZXg9NTAwLGUuQW1hY3Jvbj02NjcsZS5yY2Fyb249Mzg5LGUuY2NlZGlsbGE9NDQ0LGUuWmRvdGFjY2VudD02MTEsZS5UaG9ybj02MTEsZS5PbWFjcm9uPTcyMixlLlJhY3V0ZT02NjcsZS5TYWN1dGU9NTU2LGUuZGNhcm9uPTYwOCxlLlVtYWNyb249NzIyLGUudXJpbmc9NTU2LGUudGhyZWVzdXBlcmlvcj0zMDAsZS5PZ3JhdmU9NzIyLGUuQWdyYXZlPTY2NyxlLkFicmV2ZT02NjcsZS5tdWx0aXBseT01NzAsZS51YWN1dGU9NTU2LGUuVGNhcm9uPTYxMSxlLnBhcnRpYWxkaWZmPTQ5NCxlLnlkaWVyZXNpcz00NDQsZS5OYWN1dGU9NzIyLGUuaWNpcmN1bWZsZXg9Mjc4LGUuRWNpcmN1bWZsZXg9NjY3LGUuYWRpZXJlc2lzPTUwMCxlLmVkaWVyZXNpcz00NDQsZS5jYWN1dGU9NDQ0LGUubmFjdXRlPTU1NixlLnVtYWNyb249NTU2LGUuTmNhcm9uPTcyMixlLklhY3V0ZT0zODksZS5wbHVzbWludXM9NTcwLGUuYnJva2VuYmFyPTIyMCxlLnJlZ2lzdGVyZWQ9NzQ3LGUuR2JyZXZlPTcyMixlLklkb3RhY2NlbnQ9Mzg5LGUuc3VtbWF0aW9uPTYwMCxlLkVncmF2ZT02NjcsZS5yYWN1dGU9Mzg5LGUub21hY3Jvbj01MDAsZS5aYWN1dGU9NjExLGUuWmNhcm9uPTYxMSxlLmdyZWF0ZXJlcXVhbD01NDksZS5FdGg9NzIyLGUuQ2NlZGlsbGE9NjY3LGUubGNvbW1hYWNjZW50PTI3OCxlLnRjYXJvbj0zNjYsZS5lb2dvbmVrPTQ0NCxlLlVvZ29uZWs9NzIyLGUuQWFjdXRlPTY2NyxlLkFkaWVyZXNpcz02NjcsZS5lZ3JhdmU9NDQ0LGUuemFjdXRlPTM4OSxlLmlvZ29uZWs9Mjc4LGUuT2FjdXRlPTcyMixlLm9hY3V0ZT01MDAsZS5hbWFjcm9uPTUwMCxlLnNhY3V0ZT0zODksZS5pZGllcmVzaXM9Mjc4LGUuT2NpcmN1bWZsZXg9NzIyLGUuVWdyYXZlPTcyMixlLkRlbHRhPTYxMixlLnRob3JuPTUwMCxlLnR3b3N1cGVyaW9yPTMwMCxlLk9kaWVyZXNpcz03MjIsZS5tdT01NzYsZS5pZ3JhdmU9Mjc4LGUub2h1bmdhcnVtbGF1dD01MDAsZS5Fb2dvbmVrPTY2NyxlLmRjcm9hdD01MDAsZS50aHJlZXF1YXJ0ZXJzPTc1MCxlLlNjZWRpbGxhPTU1NixlLmxjYXJvbj0zODIsZS5LY29tbWFhY2NlbnQ9NjY3LGUuTGFjdXRlPTYxMSxlLnRyYWRlbWFyaz0xZTMsZS5lZG90YWNjZW50PTQ0NCxlLklncmF2ZT0zODksZS5JbWFjcm9uPTM4OSxlLkxjYXJvbj02MTEsZS5vbmVoYWxmPTc1MCxlLmxlc3NlcXVhbD01NDksZS5vY2lyY3VtZmxleD01MDAsZS5udGlsZGU9NTU2LGUuVWh1bmdhcnVtbGF1dD03MjIsZS5FYWN1dGU9NjY3LGUuZW1hY3Jvbj00NDQsZS5nYnJldmU9NTAwLGUub25lcXVhcnRlcj03NTAsZS5TY2Fyb249NTU2LGUuU2NvbW1hYWNjZW50PTU1NixlLk9odW5nYXJ1bWxhdXQ9NzIyLGUuZGVncmVlPTQwMCxlLm9ncmF2ZT01MDAsZS5DY2Fyb249NjY3LGUudWdyYXZlPTU1NixlLnJhZGljYWw9NTQ5LGUuRGNhcm9uPTcyMixlLnJjb21tYWFjY2VudD0zODksZS5OdGlsZGU9NzIyLGUub3RpbGRlPTUwMCxlLlJjb21tYWFjY2VudD02NjcsZS5MY29tbWFhY2NlbnQ9NjExLGUuQXRpbGRlPTY2NyxlLkFvZ29uZWs9NjY3LGUuQXJpbmc9NjY3LGUuT3RpbGRlPTcyMixlLnpkb3RhY2NlbnQ9Mzg5LGUuRWNhcm9uPTY2NyxlLklvZ29uZWs9Mzg5LGUua2NvbW1hYWNjZW50PTUwMCxlLm1pbnVzPTYwNixlLkljaXJjdW1mbGV4PTM4OSxlLm5jYXJvbj01NTYsZS50Y29tbWFhY2NlbnQ9Mjc4LGUubG9naWNhbG5vdD02MDYsZS5vZGllcmVzaXM9NTAwLGUudWRpZXJlc2lzPTU1NixlLm5vdGVxdWFsPTU0OSxlLmdjb21tYWFjY2VudD01MDAsZS5ldGg9NTAwLGUuemNhcm9uPTM4OSxlLm5jb21tYWFjY2VudD01NTYsZS5vbmVzdXBlcmlvcj0zMDAsZS5pbWFjcm9uPTI3OCxlLkV1cm89NTAwfSkpLGVbIlRpbWVzLUl0YWxpYyJdPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5zcGFjZT0yNTAsZS5leGNsYW09MzMzLGUucXVvdGVkYmw9NDIwLGUubnVtYmVyc2lnbj01MDAsZS5kb2xsYXI9NTAwLGUucGVyY2VudD04MzMsZS5hbXBlcnNhbmQ9Nzc4LGUucXVvdGVyaWdodD0zMzMsZS5wYXJlbmxlZnQ9MzMzLGUucGFyZW5yaWdodD0zMzMsZS5hc3Rlcmlzaz01MDAsZS5wbHVzPTY3NSxlLmNvbW1hPTI1MCxlLmh5cGhlbj0zMzMsZS5wZXJpb2Q9MjUwLGUuc2xhc2g9Mjc4LGUuemVybz01MDAsZS5vbmU9NTAwLGUudHdvPTUwMCxlLnRocmVlPTUwMCxlLmZvdXI9NTAwLGUuZml2ZT01MDAsZS5zaXg9NTAwLGUuc2V2ZW49NTAwLGUuZWlnaHQ9NTAwLGUubmluZT01MDAsZS5jb2xvbj0zMzMsZS5zZW1pY29sb249MzMzLGUubGVzcz02NzUsZS5lcXVhbD02NzUsZS5ncmVhdGVyPTY3NSxlLnF1ZXN0aW9uPTUwMCxlLmF0PTkyMCxlLkE9NjExLGUuQj02MTEsZS5DPTY2NyxlLkQ9NzIyLGUuRT02MTEsZS5GPTYxMSxlLkc9NzIyLGUuSD03MjIsZS5JPTMzMyxlLko9NDQ0LGUuSz02NjcsZS5MPTU1NixlLk09ODMzLGUuTj02NjcsZS5PPTcyMixlLlA9NjExLGUuUT03MjIsZS5SPTYxMSxlLlM9NTAwLGUuVD01NTYsZS5VPTcyMixlLlY9NjExLGUuVz04MzMsZS5YPTYxMSxlLlk9NTU2LGUuWj01NTYsZS5icmFja2V0bGVmdD0zODksZS5iYWNrc2xhc2g9Mjc4LGUuYnJhY2tldHJpZ2h0PTM4OSxlLmFzY2lpY2lyY3VtPTQyMixlLnVuZGVyc2NvcmU9NTAwLGUucXVvdGVsZWZ0PTMzMyxlLmE9NTAwLGUuYj01MDAsZS5jPTQ0NCxlLmQ9NTAwLGUuZT00NDQsZS5mPTI3OCxlLmc9NTAwLGUuaD01MDAsZS5pPTI3OCxlLmo9Mjc4LGUuaz00NDQsZS5sPTI3OCxlLm09NzIyLGUubj01MDAsZS5vPTUwMCxlLnA9NTAwLGUucT01MDAsZS5yPTM4OSxlLnM9Mzg5LGUudD0yNzgsZS51PTUwMCxlLnY9NDQ0LGUudz02NjcsZS54PTQ0NCxlLnk9NDQ0LGUuej0zODksZS5icmFjZWxlZnQ9NDAwLGUuYmFyPTI3NSxlLmJyYWNlcmlnaHQ9NDAwLGUuYXNjaWl0aWxkZT01NDEsZS5leGNsYW1kb3duPTM4OSxlLmNlbnQ9NTAwLGUuc3Rlcmxpbmc9NTAwLGUuZnJhY3Rpb249MTY3LGUueWVuPTUwMCxlLmZsb3Jpbj01MDAsZS5zZWN0aW9uPTUwMCxlLmN1cnJlbmN5PTUwMCxlLnF1b3Rlc2luZ2xlPTIxNCxlLnF1b3RlZGJsbGVmdD01NTYsZS5ndWlsbGVtb3RsZWZ0PTUwMCxlLmd1aWxzaW5nbGxlZnQ9MzMzLGUuZ3VpbHNpbmdscmlnaHQ9MzMzLGUuZmk9NTAwLGUuZmw9NTAwLGUuZW5kYXNoPTUwMCxlLmRhZ2dlcj01MDAsZS5kYWdnZXJkYmw9NTAwLGUucGVyaW9kY2VudGVyZWQ9MjUwLGUucGFyYWdyYXBoPTUyMyxlLmJ1bGxldD0zNTAsZS5xdW90ZXNpbmdsYmFzZT0zMzMsZS5xdW90ZWRibGJhc2U9NTU2LGUucXVvdGVkYmxyaWdodD01NTYsZS5ndWlsbGVtb3RyaWdodD01MDAsZS5lbGxpcHNpcz04ODksZS5wZXJ0aG91c2FuZD0xZTMsZS5xdWVzdGlvbmRvd249NTAwLGUuZ3JhdmU9MzMzLGUuYWN1dGU9MzMzLGUuY2lyY3VtZmxleD0zMzMsZS50aWxkZT0zMzMsZS5tYWNyb249MzMzLGUuYnJldmU9MzMzLGUuZG90YWNjZW50PTMzMyxlLmRpZXJlc2lzPTMzMyxlLnJpbmc9MzMzLGUuY2VkaWxsYT0zMzMsZS5odW5nYXJ1bWxhdXQ9MzMzLGUub2dvbmVrPTMzMyxlLmNhcm9uPTMzMyxlLmVtZGFzaD04ODksZS5BRT04ODksZS5vcmRmZW1pbmluZT0yNzYsZS5Mc2xhc2g9NTU2LGUuT3NsYXNoPTcyMixlLk9FPTk0NCxlLm9yZG1hc2N1bGluZT0zMTAsZS5hZT02NjcsZS5kb3RsZXNzaT0yNzgsZS5sc2xhc2g9Mjc4LGUub3NsYXNoPTUwMCxlLm9lPTY2NyxlLmdlcm1hbmRibHM9NTAwLGUuSWRpZXJlc2lzPTMzMyxlLmVhY3V0ZT00NDQsZS5hYnJldmU9NTAwLGUudWh1bmdhcnVtbGF1dD01MDAsZS5lY2Fyb249NDQ0LGUuWWRpZXJlc2lzPTU1NixlLmRpdmlkZT02NzUsZS5ZYWN1dGU9NTU2LGUuQWNpcmN1bWZsZXg9NjExLGUuYWFjdXRlPTUwMCxlLlVjaXJjdW1mbGV4PTcyMixlLnlhY3V0ZT00NDQsZS5zY29tbWFhY2NlbnQ9Mzg5LGUuZWNpcmN1bWZsZXg9NDQ0LGUuVXJpbmc9NzIyLGUuVWRpZXJlc2lzPTcyMixlLmFvZ29uZWs9NTAwLGUuVWFjdXRlPTcyMixlLnVvZ29uZWs9NTAwLGUuRWRpZXJlc2lzPTYxMSxlLkRjcm9hdD03MjIsZS5jb21tYWFjY2VudD0yNTAsZS5jb3B5cmlnaHQ9NzYwLGUuRW1hY3Jvbj02MTEsZS5jY2Fyb249NDQ0LGUuYXJpbmc9NTAwLGUuTmNvbW1hYWNjZW50PTY2NyxlLmxhY3V0ZT0yNzgsZS5hZ3JhdmU9NTAwLGUuVGNvbW1hYWNjZW50PTU1NixlLkNhY3V0ZT02NjcsZS5hdGlsZGU9NTAwLGUuRWRvdGFjY2VudD02MTEsZS5zY2Fyb249Mzg5LGUuc2NlZGlsbGE9Mzg5LGUuaWFjdXRlPTI3OCxlLmxvemVuZ2U9NDcxLGUuUmNhcm9uPTYxMSxlLkdjb21tYWFjY2VudD03MjIsZS51Y2lyY3VtZmxleD01MDAsZS5hY2lyY3VtZmxleD01MDAsZS5BbWFjcm9uPTYxMSxlLnJjYXJvbj0zODksZS5jY2VkaWxsYT00NDQsZS5aZG90YWNjZW50PTU1NixlLlRob3JuPTYxMSxlLk9tYWNyb249NzIyLGUuUmFjdXRlPTYxMSxlLlNhY3V0ZT01MDAsZS5kY2Fyb249NTQ0LGUuVW1hY3Jvbj03MjIsZS51cmluZz01MDAsZS50aHJlZXN1cGVyaW9yPTMwMCxlLk9ncmF2ZT03MjIsZS5BZ3JhdmU9NjExLGUuQWJyZXZlPTYxMSxlLm11bHRpcGx5PTY3NSxlLnVhY3V0ZT01MDAsZS5UY2Fyb249NTU2LGUucGFydGlhbGRpZmY9NDc2LGUueWRpZXJlc2lzPTQ0NCxlLk5hY3V0ZT02NjcsZS5pY2lyY3VtZmxleD0yNzgsZS5FY2lyY3VtZmxleD02MTEsZS5hZGllcmVzaXM9NTAwLGUuZWRpZXJlc2lzPTQ0NCxlLmNhY3V0ZT00NDQsZS5uYWN1dGU9NTAwLGUudW1hY3Jvbj01MDAsZS5OY2Fyb249NjY3LGUuSWFjdXRlPTMzMyxlLnBsdXNtaW51cz02NzUsZS5icm9rZW5iYXI9Mjc1LGUucmVnaXN0ZXJlZD03NjAsZS5HYnJldmU9NzIyLGUuSWRvdGFjY2VudD0zMzMsZS5zdW1tYXRpb249NjAwLGUuRWdyYXZlPTYxMSxlLnJhY3V0ZT0zODksZS5vbWFjcm9uPTUwMCxlLlphY3V0ZT01NTYsZS5aY2Fyb249NTU2LGUuZ3JlYXRlcmVxdWFsPTU0OSxlLkV0aD03MjIsZS5DY2VkaWxsYT02NjcsZS5sY29tbWFhY2NlbnQ9Mjc4LGUudGNhcm9uPTMwMCxlLmVvZ29uZWs9NDQ0LGUuVW9nb25laz03MjIsZS5BYWN1dGU9NjExLGUuQWRpZXJlc2lzPTYxMSxlLmVncmF2ZT00NDQsZS56YWN1dGU9Mzg5LGUuaW9nb25laz0yNzgsZS5PYWN1dGU9NzIyLGUub2FjdXRlPTUwMCxlLmFtYWNyb249NTAwLGUuc2FjdXRlPTM4OSxlLmlkaWVyZXNpcz0yNzgsZS5PY2lyY3VtZmxleD03MjIsZS5VZ3JhdmU9NzIyLGUuRGVsdGE9NjEyLGUudGhvcm49NTAwLGUudHdvc3VwZXJpb3I9MzAwLGUuT2RpZXJlc2lzPTcyMixlLm11PTUwMCxlLmlncmF2ZT0yNzgsZS5vaHVuZ2FydW1sYXV0PTUwMCxlLkVvZ29uZWs9NjExLGUuZGNyb2F0PTUwMCxlLnRocmVlcXVhcnRlcnM9NzUwLGUuU2NlZGlsbGE9NTAwLGUubGNhcm9uPTMwMCxlLktjb21tYWFjY2VudD02NjcsZS5MYWN1dGU9NTU2LGUudHJhZGVtYXJrPTk4MCxlLmVkb3RhY2NlbnQ9NDQ0LGUuSWdyYXZlPTMzMyxlLkltYWNyb249MzMzLGUuTGNhcm9uPTYxMSxlLm9uZWhhbGY9NzUwLGUubGVzc2VxdWFsPTU0OSxlLm9jaXJjdW1mbGV4PTUwMCxlLm50aWxkZT01MDAsZS5VaHVuZ2FydW1sYXV0PTcyMixlLkVhY3V0ZT02MTEsZS5lbWFjcm9uPTQ0NCxlLmdicmV2ZT01MDAsZS5vbmVxdWFydGVyPTc1MCxlLlNjYXJvbj01MDAsZS5TY29tbWFhY2NlbnQ9NTAwLGUuT2h1bmdhcnVtbGF1dD03MjIsZS5kZWdyZWU9NDAwLGUub2dyYXZlPTUwMCxlLkNjYXJvbj02NjcsZS51Z3JhdmU9NTAwLGUucmFkaWNhbD00NTMsZS5EY2Fyb249NzIyLGUucmNvbW1hYWNjZW50PTM4OSxlLk50aWxkZT02NjcsZS5vdGlsZGU9NTAwLGUuUmNvbW1hYWNjZW50PTYxMSxlLkxjb21tYWFjY2VudD01NTYsZS5BdGlsZGU9NjExLGUuQW9nb25laz02MTEsZS5BcmluZz02MTEsZS5PdGlsZGU9NzIyLGUuemRvdGFjY2VudD0zODksZS5FY2Fyb249NjExLGUuSW9nb25laz0zMzMsZS5rY29tbWFhY2NlbnQ9NDQ0LGUubWludXM9Njc1LGUuSWNpcmN1bWZsZXg9MzMzLGUubmNhcm9uPTUwMCxlLnRjb21tYWFjY2VudD0yNzgsZS5sb2dpY2Fsbm90PTY3NSxlLm9kaWVyZXNpcz01MDAsZS51ZGllcmVzaXM9NTAwLGUubm90ZXF1YWw9NTQ5LGUuZ2NvbW1hYWNjZW50PTUwMCxlLmV0aD01MDAsZS56Y2Fyb249Mzg5LGUubmNvbW1hYWNjZW50PTUwMCxlLm9uZXN1cGVyaW9yPTMwMCxlLmltYWNyb249Mjc4LGUuRXVybz01MDB9KSksZS5aYXBmRGluZ2JhdHM9KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI3OCxlLmExPTk3NCxlLmEyPTk2MSxlLmEyMDI9OTc0LGUuYTM9OTgwLGUuYTQ9NzE5LGUuYTU9Nzg5LGUuYTExOT03OTAsZS5hMTE4PTc5MSxlLmExMTc9NjkwLGUuYTExPTk2MCxlLmExMj05MzksZS5hMTM9NTQ5LGUuYTE0PTg1NSxlLmExNT05MTEsZS5hMTY9OTMzLGUuYTEwNT05MTEsZS5hMTc9OTQ1LGUuYTE4PTk3NCxlLmExOT03NTUsZS5hMjA9ODQ2LGUuYTIxPTc2MixlLmEyMj03NjEsZS5hMjM9NTcxLGUuYTI0PTY3NyxlLmEyNT03NjMsZS5hMjY9NzYwLGUuYTI3PTc1OSxlLmEyOD03NTQsZS5hNj00OTQsZS5hNz01NTIsZS5hOD01MzcsZS5hOT01NzcsZS5hMTA9NjkyLGUuYTI5PTc4NixlLmEzMD03ODgsZS5hMzE9Nzg4LGUuYTMyPTc5MCxlLmEzMz03OTMsZS5hMzQ9Nzk0LGUuYTM1PTgxNixlLmEzNj04MjMsZS5hMzc9Nzg5LGUuYTM4PTg0MSxlLmEzOT04MjMsZS5hNDA9ODMzLGUuYTQxPTgxNixlLmE0Mj04MzEsZS5hNDM9OTIzLGUuYTQ0PTc0NCxlLmE0NT03MjMsZS5hNDY9NzQ5LGUuYTQ3PTc5MCxlLmE0OD03OTIsZS5hNDk9Njk1LGUuYTUwPTc3NixlLmE1MT03NjgsZS5hNTI9NzkyLGUuYTUzPTc1OSxlLmE1ND03MDcsZS5hNTU9NzA4LGUuYTU2PTY4MixlLmE1Nz03MDEsZS5hNTg9ODI2LGUuYTU5PTgxNSxlLmE2MD03ODksZS5hNjE9Nzg5LGUuYTYyPTcwNyxlLmE2Mz02ODcsZS5hNjQ9Njk2LGUuYTY1PTY4OSxlLmE2Nj03ODYsZS5hNjc9Nzg3LGUuYTY4PTcxMyxlLmE2OT03OTEsZS5hNzA9Nzg1LGUuYTcxPTc5MSxlLmE3Mj04NzMsZS5hNzM9NzYxLGUuYTc0PTc2MixlLmEyMDM9NzYyLGUuYTc1PTc1OSxlLmEyMDQ9NzU5LGUuYTc2PTg5MixlLmE3Nz04OTIsZS5hNzg9Nzg4LGUuYTc5PTc4NCxlLmE4MT00MzgsZS5hODI9MTM4LGUuYTgzPTI3NyxlLmE4ND00MTUsZS5hOTc9MzkyLGUuYTk4PTM5MixlLmE5OT02NjgsZS5hMTAwPTY2OCxlLmE4OT0zOTAsZS5hOTA9MzkwLGUuYTkzPTMxNyxlLmE5ND0zMTcsZS5hOTE9Mjc2LGUuYTkyPTI3NixlLmEyMDU9NTA5LGUuYTg1PTUwOSxlLmEyMDY9NDEwLGUuYTg2PTQxMCxlLmE4Nz0yMzQsZS5hODg9MjM0LGUuYTk1PTMzNCxlLmE5Nj0zMzQsZS5hMTAxPTczMixlLmExMDI9NTQ0LGUuYTEwMz01NDQsZS5hMTA0PTkxMCxlLmExMDY9NjY3LGUuYTEwNz03NjAsZS5hMTA4PTc2MCxlLmExMTI9Nzc2LGUuYTExMT01OTUsZS5hMTEwPTY5NCxlLmExMDk9NjI2LGUuYTEyMD03ODgsZS5hMTIxPTc4OCxlLmExMjI9Nzg4LGUuYTEyMz03ODgsZS5hMTI0PTc4OCxlLmExMjU9Nzg4LGUuYTEyNj03ODgsZS5hMTI3PTc4OCxlLmExMjg9Nzg4LGUuYTEyOT03ODgsZS5hMTMwPTc4OCxlLmExMzE9Nzg4LGUuYTEzMj03ODgsZS5hMTMzPTc4OCxlLmExMzQ9Nzg4LGUuYTEzNT03ODgsZS5hMTM2PTc4OCxlLmExMzc9Nzg4LGUuYTEzOD03ODgsZS5hMTM5PTc4OCxlLmExNDA9Nzg4LGUuYTE0MT03ODgsZS5hMTQyPTc4OCxlLmExNDM9Nzg4LGUuYTE0ND03ODgsZS5hMTQ1PTc4OCxlLmExNDY9Nzg4LGUuYTE0Nz03ODgsZS5hMTQ4PTc4OCxlLmExNDk9Nzg4LGUuYTE1MD03ODgsZS5hMTUxPTc4OCxlLmExNTI9Nzg4LGUuYTE1Mz03ODgsZS5hMTU0PTc4OCxlLmExNTU9Nzg4LGUuYTE1Nj03ODgsZS5hMTU3PTc4OCxlLmExNTg9Nzg4LGUuYTE1OT03ODgsZS5hMTYwPTg5NCxlLmExNjE9ODM4LGUuYTE2Mz0xMDE2LGUuYTE2ND00NTgsZS5hMTk2PTc0OCxlLmExNjU9OTI0LGUuYTE5Mj03NDgsZS5hMTY2PTkxOCxlLmExNjc9OTI3LGUuYTE2OD05MjgsZS5hMTY5PTkyOCxlLmExNzA9ODM0LGUuYTE3MT04NzMsZS5hMTcyPTgyOCxlLmExNzM9OTI0LGUuYTE2Mj05MjQsZS5hMTc0PTkxNyxlLmExNzU9OTMwLGUuYTE3Nj05MzEsZS5hMTc3PTQ2MyxlLmExNzg9ODgzLGUuYTE3OT04MzYsZS5hMTkzPTgzNixlLmExODA9ODY3LGUuYTE5OT04NjcsZS5hMTgxPTY5NixlLmEyMDA9Njk2LGUuYTE4Mj04NzQsZS5hMjAxPTg3NCxlLmExODM9NzYwLGUuYTE4ND05NDYsZS5hMTk3PTc3MSxlLmExODU9ODY1LGUuYTE5ND03NzEsZS5hMTk4PTg4OCxlLmExODY9OTY3LGUuYTE5NT04ODgsZS5hMTg3PTgzMSxlLmExODg9ODczLGUuYTE4OT05MjcsZS5hMTkwPTk3MCxlLmExOTE9OTE4fSkpfSkpO3QuZ2V0TWV0cmljcz1hO2NvbnN0IGk9KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLkNvdXJpZXI9e2FzY2VudDo2MjksZGVzY2VudDotMTU3LGNhcEhlaWdodDo1NjIseEhlaWdodDotNDI2fSxlWyJDb3VyaWVyLUJvbGQiXT17YXNjZW50OjYyOSxkZXNjZW50Oi0xNTcsY2FwSGVpZ2h0OjU2Mix4SGVpZ2h0OjQzOX0sZVsiQ291cmllci1PYmxpcXVlIl09e2FzY2VudDo2MjksZGVzY2VudDotMTU3LGNhcEhlaWdodDo1NjIseEhlaWdodDo0MjZ9LGVbIkNvdXJpZXItQm9sZE9ibGlxdWUiXT17YXNjZW50OjYyOSxkZXNjZW50Oi0xNTcsY2FwSGVpZ2h0OjU2Mix4SGVpZ2h0OjQyNn0sZS5IZWx2ZXRpY2E9e2FzY2VudDo3MTgsZGVzY2VudDotMjA3LGNhcEhlaWdodDo3MTgseEhlaWdodDo1MjN9LGVbIkhlbHZldGljYS1Cb2xkIl09e2FzY2VudDo3MTgsZGVzY2VudDotMjA3LGNhcEhlaWdodDo3MTgseEhlaWdodDo1MzJ9LGVbIkhlbHZldGljYS1PYmxpcXVlIl09e2FzY2VudDo3MTgsZGVzY2VudDotMjA3LGNhcEhlaWdodDo3MTgseEhlaWdodDo1MjN9LGVbIkhlbHZldGljYS1Cb2xkT2JsaXF1ZSJdPXthc2NlbnQ6NzE4LGRlc2NlbnQ6LTIwNyxjYXBIZWlnaHQ6NzE4LHhIZWlnaHQ6NTMyfSxlWyJUaW1lcy1Sb21hbiJdPXthc2NlbnQ6NjgzLGRlc2NlbnQ6LTIxNyxjYXBIZWlnaHQ6NjYyLHhIZWlnaHQ6NDUwfSxlWyJUaW1lcy1Cb2xkIl09e2FzY2VudDo2ODMsZGVzY2VudDotMjE3LGNhcEhlaWdodDo2NzYseEhlaWdodDo0NjF9LGVbIlRpbWVzLUl0YWxpYyJdPXthc2NlbnQ6NjgzLGRlc2NlbnQ6LTIxNyxjYXBIZWlnaHQ6NjUzLHhIZWlnaHQ6NDQxfSxlWyJUaW1lcy1Cb2xkSXRhbGljIl09e2FzY2VudDo2ODMsZGVzY2VudDotMjE3LGNhcEhlaWdodDo2NjkseEhlaWdodDo0NjJ9LGUuU3ltYm9sPXthc2NlbnQ6TWF0aC5OYU4sZGVzY2VudDpNYXRoLk5hTixjYXBIZWlnaHQ6TWF0aC5OYU4seEhlaWdodDpNYXRoLk5hTn0sZS5aYXBmRGluZ2JhdHM9e2FzY2VudDpNYXRoLk5hTixkZXNjZW50Ok1hdGguTmFOLGNhcEhlaWdodDpNYXRoLk5hTix4SGVpZ2h0Ok1hdGguTmFOfX0pKTt0LmdldEZvbnRCYXNpY01ldHJpY3M9aX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkdseWZUYWJsZT12b2lkIDAscigxMzkpLHIoODQpLHIoOTMpLHIoOTQpLHIoOTcpLHIoOTkpLHIoMTAxKSxyKDEwNSkscigxMDgpLHIoMTE1KSxyKDE1NyksdC5HbHlmVGFibGU9Y2xhc3N7Y29uc3RydWN0b3IoZSl7bGV0e2dseWZUYWJsZTp0LGlzR2x5cGhMb2NhdGlvbnNMb25nOnIsbG9jYVRhYmxlOmEsbnVtR2x5cGhzOml9PWU7dGhpcy5nbHlwaHM9W107Y29uc3Qgcz1uZXcgRGF0YVZpZXcoYS5idWZmZXIsYS5ieXRlT2Zmc2V0LGEuYnl0ZUxlbmd0aCksbz1uZXcgRGF0YVZpZXcodC5idWZmZXIsdC5ieXRlT2Zmc2V0LHQuYnl0ZUxlbmd0aCksYz1yPzQ6MjtsZXQgbD1yP3MuZ2V0VWludDMyKDApOjIqcy5nZXRVaW50MTYoMCksaD0wO2ZvcihsZXQgZT0wO2U8aTtlKyspe2grPWM7Y29uc3QgZT1yP3MuZ2V0VWludDMyKGgpOjIqcy5nZXRVaW50MTYoaCk7aWYoZT09PWwpe3RoaXMuZ2x5cGhzLnB1c2gobmV3IG4oe30pKTtjb250aW51ZX1jb25zdCB0PW4ucGFyc2UobCxvKTt0aGlzLmdseXBocy5wdXNoKHQpLGw9ZX19Z2V0U2l6ZSgpe3JldHVybiB0aGlzLmdseXBocy5yZWR1Y2UoKChlLHQpPT5lKyh0LmdldFNpemUoKSszJi00KSksMCl9d3JpdGUoKXtjb25zdCBlPXRoaXMuZ2V0U2l6ZSgpLHQ9bmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcihlKSkscj1lPjEzMTA3MCxuPXI/NDoyLGE9bmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigodGhpcy5nbHlwaHMubGVuZ3RoKzEpKm4pKTtyP2Euc2V0VWludDMyKDAsMCk6YS5zZXRVaW50MTYoMCwwKTtsZXQgaT0wLHM9MDtmb3IoY29uc3QgZSBvZiB0aGlzLmdseXBocylpKz1lLndyaXRlKGksdCksaT1pKzMmLTQscys9bixyP2Euc2V0VWludDMyKHMsaSk6YS5zZXRVaW50MTYocyxpPj4xKTtyZXR1cm57aXNMb2NhdGlvbkxvbmc6cixsb2NhOm5ldyBVaW50OEFycmF5KGEuYnVmZmVyKSxnbHlmOm5ldyBVaW50OEFycmF5KHQuYnVmZmVyKX19c2NhbGUoZSl7Zm9yKGxldCB0PTAscj10aGlzLmdseXBocy5sZW5ndGg7dDxyO3QrKyl0aGlzLmdseXBoc1t0XS5zY2FsZShlW3RdKX19O2NsYXNzIG57Y29uc3RydWN0b3IoZSl7bGV0e2hlYWRlcjp0PW51bGwsc2ltcGxlOnI9bnVsbCxjb21wb3NpdGVzOm49bnVsbH09ZTt0aGlzLmhlYWRlcj10LHRoaXMuc2ltcGxlPXIsdGhpcy5jb21wb3NpdGVzPW59c3RhdGljIHBhcnNlKGUsdCl7Y29uc3RbcixpXT1hLnBhcnNlKGUsdCk7aWYoZSs9cixpLm51bWJlck9mQ29udG91cnM8MCl7Y29uc3Qgcj1bXTtmb3IoOzspe2NvbnN0W24sYV09by5wYXJzZShlLHQpO2lmKGUrPW4sci5wdXNoKGEpLCEoMzImYS5mbGFncykpYnJlYWt9cmV0dXJuIG5ldyBuKHtoZWFkZXI6aSxjb21wb3NpdGVzOnJ9KX1jb25zdCBjPXMucGFyc2UoZSx0LGkubnVtYmVyT2ZDb250b3Vycyk7cmV0dXJuIG5ldyBuKHtoZWFkZXI6aSxzaW1wbGU6Y30pfWdldFNpemUoKXtpZighdGhpcy5oZWFkZXIpcmV0dXJuIDA7Y29uc3QgZT10aGlzLnNpbXBsZT90aGlzLnNpbXBsZS5nZXRTaXplKCk6dGhpcy5jb21wb3NpdGVzLnJlZHVjZSgoKGUsdCk9PmUrdC5nZXRTaXplKCkpLDApO3JldHVybiB0aGlzLmhlYWRlci5nZXRTaXplKCkrZX13cml0ZShlLHQpe2lmKCF0aGlzLmhlYWRlcilyZXR1cm4gMDtjb25zdCByPWU7aWYoZSs9dGhpcy5oZWFkZXIud3JpdGUoZSx0KSx0aGlzLnNpbXBsZSllKz10aGlzLnNpbXBsZS53cml0ZShlLHQpO2Vsc2UgZm9yKGNvbnN0IHIgb2YgdGhpcy5jb21wb3NpdGVzKWUrPXIud3JpdGUoZSx0KTtyZXR1cm4gZS1yfXNjYWxlKGUpe2lmKCF0aGlzLmhlYWRlcilyZXR1cm47Y29uc3QgdD0odGhpcy5oZWFkZXIueE1pbit0aGlzLmhlYWRlci54TWF4KS8yO2lmKHRoaXMuaGVhZGVyLnNjYWxlKHQsZSksdGhpcy5zaW1wbGUpdGhpcy5zaW1wbGUuc2NhbGUodCxlKTtlbHNlIGZvcihjb25zdCByIG9mIHRoaXMuY29tcG9zaXRlcylyLnNjYWxlKHQsZSl9fWNsYXNzIGF7Y29uc3RydWN0b3IoZSl7bGV0e251bWJlck9mQ29udG91cnM6dCx4TWluOnIseU1pbjpuLHhNYXg6YSx5TWF4Oml9PWU7dGhpcy5udW1iZXJPZkNvbnRvdXJzPXQsdGhpcy54TWluPXIsdGhpcy55TWluPW4sdGhpcy54TWF4PWEsdGhpcy55TWF4PWl9c3RhdGljIHBhcnNlKGUsdCl7cmV0dXJuWzEwLG5ldyBhKHtudW1iZXJPZkNvbnRvdXJzOnQuZ2V0SW50MTYoZSkseE1pbjp0LmdldEludDE2KGUrMikseU1pbjp0LmdldEludDE2KGUrNCkseE1heDp0LmdldEludDE2KGUrNikseU1heDp0LmdldEludDE2KGUrOCl9KV19Z2V0U2l6ZSgpe3JldHVybiAxMH13cml0ZShlLHQpe3JldHVybiB0LnNldEludDE2KGUsdGhpcy5udW1iZXJPZkNvbnRvdXJzKSx0LnNldEludDE2KGUrMix0aGlzLnhNaW4pLHQuc2V0SW50MTYoZSs0LHRoaXMueU1pbiksdC5zZXRJbnQxNihlKzYsdGhpcy54TWF4KSx0LnNldEludDE2KGUrOCx0aGlzLnlNYXgpLDEwfXNjYWxlKGUsdCl7dGhpcy54TWluPU1hdGgucm91bmQoZSsodGhpcy54TWluLWUpKnQpLHRoaXMueE1heD1NYXRoLnJvdW5kKGUrKHRoaXMueE1heC1lKSp0KX19Y2xhc3MgaXtjb25zdHJ1Y3RvcihlKXtsZXR7ZmxhZ3M6dCx4Q29vcmRpbmF0ZXM6cix5Q29vcmRpbmF0ZXM6bn09ZTt0aGlzLnhDb29yZGluYXRlcz1yLHRoaXMueUNvb3JkaW5hdGVzPW4sdGhpcy5mbGFncz10fX1jbGFzcyBze2NvbnN0cnVjdG9yKGUpe2xldHtjb250b3Vyczp0LGluc3RydWN0aW9uczpyfT1lO3RoaXMuY29udG91cnM9dCx0aGlzLmluc3RydWN0aW9ucz1yfXN0YXRpYyBwYXJzZShlLHQscil7Y29uc3Qgbj1bXTtmb3IobGV0IGE9MDthPHI7YSsrKXtjb25zdCByPXQuZ2V0VWludDE2KGUpO2UrPTIsbi5wdXNoKHIpfWNvbnN0IGE9bltyLTFdKzEsbz10LmdldFVpbnQxNihlKTtlKz0yO2NvbnN0IGM9bmV3IFVpbnQ4QXJyYXkodCkuc2xpY2UoZSxlK28pO2UrPW87Y29uc3QgbD1bXTtmb3IobGV0IHI9MDtyPGE7ZSsrLHIrKyl7bGV0IG49dC5nZXRVaW50OChlKTtpZihsLnB1c2gobiksOCZuKXtjb25zdCBhPXQuZ2V0VWludDgoKytlKTtuXj04O2ZvcihsZXQgZT0wO2U8YTtlKyspbC5wdXNoKG4pO3IrPWF9fWNvbnN0IGg9W107bGV0IHU9W10sZD1bXSxmPVtdO2NvbnN0IGc9W107bGV0IHA9MCxtPTA7Zm9yKGxldCByPTA7cjxhO3IrKyl7Y29uc3QgYT1sW3JdO2lmKDImYSl7Y29uc3Qgcj10LmdldFVpbnQ4KGUrKyk7bSs9MTYmYT9yOi1yLHUucHVzaChtKX1lbHNlIDE2JmF8fChtKz10LmdldEludDE2KGUpLGUrPTIpLHUucHVzaChtKTtuW3BdPT09ciYmKHArKyxoLnB1c2godSksdT1bXSl9bT0wLHA9MDtmb3IobGV0IHI9MDtyPGE7cisrKXtjb25zdCBhPWxbcl07aWYoNCZhKXtjb25zdCByPXQuZ2V0VWludDgoZSsrKTttKz0zMiZhP3I6LXIsZC5wdXNoKG0pfWVsc2UgMzImYXx8KG0rPXQuZ2V0SW50MTYoZSksZSs9MiksZC5wdXNoKG0pO2YucHVzaCgxJmF8NjQmYSksbltwXT09PXImJih1PWhbcF0scCsrLGcucHVzaChuZXcgaSh7ZmxhZ3M6Zix4Q29vcmRpbmF0ZXM6dSx5Q29vcmRpbmF0ZXM6ZH0pKSxkPVtdLGY9W10pfXJldHVybiBuZXcgcyh7Y29udG91cnM6ZyxpbnN0cnVjdGlvbnM6Y30pfWdldFNpemUoKXtsZXQgZT0yKnRoaXMuY29udG91cnMubGVuZ3RoKzIrdGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RoLHQ9MCxyPTA7Zm9yKGNvbnN0IG4gb2YgdGhpcy5jb250b3Vycyl7ZSs9bi5mbGFncy5sZW5ndGg7Zm9yKGxldCBhPTAsaT1uLnhDb29yZGluYXRlcy5sZW5ndGg7YTxpO2ErKyl7Y29uc3QgaT1uLnhDb29yZGluYXRlc1thXSxzPW4ueUNvb3JkaW5hdGVzW2FdO2xldCBvPU1hdGguYWJzKGktdCk7bz4yNTU/ZSs9MjpvPjAmJihlKz0xKSx0PWksbz1NYXRoLmFicyhzLXIpLG8+MjU1P2UrPTI6bz4wJiYoZSs9MSkscj1zfX1yZXR1cm4gZX13cml0ZShlLHQpe2NvbnN0IHI9ZSxuPVtdLGE9W10saT1bXTtsZXQgcz0wLG89MDtmb3IoY29uc3QgciBvZiB0aGlzLmNvbnRvdXJzKXtmb3IobGV0IGU9MCx0PXIueENvb3JkaW5hdGVzLmxlbmd0aDtlPHQ7ZSsrKXtsZXQgdD1yLmZsYWdzW2VdO2NvbnN0IGM9ci54Q29vcmRpbmF0ZXNbZV07bGV0IGw9Yy1zO2lmKDA9PT1sKXR8PTE2LG4ucHVzaCgwKTtlbHNle2NvbnN0IGU9TWF0aC5hYnMobCk7ZTw9MjU1Pyh0fD1sPj0wPzE4OjIsbi5wdXNoKGUpKTpuLnB1c2gobCl9cz1jO2NvbnN0IGg9ci55Q29vcmRpbmF0ZXNbZV07aWYobD1oLW8sMD09PWwpdHw9MzIsYS5wdXNoKDApO2Vsc2V7Y29uc3QgZT1NYXRoLmFicyhsKTtlPD0yNTU/KHR8PWw+PTA/MzY6NCxhLnB1c2goZSkpOmEucHVzaChsKX1vPWgsaS5wdXNoKHQpfXQuc2V0VWludDE2KGUsbi5sZW5ndGgtMSksZSs9Mn10LnNldFVpbnQxNihlLHRoaXMuaW5zdHJ1Y3Rpb25zLmxlbmd0aCksZSs9Mix0aGlzLmluc3RydWN0aW9ucy5sZW5ndGgmJihuZXcgVWludDhBcnJheSh0LmJ1ZmZlciwwLHQuYnVmZmVyLmJ5dGVMZW5ndGgpLnNldCh0aGlzLmluc3RydWN0aW9ucyxlKSxlKz10aGlzLmluc3RydWN0aW9ucy5sZW5ndGgpO2Zvcihjb25zdCByIG9mIGkpdC5zZXRVaW50OChlKysscik7Zm9yKGxldCByPTAsYT1uLmxlbmd0aDtyPGE7cisrKXtjb25zdCBhPW5bcl0scz1pW3JdOzImcz90LnNldFVpbnQ4KGUrKyxhKToxNiZzfHwodC5zZXRJbnQxNihlLGEpLGUrPTIpfWZvcihsZXQgcj0wLG49YS5sZW5ndGg7cjxuO3IrKyl7Y29uc3Qgbj1hW3JdLHM9aVtyXTs0JnM/dC5zZXRVaW50OChlKyssbik6MzImc3x8KHQuc2V0SW50MTYoZSxuKSxlKz0yKX1yZXR1cm4gZS1yfXNjYWxlKGUsdCl7Zm9yKGNvbnN0IHIgb2YgdGhpcy5jb250b3VycylpZigwIT09ci54Q29vcmRpbmF0ZXMubGVuZ3RoKWZvcihsZXQgbj0wLGE9ci54Q29vcmRpbmF0ZXMubGVuZ3RoO248YTtuKyspci54Q29vcmRpbmF0ZXNbbl09TWF0aC5yb3VuZChlKyhyLnhDb29yZGluYXRlc1tuXS1lKSp0KX19Y2xhc3Mgb3tjb25zdHJ1Y3RvcihlKXtsZXR7ZmxhZ3M6dCxnbHlwaEluZGV4OnIsYXJndW1lbnQxOm4sYXJndW1lbnQyOmEsdHJhbnNmOmksaW5zdHJ1Y3Rpb25zOnN9PWU7dGhpcy5mbGFncz10LHRoaXMuZ2x5cGhJbmRleD1yLHRoaXMuYXJndW1lbnQxPW4sdGhpcy5hcmd1bWVudDI9YSx0aGlzLnRyYW5zZj1pLHRoaXMuaW5zdHJ1Y3Rpb25zPXN9c3RhdGljIHBhcnNlKGUsdCl7Y29uc3Qgcj1lLG49W107bGV0IGE9dC5nZXRVaW50MTYoZSk7Y29uc3QgaT10LmdldFVpbnQxNihlKzIpO2xldCBzLGM7ZSs9NCwxJmE/KDImYT8ocz10LmdldEludDE2KGUpLGM9dC5nZXRJbnQxNihlKzIpKToocz10LmdldFVpbnQxNihlKSxjPXQuZ2V0VWludDE2KGUrMikpLGUrPTQsYV49MSk6KDImYT8ocz10LmdldEludDgoZSksYz10LmdldEludDgoZSsxKSk6KHM9dC5nZXRVaW50OChlKSxjPXQuZ2V0VWludDgoZSsxKSksZSs9MiksOCZhPyhuLnB1c2godC5nZXRVaW50MTYoZSkpLGUrPTIpOjY0JmE/KG4ucHVzaCh0LmdldFVpbnQxNihlKSx0LmdldFVpbnQxNihlKzIpKSxlKz00KToxMjgmYSYmKG4ucHVzaCh0LmdldFVpbnQxNihlKSx0LmdldFVpbnQxNihlKzIpLHQuZ2V0VWludDE2KGUrNCksdC5nZXRVaW50MTYoZSs2KSksZSs9OCk7bGV0IGw9bnVsbDtpZigyNTYmYSl7Y29uc3Qgcj10LmdldFVpbnQxNihlKTtlKz0yLGw9bmV3IFVpbnQ4QXJyYXkodCkuc2xpY2UoZSxlK3IpLGUrPXJ9cmV0dXJuW2UtcixuZXcgbyh7ZmxhZ3M6YSxnbHlwaEluZGV4OmksYXJndW1lbnQxOnMsYXJndW1lbnQyOmMsdHJhbnNmOm4saW5zdHJ1Y3Rpb25zOmx9KV19Z2V0U2l6ZSgpe2xldCBlPTQrMip0aGlzLnRyYW5zZi5sZW5ndGg7cmV0dXJuIDI1NiZ0aGlzLmZsYWdzJiYoZSs9Mit0aGlzLmluc3RydWN0aW9ucy5sZW5ndGgpLGUrPTIsMiZ0aGlzLmZsYWdzP3RoaXMuYXJndW1lbnQxPj0tMTI4JiZ0aGlzLmFyZ3VtZW50MTw9MTI3JiZ0aGlzLmFyZ3VtZW50Mj49LTEyOCYmdGhpcy5hcmd1bWVudDI8PTEyN3x8KGUrPTIpOnRoaXMuYXJndW1lbnQxPj0wJiZ0aGlzLmFyZ3VtZW50MTw9MjU1JiZ0aGlzLmFyZ3VtZW50Mj49MCYmdGhpcy5hcmd1bWVudDI8PTI1NXx8KGUrPTIpLGV9d3JpdGUoZSx0KXtjb25zdCByPWU7cmV0dXJuIDImdGhpcy5mbGFncz90aGlzLmFyZ3VtZW50MT49LTEyOCYmdGhpcy5hcmd1bWVudDE8PTEyNyYmdGhpcy5hcmd1bWVudDI+PS0xMjgmJnRoaXMuYXJndW1lbnQyPD0xMjd8fCh0aGlzLmZsYWdzfD0xKTp0aGlzLmFyZ3VtZW50MT49MCYmdGhpcy5hcmd1bWVudDE8PTI1NSYmdGhpcy5hcmd1bWVudDI+PTAmJnRoaXMuYXJndW1lbnQyPD0yNTV8fCh0aGlzLmZsYWdzfD0xKSx0LnNldFVpbnQxNihlLHRoaXMuZmxhZ3MpLHQuc2V0VWludDE2KGUrMix0aGlzLmdseXBoSW5kZXgpLGUrPTQsMSZ0aGlzLmZsYWdzPygyJnRoaXMuZmxhZ3M/KHQuc2V0SW50MTYoZSx0aGlzLmFyZ3VtZW50MSksdC5zZXRJbnQxNihlKzIsdGhpcy5hcmd1bWVudDIpKToodC5zZXRVaW50MTYoZSx0aGlzLmFyZ3VtZW50MSksdC5zZXRVaW50MTYoZSsyLHRoaXMuYXJndW1lbnQyKSksZSs9NCk6KHQuc2V0VWludDgoZSx0aGlzLmFyZ3VtZW50MSksdC5zZXRVaW50OChlKzEsdGhpcy5hcmd1bWVudDIpLGUrPTIpLDI1NiZ0aGlzLmZsYWdzJiYodC5zZXRVaW50MTYoZSx0aGlzLmluc3RydWN0aW9ucy5sZW5ndGgpLGUrPTIsdGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RoJiYobmV3IFVpbnQ4QXJyYXkodC5idWZmZXIsMCx0LmJ1ZmZlci5ieXRlTGVuZ3RoKS5zZXQodGhpcy5pbnN0cnVjdGlvbnMsZSksZSs9dGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RoKSksZS1yfXNjYWxlKGUsdCl7fX19LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5PcGVuVHlwZUZpbGVCdWlsZGVyPXZvaWQgMCxyKDg0KSxyKDkzKSxyKDk0KSxyKDk3KSxyKDk5KSxyKDEwMSkscigxMDUpLHIoMTA4KSxyKDExNSkscigxMzkpLHIoMik7dmFyIG49cigxNDkpLGE9cigxNDQpO2Z1bmN0aW9uIGkoZSx0LHIpe2VbdF09cj4+OCYyNTUsZVt0KzFdPTI1NSZyfWZ1bmN0aW9uIHMoZSx0LHIpe2VbdF09cj4+MjQmMjU1LGVbdCsxXT1yPj4xNiYyNTUsZVt0KzJdPXI+PjgmMjU1LGVbdCszXT0yNTUmcn1mdW5jdGlvbiBvKGUsdCxyKXtpZihyIGluc3RhbmNlb2YgVWludDhBcnJheSllLnNldChyLHQpO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiByKWZvcihsZXQgbj0wLGE9ci5sZW5ndGg7bjxhO24rKyllW3QrK109MjU1JnIuY2hhckNvZGVBdChuKTtlbHNlIGZvcihjb25zdCBuIG9mIHIpZVt0KytdPTI1NSZufWNsYXNzIGN7Y29uc3RydWN0b3IoZSl7dGhpcy5zZm50PWUsdGhpcy50YWJsZXM9T2JqZWN0LmNyZWF0ZShudWxsKX1zdGF0aWMgZ2V0U2VhcmNoUGFyYW1zKGUsdCl7bGV0IHI9MSxuPTA7Zm9yKDsocl5lKT5yOylyPDw9MSxuKys7Y29uc3QgYT1yKnQ7cmV0dXJue3JhbmdlOmEsZW50cnk6bixyYW5nZVNoaWZ0OnQqZS1hfX10b0FycmF5KCl7bGV0IGU9dGhpcy5zZm50O2NvbnN0IHQ9dGhpcy50YWJsZXMscj1PYmplY3Qua2V5cyh0KTtyLnNvcnQoKTtjb25zdCBsPXIubGVuZ3RoO2xldCBoLHUsZCxmLGcscD0xMisxNipsO2NvbnN0IG09W3BdO2ZvcihoPTA7aDxsO2grKylmPXRbcltoXV0scCs9KGYubGVuZ3RoKzMmLTQpPj4+MCxtLnB1c2gocCk7Y29uc3QgYj1uZXcgVWludDhBcnJheShwKTtmb3IoaD0wO2g8bDtoKyspZj10W3JbaF1dLG8oYixtW2hdLGYpOyJ0cnVlIj09PWUmJihlPSgwLGEuc3RyaW5nMzIpKDY1NTM2KSksYlswXT0yNTUmZS5jaGFyQ29kZUF0KDApLGJbMV09MjU1JmUuY2hhckNvZGVBdCgxKSxiWzJdPTI1NSZlLmNoYXJDb2RlQXQoMiksYlszXT0yNTUmZS5jaGFyQ29kZUF0KDMpLGkoYiw0LGwpO2NvbnN0IHk9Yy5nZXRTZWFyY2hQYXJhbXMobCwxNik7Zm9yKGkoYiw2LHkucmFuZ2UpLGkoYiw4LHkuZW50cnkpLGkoYiwxMCx5LnJhbmdlU2hpZnQpLHA9MTIsaD0wO2g8bDtoKyspe2c9cltoXSxiW3BdPTI1NSZnLmNoYXJDb2RlQXQoMCksYltwKzFdPTI1NSZnLmNoYXJDb2RlQXQoMSksYltwKzJdPTI1NSZnLmNoYXJDb2RlQXQoMiksYltwKzNdPTI1NSZnLmNoYXJDb2RlQXQoMyk7bGV0IGU9MDtmb3IodT1tW2hdLGQ9bVtoKzFdO3U8ZDt1Kz00KWU9ZSsoMCxuLnJlYWRVaW50MzIpKGIsdSk+Pj4wO3MoYixwKzQsZSkscyhiLHArOCxtW2hdKSxzKGIscCsxMix0W2ddLmxlbmd0aCkscCs9MTZ9cmV0dXJuIGJ9YWRkVGFibGUoZSx0KXtpZihlIGluIHRoaXMudGFibGVzKXRocm93IG5ldyBFcnJvcigiVGFibGUgIitlKyIgYWxyZWFkeSBleGlzdHMiKTt0aGlzLnRhYmxlc1tlXT10fX10Lk9wZW5UeXBlRmlsZUJ1aWxkZXI9Y30sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlR5cGUxRm9udD12b2lkIDAscigxMzkpO3ZhciBuPXIoMTg1KSxhPXIoMTQ0KSxpPXIoMTg4KSxzPXIoMTQ5KSxvPXIoMTU0KSxjPXIoMTk5KTtmdW5jdGlvbiBsKGUsdCxyKXtjb25zdCBuPWUubGVuZ3RoLGE9dC5sZW5ndGgsaT1uLWE7bGV0IG89cixjPSExO2Zvcig7bzxpOyl7bGV0IHI9MDtmb3IoO3I8YSYmZVtvK3JdPT09dFtyXTspcisrO2lmKHI+PWEpe2ZvcihvKz1yO288biYmKDAscy5pc1doaXRlU3BhY2UpKGVbb10pOylvKys7Yz0hMDticmVha31vKyt9cmV0dXJue2ZvdW5kOmMsbGVuZ3RoOm99fXQuVHlwZTFGb250PWNsYXNze2NvbnN0cnVjdG9yKGUsdCxyKXtsZXQgbj1yLmxlbmd0aDEscz1yLmxlbmd0aDIsaD10LnBlZWtCeXRlcyg2KTtjb25zdCB1PTEyOD09PWhbMF0mJjE9PT1oWzFdO3UmJih0LnNraXAoNiksbj1oWzVdPDwyNHxoWzRdPDwxNnxoWzNdPDw4fGhbMl0pO2NvbnN0IGQ9ZnVuY3Rpb24oZSx0KXtjb25zdCByPVsxMDEsMTAxLDEyMCwxMDEsOTldLG49ZS5wb3M7bGV0IGkscyxjLGg7dHJ5e2k9ZS5nZXRCeXRlcyh0KSxzPWkubGVuZ3RofWNhdGNoKGUpe31pZihzPT09dCYmKGM9bChpLHIsdC0yKnIubGVuZ3RoKSxjLmZvdW5kJiZjLmxlbmd0aD09PXQpKXJldHVybntzdHJlYW06bmV3IG8uU3RyZWFtKGkpLGxlbmd0aDp0fTtmb3IoKDAsYS53YXJuKSgnSW52YWxpZCAiTGVuZ3RoMSIgcHJvcGVydHkgaW4gVHlwZTEgZm9udCAtLSB0cnlpbmcgdG8gcmVjb3Zlci4nKSxlLnBvcz1uO2M9bChlLnBlZWtCeXRlcygyMDQ4KSxyLDApLDAhPT1jLmxlbmd0aDspaWYoZS5wb3MrPWMubGVuZ3RoLGMuZm91bmQpe2g9ZS5wb3MtbjticmVha31yZXR1cm4gZS5wb3M9bixoP3tzdHJlYW06bmV3IG8uU3RyZWFtKGUuZ2V0Qnl0ZXMoaCkpLGxlbmd0aDpofTooKDAsYS53YXJuKSgnVW5hYmxlIHRvIHJlY292ZXIgIkxlbmd0aDEiIHByb3BlcnR5IGluIFR5cGUxIGZvbnQgLS0gdXNpbmcgYXMgaXMuJykse3N0cmVhbTpuZXcgby5TdHJlYW0oZS5nZXRCeXRlcyh0KSksbGVuZ3RoOnR9KX0odCxuKTtuZXcgYy5UeXBlMVBhcnNlcihkLnN0cmVhbSwhMSxpLlNFQUNfQU5BTFlTSVNfRU5BQkxFRCkuZXh0cmFjdEZvbnRIZWFkZXIociksdSYmKGg9dC5nZXRCeXRlcyg2KSxzPWhbNV08PDI0fGhbNF08PDE2fGhbM108PDh8aFsyXSk7Y29uc3QgZj1mdW5jdGlvbihlLHQpe2NvbnN0IHI9ZS5nZXRCeXRlcygpO2lmKDA9PT1yLmxlbmd0aCl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiZ2V0RWV4ZWNCbG9jayAtIG5vIGZvbnQgcHJvZ3JhbSBmb3VuZC4iKTtyZXR1cm57c3RyZWFtOm5ldyBvLlN0cmVhbShyKSxsZW5ndGg6ci5sZW5ndGh9fSh0KSxnPW5ldyBjLlR5cGUxUGFyc2VyKGYuc3RyZWFtLCEwLGkuU0VBQ19BTkFMWVNJU19FTkFCTEVEKS5leHRyYWN0Rm9udFByb2dyYW0ocik7Zm9yKGNvbnN0IGUgaW4gZy5wcm9wZXJ0aWVzKXJbZV09Zy5wcm9wZXJ0aWVzW2VdO2NvbnN0IHA9Zy5jaGFyc3RyaW5ncyxtPXRoaXMuZ2V0VHlwZTJDaGFyc3RyaW5ncyhwKSxiPXRoaXMuZ2V0VHlwZTJTdWJycyhnLnN1YnJzKTt0aGlzLmNoYXJzdHJpbmdzPXAsdGhpcy5kYXRhPXRoaXMud3JhcChlLG0sdGhpcy5jaGFyc3RyaW5ncyxiLHIpLHRoaXMuc2VhY3M9dGhpcy5nZXRTZWFjcyhnLmNoYXJzdHJpbmdzKX1nZXQgbnVtR2x5cGhzKCl7cmV0dXJuIHRoaXMuY2hhcnN0cmluZ3MubGVuZ3RoKzF9Z2V0Q2hhcnNldCgpe2NvbnN0IGU9WyIubm90ZGVmIl07Zm9yKGNvbnN0e2dseXBoTmFtZTp0fW9mIHRoaXMuY2hhcnN0cmluZ3MpZS5wdXNoKHQpO3JldHVybiBlfWdldEdseXBoTWFwcGluZyhlKXtjb25zdCB0PXRoaXMuY2hhcnN0cmluZ3M7aWYoZS5jb21wb3NpdGUpe2NvbnN0IHI9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IobGV0IG49MCxhPXQubGVuZ3RoO248YTtuKyspcltlLmNNYXAuY2hhckNvZGVPZihuKV09bisxO3JldHVybiByfWNvbnN0IHI9WyIubm90ZGVmIl07bGV0IG4sYTtmb3IoYT0wO2E8dC5sZW5ndGg7YSsrKXIucHVzaCh0W2FdLmdseXBoTmFtZSk7Y29uc3Qgcz1lLmJ1aWx0SW5FbmNvZGluZztpZihzKXtuPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGNvbnN0IGUgaW4gcylhPXIuaW5kZXhPZihzW2VdKSxhPj0wJiYobltlXT1hKX1yZXR1cm4oMCxpLnR5cGUxRm9udEdseXBoTWFwcGluZykoZSxuLHIpfWhhc0dseXBoSWQoZSl7cmV0dXJuIShlPDB8fGU+PXRoaXMubnVtR2x5cGhzKSYmKDA9PT1lfHx0aGlzLmNoYXJzdHJpbmdzW2UtMV0uY2hhcnN0cmluZy5sZW5ndGg+MCl9Z2V0U2VhY3MoZSl7Y29uc3QgdD1bXTtmb3IobGV0IHI9MCxuPWUubGVuZ3RoO3I8bjtyKyspe2NvbnN0IG49ZVtyXTtuLnNlYWMmJih0W3IrMV09bi5zZWFjKX1yZXR1cm4gdH1nZXRUeXBlMkNoYXJzdHJpbmdzKGUpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IHIgb2YgZSl0LnB1c2goci5jaGFyc3RyaW5nKTtyZXR1cm4gdH1nZXRUeXBlMlN1YnJzKGUpe2xldCB0PTA7Y29uc3Qgcj1lLmxlbmd0aDt0PXI8MTEzMz8xMDc6cjwzMzc2OT8xMTMxOjMyNzY4O2NvbnN0IG49W107bGV0IGE7Zm9yKGE9MDthPHQ7YSsrKW4ucHVzaChbMTFdKTtmb3IoYT0wO2E8cjthKyspbi5wdXNoKGVbYV0pO3JldHVybiBufXdyYXAoZSx0LHIsYSxpKXtjb25zdCBzPW5ldyBuLkNGRjtzLmhlYWRlcj1uZXcgbi5DRkZIZWFkZXIoMSwwLDQsNCkscy5uYW1lcz1bZV07Y29uc3Qgbz1uZXcgbi5DRkZUb3BEaWN0O28uc2V0QnlOYW1lKCJ2ZXJzaW9uIiwzOTEpLG8uc2V0QnlOYW1lKCJOb3RpY2UiLDM5Miksby5zZXRCeU5hbWUoIkZ1bGxOYW1lIiwzOTMpLG8uc2V0QnlOYW1lKCJGYW1pbHlOYW1lIiwzOTQpLG8uc2V0QnlOYW1lKCJXZWlnaHQiLDM5NSksby5zZXRCeU5hbWUoIkVuY29kaW5nIixudWxsKSxvLnNldEJ5TmFtZSgiRm9udE1hdHJpeCIsaS5mb250TWF0cml4KSxvLnNldEJ5TmFtZSgiRm9udEJCb3giLGkuYmJveCksby5zZXRCeU5hbWUoImNoYXJzZXQiLG51bGwpLG8uc2V0QnlOYW1lKCJDaGFyU3RyaW5ncyIsbnVsbCksby5zZXRCeU5hbWUoIlByaXZhdGUiLG51bGwpLHMudG9wRGljdD1vO2NvbnN0IGM9bmV3IG4uQ0ZGU3RyaW5ncztjLmFkZCgiVmVyc2lvbiAwLjExIiksYy5hZGQoIlNlZSBvcmlnaW5hbCBub3RpY2UiKSxjLmFkZChlKSxjLmFkZChlKSxjLmFkZCgiTWVkaXVtIikscy5zdHJpbmdzPWMscy5nbG9iYWxTdWJySW5kZXg9bmV3IG4uQ0ZGSW5kZXg7Y29uc3QgbD10Lmxlbmd0aCxoPVsiLm5vdGRlZiJdO2xldCB1LGQ7Zm9yKHU9MDt1PGw7dSsrKXtjb25zdCBlPXJbdV0uZ2x5cGhOYW1lOy0xPT09bi5DRkZTdGFuZGFyZFN0cmluZ3MuaW5kZXhPZihlKSYmYy5hZGQoZSksaC5wdXNoKGUpfXMuY2hhcnNldD1uZXcgbi5DRkZDaGFyc2V0KCExLDAsaCk7Y29uc3QgZj1uZXcgbi5DRkZJbmRleDtmb3IoZi5hZGQoWzEzOSwxNF0pLHU9MDt1PGw7dSsrKWYuYWRkKHRbdV0pO3MuY2hhclN0cmluZ3M9Zjtjb25zdCBnPW5ldyBuLkNGRlByaXZhdGVEaWN0O2cuc2V0QnlOYW1lKCJTdWJycyIsbnVsbCk7Y29uc3QgcD1bIkJsdWVWYWx1ZXMiLCJPdGhlckJsdWVzIiwiRmFtaWx5Qmx1ZXMiLCJGYW1pbHlPdGhlckJsdWVzIiwiU3RlbVNuYXBIIiwiU3RlbVNuYXBWIiwiQmx1ZVNoaWZ0IiwiQmx1ZUZ1enoiLCJCbHVlU2NhbGUiLCJMYW5ndWFnZUdyb3VwIiwiRXhwYW5zaW9uRmFjdG9yIiwiRm9yY2VCb2xkIiwiU3RkSFciLCJTdGRWVyJdO2Zvcih1PTAsZD1wLmxlbmd0aDt1PGQ7dSsrKXtjb25zdCBlPXBbdV07aWYoIShlIGluIGkucHJpdmF0ZURhdGEpKWNvbnRpbnVlO2NvbnN0IHQ9aS5wcml2YXRlRGF0YVtlXTtpZihBcnJheS5pc0FycmF5KHQpKWZvcihsZXQgZT10Lmxlbmd0aC0xO2U+MDtlLS0pdFtlXS09dFtlLTFdO2cuc2V0QnlOYW1lKGUsdCl9cy50b3BEaWN0LnByaXZhdGVEaWN0PWc7Y29uc3QgbT1uZXcgbi5DRkZJbmRleDtmb3IodT0wLGQ9YS5sZW5ndGg7dTxkO3UrKyltLmFkZChhW3VdKTtyZXR1cm4gZy5zdWJyc0luZGV4PW0sbmV3IG4uQ0ZGQ29tcGlsZXIocykuY29tcGlsZSgpfX19LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5UeXBlMVBhcnNlcj12b2lkIDAscigxMzkpLHIoODQpLHIoOTMpLHIoOTQpLHIoOTcpLHIoOTkpLHIoMTAxKSxyKDEwNSkscigxMDgpLHIoMTE1KSxyKDE1OSk7dmFyIG49cigxODcpLGE9cigxNDkpLGk9cigxNTQpLHM9cigxNDQpO2NvbnN0IG89WzRdLGM9WzVdLGw9WzZdLGg9WzddLHU9WzhdLGQ9WzEyLDM1XSxmPVsxNF0sZz1bMjFdLHA9WzIyXSxtPVszMF0sYj1bMzFdO2NsYXNzIHl7Y29uc3RydWN0b3IoKXt0aGlzLndpZHRoPTAsdGhpcy5sc2I9MCx0aGlzLmZsZXhpbmc9ITEsdGhpcy5vdXRwdXQ9W10sdGhpcy5zdGFjaz1bXX1jb252ZXJ0KGUsdCxyKXtjb25zdCBuPWUubGVuZ3RoO2xldCBhLGkseSx3PSExO2ZvcihsZXQgdj0wO3Y8bjt2Kyspe2xldCBuPWVbdl07aWYobjwzMil7c3dpdGNoKDEyPT09biYmKG49KG48PDgpK2VbKyt2XSksbil7Y2FzZSAxOmNhc2UgMzpjYXNlIDk6Y2FzZSAzMDcyOmNhc2UgMzA3MzpjYXNlIDMwNzQ6Y2FzZSAzMTA1OnRoaXMuc3RhY2s9W107YnJlYWs7Y2FzZSA0OmlmKHRoaXMuZmxleGluZyl7aWYodGhpcy5zdGFjay5sZW5ndGg8MSl7dz0hMDticmVha31jb25zdCBlPXRoaXMuc3RhY2sucG9wKCk7dGhpcy5zdGFjay5wdXNoKDAsZSk7YnJlYWt9dz10aGlzLmV4ZWN1dGVDb21tYW5kKDEsbyk7YnJlYWs7Y2FzZSA1Onc9dGhpcy5leGVjdXRlQ29tbWFuZCgyLGMpO2JyZWFrO2Nhc2UgNjp3PXRoaXMuZXhlY3V0ZUNvbW1hbmQoMSxsKTticmVhaztjYXNlIDc6dz10aGlzLmV4ZWN1dGVDb21tYW5kKDEsaCk7YnJlYWs7Y2FzZSA4Onc9dGhpcy5leGVjdXRlQ29tbWFuZCg2LHUpO2JyZWFrO2Nhc2UgMTA6aWYodGhpcy5zdGFjay5sZW5ndGg8MSl7dz0hMDticmVha31pZih5PXRoaXMuc3RhY2sucG9wKCksIXRbeV0pe3c9ITA7YnJlYWt9dz10aGlzLmNvbnZlcnQodFt5XSx0LHIpO2JyZWFrO2Nhc2UgMTE6cmV0dXJuIHc7Y2FzZSAxMzppZih0aGlzLnN0YWNrLmxlbmd0aDwyKXt3PSEwO2JyZWFrfWE9dGhpcy5zdGFjay5wb3AoKSxpPXRoaXMuc3RhY2sucG9wKCksdGhpcy5sc2I9aSx0aGlzLndpZHRoPWEsdGhpcy5zdGFjay5wdXNoKGEsaSksdz10aGlzLmV4ZWN1dGVDb21tYW5kKDIscCk7YnJlYWs7Y2FzZSAxNDp0aGlzLm91dHB1dC5wdXNoKGZbMF0pO2JyZWFrO2Nhc2UgMjE6aWYodGhpcy5mbGV4aW5nKWJyZWFrO3c9dGhpcy5leGVjdXRlQ29tbWFuZCgyLGcpO2JyZWFrO2Nhc2UgMjI6aWYodGhpcy5mbGV4aW5nKXt0aGlzLnN0YWNrLnB1c2goMCk7YnJlYWt9dz10aGlzLmV4ZWN1dGVDb21tYW5kKDEscCk7YnJlYWs7Y2FzZSAzMDp3PXRoaXMuZXhlY3V0ZUNvbW1hbmQoNCxtKTticmVhaztjYXNlIDMxOnc9dGhpcy5leGVjdXRlQ29tbWFuZCg0LGIpO2JyZWFrO2Nhc2UgMzA3ODppZihyKXtjb25zdCBlPXRoaXMuc3RhY2suYXQoLTUpO3RoaXMuc2VhYz10aGlzLnN0YWNrLnNwbGljZSgtNCw0KSx0aGlzLnNlYWNbMF0rPXRoaXMubHNiLWUsdz10aGlzLmV4ZWN1dGVDb21tYW5kKDAsZil9ZWxzZSB3PXRoaXMuZXhlY3V0ZUNvbW1hbmQoNCxmKTticmVhaztjYXNlIDMwNzk6aWYodGhpcy5zdGFjay5sZW5ndGg8NCl7dz0hMDticmVha310aGlzLnN0YWNrLnBvcCgpLGE9dGhpcy5zdGFjay5wb3AoKTtjb25zdCBlPXRoaXMuc3RhY2sucG9wKCk7aT10aGlzLnN0YWNrLnBvcCgpLHRoaXMubHNiPWksdGhpcy53aWR0aD1hLHRoaXMuc3RhY2sucHVzaChhLGksZSksdz10aGlzLmV4ZWN1dGVDb21tYW5kKDMsZyk7YnJlYWs7Y2FzZSAzMDg0OmlmKHRoaXMuc3RhY2subGVuZ3RoPDIpe3c9ITA7YnJlYWt9Y29uc3Qgdj10aGlzLnN0YWNrLnBvcCgpLHg9dGhpcy5zdGFjay5wb3AoKTt0aGlzLnN0YWNrLnB1c2goeC92KTticmVhaztjYXNlIDMwODg6aWYodGhpcy5zdGFjay5sZW5ndGg8Mil7dz0hMDticmVha315PXRoaXMuc3RhY2sucG9wKCk7Y29uc3QgUz10aGlzLnN0YWNrLnBvcCgpO2lmKDA9PT15JiYzPT09Uyl7Y29uc3QgZT10aGlzLnN0YWNrLnNwbGljZSgtMTcsMTcpO3RoaXMuc3RhY2sucHVzaChlWzJdK2VbMF0sZVszXStlWzFdLGVbNF0sZVs1XSxlWzZdLGVbN10sZVs4XSxlWzldLGVbMTBdLGVbMTFdLGVbMTJdLGVbMTNdLGVbMTRdKSx3PXRoaXMuZXhlY3V0ZUNvbW1hbmQoMTMsZCwhMCksdGhpcy5mbGV4aW5nPSExLHRoaXMuc3RhY2sucHVzaChlWzE1XSxlWzE2XSl9ZWxzZSAxPT09eSYmMD09PVMmJih0aGlzLmZsZXhpbmc9ITApO2JyZWFrO2Nhc2UgMzA4OTpicmVhaztkZWZhdWx0OigwLHMud2FybikoJ1Vua25vd24gdHlwZSAxIGNoYXJzdHJpbmcgY29tbWFuZCBvZiAiJytuKyciJyl9aWYodylicmVha31lbHNlIG48PTI0Nj9uLT0xMzk6bj1uPD0yNTA/MjU2KihuLTI0NykrZVsrK3ZdKzEwODpuPD0yNTQ/LTI1Nioobi0yNTEpLWVbKyt2XS0xMDg6KDI1NSZlWysrdl0pPDwyNHwoMjU1JmVbKyt2XSk8PDE2fCgyNTUmZVsrK3ZdKTw8OHwoMjU1JmVbKyt2XSk8PDAsdGhpcy5zdGFjay5wdXNoKG4pfXJldHVybiB3fWV4ZWN1dGVDb21tYW5kKGUsdCxyKXtjb25zdCBuPXRoaXMuc3RhY2subGVuZ3RoO2lmKGU+bilyZXR1cm4hMDtjb25zdCBhPW4tZTtmb3IobGV0IGU9YTtlPG47ZSsrKXtsZXQgdD10aGlzLnN0YWNrW2VdO051bWJlci5pc0ludGVnZXIodCk/dGhpcy5vdXRwdXQucHVzaCgyOCx0Pj44JjI1NSwyNTUmdCk6KHQ9NjU1MzYqdHwwLHRoaXMub3V0cHV0LnB1c2goMjU1LHQ+PjI0JjI1NSx0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnQpKX1yZXR1cm4gdGhpcy5vdXRwdXQucHVzaCguLi50KSxyP3RoaXMuc3RhY2suc3BsaWNlKGEsZSk6dGhpcy5zdGFjay5sZW5ndGg9MCwhMX19ZnVuY3Rpb24gdyhlKXtyZXR1cm4gZT49NDgmJmU8PTU3fHxlPj02NSYmZTw9NzB8fGU+PTk3JiZlPD0xMDJ9ZnVuY3Rpb24gdihlLHQscil7aWYocj49ZS5sZW5ndGgpcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO2xldCBuLGEsaT0wfHQ7Zm9yKG49MDtuPHI7bisrKWk9NTI4NDUqKGVbbl0raSkrMjI3MTkmNjU1MzU7Y29uc3Qgcz1lLmxlbmd0aC1yLG89bmV3IFVpbnQ4QXJyYXkocyk7Zm9yKG49cixhPTA7YTxzO24rKyxhKyspe2NvbnN0IHQ9ZVtuXTtvW2FdPXReaT4+OCxpPTUyODQ1Kih0K2kpKzIyNzE5JjY1NTM1fXJldHVybiBvfWZ1bmN0aW9uIHgoZSl7cmV0dXJuIDQ3PT09ZXx8OTE9PT1lfHw5Mz09PWV8fDEyMz09PWV8fDEyNT09PWV8fDQwPT09ZXx8NDE9PT1lfXQuVHlwZTFQYXJzZXI9Y2xhc3N7Y29uc3RydWN0b3IoZSx0LHIpe2lmKHQpe2NvbnN0IHQ9ZS5nZXRCeXRlcygpLHI9ISgodyh0WzBdKXx8KDAsYS5pc1doaXRlU3BhY2UpKHRbMF0pKSYmdyh0WzFdKSYmdyh0WzJdKSYmdyh0WzNdKSYmdyh0WzRdKSYmdyh0WzVdKSYmdyh0WzZdKSYmdyh0WzddKSk7ZT1uZXcgaS5TdHJlYW0ocj92KHQsNTU2NjUsNCk6ZnVuY3Rpb24oZSx0LHIpe2xldCBuPTU1NjY1O2NvbnN0IGE9ZS5sZW5ndGgsaT1uZXcgVWludDhBcnJheShhPj4+MSk7bGV0IHMsbztmb3Iocz0wLG89MDtzPGE7cysrKXtjb25zdCB0PWVbc107aWYoIXcodCkpY29udGludWU7bGV0IHI7Zm9yKHMrKztzPGEmJiF3KHI9ZVtzXSk7KXMrKztpZihzPGEpe2NvbnN0IGU9cGFyc2VJbnQoU3RyaW5nLmZyb21DaGFyQ29kZSh0LHIpLDE2KTtpW28rK109ZV5uPj44LG49NTI4NDUqKGUrbikrMjI3MTkmNjU1MzV9fXJldHVybiBpLnNsaWNlKDQsbyl9KHQpKX10aGlzLnNlYWNBbmFseXNpc0VuYWJsZWQ9ISFyLHRoaXMuc3RyZWFtPWUsdGhpcy5uZXh0Q2hhcigpfXJlYWROdW1iZXJBcnJheSgpe3RoaXMuZ2V0VG9rZW4oKTtjb25zdCBlPVtdO2Zvcig7Oyl7Y29uc3QgdD10aGlzLmdldFRva2VuKCk7aWYobnVsbD09PXR8fCJdIj09PXR8fCJ9Ij09PXQpYnJlYWs7ZS5wdXNoKHBhcnNlRmxvYXQodHx8MCkpfXJldHVybiBlfXJlYWROdW1iZXIoKXtjb25zdCBlPXRoaXMuZ2V0VG9rZW4oKTtyZXR1cm4gcGFyc2VGbG9hdChlfHwwKX1yZWFkSW50KCl7Y29uc3QgZT10aGlzLmdldFRva2VuKCk7cmV0dXJuIDB8cGFyc2VJbnQoZXx8MCwxMCl9cmVhZEJvb2xlYW4oKXtyZXR1cm4idHJ1ZSI9PT10aGlzLmdldFRva2VuKCk/MTowfW5leHRDaGFyKCl7cmV0dXJuIHRoaXMuY3VycmVudENoYXI9dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpfXByZXZDaGFyKCl7cmV0dXJuIHRoaXMuc3RyZWFtLnNraXAoLTIpLHRoaXMuY3VycmVudENoYXI9dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpfWdldFRva2VuKCl7bGV0IGU9ITEsdD10aGlzLmN1cnJlbnRDaGFyO2Zvcig7Oyl7aWYoLTE9PT10KXJldHVybiBudWxsO2lmKGUpMTAhPT10JiYxMyE9PXR8fChlPSExKTtlbHNlIGlmKDM3PT09dCllPSEwO2Vsc2UgaWYoISgwLGEuaXNXaGl0ZVNwYWNlKSh0KSlicmVhazt0PXRoaXMubmV4dENoYXIoKX1pZih4KHQpKXJldHVybiB0aGlzLm5leHRDaGFyKCksU3RyaW5nLmZyb21DaGFyQ29kZSh0KTtsZXQgcj0iIjtkb3tyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpLHQ9dGhpcy5uZXh0Q2hhcigpfXdoaWxlKHQ+PTAmJiEoMCxhLmlzV2hpdGVTcGFjZSkodCkmJiF4KHQpKTtyZXR1cm4gcn1yZWFkQ2hhclN0cmluZ3MoZSx0KXtyZXR1cm4tMT09PXQ/ZTp2KGUsNDMzMCx0KX1leHRyYWN0Rm9udFByb2dyYW0oZSl7Y29uc3QgdD10aGlzLnN0cmVhbSxyPVtdLG49W10sYT1PYmplY3QuY3JlYXRlKG51bGwpO2EubGVuSVY9NDtjb25zdCBpPXtzdWJyczpbXSxjaGFyc3RyaW5nczpbXSxwcm9wZXJ0aWVzOntwcml2YXRlRGF0YTphfX07bGV0IHMsbyxjLGw7Zm9yKDtudWxsIT09KHM9dGhpcy5nZXRUb2tlbigpKTspaWYoIi8iPT09cylzd2l0Y2gocz10aGlzLmdldFRva2VuKCkscyl7Y2FzZSJDaGFyU3RyaW5ncyI6Zm9yKHRoaXMuZ2V0VG9rZW4oKSx0aGlzLmdldFRva2VuKCksdGhpcy5nZXRUb2tlbigpLHRoaXMuZ2V0VG9rZW4oKTtzPXRoaXMuZ2V0VG9rZW4oKSxudWxsIT09cyYmImVuZCIhPT1zOyl7aWYoIi8iIT09cyljb250aW51ZTtjb25zdCBlPXRoaXMuZ2V0VG9rZW4oKTtvPXRoaXMucmVhZEludCgpLHRoaXMuZ2V0VG9rZW4oKSxjPW8+MD90LmdldEJ5dGVzKG8pOm5ldyBVaW50OEFycmF5KDApLGw9aS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhLmxlbklWO2NvbnN0IHI9dGhpcy5yZWFkQ2hhclN0cmluZ3MoYyxsKTt0aGlzLm5leHRDaGFyKCkscz10aGlzLmdldFRva2VuKCksIm5vYWNjZXNzIj09PXM/dGhpcy5nZXRUb2tlbigpOiIvIj09PXMmJnRoaXMucHJldkNoYXIoKSxuLnB1c2goe2dseXBoOmUsZW5jb2RlZDpyfSl9YnJlYWs7Y2FzZSJTdWJycyI6Zm9yKHRoaXMucmVhZEludCgpLHRoaXMuZ2V0VG9rZW4oKTsiZHVwIj09PXRoaXMuZ2V0VG9rZW4oKTspe2NvbnN0IGU9dGhpcy5yZWFkSW50KCk7bz10aGlzLnJlYWRJbnQoKSx0aGlzLmdldFRva2VuKCksYz1vPjA/dC5nZXRCeXRlcyhvKTpuZXcgVWludDhBcnJheSgwKSxsPWkucHJvcGVydGllcy5wcml2YXRlRGF0YS5sZW5JVjtjb25zdCBuPXRoaXMucmVhZENoYXJTdHJpbmdzKGMsbCk7dGhpcy5uZXh0Q2hhcigpLHM9dGhpcy5nZXRUb2tlbigpLCJub2FjY2VzcyI9PT1zJiZ0aGlzLmdldFRva2VuKCkscltlXT1ufWJyZWFrO2Nhc2UiQmx1ZVZhbHVlcyI6Y2FzZSJPdGhlckJsdWVzIjpjYXNlIkZhbWlseUJsdWVzIjpjYXNlIkZhbWlseU90aGVyQmx1ZXMiOmNvbnN0IGU9dGhpcy5yZWFkTnVtYmVyQXJyYXkoKTtlLmxlbmd0aD4wJiZlLmxlbmd0aDticmVhaztjYXNlIlN0ZW1TbmFwSCI6Y2FzZSJTdGVtU25hcFYiOmkucHJvcGVydGllcy5wcml2YXRlRGF0YVtzXT10aGlzLnJlYWROdW1iZXJBcnJheSgpO2JyZWFrO2Nhc2UiU3RkSFciOmNhc2UiU3RkVlciOmkucHJvcGVydGllcy5wcml2YXRlRGF0YVtzXT10aGlzLnJlYWROdW1iZXJBcnJheSgpWzBdO2JyZWFrO2Nhc2UiQmx1ZVNoaWZ0IjpjYXNlImxlbklWIjpjYXNlIkJsdWVGdXp6IjpjYXNlIkJsdWVTY2FsZSI6Y2FzZSJMYW5ndWFnZUdyb3VwIjppLnByb3BlcnRpZXMucHJpdmF0ZURhdGFbc109dGhpcy5yZWFkTnVtYmVyKCk7YnJlYWs7Y2FzZSJFeHBhbnNpb25GYWN0b3IiOmkucHJvcGVydGllcy5wcml2YXRlRGF0YVtzXT10aGlzLnJlYWROdW1iZXIoKXx8LjA2O2JyZWFrO2Nhc2UiRm9yY2VCb2xkIjppLnByb3BlcnRpZXMucHJpdmF0ZURhdGFbc109dGhpcy5yZWFkQm9vbGVhbigpfWZvcihjb25zdHtlbmNvZGVkOnQsZ2x5cGg6YX1vZiBuKXtjb25zdCBuPW5ldyB5LHM9bi5jb252ZXJ0KHQscix0aGlzLnNlYWNBbmFseXNpc0VuYWJsZWQpO2xldCBvPW4ub3V0cHV0O3MmJihvPVsxNF0pO2NvbnN0IGM9e2dseXBoTmFtZTphLGNoYXJzdHJpbmc6byx3aWR0aDpuLndpZHRoLGxzYjpuLmxzYixzZWFjOm4uc2VhY307aWYoIi5ub3RkZWYiPT09YT9pLmNoYXJzdHJpbmdzLnVuc2hpZnQoYyk6aS5jaGFyc3RyaW5ncy5wdXNoKGMpLGUuYnVpbHRJbkVuY29kaW5nKXtjb25zdCB0PWUuYnVpbHRJbkVuY29kaW5nLmluZGV4T2YoYSk7dD4tMSYmdm9pZCAwPT09ZS53aWR0aHNbdF0mJnQ+PWUuZmlyc3RDaGFyJiZ0PD1lLmxhc3RDaGFyJiYoZS53aWR0aHNbdF09bi53aWR0aCl9fXJldHVybiBpfWV4dHJhY3RGb250SGVhZGVyKGUpe2xldCB0O2Zvcig7bnVsbCE9PSh0PXRoaXMuZ2V0VG9rZW4oKSk7KWlmKCIvIj09PXQpc3dpdGNoKHQ9dGhpcy5nZXRUb2tlbigpLHQpe2Nhc2UiRm9udE1hdHJpeCI6Y29uc3Qgcj10aGlzLnJlYWROdW1iZXJBcnJheSgpO2UuZm9udE1hdHJpeD1yO2JyZWFrO2Nhc2UiRW5jb2RpbmciOmNvbnN0IGE9dGhpcy5nZXRUb2tlbigpO2xldCBpO2lmKC9eXGQrJC8udGVzdChhKSl7aT1bXTtjb25zdCBlPTB8cGFyc2VJbnQoYSwxMCk7dGhpcy5nZXRUb2tlbigpO2ZvcihsZXQgcj0wO3I8ZTtyKyspe2Zvcih0PXRoaXMuZ2V0VG9rZW4oKTsiZHVwIiE9PXQmJiJkZWYiIT09dDspaWYodD10aGlzLmdldFRva2VuKCksbnVsbD09PXQpcmV0dXJuO2lmKCJkZWYiPT09dClicmVhaztjb25zdCBlPXRoaXMucmVhZEludCgpO3RoaXMuZ2V0VG9rZW4oKTtjb25zdCByPXRoaXMuZ2V0VG9rZW4oKTtpW2VdPXIsdGhpcy5nZXRUb2tlbigpfX1lbHNlIGk9KDAsbi5nZXRFbmNvZGluZykoYSk7ZS5idWlsdEluRW5jb2Rpbmc9aTticmVhaztjYXNlIkZvbnRCQm94Ijpjb25zdCBzPXRoaXMucmVhZE51bWJlckFycmF5KCk7ZS5hc2NlbnQ9TWF0aC5tYXgoc1szXSxzWzFdKSxlLmRlc2NlbnQ9TWF0aC5taW4oc1sxXSxzWzNdKSxlLmFzY2VudFNjYWxlZD0hMH19fX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlBhdHRlcm49dm9pZCAwLHQuZ2V0VGlsaW5nUGF0dGVybklSPWZ1bmN0aW9uKGUsdCxyKXtjb25zdCBhPXQuZ2V0QXJyYXkoIk1hdHJpeCIpLGk9bi5VdGlsLm5vcm1hbGl6ZVJlY3QodC5nZXRBcnJheSgiQkJveCIpKSxzPXQuZ2V0KCJYU3RlcCIpLG89dC5nZXQoIllTdGVwIiksYz10LmdldCgiUGFpbnRUeXBlIiksbD10LmdldCgiVGlsaW5nVHlwZSIpO2lmKGlbMl0taVswXT09MHx8aVszXS1pWzFdPT0wKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIGdldFRpbGluZ1BhdHRlcm5JUiAvQkJveCBhcnJheTogWyIuY29uY2F0KGksIl0uIikpO3JldHVyblsiVGlsaW5nUGF0dGVybiIscixlLGEsaSxzLG8sYyxsXX0scig4NCkscig5Mykscig5NCkscig5Nykscig5OSkscigxMDEpLHIoMTA1KSxyKDEwOCkscigxMTUpLHIoMTM5KSxyKDE1OSk7dmFyIG49cigxNDQpLGE9cigxNTEpLHM9cigxNjIpLG89cigxNDkpO3QuUGF0dGVybj1jbGFzc3tjb25zdHJ1Y3RvcigpeygwLG4udW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBQYXR0ZXJuLiIpfXN0YXRpYyBwYXJzZVNoYWRpbmcoZSx0LHIsaSxzKXtjb25zdCBjPWUgaW5zdGFuY2VvZiBhLkJhc2VTdHJlYW0/ZS5kaWN0OmUsaD1jLmdldCgiU2hhZGluZ1R5cGUiKTt0cnl7c3dpdGNoKGgpe2Nhc2UgMjpjYXNlIDM6cmV0dXJuIG5ldyBsKGMsdCxyLGkscyk7Y2FzZSA0OmNhc2UgNTpjYXNlIDY6Y2FzZSA3OnJldHVybiBuZXcgZChlLHQscixpLHMpO2RlZmF1bHQ6dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlVuc3VwcG9ydGVkIFNoYWRpbmdUeXBlOiAiK2gpfX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygby5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlO3JldHVybigwLG4ud2FybikoZSksbmV3IGZ9fX07Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuY29uc3RydWN0b3I9PT1jJiYoMCxuLnVucmVhY2hhYmxlKSgiQ2Fubm90IGluaXRpYWxpemUgQmFzZVNoYWRpbmcuIil9Z2V0SVIoKXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBnZXRJUmAgY2FsbGVkLiIpfX1pKGMsIlNNQUxMX05VTUJFUiIsMWUtNik7Y2xhc3MgbCBleHRlbmRzIGN7Y29uc3RydWN0b3IoZSx0LHIsYSxpKXtzdXBlcigpLHRoaXMuY29vcmRzQXJyPWUuZ2V0QXJyYXkoIkNvb3JkcyIpLHRoaXMuc2hhZGluZ1R5cGU9ZS5nZXQoIlNoYWRpbmdUeXBlIik7Y29uc3Qgbz1zLkNvbG9yU3BhY2UucGFyc2Uoe2NzOmUuZ2V0UmF3KCJDUyIpfHxlLmdldFJhdygiQ29sb3JTcGFjZSIpLHhyZWY6dCxyZXNvdXJjZXM6cixwZGZGdW5jdGlvbkZhY3Rvcnk6YSxsb2NhbENvbG9yU3BhY2VDYWNoZTppfSksbD1lLmdldEFycmF5KCJCQm94Iik7dGhpcy5iYm94PUFycmF5LmlzQXJyYXkobCkmJjQ9PT1sLmxlbmd0aD9uLlV0aWwubm9ybWFsaXplUmVjdChsKTpudWxsO2xldCBoPTAsdT0xO2lmKGUuaGFzKCJEb21haW4iKSl7Y29uc3QgdD1lLmdldEFycmF5KCJEb21haW4iKTtoPXRbMF0sdT10WzFdfWxldCBkPSExLGY9ITE7aWYoZS5oYXMoIkV4dGVuZCIpKXtjb25zdCB0PWUuZ2V0QXJyYXkoIkV4dGVuZCIpO2Q9dFswXSxmPXRbMV19aWYoISgzIT09dGhpcy5zaGFkaW5nVHlwZXx8ZCYmZikpe2NvbnN0W2UsdCxyLGEsaSxzXT10aGlzLmNvb3Jkc0FycixvPU1hdGguaHlwb3QoZS1hLHQtaSk7cjw9cytvJiZzPD1yK28mJigwLG4ud2FybikoIlVuc3VwcG9ydGVkIHJhZGlhbCBncmFkaWVudC4iKX10aGlzLmV4dGVuZFN0YXJ0PWQsdGhpcy5leHRlbmRFbmQ9Zjtjb25zdCBnPWUuZ2V0UmF3KCJGdW5jdGlvbiIpLHA9YS5jcmVhdGVGcm9tQXJyYXkoZyksbT0odS1oKS84NDAsYj10aGlzLmNvbG9yU3RvcHM9W107aWYoaD49dXx8bTw9MClyZXR1cm4gdm9pZCgwLG4uaW5mbykoIkJhZCBzaGFkaW5nIGRvbWFpbi4iKTtjb25zdCB5PW5ldyBGbG9hdDMyQXJyYXkoby5udW1Db21wcyksdz1uZXcgRmxvYXQzMkFycmF5KDEpO2xldCB2LHg9MDt3WzBdPWgscCh3LDAseSwwKTtsZXQgUz1vLmdldFJnYih5LDApO2NvbnN0IEE9bi5VdGlsLm1ha2VIZXhDb2xvcihTWzBdLFNbMV0sU1syXSk7Yi5wdXNoKFswLEFdKTtsZXQgaz0xO3dbMF09aCttLHAodywwLHksMCk7bGV0IEM9by5nZXRSZ2IoeSwwKSxPPUNbMF0tU1swXSsxLEY9Q1sxXS1TWzFdKzEsST1DWzJdLVNbMl0rMSxUPUNbMF0tU1swXS0xLE09Q1sxXS1TWzFdLTEsRT1DWzJdLVNbMl0tMTtmb3IobGV0IGU9MjtlPDg0MDtlKyspe3dbMF09aCtlKm0scCh3LDAseSwwKSx2PW8uZ2V0UmdiKHksMCk7Y29uc3QgdD1lLXg7aWYoTz1NYXRoLm1pbihPLCh2WzBdLVNbMF0rMSkvdCksRj1NYXRoLm1pbihGLCh2WzFdLVNbMV0rMSkvdCksST1NYXRoLm1pbihJLCh2WzJdLVNbMl0rMSkvdCksVD1NYXRoLm1heChULCh2WzBdLVNbMF0tMSkvdCksTT1NYXRoLm1heChNLCh2WzFdLVNbMV0tMSkvdCksRT1NYXRoLm1heChFLCh2WzJdLVNbMl0tMSkvdCksIShUPD1PJiZNPD1GJiZFPD1JKSl7Y29uc3QgZT1uLlV0aWwubWFrZUhleENvbG9yKENbMF0sQ1sxXSxDWzJdKTtiLnB1c2goW2svODQwLGVdKSxPPXZbMF0tQ1swXSsxLEY9dlsxXS1DWzFdKzEsST12WzJdLUNbMl0rMSxUPXZbMF0tQ1swXS0xLE09dlsxXS1DWzFdLTEsRT12WzJdLUNbMl0tMSx4PWssUz1DfWs9ZSxDPXZ9Y29uc3QgUD1uLlV0aWwubWFrZUhleENvbG9yKENbMF0sQ1sxXSxDWzJdKTtiLnB1c2goWzEsUF0pO2xldCBSPSJ0cmFuc3BhcmVudCI7ZS5oYXMoIkJhY2tncm91bmQiKSYmKHY9by5nZXRSZ2IoZS5nZXQoIkJhY2tncm91bmQiKSwwKSxSPW4uVXRpbC5tYWtlSGV4Q29sb3IodlswXSx2WzFdLHZbMl0pKSxkfHwoYi51bnNoaWZ0KFswLFJdKSxiWzFdWzBdKz1jLlNNQUxMX05VTUJFUiksZnx8KGIuYXQoLTEpWzBdLT1jLlNNQUxMX05VTUJFUixiLnB1c2goWzEsUl0pKSx0aGlzLmNvbG9yU3RvcHM9Yn1nZXRJUigpe2NvbnN0IGU9dGhpcy5jb29yZHNBcnIsdD10aGlzLnNoYWRpbmdUeXBlO2xldCByLGEsaSxzLG87cmV0dXJuIDI9PT10PyhhPVtlWzBdLGVbMV1dLGk9W2VbMl0sZVszXV0scz1udWxsLG89bnVsbCxyPSJheGlhbCIpOjM9PT10PyhhPVtlWzBdLGVbMV1dLGk9W2VbM10sZVs0XV0scz1lWzJdLG89ZVs1XSxyPSJyYWRpYWwiKTooMCxuLnVucmVhY2hhYmxlKSgiZ2V0UGF0dGVybiB0eXBlIHVua25vd246ICIuY29uY2F0KHQpKSxbIlJhZGlhbEF4aWFsIixyLHRoaXMuYmJveCx0aGlzLmNvbG9yU3RvcHMsYSxpLHMsb119fWNsYXNzIGh7Y29uc3RydWN0b3IoZSx0KXt0aGlzLnN0cmVhbT1lLHRoaXMuY29udGV4dD10LHRoaXMuYnVmZmVyPTAsdGhpcy5idWZmZXJMZW5ndGg9MDtjb25zdCByPXQubnVtQ29tcHM7dGhpcy50bXBDb21wc0J1Zj1uZXcgRmxvYXQzMkFycmF5KHIpO2NvbnN0IG49dC5jb2xvclNwYWNlLm51bUNvbXBzO3RoaXMudG1wQ3NDb21wc0J1Zj10LmNvbG9yRm4/bmV3IEZsb2F0MzJBcnJheShuKTp0aGlzLnRtcENvbXBzQnVmfWdldCBoYXNEYXRhKCl7aWYodGhpcy5zdHJlYW0uZW5kKXJldHVybiB0aGlzLnN0cmVhbS5wb3M8dGhpcy5zdHJlYW0uZW5kO2lmKHRoaXMuYnVmZmVyTGVuZ3RoPjApcmV0dXJuITA7Y29uc3QgZT10aGlzLnN0cmVhbS5nZXRCeXRlKCk7cmV0dXJuIShlPDB8fCh0aGlzLmJ1ZmZlcj1lLHRoaXMuYnVmZmVyTGVuZ3RoPTgsMCkpfXJlYWRCaXRzKGUpe2xldCB0PXRoaXMuYnVmZmVyLHI9dGhpcy5idWZmZXJMZW5ndGg7aWYoMzI9PT1lKXtpZigwPT09cilyZXR1cm4odGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpPDwyNHx0aGlzLnN0cmVhbS5nZXRCeXRlKCk8PDE2fHRoaXMuc3RyZWFtLmdldEJ5dGUoKTw8OHx0aGlzLnN0cmVhbS5nZXRCeXRlKCkpPj4+MDt0PXQ8PDI0fHRoaXMuc3RyZWFtLmdldEJ5dGUoKTw8MTZ8dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpPDw4fHRoaXMuc3RyZWFtLmdldEJ5dGUoKTtjb25zdCBlPXRoaXMuc3RyZWFtLmdldEJ5dGUoKTtyZXR1cm4gdGhpcy5idWZmZXI9ZSYoMTw8ciktMSwodDw8OC1yfCgyNTUmZSk+PnIpPj4+MH1pZig4PT09ZSYmMD09PXIpcmV0dXJuIHRoaXMuc3RyZWFtLmdldEJ5dGUoKTtmb3IoO3I8ZTspdD10PDw4fHRoaXMuc3RyZWFtLmdldEJ5dGUoKSxyKz04O3JldHVybiByLT1lLHRoaXMuYnVmZmVyTGVuZ3RoPXIsdGhpcy5idWZmZXI9dCYoMTw8ciktMSx0Pj5yfWFsaWduKCl7dGhpcy5idWZmZXI9MCx0aGlzLmJ1ZmZlckxlbmd0aD0wfXJlYWRGbGFnKCl7cmV0dXJuIHRoaXMucmVhZEJpdHModGhpcy5jb250ZXh0LmJpdHNQZXJGbGFnKX1yZWFkQ29vcmRpbmF0ZSgpe2NvbnN0IGU9dGhpcy5jb250ZXh0LmJpdHNQZXJDb29yZGluYXRlLHQ9dGhpcy5yZWFkQml0cyhlKSxyPXRoaXMucmVhZEJpdHMoZSksbj10aGlzLmNvbnRleHQuZGVjb2RlLGE9ZTwzMj8xLygoMTw8ZSktMSk6Mi4zMjgzMDY0MzY1Mzg2OTYzZS0xMDtyZXR1cm5bdCphKihuWzFdLW5bMF0pK25bMF0sciphKihuWzNdLW5bMl0pK25bMl1dfXJlYWRDb21wb25lbnRzKCl7Y29uc3QgZT10aGlzLmNvbnRleHQubnVtQ29tcHMsdD10aGlzLmNvbnRleHQuYml0c1BlckNvbXBvbmVudCxyPXQ8MzI/MS8oKDE8PHQpLTEpOjIuMzI4MzA2NDM2NTM4Njk2M2UtMTAsbj10aGlzLmNvbnRleHQuZGVjb2RlLGE9dGhpcy50bXBDb21wc0J1Zjtmb3IobGV0IGk9MCxzPTQ7aTxlO2krKyxzKz0yKXtjb25zdCBlPXRoaXMucmVhZEJpdHModCk7YVtpXT1lKnIqKG5bcysxXS1uW3NdKStuW3NdfWNvbnN0IGk9dGhpcy50bXBDc0NvbXBzQnVmO3JldHVybiB0aGlzLmNvbnRleHQuY29sb3JGbiYmdGhpcy5jb250ZXh0LmNvbG9yRm4oYSwwLGksMCksdGhpcy5jb250ZXh0LmNvbG9yU3BhY2UuZ2V0UmdiKGksMCl9fWNvbnN0IHU9ZnVuY3Rpb24oKXtjb25zdCBlPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfHwoZVt0XT1mdW5jdGlvbihlKXtjb25zdCB0PVtdO2ZvcihsZXQgcj0wO3I8PWU7cisrKXtjb25zdCBuPXIvZSxhPTEtbjt0LnB1c2gobmV3IEZsb2F0MzJBcnJheShbYSphKmEsMypuKmEqYSwzKm4qbiphLG4qbipuXSkpfXJldHVybiB0fSh0KSl9fSgpO2NsYXNzIGQgZXh0ZW5kcyBje2NvbnN0cnVjdG9yKGUsdCxyLGksbyl7aWYoc3VwZXIoKSwhKGUgaW5zdGFuY2VvZiBhLkJhc2VTdHJlYW0pKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJNZXNoIGRhdGEgaXMgbm90IGEgc3RyZWFtIik7Y29uc3QgYz1lLmRpY3Q7dGhpcy5zaGFkaW5nVHlwZT1jLmdldCgiU2hhZGluZ1R5cGUiKTtjb25zdCBsPWMuZ2V0QXJyYXkoIkJCb3giKTt0aGlzLmJib3g9QXJyYXkuaXNBcnJheShsKSYmND09PWwubGVuZ3RoP24uVXRpbC5ub3JtYWxpemVSZWN0KGwpOm51bGw7Y29uc3QgdT1zLkNvbG9yU3BhY2UucGFyc2Uoe2NzOmMuZ2V0UmF3KCJDUyIpfHxjLmdldFJhdygiQ29sb3JTcGFjZSIpLHhyZWY6dCxyZXNvdXJjZXM6cixwZGZGdW5jdGlvbkZhY3Rvcnk6aSxsb2NhbENvbG9yU3BhY2VDYWNoZTpvfSk7dGhpcy5iYWNrZ3JvdW5kPWMuaGFzKCJCYWNrZ3JvdW5kIik/dS5nZXRSZ2IoYy5nZXQoIkJhY2tncm91bmQiKSwwKTpudWxsO2NvbnN0IGQ9Yy5nZXRSYXcoIkZ1bmN0aW9uIiksZj1kP2kuY3JlYXRlRnJvbUFycmF5KGQpOm51bGw7dGhpcy5jb29yZHM9W10sdGhpcy5jb2xvcnM9W10sdGhpcy5maWd1cmVzPVtdO2NvbnN0IGc9e2JpdHNQZXJDb29yZGluYXRlOmMuZ2V0KCJCaXRzUGVyQ29vcmRpbmF0ZSIpLGJpdHNQZXJDb21wb25lbnQ6Yy5nZXQoIkJpdHNQZXJDb21wb25lbnQiKSxiaXRzUGVyRmxhZzpjLmdldCgiQml0c1BlckZsYWciKSxkZWNvZGU6Yy5nZXRBcnJheSgiRGVjb2RlIiksY29sb3JGbjpmLGNvbG9yU3BhY2U6dSxudW1Db21wczpmPzE6dS5udW1Db21wc30scD1uZXcgaChlLGcpO2xldCBtPSExO3N3aXRjaCh0aGlzLnNoYWRpbmdUeXBlKXtjYXNlIDQ6dGhpcy5fZGVjb2RlVHlwZTRTaGFkaW5nKHApO2JyZWFrO2Nhc2UgNTpjb25zdCBlPTB8Yy5nZXQoIlZlcnRpY2VzUGVyUm93Iik7aWYoZTwyKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFZlcnRpY2VzUGVyUm93Iik7dGhpcy5fZGVjb2RlVHlwZTVTaGFkaW5nKHAsZSk7YnJlYWs7Y2FzZSA2OnRoaXMuX2RlY29kZVR5cGU2U2hhZGluZyhwKSxtPSEwO2JyZWFrO2Nhc2UgNzp0aGlzLl9kZWNvZGVUeXBlN1NoYWRpbmcocCksbT0hMDticmVhaztkZWZhdWx0OigwLG4udW5yZWFjaGFibGUpKCJVbnN1cHBvcnRlZCBtZXNoIHR5cGUuIil9aWYobSl7dGhpcy5fdXBkYXRlQm91bmRzKCk7Zm9yKGxldCBlPTAsdD10aGlzLmZpZ3VyZXMubGVuZ3RoO2U8dDtlKyspdGhpcy5fYnVpbGRGaWd1cmVGcm9tUGF0Y2goZSl9dGhpcy5fdXBkYXRlQm91bmRzKCksdGhpcy5fcGFja0RhdGEoKX1fZGVjb2RlVHlwZTRTaGFkaW5nKGUpe2NvbnN0IHQ9dGhpcy5jb29yZHMscj10aGlzLmNvbG9ycyxhPVtdLGk9W107bGV0IHM9MDtmb3IoO2UuaGFzRGF0YTspe2NvbnN0IG89ZS5yZWFkRmxhZygpLGM9ZS5yZWFkQ29vcmRpbmF0ZSgpLGw9ZS5yZWFkQ29tcG9uZW50cygpO2lmKDA9PT1zKXtpZighKDA8PW8mJm88PTIpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbmtub3duIHR5cGU0IGZsYWciKTtzd2l0Y2gobyl7Y2FzZSAwOnM9MzticmVhaztjYXNlIDE6aS5wdXNoKGkuYXQoLTIpLGkuYXQoLTEpKSxzPTE7YnJlYWs7Y2FzZSAyOmkucHVzaChpLmF0KC0zKSxpLmF0KC0xKSkscz0xfWEucHVzaChvKX1pLnB1c2godC5sZW5ndGgpLHQucHVzaChjKSxyLnB1c2gobCkscy0tLGUuYWxpZ24oKX10aGlzLmZpZ3VyZXMucHVzaCh7dHlwZToidHJpYW5nbGVzIixjb29yZHM6bmV3IEludDMyQXJyYXkoaSksY29sb3JzOm5ldyBJbnQzMkFycmF5KGkpfSl9X2RlY29kZVR5cGU1U2hhZGluZyhlLHQpe2NvbnN0IHI9dGhpcy5jb29yZHMsbj10aGlzLmNvbG9ycyxhPVtdO2Zvcig7ZS5oYXNEYXRhOyl7Y29uc3QgdD1lLnJlYWRDb29yZGluYXRlKCksaT1lLnJlYWRDb21wb25lbnRzKCk7YS5wdXNoKHIubGVuZ3RoKSxyLnB1c2godCksbi5wdXNoKGkpfXRoaXMuZmlndXJlcy5wdXNoKHt0eXBlOiJsYXR0aWNlIixjb29yZHM6bmV3IEludDMyQXJyYXkoYSksY29sb3JzOm5ldyBJbnQzMkFycmF5KGEpLHZlcnRpY2VzUGVyUm93OnR9KX1fZGVjb2RlVHlwZTZTaGFkaW5nKGUpe2NvbnN0IHQ9dGhpcy5jb29yZHMscj10aGlzLmNvbG9ycyxhPW5ldyBJbnQzMkFycmF5KDE2KSxpPW5ldyBJbnQzMkFycmF5KDQpO2Zvcig7ZS5oYXNEYXRhOyl7Y29uc3Qgcz1lLnJlYWRGbGFnKCk7aWYoISgwPD1zJiZzPD0zKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiVW5rbm93biB0eXBlNiBmbGFnIik7Y29uc3Qgbz10Lmxlbmd0aDtmb3IobGV0IHI9MCxuPTAhPT1zPzg6MTI7cjxuO3IrKyl0LnB1c2goZS5yZWFkQ29vcmRpbmF0ZSgpKTtjb25zdCBjPXIubGVuZ3RoO2ZvcihsZXQgdD0wLG49MCE9PXM/Mjo0O3Q8bjt0Kyspci5wdXNoKGUucmVhZENvbXBvbmVudHMoKSk7bGV0IGwsaCx1LGQ7c3dpdGNoKHMpe2Nhc2UgMDphWzEyXT1vKzMsYVsxM109bys0LGFbMTRdPW8rNSxhWzE1XT1vKzYsYVs4XT1vKzIsYVsxMV09bys3LGFbNF09bysxLGFbN109bys4LGFbMF09byxhWzFdPW8rMTEsYVsyXT1vKzEwLGFbM109bys5LGlbMl09YysxLGlbM109YysyLGlbMF09YyxpWzFdPWMrMzticmVhaztjYXNlIDE6bD1hWzEyXSxoPWFbMTNdLHU9YVsxNF0sZD1hWzE1XSxhWzEyXT1kLGFbMTNdPW8rMCxhWzE0XT1vKzEsYVsxNV09bysyLGFbOF09dSxhWzExXT1vKzMsYVs0XT1oLGFbN109bys0LGFbMF09bCxhWzFdPW8rNyxhWzJdPW8rNixhWzNdPW8rNSxsPWlbMl0saD1pWzNdLGlbMl09aCxpWzNdPWMsaVswXT1sLGlbMV09YysxO2JyZWFrO2Nhc2UgMjpsPWFbMTVdLGg9YVsxMV0sYVsxMl09YVszXSxhWzEzXT1vKzAsYVsxNF09bysxLGFbMTVdPW8rMixhWzhdPWFbN10sYVsxMV09byszLGFbNF09aCxhWzddPW8rNCxhWzBdPWwsYVsxXT1vKzcsYVsyXT1vKzYsYVszXT1vKzUsbD1pWzNdLGlbMl09aVsxXSxpWzNdPWMsaVswXT1sLGlbMV09YysxO2JyZWFrO2Nhc2UgMzphWzEyXT1hWzBdLGFbMTNdPW8rMCxhWzE0XT1vKzEsYVsxNV09bysyLGFbOF09YVsxXSxhWzExXT1vKzMsYVs0XT1hWzJdLGFbN109bys0LGFbMF09YVszXSxhWzFdPW8rNyxhWzJdPW8rNixhWzNdPW8rNSxpWzJdPWlbMF0saVszXT1jLGlbMF09aVsxXSxpWzFdPWMrMX1hWzVdPXQubGVuZ3RoLHQucHVzaChbKC00KnRbYVswXV1bMF0tdFthWzE1XV1bMF0rNioodFthWzRdXVswXSt0W2FbMV1dWzBdKS0yKih0W2FbMTJdXVswXSt0W2FbM11dWzBdKSszKih0W2FbMTNdXVswXSt0W2FbN11dWzBdKSkvOSwoLTQqdFthWzBdXVsxXS10W2FbMTVdXVsxXSs2Kih0W2FbNF1dWzFdK3RbYVsxXV1bMV0pLTIqKHRbYVsxMl1dWzFdK3RbYVszXV1bMV0pKzMqKHRbYVsxM11dWzFdK3RbYVs3XV1bMV0pKS85XSksYVs2XT10Lmxlbmd0aCx0LnB1c2goWygtNCp0W2FbM11dWzBdLXRbYVsxMl1dWzBdKzYqKHRbYVsyXV1bMF0rdFthWzddXVswXSktMioodFthWzBdXVswXSt0W2FbMTVdXVswXSkrMyoodFthWzRdXVswXSt0W2FbMTRdXVswXSkpLzksKC00KnRbYVszXV1bMV0tdFthWzEyXV1bMV0rNioodFthWzJdXVsxXSt0W2FbN11dWzFdKS0yKih0W2FbMF1dWzFdK3RbYVsxNV1dWzFdKSszKih0W2FbNF1dWzFdK3RbYVsxNF1dWzFdKSkvOV0pLGFbOV09dC5sZW5ndGgsdC5wdXNoKFsoLTQqdFthWzEyXV1bMF0tdFthWzNdXVswXSs2Kih0W2FbOF1dWzBdK3RbYVsxM11dWzBdKS0yKih0W2FbMF1dWzBdK3RbYVsxNV1dWzBdKSszKih0W2FbMTFdXVswXSt0W2FbMV1dWzBdKSkvOSwoLTQqdFthWzEyXV1bMV0tdFthWzNdXVsxXSs2Kih0W2FbOF1dWzFdK3RbYVsxM11dWzFdKS0yKih0W2FbMF1dWzFdK3RbYVsxNV1dWzFdKSszKih0W2FbMTFdXVsxXSt0W2FbMV1dWzFdKSkvOV0pLGFbMTBdPXQubGVuZ3RoLHQucHVzaChbKC00KnRbYVsxNV1dWzBdLXRbYVswXV1bMF0rNioodFthWzExXV1bMF0rdFthWzE0XV1bMF0pLTIqKHRbYVsxMl1dWzBdK3RbYVszXV1bMF0pKzMqKHRbYVsyXV1bMF0rdFthWzhdXVswXSkpLzksKC00KnRbYVsxNV1dWzFdLXRbYVswXV1bMV0rNioodFthWzExXV1bMV0rdFthWzE0XV1bMV0pLTIqKHRbYVsxMl1dWzFdK3RbYVszXV1bMV0pKzMqKHRbYVsyXV1bMV0rdFthWzhdXVsxXSkpLzldKSx0aGlzLmZpZ3VyZXMucHVzaCh7dHlwZToicGF0Y2giLGNvb3JkczpuZXcgSW50MzJBcnJheShhKSxjb2xvcnM6bmV3IEludDMyQXJyYXkoaSl9KX19X2RlY29kZVR5cGU3U2hhZGluZyhlKXtjb25zdCB0PXRoaXMuY29vcmRzLHI9dGhpcy5jb2xvcnMsYT1uZXcgSW50MzJBcnJheSgxNiksaT1uZXcgSW50MzJBcnJheSg0KTtmb3IoO2UuaGFzRGF0YTspe2NvbnN0IHM9ZS5yZWFkRmxhZygpO2lmKCEoMDw9cyYmczw9MykpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlVua25vd24gdHlwZTcgZmxhZyIpO2NvbnN0IG89dC5sZW5ndGg7Zm9yKGxldCByPTAsbj0wIT09cz8xMjoxNjtyPG47cisrKXQucHVzaChlLnJlYWRDb29yZGluYXRlKCkpO2NvbnN0IGM9ci5sZW5ndGg7Zm9yKGxldCB0PTAsbj0wIT09cz8yOjQ7dDxuO3QrKylyLnB1c2goZS5yZWFkQ29tcG9uZW50cygpKTtsZXQgbCxoLHUsZDtzd2l0Y2gocyl7Y2FzZSAwOmFbMTJdPW8rMyxhWzEzXT1vKzQsYVsxNF09bys1LGFbMTVdPW8rNixhWzhdPW8rMixhWzldPW8rMTMsYVsxMF09bysxNCxhWzExXT1vKzcsYVs0XT1vKzEsYVs1XT1vKzEyLGFbNl09bysxNSxhWzddPW8rOCxhWzBdPW8sYVsxXT1vKzExLGFbMl09bysxMCxhWzNdPW8rOSxpWzJdPWMrMSxpWzNdPWMrMixpWzBdPWMsaVsxXT1jKzM7YnJlYWs7Y2FzZSAxOmw9YVsxMl0saD1hWzEzXSx1PWFbMTRdLGQ9YVsxNV0sYVsxMl09ZCxhWzEzXT1vKzAsYVsxNF09bysxLGFbMTVdPW8rMixhWzhdPXUsYVs5XT1vKzksYVsxMF09bysxMCxhWzExXT1vKzMsYVs0XT1oLGFbNV09bys4LGFbNl09bysxMSxhWzddPW8rNCxhWzBdPWwsYVsxXT1vKzcsYVsyXT1vKzYsYVszXT1vKzUsbD1pWzJdLGg9aVszXSxpWzJdPWgsaVszXT1jLGlbMF09bCxpWzFdPWMrMTticmVhaztjYXNlIDI6bD1hWzE1XSxoPWFbMTFdLGFbMTJdPWFbM10sYVsxM109byswLGFbMTRdPW8rMSxhWzE1XT1vKzIsYVs4XT1hWzddLGFbOV09bys5LGFbMTBdPW8rMTAsYVsxMV09byszLGFbNF09aCxhWzVdPW8rOCxhWzZdPW8rMTEsYVs3XT1vKzQsYVswXT1sLGFbMV09bys3LGFbMl09bys2LGFbM109bys1LGw9aVszXSxpWzJdPWlbMV0saVszXT1jLGlbMF09bCxpWzFdPWMrMTticmVhaztjYXNlIDM6YVsxMl09YVswXSxhWzEzXT1vKzAsYVsxNF09bysxLGFbMTVdPW8rMixhWzhdPWFbMV0sYVs5XT1vKzksYVsxMF09bysxMCxhWzExXT1vKzMsYVs0XT1hWzJdLGFbNV09bys4LGFbNl09bysxMSxhWzddPW8rNCxhWzBdPWFbM10sYVsxXT1vKzcsYVsyXT1vKzYsYVszXT1vKzUsaVsyXT1pWzBdLGlbM109YyxpWzBdPWlbMV0saVsxXT1jKzF9dGhpcy5maWd1cmVzLnB1c2goe3R5cGU6InBhdGNoIixjb29yZHM6bmV3IEludDMyQXJyYXkoYSksY29sb3JzOm5ldyBJbnQzMkFycmF5KGkpfSl9fV9idWlsZEZpZ3VyZUZyb21QYXRjaChlKXtjb25zdCB0PXRoaXMuZmlndXJlc1tlXTsoMCxuLmFzc2VydCkoInBhdGNoIj09PXQudHlwZSwiVW5leHBlY3RlZCBwYXRjaCBtZXNoIGZpZ3VyZSIpO2NvbnN0IHI9dGhpcy5jb29yZHMsYT10aGlzLmNvbG9ycyxpPXQuY29vcmRzLHM9dC5jb2xvcnMsbz1NYXRoLm1pbihyW2lbMF1dWzBdLHJbaVszXV1bMF0scltpWzEyXV1bMF0scltpWzE1XV1bMF0pLGM9TWF0aC5taW4ocltpWzBdXVsxXSxyW2lbM11dWzFdLHJbaVsxMl1dWzFdLHJbaVsxNV1dWzFdKSxsPU1hdGgubWF4KHJbaVswXV1bMF0scltpWzNdXVswXSxyW2lbMTJdXVswXSxyW2lbMTVdXVswXSksaD1NYXRoLm1heChyW2lbMF1dWzFdLHJbaVszXV1bMV0scltpWzEyXV1bMV0scltpWzE1XV1bMV0pO2xldCBmPU1hdGguY2VpbCgobC1vKSpkLlRSSUFOR0xFX0RFTlNJVFkvKHRoaXMuYm91bmRzWzJdLXRoaXMuYm91bmRzWzBdKSk7Zj1NYXRoLm1heChkLk1JTl9TUExJVF9QQVRDSF9DSFVOS1NfQU1PVU5ULE1hdGgubWluKGQuTUFYX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQsZikpO2xldCBnPU1hdGguY2VpbCgoaC1jKSpkLlRSSUFOR0xFX0RFTlNJVFkvKHRoaXMuYm91bmRzWzNdLXRoaXMuYm91bmRzWzFdKSk7Zz1NYXRoLm1heChkLk1JTl9TUExJVF9QQVRDSF9DSFVOS1NfQU1PVU5ULE1hdGgubWluKGQuTUFYX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQsZykpO2NvbnN0IHA9ZisxLG09bmV3IEludDMyQXJyYXkoKGcrMSkqcCksYj1uZXcgSW50MzJBcnJheSgoZysxKSpwKTtsZXQgeT0wO2NvbnN0IHc9bmV3IFVpbnQ4QXJyYXkoMyksdj1uZXcgVWludDhBcnJheSgzKSx4PWFbc1swXV0sUz1hW3NbMV1dLEE9YVtzWzJdXSxrPWFbc1szXV0sQz11KGcpLE89dShmKTtmb3IobGV0IGU9MDtlPD1nO2UrKyl7d1swXT0oeFswXSooZy1lKStBWzBdKmUpL2d8MCx3WzFdPSh4WzFdKihnLWUpK0FbMV0qZSkvZ3wwLHdbMl09KHhbMl0qKGctZSkrQVsyXSplKS9nfDAsdlswXT0oU1swXSooZy1lKStrWzBdKmUpL2d8MCx2WzFdPShTWzFdKihnLWUpK2tbMV0qZSkvZ3wwLHZbMl09KFNbMl0qKGctZSkra1syXSplKS9nfDA7Zm9yKGxldCB0PTA7dDw9Zjt0KysseSsrKXtpZighKDAhPT1lJiZlIT09Z3x8MCE9PXQmJnQhPT1mKSljb250aW51ZTtsZXQgbj0wLHM9MCxvPTA7Zm9yKGxldCBhPTA7YTw9MzthKyspZm9yKGxldCBjPTA7Yzw9MztjKyssbysrKXtjb25zdCBsPUNbZV1bYV0qT1t0XVtjXTtuKz1yW2lbb11dWzBdKmwscys9cltpW29dXVsxXSpsfW1beV09ci5sZW5ndGgsci5wdXNoKFtuLHNdKSxiW3ldPWEubGVuZ3RoO2NvbnN0IGM9bmV3IFVpbnQ4QXJyYXkoMyk7Y1swXT0od1swXSooZi10KSt2WzBdKnQpL2Z8MCxjWzFdPSh3WzFdKihmLXQpK3ZbMV0qdCkvZnwwLGNbMl09KHdbMl0qKGYtdCkrdlsyXSp0KS9mfDAsYS5wdXNoKGMpfX1tWzBdPWlbMF0sYlswXT1zWzBdLG1bZl09aVszXSxiW2ZdPXNbMV0sbVtwKmddPWlbMTJdLGJbcCpnXT1zWzJdLG1bcCpnK2ZdPWlbMTVdLGJbcCpnK2ZdPXNbM10sdGhpcy5maWd1cmVzW2VdPXt0eXBlOiJsYXR0aWNlIixjb29yZHM6bSxjb2xvcnM6Yix2ZXJ0aWNlc1BlclJvdzpwfX1fdXBkYXRlQm91bmRzKCl7bGV0IGU9dGhpcy5jb29yZHNbMF1bMF0sdD10aGlzLmNvb3Jkc1swXVsxXSxyPWUsbj10O2ZvcihsZXQgYT0xLGk9dGhpcy5jb29yZHMubGVuZ3RoO2E8aTthKyspe2NvbnN0IGk9dGhpcy5jb29yZHNbYV1bMF0scz10aGlzLmNvb3Jkc1thXVsxXTtlPWU+aT9pOmUsdD10PnM/czp0LHI9cjxpP2k6cixuPW48cz9zOm59dGhpcy5ib3VuZHM9W2UsdCxyLG5dfV9wYWNrRGF0YSgpe2xldCBlLHQscixuO2NvbnN0IGE9dGhpcy5jb29yZHMsaT1uZXcgRmxvYXQzMkFycmF5KDIqYS5sZW5ndGgpO2ZvcihlPTAscj0wLHQ9YS5sZW5ndGg7ZTx0O2UrKyl7Y29uc3QgdD1hW2VdO2lbcisrXT10WzBdLGlbcisrXT10WzFdfXRoaXMuY29vcmRzPWk7Y29uc3Qgcz10aGlzLmNvbG9ycyxvPW5ldyBVaW50OEFycmF5KDMqcy5sZW5ndGgpO2ZvcihlPTAscj0wLHQ9cy5sZW5ndGg7ZTx0O2UrKyl7Y29uc3QgdD1zW2VdO29bcisrXT10WzBdLG9bcisrXT10WzFdLG9bcisrXT10WzJdfXRoaXMuY29sb3JzPW87Y29uc3QgYz10aGlzLmZpZ3VyZXM7Zm9yKGU9MCx0PWMubGVuZ3RoO2U8dDtlKyspe2NvbnN0IHQ9Y1tlXSxhPXQuY29vcmRzLGk9dC5jb2xvcnM7Zm9yKHI9MCxuPWEubGVuZ3RoO3I8bjtyKyspYVtyXSo9MixpW3JdKj0zfX1nZXRJUigpe3JldHVyblsiTWVzaCIsdGhpcy5zaGFkaW5nVHlwZSx0aGlzLmNvb3Jkcyx0aGlzLmNvbG9ycyx0aGlzLmZpZ3VyZXMsdGhpcy5ib3VuZHMsdGhpcy5iYm94LHRoaXMuYmFja2dyb3VuZF19fWkoZCwiTUlOX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQiLDMpLGkoZCwiTUFYX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQiLDIwKSxpKGQsIlRSSUFOR0xFX0RFTlNJVFkiLDIwKTtjbGFzcyBmIGV4dGVuZHMgY3tnZXRJUigpe3JldHVyblsiRHVtbXkiXX19fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2V0WGZhRm9udERpY3Q9ZnVuY3Rpb24oZSl7Y29uc3QgdD1mdW5jdGlvbihlKXtjb25zdCB0PWQoZSk7aWYoIXQpcmV0dXJuIG51bGw7Y29uc3R7YmFzZVdpZHRoczpyLGJhc2VNYXBwaW5nOm4sZmFjdG9yczphfT10LGk9YT9yLm1hcCgoKGUsdCk9PmUqYVt0XSkpOnI7bGV0IHMsbz0tMjtjb25zdCBjPVtdO2Zvcihjb25zdFtlLHRdb2Ygbi5tYXAoKChlLHQpPT5bZSx0XSkpLnNvcnQoKChlLHQpPT57bGV0W3JdPWUsW25dPXQ7cmV0dXJuIHItbn0pKSktMSE9PWUmJihlPT09bysxPyhzLnB1c2goaVt0XSksbys9MSk6KG89ZSxzPVtpW3RdXSxjLnB1c2goZSxzKSkpO3JldHVybiBjfShlKSxyPW5ldyBhLkRpY3QobnVsbCk7ci5zZXQoIkJhc2VGb250IixhLk5hbWUuZ2V0KGUpKSxyLnNldCgiVHlwZSIsYS5OYW1lLmdldCgiRm9udCIpKSxyLnNldCgiU3VidHlwZSIsYS5OYW1lLmdldCgiQ0lERm9udFR5cGUyIikpLHIuc2V0KCJFbmNvZGluZyIsYS5OYW1lLmdldCgiSWRlbnRpdHktSCIpKSxyLnNldCgiQ0lEVG9HSURNYXAiLGEuTmFtZS5nZXQoIklkZW50aXR5IikpLHIuc2V0KCJXIix0KSxyLnNldCgiRmlyc3RDaGFyIix0WzBdKSxyLnNldCgiTGFzdENoYXIiLHQuYXQoLTIpK3QuYXQoLTEpLmxlbmd0aC0xKTtjb25zdCBuPW5ldyBhLkRpY3QobnVsbCk7ci5zZXQoIkZvbnREZXNjcmlwdG9yIixuKTtjb25zdCBpPW5ldyBhLkRpY3QobnVsbCk7cmV0dXJuIGkuc2V0KCJPcmRlcmluZyIsIklkZW50aXR5IiksaS5zZXQoIlJlZ2lzdHJ5IiwiQWRvYmUiKSxpLnNldCgiU3VwcGxlbWVudCIsMCksci5zZXQoIkNJRFN5c3RlbUluZm8iLGkpLHJ9LHQuZ2V0WGZhRm9udE5hbWU9ZCxyKDEzOSk7dmFyIG49cigyMDIpLGE9cigxNTApLGk9cigyMDMpLHM9cigyMDQpLG89cigyMDUpLGM9cigyMDYpLGw9cigxNDkpLGg9cigxODgpO2NvbnN0IHU9KDAsbC5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlWyJNeXJpYWRQcm8tUmVndWxhciJdPWVbIlBkZkpTLUZhbGxiYWNrLVJlZ3VsYXIiXT17bmFtZToiTGliZXJhdGlvblNhbnMtUmVndWxhciIsZmFjdG9yczpvLk15cmlhZFByb1JlZ3VsYXJGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJNYXBwaW5nLG1ldHJpY3M6by5NeXJpYWRQcm9SZWd1bGFyTWV0cmljc30sZVsiTXlyaWFkUHJvLUJvbGQiXT1lWyJQZGZKUy1GYWxsYmFjay1Cb2xkIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUJvbGQiLGZhY3RvcnM6by5NeXJpYWRQcm9Cb2xkRmFjdG9ycyxiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzLGJhc2VNYXBwaW5nOnMuTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZyxtZXRyaWNzOm8uTXlyaWFkUHJvQm9sZE1ldHJpY3N9LGVbIk15cmlhZFByby1JdCJdPWVbIk15cmlhZFByby1JdGFsaWMiXT1lWyJQZGZKUy1GYWxsYmFjay1JdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtSXRhbGljIixmYWN0b3JzOm8uTXlyaWFkUHJvSXRhbGljRmFjdG9ycyxiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc0l0YWxpY01hcHBpbmcsbWV0cmljczpvLk15cmlhZFByb0l0YWxpY01ldHJpY3N9LGVbIk15cmlhZFByby1Cb2xkSXQiXT1lWyJNeXJpYWRQcm8tQm9sZEl0YWxpYyJdPWVbIlBkZkpTLUZhbGxiYWNrLUJvbGRJdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYyIsZmFjdG9yczpvLk15cmlhZFByb0JvbGRJdGFsaWNGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNNYXBwaW5nLG1ldHJpY3M6by5NeXJpYWRQcm9Cb2xkSXRhbGljTWV0cmljc30sZS5BcmlhbE1UPWUuQXJpYWw9ZVsiQXJpYWwtUmVndWxhciJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyIixiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNSZWd1bGFyV2lkdGhzLGJhc2VNYXBwaW5nOnMuTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZ30sZVsiQXJpYWwtQm9sZE1UIl09ZVsiQXJpYWwtQm9sZCJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkIixiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzLGJhc2VNYXBwaW5nOnMuTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZ30sZVsiQXJpYWwtSXRhbGljTVQiXT1lWyJBcmlhbC1JdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtSXRhbGljIixiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc0l0YWxpY01hcHBpbmd9LGVbIkFyaWFsLUJvbGRJdGFsaWNNVCJdPWVbIkFyaWFsLUJvbGRJdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYyIsYmFzZVdpZHRoczpzLkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY1dpZHRocyxiYXNlTWFwcGluZzpzLkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY01hcHBpbmd9LGVbIkNhbGlicmktUmVndWxhciJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyIixmYWN0b3JzOm4uQ2FsaWJyaVJlZ3VsYXJGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJNYXBwaW5nLG1ldHJpY3M6bi5DYWxpYnJpUmVndWxhck1ldHJpY3N9LGVbIkNhbGlicmktQm9sZCJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkIixmYWN0b3JzOm4uQ2FsaWJyaUJvbGRGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc0JvbGRXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc0JvbGRNYXBwaW5nLG1ldHJpY3M6bi5DYWxpYnJpQm9sZE1ldHJpY3N9LGVbIkNhbGlicmktSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUl0YWxpYyIsZmFjdG9yczpuLkNhbGlicmlJdGFsaWNGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc0l0YWxpY1dpZHRocyxiYXNlTWFwcGluZzpzLkxpYmVyYXRpb25TYW5zSXRhbGljTWFwcGluZyxtZXRyaWNzOm4uQ2FsaWJyaUl0YWxpY01ldHJpY3N9LGVbIkNhbGlicmktQm9sZEl0YWxpYyJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkSXRhbGljIixmYWN0b3JzOm4uQ2FsaWJyaUJvbGRJdGFsaWNGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNNYXBwaW5nLG1ldHJpY3M6bi5DYWxpYnJpQm9sZEl0YWxpY01ldHJpY3N9LGVbIlNlZ29ldWktUmVndWxhciJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyIixmYWN0b3JzOmMuU2Vnb2V1aVJlZ3VsYXJGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc1JlZ3VsYXJNYXBwaW5nLG1ldHJpY3M6Yy5TZWdvZXVpUmVndWxhck1ldHJpY3N9LGVbIlNlZ29ldWktQm9sZCJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkIixmYWN0b3JzOmMuU2Vnb2V1aUJvbGRGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc0JvbGRXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc0JvbGRNYXBwaW5nLG1ldHJpY3M6Yy5TZWdvZXVpQm9sZE1ldHJpY3N9LGVbIlNlZ29ldWktSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUl0YWxpYyIsZmFjdG9yczpjLlNlZ29ldWlJdGFsaWNGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc0l0YWxpY1dpZHRocyxiYXNlTWFwcGluZzpzLkxpYmVyYXRpb25TYW5zSXRhbGljTWFwcGluZyxtZXRyaWNzOmMuU2Vnb2V1aUl0YWxpY01ldHJpY3N9LGVbIlNlZ29ldWktQm9sZEl0YWxpYyJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkSXRhbGljIixmYWN0b3JzOmMuU2Vnb2V1aUJvbGRJdGFsaWNGYWN0b3JzLGJhc2VXaWR0aHM6cy5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNNYXBwaW5nLG1ldHJpY3M6Yy5TZWdvZXVpQm9sZEl0YWxpY01ldHJpY3N9LGVbIkhlbHZldGljYS1SZWd1bGFyIl09ZS5IZWx2ZXRpY2E9e25hbWU6IkxpYmVyYXRpb25TYW5zLVJlZ3VsYXIiLGZhY3RvcnM6aS5IZWx2ZXRpY2FSZWd1bGFyRmFjdG9ycyxiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNSZWd1bGFyV2lkdGhzLGJhc2VNYXBwaW5nOnMuTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZyxtZXRyaWNzOmkuSGVsdmV0aWNhUmVndWxhck1ldHJpY3N9LGVbIkhlbHZldGljYS1Cb2xkIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUJvbGQiLGZhY3RvcnM6aS5IZWx2ZXRpY2FCb2xkRmFjdG9ycyxiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNCb2xkV2lkdGhzLGJhc2VNYXBwaW5nOnMuTGliZXJhdGlvblNhbnNCb2xkTWFwcGluZyxtZXRyaWNzOmkuSGVsdmV0aWNhQm9sZE1ldHJpY3N9LGVbIkhlbHZldGljYS1JdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtSXRhbGljIixmYWN0b3JzOmkuSGVsdmV0aWNhSXRhbGljRmFjdG9ycyxiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNJdGFsaWNXaWR0aHMsYmFzZU1hcHBpbmc6cy5MaWJlcmF0aW9uU2Fuc0l0YWxpY01hcHBpbmcsbWV0cmljczppLkhlbHZldGljYUl0YWxpY01ldHJpY3N9LGVbIkhlbHZldGljYS1Cb2xkSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUJvbGRJdGFsaWMiLGZhY3RvcnM6aS5IZWx2ZXRpY2FCb2xkSXRhbGljRmFjdG9ycyxiYXNlV2lkdGhzOnMuTGliZXJhdGlvblNhbnNCb2xkSXRhbGljV2lkdGhzLGJhc2VNYXBwaW5nOnMuTGliZXJhdGlvblNhbnNCb2xkSXRhbGljTWFwcGluZyxtZXRyaWNzOmkuSGVsdmV0aWNhQm9sZEl0YWxpY01ldHJpY3N9fSkpO2Z1bmN0aW9uIGQoZSl7Y29uc3QgdD0oMCxoLm5vcm1hbGl6ZUZvbnROYW1lKShlKTtyZXR1cm4gdSgpW3RdfX0sKGUsdCk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5DYWxpYnJpUmVndWxhck1ldHJpY3M9dC5DYWxpYnJpUmVndWxhckZhY3RvcnM9dC5DYWxpYnJpSXRhbGljTWV0cmljcz10LkNhbGlicmlJdGFsaWNGYWN0b3JzPXQuQ2FsaWJyaUJvbGRNZXRyaWNzPXQuQ2FsaWJyaUJvbGRJdGFsaWNNZXRyaWNzPXQuQ2FsaWJyaUJvbGRJdGFsaWNGYWN0b3JzPXQuQ2FsaWJyaUJvbGRGYWN0b3JzPXZvaWQgMCx0LkNhbGlicmlCb2xkRmFjdG9ycz1bMS4zODc3LDEsMSwxLC45NzgwMSwuOTI0ODIsLjg5NTUyLC45MTEzMywuODE5ODgsLjk3NTY2LC45ODE1MiwuOTM1NDgsLjkzNTQ4LDEuMjc5OCwuODUyODQsLjkyNzk0LDEsLjk2MTM0LDEuNTQ2NTcsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC44Mjg0NSwuODI4NDUsLjg1Mjg0LC44NTI4NCwuODUyODQsLjc1ODU5LC45MjEzOCwuODM5MDgsLjc3NjIsLjczMjkzLC44NzI4OSwuNzMxMzMsLjc1MTQsLjgxOTIxLC44NzM1NiwuOTU5NTgsLjU5NTI2LC43NTcyNywuNjkyMjUsMS4wNDkyNCwuOTEyMSwuODY5NDMsLjc5Nzk1LC44ODE5OCwuNzc5NTgsLjcwODY0LC44MTA1NSwuOTAzOTksLjg4NjUzLC45NjAxNywuODI1NzcsLjc3ODkyLC43ODI1NywuOTc1MDcsMS41NDY1NywuOTc1MDcsLjg1Mjg0LC44OTU1MiwuOTAxNzYsLjg4NzYyLC44Nzg1LC43NTI0MSwuODc4NSwuOTA1MTgsLjk1MDE1LC43NzYxOCwuODc4NSwuODg0MDEsLjkxOTE2LC44NjMwNCwuODg0MDEsLjkxNDg4LC44Nzg1LC44ODAxLC44Nzg1LC44Nzg1LC45MTM0MywuNzE3MywxLjA0MTA2LC44Nzg1LC44NTA3NSwuOTU3OTQsLjgyNjE2LC44NTE2MiwuNzk0OTIsLjg4MzMxLDEuNjk4MDgsLjg4MzMxLC44NTI4NCwuOTc4MDEsLjg5NTUyLC45MTEzMywuODk1NTIsLjkxMTMzLDEuNzgwMSwuODk1NTIsMS4yNDQ4NywxLjEzMjU0LDEuMTI0MDEsLjk2ODM5LC44NTI4NCwuNjg3ODcsLjcwNjQ1LC44NTU5MiwuOTA3NDcsMS4wMTQ2NiwxLjAwODgsLjkwMzIzLDEsMS4wNzQ2MywxLC45MTA1NiwuNzU4MDYsMS4xOTExOCwuOTY4MzksLjc4ODY0LC44Mjg0NSwuODQxMzMsLjc1ODU5LC44MzkwOCwuODM5MDgsLjgzOTA4LC44MzkwOCwuODM5MDgsLjgzOTA4LC43NzUzOSwuNzMyOTMsLjczMTMzLC43MzEzMywuNzMxMzMsLjczMTMzLC45NTk1OCwuOTU5NTgsLjk1OTU4LC45NTk1OCwuODg1MDYsLjkxMjEsLjg2OTQzLC44Njk0MywuODY5NDMsLjg2OTQzLC44Njk0MywuODUyODQsLjg3NTA4LC45MDM5OSwuOTAzOTksLjkwMzk5LC45MDM5OSwuNzc4OTIsLjc5Nzk1LC45MDgwNywuODg3NjIsLjg4NzYyLC44ODc2MiwuODg3NjIsLjg4NzYyLC44ODc2MiwuODcxNSwuNzUyNDEsLjkwNTE4LC45MDUxOCwuOTA1MTgsLjkwNTE4LC44ODQwMSwuODg0MDEsLjg4NDAxLC44ODQwMSwuODc4NSwuODc4NSwuODgwMSwuODgwMSwuODgwMSwuODgwMSwuODgwMSwuOTA3NDcsLjg5MDQ5LC44Nzg1LC44Nzg1LC44Nzg1LC44Nzg1LC44NTE2MiwuODc4NSwuODUxNjIsLjgzOTA4LC44ODc2MiwuODM5MDgsLjg4NzYyLC44MzkwOCwuODg3NjIsLjczMjkzLC43NTI0MSwuNzMyOTMsLjc1MjQxLC43MzI5MywuNzUyNDEsLjczMjkzLC43NTI0MSwuODcyODksLjgzMDE2LC44ODUwNiwuOTMxMjUsLjczMTMzLC45MDUxOCwuNzMxMzMsLjkwNTE4LC43MzEzMywuOTA1MTgsLjczMTMzLC45MDUxOCwuNzMxMzMsLjkwNTE4LC44MTkyMSwuNzc2MTgsLjgxOTIxLC43NzYxOCwuODE5MjEsLjc3NjE4LDEsMSwuODczNTYsLjg3ODUsLjkxMDc1LC44OTYwOCwuOTU5NTgsLjg4NDAxLC45NTk1OCwuODg0MDEsLjk1OTU4LC44ODQwMSwuOTU5NTgsLjg4NDAxLC45NTk1OCwuODg0MDEsLjc2MjI5LC45MDE2NywuNTk1MjYsLjkxOTE2LDEsMSwuODYzMDQsLjY5MjI1LC44ODQwMSwxLDEsLjcwNDI0LC43OTQ2OCwuOTE5MjYsLjg4MTc1LC43MDgyMywuOTQ5MDMsLjkxMjEsLjg3ODUsMSwxLC45MTIxLC44Nzg1LC44NzgwMiwuODg2NTYsLjg3ODUsLjg2OTQzLC44ODAxLC44Njk0MywuODgwMSwuODY5NDMsLjg4MDEsLjg3NDAyLC44OTI5MSwuNzc5NTgsLjkxMzQzLDEsMSwuNzc5NTgsLjkxMzQzLC43MDg2NCwuNzE3MywuNzA4NjQsLjcxNzMsLjcwODY0LC43MTczLC43MDg2NCwuNzE3MywxLDEsLjgxMDU1LC43NTg0MSwuODEwNTUsMS4wNjQ1MiwuOTAzOTksLjg3ODUsLjkwMzk5LC44Nzg1LC45MDM5OSwuODc4NSwuOTAzOTksLjg3ODUsLjkwMzk5LC44Nzg1LC45MDM5OSwuODc4NSwuOTYwMTcsLjk1Nzk0LC43Nzg5MiwuODUxNjIsLjc3ODkyLC43ODI1NywuNzk0OTIsLjc4MjU3LC43OTQ5MiwuNzgyNTcsLjc5NDkyLC45Mjk3LC41Njg5MiwuODM5MDgsLjg4NzYyLC43NzUzOSwuODcxNSwuODc1MDgsLjg5MDQ5LDEsMSwuODEwNTUsMS4wNDEwNiwxLjIwNTI4LDEuMjA1MjgsMSwxLjE1NTQzLC43MDY3NCwuOTgzODcsLjk0NzIxLDEuMzM0MzEsMS40NTg5NCwuOTUxNjEsMS4wNjMwMywuODM5MDgsLjgwMzUyLC41NzE4NCwuNjk2NSwuNTYyODksLjgyMDAxLC41NjAyOSwuODEyMzUsMS4wMjk4OCwuODM5MDgsLjc3NjIsLjY4MTU2LC44MDM2NywuNzMxMzMsLjc4MjU3LC44NzM1NiwuODY5NDMsLjk1OTU4LC43NTcyNywuODkwMTksMS4wNDkyNCwuOTEyMSwuNzY0OCwuODY5NDMsLjg3MzU2LC43OTc5NSwuNzgyNzUsLjgxMDU1LC43Nzg5MiwuOTc2MiwuODI1NzcsLjk5ODE5LC44NDg5NiwuOTU5NTgsLjc3ODkyLC45NjEwOCwxLjAxNDA3LC44OTA0OSwxLjAyOTg4LC45NDIxMSwuOTYxMDgsLjg5MzYsLjg0MDIxLC44Nzg0MiwuOTYzOTksLjc5MTA5LC44OTA0OSwxLjAwODEzLDEuMDI5ODgsLjg2MDc3LC44NzQ0NSwuOTIwOTksLjg0NzIzLC44NjUxMywuODgwMSwuNzU2MzgsLjg1NzE0LC43ODIxNiwuNzk1ODYsLjg3OTY1LC45NDIxMSwuOTc3NDcsLjc4Mjg3LC45NzkyNiwuODQ5NzEsMS4wMjk4OCwuOTQyMTEsLjg4MDEsLjk0MjExLC44NDk3MSwuNzMxMzMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjkwMjY0LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MDUxOCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTA1NDgsMSwxLDEsMSwxLDEsLjk2MDE3LC45NTc5NCwuOTYwMTcsLjk1Nzk0LC45NjAxNywuOTU3OTQsLjc3ODkyLC44NTE2MiwxLDEsLjg5NTUyLC45MDUyNywxLC45MDM2MywuOTI3OTQsLjkyNzk0LC45Mjc5NCwuOTI3OTQsLjg3MDEyLC44NzAxMiwuODcwMTIsLjg5NTUyLC44OTU1MiwxLjQyMjU5LC43MTE0MywxLjA2MTUyLDEsMSwxLjAzMzcyLDEuMDMzNzIsLjk3MTcxLDEuNDk1NiwyLjI4MDcsLjkzODM1LC44MzQwNiwuOTExMzMsLjg0MTA3LC45MTEzMywxLDEsMSwuNzIwMjEsMSwxLjIzMTA4LC44MzQ4OSwuODg1MjUsLjg4NTI1LC44MTQ5OSwuOTA1MjcsMS44MTA1NSwuOTA1MjcsMS44MTA1NSwxLjMxMDA2LDEuNTM3MTEsLjk0NDM0LDEuMDg2OTYsMSwuOTUwMTgsLjc3MTkyLC44NTI4NCwuOTA3NDcsMS4xNzUzNCwuNjk4MjUsLjk3MTYsMS4zNzA3NywuOTA3NDcsLjkwNzQ3LC44NTM1NiwuOTA3NDcsLjkwNzQ3LDEuNDQ5NDcsLjg1Mjg0LC44OTQxLC44OTQxLC43MDU3MiwuOCwuNzA1NzIsLjcwNTcyLC43MDU3MiwuNzA1NzIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45OTg2MiwuOTk4NjIsMSwxLDEsMSwxLDEuMDgwMDQsLjkxMDI3LDEsMSwxLC45OTg2MiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTA3MjcsLjkwNzI3LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXSx0LkNhbGlicmlCb2xkTWV0cmljcz17bGluZUhlaWdodDoxLjIyMDcsbGluZUdhcDouMjIwN30sdC5DYWxpYnJpQm9sZEl0YWxpY0ZhY3RvcnM9WzEuMzg3NywxLDEsMSwuOTc4MDEsLjkyNDgyLC44OTU1MiwuOTExMzMsLjgxOTg4LC45NzU2NiwuOTgxNTIsLjkzNTQ4LC45MzU0OCwxLjI3OTgsLjg1Mjg0LC45Mjc5NCwxLC45NjEzNCwxLjU2MjM5LC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuODI4NDUsLjgyODQ1LC44NTI4NCwuODUyODQsLjg1Mjg0LC43NTg1OSwuOTIxMzgsLjgzOTA4LC43NzYyLC43MTgwNSwuODcyODksLjczMTMzLC43NTE0LC44MTkyMSwuODczNTYsLjk1OTU4LC41OTUyNiwuNzU3MjcsLjY5MjI1LDEuMDQ5MjQsLjkwODcyLC44NTkzOCwuNzk3OTUsLjg3MDY4LC43Nzk1OCwuNjk3NjYsLjgxMDU1LC45MDM5OSwuODg2NTMsLjk2MDY4LC44MjU3NywuNzc4OTIsLjc4MjU3LC45NzUwNywxLjUyOSwuOTc1MDcsLjg1Mjg0LC44OTU1MiwuOTAxNzYsLjk0OTA4LC44NjQxMSwuNzQwMTIsLjg2NDExLC44ODMyMywuOTUwMTUsLjg2NDExLC44NjMzMSwuODg0MDEsLjkxOTE2LC44NjMwNCwuODg0MDEsLjkwMzksLjg2MzMxLC44NjMzMSwuODY0MTEsLjg2NDExLC45MDQ2NCwuNzA4NTIsMS4wNDEwNiwuODYzMzEsLjg0MzcyLC45NTc5NCwuODI2MTYsLjg0NTQ4LC43OTQ5MiwuODgzMzEsMS42OTgwOCwuODgzMzEsLjg1Mjg0LC45NzgwMSwuODk1NTIsLjkxMTMzLC44OTU1MiwuOTExMzMsMS43ODAxLC44OTU1MiwxLjI0NDg3LDEuMTMyNTQsMS4xOTEyOSwuOTY4MzksLjg1Mjg0LC42ODc4NywuNzA2NDUsLjg1NTkyLC45MDc0NywxLjAxNDY2LDEuMDA4OCwuOTAzMjMsMSwxLjA3NDYzLDEsLjkxMDU2LC43NTgwNiwxLjE5MTE4LC45NjgzOSwuNzg4NjQsLjgyODQ1LC44NDEzMywuNzU4NTksLjgzOTA4LC44MzkwOCwuODM5MDgsLjgzOTA4LC44MzkwOCwuODM5MDgsLjc3NTM5LC43MTgwNSwuNzMxMzMsLjczMTMzLC43MzEzMywuNzMxMzMsLjk1OTU4LC45NTk1OCwuOTU5NTgsLjk1OTU4LC44ODUwNiwuOTA4NzIsLjg1OTM4LC44NTkzOCwuODU5MzgsLjg1OTM4LC44NTkzOCwuODUyODQsLjg3MDY4LC45MDM5OSwuOTAzOTksLjkwMzk5LC45MDM5OSwuNzc4OTIsLjc5Nzk1LC45MDgwNywuOTQ5MDgsLjk0OTA4LC45NDkwOCwuOTQ5MDgsLjk0OTA4LC45NDkwOCwuODU4ODcsLjc0MDEyLC44ODMyMywuODgzMjMsLjg4MzIzLC44ODMyMywuODg0MDEsLjg4NDAxLC44ODQwMSwuODg0MDEsLjg3ODUsLjg2MzMxLC44NjMzMSwuODYzMzEsLjg2MzMxLC44NjMzMSwuODYzMzEsLjkwNzQ3LC44OTA0OSwuODYzMzEsLjg2MzMxLC44NjMzMSwuODYzMzEsLjg0NTQ4LC44NjQxMSwuODQ1NDgsLjgzOTA4LC45NDkwOCwuODM5MDgsLjk0OTA4LC44MzkwOCwuOTQ5MDgsLjcxODA1LC43NDAxMiwuNzE4MDUsLjc0MDEyLC43MTgwNSwuNzQwMTIsLjcxODA1LC43NDAxMiwuODcyODksLjc5NTM4LC44ODUwNiwuOTI3MjYsLjczMTMzLC44ODMyMywuNzMxMzMsLjg4MzIzLC43MzEzMywuODgzMjMsLjczMTMzLC44ODMyMywuNzMxMzMsLjg4MzIzLC44MTkyMSwuODY0MTEsLjgxOTIxLC44NjQxMSwuODE5MjEsLjg2NDExLDEsMSwuODczNTYsLjg2MzMxLC45MTA3NSwuODc3NywuOTU5NTgsLjg4NDAxLC45NTk1OCwuODg0MDEsLjk1OTU4LC44ODQwMSwuOTU5NTgsLjg4NDAxLC45NTk1OCwuODg0MDEsLjc2NDY3LC45MDE2NywuNTk1MjYsLjkxOTE2LDEsMSwuODYzMDQsLjY5MjI1LC44ODQwMSwxLDEsLjcwNDI0LC43NzMxMiwuOTE5MjYsLjg4MTc1LC43MDgyMywuOTQ5MDMsLjkwODcyLC44NjMzMSwxLDEsLjkwODcyLC44NjMzMSwuODY5MDYsLjg4MTE2LC44NjMzMSwuODU5MzgsLjg2MzMxLC44NTkzOCwuODYzMzEsLjg1OTM4LC44NjMzMSwuODc0MDIsLjg2NTQ5LC43Nzk1OCwuOTA0NjQsMSwxLC43Nzk1OCwuOTA0NjQsLjY5NzY2LC43MDg1MiwuNjk3NjYsLjcwODUyLC42OTc2NiwuNzA4NTIsLjY5NzY2LC43MDg1MiwxLDEsLjgxMDU1LC43NTg0MSwuODEwNTUsMS4wNjQ1MiwuOTAzOTksLjg2MzMxLC45MDM5OSwuODYzMzEsLjkwMzk5LC44NjMzMSwuOTAzOTksLjg2MzMxLC45MDM5OSwuODYzMzEsLjkwMzk5LC44NjMzMSwuOTYwNjgsLjk1Nzk0LC43Nzg5MiwuODQ1NDgsLjc3ODkyLC43ODI1NywuNzk0OTIsLjc4MjU3LC43OTQ5MiwuNzgyNTcsLjc5NDkyLC45Mjk3LC41Njg5MiwuODM5MDgsLjk0OTA4LC43NzUzOSwuODU4ODcsLjg3MDY4LC44OTA0OSwxLDEsLjgxMDU1LDEuMDQxMDYsMS4yMDUyOCwxLjIwNTI4LDEsMS4xNTU0MywuNzAwODgsLjk4Mzg3LC45NDcyMSwxLjMzNDMxLDEuNDU4OTQsLjk1MTYxLDEuNDgzODcsLjgzOTA4LC44MDM1MiwuNTcxMTgsLjY5NjUsLjU2MzQ3LC43OTE3OSwuNTU4NTMsLjgwMzQ2LDEuMDI5ODgsLjgzOTA4LC43NzYyLC42NzE3NCwuODYwMzYsLjczMTMzLC43ODI1NywuODczNTYsLjg2NDQxLC45NTk1OCwuNzU3MjcsLjg5MDE5LDEuMDQ5MjQsLjkwODcyLC43NDg4OSwuODU5MzgsLjg3ODkxLC43OTc5NSwuNzk1NywuODEwNTUsLjc3ODkyLC45NzQ0NywuODI1NzcsLjk3NDY2LC44NzE3OSwuOTU5NTgsLjc3ODkyLC45NDI1MiwuOTU2MTIsLjg3NTMsMS4wMjk4OCwuOTI3MzMsLjk0MjUyLC44NzQxMSwuODQwMjEsLjg3MjgsLjk1NjEyLC43NDA4MSwuODc1MywxLjAyMTg5LDEuMDI5ODgsLjg0ODE0LC44NzQ0NSwuOTE4MjIsLjg0NzIzLC44NTY2OCwuODYzMzEsLjgxMzQ0LC44NzU4MSwuNzY0MjIsLjgyMDQ2LC45NjA1NywuOTI3MzMsLjk5Mzc1LC43ODAyMiwuOTU0NTIsLjg2MDE1LDEuMDI5ODgsLjkyNzMzLC44NjMzMSwuOTI3MzMsLjg2MDE1LC43MzEzMywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTA2MzEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjg4MzIzLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC44NTE3NCwxLDEsMSwxLDEsMSwuOTYwNjgsLjk1Nzk0LC45NjA2OCwuOTU3OTQsLjk2MDY4LC45NTc5NCwuNzc4OTIsLjg0NTQ4LDEsMSwuODk1NTIsLjkwNTI3LDEsLjkwMzYzLC45Mjc5NCwuOTI3OTQsLjkyNzk0LC44OTgwNywuODcwMTIsLjg3MDEyLC44NzAxMiwuODk1NTIsLjg5NTUyLDEuNDIyNTksLjcxMDk0LDEuMDYxNTIsMSwxLDEuMDMzNzIsMS4wMzM3MiwuOTcxNzEsMS40OTU2LDIuMjgwNywuOTI5NzIsLjgzNDA2LC45MTEzMywuODMzMjYsLjkxMTMzLDEsMSwxLC43MjAyMSwxLDEuMjMxMDgsLjgzNDg5LC44ODUyNSwuODg1MjUsLjgxNDk5LC45MDYxNiwxLjgxMDU1LC45MDUyNywxLjgxMDU1LDEuMzEwNywxLjUzNzExLC45NDQzNCwxLjA4Njk2LDEsLjk1MDE4LC43NzE5MiwuODUyODQsLjkwNzQ3LDEuMTc1MzQsLjY5ODI1LC45NzE2LDEuMzcwNzcsLjkwNzQ3LC45MDc0NywuODUzNTYsLjkwNzQ3LC45MDc0NywxLjQ0OTQ3LC44NTI4NCwuODk0MSwuODk0MSwuNzA1NzIsLjgsLjcwNTcyLC43MDU3MiwuNzA1NzIsLjcwNTcyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTk4NjIsLjk5ODYyLDEsMSwxLDEsMSwxLjA4MDA0LC45MTAyNywxLDEsMSwuOTk4NjIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjkwNzI3LC45MDcyNywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV0sdC5DYWxpYnJpQm9sZEl0YWxpY01ldHJpY3M9e2xpbmVIZWlnaHQ6MS4yMjA3LGxpbmVHYXA6LjIyMDd9LHQuQ2FsaWJyaUl0YWxpY0ZhY3RvcnM9WzEuMzg3NywxLDEsMSwxLjE3MjIzLDEuMTI5MywuODk1NTIsLjkxMTMzLC44MDM5NSwxLjAyMjY5LDEuMTU2MDEsLjkxMDU2LC45MTA1NiwxLjI3OTgsLjg1Mjg0LC44OTgwNywxLC45MDg2MSwxLjM5NTQzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTYzMDksLjk2MzA5LC44NTI4NCwuODUyODQsLjg1Mjg0LC44MzMxOSwuODgwNzEsLjg2NzUsLjgxNTUyLC43MjM0NiwuODUxOTMsLjczMjA2LC43NTIyLC44MTEwNSwuODYyNzUsLjkwNjg1LC42Mzc3LC43Nzg5MiwuNzU1OTMsMS4wMjYzOCwuODkyNDksLjg0MTE4LC43NzQ1MiwuODUzNzQsLjc1MTg2LC42Nzc4OSwuNzk3NzYsLjg4ODQ0LC44NTA2NiwuOTQzMDksLjc3ODE4LC43MzA2LC43NjY1OSwxLjEwMzY5LDEuMzgzMTMsMS4xMDM2OSwxLjA2MTM5LC44OTU1MiwuODczOSwuOTI0NSwuOTI0NSwuODMyMDMsLjkyNDUsLjg1ODY1LDEuMDk4NDIsLjkyNDUsLjkyNDUsMS4wMzI5NywxLjA3NjkyLC45MDkxOCwxLjAzMjk3LC45NDk1OSwuOTI0NSwuOTIyNzQsLjkyNDUsLjkyNDUsMS4wMjkzMywuNzc4MzIsMS4yMDU2MiwuOTI0NSwuODkxNiwuOTg5ODYsLjg2NjIxLC44OTQ1MywuNzkwMDQsLjk0MTUyLDEuNzcyNTYsLjk0MTUyLC44NTI4NCwuOTc4MDEsLjg5NTUyLC45MTEzMywuODk1NTIsLjkxMTMzLDEuOTE3MjksLjg5NTUyLDEuMTc4ODksMS4xMzI1NCwxLjE2MzU5LC45MjA5OCwuODUyODQsLjY4Nzg3LC43MTM1MywuODQ3MzcsLjkwNzQ3LDEuMDA4OCwxLjAwNDQsLjg3NjgzLDEsMS4wOTA5MSwxLC45MjIyOSwuNzM5LDEuMTU2NDIsLjkyMDk4LC43NjI4OCwuODA1MDQsLjgwOTcyLC43NTg1OSwuODY3NSwuODY3NSwuODY3NSwuODY3NSwuODY3NSwuODY3NSwuNzYzMTgsLjcyMzQ2LC43MzIwNiwuNzMyMDYsLjczMjA2LC43MzIwNiwuOTA2ODUsLjkwNjg1LC45MDY4NSwuOTA2ODUsLjg2NDc3LC44OTI0OSwuODQxMTgsLjg0MTE4LC44NDExOCwuODQxMTgsLjg0MTE4LC44NTI4NCwuODQ1NTcsLjg4ODQ0LC44ODg0NCwuODg4NDQsLjg4ODQ0LC43MzA2LC43NzQ1MiwuODYzMzEsLjkyNDUsLjkyNDUsLjkyNDUsLjkyNDUsLjkyNDUsLjkyNDUsLjg0ODQzLC44MzIwMywuODU4NjUsLjg1ODY1LC44NTg2NSwuODU4NjUsLjgyNjAxLC44MjYwMSwuODI2MDEsLjgyNjAxLC45NDQ2OSwuOTI0NSwuOTIyNzQsLjkyMjc0LC45MjI3NCwuOTIyNzQsLjkyMjc0LC45MDc0NywuODY2NTEsLjkyNDUsLjkyNDUsLjkyNDUsLjkyNDUsLjg5NDUzLC45MjQ1LC44OTQ1MywuODY3NSwuOTI0NSwuODY3NSwuOTI0NSwuODY3NSwuOTI0NSwuNzIzNDYsLjgzMjAzLC43MjM0NiwuODMyMDMsLjcyMzQ2LC44MzIwMywuNzIzNDYsLjgzMjAzLC44NTE5MywuODg3NSwuODY0NzcsLjk5MDM0LC43MzIwNiwuODU4NjUsLjczMjA2LC44NTg2NSwuNzMyMDYsLjg1ODY1LC43MzIwNiwuODU4NjUsLjczMjA2LC44NTg2NSwuODExMDUsLjkyNDUsLjgxMTA1LC45MjQ1LC44MTEwNSwuOTI0NSwxLDEsLjg2Mjc1LC45MjQ1LC45MDg3MiwuOTM1OTEsLjkwNjg1LC44MjYwMSwuOTA2ODUsLjgyNjAxLC45MDY4NSwuODI2MDEsLjkwNjg1LDEuMDMyOTcsLjkwNjg1LC44MjYwMSwuNzc4OTYsMS4wNTYxMSwuNjM3NywxLjA3NjkyLDEsMSwuOTA5MTgsLjc1NTkzLDEuMDMyOTcsMSwxLC43NjAzMiwuOTM3NSwuOTgxNTYsLjkzNDA3LC43NzI2MSwxLjExNDI5LC44OTI0OSwuOTI0NSwxLDEsLjg5MjQ5LC45MjQ1LC45MjUzNCwuODY2OTgsLjkyNDUsLjg0MTE4LC45MjI3NCwuODQxMTgsLjkyMjc0LC44NDExOCwuOTIyNzQsLjg2NjcsLjg2MjkxLC43NTE4NiwxLjAyOTMzLDEsMSwuNzUxODYsMS4wMjkzMywuNjc3ODksLjc3ODMyLC42Nzc4OSwuNzc4MzIsLjY3Nzg5LC43NzgzMiwuNjc3ODksLjc3ODMyLDEsMSwuNzk3NzYsLjk3NjU1LC43OTc3NiwxLjIzMDIzLC44ODg0NCwuOTI0NSwuODg4NDQsLjkyNDUsLjg4ODQ0LC45MjQ1LC44ODg0NCwuOTI0NSwuODg4NDQsLjkyNDUsLjg4ODQ0LC45MjQ1LC45NDMwOSwuOTg5ODYsLjczMDYsLjg5NDUzLC43MzA2LC43NjY1OSwuNzkwMDQsLjc2NjU5LC43OTAwNCwuNzY2NTksLjc5MDA0LDEuMDkyMzEsLjU0ODczLC44Njc1LC45MjQ1LC43NjMxOCwuODQ4NDMsLjg0NTU3LC44NjY1MSwxLDEsLjc5Nzc2LDEuMjA1NjIsMS4xODYyMiwxLjE4NjIyLDEsMS4xNDM3LC42NzAwOSwuOTYzMzQsLjkzNjk1LDEuMzUxOTEsMS40MDkwOSwuOTUxNjEsMS40ODM4NywuODY3NSwuOTA4NjEsLjYxOTIsLjczNjMsLjY0ODI0LC44MjQxMSwuNTYzMjEsLjg1Njk2LDEuMjM1MTYsLjg2NzUsLjgxNTUyLC43Mjg2LC44NDEzNCwuNzMyMDYsLjc2NjU5LC44NjI3NSwuODQzNjksLjkwNjg1LC43Nzg5MiwuODU4NzEsMS4wMjYzOCwuODkyNDksLjc1ODI4LC44NDExOCwuODU5ODQsLjc3NDUyLC43NjQ2NiwuNzk3NzYsLjczMDYsLjkwNzgyLC43NzgxOCwuOTAzLC44NzI5MSwuOTA2ODUsLjczMDYsLjk5MDU4LDEuMDM2NjcsLjk0NjM1LDEuMjM1MTYsLjk4NDksLjk5MDU4LC45MjM5MywuODkxNiwuOTQyLDEuMDM2NjcsLjc1MDI2LC45NDYzNSwxLjAyOTcsMS4yMzUxNiwuOTA5MTgsLjk0MDQ4LC45ODIxNywuODk3NDYsLjg0MTUzLC45MjI3NCwuODI1MDcsLjg4ODMyLC44NDQzOCwuODgxNzgsMS4wMzUyNSwuOTg0OSwxLjAwMjI1LC43ODA4NiwuOTcyNDgsLjg5NDA0LDEuMjM1MTYsLjk4NDksLjkyMjc0LC45ODQ5LC44OTQwNCwuNzMyMDYsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjg5NjkzLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC44NTg2NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTA5MzMsMSwxLDEsMSwxLDEsLjk0MzA5LC45ODk4NiwuOTQzMDksLjk4OTg2LC45NDMwOSwuOTg5ODYsLjczMDYsLjg5NDUzLDEsMSwuODk1NTIsLjkwNTI3LDEsLjkwMTg2LDEuMTIzMDgsMS4xMjMwOCwxLjEyMzA4LDEuMTIzMDgsMS4yNTY2LDEuMjU2NiwxLjI1NjYsLjg5NTUyLC44OTU1MiwxLjQyMjU5LC42ODk5NCwxLjAzODA5LDEsMSwxLjAxNzYsMS4wMTc2LDEuMTE1MjMsMS40OTU2LDIuMDE0NjIsLjk3ODU4LC44MjYxNiwuOTExMzMsLjgzNDM3LC45MTEzMywxLDEsMSwuNzA1MDgsMSwxLjIzMTA4LC43OTgwMSwuODQ0MjYsLjg0NDI2LC43NzQsLjkwNTcyLDEuODEwNTUsLjkwNzQ5LDEuODEwNTUsMS4yODgwOSwxLjU1NDY5LC45NDQzNCwxLjA3ODA2LDEsLjk3MDk0LC43NTg5LC44NTI4NCwuOTA3NDcsMS4xOTY1OCwuNjk4MjUsLjk3NjIyLDEuMzM1MTIsLjkwNzQ3LC45MDc0NywuODUyODQsLjkwNzQ3LC45MDc0NywxLjQ0OTQ3LC44NTI4NCwuODk0MSwuODk0MSwuNzA1NzIsLjgsLjcwNTcyLC43MDU3MiwuNzA1NzIsLjcwNTcyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTk4NjIsLjk5ODYyLDEsMSwxLDEsMSwxLjAzMzYsLjkxMDI3LDEsMSwxLC45OTg2MiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjA1ODU5LDEuMDU4NTksMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLHQuQ2FsaWJyaUl0YWxpY01ldHJpY3M9e2xpbmVIZWlnaHQ6MS4yMjA3LGxpbmVHYXA6LjIyMDd9LHQuQ2FsaWJyaVJlZ3VsYXJGYWN0b3JzPVsxLjM4NzcsMSwxLDEsMS4xNzIyMywxLjEyOTMsLjg5NTUyLC45MTEzMywuODAzOTUsMS4wMjI2OSwxLjE1NjAxLC45MTA1NiwuOTEwNTYsMS4yNzk4LC44NTI4NCwuODk4MDcsMSwuOTA4NjEsMS4zOTAxNiwuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjk2MzA5LC45NjMwOSwuODUyODQsLjg1Mjg0LC44NTI4NCwuODMzMTksLjg4MDcxLC44Njc1LC44MTU1MiwuNzM4MzQsLjg1MTkzLC43MzIwNiwuNzUyMiwuODExMDUsLjg2Mjc1LC45MDY4NSwuNjM3NywuNzc4OTIsLjc1NTkzLDEuMDI2MzgsLjg5Mzg1LC44NTEyMiwuNzc0NTIsLjg2NTAzLC43NTE4NiwuNjg4ODcsLjc5Nzc2LC44ODg0NCwuODUwNjYsLjk0MjU4LC43NzgxOCwuNzMwNiwuNzY2NTksMS4xMDM2OSwxLjM5MDE2LDEuMTAzNjksMS4wNjEzOSwuODk1NTIsLjg3MzksLjg2MTI4LC45NDQ2OSwuODQ1NywuOTQ0NjksLjg5NDY0LDEuMDk4NDIsLjg0NjM2LC45NDQ2OSwxLjAzMjk3LDEuMDc2OTIsLjkwOTE4LDEuMDMyOTcsLjk1ODk3LC45NDQ2OSwuOTQ4MiwuOTQ0NjksLjk0NDY5LDEuMDQ2OTIsLjc4MjIzLDEuMjA1NjIsLjk0NDY5LC45MDMzMiwuOTg5ODYsLjg2NjIxLC45MDUyNywuNzkwMDQsLjk0MTUyLDEuNzcyNTYsLjk0MTUyLC44NTI4NCwuOTc4MDEsLjg5NTUyLC45MTEzMywuODk1NTIsLjkxMTMzLDEuOTE3MjksLjg5NTUyLDEuMTc4ODksMS4xMzI1NCwxLjA4NzA3LC45MjA5OCwuODUyODQsLjY4Nzg3LC43MTM1MywuODQ3MzcsLjkwNzQ3LDEuMDA4OCwxLjAwNDQsLjg3NjgzLDEsMS4wOTA5MSwxLC45MjIyOSwuNzM5LDEuMTU2NDIsLjkyMDk4LC43NjI4OCwuODA1MDQsLjgwOTcyLC43NTg1OSwuODY3NSwuODY3NSwuODY3NSwuODY3NSwuODY3NSwuODY3NSwuNzYzMTgsLjczODM0LC43MzIwNiwuNzMyMDYsLjczMjA2LC43MzIwNiwuOTA2ODUsLjkwNjg1LC45MDY4NSwuOTA2ODUsLjg2NDc3LC44OTM4NSwuODUxMjIsLjg1MTIyLC44NTEyMiwuODUxMjIsLjg1MTIyLC44NTI4NCwuODUzMTEsLjg4ODQ0LC44ODg0NCwuODg4NDQsLjg4ODQ0LC43MzA2LC43NzQ1MiwuODYzMzEsLjg2MTI4LC44NjEyOCwuODYxMjgsLjg2MTI4LC44NjEyOCwuODYxMjgsLjg2OTMsLjg0NTcsLjg5NDY0LC44OTQ2NCwuODk0NjQsLjg5NDY0LC44MjYwMSwuODI2MDEsLjgyNjAxLC44MjYwMSwuOTQ0NjksLjk0NDY5LC45NDgyLC45NDgyLC45NDgyLC45NDgyLC45NDgyLC45MDc0NywuODY2NTEsLjk0NDY5LC45NDQ2OSwuOTQ0NjksLjk0NDY5LC45MDUyNywuOTQ0NjksLjkwNTI3LC44Njc1LC44NjEyOCwuODY3NSwuODYxMjgsLjg2NzUsLjg2MTI4LC43MzgzNCwuODQ1NywuNzM4MzQsLjg0NTcsLjczODM0LC44NDU3LC43MzgzNCwuODQ1NywuODUxOTMsLjkyNDU0LC44NjQ3NywuOTkyMSwuNzMyMDYsLjg5NDY0LC43MzIwNiwuODk0NjQsLjczMjA2LC44OTQ2NCwuNzMyMDYsLjg5NDY0LC43MzIwNiwuODk0NjQsLjgxMTA1LC44NDYzNiwuODExMDUsLjg0NjM2LC44MTEwNSwuODQ2MzYsMSwxLC44NjI3NSwuOTQ0NjksLjkwODcyLC45NTc4NiwuOTA2ODUsLjgyNjAxLC45MDY4NSwuODI2MDEsLjkwNjg1LC44MjYwMSwuOTA2ODUsMS4wMzI5NywuOTA2ODUsLjgyNjAxLC43Nzc0MSwxLjA1NjExLC42Mzc3LDEuMDc2OTIsMSwxLC45MDkxOCwuNzU1OTMsMS4wMzI5NywxLDEsLjc2MDMyLC45MDQ1MiwuOTgxNTYsMS4xMTg0MiwuNzcyNjEsMS4xMTQyOSwuODkzODUsLjk0NDY5LDEsMSwuODkzODUsLjk0NDY5LC45NTg3NywuODY5MDEsLjk0NDY5LC44NTEyMiwuOTQ4MiwuODUxMjIsLjk0ODIsLjg1MTIyLC45NDgyLC44NjY3LC45MDAxNiwuNzUxODYsMS4wNDY5MiwxLDEsLjc1MTg2LDEuMDQ2OTIsLjY4ODg3LC43ODIyMywuNjg4ODcsLjc4MjIzLC42ODg4NywuNzgyMjMsLjY4ODg3LC43ODIyMywxLDEsLjc5Nzc2LC45MjE4OCwuNzk3NzYsMS4yMzAyMywuODg4NDQsLjk0NDY5LC44ODg0NCwuOTQ0NjksLjg4ODQ0LC45NDQ2OSwuODg4NDQsLjk0NDY5LC44ODg0NCwuOTQ0NjksLjg4ODQ0LC45NDQ2OSwuOTQyNTgsLjk4OTg2LC43MzA2LC45MDUyNywuNzMwNiwuNzY2NTksLjc5MDA0LC43NjY1OSwuNzkwMDQsLjc2NjU5LC43OTAwNCwxLjA5MjMxLC41NDg3MywuODY3NSwuODYxMjgsLjc2MzE4LC44NjkzLC44NTMxMSwuODY2NTEsMSwxLC43OTc3NiwxLjIwNTYyLDEuMTg2MjIsMS4xODYyMiwxLDEuMTQzNywuNjc3NDIsLjk2MzM0LC45MzY5NSwxLjM1MTkxLDEuNDA5MDksLjk1MTYxLDEuNDgzODcsLjg2Njg2LC45MDg2MSwuNjIyNjcsLjc0MzU5LC42NTY0OSwuODU0OTgsLjU2OTYzLC44ODI1NCwxLjIzNTE2LC44Njc1LC44MTU1MiwuNzU0NDMsLjg0NTAzLC43MzIwNiwuNzY2NTksLjg2Mjc1LC44NTEyMiwuOTA2ODUsLjc3ODkyLC44NTc0NiwxLjAyNjM4LC44OTM4NSwuNzU2NTcsLjg1MTIyLC44NjI3NSwuNzc0NTIsLjc0MTcxLC43OTc3NiwuNzMwNiwuOTUxNjUsLjc3ODE4LC44OTc3MiwuODg4MzEsLjkwNjg1LC43MzA2LC45ODE0MiwxLjAyMTkxLC45NjU3NiwxLjIzNTE2LC45OTAxOCwuOTgxNDIsLjkyMzYsLjg5MjU4LC45NDAzNSwxLjAyMTkxLC43ODg0OCwuOTY1NzYsLjk1NjEsMS4yMzUxNiwuOTA5MTgsLjkyNTc4LC45NTQyNCwuODk3NDYsLjgzOTY5LC45NDgyLC44MDExMywuODk0NDIsLjg1MjA4LC44NjE1NSwuOTgwMjIsLjk5MDE4LDEuMDA0NTIsLjgxMjA5LC45OTI0NywuODkxODEsMS4yMzUxNiwuOTkwMTgsLjk0ODIsLjk5MDE4LC44OTE4MSwuNzMyMDYsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjg4ODQ0LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC44OTQ2NCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTY3NjYsMSwxLDEsMSwxLDEsLjk0MjU4LC45ODk4NiwuOTQyNTgsLjk4OTg2LC45NDI1OCwuOTg5ODYsLjczMDYsLjkwNTI3LDEsMSwuODk1NTIsLjkwNTI3LDEsLjkwMTg2LDEuMTIzMDgsMS4xMjMwOCwxLjEyMzA4LDEuMTIzMDgsMS4yNTY2LDEuMjU2NiwxLjI1NjYsLjg5NTUyLC44OTU1MiwxLjQyMjU5LC42OTA0MywxLjAzODA5LDEsMSwxLjAxNzYsMS4wMTc2LDEuMTE1MjMsMS40OTU2LDIuMDE0NjIsLjk5MzMxLC44MjYxNiwuOTExMzMsLjg0Mjg2LC45MTEzMywxLDEsMSwuNzA1MDgsMSwxLjIzMTA4LC43OTgwMSwuODQ0MjYsLjg0NDI2LC43NzQsLjkwNTI3LDEuODEwNTUsLjkwNTI3LDEuODEwNTUsMS4yODgwOSwxLjU1NDY5LC45NDQzNCwxLjA3ODA2LDEsLjk3MDk0LC43NTg5LC44NTI4NCwuOTA3NDcsMS4xOTY1OCwuNjk4MjUsLjk3NjIyLDEuMzM1MTIsLjkwNzQ3LC45MDc0NywuODUzNTYsLjkwNzQ3LC45MDc0NywxLjQ0OTQ3LC44NTI4NCwuODk0MSwuODk0MSwuNzA1NzIsLjgsLjcwNTcyLC43MDU3MiwuNzA1NzIsLjcwNTcyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTk4NjIsLjk5ODYyLDEsMSwxLDEsMSwxLjAzMzYsLjkxMDI3LDEsMSwxLC45OTg2MiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjA1ODU5LDEuMDU4NTksMSwxLDEsMS4wNzE4NSwuOTk0MTMsLjk2MzM0LDEuMDgwNjUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXSx0LkNhbGlicmlSZWd1bGFyTWV0cmljcz17bGluZUhlaWdodDoxLjIyMDcsbGluZUdhcDouMjIwN319LChlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuSGVsdmV0aWNhUmVndWxhck1ldHJpY3M9dC5IZWx2ZXRpY2FSZWd1bGFyRmFjdG9ycz10LkhlbHZldGljYUl0YWxpY01ldHJpY3M9dC5IZWx2ZXRpY2FJdGFsaWNGYWN0b3JzPXQuSGVsdmV0aWNhQm9sZE1ldHJpY3M9dC5IZWx2ZXRpY2FCb2xkSXRhbGljTWV0cmljcz10LkhlbHZldGljYUJvbGRJdGFsaWNGYWN0b3JzPXQuSGVsdmV0aWNhQm9sZEZhY3RvcnM9dm9pZCAwLHQuSGVsdmV0aWNhQm9sZEZhY3RvcnM9Wy43NjExNiwxLDEsMS4wMDA2LC45OTk5OCwuOTk5NzQsLjk5OTczLC45OTk3MywuOTk5ODIsLjk5OTc3LDEuMDAwODcsLjk5OTk4LC45OTk5OCwuOTk5NTksMS4wMDAwMywxLjAwMDYsLjk5OTk4LDEuMDAwNiwxLjAwMDYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk5OCwxLDEuMDAwMDMsMS4wMDAwMywxLjAwMDAzLDEuMDAwMjYsLjk5OTksLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LDEuMDAwMDEsMS4wMDAyNiwxLjAwMDIyLC45OTk3NywxLjAwMDYsLjk5OTczLC45OTk3NywxLjAwMDI2LC45OTk5OSwuOTk5NzcsMS4wMDAyMiwxLjAwMDAxLDEuMDAwMjIsLjk5OTc3LDEuMDAwMDEsMS4wMDAyNiwuOTk5NzcsMS4wMDAwMSwxLjAwMDE2LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI2LC45OTk5OCwxLjAwMDYsLjk5OTk4LDEuMDAwMDMsLjk5OTczLC45OTk5OCwuOTk5NzMsMS4wMDAyNiwuOTk5NzMsMS4wMDAyNiwuOTk5NzMsLjk5OTk4LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDYsMS4wMDA2LC45OTk3MywxLjAwMDYsLjk5OTgyLDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsLjk5OTU5LC45OTk3MywuOTk5OTgsMS4wMDAyNiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsLjk5OTczLDEsLjk5OTU5LDEuMDAwNzcsLjk5OTU5LDEuMDAwMDMsLjk5OTk4LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDc3LC45OTk3MywuOTk5OTgsMS4wMDAyNSwuOTk5NjgsLjk5OTczLDEuMDAwMDMsMS4wMDAyNSwuNjAyOTksMS4wMDAyNCwxLjA2NDA5LDEsMSwuOTk5OTgsMSwuOTk5NzMsMS4wMDA2LC45OTk5OCwxLC45OTkzNiwuOTk5NzMsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMS4wMDAyNiwuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywxLC45OTk3NywxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NzcsLjk5OTc3LDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDAzLDEuMDAwMjIsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk4MiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDY0MDksMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LC45OTk3MywxLjAwMDI2LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywxLjAzMzc0LC45OTk3NywxLjAwMDI2LDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA0MiwuOTk5NzMsLjk5OTczLDEuMDAwNiwuOTk5NzcsLjk5OTczLC45OTk3MywxLjAwMDI2LDEuMDAwNiwxLjAwMDI2LDEuMDAwNiwxLjAwMDI2LDEuMDM4MjgsMS4wMDAyNiwuOTk5OTksMS4wMDAyNiwxLjAwMDYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTMsLjk5OTgsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLDEuMDAwMTYsLjk5OTc3LC45OTk1OSwuOTk5NzcsLjk5OTU5LC45OTk3NywuOTk5NTksMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAyNiwuOTk5OTgsMS4wMDAyNiwuODEyMSwxLjAwMDI2LC45OTk5OCwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwxLjAwMDE2LDEuMDAwMjIsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwxLjAwMDI2LDEsMS4wMDAyNiwxLDEuMDAwMjYsMSwxLjAwMDYsLjk5OTczLC45OTk3NywuOTk5NzMsMSwuOTk5ODIsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMDEsLjk5OTczLDEuMDAwMjYsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwxLjAwMDM0LC45OTk3NywxLC45OTk5NywxLjAwMDI2LDEuMDAwNzgsMS4wMDAzNiwuOTk5NzMsMS4wMDAxMywxLjAwMDYsLjk5OTc3LC45OTk3NywuOTk5ODgsLjg1MTQ4LDEuMDAwMDEsMS4wMDAyNiwuOTk5NzcsMS4wMDAyMiwxLjAwMDYsLjk5OTc3LDEuMDAwMDEsLjk5OTk5LC45OTk3NywxLjAwMDY5LDEuMDAwMjIsLjk5OTc3LDEuMDAwMDEsLjk5OTg0LDEuMDAwMjYsMS4wMDAwMSwxLjAwMDI0LDEuMDAwMDEsLjk5OTksMSwxLjAwMDYsMS4wMDAwMSwxLjAwMDQxLC45OTk2MiwxLjAwMDI2LDEuMDAwNiwuOTk5OTUsMS4wMDA0MSwuOTk5NDIsLjk5OTczLC45OTkyNywxLjAwMDgyLC45OTkwMiwxLjAwMDI2LDEuMDAwODcsMS4wMDA2LDEuMDAwNjksLjk5OTczLC45OTg2NywuOTk5NzMsLjk5OTMsMS4wMDAyNiwxLjAwMDQ5LDEuMDAwNTYsMSwuOTk5ODgsLjk5OTM1LC45OTk5NSwuOTk5NTQsMS4wMDA1NSwuOTk5NDUsMS4wMDAzMiwxLjAwMDYsLjk5OTk1LDEuMDAwMjYsLjk5OTk1LDEuMDAwMzIsMS4wMDAwMSwxLjAwMDA4LC45OTk3MSwxLjAwMDE5LC45OTk0LDEuMDAwMDEsMS4wMDA2LDEuMDAwNDQsLjk5OTczLDEuMDAwMjMsMS4wMDA0NywxLC45OTk0MiwuOTk1NjEsLjk5OTg5LDEuMDAwMzUsLjk5OTc3LDEuMDAwMzUsLjk5OTc3LDEuMDAwMTksLjk5OTQ0LDEuMDAwMDEsMS4wMDAyMSwuOTk5MjYsMS4wMDAzNSwxLjAwMDM1LC45OTk0MiwxLjAwMDQ4LC45OTk5OSwuOTk5NzcsMS4wMDAyMiwxLjAwMDM1LDEuMDAwMDEsLjk5OTc3LDEuMDAwMjYsLjk5OTg5LDEuMDAwNTcsMS4wMDAwMSwuOTk5MzYsMS4wMDA1MiwxLjAwMDEyLC45OTk5NiwxLjAwMDQzLDEsMS4wMDAzNSwuOTk5NCwuOTk5NzYsMS4wMDAzNSwuOTk5NzMsMS4wMDA1MiwxLjAwMDQxLDEuMDAxMTksMS4wMDAzNywuOTk5NzMsMS4wMDAwMiwuOTk5ODYsMS4wMDA0MSwxLjAwMDQxLC45OTkwMiwuOTk5NiwxLjAwMDM0LC45OTk5OSwxLjAwMDI2LC45OTk5OSwxLjAwMDI2LC45OTk3MywxLjAwMDUyLC45OTk3MywxLC45OTk3MywxLjAwMDQxLDEuMDAwNzUsLjk5OTQsMS4wMDAzLC45OTk5OSwxLDEuMDAwNDEsLjk5OTU1LDEsLjk5OTE1LC45OTk3MywuOTk5NzMsMS4wMDAyNiwxLjAwMTE5LC45OTk1NSwuOTk5NzMsMS4wMDA2LC45OTkxMSwxLjAwMDYsMS4wMDAyNiwuOTk5NzIsMS4wMDAyNiwuOTk5MDIsMS4wMDA0MSwuOTk5NzMsLjk5OTk5LDEsMSwxLjAwMDM4LDEuMDAwNSwxLjAwMDE2LDEuMDAwMjIsMS4wMDAxNiwxLjAwMDIyLDEuMDAwMTYsMS4wMDAyMiwxLjAwMDAxLC45OTk3MywxLDEsLjk5OTczLDEsMSwuOTk5NTUsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEsMSwxLC45OTk3MywuOTk5NzMsLjk5OTcyLDEsMSwxLjAwMTA2LC45OTk5OSwuOTk5OTgsLjk5OTk4LC45OTk5OSwuOTk5OTgsMS42NjQ3NSwxLC45OTk3MywuOTk5NzMsMS4wMDAyMywuOTk5NzMsLjk5OTcxLDEuMDAwNDcsMS4wMDAyMywxLC45OTk5MSwuOTk5ODQsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLDEsMSwxLDEsMSwxLC45OTk3MiwxLDEuMjA5ODUsMS4zOTcxMywxLjAwMDAzLDEuMDAwMzEsMS4wMDAxNSwxLC45OTU2MSwxLjAwMDI3LDEuMDAwMzEsMS4wMDAzMSwuOTk5MTUsMS4wMDAzMSwxLjAwMDMxLC45OTk5OSwxLjAwMDAzLC45OTk5OSwuOTk5OTksMS40MTE0NCwxLjYsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQwNTc5LDEuNDA1NzksMS4zNjYyNSwuOTk5OTksMSwuOTk4NjEsLjk5ODYxLDEsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwuOTk5NzIsLjk5OTk5LC45OTk5OSwuOTk5OTksLjk5OTk5LDEuNDA0ODMsMSwuOTk5NzcsMS4wMDA1NCwxLDEsLjk5OTUzLC45OTk2MiwxLjAwMDQyLC45OTk1LDEsMSwxLDEsMSwxLDEsMSwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXSx0LkhlbHZldGljYUJvbGRNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMixsaW5lR2FwOi4yfSx0LkhlbHZldGljYUJvbGRJdGFsaWNGYWN0b3JzPVsuNzYxMTYsMSwxLDEuMDAwNiwuOTk5OTgsLjk5OTc0LC45OTk3MywuOTk5NzMsLjk5OTgyLC45OTk3NywxLjAwMDg3LC45OTk5OCwuOTk5OTgsLjk5OTU5LDEuMDAwMDMsMS4wMDA2LC45OTk5OCwxLjAwMDYsMS4wMDA2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5OTgsMSwxLjAwMDAzLDEuMDAwMDMsMS4wMDAwMywxLjAwMDI2LC45OTk5LC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywxLjAwMDAxLDEuMDAwMjYsMS4wMDAyMiwuOTk5NzcsMS4wMDA2LC45OTk3MywuOTk5NzcsMS4wMDAyNiwuOTk5OTksLjk5OTc3LDEuMDAwMjIsMS4wMDAwMSwxLjAwMDIyLC45OTk3NywxLjAwMDAxLDEuMDAwMjYsLjk5OTc3LDEuMDAwMDEsMS4wMDAxNiwxLjAwMDAxLDEuMDAwMDEsMS4wMDAyNiwuOTk5OTgsMS4wMDA2LC45OTk5OCwxLjAwMDAzLC45OTk3MywuOTk5OTgsLjk5OTczLDEuMDAwMjYsLjk5OTczLDEuMDAwMjYsLjk5OTczLC45OTk5OCwxLjAwMDI2LDEuMDAwMjYsMS4wMDA2LDEuMDAwNiwuOTk5NzMsMS4wMDA2LC45OTk4MiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LC45OTk1OSwuOTk5NzMsLjk5OTk4LDEuMDAwMjYsLjk5OTczLDEuMDAwMjIsLjk5OTczLC45OTk3MywxLC45OTk1OSwxLjAwMDc3LC45OTk1OSwxLjAwMDAzLC45OTk5OCwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA3NywuOTk5NzMsLjk5OTk4LDEuMDAwMjUsLjk5OTY4LC45OTk3MywxLjAwMDAzLDEuMDAwMjUsLjYwMjk5LDEuMDAwMjQsMS4wNjQwOSwxLDEsLjk5OTk4LDEsLjk5OTczLDEuMDAwNiwuOTk5OTgsMSwuOTk5MzYsLjk5OTczLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMjYsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsMSwuOTk5NzcsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTc3LC45OTk3NywxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAwMywxLjAwMDIyLC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywxLjAwMDAxLDEuMDAwMDEsMS4wMDAyNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5ODIsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjA2NDA5LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwuOTk5NzMsMS4wMDAyNiwuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsMS4wMDQ0LC45OTk3NywxLjAwMDI2LDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTcxLC45OTk3MywuOTk5NzMsMS4wMDA2LC45OTk3NywuOTk5NzMsLjk5OTczLDEuMDAwMjYsMS4wMDA2LDEuMDAwMjYsMS4wMDA2LDEuMDAwMjYsMS4wMTAxMSwxLjAwMDI2LC45OTk5OSwxLjAwMDI2LDEuMDAwNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5MywuOTk5OCwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LDEsMS4wMDAxNiwuOTk5NzcsLjk5OTU5LC45OTk3NywuOTk5NTksLjk5OTc3LC45OTk1OSwxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDI2LC45OTk5OCwxLjAwMDI2LC44MTIxLDEuMDAwMjYsLjk5OTk4LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LDEuMDAwMTYsMS4wMDAyMiwxLjAwMDAxLC45OTk3MywxLjAwMDAxLDEuMDAwMjYsMSwxLjAwMDI2LDEsMS4wMDAyNiwxLDEuMDAwNiwuOTk5NzMsLjk5OTc3LC45OTk3MywxLC45OTk4MiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAwMSwuOTk5NzMsMS4wMDAyNiwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5NzcsMSwxLDEuMDAwMjYsLjk5OTY5LC45OTk3MiwuOTk5ODEsLjk5OTgsMS4wMDA2LC45OTk3NywuOTk5NzcsMS4wMDAyMiwuOTExNTUsMS4wMDAwMSwxLjAwMDI2LC45OTk3NywxLjAwMDIyLDEuMDAwNiwuOTk5NzcsMS4wMDAwMSwuOTk5OTksLjk5OTc3LC45OTk2NiwxLjAwMDIyLDEuMDAwMzIsMS4wMDAwMSwuOTk5NDQsMS4wMDAyNiwxLjAwMDAxLC45OTk2OCwxLjAwMDAxLDEuMDAwNDcsMSwxLjAwMDYsMS4wMDAwMSwuOTk5ODEsMS4wMDEwMSwxLjAwMDI2LDEuMDAwNiwuOTk5NDgsLjk5OTgxLDEuMDAwNjQsLjk5OTczLC45OTk0MiwxLjAwMTAxLDEuMDAwNjEsMS4wMDAyNiwxLjAwMDY5LDEuMDAwNiwxLjAwMDE0LC45OTk3MywxLjAxMzIyLC45OTk3MywxLjAwMDY1LDEuMDAwMjYsMS4wMDAxMiwuOTk5MjMsMSwxLjAwMDY0LDEuMDAwNzYsLjk5OTQ4LDEuMDAwNTUsMS4wMDA2MywxLjAwMDA3LC45OTk0MywxLjAwMDYsLjk5OTQ4LDEuMDAwMjYsLjk5OTQ4LC45OTk0MywxLjAwMDAxLDEuMDAwMDEsMS4wMDAyOSwxLjAwMDM4LDEuMDAwMzUsMS4wMDAwMSwxLjAwMDYsMS4wMDA2LC45OTk3MywuOTk5NzgsMS4wMDAwMSwxLjAwMDU3LC45OTk4OSwuOTk5NjcsLjk5OTY0LC45OTk2NywuOTk5NzcsLjk5OTk5LC45OTk3NywxLjAwMDM4LC45OTk3NywxLjAwMDAxLC45OTk3MywxLjAwMDY2LC45OTk2NywuOTk5NjcsMS4wMDA0MSwuOTk5OTgsLjk5OTk5LC45OTk3NywxLjAwMDIyLC45OTk2NywxLjAwMDAxLC45OTk3NywxLjAwMDI2LC45OTk2NCwxLjAwMDMxLDEuMDAwMDEsLjk5OTk5LC45OTk5OSwxLDEuMDAwMjMsMSwxLC45OTk5OSwxLjAwMDM1LDEuMDAwMDEsLjk5OTk5LC45OTk3MywuOTk5NzcsLjk5OTk5LDEuMDAwNTgsLjk5OTczLC45OTk3MywuOTk5NTUsLjk5OTUsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMzIsLjk5OTg5LDEuMDAwMzQsLjk5OTk5LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LC45OTk3MywuNDU5OTgsLjk5OTczLDEuMDAwMjYsLjk5OTczLDEuMDAwMDEsLjk5OTk5LC45OTk4MiwuOTk5OTQsLjk5OTk2LDEsMS4wMDA0MiwxLjAwMDQ0LDEuMDAwMjksMS4wMDAyMywuOTk5NzMsLjk5OTczLDEuMDAwMjYsLjk5OTQ5LDEuMDAwMDIsLjk5OTczLDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk3NSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAzMiwuOTg2ODUsLjk5OTczLDEuMDAwMjYsMSwxLC45OTk2NiwxLjAwMDQ0LDEuMDAwMTYsMS4wMDAyMiwxLjAwMDE2LDEuMDAwMjIsMS4wMDAxNiwxLjAwMDIyLDEuMDAwMDEsLjk5OTczLDEsMSwuOTk5NzMsMSwxLC45OTk1NSwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMSwxLDEsLjk5OTczLC45OTk3MywuOTk5NzIsMSwxLDEuMDAxMDYsLjk5OTk5LC45OTk5OCwuOTk5OTgsLjk5OTk5LC45OTk5OCwxLjY2NDc1LDEsLjk5OTczLC45OTk3MywxLC45OTk3MywuOTk5NzEsLjk5OTc4LDEsMSwuOTk5OTEsLjk5OTg0LDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMS4wMDA5OCwxLDEsMSwxLjAwMDQ5LDEsMSwuOTk5NzIsMSwxLjIwOTg1LDEuMzk3MTMsMS4wMDAwMywxLjAwMDMxLDEuMDAwMTUsMSwuOTk1NjEsMS4wMDAyNywxLjAwMDMxLDEuMDAwMzEsLjk5OTE1LDEuMDAwMzEsMS4wMDAzMSwuOTk5OTksMS4wMDAwMywuOTk5OTksLjk5OTk5LDEuNDExNDQsMS42LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MDU3OSwxLjQwNTc5LDEuMzY2MjUsLjk5OTk5LDEsLjk5ODYxLC45OTg2MSwxLDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsLjk5OTcyLC45OTk5OSwuOTk5OTksLjk5OTk5LC45OTk5OSwxLjQwNDgzLDEsLjk5OTc3LDEuMDAwNTQsMSwxLC45OTk1MywuOTk5NjIsMS4wMDA0MiwuOTk5NSwxLDEsMSwxLDEsMSwxLDEsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LDEsMSwxLDEsMSwxLDEsMSwxLDEsMV0sdC5IZWx2ZXRpY2FCb2xkSXRhbGljTWV0cmljcz17bGluZUhlaWdodDoxLjM1LGxpbmVHYXA6LjJ9LHQuSGVsdmV0aWNhSXRhbGljRmFjdG9ycz1bLjc2MTE2LDEsMSwxLjAwMDYsMS4wMDA2LDEuMDAwMDYsLjk5OTczLC45OTk3MywuOTk5ODIsMS4wMDAwMSwxLjAwMDQzLC45OTk5OCwuOTk5OTgsLjk5OTU5LDEuMDAwMDMsMS4wMDA2LC45OTk5OCwxLjAwMDYsMS4wMDA2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDYsMSwxLjAwMDAzLDEuMDAwMDMsMS4wMDAwMywuOTk5NzMsLjk5OTg3LDEuMDAwMDEsMS4wMDAwMSwuOTk5NzcsLjk5OTc3LDEuMDAwMDEsMS4wMDAyNiwxLjAwMDIyLC45OTk3NywxLjAwMDYsMSwxLjAwMDAxLC45OTk3MywuOTk5OTksLjk5OTc3LDEuMDAwMjIsMS4wMDAwMSwxLjAwMDIyLC45OTk3NywxLjAwMDAxLDEuMDAwMjYsLjk5OTc3LDEuMDAwMDEsMS4wMDAxNiwxLjAwMDAxLDEuMDAwMDEsMS4wMDAyNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NDksLjk5OTczLC45OTk5OCwuOTk5NzMsLjk5OTczLDEsLjk5OTczLC45OTk3MywxLjAwMDYsLjk5OTczLC45OTk3MywuOTk5MjQsLjk5OTI0LDEsLjk5OTI0LC45OTk5OSwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTk4LDEsMS4wMDA2LC45OTk3MywxLC45OTk3NywxLDEsMSwxLjAwMDA1LDEuMDAwOSwxLjAwMDA1LDEuMDAwMDMsLjk5OTk4LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDksLjk5OTczLC45OTk5OCwxLjAwMDI1LC45OTk2OCwuOTk5NzMsMS4wMDAwMywxLjAwMDI1LC42MDI5OSwxLjAwMDI0LDEuMDY0MDksMSwxLC45OTk5OCwxLC45OTk4LDEuMDAwNiwuOTk5OTgsMSwuOTk5MzYsLjk5OTczLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMjYsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMSwuOTk5NzcsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTc3LC45OTk3NywxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAwMywxLjAwMDIyLC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywxLjAwMDAxLDEuMDAwMDEsMS4wMDAyNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5ODIsMSwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjA2NDA5LDEuMDAwMjYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEsLjk5OTczLDEsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsLjk5OTc3LDEsLjk5OTc3LDEsLjk5OTc3LDEsLjk5OTc3LDEsLjk5OTc3LDEuMDI4OCwuOTk5NzcsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMjIsLjk5OTczLDEuMDAwMjIsLjk5OTczLDEuMDAwMjIsLjk5OTczLDEuMDAwMjIsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTI0LDEuMDAwNiwxLjAwMDYsLjk5OTQ2LDEuMDAwMzQsMSwuOTk5MjQsMS4wMDAwMSwxLDEsLjk5OTczLC45OTkyNCwuOTk5NzMsLjk5OTI0LC45OTk3MywxLjA2MzExLC45OTk3MywxLjAwMDI0LC45OTk3MywuOTk5MjQsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsMS4wMDA0MSwuOTk5OCwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMSwxLjAwMDE2LC45OTk3NywuOTk5OTgsLjk5OTc3LC45OTk5OCwuOTk5NzcsLjk5OTk4LDEuMDAwMDEsMSwxLjAwMDAxLDEsMS4wMDAwMSwxLDEuMDAwMDEsMSwxLjAwMDI2LDEuMDAwNiwxLjAwMDI2LC44OTU0NywxLjAwMDI2LDEuMDAwNiwuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywxLjAwMDE2LC45OTk3NywxLjAwMDAxLDEsMS4wMDAwMSwxLjAwMDI2LDEsMS4wMDAyNiwxLDEuMDAwMjYsMSwuOTk5MjQsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEsLjk5OTgyLDEuMDAwMjIsMS4wMDAyNiwxLjAwMDAxLDEsMS4wMDAyNiwxLjAwMDYsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwxLjAwMDAxLDEsMS4wMDA1NCwuOTk5NzcsMS4wMDA4NCwxLjAwMDA3LC45OTk3MywxLjAwMDEzLC45OTkyNCwxLjAwMDAxLDEuMDAwMDEsLjk5OTQ1LC45MTIyMSwxLjAwMDAxLDEuMDAwMjYsLjk5OTc3LDEuMDAwMjIsMS4wMDA2LDEuMDAwMDEsMS4wMDAwMSwuOTk5OTksLjk5OTc3LC45OTkzMywxLjAwMDIyLDEuMDAwNTQsMS4wMDAwMSwxLjAwMDY1LDEuMDAwMjYsMS4wMDAwMSwxLjAwMDEsMS4wMDAwMSwxLjAwMDUyLDEsMS4wMDA2LDEuMDAwMDEsLjk5OTQ1LC45OTg5NywuOTk5NjgsLjk5OTI0LDEuMDAwMzYsLjk5OTQ1LC45OTk0OSwxLDEuMDAwNiwuOTk4OTcsLjk5OTE4LC45OTk2OCwuOTk5MTEsLjk5OTI0LDEsLjk5OTYyLDEuMDE0ODcsMSwxLjAwMDUsLjk5OTczLDEuMDAwMTIsMS4wMDA0MywxLC45OTk5NSwuOTk5OTQsMS4wMDAzNiwuOTk5NDcsMS4wMDAxOSwxLjAwMDYzLDEuMDAwMjUsLjk5OTI0LDEuMDAwMzYsLjk5OTczLDEuMDAwMzYsMS4wMDAyNSwxLjAwMDAxLDEuMDAwMDEsMS4wMDAyNywxLjAwMDEsMS4wMDA2OCwxLjAwMDAxLDEuMDAwNiwxLjAwMDYsMSwxLjAwMDA4LC45OTk1NywuOTk5NzIsLjk5OTQsLjk5OTU0LC45OTk3NSwxLjAwMDUxLDEuMDAwMDEsMS4wMDAxOSwxLjAwMDAxLDEuMDAwMSwuOTk5ODYsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMzgsLjk5OTU0LC45OTk1NCwuOTk5NCwxLjAwMDY2LC45OTk5OSwuOTk5NzcsMS4wMDAyMiwxLjAwMDU0LDEuMDAwMDEsLjk5OTc3LDEuMDAwMjYsLjk5OTc1LDEuMDAwMSwxLjAwMDAxLC45OTk5MywuOTk5NSwuOTk5NTUsMS4wMDAxNiwuOTk5NzgsLjk5OTc0LDEuMDAwMTksMS4wMDAyMiwuOTk5NTUsMS4wMDA1MywuOTk5NzMsMS4wMDA4OSwxLjAwMDA1LC45OTk2NywxLjAwMDQ4LC45OTk3MywxLjAwMDAyLDEuMDAwMzQsLjk5OTczLC45OTk3MywuOTk5NjQsMS4wMDAwNiwxLjAwMDY2LC45OTk0NywuOTk5NzMsLjk4ODk0LC45OTk3MywxLC40NDg5OCwxLC45OTk0NiwxLDEuMDAwMzksMS4wMDA4MiwuOTk5OTEsLjk5OTkxLC45OTk4NSwxLjAwMDIyLDEuMDAwMjMsMS4wMDA2MSwxLjAwMDA2LC45OTk2NiwuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDE5LDEuMDAwOCwxLC45OTkyNCwuOTk5MjQsLjk5OTI0LC45OTk4MywxLjAwMDQ0LC45OTk3MywuOTk5NjQsLjk4MzMyLDEsLjk5OTczLDEsMSwuOTk5NjIsLjk5ODk1LDEuMDAwMTYsLjk5OTc3LDEuMDAwMTYsLjk5OTc3LDEuMDAwMTYsLjk5OTc3LDEuMDAwMDEsMSwxLDEsLjk5OTczLDEsMSwuOTk5NTUsLjk5OTI0LC45OTkyNCwuOTk5MjQsLjk5OTI0LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk3MywuOTk5NzMsLjk5OTcyLDEsMSwxLjAwMjY3LC45OTk5OSwuOTk5OTgsLjk5OTk4LDEsLjk5OTk4LDEuNjY0NzUsMSwuOTk5NzMsLjk5OTczLDEuMDAwMjMsLjk5OTczLDEuMDA0MjMsLjk5OTI1LC45OTk5OSwxLC45OTk5MSwuOTk5ODQsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDQ5LDEsMS4wMDI0NSwxLDEsMSwxLC45NjMyOSwxLDEuMjA5ODUsMS4zOTcxMywxLjAwMDAzLC44MjU0LDEuMDAwMTUsMSwxLjAwMDM1LDEuMDAwMjcsMS4wMDAzMSwxLjAwMDMxLDEuMDAwMDMsMS4wMDAzMSwxLjAwMDMxLC45OTk5OSwxLjAwMDAzLC45OTk5OSwuOTk5OTksMS40MTE0NCwxLjYsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQwNTc5LDEuNDA1NzksMS4zNjYyNSwuOTk5OTksMSwuOTk4NjEsLjk5ODYxLDEsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwuOTUzMTcsLjk5OTk5LC45OTk5OSwuOTk5OTksLjk5OTk5LDEuNDA0ODMsMSwuOTk5NzcsMS4wMDA1NCwxLDEsLjk5OTUzLC45OTk2MiwxLjAwMDQyLC45OTk1LDEsMSwxLDEsMSwxLDEsMSwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXSx0LkhlbHZldGljYUl0YWxpY01ldHJpY3M9e2xpbmVIZWlnaHQ6MS4zNSxsaW5lR2FwOi4yfSx0LkhlbHZldGljYVJlZ3VsYXJGYWN0b3JzPVsuNzYxMTYsMSwxLDEuMDAwNiwxLjAwMDYsMS4wMDAwNiwuOTk5NzMsLjk5OTczLC45OTk4MiwxLjAwMDAxLDEuMDAwNDMsLjk5OTk4LC45OTk5OCwuOTk5NTksMS4wMDAwMywxLjAwMDYsLjk5OTk4LDEuMDAwNiwxLjAwMDYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNiwxLDEuMDAwMDMsMS4wMDAwMywxLjAwMDAzLC45OTk3MywuOTk5ODcsMS4wMDAwMSwxLjAwMDAxLC45OTk3NywuOTk5NzcsMS4wMDAwMSwxLjAwMDI2LDEuMDAwMjIsLjk5OTc3LDEuMDAwNiwxLDEuMDAwMDEsLjk5OTczLC45OTk5OSwuOTk5NzcsMS4wMDAyMiwxLjAwMDAxLDEuMDAwMjIsLjk5OTc3LDEuMDAwMDEsMS4wMDAyNiwuOTk5NzcsMS4wMDAwMSwxLjAwMDE2LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk0OSwuOTk5NzMsLjk5OTk4LC45OTk3MywuOTk5NzMsMSwuOTk5NzMsLjk5OTczLDEuMDAwNiwuOTk5NzMsLjk5OTczLC45OTkyNCwuOTk5MjQsMSwuOTk5MjQsLjk5OTk5LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5OTgsMSwxLjAwMDYsLjk5OTczLDEsLjk5OTc3LDEsMSwxLDEuMDAwMDUsMS4wMDA5LDEuMDAwMDUsMS4wMDAwMywuOTk5OTgsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwOSwuOTk5NzMsLjk5OTk4LDEuMDAwMjUsLjk5OTY4LC45OTk3MywxLjAwMDAzLDEuMDAwMjUsLjYwMjk5LDEuMDAwMjQsMS4wNjQwOSwxLDEsLjk5OTk4LDEsLjk5OTgsMS4wMDA2LC45OTk5OCwxLC45OTkzNiwuOTk5NzMsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMS4wMDAyNiwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLC45OTk3NywxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NzcsLjk5OTc3LDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDAzLDEuMDAwMjIsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDI2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk4MiwxLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDY0MDksMS4wMDAyNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMSwuOTk5NzMsMSwxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywuOTk5NzcsMSwuOTk5NzcsMSwuOTk5NzcsMSwuOTk5NzcsMSwuOTk5NzcsMS4wNDU5NiwuOTk5NzcsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMjIsLjk5OTczLDEuMDAwMjIsLjk5OTczLDEuMDAwMjIsLjk5OTczLDEuMDAwMjIsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTI0LDEuMDAwNiwxLjAwMDYsMS4wMDAxOSwxLjAwMDM0LDEsLjk5OTI0LDEuMDAwMDEsMSwxLC45OTk3MywuOTk5MjQsLjk5OTczLC45OTkyNCwuOTk5NzMsMS4wMjU3MiwuOTk5NzMsMS4wMDAwNSwuOTk5NzMsLjk5OTI0LC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk5OSwuOTk5OCwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMS4wMDAyMiwuOTk5NzMsMSwxLjAwMDE2LC45OTk3NywuOTk5OTgsLjk5OTc3LC45OTk5OCwuOTk5NzcsLjk5OTk4LDEuMDAwMDEsMSwxLjAwMDAxLDEsMS4wMDAwMSwxLDEuMDAwMDEsMSwxLjAwMDI2LDEuMDAwNiwxLjAwMDI2LC44NDUzMywxLjAwMDI2LDEuMDAwNiwuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywxLjAwMDE2LC45OTk3NywxLjAwMDAxLDEsMS4wMDAwMSwxLjAwMDI2LDEsMS4wMDAyNiwxLDEuMDAwMjYsMSwuOTk5MjQsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEsLjk5OTgyLDEuMDAwMjIsMS4wMDAyNiwxLjAwMDAxLDEsMS4wMDAyNiwxLjAwMDYsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5MjgsMSwuOTk5NzcsMS4wMDAxMywxLjAwMDU1LC45OTk0NywuOTk5NDUsLjk5OTQxLC45OTkyNCwxLjAwMDAxLDEuMDAwMDEsMS4wMDA0LC45MTYyMSwxLjAwMDAxLDEuMDAwMjYsLjk5OTc3LDEuMDAwMjIsMS4wMDA2LDEuMDAwMDEsMS4wMDAwNSwuOTk5OTksLjk5OTc3LDEuMDAwMTUsMS4wMDAyMiwuOTk5NzcsMS4wMDAwMSwuOTk5NzMsMS4wMDAyNiwxLjAwMDAxLDEuMDAwMTksMS4wMDAwMSwuOTk5NDYsMSwxLjAwMDYsMS4wMDAwMSwuOTk5NzgsMS4wMDA0NSwuOTk5NzMsLjk5OTI0LDEuMDAwMjMsLjk5OTc4LC45OTk2NiwxLDEuMDAwNjUsMS4wMDA0NSwxLjAwMDE5LC45OTk3MywuOTk5NzMsLjk5OTI0LDEsMSwuOTY0OTksMSwxLjAwMDU1LC45OTk3MywxLjAwMDA4LDEuMDAwMjcsMSwuOTk5NywuOTk5OTUsMS4wMDAyMywuOTk5MzMsMS4wMDAxOSwxLjAwMDE1LDEuMDAwMzEsLjk5OTI0LDEuMDAwMjMsLjk5OTczLDEuMDAwMjMsMS4wMDAzMSwxLjAwMDAxLC45OTkyOCwxLjAwMDI5LDEuMDAwOTIsMS4wMDAzNSwxLjAwMDAxLDEuMDAwNiwxLjAwMDYsMSwuOTk5ODgsLjk5OTc1LDEsMS4wMDA4MiwuOTk1NjEsLjk5OTYsMS4wMDAzNSwxLjAwMDAxLC45OTk2MiwxLjAwMDAxLDEuMDAwOTIsLjk5OTY0LDEuMDAwMDEsLjk5OTYzLC45OTk5OSwxLjAwMDM1LDEuMDAwMzUsMS4wMDA4MiwuOTk5NjIsLjk5OTk5LC45OTk3NywxLjAwMDIyLDEuMDAwMzUsMS4wMDAwMSwuOTk5NzcsMS4wMDAyNiwuOTk5NiwuOTk5NjcsMS4wMDAwMSwxLjAwMDM0LDEuMDAwNzQsMS4wMDA1NCwxLjAwMDUzLDEuMDAwNjMsLjk5OTcxLC45OTk2MiwxLjAwMDM1LC45OTk3NSwuOTk5NzcsLjk5OTczLDEuMDAwNDMsLjk5OTUzLDEuMDAwNywuOTk5MTUsLjk5OTczLDEuMDAwMDgsLjk5ODkyLDEuMDAwNzMsMS4wMDA3MywxLjAwMTE0LC45OTkxNSwxLjAwMDczLC45OTk1NSwuOTk5NzMsMS4wMDA5MiwuOTk5NzMsMSwuOTk5OTgsMSwxLjAwMDMsMSwxLjAwMDQzLDEuMDAwMDEsLjk5OTY5LDEuMDAwMywxLDEuMDAwMzUsMS4wMDAwMSwuOTk5NSwxLDEuMDAwOTIsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA3LC45OTk1LDEsLjk5OTI0LDEuMDAwNiwuOTk5MjQsLjk5OTcyLDEuMDAwNjIsLjk5OTczLDEuMDAxMTQsMS4wMDA3MywxLC45OTk1NSwxLDEsMS4wMDA0NywuOTk5NjgsMS4wMDAxNiwuOTk5NzcsMS4wMDAxNiwuOTk5NzcsMS4wMDAxNiwuOTk5NzcsMS4wMDAwMSwxLDEsMSwuOTk5NzMsMSwxLC45OTk1NSwuOTk5MjQsLjk5OTI0LC45OTkyNCwuOTk5MjQsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTczLC45OTk3MywuOTk5NzIsMSwxLDEuMDAyNjcsLjk5OTk5LC45OTk5OCwuOTk5OTgsMSwuOTk5OTgsMS42NjQ3NSwxLC45OTk3MywuOTk5NzMsMS4wMDAyMywuOTk5NzMsLjk5OTcxLC45OTkyNSwxLjAwMDIzLDEsLjk5OTkxLC45OTk4NCwxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEsMSwxLDEsMSwxLDEsLjk2MzI5LDEsMS4yMDk4NSwxLjM5NzEzLDEuMDAwMDMsLjgyNTQsMS4wMDAxNSwxLDEuMDAwMzUsMS4wMDAyNywxLjAwMDMxLDEuMDAwMzEsLjk5OTE1LDEuMDAwMzEsMS4wMDAzMSwuOTk5OTksMS4wMDAwMywuOTk5OTksLjk5OTk5LDEuNDExNDQsMS42LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MDU3OSwxLjQwNTc5LDEuMzY2MjUsLjk5OTk5LDEsLjk5ODYxLC45OTg2MSwxLDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsLjk1MzE3LC45OTk5OSwuOTk5OTksLjk5OTk5LC45OTk5OSwxLjQwNDgzLDEsLjk5OTc3LDEuMDAwNTQsMSwxLC45OTk1MywuOTk5NjIsMS4wMDA0MiwuOTk5NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLHQuSGVsdmV0aWNhUmVndWxhck1ldHJpY3M9e2xpbmVIZWlnaHQ6MS4yLGxpbmVHYXA6LjJ9fSwoZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkxpYmVyYXRpb25TYW5zUmVndWxhcldpZHRocz10LkxpYmVyYXRpb25TYW5zUmVndWxhck1hcHBpbmc9dC5MaWJlcmF0aW9uU2Fuc0l0YWxpY1dpZHRocz10LkxpYmVyYXRpb25TYW5zSXRhbGljTWFwcGluZz10LkxpYmVyYXRpb25TYW5zQm9sZFdpZHRocz10LkxpYmVyYXRpb25TYW5zQm9sZE1hcHBpbmc9dC5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNXaWR0aHM9dC5MaWJlcmF0aW9uU2Fuc0JvbGRJdGFsaWNNYXBwaW5nPXZvaWQgMCx0LkxpYmVyYXRpb25TYW5zQm9sZFdpZHRocz1bMzY1LDAsMzMzLDI3OCwzMzMsNDc0LDU1Niw1NTYsODg5LDcyMiwyMzgsMzMzLDMzMywzODksNTg0LDI3OCwzMzMsMjc4LDI3OCw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsMzMzLDMzMyw1ODQsNTg0LDU4NCw2MTEsOTc1LDcyMiw3MjIsNzIyLDcyMiw2NjcsNjExLDc3OCw3MjIsMjc4LDU1Niw3MjIsNjExLDgzMyw3MjIsNzc4LDY2Nyw3NzgsNzIyLDY2Nyw2MTEsNzIyLDY2Nyw5NDQsNjY3LDY2Nyw2MTEsMzMzLDI3OCwzMzMsNTg0LDU1NiwzMzMsNTU2LDYxMSw1NTYsNjExLDU1NiwzMzMsNjExLDYxMSwyNzgsMjc4LDU1NiwyNzgsODg5LDYxMSw2MTEsNjExLDYxMSwzODksNTU2LDMzMyw2MTEsNTU2LDc3OCw1NTYsNTU2LDUwMCwzODksMjgwLDM4OSw1ODQsMzMzLDU1Niw1NTYsNTU2LDU1NiwyODAsNTU2LDMzMyw3MzcsMzcwLDU1Niw1ODQsNzM3LDU1Miw0MDAsNTQ5LDMzMywzMzMsMzMzLDU3Niw1NTYsMjc4LDMzMywzMzMsMzY1LDU1Niw4MzQsODM0LDgzNCw2MTEsNzIyLDcyMiw3MjIsNzIyLDcyMiw3MjIsMWUzLDcyMiw2NjcsNjY3LDY2Nyw2NjcsMjc4LDI3OCwyNzgsMjc4LDcyMiw3MjIsNzc4LDc3OCw3NzgsNzc4LDc3OCw1ODQsNzc4LDcyMiw3MjIsNzIyLDcyMiw2NjcsNjY3LDYxMSw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw4ODksNTU2LDU1Niw1NTYsNTU2LDU1NiwyNzgsMjc4LDI3OCwyNzgsNjExLDYxMSw2MTEsNjExLDYxMSw2MTEsNjExLDU0OSw2MTEsNjExLDYxMSw2MTEsNjExLDU1Niw2MTEsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDcxOSw3MjIsNjExLDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw3NzgsNjExLDc3OCw2MTEsNzc4LDYxMSw3NzgsNjExLDcyMiw2MTEsNzIyLDYxMSwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsNzg1LDU1Niw1NTYsMjc4LDcyMiw1NTYsNTU2LDYxMSwyNzgsNjExLDI3OCw2MTEsMzg1LDYxMSw0NzksNjExLDI3OCw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw3MDgsNzIzLDYxMSw3NzgsNjExLDc3OCw2MTEsNzc4LDYxMSwxZTMsOTQ0LDcyMiwzODksNzIyLDM4OSw3MjIsMzg5LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjExLDMzMyw2MTEsNDc5LDYxMSwzMzMsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsOTQ0LDc3OCw2NjcsNTU2LDY2Nyw2MTEsNTAwLDYxMSw1MDAsNjExLDUwMCwyNzgsNTU2LDcyMiw1NTYsMWUzLDg4OSw3NzgsNjExLDY2Nyw1NTYsNjExLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsNDY1LDcyMiwzMzMsODUzLDkwNiw0NzQsODI1LDkyNyw4MzgsMjc4LDcyMiw3MjIsNjAxLDcxOSw2NjcsNjExLDcyMiw3NzgsMjc4LDcyMiw2NjcsODMzLDcyMiw2NDQsNzc4LDcyMiw2NjcsNjAwLDYxMSw2NjcsODIxLDY2Nyw4MDksODAyLDI3OCw2NjcsNjE1LDQ1MSw2MTEsMjc4LDU4Miw2MTUsNjEwLDU1Niw2MDYsNDc1LDQ2MCw2MTEsNTQxLDI3OCw1NTgsNTU2LDYxMiw1NTYsNDQ1LDYxMSw3NjYsNjE5LDUyMCw2ODQsNDQ2LDU4Miw3MTUsNTc2LDc1Myw4NDUsMjc4LDU4Miw2MTEsNTgyLDg0NSw2NjcsNjY5LDg4NSw1NjcsNzExLDY2NywyNzgsMjc2LDU1NiwxMDk0LDEwNjIsODc1LDYxMCw3MjIsNjIyLDcxOSw3MjIsNzE5LDcyMiw1NjcsNzEyLDY2Nyw5MDQsNjI2LDcxOSw3MTksNjEwLDcwMiw4MzMsNzIyLDc3OCw3MTksNjY3LDcyMiw2MTEsNjIyLDg1NCw2NjcsNzMwLDcwMywxMDA1LDEwMTksODcwLDk3OSw3MTksNzExLDEwMzEsNzE5LDU1Niw2MTgsNjE1LDQxNyw2MzUsNTU2LDcwOSw0OTcsNjE1LDYxNSw1MDAsNjM1LDc0MCw2MDQsNjExLDYwNCw2MTEsNTU2LDQ5MCw1NTYsODc1LDU1Niw2MTUsNTgxLDgzMyw4NDQsNzI5LDg1NCw2MTUsNTUyLDg1NCw1ODMsNTU2LDU1Niw2MTEsNDE3LDU1Miw1NTYsMjc4LDI4MSwyNzgsOTY5LDkwNiw2MTEsNTAwLDYxNSw1NTYsNjA0LDc3OCw2MTEsNDg3LDQ0Nyw5NDQsNzc4LDk0NCw3NzgsOTQ0LDc3OCw2NjcsNTU2LDMzMywzMzMsNTU2LDFlMywxZTMsNTUyLDI3OCwyNzgsMjc4LDI3OCw1MDAsNTAwLDUwMCw1NTYsNTU2LDM1MCwxZTMsMWUzLDI0MCw0NzksMzMzLDMzMyw2MDQsMzMzLDE2NywzOTYsNTU2LDU1NiwxMDk0LDU1Niw4ODUsNDg5LDExMTUsMWUzLDc2OCw2MDAsODM0LDgzNCw4MzQsODM0LDFlMyw1MDAsMWUzLDUwMCwxZTMsNTAwLDUwMCw0OTQsNjEyLDgyMyw3MTMsNTg0LDU0OSw3MTMsOTc5LDcyMiwyNzQsNTQ5LDU0OSw1ODMsNTQ5LDU0OSw2MDQsNTg0LDYwNCw2MDQsNzA4LDYyNSw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MjksNjA0LDYwNCwzNTQsMzU0LDFlMyw5OTAsOTkwLDk5MCw5OTAsNDk0LDYwNCw2MDQsNjA0LDYwNCwzNTQsMTAyMSwxMDUyLDkxNyw3NTAsNzUwLDUzMSw2NTYsNTk0LDUxMCw1MDAsNzUwLDc1MCw2MTEsNjExLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMjIyLDIyMiwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzXSx0LkxpYmVyYXRpb25TYW5zQm9sZE1hcHBpbmc9Wy0xLC0xLC0xLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk2LDk3LDk4LDk5LDEwMCwxMDEsMTAyLDEwMywxMDQsMTA1LDEwNiwxMDcsMTA4LDEwOSwxMTAsMTExLDExMiwxMTMsMTE0LDExNSwxMTYsMTE3LDExOCwxMTksMTIwLDEyMSwxMjIsMTIzLDEyNCwxMjUsMTI2LDE2MSwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LDE3MCwxNzEsMTcyLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDE4NiwxODcsMTg4LDE4OSwxOTAsMTkxLDE5MiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywyMDgsMjA5LDIxMCwyMTEsMjEyLDIxMywyMTQsMjE1LDIxNiwyMTcsMjE4LDIxOSwyMjAsMjIxLDIyMiwyMjMsMjI0LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LDI0MCwyNDEsMjQyLDI0MywyNDQsMjQ1LDI0NiwyNDcsMjQ4LDI0OSwyNTAsMjUxLDI1MiwyNTMsMjU0LDI1NSwyNTYsMjU3LDI1OCwyNTksMjYwLDI2MSwyNjIsMjYzLDI2NCwyNjUsMjY2LDI2NywyNjgsMjY5LDI3MCwyNzEsMjcyLDI3MywyNzQsMjc1LDI3NiwyNzcsMjc4LDI3OSwyODAsMjgxLDI4MiwyODMsMjg0LDI4NSwyODYsMjg3LDI4OCwyODksMjkwLDI5MSwyOTIsMjkzLDI5NCwyOTUsMjk2LDI5NywyOTgsMjk5LDMwMCwzMDEsMzAyLDMwMywzMDQsMzA1LDMwNiwzMDcsMzA4LDMwOSwzMTAsMzExLDMxMiwzMTMsMzE0LDMxNSwzMTYsMzE3LDMxOCwzMTksMzIwLDMyMSwzMjIsMzIzLDMyNCwzMjUsMzI2LDMyNywzMjgsMzI5LDMzMCwzMzEsMzMyLDMzMywzMzQsMzM1LDMzNiwzMzcsMzM4LDMzOSwzNDAsMzQxLDM0MiwzNDMsMzQ0LDM0NSwzNDYsMzQ3LDM0OCwzNDksMzUwLDM1MSwzNTIsMzUzLDM1NCwzNTUsMzU2LDM1NywzNTgsMzU5LDM2MCwzNjEsMzYyLDM2MywzNjQsMzY1LDM2NiwzNjcsMzY4LDM2OSwzNzAsMzcxLDM3MiwzNzMsMzc0LDM3NSwzNzYsMzc3LDM3OCwzNzksMzgwLDM4MSwzODIsMzgzLDQwMiw1MDYsNTA3LDUwOCw1MDksNTEwLDUxMSw1MzYsNTM3LDUzOCw1MzksNzEwLDcxMSw3MTMsNzI4LDcyOSw3MzAsNzMxLDczMiw3MzMsOTAwLDkwMSw5MDIsOTAzLDkwNCw5MDUsOTA2LDkwOCw5MTAsOTExLDkxMiw5MTMsOTE0LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5MjgsOTI5LDkzMSw5MzIsOTMzLDkzNCw5MzUsOTM2LDkzNyw5MzgsOTM5LDk0MCw5NDEsOTQyLDk0Myw5NDQsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjIsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LDk3MCw5NzEsOTcyLDk3Myw5NzQsMTAyNCwxMDI1LDEwMjYsMTAyNywxMDI4LDEwMjksMTAzMCwxMDMxLDEwMzIsMTAzMywxMDM0LDEwMzUsMTAzNiwxMDM3LDEwMzgsMTAzOSwxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLDExMDQsMTEwNSwxMTA2LDExMDcsMTEwOCwxMTA5LDExMTAsMTExMSwxMTEyLDExMTMsMTExNCwxMTE1LDExMTYsMTExNywxMTE4LDExMTksMTEzOCwxMTM5LDExNjgsMTE2OSw3ODA4LDc4MDksNzgxMCw3ODExLDc4MTIsNzgxMyw3OTIyLDc5MjMsODIwOCw4MjA5LDgyMTEsODIxMiw4MjEzLDgyMTUsODIxNiw4MjE3LDgyMTgsODIxOSw4MjIwLDgyMjEsODIyMiw4MjI0LDgyMjUsODIyNiw4MjMwLDgyNDAsODI0Miw4MjQzLDgyNDksODI1MCw4MjUyLDgyNTQsODI2MCw4MzE5LDgzNTUsODM1Niw4MzU5LDgzNjQsODQ1Myw4NDY3LDg0NzAsODQ4Miw4NDg2LDg0OTQsODUzOSw4NTQwLDg1NDEsODU0Miw4NTkyLDg1OTMsODU5NCw4NTk1LDg1OTYsODU5Nyw4NjE2LDg3MDYsODcxMCw4NzE5LDg3MjEsODcyMiw4NzMwLDg3MzQsODczNSw4NzQ1LDg3NDcsODc3Niw4ODAwLDg4MDEsODgwNCw4ODA1LDg5NjIsODk3Niw4OTkyLDg5OTMsOTQ3Miw5NDc0LDk0ODQsOTQ4OCw5NDkyLDk0OTYsOTUwMCw5NTA4LDk1MTYsOTUyNCw5NTMyLDk1NTIsOTU1Myw5NTU0LDk1NTUsOTU1Niw5NTU3LDk1NTgsOTU1OSw5NTYwLDk1NjEsOTU2Miw5NTYzLDk1NjQsOTU2NSw5NTY2LDk1NjcsOTU2OCw5NTY5LDk1NzAsOTU3MSw5NTcyLDk1NzMsOTU3NCw5NTc1LDk1NzYsOTU3Nyw5NTc4LDk1NzksOTU4MCw5NjAwLDk2MDQsOTYwOCw5NjEyLDk2MTYsOTYxNyw5NjE4LDk2MTksOTYzMiw5NjMzLDk2NDIsOTY0Myw5NjQ0LDk2NTAsOTY1OCw5NjYwLDk2NjgsOTY3NCw5Njc1LDk2NzksOTY4OCw5Njg5LDk3MDIsOTc4Niw5Nzg3LDk3ODgsOTc5Miw5Nzk0LDk4MjQsOTgyNyw5ODI5LDk4MzAsOTgzNCw5ODM1LDk4MzYsNjE0NDEsNjE0NDIsNjE0NDUsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTFdLHQuTGliZXJhdGlvblNhbnNCb2xkSXRhbGljV2lkdGhzPVszNjUsMCwzMzMsMjc4LDMzMyw0NzQsNTU2LDU1Niw4ODksNzIyLDIzOCwzMzMsMzMzLDM4OSw1ODQsMjc4LDMzMywyNzgsMjc4LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1NiwzMzMsMzMzLDU4NCw1ODQsNTg0LDYxMSw5NzUsNzIyLDcyMiw3MjIsNzIyLDY2Nyw2MTEsNzc4LDcyMiwyNzgsNTU2LDcyMiw2MTEsODMzLDcyMiw3NzgsNjY3LDc3OCw3MjIsNjY3LDYxMSw3MjIsNjY3LDk0NCw2NjcsNjY3LDYxMSwzMzMsMjc4LDMzMyw1ODQsNTU2LDMzMyw1NTYsNjExLDU1Niw2MTEsNTU2LDMzMyw2MTEsNjExLDI3OCwyNzgsNTU2LDI3OCw4ODksNjExLDYxMSw2MTEsNjExLDM4OSw1NTYsMzMzLDYxMSw1NTYsNzc4LDU1Niw1NTYsNTAwLDM4OSwyODAsMzg5LDU4NCwzMzMsNTU2LDU1Niw1NTYsNTU2LDI4MCw1NTYsMzMzLDczNywzNzAsNTU2LDU4NCw3MzcsNTUyLDQwMCw1NDksMzMzLDMzMywzMzMsNTc2LDU1NiwyNzgsMzMzLDMzMywzNjUsNTU2LDgzNCw4MzQsODM0LDYxMSw3MjIsNzIyLDcyMiw3MjIsNzIyLDcyMiwxZTMsNzIyLDY2Nyw2NjcsNjY3LDY2NywyNzgsMjc4LDI3OCwyNzgsNzIyLDcyMiw3NzgsNzc4LDc3OCw3NzgsNzc4LDU4NCw3NzgsNzIyLDcyMiw3MjIsNzIyLDY2Nyw2NjcsNjExLDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDg4OSw1NTYsNTU2LDU1Niw1NTYsNTU2LDI3OCwyNzgsMjc4LDI3OCw2MTEsNjExLDYxMSw2MTEsNjExLDYxMSw2MTEsNTQ5LDYxMSw2MTEsNjExLDYxMSw2MTEsNTU2LDYxMSw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNzQwLDcyMiw2MTEsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDc3OCw2MTEsNzc4LDYxMSw3NzgsNjExLDc3OCw2MTEsNzIyLDYxMSw3MjIsNjExLDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCw3ODIsNTU2LDU1NiwyNzgsNzIyLDU1Niw1NTYsNjExLDI3OCw2MTEsMjc4LDYxMSwzOTYsNjExLDQ3OSw2MTEsMjc4LDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDcwOCw3MjMsNjExLDc3OCw2MTEsNzc4LDYxMSw3NzgsNjExLDFlMyw5NDQsNzIyLDM4OSw3MjIsMzg5LDcyMiwzODksNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2MTEsMzMzLDYxMSw0NzksNjExLDMzMyw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw5NDQsNzc4LDY2Nyw1NTYsNjY3LDYxMSw1MDAsNjExLDUwMCw2MTEsNTAwLDI3OCw1NTYsNzIyLDU1NiwxZTMsODg5LDc3OCw2MTEsNjY3LDU1Niw2MTEsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsNzIyLDMzMyw4NTQsOTA2LDQ3Myw4NDQsOTMwLDg0NywyNzgsNzIyLDcyMiw2MTAsNjcxLDY2Nyw2MTEsNzIyLDc3OCwyNzgsNzIyLDY2Nyw4MzMsNzIyLDY1Nyw3NzgsNzE4LDY2Nyw1OTAsNjExLDY2Nyw4MjIsNjY3LDgyOSw3ODEsMjc4LDY2Nyw2MjAsNDc5LDYxMSwyNzgsNTkxLDYyMCw2MjEsNTU2LDYxMCw0NzksNDkyLDYxMSw1NTgsMjc4LDU2Niw1NTYsNjAzLDU1Niw0NTAsNjExLDcxMiw2MDUsNTMyLDY2NCw0MDksNTkxLDcwNCw1NzgsNzczLDgzNCwyNzgsNTkxLDYxMSw1OTEsODM0LDY2Nyw2NjcsODg2LDYxNCw3MTksNjY3LDI3OCwyNzgsNTU2LDEwOTQsMTA0Miw4NTQsNjIyLDcxOSw2NzcsNzE5LDcyMiw3MDgsNzIyLDYxNCw3MjIsNjY3LDkyNyw2NDMsNzE5LDcxOSw2MTUsNjg3LDgzMyw3MjIsNzc4LDcxOSw2NjcsNzIyLDYxMSw2NzcsNzgxLDY2Nyw3MjksNzA4LDk3OSw5ODksODU0LDFlMyw3MDgsNzE5LDEwNDIsNzI5LDU1Niw2MTksNjA0LDUzNCw2MTgsNTU2LDczNiw1MTAsNjExLDYxMSw1MDcsNjIyLDc0MCw2MDQsNjExLDYxMSw2MTEsNTU2LDg4OSw1NTYsODg1LDU1Niw2NDYsNTgzLDg4OSw5MzUsNzA3LDg1NCw1OTQsNTUyLDg2NSw1ODksNTU2LDU1Niw2MTEsNDY5LDU2Myw1NTYsMjc4LDI3OCwyNzgsOTY5LDkwNiw2MTEsNTA3LDYxOSw1NTYsNjExLDc3OCw2MTEsNTc1LDQ2Nyw5NDQsNzc4LDk0NCw3NzgsOTQ0LDc3OCw2NjcsNTU2LDMzMywzMzMsNTU2LDFlMywxZTMsNTUyLDI3OCwyNzgsMjc4LDI3OCw1MDAsNTAwLDUwMCw1NTYsNTU2LDM1MCwxZTMsMWUzLDI0MCw0NzksMzMzLDMzMyw2MDQsMzMzLDE2NywzOTYsNTU2LDU1NiwxMTA0LDU1Niw4ODUsNTE2LDExNDYsMWUzLDc2OCw2MDAsODM0LDgzNCw4MzQsODM0LDk5OSw1MDAsMWUzLDUwMCwxZTMsNTAwLDUwMCw0OTQsNjEyLDgyMyw3MTMsNTg0LDU0OSw3MTMsOTc5LDcyMiwyNzQsNTQ5LDU0OSw1ODMsNTQ5LDU0OSw2MDQsNTg0LDYwNCw2MDQsNzA4LDYyNSw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MjksNjA0LDYwNCwzNTQsMzU0LDFlMyw5OTAsOTkwLDk5MCw5OTAsNDk0LDYwNCw2MDQsNjA0LDYwNCwzNTQsMTAyMSwxMDUyLDkxNyw3NTAsNzUwLDUzMSw2NTYsNTk0LDUxMCw1MDAsNzUwLDc1MCw2MTEsNjExLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMjIyLDIyMiwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzXSx0LkxpYmVyYXRpb25TYW5zQm9sZEl0YWxpY01hcHBpbmc9Wy0xLC0xLC0xLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk2LDk3LDk4LDk5LDEwMCwxMDEsMTAyLDEwMywxMDQsMTA1LDEwNiwxMDcsMTA4LDEwOSwxMTAsMTExLDExMiwxMTMsMTE0LDExNSwxMTYsMTE3LDExOCwxMTksMTIwLDEyMSwxMjIsMTIzLDEyNCwxMjUsMTI2LDE2MSwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LDE3MCwxNzEsMTcyLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDE4NiwxODcsMTg4LDE4OSwxOTAsMTkxLDE5MiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywyMDgsMjA5LDIxMCwyMTEsMjEyLDIxMywyMTQsMjE1LDIxNiwyMTcsMjE4LDIxOSwyMjAsMjIxLDIyMiwyMjMsMjI0LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LDI0MCwyNDEsMjQyLDI0MywyNDQsMjQ1LDI0NiwyNDcsMjQ4LDI0OSwyNTAsMjUxLDI1MiwyNTMsMjU0LDI1NSwyNTYsMjU3LDI1OCwyNTksMjYwLDI2MSwyNjIsMjYzLDI2NCwyNjUsMjY2LDI2NywyNjgsMjY5LDI3MCwyNzEsMjcyLDI3MywyNzQsMjc1LDI3NiwyNzcsMjc4LDI3OSwyODAsMjgxLDI4MiwyODMsMjg0LDI4NSwyODYsMjg3LDI4OCwyODksMjkwLDI5MSwyOTIsMjkzLDI5NCwyOTUsMjk2LDI5NywyOTgsMjk5LDMwMCwzMDEsMzAyLDMwMywzMDQsMzA1LDMwNiwzMDcsMzA4LDMwOSwzMTAsMzExLDMxMiwzMTMsMzE0LDMxNSwzMTYsMzE3LDMxOCwzMTksMzIwLDMyMSwzMjIsMzIzLDMyNCwzMjUsMzI2LDMyNywzMjgsMzI5LDMzMCwzMzEsMzMyLDMzMywzMzQsMzM1LDMzNiwzMzcsMzM4LDMzOSwzNDAsMzQxLDM0MiwzNDMsMzQ0LDM0NSwzNDYsMzQ3LDM0OCwzNDksMzUwLDM1MSwzNTIsMzUzLDM1NCwzNTUsMzU2LDM1NywzNTgsMzU5LDM2MCwzNjEsMzYyLDM2MywzNjQsMzY1LDM2NiwzNjcsMzY4LDM2OSwzNzAsMzcxLDM3MiwzNzMsMzc0LDM3NSwzNzYsMzc3LDM3OCwzNzksMzgwLDM4MSwzODIsMzgzLDQwMiw1MDYsNTA3LDUwOCw1MDksNTEwLDUxMSw1MzYsNTM3LDUzOCw1MzksNzEwLDcxMSw3MTMsNzI4LDcyOSw3MzAsNzMxLDczMiw3MzMsOTAwLDkwMSw5MDIsOTAzLDkwNCw5MDUsOTA2LDkwOCw5MTAsOTExLDkxMiw5MTMsOTE0LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5MjgsOTI5LDkzMSw5MzIsOTMzLDkzNCw5MzUsOTM2LDkzNyw5MzgsOTM5LDk0MCw5NDEsOTQyLDk0Myw5NDQsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjIsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LDk3MCw5NzEsOTcyLDk3Myw5NzQsMTAyNCwxMDI1LDEwMjYsMTAyNywxMDI4LDEwMjksMTAzMCwxMDMxLDEwMzIsMTAzMywxMDM0LDEwMzUsMTAzNiwxMDM3LDEwMzgsMTAzOSwxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLDExMDQsMTEwNSwxMTA2LDExMDcsMTEwOCwxMTA5LDExMTAsMTExMSwxMTEyLDExMTMsMTExNCwxMTE1LDExMTYsMTExNywxMTE4LDExMTksMTEzOCwxMTM5LDExNjgsMTE2OSw3ODA4LDc4MDksNzgxMCw3ODExLDc4MTIsNzgxMyw3OTIyLDc5MjMsODIwOCw4MjA5LDgyMTEsODIxMiw4MjEzLDgyMTUsODIxNiw4MjE3LDgyMTgsODIxOSw4MjIwLDgyMjEsODIyMiw4MjI0LDgyMjUsODIyNiw4MjMwLDgyNDAsODI0Miw4MjQzLDgyNDksODI1MCw4MjUyLDgyNTQsODI2MCw4MzE5LDgzNTUsODM1Niw4MzU5LDgzNjQsODQ1Myw4NDY3LDg0NzAsODQ4Miw4NDg2LDg0OTQsODUzOSw4NTQwLDg1NDEsODU0Miw4NTkyLDg1OTMsODU5NCw4NTk1LDg1OTYsODU5Nyw4NjE2LDg3MDYsODcxMCw4NzE5LDg3MjEsODcyMiw4NzMwLDg3MzQsODczNSw4NzQ1LDg3NDcsODc3Niw4ODAwLDg4MDEsODgwNCw4ODA1LDg5NjIsODk3Niw4OTkyLDg5OTMsOTQ3Miw5NDc0LDk0ODQsOTQ4OCw5NDkyLDk0OTYsOTUwMCw5NTA4LDk1MTYsOTUyNCw5NTMyLDk1NTIsOTU1Myw5NTU0LDk1NTUsOTU1Niw5NTU3LDk1NTgsOTU1OSw5NTYwLDk1NjEsOTU2Miw5NTYzLDk1NjQsOTU2NSw5NTY2LDk1NjcsOTU2OCw5NTY5LDk1NzAsOTU3MSw5NTcyLDk1NzMsOTU3NCw5NTc1LDk1NzYsOTU3Nyw5NTc4LDk1NzksOTU4MCw5NjAwLDk2MDQsOTYwOCw5NjEyLDk2MTYsOTYxNyw5NjE4LDk2MTksOTYzMiw5NjMzLDk2NDIsOTY0Myw5NjQ0LDk2NTAsOTY1OCw5NjYwLDk2NjgsOTY3NCw5Njc1LDk2NzksOTY4OCw5Njg5LDk3MDIsOTc4Niw5Nzg3LDk3ODgsOTc5Miw5Nzk0LDk4MjQsOTgyNyw5ODI5LDk4MzAsOTgzNCw5ODM1LDk4MzYsNjE0NDEsNjE0NDIsNjE0NDUsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTFdLHQuTGliZXJhdGlvblNhbnNJdGFsaWNXaWR0aHM9WzM2NSwwLDMzMywyNzgsMjc4LDM1NSw1NTYsNTU2LDg4OSw2NjcsMTkxLDMzMywzMzMsMzg5LDU4NCwyNzgsMzMzLDI3OCwyNzgsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDI3OCwyNzgsNTg0LDU4NCw1ODQsNTU2LDEwMTUsNjY3LDY2Nyw3MjIsNzIyLDY2Nyw2MTEsNzc4LDcyMiwyNzgsNTAwLDY2Nyw1NTYsODMzLDcyMiw3NzgsNjY3LDc3OCw3MjIsNjY3LDYxMSw3MjIsNjY3LDk0NCw2NjcsNjY3LDYxMSwyNzgsMjc4LDI3OCw0NjksNTU2LDMzMyw1NTYsNTU2LDUwMCw1NTYsNTU2LDI3OCw1NTYsNTU2LDIyMiwyMjIsNTAwLDIyMiw4MzMsNTU2LDU1Niw1NTYsNTU2LDMzMyw1MDAsMjc4LDU1Niw1MDAsNzIyLDUwMCw1MDAsNTAwLDMzNCwyNjAsMzM0LDU4NCwzMzMsNTU2LDU1Niw1NTYsNTU2LDI2MCw1NTYsMzMzLDczNywzNzAsNTU2LDU4NCw3MzcsNTUyLDQwMCw1NDksMzMzLDMzMywzMzMsNTc2LDUzNywyNzgsMzMzLDMzMywzNjUsNTU2LDgzNCw4MzQsODM0LDYxMSw2NjcsNjY3LDY2Nyw2NjcsNjY3LDY2NywxZTMsNzIyLDY2Nyw2NjcsNjY3LDY2NywyNzgsMjc4LDI3OCwyNzgsNzIyLDcyMiw3NzgsNzc4LDc3OCw3NzgsNzc4LDU4NCw3NzgsNzIyLDcyMiw3MjIsNzIyLDY2Nyw2NjcsNjExLDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDg4OSw1MDAsNTU2LDU1Niw1NTYsNTU2LDI3OCwyNzgsMjc4LDI3OCw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTQ5LDYxMSw1NTYsNTU2LDU1Niw1NTYsNTAwLDU1Niw1MDAsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNzIyLDUwMCw3MjIsNTAwLDcyMiw1MDAsNzIyLDUwMCw3MjIsNjI1LDcyMiw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDc3OCw1NTYsNzc4LDU1Niw3NzgsNTU2LDc3OCw1NTYsNzIyLDU1Niw3MjIsNTU2LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyMjIsMjc4LDI3OCw3MzMsNDQ0LDUwMCwyMjIsNjY3LDUwMCw1MDAsNTU2LDIyMiw1NTYsMjIyLDU1NiwyODEsNTU2LDQwMCw1NTYsMjIyLDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDYxNSw3MjMsNTU2LDc3OCw1NTYsNzc4LDU1Niw3NzgsNTU2LDFlMyw5NDQsNzIyLDMzMyw3MjIsMzMzLDcyMiwzMzMsNjY3LDUwMCw2NjcsNTAwLDY2Nyw1MDAsNjY3LDUwMCw2MTEsMjc4LDYxMSwzNTQsNjExLDI3OCw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw5NDQsNzIyLDY2Nyw1MDAsNjY3LDYxMSw1MDAsNjExLDUwMCw2MTEsNTAwLDIyMiw1NTYsNjY3LDU1NiwxZTMsODg5LDc3OCw2MTEsNjY3LDUwMCw2MTEsMjc4LDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsNjY3LDI3OCw3ODksODQ2LDM4OSw3OTQsODY1LDc3NSwyMjIsNjY3LDY2Nyw1NzAsNjcxLDY2Nyw2MTEsNzIyLDc3OCwyNzgsNjY3LDY2Nyw4MzMsNzIyLDY0OCw3NzgsNzI1LDY2Nyw2MDAsNjExLDY2Nyw4MzcsNjY3LDgzMSw3NjEsMjc4LDY2Nyw1NzAsNDM5LDU1NSwyMjIsNTUwLDU3MCw1NzEsNTAwLDU1Niw0MzksNDYzLDU1NSw1NDIsMjIyLDUwMCw0OTIsNTQ4LDUwMCw0NDcsNTU2LDY3MCw1NzMsNDg2LDYwMywzNzQsNTUwLDY1Miw1NDYsNzI4LDc3OSwyMjIsNTUwLDU1Niw1NTAsNzc5LDY2Nyw2NjcsODQzLDU0NCw3MDgsNjY3LDI3OCwyNzgsNTAwLDEwNjYsOTgyLDg0NCw1ODksNzE1LDYzOSw3MjQsNjY3LDY1MSw2NjcsNTQ0LDcwNCw2NjcsOTE3LDYxNCw3MTUsNzE1LDU4OSw2ODYsODMzLDcyMiw3NzgsNzI1LDY2Nyw3MjIsNjExLDYzOSw3OTUsNjY3LDcyNyw2NzMsOTIwLDkyMyw4MDUsODg2LDY1MSw2OTQsMTAyMiw2ODIsNTU2LDU2Miw1MjIsNDkzLDU1Myw1NTYsNjg4LDQ2NSw1NTYsNTU2LDQ3Miw1NjQsNjg2LDU1MCw1NTYsNTU2LDU1Niw1MDAsODMzLDUwMCw4MzUsNTAwLDU3Miw1MTgsODMwLDg1MSw2MjEsNzM2LDUyNiw0OTIsNzUyLDUzNCw1NTYsNTU2LDU1NiwzNzgsNDk2LDUwMCwyMjIsMjIyLDIyMiw5MTAsODI4LDU1Niw0NzIsNTY1LDUwMCw1NTYsNzc4LDU1Niw0OTIsMzM5LDk0NCw3MjIsOTQ0LDcyMiw5NDQsNzIyLDY2Nyw1MDAsMzMzLDMzMyw1NTYsMWUzLDFlMyw1NTIsMjIyLDIyMiwyMjIsMjIyLDMzMywzMzMsMzMzLDU1Niw1NTYsMzUwLDFlMywxZTMsMTg4LDM1NCwzMzMsMzMzLDUwMCwzMzMsMTY3LDM2NSw1NTYsNTU2LDEwOTQsNTU2LDg4NSwzMjMsMTA4MywxZTMsNzY4LDYwMCw4MzQsODM0LDgzNCw4MzQsMWUzLDUwMCw5OTgsNTAwLDFlMyw1MDAsNTAwLDQ5NCw2MTIsODIzLDcxMyw1ODQsNTQ5LDcxMyw5NzksNzE5LDI3NCw1NDksNTQ5LDU4NCw1NDksNTQ5LDYwNCw1ODQsNjA0LDYwNCw3MDgsNjI1LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcyOSw2MDQsNjA0LDM1NCwzNTQsMWUzLDk5MCw5OTAsOTkwLDk5MCw0OTQsNjA0LDYwNCw2MDQsNjA0LDM1NCwxMDIxLDEwNTIsOTE3LDc1MCw3NTAsNTMxLDY1Niw1OTQsNTEwLDUwMCw3NTAsNzUwLDUwMCw1MDAsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywyMjIsMjIyLDI5NCwyOTQsMzI0LDMyNCwzMTYsMzI4LDM5OCwyODVdLHQuTGliZXJhdGlvblNhbnNJdGFsaWNNYXBwaW5nPVstMSwtMSwtMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5Niw5Nyw5OCw5OSwxMDAsMTAxLDEwMiwxMDMsMTA0LDEwNSwxMDYsMTA3LDEwOCwxMDksMTEwLDExMSwxMTIsMTEzLDExNCwxMTUsMTE2LDExNywxMTgsMTE5LDEyMCwxMjEsMTIyLDEyMywxMjQsMTI1LDEyNiwxNjEsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwxNzAsMTcxLDE3MiwxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsMjA4LDIwOSwyMTAsMjExLDIxMiwyMTMsMjE0LDIxNSwyMTYsMjE3LDIxOCwyMTksMjIwLDIyMSwyMjIsMjIzLDIyNCwyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSwyNDAsMjQxLDI0MiwyNDMsMjQ0LDI0NSwyNDYsMjQ3LDI0OCwyNDksMjUwLDI1MSwyNTIsMjUzLDI1NCwyNTUsMjU2LDI1NywyNTgsMjU5LDI2MCwyNjEsMjYyLDI2MywyNjQsMjY1LDI2NiwyNjcsMjY4LDI2OSwyNzAsMjcxLDI3MiwyNzMsMjc0LDI3NSwyNzYsMjc3LDI3OCwyNzksMjgwLDI4MSwyODIsMjgzLDI4NCwyODUsMjg2LDI4NywyODgsMjg5LDI5MCwyOTEsMjkyLDI5MywyOTQsMjk1LDI5NiwyOTcsMjk4LDI5OSwzMDAsMzAxLDMwMiwzMDMsMzA0LDMwNSwzMDYsMzA3LDMwOCwzMDksMzEwLDMxMSwzMTIsMzEzLDMxNCwzMTUsMzE2LDMxNywzMTgsMzE5LDMyMCwzMjEsMzIyLDMyMywzMjQsMzI1LDMyNiwzMjcsMzI4LDMyOSwzMzAsMzMxLDMzMiwzMzMsMzM0LDMzNSwzMzYsMzM3LDMzOCwzMzksMzQwLDM0MSwzNDIsMzQzLDM0NCwzNDUsMzQ2LDM0NywzNDgsMzQ5LDM1MCwzNTEsMzUyLDM1MywzNTQsMzU1LDM1NiwzNTcsMzU4LDM1OSwzNjAsMzYxLDM2MiwzNjMsMzY0LDM2NSwzNjYsMzY3LDM2OCwzNjksMzcwLDM3MSwzNzIsMzczLDM3NCwzNzUsMzc2LDM3NywzNzgsMzc5LDM4MCwzODEsMzgyLDM4Myw0MDIsNTA2LDUwNyw1MDgsNTA5LDUxMCw1MTEsNTM2LDUzNyw1MzgsNTM5LDcxMCw3MTEsNzEzLDcyOCw3MjksNzMwLDczMSw3MzIsNzMzLDkwMCw5MDEsOTAyLDkwMyw5MDQsOTA1LDkwNiw5MDgsOTEwLDkxMSw5MTIsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsOTM4LDkzOSw5NDAsOTQxLDk0Miw5NDMsOTQ0LDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYyLDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSw5NzAsOTcxLDk3Miw5NzMsOTc0LDEwMjQsMTAyNSwxMDI2LDEwMjcsMTAyOCwxMDI5LDEwMzAsMTAzMSwxMDMyLDEwMzMsMTAzNCwxMDM1LDEwMzYsMTAzNywxMDM4LDEwMzksMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwMywxMTA0LDExMDUsMTEwNiwxMTA3LDExMDgsMTEwOSwxMTEwLDExMTEsMTExMiwxMTEzLDExMTQsMTExNSwxMTE2LDExMTcsMTExOCwxMTE5LDExMzgsMTEzOSwxMTY4LDExNjksNzgwOCw3ODA5LDc4MTAsNzgxMSw3ODEyLDc4MTMsNzkyMiw3OTIzLDgyMDgsODIwOSw4MjExLDgyMTIsODIxMyw4MjE1LDgyMTYsODIxNyw4MjE4LDgyMTksODIyMCw4MjIxLDgyMjIsODIyNCw4MjI1LDgyMjYsODIzMCw4MjQwLDgyNDIsODI0Myw4MjQ5LDgyNTAsODI1Miw4MjU0LDgyNjAsODMxOSw4MzU1LDgzNTYsODM1OSw4MzY0LDg0NTMsODQ2Nyw4NDcwLDg0ODIsODQ4Niw4NDk0LDg1MzksODU0MCw4NTQxLDg1NDIsODU5Miw4NTkzLDg1OTQsODU5NSw4NTk2LDg1OTcsODYxNiw4NzA2LDg3MTAsODcxOSw4NzIxLDg3MjIsODczMCw4NzM0LDg3MzUsODc0NSw4NzQ3LDg3NzYsODgwMCw4ODAxLDg4MDQsODgwNSw4OTYyLDg5NzYsODk5Miw4OTkzLDk0NzIsOTQ3NCw5NDg0LDk0ODgsOTQ5Miw5NDk2LDk1MDAsOTUwOCw5NTE2LDk1MjQsOTUzMiw5NTUyLDk1NTMsOTU1NCw5NTU1LDk1NTYsOTU1Nyw5NTU4LDk1NTksOTU2MCw5NTYxLDk1NjIsOTU2Myw5NTY0LDk1NjUsOTU2Niw5NTY3LDk1NjgsOTU2OSw5NTcwLDk1NzEsOTU3Miw5NTczLDk1NzQsOTU3NSw5NTc2LDk1NzcsOTU3OCw5NTc5LDk1ODAsOTYwMCw5NjA0LDk2MDgsOTYxMiw5NjE2LDk2MTcsOTYxOCw5NjE5LDk2MzIsOTYzMyw5NjQyLDk2NDMsOTY0NCw5NjUwLDk2NTgsOTY2MCw5NjY4LDk2NzQsOTY3NSw5Njc5LDk2ODgsOTY4OSw5NzAyLDk3ODYsOTc4Nyw5Nzg4LDk3OTIsOTc5NCw5ODI0LDk4MjcsOTgyOSw5ODMwLDk4MzQsOTgzNSw5ODM2LDYxNDQxLDYxNDQyLDYxNDQ1LC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xXSx0LkxpYmVyYXRpb25TYW5zUmVndWxhcldpZHRocz1bMzY1LDAsMzMzLDI3OCwyNzgsMzU1LDU1Niw1NTYsODg5LDY2NywxOTEsMzMzLDMzMywzODksNTg0LDI3OCwzMzMsMjc4LDI3OCw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsMjc4LDI3OCw1ODQsNTg0LDU4NCw1NTYsMTAxNSw2NjcsNjY3LDcyMiw3MjIsNjY3LDYxMSw3NzgsNzIyLDI3OCw1MDAsNjY3LDU1Niw4MzMsNzIyLDc3OCw2NjcsNzc4LDcyMiw2NjcsNjExLDcyMiw2NjcsOTQ0LDY2Nyw2NjcsNjExLDI3OCwyNzgsMjc4LDQ2OSw1NTYsMzMzLDU1Niw1NTYsNTAwLDU1Niw1NTYsMjc4LDU1Niw1NTYsMjIyLDIyMiw1MDAsMjIyLDgzMyw1NTYsNTU2LDU1Niw1NTYsMzMzLDUwMCwyNzgsNTU2LDUwMCw3MjIsNTAwLDUwMCw1MDAsMzM0LDI2MCwzMzQsNTg0LDMzMyw1NTYsNTU2LDU1Niw1NTYsMjYwLDU1NiwzMzMsNzM3LDM3MCw1NTYsNTg0LDczNyw1NTIsNDAwLDU0OSwzMzMsMzMzLDMzMyw1NzYsNTM3LDI3OCwzMzMsMzMzLDM2NSw1NTYsODM0LDgzNCw4MzQsNjExLDY2Nyw2NjcsNjY3LDY2Nyw2NjcsNjY3LDFlMyw3MjIsNjY3LDY2Nyw2NjcsNjY3LDI3OCwyNzgsMjc4LDI3OCw3MjIsNzIyLDc3OCw3NzgsNzc4LDc3OCw3NzgsNTg0LDc3OCw3MjIsNzIyLDcyMiw3MjIsNjY3LDY2Nyw2MTEsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsODg5LDUwMCw1NTYsNTU2LDU1Niw1NTYsMjc4LDI3OCwyNzgsMjc4LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NDksNjExLDU1Niw1NTYsNTU2LDU1Niw1MDAsNTU2LDUwMCw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw3MjIsNTAwLDcyMiw1MDAsNzIyLDUwMCw3MjIsNTAwLDcyMiw2MTUsNzIyLDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNzc4LDU1Niw3NzgsNTU2LDc3OCw1NTYsNzc4LDU1Niw3MjIsNTU2LDcyMiw1NTYsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDIyMiwyNzgsMjc4LDczNSw0NDQsNTAwLDIyMiw2NjcsNTAwLDUwMCw1NTYsMjIyLDU1NiwyMjIsNTU2LDI5Miw1NTYsMzM0LDU1NiwyMjIsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNjA0LDcyMyw1NTYsNzc4LDU1Niw3NzgsNTU2LDc3OCw1NTYsMWUzLDk0NCw3MjIsMzMzLDcyMiwzMzMsNzIyLDMzMyw2NjcsNTAwLDY2Nyw1MDAsNjY3LDUwMCw2NjcsNTAwLDYxMSwyNzgsNjExLDM3NSw2MTEsMjc4LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDk0NCw3MjIsNjY3LDUwMCw2NjcsNjExLDUwMCw2MTEsNTAwLDYxMSw1MDAsMjIyLDU1Niw2NjcsNTU2LDFlMyw4ODksNzc4LDYxMSw2NjcsNTAwLDYxMSwyNzgsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMyw2NjcsMjc4LDc4NCw4MzgsMzg0LDc3NCw4NTUsNzUyLDIyMiw2NjcsNjY3LDU1MSw2NjgsNjY3LDYxMSw3MjIsNzc4LDI3OCw2NjcsNjY4LDgzMyw3MjIsNjUwLDc3OCw3MjIsNjY3LDYxOCw2MTEsNjY3LDc5OCw2NjcsODM1LDc0OCwyNzgsNjY3LDU3OCw0NDYsNTU2LDIyMiw1NDcsNTc4LDU3NSw1MDAsNTU3LDQ0Niw0NDEsNTU2LDU1NiwyMjIsNTAwLDUwMCw1NzYsNTAwLDQ0OCw1NTYsNjkwLDU2OSw0ODIsNjE3LDM5NSw1NDcsNjQ4LDUyNSw3MTMsNzgxLDIyMiw1NDcsNTU2LDU0Nyw3ODEsNjY3LDY2Nyw4NjUsNTQyLDcxOSw2NjcsMjc4LDI3OCw1MDAsMTA1NywxMDEwLDg1NCw1ODMsNzIyLDYzNSw3MTksNjY3LDY1Niw2NjcsNTQyLDY3Nyw2NjcsOTIzLDYwNCw3MTksNzE5LDU4Myw2NTYsODMzLDcyMiw3NzgsNzE5LDY2Nyw3MjIsNjExLDYzNSw3NjAsNjY3LDc0MCw2NjcsOTE3LDkzOCw3OTIsODg1LDY1Niw3MTksMTAxMCw3MjIsNTU2LDU3Myw1MzEsMzY1LDU4Myw1NTYsNjY5LDQ1OCw1NTksNTU5LDQzOCw1ODMsNjg4LDU1Miw1NTYsNTQyLDU1Niw1MDAsNDU4LDUwMCw4MjMsNTAwLDU3Myw1MjEsODAyLDgyMyw2MjUsNzE5LDUyMSw1MTAsNzUwLDU0Miw1NTYsNTU2LDU1NiwzNjUsNTEwLDUwMCwyMjIsMjc4LDIyMiw5MDYsODEyLDU1Niw0MzgsNTU5LDUwMCw1NTIsNzc4LDU1Niw0ODksNDExLDk0NCw3MjIsOTQ0LDcyMiw5NDQsNzIyLDY2Nyw1MDAsMzMzLDMzMyw1NTYsMWUzLDFlMyw1NTIsMjIyLDIyMiwyMjIsMjIyLDMzMywzMzMsMzMzLDU1Niw1NTYsMzUwLDFlMywxZTMsMTg4LDM1NCwzMzMsMzMzLDUwMCwzMzMsMTY3LDM2NSw1NTYsNTU2LDEwOTQsNTU2LDg4NSwzMjMsMTA3MywxZTMsNzY4LDYwMCw4MzQsODM0LDgzNCw4MzQsMWUzLDUwMCwxZTMsNTAwLDFlMyw1MDAsNTAwLDQ5NCw2MTIsODIzLDcxMyw1ODQsNTQ5LDcxMyw5NzksNzE5LDI3NCw1NDksNTQ5LDU4Myw1NDksNTQ5LDYwNCw1ODQsNjA0LDYwNCw3MDgsNjI1LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcyOSw2MDQsNjA0LDM1NCwzNTQsMWUzLDk5MCw5OTAsOTkwLDk5MCw0OTQsNjA0LDYwNCw2MDQsNjA0LDM1NCwxMDIxLDEwNTIsOTE3LDc1MCw3NTAsNTMxLDY1Niw1OTQsNTEwLDUwMCw3NTAsNzUwLDUwMCw1MDAsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywyMjIsMjIyLDI5NCwyOTQsMzI0LDMyNCwzMTYsMzI4LDM5OCwyODVdLHQuTGliZXJhdGlvblNhbnNSZWd1bGFyTWFwcGluZz1bLTEsLTEsLTEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTYsOTcsOTgsOTksMTAwLDEwMSwxMDIsMTAzLDEwNCwxMDUsMTA2LDEwNywxMDgsMTA5LDExMCwxMTEsMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOSwxMjAsMTIxLDEyMiwxMjMsMTI0LDEyNSwxMjYsMTYxLDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMTcwLDE3MSwxNzIsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDIwOCwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5LDIyMCwyMjEsMjIyLDIyMywyMjQsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMjQwLDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDI0NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDI1MywyNTQsMjU1LDI1NiwyNTcsMjU4LDI1OSwyNjAsMjYxLDI2MiwyNjMsMjY0LDI2NSwyNjYsMjY3LDI2OCwyNjksMjcwLDI3MSwyNzIsMjczLDI3NCwyNzUsMjc2LDI3NywyNzgsMjc5LDI4MCwyODEsMjgyLDI4MywyODQsMjg1LDI4NiwyODcsMjg4LDI4OSwyOTAsMjkxLDI5MiwyOTMsMjk0LDI5NSwyOTYsMjk3LDI5OCwyOTksMzAwLDMwMSwzMDIsMzAzLDMwNCwzMDUsMzA2LDMwNywzMDgsMzA5LDMxMCwzMTEsMzEyLDMxMywzMTQsMzE1LDMxNiwzMTcsMzE4LDMxOSwzMjAsMzIxLDMyMiwzMjMsMzI0LDMyNSwzMjYsMzI3LDMyOCwzMjksMzMwLDMzMSwzMzIsMzMzLDMzNCwzMzUsMzM2LDMzNywzMzgsMzM5LDM0MCwzNDEsMzQyLDM0MywzNDQsMzQ1LDM0NiwzNDcsMzQ4LDM0OSwzNTAsMzUxLDM1MiwzNTMsMzU0LDM1NSwzNTYsMzU3LDM1OCwzNTksMzYwLDM2MSwzNjIsMzYzLDM2NCwzNjUsMzY2LDM2NywzNjgsMzY5LDM3MCwzNzEsMzcyLDM3MywzNzQsMzc1LDM3NiwzNzcsMzc4LDM3OSwzODAsMzgxLDM4MiwzODMsNDAyLDUwNiw1MDcsNTA4LDUwOSw1MTAsNTExLDUzNiw1MzcsNTM4LDUzOSw3MTAsNzExLDcxMyw3MjgsNzI5LDczMCw3MzEsNzMyLDczMyw5MDAsOTAxLDkwMiw5MDMsOTA0LDkwNSw5MDYsOTA4LDkxMCw5MTEsOTEyLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LDkzOCw5MzksOTQwLDk0MSw5NDIsOTQzLDk0NCw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Miw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksOTcwLDk3MSw5NzIsOTczLDk3NCwxMDI0LDEwMjUsMTAyNiwxMDI3LDEwMjgsMTAyOSwxMDMwLDEwMzEsMTAzMiwxMDMzLDEwMzQsMTAzNSwxMDM2LDEwMzcsMTAzOCwxMDM5LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsMTEwNCwxMTA1LDExMDYsMTEwNywxMTA4LDExMDksMTExMCwxMTExLDExMTIsMTExMywxMTE0LDExMTUsMTExNiwxMTE3LDExMTgsMTExOSwxMTM4LDExMzksMTE2OCwxMTY5LDc4MDgsNzgwOSw3ODEwLDc4MTEsNzgxMiw3ODEzLDc5MjIsNzkyMyw4MjA4LDgyMDksODIxMSw4MjEyLDgyMTMsODIxNSw4MjE2LDgyMTcsODIxOCw4MjE5LDgyMjAsODIyMSw4MjIyLDgyMjQsODIyNSw4MjI2LDgyMzAsODI0MCw4MjQyLDgyNDMsODI0OSw4MjUwLDgyNTIsODI1NCw4MjYwLDgzMTksODM1NSw4MzU2LDgzNTksODM2NCw4NDUzLDg0NjcsODQ3MCw4NDgyLDg0ODYsODQ5NCw4NTM5LDg1NDAsODU0MSw4NTQyLDg1OTIsODU5Myw4NTk0LDg1OTUsODU5Niw4NTk3LDg2MTYsODcwNiw4NzEwLDg3MTksODcyMSw4NzIyLDg3MzAsODczNCw4NzM1LDg3NDUsODc0Nyw4Nzc2LDg4MDAsODgwMSw4ODA0LDg4MDUsODk2Miw4OTc2LDg5OTIsODk5Myw5NDcyLDk0NzQsOTQ4NCw5NDg4LDk0OTIsOTQ5Niw5NTAwLDk1MDgsOTUxNiw5NTI0LDk1MzIsOTU1Miw5NTUzLDk1NTQsOTU1NSw5NTU2LDk1NTcsOTU1OCw5NTU5LDk1NjAsOTU2MSw5NTYyLDk1NjMsOTU2NCw5NTY1LDk1NjYsOTU2Nyw5NTY4LDk1NjksOTU3MCw5NTcxLDk1NzIsOTU3Myw5NTc0LDk1NzUsOTU3Niw5NTc3LDk1NzgsOTU3OSw5NTgwLDk2MDAsOTYwNCw5NjA4LDk2MTIsOTYxNiw5NjE3LDk2MTgsOTYxOSw5NjMyLDk2MzMsOTY0Miw5NjQzLDk2NDQsOTY1MCw5NjU4LDk2NjAsOTY2OCw5Njc0LDk2NzUsOTY3OSw5Njg4LDk2ODksOTcwMiw5Nzg2LDk3ODcsOTc4OCw5NzkyLDk3OTQsOTgyNCw5ODI3LDk4MjksOTgzMCw5ODM0LDk4MzUsOTgzNiw2MTQ0MSw2MTQ0Miw2MTQ0NSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMV19LChlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTXlyaWFkUHJvUmVndWxhck1ldHJpY3M9dC5NeXJpYWRQcm9SZWd1bGFyRmFjdG9ycz10Lk15cmlhZFByb0l0YWxpY01ldHJpY3M9dC5NeXJpYWRQcm9JdGFsaWNGYWN0b3JzPXQuTXlyaWFkUHJvQm9sZE1ldHJpY3M9dC5NeXJpYWRQcm9Cb2xkSXRhbGljTWV0cmljcz10Lk15cmlhZFByb0JvbGRJdGFsaWNGYWN0b3JzPXQuTXlyaWFkUHJvQm9sZEZhY3RvcnM9dm9pZCAwLHQuTXlyaWFkUHJvQm9sZEZhY3RvcnM9WzEuMzY4OTgsMSwxLC43MjcwNiwuODA0NzksLjgzNzM0LC45ODg5NCwuOTk3OTMsLjk4OTcsLjkzODg0LC44NjIwOSwuOTQyOTIsLjk0MjkyLDEuMTY2NjEsMS4wMjA1OCwuOTM1ODIsLjk2Njk0LC45MzU4MiwxLjE5MTM3LC45OTc5MywuOTk3OTMsLjk5NzkzLC45OTc5MywuOTk3OTMsLjk5NzkzLC45OTc5MywuOTk3OTMsLjk5NzkzLC45OTc5MywuNzgwNzYsLjc4MDc2LDEuMDIwNTgsMS4wMjA1OCwxLjAyMDU4LC43Mjg1MSwuNzg5NjYsLjkwODM4LC44MzYzNywuODIzOTEsLjk2Mzc2LC44MDA2MSwuODYyNzUsLjg3NjgsLjk1NDA3LDEuMDI1OCwuNzM5MDEsLjg1MDIyLC44MzY1NSwxLjAxNTYsLjk1NTQ2LC45MjE3OSwuODcxMDcsLjkyMTc5LC44MjExNCwuODA5NiwuODk3MTMsLjk0NDM4LC45NTM1MywuOTQwODMsLjkxOTA1LC45MDQwNiwuOTQ0NiwuOTQyOTIsMS4xODc3NywuOTQyOTIsMS4wMjA1OCwuODk5MDMsLjkwMDg4LC45NDkzOCwuOTc4OTgsLjgxMDkzLC45NzU3MSwuOTQ5MzgsMS4wMjQsLjk1NzcsLjk1OTMzLC45ODYyMSwxLjA0NzQsLjk3NDU1LC45ODk4MSwuOTY3MiwuOTU5MzMsLjk0NDYsLjk3ODk4LC45NzQwNywuOTc2NDYsLjc4MDM2LDEuMTAyMDgsLjk1NDQyLC45NTI5OCwuOTc1NzksLjkzMzIsLjk0MDM5LC45MzgsLjgwNjg3LDEuMDExNDksLjgwNjg3LDEuMDIwNTgsLjgwNDc5LC45OTc5MywuOTk3OTMsLjk5NzkzLC45OTc5MywxLjAxMTQ5LDEuMDA4NzIsLjkwMDg4LC45MTg4MiwxLjAyMTMsLjgzNjEsMS4wMjA1OCwuNjIyOTUsLjU0MzI0LC44OTAyMiwxLjA4NTk1LDEsMSwuOTAwODgsMSwuOTc0NTUsLjkzNTgyLC45MDA4OCwxLDEuMDU2ODYsLjgzNjEsLjk5NjQyLC45OTY0MiwuOTk2NDIsLjcyODUxLC45MDgzOCwuOTA4MzgsLjkwODM4LC45MDgzOCwuOTA4MzgsLjkwODM4LC44NjgsLjgyMzkxLC44MDA2MSwuODAwNjEsLjgwMDYxLC44MDA2MSwxLjAyNTgsMS4wMjU4LDEuMDI1OCwxLjAyNTgsLjk3NDg0LC45NTU0NiwuOTIxNzksLjkyMTc5LC45MjE3OSwuOTIxNzksLjkyMTc5LDEuMDIwNTgsLjkyMTc5LC45NDQzOCwuOTQ0MzgsLjk0NDM4LC45NDQzOCwuOTA0MDYsLjg2OTU4LC45ODIyNSwuOTQ5MzgsLjk0OTM4LC45NDkzOCwuOTQ5MzgsLjk0OTM4LC45NDkzOCwuOTAzMSwuODEwOTMsLjk0OTM4LC45NDkzOCwuOTQ5MzgsLjk0OTM4LC45ODYyMSwuOTg2MjEsLjk4NjIxLC45ODYyMSwuOTM5NjksLjk1OTMzLC45NDQ2LC45NDQ2LC45NDQ2LC45NDQ2LC45NDQ2LDEuMDg1OTUsLjk0NDYsLjk1NDQyLC45NTQ0MiwuOTU0NDIsLjk1NDQyLC45NDAzOSwuOTc4OTgsLjk0MDM5LC45MDgzOCwuOTQ5MzgsLjkwODM4LC45NDkzOCwuOTA4MzgsLjk0OTM4LC44MjM5MSwuODEwOTMsLjgyMzkxLC44MTA5MywuODIzOTEsLjgxMDkzLC44MjM5MSwuODEwOTMsLjk2Mzc2LC44NDMxMywuOTc0ODQsLjk3NTcxLC44MDA2MSwuOTQ5MzgsLjgwMDYxLC45NDkzOCwuODAwNjEsLjk0OTM4LC44MDA2MSwuOTQ5MzgsLjgwMDYxLC45NDkzOCwuODc2OCwuOTU3NywuODc2OCwuOTU3NywuODc2OCwuOTU3NywxLDEsLjk1NDA3LC45NTkzMywuOTcwNjksLjk1OTMzLDEuMDI1OCwuOTg2MjEsMS4wMjU4LC45ODYyMSwxLjAyNTgsLjk4NjIxLDEuMDI1OCwuOTg2MjEsMS4wMjU4LC45ODYyMSwuODg3LDEuMDE1OTEsLjczOTAxLDEuMDQ3NCwxLDEsLjk3NDU1LC44MzY1NSwuOTg5ODEsMSwxLC44MzY1NSwuNzM5NzcsLjgzNjU1LC43MzkwMywuODQ2MzgsMS4wMzMsLjk1NTQ2LC45NTkzMywxLDEsLjk1NTQ2LC45NTkzMywuODI3MSwuOTU0MTcsLjk1OTMzLC45MjE3OSwuOTQ0NiwuOTIxNzksLjk0NDYsLjkyMTc5LC45NDQ2LC45MzYsLjkxOTY0LC44MjExNCwuOTc2NDYsMSwxLC44MjExNCwuOTc2NDYsLjgwOTYsLjc4MDM2LC44MDk2LC43ODAzNiwxLDEsLjgwOTYsLjc4MDM2LDEsMSwuODk3MTMsLjc3NDUyLC44OTcxMywxLjEwMjA4LC45NDQzOCwuOTU0NDIsLjk0NDM4LC45NTQ0MiwuOTQ0MzgsLjk1NDQyLC45NDQzOCwuOTU0NDIsLjk0NDM4LC45NTQ0MiwuOTQ0MzgsLjk1NDQyLC45NDA4MywuOTc1NzksLjkwNDA2LC45NDAzOSwuOTA0MDYsLjk0NDYsLjkzOCwuOTQ0NiwuOTM4LC45NDQ2LC45MzgsMSwuOTk3OTMsLjkwODM4LC45NDkzOCwuODY4LC45MDMxLC45MjE3OSwuOTQ0NiwxLDEsLjg5NzEzLDEuMTAyMDgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwOTg5LC45MzU4LC45MTk0NSwuODMxODEsLjc1MjYxLC44Nzk5MiwuODI5NzYsLjk2MDM0LC44MzY4OSwuOTcyNjgsMS4wMDc4LC45MDgzOCwuODM2MzcsLjgwMTksLjkwMTU3LC44MDA2MSwuOTQ0NiwuOTU0MDcsLjkyNDM2LDEuMDI1OCwuODUwMjIsLjk3MTUzLDEuMDE1NiwuOTU1NDYsLjg5MTkyLC45MjE3OSwuOTIzNjEsLjg3MTA3LC45NjMxOCwuODk3MTMsLjkzNzA0LC45NTYzOCwuOTE5MDUsLjkxNzA5LC45Mjc5NiwxLjAyNTgsLjkzNzA0LC45NDgzNiwxLjAzNzMsLjk1OTMzLDEuMDA3OCwuOTU4NzEsLjk0ODM2LC45NjE3NCwuOTI2MDEsLjk0OTgsLjk4NjA3LC45NTc3NiwuOTU5MzMsMS4wNTQ1MywxLjAwNzgsLjk4Mjc1LC45MzE0LC45NTYxNywuOTE3MDEsMS4wNTk5MywuOTQ0NiwuNzgzNjcsLjk1NTMsMSwuODY4MzIsMS4wMTI4LC45NTg3MSwuOTkzOTQsLjg3NTQ4LC45NjM2MSwuODY3NzQsMS4wMDc4LC45NTg3MSwuOTQ0NiwuOTU4NzEsLjg2Nzc0LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjk0MDgzLC45NzU3OSwuOTQwODMsLjk3NTc5LC45NDA4MywuOTc1NzksLjkwNDA2LC45NDAzOSwuOTY2OTQsMSwuODk5MDMsMSwxLDEsLjkzNTgyLC45MzU4MiwuOTM1ODIsMSwuOTA4LC45MDgsLjkxOCwuOTQyMTksLjk0MjE5LC45NjU0NCwxLDEuMjg1LDEsMSwuODEwNzksLjgxMDc5LDEsMSwuNzQ4NTQsMSwxLDEsMSwuOTk3OTMsMSwxLDEsLjY1LDEsMS4zNjE0NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4xNzE3MywxLC44MDUzNSwuNzYxNjksMS4wMjA1OCwxLjA3MzIsMS4wNTQ4NiwxLDEsMS4zMDY5MiwxLjA4NTk1LDEuMDg1OTUsMSwxLjA4NTk1LDEuMDg1OTUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjE2MTYxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLHQuTXlyaWFkUHJvQm9sZE1ldHJpY3M9e2xpbmVIZWlnaHQ6MS4yLGxpbmVHYXA6LjJ9LHQuTXlyaWFkUHJvQm9sZEl0YWxpY0ZhY3RvcnM9WzEuMzY4OTgsMSwxLC42NjIyNywuODA3NzksLjgxNjI1LC45NzI3NiwuOTcyNzYsLjk3NzMzLC45MjIyMiwuODMyNjYsLjk0MjkyLC45NDI5MiwxLjE2MTQ4LDEuMDIwNTgsLjkzNTgyLC45NjY5NCwuOTM1ODIsMS4xNzMzNywuOTcyNzYsLjk3Mjc2LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuOTcyNzYsLjc4MDc2LC43ODA3NiwxLjAyMDU4LDEuMDIwNTgsMS4wMjA1OCwuNzE1NDEsLjc2ODEzLC44NTU3NiwuODA1OTEsLjgwNzI5LC45NDI5OSwuNzc1MTIsLjgzNjU1LC44NjUyMywuOTIyMjIsLjk4NjIxLC43MTc0MywuODE2OTgsLjc5NzI2LC45ODU1OCwuOTIyMjIsLjkwNjM3LC44MzgwOSwuOTA2MzcsLjgwNzI5LC43NjQ2MywuODYyNzUsLjkwNjk5LC45MTYwNSwuOTE1NCwuODUzMDgsLjg1NDU4LC45MDUzMSwuOTQyOTIsMS4yMTI5NiwuOTQyOTIsMS4wMjA1OCwuODk5MDMsMS4xODYxNiwuOTk2MTMsLjkxNjc3LC43ODIxNiwuOTE2NzcsLjkwMDgzLC45ODc5NiwuOTEzNSwuOTIxNjgsLjk1MzgxLC45ODk4MSwuOTUyOTgsLjk1MzgxLC45MzQ1OSwuOTIxNjgsLjkxNTEzLC45MjAwNCwuOTE2NzcsLjk1MDc3LC43NDgsMS4wNDUwMiwuOTE2NzcsLjkyMDYxLC45NDIzNiwuODk1NDQsLjg5MzY0LC45LC44MDY4NywuODU3OCwuODA2ODcsMS4wMjA1OCwuODA3NzksLjk3Mjc2LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC44NTc4LC45OTk3MywxLjE4NjE2LC45MTMzOSwxLjA4MDc0LC44Mjg5MSwxLjAyMDU4LC41NTUwOSwuNzE1MjYsLjg5MDIyLDEuMDg1OTUsMSwxLDEuMTg2MTYsMSwuOTY3MzYsLjkzNTgyLDEuMTg2MTYsMSwxLjA0ODY0LC44MjcxMSwuOTkwNDMsLjk5MDQzLC45OTA0MywuNzE1NDEsLjg1NTc2LC44NTU3NiwuODU1NzYsLjg1NTc2LC44NTU3NiwuODU1NzYsLjg0NSwuODA3MjksLjc3NTEyLC43NzUxMiwuNzc1MTIsLjc3NTEyLC45ODYyMSwuOTg2MjEsLjk4NjIxLC45ODYyMSwuOTU5NjEsLjkyMjIyLC45MDYzNywuOTA2MzcsLjkwNjM3LC45MDYzNywuOTA2MzcsMS4wMjA1OCwuOTAyNTEsLjkwNjk5LC45MDY5OSwuOTA2OTksLjkwNjk5LC44NTQ1OCwuODM2NTksLjk0OTUxLC45OTYxMywuOTk2MTMsLjk5NjEzLC45OTYxMywuOTk2MTMsLjk5NjEzLC44NTgxMSwuNzgyMTYsLjkwMDgzLC45MDA4MywuOTAwODMsLjkwMDgzLC45NTM4MSwuOTUzODEsLjk1MzgxLC45NTM4MSwuOTEzNSwuOTIxNjgsLjkxNTEzLC45MTUxMywuOTE1MTMsLjkxNTEzLC45MTUxMywxLjA4NTk1LC45MTY3NywuOTE2NzcsLjkxNjc3LC45MTY3NywuOTE2NzcsLjg5MzY0LC45MjMzMiwuODkzNjQsLjg1NTc2LC45OTYxMywuODU1NzYsLjk5NjEzLC44NTU3NiwuOTk2MTMsLjgwNzI5LC43ODIxNiwuODA3MjksLjc4MjE2LC44MDcyOSwuNzgyMTYsLjgwNzI5LC43ODIxNiwuOTQyOTksLjc2NzgzLC45NTk2MSwuOTE2NzcsLjc3NTEyLC45MDA4MywuNzc1MTIsLjkwMDgzLC43NzUxMiwuOTAwODMsLjc3NTEyLC45MDA4MywuNzc1MTIsLjkwMDgzLC44NjUyMywuOTEzNSwuODY1MjMsLjkxMzUsLjg2NTIzLC45MTM1LDEsMSwuOTIyMjIsLjkyMTY4LC45MjIyMiwuOTIxNjgsLjk4NjIxLC45NTM4MSwuOTg2MjEsLjk1MzgxLC45ODYyMSwuOTUzODEsLjk4NjIxLC45NTM4MSwuOTg2MjEsLjk1MzgxLC44NjAzNiwuOTcwOTYsLjcxNzQzLC45ODk4MSwxLDEsLjk1Mjk4LC43OTcyNiwuOTUzODEsMSwxLC43OTcyNiwuNjg5NCwuNzk3MjYsLjc0MzIxLC44MTY5MSwxLjAwMDYsLjkyMjIyLC45MjE2OCwxLDEsLjkyMjIyLC45MjE2OCwuNzk0NjQsLjkyMDk4LC45MjE2OCwuOTA2MzcsLjkxNTEzLC45MDYzNywuOTE1MTMsLjkwNjM3LC45MTUxMywuOTA5LC44NzUxNCwuODA3MjksLjk1MDc3LDEsMSwuODA3MjksLjk1MDc3LC43NjQ2MywuNzQ4LC43NjQ2MywuNzQ4LDEsMSwuNzY0NjMsLjc0OCwxLDEsLjg2Mjc1LC43MjY1MSwuODYyNzUsMS4wNDUwMiwuOTA2OTksLjkxNjc3LC45MDY5OSwuOTE2NzcsLjkwNjk5LC45MTY3NywuOTA2OTksLjkxNjc3LC45MDY5OSwuOTE2NzcsLjkwNjk5LC45MTY3NywuOTE1NCwuOTQyMzYsLjg1NDU4LC44OTM2NCwuODU0NTgsLjkwNTMxLC45LC45MDUzMSwuOSwuOTA1MzEsLjksMSwuOTcyNzYsLjg1NTc2LC45OTYxMywuODQ1LC44NTgxMSwuOTAyNTEsLjkxNjc3LDEsMSwuODYyNzUsMS4wNDUwMiwxLjE4NjE2LDEuMTg2MTYsMS4xODYxNiwxLjE4NjE2LDEuMTg2MTYsMS4xODYxNiwxLjE4NjE2LDEuMTg2MTYsMS4xODYxNiwxLjAwODk5LDEuMzA2MjgsLjg1NTc2LC44MDE3OCwuNjY4NjIsLjc5MjcsLjY5MzIzLC44ODEyNywuNzI0NTksLjg5NzExLC45NTM4MSwuODU1NzYsLjgwNTkxLC43ODA1LC45NDcyOSwuNzc1MTIsLjkwNTMxLC45MjIyMiwuOTA2MzcsLjk4NjIxLC44MTY5OCwuOTI2NTUsLjk4NTU4LC45MjIyMiwuODUzNTksLjkwNjM3LC45MDk3NiwuODM4MDksLjk0NTIzLC44NjI3NSwuODM1MDksLjkzMTU3LC44NTMwOCwuODMzOTIsLjkyMzQ2LC45ODYyMSwuODM1MDksLjkyODg2LC45MTMyNCwuOTIxNjgsLjk1MzgxLC45MDY0NiwuOTI4ODYsLjkwNTU3LC44Njg0NywuOTAyNzYsLjkxMzI0LC44Njg0MiwuOTIxNjgsLjk5NTMxLC45NTM4MSwuOTIyNCwuODU0MDgsLjkyNjk5LC44Njg0NywxLjAwNTEsLjkxNTEzLC44MDQ4NywuOTM0ODEsMSwuODgxNTksMS4wNTIxNCwuOTA2NDYsLjk3MzU1LC44MTUzOSwuODkzOTgsLjg1OTIzLC45NTM4MSwuOTA2NDYsLjkxNTEzLC45MDY0NiwuODU5MjMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTE1NCwuOTQyMzYsLjkxNTQsLjk0MjM2LC45MTU0LC45NDIzNiwuODU0NTgsLjg5MzY0LC45NjY5NCwxLC44OTkwMywxLDEsMSwuOTE3ODIsLjkxNzgyLC45MTc4MiwxLC44OTYsLjg5NiwuODk2LC45MzMyLC45MzMyLC45NTk3MywxLDEuMjYsMSwxLC44MDQ3OSwuODAxNzgsMSwxLC44NTYzMywxLDEsMSwxLC45NzI3NiwxLDEsMSwuNjk4LDEsMS4zNjE0NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4xNDU0MiwxLC43OTE5OSwuNzg2OTQsMS4wMjA1OCwxLjAzNDkzLDEuMDU0ODYsMSwxLDEuMjMwMjYsMS4wODU5NSwxLjA4NTk1LDEsMS4wODU5NSwxLjA4NTk1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4yMDAwNiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXSx0Lk15cmlhZFByb0JvbGRJdGFsaWNNZXRyaWNzPXtsaW5lSGVpZ2h0OjEuMixsaW5lR2FwOi4yfSx0Lk15cmlhZFByb0l0YWxpY0ZhY3RvcnM9WzEuMzY4OTgsMSwxLC42NTUwNywuODQ5NDMsLjg1NjM5LC44ODQ2NSwuODg0NjUsLjg2OTM2LC44ODMwNywuODY5NDgsLjg1MjgzLC44NTI4MywxLjA2MzgzLDEuMDIwNTgsLjc1OTQ1LC45MjE5LC43NTk0NSwxLjE3MzM3LC44ODQ2NSwuODg0NjUsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjg4NDY1LC44ODQ2NSwuNzU5NDUsLjc1OTQ1LDEuMDIwNTgsMS4wMjA1OCwxLjAyMDU4LC42OTA0NiwuNzA5MjYsLjg1MTU4LC43NzgxMiwuNzY4NTIsLjg5NTkxLC43MDQ2NiwuNzYxMjUsLjgwMDk0LC44NjgyMiwuODM4NjQsLjcyOCwuNzcyMTIsLjc5NDc1LC45MzYzNywuODc1MTQsLjg1ODgsLjc2MDEzLC44NTg4LC43MjQyMSwuNjk4NjYsLjc3NTk4LC44NTk5MSwuODA4MTEsLjg3ODMyLC43ODExMiwuNzc1MTIsLjg1NjIsMS4wMjIyLDEuMTg0MTcsMS4wMjIyLDEuMjcwMTQsLjg5OTAzLDEuMTUwMTIsLjkzODU5LC45NDM5OSwuODQ2LC45NDM5OSwuODE0NTMsMS4wMTg2LC45NDIxOSwuOTYwMTcsMS4wMzA3NSwxLjAyMTc1LC45MTIsMS4wMzA3NSwuOTY5OTgsLjk2MDE3LC45Mzg1OSwuOTQzOTksLjk0Mzk5LC45NTQ5MywuNzQ2LDEuMTI2NTgsLjk0NTc4LC45MSwuOTc5LC44ODIsLjg4MiwuODMsLjg1MDM0LC44MzUzNywuODUwMzQsMS4wMjA1OCwuNzA4NjksLjg4NDY1LC44ODQ2NSwuODg0NjUsLjg4NDY1LC44MzUzNywuOTAwODMsMS4xNTAxMiwuOTE2MSwuOTQ1NjUsLjczNTQxLDEuMDIwNTgsLjUzNjA5LC42OTM1MywuNzk1MTksMS4wODU5NSwxLDEsMS4xNTAxMiwxLC45MTk3NCwuNzU5NDUsMS4xNTAxMiwxLC45NDQ2LC43MzM2MSwuOTAwNSwuOTAwNSwuOTAwNSwuNjI4NjQsLjg1MTU4LC44NTE1OCwuODUxNTgsLjg1MTU4LC44NTE1OCwuODUxNTgsLjc3MywuNzY4NTIsLjcwNDY2LC43MDQ2NiwuNzA0NjYsLjcwNDY2LC44Mzg2NCwuODM4NjQsLjgzODY0LC44Mzg2NCwuOTA1NjEsLjg3NTE0LC44NTg4LC44NTg4LC44NTg4LC44NTg4LC44NTg4LDEuMDIwNTgsLjg1NzUxLC44NTk5MSwuODU5OTEsLjg1OTkxLC44NTk5MSwuNzc1MTIsLjc2MDEzLC44ODA3NSwuOTM4NTksLjkzODU5LC45Mzg1OSwuOTM4NTksLjkzODU5LC45Mzg1OSwuODA3NSwuODQ2LC44MTQ1MywuODE0NTMsLjgxNDUzLC44MTQ1MywuODI0MjQsLjgyNDI0LC44MjQyNCwuODI0MjQsLjkyNzgsLjk2MDE3LC45Mzg1OSwuOTM4NTksLjkzODU5LC45Mzg1OSwuOTM4NTksMS4wODU5NSwuODU2MiwuOTQ1NzgsLjk0NTc4LC45NDU3OCwuOTQ1NzgsLjg4MiwuOTQ1NzgsLjg4MiwuODUxNTgsLjkzODU5LC44NTE1OCwuOTM4NTksLjg1MTU4LC45Mzg1OSwuNzY4NTIsLjg0NiwuNzY4NTIsLjg0NiwuNzY4NTIsLjg0NiwuNzY4NTIsLjg0NiwuODk1OTEsLjg1NDQsLjkwNTYxLC45NDM5OSwuNzA0NjYsLjgxNDUzLC43MDQ2NiwuODE0NTMsLjcwNDY2LC44MTQ1MywuNzA0NjYsLjgxNDUzLC43MDQ2NiwuODE0NTMsLjgwMDk0LC45NDIxOSwuODAwOTQsLjk0MjE5LC44MDA5NCwuOTQyMTksMSwxLC44NjgyMiwuOTYwMTcsLjg2ODIyLC45NjAxNywuODM4NjQsLjgyNDI0LC44Mzg2NCwuODI0MjQsLjgzODY0LC44MjQyNCwuODM4NjQsMS4wMzA3NSwuODM4NjQsLjgyNDI0LC44MTQwMiwxLjAyNzM4LC43MjgsMS4wMjE3NSwxLDEsLjkxMiwuNzk0NzUsMS4wMzA3NSwxLDEsLjc5NDc1LC44MzkxMSwuNzk0NzUsLjY2MjY2LC44MDU1MywxLjA2Njc2LC44NzUxNCwuOTYwMTcsMSwxLC44NzUxNCwuOTYwMTcsLjg2ODY1LC44NzM5NiwuOTYwMTcsLjg1ODgsLjkzODU5LC44NTg4LC45Mzg1OSwuODU4OCwuOTM4NTksLjg2NywuODQ3NTksLjcyNDIxLC45NTQ5MywxLDEsLjcyNDIxLC45NTQ5MywuNjk4NjYsLjc0NiwuNjk4NjYsLjc0NiwxLDEsLjY5ODY2LC43NDYsMSwxLC43NzU5OCwuODg0MTcsLjc3NTk4LDEuMTI2NTgsLjg1OTkxLC45NDU3OCwuODU5OTEsLjk0NTc4LC44NTk5MSwuOTQ1NzgsLjg1OTkxLC45NDU3OCwuODU5OTEsLjk0NTc4LC44NTk5MSwuOTQ1NzgsLjg3ODMyLC45NzksLjc3NTEyLC44ODIsLjc3NTEyLC44NTYyLC44MywuODU2MiwuODMsLjg1NjIsLjgzLDEsLjg4NDY1LC44NTE1OCwuOTM4NTksLjc3MywuODA3NSwuODU3NTEsLjg1NjIsMSwxLC43NzU5OCwxLjEyNjU4LDEuMTUwMTIsMS4xNTAxMiwxLjE1MDEyLDEuMTUwMTIsMS4xNTAxMiwxLjE1MzEzLDEuMTUwMTIsMS4xNTAxMiwxLjE1MDEyLDEuMDgxMDYsMS4wMzkwMSwuODUxNTgsLjc3MDI1LC42MjI2NCwuNzY0NiwuNjUzNTEsLjg2MDI2LC42OTQ2MSwuODk5NDcsMS4wMzA3NSwuODUxNTgsLjc3ODEyLC43NjQ0OSwuODg4MzYsLjcwNDY2LC44NTYyLC44NjgyMiwuODU4OCwuODM4NjQsLjc3MjEyLC44NTMwOCwuOTM2MzcsLjg3NTE0LC44MjM1MiwuODU4OCwuODU3MDEsLjc2MDEzLC44OTA1OCwuNzc1OTgsLjgxNTYsLjgyNTY1LC43ODExMiwuNzc4OTksLjg5Mzg2LC44Mzg2NCwuODE1NiwuOTQ4NiwuOTIzODgsLjk2MTg2LDEuMDMwNzUsLjkxMTIzLC45NDg2LC45MzI5OCwuODc4LC45Mzk0MiwuOTIzODgsLjg0NTk2LC45NjE4NiwuOTUxMTksMS4wMzA3NSwuOTIyLC44ODc4NywuOTU4MjksLjg4LC45MzU1OSwuOTM4NTksLjc4ODE1LC45Mzc1OCwxLC44OTIxNywxLjAzNzM3LC45MTEyMywuOTM5NjksLjc3NDg3LC44NTc2OSwuODY3OTksMS4wMzA3NSwuOTExMjMsLjkzODU5LC45MTEyMywuODY3OTksMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODc4MzIsLjk3OSwuODc4MzIsLjk3OSwuODc4MzIsLjk3OSwuNzc1MTIsLjg4MiwuOTIxOSwxLC44OTkwMywxLDEsMSwuODczMjEsLjg3MzIxLC44NzMyMSwxLDEuMDI3LDEuMDI3LDEuMDI3LC44Njg0NywuODY4NDcsLjc5MTIxLDEsMS4xMjQsMSwxLC43MzU3MiwuNzM1NzIsMSwxLC44NTAzNCwxLDEsMSwxLC44ODQ2NSwxLDEsMSwuNjY5LDEsMS4zNjE0NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wNDgyOCwxLC43NDk0OCwuNzUxODcsMS4wMjA1OCwuOTgzOTEsMS4wMjExOSwxLDEsMS4wNjIzMywxLjA4NTk1LDEuMDg1OTUsMSwxLjA4NTk1LDEuMDg1OTUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjA1MjMzLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLHQuTXlyaWFkUHJvSXRhbGljTWV0cmljcz17bGluZUhlaWdodDoxLjIsbGluZUdhcDouMn0sdC5NeXJpYWRQcm9SZWd1bGFyRmFjdG9ycz1bMS4zNjg5OCwxLDEsLjc2MzA1LC44Mjc4NCwuOTQ5MzUsLjg5MzY0LC45MjI0MSwuODkwNzMsLjkwNzA2LC45ODQ3MiwuODUyODMsLjg1MjgzLDEuMDY2NCwxLjAyMDU4LC43NDUwNSwuOTIxOSwuNzQ1MDUsMS4yMzQ1NiwuOTIyNDEsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjc0NTA1LC43NDUwNSwxLjAyMDU4LDEuMDIwNTgsMS4wMjA1OCwuNzMwMDIsLjcyNjAxLC45MTc1NSwuODEyNiwuODAzMTQsLjkyMjIyLC43Mzc2NCwuNzk3MjYsLjgzMDUxLC45MDI4NCwuODYwMjMsLjc0LC44MTI2LC44NDg2OSwuOTY1MTgsLjkxMTE1LC44ODU4LC43OTc2MSwuODg1OCwuNzQ0OTgsLjczOTE0LC44MTM2MywuODk1OTEsLjgzNjU5LC44OTYzMywuODU2MDgsLjgxMTEsLjkwNTMxLDEuMDIyMiwxLjIyNzM2LDEuMDIyMiwxLjI3MDE0LC44OTkwMywuOTAwODgsLjg2NjY3LDEuMDIzMSwuODk2LDEuMDE0MTEsLjkwMDgzLDEuMDUwOTksMS4wMDUxMiwuOTk3OTMsMS4wNTMyNiwxLjA5Mzc3LC45MzgsMS4wNjIyNiwxLjAwMTE5LC45OTc5MywuOTg3MTQsMS4wMjMxLDEuMDEyMzEsLjk4MTk2LC43OTIsMS4xOTEzNywuOTkwNzQsLjk2MiwxLjAxOTE1LC45MjYsLjk0MiwuODU2LC44NTAzNCwuOTIwMDYsLjg1MDM0LDEuMDIwNTgsLjY5MDY3LC45MjI0MSwuOTIyNDEsLjkyMjQxLC45MjI0MSwuOTIwMDYsLjkzMzIsLjkwMDg4LC45MTg4MiwuOTM0ODQsLjc1MzM5LDEuMDIwNTgsLjU2ODY2LC41NDMyNCwuNzk1MTksMS4wODU5NSwxLDEsLjkwMDg4LDEsLjk1MzI1LC43NDUwNSwuOTAwODgsMSwuOTcxOTgsLjc1MzM5LC45MTAwOSwuOTEwMDksLjkxMDA5LC42NjQ2NiwuOTE3NTUsLjkxNzU1LC45MTc1NSwuOTE3NTUsLjkxNzU1LC45MTc1NSwuNzg4LC44MDMxNCwuNzM3NjQsLjczNzY0LC43Mzc2NCwuNzM3NjQsLjg2MDIzLC44NjAyMywuODYwMjMsLjg2MDIzLC45MjkxNSwuOTExMTUsLjg4NTgsLjg4NTgsLjg4NTgsLjg4NTgsLjg4NTgsMS4wMjA1OCwuODg1OCwuODk1OTEsLjg5NTkxLC44OTU5MSwuODk1OTEsLjgxMTEsLjc5NjExLC44OTcxMywuODY2NjcsLjg2NjY3LC44NjY2NywuODY2NjcsLjg2NjY3LC44NjY2NywuODY5MzYsLjg5NiwuOTAwODMsLjkwMDgzLC45MDA4MywuOTAwODMsLjg0MjI0LC44NDIyNCwuODQyMjQsLjg0MjI0LC45NzI3NiwuOTk3OTMsLjk4NzE0LC45ODcxNCwuOTg3MTQsLjk4NzE0LC45ODcxNCwxLjA4NTk1LC44OTg3NiwuOTkwNzQsLjk5MDc0LC45OTA3NCwuOTkwNzQsLjk0MiwxLjAyMzEsLjk0MiwuOTE3NTUsLjg2NjY3LC45MTc1NSwuODY2NjcsLjkxNzU1LC44NjY2NywuODAzMTQsLjg5NiwuODAzMTQsLjg5NiwuODAzMTQsLjg5NiwuODAzMTQsLjg5NiwuOTIyMjIsLjkzMzcyLC45MjkxNSwxLjAxNDExLC43Mzc2NCwuOTAwODMsLjczNzY0LC45MDA4MywuNzM3NjQsLjkwMDgzLC43Mzc2NCwuOTAwODMsLjczNzY0LC45MDA4MywuODMwNTEsMS4wMDUxMiwuODMwNTEsMS4wMDUxMiwuODMwNTEsMS4wMDUxMiwxLDEsLjkwMjg0LC45OTc5MywuOTA5NzYsLjk5NzkzLC44NjAyMywuODQyMjQsLjg2MDIzLC44NDIyNCwuODYwMjMsLjg0MjI0LC44NjAyMywxLjA1MzI2LC44NjAyMywuODQyMjQsLjgyODczLDEuMDc0NjksLjc0LDEuMDkzNzcsMSwxLC45MzgsLjg0ODY5LDEuMDYyMjYsMSwxLC44NDg2OSwuODM3MDQsLjg0ODY5LC44MTQ0MSwuODU1ODgsMS4wODkyNywuOTExMTUsLjk5NzkzLDEsMSwuOTExMTUsLjk5NzkzLC45MTg4NywuOTA5OTEsLjk5NzkzLC44ODU4LC45ODcxNCwuODg1OCwuOTg3MTQsLjg4NTgsLjk4NzE0LC44OTQsLjkxNDM0LC43NDQ5OCwuOTgxOTYsMSwxLC43NDQ5OCwuOTgxOTYsLjczOTE0LC43OTIsLjczOTE0LC43OTIsMSwxLC43MzkxNCwuNzkyLDEsMSwuODEzNjMsLjkwNCwuODEzNjMsMS4xOTEzNywuODk1OTEsLjk5MDc0LC44OTU5MSwuOTkwNzQsLjg5NTkxLC45OTA3NCwuODk1OTEsLjk5MDc0LC44OTU5MSwuOTkwNzQsLjg5NTkxLC45OTA3NCwuODk2MzMsMS4wMTkxNSwuODExMSwuOTQyLC44MTExLC45MDUzMSwuODU2LC45MDUzMSwuODU2LC45MDUzMSwuODU2LDEsLjkyMjQxLC45MTc1NSwuODY2NjcsLjc4OCwuODY5MzYsLjg4NTgsLjg5ODc2LDEsMSwuODEzNjMsMS4xOTEzNywuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAzODgsMS4wMzkwMSwuOTIxMzgsLjc4MTA1LC43MTU0LC44NjE2OSwuODA1MTMsLjk0MDA3LC44MjUyOCwuOTg2MTIsMS4wNjIyNiwuOTE3NTUsLjgxMjYsLjgxODg0LC45MjgxOSwuNzM3NjQsLjkwNTMxLC45MDI4NCwuODg1OCwuODYwMjMsLjgxMjYsLjkxMTcyLC45NjUxOCwuOTExMTUsLjgzMDg5LC44ODU4LC44Nzc5MSwuNzk3NjEsLjg5Mjk3LC44MTM2MywuODgxNTcsLjg5OTkyLC44NTYwOCwuODE5OTIsLjk0MzA3LC44NjAyMywuODgxNTcsLjk1MzA4LC45ODY5OSwuOTk3OTMsMS4wNjIyNiwuOTU4MTcsLjk1MzA4LC45NzM1OCwuOTI4LC45ODA4OCwuOTg2OTksLjkyNzYxLC45OTc5MywuOTYwMTcsMS4wNjIyNiwuOTg2LC45NDQsLjk1OTc4LC45MzgsLjk2NzA1LC45ODcxNCwuODA0NDIsLjk4OTcyLDEsLjg5NzYyLDEuMDQ1NTIsLjk1ODE3LC45OTAwNywuODcwNjQsLjkxODc5LC44ODg4OCwxLjA2MjI2LC45NTgxNywuOTg3MTQsLjk1ODE3LC44ODg4OCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC44OTYzMywxLjAxOTE1LC44OTYzMywxLjAxOTE1LC44OTYzMywxLjAxOTE1LC44MTExLC45NDIsLjkyMTksMSwuODk5MDMsMSwxLDEsLjkzMTczLC45MzE3MywuOTMxNzMsMSwxLjA2MzA0LDEuMDYzMDQsMS4wNjkwNCwuODk5MDMsLjg5OTAzLC44MDU0OSwxLDEuMTU2LDEsMSwuNzY1NzUsLjc2NTc1LDEsMSwuNzI0NTgsMSwxLDEsMSwuOTIyNDEsMSwxLDEsLjYxOSwxLDEuMzYxNDUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDcyNTcsMSwuNzQ3MDUsLjcxMTE5LDEuMDIwNTgsMS4wMjQsMS4wMjExOSwxLDEsMS4xNTM2LDEuMDg1OTUsMS4wODU5NSwxLDEuMDg1OTUsMS4wODU5NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDU2MzgsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV0sdC5NeXJpYWRQcm9SZWd1bGFyTWV0cmljcz17bGluZUhlaWdodDoxLjIsbGluZUdhcDouMn19LChlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuU2Vnb2V1aVJlZ3VsYXJNZXRyaWNzPXQuU2Vnb2V1aVJlZ3VsYXJGYWN0b3JzPXQuU2Vnb2V1aUl0YWxpY01ldHJpY3M9dC5TZWdvZXVpSXRhbGljRmFjdG9ycz10LlNlZ29ldWlCb2xkTWV0cmljcz10LlNlZ29ldWlCb2xkSXRhbGljTWV0cmljcz10LlNlZ29ldWlCb2xkSXRhbGljRmFjdG9ycz10LlNlZ29ldWlCb2xkRmFjdG9ycz12b2lkIDAsdC5TZWdvZXVpQm9sZEZhY3RvcnM9WzEuNzY3MzgsMSwxLC45OTI5NywuOTgyNCwxLjA0MDE2LDEuMDY0OTcsMS4wMzQyNCwuOTc1MjksMS4xNzY0NywxLjIzMjAzLDEuMTA4NSwxLjEwODUsMS4xNjkzOSwxLjIxMDcsLjk3NTQsMS4yMTQwOCwuOTc1NCwxLjU5NTc4LDEuMDM0MjQsMS4wMzQyNCwxLjAzNDI0LDEuMDM0MjQsMS4wMzQyNCwxLjAzNDI0LDEuMDM0MjQsMS4wMzQyNCwxLjAzNDI0LDEuMDM0MjQsLjgxMzc4LC44MTM3OCwxLjIxMDcsMS4yMTA3LDEuMjEwNywuNzE3MDMsLjk3ODQ3LC45NzM2MywuODg3NzYsLjg2NDEsMS4wMjA5NiwuNzk3OTUsLjg1MTMyLC45MTQsMS4wNjA4NSwxLjE0MDYsLjgwMDcsLjg5ODU4LC44MzY5MywxLjE0ODg5LDEuMDkzOTgsLjk3NDg5LC45MjA5NCwuOTc0ODksLjkwMzk5LC44NDA0MSwuOTU5MjMsMS4wMDEzNSwxLDEuMDY0NjcsLjk4MjQzLC45MDk5NiwuOTkzNjEsMS4xMDg1LDEuNTY5NDIsMS4xMDg1LDEuMjEwNywuNzQ2MjcsLjk0MjgyLC45Njc1MiwxLjAxNTE5LC44NjMwNCwxLjAxMzU5LC45NzI3OCwxLjE1MTAzLDEuMDEzNTksLjk4NTYxLDEuMDIyODUsMS4wMjI4NSwxLjAwNTI3LDEuMDIyODUsMS4wMzAyLC45OTA0MSwxLjAwMDgsMS4wMTUxOSwxLjAxMzU5LDEuMDIyNTgsLjc5MTA0LDEuMTY4NjIsLjk5MDQxLC45NzQ1NCwxLjAyNTExLC45OTI5OCwuOTY3NTIsLjk1ODAxLC45NDg1NiwxLjE2NTc5LC45NDg1NiwxLjIxMDcsLjk4MjQsMS4wMzQyNCwxLjAzNDI0LDEsMS4wMzQyNCwxLjE2NTc5LC44NzI3LDEuMzg3MSwxLjE4NjIyLDEuMTA4MTgsMS4wNDQ3OCwxLjIxMDcsMS4xODYyMiwuNzUxNTUsLjk0OTk0LDEuMjg4MjYsMS4yMTQwOCwxLjIxNDA4LC45MTA1NiwxLC45MTU3MiwuOTc1NCwuNjQ2NjMsMS4xODMyOCwxLjI0ODY2LDEuMDQ0NzgsMS4xNDE2OSwxLjE1NzQ5LDEuMTczODksLjcxNzAzLC45NzM2MywuOTczNjMsLjk3MzYzLC45NzM2MywuOTczNjMsLjk3MzYzLC45MzUwNiwuODY0MSwuNzk3OTUsLjc5Nzk1LC43OTc5NSwuNzk3OTUsMS4xNDA2LDEuMTQwNiwxLjE0MDYsMS4xNDA2LDEuMDIwOTYsMS4wOTM5OCwuOTc0MjYsLjk3NDI2LC45NzQyNiwuOTc0MjYsLjk3NDI2LDEuMjEwNywuOTc0ODksMS4wMDEzNSwxLjAwMTM1LDEuMDAxMzUsMS4wMDEzNSwuOTA5OTYsLjkyMDk0LDEuMDI3OTgsLjk2NzUyLC45Njc1MiwuOTY3NTIsLjk2NzUyLC45Njc1MiwuOTY3NTIsLjkzMTM2LC44NjMwNCwuOTcyNzgsLjk3Mjc4LC45NzI3OCwuOTcyNzgsMS4wMjI4NSwxLjAyMjg1LDEuMDIyODUsMS4wMjI4NSwuOTcxMjIsLjk5MDQxLDEsMSwxLDEsMSwxLjI4ODI2LDEuMDAwOCwuOTkwNDEsLjk5MDQxLC45OTA0MSwuOTkwNDEsLjk2NzUyLDEuMDE1MTksLjk2NzUyLC45NzM2MywuOTY3NTIsLjk3MzYzLC45Njc1MiwuOTczNjMsLjk2NzUyLC44NjQxLC44NjMwNCwuODY0MSwuODYzMDQsLjg2NDEsLjg2MzA0LC44NjQxLC44NjMwNCwxLjAyMDk2LDEuMDMwNTcsMS4wMjA5NiwxLjAzNTE3LC43OTc5NSwuOTcyNzgsLjc5Nzk1LC45NzI3OCwuNzk3OTUsLjk3Mjc4LC43OTc5NSwuOTcyNzgsLjc5Nzk1LC45NzI3OCwuOTE0LDEuMDEzNTksLjkxNCwxLjAxMzU5LC45MTQsMS4wMTM1OSwxLDEsMS4wNjA4NSwuOTg1NjEsMS4wNjA4NSwxLjAwODc5LDEuMTQwNiwxLjAyMjg1LDEuMTQwNiwxLjAyMjg1LDEuMTQwNiwxLjAyMjg1LDEuMTQwNiwxLjAyMjg1LDEuMTQwNiwxLjAyMjg1LC45NzEzOCwxLjA4NjkyLC44MDA3LDEuMDIyODUsMSwxLDEuMDA1MjcsLjgzNjkzLDEuMDIyODUsMSwxLC44MzY5MywuOTQ1NSwuODM2OTMsLjkwNDE4LC44MzY5MywxLjEzMDA1LDEuMDkzOTgsLjk5MDQxLDEsMSwxLjA5Mzk4LC45OTA0MSwuOTY2OTIsMS4wOTI1MSwuOTkwNDEsLjk3NDg5LDEuMDAwOCwuOTc0ODksMS4wMDA4LC45NzQ4OSwxLjAwMDgsLjkzOTk0LC45NzkzMSwuOTAzOTksMS4wMjI1OCwxLDEsLjkwMzk5LDEuMDIyNTgsLjg0MDQxLC43OTEwNCwuODQwNDEsLjc5MTA0LC44NDA0MSwuNzkxMDQsLjg0MDQxLC43OTEwNCwxLDEsLjk1OTIzLDEuMDcwMzQsLjk1OTIzLDEuMTY4NjIsMS4wMDEzNSwuOTkwNDEsMS4wMDEzNSwuOTkwNDEsMS4wMDEzNSwuOTkwNDEsMS4wMDEzNSwuOTkwNDEsMS4wMDEzNSwuOTkwNDEsMS4wMDEzNSwuOTkwNDEsMS4wNjQ2NywxLjAyNTExLC45MDk5NiwuOTY3NTIsLjkwOTk2LC45OTM2MSwuOTU4MDEsLjk5MzYxLC45NTgwMSwuOTkzNjEsLjk1ODAxLDEuMDc3MzMsMS4wMzQyNCwuOTczNjMsLjk2NzUyLC45MzUwNiwuOTMxMzYsLjk3NDg5LDEuMDAwOCwxLDEsLjk1OTIzLDEuMTY4NjIsMS4xNTEwMywxLjE1MTAzLDEuMDExNzMsMS4wMzk1OSwuNzU5NTMsLjgxMzc4LC43OTkxMiwxLjE1MTAzLDEuMjE5OTQsLjk1MTYxLC44NzgxNSwxLjAxMTQ5LC44MTUyNSwuNzY3NiwuOTgxNjcsMS4wMTEzNCwxLjAyNTQ2LC44NDA5NywxLjAzMDg5LDEuMTgxMDIsLjk3MzYzLC44ODc3NiwuODUxMzQsLjk3ODI2LC43OTc5NSwuOTkzNjEsMS4wNjA4NSwuOTc0ODksMS4xNDA2LC44OTg1OCwxLjAzODgsMS4xNDg4OSwxLjA5Mzk4LC44NjAzOSwuOTc0ODksMS4wNTk1LC45MjA5NCwuOTQ3OTMsLjk1OTIzLC45MDk5NiwuOTkzNDYsLjk4MjQzLDEuMDIxMTIsLjk1NDkzLDEuMTQwNiwuOTA5OTYsMS4wMzU3NCwxLjAyNTk3LDEuMDAwOCwxLjE4MTAyLDEuMDY2MjgsMS4wMzU3NCwxLjAxOTIsMS4wMTkzMiwxLjAwODg2LC45NzUzMSwxLjAxMDYsMS4wMDA4LDEuMTMxODksMS4xODEwMiwxLjAyMjc3LC45ODY4MywxLjAwMTYsLjk5NTYxLDEuMDcyMzcsMS4wMDA4LC45MDQzNCwuOTk5MjEsLjkzODAzLC44OTY1LDEuMjMwODUsMS4wNjYyOCwxLjA0OTgzLC45NjI2OCwxLjA0OTksLjk4NDM5LDEuMTgxMDIsMS4wNjYyOCwxLjAwMDgsMS4wNjYyOCwuOTg0MzksLjc5Nzk1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDk0NjYsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjk3Mjc4LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDIwNjUsMSwxLDEsMSwxLDEsMS4wNjQ2NywxLjAyNTExLDEuMDY0NjcsMS4wMjUxMSwxLjA2NDY3LDEuMDI1MTEsLjkwOTk2LC45Njc1MiwxLDEuMjE0MDgsLjg5OTAzLDEsMSwuNzUxNTUsMS4wNDM5NCwxLjA0Mzk0LDEuMDQzOTQsMS4wNDM5NCwuOTg2MzMsLjk4NjMzLC45ODYzMywuNzMwNDcsLjczMDQ3LDEuMjA2NDIsLjkxMjExLDEuMjU2MzUsMS4yMjIsMS4wMjk1NiwxLjAzMzcyLDEuMDMzNzIsLjk2MDM5LDEuMjQ2MzMsMSwxLjEyNDU0LC45MzUwMywxLjAzNDI0LDEuMTk2ODcsMS4wMzQyNCwxLDEsMSwuNzcxLDEsMSwxLjE1NzQ5LDEuMTU3NDksMS4xNTc0OSwxLjEwOTQ4LC44NjI3OSwuOTQ0MzQsLjg2Mjc5LC45NDQzNCwuODYxODIsMSwxLDEuMTY4OTcsMSwuOTYwODUsLjkwMTM3LDEuMjEwNywxLjE4NDE2LDEuMTM5NzMsLjY5ODI1LC45NzE2LDIuMTAzMzksMS4yOTAwNCwxLjI5MDA0LDEuMjExNzIsMS4yOTAwNCwxLjI5MDA0LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS40MjYwMywxLC45OTg2MiwuOTk4NjIsMSwuODcwMjUsLjg3MDI1LC44NzAyNSwuODcwMjUsMS4xODg3NCwxLjQyNjAzLDEsMS40MjYwMywxLjQyNjAzLC45OTg2MiwxLDEsMSwxLDEsMS4yODg2LDEuMDQzMTUsMS4xNTI5NiwxLjM0MTYzLDEsMSwxLDEuMDkxOTMsMS4wOTE5MywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV0sdC5TZWdvZXVpQm9sZE1ldHJpY3M9e2xpbmVIZWlnaHQ6MS4zMzAwOCxsaW5lR2FwOjB9LHQuU2Vnb2V1aUJvbGRJdGFsaWNGYWN0b3JzPVsxLjc2NzM4LDEsMSwuOTg5NDYsMS4wMzk1OSwxLjA0MDE2LDEuMDI4MDksMS4wMzYsLjk3NjM5LDEuMTA5NTMsMS4yMzIwMywxLjExMTQ0LDEuMTExNDQsMS4xNjkzOSwxLjIxMjM3LC45NzU0LDEuMjEyNjEsLjk3NTQsMS41OTc1NCwxLjAzNiwxLjAzNiwxLjAzNiwxLjAzNiwxLjAzNiwxLjAzNiwxLjAzNiwxLjAzNiwxLjAzNiwxLjAzNiwuODEzNzgsLjgxMzc4LDEuMjEyMzcsMS4yMTIzNywxLjIxMjM3LC43MzU0MSwuOTc4NDcsLjk3MzYzLC44OTcyMywuODc4OTcsMS4wNDI2LC43OTQyOSwuODUyOTIsLjkxMTQ5LDEuMDU4MTUsMS4xNDA2LC43OTYzMSwuOTAxMjgsLjgzODUzLDEuMDQzOTYsMS4xMDYxNSwuOTc1NTIsLjk0NDM2LC45NzU1MiwuODg2NDEsLjgwNTI3LC45NjA4MywxLjAwMTM1LDEsMS4wNjc3NywuOTgxNywuOTExNDIsLjk5MzYxLDEuMTExNDQsMS41NzI5MywxLjExMTQ0LDEuMjEyMzcsLjc0NjI3LDEuMzE4MTgsMS4wNjU4NSwuOTcwNDIsLjgzMDU1LC45NzA0MiwuOTM1MDMsMS4xMjYxLC45NzA0MiwuOTc5MjIsMS4xNDIzNiwuOTQ1NTIsMS4wMTA1NCwxLjE0MjM2LDEuMDI0NzEsLjk3OTIyLC45NDE2NSwuOTcwNDIsLjk3MDQyLDEuMDI3NiwuNzg5MjksMS4xMjYxLC45NzkyMiwuOTU4NzQsMS4wMjE5NywuOTg1MDcsLjk2NzUyLC45NzE2OCwuOTUxMDcsMS4xNjU3OSwuOTUxMDcsMS4yMTIzNywxLjAzOTU5LDEuMDM2LDEuMDM2LDEsMS4wMzYsMS4xNjU3OSwuODczNTcsMS4zMTgxOCwxLjE4NzU0LDEuMjY3ODEsMS4wNTM1NiwxLjIxMjM3LDEuMTg2MjIsLjc5NDg3LC45NDk5NCwxLjI5MDA0LDEuMjQwNDcsMS4yNDA0NywxLjMxODE4LDEsLjkxNDg0LC45NzU0LDEuMzE4MTgsMS4xMzQ5LDEuMjQ4NjYsMS4wNTM1NiwxLjEzOTM0LDEuMTU1NzQsMS4xNzM4OSwuNzM1NDEsLjk3MzYzLC45NzM2MywuOTczNjMsLjk3MzYzLC45NzM2MywuOTczNjMsLjk0Mzg1LC44Nzg5NywuNzk0MjksLjc5NDI5LC43OTQyOSwuNzk0MjksMS4xNDA2LDEuMTQwNiwxLjE0MDYsMS4xNDA2LDEuMDQyNiwxLjEwNjE1LC45NzU1MiwuOTc1NTIsLjk3NTUyLC45NzU1MiwuOTc1NTIsMS4yMTIzNywuOTc1NTIsMS4wMDEzNSwxLjAwMTM1LDEuMDAxMzUsMS4wMDEzNSwuOTExNDIsLjk0NDM2LC45ODcyMSwxLjA2NTg1LDEuMDY1ODUsMS4wNjU4NSwxLjA2NTg1LDEuMDY1ODUsMS4wNjU4NSwuOTY3MDUsLjgzMDU1LC45MzUwMywuOTM1MDMsLjkzNTAzLC45MzUwMywxLjE0MjM2LDEuMTQyMzYsMS4xNDIzNiwxLjE0MjM2LC45MzEyNSwuOTc5MjIsLjk0MTY1LC45NDE2NSwuOTQxNjUsLjk0MTY1LC45NDE2NSwxLjI5MDA0LC45NDE2NSwuOTc5MjIsLjk3OTIyLC45NzkyMiwuOTc5MjIsLjk2NzUyLC45NzA0MiwuOTY3NTIsLjk3MzYzLDEuMDY1ODUsLjk3MzYzLDEuMDY1ODUsLjk3MzYzLDEuMDY1ODUsLjg3ODk3LC44MzA1NSwuODc4OTcsLjgzMDU1LC44Nzg5NywuODMwNTUsLjg3ODk3LC44MzA1NSwxLjA0MjYsMS4wMDMzLDEuMDQyNiwuOTcwNDIsLjc5NDI5LC45MzUwMywuNzk0MjksLjkzNTAzLC43OTQyOSwuOTM1MDMsLjc5NDI5LC45MzUwMywuNzk0MjksLjkzNTAzLC45MTE0OSwuOTcwNDIsLjkxMTQ5LC45NzA0MiwuOTExNDksLjk3MDQyLDEsMSwxLjA1ODE1LC45NzkyMiwxLjA1ODE1LC45NzkyMiwxLjE0MDYsMS4xNDIzNiwxLjE0MDYsMS4xNDIzNiwxLjE0MDYsMS4xNDIzNiwxLjE0MDYsMS4xNDIzNiwxLjE0MDYsMS4xNDIzNiwuOTc0NDEsMS4wNDMwMiwuNzk2MzEsMS4wMTU4MiwxLDEsMS4wMTA1NCwuODM4NTMsMS4xNDIzNiwxLDEsLjgzODUzLDEuMDkxMjUsLjgzODUzLC45MDQxOCwuODM4NTMsMS4xOTUwOCwxLjEwNjE1LC45NzkyMiwxLDEsMS4xMDYxNSwuOTc5MjIsMS4wMTAzNCwxLjEwNDY2LC45NzkyMiwuOTc1NTIsLjk0MTY1LC45NzU1MiwuOTQxNjUsLjk3NTUyLC45NDE2NSwuOTE2MDIsLjkxOTgxLC44ODY0MSwxLjAyNzYsMSwxLC44ODY0MSwxLjAyNzYsLjgwNTI3LC43ODkyOSwuODA1MjcsLjc4OTI5LC44MDUyNywuNzg5MjksLjgwNTI3LC43ODkyOSwxLDEsLjk2MDgzLDEuMDU0MDMsLjk1OTIzLDEuMTY4NjIsMS4wMDEzNSwuOTc5MjIsMS4wMDEzNSwuOTc5MjIsMS4wMDEzNSwuOTc5MjIsMS4wMDEzNSwuOTc5MjIsMS4wMDEzNSwuOTc5MjIsMS4wMDEzNSwuOTc5MjIsMS4wNjc3NywxLjAyMTk3LC45MTE0MiwuOTY3NTIsLjkxMTQyLC45OTM2MSwuOTcxNjgsLjk5MzYxLC45NzE2OCwuOTkzNjEsLjk3MTY4LDEuMjMxOTksMS4wMzYsLjk3MzYzLDEuMDY1ODUsLjk0Mzg1LC45NjcwNSwuOTc1NTIsLjk0MTY1LDEsMSwuOTYwODMsMS4xMjYxLDEuMzE4MTgsMS4zMTgxOCwxLjMxODE4LDEuMzE4MTgsMS4zMTgxOCwxLjMxODE4LDEuMzE4MTgsMS4zMTgxOCwxLjMxODE4LC45NTE2MSwxLjI3MTI2LDEuMDA4MTEsLjgzMjg0LC43NzcwMiwuOTkxMzcsLjk1MjUzLDEuMDM0NywuODYxNDIsMS4wNzIwNSwxLjE0MjM2LC45NzM2MywuODk3MjMsLjg2ODY5LDEuMDk4MTgsLjc5NDI5LC45OTM2MSwxLjA1ODE1LC45NzU1MiwxLjE0MDYsLjkwMTI4LDEuMDY2NjIsMS4wNDM5NiwxLjEwNjE1LC44NDkxOCwuOTc1NTIsMS4wNDY5NCwuOTQ0MzYsLjk4MDE1LC45NjA4MywuOTExNDIsMS4wMDM1NiwuOTgxNywxLjAxOTQ1LC45ODk5OSwxLjE0MDYsLjkxMTQyLDEuMDQ5NjEsLjk4OTgsMS4wMDYzOSwxLjE0MjM2LDEuMDc1MTQsMS4wNDk2MSwuOTk2MDcsMS4wMjg5NywxLjAwOCwuOTg5OCwuOTUxMzQsMS4wMDYzOSwxLjExMTIxLDEuMTQyMzYsMS4wMDUxOCwuOTc5ODEsMS4wMjE4NiwxLDEuMDg1NzgsLjk0MTY1LC45OTMxNCwuOTgzODcsLjkzMDI4LC45MzM3NywxLjM1MTI1LDEuMDc1MTQsMS4xMDY4NywuOTM0OTEsMS4wNDIzMiwxLjAwMzUxLDEuMTQyMzYsMS4wNzUxNCwuOTQxNjUsMS4wNzUxNCwxLjAwMzUxLC43OTQyOSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjA5MDk3LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MzUwMywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTY2MDksMSwxLDEsMSwxLDEsMS4wNjc3NywxLjAyMTk3LDEuMDY3NzcsMS4wMjE5NywxLjA2Nzc3LDEuMDIxOTcsLjkxMTQyLC45Njc1MiwxLDEuMjEyNjEsLjg5OTAzLDEsMSwuNzUxNTUsMS4wNDc0NSwxLjA0NzQ1LDEuMDQ3NDUsMS4wNDM5NCwuOTg2MzMsLjk4NjMzLC45ODYzMywuNzI5NTksLjcyOTU5LDEuMjA1MDIsLjkxNDA2LDEuMjY1MTQsMS4yMjIsMS4wMjk1NiwxLjAzMzcyLDEuMDMzNzIsLjk2MDM5LDEuMjQ2MzMsMSwxLjA5MTI1LC45MzMyNywxLjAzMzM2LDEuMTY1NDEsMS4wMzYsMSwxLDEsLjc3MSwxLDEsMS4xNTU3NCwxLjE1NTc0LDEuMTU1NzQsMS4xNTU3NCwuODYzNjQsLjk0NDM0LC44NjI3OSwuOTQ0MzQsLjg2MjI0LDEsMSwxLjE2Nzk4LDEsLjk2MDg1LC45MDA2OCwxLjIxMjM3LDEuMTg0MTYsMS4xMzkwNCwuNjk4MjUsLjk3MTYsMi4xMDMzOSwxLjI5MDA0LDEuMjkwMDQsMS4yMTMzOSwxLjI5MDA0LDEuMjkwMDQsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjQyNjAzLDEsLjk5ODYyLC45OTg2MiwxLC44NzAyNSwuODcwMjUsLjg3MDI1LC44NzAyNSwxLjE4Nzc1LDEuNDI2MDMsMSwxLjQyNjAzLDEuNDI2MDMsLjk5ODYyLDEsMSwxLDEsMSwxLjI4ODYsMS4wNDMxNSwxLjE1Mjk2LDEuMzQxNjMsMSwxLDEsMS4xMzI2OSwxLjEzMjY5LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXSx0LlNlZ29ldWlCb2xkSXRhbGljTWV0cmljcz17bGluZUhlaWdodDoxLjMzMDA4LGxpbmVHYXA6MH0sdC5TZWdvZXVpSXRhbGljRmFjdG9ycz1bMS43NjczOCwxLDEsLjk4OTQ2LDEuMTQ3NjMsMS4wNTM2NSwxLjA2MjM0LC45NjkyNywuOTI1ODYsMS4xNTM3MywxLjE4NDE0LC45MTM0OSwuOTEzNDksMS4wNzQwMywxLjE3MzA4LC43ODM4MywxLjIwMDg4LC43ODM4MywxLjQyNTMxLC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuNzgzODMsLjc4MzgzLDEuMTczMDgsMS4xNzMwOCwxLjE3MzA4LC43NzM0OSwuOTQ1NjUsLjk0NzI5LC44NTk0NCwuODg1MDYsLjk4NTgsLjc0ODE3LC44MDAxNiwuODg0NDksLjk4MDM5LC45NTc4MiwuNjkyMzgsLjg5ODk4LC44MzIzMSwuOTgxODMsMS4wMzk4OSwuOTY5MjQsLjg2MjM3LC45NjkyNCwuODA1OTUsLjc0NTI0LC44NjA5MSwuOTU0MDIsLjk0MTQzLC45ODQ0OCwuODg1OCwuODMwODksLjkzMjg1LDEuMDk0OSwxLjM5MDE2LDEuMDk0OSwxLjQ1OTk0LC43NDYyNywxLjA0ODM5LC45NzQ1NCwuOTc0NTQsLjg3MjA3LC45NzQ1NCwuODc1MzMsMS4wNjE1MSwuOTc0NTQsMS4wMDE3NiwxLjE2NDg0LDEuMDgxMzIsLjk4MDQ3LDEuMTY0ODQsMS4wMjk4OSwxLjAxMDU0LC45NjIyNSwuOTc0NTQsLjk3NDU0LDEuMDY1OTgsLjc5MDA0LDEuMTYzNDQsMS4wMDM1MSwuOTQ2MjksLjk5NzMsLjkxMDE2LC45Njc3NywuOTA0MywuOTEwODIsLjkyNDgxLC45MTA4MiwxLjE3MzA4LC45NTc0OCwuOTY5MjcsLjk2OTI3LDEsLjk2OTI3LC45MjQ4MSwuODA1OTcsMS4wNDgzOSwxLjIzMzkzLDEuMTc4MSwuOTI0NSwxLjE3MzA4LDEuMjA4MDgsLjYzMjE4LC45NDI2MSwxLjI0ODIyLDEuMDk5NzEsMS4wOTk3MSwxLjA0ODM5LDEsLjg1MjczLC43ODAzMiwxLjA0ODM5LDEuMDk5NzEsMS4yMjMyNiwuOTI0NSwxLjA5ODM2LDEuMTM1MjUsMS4xNTIyMiwuNzA0MjQsLjk0NzI5LC45NDcyOSwuOTQ3MjksLjk0NzI5LC45NDcyOSwuOTQ3MjksLjg1NDk4LC44ODUwNiwuNzQ4MTcsLjc0ODE3LC43NDgxNywuNzQ4MTcsLjk1NzgyLC45NTc4MiwuOTU3ODIsLjk1NzgyLC45ODU4LDEuMDM5ODksLjk2OTI0LC45NjkyNCwuOTY5MjQsLjk2OTI0LC45NjkyNCwxLjE3MzA4LC45NjkyNCwuOTU0MDIsLjk1NDAyLC45NTQwMiwuOTU0MDIsLjgzMDg5LC44NjIzNywuODg0MDksLjk3NDU0LC45NzQ1NCwuOTc0NTQsLjk3NDU0LC45NzQ1NCwuOTc0NTQsLjkyOTE2LC44NzIwNywuODc1MzMsLjg3NTMzLC44NzUzMywuODc1MzMsLjkzMTQ2LC45MzE0NiwuOTMxNDYsLjkzMTQ2LC45Mzg1NCwxLjAxMDU0LC45NjIyNSwuOTYyMjUsLjk2MjI1LC45NjIyNSwuOTYyMjUsMS4yNDgyMiwuODc2MSwxLjAwMzUxLDEuMDAzNTEsMS4wMDM1MSwxLjAwMzUxLC45Njc3NywuOTc0NTQsLjk2Nzc3LC45NDcyOSwuOTc0NTQsLjk0NzI5LC45NzQ1NCwuOTQ3MjksLjk3NDU0LC44ODUwNiwuODcyMDcsLjg4NTA2LC44NzIwNywuODg1MDYsLjg3MjA3LC44ODUwNiwuODcyMDcsLjk4NTgsLjk1MzkxLC45ODU4LC45NzQ1NCwuNzQ4MTcsLjg3NTMzLC43NDgxNywuODc1MzMsLjc0ODE3LC44NzUzMywuNzQ4MTcsLjg3NTMzLC43NDgxNywuODc1MzMsLjg4NDQ5LC45NzQ1NCwuODg0NDksLjk3NDU0LC44ODQ0OSwuOTc0NTQsMSwxLC45ODAzOSwxLjAwMTc2LC45ODAzOSwxLjAwMTc2LC45NTc4MiwuOTMxNDYsLjk1NzgyLC45MzE0NiwuOTU3ODIsLjkzMTQ2LC45NTc4MiwxLjE2NDg0LC45NTc4MiwuOTMxNDYsLjg0NDIxLDEuMTI3NjEsLjY5MjM4LDEuMDgxMzIsMSwxLC45ODA0NywuODMyMzEsMS4xNjQ4NCwxLDEsLjg0NzIzLDEuMDQ4NjEsLjg0NzIzLC43ODc1NSwuODMyMzEsMS4yMzczNiwxLjAzOTg5LDEuMDEwNTQsMSwxLDEuMDM5ODksMS4wMTA1NCwuOTg1NywxLjAzODQ5LDEuMDEwNTQsLjk2OTI0LC45NjIyNSwuOTY5MjQsLjk2MjI1LC45NjkyNCwuOTYyMjUsLjkyMzgzLC45MDE3MSwuODA1OTUsMS4wNjU5OCwxLDEsLjgwNTk1LDEuMDY1OTgsLjc0NTI0LC43OTAwNCwuNzQ1MjQsLjc5MDA0LC43NDUyNCwuNzkwMDQsLjc0NTI0LC43OTAwNCwxLDEsLjg2MDkxLDEuMDI3NTksLjg1NzcxLDEuMTYzNDQsLjk1NDAyLDEuMDAzNTEsLjk1NDAyLDEuMDAzNTEsLjk1NDAyLDEuMDAzNTEsLjk1NDAyLDEuMDAzNTEsLjk1NDAyLDEuMDAzNTEsLjk1NDAyLDEuMDAzNTEsLjk4NDQ4LC45OTczLC44MzA4OSwuOTY3NzcsLjgzMDg5LC45MzI4NSwuOTA0MywuOTMyODUsLjkwNDMsLjkzMjg1LC45MDQzLDEuMzE4NjgsLjk2OTI3LC45NDcyOSwuOTc0NTQsLjg1NDk4LC45MjkxNiwuOTY5MjQsLjg3NjEsMSwxLC44NjA5MSwxLjE2MzQ0LDEuMDQ4MzksMS4wNDgzOSwxLjA0ODM5LDEuMDQ4MzksMS4wNDgzOSwxLjA0ODM5LDEuMDQ4MzksMS4wNDgzOSwxLjA0ODM5LC44MTk2NSwuODE5NjUsLjk0NzI5LC43ODAzMiwuNzEwMjIsLjkwODgzLC44NDE3MSwuOTk4NzcsLjc3NTk2LDEuMDU3MzQsMS4yLC45NDcyOSwuODU5NDQsLjgyNzkxLC45NjA3LC43NDgxNywuOTMyODUsLjk4MDM5LC45NjkyNCwuOTU3ODIsLjg5ODk4LC45ODMxNiwuOTgxODMsMS4wMzk4OSwuNzg2MTQsLjk2OTI0LC45NzY0MiwuODYyMzcsLjg2MDc1LC44NjA5MSwuODMwODksLjkwMDgyLC44ODU4LC45NzI5NiwxLjAxMjg0LC45NTc4MiwuODMwODksMS4wOTc2LDEuMDQsMS4wMzM0MiwxLjIsMS4wNjc1LDEuMDk3NiwuOTgyMDUsMS4wMzgwOSwxLjA1MDk3LDEuMDQsLjk1MzY0LDEuMDMzNDIsMS4wNTQwMSwxLjIsMS4wMjE0OCwxLjAxMTksMS4wNDcyNCwxLjAxMjcsMS4wMjczMiwuOTYyMjUsLjg5NjUsLjk3NzgzLC45MzU3NCwuOTQ4MTgsMS4zMDY3OSwxLjA2NzUsMS4xMTgyNiwuOTk4MjEsMS4wNTU3LDEuMDMyNiwxLjIsMS4wNjc1LC45NjIyNSwxLjA2NzUsMS4wMzI2LC43NDgxNywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjAzNzU0LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC44NzUzMywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTg3MDUsMSwxLDEsMSwxLDEsLjk4NDQ4LC45OTczLC45ODQ0OCwuOTk3MywuOTg0NDgsLjk5NzMsLjgzMDg5LC45Njc3NywxLDEuMjAwODgsLjg5OTAzLDEsMSwuNzUxNTUsLjk0OTQ1LC45NDk0NSwuOTQ5NDUsLjk0OTQ1LDEuMTIzMTcsMS4xMjMxNywxLjEyMzE3LC42NzYwMywuNjc2MDMsMS4xNTYyMSwuNzM1ODQsMS4yMTE5MSwxLjIyMTM1LDEuMDY0ODMsLjk0ODY4LC45NDg2OCwuOTU5OTYsMS4yNDYzMywxLDEuMDc0OTcsLjg3NzA5LC45NjkyNywxLjAxNDczLC45NjkyNywxLDEsMSwuNzcyOTUsMSwxLDEuMDk4MzYsMS4wOTgzNiwxLjA5ODM2LDEuMDE1MjIsLjg2MzIxLC45NDQzNCwuODY0OSwuOTQ0MzQsLjg2MTgyLDEsMSwxLjA4MywxLC45MTU3OCwuODY0MzgsMS4xNzMwOCwxLjE4NDE2LDEuMTQ1ODksLjY5ODI1LC45NzYyMiwxLjk2NzkxLDEuMjQ4MjIsMS4yNDgyMiwxLjE3MzA4LDEuMjQ4MjIsMS4yNDgyMiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuNDI2MDMsMSwuOTk4NjIsLjk5ODYyLDEsLjg3MDI1LC44NzAyNSwuODcwMjUsLjg3MDI1LDEuMTc5ODQsMS40MjYwMywxLDEuNDI2MDMsMS40MjYwMywuOTk4NjIsMSwxLDEsMSwxLDEuMjg4NiwxLjA0MzE1LDEuMTUyOTYsMS4zNDE2MywxLDEsMSwxLjEwNzQyLDEuMTA3NDIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLHQuU2Vnb2V1aUl0YWxpY01ldHJpY3M9e2xpbmVIZWlnaHQ6MS4zMzAwOCxsaW5lR2FwOjB9LHQuU2Vnb2V1aVJlZ3VsYXJGYWN0b3JzPVsxLjc2NzM4LDEsMSwuOTg1OTQsMS4wMjI4NSwxLjEwNDU0LDEuMDYyMzQsLjk2OTI3LC45MjAzNywxLjE5OTg1LDEuMjA0NiwuOTA2MTYsLjkwNjE2LDEuMDcxNTIsMS4xNzE0LC43ODAzMiwxLjIwMDg4LC43ODAzMiwxLjQwMjQ2LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuNzgwMzIsLjc4MDMyLDEuMTcxNCwxLjE3MTQsMS4xNzE0LC44MDU5NywuOTQwODQsLjk2NzA2LC44NTk0NCwuODU3MzQsLjk3MDkzLC43NTg0MiwuNzk5MzYsLjg4MTk4LC45ODMxLC45NTc4MiwuNzEzODcsLjg2OTY5LC44NDYzNiwxLjA3Nzk2LDEuMDM1ODQsLjk2OTI0LC44Mzk2OCwuOTY5MjQsLjgyODI2LC43OTY0OSwuODU3NzEsLjk1MTMyLC45MzExOSwuOTg5NjUsLjg4NDMzLC44Mjg3LC45MzM2NSwxLjA4NjEyLDEuMzYzOCwxLjA4NjEyLDEuNDU3ODYsLjc0NjI3LC44MDQ5OSwuOTE0ODQsMS4wNTcwNywuOTIzODMsMS4wNTg4MiwuOTQwMywxLjEyNjU0LDEuMDU4ODIsMS4wMTc1NiwxLjA5MDExLDEuMDkwMTEsLjk5NDE0LDEuMDkwMTEsMS4wMzQsMS4wMTc1NiwxLjA1MzU2LDEuMDU3MDcsMS4wNTg4MiwxLjA0Mzk5LC44NDg2MywxLjIxOTY4LDEuMDE3NTYsLjk1ODAxLDEuMDAwNjgsLjkxNzk3LC45Njc3NywuOTA0MywuOTAzNTEsLjkyMTA1LC45MDM1MSwxLjE3MTQsLjg1MzM3LC45NjkyNywuOTY5MjcsLjk5OTEyLC45NjkyNywuOTIxMDUsLjgwNTk3LDEuMjQzNCwxLjIwODA4LDEuMDU5MzcsLjkwOTU3LDEuMTcxNCwxLjIwODA4LC43NTE1NSwuOTQyNjEsMS4yNDY0NCwxLjA5OTcxLDEuMDk5NzEsLjg0NzUxLDEsLjg1MjczLC43ODAzMiwuNjE1ODQsMS4wNTQyNSwxLjE3OTE0LC45MDk1NywxLjA4NjY1LDEuMTE1OTMsMS4xNDE2OSwuNzMzODEsLjk2NzA2LC45NjcwNiwuOTY3MDYsLjk2NzA2LC45NjcwNiwuOTY3MDYsLjg2MDM1LC44NTczNCwuNzU4NDIsLjc1ODQyLC43NTg0MiwuNzU4NDIsLjk1NzgyLC45NTc4MiwuOTU3ODIsLjk1NzgyLC45NzA5MywxLjAzNTg0LC45NjkyNCwuOTY5MjQsLjk2OTI0LC45NjkyNCwuOTY5MjQsMS4xNzE0LC45NjkyNCwuOTUxMzIsLjk1MTMyLC45NTEzMiwuOTUxMzIsLjgyODcsLjgzOTY4LC44OTA0OSwuOTE0ODQsLjkxNDg0LC45MTQ4NCwuOTE0ODQsLjkxNDg0LC45MTQ4NCwuOTM1NzUsLjkyMzgzLC45NDAzLC45NDAzLC45NDAzLC45NDAzLC44NzE3LC44NzE3LC44NzE3LC44NzE3LDEuMDA1MjcsMS4wMTc1NiwxLjA1MzU2LDEuMDUzNTYsMS4wNTM1NiwxLjA1MzU2LDEuMDUzNTYsMS4yNDY0NCwuOTU5MjMsMS4wMTc1NiwxLjAxNzU2LDEuMDE3NTYsMS4wMTc1NiwuOTY3NzcsMS4wNTcwNywuOTY3NzcsLjk2NzA2LC45MTQ4NCwuOTY3MDYsLjkxNDg0LC45NjcwNiwuOTE0ODQsLjg1NzM0LC45MjM4MywuODU3MzQsLjkyMzgzLC44NTczNCwuOTIzODMsLjg1NzM0LC45MjM4MywuOTcwOTMsMS4wOTY5LC45NzA5MywxLjA1ODgyLC43NTg0MiwuOTQwMywuNzU4NDIsLjk0MDMsLjc1ODQyLC45NDAzLC43NTg0MiwuOTQwMywuNzU4NDIsLjk0MDMsLjg4MTk4LDEuMDU4ODIsLjg4MTk4LDEuMDU4ODIsLjg4MTk4LDEuMDU4ODIsMSwxLC45ODMxLDEuMDE3NTYsLjk4MzEsMS4wMTc1NiwuOTU3ODIsLjg3MTcsLjk1NzgyLC44NzE3LC45NTc4MiwuODcxNywuOTU3ODIsMS4wOTAxMSwuOTU3ODIsLjg3MTcsLjg0Nzg0LDEuMTE1NTEsLjcxMzg3LDEuMDkwMTEsMSwxLC45OTQxNCwuODQ2MzYsMS4wOTAxMSwxLDEsLjg0NjM2LDEuMDUzNiwuODQ2MzYsLjk0Mjk4LC44NDYzNiwxLjIzMjk3LDEuMDM1ODQsMS4wMTc1NiwxLDEsMS4wMzU4NCwxLjAxNzU2LDEuMDAzMjMsMS4wMzQ0NCwxLjAxNzU2LC45NjkyNCwxLjA1MzU2LC45NjkyNCwxLjA1MzU2LC45NjkyNCwxLjA1MzU2LC45MzA2NiwuOTgyOTMsLjgyODI2LDEuMDQzOTksMSwxLC44MjgyNiwxLjA0Mzk5LC43OTY0OSwuODQ4NjMsLjc5NjQ5LC44NDg2MywuNzk2NDksLjg0ODYzLC43OTY0OSwuODQ4NjMsMSwxLC44NTc3MSwxLjE3MzE4LC44NTc3MSwxLjIxOTY4LC45NTEzMiwxLjAxNzU2LC45NTEzMiwxLjAxNzU2LC45NTEzMiwxLjAxNzU2LC45NTEzMiwxLjAxNzU2LC45NTEzMiwxLjAxNzU2LC45NTEzMiwxLjAxNzU2LC45ODk2NSwxLjAwMDY4LC44Mjg3LC45Njc3NywuODI4NywuOTMzNjUsLjkwNDMsLjkzMzY1LC45MDQzLC45MzM2NSwuOTA0MywxLjA4NTcxLC45NjkyNywuOTY3MDYsLjkxNDg0LC44NjAzNSwuOTM1NzUsLjk2OTI0LC45NTkyMywxLDEsLjg1NzcxLDEuMjE5NjgsMS4xMTQzNywxLjExNDM3LC45MzEwOSwuOTEyMDIsLjYwNDExLC44NDE2NCwuNTU1NzIsMS4wMTE3MywuOTczNjEsLjgxODE4LC44MTgxOCwuOTY2MzUsLjc4MDMyLC43MjcyNywuOTIzNjYsLjk4NjAxLDEuMDM0MDUsLjc3OTY4LDEuMDk3OTksMS4yLC45NjcwNiwuODU5NDQsLjg1NjM4LC45NjQ5MSwuNzU4NDIsLjkzMzY1LC45ODMxLC45NjkyNCwuOTU3ODIsLjg2OTY5LC45NDE1MiwxLjA3Nzk2LDEuMDM1ODQsLjc4NDM3LC45NjkyNCwuOTg3MTUsLjgzOTY4LC44MzQ5MSwuODU3NzEsLjgyODcsLjk0NDkyLC44ODQzMywuOTI4NywxLjAwOTgsLjk1NzgyLC44Mjg3LDEuMDYyNSwuOTgyNDgsMS4wMzQyNCwxLjIsMS4wMTA3MSwxLjA2MjUsLjk1MjQ2LDEuMDM4MDksMS4wNDkxMiwuOTgyNDgsMS4wMDIyMSwxLjAzNDI0LDEuMDU0NDMsMS4yLDEuMDQ3ODUsLjk5NjA5LDEuMDAxNjksMS4wNTE3NiwuOTkzNDYsMS4wNTM1NiwuOTA4NywxLjAzMDA0LC45NTU0MiwuOTMxMTcsMS4yMzM2MiwxLjAxMDcxLDEuMDc4MzEsMS4wMjUxMiwxLjA1MjA1LDEuMDM1MDIsMS4yLDEuMDEwNzEsMS4wNTM1NiwxLjAxMDcxLDEuMDM1MDIsLjc1ODQyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDM3MTksMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjk0MDMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wNDAyMSwxLDEsMSwxLDEsMSwuOTg5NjUsMS4wMDA2OCwuOTg5NjUsMS4wMDA2OCwuOTg5NjUsMS4wMDA2OCwuODI4NywuOTY3NzcsMSwxLjIwMDg4LC44OTkwMywxLDEsLjc1MTU1LDEuMDMwNzcsMS4wMzA3NywxLjAzMDc3LDEuMDMwNzcsMS4xMzE5NiwxLjEzMTk2LDEuMTMxOTYsLjY3NDI4LC42NzQyOCwxLjE2MDM5LC43MzI5MSwxLjIwOTk2LDEuMjIxMzUsMS4wNjQ4MywuOTQ4NjgsLjk0ODY4LC45NTk5NiwxLjI0NjMzLDEsMS4wNzQ5NywuODc3OTYsLjk2OTI3LDEuMDE1MTgsLjk2OTI3LDEsMSwxLC43NzI5NSwxLDEsMS4xMDUzOSwxLjEwNTM5LDEuMTEzNTgsMS4wNjk2NywuODYyNzksLjk0NDM0LC44NjI3OSwuOTQ0MzQsLjg2MTgyLDEsMSwxLjA4MywxLC45MTU3OCwuODY1MDcsMS4xNzE0LDEuMTg0MTYsMS4xNDU4OSwuNjk4MjUsLjk3NjIyLDEuOTY5NywxLjI0ODIyLDEuMjQ4MjIsMS4xNzIzOCwxLjI0ODIyLDEuMjQ4MjIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjQyNjAzLDEsLjk5ODYyLC45OTg2MiwxLC44NzAyNSwuODcwMjUsLjg3MDI1LC44NzAyNSwxLjE4MDgzLDEuNDI2MDMsMSwxLjQyNjAzLDEuNDI2MDMsLjk5ODYyLDEsMSwxLDEsMSwxLjI4ODYsMS4wNDMxNSwxLjE1Mjk2LDEuMzQxNjMsMSwxLDEsMS4xMDkzOCwxLjEwOTM4LDEsMSwxLDEuMDU0MjUsMS4wOTk3MSwxLjA5OTcxLDEuMDk5NzEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXSx0LlNlZ29ldWlSZWd1bGFyTWV0cmljcz17bGluZUhlaWdodDoxLjMzMDA4LGxpbmVHYXA6MH19LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Qb3N0U2NyaXB0RXZhbHVhdG9yPXQuUG9zdFNjcmlwdENvbXBpbGVyPXQuUERGRnVuY3Rpb25GYWN0b3J5PXZvaWQgMCx0LmlzUERGRnVuY3Rpb249ZnVuY3Rpb24oZSl7bGV0IHQ7aWYoZSBpbnN0YW5jZW9mIG4uRGljdCl0PWU7ZWxzZXtpZighKGUgaW5zdGFuY2VvZiBvLkJhc2VTdHJlYW0pKXJldHVybiExO3Q9ZS5kaWN0fXJldHVybiB0LmhhcygiRnVuY3Rpb25UeXBlIil9LHIoMikscigxMzkpLHIoODQpLHIoOTMpLHIoOTQpLHIoOTcpLHIoOTkpLHIoMTAxKSxyKDEwNSkscigxMDgpLHIoMTE1KSxyKDE1OSk7dmFyIG49cigxNTApLGE9cigxNDQpLHM9cigyMDgpLG89cigxNTEpLGM9cigyMDkpO2Z1bmN0aW9uIGwoZSl7aWYoIUFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIG51bGw7Y29uc3QgdD1lLmxlbmd0aDtmb3IobGV0IHI9MDtyPHQ7cisrKWlmKCJudW1iZXIiIT10eXBlb2YgZVtyXSl7Y29uc3Qgcj1uZXcgQXJyYXkodCk7Zm9yKGxldCBuPTA7bjx0O24rKylyW25dPStlW25dO3JldHVybiByfXJldHVybiBlfXQuUERGRnVuY3Rpb25GYWN0b3J5PWNsYXNze2NvbnN0cnVjdG9yKGUpe2xldHt4cmVmOnQsaXNFdmFsU3VwcG9ydGVkOnI9ITB9PWU7dGhpcy54cmVmPXQsdGhpcy5pc0V2YWxTdXBwb3J0ZWQ9ITEhPT1yfWNyZWF0ZShlKXtjb25zdCB0PXRoaXMuZ2V0Q2FjaGVkKGUpO2lmKHQpcmV0dXJuIHQ7Y29uc3Qgcj1oLnBhcnNlKHt4cmVmOnRoaXMueHJlZixpc0V2YWxTdXBwb3J0ZWQ6dGhpcy5pc0V2YWxTdXBwb3J0ZWQsZm46ZSBpbnN0YW5jZW9mIG4uUmVmP3RoaXMueHJlZi5mZXRjaChlKTplfSk7cmV0dXJuIHRoaXMuX2NhY2hlKGUscikscn1jcmVhdGVGcm9tQXJyYXkoZSl7Y29uc3QgdD10aGlzLmdldENhY2hlZChlKTtpZih0KXJldHVybiB0O2NvbnN0IHI9aC5wYXJzZUFycmF5KHt4cmVmOnRoaXMueHJlZixpc0V2YWxTdXBwb3J0ZWQ6dGhpcy5pc0V2YWxTdXBwb3J0ZWQsZm5PYmo6ZSBpbnN0YW5jZW9mIG4uUmVmP3RoaXMueHJlZi5mZXRjaChlKTplfSk7cmV0dXJuIHRoaXMuX2NhY2hlKGUscikscn1nZXRDYWNoZWQoZSl7dmFyIHQ7bGV0IHI7aWYoZSBpbnN0YW5jZW9mIG4uUmVmP3I9ZTplIGluc3RhbmNlb2Ygbi5EaWN0P3I9ZS5vYmpJZDplIGluc3RhbmNlb2Ygby5CYXNlU3RyZWFtJiYocj1udWxsPT09KHQ9ZS5kaWN0KXx8dm9pZCAwPT09dD92b2lkIDA6dC5vYmpJZCkscil7Y29uc3QgZT10aGlzLl9sb2NhbEZ1bmN0aW9uQ2FjaGUuZ2V0QnlSZWYocik7aWYoZSlyZXR1cm4gZX1yZXR1cm4gbnVsbH1fY2FjaGUoZSx0KXt2YXIgcjtpZighdCl0aHJvdyBuZXcgRXJyb3IoJ1BERkZ1bmN0aW9uRmFjdG9yeS5fY2FjaGUgLSBleHBlY3RlZCAicGFyc2VkRnVuY3Rpb24iIGFyZ3VtZW50LicpO2xldCBhO2UgaW5zdGFuY2VvZiBuLlJlZj9hPWU6ZSBpbnN0YW5jZW9mIG4uRGljdD9hPWUub2JqSWQ6ZSBpbnN0YW5jZW9mIG8uQmFzZVN0cmVhbSYmKGE9bnVsbD09PShyPWUuZGljdCl8fHZvaWQgMD09PXI/dm9pZCAwOnIub2JqSWQpLGEmJnRoaXMuX2xvY2FsRnVuY3Rpb25DYWNoZS5zZXQobnVsbCxhLHQpfWdldCBfbG9jYWxGdW5jdGlvbkNhY2hlKCl7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIl9sb2NhbEZ1bmN0aW9uQ2FjaGUiLG5ldyBjLkxvY2FsRnVuY3Rpb25DYWNoZSl9fTtjbGFzcyBoe3N0YXRpYyBnZXRTYW1wbGVBcnJheShlLHQscixuKXtsZXQgYSxpLHM9MTtmb3IoYT0wLGk9ZS5sZW5ndGg7YTxpO2ErKylzKj1lW2FdO3MqPXQ7Y29uc3Qgbz1uZXcgQXJyYXkocyk7bGV0IGM9MCxsPTA7Y29uc3QgaD0xLygyKipyLTEpLHU9bi5nZXRCeXRlcygocypyKzcpLzgpO2xldCBkPTA7Zm9yKGE9MDthPHM7YSsrKXtmb3IoO2M8cjspbDw8PTgsbHw9dVtkKytdLGMrPTg7Yy09cixvW2FdPShsPj5jKSpoLGwmPSgxPDxjKS0xfXJldHVybiBvfXN0YXRpYyBwYXJzZShlKXtsZXR7eHJlZjp0LGlzRXZhbFN1cHBvcnRlZDpyLGZuOm59PWU7Y29uc3QgaT1uLmRpY3R8fG47c3dpdGNoKGkuZ2V0KCJGdW5jdGlvblR5cGUiKSl7Y2FzZSAwOnJldHVybiB0aGlzLmNvbnN0cnVjdFNhbXBsZWQoe3hyZWY6dCxpc0V2YWxTdXBwb3J0ZWQ6cixmbjpuLGRpY3Q6aX0pO2Nhc2UgMTpicmVhaztjYXNlIDI6cmV0dXJuIHRoaXMuY29uc3RydWN0SW50ZXJwb2xhdGVkKHt4cmVmOnQsaXNFdmFsU3VwcG9ydGVkOnIsZGljdDppfSk7Y2FzZSAzOnJldHVybiB0aGlzLmNvbnN0cnVjdFN0aWNoZWQoe3hyZWY6dCxpc0V2YWxTdXBwb3J0ZWQ6cixkaWN0Oml9KTtjYXNlIDQ6cmV0dXJuIHRoaXMuY29uc3RydWN0UG9zdFNjcmlwdCh7eHJlZjp0LGlzRXZhbFN1cHBvcnRlZDpyLGZuOm4sZGljdDppfSl9dGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIlVua25vd24gdHlwZSBvZiBmdW5jdGlvbiIpfXN0YXRpYyBwYXJzZUFycmF5KGUpe2xldHt4cmVmOnQsaXNFdmFsU3VwcG9ydGVkOnIsZm5PYmo6bn09ZTtpZighQXJyYXkuaXNBcnJheShuKSlyZXR1cm4gdGhpcy5wYXJzZSh7eHJlZjp0LGlzRXZhbFN1cHBvcnRlZDpyLGZuOm59KTtjb25zdCBhPVtdO2Zvcihjb25zdCBlIG9mIG4pYS5wdXNoKHRoaXMucGFyc2Uoe3hyZWY6dCxpc0V2YWxTdXBwb3J0ZWQ6cixmbjp0LmZldGNoSWZSZWYoZSl9KSk7cmV0dXJuIGZ1bmN0aW9uKGUsdCxyLG4pe2ZvcihsZXQgaT0wLHM9YS5sZW5ndGg7aTxzO2krKylhW2ldKGUsdCxyLG4raSl9fXN0YXRpYyBjb25zdHJ1Y3RTYW1wbGVkKGUpe2xldHt4cmVmOnQsaXNFdmFsU3VwcG9ydGVkOnIsZm46bixkaWN0Oml9PWU7ZnVuY3Rpb24gcyhlKXtjb25zdCB0PWUubGVuZ3RoLHI9W107bGV0IG49MDtmb3IobGV0IGE9MDthPHQ7YSs9MilyW24rK109W2VbYV0sZVthKzFdXTtyZXR1cm4gcn1mdW5jdGlvbiBvKGUsdCxyLG4sYSl7cmV0dXJuIG4rKGEtbikvKHItdCkqKGUtdCl9bGV0IGM9bChpLmdldEFycmF5KCJEb21haW4iKSksaD1sKGkuZ2V0QXJyYXkoIlJhbmdlIikpO2lmKCFjfHwhaCl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiTm8gZG9tYWluIG9yIHJhbmdlIik7Y29uc3QgdT1jLmxlbmd0aC8yLGQ9aC5sZW5ndGgvMjtjPXMoYyksaD1zKGgpO2NvbnN0IGY9bChpLmdldEFycmF5KCJTaXplIikpLGc9aS5nZXQoIkJpdHNQZXJTYW1wbGUiKSxwPWkuZ2V0KCJPcmRlciIpfHwxOzEhPT1wJiYoMCxhLmluZm8pKCJObyBzdXBwb3J0IGZvciBjdWJpYyBzcGxpbmUgaW50ZXJwb2xhdGlvbjogIitwKTtsZXQgbT1sKGkuZ2V0QXJyYXkoIkVuY29kZSIpKTtpZihtKW09cyhtKTtlbHNle209W107Zm9yKGxldCBlPTA7ZTx1OysrZSltLnB1c2goWzAsZltlXS0xXSl9bGV0IGI9bChpLmdldEFycmF5KCJEZWNvZGUiKSk7Yj1iP3MoYik6aDtjb25zdCB5PXRoaXMuZ2V0U2FtcGxlQXJyYXkoZixkLGcsbik7cmV0dXJuIGZ1bmN0aW9uKGUsdCxyLG4pe2NvbnN0IGE9MTw8dSxpPW5ldyBGbG9hdDY0QXJyYXkoYSkscz1uZXcgVWludDMyQXJyYXkoYSk7bGV0IGwsZztmb3IoZz0wO2c8YTtnKyspaVtnXT0xO2xldCBwPWQsdz0xO2ZvcihsPTA7bDx1OysrbCl7Y29uc3Qgcj1jW2xdWzBdLG49Y1tsXVsxXTtsZXQgaD1vKE1hdGgubWluKE1hdGgubWF4KGVbdCtsXSxyKSxuKSxyLG4sbVtsXVswXSxtW2xdWzFdKTtjb25zdCB1PWZbbF07aD1NYXRoLm1pbihNYXRoLm1heChoLDApLHUtMSk7Y29uc3QgZD1oPHUtMT9NYXRoLmZsb29yKGgpOmgtMSxiPWQrMS1oLHk9aC1kLHY9ZCpwLHg9ditwO2ZvcihnPTA7ZzxhO2crKylnJnc/KGlbZ10qPXksc1tnXSs9eCk6KGlbZ10qPWIsc1tnXSs9dik7cCo9dSx3PDw9MX1mb3IoZz0wO2c8ZDsrK2cpe2xldCBlPTA7Zm9yKGw9MDtsPGE7bCsrKWUrPXlbc1tsXStnXSppW2xdO2U9byhlLDAsMSxiW2ddWzBdLGJbZ11bMV0pLHJbbitnXT1NYXRoLm1pbihNYXRoLm1heChlLGhbZ11bMF0pLGhbZ11bMV0pfX19c3RhdGljIGNvbnN0cnVjdEludGVycG9sYXRlZChlKXtsZXR7eHJlZjp0LGlzRXZhbFN1cHBvcnRlZDpyLGRpY3Q6bn09ZTtjb25zdCBhPWwobi5nZXRBcnJheSgiQzAiKSl8fFswXSxpPWwobi5nZXRBcnJheSgiQzEiKSl8fFsxXSxzPW4uZ2V0KCJOIiksbz1bXTtmb3IobGV0IGU9MCx0PWEubGVuZ3RoO2U8dDsrK2Upby5wdXNoKGlbZV0tYVtlXSk7Y29uc3QgYz1vLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oZSx0LHIsbil7Y29uc3QgaT0xPT09cz9lW3RdOmVbdF0qKnM7Zm9yKGxldCBlPTA7ZTxjOysrZSlyW24rZV09YVtlXStpKm9bZV19fXN0YXRpYyBjb25zdHJ1Y3RTdGljaGVkKGUpe2xldHt4cmVmOnQsaXNFdmFsU3VwcG9ydGVkOnIsZGljdDpufT1lO2NvbnN0IGk9bChuLmdldEFycmF5KCJEb21haW4iKSk7aWYoIWkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIk5vIGRvbWFpbiIpO2lmKDEhPWkubGVuZ3RoLzIpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkJhZCBkb21haW4gZm9yIHN0aWNoZWQgZnVuY3Rpb24iKTtjb25zdCBzPVtdO2Zvcihjb25zdCBlIG9mIG4uZ2V0KCJGdW5jdGlvbnMiKSlzLnB1c2godGhpcy5wYXJzZSh7eHJlZjp0LGlzRXZhbFN1cHBvcnRlZDpyLGZuOnQuZmV0Y2hJZlJlZihlKX0pKTtjb25zdCBvPWwobi5nZXRBcnJheSgiQm91bmRzIikpLGM9bChuLmdldEFycmF5KCJFbmNvZGUiKSksaD1uZXcgRmxvYXQzMkFycmF5KDEpO3JldHVybiBmdW5jdGlvbihlLHQscixuKXtjb25zdCBhPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT5yP2U9cjplPHQmJihlPXQpLGV9KGVbdF0saVswXSxpWzFdKSxsPW8ubGVuZ3RoO2xldCB1O2Zvcih1PTA7dTxsJiYhKGE8b1t1XSk7Kyt1KTtsZXQgZD1pWzBdO3U+MCYmKGQ9b1t1LTFdKTtsZXQgZj1pWzFdO3U8by5sZW5ndGgmJihmPW9bdV0pO2NvbnN0IGc9Y1syKnVdLHA9Y1syKnUrMV07aFswXT1kPT09Zj9nOmcrKGEtZCkqKHAtZykvKGYtZCksc1t1XShoLDAscixuKX19c3RhdGljIGNvbnN0cnVjdFBvc3RTY3JpcHQoZSl7bGV0e3hyZWY6dCxpc0V2YWxTdXBwb3J0ZWQ6cixmbjpuLGRpY3Q6aX09ZTtjb25zdCBvPWwoaS5nZXRBcnJheSgiRG9tYWluIikpLGM9bChpLmdldEFycmF5KCJSYW5nZSIpKTtpZighbyl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiTm8gZG9tYWluLiIpO2lmKCFjKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJObyByYW5nZS4iKTtjb25zdCBoPW5ldyBzLlBvc3RTY3JpcHRMZXhlcihuKSx1PW5ldyBzLlBvc3RTY3JpcHRQYXJzZXIoaCkucGFyc2UoKTtpZihyJiZhLkZlYXR1cmVUZXN0LmlzRXZhbFN1cHBvcnRlZCl7Y29uc3QgZT0obmV3IEMpLmNvbXBpbGUodSxvLGMpO2lmKGUpcmV0dXJuIG5ldyBGdW5jdGlvbigic3JjIiwic3JjT2Zmc2V0IiwiZGVzdCIsImRlc3RPZmZzZXQiLGUpfSgwLGEuaW5mbykoIlVuYWJsZSB0byBjb21waWxlIFBTIGZ1bmN0aW9uIik7Y29uc3QgZj1jLmxlbmd0aD4+MSxnPW8ubGVuZ3RoPj4xLHA9bmV3IGQodSksbT1PYmplY3QuY3JlYXRlKG51bGwpO2xldCBiPTgxOTI7Y29uc3QgeT1uZXcgRmxvYXQzMkFycmF5KGcpO3JldHVybiBmdW5jdGlvbihlLHQscixuKXtsZXQgYSxpLHM9IiI7Y29uc3Qgbz15O2ZvcihhPTA7YTxnO2ErKylpPWVbdCthXSxvW2FdPWkscys9aSsiXyI7Y29uc3QgbD1tW3NdO2lmKHZvaWQgMCE9PWwpcmV0dXJuIHZvaWQgci5zZXQobCxuKTtjb25zdCBoPW5ldyBGbG9hdDMyQXJyYXkoZiksdT1wLmV4ZWN1dGUobyksZD11Lmxlbmd0aC1mO2ZvcihhPTA7YTxmO2ErKyl7aT11W2QrYV07bGV0IGU9Y1syKmFdO2k8ZT9pPWU6KGU9Y1syKmErMV0saT5lJiYoaT1lKSksaFthXT1pfWI+MCYmKGItLSxtW3NdPWgpLHIuc2V0KGgsbil9fX1jbGFzcyB1e2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RhY2s9ZT9BcnJheS5mcm9tKGUpOltdfXB1c2goZSl7aWYodGhpcy5zdGFjay5sZW5ndGg+PXUuTUFYX1NUQUNLX1NJWkUpdGhyb3cgbmV3IEVycm9yKCJQb3N0U2NyaXB0IGZ1bmN0aW9uIHN0YWNrIG92ZXJmbG93LiIpO3RoaXMuc3RhY2sucHVzaChlKX1wb3AoKXtpZih0aGlzLnN0YWNrLmxlbmd0aDw9MCl0aHJvdyBuZXcgRXJyb3IoIlBvc3RTY3JpcHQgZnVuY3Rpb24gc3RhY2sgdW5kZXJmbG93LiIpO3JldHVybiB0aGlzLnN0YWNrLnBvcCgpfWNvcHkoZSl7aWYodGhpcy5zdGFjay5sZW5ndGgrZT49dS5NQVhfU1RBQ0tfU0laRSl0aHJvdyBuZXcgRXJyb3IoIlBvc3RTY3JpcHQgZnVuY3Rpb24gc3RhY2sgb3ZlcmZsb3cuIik7Y29uc3QgdD10aGlzLnN0YWNrO2ZvcihsZXQgcj10Lmxlbmd0aC1lLG49ZS0xO24+PTA7bi0tLHIrKyl0LnB1c2godFtyXSl9aW5kZXgoZSl7dGhpcy5wdXNoKHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtZS0xXSl9cm9sbChlLHQpe2NvbnN0IHI9dGhpcy5zdGFjayxuPXIubGVuZ3RoLWUsYT1yLmxlbmd0aC0xLGk9bisodC1NYXRoLmZsb29yKHQvZSkqZSk7Zm9yKGxldCBlPW4sdD1hO2U8dDtlKyssdC0tKXtjb25zdCBuPXJbZV07cltlXT1yW3RdLHJbdF09bn1mb3IobGV0IGU9bix0PWktMTtlPHQ7ZSsrLHQtLSl7Y29uc3Qgbj1yW2VdO3JbZV09clt0XSxyW3RdPW59Zm9yKGxldCBlPWksdD1hO2U8dDtlKyssdC0tKXtjb25zdCBuPXJbZV07cltlXT1yW3RdLHJbdF09bn19fWkodSwiTUFYX1NUQUNLX1NJWkUiLDEwMCk7Y2xhc3MgZHtjb25zdHJ1Y3RvcihlKXt0aGlzLm9wZXJhdG9ycz1lfWV4ZWN1dGUoZSl7Y29uc3QgdD1uZXcgdShlKTtsZXQgcj0wO2NvbnN0IG49dGhpcy5vcGVyYXRvcnMsaT1uLmxlbmd0aDtsZXQgcyxvLGM7Zm9yKDtyPGk7KWlmKHM9bltyKytdLCJudW1iZXIiIT10eXBlb2Ygcylzd2l0Y2gocyl7Y2FzZSJqeiI6Yz10LnBvcCgpLG89dC5wb3AoKSxvfHwocj1jKTticmVhaztjYXNlImoiOm89dC5wb3AoKSxyPW87YnJlYWs7Y2FzZSJhYnMiOm89dC5wb3AoKSx0LnB1c2goTWF0aC5hYnMobykpO2JyZWFrO2Nhc2UiYWRkIjpjPXQucG9wKCksbz10LnBvcCgpLHQucHVzaChvK2MpO2JyZWFrO2Nhc2UiYW5kIjpjPXQucG9wKCksbz10LnBvcCgpLCJib29sZWFuIj09dHlwZW9mIG8mJiJib29sZWFuIj09dHlwZW9mIGM/dC5wdXNoKG8mJmMpOnQucHVzaChvJmMpO2JyZWFrO2Nhc2UiYXRhbiI6Yz10LnBvcCgpLG89dC5wb3AoKSxvPU1hdGguYXRhbjIobyxjKS9NYXRoLlBJKjE4MCxvPDAmJihvKz0zNjApLHQucHVzaChvKTticmVhaztjYXNlImJpdHNoaWZ0IjpjPXQucG9wKCksbz10LnBvcCgpLG8+MD90LnB1c2gobzw8Yyk6dC5wdXNoKG8+PmMpO2JyZWFrO2Nhc2UiY2VpbGluZyI6bz10LnBvcCgpLHQucHVzaChNYXRoLmNlaWwobykpO2JyZWFrO2Nhc2UiY29weSI6bz10LnBvcCgpLHQuY29weShvKTticmVhaztjYXNlImNvcyI6bz10LnBvcCgpLHQucHVzaChNYXRoLmNvcyhvJTM2MC8xODAqTWF0aC5QSSkpO2JyZWFrO2Nhc2UiY3ZpIjpvPTB8dC5wb3AoKSx0LnB1c2gobyk7YnJlYWs7Y2FzZSJjdnIiOmJyZWFrO2Nhc2UiZGl2IjpjPXQucG9wKCksbz10LnBvcCgpLHQucHVzaChvL2MpO2JyZWFrO2Nhc2UiZHVwIjp0LmNvcHkoMSk7YnJlYWs7Y2FzZSJlcSI6Yz10LnBvcCgpLG89dC5wb3AoKSx0LnB1c2gobz09PWMpO2JyZWFrO2Nhc2UiZXhjaCI6dC5yb2xsKDIsMSk7YnJlYWs7Y2FzZSJleHAiOmM9dC5wb3AoKSxvPXQucG9wKCksdC5wdXNoKG8qKmMpO2JyZWFrO2Nhc2UiZmFsc2UiOnQucHVzaCghMSk7YnJlYWs7Y2FzZSJmbG9vciI6bz10LnBvcCgpLHQucHVzaChNYXRoLmZsb29yKG8pKTticmVhaztjYXNlImdlIjpjPXQucG9wKCksbz10LnBvcCgpLHQucHVzaChvPj1jKTticmVhaztjYXNlImd0IjpjPXQucG9wKCksbz10LnBvcCgpLHQucHVzaChvPmMpO2JyZWFrO2Nhc2UiaWRpdiI6Yz10LnBvcCgpLG89dC5wb3AoKSx0LnB1c2goby9jfDApO2JyZWFrO2Nhc2UiaW5kZXgiOm89dC5wb3AoKSx0LmluZGV4KG8pO2JyZWFrO2Nhc2UibGUiOmM9dC5wb3AoKSxvPXQucG9wKCksdC5wdXNoKG88PWMpO2JyZWFrO2Nhc2UibG4iOm89dC5wb3AoKSx0LnB1c2goTWF0aC5sb2cobykpO2JyZWFrO2Nhc2UibG9nIjpvPXQucG9wKCksdC5wdXNoKE1hdGgubG9nMTAobykpO2JyZWFrO2Nhc2UibHQiOmM9dC5wb3AoKSxvPXQucG9wKCksdC5wdXNoKG88Yyk7YnJlYWs7Y2FzZSJtb2QiOmM9dC5wb3AoKSxvPXQucG9wKCksdC5wdXNoKG8lYyk7YnJlYWs7Y2FzZSJtdWwiOmM9dC5wb3AoKSxvPXQucG9wKCksdC5wdXNoKG8qYyk7YnJlYWs7Y2FzZSJuZSI6Yz10LnBvcCgpLG89dC5wb3AoKSx0LnB1c2gobyE9PWMpO2JyZWFrO2Nhc2UibmVnIjpvPXQucG9wKCksdC5wdXNoKC1vKTticmVhaztjYXNlIm5vdCI6bz10LnBvcCgpLCJib29sZWFuIj09dHlwZW9mIG8/dC5wdXNoKCFvKTp0LnB1c2gofm8pO2JyZWFrO2Nhc2Uib3IiOmM9dC5wb3AoKSxvPXQucG9wKCksImJvb2xlYW4iPT10eXBlb2YgbyYmImJvb2xlYW4iPT10eXBlb2YgYz90LnB1c2gob3x8Yyk6dC5wdXNoKG98Yyk7YnJlYWs7Y2FzZSJwb3AiOnQucG9wKCk7YnJlYWs7Y2FzZSJyb2xsIjpjPXQucG9wKCksbz10LnBvcCgpLHQucm9sbChvLGMpO2JyZWFrO2Nhc2Uicm91bmQiOm89dC5wb3AoKSx0LnB1c2goTWF0aC5yb3VuZChvKSk7YnJlYWs7Y2FzZSJzaW4iOm89dC5wb3AoKSx0LnB1c2goTWF0aC5zaW4obyUzNjAvMTgwKk1hdGguUEkpKTticmVhaztjYXNlInNxcnQiOm89dC5wb3AoKSx0LnB1c2goTWF0aC5zcXJ0KG8pKTticmVhaztjYXNlInN1YiI6Yz10LnBvcCgpLG89dC5wb3AoKSx0LnB1c2goby1jKTticmVhaztjYXNlInRydWUiOnQucHVzaCghMCk7YnJlYWs7Y2FzZSJ0cnVuY2F0ZSI6bz10LnBvcCgpLG89bzwwP01hdGguY2VpbChvKTpNYXRoLmZsb29yKG8pLHQucHVzaChvKTticmVhaztjYXNlInhvciI6Yz10LnBvcCgpLG89dC5wb3AoKSwiYm9vbGVhbiI9PXR5cGVvZiBvJiYiYm9vbGVhbiI9PXR5cGVvZiBjP3QucHVzaChvIT09Yyk6dC5wdXNoKG9eYyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiVW5rbm93biBvcGVyYXRvciAiLmNvbmNhdChzKSl9ZWxzZSB0LnB1c2gocyk7cmV0dXJuIHQuc3RhY2t9fXQuUG9zdFNjcmlwdEV2YWx1YXRvcj1kO2NsYXNzIGZ7Y29uc3RydWN0b3IoZSl7dGhpcy50eXBlPWV9dmlzaXQoZSl7KDAsYS51bnJlYWNoYWJsZSkoImFic3RyYWN0IG1ldGhvZCIpfX1jbGFzcyBnIGV4dGVuZHMgZntjb25zdHJ1Y3RvcihlLHQscil7c3VwZXIoImFyZ3MiKSx0aGlzLmluZGV4PWUsdGhpcy5taW49dCx0aGlzLm1heD1yfXZpc2l0KGUpe2UudmlzaXRBcmd1bWVudCh0aGlzKX19Y2xhc3MgcCBleHRlbmRzIGZ7Y29uc3RydWN0b3IoZSl7c3VwZXIoImxpdGVyYWwiKSx0aGlzLm51bWJlcj1lLHRoaXMubWluPWUsdGhpcy5tYXg9ZX12aXNpdChlKXtlLnZpc2l0TGl0ZXJhbCh0aGlzKX19Y2xhc3MgbSBleHRlbmRzIGZ7Y29uc3RydWN0b3IoZSx0LHIsbixhKXtzdXBlcigiYmluYXJ5IiksdGhpcy5vcD1lLHRoaXMuYXJnMT10LHRoaXMuYXJnMj1yLHRoaXMubWluPW4sdGhpcy5tYXg9YX12aXNpdChlKXtlLnZpc2l0QmluYXJ5T3BlcmF0aW9uKHRoaXMpfX1jbGFzcyBiIGV4dGVuZHMgZntjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKCJtYXgiKSx0aGlzLmFyZz1lLHRoaXMubWluPWUubWluLHRoaXMubWF4PXR9dmlzaXQoZSl7ZS52aXNpdE1pbih0aGlzKX19Y2xhc3MgeSBleHRlbmRzIGZ7Y29uc3RydWN0b3IoZSx0LHIpe3N1cGVyKCJ2YXIiKSx0aGlzLmluZGV4PWUsdGhpcy5taW49dCx0aGlzLm1heD1yfXZpc2l0KGUpe2UudmlzaXRWYXJpYWJsZSh0aGlzKX19Y2xhc3MgdyBleHRlbmRzIGZ7Y29uc3RydWN0b3IoZSx0KXtzdXBlcigiZGVmaW5pdGlvbiIpLHRoaXMudmFyaWFibGU9ZSx0aGlzLmFyZz10fXZpc2l0KGUpe2UudmlzaXRWYXJpYWJsZURlZmluaXRpb24odGhpcyl9fWNsYXNzIHZ7Y29uc3RydWN0b3IoKXt0aGlzLnBhcnRzPVtdfXZpc2l0QXJndW1lbnQoZSl7dGhpcy5wYXJ0cy5wdXNoKCJNYXRoLm1heCgiLGUubWluLCIsIE1hdGgubWluKCIsZS5tYXgsIiwgc3JjW3NyY09mZnNldCArICIsZS5pbmRleCwiXSkpIil9dmlzaXRWYXJpYWJsZShlKXt0aGlzLnBhcnRzLnB1c2goInYiLGUuaW5kZXgpfXZpc2l0TGl0ZXJhbChlKXt0aGlzLnBhcnRzLnB1c2goZS5udW1iZXIpfXZpc2l0QmluYXJ5T3BlcmF0aW9uKGUpe3RoaXMucGFydHMucHVzaCgiKCIpLGUuYXJnMS52aXNpdCh0aGlzKSx0aGlzLnBhcnRzLnB1c2goIiAiLGUub3AsIiAiKSxlLmFyZzIudmlzaXQodGhpcyksdGhpcy5wYXJ0cy5wdXNoKCIpIil9dmlzaXRWYXJpYWJsZURlZmluaXRpb24oZSl7dGhpcy5wYXJ0cy5wdXNoKCJ2YXIgIiksZS52YXJpYWJsZS52aXNpdCh0aGlzKSx0aGlzLnBhcnRzLnB1c2goIiA9ICIpLGUuYXJnLnZpc2l0KHRoaXMpLHRoaXMucGFydHMucHVzaCgiOyIpfXZpc2l0TWluKGUpe3RoaXMucGFydHMucHVzaCgiTWF0aC5taW4oIiksZS5hcmcudmlzaXQodGhpcyksdGhpcy5wYXJ0cy5wdXNoKCIsICIsZS5tYXgsIikiKX10b1N0cmluZygpe3JldHVybiB0aGlzLnBhcnRzLmpvaW4oIiIpfX1mdW5jdGlvbiB4KGUsdCl7cmV0dXJuImxpdGVyYWwiPT09dC50eXBlJiYwPT09dC5udW1iZXI/ZToibGl0ZXJhbCI9PT1lLnR5cGUmJjA9PT1lLm51bWJlcj90OiJsaXRlcmFsIj09PXQudHlwZSYmImxpdGVyYWwiPT09ZS50eXBlP25ldyBwKGUubnVtYmVyK3QubnVtYmVyKTpuZXcgbSgiKyIsZSx0LGUubWluK3QubWluLGUubWF4K3QubWF4KX1mdW5jdGlvbiBTKGUsdCl7aWYoImxpdGVyYWwiPT09dC50eXBlKXtpZigwPT09dC5udW1iZXIpcmV0dXJuIG5ldyBwKDApO2lmKDE9PT10Lm51bWJlcilyZXR1cm4gZTtpZigibGl0ZXJhbCI9PT1lLnR5cGUpcmV0dXJuIG5ldyBwKGUubnVtYmVyKnQubnVtYmVyKX1pZigibGl0ZXJhbCI9PT1lLnR5cGUpe2lmKDA9PT1lLm51bWJlcilyZXR1cm4gbmV3IHAoMCk7aWYoMT09PWUubnVtYmVyKXJldHVybiB0fWNvbnN0IHI9TWF0aC5taW4oZS5taW4qdC5taW4sZS5taW4qdC5tYXgsZS5tYXgqdC5taW4sZS5tYXgqdC5tYXgpLG49TWF0aC5tYXgoZS5taW4qdC5taW4sZS5taW4qdC5tYXgsZS5tYXgqdC5taW4sZS5tYXgqdC5tYXgpO3JldHVybiBuZXcgbSgiKiIsZSx0LHIsbil9ZnVuY3Rpb24gQShlLHQpe2lmKCJsaXRlcmFsIj09PXQudHlwZSl7aWYoMD09PXQubnVtYmVyKXJldHVybiBlO2lmKCJsaXRlcmFsIj09PWUudHlwZSlyZXR1cm4gbmV3IHAoZS5udW1iZXItdC5udW1iZXIpfXJldHVybiJiaW5hcnkiPT09dC50eXBlJiYiLSI9PT10Lm9wJiYibGl0ZXJhbCI9PT1lLnR5cGUmJjE9PT1lLm51bWJlciYmImxpdGVyYWwiPT09dC5hcmcxLnR5cGUmJjE9PT10LmFyZzEubnVtYmVyP3QuYXJnMjpuZXcgbSgiLSIsZSx0LGUubWluLXQubWF4LGUubWF4LXQubWluKX1mdW5jdGlvbiBrKGUsdCl7cmV0dXJuIGUubWluPj10P25ldyBwKHQpOmUubWF4PD10P2U6bmV3IGIoZSx0KX1jbGFzcyBDe2NvbXBpbGUoZSx0LHIpe2NvbnN0IG49W10sYT1bXSxpPXQubGVuZ3RoPj4xLHM9ci5sZW5ndGg+PjE7bGV0IG8sYyxsLGgsdSxkLGYsbSxiPTA7Zm9yKGxldCBlPTA7ZTxpO2UrKyluLnB1c2gobmV3IGcoZSx0WzIqZV0sdFsyKmUrMV0pKTtmb3IobGV0IHQ9MCxyPWUubGVuZ3RoO3Q8cjt0KyspaWYobT1lW3RdLCJudW1iZXIiIT10eXBlb2YgbSlzd2l0Y2gobSl7Y2FzZSJhZGQiOmlmKG4ubGVuZ3RoPDIpcmV0dXJuIG51bGw7aD1uLnBvcCgpLGw9bi5wb3AoKSxuLnB1c2goeChsLGgpKTticmVhaztjYXNlImN2ciI6aWYobi5sZW5ndGg8MSlyZXR1cm4gbnVsbDticmVhaztjYXNlIm11bCI6aWYobi5sZW5ndGg8MilyZXR1cm4gbnVsbDtoPW4ucG9wKCksbD1uLnBvcCgpLG4ucHVzaChTKGwsaCkpO2JyZWFrO2Nhc2Uic3ViIjppZihuLmxlbmd0aDwyKXJldHVybiBudWxsO2g9bi5wb3AoKSxsPW4ucG9wKCksbi5wdXNoKEEobCxoKSk7YnJlYWs7Y2FzZSJleGNoIjppZihuLmxlbmd0aDwyKXJldHVybiBudWxsO3U9bi5wb3AoKSxkPW4ucG9wKCksbi5wdXNoKHUsZCk7YnJlYWs7Y2FzZSJwb3AiOmlmKG4ubGVuZ3RoPDEpcmV0dXJuIG51bGw7bi5wb3AoKTticmVhaztjYXNlImluZGV4IjppZihuLmxlbmd0aDwxKXJldHVybiBudWxsO2lmKGw9bi5wb3AoKSwibGl0ZXJhbCIhPT1sLnR5cGUpcmV0dXJuIG51bGw7aWYobz1sLm51bWJlcixvPDB8fCFOdW1iZXIuaXNJbnRlZ2VyKG8pfHxuLmxlbmd0aDxvKXJldHVybiBudWxsO2lmKHU9bltuLmxlbmd0aC1vLTFdLCJsaXRlcmFsIj09PXUudHlwZXx8InZhciI9PT11LnR5cGUpe24ucHVzaCh1KTticmVha31mPW5ldyB5KGIrKyx1Lm1pbix1Lm1heCksbltuLmxlbmd0aC1vLTFdPWYsbi5wdXNoKGYpLGEucHVzaChuZXcgdyhmLHUpKTticmVhaztjYXNlImR1cCI6aWYobi5sZW5ndGg8MSlyZXR1cm4gbnVsbDtpZigibnVtYmVyIj09dHlwZW9mIGVbdCsxXSYmImd0Ij09PWVbdCsyXSYmZVt0KzNdPT09dCs3JiYianoiPT09ZVt0KzRdJiYicG9wIj09PWVbdCs1XSYmZVt0KzZdPT09ZVt0KzFdKXtsPW4ucG9wKCksbi5wdXNoKGsobCxlW3QrMV0pKSx0Kz02O2JyZWFrfWlmKHU9bi5hdCgtMSksImxpdGVyYWwiPT09dS50eXBlfHwidmFyIj09PXUudHlwZSl7bi5wdXNoKHUpO2JyZWFrfWY9bmV3IHkoYisrLHUubWluLHUubWF4KSxuW24ubGVuZ3RoLTFdPWYsbi5wdXNoKGYpLGEucHVzaChuZXcgdyhmLHUpKTticmVhaztjYXNlInJvbGwiOmlmKG4ubGVuZ3RoPDIpcmV0dXJuIG51bGw7aWYoaD1uLnBvcCgpLGw9bi5wb3AoKSwibGl0ZXJhbCIhPT1oLnR5cGV8fCJsaXRlcmFsIiE9PWwudHlwZSlyZXR1cm4gbnVsbDtpZihjPWgubnVtYmVyLG89bC5udW1iZXIsbzw9MHx8IU51bWJlci5pc0ludGVnZXIobyl8fCFOdW1iZXIuaXNJbnRlZ2VyKGMpfHxuLmxlbmd0aDxvKXJldHVybiBudWxsO2lmKGM9KGMlbytvKSVvLDA9PT1jKWJyZWFrO24ucHVzaCguLi5uLnNwbGljZShuLmxlbmd0aC1vLG8tYykpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIG51bGx9ZWxzZSBuLnB1c2gobmV3IHAobSkpO2lmKG4ubGVuZ3RoIT09cylyZXR1cm4gbnVsbDtjb25zdCBDPVtdO2Zvcihjb25zdCBlIG9mIGEpe2NvbnN0IHQ9bmV3IHY7ZS52aXNpdCh0KSxDLnB1c2godC50b1N0cmluZygpKX1mb3IobGV0IGU9MCx0PW4ubGVuZ3RoO2U8dDtlKyspe2NvbnN0IHQ9bltlXSxhPW5ldyB2O3QudmlzaXQoYSk7Y29uc3QgaT1yWzIqZV0scz1yWzIqZSsxXSxvPVthLnRvU3RyaW5nKCldO2k+dC5taW4mJihvLnVuc2hpZnQoIk1hdGgubWF4KCIsaSwiLCAiKSxvLnB1c2goIikiKSksczx0Lm1heCYmKG8udW5zaGlmdCgiTWF0aC5taW4oIixzLCIsICIpLG8ucHVzaCgiKSIpKSxvLnVuc2hpZnQoImRlc3RbZGVzdE9mZnNldCArICIsZSwiXSA9ICIpLG8ucHVzaCgiOyIpLEMucHVzaChvLmpvaW4oIiIpKX1yZXR1cm4gQy5qb2luKCJcbiIpfX10LlBvc3RTY3JpcHRDb21waWxlcj1DfSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuUG9zdFNjcmlwdFBhcnNlcj10LlBvc3RTY3JpcHRMZXhlcj12b2lkIDAscigxMzkpO3ZhciBuPXIoMTQ0KSxhPXIoMTUwKSxpPXIoMTQ5KTt0LlBvc3RTY3JpcHRQYXJzZXI9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5sZXhlcj1lLHRoaXMub3BlcmF0b3JzPVtdLHRoaXMudG9rZW49bnVsbCx0aGlzLnByZXY9bnVsbH1uZXh0VG9rZW4oKXt0aGlzLnByZXY9dGhpcy50b2tlbix0aGlzLnRva2VuPXRoaXMubGV4ZXIuZ2V0VG9rZW4oKX1hY2NlcHQoZSl7cmV0dXJuIHRoaXMudG9rZW4udHlwZT09PWUmJih0aGlzLm5leHRUb2tlbigpLCEwKX1leHBlY3QoZSl7aWYodGhpcy5hY2NlcHQoZSkpcmV0dXJuITA7dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlVuZXhwZWN0ZWQgc3ltYm9sOiBmb3VuZCAiLmNvbmNhdCh0aGlzLnRva2VuLnR5cGUsIiBleHBlY3RlZCAiKS5jb25jYXQoZSwiLiIpKX1wYXJzZSgpe3JldHVybiB0aGlzLm5leHRUb2tlbigpLHRoaXMuZXhwZWN0KHMuTEJSQUNFKSx0aGlzLnBhcnNlQmxvY2soKSx0aGlzLmV4cGVjdChzLlJCUkFDRSksdGhpcy5vcGVyYXRvcnN9cGFyc2VCbG9jaygpe2Zvcig7OylpZih0aGlzLmFjY2VwdChzLk5VTUJFUikpdGhpcy5vcGVyYXRvcnMucHVzaCh0aGlzLnByZXYudmFsdWUpO2Vsc2UgaWYodGhpcy5hY2NlcHQocy5PUEVSQVRPUikpdGhpcy5vcGVyYXRvcnMucHVzaCh0aGlzLnByZXYudmFsdWUpO2Vsc2V7aWYoIXRoaXMuYWNjZXB0KHMuTEJSQUNFKSlyZXR1cm47dGhpcy5wYXJzZUNvbmRpdGlvbigpfX1wYXJzZUNvbmRpdGlvbigpe2NvbnN0IGU9dGhpcy5vcGVyYXRvcnMubGVuZ3RoO2lmKHRoaXMub3BlcmF0b3JzLnB1c2gobnVsbCxudWxsKSx0aGlzLnBhcnNlQmxvY2soKSx0aGlzLmV4cGVjdChzLlJCUkFDRSksdGhpcy5hY2NlcHQocy5JRikpdGhpcy5vcGVyYXRvcnNbZV09dGhpcy5vcGVyYXRvcnMubGVuZ3RoLHRoaXMub3BlcmF0b3JzW2UrMV09Imp6IjtlbHNle2lmKCF0aGlzLmFjY2VwdChzLkxCUkFDRSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlBTIEZ1bmN0aW9uOiBlcnJvciBwYXJzaW5nIGNvbmRpdGlvbmFsLiIpO3tjb25zdCB0PXRoaXMub3BlcmF0b3JzLmxlbmd0aDt0aGlzLm9wZXJhdG9ycy5wdXNoKG51bGwsbnVsbCk7Y29uc3Qgcj10aGlzLm9wZXJhdG9ycy5sZW5ndGg7dGhpcy5wYXJzZUJsb2NrKCksdGhpcy5leHBlY3Qocy5SQlJBQ0UpLHRoaXMuZXhwZWN0KHMuSUZFTFNFKSx0aGlzLm9wZXJhdG9yc1t0XT10aGlzLm9wZXJhdG9ycy5sZW5ndGgsdGhpcy5vcGVyYXRvcnNbdCsxXT0iaiIsdGhpcy5vcGVyYXRvcnNbZV09cix0aGlzLm9wZXJhdG9yc1tlKzFdPSJqeiJ9fX19O2NvbnN0IHM9e0xCUkFDRTowLFJCUkFDRToxLE5VTUJFUjoyLE9QRVJBVE9SOjMsSUY6NCxJRkVMU0U6NX07Y2xhc3Mgb3tzdGF0aWMgZ2V0IG9wQ2FjaGUoKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywib3BDYWNoZSIsT2JqZWN0LmNyZWF0ZShudWxsKSl9Y29uc3RydWN0b3IoZSx0KXt0aGlzLnR5cGU9ZSx0aGlzLnZhbHVlPXR9c3RhdGljIGdldE9wZXJhdG9yKGUpe3ZhciB0O3JldHVybih0PW8ub3BDYWNoZSlbZV18fCh0W2VdPW5ldyBvKHMuT1BFUkFUT1IsZSkpfXN0YXRpYyBnZXQgTEJSQUNFKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIkxCUkFDRSIsbmV3IG8ocy5MQlJBQ0UsInsiKSl9c3RhdGljIGdldCBSQlJBQ0UoKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiUkJSQUNFIixuZXcgbyhzLlJCUkFDRSwifSIpKX1zdGF0aWMgZ2V0IElGKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIklGIixuZXcgbyhzLklGLCJJRiIpKX1zdGF0aWMgZ2V0IElGRUxTRSgpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJJRkVMU0UiLG5ldyBvKHMuSUZFTFNFLCJJRkVMU0UiKSl9fXQuUG9zdFNjcmlwdExleGVyPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RyZWFtPWUsdGhpcy5uZXh0Q2hhcigpLHRoaXMuc3RyQnVmPVtdfW5leHRDaGFyKCl7cmV0dXJuIHRoaXMuY3VycmVudENoYXI9dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpfWdldFRva2VuKCl7bGV0IGU9ITEsdD10aGlzLmN1cnJlbnRDaGFyO2Zvcig7Oyl7aWYodDwwKXJldHVybiBhLkVPRjtpZihlKTEwIT09dCYmMTMhPT10fHwoZT0hMSk7ZWxzZSBpZigzNz09PXQpZT0hMDtlbHNlIGlmKCEoMCxpLmlzV2hpdGVTcGFjZSkodCkpYnJlYWs7dD10aGlzLm5leHRDaGFyKCl9c3dpdGNoKDB8dCl7Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUyOmNhc2UgNTM6Y2FzZSA1NDpjYXNlIDU1OmNhc2UgNTY6Y2FzZSA1NzpjYXNlIDQzOmNhc2UgNDU6Y2FzZSA0NjpyZXR1cm4gbmV3IG8ocy5OVU1CRVIsdGhpcy5nZXROdW1iZXIoKSk7Y2FzZSAxMjM6cmV0dXJuIHRoaXMubmV4dENoYXIoKSxvLkxCUkFDRTtjYXNlIDEyNTpyZXR1cm4gdGhpcy5uZXh0Q2hhcigpLG8uUkJSQUNFfWNvbnN0IHI9dGhpcy5zdHJCdWY7Zm9yKHIubGVuZ3RoPTAsclswXT1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpOyh0PXRoaXMubmV4dENoYXIoKSk+PTAmJih0Pj02NSYmdDw9OTB8fHQ+PTk3JiZ0PD0xMjIpOylyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSh0KSk7Y29uc3Qgbj1yLmpvaW4oIiIpO3N3aXRjaChuLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaWYiOnJldHVybiBvLklGO2Nhc2UiaWZlbHNlIjpyZXR1cm4gby5JRkVMU0U7ZGVmYXVsdDpyZXR1cm4gby5nZXRPcGVyYXRvcihuKX19Z2V0TnVtYmVyKCl7bGV0IGU9dGhpcy5jdXJyZW50Q2hhcjtjb25zdCB0PXRoaXMuc3RyQnVmO2Zvcih0Lmxlbmd0aD0wLHRbMF09U3RyaW5nLmZyb21DaGFyQ29kZShlKTsoZT10aGlzLm5leHRDaGFyKCkpPj0wJiYoZT49NDgmJmU8PTU3fHw0NT09PWV8fDQ2PT09ZSk7KXQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGUpKTtjb25zdCByPXBhcnNlRmxvYXQodC5qb2luKCIiKSk7aWYoaXNOYU4ocikpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgZmxvYXRpbmcgcG9pbnQgbnVtYmVyOiAiLmNvbmNhdChyKSk7cmV0dXJuIHJ9fX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlJlZ2lvbmFsSW1hZ2VDYWNoZT10LkxvY2FsVGlsaW5nUGF0dGVybkNhY2hlPXQuTG9jYWxJbWFnZUNhY2hlPXQuTG9jYWxHU3RhdGVDYWNoZT10LkxvY2FsRnVuY3Rpb25DYWNoZT10LkxvY2FsQ29sb3JTcGFjZUNhY2hlPXQuR2xvYmFsSW1hZ2VDYWNoZT12b2lkIDAscigyKSxyKDExNikscigxMjYpLHIoMTI4KSxyKDEzMSkscigxMzMpLHIoMTM1KSxyKDEzNyk7dmFyIG49cigxNDQpLGE9cigxNTApO2NsYXNzIHN7Y29uc3RydWN0b3IoZSl7dGhpcy5jb25zdHJ1Y3Rvcj09PXMmJigwLG4udW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlTG9jYWxDYWNoZS4iKSx0aGlzLl9vbmx5UmVmcz0hMD09PShudWxsPT1lP3ZvaWQgMDplLm9ubHlSZWZzKSx0aGlzLl9vbmx5UmVmc3x8KHRoaXMuX25hbWVSZWZNYXA9bmV3IE1hcCx0aGlzLl9pbWFnZU1hcD1uZXcgTWFwKSx0aGlzLl9pbWFnZUNhY2hlPW5ldyBhLlJlZlNldENhY2hlfWdldEJ5TmFtZShlKXt0aGlzLl9vbmx5UmVmcyYmKDAsbi51bnJlYWNoYWJsZSkoIlNob3VsZCBub3QgY2FsbCBgZ2V0QnlOYW1lYCBtZXRob2QuIik7Y29uc3QgdD10aGlzLl9uYW1lUmVmTWFwLmdldChlKTtyZXR1cm4gdD90aGlzLmdldEJ5UmVmKHQpOnRoaXMuX2ltYWdlTWFwLmdldChlKXx8bnVsbH1nZXRCeVJlZihlKXtyZXR1cm4gdGhpcy5faW1hZ2VDYWNoZS5nZXQoZSl8fG51bGx9c2V0KGUsdCxyKXsoMCxuLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBzZXRgIGNhbGxlZC4iKX19dC5Mb2NhbEltYWdlQ2FjaGU9Y2xhc3MgZXh0ZW5kcyBze3NldChlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbCxyPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO2lmKCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoJ0xvY2FsSW1hZ2VDYWNoZS5zZXQgLSBleHBlY3RlZCAibmFtZSIgYXJndW1lbnQuJyk7aWYodCl7aWYodGhpcy5faW1hZ2VDYWNoZS5oYXModCkpcmV0dXJuO3RoaXMuX25hbWVSZWZNYXAuc2V0KGUsdCksdGhpcy5faW1hZ2VDYWNoZS5wdXQodCxyKX1lbHNlIHRoaXMuX2ltYWdlTWFwLmhhcyhlKXx8dGhpcy5faW1hZ2VNYXAuc2V0KGUscil9fSx0LkxvY2FsQ29sb3JTcGFjZUNhY2hlPWNsYXNzIGV4dGVuZHMgc3tzZXQoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbCx0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsLHI9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDA7aWYoInN0cmluZyIhPXR5cGVvZiBlJiYhdCl0aHJvdyBuZXcgRXJyb3IoJ0xvY2FsQ29sb3JTcGFjZUNhY2hlLnNldCAtIGV4cGVjdGVkICJuYW1lIiBhbmQvb3IgInJlZiIgYXJndW1lbnQuJyk7aWYodCl7aWYodGhpcy5faW1hZ2VDYWNoZS5oYXModCkpcmV0dXJuO251bGwhPT1lJiZ0aGlzLl9uYW1lUmVmTWFwLnNldChlLHQpLHRoaXMuX2ltYWdlQ2FjaGUucHV0KHQscil9ZWxzZSB0aGlzLl9pbWFnZU1hcC5oYXMoZSl8fHRoaXMuX2ltYWdlTWFwLnNldChlLHIpfX0sdC5Mb2NhbEZ1bmN0aW9uQ2FjaGU9Y2xhc3MgZXh0ZW5kcyBze2NvbnN0cnVjdG9yKGUpe3N1cGVyKHtvbmx5UmVmczohMH0pfXNldCgpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLHQ9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDA7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCdMb2NhbEZ1bmN0aW9uQ2FjaGUuc2V0IC0gZXhwZWN0ZWQgInJlZiIgYXJndW1lbnQuJyk7dGhpcy5faW1hZ2VDYWNoZS5oYXMoZSl8fHRoaXMuX2ltYWdlQ2FjaGUucHV0KGUsdCl9fSx0LkxvY2FsR1N0YXRlQ2FjaGU9Y2xhc3MgZXh0ZW5kcyBze3NldChlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbCxyPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO2lmKCJzdHJpbmciIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoJ0xvY2FsR1N0YXRlQ2FjaGUuc2V0IC0gZXhwZWN0ZWQgIm5hbWUiIGFyZ3VtZW50LicpO2lmKHQpe2lmKHRoaXMuX2ltYWdlQ2FjaGUuaGFzKHQpKXJldHVybjt0aGlzLl9uYW1lUmVmTWFwLnNldChlLHQpLHRoaXMuX2ltYWdlQ2FjaGUucHV0KHQscil9ZWxzZSB0aGlzLl9pbWFnZU1hcC5oYXMoZSl8fHRoaXMuX2ltYWdlTWFwLnNldChlLHIpfX0sdC5Mb2NhbFRpbGluZ1BhdHRlcm5DYWNoZT1jbGFzcyBleHRlbmRzIHN7Y29uc3RydWN0b3IoZSl7c3VwZXIoe29ubHlSZWZzOiEwfSl9c2V0KCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsdD1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMDtpZighZSl0aHJvdyBuZXcgRXJyb3IoJ0xvY2FsVGlsaW5nUGF0dGVybkNhY2hlLnNldCAtIGV4cGVjdGVkICJyZWYiIGFyZ3VtZW50LicpO3RoaXMuX2ltYWdlQ2FjaGUuaGFzKGUpfHx0aGlzLl9pbWFnZUNhY2hlLnB1dChlLHQpfX0sdC5SZWdpb25hbEltYWdlQ2FjaGU9Y2xhc3MgZXh0ZW5kcyBze2NvbnN0cnVjdG9yKGUpe3N1cGVyKHtvbmx5UmVmczohMH0pfXNldCgpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLHQ9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDA7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCdSZWdpb25hbEltYWdlQ2FjaGUuc2V0IC0gZXhwZWN0ZWQgInJlZiIgYXJndW1lbnQuJyk7dGhpcy5faW1hZ2VDYWNoZS5oYXMoZSl8fHRoaXMuX2ltYWdlQ2FjaGUucHV0KGUsdCl9fTtjbGFzcyBve2NvbnN0cnVjdG9yKCl7dGhpcy5fcmVmQ2FjaGU9bmV3IGEuUmVmU2V0Q2FjaGUsdGhpcy5faW1hZ2VDYWNoZT1uZXcgYS5SZWZTZXRDYWNoZX1nZXQgX2J5dGVTaXplKCl7bGV0IGU9MDtmb3IoY29uc3QgdCBvZiB0aGlzLl9pbWFnZUNhY2hlKWUrPXQuYnl0ZVNpemU7cmV0dXJuIGV9Z2V0IF9jYWNoZUxpbWl0UmVhY2hlZCgpe3JldHVybiEodGhpcy5faW1hZ2VDYWNoZS5zaXplPG8uTUlOX0lNQUdFU19UT19DQUNIRXx8dGhpcy5fYnl0ZVNpemU8by5NQVhfQllURV9TSVpFKX1zaG91bGRDYWNoZShlLHQpe2xldCByPXRoaXMuX3JlZkNhY2hlLmdldChlKTtyZXR1cm4gcnx8KHI9bmV3IFNldCx0aGlzLl9yZWZDYWNoZS5wdXQoZSxyKSksci5hZGQodCksIShyLnNpemU8by5OVU1fUEFHRVNfVEhSRVNIT0xEfHwhdGhpcy5faW1hZ2VDYWNoZS5oYXMoZSkmJnRoaXMuX2NhY2hlTGltaXRSZWFjaGVkKX1hZGRCeXRlU2l6ZShlLHQpe2NvbnN0IHI9dGhpcy5faW1hZ2VDYWNoZS5nZXQoZSk7ciYmKHIuYnl0ZVNpemV8fChyLmJ5dGVTaXplPXQpKX1nZXREYXRhKGUsdCl7Y29uc3Qgcj10aGlzLl9yZWZDYWNoZS5nZXQoZSk7aWYoIXIpcmV0dXJuIG51bGw7aWYoci5zaXplPG8uTlVNX1BBR0VTX1RIUkVTSE9MRClyZXR1cm4gbnVsbDtjb25zdCBuPXRoaXMuX2ltYWdlQ2FjaGUuZ2V0KGUpO3JldHVybiBuPyhyLmFkZCh0KSxuKTpudWxsfXNldERhdGEoZSx0KXtpZighdGhpcy5fcmVmQ2FjaGUuaGFzKGUpKXRocm93IG5ldyBFcnJvcignR2xvYmFsSW1hZ2VDYWNoZS5zZXREYXRhIC0gZXhwZWN0ZWQgInNob3VsZENhY2hlIiB0byBoYXZlIGJlZW4gY2FsbGVkLicpO3RoaXMuX2ltYWdlQ2FjaGUuaGFzKGUpfHwodGhpcy5fY2FjaGVMaW1pdFJlYWNoZWQ/KDAsbi53YXJuKSgiR2xvYmFsSW1hZ2VDYWNoZS5zZXREYXRhIC0gY2FjaGUgbGltaXQgcmVhY2hlZC4iKTp0aGlzLl9pbWFnZUNhY2hlLnB1dChlLHQpKX1jbGVhcigpe2FyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF18fHRoaXMuX3JlZkNhY2hlLmNsZWFyKCksdGhpcy5faW1hZ2VDYWNoZS5jbGVhcigpfX1pKG8sIk5VTV9QQUdFU19USFJFU0hPTEQiLDIpLGkobywiTUlOX0lNQUdFU19UT19DQUNIRSIsMTApLGkobywiTUFYX0JZVEVfU0laRSIsNSpuLk1BWF9JTUFHRV9TSVpFX1RPX0NBQ0hFKSx0Lkdsb2JhbEltYWdlQ2FjaGU9b30sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmJpZGk9ZnVuY3Rpb24oZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOi0xLHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxnPSEwO2NvbnN0IHA9ZS5sZW5ndGg7aWYoMD09PXB8fHIpcmV0dXJuIHUoZSxnLHIpO2QubGVuZ3RoPXAsZi5sZW5ndGg9cDtsZXQgbSxiLHk9MDtmb3IobT0wO208cDsrK20pe2RbbV09ZS5jaGFyQXQobSk7Y29uc3QgdD1lLmNoYXJDb2RlQXQobSk7bGV0IHI9IkwiO3Q8PTI1NT9yPWFbdF06MTQyNDw9dCYmdDw9MTUyND9yPSJSIjoxNTM2PD10JiZ0PD0xNzkxPyhyPWlbMjU1JnRdLHJ8fCgwLG4ud2FybikoIkJpZGk6IGludmFsaWQgVW5pY29kZSBjaGFyYWN0ZXIgIit0LnRvU3RyaW5nKDE2KSkpOigxNzkyPD10JiZ0PD0yMjIwfHw2NDMzNjw9dCYmdDw9NjUwMjN8fDY1MTM2PD10JiZ0PD02NTI3OSkmJihyPSJBTCIpLCJSIiE9PXImJiJBTCIhPT1yJiYiQU4iIT09cnx8eSsrLGZbbV09cn1pZigwPT09eSlyZXR1cm4gZz0hMCx1KGUsZyk7LTE9PT10JiYoeS9wPC4zJiZwPjQ/KGc9ITAsdD0wKTooZz0hMSx0PTEpKTtjb25zdCB3PVtdO2ZvcihtPTA7bTxwOysrbSl3W21dPXQ7Y29uc3Qgdj1zKHQpPyJSIjoiTCIseD12LFM9eDtsZXQgQSxrPXg7Zm9yKG09MDttPHA7KyttKSJOU00iPT09ZlttXT9mW21dPWs6az1mW21dO2ZvcihrPXgsbT0wO208cDsrK20pQT1mW21dLCJFTiI9PT1BP2ZbbV09IkFMIj09PWs/IkFOIjoiRU4iOiJSIiE9PUEmJiJMIiE9PUEmJiJBTCIhPT1BfHwoaz1BKTtmb3IobT0wO208cDsrK20pQT1mW21dLCJBTCI9PT1BJiYoZlttXT0iUiIpO2ZvcihtPTE7bTxwLTE7KyttKSJFUyI9PT1mW21dJiYiRU4iPT09ZlttLTFdJiYiRU4iPT09ZlttKzFdJiYoZlttXT0iRU4iKSwiQ1MiIT09ZlttXXx8IkVOIiE9PWZbbS0xXSYmIkFOIiE9PWZbbS0xXXx8ZlttKzFdIT09ZlttLTFdfHwoZlttXT1mW20tMV0pO2ZvcihtPTA7bTxwOysrbSlpZigiRU4iPT09ZlttXSl7Zm9yKGxldCBlPW0tMTtlPj0wJiYiRVQiPT09ZltlXTstLWUpZltlXT0iRU4iO2ZvcihsZXQgZT1tKzE7ZTxwJiYiRVQiPT09ZltlXTsrK2UpZltlXT0iRU4ifWZvcihtPTA7bTxwOysrbSlBPWZbbV0sIldTIiE9PUEmJiJFUyIhPT1BJiYiRVQiIT09QSYmIkNTIiE9PUF8fChmW21dPSJPTiIpO2ZvcihrPXgsbT0wO208cDsrK20pQT1mW21dLCJFTiI9PT1BP2ZbbV09IkwiPT09az8iTCI6IkVOIjoiUiIhPT1BJiYiTCIhPT1BfHwoaz1BKTtmb3IobT0wO208cDsrK20paWYoIk9OIj09PWZbbV0pe2NvbnN0IGU9YyhmLG0rMSwiT04iKTtsZXQgdD14O20+MCYmKHQ9ZlttLTFdKTtsZXQgcj1TO2UrMTxwJiYocj1mW2UrMV0pLCJMIiE9PXQmJih0PSJSIiksIkwiIT09ciYmKHI9IlIiKSx0PT09ciYmbChmLG0sZSx0KSxtPWUtMX1mb3IobT0wO208cDsrK20pIk9OIj09PWZbbV0mJihmW21dPXYpO2ZvcihtPTA7bTxwOysrbSlBPWZbbV0sbyh3W21dKT8iUiI9PT1BP3dbbV0rPTE6IkFOIiE9PUEmJiJFTiIhPT1BfHwod1ttXSs9Mik6IkwiIT09QSYmIkFOIiE9PUEmJiJFTiIhPT1BfHwod1ttXSs9MSk7bGV0IEMsTz0tMSxGPTk5O2ZvcihtPTAsYj13Lmxlbmd0aDttPGI7KyttKUM9d1ttXSxPPEMmJihPPUMpLEY+QyYmcyhDKSYmKEY9Qyk7Zm9yKEM9TztDPj1GOy0tQyl7bGV0IGU9LTE7Zm9yKG09MCxiPXcubGVuZ3RoO208YjsrK20pd1ttXTxDP2U+PTAmJihoKGQsZSxtKSxlPS0xKTplPDAmJihlPW0pO2U+PTAmJmgoZCxlLHcubGVuZ3RoKX1mb3IobT0wLGI9ZC5sZW5ndGg7bTxiOysrbSl7Y29uc3QgZT1kW21dOyI8IiE9PWUmJiI+IiE9PWV8fChkW21dPSIiKX1yZXR1cm4gdShkLmpvaW4oIiIpLGcpfTt2YXIgbj1yKDE0NCk7Y29uc3QgYT1bIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIlMiLCJCIiwiUyIsIldTIiwiQiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCIiwiQiIsIkIiLCJTIiwiV1MiLCJPTiIsIk9OIiwiRVQiLCJFVCIsIkVUIiwiT04iLCJPTiIsIk9OIiwiT04iLCJPTiIsIkVTIiwiQ1MiLCJFUyIsIkNTIiwiQ1MiLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkNTIiwiT04iLCJPTiIsIk9OIiwiT04iLCJPTiIsIk9OIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJPTiIsIk9OIiwiT04iLCJPTiIsIk9OIiwiT04iLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIk9OIiwiT04iLCJPTiIsIk9OIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJDUyIsIk9OIiwiRVQiLCJFVCIsIkVUIiwiRVQiLCJPTiIsIk9OIiwiT04iLCJPTiIsIkwiLCJPTiIsIk9OIiwiQk4iLCJPTiIsIk9OIiwiRVQiLCJFVCIsIkVOIiwiRU4iLCJPTiIsIkwiLCJPTiIsIk9OIiwiT04iLCJFTiIsIkwiLCJPTiIsIk9OIiwiT04iLCJPTiIsIk9OIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJPTiIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJPTiIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIl0saT1bIkFOIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIk9OIiwiT04iLCJBTCIsIkVUIiwiRVQiLCJBTCIsIkNTIiwiQUwiLCJPTiIsIk9OIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiQUwiLCJBTCIsIiIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiRVQiLCJBTiIsIkFOIiwiQUwiLCJBTCIsIkFMIiwiTlNNIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIkFOIiwiT04iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJBTCIsIkFMIiwiTlNNIiwiTlNNIiwiT04iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJBTCIsIkFMIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiXTtmdW5jdGlvbiBzKGUpe3JldHVybiAwIT0oMSZlKX1mdW5jdGlvbiBvKGUpe3JldHVybiAwPT0oMSZlKX1mdW5jdGlvbiBjKGUsdCxyKXtsZXQgbixhO2ZvcihuPXQsYT1lLmxlbmd0aDtuPGE7KytuKWlmKGVbbl0hPT1yKXJldHVybiBuO3JldHVybiBufWZ1bmN0aW9uIGwoZSx0LHIsbil7Zm9yKGxldCBhPXQ7YTxyOysrYSllW2FdPW59ZnVuY3Rpb24gaChlLHQscil7Zm9yKGxldCBuPXQsYT1yLTE7bjxhOysrbiwtLWEpe2NvbnN0IHQ9ZVtuXTtlW25dPWVbYV0sZVthXT10fX1mdW5jdGlvbiB1KGUsdCl7bGV0IHI9Imx0ciI7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0/cj0idHRiIjp0fHwocj0icnRsIikse3N0cjplLGRpcjpyfX1jb25zdCBkPVtdLGY9W119LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZXRGb250U3Vic3RpdHV0aW9uPWZ1bmN0aW9uKGUsdCxyLGQsZil7Y29uc3QgZz1kPSgwLG4ubm9ybWFsaXplRm9udE5hbWUpKGQpO2xldCBwPWUuZ2V0KGcpO2lmKHApcmV0dXJuIHA7bGV0IG09bC5nZXQoZCk7aWYoIW0pZm9yKGNvbnN0W2UsdF1vZiBoKWlmKGQuc3RhcnRzV2l0aChlKSl7ZD0iIi5jb25jYXQodCkuY29uY2F0KGQuc3Vic3RyaW5nKGUubGVuZ3RoKSksbT1sLmdldChkKTticmVha31sZXQgYj0hMTttfHwobT1sLmdldChmKSxiPSEwKTtjb25zdCB5PSIiLmNvbmNhdCh0LmdldERvY0lkKCksIl9zIikuY29uY2F0KHQuY3JlYXRlRm9udElkKCkpO2lmKCFtKXtpZighKDAsYS52YWxpZGF0ZUZvbnROYW1lKShkKSlyZXR1cm4gZS5zZXQoZyxudWxsKSxudWxsO2NvbnN0IHQ9L2JvbGQvZ2kudGVzdChkKSxyPS9vYmxpcXVlfGl0YWxpYy9naS50ZXN0KGQpO3JldHVybiBwPXtjc3M6eSxndWVzc0ZhbGxiYWNrOiEwLGxvYWRlZE5hbWU6eSxiYXNlRm9udE5hbWU6ZCxzcmM6ImxvY2FsKCIuY29uY2F0KGQsIikiKSxzdHlsZTp0JiZyJiZjfHx0JiZzfHxyJiZvfHxpfSxlLnNldChnLHApLHB9Y29uc3Qgdz1bXTtiJiYoMCxhLnZhbGlkYXRlRm9udE5hbWUpKGQpJiZ3LnB1c2goImxvY2FsKCIuY29uY2F0KGQsIikiKSk7Y29uc3R7c3R5bGU6dix1bHRpbWF0ZTp4fT11KG0sdyxyKSxTPW51bGw9PT14O3JldHVybiBwPXtjc3M6IiIuY29uY2F0KHkpLmNvbmNhdChTPyIiOiIsIi5jb25jYXQoeCkpLGd1ZXNzRmFsbGJhY2s6Uyxsb2FkZWROYW1lOnksYmFzZUZvbnROYW1lOmQsc3JjOncuam9pbigiLCIpLHN0eWxlOnZ9LGUuc2V0KGcscCkscH0scigxMzkpO3ZhciBuPXIoMTg4KSxhPXIoMTQ5KTtjb25zdCBpPXtzdHlsZToibm9ybWFsIix3ZWlnaHQ6Im5vcm1hbCJ9LHM9e3N0eWxlOiJub3JtYWwiLHdlaWdodDoiYm9sZCJ9LG89e3N0eWxlOiJpdGFsaWMiLHdlaWdodDoibm9ybWFsIn0sYz17c3R5bGU6Iml0YWxpYyIsd2VpZ2h0OiJib2xkIn0sbD1uZXcgTWFwKFtbIlRpbWVzLVJvbWFuIix7bG9jYWw6WyJUaW1lcyBOZXcgUm9tYW4iLCJUaW1lcy1Sb21hbiIsIlRpbWVzIiwiTGliZXJhdGlvbiBTZXJpZiIsIk5pbWJ1cyBSb21hbiIsIk5pbWJ1cyBSb21hbiBMIiwiVGlub3MiLCJUaG9ybmRhbGUiLCJUZVggR3lyZSBUZXJtZXMiLCJGcmVlU2VyaWYiLCJEZWphVnUgU2VyaWYiLCJCaXRzdHJlYW0gVmVyYSBTZXJpZiIsIlVidW50dSJdLHN0eWxlOmksdWx0aW1hdGU6InNlcmlmIn1dLFsiVGltZXMtQm9sZCIse2FsaWFzOiJUaW1lcy1Sb21hbiIsc3R5bGU6cyx1bHRpbWF0ZToic2VyaWYifV0sWyJUaW1lcy1JdGFsaWMiLHthbGlhczoiVGltZXMtUm9tYW4iLHN0eWxlOm8sdWx0aW1hdGU6InNlcmlmIn1dLFsiVGltZXMtQm9sZEl0YWxpYyIse2FsaWFzOiJUaW1lcy1Sb21hbiIsc3R5bGU6Yyx1bHRpbWF0ZToic2VyaWYifV0sWyJIZWx2ZXRpY2EiLHtsb2NhbDpbIkhlbHZldGljYSIsIkhlbHZldGljYSBOZXVlIiwiQXJpYWwiLCJBcmlhbCBOb3ZhIiwiTGliZXJhdGlvbiBTYW5zIiwiQXJpbW8iLCJOaW1idXMgU2FucyIsIk5pbWJ1cyBTYW5zIEwiLCJBMDMwIiwiVGVYIEd5cmUgSGVyb3MiLCJGcmVlU2FucyIsIkRlamFWdSBTYW5zIiwiQWxiYW55IiwiQml0c3RyZWFtIFZlcmEgU2FucyIsIkFyaWFsIFVuaWNvZGUgTVMiLCJNaWNyb3NvZnQgU2FucyBTZXJpZiIsIkFwcGxlIFN5bWJvbHMiLCJDYW50YXJlbGwiXSxwYXRoOiJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyLnR0ZiIsc3R5bGU6aSx1bHRpbWF0ZToic2Fucy1zZXJpZiJ9XSxbIkhlbHZldGljYS1Cb2xkIix7YWxpYXM6IkhlbHZldGljYSIscGF0aDoiTGliZXJhdGlvblNhbnMtQm9sZC50dGYiLHN0eWxlOnMsdWx0aW1hdGU6InNhbnMtc2VyaWYifV0sWyJIZWx2ZXRpY2EtT2JsaXF1ZSIse2FsaWFzOiJIZWx2ZXRpY2EiLHBhdGg6IkxpYmVyYXRpb25TYW5zLUl0YWxpYy50dGYiLHN0eWxlOm8sdWx0aW1hdGU6InNhbnMtc2VyaWYifV0sWyJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLHthbGlhczoiSGVsdmV0aWNhIixwYXRoOiJMaWJlcmF0aW9uU2Fucy1Cb2xkSXRhbGljLnR0ZiIsc3R5bGU6Yyx1bHRpbWF0ZToic2Fucy1zZXJpZiJ9XSxbIkNvdXJpZXIiLHtsb2NhbDpbIkNvdXJpZXIiLCJDb3VyaWVyIE5ldyIsIkxpYmVyYXRpb24gTW9ubyIsIk5pbWJ1cyBNb25vIiwiTmltYnVzIE1vbm8gTCIsIkNvdXNpbmUiLCJDdW1iZXJsYW5kIiwiVGVYIEd5cmUgQ3Vyc29yIiwiRnJlZU1vbm8iXSxzdHlsZTppLHVsdGltYXRlOiJtb25vc3BhY2UifV0sWyJDb3VyaWVyLUJvbGQiLHthbGlhczoiQ291cmllciIsc3R5bGU6cyx1bHRpbWF0ZToibW9ub3NwYWNlIn1dLFsiQ291cmllci1PYmxpcXVlIix7YWxpYXM6IkNvdXJpZXIiLHN0eWxlOm8sdWx0aW1hdGU6Im1vbm9zcGFjZSJ9XSxbIkNvdXJpZXItQm9sZE9ibGlxdWUiLHthbGlhczoiQ291cmllciIsc3R5bGU6Yyx1bHRpbWF0ZToibW9ub3NwYWNlIn1dLFsiQXJpYWxCbGFjayIse2xvY2FsOlsiQXJpYWwgQmxhY2siXSxzdHlsZTp7c3R5bGU6Im5vcm1hbCIsd2VpZ2h0OiI5MDAifSxmYWxsYmFjazoiSGVsdmV0aWNhLUJvbGQifV0sWyJBcmlhbEJsYWNrLUJvbGQiLHthbGlhczoiQXJpYWxCbGFjayJ9XSxbIkFyaWFsQmxhY2stSXRhbGljIix7YWxpYXM6IkFyaWFsQmxhY2siLHN0eWxlOntzdHlsZToiaXRhbGljIix3ZWlnaHQ6IjkwMCJ9LGZhbGxiYWNrOiJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUifV0sWyJBcmlhbEJsYWNrLUJvbGRJdGFsaWMiLHthbGlhczoiQXJpYWxCbGFjay1JdGFsaWMifV0sWyJBcmlhbE5hcnJvdyIse2xvY2FsOlsiQXJpYWwgTmFycm93IiwiTGliZXJhdGlvbiBTYW5zIE5hcnJvdyIsIkhlbHZldGljYSBDb25kZW5zZWQiLCJOaW1idXMgU2FucyBOYXJyb3ciLCJUZVggR3lyZSBIZXJvcyBDbiJdLHN0eWxlOmksZmFsbGJhY2s6IkhlbHZldGljYSJ9XSxbIkFyaWFsTmFycm93LUJvbGQiLHthbGlhczoiQXJpYWxOYXJyb3ciLHN0eWxlOnMsZmFsbGJhY2s6IkhlbHZldGljYS1Cb2xkIn1dLFsiQXJpYWxOYXJyb3ctSXRhbGljIix7YWxpYXM6IkFyaWFsTmFycm93IixzdHlsZTpvLGZhbGxiYWNrOiJIZWx2ZXRpY2EtT2JsaXF1ZSJ9XSxbIkFyaWFsTmFycm93LUJvbGRJdGFsaWMiLHthbGlhczoiQXJpYWxOYXJyb3ciLHN0eWxlOmMsZmFsbGJhY2s6IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSJ9XSxbIkNhbGlicmkiLHtsb2NhbDpbIkNhbGlicmkiLCJDYXJsaXRvIl0sc3R5bGU6aSxmYWxsYmFjazoiSGVsdmV0aWNhIn1dLFsiQ2FsaWJyaS1Cb2xkIix7YWxpYXM6IkNhbGlicmkiLHN0eWxlOnMsZmFsbGJhY2s6IkhlbHZldGljYS1Cb2xkIn1dLFsiQ2FsaWJyaS1JdGFsaWMiLHthbGlhczoiQ2FsaWJyaSIsc3R5bGU6byxmYWxsYmFjazoiSGVsdmV0aWNhLU9ibGlxdWUifV0sWyJDYWxpYnJpLUJvbGRJdGFsaWMiLHthbGlhczoiQ2FsaWJyaSIsc3R5bGU6YyxmYWxsYmFjazoiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIn1dLFsiV2luZ2RpbmdzIix7bG9jYWw6WyJXaW5nZGluZ3MiLCJVUlcgRGluZ2JhdHMiXSxzdHlsZTppfV0sWyJXaW5nZGluZ3MtUmVndWxhciIse2FsaWFzOiJXaW5nZGluZ3MifV0sWyJXaW5nZGluZ3MtQm9sZCIse2FsaWFzOiJXaW5nZGluZ3MifV1dKSxoPW5ldyBNYXAoW1siQXJpYWwtQmxhY2siLCJBcmlhbEJsYWNrIl1dKTtmdW5jdGlvbiB1KGUsdCxyKXtsZXR7YWxpYXM6bixsb2NhbDphLHBhdGg6aSxmYWxsYmFjazpoLHN0eWxlOmQsdWx0aW1hdGU6Zn09ZSxnPSEoYXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10pfHxhcmd1bWVudHNbM10scD0hKGFyZ3VtZW50cy5sZW5ndGg+NCYmdm9pZCAwIT09YXJndW1lbnRzWzRdKXx8YXJndW1lbnRzWzRdLG09YXJndW1lbnRzLmxlbmd0aD41JiZ2b2lkIDAhPT1hcmd1bWVudHNbNV0/YXJndW1lbnRzWzVdOiIiO2NvbnN0IGI9e3N0eWxlOm51bGwsdWx0aW1hdGU6bnVsbH07aWYoYSl7Y29uc3QgZT1tPyIgIi5jb25jYXQobSk6IiI7Zm9yKGNvbnN0IHIgb2YgYSl0LnB1c2goImxvY2FsKCIuY29uY2F0KHIpLmNvbmNhdChlLCIpIikpfWlmKG4pe2NvbnN0IGU9bC5nZXQobiksYT1tfHxmdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSBzOnJldHVybiJCb2xkIjtjYXNlIG86cmV0dXJuIkl0YWxpYyI7Y2FzZSBjOnJldHVybiJCb2xkIEl0YWxpYyI7ZGVmYXVsdDppZigiYm9sZCI9PT0obnVsbD09ZT92b2lkIDA6ZS53ZWlnaHQpKXJldHVybiJCb2xkIjtpZigiaXRhbGljIj09PShudWxsPT1lP3ZvaWQgMDplLnN0eWxlKSlyZXR1cm4iSXRhbGljIn1yZXR1cm4iIn0oZCk7T2JqZWN0LmFzc2lnbihiLHUoZSx0LHIsZyYmIWgscCYmIWksYSkpfWlmKGQmJihiLnN0eWxlPWQpLGYmJihiLnVsdGltYXRlPWYpLGcmJmgpe2NvbnN0IGU9bC5nZXQoaCkse3VsdGltYXRlOm59PXUoZSx0LHIsZyxwJiYhaSxtKTtiLnVsdGltYXRlfHwoYi51bHRpbWF0ZT1uKX1yZXR1cm4gcCYmaSYmciYmdC5wdXNoKCJ1cmwoIi5jb25jYXQocikuY29uY2F0KGksIikiKSksYn19LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5JbWFnZVJlc2l6ZXI9dm9pZCAwLHIoODQpLHIoOTMpLHIoOTQpLHIoOTcpLHIoOTkpLHIoMTAxKSxyKDEwNSkscigxMDgpLHIoMTE1KSxyKDIpO3ZhciBuPXIoMTQ0KTtjbGFzcyBhe2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5faW1nRGF0YT1lLHRoaXMuX2lzTWFzaz10fXN0YXRpYyBuZWVkc1RvQmVSZXNpemVkKGUsdCl7aWYoZTw9dGhpcy5fZ29vZFNxdWFyZUxlbmd0aCYmdDw9dGhpcy5fZ29vZFNxdWFyZUxlbmd0aClyZXR1cm4hMTtjb25zdHtNQVhfRElNOnJ9PXRoaXM7aWYoZT5yfHx0PnIpcmV0dXJuITA7Y29uc3Qgbj1lKnQ7cmV0dXJuIHRoaXMuX2hhc01heEFyZWE/bj50aGlzLk1BWF9BUkVBOiEobjx0aGlzLl9nb29kU3F1YXJlTGVuZ3RoKioyKSYmKHRoaXMuX2FyZUdvb2REaW1zKGUsdCk/KHRoaXMuX2dvb2RTcXVhcmVMZW5ndGg9TWF0aC5tYXgodGhpcy5fZ29vZFNxdWFyZUxlbmd0aCxNYXRoLmZsb29yKE1hdGguc3FydChlKnQpKSksITEpOih0aGlzLl9nb29kU3F1YXJlTGVuZ3RoPXRoaXMuX2d1ZXNzTWF4KHRoaXMuX2dvb2RTcXVhcmVMZW5ndGgsciwxMjgsMCksbj4odGhpcy5NQVhfQVJFQT10aGlzLl9nb29kU3F1YXJlTGVuZ3RoKioyKSkpfXN0YXRpYyBnZXQgTUFYX0RJTSgpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJNQVhfRElNIix0aGlzLl9ndWVzc01heCgyMDQ4LDY1NTM3LDAsMSkpfXN0YXRpYyBnZXQgTUFYX0FSRUEoKXtyZXR1cm4gdGhpcy5faGFzTWF4QXJlYT0hMCwoMCxuLnNoYWRvdykodGhpcywiTUFYX0FSRUEiLHRoaXMuX2d1ZXNzTWF4KGEuX2dvb2RTcXVhcmVMZW5ndGgsdGhpcy5NQVhfRElNLDEyOCwwKSoqMil9c3RhdGljIHNldCBNQVhfQVJFQShlKXtlPj0wJiYodGhpcy5faGFzTWF4QXJlYT0hMCwoMCxuLnNoYWRvdykodGhpcywiTUFYX0FSRUEiLGUpKX1zdGF0aWMgc2V0TWF4QXJlYShlKXt0aGlzLl9oYXNNYXhBcmVhfHwodGhpcy5NQVhfQVJFQT1lPj4yKX1zdGF0aWMgX2FyZUdvb2REaW1zKGUsdCl7dHJ5e2NvbnN0IHI9bmV3IE9mZnNjcmVlbkNhbnZhcyhlLHQpLG49ci5nZXRDb250ZXh0KCIyZCIpO24uZmlsbFJlY3QoMCwwLDEsMSk7Y29uc3QgYT1uLmdldEltYWdlRGF0YSgwLDAsMSwxKS5kYXRhWzNdO3JldHVybiByLndpZHRoPXIuaGVpZ2h0PTEsMCE9PWF9Y2F0Y2goZSl7cmV0dXJuITF9fXN0YXRpYyBfZ3Vlc3NNYXgoZSx0LHIsbil7Zm9yKDtlK3IrMTx0Oyl7Y29uc3Qgcj1NYXRoLmZsb29yKChlK3QpLzIpLGE9bnx8cjt0aGlzLl9hcmVHb29kRGltcyhyLGEpP2U9cjp0PXJ9cmV0dXJuIGV9c3RhdGljIGFzeW5jIGNyZWF0ZUltYWdlKGUpe3JldHVybiBuZXcgYShlLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0pLl9jcmVhdGVJbWFnZSgpfWFzeW5jIF9jcmVhdGVJbWFnZSgpe2NvbnN0IGU9dGhpcy5fZW5jb2RlQk1QKCksdD1uZXcgQmxvYihbZS5idWZmZXJdLHt0eXBlOiJpbWFnZS9ibXAifSkscj1jcmVhdGVJbWFnZUJpdG1hcCh0KSx7TUFYX0FSRUE6bixNQVhfRElNOml9PWEse19pbWdEYXRhOnN9PXRoaXMse3dpZHRoOm8saGVpZ2h0OmN9PXMsbD1NYXRoLm1heChvL2ksYy9pLE1hdGguc3FydChvKmMvbikpLGg9TWF0aC5tYXgobCwyKSx1PU1hdGgucm91bmQoMTAqKGwrMS4yNSkpLzEwL2gsZD1NYXRoLmZsb29yKE1hdGgubG9nMih1KSksZj1uZXcgQXJyYXkoZCsyKS5maWxsKDIpO2ZbMF09aCxmLnNwbGljZSgtMSwxLHUvKDE8PGQpKTtsZXQgZz1vLHA9YyxtPWF3YWl0IHI7Zm9yKGNvbnN0IGUgb2YgZil7Y29uc3QgdD1nLHI9cDtnPU1hdGguZmxvb3IoZy9lKS0xLHA9TWF0aC5mbG9vcihwL2UpLTE7Y29uc3Qgbj1uZXcgT2Zmc2NyZWVuQ2FudmFzKGcscCk7bi5nZXRDb250ZXh0KCIyZCIpLmRyYXdJbWFnZShtLDAsMCx0LHIsMCwwLGcscCksbT1uLnRyYW5zZmVyVG9JbWFnZUJpdG1hcCgpfXJldHVybiBzLmRhdGE9bnVsbCxzLmJpdG1hcD1tLHMud2lkdGg9ZyxzLmhlaWdodD1wLHN9X2VuY29kZUJNUCgpe2NvbnN0e3dpZHRoOmUsaGVpZ2h0OnQsa2luZDpyfT10aGlzLl9pbWdEYXRhO2xldCBhLGk9dGhpcy5faW1nRGF0YS5kYXRhLHM9bmV3IFVpbnQ4QXJyYXkoMCksbz1zLGM9MDtzd2l0Y2gocil7Y2FzZSBuLkltYWdlS2luZC5HUkFZU0NBTEVfMUJQUDp7YT0xLHM9bmV3IFVpbnQ4QXJyYXkodGhpcy5faXNNYXNrP1syNTUsMjU1LDI1NSwyNTUsMCwwLDAsMF06WzAsMCwwLDAsMjU1LDI1NSwyNTUsMjU1XSk7Y29uc3Qgcj1lKzc+PjMsbj1yKzMmLTQ7aWYociE9PW4pe2NvbnN0IGU9bmV3IFVpbnQ4QXJyYXkobip0KTtsZXQgYT0wO2ZvcihsZXQgcz0wLG89dCpyO3M8bztzKz1yLGErPW4pZS5zZXQoaS5zdWJhcnJheShzLHMrciksYSk7aT1lfWJyZWFrfWNhc2Ugbi5JbWFnZUtpbmQuUkdCXzI0QlBQOmlmKGE9MjQsMyZlKXtjb25zdCByPTMqZSxuPXIrMyYtNCxhPW4tcixzPW5ldyBVaW50OEFycmF5KG4qdCk7bGV0IG89MDtmb3IobGV0IGU9MCxuPXQqcjtlPG47ZSs9cil7Y29uc3QgdD1pLnN1YmFycmF5KGUsZStyKTtmb3IobGV0IGU9MDtlPHI7ZSs9MylzW28rK109dFtlKzJdLHNbbysrXT10W2UrMV0sc1tvKytdPXRbZV07bys9YX1pPXN9ZWxzZSBmb3IobGV0IGU9MCx0PWkubGVuZ3RoO2U8dDtlKz0zKXtjb25zdCB0PWlbZV07aVtlXT1pW2UrMl0saVtlKzJdPXR9YnJlYWs7Y2FzZSBuLkltYWdlS2luZC5SR0JBXzMyQlBQOmE9MzIsYz0zLG89bmV3IFVpbnQ4QXJyYXkoNjgpO2NvbnN0IHI9bmV3IERhdGFWaWV3KG8uYnVmZmVyKTtuLkZlYXR1cmVUZXN0LmlzTGl0dGxlRW5kaWFuPyhyLnNldFVpbnQzMigwLDI1NSwhMCksci5zZXRVaW50MzIoNCw2NTI4MCwhMCksci5zZXRVaW50MzIoOCwxNjcxMTY4MCwhMCksci5zZXRVaW50MzIoMTIsNDI3ODE5MDA4MCwhMCkpOihyLnNldFVpbnQzMigwLDQyNzgxOTAwODAsITApLHIuc2V0VWludDMyKDQsMTY3MTE2ODAsITApLHIuc2V0VWludDMyKDgsNjUyODAsITApLHIuc2V0VWludDMyKDEyLDI1NSwhMCkpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdCIpfWxldCBsPTA7Y29uc3QgaD00MCtvLmxlbmd0aCx1PTE0K2grcy5sZW5ndGgraS5sZW5ndGgsZD1uZXcgVWludDhBcnJheSh1KSxmPW5ldyBEYXRhVmlldyhkLmJ1ZmZlcik7cmV0dXJuIGYuc2V0VWludDE2KGwsMTk3NzgsITApLGwrPTIsZi5zZXRVaW50MzIobCx1LCEwKSxsKz00LGYuc2V0VWludDMyKGwsMCwhMCksbCs9NCxmLnNldFVpbnQzMihsLDE0K2grcy5sZW5ndGgsITApLGwrPTQsZi5zZXRVaW50MzIobCxoLCEwKSxsKz00LGYuc2V0SW50MzIobCxlLCEwKSxsKz00LGYuc2V0SW50MzIobCwtdCwhMCksbCs9NCxmLnNldFVpbnQxNihsLDEsITApLGwrPTIsZi5zZXRVaW50MTYobCxhLCEwKSxsKz0yLGYuc2V0VWludDMyKGwsYywhMCksbCs9NCxmLnNldFVpbnQzMihsLDAsITApLGwrPTQsZi5zZXRJbnQzMihsLDAsITApLGwrPTQsZi5zZXRJbnQzMihsLDAsITApLGwrPTQsZi5zZXRVaW50MzIobCxzLmxlbmd0aC80LCEwKSxsKz00LGYuc2V0VWludDMyKGwsMCwhMCksbCs9NCxkLnNldChvLGwpLGwrPW8ubGVuZ3RoLGQuc2V0KHMsbCksbCs9cy5sZW5ndGgsZC5zZXQoaSxsKSxkfX10LkltYWdlUmVzaXplcj1hLGEuX2dvb2RTcXVhcmVMZW5ndGg9MjA0OH0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk11cm11ckhhc2gzXzY0PXZvaWQgMCxyKDg0KSxyKDkzKSxyKDk0KSxyKDk3KSxyKDk5KSxyKDEwMSkscigxMDUpLHIoMTA4KSxyKDExNSkscigyKTt2YXIgbj1yKDE0NCk7Y29uc3QgYT0zMjg1Mzc3NTIwLGk9NDI5NDkwMTc2MCxzPTY1NTM1O3QuTXVybXVySGFzaDNfNjQ9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5oMT1lPzQyOTQ5NjcyOTUmZTphLHRoaXMuaDI9ZT80Mjk0OTY3Mjk1JmU6YX11cGRhdGUoZSl7bGV0IHQscjtpZigic3RyaW5nIj09dHlwZW9mIGUpe3Q9bmV3IFVpbnQ4QXJyYXkoMiplLmxlbmd0aCkscj0wO2ZvcihsZXQgbj0wLGE9ZS5sZW5ndGg7bjxhO24rKyl7Y29uc3QgYT1lLmNoYXJDb2RlQXQobik7YTw9MjU1P3RbcisrXT1hOih0W3IrK109YT4+PjgsdFtyKytdPTI1NSZhKX19ZWxzZXtpZighKDAsbi5pc0FycmF5QnVmZmVyKShlKSl0aHJvdyBuZXcgRXJyb3IoIldyb25nIGRhdGEgZm9ybWF0IGluIE11cm11ckhhc2gzXzY0X3VwZGF0ZS4gSW5wdXQgbXVzdCBiZSBhIHN0cmluZyBvciBhcnJheS4iKTt0PWUuc2xpY2UoKSxyPXQuYnl0ZUxlbmd0aH1jb25zdCBhPXI+PjIsbz1yLTQqYSxjPW5ldyBVaW50MzJBcnJheSh0LmJ1ZmZlciwwLGEpO2xldCBsPTAsaD0wLHU9dGhpcy5oMSxkPXRoaXMuaDI7Y29uc3QgZj0zNDMyOTE4MzUzLGc9NDYxODQ1OTA3LHA9MTE2MDEsbT0xMzcxNTtmb3IobGV0IGU9MDtlPGE7ZSsrKTEmZT8obD1jW2VdLGw9bCpmJml8bCpwJnMsbD1sPDwxNXxsPj4+MTcsbD1sKmcmaXxsKm0mcyx1Xj1sLHU9dTw8MTN8dT4+PjE5LHU9NSp1KzM4NjQyOTIxOTYpOihoPWNbZV0saD1oKmYmaXxoKnAmcyxoPWg8PDE1fGg+Pj4xNyxoPWgqZyZpfGgqbSZzLGRePWgsZD1kPDwxM3xkPj4+MTksZD01KmQrMzg2NDI5MjE5Nik7c3dpdGNoKGw9MCxvKXtjYXNlIDM6bF49dFs0KmErMl08PDE2O2Nhc2UgMjpsXj10WzQqYSsxXTw8ODtjYXNlIDE6bF49dFs0KmFdLGw9bCpmJml8bCpwJnMsbD1sPDwxNXxsPj4+MTcsbD1sKmcmaXxsKm0mcywxJmE/dV49bDpkXj1sfXRoaXMuaDE9dSx0aGlzLmgyPWR9aGV4ZGlnZXN0KCl7bGV0IGU9dGhpcy5oMSx0PXRoaXMuaDI7cmV0dXJuIGVePXQ+Pj4xLGU9Mzk4MTgwNjc5NyplJml8MzYwNDUqZSZzLHQ9NDI4MzU0MzUxMSp0Jml8KDI5NTAxNjM3OTcqKHQ8PDE2fGU+Pj4xNikmaSk+Pj4xNixlXj10Pj4+MSxlPTQ0NDk4NDQwMyplJml8NjA0OTkqZSZzLHQ9MzMwMTg4MjM2Nip0Jml8KDMxMjA0Mzc4OTMqKHQ8PDE2fGU+Pj4xNikmaSk+Pj4xNixlXj10Pj4+MSwoZT4+PjApLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg4LCIwIikrKHQ+Pj4wKS50b1N0cmluZygxNikucGFkU3RhcnQoOCwiMCIpfX19LChlLHQscik9Pnt2YXIgbjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5PcGVyYXRvckxpc3Q9dm9pZCAwLHIoMikscigxMzkpLHIoODQpLHIoOTMpLHIoOTQpLHIoOTcpLHIoOTkpLHIoMTAxKSxyKDEwNSkscigxMDgpLHIoMTE1KSxyKDExNikscigxMjYpLHIoMTI4KSxyKDEzMSkscigxMzMpLHIoMTM1KSxyKDEzNyk7dmFyIGE9cigxNDQpO2Z1bmN0aW9uIHMoZSx0LHIsbixhKXtsZXQgaT1lO2ZvcihsZXQgZT0wLHI9dC5sZW5ndGgtMTtlPHI7ZSsrKXt2YXIgcztjb25zdCByPXRbZV07aT0ocz1pKVtyXXx8KHNbcl09W10pfWlbdC5hdCgtMSldPXtjaGVja0ZuOnIsaXRlcmF0ZUZuOm4scHJvY2Vzc0ZuOmF9fWNvbnN0IG89W107cyhvLFthLk9QUy5zYXZlLGEuT1BTLnRyYW5zZm9ybSxhLk9QUy5wYWludElubGluZUltYWdlWE9iamVjdCxhLk9QUy5yZXN0b3JlXSxudWxsLChmdW5jdGlvbihlLHQpe2NvbnN0IHI9ZS5mbkFycmF5LG49KHQtKGUuaUN1cnItMykpJTQ7c3dpdGNoKG4pe2Nhc2UgMDpyZXR1cm4gclt0XT09PWEuT1BTLnNhdmU7Y2FzZSAxOnJldHVybiByW3RdPT09YS5PUFMudHJhbnNmb3JtO2Nhc2UgMjpyZXR1cm4gclt0XT09PWEuT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0O2Nhc2UgMzpyZXR1cm4gclt0XT09PWEuT1BTLnJlc3RvcmV9dGhyb3cgbmV3IEVycm9yKCJpdGVyYXRlSW5saW5lSW1hZ2VHcm91cCAtIGludmFsaWQgcG9zOiAiLmNvbmNhdChuKSl9KSwoZnVuY3Rpb24oZSx0KXtjb25zdCByPWUuZm5BcnJheSxuPWUuYXJnc0FycmF5LGk9ZS5pQ3VycixzPWktMyxvPWktMixjPWktMSxsPU1hdGgubWluKE1hdGguZmxvb3IoKHQtcykvNCksMjAwKTtpZihsPDEwKXJldHVybiB0LSh0LXMpJTQ7bGV0IGg9MDtjb25zdCB1PVtdO2xldCBkPTAsZj0xLGc9MTtmb3IobGV0IGU9MDtlPGw7ZSsrKXtjb25zdCB0PW5bbysoZTw8MildLHI9bltjKyhlPDwyKV1bMF07ZityLndpZHRoPjFlMyYmKGg9TWF0aC5tYXgoaCxmKSxnKz1kKzIsZj0wLGQ9MCksdS5wdXNoKHt0cmFuc2Zvcm06dCx4OmYseTpnLHc6ci53aWR0aCxoOnIuaGVpZ2h0fSksZis9ci53aWR0aCsyLGQ9TWF0aC5tYXgoZCxyLmhlaWdodCl9Y29uc3QgcD1NYXRoLm1heChoLGYpKzEsbT1nK2QrMSxiPW5ldyBVaW50OEFycmF5KHAqbSo0KSx5PXA8PDI7Zm9yKGxldCBlPTA7ZTxsO2UrKyl7Y29uc3QgdD1uW2MrKGU8PDIpXVswXS5kYXRhLHI9dVtlXS53PDwyO2xldCBhPTAsaT11W2VdLngrdVtlXS55KnA8PDI7Yi5zZXQodC5zdWJhcnJheSgwLHIpLGkteSk7Zm9yKGxldCBuPTAscz11W2VdLmg7bjxzO24rKyliLnNldCh0LnN1YmFycmF5KGEsYStyKSxpKSxhKz1yLGkrPXk7Zm9yKGIuc2V0KHQuc3ViYXJyYXkoYS1yLGEpLGkpO2k+PTA7KXRbaS00XT10W2ldLHRbaS0zXT10W2krMV0sdFtpLTJdPXRbaSsyXSx0W2ktMV09dFtpKzNdLHRbaStyXT10W2krci00XSx0W2krcisxXT10W2krci0zXSx0W2krcisyXT10W2krci0yXSx0W2krciszXT10W2krci0xXSxpLT15fWNvbnN0IHc9e3dpZHRoOnAsaGVpZ2h0Om19O2lmKGUuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQpe2NvbnN0IGU9bmV3IE9mZnNjcmVlbkNhbnZhcyhwLG0pO2UuZ2V0Q29udGV4dCgiMmQiKS5wdXRJbWFnZURhdGEobmV3IEltYWdlRGF0YShuZXcgVWludDhDbGFtcGVkQXJyYXkoYi5idWZmZXIpLHAsbSksMCwwKSx3LmJpdG1hcD1lLnRyYW5zZmVyVG9JbWFnZUJpdG1hcCgpLHcuZGF0YT1udWxsfWVsc2Ugdy5raW5kPWEuSW1hZ2VLaW5kLlJHQkFfMzJCUFAsdy5kYXRhPWI7cmV0dXJuIHIuc3BsaWNlKHMsNCpsLGEuT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXApLG4uc3BsaWNlKHMsNCpsLFt3LHVdKSxzKzF9KSkscyhvLFthLk9QUy5zYXZlLGEuT1BTLnRyYW5zZm9ybSxhLk9QUy5wYWludEltYWdlTWFza1hPYmplY3QsYS5PUFMucmVzdG9yZV0sbnVsbCwoZnVuY3Rpb24oZSx0KXtjb25zdCByPWUuZm5BcnJheSxuPSh0LShlLmlDdXJyLTMpKSU0O3N3aXRjaChuKXtjYXNlIDA6cmV0dXJuIHJbdF09PT1hLk9QUy5zYXZlO2Nhc2UgMTpyZXR1cm4gclt0XT09PWEuT1BTLnRyYW5zZm9ybTtjYXNlIDI6cmV0dXJuIHJbdF09PT1hLk9QUy5wYWludEltYWdlTWFza1hPYmplY3Q7Y2FzZSAzOnJldHVybiByW3RdPT09YS5PUFMucmVzdG9yZX10aHJvdyBuZXcgRXJyb3IoIml0ZXJhdGVJbWFnZU1hc2tHcm91cCAtIGludmFsaWQgcG9zOiAiLmNvbmNhdChuKSl9KSwoZnVuY3Rpb24oZSx0KXtjb25zdCByPWUuZm5BcnJheSxuPWUuYXJnc0FycmF5LGk9ZS5pQ3VycixzPWktMyxvPWktMixjPWktMTtsZXQgbD1NYXRoLmZsb29yKCh0LXMpLzQpO2lmKGw8MTApcmV0dXJuIHQtKHQtcyklNDtsZXQgaCx1LGQ9ITE7Y29uc3QgZj1uW2NdWzBdLGc9bltvXVswXSxwPW5bb11bMV0sbT1uW29dWzJdLGI9bltvXVszXTtpZihwPT09bSl7ZD0hMCxoPW8rNDtsZXQgZT1jKzQ7Zm9yKGxldCB0PTE7dDxsO3QrKyxoKz00LGUrPTQpaWYodT1uW2hdLG5bZV1bMF0hPT1mfHx1WzBdIT09Z3x8dVsxXSE9PXB8fHVbMl0hPT1tfHx1WzNdIT09Yil7dDwxMD9kPSExOmw9dDticmVha319aWYoZCl7bD1NYXRoLm1pbihsLDFlMyk7Y29uc3QgZT1uZXcgRmxvYXQzMkFycmF5KDIqbCk7aD1vO2ZvcihsZXQgdD0wO3Q8bDt0KyssaCs9NCl1PW5baF0sZVt0PDwxXT11WzRdLGVbMSsodDw8MSldPXVbNV07ci5zcGxpY2Uocyw0KmwsYS5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0UmVwZWF0KSxuLnNwbGljZShzLDQqbCxbZixnLHAsbSxiLGVdKX1lbHNle2w9TWF0aC5taW4obCwxMDApO2NvbnN0IGU9W107Zm9yKGxldCB0PTA7dDxsO3QrKyl7dT1uW28rKHQ8PDIpXTtjb25zdCByPW5bYysodDw8MildWzBdO2UucHVzaCh7ZGF0YTpyLmRhdGEsd2lkdGg6ci53aWR0aCxoZWlnaHQ6ci5oZWlnaHQsaW50ZXJwb2xhdGU6ci5pbnRlcnBvbGF0ZSxjb3VudDpyLmNvdW50LHRyYW5zZm9ybTp1fSl9ci5zcGxpY2Uocyw0KmwsYS5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0R3JvdXApLG4uc3BsaWNlKHMsNCpsLFtlXSl9cmV0dXJuIHMrMX0pKSxzKG8sW2EuT1BTLnNhdmUsYS5PUFMudHJhbnNmb3JtLGEuT1BTLnBhaW50SW1hZ2VYT2JqZWN0LGEuT1BTLnJlc3RvcmVdLChmdW5jdGlvbihlKXtjb25zdCB0PWUuYXJnc0FycmF5LHI9ZS5pQ3Vyci0yO3JldHVybiAwPT09dFtyXVsxXSYmMD09PXRbcl1bMl19KSwoZnVuY3Rpb24oZSx0KXtjb25zdCByPWUuZm5BcnJheSxuPWUuYXJnc0FycmF5LGk9KHQtKGUuaUN1cnItMykpJTQ7c3dpdGNoKGkpe2Nhc2UgMDpyZXR1cm4gclt0XT09PWEuT1BTLnNhdmU7Y2FzZSAxOmlmKHJbdF0hPT1hLk9QUy50cmFuc2Zvcm0pcmV0dXJuITE7Y29uc3QgaT1lLmlDdXJyLTIscz1uW2ldWzBdLG89bltpXVszXTtyZXR1cm4gblt0XVswXT09PXMmJjA9PT1uW3RdWzFdJiYwPT09blt0XVsyXSYmblt0XVszXT09PW87Y2FzZSAyOmlmKHJbdF0hPT1hLk9QUy5wYWludEltYWdlWE9iamVjdClyZXR1cm4hMTtjb25zdCBjPW5bZS5pQ3Vyci0xXVswXTtyZXR1cm4gblt0XVswXT09PWM7Y2FzZSAzOnJldHVybiByW3RdPT09YS5PUFMucmVzdG9yZX10aHJvdyBuZXcgRXJyb3IoIml0ZXJhdGVJbWFnZUdyb3VwIC0gaW52YWxpZCBwb3M6ICIuY29uY2F0KGkpKX0pLChmdW5jdGlvbihlLHQpe2NvbnN0IHI9ZS5mbkFycmF5LG49ZS5hcmdzQXJyYXksaT1lLmlDdXJyLHM9aS0zLG89aS0yLGM9bltpLTFdWzBdLGw9bltvXVswXSxoPW5bb11bM10sdT1NYXRoLm1pbihNYXRoLmZsb29yKCh0LXMpLzQpLDFlMyk7aWYodTwzKXJldHVybiB0LSh0LXMpJTQ7Y29uc3QgZD1uZXcgRmxvYXQzMkFycmF5KDIqdSk7bGV0IGY9bztmb3IobGV0IGU9MDtlPHU7ZSsrLGYrPTQpe2NvbnN0IHQ9bltmXTtkW2U8PDFdPXRbNF0sZFsxKyhlPDwxKV09dFs1XX1jb25zdCBnPVtjLGwsaCxkXTtyZXR1cm4gci5zcGxpY2Uocyw0KnUsYS5PUFMucGFpbnRJbWFnZVhPYmplY3RSZXBlYXQpLG4uc3BsaWNlKHMsNCp1LGcpLHMrMX0pKSxzKG8sW2EuT1BTLmJlZ2luVGV4dCxhLk9QUy5zZXRGb250LGEuT1BTLnNldFRleHRNYXRyaXgsYS5PUFMuc2hvd1RleHQsYS5PUFMuZW5kVGV4dF0sbnVsbCwoZnVuY3Rpb24oZSx0KXtjb25zdCByPWUuZm5BcnJheSxuPWUuYXJnc0FycmF5LGk9KHQtKGUuaUN1cnItNCkpJTU7c3dpdGNoKGkpe2Nhc2UgMDpyZXR1cm4gclt0XT09PWEuT1BTLmJlZ2luVGV4dDtjYXNlIDE6cmV0dXJuIHJbdF09PT1hLk9QUy5zZXRGb250O2Nhc2UgMjpyZXR1cm4gclt0XT09PWEuT1BTLnNldFRleHRNYXRyaXg7Y2FzZSAzOmlmKHJbdF0hPT1hLk9QUy5zaG93VGV4dClyZXR1cm4hMTtjb25zdCBpPWUuaUN1cnItMyxzPW5baV1bMF0sbz1uW2ldWzFdO3JldHVybiBuW3RdWzBdPT09cyYmblt0XVsxXT09PW87Y2FzZSA0OnJldHVybiByW3RdPT09YS5PUFMuZW5kVGV4dH10aHJvdyBuZXcgRXJyb3IoIml0ZXJhdGVTaG93VGV4dEdyb3VwIC0gaW52YWxpZCBwb3M6ICIuY29uY2F0KGkpKX0pLChmdW5jdGlvbihlLHQpe2NvbnN0IHI9ZS5mbkFycmF5LG49ZS5hcmdzQXJyYXksYT1lLmlDdXJyLGk9YS00LHM9YS0zLG89YS0yLGM9YS0xLGw9YSxoPW5bc11bMF0sdT1uW3NdWzFdO2xldCBkPU1hdGgubWluKE1hdGguZmxvb3IoKHQtaSkvNSksMWUzKTtpZihkPDMpcmV0dXJuIHQtKHQtaSklNTtsZXQgZj1pO2k+PTQmJnJbaS00XT09PXJbc10mJnJbaS0zXT09PXJbb10mJnJbaS0yXT09PXJbY10mJnJbaS0xXT09PXJbbF0mJm5baS00XVswXT09PWgmJm5baS00XVsxXT09PXUmJihkKyssZi09NSk7bGV0IGc9Zis0O2ZvcihsZXQgZT0xO2U8ZDtlKyspci5zcGxpY2UoZywzKSxuLnNwbGljZShnLDMpLGcrPTI7cmV0dXJuIGcrMX0pKTtjbGFzcyBje2NvbnN0cnVjdG9yKGUpe3RoaXMucXVldWU9ZX1fb3B0aW1pemUoKXt9cHVzaChlLHQpe3RoaXMucXVldWUuZm5BcnJheS5wdXNoKGUpLHRoaXMucXVldWUuYXJnc0FycmF5LnB1c2godCksdGhpcy5fb3B0aW1pemUoKX1mbHVzaCgpe31yZXNldCgpe319Y2xhc3MgbCBleHRlbmRzIGN7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksdGhpcy5zdGF0ZT1udWxsLHRoaXMuY29udGV4dD17aUN1cnI6MCxmbkFycmF5OmUuZm5BcnJheSxhcmdzQXJyYXk6ZS5hcmdzQXJyYXksaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ6ITF9LHRoaXMubWF0Y2g9bnVsbCx0aGlzLmxhc3RQcm9jZXNzZWQ9MH1zZXQgaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQoZSl7dGhpcy5jb250ZXh0LmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkPWV9X29wdGltaXplKCl7Y29uc3QgZT10aGlzLnF1ZXVlLmZuQXJyYXk7bGV0IHQ9dGhpcy5sYXN0UHJvY2Vzc2VkLHI9ZS5sZW5ndGgsbj10aGlzLnN0YXRlLGE9dGhpcy5tYXRjaDtpZighbiYmIWEmJnQrMT09PXImJiFvW2VbdF1dKXJldHVybiB2b2lkKHRoaXMubGFzdFByb2Nlc3NlZD1yKTtjb25zdCBpPXRoaXMuY29udGV4dDtmb3IoO3Q8cjspe2lmKGEpe2lmKCgwLGEuaXRlcmF0ZUZuKShpLHQpKXt0Kys7Y29udGludWV9aWYodD0oMCxhLnByb2Nlc3NGbikoaSx0KzEpLHI9ZS5sZW5ndGgsYT1udWxsLG49bnVsbCx0Pj1yKWJyZWFrfW49KG58fG8pW2VbdF1dLG4mJiFBcnJheS5pc0FycmF5KG4pPyhpLmlDdXJyPXQsdCsrLCFuLmNoZWNrRm58fCgwLG4uY2hlY2tGbikoaSk/KGE9bixuPW51bGwpOm49bnVsbCk6dCsrfXRoaXMuc3RhdGU9bix0aGlzLm1hdGNoPWEsdGhpcy5sYXN0UHJvY2Vzc2VkPXR9Zmx1c2goKXtmb3IoO3RoaXMubWF0Y2g7KXtjb25zdCBlPXRoaXMucXVldWUuZm5BcnJheS5sZW5ndGg7dGhpcy5sYXN0UHJvY2Vzc2VkPSgwLHRoaXMubWF0Y2gucHJvY2Vzc0ZuKSh0aGlzLmNvbnRleHQsZSksdGhpcy5tYXRjaD1udWxsLHRoaXMuc3RhdGU9bnVsbCx0aGlzLl9vcHRpbWl6ZSgpfX1yZXNldCgpe3RoaXMuc3RhdGU9bnVsbCx0aGlzLm1hdGNoPW51bGwsdGhpcy5sYXN0UHJvY2Vzc2VkPTB9fWNsYXNzIGh7Y29uc3RydWN0b3IoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MCx0PWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwO3RoaXMuX3N0cmVhbVNpbms9dCx0aGlzLmZuQXJyYXk9W10sdGhpcy5hcmdzQXJyYXk9W10sdGhpcy5vcHRpbWl6ZXI9IXR8fGUmYS5SZW5kZXJpbmdJbnRlbnRGbGFnLk9QTElTVD9uZXcgYyh0aGlzKTpuZXcgbCh0aGlzKSx0aGlzLmRlcGVuZGVuY2llcz1uZXcgU2V0LHRoaXMuX3RvdGFsTGVuZ3RoPTAsdGhpcy53ZWlnaHQ9MCx0aGlzLl9yZXNvbHZlZD10P251bGw6UHJvbWlzZS5yZXNvbHZlKCl9c2V0IGlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKGUpe3RoaXMub3B0aW1pemVyLmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkPWV9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLmFyZ3NBcnJheS5sZW5ndGh9Z2V0IHJlYWR5KCl7cmV0dXJuIHRoaXMuX3Jlc29sdmVkfHx0aGlzLl9zdHJlYW1TaW5rLnJlYWR5fWdldCB0b3RhbExlbmd0aCgpe3JldHVybiB0aGlzLl90b3RhbExlbmd0aCt0aGlzLmxlbmd0aH1hZGRPcChlLHQpe3RoaXMub3B0aW1pemVyLnB1c2goZSx0KSx0aGlzLndlaWdodCsrLHRoaXMuX3N0cmVhbVNpbmsmJih0aGlzLndlaWdodD49aC5DSFVOS19TSVpFfHx0aGlzLndlaWdodD49aC5DSFVOS19TSVpFX0FCT1VUJiYoZT09PWEuT1BTLnJlc3RvcmV8fGU9PT1hLk9QUy5lbmRUZXh0KSkmJnRoaXMuZmx1c2goKX1hZGRJbWFnZU9wcyhlLHQscil7dm9pZCAwIT09ciYmdGhpcy5hZGRPcChhLk9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wcyxbIk9DIixyXSksdGhpcy5hZGRPcChlLHQpLHZvaWQgMCE9PXImJnRoaXMuYWRkT3AoYS5PUFMuZW5kTWFya2VkQ29udGVudCxbXSl9YWRkRGVwZW5kZW5jeShlKXt0aGlzLmRlcGVuZGVuY2llcy5oYXMoZSl8fCh0aGlzLmRlcGVuZGVuY2llcy5hZGQoZSksdGhpcy5hZGRPcChhLk9QUy5kZXBlbmRlbmN5LFtlXSkpfWFkZERlcGVuZGVuY2llcyhlKXtmb3IoY29uc3QgdCBvZiBlKXRoaXMuYWRkRGVwZW5kZW5jeSh0KX1hZGRPcExpc3QoZSl7aWYoZSBpbnN0YW5jZW9mIGgpe2Zvcihjb25zdCB0IG9mIGUuZGVwZW5kZW5jaWVzKXRoaXMuZGVwZW5kZW5jaWVzLmFkZCh0KTtmb3IobGV0IHQ9MCxyPWUubGVuZ3RoO3Q8cjt0KyspdGhpcy5hZGRPcChlLmZuQXJyYXlbdF0sZS5hcmdzQXJyYXlbdF0pfWVsc2UoMCxhLndhcm4pKCdhZGRPcExpc3QgLSBpZ25vcmluZyBpbnZhbGlkICJvcExpc3QiIHBhcmFtZXRlci4nKX1nZXRJUigpe3JldHVybntmbkFycmF5OnRoaXMuZm5BcnJheSxhcmdzQXJyYXk6dGhpcy5hcmdzQXJyYXksbGVuZ3RoOnRoaXMubGVuZ3RofX1nZXQgX3RyYW5zZmVycygpe3ZhciBlO2NvbnN0IHQ9W10se2ZuQXJyYXk6cixhcmdzQXJyYXk6bixsZW5ndGg6aX09dGhpcztmb3IobGV0IHM9MDtzPGk7cysrKXN3aXRjaChyW3NdKXtjYXNlIGEuT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0OmNhc2UgYS5PUFMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3RHcm91cDpjYXNlIGEuT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdDpjb25zdCByPW5bc11bMF07IXIuY2FjaGVkJiYobnVsbD09PShlPXIuZGF0YSl8fHZvaWQgMD09PWU/dm9pZCAwOmUuYnVmZmVyKWluc3RhbmNlb2YgQXJyYXlCdWZmZXImJnQucHVzaChyLmRhdGEuYnVmZmVyKX1yZXR1cm4gdH1mbHVzaCgpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0sdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbDt0aGlzLm9wdGltaXplci5mbHVzaCgpO2NvbnN0IHI9dGhpcy5sZW5ndGg7dGhpcy5fdG90YWxMZW5ndGgrPXIsdGhpcy5fc3RyZWFtU2luay5lbnF1ZXVlKHtmbkFycmF5OnRoaXMuZm5BcnJheSxhcmdzQXJyYXk6dGhpcy5hcmdzQXJyYXksbGFzdENodW5rOmUsc2VwYXJhdGVBbm5vdHM6dCxsZW5ndGg6cn0sMSx0aGlzLl90cmFuc2ZlcnMpLHRoaXMuZGVwZW5kZW5jaWVzLmNsZWFyKCksdGhpcy5mbkFycmF5Lmxlbmd0aD0wLHRoaXMuYXJnc0FycmF5Lmxlbmd0aD0wLHRoaXMud2VpZ2h0PTAsdGhpcy5vcHRpbWl6ZXIucmVzZXQoKX19bj1oLGkoaCwiQ0hVTktfU0laRSIsMWUzKSxpKGgsIkNIVU5LX1NJWkVfQUJPVVQiLG4uQ0hVTktfU0laRS01KSx0Lk9wZXJhdG9yTGlzdD1ofSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuUERGSW1hZ2U9dm9pZCAwLHIoODQpLHIoOTMpLHIoOTQpLHIoOTcpLHIoOTkpLHIoMTAxKSxyKDEwNSkscigxMDgpLHIoMTE1KSxyKDIpO3ZhciBuPXIoMTQ0KSxhPXIoMTc4KSxpPXIoMTUxKSxzPXIoMTYyKSxvPXIoMTY4KSxjPXIoMjEyKSxsPXIoMTc2KSxoPXIoMTgwKSx1PXIoMTUwKTtmdW5jdGlvbiBkKGUsdCxyLG4pe3JldHVybihlPXQrZSpyKTwwP2U9MDplPm4mJihlPW4pLGV9ZnVuY3Rpb24gZihlLHQscixuLGEsaSl7Y29uc3Qgcz1hKmk7bGV0IG87bz10PD04P25ldyBVaW50OEFycmF5KHMpOnQ8PTE2P25ldyBVaW50MTZBcnJheShzKTpuZXcgVWludDMyQXJyYXkocyk7Y29uc3QgYz1yL2EsbD1uL2k7bGV0IGgsdSxkLGYsZz0wO2NvbnN0IHA9bmV3IFVpbnQxNkFycmF5KGEpLG09cjtmb3IoaD0wO2g8YTtoKyspcFtoXT1NYXRoLmZsb29yKGgqYyk7Zm9yKGg9MDtoPGk7aCsrKWZvcihkPU1hdGguZmxvb3IoaCpsKSptLHU9MDt1PGE7dSsrKWY9ZCtwW3VdLG9bZysrXT1lW2ZdO3JldHVybiBvfWNsYXNzIGd7Y29uc3RydWN0b3IoZSl7bGV0e3hyZWY6dCxyZXM6cixpbWFnZTphLGlzSW5saW5lOm89ITEsc21hc2s6Yz1udWxsLG1hc2s6bD1udWxsLGlzTWFzazpkPSExLHBkZkZ1bmN0aW9uRmFjdG9yeTpmLGxvY2FsQ29sb3JTcGFjZUNhY2hlOnB9PWU7dGhpcy5pbWFnZT1hO2NvbnN0IG09YS5kaWN0LGI9bS5nZXQoIkYiLCJGaWx0ZXIiKTtsZXQgeTtpZihiIGluc3RhbmNlb2YgdS5OYW1lKXk9Yi5uYW1lO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShiKSl7Y29uc3QgZT10LmZldGNoSWZSZWYoYlswXSk7ZSBpbnN0YW5jZW9mIHUuTmFtZSYmKHk9ZS5uYW1lKX1zd2l0Y2goeSl7Y2FzZSJKUFhEZWNvZGUiOmNvbnN0IGU9bmV3IGguSnB4SW1hZ2U7ZS5wYXJzZUltYWdlUHJvcGVydGllcyhhLnN0cmVhbSksYS5zdHJlYW0ucmVzZXQoKSxhLndpZHRoPWUud2lkdGgsYS5oZWlnaHQ9ZS5oZWlnaHQsYS5iaXRzUGVyQ29tcG9uZW50PWUuYml0c1BlckNvbXBvbmVudCxhLm51bUNvbXBzPWUuY29tcG9uZW50c0NvdW50O2JyZWFrO2Nhc2UiSkJJRzJEZWNvZGUiOmEuYml0c1BlckNvbXBvbmVudD0xLGEubnVtQ29tcHM9MX1sZXQgdz1tLmdldCgiVyIsIldpZHRoIiksdj1tLmdldCgiSCIsIkhlaWdodCIpO2lmKE51bWJlci5pc0ludGVnZXIoYS53aWR0aCkmJmEud2lkdGg+MCYmTnVtYmVyLmlzSW50ZWdlcihhLmhlaWdodCkmJmEuaGVpZ2h0PjAmJihhLndpZHRoIT09d3x8YS5oZWlnaHQhPT12KSYmKCgwLG4ud2FybikoIlBERkltYWdlIC0gdXNpbmcgdGhlIFdpZHRoL0hlaWdodCBvZiB0aGUgaW1hZ2UgZGF0YSwgcmF0aGVyIHRoYW4gdGhlIGltYWdlIGRpY3Rpb25hcnkuIiksdz1hLndpZHRoLHY9YS5oZWlnaHQpLHc8MXx8djwxKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIGltYWdlIHdpZHRoOiAiLmNvbmNhdCh3LCIgb3IgaGVpZ2h0OiAiKS5jb25jYXQodikpO3RoaXMud2lkdGg9dyx0aGlzLmhlaWdodD12LHRoaXMuaW50ZXJwb2xhdGU9bS5nZXQoIkkiLCJJbnRlcnBvbGF0ZSIpLHRoaXMuaW1hZ2VNYXNrPW0uZ2V0KCJJTSIsIkltYWdlTWFzayIpfHwhMSx0aGlzLm1hdHRlPW0uZ2V0KCJNYXR0ZSIpfHwhMTtsZXQgeD1hLmJpdHNQZXJDb21wb25lbnQ7aWYoIXgmJih4PW0uZ2V0KCJCUEMiLCJCaXRzUGVyQ29tcG9uZW50IiksIXgpKXtpZighdGhpcy5pbWFnZU1hc2spdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkJpdHMgcGVyIGNvbXBvbmVudCBtaXNzaW5nIGluIGltYWdlOiAiLmNvbmNhdCh0aGlzLmltYWdlTWFzaykpO3g9MX1pZih0aGlzLmJwYz14LCF0aGlzLmltYWdlTWFzayl7bGV0IGU9bS5nZXRSYXcoIkNTIil8fG0uZ2V0UmF3KCJDb2xvclNwYWNlIik7aWYoIWUpc3dpdGNoKCgwLG4uaW5mbykoIkpQWCBpbWFnZXMgKHdoaWNoIGRvIG5vdCByZXF1aXJlIGNvbG9yIHNwYWNlcykiKSxhLm51bUNvbXBzKXtjYXNlIDE6ZT11Lk5hbWUuZ2V0KCJEZXZpY2VHcmF5Iik7YnJlYWs7Y2FzZSAzOmU9dS5OYW1lLmdldCgiRGV2aWNlUkdCIik7YnJlYWs7Y2FzZSA0OmU9dS5OYW1lLmdldCgiRGV2aWNlQ01ZSyIpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJKUFggaW1hZ2VzIHdpdGggIi5jb25jYXQoYS5udW1Db21wcywiIGNvbG9yIGNvbXBvbmVudHMgbm90IHN1cHBvcnRlZC4iKSl9dGhpcy5jb2xvclNwYWNlPXMuQ29sb3JTcGFjZS5wYXJzZSh7Y3M6ZSx4cmVmOnQscmVzb3VyY2VzOm8/cjpudWxsLHBkZkZ1bmN0aW9uRmFjdG9yeTpmLGxvY2FsQ29sb3JTcGFjZUNhY2hlOnB9KSx0aGlzLm51bUNvbXBzPXRoaXMuY29sb3JTcGFjZS5udW1Db21wc31pZih0aGlzLmRlY29kZT1tLmdldEFycmF5KCJEIiwiRGVjb2RlIiksdGhpcy5uZWVkc0RlY29kZT0hMSx0aGlzLmRlY29kZSYmKHRoaXMuY29sb3JTcGFjZSYmIXRoaXMuY29sb3JTcGFjZS5pc0RlZmF1bHREZWNvZGUodGhpcy5kZWNvZGUseCl8fGQmJiFzLkNvbG9yU3BhY2UuaXNEZWZhdWx0RGVjb2RlKHRoaXMuZGVjb2RlLDEpKSl7dmFyIFM7dGhpcy5uZWVkc0RlY29kZT0hMDtjb25zdCBlPSgxPDx4KS0xO3RoaXMuZGVjb2RlQ29lZmZpY2llbnRzPVtdLHRoaXMuZGVjb2RlQWRkZW5kcz1bXTtjb25zdCB0PSJJbmRleGVkIj09PShudWxsPT09KFM9dGhpcy5jb2xvclNwYWNlKXx8dm9pZCAwPT09Uz92b2lkIDA6Uy5uYW1lKTtmb3IobGV0IHI9MCxuPTA7cjx0aGlzLmRlY29kZS5sZW5ndGg7cis9MiwrK24pe2NvbnN0IGE9dGhpcy5kZWNvZGVbcl0saT10aGlzLmRlY29kZVtyKzFdO3RoaXMuZGVjb2RlQ29lZmZpY2llbnRzW25dPXQ/KGktYSkvZTppLWEsdGhpcy5kZWNvZGVBZGRlbmRzW25dPXQ/YTplKmF9fWM/dGhpcy5zbWFzaz1uZXcgZyh7eHJlZjp0LHJlczpyLGltYWdlOmMsaXNJbmxpbmU6byxwZGZGdW5jdGlvbkZhY3Rvcnk6Zixsb2NhbENvbG9yU3BhY2VDYWNoZTpwfSk6bCYmKGwgaW5zdGFuY2VvZiBpLkJhc2VTdHJlYW0/bC5kaWN0LmdldCgiSU0iLCJJbWFnZU1hc2siKT90aGlzLm1hc2s9bmV3IGcoe3hyZWY6dCxyZXM6cixpbWFnZTpsLGlzSW5saW5lOm8saXNNYXNrOiEwLHBkZkZ1bmN0aW9uRmFjdG9yeTpmLGxvY2FsQ29sb3JTcGFjZUNhY2hlOnB9KTooMCxuLndhcm4pKCJJZ25vcmluZyAvTWFzayBpbiBpbWFnZSB3aXRob3V0IC9JbWFnZU1hc2suIik6dGhpcy5tYXNrPWwpfXN0YXRpYyBhc3luYyBidWlsZEltYWdlKGUpe2xldHt4cmVmOnQscmVzOnIsaW1hZ2U6YSxpc0lubGluZTpzPSExLHBkZkZ1bmN0aW9uRmFjdG9yeTpvLGxvY2FsQ29sb3JTcGFjZUNhY2hlOmN9PWU7Y29uc3QgbD1hO2xldCBoPW51bGwsdT1udWxsO2NvbnN0IGQ9YS5kaWN0LmdldCgiU01hc2siKSxmPWEuZGljdC5nZXQoIk1hc2siKTtyZXR1cm4gZD9kIGluc3RhbmNlb2YgaS5CYXNlU3RyZWFtP2g9ZDooMCxuLndhcm4pKCJVbnN1cHBvcnRlZCAvU01hc2sgZm9ybWF0LiIpOmYmJihmIGluc3RhbmNlb2YgaS5CYXNlU3RyZWFtfHxBcnJheS5pc0FycmF5KGYpP3U9ZjooMCxuLndhcm4pKCJVbnN1cHBvcnRlZCAvTWFzayBmb3JtYXQuIikpLG5ldyBnKHt4cmVmOnQscmVzOnIsaW1hZ2U6bCxpc0lubGluZTpzLHNtYXNrOmgsbWFzazp1LHBkZkZ1bmN0aW9uRmFjdG9yeTpvLGxvY2FsQ29sb3JTcGFjZUNhY2hlOmN9KX1zdGF0aWMgY3JlYXRlUmF3TWFzayhlKXtsZXR7aW1nQXJyYXk6dCx3aWR0aDpyLGhlaWdodDpuLGltYWdlSXNGcm9tRGVjb2RlU3RyZWFtOmEsaW52ZXJzZURlY29kZTppLGludGVycG9sYXRlOnN9PWU7Y29uc3Qgbz0ocis3Pj4zKSpuLGM9dC5ieXRlTGVuZ3RoO2xldCBsLGg7aWYoIWF8fGkmJm8hPT1jP2k/KGw9bmV3IFVpbnQ4QXJyYXkobyksbC5zZXQodCksbC5maWxsKDI1NSxjKSk6bD1uZXcgVWludDhBcnJheSh0KTpsPXQsaSlmb3IoaD0wO2g8YztoKyspbFtoXV49MjU1O3JldHVybntkYXRhOmwsd2lkdGg6cixoZWlnaHQ6bixpbnRlcnBvbGF0ZTpzfX1zdGF0aWMgYXN5bmMgY3JlYXRlTWFzayhlKXtsZXR7aW1nQXJyYXk6dCx3aWR0aDpyLGhlaWdodDppLGltYWdlSXNGcm9tRGVjb2RlU3RyZWFtOnMsaW52ZXJzZURlY29kZTpvLGludGVycG9sYXRlOmwsaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ6aD0hMX09ZTtjb25zdCB1PTE9PT1yJiYxPT09aSYmbz09PSgwPT09dC5sZW5ndGh8fCEhKDEyOCZ0WzBdKSk7aWYodSlyZXR1cm57aXNTaW5nbGVPcGFxdWVQaXhlbDp1fTtpZihoKXtpZihjLkltYWdlUmVzaXplci5uZWVkc1RvQmVSZXNpemVkKHIsaSkpe2NvbnN0IGU9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHIqaSo0KTtyZXR1cm4oMCxhLmNvbnZlcnRCbGFja0FuZFdoaXRlVG9SR0JBKSh7c3JjOnQsZGVzdDplLHdpZHRoOnIsaGVpZ2h0Omksbm9uQmxhY2tDb2xvcjowLGludmVyc2VEZWNvZGU6b30pLGMuSW1hZ2VSZXNpemVyLmNyZWF0ZUltYWdlKHtraW5kOm4uSW1hZ2VLaW5kLlJHQkFfMzJCUFAsZGF0YTplLHdpZHRoOnIsaGVpZ2h0OmksaW50ZXJwb2xhdGU6bH0pfWNvbnN0IGU9bmV3IE9mZnNjcmVlbkNhbnZhcyhyLGkpLHM9ZS5nZXRDb250ZXh0KCIyZCIpLGg9cy5jcmVhdGVJbWFnZURhdGEocixpKTtyZXR1cm4oMCxhLmNvbnZlcnRCbGFja0FuZFdoaXRlVG9SR0JBKSh7c3JjOnQsZGVzdDpoLmRhdGEsd2lkdGg6cixoZWlnaHQ6aSxub25CbGFja0NvbG9yOjAsaW52ZXJzZURlY29kZTpvfSkscy5wdXRJbWFnZURhdGEoaCwwLDApLHtkYXRhOm51bGwsd2lkdGg6cixoZWlnaHQ6aSxpbnRlcnBvbGF0ZTpsLGJpdG1hcDplLnRyYW5zZmVyVG9JbWFnZUJpdG1hcCgpfX1yZXR1cm4gdGhpcy5jcmVhdGVSYXdNYXNrKHtpbWdBcnJheTp0LHdpZHRoOnIsaGVpZ2h0OmksaW52ZXJzZURlY29kZTpvLGltYWdlSXNGcm9tRGVjb2RlU3RyZWFtOnMsaW50ZXJwb2xhdGU6bH0pfWdldCBkcmF3V2lkdGgoKXt2YXIgZSx0O3JldHVybiBNYXRoLm1heCh0aGlzLndpZHRoLChudWxsPT09KGU9dGhpcy5zbWFzayl8fHZvaWQgMD09PWU/dm9pZCAwOmUud2lkdGgpfHwwLChudWxsPT09KHQ9dGhpcy5tYXNrKXx8dm9pZCAwPT09dD92b2lkIDA6dC53aWR0aCl8fDApfWdldCBkcmF3SGVpZ2h0KCl7dmFyIGUsdDtyZXR1cm4gTWF0aC5tYXgodGhpcy5oZWlnaHQsKG51bGw9PT0oZT10aGlzLnNtYXNrKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5oZWlnaHQpfHwwLChudWxsPT09KHQ9dGhpcy5tYXNrKXx8dm9pZCAwPT09dD92b2lkIDA6dC5oZWlnaHQpfHwwKX1kZWNvZGVCdWZmZXIoZSl7Y29uc3QgdD10aGlzLmJwYyxyPXRoaXMubnVtQ29tcHMsbj10aGlzLmRlY29kZUFkZGVuZHMsYT10aGlzLmRlY29kZUNvZWZmaWNpZW50cyxpPSgxPDx0KS0xO2xldCBzLG87aWYoMT09PXQpe2ZvcihzPTAsbz1lLmxlbmd0aDtzPG87cysrKWVbc109KyFlW3NdO3JldHVybn1sZXQgYz0wO2ZvcihzPTAsbz10aGlzLndpZHRoKnRoaXMuaGVpZ2h0O3M8bztzKyspZm9yKGxldCB0PTA7dDxyO3QrKyllW2NdPWQoZVtjXSxuW3RdLGFbdF0saSksYysrfWdldENvbXBvbmVudHMoZSl7Y29uc3QgdD10aGlzLmJwYztpZig4PT09dClyZXR1cm4gZTtjb25zdCByPXRoaXMud2lkdGgsbj10aGlzLmhlaWdodCxhPXRoaXMubnVtQ29tcHMsaT1yKm4qYTtsZXQgcyxvPTA7cz10PD04P25ldyBVaW50OEFycmF5KGkpOnQ8PTE2P25ldyBVaW50MTZBcnJheShpKTpuZXcgVWludDMyQXJyYXkoaSk7Y29uc3QgYz1yKmEsbD0oMTw8dCktMTtsZXQgaCx1LGQ9MDtpZigxPT09dCl7bGV0IHQscixhO2ZvcihsZXQgaT0wO2k8bjtpKyspe2ZvcihyPWQrKC04JmMpLGE9ZCtjO2Q8cjspdT1lW28rK10sc1tkXT11Pj43JjEsc1tkKzFdPXU+PjYmMSxzW2QrMl09dT4+NSYxLHNbZCszXT11Pj40JjEsc1tkKzRdPXU+PjMmMSxzW2QrNV09dT4+MiYxLHNbZCs2XT11Pj4xJjEsc1tkKzddPTEmdSxkKz04O2lmKGQ8YSlmb3IodT1lW28rK10sdD0xMjg7ZDxhOylzW2QrK109KyEhKHUmdCksdD4+PTF9fWVsc2V7bGV0IHI9MDtmb3IodT0wLGQ9MCxoPWk7ZDxoOysrZCl7Zm9yKGQlYz09MCYmKHU9MCxyPTApO3I8dDspdT11PDw4fGVbbysrXSxyKz04O2NvbnN0IG49ci10O2xldCBhPXU+Pm47YTwwP2E9MDphPmwmJihhPWwpLHNbZF09YSx1Jj0oMTw8biktMSxyPW59fXJldHVybiBzfWZpbGxPcGFjaXR5KGUsdCxyLGEsaSl7Y29uc3Qgcz10aGlzLnNtYXNrLG89dGhpcy5tYXNrO2xldCBjLGwsaCx1LGQscDtpZihzKWw9cy53aWR0aCxoPXMuaGVpZ2h0LGM9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGwqaCkscy5maWxsR3JheUJ1ZmZlcihjKSxsPT09dCYmaD09PXJ8fChjPWYoYyxzLmJwYyxsLGgsdCxyKSk7ZWxzZSBpZihvKWlmKG8gaW5zdGFuY2VvZiBnKXtmb3IobD1vLndpZHRoLGg9by5oZWlnaHQsYz1uZXcgVWludDhDbGFtcGVkQXJyYXkobCpoKSxvLm51bUNvbXBzPTEsby5maWxsR3JheUJ1ZmZlcihjKSx1PTAsZD1sKmg7dTxkOysrdSljW3VdPTI1NS1jW3VdO2w9PT10JiZoPT09cnx8KGM9ZihjLG8uYnBjLGwsaCx0LHIpKX1lbHNle2lmKCFBcnJheS5pc0FycmF5KG8pKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbmtub3duIG1hc2sgZm9ybWF0LiIpO3tjPW5ldyBVaW50OENsYW1wZWRBcnJheSh0KnIpO2NvbnN0IGU9dGhpcy5udW1Db21wcztmb3IodT0wLGQ9dCpyO3U8ZDsrK3Upe2xldCB0PTA7Y29uc3Qgcj11KmU7Zm9yKHA9MDtwPGU7KytwKXtjb25zdCBlPWlbcitwXSxuPTIqcDtpZihlPG9bbl18fGU+b1tuKzFdKXt0PTI1NTticmVha319Y1t1XT10fX19aWYoYylmb3IodT0wLHA9MyxkPXQqYTt1PGQ7Kyt1LHArPTQpZVtwXT1jW3VdO2Vsc2UgZm9yKHU9MCxwPTMsZD10KmE7dTxkOysrdSxwKz00KWVbcF09MjU1fXVuZG9QcmVibGVuZChlLHQscil7dmFyIG47Y29uc3QgYT1udWxsPT09KG49dGhpcy5zbWFzayl8fHZvaWQgMD09PW4/dm9pZCAwOm4ubWF0dGU7aWYoIWEpcmV0dXJuO2NvbnN0IGk9dGhpcy5jb2xvclNwYWNlLmdldFJnYihhLDApLHM9aVswXSxvPWlbMV0sYz1pWzJdLGw9dCpyKjQ7Zm9yKGxldCB0PTA7dDxsO3QrPTQpe2NvbnN0IHI9ZVt0KzNdO2lmKDA9PT1yKXtlW3RdPTI1NSxlW3QrMV09MjU1LGVbdCsyXT0yNTU7Y29udGludWV9Y29uc3Qgbj0yNTUvcjtlW3RdPShlW3RdLXMpKm4rcyxlW3QrMV09KGVbdCsxXS1vKSpuK28sZVt0KzJdPShlW3QrMl0tYykqbitjfX1hc3luYyBjcmVhdGVJbWFnZURhdGEoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtjb25zdCByPXRoaXMuZHJhd1dpZHRoLGE9dGhpcy5kcmF3SGVpZ2h0LGk9e3dpZHRoOnIsaGVpZ2h0OmEsaW50ZXJwb2xhdGU6dGhpcy5pbnRlcnBvbGF0ZSxraW5kOjAsZGF0YTpudWxsfSxzPXRoaXMubnVtQ29tcHMsbz10aGlzLndpZHRoLGg9dGhpcy5oZWlnaHQsdT10aGlzLmJwYyxkPW8qcyp1Kzc+PjMsZj10JiZjLkltYWdlUmVzaXplci5uZWVkc1RvQmVSZXNpemVkKHIsYSk7aWYoIWUpe2xldCBlO2lmKCJEZXZpY2VHcmF5Ij09PXRoaXMuY29sb3JTcGFjZS5uYW1lJiYxPT09dT9lPW4uSW1hZ2VLaW5kLkdSQVlTQ0FMRV8xQlBQOiJEZXZpY2VSR0IiIT09dGhpcy5jb2xvclNwYWNlLm5hbWV8fDghPT11fHx0aGlzLm5lZWRzRGVjb2RlfHwoZT1uLkltYWdlS2luZC5SR0JfMjRCUFApLGUmJiF0aGlzLnNtYXNrJiYhdGhpcy5tYXNrJiZyPT09byYmYT09PWgpe2NvbnN0IHM9dGhpcy5nZXRJbWFnZUJ5dGVzKGgqZCx7fSk7aWYodClyZXR1cm4gZj9jLkltYWdlUmVzaXplci5jcmVhdGVJbWFnZSh7ZGF0YTpzLGtpbmQ6ZSx3aWR0aDpyLGhlaWdodDphLGludGVycG9sYXRlOnRoaXMuaW50ZXJwb2xhdGV9LHRoaXMubmVlZHNEZWNvZGUpOnRoaXMuY3JlYXRlQml0bWFwKGUsbyxoLHMpO2lmKGkua2luZD1lLGkuZGF0YT1zLHRoaXMubmVlZHNEZWNvZGUpeygwLG4uYXNzZXJ0KShlPT09bi5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFAsIlBERkltYWdlLmNyZWF0ZUltYWdlRGF0YTogVGhlIGltYWdlIG11c3QgYmUgZ3JheXNjYWxlLiIpO2NvbnN0IHQ9aS5kYXRhO2ZvcihsZXQgZT0wLHI9dC5sZW5ndGg7ZTxyO2UrKyl0W2VdXj0yNTV9cmV0dXJuIGl9aWYodGhpcy5pbWFnZSBpbnN0YW5jZW9mIGwuSnBlZ1N0cmVhbSYmIXRoaXMuc21hc2smJiF0aGlzLm1hc2smJiF0aGlzLm5lZWRzRGVjb2RlKXtsZXQgZT1oKmQ7aWYodCYmIWYpe2xldCB0PSExO3N3aXRjaCh0aGlzLmNvbG9yU3BhY2UubmFtZSl7Y2FzZSJEZXZpY2VHcmF5IjplKj00LHQ9ITA7YnJlYWs7Y2FzZSJEZXZpY2VSR0IiOmU9ZS8zKjQsdD0hMDticmVhaztjYXNlIkRldmljZUNNWUsiOnQ9ITB9aWYodCl7Y29uc3QgdD10aGlzLmdldEltYWdlQnl0ZXMoZSx7ZHJhd1dpZHRoOnIsZHJhd0hlaWdodDphLGZvcmNlUkdCQTohMH0pO3JldHVybiB0aGlzLmNyZWF0ZUJpdG1hcChuLkltYWdlS2luZC5SR0JBXzMyQlBQLHIsYSx0KX19ZWxzZSBzd2l0Y2godGhpcy5jb2xvclNwYWNlLm5hbWUpe2Nhc2UiRGV2aWNlR3JheSI6ZSo9MztjYXNlIkRldmljZVJHQiI6Y2FzZSJEZXZpY2VDTVlLIjpyZXR1cm4gaS5raW5kPW4uSW1hZ2VLaW5kLlJHQl8yNEJQUCxpLmRhdGE9dGhpcy5nZXRJbWFnZUJ5dGVzKGUse2RyYXdXaWR0aDpyLGRyYXdIZWlnaHQ6YSxmb3JjZVJHQjohMH0pLGY/Yy5JbWFnZVJlc2l6ZXIuY3JlYXRlSW1hZ2UoaSk6aX19fWNvbnN0IGc9dGhpcy5nZXRJbWFnZUJ5dGVzKGgqZCx7aW50ZXJuYWw6ITB9KSxwPTB8Zy5sZW5ndGgvZCphL2gsbT10aGlzLmdldENvbXBvbmVudHMoZyk7bGV0IGIseSx3LHYseCxTO3JldHVybiB0JiYhZiYmKHc9bmV3IE9mZnNjcmVlbkNhbnZhcyhyLGEpLHY9dy5nZXRDb250ZXh0KCIyZCIpLHg9di5jcmVhdGVJbWFnZURhdGEocixhKSxTPXguZGF0YSksaS5raW5kPW4uSW1hZ2VLaW5kLlJHQkFfMzJCUFAsZXx8dGhpcy5zbWFza3x8dGhpcy5tYXNrPyh0JiYhZnx8KFM9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHIqYSo0KSksYj0xLHk9ITAsdGhpcy5maWxsT3BhY2l0eShTLHIsYSxwLG0pKTooIXR8fGY/KGkua2luZD1uLkltYWdlS2luZC5SR0JfMjRCUFAsUz1uZXcgVWludDhDbGFtcGVkQXJyYXkociphKjMpLGI9MCk6KG5ldyBVaW50MzJBcnJheShTLmJ1ZmZlcikuZmlsbChuLkZlYXR1cmVUZXN0LmlzTGl0dGxlRW5kaWFuPzQyNzgxOTAwODA6MjU1KSxiPTEpLHk9ITEpLHRoaXMubmVlZHNEZWNvZGUmJnRoaXMuZGVjb2RlQnVmZmVyKG0pLHRoaXMuY29sb3JTcGFjZS5maWxsUmdiKFMsbyxoLHIsYSxwLHUsbSxiKSx5JiZ0aGlzLnVuZG9QcmVibGVuZChTLHIscCksdCYmIWY/KHYucHV0SW1hZ2VEYXRhKHgsMCwwKSx7ZGF0YTpudWxsLHdpZHRoOnIsaGVpZ2h0OmEsYml0bWFwOncudHJhbnNmZXJUb0ltYWdlQml0bWFwKCksaW50ZXJwb2xhdGU6dGhpcy5pbnRlcnBvbGF0ZX0pOihpLmRhdGE9UyxmP2MuSW1hZ2VSZXNpemVyLmNyZWF0ZUltYWdlKGkpOmkpfWZpbGxHcmF5QnVmZmVyKGUpe2NvbnN0IHQ9dGhpcy5udW1Db21wcztpZigxIT09dCl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiUmVhZGluZyBncmF5IHNjYWxlIGZyb20gYSBjb2xvciBpbWFnZTogIi5jb25jYXQodCkpO2NvbnN0IHI9dGhpcy53aWR0aCxhPXRoaXMuaGVpZ2h0LGk9dGhpcy5icGMscz1yKnQqaSs3Pj4zLG89dGhpcy5nZXRJbWFnZUJ5dGVzKGEqcyx7aW50ZXJuYWw6ITB9KSxjPXRoaXMuZ2V0Q29tcG9uZW50cyhvKTtsZXQgbCxoO2lmKDE9PT1pKXtpZihoPXIqYSx0aGlzLm5lZWRzRGVjb2RlKWZvcihsPTA7bDxoOysrbCllW2xdPWNbbF0tMSYyNTU7ZWxzZSBmb3IobD0wO2w8aDsrK2wpZVtsXT0yNTUmLWNbbF07cmV0dXJufXRoaXMubmVlZHNEZWNvZGUmJnRoaXMuZGVjb2RlQnVmZmVyKGMpLGg9ciphO2NvbnN0IHU9MjU1LygoMTw8aSktMSk7Zm9yKGw9MDtsPGg7KytsKWVbbF09dSpjW2xdfWNyZWF0ZUJpdG1hcChlLHQscixpKXtjb25zdCBzPW5ldyBPZmZzY3JlZW5DYW52YXModCxyKSxvPXMuZ2V0Q29udGV4dCgiMmQiKTtsZXQgYztyZXR1cm4gZT09PW4uSW1hZ2VLaW5kLlJHQkFfMzJCUFA/Yz1uZXcgSW1hZ2VEYXRhKGksdCxyKTooYz1vLmNyZWF0ZUltYWdlRGF0YSh0LHIpLCgwLGEuY29udmVydFRvUkdCQSkoe2tpbmQ6ZSxzcmM6aSxkZXN0Om5ldyBVaW50MzJBcnJheShjLmRhdGEuYnVmZmVyKSx3aWR0aDp0LGhlaWdodDpyLGludmVyc2VEZWNvZGU6dGhpcy5uZWVkc0RlY29kZX0pKSxvLnB1dEltYWdlRGF0YShjLDAsMCkse2RhdGE6bnVsbCx3aWR0aDp0LGhlaWdodDpyLGJpdG1hcDpzLnRyYW5zZmVyVG9JbWFnZUJpdG1hcCgpLGludGVycG9sYXRlOnRoaXMuaW50ZXJwb2xhdGV9fWdldEltYWdlQnl0ZXMoZSx0KXtsZXR7ZHJhd1dpZHRoOnIsZHJhd0hlaWdodDphLGZvcmNlUkdCQTppPSExLGZvcmNlUkdCOnM9ITEsaW50ZXJuYWw6Yz0hMX09dDt0aGlzLmltYWdlLnJlc2V0KCksdGhpcy5pbWFnZS5kcmF3V2lkdGg9cnx8dGhpcy53aWR0aCx0aGlzLmltYWdlLmRyYXdIZWlnaHQ9YXx8dGhpcy5oZWlnaHQsdGhpcy5pbWFnZS5mb3JjZVJHQkE9ISFpLHRoaXMuaW1hZ2UuZm9yY2VSR0I9ISFzO2NvbnN0IGw9dGhpcy5pbWFnZS5nZXRCeXRlcyhlKTtyZXR1cm4gY3x8dGhpcy5pbWFnZSBpbnN0YW5jZW9mIG8uRGVjb2RlU3RyZWFtP2w6KCgwLG4uYXNzZXJ0KShsIGluc3RhbmNlb2YgVWludDhBcnJheSwnUERGSW1hZ2UuZ2V0SW1hZ2VCeXRlczogVW5zdXBwb3J0ZWQgImltYWdlQnl0ZXMiIHR5cGUuJyksbmV3IFVpbnQ4QXJyYXkobCkpfX10LlBERkltYWdlPWd9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5pbmNyZW1lbnRhbFVwZGF0ZT1hc3luYyBmdW5jdGlvbihlKXtsZXR7b3JpZ2luYWxEYXRhOnQseHJlZkluZm86cixuZXdSZWZzOm8seHJlZjp1PW51bGwsaGFzWGZhOmQ9ITEseGZhRGF0YXNldHNSZWY6cD1udWxsLGhhc1hmYURhdGFzZXRzRW50cnk6bT0hMSxuZWVkQXBwZWFyYW5jZXM6YixhY3JvRm9ybVJlZjp5PW51bGwsYWNyb0Zvcm06dz1udWxsLHhmYURhdGE6dj1udWxsfT1lO2F3YWl0IGFzeW5jIGZ1bmN0aW9uKGUpe2xldHt4cmVmOnQsYWNyb0Zvcm06cixhY3JvRm9ybVJlZjppLGhhc1hmYTpzLGhhc1hmYURhdGFzZXRzRW50cnk6byx4ZmFEYXRhc2V0c1JlZjpjLG5lZWRBcHBlYXJhbmNlczpoLG5ld1JlZnM6dX09ZTtpZighc3x8b3x8Y3x8KDAsbi53YXJuKSgiWEZBIC0gQ2Fubm90IHNhdmUgaXQiKSwhaCYmKCFzfHwhY3x8bykpcmV0dXJuO2NvbnN0IGQ9bmV3IGEuRGljdCh0KTtmb3IoY29uc3QgZSBvZiByLmdldEtleXMoKSlkLnNldChlLHIuZ2V0UmF3KGUpKTtpZihzJiYhbyl7Y29uc3QgZT1yLmdldCgiWEZBIikuc2xpY2UoKTtlLnNwbGljZSgyLDAsImRhdGFzZXRzIiksZS5zcGxpY2UoMywwLGMpLGQuc2V0KCJYRkEiLGUpfWgmJmQuc2V0KCJOZWVkQXBwZWFyYW5jZXMiLCEwKTtjb25zdCBmPXQuZW5jcnlwdDtsZXQgZz1udWxsO2YmJihnPWYuY3JlYXRlQ2lwaGVyVHJhbnNmb3JtKGkubnVtLGkuZ2VuKSk7Y29uc3QgcD1bXTthd2FpdCBsKGksZCxwLGcpLHUucHVzaCh7cmVmOmksZGF0YTpwLmpvaW4oIiIpfSl9KHt4cmVmOnUsYWNyb0Zvcm06dyxhY3JvRm9ybVJlZjp5LGhhc1hmYTpkLGhhc1hmYURhdGFzZXRzRW50cnk6bSx4ZmFEYXRhc2V0c1JlZjpwLG5lZWRBcHBlYXJhbmNlczpiLG5ld1JlZnM6b30pLGQmJmZ1bmN0aW9uKGUpe2xldHt4ZmFEYXRhOnQseGZhRGF0YXNldHNSZWY6cixuZXdSZWZzOmEseHJlZjpvfT1lO251bGw9PT10JiYodD1mdW5jdGlvbihlLHQpe2NvbnN0IHI9bmV3IHMuU2ltcGxlWE1MUGFyc2VyKHtoYXNBdHRyaWJ1dGVzOiEwfSkucGFyc2VGcm9tU3RyaW5nKGUpO2Zvcihjb25zdHt4ZmE6ZX1vZiB0KXtpZighZSljb250aW51ZTtjb25zdHtwYXRoOnQsdmFsdWU6YX09ZTtpZighdCljb250aW51ZTtjb25zdCBvPSgwLGkucGFyc2VYRkFQYXRoKSh0KTtsZXQgYz1yLmRvY3VtZW50RWxlbWVudC5zZWFyY2hOb2RlKG8sMCk7IWMmJm8ubGVuZ3RoPjEmJihjPXIuZG9jdW1lbnRFbGVtZW50LnNlYXJjaE5vZGUoW28uYXQoLTEpXSwwKSksYz9jLmNoaWxkTm9kZXM9QXJyYXkuaXNBcnJheShhKT9hLm1hcCgoZT0+bmV3IHMuU2ltcGxlRE9NTm9kZSgidmFsdWUiLGUpKSk6W25ldyBzLlNpbXBsZURPTU5vZGUoIiN0ZXh0IixhKV06KDAsbi53YXJuKSgiTm9kZSBub3QgZm91bmQgZm9yIHBhdGg6ICIuY29uY2F0KHQpKX1jb25zdCBhPVtdO3JldHVybiByLmRvY3VtZW50RWxlbWVudC5kdW1wKGEpLGEuam9pbigiIil9KG8uZmV0Y2hJZlJlZihyKS5nZXRTdHJpbmcoKSxhKSk7Y29uc3QgYz1vLmVuY3J5cHQ7YyYmKHQ9Yy5jcmVhdGVDaXBoZXJUcmFuc2Zvcm0oci5udW0sci5nZW4pLmVuY3J5cHRTdHJpbmcodCkpO2NvbnN0IGw9IiIuY29uY2F0KHIubnVtLCIgIikuY29uY2F0KHIuZ2VuLCIgb2JqXG48PCAvVHlwZSAvRW1iZWRkZWRGaWxlIC9MZW5ndGggIikuY29uY2F0KHQubGVuZ3RoLCI+Plxuc3RyZWFtXG4iKSt0KyJcbmVuZHN0cmVhbVxuZW5kb2JqXG4iO2EucHVzaCh7cmVmOnIsZGF0YTpsfSl9KHt4ZmFEYXRhOnYseGZhRGF0YXNldHNSZWY6cCxuZXdSZWZzOm8seHJlZjp1fSk7Y29uc3QgeD1uZXcgYS5EaWN0KG51bGwpLFM9ci5uZXdSZWY7bGV0IEEsaztjb25zdCBDPXQuYXQoLTEpOzEwPT09Q3x8MTM9PT1DPyhBPVtdLGs9dC5sZW5ndGgpOihBPVsiXG4iXSxrPXQubGVuZ3RoKzEpLHguc2V0KCJTaXplIixTLm51bSsxKSx4LnNldCgiUHJldiIsci5zdGFydFhSZWYpLHguc2V0KCJUeXBlIixhLk5hbWUuZ2V0KCJYUmVmIikpLG51bGwhPT1yLnJvb3RSZWYmJnguc2V0KCJSb290IixyLnJvb3RSZWYpLG51bGwhPT1yLmluZm9SZWYmJnguc2V0KCJJbmZvIixyLmluZm9SZWYpLG51bGwhPT1yLmVuY3J5cHRSZWYmJnguc2V0KCJFbmNyeXB0IixyLmVuY3J5cHRSZWYpLG8ucHVzaCh7cmVmOlMsZGF0YToiIn0pLG89by5zb3J0KCgoZSx0KT0+ZS5yZWYubnVtLXQucmVmLm51bSkpO2NvbnN0IE89W1swLDEsNjU1MzVdXSxGPVswLDFdO2xldCBJPTA7Zm9yKGNvbnN0e3JlZjplLGRhdGE6dH1vZiBvKUk9TWF0aC5tYXgoSSxrKSxPLnB1c2goWzEsayxNYXRoLm1pbihlLmdlbiw2NTUzNSldKSxrKz10Lmxlbmd0aCxGLnB1c2goZS5udW0sMSksQS5wdXNoKHQpO2lmKHguc2V0KCJJbmRleCIsRiksQXJyYXkuaXNBcnJheShyLmZpbGVJZHMpJiZyLmZpbGVJZHMubGVuZ3RoPjApe2NvbnN0IGU9ZnVuY3Rpb24oZSx0KXtjb25zdCByPU1hdGguZmxvb3IoRGF0ZS5ub3coKS8xZTMpLGE9dC5maWxlbmFtZXx8IiIsaT1bci50b1N0cmluZygpLGEsZS50b1N0cmluZygpXTtsZXQgcz1pLnJlZHVjZSgoKGUsdCk9PmUrdC5sZW5ndGgpLDApO2Zvcihjb25zdCBlIG9mIE9iamVjdC52YWx1ZXModC5pbmZvKSlpLnB1c2goZSkscys9ZS5sZW5ndGg7Y29uc3Qgbz1uZXcgVWludDhBcnJheShzKTtsZXQgbD0wO2Zvcihjb25zdCBlIG9mIGkpZyhlLGwsbyksbCs9ZS5sZW5ndGg7cmV0dXJuKDAsbi5ieXRlc1RvU3RyaW5nKSgoMCxjLmNhbGN1bGF0ZU1ENSkobykpfShrLHIpO3guc2V0KCJJRCIsW3IuZmlsZUlkc1swXSxlXSl9Y29uc3QgVD1bMSxNYXRoLmNlaWwoTWF0aC5sb2cyKEkpLzgpLDJdLE09KFRbMF0rVFsxXStUWzJdKSpPLmxlbmd0aDt4LnNldCgiVyIsVCkseC5zZXQoIkxlbmd0aCIsTSksQS5wdXNoKCIiLmNvbmNhdChTLm51bSwiICIpLmNvbmNhdChTLmdlbiwiIG9ialxuIikpLGF3YWl0IGgoeCxBLG51bGwpLEEucHVzaCgiIHN0cmVhbVxuIik7Y29uc3QgRT1BLnJlZHVjZSgoKGUsdCk9PmUrdC5sZW5ndGgpLDApLFA9IlxuZW5kc3RyZWFtXG5lbmRvYmpcbnN0YXJ0eHJlZlxuIi5jb25jYXQoaywiXG4lJUVPRlxuIiksUj1uZXcgVWludDhBcnJheSh0Lmxlbmd0aCtFK00rUC5sZW5ndGgpO1Iuc2V0KHQpO2xldCBOPXQubGVuZ3RoO2Zvcihjb25zdCBlIG9mIEEpZyhlLE4sUiksTis9ZS5sZW5ndGg7Zm9yKGNvbnN0W2UsdCxyXW9mIE8pTj1mKGUsVFswXSxOLFIpLE49Zih0LFRbMV0sTixSKSxOPWYocixUWzJdLE4sUik7cmV0dXJuIGcoUCxOLFIpLFJ9LHQud3JpdGVEaWN0PWgsdC53cml0ZU9iamVjdD1sLHIoMTM5KSxyKDg0KSxyKDkzKSxyKDk0KSxyKDk3KSxyKDk5KSxyKDEwMSkscigxMDUpLHIoMTA4KSxyKDExNSk7dmFyIG49cigxNDQpLGE9cigxNTApLGk9cigxNDkpLHM9cigyMTcpLG89cigxNTEpLGM9cigyMTgpO2FzeW5jIGZ1bmN0aW9uIGwoZSx0LHIsbil7ci5wdXNoKCIiLmNvbmNhdChlLm51bSwiICIpLmNvbmNhdChlLmdlbiwiIG9ialxuIikpLHQgaW5zdGFuY2VvZiBhLkRpY3Q/YXdhaXQgaCh0LHIsbik6dCBpbnN0YW5jZW9mIG8uQmFzZVN0cmVhbSYmYXdhaXQgdSh0LHIsbiksci5wdXNoKCJcbmVuZG9ialxuIil9YXN5bmMgZnVuY3Rpb24gaChlLHQscil7dC5wdXNoKCI8PCIpO2Zvcihjb25zdCBuIG9mIGUuZ2V0S2V5cygpKXQucHVzaCgiIC8iLmNvbmNhdCgoMCxpLmVzY2FwZVBERk5hbWUpKG4pLCIgIikpLGF3YWl0IGQoZS5nZXRSYXcobiksdCxyKTt0LnB1c2goIj4+Iil9YXN5bmMgZnVuY3Rpb24gdShlLHQscil7bGV0IGk9ZS5nZXRTdHJpbmcoKTtudWxsIT09ciYmKGk9ci5lbmNyeXB0U3RyaW5nKGkpKTtjb25zdHtkaWN0OnN9PWUsW28sY109YXdhaXQgUHJvbWlzZS5hbGwoW3MuZ2V0QXN5bmMoIkZpbHRlciIpLHMuZ2V0QXN5bmMoIkRlY29kZVBhcm1zIildKSxsPUFycmF5LmlzQXJyYXkobyk/YXdhaXQgcy54cmVmLmZldGNoSWZSZWZBc3luYyhvWzBdKTpvLHU9KDAsYS5pc05hbWUpKGwsIkZsYXRlRGVjb2RlIik7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBDb21wcmVzc2lvblN0cmVhbSYmKGkubGVuZ3RoPj0yNTZ8fHUpKXRyeXtjb25zdCBlPSgwLG4uc3RyaW5nVG9CeXRlcykoaSksdD1uZXcgQ29tcHJlc3Npb25TdHJlYW0oImRlZmxhdGUiKSxyPXQud3JpdGFibGUuZ2V0V3JpdGVyKCk7ci53cml0ZShlKSxyLmNsb3NlKCk7Y29uc3QgbD1hd2FpdCBuZXcgUmVzcG9uc2UodC5yZWFkYWJsZSkuYXJyYXlCdWZmZXIoKTtsZXQgaCxkO2k9KDAsbi5ieXRlc1RvU3RyaW5nKShuZXcgVWludDhBcnJheShsKSksbz91fHwoaD1BcnJheS5pc0FycmF5KG8pP1thLk5hbWUuZ2V0KCJGbGF0ZURlY29kZSIpLC4uLm9dOlthLk5hbWUuZ2V0KCJGbGF0ZURlY29kZSIpLG9dLGMmJihkPUFycmF5LmlzQXJyYXkoYyk/W251bGwsLi4uY106W251bGwsY10pKTpoPWEuTmFtZS5nZXQoIkZsYXRlRGVjb2RlIiksaCYmcy5zZXQoIkZpbHRlciIsaCksZCYmcy5zZXQoIkRlY29kZVBhcm1zIixkKX1jYXRjaChlKXsoMCxuLmluZm8pKCd3cml0ZVN0cmVhbSAtIGNhbm5vdCBjb21wcmVzcyBkYXRhOiAiJy5jb25jYXQoZSwnIi4nKSl9cy5zZXQoIkxlbmd0aCIsaS5sZW5ndGgpLGF3YWl0IGgocyx0LHIpLHQucHVzaCgiIHN0cmVhbVxuIixpLCJcbmVuZHN0cmVhbSIpfWFzeW5jIGZ1bmN0aW9uIGQoZSx0LHIpe2UgaW5zdGFuY2VvZiBhLk5hbWU/dC5wdXNoKCIvIi5jb25jYXQoKDAsaS5lc2NhcGVQREZOYW1lKShlLm5hbWUpKSk6ZSBpbnN0YW5jZW9mIGEuUmVmP3QucHVzaCgiIi5jb25jYXQoZS5udW0sIiAiKS5jb25jYXQoZS5nZW4sIiBSIikpOkFycmF5LmlzQXJyYXkoZSk/YXdhaXQgYXN5bmMgZnVuY3Rpb24oZSx0LHIpe3QucHVzaCgiWyIpO2xldCBuPSEwO2Zvcihjb25zdCBhIG9mIGUpbj9uPSExOnQucHVzaCgiICIpLGF3YWl0IGQoYSx0LHIpO3QucHVzaCgiXSIpfShlLHQscik6InN0cmluZyI9PXR5cGVvZiBlPyhudWxsIT09ciYmKGU9ci5lbmNyeXB0U3RyaW5nKGUpKSx0LnB1c2goIigiLmNvbmNhdCgoMCxpLmVzY2FwZVN0cmluZykoZSksIikiKSkpOiJudW1iZXIiPT10eXBlb2YgZT90LnB1c2goKDAsaS5udW1iZXJUb1N0cmluZykoZSkpOiJib29sZWFuIj09dHlwZW9mIGU/dC5wdXNoKGUudG9TdHJpbmcoKSk6ZSBpbnN0YW5jZW9mIGEuRGljdD9hd2FpdCBoKGUsdCxyKTplIGluc3RhbmNlb2Ygby5CYXNlU3RyZWFtP2F3YWl0IHUoZSx0LHIpOm51bGw9PT1lP3QucHVzaCgibnVsbCIpOigwLG4ud2FybikoIlVuaGFuZGxlZCB2YWx1ZSBpbiB3cml0ZXI6ICIuY29uY2F0KHR5cGVvZiBlLCIsIHBsZWFzZSBmaWxlIGEgYnVnLiIpKX1mdW5jdGlvbiBmKGUsdCxyLG4pe2ZvcihsZXQgYT10K3ItMTthPnItMTthLS0pblthXT0yNTUmZSxlPj49ODtyZXR1cm4gcit0fWZ1bmN0aW9uIGcoZSx0LHIpe2ZvcihsZXQgbj0wLGE9ZS5sZW5ndGg7bjxhO24rKylyW3Qrbl09MjU1JmUuY2hhckNvZGVBdChuKX19LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5YTUxQYXJzZXJFcnJvckNvZGU9dC5YTUxQYXJzZXJCYXNlPXQuU2ltcGxlWE1MUGFyc2VyPXQuU2ltcGxlRE9NTm9kZT12b2lkIDAscigxMzkpO3ZhciBuPXIoMTQ5KTtjb25zdCBhPXtOb0Vycm9yOjAsRW5kT2ZEb2N1bWVudDotMSxVbnRlcm1pbmF0ZWRDZGF0Oi0yLFVudGVybWluYXRlZFhtbERlY2xhcmF0aW9uOi0zLFVudGVybWluYXRlZERvY3R5cGVEZWNsYXJhdGlvbjotNCxVbnRlcm1pbmF0ZWRDb21tZW50Oi01LE1hbGZvcm1lZEVsZW1lbnQ6LTYsT3V0T2ZNZW1vcnk6LTcsVW50ZXJtaW5hdGVkQXR0cmlidXRlVmFsdWU6LTgsVW50ZXJtaW5hdGVkRWxlbWVudDotOSxFbGVtZW50TmV2ZXJCZWd1bjotMTB9O2Z1bmN0aW9uIGkoZSx0KXtjb25zdCByPWVbdF07cmV0dXJuIiAiPT09cnx8IlxuIj09PXJ8fCJcciI9PT1yfHwiXHQiPT09cn10LlhNTFBhcnNlckVycm9yQ29kZT1hO2NsYXNzIHN7X3Jlc29sdmVFbnRpdGllcyhlKXtyZXR1cm4gZS5yZXBsYWNlQWxsKC8mKFteO10rKTsvZywoKGUsdCk9PntpZigiI3giPT09dC5zdWJzdHJpbmcoMCwyKSlyZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9pbnQocGFyc2VJbnQodC5zdWJzdHJpbmcoMiksMTYpKTtpZigiIyI9PT10LnN1YnN0cmluZygwLDEpKXJldHVybiBTdHJpbmcuZnJvbUNvZGVQb2ludChwYXJzZUludCh0LnN1YnN0cmluZygxKSwxMCkpO3N3aXRjaCh0KXtjYXNlImx0IjpyZXR1cm4iPCI7Y2FzZSJndCI6cmV0dXJuIj4iO2Nhc2UiYW1wIjpyZXR1cm4iJiI7Y2FzZSJxdW90IjpyZXR1cm4nIic7Y2FzZSJhcG9zIjpyZXR1cm4iJyJ9cmV0dXJuIHRoaXMub25SZXNvbHZlRW50aXR5KHQpfSkpfV9wYXJzZUNvbnRlbnQoZSx0KXtjb25zdCByPVtdO2xldCBuPXQ7ZnVuY3Rpb24gYSgpe2Zvcig7bjxlLmxlbmd0aCYmaShlLG4pOykrK259Zm9yKDtuPGUubGVuZ3RoJiYhaShlLG4pJiYiPiIhPT1lW25dJiYiLyIhPT1lW25dOykrK247Y29uc3Qgcz1lLnN1YnN0cmluZyh0LG4pO2ZvcihhKCk7bjxlLmxlbmd0aCYmIj4iIT09ZVtuXSYmIi8iIT09ZVtuXSYmIj8iIT09ZVtuXTspe2EoKTtsZXQgdD0iIixzPSIiO2Zvcig7bjxlLmxlbmd0aCYmIWkoZSxuKSYmIj0iIT09ZVtuXTspdCs9ZVtuXSwrK247aWYoYSgpLCI9IiE9PWVbbl0pcmV0dXJuIG51bGw7KytuLGEoKTtjb25zdCBvPWVbbl07aWYoJyInIT09byYmIiciIT09bylyZXR1cm4gbnVsbDtjb25zdCBjPWUuaW5kZXhPZihvLCsrbik7aWYoYzwwKXJldHVybiBudWxsO3M9ZS5zdWJzdHJpbmcobixjKSxyLnB1c2goe25hbWU6dCx2YWx1ZTp0aGlzLl9yZXNvbHZlRW50aXRpZXMocyl9KSxuPWMrMSxhKCl9cmV0dXJue25hbWU6cyxhdHRyaWJ1dGVzOnIscGFyc2VkOm4tdH19X3BhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uKGUsdCl7bGV0IHI9dDtmb3IoO3I8ZS5sZW5ndGgmJiFpKGUscikmJiI+IiE9PWVbcl0mJiI/IiE9PWVbcl0mJiIvIiE9PWVbcl07KSsrcjtjb25zdCBuPWUuc3Vic3RyaW5nKHQscik7IWZ1bmN0aW9uKCl7Zm9yKDtyPGUubGVuZ3RoJiZpKGUscik7KSsrcn0oKTtjb25zdCBhPXI7Zm9yKDtyPGUubGVuZ3RoJiYoIj8iIT09ZVtyXXx8Ij4iIT09ZVtyKzFdKTspKytyO3JldHVybntuYW1lOm4sdmFsdWU6ZS5zdWJzdHJpbmcoYSxyKSxwYXJzZWQ6ci10fX1wYXJzZVhtbChlKXtsZXQgdD0wO2Zvcig7dDxlLmxlbmd0aDspe2xldCByPXQ7aWYoIjwiPT09ZVt0XSl7bGV0IHQ7c3dpdGNoKCsrcixlW3JdKXtjYXNlIi8iOmlmKCsrcix0PWUuaW5kZXhPZigiPiIsciksdDwwKXJldHVybiB2b2lkIHRoaXMub25FcnJvcihhLlVudGVybWluYXRlZEVsZW1lbnQpO3RoaXMub25FbmRFbGVtZW50KGUuc3Vic3RyaW5nKHIsdCkpLHI9dCsxO2JyZWFrO2Nhc2UiPyI6KytyO2NvbnN0IG49dGhpcy5fcGFyc2VQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oZSxyKTtpZigiPz4iIT09ZS5zdWJzdHJpbmcocituLnBhcnNlZCxyK24ucGFyc2VkKzIpKXJldHVybiB2b2lkIHRoaXMub25FcnJvcihhLlVudGVybWluYXRlZFhtbERlY2xhcmF0aW9uKTt0aGlzLm9uUGkobi5uYW1lLG4udmFsdWUpLHIrPW4ucGFyc2VkKzI7YnJlYWs7Y2FzZSIhIjppZigiLS0iPT09ZS5zdWJzdHJpbmcocisxLHIrMykpe2lmKHQ9ZS5pbmRleE9mKCItLVx4M2UiLHIrMyksdDwwKXJldHVybiB2b2lkIHRoaXMub25FcnJvcihhLlVudGVybWluYXRlZENvbW1lbnQpO3RoaXMub25Db21tZW50KGUuc3Vic3RyaW5nKHIrMyx0KSkscj10KzN9ZWxzZSBpZigiW0NEQVRBWyI9PT1lLnN1YnN0cmluZyhyKzEscis4KSl7aWYodD1lLmluZGV4T2YoIl1dPiIscis4KSx0PDApcmV0dXJuIHZvaWQgdGhpcy5vbkVycm9yKGEuVW50ZXJtaW5hdGVkQ2RhdCk7dGhpcy5vbkNkYXRhKGUuc3Vic3RyaW5nKHIrOCx0KSkscj10KzN9ZWxzZXtpZigiRE9DVFlQRSIhPT1lLnN1YnN0cmluZyhyKzEscis4KSlyZXR1cm4gdm9pZCB0aGlzLm9uRXJyb3IoYS5NYWxmb3JtZWRFbGVtZW50KTt7Y29uc3Qgbj1lLmluZGV4T2YoIlsiLHIrOCk7bGV0IGk9ITE7aWYodD1lLmluZGV4T2YoIj4iLHIrOCksdDwwKXJldHVybiB2b2lkIHRoaXMub25FcnJvcihhLlVudGVybWluYXRlZERvY3R5cGVEZWNsYXJhdGlvbik7aWYobj4wJiZ0Pm4pe2lmKHQ9ZS5pbmRleE9mKCJdPiIscis4KSx0PDApcmV0dXJuIHZvaWQgdGhpcy5vbkVycm9yKGEuVW50ZXJtaW5hdGVkRG9jdHlwZURlY2xhcmF0aW9uKTtpPSEwfWNvbnN0IHM9ZS5zdWJzdHJpbmcocis4LHQrKGk/MTowKSk7dGhpcy5vbkRvY3R5cGUocykscj10KyhpPzI6MSl9fWJyZWFrO2RlZmF1bHQ6Y29uc3QgaT10aGlzLl9wYXJzZUNvbnRlbnQoZSxyKTtpZihudWxsPT09aSlyZXR1cm4gdm9pZCB0aGlzLm9uRXJyb3IoYS5NYWxmb3JtZWRFbGVtZW50KTtsZXQgcz0hMTtpZigiLz4iPT09ZS5zdWJzdHJpbmcocitpLnBhcnNlZCxyK2kucGFyc2VkKzIpKXM9ITA7ZWxzZSBpZigiPiIhPT1lLnN1YnN0cmluZyhyK2kucGFyc2VkLHIraS5wYXJzZWQrMSkpcmV0dXJuIHZvaWQgdGhpcy5vbkVycm9yKGEuVW50ZXJtaW5hdGVkRWxlbWVudCk7dGhpcy5vbkJlZ2luRWxlbWVudChpLm5hbWUsaS5hdHRyaWJ1dGVzLHMpLHIrPWkucGFyc2VkKyhzPzI6MSl9fWVsc2V7Zm9yKDtyPGUubGVuZ3RoJiYiPCIhPT1lW3JdOylyKys7Y29uc3Qgbj1lLnN1YnN0cmluZyh0LHIpO3RoaXMub25UZXh0KHRoaXMuX3Jlc29sdmVFbnRpdGllcyhuKSl9dD1yfX1vblJlc29sdmVFbnRpdHkoZSl7cmV0dXJuIiYiLmNvbmNhdChlLCI7Iil9b25QaShlLHQpe31vbkNvbW1lbnQoZSl7fW9uQ2RhdGEoZSl7fW9uRG9jdHlwZShlKXt9b25UZXh0KGUpe31vbkJlZ2luRWxlbWVudChlLHQscil7fW9uRW5kRWxlbWVudChlKXt9b25FcnJvcihlKXt9fXQuWE1MUGFyc2VyQmFzZT1zO2NsYXNzIG97Y29uc3RydWN0b3IoZSx0KXt0aGlzLm5vZGVOYW1lPWUsdGhpcy5ub2RlVmFsdWU9dCxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywicGFyZW50Tm9kZSIse3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9KX1nZXQgZmlyc3RDaGlsZCgpe3ZhciBlO3JldHVybiBudWxsPT09KGU9dGhpcy5jaGlsZE5vZGVzKXx8dm9pZCAwPT09ZT92b2lkIDA6ZVswXX1nZXQgbmV4dFNpYmxpbmcoKXtjb25zdCBlPXRoaXMucGFyZW50Tm9kZS5jaGlsZE5vZGVzO2lmKCFlKXJldHVybjtjb25zdCB0PWUuaW5kZXhPZih0aGlzKTtyZXR1cm4tMSE9PXQ/ZVt0KzFdOnZvaWQgMH1nZXQgdGV4dENvbnRlbnQoKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzP3RoaXMuY2hpbGROb2Rlcy5tYXAoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRleHRDb250ZW50fSkpLmpvaW4oIiIpOnRoaXMubm9kZVZhbHVlfHwiIn1nZXQgY2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzfHxbXX1oYXNDaGlsZE5vZGVzKCl7dmFyIGU7cmV0dXJuKG51bGw9PT0oZT10aGlzLmNoaWxkTm9kZXMpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmxlbmd0aCk+MH1zZWFyY2hOb2RlKGUsdCl7aWYodD49ZS5sZW5ndGgpcmV0dXJuIHRoaXM7Y29uc3Qgcj1lW3RdLG49W107bGV0IGE9dGhpcztmb3IoOzspe3ZhciBpO2lmKHIubmFtZT09PWEubm9kZU5hbWUpe2lmKDAhPT1yLnBvcyl7aWYoMD09PW4ubGVuZ3RoKXJldHVybiBudWxsO3tjb25zdFtpXT1uLnBvcCgpO2xldCBzPTA7Zm9yKGNvbnN0IG4gb2YgaS5jaGlsZE5vZGVzKWlmKHIubmFtZT09PW4ubm9kZU5hbWUpe2lmKHM9PT1yLnBvcylyZXR1cm4gbi5zZWFyY2hOb2RlKGUsdCsxKTtzKyt9cmV0dXJuIGEuc2VhcmNoTm9kZShlLHQrMSl9fXtjb25zdCByPWEuc2VhcmNoTm9kZShlLHQrMSk7aWYobnVsbCE9PXIpcmV0dXJuIHJ9fWlmKChudWxsPT09KGk9YS5jaGlsZE5vZGVzKXx8dm9pZCAwPT09aT92b2lkIDA6aS5sZW5ndGgpPjApbi5wdXNoKFthLDBdKSxhPWEuY2hpbGROb2Rlc1swXTtlbHNle2lmKDA9PT1uLmxlbmd0aClyZXR1cm4gbnVsbDtmb3IoOzAhPT1uLmxlbmd0aDspe2NvbnN0W2UsdF09bi5wb3AoKSxyPXQrMTtpZihyPGUuY2hpbGROb2Rlcy5sZW5ndGgpe24ucHVzaChbZSxyXSksYT1lLmNoaWxkTm9kZXNbcl07YnJlYWt9fWlmKDA9PT1uLmxlbmd0aClyZXR1cm4gbnVsbH19fWR1bXAoZSl7aWYoIiN0ZXh0IiE9PXRoaXMubm9kZU5hbWUpe2lmKGUucHVzaCgiPCIuY29uY2F0KHRoaXMubm9kZU5hbWUpKSx0aGlzLmF0dHJpYnV0ZXMpZm9yKGNvbnN0IHQgb2YgdGhpcy5hdHRyaWJ1dGVzKWUucHVzaCgiICIuY29uY2F0KHQubmFtZSwnPSInKS5jb25jYXQoKDAsbi5lbmNvZGVUb1htbFN0cmluZykodC52YWx1ZSksJyInKSk7aWYodGhpcy5oYXNDaGlsZE5vZGVzKCkpe2UucHVzaCgiPiIpO2Zvcihjb25zdCB0IG9mIHRoaXMuY2hpbGROb2Rlcyl0LmR1bXAoZSk7ZS5wdXNoKCI8LyIuY29uY2F0KHRoaXMubm9kZU5hbWUsIj4iKSl9ZWxzZSB0aGlzLm5vZGVWYWx1ZT9lLnB1c2goIj4iLmNvbmNhdCgoMCxuLmVuY29kZVRvWG1sU3RyaW5nKSh0aGlzLm5vZGVWYWx1ZSksIjwvIikuY29uY2F0KHRoaXMubm9kZU5hbWUsIj4iKSk6ZS5wdXNoKCIvPiIpfWVsc2UgZS5wdXNoKCgwLG4uZW5jb2RlVG9YbWxTdHJpbmcpKHRoaXMubm9kZVZhbHVlKSl9fXQuU2ltcGxlRE9NTm9kZT1vLHQuU2ltcGxlWE1MUGFyc2VyPWNsYXNzIGV4dGVuZHMgc3tjb25zdHJ1Y3RvcihlKXtsZXR7aGFzQXR0cmlidXRlczp0PSExLGxvd2VyQ2FzZU5hbWU6cj0hMX09ZTtzdXBlcigpLHRoaXMuX2N1cnJlbnRGcmFnbWVudD1udWxsLHRoaXMuX3N0YWNrPW51bGwsdGhpcy5fZXJyb3JDb2RlPWEuTm9FcnJvcix0aGlzLl9oYXNBdHRyaWJ1dGVzPXQsdGhpcy5fbG93ZXJDYXNlTmFtZT1yfXBhcnNlRnJvbVN0cmluZyhlKXtpZih0aGlzLl9jdXJyZW50RnJhZ21lbnQ9W10sdGhpcy5fc3RhY2s9W10sdGhpcy5fZXJyb3JDb2RlPWEuTm9FcnJvcix0aGlzLnBhcnNlWG1sKGUpLHRoaXMuX2Vycm9yQ29kZSE9PWEuTm9FcnJvcilyZXR1cm47Y29uc3RbdF09dGhpcy5fY3VycmVudEZyYWdtZW50O3JldHVybiB0P3tkb2N1bWVudEVsZW1lbnQ6dH06dm9pZCAwfW9uVGV4dChlKXtpZihmdW5jdGlvbihlKXtmb3IobGV0IHQ9MCxyPWUubGVuZ3RoO3Q8cjt0KyspaWYoIWkoZSx0KSlyZXR1cm4hMTtyZXR1cm4hMH0oZSkpcmV0dXJuO2NvbnN0IHQ9bmV3IG8oIiN0ZXh0IixlKTt0aGlzLl9jdXJyZW50RnJhZ21lbnQucHVzaCh0KX1vbkNkYXRhKGUpe2NvbnN0IHQ9bmV3IG8oIiN0ZXh0IixlKTt0aGlzLl9jdXJyZW50RnJhZ21lbnQucHVzaCh0KX1vbkJlZ2luRWxlbWVudChlLHQscil7dGhpcy5fbG93ZXJDYXNlTmFtZSYmKGU9ZS50b0xvd2VyQ2FzZSgpKTtjb25zdCBuPW5ldyBvKGUpO24uY2hpbGROb2Rlcz1bXSx0aGlzLl9oYXNBdHRyaWJ1dGVzJiYobi5hdHRyaWJ1dGVzPXQpLHRoaXMuX2N1cnJlbnRGcmFnbWVudC5wdXNoKG4pLHJ8fCh0aGlzLl9zdGFjay5wdXNoKHRoaXMuX2N1cnJlbnRGcmFnbWVudCksdGhpcy5fY3VycmVudEZyYWdtZW50PW4uY2hpbGROb2Rlcyl9b25FbmRFbGVtZW50KGUpe3RoaXMuX2N1cnJlbnRGcmFnbWVudD10aGlzLl9zdGFjay5wb3AoKXx8W107Y29uc3QgdD10aGlzLl9jdXJyZW50RnJhZ21lbnQuYXQoLTEpO2lmKCF0KXJldHVybiBudWxsO2Zvcihjb25zdCBlIG9mIHQuY2hpbGROb2RlcyllLnBhcmVudE5vZGU9dDtyZXR1cm4gdH1vbkVycm9yKGUpe3RoaXMuX2Vycm9yQ29kZT1lfX19LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5jYWxjdWxhdGVTSEEyNTY9dC5jYWxjdWxhdGVNRDU9dC5QREYyMD10LlBERjE3PXQuQ2lwaGVyVHJhbnNmb3JtRmFjdG9yeT10LkFSQ0ZvdXJDaXBoZXI9dC5BRVMyNTZDaXBoZXI9dC5BRVMxMjhDaXBoZXI9dm9pZCAwLHQuY2FsY3VsYXRlU0hBMzg0PXUsdC5jYWxjdWxhdGVTSEE1MTI9dm9pZCAwLHIoODQpLHIoOTMpLHIoOTQpLHIoOTcpLHIoOTkpLHIoMTAxKSxyKDEwNSkscigxMDgpLHIoMTE1KSxyKDEzOSk7dmFyIG49cigxNDQpLGE9cigxNTApLGk9cigyMTkpO2NsYXNzIHN7Y29uc3RydWN0b3IoZSl7dGhpcy5hPTAsdGhpcy5iPTA7Y29uc3QgdD1uZXcgVWludDhBcnJheSgyNTYpLHI9ZS5sZW5ndGg7Zm9yKGxldCBlPTA7ZTwyNTY7KytlKXRbZV09ZTtmb3IobGV0IG49MCxhPTA7bjwyNTY7KytuKXtjb25zdCBpPXRbbl07YT1hK2krZVtuJXJdJjI1NSx0W25dPXRbYV0sdFthXT1pfXRoaXMucz10fWVuY3J5cHRCbG9jayhlKXtsZXQgdD10aGlzLmEscj10aGlzLmI7Y29uc3Qgbj10aGlzLnMsYT1lLmxlbmd0aCxpPW5ldyBVaW50OEFycmF5KGEpO2ZvcihsZXQgcz0wO3M8YTsrK3Mpe3Q9dCsxJjI1NTtjb25zdCBhPW5bdF07cj1yK2EmMjU1O2NvbnN0IG89bltyXTtuW3RdPW8sbltyXT1hLGlbc109ZVtzXV5uW2ErbyYyNTVdfXJldHVybiB0aGlzLmE9dCx0aGlzLmI9cixpfWRlY3J5cHRCbG9jayhlKXtyZXR1cm4gdGhpcy5lbmNyeXB0QmxvY2soZSl9ZW5jcnlwdChlKXtyZXR1cm4gdGhpcy5lbmNyeXB0QmxvY2soZSl9fXQuQVJDRm91ckNpcGhlcj1zO2NvbnN0IG89ZnVuY3Rpb24oKXtjb25zdCBlPW5ldyBVaW50OEFycmF5KFs3LDEyLDE3LDIyLDcsMTIsMTcsMjIsNywxMiwxNywyMiw3LDEyLDE3LDIyLDUsOSwxNCwyMCw1LDksMTQsMjAsNSw5LDE0LDIwLDUsOSwxNCwyMCw0LDExLDE2LDIzLDQsMTEsMTYsMjMsNCwxMSwxNiwyMyw0LDExLDE2LDIzLDYsMTAsMTUsMjEsNiwxMCwxNSwyMSw2LDEwLDE1LDIxLDYsMTAsMTUsMjFdKSx0PW5ldyBJbnQzMkFycmF5KFstNjgwODc2OTM2LC0zODk1NjQ1ODYsNjA2MTA1ODE5LC0xMDQ0NTI1MzMwLC0xNzY0MTg4OTcsMTIwMDA4MDQyNiwtMTQ3MzIzMTM0MSwtNDU3MDU5ODMsMTc3MDAzNTQxNiwtMTk1ODQxNDQxNywtNDIwNjMsLTE5OTA0MDQxNjIsMTgwNDYwMzY4MiwtNDAzNDExMDEsLTE1MDIwMDIyOTAsMTIzNjUzNTMyOSwtMTY1Nzk2NTEwLC0xMDY5NTAxNjMyLDY0MzcxNzcxMywtMzczODk3MzAyLC03MDE1NTg2OTEsMzgwMTYwODMsLTY2MDQ3ODMzNSwtNDA1NTM3ODQ4LDU2ODQ0NjQzOCwtMTAxOTgwMzY5MCwtMTg3MzYzOTYxLDExNjM1MzE1MDEsLTE0NDQ2ODE0NjcsLTUxNDAzNzg0LDE3MzUzMjg0NzMsLTE5MjY2MDc3MzQsLTM3ODU1OCwtMjAyMjU3NDQ2MywxODM5MDMwNTYyLC0zNTMwOTU1NiwtMTUzMDk5MjA2MCwxMjcyODkzMzUzLC0xNTU0OTc2MzIsLTEwOTQ3MzA2NDAsNjgxMjc5MTc0LC0zNTg1MzcyMjIsLTcyMjUyMTk3OSw3NjAyOTE4OSwtNjQwMzY0NDg3LC00MjE4MTU4MzUsNTMwNzQyNTIwLC05OTUzMzg2NTEsLTE5ODYzMDg0NCwxMTI2ODkxNDE1LC0xNDE2MzU0OTA1LC01NzQzNDA1NSwxNzAwNDg1NTcxLC0xODk0OTg2NjA2LC0xMDUxNTIzLC0yMDU0OTIyNzk5LDE4NzMzMTMzNTksLTMwNjExNzQ0LC0xNTYwMTk4MzgwLDEzMDkxNTE2NDksLTE0NTUyMzA3MCwtMTEyMDIxMDM3OSw3MTg3ODcyNTksLTM0MzQ4NTU1MV0pO3JldHVybiBmdW5jdGlvbihyLG4sYSl7bGV0IGk9MTczMjU4NDE5MyxzPS0yNzE3MzM4Nzksbz0tMTczMjU4NDE5NCxjPTI3MTczMzg3ODtjb25zdCBsPWErNzImLTY0LGg9bmV3IFVpbnQ4QXJyYXkobCk7bGV0IHUsZDtmb3IodT0wO3U8YTsrK3UpaFt1XT1yW24rK107aFt1KytdPTEyODtjb25zdCBmPWwtODtmb3IoO3U8ZjspaFt1KytdPTA7aFt1KytdPWE8PDMmMjU1LGhbdSsrXT1hPj41JjI1NSxoW3UrK109YT4+MTMmMjU1LGhbdSsrXT1hPj4yMSYyNTUsaFt1KytdPWE+Pj4yOSYyNTUsaFt1KytdPTAsaFt1KytdPTAsaFt1KytdPTA7Y29uc3QgZz1uZXcgSW50MzJBcnJheSgxNik7Zm9yKHU9MDt1PGw7KXtmb3IoZD0wO2Q8MTY7KytkLHUrPTQpZ1tkXT1oW3VdfGhbdSsxXTw8OHxoW3UrMl08PDE2fGhbdSszXTw8MjQ7bGV0IHIsbixhPWksbD1zLGY9byxwPWM7Zm9yKGQ9MDtkPDY0OysrZCl7ZDwxNj8ocj1sJmZ8fmwmcCxuPWQpOmQ8MzI/KHI9cCZsfH5wJmYsbj01KmQrMSYxNSk6ZDw0OD8ocj1sXmZecCxuPTMqZCs1JjE1KToocj1mXihsfH5wKSxuPTcqZCYxNSk7Y29uc3QgaT1wLHM9YStyK3RbZF0rZ1tuXXwwLG89ZVtkXTtwPWYsZj1sLGw9bCsoczw8b3xzPj4+MzItbyl8MCxhPWl9aT1pK2F8MCxzPXMrbHwwLG89bytmfDAsYz1jK3B8MH1yZXR1cm4gbmV3IFVpbnQ4QXJyYXkoWzI1NSZpLGk+PjgmMjU1LGk+PjE2JjI1NSxpPj4+MjQmMjU1LDI1NSZzLHM+PjgmMjU1LHM+PjE2JjI1NSxzPj4+MjQmMjU1LDI1NSZvLG8+PjgmMjU1LG8+PjE2JjI1NSxvPj4+MjQmMjU1LDI1NSZjLGM+PjgmMjU1LGM+PjE2JjI1NSxjPj4+MjQmMjU1XSl9fSgpO3QuY2FsY3VsYXRlTUQ1PW87Y2xhc3MgY3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMuaGlnaD0wfGUsdGhpcy5sb3c9MHx0fWFuZChlKXt0aGlzLmhpZ2gmPWUuaGlnaCx0aGlzLmxvdyY9ZS5sb3d9eG9yKGUpe3RoaXMuaGlnaF49ZS5oaWdoLHRoaXMubG93Xj1lLmxvd31vcihlKXt0aGlzLmhpZ2h8PWUuaGlnaCx0aGlzLmxvd3w9ZS5sb3d9c2hpZnRSaWdodChlKXtlPj0zMj8odGhpcy5sb3c9dGhpcy5oaWdoPj4+ZS0zMnwwLHRoaXMuaGlnaD0wKToodGhpcy5sb3c9dGhpcy5sb3c+Pj5lfHRoaXMuaGlnaDw8MzItZSx0aGlzLmhpZ2g9dGhpcy5oaWdoPj4+ZXwwKX1zaGlmdExlZnQoZSl7ZT49MzI/KHRoaXMuaGlnaD10aGlzLmxvdzw8ZS0zMix0aGlzLmxvdz0wKToodGhpcy5oaWdoPXRoaXMuaGlnaDw8ZXx0aGlzLmxvdz4+PjMyLWUsdGhpcy5sb3c8PD1lKX1yb3RhdGVSaWdodChlKXtsZXQgdCxyOzMyJmU/KHI9dGhpcy5sb3csdD10aGlzLmhpZ2gpOih0PXRoaXMubG93LHI9dGhpcy5oaWdoKSxlJj0zMSx0aGlzLmxvdz10Pj4+ZXxyPDwzMi1lLHRoaXMuaGlnaD1yPj4+ZXx0PDwzMi1lfW5vdCgpe3RoaXMuaGlnaD1+dGhpcy5oaWdoLHRoaXMubG93PX50aGlzLmxvd31hZGQoZSl7Y29uc3QgdD0odGhpcy5sb3c+Pj4wKSsoZS5sb3c+Pj4wKTtsZXQgcj0odGhpcy5oaWdoPj4+MCkrKGUuaGlnaD4+PjApO3Q+NDI5NDk2NzI5NSYmKHIrPTEpLHRoaXMubG93PTB8dCx0aGlzLmhpZ2g9MHxyfWNvcHlUbyhlLHQpe2VbdF09dGhpcy5oaWdoPj4+MjQmMjU1LGVbdCsxXT10aGlzLmhpZ2g+PjE2JjI1NSxlW3QrMl09dGhpcy5oaWdoPj44JjI1NSxlW3QrM109MjU1JnRoaXMuaGlnaCxlW3QrNF09dGhpcy5sb3c+Pj4yNCYyNTUsZVt0KzVdPXRoaXMubG93Pj4xNiYyNTUsZVt0KzZdPXRoaXMubG93Pj44JjI1NSxlW3QrN109MjU1JnRoaXMubG93fWFzc2lnbihlKXt0aGlzLmhpZ2g9ZS5oaWdoLHRoaXMubG93PWUubG93fX1jb25zdCBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3JldHVybiBlPj4+dHxlPDwzMi10fWZ1bmN0aW9uIHQoZSx0LHIpe3JldHVybiBlJnRefmUmcn1mdW5jdGlvbiByKGUsdCxyKXtyZXR1cm4gZSZ0XmUmcl50JnJ9ZnVuY3Rpb24gbih0KXtyZXR1cm4gZSh0LDIpXmUodCwxMyleZSh0LDIyKX1mdW5jdGlvbiBhKHQpe3JldHVybiBlKHQsNileZSh0LDExKV5lKHQsMjUpfWZ1bmN0aW9uIGkodCl7cmV0dXJuIGUodCw3KV5lKHQsMTgpXnQ+Pj4zfWNvbnN0IHM9WzExMTYzNTI0MDgsMTg5OTQ0NzQ0MSwzMDQ5MzIzNDcxLDM5MjEwMDk1NzMsOTYxOTg3MTYzLDE1MDg5NzA5OTMsMjQ1MzYzNTc0OCwyODcwNzYzMjIxLDM2MjQzODEwODAsMzEwNTk4NDAxLDYwNzIyNTI3OCwxNDI2ODgxOTg3LDE5MjUwNzgzODgsMjE2MjA3ODIwNiwyNjE0ODg4MTAzLDMyNDgyMjI1ODAsMzgzNTM5MDQwMSw0MDIyMjI0Nzc0LDI2NDM0NzA3OCw2MDQ4MDc2MjgsNzcwMjU1OTgzLDEyNDkxNTAxMjIsMTU1NTA4MTY5MiwxOTk2MDY0OTg2LDI1NTQyMjA4ODIsMjgyMTgzNDM0OSwyOTUyOTk2ODA4LDMyMTAzMTM2NzEsMzMzNjU3MTg5MSwzNTg0NTI4NzExLDExMzkyNjk5MywzMzgyNDE4OTUsNjY2MzA3MjA1LDc3MzUyOTkxMiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4MzcwMCwxOTg2NjYxMDUxLDIxNzcwMjYzNTAsMjQ1Njk1NjAzNywyNzMwNDg1OTIxLDI4MjAzMDI0MTEsMzI1OTczMDgwMCwzMzQ1NzY0NzcxLDM1MTYwNjU4MTcsMzYwMDM1MjgwNCw0MDk0NTcxOTA5LDI3NTQyMzM0NCw0MzAyMjc3MzQsNTA2OTQ4NjE2LDY1OTA2MDU1Niw4ODM5OTc4NzcsOTU4MTM5NTcxLDEzMjI4MjIyMTgsMTUzNzAwMjA2MywxNzQ3ODczNzc5LDE5NTU1NjIyMjIsMjAyNDEwNDgxNSwyMjI3NzMwNDUyLDIzNjE4NTI0MjQsMjQyODQzNjQ3NCwyNzU2NzM0MTg3LDMyMDQwMzE0NzksMzMyOTMyNTI5OF07cmV0dXJuIGZ1bmN0aW9uKG8sYyxsKXtsZXQgaD0xNzc5MDMzNzAzLHU9MzE0NDEzNDI3NyxkPTEwMTM5MDQyNDIsZj0yNzczNDgwNzYyLGc9MTM1OTg5MzExOSxwPTI2MDA4MjI5MjQsbT01Mjg3MzQ2MzUsYj0xNTQxNDU5MjI1O2NvbnN0IHk9NjQqTWF0aC5jZWlsKChsKzkpLzY0KSx3PW5ldyBVaW50OEFycmF5KHkpO2xldCB2LHg7Zm9yKHY9MDt2PGw7Kyt2KXdbdl09b1tjKytdO3dbdisrXT0xMjg7Y29uc3QgUz15LTg7Zm9yKDt2PFM7KXdbdisrXT0wO3dbdisrXT0wLHdbdisrXT0wLHdbdisrXT0wLHdbdisrXT1sPj4+MjkmMjU1LHdbdisrXT1sPj4yMSYyNTUsd1t2KytdPWw+PjEzJjI1NSx3W3YrK109bD4+NSYyNTUsd1t2KytdPWw8PDMmMjU1O2NvbnN0IEE9bmV3IFVpbnQzMkFycmF5KDY0KTtmb3Iodj0wO3Y8eTspe2Zvcih4PTA7eDwxNjsrK3gpQVt4XT13W3ZdPDwyNHx3W3YrMV08PDE2fHdbdisyXTw8OHx3W3YrM10sdis9NDtmb3IoeD0xNjt4PDY0OysreClBW3hdPShlKGs9QVt4LTJdLDE3KV5lKGssMTkpXms+Pj4xMCkrQVt4LTddK2koQVt4LTE1XSkrQVt4LTE2XXwwO2xldCBvLGMsbD1oLHk9dSxTPWQsQz1mLE89ZyxGPXAsST1tLFQ9Yjtmb3IoeD0wO3g8NjQ7Kyt4KW89VCthKE8pK3QoTyxGLEkpK3NbeF0rQVt4XSxjPW4obCkrcihsLHksUyksVD1JLEk9RixGPU8sTz1DK298MCxDPVMsUz15LHk9bCxsPW8rY3wwO2g9aCtsfDAsdT11K3l8MCxkPWQrU3wwLGY9ZitDfDAsZz1nK098MCxwPXArRnwwLG09bStJfDAsYj1iK1R8MH12YXIgaztyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoW2g+PjI0JjI1NSxoPj4xNiYyNTUsaD4+OCYyNTUsMjU1JmgsdT4+MjQmMjU1LHU+PjE2JjI1NSx1Pj44JjI1NSwyNTUmdSxkPj4yNCYyNTUsZD4+MTYmMjU1LGQ+PjgmMjU1LDI1NSZkLGY+PjI0JjI1NSxmPj4xNiYyNTUsZj4+OCYyNTUsMjU1JmYsZz4+MjQmMjU1LGc+PjE2JjI1NSxnPj44JjI1NSwyNTUmZyxwPj4yNCYyNTUscD4+MTYmMjU1LHA+PjgmMjU1LDI1NSZwLG0+PjI0JjI1NSxtPj4xNiYyNTUsbT4+OCYyNTUsMjU1Jm0sYj4+MjQmMjU1LGI+PjE2JjI1NSxiPj44JjI1NSwyNTUmYl0pfX0oKTt0LmNhbGN1bGF0ZVNIQTI1Nj1sO2NvbnN0IGg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyLG4sYSl7ZS5hc3NpZ24odCksZS5hbmQociksYS5hc3NpZ24odCksYS5ub3QoKSxhLmFuZChuKSxlLnhvcihhKX1mdW5jdGlvbiB0KGUsdCxyLG4sYSl7ZS5hc3NpZ24odCksZS5hbmQociksYS5hc3NpZ24odCksYS5hbmQobiksZS54b3IoYSksYS5hc3NpZ24ociksYS5hbmQobiksZS54b3IoYSl9ZnVuY3Rpb24gcihlLHQscil7ZS5hc3NpZ24odCksZS5yb3RhdGVSaWdodCgyOCksci5hc3NpZ24odCksci5yb3RhdGVSaWdodCgzNCksZS54b3Iociksci5hc3NpZ24odCksci5yb3RhdGVSaWdodCgzOSksZS54b3Iocil9ZnVuY3Rpb24gbihlLHQscil7ZS5hc3NpZ24odCksZS5yb3RhdGVSaWdodCgxNCksci5hc3NpZ24odCksci5yb3RhdGVSaWdodCgxOCksZS54b3Iociksci5hc3NpZ24odCksci5yb3RhdGVSaWdodCg0MSksZS54b3Iocil9ZnVuY3Rpb24gYShlLHQscil7ZS5hc3NpZ24odCksZS5yb3RhdGVSaWdodCgxKSxyLmFzc2lnbih0KSxyLnJvdGF0ZVJpZ2h0KDgpLGUueG9yKHIpLHIuYXNzaWduKHQpLHIuc2hpZnRSaWdodCg3KSxlLnhvcihyKX1mdW5jdGlvbiBpKGUsdCxyKXtlLmFzc2lnbih0KSxlLnJvdGF0ZVJpZ2h0KDE5KSxyLmFzc2lnbih0KSxyLnJvdGF0ZVJpZ2h0KDYxKSxlLnhvcihyKSxyLmFzc2lnbih0KSxyLnNoaWZ0UmlnaHQoNiksZS54b3Iocil9Y29uc3Qgcz1bbmV3IGMoMTExNjM1MjQwOCwzNjA5NzY3NDU4KSxuZXcgYygxODk5NDQ3NDQxLDYwMjg5MTcyNSksbmV3IGMoMzA0OTMyMzQ3MSwzOTY0NDg0Mzk5KSxuZXcgYygzOTIxMDA5NTczLDIxNzMyOTU1NDgpLG5ldyBjKDk2MTk4NzE2Myw0MDgxNjI4NDcyKSxuZXcgYygxNTA4OTcwOTkzLDMwNTM4MzQyNjUpLG5ldyBjKDI0NTM2MzU3NDgsMjkzNzY3MTU3OSksbmV3IGMoMjg3MDc2MzIyMSwzNjY0NjA5NTYwKSxuZXcgYygzNjI0MzgxMDgwLDI3MzQ4ODMzOTQpLG5ldyBjKDMxMDU5ODQwMSwxMTY0OTk2NTQyKSxuZXcgYyg2MDcyMjUyNzgsMTMyMzYxMDc2NCksbmV3IGMoMTQyNjg4MTk4NywzNTkwMzA0OTk0KSxuZXcgYygxOTI1MDc4Mzg4LDQwNjgxODIzODMpLG5ldyBjKDIxNjIwNzgyMDYsOTkxMzM2MTEzKSxuZXcgYygyNjE0ODg4MTAzLDYzMzgwMzMxNyksbmV3IGMoMzI0ODIyMjU4MCwzNDc5Nzc0ODY4KSxuZXcgYygzODM1MzkwNDAxLDI2NjY2MTM0NTgpLG5ldyBjKDQwMjIyMjQ3NzQsOTQ0NzExMTM5KSxuZXcgYygyNjQzNDcwNzgsMjM0MTI2Mjc3MyksbmV3IGMoNjA0ODA3NjI4LDIwMDc4MDA5MzMpLG5ldyBjKDc3MDI1NTk4MywxNDk1OTkwOTAxKSxuZXcgYygxMjQ5MTUwMTIyLDE4NTY0MzEyMzUpLG5ldyBjKDE1NTUwODE2OTIsMzE3NTIxODEzMiksbmV3IGMoMTk5NjA2NDk4NiwyMTk4OTUwODM3KSxuZXcgYygyNTU0MjIwODgyLDM5OTk3MTkzMzkpLG5ldyBjKDI4MjE4MzQzNDksNzY2Nzg0MDE2KSxuZXcgYygyOTUyOTk2ODA4LDI1NjY1OTQ4NzkpLG5ldyBjKDMyMTAzMTM2NzEsMzIwMzMzNzk1NiksbmV3IGMoMzMzNjU3MTg5MSwxMDM0NDU3MDI2KSxuZXcgYygzNTg0NTI4NzExLDI0NjY5NDg5MDEpLG5ldyBjKDExMzkyNjk5MywzNzU4MzI2MzgzKSxuZXcgYygzMzgyNDE4OTUsMTY4NzE3OTM2KSxuZXcgYyg2NjYzMDcyMDUsMTE4ODE3OTk2NCksbmV3IGMoNzczNTI5OTEyLDE1NDYwNDU3MzQpLG5ldyBjKDEyOTQ3NTczNzIsMTUyMjgwNTQ4NSksbmV3IGMoMTM5NjE4MjI5MSwyNjQzODMzODIzKSxuZXcgYygxNjk1MTgzNzAwLDIzNDM1MjczOTApLG5ldyBjKDE5ODY2NjEwNTEsMTAxNDQ3NzQ4MCksbmV3IGMoMjE3NzAyNjM1MCwxMjA2NzU5MTQyKSxuZXcgYygyNDU2OTU2MDM3LDM0NDA3NzYyNyksbmV3IGMoMjczMDQ4NTkyMSwxMjkwODYzNDYwKSxuZXcgYygyODIwMzAyNDExLDMxNTg0NTQyNzMpLG5ldyBjKDMyNTk3MzA4MDAsMzUwNTk1MjY1NyksbmV3IGMoMzM0NTc2NDc3MSwxMDYyMTcwMDgpLG5ldyBjKDM1MTYwNjU4MTcsMzYwNjAwODM0NCksbmV3IGMoMzYwMDM1MjgwNCwxNDMyNzI1Nzc2KSxuZXcgYyg0MDk0NTcxOTA5LDE0NjcwMzE1OTQpLG5ldyBjKDI3NTQyMzM0NCw4NTExNjk3MjApLG5ldyBjKDQzMDIyNzczNCwzMTAwODIzNzUyKSxuZXcgYyg1MDY5NDg2MTYsMTM2MzI1ODE5NSksbmV3IGMoNjU5MDYwNTU2LDM3NTA2ODU1OTMpLG5ldyBjKDg4Mzk5Nzg3NywzNzg1MDUwMjgwKSxuZXcgYyg5NTgxMzk1NzEsMzMxODMwNzQyNyksbmV3IGMoMTMyMjgyMjIxOCwzODEyNzIzNDAzKSxuZXcgYygxNTM3MDAyMDYzLDIwMDMwMzQ5OTUpLG5ldyBjKDE3NDc4NzM3NzksMzYwMjAzNjg5OSksbmV3IGMoMTk1NTU2MjIyMiwxNTc1OTkwMDEyKSxuZXcgYygyMDI0MTA0ODE1LDExMjU1OTI5MjgpLG5ldyBjKDIyMjc3MzA0NTIsMjcxNjkwNDMwNiksbmV3IGMoMjM2MTg1MjQyNCw0NDI3NzYwNDQpLG5ldyBjKDI0Mjg0MzY0NzQsNTkzNjk4MzQ0KSxuZXcgYygyNzU2NzM0MTg3LDM3MzMxMTAyNDkpLG5ldyBjKDMyMDQwMzE0NzksMjk5OTM1MTU3MyksbmV3IGMoMzMyOTMyNTI5OCwzODE1OTIwNDI3KSxuZXcgYygzMzkxNTY5NjE0LDM5MjgzODM5MDApLG5ldyBjKDM1MTUyNjcyNzEsNTY2MjgwNzExKSxuZXcgYygzOTQwMTg3NjA2LDM0NTQwNjk1MzQpLG5ldyBjKDQxMTg2MzAyNzEsNDAwMDIzOTk5MiksbmV3IGMoMTE2NDE4NDc0LDE5MTQxMzg1NTQpLG5ldyBjKDE3NDI5MjQyMSwyNzMxMDU1MjcwKSxuZXcgYygyODkzODAzNTYsMzIwMzk5MzAwNiksbmV3IGMoNDYwMzkzMjY5LDMyMDYyMDMxNSksbmV3IGMoNjg1NDcxNzMzLDU4NzQ5NjgzNiksbmV3IGMoODUyMTQyOTcxLDEwODY3OTI4NTEpLG5ldyBjKDEwMTcwMzYyOTgsMzY1NTQzMTAwKSxuZXcgYygxMTI2MDAwNTgwLDI2MTgyOTc2NzYpLG5ldyBjKDEyODgwMzM0NzAsMzQwOTg1NTE1OCksbmV3IGMoMTUwMTUwNTk0OCw0MjM0NTA5ODY2KSxuZXcgYygxNjA3MTY3OTE1LDk4NzE2NzQ2OCksbmV3IGMoMTgxNjQwMjMxNiwxMjQ2MTg5NTkxKV07cmV0dXJuIGZ1bmN0aW9uKG8sbCxoKXtsZXQgdSxkLGYsZyxwLG0sYix5LHc9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTt3Pyh1PW5ldyBjKDM0MTgwNzAzNjUsMzIzODM3MTAzMiksZD1uZXcgYygxNjU0MjcwMjUwLDkxNDE1MDY2MyksZj1uZXcgYygyNDM4NTI5MzcwLDgxMjcwMjk5OSksZz1uZXcgYygzNTU0NjIzNjAsNDE0NDkxMjY5NykscD1uZXcgYygxNzMxNDA1NDE1LDQyOTA3NzU4NTcpLG09bmV3IGMoMjM5NDE4MDIzMSwxNzUwNjAzMDI1KSxiPW5ldyBjKDM2NzUwMDg1MjUsMTY5NDA3NjgzOSkseT1uZXcgYygxMjAzMDYyODEzLDMyMDQwNzU0MjgpKToodT1uZXcgYygxNzc5MDMzNzAzLDQwODkyMzU3MjApLGQ9bmV3IGMoMzE0NDEzNDI3NywyMjI3ODczNTk1KSxmPW5ldyBjKDEwMTM5MDQyNDIsNDI3MTE3NTcyMyksZz1uZXcgYygyNzczNDgwNzYyLDE1OTU3NTAxMjkpLHA9bmV3IGMoMTM1OTg5MzExOSwyOTE3NTY1MTM3KSxtPW5ldyBjKDI2MDA4MjI5MjQsNzI1NTExMTk5KSxiPW5ldyBjKDUyODczNDYzNSw0MjE1Mzg5NTQ3KSx5PW5ldyBjKDE1NDE0NTkyMjUsMzI3MDMzMjA5KSk7Y29uc3Qgdj0xMjgqTWF0aC5jZWlsKChoKzE3KS8xMjgpLHg9bmV3IFVpbnQ4QXJyYXkodik7bGV0IFMsQTtmb3IoUz0wO1M8aDsrK1MpeFtTXT1vW2wrK107eFtTKytdPTEyODtjb25zdCBrPXYtMTY7Zm9yKDtTPGs7KXhbUysrXT0wO3hbUysrXT0wLHhbUysrXT0wLHhbUysrXT0wLHhbUysrXT0wLHhbUysrXT0wLHhbUysrXT0wLHhbUysrXT0wLHhbUysrXT0wLHhbUysrXT0wLHhbUysrXT0wLHhbUysrXT0wLHhbUysrXT1oPj4+MjkmMjU1LHhbUysrXT1oPj4yMSYyNTUseFtTKytdPWg+PjEzJjI1NSx4W1MrK109aD4+NSYyNTUseFtTKytdPWg8PDMmMjU1O2NvbnN0IEM9bmV3IEFycmF5KDgwKTtmb3IoUz0wO1M8ODA7UysrKUNbU109bmV3IGMoMCwwKTtsZXQgTz1uZXcgYygwLDApLEY9bmV3IGMoMCwwKSxJPW5ldyBjKDAsMCksVD1uZXcgYygwLDApLE09bmV3IGMoMCwwKSxFPW5ldyBjKDAsMCksUD1uZXcgYygwLDApLFI9bmV3IGMoMCwwKTtjb25zdCBOPW5ldyBjKDAsMCksRD1uZXcgYygwLDApLEI9bmV3IGMoMCwwKSxMPW5ldyBjKDAsMCk7bGV0IF8sajtmb3IoUz0wO1M8djspe2ZvcihBPTA7QTwxNjsrK0EpQ1tBXS5oaWdoPXhbU108PDI0fHhbUysxXTw8MTZ8eFtTKzJdPDw4fHhbUyszXSxDW0FdLmxvdz14W1MrNF08PDI0fHhbUys1XTw8MTZ8eFtTKzZdPDw4fHhbUys3XSxTKz04O2ZvcihBPTE2O0E8ODA7KytBKV89Q1tBXSxpKF8sQ1tBLTJdLEwpLF8uYWRkKENbQS03XSksYShCLENbQS0xNV0sTCksXy5hZGQoQiksXy5hZGQoQ1tBLTE2XSk7Zm9yKE8uYXNzaWduKHUpLEYuYXNzaWduKGQpLEkuYXNzaWduKGYpLFQuYXNzaWduKGcpLE0uYXNzaWduKHApLEUuYXNzaWduKG0pLFAuYXNzaWduKGIpLFIuYXNzaWduKHkpLEE9MDtBPDgwOysrQSlOLmFzc2lnbihSKSxuKEIsTSxMKSxOLmFkZChCKSxlKEIsTSxFLFAsTCksTi5hZGQoQiksTi5hZGQoc1tBXSksTi5hZGQoQ1tBXSkscihELE8sTCksdChCLE8sRixJLEwpLEQuYWRkKEIpLF89UixSPVAsUD1FLEU9TSxULmFkZChOKSxNPVQsVD1JLEk9RixGPU8sXy5hc3NpZ24oTiksXy5hZGQoRCksTz1fO3UuYWRkKE8pLGQuYWRkKEYpLGYuYWRkKEkpLGcuYWRkKFQpLHAuYWRkKE0pLG0uYWRkKEUpLGIuYWRkKFApLHkuYWRkKFIpfXJldHVybiB3PyhqPW5ldyBVaW50OEFycmF5KDQ4KSx1LmNvcHlUbyhqLDApLGQuY29weVRvKGosOCksZi5jb3B5VG8oaiwxNiksZy5jb3B5VG8oaiwyNCkscC5jb3B5VG8oaiwzMiksbS5jb3B5VG8oaiw0MCkpOihqPW5ldyBVaW50OEFycmF5KDY0KSx1LmNvcHlUbyhqLDApLGQuY29weVRvKGosOCksZi5jb3B5VG8oaiwxNiksZy5jb3B5VG8oaiwyNCkscC5jb3B5VG8oaiwzMiksbS5jb3B5VG8oaiw0MCksYi5jb3B5VG8oaiw0OCkseS5jb3B5VG8oaiw1NikpLGp9fSgpO2Z1bmN0aW9uIHUoZSx0LHIpe3JldHVybiBoKGUsdCxyLCEwKX10LmNhbGN1bGF0ZVNIQTUxMj1oO2NsYXNzIGR7ZGVjcnlwdEJsb2NrKGUpe3JldHVybiBlfWVuY3J5cHQoZSl7cmV0dXJuIGV9fWNsYXNzIGZ7Y29uc3RydWN0b3IoKXt0aGlzLmNvbnN0cnVjdG9yPT09ZiYmKDAsbi51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIEFFU0Jhc2VDaXBoZXIuIiksdGhpcy5fcz1uZXcgVWludDhBcnJheShbOTksMTI0LDExOSwxMjMsMjQyLDEwNywxMTEsMTk3LDQ4LDEsMTAzLDQzLDI1NCwyMTUsMTcxLDExOCwyMDIsMTMwLDIwMSwxMjUsMjUwLDg5LDcxLDI0MCwxNzMsMjEyLDE2MiwxNzUsMTU2LDE2NCwxMTQsMTkyLDE4MywyNTMsMTQ3LDM4LDU0LDYzLDI0NywyMDQsNTIsMTY1LDIyOSwyNDEsMTEzLDIxNiw0OSwyMSw0LDE5OSwzNSwxOTUsMjQsMTUwLDUsMTU0LDcsMTgsMTI4LDIyNiwyMzUsMzksMTc4LDExNyw5LDEzMSw0NCwyNiwyNywxMTAsOTAsMTYwLDgyLDU5LDIxNCwxNzksNDEsMjI3LDQ3LDEzMiw4MywyMDksMCwyMzcsMzIsMjUyLDE3Nyw5MSwxMDYsMjAzLDE5MCw1Nyw3NCw3Niw4OCwyMDcsMjA4LDIzOSwxNzAsMjUxLDY3LDc3LDUxLDEzMyw2OSwyNDksMiwxMjcsODAsNjAsMTU5LDE2OCw4MSwxNjMsNjQsMTQzLDE0NiwxNTcsNTYsMjQ1LDE4OCwxODIsMjE4LDMzLDE2LDI1NSwyNDMsMjEwLDIwNSwxMiwxOSwyMzYsOTUsMTUxLDY4LDIzLDE5NiwxNjcsMTI2LDYxLDEwMCw5MywyNSwxMTUsOTYsMTI5LDc5LDIyMCwzNCw0MiwxNDQsMTM2LDcwLDIzOCwxODQsMjAsMjIyLDk0LDExLDIxOSwyMjQsNTAsNTgsMTAsNzMsNiwzNiw5MiwxOTQsMjExLDE3Miw5OCwxNDUsMTQ5LDIyOCwxMjEsMjMxLDIwMCw1NSwxMDksMTQxLDIxMyw3OCwxNjksMTA4LDg2LDI0NCwyMzQsMTAxLDEyMiwxNzQsOCwxODYsMTIwLDM3LDQ2LDI4LDE2NiwxODAsMTk4LDIzMiwyMjEsMTE2LDMxLDc1LDE4OSwxMzksMTM4LDExMiw2MiwxODEsMTAyLDcyLDMsMjQ2LDE0LDk3LDUzLDg3LDE4NSwxMzQsMTkzLDI5LDE1OCwyMjUsMjQ4LDE1MiwxNywxMDUsMjE3LDE0MiwxNDgsMTU1LDMwLDEzNSwyMzMsMjA2LDg1LDQwLDIyMywxNDAsMTYxLDEzNywxMywxOTEsMjMwLDY2LDEwNCw2NSwxNTMsNDUsMTUsMTc2LDg0LDE4NywyMl0pLHRoaXMuX2ludl9zPW5ldyBVaW50OEFycmF5KFs4Miw5LDEwNiwyMTMsNDgsNTQsMTY1LDU2LDE5MSw2NCwxNjMsMTU4LDEyOSwyNDMsMjE1LDI1MSwxMjQsMjI3LDU3LDEzMCwxNTUsNDcsMjU1LDEzNSw1MiwxNDIsNjcsNjgsMTk2LDIyMiwyMzMsMjAzLDg0LDEyMywxNDgsNTAsMTY2LDE5NCwzNSw2MSwyMzgsNzYsMTQ5LDExLDY2LDI1MCwxOTUsNzgsOCw0NiwxNjEsMTAyLDQwLDIxNywzNiwxNzgsMTE4LDkxLDE2Miw3MywxMDksMTM5LDIwOSwzNywxMTQsMjQ4LDI0NiwxMDAsMTM0LDEwNCwxNTIsMjIsMjEyLDE2NCw5MiwyMDQsOTMsMTAxLDE4MiwxNDYsMTA4LDExMiw3Miw4MCwyNTMsMjM3LDE4NSwyMTgsOTQsMjEsNzAsODcsMTY3LDE0MSwxNTcsMTMyLDE0NCwyMTYsMTcxLDAsMTQwLDE4OCwyMTEsMTAsMjQ3LDIyOCw4OCw1LDE4NCwxNzksNjksNiwyMDgsNDQsMzAsMTQzLDIwMiw2MywxNSwyLDE5MywxNzUsMTg5LDMsMSwxOSwxMzgsMTA3LDU4LDE0NSwxNyw2NSw3OSwxMDMsMjIwLDIzNCwxNTEsMjQyLDIwNywyMDYsMjQwLDE4MCwyMzAsMTE1LDE1MCwxNzIsMTE2LDM0LDIzMSwxNzMsNTMsMTMzLDIyNiwyNDksNTUsMjMyLDI4LDExNywyMjMsMTEwLDcxLDI0MSwyNiwxMTMsMjksNDEsMTk3LDEzNywxMTEsMTgzLDk4LDE0LDE3MCwyNCwxOTAsMjcsMjUyLDg2LDYyLDc1LDE5OCwyMTAsMTIxLDMyLDE1NCwyMTksMTkyLDI1NCwxMjAsMjA1LDkwLDI0NCwzMSwyMjEsMTY4LDUxLDEzNiw3LDE5OSw0OSwxNzcsMTgsMTYsODksMzksMTI4LDIzNiw5NSw5Niw4MSwxMjcsMTY5LDI1LDE4MSw3NCwxMyw0NSwyMjksMTIyLDE1OSwxNDcsMjAxLDE1NiwyMzksMTYwLDIyNCw1OSw3NywxNzQsNDIsMjQ1LDE3NiwyMDAsMjM1LDE4Nyw2MCwxMzEsODMsMTUzLDk3LDIzLDQzLDQsMTI2LDE4NiwxMTksMjE0LDM4LDIyNSwxMDUsMjAsOTksODUsMzMsMTIsMTI1XSksdGhpcy5fbWl4PW5ldyBVaW50MzJBcnJheShbMCwyMzU0NzQxODcsNDcwOTQ4Mzc0LDMwMzc2NTI3Nyw5NDE4OTY3NDgsOTA4OTMzNDE1LDYwNzUzMDU1NCw3MDg3ODA4NDksMTg4Mzc5MzQ5NiwyMTE4MjE0OTk1LDE4MTc4NjY4MzAsMTY0OTYzOTIzNywxMjE1MDYxMTA4LDExODEwNDUxMTksMTQxNzU2MTY5OCwxNTE3NzY3NTI5LDM3Njc1ODY5OTIsNDAwMzA2MTE3OSw0MjM2NDI5OTkwLDQwNjkyNDY4OTMsMzYzNTczMzY2MCwzNjAyNzcwMzI3LDMyOTkyNzg0NzQsMzQwMDUyODc2OSwyNDMwMTIyMjE2LDI2NjQ1NDM3MTUsMjM2MjA5MDIzOCwyMTkzODYyNjQ1LDI4MzUxMjMzOTYsMjgwMTEwNzQwNywzMDM1NTM1MDU4LDMxMzU3NDA4ODksMzY3ODEyNDkyMywzNTc2ODcwNTEyLDMzNDEzOTQyODUsMzM3NDM2MTcwMiwzODEwNDk2MzQzLDM5Nzc2NzUzNTYsNDI3OTA4MDI1Nyw0MDQzNjEwMTg2LDI4NzY0OTQ2MjcsMjc3NjI5MjkwNCwzMDc2NjM5MDI5LDMxMTA2NTA5NDIsMjQ3MjAxMTUzNSwyNjQwMjQzMjA0LDI0MDM3Mjg2NjUsMjE2OTMwMzA1OCwxMDAxMDg5OTk1LDg5OTgzNTU4NCw2NjY0NjQ3MzMsNjk5NDMyMTUwLDU5NzI3ODQ3LDIyNjkwNjg2MCw1MzA0MDA3NTMsMjk0OTMwNjgyLDEyNzMxNjg3ODcsMTE3Mjk2NzA2NCwxNDc1NDE4NTAxLDE1MDk0MzA0MTQsMTk0MjQzNTc3NSwyMTEwNjY3NDQ0LDE4NzYyNDE4MzMsMTY0MTgxNjIyNiwyOTEwMjE5NzY2LDI3NDMwMzQxMDksMjk3NjE1MTUyMCwzMjExNjIzMTQ3LDI1MDUyMDIxMzgsMjYwNjQ1Mzk2OSwyMzAyNjkwMjUyLDIyNjk3Mjg0NTUsMzcxMTgyOTQyMiwzNTQzNTk5MjY5LDMyNDA4OTQzOTIsMzQ3NTMxMzMzMSwzODQzNjk5MDc0LDM5NDM5MDY0NDEsNDE3ODA2MjIyOCw0MTQ0MDQ3Nzc1LDEzMDY5NjczNjYsMTEzOTc4MTcwOSwxMzc0OTg4MTEyLDE2MTA0NTk3MzksMTk3NTY4MzQzNCwyMDc2OTM1MjY1LDE3NzUyNzY5MjQsMTc0MjMxNTEyNywxMDM0ODY3OTk4LDg2NjYzNzg0NSw1NjYwMjE4OTYsODAwNDQwODM1LDkyOTg3Njk4LDE5MzE5NTA2NSw0Mjk0NTYxNjQsMzk1NDQxNzExLDE5ODQ4MTI2ODUsMjAxNzc3ODU2NiwxNzg0NjYzMTk1LDE2ODM0MDcyNDgsMTMxNTU2MjE0NSwxMDgwMDk0NjM0LDEzODM4NTYzMTEsMTU1MTAzNzg4NCwxMDEwMzk4MjksMTM1MDUwMjA2LDQzNzc1NzEyMywzMzc1NTM4NjQsMTA0MjM4NTY1Nyw4MDc5NjI2MTAsNTczODA0NzgzLDc0MjAzOTAxMiwyNTMxMDY3NDUzLDI1NjQwMzMzMzQsMjMyODgyODk3MSwyMjI3NTczMDI0LDI5MzU1NjY4NjUsMjcwMDA5OTM1NCwzMDAxNzU1NjU1LDMxNjg5MzcyMjgsMzg2ODU1MjgwNSwzOTAyNTYzMTgyLDQyMDMxODExNzEsNDEwMjk3NzkxMiwzNzM2MTY0OTM3LDM1MDE3NDE4OTAsMzI2NTQ3ODc1MSwzNDMzNzEyOTgwLDExMDYwNDE1OTEsMTM0MDQ2MzEwMCwxNTc2OTc2NjA5LDE0MDg3NDkwMzQsMjA0MzIxMTQ4MywyMDA5MTk1NDcyLDE3MDg4NDgzMzMsMTgwOTA1NDE1MCw4MzI4NzcyMzEsMTA2ODM1MTM5Niw3NjY5NDU0NjUsNTk5NzYyMzU0LDE1OTQxNzk4NywxMjY0NTQ2NjQsMzYxOTI5ODc3LDQ2MzE4MDE5MCwyNzA5MjYwODcxLDI5NDM2ODIzODAsMzE3ODEwNjk2MSwzMDA5ODc5Mzg2LDI1NzI2OTcxOTUsMjUzODY4MTE4NCwyMjM2MjI4NzMzLDIzMzY0MzQ1NTAsMzUwOTg3MTEzNSwzNzQ1MzQ1MzAwLDM0NDE4NTAzNzcsMzI3NDY2NzI2NiwzOTEwMTYxOTcxLDM4NzcxOTg2NDgsNDExMDU2ODQ4NSw0MjExODE4Nzk4LDI1OTc4MDY0NzYsMjQ5NzYwNDc0MywyMjYxMDg5MTc4LDIyOTUxMDEwNzMsMjczMzg1NjE2MCwyOTAyMDg3ODUxLDMyMDI0MzcwNDYsMjk2ODAxMTQ1MywzOTM2MjkxMjg0LDM4MzUwMzY4OTUsNDEzNjQ0MDc3MCw0MTY5NDA4MjAxLDM1MzU0ODY0NTYsMzcwMjY2NTQ1OSwzNDY3MTkyMzAyLDMyMzE3MjIyMTMsMjA1MTUxODc4MCwxOTUxMzE3MDQ3LDE3MTY4OTA0MTAsMTc1MDkwMjMwNSwxMTEzODE4Mzg0LDEyODIwNTAwNzUsMTU4NDUwNDU4MiwxMzUwMDc4OTg5LDE2ODgxMDg1Miw2NzU1NjQ2MywzNzEwNDkzMzAsNDA0MDE2NzYxLDg0MTczOTU5MiwxMDA4OTE4NTk1LDc3NTU1MDgxNCw1NDAwODA3MjUsMzk2OTU2MjM2OSwzODAxMzMyMjM0LDQwMzU0ODkwNDcsNDI2OTkwNzk5NiwzNTY5MjU1MjEzLDM2Njk0NjI1NjYsMzM2Njc1NDYxOSwzMzMyNzQwMTQ0LDI2MzEwNjU0MzMsMjQ2Mzg3OTc2MiwyMTYwMTE3MDcxLDIzOTU1ODg2NzYsMjc2NzY0NTU1NywyODY4ODk3NDA2LDMxMDIwMTE3NDcsMzA2OTA0OTk2MCwyMDIwMDg0OTcsMzM3NzgzNjIsMjcwMDQwNDg3LDUwNDQ1OTQzNiw4NzU0NTEyOTMsOTc1NjU4NjQ2LDY3NTAzOTYyNyw2NDEwMjUxNTIsMjA4NDcwNDIzMywxOTE3NTE4NTYyLDE2MTU4NjEyNDcsMTg1MTMzMjg1MiwxMTQ3NTUwNjYxLDEyNDg4MDI1MTAsMTQ4NDAwNTg0MywxNDUxMDQ0MDU2LDkzMzMwMTM3MCw5NjczMTE3MjksNzMzMTU2OTcyLDYzMjk1MzcwMywyNjAzODg5NTAsMjU5NjU5MTcsMzI4NjcxODA4LDQ5NjkwNjA1OSwxMjA2NDc3ODU4LDEyMzk0NDM3NTMsMTU0MzIwODUwMCwxNDQxOTUyNTc1LDIxNDQxNjE4MDYsMTkwODY5NDI3NywxNjc1NTc3ODgwLDE4NDI3NTk0NDMsMzYxMDM2OTIyNiwzNjQ0Mzc5NTg1LDM0MDgxMTk1MTYsMzMwNzkxNjI0Nyw0MDExMTkwNTAyLDM3NzY3Njc0NjksNDA3NzM4NDQzMiw0MjQ1NjE4NjgzLDI4MDk3NzExNTQsMjg0MjczNzA0OSwzMTQ0Mzk2NDIwLDMwNDMxNDA0OTUsMjY3MzcwNTE1MCwyNDM4MjM3NjIxLDIyMDMwMzIyMzIsMjM3MDIxMzc5NV0pLHRoaXMuX21peENvbD1uZXcgVWludDhBcnJheSgyNTYpO2ZvcihsZXQgZT0wO2U8MjU2O2UrKyl0aGlzLl9taXhDb2xbZV09ZTwxMjg/ZTw8MTplPDwxXjI3O3RoaXMuYnVmZmVyPW5ldyBVaW50OEFycmF5KDE2KSx0aGlzLmJ1ZmZlclBvc2l0aW9uPTB9X2V4cGFuZEtleShlKXsoMCxuLnVucmVhY2hhYmxlKSgiQ2Fubm90IGNhbGwgYF9leHBhbmRLZXlgIG9uIHRoZSBiYXNlIGNsYXNzIil9X2RlY3J5cHQoZSx0KXtsZXQgcixuLGE7Y29uc3QgaT1uZXcgVWludDhBcnJheSgxNik7aS5zZXQoZSk7Zm9yKGxldCBlPTAscj10aGlzLl9rZXlTaXplO2U8MTY7KytlLCsrcilpW2VdXj10W3JdO2ZvcihsZXQgZT10aGlzLl9jeWNsZXNPZlJlcGV0aXRpb24tMTtlPj0xOy0tZSl7cj1pWzEzXSxpWzEzXT1pWzldLGlbOV09aVs1XSxpWzVdPWlbMV0saVsxXT1yLHI9aVsxNF0sbj1pWzEwXSxpWzE0XT1pWzZdLGlbMTBdPWlbMl0saVs2XT1yLGlbMl09bixyPWlbMTVdLG49aVsxMV0sYT1pWzddLGlbMTVdPWlbM10saVsxMV09cixpWzddPW4saVszXT1hO2ZvcihsZXQgZT0wO2U8MTY7KytlKWlbZV09dGhpcy5faW52X3NbaVtlXV07Zm9yKGxldCByPTAsbj0xNiplO3I8MTY7KytyLCsrbilpW3JdXj10W25dO2ZvcihsZXQgZT0wO2U8MTY7ZSs9NCl7Y29uc3QgdD10aGlzLl9taXhbaVtlXV0sbj10aGlzLl9taXhbaVtlKzFdXSxhPXRoaXMuX21peFtpW2UrMl1dLHM9dGhpcy5fbWl4W2lbZSszXV07cj10Xm4+Pj44Xm48PDI0XmE+Pj4xNl5hPDwxNl5zPj4+MjReczw8OCxpW2VdPXI+Pj4yNCYyNTUsaVtlKzFdPXI+PjE2JjI1NSxpW2UrMl09cj4+OCYyNTUsaVtlKzNdPTI1NSZyfX1yPWlbMTNdLGlbMTNdPWlbOV0saVs5XT1pWzVdLGlbNV09aVsxXSxpWzFdPXIscj1pWzE0XSxuPWlbMTBdLGlbMTRdPWlbNl0saVsxMF09aVsyXSxpWzZdPXIsaVsyXT1uLHI9aVsxNV0sbj1pWzExXSxhPWlbN10saVsxNV09aVszXSxpWzExXT1yLGlbN109bixpWzNdPWE7Zm9yKGxldCBlPTA7ZTwxNjsrK2UpaVtlXT10aGlzLl9pbnZfc1tpW2VdXSxpW2VdXj10W2VdO3JldHVybiBpfV9lbmNyeXB0KGUsdCl7Y29uc3Qgcj10aGlzLl9zO2xldCBuLGEsaTtjb25zdCBzPW5ldyBVaW50OEFycmF5KDE2KTtzLnNldChlKTtmb3IobGV0IGU9MDtlPDE2OysrZSlzW2VdXj10W2VdO2ZvcihsZXQgZT0xO2U8dGhpcy5fY3ljbGVzT2ZSZXBldGl0aW9uO2UrKyl7Zm9yKGxldCBlPTA7ZTwxNjsrK2Upc1tlXT1yW3NbZV1dO2k9c1sxXSxzWzFdPXNbNV0sc1s1XT1zWzldLHNbOV09c1sxM10sc1sxM109aSxpPXNbMl0sYT1zWzZdLHNbMl09c1sxMF0sc1s2XT1zWzE0XSxzWzEwXT1pLHNbMTRdPWEsaT1zWzNdLGE9c1s3XSxuPXNbMTFdLHNbM109c1sxNV0sc1s3XT1pLHNbMTFdPWEsc1sxNV09bjtmb3IobGV0IGU9MDtlPDE2O2UrPTQpe2NvbnN0IHQ9c1tlKzBdLHI9c1tlKzFdLGE9c1tlKzJdLGk9c1tlKzNdO249dF5yXmFeaSxzW2UrMF1ePW5edGhpcy5fbWl4Q29sW3Recl0sc1tlKzFdXj1uXnRoaXMuX21peENvbFtyXmFdLHNbZSsyXV49bl50aGlzLl9taXhDb2xbYV5pXSxzW2UrM11ePW5edGhpcy5fbWl4Q29sW2ledF19Zm9yKGxldCByPTAsbj0xNiplO3I8MTY7KytyLCsrbilzW3JdXj10W25dfWZvcihsZXQgZT0wO2U8MTY7KytlKXNbZV09cltzW2VdXTtpPXNbMV0sc1sxXT1zWzVdLHNbNV09c1s5XSxzWzldPXNbMTNdLHNbMTNdPWksaT1zWzJdLGE9c1s2XSxzWzJdPXNbMTBdLHNbNl09c1sxNF0sc1sxMF09aSxzWzE0XT1hLGk9c1szXSxhPXNbN10sbj1zWzExXSxzWzNdPXNbMTVdLHNbN109aSxzWzExXT1hLHNbMTVdPW47Zm9yKGxldCBlPTAscj10aGlzLl9rZXlTaXplO2U8MTY7KytlLCsrcilzW2VdXj10W3JdO3JldHVybiBzfV9kZWNyeXB0QmxvY2syKGUsdCl7Y29uc3Qgcj1lLmxlbmd0aDtsZXQgbj10aGlzLmJ1ZmZlcixhPXRoaXMuYnVmZmVyUG9zaXRpb247Y29uc3QgaT1bXTtsZXQgcz10aGlzLml2O2ZvcihsZXQgdD0wO3Q8cjsrK3Qpe2lmKG5bYV09ZVt0XSwrK2EsYTwxNiljb250aW51ZTtjb25zdCByPXRoaXMuX2RlY3J5cHQobix0aGlzLl9rZXkpO2ZvcihsZXQgZT0wO2U8MTY7KytlKXJbZV1ePXNbZV07cz1uLGkucHVzaChyKSxuPW5ldyBVaW50OEFycmF5KDE2KSxhPTB9aWYodGhpcy5idWZmZXI9bix0aGlzLmJ1ZmZlckxlbmd0aD1hLHRoaXMuaXY9cywwPT09aS5sZW5ndGgpcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO2xldCBvPTE2KmkubGVuZ3RoO2lmKHQpe2NvbnN0IGU9aS5hdCgtMSk7bGV0IHQ9ZVsxNV07aWYodDw9MTYpe2ZvcihsZXQgcj0xNSxuPTE2LXQ7cj49bjstLXIpaWYoZVtyXSE9PXQpe3Q9MDticmVha31vLT10LGlbaS5sZW5ndGgtMV09ZS5zdWJhcnJheSgwLDE2LXQpfX1jb25zdCBjPW5ldyBVaW50OEFycmF5KG8pO2ZvcihsZXQgZT0wLHQ9MCxyPWkubGVuZ3RoO2U8cjsrK2UsdCs9MTYpYy5zZXQoaVtlXSx0KTtyZXR1cm4gY31kZWNyeXB0QmxvY2soZSx0KXtsZXQgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbDtjb25zdCBuPWUubGVuZ3RoLGE9dGhpcy5idWZmZXI7bGV0IGk9dGhpcy5idWZmZXJQb3NpdGlvbjtpZihyKXRoaXMuaXY9cjtlbHNle2ZvcihsZXQgdD0wO2k8MTYmJnQ8bjsrK3QsKytpKWFbaV09ZVt0XTtpZihpPDE2KXJldHVybiB0aGlzLmJ1ZmZlckxlbmd0aD1pLG5ldyBVaW50OEFycmF5KDApO3RoaXMuaXY9YSxlPWUuc3ViYXJyYXkoMTYpfXJldHVybiB0aGlzLmJ1ZmZlcj1uZXcgVWludDhBcnJheSgxNiksdGhpcy5idWZmZXJMZW5ndGg9MCx0aGlzLmRlY3J5cHRCbG9jaz10aGlzLl9kZWNyeXB0QmxvY2syLHRoaXMuZGVjcnlwdEJsb2NrKGUsdCl9ZW5jcnlwdChlLHQpe2NvbnN0IHI9ZS5sZW5ndGg7bGV0IG49dGhpcy5idWZmZXIsYT10aGlzLmJ1ZmZlclBvc2l0aW9uO2NvbnN0IGk9W107dHx8KHQ9bmV3IFVpbnQ4QXJyYXkoMTYpKTtmb3IobGV0IHM9MDtzPHI7KytzKXtpZihuW2FdPWVbc10sKythLGE8MTYpY29udGludWU7Zm9yKGxldCBlPTA7ZTwxNjsrK2UpbltlXV49dFtlXTtjb25zdCByPXRoaXMuX2VuY3J5cHQobix0aGlzLl9rZXkpO3Q9cixpLnB1c2gociksbj1uZXcgVWludDhBcnJheSgxNiksYT0wfWlmKHRoaXMuYnVmZmVyPW4sdGhpcy5idWZmZXJMZW5ndGg9YSx0aGlzLml2PXQsMD09PWkubGVuZ3RoKXJldHVybiBuZXcgVWludDhBcnJheSgwKTtjb25zdCBzPTE2KmkubGVuZ3RoLG89bmV3IFVpbnQ4QXJyYXkocyk7Zm9yKGxldCBlPTAsdD0wLHI9aS5sZW5ndGg7ZTxyOysrZSx0Kz0xNilvLnNldChpW2VdLHQpO3JldHVybiBvfX1jbGFzcyBnIGV4dGVuZHMgZntjb25zdHJ1Y3RvcihlKXtzdXBlcigpLHRoaXMuX2N5Y2xlc09mUmVwZXRpdGlvbj0xMCx0aGlzLl9rZXlTaXplPTE2MCx0aGlzLl9yY29uPW5ldyBVaW50OEFycmF5KFsxNDEsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTQsMTA4LDIxNiwxNzEsNzcsMTU0LDQ3LDk0LDE4OCw5OSwxOTgsMTUxLDUzLDEwNiwyMTIsMTc5LDEyNSwyNTAsMjM5LDE5NywxNDUsNTcsMTE0LDIyOCwyMTEsMTg5LDk3LDE5NCwxNTksMzcsNzQsMTQ4LDUxLDEwMiwyMDQsMTMxLDI5LDU4LDExNiwyMzIsMjAzLDE0MSwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NCwxMDgsMjE2LDE3MSw3NywxNTQsNDcsOTQsMTg4LDk5LDE5OCwxNTEsNTMsMTA2LDIxMiwxNzksMTI1LDI1MCwyMzksMTk3LDE0NSw1NywxMTQsMjI4LDIxMSwxODksOTcsMTk0LDE1OSwzNyw3NCwxNDgsNTEsMTAyLDIwNCwxMzEsMjksNTgsMTE2LDIzMiwyMDMsMTQxLDEsMiw0LDgsMTYsMzIsNjQsMTI4LDI3LDU0LDEwOCwyMTYsMTcxLDc3LDE1NCw0Nyw5NCwxODgsOTksMTk4LDE1MSw1MywxMDYsMjEyLDE3OSwxMjUsMjUwLDIzOSwxOTcsMTQ1LDU3LDExNCwyMjgsMjExLDE4OSw5NywxOTQsMTU5LDM3LDc0LDE0OCw1MSwxMDIsMjA0LDEzMSwyOSw1OCwxMTYsMjMyLDIwMywxNDEsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTQsMTA4LDIxNiwxNzEsNzcsMTU0LDQ3LDk0LDE4OCw5OSwxOTgsMTUxLDUzLDEwNiwyMTIsMTc5LDEyNSwyNTAsMjM5LDE5NywxNDUsNTcsMTE0LDIyOCwyMTEsMTg5LDk3LDE5NCwxNTksMzcsNzQsMTQ4LDUxLDEwMiwyMDQsMTMxLDI5LDU4LDExNiwyMzIsMjAzLDE0MSwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NCwxMDgsMjE2LDE3MSw3NywxNTQsNDcsOTQsMTg4LDk5LDE5OCwxNTEsNTMsMTA2LDIxMiwxNzksMTI1LDI1MCwyMzksMTk3LDE0NSw1NywxMTQsMjI4LDIxMSwxODksOTcsMTk0LDE1OSwzNyw3NCwxNDgsNTEsMTAyLDIwNCwxMzEsMjksNTgsMTE2LDIzMiwyMDMsMTQxXSksdGhpcy5fa2V5PXRoaXMuX2V4cGFuZEtleShlKX1fZXhwYW5kS2V5KGUpe2NvbnN0IHQ9dGhpcy5fcyxyPXRoaXMuX3Jjb24sbj1uZXcgVWludDhBcnJheSgxNzYpO24uc2V0KGUpO2ZvcihsZXQgZT0xNixhPTE7ZTwxNzY7KythKXtsZXQgaT1uW2UtM10scz1uW2UtMl0sbz1uW2UtMV0sYz1uW2UtNF07aT10W2ldLHM9dFtzXSxvPXRbb10sYz10W2NdLGlePXJbYV07Zm9yKGxldCB0PTA7dDw0OysrdCluW2VdPWlePW5bZS0xNl0sZSsrLG5bZV09c149bltlLTE2XSxlKyssbltlXT1vXj1uW2UtMTZdLGUrKyxuW2VdPWNePW5bZS0xNl0sZSsrfXJldHVybiBufX10LkFFUzEyOENpcGhlcj1nO2NsYXNzIHAgZXh0ZW5kcyBme2NvbnN0cnVjdG9yKGUpe3N1cGVyKCksdGhpcy5fY3ljbGVzT2ZSZXBldGl0aW9uPTE0LHRoaXMuX2tleVNpemU9MjI0LHRoaXMuX2tleT10aGlzLl9leHBhbmRLZXkoZSl9X2V4cGFuZEtleShlKXtjb25zdCB0PXRoaXMuX3Mscj1uZXcgVWludDhBcnJheSgyNDApO3Iuc2V0KGUpO2xldCBuLGEsaSxzLG89MTtmb3IobGV0IGU9MzIsYz0xO2U8MjQwOysrYyl7ZSUzMj09MTY/KG49dFtuXSxhPXRbYV0saT10W2ldLHM9dFtzXSk6ZSUzMj09MCYmKG49cltlLTNdLGE9cltlLTJdLGk9cltlLTFdLHM9cltlLTRdLG49dFtuXSxhPXRbYV0saT10W2ldLHM9dFtzXSxuXj1vLChvPDw9MSk+PTI1NiYmKG89MjU1JigyN15vKSkpO2ZvcihsZXQgdD0wO3Q8NDsrK3QpcltlXT1uXj1yW2UtMzJdLGUrKyxyW2VdPWFePXJbZS0zMl0sZSsrLHJbZV09aV49cltlLTMyXSxlKysscltlXT1zXj1yW2UtMzJdLGUrK31yZXR1cm4gcn19dC5BRVMyNTZDaXBoZXI9cDtjbGFzcyBte2NoZWNrT3duZXJQYXNzd29yZChlLHQscixhKXtjb25zdCBpPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKzU2KTtpLnNldChlLDApLGkuc2V0KHQsZS5sZW5ndGgpLGkuc2V0KHIsZS5sZW5ndGgrdC5sZW5ndGgpO2NvbnN0IHM9bChpLDAsaS5sZW5ndGgpO3JldHVybigwLG4uaXNBcnJheUVxdWFsKShzLGEpfWNoZWNrVXNlclBhc3N3b3JkKGUsdCxyKXtjb25zdCBhPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKzgpO2Euc2V0KGUsMCksYS5zZXQodCxlLmxlbmd0aCk7Y29uc3QgaT1sKGEsMCxhLmxlbmd0aCk7cmV0dXJuKDAsbi5pc0FycmF5RXF1YWwpKGkscil9Z2V0T3duZXJLZXkoZSx0LHIsbil7Y29uc3QgYT1uZXcgVWludDhBcnJheShlLmxlbmd0aCs1Nik7YS5zZXQoZSwwKSxhLnNldCh0LGUubGVuZ3RoKSxhLnNldChyLGUubGVuZ3RoK3QubGVuZ3RoKTtjb25zdCBpPWwoYSwwLGEubGVuZ3RoKTtyZXR1cm4gbmV3IHAoaSkuZGVjcnlwdEJsb2NrKG4sITEsbmV3IFVpbnQ4QXJyYXkoMTYpKX1nZXRVc2VyS2V5KGUsdCxyKXtjb25zdCBuPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKzgpO24uc2V0KGUsMCksbi5zZXQodCxlLmxlbmd0aCk7Y29uc3QgYT1sKG4sMCxuLmxlbmd0aCk7cmV0dXJuIG5ldyBwKGEpLmRlY3J5cHRCbG9jayhyLCExLG5ldyBVaW50OEFycmF5KDE2KSl9fXQuUERGMTc9bTtjbGFzcyBie19oYXNoKGUsdCxyKXtsZXQgbj1sKHQsMCx0Lmxlbmd0aCkuc3ViYXJyYXkoMCwzMiksYT1bMF0saT0wO2Zvcig7aTw2NHx8YS5hdCgtMSk+aS0zMjspe2NvbnN0IHQ9ZS5sZW5ndGgrbi5sZW5ndGgrci5sZW5ndGgscz1uZXcgVWludDhBcnJheSh0KTtsZXQgbz0wO3Muc2V0KGUsbyksbys9ZS5sZW5ndGgscy5zZXQobixvKSxvKz1uLmxlbmd0aCxzLnNldChyLG8pO2NvbnN0IGM9bmV3IFVpbnQ4QXJyYXkoNjQqdCk7Zm9yKGxldCBlPTAscj0wO2U8NjQ7ZSsrLHIrPXQpYy5zZXQocyxyKTthPW5ldyBnKG4uc3ViYXJyYXkoMCwxNikpLmVuY3J5cHQoYyxuLnN1YmFycmF5KDE2LDMyKSk7Y29uc3QgZD1hLnNsaWNlKDAsMTYpLnJlZHVjZSgoKGUsdCk9PmUrdCksMCklMzswPT09ZD9uPWwoYSwwLGEubGVuZ3RoKToxPT09ZD9uPXUoYSwwLGEubGVuZ3RoKToyPT09ZCYmKG49aChhLDAsYS5sZW5ndGgpKSxpKyt9cmV0dXJuIG4uc3ViYXJyYXkoMCwzMil9Y2hlY2tPd25lclBhc3N3b3JkKGUsdCxyLGEpe2NvbnN0IGk9bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgrNTYpO2kuc2V0KGUsMCksaS5zZXQodCxlLmxlbmd0aCksaS5zZXQocixlLmxlbmd0aCt0Lmxlbmd0aCk7Y29uc3Qgcz10aGlzLl9oYXNoKGUsaSxyKTtyZXR1cm4oMCxuLmlzQXJyYXlFcXVhbCkocyxhKX1jaGVja1VzZXJQYXNzd29yZChlLHQscil7Y29uc3QgYT1uZXcgVWludDhBcnJheShlLmxlbmd0aCs4KTthLnNldChlLDApLGEuc2V0KHQsZS5sZW5ndGgpO2NvbnN0IGk9dGhpcy5faGFzaChlLGEsW10pO3JldHVybigwLG4uaXNBcnJheUVxdWFsKShpLHIpfWdldE93bmVyS2V5KGUsdCxyLG4pe2NvbnN0IGE9bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgrNTYpO2Euc2V0KGUsMCksYS5zZXQodCxlLmxlbmd0aCksYS5zZXQocixlLmxlbmd0aCt0Lmxlbmd0aCk7Y29uc3QgaT10aGlzLl9oYXNoKGUsYSxyKTtyZXR1cm4gbmV3IHAoaSkuZGVjcnlwdEJsb2NrKG4sITEsbmV3IFVpbnQ4QXJyYXkoMTYpKX1nZXRVc2VyS2V5KGUsdCxyKXtjb25zdCBuPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKzgpO24uc2V0KGUsMCksbi5zZXQodCxlLmxlbmd0aCk7Y29uc3QgYT10aGlzLl9oYXNoKGUsbixbXSk7cmV0dXJuIG5ldyBwKGEpLmRlY3J5cHRCbG9jayhyLCExLG5ldyBVaW50OEFycmF5KDE2KSl9fXQuUERGMjA9YjtjbGFzcyB5e2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5TdHJpbmdDaXBoZXJDb25zdHJ1Y3Rvcj1lLHRoaXMuU3RyZWFtQ2lwaGVyQ29uc3RydWN0b3I9dH1jcmVhdGVTdHJlYW0oZSx0KXtjb25zdCByPW5ldyB0aGlzLlN0cmVhbUNpcGhlckNvbnN0cnVjdG9yO3JldHVybiBuZXcgaS5EZWNyeXB0U3RyZWFtKGUsdCwoZnVuY3Rpb24oZSx0KXtyZXR1cm4gci5kZWNyeXB0QmxvY2soZSx0KX0pKX1kZWNyeXB0U3RyaW5nKGUpe2NvbnN0IHQ9bmV3IHRoaXMuU3RyaW5nQ2lwaGVyQ29uc3RydWN0b3I7bGV0IHI9KDAsbi5zdHJpbmdUb0J5dGVzKShlKTtyZXR1cm4gcj10LmRlY3J5cHRCbG9jayhyLCEwKSwoMCxuLmJ5dGVzVG9TdHJpbmcpKHIpfWVuY3J5cHRTdHJpbmcoZSl7Y29uc3QgdD1uZXcgdGhpcy5TdHJpbmdDaXBoZXJDb25zdHJ1Y3RvcjtpZih0IGluc3RhbmNlb2YgZil7Y29uc3Qgcj0xNi1lLmxlbmd0aCUxNjtlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHIpLnJlcGVhdChyKTtjb25zdCBhPW5ldyBVaW50OEFycmF5KDE2KTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGNyeXB0byljcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGEpO2Vsc2UgZm9yKGxldCBlPTA7ZTwxNjtlKyspYVtlXT1NYXRoLmZsb29yKDI1NipNYXRoLnJhbmRvbSgpKTtsZXQgaT0oMCxuLnN0cmluZ1RvQnl0ZXMpKGUpO2k9dC5lbmNyeXB0KGksYSk7Y29uc3Qgcz1uZXcgVWludDhBcnJheSgxNitpLmxlbmd0aCk7cmV0dXJuIHMuc2V0KGEpLHMuc2V0KGksMTYpLCgwLG4uYnl0ZXNUb1N0cmluZykocyl9bGV0IHI9KDAsbi5zdHJpbmdUb0J5dGVzKShlKTtyZXR1cm4gcj10LmVuY3J5cHQociksKDAsbi5ieXRlc1RvU3RyaW5nKShyKX19Y29uc3Qgdz1mdW5jdGlvbigpe2NvbnN0IGU9bmV3IFVpbnQ4QXJyYXkoWzQwLDE5MSw3OCw5NCw3OCwxMTcsMTM4LDY1LDEwMCwwLDc4LDg2LDI1NSwyNTAsMSw4LDQ2LDQ2LDAsMTgyLDIwOCwxMDQsNjIsMTI4LDQ3LDEyLDE2OSwyNTQsMTAwLDgzLDEwNSwxMjJdKTtmdW5jdGlvbiB0KHQscixuLGEsaSxjLGwsaCl7Y29uc3QgdT00MCtuLmxlbmd0aCt0Lmxlbmd0aCxkPW5ldyBVaW50OEFycmF5KHUpO2xldCBmLGcscD0wO2lmKHIpZm9yKGc9TWF0aC5taW4oMzIsci5sZW5ndGgpO3A8ZzsrK3ApZFtwXT1yW3BdO2ZvcihmPTA7cDwzMjspZFtwKytdPWVbZisrXTtmb3IoZj0wLGc9bi5sZW5ndGg7ZjxnOysrZilkW3ArK109bltmXTtmb3IoZFtwKytdPTI1NSZpLGRbcCsrXT1pPj44JjI1NSxkW3ArK109aT4+MTYmMjU1LGRbcCsrXT1pPj4+MjQmMjU1LGY9MCxnPXQubGVuZ3RoO2Y8ZzsrK2YpZFtwKytdPXRbZl07Yz49NCYmIWgmJihkW3ArK109MjU1LGRbcCsrXT0yNTUsZFtwKytdPTI1NSxkW3ArK109MjU1KTtsZXQgbT1vKGQsMCxwKTtjb25zdCBiPWw+PjM7aWYoYz49Mylmb3IoZj0wO2Y8NTA7KytmKW09byhtLDAsYik7Y29uc3QgeT1tLnN1YmFycmF5KDAsYik7bGV0IHcsdjtpZihjPj0zKXtmb3IocD0wO3A8MzI7KytwKWRbcF09ZVtwXTtmb3IoZj0wLGc9dC5sZW5ndGg7ZjxnOysrZilkW3ArK109dFtmXTt3PW5ldyBzKHkpLHY9dy5lbmNyeXB0QmxvY2sobyhkLDAscCkpLGc9eS5sZW5ndGg7Y29uc3Qgcj1uZXcgVWludDhBcnJheShnKTtmb3IoZj0xO2Y8PTE5OysrZil7Zm9yKGxldCBlPTA7ZTxnOysrZSlyW2VdPXlbZV1eZjt3PW5ldyBzKHIpLHY9dy5lbmNyeXB0QmxvY2sodil9Zm9yKGY9MCxnPXYubGVuZ3RoO2Y8ZzsrK2YpaWYoYVtmXSE9PXZbZl0pcmV0dXJuIG51bGx9ZWxzZSBmb3Iodz1uZXcgcyh5KSx2PXcuZW5jcnlwdEJsb2NrKGUpLGY9MCxnPXYubGVuZ3RoO2Y8ZzsrK2YpaWYoYVtmXSE9PXZbZl0pcmV0dXJuIG51bGw7cmV0dXJuIHl9Y29uc3Qgcj1hLk5hbWUuZ2V0KCJJZGVudGl0eSIpO2Z1bmN0aW9uIGkoZSx0LHIpe2xldCBuPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM107Y29uc3QgYT1uZXcgVWludDhBcnJheShyLmxlbmd0aCs5KSxpPXIubGVuZ3RoO2xldCBzO2ZvcihzPTA7czxpOysrcylhW3NdPXJbc107cmV0dXJuIGFbcysrXT0yNTUmZSxhW3MrK109ZT4+OCYyNTUsYVtzKytdPWU+PjE2JjI1NSxhW3MrK109MjU1JnQsYVtzKytdPXQ+PjgmMjU1LG4mJihhW3MrK109MTE1LGFbcysrXT02NSxhW3MrK109MTA4LGFbcysrXT04NCksbyhhLDAscykuc3ViYXJyYXkoMCxNYXRoLm1pbihyLmxlbmd0aCs1LDE2KSl9ZnVuY3Rpb24gYyhlLHQscixvLGMpe2lmKCEodCBpbnN0YW5jZW9mIGEuTmFtZSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgY3J5cHQgZmlsdGVyIG5hbWUuIik7Y29uc3QgbD1lLmdldCh0Lm5hbWUpO2xldCBoO2lmKG51bGwhPWwmJihoPWwuZ2V0KCJDRk0iKSksIWh8fCJOb25lIj09PWgubmFtZSlyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGR9O2lmKCJWMiI9PT1oLm5hbWUpcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBzKGkocixvLGMsITEpKX07aWYoIkFFU1YyIj09PWgubmFtZSlyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGcoaShyLG8sYywhMCkpfTtpZigiQUVTVjMiPT09aC5uYW1lKXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgcChjKX07dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlVua25vd24gY3J5cHRvIG1ldGhvZCIpfXJldHVybiBjbGFzc3tjb25zdHJ1Y3RvcihpLGMsbCl7Y29uc3QgaD1pLmdldCgiRmlsdGVyIik7aWYoISgwLGEuaXNOYW1lKShoLCJTdGFuZGFyZCIpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJ1bmtub3duIGVuY3J5cHRpb24gbWV0aG9kIik7dGhpcy5maWx0ZXJOYW1lPWgubmFtZSx0aGlzLmRpY3Q9aTtjb25zdCB1PWkuZ2V0KCJWIik7aWYoIU51bWJlci5pc0ludGVnZXIodSl8fDEhPT11JiYyIT09dSYmNCE9PXUmJjUhPT11KXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJ1bnN1cHBvcnRlZCBlbmNyeXB0aW9uIGFsZ29yaXRobSIpO3RoaXMuYWxnb3JpdGhtPXU7bGV0IGQ9aS5nZXQoIkxlbmd0aCIpO2lmKCFkKWlmKHU8PTMpZD00MDtlbHNle2NvbnN0IGU9aS5nZXQoIkNGIiksdD1pLmdldCgiU3RtRiIpO2lmKGUgaW5zdGFuY2VvZiBhLkRpY3QmJnQgaW5zdGFuY2VvZiBhLk5hbWUpe2Uuc3VwcHJlc3NFbmNyeXB0aW9uPSEwO2NvbnN0IHI9ZS5nZXQodC5uYW1lKTtkPShudWxsPT1yP3ZvaWQgMDpyLmdldCgiTGVuZ3RoIikpfHwxMjgsZDw0MCYmKGQ8PD0zKX19aWYoIU51bWJlci5pc0ludGVnZXIoZCl8fGQ8NDB8fGQlOCE9MCl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiaW52YWxpZCBrZXkgbGVuZ3RoIik7Y29uc3QgZj0oMCxuLnN0cmluZ1RvQnl0ZXMpKGkuZ2V0KCJPIikpLGc9KDAsbi5zdHJpbmdUb0J5dGVzKShpLmdldCgiVSIpKSxwPWYuc3ViYXJyYXkoMCwzMikseT1nLnN1YmFycmF5KDAsMzIpLHc9aS5nZXQoIlAiKSx2PWkuZ2V0KCJSIikseD0oND09PXV8fDU9PT11KSYmITEhPT1pLmdldCgiRW5jcnlwdE1ldGFkYXRhIik7dGhpcy5lbmNyeXB0TWV0YWRhdGE9eDtjb25zdCBTPSgwLG4uc3RyaW5nVG9CeXRlcykoYyk7bGV0IEEsaztpZihsKXtpZig2PT09dil0cnl7bD0oMCxuLnV0ZjhTdHJpbmdUb1N0cmluZykobCl9Y2F0Y2goZSl7KDAsbi53YXJuKSgiQ2lwaGVyVHJhbnNmb3JtRmFjdG9yeTogVW5hYmxlIHRvIGNvbnZlcnQgVVRGOCBlbmNvZGVkIHBhc3N3b3JkLiIpfUE9KDAsbi5zdHJpbmdUb0J5dGVzKShsKX1pZig1IT09dSlrPXQoUyxBLHAseSx3LHYsZCx4KTtlbHNle2NvbnN0IGU9Zi5zdWJhcnJheSgzMiw0MCksdD1mLnN1YmFycmF5KDQwLDQ4KSxyPWcuc3ViYXJyYXkoMCw0OCksYT1nLnN1YmFycmF5KDMyLDQwKSxzPWcuc3ViYXJyYXkoNDAsNDgpLG89KDAsbi5zdHJpbmdUb0J5dGVzKShpLmdldCgiT0UiKSksYz0oMCxuLnN0cmluZ1RvQnl0ZXMpKGkuZ2V0KCJVRSIpKTsoMCxuLnN0cmluZ1RvQnl0ZXMpKGkuZ2V0KCJQZXJtcyIpKSxrPWZ1bmN0aW9uKGUsdCxyLG4sYSxpLHMsbyxjLGwsaCx1KXtpZih0KXtjb25zdCBlPU1hdGgubWluKDEyNyx0Lmxlbmd0aCk7dD10LnN1YmFycmF5KDAsZSl9ZWxzZSB0PVtdO2NvbnN0IGQ9Nj09PWU/bmV3IGI6bmV3IG07cmV0dXJuIGQuY2hlY2tVc2VyUGFzc3dvcmQodCxvLHMpP2QuZ2V0VXNlcktleSh0LGMsaCk6dC5sZW5ndGgmJmQuY2hlY2tPd25lclBhc3N3b3JkKHQsbixpLHIpP2QuZ2V0T3duZXJLZXkodCxhLGksbCk6bnVsbH0odixBLHAsZSx0LHIseSxhLHMsbyxjKX1pZighayYmIWwpdGhyb3cgbmV3IG4uUGFzc3dvcmRFeGNlcHRpb24oIk5vIHBhc3N3b3JkIGdpdmVuIixuLlBhc3N3b3JkUmVzcG9uc2VzLk5FRURfUEFTU1dPUkQpO2lmKCFrJiZsKXtjb25zdCByPWZ1bmN0aW9uKHQscixuLGEpe2NvbnN0IGk9bmV3IFVpbnQ4QXJyYXkoMzIpO2xldCBjPTA7Y29uc3QgbD1NYXRoLm1pbigzMix0Lmxlbmd0aCk7Zm9yKDtjPGw7KytjKWlbY109dFtjXTtsZXQgaD0wO2Zvcig7YzwzMjspaVtjKytdPWVbaCsrXTtsZXQgdT1vKGksMCxjKTtjb25zdCBkPWE+PjM7aWYobj49Mylmb3IoaD0wO2g8NTA7KytoKXU9byh1LDAsdS5sZW5ndGgpO2xldCBmLGc7aWYobj49Myl7Zz1yO2NvbnN0IGU9bmV3IFVpbnQ4QXJyYXkoZCk7Zm9yKGg9MTk7aD49MDtoLS0pe2ZvcihsZXQgdD0wO3Q8ZDsrK3QpZVt0XT11W3RdXmg7Zj1uZXcgcyhlKSxnPWYuZW5jcnlwdEJsb2NrKGcpfX1lbHNlIGY9bmV3IHModS5zdWJhcnJheSgwLGQpKSxnPWYuZW5jcnlwdEJsb2NrKHIpO3JldHVybiBnfShBLHAsdixkKTtrPXQoUyxyLHAseSx3LHYsZCx4KX1pZighayl0aHJvdyBuZXcgbi5QYXNzd29yZEV4Y2VwdGlvbigiSW5jb3JyZWN0IFBhc3N3b3JkIixuLlBhc3N3b3JkUmVzcG9uc2VzLklOQ09SUkVDVF9QQVNTV09SRCk7aWYodGhpcy5lbmNyeXB0aW9uS2V5PWssdT49NCl7Y29uc3QgZT1pLmdldCgiQ0YiKTtlIGluc3RhbmNlb2YgYS5EaWN0JiYoZS5zdXBwcmVzc0VuY3J5cHRpb249ITApLHRoaXMuY2Y9ZSx0aGlzLnN0bWY9aS5nZXQoIlN0bUYiKXx8cix0aGlzLnN0cmY9aS5nZXQoIlN0ckYiKXx8cix0aGlzLmVmZj1pLmdldCgiRUZGIil8fHRoaXMuc3RtZn19Y3JlYXRlQ2lwaGVyVHJhbnNmb3JtKGUsdCl7aWYoND09PXRoaXMuYWxnb3JpdGhtfHw1PT09dGhpcy5hbGdvcml0aG0pcmV0dXJuIG5ldyB5KGModGhpcy5jZix0aGlzLnN0cmYsZSx0LHRoaXMuZW5jcnlwdGlvbktleSksYyh0aGlzLmNmLHRoaXMuc3RtZixlLHQsdGhpcy5lbmNyeXB0aW9uS2V5KSk7Y29uc3Qgcj1pKGUsdCx0aGlzLmVuY3J5cHRpb25LZXksITEpLG49ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHMocil9O3JldHVybiBuZXcgeShuLG4pfX19KCk7dC5DaXBoZXJUcmFuc2Zvcm1GYWN0b3J5PXd9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5EZWNyeXB0U3RyZWFtPXZvaWQgMDt2YXIgbj1yKDE2OCk7Y2xhc3MgYSBleHRlbmRzIG4uRGVjb2RlU3RyZWFte2NvbnN0cnVjdG9yKGUsdCxyKXtzdXBlcih0KSx0aGlzLnN0cj1lLHRoaXMuZGljdD1lLmRpY3QsdGhpcy5kZWNyeXB0PXIsdGhpcy5uZXh0Q2h1bms9bnVsbCx0aGlzLmluaXRpYWxpemVkPSExfXJlYWRCbG9jaygpe3ZhciBlO2xldCB0O2lmKHRoaXMuaW5pdGlhbGl6ZWQ/dD10aGlzLm5leHRDaHVuazoodD10aGlzLnN0ci5nZXRCeXRlcyg1MTIpLHRoaXMuaW5pdGlhbGl6ZWQ9ITApLCF0fHwwPT09dC5sZW5ndGgpcmV0dXJuIHZvaWQodGhpcy5lb2Y9ITApO3RoaXMubmV4dENodW5rPXRoaXMuc3RyLmdldEJ5dGVzKDUxMik7Y29uc3Qgcj0obnVsbD09PShlPXRoaXMubmV4dENodW5rKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5sZW5ndGgpPjA7dD0oMCx0aGlzLmRlY3J5cHQpKHQsIXIpO2NvbnN0IG49dGhpcy5idWZmZXJMZW5ndGgsYT1uK3QubGVuZ3RoO3RoaXMuZW5zdXJlQnVmZmVyKGEpLnNldCh0LG4pLHRoaXMuYnVmZmVyTGVuZ3RoPWF9fXQuRGVjcnlwdFN0cmVhbT1hfSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQ2F0YWxvZz12b2lkIDAscig4NCkscig5Mykscig5NCkscig5Nykscig5OSkscigxMDEpLHIoMTA1KSxyKDEwOCkscigxMTUpLHIoMTM5KSxyKDIpO3ZhciBuPXIoMTQ5KSxhPXIoMTQ0KSxpPXIoMTUwKSxzPXIoMjIxKSxvPXIoMTUxKSxjPXIoMjIyKSxsPXIoMTYyKSxoPXIoMjIzKSx1PXIoMjA5KSxkPXIoMjI0KSxmPXIoMjI1KTtmdW5jdGlvbiBnKGUpe3JldHVybiBlIGluc3RhbmNlb2YgaS5EaWN0JiYoZT1lLmdldCgiRCIpKSxBcnJheS5pc0FycmF5KGUpP2U6bnVsbH1jbGFzcyBwe2NvbnN0cnVjdG9yKGUsdCl7aWYodGhpcy5wZGZNYW5hZ2VyPWUsdGhpcy54cmVmPXQsdGhpcy5fY2F0RGljdD10LmdldENhdGFsb2dPYmooKSwhKHRoaXMuX2NhdERpY3QgaW5zdGFuY2VvZiBpLkRpY3QpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJDYXRhbG9nIG9iamVjdCBpcyBub3QgYSBkaWN0aW9uYXJ5LiIpO3RoaXMudG9wbGV2ZWxQYWdlc0RpY3QsdGhpcy5fYWN0dWFsTnVtUGFnZXM9bnVsbCx0aGlzLmZvbnRDYWNoZT1uZXcgaS5SZWZTZXRDYWNoZSx0aGlzLmJ1aWx0SW5DTWFwQ2FjaGU9bmV3IE1hcCx0aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZT1uZXcgTWFwLHRoaXMuZ2xvYmFsSW1hZ2VDYWNoZT1uZXcgdS5HbG9iYWxJbWFnZUNhY2hlLHRoaXMucGFnZUtpZHNDb3VudENhY2hlPW5ldyBpLlJlZlNldENhY2hlLHRoaXMucGFnZUluZGV4Q2FjaGU9bmV3IGkuUmVmU2V0Q2FjaGUsdGhpcy5ub25CbGVuZE1vZGVzU2V0PW5ldyBpLlJlZlNldCx0aGlzLnN5c3RlbUZvbnRDYWNoZT1uZXcgTWFwfWdldCB2ZXJzaW9uKCl7Y29uc3QgZT10aGlzLl9jYXREaWN0LmdldCgiVmVyc2lvbiIpO2lmKGUgaW5zdGFuY2VvZiBpLk5hbWUpe2lmKG4uUERGX1ZFUlNJT05fUkVHRVhQLnRlc3QoZS5uYW1lKSlyZXR1cm4oMCxhLnNoYWRvdykodGhpcywidmVyc2lvbiIsZS5uYW1lKTsoMCxhLndhcm4pKCJJbnZhbGlkIFBERiBjYXRhbG9nIHZlcnNpb246ICIuY29uY2F0KGUubmFtZSkpfXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJ2ZXJzaW9uIixudWxsKX1nZXQgbGFuZygpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXQoIkxhbmciKTtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywibGFuZyIsInN0cmluZyI9PXR5cGVvZiBlPygwLGEuc3RyaW5nVG9QREZTdHJpbmcpKGUpOm51bGwpfWdldCBuZWVkc1JlbmRlcmluZygpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXQoIk5lZWRzUmVuZGVyaW5nIik7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIm5lZWRzUmVuZGVyaW5nIiwiYm9vbGVhbiI9PXR5cGVvZiBlJiZlKX1nZXQgY29sbGVjdGlvbigpe2xldCBlPW51bGw7dHJ5e2NvbnN0IHQ9dGhpcy5fY2F0RGljdC5nZXQoIkNvbGxlY3Rpb24iKTt0IGluc3RhbmNlb2YgaS5EaWN0JiZ0LnNpemU+MCYmKGU9dCl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIG4uTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxhLmluZm8pKCJDYW5ub3QgZmV0Y2ggQ29sbGVjdGlvbiBlbnRyeTsgYXNzdW1pbmcgbm8gY29sbGVjdGlvbiBpcyBwcmVzZW50LiIpfXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJjb2xsZWN0aW9uIixlKX1nZXQgYWNyb0Zvcm0oKXtsZXQgZT1udWxsO3RyeXtjb25zdCB0PXRoaXMuX2NhdERpY3QuZ2V0KCJBY3JvRm9ybSIpO3QgaW5zdGFuY2VvZiBpLkRpY3QmJnQuc2l6ZT4wJiYoZT10KX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygbi5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLGEuaW5mbykoIkNhbm5vdCBmZXRjaCBBY3JvRm9ybSBlbnRyeTsgYXNzdW1pbmcgbm8gZm9ybXMgYXJlIHByZXNlbnQuIil9cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsImFjcm9Gb3JtIixlKX1nZXQgYWNyb0Zvcm1SZWYoKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0UmF3KCJBY3JvRm9ybSIpO3JldHVybigwLGEuc2hhZG93KSh0aGlzLCJhY3JvRm9ybVJlZiIsZSBpbnN0YW5jZW9mIGkuUmVmP2U6bnVsbCl9Z2V0IG1ldGFkYXRhKCl7Y29uc3QgZT10aGlzLl9jYXREaWN0LmdldFJhdygiTWV0YWRhdGEiKTtpZighKGUgaW5zdGFuY2VvZiBpLlJlZikpcmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIm1ldGFkYXRhIixudWxsKTtsZXQgdD1udWxsO3RyeXt2YXIgcjtjb25zdCBuPXRoaXMueHJlZi5mZXRjaChlLCEobnVsbCE9PShyPXRoaXMueHJlZi5lbmNyeXB0KSYmdm9pZCAwIT09ciYmci5lbmNyeXB0TWV0YWRhdGEpKTtpZihuIGluc3RhbmNlb2Ygby5CYXNlU3RyZWFtJiZuLmRpY3QgaW5zdGFuY2VvZiBpLkRpY3Qpe2NvbnN0IGU9bi5kaWN0LmdldCgiVHlwZSIpLHI9bi5kaWN0LmdldCgiU3VidHlwZSIpO2lmKCgwLGkuaXNOYW1lKShlLCJNZXRhZGF0YSIpJiYoMCxpLmlzTmFtZSkociwiWE1MIikpe2NvbnN0IGU9KDAsYS5zdHJpbmdUb1VURjhTdHJpbmcpKG4uZ2V0U3RyaW5nKCkpO2UmJih0PW5ldyBkLk1ldGFkYXRhUGFyc2VyKGUpLnNlcmlhbGl6YWJsZSl9fX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygbi5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLGEuaW5mbykoJ1NraXBwaW5nIGludmFsaWQgTWV0YWRhdGE6ICInLmNvbmNhdChlLCciLicpKX1yZXR1cm4oMCxhLnNoYWRvdykodGhpcywibWV0YWRhdGEiLHQpfWdldCBtYXJrSW5mbygpe2xldCBlPW51bGw7dHJ5e2U9dGhpcy5fcmVhZE1hcmtJbmZvKCl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIG4uTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxhLndhcm4pKCJVbmFibGUgdG8gcmVhZCBtYXJrIGluZm8uIil9cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIm1hcmtJbmZvIixlKX1fcmVhZE1hcmtJbmZvKCl7Y29uc3QgZT10aGlzLl9jYXREaWN0LmdldCgiTWFya0luZm8iKTtpZighKGUgaW5zdGFuY2VvZiBpLkRpY3QpKXJldHVybiBudWxsO2NvbnN0IHQ9e01hcmtlZDohMSxVc2VyUHJvcGVydGllczohMSxTdXNwZWN0czohMX07Zm9yKGNvbnN0IHIgaW4gdCl7Y29uc3Qgbj1lLmdldChyKTsiYm9vbGVhbiI9PXR5cGVvZiBuJiYodFtyXT1uKX1yZXR1cm4gdH1nZXQgc3RydWN0VHJlZVJvb3QoKXtsZXQgZT1udWxsO3RyeXtlPXRoaXMuX3JlYWRTdHJ1Y3RUcmVlUm9vdCgpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBuLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsYS53YXJuKSgiVW5hYmxlIHJlYWQgdG8gc3RydWN0VHJlZVJvb3QgaW5mby4iKX1yZXR1cm4oMCxhLnNoYWRvdykodGhpcywic3RydWN0VHJlZVJvb3QiLGUpfV9yZWFkU3RydWN0VHJlZVJvb3QoKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0KCJTdHJ1Y3RUcmVlUm9vdCIpO2lmKCEoZSBpbnN0YW5jZW9mIGkuRGljdCkpcmV0dXJuIG51bGw7Y29uc3QgdD1uZXcgZi5TdHJ1Y3RUcmVlUm9vdChlKTtyZXR1cm4gdC5pbml0KCksdH1nZXQgdG9wbGV2ZWxQYWdlc0RpY3QoKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0KCJQYWdlcyIpO2lmKCEoZSBpbnN0YW5jZW9mIGkuRGljdCkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkludmFsaWQgdG9wLWxldmVsIHBhZ2VzIGRpY3Rpb25hcnkuIik7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInRvcGxldmVsUGFnZXNEaWN0IixlKX1nZXQgZG9jdW1lbnRPdXRsaW5lKCl7bGV0IGU9bnVsbDt0cnl7ZT10aGlzLl9yZWFkRG9jdW1lbnRPdXRsaW5lKCl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIG4uTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxhLndhcm4pKCJVbmFibGUgdG8gcmVhZCBkb2N1bWVudCBvdXRsaW5lLiIpfXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJkb2N1bWVudE91dGxpbmUiLGUpfV9yZWFkRG9jdW1lbnRPdXRsaW5lKCl7bGV0IGU9dGhpcy5fY2F0RGljdC5nZXQoIk91dGxpbmVzIik7aWYoIShlIGluc3RhbmNlb2YgaS5EaWN0KSlyZXR1cm4gbnVsbDtpZihlPWUuZ2V0UmF3KCJGaXJzdCIpLCEoZSBpbnN0YW5jZW9mIGkuUmVmKSlyZXR1cm4gbnVsbDtjb25zdCB0PXtpdGVtczpbXX0scj1be29iajplLHBhcmVudDp0fV0sbj1uZXcgaS5SZWZTZXQ7bi5wdXQoZSk7Y29uc3Qgcz10aGlzLnhyZWYsbz1uZXcgVWludDhDbGFtcGVkQXJyYXkoMyk7Zm9yKDtyLmxlbmd0aD4wOyl7Y29uc3QgdD1yLnNoaWZ0KCksYz1zLmZldGNoSWZSZWYodC5vYmopO2lmKG51bGw9PT1jKWNvbnRpbnVlO2lmKCFjLmhhcygiVGl0bGUiKSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiSW52YWxpZCBvdXRsaW5lIGl0ZW0gZW5jb3VudGVyZWQuIik7Y29uc3QgaD17dXJsOm51bGwsZGVzdDpudWxsLGFjdGlvbjpudWxsfTtwLnBhcnNlRGVzdERpY3Rpb25hcnkoe2Rlc3REaWN0OmMscmVzdWx0T2JqOmgsZG9jQmFzZVVybDp0aGlzLnBkZk1hbmFnZXIuZG9jQmFzZVVybCxkb2NBdHRhY2htZW50czp0aGlzLmF0dGFjaG1lbnRzfSk7Y29uc3QgdT1jLmdldCgiVGl0bGUiKSxkPWMuZ2V0KCJGIil8fDAsZj1jLmdldEFycmF5KCJDIiksZz1jLmdldCgiQ291bnQiKTtsZXQgbT1vOyFBcnJheS5pc0FycmF5KGYpfHwzIT09Zi5sZW5ndGh8fDA9PT1mWzBdJiYwPT09ZlsxXSYmMD09PWZbMl18fChtPWwuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYi5nZXRSZ2IoZiwwKSk7Y29uc3QgYj17YWN0aW9uOmguYWN0aW9uLGF0dGFjaG1lbnQ6aC5hdHRhY2htZW50LGRlc3Q6aC5kZXN0LHVybDpoLnVybCx1bnNhZmVVcmw6aC51bnNhZmVVcmwsbmV3V2luZG93OmgubmV3V2luZG93LHNldE9DR1N0YXRlOmguc2V0T0NHU3RhdGUsdGl0bGU6KDAsYS5zdHJpbmdUb1BERlN0cmluZykodSksY29sb3I6bSxjb3VudDpOdW1iZXIuaXNJbnRlZ2VyKGcpP2c6dm9pZCAwLGJvbGQ6ISEoMiZkKSxpdGFsaWM6ISEoMSZkKSxpdGVtczpbXX07dC5wYXJlbnQuaXRlbXMucHVzaChiKSxlPWMuZ2V0UmF3KCJGaXJzdCIpLGUgaW5zdGFuY2VvZiBpLlJlZiYmIW4uaGFzKGUpJiYoci5wdXNoKHtvYmo6ZSxwYXJlbnQ6Yn0pLG4ucHV0KGUpKSxlPWMuZ2V0UmF3KCJOZXh0IiksZSBpbnN0YW5jZW9mIGkuUmVmJiYhbi5oYXMoZSkmJihyLnB1c2goe29iajplLHBhcmVudDp0LnBhcmVudH0pLG4ucHV0KGUpKX1yZXR1cm4gdC5pdGVtcy5sZW5ndGg+MD90Lml0ZW1zOm51bGx9Z2V0IHBlcm1pc3Npb25zKCl7bGV0IGU9bnVsbDt0cnl7ZT10aGlzLl9yZWFkUGVybWlzc2lvbnMoKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygbi5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLGEud2FybikoIlVuYWJsZSB0byByZWFkIHBlcm1pc3Npb25zLiIpfXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJwZXJtaXNzaW9ucyIsZSl9X3JlYWRQZXJtaXNzaW9ucygpe2NvbnN0IGU9dGhpcy54cmVmLnRyYWlsZXIuZ2V0KCJFbmNyeXB0Iik7aWYoIShlIGluc3RhbmNlb2YgaS5EaWN0KSlyZXR1cm4gbnVsbDtsZXQgdD1lLmdldCgiUCIpO2lmKCJudW1iZXIiIT10eXBlb2YgdClyZXR1cm4gbnVsbDt0Kz0yKiozMjtjb25zdCByPVtdO2Zvcihjb25zdCBlIGluIGEuUGVybWlzc2lvbkZsYWcpe2NvbnN0IG49YS5QZXJtaXNzaW9uRmxhZ1tlXTt0Jm4mJnIucHVzaChuKX1yZXR1cm4gcn1nZXQgb3B0aW9uYWxDb250ZW50Q29uZmlnKCl7bGV0IGU9bnVsbDt0cnl7Y29uc3QgdD10aGlzLl9jYXREaWN0LmdldCgiT0NQcm9wZXJ0aWVzIik7aWYoIXQpcmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsIm9wdGlvbmFsQ29udGVudENvbmZpZyIsbnVsbCk7Y29uc3Qgcj10LmdldCgiRCIpO2lmKCFyKXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJvcHRpb25hbENvbnRlbnRDb25maWciLG51bGwpO2NvbnN0IG49dC5nZXQoIk9DR3MiKTtpZighQXJyYXkuaXNBcnJheShuKSlyZXR1cm4oMCxhLnNoYWRvdykodGhpcywib3B0aW9uYWxDb250ZW50Q29uZmlnIixudWxsKTtjb25zdCBzPVtdLG89W107Zm9yKGNvbnN0IGUgb2Ygbil7aWYoIShlIGluc3RhbmNlb2YgaS5SZWYpKWNvbnRpbnVlO28ucHVzaChlKTtjb25zdCB0PXRoaXMueHJlZi5mZXRjaElmUmVmKGUpO3MucHVzaCh7aWQ6ZS50b1N0cmluZygpLG5hbWU6InN0cmluZyI9PXR5cGVvZiB0LmdldCgiTmFtZSIpPygwLGEuc3RyaW5nVG9QREZTdHJpbmcpKHQuZ2V0KCJOYW1lIikpOm51bGwsaW50ZW50OiJzdHJpbmciPT10eXBlb2YgdC5nZXQoIkludGVudCIpPygwLGEuc3RyaW5nVG9QREZTdHJpbmcpKHQuZ2V0KCJJbnRlbnQiKSk6bnVsbH0pfWU9dGhpcy5fcmVhZE9wdGlvbmFsQ29udGVudENvbmZpZyhyLG8pLGUuZ3JvdXBzPXN9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIG4uTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxhLndhcm4pKCJVbmFibGUgdG8gcmVhZCBvcHRpb25hbCBjb250ZW50IGNvbmZpZzogIi5jb25jYXQoZSkpfXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJvcHRpb25hbENvbnRlbnRDb25maWciLGUpfV9yZWFkT3B0aW9uYWxDb250ZW50Q29uZmlnKGUsdCl7ZnVuY3Rpb24gcihlKXtjb25zdCByPVtdO2lmKEFycmF5LmlzQXJyYXkoZSkpZm9yKGNvbnN0IG4gb2YgZSluIGluc3RhbmNlb2YgaS5SZWYmJnQuaW5jbHVkZXMobikmJnIucHVzaChuLnRvU3RyaW5nKCkpO3JldHVybiByfWZ1bmN0aW9uIG4oZSl7bGV0IHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjA7aWYoIUFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIG51bGw7Y29uc3Qgbj1bXTtmb3IoY29uc3QgYSBvZiBlKXtpZihhIGluc3RhbmNlb2YgaS5SZWYmJnQuaW5jbHVkZXMoYSkpe2MucHV0KGEpLG4ucHVzaChhLnRvU3RyaW5nKCkpO2NvbnRpbnVlfWNvbnN0IGU9cyhhLHIpO2UmJm4ucHVzaChlKX1pZihyPjApcmV0dXJuIG47Y29uc3QgYT1bXTtmb3IoY29uc3QgZSBvZiB0KWMuaGFzKGUpfHxhLnB1c2goZS50b1N0cmluZygpKTtyZXR1cm4gYS5sZW5ndGgmJm4ucHVzaCh7bmFtZTpudWxsLG9yZGVyOmF9KSxufWZ1bmN0aW9uIHMoZSx0KXtpZigrK3Q+bClyZXR1cm4oMCxhLndhcm4pKCJwYXJzZU5lc3RlZE9yZGVyIC0gcmVhY2hlZCBNQVhfTkVTVEVEX0xFVkVMUy4iKSxudWxsO2NvbnN0IHI9by5mZXRjaElmUmVmKGUpO2lmKCFBcnJheS5pc0FycmF5KHIpKXJldHVybiBudWxsO2NvbnN0IGk9by5mZXRjaElmUmVmKHJbMF0pO2lmKCJzdHJpbmciIT10eXBlb2YgaSlyZXR1cm4gbnVsbDtjb25zdCBzPW4oci5zbGljZSgxKSx0KTtyZXR1cm4gcyYmcy5sZW5ndGg/e25hbWU6KDAsYS5zdHJpbmdUb1BERlN0cmluZykoaSksb3JkZXI6c306bnVsbH1jb25zdCBvPXRoaXMueHJlZixjPW5ldyBpLlJlZlNldCxsPTEwO3JldHVybntuYW1lOiJzdHJpbmciPT10eXBlb2YgZS5nZXQoIk5hbWUiKT8oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShlLmdldCgiTmFtZSIpKTpudWxsLGNyZWF0b3I6InN0cmluZyI9PXR5cGVvZiBlLmdldCgiQ3JlYXRvciIpPygwLGEuc3RyaW5nVG9QREZTdHJpbmcpKGUuZ2V0KCJDcmVhdG9yIikpOm51bGwsYmFzZVN0YXRlOmUuZ2V0KCJCYXNlU3RhdGUiKWluc3RhbmNlb2YgaS5OYW1lP2UuZ2V0KCJCYXNlU3RhdGUiKS5uYW1lOm51bGwsb246cihlLmdldCgiT04iKSksb2ZmOnIoZS5nZXQoIk9GRiIpKSxvcmRlcjpuKGUuZ2V0KCJPcmRlciIpKSxncm91cHM6bnVsbH19c2V0QWN0dWFsTnVtUGFnZXMoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDt0aGlzLl9hY3R1YWxOdW1QYWdlcz1lfWdldCBoYXNBY3R1YWxOdW1QYWdlcygpe3JldHVybiBudWxsIT09dGhpcy5fYWN0dWFsTnVtUGFnZXN9Z2V0IF9wYWdlc0NvdW50KCl7Y29uc3QgZT10aGlzLnRvcGxldmVsUGFnZXNEaWN0LmdldCgiQ291bnQiKTtpZighTnVtYmVyLmlzSW50ZWdlcihlKSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiUGFnZSBjb3VudCBpbiB0b3AtbGV2ZWwgcGFnZXMgZGljdGlvbmFyeSBpcyBub3QgYW4gaW50ZWdlci4iKTtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiX3BhZ2VzQ291bnQiLGUpfWdldCBudW1QYWdlcygpe3JldHVybiB0aGlzLmhhc0FjdHVhbE51bVBhZ2VzP3RoaXMuX2FjdHVhbE51bVBhZ2VzOnRoaXMuX3BhZ2VzQ291bnR9Z2V0IGRlc3RpbmF0aW9ucygpe2NvbnN0IGU9dGhpcy5fcmVhZERlc3RzKCksdD1PYmplY3QuY3JlYXRlKG51bGwpO2lmKGUgaW5zdGFuY2VvZiBzLk5hbWVUcmVlKWZvcihjb25zdFtyLG5db2YgZS5nZXRBbGwoKSl7Y29uc3QgZT1nKG4pO2UmJih0WygwLGEuc3RyaW5nVG9QREZTdHJpbmcpKHIpXT1lKX1lbHNlIGUgaW5zdGFuY2VvZiBpLkRpY3QmJmUuZm9yRWFjaCgoZnVuY3Rpb24oZSxyKXtjb25zdCBuPWcocik7biYmKHRbZV09bil9KSk7cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsImRlc3RpbmF0aW9ucyIsdCl9Z2V0RGVzdGluYXRpb24oZSl7Y29uc3QgdD10aGlzLl9yZWFkRGVzdHMoKTtpZih0IGluc3RhbmNlb2Ygcy5OYW1lVHJlZSl7Y29uc3Qgcj1nKHQuZ2V0KGUpKTtpZihyKXJldHVybiByO2NvbnN0IG49dGhpcy5kZXN0aW5hdGlvbnNbZV07aWYobilyZXR1cm4oMCxhLndhcm4pKCdGb3VuZCAiJy5jb25jYXQoZSwnIiBhdCBhbiBpbmNvcnJlY3QgcG9zaXRpb24gaW4gdGhlIE5hbWVUcmVlLicpKSxufWVsc2UgaWYodCBpbnN0YW5jZW9mIGkuRGljdCl7Y29uc3Qgcj1nKHQuZ2V0KGUpKTtpZihyKXJldHVybiByfXJldHVybiBudWxsfV9yZWFkRGVzdHMoKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0KCJOYW1lcyIpO3JldHVybiBudWxsIT1lJiZlLmhhcygiRGVzdHMiKT9uZXcgcy5OYW1lVHJlZShlLmdldFJhdygiRGVzdHMiKSx0aGlzLnhyZWYpOnRoaXMuX2NhdERpY3QuaGFzKCJEZXN0cyIpP3RoaXMuX2NhdERpY3QuZ2V0KCJEZXN0cyIpOnZvaWQgMH1nZXQgcGFnZUxhYmVscygpe2xldCBlPW51bGw7dHJ5e2U9dGhpcy5fcmVhZFBhZ2VMYWJlbHMoKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygbi5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLGEud2FybikoIlVuYWJsZSB0byByZWFkIHBhZ2UgbGFiZWxzLiIpfXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJwYWdlTGFiZWxzIixlKX1fcmVhZFBhZ2VMYWJlbHMoKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0UmF3KCJQYWdlTGFiZWxzIik7aWYoIWUpcmV0dXJuIG51bGw7Y29uc3QgdD1uZXcgQXJyYXkodGhpcy5udW1QYWdlcyk7bGV0IHI9bnVsbCxvPSIiO2NvbnN0IGM9bmV3IHMuTnVtYmVyVHJlZShlLHRoaXMueHJlZikuZ2V0QWxsKCk7bGV0IGw9IiIsaD0xO2ZvcihsZXQgZT0wLHM9dGhpcy5udW1QYWdlcztlPHM7ZSsrKXtjb25zdCBzPWMuZ2V0KGUpO2lmKHZvaWQgMCE9PXMpe2lmKCEocyBpbnN0YW5jZW9mIGkuRGljdCkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIlBhZ2VMYWJlbCBpcyBub3QgYSBkaWN0aW9uYXJ5LiIpO2lmKHMuaGFzKCJUeXBlIikmJiEoMCxpLmlzTmFtZSkocy5nZXQoIlR5cGUiKSwiUGFnZUxhYmVsIikpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkludmFsaWQgdHlwZSBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS4iKTtpZihzLmhhcygiUyIpKXtjb25zdCBlPXMuZ2V0KCJTIik7aWYoIShlIGluc3RhbmNlb2YgaS5OYW1lKSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiSW52YWxpZCBzdHlsZSBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS4iKTtyPWUubmFtZX1lbHNlIHI9bnVsbDtpZihzLmhhcygiUCIpKXtjb25zdCBlPXMuZ2V0KCJQIik7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJJbnZhbGlkIHByZWZpeCBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS4iKTtvPSgwLGEuc3RyaW5nVG9QREZTdHJpbmcpKGUpfWVsc2Ugbz0iIjtpZihzLmhhcygiU3QiKSl7Y29uc3QgZT1zLmdldCgiU3QiKTtpZighKE51bWJlci5pc0ludGVnZXIoZSkmJmU+PTEpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJJbnZhbGlkIHN0YXJ0IGluIFBhZ2VMYWJlbCBkaWN0aW9uYXJ5LiIpO2g9ZX1lbHNlIGg9MX1zd2l0Y2gocil7Y2FzZSJEIjpsPWg7YnJlYWs7Y2FzZSJSIjpjYXNlInIiOmw9KDAsbi50b1JvbWFuTnVtZXJhbHMpKGgsInIiPT09cik7YnJlYWs7Y2FzZSJBIjpjYXNlImEiOmNvbnN0IGU9MjYsdD0iYSI9PT1yPzk3OjY1LGk9aC0xO2w9U3RyaW5nLmZyb21DaGFyQ29kZSh0K2klZSkucmVwZWF0KE1hdGguZmxvb3IoaS9lKSsxKTticmVhaztkZWZhdWx0OmlmKHIpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoJ0ludmFsaWQgc3R5bGUgIicuY29uY2F0KHIsJyIgaW4gUGFnZUxhYmVsIGRpY3Rpb25hcnkuJykpO2w9IiJ9dFtlXT1vK2wsaCsrfXJldHVybiB0fWdldCBwYWdlTGF5b3V0KCl7Y29uc3QgZT10aGlzLl9jYXREaWN0LmdldCgiUGFnZUxheW91dCIpO2xldCB0PSIiO2lmKGUgaW5zdGFuY2VvZiBpLk5hbWUpc3dpdGNoKGUubmFtZSl7Y2FzZSJTaW5nbGVQYWdlIjpjYXNlIk9uZUNvbHVtbiI6Y2FzZSJUd29Db2x1bW5MZWZ0IjpjYXNlIlR3b0NvbHVtblJpZ2h0IjpjYXNlIlR3b1BhZ2VMZWZ0IjpjYXNlIlR3b1BhZ2VSaWdodCI6dD1lLm5hbWV9cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInBhZ2VMYXlvdXQiLHQpfWdldCBwYWdlTW9kZSgpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXQoIlBhZ2VNb2RlIik7bGV0IHQ9IlVzZU5vbmUiO2lmKGUgaW5zdGFuY2VvZiBpLk5hbWUpc3dpdGNoKGUubmFtZSl7Y2FzZSJVc2VOb25lIjpjYXNlIlVzZU91dGxpbmVzIjpjYXNlIlVzZVRodW1icyI6Y2FzZSJGdWxsU2NyZWVuIjpjYXNlIlVzZU9DIjpjYXNlIlVzZUF0dGFjaG1lbnRzIjp0PWUubmFtZX1yZXR1cm4oMCxhLnNoYWRvdykodGhpcywicGFnZU1vZGUiLHQpfWdldCB2aWV3ZXJQcmVmZXJlbmNlcygpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXQoIlZpZXdlclByZWZlcmVuY2VzIik7aWYoIShlIGluc3RhbmNlb2YgaS5EaWN0KSlyZXR1cm4oMCxhLnNoYWRvdykodGhpcywidmlld2VyUHJlZmVyZW5jZXMiLG51bGwpO2xldCB0PW51bGw7Zm9yKGNvbnN0IHIgb2YgZS5nZXRLZXlzKCkpe2NvbnN0IG49ZS5nZXQocik7bGV0IHM7c3dpdGNoKHIpe2Nhc2UiSGlkZVRvb2xiYXIiOmNhc2UiSGlkZU1lbnViYXIiOmNhc2UiSGlkZVdpbmRvd1VJIjpjYXNlIkZpdFdpbmRvdyI6Y2FzZSJDZW50ZXJXaW5kb3ciOmNhc2UiRGlzcGxheURvY1RpdGxlIjpjYXNlIlBpY2tUcmF5QnlQREZTaXplIjoiYm9vbGVhbiI9PXR5cGVvZiBuJiYocz1uKTticmVhaztjYXNlIk5vbkZ1bGxTY3JlZW5QYWdlTW9kZSI6aWYobiBpbnN0YW5jZW9mIGkuTmFtZSlzd2l0Y2gobi5uYW1lKXtjYXNlIlVzZU5vbmUiOmNhc2UiVXNlT3V0bGluZXMiOmNhc2UiVXNlVGh1bWJzIjpjYXNlIlVzZU9DIjpzPW4ubmFtZTticmVhaztkZWZhdWx0OnM9IlVzZU5vbmUifWJyZWFrO2Nhc2UiRGlyZWN0aW9uIjppZihuIGluc3RhbmNlb2YgaS5OYW1lKXN3aXRjaChuLm5hbWUpe2Nhc2UiTDJSIjpjYXNlIlIyTCI6cz1uLm5hbWU7YnJlYWs7ZGVmYXVsdDpzPSJMMlIifWJyZWFrO2Nhc2UiVmlld0FyZWEiOmNhc2UiVmlld0NsaXAiOmNhc2UiUHJpbnRBcmVhIjpjYXNlIlByaW50Q2xpcCI6aWYobiBpbnN0YW5jZW9mIGkuTmFtZSlzd2l0Y2gobi5uYW1lKXtjYXNlIk1lZGlhQm94IjpjYXNlIkNyb3BCb3giOmNhc2UiQmxlZWRCb3giOmNhc2UiVHJpbUJveCI6Y2FzZSJBcnRCb3giOnM9bi5uYW1lO2JyZWFrO2RlZmF1bHQ6cz0iQ3JvcEJveCJ9YnJlYWs7Y2FzZSJQcmludFNjYWxpbmciOmlmKG4gaW5zdGFuY2VvZiBpLk5hbWUpc3dpdGNoKG4ubmFtZSl7Y2FzZSJOb25lIjpjYXNlIkFwcERlZmF1bHQiOnM9bi5uYW1lO2JyZWFrO2RlZmF1bHQ6cz0iQXBwRGVmYXVsdCJ9YnJlYWs7Y2FzZSJEdXBsZXgiOmlmKG4gaW5zdGFuY2VvZiBpLk5hbWUpc3dpdGNoKG4ubmFtZSl7Y2FzZSJTaW1wbGV4IjpjYXNlIkR1cGxleEZsaXBTaG9ydEVkZ2UiOmNhc2UiRHVwbGV4RmxpcExvbmdFZGdlIjpzPW4ubmFtZTticmVhaztkZWZhdWx0OnM9Ik5vbmUifWJyZWFrO2Nhc2UiUHJpbnRQYWdlUmFuZ2UiOkFycmF5LmlzQXJyYXkobikmJm4ubGVuZ3RoJTI9PTAmJm4uZXZlcnkoKChlLHQscik9Pk51bWJlci5pc0ludGVnZXIoZSkmJmU+MCYmKDA9PT10fHxlPj1yW3QtMV0pJiZlPD10aGlzLm51bVBhZ2VzKSkmJihzPW4pO2JyZWFrO2Nhc2UiTnVtQ29waWVzIjpOdW1iZXIuaXNJbnRlZ2VyKG4pJiZuPjAmJihzPW4pO2JyZWFrO2RlZmF1bHQ6KDAsYS53YXJuKSgiSWdub3Jpbmcgbm9uLXN0YW5kYXJkIGtleSBpbiBWaWV3ZXJQcmVmZXJlbmNlczogIi5jb25jYXQociwiLiIpKTtjb250aW51ZX12b2lkIDAhPT1zPyh0fHwodD1PYmplY3QuY3JlYXRlKG51bGwpKSx0W3JdPXMpOigwLGEud2FybikoJ0JhZCB2YWx1ZSwgZm9yIGtleSAiJy5jb25jYXQociwnIiwgaW4gVmlld2VyUHJlZmVyZW5jZXM6ICcpLmNvbmNhdChuLCIuIikpfXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJ2aWV3ZXJQcmVmZXJlbmNlcyIsdCl9Z2V0IG9wZW5BY3Rpb24oKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0KCJPcGVuQWN0aW9uIiksdD1PYmplY3QuY3JlYXRlKG51bGwpO2lmKGUgaW5zdGFuY2VvZiBpLkRpY3Qpe2NvbnN0IHI9bmV3IGkuRGljdCh0aGlzLnhyZWYpO3Iuc2V0KCJBIixlKTtjb25zdCBuPXt1cmw6bnVsbCxkZXN0Om51bGwsYWN0aW9uOm51bGx9O3AucGFyc2VEZXN0RGljdGlvbmFyeSh7ZGVzdERpY3Q6cixyZXN1bHRPYmo6bn0pLEFycmF5LmlzQXJyYXkobi5kZXN0KT90LmRlc3Q9bi5kZXN0Om4uYWN0aW9uJiYodC5hY3Rpb249bi5hY3Rpb24pfWVsc2UgQXJyYXkuaXNBcnJheShlKSYmKHQuZGVzdD1lKTtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywib3BlbkFjdGlvbiIsKDAsYS5vYmplY3RTaXplKSh0KT4wP3Q6bnVsbCl9Z2V0IGF0dGFjaG1lbnRzKCl7Y29uc3QgZT10aGlzLl9jYXREaWN0LmdldCgiTmFtZXMiKTtsZXQgdD1udWxsO2lmKGUgaW5zdGFuY2VvZiBpLkRpY3QmJmUuaGFzKCJFbWJlZGRlZEZpbGVzIikpe2NvbnN0IHI9bmV3IHMuTmFtZVRyZWUoZS5nZXRSYXcoIkVtYmVkZGVkRmlsZXMiKSx0aGlzLnhyZWYpO2Zvcihjb25zdFtlLG5db2Ygci5nZXRBbGwoKSl7Y29uc3Qgcj1uZXcgaC5GaWxlU3BlYyhuLHRoaXMueHJlZik7dHx8KHQ9T2JqZWN0LmNyZWF0ZShudWxsKSksdFsoMCxhLnN0cmluZ1RvUERGU3RyaW5nKShlKV09ci5zZXJpYWxpemFibGV9fXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJhdHRhY2htZW50cyIsdCl9Z2V0IHhmYUltYWdlcygpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXQoIk5hbWVzIik7bGV0IHQ9bnVsbDtpZihlIGluc3RhbmNlb2YgaS5EaWN0JiZlLmhhcygiWEZBSW1hZ2VzIikpe2NvbnN0IHI9bmV3IHMuTmFtZVRyZWUoZS5nZXRSYXcoIlhGQUltYWdlcyIpLHRoaXMueHJlZik7Zm9yKGNvbnN0W2Usbl1vZiByLmdldEFsbCgpKXR8fCh0PW5ldyBpLkRpY3QodGhpcy54cmVmKSksdC5zZXQoKDAsYS5zdHJpbmdUb1BERlN0cmluZykoZSksbil9cmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsInhmYUltYWdlcyIsdCl9X2NvbGxlY3RKYXZhU2NyaXB0KCl7Y29uc3QgZT10aGlzLl9jYXREaWN0LmdldCgiTmFtZXMiKTtsZXQgdD1udWxsO2Z1bmN0aW9uIHIoZSxyKXtpZighKHIgaW5zdGFuY2VvZiBpLkRpY3QpKXJldHVybjtpZighKDAsaS5pc05hbWUpKHIuZ2V0KCJTIiksIkphdmFTY3JpcHQiKSlyZXR1cm47bGV0IG49ci5nZXQoIkpTIik7aWYobiBpbnN0YW5jZW9mIG8uQmFzZVN0cmVhbSluPW4uZ2V0U3RyaW5nKCk7ZWxzZSBpZigic3RyaW5nIiE9dHlwZW9mIG4pcmV0dXJuO249KDAsYS5zdHJpbmdUb1BERlN0cmluZykobikucmVwbGFjZUFsbCgiXDAiLCIiKSwodHx8KHQ9bmV3IE1hcCkpLnNldChlLG4pfWlmKGUgaW5zdGFuY2VvZiBpLkRpY3QmJmUuaGFzKCJKYXZhU2NyaXB0Iikpe2NvbnN0IHQ9bmV3IHMuTmFtZVRyZWUoZS5nZXRSYXcoIkphdmFTY3JpcHQiKSx0aGlzLnhyZWYpO2Zvcihjb25zdFtlLG5db2YgdC5nZXRBbGwoKSlyKCgwLGEuc3RyaW5nVG9QREZTdHJpbmcpKGUpLG4pfWNvbnN0IG49dGhpcy5fY2F0RGljdC5nZXQoIk9wZW5BY3Rpb24iKTtyZXR1cm4gbiYmcigiT3BlbkFjdGlvbiIsbiksdH1nZXQgamF2YVNjcmlwdCgpe2NvbnN0IGU9dGhpcy5fY29sbGVjdEphdmFTY3JpcHQoKTtyZXR1cm4oMCxhLnNoYWRvdykodGhpcywiamF2YVNjcmlwdCIsZT9bLi4uZS52YWx1ZXMoKV06bnVsbCl9Z2V0IGpzQWN0aW9ucygpe2NvbnN0IGU9dGhpcy5fY29sbGVjdEphdmFTY3JpcHQoKTtsZXQgdD0oMCxuLmNvbGxlY3RBY3Rpb25zKSh0aGlzLnhyZWYsdGhpcy5fY2F0RGljdCxhLkRvY3VtZW50QWN0aW9uRXZlbnRUeXBlKTtpZihlKXt0fHwodD1PYmplY3QuY3JlYXRlKG51bGwpKTtmb3IoY29uc3RbcixuXW9mIGUpciBpbiB0P3Rbcl0ucHVzaChuKTp0W3JdPVtuXX1yZXR1cm4oMCxhLnNoYWRvdykodGhpcywianNBY3Rpb25zIix0KX1hc3luYyBmb250RmFsbGJhY2soZSx0KXtjb25zdCByPWF3YWl0IFByb21pc2UuYWxsKHRoaXMuZm9udENhY2hlKTtmb3IoY29uc3QgbiBvZiByKWlmKG4ubG9hZGVkTmFtZT09PWUpcmV0dXJuIHZvaWQgbi5mYWxsYmFjayh0KX1hc3luYyBjbGVhbnVwKCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTsoMCxjLmNsZWFyR2xvYmFsQ2FjaGVzKSgpLHRoaXMuZ2xvYmFsSW1hZ2VDYWNoZS5jbGVhcihlKSx0aGlzLnBhZ2VLaWRzQ291bnRDYWNoZS5jbGVhcigpLHRoaXMucGFnZUluZGV4Q2FjaGUuY2xlYXIoKSx0aGlzLm5vbkJsZW5kTW9kZXNTZXQuY2xlYXIoKTtjb25zdCB0PWF3YWl0IFByb21pc2UuYWxsKHRoaXMuZm9udENhY2hlKTtmb3IoY29uc3R7ZGljdDplfW9mIHQpZGVsZXRlIGUuY2FjaGVLZXk7dGhpcy5mb250Q2FjaGUuY2xlYXIoKSx0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUuY2xlYXIoKSx0aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZS5jbGVhcigpLHRoaXMuc3lzdGVtRm9udENhY2hlLmNsZWFyKCl9YXN5bmMgZ2V0UGFnZURpY3QoZSl7Y29uc3QgdD1bdGhpcy50b3BsZXZlbFBhZ2VzRGljdF0scj1uZXcgaS5SZWZTZXQsbj10aGlzLl9jYXREaWN0LmdldFJhdygiUGFnZXMiKTtuIGluc3RhbmNlb2YgaS5SZWYmJnIucHV0KG4pO2NvbnN0IHM9dGhpcy54cmVmLG89dGhpcy5wYWdlS2lkc0NvdW50Q2FjaGUsYz10aGlzLnBhZ2VJbmRleENhY2hlO2xldCBsPTA7Zm9yKDt0Lmxlbmd0aDspe2NvbnN0IG49dC5wb3AoKTtpZihuIGluc3RhbmNlb2YgaS5SZWYpe2NvbnN0IGg9by5nZXQobik7aWYoaD49MCYmbCtoPD1lKXtsKz1oO2NvbnRpbnVlfWlmKHIuaGFzKG4pKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJQYWdlcyB0cmVlIGNvbnRhaW5zIGNpcmN1bGFyIHJlZmVyZW5jZS4iKTtyLnB1dChuKTtjb25zdCB1PWF3YWl0IHMuZmV0Y2hBc3luYyhuKTtpZih1IGluc3RhbmNlb2YgaS5EaWN0KXtsZXQgdD11LmdldFJhdygiVHlwZSIpO2lmKHQgaW5zdGFuY2VvZiBpLlJlZiYmKHQ9YXdhaXQgcy5mZXRjaEFzeW5jKHQpKSwoMCxpLmlzTmFtZSkodCwiUGFnZSIpfHwhdS5oYXMoIktpZHMiKSl7aWYoby5oYXMobil8fG8ucHV0KG4sMSksYy5oYXMobil8fGMucHV0KG4sbCksbD09PWUpcmV0dXJuW3Usbl07bCsrO2NvbnRpbnVlfX10LnB1c2godSk7Y29udGludWV9aWYoIShuIGluc3RhbmNlb2YgaS5EaWN0KSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiUGFnZSBkaWN0aW9uYXJ5IGtpZCByZWZlcmVuY2UgcG9pbnRzIHRvIHdyb25nIHR5cGUgb2Ygb2JqZWN0LiIpO2NvbnN0e29iaklkOmh9PW47bGV0IHU9bi5nZXRSYXcoIkNvdW50Iik7aWYodSBpbnN0YW5jZW9mIGkuUmVmJiYodT1hd2FpdCBzLmZldGNoQXN5bmModSkpLE51bWJlci5pc0ludGVnZXIodSkmJnU+PTAmJihoJiYhby5oYXMoaCkmJm8ucHV0KGgsdSksbCt1PD1lKSl7bCs9dTtjb250aW51ZX1sZXQgZD1uLmdldFJhdygiS2lkcyIpO2lmKGQgaW5zdGFuY2VvZiBpLlJlZiYmKGQ9YXdhaXQgcy5mZXRjaEFzeW5jKGQpKSwhQXJyYXkuaXNBcnJheShkKSl7bGV0IHQ9bi5nZXRSYXcoIlR5cGUiKTtpZih0IGluc3RhbmNlb2YgaS5SZWYmJih0PWF3YWl0IHMuZmV0Y2hBc3luYyh0KSksKDAsaS5pc05hbWUpKHQsIlBhZ2UiKXx8IW4uaGFzKCJLaWRzIikpe2lmKGw9PT1lKXJldHVybltuLG51bGxdO2wrKztjb250aW51ZX10aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiUGFnZSBkaWN0aW9uYXJ5IGtpZHMgb2JqZWN0IGlzIG5vdCBhbiBhcnJheS4iKX1mb3IobGV0IGU9ZC5sZW5ndGgtMTtlPj0wO2UtLSl0LnB1c2goZFtlXSl9dGhyb3cgbmV3IEVycm9yKCJQYWdlIGluZGV4ICIuY29uY2F0KGUsIiBub3QgZm91bmQuIikpfWFzeW5jIGdldEFsbFBhZ2VEaWN0cygpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07Y29uc3R7aWdub3JlRXJyb3JzOnR9PXRoaXMucGRmTWFuYWdlci5ldmFsdWF0b3JPcHRpb25zLHI9W3tjdXJyZW50Tm9kZTp0aGlzLnRvcGxldmVsUGFnZXNEaWN0LHBvc0luS2lkczowfV0scz1uZXcgaS5SZWZTZXQsbz10aGlzLl9jYXREaWN0LmdldFJhdygiUGFnZXMiKTtvIGluc3RhbmNlb2YgaS5SZWYmJnMucHV0KG8pO2NvbnN0IGM9bmV3IE1hcCxsPXRoaXMueHJlZixoPXRoaXMucGFnZUluZGV4Q2FjaGU7bGV0IHU9MDtmdW5jdGlvbiBkKGUsdCl7dCYmIWguaGFzKHQpJiZoLnB1dCh0LHUpLGMuc2V0KHUrKyxbZSx0XSl9ZnVuY3Rpb24gZihyKXtpZihyIGluc3RhbmNlb2Ygbi5YUmVmRW50cnlFeGNlcHRpb24mJiFlKXRocm93IHI7ZSYmdCYmMD09PXUmJigoMCxhLndhcm4pKCdnZXRBbGxQYWdlRGljdHMgLSBTa2lwcGluZyBpbnZhbGlkIGZpcnN0IHBhZ2U6ICInLmNvbmNhdChyLCciLicpKSxyPWkuRGljdC5lbXB0eSksYy5zZXQodSsrLFtyLG51bGxdKX1mb3IoO3IubGVuZ3RoPjA7KXtjb25zdCB0PXIuYXQoLTEpLHtjdXJyZW50Tm9kZTpuLHBvc0luS2lkczpvfT10O2xldCBjPW4uZ2V0UmF3KCJLaWRzIik7aWYoYyBpbnN0YW5jZW9mIGkuUmVmKXRyeXtjPWF3YWl0IGwuZmV0Y2hBc3luYyhjKX1jYXRjaChlKXtmKGUpO2JyZWFrfWlmKCFBcnJheS5pc0FycmF5KGMpKXtmKG5ldyBhLkZvcm1hdEVycm9yKCJQYWdlIGRpY3Rpb25hcnkga2lkcyBvYmplY3QgaXMgbm90IGFuIGFycmF5LiIpKTticmVha31pZihvPj1jLmxlbmd0aCl7ci5wb3AoKTtjb250aW51ZX1jb25zdCBoPWNbb107bGV0IHU7aWYoaCBpbnN0YW5jZW9mIGkuUmVmKXtpZihzLmhhcyhoKSl7ZihuZXcgYS5Gb3JtYXRFcnJvcigiUGFnZXMgdHJlZSBjb250YWlucyBjaXJjdWxhciByZWZlcmVuY2UuIikpO2JyZWFrfXMucHV0KGgpO3RyeXt1PWF3YWl0IGwuZmV0Y2hBc3luYyhoKX1jYXRjaChlKXtmKGUpO2JyZWFrfX1lbHNlIHU9aDtpZighKHUgaW5zdGFuY2VvZiBpLkRpY3QpKXtmKG5ldyBhLkZvcm1hdEVycm9yKCJQYWdlIGRpY3Rpb25hcnkga2lkIHJlZmVyZW5jZSBwb2ludHMgdG8gd3JvbmcgdHlwZSBvZiBvYmplY3QuIikpO2JyZWFrfWxldCBnPXUuZ2V0UmF3KCJUeXBlIik7aWYoZyBpbnN0YW5jZW9mIGkuUmVmKXRyeXtnPWF3YWl0IGwuZmV0Y2hBc3luYyhnKX1jYXRjaChlKXtmKGUpO2JyZWFrfSgwLGkuaXNOYW1lKShnLCJQYWdlIil8fCF1LmhhcygiS2lkcyIpP2QodSxoIGluc3RhbmNlb2YgaS5SZWY/aDpudWxsKTpyLnB1c2goe2N1cnJlbnROb2RlOnUscG9zSW5LaWRzOjB9KSx0LnBvc0luS2lkcysrfXJldHVybiBjfWdldFBhZ2VJbmRleChlKXtjb25zdCB0PXRoaXMucGFnZUluZGV4Q2FjaGUuZ2V0KGUpO2lmKHZvaWQgMCE9PXQpcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0KTtjb25zdCByPXRoaXMueHJlZjtsZXQgbj0wO2NvbnN0IHM9dD0+ZnVuY3Rpb24odCl7bGV0IG4scz0wO3JldHVybiByLmZldGNoQXN5bmModCkudGhlbigoZnVuY3Rpb24ocil7aWYoKDAsaS5pc1JlZnNFcXVhbCkodCxlKSYmISgwLGkuaXNEaWN0KShyLCJQYWdlIikmJiEociBpbnN0YW5jZW9mIGkuRGljdCYmIXIuaGFzKCJUeXBlIikmJnIuaGFzKCJDb250ZW50cyIpKSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiVGhlIHJlZmVyZW5jZSBkb2VzIG5vdCBwb2ludCB0byBhIC9QYWdlIGRpY3Rpb25hcnkuIik7aWYoIXIpcmV0dXJuIG51bGw7aWYoIShyIGluc3RhbmNlb2YgaS5EaWN0KSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiTm9kZSBtdXN0IGJlIGEgZGljdGlvbmFyeS4iKTtyZXR1cm4gbj1yLmdldFJhdygiUGFyZW50Iiksci5nZXRBc3luYygiUGFyZW50Iil9KSkudGhlbigoZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuIG51bGw7aWYoIShlIGluc3RhbmNlb2YgaS5EaWN0KSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiUGFyZW50IG11c3QgYmUgYSBkaWN0aW9uYXJ5LiIpO3JldHVybiBlLmdldEFzeW5jKCJLaWRzIil9KSkudGhlbigoZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuIG51bGw7Y29uc3Qgbz1bXTtsZXQgYz0hMTtmb3IoY29uc3QgbiBvZiBlKXtpZighKG4gaW5zdGFuY2VvZiBpLlJlZikpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIktpZCBtdXN0IGJlIGEgcmVmZXJlbmNlLiIpO2lmKCgwLGkuaXNSZWZzRXF1YWwpKG4sdCkpe2M9ITA7YnJlYWt9by5wdXNoKHIuZmV0Y2hBc3luYyhuKS50aGVuKChmdW5jdGlvbihlKXtpZighKGUgaW5zdGFuY2VvZiBpLkRpY3QpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJLaWQgbm9kZSBtdXN0IGJlIGEgZGljdGlvbmFyeS4iKTtlLmhhcygiQ291bnQiKT9zKz1lLmdldCgiQ291bnQiKTpzKyt9KSkpfWlmKCFjKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJLaWQgcmVmZXJlbmNlIG5vdCBmb3VuZCBpbiBwYXJlbnQncyBraWRzLiIpO3JldHVybiBQcm9taXNlLmFsbChvKS50aGVuKChmdW5jdGlvbigpe3JldHVybltzLG5dfSkpfSkpfSh0KS50aGVuKCh0PT57aWYoIXQpcmV0dXJuIHRoaXMucGFnZUluZGV4Q2FjaGUucHV0KGUsbiksbjtjb25zdFtyLGFdPXQ7cmV0dXJuIG4rPXIscyhhKX0pKTtyZXR1cm4gcyhlKX1nZXQgYmFzZVVybCgpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXQoIlVSSSIpO2lmKGUgaW5zdGFuY2VvZiBpLkRpY3Qpe2NvbnN0IHQ9ZS5nZXQoIkJhc2UiKTtpZigic3RyaW5nIj09dHlwZW9mIHQpe2NvbnN0IGU9KDAsYS5jcmVhdGVWYWxpZEFic29sdXRlVXJsKSh0LG51bGwse3RyeUNvbnZlcnRFbmNvZGluZzohMH0pO2lmKGUpcmV0dXJuKDAsYS5zaGFkb3cpKHRoaXMsImJhc2VVcmwiLGUuaHJlZil9fXJldHVybigwLGEuc2hhZG93KSh0aGlzLCJiYXNlVXJsIixudWxsKX1zdGF0aWMgcGFyc2VEZXN0RGljdGlvbmFyeShlKXtjb25zdCB0PWUuZGVzdERpY3Q7aWYoISh0IGluc3RhbmNlb2YgaS5EaWN0KSlyZXR1cm4gdm9pZCgwLGEud2FybikoInBhcnNlRGVzdERpY3Rpb25hcnk6IGBkZXN0RGljdGAgbXVzdCBiZSBhIGRpY3Rpb25hcnkuIik7Y29uc3Qgcj1lLnJlc3VsdE9iajtpZigib2JqZWN0IiE9dHlwZW9mIHIpcmV0dXJuIHZvaWQoMCxhLndhcm4pKCJwYXJzZURlc3REaWN0aW9uYXJ5OiBgcmVzdWx0T2JqYCBtdXN0IGJlIGFuIG9iamVjdC4iKTtjb25zdCBzPWUuZG9jQmFzZVVybHx8bnVsbCxjPWUuZG9jQXR0YWNobWVudHN8fG51bGw7bGV0IGwsaCx1PXQuZ2V0KCJBIik7aWYodSBpbnN0YW5jZW9mIGkuRGljdHx8KHQuaGFzKCJEZXN0Iik/dT10LmdldCgiRGVzdCIpOih1PXQuZ2V0KCJBQSIpLHUgaW5zdGFuY2VvZiBpLkRpY3QmJih1LmhhcygiRCIpP3U9dS5nZXQoIkQiKTp1LmhhcygiVSIpJiYodT11LmdldCgiVSIpKSkpKSx1IGluc3RhbmNlb2YgaS5EaWN0KXtjb25zdCBlPXUuZ2V0KCJTIik7aWYoIShlIGluc3RhbmNlb2YgaS5OYW1lKSlyZXR1cm4gdm9pZCgwLGEud2FybikoInBhcnNlRGVzdERpY3Rpb25hcnk6IEludmFsaWQgdHlwZSBpbiBBY3Rpb24gZGljdGlvbmFyeS4iKTtjb25zdCB0PWUubmFtZTtzd2l0Y2godCl7Y2FzZSJSZXNldEZvcm0iOmNvbnN0IGU9dS5nZXQoIkZsYWdzIikscz0wPT0oMSYoIm51bWJlciI9PXR5cGVvZiBlP2U6MCkpLGQ9W10sZj1bXTtmb3IoY29uc3QgZSBvZiB1LmdldCgiRmllbGRzIil8fFtdKWUgaW5zdGFuY2VvZiBpLlJlZj9mLnB1c2goZS50b1N0cmluZygpKToic3RyaW5nIj09dHlwZW9mIGUmJmQucHVzaCgoMCxhLnN0cmluZ1RvUERGU3RyaW5nKShlKSk7ci5yZXNldEZvcm09e2ZpZWxkczpkLHJlZnM6ZixpbmNsdWRlOnN9O2JyZWFrO2Nhc2UiVVJJIjpsPXUuZ2V0KCJVUkkiKSxsIGluc3RhbmNlb2YgaS5OYW1lJiYobD0iLyIrbC5uYW1lKTticmVhaztjYXNlIkdvVG8iOmg9dS5nZXQoIkQiKTticmVhaztjYXNlIkxhdW5jaCI6Y2FzZSJHb1RvUiI6Y29uc3QgZz11LmdldCgiRiIpO2cgaW5zdGFuY2VvZiBpLkRpY3Q/bD1nLmdldCgiRiIpfHxudWxsOiJzdHJpbmciPT10eXBlb2YgZyYmKGw9Zyk7bGV0IHA9dS5nZXQoIkQiKTtpZihwJiYocCBpbnN0YW5jZW9mIGkuTmFtZSYmKHA9cC5uYW1lKSwic3RyaW5nIj09dHlwZW9mIGwpKXtjb25zdCBlPWwuc3BsaXQoIiMiKVswXTsic3RyaW5nIj09dHlwZW9mIHA/bD1lKyIjIitwOkFycmF5LmlzQXJyYXkocCkmJihsPWUrIiMiK0pTT04uc3RyaW5naWZ5KHApKX1jb25zdCBtPXUuZ2V0KCJOZXdXaW5kb3ciKTsiYm9vbGVhbiI9PXR5cGVvZiBtJiYoci5uZXdXaW5kb3c9bSk7YnJlYWs7Y2FzZSJHb1RvRSI6Y29uc3QgYj11LmdldCgiVCIpO2xldCB5O2lmKGMmJmIgaW5zdGFuY2VvZiBpLkRpY3Qpe2NvbnN0IGU9Yi5nZXQoIlIiKSx0PWIuZ2V0KCJOIik7KDAsaS5pc05hbWUpKGUsIkMiKSYmInN0cmluZyI9PXR5cGVvZiB0JiYoeT1jWygwLGEuc3RyaW5nVG9QREZTdHJpbmcpKHQpXSl9eT9yLmF0dGFjaG1lbnQ9eTooMCxhLndhcm4pKCdwYXJzZURlc3REaWN0aW9uYXJ5IC0gdW5pbXBsZW1lbnRlZCAiR29Ub0UiIGFjdGlvbi4nKTticmVhaztjYXNlIk5hbWVkIjpjb25zdCB3PXUuZ2V0KCJOIik7dyBpbnN0YW5jZW9mIGkuTmFtZSYmKHIuYWN0aW9uPXcubmFtZSk7YnJlYWs7Y2FzZSJTZXRPQ0dTdGF0ZSI6Y29uc3Qgdj11LmdldCgiU3RhdGUiKSx4PXUuZ2V0KCJQcmVzZXJ2ZVJCIik7aWYoIUFycmF5LmlzQXJyYXkodil8fDA9PT12Lmxlbmd0aClicmVhaztjb25zdCBTPVtdO2Zvcihjb25zdCBlIG9mIHYpaWYoZSBpbnN0YW5jZW9mIGkuTmFtZSlzd2l0Y2goZS5uYW1lKXtjYXNlIk9OIjpjYXNlIk9GRiI6Y2FzZSJUb2dnbGUiOlMucHVzaChlLm5hbWUpfWVsc2UgZSBpbnN0YW5jZW9mIGkuUmVmJiZTLnB1c2goZS50b1N0cmluZygpKTtpZihTLmxlbmd0aCE9PXYubGVuZ3RoKWJyZWFrO3Iuc2V0T0NHU3RhdGU9e3N0YXRlOlMscHJlc2VydmVSQjoiYm9vbGVhbiIhPXR5cGVvZiB4fHx4fTticmVhaztjYXNlIkphdmFTY3JpcHQiOmNvbnN0IEE9dS5nZXQoIkpTIik7bGV0IGs7QSBpbnN0YW5jZW9mIG8uQmFzZVN0cmVhbT9rPUEuZ2V0U3RyaW5nKCk6InN0cmluZyI9PXR5cGVvZiBBJiYoaz1BKTtjb25zdCBDPWsmJigwLG4ucmVjb3ZlckpzVVJMKSgoMCxhLnN0cmluZ1RvUERGU3RyaW5nKShrKSk7aWYoQyl7bD1DLnVybCxyLm5ld1dpbmRvdz1DLm5ld1dpbmRvdzticmVha31kZWZhdWx0OmlmKCJKYXZhU2NyaXB0Ij09PXR8fCJTdWJtaXRGb3JtIj09PXQpYnJlYWs7KDAsYS53YXJuKSgncGFyc2VEZXN0RGljdGlvbmFyeSAtIHVuc3VwcG9ydGVkIGFjdGlvbjogIicuY29uY2F0KHQsJyIuJykpfX1lbHNlIHQuaGFzKCJEZXN0IikmJihoPXQuZ2V0KCJEZXN0IikpO2lmKCJzdHJpbmciPT10eXBlb2YgbCl7Y29uc3QgZT0oMCxhLmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwpKGwscyx7YWRkRGVmYXVsdFByb3RvY29sOiEwLHRyeUNvbnZlcnRFbmNvZGluZzohMH0pO2UmJihyLnVybD1lLmhyZWYpLHIudW5zYWZlVXJsPWx9aCYmKGggaW5zdGFuY2VvZiBpLk5hbWUmJihoPWgubmFtZSksInN0cmluZyI9PXR5cGVvZiBoP3IuZGVzdD0oMCxhLnN0cmluZ1RvUERGU3RyaW5nKShoKTpBcnJheS5pc0FycmF5KGgpJiYoci5kZXN0PWgpKX19dC5DYXRhbG9nPXB9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5OdW1iZXJUcmVlPXQuTmFtZVRyZWU9dm9pZCAwLHIoMTM5KTt2YXIgbj1yKDE1MCksYT1yKDE0NCk7Y2xhc3MgaXtjb25zdHJ1Y3RvcihlLHQscil7dGhpcy5jb25zdHJ1Y3Rvcj09PWkmJigwLGEudW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBOYW1lT3JOdW1iZXJUcmVlLiIpLHRoaXMucm9vdD1lLHRoaXMueHJlZj10LHRoaXMuX3R5cGU9cn1nZXRBbGwoKXtjb25zdCBlPW5ldyBNYXA7aWYoIXRoaXMucm9vdClyZXR1cm4gZTtjb25zdCB0PXRoaXMueHJlZixyPW5ldyBuLlJlZlNldDtyLnB1dCh0aGlzLnJvb3QpO2NvbnN0IGk9W3RoaXMucm9vdF07Zm9yKDtpLmxlbmd0aD4wOyl7Y29uc3Qgcz10LmZldGNoSWZSZWYoaS5zaGlmdCgpKTtpZighKHMgaW5zdGFuY2VvZiBuLkRpY3QpKWNvbnRpbnVlO2lmKHMuaGFzKCJLaWRzIikpe2NvbnN0IGU9cy5nZXQoIktpZHMiKTtpZighQXJyYXkuaXNBcnJheShlKSljb250aW51ZTtmb3IoY29uc3QgdCBvZiBlKXtpZihyLmhhcyh0KSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcignRHVwbGljYXRlIGVudHJ5IGluICInLmNvbmNhdCh0aGlzLl90eXBlLCciIHRyZWUuJykpO2kucHVzaCh0KSxyLnB1dCh0KX1jb250aW51ZX1jb25zdCBvPXMuZ2V0KHRoaXMuX3R5cGUpO2lmKEFycmF5LmlzQXJyYXkobykpZm9yKGxldCByPTAsbj1vLmxlbmd0aDtyPG47cis9MillLnNldCh0LmZldGNoSWZSZWYob1tyXSksdC5mZXRjaElmUmVmKG9bcisxXSkpfXJldHVybiBlfWdldChlKXtpZighdGhpcy5yb290KXJldHVybiBudWxsO2NvbnN0IHQ9dGhpcy54cmVmO2xldCByPXQuZmV0Y2hJZlJlZih0aGlzLnJvb3QpLG49MDtmb3IoO3IuaGFzKCJLaWRzIik7KXtpZigrK24+MTApcmV0dXJuKDAsYS53YXJuKSgnU2VhcmNoIGRlcHRoIGxpbWl0IHJlYWNoZWQgZm9yICInLmNvbmNhdCh0aGlzLl90eXBlLCciIHRyZWUuJykpLG51bGw7Y29uc3QgaT1yLmdldCgiS2lkcyIpO2lmKCFBcnJheS5pc0FycmF5KGkpKXJldHVybiBudWxsO2xldCBzPTAsbz1pLmxlbmd0aC0xO2Zvcig7czw9bzspe2NvbnN0IG49cytvPj4xLGE9dC5mZXRjaElmUmVmKGlbbl0pLGM9YS5nZXQoIkxpbWl0cyIpO2lmKGU8dC5mZXRjaElmUmVmKGNbMF0pKW89bi0xO2Vsc2V7aWYoIShlPnQuZmV0Y2hJZlJlZihjWzFdKSkpe3I9YTticmVha31zPW4rMX19aWYocz5vKXJldHVybiBudWxsfWNvbnN0IGk9ci5nZXQodGhpcy5fdHlwZSk7aWYoQXJyYXkuaXNBcnJheShpKSl7bGV0IHI9MCxuPWkubGVuZ3RoLTI7Zm9yKDtyPD1uOyl7Y29uc3QgYT1yK24+PjEscz1hKygxJmEpLG89dC5mZXRjaElmUmVmKGlbc10pO2lmKGU8byluPXMtMjtlbHNle2lmKCEoZT5vKSlyZXR1cm4gdC5mZXRjaElmUmVmKGlbcysxXSk7cj1zKzJ9fX1yZXR1cm4gbnVsbH19dC5OYW1lVHJlZT1jbGFzcyBleHRlbmRzIGl7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlLHQsIk5hbWVzIil9fSx0Lk51bWJlclRyZWU9Y2xhc3MgZXh0ZW5kcyBpe2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSx0LCJOdW1zIil9fX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmNsZWFyR2xvYmFsQ2FjaGVzPWZ1bmN0aW9uKCl7KDAsbi5jbGVhclByaW1pdGl2ZUNhY2hlcykoKSwoMCxhLmNsZWFyVW5pY29kZUNhY2hlcykoKX07dmFyIG49cigxNTApLGE9cigxOTApfSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuRmlsZVNwZWM9dm9pZCAwO3ZhciBuPXIoMTQ0KSxhPXIoMTUxKSxpPXIoMTUwKTtmdW5jdGlvbiBzKGUpe3JldHVybiBlLmhhcygiVUYiKT9lLmdldCgiVUYiKTplLmhhcygiRiIpP2UuZ2V0KCJGIik6ZS5oYXMoIlVuaXgiKT9lLmdldCgiVW5peCIpOmUuaGFzKCJNYWMiKT9lLmdldCgiTWFjIik6ZS5oYXMoIkRPUyIpP2UuZ2V0KCJET1MiKTpudWxsfXQuRmlsZVNwZWM9Y2xhc3N7Y29uc3RydWN0b3IoZSx0KXtlIGluc3RhbmNlb2YgaS5EaWN0JiYodGhpcy54cmVmPXQsdGhpcy5yb290PWUsZS5oYXMoIkZTIikmJih0aGlzLmZzPWUuZ2V0KCJGUyIpKSx0aGlzLmRlc2NyaXB0aW9uPWUuaGFzKCJEZXNjIik/KDAsbi5zdHJpbmdUb1BERlN0cmluZykoZS5nZXQoIkRlc2MiKSk6IiIsZS5oYXMoIlJGIikmJigwLG4ud2FybikoIlJlbGF0ZWQgZmlsZSBzcGVjaWZpY2F0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCIpLHRoaXMuY29udGVudEF2YWlsYWJsZT0hMCxlLmhhcygiRUYiKXx8KHRoaXMuY29udGVudEF2YWlsYWJsZT0hMSwoMCxuLndhcm4pKCJOb24tZW1iZWRkZWQgZmlsZSBzcGVjaWZpY2F0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCIpKSl9Z2V0IGZpbGVuYW1lKCl7aWYoIXRoaXMuX2ZpbGVuYW1lJiZ0aGlzLnJvb3Qpe2NvbnN0IGU9cyh0aGlzLnJvb3QpfHwidW5uYW1lZCI7dGhpcy5fZmlsZW5hbWU9KDAsbi5zdHJpbmdUb1BERlN0cmluZykoZSkucmVwbGFjZUFsbCgiXFxcXCIsIlxcIikucmVwbGFjZUFsbCgiXFwvIiwiLyIpLnJlcGxhY2VBbGwoIlxcIiwiLyIpfXJldHVybiB0aGlzLl9maWxlbmFtZX1nZXQgY29udGVudCgpe2lmKCF0aGlzLmNvbnRlbnRBdmFpbGFibGUpcmV0dXJuIG51bGw7IXRoaXMuY29udGVudFJlZiYmdGhpcy5yb290JiYodGhpcy5jb250ZW50UmVmPXModGhpcy5yb290LmdldCgiRUYiKSkpO2xldCBlPW51bGw7aWYodGhpcy5jb250ZW50UmVmKXtjb25zdCB0PXRoaXMueHJlZi5mZXRjaElmUmVmKHRoaXMuY29udGVudFJlZik7dCBpbnN0YW5jZW9mIGEuQmFzZVN0cmVhbT9lPXQuZ2V0Qnl0ZXMoKTooMCxuLndhcm4pKCJFbWJlZGRlZCBmaWxlIHNwZWNpZmljYXRpb24gcG9pbnRzIHRvIG5vbi1leGlzdGluZy9pbnZhbGlkIGNvbnRlbnQiKX1lbHNlKDAsbi53YXJuKSgiRW1iZWRkZWQgZmlsZSBzcGVjaWZpY2F0aW9uIGRvZXMgbm90IGhhdmUgYSBjb250ZW50Iik7cmV0dXJuIGV9Z2V0IHNlcmlhbGl6YWJsZSgpe3JldHVybntmaWxlbmFtZTp0aGlzLmZpbGVuYW1lLGNvbnRlbnQ6dGhpcy5jb250ZW50fX19fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTWV0YWRhdGFQYXJzZXI9dm9pZCAwLHIoMikscigxMzkpO3ZhciBuPXIoMjE3KTt0Lk1ldGFkYXRhUGFyc2VyPWNsYXNze2NvbnN0cnVjdG9yKGUpe2U9dGhpcy5fcmVwYWlyKGUpO2NvbnN0IHQ9bmV3IG4uU2ltcGxlWE1MUGFyc2VyKHtsb3dlckNhc2VOYW1lOiEwfSkucGFyc2VGcm9tU3RyaW5nKGUpO3RoaXMuX21ldGFkYXRhTWFwPW5ldyBNYXAsdGhpcy5fZGF0YT1lLHQmJnRoaXMuX3BhcnNlKHQpfV9yZXBhaXIoZSl7cmV0dXJuIGUucmVwbGFjZSgvXltePF0rLywiIikucmVwbGFjZUFsbCgvPlxcMzc2XFwzNzcoW148XSspL2csKGZ1bmN0aW9uKGUsdCl7Y29uc3Qgcj10LnJlcGxhY2VBbGwoL1xcKFswLTNdKShbMC03XSkoWzAtN10pL2csKGZ1bmN0aW9uKGUsdCxyLG4pe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKDY0KnQrOCpyKzEqbil9KSkucmVwbGFjZUFsbCgvJihhbXB8YXBvc3xndHxsdHxxdW90KTsvZywoZnVuY3Rpb24oZSx0KXtzd2l0Y2godCl7Y2FzZSJhbXAiOnJldHVybiImIjtjYXNlImFwb3MiOnJldHVybiInIjtjYXNlImd0IjpyZXR1cm4iPiI7Y2FzZSJsdCI6cmV0dXJuIjwiO2Nhc2UicXVvdCI6cmV0dXJuJyInfXRocm93IG5ldyBFcnJvcigiX3JlcGFpcjogIi5jb25jYXQodCwiIGlzbid0IGRlZmluZWQuIikpfSkpLG49WyI+Il07Zm9yKGxldCBlPTAsdD1yLmxlbmd0aDtlPHQ7ZSs9Mil7Y29uc3QgdD0yNTYqci5jaGFyQ29kZUF0KGUpK3IuY2hhckNvZGVBdChlKzEpO3Q+PTMyJiZ0PDEyNyYmNjAhPT10JiY2MiE9PXQmJjM4IT09dD9uLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSh0KSk6bi5wdXNoKCImI3giKyg2NTUzNit0KS50b1N0cmluZygxNikuc3Vic3RyaW5nKDEpKyI7Iil9cmV0dXJuIG4uam9pbigiIil9KSl9X2dldFNlcXVlbmNlKGUpe2NvbnN0IHQ9ZS5ub2RlTmFtZTtyZXR1cm4icmRmOmJhZyIhPT10JiYicmRmOnNlcSIhPT10JiYicmRmOmFsdCIhPT10P251bGw6ZS5jaGlsZE5vZGVzLmZpbHRlcigoZT0+InJkZjpsaSI9PT1lLm5vZGVOYW1lKSl9X3BhcnNlQXJyYXkoZSl7aWYoIWUuaGFzQ2hpbGROb2RlcygpKXJldHVybjtjb25zdFt0XT1lLmNoaWxkTm9kZXMscj10aGlzLl9nZXRTZXF1ZW5jZSh0KXx8W107dGhpcy5fbWV0YWRhdGFNYXAuc2V0KGUubm9kZU5hbWUsci5tYXAoKGU9PmUudGV4dENvbnRlbnQudHJpbSgpKSkpfV9wYXJzZShlKXtsZXQgdD1lLmRvY3VtZW50RWxlbWVudDtpZigicmRmOnJkZiIhPT10Lm5vZGVOYW1lKWZvcih0PXQuZmlyc3RDaGlsZDt0JiYicmRmOnJkZiIhPT10Lm5vZGVOYW1lOyl0PXQubmV4dFNpYmxpbmc7aWYodCYmInJkZjpyZGYiPT09dC5ub2RlTmFtZSYmdC5oYXNDaGlsZE5vZGVzKCkpZm9yKGNvbnN0IGUgb2YgdC5jaGlsZE5vZGVzKWlmKCJyZGY6ZGVzY3JpcHRpb24iPT09ZS5ub2RlTmFtZSlmb3IoY29uc3QgdCBvZiBlLmNoaWxkTm9kZXMpe2NvbnN0IGU9dC5ub2RlTmFtZTtzd2l0Y2goZSl7Y2FzZSIjdGV4dCI6Y29udGludWU7Y2FzZSJkYzpjcmVhdG9yIjpjYXNlImRjOnN1YmplY3QiOnRoaXMuX3BhcnNlQXJyYXkodCk7Y29udGludWV9dGhpcy5fbWV0YWRhdGFNYXAuc2V0KGUsdC50ZXh0Q29udGVudC50cmltKCkpfX1nZXQgc2VyaWFsaXphYmxlKCl7cmV0dXJue3BhcnNlZERhdGE6dGhpcy5fbWV0YWRhdGFNYXAscmF3RGF0YTp0aGlzLl9kYXRhfX19fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuU3RydWN0VHJlZVJvb3Q9dC5TdHJ1Y3RUcmVlUGFnZT12b2lkIDAscigxMzkpO3ZhciBuPXIoMTUwKSxhPXIoMTQ0KSxpPXIoMjIxKTtjb25zdCBzPSJQQUdFX0NPTlRFTlQiLG89IlNUUkVBTV9DT05URU5UIixjPSJPQkpFQ1QiLGw9IkVMRU1FTlQiO3QuU3RydWN0VHJlZVJvb3Q9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5kaWN0PWUsdGhpcy5yb2xlTWFwPW5ldyBNYXB9aW5pdCgpe3RoaXMucmVhZFJvbGVNYXAoKX1yZWFkUm9sZU1hcCgpe2NvbnN0IGU9dGhpcy5kaWN0LmdldCgiUm9sZU1hcCIpO2UgaW5zdGFuY2VvZiBuLkRpY3QmJmUuZm9yRWFjaCgoKGUsdCk9Pnt0IGluc3RhbmNlb2Ygbi5OYW1lJiZ0aGlzLnJvbGVNYXAuc2V0KGUsdC5uYW1lKX0pKX19O2NsYXNzIGh7Y29uc3RydWN0b3IoZSx0KXt0aGlzLnRyZWU9ZSx0aGlzLmRpY3Q9dCx0aGlzLmtpZHM9W10sdGhpcy5wYXJzZUtpZHMoKX1nZXQgcm9sZSgpe2NvbnN0IGU9dGhpcy5kaWN0LmdldCgiUyIpLHQ9ZSBpbnN0YW5jZW9mIG4uTmFtZT9lLm5hbWU6IiIse3Jvb3Q6cn09dGhpcy50cmVlO3JldHVybiByLnJvbGVNYXAuaGFzKHQpP3Iucm9sZU1hcC5nZXQodCk6dH1wYXJzZUtpZHMoKXtsZXQgZT1udWxsO2NvbnN0IHQ9dGhpcy5kaWN0LmdldFJhdygiUGciKTt0IGluc3RhbmNlb2Ygbi5SZWYmJihlPXQudG9TdHJpbmcoKSk7Y29uc3Qgcj10aGlzLmRpY3QuZ2V0KCJLIik7aWYoQXJyYXkuaXNBcnJheShyKSlmb3IoY29uc3QgdCBvZiByKXtjb25zdCByPXRoaXMucGFyc2VLaWQoZSx0KTtyJiZ0aGlzLmtpZHMucHVzaChyKX1lbHNle2NvbnN0IHQ9dGhpcy5wYXJzZUtpZChlLHIpO3QmJnRoaXMua2lkcy5wdXNoKHQpfX1wYXJzZUtpZChlLHQpe2lmKE51bWJlci5pc0ludGVnZXIodCkpcmV0dXJuIHRoaXMudHJlZS5wYWdlRGljdC5vYmpJZCE9PWU/bnVsbDpuZXcgdSh7dHlwZTpzLG1jaWQ6dCxwYWdlT2JqSWQ6ZX0pO2xldCByPW51bGw7aWYodCBpbnN0YW5jZW9mIG4uUmVmP3I9dGhpcy5kaWN0LnhyZWYuZmV0Y2godCk6dCBpbnN0YW5jZW9mIG4uRGljdCYmKHI9dCksIXIpcmV0dXJuIG51bGw7Y29uc3QgYT1yLmdldFJhdygiUGciKTthIGluc3RhbmNlb2Ygbi5SZWYmJihlPWEudG9TdHJpbmcoKSk7Y29uc3QgaT1yLmdldCgiVHlwZSIpaW5zdGFuY2VvZiBuLk5hbWU/ci5nZXQoIlR5cGUiKS5uYW1lOm51bGw7cmV0dXJuIk1DUiI9PT1pP3RoaXMudHJlZS5wYWdlRGljdC5vYmpJZCE9PWU/bnVsbDpuZXcgdSh7dHlwZTpvLHJlZk9iaklkOnIuZ2V0UmF3KCJTdG0iKWluc3RhbmNlb2Ygbi5SZWY/ci5nZXRSYXcoIlN0bSIpLnRvU3RyaW5nKCk6bnVsbCxwYWdlT2JqSWQ6ZSxtY2lkOnIuZ2V0KCJNQ0lEIil9KToiT0JKUiI9PT1pP3RoaXMudHJlZS5wYWdlRGljdC5vYmpJZCE9PWU/bnVsbDpuZXcgdSh7dHlwZTpjLHJlZk9iaklkOnIuZ2V0UmF3KCJPYmoiKWluc3RhbmNlb2Ygbi5SZWY/ci5nZXRSYXcoIk9iaiIpLnRvU3RyaW5nKCk6bnVsbCxwYWdlT2JqSWQ6ZX0pOm5ldyB1KHt0eXBlOmwsZGljdDpyfSl9fWNsYXNzIHV7Y29uc3RydWN0b3IoZSl7bGV0e3R5cGU6dCxkaWN0OnI9bnVsbCxtY2lkOm49bnVsbCxwYWdlT2JqSWQ6YT1udWxsLHJlZk9iaklkOmk9bnVsbH09ZTt0aGlzLnR5cGU9dCx0aGlzLmRpY3Q9cix0aGlzLm1jaWQ9bix0aGlzLnBhZ2VPYmpJZD1hLHRoaXMucmVmT2JqSWQ9aSx0aGlzLnBhcmVudE5vZGU9bnVsbH19dC5TdHJ1Y3RUcmVlUGFnZT1jbGFzc3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMucm9vdD1lLHRoaXMucm9vdERpY3Q9ZT9lLmRpY3Q6bnVsbCx0aGlzLnBhZ2VEaWN0PXQsdGhpcy5ub2Rlcz1bXX1wYXJzZSgpe2lmKCF0aGlzLnJvb3R8fCF0aGlzLnJvb3REaWN0KXJldHVybjtjb25zdCBlPXRoaXMucm9vdERpY3QuZ2V0KCJQYXJlbnRUcmVlIik7aWYoIWUpcmV0dXJuO2NvbnN0IHQ9dGhpcy5wYWdlRGljdC5nZXQoIlN0cnVjdFBhcmVudHMiKTtpZighTnVtYmVyLmlzSW50ZWdlcih0KSlyZXR1cm47Y29uc3Qgcj1uZXcgaS5OdW1iZXJUcmVlKGUsdGhpcy5yb290RGljdC54cmVmKS5nZXQodCk7aWYoIUFycmF5LmlzQXJyYXkocikpcmV0dXJuO2NvbnN0IGE9bmV3IE1hcDtmb3IoY29uc3QgZSBvZiByKWUgaW5zdGFuY2VvZiBuLlJlZiYmdGhpcy5hZGROb2RlKHRoaXMucm9vdERpY3QueHJlZi5mZXRjaChlKSxhKX1hZGROb2RlKGUsdCl7bGV0IHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjA7aWYocj40MClyZXR1cm4oMCxhLndhcm4pKCJTdHJ1Y3RUcmVlIE1BWF9ERVBUSCByZWFjaGVkLiIpLG51bGw7aWYodC5oYXMoZSkpcmV0dXJuIHQuZ2V0KGUpO2NvbnN0IGk9bmV3IGgodGhpcyxlKTt0LnNldChlLGkpO2NvbnN0IHM9ZS5nZXQoIlAiKTtpZighc3x8KDAsbi5pc05hbWUpKHMuZ2V0KCJUeXBlIiksIlN0cnVjdFRyZWVSb290IikpcmV0dXJuIHRoaXMuYWRkVG9wTGV2ZWxOb2RlKGUsaSl8fHQuZGVsZXRlKGUpLGk7Y29uc3Qgbz10aGlzLmFkZE5vZGUocyx0LHIrMSk7aWYoIW8pcmV0dXJuIGk7bGV0IGM9ITE7Zm9yKGNvbnN0IHQgb2Ygby5raWRzKXQudHlwZT09PWwmJnQuZGljdD09PWUmJih0LnBhcmVudE5vZGU9aSxjPSEwKTtyZXR1cm4gY3x8dC5kZWxldGUoZSksaX1hZGRUb3BMZXZlbE5vZGUoZSx0KXtjb25zdCByPXRoaXMucm9vdERpY3QuZ2V0KCJLIik7aWYoIXIpcmV0dXJuITE7aWYociBpbnN0YW5jZW9mIG4uRGljdClyZXR1cm4gci5vYmpJZD09PWUub2JqSWQmJih0aGlzLm5vZGVzWzBdPXQsITApO2lmKCFBcnJheS5pc0FycmF5KHIpKXJldHVybiEwO2xldCBhPSExO2ZvcihsZXQgbj0wO248ci5sZW5ndGg7bisrKXtjb25zdCBpPXJbbl07KG51bGw9PWk/dm9pZCAwOmkudG9TdHJpbmcoKSk9PT1lLm9iaklkJiYodGhpcy5ub2Rlc1tuXT10LGE9ITApfXJldHVybiBhfWdldCBzZXJpYWxpemFibGUoKXtmdW5jdGlvbiBlKHQscil7bGV0IG49YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjA7aWYobj40MClyZXR1cm4gdm9pZCgwLGEud2FybikoIlN0cnVjdFRyZWUgdG9vIGRlZXAgdG8gYmUgZnVsbHkgc2VyaWFsaXplZC4iKTtjb25zdCBpPU9iamVjdC5jcmVhdGUobnVsbCk7aS5yb2xlPXQucm9sZSxpLmNoaWxkcmVuPVtdLHIuY2hpbGRyZW4ucHVzaChpKTtjb25zdCBoPXQuZGljdC5nZXQoIkFsdCIpOyJzdHJpbmciPT10eXBlb2YgaCYmKGkuYWx0PSgwLGEuc3RyaW5nVG9QREZTdHJpbmcpKGgpKTtjb25zdCB1PXQuZGljdC5nZXQoIkxhbmciKTsic3RyaW5nIj09dHlwZW9mIHUmJihpLmxhbmc9KDAsYS5zdHJpbmdUb1BERlN0cmluZykodSkpO2Zvcihjb25zdCByIG9mIHQua2lkcyl7Y29uc3QgdD1yLnR5cGU9PT1sP3IucGFyZW50Tm9kZTpudWxsO3Q/ZSh0LGksbisxKTpyLnR5cGU9PT1zfHxyLnR5cGU9PT1vP2kuY2hpbGRyZW4ucHVzaCh7dHlwZToiY29udGVudCIsaWQ6InAiLmNvbmNhdChyLnBhZ2VPYmpJZCwiX21jIikuY29uY2F0KHIubWNpZCl9KTpyLnR5cGU9PT1jJiZpLmNoaWxkcmVuLnB1c2goe3R5cGU6Im9iamVjdCIsaWQ6ci5yZWZPYmpJZH0pfX1jb25zdCB0PU9iamVjdC5jcmVhdGUobnVsbCk7dC5jaGlsZHJlbj1bXSx0LnJvbGU9IlJvb3QiO2Zvcihjb25zdCByIG9mIHRoaXMubm9kZXMpciYmZShyLHQpO3JldHVybiB0fX19LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5PYmplY3RMb2FkZXI9dm9pZCAwLHIoMTM5KTt2YXIgbj1yKDE1MCksYT1yKDE1MSksaT1yKDE0OSkscz1yKDE0NCk7ZnVuY3Rpb24gbyhlLHQpe2lmKGUgaW5zdGFuY2VvZiBuLkRpY3QpZT1lLmdldFJhd1ZhbHVlcygpO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIGEuQmFzZVN0cmVhbSllPWUuZGljdC5nZXRSYXdWYWx1ZXMoKTtlbHNlIGlmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybjtmb3IoY29uc3QgaSBvZiBlKSgocj1pKWluc3RhbmNlb2Ygbi5SZWZ8fHIgaW5zdGFuY2VvZiBuLkRpY3R8fHIgaW5zdGFuY2VvZiBhLkJhc2VTdHJlYW18fEFycmF5LmlzQXJyYXkocikpJiZ0LnB1c2goaSk7dmFyIHJ9dC5PYmplY3RMb2FkZXI9Y2xhc3N7Y29uc3RydWN0b3IoZSx0LHIpe3RoaXMuZGljdD1lLHRoaXMua2V5cz10LHRoaXMueHJlZj1yLHRoaXMucmVmU2V0PW51bGx9YXN5bmMgbG9hZCgpe2lmKHRoaXMueHJlZi5zdHJlYW0uaXNEYXRhTG9hZGVkKXJldHVybjtjb25zdHtrZXlzOmUsZGljdDp0fT10aGlzO3RoaXMucmVmU2V0PW5ldyBuLlJlZlNldDtjb25zdCByPVtdO2Zvcihjb25zdCBuIG9mIGUpe2NvbnN0IGU9dC5nZXRSYXcobik7dm9pZCAwIT09ZSYmci5wdXNoKGUpfXJldHVybiB0aGlzLl93YWxrKHIpfWFzeW5jIF93YWxrKGUpe2NvbnN0IHQ9W10scj1bXTtmb3IoO2UubGVuZ3RoOyl7bGV0IGM9ZS5wb3AoKTtpZihjIGluc3RhbmNlb2Ygbi5SZWYpe2lmKHRoaXMucmVmU2V0LmhhcyhjKSljb250aW51ZTt0cnl7dGhpcy5yZWZTZXQucHV0KGMpLGM9dGhpcy54cmVmLmZldGNoKGMpfWNhdGNoKGUpe2lmKCEoZSBpbnN0YW5jZW9mIGkuTWlzc2luZ0RhdGFFeGNlcHRpb24pKXsoMCxzLndhcm4pKCdPYmplY3RMb2FkZXIuX3dhbGsgLSByZXF1ZXN0aW5nIGFsbCBkYXRhOiAiJy5jb25jYXQoZSwnIi4nKSksdGhpcy5yZWZTZXQ9bnVsbDtjb25zdHttYW5hZ2VyOnR9PXRoaXMueHJlZi5zdHJlYW07cmV0dXJuIHQucmVxdWVzdEFsbENodW5rcygpfXQucHVzaChjKSxyLnB1c2goe2JlZ2luOmUuYmVnaW4sZW5kOmUuZW5kfSl9fWlmKGMgaW5zdGFuY2VvZiBhLkJhc2VTdHJlYW0pe2NvbnN0IGU9Yy5nZXRCYXNlU3RyZWFtcygpO2lmKGUpe2xldCBuPSExO2Zvcihjb25zdCB0IG9mIGUpdC5pc0RhdGFMb2FkZWR8fChuPSEwLHIucHVzaCh7YmVnaW46dC5zdGFydCxlbmQ6dC5lbmR9KSk7biYmdC5wdXNoKGMpfX1vKGMsZSl9aWYoci5sZW5ndGgpe2F3YWl0IHRoaXMueHJlZi5zdHJlYW0ubWFuYWdlci5yZXF1ZXN0UmFuZ2VzKHIpO2Zvcihjb25zdCBlIG9mIHQpZSBpbnN0YW5jZW9mIG4uUmVmJiZ0aGlzLnJlZlNldC5yZW1vdmUoZSk7cmV0dXJuIHRoaXMuX3dhbGsodCl9dGhpcy5yZWZTZXQ9bnVsbH19fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuWEZBRmFjdG9yeT12b2lkIDAscigxMzkpO3ZhciBuPXIoMjI4KSxhPXIoMjI5KSxpPXIoMjQyKSxzPXIoMjM4KSxvPXIoMjM3KSxjPXIoMTQ0KSxsPXIoMjQzKSxoPXIoMjUzKTtjbGFzcyB1e2NvbnN0cnVjdG9yKGUpe3RyeXt0aGlzLnJvb3Q9KG5ldyBsLlhGQVBhcnNlcikucGFyc2UodS5fY3JlYXRlRG9jdW1lbnQoZSkpO2NvbnN0IHQ9bmV3IGEuQmluZGVyKHRoaXMucm9vdCk7dGhpcy5mb3JtPXQuYmluZCgpLHRoaXMuZGF0YUhhbmRsZXI9bmV3IGkuRGF0YUhhbmRsZXIodGhpcy5yb290LHQuZ2V0RGF0YSgpKSx0aGlzLmZvcm1bbi4kZ2xvYmFsRGF0YV0udGVtcGxhdGU9dGhpcy5mb3JtfWNhdGNoKGUpeygwLGMud2FybikoIlhGQSAtIGFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBwYXJzaW5nIGFuZCBiaW5kaW5nOiAiLmNvbmNhdChlKSl9fWlzVmFsaWQoKXtyZXR1cm4gdGhpcy5yb290JiZ0aGlzLmZvcm19X2NyZWF0ZVBhZ2VzSGVscGVyKCl7Y29uc3QgZT10aGlzLmZvcm1bbi4kdG9QYWdlc10oKTtyZXR1cm4gbmV3IFByb21pc2UoKCh0LHIpPT57Y29uc3Qgbj0oKT0+e3RyeXtjb25zdCByPWUubmV4dCgpO3IuZG9uZT90KHIudmFsdWUpOnNldFRpbWVvdXQobiwwKX1jYXRjaChlKXtyKGUpfX07c2V0VGltZW91dChuLDApfSkpfWFzeW5jIF9jcmVhdGVQYWdlcygpe3RyeXt0aGlzLnBhZ2VzPWF3YWl0IHRoaXMuX2NyZWF0ZVBhZ2VzSGVscGVyKCksdGhpcy5kaW1zPXRoaXMucGFnZXMuY2hpbGRyZW4ubWFwKChlPT57Y29uc3R7d2lkdGg6dCxoZWlnaHQ6cn09ZS5hdHRyaWJ1dGVzLnN0eWxlO3JldHVyblswLDAscGFyc2VJbnQodCkscGFyc2VJbnQocildfSkpfWNhdGNoKGUpeygwLGMud2FybikoIlhGQSAtIGFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBsYXlvdXQ6ICIuY29uY2F0KGUpKX19Z2V0Qm91bmRpbmdCb3goZSl7cmV0dXJuIHRoaXMuZGltc1tlXX1hc3luYyBnZXROdW1QYWdlcygpe3JldHVybiB0aGlzLnBhZ2VzfHxhd2FpdCB0aGlzLl9jcmVhdGVQYWdlcygpLHRoaXMuZGltcy5sZW5ndGh9c2V0SW1hZ2VzKGUpe3RoaXMuZm9ybVtuLiRnbG9iYWxEYXRhXS5pbWFnZXM9ZX1zZXRGb250cyhlKXt0aGlzLmZvcm1bbi4kZ2xvYmFsRGF0YV0uZm9udEZpbmRlcj1uZXcgcy5Gb250RmluZGVyKGUpO2NvbnN0IHQ9W107Zm9yKGxldCBlIG9mIHRoaXMuZm9ybVtuLiRnbG9iYWxEYXRhXS51c2VkVHlwZWZhY2VzKWU9KDAsby5zdHJpcFF1b3RlcykoZSksdGhpcy5mb3JtW24uJGdsb2JhbERhdGFdLmZvbnRGaW5kZXIuZmluZChlKXx8dC5wdXNoKGUpO3JldHVybiB0Lmxlbmd0aD4wP3Q6bnVsbH1hcHBlbmRGb250cyhlLHQpe3RoaXMuZm9ybVtuLiRnbG9iYWxEYXRhXS5mb250RmluZGVyLmFkZChlLHQpfWFzeW5jIGdldFBhZ2VzKCl7dGhpcy5wYWdlc3x8YXdhaXQgdGhpcy5fY3JlYXRlUGFnZXMoKTtjb25zdCBlPXRoaXMucGFnZXM7cmV0dXJuIHRoaXMucGFnZXM9bnVsbCxlfXNlcmlhbGl6ZURhdGEoZSl7cmV0dXJuIHRoaXMuZGF0YUhhbmRsZXIuc2VyaWFsaXplKGUpfXN0YXRpYyBfY3JlYXRlRG9jdW1lbnQoZSl7cmV0dXJuIGVbIi94ZHA6eGRwIl0/T2JqZWN0LnZhbHVlcyhlKS5qb2luKCIiKTplWyJ4ZHA6eGRwIl19c3RhdGljIGdldFJpY2hUZXh0QXNIdG1sKGUpe2lmKCFlfHwic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIG51bGw7dHJ5e2xldCB0PW5ldyBsLlhGQVBhcnNlcihoLlhodG1sTmFtZXNwYWNlLCEwKS5wYXJzZShlKTtpZighWyJib2R5IiwieGh0bWwiXS5pbmNsdWRlcyh0W24uJG5vZGVOYW1lXSkpe2NvbnN0IGU9aC5YaHRtbE5hbWVzcGFjZS5ib2R5KHt9KTtlW24uJGFwcGVuZENoaWxkXSh0KSx0PWV9Y29uc3Qgcj10W24uJHRvSFRNTF0oKTtpZighci5zdWNjZXNzKXJldHVybiBudWxsO2NvbnN0e2h0bWw6YX09cix7YXR0cmlidXRlczppfT1hO3JldHVybiBpJiYoaS5jbGFzcyYmKGkuY2xhc3M9aS5jbGFzcy5maWx0ZXIoKGU9PiFlLnN0YXJ0c1dpdGgoInhmYSIpKSkpLGkuZGlyPSJhdXRvIikse2h0bWw6YSxzdHI6dFtuLiR0ZXh0XSgpfX1jYXRjaChlKXsoMCxjLndhcm4pKCJYRkEgLSBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgcGFyc2luZyBvZiByaWNoIHRleHQ6ICIuY29uY2F0KGUpKX1yZXR1cm4gbnVsbH19dC5YRkFGYWN0b3J5PXV9LChlLHQpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuJHVpZD10LiR0b1N0eWxlPXQuJHRvU3RyaW5nPXQuJHRvUGFnZXM9dC4kdG9IVE1MPXQuJHRleHQ9dC4kdGFiSW5kZXg9dC4kc2V0VmFsdWU9dC4kc2V0U2V0QXR0cmlidXRlcz10LiRzZXRJZD10LiRzZWFyY2hOb2RlPXQuJHJvb3Q9dC4kcmVzb2x2ZVByb3RvdHlwZXM9dC4kcmVtb3ZlQ2hpbGQ9dC4kcHVzaFBhcmE9dC4kcHVzaEdseXBocz10LiRwb3BQYXJhPXQuJG9uVGV4dD10LiRvbkNoaWxkQ2hlY2s9dC4kb25DaGlsZD10LiRuc0F0dHJpYnV0ZXM9dC4kbm9kZU5hbWU9dC4kbmFtZXNwYWNlSWQ9dC4kbGFzdEF0dHJpYnV0ZT10LiRpc1VzYWJsZT10LiRpc1RyYW5zcGFyZW50PXQuJGlzVGhlcmVNb3JlV2lkdGg9dC4kaXNTcGxpdHRhYmxlPXQuJGlzTnNBZ25vc3RpYz10LiRpc0Rlc2NlbmRlbnQ9dC4kaXNEYXRhVmFsdWU9dC4kaXNDREFUQVhtbD10LiRpc0JpbmRhYmxlPXQuJGluc2VydEF0PXQuJGluZGV4T2Y9dC4kaWRzPXQuJGhhc1NldHRhYmxlVmFsdWU9dC4kZ2xvYmFsRGF0YT10LiRnZXRUZW1wbGF0ZVJvb3Q9dC4kZ2V0U3ViZm9ybVBhcmVudD10LiRnZXRSZWFsQ2hpbGRyZW5CeU5hbWVJdD10LiRnZXRQYXJlbnQ9dC4kZ2V0TmV4dFBhZ2U9dC4kZ2V0RXh0cmE9dC4kZ2V0RGF0YVZhbHVlPXQuJGdldENvbnRhaW5lZENoaWxkcmVuPXQuJGdldENoaWxkcmVuQnlOYW1lSXQ9dC4kZ2V0Q2hpbGRyZW5CeU5hbWU9dC4kZ2V0Q2hpbGRyZW5CeUNsYXNzPXQuJGdldENoaWxkcmVuPXQuJGdldEF2YWlsYWJsZVNwYWNlPXQuJGdldEF0dHJpYnV0ZXM9dC4kZ2V0QXR0cmlidXRlSXQ9dC4kZmx1c2hIVE1MPXQuJGZpbmFsaXplPXQuJGV4dHJhPXQuJGR1bXA9dC4kZGF0YT10LiRjb250ZW50PXQuJGNvbnN1bWVkPXQuJGNsb25lPXQuJGNsZWFudXA9dC4kY2xlYW5QYWdlPXQuJGNsZWFuPXQuJGNoaWxkcmVuVG9IVE1MPXQuJGFwcGVuZENoaWxkPXQuJGFkZEhUTUw9dC4kYWNjZXB0V2hpdGVzcGFjZT12b2lkIDA7Y29uc3Qgcj1TeW1ib2woKTt0LiRhY2NlcHRXaGl0ZXNwYWNlPXI7Y29uc3Qgbj1TeW1ib2woKTt0LiRhZGRIVE1MPW47Y29uc3QgYT1TeW1ib2woKTt0LiRhcHBlbmRDaGlsZD1hO2NvbnN0IGk9U3ltYm9sKCk7dC4kY2hpbGRyZW5Ub0hUTUw9aTtjb25zdCBzPVN5bWJvbCgpO3QuJGNsZWFuPXM7Y29uc3Qgbz1TeW1ib2woKTt0LiRjbGVhblBhZ2U9bztjb25zdCBjPVN5bWJvbCgpO3QuJGNsZWFudXA9Yztjb25zdCBsPVN5bWJvbCgpO3QuJGNsb25lPWw7Y29uc3QgaD1TeW1ib2woKTt0LiRjb25zdW1lZD1oO2NvbnN0IHU9U3ltYm9sKCJjb250ZW50Iik7dC4kY29udGVudD11O2NvbnN0IGQ9U3ltYm9sKCJkYXRhIik7dC4kZGF0YT1kO2NvbnN0IGY9U3ltYm9sKCk7dC4kZHVtcD1mO2NvbnN0IGc9U3ltYm9sKCJleHRyYSIpO3QuJGV4dHJhPWc7Y29uc3QgcD1TeW1ib2woKTt0LiRmaW5hbGl6ZT1wO2NvbnN0IG09U3ltYm9sKCk7dC4kZmx1c2hIVE1MPW07Y29uc3QgYj1TeW1ib2woKTt0LiRnZXRBdHRyaWJ1dGVJdD1iO2NvbnN0IHk9U3ltYm9sKCk7dC4kZ2V0QXR0cmlidXRlcz15O2NvbnN0IHc9U3ltYm9sKCk7dC4kZ2V0QXZhaWxhYmxlU3BhY2U9dztjb25zdCB2PVN5bWJvbCgpO3QuJGdldENoaWxkcmVuQnlDbGFzcz12O2NvbnN0IHg9U3ltYm9sKCk7dC4kZ2V0Q2hpbGRyZW5CeU5hbWU9eDtjb25zdCBTPVN5bWJvbCgpO3QuJGdldENoaWxkcmVuQnlOYW1lSXQ9Uztjb25zdCBBPVN5bWJvbCgpO3QuJGdldERhdGFWYWx1ZT1BO2NvbnN0IGs9U3ltYm9sKCk7dC4kZ2V0RXh0cmE9aztjb25zdCBDPVN5bWJvbCgpO3QuJGdldFJlYWxDaGlsZHJlbkJ5TmFtZUl0PUM7Y29uc3QgTz1TeW1ib2woKTt0LiRnZXRDaGlsZHJlbj1PO2NvbnN0IEY9U3ltYm9sKCk7dC4kZ2V0Q29udGFpbmVkQ2hpbGRyZW49Rjtjb25zdCBJPVN5bWJvbCgpO3QuJGdldE5leHRQYWdlPUk7Y29uc3QgVD1TeW1ib2woKTt0LiRnZXRTdWJmb3JtUGFyZW50PVQ7Y29uc3QgTT1TeW1ib2woKTt0LiRnZXRQYXJlbnQ9TTtjb25zdCBFPVN5bWJvbCgpO3QuJGdldFRlbXBsYXRlUm9vdD1FO2NvbnN0IFA9U3ltYm9sKCk7dC4kZ2xvYmFsRGF0YT1QO2NvbnN0IFI9U3ltYm9sKCk7dC4kaGFzU2V0dGFibGVWYWx1ZT1SO2NvbnN0IE49U3ltYm9sKCk7dC4kaWRzPU47Y29uc3QgRD1TeW1ib2woKTt0LiRpbmRleE9mPUQ7Y29uc3QgQj1TeW1ib2woKTt0LiRpbnNlcnRBdD1CO2NvbnN0IEw9U3ltYm9sKCk7dC4kaXNDREFUQVhtbD1MO2NvbnN0IF89U3ltYm9sKCk7dC4kaXNCaW5kYWJsZT1fO2NvbnN0IGo9U3ltYm9sKCk7dC4kaXNEYXRhVmFsdWU9ajtjb25zdCBVPVN5bWJvbCgpO3QuJGlzRGVzY2VuZGVudD1VO2NvbnN0ICQ9U3ltYm9sKCk7dC4kaXNOc0Fnbm9zdGljPSQ7Y29uc3QgWD1TeW1ib2woKTt0LiRpc1NwbGl0dGFibGU9WDtjb25zdCBIPVN5bWJvbCgpO3QuJGlzVGhlcmVNb3JlV2lkdGg9SDtjb25zdCBxPVN5bWJvbCgpO3QuJGlzVHJhbnNwYXJlbnQ9cTtjb25zdCB6PVN5bWJvbCgpO3QuJGlzVXNhYmxlPXo7Y29uc3QgRz1TeW1ib2woKTt0LiRsYXN0QXR0cmlidXRlPUc7Y29uc3QgVz1TeW1ib2woIm5hbWVzcGFjZUlkIik7dC4kbmFtZXNwYWNlSWQ9Vztjb25zdCBWPVN5bWJvbCgibm9kZU5hbWUiKTt0LiRub2RlTmFtZT1WO2NvbnN0IEs9U3ltYm9sKCk7dC4kbnNBdHRyaWJ1dGVzPUs7Y29uc3QgWT1TeW1ib2woKTt0LiRvbkNoaWxkPVk7Y29uc3QgSj1TeW1ib2woKTt0LiRvbkNoaWxkQ2hlY2s9Sjtjb25zdCBaPVN5bWJvbCgpO3QuJG9uVGV4dD1aO2NvbnN0IFE9U3ltYm9sKCk7dC4kcHVzaEdseXBocz1RO2NvbnN0IGVlPVN5bWJvbCgpO3QuJHBvcFBhcmE9ZWU7Y29uc3QgdGU9U3ltYm9sKCk7dC4kcHVzaFBhcmE9dGU7Y29uc3QgcmU9U3ltYm9sKCk7dC4kcmVtb3ZlQ2hpbGQ9cmU7Y29uc3QgbmU9U3ltYm9sKCJyb290Iik7dC4kcm9vdD1uZTtjb25zdCBhZT1TeW1ib2woKTt0LiRyZXNvbHZlUHJvdG90eXBlcz1hZTtjb25zdCBpZT1TeW1ib2woKTt0LiRzZWFyY2hOb2RlPWllO2NvbnN0IHNlPVN5bWJvbCgpO3QuJHNldElkPXNlO2NvbnN0IG9lPVN5bWJvbCgpO3QuJHNldFNldEF0dHJpYnV0ZXM9b2U7Y29uc3QgY2U9U3ltYm9sKCk7dC4kc2V0VmFsdWU9Y2U7Y29uc3QgbGU9U3ltYm9sKCk7dC4kdGFiSW5kZXg9bGU7Y29uc3QgaGU9U3ltYm9sKCk7dC4kdGV4dD1oZTtjb25zdCB1ZT1TeW1ib2woKTt0LiR0b1BhZ2VzPXVlO2NvbnN0IGRlPVN5bWJvbCgpO3QuJHRvSFRNTD1kZTtjb25zdCBmZT1TeW1ib2woKTt0LiR0b1N0cmluZz1mZTtjb25zdCBnZT1TeW1ib2woKTt0LiR0b1N0eWxlPWdlO2NvbnN0IHBlPVN5bWJvbCgidWlkIik7dC4kdWlkPXBlfSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQmluZGVyPXZvaWQgMCxyKDEzOSk7dmFyIG49cigyMjgpLGE9cigyMzApLGk9cigyNDEpLHM9cigyNDApLG89cigyMzQpLGM9cigxNDQpO2NvbnN0IGw9by5OYW1lc3BhY2VJZHMuZGF0YXNldHMuaWQ7ZnVuY3Rpb24gaChlKXtjb25zdCB0PW5ldyBhLlRleHQoe30pO3JldHVybiB0W24uJGNvbnRlbnRdPWUsdH10LkJpbmRlcj1jbGFzc3tjb25zdHJ1Y3RvcihlKXt2YXIgdDt0aGlzLnJvb3Q9ZSx0aGlzLmRhdGFzZXRzPWUuZGF0YXNldHMsdGhpcy5kYXRhPShudWxsPT09KHQ9ZS5kYXRhc2V0cyl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuZGF0YSl8fG5ldyBzLlhtbE9iamVjdChvLk5hbWVzcGFjZUlkcy5kYXRhc2V0cy5pZCwiZGF0YSIpLHRoaXMuZW1wdHlNZXJnZT0wPT09dGhpcy5kYXRhW24uJGdldENoaWxkcmVuXSgpLmxlbmd0aCx0aGlzLnJvb3QuZm9ybT10aGlzLmZvcm09ZS50ZW1wbGF0ZVtuLiRjbG9uZV0oKX1faXNDb25zdW1lRGF0YSgpe3JldHVybiF0aGlzLmVtcHR5TWVyZ2UmJnRoaXMuX21lcmdlTW9kZX1faXNNYXRjaFRlbXBsYXRlKCl7cmV0dXJuIXRoaXMuX2lzQ29uc3VtZURhdGEoKX1iaW5kKCl7cmV0dXJuIHRoaXMuX2JpbmRFbGVtZW50KHRoaXMuZm9ybSx0aGlzLmRhdGEpLHRoaXMuZm9ybX1nZXREYXRhKCl7cmV0dXJuIHRoaXMuZGF0YX1fYmluZFZhbHVlKGUsdCxyKXt2YXIgaTtpZihlW24uJGRhdGFdPXQsZVtuLiRoYXNTZXR0YWJsZVZhbHVlXSgpKWlmKHRbbi4kaXNEYXRhVmFsdWVdKCkpe2NvbnN0IHI9dFtuLiRnZXREYXRhVmFsdWVdKCk7ZVtuLiRzZXRWYWx1ZV0oaChyKSl9ZWxzZSBpZihlIGluc3RhbmNlb2YgYS5GaWVsZCYmIm11bHRpU2VsZWN0Ij09PShudWxsPT09KGk9ZS51aSl8fHZvaWQgMD09PWl8fG51bGw9PT0oaT1pLmNob2ljZUxpc3QpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLm9wZW4pKXtjb25zdCByPXRbbi4kZ2V0Q2hpbGRyZW5dKCkubWFwKChlPT5lW24uJGNvbnRlbnRdLnRyaW0oKSkpLmpvaW4oIlxuIik7ZVtuLiRzZXRWYWx1ZV0oaChyKSl9ZWxzZSB0aGlzLl9pc0NvbnN1bWVEYXRhKCkmJigwLGMud2FybikoIlhGQSAtIE5vZGVzIGhhdmVuJ3QgdGhlIHNhbWUgdHlwZS4iKTtlbHNlIXRbbi4kaXNEYXRhVmFsdWVdKCl8fHRoaXMuX2lzTWF0Y2hUZW1wbGF0ZSgpP3RoaXMuX2JpbmRFbGVtZW50KGUsdCk6KDAsYy53YXJuKSgiWEZBIC0gTm9kZXMgaGF2ZW4ndCB0aGUgc2FtZSB0eXBlLiIpfV9maW5kRGF0YUJ5TmFtZVRvQ29uc3VtZShlLHQscixhKXt2YXIgaTtpZighZSlyZXR1cm4gbnVsbDtsZXQgcyxjO2ZvcihsZXQgYT0wO2E8MzthKyspe2ZvcihzPXJbbi4kZ2V0UmVhbENoaWxkcmVuQnlOYW1lSXRdKGUsITEsITApO2M9cy5uZXh0KCkudmFsdWUsYzspaWYodD09PWNbbi4kaXNEYXRhVmFsdWVdKCkpcmV0dXJuIGM7aWYocltuLiRuYW1lc3BhY2VJZF09PT1vLk5hbWVzcGFjZUlkcy5kYXRhc2V0cy5pZCYmImRhdGEiPT09cltuLiRub2RlTmFtZV0pYnJlYWs7cj1yW24uJGdldFBhcmVudF0oKX1yZXR1cm4gYT8ocz10aGlzLmRhdGFbbi4kZ2V0UmVhbENoaWxkcmVuQnlOYW1lSXRdKGUsITAsITEpLGM9cy5uZXh0KCkudmFsdWUsY3x8KHM9dGhpcy5kYXRhW24uJGdldEF0dHJpYnV0ZUl0XShlLCEwKSxjPXMubmV4dCgpLnZhbHVlLG51bGwhPT0oaT1jKSYmdm9pZCAwIT09aSYmaVtuLiRpc0RhdGFWYWx1ZV0oKT9jOm51bGwpKTpudWxsfV9zZXRQcm9wZXJ0aWVzKGUsdCl7aWYoZS5oYXNPd25Qcm9wZXJ0eSgic2V0UHJvcGVydHkiKSlmb3IoY29uc3R7cmVmOnIsdGFyZ2V0Om8sY29ubmVjdGlvbjpsfW9mIGUuc2V0UHJvcGVydHkuY2hpbGRyZW4pe2lmKGwpY29udGludWU7aWYoIXIpY29udGludWU7Y29uc3QgaD0oMCxpLnNlYXJjaE5vZGUpKHRoaXMucm9vdCx0LHIsITEsITEpO2lmKCFoKXsoMCxjLndhcm4pKCJYRkEgLSBJbnZhbGlkIHJlZmVyZW5jZTogIi5jb25jYXQociwiLiIpKTtjb250aW51ZX1jb25zdFt1XT1oO2lmKCF1W24uJGlzRGVzY2VuZGVudF0odGhpcy5kYXRhKSl7KDAsYy53YXJuKSgiWEZBIC0gSW52YWxpZCBub2RlOiBtdXN0IGJlIGEgZGF0YSBub2RlLiIpO2NvbnRpbnVlfWNvbnN0IGQ9KDAsaS5zZWFyY2hOb2RlKSh0aGlzLnJvb3QsZSxvLCExLCExKTtpZighZCl7KDAsYy53YXJuKSgiWEZBIC0gSW52YWxpZCB0YXJnZXQ6ICIuY29uY2F0KG8sIi4iKSk7Y29udGludWV9Y29uc3RbZl09ZDtpZighZltuLiRpc0Rlc2NlbmRlbnRdKGUpKXsoMCxjLndhcm4pKCJYRkEgLSBJbnZhbGlkIHRhcmdldDogbXVzdCBiZSBhIHByb3BlcnR5IG9yIHN1YnByb3BlcnR5LiIpO2NvbnRpbnVlfWNvbnN0IGc9ZltuLiRnZXRQYXJlbnRdKCk7aWYoZiBpbnN0YW5jZW9mIGEuU2V0UHJvcGVydHl8fGcgaW5zdGFuY2VvZiBhLlNldFByb3BlcnR5KXsoMCxjLndhcm4pKCJYRkEgLSBJbnZhbGlkIHRhcmdldDogY2Fubm90IGJlIGEgc2V0UHJvcGVydHkgb3Igb25lIG9mIGl0cyBwcm9wZXJ0aWVzLiIpO2NvbnRpbnVlfWlmKGYgaW5zdGFuY2VvZiBhLkJpbmRJdGVtc3x8ZyBpbnN0YW5jZW9mIGEuQmluZEl0ZW1zKXsoMCxjLndhcm4pKCJYRkEgLSBJbnZhbGlkIHRhcmdldDogY2Fubm90IGJlIGEgYmluZEl0ZW1zIG9yIG9uZSBvZiBpdHMgcHJvcGVydGllcy4iKTtjb250aW51ZX1jb25zdCBwPXVbbi4kdGV4dF0oKSxtPWZbbi4kbm9kZU5hbWVdO2lmKGYgaW5zdGFuY2VvZiBzLlhGQUF0dHJpYnV0ZSl7Y29uc3QgZT1PYmplY3QuY3JlYXRlKG51bGwpO2VbbV09cDtjb25zdCB0PVJlZmxlY3QuY29uc3RydWN0KE9iamVjdC5nZXRQcm90b3R5cGVPZihnKS5jb25zdHJ1Y3RvcixbZV0pO2dbbV09dFttXX1lbHNlIGYuaGFzT3duUHJvcGVydHkobi4kY29udGVudCk/KGZbbi4kZGF0YV09dSxmW24uJGNvbnRlbnRdPXAsZltuLiRmaW5hbGl6ZV0oKSk6KDAsYy53YXJuKSgiWEZBIC0gSW52YWxpZCBub2RlIHRvIHVzZSBpbiBzZXRQcm9wZXJ0eSIpfX1fYmluZEl0ZW1zKGUsdCl7aWYoIWUuaGFzT3duUHJvcGVydHkoIml0ZW1zIil8fCFlLmhhc093blByb3BlcnR5KCJiaW5kSXRlbXMiKXx8ZS5iaW5kSXRlbXMuaXNFbXB0eSgpKXJldHVybjtmb3IoY29uc3QgdCBvZiBlLml0ZW1zLmNoaWxkcmVuKWVbbi4kcmVtb3ZlQ2hpbGRdKHQpO2UuaXRlbXMuY2xlYXIoKTtjb25zdCByPW5ldyBhLkl0ZW1zKHt9KSxzPW5ldyBhLkl0ZW1zKHt9KTtlW24uJGFwcGVuZENoaWxkXShyKSxlLml0ZW1zLnB1c2gociksZVtuLiRhcHBlbmRDaGlsZF0ocyksZS5pdGVtcy5wdXNoKHMpO2Zvcihjb25zdHtyZWY6YSxsYWJlbFJlZjpvLHZhbHVlUmVmOmwsY29ubmVjdGlvbjp1fW9mIGUuYmluZEl0ZW1zLmNoaWxkcmVuKXtpZih1KWNvbnRpbnVlO2lmKCFhKWNvbnRpbnVlO2NvbnN0IGU9KDAsaS5zZWFyY2hOb2RlKSh0aGlzLnJvb3QsdCxhLCExLCExKTtpZihlKWZvcihjb25zdCB0IG9mIGUpe2lmKCF0W24uJGlzRGVzY2VuZGVudF0odGhpcy5kYXRhc2V0cykpeygwLGMud2FybikoIlhGQSAtIEludmFsaWQgcmVmICgiLmNvbmNhdChhLCIpOiBtdXN0IGJlIGEgZGF0YXNldHMgY2hpbGQuIikpO2NvbnRpbnVlfWNvbnN0IGU9KDAsaS5zZWFyY2hOb2RlKSh0aGlzLnJvb3QsdCxvLCEwLCExKTtpZighZSl7KDAsYy53YXJuKSgiWEZBIC0gSW52YWxpZCBsYWJlbDogIi5jb25jYXQobywiLiIpKTtjb250aW51ZX1jb25zdFt1XT1lO2lmKCF1W24uJGlzRGVzY2VuZGVudF0odGhpcy5kYXRhc2V0cykpeygwLGMud2FybikoIlhGQSAtIEludmFsaWQgbGFiZWw6IG11c3QgYmUgYSBkYXRhc2V0cyBjaGlsZC4iKTtjb250aW51ZX1jb25zdCBkPSgwLGkuc2VhcmNoTm9kZSkodGhpcy5yb290LHQsbCwhMCwhMSk7aWYoIWQpeygwLGMud2FybikoIlhGQSAtIEludmFsaWQgdmFsdWU6ICIuY29uY2F0KGwsIi4iKSk7Y29udGludWV9Y29uc3RbZl09ZDtpZighZltuLiRpc0Rlc2NlbmRlbnRdKHRoaXMuZGF0YXNldHMpKXsoMCxjLndhcm4pKCJYRkEgLSBJbnZhbGlkIHZhbHVlOiBtdXN0IGJlIGEgZGF0YXNldHMgY2hpbGQuIik7Y29udGludWV9Y29uc3QgZz1oKHVbbi4kdGV4dF0oKSkscD1oKGZbbi4kdGV4dF0oKSk7cltuLiRhcHBlbmRDaGlsZF0oZyksci50ZXh0LnB1c2goZyksc1tuLiRhcHBlbmRDaGlsZF0ocCkscy50ZXh0LnB1c2gocCl9ZWxzZSgwLGMud2FybikoIlhGQSAtIEludmFsaWQgcmVmZXJlbmNlOiAiLmNvbmNhdChhLCIuIikpfX1fYmluZE9jY3VycmVuY2VzKGUsdCxyKXtsZXQgYTtpZih0Lmxlbmd0aD4xJiYoYT1lW24uJGNsb25lXSgpLGFbbi4kcmVtb3ZlQ2hpbGRdKGEub2NjdXIpLGEub2NjdXI9bnVsbCksdGhpcy5fYmluZFZhbHVlKGUsdFswXSxyKSx0aGlzLl9zZXRQcm9wZXJ0aWVzKGUsdFswXSksdGhpcy5fYmluZEl0ZW1zKGUsdFswXSksMT09PXQubGVuZ3RoKXJldHVybjtjb25zdCBpPWVbbi4kZ2V0UGFyZW50XSgpLHM9ZVtuLiRub2RlTmFtZV0sbz1pW24uJGluZGV4T2ZdKGUpO2ZvcihsZXQgZT0xLGM9dC5sZW5ndGg7ZTxjO2UrKyl7Y29uc3QgYz10W2VdLGw9YVtuLiRjbG9uZV0oKTtpW3NdLnB1c2gobCksaVtuLiRpbnNlcnRBdF0obytlLGwpLHRoaXMuX2JpbmRWYWx1ZShsLGMsciksdGhpcy5fc2V0UHJvcGVydGllcyhsLGMpLHRoaXMuX2JpbmRJdGVtcyhsLGMpfX1fY3JlYXRlT2NjdXJyZW5jZXMoZSl7aWYoIXRoaXMuZW1wdHlNZXJnZSlyZXR1cm47Y29uc3R7b2NjdXI6dH09ZTtpZighdHx8dC5pbml0aWFsPD0xKXJldHVybjtjb25zdCByPWVbbi4kZ2V0UGFyZW50XSgpLGE9ZVtuLiRub2RlTmFtZV07aWYoIShyW2FdaW5zdGFuY2VvZiBzLlhGQU9iamVjdEFycmF5KSlyZXR1cm47bGV0IGk7aT1lLm5hbWU/clthXS5jaGlsZHJlbi5maWx0ZXIoKHQ9PnQubmFtZT09PWUubmFtZSkpLmxlbmd0aDpyW2FdLmNoaWxkcmVuLmxlbmd0aDtjb25zdCBvPXJbbi4kaW5kZXhPZl0oZSkrMSxjPXQuaW5pdGlhbC1pO2lmKGMpe2NvbnN0IHQ9ZVtuLiRjbG9uZV0oKTt0W24uJHJlbW92ZUNoaWxkXSh0Lm9jY3VyKSx0Lm9jY3VyPW51bGwsclthXS5wdXNoKHQpLHJbbi4kaW5zZXJ0QXRdKG8sdCk7Zm9yKGxldCBlPTE7ZTxjO2UrKyl7Y29uc3QgaT10W24uJGNsb25lXSgpO3JbYV0ucHVzaChpKSxyW24uJGluc2VydEF0XShvK2UsaSl9fX1fZ2V0T2NjdXJJbmZvKGUpe2NvbnN0e25hbWU6dCxvY2N1cjpyfT1lO2lmKCFyfHwhdClyZXR1cm5bMSwxXTtjb25zdCBuPS0xPT09ci5tYXg/MS8wOnIubWF4O3JldHVybltyLm1pbixuXX1fc2V0QW5kQmluZChlLHQpe3RoaXMuX3NldFByb3BlcnRpZXMoZSx0KSx0aGlzLl9iaW5kSXRlbXMoZSx0KSx0aGlzLl9iaW5kRWxlbWVudChlLHQpfV9iaW5kRWxlbWVudChlLHQpe2NvbnN0IHI9W107dGhpcy5fY3JlYXRlT2NjdXJyZW5jZXMoZSk7Zm9yKGNvbnN0IGEgb2YgZVtuLiRnZXRDaGlsZHJlbl0oKSl7aWYoYVtuLiRkYXRhXSljb250aW51ZTtpZih2b2lkIDA9PT10aGlzLl9tZXJnZU1vZGUmJiJzdWJmb3JtIj09PWFbbi4kbm9kZU5hbWVdKXt0aGlzLl9tZXJnZU1vZGU9ImNvbnN1bWVEYXRhIj09PWEubWVyZ2VNb2RlO2NvbnN0IGU9dFtuLiRnZXRDaGlsZHJlbl0oKTtpZihlLmxlbmd0aD4wKXRoaXMuX2JpbmRPY2N1cnJlbmNlcyhhLFtlWzBdXSxudWxsKTtlbHNlIGlmKHRoaXMuZW1wdHlNZXJnZSl7Y29uc3QgZT10W24uJG5hbWVzcGFjZUlkXT09PWw/LTE6dFtuLiRuYW1lc3BhY2VJZF0scj1hW24uJGRhdGFdPW5ldyBzLlhtbE9iamVjdChlLGEubmFtZXx8InJvb3QiKTt0W24uJGFwcGVuZENoaWxkXShyKSx0aGlzLl9iaW5kRWxlbWVudChhLHIpfWNvbnRpbnVlfWlmKCFhW24uJGlzQmluZGFibGVdKCkpY29udGludWU7bGV0IGU9ITEsbz1udWxsLGg9bnVsbCx1PW51bGw7aWYoYS5iaW5kKXtzd2l0Y2goYS5iaW5kLm1hdGNoKXtjYXNlIm5vbmUiOnRoaXMuX3NldEFuZEJpbmQoYSx0KTtjb250aW51ZTtjYXNlImdsb2JhbCI6ZT0hMDticmVhaztjYXNlImRhdGFSZWYiOmlmKCFhLmJpbmQucmVmKXsoMCxjLndhcm4pKCJYRkEgLSByZWYgaXMgZW1wdHkgaW4gbm9kZSAiLmNvbmNhdChhW24uJG5vZGVOYW1lXSwiLiIpKSx0aGlzLl9zZXRBbmRCaW5kKGEsdCk7Y29udGludWV9aD1hLmJpbmQucmVmfWEuYmluZC5waWN0dXJlJiYobz1hLmJpbmQucGljdHVyZVtuLiRjb250ZW50XSl9Y29uc3RbZCxmXT10aGlzLl9nZXRPY2N1ckluZm8oYSk7aWYoaCl7aWYodT0oMCxpLnNlYXJjaE5vZGUpKHRoaXMucm9vdCx0LGgsITAsITEpLG51bGw9PT11KXtpZih1PSgwLGkuY3JlYXRlRGF0YU5vZGUpKHRoaXMuZGF0YSx0LGgpLCF1KWNvbnRpbnVlO3RoaXMuX2lzQ29uc3VtZURhdGEoKSYmKHVbbi4kY29uc3VtZWRdPSEwKSx0aGlzLl9zZXRBbmRCaW5kKGEsdSk7Y29udGludWV9dGhpcy5faXNDb25zdW1lRGF0YSgpJiYodT11LmZpbHRlcigoZT0+IWVbbi4kY29uc3VtZWRdKSkpLHUubGVuZ3RoPmY/dT11LnNsaWNlKDAsZik6MD09PXUubGVuZ3RoJiYodT1udWxsKSx1JiZ0aGlzLl9pc0NvbnN1bWVEYXRhKCkmJnUuZm9yRWFjaCgoZT0+e2Vbbi4kY29uc3VtZWRdPSEwfSkpfWVsc2V7aWYoIWEubmFtZSl7dGhpcy5fc2V0QW5kQmluZChhLHQpO2NvbnRpbnVlfWlmKHRoaXMuX2lzQ29uc3VtZURhdGEoKSl7Y29uc3Qgcj1bXTtmb3IoO3IubGVuZ3RoPGY7KXtjb25zdCBpPXRoaXMuX2ZpbmREYXRhQnlOYW1lVG9Db25zdW1lKGEubmFtZSxhW24uJGhhc1NldHRhYmxlVmFsdWVdKCksdCxlKTtpZighaSlicmVhaztpW24uJGNvbnN1bWVkXT0hMCxyLnB1c2goaSl9dT1yLmxlbmd0aD4wP3I6bnVsbH1lbHNle2lmKHU9dFtuLiRnZXRSZWFsQ2hpbGRyZW5CeU5hbWVJdF0oYS5uYW1lLCExLHRoaXMuZW1wdHlNZXJnZSkubmV4dCgpLnZhbHVlLCF1KXtpZigwPT09ZCl7ci5wdXNoKGEpO2NvbnRpbnVlfWNvbnN0IGU9dFtuLiRuYW1lc3BhY2VJZF09PT1sPy0xOnRbbi4kbmFtZXNwYWNlSWRdO3U9YVtuLiRkYXRhXT1uZXcgcy5YbWxPYmplY3QoZSxhLm5hbWUpLHRoaXMuZW1wdHlNZXJnZSYmKHVbbi4kY29uc3VtZWRdPSEwKSx0W24uJGFwcGVuZENoaWxkXSh1KSx0aGlzLl9zZXRBbmRCaW5kKGEsdSk7Y29udGludWV9dGhpcy5lbXB0eU1lcmdlJiYodVtuLiRjb25zdW1lZF09ITApLHU9W3VdfX11P3RoaXMuX2JpbmRPY2N1cnJlbmNlcyhhLHUsbyk6ZD4wP3RoaXMuX3NldEFuZEJpbmQoYSx0KTpyLnB1c2goYSl9ci5mb3JFYWNoKChlPT5lW24uJGdldFBhcmVudF0oKVtuLiRyZW1vdmVDaGlsZF0oZSkpKX19fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuVmFsdWU9dC5UZXh0PXQuVGVtcGxhdGVOYW1lc3BhY2U9dC5UZW1wbGF0ZT10LlNldFByb3BlcnR5PXQuSXRlbXM9dC5GaWVsZD10LkJpbmRJdGVtcz12b2lkIDAscigxMTYpLHIoMTI2KSxyKDEyOCkscigxMzEpLHIoMTMzKSxyKDEzNSkscigxMzcpLHIoMTM5KSxyKDIzMSkscigxNDUpLHIoMTQ3KSxyKDE0OCk7dmFyIG49cigyMjgpLGE9cigyMzQpLGk9cigyMzUpLHM9cigyMzYpLG89cigyNDApLGM9cigyMzcpLGw9cigxNDQpLGg9cigyMzgpLHU9cigxNDkpLGQ9cigyNDEpO2NvbnN0IGY9YS5OYW1lc3BhY2VJZHMudGVtcGxhdGUuaWQsZz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHA9L15IKFxkKykkLyxtPW5ldyBTZXQoWyJpbWFnZS9naWYiLCJpbWFnZS9qcGVnIiwiaW1hZ2UvanBnIiwiaW1hZ2UvcGpwZWciLCJpbWFnZS9wbmciLCJpbWFnZS9hcG5nIiwiaW1hZ2UveC1wbmciLCJpbWFnZS9ibXAiLCJpbWFnZS94LW1zLWJtcCIsImltYWdlL3RpZmYiLCJpbWFnZS90aWYiLCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iXSksYj1bW1s2Niw3N10sImltYWdlL2JtcCJdLFtbMjU1LDIxNiwyNTVdLCJpbWFnZS9qcGVnIl0sW1s3Myw3Myw0MiwwXSwiaW1hZ2UvdGlmZiJdLFtbNzcsNzcsMCw0Ml0sImltYWdlL3RpZmYiXSxbWzcxLDczLDcwLDU2LDU3LDk3XSwiaW1hZ2UvZ2lmIl0sW1sxMzcsODAsNzgsNzEsMTMsMTAsMjYsMTBdLCJpbWFnZS9wbmciXV07ZnVuY3Rpb24geShlKXtpZighZXx8IWUuYm9yZGVyKXJldHVybnt3OjAsaDowfTtjb25zdCB0PWUuYm9yZGVyW24uJGdldEV4dHJhXSgpO3JldHVybiB0P3t3OnQud2lkdGhzWzBdK3Qud2lkdGhzWzJdK3QuaW5zZXRzWzBdK3QuaW5zZXRzWzJdLGg6dC53aWR0aHNbMV0rdC53aWR0aHNbM10rdC5pbnNldHNbMV0rdC5pbnNldHNbM119Ont3OjAsaDowfX1mdW5jdGlvbiB3KGUpe3JldHVybiBlLm1hcmdpbiYmKGUubWFyZ2luLnRvcEluc2V0fHxlLm1hcmdpbi5yaWdodEluc2V0fHxlLm1hcmdpbi5ib3R0b21JbnNldHx8ZS5tYXJnaW4ubGVmdEluc2V0KX1mdW5jdGlvbiB2KGUsdCl7aWYoIWUudmFsdWUpe2NvbnN0IHQ9bmV3IE50KHt9KTtlW24uJGFwcGVuZENoaWxkXSh0KSxlLnZhbHVlPXR9ZS52YWx1ZVtuLiRzZXRWYWx1ZV0odCl9ZnVuY3Rpb24qeChlKXtmb3IoY29uc3QgdCBvZiBlW24uJGdldENoaWxkcmVuXSgpKXQgaW5zdGFuY2VvZiB2dD95aWVsZCp0W24uJGdldENvbnRhaW5lZENoaWxkcmVuXSgpOnlpZWxkIHR9ZnVuY3Rpb24gUyhlKXt2YXIgdDtyZXR1cm4iZXJyb3IiPT09KG51bGw9PT0odD1lLnZhbGlkYXRlKXx8dm9pZCAwPT09dD92b2lkIDA6dC5udWxsVGVzdCl9ZnVuY3Rpb24gQShlKXtmb3IoO2U7KXtpZighZS50cmF2ZXJzYWwpcmV0dXJuIHZvaWQoZVtuLiR0YWJJbmRleF09ZVtuLiRnZXRQYXJlbnRdKClbbi4kdGFiSW5kZXhdKTtpZihlW24uJHRhYkluZGV4XSlyZXR1cm47bGV0IHQ9bnVsbDtmb3IoY29uc3QgciBvZiBlLnRyYXZlcnNhbFtuLiRnZXRDaGlsZHJlbl0oKSlpZigibmV4dCI9PT1yLm9wZXJhdGlvbil7dD1yO2JyZWFrfWlmKCF0fHwhdC5yZWYpcmV0dXJuIHZvaWQoZVtuLiR0YWJJbmRleF09ZVtuLiRnZXRQYXJlbnRdKClbbi4kdGFiSW5kZXhdKTtjb25zdCByPWVbbi4kZ2V0VGVtcGxhdGVSb290XSgpO2Vbbi4kdGFiSW5kZXhdPSsrcltuLiR0YWJJbmRleF07Y29uc3QgYT1yW24uJHNlYXJjaE5vZGVdKHQucmVmLGUpO2lmKCFhKXJldHVybjtlPWFbMF19fWZ1bmN0aW9uIGsoZSx0KXtjb25zdCByPWUuYXNzaXN0O2lmKHIpe2NvbnN0IGU9cltuLiR0b0hUTUxdKCk7ZSYmKHQudGl0bGU9ZSk7Y29uc3QgYT1yLnJvbGUubWF0Y2gocCk7aWYoYSl7Y29uc3QgZT0iaGVhZGluZyIscj1hWzFdO3Qucm9sZT1lLHRbImFyaWEtbGV2ZWwiXT1yfX1pZigidGFibGUiPT09ZS5sYXlvdXQpdC5yb2xlPSJ0YWJsZSI7ZWxzZSBpZigicm93Ij09PWUubGF5b3V0KXQucm9sZT0icm93IjtlbHNle3ZhciBhO2NvbnN0IHI9ZVtuLiRnZXRQYXJlbnRdKCk7InJvdyI9PT1yLmxheW91dCYmKHQucm9sZT0iVEgiPT09KG51bGw9PT0oYT1yLmFzc2lzdCl8fHZvaWQgMD09PWE/dm9pZCAwOmEucm9sZSk/ImNvbHVtbmhlYWRlciI6ImNlbGwiKX19ZnVuY3Rpb24gQyhlKXtpZighZS5hc3Npc3QpcmV0dXJuIG51bGw7Y29uc3QgdD1lLmFzc2lzdDtyZXR1cm4gdC5zcGVhayYmIiIhPT10LnNwZWFrW24uJGNvbnRlbnRdP3Quc3BlYWtbbi4kY29udGVudF06dC50b29sVGlwP3QudG9vbFRpcFtuLiRjb250ZW50XTpudWxsfWZ1bmN0aW9uIE8oZSl7cmV0dXJuIGMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhUmljaCJdLHN0eWxlOk9iamVjdC5jcmVhdGUobnVsbCl9LGNoaWxkcmVuOlt7bmFtZToic3BhbiIsYXR0cmlidXRlczp7c3R5bGU6T2JqZWN0LmNyZWF0ZShudWxsKX0sdmFsdWU6ZX1dfSl9ZnVuY3Rpb24gRihlKXtjb25zdCB0PWVbbi4kZ2V0VGVtcGxhdGVSb290XSgpO251bGw9PT10W24uJGV4dHJhXS5maXJzdFVuc3BsaXR0YWJsZSYmKHRbbi4kZXh0cmFdLmZpcnN0VW5zcGxpdHRhYmxlPWUsdFtuLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlPSEwKX1mdW5jdGlvbiBJKGUpe2NvbnN0IHQ9ZVtuLiRnZXRUZW1wbGF0ZVJvb3RdKCk7dFtuLiRleHRyYV0uZmlyc3RVbnNwbGl0dGFibGU9PT1lJiYodFtuLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlPSExKX1mdW5jdGlvbiBUKGUpe2lmKGVbbi4kZXh0cmFdKXJldHVybiExO2lmKGVbbi4kZXh0cmFdPU9iamVjdC5jcmVhdGUobnVsbCksImF1dG8iPT09ZS50YXJnZXRUeXBlKXJldHVybiExO2NvbnN0IHQ9ZVtuLiRnZXRUZW1wbGF0ZVJvb3RdKCk7bGV0IHI9bnVsbDtpZihlLnRhcmdldCl7aWYocj10W24uJHNlYXJjaE5vZGVdKGUudGFyZ2V0LGVbbi4kZ2V0UGFyZW50XSgpKSwhcilyZXR1cm4hMTtyPXJbMF19Y29uc3R7Y3VycmVudFBhZ2VBcmVhOmEsY3VycmVudENvbnRlbnRBcmVhOml9PXRbbi4kZXh0cmFdO2lmKCJwYWdlQXJlYSI9PT1lLnRhcmdldFR5cGUpcmV0dXJuIHIgaW5zdGFuY2VvZiBRZXx8KHI9bnVsbCksZS5zdGFydE5ldz8oZVtuLiRleHRyYV0udGFyZ2V0PXJ8fGEsITApOiEoIXJ8fHI9PT1hfHwoZVtuLiRleHRyYV0udGFyZ2V0PXIsMCkpO3IgaW5zdGFuY2VvZiBlZXx8KHI9bnVsbCk7Y29uc3Qgcz1yJiZyW24uJGdldFBhcmVudF0oKTtsZXQgbyxjPXM7aWYoZS5zdGFydE5ldylpZihyKXtjb25zdCBlPXMuY29udGVudEFyZWEuY2hpbGRyZW4sdD1lLmluZGV4T2YoaSksbj1lLmluZGV4T2Yocik7LTEhPT10JiZ0PG4mJihjPW51bGwpLG89bi0xfWVsc2Ugbz1hLmNvbnRlbnRBcmVhLmNoaWxkcmVuLmluZGV4T2YoaSk7ZWxzZXtpZighcnx8cj09PWkpcmV0dXJuITE7bz1zLmNvbnRlbnRBcmVhLmNoaWxkcmVuLmluZGV4T2YociktMSxjPXM9PT1hP251bGw6c31yZXR1cm4gZVtuLiRleHRyYV0udGFyZ2V0PWMsZVtuLiRleHRyYV0uaW5kZXg9bywhMH1mdW5jdGlvbiBNKGUsdCxyKXtjb25zdCBhPWVbbi4kZ2V0VGVtcGxhdGVSb290XSgpLGk9YVtuLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlLHM9dFtuLiRnZXRTdWJmb3JtUGFyZW50XTt0W24uJGdldFN1YmZvcm1QYXJlbnRdPSgpPT5lLGFbbi4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZT0hMDtjb25zdCBvPXRbbi4kdG9IVE1MXShyKTtlW24uJGFkZEhUTUxdKG8uaHRtbCxvLmJib3gpLGFbbi4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZT1pLHRbbi4kZ2V0U3ViZm9ybVBhcmVudF09c31jbGFzcyBFIGV4dGVuZHMgby5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiYXBwZWFyYW5jZUZpbHRlciIpLHRoaXMuaWQ9ZS5pZHx8IiIsdGhpcy50eXBlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pLHRoaXMudXNlPWUudXNlfHwiIix0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgUCBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImFyYyIsITApLHRoaXMuY2lyY3VsYXI9KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmNpcmN1bGFyLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSksdGhpcy5oYW5kPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmhhbmQsWyJldmVuIiwibGVmdCIsInJpZ2h0Il0pLHRoaXMuaWQ9ZS5pZHx8IiIsdGhpcy5zdGFydEFuZ2xlPSgwLGMuZ2V0RmxvYXQpKHtkYXRhOmUuc3RhcnRBbmdsZSxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4hMH0pLHRoaXMuc3dlZXBBbmdsZT0oMCxjLmdldEZsb2F0KSh7ZGF0YTplLnN3ZWVwQW5nbGUsZGVmYXVsdFZhbHVlOjM2MCx2YWxpZGF0ZTplPT4hMH0pLHRoaXMudXNlPWUudXNlfHwiIix0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIix0aGlzLmVkZ2U9bnVsbCx0aGlzLmZpbGw9bnVsbH1bbi4kdG9IVE1MXSgpe3ZhciBlO2NvbnN0IHQ9dGhpcy5lZGdlfHxuZXcgdWUoe30pLHI9dFtuLiR0b1N0eWxlXSgpLGE9T2JqZWN0LmNyZWF0ZShudWxsKTtsZXQgaTsidmlzaWJsZSI9PT0obnVsbD09PShlPXRoaXMuZmlsbCl8fHZvaWQgMD09PWU/dm9pZCAwOmUucHJlc2VuY2UpP09iamVjdC5hc3NpZ24oYSx0aGlzLmZpbGxbbi4kdG9TdHlsZV0oKSk6YS5maWxsPSJ0cmFuc3BhcmVudCIsYS5zdHJva2VXaWR0aD0oMCxzLm1lYXN1cmVUb1N0cmluZykoInZpc2libGUiPT09dC5wcmVzZW5jZT90LnRoaWNrbmVzczowKSxhLnN0cm9rZT1yLmNvbG9yO2NvbnN0IG89e3htbG5zOmcsc3R5bGU6e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLG92ZXJmbG93OiJ2aXNpYmxlIn19O2lmKDM2MD09PXRoaXMuc3dlZXBBbmdsZSlpPXtuYW1lOiJlbGxpcHNlIixhdHRyaWJ1dGVzOnt4bWxuczpnLGN4OiI1MCUiLGN5OiI1MCUiLHJ4OiI1MCUiLHJ5OiI1MCUiLHN0eWxlOmF9fTtlbHNle2NvbnN0IGU9dGhpcy5zdGFydEFuZ2xlKk1hdGguUEkvMTgwLHQ9dGhpcy5zd2VlcEFuZ2xlKk1hdGguUEkvMTgwLHI9dGhpcy5zd2VlcEFuZ2xlPjE4MD8xOjAsW24scyxjLGxdPVs1MCooMStNYXRoLmNvcyhlKSksNTAqKDEtTWF0aC5zaW4oZSkpLDUwKigxK01hdGguY29zKGUrdCkpLDUwKigxLU1hdGguc2luKGUrdCkpXTtpPXtuYW1lOiJwYXRoIixhdHRyaWJ1dGVzOnt4bWxuczpnLGQ6Ik0gIi5jb25jYXQobiwiICIpLmNvbmNhdChzLCIgQSA1MCA1MCAwICIpLmNvbmNhdChyLCIgMCAiKS5jb25jYXQoYywiICIpLmNvbmNhdChsKSx2ZWN0b3JFZmZlY3Q6Im5vbi1zY2FsaW5nLXN0cm9rZSIsc3R5bGU6YX19LE9iamVjdC5hc3NpZ24obyx7dmlld0JveDoiMCAwIDEwMCAxMDAiLHByZXNlcnZlQXNwZWN0UmF0aW86Im5vbmUifSl9Y29uc3QgbD17bmFtZToic3ZnIixjaGlsZHJlbjpbaV0sYXR0cmlidXRlczpvfTtyZXR1cm4gdyh0aGlzW24uJGdldFBhcmVudF0oKVtuLiRnZXRQYXJlbnRdKCkpP2MuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e3N0eWxlOntkaXNwbGF5OiJpbmxpbmUiLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifX0sY2hpbGRyZW46W2xdfSk6KGwuYXR0cmlidXRlcy5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGMuSFRNTFJlc3VsdC5zdWNjZXNzKGwpKX19Y2xhc3MgUiBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImFyZWEiLCEwKSx0aGlzLmNvbFNwYW49KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmNvbFNwYW4sZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZT0+ZT49MXx8LTE9PT1lfSksdGhpcy5pZD1lLmlkfHwiIix0aGlzLm5hbWU9ZS5uYW1lfHwiIix0aGlzLnJlbGV2YW50PSgwLGMuZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpLHRoaXMudXNlPWUudXNlfHwiIix0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIix0aGlzLng9KDAsYy5nZXRNZWFzdXJlbWVudCkoZS54LCIwcHQiKSx0aGlzLnk9KDAsYy5nZXRNZWFzdXJlbWVudCkoZS55LCIwcHQiKSx0aGlzLmRlc2M9bnVsbCx0aGlzLmV4dHJhcz1udWxsLHRoaXMuYXJlYT1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmRyYXc9bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy5leE9iamVjdD1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmV4Y2xHcm91cD1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmZpZWxkPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuc3ViZm9ybT1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLnN1YmZvcm1TZXQ9bmV3IG8uWEZBT2JqZWN0QXJyYXl9KltuLiRnZXRDb250YWluZWRDaGlsZHJlbl0oKXt5aWVsZCp4KHRoaXMpfVtuLiRpc1RyYW5zcGFyZW50XSgpe3JldHVybiEwfVtuLiRpc0JpbmRhYmxlXSgpe3JldHVybiEwfVtuLiRhZGRIVE1MXShlLHQpe2NvbnN0W3IsYSxpLHNdPXQ7dGhpc1tuLiRleHRyYV0ud2lkdGg9TWF0aC5tYXgodGhpc1tuLiRleHRyYV0ud2lkdGgscitpKSx0aGlzW24uJGV4dHJhXS5oZWlnaHQ9TWF0aC5tYXgodGhpc1tuLiRleHRyYV0uaGVpZ2h0LGErcyksdGhpc1tuLiRleHRyYV0uY2hpbGRyZW4ucHVzaChlKX1bbi4kZ2V0QXZhaWxhYmxlU3BhY2VdKCl7cmV0dXJuIHRoaXNbbi4kZXh0cmFdLmF2YWlsYWJsZVNwYWNlfVtuLiR0b0hUTUxdKGUpe2NvbnN0IHQ9KDAscy50b1N0eWxlKSh0aGlzLCJwb3NpdGlvbiIpLHI9e3N0eWxlOnQsaWQ6dGhpc1tuLiR1aWRdLGNsYXNzOlsieGZhQXJlYSJdfTsoMCxzLmlzUHJpbnRPbmx5KSh0aGlzKSYmci5jbGFzcy5wdXNoKCJ4ZmFQcmludE9ubHkiKSx0aGlzLm5hbWUmJihyLnhmYU5hbWU9dGhpcy5uYW1lKTtjb25zdCBhPVtdO3RoaXNbbi4kZXh0cmFdPXtjaGlsZHJlbjphLHdpZHRoOjAsaGVpZ2h0OjAsYXZhaWxhYmxlU3BhY2U6ZX07Y29uc3QgaT10aGlzW24uJGNoaWxkcmVuVG9IVE1MXSh7ZmlsdGVyOm5ldyBTZXQoWyJhcmVhIiwiZHJhdyIsImZpZWxkIiwiZXhjbEdyb3VwIiwic3ViZm9ybSIsInN1YmZvcm1TZXQiXSksaW5jbHVkZTohMH0pO2lmKCFpLnN1Y2Nlc3MpcmV0dXJuIGkuaXNCcmVhaygpP2k6KGRlbGV0ZSB0aGlzW24uJGV4dHJhXSxjLkhUTUxSZXN1bHQuRkFJTFVSRSk7dC53aWR0aD0oMCxzLm1lYXN1cmVUb1N0cmluZykodGhpc1tuLiRleHRyYV0ud2lkdGgpLHQuaGVpZ2h0PSgwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzW24uJGV4dHJhXS5oZWlnaHQpO2NvbnN0IG89e25hbWU6ImRpdiIsYXR0cmlidXRlczpyLGNoaWxkcmVuOmF9LGw9W3RoaXMueCx0aGlzLnksdGhpc1tuLiRleHRyYV0ud2lkdGgsdGhpc1tuLiRleHRyYV0uaGVpZ2h0XTtyZXR1cm4gZGVsZXRlIHRoaXNbbi4kZXh0cmFdLGMuSFRNTFJlc3VsdC5zdWNjZXNzKG8sbCl9fWNsYXNzIE4gZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJhc3Npc3QiLCEwKSx0aGlzLmlkPWUuaWR8fCIiLHRoaXMucm9sZT1lLnJvbGV8fCIiLHRoaXMudXNlPWUudXNlfHwiIix0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIix0aGlzLnNwZWFrPW51bGwsdGhpcy50b29sVGlwPW51bGx9W24uJHRvSFRNTF0oKXt2YXIgZTtyZXR1cm4obnVsbD09PShlPXRoaXMudG9vbFRpcCl8fHZvaWQgMD09PWU/dm9pZCAwOmVbbi4kY29udGVudF0pfHxudWxsfX1jbGFzcyBEIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiYmFyY29kZSIsITApLHRoaXMuY2hhckVuY29kaW5nPSgwLGMuZ2V0S2V5d29yZCkoe2RhdGE6ZS5jaGFyRW5jb2Rpbmc/ZS5jaGFyRW5jb2RpbmcudG9Mb3dlckNhc2UoKToiIixkZWZhdWx0VmFsdWU6IiIsdmFsaWRhdGU6ZT0+WyJ1dGYtOCIsImJpZy1maXZlIiwiZm9udHNwZWNpZmljIiwiZ2JrIiwiZ2ItMTgwMzAiLCJnYi0yMzEyIiwia3NjLTU2MDEiLCJub25lIiwic2hpZnQtamlzIiwidWNzLTIiLCJ1dGYtMTYiXS5pbmNsdWRlcyhlKXx8ZS5tYXRjaCgvaXNvLTg4NTktXGR7Mn0vKX0pLHRoaXMuY2hlY2tzdW09KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuY2hlY2tzdW0sWyJub25lIiwiMW1vZDEwIiwiMW1vZDEwXzFtb2QxMSIsIjJtb2QxMCIsImF1dG8iXSksdGhpcy5kYXRhQ29sdW1uQ291bnQ9KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmRhdGFDb2x1bW5Db3VudCxkZWZhdWx0VmFsdWU6LTEsdmFsaWRhdGU6ZT0+ZT49MH0pLHRoaXMuZGF0YUxlbmd0aD0oMCxjLmdldEludGVnZXIpKHtkYXRhOmUuZGF0YUxlbmd0aCxkZWZhdWx0VmFsdWU6LTEsdmFsaWRhdGU6ZT0+ZT49MH0pLHRoaXMuZGF0YVByZXA9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuZGF0YVByZXAsWyJub25lIiwiZmxhdGVDb21wcmVzcyJdKSx0aGlzLmRhdGFSb3dDb3VudD0oMCxjLmdldEludGVnZXIpKHtkYXRhOmUuZGF0YVJvd0NvdW50LGRlZmF1bHRWYWx1ZTotMSx2YWxpZGF0ZTplPT5lPj0wfSksdGhpcy5lbmRDaGFyPWUuZW5kQ2hhcnx8IiIsdGhpcy5lcnJvckNvcnJlY3Rpb25MZXZlbD0oMCxjLmdldEludGVnZXIpKHtkYXRhOmUuZXJyb3JDb3JyZWN0aW9uTGV2ZWwsZGVmYXVsdFZhbHVlOi0xLHZhbGlkYXRlOmU9PmU+PTAmJmU8PTh9KSx0aGlzLmlkPWUuaWR8fCIiLHRoaXMubW9kdWxlSGVpZ2h0PSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUubW9kdWxlSGVpZ2h0LCI1bW0iKSx0aGlzLm1vZHVsZVdpZHRoPSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUubW9kdWxlV2lkdGgsIjAuMjVtbSIpLHRoaXMucHJpbnRDaGVja0RpZ2l0PSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5wcmludENoZWNrRGlnaXQsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KSx0aGlzLnJvd0NvbHVtblJhdGlvPSgwLGMuZ2V0UmF0aW8pKGUucm93Q29sdW1uUmF0aW8pLHRoaXMuc3RhcnRDaGFyPWUuc3RhcnRDaGFyfHwiIix0aGlzLnRleHRMb2NhdGlvbj0oMCxjLmdldFN0cmluZ09wdGlvbikoZS50ZXh0TG9jYXRpb24sWyJiZWxvdyIsImFib3ZlIiwiYWJvdmVFbWJlZGRlZCIsImJlbG93RW1iZWRkZWQiLCJub25lIl0pLHRoaXMudHJ1bmNhdGU9KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLnRydW5jYXRlLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSksdGhpcy50eXBlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGU/ZS50eXBlLnRvTG93ZXJDYXNlKCk6IiIsWyJhenRlYyIsImNvZGFiYXIiLCJjb2RlMm9mNWluZHVzdHJpYWwiLCJjb2RlMm9mNWludGVybGVhdmVkIiwiY29kZTJvZjVtYXRyaXgiLCJjb2RlMm9mNXN0YW5kYXJkIiwiY29kZTNvZjkiLCJjb2RlM29mOWV4dGVuZGVkIiwiY29kZTExIiwiY29kZTQ5IiwiY29kZTkzIiwiY29kZTEyOCIsImNvZGUxMjhhIiwiY29kZTEyOGIiLCJjb2RlMTI4YyIsImNvZGUxMjhzc2NjIiwiZGF0YW1hdHJpeCIsImVhbjgiLCJlYW44YWRkMiIsImVhbjhhZGQ1IiwiZWFuMTMiLCJlYW4xM2FkZDIiLCJlYW4xM2FkZDUiLCJlYW4xM3B3Y2QiLCJmaW0iLCJsb2dtYXJzIiwibWF4aWNvZGUiLCJtc2kiLCJwZGY0MTciLCJwZGY0MTdtYWNybyIsInBsZXNzZXkiLCJwb3N0YXVzY3VzdDIiLCJwb3N0YXVzY3VzdDMiLCJwb3N0YXVzcmVwbHlwYWlkIiwicG9zdGF1c3N0YW5kYXJkIiwicG9zdHVrcm00c2NjIiwicG9zdHVzZHBiYyIsInBvc3R1c2ltYiIsInBvc3R1c3N0YW5kYXJkIiwicG9zdHVzNXppcCIsInFyY29kZSIsInJmaWQiLCJyc3MxNCIsInJzczE0ZXhwYW5kZWQiLCJyc3MxNGxpbWl0ZWQiLCJyc3MxNHN0YWNrZWQiLCJyc3MxNHN0YWNrZWRvbW5pIiwicnNzMTR0cnVuY2F0ZWQiLCJ0ZWxlcGVuIiwidWNjMTI4IiwidWNjMTI4cmFuZG9tIiwidWNjMTI4c3NjYyIsInVwY2EiLCJ1cGNhYWRkMiIsInVwY2FhZGQ1IiwidXBjYXB3Y2QiLCJ1cGNlIiwidXBjZWFkZDIiLCJ1cGNlYWRkNSIsInVwY2VhbjIiLCJ1cGNlYW41IiwidXBzbWF4aWNvZGUiXSksdGhpcy51cHNNb2RlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnVwc01vZGUsWyJ1c0NhcnJpZXIiLCJpbnRlcm5hdGlvbmFsQ2FycmllciIsInNlY3VyZVN5bWJvbCIsInN0YW5kYXJkU3ltYm9sIl0pLHRoaXMudXNlPWUudXNlfHwiIix0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIix0aGlzLndpZGVOYXJyb3dSYXRpbz0oMCxjLmdldFJhdGlvKShlLndpZGVOYXJyb3dSYXRpbyksdGhpcy5lbmNyeXB0PW51bGwsdGhpcy5leHRyYXM9bnVsbH19Y2xhc3MgQiBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImJpbmQiLCEwKSx0aGlzLm1hdGNoPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLm1hdGNoLFsib25jZSIsImRhdGFSZWYiLCJnbG9iYWwiLCJub25lIl0pLHRoaXMucmVmPWUucmVmfHwiIix0aGlzLnBpY3R1cmU9bnVsbH19Y2xhc3MgTCBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImJpbmRJdGVtcyIpLHRoaXMuY29ubmVjdGlvbj1lLmNvbm5lY3Rpb258fCIiLHRoaXMubGFiZWxSZWY9ZS5sYWJlbFJlZnx8IiIsdGhpcy5yZWY9ZS5yZWZ8fCIiLHRoaXMudmFsdWVSZWY9ZS52YWx1ZVJlZnx8IiJ9fXQuQmluZEl0ZW1zPUw7Y2xhc3MgXyBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImJvb2tlbmQiKSx0aGlzLmlkPWUuaWR8fCIiLHRoaXMubGVhZGVyPWUubGVhZGVyfHwiIix0aGlzLnRyYWlsZXI9ZS50cmFpbGVyfHwiIix0aGlzLnVzZT1lLnVzZXx8IiIsdGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIGogZXh0ZW5kcyBvLk9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImJvb2xlYW4iKSx0aGlzLmlkPWUuaWR8fCIiLHRoaXMubmFtZT1lLm5hbWV8fCIiLHRoaXMudXNlPWUudXNlfHwiIix0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn1bbi4kdG9IVE1MXShlKXtyZXR1cm4gTygxPT09dGhpc1tuLiRjb250ZW50XT8iMSI6IjAiKX19Y2xhc3MgVSBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImJvcmRlciIsITApLHRoaXMuYnJlYWs9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuYnJlYWssWyJjbG9zZSIsIm9wZW4iXSksdGhpcy5oYW5kPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmhhbmQsWyJldmVuIiwibGVmdCIsInJpZ2h0Il0pLHRoaXMuaWQ9ZS5pZHx8IiIsdGhpcy5wcmVzZW5jZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKSx0aGlzLnJlbGV2YW50PSgwLGMuZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpLHRoaXMudXNlPWUudXNlfHwiIix0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIix0aGlzLmNvcm5lcj1uZXcgby5YRkFPYmplY3RBcnJheSg0KSx0aGlzLmVkZ2U9bmV3IG8uWEZBT2JqZWN0QXJyYXkoNCksdGhpcy5leHRyYXM9bnVsbCx0aGlzLmZpbGw9bnVsbCx0aGlzLm1hcmdpbj1udWxsfVtuLiRnZXRFeHRyYV0oKXtpZighdGhpc1tuLiRleHRyYV0pe2NvbnN0IGU9dGhpcy5lZGdlLmNoaWxkcmVuLnNsaWNlKCk7aWYoZS5sZW5ndGg8NCl7Y29uc3QgdD1lLmF0KC0xKXx8bmV3IHVlKHt9KTtmb3IobGV0IHI9ZS5sZW5ndGg7cjw0O3IrKyllLnB1c2godCl9Y29uc3QgdD1lLm1hcCgoZT0+ZS50aGlja25lc3MpKSxyPVswLDAsMCwwXTt0aGlzLm1hcmdpbiYmKHJbMF09dGhpcy5tYXJnaW4udG9wSW5zZXQsclsxXT10aGlzLm1hcmdpbi5yaWdodEluc2V0LHJbMl09dGhpcy5tYXJnaW4uYm90dG9tSW5zZXQsclszXT10aGlzLm1hcmdpbi5sZWZ0SW5zZXQpLHRoaXNbbi4kZXh0cmFdPXt3aWR0aHM6dCxpbnNldHM6cixlZGdlczplfX1yZXR1cm4gdGhpc1tuLiRleHRyYV19W24uJHRvU3R5bGVdKCl7dmFyIGU7Y29uc3R7ZWRnZXM6dH09dGhpc1tuLiRnZXRFeHRyYV0oKSxyPXQubWFwKChlPT57Y29uc3QgdD1lW24uJHRvU3R5bGVdKCk7cmV0dXJuIHQuY29sb3J8fCh0LmNvbG9yPSIjMDAwMDAwIiksdH0pKSxhPU9iamVjdC5jcmVhdGUobnVsbCk7aWYodGhpcy5tYXJnaW4mJk9iamVjdC5hc3NpZ24oYSx0aGlzLm1hcmdpbltuLiR0b1N0eWxlXSgpKSwidmlzaWJsZSI9PT0obnVsbD09PShlPXRoaXMuZmlsbCl8fHZvaWQgMD09PWU/dm9pZCAwOmUucHJlc2VuY2UpJiZPYmplY3QuYXNzaWduKGEsdGhpcy5maWxsW24uJHRvU3R5bGVdKCkpLHRoaXMuY29ybmVyLmNoaWxkcmVuLnNvbWUoKGU9PjAhPT1lLnJhZGl1cykpKXtjb25zdCBlPXRoaXMuY29ybmVyLmNoaWxkcmVuLm1hcCgoZT0+ZVtuLiR0b1N0eWxlXSgpKSk7aWYoMj09PWUubGVuZ3RofHwzPT09ZS5sZW5ndGgpe2NvbnN0IHQ9ZS5hdCgtMSk7Zm9yKGxldCByPWUubGVuZ3RoO3I8NDtyKyspZS5wdXNoKHQpfWEuYm9yZGVyUmFkaXVzPWUubWFwKChlPT5lLnJhZGl1cykpLmpvaW4oIiAiKX1zd2l0Y2godGhpcy5wcmVzZW5jZSl7Y2FzZSJpbnZpc2libGUiOmNhc2UiaGlkZGVuIjphLmJvcmRlclN0eWxlPSIiO2JyZWFrO2Nhc2UiaW5hY3RpdmUiOmEuYm9yZGVyU3R5bGU9Im5vbmUiO2JyZWFrO2RlZmF1bHQ6YS5ib3JkZXJTdHlsZT1yLm1hcCgoZT0+ZS5zdHlsZSkpLmpvaW4oIiAiKX1yZXR1cm4gYS5ib3JkZXJXaWR0aD1yLm1hcCgoZT0+ZS53aWR0aCkpLmpvaW4oIiAiKSxhLmJvcmRlckNvbG9yPXIubWFwKChlPT5lLmNvbG9yKSkuam9pbigiICIpLGF9fWNsYXNzICQgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJicmVhayIsITApLHRoaXMuYWZ0ZXI9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuYWZ0ZXIsWyJhdXRvIiwiY29udGVudEFyZWEiLCJwYWdlQXJlYSIsInBhZ2VFdmVuIiwicGFnZU9kZCJdKSx0aGlzLmFmdGVyVGFyZ2V0PWUuYWZ0ZXJUYXJnZXR8fCIiLHRoaXMuYmVmb3JlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmJlZm9yZSxbImF1dG8iLCJjb250ZW50QXJlYSIsInBhZ2VBcmVhIiwicGFnZUV2ZW4iLCJwYWdlT2RkIl0pLHRoaXMuYmVmb3JlVGFyZ2V0PWUuYmVmb3JlVGFyZ2V0fHwiIix0aGlzLmJvb2tlbmRMZWFkZXI9ZS5ib29rZW5kTGVhZGVyfHwiIix0aGlzLmJvb2tlbmRUcmFpbGVyPWUuYm9va2VuZFRyYWlsZXJ8fCIiLHRoaXMuaWQ9ZS5pZHx8IiIsdGhpcy5vdmVyZmxvd0xlYWRlcj1lLm92ZXJmbG93TGVhZGVyfHwiIix0aGlzLm92ZXJmbG93VGFyZ2V0PWUub3ZlcmZsb3dUYXJnZXR8fCIiLHRoaXMub3ZlcmZsb3dUcmFpbGVyPWUub3ZlcmZsb3dUcmFpbGVyfHwiIix0aGlzLnN0YXJ0TmV3PSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5zdGFydE5ldyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pLHRoaXMudXNlPWUudXNlfHwiIix0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIix0aGlzLmV4dHJhcz1udWxsfX1jbGFzcyBYIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiYnJlYWtBZnRlciIsITApLHRoaXMuaWQ9ZS5pZHx8IiIsdGhpcy5sZWFkZXI9ZS5sZWFkZXJ8fCIiLHRoaXMuc3RhcnROZXc9KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLnN0YXJ0TmV3LGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSksdGhpcy50YXJnZXQ9ZS50YXJnZXR8fCIiLHRoaXMudGFyZ2V0VHlwZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS50YXJnZXRUeXBlLFsiYXV0byIsImNvbnRlbnRBcmVhIiwicGFnZUFyZWEiXSksdGhpcy50cmFpbGVyPWUudHJhaWxlcnx8IiIsdGhpcy51c2U9ZS51c2V8fCIiLHRoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLHRoaXMuc2NyaXB0PW51bGx9fWNsYXNzIEggZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJicmVha0JlZm9yZSIsITApLHRoaXMuaWQ9ZS5pZHx8IiIsdGhpcy5sZWFkZXI9ZS5sZWFkZXJ8fCIiLHRoaXMuc3RhcnROZXc9KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLnN0YXJ0TmV3LGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSksdGhpcy50YXJnZXQ9ZS50YXJnZXR8fCIiLHRoaXMudGFyZ2V0VHlwZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS50YXJnZXRUeXBlLFsiYXV0byIsImNvbnRlbnRBcmVhIiwicGFnZUFyZWEiXSksdGhpcy50cmFpbGVyPWUudHJhaWxlcnx8IiIsdGhpcy51c2U9ZS51c2V8fCIiLHRoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLHRoaXMuc2NyaXB0PW51bGx9W24uJHRvSFRNTF0oZSl7cmV0dXJuIHRoaXNbbi4kZXh0cmFdPXt9LGMuSFRNTFJlc3VsdC5GQUlMVVJFfX1jbGFzcyBxIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiYnV0dG9uIiwhMCksdGhpcy5oaWdobGlnaHQ9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuaGlnaGxpZ2h0LFsiaW52ZXJ0ZWQiLCJub25lIiwib3V0bGluZSIsInB1c2giXSksdGhpcy5pZD1lLmlkfHwiIix0aGlzLnVzZT1lLnVzZXx8IiIsdGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiIsdGhpcy5leHRyYXM9bnVsbH1bbi4kdG9IVE1MXShlKXtjb25zdCB0PXRoaXNbbi4kZ2V0UGFyZW50XSgpW24uJGdldFBhcmVudF0oKSxyPXtuYW1lOiJidXR0b24iLGF0dHJpYnV0ZXM6e2lkOnRoaXNbbi4kdWlkXSxjbGFzczpbInhmYUJ1dHRvbiJdLHN0eWxlOnt9fSxjaGlsZHJlbjpbXX07Zm9yKGNvbnN0IGUgb2YgdC5ldmVudC5jaGlsZHJlbil7aWYoImNsaWNrIiE9PWUuYWN0aXZpdHl8fCFlLnNjcmlwdCljb250aW51ZTtjb25zdCB0PSgwLHUucmVjb3ZlckpzVVJMKShlLnNjcmlwdFtuLiRjb250ZW50XSk7aWYoIXQpY29udGludWU7Y29uc3QgYT0oMCxzLmZpeFVSTCkodC51cmwpO2EmJnIuY2hpbGRyZW4ucHVzaCh7bmFtZToiYSIsYXR0cmlidXRlczp7aWQ6ImxpbmsiK3RoaXNbbi4kdWlkXSxocmVmOmEsbmV3V2luZG93OnQubmV3V2luZG93LGNsYXNzOlsieGZhTGluayJdLHN0eWxlOnt9fSxjaGlsZHJlbjpbXX0pfXJldHVybiBjLkhUTUxSZXN1bHQuc3VjY2VzcyhyKX19Y2xhc3MgeiBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImNhbGN1bGF0ZSIsITApLHRoaXMuaWQ9ZS5pZHx8IiIsdGhpcy5vdmVycmlkZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5vdmVycmlkZSxbImRpc2FibGVkIiwiZXJyb3IiLCJpZ25vcmUiLCJ3YXJuaW5nIl0pLHRoaXMudXNlPWUudXNlfHwiIix0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIix0aGlzLmV4dHJhcz1udWxsLHRoaXMubWVzc2FnZT1udWxsLHRoaXMuc2NyaXB0PW51bGx9fWNsYXNzIEcgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJjYXB0aW9uIiwhMCksdGhpcy5pZD1lLmlkfHwiIix0aGlzLnBsYWNlbWVudD0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5wbGFjZW1lbnQsWyJsZWZ0IiwiYm90dG9tIiwiaW5saW5lIiwicmlnaHQiLCJ0b3AiXSksdGhpcy5wcmVzZW5jZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKSx0aGlzLnJlc2VydmU9TWF0aC5jZWlsKCgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUucmVzZXJ2ZSkpLHRoaXMudXNlPWUudXNlfHwiIix0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIix0aGlzLmV4dHJhcz1udWxsLHRoaXMuZm9udD1udWxsLHRoaXMubWFyZ2luPW51bGwsdGhpcy5wYXJhPW51bGwsdGhpcy52YWx1ZT1udWxsfVtuLiRzZXRWYWx1ZV0oZSl7dih0aGlzLGUpfVtuLiRnZXRFeHRyYV0oZSl7aWYoIXRoaXNbbi4kZXh0cmFdKXtsZXR7d2lkdGg6dCxoZWlnaHQ6cn09ZTtzd2l0Y2godGhpcy5wbGFjZW1lbnQpe2Nhc2UibGVmdCI6Y2FzZSJyaWdodCI6Y2FzZSJpbmxpbmUiOnQ9dGhpcy5yZXNlcnZlPD0wP3Q6dGhpcy5yZXNlcnZlO2JyZWFrO2Nhc2UidG9wIjpjYXNlImJvdHRvbSI6cj10aGlzLnJlc2VydmU8PTA/cjp0aGlzLnJlc2VydmV9dGhpc1tuLiRleHRyYV09KDAscy5sYXlvdXROb2RlKSh0aGlzLHt3aWR0aDp0LGhlaWdodDpyfSl9cmV0dXJuIHRoaXNbbi4kZXh0cmFdfVtuLiR0b0hUTUxdKGUpe2lmKCF0aGlzLnZhbHVlKXJldHVybiBjLkhUTUxSZXN1bHQuRU1QVFk7dGhpc1tuLiRwdXNoUGFyYV0oKTtjb25zdCB0PXRoaXMudmFsdWVbbi4kdG9IVE1MXShlKS5odG1sO2lmKCF0KXJldHVybiB0aGlzW24uJHBvcFBhcmFdKCksYy5IVE1MUmVzdWx0LkVNUFRZO2NvbnN0IHI9dGhpcy5yZXNlcnZlO2lmKHRoaXMucmVzZXJ2ZTw9MCl7Y29uc3R7dzp0LGg6cn09dGhpc1tuLiRnZXRFeHRyYV0oZSk7c3dpdGNoKHRoaXMucGxhY2VtZW50KXtjYXNlImxlZnQiOmNhc2UicmlnaHQiOmNhc2UiaW5saW5lIjp0aGlzLnJlc2VydmU9dDticmVhaztjYXNlInRvcCI6Y2FzZSJib3R0b20iOnRoaXMucmVzZXJ2ZT1yfX1jb25zdCBhPVtdOyJzdHJpbmciPT10eXBlb2YgdD9hLnB1c2goe25hbWU6IiN0ZXh0Iix2YWx1ZTp0fSk6YS5wdXNoKHQpO2NvbnN0IGk9KDAscy50b1N0eWxlKSh0aGlzLCJmb250IiwibWFyZ2luIiwidmlzaWJpbGl0eSIpO3N3aXRjaCh0aGlzLnBsYWNlbWVudCl7Y2FzZSJsZWZ0IjpjYXNlInJpZ2h0Ijp0aGlzLnJlc2VydmU+MCYmKGkud2lkdGg9KDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMucmVzZXJ2ZSkpO2JyZWFrO2Nhc2UidG9wIjpjYXNlImJvdHRvbSI6dGhpcy5yZXNlcnZlPjAmJihpLmhlaWdodD0oMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5yZXNlcnZlKSl9cmV0dXJuKDAscy5zZXRQYXJhKSh0aGlzLG51bGwsdCksdGhpc1tuLiRwb3BQYXJhXSgpLHRoaXMucmVzZXJ2ZT1yLGMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e3N0eWxlOmksY2xhc3M6WyJ4ZmFDYXB0aW9uIl19LGNoaWxkcmVuOmF9KX19Y2xhc3MgVyBleHRlbmRzIG8uU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImNlcnRpZmljYXRlIiksdGhpcy5pZD1lLmlkfHwiIix0aGlzLm5hbWU9ZS5uYW1lfHwiIix0aGlzLnVzZT1lLnVzZXx8IiIsdGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIFYgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJjZXJ0aWZpY2F0ZXMiLCEwKSx0aGlzLmNyZWRlbnRpYWxTZXJ2ZXJQb2xpY3k9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuY3JlZGVudGlhbFNlcnZlclBvbGljeSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksdGhpcy5pZD1lLmlkfHwiIix0aGlzLnVybD1lLnVybHx8IiIsdGhpcy51cmxQb2xpY3k9ZS51cmxQb2xpY3l8fCIiLHRoaXMudXNlPWUudXNlfHwiIix0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIix0aGlzLmVuY3J5cHRpb249bnVsbCx0aGlzLmlzc3VlcnM9bnVsbCx0aGlzLmtleVVzYWdlPW51bGwsdGhpcy5vaWRzPW51bGwsdGhpcy5zaWduaW5nPW51bGwsdGhpcy5zdWJqZWN0RE5zPW51bGx9fWNsYXNzIEsgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJjaGVja0J1dHRvbiIsITApLHRoaXMuaWQ9ZS5pZHx8IiIsdGhpcy5tYXJrPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLm1hcmssWyJkZWZhdWx0IiwiY2hlY2siLCJjaXJjbGUiLCJjcm9zcyIsImRpYW1vbmQiLCJzcXVhcmUiLCJzdGFyIl0pLHRoaXMuc2hhcGU9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuc2hhcGUsWyJzcXVhcmUiLCJyb3VuZCJdKSx0aGlzLnNpemU9KDAsYy5nZXRNZWFzdXJlbWVudCkoZS5zaXplLCIxMHB0IiksdGhpcy51c2U9ZS51c2V8fCIiLHRoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLHRoaXMuYm9yZGVyPW51bGwsdGhpcy5leHRyYXM9bnVsbCx0aGlzLm1hcmdpbj1udWxsfVtuLiR0b0hUTUxdKGUpe3ZhciB0O2NvbnN0IHI9KDAscy50b1N0eWxlKSgibWFyZ2luIiksYT0oMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5zaXplKTtsZXQgaSxvLGw7ci53aWR0aD1yLmhlaWdodD1hO2NvbnN0IGg9dGhpc1tuLiRnZXRQYXJlbnRdKClbbi4kZ2V0UGFyZW50XSgpLHU9aC5pdGVtcy5jaGlsZHJlbi5sZW5ndGgmJmguaXRlbXMuY2hpbGRyZW5bMF1bbi4kdG9IVE1MXSgpLmh0bWx8fFtdLGQ9e29uOih2b2lkIDAhPT11WzBdP3VbMF06Im9uIikudG9TdHJpbmcoKSxvZmY6KHZvaWQgMCE9PXVbMV0/dVsxXToib2ZmIikudG9TdHJpbmcoKX0sZj0oKG51bGw9PT0odD1oLnZhbHVlKXx8dm9pZCAwPT09dD92b2lkIDA6dFtuLiR0ZXh0XSgpKXx8Im9mZiIpPT09ZC5vbnx8dm9pZCAwLGc9aFtuLiRnZXRTdWJmb3JtUGFyZW50XSgpLHA9aFtuLiR1aWRdO2xldCBtO3ZhciBiLHk7ZyBpbnN0YW5jZW9mIFNlPyhsPWdbbi4kdWlkXSxpPSJyYWRpbyIsbz0ieGZhUmFkaW8iLG09KG51bGw9PT0oYj1nW24uJGRhdGFdKXx8dm9pZCAwPT09Yj92b2lkIDA6YltuLiR1aWRdKXx8Z1tuLiR1aWRdKTooaT0iY2hlY2tib3giLG89InhmYUNoZWNrYm94IixtPShudWxsPT09KHk9aFtuLiRkYXRhXSl8fHZvaWQgMD09PXk/dm9pZCAwOnlbbi4kdWlkXSl8fGhbbi4kdWlkXSk7Y29uc3Qgdz17bmFtZToiaW5wdXQiLGF0dHJpYnV0ZXM6e2NsYXNzOltvXSxzdHlsZTpyLGZpZWxkSWQ6cCxkYXRhSWQ6bSx0eXBlOmksY2hlY2tlZDpmLHhmYU9uOmQub24seGZhT2ZmOmQub2ZmLCJhcmlhLWxhYmVsIjpDKGgpLCJhcmlhLXJlcXVpcmVkIjohMX19O3JldHVybiBsJiYody5hdHRyaWJ1dGVzLm5hbWU9bCksUyhoKSYmKHcuYXR0cmlidXRlc1siYXJpYS1yZXF1aXJlZCJdPSEwLHcuYXR0cmlidXRlcy5yZXF1aXJlZD0hMCksYy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImxhYmVsIixhdHRyaWJ1dGVzOntjbGFzczpbInhmYUxhYmVsIl19LGNoaWxkcmVuOlt3XX0pfX1jbGFzcyBZIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiY2hvaWNlTGlzdCIsITApLHRoaXMuY29tbWl0T249KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuY29tbWl0T24sWyJzZWxlY3QiLCJleGl0Il0pLHRoaXMuaWQ9ZS5pZHx8IiIsdGhpcy5vcGVuPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLm9wZW4sWyJ1c2VyQ29udHJvbCIsImFsd2F5cyIsIm11bHRpU2VsZWN0Iiwib25FbnRyeSJdKSx0aGlzLnRleHRFbnRyeT0oMCxjLmdldEludGVnZXIpKHtkYXRhOmUudGV4dEVudHJ5LGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSksdGhpcy51c2U9ZS51c2V8fCIiLHRoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLHRoaXMuYm9yZGVyPW51bGwsdGhpcy5leHRyYXM9bnVsbCx0aGlzLm1hcmdpbj1udWxsfVtuLiR0b0hUTUxdKGUpe3ZhciB0LHI7Y29uc3QgYT0oMCxzLnRvU3R5bGUpKHRoaXMsImJvcmRlciIsIm1hcmdpbiIpLGk9dGhpc1tuLiRnZXRQYXJlbnRdKClbbi4kZ2V0UGFyZW50XSgpLG89e2ZvbnRTaXplOiJjYWxjKCIuY29uY2F0KChudWxsPT09KHQ9aS5mb250KXx8dm9pZCAwPT09dD92b2lkIDA6dC5zaXplKXx8MTAsInB4ICogdmFyKC0tc2NhbGUtZmFjdG9yKSkiKX0sbD1bXTtpZihpLml0ZW1zLmNoaWxkcmVuLmxlbmd0aD4wKXt2YXIgaDtjb25zdCBlPWkuaXRlbXM7bGV0IHQ9MCxyPTA7Mj09PWUuY2hpbGRyZW4ubGVuZ3RoJiYodD1lLmNoaWxkcmVuWzBdLnNhdmUscj0xLXQpO2NvbnN0IGE9ZS5jaGlsZHJlblt0XVtuLiR0b0hUTUxdKCkuaHRtbCxzPWUuY2hpbGRyZW5bcl1bbi4kdG9IVE1MXSgpLmh0bWw7bGV0IGM9ITE7Y29uc3QgdT0obnVsbD09PShoPWkudmFsdWUpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoW24uJHRleHRdKCkpfHwiIjtmb3IobGV0IGU9MCx0PWEubGVuZ3RoO2U8dDtlKyspe2NvbnN0IHQ9e25hbWU6Im9wdGlvbiIsYXR0cmlidXRlczp7dmFsdWU6c1tlXXx8YVtlXSxzdHlsZTpvfSx2YWx1ZTphW2VdfTtzW2VdPT09dSYmKHQuYXR0cmlidXRlcy5zZWxlY3RlZD1jPSEwKSxsLnB1c2godCl9Y3x8bC5zcGxpY2UoMCwwLHtuYW1lOiJvcHRpb24iLGF0dHJpYnV0ZXM6e2hpZGRlbjohMCxzZWxlY3RlZDohMH0sdmFsdWU6IiAifSl9Y29uc3QgdT17Y2xhc3M6WyJ4ZmFTZWxlY3QiXSxmaWVsZElkOmlbbi4kdWlkXSxkYXRhSWQ6KG51bGw9PT0ocj1pW24uJGRhdGFdKXx8dm9pZCAwPT09cj92b2lkIDA6cltuLiR1aWRdKXx8aVtuLiR1aWRdLHN0eWxlOmEsImFyaWEtbGFiZWwiOkMoaSksImFyaWEtcmVxdWlyZWQiOiExfTtyZXR1cm4gUyhpKSYmKHVbImFyaWEtcmVxdWlyZWQiXT0hMCx1LnJlcXVpcmVkPSEwKSwibXVsdGlTZWxlY3QiPT09dGhpcy5vcGVuJiYodS5tdWx0aXBsZT0hMCksYy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImxhYmVsIixhdHRyaWJ1dGVzOntjbGFzczpbInhmYUxhYmVsIl19LGNoaWxkcmVuOlt7bmFtZToic2VsZWN0IixjaGlsZHJlbjpsLGF0dHJpYnV0ZXM6dX1dfSl9fWNsYXNzIEogZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJjb2xvciIsITApLHRoaXMuY1NwYWNlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmNTcGFjZSxbIlNSR0IiXSksdGhpcy5pZD1lLmlkfHwiIix0aGlzLnVzZT1lLnVzZXx8IiIsdGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiIsdGhpcy52YWx1ZT1lLnZhbHVlPygwLGMuZ2V0Q29sb3IpKGUudmFsdWUpOiIiLHRoaXMuZXh0cmFzPW51bGx9W24uJGhhc1NldHRhYmxlVmFsdWVdKCl7cmV0dXJuITF9W24uJHRvU3R5bGVdKCl7cmV0dXJuIHRoaXMudmFsdWU/bC5VdGlsLm1ha2VIZXhDb2xvcih0aGlzLnZhbHVlLnIsdGhpcy52YWx1ZS5nLHRoaXMudmFsdWUuYik6bnVsbH19Y2xhc3MgWiBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImNvbWIiKSx0aGlzLmlkPWUuaWR8fCIiLHRoaXMubnVtYmVyT2ZDZWxscz0oMCxjLmdldEludGVnZXIpKHtkYXRhOmUubnVtYmVyT2ZDZWxscyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT5lPj0wfSksdGhpcy51c2U9ZS51c2V8fCIiLHRoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBRIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiY29ubmVjdCIsITApLHRoaXMuY29ubmVjdGlvbj1lLmNvbm5lY3Rpb258fCIiLHRoaXMuaWQ9ZS5pZHx8IiIsdGhpcy5yZWY9ZS5yZWZ8fCIiLHRoaXMudXNhZ2U9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUudXNhZ2UsWyJleHBvcnRBbmRJbXBvcnQiLCJleHBvcnRPbmx5IiwiaW1wb3J0T25seSJdKSx0aGlzLnVzZT1lLnVzZXx8IiIsdGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiIsdGhpcy5waWN0dXJlPW51bGx9fWNsYXNzIGVlIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiY29udGVudEFyZWEiLCEwKSx0aGlzLmg9KDAsYy5nZXRNZWFzdXJlbWVudCkoZS5oKSx0aGlzLmlkPWUuaWR8fCIiLHRoaXMubmFtZT1lLm5hbWV8fCIiLHRoaXMucmVsZXZhbnQ9KDAsYy5nZXRSZWxldmFudCkoZS5yZWxldmFudCksdGhpcy51c2U9ZS51c2V8fCIiLHRoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLHRoaXMudz0oMCxjLmdldE1lYXN1cmVtZW50KShlLncpLHRoaXMueD0oMCxjLmdldE1lYXN1cmVtZW50KShlLngsIjBwdCIpLHRoaXMueT0oMCxjLmdldE1lYXN1cmVtZW50KShlLnksIjBwdCIpLHRoaXMuZGVzYz1udWxsLHRoaXMuZXh0cmFzPW51bGx9W24uJHRvSFRNTF0oZSl7Y29uc3QgdD17bGVmdDooMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy54KSx0b3A6KDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMueSksd2lkdGg6KDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMudyksaGVpZ2h0OigwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLmgpfSxyPVsieGZhQ29udGVudGFyZWEiXTtyZXR1cm4oMCxzLmlzUHJpbnRPbmx5KSh0aGlzKSYmci5wdXNoKCJ4ZmFQcmludE9ubHkiKSxjLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiZGl2IixjaGlsZHJlbjpbXSxhdHRyaWJ1dGVzOntzdHlsZTp0LGNsYXNzOnIsaWQ6dGhpc1tuLiR1aWRdfX0pfX1jbGFzcyB0ZSBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImNvcm5lciIsITApLHRoaXMuaWQ9ZS5pZHx8IiIsdGhpcy5pbnZlcnRlZD0oMCxjLmdldEludGVnZXIpKHtkYXRhOmUuaW52ZXJ0ZWQsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KSx0aGlzLmpvaW49KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuam9pbixbInNxdWFyZSIsInJvdW5kIl0pLHRoaXMucHJlc2VuY2U9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUucHJlc2VuY2UsWyJ2aXNpYmxlIiwiaGlkZGVuIiwiaW5hY3RpdmUiLCJpbnZpc2libGUiXSksdGhpcy5yYWRpdXM9KDAsYy5nZXRNZWFzdXJlbWVudCkoZS5yYWRpdXMpLHRoaXMuc3Ryb2tlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnN0cm9rZSxbInNvbGlkIiwiZGFzaERvdCIsImRhc2hEb3REb3QiLCJkYXNoZWQiLCJkb3R0ZWQiLCJlbWJvc3NlZCIsImV0Y2hlZCIsImxvd2VyZWQiLCJyYWlzZWQiXSksdGhpcy50aGlja25lc3M9KDAsYy5nZXRNZWFzdXJlbWVudCkoZS50aGlja25lc3MsIjAuNXB0IiksdGhpcy51c2U9ZS51c2V8fCIiLHRoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLHRoaXMuY29sb3I9bnVsbCx0aGlzLmV4dHJhcz1udWxsfVtuLiR0b1N0eWxlXSgpe2NvbnN0IGU9KDAscy50b1N0eWxlKSh0aGlzLCJ2aXNpYmlsaXR5Iik7cmV0dXJuIGUucmFkaXVzPSgwLHMubWVhc3VyZVRvU3RyaW5nKSgic3F1YXJlIj09PXRoaXMuam9pbj8wOnRoaXMucmFkaXVzKSxlfX1jbGFzcyByZSBleHRlbmRzIG8uQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJkYXRlIiksdGhpcy5pZD1lLmlkfHwiIix0aGlzLm5hbWU9ZS5uYW1lfHwiIix0aGlzLnVzZT1lLnVzZXx8IiIsdGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9W24uJGZpbmFsaXplXSgpe2NvbnN0IGU9dGhpc1tuLiRjb250ZW50XS50cmltKCk7dGhpc1tuLiRjb250ZW50XT1lP25ldyBEYXRlKGUpOm51bGx9W24uJHRvSFRNTF0oZSl7cmV0dXJuIE8odGhpc1tuLiRjb250ZW50XT90aGlzW24uJGNvbnRlbnRdLnRvU3RyaW5nKCk6IiIpfX1jbGFzcyBuZSBleHRlbmRzIG8uQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJkYXRlVGltZSIpLHRoaXMuaWQ9ZS5pZHx8IiIsdGhpcy5uYW1lPWUubmFtZXx8IiIsdGhpcy51c2U9ZS51c2V8fCIiLHRoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifVtuLiRmaW5hbGl6ZV0oKXtjb25zdCBlPXRoaXNbbi4kY29udGVudF0udHJpbSgpO3RoaXNbbi4kY29udGVudF09ZT9uZXcgRGF0ZShlKTpudWxsfVtuLiR0b0hUTUxdKGUpe3JldHVybiBPKHRoaXNbbi4kY29udGVudF0/dGhpc1tuLiRjb250ZW50XS50b1N0cmluZygpOiIiKX19Y2xhc3MgYWUgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJkYXRlVGltZUVkaXQiLCEwKSx0aGlzLmhTY3JvbGxQb2xpY3k9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuaFNjcm9sbFBvbGljeSxbImF1dG8iLCJvZmYiLCJvbiJdKSx0aGlzLmlkPWUuaWR8fCIiLHRoaXMucGlja2VyPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnBpY2tlcixbImhvc3QiLCJub25lIl0pLHRoaXMudXNlPWUudXNlfHwiIix0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIix0aGlzLmJvcmRlcj1udWxsLHRoaXMuY29tYj1udWxsLHRoaXMuZXh0cmFzPW51bGwsdGhpcy5tYXJnaW49bnVsbH1bbi4kdG9IVE1MXShlKXt2YXIgdDtjb25zdCByPSgwLHMudG9TdHlsZSkodGhpcywiYm9yZGVyIiwiZm9udCIsIm1hcmdpbiIpLGE9dGhpc1tuLiRnZXRQYXJlbnRdKClbbi4kZ2V0UGFyZW50XSgpLGk9e25hbWU6ImlucHV0IixhdHRyaWJ1dGVzOnt0eXBlOiJ0ZXh0IixmaWVsZElkOmFbbi4kdWlkXSxkYXRhSWQ6KG51bGw9PT0odD1hW24uJGRhdGFdKXx8dm9pZCAwPT09dD92b2lkIDA6dFtuLiR1aWRdKXx8YVtuLiR1aWRdLGNsYXNzOlsieGZhVGV4dGZpZWxkIl0sc3R5bGU6ciwiYXJpYS1sYWJlbCI6QyhhKSwiYXJpYS1yZXF1aXJlZCI6ITF9fTtyZXR1cm4gUyhhKSYmKGkuYXR0cmlidXRlc1siYXJpYS1yZXF1aXJlZCJdPSEwLGkuYXR0cmlidXRlcy5yZXF1aXJlZD0hMCksYy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImxhYmVsIixhdHRyaWJ1dGVzOntjbGFzczpbInhmYUxhYmVsIl19LGNoaWxkcmVuOltpXX0pfX1jbGFzcyBpZSBleHRlbmRzIG8uQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJkZWNpbWFsIiksdGhpcy5mcmFjRGlnaXRzPSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5mcmFjRGlnaXRzLGRlZmF1bHRWYWx1ZToyLHZhbGlkYXRlOmU9PiEwfSksdGhpcy5pZD1lLmlkfHwiIix0aGlzLmxlYWREaWdpdHM9KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmxlYWREaWdpdHMsZGVmYXVsdFZhbHVlOi0xLHZhbGlkYXRlOmU9PiEwfSksdGhpcy5uYW1lPWUubmFtZXx8IiIsdGhpcy51c2U9ZS51c2V8fCIiLHRoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifVtuLiRmaW5hbGl6ZV0oKXtjb25zdCBlPXBhcnNlRmxvYXQodGhpc1tuLiRjb250ZW50XS50cmltKCkpO3RoaXNbbi4kY29udGVudF09aXNOYU4oZSk/bnVsbDplfVtuLiR0b0hUTUxdKGUpe3JldHVybiBPKG51bGwhPT10aGlzW24uJGNvbnRlbnRdP3RoaXNbbi4kY29udGVudF0udG9TdHJpbmcoKToiIil9fWNsYXNzIHNlIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiZGVmYXVsdFVpIiwhMCksdGhpcy5pZD1lLmlkfHwiIix0aGlzLnVzZT1lLnVzZXx8IiIsdGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiIsdGhpcy5leHRyYXM9bnVsbH19Y2xhc3Mgb2UgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJkZXNjIiwhMCksdGhpcy5pZD1lLmlkfHwiIix0aGlzLnVzZT1lLnVzZXx8IiIsdGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiIsdGhpcy5ib29sZWFuPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuZGF0ZT1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmRhdGVUaW1lPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuZGVjaW1hbD1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmV4RGF0YT1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmZsb2F0PW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuaW1hZ2U9bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy5pbnRlZ2VyPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMudGV4dD1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLnRpbWU9bmV3IG8uWEZBT2JqZWN0QXJyYXl9fWNsYXNzIGNlIGV4dGVuZHMgby5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiZGlnZXN0TWV0aG9kIixbIiIsIlNIQTEiLCJTSEEyNTYiLCJTSEE1MTIiLCJSSVBFTUQxNjAiXSksdGhpcy5pZD1lLmlkfHwiIix0aGlzLnVzZT1lLnVzZXx8IiIsdGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIGxlIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiZGlnZXN0TWV0aG9kcyIsITApLHRoaXMuaWQ9ZS5pZHx8IiIsdGhpcy50eXBlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pLHRoaXMudXNlPWUudXNlfHwiIix0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIix0aGlzLmRpZ2VzdE1ldGhvZD1uZXcgby5YRkFPYmplY3RBcnJheX19Y2xhc3MgaGUgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJkcmF3IiwhMCksdGhpcy5hbmNob3JUeXBlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmFuY2hvclR5cGUsWyJ0b3BMZWZ0IiwiYm90dG9tQ2VudGVyIiwiYm90dG9tTGVmdCIsImJvdHRvbVJpZ2h0IiwibWlkZGxlQ2VudGVyIiwibWlkZGxlTGVmdCIsIm1pZGRsZVJpZ2h0IiwidG9wQ2VudGVyIiwidG9wUmlnaHQiXSksdGhpcy5jb2xTcGFuPSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5jb2xTcGFuLGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmU9PmU+PTF8fC0xPT09ZX0pLHRoaXMuaD1lLmg/KDAsYy5nZXRNZWFzdXJlbWVudCkoZS5oKToiIix0aGlzLmhBbGlnbj0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5oQWxpZ24sWyJsZWZ0IiwiY2VudGVyIiwianVzdGlmeSIsImp1c3RpZnlBbGwiLCJyYWRpeCIsInJpZ2h0Il0pLHRoaXMuaWQ9ZS5pZHx8IiIsdGhpcy5sb2NhbGU9ZS5sb2NhbGV8fCIiLHRoaXMubWF4SD0oMCxjLmdldE1lYXN1cmVtZW50KShlLm1heEgsIjBwdCIpLHRoaXMubWF4Vz0oMCxjLmdldE1lYXN1cmVtZW50KShlLm1heFcsIjBwdCIpLHRoaXMubWluSD0oMCxjLmdldE1lYXN1cmVtZW50KShlLm1pbkgsIjBwdCIpLHRoaXMubWluVz0oMCxjLmdldE1lYXN1cmVtZW50KShlLm1pblcsIjBwdCIpLHRoaXMubmFtZT1lLm5hbWV8fCIiLHRoaXMucHJlc2VuY2U9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUucHJlc2VuY2UsWyJ2aXNpYmxlIiwiaGlkZGVuIiwiaW5hY3RpdmUiLCJpbnZpc2libGUiXSksdGhpcy5yZWxldmFudD0oMCxjLmdldFJlbGV2YW50KShlLnJlbGV2YW50KSx0aGlzLnJvdGF0ZT0oMCxjLmdldEludGVnZXIpKHtkYXRhOmUucm90YXRlLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PmUlOTA9PTB9KSx0aGlzLnVzZT1lLnVzZXx8IiIsdGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiIsdGhpcy53PWUudz8oMCxjLmdldE1lYXN1cmVtZW50KShlLncpOiIiLHRoaXMueD0oMCxjLmdldE1lYXN1cmVtZW50KShlLngsIjBwdCIpLHRoaXMueT0oMCxjLmdldE1lYXN1cmVtZW50KShlLnksIjBwdCIpLHRoaXMuYXNzaXN0PW51bGwsdGhpcy5ib3JkZXI9bnVsbCx0aGlzLmNhcHRpb249bnVsbCx0aGlzLmRlc2M9bnVsbCx0aGlzLmV4dHJhcz1udWxsLHRoaXMuZm9udD1udWxsLHRoaXMua2VlcD1udWxsLHRoaXMubWFyZ2luPW51bGwsdGhpcy5wYXJhPW51bGwsdGhpcy50cmF2ZXJzYWw9bnVsbCx0aGlzLnVpPW51bGwsdGhpcy52YWx1ZT1udWxsLHRoaXMuc2V0UHJvcGVydHk9bmV3IG8uWEZBT2JqZWN0QXJyYXl9W24uJHNldFZhbHVlXShlKXt2KHRoaXMsZSl9W24uJHRvSFRNTF0oZSl7aWYoQSh0aGlzKSwiaGlkZGVuIj09PXRoaXMucHJlc2VuY2V8fCJpbmFjdGl2ZSI9PT10aGlzLnByZXNlbmNlKXJldHVybiBjLkhUTUxSZXN1bHQuRU1QVFk7KDAscy5maXhEaW1lbnNpb25zKSh0aGlzKSx0aGlzW24uJHB1c2hQYXJhXSgpO2NvbnN0IHQ9dGhpcy53LHI9dGhpcy5oLHt3OmEsaDpvLGlzQnJva2VuOmx9PSgwLHMubGF5b3V0Tm9kZSkodGhpcyxlKTtpZihhJiYiIj09PXRoaXMudyl7aWYobCYmdGhpc1tuLiRnZXRTdWJmb3JtUGFyZW50XSgpW24uJGlzVGhlcmVNb3JlV2lkdGhdKCkpcmV0dXJuIHRoaXNbbi4kcG9wUGFyYV0oKSxjLkhUTUxSZXN1bHQuRkFJTFVSRTt0aGlzLnc9YX1pZihvJiYiIj09PXRoaXMuaCYmKHRoaXMuaD1vKSxGKHRoaXMpLCEoMCxpLmNoZWNrRGltZW5zaW9ucykodGhpcyxlKSlyZXR1cm4gdGhpcy53PXQsdGhpcy5oPXIsdGhpc1tuLiRwb3BQYXJhXSgpLGMuSFRNTFJlc3VsdC5GQUlMVVJFO0kodGhpcyk7Y29uc3QgaD0oMCxzLnRvU3R5bGUpKHRoaXMsImZvbnQiLCJoQWxpZ24iLCJkaW1lbnNpb25zIiwicG9zaXRpb24iLCJwcmVzZW5jZSIsInJvdGF0ZSIsImFuY2hvclR5cGUiLCJib3JkZXIiLCJtYXJnaW4iKTsoMCxzLnNldE1pbk1heERpbWVuc2lvbnMpKHRoaXMsaCksaC5tYXJnaW4mJihoLnBhZGRpbmc9aC5tYXJnaW4sZGVsZXRlIGgubWFyZ2luKTtjb25zdCB1PVsieGZhRHJhdyJdO3RoaXMuZm9udCYmdS5wdXNoKCJ4ZmFGb250IiksKDAscy5pc1ByaW50T25seSkodGhpcykmJnUucHVzaCgieGZhUHJpbnRPbmx5Iik7Y29uc3QgZD17c3R5bGU6aCxpZDp0aGlzW24uJHVpZF0sY2xhc3M6dX07dGhpcy5uYW1lJiYoZC54ZmFOYW1lPXRoaXMubmFtZSk7Y29uc3QgZj17bmFtZToiZGl2IixhdHRyaWJ1dGVzOmQsY2hpbGRyZW46W119O2sodGhpcyxkKTtjb25zdCBnPSgwLHMuY29tcHV0ZUJib3gpKHRoaXMsZixlKSxwPXRoaXMudmFsdWU/dGhpcy52YWx1ZVtuLiR0b0hUTUxdKGUpLmh0bWw6bnVsbDtyZXR1cm4gbnVsbD09PXA/KHRoaXMudz10LHRoaXMuaD1yLHRoaXNbbi4kcG9wUGFyYV0oKSxjLkhUTUxSZXN1bHQuc3VjY2VzcygoMCxzLmNyZWF0ZVdyYXBwZXIpKHRoaXMsZiksZykpOihmLmNoaWxkcmVuLnB1c2gocCksKDAscy5zZXRQYXJhKSh0aGlzLGgscCksdGhpcy53PXQsdGhpcy5oPXIsdGhpc1tuLiRwb3BQYXJhXSgpLGMuSFRNTFJlc3VsdC5zdWNjZXNzKCgwLHMuY3JlYXRlV3JhcHBlcikodGhpcyxmKSxnKSl9fWNsYXNzIHVlIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiZWRnZSIsITApLHRoaXMuY2FwPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmNhcCxbInNxdWFyZSIsImJ1dHQiLCJyb3VuZCJdKSx0aGlzLmlkPWUuaWR8fCIiLHRoaXMucHJlc2VuY2U9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUucHJlc2VuY2UsWyJ2aXNpYmxlIiwiaGlkZGVuIiwiaW5hY3RpdmUiLCJpbnZpc2libGUiXSksdGhpcy5zdHJva2U9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuc3Ryb2tlLFsic29saWQiLCJkYXNoRG90IiwiZGFzaERvdERvdCIsImRhc2hlZCIsImRvdHRlZCIsImVtYm9zc2VkIiwiZXRjaGVkIiwibG93ZXJlZCIsInJhaXNlZCJdKSx0aGlzLnRoaWNrbmVzcz0oMCxjLmdldE1lYXN1cmVtZW50KShlLnRoaWNrbmVzcywiMC41cHQiKSx0aGlzLnVzZT1lLnVzZXx8IiIsdGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiIsdGhpcy5jb2xvcj1udWxsLHRoaXMuZXh0cmFzPW51bGx9W24uJHRvU3R5bGVdKCl7Y29uc3QgZT0oMCxzLnRvU3R5bGUpKHRoaXMsInZpc2liaWxpdHkiKTtpZihPYmplY3QuYXNzaWduKGUse2xpbmVjYXA6dGhpcy5jYXAsd2lkdGg6KDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMudGhpY2tuZXNzKSxjb2xvcjp0aGlzLmNvbG9yP3RoaXMuY29sb3Jbbi4kdG9TdHlsZV0oKToiIzAwMDAwMCIsc3R5bGU6IiJ9KSwidmlzaWJsZSIhPT10aGlzLnByZXNlbmNlKWUuc3R5bGU9Im5vbmUiO2Vsc2Ugc3dpdGNoKHRoaXMuc3Ryb2tlKXtjYXNlInNvbGlkIjplLnN0eWxlPSJzb2xpZCI7YnJlYWs7Y2FzZSJkYXNoRG90IjpjYXNlImRhc2hEb3REb3QiOmNhc2UiZGFzaGVkIjplLnN0eWxlPSJkYXNoZWQiO2JyZWFrO2Nhc2UiZG90dGVkIjplLnN0eWxlPSJkb3R0ZWQiO2JyZWFrO2Nhc2UiZW1ib3NzZWQiOmUuc3R5bGU9InJpZGdlIjticmVhaztjYXNlImV0Y2hlZCI6ZS5zdHlsZT0iZ3Jvb3ZlIjticmVhaztjYXNlImxvd2VyZWQiOmUuc3R5bGU9Imluc2V0IjticmVhaztjYXNlInJhaXNlZCI6ZS5zdHlsZT0ib3V0c2V0In1yZXR1cm4gZX19Y2xhc3MgZGUgZXh0ZW5kcyBvLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJlbmNvZGluZyIsWyJhZGJlLng1MDkucnNhX3NoYTEiLCJhZGJlLnBrY3M3LmRldGFjaGVkIiwiYWRiZS5wa2NzNy5zaGExIl0pLHRoaXMuaWQ9ZS5pZHx8IiIsdGhpcy51c2U9ZS51c2V8fCIiLHRoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBmZSBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImVuY29kaW5ncyIsITApLHRoaXMuaWQ9ZS5pZHx8IiIsdGhpcy50eXBlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pLHRoaXMudXNlPWUudXNlfHwiIix0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIix0aGlzLmVuY29kaW5nPW5ldyBvLlhGQU9iamVjdEFycmF5fX1jbGFzcyBnZSBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImVuY3J5cHQiLCEwKSx0aGlzLmlkPWUuaWR8fCIiLHRoaXMudXNlPWUudXNlfHwiIix0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIix0aGlzLmNlcnRpZmljYXRlPW51bGx9fWNsYXNzIHBlIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiZW5jcnlwdERhdGEiLCEwKSx0aGlzLmlkPWUuaWR8fCIiLHRoaXMub3BlcmF0aW9uPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLm9wZXJhdGlvbixbImVuY3J5cHQiLCJkZWNyeXB0Il0pLHRoaXMudGFyZ2V0PWUudGFyZ2V0fHwiIix0aGlzLnVzZT1lLnVzZXx8IiIsdGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiIsdGhpcy5maWx0ZXI9bnVsbCx0aGlzLm1hbmlmZXN0PW51bGx9fWNsYXNzIG1lIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiZW5jcnlwdGlvbiIsITApLHRoaXMuaWQ9ZS5pZHx8IiIsdGhpcy50eXBlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pLHRoaXMudXNlPWUudXNlfHwiIix0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIix0aGlzLmNlcnRpZmljYXRlPW5ldyBvLlhGQU9iamVjdEFycmF5fX1jbGFzcyBiZSBleHRlbmRzIG8uT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImVuY3J5cHRpb25NZXRob2QiLFsiIiwiQUVTMjU2LUNCQyIsIlRSSVBMRURFUy1DQkMiLCJBRVMxMjgtQ0JDIiwiQUVTMTkyLUNCQyJdKSx0aGlzLmlkPWUuaWR8fCIiLHRoaXMudXNlPWUudXNlfHwiIix0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgeWUgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJlbmNyeXB0aW9uTWV0aG9kcyIsITApLHRoaXMuaWQ9ZS5pZHx8IiIsdGhpcy50eXBlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pLHRoaXMudXNlPWUudXNlfHwiIix0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIix0aGlzLmVuY3J5cHRpb25NZXRob2Q9bmV3IG8uWEZBT2JqZWN0QXJyYXl9fWNsYXNzIHdlIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiZXZlbnQiLCEwKSx0aGlzLmFjdGl2aXR5PSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmFjdGl2aXR5LFsiY2xpY2siLCJjaGFuZ2UiLCJkb2NDbG9zZSIsImRvY1JlYWR5IiwiZW50ZXIiLCJleGl0IiwiZnVsbCIsImluZGV4Q2hhbmdlIiwiaW5pdGlhbGl6ZSIsIm1vdXNlRG93biIsIm1vdXNlRW50ZXIiLCJtb3VzZUV4aXQiLCJtb3VzZVVwIiwicG9zdEV4ZWN1dGUiLCJwb3N0T3BlbiIsInBvc3RQcmludCIsInBvc3RTYXZlIiwicG9zdFNpZ24iLCJwb3N0U3VibWl0IiwicHJlRXhlY3V0ZSIsInByZU9wZW4iLCJwcmVQcmludCIsInByZVNhdmUiLCJwcmVTaWduIiwicHJlU3VibWl0IiwicmVhZHkiLCJ2YWxpZGF0aW9uU3RhdGUiXSksdGhpcy5pZD1lLmlkfHwiIix0aGlzLmxpc3Rlbj0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5saXN0ZW4sWyJyZWZPbmx5IiwicmVmQW5kRGVzY2VuZGVudHMiXSksdGhpcy5uYW1lPWUubmFtZXx8IiIsdGhpcy5yZWY9ZS5yZWZ8fCIiLHRoaXMudXNlPWUudXNlfHwiIix0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIix0aGlzLmV4dHJhcz1udWxsLHRoaXMuZW5jcnlwdERhdGE9bnVsbCx0aGlzLmV4ZWN1dGU9bnVsbCx0aGlzLnNjcmlwdD1udWxsLHRoaXMuc2lnbkRhdGE9bnVsbCx0aGlzLnN1Ym1pdD1udWxsfX1jbGFzcyB2ZSBleHRlbmRzIG8uQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJleERhdGEiKSx0aGlzLmNvbnRlbnRUeXBlPWUuY29udGVudFR5cGV8fCIiLHRoaXMuaHJlZj1lLmhyZWZ8fCIiLHRoaXMuaWQ9ZS5pZHx8IiIsdGhpcy5tYXhMZW5ndGg9KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLm1heExlbmd0aCxkZWZhdWx0VmFsdWU6LTEsdmFsaWRhdGU6ZT0+ZT49LTF9KSx0aGlzLm5hbWU9ZS5uYW1lfHwiIix0aGlzLnJpZD1lLnJpZHx8IiIsdGhpcy50cmFuc2ZlckVuY29kaW5nPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnRyYW5zZmVyRW5jb2RpbmcsWyJub25lIiwiYmFzZTY0IiwicGFja2FnZSJdKSx0aGlzLnVzZT1lLnVzZXx8IiIsdGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9W24uJGlzQ0RBVEFYbWxdKCl7cmV0dXJuInRleHQvaHRtbCI9PT10aGlzLmNvbnRlbnRUeXBlfVtuLiRvbkNoaWxkXShlKXtyZXR1cm4oInRleHQvaHRtbCI9PT10aGlzLmNvbnRlbnRUeXBlJiZlW24uJG5hbWVzcGFjZUlkXT09PWEuTmFtZXNwYWNlSWRzLnhodG1sLmlkfHwidGV4dC94bWwiPT09dGhpcy5jb250ZW50VHlwZSkmJih0aGlzW24uJGNvbnRlbnRdPWUsITApfVtuLiR0b0hUTUxdKGUpe3JldHVybiJ0ZXh0L2h0bWwiPT09dGhpcy5jb250ZW50VHlwZSYmdGhpc1tuLiRjb250ZW50XT90aGlzW24uJGNvbnRlbnRdW24uJHRvSFRNTF0oZSk6Yy5IVE1MUmVzdWx0LkVNUFRZfX1jbGFzcyB4ZSBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImV4T2JqZWN0IiwhMCksdGhpcy5hcmNoaXZlPWUuYXJjaGl2ZXx8IiIsdGhpcy5jbGFzc0lkPWUuY2xhc3NJZHx8IiIsdGhpcy5jb2RlQmFzZT1lLmNvZGVCYXNlfHwiIix0aGlzLmNvZGVUeXBlPWUuY29kZVR5cGV8fCIiLHRoaXMuaWQ9ZS5pZHx8IiIsdGhpcy5uYW1lPWUubmFtZXx8IiIsdGhpcy51c2U9ZS51c2V8fCIiLHRoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLHRoaXMuZXh0cmFzPW51bGwsdGhpcy5ib29sZWFuPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuZGF0ZT1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmRhdGVUaW1lPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuZGVjaW1hbD1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmV4RGF0YT1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmV4T2JqZWN0PW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuZmxvYXQ9bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy5pbWFnZT1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmludGVnZXI9bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy50ZXh0PW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMudGltZT1uZXcgby5YRkFPYmplY3RBcnJheX19Y2xhc3MgU2UgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJleGNsR3JvdXAiLCEwKSx0aGlzLmFjY2Vzcz0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5hY2Nlc3MsWyJvcGVuIiwibm9uSW50ZXJhY3RpdmUiLCJwcm90ZWN0ZWQiLCJyZWFkT25seSJdKSx0aGlzLmFjY2Vzc0tleT1lLmFjY2Vzc0tleXx8IiIsdGhpcy5hbmNob3JUeXBlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmFuY2hvclR5cGUsWyJ0b3BMZWZ0IiwiYm90dG9tQ2VudGVyIiwiYm90dG9tTGVmdCIsImJvdHRvbVJpZ2h0IiwibWlkZGxlQ2VudGVyIiwibWlkZGxlTGVmdCIsIm1pZGRsZVJpZ2h0IiwidG9wQ2VudGVyIiwidG9wUmlnaHQiXSksdGhpcy5jb2xTcGFuPSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5jb2xTcGFuLGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmU9PmU+PTF8fC0xPT09ZX0pLHRoaXMuaD1lLmg/KDAsYy5nZXRNZWFzdXJlbWVudCkoZS5oKToiIix0aGlzLmhBbGlnbj0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5oQWxpZ24sWyJsZWZ0IiwiY2VudGVyIiwianVzdGlmeSIsImp1c3RpZnlBbGwiLCJyYWRpeCIsInJpZ2h0Il0pLHRoaXMuaWQ9ZS5pZHx8IiIsdGhpcy5sYXlvdXQ9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUubGF5b3V0LFsicG9zaXRpb24iLCJsci10YiIsInJsLXJvdyIsInJsLXRiIiwicm93IiwidGFibGUiLCJ0YiJdKSx0aGlzLm1heEg9KDAsYy5nZXRNZWFzdXJlbWVudCkoZS5tYXhILCIwcHQiKSx0aGlzLm1heFc9KDAsYy5nZXRNZWFzdXJlbWVudCkoZS5tYXhXLCIwcHQiKSx0aGlzLm1pbkg9KDAsYy5nZXRNZWFzdXJlbWVudCkoZS5taW5ILCIwcHQiKSx0aGlzLm1pblc9KDAsYy5nZXRNZWFzdXJlbWVudCkoZS5taW5XLCIwcHQiKSx0aGlzLm5hbWU9ZS5uYW1lfHwiIix0aGlzLnByZXNlbmNlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnByZXNlbmNlLFsidmlzaWJsZSIsImhpZGRlbiIsImluYWN0aXZlIiwiaW52aXNpYmxlIl0pLHRoaXMucmVsZXZhbnQ9KDAsYy5nZXRSZWxldmFudCkoZS5yZWxldmFudCksdGhpcy51c2U9ZS51c2V8fCIiLHRoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLHRoaXMudz1lLnc/KDAsYy5nZXRNZWFzdXJlbWVudCkoZS53KToiIix0aGlzLng9KDAsYy5nZXRNZWFzdXJlbWVudCkoZS54LCIwcHQiKSx0aGlzLnk9KDAsYy5nZXRNZWFzdXJlbWVudCkoZS55LCIwcHQiKSx0aGlzLmFzc2lzdD1udWxsLHRoaXMuYmluZD1udWxsLHRoaXMuYm9yZGVyPW51bGwsdGhpcy5jYWxjdWxhdGU9bnVsbCx0aGlzLmNhcHRpb249bnVsbCx0aGlzLmRlc2M9bnVsbCx0aGlzLmV4dHJhcz1udWxsLHRoaXMubWFyZ2luPW51bGwsdGhpcy5wYXJhPW51bGwsdGhpcy50cmF2ZXJzYWw9bnVsbCx0aGlzLnZhbGlkYXRlPW51bGwsdGhpcy5jb25uZWN0PW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuZXZlbnQ9bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy5maWVsZD1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLnNldFByb3BlcnR5PW5ldyBvLlhGQU9iamVjdEFycmF5fVtuLiRpc0JpbmRhYmxlXSgpe3JldHVybiEwfVtuLiRoYXNTZXR0YWJsZVZhbHVlXSgpe3JldHVybiEwfVtuLiRzZXRWYWx1ZV0oZSl7Zm9yKGNvbnN0IHQgb2YgdGhpcy5maWVsZC5jaGlsZHJlbil7aWYoIXQudmFsdWUpe2NvbnN0IGU9bmV3IE50KHt9KTt0W24uJGFwcGVuZENoaWxkXShlKSx0LnZhbHVlPWV9dC52YWx1ZVtuLiRzZXRWYWx1ZV0oZSl9fVtuLiRpc1RoZXJlTW9yZVdpZHRoXSgpe3JldHVybiB0aGlzLmxheW91dC5lbmRzV2l0aCgiLXRiIikmJjA9PT10aGlzW24uJGV4dHJhXS5hdHRlbXB0JiZ0aGlzW24uJGV4dHJhXS5udW1iZXJJbkxpbmU+MHx8dGhpc1tuLiRnZXRQYXJlbnRdKClbbi4kaXNUaGVyZU1vcmVXaWR0aF0oKX1bbi4kaXNTcGxpdHRhYmxlXSgpe3ZhciBlO2NvbnN0IHQ9dGhpc1tuLiRnZXRTdWJmb3JtUGFyZW50XSgpO3JldHVybiEhdFtuLiRpc1NwbGl0dGFibGVdKCkmJih2b2lkIDAhPT10aGlzW24uJGV4dHJhXS5faXNTcGxpdHRhYmxlP3RoaXNbbi4kZXh0cmFdLl9pc1NwbGl0dGFibGU6InBvc2l0aW9uIj09PXRoaXMubGF5b3V0fHx0aGlzLmxheW91dC5pbmNsdWRlcygicm93Iik/KHRoaXNbbi4kZXh0cmFdLl9pc1NwbGl0dGFibGU9ITEsITEpOiEobnVsbCE9PShlPXQubGF5b3V0KSYmdm9pZCAwIT09ZSYmZS5lbmRzV2l0aCgiLXRiIikmJjAhPT10W24uJGV4dHJhXS5udW1iZXJJbkxpbmV8fCh0aGlzW24uJGV4dHJhXS5faXNTcGxpdHRhYmxlPSEwLDApKSl9W24uJGZsdXNoSFRNTF0oKXtyZXR1cm4oMCxpLmZsdXNoSFRNTCkodGhpcyl9W24uJGFkZEhUTUxdKGUsdCl7KDAsaS5hZGRIVE1MKSh0aGlzLGUsdCl9W24uJGdldEF2YWlsYWJsZVNwYWNlXSgpe3JldHVybigwLGkuZ2V0QXZhaWxhYmxlU3BhY2UpKHRoaXMpfVtuLiR0b0hUTUxdKGUpe2lmKEEodGhpcyksImhpZGRlbiI9PT10aGlzLnByZXNlbmNlfHwiaW5hY3RpdmUiPT09dGhpcy5wcmVzZW5jZXx8MD09PXRoaXMuaHx8MD09PXRoaXMudylyZXR1cm4gYy5IVE1MUmVzdWx0LkVNUFRZOygwLHMuZml4RGltZW5zaW9ucykodGhpcyk7Y29uc3QgdD1bXSxyPXtpZDp0aGlzW24uJHVpZF0sY2xhc3M6W119OygwLHMuc2V0QWNjZXNzKSh0aGlzLHIuY2xhc3MpLHRoaXNbbi4kZXh0cmFdfHwodGhpc1tuLiRleHRyYV09T2JqZWN0LmNyZWF0ZShudWxsKSksT2JqZWN0LmFzc2lnbih0aGlzW24uJGV4dHJhXSx7Y2hpbGRyZW46dCxhdHRyaWJ1dGVzOnIsYXR0ZW1wdDowLGxpbmU6bnVsbCxudW1iZXJJbkxpbmU6MCxhdmFpbGFibGVTcGFjZTp7d2lkdGg6TWF0aC5taW4odGhpcy53fHwxLzAsZS53aWR0aCksaGVpZ2h0Ok1hdGgubWluKHRoaXMuaHx8MS8wLGUuaGVpZ2h0KX0sd2lkdGg6MCxoZWlnaHQ6MCxwcmV2SGVpZ2h0OjAsY3VycmVudFdpZHRoOjB9KTtjb25zdCBhPXRoaXNbbi4kaXNTcGxpdHRhYmxlXSgpO2lmKGF8fEYodGhpcyksISgwLGkuY2hlY2tEaW1lbnNpb25zKSh0aGlzLGUpKXJldHVybiBjLkhUTUxSZXN1bHQuRkFJTFVSRTtjb25zdCBvPW5ldyBTZXQoWyJmaWVsZCJdKTtpZih0aGlzLmxheW91dC5pbmNsdWRlcygicm93Iikpe2NvbnN0IGU9dGhpc1tuLiRnZXRTdWJmb3JtUGFyZW50XSgpLmNvbHVtbldpZHRocztBcnJheS5pc0FycmF5KGUpJiZlLmxlbmd0aD4wJiYodGhpc1tuLiRleHRyYV0uY29sdW1uV2lkdGhzPWUsdGhpc1tuLiRleHRyYV0uY3VycmVudENvbHVtbj0wKX1jb25zdCBsPSgwLHMudG9TdHlsZSkodGhpcywiYW5jaG9yVHlwZSIsImRpbWVuc2lvbnMiLCJwb3NpdGlvbiIsInByZXNlbmNlIiwiYm9yZGVyIiwibWFyZ2luIiwiaEFsaWduIiksaD1bInhmYUV4Y2xncm91cCJdLHU9KDAscy5sYXlvdXRDbGFzcykodGhpcyk7dSYmaC5wdXNoKHUpLCgwLHMuaXNQcmludE9ubHkpKHRoaXMpJiZoLnB1c2goInhmYVByaW50T25seSIpLHIuc3R5bGU9bCxyLmNsYXNzPWgsdGhpcy5uYW1lJiYoci54ZmFOYW1lPXRoaXMubmFtZSksdGhpc1tuLiRwdXNoUGFyYV0oKTtjb25zdCBkPSJsci10YiI9PT10aGlzLmxheW91dHx8InJsLXRiIj09PXRoaXMubGF5b3V0LGY9ZD8yOjE7Zm9yKDt0aGlzW24uJGV4dHJhXS5hdHRlbXB0PGY7dGhpc1tuLiRleHRyYV0uYXR0ZW1wdCsrKXtkJiYxPT09dGhpc1tuLiRleHRyYV0uYXR0ZW1wdCYmKHRoaXNbbi4kZXh0cmFdLm51bWJlckluTGluZT0wKTtjb25zdCBlPXRoaXNbbi4kY2hpbGRyZW5Ub0hUTUxdKHtmaWx0ZXI6byxpbmNsdWRlOiEwfSk7aWYoZS5zdWNjZXNzKWJyZWFrO2lmKGUuaXNCcmVhaygpKXJldHVybiB0aGlzW24uJHBvcFBhcmFdKCksZTtpZihkJiYwPT09dGhpc1tuLiRleHRyYV0uYXR0ZW1wdCYmMD09PXRoaXNbbi4kZXh0cmFdLm51bWJlckluTGluZSYmIXRoaXNbbi4kZ2V0VGVtcGxhdGVSb290XSgpW24uJGV4dHJhXS5ub0xheW91dEZhaWx1cmUpe3RoaXNbbi4kZXh0cmFdLmF0dGVtcHQ9ZjticmVha319aWYodGhpc1tuLiRwb3BQYXJhXSgpLGF8fEkodGhpcyksdGhpc1tuLiRleHRyYV0uYXR0ZW1wdD09PWYpcmV0dXJuIGF8fGRlbGV0ZSB0aGlzW24uJGV4dHJhXSxjLkhUTUxSZXN1bHQuRkFJTFVSRTtsZXQgZz0wLHA9MDt0aGlzLm1hcmdpbiYmKGc9dGhpcy5tYXJnaW4ubGVmdEluc2V0K3RoaXMubWFyZ2luLnJpZ2h0SW5zZXQscD10aGlzLm1hcmdpbi50b3BJbnNldCt0aGlzLm1hcmdpbi5ib3R0b21JbnNldCk7Y29uc3QgbT1NYXRoLm1heCh0aGlzW24uJGV4dHJhXS53aWR0aCtnLHRoaXMud3x8MCksYj1NYXRoLm1heCh0aGlzW24uJGV4dHJhXS5oZWlnaHQrcCx0aGlzLmh8fDApLHk9W3RoaXMueCx0aGlzLnksbSxiXTsiIj09PXRoaXMudyYmKGwud2lkdGg9KDAscy5tZWFzdXJlVG9TdHJpbmcpKG0pKSwiIj09PXRoaXMuaCYmKGwuaGVpZ2h0PSgwLHMubWVhc3VyZVRvU3RyaW5nKShiKSk7Y29uc3Qgdz17bmFtZToiZGl2IixhdHRyaWJ1dGVzOnIsY2hpbGRyZW46dH07cmV0dXJuIGsodGhpcyxyKSxkZWxldGUgdGhpc1tuLiRleHRyYV0sYy5IVE1MUmVzdWx0LnN1Y2Nlc3MoKDAscy5jcmVhdGVXcmFwcGVyKSh0aGlzLHcpLHkpfX1jbGFzcyBBZSBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImV4ZWN1dGUiKSx0aGlzLmNvbm5lY3Rpb249ZS5jb25uZWN0aW9ufHwiIix0aGlzLmV4ZWN1dGVUeXBlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmV4ZWN1dGVUeXBlLFsiaW1wb3J0IiwicmVtZXJnZSJdKSx0aGlzLmlkPWUuaWR8fCIiLHRoaXMucnVuQXQ9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUucnVuQXQsWyJjbGllbnQiLCJib3RoIiwic2VydmVyIl0pLHRoaXMudXNlPWUudXNlfHwiIix0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3Mga2UgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJleHRyYXMiLCEwKSx0aGlzLmlkPWUuaWR8fCIiLHRoaXMubmFtZT1lLm5hbWV8fCIiLHRoaXMudXNlPWUudXNlfHwiIix0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIix0aGlzLmJvb2xlYW49bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy5kYXRlPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuZGF0ZVRpbWU9bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy5kZWNpbWFsPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuZXhEYXRhPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuZXh0cmFzPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuZmxvYXQ9bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy5pbWFnZT1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmludGVnZXI9bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy50ZXh0PW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMudGltZT1uZXcgby5YRkFPYmplY3RBcnJheX19Y2xhc3MgQ2UgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJmaWVsZCIsITApLHRoaXMuYWNjZXNzPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmFjY2VzcyxbIm9wZW4iLCJub25JbnRlcmFjdGl2ZSIsInByb3RlY3RlZCIsInJlYWRPbmx5Il0pLHRoaXMuYWNjZXNzS2V5PWUuYWNjZXNzS2V5fHwiIix0aGlzLmFuY2hvclR5cGU9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuYW5jaG9yVHlwZSxbInRvcExlZnQiLCJib3R0b21DZW50ZXIiLCJib3R0b21MZWZ0IiwiYm90dG9tUmlnaHQiLCJtaWRkbGVDZW50ZXIiLCJtaWRkbGVMZWZ0IiwibWlkZGxlUmlnaHQiLCJ0b3BDZW50ZXIiLCJ0b3BSaWdodCJdKSx0aGlzLmNvbFNwYW49KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmNvbFNwYW4sZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZT0+ZT49MXx8LTE9PT1lfSksdGhpcy5oPWUuaD8oMCxjLmdldE1lYXN1cmVtZW50KShlLmgpOiIiLHRoaXMuaEFsaWduPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmhBbGlnbixbImxlZnQiLCJjZW50ZXIiLCJqdXN0aWZ5IiwianVzdGlmeUFsbCIsInJhZGl4IiwicmlnaHQiXSksdGhpcy5pZD1lLmlkfHwiIix0aGlzLmxvY2FsZT1lLmxvY2FsZXx8IiIsdGhpcy5tYXhIPSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUubWF4SCwiMHB0IiksdGhpcy5tYXhXPSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUubWF4VywiMHB0IiksdGhpcy5taW5IPSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUubWluSCwiMHB0IiksdGhpcy5taW5XPSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUubWluVywiMHB0IiksdGhpcy5uYW1lPWUubmFtZXx8IiIsdGhpcy5wcmVzZW5jZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKSx0aGlzLnJlbGV2YW50PSgwLGMuZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpLHRoaXMucm90YXRlPSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5yb3RhdGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+ZSU5MD09MH0pLHRoaXMudXNlPWUudXNlfHwiIix0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIix0aGlzLnc9ZS53PygwLGMuZ2V0TWVhc3VyZW1lbnQpKGUudyk6IiIsdGhpcy54PSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUueCwiMHB0IiksdGhpcy55PSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUueSwiMHB0IiksdGhpcy5hc3Npc3Q9bnVsbCx0aGlzLmJpbmQ9bnVsbCx0aGlzLmJvcmRlcj1udWxsLHRoaXMuY2FsY3VsYXRlPW51bGwsdGhpcy5jYXB0aW9uPW51bGwsdGhpcy5kZXNjPW51bGwsdGhpcy5leHRyYXM9bnVsbCx0aGlzLmZvbnQ9bnVsbCx0aGlzLmZvcm1hdD1udWxsLHRoaXMuaXRlbXM9bmV3IG8uWEZBT2JqZWN0QXJyYXkoMiksdGhpcy5rZWVwPW51bGwsdGhpcy5tYXJnaW49bnVsbCx0aGlzLnBhcmE9bnVsbCx0aGlzLnRyYXZlcnNhbD1udWxsLHRoaXMudWk9bnVsbCx0aGlzLnZhbGlkYXRlPW51bGwsdGhpcy52YWx1ZT1udWxsLHRoaXMuYmluZEl0ZW1zPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuY29ubmVjdD1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmV2ZW50PW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuc2V0UHJvcGVydHk9bmV3IG8uWEZBT2JqZWN0QXJyYXl9W24uJGlzQmluZGFibGVdKCl7cmV0dXJuITB9W24uJHNldFZhbHVlXShlKXt2KHRoaXMsZSl9W24uJHRvSFRNTF0oZSl7dmFyIHQscjtpZihBKHRoaXMpLCF0aGlzLnVpKXtsZXQgZTtzd2l0Y2godGhpcy51aT1uZXcgUHQoe30pLHRoaXMudWlbbi4kZ2xvYmFsRGF0YV09dGhpc1tuLiRnbG9iYWxEYXRhXSx0aGlzW24uJGFwcGVuZENoaWxkXSh0aGlzLnVpKSx0aGlzLml0ZW1zLmNoaWxkcmVuLmxlbmd0aCl7Y2FzZSAwOmU9bmV3IE90KHt9KSx0aGlzLnVpLnRleHRFZGl0PWU7YnJlYWs7Y2FzZSAxOmU9bmV3IEsoe30pLHRoaXMudWkuY2hlY2tCdXR0b249ZTticmVhaztjYXNlIDI6ZT1uZXcgWSh7fSksdGhpcy51aS5jaG9pY2VMaXN0PWV9dGhpcy51aVtuLiRhcHBlbmRDaGlsZF0oZSl9aWYoIXRoaXMudWl8fCJoaWRkZW4iPT09dGhpcy5wcmVzZW5jZXx8ImluYWN0aXZlIj09PXRoaXMucHJlc2VuY2V8fDA9PT10aGlzLmh8fDA9PT10aGlzLncpcmV0dXJuIGMuSFRNTFJlc3VsdC5FTVBUWTt0aGlzLmNhcHRpb24mJmRlbGV0ZSB0aGlzLmNhcHRpb25bbi4kZXh0cmFdLHRoaXNbbi4kcHVzaFBhcmFdKCk7Y29uc3QgYT10aGlzLmNhcHRpb24/dGhpcy5jYXB0aW9uW24uJHRvSFRNTF0oZSkuaHRtbDpudWxsLG89dGhpcy53LGw9dGhpcy5oO2xldCB1PTAsZD0wO3RoaXMubWFyZ2luJiYodT10aGlzLm1hcmdpbi5sZWZ0SW5zZXQrdGhpcy5tYXJnaW4ucmlnaHRJbnNldCxkPXRoaXMubWFyZ2luLnRvcEluc2V0K3RoaXMubWFyZ2luLmJvdHRvbUluc2V0KTtsZXQgZj1udWxsO2lmKCIiPT09dGhpcy53fHwiIj09PXRoaXMuaCl7bGV0IHQ9bnVsbCxyPW51bGwsYT0wLGk9MDtpZih0aGlzLnVpLmNoZWNrQnV0dG9uKWE9aT10aGlzLnVpLmNoZWNrQnV0dG9uLnNpemU7ZWxzZXtjb25zdHt3OnQsaDpyfT0oMCxzLmxheW91dE5vZGUpKHRoaXMsZSk7bnVsbCE9PXQ/KGE9dCxpPXIpOmk9KDAsaC5nZXRNZXRyaWNzKSh0aGlzLmZvbnQsITApLmxpbmVOb0dhcH1pZihmPXkodGhpcy51aVtuLiRnZXRFeHRyYV0oKSksYSs9Zi53LGkrPWYuaCx0aGlzLmNhcHRpb24pe2NvbnN0e3c6cyxoOm8saXNCcm9rZW46bH09dGhpcy5jYXB0aW9uW24uJGdldEV4dHJhXShlKTtpZihsJiZ0aGlzW24uJGdldFN1YmZvcm1QYXJlbnRdKClbbi4kaXNUaGVyZU1vcmVXaWR0aF0oKSlyZXR1cm4gdGhpc1tuLiRwb3BQYXJhXSgpLGMuSFRNTFJlc3VsdC5GQUlMVVJFO3N3aXRjaCh0PXMscj1vLHRoaXMuY2FwdGlvbi5wbGFjZW1lbnQpe2Nhc2UibGVmdCI6Y2FzZSJyaWdodCI6Y2FzZSJpbmxpbmUiOnQrPWE7YnJlYWs7Y2FzZSJ0b3AiOmNhc2UiYm90dG9tIjpyKz1pfX1lbHNlIHQ9YSxyPWk7dCYmIiI9PT10aGlzLncmJih0Kz11LHRoaXMudz1NYXRoLm1pbih0aGlzLm1heFc8PTA/MS8wOnRoaXMubWF4Vyx0aGlzLm1pblcrMTx0P3Q6dGhpcy5taW5XKSksciYmIiI9PT10aGlzLmgmJihyKz1kLHRoaXMuaD1NYXRoLm1pbih0aGlzLm1heEg8PTA/MS8wOnRoaXMubWF4SCx0aGlzLm1pbkgrMTxyP3I6dGhpcy5taW5IKSl9aWYodGhpc1tuLiRwb3BQYXJhXSgpLCgwLHMuZml4RGltZW5zaW9ucykodGhpcyksRih0aGlzKSwhKDAsaS5jaGVja0RpbWVuc2lvbnMpKHRoaXMsZSkpcmV0dXJuIHRoaXMudz1vLHRoaXMuaD1sLHRoaXNbbi4kcG9wUGFyYV0oKSxjLkhUTUxSZXN1bHQuRkFJTFVSRTtJKHRoaXMpO2NvbnN0IGc9KDAscy50b1N0eWxlKSh0aGlzLCJmb250IiwiZGltZW5zaW9ucyIsInBvc2l0aW9uIiwicm90YXRlIiwiYW5jaG9yVHlwZSIsInByZXNlbmNlIiwibWFyZ2luIiwiaEFsaWduIik7KDAscy5zZXRNaW5NYXhEaW1lbnNpb25zKSh0aGlzLGcpO2NvbnN0IHA9WyJ4ZmFGaWVsZCJdO3RoaXMuZm9udCYmcC5wdXNoKCJ4ZmFGb250IiksKDAscy5pc1ByaW50T25seSkodGhpcykmJnAucHVzaCgieGZhUHJpbnRPbmx5Iik7Y29uc3QgbT17c3R5bGU6ZyxpZDp0aGlzW24uJHVpZF0sY2xhc3M6cH07Zy5tYXJnaW4mJihnLnBhZGRpbmc9Zy5tYXJnaW4sZGVsZXRlIGcubWFyZ2luKSwoMCxzLnNldEFjY2VzcykodGhpcyxwKSx0aGlzLm5hbWUmJihtLnhmYU5hbWU9dGhpcy5uYW1lKTtjb25zdCBiPVtdLHc9e25hbWU6ImRpdiIsYXR0cmlidXRlczptLGNoaWxkcmVuOmJ9O2sodGhpcyxtKTtjb25zdCB2PXRoaXMuYm9yZGVyP3RoaXMuYm9yZGVyW24uJHRvU3R5bGVdKCk6bnVsbCx4PSgwLHMuY29tcHV0ZUJib3gpKHRoaXMsdyxlKSxTPXRoaXMudWlbbi4kdG9IVE1MXSgpLmh0bWw7aWYoIVMpcmV0dXJuIE9iamVjdC5hc3NpZ24oZyx2KSxjLkhUTUxSZXN1bHQuc3VjY2VzcygoMCxzLmNyZWF0ZVdyYXBwZXIpKHRoaXMsdykseCk7dGhpc1tuLiR0YWJJbmRleF0mJihudWxsIT09KHQ9Uy5jaGlsZHJlbikmJnZvaWQgMCE9PXQmJnRbMF0/Uy5jaGlsZHJlblswXS5hdHRyaWJ1dGVzLnRhYmluZGV4PXRoaXNbbi4kdGFiSW5kZXhdOlMuYXR0cmlidXRlcy50YWJpbmRleD10aGlzW24uJHRhYkluZGV4XSksUy5hdHRyaWJ1dGVzLnN0eWxlfHwoUy5hdHRyaWJ1dGVzLnN0eWxlPU9iamVjdC5jcmVhdGUobnVsbCkpO2xldCBDPW51bGw7aWYodGhpcy51aS5idXR0b24/KDE9PT1TLmNoaWxkcmVuLmxlbmd0aCYmKFtDXT1TLmNoaWxkcmVuLnNwbGljZSgwLDEpKSxPYmplY3QuYXNzaWduKFMuYXR0cmlidXRlcy5zdHlsZSx2KSk6T2JqZWN0LmFzc2lnbihnLHYpLGIucHVzaChTKSx0aGlzLnZhbHVlKWlmKHRoaXMudWkuaW1hZ2VFZGl0KVMuY2hpbGRyZW4ucHVzaCh0aGlzLnZhbHVlW24uJHRvSFRNTF0oKS5odG1sKTtlbHNlIGlmKCF0aGlzLnVpLmJ1dHRvbil7dmFyIE87bGV0IGU9IiI7aWYodGhpcy52YWx1ZS5leERhdGEpZT10aGlzLnZhbHVlLmV4RGF0YVtuLiR0ZXh0XSgpO2Vsc2UgaWYodGhpcy52YWx1ZS50ZXh0KWU9dGhpcy52YWx1ZS50ZXh0W24uJGdldEV4dHJhXSgpO2Vsc2V7Y29uc3QgdD10aGlzLnZhbHVlW24uJHRvSFRNTF0oKS5odG1sO251bGwhPT10JiYoZT10LmNoaWxkcmVuWzBdLnZhbHVlKX10aGlzLnVpLnRleHRFZGl0JiYobnVsbD09PShPPXRoaXMudmFsdWUudGV4dCl8fHZvaWQgMD09PU8/dm9pZCAwOk8ubWF4Q2hhcnMpJiYoUy5jaGlsZHJlblswXS5hdHRyaWJ1dGVzLm1heExlbmd0aD10aGlzLnZhbHVlLnRleHQubWF4Q2hhcnMpLGUmJih0aGlzLnVpLm51bWVyaWNFZGl0JiYoZT1wYXJzZUZsb2F0KGUpLGU9aXNOYU4oZSk/IiI6ZS50b1N0cmluZygpKSwidGV4dGFyZWEiPT09Uy5jaGlsZHJlblswXS5uYW1lP1MuY2hpbGRyZW5bMF0uYXR0cmlidXRlcy50ZXh0Q29udGVudD1lOlMuY2hpbGRyZW5bMF0uYXR0cmlidXRlcy52YWx1ZT1lKX1pZighdGhpcy51aS5pbWFnZUVkaXQmJm51bGwhPT0ocj1TLmNoaWxkcmVuKSYmdm9pZCAwIT09ciYmclswXSYmdGhpcy5oKXtmPWZ8fHkodGhpcy51aVtuLiRnZXRFeHRyYV0oKSk7bGV0IHQ9MDtpZih0aGlzLmNhcHRpb24mJlsidG9wIiwiYm90dG9tIl0uaW5jbHVkZXModGhpcy5jYXB0aW9uLnBsYWNlbWVudCkpe3Q9dGhpcy5jYXB0aW9uLnJlc2VydmUsdDw9MCYmKHQ9dGhpcy5jYXB0aW9uW24uJGdldEV4dHJhXShlKS5oKTtjb25zdCByPXRoaXMuaC10LWQtZi5oO1MuY2hpbGRyZW5bMF0uYXR0cmlidXRlcy5zdHlsZS5oZWlnaHQ9KDAscy5tZWFzdXJlVG9TdHJpbmcpKHIpfWVsc2UgUy5jaGlsZHJlblswXS5hdHRyaWJ1dGVzLnN0eWxlLmhlaWdodD0iMTAwJSJ9aWYoQyYmUy5jaGlsZHJlbi5wdXNoKEMpLCFhKXJldHVybiBTLmF0dHJpYnV0ZXMuY2xhc3MmJlMuYXR0cmlidXRlcy5jbGFzcy5wdXNoKCJ4ZmFMZWZ0IiksdGhpcy53PW8sdGhpcy5oPWwsYy5IVE1MUmVzdWx0LnN1Y2Nlc3MoKDAscy5jcmVhdGVXcmFwcGVyKSh0aGlzLHcpLHgpO2lmKHRoaXMudWkuYnV0dG9uKXJldHVybiBnLnBhZGRpbmcmJmRlbGV0ZSBnLnBhZGRpbmcsImRpdiI9PT1hLm5hbWUmJihhLm5hbWU9InNwYW4iKSxTLmNoaWxkcmVuLnB1c2goYSksYy5IVE1MUmVzdWx0LnN1Y2Nlc3Modyx4KTtzd2l0Y2godGhpcy51aS5jaGVja0J1dHRvbiYmKGEuYXR0cmlidXRlcy5jbGFzc1swXT0ieGZhQ2FwdGlvbkZvckNoZWNrQnV0dG9uIiksUy5hdHRyaWJ1dGVzLmNsYXNzfHwoUy5hdHRyaWJ1dGVzLmNsYXNzPVtdKSxTLmNoaWxkcmVuLnNwbGljZSgwLDAsYSksdGhpcy5jYXB0aW9uLnBsYWNlbWVudCl7Y2FzZSJsZWZ0IjpjYXNlImlubGluZSI6Uy5hdHRyaWJ1dGVzLmNsYXNzLnB1c2goInhmYUxlZnQiKTticmVhaztjYXNlInJpZ2h0IjpTLmF0dHJpYnV0ZXMuY2xhc3MucHVzaCgieGZhUmlnaHQiKTticmVhaztjYXNlInRvcCI6Uy5hdHRyaWJ1dGVzLmNsYXNzLnB1c2goInhmYVRvcCIpO2JyZWFrO2Nhc2UiYm90dG9tIjpTLmF0dHJpYnV0ZXMuY2xhc3MucHVzaCgieGZhQm90dG9tIil9cmV0dXJuIHRoaXMudz1vLHRoaXMuaD1sLGMuSFRNTFJlc3VsdC5zdWNjZXNzKCgwLHMuY3JlYXRlV3JhcHBlcikodGhpcyx3KSx4KX19dC5GaWVsZD1DZTtjbGFzcyBPZSBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImZpbGwiLCEwKSx0aGlzLmlkPWUuaWR8fCIiLHRoaXMucHJlc2VuY2U9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUucHJlc2VuY2UsWyJ2aXNpYmxlIiwiaGlkZGVuIiwiaW5hY3RpdmUiLCJpbnZpc2libGUiXSksdGhpcy51c2U9ZS51c2V8fCIiLHRoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLHRoaXMuY29sb3I9bnVsbCx0aGlzLmV4dHJhcz1udWxsLHRoaXMubGluZWFyPW51bGwsdGhpcy5wYXR0ZXJuPW51bGwsdGhpcy5yYWRpYWw9bnVsbCx0aGlzLnNvbGlkPW51bGwsdGhpcy5zdGlwcGxlPW51bGx9W24uJHRvU3R5bGVdKCl7dmFyIGU7Y29uc3QgdD10aGlzW24uJGdldFBhcmVudF0oKSxyPXRbbi4kZ2V0UGFyZW50XSgpW24uJGdldFBhcmVudF0oKSxhPU9iamVjdC5jcmVhdGUobnVsbCk7bGV0IGk9ImNvbG9yIixzPWk7dCBpbnN0YW5jZW9mIFUmJihpPSJiYWNrZ3JvdW5kLWNvbG9yIixzPSJiYWNrZ3JvdW5kIixyIGluc3RhbmNlb2YgUHQmJihhLmJhY2tncm91bmRDb2xvcj0id2hpdGUiKSksKHQgaW5zdGFuY2VvZiBsdHx8dCBpbnN0YW5jZW9mIFApJiYoaT1zPSJmaWxsIixhLmZpbGw9IndoaXRlIik7Zm9yKGNvbnN0IGUgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpe2lmKCJleHRyYXMiPT09ZXx8ImNvbG9yIj09PWUpY29udGludWU7Y29uc3QgdD10aGlzW2VdO2lmKCEodCBpbnN0YW5jZW9mIG8uWEZBT2JqZWN0KSljb250aW51ZTtjb25zdCByPXRbbi4kdG9TdHlsZV0odGhpcy5jb2xvcik7cmV0dXJuIHImJihhW3Iuc3RhcnRzV2l0aCgiIyIpP2k6c109ciksYX1pZihudWxsIT09KGU9dGhpcy5jb2xvcikmJnZvaWQgMCE9PWUmJmUudmFsdWUpe2NvbnN0IGU9dGhpcy5jb2xvcltuLiR0b1N0eWxlXSgpO2FbZS5zdGFydHNXaXRoKCIjIik/aTpzXT1lfXJldHVybiBhfX1jbGFzcyBGZSBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImZpbHRlciIsITApLHRoaXMuYWRkUmV2b2NhdGlvbkluZm89KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuYWRkUmV2b2NhdGlvbkluZm8sWyIiLCJyZXF1aXJlZCIsIm9wdGlvbmFsIiwibm9uZSJdKSx0aGlzLmlkPWUuaWR8fCIiLHRoaXMubmFtZT1lLm5hbWV8fCIiLHRoaXMudXNlPWUudXNlfHwiIix0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIix0aGlzLnZlcnNpb249KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTp0aGlzLnZlcnNpb24sZGVmYXVsdFZhbHVlOjUsdmFsaWRhdGU6ZT0+ZT49MSYmZTw9NX0pLHRoaXMuYXBwZWFyYW5jZUZpbHRlcj1udWxsLHRoaXMuY2VydGlmaWNhdGVzPW51bGwsdGhpcy5kaWdlc3RNZXRob2RzPW51bGwsdGhpcy5lbmNvZGluZ3M9bnVsbCx0aGlzLmVuY3J5cHRpb25NZXRob2RzPW51bGwsdGhpcy5oYW5kbGVyPW51bGwsdGhpcy5sb2NrRG9jdW1lbnQ9bnVsbCx0aGlzLm1kcD1udWxsLHRoaXMucmVhc29ucz1udWxsLHRoaXMudGltZVN0YW1wPW51bGx9fWNsYXNzIEllIGV4dGVuZHMgby5Db250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImZsb2F0IiksdGhpcy5pZD1lLmlkfHwiIix0aGlzLm5hbWU9ZS5uYW1lfHwiIix0aGlzLnVzZT1lLnVzZXx8IiIsdGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9W24uJGZpbmFsaXplXSgpe2NvbnN0IGU9cGFyc2VGbG9hdCh0aGlzW24uJGNvbnRlbnRdLnRyaW0oKSk7dGhpc1tuLiRjb250ZW50XT1pc05hTihlKT9udWxsOmV9W24uJHRvSFRNTF0oZSl7cmV0dXJuIE8obnVsbCE9PXRoaXNbbi4kY29udGVudF0/dGhpc1tuLiRjb250ZW50XS50b1N0cmluZygpOiIiKX19Y2xhc3MgVGUgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJmb250IiwhMCksdGhpcy5iYXNlbGluZVNoaWZ0PSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUuYmFzZWxpbmVTaGlmdCksdGhpcy5mb250SG9yaXpvbnRhbFNjYWxlPSgwLGMuZ2V0RmxvYXQpKHtkYXRhOmUuZm9udEhvcml6b250YWxTY2FsZSxkZWZhdWx0VmFsdWU6MTAwLHZhbGlkYXRlOmU9PmU+PTB9KSx0aGlzLmZvbnRWZXJ0aWNhbFNjYWxlPSgwLGMuZ2V0RmxvYXQpKHtkYXRhOmUuZm9udFZlcnRpY2FsU2NhbGUsZGVmYXVsdFZhbHVlOjEwMCx2YWxpZGF0ZTplPT5lPj0wfSksdGhpcy5pZD1lLmlkfHwiIix0aGlzLmtlcm5pbmdNb2RlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmtlcm5pbmdNb2RlLFsibm9uZSIsInBhaXIiXSksdGhpcy5sZXR0ZXJTcGFjaW5nPSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUubGV0dGVyU3BhY2luZywiMCIpLHRoaXMubGluZVRocm91Z2g9KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmxpbmVUaHJvdWdoLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfHwyPT09ZX0pLHRoaXMubGluZVRocm91Z2hQZXJpb2Q9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUubGluZVRocm91Z2hQZXJpb2QsWyJhbGwiLCJ3b3JkIl0pLHRoaXMub3ZlcmxpbmU9KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLm92ZXJsaW5lLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfHwyPT09ZX0pLHRoaXMub3ZlcmxpbmVQZXJpb2Q9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUub3ZlcmxpbmVQZXJpb2QsWyJhbGwiLCJ3b3JkIl0pLHRoaXMucG9zdHVyZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5wb3N0dXJlLFsibm9ybWFsIiwiaXRhbGljIl0pLHRoaXMuc2l6ZT0oMCxjLmdldE1lYXN1cmVtZW50KShlLnNpemUsIjEwcHQiKSx0aGlzLnR5cGVmYWNlPWUudHlwZWZhY2V8fCJDb3VyaWVyIix0aGlzLnVuZGVybGluZT0oMCxjLmdldEludGVnZXIpKHtkYXRhOmUudW5kZXJsaW5lLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfHwyPT09ZX0pLHRoaXMudW5kZXJsaW5lUGVyaW9kPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnVuZGVybGluZVBlcmlvZCxbImFsbCIsIndvcmQiXSksdGhpcy51c2U9ZS51c2V8fCIiLHRoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLHRoaXMud2VpZ2h0PSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLndlaWdodCxbIm5vcm1hbCIsImJvbGQiXSksdGhpcy5leHRyYXM9bnVsbCx0aGlzLmZpbGw9bnVsbH1bbi4kY2xlYW5dKGUpe3N1cGVyW24uJGNsZWFuXShlKSx0aGlzW24uJGdsb2JhbERhdGFdLnVzZWRUeXBlZmFjZXMuYWRkKHRoaXMudHlwZWZhY2UpfVtuLiR0b1N0eWxlXSgpe2NvbnN0IGU9KDAscy50b1N0eWxlKSh0aGlzLCJmaWxsIiksdD1lLmNvbG9yO3JldHVybiB0JiYoIiMwMDAwMDAiPT09dD9kZWxldGUgZS5jb2xvcjp0LnN0YXJ0c1dpdGgoIiMiKXx8KGUuYmFja2dyb3VuZD10LGUuYmFja2dyb3VuZENsaXA9InRleHQiLGUuY29sb3I9InRyYW5zcGFyZW50IikpLHRoaXMuYmFzZWxpbmVTaGlmdCYmKGUudmVydGljYWxBbGlnbj0oMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5iYXNlbGluZVNoaWZ0KSksZS5mb250S2VybmluZz0ibm9uZSI9PT10aGlzLmtlcm5pbmdNb2RlPyJub25lIjoibm9ybWFsIixlLmxldHRlclNwYWNpbmc9KDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMubGV0dGVyU3BhY2luZyksMCE9PXRoaXMubGluZVRocm91Z2gmJihlLnRleHREZWNvcmF0aW9uPSJsaW5lLXRocm91Z2giLDI9PT10aGlzLmxpbmVUaHJvdWdoJiYoZS50ZXh0RGVjb3JhdGlvblN0eWxlPSJkb3VibGUiKSksMCE9PXRoaXMub3ZlcmxpbmUmJihlLnRleHREZWNvcmF0aW9uPSJvdmVybGluZSIsMj09PXRoaXMub3ZlcmxpbmUmJihlLnRleHREZWNvcmF0aW9uU3R5bGU9ImRvdWJsZSIpKSxlLmZvbnRTdHlsZT10aGlzLnBvc3R1cmUsZS5mb250U2l6ZT0oMCxzLm1lYXN1cmVUb1N0cmluZykoLjk5KnRoaXMuc2l6ZSksKDAscy5zZXRGb250RmFtaWx5KSh0aGlzLHRoaXMsdGhpc1tuLiRnbG9iYWxEYXRhXS5mb250RmluZGVyLGUpLDAhPT10aGlzLnVuZGVybGluZSYmKGUudGV4dERlY29yYXRpb249InVuZGVybGluZSIsMj09PXRoaXMudW5kZXJsaW5lJiYoZS50ZXh0RGVjb3JhdGlvblN0eWxlPSJkb3VibGUiKSksZS5mb250V2VpZ2h0PXRoaXMud2VpZ2h0LGV9fWNsYXNzIE1lIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiZm9ybWF0IiwhMCksdGhpcy5pZD1lLmlkfHwiIix0aGlzLnVzZT1lLnVzZXx8IiIsdGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiIsdGhpcy5leHRyYXM9bnVsbCx0aGlzLnBpY3R1cmU9bnVsbH19Y2xhc3MgRWUgZXh0ZW5kcyBvLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJoYW5kbGVyIiksdGhpcy5pZD1lLmlkfHwiIix0aGlzLnR5cGU9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksdGhpcy51c2U9ZS51c2V8fCIiLHRoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBQZSBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImh5cGhlbmF0aW9uIiksdGhpcy5leGNsdWRlQWxsQ2Fwcz0oMCxjLmdldEludGVnZXIpKHtkYXRhOmUuZXhjbHVkZUFsbENhcHMsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KSx0aGlzLmV4Y2x1ZGVJbml0aWFsQ2FwPSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5leGNsdWRlSW5pdGlhbENhcCxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pLHRoaXMuaHlwaGVuYXRlPSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5oeXBoZW5hdGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KSx0aGlzLmlkPWUuaWR8fCIiLHRoaXMucHVzaENoYXJhY3RlckNvdW50PSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5wdXNoQ2hhcmFjdGVyQ291bnQsZGVmYXVsdFZhbHVlOjMsdmFsaWRhdGU6ZT0+ZT49MH0pLHRoaXMucmVtYWluQ2hhcmFjdGVyQ291bnQ9KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLnJlbWFpbkNoYXJhY3RlckNvdW50LGRlZmF1bHRWYWx1ZTozLHZhbGlkYXRlOmU9PmU+PTB9KSx0aGlzLnVzZT1lLnVzZXx8IiIsdGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiIsdGhpcy53b3JkQ2hhcmFjdGVyQ291bnQ9KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLndvcmRDaGFyYWN0ZXJDb3VudCxkZWZhdWx0VmFsdWU6Nyx2YWxpZGF0ZTplPT5lPj0wfSl9fWNsYXNzIFJlIGV4dGVuZHMgby5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiaW1hZ2UiKSx0aGlzLmFzcGVjdD0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5hc3BlY3QsWyJmaXQiLCJhY3R1YWwiLCJoZWlnaHQiLCJub25lIiwid2lkdGgiXSksdGhpcy5jb250ZW50VHlwZT1lLmNvbnRlbnRUeXBlfHwiIix0aGlzLmhyZWY9ZS5ocmVmfHwiIix0aGlzLmlkPWUuaWR8fCIiLHRoaXMubmFtZT1lLm5hbWV8fCIiLHRoaXMudHJhbnNmZXJFbmNvZGluZz0oMCxjLmdldFN0cmluZ09wdGlvbikoZS50cmFuc2ZlckVuY29kaW5nLFsiYmFzZTY0Iiwibm9uZSIsInBhY2thZ2UiXSksdGhpcy51c2U9ZS51c2V8fCIiLHRoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifVtuLiR0b0hUTUxdKCl7aWYodGhpcy5jb250ZW50VHlwZSYmIW0uaGFzKHRoaXMuY29udGVudFR5cGUudG9Mb3dlckNhc2UoKSkpcmV0dXJuIGMuSFRNTFJlc3VsdC5FTVBUWTtsZXQgZT10aGlzW24uJGdsb2JhbERhdGFdLmltYWdlcyYmdGhpc1tuLiRnbG9iYWxEYXRhXS5pbWFnZXMuZ2V0KHRoaXMuaHJlZik7aWYoIWUmJih0aGlzLmhyZWZ8fCF0aGlzW24uJGNvbnRlbnRdKSlyZXR1cm4gYy5IVE1MUmVzdWx0LkVNUFRZO2lmKGV8fCJiYXNlNjQiIT09dGhpcy50cmFuc2ZlckVuY29kaW5nfHwoZT0oMCxsLnN0cmluZ1RvQnl0ZXMpKGF0b2IodGhpc1tuLiRjb250ZW50XSkpKSwhZSlyZXR1cm4gYy5IVE1MUmVzdWx0LkVNUFRZO2lmKCF0aGlzLmNvbnRlbnRUeXBlKXtmb3IoY29uc3RbdCxyXW9mIGIpaWYoZS5sZW5ndGg+dC5sZW5ndGgmJnQuZXZlcnkoKCh0LHIpPT50PT09ZVtyXSkpKXt0aGlzLmNvbnRlbnRUeXBlPXI7YnJlYWt9aWYoIXRoaXMuY29udGVudFR5cGUpcmV0dXJuIGMuSFRNTFJlc3VsdC5FTVBUWX1jb25zdCB0PW5ldyBCbG9iKFtlXSx7dHlwZTp0aGlzLmNvbnRlbnRUeXBlfSk7bGV0IHI7c3dpdGNoKHRoaXMuYXNwZWN0KXtjYXNlImZpdCI6Y2FzZSJhY3R1YWwiOmJyZWFrO2Nhc2UiaGVpZ2h0IjpyPXtoZWlnaHQ6IjEwMCUiLG9iamVjdEZpdDoiZmlsbCJ9O2JyZWFrO2Nhc2Uibm9uZSI6cj17d2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIsb2JqZWN0Rml0OiJmaWxsIn07YnJlYWs7Y2FzZSJ3aWR0aCI6cj17d2lkdGg6IjEwMCUiLG9iamVjdEZpdDoiZmlsbCJ9fWNvbnN0IGE9dGhpc1tuLiRnZXRQYXJlbnRdKCk7cmV0dXJuIGMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJpbWciLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhSW1hZ2UiXSxzdHlsZTpyLHNyYzpVUkwuY3JlYXRlT2JqZWN0VVJMKHQpLGFsdDphP0MoYVtuLiRnZXRQYXJlbnRdKCkpOm51bGx9fSl9fWNsYXNzIE5lIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiaW1hZ2VFZGl0IiwhMCksdGhpcy5kYXRhPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmRhdGEsWyJsaW5rIiwiZW1iZWQiXSksdGhpcy5pZD1lLmlkfHwiIix0aGlzLnVzZT1lLnVzZXx8IiIsdGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiIsdGhpcy5ib3JkZXI9bnVsbCx0aGlzLmV4dHJhcz1udWxsLHRoaXMubWFyZ2luPW51bGx9W24uJHRvSFRNTF0oZSl7cmV0dXJuImVtYmVkIj09PXRoaXMuZGF0YT9jLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiZGl2IixjaGlsZHJlbjpbXSxhdHRyaWJ1dGVzOnt9fSk6Yy5IVE1MUmVzdWx0LkVNUFRZfX1jbGFzcyBEZSBleHRlbmRzIG8uQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJpbnRlZ2VyIiksdGhpcy5pZD1lLmlkfHwiIix0aGlzLm5hbWU9ZS5uYW1lfHwiIix0aGlzLnVzZT1lLnVzZXx8IiIsdGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9W24uJGZpbmFsaXplXSgpe2NvbnN0IGU9cGFyc2VJbnQodGhpc1tuLiRjb250ZW50XS50cmltKCksMTApO3RoaXNbbi4kY29udGVudF09aXNOYU4oZSk/bnVsbDplfVtuLiR0b0hUTUxdKGUpe3JldHVybiBPKG51bGwhPT10aGlzW24uJGNvbnRlbnRdP3RoaXNbbi4kY29udGVudF0udG9TdHJpbmcoKToiIil9fWNsYXNzIEJlIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwiaXNzdWVycyIsITApLHRoaXMuaWQ9ZS5pZHx8IiIsdGhpcy50eXBlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pLHRoaXMudXNlPWUudXNlfHwiIix0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIix0aGlzLmNlcnRpZmljYXRlPW5ldyBvLlhGQU9iamVjdEFycmF5fX1jbGFzcyBMZSBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsIml0ZW1zIiwhMCksdGhpcy5pZD1lLmlkfHwiIix0aGlzLm5hbWU9ZS5uYW1lfHwiIix0aGlzLnByZXNlbmNlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnByZXNlbmNlLFsidmlzaWJsZSIsImhpZGRlbiIsImluYWN0aXZlIiwiaW52aXNpYmxlIl0pLHRoaXMucmVmPWUucmVmfHwiIix0aGlzLnNhdmU9KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLnNhdmUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KSx0aGlzLnVzZT1lLnVzZXx8IiIsdGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiIsdGhpcy5ib29sZWFuPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuZGF0ZT1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmRhdGVUaW1lPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuZGVjaW1hbD1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmV4RGF0YT1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmZsb2F0PW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuaW1hZ2U9bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy5pbnRlZ2VyPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMudGV4dD1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLnRpbWU9bmV3IG8uWEZBT2JqZWN0QXJyYXl9W24uJHRvSFRNTF0oKXtjb25zdCBlPVtdO2Zvcihjb25zdCB0IG9mIHRoaXNbbi4kZ2V0Q2hpbGRyZW5dKCkpZS5wdXNoKHRbbi4kdGV4dF0oKSk7cmV0dXJuIGMuSFRNTFJlc3VsdC5zdWNjZXNzKGUpfX10Lkl0ZW1zPUxlO2NsYXNzIF9lIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwia2VlcCIsITApLHRoaXMuaWQ9ZS5pZHx8IiI7Y29uc3QgdD1bIm5vbmUiLCJjb250ZW50QXJlYSIsInBhZ2VBcmVhIl07dGhpcy5pbnRhY3Q9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuaW50YWN0LHQpLHRoaXMubmV4dD0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5uZXh0LHQpLHRoaXMucHJldmlvdXM9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUucHJldmlvdXMsdCksdGhpcy51c2U9ZS51c2V8fCIiLHRoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLHRoaXMuZXh0cmFzPW51bGx9fWNsYXNzIGplIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwia2V5VXNhZ2UiKTtjb25zdCB0PVsiIiwieWVzIiwibm8iXTt0aGlzLmNybFNpZ249KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuY3JsU2lnbix0KSx0aGlzLmRhdGFFbmNpcGhlcm1lbnQ9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuZGF0YUVuY2lwaGVybWVudCx0KSx0aGlzLmRlY2lwaGVyT25seT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5kZWNpcGhlck9ubHksdCksdGhpcy5kaWdpdGFsU2lnbmF0dXJlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmRpZ2l0YWxTaWduYXR1cmUsdCksdGhpcy5lbmNpcGhlck9ubHk9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuZW5jaXBoZXJPbmx5LHQpLHRoaXMuaWQ9ZS5pZHx8IiIsdGhpcy5rZXlBZ3JlZW1lbnQ9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUua2V5QWdyZWVtZW50LHQpLHRoaXMua2V5Q2VydFNpZ249KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUua2V5Q2VydFNpZ24sdCksdGhpcy5rZXlFbmNpcGhlcm1lbnQ9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUua2V5RW5jaXBoZXJtZW50LHQpLHRoaXMubm9uUmVwdWRpYXRpb249KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUubm9uUmVwdWRpYXRpb24sdCksdGhpcy50eXBlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pLHRoaXMudXNlPWUudXNlfHwiIix0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgVWUgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJsaW5lIiwhMCksdGhpcy5oYW5kPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmhhbmQsWyJldmVuIiwibGVmdCIsInJpZ2h0Il0pLHRoaXMuaWQ9ZS5pZHx8IiIsdGhpcy5zbG9wZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5zbG9wZSxbIlxcIiwiLyJdKSx0aGlzLnVzZT1lLnVzZXx8IiIsdGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiIsdGhpcy5lZGdlPW51bGx9W24uJHRvSFRNTF0oKXtjb25zdCBlPXRoaXNbbi4kZ2V0UGFyZW50XSgpW24uJGdldFBhcmVudF0oKSx0PXRoaXMuZWRnZXx8bmV3IHVlKHt9KSxyPXRbbi4kdG9TdHlsZV0oKSxhPU9iamVjdC5jcmVhdGUobnVsbCksaT0idmlzaWJsZSI9PT10LnByZXNlbmNlP3QudGhpY2tuZXNzOjA7YS5zdHJva2VXaWR0aD0oMCxzLm1lYXN1cmVUb1N0cmluZykoaSksYS5zdHJva2U9ci5jb2xvcjtsZXQgbyxsLGgsdSxkPSIxMDAlIixmPSIxMDAlIjtlLnc8PWk/KFtvLGwsaCx1XT1bIjUwJSIsMCwiNTAlIiwiMTAwJSJdLGQ9YS5zdHJva2VXaWR0aCk6ZS5oPD1pPyhbbyxsLGgsdV09WzAsIjUwJSIsIjEwMCUiLCI1MCUiXSxmPWEuc3Ryb2tlV2lkdGgpOiJcXCI9PT10aGlzLnNsb3BlP1tvLGwsaCx1XT1bMCwwLCIxMDAlIiwiMTAwJSJdOltvLGwsaCx1XT1bMCwiMTAwJSIsIjEwMCUiLDBdO2NvbnN0IHA9e25hbWU6InN2ZyIsY2hpbGRyZW46W3tuYW1lOiJsaW5lIixhdHRyaWJ1dGVzOnt4bWxuczpnLHgxOm8seTE6bCx4MjpoLHkyOnUsc3R5bGU6YX19XSxhdHRyaWJ1dGVzOnt4bWxuczpnLHdpZHRoOmQsaGVpZ2h0OmYsc3R5bGU6e292ZXJmbG93OiJ2aXNpYmxlIn19fTtyZXR1cm4gdyhlKT9jLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiZGl2IixhdHRyaWJ1dGVzOntzdHlsZTp7ZGlzcGxheToiaW5saW5lIix3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIn19LGNoaWxkcmVuOltwXX0pOihwLmF0dHJpYnV0ZXMuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixjLkhUTUxSZXN1bHQuc3VjY2VzcyhwKSl9fWNsYXNzICRlIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwibGluZWFyIiwhMCksdGhpcy5pZD1lLmlkfHwiIix0aGlzLnR5cGU9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbInRvUmlnaHQiLCJ0b0JvdHRvbSIsInRvTGVmdCIsInRvVG9wIl0pLHRoaXMudXNlPWUudXNlfHwiIix0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIix0aGlzLmNvbG9yPW51bGwsdGhpcy5leHRyYXM9bnVsbH1bbi4kdG9TdHlsZV0oZSl7cmV0dXJuIGU9ZT9lW24uJHRvU3R5bGVdKCk6IiNGRkZGRkYiLCJsaW5lYXItZ3JhZGllbnQoIi5jb25jYXQodGhpcy50eXBlLnJlcGxhY2UoLyhbUkJMVF0pLywiICQxIikudG9Mb3dlckNhc2UoKSwiLCAiKS5jb25jYXQoZSwiLCAiKS5jb25jYXQodGhpcy5jb2xvcj90aGlzLmNvbG9yW24uJHRvU3R5bGVdKCk6IiMwMDAwMDAiLCIpIil9fWNsYXNzIFhlIGV4dGVuZHMgby5Db250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsImxvY2tEb2N1bWVudCIpLHRoaXMuaWQ9ZS5pZHx8IiIsdGhpcy50eXBlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pLHRoaXMudXNlPWUudXNlfHwiIix0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn1bbi4kZmluYWxpemVdKCl7dGhpc1tuLiRjb250ZW50XT0oMCxjLmdldFN0cmluZ09wdGlvbikodGhpc1tuLiRjb250ZW50XSxbImF1dG8iLCIwIiwiMSJdKX19Y2xhc3MgSGUgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJtYW5pZmVzdCIsITApLHRoaXMuYWN0aW9uPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmFjdGlvbixbImluY2x1ZGUiLCJhbGwiLCJleGNsdWRlIl0pLHRoaXMuaWQ9ZS5pZHx8IiIsdGhpcy5uYW1lPWUubmFtZXx8IiIsdGhpcy51c2U9ZS51c2V8fCIiLHRoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLHRoaXMuZXh0cmFzPW51bGwsdGhpcy5yZWY9bmV3IG8uWEZBT2JqZWN0QXJyYXl9fWNsYXNzIHFlIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwibWFyZ2luIiwhMCksdGhpcy5ib3R0b21JbnNldD0oMCxjLmdldE1lYXN1cmVtZW50KShlLmJvdHRvbUluc2V0LCIwIiksdGhpcy5pZD1lLmlkfHwiIix0aGlzLmxlZnRJbnNldD0oMCxjLmdldE1lYXN1cmVtZW50KShlLmxlZnRJbnNldCwiMCIpLHRoaXMucmlnaHRJbnNldD0oMCxjLmdldE1lYXN1cmVtZW50KShlLnJpZ2h0SW5zZXQsIjAiKSx0aGlzLnRvcEluc2V0PSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUudG9wSW5zZXQsIjAiKSx0aGlzLnVzZT1lLnVzZXx8IiIsdGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiIsdGhpcy5leHRyYXM9bnVsbH1bbi4kdG9TdHlsZV0oKXtyZXR1cm57bWFyZ2luOigwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnRvcEluc2V0KSsiICIrKDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMucmlnaHRJbnNldCkrIiAiKygwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLmJvdHRvbUluc2V0KSsiICIrKDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMubGVmdEluc2V0KX19fWNsYXNzIHplIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwibWRwIiksdGhpcy5pZD1lLmlkfHwiIix0aGlzLnBlcm1pc3Npb25zPSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5wZXJtaXNzaW9ucyxkZWZhdWx0VmFsdWU6Mix2YWxpZGF0ZTplPT4xPT09ZXx8Mz09PWV9KSx0aGlzLnNpZ25hdHVyZVR5cGU9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuc2lnbmF0dXJlVHlwZSxbImZpbGxlciIsImF1dGhvciJdKSx0aGlzLnVzZT1lLnVzZXx8IiIsdGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIEdlIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwibWVkaXVtIiksdGhpcy5pZD1lLmlkfHwiIix0aGlzLmltYWdpbmdCQm94PSgwLGMuZ2V0QkJveCkoZS5pbWFnaW5nQkJveCksdGhpcy5sb25nPSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUubG9uZyksdGhpcy5vcmllbnRhdGlvbj0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5vcmllbnRhdGlvbixbInBvcnRyYWl0IiwibGFuZHNjYXBlIl0pLHRoaXMuc2hvcnQ9KDAsYy5nZXRNZWFzdXJlbWVudCkoZS5zaG9ydCksdGhpcy5zdG9jaz1lLnN0b2NrfHwiIix0aGlzLnRyYXlJbj0oMCxjLmdldFN0cmluZ09wdGlvbikoZS50cmF5SW4sWyJhdXRvIiwiZGVsZWdhdGUiLCJwYWdlRnJvbnQiXSksdGhpcy50cmF5T3V0PSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnRyYXlPdXQsWyJhdXRvIiwiZGVsZWdhdGUiXSksdGhpcy51c2U9ZS51c2V8fCIiLHRoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBXZSBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsIm1lc3NhZ2UiLCEwKSx0aGlzLmlkPWUuaWR8fCIiLHRoaXMudXNlPWUudXNlfHwiIix0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIix0aGlzLnRleHQ9bmV3IG8uWEZBT2JqZWN0QXJyYXl9fWNsYXNzIFZlIGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwibnVtZXJpY0VkaXQiLCEwKSx0aGlzLmhTY3JvbGxQb2xpY3k9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuaFNjcm9sbFBvbGljeSxbImF1dG8iLCJvZmYiLCJvbiJdKSx0aGlzLmlkPWUuaWR8fCIiLHRoaXMudXNlPWUudXNlfHwiIix0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIix0aGlzLmJvcmRlcj1udWxsLHRoaXMuY29tYj1udWxsLHRoaXMuZXh0cmFzPW51bGwsdGhpcy5tYXJnaW49bnVsbH1bbi4kdG9IVE1MXShlKXt2YXIgdDtjb25zdCByPSgwLHMudG9TdHlsZSkodGhpcywiYm9yZGVyIiwiZm9udCIsIm1hcmdpbiIpLGE9dGhpc1tuLiRnZXRQYXJlbnRdKClbbi4kZ2V0UGFyZW50XSgpLGk9e25hbWU6ImlucHV0IixhdHRyaWJ1dGVzOnt0eXBlOiJ0ZXh0IixmaWVsZElkOmFbbi4kdWlkXSxkYXRhSWQ6KG51bGw9PT0odD1hW24uJGRhdGFdKXx8dm9pZCAwPT09dD92b2lkIDA6dFtuLiR1aWRdKXx8YVtuLiR1aWRdLGNsYXNzOlsieGZhVGV4dGZpZWxkIl0sc3R5bGU6ciwiYXJpYS1sYWJlbCI6QyhhKSwiYXJpYS1yZXF1aXJlZCI6ITF9fTtyZXR1cm4gUyhhKSYmKGkuYXR0cmlidXRlc1siYXJpYS1yZXF1aXJlZCJdPSEwLGkuYXR0cmlidXRlcy5yZXF1aXJlZD0hMCksYy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImxhYmVsIixhdHRyaWJ1dGVzOntjbGFzczpbInhmYUxhYmVsIl19LGNoaWxkcmVuOltpXX0pfX1jbGFzcyBLZSBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsIm9jY3VyIiwhMCksdGhpcy5pZD1lLmlkfHwiIix0aGlzLmluaXRpYWw9IiIhPT1lLmluaXRpYWw/KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmluaXRpYWwsZGVmYXVsdFZhbHVlOiIiLHZhbGlkYXRlOmU9PiEwfSk6IiIsdGhpcy5tYXg9IiIhPT1lLm1heD8oMCxjLmdldEludGVnZXIpKHtkYXRhOmUubWF4LGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmU9PiEwfSk6IiIsdGhpcy5taW49IiIhPT1lLm1pbj8oMCxjLmdldEludGVnZXIpKHtkYXRhOmUubWluLGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmU9PiEwfSk6IiIsdGhpcy51c2U9ZS51c2V8fCIiLHRoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLHRoaXMuZXh0cmFzPW51bGx9W24uJGNsZWFuXSgpe2NvbnN0IGU9dGhpc1tuLiRnZXRQYXJlbnRdKCksdD10aGlzLm1pbjsiIj09PXRoaXMubWluJiYodGhpcy5taW49ZSBpbnN0YW5jZW9mIFFlfHxlIGluc3RhbmNlb2YgZXQ/MDoxKSwiIj09PXRoaXMubWF4JiYodGhpcy5tYXg9IiI9PT10P2UgaW5zdGFuY2VvZiBRZXx8ZSBpbnN0YW5jZW9mIGV0Py0xOjE6dGhpcy5taW4pLC0xIT09dGhpcy5tYXgmJnRoaXMubWF4PHRoaXMubWluJiYodGhpcy5tYXg9dGhpcy5taW4pLCIiPT09dGhpcy5pbml0aWFsJiYodGhpcy5pbml0aWFsPWUgaW5zdGFuY2VvZiBrdD8xOnRoaXMubWluKX19Y2xhc3MgWWUgZXh0ZW5kcyBvLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJvaWQiKSx0aGlzLmlkPWUuaWR8fCIiLHRoaXMubmFtZT1lLm5hbWV8fCIiLHRoaXMudXNlPWUudXNlfHwiIix0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgSmUgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJvaWRzIiwhMCksdGhpcy5pZD1lLmlkfHwiIix0aGlzLnR5cGU9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksdGhpcy51c2U9ZS51c2V8fCIiLHRoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLHRoaXMub2lkPW5ldyBvLlhGQU9iamVjdEFycmF5fX1jbGFzcyBaZSBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsIm92ZXJmbG93IiksdGhpcy5pZD1lLmlkfHwiIix0aGlzLmxlYWRlcj1lLmxlYWRlcnx8IiIsdGhpcy50YXJnZXQ9ZS50YXJnZXR8fCIiLHRoaXMudHJhaWxlcj1lLnRyYWlsZXJ8fCIiLHRoaXMudXNlPWUudXNlfHwiIix0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn1bbi4kZ2V0RXh0cmFdKCl7aWYoIXRoaXNbbi4kZXh0cmFdKXtjb25zdCBlPXRoaXNbbi4kZ2V0UGFyZW50XSgpLHQ9dGhpc1tuLiRnZXRUZW1wbGF0ZVJvb3RdKCkscj10W24uJHNlYXJjaE5vZGVdKHRoaXMudGFyZ2V0LGUpLGE9dFtuLiRzZWFyY2hOb2RlXSh0aGlzLmxlYWRlcixlKSxpPXRbbi4kc2VhcmNoTm9kZV0odGhpcy50cmFpbGVyLGUpO3RoaXNbbi4kZXh0cmFdPXt0YXJnZXQ6KG51bGw9PXI/dm9pZCAwOnJbMF0pfHxudWxsLGxlYWRlcjoobnVsbD09YT92b2lkIDA6YVswXSl8fG51bGwsdHJhaWxlcjoobnVsbD09aT92b2lkIDA6aVswXSl8fG51bGwsYWRkTGVhZGVyOiExLGFkZFRyYWlsZXI6ITF9fXJldHVybiB0aGlzW24uJGV4dHJhXX19Y2xhc3MgUWUgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJwYWdlQXJlYSIsITApLHRoaXMuYmxhbmtPck5vdEJsYW5rPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmJsYW5rT3JOb3RCbGFuayxbImFueSIsImJsYW5rIiwibm90QmxhbmsiXSksdGhpcy5pZD1lLmlkfHwiIix0aGlzLmluaXRpYWxOdW1iZXI9KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmluaXRpYWxOdW1iZXIsZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZT0+ITB9KSx0aGlzLm5hbWU9ZS5uYW1lfHwiIix0aGlzLm51bWJlcmVkPSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5udW1iZXJlZCxkZWZhdWx0VmFsdWU6MSx2YWxpZGF0ZTplPT4hMH0pLHRoaXMub2RkT3JFdmVuPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLm9kZE9yRXZlbixbImFueSIsImV2ZW4iLCJvZGQiXSksdGhpcy5wYWdlUG9zaXRpb249KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUucGFnZVBvc2l0aW9uLFsiYW55IiwiZmlyc3QiLCJsYXN0Iiwib25seSIsInJlc3QiXSksdGhpcy5yZWxldmFudD0oMCxjLmdldFJlbGV2YW50KShlLnJlbGV2YW50KSx0aGlzLnVzZT1lLnVzZXx8IiIsdGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiIsdGhpcy5kZXNjPW51bGwsdGhpcy5leHRyYXM9bnVsbCx0aGlzLm1lZGl1bT1udWxsLHRoaXMub2NjdXI9bnVsbCx0aGlzLmFyZWE9bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy5jb250ZW50QXJlYT1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmRyYXc9bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy5leGNsR3JvdXA9bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy5maWVsZD1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLnN1YmZvcm09bmV3IG8uWEZBT2JqZWN0QXJyYXl9W24uJGlzVXNhYmxlXSgpe3JldHVybiB0aGlzW24uJGV4dHJhXT8hdGhpcy5vY2N1cnx8LTE9PT10aGlzLm9jY3VyLm1heHx8dGhpc1tuLiRleHRyYV0ubnVtYmVyT2ZVc2U8dGhpcy5vY2N1ci5tYXg6KHRoaXNbbi4kZXh0cmFdPXtudW1iZXJPZlVzZTowfSwhMCl9W24uJGNsZWFuUGFnZV0oKXtkZWxldGUgdGhpc1tuLiRleHRyYV19W24uJGdldE5leHRQYWdlXSgpe3RoaXNbbi4kZXh0cmFdfHwodGhpc1tuLiRleHRyYV09e251bWJlck9mVXNlOjB9KTtjb25zdCBlPXRoaXNbbi4kZ2V0UGFyZW50XSgpO3JldHVybiJvcmRlcmVkT2NjdXJyZW5jZSI9PT1lLnJlbGF0aW9uJiZ0aGlzW24uJGlzVXNhYmxlXSgpPyh0aGlzW24uJGV4dHJhXS5udW1iZXJPZlVzZSs9MSx0aGlzKTplW24uJGdldE5leHRQYWdlXSgpfVtuLiRnZXRBdmFpbGFibGVTcGFjZV0oKXtyZXR1cm4gdGhpc1tuLiRleHRyYV0uc3BhY2V8fHt3aWR0aDowLGhlaWdodDowfX1bbi4kdG9IVE1MXSgpe3RoaXNbbi4kZXh0cmFdfHwodGhpc1tuLiRleHRyYV09e251bWJlck9mVXNlOjF9KTtjb25zdCBlPVtdO3RoaXNbbi4kZXh0cmFdLmNoaWxkcmVuPWU7Y29uc3QgdD1PYmplY3QuY3JlYXRlKG51bGwpO2lmKHRoaXMubWVkaXVtJiZ0aGlzLm1lZGl1bS5zaG9ydCYmdGhpcy5tZWRpdW0ubG9uZyl7aWYodC53aWR0aD0oMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5tZWRpdW0uc2hvcnQpLHQuaGVpZ2h0PSgwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLm1lZGl1bS5sb25nKSx0aGlzW24uJGV4dHJhXS5zcGFjZT17d2lkdGg6dGhpcy5tZWRpdW0uc2hvcnQsaGVpZ2h0OnRoaXMubWVkaXVtLmxvbmd9LCJsYW5kc2NhcGUiPT09dGhpcy5tZWRpdW0ub3JpZW50YXRpb24pe2NvbnN0IGU9dC53aWR0aDt0LndpZHRoPXQuaGVpZ2h0LHQuaGVpZ2h0PWUsdGhpc1tuLiRleHRyYV0uc3BhY2U9e3dpZHRoOnRoaXMubWVkaXVtLmxvbmcsaGVpZ2h0OnRoaXMubWVkaXVtLnNob3J0fX19ZWxzZSgwLGwud2FybikoIlhGQSAtIE5vIG1lZGl1bSBzcGVjaWZpZWQgaW4gcGFnZUFyZWE6IHBsZWFzZSBmaWxlIGEgYnVnLiIpO3JldHVybiB0aGlzW24uJGNoaWxkcmVuVG9IVE1MXSh7ZmlsdGVyOm5ldyBTZXQoWyJhcmVhIiwiZHJhdyIsImZpZWxkIiwic3ViZm9ybSJdKSxpbmNsdWRlOiEwfSksdGhpc1tuLiRjaGlsZHJlblRvSFRNTF0oe2ZpbHRlcjpuZXcgU2V0KFsiY29udGVudEFyZWEiXSksaW5jbHVkZTohMH0pLGMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGNoaWxkcmVuOmUsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFQYWdlIl0saWQ6dGhpc1tuLiR1aWRdLHN0eWxlOnQseGZhTmFtZTp0aGlzLm5hbWV9fSl9fWNsYXNzIGV0IGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwicGFnZVNldCIsITApLHRoaXMuZHVwbGV4SW1wb3NpdGlvbj0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5kdXBsZXhJbXBvc2l0aW9uLFsibG9uZ0VkZ2UiLCJzaG9ydEVkZ2UiXSksdGhpcy5pZD1lLmlkfHwiIix0aGlzLm5hbWU9ZS5uYW1lfHwiIix0aGlzLnJlbGF0aW9uPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnJlbGF0aW9uLFsib3JkZXJlZE9jY3VycmVuY2UiLCJkdXBsZXhQYWdpbmF0ZWQiLCJzaW1wbGV4UGFnaW5hdGVkIl0pLHRoaXMucmVsZXZhbnQ9KDAsYy5nZXRSZWxldmFudCkoZS5yZWxldmFudCksdGhpcy51c2U9ZS51c2V8fCIiLHRoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLHRoaXMuZXh0cmFzPW51bGwsdGhpcy5vY2N1cj1udWxsLHRoaXMucGFnZUFyZWE9bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy5wYWdlU2V0PW5ldyBvLlhGQU9iamVjdEFycmF5fVtuLiRjbGVhblBhZ2VdKCl7Zm9yKGNvbnN0IGUgb2YgdGhpcy5wYWdlQXJlYS5jaGlsZHJlbillW24uJGNsZWFuUGFnZV0oKTtmb3IoY29uc3QgZSBvZiB0aGlzLnBhZ2VTZXQuY2hpbGRyZW4pZVtuLiRjbGVhblBhZ2VdKCl9W24uJGlzVXNhYmxlXSgpe3JldHVybiF0aGlzLm9jY3VyfHwtMT09PXRoaXMub2NjdXIubWF4fHx0aGlzW24uJGV4dHJhXS5udW1iZXJPZlVzZTx0aGlzLm9jY3VyLm1heH1bbi4kZ2V0TmV4dFBhZ2VdKCl7aWYodGhpc1tuLiRleHRyYV18fCh0aGlzW24uJGV4dHJhXT17bnVtYmVyT2ZVc2U6MSxwYWdlSW5kZXg6LTEscGFnZVNldEluZGV4Oi0xfSksIm9yZGVyZWRPY2N1cnJlbmNlIj09PXRoaXMucmVsYXRpb24pe2lmKHRoaXNbbi4kZXh0cmFdLnBhZ2VJbmRleCsxPHRoaXMucGFnZUFyZWEuY2hpbGRyZW4ubGVuZ3RoKXJldHVybiB0aGlzW24uJGV4dHJhXS5wYWdlSW5kZXgrPTEsdGhpcy5wYWdlQXJlYS5jaGlsZHJlblt0aGlzW24uJGV4dHJhXS5wYWdlSW5kZXhdW24uJGdldE5leHRQYWdlXSgpO2lmKHRoaXNbbi4kZXh0cmFdLnBhZ2VTZXRJbmRleCsxPHRoaXMucGFnZVNldC5jaGlsZHJlbi5sZW5ndGgpcmV0dXJuIHRoaXNbbi4kZXh0cmFdLnBhZ2VTZXRJbmRleCs9MSx0aGlzLnBhZ2VTZXQuY2hpbGRyZW5bdGhpc1tuLiRleHRyYV0ucGFnZVNldEluZGV4XVtuLiRnZXROZXh0UGFnZV0oKTtpZih0aGlzW24uJGlzVXNhYmxlXSgpKXJldHVybiB0aGlzW24uJGV4dHJhXS5udW1iZXJPZlVzZSs9MSx0aGlzW24uJGV4dHJhXS5wYWdlSW5kZXg9LTEsdGhpc1tuLiRleHRyYV0ucGFnZVNldEluZGV4PS0xLHRoaXNbbi4kZ2V0TmV4dFBhZ2VdKCk7Y29uc3QgZT10aGlzW24uJGdldFBhcmVudF0oKTtyZXR1cm4gZSBpbnN0YW5jZW9mIGV0P2Vbbi4kZ2V0TmV4dFBhZ2VdKCk6KHRoaXNbbi4kY2xlYW5QYWdlXSgpLHRoaXNbbi4kZ2V0TmV4dFBhZ2VdKCkpfWNvbnN0IGU9dGhpc1tuLiRnZXRUZW1wbGF0ZVJvb3RdKClbbi4kZXh0cmFdLnBhZ2VOdW1iZXIsdD1lJTI9PTA/ImV2ZW4iOiJvZGQiLHI9MD09PWU/ImZpcnN0IjoicmVzdCI7bGV0IGE9dGhpcy5wYWdlQXJlYS5jaGlsZHJlbi5maW5kKChlPT5lLm9kZE9yRXZlbj09PXQmJmUucGFnZVBvc2l0aW9uPT09cikpO3JldHVybiBhfHwoYT10aGlzLnBhZ2VBcmVhLmNoaWxkcmVuLmZpbmQoKGU9PiJhbnkiPT09ZS5vZGRPckV2ZW4mJmUucGFnZVBvc2l0aW9uPT09cikpLGF8fChhPXRoaXMucGFnZUFyZWEuY2hpbGRyZW4uZmluZCgoZT0+ImFueSI9PT1lLm9kZE9yRXZlbiYmImFueSI9PT1lLnBhZ2VQb3NpdGlvbikpLGF8fHRoaXMucGFnZUFyZWEuY2hpbGRyZW5bMF0pKX19Y2xhc3MgdHQgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJwYXJhIiwhMCksdGhpcy5oQWxpZ249KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuaEFsaWduLFsibGVmdCIsImNlbnRlciIsImp1c3RpZnkiLCJqdXN0aWZ5QWxsIiwicmFkaXgiLCJyaWdodCJdKSx0aGlzLmlkPWUuaWR8fCIiLHRoaXMubGluZUhlaWdodD1lLmxpbmVIZWlnaHQ/KDAsYy5nZXRNZWFzdXJlbWVudCkoZS5saW5lSGVpZ2h0LCIwcHQiKToiIix0aGlzLm1hcmdpbkxlZnQ9ZS5tYXJnaW5MZWZ0PygwLGMuZ2V0TWVhc3VyZW1lbnQpKGUubWFyZ2luTGVmdCwiMHB0Iik6IiIsdGhpcy5tYXJnaW5SaWdodD1lLm1hcmdpblJpZ2h0PygwLGMuZ2V0TWVhc3VyZW1lbnQpKGUubWFyZ2luUmlnaHQsIjBwdCIpOiIiLHRoaXMub3JwaGFucz0oMCxjLmdldEludGVnZXIpKHtkYXRhOmUub3JwaGFucyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT5lPj0wfSksdGhpcy5wcmVzZXJ2ZT1lLnByZXNlcnZlfHwiIix0aGlzLnJhZGl4T2Zmc2V0PWUucmFkaXhPZmZzZXQ/KDAsYy5nZXRNZWFzdXJlbWVudCkoZS5yYWRpeE9mZnNldCwiMHB0Iik6IiIsdGhpcy5zcGFjZUFib3ZlPWUuc3BhY2VBYm92ZT8oMCxjLmdldE1lYXN1cmVtZW50KShlLnNwYWNlQWJvdmUsIjBwdCIpOiIiLHRoaXMuc3BhY2VCZWxvdz1lLnNwYWNlQmVsb3c/KDAsYy5nZXRNZWFzdXJlbWVudCkoZS5zcGFjZUJlbG93LCIwcHQiKToiIix0aGlzLnRhYkRlZmF1bHQ9ZS50YWJEZWZhdWx0PygwLGMuZ2V0TWVhc3VyZW1lbnQpKHRoaXMudGFiRGVmYXVsdCk6IiIsdGhpcy50YWJTdG9wcz0oZS50YWJTdG9wc3x8IiIpLnRyaW0oKS5zcGxpdCgvXHMrLykubWFwKCgoZSx0KT0+dCUyPT0xPygwLGMuZ2V0TWVhc3VyZW1lbnQpKGUpOmUpKSx0aGlzLnRleHRJbmRlbnQ9ZS50ZXh0SW5kZW50PygwLGMuZ2V0TWVhc3VyZW1lbnQpKGUudGV4dEluZGVudCwiMHB0Iik6IiIsdGhpcy51c2U9ZS51c2V8fCIiLHRoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLHRoaXMudkFsaWduPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnZBbGlnbixbInRvcCIsImJvdHRvbSIsIm1pZGRsZSJdKSx0aGlzLndpZG93cz0oMCxjLmdldEludGVnZXIpKHtkYXRhOmUud2lkb3dzLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PmU+PTB9KSx0aGlzLmh5cGhlbmF0aW9uPW51bGx9W24uJHRvU3R5bGVdKCl7Y29uc3QgZT0oMCxzLnRvU3R5bGUpKHRoaXMsImhBbGlnbiIpO3JldHVybiIiIT09dGhpcy5tYXJnaW5MZWZ0JiYoZS5wYWRkaW5nTGVmdD0oMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5tYXJnaW5MZWZ0KSksIiIhPT10aGlzLm1hcmdpblJpZ2h0JiYoZS5wYWRkaW5naWdodD0oMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5tYXJnaW5SaWdodCkpLCIiIT09dGhpcy5zcGFjZUFib3ZlJiYoZS5wYWRkaW5nVG9wPSgwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnNwYWNlQWJvdmUpKSwiIiE9PXRoaXMuc3BhY2VCZWxvdyYmKGUucGFkZGluZ0JvdHRvbT0oMCxzLm1lYXN1cmVUb1N0cmluZykodGhpcy5zcGFjZUJlbG93KSksIiIhPT10aGlzLnRleHRJbmRlbnQmJihlLnRleHRJbmRlbnQ9KDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMudGV4dEluZGVudCksKDAscy5maXhUZXh0SW5kZW50KShlKSksdGhpcy5saW5lSGVpZ2h0PjAmJihlLmxpbmVIZWlnaHQ9KDAscy5tZWFzdXJlVG9TdHJpbmcpKHRoaXMubGluZUhlaWdodCkpLCIiIT09dGhpcy50YWJEZWZhdWx0JiYoZS50YWJTaXplPSgwLHMubWVhc3VyZVRvU3RyaW5nKSh0aGlzLnRhYkRlZmF1bHQpKSx0aGlzLnRhYlN0b3BzLmxlbmd0aCx0aGlzLmh5cGhlbmF0YXRpb24mJk9iamVjdC5hc3NpZ24oZSx0aGlzLmh5cGhlbmF0YXRpb25bbi4kdG9TdHlsZV0oKSksZX19Y2xhc3MgcnQgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJwYXNzd29yZEVkaXQiLCEwKSx0aGlzLmhTY3JvbGxQb2xpY3k9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuaFNjcm9sbFBvbGljeSxbImF1dG8iLCJvZmYiLCJvbiJdKSx0aGlzLmlkPWUuaWR8fCIiLHRoaXMucGFzc3dvcmRDaGFyPWUucGFzc3dvcmRDaGFyfHwiKiIsdGhpcy51c2U9ZS51c2V8fCIiLHRoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLHRoaXMuYm9yZGVyPW51bGwsdGhpcy5leHRyYXM9bnVsbCx0aGlzLm1hcmdpbj1udWxsfX1jbGFzcyBudCBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsInBhdHRlcm4iLCEwKSx0aGlzLmlkPWUuaWR8fCIiLHRoaXMudHlwZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS50eXBlLFsiY3Jvc3NIYXRjaCIsImNyb3NzRGlhZ29uYWwiLCJkaWFnb25hbExlZnQiLCJkaWFnb25hbFJpZ2h0IiwiaG9yaXpvbnRhbCIsInZlcnRpY2FsIl0pLHRoaXMudXNlPWUudXNlfHwiIix0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIix0aGlzLmNvbG9yPW51bGwsdGhpcy5leHRyYXM9bnVsbH1bbi4kdG9TdHlsZV0oZSl7ZT1lP2Vbbi4kdG9TdHlsZV0oKToiI0ZGRkZGRiI7Y29uc3QgdD10aGlzLmNvbG9yP3RoaXMuY29sb3Jbbi4kdG9TdHlsZV0oKToiIzAwMDAwMCIscj0icmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCIsYT0iIi5jb25jYXQoZSwiLCIpLmNvbmNhdChlLCIgNXB4LCIpLmNvbmNhdCh0LCIgNXB4LCIpLmNvbmNhdCh0LCIgMTBweCIpO3N3aXRjaCh0aGlzLnR5cGUpe2Nhc2UiY3Jvc3NIYXRjaCI6cmV0dXJuIiIuY29uY2F0KHIsIih0byB0b3AsIikuY29uY2F0KGEsIikgIikuY29uY2F0KHIsIih0byByaWdodCwiKS5jb25jYXQoYSwiKSIpO2Nhc2UiY3Jvc3NEaWFnb25hbCI6cmV0dXJuIiIuY29uY2F0KHIsIig0NWRlZywiKS5jb25jYXQoYSwiKSAiKS5jb25jYXQociwiKC00NWRlZywiKS5jb25jYXQoYSwiKSIpO2Nhc2UiZGlhZ29uYWxMZWZ0IjpyZXR1cm4iIi5jb25jYXQociwiKDQ1ZGVnLCIpLmNvbmNhdChhLCIpIik7Y2FzZSJkaWFnb25hbFJpZ2h0IjpyZXR1cm4iIi5jb25jYXQociwiKC00NWRlZywiKS5jb25jYXQoYSwiKSIpO2Nhc2UiaG9yaXpvbnRhbCI6cmV0dXJuIiIuY29uY2F0KHIsIih0byB0b3AsIikuY29uY2F0KGEsIikiKTtjYXNlInZlcnRpY2FsIjpyZXR1cm4iIi5jb25jYXQociwiKHRvIHJpZ2h0LCIpLmNvbmNhdChhLCIpIil9cmV0dXJuIiJ9fWNsYXNzIGF0IGV4dGVuZHMgby5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwicGljdHVyZSIpLHRoaXMuaWQ9ZS5pZHx8IiIsdGhpcy51c2U9ZS51c2V8fCIiLHRoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBpdCBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsInByb3RvIiwhMCksdGhpcy5hcHBlYXJhbmNlRmlsdGVyPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuYXJjPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuYXJlYT1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmFzc2lzdD1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmJhcmNvZGU9bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy5iaW5kSXRlbXM9bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy5ib29rZW5kPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuYm9vbGVhbj1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmJvcmRlcj1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmJyZWFrPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuYnJlYWtBZnRlcj1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmJyZWFrQmVmb3JlPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuYnV0dG9uPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuY2FsY3VsYXRlPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuY2FwdGlvbj1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmNlcnRpZmljYXRlPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuY2VydGlmaWNhdGVzPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuY2hlY2tCdXR0b249bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy5jaG9pY2VMaXN0PW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuY29sb3I9bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy5jb21iPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuY29ubmVjdD1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmNvbnRlbnRBcmVhPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuY29ybmVyPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuZGF0ZT1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmRhdGVUaW1lPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuZGF0ZVRpbWVFZGl0PW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuZGVjaW1hbD1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmRlZmF1bHRVaT1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmRlc2M9bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy5kaWdlc3RNZXRob2Q9bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy5kaWdlc3RNZXRob2RzPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuZHJhdz1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmVkZ2U9bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy5lbmNvZGluZz1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmVuY29kaW5ncz1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmVuY3J5cHQ9bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy5lbmNyeXB0RGF0YT1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmVuY3J5cHRpb249bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy5lbmNyeXB0aW9uTWV0aG9kPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuZW5jcnlwdGlvbk1ldGhvZHM9bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy5ldmVudD1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmV4RGF0YT1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmV4T2JqZWN0PW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuZXhjbEdyb3VwPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuZXhlY3V0ZT1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmV4dHJhcz1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmZpZWxkPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuZmlsbD1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmZpbHRlcj1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmZsb2F0PW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuZm9udD1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmZvcm1hdD1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmhhbmRsZXI9bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy5oeXBoZW5hdGlvbj1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmltYWdlPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuaW1hZ2VFZGl0PW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuaW50ZWdlcj1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmlzc3VlcnM9bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy5pdGVtcz1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmtlZXA9bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy5rZXlVc2FnZT1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmxpbmU9bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy5saW5lYXI9bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy5sb2NrRG9jdW1lbnQ9bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy5tYW5pZmVzdD1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLm1hcmdpbj1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLm1kcD1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLm1lZGl1bT1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLm1lc3NhZ2U9bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy5udW1lcmljRWRpdD1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLm9jY3VyPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMub2lkPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMub2lkcz1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLm92ZXJmbG93PW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMucGFnZUFyZWE9bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy5wYWdlU2V0PW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMucGFyYT1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLnBhc3N3b3JkRWRpdD1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLnBhdHRlcm49bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy5waWN0dXJlPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMucmFkaWFsPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMucmVhc29uPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMucmVhc29ucz1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLnJlY3RhbmdsZT1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLnJlZj1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLnNjcmlwdD1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLnNldFByb3BlcnR5PW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuc2lnbkRhdGE9bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy5zaWduYXR1cmU9bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy5zaWduaW5nPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuc29saWQ9bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy5zcGVhaz1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLnN0aXBwbGU9bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy5zdWJmb3JtPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuc3ViZm9ybVNldD1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLnN1YmplY3RETj1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLnN1YmplY3RETnM9bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy5zdWJtaXQ9bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy50ZXh0PW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMudGV4dEVkaXQ9bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy50aW1lPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMudGltZVN0YW1wPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMudG9vbFRpcD1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLnRyYXZlcnNhbD1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLnRyYXZlcnNlPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMudWk9bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy52YWxpZGF0ZT1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLnZhbHVlPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMudmFyaWFibGVzPW5ldyBvLlhGQU9iamVjdEFycmF5fX1jbGFzcyBzdCBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsInJhZGlhbCIsITApLHRoaXMuaWQ9ZS5pZHx8IiIsdGhpcy50eXBlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJ0b0VkZ2UiLCJ0b0NlbnRlciJdKSx0aGlzLnVzZT1lLnVzZXx8IiIsdGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiIsdGhpcy5jb2xvcj1udWxsLHRoaXMuZXh0cmFzPW51bGx9W24uJHRvU3R5bGVdKGUpe2U9ZT9lW24uJHRvU3R5bGVdKCk6IiNGRkZGRkYiO2NvbnN0IHQ9dGhpcy5jb2xvcj90aGlzLmNvbG9yW24uJHRvU3R5bGVdKCk6IiMwMDAwMDAiO3JldHVybiJyYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IGNlbnRlciwgIi5jb25jYXQoInRvRWRnZSI9PT10aGlzLnR5cGU/IiIuY29uY2F0KGUsIiwiKS5jb25jYXQodCk6IiIuY29uY2F0KHQsIiwiKS5jb25jYXQoZSksIikiKX19Y2xhc3Mgb3QgZXh0ZW5kcyBvLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJyZWFzb24iKSx0aGlzLmlkPWUuaWR8fCIiLHRoaXMubmFtZT1lLm5hbWV8fCIiLHRoaXMudXNlPWUudXNlfHwiIix0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgY3QgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJyZWFzb25zIiwhMCksdGhpcy5pZD1lLmlkfHwiIix0aGlzLnR5cGU9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksdGhpcy51c2U9ZS51c2V8fCIiLHRoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLHRoaXMucmVhc29uPW5ldyBvLlhGQU9iamVjdEFycmF5fX1jbGFzcyBsdCBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsInJlY3RhbmdsZSIsITApLHRoaXMuaGFuZD0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5oYW5kLFsiZXZlbiIsImxlZnQiLCJyaWdodCJdKSx0aGlzLmlkPWUuaWR8fCIiLHRoaXMudXNlPWUudXNlfHwiIix0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIix0aGlzLmNvcm5lcj1uZXcgby5YRkFPYmplY3RBcnJheSg0KSx0aGlzLmVkZ2U9bmV3IG8uWEZBT2JqZWN0QXJyYXkoNCksdGhpcy5maWxsPW51bGx9W24uJHRvSFRNTF0oKXt2YXIgZTtjb25zdCB0PXRoaXMuZWRnZS5jaGlsZHJlbi5sZW5ndGg/dGhpcy5lZGdlLmNoaWxkcmVuWzBdOm5ldyB1ZSh7fSkscj10W24uJHRvU3R5bGVdKCksYT1PYmplY3QuY3JlYXRlKG51bGwpOyJ2aXNpYmxlIj09PShudWxsPT09KGU9dGhpcy5maWxsKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5wcmVzZW5jZSk/T2JqZWN0LmFzc2lnbihhLHRoaXMuZmlsbFtuLiR0b1N0eWxlXSgpKTphLmZpbGw9InRyYW5zcGFyZW50IixhLnN0cm9rZVdpZHRoPSgwLHMubWVhc3VyZVRvU3RyaW5nKSgidmlzaWJsZSI9PT10LnByZXNlbmNlP3QudGhpY2tuZXNzOjApLGEuc3Ryb2tlPXIuY29sb3I7Y29uc3QgaT0odGhpcy5jb3JuZXIuY2hpbGRyZW4ubGVuZ3RoP3RoaXMuY29ybmVyLmNoaWxkcmVuWzBdOm5ldyB0ZSh7fSkpW24uJHRvU3R5bGVdKCksbz17bmFtZToic3ZnIixjaGlsZHJlbjpbe25hbWU6InJlY3QiLGF0dHJpYnV0ZXM6e3htbG5zOmcsd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSIseDowLHk6MCxyeDppLnJhZGl1cyxyeTppLnJhZGl1cyxzdHlsZTphfX1dLGF0dHJpYnV0ZXM6e3htbG5zOmcsc3R5bGU6e292ZXJmbG93OiJ2aXNpYmxlIn0sd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9fTtyZXR1cm4gdyh0aGlzW24uJGdldFBhcmVudF0oKVtuLiRnZXRQYXJlbnRdKCkpP2MuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e3N0eWxlOntkaXNwbGF5OiJpbmxpbmUiLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifX0sY2hpbGRyZW46W29dfSk6KG8uYXR0cmlidXRlcy5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGMuSFRNTFJlc3VsdC5zdWNjZXNzKG8pKX19Y2xhc3MgaHQgZXh0ZW5kcyBvLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJyZWYiKSx0aGlzLmlkPWUuaWR8fCIiLHRoaXMudXNlPWUudXNlfHwiIix0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgdXQgZXh0ZW5kcyBvLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJzY3JpcHQiKSx0aGlzLmJpbmRpbmc9ZS5iaW5kaW5nfHwiIix0aGlzLmNvbnRlbnRUeXBlPWUuY29udGVudFR5cGV8fCIiLHRoaXMuaWQ9ZS5pZHx8IiIsdGhpcy5uYW1lPWUubmFtZXx8IiIsdGhpcy5ydW5BdD0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5ydW5BdCxbImNsaWVudCIsImJvdGgiLCJzZXJ2ZXIiXSksdGhpcy51c2U9ZS51c2V8fCIiLHRoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBkdCBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsInNldFByb3BlcnR5IiksdGhpcy5jb25uZWN0aW9uPWUuY29ubmVjdGlvbnx8IiIsdGhpcy5yZWY9ZS5yZWZ8fCIiLHRoaXMudGFyZ2V0PWUudGFyZ2V0fHwiIn19dC5TZXRQcm9wZXJ0eT1kdDtjbGFzcyBmdCBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsInNpZ25EYXRhIiwhMCksdGhpcy5pZD1lLmlkfHwiIix0aGlzLm9wZXJhdGlvbj0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5vcGVyYXRpb24sWyJzaWduIiwiY2xlYXIiLCJ2ZXJpZnkiXSksdGhpcy5yZWY9ZS5yZWZ8fCIiLHRoaXMudGFyZ2V0PWUudGFyZ2V0fHwiIix0aGlzLnVzZT1lLnVzZXx8IiIsdGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiIsdGhpcy5maWx0ZXI9bnVsbCx0aGlzLm1hbmlmZXN0PW51bGx9fWNsYXNzIGd0IGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwic2lnbmF0dXJlIiwhMCksdGhpcy5pZD1lLmlkfHwiIix0aGlzLnR5cGU9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIlBERjEuMyIsIlBERjEuNiJdKSx0aGlzLnVzZT1lLnVzZXx8IiIsdGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiIsdGhpcy5ib3JkZXI9bnVsbCx0aGlzLmV4dHJhcz1udWxsLHRoaXMuZmlsdGVyPW51bGwsdGhpcy5tYW5pZmVzdD1udWxsLHRoaXMubWFyZ2luPW51bGx9fWNsYXNzIHB0IGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwic2lnbmluZyIsITApLHRoaXMuaWQ9ZS5pZHx8IiIsdGhpcy50eXBlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pLHRoaXMudXNlPWUudXNlfHwiIix0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIix0aGlzLmNlcnRpZmljYXRlPW5ldyBvLlhGQU9iamVjdEFycmF5fX1jbGFzcyBtdCBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsInNvbGlkIiwhMCksdGhpcy5pZD1lLmlkfHwiIix0aGlzLnVzZT1lLnVzZXx8IiIsdGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiIsdGhpcy5leHRyYXM9bnVsbH1bbi4kdG9TdHlsZV0oZSl7cmV0dXJuIGU/ZVtuLiR0b1N0eWxlXSgpOiIjRkZGRkZGIn19Y2xhc3MgYnQgZXh0ZW5kcyBvLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJzcGVhayIpLHRoaXMuZGlzYWJsZT0oMCxjLmdldEludGVnZXIpKHtkYXRhOmUuZGlzYWJsZSxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pLHRoaXMuaWQ9ZS5pZHx8IiIsdGhpcy5wcmlvcml0eT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5wcmlvcml0eSxbImN1c3RvbSIsImNhcHRpb24iLCJuYW1lIiwidG9vbFRpcCJdKSx0aGlzLnJpZD1lLnJpZHx8IiIsdGhpcy51c2U9ZS51c2V8fCIiLHRoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyB5dCBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsInN0aXBwbGUiLCEwKSx0aGlzLmlkPWUuaWR8fCIiLHRoaXMucmF0ZT0oMCxjLmdldEludGVnZXIpKHtkYXRhOmUucmF0ZSxkZWZhdWx0VmFsdWU6NTAsdmFsaWRhdGU6ZT0+ZT49MCYmZTw9MTAwfSksdGhpcy51c2U9ZS51c2V8fCIiLHRoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLHRoaXMuY29sb3I9bnVsbCx0aGlzLmV4dHJhcz1udWxsfVtuLiR0b1N0eWxlXShlKXtjb25zdCB0PXRoaXMucmF0ZS8xMDA7cmV0dXJuIGwuVXRpbC5tYWtlSGV4Q29sb3IoTWF0aC5yb3VuZChlLnZhbHVlLnIqKDEtdCkrdGhpcy52YWx1ZS5yKnQpLE1hdGgucm91bmQoZS52YWx1ZS5nKigxLXQpK3RoaXMudmFsdWUuZyp0KSxNYXRoLnJvdW5kKGUudmFsdWUuYiooMS10KSt0aGlzLnZhbHVlLmIqdCkpfX1jbGFzcyB3dCBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsInN1YmZvcm0iLCEwKSx0aGlzLmFjY2Vzcz0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5hY2Nlc3MsWyJvcGVuIiwibm9uSW50ZXJhY3RpdmUiLCJwcm90ZWN0ZWQiLCJyZWFkT25seSJdKSx0aGlzLmFsbG93TWFjcm89KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmFsbG93TWFjcm8sZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KSx0aGlzLmFuY2hvclR5cGU9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuYW5jaG9yVHlwZSxbInRvcExlZnQiLCJib3R0b21DZW50ZXIiLCJib3R0b21MZWZ0IiwiYm90dG9tUmlnaHQiLCJtaWRkbGVDZW50ZXIiLCJtaWRkbGVMZWZ0IiwibWlkZGxlUmlnaHQiLCJ0b3BDZW50ZXIiLCJ0b3BSaWdodCJdKSx0aGlzLmNvbFNwYW49KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmNvbFNwYW4sZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZT0+ZT49MXx8LTE9PT1lfSksdGhpcy5jb2x1bW5XaWR0aHM9KGUuY29sdW1uV2lkdGhzfHwiIikudHJpbSgpLnNwbGl0KC9ccysvKS5tYXAoKGU9PiItMSI9PT1lPy0xOigwLGMuZ2V0TWVhc3VyZW1lbnQpKGUpKSksdGhpcy5oPWUuaD8oMCxjLmdldE1lYXN1cmVtZW50KShlLmgpOiIiLHRoaXMuaEFsaWduPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmhBbGlnbixbImxlZnQiLCJjZW50ZXIiLCJqdXN0aWZ5IiwianVzdGlmeUFsbCIsInJhZGl4IiwicmlnaHQiXSksdGhpcy5pZD1lLmlkfHwiIix0aGlzLmxheW91dD0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5sYXlvdXQsWyJwb3NpdGlvbiIsImxyLXRiIiwicmwtcm93IiwicmwtdGIiLCJyb3ciLCJ0YWJsZSIsInRiIl0pLHRoaXMubG9jYWxlPWUubG9jYWxlfHwiIix0aGlzLm1heEg9KDAsYy5nZXRNZWFzdXJlbWVudCkoZS5tYXhILCIwcHQiKSx0aGlzLm1heFc9KDAsYy5nZXRNZWFzdXJlbWVudCkoZS5tYXhXLCIwcHQiKSx0aGlzLm1lcmdlTW9kZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5tZXJnZU1vZGUsWyJjb25zdW1lRGF0YSIsIm1hdGNoVGVtcGxhdGUiXSksdGhpcy5taW5IPSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUubWluSCwiMHB0IiksdGhpcy5taW5XPSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUubWluVywiMHB0IiksdGhpcy5uYW1lPWUubmFtZXx8IiIsdGhpcy5wcmVzZW5jZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKSx0aGlzLnJlbGV2YW50PSgwLGMuZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpLHRoaXMucmVzdG9yZVN0YXRlPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnJlc3RvcmVTdGF0ZSxbIm1hbnVhbCIsImF1dG8iXSksdGhpcy5zY29wZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5zY29wZSxbIm5hbWUiLCJub25lIl0pLHRoaXMudXNlPWUudXNlfHwiIix0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIix0aGlzLnc9ZS53PygwLGMuZ2V0TWVhc3VyZW1lbnQpKGUudyk6IiIsdGhpcy54PSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUueCwiMHB0IiksdGhpcy55PSgwLGMuZ2V0TWVhc3VyZW1lbnQpKGUueSwiMHB0IiksdGhpcy5hc3Npc3Q9bnVsbCx0aGlzLmJpbmQ9bnVsbCx0aGlzLmJvb2tlbmQ9bnVsbCx0aGlzLmJvcmRlcj1udWxsLHRoaXMuYnJlYWs9bnVsbCx0aGlzLmNhbGN1bGF0ZT1udWxsLHRoaXMuZGVzYz1udWxsLHRoaXMuZXh0cmFzPW51bGwsdGhpcy5rZWVwPW51bGwsdGhpcy5tYXJnaW49bnVsbCx0aGlzLm9jY3VyPW51bGwsdGhpcy5vdmVyZmxvdz1udWxsLHRoaXMucGFnZVNldD1udWxsLHRoaXMucGFyYT1udWxsLHRoaXMudHJhdmVyc2FsPW51bGwsdGhpcy52YWxpZGF0ZT1udWxsLHRoaXMudmFyaWFibGVzPW51bGwsdGhpcy5hcmVhPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuYnJlYWtBZnRlcj1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmJyZWFrQmVmb3JlPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuY29ubmVjdD1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmRyYXc9bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy5ldmVudD1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmV4T2JqZWN0PW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuZXhjbEdyb3VwPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuZmllbGQ9bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy5wcm90bz1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLnNldFByb3BlcnR5PW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuc3ViZm9ybT1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLnN1YmZvcm1TZXQ9bmV3IG8uWEZBT2JqZWN0QXJyYXl9W24uJGdldFN1YmZvcm1QYXJlbnRdKCl7Y29uc3QgZT10aGlzW24uJGdldFBhcmVudF0oKTtyZXR1cm4gZSBpbnN0YW5jZW9mIHZ0P2Vbbi4kZ2V0U3ViZm9ybVBhcmVudF0oKTplfVtuLiRpc0JpbmRhYmxlXSgpe3JldHVybiEwfVtuLiRpc1RoZXJlTW9yZVdpZHRoXSgpe3JldHVybiB0aGlzLmxheW91dC5lbmRzV2l0aCgiLXRiIikmJjA9PT10aGlzW24uJGV4dHJhXS5hdHRlbXB0JiZ0aGlzW24uJGV4dHJhXS5udW1iZXJJbkxpbmU+MHx8dGhpc1tuLiRnZXRQYXJlbnRdKClbbi4kaXNUaGVyZU1vcmVXaWR0aF0oKX0qW24uJGdldENvbnRhaW5lZENoaWxkcmVuXSgpe3lpZWxkKngodGhpcyl9W24uJGZsdXNoSFRNTF0oKXtyZXR1cm4oMCxpLmZsdXNoSFRNTCkodGhpcyl9W24uJGFkZEhUTUxdKGUsdCl7KDAsaS5hZGRIVE1MKSh0aGlzLGUsdCl9W24uJGdldEF2YWlsYWJsZVNwYWNlXSgpe3JldHVybigwLGkuZ2V0QXZhaWxhYmxlU3BhY2UpKHRoaXMpfVtuLiRpc1NwbGl0dGFibGVdKCl7dmFyIGU7Y29uc3QgdD10aGlzW24uJGdldFN1YmZvcm1QYXJlbnRdKCk7cmV0dXJuISF0W24uJGlzU3BsaXR0YWJsZV0oKSYmKHZvaWQgMCE9PXRoaXNbbi4kZXh0cmFdLl9pc1NwbGl0dGFibGU/dGhpc1tuLiRleHRyYV0uX2lzU3BsaXR0YWJsZToicG9zaXRpb24iPT09dGhpcy5sYXlvdXR8fHRoaXMubGF5b3V0LmluY2x1ZGVzKCJyb3ciKXx8dGhpcy5rZWVwJiYibm9uZSIhPT10aGlzLmtlZXAuaW50YWN0Pyh0aGlzW24uJGV4dHJhXS5faXNTcGxpdHRhYmxlPSExLCExKTohKG51bGwhPT0oZT10LmxheW91dCkmJnZvaWQgMCE9PWUmJmUuZW5kc1dpdGgoIi10YiIpJiYwIT09dFtuLiRleHRyYV0ubnVtYmVySW5MaW5lfHwodGhpc1tuLiRleHRyYV0uX2lzU3BsaXR0YWJsZT0hMCwwKSkpfVtuLiR0b0hUTUxdKGUpe3ZhciB0O2lmKEEodGhpcyksdGhpcy5icmVhayl7aWYoImF1dG8iIT09dGhpcy5icmVhay5hZnRlcnx8IiIhPT10aGlzLmJyZWFrLmFmdGVyVGFyZ2V0KXtjb25zdCBlPW5ldyBYKHt0YXJnZXRUeXBlOnRoaXMuYnJlYWsuYWZ0ZXIsdGFyZ2V0OnRoaXMuYnJlYWsuYWZ0ZXJUYXJnZXQsc3RhcnROZXc6dGhpcy5icmVhay5zdGFydE5ldy50b1N0cmluZygpfSk7ZVtuLiRnbG9iYWxEYXRhXT10aGlzW24uJGdsb2JhbERhdGFdLHRoaXNbbi4kYXBwZW5kQ2hpbGRdKGUpLHRoaXMuYnJlYWtBZnRlci5wdXNoKGUpfWlmKCJhdXRvIiE9PXRoaXMuYnJlYWsuYmVmb3JlfHwiIiE9PXRoaXMuYnJlYWsuYmVmb3JlVGFyZ2V0KXtjb25zdCBlPW5ldyBIKHt0YXJnZXRUeXBlOnRoaXMuYnJlYWsuYmVmb3JlLHRhcmdldDp0aGlzLmJyZWFrLmJlZm9yZVRhcmdldCxzdGFydE5ldzp0aGlzLmJyZWFrLnN0YXJ0TmV3LnRvU3RyaW5nKCl9KTtlW24uJGdsb2JhbERhdGFdPXRoaXNbbi4kZ2xvYmFsRGF0YV0sdGhpc1tuLiRhcHBlbmRDaGlsZF0oZSksdGhpcy5icmVha0JlZm9yZS5wdXNoKGUpfWlmKCIiIT09dGhpcy5icmVhay5vdmVyZmxvd1RhcmdldCl7Y29uc3QgZT1uZXcgWmUoe3RhcmdldDp0aGlzLmJyZWFrLm92ZXJmbG93VGFyZ2V0LGxlYWRlcjp0aGlzLmJyZWFrLm92ZXJmbG93TGVhZGVyLHRyYWlsZXI6dGhpcy5icmVhay5vdmVyZmxvd1RyYWlsZXJ9KTtlW24uJGdsb2JhbERhdGFdPXRoaXNbbi4kZ2xvYmFsRGF0YV0sdGhpc1tuLiRhcHBlbmRDaGlsZF0oZSksdGhpcy5vdmVyZmxvdy5wdXNoKGUpfXRoaXNbbi4kcmVtb3ZlQ2hpbGRdKHRoaXMuYnJlYWspLHRoaXMuYnJlYWs9bnVsbH1pZigiaGlkZGVuIj09PXRoaXMucHJlc2VuY2V8fCJpbmFjdGl2ZSI9PT10aGlzLnByZXNlbmNlKXJldHVybiBjLkhUTUxSZXN1bHQuRU1QVFk7aWYoKHRoaXMuYnJlYWtCZWZvcmUuY2hpbGRyZW4ubGVuZ3RoPjF8fHRoaXMuYnJlYWtBZnRlci5jaGlsZHJlbi5sZW5ndGg+MSkmJigwLGwud2FybikoIlhGQSAtIFNldmVyYWwgYnJlYWtCZWZvcmUgb3IgYnJlYWtBZnRlciBpbiBzdWJmb3JtczogcGxlYXNlIGZpbGUgYSBidWcuIiksdGhpcy5icmVha0JlZm9yZS5jaGlsZHJlbi5sZW5ndGg+PTEpe2NvbnN0IGU9dGhpcy5icmVha0JlZm9yZS5jaGlsZHJlblswXTtpZihUKGUpKXJldHVybiBjLkhUTUxSZXN1bHQuYnJlYWtOb2RlKGUpfWlmKG51bGwhPT0odD10aGlzW24uJGV4dHJhXSkmJnZvaWQgMCE9PXQmJnQuYWZ0ZXJCcmVha0FmdGVyKXJldHVybiBjLkhUTUxSZXN1bHQuRU1QVFk7KDAscy5maXhEaW1lbnNpb25zKSh0aGlzKTtjb25zdCByPVtdLGE9e2lkOnRoaXNbbi4kdWlkXSxjbGFzczpbXX07KDAscy5zZXRBY2Nlc3MpKHRoaXMsYS5jbGFzcyksdGhpc1tuLiRleHRyYV18fCh0aGlzW24uJGV4dHJhXT1PYmplY3QuY3JlYXRlKG51bGwpKSxPYmplY3QuYXNzaWduKHRoaXNbbi4kZXh0cmFdLHtjaGlsZHJlbjpyLGxpbmU6bnVsbCxhdHRyaWJ1dGVzOmEsYXR0ZW1wdDowLG51bWJlckluTGluZTowLGF2YWlsYWJsZVNwYWNlOnt3aWR0aDpNYXRoLm1pbih0aGlzLnd8fDEvMCxlLndpZHRoKSxoZWlnaHQ6TWF0aC5taW4odGhpcy5ofHwxLzAsZS5oZWlnaHQpfSx3aWR0aDowLGhlaWdodDowLHByZXZIZWlnaHQ6MCxjdXJyZW50V2lkdGg6MH0pO2NvbnN0IG89dGhpc1tuLiRnZXRUZW1wbGF0ZVJvb3RdKCksaD1vW24uJGV4dHJhXS5ub0xheW91dEZhaWx1cmUsdT10aGlzW24uJGlzU3BsaXR0YWJsZV0oKTtpZih1fHxGKHRoaXMpLCEoMCxpLmNoZWNrRGltZW5zaW9ucykodGhpcyxlKSlyZXR1cm4gYy5IVE1MUmVzdWx0LkZBSUxVUkU7Y29uc3QgZD1uZXcgU2V0KFsiYXJlYSIsImRyYXciLCJleGNsR3JvdXAiLCJmaWVsZCIsInN1YmZvcm0iLCJzdWJmb3JtU2V0Il0pO2lmKHRoaXMubGF5b3V0LmluY2x1ZGVzKCJyb3ciKSl7Y29uc3QgZT10aGlzW24uJGdldFN1YmZvcm1QYXJlbnRdKCkuY29sdW1uV2lkdGhzO0FycmF5LmlzQXJyYXkoZSkmJmUubGVuZ3RoPjAmJih0aGlzW24uJGV4dHJhXS5jb2x1bW5XaWR0aHM9ZSx0aGlzW24uJGV4dHJhXS5jdXJyZW50Q29sdW1uPTApfWNvbnN0IGY9KDAscy50b1N0eWxlKSh0aGlzLCJhbmNob3JUeXBlIiwiZGltZW5zaW9ucyIsInBvc2l0aW9uIiwicHJlc2VuY2UiLCJib3JkZXIiLCJtYXJnaW4iLCJoQWxpZ24iKSxnPVsieGZhU3ViZm9ybSJdLHA9KDAscy5sYXlvdXRDbGFzcykodGhpcyk7aWYocCYmZy5wdXNoKHApLGEuc3R5bGU9ZixhLmNsYXNzPWcsdGhpcy5uYW1lJiYoYS54ZmFOYW1lPXRoaXMubmFtZSksdGhpcy5vdmVyZmxvdyl7Y29uc3QgdD10aGlzLm92ZXJmbG93W24uJGdldEV4dHJhXSgpO3QuYWRkTGVhZGVyJiYodC5hZGRMZWFkZXI9ITEsTSh0aGlzLHQubGVhZGVyLGUpKX10aGlzW24uJHB1c2hQYXJhXSgpO2NvbnN0IG09ImxyLXRiIj09PXRoaXMubGF5b3V0fHwicmwtdGIiPT09dGhpcy5sYXlvdXQsYj1tPzI6MTtmb3IoO3RoaXNbbi4kZXh0cmFdLmF0dGVtcHQ8Yjt0aGlzW24uJGV4dHJhXS5hdHRlbXB0Kyspe20mJjE9PT10aGlzW24uJGV4dHJhXS5hdHRlbXB0JiYodGhpc1tuLiRleHRyYV0ubnVtYmVySW5MaW5lPTApO2NvbnN0IGU9dGhpc1tuLiRjaGlsZHJlblRvSFRNTF0oe2ZpbHRlcjpkLGluY2x1ZGU6ITB9KTtpZihlLnN1Y2Nlc3MpYnJlYWs7aWYoZS5pc0JyZWFrKCkpcmV0dXJuIHRoaXNbbi4kcG9wUGFyYV0oKSxlO2lmKG0mJjA9PT10aGlzW24uJGV4dHJhXS5hdHRlbXB0JiYwPT09dGhpc1tuLiRleHRyYV0ubnVtYmVySW5MaW5lJiYhb1tuLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlKXt0aGlzW24uJGV4dHJhXS5hdHRlbXB0PWI7YnJlYWt9fWlmKHRoaXNbbi4kcG9wUGFyYV0oKSx1fHxJKHRoaXMpLG9bbi4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZT1oLHRoaXNbbi4kZXh0cmFdLmF0dGVtcHQ9PT1iKXJldHVybiB0aGlzLm92ZXJmbG93JiYodGhpc1tuLiRnZXRUZW1wbGF0ZVJvb3RdKClbbi4kZXh0cmFdLm92ZXJmbG93Tm9kZT10aGlzLm92ZXJmbG93KSx1fHxkZWxldGUgdGhpc1tuLiRleHRyYV0sYy5IVE1MUmVzdWx0LkZBSUxVUkU7aWYodGhpcy5vdmVyZmxvdyl7Y29uc3QgdD10aGlzLm92ZXJmbG93W24uJGdldEV4dHJhXSgpO3QuYWRkVHJhaWxlciYmKHQuYWRkVHJhaWxlcj0hMSxNKHRoaXMsdC50cmFpbGVyLGUpKX1sZXQgeT0wLHc9MDt0aGlzLm1hcmdpbiYmKHk9dGhpcy5tYXJnaW4ubGVmdEluc2V0K3RoaXMubWFyZ2luLnJpZ2h0SW5zZXQsdz10aGlzLm1hcmdpbi50b3BJbnNldCt0aGlzLm1hcmdpbi5ib3R0b21JbnNldCk7Y29uc3Qgdj1NYXRoLm1heCh0aGlzW24uJGV4dHJhXS53aWR0aCt5LHRoaXMud3x8MCkseD1NYXRoLm1heCh0aGlzW24uJGV4dHJhXS5oZWlnaHQrdyx0aGlzLmh8fDApLFM9W3RoaXMueCx0aGlzLnksdix4XTtpZigiIj09PXRoaXMudyYmKGYud2lkdGg9KDAscy5tZWFzdXJlVG9TdHJpbmcpKHYpKSwiIj09PXRoaXMuaCYmKGYuaGVpZ2h0PSgwLHMubWVhc3VyZVRvU3RyaW5nKSh4KSksKCIwcHgiPT09Zi53aWR0aHx8IjBweCI9PT1mLmhlaWdodCkmJjA9PT1yLmxlbmd0aClyZXR1cm4gYy5IVE1MUmVzdWx0LkVNUFRZO2NvbnN0IEM9e25hbWU6ImRpdiIsYXR0cmlidXRlczphLGNoaWxkcmVuOnJ9O2sodGhpcyxhKTtjb25zdCBPPWMuSFRNTFJlc3VsdC5zdWNjZXNzKCgwLHMuY3JlYXRlV3JhcHBlcikodGhpcyxDKSxTKTtpZih0aGlzLmJyZWFrQWZ0ZXIuY2hpbGRyZW4ubGVuZ3RoPj0xKXtjb25zdCBlPXRoaXMuYnJlYWtBZnRlci5jaGlsZHJlblswXTtpZihUKGUpKXJldHVybiB0aGlzW24uJGV4dHJhXS5hZnRlckJyZWFrQWZ0ZXI9TyxjLkhUTUxSZXN1bHQuYnJlYWtOb2RlKGUpfXJldHVybiBkZWxldGUgdGhpc1tuLiRleHRyYV0sT319Y2xhc3MgdnQgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJzdWJmb3JtU2V0IiwhMCksdGhpcy5pZD1lLmlkfHwiIix0aGlzLm5hbWU9ZS5uYW1lfHwiIix0aGlzLnJlbGF0aW9uPSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLnJlbGF0aW9uLFsib3JkZXJlZCIsImNob2ljZSIsInVub3JkZXJlZCJdKSx0aGlzLnJlbGV2YW50PSgwLGMuZ2V0UmVsZXZhbnQpKGUucmVsZXZhbnQpLHRoaXMudXNlPWUudXNlfHwiIix0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIix0aGlzLmJvb2tlbmQ9bnVsbCx0aGlzLmJyZWFrPW51bGwsdGhpcy5kZXNjPW51bGwsdGhpcy5leHRyYXM9bnVsbCx0aGlzLm9jY3VyPW51bGwsdGhpcy5vdmVyZmxvdz1udWxsLHRoaXMuYnJlYWtBZnRlcj1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmJyZWFrQmVmb3JlPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuc3ViZm9ybT1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLnN1YmZvcm1TZXQ9bmV3IG8uWEZBT2JqZWN0QXJyYXl9KltuLiRnZXRDb250YWluZWRDaGlsZHJlbl0oKXt5aWVsZCp4KHRoaXMpfVtuLiRnZXRTdWJmb3JtUGFyZW50XSgpe2xldCBlPXRoaXNbbi4kZ2V0UGFyZW50XSgpO2Zvcig7IShlIGluc3RhbmNlb2Ygd3QpOyllPWVbbi4kZ2V0UGFyZW50XSgpO3JldHVybiBlfVtuLiRpc0JpbmRhYmxlXSgpe3JldHVybiEwfX1jbGFzcyB4dCBleHRlbmRzIG8uQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJzdWJqZWN0RE4iKSx0aGlzLmRlbGltaXRlcj1lLmRlbGltaXRlcnx8IiwiLHRoaXMuaWQ9ZS5pZHx8IiIsdGhpcy5uYW1lPWUubmFtZXx8IiIsdGhpcy51c2U9ZS51c2V8fCIiLHRoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifVtuLiRmaW5hbGl6ZV0oKXt0aGlzW24uJGNvbnRlbnRdPW5ldyBNYXAodGhpc1tuLiRjb250ZW50XS5zcGxpdCh0aGlzLmRlbGltaXRlcikubWFwKChlPT4oKGU9ZS5zcGxpdCgiPSIsMikpWzBdPWVbMF0udHJpbSgpLGUpKSkpfX1jbGFzcyBTdCBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsInN1YmplY3RETnMiLCEwKSx0aGlzLmlkPWUuaWR8fCIiLHRoaXMudHlwZT0oMCxjLmdldFN0cmluZ09wdGlvbikoZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKSx0aGlzLnVzZT1lLnVzZXx8IiIsdGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiIsdGhpcy5zdWJqZWN0RE49bmV3IG8uWEZBT2JqZWN0QXJyYXl9fWNsYXNzIEF0IGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwic3VibWl0IiwhMCksdGhpcy5lbWJlZFBERj0oMCxjLmdldEludGVnZXIpKHtkYXRhOmUuZW1iZWRQREYsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KSx0aGlzLmZvcm1hdD0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5mb3JtYXQsWyJ4ZHAiLCJmb3JtZGF0YSIsInBkZiIsInVybGVuY29kZWQiLCJ4ZmQiLCJ4bWwiXSksdGhpcy5pZD1lLmlkfHwiIix0aGlzLnRhcmdldD1lLnRhcmdldHx8IiIsdGhpcy50ZXh0RW5jb2Rpbmc9KDAsYy5nZXRLZXl3b3JkKSh7ZGF0YTplLnRleHRFbmNvZGluZz9lLnRleHRFbmNvZGluZy50b0xvd2VyQ2FzZSgpOiIiLGRlZmF1bHRWYWx1ZToiIix2YWxpZGF0ZTplPT5bInV0Zi04IiwiYmlnLWZpdmUiLCJmb250c3BlY2lmaWMiLCJnYmsiLCJnYi0xODAzMCIsImdiLTIzMTIiLCJrc2MtNTYwMSIsIm5vbmUiLCJzaGlmdC1qaXMiLCJ1Y3MtMiIsInV0Zi0xNiJdLmluY2x1ZGVzKGUpfHxlLm1hdGNoKC9pc28tODg1OS1cZHsyfS8pfSksdGhpcy51c2U9ZS51c2V8fCIiLHRoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiLHRoaXMueGRwQ29udGVudD1lLnhkcENvbnRlbnR8fCIiLHRoaXMuZW5jcnlwdD1udWxsLHRoaXMuZW5jcnlwdERhdGE9bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy5zaWduRGF0YT1uZXcgby5YRkFPYmplY3RBcnJheX19Y2xhc3Mga3QgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJ0ZW1wbGF0ZSIsITApLHRoaXMuYmFzZVByb2ZpbGU9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuYmFzZVByb2ZpbGUsWyJmdWxsIiwiaW50ZXJhY3RpdmVGb3JtcyJdKSx0aGlzLmV4dHJhcz1udWxsLHRoaXMuc3ViZm9ybT1uZXcgby5YRkFPYmplY3RBcnJheX1bbi4kZmluYWxpemVdKCl7MD09PXRoaXMuc3ViZm9ybS5jaGlsZHJlbi5sZW5ndGgmJigwLGwud2FybikoIlhGQSAtIE5vIHN1YmZvcm1zIGluIHRlbXBsYXRlIG5vZGUuIiksdGhpcy5zdWJmb3JtLmNoaWxkcmVuLmxlbmd0aD49MiYmKDAsbC53YXJuKSgiWEZBIC0gU2V2ZXJhbCBzdWJmb3JtcyBpbiB0ZW1wbGF0ZSBub2RlOiBwbGVhc2UgZmlsZSBhIGJ1Zy4iKSx0aGlzW24uJHRhYkluZGV4XT01ZTN9W24uJGlzU3BsaXR0YWJsZV0oKXtyZXR1cm4hMH1bbi4kc2VhcmNoTm9kZV0oZSx0KXtyZXR1cm4gZS5zdGFydHNXaXRoKCIjIik/W3RoaXNbbi4kaWRzXS5nZXQoZS5zbGljZSgxKSldOigwLGQuc2VhcmNoTm9kZSkodGhpcyx0LGUsITAsITApfSpbbi4kdG9QYWdlc10oKXt2YXIgZSx0O2lmKCF0aGlzLnN1YmZvcm0uY2hpbGRyZW4ubGVuZ3RoKXJldHVybiBjLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiZGl2IixjaGlsZHJlbjpbXX0pO3RoaXNbbi4kZXh0cmFdPXtvdmVyZmxvd05vZGU6bnVsbCxmaXJzdFVuc3BsaXR0YWJsZTpudWxsLGN1cnJlbnRDb250ZW50QXJlYTpudWxsLGN1cnJlbnRQYWdlQXJlYTpudWxsLG5vTGF5b3V0RmFpbHVyZTohMSxwYWdlTnVtYmVyOjEscGFnZVBvc2l0aW9uOiJmaXJzdCIsb2RkT3JFdmVuOiJvZGQiLGJsYW5rT3JOb3RCbGFuazoibm9uQmxhbmsiLHBhcmFTdGFjazpbXX07Y29uc3Qgcj10aGlzLnN1YmZvcm0uY2hpbGRyZW5bMF07ci5wYWdlU2V0W24uJGNsZWFuUGFnZV0oKTtjb25zdCBhPXIucGFnZVNldC5wYWdlQXJlYS5jaGlsZHJlbixpPXtuYW1lOiJkaXYiLGNoaWxkcmVuOltdfTtsZXQgcz1udWxsLG89bnVsbCxoPW51bGw7aWYoci5icmVha0JlZm9yZS5jaGlsZHJlbi5sZW5ndGg+PTE/KG89ci5icmVha0JlZm9yZS5jaGlsZHJlblswXSxoPW8udGFyZ2V0KTpyLnN1YmZvcm0uY2hpbGRyZW4ubGVuZ3RoPj0xJiZyLnN1YmZvcm0uY2hpbGRyZW5bMF0uYnJlYWtCZWZvcmUuY2hpbGRyZW4ubGVuZ3RoPj0xPyhvPXIuc3ViZm9ybS5jaGlsZHJlblswXS5icmVha0JlZm9yZS5jaGlsZHJlblswXSxoPW8udGFyZ2V0KTpudWxsIT09KGU9ci5icmVhaykmJnZvaWQgMCE9PWUmJmUuYmVmb3JlVGFyZ2V0PyhvPXIuYnJlYWssaD1vLmJlZm9yZVRhcmdldCk6ci5zdWJmb3JtLmNoaWxkcmVuLmxlbmd0aD49MSYmbnVsbCE9PSh0PXIuc3ViZm9ybS5jaGlsZHJlblswXS5icmVhaykmJnZvaWQgMCE9PXQmJnQuYmVmb3JlVGFyZ2V0JiYobz1yLnN1YmZvcm0uY2hpbGRyZW5bMF0uYnJlYWssaD1vLmJlZm9yZVRhcmdldCksbyl7Y29uc3QgZT10aGlzW24uJHNlYXJjaE5vZGVdKGgsb1tuLiRnZXRQYXJlbnRdKCkpO2UgaW5zdGFuY2VvZiBRZSYmKHM9ZSxvW24uJGV4dHJhXT17fSl9c3x8KHM9YVswXSksc1tuLiRleHRyYV09e251bWJlck9mVXNlOjF9O2NvbnN0IHU9c1tuLiRnZXRQYXJlbnRdKCk7dVtuLiRleHRyYV09e251bWJlck9mVXNlOjEscGFnZUluZGV4OnUucGFnZUFyZWEuY2hpbGRyZW4uaW5kZXhPZihzKSxwYWdlU2V0SW5kZXg6MH07bGV0IGQsZj1udWxsLGc9bnVsbCxwPSEwLG09MCxiPTA7Zm9yKDs7KXtpZihwKW09MDtlbHNlIGlmKGkuY2hpbGRyZW4ucG9wKCksMz09KyttKXJldHVybigwLGwud2FybikoIlhGQSAtIFNvbWV0aGluZyBnb2VzIHdyb25nOiBwbGVhc2UgZmlsZSBhIGJ1Zy4iKSxpO2Q9bnVsbCx0aGlzW24uJGV4dHJhXS5jdXJyZW50UGFnZUFyZWE9cztjb25zdCBlPXNbbi4kdG9IVE1MXSgpLmh0bWw7aS5jaGlsZHJlbi5wdXNoKGUpLGYmJih0aGlzW24uJGV4dHJhXS5ub0xheW91dEZhaWx1cmU9ITAsZS5jaGlsZHJlbi5wdXNoKGZbbi4kdG9IVE1MXShzW24uJGV4dHJhXS5zcGFjZSkuaHRtbCksZj1udWxsKSxnJiYodGhpc1tuLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlPSEwLGUuY2hpbGRyZW4ucHVzaChnW24uJHRvSFRNTF0oc1tuLiRleHRyYV0uc3BhY2UpLmh0bWwpLGc9bnVsbCk7Y29uc3QgdD1zLmNvbnRlbnRBcmVhLmNoaWxkcmVuLGE9ZS5jaGlsZHJlbi5maWx0ZXIoKGU9PmUuYXR0cmlidXRlcy5jbGFzcy5pbmNsdWRlcygieGZhQ29udGVudGFyZWEiKSkpO3A9ITEsdGhpc1tuLiRleHRyYV0uZmlyc3RVbnNwbGl0dGFibGU9bnVsbCx0aGlzW24uJGV4dHJhXS5ub0xheW91dEZhaWx1cmU9ITE7Y29uc3Qgbz1lPT57Y29uc3QgdD1yW24uJGZsdXNoSFRNTF0oKTt2YXIgaTt0JiYocHx8KHA9KG51bGw9PT0oaT10LmNoaWxkcmVuKXx8dm9pZCAwPT09aT92b2lkIDA6aS5sZW5ndGgpPjApLGFbZV0uY2hpbGRyZW4ucHVzaCh0KSl9O2ZvcihsZXQgZT1iLHM9dC5sZW5ndGg7ZTxzO2UrKyl7Y29uc3Qgcz10aGlzW24uJGV4dHJhXS5jdXJyZW50Q29udGVudEFyZWE9dFtlXSxjPXt3aWR0aDpzLncsaGVpZ2h0OnMuaH07Yj0wLGYmJihhW2VdLmNoaWxkcmVuLnB1c2goZltuLiR0b0hUTUxdKGMpLmh0bWwpLGY9bnVsbCksZyYmKGFbZV0uY2hpbGRyZW4ucHVzaChnW24uJHRvSFRNTF0oYykuaHRtbCksZz1udWxsKTtjb25zdCBsPXJbbi4kdG9IVE1MXShjKTt2YXIgeTtpZihsLnN1Y2Nlc3MpcmV0dXJuIGwuaHRtbD8ocHx8KHA9KG51bGw9PT0oeT1sLmh0bWwuY2hpbGRyZW4pfHx2b2lkIDA9PT15P3ZvaWQgMDp5Lmxlbmd0aCk+MCksYVtlXS5jaGlsZHJlbi5wdXNoKGwuaHRtbCkpOiFwJiZpLmNoaWxkcmVuLmxlbmd0aD4xJiZpLmNoaWxkcmVuLnBvcCgpLGk7aWYobC5pc0JyZWFrKCkpe2NvbnN0IHQ9bC5icmVha05vZGU7aWYobyhlKSwiYXV0byI9PT10LnRhcmdldFR5cGUpY29udGludWU7dC5sZWFkZXImJihmPXRoaXNbbi4kc2VhcmNoTm9kZV0odC5sZWFkZXIsdFtuLiRnZXRQYXJlbnRdKCkpLGY9Zj9mWzBdOm51bGwpLHQudHJhaWxlciYmKGc9dGhpc1tuLiRzZWFyY2hOb2RlXSh0LnRyYWlsZXIsdFtuLiRnZXRQYXJlbnRdKCkpLGc9Zz9nWzBdOm51bGwpLCJwYWdlQXJlYSI9PT10LnRhcmdldFR5cGU/KGQ9dFtuLiRleHRyYV0udGFyZ2V0LGU9MS8wKTp0W24uJGV4dHJhXS50YXJnZXQ/KGQ9dFtuLiRleHRyYV0udGFyZ2V0LGI9dFtuLiRleHRyYV0uaW5kZXgrMSxlPTEvMCk6ZT10W24uJGV4dHJhXS5pbmRleH1lbHNlIGlmKHRoaXNbbi4kZXh0cmFdLm92ZXJmbG93Tm9kZSl7Y29uc3Qgcj10aGlzW24uJGV4dHJhXS5vdmVyZmxvd05vZGU7dGhpc1tuLiRleHRyYV0ub3ZlcmZsb3dOb2RlPW51bGw7Y29uc3QgYT1yW24uJGdldEV4dHJhXSgpLGk9YS50YXJnZXQ7YS5hZGRMZWFkZXI9bnVsbCE9PWEubGVhZGVyLGEuYWRkVHJhaWxlcj1udWxsIT09YS50cmFpbGVyLG8oZSk7Y29uc3Qgcz1lO2lmKGU9MS8wLGkgaW5zdGFuY2VvZiBRZSlkPWk7ZWxzZSBpZihpIGluc3RhbmNlb2YgZWUpe2NvbnN0IHI9dC5pbmRleE9mKGkpOy0xIT09cj9yPnM/ZT1yLTE6Yj1yOihkPWlbbi4kZ2V0UGFyZW50XSgpLGI9ZC5jb250ZW50QXJlYS5jaGlsZHJlbi5pbmRleE9mKGkpKX19ZWxzZSBvKGUpfXRoaXNbbi4kZXh0cmFdLnBhZ2VOdW1iZXIrPTEsZCYmKGRbbi4kaXNVc2FibGVdKCk/ZFtuLiRleHRyYV0ubnVtYmVyT2ZVc2UrPTE6ZD1udWxsKSxzPWR8fHNbbi4kZ2V0TmV4dFBhZ2VdKCkseWllbGQgbnVsbH19fXQuVGVtcGxhdGU9a3Q7Y2xhc3MgQ3QgZXh0ZW5kcyBvLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwidGV4dCIpLHRoaXMuaWQ9ZS5pZHx8IiIsdGhpcy5tYXhDaGFycz0oMCxjLmdldEludGVnZXIpKHtkYXRhOmUubWF4Q2hhcnMsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+ZT49MH0pLHRoaXMubmFtZT1lLm5hbWV8fCIiLHRoaXMucmlkPWUucmlkfHwiIix0aGlzLnVzZT1lLnVzZXx8IiIsdGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9W24uJGFjY2VwdFdoaXRlc3BhY2VdKCl7cmV0dXJuITB9W24uJG9uQ2hpbGRdKGUpe3JldHVybiBlW24uJG5hbWVzcGFjZUlkXT09PWEuTmFtZXNwYWNlSWRzLnhodG1sLmlkPyh0aGlzW24uJGNvbnRlbnRdPWUsITApOigoMCxsLndhcm4pKCJYRkEgLSBJbnZhbGlkIGNvbnRlbnQgaW4gVGV4dDogIi5jb25jYXQoZVtuLiRub2RlTmFtZV0sIi4iKSksITEpfVtuLiRvblRleHRdKGUpe3RoaXNbbi4kY29udGVudF1pbnN0YW5jZW9mIG8uWEZBT2JqZWN0fHxzdXBlcltuLiRvblRleHRdKGUpfVtuLiRmaW5hbGl6ZV0oKXsic3RyaW5nIj09dHlwZW9mIHRoaXNbbi4kY29udGVudF0mJih0aGlzW24uJGNvbnRlbnRdPXRoaXNbbi4kY29udGVudF0ucmVwbGFjZUFsbCgiXHJcbiIsIlxuIikpfVtuLiRnZXRFeHRyYV0oKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHRoaXNbbi4kY29udGVudF0/dGhpc1tuLiRjb250ZW50XS5zcGxpdCgvW1x1MjAyOVx1MjAyOFxuXS8pLnJlZHVjZSgoKGUsdCk9Pih0JiZlLnB1c2godCksZSkpLFtdKS5qb2luKCJcbiIpOnRoaXNbbi4kY29udGVudF1bbi4kdGV4dF0oKX1bbi4kdG9IVE1MXShlKXtpZigic3RyaW5nIj09dHlwZW9mIHRoaXNbbi4kY29udGVudF0pe2NvbnN0IGU9Tyh0aGlzW24uJGNvbnRlbnRdKS5odG1sO3JldHVybiB0aGlzW24uJGNvbnRlbnRdLmluY2x1ZGVzKCJcdTIwMjkiKT8oZS5uYW1lPSJkaXYiLGUuY2hpbGRyZW49W10sdGhpc1tuLiRjb250ZW50XS5zcGxpdCgiXHUyMDI5IikubWFwKChlPT5lLnNwbGl0KC9bXHUyMDI4XG5dLykucmVkdWNlKCgoZSx0KT0+KGUucHVzaCh7bmFtZToic3BhbiIsdmFsdWU6dH0se25hbWU6ImJyIn0pLGUpKSxbXSkpKS5mb3JFYWNoKCh0PT57ZS5jaGlsZHJlbi5wdXNoKHtuYW1lOiJwIixjaGlsZHJlbjp0fSl9KSkpOi9bXHUyMDI4XG5dLy50ZXN0KHRoaXNbbi4kY29udGVudF0pJiYoZS5uYW1lPSJkaXYiLGUuY2hpbGRyZW49W10sdGhpc1tuLiRjb250ZW50XS5zcGxpdCgvW1x1MjAyOFxuXS8pLmZvckVhY2goKHQ9PntlLmNoaWxkcmVuLnB1c2goe25hbWU6InNwYW4iLHZhbHVlOnR9LHtuYW1lOiJiciJ9KX0pKSksYy5IVE1MUmVzdWx0LnN1Y2Nlc3MoZSl9cmV0dXJuIHRoaXNbbi4kY29udGVudF1bbi4kdG9IVE1MXShlKX19dC5UZXh0PUN0O2NsYXNzIE90IGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwidGV4dEVkaXQiLCEwKSx0aGlzLmFsbG93UmljaFRleHQ9KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmFsbG93UmljaFRleHQsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KSx0aGlzLmhTY3JvbGxQb2xpY3k9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuaFNjcm9sbFBvbGljeSxbImF1dG8iLCJvZmYiLCJvbiJdKSx0aGlzLmlkPWUuaWR8fCIiLHRoaXMubXVsdGlMaW5lPSgwLGMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5tdWx0aUxpbmUsZGVmYXVsdFZhbHVlOiIiLHZhbGlkYXRlOmU9PjA9PT1lfHwxPT09ZX0pLHRoaXMudXNlPWUudXNlfHwiIix0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIix0aGlzLnZTY3JvbGxQb2xpY3k9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUudlNjcm9sbFBvbGljeSxbImF1dG8iLCJvZmYiLCJvbiJdKSx0aGlzLmJvcmRlcj1udWxsLHRoaXMuY29tYj1udWxsLHRoaXMuZXh0cmFzPW51bGwsdGhpcy5tYXJnaW49bnVsbH1bbi4kdG9IVE1MXShlKXt2YXIgdCxyO2NvbnN0IGE9KDAscy50b1N0eWxlKSh0aGlzLCJib3JkZXIiLCJmb250IiwibWFyZ2luIik7bGV0IGk7Y29uc3Qgbz10aGlzW24uJGdldFBhcmVudF0oKVtuLiRnZXRQYXJlbnRdKCk7cmV0dXJuIiI9PT10aGlzLm11bHRpTGluZSYmKHRoaXMubXVsdGlMaW5lPW8gaW5zdGFuY2VvZiBoZT8xOjApLGk9MT09PXRoaXMubXVsdGlMaW5lP3tuYW1lOiJ0ZXh0YXJlYSIsYXR0cmlidXRlczp7ZGF0YUlkOihudWxsPT09KHQ9b1tuLiRkYXRhXSl8fHZvaWQgMD09PXQ/dm9pZCAwOnRbbi4kdWlkXSl8fG9bbi4kdWlkXSxmaWVsZElkOm9bbi4kdWlkXSxjbGFzczpbInhmYVRleHRmaWVsZCJdLHN0eWxlOmEsImFyaWEtbGFiZWwiOkMobyksImFyaWEtcmVxdWlyZWQiOiExfX06e25hbWU6ImlucHV0IixhdHRyaWJ1dGVzOnt0eXBlOiJ0ZXh0IixkYXRhSWQ6KG51bGw9PT0ocj1vW24uJGRhdGFdKXx8dm9pZCAwPT09cj92b2lkIDA6cltuLiR1aWRdKXx8b1tuLiR1aWRdLGZpZWxkSWQ6b1tuLiR1aWRdLGNsYXNzOlsieGZhVGV4dGZpZWxkIl0sc3R5bGU6YSwiYXJpYS1sYWJlbCI6QyhvKSwiYXJpYS1yZXF1aXJlZCI6ITF9fSxTKG8pJiYoaS5hdHRyaWJ1dGVzWyJhcmlhLXJlcXVpcmVkIl09ITAsaS5hdHRyaWJ1dGVzLnJlcXVpcmVkPSEwKSxjLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToibGFiZWwiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhTGFiZWwiXX0sY2hpbGRyZW46W2ldfSl9fWNsYXNzIEZ0IGV4dGVuZHMgby5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwidGltZSIpLHRoaXMuaWQ9ZS5pZHx8IiIsdGhpcy5uYW1lPWUubmFtZXx8IiIsdGhpcy51c2U9ZS51c2V8fCIiLHRoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifVtuLiRmaW5hbGl6ZV0oKXtjb25zdCBlPXRoaXNbbi4kY29udGVudF0udHJpbSgpO3RoaXNbbi4kY29udGVudF09ZT9uZXcgRGF0ZShlKTpudWxsfVtuLiR0b0hUTUxdKGUpe3JldHVybiBPKHRoaXNbbi4kY29udGVudF0/dGhpc1tuLiRjb250ZW50XS50b1N0cmluZygpOiIiKX19Y2xhc3MgSXQgZXh0ZW5kcyBvLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihmLCJ0aW1lU3RhbXAiKSx0aGlzLmlkPWUuaWR8fCIiLHRoaXMuc2VydmVyPWUuc2VydmVyfHwiIix0aGlzLnR5cGU9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSksdGhpcy51c2U9ZS51c2V8fCIiLHRoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBUdCBleHRlbmRzIG8uU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsInRvb2xUaXAiKSx0aGlzLmlkPWUuaWR8fCIiLHRoaXMucmlkPWUucmlkfHwiIix0aGlzLnVzZT1lLnVzZXx8IiIsdGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIE10IGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwidHJhdmVyc2FsIiwhMCksdGhpcy5pZD1lLmlkfHwiIix0aGlzLnVzZT1lLnVzZXx8IiIsdGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiIsdGhpcy5leHRyYXM9bnVsbCx0aGlzLnRyYXZlcnNlPW5ldyBvLlhGQU9iamVjdEFycmF5fX1jbGFzcyBFdCBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsInRyYXZlcnNlIiwhMCksdGhpcy5pZD1lLmlkfHwiIix0aGlzLm9wZXJhdGlvbj0oMCxjLmdldFN0cmluZ09wdGlvbikoZS5vcGVyYXRpb24sWyJuZXh0IiwiYmFjayIsImRvd24iLCJmaXJzdCIsImxlZnQiLCJyaWdodCIsInVwIl0pLHRoaXMucmVmPWUucmVmfHwiIix0aGlzLnVzZT1lLnVzZXx8IiIsdGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiIsdGhpcy5leHRyYXM9bnVsbCx0aGlzLnNjcmlwdD1udWxsfWdldCBuYW1lKCl7cmV0dXJuIHRoaXMub3BlcmF0aW9ufVtuLiRpc1RyYW5zcGFyZW50XSgpe3JldHVybiExfX1jbGFzcyBQdCBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsInVpIiwhMCksdGhpcy5pZD1lLmlkfHwiIix0aGlzLnVzZT1lLnVzZXx8IiIsdGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiIsdGhpcy5leHRyYXM9bnVsbCx0aGlzLnBpY3R1cmU9bnVsbCx0aGlzLmJhcmNvZGU9bnVsbCx0aGlzLmJ1dHRvbj1udWxsLHRoaXMuY2hlY2tCdXR0b249bnVsbCx0aGlzLmNob2ljZUxpc3Q9bnVsbCx0aGlzLmRhdGVUaW1lRWRpdD1udWxsLHRoaXMuZGVmYXVsdFVpPW51bGwsdGhpcy5pbWFnZUVkaXQ9bnVsbCx0aGlzLm51bWVyaWNFZGl0PW51bGwsdGhpcy5wYXNzd29yZEVkaXQ9bnVsbCx0aGlzLnNpZ25hdHVyZT1udWxsLHRoaXMudGV4dEVkaXQ9bnVsbH1bbi4kZ2V0RXh0cmFdKCl7aWYodm9pZCAwPT09dGhpc1tuLiRleHRyYV0pe2Zvcihjb25zdCBlIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKXtpZigiZXh0cmFzIj09PWV8fCJwaWN0dXJlIj09PWUpY29udGludWU7Y29uc3QgdD10aGlzW2VdO2lmKHQgaW5zdGFuY2VvZiBvLlhGQU9iamVjdClyZXR1cm4gdGhpc1tuLiRleHRyYV09dCx0fXRoaXNbbi4kZXh0cmFdPW51bGx9cmV0dXJuIHRoaXNbbi4kZXh0cmFdfVtuLiR0b0hUTUxdKGUpe2NvbnN0IHQ9dGhpc1tuLiRnZXRFeHRyYV0oKTtyZXR1cm4gdD90W24uJHRvSFRNTF0oZSk6Yy5IVE1MUmVzdWx0LkVNUFRZfX1jbGFzcyBSdCBleHRlbmRzIG8uWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGYsInZhbGlkYXRlIiwhMCksdGhpcy5mb3JtYXRUZXN0PSgwLGMuZ2V0U3RyaW5nT3B0aW9uKShlLmZvcm1hdFRlc3QsWyJ3YXJuaW5nIiwiZGlzYWJsZWQiLCJlcnJvciJdKSx0aGlzLmlkPWUuaWR8fCIiLHRoaXMubnVsbFRlc3Q9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUubnVsbFRlc3QsWyJkaXNhYmxlZCIsImVycm9yIiwid2FybmluZyJdKSx0aGlzLnNjcmlwdFRlc3Q9KDAsYy5nZXRTdHJpbmdPcHRpb24pKGUuc2NyaXB0VGVzdCxbImVycm9yIiwiZGlzYWJsZWQiLCJ3YXJuaW5nIl0pLHRoaXMudXNlPWUudXNlfHwiIix0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIix0aGlzLmV4dHJhcz1udWxsLHRoaXMubWVzc2FnZT1udWxsLHRoaXMucGljdHVyZT1udWxsLHRoaXMuc2NyaXB0PW51bGx9fWNsYXNzIE50IGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwidmFsdWUiLCEwKSx0aGlzLmlkPWUuaWR8fCIiLHRoaXMub3ZlcnJpZGU9KDAsYy5nZXRJbnRlZ2VyKSh7ZGF0YTplLm92ZXJyaWRlLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSksdGhpcy5yZWxldmFudD0oMCxjLmdldFJlbGV2YW50KShlLnJlbGV2YW50KSx0aGlzLnVzZT1lLnVzZXx8IiIsdGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiIsdGhpcy5hcmM9bnVsbCx0aGlzLmJvb2xlYW49bnVsbCx0aGlzLmRhdGU9bnVsbCx0aGlzLmRhdGVUaW1lPW51bGwsdGhpcy5kZWNpbWFsPW51bGwsdGhpcy5leERhdGE9bnVsbCx0aGlzLmZsb2F0PW51bGwsdGhpcy5pbWFnZT1udWxsLHRoaXMuaW50ZWdlcj1udWxsLHRoaXMubGluZT1udWxsLHRoaXMucmVjdGFuZ2xlPW51bGwsdGhpcy50ZXh0PW51bGwsdGhpcy50aW1lPW51bGx9W24uJHNldFZhbHVlXShlKXt2YXIgdDtjb25zdCByPXRoaXNbbi4kZ2V0UGFyZW50XSgpO2lmKHIgaW5zdGFuY2VvZiBDZSYmbnVsbCE9PSh0PXIudWkpJiZ2b2lkIDAhPT10JiZ0LmltYWdlRWRpdClyZXR1cm4gdGhpcy5pbWFnZXx8KHRoaXMuaW1hZ2U9bmV3IFJlKHt9KSx0aGlzW24uJGFwcGVuZENoaWxkXSh0aGlzLmltYWdlKSksdm9pZCh0aGlzLmltYWdlW24uJGNvbnRlbnRdPWVbbi4kY29udGVudF0pO2NvbnN0IGE9ZVtuLiRub2RlTmFtZV07aWYobnVsbD09PXRoaXNbYV0pe2Zvcihjb25zdCBlIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKXtjb25zdCB0PXRoaXNbZV07dCBpbnN0YW5jZW9mIG8uWEZBT2JqZWN0JiYodGhpc1tlXT1udWxsLHRoaXNbbi4kcmVtb3ZlQ2hpbGRdKHQpKX10aGlzW2Vbbi4kbm9kZU5hbWVdXT1lLHRoaXNbbi4kYXBwZW5kQ2hpbGRdKGUpfWVsc2UgdGhpc1thXVtuLiRjb250ZW50XT1lW24uJGNvbnRlbnRdfVtuLiR0ZXh0XSgpe2lmKHRoaXMuZXhEYXRhKXJldHVybiJzdHJpbmciPT10eXBlb2YgdGhpcy5leERhdGFbbi4kY29udGVudF0/dGhpcy5leERhdGFbbi4kY29udGVudF0udHJpbSgpOnRoaXMuZXhEYXRhW24uJGNvbnRlbnRdW24uJHRleHRdKCkudHJpbSgpO2Zvcihjb25zdCBlIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKXtpZigiaW1hZ2UiPT09ZSljb250aW51ZTtjb25zdCB0PXRoaXNbZV07aWYodCBpbnN0YW5jZW9mIG8uWEZBT2JqZWN0KXJldHVybih0W24uJGNvbnRlbnRdfHwiIikudG9TdHJpbmcoKS50cmltKCl9cmV0dXJuIG51bGx9W24uJHRvSFRNTF0oZSl7Zm9yKGNvbnN0IHQgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpe2NvbnN0IHI9dGhpc1t0XTtpZihyIGluc3RhbmNlb2Ygby5YRkFPYmplY3QpcmV0dXJuIHJbbi4kdG9IVE1MXShlKX1yZXR1cm4gYy5IVE1MUmVzdWx0LkVNUFRZfX10LlZhbHVlPU50O2NsYXNzIER0IGV4dGVuZHMgby5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZiwidmFyaWFibGVzIiwhMCksdGhpcy5pZD1lLmlkfHwiIix0aGlzLnVzZT1lLnVzZXx8IiIsdGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiIsdGhpcy5ib29sZWFuPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuZGF0ZT1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmRhdGVUaW1lPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuZGVjaW1hbD1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmV4RGF0YT1uZXcgby5YRkFPYmplY3RBcnJheSx0aGlzLmZsb2F0PW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMuaW1hZ2U9bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy5pbnRlZ2VyPW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMubWFuaWZlc3Q9bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy5zY3JpcHQ9bmV3IG8uWEZBT2JqZWN0QXJyYXksdGhpcy50ZXh0PW5ldyBvLlhGQU9iamVjdEFycmF5LHRoaXMudGltZT1uZXcgby5YRkFPYmplY3RBcnJheX1bbi4kaXNUcmFuc3BhcmVudF0oKXtyZXR1cm4hMH19Y2xhc3MgQnR7c3RhdGljW2EuJGJ1aWxkWEZBT2JqZWN0XShlLHQpe2lmKEJ0Lmhhc093blByb3BlcnR5KGUpKXtjb25zdCByPUJ0W2VdKHQpO3JldHVybiByW24uJHNldFNldEF0dHJpYnV0ZXNdKHQpLHJ9fXN0YXRpYyBhcHBlYXJhbmNlRmlsdGVyKGUpe3JldHVybiBuZXcgRShlKX1zdGF0aWMgYXJjKGUpe3JldHVybiBuZXcgUChlKX1zdGF0aWMgYXJlYShlKXtyZXR1cm4gbmV3IFIoZSl9c3RhdGljIGFzc2lzdChlKXtyZXR1cm4gbmV3IE4oZSl9c3RhdGljIGJhcmNvZGUoZSl7cmV0dXJuIG5ldyBEKGUpfXN0YXRpYyBiaW5kKGUpe3JldHVybiBuZXcgQihlKX1zdGF0aWMgYmluZEl0ZW1zKGUpe3JldHVybiBuZXcgTChlKX1zdGF0aWMgYm9va2VuZChlKXtyZXR1cm4gbmV3IF8oZSl9c3RhdGljIGJvb2xlYW4oZSl7cmV0dXJuIG5ldyBqKGUpfXN0YXRpYyBib3JkZXIoZSl7cmV0dXJuIG5ldyBVKGUpfXN0YXRpYyBicmVhayhlKXtyZXR1cm4gbmV3ICQoZSl9c3RhdGljIGJyZWFrQWZ0ZXIoZSl7cmV0dXJuIG5ldyBYKGUpfXN0YXRpYyBicmVha0JlZm9yZShlKXtyZXR1cm4gbmV3IEgoZSl9c3RhdGljIGJ1dHRvbihlKXtyZXR1cm4gbmV3IHEoZSl9c3RhdGljIGNhbGN1bGF0ZShlKXtyZXR1cm4gbmV3IHooZSl9c3RhdGljIGNhcHRpb24oZSl7cmV0dXJuIG5ldyBHKGUpfXN0YXRpYyBjZXJ0aWZpY2F0ZShlKXtyZXR1cm4gbmV3IFcoZSl9c3RhdGljIGNlcnRpZmljYXRlcyhlKXtyZXR1cm4gbmV3IFYoZSl9c3RhdGljIGNoZWNrQnV0dG9uKGUpe3JldHVybiBuZXcgSyhlKX1zdGF0aWMgY2hvaWNlTGlzdChlKXtyZXR1cm4gbmV3IFkoZSl9c3RhdGljIGNvbG9yKGUpe3JldHVybiBuZXcgSihlKX1zdGF0aWMgY29tYihlKXtyZXR1cm4gbmV3IFooZSl9c3RhdGljIGNvbm5lY3QoZSl7cmV0dXJuIG5ldyBRKGUpfXN0YXRpYyBjb250ZW50QXJlYShlKXtyZXR1cm4gbmV3IGVlKGUpfXN0YXRpYyBjb3JuZXIoZSl7cmV0dXJuIG5ldyB0ZShlKX1zdGF0aWMgZGF0ZShlKXtyZXR1cm4gbmV3IHJlKGUpfXN0YXRpYyBkYXRlVGltZShlKXtyZXR1cm4gbmV3IG5lKGUpfXN0YXRpYyBkYXRlVGltZUVkaXQoZSl7cmV0dXJuIG5ldyBhZShlKX1zdGF0aWMgZGVjaW1hbChlKXtyZXR1cm4gbmV3IGllKGUpfXN0YXRpYyBkZWZhdWx0VWkoZSl7cmV0dXJuIG5ldyBzZShlKX1zdGF0aWMgZGVzYyhlKXtyZXR1cm4gbmV3IG9lKGUpfXN0YXRpYyBkaWdlc3RNZXRob2QoZSl7cmV0dXJuIG5ldyBjZShlKX1zdGF0aWMgZGlnZXN0TWV0aG9kcyhlKXtyZXR1cm4gbmV3IGxlKGUpfXN0YXRpYyBkcmF3KGUpe3JldHVybiBuZXcgaGUoZSl9c3RhdGljIGVkZ2UoZSl7cmV0dXJuIG5ldyB1ZShlKX1zdGF0aWMgZW5jb2RpbmcoZSl7cmV0dXJuIG5ldyBkZShlKX1zdGF0aWMgZW5jb2RpbmdzKGUpe3JldHVybiBuZXcgZmUoZSl9c3RhdGljIGVuY3J5cHQoZSl7cmV0dXJuIG5ldyBnZShlKX1zdGF0aWMgZW5jcnlwdERhdGEoZSl7cmV0dXJuIG5ldyBwZShlKX1zdGF0aWMgZW5jcnlwdGlvbihlKXtyZXR1cm4gbmV3IG1lKGUpfXN0YXRpYyBlbmNyeXB0aW9uTWV0aG9kKGUpe3JldHVybiBuZXcgYmUoZSl9c3RhdGljIGVuY3J5cHRpb25NZXRob2RzKGUpe3JldHVybiBuZXcgeWUoZSl9c3RhdGljIGV2ZW50KGUpe3JldHVybiBuZXcgd2UoZSl9c3RhdGljIGV4RGF0YShlKXtyZXR1cm4gbmV3IHZlKGUpfXN0YXRpYyBleE9iamVjdChlKXtyZXR1cm4gbmV3IHhlKGUpfXN0YXRpYyBleGNsR3JvdXAoZSl7cmV0dXJuIG5ldyBTZShlKX1zdGF0aWMgZXhlY3V0ZShlKXtyZXR1cm4gbmV3IEFlKGUpfXN0YXRpYyBleHRyYXMoZSl7cmV0dXJuIG5ldyBrZShlKX1zdGF0aWMgZmllbGQoZSl7cmV0dXJuIG5ldyBDZShlKX1zdGF0aWMgZmlsbChlKXtyZXR1cm4gbmV3IE9lKGUpfXN0YXRpYyBmaWx0ZXIoZSl7cmV0dXJuIG5ldyBGZShlKX1zdGF0aWMgZmxvYXQoZSl7cmV0dXJuIG5ldyBJZShlKX1zdGF0aWMgZm9udChlKXtyZXR1cm4gbmV3IFRlKGUpfXN0YXRpYyBmb3JtYXQoZSl7cmV0dXJuIG5ldyBNZShlKX1zdGF0aWMgaGFuZGxlcihlKXtyZXR1cm4gbmV3IEVlKGUpfXN0YXRpYyBoeXBoZW5hdGlvbihlKXtyZXR1cm4gbmV3IFBlKGUpfXN0YXRpYyBpbWFnZShlKXtyZXR1cm4gbmV3IFJlKGUpfXN0YXRpYyBpbWFnZUVkaXQoZSl7cmV0dXJuIG5ldyBOZShlKX1zdGF0aWMgaW50ZWdlcihlKXtyZXR1cm4gbmV3IERlKGUpfXN0YXRpYyBpc3N1ZXJzKGUpe3JldHVybiBuZXcgQmUoZSl9c3RhdGljIGl0ZW1zKGUpe3JldHVybiBuZXcgTGUoZSl9c3RhdGljIGtlZXAoZSl7cmV0dXJuIG5ldyBfZShlKX1zdGF0aWMga2V5VXNhZ2UoZSl7cmV0dXJuIG5ldyBqZShlKX1zdGF0aWMgbGluZShlKXtyZXR1cm4gbmV3IFVlKGUpfXN0YXRpYyBsaW5lYXIoZSl7cmV0dXJuIG5ldyAkZShlKX1zdGF0aWMgbG9ja0RvY3VtZW50KGUpe3JldHVybiBuZXcgWGUoZSl9c3RhdGljIG1hbmlmZXN0KGUpe3JldHVybiBuZXcgSGUoZSl9c3RhdGljIG1hcmdpbihlKXtyZXR1cm4gbmV3IHFlKGUpfXN0YXRpYyBtZHAoZSl7cmV0dXJuIG5ldyB6ZShlKX1zdGF0aWMgbWVkaXVtKGUpe3JldHVybiBuZXcgR2UoZSl9c3RhdGljIG1lc3NhZ2UoZSl7cmV0dXJuIG5ldyBXZShlKX1zdGF0aWMgbnVtZXJpY0VkaXQoZSl7cmV0dXJuIG5ldyBWZShlKX1zdGF0aWMgb2NjdXIoZSl7cmV0dXJuIG5ldyBLZShlKX1zdGF0aWMgb2lkKGUpe3JldHVybiBuZXcgWWUoZSl9c3RhdGljIG9pZHMoZSl7cmV0dXJuIG5ldyBKZShlKX1zdGF0aWMgb3ZlcmZsb3coZSl7cmV0dXJuIG5ldyBaZShlKX1zdGF0aWMgcGFnZUFyZWEoZSl7cmV0dXJuIG5ldyBRZShlKX1zdGF0aWMgcGFnZVNldChlKXtyZXR1cm4gbmV3IGV0KGUpfXN0YXRpYyBwYXJhKGUpe3JldHVybiBuZXcgdHQoZSl9c3RhdGljIHBhc3N3b3JkRWRpdChlKXtyZXR1cm4gbmV3IHJ0KGUpfXN0YXRpYyBwYXR0ZXJuKGUpe3JldHVybiBuZXcgbnQoZSl9c3RhdGljIHBpY3R1cmUoZSl7cmV0dXJuIG5ldyBhdChlKX1zdGF0aWMgcHJvdG8oZSl7cmV0dXJuIG5ldyBpdChlKX1zdGF0aWMgcmFkaWFsKGUpe3JldHVybiBuZXcgc3QoZSl9c3RhdGljIHJlYXNvbihlKXtyZXR1cm4gbmV3IG90KGUpfXN0YXRpYyByZWFzb25zKGUpe3JldHVybiBuZXcgY3QoZSl9c3RhdGljIHJlY3RhbmdsZShlKXtyZXR1cm4gbmV3IGx0KGUpfXN0YXRpYyByZWYoZSl7cmV0dXJuIG5ldyBodChlKX1zdGF0aWMgc2NyaXB0KGUpe3JldHVybiBuZXcgdXQoZSl9c3RhdGljIHNldFByb3BlcnR5KGUpe3JldHVybiBuZXcgZHQoZSl9c3RhdGljIHNpZ25EYXRhKGUpe3JldHVybiBuZXcgZnQoZSl9c3RhdGljIHNpZ25hdHVyZShlKXtyZXR1cm4gbmV3IGd0KGUpfXN0YXRpYyBzaWduaW5nKGUpe3JldHVybiBuZXcgcHQoZSl9c3RhdGljIHNvbGlkKGUpe3JldHVybiBuZXcgbXQoZSl9c3RhdGljIHNwZWFrKGUpe3JldHVybiBuZXcgYnQoZSl9c3RhdGljIHN0aXBwbGUoZSl7cmV0dXJuIG5ldyB5dChlKX1zdGF0aWMgc3ViZm9ybShlKXtyZXR1cm4gbmV3IHd0KGUpfXN0YXRpYyBzdWJmb3JtU2V0KGUpe3JldHVybiBuZXcgdnQoZSl9c3RhdGljIHN1YmplY3RETihlKXtyZXR1cm4gbmV3IHh0KGUpfXN0YXRpYyBzdWJqZWN0RE5zKGUpe3JldHVybiBuZXcgU3QoZSl9c3RhdGljIHN1Ym1pdChlKXtyZXR1cm4gbmV3IEF0KGUpfXN0YXRpYyB0ZW1wbGF0ZShlKXtyZXR1cm4gbmV3IGt0KGUpfXN0YXRpYyB0ZXh0KGUpe3JldHVybiBuZXcgQ3QoZSl9c3RhdGljIHRleHRFZGl0KGUpe3JldHVybiBuZXcgT3QoZSl9c3RhdGljIHRpbWUoZSl7cmV0dXJuIG5ldyBGdChlKX1zdGF0aWMgdGltZVN0YW1wKGUpe3JldHVybiBuZXcgSXQoZSl9c3RhdGljIHRvb2xUaXAoZSl7cmV0dXJuIG5ldyBUdChlKX1zdGF0aWMgdHJhdmVyc2FsKGUpe3JldHVybiBuZXcgTXQoZSl9c3RhdGljIHRyYXZlcnNlKGUpe3JldHVybiBuZXcgRXQoZSl9c3RhdGljIHVpKGUpe3JldHVybiBuZXcgUHQoZSl9c3RhdGljIHZhbGlkYXRlKGUpe3JldHVybiBuZXcgUnQoZSl9c3RhdGljIHZhbHVlKGUpe3JldHVybiBuZXcgTnQoZSl9c3RhdGljIHZhcmlhYmxlcyhlKXtyZXR1cm4gbmV3IER0KGUpfX10LlRlbXBsYXRlTmFtZXNwYWNlPUJ0fSwoZSx0LHIpPT57dmFyIG49cigzKSxhPXIoNCksaT1yKDI0KSxzPXIoMTEpLG89cig0NSkuZixjPXIoMzkpLGw9cigyMzIpLGg9cig3NSksdT1yKDc2KSxkPXIoMjMzKSxmPXIoODIpLGc9cig2KSxwPXIoMzYpLG09IkRPTUV4Y2VwdGlvbiIsYj1pKCJFcnJvciIpLHk9aShtKSx3PWZ1bmN0aW9uKCl7bCh0aGlzLHYpO3ZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD11KGU8MT92b2lkIDA6YXJndW1lbnRzWzBdKSxyPXUoZTwyP3ZvaWQgMDphcmd1bWVudHNbMV0sIkVycm9yIiksbj1uZXcgeSh0LHIpLGE9Yih0KTtyZXR1cm4gYS5uYW1lPW0sbyhuLCJzdGFjayIscygxLGYoYS5zdGFjaywxKSkpLGgobix0aGlzLHcpLG59LHY9dy5wcm90b3R5cGU9eS5wcm90b3R5cGUseD0ic3RhY2siaW4gYihtKSxTPSJzdGFjayJpbiBuZXcgeSgxLDIpLEE9eSYmZyYmT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhLG0pLGs9ISghQXx8QS53cml0YWJsZSYmQS5jb25maWd1cmFibGUpLEM9eCYmIWsmJiFTO24oe2dsb2JhbDohMCxjb25zdHJ1Y3RvcjohMCxmb3JjZWQ6cHx8Q30se0RPTUV4Y2VwdGlvbjpDP3c6eX0pO3ZhciBPPWkobSksRj1PLnByb3RvdHlwZTtpZihGLmNvbnN0cnVjdG9yIT09Tylmb3IodmFyIEkgaW4gcHx8byhGLCJjb25zdHJ1Y3RvciIscygxLE8pKSxkKWlmKGMoZCxJKSl7dmFyIFQ9ZFtJXSxNPVQucztjKE8sTSl8fG8oTyxNLHMoNixULmMpKX19LChlLHQscik9Pnt2YXIgbj1yKDI1KSxhPVR5cGVFcnJvcjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZihuKHQsZSkpcmV0dXJuIGU7dGhyb3cgYSgiSW5jb3JyZWN0IGludm9jYXRpb24iKX19LGU9PntlLmV4cG9ydHM9e0luZGV4U2l6ZUVycm9yOntzOiJJTkRFWF9TSVpFX0VSUiIsYzoxLG06MX0sRE9NU3RyaW5nU2l6ZUVycm9yOntzOiJET01TVFJJTkdfU0laRV9FUlIiLGM6MixtOjB9LEhpZXJhcmNoeVJlcXVlc3RFcnJvcjp7czoiSElFUkFSQ0hZX1JFUVVFU1RfRVJSIixjOjMsbToxfSxXcm9uZ0RvY3VtZW50RXJyb3I6e3M6IldST05HX0RPQ1VNRU5UX0VSUiIsYzo0LG06MX0sSW52YWxpZENoYXJhY3RlckVycm9yOntzOiJJTlZBTElEX0NIQVJBQ1RFUl9FUlIiLGM6NSxtOjF9LE5vRGF0YUFsbG93ZWRFcnJvcjp7czoiTk9fREFUQV9BTExPV0VEX0VSUiIsYzo2LG06MH0sTm9Nb2RpZmljYXRpb25BbGxvd2VkRXJyb3I6e3M6Ik5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiIsYzo3LG06MX0sTm90Rm91bmRFcnJvcjp7czoiTk9UX0ZPVU5EX0VSUiIsYzo4LG06MX0sTm90U3VwcG9ydGVkRXJyb3I6e3M6Ik5PVF9TVVBQT1JURURfRVJSIixjOjksbToxfSxJblVzZUF0dHJpYnV0ZUVycm9yOntzOiJJTlVTRV9BVFRSSUJVVEVfRVJSIixjOjEwLG06MX0sSW52YWxpZFN0YXRlRXJyb3I6e3M6IklOVkFMSURfU1RBVEVfRVJSIixjOjExLG06MX0sU3ludGF4RXJyb3I6e3M6IlNZTlRBWF9FUlIiLGM6MTIsbToxfSxJbnZhbGlkTW9kaWZpY2F0aW9uRXJyb3I6e3M6IklOVkFMSURfTU9ESUZJQ0FUSU9OX0VSUiIsYzoxMyxtOjF9LE5hbWVzcGFjZUVycm9yOntzOiJOQU1FU1BBQ0VfRVJSIixjOjE0LG06MX0sSW52YWxpZEFjY2Vzc0Vycm9yOntzOiJJTlZBTElEX0FDQ0VTU19FUlIiLGM6MTUsbToxfSxWYWxpZGF0aW9uRXJyb3I6e3M6IlZBTElEQVRJT05fRVJSIixjOjE2LG06MH0sVHlwZU1pc21hdGNoRXJyb3I6e3M6IlRZUEVfTUlTTUFUQ0hfRVJSIixjOjE3LG06MX0sU2VjdXJpdHlFcnJvcjp7czoiU0VDVVJJVFlfRVJSIixjOjE4LG06MX0sTmV0d29ya0Vycm9yOntzOiJORVRXT1JLX0VSUiIsYzoxOSxtOjF9LEFib3J0RXJyb3I6e3M6IkFCT1JUX0VSUiIsYzoyMCxtOjF9LFVSTE1pc21hdGNoRXJyb3I6e3M6IlVSTF9NSVNNQVRDSF9FUlIiLGM6MjEsbToxfSxRdW90YUV4Y2VlZGVkRXJyb3I6e3M6IlFVT1RBX0VYQ0VFREVEX0VSUiIsYzoyMixtOjF9LFRpbWVvdXRFcnJvcjp7czoiVElNRU9VVF9FUlIiLGM6MjMsbToxfSxJbnZhbGlkTm9kZVR5cGVFcnJvcjp7czoiSU5WQUxJRF9OT0RFX1RZUEVfRVJSIixjOjI0LG06MX0sRGF0YUNsb25lRXJyb3I6e3M6IkRBVEFfQ0xPTkVfRVJSIixjOjI1LG06MX19fSwoZSx0KT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk5hbWVzcGFjZUlkcz10LiRidWlsZFhGQU9iamVjdD12b2lkIDA7Y29uc3Qgcj1TeW1ib2woKTt0LiRidWlsZFhGQU9iamVjdD1yLHQuTmFtZXNwYWNlSWRzPXtjb25maWc6e2lkOjAsY2hlY2s6ZT0+ZS5zdGFydHNXaXRoKCJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hjaS8iKX0sY29ubmVjdGlvblNldDp7aWQ6MSxjaGVjazplPT5lLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLWNvbm5lY3Rpb24tc2V0LyIpfSxkYXRhc2V0czp7aWQ6MixjaGVjazplPT5lLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLWRhdGEvIil9LGZvcm06e2lkOjMsY2hlY2s6ZT0+ZS5zdGFydHNXaXRoKCJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hmYS1mb3JtLyIpfSxsb2NhbGVTZXQ6e2lkOjQsY2hlY2s6ZT0+ZS5zdGFydHNXaXRoKCJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hmYS1sb2NhbGUtc2V0LyIpfSxwZGY6e2lkOjUsY2hlY2s6ZT0+Imh0dHA6Ly9ucy5hZG9iZS5jb20veGRwL3BkZi8iPT09ZX0sc2lnbmF0dXJlOntpZDo2LGNoZWNrOmU9PiJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIj09PWV9LHNvdXJjZVNldDp7aWQ6NyxjaGVjazplPT5lLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLXNvdXJjZS1zZXQvIil9LHN0eWxlc2hlZXQ6e2lkOjgsY2hlY2s6ZT0+Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSI9PT1lfSx0ZW1wbGF0ZTp7aWQ6OSxjaGVjazplPT5lLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLXRlbXBsYXRlLyIpfSx4ZGM6e2lkOjEwLGNoZWNrOmU9PmUuc3RhcnRzV2l0aCgiaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZGMvIil9LHhkcDp7aWQ6MTEsY2hlY2s6ZT0+Imh0dHA6Ly9ucy5hZG9iZS5jb20veGRwLyI9PT1lfSx4ZmRmOntpZDoxMixjaGVjazplPT4iaHR0cDovL25zLmFkb2JlLmNvbS94ZmRmLyI9PT1lfSx4aHRtbDp7aWQ6MTMsY2hlY2s6ZT0+Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPT09ZX0seG1wbWV0YTp7aWQ6MTQsY2hlY2s6ZT0+Imh0dHA6Ly9ucy5hZG9iZS5jb20veG1wbWV0YS8iPT09ZX19fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuYWRkSFRNTD1mdW5jdGlvbihlLHQscil7Y29uc3Qgcz1lW24uJGV4dHJhXSxvPXMuYXZhaWxhYmxlU3BhY2UsW2MsbCxoLHVdPXI7c3dpdGNoKGUubGF5b3V0KXtjYXNlInBvc2l0aW9uIjpzLndpZHRoPU1hdGgubWF4KHMud2lkdGgsYytoKSxzLmhlaWdodD1NYXRoLm1heChzLmhlaWdodCxsK3UpLHMuY2hpbGRyZW4ucHVzaCh0KTticmVhaztjYXNlImxyLXRiIjpjYXNlInJsLXRiIjpzLmxpbmUmJjEhPT1zLmF0dGVtcHR8fChzLmxpbmU9aShlLFtdKSxzLmNoaWxkcmVuLnB1c2gocy5saW5lKSxzLm51bWJlckluTGluZT0wKSxzLm51bWJlckluTGluZSs9MSxzLmxpbmUuY2hpbGRyZW4ucHVzaCh0KSwwPT09cy5hdHRlbXB0PyhzLmN1cnJlbnRXaWR0aCs9aCxzLmhlaWdodD1NYXRoLm1heChzLmhlaWdodCxzLnByZXZIZWlnaHQrdSkpOihzLmN1cnJlbnRXaWR0aD1oLHMucHJldkhlaWdodD1zLmhlaWdodCxzLmhlaWdodCs9dSxzLmF0dGVtcHQ9MCkscy53aWR0aD1NYXRoLm1heChzLndpZHRoLHMuY3VycmVudFdpZHRoKTticmVhaztjYXNlInJsLXJvdyI6Y2FzZSJyb3ciOntzLmNoaWxkcmVuLnB1c2godCkscy53aWR0aCs9aCxzLmhlaWdodD1NYXRoLm1heChzLmhlaWdodCx1KTtjb25zdCBlPSgwLGEubWVhc3VyZVRvU3RyaW5nKShzLmhlaWdodCk7Zm9yKGNvbnN0IHQgb2Ygcy5jaGlsZHJlbil0LmF0dHJpYnV0ZXMuc3R5bGUuaGVpZ2h0PWU7YnJlYWt9Y2FzZSJ0YWJsZSI6Y2FzZSJ0YiI6cy53aWR0aD1NYXRoLm1pbihvLndpZHRoLE1hdGgubWF4KHMud2lkdGgsaCkpLHMuaGVpZ2h0Kz11LHMuY2hpbGRyZW4ucHVzaCh0KX19LHQuY2hlY2tEaW1lbnNpb25zPWZ1bmN0aW9uKGUsdCl7dmFyIHI7aWYobnVsbD09PWVbbi4kZ2V0VGVtcGxhdGVSb290XSgpW24uJGV4dHJhXS5maXJzdFVuc3BsaXR0YWJsZSlyZXR1cm4hMDtpZigwPT09ZS53fHwwPT09ZS5oKXJldHVybiEwO2NvbnN0IGE9ZVtuLiRnZXRTdWJmb3JtUGFyZW50XSgpLGk9KG51bGw9PT0ocj1hW24uJGV4dHJhXSl8fHZvaWQgMD09PXI/dm9pZCAwOnIuYXR0ZW1wdCl8fDAsWyxzLG8sY109ZnVuY3Rpb24oZSl7bGV0IHQscixuPSIiPT09ZS53P05hTjplLncsYT0iIj09PWUuaD9OYU46ZS5oLFtpLHNdPVswLDBdO3N3aXRjaChlLmFuY2hvclR5cGV8fCIiKXtjYXNlImJvdHRvbUNlbnRlciI6W2ksc109W24vMixhXTticmVhaztjYXNlImJvdHRvbUxlZnQiOltpLHNdPVswLGFdO2JyZWFrO2Nhc2UiYm90dG9tUmlnaHQiOltpLHNdPVtuLGFdO2JyZWFrO2Nhc2UibWlkZGxlQ2VudGVyIjpbaSxzXT1bbi8yLGEvMl07YnJlYWs7Y2FzZSJtaWRkbGVMZWZ0IjpbaSxzXT1bMCxhLzJdO2JyZWFrO2Nhc2UibWlkZGxlUmlnaHQiOltpLHNdPVtuLGEvMl07YnJlYWs7Y2FzZSJ0b3BDZW50ZXIiOltpLHNdPVtuLzIsMF07YnJlYWs7Y2FzZSJ0b3BSaWdodCI6W2ksc109W24sMF19c3dpdGNoKGUucm90YXRlfHwwKXtjYXNlIDA6W3Qscl09Wy1pLC1zXTticmVhaztjYXNlIDkwOlt0LHJdPVstcyxpXSxbbixhXT1bYSwtbl07YnJlYWs7Y2FzZSAxODA6W3Qscl09W2ksc10sW24sYV09Wy1uLC1hXTticmVhaztjYXNlIDI3MDpbdCxyXT1bcywtaV0sW24sYV09Wy1hLG5dfXJldHVybltlLngrdCtNYXRoLm1pbigwLG4pLGUueStyK01hdGgubWluKDAsYSksTWF0aC5hYnMobiksTWF0aC5hYnMoYSldfShlKTtzd2l0Y2goYS5sYXlvdXQpe2Nhc2UibHItdGIiOmNhc2UicmwtdGIiOnJldHVybiAwPT09aT9lW24uJGdldFRlbXBsYXRlUm9vdF0oKVtuLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlPyIiIT09ZS53P01hdGgucm91bmQoby10LndpZHRoKTw9Mjp0LndpZHRoPjI6ISgiIiE9PWUuaCYmTWF0aC5yb3VuZChjLXQuaGVpZ2h0KT4yKSYmKCIiIT09ZS53P01hdGgucm91bmQoby10LndpZHRoKTw9Mnx8MD09PWFbbi4kZXh0cmFdLm51bWJlckluTGluZSYmdC5oZWlnaHQ+Mjp0LndpZHRoPjIpOiEhZVtuLiRnZXRUZW1wbGF0ZVJvb3RdKClbbi4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZXx8ISgiIiE9PWUuaCYmTWF0aC5yb3VuZChjLXQuaGVpZ2h0KT4yKSYmKCIiPT09ZS53fHxNYXRoLnJvdW5kKG8tdC53aWR0aCk8PTJ8fCFhW24uJGlzVGhlcmVNb3JlV2lkdGhdKCkpJiZ0LmhlaWdodD4yO2Nhc2UidGFibGUiOmNhc2UidGIiOnJldHVybiEhZVtuLiRnZXRUZW1wbGF0ZVJvb3RdKClbbi4kZXh0cmFdLm5vTGF5b3V0RmFpbHVyZXx8KCIiPT09ZS5ofHxlW24uJGlzU3BsaXR0YWJsZV0oKT8oIiI9PT1lLnd8fE1hdGgucm91bmQoby10LndpZHRoKTw9Mnx8IWFbbi4kaXNUaGVyZU1vcmVXaWR0aF0oKSkmJnQuaGVpZ2h0PjI6TWF0aC5yb3VuZChjLXQuaGVpZ2h0KTw9Mik7Y2FzZSJwb3NpdGlvbiI6cmV0dXJuISFlW24uJGdldFRlbXBsYXRlUm9vdF0oKVtuLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlfHwiIj09PWUuaHx8TWF0aC5yb3VuZChjK3MtdC5oZWlnaHQpPD0yfHxjK3M+ZVtuLiRnZXRUZW1wbGF0ZVJvb3RdKClbbi4kZXh0cmFdLmN1cnJlbnRDb250ZW50QXJlYS5oO2Nhc2Uicmwtcm93IjpjYXNlInJvdyI6cmV0dXJuISFlW24uJGdldFRlbXBsYXRlUm9vdF0oKVtuLiRleHRyYV0ubm9MYXlvdXRGYWlsdXJlfHwiIj09PWUuaHx8TWF0aC5yb3VuZChjLXQuaGVpZ2h0KTw9MjtkZWZhdWx0OnJldHVybiEwfX0sdC5mbHVzaEhUTUw9ZnVuY3Rpb24oZSl7aWYoIWVbbi4kZXh0cmFdKXJldHVybiBudWxsO2NvbnN0IHQ9e25hbWU6ImRpdiIsYXR0cmlidXRlczplW24uJGV4dHJhXS5hdHRyaWJ1dGVzLGNoaWxkcmVuOmVbbi4kZXh0cmFdLmNoaWxkcmVufTtpZihlW24uJGV4dHJhXS5mYWlsaW5nTm9kZSl7Y29uc3Qgcj1lW24uJGV4dHJhXS5mYWlsaW5nTm9kZVtuLiRmbHVzaEhUTUxdKCk7ciYmKGUubGF5b3V0LmVuZHNXaXRoKCItdGIiKT90LmNoaWxkcmVuLnB1c2goaShlLFtyXSkpOnQuY2hpbGRyZW4ucHVzaChyKSl9cmV0dXJuIDA9PT10LmNoaWxkcmVuLmxlbmd0aD9udWxsOnR9LHQuZ2V0QXZhaWxhYmxlU3BhY2U9ZnVuY3Rpb24oZSl7Y29uc3QgdD1lW24uJGV4dHJhXS5hdmFpbGFibGVTcGFjZSxyPWUubWFyZ2luP2UubWFyZ2luLnRvcEluc2V0K2UubWFyZ2luLmJvdHRvbUluc2V0OjAsYT1lLm1hcmdpbj9lLm1hcmdpbi5sZWZ0SW5zZXQrZS5tYXJnaW4ucmlnaHRJbnNldDowO3N3aXRjaChlLmxheW91dCl7Y2FzZSJsci10YiI6Y2FzZSJybC10YiI6cmV0dXJuIDA9PT1lW24uJGV4dHJhXS5hdHRlbXB0P3t3aWR0aDp0LndpZHRoLWEtZVtuLiRleHRyYV0uY3VycmVudFdpZHRoLGhlaWdodDp0LmhlaWdodC1yLWVbbi4kZXh0cmFdLnByZXZIZWlnaHR9Ont3aWR0aDp0LndpZHRoLWEsaGVpZ2h0OnQuaGVpZ2h0LXItZVtuLiRleHRyYV0uaGVpZ2h0fTtjYXNlInJsLXJvdyI6Y2FzZSJyb3ciOnJldHVybnt3aWR0aDplW24uJGV4dHJhXS5jb2x1bW5XaWR0aHMuc2xpY2UoZVtuLiRleHRyYV0uY3VycmVudENvbHVtbikucmVkdWNlKCgoZSx0KT0+ZSt0KSksaGVpZ2h0OnQuaGVpZ2h0LWF9O2Nhc2UidGFibGUiOmNhc2UidGIiOnJldHVybnt3aWR0aDp0LndpZHRoLWEsaGVpZ2h0OnQuaGVpZ2h0LXItZVtuLiRleHRyYV0uaGVpZ2h0fTtkZWZhdWx0OnJldHVybiB0fX0scigxMzkpO3ZhciBuPXIoMjI4KSxhPXIoMjM2KTtmdW5jdGlvbiBpKGUsdCl7cmV0dXJue25hbWU6ImRpdiIsYXR0cmlidXRlczp7Y2xhc3M6WyJsci10YiI9PT1lLmxheW91dD8ieGZhTHIiOiJ4ZmFSbCJdfSxjaGlsZHJlbjp0fX19LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5jb21wdXRlQmJveD1mdW5jdGlvbihlLHQscil7bGV0IGE7aWYoIiIhPT1lLncmJiIiIT09ZS5oKWE9W2UueCxlLnksZS53LGUuaF07ZWxzZXtpZighcilyZXR1cm4gbnVsbDtsZXQgaT1lLnc7aWYoIiI9PT1pKXtpZigwPT09ZS5tYXhXKXtjb25zdCB0PWVbbi4kZ2V0U3ViZm9ybVBhcmVudF0oKTtpPSJwb3NpdGlvbiI9PT10LmxheW91dCYmIiIhPT10Lnc/MDplLm1pbld9ZWxzZSBpPU1hdGgubWluKGUubWF4VyxyLndpZHRoKTt0LmF0dHJpYnV0ZXMuc3R5bGUud2lkdGg9bChpKX1sZXQgcz1lLmg7aWYoIiI9PT1zKXtpZigwPT09ZS5tYXhIKXtjb25zdCB0PWVbbi4kZ2V0U3ViZm9ybVBhcmVudF0oKTtzPSJwb3NpdGlvbiI9PT10LmxheW91dCYmIiIhPT10Lmg/MDplLm1pbkh9ZWxzZSBzPU1hdGgubWluKGUubWF4SCxyLmhlaWdodCk7dC5hdHRyaWJ1dGVzLnN0eWxlLmhlaWdodD1sKHMpfWE9W2UueCxlLnksaSxzXX1yZXR1cm4gYX0sdC5jcmVhdGVXcmFwcGVyPWZ1bmN0aW9uKGUsdCl7Y29uc3R7YXR0cmlidXRlczpyfT10LHtzdHlsZTphfT1yLGk9e25hbWU6ImRpdiIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFXcmFwcGVyIl0sc3R5bGU6T2JqZWN0LmNyZWF0ZShudWxsKX0sY2hpbGRyZW46W119O2lmKHIuY2xhc3MucHVzaCgieGZhV3JhcHBlZCIpLGUuYm9yZGVyKXtjb25zdHt3aWR0aHM6cixpbnNldHM6c309ZS5ib3JkZXJbbi4kZXh0cmFdO2xldCBvLGMsbD1zWzBdLGg9c1szXTtjb25zdCB1PXNbMF0rc1syXSxmPXNbMV0rc1szXTtzd2l0Y2goZS5ib3JkZXIuaGFuZCl7Y2FzZSJldmVuIjpsLT1yWzBdLzIsaC09clszXS8yLG89ImNhbGMoMTAwJSArICIuY29uY2F0KChyWzFdK3JbM10pLzItZiwicHgpIiksYz0iY2FsYygxMDAlICsgIi5jb25jYXQoKHJbMF0rclsyXSkvMi11LCJweCkiKTticmVhaztjYXNlImxlZnQiOmwtPXJbMF0saC09clszXSxvPSJjYWxjKDEwMCUgKyAiLmNvbmNhdChyWzFdK3JbM10tZiwicHgpIiksYz0iY2FsYygxMDAlICsgIi5jb25jYXQoclswXStyWzJdLXUsInB4KSIpO2JyZWFrO2Nhc2UicmlnaHQiOm89Zj8iY2FsYygxMDAlIC0gIi5jb25jYXQoZiwicHgpIik6IjEwMCUiLGM9dT8iY2FsYygxMDAlIC0gIi5jb25jYXQodSwicHgpIik6IjEwMCUifWNvbnN0IGc9WyJ4ZmFCb3JkZXIiXTtkKGUuYm9yZGVyKSYmZy5wdXNoKCJ4ZmFQcmludE9ubHkiKTtjb25zdCBwPXtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e2NsYXNzOmcsc3R5bGU6e3RvcDoiIi5jb25jYXQobCwicHgiKSxsZWZ0OiIiLmNvbmNhdChoLCJweCIpLHdpZHRoOm8saGVpZ2h0OmN9fSxjaGlsZHJlbjpbXX07Zm9yKGNvbnN0IGUgb2ZbImJvcmRlciIsImJvcmRlcldpZHRoIiwiYm9yZGVyQ29sb3IiLCJib3JkZXJSYWRpdXMiLCJib3JkZXJTdHlsZSJdKXZvaWQgMCE9PWFbZV0mJihwLmF0dHJpYnV0ZXMuc3R5bGVbZV09YVtlXSxkZWxldGUgYVtlXSk7aS5jaGlsZHJlbi5wdXNoKHAsdCl9ZWxzZSBpLmNoaWxkcmVuLnB1c2godCk7Zm9yKGNvbnN0IGUgb2ZbImJhY2tncm91bmQiLCJiYWNrZ3JvdW5kQ2xpcCIsInRvcCIsImxlZnQiLCJ3aWR0aCIsImhlaWdodCIsIm1pbldpZHRoIiwibWluSGVpZ2h0IiwibWF4V2lkdGgiLCJtYXhIZWlnaHQiLCJ0cmFuc2Zvcm0iLCJ0cmFuc2Zvcm1PcmlnaW4iLCJ2aXNpYmlsaXR5Il0pdm9pZCAwIT09YVtlXSYmKGkuYXR0cmlidXRlcy5zdHlsZVtlXT1hW2VdLGRlbGV0ZSBhW2VdKTtyZXR1cm4gaS5hdHRyaWJ1dGVzLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSI9PT1hLnBvc2l0aW9uPyJhYnNvbHV0ZSI6InJlbGF0aXZlIixkZWxldGUgYS5wb3NpdGlvbixhLmFsaWduU2VsZiYmKGkuYXR0cmlidXRlcy5zdHlsZS5hbGlnblNlbGY9YS5hbGlnblNlbGYsZGVsZXRlIGEuYWxpZ25TZWxmKSxpfSx0LmZpeERpbWVuc2lvbnM9ZnVuY3Rpb24oZSl7dmFyIHQ7Y29uc3Qgcj1lW24uJGdldFN1YmZvcm1QYXJlbnRdKCk7aWYobnVsbCE9PSh0PXIubGF5b3V0KSYmdm9pZCAwIT09dCYmdC5pbmNsdWRlcygicm93Iikpe2NvbnN0IHQ9cltuLiRleHRyYV0sYT1lLmNvbFNwYW47bGV0IGk7aT0tMT09PWE/dC5jb2x1bW5XaWR0aHMuc2xpY2UodC5jdXJyZW50Q29sdW1uKS5yZWR1Y2UoKChlLHQpPT5lK3QpLDApOnQuY29sdW1uV2lkdGhzLnNsaWNlKHQuY3VycmVudENvbHVtbix0LmN1cnJlbnRDb2x1bW4rYSkucmVkdWNlKCgoZSx0KT0+ZSt0KSwwKSxpc05hTihpKXx8KGUudz1pKX1yLmxheW91dCYmInBvc2l0aW9uIiE9PXIubGF5b3V0JiYoZS54PWUueT0wKSwidGFibGUiPT09ZS5sYXlvdXQmJiIiPT09ZS53JiZBcnJheS5pc0FycmF5KGUuY29sdW1uV2lkdGhzKSYmKGUudz1lLmNvbHVtbldpZHRocy5yZWR1Y2UoKChlLHQpPT5lK3QpLDApKX0sdC5maXhUZXh0SW5kZW50PWZ1bmN0aW9uKGUpe2NvbnN0IHQ9KDAsaS5nZXRNZWFzdXJlbWVudCkoZS50ZXh0SW5kZW50LCIwcHgiKTtpZih0Pj0wKXJldHVybjtjb25zdCByPSJwYWRkaW5nIisoImxlZnQiPT0oInJpZ2h0Ij09PWUudGV4dEFsaWduPyJyaWdodCI6ImxlZnQiKT8iTGVmdCI6IlJpZ2h0Iiksbj0oMCxpLmdldE1lYXN1cmVtZW50KShlW3JdLCIwcHgiKTtlW3JdPW4tdCsicHgifSx0LmZpeFVSTD1mdW5jdGlvbihlKXtjb25zdCB0PSgwLGEuY3JlYXRlVmFsaWRBYnNvbHV0ZVVybCkoZSxudWxsLHthZGREZWZhdWx0UHJvdG9jb2w6ITAsdHJ5Q29udmVydEVuY29kaW5nOiEwfSk7cmV0dXJuIHQ/dC5ocmVmOm51bGx9LHQuaXNQcmludE9ubHk9ZCx0LmxheW91dENsYXNzPWZ1bmN0aW9uKGUpe3N3aXRjaChlLmxheW91dCl7Y2FzZSJwb3NpdGlvbiI6ZGVmYXVsdDpyZXR1cm4ieGZhUG9zaXRpb24iO2Nhc2UibHItdGIiOnJldHVybiJ4ZmFMclRiIjtjYXNlInJsLXJvdyI6cmV0dXJuInhmYVJsUm93IjtjYXNlInJsLXRiIjpyZXR1cm4ieGZhUmxUYiI7Y2FzZSJyb3ciOnJldHVybiJ4ZmFSb3ciO2Nhc2UidGFibGUiOnJldHVybiJ4ZmFUYWJsZSI7Y2FzZSJ0YiI6cmV0dXJuInhmYVRiIn19LHQubGF5b3V0Tm9kZT1mdW5jdGlvbihlLHQpe2xldCByPW51bGwsYT1udWxsLGk9ITE7aWYoKCFlLnd8fCFlLmgpJiZlLnZhbHVlKXtsZXQgcz0wLG89MDtlLm1hcmdpbiYmKHM9ZS5tYXJnaW4ubGVmdEluc2V0K2UubWFyZ2luLnJpZ2h0SW5zZXQsbz1lLm1hcmdpbi50b3BJbnNldCtlLm1hcmdpbi5ib3R0b21JbnNldCk7bGV0IGM9bnVsbCxsPW51bGw7ZS5wYXJhJiYobD1PYmplY3QuY3JlYXRlKG51bGwpLGM9IiI9PT1lLnBhcmEubGluZUhlaWdodD9udWxsOmUucGFyYS5saW5lSGVpZ2h0LGwudG9wPSIiPT09ZS5wYXJhLnNwYWNlQWJvdmU/MDplLnBhcmEuc3BhY2VBYm92ZSxsLmJvdHRvbT0iIj09PWUucGFyYS5zcGFjZUJlbG93PzA6ZS5wYXJhLnNwYWNlQmVsb3csbC5sZWZ0PSIiPT09ZS5wYXJhLm1hcmdpbkxlZnQ/MDplLnBhcmEubWFyZ2luTGVmdCxsLnJpZ2h0PSIiPT09ZS5wYXJhLm1hcmdpblJpZ2h0PzA6ZS5wYXJhLm1hcmdpblJpZ2h0KTtsZXQgaD1lLmZvbnQ7aWYoIWgpe2NvbnN0IHQ9ZVtuLiRnZXRUZW1wbGF0ZVJvb3RdKCk7bGV0IHI9ZVtuLiRnZXRQYXJlbnRdKCk7Zm9yKDtyJiZyIT09dDspe2lmKHIuZm9udCl7aD1yLmZvbnQ7YnJlYWt9cj1yW24uJGdldFBhcmVudF0oKX19Y29uc3QgZD0oZS53fHx0LndpZHRoKS1zLGY9ZVtuLiRnbG9iYWxEYXRhXS5mb250RmluZGVyO2lmKGUudmFsdWUuZXhEYXRhJiZlLnZhbHVlLmV4RGF0YVtuLiRjb250ZW50XSYmInRleHQvaHRtbCI9PT1lLnZhbHVlLmV4RGF0YS5jb250ZW50VHlwZSl7Y29uc3QgdD11KGUudmFsdWUuZXhEYXRhW24uJGNvbnRlbnRdLGgsbCxjLGYsZCk7YT10LndpZHRoLHI9dC5oZWlnaHQsaT10LmlzQnJva2VufWVsc2V7Y29uc3QgdD1lLnZhbHVlW24uJHRleHRdKCk7aWYodCl7Y29uc3QgZT11KHQsaCxsLGMsZixkKTthPWUud2lkdGgscj1lLmhlaWdodCxpPWUuaXNCcm9rZW59fW51bGw9PT1hfHxlLnd8fChhKz1zKSxudWxsPT09cnx8ZS5ofHwocis9byl9cmV0dXJue3c6YSxoOnIsaXNCcm9rZW46aX19LHQubWVhc3VyZVRvU3RyaW5nPWwsdC5zZXRBY2Nlc3M9ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZS5hY2Nlc3Mpe2Nhc2Uibm9uSW50ZXJhY3RpdmUiOnQucHVzaCgieGZhTm9uSW50ZXJhY3RpdmUiKTticmVhaztjYXNlInJlYWRPbmx5Ijp0LnB1c2goInhmYVJlYWRPbmx5Iik7YnJlYWs7Y2FzZSJwcm90ZWN0ZWQiOnQucHVzaCgieGZhRGlzYWJsZWQiKX19LHQuc2V0Rm9udEZhbWlseT1mdW5jdGlvbihlLHQscixuKXtpZighcilyZXR1cm4gdm9pZCBkZWxldGUgbi5mb250RmFtaWx5O2NvbnN0IGE9KDAsaS5zdHJpcFF1b3RlcykoZS50eXBlZmFjZSk7bi5mb250RmFtaWx5PSciJy5jb25jYXQoYSwnIicpO2NvbnN0IG89ci5maW5kKGEpO2lmKG8pe2NvbnN0e2ZvbnRGYW1pbHk6cn09by5yZWd1bGFyLmNzc0ZvbnRJbmZvO3IhPT1hJiYobi5mb250RmFtaWx5PSciJy5jb25jYXQociwnIicpKTtjb25zdCBpPWYodCk7aWYoaSYmIiIhPT1pLmxpbmVIZWlnaHQpcmV0dXJuO2lmKG4ubGluZUhlaWdodClyZXR1cm47Y29uc3QgYz0oMCxzLnNlbGVjdEZvbnQpKGUsbyk7YyYmKG4ubGluZUhlaWdodD1NYXRoLm1heCgxLjIsYy5saW5lSGVpZ2h0KSl9fSx0LnNldE1pbk1heERpbWVuc2lvbnM9ZnVuY3Rpb24oZSx0KXsicG9zaXRpb24iPT09ZVtuLiRnZXRTdWJmb3JtUGFyZW50XSgpLmxheW91dCYmKGUubWluVz4wJiYodC5taW5XaWR0aD1sKGUubWluVykpLGUubWF4Vz4wJiYodC5tYXhXaWR0aD1sKGUubWF4VykpLGUubWluSD4wJiYodC5taW5IZWlnaHQ9bChlLm1pbkgpKSxlLm1heEg+MCYmKHQubWF4SGVpZ2h0PWwoZS5tYXhIKSkpfSx0LnNldFBhcmE9ZnVuY3Rpb24oZSx0LHIpe3ZhciBhO2lmKG51bGwhPT0oYT1yLmF0dHJpYnV0ZXMuY2xhc3MpJiZ2b2lkIDAhPT1hJiZhLmluY2x1ZGVzKCJ4ZmFSaWNoIikpe3QmJigiIj09PWUuaCYmKHQuaGVpZ2h0PSJhdXRvIiksIiI9PT1lLncmJih0LndpZHRoPSJhdXRvIikpO2NvbnN0IGE9ZihlKTtpZihhKXtjb25zdCBlPXIuYXR0cmlidXRlcy5zdHlsZTtzd2l0Y2goZS5kaXNwbGF5PSJmbGV4IixlLmZsZXhEaXJlY3Rpb249ImNvbHVtbiIsYS52QWxpZ24pe2Nhc2UidG9wIjplLmp1c3RpZnlDb250ZW50PSJzdGFydCI7YnJlYWs7Y2FzZSJib3R0b20iOmUuanVzdGlmeUNvbnRlbnQ9ImVuZCI7YnJlYWs7Y2FzZSJtaWRkbGUiOmUuanVzdGlmeUNvbnRlbnQ9ImNlbnRlciJ9Y29uc3QgdD1hW24uJHRvU3R5bGVdKCk7Zm9yKGNvbnN0W3Isbl1vZiBPYmplY3QuZW50cmllcyh0KSlyIGluIGV8fChlW3JdPW4pfX19LHQudG9TdHlsZT1mdW5jdGlvbihlKXtjb25zdCB0PU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKHZhciByPWFyZ3VtZW50cy5sZW5ndGgsaT1uZXcgQXJyYXkocj4xP3ItMTowKSxzPTE7czxyO3MrKylpW3MtMV09YXJndW1lbnRzW3NdO2Zvcihjb25zdCByIG9mIGkpe2NvbnN0IGk9ZVtyXTtpZihudWxsIT09aSlpZihoLmhhc093blByb3BlcnR5KHIpKWhbcl0oZSx0KTtlbHNlIGlmKGkgaW5zdGFuY2VvZiBjLlhGQU9iamVjdCl7Y29uc3QgZT1pW24uJHRvU3R5bGVdKCk7ZT9PYmplY3QuYXNzaWduKHQsZSk6KDAsYS53YXJuKSgiKERFQlVHKSAtIFhGQSAtIHN0eWxlIGZvciAiLmNvbmNhdChyLCIgbm90IGltcGxlbWVudGVkIHlldCIpKX19cmV0dXJuIHR9LHIoMTM5KTt2YXIgbj1yKDIyOCksYT1yKDE0NCksaT1yKDIzNykscz1yKDIzOCksbz1yKDIzOSksYz1yKDI0MCk7ZnVuY3Rpb24gbChlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/IjBweCI6TnVtYmVyLmlzSW50ZWdlcihlKT8iIi5jb25jYXQoZSwicHgiKToiIi5jb25jYXQoZS50b0ZpeGVkKDIpLCJweCIpfWNvbnN0IGg9e2FuY2hvclR5cGUoZSx0KXtjb25zdCByPWVbbi4kZ2V0U3ViZm9ybVBhcmVudF0oKTtpZihyJiYoIXIubGF5b3V0fHwicG9zaXRpb24iPT09ci5sYXlvdXQpKXN3aXRjaCgidHJhbnNmb3JtImluIHR8fCh0LnRyYW5zZm9ybT0iIiksZS5hbmNob3JUeXBlKXtjYXNlImJvdHRvbUNlbnRlciI6dC50cmFuc2Zvcm0rPSJ0cmFuc2xhdGUoLTUwJSwgLTEwMCUpIjticmVhaztjYXNlImJvdHRvbUxlZnQiOnQudHJhbnNmb3JtKz0idHJhbnNsYXRlKDAsLTEwMCUpIjticmVhaztjYXNlImJvdHRvbVJpZ2h0Ijp0LnRyYW5zZm9ybSs9InRyYW5zbGF0ZSgtMTAwJSwtMTAwJSkiO2JyZWFrO2Nhc2UibWlkZGxlQ2VudGVyIjp0LnRyYW5zZm9ybSs9InRyYW5zbGF0ZSgtNTAlLC01MCUpIjticmVhaztjYXNlIm1pZGRsZUxlZnQiOnQudHJhbnNmb3JtKz0idHJhbnNsYXRlKDAsLTUwJSkiO2JyZWFrO2Nhc2UibWlkZGxlUmlnaHQiOnQudHJhbnNmb3JtKz0idHJhbnNsYXRlKC0xMDAlLC01MCUpIjticmVhaztjYXNlInRvcENlbnRlciI6dC50cmFuc2Zvcm0rPSJ0cmFuc2xhdGUoLTUwJSwwKSI7YnJlYWs7Y2FzZSJ0b3BSaWdodCI6dC50cmFuc2Zvcm0rPSJ0cmFuc2xhdGUoLTEwMCUsMCkifX0sZGltZW5zaW9ucyhlLHQpe3ZhciByO2NvbnN0IGE9ZVtuLiRnZXRTdWJmb3JtUGFyZW50XSgpO2xldCBpPWUudztjb25zdCBzPWUuaDtpZihudWxsIT09KHI9YS5sYXlvdXQpJiZ2b2lkIDAhPT1yJiZyLmluY2x1ZGVzKCJyb3ciKSl7Y29uc3QgdD1hW24uJGV4dHJhXSxyPWUuY29sU3BhbjtsZXQgczstMT09PXI/KHM9dC5jb2x1bW5XaWR0aHMuc2xpY2UodC5jdXJyZW50Q29sdW1uKS5yZWR1Y2UoKChlLHQpPT5lK3QpLDApLHQuY3VycmVudENvbHVtbj0wKToocz10LmNvbHVtbldpZHRocy5zbGljZSh0LmN1cnJlbnRDb2x1bW4sdC5jdXJyZW50Q29sdW1uK3IpLnJlZHVjZSgoKGUsdCk9PmUrdCksMCksdC5jdXJyZW50Q29sdW1uPSh0LmN1cnJlbnRDb2x1bW4rZS5jb2xTcGFuKSV0LmNvbHVtbldpZHRocy5sZW5ndGgpLGlzTmFOKHMpfHwoaT1lLnc9cyl9dC53aWR0aD0iIiE9PWk/bChpKToiYXV0byIsdC5oZWlnaHQ9IiIhPT1zP2wocyk6ImF1dG8ifSxwb3NpdGlvbihlLHQpe2NvbnN0IHI9ZVtuLiRnZXRTdWJmb3JtUGFyZW50XSgpO251bGwhPXImJnIubGF5b3V0JiYicG9zaXRpb24iIT09ci5sYXlvdXR8fCh0LnBvc2l0aW9uPSJhYnNvbHV0ZSIsdC5sZWZ0PWwoZS54KSx0LnRvcD1sKGUueSkpfSxyb3RhdGUoZSx0KXtlLnJvdGF0ZSYmKCJ0cmFuc2Zvcm0iaW4gdHx8KHQudHJhbnNmb3JtPSIiKSx0LnRyYW5zZm9ybSs9InJvdGF0ZSgtIi5jb25jYXQoZS5yb3RhdGUsImRlZykiKSx0LnRyYW5zZm9ybU9yaWdpbj0idG9wIGxlZnQiKX0scHJlc2VuY2UoZSx0KXtzd2l0Y2goZS5wcmVzZW5jZSl7Y2FzZSJpbnZpc2libGUiOnQudmlzaWJpbGl0eT0iaGlkZGVuIjticmVhaztjYXNlImhpZGRlbiI6Y2FzZSJpbmFjdGl2ZSI6dC5kaXNwbGF5PSJub25lIn19LGhBbGlnbihlLHQpe2lmKCJwYXJhIj09PWVbbi4kbm9kZU5hbWVdKXN3aXRjaChlLmhBbGlnbil7Y2FzZSJqdXN0aWZ5QWxsIjp0LnRleHRBbGlnbj0ianVzdGlmeS1hbGwiO2JyZWFrO2Nhc2UicmFkaXgiOnQudGV4dEFsaWduPSJsZWZ0IjticmVhaztkZWZhdWx0OnQudGV4dEFsaWduPWUuaEFsaWdufWVsc2Ugc3dpdGNoKGUuaEFsaWduKXtjYXNlImxlZnQiOnQuYWxpZ25TZWxmPSJzdGFydCI7YnJlYWs7Y2FzZSJjZW50ZXIiOnQuYWxpZ25TZWxmPSJjZW50ZXIiO2JyZWFrO2Nhc2UicmlnaHQiOnQuYWxpZ25TZWxmPSJlbmQifX0sbWFyZ2luKGUsdCl7ZS5tYXJnaW4mJih0Lm1hcmdpbj1lLm1hcmdpbltuLiR0b1N0eWxlXSgpLm1hcmdpbil9fTtmdW5jdGlvbiB1KGUsdCxyLGEsaSxzKXtjb25zdCBjPW5ldyBvLlRleHRNZWFzdXJlKHQscixhLGkpO3JldHVybiJzdHJpbmciPT10eXBlb2YgZT9jLmFkZFN0cmluZyhlKTplW24uJHB1c2hHbHlwaHNdKGMpLGMuY29tcHV0ZShzKX1mdW5jdGlvbiBkKGUpe3JldHVybiBlLnJlbGV2YW50Lmxlbmd0aD4wJiYhZS5yZWxldmFudFswXS5leGNsdWRlZCYmInByaW50Ij09PWUucmVsZXZhbnRbMF0udmlld25hbWV9ZnVuY3Rpb24gZihlKXtjb25zdCB0PWVbbi4kZ2V0VGVtcGxhdGVSb290XSgpW24uJGV4dHJhXS5wYXJhU3RhY2s7cmV0dXJuIHQubGVuZ3RoP3QuYXQoLTEpOm51bGx9fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuSFRNTFJlc3VsdD12b2lkIDAsdC5nZXRCQm94PWZ1bmN0aW9uKGUpe2NvbnN0IHQ9LTE7aWYoIWUpcmV0dXJue3g6dCx5OnQsd2lkdGg6dCxoZWlnaHQ6dH07Y29uc3Qgcj1lLnRyaW0oKS5zcGxpdCgvXHMqLFxzKi8pLm1hcCgoZT0+byhlLCItMSIpKSk7aWYoci5sZW5ndGg8NHx8clsyXTwwfHxyWzNdPDApcmV0dXJue3g6dCx5OnQsd2lkdGg6dCxoZWlnaHQ6dH07Y29uc3RbbixhLGksc109cjtyZXR1cm57eDpuLHk6YSx3aWR0aDppLGhlaWdodDpzfX0sdC5nZXRDb2xvcj1mdW5jdGlvbihlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06WzAsMCwwXSxbcixuLGFdPXQ7aWYoIWUpcmV0dXJue3IsZzpuLGI6YX07Y29uc3QgaT1lLnRyaW0oKS5zcGxpdCgvXHMqLFxzKi8pLm1hcCgoZT0+TWF0aC5taW4oTWF0aC5tYXgoMCxwYXJzZUludChlLnRyaW0oKSwxMCkpLDI1NSkpKS5tYXAoKGU9PmlzTmFOKGUpPzA6ZSkpO3JldHVybiBpLmxlbmd0aDwzfHwoW3IsbixhXT1pKSx7cixnOm4sYjphfX0sdC5nZXRGbG9hdD1mdW5jdGlvbihlKXtsZXR7ZGF0YTp0LGRlZmF1bHRWYWx1ZTpyLHZhbGlkYXRlOm59PWU7aWYoIXQpcmV0dXJuIHI7dD10LnRyaW0oKTtjb25zdCBhPXBhcnNlRmxvYXQodCk7cmV0dXJuIWlzTmFOKGEpJiZuKGEpP2E6cn0sdC5nZXRJbnRlZ2VyPWZ1bmN0aW9uKGUpe2xldHtkYXRhOnQsZGVmYXVsdFZhbHVlOnIsdmFsaWRhdGU6bn09ZTtpZighdClyZXR1cm4gcjt0PXQudHJpbSgpO2NvbnN0IGE9cGFyc2VJbnQodCwxMCk7cmV0dXJuIWlzTmFOKGEpJiZuKGEpP2E6cn0sdC5nZXRLZXl3b3JkPXMsdC5nZXRNZWFzdXJlbWVudD1vLHQuZ2V0UmF0aW89ZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJue251bToxLGRlbjoxfTtjb25zdCB0PWUudHJpbSgpLnNwbGl0KC9ccyo6XHMqLykubWFwKChlPT5wYXJzZUZsb2F0KGUpKSkuZmlsdGVyKChlPT4haXNOYU4oZSkpKTtpZigxPT09dC5sZW5ndGgmJnQucHVzaCgxKSwwPT09dC5sZW5ndGgpcmV0dXJue251bToxLGRlbjoxfTtjb25zdFtyLG5dPXQ7cmV0dXJue251bTpyLGRlbjpufX0sdC5nZXRSZWxldmFudD1mdW5jdGlvbihlKXtyZXR1cm4gZT9lLnRyaW0oKS5zcGxpdCgvXHMrLykubWFwKChlPT4oe2V4Y2x1ZGVkOiItIj09PWVbMF0sdmlld25hbWU6ZS5zdWJzdHJpbmcoMSl9KSkpOltdfSx0LmdldFN0cmluZ09wdGlvbj1mdW5jdGlvbihlLHQpe3JldHVybiBzKHtkYXRhOmUsZGVmYXVsdFZhbHVlOnRbMF0sdmFsaWRhdGU6ZT0+dC5pbmNsdWRlcyhlKX0pfSx0LnN0cmlwUXVvdGVzPWZ1bmN0aW9uKGUpe3JldHVybiBlLnN0YXJ0c1dpdGgoIiciKXx8ZS5zdGFydHNXaXRoKCciJyk/ZS5zbGljZSgxLC0xKTplfSxyKDEzOSk7dmFyIG49cigxNDQpO2NvbnN0IGE9e3B0OmU9PmUsY206ZT0+ZS8yLjU0KjcyLG1tOmU9PmUvMjUuNCo3MixpbjplPT43MiplLHB4OmU9PmV9LGk9LyhbKy1dP1xkK1wuP1xkKikoLiopLztmdW5jdGlvbiBzKGUpe2xldHtkYXRhOnQsZGVmYXVsdFZhbHVlOnIsdmFsaWRhdGU6bn09ZTtyZXR1cm4gdD8odD10LnRyaW0oKSxuKHQpP3Q6cik6cn1mdW5jdGlvbiBvKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiMCI7aWYodHx8KHQ9IjAiKSwhZSlyZXR1cm4gbyh0KTtjb25zdCByPWUudHJpbSgpLm1hdGNoKGkpO2lmKCFyKXJldHVybiBvKHQpO2NvbnN0WyxuLHNdPXIsYz1wYXJzZUZsb2F0KG4pO2lmKGlzTmFOKGMpKXJldHVybiBvKHQpO2lmKDA9PT1jKXJldHVybiAwO2NvbnN0IGw9YVtzXTtyZXR1cm4gbD9sKGMpOmN9Y2xhc3MgY3tzdGF0aWMgZ2V0IEZBSUxVUkUoKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiRkFJTFVSRSIsbmV3IGMoITEsbnVsbCxudWxsLG51bGwpKX1zdGF0aWMgZ2V0IEVNUFRZKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIkVNUFRZIixuZXcgYyghMCxudWxsLG51bGwsbnVsbCkpfWNvbnN0cnVjdG9yKGUsdCxyLG4pe3RoaXMuc3VjY2Vzcz1lLHRoaXMuaHRtbD10LHRoaXMuYmJveD1yLHRoaXMuYnJlYWtOb2RlPW59aXNCcmVhaygpe3JldHVybiEhdGhpcy5icmVha05vZGV9c3RhdGljIGJyZWFrTm9kZShlKXtyZXR1cm4gbmV3IGMoITEsbnVsbCxudWxsLGUpfXN0YXRpYyBzdWNjZXNzKGUpe3JldHVybiBuZXcgYyghMCxlLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsLG51bGwpfX10LkhUTUxSZXN1bHQ9Y30sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkZvbnRGaW5kZXI9dm9pZCAwLHQuZ2V0TWV0cmljcz1mdW5jdGlvbihlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLHI9bnVsbDtpZihlKXtjb25zdCB0PSgwLGEuc3RyaXBRdW90ZXMpKGUudHlwZWZhY2UpLGk9ZVtuLiRnbG9iYWxEYXRhXS5mb250RmluZGVyLmZpbmQodCk7cj1zKGUsaSl9aWYoIXIpcmV0dXJue2xpbmVIZWlnaHQ6MTIsbGluZUdhcDoyLGxpbmVOb0dhcDoxMH07Y29uc3QgaT1lLnNpemV8fDEwLG89ci5saW5lSGVpZ2h0P01hdGgubWF4KHQ/MDoxLjIsci5saW5lSGVpZ2h0KToxLjIsYz12b2lkIDA9PT1yLmxpbmVHYXA/LjI6ci5saW5lR2FwO3JldHVybntsaW5lSGVpZ2h0Om8qaSxsaW5lR2FwOmMqaSxsaW5lTm9HYXA6TWF0aC5tYXgoMSxvLWMpKml9fSx0LnNlbGVjdEZvbnQ9cyxyKDExNikscigxMjYpLHIoMTI4KSxyKDEzMSkscigxMzMpLHIoMTM1KSxyKDEzNykscigxMzkpO3ZhciBuPXIoMjI4KSxhPXIoMjM3KSxpPXIoMTQ0KTtmdW5jdGlvbiBzKGUsdCl7cmV0dXJuIml0YWxpYyI9PT1lLnBvc3R1cmU/ImJvbGQiPT09ZS53ZWlnaHQ/dC5ib2xkaXRhbGljOnQuaXRhbGljOiJib2xkIj09PWUud2VpZ2h0P3QuYm9sZDp0LnJlZ3VsYXJ9dC5Gb250RmluZGVyPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuZm9udHM9bmV3IE1hcCx0aGlzLmNhY2hlPW5ldyBNYXAsdGhpcy53YXJuZWQ9bmV3IFNldCx0aGlzLmRlZmF1bHRGb250PW51bGwsdGhpcy5hZGQoZSl9YWRkKGUpe2xldCB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsO2Zvcihjb25zdCB0IG9mIGUpdGhpcy5hZGRQZGZGb250KHQpO2Zvcihjb25zdCBlIG9mIHRoaXMuZm9udHMudmFsdWVzKCkpZS5yZWd1bGFyfHwoZS5yZWd1bGFyPWUuaXRhbGljfHxlLmJvbGR8fGUuYm9sZGl0YWxpYyk7aWYoIXR8fDA9PT10LnNpemUpcmV0dXJuO2NvbnN0IHI9dGhpcy5mb250cy5nZXQoIlBkZkpTLUZhbGxiYWNrLVBkZkpTLVhGQSIpO2Zvcihjb25zdCBlIG9mIHQpdGhpcy5mb250cy5zZXQoZSxyKX1hZGRQZGZGb250KGUpe2NvbnN0IHQ9ZS5jc3NGb250SW5mbyxyPXQuZm9udEZhbWlseTtsZXQgbj10aGlzLmZvbnRzLmdldChyKTtufHwobj1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuZm9udHMuc2V0KHIsbiksdGhpcy5kZWZhdWx0Rm9udHx8KHRoaXMuZGVmYXVsdEZvbnQ9bikpO2xldCBhPSIiO2NvbnN0IGk9cGFyc2VGbG9hdCh0LmZvbnRXZWlnaHQpO3ZhciBzLG8sYzswIT09cGFyc2VGbG9hdCh0Lml0YWxpY0FuZ2xlKT9hPWk+PTcwMD8iYm9sZGl0YWxpYyI6Iml0YWxpYyI6aT49NzAwJiYoYT0iYm9sZCIpLGF8fCgoZS5uYW1lLmluY2x1ZGVzKCJCb2xkIil8fChudWxsPT09KHM9ZS5wc05hbWUpfHx2b2lkIDA9PT1zP3ZvaWQgMDpzLmluY2x1ZGVzKCJCb2xkIikpKSYmKGE9ImJvbGQiKSwoZS5uYW1lLmluY2x1ZGVzKCJJdGFsaWMiKXx8ZS5uYW1lLmVuZHNXaXRoKCJJdCIpfHwobnVsbD09PShvPWUucHNOYW1lKXx8dm9pZCAwPT09bz92b2lkIDA6by5pbmNsdWRlcygiSXRhbGljIikpfHwobnVsbD09PShjPWUucHNOYW1lKXx8dm9pZCAwPT09Yz92b2lkIDA6Yy5lbmRzV2l0aCgiSXQiKSkpJiYoYSs9Iml0YWxpYyIpKSxhfHwoYT0icmVndWxhciIpLG5bYV09ZX1nZXREZWZhdWx0KCl7cmV0dXJuIHRoaXMuZGVmYXVsdEZvbnR9ZmluZChlKXtsZXQgdD0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLHI9dGhpcy5mb250cy5nZXQoZSl8fHRoaXMuY2FjaGUuZ2V0KGUpO2lmKHIpcmV0dXJuIHI7Y29uc3Qgbj0vLHwtfF98IHxib2xkaXRhbGljfGJvbGR8aXRhbGljfHJlZ3VsYXJ8aXQvZ2k7bGV0IGE9ZS5yZXBsYWNlQWxsKG4sIiIpO2lmKHI9dGhpcy5mb250cy5nZXQoYSkscilyZXR1cm4gdGhpcy5jYWNoZS5zZXQoZSxyKSxyO2E9YS50b0xvd2VyQ2FzZSgpO2NvbnN0IHM9W107Zm9yKGNvbnN0W2UsdF1vZiB0aGlzLmZvbnRzLmVudHJpZXMoKSllLnJlcGxhY2VBbGwobiwiIikudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGEpJiZzLnB1c2godCk7aWYoMD09PXMubGVuZ3RoKWZvcihjb25zdFssZV1vZiB0aGlzLmZvbnRzLmVudHJpZXMoKSl7dmFyIG87KG51bGw9PT0obz1lLnJlZ3VsYXIubmFtZSl8fHZvaWQgMD09PW8/dm9pZCAwOm8ucmVwbGFjZUFsbChuLCIiKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoYSkpJiZzLnB1c2goZSl9aWYoMD09PXMubGVuZ3RoKXthPWEucmVwbGFjZUFsbCgvcHNtdHxtdC9naSwiIik7Zm9yKGNvbnN0W2UsdF1vZiB0aGlzLmZvbnRzLmVudHJpZXMoKSllLnJlcGxhY2VBbGwobiwiIikudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGEpJiZzLnB1c2godCl9aWYoMD09PXMubGVuZ3RoKWZvcihjb25zdCBlIG9mIHRoaXMuZm9udHMudmFsdWVzKCkpe3ZhciBjOyhudWxsPT09KGM9ZS5yZWd1bGFyLm5hbWUpfHx2b2lkIDA9PT1jP3ZvaWQgMDpjLnJlcGxhY2VBbGwobiwiIikudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKGEpKSYmcy5wdXNoKGUpfXJldHVybiBzLmxlbmd0aD49MT8oMSE9PXMubGVuZ3RoJiZ0JiYoMCxpLndhcm4pKCJYRkEgLSBUb28gbWFueSBjaG9pY2VzIHRvIGd1ZXNzIHRoZSBjb3JyZWN0IGZvbnQ6ICIuY29uY2F0KGUpKSx0aGlzLmNhY2hlLnNldChlLHNbMF0pLHNbMF0pOih0JiYhdGhpcy53YXJuZWQuaGFzKGUpJiYodGhpcy53YXJuZWQuYWRkKGUpLCgwLGkud2FybikoIlhGQSAtIENhbm5vdCBmaW5kIHRoZSBmb250OiAiLmNvbmNhdChlKSkpLG51bGwpfX19LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5UZXh0TWVhc3VyZT12b2lkIDAscigxMzkpO3ZhciBuPXIoMjM4KTtjbGFzcyBhe2NvbnN0cnVjdG9yKGUsdCxyLGEpe2lmKHRoaXMubGluZUhlaWdodD1yLHRoaXMucGFyYU1hcmdpbj10fHx7dG9wOjAsYm90dG9tOjAsbGVmdDowLHJpZ2h0OjB9LCFlKXJldHVybiB2b2lkKFt0aGlzLnBkZkZvbnQsdGhpcy54ZmFGb250XT10aGlzLmRlZmF1bHRGb250KGEpKTt0aGlzLnhmYUZvbnQ9e3R5cGVmYWNlOmUudHlwZWZhY2UscG9zdHVyZTplLnBvc3R1cmUsd2VpZ2h0OmUud2VpZ2h0LHNpemU6ZS5zaXplLGxldHRlclNwYWNpbmc6ZS5sZXR0ZXJTcGFjaW5nfTtjb25zdCBpPWEuZmluZChlLnR5cGVmYWNlKTtpPyh0aGlzLnBkZkZvbnQ9KDAsbi5zZWxlY3RGb250KShlLGkpLHRoaXMucGRmRm9udHx8KFt0aGlzLnBkZkZvbnQsdGhpcy54ZmFGb250XT10aGlzLmRlZmF1bHRGb250KGEpKSk6W3RoaXMucGRmRm9udCx0aGlzLnhmYUZvbnRdPXRoaXMuZGVmYXVsdEZvbnQoYSl9ZGVmYXVsdEZvbnQoZSl7Y29uc3QgdD1lLmZpbmQoIkhlbHZldGljYSIsITEpfHxlLmZpbmQoIk15cmlhZCBQcm8iLCExKXx8ZS5maW5kKCJBcmlhbCIsITEpfHxlLmdldERlZmF1bHQoKTtpZihudWxsIT10JiZ0LnJlZ3VsYXIpe2NvbnN0IGU9dC5yZWd1bGFyO3JldHVybltlLHt0eXBlZmFjZTplLmNzc0ZvbnRJbmZvLmZvbnRGYW1pbHkscG9zdHVyZToibm9ybWFsIix3ZWlnaHQ6Im5vcm1hbCIsc2l6ZToxMCxsZXR0ZXJTcGFjaW5nOjB9XX1yZXR1cm5bbnVsbCx7dHlwZWZhY2U6IkNvdXJpZXIiLHBvc3R1cmU6Im5vcm1hbCIsd2VpZ2h0OiJub3JtYWwiLHNpemU6MTAsbGV0dGVyU3BhY2luZzowfV19fWNsYXNzIGl7Y29uc3RydWN0b3IoZSx0LHIsbil7dGhpcy5mb250RmluZGVyPW4sdGhpcy5zdGFjaz1bbmV3IGEoZSx0LHIsbildfXB1c2hEYXRhKGUsdCxyKXtjb25zdCBuPXRoaXMuc3RhY2suYXQoLTEpO2Zvcihjb25zdCB0IG9mWyJ0eXBlZmFjZSIsInBvc3R1cmUiLCJ3ZWlnaHQiLCJzaXplIiwibGV0dGVyU3BhY2luZyJdKWVbdF18fChlW3RdPW4ueGZhRm9udFt0XSk7Zm9yKGNvbnN0IGUgb2ZbInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCJdKWlzTmFOKHRbZV0pJiYodFtlXT1uLnBhcmFNYXJnaW5bZV0pO2NvbnN0IGk9bmV3IGEoZSx0LHJ8fG4ubGluZUhlaWdodCx0aGlzLmZvbnRGaW5kZXIpO2kucGRmRm9udHx8KGkucGRmRm9udD1uLnBkZkZvbnQpLHRoaXMuc3RhY2sucHVzaChpKX1wb3BGb250KCl7dGhpcy5zdGFjay5wb3AoKX10b3BGb250KCl7cmV0dXJuIHRoaXMuc3RhY2suYXQoLTEpfX10LlRleHRNZWFzdXJlPWNsYXNze2NvbnN0cnVjdG9yKGUsdCxyLG4pe3RoaXMuZ2x5cGhzPVtdLHRoaXMuZm9udFNlbGVjdG9yPW5ldyBpKGUsdCxyLG4pLHRoaXMuZXh0cmFIZWlnaHQ9MH1wdXNoRGF0YShlLHQscil7dGhpcy5mb250U2VsZWN0b3IucHVzaERhdGEoZSx0LHIpfXBvcEZvbnQoZSl7cmV0dXJuIHRoaXMuZm9udFNlbGVjdG9yLnBvcEZvbnQoKX1hZGRQYXJhKCl7Y29uc3QgZT10aGlzLmZvbnRTZWxlY3Rvci50b3BGb250KCk7dGhpcy5leHRyYUhlaWdodCs9ZS5wYXJhTWFyZ2luLnRvcCtlLnBhcmFNYXJnaW4uYm90dG9tfWFkZFN0cmluZyhlKXtpZighZSlyZXR1cm47Y29uc3QgdD10aGlzLmZvbnRTZWxlY3Rvci50b3BGb250KCkscj10LnhmYUZvbnQuc2l6ZTtpZih0LnBkZkZvbnQpe2NvbnN0IG49dC54ZmFGb250LmxldHRlclNwYWNpbmcsYT10LnBkZkZvbnQsaT1hLmxpbmVIZWlnaHR8fDEuMixzPXQubGluZUhlaWdodHx8TWF0aC5tYXgoMS4yLGkpKnIsbz1pLSh2b2lkIDA9PT1hLmxpbmVHYXA/LjI6YS5saW5lR2FwKSxjPU1hdGgubWF4KDEsbykqcixsPXIvMWUzLGg9YS5kZWZhdWx0V2lkdGh8fGEuY2hhcnNUb0dseXBocygiICIpWzBdLndpZHRoO2Zvcihjb25zdCB0IG9mIGUuc3BsaXQoL1tcdTIwMjlcbl0vKSl7Y29uc3QgZT1hLmVuY29kZVN0cmluZyh0KS5qb2luKCIiKSxyPWEuY2hhcnNUb0dseXBocyhlKTtmb3IoY29uc3QgZSBvZiByKXtjb25zdCB0PWUud2lkdGh8fGg7dGhpcy5nbHlwaHMucHVzaChbdCpsK24scyxjLGUudW5pY29kZSwhMV0pfXRoaXMuZ2x5cGhzLnB1c2goWzAsMCwwLCJcbiIsITBdKX10aGlzLmdseXBocy5wb3AoKX1lbHNle2Zvcihjb25zdCB0IG9mIGUuc3BsaXQoL1tcdTIwMjlcbl0vKSl7Zm9yKGNvbnN0IGUgb2YgdC5zcGxpdCgiIikpdGhpcy5nbHlwaHMucHVzaChbciwxLjIqcixyLGUsITFdKTt0aGlzLmdseXBocy5wdXNoKFswLDAsMCwiXG4iLCEwXSl9dGhpcy5nbHlwaHMucG9wKCl9fWNvbXB1dGUoZSl7bGV0IHQ9LTEscj0wLG49MCxhPTAsaT0wLHM9MCxvPSExLGM9ITA7Zm9yKGxldCBsPTAsaD10aGlzLmdseXBocy5sZW5ndGg7bDxoO2wrKyl7Y29uc3RbaCx1LGQsZixnXT10aGlzLmdseXBoc1tsXSxwPSIgIj09PWYsbT1jP2Q6dTtnPyhuPU1hdGgubWF4KG4saSksaT0wLGErPXMscz1tLHQ9LTEscj0wLGM9ITEpOnA/aStoPmU/KG49TWF0aC5tYXgobixpKSxpPTAsYSs9cyxzPW0sdD0tMSxyPTAsbz0hMCxjPSExKToocz1NYXRoLm1heChtLHMpLHI9aSxpKz1oLHQ9bCk6aStoPmU/KGErPXMscz1tLC0xIT09dD8obD10LG49TWF0aC5tYXgobixyKSxpPTAsdD0tMSxyPTApOihuPU1hdGgubWF4KG4saSksaT1oKSxvPSEwLGM9ITEpOihpKz1oLHM9TWF0aC5tYXgobSxzKSl9cmV0dXJuIG49TWF0aC5tYXgobixpKSxhKz1zK3RoaXMuZXh0cmFIZWlnaHQse3dpZHRoOjEuMDIqbixoZWlnaHQ6YSxpc0Jyb2tlbjpvfX19fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuWG1sT2JqZWN0PXQuWEZBT2JqZWN0QXJyYXk9dC5YRkFPYmplY3Q9dC5YRkFBdHRyaWJ1dGU9dC5TdHJpbmdPYmplY3Q9dC5PcHRpb25PYmplY3Q9dC5PcHRpb24xMD10Lk9wdGlvbjAxPXQuSW50ZWdlck9iamVjdD10LkNvbnRlbnRPYmplY3Q9dm9pZCAwLHIoMTM5KSxyKDExNikscigxMjYpLHIoMTI4KSxyKDEzMSkscigxMzMpLHIoMTM1KSxyKDEzNyk7dmFyIG49cigyMjgpLGE9cigyMzcpLGk9cigxNDQpLHM9cigxNDkpLG89cigyMzQpLGM9cigyNDEpO2NvbnN0IGw9U3ltYm9sKCksaD1TeW1ib2woKSx1PVN5bWJvbCgpLGQ9U3ltYm9sKCJfY2hpbGRyZW4iKSxmPVN5bWJvbCgpLGc9U3ltYm9sKCkscD1TeW1ib2woKSxtPVN5bWJvbCgpLGI9U3ltYm9sKCkseT1TeW1ib2woKSx3PVN5bWJvbCgpLHY9U3ltYm9sKCkseD1TeW1ib2woKSxTPVN5bWJvbCgicGFyZW50IiksQT1TeW1ib2woKSxrPVN5bWJvbCgpLEM9U3ltYm9sKCk7bGV0IE89MDtjb25zdCBGPW8uTmFtZXNwYWNlSWRzLmRhdGFzZXRzLmlkO2NsYXNzIEl7Y29uc3RydWN0b3IoZSx0KXtsZXQgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO3RoaXNbbi4kbmFtZXNwYWNlSWRdPWUsdGhpc1tuLiRub2RlTmFtZV09dCx0aGlzW3ddPXIsdGhpc1tTXT1udWxsLHRoaXNbZF09W10sdGhpc1tuLiR1aWRdPSIiLmNvbmNhdCh0KS5jb25jYXQoTysrKSx0aGlzW24uJGdsb2JhbERhdGFdPW51bGx9Z2V0IGlzWEZBT2JqZWN0KCl7cmV0dXJuITB9Z2V0IGlzWEZBT2JqZWN0QXJyYXkoKXtyZXR1cm4hMX1jcmVhdGVOb2RlcyhlKXtsZXQgdD10aGlzLHI9bnVsbDtmb3IoY29uc3R7bmFtZTphLGluZGV4Oml9b2YgZSl7Zm9yKGxldCBlPTAscz1pc0Zpbml0ZShpKT9pOjA7ZTw9cztlKyspe2NvbnN0IGU9dFtuLiRuYW1lc3BhY2VJZF09PT1GPy0xOnRbbi4kbmFtZXNwYWNlSWRdO3I9bmV3IEUoZSxhKSx0W24uJGFwcGVuZENoaWxkXShyKX10PXJ9cmV0dXJuIHJ9W24uJG9uQ2hpbGRdKGUpe2lmKCF0aGlzW3ddfHwhdGhpc1tuLiRvbkNoaWxkQ2hlY2tdKGUpKXJldHVybiExO2NvbnN0IHQ9ZVtuLiRub2RlTmFtZV0scj10aGlzW3RdO2lmKCEociBpbnN0YW5jZW9mIFQpKXJldHVybiBudWxsIT09ciYmdGhpc1tuLiRyZW1vdmVDaGlsZF0ociksdGhpc1t0XT1lLHRoaXNbbi4kYXBwZW5kQ2hpbGRdKGUpLCEwO2lmKHIucHVzaChlKSlyZXR1cm4gdGhpc1tuLiRhcHBlbmRDaGlsZF0oZSksITA7bGV0IGE9IiI7cmV0dXJuIHRoaXMuaWQ/YT0iIChpZDogIi5jb25jYXQodGhpcy5pZCwiKSIpOnRoaXMubmFtZSYmKGE9IiAobmFtZTogIi5jb25jYXQodGhpcy5uYW1lLCIgIikuY29uY2F0KHRoaXMuaC52YWx1ZSwiKSIpKSwoMCxpLndhcm4pKCdYRkEgLSBub2RlICInLmNvbmNhdCh0aGlzW24uJG5vZGVOYW1lXSwnIicpLmNvbmNhdChhLCcgaGFzIGFscmVhZHkgZW5vdWdoICInKS5jb25jYXQodCwnIiEnKSksITF9W24uJG9uQ2hpbGRDaGVja10oZSl7cmV0dXJuIHRoaXMuaGFzT3duUHJvcGVydHkoZVtuLiRub2RlTmFtZV0pJiZlW24uJG5hbWVzcGFjZUlkXT09PXRoaXNbbi4kbmFtZXNwYWNlSWRdfVtuLiRpc05zQWdub3N0aWNdKCl7cmV0dXJuITF9W24uJGFjY2VwdFdoaXRlc3BhY2VdKCl7cmV0dXJuITF9W24uJGlzQ0RBVEFYbWxdKCl7cmV0dXJuITF9W24uJGlzQmluZGFibGVdKCl7cmV0dXJuITF9W24uJHBvcFBhcmFdKCl7dGhpcy5wYXJhJiZ0aGlzW24uJGdldFRlbXBsYXRlUm9vdF0oKVtuLiRleHRyYV0ucGFyYVN0YWNrLnBvcCgpfVtuLiRwdXNoUGFyYV0oKXt0aGlzW24uJGdldFRlbXBsYXRlUm9vdF0oKVtuLiRleHRyYV0ucGFyYVN0YWNrLnB1c2godGhpcy5wYXJhKX1bbi4kc2V0SWRdKGUpe3RoaXMuaWQmJnRoaXNbbi4kbmFtZXNwYWNlSWRdPT09by5OYW1lc3BhY2VJZHMudGVtcGxhdGUuaWQmJmUuc2V0KHRoaXMuaWQsdGhpcyl9W24uJGdldFRlbXBsYXRlUm9vdF0oKXtyZXR1cm4gdGhpc1tuLiRnbG9iYWxEYXRhXS50ZW1wbGF0ZX1bbi4kaXNTcGxpdHRhYmxlXSgpe3JldHVybiExfVtuLiRpc1RoZXJlTW9yZVdpZHRoXSgpe3JldHVybiExfVtuLiRhcHBlbmRDaGlsZF0oZSl7ZVtTXT10aGlzLHRoaXNbZF0ucHVzaChlKSwhZVtuLiRnbG9iYWxEYXRhXSYmdGhpc1tuLiRnbG9iYWxEYXRhXSYmKGVbbi4kZ2xvYmFsRGF0YV09dGhpc1tuLiRnbG9iYWxEYXRhXSl9W24uJHJlbW92ZUNoaWxkXShlKXtjb25zdCB0PXRoaXNbZF0uaW5kZXhPZihlKTt0aGlzW2RdLnNwbGljZSh0LDEpfVtuLiRoYXNTZXR0YWJsZVZhbHVlXSgpe3JldHVybiB0aGlzLmhhc093blByb3BlcnR5KCJ2YWx1ZSIpfVtuLiRzZXRWYWx1ZV0oZSl7fVtuLiRvblRleHRdKGUpe31bbi4kZmluYWxpemVdKCl7fVtuLiRjbGVhbl0oZSl7ZGVsZXRlIHRoaXNbd10sdGhpc1tuLiRjbGVhbnVwXSYmKGUuY2xlYW4odGhpc1tuLiRjbGVhbnVwXSksZGVsZXRlIHRoaXNbbi4kY2xlYW51cF0pfVtuLiRpbmRleE9mXShlKXtyZXR1cm4gdGhpc1tkXS5pbmRleE9mKGUpfVtuLiRpbnNlcnRBdF0oZSx0KXt0W1NdPXRoaXMsdGhpc1tkXS5zcGxpY2UoZSwwLHQpLCF0W24uJGdsb2JhbERhdGFdJiZ0aGlzW24uJGdsb2JhbERhdGFdJiYodFtuLiRnbG9iYWxEYXRhXT10aGlzW24uJGdsb2JhbERhdGFdKX1bbi4kaXNUcmFuc3BhcmVudF0oKXtyZXR1cm4hdGhpcy5uYW1lfVtuLiRsYXN0QXR0cmlidXRlXSgpe3JldHVybiIifVtuLiR0ZXh0XSgpe3JldHVybiAwPT09dGhpc1tkXS5sZW5ndGg/dGhpc1tuLiRjb250ZW50XTp0aGlzW2RdLm1hcCgoZT0+ZVtuLiR0ZXh0XSgpKSkuam9pbigiIil9Z2V0W3VdKCl7Y29uc3QgZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcyk7aWYoIWUuX2F0dHJpYnV0ZXMpe2NvbnN0IHQ9ZS5fYXR0cmlidXRlcz1uZXcgU2V0O2Zvcihjb25zdCBlIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKXtpZihudWxsPT09dGhpc1tlXXx8dGhpc1tlXWluc3RhbmNlb2YgSXx8dGhpc1tlXWluc3RhbmNlb2YgVClicmVhazt0LmFkZChlKX19cmV0dXJuKDAsaS5zaGFkb3cpKHRoaXMsdSxlLl9hdHRyaWJ1dGVzKX1bbi4kaXNEZXNjZW5kZW50XShlKXtsZXQgdD10aGlzO2Zvcig7dDspe2lmKHQ9PT1lKXJldHVybiEwO3Q9dFtuLiRnZXRQYXJlbnRdKCl9cmV0dXJuITF9W24uJGdldFBhcmVudF0oKXtyZXR1cm4gdGhpc1tTXX1bbi4kZ2V0U3ViZm9ybVBhcmVudF0oKXtyZXR1cm4gdGhpc1tuLiRnZXRQYXJlbnRdKCl9W24uJGdldENoaWxkcmVuXSgpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO3JldHVybiBlP3RoaXNbZV06dGhpc1tkXX1bbi4kZHVtcF0oKXtjb25zdCBlPU9iamVjdC5jcmVhdGUobnVsbCk7dGhpc1tuLiRjb250ZW50XSYmKGUuJGNvbnRlbnQ9dGhpc1tuLiRjb250ZW50XSk7Zm9yKGNvbnN0IHQgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpe2NvbnN0IHI9dGhpc1t0XTtudWxsIT09ciYmKHIgaW5zdGFuY2VvZiBJP2VbdF09cltuLiRkdW1wXSgpOnIgaW5zdGFuY2VvZiBUP3IuaXNFbXB0eSgpfHwoZVt0XT1yLmR1bXAoKSk6ZVt0XT1yKX1yZXR1cm4gZX1bbi4kdG9TdHlsZV0oKXtyZXR1cm4gbnVsbH1bbi4kdG9IVE1MXSgpe3JldHVybiBhLkhUTUxSZXN1bHQuRU1QVFl9KltuLiRnZXRDb250YWluZWRDaGlsZHJlbl0oKXtmb3IoY29uc3QgZSBvZiB0aGlzW24uJGdldENoaWxkcmVuXSgpKXlpZWxkIGV9KlttXShlLHQpe2Zvcihjb25zdCByIG9mIHRoaXNbbi4kZ2V0Q29udGFpbmVkQ2hpbGRyZW5dKCkpaWYoIWV8fHQ9PT1lLmhhcyhyW24uJG5vZGVOYW1lXSkpe2NvbnN0IGU9dGhpc1tuLiRnZXRBdmFpbGFibGVTcGFjZV0oKSx0PXJbbi4kdG9IVE1MXShlKTt0LnN1Y2Nlc3N8fCh0aGlzW24uJGV4dHJhXS5mYWlsaW5nTm9kZT1yKSx5aWVsZCB0fX1bbi4kZmx1c2hIVE1MXSgpe3JldHVybiBudWxsfVtuLiRhZGRIVE1MXShlLHQpe3RoaXNbbi4kZXh0cmFdLmNoaWxkcmVuLnB1c2goZSl9W24uJGdldEF2YWlsYWJsZVNwYWNlXSgpe31bbi4kY2hpbGRyZW5Ub0hUTUxdKGUpe2xldHtmaWx0ZXI6dD1udWxsLGluY2x1ZGU6cj0hMH09ZTtpZih0aGlzW24uJGV4dHJhXS5nZW5lcmF0b3Ipe2NvbnN0IGU9dGhpc1tuLiRnZXRBdmFpbGFibGVTcGFjZV0oKSx0PXRoaXNbbi4kZXh0cmFdLmZhaWxpbmdOb2RlW24uJHRvSFRNTF0oZSk7aWYoIXQuc3VjY2VzcylyZXR1cm4gdDt0Lmh0bWwmJnRoaXNbbi4kYWRkSFRNTF0odC5odG1sLHQuYmJveCksZGVsZXRlIHRoaXNbbi4kZXh0cmFdLmZhaWxpbmdOb2RlfWVsc2UgdGhpc1tuLiRleHRyYV0uZ2VuZXJhdG9yPXRoaXNbbV0odCxyKTtmb3IoOzspe2NvbnN0IGU9dGhpc1tuLiRleHRyYV0uZ2VuZXJhdG9yLm5leHQoKTtpZihlLmRvbmUpYnJlYWs7Y29uc3QgdD1lLnZhbHVlO2lmKCF0LnN1Y2Nlc3MpcmV0dXJuIHQ7dC5odG1sJiZ0aGlzW24uJGFkZEhUTUxdKHQuaHRtbCx0LmJib3gpfXJldHVybiB0aGlzW24uJGV4dHJhXS5nZW5lcmF0b3I9bnVsbCxhLkhUTUxSZXN1bHQuRU1QVFl9W24uJHNldFNldEF0dHJpYnV0ZXNdKGUpe3RoaXNba109bmV3IFNldChPYmplY3Qua2V5cyhlKSl9W3ldKGUpe2NvbnN0IHQ9dGhpc1t1XSxyPXRoaXNba107cmV0dXJuWy4uLmVdLmZpbHRlcigoZT0+dC5oYXMoZSkmJiFyLmhhcyhlKSkpfVtuLiRyZXNvbHZlUHJvdG90eXBlc10oZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm5ldyBTZXQ7Zm9yKGNvbnN0IHIgb2YgdGhpc1tkXSlyW0FdKGUsdCl9W0FdKGUsdCl7Y29uc3Qgcj10aGlzW2JdKGUsdCk7cj90aGlzW2xdKHIsZSx0KTp0aGlzW24uJHJlc29sdmVQcm90b3R5cGVzXShlLHQpfVtiXShlLHQpe2NvbnN0e3VzZTpyLHVzZWhyZWY6YX09dGhpcztpZighciYmIWEpcmV0dXJuIG51bGw7bGV0IHM9bnVsbCxvPW51bGwsaD1udWxsLHU9cjtpZihhPyh1PWEsYS5zdGFydHNXaXRoKCIjc29tKCIpJiZhLmVuZHNXaXRoKCIpIik/bz1hLnNsaWNlKDUsLTEpOmEuc3RhcnRzV2l0aCgiLiNzb20oIikmJmEuZW5kc1dpdGgoIikiKT9vPWEuc2xpY2UoNiwtMSk6YS5zdGFydHNXaXRoKCIjIik/aD1hLnNsaWNlKDEpOmEuc3RhcnRzV2l0aCgiLiMiKSYmKGg9YS5zbGljZSgyKSkpOnIuc3RhcnRzV2l0aCgiIyIpP2g9ci5zbGljZSgxKTpvPXIsdGhpcy51c2U9dGhpcy51c2VocmVmPSIiLGg/cz1lLmdldChoKToocz0oMCxjLnNlYXJjaE5vZGUpKGUuZ2V0KG4uJHJvb3QpLHRoaXMsbywhMCwhMSkscyYmKHM9c1swXSkpLCFzKXJldHVybigwLGkud2FybikoIlhGQSAtIEludmFsaWQgcHJvdG90eXBlIHJlZmVyZW5jZTogIi5jb25jYXQodSwiLiIpKSxudWxsO2lmKHNbbi4kbm9kZU5hbWVdIT09dGhpc1tuLiRub2RlTmFtZV0pcmV0dXJuKDAsaS53YXJuKSgiWEZBIC0gSW5jb21wYXRpYmxlIHByb3RvdHlwZTogIi5jb25jYXQoc1tuLiRub2RlTmFtZV0sIiAhPT0gIikuY29uY2F0KHRoaXNbbi4kbm9kZU5hbWVdLCIuIikpLG51bGw7aWYodC5oYXMocykpcmV0dXJuKDAsaS53YXJuKSgiWEZBIC0gQ3ljbGUgZGV0ZWN0ZWQgaW4gcHJvdG90eXBlcyB1c2UuIiksbnVsbDt0LmFkZChzKTtjb25zdCBkPXNbYl0oZSx0KTtyZXR1cm4gZCYmc1tsXShkLGUsdCksc1tuLiRyZXNvbHZlUHJvdG90eXBlc10oZSx0KSx0LmRlbGV0ZShzKSxzfVtsXShlLHQscil7aWYoci5oYXMoZSkpKDAsaS53YXJuKSgiWEZBIC0gQ3ljbGUgZGV0ZWN0ZWQgaW4gcHJvdG90eXBlcyB1c2UuIik7ZWxzZXshdGhpc1tuLiRjb250ZW50XSYmZVtuLiRjb250ZW50XSYmKHRoaXNbbi4kY29udGVudF09ZVtuLiRjb250ZW50XSksbmV3IFNldChyKS5hZGQoZSk7Zm9yKGNvbnN0IHQgb2YgdGhpc1t5XShlW2tdKSl0aGlzW3RdPWVbdF0sdGhpc1trXSYmdGhpc1trXS5hZGQodCk7Zm9yKGNvbnN0IGEgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpe2lmKHRoaXNbdV0uaGFzKGEpKWNvbnRpbnVlO2NvbnN0IGk9dGhpc1thXSxzPWVbYV07aWYoaSBpbnN0YW5jZW9mIFQpe2Zvcihjb25zdCBlIG9mIGlbZF0pZVtBXSh0LHIpO2ZvcihsZXQgYT1pW2RdLmxlbmd0aCxvPXNbZF0ubGVuZ3RoO2E8bzthKyspe2NvbnN0IHM9ZVtkXVthXVtuLiRjbG9uZV0oKTtpZighaS5wdXNoKHMpKWJyZWFrO3NbU109dGhpcyx0aGlzW2RdLnB1c2gocyksc1tBXSh0LHIpfX1lbHNlIGlmKG51bGw9PT1pKXtpZihudWxsIT09cyl7Y29uc3QgZT1zW24uJGNsb25lXSgpO2VbU109dGhpcyx0aGlzW2FdPWUsdGhpc1tkXS5wdXNoKGUpLGVbQV0odCxyKX19ZWxzZSBpW24uJHJlc29sdmVQcm90b3R5cGVzXSh0LHIpLHMmJmlbbF0ocyx0LHIpfX19c3RhdGljW2ZdKGUpe3JldHVybiBBcnJheS5pc0FycmF5KGUpP2UubWFwKChlPT5JW2ZdKGUpKSk6Im9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZT9PYmplY3QuYXNzaWduKHt9LGUpOmV9W24uJGNsb25lXSgpe2NvbnN0IGU9T2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykpO2Zvcihjb25zdCB0IG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGhpcykpdHJ5e2VbdF09dGhpc1t0XX1jYXRjaChyKXsoMCxpLnNoYWRvdykoZSx0LHRoaXNbdF0pfWVbbi4kdWlkXT0iIi5jb25jYXQoZVtuLiRub2RlTmFtZV0pLmNvbmNhdChPKyspLGVbZF09W107Zm9yKGNvbnN0IHQgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpe2lmKHRoaXNbdV0uaGFzKHQpKXtlW3RdPUlbZl0odGhpc1t0XSk7Y29udGludWV9Y29uc3Qgcj10aGlzW3RdO2VbdF09ciBpbnN0YW5jZW9mIFQ/bmV3IFQoclt2XSk6bnVsbH1mb3IoY29uc3QgdCBvZiB0aGlzW2RdKXtjb25zdCByPXRbbi4kbm9kZU5hbWVdLGE9dFtuLiRjbG9uZV0oKTtlW2RdLnB1c2goYSksYVtTXT1lLG51bGw9PT1lW3JdP2Vbcl09YTplW3JdW2RdLnB1c2goYSl9cmV0dXJuIGV9W24uJGdldENoaWxkcmVuXSgpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO3JldHVybiBlP3RoaXNbZF0uZmlsdGVyKCh0PT50W24uJG5vZGVOYW1lXT09PWUpKTp0aGlzW2RdfVtuLiRnZXRDaGlsZHJlbkJ5Q2xhc3NdKGUpe3JldHVybiB0aGlzW2VdfVtuLiRnZXRDaGlsZHJlbkJ5TmFtZV0oZSx0KXtsZXQgcj0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO3JldHVybiBBcnJheS5mcm9tKHRoaXNbbi4kZ2V0Q2hpbGRyZW5CeU5hbWVJdF0oZSx0LHIpKX1bbi4kZ2V0Q2hpbGRyZW5CeU5hbWVJdF0oZSx0KXt2YXIgcj10aGlzO2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07cmV0dXJuIGZ1bmN0aW9uKigpe2lmKCJwYXJlbnQiIT09ZSl7Zm9yKGNvbnN0IGEgb2YgcltkXSlhW24uJG5vZGVOYW1lXT09PWUmJih5aWVsZCBhKSxhLm5hbWU9PT1lJiYoeWllbGQgYSksKHR8fGFbbi4kaXNUcmFuc3BhcmVudF0oKSkmJih5aWVsZCphW24uJGdldENoaWxkcmVuQnlOYW1lSXRdKGUsdCwhMSkpO2EmJnJbdV0uaGFzKGUpJiYoeWllbGQgbmV3IE0ocixlLHJbZV0pKX1lbHNlIHlpZWxkIHJbU119KCl9fXQuWEZBT2JqZWN0PUk7Y2xhc3MgVHtjb25zdHJ1Y3Rvcigpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToxLzA7dGhpc1t2XT1lLHRoaXNbZF09W119Z2V0IGlzWEZBT2JqZWN0KCl7cmV0dXJuITF9Z2V0IGlzWEZBT2JqZWN0QXJyYXkoKXtyZXR1cm4hMH1wdXNoKGUpe3JldHVybiB0aGlzW2RdLmxlbmd0aDw9dGhpc1t2XT8odGhpc1tkXS5wdXNoKGUpLCEwKTooKDAsaS53YXJuKSgnWEZBIC0gbm9kZSAiJy5jb25jYXQoZVtuLiRub2RlTmFtZV0sJyIgYWNjZXB0cyBubyBtb3JlIHRoYW4gJykuY29uY2F0KHRoaXNbdl0sIiBjaGlsZHJlbiIpKSwhMSl9aXNFbXB0eSgpe3JldHVybiAwPT09dGhpc1tkXS5sZW5ndGh9ZHVtcCgpe3JldHVybiAxPT09dGhpc1tkXS5sZW5ndGg/dGhpc1tkXVswXVtuLiRkdW1wXSgpOnRoaXNbZF0ubWFwKChlPT5lW24uJGR1bXBdKCkpKX1bbi4kY2xvbmVdKCl7Y29uc3QgZT1uZXcgVCh0aGlzW3ZdKTtyZXR1cm4gZVtkXT10aGlzW2RdLm1hcCgoZT0+ZVtuLiRjbG9uZV0oKSkpLGV9Z2V0IGNoaWxkcmVuKCl7cmV0dXJuIHRoaXNbZF19Y2xlYXIoKXt0aGlzW2RdLmxlbmd0aD0wfX10LlhGQU9iamVjdEFycmF5PVQ7Y2xhc3MgTXtjb25zdHJ1Y3RvcihlLHQscil7dGhpc1tTXT1lLHRoaXNbbi4kbm9kZU5hbWVdPXQsdGhpc1tuLiRjb250ZW50XT1yLHRoaXNbbi4kY29uc3VtZWRdPSExLHRoaXNbbi4kdWlkXT0iYXR0cmlidXRlIitPKyt9W24uJGdldFBhcmVudF0oKXtyZXR1cm4gdGhpc1tTXX1bbi4kaXNEYXRhVmFsdWVdKCl7cmV0dXJuITB9W24uJGdldERhdGFWYWx1ZV0oKXtyZXR1cm4gdGhpc1tuLiRjb250ZW50XS50cmltKCl9W24uJHNldFZhbHVlXShlKXtlPWUudmFsdWV8fCIiLHRoaXNbbi4kY29udGVudF09ZS50b1N0cmluZygpfVtuLiR0ZXh0XSgpe3JldHVybiB0aGlzW24uJGNvbnRlbnRdfVtuLiRpc0Rlc2NlbmRlbnRdKGUpe3JldHVybiB0aGlzW1NdPT09ZXx8dGhpc1tTXVtuLiRpc0Rlc2NlbmRlbnRdKGUpfX10LlhGQUF0dHJpYnV0ZT1NO2NsYXNzIEUgZXh0ZW5kcyBJe2NvbnN0cnVjdG9yKGUsdCl7bGV0IHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9O2lmKHN1cGVyKGUsdCksdGhpc1tuLiRjb250ZW50XT0iIix0aGlzW2ddPW51bGwsIiN0ZXh0IiE9PXQpe2NvbnN0IGU9bmV3IE1hcDt0aGlzW2hdPWU7Zm9yKGNvbnN0W3Qsbl1vZiBPYmplY3QuZW50cmllcyhyKSllLnNldCh0LG5ldyBNKHRoaXMsdCxuKSk7aWYoci5oYXNPd25Qcm9wZXJ0eShuLiRuc0F0dHJpYnV0ZXMpKXtjb25zdCBlPXJbbi4kbnNBdHRyaWJ1dGVzXS54ZmEuZGF0YU5vZGU7dm9pZCAwIT09ZSYmKCJkYXRhR3JvdXAiPT09ZT90aGlzW2ddPSExOiJkYXRhVmFsdWUiPT09ZSYmKHRoaXNbZ109ITApKX19dGhpc1tuLiRjb25zdW1lZF09ITF9W24uJHRvU3RyaW5nXShlKXtjb25zdCB0PXRoaXNbbi4kbm9kZU5hbWVdO2lmKCIjdGV4dCI9PT10KXJldHVybiB2b2lkIGUucHVzaCgoMCxzLmVuY29kZVRvWG1sU3RyaW5nKSh0aGlzW24uJGNvbnRlbnRdKSk7Y29uc3Qgcj0oMCxpLnV0ZjhTdHJpbmdUb1N0cmluZykodCksYT10aGlzW24uJG5hbWVzcGFjZUlkXT09PUY/InhmYToiOiIiO2UucHVzaCgiPCIuY29uY2F0KGEpLmNvbmNhdChyKSk7Zm9yKGNvbnN0W3Qscl1vZiB0aGlzW2hdLmVudHJpZXMoKSl7Y29uc3QgYT0oMCxpLnV0ZjhTdHJpbmdUb1N0cmluZykodCk7ZS5wdXNoKCIgIi5jb25jYXQoYSwnPSInKS5jb25jYXQoKDAscy5lbmNvZGVUb1htbFN0cmluZykocltuLiRjb250ZW50XSksJyInKSl9aWYobnVsbCE9PXRoaXNbZ10mJih0aGlzW2ddP2UucHVzaCgnIHhmYTpkYXRhTm9kZT0iZGF0YVZhbHVlIicpOmUucHVzaCgnIHhmYTpkYXRhTm9kZT0iZGF0YUdyb3VwIicpKSx0aGlzW24uJGNvbnRlbnRdfHwwIT09dGhpc1tkXS5sZW5ndGgpe2lmKGUucHVzaCgiPiIpLHRoaXNbbi4kY29udGVudF0pInN0cmluZyI9PXR5cGVvZiB0aGlzW24uJGNvbnRlbnRdP2UucHVzaCgoMCxzLmVuY29kZVRvWG1sU3RyaW5nKSh0aGlzW24uJGNvbnRlbnRdKSk6dGhpc1tuLiRjb250ZW50XVtuLiR0b1N0cmluZ10oZSk7ZWxzZSBmb3IoY29uc3QgdCBvZiB0aGlzW2RdKXRbbi4kdG9TdHJpbmddKGUpO2UucHVzaCgiPC8iLmNvbmNhdChhKS5jb25jYXQociwiPiIpKX1lbHNlIGUucHVzaCgiLz4iKX1bbi4kb25DaGlsZF0oZSl7aWYodGhpc1tuLiRjb250ZW50XSl7Y29uc3QgZT1uZXcgRSh0aGlzW24uJG5hbWVzcGFjZUlkXSwiI3RleHQiKTt0aGlzW24uJGFwcGVuZENoaWxkXShlKSxlW24uJGNvbnRlbnRdPXRoaXNbbi4kY29udGVudF0sdGhpc1tuLiRjb250ZW50XT0iIn1yZXR1cm4gdGhpc1tuLiRhcHBlbmRDaGlsZF0oZSksITB9W24uJG9uVGV4dF0oZSl7dGhpc1tuLiRjb250ZW50XSs9ZX1bbi4kZmluYWxpemVdKCl7aWYodGhpc1tuLiRjb250ZW50XSYmdGhpc1tkXS5sZW5ndGg+MCl7Y29uc3QgZT1uZXcgRSh0aGlzW24uJG5hbWVzcGFjZUlkXSwiI3RleHQiKTt0aGlzW24uJGFwcGVuZENoaWxkXShlKSxlW24uJGNvbnRlbnRdPXRoaXNbbi4kY29udGVudF0sZGVsZXRlIHRoaXNbbi4kY29udGVudF19fVtuLiR0b0hUTUxdKCl7cmV0dXJuIiN0ZXh0Ij09PXRoaXNbbi4kbm9kZU5hbWVdP2EuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiIjdGV4dCIsdmFsdWU6dGhpc1tuLiRjb250ZW50XX0pOmEuSFRNTFJlc3VsdC5FTVBUWX1bbi4kZ2V0Q2hpbGRyZW5dKCl7bGV0IGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGw7cmV0dXJuIGU/dGhpc1tkXS5maWx0ZXIoKHQ9PnRbbi4kbm9kZU5hbWVdPT09ZSkpOnRoaXNbZF19W24uJGdldEF0dHJpYnV0ZXNdKCl7cmV0dXJuIHRoaXNbaF19W24uJGdldENoaWxkcmVuQnlDbGFzc10oZSl7Y29uc3QgdD10aGlzW2hdLmdldChlKTtyZXR1cm4gdm9pZCAwIT09dD90OnRoaXNbbi4kZ2V0Q2hpbGRyZW5dKGUpfSpbbi4kZ2V0Q2hpbGRyZW5CeU5hbWVJdF0oZSx0KXtjb25zdCByPXRoaXNbaF0uZ2V0KGUpO3ImJih5aWVsZCByKTtmb3IoY29uc3QgciBvZiB0aGlzW2RdKXJbbi4kbm9kZU5hbWVdPT09ZSYmKHlpZWxkIHIpLHQmJih5aWVsZCpyW24uJGdldENoaWxkcmVuQnlOYW1lSXRdKGUsdCkpfSpbbi4kZ2V0QXR0cmlidXRlSXRdKGUsdCl7Y29uc3Qgcj10aGlzW2hdLmdldChlKTshcnx8dCYmcltuLiRjb25zdW1lZF18fCh5aWVsZCByKTtmb3IoY29uc3QgciBvZiB0aGlzW2RdKXlpZWxkKnJbbi4kZ2V0QXR0cmlidXRlSXRdKGUsdCl9KltuLiRnZXRSZWFsQ2hpbGRyZW5CeU5hbWVJdF0oZSx0LHIpe2Zvcihjb25zdCBhIG9mIHRoaXNbZF0pYVtuLiRub2RlTmFtZV0hPT1lfHxyJiZhW24uJGNvbnN1bWVkXXx8KHlpZWxkIGEpLHQmJih5aWVsZCphW24uJGdldFJlYWxDaGlsZHJlbkJ5TmFtZUl0XShlLHQscikpfVtuLiRpc0RhdGFWYWx1ZV0oKXtyZXR1cm4gbnVsbD09PXRoaXNbZ10/MD09PXRoaXNbZF0ubGVuZ3RofHx0aGlzW2RdWzBdW24uJG5hbWVzcGFjZUlkXT09PW8uTmFtZXNwYWNlSWRzLnhodG1sLmlkOnRoaXNbZ119W24uJGdldERhdGFWYWx1ZV0oKXtyZXR1cm4gbnVsbD09PXRoaXNbZ10/MD09PXRoaXNbZF0ubGVuZ3RoP3RoaXNbbi4kY29udGVudF0udHJpbSgpOnRoaXNbZF1bMF1bbi4kbmFtZXNwYWNlSWRdPT09by5OYW1lc3BhY2VJZHMueGh0bWwuaWQ/dGhpc1tkXVswXVtuLiR0ZXh0XSgpLnRyaW0oKTpudWxsOnRoaXNbbi4kY29udGVudF0udHJpbSgpfVtuLiRzZXRWYWx1ZV0oZSl7ZT1lLnZhbHVlfHwiIix0aGlzW24uJGNvbnRlbnRdPWUudG9TdHJpbmcoKX1bbi4kZHVtcF0oKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2NvbnN0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtlJiYodC4kbnM9dGhpc1tuLiRuYW1lc3BhY2VJZF0pLHRoaXNbbi4kY29udGVudF0mJih0LiRjb250ZW50PXRoaXNbbi4kY29udGVudF0pLHQuJG5hbWU9dGhpc1tuLiRub2RlTmFtZV0sdC5jaGlsZHJlbj1bXTtmb3IoY29uc3QgciBvZiB0aGlzW2RdKXQuY2hpbGRyZW4ucHVzaChyW24uJGR1bXBdKGUpKTt0LmF0dHJpYnV0ZXM9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IoY29uc3RbZSxyXW9mIHRoaXNbaF0pdC5hdHRyaWJ1dGVzW2VdPXJbbi4kY29udGVudF07cmV0dXJuIHR9fXQuWG1sT2JqZWN0PUU7Y2xhc3MgUCBleHRlbmRzIEl7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlLHQpLHRoaXNbbi4kY29udGVudF09IiJ9W24uJG9uVGV4dF0oZSl7dGhpc1tuLiRjb250ZW50XSs9ZX1bbi4kZmluYWxpemVdKCl7fX10LkNvbnRlbnRPYmplY3Q9UDtjbGFzcyBSIGV4dGVuZHMgUHtjb25zdHJ1Y3RvcihlLHQscil7c3VwZXIoZSx0KSx0aGlzW3hdPXJ9W24uJGZpbmFsaXplXSgpe3RoaXNbbi4kY29udGVudF09KDAsYS5nZXRLZXl3b3JkKSh7ZGF0YTp0aGlzW24uJGNvbnRlbnRdLGRlZmF1bHRWYWx1ZTp0aGlzW3hdWzBdLHZhbGlkYXRlOmU9PnRoaXNbeF0uaW5jbHVkZXMoZSl9KX1bbi4kY2xlYW5dKGUpe3N1cGVyW24uJGNsZWFuXShlKSxkZWxldGUgdGhpc1t4XX19dC5PcHRpb25PYmplY3Q9UjtjbGFzcyBOIGV4dGVuZHMgUHtbbi4kZmluYWxpemVdKCl7dGhpc1tuLiRjb250ZW50XT10aGlzW24uJGNvbnRlbnRdLnRyaW0oKX19dC5TdHJpbmdPYmplY3Q9TjtjbGFzcyBEIGV4dGVuZHMgUHtjb25zdHJ1Y3RvcihlLHQscixuKXtzdXBlcihlLHQpLHRoaXNbcF09cix0aGlzW0NdPW59W24uJGZpbmFsaXplXSgpe3RoaXNbbi4kY29udGVudF09KDAsYS5nZXRJbnRlZ2VyKSh7ZGF0YTp0aGlzW24uJGNvbnRlbnRdLGRlZmF1bHRWYWx1ZTp0aGlzW3BdLHZhbGlkYXRlOnRoaXNbQ119KX1bbi4kY2xlYW5dKGUpe3N1cGVyW24uJGNsZWFuXShlKSxkZWxldGUgdGhpc1twXSxkZWxldGUgdGhpc1tDXX19dC5JbnRlZ2VyT2JqZWN0PUQsdC5PcHRpb24wMT1jbGFzcyBleHRlbmRzIER7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlLHQsMCwoZT0+MT09PWUpKX19LHQuT3B0aW9uMTA9Y2xhc3MgZXh0ZW5kcyBEe2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSx0LDEsKGU9PjA9PT1lKSl9fX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmNyZWF0ZURhdGFOb2RlPWZ1bmN0aW9uKGUsdCxyKXtjb25zdCBpPWgocik7aWYoIWkpcmV0dXJuIG51bGw7aWYoaS5zb21lKChlPT5lLm9wZXJhdG9yPT09by5kb3REb3QpKSlyZXR1cm4gbnVsbDtjb25zdCBzPWMuZ2V0KGlbMF0ubmFtZSk7bGV0IGw9MDtzPyhlPXMoZSx0KSxsPTEpOmU9dHx8ZTtmb3IobGV0IHQ9aS5sZW5ndGg7bDx0O2wrKyl7Y29uc3R7bmFtZTp0LG9wZXJhdG9yOnIsaW5kZXg6c309aVtsXTtpZighaXNGaW5pdGUocykpcmV0dXJuIGlbbF0uaW5kZXg9MCxlLmNyZWF0ZU5vZGVzKGkuc2xpY2UobCkpO2xldCBjO3N3aXRjaChyKXtjYXNlIG8uZG90OmM9ZVtuLiRnZXRDaGlsZHJlbkJ5TmFtZV0odCwhMSk7YnJlYWs7Y2FzZSBvLmRvdERvdDpjPWVbbi4kZ2V0Q2hpbGRyZW5CeU5hbWVdKHQsITApO2JyZWFrO2Nhc2Ugby5kb3RIYXNoOmM9ZVtuLiRnZXRDaGlsZHJlbkJ5Q2xhc3NdKHQpLGM9Yy5pc1hGQU9iamVjdEFycmF5P2MuY2hpbGRyZW46W2NdfWlmKDA9PT1jLmxlbmd0aClyZXR1cm4gZS5jcmVhdGVOb2RlcyhpLnNsaWNlKGwpKTtpZighKHM8Yy5sZW5ndGgpKXJldHVybiBpW2xdLmluZGV4PXMtYy5sZW5ndGgsZS5jcmVhdGVOb2RlcyhpLnNsaWNlKGwpKTt7Y29uc3QgdD1jW3NdO2lmKCF0LmlzWEZBT2JqZWN0KXJldHVybigwLGEud2FybikoIlhGQSAtIENhbm5vdCBjcmVhdGUgYSBub2RlLiIpLG51bGw7ZT10fX1yZXR1cm4gbnVsbH0sdC5zZWFyY2hOb2RlPWZ1bmN0aW9uKGUsdCxyKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+NCYmdm9pZCAwIT09YXJndW1lbnRzWzRdKXx8YXJndW1lbnRzWzRdO2NvbnN0IGk9aChyLCEoYXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10pfHxhcmd1bWVudHNbM10pO2lmKCFpKXJldHVybiBudWxsO2NvbnN0IHM9Yy5nZXQoaVswXS5uYW1lKTtsZXQgdSxkPTA7cz8odT0hMCxlPVtzKGUsdCldLGQ9MSk6KHU9bnVsbD09PXQsZT1bdHx8ZV0pO2ZvcihsZXQgcj1pLmxlbmd0aDtkPHI7ZCsrKXtjb25zdHtuYW1lOnIsY2FjaGVOYW1lOnMsb3BlcmF0b3I6YyxpbmRleDpofT1pW2RdLGY9W107Zm9yKGNvbnN0IHQgb2YgZSl7aWYoIXQuaXNYRkFPYmplY3QpY29udGludWU7bGV0IGUsaTtpZihhJiYoaT1sLmdldCh0KSxpfHwoaT1uZXcgTWFwLGwuc2V0KHQsaSkpLGU9aS5nZXQocykpLCFlKXtzd2l0Y2goYyl7Y2FzZSBvLmRvdDplPXRbbi4kZ2V0Q2hpbGRyZW5CeU5hbWVdKHIsITEpO2JyZWFrO2Nhc2Ugby5kb3REb3Q6ZT10W24uJGdldENoaWxkcmVuQnlOYW1lXShyLCEwKTticmVhaztjYXNlIG8uZG90SGFzaDplPXRbbi4kZ2V0Q2hpbGRyZW5CeUNsYXNzXShyKSxlPWUuaXNYRkFPYmplY3RBcnJheT9lLmNoaWxkcmVuOltlXX1hJiZpLnNldChzLGUpfWUubGVuZ3RoPjAmJmYucHVzaChlKX1pZigwIT09Zi5sZW5ndGh8fHV8fDAhPT1kKWU9aXNGaW5pdGUoaCk/Zi5maWx0ZXIoKGU9Pmg8ZS5sZW5ndGgpKS5tYXAoKGU9PmVbaF0pKTpmLmZsYXQoKTtlbHNle2NvbnN0IHI9dFtuLiRnZXRQYXJlbnRdKCk7aWYoISh0PXIpKXJldHVybiBudWxsO2Q9LTEsZT1bdF19fXJldHVybiAwPT09ZS5sZW5ndGg/bnVsbDplfSxyKDEzOSk7dmFyIG49cigyMjgpLGE9cigxNDQpO2NvbnN0IGk9L15bXi5bXSsvLHM9L15bXlxdXSsvLG89e2RvdDowLGRvdERvdDoxLGRvdEhhc2g6Mixkb3RCcmFja2V0OjMsZG90UGFyZW46NH0sYz1uZXcgTWFwKFtbIiRkYXRhIiwoZSx0KT0+ZS5kYXRhc2V0cz9lLmRhdGFzZXRzLmRhdGE6ZV0sWyIkcmVjb3JkIiwoZSx0KT0+KGUuZGF0YXNldHM/ZS5kYXRhc2V0cy5kYXRhOmUpW24uJGdldENoaWxkcmVuXSgpWzBdXSxbIiR0ZW1wbGF0ZSIsKGUsdCk9PmUudGVtcGxhdGVdLFsiJGNvbm5lY3Rpb25TZXQiLChlLHQpPT5lLmNvbm5lY3Rpb25TZXRdLFsiJGZvcm0iLChlLHQpPT5lLmZvcm1dLFsiJGxheW91dCIsKGUsdCk9PmUubGF5b3V0XSxbIiRob3N0IiwoZSx0KT0+ZS5ob3N0XSxbIiRkYXRhV2luZG93IiwoZSx0KT0+ZS5kYXRhV2luZG93XSxbIiRldmVudCIsKGUsdCk9PmUuZXZlbnRdLFsiISIsKGUsdCk9PmUuZGF0YXNldHNdLFsiJHhmYSIsKGUsdCk9PmVdLFsieGZhIiwoZSx0KT0+ZV0sWyIkIiwoZSx0KT0+dF1dKSxsPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIGgoZSx0KXtsZXQgcj0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdLG49ZS5tYXRjaChpKTtpZighbilyZXR1cm4gbnVsbDtsZXRbY109bjtjb25zdCBsPVt7bmFtZTpjLGNhY2hlTmFtZToiLiIrYyxpbmRleDowLGpzOm51bGwsZm9ybUNhbGM6bnVsbCxvcGVyYXRvcjpvLmRvdH1dO2xldCBoPWMubGVuZ3RoO2Zvcig7aDxlLmxlbmd0aDspe2NvbnN0IGQ9aDtpZigiWyI9PT1lLmNoYXJBdChoKyspKXtpZihuPWUuc2xpY2UoaCkubWF0Y2gocyksIW4pcmV0dXJuKDAsYS53YXJuKSgiWEZBIC0gSW52YWxpZCBpbmRleCBpbiBTT00gZXhwcmVzc2lvbiIpLG51bGw7bC5hdCgtMSkuaW5kZXg9IioiPT09KHU9KHU9blswXSkudHJpbSgpKT8xLzA6cGFyc2VJbnQodSwxMCl8fDAsaCs9blswXS5sZW5ndGgrMTtjb250aW51ZX1sZXQgZjtzd2l0Y2goZS5jaGFyQXQoaCkpe2Nhc2UiLiI6aWYoIXQpcmV0dXJuIG51bGw7aCsrLGY9by5kb3REb3Q7YnJlYWs7Y2FzZSIjIjpoKyssZj1vLmRvdEhhc2g7YnJlYWs7Y2FzZSJbIjppZihyKXJldHVybigwLGEud2FybikoIlhGQSAtIFNPTSBleHByZXNzaW9uIGNvbnRhaW5zIGEgRm9ybUNhbGMgc3ViZXhwcmVzc2lvbiB3aGljaCBpcyBub3Qgc3VwcG9ydGVkIGZvciBub3cuIiksbnVsbDtmPW8uZG90QnJhY2tldDticmVhaztjYXNlIigiOmlmKHIpcmV0dXJuKDAsYS53YXJuKSgiWEZBIC0gU09NIGV4cHJlc3Npb24gY29udGFpbnMgYSBKYXZhU2NyaXB0IHN1YmV4cHJlc3Npb24gd2hpY2ggaXMgbm90IHN1cHBvcnRlZCBmb3Igbm93LiIpLG51bGw7Zj1vLmRvdFBhcmVuO2JyZWFrO2RlZmF1bHQ6Zj1vLmRvdH1pZihuPWUuc2xpY2UoaCkubWF0Y2goaSksIW4pYnJlYWs7W2NdPW4saCs9Yy5sZW5ndGgsbC5wdXNoKHtuYW1lOmMsY2FjaGVOYW1lOmUuc2xpY2UoZCxoKSxvcGVyYXRvcjpmLGluZGV4OjAsanM6bnVsbCxmb3JtQ2FsYzpudWxsfSl9dmFyIHU7cmV0dXJuIGx9fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuRGF0YUhhbmRsZXI9dm9pZCAwLHIoMTM5KTt2YXIgbj1yKDIyOCk7dC5EYXRhSGFuZGxlcj1jbGFzc3tjb25zdHJ1Y3RvcihlLHQpe3RoaXMuZGF0YT10LHRoaXMuZGF0YXNldD1lLmRhdGFzZXRzfHxudWxsfXNlcmlhbGl6ZShlKXtjb25zdCB0PVtbLTEsdGhpcy5kYXRhW24uJGdldENoaWxkcmVuXSgpXV07Zm9yKDt0Lmxlbmd0aD4wOyl7Y29uc3Qgcj10LmF0KC0xKSxbYSxpXT1yO2lmKGErMT09PWkubGVuZ3RoKXt0LnBvcCgpO2NvbnRpbnVlfWNvbnN0IHM9aVsrK3JbMF1dLG89ZS5nZXQoc1tuLiR1aWRdKTtpZihvKXNbbi4kc2V0VmFsdWVdKG8pO2Vsc2V7Y29uc3QgdD1zW24uJGdldEF0dHJpYnV0ZXNdKCk7Zm9yKGNvbnN0IHIgb2YgdC52YWx1ZXMoKSl7Y29uc3QgdD1lLmdldChyW24uJHVpZF0pO2lmKHQpe3Jbbi4kc2V0VmFsdWVdKHQpO2JyZWFrfX19Y29uc3QgYz1zW24uJGdldENoaWxkcmVuXSgpO2MubGVuZ3RoPjAmJnQucHVzaChbLTEsY10pfWNvbnN0IHI9Wyc8eGZhOmRhdGFzZXRzIHhtbG5zOnhmYT0iaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZmEtZGF0YS8xLjAvIj4nXTtpZih0aGlzLmRhdGFzZXQpZm9yKGNvbnN0IGUgb2YgdGhpcy5kYXRhc2V0W24uJGdldENoaWxkcmVuXSgpKSJkYXRhIiE9PWVbbi4kbm9kZU5hbWVdJiZlW24uJHRvU3RyaW5nXShyKTtyZXR1cm4gdGhpcy5kYXRhW24uJHRvU3RyaW5nXShyKSxyLnB1c2goIjwveGZhOmRhdGFzZXRzPiIpLHIuam9pbigiIil9fX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlhGQVBhcnNlcj12b2lkIDAscigxMTYpLHIoMTI2KSxyKDEyOCkscigxMzEpLHIoMTMzKSxyKDEzNSkscigxMzcpLHIoMTM5KTt2YXIgbj1yKDIyOCksYT1yKDIxNyksaT1yKDI0NCkscz1yKDE0NCk7Y2xhc3MgbyBleHRlbmRzIGEuWE1MUGFyc2VyQmFzZXtjb25zdHJ1Y3Rvcigpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsLHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtzdXBlcigpLHRoaXMuX2J1aWxkZXI9bmV3IGkuQnVpbGRlcihlKSx0aGlzLl9zdGFjaz1bXSx0aGlzLl9nbG9iYWxEYXRhPXt1c2VkVHlwZWZhY2VzOm5ldyBTZXR9LHRoaXMuX2lkcz1uZXcgTWFwLHRoaXMuX2N1cnJlbnQ9dGhpcy5fYnVpbGRlci5idWlsZFJvb3QodGhpcy5faWRzKSx0aGlzLl9lcnJvckNvZGU9YS5YTUxQYXJzZXJFcnJvckNvZGUuTm9FcnJvcix0aGlzLl93aGl0ZVJlZ2V4PS9eXHMrJC8sdGhpcy5fbmJzcHM9L1x4YTArL2csdGhpcy5fcmljaFRleHQ9dH1wYXJzZShlKXtpZih0aGlzLnBhcnNlWG1sKGUpLHRoaXMuX2Vycm9yQ29kZT09PWEuWE1MUGFyc2VyRXJyb3JDb2RlLk5vRXJyb3IpcmV0dXJuIHRoaXMuX2N1cnJlbnRbbi4kZmluYWxpemVdKCksdGhpcy5fY3VycmVudC5lbGVtZW50fW9uVGV4dChlKXtlPWUucmVwbGFjZSh0aGlzLl9uYnNwcywoZT0+ZS5zbGljZSgxKSsiICIpKSx0aGlzLl9yaWNoVGV4dHx8dGhpcy5fY3VycmVudFtuLiRhY2NlcHRXaGl0ZXNwYWNlXSgpP3RoaXMuX2N1cnJlbnRbbi4kb25UZXh0XShlLHRoaXMuX3JpY2hUZXh0KTp0aGlzLl93aGl0ZVJlZ2V4LnRlc3QoZSl8fHRoaXMuX2N1cnJlbnRbbi4kb25UZXh0XShlLnRyaW0oKSl9b25DZGF0YShlKXt0aGlzLl9jdXJyZW50W24uJG9uVGV4dF0oZSl9X21rQXR0cmlidXRlcyhlLHQpe2xldCByPW51bGwsYT1udWxsO2NvbnN0IGk9T2JqZWN0LmNyZWF0ZSh7fSk7Zm9yKGNvbnN0e25hbWU6Yyx2YWx1ZTpsfW9mIGUpaWYoInhtbG5zIj09PWMpcj8oMCxzLndhcm4pKCJYRkEgLSBtdWx0aXBsZSBuYW1lc3BhY2UgZGVmaW5pdGlvbiBpbiA8Ii5jb25jYXQodCwiPiIpKTpyPWw7ZWxzZSBpZihjLnN0YXJ0c1dpdGgoInhtbG5zOiIpKXtjb25zdCBlPWMuc3Vic3RyaW5nKDYpO2F8fChhPVtdKSxhLnB1c2goe3ByZWZpeDplLHZhbHVlOmx9KX1lbHNle2NvbnN0IGU9Yy5pbmRleE9mKCI6Iik7aWYoLTE9PT1lKWlbY109bDtlbHNle3ZhciBvO2xldCB0PWlbbi4kbnNBdHRyaWJ1dGVzXTt0fHwodD1pW24uJG5zQXR0cmlidXRlc109T2JqZWN0LmNyZWF0ZShudWxsKSk7Y29uc3RbcixhXT1bYy5zbGljZSgwLGUpLGMuc2xpY2UoZSsxKV07KChvPXQpW3JdfHwob1tyXT1PYmplY3QuY3JlYXRlKG51bGwpKSlbYV09bH19cmV0dXJuW3IsYSxpXX1fZ2V0TmFtZUFuZFByZWZpeChlLHQpe2NvbnN0IHI9ZS5pbmRleE9mKCI6Iik7cmV0dXJuLTE9PT1yP1tlLG51bGxdOltlLnN1YnN0cmluZyhyKzEpLHQ/IiI6ZS5zdWJzdHJpbmcoMCxyKV19b25CZWdpbkVsZW1lbnQoZSx0LHIpe2NvbnN0W2EsaSxzXT10aGlzLl9ta0F0dHJpYnV0ZXModCxlKSxbbyxjXT10aGlzLl9nZXROYW1lQW5kUHJlZml4KGUsdGhpcy5fYnVpbGRlci5pc05zQWdub3N0aWMoKSksbD10aGlzLl9idWlsZGVyLmJ1aWxkKHtuc1ByZWZpeDpjLG5hbWU6byxhdHRyaWJ1dGVzOnMsbmFtZXNwYWNlOmEscHJlZml4ZXM6aX0pO2xbbi4kZ2xvYmFsRGF0YV09dGhpcy5fZ2xvYmFsRGF0YSxyPyhsW24uJGZpbmFsaXplXSgpLHRoaXMuX2N1cnJlbnRbbi4kb25DaGlsZF0obCkmJmxbbi4kc2V0SWRdKHRoaXMuX2lkcyksbFtuLiRjbGVhbl0odGhpcy5fYnVpbGRlcikpOih0aGlzLl9zdGFjay5wdXNoKHRoaXMuX2N1cnJlbnQpLHRoaXMuX2N1cnJlbnQ9bCl9b25FbmRFbGVtZW50KGUpe2NvbnN0IHQ9dGhpcy5fY3VycmVudDtpZih0W24uJGlzQ0RBVEFYbWxdKCkmJiJzdHJpbmciPT10eXBlb2YgdFtuLiRjb250ZW50XSl7Y29uc3QgZT1uZXcgbztlLl9nbG9iYWxEYXRhPXRoaXMuX2dsb2JhbERhdGE7Y29uc3Qgcj1lLnBhcnNlKHRbbi4kY29udGVudF0pO3Rbbi4kY29udGVudF09bnVsbCx0W24uJG9uQ2hpbGRdKHIpfXRbbi4kZmluYWxpemVdKCksdGhpcy5fY3VycmVudD10aGlzLl9zdGFjay5wb3AoKSx0aGlzLl9jdXJyZW50W24uJG9uQ2hpbGRdKHQpJiZ0W24uJHNldElkXSh0aGlzLl9pZHMpLHRbbi4kY2xlYW5dKHRoaXMuX2J1aWxkZXIpfW9uRXJyb3IoZSl7dGhpcy5fZXJyb3JDb2RlPWV9fXQuWEZBUGFyc2VyPW99LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5CdWlsZGVyPXZvaWQgMCxyKDEzOSk7dmFyIG49cigyMzQpLGE9cigyMjgpLGk9cigyNDUpLHM9cigyMzApLG89cigyNTQpLGM9cigxNDQpLGw9cigyNDApO2NsYXNzIGggZXh0ZW5kcyBsLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcigtMSwicm9vdCIsT2JqZWN0LmNyZWF0ZShudWxsKSksdGhpcy5lbGVtZW50PW51bGwsdGhpc1thLiRpZHNdPWV9W2EuJG9uQ2hpbGRdKGUpe3JldHVybiB0aGlzLmVsZW1lbnQ9ZSwhMH1bYS4kZmluYWxpemVdKCl7c3VwZXJbYS4kZmluYWxpemVdKCksdGhpcy5lbGVtZW50LnRlbXBsYXRlIGluc3RhbmNlb2Ygcy5UZW1wbGF0ZSYmKHRoaXNbYS4kaWRzXS5zZXQoYS4kcm9vdCx0aGlzLmVsZW1lbnQpLHRoaXMuZWxlbWVudC50ZW1wbGF0ZVthLiRyZXNvbHZlUHJvdG90eXBlc10odGhpc1thLiRpZHNdKSx0aGlzLmVsZW1lbnQudGVtcGxhdGVbYS4kaWRzXT10aGlzW2EuJGlkc10pfX1jbGFzcyB1IGV4dGVuZHMgbC5YRkFPYmplY3R7Y29uc3RydWN0b3IoKXtzdXBlcigtMSwiIixPYmplY3QuY3JlYXRlKG51bGwpKX1bYS4kb25DaGlsZF0oZSl7cmV0dXJuITF9fXQuQnVpbGRlcj1jbGFzc3tjb25zdHJ1Y3Rvcigpe2xldCBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO3RoaXMuX25hbWVzcGFjZVN0YWNrPVtdLHRoaXMuX25zQWdub3N0aWNMZXZlbD0wLHRoaXMuX25hbWVzcGFjZVByZWZpeGVzPW5ldyBNYXAsdGhpcy5fbmFtZXNwYWNlcz1uZXcgTWFwLHRoaXMuX25leHROc0lkPU1hdGgubWF4KC4uLk9iamVjdC52YWx1ZXMobi5OYW1lc3BhY2VJZHMpLm1hcCgoZT0+e2xldHtpZDp0fT1lO3JldHVybiB0fSkpKSx0aGlzLl9jdXJyZW50TmFtZXNwYWNlPWV8fG5ldyBvLlVua25vd25OYW1lc3BhY2UoKyt0aGlzLl9uZXh0TnNJZCl9YnVpbGRSb290KGUpe3JldHVybiBuZXcgaChlKX1idWlsZChlKXtsZXR7bnNQcmVmaXg6dCxuYW1lOnIsYXR0cmlidXRlczpzLG5hbWVzcGFjZTpvLHByZWZpeGVzOmN9PWU7Y29uc3QgbD1udWxsIT09bztpZihsJiYodGhpcy5fbmFtZXNwYWNlU3RhY2sucHVzaCh0aGlzLl9jdXJyZW50TmFtZXNwYWNlKSx0aGlzLl9jdXJyZW50TmFtZXNwYWNlPXRoaXMuX3NlYXJjaE5hbWVzcGFjZShvKSksYyYmdGhpcy5fYWRkTmFtZXNwYWNlUHJlZml4KGMpLHMuaGFzT3duUHJvcGVydHkoYS4kbnNBdHRyaWJ1dGVzKSl7Y29uc3QgZT1pLk5hbWVzcGFjZVNldFVwLmRhdGFzZXRzLHQ9c1thLiRuc0F0dHJpYnV0ZXNdO2xldCByPW51bGw7Zm9yKGNvbnN0W24sYV1vZiBPYmplY3QuZW50cmllcyh0KSlpZih0aGlzLl9nZXROYW1lc3BhY2VUb1VzZShuKT09PWUpe3I9e3hmYTphfTticmVha31yP3NbYS4kbnNBdHRyaWJ1dGVzXT1yOmRlbGV0ZSBzW2EuJG5zQXR0cmlidXRlc119Y29uc3QgaD10aGlzLl9nZXROYW1lc3BhY2VUb1VzZSh0KSxkPShudWxsPT1oP3ZvaWQgMDpoW24uJGJ1aWxkWEZBT2JqZWN0XShyLHMpKXx8bmV3IHU7cmV0dXJuIGRbYS4kaXNOc0Fnbm9zdGljXSgpJiZ0aGlzLl9uc0Fnbm9zdGljTGV2ZWwrKywobHx8Y3x8ZFthLiRpc05zQWdub3N0aWNdKCkpJiYoZFthLiRjbGVhbnVwXT17aGFzTmFtZXNwYWNlOmwscHJlZml4ZXM6Yyxuc0Fnbm9zdGljOmRbYS4kaXNOc0Fnbm9zdGljXSgpfSksZH1pc05zQWdub3N0aWMoKXtyZXR1cm4gdGhpcy5fbnNBZ25vc3RpY0xldmVsPjB9X3NlYXJjaE5hbWVzcGFjZShlKXtsZXQgdD10aGlzLl9uYW1lc3BhY2VzLmdldChlKTtpZih0KXJldHVybiB0O2Zvcihjb25zdFtyLHtjaGVjazphfV1vZiBPYmplY3QuZW50cmllcyhuLk5hbWVzcGFjZUlkcykpaWYoYShlKSl7aWYodD1pLk5hbWVzcGFjZVNldFVwW3JdLHQpcmV0dXJuIHRoaXMuX25hbWVzcGFjZXMuc2V0KGUsdCksdDticmVha31yZXR1cm4gdD1uZXcgby5Vbmtub3duTmFtZXNwYWNlKCsrdGhpcy5fbmV4dE5zSWQpLHRoaXMuX25hbWVzcGFjZXMuc2V0KGUsdCksdH1fYWRkTmFtZXNwYWNlUHJlZml4KGUpe2Zvcihjb25zdHtwcmVmaXg6dCx2YWx1ZTpyfW9mIGUpe2NvbnN0IGU9dGhpcy5fc2VhcmNoTmFtZXNwYWNlKHIpO2xldCBuPXRoaXMuX25hbWVzcGFjZVByZWZpeGVzLmdldCh0KTtufHwobj1bXSx0aGlzLl9uYW1lc3BhY2VQcmVmaXhlcy5zZXQodCxuKSksbi5wdXNoKGUpfX1fZ2V0TmFtZXNwYWNlVG9Vc2UoZSl7aWYoIWUpcmV0dXJuIHRoaXMuX2N1cnJlbnROYW1lc3BhY2U7Y29uc3QgdD10aGlzLl9uYW1lc3BhY2VQcmVmaXhlcy5nZXQoZSk7cmV0dXJuKG51bGw9PXQ/dm9pZCAwOnQubGVuZ3RoKT4wP3QuYXQoLTEpOigoMCxjLndhcm4pKCJVbmtub3duIG5hbWVzcGFjZSBwcmVmaXg6ICIuY29uY2F0KGUsIi4iKSksbnVsbCl9Y2xlYW4oZSl7Y29uc3R7aGFzTmFtZXNwYWNlOnQscHJlZml4ZXM6cixuc0Fnbm9zdGljOm59PWU7dCYmKHRoaXMuX2N1cnJlbnROYW1lc3BhY2U9dGhpcy5fbmFtZXNwYWNlU3RhY2sucG9wKCkpLHImJnIuZm9yRWFjaCgoZT0+e2xldHtwcmVmaXg6dH09ZTt0aGlzLl9uYW1lc3BhY2VQcmVmaXhlcy5nZXQodCkucG9wKCl9KSksbiYmdGhpcy5fbnNBZ25vc3RpY0xldmVsLS19fX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk5hbWVzcGFjZVNldFVwPXZvaWQgMDt2YXIgbj1yKDI0NiksYT1yKDI0NyksaT1yKDI0OCkscz1yKDI0OSksbz1yKDI1MCksYz1yKDI1MSksbD1yKDIzMCksaD1yKDI1MiksdT1yKDI1Myk7Y29uc3QgZD17Y29uZmlnOm4uQ29uZmlnTmFtZXNwYWNlLGNvbm5lY3Rpb246YS5Db25uZWN0aW9uU2V0TmFtZXNwYWNlLGRhdGFzZXRzOmkuRGF0YXNldHNOYW1lc3BhY2UsbG9jYWxlU2V0OnMuTG9jYWxlU2V0TmFtZXNwYWNlLHNpZ25hdHVyZTpvLlNpZ25hdHVyZU5hbWVzcGFjZSxzdHlsZXNoZWV0OmMuU3R5bGVzaGVldE5hbWVzcGFjZSx0ZW1wbGF0ZTpsLlRlbXBsYXRlTmFtZXNwYWNlLHhkcDpoLlhkcE5hbWVzcGFjZSx4aHRtbDp1LlhodG1sTmFtZXNwYWNlfTt0Lk5hbWVzcGFjZVNldFVwPWR9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Db25maWdOYW1lc3BhY2U9dm9pZCAwLHIoMTM5KTt2YXIgbj1yKDIzNCksYT1yKDIyOCksaT1yKDI0MCkscz1yKDIzNyksbz1yKDE0NCk7Y29uc3QgYz1uLk5hbWVzcGFjZUlkcy5jb25maWcuaWQ7Y2xhc3MgbCBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImFjcm9iYXQiLCEwKSx0aGlzLmFjcm9iYXQ3PW51bGwsdGhpcy5hdXRvU2F2ZT1udWxsLHRoaXMuY29tbW9uPW51bGwsdGhpcy52YWxpZGF0ZT1udWxsLHRoaXMudmFsaWRhdGVBcHByb3ZhbFNpZ25hdHVyZXM9bnVsbCx0aGlzLnN1Ym1pdFVybD1uZXcgaS5YRkFPYmplY3RBcnJheX19Y2xhc3MgaCBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImFjcm9iYXQ3IiwhMCksdGhpcy5keW5hbWljUmVuZGVyPW51bGx9fWNsYXNzIHUgZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJBREJFX0pTQ29uc29sZSIsWyJkZWxlZ2F0ZSIsIkVuYWJsZSIsIkRpc2FibGUiXSl9fWNsYXNzIGQgZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJBREJFX0pTRGVidWdnZXIiLFsiZGVsZWdhdGUiLCJFbmFibGUiLCJEaXNhYmxlIl0pfX1jbGFzcyBmIGV4dGVuZHMgaS5PcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJhZGRTaWxlbnRQcmludCIpfX1jbGFzcyBnIGV4dGVuZHMgaS5PcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJhZGRWaWV3ZXJQcmVmZXJlbmNlcyIpfX1jbGFzcyBwIGV4dGVuZHMgaS5PcHRpb24xMHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJhZGp1c3REYXRhIil9fWNsYXNzIG0gZXh0ZW5kcyBpLkludGVnZXJPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiYWRvYmVFeHRlbnNpb25MZXZlbCIsMCwoZT0+ZT49MSYmZTw9OCkpfX1jbGFzcyBiIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiYWdlbnQiLCEwKSx0aGlzLm5hbWU9ZS5uYW1lP2UubmFtZS50cmltKCk6IiIsdGhpcy5jb21tb249bmV3IGkuWEZBT2JqZWN0QXJyYXl9fWNsYXNzIHkgZXh0ZW5kcyBpLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiYWx3YXlzRW1iZWQiKX19Y2xhc3MgdyBleHRlbmRzIGkuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImFtZCIpfX1jbGFzcyB2IGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiYXJlYSIpLHRoaXMubGV2ZWw9KDAscy5nZXRJbnRlZ2VyKSh7ZGF0YTplLmxldmVsLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PmU+PTEmJmU8PTN9KSx0aGlzLm5hbWU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUubmFtZSxbIiIsImJhcmNvZGUiLCJjb3JlaW5pdCIsImRldmljZURyaXZlciIsImZvbnQiLCJnZW5lcmFsIiwibGF5b3V0IiwibWVyZ2UiLCJzY3JpcHQiLCJzaWduYXR1cmUiLCJzb3VyY2VTZXQiLCJ0ZW1wbGF0ZUNhY2hlIl0pfX1jbGFzcyB4IGV4dGVuZHMgaS5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiYXR0cmlidXRlcyIsWyJwcmVzZXJ2ZSIsImRlbGVnYXRlIiwiaWdub3JlIl0pfX1jbGFzcyBTIGV4dGVuZHMgaS5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiYXV0b1NhdmUiLFsiZGlzYWJsZWQiLCJlbmFibGVkIl0pfX1jbGFzcyBBIGV4dGVuZHMgaS5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiYmFzZSIpfX1jbGFzcyBrIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiYmF0Y2hPdXRwdXQiKSx0aGlzLmZvcm1hdD0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5mb3JtYXQsWyJub25lIiwiY29uY2F0IiwiemlwIiwiemlwQ29tcHJlc3MiXSl9fWNsYXNzIEMgZXh0ZW5kcyBpLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiYmVoYXZpb3JPdmVycmlkZSIpfVthLiRmaW5hbGl6ZV0oKXt0aGlzW2EuJGNvbnRlbnRdPW5ldyBNYXAodGhpc1thLiRjb250ZW50XS50cmltKCkuc3BsaXQoL1xzKy8pLmZpbHRlcigoZT0+ZS5pbmNsdWRlcygiOiIpKSkubWFwKChlPT5lLnNwbGl0KCI6IiwyKSkpKX19Y2xhc3MgTyBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImNhY2hlIiwhMCksdGhpcy50ZW1wbGF0ZUNhY2hlPW51bGx9fWNsYXNzIEYgZXh0ZW5kcyBpLk9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImNoYW5nZSIpfX1jbGFzcyBJIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiY29tbW9uIiwhMCksdGhpcy5kYXRhPW51bGwsdGhpcy5sb2NhbGU9bnVsbCx0aGlzLmxvY2FsZVNldD1udWxsLHRoaXMubWVzc2FnaW5nPW51bGwsdGhpcy5zdXBwcmVzc0Jhbm5lcj1udWxsLHRoaXMudGVtcGxhdGU9bnVsbCx0aGlzLnZhbGlkYXRpb25NZXNzYWdpbmc9bnVsbCx0aGlzLnZlcnNpb25Db250cm9sPW51bGwsdGhpcy5sb2c9bmV3IGkuWEZBT2JqZWN0QXJyYXl9fWNsYXNzIFQgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJjb21wcmVzcyIpLHRoaXMuc2NvcGU9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuc2NvcGUsWyJpbWFnZU9ubHkiLCJkb2N1bWVudCJdKX19Y2xhc3MgTSBleHRlbmRzIGkuT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiY29tcHJlc3NMb2dpY2FsU3RydWN0dXJlIil9fWNsYXNzIEUgZXh0ZW5kcyBpLk9wdGlvbjEwe2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImNvbXByZXNzT2JqZWN0U3RyZWFtIil9fWNsYXNzIFAgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJjb21wcmVzc2lvbiIsITApLHRoaXMuY29tcHJlc3NMb2dpY2FsU3RydWN0dXJlPW51bGwsdGhpcy5jb21wcmVzc09iamVjdFN0cmVhbT1udWxsLHRoaXMubGV2ZWw9bnVsbCx0aGlzLnR5cGU9bnVsbH19Y2xhc3MgUiBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImNvbmZpZyIsITApLHRoaXMuYWNyb2JhdD1udWxsLHRoaXMucHJlc2VudD1udWxsLHRoaXMudHJhY2U9bnVsbCx0aGlzLmFnZW50PW5ldyBpLlhGQU9iamVjdEFycmF5fX1jbGFzcyBOIGV4dGVuZHMgaS5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiY29uZm9ybWFuY2UiLFsiQSIsIkIiXSl9fWNsYXNzIEQgZXh0ZW5kcyBpLk9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImNvbnRlbnRDb3B5Iil9fWNsYXNzIEIgZXh0ZW5kcyBpLkludGVnZXJPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiY29waWVzIiwxLChlPT5lPj0xKSl9fWNsYXNzIEwgZXh0ZW5kcyBpLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJjcmVhdG9yIil9fWNsYXNzIF8gZXh0ZW5kcyBpLkludGVnZXJPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiY3VycmVudFBhZ2UiLDAsKGU9PmU+PTApKX19Y2xhc3MgaiBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImRhdGEiLCEwKSx0aGlzLmFkanVzdERhdGE9bnVsbCx0aGlzLmF0dHJpYnV0ZXM9bnVsbCx0aGlzLmluY3JlbWVudGFsTG9hZD1udWxsLHRoaXMub3V0cHV0WFNMPW51bGwsdGhpcy5yYW5nZT1udWxsLHRoaXMucmVjb3JkPW51bGwsdGhpcy5zdGFydE5vZGU9bnVsbCx0aGlzLnVyaT1udWxsLHRoaXMud2luZG93PW51bGwsdGhpcy54c2w9bnVsbCx0aGlzLmV4Y2x1ZGVOUz1uZXcgaS5YRkFPYmplY3RBcnJheSx0aGlzLnRyYW5zZm9ybT1uZXcgaS5YRkFPYmplY3RBcnJheX19Y2xhc3MgVSBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImRlYnVnIiwhMCksdGhpcy51cmk9bnVsbH19Y2xhc3MgJCBleHRlbmRzIGkuQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJkZWZhdWx0VHlwZWZhY2UiKSx0aGlzLndyaXRpbmdTY3JpcHQ9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUud3JpdGluZ1NjcmlwdCxbIioiLCJBcmFiaWMiLCJDeXJpbGxpYyIsIkVhc3RFdXJvcGVhblJvbWFuIiwiR3JlZWsiLCJIZWJyZXciLCJKYXBhbmVzZSIsIktvcmVhbiIsIlJvbWFuIiwiU2ltcGxpZmllZENoaW5lc2UiLCJUaGFpIiwiVHJhZGl0aW9uYWxDaGluZXNlIiwiVmlldG5hbWVzZSJdKX19Y2xhc3MgWCBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImRlc3RpbmF0aW9uIixbInBkZiIsInBjbCIsInBzIiwid2ViQ2xpZW50IiwienBsIl0pfX1jbGFzcyBIIGV4dGVuZHMgaS5PcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJkb2N1bWVudEFzc2VtYmx5Iil9fWNsYXNzIHEgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJkcml2ZXIiLCEwKSx0aGlzLm5hbWU9ZS5uYW1lP2UubmFtZS50cmltKCk6IiIsdGhpcy5mb250SW5mbz1udWxsLHRoaXMueGRjPW51bGx9fWNsYXNzIHogZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJkdXBsZXhPcHRpb24iLFsic2ltcGxleCIsImR1cGxleEZsaXBMb25nRWRnZSIsImR1cGxleEZsaXBTaG9ydEVkZ2UiXSl9fWNsYXNzIEcgZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJkeW5hbWljUmVuZGVyIixbImZvcmJpZGRlbiIsInJlcXVpcmVkIl0pfX1jbGFzcyBXIGV4dGVuZHMgaS5PcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJlbWJlZCIpfX1jbGFzcyBWIGV4dGVuZHMgaS5PcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJlbmNyeXB0Iil9fWNsYXNzIEsgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJlbmNyeXB0aW9uIiwhMCksdGhpcy5lbmNyeXB0PW51bGwsdGhpcy5lbmNyeXB0aW9uTGV2ZWw9bnVsbCx0aGlzLnBlcm1pc3Npb25zPW51bGx9fWNsYXNzIFkgZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJlbmNyeXB0aW9uTGV2ZWwiLFsiNDBiaXQiLCIxMjhiaXQiXSl9fWNsYXNzIEogZXh0ZW5kcyBpLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJlbmZvcmNlIil9fWNsYXNzIFogZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJlcXVhdGUiKSx0aGlzLmZvcmNlPSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS5mb3JjZSxkZWZhdWx0VmFsdWU6MSx2YWxpZGF0ZTplPT4wPT09ZX0pLHRoaXMuZnJvbT1lLmZyb218fCIiLHRoaXMudG89ZS50b3x8IiJ9fWNsYXNzIFEgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJlcXVhdGVSYW5nZSIpLHRoaXMuZnJvbT1lLmZyb218fCIiLHRoaXMudG89ZS50b3x8IiIsdGhpcy5fdW5pY29kZVJhbmdlPWUudW5pY29kZVJhbmdlfHwiIn1nZXQgdW5pY29kZVJhbmdlKCl7Y29uc3QgZT1bXSx0PS9VXCsoWzAtOWEtZkEtRl0rKS8scj10aGlzLl91bmljb2RlUmFuZ2U7Zm9yKGxldCBuIG9mIHIuc3BsaXQoIiwiKS5tYXAoKGU9PmUudHJpbSgpKSkuZmlsdGVyKChlPT4hIWUpKSluPW4uc3BsaXQoIi0iLDIpLm1hcCgoZT0+e2NvbnN0IHI9ZS5tYXRjaCh0KTtyZXR1cm4gcj9wYXJzZUludChyWzFdLDE2KTowfSkpLDE9PT1uLmxlbmd0aCYmbi5wdXNoKG5bMF0pLGUucHVzaChuKTtyZXR1cm4oMCxvLnNoYWRvdykodGhpcywidW5pY29kZVJhbmdlIixlKX19Y2xhc3MgZWUgZXh0ZW5kcyBpLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiZXhjbHVkZSIpfVthLiRmaW5hbGl6ZV0oKXt0aGlzW2EuJGNvbnRlbnRdPXRoaXNbYS4kY29udGVudF0udHJpbSgpLnNwbGl0KC9ccysvKS5maWx0ZXIoKGU9PmUmJlsiY2FsY3VsYXRlIiwiY2xvc2UiLCJlbnRlciIsImV4aXQiLCJpbml0aWFsaXplIiwicmVhZHkiLCJ2YWxpZGF0ZSJdLmluY2x1ZGVzKGUpKSl9fWNsYXNzIHRlIGV4dGVuZHMgaS5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiZXhjbHVkZU5TIil9fWNsYXNzIHJlIGV4dGVuZHMgaS5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiZmxpcExhYmVsIixbInVzZVByaW50ZXJTZXR0aW5nIiwib24iLCJvZmYiXSl9fWNsYXNzIG5lIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiZm9udEluZm8iLCEwKSx0aGlzLmVtYmVkPW51bGwsdGhpcy5tYXA9bnVsbCx0aGlzLnN1YnNldEJlbG93PW51bGwsdGhpcy5hbHdheXNFbWJlZD1uZXcgaS5YRkFPYmplY3RBcnJheSx0aGlzLmRlZmF1bHRUeXBlZmFjZT1uZXcgaS5YRkFPYmplY3RBcnJheSx0aGlzLm5ldmVyRW1iZWQ9bmV3IGkuWEZBT2JqZWN0QXJyYXl9fWNsYXNzIGFlIGV4dGVuZHMgaS5PcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJmb3JtRmllbGRGaWxsaW5nIil9fWNsYXNzIGllIGV4dGVuZHMgaS5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywiZ3JvdXBQYXJlbnQiKX19Y2xhc3Mgc2UgZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJpZkVtcHR5IixbImRhdGFWYWx1ZSIsImRhdGFHcm91cCIsImlnbm9yZSIsInJlbW92ZSJdKX19Y2xhc3Mgb2UgZXh0ZW5kcyBpLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJpbmNsdWRlWERQQ29udGVudCIpfX1jbGFzcyBjZSBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImluY3JlbWVudGFsTG9hZCIsWyJub25lIiwiZm9yd2FyZE9ubHkiXSl9fWNsYXNzIGxlIGV4dGVuZHMgaS5PcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJpbmNyZW1lbnRhbE1lcmdlIil9fWNsYXNzIGhlIGV4dGVuZHMgaS5PcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJpbnRlcmFjdGl2ZSIpfX1jbGFzcyB1ZSBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImpvZyIsWyJ1c2VQcmludGVyU2V0dGluZyIsIm5vbmUiLCJwYWdlU2V0Il0pfX1jbGFzcyBkZSBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImxhYmVsUHJpbnRlciIsITApLHRoaXMubmFtZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5uYW1lLFsienBsIiwiZHBsIiwiaXBsIiwidGNwbCJdKSx0aGlzLmJhdGNoT3V0cHV0PW51bGwsdGhpcy5mbGlwTGFiZWw9bnVsbCx0aGlzLmZvbnRJbmZvPW51bGwsdGhpcy54ZGM9bnVsbH19Y2xhc3MgZmUgZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJsYXlvdXQiLFsicGFnaW5hdGUiLCJwYW5lbCJdKX19Y2xhc3MgZ2UgZXh0ZW5kcyBpLkludGVnZXJPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywibGV2ZWwiLDAsKGU9PmU+MCkpfX1jbGFzcyBwZSBleHRlbmRzIGkuT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywibGluZWFyaXplZCIpfX1jbGFzcyBtZSBleHRlbmRzIGkuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImxvY2FsZSIpfX1jbGFzcyBiZSBleHRlbmRzIGkuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImxvY2FsZVNldCIpfX1jbGFzcyB5ZSBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsImxvZyIsITApLHRoaXMubW9kZT1udWxsLHRoaXMudGhyZXNob2xkPW51bGwsdGhpcy50bz1udWxsLHRoaXMudXJpPW51bGx9fWNsYXNzIHdlIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywibWFwIiwhMCksdGhpcy5lcXVhdGU9bmV3IGkuWEZBT2JqZWN0QXJyYXksdGhpcy5lcXVhdGVSYW5nZT1uZXcgaS5YRkFPYmplY3RBcnJheX19Y2xhc3MgdmUgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJtZWRpdW1JbmZvIiwhMCksdGhpcy5tYXA9bnVsbH19Y2xhc3MgeGUgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJtZXNzYWdlIiwhMCksdGhpcy5tc2dJZD1udWxsLHRoaXMuc2V2ZXJpdHk9bnVsbH19Y2xhc3MgU2UgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJtZXNzYWdpbmciLCEwKSx0aGlzLm1lc3NhZ2U9bmV3IGkuWEZBT2JqZWN0QXJyYXl9fWNsYXNzIEFlIGV4dGVuZHMgaS5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywibW9kZSIsWyJhcHBlbmQiLCJvdmVyd3JpdGUiXSl9fWNsYXNzIGtlIGV4dGVuZHMgaS5PcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJtb2RpZnlBbm5vdHMiKX19Y2xhc3MgQ2UgZXh0ZW5kcyBpLkludGVnZXJPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywibXNnSWQiLDEsKGU9PmU+PTEpKX19Y2xhc3MgT2UgZXh0ZW5kcyBpLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJuYW1lQXR0ciIpfX1jbGFzcyBGZSBleHRlbmRzIGkuQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJuZXZlckVtYmVkIil9fWNsYXNzIEllIGV4dGVuZHMgaS5JbnRlZ2VyT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsIm51bWJlck9mQ29waWVzIixudWxsLChlPT5lPj0yJiZlPD01KSl9fWNsYXNzIFRlIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywib3BlbkFjdGlvbiIsITApLHRoaXMuZGVzdGluYXRpb249bnVsbH19Y2xhc3MgTWUgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJvdXRwdXQiLCEwKSx0aGlzLnRvPW51bGwsdGhpcy50eXBlPW51bGwsdGhpcy51cmk9bnVsbH19Y2xhc3MgRWUgZXh0ZW5kcyBpLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJvdXRwdXRCaW4iKX19Y2xhc3MgUGUgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJvdXRwdXRYU0wiLCEwKSx0aGlzLnVyaT1udWxsfX1jbGFzcyBSZSBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsIm92ZXJwcmludCIsWyJub25lIiwiYm90aCIsImRyYXciLCJmaWVsZCJdKX19Y2xhc3MgTmUgZXh0ZW5kcyBpLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJwYWNrZXRzIil9W2EuJGZpbmFsaXplXSgpeyIqIiE9PXRoaXNbYS4kY29udGVudF0mJih0aGlzW2EuJGNvbnRlbnRdPXRoaXNbYS4kY29udGVudF0udHJpbSgpLnNwbGl0KC9ccysvKS5maWx0ZXIoKGU9PlsiY29uZmlnIiwiZGF0YXNldHMiLCJ0ZW1wbGF0ZSIsInhmZGYiLCJ4c2x0Il0uaW5jbHVkZXMoZSkpKSl9fWNsYXNzIERlIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywicGFnZU9mZnNldCIpLHRoaXMueD0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUueCxkZWZhdWx0VmFsdWU6InVzZVhEQ1NldHRpbmciLHZhbGlkYXRlOmU9PiEwfSksdGhpcy55PSgwLHMuZ2V0SW50ZWdlcikoe2RhdGE6ZS55LGRlZmF1bHRWYWx1ZToidXNlWERDU2V0dGluZyIsdmFsaWRhdGU6ZT0+ITB9KX19Y2xhc3MgQmUgZXh0ZW5kcyBpLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJwYWdlUmFuZ2UiKX1bYS4kZmluYWxpemVdKCl7Y29uc3QgZT10aGlzW2EuJGNvbnRlbnRdLnRyaW0oKS5zcGxpdCgvXHMrLykubWFwKChlPT5wYXJzZUludChlLDEwKSkpLHQ9W107Zm9yKGxldCByPTAsbj1lLmxlbmd0aDtyPG47cis9Mil0LnB1c2goZS5zbGljZShyLHIrMikpO3RoaXNbYS4kY29udGVudF09dH19Y2xhc3MgTGUgZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJwYWdpbmF0aW9uIixbInNpbXBsZXgiLCJkdXBsZXhTaG9ydEVkZ2UiLCJkdXBsZXhMb25nRWRnZSJdKX19Y2xhc3MgX2UgZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJwYWdpbmF0aW9uT3ZlcnJpZGUiLFsibm9uZSIsImZvcmNlRHVwbGV4IiwiZm9yY2VEdXBsZXhMb25nRWRnZSIsImZvcmNlRHVwbGV4U2hvcnRFZGdlIiwiZm9yY2VTaW1wbGV4Il0pfX1jbGFzcyBqZSBleHRlbmRzIGkuSW50ZWdlck9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJwYXJ0IiwxLChlPT4hMSkpfX1jbGFzcyBVZSBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInBjbCIsITApLHRoaXMubmFtZT1lLm5hbWV8fCIiLHRoaXMuYmF0Y2hPdXRwdXQ9bnVsbCx0aGlzLmZvbnRJbmZvPW51bGwsdGhpcy5qb2c9bnVsbCx0aGlzLm1lZGl1bUluZm89bnVsbCx0aGlzLm91dHB1dEJpbj1udWxsLHRoaXMucGFnZU9mZnNldD1udWxsLHRoaXMuc3RhcGxlPW51bGwsdGhpcy54ZGM9bnVsbH19Y2xhc3MgJGUgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJwZGYiLCEwKSx0aGlzLm5hbWU9ZS5uYW1lfHwiIix0aGlzLmFkb2JlRXh0ZW5zaW9uTGV2ZWw9bnVsbCx0aGlzLmJhdGNoT3V0cHV0PW51bGwsdGhpcy5jb21wcmVzc2lvbj1udWxsLHRoaXMuY3JlYXRvcj1udWxsLHRoaXMuZW5jcnlwdGlvbj1udWxsLHRoaXMuZm9udEluZm89bnVsbCx0aGlzLmludGVyYWN0aXZlPW51bGwsdGhpcy5saW5lYXJpemVkPW51bGwsdGhpcy5vcGVuQWN0aW9uPW51bGwsdGhpcy5wZGZhPW51bGwsdGhpcy5wcm9kdWNlcj1udWxsLHRoaXMucmVuZGVyUG9saWN5PW51bGwsdGhpcy5zY3JpcHRNb2RlbD1udWxsLHRoaXMuc2lsZW50UHJpbnQ9bnVsbCx0aGlzLnN1Ym1pdEZvcm1hdD1udWxsLHRoaXMudGFnZ2VkPW51bGwsdGhpcy52ZXJzaW9uPW51bGwsdGhpcy52aWV3ZXJQcmVmZXJlbmNlcz1udWxsLHRoaXMueGRjPW51bGx9fWNsYXNzIFhlIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywicGRmYSIsITApLHRoaXMuYW1kPW51bGwsdGhpcy5jb25mb3JtYW5jZT1udWxsLHRoaXMuaW5jbHVkZVhEUENvbnRlbnQ9bnVsbCx0aGlzLnBhcnQ9bnVsbH19Y2xhc3MgSGUgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJwZXJtaXNzaW9ucyIsITApLHRoaXMuYWNjZXNzaWJsZUNvbnRlbnQ9bnVsbCx0aGlzLmNoYW5nZT1udWxsLHRoaXMuY29udGVudENvcHk9bnVsbCx0aGlzLmRvY3VtZW50QXNzZW1ibHk9bnVsbCx0aGlzLmZvcm1GaWVsZEZpbGxpbmc9bnVsbCx0aGlzLm1vZGlmeUFubm90cz1udWxsLHRoaXMucGxhaW50ZXh0TWV0YWRhdGE9bnVsbCx0aGlzLnByaW50PW51bGwsdGhpcy5wcmludEhpZ2hRdWFsaXR5PW51bGx9fWNsYXNzIHFlIGV4dGVuZHMgaS5PcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJwaWNrVHJheUJ5UERGU2l6ZSIpfX1jbGFzcyB6ZSBleHRlbmRzIGkuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInBpY3R1cmUiKX19Y2xhc3MgR2UgZXh0ZW5kcyBpLk9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInBsYWludGV4dE1ldGFkYXRhIil9fWNsYXNzIFdlIGV4dGVuZHMgaS5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywicHJlc2VuY2UiLFsicHJlc2VydmUiLCJkaXNzb2x2ZSIsImRpc3NvbHZlU3RydWN0dXJlIiwiaWdub3JlIiwicmVtb3ZlIl0pfX1jbGFzcyBWZSBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInByZXNlbnQiLCEwKSx0aGlzLmJlaGF2aW9yT3ZlcnJpZGU9bnVsbCx0aGlzLmNhY2hlPW51bGwsdGhpcy5jb21tb249bnVsbCx0aGlzLmNvcGllcz1udWxsLHRoaXMuZGVzdGluYXRpb249bnVsbCx0aGlzLmluY3JlbWVudGFsTWVyZ2U9bnVsbCx0aGlzLmxheW91dD1udWxsLHRoaXMub3V0cHV0PW51bGwsdGhpcy5vdmVycHJpbnQ9bnVsbCx0aGlzLnBhZ2luYXRpb249bnVsbCx0aGlzLnBhZ2luYXRpb25PdmVycmlkZT1udWxsLHRoaXMuc2NyaXB0PW51bGwsdGhpcy52YWxpZGF0ZT1udWxsLHRoaXMueGRwPW51bGwsdGhpcy5kcml2ZXI9bmV3IGkuWEZBT2JqZWN0QXJyYXksdGhpcy5sYWJlbFByaW50ZXI9bmV3IGkuWEZBT2JqZWN0QXJyYXksdGhpcy5wY2w9bmV3IGkuWEZBT2JqZWN0QXJyYXksdGhpcy5wZGY9bmV3IGkuWEZBT2JqZWN0QXJyYXksdGhpcy5wcz1uZXcgaS5YRkFPYmplY3RBcnJheSx0aGlzLnN1Ym1pdFVybD1uZXcgaS5YRkFPYmplY3RBcnJheSx0aGlzLndlYkNsaWVudD1uZXcgaS5YRkFPYmplY3RBcnJheSx0aGlzLnpwbD1uZXcgaS5YRkFPYmplY3RBcnJheX19Y2xhc3MgS2UgZXh0ZW5kcyBpLk9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInByaW50Iil9fWNsYXNzIFllIGV4dGVuZHMgaS5PcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJwcmludEhpZ2hRdWFsaXR5Iil9fWNsYXNzIEplIGV4dGVuZHMgaS5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywicHJpbnRTY2FsaW5nIixbImFwcGRlZmF1bHQiLCJub1NjYWxpbmciXSl9fWNsYXNzIFplIGV4dGVuZHMgaS5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywicHJpbnRlck5hbWUiKX19Y2xhc3MgUWUgZXh0ZW5kcyBpLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJwcm9kdWNlciIpfX1jbGFzcyBldCBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInBzIiwhMCksdGhpcy5uYW1lPWUubmFtZXx8IiIsdGhpcy5iYXRjaE91dHB1dD1udWxsLHRoaXMuZm9udEluZm89bnVsbCx0aGlzLmpvZz1udWxsLHRoaXMubWVkaXVtSW5mbz1udWxsLHRoaXMub3V0cHV0QmluPW51bGwsdGhpcy5zdGFwbGU9bnVsbCx0aGlzLnhkYz1udWxsfX1jbGFzcyB0dCBleHRlbmRzIGkuQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJyYW5nZSIpfVthLiRmaW5hbGl6ZV0oKXt0aGlzW2EuJGNvbnRlbnRdPXRoaXNbYS4kY29udGVudF0udHJpbSgpLnNwbGl0KC9ccyosXHMqLywyKS5tYXAoKGU9PmUuc3BsaXQoIi0iKS5tYXAoKGU9PnBhcnNlSW50KGUudHJpbSgpLDEwKSkpKSkuZmlsdGVyKChlPT5lLmV2ZXJ5KChlPT4haXNOYU4oZSkpKSkpLm1hcCgoZT0+KDE9PT1lLmxlbmd0aCYmZS5wdXNoKGVbMF0pLGUpKSl9fWNsYXNzIHJ0IGV4dGVuZHMgaS5Db250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInJlY29yZCIpfVthLiRmaW5hbGl6ZV0oKXt0aGlzW2EuJGNvbnRlbnRdPXRoaXNbYS4kY29udGVudF0udHJpbSgpO2NvbnN0IGU9cGFyc2VJbnQodGhpc1thLiRjb250ZW50XSwxMCk7IWlzTmFOKGUpJiZlPj0wJiYodGhpc1thLiRjb250ZW50XT1lKX19Y2xhc3MgbnQgZXh0ZW5kcyBpLkNvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywicmVsZXZhbnQiKX1bYS4kZmluYWxpemVdKCl7dGhpc1thLiRjb250ZW50XT10aGlzW2EuJGNvbnRlbnRdLnRyaW0oKS5zcGxpdCgvXHMrLyl9fWNsYXNzIGF0IGV4dGVuZHMgaS5Db250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInJlbmFtZSIpfVthLiRmaW5hbGl6ZV0oKXt0aGlzW2EuJGNvbnRlbnRdPXRoaXNbYS4kY29udGVudF0udHJpbSgpLCh0aGlzW2EuJGNvbnRlbnRdLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgieG1sIil8fG5ldyBSZWdFeHAoIltcXHB7TH1fXVtcXHB7TH1cXGQuX1xccHtNfS1dKiIsInUiKS50ZXN0KHRoaXNbYS4kY29udGVudF0pKSYmKDAsby53YXJuKSgiWEZBIC0gUmVuYW1lOiBpbnZhbGlkIFhGQSBuYW1lIil9fWNsYXNzIGl0IGV4dGVuZHMgaS5PcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywicmVuZGVyUG9saWN5IixbInNlcnZlciIsImNsaWVudCJdKX19Y2xhc3Mgc3QgZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJydW5TY3JpcHRzIixbImJvdGgiLCJjbGllbnQiLCJub25lIiwic2VydmVyIl0pfX1jbGFzcyBvdCBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInNjcmlwdCIsITApLHRoaXMuY3VycmVudFBhZ2U9bnVsbCx0aGlzLmV4Y2x1ZGU9bnVsbCx0aGlzLnJ1blNjcmlwdHM9bnVsbH19Y2xhc3MgY3QgZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJzY3JpcHRNb2RlbCIsWyJYRkEiLCJub25lIl0pfX1jbGFzcyBsdCBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInNldmVyaXR5IixbImlnbm9yZSIsImVycm9yIiwiaW5mb3JtYXRpb24iLCJ0cmFjZSIsIndhcm5pbmciXSl9fWNsYXNzIGh0IGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywic2lsZW50UHJpbnQiLCEwKSx0aGlzLmFkZFNpbGVudFByaW50PW51bGwsdGhpcy5wcmludGVyTmFtZT1udWxsfX1jbGFzcyB1dCBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInN0YXBsZSIpLHRoaXMubW9kZT0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5tb2RlLFsidXNlUHJpbnRlclNldHRpbmciLCJvbiIsIm9mZiJdKX19Y2xhc3MgZHQgZXh0ZW5kcyBpLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJzdGFydE5vZGUiKX19Y2xhc3MgZnQgZXh0ZW5kcyBpLkludGVnZXJPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywic3RhcnRQYWdlIiwwLChlPT4hMCkpfX1jbGFzcyBndCBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInN1Ym1pdEZvcm1hdCIsWyJodG1sIiwiZGVsZWdhdGUiLCJmZGYiLCJ4bWwiLCJwZGYiXSl9fWNsYXNzIHB0IGV4dGVuZHMgaS5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywic3VibWl0VXJsIil9fWNsYXNzIG10IGV4dGVuZHMgaS5JbnRlZ2VyT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInN1YnNldEJlbG93IiwxMDAsKGU9PmU+PTAmJmU8PTEwMCkpfX1jbGFzcyBidCBleHRlbmRzIGkuT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywic3VwcHJlc3NCYW5uZXIiKX19Y2xhc3MgeXQgZXh0ZW5kcyBpLk9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInRhZ2dlZCIpfX1jbGFzcyB3dCBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInRlbXBsYXRlIiwhMCksdGhpcy5iYXNlPW51bGwsdGhpcy5yZWxldmFudD1udWxsLHRoaXMuc3RhcnRQYWdlPW51bGwsdGhpcy51cmk9bnVsbCx0aGlzLnhzbD1udWxsfX1jbGFzcyB2dCBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInRocmVzaG9sZCIsWyJ0cmFjZSIsImVycm9yIiwiaW5mb3JtYXRpb24iLCJ3YXJuaW5nIl0pfX1jbGFzcyB4dCBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInRvIixbIm51bGwiLCJtZW1vcnkiLCJzdGRlcnIiLCJzdGRvdXQiLCJzeXN0ZW0iLCJ1cmkiXSl9fWNsYXNzIFN0IGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywidGVtcGxhdGVDYWNoZSIpLHRoaXMubWF4RW50cmllcz0oMCxzLmdldEludGVnZXIpKHtkYXRhOmUubWF4RW50cmllcyxkZWZhdWx0VmFsdWU6NSx2YWxpZGF0ZTplPT5lPj0wfSl9fWNsYXNzIEF0IGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywidHJhY2UiLCEwKSx0aGlzLmFyZWE9bmV3IGkuWEZBT2JqZWN0QXJyYXl9fWNsYXNzIGt0IGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywidHJhbnNmb3JtIiwhMCksdGhpcy5ncm91cFBhcmVudD1udWxsLHRoaXMuaWZFbXB0eT1udWxsLHRoaXMubmFtZUF0dHI9bnVsbCx0aGlzLnBpY3R1cmU9bnVsbCx0aGlzLnByZXNlbmNlPW51bGwsdGhpcy5yZW5hbWU9bnVsbCx0aGlzLndoaXRlc3BhY2U9bnVsbH19Y2xhc3MgQ3QgZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJ0eXBlIixbIm5vbmUiLCJhc2NpaTg1IiwiYXNjaWlIZXgiLCJjY2l0dGZheCIsImZsYXRlIiwibHp3IiwicnVuTGVuZ3RoIiwibmF0aXZlIiwieGRwIiwibWVyZ2VkWERQIl0pfX1jbGFzcyBPdCBleHRlbmRzIGkuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInVyaSIpfX1jbGFzcyBGdCBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInZhbGlkYXRlIixbInByZVN1Ym1pdCIsInByZVByaW50IiwicHJlRXhlY3V0ZSIsInByZVNhdmUiXSl9fWNsYXNzIEl0IGV4dGVuZHMgaS5Db250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInZhbGlkYXRlQXBwcm92YWxTaWduYXR1cmVzIil9W2EuJGZpbmFsaXplXSgpe3RoaXNbYS4kY29udGVudF09dGhpc1thLiRjb250ZW50XS50cmltKCkuc3BsaXQoL1xzKy8pLmZpbHRlcigoZT0+WyJkb2NSZWFkeSIsInBvc3RTaWduIl0uaW5jbHVkZXMoZSkpKX19Y2xhc3MgVHQgZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJ2YWxpZGF0aW9uTWVzc2FnaW5nIixbImFsbE1lc3NhZ2VzSW5kaXZpZHVhbGx5IiwiYWxsTWVzc2FnZXNUb2dldGhlciIsImZpcnN0TWVzc2FnZU9ubHkiLCJub01lc3NhZ2VzIl0pfX1jbGFzcyBNdCBleHRlbmRzIGkuT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsInZlcnNpb24iLFsiMS43IiwiMS42IiwiMS41IiwiMS40IiwiMS4zIiwiMS4yIl0pfX1jbGFzcyBFdCBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsIlZlcnNpb25Db250cm9sIiksdGhpcy5vdXRwdXRCZWxvdz0oMCxzLmdldFN0cmluZ09wdGlvbikoZS5vdXRwdXRCZWxvdyxbIndhcm4iLCJlcnJvciIsInVwZGF0ZSJdKSx0aGlzLnNvdXJjZUFib3ZlPSgwLHMuZ2V0U3RyaW5nT3B0aW9uKShlLnNvdXJjZUFib3ZlLFsid2FybiIsImVycm9yIl0pLHRoaXMuc291cmNlQmVsb3c9KDAscy5nZXRTdHJpbmdPcHRpb24pKGUuc291cmNlQmVsb3csWyJ1cGRhdGUiLCJtYWludGFpbiJdKX19Y2xhc3MgUHQgZXh0ZW5kcyBpLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJ2aWV3ZXJQcmVmZXJlbmNlcyIsITApLHRoaXMuQURCRV9KU0NvbnNvbGU9bnVsbCx0aGlzLkFEQkVfSlNEZWJ1Z2dlcj1udWxsLHRoaXMuYWRkVmlld2VyUHJlZmVyZW5jZXM9bnVsbCx0aGlzLmR1cGxleE9wdGlvbj1udWxsLHRoaXMuZW5mb3JjZT1udWxsLHRoaXMubnVtYmVyT2ZDb3BpZXM9bnVsbCx0aGlzLnBhZ2VSYW5nZT1udWxsLHRoaXMucGlja1RyYXlCeVBERlNpemU9bnVsbCx0aGlzLnByaW50U2NhbGluZz1udWxsfX1jbGFzcyBSdCBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsIndlYkNsaWVudCIsITApLHRoaXMubmFtZT1lLm5hbWU/ZS5uYW1lLnRyaW0oKToiIix0aGlzLmZvbnRJbmZvPW51bGwsdGhpcy54ZGM9bnVsbH19Y2xhc3MgTnQgZXh0ZW5kcyBpLk9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihjLCJ3aGl0ZXNwYWNlIixbInByZXNlcnZlIiwibHRyaW0iLCJub3JtYWxpemUiLCJydHJpbSIsInRyaW0iXSl9fWNsYXNzIER0IGV4dGVuZHMgaS5Db250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGMsIndpbmRvdyIpfVthLiRmaW5hbGl6ZV0oKXtjb25zdCBlPXRoaXNbYS4kY29udGVudF0udHJpbSgpLnNwbGl0KC9ccyosXHMqLywyKS5tYXAoKGU9PnBhcnNlSW50KGUsMTApKSk7ZS5zb21lKChlPT5pc05hTihlKSkpP3RoaXNbYS4kY29udGVudF09WzAsMF06KDE9PT1lLmxlbmd0aCYmZS5wdXNoKGVbMF0pLHRoaXNbYS4kY29udGVudF09ZSl9fWNsYXNzIEJ0IGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywieGRjIiwhMCksdGhpcy51cmk9bmV3IGkuWEZBT2JqZWN0QXJyYXksdGhpcy54c2w9bmV3IGkuWEZBT2JqZWN0QXJyYXl9fWNsYXNzIEx0IGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywieGRwIiwhMCksdGhpcy5wYWNrZXRzPW51bGx9fWNsYXNzIF90IGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywieHNsIiwhMCksdGhpcy5kZWJ1Zz1udWxsLHRoaXMudXJpPW51bGx9fWNsYXNzIGp0IGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoYywienBsIiwhMCksdGhpcy5uYW1lPWUubmFtZT9lLm5hbWUudHJpbSgpOiIiLHRoaXMuYmF0Y2hPdXRwdXQ9bnVsbCx0aGlzLmZsaXBMYWJlbD1udWxsLHRoaXMuZm9udEluZm89bnVsbCx0aGlzLnhkYz1udWxsfX1jbGFzcyBVdHtzdGF0aWNbbi4kYnVpbGRYRkFPYmplY3RdKGUsdCl7aWYoVXQuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIFV0W2VdKHQpfXN0YXRpYyBhY3JvYmF0KGUpe3JldHVybiBuZXcgbChlKX1zdGF0aWMgYWNyb2JhdDcoZSl7cmV0dXJuIG5ldyBoKGUpfXN0YXRpYyBBREJFX0pTQ29uc29sZShlKXtyZXR1cm4gbmV3IHUoZSl9c3RhdGljIEFEQkVfSlNEZWJ1Z2dlcihlKXtyZXR1cm4gbmV3IGQoZSl9c3RhdGljIGFkZFNpbGVudFByaW50KGUpe3JldHVybiBuZXcgZihlKX1zdGF0aWMgYWRkVmlld2VyUHJlZmVyZW5jZXMoZSl7cmV0dXJuIG5ldyBnKGUpfXN0YXRpYyBhZGp1c3REYXRhKGUpe3JldHVybiBuZXcgcChlKX1zdGF0aWMgYWRvYmVFeHRlbnNpb25MZXZlbChlKXtyZXR1cm4gbmV3IG0oZSl9c3RhdGljIGFnZW50KGUpe3JldHVybiBuZXcgYihlKX1zdGF0aWMgYWx3YXlzRW1iZWQoZSl7cmV0dXJuIG5ldyB5KGUpfXN0YXRpYyBhbWQoZSl7cmV0dXJuIG5ldyB3KGUpfXN0YXRpYyBhcmVhKGUpe3JldHVybiBuZXcgdihlKX1zdGF0aWMgYXR0cmlidXRlcyhlKXtyZXR1cm4gbmV3IHgoZSl9c3RhdGljIGF1dG9TYXZlKGUpe3JldHVybiBuZXcgUyhlKX1zdGF0aWMgYmFzZShlKXtyZXR1cm4gbmV3IEEoZSl9c3RhdGljIGJhdGNoT3V0cHV0KGUpe3JldHVybiBuZXcgayhlKX1zdGF0aWMgYmVoYXZpb3JPdmVycmlkZShlKXtyZXR1cm4gbmV3IEMoZSl9c3RhdGljIGNhY2hlKGUpe3JldHVybiBuZXcgTyhlKX1zdGF0aWMgY2hhbmdlKGUpe3JldHVybiBuZXcgRihlKX1zdGF0aWMgY29tbW9uKGUpe3JldHVybiBuZXcgSShlKX1zdGF0aWMgY29tcHJlc3MoZSl7cmV0dXJuIG5ldyBUKGUpfXN0YXRpYyBjb21wcmVzc0xvZ2ljYWxTdHJ1Y3R1cmUoZSl7cmV0dXJuIG5ldyBNKGUpfXN0YXRpYyBjb21wcmVzc09iamVjdFN0cmVhbShlKXtyZXR1cm4gbmV3IEUoZSl9c3RhdGljIGNvbXByZXNzaW9uKGUpe3JldHVybiBuZXcgUChlKX1zdGF0aWMgY29uZmlnKGUpe3JldHVybiBuZXcgUihlKX1zdGF0aWMgY29uZm9ybWFuY2UoZSl7cmV0dXJuIG5ldyBOKGUpfXN0YXRpYyBjb250ZW50Q29weShlKXtyZXR1cm4gbmV3IEQoZSl9c3RhdGljIGNvcGllcyhlKXtyZXR1cm4gbmV3IEIoZSl9c3RhdGljIGNyZWF0b3IoZSl7cmV0dXJuIG5ldyBMKGUpfXN0YXRpYyBjdXJyZW50UGFnZShlKXtyZXR1cm4gbmV3IF8oZSl9c3RhdGljIGRhdGEoZSl7cmV0dXJuIG5ldyBqKGUpfXN0YXRpYyBkZWJ1ZyhlKXtyZXR1cm4gbmV3IFUoZSl9c3RhdGljIGRlZmF1bHRUeXBlZmFjZShlKXtyZXR1cm4gbmV3ICQoZSl9c3RhdGljIGRlc3RpbmF0aW9uKGUpe3JldHVybiBuZXcgWChlKX1zdGF0aWMgZG9jdW1lbnRBc3NlbWJseShlKXtyZXR1cm4gbmV3IEgoZSl9c3RhdGljIGRyaXZlcihlKXtyZXR1cm4gbmV3IHEoZSl9c3RhdGljIGR1cGxleE9wdGlvbihlKXtyZXR1cm4gbmV3IHooZSl9c3RhdGljIGR5bmFtaWNSZW5kZXIoZSl7cmV0dXJuIG5ldyBHKGUpfXN0YXRpYyBlbWJlZChlKXtyZXR1cm4gbmV3IFcoZSl9c3RhdGljIGVuY3J5cHQoZSl7cmV0dXJuIG5ldyBWKGUpfXN0YXRpYyBlbmNyeXB0aW9uKGUpe3JldHVybiBuZXcgSyhlKX1zdGF0aWMgZW5jcnlwdGlvbkxldmVsKGUpe3JldHVybiBuZXcgWShlKX1zdGF0aWMgZW5mb3JjZShlKXtyZXR1cm4gbmV3IEooZSl9c3RhdGljIGVxdWF0ZShlKXtyZXR1cm4gbmV3IFooZSl9c3RhdGljIGVxdWF0ZVJhbmdlKGUpe3JldHVybiBuZXcgUShlKX1zdGF0aWMgZXhjbHVkZShlKXtyZXR1cm4gbmV3IGVlKGUpfXN0YXRpYyBleGNsdWRlTlMoZSl7cmV0dXJuIG5ldyB0ZShlKX1zdGF0aWMgZmxpcExhYmVsKGUpe3JldHVybiBuZXcgcmUoZSl9c3RhdGljIGZvbnRJbmZvKGUpe3JldHVybiBuZXcgbmUoZSl9c3RhdGljIGZvcm1GaWVsZEZpbGxpbmcoZSl7cmV0dXJuIG5ldyBhZShlKX1zdGF0aWMgZ3JvdXBQYXJlbnQoZSl7cmV0dXJuIG5ldyBpZShlKX1zdGF0aWMgaWZFbXB0eShlKXtyZXR1cm4gbmV3IHNlKGUpfXN0YXRpYyBpbmNsdWRlWERQQ29udGVudChlKXtyZXR1cm4gbmV3IG9lKGUpfXN0YXRpYyBpbmNyZW1lbnRhbExvYWQoZSl7cmV0dXJuIG5ldyBjZShlKX1zdGF0aWMgaW5jcmVtZW50YWxNZXJnZShlKXtyZXR1cm4gbmV3IGxlKGUpfXN0YXRpYyBpbnRlcmFjdGl2ZShlKXtyZXR1cm4gbmV3IGhlKGUpfXN0YXRpYyBqb2coZSl7cmV0dXJuIG5ldyB1ZShlKX1zdGF0aWMgbGFiZWxQcmludGVyKGUpe3JldHVybiBuZXcgZGUoZSl9c3RhdGljIGxheW91dChlKXtyZXR1cm4gbmV3IGZlKGUpfXN0YXRpYyBsZXZlbChlKXtyZXR1cm4gbmV3IGdlKGUpfXN0YXRpYyBsaW5lYXJpemVkKGUpe3JldHVybiBuZXcgcGUoZSl9c3RhdGljIGxvY2FsZShlKXtyZXR1cm4gbmV3IG1lKGUpfXN0YXRpYyBsb2NhbGVTZXQoZSl7cmV0dXJuIG5ldyBiZShlKX1zdGF0aWMgbG9nKGUpe3JldHVybiBuZXcgeWUoZSl9c3RhdGljIG1hcChlKXtyZXR1cm4gbmV3IHdlKGUpfXN0YXRpYyBtZWRpdW1JbmZvKGUpe3JldHVybiBuZXcgdmUoZSl9c3RhdGljIG1lc3NhZ2UoZSl7cmV0dXJuIG5ldyB4ZShlKX1zdGF0aWMgbWVzc2FnaW5nKGUpe3JldHVybiBuZXcgU2UoZSl9c3RhdGljIG1vZGUoZSl7cmV0dXJuIG5ldyBBZShlKX1zdGF0aWMgbW9kaWZ5QW5ub3RzKGUpe3JldHVybiBuZXcga2UoZSl9c3RhdGljIG1zZ0lkKGUpe3JldHVybiBuZXcgQ2UoZSl9c3RhdGljIG5hbWVBdHRyKGUpe3JldHVybiBuZXcgT2UoZSl9c3RhdGljIG5ldmVyRW1iZWQoZSl7cmV0dXJuIG5ldyBGZShlKX1zdGF0aWMgbnVtYmVyT2ZDb3BpZXMoZSl7cmV0dXJuIG5ldyBJZShlKX1zdGF0aWMgb3BlbkFjdGlvbihlKXtyZXR1cm4gbmV3IFRlKGUpfXN0YXRpYyBvdXRwdXQoZSl7cmV0dXJuIG5ldyBNZShlKX1zdGF0aWMgb3V0cHV0QmluKGUpe3JldHVybiBuZXcgRWUoZSl9c3RhdGljIG91dHB1dFhTTChlKXtyZXR1cm4gbmV3IFBlKGUpfXN0YXRpYyBvdmVycHJpbnQoZSl7cmV0dXJuIG5ldyBSZShlKX1zdGF0aWMgcGFja2V0cyhlKXtyZXR1cm4gbmV3IE5lKGUpfXN0YXRpYyBwYWdlT2Zmc2V0KGUpe3JldHVybiBuZXcgRGUoZSl9c3RhdGljIHBhZ2VSYW5nZShlKXtyZXR1cm4gbmV3IEJlKGUpfXN0YXRpYyBwYWdpbmF0aW9uKGUpe3JldHVybiBuZXcgTGUoZSl9c3RhdGljIHBhZ2luYXRpb25PdmVycmlkZShlKXtyZXR1cm4gbmV3IF9lKGUpfXN0YXRpYyBwYXJ0KGUpe3JldHVybiBuZXcgamUoZSl9c3RhdGljIHBjbChlKXtyZXR1cm4gbmV3IFVlKGUpfXN0YXRpYyBwZGYoZSl7cmV0dXJuIG5ldyAkZShlKX1zdGF0aWMgcGRmYShlKXtyZXR1cm4gbmV3IFhlKGUpfXN0YXRpYyBwZXJtaXNzaW9ucyhlKXtyZXR1cm4gbmV3IEhlKGUpfXN0YXRpYyBwaWNrVHJheUJ5UERGU2l6ZShlKXtyZXR1cm4gbmV3IHFlKGUpfXN0YXRpYyBwaWN0dXJlKGUpe3JldHVybiBuZXcgemUoZSl9c3RhdGljIHBsYWludGV4dE1ldGFkYXRhKGUpe3JldHVybiBuZXcgR2UoZSl9c3RhdGljIHByZXNlbmNlKGUpe3JldHVybiBuZXcgV2UoZSl9c3RhdGljIHByZXNlbnQoZSl7cmV0dXJuIG5ldyBWZShlKX1zdGF0aWMgcHJpbnQoZSl7cmV0dXJuIG5ldyBLZShlKX1zdGF0aWMgcHJpbnRIaWdoUXVhbGl0eShlKXtyZXR1cm4gbmV3IFllKGUpfXN0YXRpYyBwcmludFNjYWxpbmcoZSl7cmV0dXJuIG5ldyBKZShlKX1zdGF0aWMgcHJpbnRlck5hbWUoZSl7cmV0dXJuIG5ldyBaZShlKX1zdGF0aWMgcHJvZHVjZXIoZSl7cmV0dXJuIG5ldyBRZShlKX1zdGF0aWMgcHMoZSl7cmV0dXJuIG5ldyBldChlKX1zdGF0aWMgcmFuZ2UoZSl7cmV0dXJuIG5ldyB0dChlKX1zdGF0aWMgcmVjb3JkKGUpe3JldHVybiBuZXcgcnQoZSl9c3RhdGljIHJlbGV2YW50KGUpe3JldHVybiBuZXcgbnQoZSl9c3RhdGljIHJlbmFtZShlKXtyZXR1cm4gbmV3IGF0KGUpfXN0YXRpYyByZW5kZXJQb2xpY3koZSl7cmV0dXJuIG5ldyBpdChlKX1zdGF0aWMgcnVuU2NyaXB0cyhlKXtyZXR1cm4gbmV3IHN0KGUpfXN0YXRpYyBzY3JpcHQoZSl7cmV0dXJuIG5ldyBvdChlKX1zdGF0aWMgc2NyaXB0TW9kZWwoZSl7cmV0dXJuIG5ldyBjdChlKX1zdGF0aWMgc2V2ZXJpdHkoZSl7cmV0dXJuIG5ldyBsdChlKX1zdGF0aWMgc2lsZW50UHJpbnQoZSl7cmV0dXJuIG5ldyBodChlKX1zdGF0aWMgc3RhcGxlKGUpe3JldHVybiBuZXcgdXQoZSl9c3RhdGljIHN0YXJ0Tm9kZShlKXtyZXR1cm4gbmV3IGR0KGUpfXN0YXRpYyBzdGFydFBhZ2UoZSl7cmV0dXJuIG5ldyBmdChlKX1zdGF0aWMgc3VibWl0Rm9ybWF0KGUpe3JldHVybiBuZXcgZ3QoZSl9c3RhdGljIHN1Ym1pdFVybChlKXtyZXR1cm4gbmV3IHB0KGUpfXN0YXRpYyBzdWJzZXRCZWxvdyhlKXtyZXR1cm4gbmV3IG10KGUpfXN0YXRpYyBzdXBwcmVzc0Jhbm5lcihlKXtyZXR1cm4gbmV3IGJ0KGUpfXN0YXRpYyB0YWdnZWQoZSl7cmV0dXJuIG5ldyB5dChlKX1zdGF0aWMgdGVtcGxhdGUoZSl7cmV0dXJuIG5ldyB3dChlKX1zdGF0aWMgdGVtcGxhdGVDYWNoZShlKXtyZXR1cm4gbmV3IFN0KGUpfXN0YXRpYyB0aHJlc2hvbGQoZSl7cmV0dXJuIG5ldyB2dChlKX1zdGF0aWMgdG8oZSl7cmV0dXJuIG5ldyB4dChlKX1zdGF0aWMgdHJhY2UoZSl7cmV0dXJuIG5ldyBBdChlKX1zdGF0aWMgdHJhbnNmb3JtKGUpe3JldHVybiBuZXcga3QoZSl9c3RhdGljIHR5cGUoZSl7cmV0dXJuIG5ldyBDdChlKX1zdGF0aWMgdXJpKGUpe3JldHVybiBuZXcgT3QoZSl9c3RhdGljIHZhbGlkYXRlKGUpe3JldHVybiBuZXcgRnQoZSl9c3RhdGljIHZhbGlkYXRlQXBwcm92YWxTaWduYXR1cmVzKGUpe3JldHVybiBuZXcgSXQoZSl9c3RhdGljIHZhbGlkYXRpb25NZXNzYWdpbmcoZSl7cmV0dXJuIG5ldyBUdChlKX1zdGF0aWMgdmVyc2lvbihlKXtyZXR1cm4gbmV3IE10KGUpfXN0YXRpYyB2ZXJzaW9uQ29udHJvbChlKXtyZXR1cm4gbmV3IEV0KGUpfXN0YXRpYyB2aWV3ZXJQcmVmZXJlbmNlcyhlKXtyZXR1cm4gbmV3IFB0KGUpfXN0YXRpYyB3ZWJDbGllbnQoZSl7cmV0dXJuIG5ldyBSdChlKX1zdGF0aWMgd2hpdGVzcGFjZShlKXtyZXR1cm4gbmV3IE50KGUpfXN0YXRpYyB3aW5kb3coZSl7cmV0dXJuIG5ldyBEdChlKX1zdGF0aWMgeGRjKGUpe3JldHVybiBuZXcgQnQoZSl9c3RhdGljIHhkcChlKXtyZXR1cm4gbmV3IEx0KGUpfXN0YXRpYyB4c2woZSl7cmV0dXJuIG5ldyBfdChlKX1zdGF0aWMgenBsKGUpe3JldHVybiBuZXcganQoZSl9fXQuQ29uZmlnTmFtZXNwYWNlPVV0fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQ29ubmVjdGlvblNldE5hbWVzcGFjZT12b2lkIDA7dmFyIG49cigyMzQpLGE9cigyNDApO2NvbnN0IGk9bi5OYW1lc3BhY2VJZHMuY29ubmVjdGlvblNldC5pZDtjbGFzcyBzIGV4dGVuZHMgYS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoaSwiY29ubmVjdGlvblNldCIsITApLHRoaXMud3NkbENvbm5lY3Rpb249bmV3IGEuWEZBT2JqZWN0QXJyYXksdGhpcy54bWxDb25uZWN0aW9uPW5ldyBhLlhGQU9iamVjdEFycmF5LHRoaXMueHNkQ29ubmVjdGlvbj1uZXcgYS5YRkFPYmplY3RBcnJheX19Y2xhc3MgbyBleHRlbmRzIGEuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGksImVmZmVjdGl2ZUlucHV0UG9saWN5IiksdGhpcy5pZD1lLmlkfHwiIix0aGlzLm5hbWU9ZS5uYW1lfHwiIix0aGlzLnVzZT1lLnVzZXx8IiIsdGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIGMgZXh0ZW5kcyBhLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihpLCJlZmZlY3RpdmVPdXRwdXRQb2xpY3kiKSx0aGlzLmlkPWUuaWR8fCIiLHRoaXMubmFtZT1lLm5hbWV8fCIiLHRoaXMudXNlPWUudXNlfHwiIix0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgbCBleHRlbmRzIGEuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGksIm9wZXJhdGlvbiIpLHRoaXMuaWQ9ZS5pZHx8IiIsdGhpcy5pbnB1dD1lLmlucHV0fHwiIix0aGlzLm5hbWU9ZS5uYW1lfHwiIix0aGlzLm91dHB1dD1lLm91dHB1dHx8IiIsdGhpcy51c2U9ZS51c2V8fCIiLHRoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBoIGV4dGVuZHMgYS5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoaSwicm9vdEVsZW1lbnQiKSx0aGlzLmlkPWUuaWR8fCIiLHRoaXMubmFtZT1lLm5hbWV8fCIiLHRoaXMudXNlPWUudXNlfHwiIix0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgdSBleHRlbmRzIGEuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGksInNvYXBBY3Rpb24iKSx0aGlzLmlkPWUuaWR8fCIiLHRoaXMubmFtZT1lLm5hbWV8fCIiLHRoaXMudXNlPWUudXNlfHwiIix0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgZCBleHRlbmRzIGEuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGksInNvYXBBZGRyZXNzIiksdGhpcy5pZD1lLmlkfHwiIix0aGlzLm5hbWU9ZS5uYW1lfHwiIix0aGlzLnVzZT1lLnVzZXx8IiIsdGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIGYgZXh0ZW5kcyBhLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihpLCJ1cmkiKSx0aGlzLmlkPWUuaWR8fCIiLHRoaXMubmFtZT1lLm5hbWV8fCIiLHRoaXMudXNlPWUudXNlfHwiIix0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgZyBleHRlbmRzIGEuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGksIndzZGxBZGRyZXNzIiksdGhpcy5pZD1lLmlkfHwiIix0aGlzLm5hbWU9ZS5uYW1lfHwiIix0aGlzLnVzZT1lLnVzZXx8IiIsdGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIHAgZXh0ZW5kcyBhLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihpLCJ3c2RsQ29ubmVjdGlvbiIsITApLHRoaXMuZGF0YURlc2NyaXB0aW9uPWUuZGF0YURlc2NyaXB0aW9ufHwiIix0aGlzLm5hbWU9ZS5uYW1lfHwiIix0aGlzLmVmZmVjdGl2ZUlucHV0UG9saWN5PW51bGwsdGhpcy5lZmZlY3RpdmVPdXRwdXRQb2xpY3k9bnVsbCx0aGlzLm9wZXJhdGlvbj1udWxsLHRoaXMuc29hcEFjdGlvbj1udWxsLHRoaXMuc29hcEFkZHJlc3M9bnVsbCx0aGlzLndzZGxBZGRyZXNzPW51bGx9fWNsYXNzIG0gZXh0ZW5kcyBhLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihpLCJ4bWxDb25uZWN0aW9uIiwhMCksdGhpcy5kYXRhRGVzY3JpcHRpb249ZS5kYXRhRGVzY3JpcHRpb258fCIiLHRoaXMubmFtZT1lLm5hbWV8fCIiLHRoaXMudXJpPW51bGx9fWNsYXNzIGIgZXh0ZW5kcyBhLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihpLCJ4c2RDb25uZWN0aW9uIiwhMCksdGhpcy5kYXRhRGVzY3JpcHRpb249ZS5kYXRhRGVzY3JpcHRpb258fCIiLHRoaXMubmFtZT1lLm5hbWV8fCIiLHRoaXMucm9vdEVsZW1lbnQ9bnVsbCx0aGlzLnVyaT1udWxsfX1jbGFzcyB5e3N0YXRpY1tuLiRidWlsZFhGQU9iamVjdF0oZSx0KXtpZih5Lmhhc093blByb3BlcnR5KGUpKXJldHVybiB5W2VdKHQpfXN0YXRpYyBjb25uZWN0aW9uU2V0KGUpe3JldHVybiBuZXcgcyhlKX1zdGF0aWMgZWZmZWN0aXZlSW5wdXRQb2xpY3koZSl7cmV0dXJuIG5ldyBvKGUpfXN0YXRpYyBlZmZlY3RpdmVPdXRwdXRQb2xpY3koZSl7cmV0dXJuIG5ldyBjKGUpfXN0YXRpYyBvcGVyYXRpb24oZSl7cmV0dXJuIG5ldyBsKGUpfXN0YXRpYyByb290RWxlbWVudChlKXtyZXR1cm4gbmV3IGgoZSl9c3RhdGljIHNvYXBBY3Rpb24oZSl7cmV0dXJuIG5ldyB1KGUpfXN0YXRpYyBzb2FwQWRkcmVzcyhlKXtyZXR1cm4gbmV3IGQoZSl9c3RhdGljIHVyaShlKXtyZXR1cm4gbmV3IGYoZSl9c3RhdGljIHdzZGxBZGRyZXNzKGUpe3JldHVybiBuZXcgZyhlKX1zdGF0aWMgd3NkbENvbm5lY3Rpb24oZSl7cmV0dXJuIG5ldyBwKGUpfXN0YXRpYyB4bWxDb25uZWN0aW9uKGUpe3JldHVybiBuZXcgbShlKX1zdGF0aWMgeHNkQ29ubmVjdGlvbihlKXtyZXR1cm4gbmV3IGIoZSl9fXQuQ29ubmVjdGlvblNldE5hbWVzcGFjZT15fSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuRGF0YXNldHNOYW1lc3BhY2U9dm9pZCAwO3ZhciBuPXIoMjI4KSxhPXIoMjM0KSxpPXIoMjQwKTtjb25zdCBzPWEuTmFtZXNwYWNlSWRzLmRhdGFzZXRzLmlkO2NsYXNzIG8gZXh0ZW5kcyBpLlhtbE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJkYXRhIixlKX1bbi4kaXNOc0Fnbm9zdGljXSgpe3JldHVybiEwfX1jbGFzcyBjIGV4dGVuZHMgaS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywiZGF0YXNldHMiLCEwKSx0aGlzLmRhdGE9bnVsbCx0aGlzLlNpZ25hdHVyZT1udWxsfVtuLiRvbkNoaWxkXShlKXtjb25zdCB0PWVbbi4kbm9kZU5hbWVdOygiZGF0YSI9PT10JiZlW24uJG5hbWVzcGFjZUlkXT09PXN8fCJTaWduYXR1cmUiPT09dCYmZVtuLiRuYW1lc3BhY2VJZF09PT1hLk5hbWVzcGFjZUlkcy5zaWduYXR1cmUuaWQpJiYodGhpc1t0XT1lKSx0aGlzW24uJGFwcGVuZENoaWxkXShlKX19Y2xhc3MgbHtzdGF0aWNbYS4kYnVpbGRYRkFPYmplY3RdKGUsdCl7aWYobC5oYXNPd25Qcm9wZXJ0eShlKSlyZXR1cm4gbFtlXSh0KX1zdGF0aWMgZGF0YXNldHMoZSl7cmV0dXJuIG5ldyBjKGUpfXN0YXRpYyBkYXRhKGUpe3JldHVybiBuZXcgbyhlKX19dC5EYXRhc2V0c05hbWVzcGFjZT1sfSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTG9jYWxlU2V0TmFtZXNwYWNlPXZvaWQgMDt2YXIgbj1yKDIzNCksYT1yKDI0MCksaT1yKDIzNyk7Y29uc3Qgcz1uLk5hbWVzcGFjZUlkcy5sb2NhbGVTZXQuaWQ7Y2xhc3MgbyBleHRlbmRzIGEuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsImNhbGVuZGFyU3ltYm9scyIsITApLHRoaXMubmFtZT0iZ3JlZ29yaWFuIix0aGlzLmRheU5hbWVzPW5ldyBhLlhGQU9iamVjdEFycmF5KDIpLHRoaXMuZXJhTmFtZXM9bnVsbCx0aGlzLm1lcmlkaWVtTmFtZXM9bnVsbCx0aGlzLm1vbnRoTmFtZXM9bmV3IGEuWEZBT2JqZWN0QXJyYXkoMil9fWNsYXNzIGMgZXh0ZW5kcyBhLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJjdXJyZW5jeVN5bWJvbCIpLHRoaXMubmFtZT0oMCxpLmdldFN0cmluZ09wdGlvbikoZS5uYW1lLFsic3ltYm9sIiwiaXNvbmFtZSIsImRlY2ltYWwiXSl9fWNsYXNzIGwgZXh0ZW5kcyBhLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJjdXJyZW5jeVN5bWJvbHMiLCEwKSx0aGlzLmN1cnJlbmN5U3ltYm9sPW5ldyBhLlhGQU9iamVjdEFycmF5KDMpfX1jbGFzcyBoIGV4dGVuZHMgYS5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywiZGF0ZVBhdHRlcm4iKSx0aGlzLm5hbWU9KDAsaS5nZXRTdHJpbmdPcHRpb24pKGUubmFtZSxbImZ1bGwiLCJsb25nIiwibWVkIiwic2hvcnQiXSl9fWNsYXNzIHUgZXh0ZW5kcyBhLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJkYXRlUGF0dGVybnMiLCEwKSx0aGlzLmRhdGVQYXR0ZXJuPW5ldyBhLlhGQU9iamVjdEFycmF5KDQpfX1jbGFzcyBkIGV4dGVuZHMgYS5Db250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsImRhdGVUaW1lU3ltYm9scyIpfX1jbGFzcyBmIGV4dGVuZHMgYS5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywiZGF5Iil9fWNsYXNzIGcgZXh0ZW5kcyBhLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJkYXlOYW1lcyIsITApLHRoaXMuYWJicj0oMCxpLmdldEludGVnZXIpKHtkYXRhOmUuYWJicixkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pLHRoaXMuZGF5PW5ldyBhLlhGQU9iamVjdEFycmF5KDcpfX1jbGFzcyBwIGV4dGVuZHMgYS5TdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywiZXJhIil9fWNsYXNzIG0gZXh0ZW5kcyBhLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJlcmFOYW1lcyIsITApLHRoaXMuZXJhPW5ldyBhLlhGQU9iamVjdEFycmF5KDIpfX1jbGFzcyBiIGV4dGVuZHMgYS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywibG9jYWxlIiwhMCksdGhpcy5kZXNjPWUuZGVzY3x8IiIsdGhpcy5uYW1lPSJpc29uYW1lIix0aGlzLmNhbGVuZGFyU3ltYm9scz1udWxsLHRoaXMuY3VycmVuY3lTeW1ib2xzPW51bGwsdGhpcy5kYXRlUGF0dGVybnM9bnVsbCx0aGlzLmRhdGVUaW1lU3ltYm9scz1udWxsLHRoaXMubnVtYmVyUGF0dGVybnM9bnVsbCx0aGlzLm51bWJlclN5bWJvbHM9bnVsbCx0aGlzLnRpbWVQYXR0ZXJucz1udWxsLHRoaXMudHlwZUZhY2VzPW51bGx9fWNsYXNzIHkgZXh0ZW5kcyBhLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJsb2NhbGVTZXQiLCEwKSx0aGlzLmxvY2FsZT1uZXcgYS5YRkFPYmplY3RBcnJheX19Y2xhc3MgdyBleHRlbmRzIGEuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsIm1lcmlkaWVtIil9fWNsYXNzIHYgZXh0ZW5kcyBhLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJtZXJpZGllbU5hbWVzIiwhMCksdGhpcy5tZXJpZGllbT1uZXcgYS5YRkFPYmplY3RBcnJheSgyKX19Y2xhc3MgeCBleHRlbmRzIGEuU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsIm1vbnRoIil9fWNsYXNzIFMgZXh0ZW5kcyBhLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJtb250aE5hbWVzIiwhMCksdGhpcy5hYmJyPSgwLGkuZ2V0SW50ZWdlcikoe2RhdGE6ZS5hYmJyLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSksdGhpcy5tb250aD1uZXcgYS5YRkFPYmplY3RBcnJheSgxMil9fWNsYXNzIEEgZXh0ZW5kcyBhLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJudW1iZXJQYXR0ZXJuIiksdGhpcy5uYW1lPSgwLGkuZ2V0U3RyaW5nT3B0aW9uKShlLm5hbWUsWyJmdWxsIiwibG9uZyIsIm1lZCIsInNob3J0Il0pfX1jbGFzcyBrIGV4dGVuZHMgYS5YRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocywibnVtYmVyUGF0dGVybnMiLCEwKSx0aGlzLm51bWJlclBhdHRlcm49bmV3IGEuWEZBT2JqZWN0QXJyYXkoNCl9fWNsYXNzIEMgZXh0ZW5kcyBhLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJudW1iZXJTeW1ib2wiKSx0aGlzLm5hbWU9KDAsaS5nZXRTdHJpbmdPcHRpb24pKGUubmFtZSxbImRlY2ltYWwiLCJncm91cGluZyIsInBlcmNlbnQiLCJtaW51cyIsInplcm8iXSl9fWNsYXNzIE8gZXh0ZW5kcyBhLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJudW1iZXJTeW1ib2xzIiwhMCksdGhpcy5udW1iZXJTeW1ib2w9bmV3IGEuWEZBT2JqZWN0QXJyYXkoNSl9fWNsYXNzIEYgZXh0ZW5kcyBhLlN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJ0aW1lUGF0dGVybiIpLHRoaXMubmFtZT0oMCxpLmdldFN0cmluZ09wdGlvbikoZS5uYW1lLFsiZnVsbCIsImxvbmciLCJtZWQiLCJzaG9ydCJdKX19Y2xhc3MgSSBleHRlbmRzIGEuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsInRpbWVQYXR0ZXJucyIsITApLHRoaXMudGltZVBhdHRlcm49bmV3IGEuWEZBT2JqZWN0QXJyYXkoNCl9fWNsYXNzIFQgZXh0ZW5kcyBhLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJ0eXBlRmFjZSIsITApLHRoaXMubmFtZT0iInxlLm5hbWV9fWNsYXNzIE0gZXh0ZW5kcyBhLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihzLCJ0eXBlRmFjZXMiLCEwKSx0aGlzLnR5cGVGYWNlPW5ldyBhLlhGQU9iamVjdEFycmF5fX1jbGFzcyBFe3N0YXRpY1tuLiRidWlsZFhGQU9iamVjdF0oZSx0KXtpZihFLmhhc093blByb3BlcnR5KGUpKXJldHVybiBFW2VdKHQpfXN0YXRpYyBjYWxlbmRhclN5bWJvbHMoZSl7cmV0dXJuIG5ldyBvKGUpfXN0YXRpYyBjdXJyZW5jeVN5bWJvbChlKXtyZXR1cm4gbmV3IGMoZSl9c3RhdGljIGN1cnJlbmN5U3ltYm9scyhlKXtyZXR1cm4gbmV3IGwoZSl9c3RhdGljIGRhdGVQYXR0ZXJuKGUpe3JldHVybiBuZXcgaChlKX1zdGF0aWMgZGF0ZVBhdHRlcm5zKGUpe3JldHVybiBuZXcgdShlKX1zdGF0aWMgZGF0ZVRpbWVTeW1ib2xzKGUpe3JldHVybiBuZXcgZChlKX1zdGF0aWMgZGF5KGUpe3JldHVybiBuZXcgZihlKX1zdGF0aWMgZGF5TmFtZXMoZSl7cmV0dXJuIG5ldyBnKGUpfXN0YXRpYyBlcmEoZSl7cmV0dXJuIG5ldyBwKGUpfXN0YXRpYyBlcmFOYW1lcyhlKXtyZXR1cm4gbmV3IG0oZSl9c3RhdGljIGxvY2FsZShlKXtyZXR1cm4gbmV3IGIoZSl9c3RhdGljIGxvY2FsZVNldChlKXtyZXR1cm4gbmV3IHkoZSl9c3RhdGljIG1lcmlkaWVtKGUpe3JldHVybiBuZXcgdyhlKX1zdGF0aWMgbWVyaWRpZW1OYW1lcyhlKXtyZXR1cm4gbmV3IHYoZSl9c3RhdGljIG1vbnRoKGUpe3JldHVybiBuZXcgeChlKX1zdGF0aWMgbW9udGhOYW1lcyhlKXtyZXR1cm4gbmV3IFMoZSl9c3RhdGljIG51bWJlclBhdHRlcm4oZSl7cmV0dXJuIG5ldyBBKGUpfXN0YXRpYyBudW1iZXJQYXR0ZXJucyhlKXtyZXR1cm4gbmV3IGsoZSl9c3RhdGljIG51bWJlclN5bWJvbChlKXtyZXR1cm4gbmV3IEMoZSl9c3RhdGljIG51bWJlclN5bWJvbHMoZSl7cmV0dXJuIG5ldyBPKGUpfXN0YXRpYyB0aW1lUGF0dGVybihlKXtyZXR1cm4gbmV3IEYoZSl9c3RhdGljIHRpbWVQYXR0ZXJucyhlKXtyZXR1cm4gbmV3IEkoZSl9c3RhdGljIHR5cGVGYWNlKGUpe3JldHVybiBuZXcgVChlKX1zdGF0aWMgdHlwZUZhY2VzKGUpe3JldHVybiBuZXcgTShlKX19dC5Mb2NhbGVTZXROYW1lc3BhY2U9RX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlNpZ25hdHVyZU5hbWVzcGFjZT12b2lkIDA7dmFyIG49cigyMzQpLGE9cigyNDApO2NvbnN0IGk9bi5OYW1lc3BhY2VJZHMuc2lnbmF0dXJlLmlkO2NsYXNzIHMgZXh0ZW5kcyBhLlhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihpLCJzaWduYXR1cmUiLCEwKX19Y2xhc3Mgb3tzdGF0aWNbbi4kYnVpbGRYRkFPYmplY3RdKGUsdCl7aWYoby5oYXNPd25Qcm9wZXJ0eShlKSlyZXR1cm4gb1tlXSh0KX1zdGF0aWMgc2lnbmF0dXJlKGUpe3JldHVybiBuZXcgcyhlKX19dC5TaWduYXR1cmVOYW1lc3BhY2U9b30sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlN0eWxlc2hlZXROYW1lc3BhY2U9dm9pZCAwO3ZhciBuPXIoMjM0KSxhPXIoMjQwKTtjb25zdCBpPW4uTmFtZXNwYWNlSWRzLnN0eWxlc2hlZXQuaWQ7Y2xhc3MgcyBleHRlbmRzIGEuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGksInN0eWxlc2hlZXQiLCEwKX19Y2xhc3Mgb3tzdGF0aWNbbi4kYnVpbGRYRkFPYmplY3RdKGUsdCl7aWYoby5oYXNPd25Qcm9wZXJ0eShlKSlyZXR1cm4gb1tlXSh0KX1zdGF0aWMgc3R5bGVzaGVldChlKXtyZXR1cm4gbmV3IHMoZSl9fXQuU3R5bGVzaGVldE5hbWVzcGFjZT1vfSwoZSx0LHIpPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuWGRwTmFtZXNwYWNlPXZvaWQgMDt2YXIgbj1yKDIzNCksYT1yKDIyOCksaT1yKDI0MCk7Y29uc3Qgcz1uLk5hbWVzcGFjZUlkcy54ZHAuaWQ7Y2xhc3MgbyBleHRlbmRzIGkuWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHMsInhkcCIsITApLHRoaXMudXVpZD1lLnV1aWR8fCIiLHRoaXMudGltZVN0YW1wPWUudGltZVN0YW1wfHwiIix0aGlzLmNvbmZpZz1udWxsLHRoaXMuY29ubmVjdGlvblNldD1udWxsLHRoaXMuZGF0YXNldHM9bnVsbCx0aGlzLmxvY2FsZVNldD1udWxsLHRoaXMuc3R5bGVzaGVldD1uZXcgaS5YRkFPYmplY3RBcnJheSx0aGlzLnRlbXBsYXRlPW51bGx9W2EuJG9uQ2hpbGRDaGVja10oZSl7Y29uc3QgdD1uLk5hbWVzcGFjZUlkc1tlW2EuJG5vZGVOYW1lXV07cmV0dXJuIHQmJmVbYS4kbmFtZXNwYWNlSWRdPT09dC5pZH19Y2xhc3MgY3tzdGF0aWNbbi4kYnVpbGRYRkFPYmplY3RdKGUsdCl7aWYoYy5oYXNPd25Qcm9wZXJ0eShlKSlyZXR1cm4gY1tlXSh0KX1zdGF0aWMgeGRwKGUpe3JldHVybiBuZXcgbyhlKX19dC5YZHBOYW1lc3BhY2U9Y30sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlhodG1sTmFtZXNwYWNlPXZvaWQgMCxyKDExNikscigxMjYpLHIoMTI4KSxyKDEzMSkscigxMzMpLHIoMTM1KSxyKDEzNyk7dmFyIG49cigyMjgpLGE9cigyMzQpLGk9cigyMzYpLHM9cigyMzcpLG89cigyNDApO2NvbnN0IGM9YS5OYW1lc3BhY2VJZHMueGh0bWwuaWQsbD1TeW1ib2woKSxoPW5ldyBTZXQoWyJjb2xvciIsImZvbnQiLCJmb250LWZhbWlseSIsImZvbnQtc2l6ZSIsImZvbnQtc3RyZXRjaCIsImZvbnQtc3R5bGUiLCJmb250LXdlaWdodCIsIm1hcmdpbiIsIm1hcmdpbi1ib3R0b20iLCJtYXJnaW4tbGVmdCIsIm1hcmdpbi1yaWdodCIsIm1hcmdpbi10b3AiLCJsZXR0ZXItc3BhY2luZyIsImxpbmUtaGVpZ2h0Iiwib3JwaGFucyIsInBhZ2UtYnJlYWstYWZ0ZXIiLCJwYWdlLWJyZWFrLWJlZm9yZSIsInBhZ2UtYnJlYWstaW5zaWRlIiwidGFiLWludGVydmFsIiwidGFiLXN0b3AiLCJ0ZXh0LWFsaWduIiwidGV4dC1kZWNvcmF0aW9uIiwidGV4dC1pbmRlbnQiLCJ2ZXJ0aWNhbC1hbGlnbiIsIndpZG93cyIsImtlcm5pbmctbW9kZSIsInhmYS1mb250LWhvcml6b250YWwtc2NhbGUiLCJ4ZmEtZm9udC12ZXJ0aWNhbC1zY2FsZSIsInhmYS1zcGFjZXJ1biIsInhmYS10YWItc3RvcHMiXSksdT1uZXcgTWFwKFtbInBhZ2UtYnJlYWstYWZ0ZXIiLCJicmVha0FmdGVyIl0sWyJwYWdlLWJyZWFrLWJlZm9yZSIsImJyZWFrQmVmb3JlIl0sWyJwYWdlLWJyZWFrLWluc2lkZSIsImJyZWFrSW5zaWRlIl0sWyJrZXJuaW5nLW1vZGUiLGU9PiJub25lIj09PWU/Im5vbmUiOiJub3JtYWwiXSxbInhmYS1mb250LWhvcml6b250YWwtc2NhbGUiLGU9PiJzY2FsZVgoIi5jb25jYXQoTWF0aC5tYXgoMCxNYXRoLm1pbihwYXJzZUludChlKS8xMDApKS50b0ZpeGVkKDIpLCIpIildLFsieGZhLWZvbnQtdmVydGljYWwtc2NhbGUiLGU9PiJzY2FsZVkoIi5jb25jYXQoTWF0aC5tYXgoMCxNYXRoLm1pbihwYXJzZUludChlKS8xMDApKS50b0ZpeGVkKDIpLCIpIildLFsieGZhLXNwYWNlcnVuIiwiIl0sWyJ4ZmEtdGFiLXN0b3BzIiwiIl0sWyJmb250LXNpemUiLChlLHQpPT4oZT10LmZvbnRTaXplPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpLCgwLGkubWVhc3VyZVRvU3RyaW5nKSguOTkqZSkpXSxbImxldHRlci1zcGFjaW5nIixlPT4oMCxpLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpXSxbImxpbmUtaGVpZ2h0IixlPT4oMCxpLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpXSxbIm1hcmdpbiIsZT0+KDAsaS5tZWFzdXJlVG9TdHJpbmcpKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpKV0sWyJtYXJnaW4tYm90dG9tIixlPT4oMCxpLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpXSxbIm1hcmdpbi1sZWZ0IixlPT4oMCxpLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpXSxbIm1hcmdpbi1yaWdodCIsZT0+KDAsaS5tZWFzdXJlVG9TdHJpbmcpKCgwLHMuZ2V0TWVhc3VyZW1lbnQpKGUpKV0sWyJtYXJnaW4tdG9wIixlPT4oMCxpLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpXSxbInRleHQtaW5kZW50IixlPT4oMCxpLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpXSxbImZvbnQtZmFtaWx5IixlPT5lXSxbInZlcnRpY2FsLWFsaWduIixlPT4oMCxpLm1lYXN1cmVUb1N0cmluZykoKDAscy5nZXRNZWFzdXJlbWVudCkoZSkpXV0pLGQ9L1xzKy9nLGY9L1tcclxuXSsvZyxnPS9cclxuPy9nO2Z1bmN0aW9uIHAoZSx0LHIpe2NvbnN0IGE9T2JqZWN0LmNyZWF0ZShudWxsKTtpZighZSlyZXR1cm4gYTtjb25zdCBvPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGNvbnN0W3Qscl1vZiBlLnNwbGl0KCI7IikubWFwKChlPT5lLnNwbGl0KCI6IiwyKSkpKXtjb25zdCBlPXUuZ2V0KHQpO2lmKCIiPT09ZSljb250aW51ZTtsZXQgbj1yO2UmJihuPSJzdHJpbmciPT10eXBlb2YgZT9lOmUocixvKSksdC5lbmRzV2l0aCgic2NhbGUiKT9hLnRyYW5zZm9ybT1hLnRyYW5zZm9ybT8iIi5jb25jYXQoYVt0XSwiICIpLmNvbmNhdChuKTpuOmFbdC5yZXBsYWNlQWxsKC8tKFthLXpBLVpdKS9nLCgoZSx0KT0+dC50b1VwcGVyQ2FzZSgpKSldPW59aWYoYS5mb250RmFtaWx5JiYoMCxpLnNldEZvbnRGYW1pbHkpKHt0eXBlZmFjZTphLmZvbnRGYW1pbHksd2VpZ2h0OmEuZm9udFdlaWdodHx8Im5vcm1hbCIscG9zdHVyZTphLmZvbnRTdHlsZXx8Im5vcm1hbCIsc2l6ZTpvLmZvbnRTaXplfHwwfSx0LHRbbi4kZ2xvYmFsRGF0YV0uZm9udEZpbmRlcixhKSxyJiZhLnZlcnRpY2FsQWxpZ24mJiIwcHgiIT09YS52ZXJ0aWNhbEFsaWduJiZhLmZvbnRTaXplKXtjb25zdCBlPS41ODMsdD0uMzMzLHI9KDAscy5nZXRNZWFzdXJlbWVudCkoYS5mb250U2l6ZSk7YS5mb250U2l6ZT0oMCxpLm1lYXN1cmVUb1N0cmluZykociplKSxhLnZlcnRpY2FsQWxpZ249KDAsaS5tZWFzdXJlVG9TdHJpbmcpKE1hdGguc2lnbigoMCxzLmdldE1lYXN1cmVtZW50KShhLnZlcnRpY2FsQWxpZ24pKSpyKnQpfXJldHVybiByJiZhLmZvbnRTaXplJiYoYS5mb250U2l6ZT0iY2FsYygiLmNvbmNhdChhLmZvbnRTaXplLCIgKiB2YXIoLS1zY2FsZS1mYWN0b3IpKSIpKSwoMCxpLmZpeFRleHRJbmRlbnQpKGEpLGF9Y29uc3QgbT1uZXcgU2V0KFsiYm9keSIsImh0bWwiXSk7Y2xhc3MgYiBleHRlbmRzIG8uWG1sT2JqZWN0e2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoYyx0KSx0aGlzW2xdPSExLHRoaXMuc3R5bGU9ZS5zdHlsZXx8IiJ9W24uJGNsZWFuXShlKXtzdXBlcltuLiRjbGVhbl0oZSksdGhpcy5zdHlsZT1mdW5jdGlvbihlKXtyZXR1cm4gZS5zdHlsZT9lLnN0eWxlLnRyaW0oKS5zcGxpdCgvXHMqO1xzKi8pLmZpbHRlcigoZT0+ISFlKSkubWFwKChlPT5lLnNwbGl0KC9ccyo6XHMqLywyKSkpLmZpbHRlcigodD0+e2xldFtyLGFdPXQ7cmV0dXJuImZvbnQtZmFtaWx5Ij09PXImJmVbbi4kZ2xvYmFsRGF0YV0udXNlZFR5cGVmYWNlcy5hZGQoYSksaC5oYXMocil9KSkubWFwKChlPT5lLmpvaW4oIjoiKSkpLmpvaW4oIjsiKToiIn0odGhpcyl9W24uJGFjY2VwdFdoaXRlc3BhY2VdKCl7cmV0dXJuIW0uaGFzKHRoaXNbbi4kbm9kZU5hbWVdKX1bbi4kb25UZXh0XShlKXthcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdP3RoaXNbbF09ITA6KGU9ZS5yZXBsYWNlQWxsKGYsIiIpLHRoaXMuc3R5bGUuaW5jbHVkZXMoInhmYS1zcGFjZXJ1bjp5ZXMiKXx8KGU9ZS5yZXBsYWNlQWxsKGQsIiAiKSkpLGUmJih0aGlzW24uJGNvbnRlbnRdKz1lKX1bbi4kcHVzaEdseXBoc10oZSl7bGV0IHQ9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXTtjb25zdCByPU9iamVjdC5jcmVhdGUobnVsbCksYT17dG9wOk5hTixib3R0b206TmFOLGxlZnQ6TmFOLHJpZ2h0Ok5hTn07bGV0IGk9bnVsbDtmb3IoY29uc3RbZSx0XW9mIHRoaXMuc3R5bGUuc3BsaXQoIjsiKS5tYXAoKGU9PmUuc3BsaXQoIjoiLDIpKSkpc3dpdGNoKGUpe2Nhc2UiZm9udC1mYW1pbHkiOnIudHlwZWZhY2U9KDAscy5zdHJpcFF1b3RlcykodCk7YnJlYWs7Y2FzZSJmb250LXNpemUiOnIuc2l6ZT0oMCxzLmdldE1lYXN1cmVtZW50KSh0KTticmVhaztjYXNlImZvbnQtd2VpZ2h0IjpyLndlaWdodD10O2JyZWFrO2Nhc2UiZm9udC1zdHlsZSI6ci5wb3N0dXJlPXQ7YnJlYWs7Y2FzZSJsZXR0ZXItc3BhY2luZyI6ci5sZXR0ZXJTcGFjaW5nPSgwLHMuZ2V0TWVhc3VyZW1lbnQpKHQpO2JyZWFrO2Nhc2UibWFyZ2luIjpjb25zdCBlPXQuc3BsaXQoLyBcdC8pLm1hcCgoZT0+KDAscy5nZXRNZWFzdXJlbWVudCkoZSkpKTtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMTphLnRvcD1hLmJvdHRvbT1hLmxlZnQ9YS5yaWdodD1lWzBdO2JyZWFrO2Nhc2UgMjphLnRvcD1hLmJvdHRvbT1lWzBdLGEubGVmdD1hLnJpZ2h0PWVbMV07YnJlYWs7Y2FzZSAzOmEudG9wPWVbMF0sYS5ib3R0b209ZVsyXSxhLmxlZnQ9YS5yaWdodD1lWzFdO2JyZWFrO2Nhc2UgNDphLnRvcD1lWzBdLGEubGVmdD1lWzFdLGEuYm90dG9tPWVbMl0sYS5yaWdodD1lWzNdfWJyZWFrO2Nhc2UibWFyZ2luLXRvcCI6YS50b3A9KDAscy5nZXRNZWFzdXJlbWVudCkodCk7YnJlYWs7Y2FzZSJtYXJnaW4tYm90dG9tIjphLmJvdHRvbT0oMCxzLmdldE1lYXN1cmVtZW50KSh0KTticmVhaztjYXNlIm1hcmdpbi1sZWZ0IjphLmxlZnQ9KDAscy5nZXRNZWFzdXJlbWVudCkodCk7YnJlYWs7Y2FzZSJtYXJnaW4tcmlnaHQiOmEucmlnaHQ9KDAscy5nZXRNZWFzdXJlbWVudCkodCk7YnJlYWs7Y2FzZSJsaW5lLWhlaWdodCI6aT0oMCxzLmdldE1lYXN1cmVtZW50KSh0KX1pZihlLnB1c2hEYXRhKHIsYSxpKSx0aGlzW24uJGNvbnRlbnRdKWUuYWRkU3RyaW5nKHRoaXNbbi4kY29udGVudF0pO2Vsc2UgZm9yKGNvbnN0IHQgb2YgdGhpc1tuLiRnZXRDaGlsZHJlbl0oKSkiI3RleHQiIT09dFtuLiRub2RlTmFtZV0/dFtuLiRwdXNoR2x5cGhzXShlKTplLmFkZFN0cmluZyh0W24uJGNvbnRlbnRdKTt0JiZlLnBvcEZvbnQoKX1bbi4kdG9IVE1MXShlKXtjb25zdCB0PVtdO2lmKHRoaXNbbi4kZXh0cmFdPXtjaGlsZHJlbjp0fSx0aGlzW24uJGNoaWxkcmVuVG9IVE1MXSh7fSksMD09PXQubGVuZ3RoJiYhdGhpc1tuLiRjb250ZW50XSlyZXR1cm4gcy5IVE1MUmVzdWx0LkVNUFRZO2xldCByO3JldHVybiByPXRoaXNbbF0/dGhpc1tuLiRjb250ZW50XT90aGlzW24uJGNvbnRlbnRdLnJlcGxhY2VBbGwoZywiXG4iKTp2b2lkIDA6dGhpc1tuLiRjb250ZW50XXx8dm9pZCAwLHMuSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOnRoaXNbbi4kbm9kZU5hbWVdLGF0dHJpYnV0ZXM6e2hyZWY6dGhpcy5ocmVmLHN0eWxlOnAodGhpcy5zdHlsZSx0aGlzLHRoaXNbbF0pfSxjaGlsZHJlbjp0LHZhbHVlOnJ9KX19Y2xhc3MgeSBleHRlbmRzIGJ7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwiYSIpLHRoaXMuaHJlZj0oMCxpLmZpeFVSTCkoZS5ocmVmKXx8IiJ9fWNsYXNzIHcgZXh0ZW5kcyBie2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsImIiKX1bbi4kcHVzaEdseXBoc10oZSl7ZS5wdXNoRm9udCh7d2VpZ2h0OiJib2xkIn0pLHN1cGVyW24uJHB1c2hHbHlwaHNdKGUpLGUucG9wRm9udCgpfX1jbGFzcyB2IGV4dGVuZHMgYntjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJib2R5Iil9W24uJHRvSFRNTF0oZSl7Y29uc3QgdD1zdXBlcltuLiR0b0hUTUxdKGUpLHtodG1sOnJ9PXQ7cmV0dXJuIHI/KHIubmFtZT0iZGl2IixyLmF0dHJpYnV0ZXMuY2xhc3M9WyJ4ZmFSaWNoIl0sdCk6cy5IVE1MUmVzdWx0LkVNUFRZfX1jbGFzcyB4IGV4dGVuZHMgYntjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJiciIpfVtuLiR0ZXh0XSgpe3JldHVybiJcbiJ9W24uJHB1c2hHbHlwaHNdKGUpe2UuYWRkU3RyaW5nKCJcbiIpfVtuLiR0b0hUTUxdKGUpe3JldHVybiBzLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiYnIifSl9fWNsYXNzIFMgZXh0ZW5kcyBie2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsImh0bWwiKX1bbi4kdG9IVE1MXShlKXtjb25zdCB0PVtdO2lmKHRoaXNbbi4kZXh0cmFdPXtjaGlsZHJlbjp0fSx0aGlzW24uJGNoaWxkcmVuVG9IVE1MXSh7fSksMD09PXQubGVuZ3RoKXJldHVybiBzLkhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiZGl2IixhdHRyaWJ1dGVzOntjbGFzczpbInhmYVJpY2giXSxzdHlsZTp7fX0sdmFsdWU6dGhpc1tuLiRjb250ZW50XXx8IiJ9KTtpZigxPT09dC5sZW5ndGgpe3ZhciByO2NvbnN0IGU9dFswXTtpZihudWxsIT09KHI9ZS5hdHRyaWJ1dGVzKSYmdm9pZCAwIT09ciYmci5jbGFzcy5pbmNsdWRlcygieGZhUmljaCIpKXJldHVybiBzLkhUTUxSZXN1bHQuc3VjY2VzcyhlKX1yZXR1cm4gcy5IVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFSaWNoIl0sc3R5bGU6e319LGNoaWxkcmVuOnR9KX19Y2xhc3MgQSBleHRlbmRzIGJ7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwiaSIpfVtuLiRwdXNoR2x5cGhzXShlKXtlLnB1c2hGb250KHtwb3N0dXJlOiJpdGFsaWMifSksc3VwZXJbbi4kcHVzaEdseXBoc10oZSksZS5wb3BGb250KCl9fWNsYXNzIGsgZXh0ZW5kcyBie2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsImxpIil9fWNsYXNzIEMgZXh0ZW5kcyBie2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsIm9sIil9fWNsYXNzIE8gZXh0ZW5kcyBie2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsInAiKX1bbi4kcHVzaEdseXBoc10oZSl7c3VwZXJbbi4kcHVzaEdseXBoc10oZSwhMSksZS5hZGRTdHJpbmcoIlxuIiksZS5hZGRQYXJhKCksZS5wb3BGb250KCl9W24uJHRleHRdKCl7cmV0dXJuIHRoaXNbbi4kZ2V0UGFyZW50XSgpW24uJGdldENoaWxkcmVuXSgpLmF0KC0xKT09PXRoaXM/c3VwZXJbbi4kdGV4dF0oKTpzdXBlcltuLiR0ZXh0XSgpKyJcbiJ9fWNsYXNzIEYgZXh0ZW5kcyBie2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsInNwYW4iKX19Y2xhc3MgSSBleHRlbmRzIGJ7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwic3ViIil9fWNsYXNzIFQgZXh0ZW5kcyBie2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsInN1cCIpfX1jbGFzcyBNIGV4dGVuZHMgYntjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJ1bCIpfX1jbGFzcyBFe3N0YXRpY1thLiRidWlsZFhGQU9iamVjdF0oZSx0KXtpZihFLmhhc093blByb3BlcnR5KGUpKXJldHVybiBFW2VdKHQpfXN0YXRpYyBhKGUpe3JldHVybiBuZXcgeShlKX1zdGF0aWMgYihlKXtyZXR1cm4gbmV3IHcoZSl9c3RhdGljIGJvZHkoZSl7cmV0dXJuIG5ldyB2KGUpfXN0YXRpYyBicihlKXtyZXR1cm4gbmV3IHgoZSl9c3RhdGljIGh0bWwoZSl7cmV0dXJuIG5ldyBTKGUpfXN0YXRpYyBpKGUpe3JldHVybiBuZXcgQShlKX1zdGF0aWMgbGkoZSl7cmV0dXJuIG5ldyBrKGUpfXN0YXRpYyBvbChlKXtyZXR1cm4gbmV3IEMoZSl9c3RhdGljIHAoZSl7cmV0dXJuIG5ldyBPKGUpfXN0YXRpYyBzcGFuKGUpe3JldHVybiBuZXcgRihlKX1zdGF0aWMgc3ViKGUpe3JldHVybiBuZXcgSShlKX1zdGF0aWMgc3VwKGUpe3JldHVybiBuZXcgVChlKX1zdGF0aWMgdWwoZSl7cmV0dXJuIG5ldyBNKGUpfX10LlhodG1sTmFtZXNwYWNlPUV9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Vbmtub3duTmFtZXNwYWNlPXZvaWQgMDt2YXIgbj1yKDIzNCksYT1yKDI0MCk7Y2xhc3MgaXtjb25zdHJ1Y3RvcihlKXt0aGlzLm5hbWVzcGFjZUlkPWV9W24uJGJ1aWxkWEZBT2JqZWN0XShlLHQpe3JldHVybiBuZXcgYS5YbWxPYmplY3QodGhpcy5uYW1lc3BhY2VJZCxlLHQpfX10LlVua25vd25OYW1lc3BhY2U9aX0sKGUsdCxyKT0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkRhdGFzZXRSZWFkZXI9dm9pZCAwLHIoMik7dmFyIG49cigxNDQpLGE9cigxNDkpLGk9cigyMTcpO2Z1bmN0aW9uIHMoZSl7dHJ5e3JldHVybigwLG4uc3RyaW5nVG9VVEY4U3RyaW5nKShlKX1jYXRjaCh0KXtyZXR1cm4oMCxuLndhcm4pKCdVVEYtOCBkZWNvZGluZyBmYWlsZWQ6ICInLmNvbmNhdCh0LCciLicpKSxlfX1jbGFzcyBvIGV4dGVuZHMgaS5TaW1wbGVYTUxQYXJzZXJ7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSksdGhpcy5ub2RlPW51bGx9b25FbmRFbGVtZW50KGUpe2NvbnN0IHQ9c3VwZXIub25FbmRFbGVtZW50KGUpO2lmKHQmJiJ4ZmE6ZGF0YXNldHMiPT09ZSl0aHJvdyB0aGlzLm5vZGU9dCxuZXcgRXJyb3IoIkFib3J0aW5nIERhdGFzZXRYTUxQYXJzZXIuIil9fXQuRGF0YXNldFJlYWRlcj1jbGFzc3tjb25zdHJ1Y3RvcihlKXtpZihlLmRhdGFzZXRzKXRoaXMubm9kZT1uZXcgaS5TaW1wbGVYTUxQYXJzZXIoe2hhc0F0dHJpYnV0ZXM6ITB9KS5wYXJzZUZyb21TdHJpbmcoZS5kYXRhc2V0cykuZG9jdW1lbnRFbGVtZW50O2Vsc2V7Y29uc3QgdD1uZXcgbyh7aGFzQXR0cmlidXRlczohMH0pO3RyeXt0LnBhcnNlRnJvbVN0cmluZyhlWyJ4ZHA6eGRwIl0pfWNhdGNoKGUpe310aGlzLm5vZGU9dC5ub2RlfX1nZXRWYWx1ZShlKXtpZighdGhpcy5ub2RlfHwhZSlyZXR1cm4iIjtjb25zdCB0PXRoaXMubm9kZS5zZWFyY2hOb2RlKCgwLGEucGFyc2VYRkFQYXRoKShlKSwwKTtpZighdClyZXR1cm4iIjtjb25zdCByPXQuZmlyc3RDaGlsZDtyZXR1cm4idmFsdWUiPT09KG51bGw9PXI/dm9pZCAwOnIubm9kZU5hbWUpP3QuY2hpbGRyZW4ubWFwKChlPT5zKGUudGV4dENvbnRlbnQpKSk6cyh0LnRleHRDb250ZW50KX19fSwoZSx0LHIpPT57dmFyIG47T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuWFJlZj12b2lkIDAscigxMTYpLHIoMTI2KSxyKDEyOCkscigxMzEpLHIoMTMzKSxyKDEzNSkscigxMzcpLHIoODQpLHIoOTMpLHIoOTQpLHIoOTcpLHIoOTkpLHIoMTAxKSxyKDEwNSkscigxMDgpLHIoMTE1KSxyKDEzOSkscigyKTt2YXIgYT1yKDE0NCksaT1yKDE1MCkscz1yKDE2Niksbz1yKDE0OSksbD1yKDE1MSksZD1yKDIxOCk7dC5YUmVmPShuPW5ldyBXZWFrTWFwLGNsYXNze2NvbnN0cnVjdG9yKGUsdCl7Yyh0aGlzLG4se3dyaXRhYmxlOiEwLHZhbHVlOm51bGx9KSx0aGlzLnN0cmVhbT1lLHRoaXMucGRmTWFuYWdlcj10LHRoaXMuZW50cmllcz1bXSx0aGlzLl94cmVmU3Rtcz1uZXcgU2V0LHRoaXMuX2NhY2hlTWFwPW5ldyBNYXAsdGhpcy5fcGVuZGluZ1JlZnM9bmV3IGkuUmVmU2V0LHRoaXMuX25ld1BlcnNpc3RlbnRSZWZOdW09bnVsbCx0aGlzLl9uZXdUZW1wb3JhcnlSZWZOdW09bnVsbH1nZXROZXdQZXJzaXN0ZW50UmVmKGUpe251bGw9PT10aGlzLl9uZXdQZXJzaXN0ZW50UmVmTnVtJiYodGhpcy5fbmV3UGVyc2lzdGVudFJlZk51bT10aGlzLmVudHJpZXMubGVuZ3RofHwxKTtjb25zdCB0PXRoaXMuX25ld1BlcnNpc3RlbnRSZWZOdW0rKztyZXR1cm4gdGhpcy5fY2FjaGVNYXAuc2V0KHQsZSksaS5SZWYuZ2V0KHQsMCl9Z2V0TmV3VGVtcG9yYXJ5UmVmKCl7cmV0dXJuIG51bGw9PT10aGlzLl9uZXdUZW1wb3JhcnlSZWZOdW0mJih0aGlzLl9uZXdUZW1wb3JhcnlSZWZOdW09dGhpcy5lbnRyaWVzLmxlbmd0aHx8MSksaS5SZWYuZ2V0KHRoaXMuX25ld1RlbXBvcmFyeVJlZk51bSsrLDApfXJlc2V0TmV3VGVtcG9yYXJ5UmVmKCl7dGhpcy5fbmV3VGVtcG9yYXJ5UmVmTnVtPW51bGx9c2V0U3RhcnRYUmVmKGUpe3RoaXMuc3RhcnRYUmVmUXVldWU9W2VdfXBhcnNlKCl7bGV0IGUsdCxyLG49YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtuPygoMCxhLndhcm4pKCJJbmRleGluZyBhbGwgUERGIG9iamVjdHMiKSxlPXRoaXMuaW5kZXhPYmplY3RzKCkpOmU9dGhpcy5yZWFkWFJlZigpLGUuYXNzaWduWHJlZih0aGlzKSx0aGlzLnRyYWlsZXI9ZTt0cnl7dD1lLmdldCgiRW5jcnlwdCIpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBvLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsYS53YXJuKSgnWFJlZi5wYXJzZSAtIEludmFsaWQgIkVuY3J5cHQiIHJlZmVyZW5jZTogIicuY29uY2F0KGUsJyIuJykpfWlmKHQgaW5zdGFuY2VvZiBpLkRpY3Qpe2NvbnN0IHI9ZS5nZXQoIklEIiksbj1udWxsIT1yJiZyLmxlbmd0aD9yWzBdOiIiO3Quc3VwcHJlc3NFbmNyeXB0aW9uPSEwLHRoaXMuZW5jcnlwdD1uZXcgZC5DaXBoZXJUcmFuc2Zvcm1GYWN0b3J5KHQsbix0aGlzLnBkZk1hbmFnZXIucGFzc3dvcmQpfXRyeXtyPWUuZ2V0KCJSb290Iil9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIG8uTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxhLndhcm4pKCdYUmVmLnBhcnNlIC0gSW52YWxpZCAiUm9vdCIgcmVmZXJlbmNlOiAiJy5jb25jYXQoZSwnIi4nKSl9aWYociBpbnN0YW5jZW9mIGkuRGljdCl0cnl7aWYoci5nZXQoIlBhZ2VzIilpbnN0YW5jZW9mIGkuRGljdClyZXR1cm4gdm9pZCh0aGlzLnJvb3Q9cil9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIG8uTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxhLndhcm4pKCdYUmVmLnBhcnNlIC0gSW52YWxpZCAiUGFnZXMiIHJlZmVyZW5jZTogIicuY29uY2F0KGUsJyIuJykpfWlmKCFuKXRocm93IG5ldyBvLlhSZWZQYXJzZUV4Y2VwdGlvbjt0aHJvdyBuZXcgYS5JbnZhbGlkUERGRXhjZXB0aW9uKCJJbnZhbGlkIFJvb3QgcmVmZXJlbmNlLiIpfXByb2Nlc3NYUmVmVGFibGUoZSl7InRhYmxlU3RhdGUiaW4gdGhpc3x8KHRoaXMudGFibGVTdGF0ZT17ZW50cnlOdW06MCxzdHJlYW1Qb3M6ZS5sZXhlci5zdHJlYW0ucG9zLHBhcnNlckJ1ZjE6ZS5idWYxLHBhcnNlckJ1ZjI6ZS5idWYyfSk7Y29uc3QgdD10aGlzLnJlYWRYUmVmVGFibGUoZSk7aWYoISgwLGkuaXNDbWQpKHQsInRyYWlsZXIiKSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiSW52YWxpZCBYUmVmIHRhYmxlOiBjb3VsZCBub3QgZmluZCB0cmFpbGVyIGRpY3Rpb25hcnkiKTtsZXQgcj1lLmdldE9iaigpO2lmKHIgaW5zdGFuY2VvZiBpLkRpY3R8fCFyLmRpY3R8fChyPXIuZGljdCksIShyIGluc3RhbmNlb2YgaS5EaWN0KSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiSW52YWxpZCBYUmVmIHRhYmxlOiBjb3VsZCBub3QgcGFyc2UgdHJhaWxlciBkaWN0aW9uYXJ5Iik7cmV0dXJuIGRlbGV0ZSB0aGlzLnRhYmxlU3RhdGUscn1yZWFkWFJlZlRhYmxlKGUpe2NvbnN0IHQ9ZS5sZXhlci5zdHJlYW0scj10aGlzLnRhYmxlU3RhdGU7bGV0IG47Zm9yKHQucG9zPXIuc3RyZWFtUG9zLGUuYnVmMT1yLnBhcnNlckJ1ZjEsZS5idWYyPXIucGFyc2VyQnVmMjs7KXtpZighKCJmaXJzdEVudHJ5TnVtImluIHIpfHwhKCJlbnRyeUNvdW50ImluIHIpKXtpZigoMCxpLmlzQ21kKShuPWUuZ2V0T2JqKCksInRyYWlsZXIiKSlicmVhaztyLmZpcnN0RW50cnlOdW09bixyLmVudHJ5Q291bnQ9ZS5nZXRPYmooKX1sZXQgcz1yLmZpcnN0RW50cnlOdW07Y29uc3Qgbz1yLmVudHJ5Q291bnQ7aWYoIU51bWJlci5pc0ludGVnZXIocyl8fCFOdW1iZXIuaXNJbnRlZ2VyKG8pKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgdGFibGU6IHdyb25nIHR5cGVzIGluIHN1YnNlY3Rpb24gaGVhZGVyIik7Zm9yKGxldCBuPXIuZW50cnlOdW07bjxvO24rKyl7ci5zdHJlYW1Qb3M9dC5wb3Msci5lbnRyeU51bT1uLHIucGFyc2VyQnVmMT1lLmJ1ZjEsci5wYXJzZXJCdWYyPWUuYnVmMjtjb25zdCBjPXt9O2Mub2Zmc2V0PWUuZ2V0T2JqKCksYy5nZW49ZS5nZXRPYmooKTtjb25zdCBsPWUuZ2V0T2JqKCk7aWYobCBpbnN0YW5jZW9mIGkuQ21kKXN3aXRjaChsLmNtZCl7Y2FzZSJmIjpjLmZyZWU9ITA7YnJlYWs7Y2FzZSJuIjpjLnVuY29tcHJlc3NlZD0hMH1pZighTnVtYmVyLmlzSW50ZWdlcihjLm9mZnNldCl8fCFOdW1iZXIuaXNJbnRlZ2VyKGMuZ2VuKXx8IWMuZnJlZSYmIWMudW5jb21wcmVzc2VkKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJJbnZhbGlkIGVudHJ5IGluIFhSZWYgc3Vic2VjdGlvbjogIi5jb25jYXQocywiLCAiKS5jb25jYXQobykpOzA9PT1uJiZjLmZyZWUmJjE9PT1zJiYocz0wKSx0aGlzLmVudHJpZXNbbitzXXx8KHRoaXMuZW50cmllc1tuK3NdPWMpfXIuZW50cnlOdW09MCxyLnN0cmVhbVBvcz10LnBvcyxyLnBhcnNlckJ1ZjE9ZS5idWYxLHIucGFyc2VyQnVmMj1lLmJ1ZjIsZGVsZXRlIHIuZmlyc3RFbnRyeU51bSxkZWxldGUgci5lbnRyeUNvdW50fWlmKHRoaXMuZW50cmllc1swXSYmIXRoaXMuZW50cmllc1swXS5mcmVlKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgdGFibGU6IHVuZXhwZWN0ZWQgZmlyc3Qgb2JqZWN0Iik7cmV0dXJuIG59cHJvY2Vzc1hSZWZTdHJlYW0oZSl7aWYoISgic3RyZWFtU3RhdGUiaW4gdGhpcykpe2NvbnN0IHQ9ZS5kaWN0LHI9dC5nZXQoIlciKTtsZXQgbj10LmdldCgiSW5kZXgiKTtufHwobj1bMCx0LmdldCgiU2l6ZSIpXSksdGhpcy5zdHJlYW1TdGF0ZT17ZW50cnlSYW5nZXM6bixieXRlV2lkdGhzOnIsZW50cnlOdW06MCxzdHJlYW1Qb3M6ZS5wb3N9fXJldHVybiB0aGlzLnJlYWRYUmVmU3RyZWFtKGUpLGRlbGV0ZSB0aGlzLnN0cmVhbVN0YXRlLGUuZGljdH1yZWFkWFJlZlN0cmVhbShlKXtjb25zdCB0PXRoaXMuc3RyZWFtU3RhdGU7ZS5wb3M9dC5zdHJlYW1Qb3M7Y29uc3RbcixuLGldPXQuYnl0ZVdpZHRocyxzPXQuZW50cnlSYW5nZXM7Zm9yKDtzLmxlbmd0aD4wOyl7Y29uc3RbbyxjXT1zO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKG8pfHwhTnVtYmVyLmlzSW50ZWdlcihjKSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiSW52YWxpZCBYUmVmIHJhbmdlIGZpZWxkczogIi5jb25jYXQobywiLCAiKS5jb25jYXQoYykpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKHIpfHwhTnVtYmVyLmlzSW50ZWdlcihuKXx8IU51bWJlci5pc0ludGVnZXIoaSkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiBlbnRyeSBmaWVsZHMgbGVuZ3RoOiAiLmNvbmNhdChvLCIsICIpLmNvbmNhdChjKSk7Zm9yKGxldCBzPXQuZW50cnlOdW07czxjOysrcyl7dC5lbnRyeU51bT1zLHQuc3RyZWFtUG9zPWUucG9zO2xldCBjPTAsbD0wLGg9MDtmb3IobGV0IHQ9MDt0PHI7Kyt0KXtjb25zdCB0PWUuZ2V0Qnl0ZSgpO2lmKC0xPT09dCl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiSW52YWxpZCBYUmVmIGJ5dGVXaWR0aHMgJ3R5cGUnLiIpO2M9Yzw8OHx0fTA9PT1yJiYoYz0xKTtmb3IobGV0IHQ9MDt0PG47Kyt0KXtjb25zdCB0PWUuZ2V0Qnl0ZSgpO2lmKC0xPT09dCl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiSW52YWxpZCBYUmVmIGJ5dGVXaWR0aHMgJ29mZnNldCcuIik7bD1sPDw4fHR9Zm9yKGxldCB0PTA7dDxpOysrdCl7Y29uc3QgdD1lLmdldEJ5dGUoKTtpZigtMT09PXQpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiBieXRlV2lkdGhzICdnZW5lcmF0aW9uJy4iKTtoPWg8PDh8dH1jb25zdCB1PXt9O3N3aXRjaCh1Lm9mZnNldD1sLHUuZ2VuPWgsYyl7Y2FzZSAwOnUuZnJlZT0hMDticmVhaztjYXNlIDE6dS51bmNvbXByZXNzZWQ9ITA7YnJlYWs7Y2FzZSAyOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiBlbnRyeSB0eXBlOiAiLmNvbmNhdChjKSl9dGhpcy5lbnRyaWVzW28rc118fCh0aGlzLmVudHJpZXNbbytzXT11KX10LmVudHJ5TnVtPTAsdC5zdHJlYW1Qb3M9ZS5wb3Mscy5zcGxpY2UoMCwyKX19aW5kZXhPYmplY3RzKCl7ZnVuY3Rpb24gZShlLHQpe2xldCByPSIiLG49ZVt0XTtmb3IoOzEwIT09biYmMTMhPT1uJiY2MCE9PW4mJiEoKyt0Pj1lLmxlbmd0aCk7KXIrPVN0cmluZy5mcm9tQ2hhckNvZGUobiksbj1lW3RdO3JldHVybiByfWZ1bmN0aW9uIHQoZSx0LHIpe2NvbnN0IG49ci5sZW5ndGgsYT1lLmxlbmd0aDtsZXQgaT0wO2Zvcig7dDxhOyl7bGV0IGE9MDtmb3IoO2E8biYmZVt0K2FdPT09clthXTspKythO2lmKGE+PW4pYnJlYWs7dCsrLGkrK31yZXR1cm4gaX1jb25zdCByPS9cYihlbmRvYmp8XGQrXHMrXGQrXHMrb2JqfHhyZWZ8dHJhaWxlclxzKjw8KVxiL2csbj0vXGIoc3RhcnR4cmVmfFxkK1xzK1xkK1xzK29iailcYi9nLGM9L14oXGQrKVxzKyhcZCspXHMrb2JqXGIvLGw9bmV3IFVpbnQ4QXJyYXkoWzExNiwxMTQsOTcsMTA1LDEwOCwxMDEsMTE0XSksaD1uZXcgVWludDhBcnJheShbMTE1LDExNiw5NywxMTQsMTE2LDEyMCwxMTQsMTAxLDEwMl0pLHU9bmV3IFVpbnQ4QXJyYXkoWzQ3LDg4LDgyLDEwMSwxMDJdKTt0aGlzLmVudHJpZXMubGVuZ3RoPTAsdGhpcy5fY2FjaGVNYXAuY2xlYXIoKTtjb25zdCBkPXRoaXMuc3RyZWFtO2QucG9zPTA7Y29uc3QgZj1kLmdldEJ5dGVzKCksZz0oMCxhLmJ5dGVzVG9TdHJpbmcpKGYpLHA9Zi5sZW5ndGg7bGV0IG09ZC5zdGFydDtjb25zdCBiPVtdLHk9W107Zm9yKDttPHA7KXtsZXQgaT1mW21dO2lmKDk9PT1pfHwxMD09PWl8fDEzPT09aXx8MzI9PT1pKXsrK207Y29udGludWV9aWYoMzc9PT1pKXtkb3tpZigrK20sbT49cClicmVhaztpPWZbbV19d2hpbGUoMTAhPT1pJiYxMyE9PWkpO2NvbnRpbnVlfWNvbnN0IHc9ZShmLG0pO2xldCB2O2lmKHcuc3RhcnRzV2l0aCgieHJlZiIpJiYoND09PXcubGVuZ3RofHwvXHMvLnRlc3Qod1s0XSkpKW0rPXQoZixtLGwpLGIucHVzaChtKSxtKz10KGYsbSxoKTtlbHNlIGlmKHY9Yy5leGVjKHcpKXtjb25zdCBlPTB8dlsxXSxuPTB8dlsyXSxpPW0rdy5sZW5ndGg7bGV0IGMsbD0hMTtpZih0aGlzLmVudHJpZXNbZV0pe2lmKHRoaXMuZW50cmllc1tlXS5nZW49PT1uKXRyeXtuZXcgcy5QYXJzZXIoe2xleGVyOm5ldyBzLkxleGVyKGQubWFrZVN1YlN0cmVhbShpKSl9KS5nZXRPYmooKSxsPSEwfWNhdGNoKHIpe3IgaW5zdGFuY2VvZiBvLlBhcnNlckVPRkV4Y2VwdGlvbj8oMCxhLndhcm4pKCJpbmRleE9iamVjdHMgLS0gY2hlY2tpbmcgb2JqZWN0ICgiLmNvbmNhdCh3LCcpOiAiJykuY29uY2F0KHIsJyIuJykpOmw9ITB9fWVsc2UgbD0hMDtsJiYodGhpcy5lbnRyaWVzW2VdPXtvZmZzZXQ6bS1kLnN0YXJ0LGdlbjpuLHVuY29tcHJlc3NlZDohMH0pLHIubGFzdEluZGV4PWk7Y29uc3QgaD1yLmV4ZWMoZyk7aD8oYz1yLmxhc3RJbmRleCsxLW0sImVuZG9iaiIhPT1oWzFdJiYoKDAsYS53YXJuKSgnaW5kZXhPYmplY3RzOiBGb3VuZCAiJy5jb25jYXQoaFsxXSwnIiBpbnNpZGUgb2YgYW5vdGhlciAib2JqIiwgY2F1c2VkIGJ5IG1pc3NpbmcgImVuZG9iaiIgLS0gdHJ5aW5nIHRvIHJlY292ZXIuJykpLGMtPWhbMV0ubGVuZ3RoKzEpKTpjPXAtbTtjb25zdCBiPWYuc3ViYXJyYXkobSxtK2MpLHg9dChiLDAsdSk7eDxjJiZiW3grNV08NjQmJih5LnB1c2gobS1kLnN0YXJ0KSx0aGlzLl94cmVmU3Rtcy5hZGQobS1kLnN0YXJ0KSksbSs9Y31lbHNlIGlmKHcuc3RhcnRzV2l0aCgidHJhaWxlciIpJiYoNz09PXcubGVuZ3RofHwvXHMvLnRlc3Qod1s3XSkpKXtiLnB1c2gobSk7Y29uc3QgZT1tK3cubGVuZ3RoO2xldCB0O24ubGFzdEluZGV4PWU7Y29uc3Qgcj1uLmV4ZWMoZyk7cj8odD1uLmxhc3RJbmRleCsxLW0sInN0YXJ0eHJlZiIhPT1yWzFdJiYoKDAsYS53YXJuKSgnaW5kZXhPYmplY3RzOiBGb3VuZCAiJy5jb25jYXQoclsxXSwnIiBhZnRlciAidHJhaWxlciIsIGNhdXNlZCBieSBtaXNzaW5nICJzdGFydHhyZWYiIC0tIHRyeWluZyB0byByZWNvdmVyLicpKSx0LT1yWzFdLmxlbmd0aCsxKSk6dD1wLW0sbSs9dH1lbHNlIG0rPXcubGVuZ3RoKzF9Zm9yKGNvbnN0IGUgb2YgeSl0aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2goZSksdGhpcy5yZWFkWFJlZighMCk7Y29uc3Qgdz1bXTtsZXQgdix4LFM9ITE7Zm9yKGNvbnN0IGUgb2YgYil7ZC5wb3M9ZTtjb25zdCB0PW5ldyBzLlBhcnNlcih7bGV4ZXI6bmV3IHMuTGV4ZXIoZCkseHJlZjp0aGlzLGFsbG93U3RyZWFtczohMCxyZWNvdmVyeU1vZGU6ITB9KSxyPXQuZ2V0T2JqKCk7aWYoISgwLGkuaXNDbWQpKHIsInRyYWlsZXIiKSljb250aW51ZTtjb25zdCBuPXQuZ2V0T2JqKCk7biBpbnN0YW5jZW9mIGkuRGljdCYmKHcucHVzaChuKSxuLmhhcygiRW5jcnlwdCIpJiYoUz0hMCkpfWZvcihjb25zdCBlIG9mWy4uLncsImdlbkZhbGxiYWNrIiwuLi53XSl7aWYoImdlbkZhbGxiYWNrIj09PWUpe2lmKCF4KWJyZWFrO3RoaXMuX2dlbmVyYXRpb25GYWxsYmFjaz0hMDtjb250aW51ZX1sZXQgdD0hMTt0cnl7Y29uc3Qgcj1lLmdldCgiUm9vdCIpO2lmKCEociBpbnN0YW5jZW9mIGkuRGljdCkpY29udGludWU7Y29uc3Qgbj1yLmdldCgiUGFnZXMiKTtpZighKG4gaW5zdGFuY2VvZiBpLkRpY3QpKWNvbnRpbnVlO2NvbnN0IGE9bi5nZXQoIkNvdW50Iik7TnVtYmVyLmlzSW50ZWdlcihhKSYmKHQ9ITApfWNhdGNoKHIpe3g9cjtjb250aW51ZX1pZih0JiYoIVN8fGUuaGFzKCJFbmNyeXB0IikpJiZlLmhhcygiSUQiKSlyZXR1cm4gZTt2PWV9aWYodilyZXR1cm4gdjtpZih0aGlzLnRvcERpY3QpcmV0dXJuIHRoaXMudG9wRGljdDt0aHJvdyBuZXcgYS5JbnZhbGlkUERGRXhjZXB0aW9uKCJJbnZhbGlkIFBERiBzdHJ1Y3R1cmUuIil9cmVhZFhSZWYoKXtsZXQgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2NvbnN0IHQ9dGhpcy5zdHJlYW0scj1uZXcgU2V0O2Zvcig7dGhpcy5zdGFydFhSZWZRdWV1ZS5sZW5ndGg7KXt0cnl7Y29uc3QgZT10aGlzLnN0YXJ0WFJlZlF1ZXVlWzBdO2lmKHIuaGFzKGUpKXsoMCxhLndhcm4pKCJyZWFkWFJlZiAtIHNraXBwaW5nIFhSZWYgdGFibGUgc2luY2UgaXQgd2FzIGFscmVhZHkgcGFyc2VkLiIpLHRoaXMuc3RhcnRYUmVmUXVldWUuc2hpZnQoKTtjb250aW51ZX1yLmFkZChlKSx0LnBvcz1lK3Quc3RhcnQ7Y29uc3Qgbz1uZXcgcy5QYXJzZXIoe2xleGVyOm5ldyBzLkxleGVyKHQpLHhyZWY6dGhpcyxhbGxvd1N0cmVhbXM6ITB9KTtsZXQgZCxmPW8uZ2V0T2JqKCk7aWYoKDAsaS5pc0NtZCkoZiwieHJlZiIpKXt2YXIgYztkPXRoaXMucHJvY2Vzc1hSZWZUYWJsZShvKSx0aGlzLnRvcERpY3R8fCh0aGlzLnRvcERpY3Q9ZCksZj1kLmdldCgiWFJlZlN0bSIpLE51bWJlci5pc0ludGVnZXIoZikmJiF0aGlzLl94cmVmU3Rtcy5oYXMoZikmJih0aGlzLl94cmVmU3Rtcy5hZGQoZiksdGhpcy5zdGFydFhSZWZRdWV1ZS5wdXNoKGYpLG51bGwhPT0oYz1oKHRoaXMsbikpJiZ2b2lkIDAhPT1jfHx1KHRoaXMsbixmKSl9ZWxzZXtpZighTnVtYmVyLmlzSW50ZWdlcihmKSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiSW52YWxpZCBYUmVmIHN0cmVhbSBoZWFkZXIiKTtpZighKE51bWJlci5pc0ludGVnZXIoby5nZXRPYmooKSkmJigwLGkuaXNDbWQpKG8uZ2V0T2JqKCksIm9iaiIpJiYoZj1vLmdldE9iaigpKWluc3RhbmNlb2YgbC5CYXNlU3RyZWFtKSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiSW52YWxpZCBYUmVmIHN0cmVhbSIpO2lmKGQ9dGhpcy5wcm9jZXNzWFJlZlN0cmVhbShmKSx0aGlzLnRvcERpY3R8fCh0aGlzLnRvcERpY3Q9ZCksIWQpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkZhaWxlZCB0byByZWFkIFhSZWYgc3RyZWFtIil9Zj1kLmdldCgiUHJldiIpLE51bWJlci5pc0ludGVnZXIoZik/dGhpcy5zdGFydFhSZWZRdWV1ZS5wdXNoKGYpOmYgaW5zdGFuY2VvZiBpLlJlZiYmdGhpcy5zdGFydFhSZWZRdWV1ZS5wdXNoKGYubnVtKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygby5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLGEuaW5mbykoIih3aGlsZSByZWFkaW5nIFhSZWYpOiAiK2UpfXRoaXMuc3RhcnRYUmVmUXVldWUuc2hpZnQoKX1pZih0aGlzLnRvcERpY3QpcmV0dXJuIHRoaXMudG9wRGljdDtpZighZSl0aHJvdyBuZXcgby5YUmVmUGFyc2VFeGNlcHRpb259Z2V0IGxhc3RYUmVmU3RyZWFtUG9zKCl7dmFyIGU7cmV0dXJuIG51bGwhPT0oZT1oKHRoaXMsbikpJiZ2b2lkIDAhPT1lP2U6dGhpcy5feHJlZlN0bXMuc2l6ZT4wP01hdGgubWF4KC4uLnRoaXMuX3hyZWZTdG1zKTpudWxsfWdldEVudHJ5KGUpe2NvbnN0IHQ9dGhpcy5lbnRyaWVzW2VdO3JldHVybiB0JiYhdC5mcmVlJiZ0Lm9mZnNldD90Om51bGx9ZmV0Y2hJZlJlZihlKXtsZXQgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO3JldHVybiBlIGluc3RhbmNlb2YgaS5SZWY/dGhpcy5mZXRjaChlLHQpOmV9ZmV0Y2goZSl7bGV0IHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtpZighKGUgaW5zdGFuY2VvZiBpLlJlZikpdGhyb3cgbmV3IEVycm9yKCJyZWYgb2JqZWN0IGlzIG5vdCBhIHJlZmVyZW5jZSIpO2NvbnN0IHI9ZS5udW0sbj10aGlzLl9jYWNoZU1hcC5nZXQocik7aWYodm9pZCAwIT09bilyZXR1cm4gbiBpbnN0YW5jZW9mIGkuRGljdCYmIW4ub2JqSWQmJihuLm9iaklkPWUudG9TdHJpbmcoKSksbjtsZXQgcz10aGlzLmdldEVudHJ5KHIpO2lmKG51bGw9PT1zKXJldHVybiB0aGlzLl9jYWNoZU1hcC5zZXQocixzKSxzO2lmKHRoaXMuX3BlbmRpbmdSZWZzLmhhcyhlKSlyZXR1cm4gdGhpcy5fcGVuZGluZ1JlZnMucmVtb3ZlKGUpLCgwLGEud2FybikoIklnbm9yaW5nIGNpcmN1bGFyIHJlZmVyZW5jZTogIi5jb25jYXQoZSwiLiIpKSxpLkNJUkNVTEFSX1JFRjt0aGlzLl9wZW5kaW5nUmVmcy5wdXQoZSk7dHJ5e3M9cy51bmNvbXByZXNzZWQ/dGhpcy5mZXRjaFVuY29tcHJlc3NlZChlLHMsdCk6dGhpcy5mZXRjaENvbXByZXNzZWQoZSxzLHQpLHRoaXMuX3BlbmRpbmdSZWZzLnJlbW92ZShlKX1jYXRjaCh0KXt0aHJvdyB0aGlzLl9wZW5kaW5nUmVmcy5yZW1vdmUoZSksdH1yZXR1cm4gcyBpbnN0YW5jZW9mIGkuRGljdD9zLm9iaklkPWUudG9TdHJpbmcoKTpzIGluc3RhbmNlb2YgbC5CYXNlU3RyZWFtJiYocy5kaWN0Lm9iaklkPWUudG9TdHJpbmcoKSksc31mZXRjaFVuY29tcHJlc3NlZChlLHQpe2xldCByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3Qgbj1lLmdlbjtsZXQgYz1lLm51bTtpZih0LmdlbiE9PW4pe2NvbnN0IHM9IkluY29uc2lzdGVudCBnZW5lcmF0aW9uIGluIFhSZWY6ICIuY29uY2F0KGUpO2lmKHRoaXMuX2dlbmVyYXRpb25GYWxsYmFjayYmdC5nZW48bilyZXR1cm4oMCxhLndhcm4pKHMpLHRoaXMuZmV0Y2hVbmNvbXByZXNzZWQoaS5SZWYuZ2V0KGMsdC5nZW4pLHQscik7dGhyb3cgbmV3IG8uWFJlZkVudHJ5RXhjZXB0aW9uKHMpfWNvbnN0IGg9dGhpcy5zdHJlYW0ubWFrZVN1YlN0cmVhbSh0Lm9mZnNldCt0aGlzLnN0cmVhbS5zdGFydCksdT1uZXcgcy5QYXJzZXIoe2xleGVyOm5ldyBzLkxleGVyKGgpLHhyZWY6dGhpcyxhbGxvd1N0cmVhbXM6ITB9KSxkPXUuZ2V0T2JqKCksZj11LmdldE9iaigpLGc9dS5nZXRPYmooKTtpZihkIT09Y3x8ZiE9PW58fCEoZyBpbnN0YW5jZW9mIGkuQ21kKSl0aHJvdyBuZXcgby5YUmVmRW50cnlFeGNlcHRpb24oIkJhZCAodW5jb21wcmVzc2VkKSBYUmVmIGVudHJ5OiAiLmNvbmNhdChlKSk7aWYoIm9iaiIhPT1nLmNtZCl7aWYoZy5jbWQuc3RhcnRzV2l0aCgib2JqIikmJihjPXBhcnNlSW50KGcuY21kLnN1YnN0cmluZygzKSwxMCksIU51bWJlci5pc05hTihjKSkpcmV0dXJuIGM7dGhyb3cgbmV3IG8uWFJlZkVudHJ5RXhjZXB0aW9uKCJCYWQgKHVuY29tcHJlc3NlZCkgWFJlZiBlbnRyeTogIi5jb25jYXQoZSkpfXJldHVybih0PXRoaXMuZW5jcnlwdCYmIXI/dS5nZXRPYmoodGhpcy5lbmNyeXB0LmNyZWF0ZUNpcGhlclRyYW5zZm9ybShjLG4pKTp1LmdldE9iaigpKWluc3RhbmNlb2YgbC5CYXNlU3RyZWFtfHx0aGlzLl9jYWNoZU1hcC5zZXQoYyx0KSx0fWZldGNoQ29tcHJlc3NlZChlLHQpe2NvbnN0IHI9dC5vZmZzZXQsbj10aGlzLmZldGNoKGkuUmVmLmdldChyLDApKTtpZighKG4gaW5zdGFuY2VvZiBsLkJhc2VTdHJlYW0pKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJiYWQgT2JqU3RtIHN0cmVhbSIpO2NvbnN0IGM9bi5kaWN0LmdldCgiRmlyc3QiKSxoPW4uZGljdC5nZXQoIk4iKTtpZighTnVtYmVyLmlzSW50ZWdlcihjKXx8IU51bWJlci5pc0ludGVnZXIoaCkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoImludmFsaWQgZmlyc3QgYW5kIG4gcGFyYW1ldGVycyBmb3IgT2JqU3RtIHN0cmVhbSIpO2xldCB1PW5ldyBzLlBhcnNlcih7bGV4ZXI6bmV3IHMuTGV4ZXIobikseHJlZjp0aGlzLGFsbG93U3RyZWFtczohMH0pO2NvbnN0IGQ9bmV3IEFycmF5KGgpLGY9bmV3IEFycmF5KGgpO2ZvcihsZXQgZT0wO2U8aDsrK2Upe2NvbnN0IHQ9dS5nZXRPYmooKTtpZighTnVtYmVyLmlzSW50ZWdlcih0KSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiaW52YWxpZCBvYmplY3QgbnVtYmVyIGluIHRoZSBPYmpTdG0gc3RyZWFtOiAiLmNvbmNhdCh0KSk7Y29uc3Qgcj11LmdldE9iaigpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKHIpKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJpbnZhbGlkIG9iamVjdCBvZmZzZXQgaW4gdGhlIE9ialN0bSBzdHJlYW06ICIuY29uY2F0KHIpKTtkW2VdPXQsZltlXT1yfWNvbnN0IGc9KG4uc3RhcnR8fDApK2MscD1uZXcgQXJyYXkoaCk7Zm9yKGxldCBlPTA7ZTxoOysrZSl7Y29uc3QgdD1lPGgtMT9mW2UrMV0tZltlXTp2b2lkIDA7aWYodDwwKXRocm93IG5ldyBhLkZvcm1hdEVycm9yKCJJbnZhbGlkIG9mZnNldCBpbiB0aGUgT2JqU3RtIHN0cmVhbS4iKTt1PW5ldyBzLlBhcnNlcih7bGV4ZXI6bmV3IHMuTGV4ZXIobi5tYWtlU3ViU3RyZWFtKGcrZltlXSx0LG4uZGljdCkpLHhyZWY6dGhpcyxhbGxvd1N0cmVhbXM6ITB9KTtjb25zdCBpPXUuZ2V0T2JqKCk7aWYocFtlXT1pLGkgaW5zdGFuY2VvZiBsLkJhc2VTdHJlYW0pY29udGludWU7Y29uc3Qgbz1kW2VdLGM9dGhpcy5lbnRyaWVzW29dO2MmJmMub2Zmc2V0PT09ciYmYy5nZW49PT1lJiZ0aGlzLl9jYWNoZU1hcC5zZXQobyxpKX1pZih2b2lkIDA9PT0odD1wW3QuZ2VuXSkpdGhyb3cgbmV3IG8uWFJlZkVudHJ5RXhjZXB0aW9uKCJCYWQgKGNvbXByZXNzZWQpIFhSZWYgZW50cnk6ICIuY29uY2F0KGUpKTtyZXR1cm4gdH1hc3luYyBmZXRjaElmUmVmQXN5bmMoZSx0KXtyZXR1cm4gZSBpbnN0YW5jZW9mIGkuUmVmP3RoaXMuZmV0Y2hBc3luYyhlLHQpOmV9YXN5bmMgZmV0Y2hBc3luYyhlLHQpe3RyeXtyZXR1cm4gdGhpcy5mZXRjaChlLHQpfWNhdGNoKHIpe2lmKCEociBpbnN0YW5jZW9mIG8uTWlzc2luZ0RhdGFFeGNlcHRpb24pKXRocm93IHI7cmV0dXJuIGF3YWl0IHRoaXMucGRmTWFuYWdlci5yZXF1ZXN0UmFuZ2Uoci5iZWdpbixyLmVuZCksdGhpcy5mZXRjaEFzeW5jKGUsdCl9fWdldENhdGFsb2dPYmooKXtyZXR1cm4gdGhpcy5yb290fX0pfSwoZSx0LHIpPT57dmFyIG4sYSxpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk1lc3NhZ2VIYW5kbGVyPXZvaWQgMCxyKDIpO3ZhciBjPXIoMTQ0KTtmdW5jdGlvbiBsKGUpe3N3aXRjaChlIGluc3RhbmNlb2YgRXJyb3J8fCJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9PWV8fCgwLGMudW5yZWFjaGFibGUpKCd3cmFwUmVhc29uOiBFeHBlY3RlZCAicmVhc29uIiB0byBiZSBhIChwb3NzaWJseSBjbG9uZWQpIEVycm9yLicpLGUubmFtZSl7Y2FzZSJBYm9ydEV4Y2VwdGlvbiI6cmV0dXJuIG5ldyBjLkFib3J0RXhjZXB0aW9uKGUubWVzc2FnZSk7Y2FzZSJNaXNzaW5nUERGRXhjZXB0aW9uIjpyZXR1cm4gbmV3IGMuTWlzc2luZ1BERkV4Y2VwdGlvbihlLm1lc3NhZ2UpO2Nhc2UiUGFzc3dvcmRFeGNlcHRpb24iOnJldHVybiBuZXcgYy5QYXNzd29yZEV4Y2VwdGlvbihlLm1lc3NhZ2UsZS5jb2RlKTtjYXNlIlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbiI6cmV0dXJuIG5ldyBjLlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbihlLm1lc3NhZ2UsZS5zdGF0dXMpO2Nhc2UiVW5rbm93bkVycm9yRXhjZXB0aW9uIjpyZXR1cm4gbmV3IGMuVW5rbm93bkVycm9yRXhjZXB0aW9uKGUubWVzc2FnZSxlLmRldGFpbHMpO2RlZmF1bHQ6cmV0dXJuIG5ldyBjLlVua25vd25FcnJvckV4Y2VwdGlvbihlLm1lc3NhZ2UsZS50b1N0cmluZygpKX19ZnVuY3Rpb24gaChlKXtjb25zdCB0PWUuc3RyZWFtSWQscj10aGlzLnNvdXJjZU5hbWUsbj1lLnNvdXJjZU5hbWUsYT10aGlzLmNvbU9iaixpPXRoaXMscz10aGlzLmFjdGlvbkhhbmRsZXJbZS5hY3Rpb25dLG89e2VucXVldWUoZSl7bGV0IGk9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjEscz1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMDtpZih0aGlzLmlzQ2FuY2VsbGVkKXJldHVybjtjb25zdCBvPXRoaXMuZGVzaXJlZFNpemU7dGhpcy5kZXNpcmVkU2l6ZS09aSxvPjAmJnRoaXMuZGVzaXJlZFNpemU8PTAmJih0aGlzLnNpbmtDYXBhYmlsaXR5PW5ldyBjLlByb21pc2VDYXBhYmlsaXR5LHRoaXMucmVhZHk9dGhpcy5zaW5rQ2FwYWJpbGl0eS5wcm9taXNlKSxhLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnIsdGFyZ2V0TmFtZTpuLHN0cmVhbTo0LHN0cmVhbUlkOnQsY2h1bms6ZX0scyl9LGNsb3NlKCl7dGhpcy5pc0NhbmNlbGxlZHx8KHRoaXMuaXNDYW5jZWxsZWQ9ITAsYS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpyLHRhcmdldE5hbWU6bixzdHJlYW06MyxzdHJlYW1JZDp0fSksZGVsZXRlIGkuc3RyZWFtU2lua3NbdF0pfSxlcnJvcihlKXsoMCxjLmFzc2VydCkoZSBpbnN0YW5jZW9mIEVycm9yLCJlcnJvciBtdXN0IGhhdmUgYSB2YWxpZCByZWFzb24iKSx0aGlzLmlzQ2FuY2VsbGVkfHwodGhpcy5pc0NhbmNlbGxlZD0hMCxhLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnIsdGFyZ2V0TmFtZTpuLHN0cmVhbTo1LHN0cmVhbUlkOnQscmVhc29uOmwoZSl9KSl9LHNpbmtDYXBhYmlsaXR5Om5ldyBjLlByb21pc2VDYXBhYmlsaXR5LG9uUHVsbDpudWxsLG9uQ2FuY2VsOm51bGwsaXNDYW5jZWxsZWQ6ITEsZGVzaXJlZFNpemU6ZS5kZXNpcmVkU2l6ZSxyZWFkeTpudWxsfTtvLnNpbmtDYXBhYmlsaXR5LnJlc29sdmUoKSxvLnJlYWR5PW8uc2lua0NhcGFiaWxpdHkucHJvbWlzZSx0aGlzLnN0cmVhbVNpbmtzW3RdPW8sbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQpe3QocyhlLmRhdGEsbykpfSkpLnRoZW4oKGZ1bmN0aW9uKCl7YS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpyLHRhcmdldE5hbWU6bixzdHJlYW06OCxzdHJlYW1JZDp0LHN1Y2Nlc3M6ITB9KX0pLChmdW5jdGlvbihlKXthLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnIsdGFyZ2V0TmFtZTpuLHN0cmVhbTo4LHN0cmVhbUlkOnQscmVhc29uOmwoZSl9KX0pKX1mdW5jdGlvbiB1KGUpe2NvbnN0IHQ9ZS5zdHJlYW1JZCxyPXRoaXMuc291cmNlTmFtZSxuPWUuc291cmNlTmFtZSxhPXRoaXMuY29tT2JqLHM9dGhpcy5zdHJlYW1Db250cm9sbGVyc1t0XSxoPXRoaXMuc3RyZWFtU2lua3NbdF07c3dpdGNoKGUuc3RyZWFtKXtjYXNlIDg6ZS5zdWNjZXNzP3Muc3RhcnRDYWxsLnJlc29sdmUoKTpzLnN0YXJ0Q2FsbC5yZWplY3QobChlLnJlYXNvbikpO2JyZWFrO2Nhc2UgNzplLnN1Y2Nlc3M/cy5wdWxsQ2FsbC5yZXNvbHZlKCk6cy5wdWxsQ2FsbC5yZWplY3QobChlLnJlYXNvbikpO2JyZWFrO2Nhc2UgNjppZighaCl7YS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpyLHRhcmdldE5hbWU6bixzdHJlYW06NyxzdHJlYW1JZDp0LHN1Y2Nlc3M6ITB9KTticmVha31oLmRlc2lyZWRTaXplPD0wJiZlLmRlc2lyZWRTaXplPjAmJmguc2lua0NhcGFiaWxpdHkucmVzb2x2ZSgpLGguZGVzaXJlZFNpemU9ZS5kZXNpcmVkU2l6ZSxuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7dmFyIHQ7ZShudWxsPT09KHQ9aC5vblB1bGwpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmNhbGwoaCkpfSkpLnRoZW4oKGZ1bmN0aW9uKCl7YS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpyLHRhcmdldE5hbWU6bixzdHJlYW06NyxzdHJlYW1JZDp0LHN1Y2Nlc3M6ITB9KX0pLChmdW5jdGlvbihlKXthLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnIsdGFyZ2V0TmFtZTpuLHN0cmVhbTo3LHN0cmVhbUlkOnQscmVhc29uOmwoZSl9KX0pKTticmVhaztjYXNlIDQ6aWYoKDAsYy5hc3NlcnQpKHMsImVucXVldWUgc2hvdWxkIGhhdmUgc3RyZWFtIGNvbnRyb2xsZXIiKSxzLmlzQ2xvc2VkKWJyZWFrO3MuY29udHJvbGxlci5lbnF1ZXVlKGUuY2h1bmspO2JyZWFrO2Nhc2UgMzppZigoMCxjLmFzc2VydCkocywiY2xvc2Ugc2hvdWxkIGhhdmUgc3RyZWFtIGNvbnRyb2xsZXIiKSxzLmlzQ2xvc2VkKWJyZWFrO3MuaXNDbG9zZWQ9ITAscy5jb250cm9sbGVyLmNsb3NlKCksbyh0aGlzLGksZCkuY2FsbCh0aGlzLHMsdCk7YnJlYWs7Y2FzZSA1OigwLGMuYXNzZXJ0KShzLCJlcnJvciBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlciIpLHMuY29udHJvbGxlci5lcnJvcihsKGUucmVhc29uKSksbyh0aGlzLGksZCkuY2FsbCh0aGlzLHMsdCk7YnJlYWs7Y2FzZSAyOmUuc3VjY2Vzcz9zLmNhbmNlbENhbGwucmVzb2x2ZSgpOnMuY2FuY2VsQ2FsbC5yZWplY3QobChlLnJlYXNvbikpLG8odGhpcyxpLGQpLmNhbGwodGhpcyxzLHQpO2JyZWFrO2Nhc2UgMTppZighaClicmVhaztuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCl7dmFyIHI7dChudWxsPT09KHI9aC5vbkNhbmNlbCl8fHZvaWQgMD09PXI/dm9pZCAwOnIuY2FsbChoLGwoZS5yZWFzb24pKSl9KSkudGhlbigoZnVuY3Rpb24oKXthLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnIsdGFyZ2V0TmFtZTpuLHN0cmVhbToyLHN0cmVhbUlkOnQsc3VjY2VzczohMH0pfSksKGZ1bmN0aW9uKGUpe2EucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cix0YXJnZXROYW1lOm4sc3RyZWFtOjIsc3RyZWFtSWQ6dCxyZWFzb246bChlKX0pfSkpLGguc2lua0NhcGFiaWxpdHkucmVqZWN0KGwoZS5yZWFzb24pKSxoLmlzQ2FuY2VsbGVkPSEwLGRlbGV0ZSB0aGlzLnN0cmVhbVNpbmtzW3RdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHN0cmVhbSBjYXNlIil9fWFzeW5jIGZ1bmN0aW9uIGQoZSx0KXt2YXIgcixuLGE7YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFtudWxsPT09KHI9ZS5zdGFydENhbGwpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLnByb21pc2UsbnVsbD09PShuPWUucHVsbENhbGwpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLnByb21pc2UsbnVsbD09PShhPWUuY2FuY2VsQ2FsbCl8fHZvaWQgMD09PWE/dm9pZCAwOmEucHJvbWlzZV0pLGRlbGV0ZSB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3RdfXQuTWVzc2FnZUhhbmRsZXI9KG49bmV3IFdlYWtTZXQsYT1uZXcgV2Vha1NldCxpPW5ldyBXZWFrU2V0LGNsYXNze2NvbnN0cnVjdG9yKGUsdCxyKXtzKHRoaXMsaSkscyh0aGlzLGEpLHModGhpcyxuKSx0aGlzLnNvdXJjZU5hbWU9ZSx0aGlzLnRhcmdldE5hbWU9dCx0aGlzLmNvbU9iaj1yLHRoaXMuY2FsbGJhY2tJZD0xLHRoaXMuc3RyZWFtSWQ9MSx0aGlzLnN0cmVhbVNpbmtzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5zdHJlYW1Db250cm9sbGVycz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuY2FsbGJhY2tDYXBhYmlsaXRpZXM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLmFjdGlvbkhhbmRsZXI9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9vbkNvbU9iak9uTWVzc2FnZT1lPT57Y29uc3QgdD1lLmRhdGE7aWYodC50YXJnZXROYW1lIT09dGhpcy5zb3VyY2VOYW1lKXJldHVybjtpZih0LnN0cmVhbSlyZXR1cm4gdm9pZCBvKHRoaXMsYSx1KS5jYWxsKHRoaXMsdCk7aWYodC5jYWxsYmFjayl7Y29uc3QgZT10LmNhbGxiYWNrSWQscj10aGlzLmNhbGxiYWNrQ2FwYWJpbGl0aWVzW2VdO2lmKCFyKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlc29sdmUgY2FsbGJhY2sgIi5jb25jYXQoZSkpO2lmKGRlbGV0ZSB0aGlzLmNhbGxiYWNrQ2FwYWJpbGl0aWVzW2VdLDE9PT10LmNhbGxiYWNrKXIucmVzb2x2ZSh0LmRhdGEpO2Vsc2V7aWYoMiE9PXQuY2FsbGJhY2spdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIGNhbGxiYWNrIGNhc2UiKTtyLnJlamVjdChsKHQucmVhc29uKSl9cmV0dXJufWNvbnN0IGk9dGhpcy5hY3Rpb25IYW5kbGVyW3QuYWN0aW9uXTtpZighaSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gYWN0aW9uIGZyb20gd29ya2VyOiAiLmNvbmNhdCh0LmFjdGlvbikpO2lmKHQuY2FsbGJhY2tJZCl7Y29uc3QgZT10aGlzLnNvdXJjZU5hbWUsbj10LnNvdXJjZU5hbWU7bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe2UoaSh0LmRhdGEpKX0pKS50aGVuKChmdW5jdGlvbihhKXtyLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOmUsdGFyZ2V0TmFtZTpuLGNhbGxiYWNrOjEsY2FsbGJhY2tJZDp0LmNhbGxiYWNrSWQsZGF0YTphfSl9KSwoZnVuY3Rpb24oYSl7ci5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTplLHRhcmdldE5hbWU6bixjYWxsYmFjazoyLGNhbGxiYWNrSWQ6dC5jYWxsYmFja0lkLHJlYXNvbjpsKGEpfSl9KSl9ZWxzZSB0LnN0cmVhbUlkP28odGhpcyxuLGgpLmNhbGwodGhpcyx0KTppKHQuZGF0YSl9LHIuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsdGhpcy5fb25Db21PYmpPbk1lc3NhZ2UpfW9uKGUsdCl7Y29uc3Qgcj10aGlzLmFjdGlvbkhhbmRsZXI7aWYocltlXSl0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGlzIGFscmVhZHkgYW4gYWN0aW9uTmFtZSBjYWxsZWQgIicuY29uY2F0KGUsJyInKSk7cltlXT10fXNlbmQoZSx0LHIpe3RoaXMuY29tT2JqLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnRoaXMuc291cmNlTmFtZSx0YXJnZXROYW1lOnRoaXMudGFyZ2V0TmFtZSxhY3Rpb246ZSxkYXRhOnR9LHIpfXNlbmRXaXRoUHJvbWlzZShlLHQscil7Y29uc3Qgbj10aGlzLmNhbGxiYWNrSWQrKyxhPW5ldyBjLlByb21pc2VDYXBhYmlsaXR5O3RoaXMuY2FsbGJhY2tDYXBhYmlsaXRpZXNbbl09YTt0cnl7dGhpcy5jb21PYmoucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6dGhpcy5zb3VyY2VOYW1lLHRhcmdldE5hbWU6dGhpcy50YXJnZXROYW1lLGFjdGlvbjplLGNhbGxiYWNrSWQ6bixkYXRhOnR9LHIpfWNhdGNoKGUpe2EucmVqZWN0KGUpfXJldHVybiBhLnByb21pc2V9c2VuZFdpdGhTdHJlYW0oZSx0LHIsbil7Y29uc3QgYT10aGlzLnN0cmVhbUlkKyssaT10aGlzLnNvdXJjZU5hbWUscz10aGlzLnRhcmdldE5hbWUsbz10aGlzLmNvbU9iajtyZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHtzdGFydDpyPT57Y29uc3QgbD1uZXcgYy5Qcm9taXNlQ2FwYWJpbGl0eTtyZXR1cm4gdGhpcy5zdHJlYW1Db250cm9sbGVyc1thXT17Y29udHJvbGxlcjpyLHN0YXJ0Q2FsbDpsLHB1bGxDYWxsOm51bGwsY2FuY2VsQ2FsbDpudWxsLGlzQ2xvc2VkOiExfSxvLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOmksdGFyZ2V0TmFtZTpzLGFjdGlvbjplLHN0cmVhbUlkOmEsZGF0YTp0LGRlc2lyZWRTaXplOnIuZGVzaXJlZFNpemV9LG4pLGwucHJvbWlzZX0scHVsbDplPT57Y29uc3QgdD1uZXcgYy5Qcm9taXNlQ2FwYWJpbGl0eTtyZXR1cm4gdGhpcy5zdHJlYW1Db250cm9sbGVyc1thXS5wdWxsQ2FsbD10LG8ucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6aSx0YXJnZXROYW1lOnMsc3RyZWFtOjYsc3RyZWFtSWQ6YSxkZXNpcmVkU2l6ZTplLmRlc2lyZWRTaXplfSksdC5wcm9taXNlfSxjYW5jZWw6ZT0+eygwLGMuYXNzZXJ0KShlIGluc3RhbmNlb2YgRXJyb3IsImNhbmNlbCBtdXN0IGhhdmUgYSB2YWxpZCByZWFzb24iKTtjb25zdCB0PW5ldyBjLlByb21pc2VDYXBhYmlsaXR5O3JldHVybiB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW2FdLmNhbmNlbENhbGw9dCx0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW2FdLmlzQ2xvc2VkPSEwLG8ucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6aSx0YXJnZXROYW1lOnMsc3RyZWFtOjEsc3RyZWFtSWQ6YSxyZWFzb246bChlKX0pLHQucHJvbWlzZX19LHIpfWRlc3Ryb3koKXt0aGlzLmNvbU9iai5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0aGlzLl9vbkNvbU9iak9uTWVzc2FnZSl9fSl9LChlLHQscik9PntPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5QREZXb3JrZXJTdHJlYW09dm9pZCAwLHIoMTM5KTt2YXIgbj1yKDE0NCk7dC5QREZXb3JrZXJTdHJlYW09Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5fbXNnSGFuZGxlcj1lLHRoaXMuX2NvbnRlbnRMZW5ndGg9bnVsbCx0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj1udWxsLHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnM9W119Z2V0RnVsbFJlYWRlcigpe3JldHVybigwLG4uYXNzZXJ0KSghdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIsIlBERldvcmtlclN0cmVhbS5nZXRGdWxsUmVhZGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBvbmNlLiIpLHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyPW5ldyBhKHRoaXMuX21zZ0hhbmRsZXIpLHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyfWdldFJhbmdlUmVhZGVyKGUsdCl7Y29uc3Qgcj1uZXcgaShlLHQsdGhpcy5fbXNnSGFuZGxlcik7cmV0dXJuIHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMucHVzaChyKSxyfWNhbmNlbEFsbFJlcXVlc3RzKGUpe3RoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyJiZ0aGlzLl9mdWxsUmVxdWVzdFJlYWRlci5jYW5jZWwoZSk7Zm9yKGNvbnN0IHQgb2YgdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycy5zbGljZSgwKSl0LmNhbmNlbChlKX19O2NsYXNzIGF7Y29uc3RydWN0b3IoZSl7dGhpcy5fbXNnSGFuZGxlcj1lLHRoaXMub25Qcm9ncmVzcz1udWxsLHRoaXMuX2NvbnRlbnRMZW5ndGg9bnVsbCx0aGlzLl9pc1JhbmdlU3VwcG9ydGVkPSExLHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkPSExO2NvbnN0IHQ9dGhpcy5fbXNnSGFuZGxlci5zZW5kV2l0aFN0cmVhbSgiR2V0UmVhZGVyIik7dGhpcy5fcmVhZGVyPXQuZ2V0UmVhZGVyKCksdGhpcy5faGVhZGVyc1JlYWR5PXRoaXMuX21zZ0hhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJSZWFkZXJIZWFkZXJzUmVhZHkiKS50aGVuKChlPT57dGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQ9ZS5pc1N0cmVhbWluZ1N1cHBvcnRlZCx0aGlzLl9pc1JhbmdlU3VwcG9ydGVkPWUuaXNSYW5nZVN1cHBvcnRlZCx0aGlzLl9jb250ZW50TGVuZ3RoPWUuY29udGVudExlbmd0aH0pKX1nZXQgaGVhZGVyc1JlYWR5KCl7cmV0dXJuIHRoaXMuX2hlYWRlcnNSZWFkeX1nZXQgY29udGVudExlbmd0aCgpe3JldHVybiB0aGlzLl9jb250ZW50TGVuZ3RofWdldCBpc1N0cmVhbWluZ1N1cHBvcnRlZCgpe3JldHVybiB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZH1nZXQgaXNSYW5nZVN1cHBvcnRlZCgpe3JldHVybiB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkfWFzeW5jIHJlYWQoKXtjb25zdHt2YWx1ZTplLGRvbmU6dH09YXdhaXQgdGhpcy5fcmVhZGVyLnJlYWQoKTtyZXR1cm4gdD97dmFsdWU6dm9pZCAwLGRvbmU6ITB9Ont2YWx1ZTplLmJ1ZmZlcixkb25lOiExfX1jYW5jZWwoZSl7dGhpcy5fcmVhZGVyLmNhbmNlbChlKX19Y2xhc3MgaXtjb25zdHJ1Y3RvcihlLHQscil7dGhpcy5fbXNnSGFuZGxlcj1yLHRoaXMub25Qcm9ncmVzcz1udWxsO2NvbnN0IG49dGhpcy5fbXNnSGFuZGxlci5zZW5kV2l0aFN0cmVhbSgiR2V0UmFuZ2VSZWFkZXIiLHtiZWdpbjplLGVuZDp0fSk7dGhpcy5fcmVhZGVyPW4uZ2V0UmVhZGVyKCl9Z2V0IGlzU3RyZWFtaW5nU3VwcG9ydGVkKCl7cmV0dXJuITF9YXN5bmMgcmVhZCgpe2NvbnN0e3ZhbHVlOmUsZG9uZTp0fT1hd2FpdCB0aGlzLl9yZWFkZXIucmVhZCgpO3JldHVybiB0P3t2YWx1ZTp2b2lkIDAsZG9uZTohMH06e3ZhbHVlOmUuYnVmZmVyLGRvbmU6ITF9fWNhbmNlbChlKXt0aGlzLl9yZWFkZXIuY2FuY2VsKGUpfX19XSx0PXt9O2Z1bmN0aW9uIG4ocil7dmFyIGE9dFtyXTtpZih2b2lkIDAhPT1hKXJldHVybiBhLmV4cG9ydHM7dmFyIGk9dFtyXT17ZXhwb3J0czp7fX07cmV0dXJuIGVbcl0uY2FsbChpLmV4cG9ydHMsaSxpLmV4cG9ydHMsbiksaS5leHBvcnRzfW4uZD0oZSx0KT0+e2Zvcih2YXIgciBpbiB0KW4ubyh0LHIpJiYhbi5vKGUscikmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIse2VudW1lcmFibGU6ITAsZ2V0OnRbcl19KX0sbi5vPShlLHQpPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KSxuLnI9ZT0+eyJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9O3ZhciBhPXt9O3JldHVybigoKT0+e3ZhciBlPWE7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJXb3JrZXJNZXNzYWdlSGFuZGxlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHQuV29ya2VyTWVzc2FnZUhhbmRsZXJ9fSk7dmFyIHQ9bigxKX0pKCksYX0pKCksIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzP2UuZXhwb3J0cz1hKCk6ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmci5hbWRPP2RlZmluZSgicGRmanMtZGlzdC9idWlsZC9wZGYud29ya2VyIixbXSxhKToib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHM/ZXhwb3J0c1sicGRmanMtZGlzdC9idWlsZC9wZGYud29ya2VyIl09YSgpOm5bInBkZmpzLWRpc3QvYnVpbGQvcGRmLndvcmtlciJdPW4ucGRmanNXb3JrZXI9YSgpfSw5NjYyOihlLHQscik9Pnt2YXIgbj1yKDYxNCksYT1yKDYzMzApLGk9VHlwZUVycm9yO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZihuKGUpKXJldHVybiBlO3Rocm93IGkoYShlKSsiIGlzIG5vdCBhIGZ1bmN0aW9uIil9fSw5NDgzOihlLHQscik9Pnt2YXIgbj1yKDQ0MTEpLGE9cig2MzMwKSxpPVR5cGVFcnJvcjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYobihlKSlyZXR1cm4gZTt0aHJvdyBpKGEoZSkrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciIpfX0sNjA3NzooZSx0LHIpPT57dmFyIG49cig2MTQpLGE9U3RyaW5nLGk9VHlwZUVycm9yO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZigib2JqZWN0Ij09dHlwZW9mIGV8fG4oZSkpcmV0dXJuIGU7dGhyb3cgaSgiQ2FuJ3Qgc2V0ICIrYShlKSsiIGFzIGEgcHJvdG90eXBlIil9fSwxMjIzOihlLHQscik9Pnt2YXIgbj1yKDUxMTIpLGE9cigzMCksaT1yKDMwNzApLmYscz1uKCJ1bnNjb3BhYmxlcyIpLG89QXJyYXkucHJvdG90eXBlO251bGw9PW9bc10mJmkobyxzLHtjb25maWd1cmFibGU6ITAsdmFsdWU6YShudWxsKX0pLGUuZXhwb3J0cz1mdW5jdGlvbihlKXtvW3NdW2VdPSEwfX0sMTUzMDooZSx0LHIpPT57dmFyIG49cig4NzEwKS5jaGFyQXQ7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdCsocj9uKGUsdCkubGVuZ3RoOjEpfX0sNTc4NzooZSx0LHIpPT57dmFyIG49cig3OTc2KSxhPVR5cGVFcnJvcjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZihuKHQsZSkpcmV0dXJuIGU7dGhyb3cgYSgiSW5jb3JyZWN0IGludm9jYXRpb24iKX19LDk2NzA6KGUsdCxyKT0+e3ZhciBuPXIoMTExKSxhPVN0cmluZyxpPVR5cGVFcnJvcjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYobihlKSlyZXR1cm4gZTt0aHJvdyBpKGEoZSkrIiBpcyBub3QgYW4gb2JqZWN0Iil9fSwzMDEzOmU9PntlLmV4cG9ydHM9InVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmInVuZGVmaW5lZCIhPXR5cGVvZiBEYXRhVmlld30sNzU1NjooZSx0LHIpPT57dmFyIG49cig3MjkzKTtlLmV4cG9ydHM9bigoZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgQXJyYXlCdWZmZXIpe3ZhciBlPW5ldyBBcnJheUJ1ZmZlcig4KTtPYmplY3QuaXNFeHRlbnNpYmxlKGUpJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiYSIse3ZhbHVlOjh9KX19KSl9LDI2MDooZSx0LHIpPT57dmFyIG4sYSxpLHM9cigzMDEzKSxvPXIoOTc4MSksYz1yKDc4NTQpLGw9cig2MTQpLGg9cigxMTEpLHU9cigyNTk3KSxkPXIoNjQ4KSxmPXIoNjMzMCksZz1yKDg4ODApLHA9cig4MDUyKSxtPXIoNzA0NSksYj1yKDc5NzYpLHk9cig5NTE4KSx3PXIoNzY3NCksdj1yKDUxMTIpLHg9cig5NzExKSxTPXIoOTkwOSksQT1TLmVuZm9yY2Usaz1TLmdldCxDPWMuSW50OEFycmF5LE89QyYmQy5wcm90b3R5cGUsRj1jLlVpbnQ4Q2xhbXBlZEFycmF5LEk9RiYmRi5wcm90b3R5cGUsVD1DJiZ5KEMpLE09TyYmeShPKSxFPU9iamVjdC5wcm90b3R5cGUsUD1jLlR5cGVFcnJvcixSPXYoInRvU3RyaW5nVGFnIiksTj14KCJUWVBFRF9BUlJBWV9UQUciKSxEPSJUeXBlZEFycmF5Q29uc3RydWN0b3IiLEI9cyYmISF3JiYiT3BlcmEiIT09ZChjLm9wZXJhKSxMPSExLF89e0ludDhBcnJheToxLFVpbnQ4QXJyYXk6MSxVaW50OENsYW1wZWRBcnJheToxLEludDE2QXJyYXk6MixVaW50MTZBcnJheToyLEludDMyQXJyYXk6NCxVaW50MzJBcnJheTo0LEZsb2F0MzJBcnJheTo0LEZsb2F0NjRBcnJheTo4fSxqPXtCaWdJbnQ2NEFycmF5OjgsQmlnVWludDY0QXJyYXk6OH0sVT1mdW5jdGlvbihlKXt2YXIgdD15KGUpO2lmKGgodCkpe3ZhciByPWsodCk7cmV0dXJuIHImJnUocixEKT9yW0RdOlUodCl9fSwkPWZ1bmN0aW9uKGUpe2lmKCFoKGUpKXJldHVybiExO3ZhciB0PWQoZSk7cmV0dXJuIHUoXyx0KXx8dShqLHQpfTtmb3IobiBpbiBfKShpPShhPWNbbl0pJiZhLnByb3RvdHlwZSk/QShpKVtEXT1hOkI9ITE7Zm9yKG4gaW4gaikoaT0oYT1jW25dKSYmYS5wcm90b3R5cGUpJiYoQShpKVtEXT1hKTtpZigoIUJ8fCFsKFQpfHxUPT09RnVuY3Rpb24ucHJvdG90eXBlKSYmKFQ9ZnVuY3Rpb24oKXt0aHJvdyBQKCJJbmNvcnJlY3QgaW52b2NhdGlvbiIpfSxCKSlmb3IobiBpbiBfKWNbbl0mJncoY1tuXSxUKTtpZigoIUJ8fCFNfHxNPT09RSkmJihNPVQucHJvdG90eXBlLEIpKWZvcihuIGluIF8pY1tuXSYmdyhjW25dLnByb3RvdHlwZSxNKTtpZihCJiZ5KEkpIT09TSYmdyhJLE0pLG8mJiF1KE0sUikpZm9yKG4gaW4gTD0hMCxtKE0sUix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBoKHRoaXMpP3RoaXNbTl06dm9pZCAwfX0pLF8pY1tuXSYmZyhjW25dLE4sbik7ZS5leHBvcnRzPXtOQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTOkIsVFlQRURfQVJSQVlfVEFHOkwmJk4sYVR5cGVkQXJyYXk6ZnVuY3Rpb24oZSl7aWYoJChlKSlyZXR1cm4gZTt0aHJvdyBQKCJUYXJnZXQgaXMgbm90IGEgdHlwZWQgYXJyYXkiKX0sYVR5cGVkQXJyYXlDb25zdHJ1Y3RvcjpmdW5jdGlvbihlKXtpZihsKGUpJiYoIXd8fGIoVCxlKSkpcmV0dXJuIGU7dGhyb3cgUChmKGUpKyIgaXMgbm90IGEgdHlwZWQgYXJyYXkgY29uc3RydWN0b3IiKX0sZXhwb3J0VHlwZWRBcnJheU1ldGhvZDpmdW5jdGlvbihlLHQscixuKXtpZihvKXtpZihyKWZvcih2YXIgYSBpbiBfKXt2YXIgaT1jW2FdO2lmKGkmJnUoaS5wcm90b3R5cGUsZSkpdHJ5e2RlbGV0ZSBpLnByb3RvdHlwZVtlXX1jYXRjaChyKXt0cnl7aS5wcm90b3R5cGVbZV09dH1jYXRjaChlKXt9fX1NW2VdJiYhcnx8cChNLGUscj90OkImJk9bZV18fHQsbil9fSxleHBvcnRUeXBlZEFycmF5U3RhdGljTWV0aG9kOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhO2lmKG8pe2lmKHcpe2lmKHIpZm9yKG4gaW4gXylpZigoYT1jW25dKSYmdShhLGUpKXRyeXtkZWxldGUgYVtlXX1jYXRjaChlKXt9aWYoVFtlXSYmIXIpcmV0dXJuO3RyeXtyZXR1cm4gcChULGUscj90OkImJlRbZV18fHQpfWNhdGNoKGUpe319Zm9yKG4gaW4gXykhKGE9Y1tuXSl8fGFbZV0mJiFyfHxwKGEsZSx0KX19LGdldFR5cGVkQXJyYXlDb25zdHJ1Y3RvcjpVLGlzVmlldzpmdW5jdGlvbihlKXtpZighaChlKSlyZXR1cm4hMTt2YXIgdD1kKGUpO3JldHVybiJEYXRhVmlldyI9PT10fHx1KF8sdCl8fHUoaix0KX0saXNUeXBlZEFycmF5OiQsVHlwZWRBcnJheTpULFR5cGVkQXJyYXlQcm90b3R5cGU6TX19LDMzMzE6KGUsdCxyKT0+e3ZhciBuPXIoNzg1NCksYT1yKDE3MDIpLGk9cig5NzgxKSxzPXIoMzAxMyksbz1yKDY1MzApLGM9cig4ODgwKSxsPXIoNzA0NSksaD1yKDkxOTApLHU9cig3MjkzKSxkPXIoNTc4NyksZj1yKDkzMDMpLGc9cig3NDY2KSxwPXIoNzA2NyksbT1yKDExNzkpLGI9cig5NTE4KSx5PXIoNzY3NCksdz1yKDgwMDYpLmYsdj1yKDEyODUpLHg9cigxNTg5KSxTPXIoODAwMyksQT1yKDk5MDkpLGs9by5QUk9QRVIsQz1vLkNPTkZJR1VSQUJMRSxPPSJBcnJheUJ1ZmZlciIsRj0iRGF0YVZpZXciLEk9InByb3RvdHlwZSIsVD0iV3JvbmcgaW5kZXgiLE09QS5nZXR0ZXJGb3IoTyksRT1BLmdldHRlckZvcihGKSxQPUEuc2V0LFI9bltPXSxOPVIsRD1OJiZOW0ldLEI9bltGXSxMPUImJkJbSV0sXz1PYmplY3QucHJvdG90eXBlLGo9bi5BcnJheSxVPW4uUmFuZ2VFcnJvciwkPWEodiksWD1hKFtdLnJldmVyc2UpLEg9bS5wYWNrLHE9bS51bnBhY2ssej1mdW5jdGlvbihlKXtyZXR1cm5bMjU1JmVdfSxHPWZ1bmN0aW9uKGUpe3JldHVyblsyNTUmZSxlPj44JjI1NV19LFc9ZnVuY3Rpb24oZSl7cmV0dXJuWzI1NSZlLGU+PjgmMjU1LGU+PjE2JjI1NSxlPj4yNCYyNTVdfSxWPWZ1bmN0aW9uKGUpe3JldHVybiBlWzNdPDwyNHxlWzJdPDwxNnxlWzFdPDw4fGVbMF19LEs9ZnVuY3Rpb24oZSl7cmV0dXJuIEgoZSwyMyw0KX0sWT1mdW5jdGlvbihlKXtyZXR1cm4gSChlLDUyLDgpfSxKPWZ1bmN0aW9uKGUsdCxyKXtsKGVbSV0sdCx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiByKHRoaXMpW3RdfX0pfSxaPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhPUUoZSksaT1wKHIpLHM9ISFuO2lmKGkrdD5hLmJ5dGVMZW5ndGgpdGhyb3cgVShUKTt2YXIgbz1hLmJ5dGVzLGM9aSthLmJ5dGVPZmZzZXQsbD14KG8sYyxjK3QpO3JldHVybiBzP2w6WChsKX0sUT1mdW5jdGlvbihlLHQscixuLGEsaSl7dmFyIHM9RShlKSxvPXAociksYz1uKCthKSxsPSEhaTtpZihvK3Q+cy5ieXRlTGVuZ3RoKXRocm93IFUoVCk7Zm9yKHZhciBoPXMuYnl0ZXMsdT1vK3MuYnl0ZU9mZnNldCxkPTA7ZDx0O2QrKyloW3UrZF09Y1tsP2Q6dC1kLTFdfTtpZihzKXt2YXIgZWU9ayYmUi5uYW1lIT09TztpZih1KChmdW5jdGlvbigpe1IoMSl9KSkmJnUoKGZ1bmN0aW9uKCl7bmV3IFIoLTEpfSkpJiYhdSgoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IFIsbmV3IFIoMS41KSxuZXcgUihOYU4pLDEhPVIubGVuZ3RofHxlZSYmIUN9KSkpZWUmJkMmJmMoUiwibmFtZSIsTyk7ZWxzZXsoTj1mdW5jdGlvbihlKXtyZXR1cm4gZCh0aGlzLEQpLG5ldyBSKHAoZSkpfSlbSV09RDtmb3IodmFyIHRlLHJlPXcoUiksbmU9MDtyZS5sZW5ndGg+bmU7KSh0ZT1yZVtuZSsrXSlpbiBOfHxjKE4sdGUsUlt0ZV0pO0QuY29uc3RydWN0b3I9Tn15JiZiKEwpIT09XyYmeShMLF8pO3ZhciBhZT1uZXcgQihuZXcgTigyKSksaWU9YShMLnNldEludDgpO2FlLnNldEludDgoMCwyMTQ3NDgzNjQ4KSxhZS5zZXRJbnQ4KDEsMjE0NzQ4MzY0OSksIWFlLmdldEludDgoMCkmJmFlLmdldEludDgoMSl8fGgoTCx7c2V0SW50ODpmdW5jdGlvbihlLHQpe2llKHRoaXMsZSx0PDwyND4+MjQpfSxzZXRVaW50ODpmdW5jdGlvbihlLHQpe2llKHRoaXMsZSx0PDwyND4+MjQpfX0se3Vuc2FmZTohMH0pfWVsc2UgRD0oTj1mdW5jdGlvbihlKXtkKHRoaXMsRCk7dmFyIHQ9cChlKTtQKHRoaXMse3R5cGU6TyxieXRlczokKGoodCksMCksYnl0ZUxlbmd0aDp0fSksaXx8KHRoaXMuYnl0ZUxlbmd0aD10LHRoaXMuZGV0YWNoZWQ9ITEpfSlbSV0sTD0oQj1mdW5jdGlvbihlLHQscil7ZCh0aGlzLEwpLGQoZSxEKTt2YXIgbj1NKGUpLGE9bi5ieXRlTGVuZ3RoLHM9Zih0KTtpZihzPDB8fHM+YSl0aHJvdyBVKCJXcm9uZyBvZmZzZXQiKTtpZihzKyhyPXZvaWQgMD09PXI/YS1zOmcocikpPmEpdGhyb3cgVSgiV3JvbmcgbGVuZ3RoIik7UCh0aGlzLHt0eXBlOkYsYnVmZmVyOmUsYnl0ZUxlbmd0aDpyLGJ5dGVPZmZzZXQ6cyxieXRlczpuLmJ5dGVzfSksaXx8KHRoaXMuYnVmZmVyPWUsdGhpcy5ieXRlTGVuZ3RoPXIsdGhpcy5ieXRlT2Zmc2V0PXMpfSlbSV0saSYmKEooTiwiYnl0ZUxlbmd0aCIsTSksSihCLCJidWZmZXIiLEUpLEooQiwiYnl0ZUxlbmd0aCIsRSksSihCLCJieXRlT2Zmc2V0IixFKSksaChMLHtnZXRJbnQ4OmZ1bmN0aW9uKGUpe3JldHVybiBaKHRoaXMsMSxlKVswXTw8MjQ+PjI0fSxnZXRVaW50ODpmdW5jdGlvbihlKXtyZXR1cm4gWih0aGlzLDEsZSlbMF19LGdldEludDE2OmZ1bmN0aW9uKGUpe3ZhciB0PVoodGhpcywyLGUsYXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0pO3JldHVybih0WzFdPDw4fHRbMF0pPDwxNj4+MTZ9LGdldFVpbnQxNjpmdW5jdGlvbihlKXt2YXIgdD1aKHRoaXMsMixlLGFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdKTtyZXR1cm4gdFsxXTw8OHx0WzBdfSxnZXRJbnQzMjpmdW5jdGlvbihlKXtyZXR1cm4gVihaKHRoaXMsNCxlLGFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdKSl9LGdldFVpbnQzMjpmdW5jdGlvbihlKXtyZXR1cm4gVihaKHRoaXMsNCxlLGFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdKSk+Pj4wfSxnZXRGbG9hdDMyOmZ1bmN0aW9uKGUpe3JldHVybiBxKFoodGhpcyw0LGUsYXJndW1lbnRzLmxlbmd0aD4xJiZhcmd1bWVudHNbMV0pLDIzKX0sZ2V0RmxvYXQ2NDpmdW5jdGlvbihlKXtyZXR1cm4gcShaKHRoaXMsOCxlLGFyZ3VtZW50cy5sZW5ndGg+MSYmYXJndW1lbnRzWzFdKSw1Mil9LHNldEludDg6ZnVuY3Rpb24oZSx0KXtRKHRoaXMsMSxlLHosdCl9LHNldFVpbnQ4OmZ1bmN0aW9uKGUsdCl7USh0aGlzLDEsZSx6LHQpfSxzZXRJbnQxNjpmdW5jdGlvbihlLHQpe1EodGhpcywyLGUsRyx0LGFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdKX0sc2V0VWludDE2OmZ1bmN0aW9uKGUsdCl7USh0aGlzLDIsZSxHLHQsYXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0pfSxzZXRJbnQzMjpmdW5jdGlvbihlLHQpe1EodGhpcyw0LGUsVyx0LGFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdKX0sc2V0VWludDMyOmZ1bmN0aW9uKGUsdCl7USh0aGlzLDQsZSxXLHQsYXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0pfSxzZXRGbG9hdDMyOmZ1bmN0aW9uKGUsdCl7USh0aGlzLDQsZSxLLHQsYXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0pfSxzZXRGbG9hdDY0OmZ1bmN0aW9uKGUsdCl7USh0aGlzLDgsZSxZLHQsYXJndW1lbnRzLmxlbmd0aD4yJiZhcmd1bWVudHNbMl0pfX0pO1MoTixPKSxTKEIsRiksZS5leHBvcnRzPXtBcnJheUJ1ZmZlcjpOLERhdGFWaWV3OkJ9fSwxMjg1OihlLHQscik9Pnt2YXIgbj1yKDc5MDgpLGE9cigxNDAwKSxpPXIoNjI0NCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1uKHRoaXMpLHI9aSh0KSxzPWFyZ3VtZW50cy5sZW5ndGgsbz1hKHM+MT9hcmd1bWVudHNbMV06dm9pZCAwLHIpLGM9cz4yP2FyZ3VtZW50c1syXTp2b2lkIDAsbD12b2lkIDA9PT1jP3I6YShjLHIpO2w+bzspdFtvKytdPWU7cmV0dXJuIHR9fSw3NzQ1OihlLHQscik9Pnt2YXIgbj1yKDYyNDQpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj0wLGE9bih0KSxpPW5ldyBlKGEpO2E+cjspaVtyXT10W3IrK107cmV0dXJuIGl9fSw4NDU3OihlLHQscik9Pnt2YXIgbj1yKDk5NzQpLGE9cig2OTE2KSxpPXIoNzkwOCkscz1yKDM0MTEpLG89cig3NjU5KSxjPXIoNDQxMSksbD1yKDYyNDQpLGg9cig2MTM1KSx1PXIoNDEyMSksZD1yKDEyNDYpLGY9QXJyYXk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PWkoZSkscj1jKHRoaXMpLGc9YXJndW1lbnRzLmxlbmd0aCxwPWc+MT9hcmd1bWVudHNbMV06dm9pZCAwLG09dm9pZCAwIT09cDttJiYocD1uKHAsZz4yP2FyZ3VtZW50c1syXTp2b2lkIDApKTt2YXIgYix5LHcsdix4LFMsQT1kKHQpLGs9MDtpZighQXx8dGhpcz09PWYmJm8oQSkpZm9yKGI9bCh0KSx5PXI/bmV3IHRoaXMoYik6ZihiKTtiPms7aysrKVM9bT9wKHRba10sayk6dFtrXSxoKHksayxTKTtlbHNlIGZvcih4PSh2PXUodCxBKSkubmV4dCx5PXI/bmV3IHRoaXM6W107ISh3PWEoeCx2KSkuZG9uZTtrKyspUz1tP3ModixwLFt3LnZhbHVlLGtdLCEwKTp3LnZhbHVlLGgoeSxrLFMpO3JldHVybiB5Lmxlbmd0aD1rLHl9fSwxMzE4OihlLHQscik9Pnt2YXIgbj1yKDU2NTYpLGE9cigxNDAwKSxpPXIoNjI0NCkscz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxyLHMpe3ZhciBvLGM9bih0KSxsPWkoYyksaD1hKHMsbCk7aWYoZSYmciE9cil7Zm9yKDtsPmg7KWlmKChvPWNbaCsrXSkhPW8pcmV0dXJuITB9ZWxzZSBmb3IoO2w+aDtoKyspaWYoKGV8fGggaW4gYykmJmNbaF09PT1yKXJldHVybiBlfHxofHwwO3JldHVybiFlJiYtMX19O2UuZXhwb3J0cz17aW5jbHVkZXM6cyghMCksaW5kZXhPZjpzKCExKX19LDk2NzE6KGUsdCxyKT0+e3ZhciBuPXIoOTk3NCksYT1yKDgzNjEpLGk9cig3OTA4KSxzPXIoNjI0NCksbz1mdW5jdGlvbihlKXt2YXIgdD0xPT1lO3JldHVybiBmdW5jdGlvbihyLG8sYyl7Zm9yKHZhciBsLGg9aShyKSx1PWEoaCksZD1uKG8sYyksZj1zKHUpO2YtLSA+MDspaWYoZChsPXVbZl0sZixoKSlzd2l0Y2goZSl7Y2FzZSAwOnJldHVybiBsO2Nhc2UgMTpyZXR1cm4gZn1yZXR1cm4gdD8tMTp2b2lkIDB9fTtlLmV4cG9ydHM9e2ZpbmRMYXN0Om8oMCksZmluZExhc3RJbmRleDpvKDEpfX0sMjA5MjooZSx0LHIpPT57dmFyIG49cig5OTc0KSxhPXIoMTcwMiksaT1yKDgzNjEpLHM9cig3OTA4KSxvPXIoNjI0NCksYz1yKDU0MTcpLGw9YShbXS5wdXNoKSxoPWZ1bmN0aW9uKGUpe3ZhciB0PTE9PWUscj0yPT1lLGE9Mz09ZSxoPTQ9PWUsdT02PT1lLGQ9Nz09ZSxmPTU9PWV8fHU7cmV0dXJuIGZ1bmN0aW9uKGcscCxtLGIpe2Zvcih2YXIgeSx3LHY9cyhnKSx4PWkodiksUz1uKHAsbSksQT1vKHgpLGs9MCxDPWJ8fGMsTz10P0MoZyxBKTpyfHxkP0MoZywwKTp2b2lkIDA7QT5rO2srKylpZigoZnx8ayBpbiB4KSYmKHc9Uyh5PXhba10sayx2KSxlKSlpZih0KU9ba109dztlbHNlIGlmKHcpc3dpdGNoKGUpe2Nhc2UgMzpyZXR1cm4hMDtjYXNlIDU6cmV0dXJuIHk7Y2FzZSA2OnJldHVybiBrO2Nhc2UgMjpsKE8seSl9ZWxzZSBzd2l0Y2goZSl7Y2FzZSA0OnJldHVybiExO2Nhc2UgNzpsKE8seSl9cmV0dXJuIHU/LTE6YXx8aD9oOk99fTtlLmV4cG9ydHM9e2ZvckVhY2g6aCgwKSxtYXA6aCgxKSxmaWx0ZXI6aCgyKSxzb21lOmgoMyksZXZlcnk6aCg0KSxmaW5kOmgoNSksZmluZEluZGV4OmgoNiksZmlsdGVyUmVqZWN0OmgoNyl9fSw5MzQxOihlLHQscik9Pnt2YXIgbj1yKDcyOTMpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciByPVtdW2VdO3JldHVybiEhciYmbigoZnVuY3Rpb24oKXtyLmNhbGwobnVsbCx0fHxmdW5jdGlvbigpe3JldHVybiAxfSwxKX0pKX19LDM2NzE6KGUsdCxyKT0+e3ZhciBuPXIoOTY2MiksYT1yKDc5MDgpLGk9cig4MzYxKSxzPXIoNjI0NCksbz1UeXBlRXJyb3IsYz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxyLGMsbCl7bihyKTt2YXIgaD1hKHQpLHU9aShoKSxkPXMoaCksZj1lP2QtMTowLGc9ZT8tMToxO2lmKGM8Milmb3IoOzspe2lmKGYgaW4gdSl7bD11W2ZdLGYrPWc7YnJlYWt9aWYoZis9ZyxlP2Y8MDpkPD1mKXRocm93IG8oIlJlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKX1mb3IoO2U/Zj49MDpkPmY7Zis9ZylmIGluIHUmJihsPXIobCx1W2ZdLGYsaCkpO3JldHVybiBsfX07ZS5leHBvcnRzPXtsZWZ0OmMoITEpLHJpZ2h0OmMoITApfX0sMzY1ODooZSx0LHIpPT57dmFyIG49cig5NzgxKSxhPXIoMzE1NyksaT1UeXBlRXJyb3Iscz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLG89biYmIWZ1bmN0aW9uKCl7aWYodm9pZCAwIT09dGhpcylyZXR1cm4hMDt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCJsZW5ndGgiLHt3cml0YWJsZTohMX0pLmxlbmd0aD0xfWNhdGNoKGUpe3JldHVybiBlIGluc3RhbmNlb2YgVHlwZUVycm9yfX0oKTtlLmV4cG9ydHM9bz9mdW5jdGlvbihlLHQpe2lmKGEoZSkmJiFzKGUsImxlbmd0aCIpLndyaXRhYmxlKXRocm93IGkoIkNhbm5vdCBzZXQgcmVhZCBvbmx5IC5sZW5ndGgiKTtyZXR1cm4gZS5sZW5ndGg9dH06ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5sZW5ndGg9dH19LDE1ODk6KGUsdCxyKT0+e3ZhciBuPXIoMTQwMCksYT1yKDYyNDQpLGk9cig2MTM1KSxzPUFycmF5LG89TWF0aC5tYXg7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIGM9YShlKSxsPW4odCxjKSxoPW4odm9pZCAwPT09cj9jOnIsYyksdT1zKG8oaC1sLDApKSxkPTA7bDxoO2wrKyxkKyspaSh1LGQsZVtsXSk7cmV0dXJuIHUubGVuZ3RoPWQsdX19LDIwNjooZSx0LHIpPT57dmFyIG49cigxNzAyKTtlLmV4cG9ydHM9bihbXS5zbGljZSl9LDQzNjI6KGUsdCxyKT0+e3ZhciBuPXIoMTU4OSksYT1NYXRoLmZsb29yLGk9ZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmxlbmd0aCxjPWEoci8yKTtyZXR1cm4gcjw4P3MoZSx0KTpvKGUsaShuKGUsMCxjKSx0KSxpKG4oZSxjKSx0KSx0KX0scz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcixuLGE9ZS5sZW5ndGgsaT0xO2k8YTspe2ZvcihuPWkscj1lW2ldO24mJnQoZVtuLTFdLHIpPjA7KWVbbl09ZVstLW5dO24hPT1pKysmJihlW25dPXIpfXJldHVybiBlfSxvPWZ1bmN0aW9uKGUsdCxyLG4pe2Zvcih2YXIgYT10Lmxlbmd0aCxpPXIubGVuZ3RoLHM9MCxvPTA7czxhfHxvPGk7KWVbcytvXT1zPGEmJm88aT9uKHRbc10scltvXSk8PTA/dFtzKytdOnJbbysrXTpzPGE/dFtzKytdOnJbbysrXTtyZXR1cm4gZX07ZS5leHBvcnRzPWl9LDc0NzU6KGUsdCxyKT0+e3ZhciBuPXIoMzE1NyksYT1yKDQ0MTEpLGk9cigxMTEpLHM9cig1MTEyKSgic3BlY2llcyIpLG89QXJyYXk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiBuKGUpJiYodD1lLmNvbnN0cnVjdG9yLChhKHQpJiYodD09PW98fG4odC5wcm90b3R5cGUpKXx8aSh0KSYmbnVsbD09PSh0PXRbc10pKSYmKHQ9dm9pZCAwKSksdm9pZCAwPT09dD9vOnR9fSw1NDE3OihlLHQscik9Pnt2YXIgbj1yKDc0NzUpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBuZXcobihlKSkoMD09PXQ/MDp0KX19LDE4NDM6KGUsdCxyKT0+e3ZhciBuPXIoNjI0NCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPW4oZSksYT1uZXcgdChyKSxpPTA7aTxyO2krKylhW2ldPWVbci1pLTFdO3JldHVybiBhfX0sMTU3MjooZSx0LHIpPT57dmFyIG49cig2MjQ0KSxhPXIoOTMwMyksaT1SYW5nZUVycm9yO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQscixzKXt2YXIgbz1uKGUpLGM9YShyKSxsPWM8MD9vK2M6YztpZihsPj1vfHxsPDApdGhyb3cgaSgiSW5jb3JyZWN0IGluZGV4Iik7Zm9yKHZhciBoPW5ldyB0KG8pLHU9MDt1PG87dSsrKWhbdV09dT09PWw/czplW3VdO3JldHVybiBofX0sMzQxMTooZSx0LHIpPT57dmFyIG49cig5NjcwKSxhPXIoOTIxMik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLGkpe3RyeXtyZXR1cm4gaT90KG4ocilbMF0sclsxXSk6dChyKX1jYXRjaCh0KXthKGUsInRocm93Iix0KX19fSw3MDcyOihlLHQscik9Pnt2YXIgbj1yKDUxMTIpKCJpdGVyYXRvciIpLGE9ITE7dHJ5e3ZhciBpPTAscz17bmV4dDpmdW5jdGlvbigpe3JldHVybntkb25lOiEhaSsrfX0scmV0dXJuOmZ1bmN0aW9uKCl7YT0hMH19O3Nbbl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sQXJyYXkuZnJvbShzLChmdW5jdGlvbigpe3Rocm93IDJ9KSl9Y2F0Y2goZSl7fWUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKCF0JiYhYSlyZXR1cm4hMTt2YXIgcj0hMTt0cnl7dmFyIGk9e307aVtuXT1mdW5jdGlvbigpe3JldHVybntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6cj0hMH19fX0sZShpKX1jYXRjaChlKXt9cmV0dXJuIHJ9fSw0MzI2OihlLHQscik9Pnt2YXIgbj1yKDE3MDIpLGE9bih7fS50b1N0cmluZyksaT1uKCIiLnNsaWNlKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGkoYShlKSw4LC0xKX19LDY0ODooZSx0LHIpPT57dmFyIG49cigxNjk0KSxhPXIoNjE0KSxpPXIoNDMyNikscz1yKDUxMTIpKCJ0b1N0cmluZ1RhZyIpLG89T2JqZWN0LGM9IkFyZ3VtZW50cyI9PWkoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKTtlLmV4cG9ydHM9bj9pOmZ1bmN0aW9uKGUpe3ZhciB0LHIsbjtyZXR1cm4gdm9pZCAwPT09ZT8iVW5kZWZpbmVkIjpudWxsPT09ZT8iTnVsbCI6InN0cmluZyI9PXR5cGVvZihyPWZ1bmN0aW9uKGUsdCl7dHJ5e3JldHVybiBlW3RdfWNhdGNoKGUpe319KHQ9byhlKSxzKSk/cjpjP2kodCk6Ik9iamVjdCI9PShuPWkodCkpJiZhKHQuY2FsbGVlKT8iQXJndW1lbnRzIjpufX0sOTMyMDooZSx0LHIpPT57dmFyIG49cigxNzAyKSxhPXIoOTE5MCksaT1yKDI0MjMpLmdldFdlYWtEYXRhLHM9cig1Nzg3KSxvPXIoOTY3MCksYz1yKDg1NTQpLGw9cigxMTEpLGg9cig0MDgpLHU9cigyMDkyKSxkPXIoMjU5NyksZj1yKDk5MDkpLGc9Zi5zZXQscD1mLmdldHRlckZvcixtPXUuZmluZCxiPXUuZmluZEluZGV4LHk9bihbXS5zcGxpY2UpLHc9MCx2PWZ1bmN0aW9uKGUpe3JldHVybiBlLmZyb3plbnx8KGUuZnJvemVuPW5ldyB4KX0seD1mdW5jdGlvbigpe3RoaXMuZW50cmllcz1bXX0sUz1mdW5jdGlvbihlLHQpe3JldHVybiBtKGUuZW50cmllcywoZnVuY3Rpb24oZSl7cmV0dXJuIGVbMF09PT10fSkpfTt4LnByb3RvdHlwZT17Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PVModGhpcyxlKTtpZih0KXJldHVybiB0WzFdfSxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuISFTKHRoaXMsZSl9LHNldDpmdW5jdGlvbihlLHQpe3ZhciByPVModGhpcyxlKTtyP3JbMV09dDp0aGlzLmVudHJpZXMucHVzaChbZSx0XSl9LGRlbGV0ZTpmdW5jdGlvbihlKXt2YXIgdD1iKHRoaXMuZW50cmllcywoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF09PT1lfSkpO3JldHVybn50JiZ5KHRoaXMuZW50cmllcyx0LDEpLCEhfnR9fSxlLmV4cG9ydHM9e2dldENvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsdCxyLG4pe3ZhciB1PWUoKGZ1bmN0aW9uKGUsYSl7cyhlLGYpLGcoZSx7dHlwZTp0LGlkOncrKyxmcm96ZW46dm9pZCAwfSksYyhhKXx8aChhLGVbbl0se3RoYXQ6ZSxBU19FTlRSSUVTOnJ9KX0pKSxmPXUucHJvdG90eXBlLG09cCh0KSxiPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1tKGUpLGE9aShvKHQpLCEwKTtyZXR1cm4hMD09PWE/dihuKS5zZXQodCxyKTphW24uaWRdPXIsZX07cmV0dXJuIGEoZix7ZGVsZXRlOmZ1bmN0aW9uKGUpe3ZhciB0PW0odGhpcyk7aWYoIWwoZSkpcmV0dXJuITE7dmFyIHI9aShlKTtyZXR1cm4hMD09PXI/dih0KS5kZWxldGUoZSk6ciYmZChyLHQuaWQpJiZkZWxldGUgclt0LmlkXX0saGFzOmZ1bmN0aW9uKGUpe3ZhciB0PW0odGhpcyk7aWYoIWwoZSkpcmV0dXJuITE7dmFyIHI9aShlKTtyZXR1cm4hMD09PXI/dih0KS5oYXMoZSk6ciYmZChyLHQuaWQpfX0pLGEoZixyP3tnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9bSh0aGlzKTtpZihsKGUpKXt2YXIgcj1pKGUpO3JldHVybiEwPT09cj92KHQpLmdldChlKTpyP3JbdC5pZF06dm9pZCAwfX0sc2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGIodGhpcyxlLHQpfX06e2FkZDpmdW5jdGlvbihlKXtyZXR1cm4gYih0aGlzLGUsITApfX0pLHV9fX0sNzcxMDooZSx0LHIpPT57dmFyIG49cigyMTA5KSxhPXIoNzg1NCksaT1yKDE3MDIpLHM9cig0NzA1KSxvPXIoODA1MiksYz1yKDI0MjMpLGw9cig0MDgpLGg9cig1Nzg3KSx1PXIoNjE0KSxkPXIoODU1NCksZj1yKDExMSksZz1yKDcyOTMpLHA9cig3MDcyKSxtPXIoODAwMyksYj1yKDk1ODcpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7dmFyIHk9LTEhPT1lLmluZGV4T2YoIk1hcCIpLHc9LTEhPT1lLmluZGV4T2YoIldlYWsiKSx2PXk/InNldCI6ImFkZCIseD1hW2VdLFM9eCYmeC5wcm90b3R5cGUsQT14LGs9e30sQz1mdW5jdGlvbihlKXt2YXIgdD1pKFNbZV0pO28oUyxlLCJhZGQiPT1lP2Z1bmN0aW9uKGUpe3JldHVybiB0KHRoaXMsMD09PWU/MDplKSx0aGlzfToiZGVsZXRlIj09ZT9mdW5jdGlvbihlKXtyZXR1cm4hKHcmJiFmKGUpKSYmdCh0aGlzLDA9PT1lPzA6ZSl9OiJnZXQiPT1lP2Z1bmN0aW9uKGUpe3JldHVybiB3JiYhZihlKT92b2lkIDA6dCh0aGlzLDA9PT1lPzA6ZSl9OiJoYXMiPT1lP2Z1bmN0aW9uKGUpe3JldHVybiEodyYmIWYoZSkpJiZ0KHRoaXMsMD09PWU/MDplKX06ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdCh0aGlzLDA9PT1lPzA6ZSxyKSx0aGlzfSl9O2lmKHMoZSwhdSh4KXx8ISh3fHxTLmZvckVhY2gmJiFnKChmdW5jdGlvbigpeyhuZXcgeCkuZW50cmllcygpLm5leHQoKX0pKSkpKUE9ci5nZXRDb25zdHJ1Y3Rvcih0LGUseSx2KSxjLmVuYWJsZSgpO2Vsc2UgaWYocyhlLCEwKSl7dmFyIE89bmV3IEEsRj1PW3ZdKHc/e306LTAsMSkhPU8sST1nKChmdW5jdGlvbigpe08uaGFzKDEpfSkpLFQ9cCgoZnVuY3Rpb24oZSl7bmV3IHgoZSl9KSksTT0hdyYmZygoZnVuY3Rpb24oKXtmb3IodmFyIGU9bmV3IHgsdD01O3QtLTspZVt2XSh0LHQpO3JldHVybiFlLmhhcygtMCl9KSk7VHx8KChBPXQoKGZ1bmN0aW9uKGUsdCl7aChlLFMpO3ZhciByPWIobmV3IHgsZSxBKTtyZXR1cm4gZCh0KXx8bCh0LHJbdl0se3RoYXQ6cixBU19FTlRSSUVTOnl9KSxyfSkpKS5wcm90b3R5cGU9UyxTLmNvbnN0cnVjdG9yPUEpLChJfHxNKSYmKEMoImRlbGV0ZSIpLEMoImhhcyIpLHkmJkMoImdldCIpKSwoTXx8RikmJkModiksdyYmUy5jbGVhciYmZGVsZXRlIFMuY2xlYXJ9cmV0dXJuIGtbZV09QSxuKHtnbG9iYWw6ITAsY29uc3RydWN0b3I6ITAsZm9yY2VkOkEhPXh9LGspLG0oQSxlKSx3fHxyLnNldFN0cm9uZyhBLGUseSksQX19LDk5MjA6KGUsdCxyKT0+e3ZhciBuPXIoMjU5NyksYT1yKDM4ODcpLGk9cigxMjM2KSxzPXIoMzA3MCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIG89YSh0KSxjPXMuZixsPWkuZixoPTA7aDxvLmxlbmd0aDtoKyspe3ZhciB1PW9baF07bihlLHUpfHxyJiZuKHIsdSl8fGMoZSx1LGwodCx1KSl9fX0sNDk2NDooZSx0LHIpPT57dmFyIG49cig1MTEyKSgibWF0Y2giKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9Ly4vO3RyeXsiLy4vIltlXSh0KX1jYXRjaChyKXt0cnl7cmV0dXJuIHRbbl09ITEsIi8uLyJbZV0odCl9Y2F0Y2goZSl7fX1yZXR1cm4hMX19LDg1NDQ6KGUsdCxyKT0+e3ZhciBuPXIoNzI5Myk7ZS5leHBvcnRzPSFuKChmdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPW51bGwsT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyBlKSE9PWUucHJvdG90eXBlfSkpfSw2MTc4OmU9PntlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm57dmFsdWU6ZSxkb25lOnR9fX0sODg4MDooZSx0LHIpPT57dmFyIG49cig5NzgxKSxhPXIoMzA3MCksaT1yKDkxMTQpO2UuZXhwb3J0cz1uP2Z1bmN0aW9uKGUsdCxyKXtyZXR1cm4gYS5mKGUsdCxpKDEscikpfTpmdW5jdGlvbihlLHQscil7cmV0dXJuIGVbdF09cixlfX0sOTExNDplPT57ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJue2VudW1lcmFibGU6ISgxJmUpLGNvbmZpZ3VyYWJsZTohKDImZSksd3JpdGFibGU6ISg0JmUpLHZhbHVlOnR9fX0sNjEzNTooZSx0LHIpPT57dmFyIG49cig0OTQ4KSxhPXIoMzA3MCksaT1yKDkxMTQpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7dmFyIHM9bih0KTtzIGluIGU/YS5mKGUscyxpKDAscikpOmVbc109cn19LDcwNDU6KGUsdCxyKT0+e3ZhciBuPXIoNjMzOSksYT1yKDMwNzApO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7cmV0dXJuIHIuZ2V0JiZuKHIuZ2V0LHQse2dldHRlcjohMH0pLHIuc2V0JiZuKHIuc2V0LHQse3NldHRlcjohMH0pLGEuZihlLHQscil9fSw4MDUyOihlLHQscik9Pnt2YXIgbj1yKDYxNCksYT1yKDMwNzApLGk9cig2MzM5KSxzPXIoMzA3Mik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLG8pe298fChvPXt9KTt2YXIgYz1vLmVudW1lcmFibGUsbD12b2lkIDAhPT1vLm5hbWU/by5uYW1lOnQ7aWYobihyKSYmaShyLGwsbyksby5nbG9iYWwpYz9lW3RdPXI6cyh0LHIpO2Vsc2V7dHJ5e28udW5zYWZlP2VbdF0mJihjPSEwKTpkZWxldGUgZVt0XX1jYXRjaChlKXt9Yz9lW3RdPXI6YS5mKGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohby5ub25Db25maWd1cmFibGUsd3JpdGFibGU6IW8ubm9uV3JpdGFibGV9KX1yZXR1cm4gZX19LDkxOTA6KGUsdCxyKT0+e3ZhciBuPXIoODA1Mik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIGEgaW4gdCluKGUsYSx0W2FdLHIpO3JldHVybiBlfX0sMzA3MjooZSx0LHIpPT57dmFyIG49cig3ODU0KSxhPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt0cnl7YShuLGUse3ZhbHVlOnQsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSl9Y2F0Y2gocil7bltlXT10fXJldHVybiB0fX0sNTExNzooZSx0LHIpPT57dmFyIG49cig2MzMwKSxhPVR5cGVFcnJvcjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZighZGVsZXRlIGVbdF0pdGhyb3cgYSgiQ2Fubm90IGRlbGV0ZSBwcm9wZXJ0eSAiK24odCkrIiBvZiAiK24oZSkpfX0sOTc4MTooZSx0LHIpPT57dmFyIG49cig3MjkzKTtlLmV4cG9ydHM9IW4oKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwxLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KVsxXX0pKX0sNDE1NDplPT57dmFyIHQ9Im9iamVjdCI9PXR5cGVvZiBkb2N1bWVudCYmZG9jdW1lbnQuYWxsLHI9dm9pZCAwPT09dCYmdm9pZCAwIT09dDtlLmV4cG9ydHM9e2FsbDp0LElTX0hUTUxEREE6cn19LDMxNzooZSx0LHIpPT57dmFyIG49cig3ODU0KSxhPXIoMTExKSxpPW4uZG9jdW1lbnQscz1hKGkpJiZhKGkuY3JlYXRlRWxlbWVudCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBzP2kuY3JlYXRlRWxlbWVudChlKTp7fX19LDcyMDc6ZT0+e3ZhciB0PVR5cGVFcnJvcjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoZT45MDA3MTk5MjU0NzQwOTkxKXRocm93IHQoIk1heGltdW0gYWxsb3dlZCBpbmRleCBleGNlZWRlZCIpO3JldHVybiBlfX0sMzY3ODplPT57ZS5leHBvcnRzPXtJbmRleFNpemVFcnJvcjp7czoiSU5ERVhfU0laRV9FUlIiLGM6MSxtOjF9LERPTVN0cmluZ1NpemVFcnJvcjp7czoiRE9NU1RSSU5HX1NJWkVfRVJSIixjOjIsbTowfSxIaWVyYXJjaHlSZXF1ZXN0RXJyb3I6e3M6IkhJRVJBUkNIWV9SRVFVRVNUX0VSUiIsYzozLG06MX0sV3JvbmdEb2N1bWVudEVycm9yOntzOiJXUk9OR19ET0NVTUVOVF9FUlIiLGM6NCxtOjF9LEludmFsaWRDaGFyYWN0ZXJFcnJvcjp7czoiSU5WQUxJRF9DSEFSQUNURVJfRVJSIixjOjUsbToxfSxOb0RhdGFBbGxvd2VkRXJyb3I6e3M6Ik5PX0RBVEFfQUxMT1dFRF9FUlIiLGM6NixtOjB9LE5vTW9kaWZpY2F0aW9uQWxsb3dlZEVycm9yOntzOiJOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIiLGM6NyxtOjF9LE5vdEZvdW5kRXJyb3I6e3M6Ik5PVF9GT1VORF9FUlIiLGM6OCxtOjF9LE5vdFN1cHBvcnRlZEVycm9yOntzOiJOT1RfU1VQUE9SVEVEX0VSUiIsYzo5LG06MX0sSW5Vc2VBdHRyaWJ1dGVFcnJvcjp7czoiSU5VU0VfQVRUUklCVVRFX0VSUiIsYzoxMCxtOjF9LEludmFsaWRTdGF0ZUVycm9yOntzOiJJTlZBTElEX1NUQVRFX0VSUiIsYzoxMSxtOjF9LFN5bnRheEVycm9yOntzOiJTWU5UQVhfRVJSIixjOjEyLG06MX0sSW52YWxpZE1vZGlmaWNhdGlvbkVycm9yOntzOiJJTlZBTElEX01PRElGSUNBVElPTl9FUlIiLGM6MTMsbToxfSxOYW1lc3BhY2VFcnJvcjp7czoiTkFNRVNQQUNFX0VSUiIsYzoxNCxtOjF9LEludmFsaWRBY2Nlc3NFcnJvcjp7czoiSU5WQUxJRF9BQ0NFU1NfRVJSIixjOjE1LG06MX0sVmFsaWRhdGlvbkVycm9yOntzOiJWQUxJREFUSU9OX0VSUiIsYzoxNixtOjB9LFR5cGVNaXNtYXRjaEVycm9yOntzOiJUWVBFX01JU01BVENIX0VSUiIsYzoxNyxtOjF9LFNlY3VyaXR5RXJyb3I6e3M6IlNFQ1VSSVRZX0VSUiIsYzoxOCxtOjF9LE5ldHdvcmtFcnJvcjp7czoiTkVUV09SS19FUlIiLGM6MTksbToxfSxBYm9ydEVycm9yOntzOiJBQk9SVF9FUlIiLGM6MjAsbToxfSxVUkxNaXNtYXRjaEVycm9yOntzOiJVUkxfTUlTTUFUQ0hfRVJSIixjOjIxLG06MX0sUXVvdGFFeGNlZWRlZEVycm9yOntzOiJRVU9UQV9FWENFRURFRF9FUlIiLGM6MjIsbToxfSxUaW1lb3V0RXJyb3I6e3M6IlRJTUVPVVRfRVJSIixjOjIzLG06MX0sSW52YWxpZE5vZGVUeXBlRXJyb3I6e3M6IklOVkFMSURfTk9ERV9UWVBFX0VSUiIsYzoyNCxtOjF9LERhdGFDbG9uZUVycm9yOntzOiJEQVRBX0NMT05FX0VSUiIsYzoyNSxtOjF9fX0sODMyNDplPT57ZS5leHBvcnRzPXtDU1NSdWxlTGlzdDowLENTU1N0eWxlRGVjbGFyYXRpb246MCxDU1NWYWx1ZUxpc3Q6MCxDbGllbnRSZWN0TGlzdDowLERPTVJlY3RMaXN0OjAsRE9NU3RyaW5nTGlzdDowLERPTVRva2VuTGlzdDoxLERhdGFUcmFuc2Zlckl0ZW1MaXN0OjAsRmlsZUxpc3Q6MCxIVE1MQWxsQ29sbGVjdGlvbjowLEhUTUxDb2xsZWN0aW9uOjAsSFRNTEZvcm1FbGVtZW50OjAsSFRNTFNlbGVjdEVsZW1lbnQ6MCxNZWRpYUxpc3Q6MCxNaW1lVHlwZUFycmF5OjAsTmFtZWROb2RlTWFwOjAsTm9kZUxpc3Q6MSxQYWludFJlcXVlc3RMaXN0OjAsUGx1Z2luOjAsUGx1Z2luQXJyYXk6MCxTVkdMZW5ndGhMaXN0OjAsU1ZHTnVtYmVyTGlzdDowLFNWR1BhdGhTZWdMaXN0OjAsU1ZHUG9pbnRMaXN0OjAsU1ZHU3RyaW5nTGlzdDowLFNWR1RyYW5zZm9ybUxpc3Q6MCxTb3VyY2VCdWZmZXJMaXN0OjAsU3R5bGVTaGVldExpc3Q6MCxUZXh0VHJhY2tDdWVMaXN0OjAsVGV4dFRyYWNrTGlzdDowLFRvdWNoTGlzdDowfX0sODUwOTooZSx0LHIpPT57dmFyIG49cigzMTcpKCJzcGFuIikuY2xhc3NMaXN0LGE9biYmbi5jb25zdHJ1Y3RvciYmbi5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7ZS5leHBvcnRzPWE9PT1PYmplY3QucHJvdG90eXBlP3ZvaWQgMDphfSw4ODg2OihlLHQscik9Pnt2YXIgbj1yKDgxMTMpLm1hdGNoKC9maXJlZm94XC8oXGQrKS9pKTtlLmV4cG9ydHM9ISFuJiYrblsxXX0sNzg3MTooZSx0LHIpPT57dmFyIG49cigzODIzKSxhPXIoNTI2OCk7ZS5leHBvcnRzPSFuJiYhYSYmIm9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJiJvYmplY3QiPT10eXBlb2YgZG9jdW1lbnR9LDM4MjM6ZT0+e2UuZXhwb3J0cz0ib2JqZWN0Ij09dHlwZW9mIERlbm8mJkRlbm8mJiJvYmplY3QiPT10eXBlb2YgRGVuby52ZXJzaW9ufSwyNTY6KGUsdCxyKT0+e3ZhciBuPXIoODExMyk7ZS5leHBvcnRzPS9NU0lFfFRyaWRlbnQvLnRlc3Qobil9LDE1Mjg6KGUsdCxyKT0+e3ZhciBuPXIoODExMyk7ZS5leHBvcnRzPS9pcGFkfGlwaG9uZXxpcG9kL2kudGVzdChuKSYmInVuZGVmaW5lZCIhPXR5cGVvZiBQZWJibGV9LDY4MzM6KGUsdCxyKT0+e3ZhciBuPXIoODExMyk7ZS5leHBvcnRzPS8oPzppcGFkfGlwaG9uZXxpcG9kKS4qYXBwbGV3ZWJraXQvaS50ZXN0KG4pfSw1MjY4OihlLHQscik9Pnt2YXIgbj1yKDQzMjYpO2UuZXhwb3J0cz0idW5kZWZpbmVkIiE9dHlwZW9mIHByb2Nlc3MmJiJwcm9jZXNzIj09bihwcm9jZXNzKX0sMTAzNjooZSx0LHIpPT57dmFyIG49cig4MTEzKTtlLmV4cG9ydHM9L3dlYjBzKD8hLipjaHJvbWUpL2kudGVzdChuKX0sODExMzplPT57ZS5leHBvcnRzPSJ1bmRlZmluZWQiIT10eXBlb2YgbmF2aWdhdG9yJiZTdHJpbmcobmF2aWdhdG9yLnVzZXJBZ2VudCl8fCIifSw3MzkyOihlLHQscik9Pnt2YXIgbixhLGk9cig3ODU0KSxzPXIoODExMyksbz1pLnByb2Nlc3MsYz1pLkRlbm8sbD1vJiZvLnZlcnNpb25zfHxjJiZjLnZlcnNpb24saD1sJiZsLnY4O2gmJihhPShuPWguc3BsaXQoIi4iKSlbMF0+MCYmblswXTw0PzE6KyhuWzBdK25bMV0pKSwhYSYmcyYmKCEobj1zLm1hdGNoKC9FZGdlXC8oXGQrKS8pKXx8blsxXT49NzQpJiYobj1zLm1hdGNoKC9DaHJvbWVcLyhcZCspLykpJiYoYT0rblsxXSksZS5leHBvcnRzPWF9LDgwMDg6KGUsdCxyKT0+e3ZhciBuPXIoODExMykubWF0Y2goL0FwcGxlV2ViS2l0XC8oXGQrKVwuLyk7ZS5leHBvcnRzPSEhbiYmK25bMV19LDc0ODplPT57ZS5leHBvcnRzPVsiY29uc3RydWN0b3IiLCJoYXNPd25Qcm9wZXJ0eSIsImlzUHJvdG90eXBlT2YiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsInRvTG9jYWxlU3RyaW5nIiwidG9TdHJpbmciLCJ2YWx1ZU9mIl19LDEwNjA6KGUsdCxyKT0+e3ZhciBuPXIoMTcwMiksYT1FcnJvcixpPW4oIiIucmVwbGFjZSkscz1TdHJpbmcoYSgienhjYXNkIikuc3RhY2spLG89L1xuXHMqYXQgW146XSo6W15cbl0qLyxjPW8udGVzdChzKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZihjJiYic3RyaW5nIj09dHlwZW9mIGUmJiFhLnByZXBhcmVTdGFja1RyYWNlKWZvcig7dC0tOyllPWkoZSxvLCIiKTtyZXR1cm4gZX19LDUzOTI6KGUsdCxyKT0+e3ZhciBuPXIoODg4MCksYT1yKDEwNjApLGk9cigyOTE0KSxzPUVycm9yLmNhcHR1cmVTdGFja1RyYWNlO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQscixvKXtpJiYocz9zKGUsdCk6bihlLCJzdGFjayIsYShyLG8pKSl9fSwyOTE0OihlLHQscik9Pnt2YXIgbj1yKDcyOTMpLGE9cig5MTE0KTtlLmV4cG9ydHM9IW4oKGZ1bmN0aW9uKCl7dmFyIGU9RXJyb3IoImEiKTtyZXR1cm4hKCJzdGFjayJpbiBlKXx8KE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJzdGFjayIsYSgxLDcpKSw3IT09ZS5zdGFjayl9KSl9LDc3NjI6KGUsdCxyKT0+e3ZhciBuPXIoOTc4MSksYT1yKDcyOTMpLGk9cig5NjcwKSxzPXIoMzApLG89cig2Mjc3KSxjPUVycm9yLnByb3RvdHlwZS50b1N0cmluZyxsPWEoKGZ1bmN0aW9uKCl7aWYobil7dmFyIGU9cyhPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIm5hbWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcz09PWV9fSkpO2lmKCJ0cnVlIiE9PWMuY2FsbChlKSlyZXR1cm4hMH1yZXR1cm4iMjogMSIhPT1jLmNhbGwoe21lc3NhZ2U6MSxuYW1lOjJ9KXx8IkVycm9yIiE9PWMuY2FsbCh7fSl9KSk7ZS5leHBvcnRzPWw/ZnVuY3Rpb24oKXt2YXIgZT1pKHRoaXMpLHQ9byhlLm5hbWUsIkVycm9yIikscj1vKGUubWVzc2FnZSk7cmV0dXJuIHQ/cj90KyI6ICIrcjp0OnJ9OmN9LDIxMDk6KGUsdCxyKT0+e3ZhciBuPXIoNzg1NCksYT1yKDEyMzYpLmYsaT1yKDg4ODApLHM9cig4MDUyKSxvPXIoMzA3MiksYz1yKDk5MjApLGw9cig0NzA1KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcixoLHUsZCxmLGc9ZS50YXJnZXQscD1lLmdsb2JhbCxtPWUuc3RhdDtpZihyPXA/bjptP25bZ118fG8oZyx7fSk6KG5bZ118fHt9KS5wcm90b3R5cGUpZm9yKGggaW4gdCl7aWYoZD10W2hdLHU9ZS5kb250Q2FsbEdldFNldD8oZj1hKHIsaCkpJiZmLnZhbHVlOnJbaF0sIWwocD9oOmcrKG0/Ii4iOiIjIikraCxlLmZvcmNlZCkmJnZvaWQgMCE9PXUpe2lmKHR5cGVvZiBkPT10eXBlb2YgdSljb250aW51ZTtjKGQsdSl9KGUuc2hhbXx8dSYmdS5zaGFtKSYmaShkLCJzaGFtIiwhMCkscyhyLGgsZCxlKX19fSw3MjkzOmU9PntlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiEhZSgpfWNhdGNoKGUpe3JldHVybiEwfX19LDcwMDc6KGUsdCxyKT0+e3IoNDkxNik7dmFyIG49cigxNDcwKSxhPXIoODA1MiksaT1yKDIyNjEpLHM9cig3MjkzKSxvPXIoNTExMiksYz1yKDg4ODApLGw9bygic3BlY2llcyIpLGg9UmVnRXhwLnByb3RvdHlwZTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsdSl7dmFyIGQ9byhlKSxmPSFzKChmdW5jdGlvbigpe3ZhciB0PXt9O3JldHVybiB0W2RdPWZ1bmN0aW9uKCl7cmV0dXJuIDd9LDchPSIiW2VdKHQpfSkpLGc9ZiYmIXMoKGZ1bmN0aW9uKCl7dmFyIHQ9ITEscj0vYS87cmV0dXJuInNwbGl0Ij09PWUmJigocj17fSkuY29uc3RydWN0b3I9e30sci5jb25zdHJ1Y3RvcltsXT1mdW5jdGlvbigpe3JldHVybiByfSxyLmZsYWdzPSIiLHJbZF09Ly4vW2RdKSxyLmV4ZWM9ZnVuY3Rpb24oKXtyZXR1cm4gdD0hMCxudWxsfSxyW2RdKCIiKSwhdH0pKTtpZighZnx8IWd8fHIpe3ZhciBwPW4oLy4vW2RdKSxtPXQoZCwiIltlXSwoZnVuY3Rpb24oZSx0LHIsYSxzKXt2YXIgbz1uKGUpLGM9dC5leGVjO3JldHVybiBjPT09aXx8Yz09PWguZXhlYz9mJiYhcz97ZG9uZTohMCx2YWx1ZTpwKHQscixhKX06e2RvbmU6ITAsdmFsdWU6byhyLHQsYSl9Ontkb25lOiExfX0pKTthKFN0cmluZy5wcm90b3R5cGUsZSxtWzBdKSxhKGgsZCxtWzFdKX11JiZjKGhbZF0sInNoYW0iLCEwKX19LDY3OTA6KGUsdCxyKT0+e3ZhciBuPXIoMzE1NyksYT1yKDYyNDQpLGk9cig3MjA3KSxzPXIoOTk3NCksbz1mdW5jdGlvbihlLHQscixjLGwsaCx1LGQpe2Zvcih2YXIgZixnLHA9bCxtPTAsYj0hIXUmJnModSxkKTttPGM7KW0gaW4gciYmKGY9Yj9iKHJbbV0sbSx0KTpyW21dLGg+MCYmbihmKT8oZz1hKGYpLHA9byhlLHQsZixnLHAsaC0xKS0xKTooaShwKzEpLGVbcF09ZikscCsrKSxtKys7cmV0dXJuIHB9O2UuZXhwb3J0cz1vfSw2Njc3OihlLHQscik9Pnt2YXIgbj1yKDcyOTMpO2UuZXhwb3J0cz0hbigoZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmlzRXh0ZW5zaWJsZShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKX0pKX0sMjEwNDooZSx0LHIpPT57dmFyIG49cig0Mzc0KSxhPUZ1bmN0aW9uLnByb3RvdHlwZSxpPWEuYXBwbHkscz1hLmNhbGw7ZS5leHBvcnRzPSJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmUmVmbGVjdC5hcHBseXx8KG4/cy5iaW5kKGkpOmZ1bmN0aW9uKCl7cmV0dXJuIHMuYXBwbHkoaSxhcmd1bWVudHMpfSl9LDk5NzQ6KGUsdCxyKT0+e3ZhciBuPXIoMTQ3MCksYT1yKDk2NjIpLGk9cig0Mzc0KSxzPW4obi5iaW5kKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYShlKSx2b2lkIDA9PT10P2U6aT9zKGUsdCk6ZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0LGFyZ3VtZW50cyl9fX0sNDM3NDooZSx0LHIpPT57dmFyIG49cig3MjkzKTtlLmV4cG9ydHM9IW4oKGZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oKXt9LmJpbmQoKTtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgZXx8ZS5oYXNPd25Qcm9wZXJ0eSgicHJvdG90eXBlIil9KSl9LDY5MTY6KGUsdCxyKT0+e3ZhciBuPXIoNDM3NCksYT1GdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtlLmV4cG9ydHM9bj9hLmJpbmQoYSk6ZnVuY3Rpb24oKXtyZXR1cm4gYS5hcHBseShhLGFyZ3VtZW50cyl9fSw2NTMwOihlLHQscik9Pnt2YXIgbj1yKDk3ODEpLGE9cigyNTk3KSxpPUZ1bmN0aW9uLnByb3RvdHlwZSxzPW4mJk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Isbz1hKGksIm5hbWUiKSxjPW8mJiJzb21ldGhpbmciPT09ZnVuY3Rpb24oKXt9Lm5hbWUsbD1vJiYoIW58fG4mJnMoaSwibmFtZSIpLmNvbmZpZ3VyYWJsZSk7ZS5leHBvcnRzPXtFWElTVFM6byxQUk9QRVI6YyxDT05GSUdVUkFCTEU6bH19LDU2Njg6KGUsdCxyKT0+e3ZhciBuPXIoMTcwMiksYT1yKDk2NjIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7dHJ5e3JldHVybiBuKGEoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHQpW3JdKSl9Y2F0Y2goZSl7fX19LDE0NzA6KGUsdCxyKT0+e3ZhciBuPXIoNDMyNiksYT1yKDE3MDIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZigiRnVuY3Rpb24iPT09bihlKSlyZXR1cm4gYShlKX19LDE3MDI6KGUsdCxyKT0+e3ZhciBuPXIoNDM3NCksYT1GdW5jdGlvbi5wcm90b3R5cGUsaT1hLmNhbGwscz1uJiZhLmJpbmQuYmluZChpLGkpO2UuZXhwb3J0cz1uP3M6ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGkuYXBwbHkoZSxhcmd1bWVudHMpfX19LDUwMDU6KGUsdCxyKT0+e3ZhciBuPXIoNzg1NCksYT1yKDYxNCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj8ocj1uW2VdLGEocik/cjp2b2lkIDApOm5bZV0mJm5bZV1bdF07dmFyIHJ9fSwxMjQ2OihlLHQscik9Pnt2YXIgbj1yKDY0OCksYT1yKDgxNzMpLGk9cig4NTU0KSxzPXIoNzQ5Nyksbz1yKDUxMTIpKCJpdGVyYXRvciIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZighaShlKSlyZXR1cm4gYShlLG8pfHxhKGUsIkBAaXRlcmF0b3IiKXx8c1tuKGUpXX19LDQxMjE6KGUsdCxyKT0+e3ZhciBuPXIoNjkxNiksYT1yKDk2NjIpLGk9cig5NjcwKSxzPXIoNjMzMCksbz1yKDEyNDYpLGM9VHlwZUVycm9yO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg8Mj9vKGUpOnQ7aWYoYShyKSlyZXR1cm4gaShuKHIsZSkpO3Rocm93IGMocyhlKSsiIGlzIG5vdCBpdGVyYWJsZSIpfX0sODA0NDooZSx0LHIpPT57dmFyIG49cigxNzAyKSxhPXIoMzE1NyksaT1yKDYxNCkscz1yKDQzMjYpLG89cigxMzQwKSxjPW4oW10ucHVzaCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKGkoZSkpcmV0dXJuIGU7aWYoYShlKSl7Zm9yKHZhciB0PWUubGVuZ3RoLHI9W10sbj0wO248dDtuKyspe3ZhciBsPWVbbl07InN0cmluZyI9PXR5cGVvZiBsP2MocixsKToibnVtYmVyIiE9dHlwZW9mIGwmJiJOdW1iZXIiIT1zKGwpJiYiU3RyaW5nIiE9cyhsKXx8YyhyLG8obCkpfXZhciBoPXIubGVuZ3RoLHU9ITA7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYodSlyZXR1cm4gdT0hMSx0O2lmKGEodGhpcykpcmV0dXJuIHQ7Zm9yKHZhciBuPTA7bjxoO24rKylpZihyW25dPT09ZSlyZXR1cm4gdH19fX0sODE3MzooZSx0LHIpPT57dmFyIG49cig5NjYyKSxhPXIoODU1NCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZVt0XTtyZXR1cm4gYShyKT92b2lkIDA6bihyKX19LDY0NzooZSx0LHIpPT57dmFyIG49cigxNzAyKSxhPXIoNzkwOCksaT1NYXRoLmZsb29yLHM9bigiIi5jaGFyQXQpLG89bigiIi5yZXBsYWNlKSxjPW4oIiIuc2xpY2UpLGw9L1wkKFskJidgXXxcZHsxLDJ9fDxbXj5dKj4pL2csaD0vXCQoWyQmJ2BdfFxkezEsMn0pL2c7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLG4sdSxkKXt2YXIgZj1yK2UubGVuZ3RoLGc9bi5sZW5ndGgscD1oO3JldHVybiB2b2lkIDAhPT11JiYodT1hKHUpLHA9bCksbyhkLHAsKGZ1bmN0aW9uKGEsbyl7dmFyIGw7c3dpdGNoKHMobywwKSl7Y2FzZSIkIjpyZXR1cm4iJCI7Y2FzZSImIjpyZXR1cm4gZTtjYXNlImAiOnJldHVybiBjKHQsMCxyKTtjYXNlIiciOnJldHVybiBjKHQsZik7Y2FzZSI8IjpsPXVbYyhvLDEsLTEpXTticmVhaztkZWZhdWx0OnZhciBoPStvO2lmKDA9PT1oKXJldHVybiBhO2lmKGg+Zyl7dmFyIGQ9aShoLzEwKTtyZXR1cm4gMD09PWQ/YTpkPD1nP3ZvaWQgMD09PW5bZC0xXT9zKG8sMSk6bltkLTFdK3MobywxKTphfWw9bltoLTFdfXJldHVybiB2b2lkIDA9PT1sPyIiOmx9KSl9fSw3ODU0OmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5NYXRoPT1NYXRoJiZlfTtlLmV4cG9ydHM9bigib2JqZWN0Ij09dHlwZW9mIGdsb2JhbFRoaXMmJmdsb2JhbFRoaXMpfHxuKCJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cpfHxuKCJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZil8fG4oIm9iamVjdCI9PXR5cGVvZiByLmcmJnIuZyl8fGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KCl8fHRoaXN8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCl9LDI1OTc6KGUsdCxyKT0+e3ZhciBuPXIoMTcwMiksYT1yKDc5MDgpLGk9bih7fS5oYXNPd25Qcm9wZXJ0eSk7ZS5leHBvcnRzPU9iamVjdC5oYXNPd258fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGkoYShlKSx0KX19LDM1MDE6ZT0+e2UuZXhwb3J0cz17fX0sODQyOmU9PntlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt0cnl7MT09YXJndW1lbnRzLmxlbmd0aD9jb25zb2xlLmVycm9yKGUpOmNvbnNvbGUuZXJyb3IoZSx0KX1jYXRjaChlKXt9fX0sNDkwOihlLHQscik9Pnt2YXIgbj1yKDUwMDUpO2UuZXhwb3J0cz1uKCJkb2N1bWVudCIsImRvY3VtZW50RWxlbWVudCIpfSw0NjY0OihlLHQscik9Pnt2YXIgbj1yKDk3ODEpLGE9cig3MjkzKSxpPXIoMzE3KTtlLmV4cG9ydHM9IW4mJiFhKChmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoaSgiZGl2IiksImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSkpfSwxMTc5OmU9Pnt2YXIgdD1BcnJheSxyPU1hdGguYWJzLG49TWF0aC5wb3csYT1NYXRoLmZsb29yLGk9TWF0aC5sb2cscz1NYXRoLkxOMjtlLmV4cG9ydHM9e3BhY2s6ZnVuY3Rpb24oZSxvLGMpe3ZhciBsLGgsdSxkPXQoYyksZj04KmMtby0xLGc9KDE8PGYpLTEscD1nPj4xLG09MjM9PT1vP24oMiwtMjQpLW4oMiwtNzcpOjAsYj1lPDB8fDA9PT1lJiYxL2U8MD8xOjAseT0wO2ZvcigoZT1yKGUpKSE9ZXx8ZT09PTEvMD8oaD1lIT1lPzE6MCxsPWcpOihsPWEoaShlKS9zKSxlKih1PW4oMiwtbCkpPDEmJihsLS0sdSo9MiksKGUrPWwrcD49MT9tL3U6bSpuKDIsMS1wKSkqdT49MiYmKGwrKyx1Lz0yKSxsK3A+PWc/KGg9MCxsPWcpOmwrcD49MT8oaD0oZSp1LTEpKm4oMixvKSxsKz1wKTooaD1lKm4oMixwLTEpKm4oMixvKSxsPTApKTtvPj04OylkW3krK109MjU1JmgsaC89MjU2LG8tPTg7Zm9yKGw9bDw8b3xoLGYrPW87Zj4wOylkW3krK109MjU1JmwsbC89MjU2LGYtPTg7cmV0dXJuIGRbLS15XXw9MTI4KmIsZH0sdW5wYWNrOmZ1bmN0aW9uKGUsdCl7dmFyIHIsYT1lLmxlbmd0aCxpPTgqYS10LTEscz0oMTw8aSktMSxvPXM+PjEsYz1pLTcsbD1hLTEsaD1lW2wtLV0sdT0xMjcmaDtmb3IoaD4+PTc7Yz4wOyl1PTI1Nip1K2VbbC0tXSxjLT04O2ZvcihyPXUmKDE8PC1jKS0xLHU+Pj0tYyxjKz10O2M+MDspcj0yNTYqcitlW2wtLV0sYy09ODtpZigwPT09dSl1PTEtbztlbHNle2lmKHU9PT1zKXJldHVybiByP05hTjpoPy0xLzA6MS8wO3IrPW4oMix0KSx1LT1vfXJldHVybihoPy0xOjEpKnIqbigyLHUtdCl9fX0sODM2MTooZSx0LHIpPT57dmFyIG49cigxNzAyKSxhPXIoNzI5MyksaT1yKDQzMjYpLHM9T2JqZWN0LG89bigiIi5zcGxpdCk7ZS5leHBvcnRzPWEoKGZ1bmN0aW9uKCl7cmV0dXJuIXMoInoiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKX0pKT9mdW5jdGlvbihlKXtyZXR1cm4iU3RyaW5nIj09aShlKT9vKGUsIiIpOnMoZSl9OnN9LDk1ODc6KGUsdCxyKT0+e3ZhciBuPXIoNjE0KSxhPXIoMTExKSxpPXIoNzY3NCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgcyxvO3JldHVybiBpJiZuKHM9dC5jb25zdHJ1Y3RvcikmJnMhPT1yJiZhKG89cy5wcm90b3R5cGUpJiZvIT09ci5wcm90b3R5cGUmJmkoZSxvKSxlfX0sMjc4ODooZSx0LHIpPT57dmFyIG49cigxNzAyKSxhPXIoNjE0KSxpPXIoNTQ2NSkscz1uKEZ1bmN0aW9uLnRvU3RyaW5nKTthKGkuaW5zcGVjdFNvdXJjZSl8fChpLmluc3BlY3RTb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIHMoZSl9KSxlLmV4cG9ydHM9aS5pbnNwZWN0U291cmNlfSw4MzQwOihlLHQscik9Pnt2YXIgbj1yKDExMSksYT1yKDg4ODApO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe24odCkmJiJjYXVzZSJpbiB0JiZhKGUsImNhdXNlIix0LmNhdXNlKX19LDI0MjM6KGUsdCxyKT0+e3ZhciBuPXIoMjEwOSksYT1yKDE3MDIpLGk9cigzNTAxKSxzPXIoMTExKSxvPXIoMjU5NyksYz1yKDMwNzApLmYsbD1yKDgwMDYpLGg9cigxMTU2KSx1PXIoMjA1MCksZD1yKDk3MTEpLGY9cig2Njc3KSxnPSExLHA9ZCgibWV0YSIpLG09MCxiPWZ1bmN0aW9uKGUpe2MoZSxwLHt2YWx1ZTp7b2JqZWN0SUQ6Ik8iK20rKyx3ZWFrRGF0YTp7fX19KX0seT1lLmV4cG9ydHM9e2VuYWJsZTpmdW5jdGlvbigpe3kuZW5hYmxlPWZ1bmN0aW9uKCl7fSxnPSEwO3ZhciBlPWwuZix0PWEoW10uc3BsaWNlKSxyPXt9O3JbcF09MSxlKHIpLmxlbmd0aCYmKGwuZj1mdW5jdGlvbihyKXtmb3IodmFyIG49ZShyKSxhPTAsaT1uLmxlbmd0aDthPGk7YSsrKWlmKG5bYV09PT1wKXt0KG4sYSwxKTticmVha31yZXR1cm4gbn0sbih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOiEwfSx7Z2V0T3duUHJvcGVydHlOYW1lczpoLmZ9KSl9LGZhc3RLZXk6ZnVuY3Rpb24oZSx0KXtpZighcyhlKSlyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGU/ZTooInN0cmluZyI9PXR5cGVvZiBlPyJTIjoiUCIpK2U7aWYoIW8oZSxwKSl7aWYoIXUoZSkpcmV0dXJuIkYiO2lmKCF0KXJldHVybiJFIjtiKGUpfXJldHVybiBlW3BdLm9iamVjdElEfSxnZXRXZWFrRGF0YTpmdW5jdGlvbihlLHQpe2lmKCFvKGUscCkpe2lmKCF1KGUpKXJldHVybiEwO2lmKCF0KXJldHVybiExO2IoZSl9cmV0dXJuIGVbcF0ud2Vha0RhdGF9LG9uRnJlZXplOmZ1bmN0aW9uKGUpe3JldHVybiBmJiZnJiZ1KGUpJiYhbyhlLHApJiZiKGUpLGV9fTtpW3BdPSEwfSw5OTA5OihlLHQscik9Pnt2YXIgbixhLGkscz1yKDQ4MTEpLG89cig3ODU0KSxjPXIoMTExKSxsPXIoODg4MCksaD1yKDI1OTcpLHU9cig1NDY1KSxkPXIoNjIwMCksZj1yKDM1MDEpLGc9Ik9iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkIixwPW8uVHlwZUVycm9yLG09by5XZWFrTWFwO2lmKHN8fHUuc3RhdGUpe3ZhciBiPXUuc3RhdGV8fCh1LnN0YXRlPW5ldyBtKTtiLmdldD1iLmdldCxiLmhhcz1iLmhhcyxiLnNldD1iLnNldCxuPWZ1bmN0aW9uKGUsdCl7aWYoYi5oYXMoZSkpdGhyb3cgcChnKTtyZXR1cm4gdC5mYWNhZGU9ZSxiLnNldChlLHQpLHR9LGE9ZnVuY3Rpb24oZSl7cmV0dXJuIGIuZ2V0KGUpfHx7fX0saT1mdW5jdGlvbihlKXtyZXR1cm4gYi5oYXMoZSl9fWVsc2V7dmFyIHk9ZCgic3RhdGUiKTtmW3ldPSEwLG49ZnVuY3Rpb24oZSx0KXtpZihoKGUseSkpdGhyb3cgcChnKTtyZXR1cm4gdC5mYWNhZGU9ZSxsKGUseSx0KSx0fSxhPWZ1bmN0aW9uKGUpe3JldHVybiBoKGUseSk/ZVt5XTp7fX0saT1mdW5jdGlvbihlKXtyZXR1cm4gaChlLHkpfX1lLmV4cG9ydHM9e3NldDpuLGdldDphLGhhczppLGVuZm9yY2U6ZnVuY3Rpb24oZSl7cmV0dXJuIGkoZSk/YShlKTpuKGUse30pfSxnZXR0ZXJGb3I6ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByO2lmKCFjKHQpfHwocj1hKHQpKS50eXBlIT09ZSl0aHJvdyBwKCJJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICIrZSsiIHJlcXVpcmVkIik7cmV0dXJuIHJ9fX19LDc2NTk6KGUsdCxyKT0+e3ZhciBuPXIoNTExMiksYT1yKDc0OTcpLGk9bigiaXRlcmF0b3IiKSxzPUFycmF5LnByb3RvdHlwZTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWUmJihhLkFycmF5PT09ZXx8c1tpXT09PWUpfX0sMzE1NzooZSx0LHIpPT57dmFyIG49cig0MzI2KTtlLmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oZSl7cmV0dXJuIkFycmF5Ij09bihlKX19LDQwNjc6KGUsdCxyKT0+e3ZhciBuPXIoNjQ4KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9bihlKTtyZXR1cm4iQmlnSW50NjRBcnJheSI9PXR8fCJCaWdVaW50NjRBcnJheSI9PXR9fSw2MTQ6KGUsdCxyKT0+e3ZhciBuPXIoNDE1NCksYT1uLmFsbDtlLmV4cG9ydHM9bi5JU19IVE1MRERBP2Z1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlfHxlPT09YX06ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGV9fSw0NDExOihlLHQscik9Pnt2YXIgbj1yKDE3MDIpLGE9cig3MjkzKSxpPXIoNjE0KSxzPXIoNjQ4KSxvPXIoNTAwNSksYz1yKDI3ODgpLGw9ZnVuY3Rpb24oKXt9LGg9W10sdT1vKCJSZWZsZWN0IiwiY29uc3RydWN0IiksZD0vXlxzKig/OmNsYXNzfGZ1bmN0aW9uKVxiLyxmPW4oZC5leGVjKSxnPSFkLmV4ZWMobCkscD1mdW5jdGlvbihlKXtpZighaShlKSlyZXR1cm4hMTt0cnl7cmV0dXJuIHUobCxoLGUpLCEwfWNhdGNoKGUpe3JldHVybiExfX0sbT1mdW5jdGlvbihlKXtpZighaShlKSlyZXR1cm4hMTtzd2l0Y2gocyhlKSl7Y2FzZSJBc3luY0Z1bmN0aW9uIjpjYXNlIkdlbmVyYXRvckZ1bmN0aW9uIjpjYXNlIkFzeW5jR2VuZXJhdG9yRnVuY3Rpb24iOnJldHVybiExfXRyeXtyZXR1cm4gZ3x8ISFmKGQsYyhlKSl9Y2F0Y2goZSl7cmV0dXJuITB9fTttLnNoYW09ITAsZS5leHBvcnRzPSF1fHxhKChmdW5jdGlvbigpe3ZhciBlO3JldHVybiBwKHAuY2FsbCl8fCFwKE9iamVjdCl8fCFwKChmdW5jdGlvbigpe2U9ITB9KSl8fGV9KSk/bTpwfSw0NzA1OihlLHQscik9Pnt2YXIgbj1yKDcyOTMpLGE9cig2MTQpLGk9LyN8XC5wcm90b3R5cGVcLi8scz1mdW5jdGlvbihlLHQpe3ZhciByPWNbbyhlKV07cmV0dXJuIHI9PWh8fHIhPWwmJihhKHQpP24odCk6ISF0KX0sbz1zLm5vcm1hbGl6ZT1mdW5jdGlvbihlKXtyZXR1cm4gU3RyaW5nKGUpLnJlcGxhY2UoaSwiLiIpLnRvTG93ZXJDYXNlKCl9LGM9cy5kYXRhPXt9LGw9cy5OQVRJVkU9Ik4iLGg9cy5QT0xZRklMTD0iUCI7ZS5leHBvcnRzPXN9LDU5ODg6KGUsdCxyKT0+e3ZhciBuPXIoMTExKSxhPU1hdGguZmxvb3I7ZS5leHBvcnRzPU51bWJlci5pc0ludGVnZXJ8fGZ1bmN0aW9uKGUpe3JldHVybiFuKGUpJiZpc0Zpbml0ZShlKSYmYShlKT09PWV9fSw4NTU0OmU9PntlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWV9fSwxMTE6KGUsdCxyKT0+e3ZhciBuPXIoNjE0KSxhPXIoNDE1NCksaT1hLmFsbDtlLmV4cG9ydHM9YS5JU19IVE1MRERBP2Z1bmN0aW9uKGUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgZT9udWxsIT09ZTpuKGUpfHxlPT09aX06ZnVuY3Rpb24oZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlP251bGwhPT1lOm4oZSl9fSwxOTEzOmU9PntlLmV4cG9ydHM9ITF9LDc4NTA6KGUsdCxyKT0+e3ZhciBuPXIoMTExKSxhPXIoNDMyNiksaT1yKDUxMTIpKCJtYXRjaCIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gbihlKSYmKHZvaWQgMCE9PSh0PWVbaV0pPyEhdDoiUmVnRXhwIj09YShlKSl9fSwyMTkwOihlLHQscik9Pnt2YXIgbj1yKDUwMDUpLGE9cig2MTQpLGk9cig3OTc2KSxzPXIoMzMwNyksbz1PYmplY3Q7ZS5leHBvcnRzPXM/ZnVuY3Rpb24oZSl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBlfTpmdW5jdGlvbihlKXt2YXIgdD1uKCJTeW1ib2wiKTtyZXR1cm4gYSh0KSYmaSh0LnByb3RvdHlwZSxvKGUpKX19LDQwODooZSx0LHIpPT57dmFyIG49cig5OTc0KSxhPXIoNjkxNiksaT1yKDk2NzApLHM9cig2MzMwKSxvPXIoNzY1OSksYz1yKDYyNDQpLGw9cig3OTc2KSxoPXIoNDEyMSksdT1yKDEyNDYpLGQ9cig5MjEyKSxmPVR5cGVFcnJvcixnPWZ1bmN0aW9uKGUsdCl7dGhpcy5zdG9wcGVkPWUsdGhpcy5yZXN1bHQ9dH0scD1nLnByb3RvdHlwZTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBtLGIseSx3LHYseCxTLEE9ciYmci50aGF0LGs9ISghcnx8IXIuQVNfRU5UUklFUyksQz0hKCFyfHwhci5JU19SRUNPUkQpLE89ISghcnx8IXIuSVNfSVRFUkFUT1IpLEY9ISghcnx8IXIuSU5URVJSVVBURUQpLEk9bih0LEEpLFQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG0mJmQobSwibm9ybWFsIixlKSxuZXcgZyghMCxlKX0sTT1mdW5jdGlvbihlKXtyZXR1cm4gaz8oaShlKSxGP0koZVswXSxlWzFdLFQpOkkoZVswXSxlWzFdKSk6Rj9JKGUsVCk6SShlKX07aWYoQyltPWUuaXRlcmF0b3I7ZWxzZSBpZihPKW09ZTtlbHNle2lmKCEoYj11KGUpKSl0aHJvdyBmKHMoZSkrIiBpcyBub3QgaXRlcmFibGUiKTtpZihvKGIpKXtmb3IoeT0wLHc9YyhlKTt3Pnk7eSsrKWlmKCh2PU0oZVt5XSkpJiZsKHAsdikpcmV0dXJuIHY7cmV0dXJuIG5ldyBnKCExKX1tPWgoZSxiKX1mb3IoeD1DP2UubmV4dDptLm5leHQ7IShTPWEoeCxtKSkuZG9uZTspe3RyeXt2PU0oUy52YWx1ZSl9Y2F0Y2goZSl7ZChtLCJ0aHJvdyIsZSl9aWYoIm9iamVjdCI9PXR5cGVvZiB2JiZ2JiZsKHAsdikpcmV0dXJuIHZ9cmV0dXJuIG5ldyBnKCExKX19LDkyMTI6KGUsdCxyKT0+e3ZhciBuPXIoNjkxNiksYT1yKDk2NzApLGk9cig4MTczKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBzLG87YShlKTt0cnl7aWYoIShzPWkoZSwicmV0dXJuIikpKXtpZigidGhyb3ciPT09dCl0aHJvdyByO3JldHVybiByfXM9bihzLGUpfWNhdGNoKGUpe289ITAscz1lfWlmKCJ0aHJvdyI9PT10KXRocm93IHI7aWYobyl0aHJvdyBzO3JldHVybiBhKHMpLHJ9fSwzMDYxOihlLHQscik9Pnt2YXIgbj1yKDMzODMpLkl0ZXJhdG9yUHJvdG90eXBlLGE9cigzMCksaT1yKDkxMTQpLHM9cig4MDAzKSxvPXIoNzQ5NyksYz1mdW5jdGlvbigpe3JldHVybiB0aGlzfTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsbCl7dmFyIGg9dCsiIEl0ZXJhdG9yIjtyZXR1cm4gZS5wcm90b3R5cGU9YShuLHtuZXh0OmkoKyFsLHIpfSkscyhlLGgsITEsITApLG9baF09YyxlfX0sMTY1NjooZSx0LHIpPT57dmFyIG49cigyMTA5KSxhPXIoNjkxNiksaT1yKDE5MTMpLHM9cig2NTMwKSxvPXIoNjE0KSxjPXIoMzA2MSksbD1yKDk1MTgpLGg9cig3Njc0KSx1PXIoODAwMyksZD1yKDg4ODApLGY9cig4MDUyKSxnPXIoNTExMikscD1yKDc0OTcpLG09cigzMzgzKSxiPXMuUFJPUEVSLHk9cy5DT05GSUdVUkFCTEUsdz1tLkl0ZXJhdG9yUHJvdG90eXBlLHY9bS5CVUdHWV9TQUZBUklfSVRFUkFUT1JTLHg9ZygiaXRlcmF0b3IiKSxTPSJrZXlzIixBPSJ2YWx1ZXMiLGs9ImVudHJpZXMiLEM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLHMsZyxtLE8pe2Mocix0LHMpO3ZhciBGLEksVCxNPWZ1bmN0aW9uKGUpe2lmKGU9PT1nJiZEKXJldHVybiBEO2lmKCF2JiZlIGluIFIpcmV0dXJuIFJbZV07c3dpdGNoKGUpe2Nhc2UgUzpjYXNlIEE6Y2FzZSBrOnJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgcih0aGlzLGUpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHIodGhpcyl9fSxFPXQrIiBJdGVyYXRvciIsUD0hMSxSPWUucHJvdG90eXBlLE49Ult4XXx8UlsiQEBpdGVyYXRvciJdfHxnJiZSW2ddLEQ9IXYmJk58fE0oZyksQj0iQXJyYXkiPT10JiZSLmVudHJpZXN8fE47aWYoQiYmKEY9bChCLmNhbGwobmV3IGUpKSkhPT1PYmplY3QucHJvdG90eXBlJiZGLm5leHQmJihpfHxsKEYpPT09d3x8KGg/aChGLHcpOm8oRlt4XSl8fGYoRix4LEMpKSx1KEYsRSwhMCwhMCksaSYmKHBbRV09QykpLGImJmc9PUEmJk4mJk4ubmFtZSE9PUEmJighaSYmeT9kKFIsIm5hbWUiLEEpOihQPSEwLEQ9ZnVuY3Rpb24oKXtyZXR1cm4gYShOLHRoaXMpfSkpLGcpaWYoST17dmFsdWVzOk0oQSksa2V5czptP0Q6TShTKSxlbnRyaWVzOk0oayl9LE8pZm9yKFQgaW4gSSkodnx8UHx8IShUIGluIFIpKSYmZihSLFQsSVtUXSk7ZWxzZSBuKHt0YXJnZXQ6dCxwcm90bzohMCxmb3JjZWQ6dnx8UH0sSSk7cmV0dXJuIGkmJiFPfHxSW3hdPT09RHx8ZihSLHgsRCx7bmFtZTpnfSkscFt0XT1ELEl9fSwzMzgzOihlLHQscik9Pnt2YXIgbixhLGkscz1yKDcyOTMpLG89cig2MTQpLGM9cigxMTEpLGw9cigzMCksaD1yKDk1MTgpLHU9cig4MDUyKSxkPXIoNTExMiksZj1yKDE5MTMpLGc9ZCgiaXRlcmF0b3IiKSxwPSExO1tdLmtleXMmJigibmV4dCJpbihpPVtdLmtleXMoKSk/KGE9aChoKGkpKSkhPT1PYmplY3QucHJvdG90eXBlJiYobj1hKTpwPSEwKSwhYyhuKXx8cygoZnVuY3Rpb24oKXt2YXIgZT17fTtyZXR1cm4gbltnXS5jYWxsKGUpIT09ZX0pKT9uPXt9OmYmJihuPWwobikpLG8obltnXSl8fHUobixnLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuZXhwb3J0cz17SXRlcmF0b3JQcm90b3R5cGU6bixCVUdHWV9TQUZBUklfSVRFUkFUT1JTOnB9fSw3NDk3OmU9PntlLmV4cG9ydHM9e319LDYyNDQ6KGUsdCxyKT0+e3ZhciBuPXIoNzQ2Nik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBuKGUubGVuZ3RoKX19LDYzMzk6KGUsdCxyKT0+e3ZhciBuPXIoMTcwMiksYT1yKDcyOTMpLGk9cig2MTQpLHM9cigyNTk3KSxvPXIoOTc4MSksYz1yKDY1MzApLkNPTkZJR1VSQUJMRSxsPXIoMjc4OCksaD1yKDk5MDkpLHU9aC5lbmZvcmNlLGQ9aC5nZXQsZj1TdHJpbmcsZz1PYmplY3QuZGVmaW5lUHJvcGVydHkscD1uKCIiLnNsaWNlKSxtPW4oIiIucmVwbGFjZSksYj1uKFtdLmpvaW4pLHk9byYmIWEoKGZ1bmN0aW9uKCl7cmV0dXJuIDghPT1nKChmdW5jdGlvbigpe30pLCJsZW5ndGgiLHt2YWx1ZTo4fSkubGVuZ3RofSkpLHc9U3RyaW5nKFN0cmluZykuc3BsaXQoIlN0cmluZyIpLHY9ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXsiU3ltYm9sKCI9PT1wKGYodCksMCw3KSYmKHQ9IlsiK20oZih0KSwvXlN5bWJvbFwoKFteKV0qKVwpLywiJDEiKSsiXSIpLHImJnIuZ2V0dGVyJiYodD0iZ2V0ICIrdCksciYmci5zZXR0ZXImJih0PSJzZXQgIit0KSwoIXMoZSwibmFtZSIpfHxjJiZlLm5hbWUhPT10KSYmKG8/ZyhlLCJuYW1lIix7dmFsdWU6dCxjb25maWd1cmFibGU6ITB9KTplLm5hbWU9dCkseSYmciYmcyhyLCJhcml0eSIpJiZlLmxlbmd0aCE9PXIuYXJpdHkmJmcoZSwibGVuZ3RoIix7dmFsdWU6ci5hcml0eX0pO3RyeXtyJiZzKHIsImNvbnN0cnVjdG9yIikmJnIuY29uc3RydWN0b3I/byYmZyhlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pOmUucHJvdG90eXBlJiYoZS5wcm90b3R5cGU9dm9pZCAwKX1jYXRjaChlKXt9dmFyIG49dShlKTtyZXR1cm4gcyhuLCJzb3VyY2UiKXx8KG4uc291cmNlPWIodywic3RyaW5nIj09dHlwZW9mIHQ/dDoiIikpLGV9O0Z1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZz12KChmdW5jdGlvbigpe3JldHVybiBpKHRoaXMpJiZkKHRoaXMpLnNvdXJjZXx8bCh0aGlzKX0pLCJ0b1N0cmluZyIpfSw0NzU4OmU9Pnt2YXIgdD1NYXRoLmNlaWwscj1NYXRoLmZsb29yO2UuZXhwb3J0cz1NYXRoLnRydW5jfHxmdW5jdGlvbihlKXt2YXIgbj0rZTtyZXR1cm4obj4wP3I6dCkobil9fSw1OTQ4OihlLHQscik9Pnt2YXIgbixhLGkscyxvLGM9cig3ODU0KSxsPXIoOTk3NCksaD1yKDEyMzYpLmYsdT1yKDI2MSkuc2V0LGQ9cig4NTcyKSxmPXIoNjgzMyksZz1yKDE1MjgpLHA9cigxMDM2KSxtPXIoNTI2OCksYj1jLk11dGF0aW9uT2JzZXJ2ZXJ8fGMuV2ViS2l0TXV0YXRpb25PYnNlcnZlcix5PWMuZG9jdW1lbnQsdz1jLnByb2Nlc3Msdj1jLlByb21pc2UseD1oKGMsInF1ZXVlTWljcm90YXNrIiksUz14JiZ4LnZhbHVlO2lmKCFTKXt2YXIgQT1uZXcgZCxrPWZ1bmN0aW9uKCl7dmFyIGUsdDtmb3IobSYmKGU9dy5kb21haW4pJiZlLmV4aXQoKTt0PUEuZ2V0KCk7KXRyeXt0KCl9Y2F0Y2goZSl7dGhyb3cgQS5oZWFkJiZuKCksZX1lJiZlLmVudGVyKCl9O2Z8fG18fHB8fCFifHwheT8hZyYmdiYmdi5yZXNvbHZlPygocz12LnJlc29sdmUodm9pZCAwKSkuY29uc3RydWN0b3I9dixvPWwocy50aGVuLHMpLG49ZnVuY3Rpb24oKXtvKGspfSk6bT9uPWZ1bmN0aW9uKCl7dy5uZXh0VGljayhrKX06KHU9bCh1LGMpLG49ZnVuY3Rpb24oKXt1KGspfSk6KGE9ITAsaT15LmNyZWF0ZVRleHROb2RlKCIiKSxuZXcgYihrKS5vYnNlcnZlKGkse2NoYXJhY3RlckRhdGE6ITB9KSxuPWZ1bmN0aW9uKCl7aS5kYXRhPWE9IWF9KSxTPWZ1bmN0aW9uKGUpe0EuaGVhZHx8bigpLEEuYWRkKGUpfX1lLmV4cG9ydHM9U30sODUyMzooZSx0LHIpPT57dmFyIG49cig5NjYyKSxhPVR5cGVFcnJvcixpPWZ1bmN0aW9uKGUpe3ZhciB0LHI7dGhpcy5wcm9taXNlPW5ldyBlKChmdW5jdGlvbihlLG4pe2lmKHZvaWQgMCE9PXR8fHZvaWQgMCE9PXIpdGhyb3cgYSgiQmFkIFByb21pc2UgY29uc3RydWN0b3IiKTt0PWUscj1ufSkpLHRoaXMucmVzb2x2ZT1uKHQpLHRoaXMucmVqZWN0PW4ocil9O2UuZXhwb3J0cy5mPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgaShlKX19LDYyNzc6KGUsdCxyKT0+e3ZhciBuPXIoMTM0MCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PWU/YXJndW1lbnRzLmxlbmd0aDwyPyIiOnQ6bihlKX19LDM5Mjk6KGUsdCxyKT0+e3ZhciBuPXIoNzg1MCksYT1UeXBlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKG4oZSkpdGhyb3cgYSgiVGhlIG1ldGhvZCBkb2Vzbid0IGFjY2VwdCByZWd1bGFyIGV4cHJlc3Npb25zIik7cmV0dXJuIGV9fSwyODE0OihlLHQscik9Pnt2YXIgbj1yKDc4NTQpLGE9cig3MjkzKSxpPXIoMTcwMikscz1yKDEzNDApLG89cigzMTExKS50cmltLGM9cigxMzYxKSxsPWkoIiIuY2hhckF0KSxoPW4ucGFyc2VGbG9hdCx1PW4uU3ltYm9sLGQ9dSYmdS5pdGVyYXRvcixmPTEvaChjKyItMCIpIT0tMS8wfHxkJiYhYSgoZnVuY3Rpb24oKXtoKE9iamVjdChkKSl9KSk7ZS5leHBvcnRzPWY/ZnVuY3Rpb24oZSl7dmFyIHQ9byhzKGUpKSxyPWgodCk7cmV0dXJuIDA9PT1yJiYiLSI9PWwodCwwKT8tMDpyfTpofSwzMDA5OihlLHQscik9Pnt2YXIgbj1yKDc4NTQpLGE9cig3MjkzKSxpPXIoMTcwMikscz1yKDEzNDApLG89cigzMTExKS50cmltLGM9cigxMzYxKSxsPW4ucGFyc2VJbnQsaD1uLlN5bWJvbCx1PWgmJmguaXRlcmF0b3IsZD0vXlsrLV0/MHgvaSxmPWkoZC5leGVjKSxnPTghPT1sKGMrIjA4Iil8fDIyIT09bChjKyIweDE2Iil8fHUmJiFhKChmdW5jdGlvbigpe2woT2JqZWN0KHUpKX0pKTtlLmV4cG9ydHM9Zz9mdW5jdGlvbihlLHQpe3ZhciByPW8ocyhlKSk7cmV0dXJuIGwocix0Pj4+MHx8KGYoZCxyKT8xNjoxMCkpfTpsfSwxNTc0OihlLHQscik9Pnt2YXIgbj1yKDk3ODEpLGE9cigxNzAyKSxpPXIoNjkxNikscz1yKDcyOTMpLG89cigxOTU2KSxjPXIoNTE4MSksbD1yKDUyOTYpLGg9cig3OTA4KSx1PXIoODM2MSksZD1PYmplY3QuYXNzaWduLGY9T2JqZWN0LmRlZmluZVByb3BlcnR5LGc9YShbXS5jb25jYXQpO2UuZXhwb3J0cz0hZHx8cygoZnVuY3Rpb24oKXtpZihuJiYxIT09ZCh7YjoxfSxkKGYoe30sImEiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2YodGhpcywiYiIse3ZhbHVlOjMsZW51bWVyYWJsZTohMX0pfX0pLHtiOjJ9KSkuYilyZXR1cm4hMDt2YXIgZT17fSx0PXt9LHI9U3ltYm9sKCksYT0iYWJjZGVmZ2hpamtsbW5vcHFyc3QiO3JldHVybiBlW3JdPTcsYS5zcGxpdCgiIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dFtlXT1lfSkpLDchPWQoe30sZSlbcl18fG8oZCh7fSx0KSkuam9pbigiIikhPWF9KSk/ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9aChlKSxhPWFyZ3VtZW50cy5sZW5ndGgscz0xLGQ9Yy5mLGY9bC5mO2E+czspZm9yKHZhciBwLG09dShhcmd1bWVudHNbcysrXSksYj1kP2cobyhtKSxkKG0pKTpvKG0pLHk9Yi5sZW5ndGgsdz0wO3k+dzspcD1iW3crK10sbiYmIWkoZixtLHApfHwocltwXT1tW3BdKTtyZXR1cm4gcn06ZH0sMzA6KGUsdCxyKT0+e3ZhciBuLGE9cig5NjcwKSxpPXIoNjA0OCkscz1yKDc0OCksbz1yKDM1MDEpLGM9cig0OTApLGw9cigzMTcpLGg9cig2MjAwKSx1PSJwcm90b3R5cGUiLGQ9InNjcmlwdCIsZj1oKCJJRV9QUk9UTyIpLGc9ZnVuY3Rpb24oKXt9LHA9ZnVuY3Rpb24oZSl7cmV0dXJuIjwiK2QrIj4iK2UrIjwvIitkKyI+In0sbT1mdW5jdGlvbihlKXtlLndyaXRlKHAoIiIpKSxlLmNsb3NlKCk7dmFyIHQ9ZS5wYXJlbnRXaW5kb3cuT2JqZWN0O3JldHVybiBlPW51bGwsdH0sYj1mdW5jdGlvbigpe3RyeXtuPW5ldyBBY3RpdmVYT2JqZWN0KCJodG1sZmlsZSIpfWNhdGNoKGUpe312YXIgZSx0LHI7Yj0idW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50P2RvY3VtZW50LmRvbWFpbiYmbj9tKG4pOih0PWwoImlmcmFtZSIpLHI9ImphdmEiK2QrIjoiLHQuc3R5bGUuZGlzcGxheT0ibm9uZSIsYy5hcHBlbmRDaGlsZCh0KSx0LnNyYz1TdHJpbmcociksKGU9dC5jb250ZW50V2luZG93LmRvY3VtZW50KS5vcGVuKCksZS53cml0ZShwKCJkb2N1bWVudC5GPU9iamVjdCIpKSxlLmNsb3NlKCksZS5GKTptKG4pO2Zvcih2YXIgYT1zLmxlbmd0aDthLS07KWRlbGV0ZSBiW3VdW3NbYV1dO3JldHVybiBiKCl9O29bZl09ITAsZS5leHBvcnRzPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKGUsdCl7dmFyIHI7cmV0dXJuIG51bGwhPT1lPyhnW3VdPWEoZSkscj1uZXcgZyxnW3VdPW51bGwscltmXT1lKTpyPWIoKSx2b2lkIDA9PT10P3I6aS5mKHIsdCl9fSw2MDQ4OihlLHQscik9Pnt2YXIgbj1yKDk3ODEpLGE9cigzMzUzKSxpPXIoMzA3MCkscz1yKDk2NzApLG89cig1NjU2KSxjPXIoMTk1Nik7dC5mPW4mJiFhP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzOmZ1bmN0aW9uKGUsdCl7cyhlKTtmb3IodmFyIHIsbj1vKHQpLGE9Yyh0KSxsPWEubGVuZ3RoLGg9MDtsPmg7KWkuZihlLHI9YVtoKytdLG5bcl0pO3JldHVybiBlfX0sMzA3MDooZSx0LHIpPT57dmFyIG49cig5NzgxKSxhPXIoNDY2NCksaT1yKDMzNTMpLHM9cig5NjcwKSxvPXIoNDk0OCksYz1UeXBlRXJyb3IsbD1PYmplY3QuZGVmaW5lUHJvcGVydHksaD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLHU9ImVudW1lcmFibGUiLGQ9ImNvbmZpZ3VyYWJsZSIsZj0id3JpdGFibGUiO3QuZj1uP2k/ZnVuY3Rpb24oZSx0LHIpe2lmKHMoZSksdD1vKHQpLHMociksImZ1bmN0aW9uIj09dHlwZW9mIGUmJiJwcm90b3R5cGUiPT09dCYmInZhbHVlImluIHImJmYgaW4gciYmIXJbZl0pe3ZhciBuPWgoZSx0KTtuJiZuW2ZdJiYoZVt0XT1yLnZhbHVlLHI9e2NvbmZpZ3VyYWJsZTpkIGluIHI/cltkXTpuW2RdLGVudW1lcmFibGU6dSBpbiByP3JbdV06blt1XSx3cml0YWJsZTohMX0pfXJldHVybiBsKGUsdCxyKX06bDpmdW5jdGlvbihlLHQscil7aWYocyhlKSx0PW8odCkscyhyKSxhKXRyeXtyZXR1cm4gbChlLHQscil9Y2F0Y2goZSl7fWlmKCJnZXQiaW4gcnx8InNldCJpbiByKXRocm93IGMoIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIik7cmV0dXJuInZhbHVlImluIHImJihlW3RdPXIudmFsdWUpLGV9fSwxMjM2OihlLHQscik9Pnt2YXIgbj1yKDk3ODEpLGE9cig2OTE2KSxpPXIoNTI5Nikscz1yKDkxMTQpLG89cig1NjU2KSxjPXIoNDk0OCksbD1yKDI1OTcpLGg9cig0NjY0KSx1PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7dC5mPW4/dTpmdW5jdGlvbihlLHQpe2lmKGU9byhlKSx0PWModCksaCl0cnl7cmV0dXJuIHUoZSx0KX1jYXRjaChlKXt9aWYobChlLHQpKXJldHVybiBzKCFhKGkuZixlLHQpLGVbdF0pfX0sMTE1NjooZSx0LHIpPT57dmFyIG49cig0MzI2KSxhPXIoNTY1NiksaT1yKDgwMDYpLmYscz1yKDE1ODkpLG89Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KTpbXTtlLmV4cG9ydHMuZj1mdW5jdGlvbihlKXtyZXR1cm4gbyYmIldpbmRvdyI9PW4oZSk/ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiBpKGUpfWNhdGNoKGUpe3JldHVybiBzKG8pfX0oZSk6aShhKGUpKX19LDgwMDY6KGUsdCxyKT0+e3ZhciBuPXIoNjMyNCksYT1yKDc0OCkuY29uY2F0KCJsZW5ndGgiLCJwcm90b3R5cGUiKTt0LmY9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fGZ1bmN0aW9uKGUpe3JldHVybiBuKGUsYSl9fSw1MTgxOihlLHQpPT57dC5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHN9LDk1MTg6KGUsdCxyKT0+e3ZhciBuPXIoMjU5NyksYT1yKDYxNCksaT1yKDc5MDgpLHM9cig2MjAwKSxvPXIoODU0NCksYz1zKCJJRV9QUk9UTyIpLGw9T2JqZWN0LGg9bC5wcm90b3R5cGU7ZS5leHBvcnRzPW8/bC5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbihlKXt2YXIgdD1pKGUpO2lmKG4odCxjKSlyZXR1cm4gdFtjXTt2YXIgcj10LmNvbnN0cnVjdG9yO3JldHVybiBhKHIpJiZ0IGluc3RhbmNlb2Ygcj9yLnByb3RvdHlwZTp0IGluc3RhbmNlb2YgbD9oOm51bGx9fSwyMDUwOihlLHQscik9Pnt2YXIgbj1yKDcyOTMpLGE9cigxMTEpLGk9cig0MzI2KSxzPXIoNzU1Niksbz1PYmplY3QuaXNFeHRlbnNpYmxlLGM9bigoZnVuY3Rpb24oKXtvKDEpfSkpO2UuZXhwb3J0cz1jfHxzP2Z1bmN0aW9uKGUpe3JldHVybiEhYShlKSYmKCFzfHwiQXJyYXlCdWZmZXIiIT1pKGUpKSYmKCFvfHxvKGUpKX06b30sNzk3NjooZSx0LHIpPT57dmFyIG49cigxNzAyKTtlLmV4cG9ydHM9bih7fS5pc1Byb3RvdHlwZU9mKX0sNjMyNDooZSx0LHIpPT57dmFyIG49cigxNzAyKSxhPXIoMjU5NyksaT1yKDU2NTYpLHM9cigxMzE4KS5pbmRleE9mLG89cigzNTAxKSxjPW4oW10ucHVzaCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbj1pKGUpLGw9MCxoPVtdO2ZvcihyIGluIG4pIWEobyxyKSYmYShuLHIpJiZjKGgscik7Zm9yKDt0Lmxlbmd0aD5sOylhKG4scj10W2wrK10pJiYofnMoaCxyKXx8YyhoLHIpKTtyZXR1cm4gaH19LDE5NTY6KGUsdCxyKT0+e3ZhciBuPXIoNjMyNCksYT1yKDc0OCk7ZS5leHBvcnRzPU9iamVjdC5rZXlzfHxmdW5jdGlvbihlKXtyZXR1cm4gbihlLGEpfX0sNTI5NjooZSx0KT0+e3ZhciByPXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixhPW4mJiFyLmNhbGwoezE6Mn0sMSk7dC5mPWE/ZnVuY3Rpb24oZSl7dmFyIHQ9bih0aGlzLGUpO3JldHVybiEhdCYmdC5lbnVtZXJhYmxlfTpyfSw3Njc0OihlLHQscik9Pnt2YXIgbj1yKDU2NjgpLGE9cig5NjcwKSxpPXIoNjA3Nyk7ZS5leHBvcnRzPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8KCJfX3Byb3RvX18iaW57fT9mdW5jdGlvbigpe3ZhciBlLHQ9ITEscj17fTt0cnl7KGU9bihPYmplY3QucHJvdG90eXBlLCJfX3Byb3RvX18iLCJzZXQiKSkocixbXSksdD1yIGluc3RhbmNlb2YgQXJyYXl9Y2F0Y2goZSl7fXJldHVybiBmdW5jdGlvbihyLG4pe3JldHVybiBhKHIpLGkobiksdD9lKHIsbik6ci5fX3Byb3RvX189bixyfX0oKTp2b2lkIDApfSwyMTQwOihlLHQscik9Pnt2YXIgbj1yKDY5MTYpLGE9cig2MTQpLGk9cigxMTEpLHM9VHlwZUVycm9yO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciByLG87aWYoInN0cmluZyI9PT10JiZhKHI9ZS50b1N0cmluZykmJiFpKG89bihyLGUpKSlyZXR1cm4gbztpZihhKHI9ZS52YWx1ZU9mKSYmIWkobz1uKHIsZSkpKXJldHVybiBvO2lmKCJzdHJpbmciIT09dCYmYShyPWUudG9TdHJpbmcpJiYhaShvPW4ocixlKSkpcmV0dXJuIG87dGhyb3cgcygiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlIil9fSwzODg3OihlLHQscik9Pnt2YXIgbj1yKDUwMDUpLGE9cigxNzAyKSxpPXIoODAwNikscz1yKDUxODEpLG89cig5NjcwKSxjPWEoW10uY29uY2F0KTtlLmV4cG9ydHM9bigiUmVmbGVjdCIsIm93bktleXMiKXx8ZnVuY3Rpb24oZSl7dmFyIHQ9aS5mKG8oZSkpLHI9cy5mO3JldHVybiByP2ModCxyKGUpKTp0fX0sMjUzNDplPT57ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm57ZXJyb3I6ITEsdmFsdWU6ZSgpfX1jYXRjaChlKXtyZXR1cm57ZXJyb3I6ITAsdmFsdWU6ZX19fX0sMzcwMjooZSx0LHIpPT57dmFyIG49cig3ODU0KSxhPXIoMjQ5MiksaT1yKDYxNCkscz1yKDQ3MDUpLG89cigyNzg4KSxjPXIoNTExMiksbD1yKDc4NzEpLGg9cigzODIzKSx1PXIoMTkxMyksZD1yKDczOTIpLGY9YSYmYS5wcm90b3R5cGUsZz1jKCJzcGVjaWVzIikscD0hMSxtPWkobi5Qcm9taXNlUmVqZWN0aW9uRXZlbnQpLGI9cygiUHJvbWlzZSIsKGZ1bmN0aW9uKCl7dmFyIGU9byhhKSx0PWUhPT1TdHJpbmcoYSk7aWYoIXQmJjY2PT09ZClyZXR1cm4hMDtpZih1JiYoIWYuY2F0Y2h8fCFmLmZpbmFsbHkpKXJldHVybiEwO2lmKCFkfHxkPDUxfHwhL25hdGl2ZSBjb2RlLy50ZXN0KGUpKXt2YXIgcj1uZXcgYSgoZnVuY3Rpb24oZSl7ZSgxKX0pKSxuPWZ1bmN0aW9uKGUpe2UoKGZ1bmN0aW9uKCl7fSksKGZ1bmN0aW9uKCl7fSkpfTtpZigoci5jb25zdHJ1Y3Rvcj17fSlbZ109biwhKHA9ci50aGVuKChmdW5jdGlvbigpe30pKWluc3RhbmNlb2YgbikpcmV0dXJuITB9cmV0dXJuIXQmJihsfHxoKSYmIW19KSk7ZS5leHBvcnRzPXtDT05TVFJVQ1RPUjpiLFJFSkVDVElPTl9FVkVOVDptLFNVQkNMQVNTSU5HOnB9fSwyNDkyOihlLHQscik9Pnt2YXIgbj1yKDc4NTQpO2UuZXhwb3J0cz1uLlByb21pc2V9LDk0Nzg6KGUsdCxyKT0+e3ZhciBuPXIoOTY3MCksYT1yKDExMSksaT1yKDg1MjMpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKG4oZSksYSh0KSYmdC5jb25zdHJ1Y3Rvcj09PWUpcmV0dXJuIHQ7dmFyIHI9aS5mKGUpO3JldHVybigwLHIucmVzb2x2ZSkodCksci5wcm9taXNlfX0sNjEyOihlLHQscik9Pnt2YXIgbj1yKDI0OTIpLGE9cig3MDcyKSxpPXIoMzcwMikuQ09OU1RSVUNUT1I7ZS5leHBvcnRzPWl8fCFhKChmdW5jdGlvbihlKXtuLmFsbChlKS50aGVuKHZvaWQgMCwoZnVuY3Rpb24oKXt9KSl9KSl9LDI2MjY6KGUsdCxyKT0+e3ZhciBuPXIoMzA3MCkuZjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe3IgaW4gZXx8bihlLHIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtyXX0sc2V0OmZ1bmN0aW9uKGUpe3Rbcl09ZX19KX19LDg1NzI6ZT0+e3ZhciB0PWZ1bmN0aW9uKCl7dGhpcy5oZWFkPW51bGwsdGhpcy50YWlsPW51bGx9O3QucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24oZSl7dmFyIHQ9e2l0ZW06ZSxuZXh0Om51bGx9LHI9dGhpcy50YWlsO3I/ci5uZXh0PXQ6dGhpcy5oZWFkPXQsdGhpcy50YWlsPXR9LGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuaGVhZDtpZihlKXJldHVybiBudWxsPT09KHRoaXMuaGVhZD1lLm5leHQpJiYodGhpcy50YWlsPW51bGwpLGUuaXRlbX19LGUuZXhwb3J0cz10fSw3NjUxOihlLHQscik9Pnt2YXIgbj1yKDY5MTYpLGE9cig5NjcwKSxpPXIoNjE0KSxzPXIoNDMyNiksbz1yKDIyNjEpLGM9VHlwZUVycm9yO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciByPWUuZXhlYztpZihpKHIpKXt2YXIgbD1uKHIsZSx0KTtyZXR1cm4gbnVsbCE9PWwmJmEobCksbH1pZigiUmVnRXhwIj09PXMoZSkpcmV0dXJuIG4obyxlLHQpO3Rocm93IGMoIlJlZ0V4cCNleGVjIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgcmVjZWl2ZXIiKX19LDIyNjE6KGUsdCxyKT0+e3ZhciBuLGEsaT1yKDY5MTYpLHM9cigxNzAyKSxvPXIoMTM0MCksYz1yKDcwNjYpLGw9cigyOTk5KSxoPXIoMjMwOSksdT1yKDMwKSxkPXIoOTkwOSkuZ2V0LGY9cig5NDQxKSxnPXIoNzE2OCkscD1oKCJuYXRpdmUtc3RyaW5nLXJlcGxhY2UiLFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSksbT1SZWdFeHAucHJvdG90eXBlLmV4ZWMsYj1tLHk9cygiIi5jaGFyQXQpLHc9cygiIi5pbmRleE9mKSx2PXMoIiIucmVwbGFjZSkseD1zKCIiLnNsaWNlKSxTPShhPS9iKi9nLGkobSxuPS9hLywiYSIpLGkobSxhLCJhIiksMCE9PW4ubGFzdEluZGV4fHwwIT09YS5sYXN0SW5kZXgpLEE9bC5CUk9LRU5fQ0FSRVQsaz12b2lkIDAhPT0vKCk/Py8uZXhlYygiIilbMV07KFN8fGt8fEF8fGZ8fGcpJiYoYj1mdW5jdGlvbihlKXt2YXIgdCxyLG4sYSxzLGwsaCxmPXRoaXMsZz1kKGYpLEM9byhlKSxPPWcucmF3O2lmKE8pcmV0dXJuIE8ubGFzdEluZGV4PWYubGFzdEluZGV4LHQ9aShiLE8sQyksZi5sYXN0SW5kZXg9Ty5sYXN0SW5kZXgsdDt2YXIgRj1nLmdyb3VwcyxJPUEmJmYuc3RpY2t5LFQ9aShjLGYpLE09Zi5zb3VyY2UsRT0wLFA9QztpZihJJiYoVD12KFQsInkiLCIiKSwtMT09PXcoVCwiZyIpJiYoVCs9ImciKSxQPXgoQyxmLmxhc3RJbmRleCksZi5sYXN0SW5kZXg+MCYmKCFmLm11bHRpbGluZXx8Zi5tdWx0aWxpbmUmJiJcbiIhPT15KEMsZi5sYXN0SW5kZXgtMSkpJiYoTT0iKD86ICIrTSsiKSIsUD0iICIrUCxFKyspLHI9bmV3IFJlZ0V4cCgiXig/OiIrTSsiKSIsVCkpLGsmJihyPW5ldyBSZWdFeHAoIl4iK00rIiQoPyFcXHMpIixUKSksUyYmKG49Zi5sYXN0SW5kZXgpLGE9aShtLEk/cjpmLFApLEk/YT8oYS5pbnB1dD14KGEuaW5wdXQsRSksYVswXT14KGFbMF0sRSksYS5pbmRleD1mLmxhc3RJbmRleCxmLmxhc3RJbmRleCs9YVswXS5sZW5ndGgpOmYubGFzdEluZGV4PTA6UyYmYSYmKGYubGFzdEluZGV4PWYuZ2xvYmFsP2EuaW5kZXgrYVswXS5sZW5ndGg6biksayYmYSYmYS5sZW5ndGg+MSYmaShwLGFbMF0sciwoZnVuY3Rpb24oKXtmb3Iocz0xO3M8YXJndW1lbnRzLmxlbmd0aC0yO3MrKyl2b2lkIDA9PT1hcmd1bWVudHNbc10mJihhW3NdPXZvaWQgMCl9KSksYSYmRilmb3IoYS5ncm91cHM9bD11KG51bGwpLHM9MDtzPEYubGVuZ3RoO3MrKylsWyhoPUZbc10pWzBdXT1hW2hbMV1dO3JldHVybiBhfSksZS5leHBvcnRzPWJ9LDcwNjY6KGUsdCxyKT0+e3ZhciBuPXIoOTY3MCk7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIGU9bih0aGlzKSx0PSIiO3JldHVybiBlLmhhc0luZGljZXMmJih0Kz0iZCIpLGUuZ2xvYmFsJiYodCs9ImciKSxlLmlnbm9yZUNhc2UmJih0Kz0iaSIpLGUubXVsdGlsaW5lJiYodCs9Im0iKSxlLmRvdEFsbCYmKHQrPSJzIiksZS51bmljb2RlJiYodCs9InUiKSxlLnVuaWNvZGVTZXRzJiYodCs9InYiKSxlLnN0aWNreSYmKHQrPSJ5IiksdH19LDQ3MDY6KGUsdCxyKT0+e3ZhciBuPXIoNjkxNiksYT1yKDI1OTcpLGk9cig3OTc2KSxzPXIoNzA2Niksbz1SZWdFeHAucHJvdG90eXBlO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1lLmZsYWdzO3JldHVybiB2b2lkIDAhPT10fHwiZmxhZ3MiaW4gb3x8YShlLCJmbGFncyIpfHwhaShvLGUpP3Q6bihzLGUpfX0sMjk5OTooZSx0LHIpPT57dmFyIG49cig3MjkzKSxhPXIoNzg1NCkuUmVnRXhwLGk9bigoZnVuY3Rpb24oKXt2YXIgZT1hKCJhIiwieSIpO3JldHVybiBlLmxhc3RJbmRleD0yLG51bGwhPWUuZXhlYygiYWJjZCIpfSkpLHM9aXx8bigoZnVuY3Rpb24oKXtyZXR1cm4hYSgiYSIsInkiKS5zdGlja3l9KSksbz1pfHxuKChmdW5jdGlvbigpe3ZhciBlPWEoIl5yIiwiZ3kiKTtyZXR1cm4gZS5sYXN0SW5kZXg9MixudWxsIT1lLmV4ZWMoInN0ciIpfSkpO2UuZXhwb3J0cz17QlJPS0VOX0NBUkVUOm8sTUlTU0VEX1NUSUNLWTpzLFVOU1VQUE9SVEVEX1k6aX19LDk0NDE6KGUsdCxyKT0+e3ZhciBuPXIoNzI5MyksYT1yKDc4NTQpLlJlZ0V4cDtlLmV4cG9ydHM9bigoZnVuY3Rpb24oKXt2YXIgZT1hKCIuIiwicyIpO3JldHVybiEoZS5kb3RBbGwmJmUuZXhlYygiXG4iKSYmInMiPT09ZS5mbGFncyl9KSl9LDcxNjg6KGUsdCxyKT0+e3ZhciBuPXIoNzI5MyksYT1yKDc4NTQpLlJlZ0V4cDtlLmV4cG9ydHM9bigoZnVuY3Rpb24oKXt2YXIgZT1hKCIoPzxhPmIpIiwiZyIpO3JldHVybiJiIiE9PWUuZXhlYygiYiIpLmdyb3Vwcy5hfHwiYmMiIT09ImIiLnJlcGxhY2UoZSwiJDxhPmMiKX0pKX0sNDQ4ODooZSx0LHIpPT57dmFyIG49cig4NTU0KSxhPVR5cGVFcnJvcjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYobihlKSl0aHJvdyBhKCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAiK2UpO3JldHVybiBlfX0sNjM0MDooZSx0LHIpPT57dmFyIG49cig1MDA1KSxhPXIoNzA0NSksaT1yKDUxMTIpLHM9cig5NzgxKSxvPWkoInNwZWNpZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9bihlKTtzJiZ0JiYhdFtvXSYmYSh0LG8se2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc319KX19LDgwMDM6KGUsdCxyKT0+e3ZhciBuPXIoMzA3MCkuZixhPXIoMjU5NyksaT1yKDUxMTIpKCJ0b1N0cmluZ1RhZyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7ZSYmIXImJihlPWUucHJvdG90eXBlKSxlJiYhYShlLGkpJiZuKGUsaSx7Y29uZmlndXJhYmxlOiEwLHZhbHVlOnR9KX19LDYyMDA6KGUsdCxyKT0+e3ZhciBuPXIoMjMwOSksYT1yKDk3MTEpLGk9bigia2V5cyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gaVtlXXx8KGlbZV09YShlKSl9fSw1NDY1OihlLHQscik9Pnt2YXIgbj1yKDc4NTQpLGE9cigzMDcyKSxpPSJfX2NvcmUtanNfc2hhcmVkX18iLHM9bltpXXx8YShpLHt9KTtlLmV4cG9ydHM9c30sMjMwOTooZSx0LHIpPT57dmFyIG49cigxOTEzKSxhPXIoNTQ2NSk7KGUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBhW2VdfHwoYVtlXT12b2lkIDAhPT10P3Q6e30pfSkoInZlcnNpb25zIixbXSkucHVzaCh7dmVyc2lvbjoiMy4zMi4wIixtb2RlOm4/InB1cmUiOiJnbG9iYWwiLGNvcHlyaWdodDoiwqkgMjAxNC0yMDIzIERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpIixsaWNlbnNlOiJodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9ibG9iL3YzLjMyLjAvTElDRU5TRSIsc291cmNlOiJodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcyJ9KX0sNjcwNzooZSx0LHIpPT57dmFyIG49cig5NjcwKSxhPXIoOTQ4MyksaT1yKDg1NTQpLHM9cig1MTEyKSgic3BlY2llcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciByLG89bihlKS5jb25zdHJ1Y3RvcjtyZXR1cm4gdm9pZCAwPT09b3x8aShyPW4obylbc10pP3Q6YShyKX19LDg3MTA6KGUsdCxyKT0+e3ZhciBuPXIoMTcwMiksYT1yKDkzMDMpLGk9cigxMzQwKSxzPXIoNDQ4OCksbz1uKCIiLmNoYXJBdCksYz1uKCIiLmNoYXJDb2RlQXQpLGw9bigiIi5zbGljZSksaD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgbixoLHU9aShzKHQpKSxkPWEociksZj11Lmxlbmd0aDtyZXR1cm4gZDwwfHxkPj1mP2U/IiI6dm9pZCAwOihuPWModSxkKSk8NTUyOTZ8fG4+NTYzMTl8fGQrMT09PWZ8fChoPWModSxkKzEpKTw1NjMyMHx8aD41NzM0Mz9lP28odSxkKTpuOmU/bCh1LGQsZCsyKTpoLTU2MzIwKyhuLTU1Mjk2PDwxMCkrNjU1MzZ9fTtlLmV4cG9ydHM9e2NvZGVBdDpoKCExKSxjaGFyQXQ6aCghMCl9fSwzMTk3OihlLHQscik9Pnt2YXIgbj1yKDE3MDIpLGE9MjE0NzQ4MzY0NyxpPS9bXlwwLVx1MDA3RV0vLHM9L1suXHUzMDAyXHVGRjBFXHVGRjYxXS9nLG89Ik92ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzIixjPVJhbmdlRXJyb3IsbD1uKHMuZXhlYyksaD1NYXRoLmZsb29yLHU9U3RyaW5nLmZyb21DaGFyQ29kZSxkPW4oIiIuY2hhckNvZGVBdCksZj1uKFtdLmpvaW4pLGc9bihbXS5wdXNoKSxwPW4oIiIucmVwbGFjZSksbT1uKCIiLnNwbGl0KSxiPW4oIiIudG9Mb3dlckNhc2UpLHk9ZnVuY3Rpb24oZSl7cmV0dXJuIGUrMjIrNzUqKGU8MjYpfSx3PWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj0wO2ZvcihlPXI/aChlLzcwMCk6ZT4+MSxlKz1oKGUvdCk7ZT40NTU7KWU9aChlLzM1KSxuKz0zNjtyZXR1cm4gaChuKzM2KmUvKGUrMzgpKX0sdj1mdW5jdGlvbihlKXt2YXIgdD1bXTtlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPTAsbj1lLmxlbmd0aDtyPG47KXt2YXIgYT1kKGUscisrKTtpZihhPj01NTI5NiYmYTw9NTYzMTkmJnI8bil7dmFyIGk9ZChlLHIrKyk7NTYzMjA9PSg2NDUxMiZpKT9nKHQsKCgxMDIzJmEpPDwxMCkrKDEwMjMmaSkrNjU1MzYpOihnKHQsYSksci0tKX1lbHNlIGcodCxhKX1yZXR1cm4gdH0oZSk7dmFyIHIsbixpPWUubGVuZ3RoLHM9MTI4LGw9MCxwPTcyO2ZvcihyPTA7cjxlLmxlbmd0aDtyKyspKG49ZVtyXSk8MTI4JiZnKHQsdShuKSk7dmFyIG09dC5sZW5ndGgsYj1tO2ZvcihtJiZnKHQsIi0iKTtiPGk7KXt2YXIgdj1hO2ZvcihyPTA7cjxlLmxlbmd0aDtyKyspKG49ZVtyXSk+PXMmJm48diYmKHY9bik7dmFyIHg9YisxO2lmKHYtcz5oKChhLWwpL3gpKXRocm93IGMobyk7Zm9yKGwrPSh2LXMpKngscz12LHI9MDtyPGUubGVuZ3RoO3IrKyl7aWYoKG49ZVtyXSk8cyYmKytsPmEpdGhyb3cgYyhvKTtpZihuPT1zKXtmb3IodmFyIFM9bCxBPTM2Ozspe3ZhciBrPUE8PXA/MTpBPj1wKzI2PzI2OkEtcDtpZihTPGspYnJlYWs7dmFyIEM9Uy1rLE89MzYtaztnKHQsdSh5KGsrQyVPKSkpLFM9aChDL08pLEErPTM2fWcodCx1KHkoUykpKSxwPXcobCx4LGI9PW0pLGw9MCxiKyt9fWwrKyxzKyt9cmV0dXJuIGYodCwiIil9O2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdCxyLG49W10sYT1tKHAoYihlKSxzLCIuIiksIi4iKTtmb3IodD0wO3Q8YS5sZW5ndGg7dCsrKXI9YVt0XSxnKG4sbChpLHIpPyJ4bi0tIit2KHIpOnIpO3JldHVybiBmKG4sIi4iKX19LDg0MTU6KGUsdCxyKT0+e3ZhciBuPXIoOTMwMyksYT1yKDEzNDApLGk9cig0NDg4KSxzPVJhbmdlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PWEoaSh0aGlzKSkscj0iIixvPW4oZSk7aWYobzwwfHxvPT0xLzApdGhyb3cgcygiV3JvbmcgbnVtYmVyIG9mIHJlcGV0aXRpb25zIik7Zm9yKDtvPjA7KG8+Pj49MSkmJih0Kz10KSkxJm8mJihyKz10KTtyZXR1cm4gcn19LDYwOTE6KGUsdCxyKT0+e3ZhciBuPXIoNjUzMCkuUFJPUEVSLGE9cig3MjkzKSxpPXIoMTM2MSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBhKChmdW5jdGlvbigpe3JldHVybiEhaVtlXSgpfHwi4oCLwoXhoI4iIT09IuKAi8KF4aCOIltlXSgpfHxuJiZpW2VdLm5hbWUhPT1lfSkpfX0sMzExMTooZSx0LHIpPT57dmFyIG49cigxNzAyKSxhPXIoNDQ4OCksaT1yKDEzNDApLHM9cigxMzYxKSxvPW4oIiIucmVwbGFjZSksYz1SZWdFeHAoIl5bIitzKyJdKyIpLGw9UmVnRXhwKCIoXnxbXiIrcysiXSlbIitzKyJdKyQiKSxoPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgcj1pKGEodCkpO3JldHVybiAxJmUmJihyPW8ocixjLCIiKSksMiZlJiYocj1vKHIsbCwiJDEiKSkscn19O2UuZXhwb3J0cz17c3RhcnQ6aCgxKSxlbmQ6aCgyKSx0cmltOmgoMyl9fSw2MjkzOihlLHQscik9Pnt2YXIgbj1yKDczOTIpLGE9cig3MjkzKSxpPXIoNzg1NCkuU3RyaW5nO2UuZXhwb3J0cz0hIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJiFhKChmdW5jdGlvbigpe3ZhciBlPVN5bWJvbCgpO3JldHVybiFpKGUpfHwhKE9iamVjdChlKWluc3RhbmNlb2YgU3ltYm9sKXx8IVN5bWJvbC5zaGFtJiZuJiZuPDQxfSkpfSwyNjE6KGUsdCxyKT0+e3ZhciBuLGEsaSxzLG89cig3ODU0KSxjPXIoMjEwNCksbD1yKDk5NzQpLGg9cig2MTQpLHU9cigyNTk3KSxkPXIoNzI5MyksZj1yKDQ5MCksZz1yKDIwNikscD1yKDMxNyksbT1yKDgwNTMpLGI9cig2ODMzKSx5PXIoNTI2OCksdz1vLnNldEltbWVkaWF0ZSx2PW8uY2xlYXJJbW1lZGlhdGUseD1vLnByb2Nlc3MsUz1vLkRpc3BhdGNoLEE9by5GdW5jdGlvbixrPW8uTWVzc2FnZUNoYW5uZWwsQz1vLlN0cmluZyxPPTAsRj17fSxJPSJvbnJlYWR5c3RhdGVjaGFuZ2UiO2QoKGZ1bmN0aW9uKCl7bj1vLmxvY2F0aW9ufSkpO3ZhciBUPWZ1bmN0aW9uKGUpe2lmKHUoRixlKSl7dmFyIHQ9RltlXTtkZWxldGUgRltlXSx0KCl9fSxNPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe1QoZSl9fSxFPWZ1bmN0aW9uKGUpe1QoZS5kYXRhKX0sUD1mdW5jdGlvbihlKXtvLnBvc3RNZXNzYWdlKEMoZSksbi5wcm90b2NvbCsiLy8iK24uaG9zdCl9O3cmJnZ8fCh3PWZ1bmN0aW9uKGUpe20oYXJndW1lbnRzLmxlbmd0aCwxKTt2YXIgdD1oKGUpP2U6QShlKSxyPWcoYXJndW1lbnRzLDEpO3JldHVybiBGWysrT109ZnVuY3Rpb24oKXtjKHQsdm9pZCAwLHIpfSxhKE8pLE99LHY9ZnVuY3Rpb24oZSl7ZGVsZXRlIEZbZV19LHk/YT1mdW5jdGlvbihlKXt4Lm5leHRUaWNrKE0oZSkpfTpTJiZTLm5vdz9hPWZ1bmN0aW9uKGUpe1Mubm93KE0oZSkpfTprJiYhYj8ocz0oaT1uZXcgaykucG9ydDIsaS5wb3J0MS5vbm1lc3NhZ2U9RSxhPWwocy5wb3N0TWVzc2FnZSxzKSk6by5hZGRFdmVudExpc3RlbmVyJiZoKG8ucG9zdE1lc3NhZ2UpJiYhby5pbXBvcnRTY3JpcHRzJiZuJiYiZmlsZToiIT09bi5wcm90b2NvbCYmIWQoUCk/KGE9UCxvLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLEUsITEpKTphPUkgaW4gcCgic2NyaXB0Iik/ZnVuY3Rpb24oZSl7Zi5hcHBlbmRDaGlsZChwKCJzY3JpcHQiKSlbSV09ZnVuY3Rpb24oKXtmLnJlbW92ZUNoaWxkKHRoaXMpLFQoZSl9fTpmdW5jdGlvbihlKXtzZXRUaW1lb3V0KE0oZSksMCl9KSxlLmV4cG9ydHM9e3NldDp3LGNsZWFyOnZ9fSw4NjM6KGUsdCxyKT0+e3ZhciBuPXIoMTcwMik7ZS5leHBvcnRzPW4oMS4udmFsdWVPZil9LDE0MDA6KGUsdCxyKT0+e3ZhciBuPXIoOTMwMyksYT1NYXRoLm1heCxpPU1hdGgubWluO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciByPW4oZSk7cmV0dXJuIHI8MD9hKHIrdCwwKTppKHIsdCl9fSw0NTk5OihlLHQscik9Pnt2YXIgbj1yKDc1OTMpLGE9VHlwZUVycm9yO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1uKGUsIm51bWJlciIpO2lmKCJudW1iZXIiPT10eXBlb2YgdCl0aHJvdyBhKCJDYW4ndCBjb252ZXJ0IG51bWJlciB0byBiaWdpbnQiKTtyZXR1cm4gQmlnSW50KHQpfX0sNzA2NzooZSx0LHIpPT57dmFyIG49cig5MzAzKSxhPXIoNzQ2NiksaT1SYW5nZUVycm9yO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXJldHVybiAwO3ZhciB0PW4oZSkscj1hKHQpO2lmKHQhPT1yKXRocm93IGkoIldyb25nIGxlbmd0aCBvciBpbmRleCIpO3JldHVybiByfX0sNTY1NjooZSx0LHIpPT57dmFyIG49cig4MzYxKSxhPXIoNDQ4OCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBuKGEoZSkpfX0sOTMwMzooZSx0LHIpPT57dmFyIG49cig0NzU4KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9K2U7cmV0dXJuIHQhPXR8fDA9PT10PzA6bih0KX19LDc0NjY6KGUsdCxyKT0+e3ZhciBuPXIoOTMwMyksYT1NYXRoLm1pbjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGU+MD9hKG4oZSksOTAwNzE5OTI1NDc0MDk5MSk6MH19LDc5MDg6KGUsdCxyKT0+e3ZhciBuPXIoNDQ4OCksYT1PYmplY3Q7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBhKG4oZSkpfX0sNDU5MDooZSx0LHIpPT57dmFyIG49cigzMDAyKSxhPVJhbmdlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9bihlKTtpZihyJXQpdGhyb3cgYSgiV3Jvbmcgb2Zmc2V0Iik7cmV0dXJuIHJ9fSwzMDAyOihlLHQscik9Pnt2YXIgbj1yKDkzMDMpLGE9UmFuZ2VFcnJvcjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9bihlKTtpZih0PDApdGhyb3cgYSgiVGhlIGFyZ3VtZW50IGNhbid0IGJlIGxlc3MgdGhhbiAwIik7cmV0dXJuIHR9fSw3NTkzOihlLHQscik9Pnt2YXIgbj1yKDY5MTYpLGE9cigxMTEpLGk9cigyMTkwKSxzPXIoODE3Myksbz1yKDIxNDApLGM9cig1MTEyKSxsPVR5cGVFcnJvcixoPWMoInRvUHJpbWl0aXZlIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYoIWEoZSl8fGkoZSkpcmV0dXJuIGU7dmFyIHIsYz1zKGUsaCk7aWYoYyl7aWYodm9pZCAwPT09dCYmKHQ9ImRlZmF1bHQiKSxyPW4oYyxlLHQpLCFhKHIpfHxpKHIpKXJldHVybiByO3Rocm93IGwoIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfXJldHVybiB2b2lkIDA9PT10JiYodD0ibnVtYmVyIiksbyhlLHQpfX0sNDk0ODooZSx0LHIpPT57dmFyIG49cig3NTkzKSxhPXIoMjE5MCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PW4oZSwic3RyaW5nIik7cmV0dXJuIGEodCk/dDp0KyIifX0sMTY5NDooZSx0LHIpPT57dmFyIG49e307bltyKDUxMTIpKCJ0b1N0cmluZ1RhZyIpXT0ieiIsZS5leHBvcnRzPSJbb2JqZWN0IHpdIj09PVN0cmluZyhuKX0sMTM0MDooZSx0LHIpPT57dmFyIG49cig2NDgpLGE9U3RyaW5nO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZigiU3ltYm9sIj09PW4oZSkpdGhyb3cgVHlwZUVycm9yKCJDYW5ub3QgY29udmVydCBhIFN5bWJvbCB2YWx1ZSB0byBhIHN0cmluZyIpO3JldHVybiBhKGUpfX0sNzg5MjplPT57dmFyIHQ9TWF0aC5yb3VuZDtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHI9dChlKTtyZXR1cm4gcjwwPzA6cj4yNTU/MjU1OjI1NSZyfX0sNDAzODooZSx0LHIpPT57dmFyIG49cig1MjY4KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dHJ5e2lmKG4pcmV0dXJuIEZ1bmN0aW9uKCdyZXR1cm4gcmVxdWlyZSgiJytlKyciKScpKCl9Y2F0Y2goZSl7fX19LDYzMzA6ZT0+e3ZhciB0PVN0cmluZztlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiB0KGUpfWNhdGNoKGUpe3JldHVybiJPYmplY3QifX19LDk4NDM6KGUsdCxyKT0+e3ZhciBuPXIoMjEwOSksYT1yKDc4NTQpLGk9cig2OTE2KSxzPXIoOTc4MSksbz1yKDM4MzIpLGM9cigyNjApLGw9cigzMzMxKSxoPXIoNTc4NyksdT1yKDkxMTQpLGQ9cig4ODgwKSxmPXIoNTk4OCksZz1yKDc0NjYpLHA9cig3MDY3KSxtPXIoNDU5MCksYj1yKDc4OTIpLHk9cig0OTQ4KSx3PXIoMjU5Nyksdj1yKDY0OCkseD1yKDExMSksUz1yKDIxOTApLEE9cigzMCksaz1yKDc5NzYpLEM9cig3Njc0KSxPPXIoODAwNikuZixGPXIoNzMyMSksST1yKDIwOTIpLmZvckVhY2gsVD1yKDYzNDApLE09cig3MDQ1KSxFPXIoMzA3MCksUD1yKDEyMzYpLFI9cig5OTA5KSxOPXIoOTU4NyksRD1SLmdldCxCPVIuc2V0LEw9Ui5lbmZvcmNlLF89RS5mLGo9UC5mLFU9YS5SYW5nZUVycm9yLCQ9bC5BcnJheUJ1ZmZlcixYPSQucHJvdG90eXBlLEg9bC5EYXRhVmlldyxxPWMuTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyx6PWMuVFlQRURfQVJSQVlfVEFHLEc9Yy5UeXBlZEFycmF5LFc9Yy5UeXBlZEFycmF5UHJvdG90eXBlLFY9Yy5hVHlwZWRBcnJheUNvbnN0cnVjdG9yLEs9Yy5pc1R5cGVkQXJyYXksWT0iQllURVNfUEVSX0VMRU1FTlQiLEo9Ildyb25nIGxlbmd0aCIsWj1mdW5jdGlvbihlLHQpe1YoZSk7Zm9yKHZhciByPTAsbj10Lmxlbmd0aCxhPW5ldyBlKG4pO24+cjspYVtyXT10W3IrK107cmV0dXJuIGF9LFE9ZnVuY3Rpb24oZSx0KXtNKGUsdCx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBEKHRoaXMpW3RdfX0pfSxlZT1mdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gayhYLGUpfHwiQXJyYXlCdWZmZXIiPT0odD12KGUpKXx8IlNoYXJlZEFycmF5QnVmZmVyIj09dH0sdGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gSyhlKSYmIVModCkmJnQgaW4gZSYmZigrdCkmJnQ+PTB9LHJlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9eSh0KSx0ZShlLHQpP3UoMixlW3RdKTpqKGUsdCl9LG5lPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdD15KHQpLCEodGUoZSx0KSYmeChyKSYmdyhyLCJ2YWx1ZSIpKXx8dyhyLCJnZXQiKXx8dyhyLCJzZXQiKXx8ci5jb25maWd1cmFibGV8fHcociwid3JpdGFibGUiKSYmIXIud3JpdGFibGV8fHcociwiZW51bWVyYWJsZSIpJiYhci5lbnVtZXJhYmxlP18oZSx0LHIpOihlW3RdPXIudmFsdWUsZSl9O3M/KHF8fChQLmY9cmUsRS5mPW5lLFEoVywiYnVmZmVyIiksUShXLCJieXRlT2Zmc2V0IiksUShXLCJieXRlTGVuZ3RoIiksUShXLCJsZW5ndGgiKSksbih7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITAsZm9yY2VkOiFxfSx7Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOnJlLGRlZmluZVByb3BlcnR5Om5lfSksZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgcz1lLm1hdGNoKC9cZCsvKVswXS84LGM9ZSsocj8iQ2xhbXBlZCI6IiIpKyJBcnJheSIsbD0iZ2V0IitlLHU9InNldCIrZSxmPWFbY10seT1mLHc9eSYmeS5wcm90b3R5cGUsdj17fSxTPWZ1bmN0aW9uKGUsdCl7XyhlLHQse2dldDpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlLHQpe3ZhciByPUQoZSk7cmV0dXJuIHIudmlld1tsXSh0KnMrci5ieXRlT2Zmc2V0LCEwKX0odGhpcyx0KX0sc2V0OmZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihlLHQsbil7dmFyIGE9RChlKTthLnZpZXdbdV0odCpzK2EuYnl0ZU9mZnNldCxyP2Iobik6biwhMCl9KHRoaXMsdCxlKX0sZW51bWVyYWJsZTohMH0pfTtxP28mJih5PXQoKGZ1bmN0aW9uKGUsdCxyLG4pe3JldHVybiBoKGUsdyksTih4KHQpP2VlKHQpP3ZvaWQgMCE9PW4/bmV3IGYodCxtKHIscyksbik6dm9pZCAwIT09cj9uZXcgZih0LG0ocixzKSk6bmV3IGYodCk6Syh0KT9aKHksdCk6aShGLHksdCk6bmV3IGYocCh0KSksZSx5KX0pKSxDJiZDKHksRyksSShPKGYpLChmdW5jdGlvbihlKXtlIGluIHl8fGQoeSxlLGZbZV0pfSkpLHkucHJvdG90eXBlPXcpOih5PXQoKGZ1bmN0aW9uKGUsdCxyLG4pe2goZSx3KTt2YXIgYSxvLGMsbD0wLHU9MDtpZih4KHQpKXtpZighZWUodCkpcmV0dXJuIEsodCk/Wih5LHQpOmkoRix5LHQpO2E9dCx1PW0ocixzKTt2YXIgZD10LmJ5dGVMZW5ndGg7aWYodm9pZCAwPT09bil7aWYoZCVzKXRocm93IFUoSik7aWYoKG89ZC11KTwwKXRocm93IFUoSil9ZWxzZSBpZigobz1nKG4pKnMpK3U+ZCl0aHJvdyBVKEopO2M9by9zfWVsc2UgYz1wKHQpLGE9bmV3ICQobz1jKnMpO2ZvcihCKGUse2J1ZmZlcjphLGJ5dGVPZmZzZXQ6dSxieXRlTGVuZ3RoOm8sbGVuZ3RoOmMsdmlldzpuZXcgSChhKX0pO2w8YzspUyhlLGwrKyl9KSksQyYmQyh5LEcpLHc9eS5wcm90b3R5cGU9QShXKSksdy5jb25zdHJ1Y3RvciE9PXkmJmQodywiY29uc3RydWN0b3IiLHkpLEwodykuVHlwZWRBcnJheUNvbnN0cnVjdG9yPXkseiYmZCh3LHosYyk7dmFyIGs9eSE9Zjt2W2NdPXksbih7Z2xvYmFsOiEwLGNvbnN0cnVjdG9yOiEwLGZvcmNlZDprLHNoYW06IXF9LHYpLFkgaW4geXx8ZCh5LFkscyksWSBpbiB3fHxkKHcsWSxzKSxUKGMpfSk6ZS5leHBvcnRzPWZ1bmN0aW9uKCl7fX0sMzgzMjooZSx0LHIpPT57dmFyIG49cig3ODU0KSxhPXIoNzI5MyksaT1yKDcwNzIpLHM9cigyNjApLk5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1Msbz1uLkFycmF5QnVmZmVyLGM9bi5JbnQ4QXJyYXk7ZS5leHBvcnRzPSFzfHwhYSgoZnVuY3Rpb24oKXtjKDEpfSkpfHwhYSgoZnVuY3Rpb24oKXtuZXcgYygtMSl9KSl8fCFpKChmdW5jdGlvbihlKXtuZXcgYyxuZXcgYyhudWxsKSxuZXcgYygxLjUpLG5ldyBjKGUpfSksITApfHxhKChmdW5jdGlvbigpe3JldHVybiAxIT09bmV3IGMobmV3IG8oMiksMSx2b2lkIDApLmxlbmd0aH0pKX0sNzMyMTooZSx0LHIpPT57dmFyIG49cig5OTc0KSxhPXIoNjkxNiksaT1yKDk0ODMpLHM9cig3OTA4KSxvPXIoNjI0NCksYz1yKDQxMjEpLGw9cigxMjQ2KSxoPXIoNzY1OSksdT1yKDQwNjcpLGQ9cigyNjApLmFUeXBlZEFycmF5Q29uc3RydWN0b3IsZj1yKDQ1OTkpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdCxyLGcscCxtLGIseSx3LHY9aSh0aGlzKSx4PXMoZSksUz1hcmd1bWVudHMubGVuZ3RoLEE9Uz4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsaz12b2lkIDAhPT1BLEM9bCh4KTtpZihDJiYhaChDKSlmb3Iodz0oeT1jKHgsQykpLm5leHQseD1bXTshKGI9YSh3LHkpKS5kb25lOyl4LnB1c2goYi52YWx1ZSk7Zm9yKGsmJlM+MiYmKEE9bihBLGFyZ3VtZW50c1syXSkpLHI9byh4KSxnPW5ldyhkKHYpKShyKSxwPXUoZyksdD0wO3I+dDt0KyspbT1rP0EoeFt0XSx0KTp4W3RdLGdbdF09cD9mKG0pOittO3JldHVybiBnfX0sOTcxMTooZSx0LHIpPT57dmFyIG49cigxNzAyKSxhPTAsaT1NYXRoLnJhbmRvbSgpLHM9bigxLi50b1N0cmluZyk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiJTeW1ib2woIisodm9pZCAwPT09ZT8iIjplKSsiKV8iK3MoKythK2ksMzYpfX0sNTE0MzooZSx0LHIpPT57dmFyIG49cig3MjkzKSxhPXIoNTExMiksaT1yKDk3ODEpLHM9cigxOTEzKSxvPWEoIml0ZXJhdG9yIik7ZS5leHBvcnRzPSFuKChmdW5jdGlvbigpe3ZhciBlPW5ldyBVUkwoImI/YT0xJmI9MiZjPTMiLCJodHRwOi8vYSIpLHQ9ZS5zZWFyY2hQYXJhbXMscj1uZXcgVVJMU2VhcmNoUGFyYW1zKCJhPTEmYT0yJmI9MyIpLG49IiI7cmV0dXJuIGUucGF0aG5hbWU9ImMlMjBkIix0LmZvckVhY2goKGZ1bmN0aW9uKGUscil7dC5kZWxldGUoImIiKSxuKz1yK2V9KSksci5kZWxldGUoImEiLDIpLHIuZGVsZXRlKCJiIix2b2lkIDApLHMmJighZS50b0pTT058fCFyLmhhcygiYSIsMSl8fHIuaGFzKCJhIiwyKXx8IXIuaGFzKCJhIix2b2lkIDApfHxyLmhhcygiYiIpKXx8IXQuc2l6ZSYmKHN8fCFpKXx8IXQuc29ydHx8Imh0dHA6Ly9hL2MlMjBkP2E9MSZjPTMiIT09ZS5ocmVmfHwiMyIhPT10LmdldCgiYyIpfHwiYT0xIiE9PVN0cmluZyhuZXcgVVJMU2VhcmNoUGFyYW1zKCI/YT0xIikpfHwhdFtvXXx8ImEiIT09bmV3IFVSTCgiaHR0cHM6Ly9hQGIiKS51c2VybmFtZXx8ImIiIT09bmV3IFVSTFNlYXJjaFBhcmFtcyhuZXcgVVJMU2VhcmNoUGFyYW1zKCJhPWIiKSkuZ2V0KCJhIil8fCJ4bi0tZTFheWJjIiE9PW5ldyBVUkwoImh0dHA6Ly/RgtC10YHRgiIpLmhvc3R8fCIjJUQwJUIxIiE9PW5ldyBVUkwoImh0dHA6Ly9hI9CxIikuaGFzaHx8ImExYzMiIT09bnx8IngiIT09bmV3IFVSTCgiaHR0cDovL3giLHZvaWQgMCkuaG9zdH0pKX0sMzMwNzooZSx0LHIpPT57dmFyIG49cig2MjkzKTtlLmV4cG9ydHM9biYmIVN5bWJvbC5zaGFtJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcn0sMzM1MzooZSx0LHIpPT57dmFyIG49cig5NzgxKSxhPXIoNzI5Myk7ZS5leHBvcnRzPW4mJmEoKGZ1bmN0aW9uKCl7cmV0dXJuIDQyIT1PYmplY3QuZGVmaW5lUHJvcGVydHkoKGZ1bmN0aW9uKCl7fSksInByb3RvdHlwZSIse3ZhbHVlOjQyLHdyaXRhYmxlOiExfSkucHJvdG90eXBlfSkpfSw4MDUzOmU9Pnt2YXIgdD1UeXBlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUscil7aWYoZTxyKXRocm93IHQoIk5vdCBlbm91Z2ggYXJndW1lbnRzIik7cmV0dXJuIGV9fSw0ODExOihlLHQscik9Pnt2YXIgbj1yKDc4NTQpLGE9cig2MTQpLGk9bi5XZWFrTWFwO2UuZXhwb3J0cz1hKGkpJiYvbmF0aXZlIGNvZGUvLnRlc3QoU3RyaW5nKGkpKX0sNTExMjooZSx0LHIpPT57dmFyIG49cig3ODU0KSxhPXIoMjMwOSksaT1yKDI1OTcpLHM9cig5NzExKSxvPXIoNjI5MyksYz1yKDMzMDcpLGw9bi5TeW1ib2wsaD1hKCJ3a3MiKSx1PWM/bC5mb3J8fGw6bCYmbC53aXRob3V0U2V0dGVyfHxzO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gaShoLGUpfHwoaFtlXT1vJiZpKGwsZSk/bFtlXTp1KCJTeW1ib2wuIitlKSksaFtlXX19LDEzNjE6ZT0+e2UuZXhwb3J0cz0iXHRcblx2XGZcciDCoOGagOKAgOKAgeKAguKAg+KAhOKAheKAhuKAh+KAiOKAieKAiuKAr+KBn+OAgFx1MjAyOFx1MjAyOVx1ZmVmZiJ9LDkxOTE6KGUsdCxyKT0+e3ZhciBuPXIoNTAwNSksYT1yKDI1OTcpLGk9cig4ODgwKSxzPXIoNzk3Niksbz1yKDc2NzQpLGM9cig5OTIwKSxsPXIoMjYyNiksaD1yKDk1ODcpLHU9cig2Mjc3KSxkPXIoODM0MCksZj1yKDUzOTIpLGc9cig5NzgxKSxwPXIoMTkxMyk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLG0pe3ZhciBiPSJzdGFja1RyYWNlTGltaXQiLHk9bT8yOjEsdz1lLnNwbGl0KCIuIiksdj13W3cubGVuZ3RoLTFdLHg9bi5hcHBseShudWxsLHcpO2lmKHgpe3ZhciBTPXgucHJvdG90eXBlO2lmKCFwJiZhKFMsImNhdXNlIikmJmRlbGV0ZSBTLmNhdXNlLCFyKXJldHVybiB4O3ZhciBBPW4oIkVycm9yIiksaz10KChmdW5jdGlvbihlLHQpe3ZhciByPXUobT90OmUsdm9pZCAwKSxuPW0/bmV3IHgoZSk6bmV3IHg7cmV0dXJuIHZvaWQgMCE9PXImJmkobiwibWVzc2FnZSIsciksZihuLGssbi5zdGFjaywyKSx0aGlzJiZzKFMsdGhpcykmJmgobix0aGlzLGspLGFyZ3VtZW50cy5sZW5ndGg+eSYmZChuLGFyZ3VtZW50c1t5XSksbn0pKTtpZihrLnByb3RvdHlwZT1TLCJFcnJvciIhPT12P28/byhrLEEpOmMoayxBLHtuYW1lOiEwfSk6ZyYmYiBpbiB4JiYobChrLHgsYiksbChrLHgsInByZXBhcmVTdGFja1RyYWNlIikpLGMoayx4KSwhcCl0cnl7Uy5uYW1lIT09diYmaShTLCJuYW1lIix2KSxTLmNvbnN0cnVjdG9yPWt9Y2F0Y2goZSl7fXJldHVybiBrfX19LDgyNjQ6KGUsdCxyKT0+e3ZhciBuPXIoMjEwOSksYT1yKDc4NTQpLGk9cigzMzMxKSxzPXIoNjM0MCksbz0iQXJyYXlCdWZmZXIiLGM9aVtvXTtuKHtnbG9iYWw6ITAsY29uc3RydWN0b3I6ITAsZm9yY2VkOmFbb10hPT1jfSx7QXJyYXlCdWZmZXI6Y30pLHMobyl9LDk1NzU6KGUsdCxyKT0+e3ZhciBuPXIoMjEwOSksYT1yKDE0NzApLGk9cig3MjkzKSxzPXIoMzMzMSksbz1yKDk2NzApLGM9cigxNDAwKSxsPXIoNzQ2NiksaD1yKDY3MDcpLHU9cy5BcnJheUJ1ZmZlcixkPXMuRGF0YVZpZXcsZj1kLnByb3RvdHlwZSxnPWEodS5wcm90b3R5cGUuc2xpY2UpLHA9YShmLmdldFVpbnQ4KSxtPWEoZi5zZXRVaW50OCk7bih7dGFyZ2V0OiJBcnJheUJ1ZmZlciIscHJvdG86ITAsdW5zYWZlOiEwLGZvcmNlZDppKChmdW5jdGlvbigpe3JldHVybiFuZXcgdSgyKS5zbGljZSgxLHZvaWQgMCkuYnl0ZUxlbmd0aH0pKX0se3NsaWNlOmZ1bmN0aW9uKGUsdCl7aWYoZyYmdm9pZCAwPT09dClyZXR1cm4gZyhvKHRoaXMpLGUpO2Zvcih2YXIgcj1vKHRoaXMpLmJ5dGVMZW5ndGgsbj1jKGUsciksYT1jKHZvaWQgMD09PXQ/cjp0LHIpLGk9bmV3KGgodGhpcyx1KSkobChhLW4pKSxzPW5ldyBkKHRoaXMpLGY9bmV3IGQoaSksYj0wO248YTspbShmLGIrKyxwKHMsbisrKSk7cmV0dXJuIGl9fSl9LDIyNjI6KGUsdCxyKT0+e3ZhciBuPXIoMjEwOSksYT1yKDc5MDgpLGk9cig2MjQ0KSxzPXIoOTMwMyksbz1yKDEyMjMpO24oe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwfSx7YXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9YSh0aGlzKSxyPWkodCksbj1zKGUpLG89bj49MD9uOnIrbjtyZXR1cm4gbzwwfHxvPj1yP3ZvaWQgMDp0W29dfX0pLG8oImF0Iil9LDcyODc6KGUsdCxyKT0+e3ZhciBuPXIoMjEwOSksYT1yKDk2NzEpLmZpbmRMYXN0SW5kZXgsaT1yKDEyMjMpO24oe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwfSx7ZmluZExhc3RJbmRleDpmdW5jdGlvbihlKXtyZXR1cm4gYSh0aGlzLGUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pLGkoImZpbmRMYXN0SW5kZXgiKX0sNzYzNTooZSx0LHIpPT57dmFyIG49cigyMTA5KSxhPXIoOTY3MSkuZmluZExhc3QsaT1yKDEyMjMpO24oe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwfSx7ZmluZExhc3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIGEodGhpcyxlLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KSxpKCJmaW5kTGFzdCIpfSw0OTQ0OihlLHQscik9Pnt2YXIgbj1yKDIxMDkpLGE9cig2NzkwKSxpPXIoNzkwOCkscz1yKDYyNDQpLG89cig5MzAzKSxjPXIoNTQxNyk7bih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITB9LHtmbGF0OmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD9hcmd1bWVudHNbMF06dm9pZCAwLHQ9aSh0aGlzKSxyPXModCksbj1jKHQsMCk7cmV0dXJuIG4ubGVuZ3RoPWEobix0LHQsciwwLHZvaWQgMD09PWU/MTpvKGUpKSxufX0pfSw2Njk5OihlLHQscik9Pnt2YXIgbj1yKDIxMDkpLGE9cigxMzE4KS5pbmNsdWRlcyxpPXIoNzI5Mykscz1yKDEyMjMpO24oe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDppKChmdW5jdGlvbigpe3JldHVybiFBcnJheSgxKS5pbmNsdWRlcygpfSkpfSx7aW5jbHVkZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGEodGhpcyxlLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KSxzKCJpbmNsdWRlcyIpfSw2OTkyOihlLHQscik9Pnt2YXIgbj1yKDU2NTYpLGE9cigxMjIzKSxpPXIoNzQ5Nykscz1yKDk5MDkpLG89cigzMDcwKS5mLGM9cigxNjU2KSxsPXIoNjE3OCksaD1yKDE5MTMpLHU9cig5NzgxKSxkPSJBcnJheSBJdGVyYXRvciIsZj1zLnNldCxnPXMuZ2V0dGVyRm9yKGQpO2UuZXhwb3J0cz1jKEFycmF5LCJBcnJheSIsKGZ1bmN0aW9uKGUsdCl7Zih0aGlzLHt0eXBlOmQsdGFyZ2V0Om4oZSksaW5kZXg6MCxraW5kOnR9KX0pLChmdW5jdGlvbigpe3ZhciBlPWcodGhpcyksdD1lLnRhcmdldCxyPWUua2luZCxuPWUuaW5kZXgrKztyZXR1cm4hdHx8bj49dC5sZW5ndGg/KGUudGFyZ2V0PXZvaWQgMCxsKHZvaWQgMCwhMCkpOmwoImtleXMiPT1yP246InZhbHVlcyI9PXI/dFtuXTpbbix0W25dXSwhMSl9KSwidmFsdWVzIik7dmFyIHA9aS5Bcmd1bWVudHM9aS5BcnJheTtpZihhKCJrZXlzIiksYSgidmFsdWVzIiksYSgiZW50cmllcyIpLCFoJiZ1JiYidmFsdWVzIiE9PXAubmFtZSl0cnl7byhwLCJuYW1lIix7dmFsdWU6InZhbHVlcyJ9KX1jYXRjaChlKXt9fSw3NjU4OihlLHQscik9Pnt2YXIgbj1yKDIxMDkpLGE9cig3OTA4KSxpPXIoNjI0NCkscz1yKDM2NTgpLG89cig3MjA3KTtuKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxhcml0eToxLGZvcmNlZDpyKDcyOTMpKChmdW5jdGlvbigpe3JldHVybiA0Mjk0OTY3Mjk3IT09W10ucHVzaC5jYWxsKHtsZW5ndGg6NDI5NDk2NzI5Nn0sMSl9KSl8fCFmdW5jdGlvbigpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sImxlbmd0aCIse3dyaXRhYmxlOiExfSkucHVzaCgpfWNhdGNoKGUpe3JldHVybiBlIGluc3RhbmNlb2YgVHlwZUVycm9yfX0oKX0se3B1c2g6ZnVuY3Rpb24oZSl7dmFyIHQ9YSh0aGlzKSxyPWkodCksbj1hcmd1bWVudHMubGVuZ3RoO28ocituKTtmb3IodmFyIGM9MDtjPG47YysrKXRbcl09YXJndW1lbnRzW2NdLHIrKztyZXR1cm4gcyh0LHIpLHJ9fSl9LDU4Mjc6KGUsdCxyKT0+e3ZhciBuPXIoMjEwOSksYT1yKDM2NzEpLmxlZnQsaT1yKDkzNDEpLHM9cig3MzkyKTtuKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxmb3JjZWQ6IXIoNTI2OCkmJnM+NzkmJnM8ODN8fCFpKCJyZWR1Y2UiKX0se3JlZHVjZTpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoO3JldHVybiBhKHRoaXMsZSx0LHQ+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KX0sMjcwNzooZSx0LHIpPT57dmFyIG49cigyMTA5KSxhPXIoMTcwMiksaT1yKDk2NjIpLHM9cig3OTA4KSxvPXIoNjI0NCksYz1yKDUxMTcpLGw9cigxMzQwKSxoPXIoNzI5MyksdT1yKDQzNjIpLGQ9cig5MzQxKSxmPXIoODg4NiksZz1yKDI1NikscD1yKDczOTIpLG09cig4MDA4KSxiPVtdLHk9YShiLnNvcnQpLHc9YShiLnB1c2gpLHY9aCgoZnVuY3Rpb24oKXtiLnNvcnQodm9pZCAwKX0pKSx4PWgoKGZ1bmN0aW9uKCl7Yi5zb3J0KG51bGwpfSkpLFM9ZCgic29ydCIpLEE9IWgoKGZ1bmN0aW9uKCl7aWYocClyZXR1cm4gcDw3MDtpZighKGYmJmY+Mykpe2lmKGcpcmV0dXJuITA7aWYobSlyZXR1cm4gbTw2MDM7dmFyIGUsdCxyLG4sYT0iIjtmb3IoZT02NTtlPDc2O2UrKyl7c3dpdGNoKHQ9U3RyaW5nLmZyb21DaGFyQ29kZShlKSxlKXtjYXNlIDY2OmNhc2UgNjk6Y2FzZSA3MDpjYXNlIDcyOnI9MzticmVhaztjYXNlIDY4OmNhc2UgNzE6cj00O2JyZWFrO2RlZmF1bHQ6cj0yfWZvcihuPTA7bjw0NztuKyspYi5wdXNoKHtrOnQrbix2OnJ9KX1mb3IoYi5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiB0LnYtZS52fSkpLG49MDtuPGIubGVuZ3RoO24rKyl0PWJbbl0uay5jaGFyQXQoMCksYS5jaGFyQXQoYS5sZW5ndGgtMSkhPT10JiYoYSs9dCk7cmV0dXJuIkRHQkVGSEFDSUpLIiE9PWF9fSkpO24oe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGZvcmNlZDp2fHwheHx8IVN8fCFBfSx7c29ydDpmdW5jdGlvbihlKXt2b2lkIDAhPT1lJiZpKGUpO3ZhciB0PXModGhpcyk7aWYoQSlyZXR1cm4gdm9pZCAwPT09ZT95KHQpOnkodCxlKTt2YXIgcixuLGE9W10saD1vKHQpO2ZvcihuPTA7bjxoO24rKyluIGluIHQmJncoYSx0W25dKTtmb3IodShhLGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3JldHVybiB2b2lkIDA9PT1yPy0xOnZvaWQgMD09PXQ/MTp2b2lkIDAhPT1lPytlKHQscil8fDA6bCh0KT5sKHIpPzE6LTF9fShlKSkscj1vKGEpLG49MDtuPHI7KXRbbl09YVtuKytdO2Zvcig7bjxoOyljKHQsbisrKTtyZXR1cm4gdH19KX0sMzc5MjooZSx0LHIpPT57cigxMjIzKSgiZmxhdCIpfSw1NDE6KGUsdCxyKT0+e3ZhciBuPXIoMjEwOSksYT1yKDc5MDgpLGk9cig2MjQ0KSxzPXIoMzY1OCksbz1yKDUxMTcpLGM9cig3MjA3KTtuKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxhcml0eToxLGZvcmNlZDoxIT09W10udW5zaGlmdCgwKXx8IWZ1bmN0aW9uKCl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwibGVuZ3RoIix7d3JpdGFibGU6ITF9KS51bnNoaWZ0KCl9Y2F0Y2goZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBUeXBlRXJyb3J9fSgpfSx7dW5zaGlmdDpmdW5jdGlvbihlKXt2YXIgdD1hKHRoaXMpLHI9aSh0KSxuPWFyZ3VtZW50cy5sZW5ndGg7aWYobil7YyhyK24pO2Zvcih2YXIgbD1yO2wtLTspe3ZhciBoPWwrbjtsIGluIHQ/dFtoXT10W2xdOm8odCxoKX1mb3IodmFyIHU9MDt1PG47dSsrKXRbdV09YXJndW1lbnRzW3VdfXJldHVybiBzKHQscituKX19KX0sNTU4MTooZSx0LHIpPT57dmFyIG49cigyMTA5KSxhPXIoMTU3MiksaT1yKDU2NTYpLHM9QXJyYXk7bih7dGFyZ2V0OiJBcnJheSIscHJvdG86ITB9LHt3aXRoOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEoaSh0aGlzKSxzLGUsdCl9fSl9LDE3MDM6KGUsdCxyKT0+e3ZhciBuPXIoMjEwOSksYT1yKDc4NTQpLGk9cigyMTA0KSxzPXIoOTE5MSksbz0iV2ViQXNzZW1ibHkiLGM9YVtvXSxsPTchPT1FcnJvcigiZSIse2NhdXNlOjd9KS5jYXVzZSxoPWZ1bmN0aW9uKGUsdCl7dmFyIHI9e307cltlXT1zKGUsdCxsKSxuKHtnbG9iYWw6ITAsY29uc3RydWN0b3I6ITAsYXJpdHk6MSxmb3JjZWQ6bH0scil9LHU9ZnVuY3Rpb24oZSx0KXtpZihjJiZjW2VdKXt2YXIgcj17fTtyW2VdPXMobysiLiIrZSx0LGwpLG4oe3RhcmdldDpvLHN0YXQ6ITAsY29uc3RydWN0b3I6ITAsYXJpdHk6MSxmb3JjZWQ6bH0scil9fTtoKCJFcnJvciIsKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaShlLHRoaXMsYXJndW1lbnRzKX19KSksaCgiRXZhbEVycm9yIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpKGUsdGhpcyxhcmd1bWVudHMpfX0pKSxoKCJSYW5nZUVycm9yIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpKGUsdGhpcyxhcmd1bWVudHMpfX0pKSxoKCJSZWZlcmVuY2VFcnJvciIsKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaShlLHRoaXMsYXJndW1lbnRzKX19KSksaCgiU3ludGF4RXJyb3IiLChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGkoZSx0aGlzLGFyZ3VtZW50cyl9fSkpLGgoIlR5cGVFcnJvciIsKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaShlLHRoaXMsYXJndW1lbnRzKX19KSksaCgiVVJJRXJyb3IiLChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGkoZSx0aGlzLGFyZ3VtZW50cyl9fSkpLHUoIkNvbXBpbGVFcnJvciIsKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaShlLHRoaXMsYXJndW1lbnRzKX19KSksdSgiTGlua0Vycm9yIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpKGUsdGhpcyxhcmd1bWVudHMpfX0pKSx1KCJSdW50aW1lRXJyb3IiLChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGkoZSx0aGlzLGFyZ3VtZW50cyl9fSkpfSw1ODM3OihlLHQscik9Pnt2YXIgbj1yKDIxMDkpLGE9cig3ODU0KTtuKHtnbG9iYWw6ITAsZm9yY2VkOmEuZ2xvYmFsVGhpcyE9PWF9LHtnbG9iYWxUaGlzOmF9KX0sODg2MjooZSx0LHIpPT57dmFyIG49cigyMTA5KSxhPXIoNTAwNSksaT1yKDIxMDQpLHM9cig2OTE2KSxvPXIoMTcwMiksYz1yKDcyOTMpLGw9cig2MTQpLGg9cigyMTkwKSx1PXIoMjA2KSxkPXIoODA0NCksZj1yKDYyOTMpLGc9U3RyaW5nLHA9YSgiSlNPTiIsInN0cmluZ2lmeSIpLG09bygvLi8uZXhlYyksYj1vKCIiLmNoYXJBdCkseT1vKCIiLmNoYXJDb2RlQXQpLHc9bygiIi5yZXBsYWNlKSx2PW8oMS4udG9TdHJpbmcpLHg9L1tcdUQ4MDAtXHVERkZGXS9nLFM9L15bXHVEODAwLVx1REJGRl0kLyxBPS9eW1x1REMwMC1cdURGRkZdJC8saz0hZnx8YygoZnVuY3Rpb24oKXt2YXIgZT1hKCJTeW1ib2wiKSgpO3JldHVybiJbbnVsbF0iIT1wKFtlXSl8fCJ7fSIhPXAoe2E6ZX0pfHwie30iIT1wKE9iamVjdChlKSl9KSksQz1jKChmdW5jdGlvbigpe3JldHVybiciXFx1ZGYwNlxcdWQ4MzQiJyE9PXAoIlx1ZGYwNlx1ZDgzNCIpfHwnIlxcdWRlYWQiJyE9PXAoIlx1ZGVhZCIpfSkpLE89ZnVuY3Rpb24oZSx0KXt2YXIgcj11KGFyZ3VtZW50cyksbj1kKHQpO2lmKGwobil8fHZvaWQgMCE9PWUmJiFoKGUpKXJldHVybiByWzFdPWZ1bmN0aW9uKGUsdCl7aWYobChuKSYmKHQ9cyhuLHRoaXMsZyhlKSx0KSksIWgodCkpcmV0dXJuIHR9LGkocCxudWxsLHIpfSxGPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1iKHIsdC0xKSxhPWIocix0KzEpO3JldHVybiBtKFMsZSkmJiFtKEEsYSl8fG0oQSxlKSYmIW0oUyxuKT8iXFx1Iit2KHkoZSwwKSwxNik6ZX07cCYmbih7dGFyZ2V0OiJKU09OIixzdGF0OiEwLGFyaXR5OjMsZm9yY2VkOmt8fEN9LHtzdHJpbmdpZnk6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXUoYXJndW1lbnRzKSxhPWkoaz9POnAsbnVsbCxuKTtyZXR1cm4gQyYmInN0cmluZyI9PXR5cGVvZiBhP3coYSx4LEYpOmF9fSl9LDU0Mzg6KGUsdCxyKT0+e3ZhciBuPXIoMjEwOSksYT1NYXRoLmh5cG90LGk9TWF0aC5hYnMscz1NYXRoLnNxcnQ7bih7dGFyZ2V0OiJNYXRoIixzdGF0OiEwLGFyaXR5OjIsZm9yY2VkOiEhYSYmYSgxLzAsTmFOKSE9PTEvMH0se2h5cG90OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByLG4sYT0wLG89MCxjPWFyZ3VtZW50cy5sZW5ndGgsbD0wO288YzspbDwocj1pKGFyZ3VtZW50c1tvKytdKSk/KGE9YSoobj1sL3IpKm4rMSxsPXIpOmErPXI+MD8obj1yL2wpKm46cjtyZXR1cm4gbD09PTEvMD8xLzA6bCpzKGEpfX0pfSw2OTc3OihlLHQscik9Pnt2YXIgbj1yKDIxMDkpLGE9cigxNzAyKSxpPXIoOTMwMykscz1yKDg2Myksbz1yKDg0MTUpLGM9cig3MjkzKSxsPVJhbmdlRXJyb3IsaD1TdHJpbmcsdT1NYXRoLmZsb29yLGQ9YShvKSxmPWEoIiIuc2xpY2UpLGc9YSgxLi50b0ZpeGVkKSxwPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gMD09PXQ/cjp0JTI9PTE/cChlLHQtMSxyKmUpOnAoZSplLHQvMixyKX0sbT1mdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPS0xLGE9cjsrK248NjspYSs9dCplW25dLGVbbl09YSUxZTcsYT11KGEvMWU3KX0sYj1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj02LG49MDstLXI+PTA7KW4rPWVbcl0sZVtyXT11KG4vdCksbj1uJXQqMWU3fSx5PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD02LHI9IiI7LS10Pj0wOylpZigiIiE9PXJ8fDA9PT10fHwwIT09ZVt0XSl7dmFyIG49aChlW3RdKTtyPSIiPT09cj9uOnIrZCgiMCIsNy1uLmxlbmd0aCkrbn1yZXR1cm4gcn07bih7dGFyZ2V0OiJOdW1iZXIiLHByb3RvOiEwLGZvcmNlZDpjKChmdW5jdGlvbigpe3JldHVybiIwLjAwMCIhPT1nKDhlLTUsMyl8fCIxIiE9PWcoLjksMCl8fCIxLjI1IiE9PWcoMS4yNTUsMil8fCIxMDAwMDAwMDAwMDAwMDAwMTI4IiE9PWcoMHhkZTBiNmIzYTc2NDAwODAsMCl9KSl8fCFjKChmdW5jdGlvbigpe2coe30pfSkpfSx7dG9GaXhlZDpmdW5jdGlvbihlKXt2YXIgdCxyLG4sYSxvPXModGhpcyksYz1pKGUpLHU9WzAsMCwwLDAsMCwwXSxnPSIiLHc9IjAiO2lmKGM8MHx8Yz4yMCl0aHJvdyBsKCJJbmNvcnJlY3QgZnJhY3Rpb24gZGlnaXRzIik7aWYobyE9bylyZXR1cm4iTmFOIjtpZihvPD0tMWUyMXx8bz49MWUyMSlyZXR1cm4gaChvKTtpZihvPDAmJihnPSItIixvPS1vKSxvPjFlLTIxKWlmKHI9KHQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAscj1lO3I+PTQwOTY7KXQrPTEyLHIvPTQwOTY7Zm9yKDtyPj0yOyl0Kz0xLHIvPTI7cmV0dXJuIHR9KG8qcCgyLDY5LDEpKS02OSk8MD9vKnAoMiwtdCwxKTpvL3AoMix0LDEpLHIqPTQ1MDM1OTk2MjczNzA0OTYsKHQ9NTItdCk+MCl7Zm9yKG0odSwwLHIpLG49YztuPj03OyltKHUsMWU3LDApLG4tPTc7Zm9yKG0odSxwKDEwLG4sMSksMCksbj10LTE7bj49MjM7KWIodSwxPDwyMyksbi09MjM7Yih1LDE8PG4pLG0odSwxLDEpLGIodSwyKSx3PXkodSl9ZWxzZSBtKHUsMCxyKSxtKHUsMTw8LXQsMCksdz15KHUpK2QoIjAiLGMpO3JldHVybiBjPjA/ZysoKGE9dy5sZW5ndGgpPD1jPyIwLiIrZCgiMCIsYy1hKSt3OmYodywwLGEtYykrIi4iK2YodyxhLWMpKTpnK3d9fSl9LDk2MDE6KGUsdCxyKT0+e3ZhciBuPXIoMjEwOSksYT1yKDE1NzQpO24oe3RhcmdldDoiT2JqZWN0IixzdGF0OiEwLGFyaXR5OjIsZm9yY2VkOk9iamVjdC5hc3NpZ24hPT1hfSx7YXNzaWduOmF9KX0sNjMxNDooZSx0LHIpPT57cigyMTA5KSh7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITB9LHtoYXNPd246cigyNTk3KX0pfSw0Njc4OihlLHQscik9Pnt2YXIgbj1yKDIxMDkpLGE9cigyODE0KTtuKHtnbG9iYWw6ITAsZm9yY2VkOnBhcnNlRmxvYXQhPWF9LHtwYXJzZUZsb2F0OmF9KX0sMTA1ODooZSx0LHIpPT57dmFyIG49cigyMTA5KSxhPXIoMzAwOSk7bih7Z2xvYmFsOiEwLGZvcmNlZDpwYXJzZUludCE9YX0se3BhcnNlSW50OmF9KX0sNzkyMjooZSx0LHIpPT57dmFyIG49cigyMTA5KSxhPXIoNjkxNiksaT1yKDk2NjIpLHM9cig4NTIzKSxvPXIoMjUzNCksYz1yKDQwOCk7bih7dGFyZ2V0OiJQcm9taXNlIixzdGF0OiEwLGZvcmNlZDpyKDYxMil9LHthbGxTZXR0bGVkOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj1zLmYodCksbj1yLnJlc29sdmUsbD1yLnJlamVjdCxoPW8oKGZ1bmN0aW9uKCl7dmFyIHI9aSh0LnJlc29sdmUpLHM9W10sbz0wLGw9MTtjKGUsKGZ1bmN0aW9uKGUpe3ZhciBpPW8rKyxjPSExO2wrKyxhKHIsdCxlKS50aGVuKChmdW5jdGlvbihlKXtjfHwoYz0hMCxzW2ldPXtzdGF0dXM6ImZ1bGZpbGxlZCIsdmFsdWU6ZX0sLS1sfHxuKHMpKX0pLChmdW5jdGlvbihlKXtjfHwoYz0hMCxzW2ldPXtzdGF0dXM6InJlamVjdGVkIixyZWFzb246ZX0sLS1sfHxuKHMpKX0pKX0pKSwtLWx8fG4ocyl9KSk7cmV0dXJuIGguZXJyb3ImJmwoaC52YWx1ZSksci5wcm9taXNlfX0pfSw4MjE6KGUsdCxyKT0+e3ZhciBuPXIoMjEwOSksYT1yKDY5MTYpLGk9cig5NjYyKSxzPXIoODUyMyksbz1yKDI1MzQpLGM9cig0MDgpO24oe3RhcmdldDoiUHJvbWlzZSIsc3RhdDohMCxmb3JjZWQ6cig2MTIpfSx7YWxsOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj1zLmYodCksbj1yLnJlc29sdmUsbD1yLnJlamVjdCxoPW8oKGZ1bmN0aW9uKCl7dmFyIHI9aSh0LnJlc29sdmUpLHM9W10sbz0wLGg9MTtjKGUsKGZ1bmN0aW9uKGUpe3ZhciBpPW8rKyxjPSExO2grKyxhKHIsdCxlKS50aGVuKChmdW5jdGlvbihlKXtjfHwoYz0hMCxzW2ldPWUsLS1ofHxuKHMpKX0pLGwpfSkpLC0taHx8bihzKX0pKTtyZXR1cm4gaC5lcnJvciYmbChoLnZhbHVlKSxyLnByb21pc2V9fSl9LDQxNjQ6KGUsdCxyKT0+e3ZhciBuPXIoMjEwOSksYT1yKDE5MTMpLGk9cigzNzAyKS5DT05TVFJVQ1RPUixzPXIoMjQ5Miksbz1yKDUwMDUpLGM9cig2MTQpLGw9cig4MDUyKSxoPXMmJnMucHJvdG90eXBlO2lmKG4oe3RhcmdldDoiUHJvbWlzZSIscHJvdG86ITAsZm9yY2VkOmkscmVhbDohMH0se2NhdGNoOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRoZW4odm9pZCAwLGUpfX0pLCFhJiZjKHMpKXt2YXIgdT1vKCJQcm9taXNlIikucHJvdG90eXBlLmNhdGNoO2guY2F0Y2ghPT11JiZsKGgsImNhdGNoIix1LHt1bnNhZmU6ITB9KX19LDM0MDE6KGUsdCxyKT0+e3ZhciBuLGEsaSxzPXIoMjEwOSksbz1yKDE5MTMpLGM9cig1MjY4KSxsPXIoNzg1NCksaD1yKDY5MTYpLHU9cig4MDUyKSxkPXIoNzY3NCksZj1yKDgwMDMpLGc9cig2MzQwKSxwPXIoOTY2MiksbT1yKDYxNCksYj1yKDExMSkseT1yKDU3ODcpLHc9cig2NzA3KSx2PXIoMjYxKS5zZXQseD1yKDU5NDgpLFM9cig4NDIpLEE9cigyNTM0KSxrPXIoODU3MiksQz1yKDk5MDkpLE89cigyNDkyKSxGPXIoMzcwMiksST1yKDg1MjMpLFQ9IlByb21pc2UiLE09Ri5DT05TVFJVQ1RPUixFPUYuUkVKRUNUSU9OX0VWRU5ULFA9Ri5TVUJDTEFTU0lORyxSPUMuZ2V0dGVyRm9yKFQpLE49Qy5zZXQsRD1PJiZPLnByb3RvdHlwZSxCPU8sTD1ELF89bC5UeXBlRXJyb3Isaj1sLmRvY3VtZW50LFU9bC5wcm9jZXNzLCQ9SS5mLFg9JCxIPSEhKGomJmouY3JlYXRlRXZlbnQmJmwuZGlzcGF0Y2hFdmVudCkscT0idW5oYW5kbGVkcmVqZWN0aW9uIix6PWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiEoIWIoZSl8fCFtKHQ9ZS50aGVuKSkmJnR9LEc9ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGEsaT10LnZhbHVlLHM9MT09dC5zdGF0ZSxvPXM/ZS5vazplLmZhaWwsYz1lLnJlc29sdmUsbD1lLnJlamVjdCx1PWUuZG9tYWluO3RyeXtvPyhzfHwoMj09PXQucmVqZWN0aW9uJiZKKHQpLHQucmVqZWN0aW9uPTEpLCEwPT09bz9yPWk6KHUmJnUuZW50ZXIoKSxyPW8oaSksdSYmKHUuZXhpdCgpLGE9ITApKSxyPT09ZS5wcm9taXNlP2woXygiUHJvbWlzZS1jaGFpbiBjeWNsZSIpKToobj16KHIpKT9oKG4scixjLGwpOmMocikpOmwoaSl9Y2F0Y2goZSl7dSYmIWEmJnUuZXhpdCgpLGwoZSl9fSxXPWZ1bmN0aW9uKGUsdCl7ZS5ub3RpZmllZHx8KGUubm90aWZpZWQ9ITAseCgoZnVuY3Rpb24oKXtmb3IodmFyIHIsbj1lLnJlYWN0aW9ucztyPW4uZ2V0KCk7KUcocixlKTtlLm5vdGlmaWVkPSExLHQmJiFlLnJlamVjdGlvbiYmSyhlKX0pKSl9LFY9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGE7SD8oKG49ai5jcmVhdGVFdmVudCgiRXZlbnQiKSkucHJvbWlzZT10LG4ucmVhc29uPXIsbi5pbml0RXZlbnQoZSwhMSwhMCksbC5kaXNwYXRjaEV2ZW50KG4pKTpuPXtwcm9taXNlOnQscmVhc29uOnJ9LCFFJiYoYT1sWyJvbiIrZV0pP2Eobik6ZT09PXEmJlMoIlVuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbiIscil9LEs9ZnVuY3Rpb24oZSl7aCh2LGwsKGZ1bmN0aW9uKCl7dmFyIHQscj1lLmZhY2FkZSxuPWUudmFsdWU7aWYoWShlKSYmKHQ9QSgoZnVuY3Rpb24oKXtjP1UuZW1pdCgidW5oYW5kbGVkUmVqZWN0aW9uIixuLHIpOlYocSxyLG4pfSkpLGUucmVqZWN0aW9uPWN8fFkoZSk/MjoxLHQuZXJyb3IpKXRocm93IHQudmFsdWV9KSl9LFk9ZnVuY3Rpb24oZSl7cmV0dXJuIDEhPT1lLnJlamVjdGlvbiYmIWUucGFyZW50fSxKPWZ1bmN0aW9uKGUpe2godixsLChmdW5jdGlvbigpe3ZhciB0PWUuZmFjYWRlO2M/VS5lbWl0KCJyZWplY3Rpb25IYW5kbGVkIix0KTpWKCJyZWplY3Rpb25oYW5kbGVkIix0LGUudmFsdWUpfSkpfSxaPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZnVuY3Rpb24obil7ZSh0LG4scil9fSxRPWZ1bmN0aW9uKGUsdCxyKXtlLmRvbmV8fChlLmRvbmU9ITAsciYmKGU9ciksZS52YWx1ZT10LGUuc3RhdGU9MixXKGUsITApKX0sZWU9ZnVuY3Rpb24oZSx0LHIpe2lmKCFlLmRvbmUpe2UuZG9uZT0hMCxyJiYoZT1yKTt0cnl7aWYoZS5mYWNhZGU9PT10KXRocm93IF8oIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmIik7dmFyIG49eih0KTtuP3goKGZ1bmN0aW9uKCl7dmFyIHI9e2RvbmU6ITF9O3RyeXtoKG4sdCxaKGVlLHIsZSksWihRLHIsZSkpfWNhdGNoKHQpe1Eocix0LGUpfX0pKTooZS52YWx1ZT10LGUuc3RhdGU9MSxXKGUsITEpKX1jYXRjaCh0KXtRKHtkb25lOiExfSx0LGUpfX19O2lmKE0mJihMPShCPWZ1bmN0aW9uKGUpe3kodGhpcyxMKSxwKGUpLGgobix0aGlzKTt2YXIgdD1SKHRoaXMpO3RyeXtlKFooZWUsdCksWihRLHQpKX1jYXRjaChlKXtRKHQsZSl9fSkucHJvdG90eXBlLChuPWZ1bmN0aW9uKGUpe04odGhpcyx7dHlwZTpULGRvbmU6ITEsbm90aWZpZWQ6ITEscGFyZW50OiExLHJlYWN0aW9uczpuZXcgayxyZWplY3Rpb246ITEsc3RhdGU6MCx2YWx1ZTp2b2lkIDB9KX0pLnByb3RvdHlwZT11KEwsInRoZW4iLChmdW5jdGlvbihlLHQpe3ZhciByPVIodGhpcyksbj0kKHcodGhpcyxCKSk7cmV0dXJuIHIucGFyZW50PSEwLG4ub2s9IW0oZSl8fGUsbi5mYWlsPW0odCkmJnQsbi5kb21haW49Yz9VLmRvbWFpbjp2b2lkIDAsMD09ci5zdGF0ZT9yLnJlYWN0aW9ucy5hZGQobik6eCgoZnVuY3Rpb24oKXtHKG4scil9KSksbi5wcm9taXNlfSkpLGE9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgbix0PVIoZSk7dGhpcy5wcm9taXNlPWUsdGhpcy5yZXNvbHZlPVooZWUsdCksdGhpcy5yZWplY3Q9WihRLHQpfSxJLmY9JD1mdW5jdGlvbihlKXtyZXR1cm4gZT09PUJ8fHZvaWQgMD09PWU/bmV3IGEoZSk6WChlKX0sIW8mJm0oTykmJkQhPT1PYmplY3QucHJvdG90eXBlKSl7aT1ELnRoZW4sUHx8dShELCJ0aGVuIiwoZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzO3JldHVybiBuZXcgQigoZnVuY3Rpb24oZSx0KXtoKGkscixlLHQpfSkpLnRoZW4oZSx0KX0pLHt1bnNhZmU6ITB9KTt0cnl7ZGVsZXRlIEQuY29uc3RydWN0b3J9Y2F0Y2goZSl7fWQmJmQoRCxMKX1zKHtnbG9iYWw6ITAsY29uc3RydWN0b3I6ITAsd3JhcDohMCxmb3JjZWQ6TX0se1Byb21pc2U6Qn0pLGYoQixULCExLCEwKSxnKFQpfSw3NzI3OihlLHQscik9Pnt2YXIgbj1yKDIxMDkpLGE9cigxOTEzKSxpPXIoMjQ5Mikscz1yKDcyOTMpLG89cig1MDA1KSxjPXIoNjE0KSxsPXIoNjcwNyksaD1yKDk0NzgpLHU9cig4MDUyKSxkPWkmJmkucHJvdG90eXBlO2lmKG4oe3RhcmdldDoiUHJvbWlzZSIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6ISFpJiZzKChmdW5jdGlvbigpe2QuZmluYWxseS5jYWxsKHt0aGVuOmZ1bmN0aW9uKCl7fX0sKGZ1bmN0aW9uKCl7fSkpfSkpfSx7ZmluYWxseTpmdW5jdGlvbihlKXt2YXIgdD1sKHRoaXMsbygiUHJvbWlzZSIpKSxyPWMoZSk7cmV0dXJuIHRoaXMudGhlbihyP2Z1bmN0aW9uKHIpe3JldHVybiBoKHQsZSgpKS50aGVuKChmdW5jdGlvbigpe3JldHVybiByfSkpfTplLHI/ZnVuY3Rpb24ocil7cmV0dXJuIGgodCxlKCkpLnRoZW4oKGZ1bmN0aW9uKCl7dGhyb3cgcn0pKX06ZSl9fSksIWEmJmMoaSkpe3ZhciBmPW8oIlByb21pc2UiKS5wcm90b3R5cGUuZmluYWxseTtkLmZpbmFsbHkhPT1mJiZ1KGQsImZpbmFsbHkiLGYse3Vuc2FmZTohMH0pfX0sODY3NDooZSx0LHIpPT57cigzNDAxKSxyKDgyMSkscig0MTY0KSxyKDYwMjcpLHIoNjgzKSxyKDYyOTQpfSw2MDI3OihlLHQscik9Pnt2YXIgbj1yKDIxMDkpLGE9cig2OTE2KSxpPXIoOTY2Mikscz1yKDg1MjMpLG89cigyNTM0KSxjPXIoNDA4KTtuKHt0YXJnZXQ6IlByb21pc2UiLHN0YXQ6ITAsZm9yY2VkOnIoNjEyKX0se3JhY2U6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPXMuZih0KSxuPXIucmVqZWN0LGw9bygoZnVuY3Rpb24oKXt2YXIgcz1pKHQucmVzb2x2ZSk7YyhlLChmdW5jdGlvbihlKXthKHMsdCxlKS50aGVuKHIucmVzb2x2ZSxuKX0pKX0pKTtyZXR1cm4gbC5lcnJvciYmbihsLnZhbHVlKSxyLnByb21pc2V9fSl9LDY4MzooZSx0LHIpPT57dmFyIG49cigyMTA5KSxhPXIoNjkxNiksaT1yKDg1MjMpO24oe3RhcmdldDoiUHJvbWlzZSIsc3RhdDohMCxmb3JjZWQ6cigzNzAyKS5DT05TVFJVQ1RPUn0se3JlamVjdDpmdW5jdGlvbihlKXt2YXIgdD1pLmYodGhpcyk7cmV0dXJuIGEodC5yZWplY3Qsdm9pZCAwLGUpLHQucHJvbWlzZX19KX0sNjI5NDooZSx0LHIpPT57dmFyIG49cigyMTA5KSxhPXIoNTAwNSksaT1yKDE5MTMpLHM9cigyNDkyKSxvPXIoMzcwMikuQ09OU1RSVUNUT1IsYz1yKDk0NzgpLGw9YSgiUHJvbWlzZSIpLGg9aSYmIW87bih7dGFyZ2V0OiJQcm9taXNlIixzdGF0OiEwLGZvcmNlZDppfHxvfSx7cmVzb2x2ZTpmdW5jdGlvbihlKXtyZXR1cm4gYyhoJiZ0aGlzPT09bD9zOnRoaXMsZSl9fSl9LDEyOTk6KGUsdCxyKT0+e3ZhciBuPXIoMjEwOSksYT1yKDc4NTQpLGk9cig4MDAzKTtuKHtnbG9iYWw6ITB9LHtSZWZsZWN0Ont9fSksaShhLlJlZmxlY3QsIlJlZmxlY3QiLCEwKX0sNDYwMzooZSx0LHIpPT57dmFyIG49cig5NzgxKSxhPXIoNzg1NCksaT1yKDE3MDIpLHM9cig0NzA1KSxvPXIoOTU4NyksYz1yKDg4ODApLGw9cig4MDA2KS5mLGg9cig3OTc2KSx1PXIoNzg1MCksZD1yKDEzNDApLGY9cig0NzA2KSxnPXIoMjk5OSkscD1yKDI2MjYpLG09cig4MDUyKSxiPXIoNzI5MykseT1yKDI1OTcpLHc9cig5OTA5KS5lbmZvcmNlLHY9cig2MzQwKSx4PXIoNTExMiksUz1yKDk0NDEpLEE9cig3MTY4KSxrPXgoIm1hdGNoIiksQz1hLlJlZ0V4cCxPPUMucHJvdG90eXBlLEY9YS5TeW50YXhFcnJvcixJPWkoTy5leGVjKSxUPWkoIiIuY2hhckF0KSxNPWkoIiIucmVwbGFjZSksRT1pKCIiLmluZGV4T2YpLFA9aSgiIi5zbGljZSksUj0vXlw/PFteXHNcZCEjJSYqKzw9PkBeXVteXHMhIyUmKis8PT5AXl0qPi8sTj0vYS9nLEQ9L2EvZyxCPW5ldyBDKE4pIT09TixMPWcuTUlTU0VEX1NUSUNLWSxfPWcuVU5TVVBQT1JURURfWTtpZihzKCJSZWdFeHAiLG4mJighQnx8THx8U3x8QXx8YigoZnVuY3Rpb24oKXtyZXR1cm4gRFtrXT0hMSxDKE4pIT1OfHxDKEQpPT1EfHwiL2EvaSIhPUMoTiwiaSIpfSkpKSkpe2Zvcih2YXIgaj1mdW5jdGlvbihlLHQpe3ZhciByLG4sYSxpLHMsbCxnPWgoTyx0aGlzKSxwPXUoZSksbT12b2lkIDA9PT10LGI9W10sdj1lO2lmKCFnJiZwJiZtJiZlLmNvbnN0cnVjdG9yPT09ailyZXR1cm4gZTtpZigocHx8aChPLGUpKSYmKGU9ZS5zb3VyY2UsbSYmKHQ9Zih2KSkpLGU9dm9pZCAwPT09ZT8iIjpkKGUpLHQ9dm9pZCAwPT09dD8iIjpkKHQpLHY9ZSxTJiYiZG90QWxsImluIE4mJihuPSEhdCYmRSh0LCJzIik+LTEpJiYodD1NKHQsL3MvZywiIikpLHI9dCxMJiYic3RpY2t5ImluIE4mJihhPSEhdCYmRSh0LCJ5Iik+LTEpJiZfJiYodD1NKHQsL3kvZywiIikpLEEmJihpPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPWUubGVuZ3RoLG49MCxhPSIiLGk9W10scz17fSxvPSExLGM9ITEsbD0wLGg9IiI7bjw9cjtuKyspe2lmKCJcXCI9PT0odD1UKGUsbikpKXQrPVQoZSwrK24pO2Vsc2UgaWYoIl0iPT09dClvPSExO2Vsc2UgaWYoIW8pc3dpdGNoKCEwKXtjYXNlIlsiPT09dDpvPSEwO2JyZWFrO2Nhc2UiKCI9PT10OkkoUixQKGUsbisxKSkmJihuKz0yLGM9ITApLGErPXQsbCsrO2NvbnRpbnVlO2Nhc2UiPiI9PT10JiZjOmlmKCIiPT09aHx8eShzLGgpKXRocm93IG5ldyBGKCJJbnZhbGlkIGNhcHR1cmUgZ3JvdXAgbmFtZSIpO3NbaF09ITAsaVtpLmxlbmd0aF09W2gsbF0sYz0hMSxoPSIiO2NvbnRpbnVlfWM/aCs9dDphKz10fXJldHVyblthLGldfShlKSxlPWlbMF0sYj1pWzFdKSxzPW8oQyhlLHQpLGc/dGhpczpPLGopLChufHxhfHxiLmxlbmd0aCkmJihsPXcocyksbiYmKGwuZG90QWxsPSEwLGwucmF3PWooZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9ZS5sZW5ndGgsbj0wLGE9IiIsaT0hMTtuPD1yO24rKykiXFwiIT09KHQ9VChlLG4pKT9pfHwiLiIhPT10PygiWyI9PT10P2k9ITA6Il0iPT09dCYmKGk9ITEpLGErPXQpOmErPSJbXFxzXFxTXSI6YSs9dCtUKGUsKytuKTtyZXR1cm4gYX0oZSkscikpLGEmJihsLnN0aWNreT0hMCksYi5sZW5ndGgmJihsLmdyb3Vwcz1iKSksZSE9PXYpdHJ5e2Mocywic291cmNlIiwiIj09PXY/Iig/OikiOnYpfWNhdGNoKGUpe31yZXR1cm4gc30sVT1sKEMpLCQ9MDtVLmxlbmd0aD4kOylwKGosQyxVWyQrK10pO08uY29uc3RydWN0b3I9aixqLnByb3RvdHlwZT1PLG0oYSwiUmVnRXhwIixqLHtjb25zdHJ1Y3RvcjohMH0pfXYoIlJlZ0V4cCIpfSw4NDUwOihlLHQscik9Pnt2YXIgbj1yKDk3ODEpLGE9cig5NDQxKSxpPXIoNDMyNikscz1yKDcwNDUpLG89cig5OTA5KS5nZXQsYz1SZWdFeHAucHJvdG90eXBlLGw9VHlwZUVycm9yO24mJmEmJnMoYywiZG90QWxsIix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKHRoaXMhPT1jKXtpZigiUmVnRXhwIj09PWkodGhpcykpcmV0dXJuISFvKHRoaXMpLmRvdEFsbDt0aHJvdyBsKCJJbmNvbXBhdGlibGUgcmVjZWl2ZXIsIFJlZ0V4cCByZXF1aXJlZCIpfX19KX0sNDkxNjooZSx0LHIpPT57dmFyIG49cigyMTA5KSxhPXIoMjI2MSk7bih7dGFyZ2V0OiJSZWdFeHAiLHByb3RvOiEwLGZvcmNlZDovLi8uZXhlYyE9PWF9LHtleGVjOmF9KX0sMjA4NzooZSx0LHIpPT57dmFyIG49cig3ODU0KSxhPXIoOTc4MSksaT1yKDcwNDUpLHM9cig3MDY2KSxvPXIoNzI5MyksYz1uLlJlZ0V4cCxsPWMucHJvdG90eXBlO2EmJm8oKGZ1bmN0aW9uKCl7dmFyIGU9ITA7dHJ5e2MoIi4iLCJkIil9Y2F0Y2godCl7ZT0hMX12YXIgdD17fSxyPSIiLG49ZT8iZGdpbXN5IjoiZ2ltc3kiLGE9ZnVuY3Rpb24oZSxuKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcis9biwhMH19KX0saT17ZG90QWxsOiJzIixnbG9iYWw6ImciLGlnbm9yZUNhc2U6ImkiLG11bHRpbGluZToibSIsc3RpY2t5OiJ5In07Zm9yKHZhciBzIGluIGUmJihpLmhhc0luZGljZXM9ImQiKSxpKWEocyxpW3NdKTtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihsLCJmbGFncyIpLmdldC5jYWxsKHQpIT09bnx8ciE9PW59KSkmJmkobCwiZmxhZ3MiLHtjb25maWd1cmFibGU6ITAsZ2V0OnN9KX0sNzYwMTooZSx0LHIpPT57cig0OTE2KTt2YXIgbixhLGk9cigyMTA5KSxzPXIoNjkxNiksbz1yKDYxNCksYz1yKDk2NzApLGw9cigxMzQwKSxoPShuPSExLChhPS9bYWNdLykuZXhlYz1mdW5jdGlvbigpe3JldHVybiBuPSEwLC8uLy5leGVjLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sITA9PT1hLnRlc3QoImFiYyIpJiZuKSx1PS8uLy50ZXN0O2koe3RhcmdldDoiUmVnRXhwIixwcm90bzohMCxmb3JjZWQ6IWh9LHt0ZXN0OmZ1bmN0aW9uKGUpe3ZhciB0PWModGhpcykscj1sKGUpLG49dC5leGVjO2lmKCFvKG4pKXJldHVybiBzKHUsdCxyKTt2YXIgYT1zKG4sdCxyKTtyZXR1cm4gbnVsbCE9PWEmJihjKGEpLCEwKX19KX0sOTcxNDooZSx0LHIpPT57dmFyIG49cig2NTMwKS5QUk9QRVIsYT1yKDgwNTIpLGk9cig5NjcwKSxzPXIoMTM0MCksbz1yKDcyOTMpLGM9cig0NzA2KSxsPSJ0b1N0cmluZyIsaD1SZWdFeHAucHJvdG90eXBlW2xdLHU9bygoZnVuY3Rpb24oKXtyZXR1cm4iL2EvYiIhPWguY2FsbCh7c291cmNlOiJhIixmbGFnczoiYiJ9KX0pKSxkPW4mJmgubmFtZSE9bDsodXx8ZCkmJmEoUmVnRXhwLnByb3RvdHlwZSxsLChmdW5jdGlvbigpe3ZhciBlPWkodGhpcyk7cmV0dXJuIi8iK3MoZS5zb3VyY2UpKyIvIitzKGMoZSkpfSkse3Vuc2FmZTohMH0pfSw0NTA2OihlLHQscik9Pnt2YXIgbj1yKDIxMDkpLGE9cigxNzAyKSxpPXIoNDQ4OCkscz1yKDkzMDMpLG89cigxMzQwKSxjPXIoNzI5MyksbD1hKCIiLmNoYXJBdCk7bih7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwLGZvcmNlZDpjKChmdW5jdGlvbigpe3JldHVybiJcdWQ4NDIiIT09Iu2hgu2+tyIuYXQoLTIpfSkpfSx7YXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9byhpKHRoaXMpKSxyPXQubGVuZ3RoLG49cyhlKSxhPW4+PTA/bjpyK247cmV0dXJuIGE8MHx8YT49cj92b2lkIDA6bCh0LGEpfX0pfSw3ODUyOihlLHQscik9Pnt2YXIgbixhPXIoMjEwOSksaT1yKDE0NzApLHM9cigxMjM2KS5mLG89cig3NDY2KSxjPXIoMTM0MCksbD1yKDM5MjkpLGg9cig0NDg4KSx1PXIoNDk2NCksZD1yKDE5MTMpLGY9aSgiIi5lbmRzV2l0aCksZz1pKCIiLnNsaWNlKSxwPU1hdGgubWluLG09dSgiZW5kc1dpdGgiKTthKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOiEoIWQmJiFtJiYobj1zKFN0cmluZy5wcm90b3R5cGUsImVuZHNXaXRoIiksbiYmIW4ud3JpdGFibGUpfHxtKX0se2VuZHNXaXRoOmZ1bmN0aW9uKGUpe3ZhciB0PWMoaCh0aGlzKSk7bChlKTt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxuPXQubGVuZ3RoLGE9dm9pZCAwPT09cj9uOnAobyhyKSxuKSxpPWMoZSk7cmV0dXJuIGY/Zih0LGksYSk6Zyh0LGEtaS5sZW5ndGgsYSk9PT1pfX0pfSwyMDIzOihlLHQscik9Pnt2YXIgbj1yKDIxMDkpLGE9cigxNzAyKSxpPXIoMzkyOSkscz1yKDQ0ODgpLG89cigxMzQwKSxjPXIoNDk2NCksbD1hKCIiLmluZGV4T2YpO24oe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6IWMoImluY2x1ZGVzIil9LHtpbmNsdWRlczpmdW5jdGlvbihlKXtyZXR1cm4hIX5sKG8ocyh0aGlzKSksbyhpKGUpKSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSl9LDg3ODM6KGUsdCxyKT0+e3ZhciBuPXIoODcxMCkuY2hhckF0LGE9cigxMzQwKSxpPXIoOTkwOSkscz1yKDE2NTYpLG89cig2MTc4KSxjPSJTdHJpbmcgSXRlcmF0b3IiLGw9aS5zZXQsaD1pLmdldHRlckZvcihjKTtzKFN0cmluZywiU3RyaW5nIiwoZnVuY3Rpb24oZSl7bCh0aGlzLHt0eXBlOmMsc3RyaW5nOmEoZSksaW5kZXg6MH0pfSksKGZ1bmN0aW9uKCl7dmFyIGUsdD1oKHRoaXMpLHI9dC5zdHJpbmcsYT10LmluZGV4O3JldHVybiBhPj1yLmxlbmd0aD9vKHZvaWQgMCwhMCk6KGU9bihyLGEpLHQuaW5kZXgrPWUubGVuZ3RoLG8oZSwhMSkpfSkpfSw0NzIzOihlLHQscik9Pnt2YXIgbj1yKDY5MTYpLGE9cig3MDA3KSxpPXIoOTY3MCkscz1yKDg1NTQpLG89cig3NDY2KSxjPXIoMTM0MCksbD1yKDQ0ODgpLGg9cig4MTczKSx1PXIoMTUzMCksZD1yKDc2NTEpO2EoIm1hdGNoIiwoZnVuY3Rpb24oZSx0LHIpe3JldHVybltmdW5jdGlvbih0KXt2YXIgcj1sKHRoaXMpLGE9cyh0KT92b2lkIDA6aCh0LGUpO3JldHVybiBhP24oYSx0LHIpOm5ldyBSZWdFeHAodClbZV0oYyhyKSl9LGZ1bmN0aW9uKGUpe3ZhciBuPWkodGhpcyksYT1jKGUpLHM9cih0LG4sYSk7aWYocy5kb25lKXJldHVybiBzLnZhbHVlO2lmKCFuLmdsb2JhbClyZXR1cm4gZChuLGEpO3ZhciBsPW4udW5pY29kZTtuLmxhc3RJbmRleD0wO2Zvcih2YXIgaCxmPVtdLGc9MDtudWxsIT09KGg9ZChuLGEpKTspe3ZhciBwPWMoaFswXSk7ZltnXT1wLCIiPT09cCYmKG4ubGFzdEluZGV4PXUoYSxvKG4ubGFzdEluZGV4KSxsKSksZysrfXJldHVybiAwPT09Zz9udWxsOmZ9XX0pKX0sODc1NzooZSx0LHIpPT57dmFyIG49cigyMTA5KSxhPXIoNjkxNiksaT1yKDE3MDIpLHM9cig0NDg4KSxvPXIoNjE0KSxjPXIoODU1NCksbD1yKDc4NTApLGg9cigxMzQwKSx1PXIoODE3MyksZD1yKDQ3MDYpLGY9cig2NDcpLGc9cig1MTEyKSxwPXIoMTkxMyksbT1nKCJyZXBsYWNlIiksYj1UeXBlRXJyb3IseT1pKCIiLmluZGV4T2YpLHc9aSgiIi5yZXBsYWNlKSx2PWkoIiIuc2xpY2UpLHg9TWF0aC5tYXgsUz1mdW5jdGlvbihlLHQscil7cmV0dXJuIHI+ZS5sZW5ndGg/LTE6IiI9PT10P3I6eShlLHQscil9O24oe3RhcmdldDoiU3RyaW5nIixwcm90bzohMH0se3JlcGxhY2VBbGw6ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGksZyxBLGssQyxPLEYsST1zKHRoaXMpLFQ9MCxNPTAsRT0iIjtpZighYyhlKSl7aWYoKHI9bChlKSkmJihuPWgocyhkKGUpKSksIX55KG4sImciKSkpdGhyb3cgYigiYC5yZXBsYWNlQWxsYCBkb2VzIG5vdCBhbGxvdyBub24tZ2xvYmFsIHJlZ2V4ZXMiKTtpZihpPXUoZSxtKSlyZXR1cm4gYShpLGUsSSx0KTtpZihwJiZyKXJldHVybiB3KGgoSSksZSx0KX1mb3IoZz1oKEkpLEE9aChlKSwoaz1vKHQpKXx8KHQ9aCh0KSksQz1BLmxlbmd0aCxPPXgoMSxDKSxUPVMoZyxBLDApOy0xIT09VDspRj1rP2godChBLFQsZykpOmYoQSxnLFQsW10sdm9pZCAwLHQpLEUrPXYoZyxNLFQpK0YsTT1UK0MsVD1TKGcsQSxUK08pO3JldHVybiBNPGcubGVuZ3RoJiYoRSs9dihnLE0pKSxFfX0pfSw1MzA2OihlLHQscik9Pnt2YXIgbj1yKDIxMDQpLGE9cig2OTE2KSxpPXIoMTcwMikscz1yKDcwMDcpLG89cig3MjkzKSxjPXIoOTY3MCksbD1yKDYxNCksaD1yKDg1NTQpLHU9cig5MzAzKSxkPXIoNzQ2NiksZj1yKDEzNDApLGc9cig0NDg4KSxwPXIoMTUzMCksbT1yKDgxNzMpLGI9cig2NDcpLHk9cig3NjUxKSx3PXIoNTExMikoInJlcGxhY2UiKSx2PU1hdGgubWF4LHg9TWF0aC5taW4sUz1pKFtdLmNvbmNhdCksQT1pKFtdLnB1c2gpLGs9aSgiIi5pbmRleE9mKSxDPWkoIiIuc2xpY2UpLE89IiQwIj09PSJhIi5yZXBsYWNlKC8uLywiJDAiKSxGPSEhLy4vW3ddJiYiIj09PS8uL1t3XSgiYSIsIiQwIik7cygicmVwbGFjZSIsKGZ1bmN0aW9uKGUsdCxyKXt2YXIgaT1GPyIkIjoiJDAiO3JldHVybltmdW5jdGlvbihlLHIpe3ZhciBuPWcodGhpcyksaT1oKGUpP3ZvaWQgMDptKGUsdyk7cmV0dXJuIGk/YShpLGUsbixyKTphKHQsZihuKSxlLHIpfSxmdW5jdGlvbihlLGEpe3ZhciBzPWModGhpcyksbz1mKGUpO2lmKCJzdHJpbmciPT10eXBlb2YgYSYmLTE9PT1rKGEsaSkmJi0xPT09ayhhLCIkPCIpKXt2YXIgaD1yKHQscyxvLGEpO2lmKGguZG9uZSlyZXR1cm4gaC52YWx1ZX12YXIgZz1sKGEpO2d8fChhPWYoYSkpO3ZhciBtPXMuZ2xvYmFsO2lmKG0pe3ZhciB3PXMudW5pY29kZTtzLmxhc3RJbmRleD0wfWZvcih2YXIgTz1bXTs7KXt2YXIgRj15KHMsbyk7aWYobnVsbD09PUYpYnJlYWs7aWYoQShPLEYpLCFtKWJyZWFrOyIiPT09ZihGWzBdKSYmKHMubGFzdEluZGV4PXAobyxkKHMubGFzdEluZGV4KSx3KSl9Zm9yKHZhciBJLFQ9IiIsTT0wLEU9MDtFPE8ubGVuZ3RoO0UrKyl7Zm9yKHZhciBQPWYoKEY9T1tFXSlbMF0pLFI9dih4KHUoRi5pbmRleCksby5sZW5ndGgpLDApLE49W10sRD0xO0Q8Ri5sZW5ndGg7RCsrKUEoTix2b2lkIDA9PT0oST1GW0RdKT9JOlN0cmluZyhJKSk7dmFyIEI9Ri5ncm91cHM7aWYoZyl7dmFyIEw9UyhbUF0sTixSLG8pO3ZvaWQgMCE9PUImJkEoTCxCKTt2YXIgXz1mKG4oYSx2b2lkIDAsTCkpfWVsc2UgXz1iKFAsbyxSLE4sQixhKTtSPj1NJiYoVCs9QyhvLE0sUikrXyxNPVIrUC5sZW5ndGgpfXJldHVybiBUK0MobyxNKX1dfSksISFvKChmdW5jdGlvbigpe3ZhciBlPS8uLztyZXR1cm4gZS5leGVjPWZ1bmN0aW9uKCl7dmFyIGU9W107cmV0dXJuIGUuZ3JvdXBzPXthOiI3In0sZX0sIjciIT09IiIucmVwbGFjZShlLCIkPGE+Iil9KSl8fCFPfHxGKX0sMzEyMzooZSx0LHIpPT57dmFyIG49cigyMTA0KSxhPXIoNjkxNiksaT1yKDE3MDIpLHM9cig3MDA3KSxvPXIoOTY3MCksYz1yKDg1NTQpLGw9cig3ODUwKSxoPXIoNDQ4OCksdT1yKDY3MDcpLGQ9cigxNTMwKSxmPXIoNzQ2NiksZz1yKDEzNDApLHA9cig4MTczKSxtPXIoMTU4OSksYj1yKDc2NTEpLHk9cigyMjYxKSx3PXIoMjk5OSksdj1yKDcyOTMpLHg9dy5VTlNVUFBPUlRFRF9ZLFM9NDI5NDk2NzI5NSxBPU1hdGgubWluLGs9W10ucHVzaCxDPWkoLy4vLmV4ZWMpLE89aShrKSxGPWkoIiIuc2xpY2UpO3MoInNwbGl0IiwoZnVuY3Rpb24oZSx0LHIpe3ZhciBpO3JldHVybiBpPSJjIj09ImFiYmMiLnNwbGl0KC8oYikqLylbMV18fDQhPSJ0ZXN0Ii5zcGxpdCgvKD86KS8sLTEpLmxlbmd0aHx8MiE9ImFiIi5zcGxpdCgvKD86YWIpKi8pLmxlbmd0aHx8NCE9Ii4iLnNwbGl0KC8oLj8pKC4/KS8pLmxlbmd0aHx8Ii4iLnNwbGl0KC8oKSgpLykubGVuZ3RoPjF8fCIiLnNwbGl0KC8uPy8pLmxlbmd0aD9mdW5jdGlvbihlLHIpe3ZhciBpPWcoaCh0aGlzKSkscz12b2lkIDA9PT1yP1M6cj4+PjA7aWYoMD09PXMpcmV0dXJuW107aWYodm9pZCAwPT09ZSlyZXR1cm5baV07aWYoIWwoZSkpcmV0dXJuIGEodCxpLGUscyk7Zm9yKHZhciBvLGMsdSxkPVtdLGY9KGUuaWdub3JlQ2FzZT8iaSI6IiIpKyhlLm11bHRpbGluZT8ibSI6IiIpKyhlLnVuaWNvZGU/InUiOiIiKSsoZS5zdGlja3k/InkiOiIiKSxwPTAsYj1uZXcgUmVnRXhwKGUuc291cmNlLGYrImciKTsobz1hKHksYixpKSkmJiEoKGM9Yi5sYXN0SW5kZXgpPnAmJihPKGQsRihpLHAsby5pbmRleCkpLG8ubGVuZ3RoPjEmJm8uaW5kZXg8aS5sZW5ndGgmJm4oayxkLG0obywxKSksdT1vWzBdLmxlbmd0aCxwPWMsZC5sZW5ndGg+PXMpKTspYi5sYXN0SW5kZXg9PT1vLmluZGV4JiZiLmxhc3RJbmRleCsrO3JldHVybiBwPT09aS5sZW5ndGg/IXUmJkMoYiwiIil8fE8oZCwiIik6TyhkLEYoaSxwKSksZC5sZW5ndGg+cz9tKGQsMCxzKTpkfToiMCIuc3BsaXQodm9pZCAwLDApLmxlbmd0aD9mdW5jdGlvbihlLHIpe3JldHVybiB2b2lkIDA9PT1lJiYwPT09cj9bXTphKHQsdGhpcyxlLHIpfTp0LFtmdW5jdGlvbih0LHIpe3ZhciBuPWgodGhpcykscz1jKHQpP3ZvaWQgMDpwKHQsZSk7cmV0dXJuIHM/YShzLHQsbixyKTphKGksZyhuKSx0LHIpfSxmdW5jdGlvbihlLG4pe3ZhciBhPW8odGhpcykscz1nKGUpLGM9cihpLGEscyxuLGkhPT10KTtpZihjLmRvbmUpcmV0dXJuIGMudmFsdWU7dmFyIGw9dShhLFJlZ0V4cCksaD1hLnVuaWNvZGUscD0oYS5pZ25vcmVDYXNlPyJpIjoiIikrKGEubXVsdGlsaW5lPyJtIjoiIikrKGEudW5pY29kZT8idSI6IiIpKyh4PyJnIjoieSIpLG09bmV3IGwoeD8iXig/OiIrYS5zb3VyY2UrIikiOmEscCkseT12b2lkIDA9PT1uP1M6bj4+PjA7aWYoMD09PXkpcmV0dXJuW107aWYoMD09PXMubGVuZ3RoKXJldHVybiBudWxsPT09YihtLHMpP1tzXTpbXTtmb3IodmFyIHc9MCx2PTAsaz1bXTt2PHMubGVuZ3RoOyl7bS5sYXN0SW5kZXg9eD8wOnY7dmFyIEMsST1iKG0seD9GKHMsdik6cyk7aWYobnVsbD09PUl8fChDPUEoZihtLmxhc3RJbmRleCsoeD92OjApKSxzLmxlbmd0aCkpPT09dyl2PWQocyx2LGgpO2Vsc2V7aWYoTyhrLEYocyx3LHYpKSxrLmxlbmd0aD09PXkpcmV0dXJuIGs7Zm9yKHZhciBUPTE7VDw9SS5sZW5ndGgtMTtUKyspaWYoTyhrLElbVF0pLGsubGVuZ3RoPT09eSlyZXR1cm4gazt2PXc9Q319cmV0dXJuIE8oayxGKHMsdykpLGt9XX0pLCEhdigoZnVuY3Rpb24oKXt2YXIgZT0vKD86KS8sdD1lLmV4ZWM7ZS5leGVjPWZ1bmN0aW9uKCl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfTt2YXIgcj0iYWIiLnNwbGl0KGUpO3JldHVybiAyIT09ci5sZW5ndGh8fCJhIiE9PXJbMF18fCJiIiE9PXJbMV19KSkseCl9LDY3NTU6KGUsdCxyKT0+e3ZhciBuLGE9cigyMTA5KSxpPXIoMTQ3MCkscz1yKDEyMzYpLmYsbz1yKDc0NjYpLGM9cigxMzQwKSxsPXIoMzkyOSksaD1yKDQ0ODgpLHU9cig0OTY0KSxkPXIoMTkxMyksZj1pKCIiLnN0YXJ0c1dpdGgpLGc9aSgiIi5zbGljZSkscD1NYXRoLm1pbixtPXUoInN0YXJ0c1dpdGgiKTthKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOiEoIWQmJiFtJiYobj1zKFN0cmluZy5wcm90b3R5cGUsInN0YXJ0c1dpdGgiKSxuJiYhbi53cml0YWJsZSl8fG0pfSx7c3RhcnRzV2l0aDpmdW5jdGlvbihlKXt2YXIgdD1jKGgodGhpcykpO2woZSk7dmFyIHI9byhwKGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLHQubGVuZ3RoKSksbj1jKGUpO3JldHVybiBmP2YodCxuLHIpOmcodCxyLHIrbi5sZW5ndGgpPT09bn19KX0sMzIxMDooZSx0LHIpPT57dmFyIG49cigyMTA5KSxhPXIoMzExMSkudHJpbTtuKHt0YXJnZXQ6IlN0cmluZyIscHJvdG86ITAsZm9yY2VkOnIoNjA5MSkoInRyaW0iKX0se3RyaW06ZnVuY3Rpb24oKXtyZXR1cm4gYSh0aGlzKX19KX0sMTgxNzooZSx0LHIpPT57dmFyIG49cigyMTA5KSxhPXIoOTc4MSksaT1yKDc4NTQpLHM9cigxNzAyKSxvPXIoMjU5NyksYz1yKDYxNCksbD1yKDc5NzYpLGg9cigxMzQwKSx1PXIoNzA0NSksZD1yKDk5MjApLGY9aS5TeW1ib2wsZz1mJiZmLnByb3RvdHlwZTtpZihhJiZjKGYpJiYoISgiZGVzY3JpcHRpb24iaW4gZyl8fHZvaWQgMCE9PWYoKS5kZXNjcmlwdGlvbikpe3ZhciBwPXt9LG09ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPDF8fHZvaWQgMD09PWFyZ3VtZW50c1swXT92b2lkIDA6aChhcmd1bWVudHNbMF0pLHQ9bChnLHRoaXMpP25ldyBmKGUpOnZvaWQgMD09PWU/ZigpOmYoZSk7cmV0dXJuIiI9PT1lJiYocFt0XT0hMCksdH07ZChtLGYpLG0ucHJvdG90eXBlPWcsZy5jb25zdHJ1Y3Rvcj1tO3ZhciBiPSJTeW1ib2wodGVzdCkiPT1TdHJpbmcoZigidGVzdCIpKSx5PXMoZy52YWx1ZU9mKSx3PXMoZy50b1N0cmluZyksdj0vXlN5bWJvbFwoKC4qKVwpW14pXSskLyx4PXMoIiIucmVwbGFjZSksUz1zKCIiLnNsaWNlKTt1KGcsImRlc2NyaXB0aW9uIix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3ZhciBlPXkodGhpcyk7aWYobyhwLGUpKXJldHVybiIiO3ZhciB0PXcoZSkscj1iP1ModCw3LC0xKTp4KHQsdiwiJDEiKTtyZXR1cm4iIj09PXI/dm9pZCAwOnJ9fSksbih7Z2xvYmFsOiEwLGNvbnN0cnVjdG9yOiEwLGZvcmNlZDohMH0se1N5bWJvbDptfSl9fSw4Njc1OihlLHQscik9Pnt2YXIgbj1yKDI2MCksYT1yKDYyNDQpLGk9cig5MzAzKSxzPW4uYVR5cGVkQXJyYXk7KDAsbi5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgiYXQiLChmdW5jdGlvbihlKXt2YXIgdD1zKHRoaXMpLHI9YSh0KSxuPWkoZSksbz1uPj0wP246cituO3JldHVybiBvPDB8fG8+PXI/dm9pZCAwOnRbb119KSl9LDMxMDU6KGUsdCxyKT0+e3ZhciBuPXIoMjYwKSxhPXIoMTI4NSksaT1yKDQ1OTkpLHM9cig2NDgpLG89cig2OTE2KSxjPXIoMTcwMiksbD1yKDcyOTMpLGg9bi5hVHlwZWRBcnJheSx1PW4uZXhwb3J0VHlwZWRBcnJheU1ldGhvZCxkPWMoIiIuc2xpY2UpO3UoImZpbGwiLChmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoO2godGhpcyk7dmFyIHI9IkJpZyI9PT1kKHModGhpcyksMCwzKT9pKGUpOitlO3JldHVybiBvKGEsdGhpcyxyLHQ+MT9hcmd1bWVudHNbMV06dm9pZCAwLHQ+Mj9hcmd1bWVudHNbMl06dm9pZCAwKX0pLGwoKGZ1bmN0aW9uKCl7dmFyIGU9MDtyZXR1cm4gbmV3IEludDhBcnJheSgyKS5maWxsKHt2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIGUrK319KSwxIT09ZX0pKSl9LDI5NTg6KGUsdCxyKT0+e3ZhciBuPXIoMjYwKSxhPXIoOTY3MSkuZmluZExhc3RJbmRleCxpPW4uYVR5cGVkQXJyYXk7KDAsbi5leHBvcnRUeXBlZEFycmF5TWV0aG9kKSgiZmluZExhc3RJbmRleCIsKGZ1bmN0aW9uKGUpe3JldHVybiBhKGkodGhpcyksZSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9KSl9LDM0MDg6KGUsdCxyKT0+e3ZhciBuPXIoMjYwKSxhPXIoOTY3MSkuZmluZExhc3QsaT1uLmFUeXBlZEFycmF5OygwLG4uZXhwb3J0VHlwZWRBcnJheU1ldGhvZCkoImZpbmRMYXN0IiwoZnVuY3Rpb24oZSl7cmV0dXJuIGEoaSh0aGlzKSxlLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0pKX0sNDE5NzooZSx0LHIpPT57cig5ODQzKSgiRmxvYXQzMiIsKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LHIsbil7cmV0dXJuIGUodGhpcyx0LHIsbil9fSkpfSw2NDk1OihlLHQscik9PntyKDk4NDMpKCJGbG9hdDY0IiwoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXtyZXR1cm4gZSh0aGlzLHQscixuKX19KSl9LDUxMDk6KGUsdCxyKT0+e3IoOTg0MykoIkludDE2IiwoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXtyZXR1cm4gZSh0aGlzLHQscixuKX19KSl9LDUxMjU6KGUsdCxyKT0+e3IoOTg0MykoIkludDMyIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXtyZXR1cm4gZSh0aGlzLHQscixuKX19KSl9LDcxNDU6KGUsdCxyKT0+e3IoOTg0MykoIkludDgiLChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxyLG4pe3JldHVybiBlKHRoaXMsdCxyLG4pfX0pKX0sMzQ2MjooZSx0LHIpPT57dmFyIG49cig3ODU0KSxhPXIoNjkxNiksaT1yKDI2MCkscz1yKDYyNDQpLG89cig0NTkwKSxjPXIoNzkwOCksbD1yKDcyOTMpLGg9bi5SYW5nZUVycm9yLHU9bi5JbnQ4QXJyYXksZD11JiZ1LnByb3RvdHlwZSxmPWQmJmQuc2V0LGc9aS5hVHlwZWRBcnJheSxwPWkuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCxtPSFsKChmdW5jdGlvbigpe3ZhciBlPW5ldyBVaW50OENsYW1wZWRBcnJheSgyKTtyZXR1cm4gYShmLGUse2xlbmd0aDoxLDA6M30sMSksMyE9PWVbMV19KSksYj1tJiZpLk5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1MmJmwoKGZ1bmN0aW9uKCl7dmFyIGU9bmV3IHUoMik7cmV0dXJuIGUuc2V0KDEpLGUuc2V0KCIyIiwxKSwwIT09ZVswXXx8MiE9PWVbMV19KSk7cCgic2V0IiwoZnVuY3Rpb24oZSl7Zyh0aGlzKTt2YXIgdD1vKGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLDEpLHI9YyhlKTtpZihtKXJldHVybiBhKGYsdGhpcyxyLHQpO3ZhciBuPXRoaXMubGVuZ3RoLGk9cyhyKSxsPTA7aWYoaSt0Pm4pdGhyb3cgaCgiV3JvbmcgbGVuZ3RoIik7Zm9yKDtsPGk7KXRoaXNbdCtsXT1yW2wrK119KSwhbXx8Yil9LDM4MjQ6KGUsdCxyKT0+e3ZhciBuPXIoNzg1NCksYT1yKDE0NzApLGk9cig3MjkzKSxzPXIoOTY2Miksbz1yKDQzNjIpLGM9cigyNjApLGw9cig4ODg2KSxoPXIoMjU2KSx1PXIoNzM5MiksZD1yKDgwMDgpLGY9Yy5hVHlwZWRBcnJheSxnPWMuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCxwPW4uVWludDE2QXJyYXksbT1wJiZhKHAucHJvdG90eXBlLnNvcnQpLGI9ISghbXx8aSgoZnVuY3Rpb24oKXttKG5ldyBwKDIpLG51bGwpfSkpJiZpKChmdW5jdGlvbigpe20obmV3IHAoMikse30pfSkpKSx5PSEhbSYmIWkoKGZ1bmN0aW9uKCl7aWYodSlyZXR1cm4gdTw3NDtpZihsKXJldHVybiBsPDY3O2lmKGgpcmV0dXJuITA7aWYoZClyZXR1cm4gZDw2MDI7dmFyIGUsdCxyPW5ldyBwKDUxNiksbj1BcnJheSg1MTYpO2ZvcihlPTA7ZTw1MTY7ZSsrKXQ9ZSU0LHJbZV09NTE1LWUsbltlXT1lLTIqdCszO2ZvcihtKHIsKGZ1bmN0aW9uKGUsdCl7cmV0dXJuKGUvNHwwKS0odC80fDApfSkpLGU9MDtlPDUxNjtlKyspaWYocltlXSE9PW5bZV0pcmV0dXJuITB9KSk7Zygic29ydCIsKGZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT1lJiZzKGUpLHk/bSh0aGlzLGUpOm8oZih0aGlzKSxmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXtyZXR1cm4gdm9pZCAwIT09ZT8rZSh0LHIpfHwwOnIhPXI/LTE6dCE9dD8xOjA9PT10JiYwPT09cj8xL3Q+MCYmMS9yPDA/MTotMTp0PnJ9fShlKSl9KSwheXx8Yil9LDI5NzQ6KGUsdCxyKT0+e3ZhciBuPXIoNzg1NCksYT1yKDIxMDQpLGk9cigyNjApLHM9cig3MjkzKSxvPXIoMjA2KSxjPW4uSW50OEFycmF5LGw9aS5hVHlwZWRBcnJheSxoPWkuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCx1PVtdLnRvTG9jYWxlU3RyaW5nLGQ9ISFjJiZzKChmdW5jdGlvbigpe3UuY2FsbChuZXcgYygxKSl9KSk7aCgidG9Mb2NhbGVTdHJpbmciLChmdW5jdGlvbigpe3JldHVybiBhKHUsZD9vKGwodGhpcykpOmwodGhpcyksbyhhcmd1bWVudHMpKX0pLHMoKGZ1bmN0aW9uKCl7cmV0dXJuWzEsMl0udG9Mb2NhbGVTdHJpbmcoKSE9bmV3IGMoWzEsMl0pLnRvTG9jYWxlU3RyaW5nKCl9KSl8fCFzKChmdW5jdGlvbigpe2MucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nLmNhbGwoWzEsMl0pfSkpKX0sMTQzOTooZSx0LHIpPT57dmFyIG49cigxODQzKSxhPXIoMjYwKSxpPWEuYVR5cGVkQXJyYXkscz1hLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Qsbz1hLmdldFR5cGVkQXJyYXlDb25zdHJ1Y3RvcjtzKCJ0b1JldmVyc2VkIiwoZnVuY3Rpb24oKXtyZXR1cm4gbihpKHRoaXMpLG8odGhpcykpfSkpfSw3NTg1OihlLHQscik9Pnt2YXIgbj1yKDI2MCksYT1yKDE3MDIpLGk9cig5NjYyKSxzPXIoNzc0NSksbz1uLmFUeXBlZEFycmF5LGM9bi5nZXRUeXBlZEFycmF5Q29uc3RydWN0b3IsbD1uLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QsaD1hKG4uVHlwZWRBcnJheVByb3RvdHlwZS5zb3J0KTtsKCJ0b1NvcnRlZCIsKGZ1bmN0aW9uKGUpe3ZvaWQgMCE9PWUmJmkoZSk7dmFyIHQ9byh0aGlzKSxyPXMoYyh0KSx0KTtyZXR1cm4gaChyLGUpfSkpfSw4MjU1OihlLHQscik9PntyKDk4NDMpKCJVaW50MTYiLChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxyLG4pe3JldHVybiBlKHRoaXMsdCxyLG4pfX0pKX0sOTEzNTooZSx0LHIpPT57cig5ODQzKSgiVWludDMyIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXtyZXR1cm4gZSh0aGlzLHQscixuKX19KSl9LDI0NzI6KGUsdCxyKT0+e3IoOTg0MykoIlVpbnQ4IiwoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXtyZXR1cm4gZSh0aGlzLHQscixuKX19KSl9LDk3NDM6KGUsdCxyKT0+e3IoOTg0MykoIlVpbnQ4IiwoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixuKXtyZXR1cm4gZSh0aGlzLHQscixuKX19KSwhMCl9LDUzMTU6KGUsdCxyKT0+e3ZhciBuPXIoMTU3MiksYT1yKDI2MCksaT1yKDQwNjcpLHM9cig5MzAzKSxvPXIoNDU5OSksYz1hLmFUeXBlZEFycmF5LGw9YS5nZXRUeXBlZEFycmF5Q29uc3RydWN0b3IsaD1hLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QsdT0hIWZ1bmN0aW9uKCl7dHJ5e25ldyBJbnQ4QXJyYXkoMSkud2l0aCgyLHt2YWx1ZU9mOmZ1bmN0aW9uKCl7dGhyb3cgOH19KX1jYXRjaChlKXtyZXR1cm4gOD09PWV9fSgpO2goIndpdGgiLHt3aXRoOmZ1bmN0aW9uKGUsdCl7dmFyIHI9Yyh0aGlzKSxhPXMoZSksaD1pKHIpP28odCk6K3Q7cmV0dXJuIG4ocixsKHIpLGEsaCl9fS53aXRoLCF1KX0sMTIwMjooZSx0LHIpPT57dmFyIG4sYT1yKDY2NzcpLGk9cig3ODU0KSxzPXIoMTcwMiksbz1yKDkxOTApLGM9cigyNDIzKSxsPXIoNzcxMCksaD1yKDkzMjApLHU9cigxMTEpLGQ9cig5OTA5KS5lbmZvcmNlLGY9cig3MjkzKSxnPXIoNDgxMSkscD1PYmplY3QsbT1BcnJheS5pc0FycmF5LGI9cC5pc0V4dGVuc2libGUseT1wLmlzRnJvemVuLHc9cC5pc1NlYWxlZCx2PXAuZnJlZXplLHg9cC5zZWFsLFM9e30sQT17fSxrPSFpLkFjdGl2ZVhPYmplY3QmJiJBY3RpdmVYT2JqZWN0ImluIGksQz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzLGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSxPPWwoIldlYWtNYXAiLEMsaCksRj1PLnByb3RvdHlwZSxJPXMoRi5zZXQpO2lmKGcpaWYoayl7bj1oLmdldENvbnN0cnVjdG9yKEMsIldlYWtNYXAiLCEwKSxjLmVuYWJsZSgpO3ZhciBUPXMoRi5kZWxldGUpLE09cyhGLmhhcyksRT1zKEYuZ2V0KTtvKEYse2RlbGV0ZTpmdW5jdGlvbihlKXtpZih1KGUpJiYhYihlKSl7dmFyIHQ9ZCh0aGlzKTtyZXR1cm4gdC5mcm96ZW58fCh0LmZyb3plbj1uZXcgbiksVCh0aGlzLGUpfHx0LmZyb3plbi5kZWxldGUoZSl9cmV0dXJuIFQodGhpcyxlKX0saGFzOmZ1bmN0aW9uKGUpe2lmKHUoZSkmJiFiKGUpKXt2YXIgdD1kKHRoaXMpO3JldHVybiB0LmZyb3plbnx8KHQuZnJvemVuPW5ldyBuKSxNKHRoaXMsZSl8fHQuZnJvemVuLmhhcyhlKX1yZXR1cm4gTSh0aGlzLGUpfSxnZXQ6ZnVuY3Rpb24oZSl7aWYodShlKSYmIWIoZSkpe3ZhciB0PWQodGhpcyk7cmV0dXJuIHQuZnJvemVufHwodC5mcm96ZW49bmV3IG4pLE0odGhpcyxlKT9FKHRoaXMsZSk6dC5mcm96ZW4uZ2V0KGUpfXJldHVybiBFKHRoaXMsZSl9LHNldDpmdW5jdGlvbihlLHQpe2lmKHUoZSkmJiFiKGUpKXt2YXIgcj1kKHRoaXMpO3IuZnJvemVufHwoci5mcm96ZW49bmV3IG4pLE0odGhpcyxlKT9JKHRoaXMsZSx0KTpyLmZyb3plbi5zZXQoZSx0KX1lbHNlIEkodGhpcyxlLHQpO3JldHVybiB0aGlzfX0pfWVsc2UgYSYmZigoZnVuY3Rpb24oKXt2YXIgZT12KFtdKTtyZXR1cm4gSShuZXcgTyxlLDEpLCF5KGUpfSkpJiZvKEYse3NldDpmdW5jdGlvbihlLHQpe3ZhciByO3JldHVybiBtKGUpJiYoeShlKT9yPVM6dyhlKSYmKHI9QSkpLEkodGhpcyxlLHQpLHI9PVMmJnYoZSkscj09QSYmeChlKSx0aGlzfX0pfSw0MTI5OihlLHQscik9PntyKDEyMDIpfSwzOTQ4OihlLHQscik9Pnt2YXIgbj1yKDc4NTQpLGE9cig4MzI0KSxpPXIoODUwOSkscz1yKDY5OTIpLG89cig4ODgwKSxjPXIoNTExMiksbD1jKCJpdGVyYXRvciIpLGg9YygidG9TdHJpbmdUYWciKSx1PXMudmFsdWVzLGQ9ZnVuY3Rpb24oZSx0KXtpZihlKXtpZihlW2xdIT09dSl0cnl7byhlLGwsdSl9Y2F0Y2godCl7ZVtsXT11fWlmKGVbaF18fG8oZSxoLHQpLGFbdF0pZm9yKHZhciByIGluIHMpaWYoZVtyXSE9PXNbcl0pdHJ5e28oZSxyLHNbcl0pfWNhdGNoKHQpe2Vbcl09c1tyXX19fTtmb3IodmFyIGYgaW4gYSlkKG5bZl0mJm5bZl0ucHJvdG90eXBlLGYpO2QoaSwiRE9NVG9rZW5MaXN0Iil9LDc3MTQ6KGUsdCxyKT0+e3ZhciBuPXIoMjEwOSksYT1yKDQwMzgpLGk9cig1MDA1KSxzPXIoNzI5Myksbz1yKDMwKSxjPXIoOTExNCksbD1yKDMwNzApLmYsaD1yKDgwNTIpLHU9cig3MDQ1KSxkPXIoMjU5NyksZj1yKDU3ODcpLGc9cig5NjcwKSxwPXIoNzc2MiksbT1yKDYyNzcpLGI9cigzNjc4KSx5PXIoMTA2MCksdz1yKDk5MDkpLHY9cig5NzgxKSx4PXIoMTkxMyksUz0iRE9NRXhjZXB0aW9uIixBPSJEQVRBX0NMT05FX0VSUiIsaz1pKCJFcnJvciIpLEM9aShTKXx8ZnVuY3Rpb24oKXt0cnl7KG5ldyhpKCJNZXNzYWdlQ2hhbm5lbCIpfHxhKCJ3b3JrZXJfdGhyZWFkcyIpLk1lc3NhZ2VDaGFubmVsKSkucG9ydDEucG9zdE1lc3NhZ2UobmV3IFdlYWtNYXApfWNhdGNoKGUpe2lmKGUubmFtZT09QSYmMjU9PWUuY29kZSlyZXR1cm4gZS5jb25zdHJ1Y3Rvcn19KCksTz1DJiZDLnByb3RvdHlwZSxGPWsucHJvdG90eXBlLEk9dy5zZXQsVD13LmdldHRlckZvcihTKSxNPSJzdGFjayJpbiBrKFMpLEU9ZnVuY3Rpb24oZSl7cmV0dXJuIGQoYixlKSYmYltlXS5tP2JbZV0uYzowfSxQPWZ1bmN0aW9uKCl7Zih0aGlzLFIpO3ZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1tKGU8MT92b2lkIDA6YXJndW1lbnRzWzBdKSxyPW0oZTwyP3ZvaWQgMDphcmd1bWVudHNbMV0sIkVycm9yIiksbj1FKHIpO2lmKEkodGhpcyx7dHlwZTpTLG5hbWU6cixtZXNzYWdlOnQsY29kZTpufSksdnx8KHRoaXMubmFtZT1yLHRoaXMubWVzc2FnZT10LHRoaXMuY29kZT1uKSxNKXt2YXIgYT1rKHQpO2EubmFtZT1TLGwodGhpcywic3RhY2siLGMoMSx5KGEuc3RhY2ssMSkpKX19LFI9UC5wcm90b3R5cGU9byhGKSxOPWZ1bmN0aW9uKGUpe3JldHVybntlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxnZXQ6ZX19LEQ9ZnVuY3Rpb24oZSl7cmV0dXJuIE4oKGZ1bmN0aW9uKCl7cmV0dXJuIFQodGhpcylbZV19KSl9O3YmJih1KFIsImNvZGUiLEQoImNvZGUiKSksdShSLCJtZXNzYWdlIixEKCJtZXNzYWdlIikpLHUoUiwibmFtZSIsRCgibmFtZSIpKSksbChSLCJjb25zdHJ1Y3RvciIsYygxLFApKTt2YXIgQj1zKChmdW5jdGlvbigpe3JldHVybiEobmV3IEMgaW5zdGFuY2VvZiBrKX0pKSxMPUJ8fHMoKGZ1bmN0aW9uKCl7cmV0dXJuIEYudG9TdHJpbmchPT1wfHwiMjogMSIhPT1TdHJpbmcobmV3IEMoMSwyKSl9KSksXz1CfHxzKChmdW5jdGlvbigpe3JldHVybiAyNSE9PW5ldyBDKDEsIkRhdGFDbG9uZUVycm9yIikuY29kZX0pKSxqPUJ8fDI1IT09Q1tBXXx8MjUhPT1PW0FdLFU9eD9MfHxffHxqOkI7bih7Z2xvYmFsOiEwLGNvbnN0cnVjdG9yOiEwLGZvcmNlZDpVfSx7RE9NRXhjZXB0aW9uOlU/UDpDfSk7dmFyICQ9aShTKSxYPSQucHJvdG90eXBlO2Zvcih2YXIgSCBpbiBMJiYoeHx8Qz09PSQpJiZoKFgsInRvU3RyaW5nIixwKSxfJiZ2JiZDPT09JCYmdShYLCJjb2RlIixOKChmdW5jdGlvbigpe3JldHVybiBFKGcodGhpcykubmFtZSl9KSkpLGIpaWYoZChiLEgpKXt2YXIgcT1iW0hdLHo9cS5zLEc9Yyg2LHEuYyk7ZCgkLHopfHxsKCQseixHKSxkKFgseil8fGwoWCx6LEcpfX0sMjgwMTooZSx0LHIpPT57dmFyIG49cigyMTA5KSxhPXIoNzg1NCksaT1yKDUwMDUpLHM9cig5MTE0KSxvPXIoMzA3MCkuZixjPXIoMjU5NyksbD1yKDU3ODcpLGg9cig5NTg3KSx1PXIoNjI3NyksZD1yKDM2NzgpLGY9cigxMDYwKSxnPXIoOTc4MSkscD1yKDE5MTMpLG09IkRPTUV4Y2VwdGlvbiIsYj1pKCJFcnJvciIpLHk9aShtKSx3PWZ1bmN0aW9uKCl7bCh0aGlzLHYpO3ZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD11KGU8MT92b2lkIDA6YXJndW1lbnRzWzBdKSxyPXUoZTwyP3ZvaWQgMDphcmd1bWVudHNbMV0sIkVycm9yIiksbj1uZXcgeSh0LHIpLGE9Yih0KTtyZXR1cm4gYS5uYW1lPW0sbyhuLCJzdGFjayIscygxLGYoYS5zdGFjaywxKSkpLGgobix0aGlzLHcpLG59LHY9dy5wcm90b3R5cGU9eS5wcm90b3R5cGUseD0ic3RhY2siaW4gYihtKSxTPSJzdGFjayJpbiBuZXcgeSgxLDIpLEE9eSYmZyYmT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhLG0pLGs9ISghQXx8QS53cml0YWJsZSYmQS5jb25maWd1cmFibGUpLEM9eCYmIWsmJiFTO24oe2dsb2JhbDohMCxjb25zdHJ1Y3RvcjohMCxmb3JjZWQ6cHx8Q30se0RPTUV4Y2VwdGlvbjpDP3c6eX0pO3ZhciBPPWkobSksRj1PLnByb3RvdHlwZTtpZihGLmNvbnN0cnVjdG9yIT09Tylmb3IodmFyIEkgaW4gcHx8byhGLCJjb25zdHJ1Y3RvciIscygxLE8pKSxkKWlmKGMoZCxJKSl7dmFyIFQ9ZFtJXSxNPVQucztjKE8sTSl8fG8oTyxNLHMoNixULmMpKX19LDExNzQ6KGUsdCxyKT0+e3ZhciBuPXIoNTAwNSksYT0iRE9NRXhjZXB0aW9uIjtyKDgwMDMpKG4oYSksYSl9LDE1NTA6KGUsdCxyKT0+e3ZhciBuPXIoMjEwOSksYT1yKDc4NTQpLGk9cig3MDQ1KSxzPXIoOTc4MSksbz1UeXBlRXJyb3IsYz1PYmplY3QuZGVmaW5lUHJvcGVydHksbD1hLnNlbGYhPT1hO3RyeXtpZihzKXt2YXIgaD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGEsInNlbGYiKTshbCYmaCYmaC5nZXQmJmguZW51bWVyYWJsZXx8aShhLCJzZWxmIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGF9LHNldDpmdW5jdGlvbihlKXtpZih0aGlzIT09YSl0aHJvdyBvKCJJbGxlZ2FsIGludm9jYXRpb24iKTtjKGEsInNlbGYiLHt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwfSl9LGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwfSl9ZWxzZSBuKHtnbG9iYWw6ITAsc2ltcGxlOiEwLGZvcmNlZDpsfSx7c2VsZjphfSl9Y2F0Y2goZSl7fX0sNTU1NjooZSx0LHIpPT57cig2OTkyKTt2YXIgbj1yKDIxMDkpLGE9cig3ODU0KSxpPXIoNjkxNikscz1yKDE3MDIpLG89cig5NzgxKSxjPXIoNTE0MyksbD1yKDgwNTIpLGg9cig3MDQ1KSx1PXIoOTE5MCksZD1yKDgwMDMpLGY9cigzMDYxKSxnPXIoOTkwOSkscD1yKDU3ODcpLG09cig2MTQpLGI9cigyNTk3KSx5PXIoOTk3NCksdz1yKDY0OCksdj1yKDk2NzApLHg9cigxMTEpLFM9cigxMzQwKSxBPXIoMzApLGs9cig5MTE0KSxDPXIoNDEyMSksTz1yKDEyNDYpLEY9cig4MDUzKSxJPXIoNTExMiksVD1yKDQzNjIpLE09SSgiaXRlcmF0b3IiKSxFPSJVUkxTZWFyY2hQYXJhbXMiLFA9RSsiSXRlcmF0b3IiLFI9Zy5zZXQsTj1nLmdldHRlckZvcihFKSxEPWcuZ2V0dGVyRm9yKFApLEI9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixMPWZ1bmN0aW9uKGUpe2lmKCFvKXJldHVybiBhW2VdO3ZhciB0PUIoYSxlKTtyZXR1cm4gdCYmdC52YWx1ZX0sXz1MKCJmZXRjaCIpLGo9TCgiUmVxdWVzdCIpLFU9TCgiSGVhZGVycyIpLCQ9aiYmai5wcm90b3R5cGUsWD1VJiZVLnByb3RvdHlwZSxIPWEuUmVnRXhwLHE9YS5UeXBlRXJyb3Isej1hLmRlY29kZVVSSUNvbXBvbmVudCxHPWEuZW5jb2RlVVJJQ29tcG9uZW50LFc9cygiIi5jaGFyQXQpLFY9cyhbXS5qb2luKSxLPXMoW10ucHVzaCksWT1zKCIiLnJlcGxhY2UpLEo9cyhbXS5zaGlmdCksWj1zKFtdLnNwbGljZSksUT1zKCIiLnNwbGl0KSxlZT1zKCIiLnNsaWNlKSx0ZT0vXCsvZyxyZT1BcnJheSg0KSxuZT1mdW5jdGlvbihlKXtyZXR1cm4gcmVbZS0xXXx8KHJlW2UtMV09SCgiKCg/OiVbXFxkYS1mXXsyfSl7IitlKyJ9KSIsImdpIikpfSxhZT1mdW5jdGlvbihlKXt0cnl7cmV0dXJuIHooZSl9Y2F0Y2godCl7cmV0dXJuIGV9fSxpZT1mdW5jdGlvbihlKXt2YXIgdD1ZKGUsdGUsIiAiKSxyPTQ7dHJ5e3JldHVybiB6KHQpfWNhdGNoKGUpe2Zvcig7cjspdD1ZKHQsbmUoci0tKSxhZSk7cmV0dXJuIHR9fSxzZT0vWyEnKCl+XXwlMjAvZyxvZT17IiEiOiIlMjEiLCInIjoiJTI3IiwiKCI6IiUyOCIsIikiOiIlMjkiLCJ+IjoiJTdFIiwiJTIwIjoiKyJ9LGNlPWZ1bmN0aW9uKGUpe3JldHVybiBvZVtlXX0sbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIFkoRyhlKSxzZSxjZSl9LGhlPWYoKGZ1bmN0aW9uKGUsdCl7Uih0aGlzLHt0eXBlOlAsaXRlcmF0b3I6QyhOKGUpLmVudHJpZXMpLGtpbmQ6dH0pfSksIkl0ZXJhdG9yIiwoZnVuY3Rpb24oKXt2YXIgZT1EKHRoaXMpLHQ9ZS5raW5kLHI9ZS5pdGVyYXRvci5uZXh0KCksbj1yLnZhbHVlO3JldHVybiByLmRvbmV8fChyLnZhbHVlPSJrZXlzIj09PXQ/bi5rZXk6InZhbHVlcyI9PT10P24udmFsdWU6W24ua2V5LG4udmFsdWVdKSxyfSksITApLHVlPWZ1bmN0aW9uKGUpe3RoaXMuZW50cmllcz1bXSx0aGlzLnVybD1udWxsLHZvaWQgMCE9PWUmJih4KGUpP3RoaXMucGFyc2VPYmplY3QoZSk6dGhpcy5wYXJzZVF1ZXJ5KCJzdHJpbmciPT10eXBlb2YgZT8iPyI9PT1XKGUsMCk/ZWUoZSwxKTplOlMoZSkpKX07dWUucHJvdG90eXBlPXt0eXBlOkUsYmluZFVSTDpmdW5jdGlvbihlKXt0aGlzLnVybD1lLHRoaXMudXBkYXRlKCl9LHBhcnNlT2JqZWN0OmZ1bmN0aW9uKGUpe3ZhciB0LHIsbixhLHMsbyxjLGw9TyhlKTtpZihsKWZvcihyPSh0PUMoZSxsKSkubmV4dDshKG49aShyLHQpKS5kb25lOyl7aWYocz0oYT1DKHYobi52YWx1ZSkpKS5uZXh0LChvPWkocyxhKSkuZG9uZXx8KGM9aShzLGEpKS5kb25lfHwhaShzLGEpLmRvbmUpdGhyb3cgcSgiRXhwZWN0ZWQgc2VxdWVuY2Ugd2l0aCBsZW5ndGggMiIpO0sodGhpcy5lbnRyaWVzLHtrZXk6UyhvLnZhbHVlKSx2YWx1ZTpTKGMudmFsdWUpfSl9ZWxzZSBmb3IodmFyIGggaW4gZSliKGUsaCkmJksodGhpcy5lbnRyaWVzLHtrZXk6aCx2YWx1ZTpTKGVbaF0pfSl9LHBhcnNlUXVlcnk6ZnVuY3Rpb24oZSl7aWYoZSlmb3IodmFyIHQscixuPVEoZSwiJiIpLGE9MDthPG4ubGVuZ3RoOykodD1uW2ErK10pLmxlbmd0aCYmKHI9USh0LCI9IiksSyh0aGlzLmVudHJpZXMse2tleTppZShKKHIpKSx2YWx1ZTppZShWKHIsIj0iKSl9KSl9LHNlcmlhbGl6ZTpmdW5jdGlvbigpe2Zvcih2YXIgZSx0PXRoaXMuZW50cmllcyxyPVtdLG49MDtuPHQubGVuZ3RoOyllPXRbbisrXSxLKHIsbGUoZS5rZXkpKyI9IitsZShlLnZhbHVlKSk7cmV0dXJuIFYociwiJiIpfSx1cGRhdGU6ZnVuY3Rpb24oKXt0aGlzLmVudHJpZXMubGVuZ3RoPTAsdGhpcy5wYXJzZVF1ZXJ5KHRoaXMudXJsLnF1ZXJ5KX0sdXBkYXRlVVJMOmZ1bmN0aW9uKCl7dGhpcy51cmwmJnRoaXMudXJsLnVwZGF0ZSgpfX07dmFyIGRlPWZ1bmN0aW9uKCl7cCh0aGlzLGZlKTt2YXIgZT1SKHRoaXMsbmV3IHVlKGFyZ3VtZW50cy5sZW5ndGg+MD9hcmd1bWVudHNbMF06dm9pZCAwKSk7b3x8KHRoaXMuc2l6ZT1lLmVudHJpZXMubGVuZ3RoKX0sZmU9ZGUucHJvdG90eXBlO2lmKHUoZmUse2FwcGVuZDpmdW5jdGlvbihlLHQpe3ZhciByPU4odGhpcyk7Rihhcmd1bWVudHMubGVuZ3RoLDIpLEsoci5lbnRyaWVzLHtrZXk6UyhlKSx2YWx1ZTpTKHQpfSksb3x8dGhpcy5sZW5ndGgrKyxyLnVwZGF0ZVVSTCgpfSxkZWxldGU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PU4odGhpcykscj1GKGFyZ3VtZW50cy5sZW5ndGgsMSksbj10LmVudHJpZXMsYT1TKGUpLGk9cjwyP3ZvaWQgMDphcmd1bWVudHNbMV0scz12b2lkIDA9PT1pP2k6UyhpKSxjPTA7YzxuLmxlbmd0aDspe3ZhciBsPW5bY107aWYobC5rZXkhPT1hfHx2b2lkIDAhPT1zJiZsLnZhbHVlIT09cyljKys7ZWxzZSBpZihaKG4sYywxKSx2b2lkIDAhPT1zKWJyZWFrfW98fCh0aGlzLnNpemU9bi5sZW5ndGgpLHQudXBkYXRlVVJMKCl9LGdldDpmdW5jdGlvbihlKXt2YXIgdD1OKHRoaXMpLmVudHJpZXM7Rihhcmd1bWVudHMubGVuZ3RoLDEpO2Zvcih2YXIgcj1TKGUpLG49MDtuPHQubGVuZ3RoO24rKylpZih0W25dLmtleT09PXIpcmV0dXJuIHRbbl0udmFsdWU7cmV0dXJuIG51bGx9LGdldEFsbDpmdW5jdGlvbihlKXt2YXIgdD1OKHRoaXMpLmVudHJpZXM7Rihhcmd1bWVudHMubGVuZ3RoLDEpO2Zvcih2YXIgcj1TKGUpLG49W10sYT0wO2E8dC5sZW5ndGg7YSsrKXRbYV0ua2V5PT09ciYmSyhuLHRbYV0udmFsdWUpO3JldHVybiBufSxoYXM6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PU4odGhpcykuZW50cmllcyxyPUYoYXJndW1lbnRzLmxlbmd0aCwxKSxuPVMoZSksYT1yPDI/dm9pZCAwOmFyZ3VtZW50c1sxXSxpPXZvaWQgMD09PWE/YTpTKGEpLHM9MDtzPHQubGVuZ3RoOyl7dmFyIG89dFtzKytdO2lmKG8ua2V5PT09biYmKHZvaWQgMD09PWl8fG8udmFsdWU9PT1pKSlyZXR1cm4hMH1yZXR1cm4hMX0sc2V0OmZ1bmN0aW9uKGUsdCl7dmFyIHI9Tih0aGlzKTtGKGFyZ3VtZW50cy5sZW5ndGgsMSk7Zm9yKHZhciBuLGE9ci5lbnRyaWVzLGk9ITEscz1TKGUpLGM9Uyh0KSxsPTA7bDxhLmxlbmd0aDtsKyspKG49YVtsXSkua2V5PT09cyYmKGk/WihhLGwtLSwxKTooaT0hMCxuLnZhbHVlPWMpKTtpfHxLKGEse2tleTpzLHZhbHVlOmN9KSxvfHwodGhpcy5zaXplPWEubGVuZ3RoKSxyLnVwZGF0ZVVSTCgpfSxzb3J0OmZ1bmN0aW9uKCl7dmFyIGU9Tih0aGlzKTtUKGUuZW50cmllcywoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5rZXk+dC5rZXk/MTotMX0pKSxlLnVwZGF0ZVVSTCgpfSxmb3JFYWNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPU4odGhpcykuZW50cmllcyxuPXkoZSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCksYT0wO2E8ci5sZW5ndGg7KW4oKHQ9clthKytdKS52YWx1ZSx0LmtleSx0aGlzKX0sa2V5czpmdW5jdGlvbigpe3JldHVybiBuZXcgaGUodGhpcywia2V5cyIpfSx2YWx1ZXM6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGhlKHRoaXMsInZhbHVlcyIpfSxlbnRyaWVzOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBoZSh0aGlzLCJlbnRyaWVzIil9fSx7ZW51bWVyYWJsZTohMH0pLGwoZmUsTSxmZS5lbnRyaWVzLHtuYW1lOiJlbnRyaWVzIn0pLGwoZmUsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4gTih0aGlzKS5zZXJpYWxpemUoKX0pLHtlbnVtZXJhYmxlOiEwfSksbyYmaChmZSwic2l6ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiBOKHRoaXMpLmVudHJpZXMubGVuZ3RofSxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMH0pLGQoZGUsRSksbih7Z2xvYmFsOiEwLGNvbnN0cnVjdG9yOiEwLGZvcmNlZDohY30se1VSTFNlYXJjaFBhcmFtczpkZX0pLCFjJiZtKFUpKXt2YXIgZ2U9cyhYLmhhcykscGU9cyhYLnNldCksbWU9ZnVuY3Rpb24oZSl7aWYoeChlKSl7dmFyIHQscj1lLmJvZHk7aWYodyhyKT09PUUpcmV0dXJuIHQ9ZS5oZWFkZXJzP25ldyBVKGUuaGVhZGVycyk6bmV3IFUsZ2UodCwiY29udGVudC10eXBlIil8fHBlKHQsImNvbnRlbnQtdHlwZSIsImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04IiksQShlLHtib2R5OmsoMCxTKHIpKSxoZWFkZXJzOmsoMCx0KX0pfXJldHVybiBlfTtpZihtKF8pJiZuKHtnbG9iYWw6ITAsZW51bWVyYWJsZTohMCxkb250Q2FsbEdldFNldDohMCxmb3JjZWQ6ITB9LHtmZXRjaDpmdW5jdGlvbihlKXtyZXR1cm4gXyhlLGFyZ3VtZW50cy5sZW5ndGg+MT9tZShhcmd1bWVudHNbMV0pOnt9KX19KSxtKGopKXt2YXIgYmU9ZnVuY3Rpb24oZSl7cmV0dXJuIHAodGhpcywkKSxuZXcgaihlLGFyZ3VtZW50cy5sZW5ndGg+MT9tZShhcmd1bWVudHNbMV0pOnt9KX07JC5jb25zdHJ1Y3Rvcj1iZSxiZS5wcm90b3R5cGU9JCxuKHtnbG9iYWw6ITAsY29uc3RydWN0b3I6ITAsZG9udENhbGxHZXRTZXQ6ITAsZm9yY2VkOiEwfSx7UmVxdWVzdDpiZX0pfX1lLmV4cG9ydHM9e1VSTFNlYXJjaFBhcmFtczpkZSxnZXRTdGF0ZTpOfX0sNjIyOTooZSx0LHIpPT57dmFyIG49cig4MDUyKSxhPXIoMTcwMiksaT1yKDEzNDApLHM9cig4MDUzKSxvPVVSTFNlYXJjaFBhcmFtcyxjPW8ucHJvdG90eXBlLGw9YShjLmFwcGVuZCksaD1hKGMuZGVsZXRlKSx1PWEoYy5mb3JFYWNoKSxkPWEoW10ucHVzaCksZj1uZXcgbygiYT0xJmE9MiZiPTMiKTtmLmRlbGV0ZSgiYSIsMSksZi5kZWxldGUoImIiLHZvaWQgMCksZisiIiE9ImE9MiImJm4oYywiZGVsZXRlIiwoZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxyPXQ8Mj92b2lkIDA6YXJndW1lbnRzWzFdO2lmKHQmJnZvaWQgMD09PXIpcmV0dXJuIGgodGhpcyxlKTt2YXIgbj1bXTt1KHRoaXMsKGZ1bmN0aW9uKGUsdCl7ZChuLHtrZXk6dCx2YWx1ZTplfSl9KSkscyh0LDEpO2Zvcih2YXIgYSxvPWkoZSksYz1pKHIpLGY9MCxnPTAscD0hMSxtPW4ubGVuZ3RoO2Y8bTspYT1uW2YrK10scHx8YS5rZXk9PT1vPyhwPSEwLGgodGhpcyxhLmtleSkpOmcrKztmb3IoO2c8bTspKGE9bltnKytdKS5rZXk9PT1vJiZhLnZhbHVlPT09Y3x8bCh0aGlzLGEua2V5LGEudmFsdWUpfSkse2VudW1lcmFibGU6ITAsdW5zYWZlOiEwfSl9LDczMzA6KGUsdCxyKT0+e3ZhciBuPXIoODA1MiksYT1yKDE3MDIpLGk9cigxMzQwKSxzPXIoODA1Myksbz1VUkxTZWFyY2hQYXJhbXMsYz1vLnByb3RvdHlwZSxsPWEoYy5nZXRBbGwpLGg9YShjLmhhcyksdT1uZXcgbygiYT0xIik7IXUuaGFzKCJhIiwyKSYmdS5oYXMoImEiLHZvaWQgMCl8fG4oYywiaGFzIiwoZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxyPXQ8Mj92b2lkIDA6YXJndW1lbnRzWzFdO2lmKHQmJnZvaWQgMD09PXIpcmV0dXJuIGgodGhpcyxlKTt2YXIgbj1sKHRoaXMsZSk7cyh0LDEpO2Zvcih2YXIgYT1pKHIpLG89MDtvPG4ubGVuZ3RoOylpZihuW28rK109PT1hKXJldHVybiEwO3JldHVybiExfSkse2VudW1lcmFibGU6ITAsdW5zYWZlOiEwfSl9LDE2Mzc6KGUsdCxyKT0+e3IoNTU1Nil9LDIwNjI6KGUsdCxyKT0+e3ZhciBuPXIoOTc4MSksYT1yKDE3MDIpLGk9cig3MDQ1KSxzPVVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUsbz1hKHMuZm9yRWFjaCk7biYmISgic2l6ZSJpbiBzKSYmaShzLCJzaXplIix7Z2V0OmZ1bmN0aW9uKCl7dmFyIGU9MDtyZXR1cm4gbyh0aGlzLChmdW5jdGlvbigpe2UrK30pKSxlfSxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMH0pfSw4Nzg5OihlLHQscik9PntyKDg3ODMpO3ZhciBuLGE9cigyMTA5KSxpPXIoOTc4MSkscz1yKDUxNDMpLG89cig3ODU0KSxjPXIoOTk3NCksbD1yKDE3MDIpLGg9cig4MDUyKSx1PXIoNzA0NSksZD1yKDU3ODcpLGY9cigyNTk3KSxnPXIoMTU3NCkscD1yKDg0NTcpLG09cigxNTg5KSxiPXIoODcxMCkuY29kZUF0LHk9cigzMTk3KSx3PXIoMTM0MCksdj1yKDgwMDMpLHg9cig4MDUzKSxTPXIoNTU1NiksQT1yKDk5MDkpLGs9QS5zZXQsQz1BLmdldHRlckZvcigiVVJMIiksTz1TLlVSTFNlYXJjaFBhcmFtcyxGPVMuZ2V0U3RhdGUsST1vLlVSTCxUPW8uVHlwZUVycm9yLE09by5wYXJzZUludCxFPU1hdGguZmxvb3IsUD1NYXRoLnBvdyxSPWwoIiIuY2hhckF0KSxOPWwoLy4vLmV4ZWMpLEQ9bChbXS5qb2luKSxCPWwoMS4udG9TdHJpbmcpLEw9bChbXS5wb3ApLF89bChbXS5wdXNoKSxqPWwoIiIucmVwbGFjZSksVT1sKFtdLnNoaWZ0KSwkPWwoIiIuc3BsaXQpLFg9bCgiIi5zbGljZSksSD1sKCIiLnRvTG93ZXJDYXNlKSxxPWwoW10udW5zaGlmdCksej0iSW52YWxpZCBzY2hlbWUiLEc9IkludmFsaWQgaG9zdCIsVz0iSW52YWxpZCBwb3J0IixWPS9bYS16XS9pLEs9L1tcZCstLmEtel0vaSxZPS9cZC8sSj0vXjB4L2ksWj0vXlswLTddKyQvLFE9L15cZCskLyxlZT0vXltcZGEtZl0rJC9pLHRlPS9bXDBcdFxuXHIgIyUvOjw+P0BbXFxcXV58XS8scmU9L1tcMFx0XG5cciAjLzo8Pj9AW1xcXF1efF0vLG5lPS9eW1x1MDAwMC1cdTAwMjBdKy8sYWU9LyhefFteXHUwMDAwLVx1MDAyMF0pW1x1MDAwMC1cdTAwMjBdKyQvLGllPS9bXHRcblxyXS9nLHNlPWZ1bmN0aW9uKGUpe3ZhciB0LHIsbixhO2lmKCJudW1iZXIiPT10eXBlb2YgZSl7Zm9yKHQ9W10scj0wO3I8NDtyKyspcSh0LGUlMjU2KSxlPUUoZS8yNTYpO3JldHVybiBEKHQsIi4iKX1pZigib2JqZWN0Ij09dHlwZW9mIGUpe2Zvcih0PSIiLG49ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PW51bGwscj0xLG49bnVsbCxhPTAsaT0wO2k8ODtpKyspMCE9PWVbaV0/KGE+ciYmKHQ9bixyPWEpLG49bnVsbCxhPTApOihudWxsPT09biYmKG49aSksKythKTtyZXR1cm4gYT5yJiYodD1uLHI9YSksdH0oZSkscj0wO3I8ODtyKyspYSYmMD09PWVbcl18fChhJiYoYT0hMSksbj09PXI/KHQrPXI/IjoiOiI6OiIsYT0hMCk6KHQrPUIoZVtyXSwxNikscjw3JiYodCs9IjoiKSkpO3JldHVybiJbIit0KyJdIn1yZXR1cm4gZX0sb2U9e30sY2U9Zyh7fSxvZSx7IiAiOjEsJyInOjEsIjwiOjEsIj4iOjEsImAiOjF9KSxsZT1nKHt9LGNlLHsiIyI6MSwiPyI6MSwieyI6MSwifSI6MX0pLGhlPWcoe30sbGUseyIvIjoxLCI6IjoxLCI7IjoxLCI9IjoxLCJAIjoxLCJbIjoxLCJcXCI6MSwiXSI6MSwiXiI6MSwifCI6MX0pLHVlPWZ1bmN0aW9uKGUsdCl7dmFyIHI9YihlLDApO3JldHVybiByPjMyJiZyPDEyNyYmIWYodCxlKT9lOmVuY29kZVVSSUNvbXBvbmVudChlKX0sZGU9e2Z0cDoyMSxmaWxlOm51bGwsaHR0cDo4MCxodHRwczo0NDMsd3M6ODAsd3NzOjQ0M30sZmU9ZnVuY3Rpb24oZSx0KXt2YXIgcjtyZXR1cm4gMj09ZS5sZW5ndGgmJk4oVixSKGUsMCkpJiYoIjoiPT0ocj1SKGUsMSkpfHwhdCYmInwiPT1yKX0sZ2U9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIGUubGVuZ3RoPjEmJmZlKFgoZSwwLDIpKSYmKDI9PWUubGVuZ3RofHwiLyI9PT0odD1SKGUsMikpfHwiXFwiPT09dHx8Ij8iPT09dHx8IiMiPT09dCl9LHBlPWZ1bmN0aW9uKGUpe3JldHVybiIuIj09PWV8fCIlMmUiPT09SChlKX0sbWU9e30sYmU9e30seWU9e30sd2U9e30sdmU9e30seGU9e30sU2U9e30sQWU9e30sa2U9e30sQ2U9e30sT2U9e30sRmU9e30sSWU9e30sVGU9e30sTWU9e30sRWU9e30sUGU9e30sUmU9e30sTmU9e30sRGU9e30sQmU9e30sTGU9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGEsaSxzPXcoZSk7aWYodCl7aWYoYT10aGlzLnBhcnNlKHMpKXRocm93IFQoYSk7dGhpcy5zZWFyY2hQYXJhbXM9bnVsbH1lbHNle2lmKHZvaWQgMCE9PXImJihuPW5ldyBMZShyLCEwKSksYT10aGlzLnBhcnNlKHMsbnVsbCxuKSl0aHJvdyBUKGEpOyhpPUYobmV3IE8pKS5iaW5kVVJMKHRoaXMpLHRoaXMuc2VhcmNoUGFyYW1zPWl9fTtMZS5wcm90b3R5cGU9e3R5cGU6IlVSTCIscGFyc2U6ZnVuY3Rpb24oZSx0LHIpe3ZhciBhLGkscyxvLGMsbD10aGlzLGg9dHx8bWUsdT0wLGQ9IiIsZz0hMSxiPSExLHk9ITE7Zm9yKGU9dyhlKSx0fHwobC5zY2hlbWU9IiIsbC51c2VybmFtZT0iIixsLnBhc3N3b3JkPSIiLGwuaG9zdD1udWxsLGwucG9ydD1udWxsLGwucGF0aD1bXSxsLnF1ZXJ5PW51bGwsbC5mcmFnbWVudD1udWxsLGwuY2Fubm90QmVBQmFzZVVSTD0hMSxlPWooZSxuZSwiIiksZT1qKGUsYWUsIiQxIikpLGU9aihlLGllLCIiKSxhPXAoZSk7dTw9YS5sZW5ndGg7KXtzd2l0Y2goaT1hW3VdLGgpe2Nhc2UgbWU6aWYoIWl8fCFOKFYsaSkpe2lmKHQpcmV0dXJuIHo7aD15ZTtjb250aW51ZX1kKz1IKGkpLGg9YmU7YnJlYWs7Y2FzZSBiZTppZihpJiYoTihLLGkpfHwiKyI9PWl8fCItIj09aXx8Ii4iPT1pKSlkKz1IKGkpO2Vsc2V7aWYoIjoiIT1pKXtpZih0KXJldHVybiB6O2Q9IiIsaD15ZSx1PTA7Y29udGludWV9aWYodCYmKGwuaXNTcGVjaWFsKCkhPWYoZGUsZCl8fCJmaWxlIj09ZCYmKGwuaW5jbHVkZXNDcmVkZW50aWFscygpfHxudWxsIT09bC5wb3J0KXx8ImZpbGUiPT1sLnNjaGVtZSYmIWwuaG9zdCkpcmV0dXJuO2lmKGwuc2NoZW1lPWQsdClyZXR1cm4gdm9pZChsLmlzU3BlY2lhbCgpJiZkZVtsLnNjaGVtZV09PWwucG9ydCYmKGwucG9ydD1udWxsKSk7ZD0iIiwiZmlsZSI9PWwuc2NoZW1lP2g9VGU6bC5pc1NwZWNpYWwoKSYmciYmci5zY2hlbWU9PWwuc2NoZW1lP2g9d2U6bC5pc1NwZWNpYWwoKT9oPUFlOiIvIj09YVt1KzFdPyhoPXZlLHUrKyk6KGwuY2Fubm90QmVBQmFzZVVSTD0hMCxfKGwucGF0aCwiIiksaD1OZSl9YnJlYWs7Y2FzZSB5ZTppZighcnx8ci5jYW5ub3RCZUFCYXNlVVJMJiYiIyIhPWkpcmV0dXJuIHo7aWYoci5jYW5ub3RCZUFCYXNlVVJMJiYiIyI9PWkpe2wuc2NoZW1lPXIuc2NoZW1lLGwucGF0aD1tKHIucGF0aCksbC5xdWVyeT1yLnF1ZXJ5LGwuZnJhZ21lbnQ9IiIsbC5jYW5ub3RCZUFCYXNlVVJMPSEwLGg9QmU7YnJlYWt9aD0iZmlsZSI9PXIuc2NoZW1lP1RlOnhlO2NvbnRpbnVlO2Nhc2Ugd2U6aWYoIi8iIT1pfHwiLyIhPWFbdSsxXSl7aD14ZTtjb250aW51ZX1oPWtlLHUrKzticmVhaztjYXNlIHZlOmlmKCIvIj09aSl7aD1DZTticmVha31oPVJlO2NvbnRpbnVlO2Nhc2UgeGU6aWYobC5zY2hlbWU9ci5zY2hlbWUsaT09bilsLnVzZXJuYW1lPXIudXNlcm5hbWUsbC5wYXNzd29yZD1yLnBhc3N3b3JkLGwuaG9zdD1yLmhvc3QsbC5wb3J0PXIucG9ydCxsLnBhdGg9bShyLnBhdGgpLGwucXVlcnk9ci5xdWVyeTtlbHNlIGlmKCIvIj09aXx8IlxcIj09aSYmbC5pc1NwZWNpYWwoKSloPVNlO2Vsc2UgaWYoIj8iPT1pKWwudXNlcm5hbWU9ci51c2VybmFtZSxsLnBhc3N3b3JkPXIucGFzc3dvcmQsbC5ob3N0PXIuaG9zdCxsLnBvcnQ9ci5wb3J0LGwucGF0aD1tKHIucGF0aCksbC5xdWVyeT0iIixoPURlO2Vsc2V7aWYoIiMiIT1pKXtsLnVzZXJuYW1lPXIudXNlcm5hbWUsbC5wYXNzd29yZD1yLnBhc3N3b3JkLGwuaG9zdD1yLmhvc3QsbC5wb3J0PXIucG9ydCxsLnBhdGg9bShyLnBhdGgpLGwucGF0aC5sZW5ndGgtLSxoPVJlO2NvbnRpbnVlfWwudXNlcm5hbWU9ci51c2VybmFtZSxsLnBhc3N3b3JkPXIucGFzc3dvcmQsbC5ob3N0PXIuaG9zdCxsLnBvcnQ9ci5wb3J0LGwucGF0aD1tKHIucGF0aCksbC5xdWVyeT1yLnF1ZXJ5LGwuZnJhZ21lbnQ9IiIsaD1CZX1icmVhaztjYXNlIFNlOmlmKCFsLmlzU3BlY2lhbCgpfHwiLyIhPWkmJiJcXCIhPWkpe2lmKCIvIiE9aSl7bC51c2VybmFtZT1yLnVzZXJuYW1lLGwucGFzc3dvcmQ9ci5wYXNzd29yZCxsLmhvc3Q9ci5ob3N0LGwucG9ydD1yLnBvcnQsaD1SZTtjb250aW51ZX1oPUNlfWVsc2UgaD1rZTticmVhaztjYXNlIEFlOmlmKGg9a2UsIi8iIT1pfHwiLyIhPVIoZCx1KzEpKWNvbnRpbnVlO3UrKzticmVhaztjYXNlIGtlOmlmKCIvIiE9aSYmIlxcIiE9aSl7aD1DZTtjb250aW51ZX1icmVhaztjYXNlIENlOmlmKCJAIj09aSl7ZyYmKGQ9IiU0MCIrZCksZz0hMCxzPXAoZCk7Zm9yKHZhciB2PTA7djxzLmxlbmd0aDt2Kyspe3ZhciB4PXNbdl07aWYoIjoiIT14fHx5KXt2YXIgUz11ZSh4LGhlKTt5P2wucGFzc3dvcmQrPVM6bC51c2VybmFtZSs9U31lbHNlIHk9ITB9ZD0iIn1lbHNlIGlmKGk9PW58fCIvIj09aXx8Ij8iPT1pfHwiIyI9PWl8fCJcXCI9PWkmJmwuaXNTcGVjaWFsKCkpe2lmKGcmJiIiPT1kKXJldHVybiJJbnZhbGlkIGF1dGhvcml0eSI7dS09cChkKS5sZW5ndGgrMSxkPSIiLGg9T2V9ZWxzZSBkKz1pO2JyZWFrO2Nhc2UgT2U6Y2FzZSBGZTppZih0JiYiZmlsZSI9PWwuc2NoZW1lKXtoPUVlO2NvbnRpbnVlfWlmKCI6IiE9aXx8Yil7aWYoaT09bnx8Ii8iPT1pfHwiPyI9PWl8fCIjIj09aXx8IlxcIj09aSYmbC5pc1NwZWNpYWwoKSl7aWYobC5pc1NwZWNpYWwoKSYmIiI9PWQpcmV0dXJuIEc7aWYodCYmIiI9PWQmJihsLmluY2x1ZGVzQ3JlZGVudGlhbHMoKXx8bnVsbCE9PWwucG9ydCkpcmV0dXJuO2lmKG89bC5wYXJzZUhvc3QoZCkpcmV0dXJuIG87aWYoZD0iIixoPVBlLHQpcmV0dXJuO2NvbnRpbnVlfSJbIj09aT9iPSEwOiJdIj09aSYmKGI9ITEpLGQrPWl9ZWxzZXtpZigiIj09ZClyZXR1cm4gRztpZihvPWwucGFyc2VIb3N0KGQpKXJldHVybiBvO2lmKGQ9IiIsaD1JZSx0PT1GZSlyZXR1cm59YnJlYWs7Y2FzZSBJZTppZighTihZLGkpKXtpZihpPT1ufHwiLyI9PWl8fCI/Ij09aXx8IiMiPT1pfHwiXFwiPT1pJiZsLmlzU3BlY2lhbCgpfHx0KXtpZigiIiE9ZCl7dmFyIEE9TShkLDEwKTtpZihBPjY1NTM1KXJldHVybiBXO2wucG9ydD1sLmlzU3BlY2lhbCgpJiZBPT09ZGVbbC5zY2hlbWVdP251bGw6QSxkPSIifWlmKHQpcmV0dXJuO2g9UGU7Y29udGludWV9cmV0dXJuIFd9ZCs9aTticmVhaztjYXNlIFRlOmlmKGwuc2NoZW1lPSJmaWxlIiwiLyI9PWl8fCJcXCI9PWkpaD1NZTtlbHNle2lmKCFyfHwiZmlsZSIhPXIuc2NoZW1lKXtoPVJlO2NvbnRpbnVlfWlmKGk9PW4pbC5ob3N0PXIuaG9zdCxsLnBhdGg9bShyLnBhdGgpLGwucXVlcnk9ci5xdWVyeTtlbHNlIGlmKCI/Ij09aSlsLmhvc3Q9ci5ob3N0LGwucGF0aD1tKHIucGF0aCksbC5xdWVyeT0iIixoPURlO2Vsc2V7aWYoIiMiIT1pKXtnZShEKG0oYSx1KSwiIikpfHwobC5ob3N0PXIuaG9zdCxsLnBhdGg9bShyLnBhdGgpLGwuc2hvcnRlblBhdGgoKSksaD1SZTtjb250aW51ZX1sLmhvc3Q9ci5ob3N0LGwucGF0aD1tKHIucGF0aCksbC5xdWVyeT1yLnF1ZXJ5LGwuZnJhZ21lbnQ9IiIsaD1CZX19YnJlYWs7Y2FzZSBNZTppZigiLyI9PWl8fCJcXCI9PWkpe2g9RWU7YnJlYWt9ciYmImZpbGUiPT1yLnNjaGVtZSYmIWdlKEQobShhLHUpLCIiKSkmJihmZShyLnBhdGhbMF0sITApP18obC5wYXRoLHIucGF0aFswXSk6bC5ob3N0PXIuaG9zdCksaD1SZTtjb250aW51ZTtjYXNlIEVlOmlmKGk9PW58fCIvIj09aXx8IlxcIj09aXx8Ij8iPT1pfHwiIyI9PWkpe2lmKCF0JiZmZShkKSloPVJlO2Vsc2UgaWYoIiI9PWQpe2lmKGwuaG9zdD0iIix0KXJldHVybjtoPVBlfWVsc2V7aWYobz1sLnBhcnNlSG9zdChkKSlyZXR1cm4gbztpZigibG9jYWxob3N0Ij09bC5ob3N0JiYobC5ob3N0PSIiKSx0KXJldHVybjtkPSIiLGg9UGV9Y29udGludWV9ZCs9aTticmVhaztjYXNlIFBlOmlmKGwuaXNTcGVjaWFsKCkpe2lmKGg9UmUsIi8iIT1pJiYiXFwiIT1pKWNvbnRpbnVlfWVsc2UgaWYodHx8Ij8iIT1pKWlmKHR8fCIjIiE9aSl7aWYoaSE9biYmKGg9UmUsIi8iIT1pKSljb250aW51ZX1lbHNlIGwuZnJhZ21lbnQ9IiIsaD1CZTtlbHNlIGwucXVlcnk9IiIsaD1EZTticmVhaztjYXNlIFJlOmlmKGk9PW58fCIvIj09aXx8IlxcIj09aSYmbC5pc1NwZWNpYWwoKXx8IXQmJigiPyI9PWl8fCIjIj09aSkpe2lmKCIuLiI9PT0oYz1IKGM9ZCkpfHwiJTJlLiI9PT1jfHwiLiUyZSI9PT1jfHwiJTJlJTJlIj09PWM/KGwuc2hvcnRlblBhdGgoKSwiLyI9PWl8fCJcXCI9PWkmJmwuaXNTcGVjaWFsKCl8fF8obC5wYXRoLCIiKSk6cGUoZCk/Ii8iPT1pfHwiXFwiPT1pJiZsLmlzU3BlY2lhbCgpfHxfKGwucGF0aCwiIik6KCJmaWxlIj09bC5zY2hlbWUmJiFsLnBhdGgubGVuZ3RoJiZmZShkKSYmKGwuaG9zdCYmKGwuaG9zdD0iIiksZD1SKGQsMCkrIjoiKSxfKGwucGF0aCxkKSksZD0iIiwiZmlsZSI9PWwuc2NoZW1lJiYoaT09bnx8Ij8iPT1pfHwiIyI9PWkpKWZvcig7bC5wYXRoLmxlbmd0aD4xJiYiIj09PWwucGF0aFswXTspVShsLnBhdGgpOyI/Ij09aT8obC5xdWVyeT0iIixoPURlKToiIyI9PWkmJihsLmZyYWdtZW50PSIiLGg9QmUpfWVsc2UgZCs9dWUoaSxsZSk7YnJlYWs7Y2FzZSBOZToiPyI9PWk/KGwucXVlcnk9IiIsaD1EZSk6IiMiPT1pPyhsLmZyYWdtZW50PSIiLGg9QmUpOmkhPW4mJihsLnBhdGhbMF0rPXVlKGksb2UpKTticmVhaztjYXNlIERlOnR8fCIjIiE9aT9pIT1uJiYoIiciPT1pJiZsLmlzU3BlY2lhbCgpP2wucXVlcnkrPSIlMjciOmwucXVlcnkrPSIjIj09aT8iJTIzIjp1ZShpLG9lKSk6KGwuZnJhZ21lbnQ9IiIsaD1CZSk7YnJlYWs7Y2FzZSBCZTppIT1uJiYobC5mcmFnbWVudCs9dWUoaSxjZSkpfXUrK319LHBhcnNlSG9zdDpmdW5jdGlvbihlKXt2YXIgdCxyLG47aWYoIlsiPT1SKGUsMCkpe2lmKCJdIiE9UihlLGUubGVuZ3RoLTEpKXJldHVybiBHO2lmKHQ9ZnVuY3Rpb24oZSl7dmFyIHQscixuLGEsaSxzLG8sYz1bMCwwLDAsMCwwLDAsMCwwXSxsPTAsaD1udWxsLHU9MCxkPWZ1bmN0aW9uKCl7cmV0dXJuIFIoZSx1KX07aWYoIjoiPT1kKCkpe2lmKCI6IiE9UihlLDEpKXJldHVybjt1Kz0yLGg9KytsfWZvcig7ZCgpOyl7aWYoOD09bClyZXR1cm47aWYoIjoiIT1kKCkpe2Zvcih0PXI9MDtyPDQmJk4oZWUsZCgpKTspdD0xNip0K00oZCgpLDE2KSx1KysscisrO2lmKCIuIj09ZCgpKXtpZigwPT1yKXJldHVybjtpZih1LT1yLGw+NilyZXR1cm47Zm9yKG49MDtkKCk7KXtpZihhPW51bGwsbj4wKXtpZighKCIuIj09ZCgpJiZuPDQpKXJldHVybjt1Kyt9aWYoIU4oWSxkKCkpKXJldHVybjtmb3IoO04oWSxkKCkpOyl7aWYoaT1NKGQoKSwxMCksbnVsbD09PWEpYT1pO2Vsc2V7aWYoMD09YSlyZXR1cm47YT0xMCphK2l9aWYoYT4yNTUpcmV0dXJuO3UrK31jW2xdPTI1NipjW2xdK2EsMiE9KytuJiY0IT1ufHxsKyt9aWYoNCE9bilyZXR1cm47YnJlYWt9aWYoIjoiPT1kKCkpe2lmKHUrKywhZCgpKXJldHVybn1lbHNlIGlmKGQoKSlyZXR1cm47Y1tsKytdPXR9ZWxzZXtpZihudWxsIT09aClyZXR1cm47dSsrLGg9KytsfX1pZihudWxsIT09aClmb3Iocz1sLWgsbD03OzAhPWwmJnM+MDspbz1jW2xdLGNbbC0tXT1jW2grcy0xXSxjW2grLS1zXT1vO2Vsc2UgaWYoOCE9bClyZXR1cm47cmV0dXJuIGN9KFgoZSwxLC0xKSksIXQpcmV0dXJuIEc7dGhpcy5ob3N0PXR9ZWxzZSBpZih0aGlzLmlzU3BlY2lhbCgpKXtpZihlPXkoZSksTih0ZSxlKSlyZXR1cm4gRztpZih0PWZ1bmN0aW9uKGUpe3ZhciB0LHIsbixhLGkscyxvLGM9JChlLCIuIik7aWYoYy5sZW5ndGgmJiIiPT1jW2MubGVuZ3RoLTFdJiZjLmxlbmd0aC0tLCh0PWMubGVuZ3RoKT40KXJldHVybiBlO2ZvcihyPVtdLG49MDtuPHQ7bisrKXtpZigiIj09KGE9Y1tuXSkpcmV0dXJuIGU7aWYoaT0xMCxhLmxlbmd0aD4xJiYiMCI9PVIoYSwwKSYmKGk9TihKLGEpPzE2OjgsYT1YKGEsOD09aT8xOjIpKSwiIj09PWEpcz0wO2Vsc2V7aWYoIU4oMTA9PWk/UTo4PT1pP1o6ZWUsYSkpcmV0dXJuIGU7cz1NKGEsaSl9XyhyLHMpfWZvcihuPTA7bjx0O24rKylpZihzPXJbbl0sbj09dC0xKXtpZihzPj1QKDI1Niw1LXQpKXJldHVybiBudWxsfWVsc2UgaWYocz4yNTUpcmV0dXJuIG51bGw7Zm9yKG89TChyKSxuPTA7bjxyLmxlbmd0aDtuKyspbys9cltuXSpQKDI1NiwzLW4pO3JldHVybiBvfShlKSxudWxsPT09dClyZXR1cm4gRzt0aGlzLmhvc3Q9dH1lbHNle2lmKE4ocmUsZSkpcmV0dXJuIEc7Zm9yKHQ9IiIscj1wKGUpLG49MDtuPHIubGVuZ3RoO24rKyl0Kz11ZShyW25dLG9lKTt0aGlzLmhvc3Q9dH19LGNhbm5vdEhhdmVVc2VybmFtZVBhc3N3b3JkUG9ydDpmdW5jdGlvbigpe3JldHVybiF0aGlzLmhvc3R8fHRoaXMuY2Fubm90QmVBQmFzZVVSTHx8ImZpbGUiPT10aGlzLnNjaGVtZX0saW5jbHVkZXNDcmVkZW50aWFsczpmdW5jdGlvbigpe3JldHVybiIiIT10aGlzLnVzZXJuYW1lfHwiIiE9dGhpcy5wYXNzd29yZH0saXNTcGVjaWFsOmZ1bmN0aW9uKCl7cmV0dXJuIGYoZGUsdGhpcy5zY2hlbWUpfSxzaG9ydGVuUGF0aDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucGF0aCx0PWUubGVuZ3RoOyF0fHwiZmlsZSI9PXRoaXMuc2NoZW1lJiYxPT10JiZmZShlWzBdLCEwKXx8ZS5sZW5ndGgtLX0sc2VyaWFsaXplOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PWUuc2NoZW1lLHI9ZS51c2VybmFtZSxuPWUucGFzc3dvcmQsYT1lLmhvc3QsaT1lLnBvcnQscz1lLnBhdGgsbz1lLnF1ZXJ5LGM9ZS5mcmFnbWVudCxsPXQrIjoiO3JldHVybiBudWxsIT09YT8obCs9Ii8vIixlLmluY2x1ZGVzQ3JlZGVudGlhbHMoKSYmKGwrPXIrKG4/IjoiK246IiIpKyJAIiksbCs9c2UoYSksbnVsbCE9PWkmJihsKz0iOiIraSkpOiJmaWxlIj09dCYmKGwrPSIvLyIpLGwrPWUuY2Fubm90QmVBQmFzZVVSTD9zWzBdOnMubGVuZ3RoPyIvIitEKHMsIi8iKToiIixudWxsIT09byYmKGwrPSI/IitvKSxudWxsIT09YyYmKGwrPSIjIitjKSxsfSxzZXRIcmVmOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucGFyc2UoZSk7aWYodCl0aHJvdyBUKHQpO3RoaXMuc2VhcmNoUGFyYW1zLnVwZGF0ZSgpfSxnZXRPcmlnaW46ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnNjaGVtZSx0PXRoaXMucG9ydDtpZigiYmxvYiI9PWUpdHJ5e3JldHVybiBuZXcgX2UoZS5wYXRoWzBdKS5vcmlnaW59Y2F0Y2goZSl7cmV0dXJuIm51bGwifXJldHVybiJmaWxlIiE9ZSYmdGhpcy5pc1NwZWNpYWwoKT9lKyI6Ly8iK3NlKHRoaXMuaG9zdCkrKG51bGwhPT10PyI6Iit0OiIiKToibnVsbCJ9LGdldFByb3RvY29sOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc2NoZW1lKyI6In0sc2V0UHJvdG9jb2w6ZnVuY3Rpb24oZSl7dGhpcy5wYXJzZSh3KGUpKyI6IixtZSl9LGdldFVzZXJuYW1lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudXNlcm5hbWV9LHNldFVzZXJuYW1lOmZ1bmN0aW9uKGUpe3ZhciB0PXAodyhlKSk7aWYoIXRoaXMuY2Fubm90SGF2ZVVzZXJuYW1lUGFzc3dvcmRQb3J0KCkpe3RoaXMudXNlcm5hbWU9IiI7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspdGhpcy51c2VybmFtZSs9dWUodFtyXSxoZSl9fSxnZXRQYXNzd29yZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhc3N3b3JkfSxzZXRQYXNzd29yZDpmdW5jdGlvbihlKXt2YXIgdD1wKHcoZSkpO2lmKCF0aGlzLmNhbm5vdEhhdmVVc2VybmFtZVBhc3N3b3JkUG9ydCgpKXt0aGlzLnBhc3N3b3JkPSIiO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXRoaXMucGFzc3dvcmQrPXVlKHRbcl0saGUpfX0sZ2V0SG9zdDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuaG9zdCx0PXRoaXMucG9ydDtyZXR1cm4gbnVsbD09PWU/IiI6bnVsbD09PXQ/c2UoZSk6c2UoZSkrIjoiK3R9LHNldEhvc3Q6ZnVuY3Rpb24oZSl7dGhpcy5jYW5ub3RCZUFCYXNlVVJMfHx0aGlzLnBhcnNlKGUsT2UpfSxnZXRIb3N0bmFtZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuaG9zdDtyZXR1cm4gbnVsbD09PWU/IiI6c2UoZSl9LHNldEhvc3RuYW1lOmZ1bmN0aW9uKGUpe3RoaXMuY2Fubm90QmVBQmFzZVVSTHx8dGhpcy5wYXJzZShlLEZlKX0sZ2V0UG9ydDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucG9ydDtyZXR1cm4gbnVsbD09PWU/IiI6dyhlKX0sc2V0UG9ydDpmdW5jdGlvbihlKXt0aGlzLmNhbm5vdEhhdmVVc2VybmFtZVBhc3N3b3JkUG9ydCgpfHwoIiI9PShlPXcoZSkpP3RoaXMucG9ydD1udWxsOnRoaXMucGFyc2UoZSxJZSkpfSxnZXRQYXRobmFtZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucGF0aDtyZXR1cm4gdGhpcy5jYW5ub3RCZUFCYXNlVVJMP2VbMF06ZS5sZW5ndGg/Ii8iK0QoZSwiLyIpOiIifSxzZXRQYXRobmFtZTpmdW5jdGlvbihlKXt0aGlzLmNhbm5vdEJlQUJhc2VVUkx8fCh0aGlzLnBhdGg9W10sdGhpcy5wYXJzZShlLFBlKSl9LGdldFNlYXJjaDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucXVlcnk7cmV0dXJuIGU/Ij8iK2U6IiJ9LHNldFNlYXJjaDpmdW5jdGlvbihlKXsiIj09KGU9dyhlKSk/dGhpcy5xdWVyeT1udWxsOigiPyI9PVIoZSwwKSYmKGU9WChlLDEpKSx0aGlzLnF1ZXJ5PSIiLHRoaXMucGFyc2UoZSxEZSkpLHRoaXMuc2VhcmNoUGFyYW1zLnVwZGF0ZSgpfSxnZXRTZWFyY2hQYXJhbXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWFyY2hQYXJhbXMuZmFjYWRlfSxnZXRIYXNoOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5mcmFnbWVudDtyZXR1cm4gZT8iIyIrZToiIn0sc2V0SGFzaDpmdW5jdGlvbihlKXsiIiE9KGU9dyhlKSk/KCIjIj09UihlLDApJiYoZT1YKGUsMSkpLHRoaXMuZnJhZ21lbnQ9IiIsdGhpcy5wYXJzZShlLEJlKSk6dGhpcy5mcmFnbWVudD1udWxsfSx1cGRhdGU6ZnVuY3Rpb24oKXt0aGlzLnF1ZXJ5PXRoaXMuc2VhcmNoUGFyYW1zLnNlcmlhbGl6ZSgpfHxudWxsfX07dmFyIF9lPWZ1bmN0aW9uKGUpe3ZhciB0PWQodGhpcyxqZSkscj14KGFyZ3VtZW50cy5sZW5ndGgsMSk+MT9hcmd1bWVudHNbMV06dm9pZCAwLG49ayh0LG5ldyBMZShlLCExLHIpKTtpfHwodC5ocmVmPW4uc2VyaWFsaXplKCksdC5vcmlnaW49bi5nZXRPcmlnaW4oKSx0LnByb3RvY29sPW4uZ2V0UHJvdG9jb2woKSx0LnVzZXJuYW1lPW4uZ2V0VXNlcm5hbWUoKSx0LnBhc3N3b3JkPW4uZ2V0UGFzc3dvcmQoKSx0Lmhvc3Q9bi5nZXRIb3N0KCksdC5ob3N0bmFtZT1uLmdldEhvc3RuYW1lKCksdC5wb3J0PW4uZ2V0UG9ydCgpLHQucGF0aG5hbWU9bi5nZXRQYXRobmFtZSgpLHQuc2VhcmNoPW4uZ2V0U2VhcmNoKCksdC5zZWFyY2hQYXJhbXM9bi5nZXRTZWFyY2hQYXJhbXMoKSx0Lmhhc2g9bi5nZXRIYXNoKCkpfSxqZT1fZS5wcm90b3R5cGUsVWU9ZnVuY3Rpb24oZSx0KXtyZXR1cm57Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEModGhpcylbZV0oKX0sc2V0OnQmJmZ1bmN0aW9uKGUpe3JldHVybiBDKHRoaXMpW3RdKGUpfSxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMH19O2lmKGkmJih1KGplLCJocmVmIixVZSgic2VyaWFsaXplIiwic2V0SHJlZiIpKSx1KGplLCJvcmlnaW4iLFVlKCJnZXRPcmlnaW4iKSksdShqZSwicHJvdG9jb2wiLFVlKCJnZXRQcm90b2NvbCIsInNldFByb3RvY29sIikpLHUoamUsInVzZXJuYW1lIixVZSgiZ2V0VXNlcm5hbWUiLCJzZXRVc2VybmFtZSIpKSx1KGplLCJwYXNzd29yZCIsVWUoImdldFBhc3N3b3JkIiwic2V0UGFzc3dvcmQiKSksdShqZSwiaG9zdCIsVWUoImdldEhvc3QiLCJzZXRIb3N0IikpLHUoamUsImhvc3RuYW1lIixVZSgiZ2V0SG9zdG5hbWUiLCJzZXRIb3N0bmFtZSIpKSx1KGplLCJwb3J0IixVZSgiZ2V0UG9ydCIsInNldFBvcnQiKSksdShqZSwicGF0aG5hbWUiLFVlKCJnZXRQYXRobmFtZSIsInNldFBhdGhuYW1lIikpLHUoamUsInNlYXJjaCIsVWUoImdldFNlYXJjaCIsInNldFNlYXJjaCIpKSx1KGplLCJzZWFyY2hQYXJhbXMiLFVlKCJnZXRTZWFyY2hQYXJhbXMiKSksdShqZSwiaGFzaCIsVWUoImdldEhhc2giLCJzZXRIYXNoIikpKSxoKGplLCJ0b0pTT04iLChmdW5jdGlvbigpe3JldHVybiBDKHRoaXMpLnNlcmlhbGl6ZSgpfSkse2VudW1lcmFibGU6ITB9KSxoKGplLCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuIEModGhpcykuc2VyaWFsaXplKCl9KSx7ZW51bWVyYWJsZTohMH0pLEkpe3ZhciAkZT1JLmNyZWF0ZU9iamVjdFVSTCxYZT1JLnJldm9rZU9iamVjdFVSTDskZSYmaChfZSwiY3JlYXRlT2JqZWN0VVJMIixjKCRlLEkpKSxYZSYmaChfZSwicmV2b2tlT2JqZWN0VVJMIixjKFhlLEkpKX12KF9lLCJVUkwiKSxhKHtnbG9iYWw6ITAsY29uc3RydWN0b3I6ITAsZm9yY2VkOiFzLHNoYW06IWl9LHtVUkw6X2V9KX0sMjg1OihlLHQscik9PntyKDg3ODkpfX0sdD17fTtmdW5jdGlvbiByKG4pe3ZhciBhPXRbbl07aWYodm9pZCAwIT09YSlyZXR1cm4gYS5leHBvcnRzO3ZhciBpPXRbbl09e2lkOm4sbG9hZGVkOiExLGV4cG9ydHM6e319O3JldHVybiBlW25dLmNhbGwoaS5leHBvcnRzLGksaS5leHBvcnRzLHIpLGkubG9hZGVkPSEwLGkuZXhwb3J0c31yLmFtZE89e30sci5uPWU9Pnt2YXIgdD1lJiZlLl9fZXNNb2R1bGU/KCk9PmUuZGVmYXVsdDooKT0+ZTtyZXR1cm4gci5kKHQse2E6dH0pLHR9LHIuZD0oZSx0KT0+e2Zvcih2YXIgbiBpbiB0KXIubyh0LG4pJiYhci5vKGUsbikmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2VudW1lcmFibGU6ITAsZ2V0OnRbbl19KX0sci5nPWZ1bmN0aW9uKCl7aWYoIm9iamVjdCI9PXR5cGVvZiBnbG9iYWxUaGlzKXJldHVybiBnbG9iYWxUaGlzO3RyeXtyZXR1cm4gdGhpc3x8bmV3IEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCl9Y2F0Y2goZSl7aWYoIm9iamVjdCI9PXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvd319KCksci5obWQ9ZT0+KChlPU9iamVjdC5jcmVhdGUoZSkpLmNoaWxkcmVufHwoZS5jaGlsZHJlbj1bXSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImV4cG9ydHMiLHtlbnVtZXJhYmxlOiEwLHNldDooKT0+e3Rocm93IG5ldyBFcnJvcigiRVMgTW9kdWxlcyBtYXkgbm90IGFzc2lnbiBtb2R1bGUuZXhwb3J0cyBvciBleHBvcnRzLiosIFVzZSBFU00gZXhwb3J0IHN5bnRheCwgaW5zdGVhZDogIitlLmlkKX19KSxlKSxyLm89KGUsdCk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpLHIoNzc1Nyl9KSgpOw==",S="KCgpPT57InVzZSBzdHJpY3QiO3ZhciBfX3dlYnBhY2tfbW9kdWxlc19fPSh7Ii4vcGRmLmpzIjooKG1vZHVsZSxfX3dlYnBhY2tfZXhwb3J0c19fLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiX193ZWJwYWNrX3JlcXVpcmVfXy5yKF9fd2VicGFja19leHBvcnRzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lc19nbG9iYWxfdGhpc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgY29yZS1qcy9tb2R1bGVzL2VzLmdsb2JhbC10aGlzLmpzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmdsb2JhbC10aGlzLmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lc19nbG9iYWxfdGhpc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGNvcmVfanNfbW9kdWxlc19lc19nbG9iYWxfdGhpc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXNfc3RyaW5nX3N0YXJ0c193aXRoX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnN0YXJ0cy13aXRoLmpzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5zdGFydHMtd2l0aC5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXNfc3RyaW5nX3N0YXJ0c193aXRoX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY29yZV9qc19tb2R1bGVzX2VzX3N0cmluZ19zdGFydHNfd2l0aF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMV9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXNfcmVnZXhwX2V4ZWNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuZXhlYy5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuZXhlYy5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXNfcmVnZXhwX2V4ZWNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihjb3JlX2pzX21vZHVsZXNfZXNfcmVnZXhwX2V4ZWNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzJfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzX3N0cmluZ19tYXRjaF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5tYXRjaC5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcubWF0Y2guanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzX3N0cmluZ19tYXRjaF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfM19fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGNvcmVfanNfbW9kdWxlc19lc19zdHJpbmdfbWF0Y2hfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX3dlYl9kb21fY29sbGVjdGlvbnNfaXRlcmF0b3JfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yLmpzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3IuanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX3dlYl9kb21fY29sbGVjdGlvbnNfaXRlcmF0b3JfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzRfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihjb3JlX2pzX21vZHVsZXNfd2ViX2RvbV9jb2xsZWN0aW9uc19pdGVyYXRvcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfd2ViX3VybF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgY29yZS1qcy9tb2R1bGVzL3dlYi51cmwuanMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLnVybC5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfd2ViX3VybF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNV9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGNvcmVfanNfbW9kdWxlc193ZWJfdXJsX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81X18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc193ZWJfdXJsX3NlYXJjaF9wYXJhbXNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy93ZWIudXJsLXNlYXJjaC1wYXJhbXMuanMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLnVybC1zZWFyY2gtcGFyYW1zLmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc193ZWJfdXJsX3NlYXJjaF9wYXJhbXNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzZfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihjb3JlX2pzX21vZHVsZXNfd2ViX3VybF9zZWFyY2hfcGFyYW1zX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82X18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc193ZWJfdXJsX3NlYXJjaF9wYXJhbXNfZGVsZXRlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBjb3JlLWpzL21vZHVsZXMvd2ViLnVybC1zZWFyY2gtcGFyYW1zLmRlbGV0ZS5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIudXJsLXNlYXJjaC1wYXJhbXMuZGVsZXRlLmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc193ZWJfdXJsX3NlYXJjaF9wYXJhbXNfZGVsZXRlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV83X19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY29yZV9qc19tb2R1bGVzX3dlYl91cmxfc2VhcmNoX3BhcmFtc19kZWxldGVfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzdfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX3dlYl91cmxfc2VhcmNoX3BhcmFtc19oYXNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy93ZWIudXJsLXNlYXJjaC1wYXJhbXMuaGFzLmpzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi51cmwtc2VhcmNoLXBhcmFtcy5oYXMuanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX3dlYl91cmxfc2VhcmNoX3BhcmFtc19oYXNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzhfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihjb3JlX2pzX21vZHVsZXNfd2ViX3VybF9zZWFyY2hfcGFyYW1zX2hhc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfOF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfd2ViX3VybF9zZWFyY2hfcGFyYW1zX3NpemVfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy93ZWIudXJsLXNlYXJjaC1wYXJhbXMuc2l6ZS5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIudXJsLXNlYXJjaC1wYXJhbXMuc2l6ZS5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfd2ViX3VybF9zZWFyY2hfcGFyYW1zX3NpemVfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihjb3JlX2pzX21vZHVsZXNfd2ViX3VybF9zZWFyY2hfcGFyYW1zX3NpemVfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzlfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzX3JlZ2V4cF90b19zdHJpbmdfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEwX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBjb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLnRvLXN0cmluZy5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAudG8tc3RyaW5nLmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lc19yZWdleHBfdG9fc3RyaW5nX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGNvcmVfanNfbW9kdWxlc19lc19yZWdleHBfdG9fc3RyaW5nX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXNfYXJyYXlfYnVmZmVyX3NsaWNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LWJ1ZmZlci5zbGljZS5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS1idWZmZXIuc2xpY2UuanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzX2FycmF5X2J1ZmZlcl9zbGljZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTFfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihjb3JlX2pzX21vZHVsZXNfZXNfYXJyYXlfYnVmZmVyX3NsaWNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMV9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXNfdHlwZWRfYXJyYXlfdWludDhfYXJyYXlfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEyX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBjb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkudWludDgtYXJyYXkuanMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkudWludDgtYXJyYXkuanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzX3R5cGVkX2FycmF5X3VpbnQ4X2FycmF5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xMl9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGNvcmVfanNfbW9kdWxlc19lc190eXBlZF9hcnJheV91aW50OF9hcnJheV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTJfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzX3R5cGVkX2FycmF5X2F0X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xM19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LmF0LmpzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LmF0LmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lc190eXBlZF9hcnJheV9hdF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTNfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihjb3JlX2pzX21vZHVsZXNfZXNfdHlwZWRfYXJyYXlfYXRfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzEzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lc190eXBlZF9hcnJheV9maWxsX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LmZpbGwuanMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkuZmlsbC5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXNfdHlwZWRfYXJyYXlfZmlsbF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihjb3JlX2pzX21vZHVsZXNfZXNfdHlwZWRfYXJyYXlfZmlsbF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTRfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzX3R5cGVkX2FycmF5X2ZpbmRfbGFzdF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS5maW5kLWxhc3QuanMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkuZmluZC1sYXN0LmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lc190eXBlZF9hcnJheV9maW5kX2xhc3RfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE1X19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY29yZV9qc19tb2R1bGVzX2VzX3R5cGVkX2FycmF5X2ZpbmRfbGFzdF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTVfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzX3R5cGVkX2FycmF5X2ZpbmRfbGFzdF9pbmRleF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS5maW5kLWxhc3QtaW5kZXguanMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkuZmluZC1sYXN0LWluZGV4LmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lc190eXBlZF9hcnJheV9maW5kX2xhc3RfaW5kZXhfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE2X19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY29yZV9qc19tb2R1bGVzX2VzX3R5cGVkX2FycmF5X2ZpbmRfbGFzdF9pbmRleF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTZfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzX3R5cGVkX2FycmF5X3NldF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS5zZXQuanMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkuc2V0LmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lc190eXBlZF9hcnJheV9zZXRfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE3X19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY29yZV9qc19tb2R1bGVzX2VzX3R5cGVkX2FycmF5X3NldF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTdfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzX3R5cGVkX2FycmF5X3NvcnRfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE4X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBjb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkuc29ydC5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS5zb3J0LmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lc190eXBlZF9hcnJheV9zb3J0X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGNvcmVfanNfbW9kdWxlc19lc190eXBlZF9hcnJheV9zb3J0X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8xOF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXNfdHlwZWRfYXJyYXlfdG9fbG9jYWxlX3N0cmluZ19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMTlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS50by1sb2NhbGUtc3RyaW5nLmpzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LnRvLWxvY2FsZS1zdHJpbmcuanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzX3R5cGVkX2FycmF5X3RvX2xvY2FsZV9zdHJpbmdfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY29yZV9qc19tb2R1bGVzX2VzX3R5cGVkX2FycmF5X3RvX2xvY2FsZV9zdHJpbmdfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzE5X18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lc190eXBlZF9hcnJheV90b19yZXZlcnNlZF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS50by1yZXZlcnNlZC5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS50by1yZXZlcnNlZC5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXNfdHlwZWRfYXJyYXlfdG9fcmV2ZXJzZWRfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIwX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY29yZV9qc19tb2R1bGVzX2VzX3R5cGVkX2FycmF5X3RvX3JldmVyc2VkX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXNfdHlwZWRfYXJyYXlfdG9fc29ydGVkX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LnRvLXNvcnRlZC5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS50by1zb3J0ZWQuanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzX3R5cGVkX2FycmF5X3RvX3NvcnRlZF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjFfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihjb3JlX2pzX21vZHVsZXNfZXNfdHlwZWRfYXJyYXlfdG9fc29ydGVkX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yMV9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXNfdHlwZWRfYXJyYXlfd2l0aF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS53aXRoLmpzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LndpdGguanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzX3R5cGVkX2FycmF5X3dpdGhfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIyX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY29yZV9qc19tb2R1bGVzX2VzX3R5cGVkX2FycmF5X3dpdGhfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIyX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lc19zdHJpbmdfcmVwbGFjZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcucmVwbGFjZS5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcucmVwbGFjZS5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXNfc3RyaW5nX3JlcGxhY2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzIzX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY29yZV9qc19tb2R1bGVzX2VzX3N0cmluZ19yZXBsYWNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yM19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXNfc3RyaW5nX3JlcGxhY2VfYWxsX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5yZXBsYWNlLWFsbC5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcucmVwbGFjZS1hbGwuanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzX3N0cmluZ19yZXBsYWNlX2FsbF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjRfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihjb3JlX2pzX21vZHVsZXNfZXNfc3RyaW5nX3JlcGxhY2VfYWxsX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXNfYXJyYXlfcHVzaF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzX2FycmF5X3B1c2hfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI1X19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY29yZV9qc19tb2R1bGVzX2VzX2FycmF5X3B1c2hfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI1X18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lc19lcnJvcl9jYXVzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXNfZXJyb3JfY2F1c2VfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI2X19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY29yZV9qc19tb2R1bGVzX2VzX2Vycm9yX2NhdXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yNl9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXNfdHlwZWRfYXJyYXlfdWludDMyX2FycmF5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yN19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LnVpbnQzMi1hcnJheS5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS51aW50MzItYXJyYXkuanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzX3R5cGVkX2FycmF5X3VpbnQzMl9hcnJheV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjdfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihjb3JlX2pzX21vZHVsZXNfZXNfdHlwZWRfYXJyYXlfdWludDMyX2FycmF5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yN19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXNfYXJyYXlfaW5jbHVkZXNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI4X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaW5jbHVkZXMuanMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaW5jbHVkZXMuanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzX2FycmF5X2luY2x1ZGVzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8yOF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGNvcmVfanNfbW9kdWxlc19lc19hcnJheV9pbmNsdWRlc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjhfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzX3N0cmluZ19pbmNsdWRlc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuaW5jbHVkZXMuanMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLmluY2x1ZGVzLmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lc19zdHJpbmdfaW5jbHVkZXNfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzI5X19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY29yZV9qc19tb2R1bGVzX2VzX3N0cmluZ19pbmNsdWRlc19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMjlfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzX3dlYWtfbWFwX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zMF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgY29yZS1qcy9tb2R1bGVzL2VzLndlYWstbWFwLmpzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLndlYWstbWFwLmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lc193ZWFrX21hcF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihjb3JlX2pzX21vZHVsZXNfZXNfd2Vha19tYXBfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzMwX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lc19wcm9taXNlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zMV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgY29yZS1qcy9tb2R1bGVzL2VzLnByb21pc2UuanMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucHJvbWlzZS5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXNfcHJvbWlzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzFfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihjb3JlX2pzX21vZHVsZXNfZXNfcHJvbWlzZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzFfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX3dlYl9zZWxmX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zMl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgY29yZS1qcy9tb2R1bGVzL3dlYi5zZWxmLmpzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5zZWxmLmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc193ZWJfc2VsZl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzJfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihjb3JlX2pzX21vZHVsZXNfd2ViX3NlbGZfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzMyX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lc19zdHJpbmdfc3BsaXRfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzMzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnNwbGl0LmpzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5zcGxpdC5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXNfc3RyaW5nX3NwbGl0X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zM19fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGNvcmVfanNfbW9kdWxlc19lc19zdHJpbmdfc3BsaXRfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzMzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lc19zeW1ib2xfZGVzY3JpcHRpb25fanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBjb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmRlc2NyaXB0aW9uLmpzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5kZXNjcmlwdGlvbi5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXNfc3ltYm9sX2Rlc2NyaXB0aW9uX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zNF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGNvcmVfanNfbW9kdWxlc19lc19zeW1ib2xfZGVzY3JpcHRpb25fanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM0X18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lc19vYmplY3RfaGFzX293bl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuaGFzLW93bi5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuaGFzLW93bi5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXNfb2JqZWN0X2hhc19vd25fanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM1X19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY29yZV9qc19tb2R1bGVzX2VzX29iamVjdF9oYXNfb3duX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zNV9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXNfcmVnZXhwX3Rlc3RfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM2X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBjb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLnRlc3QuanMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLnRlc3QuanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzX3JlZ2V4cF90ZXN0X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV8zNl9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGNvcmVfanNfbW9kdWxlc19lc19yZWdleHBfdGVzdF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzZfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzX3JlZmxlY3RfdG9fc3RyaW5nX3RhZ19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy9lcy5yZWZsZWN0LnRvLXN0cmluZy10YWcuanMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVmbGVjdC50by1zdHJpbmctdGFnLmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lc19yZWZsZWN0X3RvX3N0cmluZ190YWdfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM3X19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY29yZV9qc19tb2R1bGVzX2VzX3JlZmxlY3RfdG9fc3RyaW5nX3RhZ19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzdfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzX2FycmF5X2ZpbmRfbGFzdF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzhfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5maW5kLWxhc3QuanMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmluZC1sYXN0LmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lc19hcnJheV9maW5kX2xhc3RfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM4X19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY29yZV9qc19tb2R1bGVzX2VzX2FycmF5X2ZpbmRfbGFzdF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzhfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzX2FycmF5X2J1ZmZlcl9jb25zdHJ1Y3Rvcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS1idWZmZXIuY29uc3RydWN0b3IuanMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXktYnVmZmVyLmNvbnN0cnVjdG9yLmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lc19hcnJheV9idWZmZXJfY29uc3RydWN0b3JfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzM5X19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY29yZV9qc19tb2R1bGVzX2VzX2FycmF5X2J1ZmZlcl9jb25zdHJ1Y3Rvcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfMzlfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzX2FycmF5X2ZpbmRfbGFzdF9pbmRleF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNDBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5maW5kLWxhc3QtaW5kZXguanMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmluZC1sYXN0LWluZGV4LmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lc19hcnJheV9maW5kX2xhc3RfaW5kZXhfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzQwX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY29yZV9qc19tb2R1bGVzX2VzX2FycmF5X2ZpbmRfbGFzdF9pbmRleF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNDBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzX3R5cGVkX2FycmF5X3VpbnQ4X2NsYW1wZWRfYXJyYXlfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzQxX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBjb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkudWludDgtY2xhbXBlZC1hcnJheS5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS51aW50OC1jbGFtcGVkLWFycmF5LmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lc190eXBlZF9hcnJheV91aW50OF9jbGFtcGVkX2FycmF5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80MV9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGNvcmVfanNfbW9kdWxlc19lc190eXBlZF9hcnJheV91aW50OF9jbGFtcGVkX2FycmF5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80MV9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXNfYXJyYXlfc29ydF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNDJfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5zb3J0LmpzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnNvcnQuanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzX2FycmF5X3NvcnRfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzQyX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY29yZV9qc19tb2R1bGVzX2VzX2FycmF5X3NvcnRfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzQyX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lc19hcnJheV93aXRoX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80M19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LndpdGguanMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkud2l0aC5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXNfYXJyYXlfd2l0aF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNDNfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihjb3JlX2pzX21vZHVsZXNfZXNfYXJyYXlfd2l0aF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNDNfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzX3R5cGVkX2FycmF5X2ludDhfYXJyYXlfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzQ0X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBjb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkuaW50OC1hcnJheS5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS5pbnQ4LWFycmF5LmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lc190eXBlZF9hcnJheV9pbnQ4X2FycmF5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80NF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGNvcmVfanNfbW9kdWxlc19lc190eXBlZF9hcnJheV9pbnQ4X2FycmF5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80NF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXNfb2JqZWN0X2Fzc2lnbl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNDVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuYXNzaWduLmpzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5hc3NpZ24uanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzX29iamVjdF9hc3NpZ25fanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzQ1X19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY29yZV9qc19tb2R1bGVzX2VzX29iamVjdF9hc3NpZ25fanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzQ1X18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc193ZWJfZG9tX2V4Y2VwdGlvbl9jb25zdHJ1Y3Rvcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNDZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWV4Y2VwdGlvbi5jb25zdHJ1Y3Rvci5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWV4Y2VwdGlvbi5jb25zdHJ1Y3Rvci5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfd2ViX2RvbV9leGNlcHRpb25fY29uc3RydWN0b3JfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzQ2X19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY29yZV9qc19tb2R1bGVzX3dlYl9kb21fZXhjZXB0aW9uX2NvbnN0cnVjdG9yX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80Nl9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfd2ViX2RvbV9leGNlcHRpb25fc3RhY2tfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzQ3X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBjb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1leGNlcHRpb24uc3RhY2suanMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1leGNlcHRpb24uc3RhY2suanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX3dlYl9kb21fZXhjZXB0aW9uX3N0YWNrX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80N19fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGNvcmVfanNfbW9kdWxlc193ZWJfZG9tX2V4Y2VwdGlvbl9zdGFja19qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNDdfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX3dlYl9kb21fZXhjZXB0aW9uX3RvX3N0cmluZ190YWdfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzQ4X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBjb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1leGNlcHRpb24udG8tc3RyaW5nLXRhZy5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWV4Y2VwdGlvbi50by1zdHJpbmctdGFnLmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc193ZWJfZG9tX2V4Y2VwdGlvbl90b19zdHJpbmdfdGFnX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80OF9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGNvcmVfanNfbW9kdWxlc193ZWJfZG9tX2V4Y2VwdGlvbl90b19zdHJpbmdfdGFnX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80OF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfd2ViX3N0cnVjdHVyZWRfY2xvbmVfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzQ5X18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBjb3JlLWpzL21vZHVsZXMvd2ViLnN0cnVjdHVyZWQtY2xvbmUuanMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLnN0cnVjdHVyZWQtY2xvbmUuanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX3dlYl9zdHJ1Y3R1cmVkX2Nsb25lX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV80OV9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGNvcmVfanNfbW9kdWxlc193ZWJfc3RydWN0dXJlZF9jbG9uZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNDlfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzX3Byb21pc2VfZmluYWxseV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNTBfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy9lcy5wcm9taXNlLmZpbmFsbHkuanMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucHJvbWlzZS5maW5hbGx5LmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lc19wcm9taXNlX2ZpbmFsbHlfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzUwX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY29yZV9qc19tb2R1bGVzX2VzX3Byb21pc2VfZmluYWxseV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNTBfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzX3JlZ2V4cF9jb25zdHJ1Y3Rvcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNTFfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuY29uc3RydWN0b3IuanMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmNvbnN0cnVjdG9yLmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lc19yZWdleHBfY29uc3RydWN0b3JfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzUxX19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY29yZV9qc19tb2R1bGVzX2VzX3JlZ2V4cF9jb25zdHJ1Y3Rvcl9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNTFfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzX3JlZ2V4cF9kb3RfYWxsX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81Ml9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5kb3QtYWxsLmpzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5kb3QtYWxsLmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lc19yZWdleHBfZG90X2FsbF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNTJfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihjb3JlX2pzX21vZHVsZXNfZXNfcmVnZXhwX2RvdF9hbGxfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzUyX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lc19yZWdleHBfZmxhZ3NfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzUzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBjb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmZsYWdzLmpzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5mbGFncy5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXNfcmVnZXhwX2ZsYWdzX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81M19fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGNvcmVfanNfbW9kdWxlc19lc19yZWdleHBfZmxhZ3NfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzUzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lc19qc29uX3N0cmluZ2lmeV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNTRfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeS5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeS5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXNfanNvbl9zdHJpbmdpZnlfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzU0X19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY29yZV9qc19tb2R1bGVzX2VzX2pzb25fc3RyaW5naWZ5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81NF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXNfbnVtYmVyX3RvX2ZpeGVkX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81NV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgY29yZS1qcy9tb2R1bGVzL2VzLm51bWJlci50by1maXhlZC5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5udW1iZXIudG8tZml4ZWQuanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzX251bWJlcl90b19maXhlZF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNTVfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihjb3JlX2pzX21vZHVsZXNfZXNfbnVtYmVyX3RvX2ZpeGVkX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81NV9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXNfc3RyaW5nX2VuZHNfd2l0aF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNTZfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuZW5kcy13aXRoLmpzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5lbmRzLXdpdGguanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzX3N0cmluZ19lbmRzX3dpdGhfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzU2X19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY29yZV9qc19tb2R1bGVzX2VzX3N0cmluZ19lbmRzX3dpdGhfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzU2X18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lc19wYXJzZV9mbG9hdF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNTdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy9lcy5wYXJzZS1mbG9hdC5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5wYXJzZS1mbG9hdC5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXNfcGFyc2VfZmxvYXRfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzU3X19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY29yZV9qc19tb2R1bGVzX2VzX3BhcnNlX2Zsb2F0X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81N19fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXNfbWF0aF9oeXBvdF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNThfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy9lcy5tYXRoLmh5cG90LmpzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm1hdGguaHlwb3QuanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzX21hdGhfaHlwb3RfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzU4X19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY29yZV9qc19tb2R1bGVzX2VzX21hdGhfaHlwb3RfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzU4X18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lc19hcnJheV9hdF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNTlfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5hdC5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5hdC5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXNfYXJyYXlfYXRfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzU5X19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY29yZV9qc19tb2R1bGVzX2VzX2FycmF5X2F0X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV81OV9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXNfc3RyaW5nX2F0X2FsdGVybmF0aXZlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82MF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5hdC1hbHRlcm5hdGl2ZS5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuYXQtYWx0ZXJuYXRpdmUuanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzX3N0cmluZ19hdF9hbHRlcm5hdGl2ZV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNjBfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihjb3JlX2pzX21vZHVsZXNfZXNfc3RyaW5nX2F0X2FsdGVybmF0aXZlX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82MF9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXNfcGFyc2VfaW50X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82MV9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgY29yZS1qcy9tb2R1bGVzL2VzLnBhcnNlLWludC5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5wYXJzZS1pbnQuanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzX3BhcnNlX2ludF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNjFfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihjb3JlX2pzX21vZHVsZXNfZXNfcGFyc2VfaW50X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82MV9fKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXNfc3RyaW5nX3RyaW1fanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzYyX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISBjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnRyaW0uanMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnRyaW0uanNcIik7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzX3N0cmluZ190cmltX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82Ml9fX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX193ZWJwYWNrX3JlcXVpcmVfXy5uKGNvcmVfanNfbW9kdWxlc19lc19zdHJpbmdfdHJpbV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNjJfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzX3R5cGVkX2FycmF5X2ludDMyX2FycmF5X2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82M19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LmludDMyLWFycmF5LmpzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LmludDMyLWFycmF5LmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lc190eXBlZF9hcnJheV9pbnQzMl9hcnJheV9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNjNfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihjb3JlX2pzX21vZHVsZXNfZXNfdHlwZWRfYXJyYXlfaW50MzJfYXJyYXlfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzYzX18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lc19wcm9taXNlX2FsbF9zZXR0bGVkX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82NF9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgY29yZS1qcy9tb2R1bGVzL2VzLnByb21pc2UuYWxsLXNldHRsZWQuanMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucHJvbWlzZS5hbGwtc2V0dGxlZC5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXNfcHJvbWlzZV9hbGxfc2V0dGxlZF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNjRfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihjb3JlX2pzX21vZHVsZXNfZXNfcHJvbWlzZV9hbGxfc2V0dGxlZF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNjRfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzX3N0cmluZ190cmltX2VuZF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNjVfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcudHJpbS1lbmQuanMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnRyaW0tZW5kLmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lc19zdHJpbmdfdHJpbV9lbmRfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzY1X19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY29yZV9qc19tb2R1bGVzX2VzX3N0cmluZ190cmltX2VuZF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNjVfXyk7XG4vKiBoYXJtb255IGltcG9ydCAqLyB2YXIgY29yZV9qc19tb2R1bGVzX2VzX2FycmF5X2ZsYXRfbWFwX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82Nl9fID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZsYXQtbWFwLmpzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZsYXQtbWFwLmpzXCIpO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lc19hcnJheV9mbGF0X21hcF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNjZfX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19fd2VicGFja19yZXF1aXJlX18ubihjb3JlX2pzX21vZHVsZXNfZXNfYXJyYXlfZmxhdF9tYXBfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzY2X18pO1xuLyogaGFybW9ueSBpbXBvcnQgKi8gdmFyIGNvcmVfanNfbW9kdWxlc19lc19hcnJheV91bnNjb3BhYmxlc19mbGF0X21hcF9qc19fV0VCUEFDS19JTVBPUlRFRF9NT0RVTEVfNjdfXyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIGNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS51bnNjb3BhYmxlcy5mbGF0LW1hcC5qcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS51bnNjb3BhYmxlcy5mbGF0LW1hcC5qc1wiKTtcbi8qIGhhcm1vbnkgaW1wb3J0ICovIHZhciBjb3JlX2pzX21vZHVsZXNfZXNfYXJyYXlfdW5zY29wYWJsZXNfZmxhdF9tYXBfanNfX1dFQlBBQ0tfSU1QT1JURURfTU9EVUxFXzY3X19fZGVmYXVsdCA9IC8qI19fUFVSRV9fKi9fX3dlYnBhY2tfcmVxdWlyZV9fLm4oY29yZV9qc19tb2R1bGVzX2VzX2FycmF5X3Vuc2NvcGFibGVzX2ZsYXRfbWFwX2pzX19XRUJQQUNLX0lNUE9SVEVEX01PRFVMRV82N19fKTtcbi8qIG1vZHVsZSBkZWNvcmF0b3IgKi8gbW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXy5obWQobW9kdWxlKTtcbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZERlc3RydWN0dXJlU2V0KHJlY2VpdmVyLCBwcml2YXRlTWFwKSB7IHZhciBkZXNjcmlwdG9yID0gX2NsYXNzRXh0cmFjdEZpZWxkRGVzY3JpcHRvcihyZWNlaXZlciwgcHJpdmF0ZU1hcCwgXCJzZXRcIik7IHJldHVybiBfY2xhc3NBcHBseURlc2NyaXB0b3JEZXN0cnVjdHVyZVNldChyZWNlaXZlciwgZGVzY3JpcHRvcik7IH1cbmZ1bmN0aW9uIF9jbGFzc0FwcGx5RGVzY3JpcHRvckRlc3RydWN0dXJlU2V0KHJlY2VpdmVyLCBkZXNjcmlwdG9yKSB7IGlmIChkZXNjcmlwdG9yLnNldCkgeyBpZiAoIShcIl9fZGVzdHJPYmpcIiBpbiBkZXNjcmlwdG9yKSkgeyBkZXNjcmlwdG9yLl9fZGVzdHJPYmogPSB7IHNldCB2YWx1ZSh2KSB7IGRlc2NyaXB0b3Iuc2V0LmNhbGwocmVjZWl2ZXIsIHYpOyB9IH07IH0gcmV0dXJuIGRlc2NyaXB0b3IuX19kZXN0ck9iajsgfSBlbHNlIHsgaWYgKCFkZXNjcmlwdG9yLndyaXRhYmxlKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkXCIpOyB9IHJldHVybiBkZXNjcmlwdG9yOyB9IH1cbmZ1bmN0aW9uIF9jbGFzc1N0YXRpY1ByaXZhdGVNZXRob2RHZXQocmVjZWl2ZXIsIGNsYXNzQ29uc3RydWN0b3IsIG1ldGhvZCkgeyBfY2xhc3NDaGVja1ByaXZhdGVTdGF0aWNBY2Nlc3MocmVjZWl2ZXIsIGNsYXNzQ29uc3RydWN0b3IpOyByZXR1cm4gbWV0aG9kOyB9XG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgZW51bWVyYWJsZU9ubHkgJiYgKHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KSksIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IG51bGwgIT0gYXJndW1lbnRzW2ldID8gYXJndW1lbnRzW2ldIDoge307IGkgJSAyID8gb3duS2V5cyhPYmplY3Qoc291cmNlKSwgITApLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSkgOiBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IHJldHVybiB0YXJnZXQ7IH1cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsga2V5ID0gX3RvUHJvcGVydHlLZXkoa2V5KTsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5mdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleShhcmcpIHsgdmFyIGtleSA9IF90b1ByaW1pdGl2ZShhcmcsIFwic3RyaW5nXCIpOyByZXR1cm4gdHlwZW9mIGtleSA9PT0gXCJzeW1ib2xcIiA/IGtleSA6IFN0cmluZyhrZXkpOyB9XG5mdW5jdGlvbiBfdG9QcmltaXRpdmUoaW5wdXQsIGhpbnQpIHsgaWYgKHR5cGVvZiBpbnB1dCAhPT0gXCJvYmplY3RcIiB8fCBpbnB1dCA9PT0gbnVsbCkgcmV0dXJuIGlucHV0OyB2YXIgcHJpbSA9IGlucHV0W1N5bWJvbC50b1ByaW1pdGl2ZV07IGlmIChwcmltICE9PSB1bmRlZmluZWQpIHsgdmFyIHJlcyA9IHByaW0uY2FsbChpbnB1dCwgaGludCB8fCBcImRlZmF1bHRcIik7IGlmICh0eXBlb2YgcmVzICE9PSBcIm9iamVjdFwiKSByZXR1cm4gcmVzOyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7IH0gcmV0dXJuIChoaW50ID09PSBcInN0cmluZ1wiID8gU3RyaW5nIDogTnVtYmVyKShpbnB1dCk7IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyhvYmosIHByaXZhdGVTZXQpIHsgX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlU2V0KTsgcHJpdmF0ZVNldC5hZGQob2JqKTsgfVxuZnVuY3Rpb24gX2NsYXNzUHJpdmF0ZU1ldGhvZEdldChyZWNlaXZlciwgcHJpdmF0ZVNldCwgZm4pIHsgaWYgKCFwcml2YXRlU2V0LmhhcyhyZWNlaXZlcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2VcIik7IH0gcmV0dXJuIGZuOyB9XG5mdW5jdGlvbiBfY2xhc3NTdGF0aWNQcml2YXRlRmllbGRTcGVjU2V0KHJlY2VpdmVyLCBjbGFzc0NvbnN0cnVjdG9yLCBkZXNjcmlwdG9yLCB2YWx1ZSkgeyBfY2xhc3NDaGVja1ByaXZhdGVTdGF0aWNBY2Nlc3MocmVjZWl2ZXIsIGNsYXNzQ29uc3RydWN0b3IpOyBfY2xhc3NDaGVja1ByaXZhdGVTdGF0aWNGaWVsZERlc2NyaXB0b3IoZGVzY3JpcHRvciwgXCJzZXRcIik7IF9jbGFzc0FwcGx5RGVzY3JpcHRvclNldChyZWNlaXZlciwgZGVzY3JpcHRvciwgdmFsdWUpOyByZXR1cm4gdmFsdWU7IH1cbmZ1bmN0aW9uIF9jbGFzc1N0YXRpY1ByaXZhdGVGaWVsZFNwZWNHZXQocmVjZWl2ZXIsIGNsYXNzQ29uc3RydWN0b3IsIGRlc2NyaXB0b3IpIHsgX2NsYXNzQ2hlY2tQcml2YXRlU3RhdGljQWNjZXNzKHJlY2VpdmVyLCBjbGFzc0NvbnN0cnVjdG9yKTsgX2NsYXNzQ2hlY2tQcml2YXRlU3RhdGljRmllbGREZXNjcmlwdG9yKGRlc2NyaXB0b3IsIFwiZ2V0XCIpOyByZXR1cm4gX2NsYXNzQXBwbHlEZXNjcmlwdG9yR2V0KHJlY2VpdmVyLCBkZXNjcmlwdG9yKTsgfVxuZnVuY3Rpb24gX2NsYXNzQ2hlY2tQcml2YXRlU3RhdGljRmllbGREZXNjcmlwdG9yKGRlc2NyaXB0b3IsIGFjdGlvbikgeyBpZiAoZGVzY3JpcHRvciA9PT0gdW5kZWZpbmVkKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJhdHRlbXB0ZWQgdG8gXCIgKyBhY3Rpb24gKyBcIiBwcml2YXRlIHN0YXRpYyBmaWVsZCBiZWZvcmUgaXRzIGRlY2xhcmF0aW9uXCIpOyB9IH1cbmZ1bmN0aW9uIF9jbGFzc0NoZWNrUHJpdmF0ZVN0YXRpY0FjY2VzcyhyZWNlaXZlciwgY2xhc3NDb25zdHJ1Y3RvcikgeyBpZiAocmVjZWl2ZXIgIT09IGNsYXNzQ29uc3RydWN0b3IpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgc3RhdGljIGFjY2VzcyBvZiB3cm9uZyBwcm92ZW5hbmNlXCIpOyB9IH1cbmZ1bmN0aW9uIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKG9iaiwgcHJpdmF0ZU1hcCwgdmFsdWUpIHsgX2NoZWNrUHJpdmF0ZVJlZGVjbGFyYXRpb24ob2JqLCBwcml2YXRlTWFwKTsgcHJpdmF0ZU1hcC5zZXQob2JqLCB2YWx1ZSk7IH1cbmZ1bmN0aW9uIF9jaGVja1ByaXZhdGVSZWRlY2xhcmF0aW9uKG9iaiwgcHJpdmF0ZUNvbGxlY3Rpb24pIHsgaWYgKHByaXZhdGVDb2xsZWN0aW9uLmhhcyhvYmopKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdFwiKTsgfSB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHByaXZhdGVNYXApIHsgdmFyIGRlc2NyaXB0b3IgPSBfY2xhc3NFeHRyYWN0RmllbGREZXNjcmlwdG9yKHJlY2VpdmVyLCBwcml2YXRlTWFwLCBcImdldFwiKTsgcmV0dXJuIF9jbGFzc0FwcGx5RGVzY3JpcHRvckdldChyZWNlaXZlciwgZGVzY3JpcHRvcik7IH1cbmZ1bmN0aW9uIF9jbGFzc0FwcGx5RGVzY3JpcHRvckdldChyZWNlaXZlciwgZGVzY3JpcHRvcikgeyBpZiAoZGVzY3JpcHRvci5nZXQpIHsgcmV0dXJuIGRlc2NyaXB0b3IuZ2V0LmNhbGwocmVjZWl2ZXIpOyB9IHJldHVybiBkZXNjcmlwdG9yLnZhbHVlOyB9XG5mdW5jdGlvbiBfY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHByaXZhdGVNYXAsIHZhbHVlKSB7IHZhciBkZXNjcmlwdG9yID0gX2NsYXNzRXh0cmFjdEZpZWxkRGVzY3JpcHRvcihyZWNlaXZlciwgcHJpdmF0ZU1hcCwgXCJzZXRcIik7IF9jbGFzc0FwcGx5RGVzY3JpcHRvclNldChyZWNlaXZlciwgZGVzY3JpcHRvciwgdmFsdWUpOyByZXR1cm4gdmFsdWU7IH1cbmZ1bmN0aW9uIF9jbGFzc0V4dHJhY3RGaWVsZERlc2NyaXB0b3IocmVjZWl2ZXIsIHByaXZhdGVNYXAsIGFjdGlvbikgeyBpZiAoIXByaXZhdGVNYXAuaGFzKHJlY2VpdmVyKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXR0ZW1wdGVkIHRvIFwiICsgYWN0aW9uICsgXCIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2VcIik7IH0gcmV0dXJuIHByaXZhdGVNYXAuZ2V0KHJlY2VpdmVyKTsgfVxuZnVuY3Rpb24gX2NsYXNzQXBwbHlEZXNjcmlwdG9yU2V0KHJlY2VpdmVyLCBkZXNjcmlwdG9yLCB2YWx1ZSkgeyBpZiAoZGVzY3JpcHRvci5zZXQpIHsgZGVzY3JpcHRvci5zZXQuY2FsbChyZWNlaXZlciwgdmFsdWUpOyB9IGVsc2UgeyBpZiAoIWRlc2NyaXB0b3Iud3JpdGFibGUpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGRcIik7IH0gZGVzY3JpcHRvci52YWx1ZSA9IHZhbHVlOyB9IH1cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4hZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24odCwgZSkge1xuICBcIm9iamVjdFwiID09IHR5cGVvZiBleHBvcnRzICYmIFwib2JqZWN0XCIgPT0gXCJvYmplY3RcIiA/IG1vZHVsZS5leHBvcnRzID0gZSgpIDogXCJmdW5jdGlvblwiID09IHR5cGVvZiBkZWZpbmUgJiYgX193ZWJwYWNrX3JlcXVpcmVfXy5hbWRPID8gZGVmaW5lKFwicGRmanMtZGlzdC9idWlsZC9wZGZcIiwgW10sIGUpIDogXCJvYmplY3RcIiA9PSB0eXBlb2YgZXhwb3J0cyA/IGV4cG9ydHNbXCJwZGZqcy1kaXN0L2J1aWxkL3BkZlwiXSA9IGUoKSA6IHRbXCJwZGZqcy1kaXN0L2J1aWxkL3BkZlwiXSA9IHQucGRmanNMaWIgPSBlKCk7XG59KGdsb2JhbFRoaXMsICgpID0+ICgoKSA9PiB7XG4gIHZhciBfX3dlYnBhY2tfbW9kdWxlc19fID0gWywgKHQsIGUsIG4pID0+IHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgICB2YXIgX3Q7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgdmFsdWU6ICEwXG4gICAgICB9KTtcbiAgICAgIGUuVmVyYm9zaXR5TGV2ZWwgPSBlLlV0aWwgPSBlLlVua25vd25FcnJvckV4Y2VwdGlvbiA9IGUuVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uID0gZS5UZXh0UmVuZGVyaW5nTW9kZSA9IGUuUmVuZGVyaW5nSW50ZW50RmxhZyA9IGUuUHJvbWlzZUNhcGFiaWxpdHkgPSBlLlBlcm1pc3Npb25GbGFnID0gZS5QYXNzd29yZFJlc3BvbnNlcyA9IGUuUGFzc3dvcmRFeGNlcHRpb24gPSBlLlBhZ2VBY3Rpb25FdmVudFR5cGUgPSBlLk9QUyA9IGUuTWlzc2luZ1BERkV4Y2VwdGlvbiA9IGUuTUFYX0lNQUdFX1NJWkVfVE9fQ0FDSEUgPSBlLkxJTkVfRkFDVE9SID0gZS5MSU5FX0RFU0NFTlRfRkFDVE9SID0gZS5JbnZhbGlkUERGRXhjZXB0aW9uID0gZS5JbWFnZUtpbmQgPSBlLklERU5USVRZX01BVFJJWCA9IGUuRm9ybWF0RXJyb3IgPSBlLkZlYXR1cmVUZXN0ID0gZS5GT05UX0lERU5USVRZX01BVFJJWCA9IGUuRG9jdW1lbnRBY3Rpb25FdmVudFR5cGUgPSBlLkNNYXBDb21wcmVzc2lvblR5cGUgPSBlLkJhc2VFeGNlcHRpb24gPSBlLkJBU0VMSU5FX0ZBQ1RPUiA9IGUuQW5ub3RhdGlvblR5cGUgPSBlLkFubm90YXRpb25SZXBseVR5cGUgPSBlLkFubm90YXRpb25Nb2RlID0gZS5Bbm5vdGF0aW9uRmxhZyA9IGUuQW5ub3RhdGlvbkZpZWxkRmxhZyA9IGUuQW5ub3RhdGlvbkVkaXRvclR5cGUgPSBlLkFubm90YXRpb25FZGl0b3JQcmVmaXggPSBlLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlID0gZS5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlID0gZS5Bbm5vdGF0aW9uQWN0aW9uRXZlbnRUeXBlID0gZS5BYm9ydEV4Y2VwdGlvbiA9IHZvaWQgMDtcbiAgICAgIGUuYXNzZXJ0ID0gZnVuY3Rpb24gYXNzZXJ0KHQsIGUpIHtcbiAgICAgICAgdCB8fCB1bnJlYWNoYWJsZShlKTtcbiAgICAgIH07XG4gICAgICBlLmJ5dGVzVG9TdHJpbmcgPSBieXRlc1RvU3RyaW5nO1xuICAgICAgZS5jcmVhdGVWYWxpZEFic29sdXRlVXJsID0gZnVuY3Rpb24gY3JlYXRlVmFsaWRBYnNvbHV0ZVVybCh0KSB7XG4gICAgICAgIGxldCBlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMV0gPyBhcmd1bWVudHNbMV0gOiBudWxsLFxuICAgICAgICAgIG4gPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1syXSA/IGFyZ3VtZW50c1syXSA6IG51bGw7XG4gICAgICAgIGlmICghdCkgcmV0dXJuIG51bGw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKG4gJiYgXCJzdHJpbmdcIiA9PSB0eXBlb2YgdCkge1xuICAgICAgICAgICAgaWYgKG4uYWRkRGVmYXVsdFByb3RvY29sICYmIHQuc3RhcnRzV2l0aChcInd3dy5cIikpIHtcbiAgICAgICAgICAgICAgY29uc3QgZSA9IHQubWF0Y2goL1xcLi9nKTtcbiAgICAgICAgICAgICAgKGUgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5sZW5ndGgpID49IDIgJiYgKHQgPSBcImh0dHA6Ly9cIi5jb25jYXQodCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG4udHJ5Q29udmVydEVuY29kaW5nKSB0cnkge1xuICAgICAgICAgICAgICB0ID0gc3RyaW5nVG9VVEY4U3RyaW5nKHQpO1xuICAgICAgICAgICAgfSBjYXRjaCAoX3VudXNlZCkge31cbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgaSA9IGUgPyBuZXcgVVJMKHQsIGUpIDogbmV3IFVSTCh0KTtcbiAgICAgICAgICBpZiAoZnVuY3Rpb24gX2lzVmFsaWRQcm90b2NvbCh0KSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHQgPT09IG51bGwgfHwgdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogdC5wcm90b2NvbCkge1xuICAgICAgICAgICAgICBjYXNlIFwiaHR0cDpcIjpcbiAgICAgICAgICAgICAgY2FzZSBcImh0dHBzOlwiOlxuICAgICAgICAgICAgICBjYXNlIFwiZnRwOlwiOlxuICAgICAgICAgICAgICBjYXNlIFwibWFpbHRvOlwiOlxuICAgICAgICAgICAgICBjYXNlIFwidGVsOlwiOlxuICAgICAgICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfShpKSkgcmV0dXJuIGk7XG4gICAgICAgIH0gY2F0Y2ggKF91bnVzZWQyKSB7fVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH07XG4gICAgICBlLmdldE1vZGlmaWNhdGlvbkRhdGUgPSBmdW5jdGlvbiBnZXRNb2RpZmljYXRpb25EYXRlKCkge1xuICAgICAgICBsZXQgdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzBdID8gYXJndW1lbnRzWzBdIDogbmV3IERhdGUoKTtcbiAgICAgICAgcmV0dXJuIFt0LmdldFVUQ0Z1bGxZZWFyKCkudG9TdHJpbmcoKSwgKHQuZ2V0VVRDTW9udGgoKSArIDEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgXCIwXCIpLCB0LmdldFVUQ0RhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKSwgdC5nZXRVVENIb3VycygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgXCIwXCIpLCB0LmdldFVUQ01pbnV0ZXMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsIFwiMFwiKSwgdC5nZXRVVENTZWNvbmRzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCBcIjBcIildLmpvaW4oXCJcIik7XG4gICAgICB9O1xuICAgICAgZS5nZXRVdWlkID0gZnVuY3Rpb24gZ2V0VXVpZCgpIHtcbiAgICAgICAgdmFyIF9jcnlwdG8sIF9jcnlwdG8yO1xuICAgICAgICBpZiAoXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgY3J5cHRvICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgKChfY3J5cHRvID0gY3J5cHRvKSA9PT0gbnVsbCB8fCBfY3J5cHRvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfY3J5cHRvLnJhbmRvbVVVSUQpKSByZXR1cm4gY3J5cHRvLnJhbmRvbVVVSUQoKTtcbiAgICAgICAgY29uc3QgdCA9IG5ldyBVaW50OEFycmF5KDMyKTtcbiAgICAgICAgaWYgKFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIGNyeXB0byAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mICgoX2NyeXB0bzIgPSBjcnlwdG8pID09PSBudWxsIHx8IF9jcnlwdG8yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfY3J5cHRvMi5nZXRSYW5kb21WYWx1ZXMpKSBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKHQpO2Vsc2UgZm9yIChsZXQgZSA9IDA7IGUgPCAzMjsgZSsrKSB0W2VdID0gTWF0aC5mbG9vcigyNTUgKiBNYXRoLnJhbmRvbSgpKTtcbiAgICAgICAgcmV0dXJuIGJ5dGVzVG9TdHJpbmcodCk7XG4gICAgICB9O1xuICAgICAgZS5nZXRWZXJib3NpdHlMZXZlbCA9IGZ1bmN0aW9uIGdldFZlcmJvc2l0eUxldmVsKCkge1xuICAgICAgICByZXR1cm4gcztcbiAgICAgIH07XG4gICAgICBlLmluZm8gPSBmdW5jdGlvbiBpbmZvKHQpIHtcbiAgICAgICAgcyA+PSByLklORk9TICYmIGNvbnNvbGUubG9nKFwiSW5mbzogXCIuY29uY2F0KHQpKTtcbiAgICAgIH07XG4gICAgICBlLmlzQXJyYXlCdWZmZXIgPSBmdW5jdGlvbiBpc0FycmF5QnVmZmVyKHQpIHtcbiAgICAgICAgcmV0dXJuIFwib2JqZWN0XCIgPT0gdHlwZW9mIHQgJiYgdm9pZCAwICE9PSAodCA9PT0gbnVsbCB8fCB0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0LmJ5dGVMZW5ndGgpO1xuICAgICAgfTtcbiAgICAgIGUuaXNBcnJheUVxdWFsID0gZnVuY3Rpb24gaXNBcnJheUVxdWFsKHQsIGUpIHtcbiAgICAgICAgaWYgKHQubGVuZ3RoICE9PSBlLmxlbmd0aCkgcmV0dXJuICExO1xuICAgICAgICBmb3IgKGxldCBuID0gMCwgaSA9IHQubGVuZ3RoOyBuIDwgaTsgbisrKSBpZiAodFtuXSAhPT0gZVtuXSkgcmV0dXJuICExO1xuICAgICAgICByZXR1cm4gITA7XG4gICAgICB9O1xuICAgICAgZS5pc05vZGVKUyA9IHZvaWQgMDtcbiAgICAgIGUubm9ybWFsaXplVW5pY29kZSA9IGZ1bmN0aW9uIG5vcm1hbGl6ZVVuaWNvZGUodCkge1xuICAgICAgICBpZiAoIWMpIHtcbiAgICAgICAgICBjID0gLyhbXFx4QTBcXHhCNVxcdTAzN0VcXHUwRUIzXFx1MjAwMC1cXHUyMDBBXFx1MjAyRlxcdTIxMjZcXHVGQjAwLVxcdUZCMDRcXHVGQjA2XFx1RkIyMC1cXHVGQjM2XFx1RkIzOC1cXHVGQjNDXFx1RkIzRVxcdUZCNDBcXHVGQjQxXFx1RkI0M1xcdUZCNDRcXHVGQjQ2LVxcdUZCQTFcXHVGQkE0LVxcdUZCQTlcXHVGQkFFLVxcdUZCQjFcXHVGQkQzLVxcdUZCRENcXHVGQkRFLVxcdUZCRTdcXHVGQkVBLVxcdUZCRjhcXHVGQkZDXFx1RkJGRFxcdUZDMDAtXFx1RkM1RFxcdUZDNjQtXFx1RkNGMVxcdUZDRjUtXFx1RkQzRFxcdUZEODhcXHVGREY0XFx1RkRGQVxcdUZERkJcXHVGRTcxXFx1RkU3N1xcdUZFNzlcXHVGRTdCXFx1RkU3RF0rKXwoXFx1RkIwNSspL2c7XG4gICAgICAgICAgaCA9IG5ldyBNYXAoW1tcIu+shVwiLCBcIsW/dFwiXV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0LnJlcGxhY2VBbGwoYywgKHQsIGUsIG4pID0+IGUgPyBlLm5vcm1hbGl6ZShcIk5GS0NcIikgOiBoLmdldChuKSk7XG4gICAgICB9O1xuICAgICAgZS5vYmplY3RGcm9tTWFwID0gZnVuY3Rpb24gb2JqZWN0RnJvbU1hcCh0KSB7XG4gICAgICAgIGNvbnN0IGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBmb3IgKGNvbnN0IFtuLCBpXSBvZiB0KSBlW25dID0gaTtcbiAgICAgICAgcmV0dXJuIGU7XG4gICAgICB9O1xuICAgICAgZS5vYmplY3RTaXplID0gZnVuY3Rpb24gb2JqZWN0U2l6ZSh0KSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0KS5sZW5ndGg7XG4gICAgICB9O1xuICAgICAgZS5zZXRWZXJib3NpdHlMZXZlbCA9IGZ1bmN0aW9uIHNldFZlcmJvc2l0eUxldmVsKHQpIHtcbiAgICAgICAgTnVtYmVyLmlzSW50ZWdlcih0KSAmJiAocyA9IHQpO1xuICAgICAgfTtcbiAgICAgIGUuc2hhZG93ID0gc2hhZG93O1xuICAgICAgZS5zdHJpbmczMiA9IGZ1bmN0aW9uIHN0cmluZzMyKHQpIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodCA+PiAyNCAmIDI1NSwgdCA+PiAxNiAmIDI1NSwgdCA+PiA4ICYgMjU1LCAyNTUgJiB0KTtcbiAgICAgIH07XG4gICAgICBlLnN0cmluZ1RvQnl0ZXMgPSBzdHJpbmdUb0J5dGVzO1xuICAgICAgZS5zdHJpbmdUb1BERlN0cmluZyA9IGZ1bmN0aW9uIHN0cmluZ1RvUERGU3RyaW5nKHQpIHtcbiAgICAgICAgaWYgKHRbMF0gPj0gXCLDr1wiKSB7XG4gICAgICAgICAgbGV0IGU7XG4gICAgICAgICAgXCLDvlwiID09PSB0WzBdICYmIFwiw79cIiA9PT0gdFsxXSA/IGUgPSBcInV0Zi0xNmJlXCIgOiBcIsO/XCIgPT09IHRbMF0gJiYgXCLDvlwiID09PSB0WzFdID8gZSA9IFwidXRmLTE2bGVcIiA6IFwiw69cIiA9PT0gdFswXSAmJiBcIsK7XCIgPT09IHRbMV0gJiYgXCLCv1wiID09PSB0WzJdICYmIChlID0gXCJ1dGYtOFwiKTtcbiAgICAgICAgICBpZiAoZSkgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IG4gPSBuZXcgVGV4dERlY29kZXIoZSwge1xuICAgICAgICAgICAgICAgIGZhdGFsOiAhMFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgaSA9IHN0cmluZ1RvQnl0ZXModCk7XG4gICAgICAgICAgICByZXR1cm4gbi5kZWNvZGUoaSk7XG4gICAgICAgICAgfSBjYXRjaCAodCkge1xuICAgICAgICAgICAgd2FybihcInN0cmluZ1RvUERGU3RyaW5nOiBcXFwiXCIuY29uY2F0KHQsIFwiXFxcIi5cIikpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlID0gW107XG4gICAgICAgIGZvciAobGV0IG4gPSAwLCBpID0gdC5sZW5ndGg7IG4gPCBpOyBuKyspIHtcbiAgICAgICAgICBjb25zdCBpID0gbFt0LmNoYXJDb2RlQXQobildO1xuICAgICAgICAgIGUucHVzaChpID8gU3RyaW5nLmZyb21DaGFyQ29kZShpKSA6IHQuY2hhckF0KG4pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZS5qb2luKFwiXCIpO1xuICAgICAgfTtcbiAgICAgIGUuc3RyaW5nVG9VVEY4U3RyaW5nID0gc3RyaW5nVG9VVEY4U3RyaW5nO1xuICAgICAgZS51bnJlYWNoYWJsZSA9IHVucmVhY2hhYmxlO1xuICAgICAgZS51dGY4U3RyaW5nVG9TdHJpbmcgPSBmdW5jdGlvbiB1dGY4U3RyaW5nVG9TdHJpbmcodCkge1xuICAgICAgICByZXR1cm4gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KHQpKTtcbiAgICAgIH07XG4gICAgICBlLndhcm4gPSB3YXJuO1xuICAgICAgbigyKTtcbiAgICAgIG4oODQpO1xuICAgICAgbig4Nik7XG4gICAgICBuKDg3KTtcbiAgICAgIG4oODkpO1xuICAgICAgbig5Myk7XG4gICAgICBuKDEwMSk7XG4gICAgICBuKDEwMik7XG4gICAgICBuKDEwNSk7XG4gICAgICBuKDEwNyk7XG4gICAgICBuKDEwOSk7XG4gICAgICBuKDExMyk7XG4gICAgICBuKDExNik7XG4gICAgICBuKDEyMyk7XG4gICAgICBjb25zdCBpID0gIShcIm9iamVjdFwiICE9IHR5cGVvZiBwcm9jZXNzIHx8IHByb2Nlc3MgKyBcIlwiICE9IFwiW29iamVjdCBwcm9jZXNzXVwiIHx8IHByb2Nlc3MudmVyc2lvbnMubncgfHwgcHJvY2Vzcy52ZXJzaW9ucy5lbGVjdHJvbiAmJiBwcm9jZXNzLnR5cGUgJiYgXCJicm93c2VyXCIgIT09IHByb2Nlc3MudHlwZSk7XG4gICAgICBlLmlzTm9kZUpTID0gaTtcbiAgICAgIGUuSURFTlRJVFlfTUFUUklYID0gWzEsIDAsIDAsIDEsIDAsIDBdO1xuICAgICAgZS5GT05UX0lERU5USVRZX01BVFJJWCA9IFsuMDAxLCAwLCAwLCAuMDAxLCAwLCAwXTtcbiAgICAgIGUuTUFYX0lNQUdFX1NJWkVfVE9fQ0FDSEUgPSAxZTc7XG4gICAgICBlLkxJTkVfRkFDVE9SID0gMS4zNTtcbiAgICAgIGUuTElORV9ERVNDRU5UX0ZBQ1RPUiA9IC4zNTtcbiAgICAgIGUuQkFTRUxJTkVfRkFDVE9SID0gLjI1OTI1OTI1OTI1OTI1OTI0O1xuICAgICAgZS5SZW5kZXJpbmdJbnRlbnRGbGFnID0ge1xuICAgICAgICBBTlk6IDEsXG4gICAgICAgIERJU1BMQVk6IDIsXG4gICAgICAgIFBSSU5UOiA0LFxuICAgICAgICBTQVZFOiA4LFxuICAgICAgICBBTk5PVEFUSU9OU19GT1JNUzogMTYsXG4gICAgICAgIEFOTk9UQVRJT05TX1NUT1JBR0U6IDMyLFxuICAgICAgICBBTk5PVEFUSU9OU19ESVNBQkxFOiA2NCxcbiAgICAgICAgT1BMSVNUOiAyNTZcbiAgICAgIH07XG4gICAgICBlLkFubm90YXRpb25Nb2RlID0ge1xuICAgICAgICBESVNBQkxFOiAwLFxuICAgICAgICBFTkFCTEU6IDEsXG4gICAgICAgIEVOQUJMRV9GT1JNUzogMixcbiAgICAgICAgRU5BQkxFX1NUT1JBR0U6IDNcbiAgICAgIH07XG4gICAgICBlLkFubm90YXRpb25FZGl0b3JQcmVmaXggPSBcInBkZmpzX2ludGVybmFsX2VkaXRvcl9cIjtcbiAgICAgIGUuQW5ub3RhdGlvbkVkaXRvclR5cGUgPSB7XG4gICAgICAgIERJU0FCTEU6IC0xLFxuICAgICAgICBOT05FOiAwLFxuICAgICAgICBGUkVFVEVYVDogMyxcbiAgICAgICAgU1RBTVA6IDEzLFxuICAgICAgICBJTks6IDE1XG4gICAgICB9O1xuICAgICAgZS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZSA9IHtcbiAgICAgICAgUkVTSVpFOiAxLFxuICAgICAgICBGUkVFVEVYVF9TSVpFOiAxMSxcbiAgICAgICAgRlJFRVRFWFRfQ09MT1I6IDEyLFxuICAgICAgICBGUkVFVEVYVF9PUEFDSVRZOiAxMyxcbiAgICAgICAgSU5LX0NPTE9SOiAyMSxcbiAgICAgICAgSU5LX1RISUNLTkVTUzogMjIsXG4gICAgICAgIElOS19PUEFDSVRZOiAyM1xuICAgICAgfTtcbiAgICAgIGUuUGVybWlzc2lvbkZsYWcgPSB7XG4gICAgICAgIFBSSU5UOiA0LFxuICAgICAgICBNT0RJRllfQ09OVEVOVFM6IDgsXG4gICAgICAgIENPUFk6IDE2LFxuICAgICAgICBNT0RJRllfQU5OT1RBVElPTlM6IDMyLFxuICAgICAgICBGSUxMX0lOVEVSQUNUSVZFX0ZPUk1TOiAyNTYsXG4gICAgICAgIENPUFlfRk9SX0FDQ0VTU0lCSUxJVFk6IDUxMixcbiAgICAgICAgQVNTRU1CTEU6IDEwMjQsXG4gICAgICAgIFBSSU5UX0hJR0hfUVVBTElUWTogMjA0OFxuICAgICAgfTtcbiAgICAgIGUuVGV4dFJlbmRlcmluZ01vZGUgPSB7XG4gICAgICAgIEZJTEw6IDAsXG4gICAgICAgIFNUUk9LRTogMSxcbiAgICAgICAgRklMTF9TVFJPS0U6IDIsXG4gICAgICAgIElOVklTSUJMRTogMyxcbiAgICAgICAgRklMTF9BRERfVE9fUEFUSDogNCxcbiAgICAgICAgU1RST0tFX0FERF9UT19QQVRIOiA1LFxuICAgICAgICBGSUxMX1NUUk9LRV9BRERfVE9fUEFUSDogNixcbiAgICAgICAgQUREX1RPX1BBVEg6IDcsXG4gICAgICAgIEZJTExfU1RST0tFX01BU0s6IDMsXG4gICAgICAgIEFERF9UT19QQVRIX0ZMQUc6IDRcbiAgICAgIH07XG4gICAgICBlLkltYWdlS2luZCA9IHtcbiAgICAgICAgR1JBWVNDQUxFXzFCUFA6IDEsXG4gICAgICAgIFJHQl8yNEJQUDogMixcbiAgICAgICAgUkdCQV8zMkJQUDogM1xuICAgICAgfTtcbiAgICAgIGUuQW5ub3RhdGlvblR5cGUgPSB7XG4gICAgICAgIFRFWFQ6IDEsXG4gICAgICAgIExJTks6IDIsXG4gICAgICAgIEZSRUVURVhUOiAzLFxuICAgICAgICBMSU5FOiA0LFxuICAgICAgICBTUVVBUkU6IDUsXG4gICAgICAgIENJUkNMRTogNixcbiAgICAgICAgUE9MWUdPTjogNyxcbiAgICAgICAgUE9MWUxJTkU6IDgsXG4gICAgICAgIEhJR0hMSUdIVDogOSxcbiAgICAgICAgVU5ERVJMSU5FOiAxMCxcbiAgICAgICAgU1FVSUdHTFk6IDExLFxuICAgICAgICBTVFJJS0VPVVQ6IDEyLFxuICAgICAgICBTVEFNUDogMTMsXG4gICAgICAgIENBUkVUOiAxNCxcbiAgICAgICAgSU5LOiAxNSxcbiAgICAgICAgUE9QVVA6IDE2LFxuICAgICAgICBGSUxFQVRUQUNITUVOVDogMTcsXG4gICAgICAgIFNPVU5EOiAxOCxcbiAgICAgICAgTU9WSUU6IDE5LFxuICAgICAgICBXSURHRVQ6IDIwLFxuICAgICAgICBTQ1JFRU46IDIxLFxuICAgICAgICBQUklOVEVSTUFSSzogMjIsXG4gICAgICAgIFRSQVBORVQ6IDIzLFxuICAgICAgICBXQVRFUk1BUks6IDI0LFxuICAgICAgICBUSFJFRUQ6IDI1LFxuICAgICAgICBSRURBQ1Q6IDI2XG4gICAgICB9O1xuICAgICAgZS5Bbm5vdGF0aW9uUmVwbHlUeXBlID0ge1xuICAgICAgICBHUk9VUDogXCJHcm91cFwiLFxuICAgICAgICBSRVBMWTogXCJSXCJcbiAgICAgIH07XG4gICAgICBlLkFubm90YXRpb25GbGFnID0ge1xuICAgICAgICBJTlZJU0lCTEU6IDEsXG4gICAgICAgIEhJRERFTjogMixcbiAgICAgICAgUFJJTlQ6IDQsXG4gICAgICAgIE5PWk9PTTogOCxcbiAgICAgICAgTk9ST1RBVEU6IDE2LFxuICAgICAgICBOT1ZJRVc6IDMyLFxuICAgICAgICBSRUFET05MWTogNjQsXG4gICAgICAgIExPQ0tFRDogMTI4LFxuICAgICAgICBUT0dHTEVOT1ZJRVc6IDI1NixcbiAgICAgICAgTE9DS0VEQ09OVEVOVFM6IDUxMlxuICAgICAgfTtcbiAgICAgIGUuQW5ub3RhdGlvbkZpZWxkRmxhZyA9IHtcbiAgICAgICAgUkVBRE9OTFk6IDEsXG4gICAgICAgIFJFUVVJUkVEOiAyLFxuICAgICAgICBOT0VYUE9SVDogNCxcbiAgICAgICAgTVVMVElMSU5FOiA0MDk2LFxuICAgICAgICBQQVNTV09SRDogODE5MixcbiAgICAgICAgTk9UT0dHTEVUT09GRjogMTYzODQsXG4gICAgICAgIFJBRElPOiAzMjc2OCxcbiAgICAgICAgUFVTSEJVVFRPTjogNjU1MzYsXG4gICAgICAgIENPTUJPOiAxMzEwNzIsXG4gICAgICAgIEVESVQ6IDI2MjE0NCxcbiAgICAgICAgU09SVDogNTI0Mjg4LFxuICAgICAgICBGSUxFU0VMRUNUOiAxMDQ4NTc2LFxuICAgICAgICBNVUxUSVNFTEVDVDogMjA5NzE1MixcbiAgICAgICAgRE9OT1RTUEVMTENIRUNLOiA0MTk0MzA0LFxuICAgICAgICBET05PVFNDUk9MTDogODM4ODYwOCxcbiAgICAgICAgQ09NQjogMTY3NzcyMTYsXG4gICAgICAgIFJJQ0hURVhUOiAzMzU1NDQzMixcbiAgICAgICAgUkFESU9TSU5VTklTT046IDMzNTU0NDMyLFxuICAgICAgICBDT01NSVRPTlNFTENIQU5HRTogNjcxMDg4NjRcbiAgICAgIH07XG4gICAgICBlLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUgPSB7XG4gICAgICAgIFNPTElEOiAxLFxuICAgICAgICBEQVNIRUQ6IDIsXG4gICAgICAgIEJFVkVMRUQ6IDMsXG4gICAgICAgIElOU0VUOiA0LFxuICAgICAgICBVTkRFUkxJTkU6IDVcbiAgICAgIH07XG4gICAgICBlLkFubm90YXRpb25BY3Rpb25FdmVudFR5cGUgPSB7XG4gICAgICAgIEU6IFwiTW91c2UgRW50ZXJcIixcbiAgICAgICAgWDogXCJNb3VzZSBFeGl0XCIsXG4gICAgICAgIEQ6IFwiTW91c2UgRG93blwiLFxuICAgICAgICBVOiBcIk1vdXNlIFVwXCIsXG4gICAgICAgIEZvOiBcIkZvY3VzXCIsXG4gICAgICAgIEJsOiBcIkJsdXJcIixcbiAgICAgICAgUE86IFwiUGFnZU9wZW5cIixcbiAgICAgICAgUEM6IFwiUGFnZUNsb3NlXCIsXG4gICAgICAgIFBWOiBcIlBhZ2VWaXNpYmxlXCIsXG4gICAgICAgIFBJOiBcIlBhZ2VJbnZpc2libGVcIixcbiAgICAgICAgSzogXCJLZXlzdHJva2VcIixcbiAgICAgICAgRjogXCJGb3JtYXRcIixcbiAgICAgICAgVjogXCJWYWxpZGF0ZVwiLFxuICAgICAgICBDOiBcIkNhbGN1bGF0ZVwiXG4gICAgICB9O1xuICAgICAgZS5Eb2N1bWVudEFjdGlvbkV2ZW50VHlwZSA9IHtcbiAgICAgICAgV0M6IFwiV2lsbENsb3NlXCIsXG4gICAgICAgIFdTOiBcIldpbGxTYXZlXCIsXG4gICAgICAgIERTOiBcIkRpZFNhdmVcIixcbiAgICAgICAgV1A6IFwiV2lsbFByaW50XCIsXG4gICAgICAgIERQOiBcIkRpZFByaW50XCJcbiAgICAgIH07XG4gICAgICBlLlBhZ2VBY3Rpb25FdmVudFR5cGUgPSB7XG4gICAgICAgIE86IFwiUGFnZU9wZW5cIixcbiAgICAgICAgQzogXCJQYWdlQ2xvc2VcIlxuICAgICAgfTtcbiAgICAgIGNvbnN0IHIgPSB7XG4gICAgICAgIEVSUk9SUzogMCxcbiAgICAgICAgV0FSTklOR1M6IDEsXG4gICAgICAgIElORk9TOiA1XG4gICAgICB9O1xuICAgICAgZS5WZXJib3NpdHlMZXZlbCA9IHI7XG4gICAgICBlLkNNYXBDb21wcmVzc2lvblR5cGUgPSB7XG4gICAgICAgIE5PTkU6IDAsXG4gICAgICAgIEJJTkFSWTogMVxuICAgICAgfTtcbiAgICAgIGUuT1BTID0ge1xuICAgICAgICBkZXBlbmRlbmN5OiAxLFxuICAgICAgICBzZXRMaW5lV2lkdGg6IDIsXG4gICAgICAgIHNldExpbmVDYXA6IDMsXG4gICAgICAgIHNldExpbmVKb2luOiA0LFxuICAgICAgICBzZXRNaXRlckxpbWl0OiA1LFxuICAgICAgICBzZXREYXNoOiA2LFxuICAgICAgICBzZXRSZW5kZXJpbmdJbnRlbnQ6IDcsXG4gICAgICAgIHNldEZsYXRuZXNzOiA4LFxuICAgICAgICBzZXRHU3RhdGU6IDksXG4gICAgICAgIHNhdmU6IDEwLFxuICAgICAgICByZXN0b3JlOiAxMSxcbiAgICAgICAgdHJhbnNmb3JtOiAxMixcbiAgICAgICAgbW92ZVRvOiAxMyxcbiAgICAgICAgbGluZVRvOiAxNCxcbiAgICAgICAgY3VydmVUbzogMTUsXG4gICAgICAgIGN1cnZlVG8yOiAxNixcbiAgICAgICAgY3VydmVUbzM6IDE3LFxuICAgICAgICBjbG9zZVBhdGg6IDE4LFxuICAgICAgICByZWN0YW5nbGU6IDE5LFxuICAgICAgICBzdHJva2U6IDIwLFxuICAgICAgICBjbG9zZVN0cm9rZTogMjEsXG4gICAgICAgIGZpbGw6IDIyLFxuICAgICAgICBlb0ZpbGw6IDIzLFxuICAgICAgICBmaWxsU3Ryb2tlOiAyNCxcbiAgICAgICAgZW9GaWxsU3Ryb2tlOiAyNSxcbiAgICAgICAgY2xvc2VGaWxsU3Ryb2tlOiAyNixcbiAgICAgICAgY2xvc2VFT0ZpbGxTdHJva2U6IDI3LFxuICAgICAgICBlbmRQYXRoOiAyOCxcbiAgICAgICAgY2xpcDogMjksXG4gICAgICAgIGVvQ2xpcDogMzAsXG4gICAgICAgIGJlZ2luVGV4dDogMzEsXG4gICAgICAgIGVuZFRleHQ6IDMyLFxuICAgICAgICBzZXRDaGFyU3BhY2luZzogMzMsXG4gICAgICAgIHNldFdvcmRTcGFjaW5nOiAzNCxcbiAgICAgICAgc2V0SFNjYWxlOiAzNSxcbiAgICAgICAgc2V0TGVhZGluZzogMzYsXG4gICAgICAgIHNldEZvbnQ6IDM3LFxuICAgICAgICBzZXRUZXh0UmVuZGVyaW5nTW9kZTogMzgsXG4gICAgICAgIHNldFRleHRSaXNlOiAzOSxcbiAgICAgICAgbW92ZVRleHQ6IDQwLFxuICAgICAgICBzZXRMZWFkaW5nTW92ZVRleHQ6IDQxLFxuICAgICAgICBzZXRUZXh0TWF0cml4OiA0MixcbiAgICAgICAgbmV4dExpbmU6IDQzLFxuICAgICAgICBzaG93VGV4dDogNDQsXG4gICAgICAgIHNob3dTcGFjZWRUZXh0OiA0NSxcbiAgICAgICAgbmV4dExpbmVTaG93VGV4dDogNDYsXG4gICAgICAgIG5leHRMaW5lU2V0U3BhY2luZ1Nob3dUZXh0OiA0NyxcbiAgICAgICAgc2V0Q2hhcldpZHRoOiA0OCxcbiAgICAgICAgc2V0Q2hhcldpZHRoQW5kQm91bmRzOiA0OSxcbiAgICAgICAgc2V0U3Ryb2tlQ29sb3JTcGFjZTogNTAsXG4gICAgICAgIHNldEZpbGxDb2xvclNwYWNlOiA1MSxcbiAgICAgICAgc2V0U3Ryb2tlQ29sb3I6IDUyLFxuICAgICAgICBzZXRTdHJva2VDb2xvck46IDUzLFxuICAgICAgICBzZXRGaWxsQ29sb3I6IDU0LFxuICAgICAgICBzZXRGaWxsQ29sb3JOOiA1NSxcbiAgICAgICAgc2V0U3Ryb2tlR3JheTogNTYsXG4gICAgICAgIHNldEZpbGxHcmF5OiA1NyxcbiAgICAgICAgc2V0U3Ryb2tlUkdCQ29sb3I6IDU4LFxuICAgICAgICBzZXRGaWxsUkdCQ29sb3I6IDU5LFxuICAgICAgICBzZXRTdHJva2VDTVlLQ29sb3I6IDYwLFxuICAgICAgICBzZXRGaWxsQ01ZS0NvbG9yOiA2MSxcbiAgICAgICAgc2hhZGluZ0ZpbGw6IDYyLFxuICAgICAgICBiZWdpbklubGluZUltYWdlOiA2MyxcbiAgICAgICAgYmVnaW5JbWFnZURhdGE6IDY0LFxuICAgICAgICBlbmRJbmxpbmVJbWFnZTogNjUsXG4gICAgICAgIHBhaW50WE9iamVjdDogNjYsXG4gICAgICAgIG1hcmtQb2ludDogNjcsXG4gICAgICAgIG1hcmtQb2ludFByb3BzOiA2OCxcbiAgICAgICAgYmVnaW5NYXJrZWRDb250ZW50OiA2OSxcbiAgICAgICAgYmVnaW5NYXJrZWRDb250ZW50UHJvcHM6IDcwLFxuICAgICAgICBlbmRNYXJrZWRDb250ZW50OiA3MSxcbiAgICAgICAgYmVnaW5Db21wYXQ6IDcyLFxuICAgICAgICBlbmRDb21wYXQ6IDczLFxuICAgICAgICBwYWludEZvcm1YT2JqZWN0QmVnaW46IDc0LFxuICAgICAgICBwYWludEZvcm1YT2JqZWN0RW5kOiA3NSxcbiAgICAgICAgYmVnaW5Hcm91cDogNzYsXG4gICAgICAgIGVuZEdyb3VwOiA3NyxcbiAgICAgICAgYmVnaW5Bbm5vdGF0aW9uOiA4MCxcbiAgICAgICAgZW5kQW5ub3RhdGlvbjogODEsXG4gICAgICAgIHBhaW50SW1hZ2VNYXNrWE9iamVjdDogODMsXG4gICAgICAgIHBhaW50SW1hZ2VNYXNrWE9iamVjdEdyb3VwOiA4NCxcbiAgICAgICAgcGFpbnRJbWFnZVhPYmplY3Q6IDg1LFxuICAgICAgICBwYWludElubGluZUltYWdlWE9iamVjdDogODYsXG4gICAgICAgIHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXA6IDg3LFxuICAgICAgICBwYWludEltYWdlWE9iamVjdFJlcGVhdDogODgsXG4gICAgICAgIHBhaW50SW1hZ2VNYXNrWE9iamVjdFJlcGVhdDogODksXG4gICAgICAgIHBhaW50U29saWRDb2xvckltYWdlTWFzazogOTAsXG4gICAgICAgIGNvbnN0cnVjdFBhdGg6IDkxXG4gICAgICB9O1xuICAgICAgZS5QYXNzd29yZFJlc3BvbnNlcyA9IHtcbiAgICAgICAgTkVFRF9QQVNTV09SRDogMSxcbiAgICAgICAgSU5DT1JSRUNUX1BBU1NXT1JEOiAyXG4gICAgICB9O1xuICAgICAgbGV0IHMgPSByLldBUk5JTkdTO1xuICAgICAgZnVuY3Rpb24gd2Fybih0KSB7XG4gICAgICAgIHMgPj0gci5XQVJOSU5HUyAmJiBjb25zb2xlLmxvZyhcIldhcm5pbmc6IFwiLmNvbmNhdCh0KSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiB1bnJlYWNoYWJsZSh0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcih0KTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHNoYWRvdyh0LCBlLCBuKSB7XG4gICAgICAgIGxldCBpID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbM10gJiYgYXJndW1lbnRzWzNdO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgZSwge1xuICAgICAgICAgIHZhbHVlOiBuLFxuICAgICAgICAgIGVudW1lcmFibGU6ICFpLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogITAsXG4gICAgICAgICAgd3JpdGFibGU6ICExXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGEgPSBmdW5jdGlvbiBCYXNlRXhjZXB0aW9uQ2xvc3VyZSgpIHtcbiAgICAgICAgZnVuY3Rpb24gQmFzZUV4Y2VwdGlvbih0LCBlKSB7XG4gICAgICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9PT0gQmFzZUV4Y2VwdGlvbiAmJiB1bnJlYWNoYWJsZShcIkNhbm5vdCBpbml0aWFsaXplIEJhc2VFeGNlcHRpb24uXCIpO1xuICAgICAgICAgIHRoaXMubWVzc2FnZSA9IHQ7XG4gICAgICAgICAgdGhpcy5uYW1lID0gZTtcbiAgICAgICAgfVxuICAgICAgICBCYXNlRXhjZXB0aW9uLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuICAgICAgICBCYXNlRXhjZXB0aW9uLmNvbnN0cnVjdG9yID0gQmFzZUV4Y2VwdGlvbjtcbiAgICAgICAgcmV0dXJuIEJhc2VFeGNlcHRpb247XG4gICAgICB9KCk7XG4gICAgICBlLkJhc2VFeGNlcHRpb24gPSBhO1xuICAgICAgZS5QYXNzd29yZEV4Y2VwdGlvbiA9IGNsYXNzIFBhc3N3b3JkRXhjZXB0aW9uIGV4dGVuZHMgYSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHQsIGUpIHtcbiAgICAgICAgICBzdXBlcih0LCBcIlBhc3N3b3JkRXhjZXB0aW9uXCIpO1xuICAgICAgICAgIHRoaXMuY29kZSA9IGU7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBlLlVua25vd25FcnJvckV4Y2VwdGlvbiA9IGNsYXNzIFVua25vd25FcnJvckV4Y2VwdGlvbiBleHRlbmRzIGEge1xuICAgICAgICBjb25zdHJ1Y3Rvcih0LCBlKSB7XG4gICAgICAgICAgc3VwZXIodCwgXCJVbmtub3duRXJyb3JFeGNlcHRpb25cIik7XG4gICAgICAgICAgdGhpcy5kZXRhaWxzID0gZTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGUuSW52YWxpZFBERkV4Y2VwdGlvbiA9IGNsYXNzIEludmFsaWRQREZFeGNlcHRpb24gZXh0ZW5kcyBhIHtcbiAgICAgICAgY29uc3RydWN0b3IodCkge1xuICAgICAgICAgIHN1cGVyKHQsIFwiSW52YWxpZFBERkV4Y2VwdGlvblwiKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGUuTWlzc2luZ1BERkV4Y2VwdGlvbiA9IGNsYXNzIE1pc3NpbmdQREZFeGNlcHRpb24gZXh0ZW5kcyBhIHtcbiAgICAgICAgY29uc3RydWN0b3IodCkge1xuICAgICAgICAgIHN1cGVyKHQsIFwiTWlzc2luZ1BERkV4Y2VwdGlvblwiKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGUuVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uID0gY2xhc3MgVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uIGV4dGVuZHMgYSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHQsIGUpIHtcbiAgICAgICAgICBzdXBlcih0LCBcIlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvblwiKTtcbiAgICAgICAgICB0aGlzLnN0YXR1cyA9IGU7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBlLkZvcm1hdEVycm9yID0gY2xhc3MgRm9ybWF0RXJyb3IgZXh0ZW5kcyBhIHtcbiAgICAgICAgY29uc3RydWN0b3IodCkge1xuICAgICAgICAgIHN1cGVyKHQsIFwiRm9ybWF0RXJyb3JcIik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBlLkFib3J0RXhjZXB0aW9uID0gY2xhc3MgQWJvcnRFeGNlcHRpb24gZXh0ZW5kcyBhIHtcbiAgICAgICAgY29uc3RydWN0b3IodCkge1xuICAgICAgICAgIHN1cGVyKHQsIFwiQWJvcnRFeGNlcHRpb25cIik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBmdW5jdGlvbiBieXRlc1RvU3RyaW5nKHQpIHtcbiAgICAgICAgXCJvYmplY3RcIiA9PSB0eXBlb2YgdCAmJiB2b2lkIDAgIT09ICh0ID09PSBudWxsIHx8IHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHQubGVuZ3RoKSB8fCB1bnJlYWNoYWJsZShcIkludmFsaWQgYXJndW1lbnQgZm9yIGJ5dGVzVG9TdHJpbmdcIik7XG4gICAgICAgIGNvbnN0IGUgPSB0Lmxlbmd0aCxcbiAgICAgICAgICBuID0gODE5MjtcbiAgICAgICAgaWYgKGUgPCBuKSByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCB0KTtcbiAgICAgICAgY29uc3QgaSA9IFtdO1xuICAgICAgICBmb3IgKGxldCByID0gMDsgciA8IGU7IHIgKz0gbikge1xuICAgICAgICAgIGNvbnN0IHMgPSBNYXRoLm1pbihyICsgbiwgZSksXG4gICAgICAgICAgICBhID0gdC5zdWJhcnJheShyLCBzKTtcbiAgICAgICAgICBpLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBhKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGkuam9pbihcIlwiKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHN0cmluZ1RvQnl0ZXModCkge1xuICAgICAgICBcInN0cmluZ1wiICE9IHR5cGVvZiB0ICYmIHVucmVhY2hhYmxlKFwiSW52YWxpZCBhcmd1bWVudCBmb3Igc3RyaW5nVG9CeXRlc1wiKTtcbiAgICAgICAgY29uc3QgZSA9IHQubGVuZ3RoLFxuICAgICAgICAgIG4gPSBuZXcgVWludDhBcnJheShlKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlOyArK2kpIG5baV0gPSAyNTUgJiB0LmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIHJldHVybiBuO1xuICAgICAgfVxuICAgICAgZS5GZWF0dXJlVGVzdCA9IGNsYXNzIEZlYXR1cmVUZXN0IHtcbiAgICAgICAgc3RhdGljIGdldCBpc0xpdHRsZUVuZGlhbigpIHtcbiAgICAgICAgICByZXR1cm4gc2hhZG93KHRoaXMsIFwiaXNMaXR0bGVFbmRpYW5cIiwgZnVuY3Rpb24gaXNMaXR0bGVFbmRpYW4oKSB7XG4gICAgICAgICAgICBjb25zdCB0ID0gbmV3IFVpbnQ4QXJyYXkoNCk7XG4gICAgICAgICAgICB0WzBdID0gMTtcbiAgICAgICAgICAgIHJldHVybiAxID09PSBuZXcgVWludDMyQXJyYXkodC5idWZmZXIsIDAsIDEpWzBdO1xuICAgICAgICAgIH0oKSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGdldCBpc0V2YWxTdXBwb3J0ZWQoKSB7XG4gICAgICAgICAgcmV0dXJuIHNoYWRvdyh0aGlzLCBcImlzRXZhbFN1cHBvcnRlZFwiLCBmdW5jdGlvbiBpc0V2YWxTdXBwb3J0ZWQoKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBuZXcgRnVuY3Rpb24oXCJcIik7XG4gICAgICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgICAgIH0gY2F0Y2ggKF91bnVzZWQzKSB7XG4gICAgICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KCkpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBnZXQgaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQoKSB7XG4gICAgICAgICAgcmV0dXJuIHNoYWRvdyh0aGlzLCBcImlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkXCIsIFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIE9mZnNjcmVlbkNhbnZhcyk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGdldCBwbGF0Zm9ybSgpIHtcbiAgICAgICAgICByZXR1cm4gXCJ1bmRlZmluZWRcIiA9PSB0eXBlb2YgbmF2aWdhdG9yID8gc2hhZG93KHRoaXMsIFwicGxhdGZvcm1cIiwge1xuICAgICAgICAgICAgaXNXaW46ICExLFxuICAgICAgICAgICAgaXNNYWM6ICExXG4gICAgICAgICAgfSkgOiBzaGFkb3codGhpcywgXCJwbGF0Zm9ybVwiLCB7XG4gICAgICAgICAgICBpc1dpbjogbmF2aWdhdG9yLnBsYXRmb3JtLmluY2x1ZGVzKFwiV2luXCIpLFxuICAgICAgICAgICAgaXNNYWM6IG5hdmlnYXRvci5wbGF0Zm9ybS5pbmNsdWRlcyhcIk1hY1wiKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgbyA9IFsuLi5BcnJheSgyNTYpLmtleXMoKV0ubWFwKHQgPT4gdC50b1N0cmluZygxNikucGFkU3RhcnQoMiwgXCIwXCIpKTtcbiAgICAgIGUuVXRpbCA9IGNsYXNzIFV0aWwge1xuICAgICAgICBzdGF0aWMgbWFrZUhleENvbG9yKHQsIGUsIG4pIHtcbiAgICAgICAgICByZXR1cm4gXCIjXCIuY29uY2F0KG9bdF0pLmNvbmNhdChvW2VdKS5jb25jYXQob1tuXSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIHNjYWxlTWluTWF4KHQsIGUpIHtcbiAgICAgICAgICBsZXQgbjtcbiAgICAgICAgICBpZiAodFswXSkge1xuICAgICAgICAgICAgaWYgKHRbMF0gPCAwKSB7XG4gICAgICAgICAgICAgIG4gPSBlWzBdO1xuICAgICAgICAgICAgICBlWzBdID0gZVsxXTtcbiAgICAgICAgICAgICAgZVsxXSA9IG47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlWzBdICo9IHRbMF07XG4gICAgICAgICAgICBlWzFdICo9IHRbMF07XG4gICAgICAgICAgICBpZiAodFszXSA8IDApIHtcbiAgICAgICAgICAgICAgbiA9IGVbMl07XG4gICAgICAgICAgICAgIGVbMl0gPSBlWzNdO1xuICAgICAgICAgICAgICBlWzNdID0gbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVbMl0gKj0gdFszXTtcbiAgICAgICAgICAgIGVbM10gKj0gdFszXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbiA9IGVbMF07XG4gICAgICAgICAgICBlWzBdID0gZVsyXTtcbiAgICAgICAgICAgIGVbMl0gPSBuO1xuICAgICAgICAgICAgbiA9IGVbMV07XG4gICAgICAgICAgICBlWzFdID0gZVszXTtcbiAgICAgICAgICAgIGVbM10gPSBuO1xuICAgICAgICAgICAgaWYgKHRbMV0gPCAwKSB7XG4gICAgICAgICAgICAgIG4gPSBlWzJdO1xuICAgICAgICAgICAgICBlWzJdID0gZVszXTtcbiAgICAgICAgICAgICAgZVszXSA9IG47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlWzJdICo9IHRbMV07XG4gICAgICAgICAgICBlWzNdICo9IHRbMV07XG4gICAgICAgICAgICBpZiAodFsyXSA8IDApIHtcbiAgICAgICAgICAgICAgbiA9IGVbMF07XG4gICAgICAgICAgICAgIGVbMF0gPSBlWzFdO1xuICAgICAgICAgICAgICBlWzFdID0gbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVbMF0gKj0gdFsyXTtcbiAgICAgICAgICAgIGVbMV0gKj0gdFsyXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZVswXSArPSB0WzRdO1xuICAgICAgICAgIGVbMV0gKz0gdFs0XTtcbiAgICAgICAgICBlWzJdICs9IHRbNV07XG4gICAgICAgICAgZVszXSArPSB0WzVdO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyB0cmFuc2Zvcm0odCwgZSkge1xuICAgICAgICAgIHJldHVybiBbdFswXSAqIGVbMF0gKyB0WzJdICogZVsxXSwgdFsxXSAqIGVbMF0gKyB0WzNdICogZVsxXSwgdFswXSAqIGVbMl0gKyB0WzJdICogZVszXSwgdFsxXSAqIGVbMl0gKyB0WzNdICogZVszXSwgdFswXSAqIGVbNF0gKyB0WzJdICogZVs1XSArIHRbNF0sIHRbMV0gKiBlWzRdICsgdFszXSAqIGVbNV0gKyB0WzVdXTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgYXBwbHlUcmFuc2Zvcm0odCwgZSkge1xuICAgICAgICAgIHJldHVybiBbdFswXSAqIGVbMF0gKyB0WzFdICogZVsyXSArIGVbNF0sIHRbMF0gKiBlWzFdICsgdFsxXSAqIGVbM10gKyBlWzVdXTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgYXBwbHlJbnZlcnNlVHJhbnNmb3JtKHQsIGUpIHtcbiAgICAgICAgICBjb25zdCBuID0gZVswXSAqIGVbM10gLSBlWzFdICogZVsyXTtcbiAgICAgICAgICByZXR1cm4gWyh0WzBdICogZVszXSAtIHRbMV0gKiBlWzJdICsgZVsyXSAqIGVbNV0gLSBlWzRdICogZVszXSkgLyBuLCAoLXRbMF0gKiBlWzFdICsgdFsxXSAqIGVbMF0gKyBlWzRdICogZVsxXSAtIGVbNV0gKiBlWzBdKSAvIG5dO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBnZXRBeGlhbEFsaWduZWRCb3VuZGluZ0JveCh0LCBlKSB7XG4gICAgICAgICAgY29uc3QgbiA9IHRoaXMuYXBwbHlUcmFuc2Zvcm0odCwgZSksXG4gICAgICAgICAgICBpID0gdGhpcy5hcHBseVRyYW5zZm9ybSh0LnNsaWNlKDIsIDQpLCBlKSxcbiAgICAgICAgICAgIHIgPSB0aGlzLmFwcGx5VHJhbnNmb3JtKFt0WzBdLCB0WzNdXSwgZSksXG4gICAgICAgICAgICBzID0gdGhpcy5hcHBseVRyYW5zZm9ybShbdFsyXSwgdFsxXV0sIGUpO1xuICAgICAgICAgIHJldHVybiBbTWF0aC5taW4oblswXSwgaVswXSwgclswXSwgc1swXSksIE1hdGgubWluKG5bMV0sIGlbMV0sIHJbMV0sIHNbMV0pLCBNYXRoLm1heChuWzBdLCBpWzBdLCByWzBdLCBzWzBdKSwgTWF0aC5tYXgoblsxXSwgaVsxXSwgclsxXSwgc1sxXSldO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBpbnZlcnNlVHJhbnNmb3JtKHQpIHtcbiAgICAgICAgICBjb25zdCBlID0gdFswXSAqIHRbM10gLSB0WzFdICogdFsyXTtcbiAgICAgICAgICByZXR1cm4gW3RbM10gLyBlLCAtdFsxXSAvIGUsIC10WzJdIC8gZSwgdFswXSAvIGUsICh0WzJdICogdFs1XSAtIHRbNF0gKiB0WzNdKSAvIGUsICh0WzRdICogdFsxXSAtIHRbNV0gKiB0WzBdKSAvIGVdO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBzaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZSh0KSB7XG4gICAgICAgICAgY29uc3QgZSA9IFt0WzBdLCB0WzJdLCB0WzFdLCB0WzNdXSxcbiAgICAgICAgICAgIG4gPSB0WzBdICogZVswXSArIHRbMV0gKiBlWzJdLFxuICAgICAgICAgICAgaSA9IHRbMF0gKiBlWzFdICsgdFsxXSAqIGVbM10sXG4gICAgICAgICAgICByID0gdFsyXSAqIGVbMF0gKyB0WzNdICogZVsyXSxcbiAgICAgICAgICAgIHMgPSB0WzJdICogZVsxXSArIHRbM10gKiBlWzNdLFxuICAgICAgICAgICAgYSA9IChuICsgcykgLyAyLFxuICAgICAgICAgICAgbyA9IE1hdGguc3FydCgobiArIHMpICoqIDIgLSA0ICogKG4gKiBzIC0gciAqIGkpKSAvIDIsXG4gICAgICAgICAgICBsID0gYSArIG8gfHwgMSxcbiAgICAgICAgICAgIGMgPSBhIC0gbyB8fCAxO1xuICAgICAgICAgIHJldHVybiBbTWF0aC5zcXJ0KGwpLCBNYXRoLnNxcnQoYyldO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBub3JtYWxpemVSZWN0KHQpIHtcbiAgICAgICAgICBjb25zdCBlID0gdC5zbGljZSgwKTtcbiAgICAgICAgICBpZiAodFswXSA+IHRbMl0pIHtcbiAgICAgICAgICAgIGVbMF0gPSB0WzJdO1xuICAgICAgICAgICAgZVsyXSA9IHRbMF07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0WzFdID4gdFszXSkge1xuICAgICAgICAgICAgZVsxXSA9IHRbM107XG4gICAgICAgICAgICBlWzNdID0gdFsxXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGU7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGludGVyc2VjdCh0LCBlKSB7XG4gICAgICAgICAgY29uc3QgbiA9IE1hdGgubWF4KE1hdGgubWluKHRbMF0sIHRbMl0pLCBNYXRoLm1pbihlWzBdLCBlWzJdKSksXG4gICAgICAgICAgICBpID0gTWF0aC5taW4oTWF0aC5tYXgodFswXSwgdFsyXSksIE1hdGgubWF4KGVbMF0sIGVbMl0pKTtcbiAgICAgICAgICBpZiAobiA+IGkpIHJldHVybiBudWxsO1xuICAgICAgICAgIGNvbnN0IHIgPSBNYXRoLm1heChNYXRoLm1pbih0WzFdLCB0WzNdKSwgTWF0aC5taW4oZVsxXSwgZVszXSkpLFxuICAgICAgICAgICAgcyA9IE1hdGgubWluKE1hdGgubWF4KHRbMV0sIHRbM10pLCBNYXRoLm1heChlWzFdLCBlWzNdKSk7XG4gICAgICAgICAgcmV0dXJuIHIgPiBzID8gbnVsbCA6IFtuLCByLCBpLCBzXTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgYmV6aWVyQm91bmRpbmdCb3godCwgZSwgbiwgaSwgciwgcywgYSwgbykge1xuICAgICAgICAgIGNvbnN0IGwgPSBbXSxcbiAgICAgICAgICAgIGMgPSBbW10sIFtdXTtcbiAgICAgICAgICBsZXQgaCwgZCwgdSwgcCwgZiwgZywgbSwgYjtcbiAgICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IDI7ICsrYykge1xuICAgICAgICAgICAgaWYgKDAgPT09IGMpIHtcbiAgICAgICAgICAgICAgZCA9IDYgKiB0IC0gMTIgKiBuICsgNiAqIHI7XG4gICAgICAgICAgICAgIGggPSAtMyAqIHQgKyA5ICogbiAtIDkgKiByICsgMyAqIGE7XG4gICAgICAgICAgICAgIHUgPSAzICogbiAtIDMgKiB0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZCA9IDYgKiBlIC0gMTIgKiBpICsgNiAqIHM7XG4gICAgICAgICAgICAgIGggPSAtMyAqIGUgKyA5ICogaSAtIDkgKiBzICsgMyAqIG87XG4gICAgICAgICAgICAgIHUgPSAzICogaSAtIDMgKiBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKE1hdGguYWJzKGgpIDwgMWUtMTIpIHtcbiAgICAgICAgICAgICAgaWYgKE1hdGguYWJzKGQpIDwgMWUtMTIpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICBwID0gLXUgLyBkO1xuICAgICAgICAgICAgICAwIDwgcCAmJiBwIDwgMSAmJiBsLnB1c2gocCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtID0gZCAqIGQgLSA0ICogdSAqIGg7XG4gICAgICAgICAgICAgIGIgPSBNYXRoLnNxcnQobSk7XG4gICAgICAgICAgICAgIGlmICghKG0gPCAwKSkge1xuICAgICAgICAgICAgICAgIGYgPSAoLWQgKyBiKSAvICgyICogaCk7XG4gICAgICAgICAgICAgICAgMCA8IGYgJiYgZiA8IDEgJiYgbC5wdXNoKGYpO1xuICAgICAgICAgICAgICAgIGcgPSAoLWQgLSBiKSAvICgyICogaCk7XG4gICAgICAgICAgICAgICAgMCA8IGcgJiYgZyA8IDEgJiYgbC5wdXNoKGcpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCB2LFxuICAgICAgICAgICAgeSA9IGwubGVuZ3RoO1xuICAgICAgICAgIGNvbnN0IEEgPSB5O1xuICAgICAgICAgIGZvciAoOyB5LS07KSB7XG4gICAgICAgICAgICBwID0gbFt5XTtcbiAgICAgICAgICAgIHYgPSAxIC0gcDtcbiAgICAgICAgICAgIGNbMF1beV0gPSB2ICogdiAqIHYgKiB0ICsgMyAqIHYgKiB2ICogcCAqIG4gKyAzICogdiAqIHAgKiBwICogciArIHAgKiBwICogcCAqIGE7XG4gICAgICAgICAgICBjWzFdW3ldID0gdiAqIHYgKiB2ICogZSArIDMgKiB2ICogdiAqIHAgKiBpICsgMyAqIHYgKiBwICogcCAqIHMgKyBwICogcCAqIHAgKiBvO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjWzBdW0FdID0gdDtcbiAgICAgICAgICBjWzFdW0FdID0gZTtcbiAgICAgICAgICBjWzBdW0EgKyAxXSA9IGE7XG4gICAgICAgICAgY1sxXVtBICsgMV0gPSBvO1xuICAgICAgICAgIGNbMF0ubGVuZ3RoID0gY1sxXS5sZW5ndGggPSBBICsgMjtcbiAgICAgICAgICByZXR1cm4gW01hdGgubWluKC4uLmNbMF0pLCBNYXRoLm1pbiguLi5jWzFdKSwgTWF0aC5tYXgoLi4uY1swXSksIE1hdGgubWF4KC4uLmNbMV0pXTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGwgPSBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzI4LCA3MTEsIDcxMCwgNzI5LCA3MzMsIDczMSwgNzMwLCA3MzIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgyMjYsIDgyMjQsIDgyMjUsIDgyMzAsIDgyMTIsIDgyMTEsIDQwMiwgODI2MCwgODI0OSwgODI1MCwgODcyMiwgODI0MCwgODIyMiwgODIyMCwgODIyMSwgODIxNiwgODIxNywgODIxOCwgODQ4MiwgNjQyNTcsIDY0MjU4LCAzMjEsIDMzOCwgMzUyLCAzNzYsIDM4MSwgMzA1LCAzMjIsIDMzOSwgMzUzLCAzODIsIDAsIDgzNjRdO1xuICAgICAgZnVuY3Rpb24gc3RyaW5nVG9VVEY4U3RyaW5nKHQpIHtcbiAgICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUodCkpO1xuICAgICAgfVxuICAgICAgZS5Qcm9taXNlQ2FwYWJpbGl0eSA9IChfdCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpLCBjbGFzcyBQcm9taXNlQ2FwYWJpbGl0eSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF90LCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiAhMVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKCh0LCBlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlc29sdmUgPSBlID0+IHtcbiAgICAgICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF90LCAhMCk7XG4gICAgICAgICAgICAgIHQoZSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5yZWplY3QgPSB0ID0+IHtcbiAgICAgICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF90LCAhMCk7XG4gICAgICAgICAgICAgIGUodCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGdldCBzZXR0bGVkKCkge1xuICAgICAgICAgIHJldHVybiBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3QpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxldCBjID0gbnVsbCxcbiAgICAgICAgaCA9IG51bGw7XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIHZhciBpID0gbigzKSxcbiAgICAgICAgciA9IG4oNCksXG4gICAgICAgIHMgPSBuKDY5KSxcbiAgICAgICAgYSA9IG4oNzApLFxuICAgICAgICBvID0gXCJXZWJBc3NlbWJseVwiLFxuICAgICAgICBsID0gcltvXSxcbiAgICAgICAgYyA9IDcgIT09IEVycm9yKFwiZVwiLCB7XG4gICAgICAgICAgY2F1c2U6IDdcbiAgICAgICAgfSkuY2F1c2UsXG4gICAgICAgIGV4cG9ydEdsb2JhbEVycm9yQ2F1c2VXcmFwcGVyID0gZnVuY3Rpb24gZXhwb3J0R2xvYmFsRXJyb3JDYXVzZVdyYXBwZXIodCwgZSkge1xuICAgICAgICAgIHZhciBuID0ge307XG4gICAgICAgICAgblt0XSA9IGEodCwgZSwgYyk7XG4gICAgICAgICAgaSh7XG4gICAgICAgICAgICBnbG9iYWw6ICEwLFxuICAgICAgICAgICAgY29uc3RydWN0b3I6ICEwLFxuICAgICAgICAgICAgYXJpdHk6IDEsXG4gICAgICAgICAgICBmb3JjZWQ6IGNcbiAgICAgICAgICB9LCBuKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXhwb3J0V2ViQXNzZW1ibHlFcnJvckNhdXNlV3JhcHBlciA9IGZ1bmN0aW9uIGV4cG9ydFdlYkFzc2VtYmx5RXJyb3JDYXVzZVdyYXBwZXIodCwgZSkge1xuICAgICAgICAgIGlmIChsICYmIGxbdF0pIHtcbiAgICAgICAgICAgIHZhciBuID0ge307XG4gICAgICAgICAgICBuW3RdID0gYShvICsgXCIuXCIgKyB0LCBlLCBjKTtcbiAgICAgICAgICAgIGkoe1xuICAgICAgICAgICAgICB0YXJnZXQ6IG8sXG4gICAgICAgICAgICAgIHN0YXQ6ICEwLFxuICAgICAgICAgICAgICBjb25zdHJ1Y3RvcjogITAsXG4gICAgICAgICAgICAgIGFyaXR5OiAxLFxuICAgICAgICAgICAgICBmb3JjZWQ6IGNcbiAgICAgICAgICAgIH0sIG4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIGV4cG9ydEdsb2JhbEVycm9yQ2F1c2VXcmFwcGVyKFwiRXJyb3JcIiwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIEVycm9yKGUpIHtcbiAgICAgICAgICByZXR1cm4gcyh0LCB0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICBleHBvcnRHbG9iYWxFcnJvckNhdXNlV3JhcHBlcihcIkV2YWxFcnJvclwiLCBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gRXZhbEVycm9yKGUpIHtcbiAgICAgICAgICByZXR1cm4gcyh0LCB0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICBleHBvcnRHbG9iYWxFcnJvckNhdXNlV3JhcHBlcihcIlJhbmdlRXJyb3JcIiwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIFJhbmdlRXJyb3IoZSkge1xuICAgICAgICAgIHJldHVybiBzKHQsIHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIGV4cG9ydEdsb2JhbEVycm9yQ2F1c2VXcmFwcGVyKFwiUmVmZXJlbmNlRXJyb3JcIiwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIFJlZmVyZW5jZUVycm9yKGUpIHtcbiAgICAgICAgICByZXR1cm4gcyh0LCB0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICBleHBvcnRHbG9iYWxFcnJvckNhdXNlV3JhcHBlcihcIlN5bnRheEVycm9yXCIsIGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBTeW50YXhFcnJvcihlKSB7XG4gICAgICAgICAgcmV0dXJuIHModCwgdGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgZXhwb3J0R2xvYmFsRXJyb3JDYXVzZVdyYXBwZXIoXCJUeXBlRXJyb3JcIiwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIFR5cGVFcnJvcihlKSB7XG4gICAgICAgICAgcmV0dXJuIHModCwgdGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgZXhwb3J0R2xvYmFsRXJyb3JDYXVzZVdyYXBwZXIoXCJVUklFcnJvclwiLCBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gVVJJRXJyb3IoZSkge1xuICAgICAgICAgIHJldHVybiBzKHQsIHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICAgIGV4cG9ydFdlYkFzc2VtYmx5RXJyb3JDYXVzZVdyYXBwZXIoXCJDb21waWxlRXJyb3JcIiwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIENvbXBpbGVFcnJvcihlKSB7XG4gICAgICAgICAgcmV0dXJuIHModCwgdGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgICAgZXhwb3J0V2ViQXNzZW1ibHlFcnJvckNhdXNlV3JhcHBlcihcIkxpbmtFcnJvclwiLCBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gTGlua0Vycm9yKGUpIHtcbiAgICAgICAgICByZXR1cm4gcyh0LCB0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgICBleHBvcnRXZWJBc3NlbWJseUVycm9yQ2F1c2VXcmFwcGVyKFwiUnVudGltZUVycm9yXCIsIGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBSdW50aW1lRXJyb3IoZSkge1xuICAgICAgICAgIHJldHVybiBzKHQsIHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGkgPSBuKDQpLFxuICAgICAgICByID0gbig1KS5mLFxuICAgICAgICBzID0gbig0NCksXG4gICAgICAgIGEgPSBuKDQ4KSxcbiAgICAgICAgbyA9IG4oMzgpLFxuICAgICAgICBsID0gbig1NiksXG4gICAgICAgIGMgPSBuKDY4KTtcbiAgICAgIHQuZXhwb3J0cyA9IGZ1bmN0aW9uICh0LCBlKSB7XG4gICAgICAgIHZhciBuLFxuICAgICAgICAgIGgsXG4gICAgICAgICAgZCxcbiAgICAgICAgICB1LFxuICAgICAgICAgIHAsXG4gICAgICAgICAgZiA9IHQudGFyZ2V0LFxuICAgICAgICAgIGcgPSB0Lmdsb2JhbCxcbiAgICAgICAgICBtID0gdC5zdGF0O1xuICAgICAgICBpZiAobiA9IGcgPyBpIDogbSA/IGlbZl0gfHwgbyhmLCB7fSkgOiAoaVtmXSB8fCB7fSkucHJvdG90eXBlKSBmb3IgKGggaW4gZSkge1xuICAgICAgICAgIHUgPSBlW2hdO1xuICAgICAgICAgIGQgPSB0LmRvbnRDYWxsR2V0U2V0ID8gKHAgPSByKG4sIGgpKSAmJiBwLnZhbHVlIDogbltoXTtcbiAgICAgICAgICBpZiAoIWMoZyA/IGggOiBmICsgKG0gPyBcIi5cIiA6IFwiI1wiKSArIGgsIHQuZm9yY2VkKSAmJiB2b2lkIDAgIT09IGQpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdSA9PSB0eXBlb2YgZCkgY29udGludWU7XG4gICAgICAgICAgICBsKHUsIGQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAodC5zaGFtIHx8IGQgJiYgZC5zaGFtKSAmJiBzKHUsIFwic2hhbVwiLCAhMCk7XG4gICAgICAgICAgYShuLCBoLCB1LCB0KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9LCBmdW5jdGlvbiAodCkge1xuICAgICAgdmFyIGNoZWNrID0gZnVuY3Rpb24gY2hlY2sodCkge1xuICAgICAgICByZXR1cm4gdCAmJiB0Lk1hdGggPT0gTWF0aCAmJiB0O1xuICAgICAgfTtcbiAgICAgIHQuZXhwb3J0cyA9IGNoZWNrKFwib2JqZWN0XCIgPT0gdHlwZW9mIGdsb2JhbFRoaXMgJiYgZ2xvYmFsVGhpcykgfHwgY2hlY2soXCJvYmplY3RcIiA9PSB0eXBlb2Ygd2luZG93ICYmIHdpbmRvdykgfHwgY2hlY2soXCJvYmplY3RcIiA9PSB0eXBlb2Ygc2VsZiAmJiBzZWxmKSB8fCBjaGVjayhcIm9iamVjdFwiID09IHR5cGVvZiBfX3dlYnBhY2tfcmVxdWlyZV9fLmcgJiYgX193ZWJwYWNrX3JlcXVpcmVfXy5nKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSgpIHx8IHRoaXMgfHwgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICB2YXIgaSA9IG4oNiksXG4gICAgICAgIHIgPSBuKDgpLFxuICAgICAgICBzID0gbigxMCksXG4gICAgICAgIGEgPSBuKDExKSxcbiAgICAgICAgbyA9IG4oMTIpLFxuICAgICAgICBsID0gbigxOCksXG4gICAgICAgIGMgPSBuKDM5KSxcbiAgICAgICAgaCA9IG4oNDIpLFxuICAgICAgICBkID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgICAgIGUuZiA9IGkgPyBkIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQsIGUpIHtcbiAgICAgICAgdCA9IG8odCk7XG4gICAgICAgIGUgPSBsKGUpO1xuICAgICAgICBpZiAoaCkgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gZCh0LCBlKTtcbiAgICAgICAgfSBjYXRjaCAodCkge31cbiAgICAgICAgaWYgKGModCwgZSkpIHJldHVybiBhKCFyKHMuZiwgdCwgZSksIHRbZV0pO1xuICAgICAgfTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGkgPSBuKDcpO1xuICAgICAgdC5leHBvcnRzID0gIWkoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gNyAhPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sIDEsIHtcbiAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgIHJldHVybiA3O1xuICAgICAgICAgIH1cbiAgICAgICAgfSlbMV07XG4gICAgICB9KTtcbiAgICB9LCB0ID0+IHtcbiAgICAgIHQuZXhwb3J0cyA9IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuICEhdCgpO1xuICAgICAgICB9IGNhdGNoICh0KSB7XG4gICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICB2YXIgaSA9IG4oOSksXG4gICAgICAgIHIgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcbiAgICAgIHQuZXhwb3J0cyA9IGkgPyByLmJpbmQocikgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiByLmFwcGx5KHIsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICB2YXIgaSA9IG4oNyk7XG4gICAgICB0LmV4cG9ydHMgPSAhaShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB0ID0gZnVuY3Rpb24gKCkge30uYmluZCgpO1xuICAgICAgICByZXR1cm4gXCJmdW5jdGlvblwiICE9IHR5cGVvZiB0IHx8IHQuaGFzT3duUHJvcGVydHkoXCJwcm90b3R5cGVcIik7XG4gICAgICB9KTtcbiAgICB9LCAodCwgZSkgPT4ge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICAgIHZhciBuID0ge30ucHJvcGVydHlJc0VudW1lcmFibGUsXG4gICAgICAgIGkgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFxuICAgICAgICByID0gaSAmJiAhbi5jYWxsKHtcbiAgICAgICAgICAxOiAyXG4gICAgICAgIH0sIDEpO1xuICAgICAgZS5mID0gciA/IGZ1bmN0aW9uIHByb3BlcnR5SXNFbnVtZXJhYmxlKHQpIHtcbiAgICAgICAgdmFyIGUgPSBpKHRoaXMsIHQpO1xuICAgICAgICByZXR1cm4gISFlICYmIGUuZW51bWVyYWJsZTtcbiAgICAgIH0gOiBuO1xuICAgIH0sIHQgPT4ge1xuICAgICAgdC5leHBvcnRzID0gZnVuY3Rpb24gKHQsIGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlbnVtZXJhYmxlOiAhKDEgJiB0KSxcbiAgICAgICAgICBjb25maWd1cmFibGU6ICEoMiAmIHQpLFxuICAgICAgICAgIHdyaXRhYmxlOiAhKDQgJiB0KSxcbiAgICAgICAgICB2YWx1ZTogZVxuICAgICAgICB9O1xuICAgICAgfTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGkgPSBuKDEzKSxcbiAgICAgICAgciA9IG4oMTYpO1xuICAgICAgdC5leHBvcnRzID0gZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIGkocih0KSk7XG4gICAgICB9O1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICB2YXIgaSA9IG4oMTQpLFxuICAgICAgICByID0gbig3KSxcbiAgICAgICAgcyA9IG4oMTUpLFxuICAgICAgICBhID0gT2JqZWN0LFxuICAgICAgICBvID0gaShcIlwiLnNwbGl0KTtcbiAgICAgIHQuZXhwb3J0cyA9IHIoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gIWEoXCJ6XCIpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApO1xuICAgICAgfSkgPyBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gXCJTdHJpbmdcIiA9PSBzKHQpID8gbyh0LCBcIlwiKSA6IGEodCk7XG4gICAgICB9IDogYTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGkgPSBuKDkpLFxuICAgICAgICByID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgICAgICBzID0gci5jYWxsLFxuICAgICAgICBhID0gaSAmJiByLmJpbmQuYmluZChzLCBzKTtcbiAgICAgIHQuZXhwb3J0cyA9IGkgPyBhIDogZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gcy5hcHBseSh0LCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGkgPSBuKDE0KSxcbiAgICAgICAgciA9IGkoe30udG9TdHJpbmcpLFxuICAgICAgICBzID0gaShcIlwiLnNsaWNlKTtcbiAgICAgIHQuZXhwb3J0cyA9IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHJldHVybiBzKHIodCksIDgsIC0xKTtcbiAgICAgIH07XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIHZhciBpID0gbigxNyksXG4gICAgICAgIHIgPSBUeXBlRXJyb3I7XG4gICAgICB0LmV4cG9ydHMgPSBmdW5jdGlvbiAodCkge1xuICAgICAgICBpZiAoaSh0KSkgdGhyb3cgcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgdCk7XG4gICAgICAgIHJldHVybiB0O1xuICAgICAgfTtcbiAgICB9LCB0ID0+IHtcbiAgICAgIHQuZXhwb3J0cyA9IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHJldHVybiBudWxsID09IHQ7XG4gICAgICB9O1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICB2YXIgaSA9IG4oMTkpLFxuICAgICAgICByID0gbigyMyk7XG4gICAgICB0LmV4cG9ydHMgPSBmdW5jdGlvbiAodCkge1xuICAgICAgICB2YXIgZSA9IGkodCwgXCJzdHJpbmdcIik7XG4gICAgICAgIHJldHVybiByKGUpID8gZSA6IGUgKyBcIlwiO1xuICAgICAgfTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGkgPSBuKDgpLFxuICAgICAgICByID0gbigyMCksXG4gICAgICAgIHMgPSBuKDIzKSxcbiAgICAgICAgYSA9IG4oMzApLFxuICAgICAgICBvID0gbigzMyksXG4gICAgICAgIGwgPSBuKDM0KSxcbiAgICAgICAgYyA9IFR5cGVFcnJvcixcbiAgICAgICAgaCA9IGwoXCJ0b1ByaW1pdGl2ZVwiKTtcbiAgICAgIHQuZXhwb3J0cyA9IGZ1bmN0aW9uICh0LCBlKSB7XG4gICAgICAgIGlmICghcih0KSB8fCBzKHQpKSByZXR1cm4gdDtcbiAgICAgICAgdmFyIG4sXG4gICAgICAgICAgbCA9IGEodCwgaCk7XG4gICAgICAgIGlmIChsKSB7XG4gICAgICAgICAgdm9pZCAwID09PSBlICYmIChlID0gXCJkZWZhdWx0XCIpO1xuICAgICAgICAgIG4gPSBpKGwsIHQsIGUpO1xuICAgICAgICAgIGlmICghcihuKSB8fCBzKG4pKSByZXR1cm4gbjtcbiAgICAgICAgICB0aHJvdyBjKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xuICAgICAgICB9XG4gICAgICAgIHZvaWQgMCA9PT0gZSAmJiAoZSA9IFwibnVtYmVyXCIpO1xuICAgICAgICByZXR1cm4gbyh0LCBlKTtcbiAgICAgIH07XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIHZhciBpID0gbigyMSksXG4gICAgICAgIHIgPSBuKDIyKSxcbiAgICAgICAgcyA9IHIuYWxsO1xuICAgICAgdC5leHBvcnRzID0gci5JU19IVE1MRERBID8gZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIFwib2JqZWN0XCIgPT0gdHlwZW9mIHQgPyBudWxsICE9PSB0IDogaSh0KSB8fCB0ID09PSBzO1xuICAgICAgfSA6IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHJldHVybiBcIm9iamVjdFwiID09IHR5cGVvZiB0ID8gbnVsbCAhPT0gdCA6IGkodCk7XG4gICAgICB9O1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICB2YXIgaSA9IG4oMjIpLFxuICAgICAgICByID0gaS5hbGw7XG4gICAgICB0LmV4cG9ydHMgPSBpLklTX0hUTUxEREEgPyBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gXCJmdW5jdGlvblwiID09IHR5cGVvZiB0IHx8IHQgPT09IHI7XG4gICAgICB9IDogZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgdDtcbiAgICAgIH07XG4gICAgfSwgdCA9PiB7XG4gICAgICB2YXIgZSA9IFwib2JqZWN0XCIgPT0gdHlwZW9mIGRvY3VtZW50ICYmIGRvY3VtZW50LmFsbCxcbiAgICAgICAgbiA9IHZvaWQgMCA9PT0gZSAmJiB2b2lkIDAgIT09IGU7XG4gICAgICB0LmV4cG9ydHMgPSB7XG4gICAgICAgIGFsbDogZSxcbiAgICAgICAgSVNfSFRNTEREQTogblxuICAgICAgfTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGkgPSBuKDI0KSxcbiAgICAgICAgciA9IG4oMjEpLFxuICAgICAgICBzID0gbigyNSksXG4gICAgICAgIGEgPSBuKDI2KSxcbiAgICAgICAgbyA9IE9iamVjdDtcbiAgICAgIHQuZXhwb3J0cyA9IGEgPyBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gXCJzeW1ib2xcIiA9PSB0eXBlb2YgdDtcbiAgICAgIH0gOiBmdW5jdGlvbiAodCkge1xuICAgICAgICB2YXIgZSA9IGkoXCJTeW1ib2xcIik7XG4gICAgICAgIHJldHVybiByKGUpICYmIHMoZS5wcm90b3R5cGUsIG8odCkpO1xuICAgICAgfTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGkgPSBuKDQpLFxuICAgICAgICByID0gbigyMSk7XG4gICAgICB0LmV4cG9ydHMgPSBmdW5jdGlvbiAodCwgZSkge1xuICAgICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyAobiA9IGlbdF0sIHIobikgPyBuIDogdm9pZCAwKSA6IGlbdF0gJiYgaVt0XVtlXTtcbiAgICAgICAgdmFyIG47XG4gICAgICB9O1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICB2YXIgaSA9IG4oMTQpO1xuICAgICAgdC5leHBvcnRzID0gaSh7fS5pc1Byb3RvdHlwZU9mKTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGkgPSBuKDI3KTtcbiAgICAgIHQuZXhwb3J0cyA9IGkgJiYgIVN5bWJvbC5zaGFtICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvcjtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGkgPSBuKDI4KSxcbiAgICAgICAgciA9IG4oNyksXG4gICAgICAgIHMgPSBuKDQpLlN0cmluZztcbiAgICAgIHQuZXhwb3J0cyA9ICEhT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAmJiAhcihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB0ID0gU3ltYm9sKCk7XG4gICAgICAgIHJldHVybiAhcyh0KSB8fCAhKE9iamVjdCh0KSBpbnN0YW5jZW9mIFN5bWJvbCkgfHwgIVN5bWJvbC5zaGFtICYmIGkgJiYgaSA8IDQxO1xuICAgICAgfSk7XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIHZhciBpLFxuICAgICAgICByLFxuICAgICAgICBzID0gbig0KSxcbiAgICAgICAgYSA9IG4oMjkpLFxuICAgICAgICBvID0gcy5wcm9jZXNzLFxuICAgICAgICBsID0gcy5EZW5vLFxuICAgICAgICBjID0gbyAmJiBvLnZlcnNpb25zIHx8IGwgJiYgbC52ZXJzaW9uLFxuICAgICAgICBoID0gYyAmJiBjLnY4O1xuICAgICAgaCAmJiAociA9IChpID0gaC5zcGxpdChcIi5cIikpWzBdID4gMCAmJiBpWzBdIDwgNCA/IDEgOiArKGlbMF0gKyBpWzFdKSk7XG4gICAgICAhciAmJiBhICYmICghKGkgPSBhLm1hdGNoKC9FZGdlXFwvKFxcZCspLykpIHx8IGlbMV0gPj0gNzQpICYmIChpID0gYS5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLykpICYmIChyID0gK2lbMV0pO1xuICAgICAgdC5leHBvcnRzID0gcjtcbiAgICB9LCB0ID0+IHtcbiAgICAgIHQuZXhwb3J0cyA9IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIG5hdmlnYXRvciAmJiBTdHJpbmcobmF2aWdhdG9yLnVzZXJBZ2VudCkgfHwgXCJcIjtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGkgPSBuKDMxKSxcbiAgICAgICAgciA9IG4oMTcpO1xuICAgICAgdC5leHBvcnRzID0gZnVuY3Rpb24gKHQsIGUpIHtcbiAgICAgICAgdmFyIG4gPSB0W2VdO1xuICAgICAgICByZXR1cm4gcihuKSA/IHZvaWQgMCA6IGkobik7XG4gICAgICB9O1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICB2YXIgaSA9IG4oMjEpLFxuICAgICAgICByID0gbigzMiksXG4gICAgICAgIHMgPSBUeXBlRXJyb3I7XG4gICAgICB0LmV4cG9ydHMgPSBmdW5jdGlvbiAodCkge1xuICAgICAgICBpZiAoaSh0KSkgcmV0dXJuIHQ7XG4gICAgICAgIHRocm93IHMocih0KSArIFwiIGlzIG5vdCBhIGZ1bmN0aW9uXCIpO1xuICAgICAgfTtcbiAgICB9LCB0ID0+IHtcbiAgICAgIHZhciBlID0gU3RyaW5nO1xuICAgICAgdC5leHBvcnRzID0gZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gZSh0KTtcbiAgICAgICAgfSBjYXRjaCAodCkge1xuICAgICAgICAgIHJldHVybiBcIk9iamVjdFwiO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICB2YXIgaSA9IG4oOCksXG4gICAgICAgIHIgPSBuKDIxKSxcbiAgICAgICAgcyA9IG4oMjApLFxuICAgICAgICBhID0gVHlwZUVycm9yO1xuICAgICAgdC5leHBvcnRzID0gZnVuY3Rpb24gKHQsIGUpIHtcbiAgICAgICAgdmFyIG4sIG87XG4gICAgICAgIGlmIChcInN0cmluZ1wiID09PSBlICYmIHIobiA9IHQudG9TdHJpbmcpICYmICFzKG8gPSBpKG4sIHQpKSkgcmV0dXJuIG87XG4gICAgICAgIGlmIChyKG4gPSB0LnZhbHVlT2YpICYmICFzKG8gPSBpKG4sIHQpKSkgcmV0dXJuIG87XG4gICAgICAgIGlmIChcInN0cmluZ1wiICE9PSBlICYmIHIobiA9IHQudG9TdHJpbmcpICYmICFzKG8gPSBpKG4sIHQpKSkgcmV0dXJuIG87XG4gICAgICAgIHRocm93IGEoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG4gICAgICB9O1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICB2YXIgaSA9IG4oNCksXG4gICAgICAgIHIgPSBuKDM1KSxcbiAgICAgICAgcyA9IG4oMzkpLFxuICAgICAgICBhID0gbig0MSksXG4gICAgICAgIG8gPSBuKDI3KSxcbiAgICAgICAgbCA9IG4oMjYpLFxuICAgICAgICBjID0gaS5TeW1ib2wsXG4gICAgICAgIGggPSByKFwid2tzXCIpLFxuICAgICAgICBkID0gbCA/IGMuZm9yIHx8IGMgOiBjICYmIGMud2l0aG91dFNldHRlciB8fCBhO1xuICAgICAgdC5leHBvcnRzID0gZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcyhoLCB0KSB8fCAoaFt0XSA9IG8gJiYgcyhjLCB0KSA/IGNbdF0gOiBkKFwiU3ltYm9sLlwiICsgdCkpO1xuICAgICAgICByZXR1cm4gaFt0XTtcbiAgICAgIH07XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIHZhciBpID0gbigzNiksXG4gICAgICAgIHIgPSBuKDM3KTtcbiAgICAgICh0LmV4cG9ydHMgPSBmdW5jdGlvbiAodCwgZSkge1xuICAgICAgICByZXR1cm4gclt0XSB8fCAoclt0XSA9IHZvaWQgMCAhPT0gZSA/IGUgOiB7fSk7XG4gICAgICB9KShcInZlcnNpb25zXCIsIFtdKS5wdXNoKHtcbiAgICAgICAgdmVyc2lvbjogXCIzLjMxLjFcIixcbiAgICAgICAgbW9kZTogaSA/IFwicHVyZVwiIDogXCJnbG9iYWxcIixcbiAgICAgICAgY29weXJpZ2h0OiBcIsKpIDIwMTQtMjAyMyBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KVwiLFxuICAgICAgICBsaWNlbnNlOiBcImh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2Jsb2IvdjMuMzEuMS9MSUNFTlNFXCIsXG4gICAgICAgIHNvdXJjZTogXCJodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qc1wiXG4gICAgICB9KTtcbiAgICB9LCB0ID0+IHtcbiAgICAgIHQuZXhwb3J0cyA9ICExO1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICB2YXIgaSA9IG4oNCksXG4gICAgICAgIHIgPSBuKDM4KSxcbiAgICAgICAgcyA9IFwiX19jb3JlLWpzX3NoYXJlZF9fXCIsXG4gICAgICAgIGEgPSBpW3NdIHx8IHIocywge30pO1xuICAgICAgdC5leHBvcnRzID0gYTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGkgPSBuKDQpLFxuICAgICAgICByID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuICAgICAgdC5leHBvcnRzID0gZnVuY3Rpb24gKHQsIGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByKGksIHQsIHtcbiAgICAgICAgICAgIHZhbHVlOiBlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiAhMCxcbiAgICAgICAgICAgIHdyaXRhYmxlOiAhMFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChuKSB7XG4gICAgICAgICAgaVt0XSA9IGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGU7XG4gICAgICB9O1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICB2YXIgaSA9IG4oMTQpLFxuICAgICAgICByID0gbig0MCksXG4gICAgICAgIHMgPSBpKHt9Lmhhc093blByb3BlcnR5KTtcbiAgICAgIHQuZXhwb3J0cyA9IE9iamVjdC5oYXNPd24gfHwgZnVuY3Rpb24gaGFzT3duKHQsIGUpIHtcbiAgICAgICAgcmV0dXJuIHMocih0KSwgZSk7XG4gICAgICB9O1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICB2YXIgaSA9IG4oMTYpLFxuICAgICAgICByID0gT2JqZWN0O1xuICAgICAgdC5leHBvcnRzID0gZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIHIoaSh0KSk7XG4gICAgICB9O1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICB2YXIgaSA9IG4oMTQpLFxuICAgICAgICByID0gMCxcbiAgICAgICAgcyA9IE1hdGgucmFuZG9tKCksXG4gICAgICAgIGEgPSBpKDEuLnRvU3RyaW5nKTtcbiAgICAgIHQuZXhwb3J0cyA9IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHJldHVybiBcIlN5bWJvbChcIiArICh2b2lkIDAgPT09IHQgPyBcIlwiIDogdCkgKyBcIilfXCIgKyBhKCsrciArIHMsIDM2KTtcbiAgICAgIH07XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIHZhciBpID0gbig2KSxcbiAgICAgICAgciA9IG4oNyksXG4gICAgICAgIHMgPSBuKDQzKTtcbiAgICAgIHQuZXhwb3J0cyA9ICFpICYmICFyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIDcgIT0gT2JqZWN0LmRlZmluZVByb3BlcnR5KHMoXCJkaXZcIiksIFwiYVwiLCB7XG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICByZXR1cm4gNztcbiAgICAgICAgICB9XG4gICAgICAgIH0pLmE7XG4gICAgICB9KTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGkgPSBuKDQpLFxuICAgICAgICByID0gbigyMCksXG4gICAgICAgIHMgPSBpLmRvY3VtZW50LFxuICAgICAgICBhID0gcihzKSAmJiByKHMuY3JlYXRlRWxlbWVudCk7XG4gICAgICB0LmV4cG9ydHMgPSBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gYSA/IHMuY3JlYXRlRWxlbWVudCh0KSA6IHt9O1xuICAgICAgfTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGkgPSBuKDYpLFxuICAgICAgICByID0gbig0NSksXG4gICAgICAgIHMgPSBuKDExKTtcbiAgICAgIHQuZXhwb3J0cyA9IGkgPyBmdW5jdGlvbiAodCwgZSwgbikge1xuICAgICAgICByZXR1cm4gci5mKHQsIGUsIHMoMSwgbikpO1xuICAgICAgfSA6IGZ1bmN0aW9uICh0LCBlLCBuKSB7XG4gICAgICAgIHRbZV0gPSBuO1xuICAgICAgICByZXR1cm4gdDtcbiAgICAgIH07XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIHZhciBpID0gbig2KSxcbiAgICAgICAgciA9IG4oNDIpLFxuICAgICAgICBzID0gbig0NiksXG4gICAgICAgIGEgPSBuKDQ3KSxcbiAgICAgICAgbyA9IG4oMTgpLFxuICAgICAgICBsID0gVHlwZUVycm9yLFxuICAgICAgICBjID0gT2JqZWN0LmRlZmluZVByb3BlcnR5LFxuICAgICAgICBoID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixcbiAgICAgICAgZCA9IFwiZW51bWVyYWJsZVwiLFxuICAgICAgICB1ID0gXCJjb25maWd1cmFibGVcIixcbiAgICAgICAgcCA9IFwid3JpdGFibGVcIjtcbiAgICAgIGUuZiA9IGkgPyBzID8gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkodCwgZSwgbikge1xuICAgICAgICBhKHQpO1xuICAgICAgICBlID0gbyhlKTtcbiAgICAgICAgYShuKTtcbiAgICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgdCAmJiBcInByb3RvdHlwZVwiID09PSBlICYmIFwidmFsdWVcIiBpbiBuICYmIHAgaW4gbiAmJiAhbltwXSkge1xuICAgICAgICAgIHZhciBpID0gaCh0LCBlKTtcbiAgICAgICAgICBpZiAoaSAmJiBpW3BdKSB7XG4gICAgICAgICAgICB0W2VdID0gbi52YWx1ZTtcbiAgICAgICAgICAgIG4gPSB7XG4gICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdSBpbiBuID8gblt1XSA6IGlbdV0sXG4gICAgICAgICAgICAgIGVudW1lcmFibGU6IGQgaW4gbiA/IG5bZF0gOiBpW2RdLFxuICAgICAgICAgICAgICB3cml0YWJsZTogITFcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjKHQsIGUsIG4pO1xuICAgICAgfSA6IGMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eSh0LCBlLCBuKSB7XG4gICAgICAgIGEodCk7XG4gICAgICAgIGUgPSBvKGUpO1xuICAgICAgICBhKG4pO1xuICAgICAgICBpZiAocikgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gYyh0LCBlLCBuKTtcbiAgICAgICAgfSBjYXRjaCAodCkge31cbiAgICAgICAgaWYgKFwiZ2V0XCIgaW4gbiB8fCBcInNldFwiIGluIG4pIHRocm93IGwoXCJBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZFwiKTtcbiAgICAgICAgXCJ2YWx1ZVwiIGluIG4gJiYgKHRbZV0gPSBuLnZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgICB9O1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICB2YXIgaSA9IG4oNiksXG4gICAgICAgIHIgPSBuKDcpO1xuICAgICAgdC5leHBvcnRzID0gaSAmJiByKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIDQyICE9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7fSwgXCJwcm90b3R5cGVcIiwge1xuICAgICAgICAgIHZhbHVlOiA0MixcbiAgICAgICAgICB3cml0YWJsZTogITFcbiAgICAgICAgfSkucHJvdG90eXBlO1xuICAgICAgfSk7XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIHZhciBpID0gbigyMCksXG4gICAgICAgIHIgPSBTdHJpbmcsXG4gICAgICAgIHMgPSBUeXBlRXJyb3I7XG4gICAgICB0LmV4cG9ydHMgPSBmdW5jdGlvbiAodCkge1xuICAgICAgICBpZiAoaSh0KSkgcmV0dXJuIHQ7XG4gICAgICAgIHRocm93IHMocih0KSArIFwiIGlzIG5vdCBhbiBvYmplY3RcIik7XG4gICAgICB9O1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICB2YXIgaSA9IG4oMjEpLFxuICAgICAgICByID0gbig0NSksXG4gICAgICAgIHMgPSBuKDQ5KSxcbiAgICAgICAgYSA9IG4oMzgpO1xuICAgICAgdC5leHBvcnRzID0gZnVuY3Rpb24gKHQsIGUsIG4sIG8pIHtcbiAgICAgICAgbyB8fCAobyA9IHt9KTtcbiAgICAgICAgdmFyIGwgPSBvLmVudW1lcmFibGUsXG4gICAgICAgICAgYyA9IHZvaWQgMCAhPT0gby5uYW1lID8gby5uYW1lIDogZTtcbiAgICAgICAgaShuKSAmJiBzKG4sIGMsIG8pO1xuICAgICAgICBpZiAoby5nbG9iYWwpIGwgPyB0W2VdID0gbiA6IGEoZSwgbik7ZWxzZSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG8udW5zYWZlID8gdFtlXSAmJiAobCA9ICEwKSA6IGRlbGV0ZSB0W2VdO1xuICAgICAgICAgIH0gY2F0Y2ggKHQpIHt9XG4gICAgICAgICAgbCA/IHRbZV0gPSBuIDogci5mKHQsIGUsIHtcbiAgICAgICAgICAgIHZhbHVlOiBuLFxuICAgICAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6ICFvLm5vbkNvbmZpZ3VyYWJsZSxcbiAgICAgICAgICAgIHdyaXRhYmxlOiAhby5ub25Xcml0YWJsZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgICAgfTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGkgPSBuKDE0KSxcbiAgICAgICAgciA9IG4oNyksXG4gICAgICAgIHMgPSBuKDIxKSxcbiAgICAgICAgYSA9IG4oMzkpLFxuICAgICAgICBvID0gbig2KSxcbiAgICAgICAgbCA9IG4oNTApLkNPTkZJR1VSQUJMRSxcbiAgICAgICAgYyA9IG4oNTEpLFxuICAgICAgICBoID0gbig1MiksXG4gICAgICAgIGQgPSBoLmVuZm9yY2UsXG4gICAgICAgIHUgPSBoLmdldCxcbiAgICAgICAgcCA9IFN0cmluZyxcbiAgICAgICAgZiA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSxcbiAgICAgICAgZyA9IGkoXCJcIi5zbGljZSksXG4gICAgICAgIG0gPSBpKFwiXCIucmVwbGFjZSksXG4gICAgICAgIGIgPSBpKFtdLmpvaW4pLFxuICAgICAgICB2ID0gbyAmJiAhcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIDggIT09IGYoZnVuY3Rpb24gKCkge30sIFwibGVuZ3RoXCIsIHtcbiAgICAgICAgICAgIHZhbHVlOiA4XG4gICAgICAgICAgfSkubGVuZ3RoO1xuICAgICAgICB9KSxcbiAgICAgICAgeSA9IFN0cmluZyhTdHJpbmcpLnNwbGl0KFwiU3RyaW5nXCIpLFxuICAgICAgICBBID0gdC5leHBvcnRzID0gZnVuY3Rpb24gKHQsIGUsIG4pIHtcbiAgICAgICAgICBcIlN5bWJvbChcIiA9PT0gZyhwKGUpLCAwLCA3KSAmJiAoZSA9IFwiW1wiICsgbShwKGUpLCAvXlN5bWJvbFxcKChbXildKilcXCkvLCBcIiQxXCIpICsgXCJdXCIpO1xuICAgICAgICAgIG4gJiYgbi5nZXR0ZXIgJiYgKGUgPSBcImdldCBcIiArIGUpO1xuICAgICAgICAgIG4gJiYgbi5zZXR0ZXIgJiYgKGUgPSBcInNldCBcIiArIGUpO1xuICAgICAgICAgICghYSh0LCBcIm5hbWVcIikgfHwgbCAmJiB0Lm5hbWUgIT09IGUpICYmIChvID8gZih0LCBcIm5hbWVcIiwge1xuICAgICAgICAgICAgdmFsdWU6IGUsXG4gICAgICAgICAgICBjb25maWd1cmFibGU6ICEwXG4gICAgICAgICAgfSkgOiB0Lm5hbWUgPSBlKTtcbiAgICAgICAgICB2ICYmIG4gJiYgYShuLCBcImFyaXR5XCIpICYmIHQubGVuZ3RoICE9PSBuLmFyaXR5ICYmIGYodCwgXCJsZW5ndGhcIiwge1xuICAgICAgICAgICAgdmFsdWU6IG4uYXJpdHlcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbiAmJiBhKG4sIFwiY29uc3RydWN0b3JcIikgJiYgbi5jb25zdHJ1Y3RvciA/IG8gJiYgZih0LCBcInByb3RvdHlwZVwiLCB7XG4gICAgICAgICAgICAgIHdyaXRhYmxlOiAhMVxuICAgICAgICAgICAgfSkgOiB0LnByb3RvdHlwZSAmJiAodC5wcm90b3R5cGUgPSB2b2lkIDApO1xuICAgICAgICAgIH0gY2F0Y2ggKHQpIHt9XG4gICAgICAgICAgdmFyIGkgPSBkKHQpO1xuICAgICAgICAgIGEoaSwgXCJzb3VyY2VcIikgfHwgKGkuc291cmNlID0gYih5LCBcInN0cmluZ1wiID09IHR5cGVvZiBlID8gZSA6IFwiXCIpKTtcbiAgICAgICAgICByZXR1cm4gdDtcbiAgICAgICAgfTtcbiAgICAgIEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IEEoZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiBzKHRoaXMpICYmIHUodGhpcykuc291cmNlIHx8IGModGhpcyk7XG4gICAgICB9LCBcInRvU3RyaW5nXCIpO1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICB2YXIgaSA9IG4oNiksXG4gICAgICAgIHIgPSBuKDM5KSxcbiAgICAgICAgcyA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICAgICAgYSA9IGkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixcbiAgICAgICAgbyA9IHIocywgXCJuYW1lXCIpLFxuICAgICAgICBsID0gbyAmJiBcInNvbWV0aGluZ1wiID09PSBmdW5jdGlvbiBzb21ldGhpbmcoKSB7fS5uYW1lLFxuICAgICAgICBjID0gbyAmJiAoIWkgfHwgaSAmJiBhKHMsIFwibmFtZVwiKS5jb25maWd1cmFibGUpO1xuICAgICAgdC5leHBvcnRzID0ge1xuICAgICAgICBFWElTVFM6IG8sXG4gICAgICAgIFBST1BFUjogbCxcbiAgICAgICAgQ09ORklHVVJBQkxFOiBjXG4gICAgICB9O1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICB2YXIgaSA9IG4oMTQpLFxuICAgICAgICByID0gbigyMSksXG4gICAgICAgIHMgPSBuKDM3KSxcbiAgICAgICAgYSA9IGkoRnVuY3Rpb24udG9TdHJpbmcpO1xuICAgICAgcihzLmluc3BlY3RTb3VyY2UpIHx8IChzLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gYSh0KTtcbiAgICAgIH0pO1xuICAgICAgdC5leHBvcnRzID0gcy5pbnNwZWN0U291cmNlO1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICB2YXIgaSxcbiAgICAgICAgcixcbiAgICAgICAgcyxcbiAgICAgICAgYSA9IG4oNTMpLFxuICAgICAgICBvID0gbig0KSxcbiAgICAgICAgbCA9IG4oMjApLFxuICAgICAgICBjID0gbig0NCksXG4gICAgICAgIGggPSBuKDM5KSxcbiAgICAgICAgZCA9IG4oMzcpLFxuICAgICAgICB1ID0gbig1NCksXG4gICAgICAgIHAgPSBuKDU1KSxcbiAgICAgICAgZiA9IFwiT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWRcIixcbiAgICAgICAgZyA9IG8uVHlwZUVycm9yLFxuICAgICAgICBtID0gby5XZWFrTWFwO1xuICAgICAgaWYgKGEgfHwgZC5zdGF0ZSkge1xuICAgICAgICB2YXIgYiA9IGQuc3RhdGUgfHwgKGQuc3RhdGUgPSBuZXcgbSgpKTtcbiAgICAgICAgYi5nZXQgPSBiLmdldDtcbiAgICAgICAgYi5oYXMgPSBiLmhhcztcbiAgICAgICAgYi5zZXQgPSBiLnNldDtcbiAgICAgICAgaSA9IGZ1bmN0aW9uIGkodCwgZSkge1xuICAgICAgICAgIGlmIChiLmhhcyh0KSkgdGhyb3cgZyhmKTtcbiAgICAgICAgICBlLmZhY2FkZSA9IHQ7XG4gICAgICAgICAgYi5zZXQodCwgZSk7XG4gICAgICAgICAgcmV0dXJuIGU7XG4gICAgICAgIH07XG4gICAgICAgIHIgPSBmdW5jdGlvbiByKHQpIHtcbiAgICAgICAgICByZXR1cm4gYi5nZXQodCkgfHwge307XG4gICAgICAgIH07XG4gICAgICAgIHMgPSBmdW5jdGlvbiBzKHQpIHtcbiAgICAgICAgICByZXR1cm4gYi5oYXModCk7XG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgdiA9IHUoXCJzdGF0ZVwiKTtcbiAgICAgICAgcFt2XSA9ICEwO1xuICAgICAgICBpID0gZnVuY3Rpb24gaSh0LCBlKSB7XG4gICAgICAgICAgaWYgKGgodCwgdikpIHRocm93IGcoZik7XG4gICAgICAgICAgZS5mYWNhZGUgPSB0O1xuICAgICAgICAgIGModCwgdiwgZSk7XG4gICAgICAgICAgcmV0dXJuIGU7XG4gICAgICAgIH07XG4gICAgICAgIHIgPSBmdW5jdGlvbiByKHQpIHtcbiAgICAgICAgICByZXR1cm4gaCh0LCB2KSA/IHRbdl0gOiB7fTtcbiAgICAgICAgfTtcbiAgICAgICAgcyA9IGZ1bmN0aW9uIHModCkge1xuICAgICAgICAgIHJldHVybiBoKHQsIHYpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdC5leHBvcnRzID0ge1xuICAgICAgICBzZXQ6IGksXG4gICAgICAgIGdldDogcixcbiAgICAgICAgaGFzOiBzLFxuICAgICAgICBlbmZvcmNlOiBmdW5jdGlvbiBlbmZvcmNlKHQpIHtcbiAgICAgICAgICByZXR1cm4gcyh0KSA/IHIodCkgOiBpKHQsIHt9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0dGVyRm9yOiBmdW5jdGlvbiBnZXR0ZXJGb3IodCkge1xuICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgdmFyIG47XG4gICAgICAgICAgICBpZiAoIWwoZSkgfHwgKG4gPSByKGUpKS50eXBlICE9PSB0KSB0aHJvdyBnKFwiSW5jb21wYXRpYmxlIHJlY2VpdmVyLCBcIiArIHQgKyBcIiByZXF1aXJlZFwiKTtcbiAgICAgICAgICAgIHJldHVybiBuO1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIHZhciBpID0gbig0KSxcbiAgICAgICAgciA9IG4oMjEpLFxuICAgICAgICBzID0gaS5XZWFrTWFwO1xuICAgICAgdC5leHBvcnRzID0gcihzKSAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoU3RyaW5nKHMpKTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGkgPSBuKDM1KSxcbiAgICAgICAgciA9IG4oNDEpLFxuICAgICAgICBzID0gaShcImtleXNcIik7XG4gICAgICB0LmV4cG9ydHMgPSBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gc1t0XSB8fCAoc1t0XSA9IHIodCkpO1xuICAgICAgfTtcbiAgICB9LCB0ID0+IHtcbiAgICAgIHQuZXhwb3J0cyA9IHt9O1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICB2YXIgaSA9IG4oMzkpLFxuICAgICAgICByID0gbig1NyksXG4gICAgICAgIHMgPSBuKDUpLFxuICAgICAgICBhID0gbig0NSk7XG4gICAgICB0LmV4cG9ydHMgPSBmdW5jdGlvbiAodCwgZSwgbikge1xuICAgICAgICBmb3IgKHZhciBvID0gcihlKSwgbCA9IGEuZiwgYyA9IHMuZiwgaCA9IDA7IGggPCBvLmxlbmd0aDsgaCsrKSB7XG4gICAgICAgICAgdmFyIGQgPSBvW2hdO1xuICAgICAgICAgIGkodCwgZCkgfHwgbiAmJiBpKG4sIGQpIHx8IGwodCwgZCwgYyhlLCBkKSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIHZhciBpID0gbigyNCksXG4gICAgICAgIHIgPSBuKDE0KSxcbiAgICAgICAgcyA9IG4oNTgpLFxuICAgICAgICBhID0gbig2NyksXG4gICAgICAgIG8gPSBuKDQ3KSxcbiAgICAgICAgbCA9IHIoW10uY29uY2F0KTtcbiAgICAgIHQuZXhwb3J0cyA9IGkoXCJSZWZsZWN0XCIsIFwib3duS2V5c1wiKSB8fCBmdW5jdGlvbiBvd25LZXlzKHQpIHtcbiAgICAgICAgdmFyIGUgPSBzLmYobyh0KSksXG4gICAgICAgICAgbiA9IGEuZjtcbiAgICAgICAgcmV0dXJuIG4gPyBsKGUsIG4odCkpIDogZTtcbiAgICAgIH07XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIHZhciBpID0gbig1OSksXG4gICAgICAgIHIgPSBuKDY2KS5jb25jYXQoXCJsZW5ndGhcIiwgXCJwcm90b3R5cGVcIik7XG4gICAgICBlLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKHQpIHtcbiAgICAgICAgcmV0dXJuIGkodCwgcik7XG4gICAgICB9O1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICB2YXIgaSA9IG4oMTQpLFxuICAgICAgICByID0gbigzOSksXG4gICAgICAgIHMgPSBuKDEyKSxcbiAgICAgICAgYSA9IG4oNjApLmluZGV4T2YsXG4gICAgICAgIG8gPSBuKDU1KSxcbiAgICAgICAgbCA9IGkoW10ucHVzaCk7XG4gICAgICB0LmV4cG9ydHMgPSBmdW5jdGlvbiAodCwgZSkge1xuICAgICAgICB2YXIgbixcbiAgICAgICAgICBpID0gcyh0KSxcbiAgICAgICAgICBjID0gMCxcbiAgICAgICAgICBoID0gW107XG4gICAgICAgIGZvciAobiBpbiBpKSAhcihvLCBuKSAmJiByKGksIG4pICYmIGwoaCwgbik7XG4gICAgICAgIGZvciAoOyBlLmxlbmd0aCA+IGM7KSByKGksIG4gPSBlW2MrK10pICYmICh+YShoLCBuKSB8fCBsKGgsIG4pKTtcbiAgICAgICAgcmV0dXJuIGg7XG4gICAgICB9O1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICB2YXIgaSA9IG4oMTIpLFxuICAgICAgICByID0gbig2MSksXG4gICAgICAgIHMgPSBuKDY0KSxcbiAgICAgICAgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gY3JlYXRlTWV0aG9kKHQpIHtcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGUsIG4sIGEpIHtcbiAgICAgICAgICAgIHZhciBvLFxuICAgICAgICAgICAgICBsID0gaShlKSxcbiAgICAgICAgICAgICAgYyA9IHMobCksXG4gICAgICAgICAgICAgIGggPSByKGEsIGMpO1xuICAgICAgICAgICAgaWYgKHQgJiYgbiAhPSBuKSB7XG4gICAgICAgICAgICAgIGZvciAoOyBjID4gaDspIGlmICgobyA9IGxbaCsrXSkgIT0gbykgcmV0dXJuICEwO1xuICAgICAgICAgICAgfSBlbHNlIGZvciAoOyBjID4gaDsgaCsrKSBpZiAoKHQgfHwgaCBpbiBsKSAmJiBsW2hdID09PSBuKSByZXR1cm4gdCB8fCBoIHx8IDA7XG4gICAgICAgICAgICByZXR1cm4gIXQgJiYgLTE7XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgIHQuZXhwb3J0cyA9IHtcbiAgICAgICAgaW5jbHVkZXM6IGNyZWF0ZU1ldGhvZCghMCksXG4gICAgICAgIGluZGV4T2Y6IGNyZWF0ZU1ldGhvZCghMSlcbiAgICAgIH07XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIHZhciBpID0gbig2MiksXG4gICAgICAgIHIgPSBNYXRoLm1heCxcbiAgICAgICAgcyA9IE1hdGgubWluO1xuICAgICAgdC5leHBvcnRzID0gZnVuY3Rpb24gKHQsIGUpIHtcbiAgICAgICAgdmFyIG4gPSBpKHQpO1xuICAgICAgICByZXR1cm4gbiA8IDAgPyByKG4gKyBlLCAwKSA6IHMobiwgZSk7XG4gICAgICB9O1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICB2YXIgaSA9IG4oNjMpO1xuICAgICAgdC5leHBvcnRzID0gZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgdmFyIGUgPSArdDtcbiAgICAgICAgcmV0dXJuIGUgIT0gZSB8fCAwID09PSBlID8gMCA6IGkoZSk7XG4gICAgICB9O1xuICAgIH0sIHQgPT4ge1xuICAgICAgdmFyIGUgPSBNYXRoLmNlaWwsXG4gICAgICAgIG4gPSBNYXRoLmZsb29yO1xuICAgICAgdC5leHBvcnRzID0gTWF0aC50cnVuYyB8fCBmdW5jdGlvbiB0cnVuYyh0KSB7XG4gICAgICAgIHZhciBpID0gK3Q7XG4gICAgICAgIHJldHVybiAoaSA+IDAgPyBuIDogZSkoaSk7XG4gICAgICB9O1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICB2YXIgaSA9IG4oNjUpO1xuICAgICAgdC5leHBvcnRzID0gZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIGkodC5sZW5ndGgpO1xuICAgICAgfTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGkgPSBuKDYyKSxcbiAgICAgICAgciA9IE1hdGgubWluO1xuICAgICAgdC5leHBvcnRzID0gZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgcmV0dXJuIHQgPiAwID8gcihpKHQpLCA5MDA3MTk5MjU0NzQwOTkxKSA6IDA7XG4gICAgICB9O1xuICAgIH0sIHQgPT4ge1xuICAgICAgdC5leHBvcnRzID0gW1wiY29uc3RydWN0b3JcIiwgXCJoYXNPd25Qcm9wZXJ0eVwiLCBcImlzUHJvdG90eXBlT2ZcIiwgXCJwcm9wZXJ0eUlzRW51bWVyYWJsZVwiLCBcInRvTG9jYWxlU3RyaW5nXCIsIFwidG9TdHJpbmdcIiwgXCJ2YWx1ZU9mXCJdO1xuICAgIH0sICh0LCBlKSA9PiB7XG4gICAgICBlLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICB2YXIgaSA9IG4oNyksXG4gICAgICAgIHIgPSBuKDIxKSxcbiAgICAgICAgcyA9IC8jfFxcLnByb3RvdHlwZVxcLi8sXG4gICAgICAgIGlzRm9yY2VkID0gZnVuY3Rpb24gaXNGb3JjZWQodCwgZSkge1xuICAgICAgICAgIHZhciBuID0gb1thKHQpXTtcbiAgICAgICAgICByZXR1cm4gbiA9PSBjIHx8IG4gIT0gbCAmJiAocihlKSA/IGkoZSkgOiAhIWUpO1xuICAgICAgICB9LFxuICAgICAgICBhID0gaXNGb3JjZWQubm9ybWFsaXplID0gZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICByZXR1cm4gU3RyaW5nKHQpLnJlcGxhY2UocywgXCIuXCIpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIG8gPSBpc0ZvcmNlZC5kYXRhID0ge30sXG4gICAgICAgIGwgPSBpc0ZvcmNlZC5OQVRJVkUgPSBcIk5cIixcbiAgICAgICAgYyA9IGlzRm9yY2VkLlBPTFlGSUxMID0gXCJQXCI7XG4gICAgICB0LmV4cG9ydHMgPSBpc0ZvcmNlZDtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGkgPSBuKDkpLFxuICAgICAgICByID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgICAgICBzID0gci5hcHBseSxcbiAgICAgICAgYSA9IHIuY2FsbDtcbiAgICAgIHQuZXhwb3J0cyA9IFwib2JqZWN0XCIgPT0gdHlwZW9mIFJlZmxlY3QgJiYgUmVmbGVjdC5hcHBseSB8fCAoaSA/IGEuYmluZChzKSA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGEuYXBwbHkocywgYXJndW1lbnRzKTtcbiAgICAgIH0pO1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgICAgdmFyIGkgPSBuKDI0KSxcbiAgICAgICAgciA9IG4oMzkpLFxuICAgICAgICBzID0gbig0NCksXG4gICAgICAgIGEgPSBuKDI1KSxcbiAgICAgICAgbyA9IG4oNzEpLFxuICAgICAgICBsID0gbig1NiksXG4gICAgICAgIGMgPSBuKDc0KSxcbiAgICAgICAgaCA9IG4oNzUpLFxuICAgICAgICBkID0gbig3NiksXG4gICAgICAgIHUgPSBuKDgwKSxcbiAgICAgICAgcCA9IG4oODEpLFxuICAgICAgICBmID0gbig2KSxcbiAgICAgICAgZyA9IG4oMzYpO1xuICAgICAgdC5leHBvcnRzID0gZnVuY3Rpb24gKHQsIGUsIG4sIG0pIHtcbiAgICAgICAgdmFyIGIgPSBcInN0YWNrVHJhY2VMaW1pdFwiLFxuICAgICAgICAgIHYgPSBtID8gMiA6IDEsXG4gICAgICAgICAgeSA9IHQuc3BsaXQoXCIuXCIpLFxuICAgICAgICAgIEEgPSB5W3kubGVuZ3RoIC0gMV0sXG4gICAgICAgICAgXyA9IGkuYXBwbHkobnVsbCwgeSk7XG4gICAgICAgIGlmIChfKSB7XG4gICAgICAgICAgdmFyIFMgPSBfLnByb3RvdHlwZTtcbiAgICAgICAgICAhZyAmJiByKFMsIFwiY2F1c2VcIikgJiYgZGVsZXRlIFMuY2F1c2U7XG4gICAgICAgICAgaWYgKCFuKSByZXR1cm4gXztcbiAgICAgICAgICB2YXIgRSA9IGkoXCJFcnJvclwiKSxcbiAgICAgICAgICAgIHggPSBlKGZ1bmN0aW9uICh0LCBlKSB7XG4gICAgICAgICAgICAgIHZhciBuID0gZChtID8gZSA6IHQsIHZvaWQgMCksXG4gICAgICAgICAgICAgICAgaSA9IG0gPyBuZXcgXyh0KSA6IG5ldyBfKCk7XG4gICAgICAgICAgICAgIHZvaWQgMCAhPT0gbiAmJiBzKGksIFwibWVzc2FnZVwiLCBuKTtcbiAgICAgICAgICAgICAgcChpLCB4LCBpLnN0YWNrLCAyKTtcbiAgICAgICAgICAgICAgdGhpcyAmJiBhKFMsIHRoaXMpICYmIGgoaSwgdGhpcywgeCk7XG4gICAgICAgICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiB2ICYmIHUoaSwgYXJndW1lbnRzW3ZdKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB4LnByb3RvdHlwZSA9IFM7XG4gICAgICAgICAgaWYgKFwiRXJyb3JcIiAhPT0gQSkgbyA/IG8oeCwgRSkgOiBsKHgsIEUsIHtcbiAgICAgICAgICAgIG5hbWU6ICEwXG4gICAgICAgICAgfSk7ZWxzZSBpZiAoZiAmJiBiIGluIF8pIHtcbiAgICAgICAgICAgIGMoeCwgXywgYik7XG4gICAgICAgICAgICBjKHgsIF8sIFwicHJlcGFyZVN0YWNrVHJhY2VcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGwoeCwgXyk7XG4gICAgICAgICAgaWYgKCFnKSB0cnkge1xuICAgICAgICAgICAgUy5uYW1lICE9PSBBICYmIHMoUywgXCJuYW1lXCIsIEEpO1xuICAgICAgICAgICAgUy5jb25zdHJ1Y3RvciA9IHg7XG4gICAgICAgICAgfSBjYXRjaCAodCkge31cbiAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGkgPSBuKDcyKSxcbiAgICAgICAgciA9IG4oNDcpLFxuICAgICAgICBzID0gbig3Myk7XG4gICAgICB0LmV4cG9ydHMgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKFwiX19wcm90b19fXCIgaW4ge30gPyBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB0LFxuICAgICAgICAgIGUgPSAhMSxcbiAgICAgICAgICBuID0ge307XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgKHQgPSBpKE9iamVjdC5wcm90b3R5cGUsIFwiX19wcm90b19fXCIsIFwic2V0XCIpKShuLCBbXSk7XG4gICAgICAgICAgZSA9IG4gaW5zdGFuY2VvZiBBcnJheTtcbiAgICAgICAgfSBjYXRjaCAodCkge31cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKG4sIGkpIHtcbiAgICAgICAgICByKG4pO1xuICAgICAgICAgIHMoaSk7XG4gICAgICAgICAgZSA/IHQobiwgaSkgOiBuLl9fcHJvdG9fXyA9IGk7XG4gICAgICAgICAgcmV0dXJuIG47XG4gICAgICAgIH07XG4gICAgICB9KCkgOiB2b2lkIDApO1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICB2YXIgaSA9IG4oMTQpLFxuICAgICAgICByID0gbigzMSk7XG4gICAgICB0LmV4cG9ydHMgPSBmdW5jdGlvbiAodCwgZSwgbikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBpKHIoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCBlKVtuXSkpO1xuICAgICAgICB9IGNhdGNoICh0KSB7fVxuICAgICAgfTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGkgPSBuKDIxKSxcbiAgICAgICAgciA9IFN0cmluZyxcbiAgICAgICAgcyA9IFR5cGVFcnJvcjtcbiAgICAgIHQuZXhwb3J0cyA9IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIGlmIChcIm9iamVjdFwiID09IHR5cGVvZiB0IHx8IGkodCkpIHJldHVybiB0O1xuICAgICAgICB0aHJvdyBzKFwiQ2FuJ3Qgc2V0IFwiICsgcih0KSArIFwiIGFzIGEgcHJvdG90eXBlXCIpO1xuICAgICAgfTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGkgPSBuKDQ1KS5mO1xuICAgICAgdC5leHBvcnRzID0gZnVuY3Rpb24gKHQsIGUsIG4pIHtcbiAgICAgICAgbiBpbiB0IHx8IGkodCwgbiwge1xuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogITAsXG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICByZXR1cm4gZVtuXTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNldDogZnVuY3Rpb24gc2V0KHQpIHtcbiAgICAgICAgICAgIGVbbl0gPSB0O1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICB2YXIgaSA9IG4oMjEpLFxuICAgICAgICByID0gbigyMCksXG4gICAgICAgIHMgPSBuKDcxKTtcbiAgICAgIHQuZXhwb3J0cyA9IGZ1bmN0aW9uICh0LCBlLCBuKSB7XG4gICAgICAgIHZhciBhLCBvO1xuICAgICAgICBzICYmIGkoYSA9IGUuY29uc3RydWN0b3IpICYmIGEgIT09IG4gJiYgcihvID0gYS5wcm90b3R5cGUpICYmIG8gIT09IG4ucHJvdG90eXBlICYmIHModCwgbyk7XG4gICAgICAgIHJldHVybiB0O1xuICAgICAgfTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGkgPSBuKDc3KTtcbiAgICAgIHQuZXhwb3J0cyA9IGZ1bmN0aW9uICh0LCBlKSB7XG4gICAgICAgIHJldHVybiB2b2lkIDAgPT09IHQgPyBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IFwiXCIgOiBlIDogaSh0KTtcbiAgICAgIH07XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIHZhciBpID0gbig3OCksXG4gICAgICAgIHIgPSBTdHJpbmc7XG4gICAgICB0LmV4cG9ydHMgPSBmdW5jdGlvbiAodCkge1xuICAgICAgICBpZiAoXCJTeW1ib2xcIiA9PT0gaSh0KSkgdGhyb3cgVHlwZUVycm9yKFwiQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmdcIik7XG4gICAgICAgIHJldHVybiByKHQpO1xuICAgICAgfTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGkgPSBuKDc5KSxcbiAgICAgICAgciA9IG4oMjEpLFxuICAgICAgICBzID0gbigxNSksXG4gICAgICAgIGEgPSBuKDM0KShcInRvU3RyaW5nVGFnXCIpLFxuICAgICAgICBvID0gT2JqZWN0LFxuICAgICAgICBsID0gXCJBcmd1bWVudHNcIiA9PSBzKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gYXJndW1lbnRzO1xuICAgICAgICB9KCkpO1xuICAgICAgdC5leHBvcnRzID0gaSA/IHMgOiBmdW5jdGlvbiAodCkge1xuICAgICAgICB2YXIgZSwgbiwgaTtcbiAgICAgICAgcmV0dXJuIHZvaWQgMCA9PT0gdCA/IFwiVW5kZWZpbmVkXCIgOiBudWxsID09PSB0ID8gXCJOdWxsXCIgOiBcInN0cmluZ1wiID09IHR5cGVvZiAobiA9IGZ1bmN0aW9uICh0LCBlKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiB0W2VdO1xuICAgICAgICAgIH0gY2F0Y2ggKHQpIHt9XG4gICAgICAgIH0oZSA9IG8odCksIGEpKSA/IG4gOiBsID8gcyhlKSA6IFwiT2JqZWN0XCIgPT0gKGkgPSBzKGUpKSAmJiByKGUuY2FsbGVlKSA/IFwiQXJndW1lbnRzXCIgOiBpO1xuICAgICAgfTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGkgPSB7fTtcbiAgICAgIGlbbigzNCkoXCJ0b1N0cmluZ1RhZ1wiKV0gPSBcInpcIjtcbiAgICAgIHQuZXhwb3J0cyA9IFwiW29iamVjdCB6XVwiID09PSBTdHJpbmcoaSk7XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIHZhciBpID0gbigyMCksXG4gICAgICAgIHIgPSBuKDQ0KTtcbiAgICAgIHQuZXhwb3J0cyA9IGZ1bmN0aW9uICh0LCBlKSB7XG4gICAgICAgIGkoZSkgJiYgXCJjYXVzZVwiIGluIGUgJiYgcih0LCBcImNhdXNlXCIsIGUuY2F1c2UpO1xuICAgICAgfTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGkgPSBuKDQ0KSxcbiAgICAgICAgciA9IG4oODIpLFxuICAgICAgICBzID0gbig4MyksXG4gICAgICAgIGEgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcbiAgICAgIHQuZXhwb3J0cyA9IGZ1bmN0aW9uICh0LCBlLCBuLCBvKSB7XG4gICAgICAgIHMgJiYgKGEgPyBhKHQsIGUpIDogaSh0LCBcInN0YWNrXCIsIHIobiwgbykpKTtcbiAgICAgIH07XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIHZhciBpID0gbigxNCksXG4gICAgICAgIHIgPSBFcnJvcixcbiAgICAgICAgcyA9IGkoXCJcIi5yZXBsYWNlKSxcbiAgICAgICAgYSA9IFN0cmluZyhyKFwienhjYXNkXCIpLnN0YWNrKSxcbiAgICAgICAgbyA9IC9cXG5cXHMqYXQgW146XSo6W15cXG5dKi8sXG4gICAgICAgIGwgPSBvLnRlc3QoYSk7XG4gICAgICB0LmV4cG9ydHMgPSBmdW5jdGlvbiAodCwgZSkge1xuICAgICAgICBpZiAobCAmJiBcInN0cmluZ1wiID09IHR5cGVvZiB0ICYmICFyLnByZXBhcmVTdGFja1RyYWNlKSBmb3IgKDsgZS0tOykgdCA9IHModCwgbywgXCJcIik7XG4gICAgICAgIHJldHVybiB0O1xuICAgICAgfTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGkgPSBuKDcpLFxuICAgICAgICByID0gbigxMSk7XG4gICAgICB0LmV4cG9ydHMgPSAhaShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB0ID0gRXJyb3IoXCJhXCIpO1xuICAgICAgICBpZiAoIShcInN0YWNrXCIgaW4gdCkpIHJldHVybiAhMDtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwic3RhY2tcIiwgcigxLCA3KSk7XG4gICAgICAgIHJldHVybiA3ICE9PSB0LnN0YWNrO1xuICAgICAgfSk7XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgICB2YXIgaSA9IG4oNDgpLFxuICAgICAgICByID0gbigxNCksXG4gICAgICAgIHMgPSBuKDc3KSxcbiAgICAgICAgYSA9IG4oODUpLFxuICAgICAgICBvID0gVVJMU2VhcmNoUGFyYW1zLFxuICAgICAgICBsID0gby5wcm90b3R5cGUsXG4gICAgICAgIGMgPSByKGwuYXBwZW5kKSxcbiAgICAgICAgaCA9IHIobC5kZWxldGUpLFxuICAgICAgICBkID0gcihsLmZvckVhY2gpLFxuICAgICAgICB1ID0gcihbXS5wdXNoKSxcbiAgICAgICAgcCA9IG5ldyBvKFwiYT0xJmE9MlwiKTtcbiAgICAgIHAuZGVsZXRlKFwiYVwiLCAxKTtcbiAgICAgIHAgKyBcIlwiICE9IFwiYT0yXCIgJiYgaShsLCBcImRlbGV0ZVwiLCBmdW5jdGlvbiAodCkge1xuICAgICAgICB2YXIgZSA9IGFyZ3VtZW50cy5sZW5ndGgsXG4gICAgICAgICAgbiA9IGUgPCAyID8gdm9pZCAwIDogYXJndW1lbnRzWzFdO1xuICAgICAgICBpZiAoZSAmJiB2b2lkIDAgPT09IG4pIHJldHVybiBoKHRoaXMsIHQpO1xuICAgICAgICB2YXIgaSA9IFtdO1xuICAgICAgICBkKHRoaXMsIGZ1bmN0aW9uICh0LCBlKSB7XG4gICAgICAgICAgdShpLCB7XG4gICAgICAgICAgICBrZXk6IGUsXG4gICAgICAgICAgICB2YWx1ZTogdFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgYShlLCAxKTtcbiAgICAgICAgZm9yICh2YXIgciwgbyA9IHModCksIGwgPSBzKG4pLCBwID0gMCwgZiA9IDAsIGcgPSAhMSwgbSA9IGkubGVuZ3RoOyBwIDwgbTspIHtcbiAgICAgICAgICByID0gaVtwKytdO1xuICAgICAgICAgIGlmIChnIHx8IHIua2V5ID09PSBvKSB7XG4gICAgICAgICAgICBnID0gITA7XG4gICAgICAgICAgICBoKHRoaXMsIHIua2V5KTtcbiAgICAgICAgICB9IGVsc2UgZisrO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoOyBmIDwgbTspIChyID0gaVtmKytdKS5rZXkgPT09IG8gJiYgci52YWx1ZSA9PT0gbCB8fCBjKHRoaXMsIHIua2V5LCByLnZhbHVlKTtcbiAgICAgIH0sIHtcbiAgICAgICAgZW51bWVyYWJsZTogITAsXG4gICAgICAgIHVuc2FmZTogITBcbiAgICAgIH0pO1xuICAgIH0sIHQgPT4ge1xuICAgICAgdmFyIGUgPSBUeXBlRXJyb3I7XG4gICAgICB0LmV4cG9ydHMgPSBmdW5jdGlvbiAodCwgbikge1xuICAgICAgICBpZiAodCA8IG4pIHRocm93IGUoXCJOb3QgZW5vdWdoIGFyZ3VtZW50c1wiKTtcbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgICB9O1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgICAgdmFyIGkgPSBuKDQ4KSxcbiAgICAgICAgciA9IG4oMTQpLFxuICAgICAgICBzID0gbig3NyksXG4gICAgICAgIGEgPSBuKDg1KSxcbiAgICAgICAgbyA9IFVSTFNlYXJjaFBhcmFtcyxcbiAgICAgICAgbCA9IG8ucHJvdG90eXBlLFxuICAgICAgICBjID0gcihsLmdldEFsbCksXG4gICAgICAgIGggPSByKGwuaGFzKTtcbiAgICAgIG5ldyBvKFwiYT0xXCIpLmhhcyhcImFcIiwgMikgJiYgaShsLCBcImhhc1wiLCBmdW5jdGlvbiBoYXModCkge1xuICAgICAgICB2YXIgZSA9IGFyZ3VtZW50cy5sZW5ndGgsXG4gICAgICAgICAgbiA9IGUgPCAyID8gdm9pZCAwIDogYXJndW1lbnRzWzFdO1xuICAgICAgICBpZiAoZSAmJiB2b2lkIDAgPT09IG4pIHJldHVybiBoKHRoaXMsIHQpO1xuICAgICAgICB2YXIgaSA9IGModGhpcywgdCk7XG4gICAgICAgIGEoZSwgMSk7XG4gICAgICAgIGZvciAodmFyIHIgPSBzKG4pLCBvID0gMDsgbyA8IGkubGVuZ3RoOykgaWYgKGlbbysrXSA9PT0gcikgcmV0dXJuICEwO1xuICAgICAgICByZXR1cm4gITE7XG4gICAgICB9LCB7XG4gICAgICAgIGVudW1lcmFibGU6ICEwLFxuICAgICAgICB1bnNhZmU6ICEwXG4gICAgICB9KTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICAgIHZhciBpID0gbig2KSxcbiAgICAgICAgciA9IG4oMTQpLFxuICAgICAgICBzID0gbig4OCksXG4gICAgICAgIGEgPSBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLFxuICAgICAgICBvID0gcihhLmZvckVhY2gpO1xuICAgICAgaSAmJiAhKFwic2l6ZVwiIGluIGEpICYmIHMoYSwgXCJzaXplXCIsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiBzaXplKCkge1xuICAgICAgICAgIHZhciB0ID0gMDtcbiAgICAgICAgICBvKHRoaXMsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHQrKztcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gdDtcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlndXJhYmxlOiAhMCxcbiAgICAgICAgZW51bWVyYWJsZTogITBcbiAgICAgIH0pO1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICB2YXIgaSA9IG4oNDkpLFxuICAgICAgICByID0gbig0NSk7XG4gICAgICB0LmV4cG9ydHMgPSBmdW5jdGlvbiAodCwgZSwgbikge1xuICAgICAgICBuLmdldCAmJiBpKG4uZ2V0LCBlLCB7XG4gICAgICAgICAgZ2V0dGVyOiAhMFxuICAgICAgICB9KTtcbiAgICAgICAgbi5zZXQgJiYgaShuLnNldCwgZSwge1xuICAgICAgICAgIHNldHRlcjogITBcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByLmYodCwgZSwgbik7XG4gICAgICB9O1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgICAgdmFyIGkgPSBuKDMpLFxuICAgICAgICByID0gbig0MCksXG4gICAgICAgIHMgPSBuKDY0KSxcbiAgICAgICAgYSA9IG4oOTApLFxuICAgICAgICBvID0gbig5Mik7XG4gICAgICBpKHtcbiAgICAgICAgdGFyZ2V0OiBcIkFycmF5XCIsXG4gICAgICAgIHByb3RvOiAhMCxcbiAgICAgICAgYXJpdHk6IDEsXG4gICAgICAgIGZvcmNlZDogbig3KShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIDQyOTQ5NjcyOTcgIT09IFtdLnB1c2guY2FsbCh7XG4gICAgICAgICAgICBsZW5ndGg6IDQyOTQ5NjcyOTZcbiAgICAgICAgICB9LCAxKTtcbiAgICAgICAgfSkgfHwgIWZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCBcImxlbmd0aFwiLCB7XG4gICAgICAgICAgICAgIHdyaXRhYmxlOiAhMVxuICAgICAgICAgICAgfSkucHVzaCgpO1xuICAgICAgICAgIH0gY2F0Y2ggKHQpIHtcbiAgICAgICAgICAgIHJldHVybiB0IGluc3RhbmNlb2YgVHlwZUVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfSgpXG4gICAgICB9LCB7XG4gICAgICAgIHB1c2g6IGZ1bmN0aW9uIHB1c2godCkge1xuICAgICAgICAgIHZhciBlID0gcih0aGlzKSxcbiAgICAgICAgICAgIG4gPSBzKGUpLFxuICAgICAgICAgICAgaSA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgICAgbyhuICsgaSk7XG4gICAgICAgICAgZm9yICh2YXIgbCA9IDA7IGwgPCBpOyBsKyspIHtcbiAgICAgICAgICAgIGVbbl0gPSBhcmd1bWVudHNbbF07XG4gICAgICAgICAgICBuKys7XG4gICAgICAgICAgfVxuICAgICAgICAgIGEoZSwgbik7XG4gICAgICAgICAgcmV0dXJuIG47XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgICAgdmFyIGkgPSBuKDYpLFxuICAgICAgICByID0gbig5MSksXG4gICAgICAgIHMgPSBUeXBlRXJyb3IsXG4gICAgICAgIGEgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFxuICAgICAgICBvID0gaSAmJiAhZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmICh2b2lkIDAgIT09IHRoaXMpIHJldHVybiAhMDtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCBcImxlbmd0aFwiLCB7XG4gICAgICAgICAgICAgIHdyaXRhYmxlOiAhMVxuICAgICAgICAgICAgfSkubGVuZ3RoID0gMTtcbiAgICAgICAgICB9IGNhdGNoICh0KSB7XG4gICAgICAgICAgICByZXR1cm4gdCBpbnN0YW5jZW9mIFR5cGVFcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH0oKTtcbiAgICAgIHQuZXhwb3J0cyA9IG8gPyBmdW5jdGlvbiAodCwgZSkge1xuICAgICAgICBpZiAocih0KSAmJiAhYSh0LCBcImxlbmd0aFwiKS53cml0YWJsZSkgdGhyb3cgcyhcIkNhbm5vdCBzZXQgcmVhZCBvbmx5IC5sZW5ndGhcIik7XG4gICAgICAgIHJldHVybiB0Lmxlbmd0aCA9IGU7XG4gICAgICB9IDogZnVuY3Rpb24gKHQsIGUpIHtcbiAgICAgICAgcmV0dXJuIHQubGVuZ3RoID0gZTtcbiAgICAgIH07XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIHZhciBpID0gbigxNSk7XG4gICAgICB0LmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkodCkge1xuICAgICAgICByZXR1cm4gXCJBcnJheVwiID09IGkodCk7XG4gICAgICB9O1xuICAgIH0sIHQgPT4ge1xuICAgICAgdmFyIGUgPSBUeXBlRXJyb3I7XG4gICAgICB0LmV4cG9ydHMgPSBmdW5jdGlvbiAodCkge1xuICAgICAgICBpZiAodCA+IDkwMDcxOTkyNTQ3NDA5OTEpIHRocm93IGUoXCJNYXhpbXVtIGFsbG93ZWQgaW5kZXggZXhjZWVkZWRcIik7XG4gICAgICAgIHJldHVybiB0O1xuICAgICAgfTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICAgIHZhciBpID0gbig5NCksXG4gICAgICAgIHIgPSBuKDk4KS5maW5kTGFzdCxcbiAgICAgICAgcyA9IGkuYVR5cGVkQXJyYXk7XG4gICAgICAoMCwgaS5leHBvcnRUeXBlZEFycmF5TWV0aG9kKShcImZpbmRMYXN0XCIsIGZ1bmN0aW9uIGZpbmRMYXN0KHQpIHtcbiAgICAgICAgcmV0dXJuIHIocyh0aGlzKSwgdCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB2b2lkIDApO1xuICAgICAgfSk7XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgICB2YXIgaSxcbiAgICAgICAgcixcbiAgICAgICAgcyxcbiAgICAgICAgYSA9IG4oOTUpLFxuICAgICAgICBvID0gbig2KSxcbiAgICAgICAgbCA9IG4oNCksXG4gICAgICAgIGMgPSBuKDIxKSxcbiAgICAgICAgaCA9IG4oMjApLFxuICAgICAgICBkID0gbigzOSksXG4gICAgICAgIHUgPSBuKDc4KSxcbiAgICAgICAgcCA9IG4oMzIpLFxuICAgICAgICBmID0gbig0NCksXG4gICAgICAgIGcgPSBuKDQ4KSxcbiAgICAgICAgbSA9IG4oODgpLFxuICAgICAgICBiID0gbigyNSksXG4gICAgICAgIHYgPSBuKDk2KSxcbiAgICAgICAgeSA9IG4oNzEpLFxuICAgICAgICBBID0gbigzNCksXG4gICAgICAgIF8gPSBuKDQxKSxcbiAgICAgICAgUyA9IG4oNTIpLFxuICAgICAgICBFID0gUy5lbmZvcmNlLFxuICAgICAgICB4ID0gUy5nZXQsXG4gICAgICAgIHcgPSBsLkludDhBcnJheSxcbiAgICAgICAgQyA9IHcgJiYgdy5wcm90b3R5cGUsXG4gICAgICAgIFQgPSBsLlVpbnQ4Q2xhbXBlZEFycmF5LFxuICAgICAgICBQID0gVCAmJiBULnByb3RvdHlwZSxcbiAgICAgICAgayA9IHcgJiYgdih3KSxcbiAgICAgICAgTSA9IEMgJiYgdihDKSxcbiAgICAgICAgUiA9IE9iamVjdC5wcm90b3R5cGUsXG4gICAgICAgIEkgPSBsLlR5cGVFcnJvcixcbiAgICAgICAgRCA9IEEoXCJ0b1N0cmluZ1RhZ1wiKSxcbiAgICAgICAgTyA9IF8oXCJUWVBFRF9BUlJBWV9UQUdcIiksXG4gICAgICAgIEwgPSBcIlR5cGVkQXJyYXlDb25zdHJ1Y3RvclwiLFxuICAgICAgICBOID0gYSAmJiAhIXkgJiYgXCJPcGVyYVwiICE9PSB1KGwub3BlcmEpLFxuICAgICAgICBCID0gITEsXG4gICAgICAgIGogPSB7XG4gICAgICAgICAgSW50OEFycmF5OiAxLFxuICAgICAgICAgIFVpbnQ4QXJyYXk6IDEsXG4gICAgICAgICAgVWludDhDbGFtcGVkQXJyYXk6IDEsXG4gICAgICAgICAgSW50MTZBcnJheTogMixcbiAgICAgICAgICBVaW50MTZBcnJheTogMixcbiAgICAgICAgICBJbnQzMkFycmF5OiA0LFxuICAgICAgICAgIFVpbnQzMkFycmF5OiA0LFxuICAgICAgICAgIEZsb2F0MzJBcnJheTogNCxcbiAgICAgICAgICBGbG9hdDY0QXJyYXk6IDhcbiAgICAgICAgfSxcbiAgICAgICAgVSA9IHtcbiAgICAgICAgICBCaWdJbnQ2NEFycmF5OiA4LFxuICAgICAgICAgIEJpZ1VpbnQ2NEFycmF5OiA4XG4gICAgICAgIH0sXG4gICAgICAgIGdldFR5cGVkQXJyYXlDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIGdldFR5cGVkQXJyYXlDb25zdHJ1Y3Rvcih0KSB7XG4gICAgICAgICAgdmFyIGUgPSB2KHQpO1xuICAgICAgICAgIGlmIChoKGUpKSB7XG4gICAgICAgICAgICB2YXIgbiA9IHgoZSk7XG4gICAgICAgICAgICByZXR1cm4gbiAmJiBkKG4sIEwpID8gbltMXSA6IGdldFR5cGVkQXJyYXlDb25zdHJ1Y3RvcihlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGlzVHlwZWRBcnJheSA9IGZ1bmN0aW9uIGlzVHlwZWRBcnJheSh0KSB7XG4gICAgICAgICAgaWYgKCFoKHQpKSByZXR1cm4gITE7XG4gICAgICAgICAgdmFyIGUgPSB1KHQpO1xuICAgICAgICAgIHJldHVybiBkKGosIGUpIHx8IGQoVSwgZSk7XG4gICAgICAgIH07XG4gICAgICBmb3IgKGkgaW4gaikgKHMgPSAociA9IGxbaV0pICYmIHIucHJvdG90eXBlKSA/IEUocylbTF0gPSByIDogTiA9ICExO1xuICAgICAgZm9yIChpIGluIFUpIChzID0gKHIgPSBsW2ldKSAmJiByLnByb3RvdHlwZSkgJiYgKEUocylbTF0gPSByKTtcbiAgICAgIGlmICghTiB8fCAhYyhrKSB8fCBrID09PSBGdW5jdGlvbi5wcm90b3R5cGUpIHtcbiAgICAgICAgayA9IGZ1bmN0aW9uIFR5cGVkQXJyYXkoKSB7XG4gICAgICAgICAgdGhyb3cgSShcIkluY29ycmVjdCBpbnZvY2F0aW9uXCIpO1xuICAgICAgICB9O1xuICAgICAgICBpZiAoTikgZm9yIChpIGluIGopIGxbaV0gJiYgeShsW2ldLCBrKTtcbiAgICAgIH1cbiAgICAgIGlmICghTiB8fCAhTSB8fCBNID09PSBSKSB7XG4gICAgICAgIE0gPSBrLnByb3RvdHlwZTtcbiAgICAgICAgaWYgKE4pIGZvciAoaSBpbiBqKSBsW2ldICYmIHkobFtpXS5wcm90b3R5cGUsIE0pO1xuICAgICAgfVxuICAgICAgTiAmJiB2KFApICE9PSBNICYmIHkoUCwgTSk7XG4gICAgICBpZiAobyAmJiAhZChNLCBEKSkge1xuICAgICAgICBCID0gITA7XG4gICAgICAgIG0oTSwgRCwge1xuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogITAsXG4gICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICByZXR1cm4gaCh0aGlzKSA/IHRoaXNbT10gOiB2b2lkIDA7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZm9yIChpIGluIGopIGxbaV0gJiYgZihsW2ldLCBPLCBpKTtcbiAgICAgIH1cbiAgICAgIHQuZXhwb3J0cyA9IHtcbiAgICAgICAgTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUzogTixcbiAgICAgICAgVFlQRURfQVJSQVlfVEFHOiBCICYmIE8sXG4gICAgICAgIGFUeXBlZEFycmF5OiBmdW5jdGlvbiBhVHlwZWRBcnJheSh0KSB7XG4gICAgICAgICAgaWYgKGlzVHlwZWRBcnJheSh0KSkgcmV0dXJuIHQ7XG4gICAgICAgICAgdGhyb3cgSShcIlRhcmdldCBpcyBub3QgYSB0eXBlZCBhcnJheVwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgYVR5cGVkQXJyYXlDb25zdHJ1Y3RvcjogZnVuY3Rpb24gYVR5cGVkQXJyYXlDb25zdHJ1Y3Rvcih0KSB7XG4gICAgICAgICAgaWYgKGModCkgJiYgKCF5IHx8IGIoaywgdCkpKSByZXR1cm4gdDtcbiAgICAgICAgICB0aHJvdyBJKHAodCkgKyBcIiBpcyBub3QgYSB0eXBlZCBhcnJheSBjb25zdHJ1Y3RvclwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXhwb3J0VHlwZWRBcnJheU1ldGhvZDogZnVuY3Rpb24gZXhwb3J0VHlwZWRBcnJheU1ldGhvZCh0LCBlLCBuLCBpKSB7XG4gICAgICAgICAgaWYgKG8pIHtcbiAgICAgICAgICAgIGlmIChuKSBmb3IgKHZhciByIGluIGopIHtcbiAgICAgICAgICAgICAgdmFyIHMgPSBsW3JdO1xuICAgICAgICAgICAgICBpZiAocyAmJiBkKHMucHJvdG90eXBlLCB0KSkgdHJ5IHtcbiAgICAgICAgICAgICAgICBkZWxldGUgcy5wcm90b3R5cGVbdF07XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKG4pIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgcy5wcm90b3R5cGVbdF0gPSBlO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKHQpIHt9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIE1bdF0gJiYgIW4gfHwgZyhNLCB0LCBuID8gZSA6IE4gJiYgQ1t0XSB8fCBlLCBpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGV4cG9ydFR5cGVkQXJyYXlTdGF0aWNNZXRob2Q6IGZ1bmN0aW9uIGV4cG9ydFR5cGVkQXJyYXlTdGF0aWNNZXRob2QodCwgZSwgbikge1xuICAgICAgICAgIHZhciBpLCByO1xuICAgICAgICAgIGlmIChvKSB7XG4gICAgICAgICAgICBpZiAoeSkge1xuICAgICAgICAgICAgICBpZiAobikgZm9yIChpIGluIGopIGlmICgociA9IGxbaV0pICYmIGQociwgdCkpIHRyeSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHJbdF07XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKHQpIHt9XG4gICAgICAgICAgICAgIGlmIChrW3RdICYmICFuKSByZXR1cm47XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGcoaywgdCwgbiA/IGUgOiBOICYmIGtbdF0gfHwgZSk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKHQpIHt9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGkgaW4gaikgIShyID0gbFtpXSkgfHwgclt0XSAmJiAhbiB8fCBnKHIsIHQsIGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ2V0VHlwZWRBcnJheUNvbnN0cnVjdG9yOiBnZXRUeXBlZEFycmF5Q29uc3RydWN0b3IsXG4gICAgICAgIGlzVmlldzogZnVuY3Rpb24gaXNWaWV3KHQpIHtcbiAgICAgICAgICBpZiAoIWgodCkpIHJldHVybiAhMTtcbiAgICAgICAgICB2YXIgZSA9IHUodCk7XG4gICAgICAgICAgcmV0dXJuIFwiRGF0YVZpZXdcIiA9PT0gZSB8fCBkKGosIGUpIHx8IGQoVSwgZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGlzVHlwZWRBcnJheTogaXNUeXBlZEFycmF5LFxuICAgICAgICBUeXBlZEFycmF5OiBrLFxuICAgICAgICBUeXBlZEFycmF5UHJvdG90eXBlOiBNXG4gICAgICB9O1xuICAgIH0sIHQgPT4ge1xuICAgICAgdC5leHBvcnRzID0gXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgQXJyYXlCdWZmZXIgJiYgXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgRGF0YVZpZXc7XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIHZhciBpID0gbigzOSksXG4gICAgICAgIHIgPSBuKDIxKSxcbiAgICAgICAgcyA9IG4oNDApLFxuICAgICAgICBhID0gbig1NCksXG4gICAgICAgIG8gPSBuKDk3KSxcbiAgICAgICAgbCA9IGEoXCJJRV9QUk9UT1wiKSxcbiAgICAgICAgYyA9IE9iamVjdCxcbiAgICAgICAgaCA9IGMucHJvdG90eXBlO1xuICAgICAgdC5leHBvcnRzID0gbyA/IGMuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiAodCkge1xuICAgICAgICB2YXIgZSA9IHModCk7XG4gICAgICAgIGlmIChpKGUsIGwpKSByZXR1cm4gZVtsXTtcbiAgICAgICAgdmFyIG4gPSBlLmNvbnN0cnVjdG9yO1xuICAgICAgICByZXR1cm4gcihuKSAmJiBlIGluc3RhbmNlb2YgbiA/IG4ucHJvdG90eXBlIDogZSBpbnN0YW5jZW9mIGMgPyBoIDogbnVsbDtcbiAgICAgIH07XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIHZhciBpID0gbig3KTtcbiAgICAgIHQuZXhwb3J0cyA9ICFpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZnVuY3Rpb24gRigpIHt9XG4gICAgICAgIEYucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgRigpKSAhPT0gRi5wcm90b3R5cGU7XG4gICAgICB9KTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGkgPSBuKDk5KSxcbiAgICAgICAgciA9IG4oMTMpLFxuICAgICAgICBzID0gbig0MCksXG4gICAgICAgIGEgPSBuKDY0KSxcbiAgICAgICAgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gY3JlYXRlTWV0aG9kKHQpIHtcbiAgICAgICAgICB2YXIgZSA9IDEgPT0gdDtcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG4sIG8sIGwpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGMsIGggPSBzKG4pLCBkID0gcihoKSwgdSA9IGkobywgbCksIHAgPSBhKGQpOyBwLS0gPiAwOykgaWYgKHUoYyA9IGRbcF0sIHAsIGgpKSBzd2l0Y2ggKHQpIHtcbiAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIHJldHVybiBjO1xuICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZSA/IC0xIDogdm9pZCAwO1xuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICB0LmV4cG9ydHMgPSB7XG4gICAgICAgIGZpbmRMYXN0OiBjcmVhdGVNZXRob2QoMCksXG4gICAgICAgIGZpbmRMYXN0SW5kZXg6IGNyZWF0ZU1ldGhvZCgxKVxuICAgICAgfTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGkgPSBuKDEwMCksXG4gICAgICAgIHIgPSBuKDMxKSxcbiAgICAgICAgcyA9IG4oOSksXG4gICAgICAgIGEgPSBpKGkuYmluZCk7XG4gICAgICB0LmV4cG9ydHMgPSBmdW5jdGlvbiAodCwgZSkge1xuICAgICAgICByKHQpO1xuICAgICAgICByZXR1cm4gdm9pZCAwID09PSBlID8gdCA6IHMgPyBhKHQsIGUpIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiB0LmFwcGx5KGUsIGFyZ3VtZW50cyk7XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICB2YXIgaSA9IG4oMTUpLFxuICAgICAgICByID0gbigxNCk7XG4gICAgICB0LmV4cG9ydHMgPSBmdW5jdGlvbiAodCkge1xuICAgICAgICBpZiAoXCJGdW5jdGlvblwiID09PSBpKHQpKSByZXR1cm4gcih0KTtcbiAgICAgIH07XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgICB2YXIgaSA9IG4oOTQpLFxuICAgICAgICByID0gbig5OCkuZmluZExhc3RJbmRleCxcbiAgICAgICAgcyA9IGkuYVR5cGVkQXJyYXk7XG4gICAgICAoMCwgaS5leHBvcnRUeXBlZEFycmF5TWV0aG9kKShcImZpbmRMYXN0SW5kZXhcIiwgZnVuY3Rpb24gZmluZExhc3RJbmRleCh0KSB7XG4gICAgICAgIHJldHVybiByKHModGhpcyksIHQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdm9pZCAwKTtcbiAgICAgIH0pO1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgICAgdmFyIGkgPSBuKDQpLFxuICAgICAgICByID0gbig4KSxcbiAgICAgICAgcyA9IG4oOTQpLFxuICAgICAgICBhID0gbig2NCksXG4gICAgICAgIG8gPSBuKDEwMyksXG4gICAgICAgIGwgPSBuKDQwKSxcbiAgICAgICAgYyA9IG4oNyksXG4gICAgICAgIGggPSBpLlJhbmdlRXJyb3IsXG4gICAgICAgIGQgPSBpLkludDhBcnJheSxcbiAgICAgICAgdSA9IGQgJiYgZC5wcm90b3R5cGUsXG4gICAgICAgIHAgPSB1ICYmIHUuc2V0LFxuICAgICAgICBmID0gcy5hVHlwZWRBcnJheSxcbiAgICAgICAgZyA9IHMuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCxcbiAgICAgICAgbSA9ICFjKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgdCA9IG5ldyBVaW50OENsYW1wZWRBcnJheSgyKTtcbiAgICAgICAgICByKHAsIHQsIHtcbiAgICAgICAgICAgIGxlbmd0aDogMSxcbiAgICAgICAgICAgIDA6IDNcbiAgICAgICAgICB9LCAxKTtcbiAgICAgICAgICByZXR1cm4gMyAhPT0gdFsxXTtcbiAgICAgICAgfSksXG4gICAgICAgIGIgPSBtICYmIHMuTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyAmJiBjKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgdCA9IG5ldyBkKDIpO1xuICAgICAgICAgIHQuc2V0KDEpO1xuICAgICAgICAgIHQuc2V0KFwiMlwiLCAxKTtcbiAgICAgICAgICByZXR1cm4gMCAhPT0gdFswXSB8fCAyICE9PSB0WzFdO1xuICAgICAgICB9KTtcbiAgICAgIGcoXCJzZXRcIiwgZnVuY3Rpb24gc2V0KHQpIHtcbiAgICAgICAgZih0aGlzKTtcbiAgICAgICAgdmFyIGUgPSBvKGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdm9pZCAwLCAxKSxcbiAgICAgICAgICBuID0gbCh0KTtcbiAgICAgICAgaWYgKG0pIHJldHVybiByKHAsIHRoaXMsIG4sIGUpO1xuICAgICAgICB2YXIgaSA9IHRoaXMubGVuZ3RoLFxuICAgICAgICAgIHMgPSBhKG4pLFxuICAgICAgICAgIGMgPSAwO1xuICAgICAgICBpZiAocyArIGUgPiBpKSB0aHJvdyBoKFwiV3JvbmcgbGVuZ3RoXCIpO1xuICAgICAgICBmb3IgKDsgYyA8IHM7KSB0aGlzW2UgKyBjXSA9IG5bYysrXTtcbiAgICAgIH0sICFtIHx8IGIpO1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICB2YXIgaSA9IG4oMTA0KSxcbiAgICAgICAgciA9IFJhbmdlRXJyb3I7XG4gICAgICB0LmV4cG9ydHMgPSBmdW5jdGlvbiAodCwgZSkge1xuICAgICAgICB2YXIgbiA9IGkodCk7XG4gICAgICAgIGlmIChuICUgZSkgdGhyb3cgcihcIldyb25nIG9mZnNldFwiKTtcbiAgICAgICAgcmV0dXJuIG47XG4gICAgICB9O1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICB2YXIgaSA9IG4oNjIpLFxuICAgICAgICByID0gUmFuZ2VFcnJvcjtcbiAgICAgIHQuZXhwb3J0cyA9IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHZhciBlID0gaSh0KTtcbiAgICAgICAgaWYgKGUgPCAwKSB0aHJvdyByKFwiVGhlIGFyZ3VtZW50IGNhbid0IGJlIGxlc3MgdGhhbiAwXCIpO1xuICAgICAgICByZXR1cm4gZTtcbiAgICAgIH07XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgICB2YXIgaSA9IG4oMTA2KSxcbiAgICAgICAgciA9IG4oOTQpLFxuICAgICAgICBzID0gci5hVHlwZWRBcnJheSxcbiAgICAgICAgYSA9IHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCxcbiAgICAgICAgbyA9IHIuZ2V0VHlwZWRBcnJheUNvbnN0cnVjdG9yO1xuICAgICAgYShcInRvUmV2ZXJzZWRcIiwgZnVuY3Rpb24gdG9SZXZlcnNlZCgpIHtcbiAgICAgICAgcmV0dXJuIGkocyh0aGlzKSwgbyh0aGlzKSk7XG4gICAgICB9KTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGkgPSBuKDY0KTtcbiAgICAgIHQuZXhwb3J0cyA9IGZ1bmN0aW9uICh0LCBlKSB7XG4gICAgICAgIGZvciAodmFyIG4gPSBpKHQpLCByID0gbmV3IGUobiksIHMgPSAwOyBzIDwgbjsgcysrKSByW3NdID0gdFtuIC0gcyAtIDFdO1xuICAgICAgICByZXR1cm4gcjtcbiAgICAgIH07XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgICB2YXIgaSA9IG4oOTQpLFxuICAgICAgICByID0gbigxNCksXG4gICAgICAgIHMgPSBuKDMxKSxcbiAgICAgICAgYSA9IG4oMTA4KSxcbiAgICAgICAgbyA9IGkuYVR5cGVkQXJyYXksXG4gICAgICAgIGwgPSBpLmdldFR5cGVkQXJyYXlDb25zdHJ1Y3RvcixcbiAgICAgICAgYyA9IGkuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCxcbiAgICAgICAgaCA9IHIoaS5UeXBlZEFycmF5UHJvdG90eXBlLnNvcnQpO1xuICAgICAgYyhcInRvU29ydGVkXCIsIGZ1bmN0aW9uIHRvU29ydGVkKHQpIHtcbiAgICAgICAgdm9pZCAwICE9PSB0ICYmIHModCk7XG4gICAgICAgIHZhciBlID0gbyh0aGlzKSxcbiAgICAgICAgICBuID0gYShsKGUpLCBlKTtcbiAgICAgICAgcmV0dXJuIGgobiwgdCk7XG4gICAgICB9KTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGkgPSBuKDY0KTtcbiAgICAgIHQuZXhwb3J0cyA9IGZ1bmN0aW9uICh0LCBlKSB7XG4gICAgICAgIGZvciAodmFyIG4gPSAwLCByID0gaShlKSwgcyA9IG5ldyB0KHIpOyByID4gbjspIHNbbl0gPSBlW24rK107XG4gICAgICAgIHJldHVybiBzO1xuICAgICAgfTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICAgIHZhciBpID0gbigxMTApLFxuICAgICAgICByID0gbig5NCksXG4gICAgICAgIHMgPSBuKDExMSksXG4gICAgICAgIGEgPSBuKDYyKSxcbiAgICAgICAgbyA9IG4oMTEyKSxcbiAgICAgICAgbCA9IHIuYVR5cGVkQXJyYXksXG4gICAgICAgIGMgPSByLmdldFR5cGVkQXJyYXlDb25zdHJ1Y3RvcixcbiAgICAgICAgaCA9IHIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCxcbiAgICAgICAgZCA9ICEhZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBuZXcgSW50OEFycmF5KDEpLndpdGgoMiwge1xuICAgICAgICAgICAgICB2YWx1ZU9mOiBmdW5jdGlvbiB2YWx1ZU9mKCkge1xuICAgICAgICAgICAgICAgIHRocm93IDg7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gY2F0Y2ggKHQpIHtcbiAgICAgICAgICAgIHJldHVybiA4ID09PSB0O1xuICAgICAgICAgIH1cbiAgICAgICAgfSgpO1xuICAgICAgaChcIndpdGhcIiwge1xuICAgICAgICB3aXRoOiBmdW5jdGlvbiBfd2l0aCh0LCBlKSB7XG4gICAgICAgICAgdmFyIG4gPSBsKHRoaXMpLFxuICAgICAgICAgICAgciA9IGEodCksXG4gICAgICAgICAgICBoID0gcyhuKSA/IG8oZSkgOiArZTtcbiAgICAgICAgICByZXR1cm4gaShuLCBjKG4pLCByLCBoKTtcbiAgICAgICAgfVxuICAgICAgfS53aXRoLCAhZCk7XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIHZhciBpID0gbig2NCksXG4gICAgICAgIHIgPSBuKDYyKSxcbiAgICAgICAgcyA9IFJhbmdlRXJyb3I7XG4gICAgICB0LmV4cG9ydHMgPSBmdW5jdGlvbiAodCwgZSwgbiwgYSkge1xuICAgICAgICB2YXIgbyA9IGkodCksXG4gICAgICAgICAgbCA9IHIobiksXG4gICAgICAgICAgYyA9IGwgPCAwID8gbyArIGwgOiBsO1xuICAgICAgICBpZiAoYyA+PSBvIHx8IGMgPCAwKSB0aHJvdyBzKFwiSW5jb3JyZWN0IGluZGV4XCIpO1xuICAgICAgICBmb3IgKHZhciBoID0gbmV3IGUobyksIGQgPSAwOyBkIDwgbzsgZCsrKSBoW2RdID0gZCA9PT0gYyA/IGEgOiB0W2RdO1xuICAgICAgICByZXR1cm4gaDtcbiAgICAgIH07XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIHZhciBpID0gbig3OCk7XG4gICAgICB0LmV4cG9ydHMgPSBmdW5jdGlvbiAodCkge1xuICAgICAgICB2YXIgZSA9IGkodCk7XG4gICAgICAgIHJldHVybiBcIkJpZ0ludDY0QXJyYXlcIiA9PSBlIHx8IFwiQmlnVWludDY0QXJyYXlcIiA9PSBlO1xuICAgICAgfTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGkgPSBuKDE5KSxcbiAgICAgICAgciA9IFR5cGVFcnJvcjtcbiAgICAgIHQuZXhwb3J0cyA9IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHZhciBlID0gaSh0LCBcIm51bWJlclwiKTtcbiAgICAgICAgaWYgKFwibnVtYmVyXCIgPT0gdHlwZW9mIGUpIHRocm93IHIoXCJDYW4ndCBjb252ZXJ0IG51bWJlciB0byBiaWdpbnRcIik7XG4gICAgICAgIHJldHVybiBCaWdJbnQoZSk7XG4gICAgICB9O1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgICAgdmFyIGkgPSBuKDYpLFxuICAgICAgICByID0gbig4OCksXG4gICAgICAgIHMgPSBuKDExNCksXG4gICAgICAgIGEgPSBBcnJheUJ1ZmZlci5wcm90b3R5cGU7XG4gICAgICBpICYmICEoXCJkZXRhY2hlZFwiIGluIGEpICYmIHIoYSwgXCJkZXRhY2hlZFwiLCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogITAsXG4gICAgICAgIGdldDogZnVuY3Rpb24gZGV0YWNoZWQoKSB7XG4gICAgICAgICAgcmV0dXJuIHModGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICB2YXIgaSA9IG4oMTQpLFxuICAgICAgICByID0gbigxMTUpLFxuICAgICAgICBzID0gaShBcnJheUJ1ZmZlci5wcm90b3R5cGUuc2xpY2UpO1xuICAgICAgdC5leHBvcnRzID0gZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgaWYgKDAgIT09IHIodCkpIHJldHVybiAhMTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBzKHQsIDAsIDApO1xuICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgICAgfSBjYXRjaCAodCkge1xuICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGkgPSBuKDcyKSxcbiAgICAgICAgciA9IG4oMTUpLFxuICAgICAgICBzID0gVHlwZUVycm9yO1xuICAgICAgdC5leHBvcnRzID0gaShBcnJheUJ1ZmZlci5wcm90b3R5cGUsIFwiYnl0ZUxlbmd0aFwiLCBcImdldFwiKSB8fCBmdW5jdGlvbiAodCkge1xuICAgICAgICBpZiAoXCJBcnJheUJ1ZmZlclwiICE9IHIodCkpIHRocm93IHMoXCJBcnJheUJ1ZmZlciBleHBlY3RlZFwiKTtcbiAgICAgICAgcmV0dXJuIHQuYnl0ZUxlbmd0aDtcbiAgICAgIH07XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgICB2YXIgaSA9IG4oMyksXG4gICAgICAgIHIgPSBuKDExNyk7XG4gICAgICByICYmIGkoe1xuICAgICAgICB0YXJnZXQ6IFwiQXJyYXlCdWZmZXJcIixcbiAgICAgICAgcHJvdG86ICEwXG4gICAgICB9LCB7XG4gICAgICAgIHRyYW5zZmVyOiBmdW5jdGlvbiB0cmFuc2ZlcigpIHtcbiAgICAgICAgICByZXR1cm4gcih0aGlzLCBhcmd1bWVudHMubGVuZ3RoID8gYXJndW1lbnRzWzBdIDogdm9pZCAwLCAhMCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICB2YXIgaSA9IG4oNCksXG4gICAgICAgIHIgPSBuKDE0KSxcbiAgICAgICAgcyA9IG4oNzIpLFxuICAgICAgICBhID0gbigxMTgpLFxuICAgICAgICBvID0gbigxMTQpLFxuICAgICAgICBsID0gbigxMTUpLFxuICAgICAgICBjID0gbigxMTkpLFxuICAgICAgICBoID0gaS5UeXBlRXJyb3IsXG4gICAgICAgIGQgPSBpLnN0cnVjdHVyZWRDbG9uZSxcbiAgICAgICAgdSA9IGkuQXJyYXlCdWZmZXIsXG4gICAgICAgIHAgPSBpLkRhdGFWaWV3LFxuICAgICAgICBmID0gTWF0aC5taW4sXG4gICAgICAgIGcgPSB1LnByb3RvdHlwZSxcbiAgICAgICAgbSA9IHAucHJvdG90eXBlLFxuICAgICAgICBiID0gcihnLnNsaWNlKSxcbiAgICAgICAgdiA9IHMoZywgXCJyZXNpemFibGVcIiwgXCJnZXRcIiksXG4gICAgICAgIHkgPSBzKGcsIFwibWF4Qnl0ZUxlbmd0aFwiLCBcImdldFwiKSxcbiAgICAgICAgQSA9IHIobS5nZXRJbnQ4KSxcbiAgICAgICAgXyA9IHIobS5zZXRJbnQ4KTtcbiAgICAgIHQuZXhwb3J0cyA9IGMgJiYgZnVuY3Rpb24gKHQsIGUsIG4pIHtcbiAgICAgICAgdmFyIGkgPSBsKHQpLFxuICAgICAgICAgIHIgPSB2b2lkIDAgPT09IGUgPyBpIDogYShlKSxcbiAgICAgICAgICBzID0gIXYgfHwgIXYodCk7XG4gICAgICAgIGlmIChvKHQpKSB0aHJvdyBoKFwiQXJyYXlCdWZmZXIgaXMgZGV0YWNoZWRcIik7XG4gICAgICAgIHZhciBjID0gZCh0LCB7XG4gICAgICAgICAgdHJhbnNmZXI6IFt0XVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGkgPT0gciAmJiAobiB8fCBzKSkgcmV0dXJuIGM7XG4gICAgICAgIGlmIChpID49IHIgJiYgKCFuIHx8IHMpKSByZXR1cm4gYihjLCAwLCByKTtcbiAgICAgICAgZm9yICh2YXIgZyA9IG4gJiYgIXMgJiYgeSA/IHtcbiAgICAgICAgICAgIG1heEJ5dGVMZW5ndGg6IHkoYylcbiAgICAgICAgICB9IDogdm9pZCAwLCBtID0gbmV3IHUociwgZyksIFMgPSBuZXcgcChjKSwgRSA9IG5ldyBwKG0pLCB4ID0gZihyLCBpKSwgdyA9IDA7IHcgPCB4OyB3KyspIF8oRSwgdywgQShTLCB3KSk7XG4gICAgICAgIHJldHVybiBtO1xuICAgICAgfTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGkgPSBuKDYyKSxcbiAgICAgICAgciA9IG4oNjUpLFxuICAgICAgICBzID0gUmFuZ2VFcnJvcjtcbiAgICAgIHQuZXhwb3J0cyA9IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIGlmICh2b2lkIDAgPT09IHQpIHJldHVybiAwO1xuICAgICAgICB2YXIgZSA9IGkodCksXG4gICAgICAgICAgbiA9IHIoZSk7XG4gICAgICAgIGlmIChlICE9PSBuKSB0aHJvdyBzKFwiV3JvbmcgbGVuZ3RoIG9yIGluZGV4XCIpO1xuICAgICAgICByZXR1cm4gbjtcbiAgICAgIH07XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIHZhciBpID0gbig0KSxcbiAgICAgICAgciA9IG4oNyksXG4gICAgICAgIHMgPSBuKDI4KSxcbiAgICAgICAgYSA9IG4oMTIwKSxcbiAgICAgICAgbyA9IG4oMTIxKSxcbiAgICAgICAgbCA9IG4oMTIyKSxcbiAgICAgICAgYyA9IGkuc3RydWN0dXJlZENsb25lO1xuICAgICAgdC5leHBvcnRzID0gISFjICYmICFyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKG8gJiYgcyA+IDkyIHx8IGwgJiYgcyA+IDk0IHx8IGEgJiYgcyA+IDk3KSByZXR1cm4gITE7XG4gICAgICAgIHZhciB0ID0gbmV3IEFycmF5QnVmZmVyKDgpLFxuICAgICAgICAgIGUgPSBjKHQsIHtcbiAgICAgICAgICAgIHRyYW5zZmVyOiBbdF1cbiAgICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIDAgIT0gdC5ieXRlTGVuZ3RoIHx8IDggIT0gZS5ieXRlTGVuZ3RoO1xuICAgICAgfSk7XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIHZhciBpID0gbigxMjEpLFxuICAgICAgICByID0gbigxMjIpO1xuICAgICAgdC5leHBvcnRzID0gIWkgJiYgIXIgJiYgXCJvYmplY3RcIiA9PSB0eXBlb2Ygd2luZG93ICYmIFwib2JqZWN0XCIgPT0gdHlwZW9mIGRvY3VtZW50O1xuICAgIH0sIHQgPT4ge1xuICAgICAgdC5leHBvcnRzID0gXCJvYmplY3RcIiA9PSB0eXBlb2YgRGVubyAmJiBEZW5vICYmIFwib2JqZWN0XCIgPT0gdHlwZW9mIERlbm8udmVyc2lvbjtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGkgPSBuKDE1KTtcbiAgICAgIHQuZXhwb3J0cyA9IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIHByb2Nlc3MgJiYgXCJwcm9jZXNzXCIgPT0gaShwcm9jZXNzKTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICAgIHZhciBpID0gbigzKSxcbiAgICAgICAgciA9IG4oMTE3KTtcbiAgICAgIHIgJiYgaSh7XG4gICAgICAgIHRhcmdldDogXCJBcnJheUJ1ZmZlclwiLFxuICAgICAgICBwcm90bzogITBcbiAgICAgIH0sIHtcbiAgICAgICAgdHJhbnNmZXJUb0ZpeGVkTGVuZ3RoOiBmdW5jdGlvbiB0cmFuc2ZlclRvRml4ZWRMZW5ndGgoKSB7XG4gICAgICAgICAgcmV0dXJuIHIodGhpcywgYXJndW1lbnRzLmxlbmd0aCA/IGFyZ3VtZW50c1swXSA6IHZvaWQgMCwgITEpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCAoX191bnVzZWRfd2VicGFja19tb2R1bGUsIGV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pID0+IHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgdmFsdWU6ICEwXG4gICAgICB9KTtcbiAgICAgIGV4cG9ydHMuUmVuZGVyVGFzayA9IGV4cG9ydHMuUERGV29ya2VyVXRpbCA9IGV4cG9ydHMuUERGV29ya2VyID0gZXhwb3J0cy5QREZQYWdlUHJveHkgPSBleHBvcnRzLlBERkRvY3VtZW50UHJveHkgPSBleHBvcnRzLlBERkRvY3VtZW50TG9hZGluZ1Rhc2sgPSBleHBvcnRzLlBERkRhdGFSYW5nZVRyYW5zcG9ydCA9IGV4cG9ydHMuTG9vcGJhY2tQb3J0ID0gZXhwb3J0cy5EZWZhdWx0U3RhbmRhcmRGb250RGF0YUZhY3RvcnkgPSBleHBvcnRzLkRlZmF1bHRGaWx0ZXJGYWN0b3J5ID0gZXhwb3J0cy5EZWZhdWx0Q2FudmFzRmFjdG9yeSA9IGV4cG9ydHMuRGVmYXVsdENNYXBSZWFkZXJGYWN0b3J5ID0gdm9pZCAwO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU1ZHR3JhcGhpY3NcIiwge1xuICAgICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuIF9kaXNwbGF5U3ZnLlNWR0dyYXBoaWNzO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGV4cG9ydHMuYnVpbGQgPSB2b2lkIDA7XG4gICAgICBleHBvcnRzLmdldERvY3VtZW50ID0gZ2V0RG9jdW1lbnQ7XG4gICAgICBleHBvcnRzLnZlcnNpb24gPSB2b2lkIDA7XG4gICAgICBfX3dfcGRmanNfcmVxdWlyZV9fKDg0KTtcbiAgICAgIF9fd19wZGZqc19yZXF1aXJlX18oODYpO1xuICAgICAgX193X3BkZmpzX3JlcXVpcmVfXyg4Nyk7XG4gICAgICBfX3dfcGRmanNfcmVxdWlyZV9fKDIpO1xuICAgICAgX193X3BkZmpzX3JlcXVpcmVfXyg5Myk7XG4gICAgICBfX3dfcGRmanNfcmVxdWlyZV9fKDEwMSk7XG4gICAgICBfX3dfcGRmanNfcmVxdWlyZV9fKDEwMik7XG4gICAgICBfX3dfcGRmanNfcmVxdWlyZV9fKDEwNSk7XG4gICAgICBfX3dfcGRmanNfcmVxdWlyZV9fKDEwNyk7XG4gICAgICBfX3dfcGRmanNfcmVxdWlyZV9fKDEwOSk7XG4gICAgICBfX3dfcGRmanNfcmVxdWlyZV9fKDExMyk7XG4gICAgICBfX3dfcGRmanNfcmVxdWlyZV9fKDExNik7XG4gICAgICBfX3dfcGRmanNfcmVxdWlyZV9fKDEyMyk7XG4gICAgICBfX3dfcGRmanNfcmVxdWlyZV9fKDg5KTtcbiAgICAgIF9fd19wZGZqc19yZXF1aXJlX18oMTI1KTtcbiAgICAgIF9fd19wZGZqc19yZXF1aXJlX18oMTM1KTtcbiAgICAgIF9fd19wZGZqc19yZXF1aXJlX18oMTM3KTtcbiAgICAgIF9fd19wZGZqc19yZXF1aXJlX18oMTQwKTtcbiAgICAgIF9fd19wZGZqc19yZXF1aXJlX18oMTQyKTtcbiAgICAgIF9fd19wZGZqc19yZXF1aXJlX18oMTQ0KTtcbiAgICAgIF9fd19wZGZqc19yZXF1aXJlX18oMTQ2KTtcbiAgICAgIF9fd19wZGZqc19yZXF1aXJlX18oMTQ4KTtcbiAgICAgIF9fd19wZGZqc19yZXF1aXJlX18oMTUxKTtcbiAgICAgIHZhciBfdXRpbCA9IF9fd19wZGZqc19yZXF1aXJlX18oMSksXG4gICAgICAgIF9hbm5vdGF0aW9uX3N0b3JhZ2UgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDE2MiksXG4gICAgICAgIF9kaXNwbGF5X3V0aWxzID0gX193X3BkZmpzX3JlcXVpcmVfXygxNjcpLFxuICAgICAgICBfZm9udF9sb2FkZXIgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDE3MCksXG4gICAgICAgIF9kaXNwbGF5Tm9kZV91dGlscyA9IF9fd19wZGZqc19yZXF1aXJlX18oMTcxKSxcbiAgICAgICAgX2NhbnZhcyA9IF9fd19wZGZqc19yZXF1aXJlX18oMTcyKSxcbiAgICAgICAgX3dvcmtlcl9vcHRpb25zID0gX193X3BkZmpzX3JlcXVpcmVfXygxNzUpLFxuICAgICAgICBfbWVzc2FnZV9oYW5kbGVyID0gX193X3BkZmpzX3JlcXVpcmVfXygxNzYpLFxuICAgICAgICBfbWV0YWRhdGEgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDE3NyksXG4gICAgICAgIF9vcHRpb25hbF9jb250ZW50X2NvbmZpZyA9IF9fd19wZGZqc19yZXF1aXJlX18oMTc4KSxcbiAgICAgICAgX3RyYW5zcG9ydF9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDE3OSksXG4gICAgICAgIF9kaXNwbGF5RmV0Y2hfc3RyZWFtID0gX193X3BkZmpzX3JlcXVpcmVfXygxODApLFxuICAgICAgICBfZGlzcGxheU5ldHdvcmsgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDE4MyksXG4gICAgICAgIF9kaXNwbGF5Tm9kZV9zdHJlYW0gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDE4NCksXG4gICAgICAgIF9kaXNwbGF5U3ZnID0gX193X3BkZmpzX3JlcXVpcmVfXygxODUpLFxuICAgICAgICBfeGZhX3RleHQgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDE5Myk7XG4gICAgICBjb25zdCBERUZBVUxUX1JBTkdFX0NIVU5LX1NJWkUgPSA2NTUzNixcbiAgICAgICAgUkVOREVSSU5HX0NBTkNFTExFRF9USU1FT1VUID0gMTAwLFxuICAgICAgICBERUxBWUVEX0NMRUFOVVBfVElNRU9VVCA9IDVlMyxcbiAgICAgICAgRGVmYXVsdENhbnZhc0ZhY3RvcnkgPSBfdXRpbC5pc05vZGVKUyA/IF9kaXNwbGF5Tm9kZV91dGlscy5Ob2RlQ2FudmFzRmFjdG9yeSA6IF9kaXNwbGF5X3V0aWxzLkRPTUNhbnZhc0ZhY3Rvcnk7XG4gICAgICBleHBvcnRzLkRlZmF1bHRDYW52YXNGYWN0b3J5ID0gRGVmYXVsdENhbnZhc0ZhY3Rvcnk7XG4gICAgICBjb25zdCBEZWZhdWx0Q01hcFJlYWRlckZhY3RvcnkgPSBfdXRpbC5pc05vZGVKUyA/IF9kaXNwbGF5Tm9kZV91dGlscy5Ob2RlQ01hcFJlYWRlckZhY3RvcnkgOiBfZGlzcGxheV91dGlscy5ET01DTWFwUmVhZGVyRmFjdG9yeTtcbiAgICAgIGV4cG9ydHMuRGVmYXVsdENNYXBSZWFkZXJGYWN0b3J5ID0gRGVmYXVsdENNYXBSZWFkZXJGYWN0b3J5O1xuICAgICAgY29uc3QgRGVmYXVsdEZpbHRlckZhY3RvcnkgPSBfdXRpbC5pc05vZGVKUyA/IF9kaXNwbGF5Tm9kZV91dGlscy5Ob2RlRmlsdGVyRmFjdG9yeSA6IF9kaXNwbGF5X3V0aWxzLkRPTUZpbHRlckZhY3Rvcnk7XG4gICAgICBleHBvcnRzLkRlZmF1bHRGaWx0ZXJGYWN0b3J5ID0gRGVmYXVsdEZpbHRlckZhY3Rvcnk7XG4gICAgICBjb25zdCBEZWZhdWx0U3RhbmRhcmRGb250RGF0YUZhY3RvcnkgPSBfdXRpbC5pc05vZGVKUyA/IF9kaXNwbGF5Tm9kZV91dGlscy5Ob2RlU3RhbmRhcmRGb250RGF0YUZhY3RvcnkgOiBfZGlzcGxheV91dGlscy5ET01TdGFuZGFyZEZvbnREYXRhRmFjdG9yeTtcbiAgICAgIGV4cG9ydHMuRGVmYXVsdFN0YW5kYXJkRm9udERhdGFGYWN0b3J5ID0gRGVmYXVsdFN0YW5kYXJkRm9udERhdGFGYWN0b3J5O1xuICAgICAgZnVuY3Rpb24gZ2V0RG9jdW1lbnQodCkge1xuICAgICAgICB2YXIgX3QkcGFzc3dvcmQsIF90JGxlbmd0aDtcbiAgICAgICAgXCJzdHJpbmdcIiA9PSB0eXBlb2YgdCB8fCB0IGluc3RhbmNlb2YgVVJMID8gdCA9IHtcbiAgICAgICAgICB1cmw6IHRcbiAgICAgICAgfSA6ICgwLCBfdXRpbC5pc0FycmF5QnVmZmVyKSh0KSAmJiAodCA9IHtcbiAgICAgICAgICBkYXRhOiB0XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoXCJvYmplY3RcIiAhPSB0eXBlb2YgdCkgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBwYXJhbWV0ZXIgaW4gZ2V0RG9jdW1lbnQsIG5lZWQgcGFyYW1ldGVyIG9iamVjdC5cIik7XG4gICAgICAgIGlmICghdC51cmwgJiYgIXQuZGF0YSAmJiAhdC5yYW5nZSkgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBwYXJhbWV0ZXIgb2JqZWN0OiBuZWVkIGVpdGhlciAuZGF0YSwgLnJhbmdlIG9yIC51cmxcIik7XG4gICAgICAgIGNvbnN0IGUgPSBuZXcgUERGRG9jdW1lbnRMb2FkaW5nVGFzaygpLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRvY0lkOiBuXG4gICAgICAgICAgfSA9IGUsXG4gICAgICAgICAgaSA9IHQudXJsID8gZ2V0VXJsUHJvcCh0LnVybCkgOiBudWxsLFxuICAgICAgICAgIHIgPSB0LmRhdGEgPyBnZXREYXRhUHJvcCh0LmRhdGEpIDogbnVsbCxcbiAgICAgICAgICBzID0gdC5odHRwSGVhZGVycyB8fCBudWxsLFxuICAgICAgICAgIGEgPSAhMCA9PT0gdC53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgICAgbyA9IChfdCRwYXNzd29yZCA9IHQucGFzc3dvcmQpICE9PSBudWxsICYmIF90JHBhc3N3b3JkICE9PSB2b2lkIDAgPyBfdCRwYXNzd29yZCA6IG51bGwsXG4gICAgICAgICAgbCA9IHQucmFuZ2UgaW5zdGFuY2VvZiBQREZEYXRhUmFuZ2VUcmFuc3BvcnQgPyB0LnJhbmdlIDogbnVsbCxcbiAgICAgICAgICBjID0gTnVtYmVyLmlzSW50ZWdlcih0LnJhbmdlQ2h1bmtTaXplKSAmJiB0LnJhbmdlQ2h1bmtTaXplID4gMCA/IHQucmFuZ2VDaHVua1NpemUgOiBERUZBVUxUX1JBTkdFX0NIVU5LX1NJWkU7XG4gICAgICAgIGxldCBoID0gdC53b3JrZXIgaW5zdGFuY2VvZiBQREZXb3JrZXIgPyB0LndvcmtlciA6IG51bGw7XG4gICAgICAgIGNvbnN0IGQgPSB0LnZlcmJvc2l0eSxcbiAgICAgICAgICB1ID0gXCJzdHJpbmdcIiAhPSB0eXBlb2YgdC5kb2NCYXNlVXJsIHx8ICgwLCBfZGlzcGxheV91dGlscy5pc0RhdGFTY2hlbWUpKHQuZG9jQmFzZVVybCkgPyBudWxsIDogdC5kb2NCYXNlVXJsLFxuICAgICAgICAgIHAgPSBcInN0cmluZ1wiID09IHR5cGVvZiB0LmNNYXBVcmwgPyB0LmNNYXBVcmwgOiBudWxsLFxuICAgICAgICAgIGYgPSAhMSAhPT0gdC5jTWFwUGFja2VkLFxuICAgICAgICAgIGcgPSB0LkNNYXBSZWFkZXJGYWN0b3J5IHx8IERlZmF1bHRDTWFwUmVhZGVyRmFjdG9yeSxcbiAgICAgICAgICBtID0gXCJzdHJpbmdcIiA9PSB0eXBlb2YgdC5zdGFuZGFyZEZvbnREYXRhVXJsID8gdC5zdGFuZGFyZEZvbnREYXRhVXJsIDogbnVsbCxcbiAgICAgICAgICBiID0gdC5TdGFuZGFyZEZvbnREYXRhRmFjdG9yeSB8fCBEZWZhdWx0U3RhbmRhcmRGb250RGF0YUZhY3RvcnksXG4gICAgICAgICAgdiA9ICEwICE9PSB0LnN0b3BBdEVycm9ycyxcbiAgICAgICAgICB5ID0gTnVtYmVyLmlzSW50ZWdlcih0Lm1heEltYWdlU2l6ZSkgJiYgdC5tYXhJbWFnZVNpemUgPiAtMSA/IHQubWF4SW1hZ2VTaXplIDogLTEsXG4gICAgICAgICAgQSA9ICExICE9PSB0LmlzRXZhbFN1cHBvcnRlZCxcbiAgICAgICAgICBfID0gXCJib29sZWFuXCIgPT0gdHlwZW9mIHQuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQgPyB0LmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkIDogIV91dGlsLmlzTm9kZUpTLFxuICAgICAgICAgIFMgPSBOdW1iZXIuaXNJbnRlZ2VyKHQuY2FudmFzTWF4QXJlYUluQnl0ZXMpID8gdC5jYW52YXNNYXhBcmVhSW5CeXRlcyA6IC0xLFxuICAgICAgICAgIEUgPSBcImJvb2xlYW5cIiA9PSB0eXBlb2YgdC5kaXNhYmxlRm9udEZhY2UgPyB0LmRpc2FibGVGb250RmFjZSA6IF91dGlsLmlzTm9kZUpTLFxuICAgICAgICAgIHggPSAhMCA9PT0gdC5mb250RXh0cmFQcm9wZXJ0aWVzLFxuICAgICAgICAgIHcgPSAhMCA9PT0gdC5lbmFibGVYZmEsXG4gICAgICAgICAgQyA9IHQub3duZXJEb2N1bWVudCB8fCBnbG9iYWxUaGlzLmRvY3VtZW50LFxuICAgICAgICAgIFQgPSAhMCA9PT0gdC5kaXNhYmxlUmFuZ2UsXG4gICAgICAgICAgUCA9ICEwID09PSB0LmRpc2FibGVTdHJlYW0sXG4gICAgICAgICAgayA9ICEwID09PSB0LmRpc2FibGVBdXRvRmV0Y2gsXG4gICAgICAgICAgTSA9ICEwID09PSB0LnBkZkJ1ZyxcbiAgICAgICAgICBSID0gbCA/IGwubGVuZ3RoIDogKF90JGxlbmd0aCA9IHQubGVuZ3RoKSAhPT0gbnVsbCAmJiBfdCRsZW5ndGggIT09IHZvaWQgMCA/IF90JGxlbmd0aCA6IE5hTixcbiAgICAgICAgICBJID0gXCJib29sZWFuXCIgPT0gdHlwZW9mIHQudXNlU3lzdGVtRm9udHMgPyB0LnVzZVN5c3RlbUZvbnRzIDogIV91dGlsLmlzTm9kZUpTICYmICFFLFxuICAgICAgICAgIEQgPSBcImJvb2xlYW5cIiA9PSB0eXBlb2YgdC51c2VXb3JrZXJGZXRjaCA/IHQudXNlV29ya2VyRmV0Y2ggOiBnID09PSBfZGlzcGxheV91dGlscy5ET01DTWFwUmVhZGVyRmFjdG9yeSAmJiBiID09PSBfZGlzcGxheV91dGlscy5ET01TdGFuZGFyZEZvbnREYXRhRmFjdG9yeSAmJiBwICYmIG0gJiYgKDAsIF9kaXNwbGF5X3V0aWxzLmlzVmFsaWRGZXRjaFVybCkocCwgZG9jdW1lbnQuYmFzZVVSSSkgJiYgKDAsIF9kaXNwbGF5X3V0aWxzLmlzVmFsaWRGZXRjaFVybCkobSwgZG9jdW1lbnQuYmFzZVVSSSksXG4gICAgICAgICAgTyA9IHQuY2FudmFzRmFjdG9yeSB8fCBuZXcgRGVmYXVsdENhbnZhc0ZhY3Rvcnkoe1xuICAgICAgICAgICAgb3duZXJEb2N1bWVudDogQ1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIEwgPSB0LmZpbHRlckZhY3RvcnkgfHwgbmV3IERlZmF1bHRGaWx0ZXJGYWN0b3J5KHtcbiAgICAgICAgICAgIGRvY0lkOiBuLFxuICAgICAgICAgICAgb3duZXJEb2N1bWVudDogQ1xuICAgICAgICAgIH0pO1xuICAgICAgICAoMCwgX3V0aWwuc2V0VmVyYm9zaXR5TGV2ZWwpKGQpO1xuICAgICAgICBjb25zdCBOID0ge1xuICAgICAgICAgIGNhbnZhc0ZhY3Rvcnk6IE8sXG4gICAgICAgICAgZmlsdGVyRmFjdG9yeTogTFxuICAgICAgICB9O1xuICAgICAgICBpZiAoIUQpIHtcbiAgICAgICAgICBOLmNNYXBSZWFkZXJGYWN0b3J5ID0gbmV3IGcoe1xuICAgICAgICAgICAgYmFzZVVybDogcCxcbiAgICAgICAgICAgIGlzQ29tcHJlc3NlZDogZlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIE4uc3RhbmRhcmRGb250RGF0YUZhY3RvcnkgPSBuZXcgYih7XG4gICAgICAgICAgICBiYXNlVXJsOiBtXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFoKSB7XG4gICAgICAgICAgY29uc3QgdCA9IHtcbiAgICAgICAgICAgIHZlcmJvc2l0eTogZCxcbiAgICAgICAgICAgIHBvcnQ6IF93b3JrZXJfb3B0aW9ucy5HbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclBvcnRcbiAgICAgICAgICB9O1xuICAgICAgICAgIGggPSB0LnBvcnQgPyBQREZXb3JrZXIuZnJvbVBvcnQodCkgOiBuZXcgUERGV29ya2VyKHQpO1xuICAgICAgICAgIGUuX3dvcmtlciA9IGg7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgQiA9IHtcbiAgICAgICAgICAgIGRvY0lkOiBuLFxuICAgICAgICAgICAgYXBpVmVyc2lvbjogXCIzLjkuMTc5XCIsXG4gICAgICAgICAgICBkYXRhOiByLFxuICAgICAgICAgICAgcGFzc3dvcmQ6IG8sXG4gICAgICAgICAgICBkaXNhYmxlQXV0b0ZldGNoOiBrLFxuICAgICAgICAgICAgcmFuZ2VDaHVua1NpemU6IGMsXG4gICAgICAgICAgICBsZW5ndGg6IFIsXG4gICAgICAgICAgICBkb2NCYXNlVXJsOiB1LFxuICAgICAgICAgICAgZW5hYmxlWGZhOiB3LFxuICAgICAgICAgICAgZXZhbHVhdG9yT3B0aW9uczoge1xuICAgICAgICAgICAgICBtYXhJbWFnZVNpemU6IHksXG4gICAgICAgICAgICAgIGRpc2FibGVGb250RmFjZTogRSxcbiAgICAgICAgICAgICAgaWdub3JlRXJyb3JzOiB2LFxuICAgICAgICAgICAgICBpc0V2YWxTdXBwb3J0ZWQ6IEEsXG4gICAgICAgICAgICAgIGlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkOiBfLFxuICAgICAgICAgICAgICBjYW52YXNNYXhBcmVhSW5CeXRlczogUyxcbiAgICAgICAgICAgICAgZm9udEV4dHJhUHJvcGVydGllczogeCxcbiAgICAgICAgICAgICAgdXNlU3lzdGVtRm9udHM6IEksXG4gICAgICAgICAgICAgIGNNYXBVcmw6IEQgPyBwIDogbnVsbCxcbiAgICAgICAgICAgICAgc3RhbmRhcmRGb250RGF0YVVybDogRCA/IG0gOiBudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBqID0ge1xuICAgICAgICAgICAgaWdub3JlRXJyb3JzOiB2LFxuICAgICAgICAgICAgaXNFdmFsU3VwcG9ydGVkOiBBLFxuICAgICAgICAgICAgZGlzYWJsZUZvbnRGYWNlOiBFLFxuICAgICAgICAgICAgZm9udEV4dHJhUHJvcGVydGllczogeCxcbiAgICAgICAgICAgIGVuYWJsZVhmYTogdyxcbiAgICAgICAgICAgIG93bmVyRG9jdW1lbnQ6IEMsXG4gICAgICAgICAgICBkaXNhYmxlQXV0b0ZldGNoOiBrLFxuICAgICAgICAgICAgcGRmQnVnOiBNLFxuICAgICAgICAgICAgc3R5bGVFbGVtZW50OiBudWxsXG4gICAgICAgICAgfTtcbiAgICAgICAgaC5wcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmIChlLmRlc3Ryb3llZCkgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGluZyBhYm9ydGVkXCIpO1xuICAgICAgICAgIGNvbnN0IHQgPSBfZmV0Y2hEb2N1bWVudChoLCBCKSxcbiAgICAgICAgICAgIG8gPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgICBsZXQgZTtcbiAgICAgICAgICAgICAgaWYgKGwpIGUgPSBuZXcgX3RyYW5zcG9ydF9zdHJlYW0uUERGRGF0YVRyYW5zcG9ydFN0cmVhbSh7XG4gICAgICAgICAgICAgICAgbGVuZ3RoOiBSLFxuICAgICAgICAgICAgICAgIGluaXRpYWxEYXRhOiBsLmluaXRpYWxEYXRhLFxuICAgICAgICAgICAgICAgIHByb2dyZXNzaXZlRG9uZTogbC5wcm9ncmVzc2l2ZURvbmUsXG4gICAgICAgICAgICAgICAgY29udGVudERpc3Bvc2l0aW9uRmlsZW5hbWU6IGwuY29udGVudERpc3Bvc2l0aW9uRmlsZW5hbWUsXG4gICAgICAgICAgICAgICAgZGlzYWJsZVJhbmdlOiBULFxuICAgICAgICAgICAgICAgIGRpc2FibGVTdHJlYW06IFBcbiAgICAgICAgICAgICAgfSwgbCk7ZWxzZSBpZiAoIXIpIHtcbiAgICAgICAgICAgICAgICBlID0gKHQgPT4gX3V0aWwuaXNOb2RlSlMgPyBuZXcgX2Rpc3BsYXlOb2RlX3N0cmVhbS5QREZOb2RlU3RyZWFtKHQpIDogKDAsIF9kaXNwbGF5X3V0aWxzLmlzVmFsaWRGZXRjaFVybCkodC51cmwpID8gbmV3IF9kaXNwbGF5RmV0Y2hfc3RyZWFtLlBERkZldGNoU3RyZWFtKHQpIDogbmV3IF9kaXNwbGF5TmV0d29yay5QREZOZXR3b3JrU3RyZWFtKHQpKSh7XG4gICAgICAgICAgICAgICAgICB1cmw6IGksXG4gICAgICAgICAgICAgICAgICBsZW5ndGg6IFIsXG4gICAgICAgICAgICAgICAgICBodHRwSGVhZGVyczogcyxcbiAgICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogYSxcbiAgICAgICAgICAgICAgICAgIHJhbmdlQ2h1bmtTaXplOiBjLFxuICAgICAgICAgICAgICAgICAgZGlzYWJsZVJhbmdlOiBULFxuICAgICAgICAgICAgICAgICAgZGlzYWJsZVN0cmVhbTogUFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHQoZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoW3QsIG9dKS50aGVuKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICBsZXQgW2ksIHJdID0gdDtcbiAgICAgICAgICAgIGlmIChlLmRlc3Ryb3llZCkgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGluZyBhYm9ydGVkXCIpO1xuICAgICAgICAgICAgY29uc3QgcyA9IG5ldyBfbWVzc2FnZV9oYW5kbGVyLk1lc3NhZ2VIYW5kbGVyKG4sIGksIGgucG9ydCksXG4gICAgICAgICAgICAgIGEgPSBuZXcgV29ya2VyVHJhbnNwb3J0KHMsIGUsIHIsIGosIE4pO1xuICAgICAgICAgICAgZS5fdHJhbnNwb3J0ID0gYTtcbiAgICAgICAgICAgIHMuc2VuZChcIlJlYWR5XCIsIG51bGwpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KS5jYXRjaChlLl9jYXBhYmlsaXR5LnJlamVjdCk7XG4gICAgICAgIHJldHVybiBlO1xuICAgICAgfVxuICAgICAgYXN5bmMgZnVuY3Rpb24gX2ZldGNoRG9jdW1lbnQodCwgZSkge1xuICAgICAgICBpZiAodC5kZXN0cm95ZWQpIHRocm93IG5ldyBFcnJvcihcIldvcmtlciB3YXMgZGVzdHJveWVkXCIpO1xuICAgICAgICBjb25zdCBuID0gYXdhaXQgdC5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoXCJHZXREb2NSZXF1ZXN0XCIsIGUsIGUuZGF0YSA/IFtlLmRhdGEuYnVmZmVyXSA6IG51bGwpO1xuICAgICAgICBpZiAodC5kZXN0cm95ZWQpIHRocm93IG5ldyBFcnJvcihcIldvcmtlciB3YXMgZGVzdHJveWVkXCIpO1xuICAgICAgICByZXR1cm4gbjtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGdldFVybFByb3AodCkge1xuICAgICAgICBpZiAodCBpbnN0YW5jZW9mIFVSTCkgcmV0dXJuIHQuaHJlZjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gbmV3IFVSTCh0LCB3aW5kb3cubG9jYXRpb24pLmhyZWY7XG4gICAgICAgIH0gY2F0Y2ggKF91bnVzZWQ0KSB7XG4gICAgICAgICAgaWYgKF91dGlsLmlzTm9kZUpTICYmIFwic3RyaW5nXCIgPT0gdHlwZW9mIHQpIHJldHVybiB0O1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgUERGIHVybCBkYXRhOiBlaXRoZXIgc3RyaW5nIG9yIFVSTC1vYmplY3QgaXMgZXhwZWN0ZWQgaW4gdGhlIHVybCBwcm9wZXJ0eS5cIik7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBnZXREYXRhUHJvcCh0KSB7XG4gICAgICAgIGlmIChfdXRpbC5pc05vZGVKUyAmJiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBCdWZmZXIgJiYgdCBpbnN0YW5jZW9mIEJ1ZmZlcikgdGhyb3cgbmV3IEVycm9yKFwiUGxlYXNlIHByb3ZpZGUgYmluYXJ5IGRhdGEgYXMgYFVpbnQ4QXJyYXlgLCByYXRoZXIgdGhhbiBgQnVmZmVyYC5cIik7XG4gICAgICAgIGlmICh0IGluc3RhbmNlb2YgVWludDhBcnJheSAmJiB0LmJ5dGVMZW5ndGggPT09IHQuYnVmZmVyLmJ5dGVMZW5ndGgpIHJldHVybiB0O1xuICAgICAgICBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgdCkgcmV0dXJuICgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKSh0KTtcbiAgICAgICAgaWYgKFwib2JqZWN0XCIgPT0gdHlwZW9mIHQgJiYgIWlzTmFOKHQgPT09IG51bGwgfHwgdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogdC5sZW5ndGgpIHx8ICgwLCBfdXRpbC5pc0FycmF5QnVmZmVyKSh0KSkgcmV0dXJuIG5ldyBVaW50OEFycmF5KHQpO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIFBERiBiaW5hcnkgZGF0YTogZWl0aGVyIFR5cGVkQXJyYXksIHN0cmluZywgb3IgYXJyYXktbGlrZSBvYmplY3QgaXMgZXhwZWN0ZWQgaW4gdGhlIGRhdGEgcHJvcGVydHkuXCIpO1xuICAgICAgfVxuICAgICAgY2xhc3MgUERGRG9jdW1lbnRMb2FkaW5nVGFzayB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgIHZhciBfUERGRG9jdW1lbnRMb2FkaW5nVGEsIF9QREZEb2N1bWVudExvYWRpbmdUYTI7XG4gICAgICAgICAgdGhpcy5fY2FwYWJpbGl0eSA9IG5ldyBfdXRpbC5Qcm9taXNlQ2FwYWJpbGl0eSgpO1xuICAgICAgICAgIHRoaXMuX3RyYW5zcG9ydCA9IG51bGw7XG4gICAgICAgICAgdGhpcy5fd29ya2VyID0gbnVsbDtcbiAgICAgICAgICB0aGlzLmRvY0lkID0gXCJkXCIgKyAoX2NsYXNzU3RhdGljUHJpdmF0ZUZpZWxkU3BlY1NldChQREZEb2N1bWVudExvYWRpbmdUYXNrLCBQREZEb2N1bWVudExvYWRpbmdUYXNrLCBfZSwgKF9QREZEb2N1bWVudExvYWRpbmdUYSA9IF9jbGFzc1N0YXRpY1ByaXZhdGVGaWVsZFNwZWNHZXQoUERGRG9jdW1lbnRMb2FkaW5nVGFzaywgUERGRG9jdW1lbnRMb2FkaW5nVGFzaywgX2UpLCBfUERGRG9jdW1lbnRMb2FkaW5nVGEyID0gX1BERkRvY3VtZW50TG9hZGluZ1RhKyssIF9QREZEb2N1bWVudExvYWRpbmdUYSkpLCBfUERGRG9jdW1lbnRMb2FkaW5nVGEyKTtcbiAgICAgICAgICB0aGlzLmRlc3Ryb3llZCA9ICExO1xuICAgICAgICAgIHRoaXMub25QYXNzd29yZCA9IG51bGw7XG4gICAgICAgICAgdGhpcy5vblByb2dyZXNzID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBnZXQgcHJvbWlzZSgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fY2FwYWJpbGl0eS5wcm9taXNlO1xuICAgICAgICB9XG4gICAgICAgIGFzeW5jIGRlc3Ryb3koKSB7XG4gICAgICAgICAgdmFyIF90aGlzJF90cmFuc3BvcnQ7XG4gICAgICAgICAgdGhpcy5kZXN0cm95ZWQgPSAhMDtcbiAgICAgICAgICBhd2FpdCAoKF90aGlzJF90cmFuc3BvcnQgPSB0aGlzLl90cmFuc3BvcnQpID09PSBudWxsIHx8IF90aGlzJF90cmFuc3BvcnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJF90cmFuc3BvcnQuZGVzdHJveSgpKTtcbiAgICAgICAgICB0aGlzLl90cmFuc3BvcnQgPSBudWxsO1xuICAgICAgICAgIGlmICh0aGlzLl93b3JrZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX3dvcmtlci5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLl93b3JrZXIgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIF9lID0ge1xuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IDBcbiAgICAgIH07XG4gICAgICBleHBvcnRzLlBERkRvY3VtZW50TG9hZGluZ1Rhc2sgPSBQREZEb2N1bWVudExvYWRpbmdUYXNrO1xuICAgICAgY2xhc3MgUERGRGF0YVJhbmdlVHJhbnNwb3J0IHtcbiAgICAgICAgY29uc3RydWN0b3IodCwgZSkge1xuICAgICAgICAgIGxldCBuID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMl0gJiYgYXJndW1lbnRzWzJdLFxuICAgICAgICAgICAgaSA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzNdID8gYXJndW1lbnRzWzNdIDogbnVsbDtcbiAgICAgICAgICB0aGlzLmxlbmd0aCA9IHQ7XG4gICAgICAgICAgdGhpcy5pbml0aWFsRGF0YSA9IGU7XG4gICAgICAgICAgdGhpcy5wcm9ncmVzc2l2ZURvbmUgPSBuO1xuICAgICAgICAgIHRoaXMuY29udGVudERpc3Bvc2l0aW9uRmlsZW5hbWUgPSBpO1xuICAgICAgICAgIHRoaXMuX3JhbmdlTGlzdGVuZXJzID0gW107XG4gICAgICAgICAgdGhpcy5fcHJvZ3Jlc3NMaXN0ZW5lcnMgPSBbXTtcbiAgICAgICAgICB0aGlzLl9wcm9ncmVzc2l2ZVJlYWRMaXN0ZW5lcnMgPSBbXTtcbiAgICAgICAgICB0aGlzLl9wcm9ncmVzc2l2ZURvbmVMaXN0ZW5lcnMgPSBbXTtcbiAgICAgICAgICB0aGlzLl9yZWFkeUNhcGFiaWxpdHkgPSBuZXcgX3V0aWwuUHJvbWlzZUNhcGFiaWxpdHkoKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRSYW5nZUxpc3RlbmVyKHQpIHtcbiAgICAgICAgICB0aGlzLl9yYW5nZUxpc3RlbmVycy5wdXNoKHQpO1xuICAgICAgICB9XG4gICAgICAgIGFkZFByb2dyZXNzTGlzdGVuZXIodCkge1xuICAgICAgICAgIHRoaXMuX3Byb2dyZXNzTGlzdGVuZXJzLnB1c2godCk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkUHJvZ3Jlc3NpdmVSZWFkTGlzdGVuZXIodCkge1xuICAgICAgICAgIHRoaXMuX3Byb2dyZXNzaXZlUmVhZExpc3RlbmVycy5wdXNoKHQpO1xuICAgICAgICB9XG4gICAgICAgIGFkZFByb2dyZXNzaXZlRG9uZUxpc3RlbmVyKHQpIHtcbiAgICAgICAgICB0aGlzLl9wcm9ncmVzc2l2ZURvbmVMaXN0ZW5lcnMucHVzaCh0KTtcbiAgICAgICAgfVxuICAgICAgICBvbkRhdGFSYW5nZSh0LCBlKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBuIG9mIHRoaXMuX3JhbmdlTGlzdGVuZXJzKSBuKHQsIGUpO1xuICAgICAgICB9XG4gICAgICAgIG9uRGF0YVByb2dyZXNzKHQsIGUpIHtcbiAgICAgICAgICB0aGlzLl9yZWFkeUNhcGFiaWxpdHkucHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgbiBvZiB0aGlzLl9wcm9ncmVzc0xpc3RlbmVycykgbih0LCBlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvbkRhdGFQcm9ncmVzc2l2ZVJlYWQodCkge1xuICAgICAgICAgIHRoaXMuX3JlYWR5Q2FwYWJpbGl0eS5wcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIHRoaXMuX3Byb2dyZXNzaXZlUmVhZExpc3RlbmVycykgZSh0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvbkRhdGFQcm9ncmVzc2l2ZURvbmUoKSB7XG4gICAgICAgICAgdGhpcy5fcmVhZHlDYXBhYmlsaXR5LnByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHQgb2YgdGhpcy5fcHJvZ3Jlc3NpdmVEb25lTGlzdGVuZXJzKSB0KCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdHJhbnNwb3J0UmVhZHkoKSB7XG4gICAgICAgICAgdGhpcy5fcmVhZHlDYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgICByZXF1ZXN0RGF0YVJhbmdlKHQsIGUpIHtcbiAgICAgICAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiQWJzdHJhY3QgbWV0aG9kIFBERkRhdGFSYW5nZVRyYW5zcG9ydC5yZXF1ZXN0RGF0YVJhbmdlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGFib3J0KCkge31cbiAgICAgIH1cbiAgICAgIGV4cG9ydHMuUERGRGF0YVJhbmdlVHJhbnNwb3J0ID0gUERGRGF0YVJhbmdlVHJhbnNwb3J0O1xuICAgICAgY2xhc3MgUERGRG9jdW1lbnRQcm94eSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHQsIGUpIHtcbiAgICAgICAgICB0aGlzLl9wZGZJbmZvID0gdDtcbiAgICAgICAgICB0aGlzLl90cmFuc3BvcnQgPSBlO1xuICAgICAgICB9XG4gICAgICAgIGdldCBhbm5vdGF0aW9uU3RvcmFnZSgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmFubm90YXRpb25TdG9yYWdlO1xuICAgICAgICB9XG4gICAgICAgIGdldCBmaWx0ZXJGYWN0b3J5KCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZmlsdGVyRmFjdG9yeTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgbnVtUGFnZXMoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3BkZkluZm8ubnVtUGFnZXM7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGZpbmdlcnByaW50cygpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fcGRmSW5mby5maW5nZXJwcmludHM7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGlzUHVyZVhmYSgpIHtcbiAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJpc1B1cmVYZmFcIiwgISF0aGlzLl90cmFuc3BvcnQuX2h0bWxGb3JYZmEpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBhbGxYZmFIdG1sKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuX2h0bWxGb3JYZmE7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0UGFnZSh0KSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRQYWdlKHQpO1xuICAgICAgICB9XG4gICAgICAgIGdldFBhZ2VJbmRleCh0KSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRQYWdlSW5kZXgodCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0RGVzdGluYXRpb25zKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0RGVzdGluYXRpb25zKCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0RGVzdGluYXRpb24odCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0RGVzdGluYXRpb24odCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0UGFnZUxhYmVscygpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFBhZ2VMYWJlbHMoKTtcbiAgICAgICAgfVxuICAgICAgICBnZXRQYWdlTGF5b3V0KCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0UGFnZUxheW91dCgpO1xuICAgICAgICB9XG4gICAgICAgIGdldFBhZ2VNb2RlKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0UGFnZU1vZGUoKTtcbiAgICAgICAgfVxuICAgICAgICBnZXRWaWV3ZXJQcmVmZXJlbmNlcygpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFZpZXdlclByZWZlcmVuY2VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0T3BlbkFjdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldE9wZW5BY3Rpb24oKTtcbiAgICAgICAgfVxuICAgICAgICBnZXRBdHRhY2htZW50cygpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldEF0dGFjaG1lbnRzKCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0SmF2YVNjcmlwdCgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldEphdmFTY3JpcHQoKTtcbiAgICAgICAgfVxuICAgICAgICBnZXRKU0FjdGlvbnMoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXREb2NKU0FjdGlvbnMoKTtcbiAgICAgICAgfVxuICAgICAgICBnZXRPdXRsaW5lKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0T3V0bGluZSgpO1xuICAgICAgICB9XG4gICAgICAgIGdldE9wdGlvbmFsQ29udGVudENvbmZpZygpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldE9wdGlvbmFsQ29udGVudENvbmZpZygpO1xuICAgICAgICB9XG4gICAgICAgIGdldFBlcm1pc3Npb25zKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0UGVybWlzc2lvbnMoKTtcbiAgICAgICAgfVxuICAgICAgICBnZXRNZXRhZGF0YSgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldE1ldGFkYXRhKCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0TWFya0luZm8oKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRNYXJrSW5mbygpO1xuICAgICAgICB9XG4gICAgICAgIGdldERhdGEoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXREYXRhKCk7XG4gICAgICAgIH1cbiAgICAgICAgc2F2ZURvY3VtZW50KCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuc2F2ZURvY3VtZW50KCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0RG93bmxvYWRJbmZvKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZG93bmxvYWRJbmZvQ2FwYWJpbGl0eS5wcm9taXNlO1xuICAgICAgICB9XG4gICAgICAgIGNsZWFudXAoKSB7XG4gICAgICAgICAgbGV0IHQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1swXSAmJiBhcmd1bWVudHNbMF07XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5zdGFydENsZWFudXAodCB8fCB0aGlzLmlzUHVyZVhmYSk7XG4gICAgICAgIH1cbiAgICAgICAgZGVzdHJveSgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkaW5nVGFzay5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGxvYWRpbmdQYXJhbXMoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5sb2FkaW5nUGFyYW1zO1xuICAgICAgICB9XG4gICAgICAgIGdldCBsb2FkaW5nVGFzaygpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmxvYWRpbmdUYXNrO1xuICAgICAgICB9XG4gICAgICAgIGdldEZpZWxkT2JqZWN0cygpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldEZpZWxkT2JqZWN0cygpO1xuICAgICAgICB9XG4gICAgICAgIGhhc0pTQWN0aW9ucygpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0Lmhhc0pTQWN0aW9ucygpO1xuICAgICAgICB9XG4gICAgICAgIGdldENhbGN1bGF0aW9uT3JkZXJJZHMoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRDYWxjdWxhdGlvbk9yZGVySWRzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGV4cG9ydHMuUERGRG9jdW1lbnRQcm94eSA9IFBERkRvY3VtZW50UHJveHk7XG4gICAgICB2YXIgX24gPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfaSA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xuICAgICAgdmFyIF9zID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgICB2YXIgX3IgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbiAgICAgIGNsYXNzIFBERlBhZ2VQcm94eSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKF90MiwgX2UyLCBuKSB7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9yKTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlTWV0aG9kSW5pdFNwZWModGhpcywgX3MpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9uLCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBudWxsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2ksIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6ICExXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbGV0IGkgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1szXSAmJiBhcmd1bWVudHNbM107XG4gICAgICAgICAgdGhpcy5fcGFnZUluZGV4ID0gX3QyO1xuICAgICAgICAgIHRoaXMuX3BhZ2VJbmZvID0gX2UyO1xuICAgICAgICAgIHRoaXMuX3RyYW5zcG9ydCA9IG47XG4gICAgICAgICAgdGhpcy5fc3RhdHMgPSBpID8gbmV3IF9kaXNwbGF5X3V0aWxzLlN0YXRUaW1lcigpIDogbnVsbDtcbiAgICAgICAgICB0aGlzLl9wZGZCdWcgPSBpO1xuICAgICAgICAgIHRoaXMuY29tbW9uT2JqcyA9IG4uY29tbW9uT2JqcztcbiAgICAgICAgICB0aGlzLm9ianMgPSBuZXcgUERGT2JqZWN0cygpO1xuICAgICAgICAgIHRoaXMuX21heWJlQ2xlYW51cEFmdGVyUmVuZGVyID0gITE7XG4gICAgICAgICAgdGhpcy5faW50ZW50U3RhdGVzID0gbmV3IE1hcCgpO1xuICAgICAgICAgIHRoaXMuZGVzdHJveWVkID0gITE7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHBhZ2VOdW1iZXIoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3BhZ2VJbmRleCArIDE7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHJvdGF0ZSgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fcGFnZUluZm8ucm90YXRlO1xuICAgICAgICB9XG4gICAgICAgIGdldCByZWYoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3BhZ2VJbmZvLnJlZjtcbiAgICAgICAgfVxuICAgICAgICBnZXQgdXNlclVuaXQoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3BhZ2VJbmZvLnVzZXJVbml0O1xuICAgICAgICB9XG4gICAgICAgIGdldCB2aWV3KCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9wYWdlSW5mby52aWV3O1xuICAgICAgICB9XG4gICAgICAgIGdldFZpZXdwb3J0KCkge1xuICAgICAgICAgIGxldCB7XG4gICAgICAgICAgICBzY2FsZTogdCxcbiAgICAgICAgICAgIHJvdGF0aW9uOiBlID0gdGhpcy5yb3RhdGUsXG4gICAgICAgICAgICBvZmZzZXRYOiBuID0gMCxcbiAgICAgICAgICAgIG9mZnNldFk6IGkgPSAwLFxuICAgICAgICAgICAgZG9udEZsaXA6IHIgPSAhMVxuICAgICAgICAgIH0gPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1swXSA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICAgICAgICAgIHJldHVybiBuZXcgX2Rpc3BsYXlfdXRpbHMuUGFnZVZpZXdwb3J0KHtcbiAgICAgICAgICAgIHZpZXdCb3g6IHRoaXMudmlldyxcbiAgICAgICAgICAgIHNjYWxlOiB0LFxuICAgICAgICAgICAgcm90YXRpb246IGUsXG4gICAgICAgICAgICBvZmZzZXRYOiBuLFxuICAgICAgICAgICAgb2Zmc2V0WTogaSxcbiAgICAgICAgICAgIGRvbnRGbGlwOiByXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0QW5ub3RhdGlvbnMoKSB7XG4gICAgICAgICAgbGV0IHtcbiAgICAgICAgICAgIGludGVudDogdCA9IFwiZGlzcGxheVwiXG4gICAgICAgICAgfSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzBdID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgICAgICAgY29uc3QgZSA9IHRoaXMuX3RyYW5zcG9ydC5nZXRSZW5kZXJpbmdJbnRlbnQodCk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRBbm5vdGF0aW9ucyh0aGlzLl9wYWdlSW5kZXgsIGUucmVuZGVyaW5nSW50ZW50KTtcbiAgICAgICAgfVxuICAgICAgICBnZXRKU0FjdGlvbnMoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRQYWdlSlNBY3Rpb25zKHRoaXMuX3BhZ2VJbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGZpbHRlckZhY3RvcnkoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5maWx0ZXJGYWN0b3J5O1xuICAgICAgICB9XG4gICAgICAgIGdldCBpc1B1cmVYZmEoKSB7XG4gICAgICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsIFwiaXNQdXJlWGZhXCIsICEhdGhpcy5fdHJhbnNwb3J0Ll9odG1sRm9yWGZhKTtcbiAgICAgICAgfVxuICAgICAgICBhc3luYyBnZXRYZmEoKSB7XG4gICAgICAgICAgdmFyIF90aGlzJF90cmFuc3BvcnQkX2h0bTtcbiAgICAgICAgICByZXR1cm4gKChfdGhpcyRfdHJhbnNwb3J0JF9odG0gPSB0aGlzLl90cmFuc3BvcnQuX2h0bWxGb3JYZmEpID09PSBudWxsIHx8IF90aGlzJF90cmFuc3BvcnQkX2h0bSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkX3RyYW5zcG9ydCRfaHRtLmNoaWxkcmVuW3RoaXMuX3BhZ2VJbmRleF0pIHx8IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyKHQpIHtcbiAgICAgICAgICB2YXIgX3RoaXMkX3N0YXRzLCBfdTtcbiAgICAgICAgICBsZXQge1xuICAgICAgICAgICAgY2FudmFzQ29udGV4dDogZSxcbiAgICAgICAgICAgIHZpZXdwb3J0OiBuLFxuICAgICAgICAgICAgaW50ZW50OiBpID0gXCJkaXNwbGF5XCIsXG4gICAgICAgICAgICBhbm5vdGF0aW9uTW9kZTogciA9IF91dGlsLkFubm90YXRpb25Nb2RlLkVOQUJMRSxcbiAgICAgICAgICAgIHRyYW5zZm9ybTogcyA9IG51bGwsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiBhID0gbnVsbCxcbiAgICAgICAgICAgIG9wdGlvbmFsQ29udGVudENvbmZpZ1Byb21pc2U6IG8gPSBudWxsLFxuICAgICAgICAgICAgYW5ub3RhdGlvbkNhbnZhc01hcDogbCA9IG51bGwsXG4gICAgICAgICAgICBwYWdlQ29sb3JzOiBjID0gbnVsbCxcbiAgICAgICAgICAgIHByaW50QW5ub3RhdGlvblN0b3JhZ2U6IGggPSBudWxsXG4gICAgICAgICAgfSA9IHQ7XG4gICAgICAgICAgKF90aGlzJF9zdGF0cyA9IHRoaXMuX3N0YXRzKSA9PT0gbnVsbCB8fCBfdGhpcyRfc3RhdHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJF9zdGF0cy50aW1lKFwiT3ZlcmFsbFwiKTtcbiAgICAgICAgICBjb25zdCBkID0gdGhpcy5fdHJhbnNwb3J0LmdldFJlbmRlcmluZ0ludGVudChpLCByLCBoKTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX2ksICExKTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9yLCBfcjIpLmNhbGwodGhpcyk7XG4gICAgICAgICAgbyB8fCAobyA9IHRoaXMuX3RyYW5zcG9ydC5nZXRPcHRpb25hbENvbnRlbnRDb25maWcoKSk7XG4gICAgICAgICAgbGV0IHUgPSB0aGlzLl9pbnRlbnRTdGF0ZXMuZ2V0KGQuY2FjaGVLZXkpO1xuICAgICAgICAgIGlmICghdSkge1xuICAgICAgICAgICAgdSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICB0aGlzLl9pbnRlbnRTdGF0ZXMuc2V0KGQuY2FjaGVLZXksIHUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodS5zdHJlYW1SZWFkZXJDYW5jZWxUaW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodS5zdHJlYW1SZWFkZXJDYW5jZWxUaW1lb3V0KTtcbiAgICAgICAgICAgIHUuc3RyZWFtUmVhZGVyQ2FuY2VsVGltZW91dCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHAgPSAhIShkLnJlbmRlcmluZ0ludGVudCAmIF91dGlsLlJlbmRlcmluZ0ludGVudEZsYWcuUFJJTlQpO1xuICAgICAgICAgIGlmICghdS5kaXNwbGF5UmVhZHlDYXBhYmlsaXR5KSB7XG4gICAgICAgICAgICB2YXIgX3RoaXMkX3N0YXRzMjtcbiAgICAgICAgICAgIHUuZGlzcGxheVJlYWR5Q2FwYWJpbGl0eSA9IG5ldyBfdXRpbC5Qcm9taXNlQ2FwYWJpbGl0eSgpO1xuICAgICAgICAgICAgdS5vcGVyYXRvckxpc3QgPSB7XG4gICAgICAgICAgICAgIGZuQXJyYXk6IFtdLFxuICAgICAgICAgICAgICBhcmdzQXJyYXk6IFtdLFxuICAgICAgICAgICAgICBsYXN0Q2h1bms6ICExLFxuICAgICAgICAgICAgICBzZXBhcmF0ZUFubm90czogbnVsbFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIChfdGhpcyRfc3RhdHMyID0gdGhpcy5fc3RhdHMpID09PSBudWxsIHx8IF90aGlzJF9zdGF0czIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJF9zdGF0czIudGltZShcIlBhZ2UgUmVxdWVzdFwiKTtcbiAgICAgICAgICAgIHRoaXMuX3B1bXBPcGVyYXRvckxpc3QoZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGNvbXBsZXRlID0gdCA9PiB7XG4gICAgICAgICAgICAgIHZhciBfdGhpcyRfc3RhdHMzLCBfdGhpcyRfc3RhdHM0O1xuICAgICAgICAgICAgICB1LnJlbmRlclRhc2tzLmRlbGV0ZShmKTtcbiAgICAgICAgICAgICAgKHRoaXMuX21heWJlQ2xlYW51cEFmdGVyUmVuZGVyIHx8IHApICYmIF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfaSwgITApO1xuICAgICAgICAgICAgICBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9zLCBfczIpLmNhbGwodGhpcywgIXApO1xuICAgICAgICAgICAgICBpZiAodCkge1xuICAgICAgICAgICAgICAgIGYuY2FwYWJpbGl0eS5yZWplY3QodCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWJvcnRPcGVyYXRvckxpc3Qoe1xuICAgICAgICAgICAgICAgICAgaW50ZW50U3RhdGU6IHUsXG4gICAgICAgICAgICAgICAgICByZWFzb246IHQgaW5zdGFuY2VvZiBFcnJvciA/IHQgOiBuZXcgRXJyb3IodClcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSBlbHNlIGYuY2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgIChfdGhpcyRfc3RhdHMzID0gdGhpcy5fc3RhdHMpID09PSBudWxsIHx8IF90aGlzJF9zdGF0czMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJF9zdGF0czMudGltZUVuZChcIlJlbmRlcmluZ1wiKTtcbiAgICAgICAgICAgICAgKF90aGlzJF9zdGF0czQgPSB0aGlzLl9zdGF0cykgPT09IG51bGwgfHwgX3RoaXMkX3N0YXRzNCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkX3N0YXRzNC50aW1lRW5kKFwiT3ZlcmFsbFwiKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmID0gbmV3IEludGVybmFsUmVuZGVyVGFzayh7XG4gICAgICAgICAgICAgIGNhbGxiYWNrOiBjb21wbGV0ZSxcbiAgICAgICAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgY2FudmFzQ29udGV4dDogZSxcbiAgICAgICAgICAgICAgICB2aWV3cG9ydDogbixcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IHMsXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogYVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBvYmpzOiB0aGlzLm9ianMsXG4gICAgICAgICAgICAgIGNvbW1vbk9ianM6IHRoaXMuY29tbW9uT2JqcyxcbiAgICAgICAgICAgICAgYW5ub3RhdGlvbkNhbnZhc01hcDogbCxcbiAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0OiB1Lm9wZXJhdG9yTGlzdCxcbiAgICAgICAgICAgICAgcGFnZUluZGV4OiB0aGlzLl9wYWdlSW5kZXgsXG4gICAgICAgICAgICAgIGNhbnZhc0ZhY3Rvcnk6IHRoaXMuX3RyYW5zcG9ydC5jYW52YXNGYWN0b3J5LFxuICAgICAgICAgICAgICBmaWx0ZXJGYWN0b3J5OiB0aGlzLl90cmFuc3BvcnQuZmlsdGVyRmFjdG9yeSxcbiAgICAgICAgICAgICAgdXNlUmVxdWVzdEFuaW1hdGlvbkZyYW1lOiAhcCxcbiAgICAgICAgICAgICAgcGRmQnVnOiB0aGlzLl9wZGZCdWcsXG4gICAgICAgICAgICAgIHBhZ2VDb2xvcnM6IGNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICgoX3UgPSB1KS5yZW5kZXJUYXNrcyB8fCAoX3UucmVuZGVyVGFza3MgPSBuZXcgU2V0KCkpKS5hZGQoZik7XG4gICAgICAgICAgY29uc3QgZyA9IGYudGFzaztcbiAgICAgICAgICBQcm9taXNlLmFsbChbdS5kaXNwbGF5UmVhZHlDYXBhYmlsaXR5LnByb21pc2UsIG9dKS50aGVuKHQgPT4ge1xuICAgICAgICAgICAgbGV0IFtlLCBuXSA9IHQ7XG4gICAgICAgICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIGNvbXBsZXRlKCk7ZWxzZSB7XG4gICAgICAgICAgICAgIHZhciBfdGhpcyRfc3RhdHM1O1xuICAgICAgICAgICAgICAoX3RoaXMkX3N0YXRzNSA9IHRoaXMuX3N0YXRzKSA9PT0gbnVsbCB8fCBfdGhpcyRfc3RhdHM1ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRfc3RhdHM1LnRpbWUoXCJSZW5kZXJpbmdcIik7XG4gICAgICAgICAgICAgIGYuaW5pdGlhbGl6ZUdyYXBoaWNzKHtcbiAgICAgICAgICAgICAgICB0cmFuc3BhcmVuY3k6IGUsXG4gICAgICAgICAgICAgICAgb3B0aW9uYWxDb250ZW50Q29uZmlnOiBuXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBmLm9wZXJhdG9yTGlzdENoYW5nZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KS5jYXRjaChjb21wbGV0ZSk7XG4gICAgICAgICAgcmV0dXJuIGc7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0T3BlcmF0b3JMaXN0KCkge1xuICAgICAgICAgIGxldCB7XG4gICAgICAgICAgICBpbnRlbnQ6IHQgPSBcImRpc3BsYXlcIixcbiAgICAgICAgICAgIGFubm90YXRpb25Nb2RlOiBlID0gX3V0aWwuQW5ub3RhdGlvbk1vZGUuRU5BQkxFLFxuICAgICAgICAgICAgcHJpbnRBbm5vdGF0aW9uU3RvcmFnZTogbiA9IG51bGxcbiAgICAgICAgICB9ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMF0gPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICAgICAgICBjb25zdCBpID0gdGhpcy5fdHJhbnNwb3J0LmdldFJlbmRlcmluZ0ludGVudCh0LCBlLCBuLCAhMCk7XG4gICAgICAgICAgbGV0IHIsXG4gICAgICAgICAgICBzID0gdGhpcy5faW50ZW50U3RhdGVzLmdldChpLmNhY2hlS2V5KTtcbiAgICAgICAgICBpZiAoIXMpIHtcbiAgICAgICAgICAgIHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgdGhpcy5faW50ZW50U3RhdGVzLnNldChpLmNhY2hlS2V5LCBzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFzLm9wTGlzdFJlYWRDYXBhYmlsaXR5KSB7XG4gICAgICAgICAgICB2YXIgX3MzLCBfdGhpcyRfc3RhdHM2O1xuICAgICAgICAgICAgciA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICByLm9wZXJhdG9yTGlzdENoYW5nZWQgPSBmdW5jdGlvbiBvcGVyYXRvckxpc3RDaGFuZ2VkKCkge1xuICAgICAgICAgICAgICBpZiAocy5vcGVyYXRvckxpc3QubGFzdENodW5rKSB7XG4gICAgICAgICAgICAgICAgcy5vcExpc3RSZWFkQ2FwYWJpbGl0eS5yZXNvbHZlKHMub3BlcmF0b3JMaXN0KTtcbiAgICAgICAgICAgICAgICBzLnJlbmRlclRhc2tzLmRlbGV0ZShyKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHMub3BMaXN0UmVhZENhcGFiaWxpdHkgPSBuZXcgX3V0aWwuUHJvbWlzZUNhcGFiaWxpdHkoKTtcbiAgICAgICAgICAgICgoX3MzID0gcykucmVuZGVyVGFza3MgfHwgKF9zMy5yZW5kZXJUYXNrcyA9IG5ldyBTZXQoKSkpLmFkZChyKTtcbiAgICAgICAgICAgIHMub3BlcmF0b3JMaXN0ID0ge1xuICAgICAgICAgICAgICBmbkFycmF5OiBbXSxcbiAgICAgICAgICAgICAgYXJnc0FycmF5OiBbXSxcbiAgICAgICAgICAgICAgbGFzdENodW5rOiAhMSxcbiAgICAgICAgICAgICAgc2VwYXJhdGVBbm5vdHM6IG51bGxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAoX3RoaXMkX3N0YXRzNiA9IHRoaXMuX3N0YXRzKSA9PT0gbnVsbCB8fCBfdGhpcyRfc3RhdHM2ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRfc3RhdHM2LnRpbWUoXCJQYWdlIFJlcXVlc3RcIik7XG4gICAgICAgICAgICB0aGlzLl9wdW1wT3BlcmF0b3JMaXN0KGkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcy5vcExpc3RSZWFkQ2FwYWJpbGl0eS5wcm9taXNlO1xuICAgICAgICB9XG4gICAgICAgIHN0cmVhbVRleHRDb250ZW50KCkge1xuICAgICAgICAgIGxldCB7XG4gICAgICAgICAgICBpbmNsdWRlTWFya2VkQ29udGVudDogdCA9ICExLFxuICAgICAgICAgICAgZGlzYWJsZU5vcm1hbGl6YXRpb246IGUgPSAhMVxuICAgICAgICAgIH0gPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1swXSA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhTdHJlYW0oXCJHZXRUZXh0Q29udGVudFwiLCB7XG4gICAgICAgICAgICBwYWdlSW5kZXg6IHRoaXMuX3BhZ2VJbmRleCxcbiAgICAgICAgICAgIGluY2x1ZGVNYXJrZWRDb250ZW50OiAhMCA9PT0gdCxcbiAgICAgICAgICAgIGRpc2FibGVOb3JtYWxpemF0aW9uOiAhMCA9PT0gZVxuICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgIGhpZ2hXYXRlck1hcms6IDEwMCxcbiAgICAgICAgICAgIHNpemU6IHQgPT4gdC5pdGVtcy5sZW5ndGhcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBnZXRUZXh0Q29udGVudCgpIHtcbiAgICAgICAgICBsZXQgdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzBdID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgICAgICAgaWYgKHRoaXMuX3RyYW5zcG9ydC5faHRtbEZvclhmYSkgcmV0dXJuIHRoaXMuZ2V0WGZhKCkudGhlbih0ID0+IF94ZmFfdGV4dC5YZmFUZXh0LnRleHRDb250ZW50KHQpKTtcbiAgICAgICAgICBjb25zdCBlID0gdGhpcy5zdHJlYW1UZXh0Q29udGVudCh0KTtcbiAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHQsIG4pIHtcbiAgICAgICAgICAgIGNvbnN0IGkgPSBlLmdldFJlYWRlcigpLFxuICAgICAgICAgICAgICByID0ge1xuICAgICAgICAgICAgICAgIGl0ZW1zOiBbXSxcbiAgICAgICAgICAgICAgICBzdHlsZXM6IE9iamVjdC5jcmVhdGUobnVsbClcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICFmdW5jdGlvbiBwdW1wKCkge1xuICAgICAgICAgICAgICBpLnJlYWQoKS50aGVuKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgbGV0IHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBuLFxuICAgICAgICAgICAgICAgICAgZG9uZTogaVxuICAgICAgICAgICAgICAgIH0gPSBlO1xuICAgICAgICAgICAgICAgIGlmIChpKSB0KHIpO2Vsc2Uge1xuICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihyLnN0eWxlcywgbi5zdHlsZXMpO1xuICAgICAgICAgICAgICAgICAgci5pdGVtcy5wdXNoKC4uLm4uaXRlbXMpO1xuICAgICAgICAgICAgICAgICAgcHVtcCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSwgbik7XG4gICAgICAgICAgICB9KCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0U3RydWN0VHJlZSgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFN0cnVjdFRyZWUodGhpcy5fcGFnZUluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBfZGVzdHJveSgpIHtcbiAgICAgICAgICB0aGlzLmRlc3Ryb3llZCA9ICEwO1xuICAgICAgICAgIGNvbnN0IHQgPSBbXTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgdGhpcy5faW50ZW50U3RhdGVzLnZhbHVlcygpKSB7XG4gICAgICAgICAgICB0aGlzLl9hYm9ydE9wZXJhdG9yTGlzdCh7XG4gICAgICAgICAgICAgIGludGVudFN0YXRlOiBlLFxuICAgICAgICAgICAgICByZWFzb246IG5ldyBFcnJvcihcIlBhZ2Ugd2FzIGRlc3Ryb3llZC5cIiksXG4gICAgICAgICAgICAgIGZvcmNlOiAhMFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIWUub3BMaXN0UmVhZENhcGFiaWxpdHkpIGZvciAoY29uc3QgbiBvZiBlLnJlbmRlclRhc2tzKSB7XG4gICAgICAgICAgICAgIHQucHVzaChuLmNvbXBsZXRlZCk7XG4gICAgICAgICAgICAgIG4uY2FuY2VsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMub2Jqcy5jbGVhcigpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfaSwgITEpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX3IsIF9yMikuY2FsbCh0aGlzKTtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwodCk7XG4gICAgICAgIH1cbiAgICAgICAgY2xlYW51cCgpIHtcbiAgICAgICAgICBsZXQgdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzBdICYmIGFyZ3VtZW50c1swXTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX2ksICEwKTtcbiAgICAgICAgICBjb25zdCBlID0gX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfcywgX3MyKS5jYWxsKHRoaXMsICExKTtcbiAgICAgICAgICB0ICYmIGUgJiYgdGhpcy5fc3RhdHMgJiYgKHRoaXMuX3N0YXRzID0gbmV3IF9kaXNwbGF5X3V0aWxzLlN0YXRUaW1lcigpKTtcbiAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgfVxuICAgICAgICBfc3RhcnRSZW5kZXJQYWdlKHQsIGUpIHtcbiAgICAgICAgICBjb25zdCBuID0gdGhpcy5faW50ZW50U3RhdGVzLmdldChlKTtcbiAgICAgICAgICBpZiAobikge1xuICAgICAgICAgICAgdmFyIF90aGlzJF9zdGF0czcsIF9uJGRpc3BsYXlSZWFkeUNhcGFiaTtcbiAgICAgICAgICAgIChfdGhpcyRfc3RhdHM3ID0gdGhpcy5fc3RhdHMpID09PSBudWxsIHx8IF90aGlzJF9zdGF0czcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJF9zdGF0czcudGltZUVuZChcIlBhZ2UgUmVxdWVzdFwiKTtcbiAgICAgICAgICAgIChfbiRkaXNwbGF5UmVhZHlDYXBhYmkgPSBuLmRpc3BsYXlSZWFkeUNhcGFiaWxpdHkpID09PSBudWxsIHx8IF9uJGRpc3BsYXlSZWFkeUNhcGFiaSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX24kZGlzcGxheVJlYWR5Q2FwYWJpLnJlc29sdmUodCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIF9yZW5kZXJQYWdlQ2h1bmsodCwgZSkge1xuICAgICAgICAgIGZvciAobGV0IG4gPSAwLCBpID0gdC5sZW5ndGg7IG4gPCBpOyBuKyspIHtcbiAgICAgICAgICAgIGUub3BlcmF0b3JMaXN0LmZuQXJyYXkucHVzaCh0LmZuQXJyYXlbbl0pO1xuICAgICAgICAgICAgZS5vcGVyYXRvckxpc3QuYXJnc0FycmF5LnB1c2godC5hcmdzQXJyYXlbbl0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlLm9wZXJhdG9yTGlzdC5sYXN0Q2h1bmsgPSB0Lmxhc3RDaHVuaztcbiAgICAgICAgICBlLm9wZXJhdG9yTGlzdC5zZXBhcmF0ZUFubm90cyA9IHQuc2VwYXJhdGVBbm5vdHM7XG4gICAgICAgICAgZm9yIChjb25zdCB0IG9mIGUucmVuZGVyVGFza3MpIHQub3BlcmF0b3JMaXN0Q2hhbmdlZCgpO1xuICAgICAgICAgIHQubGFzdENodW5rICYmIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX3MsIF9zMikuY2FsbCh0aGlzLCAhMCk7XG4gICAgICAgIH1cbiAgICAgICAgX3B1bXBPcGVyYXRvckxpc3QodCkge1xuICAgICAgICAgIGxldCB7XG4gICAgICAgICAgICByZW5kZXJpbmdJbnRlbnQ6IGUsXG4gICAgICAgICAgICBjYWNoZUtleTogbixcbiAgICAgICAgICAgIGFubm90YXRpb25TdG9yYWdlU2VyaWFsaXphYmxlOiBpXG4gICAgICAgICAgfSA9IHQ7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICBtYXA6IHIsXG4gICAgICAgICAgICAgIHRyYW5zZmVyczogc1xuICAgICAgICAgICAgfSA9IGksXG4gICAgICAgICAgICBhID0gdGhpcy5fdHJhbnNwb3J0Lm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoU3RyZWFtKFwiR2V0T3BlcmF0b3JMaXN0XCIsIHtcbiAgICAgICAgICAgICAgcGFnZUluZGV4OiB0aGlzLl9wYWdlSW5kZXgsXG4gICAgICAgICAgICAgIGludGVudDogZSxcbiAgICAgICAgICAgICAgY2FjaGVLZXk6IG4sXG4gICAgICAgICAgICAgIGFubm90YXRpb25TdG9yYWdlOiByXG4gICAgICAgICAgICB9LCBzKS5nZXRSZWFkZXIoKSxcbiAgICAgICAgICAgIG8gPSB0aGlzLl9pbnRlbnRTdGF0ZXMuZ2V0KG4pO1xuICAgICAgICAgIG8uc3RyZWFtUmVhZGVyID0gYTtcbiAgICAgICAgICBjb25zdCBwdW1wID0gKCkgPT4ge1xuICAgICAgICAgICAgYS5yZWFkKCkudGhlbih0ID0+IHtcbiAgICAgICAgICAgICAgbGV0IHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogZSxcbiAgICAgICAgICAgICAgICBkb25lOiBuXG4gICAgICAgICAgICAgIH0gPSB0O1xuICAgICAgICAgICAgICBpZiAobikgby5zdHJlYW1SZWFkZXIgPSBudWxsO2Vsc2UgaWYgKCF0aGlzLl90cmFuc3BvcnQuZGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyUGFnZUNodW5rKGUsIG8pO1xuICAgICAgICAgICAgICAgIHB1bXAoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgdCA9PiB7XG4gICAgICAgICAgICAgIG8uc3RyZWFtUmVhZGVyID0gbnVsbDtcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLl90cmFuc3BvcnQuZGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKG8ub3BlcmF0b3JMaXN0KSB7XG4gICAgICAgICAgICAgICAgICBvLm9wZXJhdG9yTGlzdC5sYXN0Q2h1bmsgPSAhMDtcbiAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdCBvZiBvLnJlbmRlclRhc2tzKSB0Lm9wZXJhdG9yTGlzdENoYW5nZWQoKTtcbiAgICAgICAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX3MsIF9zMikuY2FsbCh0aGlzLCAhMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvLmRpc3BsYXlSZWFkeUNhcGFiaWxpdHkpIG8uZGlzcGxheVJlYWR5Q2FwYWJpbGl0eS5yZWplY3QodCk7ZWxzZSB7XG4gICAgICAgICAgICAgICAgICBpZiAoIW8ub3BMaXN0UmVhZENhcGFiaWxpdHkpIHRocm93IHQ7XG4gICAgICAgICAgICAgICAgICBvLm9wTGlzdFJlYWRDYXBhYmlsaXR5LnJlamVjdCh0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH07XG4gICAgICAgICAgcHVtcCgpO1xuICAgICAgICB9XG4gICAgICAgIF9hYm9ydE9wZXJhdG9yTGlzdCh0KSB7XG4gICAgICAgICAgbGV0IHtcbiAgICAgICAgICAgIGludGVudFN0YXRlOiBlLFxuICAgICAgICAgICAgcmVhc29uOiBuLFxuICAgICAgICAgICAgZm9yY2U6IGkgPSAhMVxuICAgICAgICAgIH0gPSB0O1xuICAgICAgICAgIGlmIChlLnN0cmVhbVJlYWRlcikge1xuICAgICAgICAgICAgaWYgKGUuc3RyZWFtUmVhZGVyQ2FuY2VsVGltZW91dCkge1xuICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoZS5zdHJlYW1SZWFkZXJDYW5jZWxUaW1lb3V0KTtcbiAgICAgICAgICAgICAgZS5zdHJlYW1SZWFkZXJDYW5jZWxUaW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaSkge1xuICAgICAgICAgICAgICBpZiAoZS5yZW5kZXJUYXNrcy5zaXplID4gMCkgcmV0dXJuO1xuICAgICAgICAgICAgICBpZiAobiBpbnN0YW5jZW9mIF9kaXNwbGF5X3V0aWxzLlJlbmRlcmluZ0NhbmNlbGxlZEV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgIGxldCB0ID0gUkVOREVSSU5HX0NBTkNFTExFRF9USU1FT1VUO1xuICAgICAgICAgICAgICAgIG4uZXh0cmFEZWxheSA+IDAgJiYgbi5leHRyYURlbGF5IDwgMWUzICYmICh0ICs9IG4uZXh0cmFEZWxheSk7XG4gICAgICAgICAgICAgICAgZS5zdHJlYW1SZWFkZXJDYW5jZWxUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBlLnN0cmVhbVJlYWRlckNhbmNlbFRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgdGhpcy5fYWJvcnRPcGVyYXRvckxpc3Qoe1xuICAgICAgICAgICAgICAgICAgICBpbnRlbnRTdGF0ZTogZSxcbiAgICAgICAgICAgICAgICAgICAgcmVhc29uOiBuLFxuICAgICAgICAgICAgICAgICAgICBmb3JjZTogITBcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sIHQpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZS5zdHJlYW1SZWFkZXIuY2FuY2VsKG5ldyBfdXRpbC5BYm9ydEV4Y2VwdGlvbihuLm1lc3NhZ2UpKS5jYXRjaCgoKSA9PiB7fSk7XG4gICAgICAgICAgICBlLnN0cmVhbVJlYWRlciA9IG51bGw7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX3RyYW5zcG9ydC5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBbdCwgbl0gb2YgdGhpcy5faW50ZW50U3RhdGVzKSBpZiAobiA9PT0gZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ludGVudFN0YXRlcy5kZWxldGUodCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5jbGVhbnVwKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGdldCBzdGF0cygpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhdHM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF9zMigpIHtcbiAgICAgICAgbGV0IHQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1swXSAmJiBhcmd1bWVudHNbMF07XG4gICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX3IsIF9yMikuY2FsbCh0aGlzKTtcbiAgICAgICAgaWYgKCFfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2kpIHx8IHRoaXMuZGVzdHJveWVkKSByZXR1cm4gITE7XG4gICAgICAgIGlmICh0KSB7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9uLCBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfbiwgbnVsbCk7XG4gICAgICAgICAgICBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9zLCBfczIpLmNhbGwodGhpcywgITEpO1xuICAgICAgICAgIH0sIERFTEFZRURfQ0xFQU5VUF9USU1FT1VUKSk7XG4gICAgICAgICAgcmV0dXJuICExO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3Qge1xuICAgICAgICAgIHJlbmRlclRhc2tzOiB0LFxuICAgICAgICAgIG9wZXJhdG9yTGlzdDogZVxuICAgICAgICB9IG9mIHRoaXMuX2ludGVudFN0YXRlcy52YWx1ZXMoKSkgaWYgKHQuc2l6ZSA+IDAgfHwgIWUubGFzdENodW5rKSByZXR1cm4gITE7XG4gICAgICAgIHRoaXMuX2ludGVudFN0YXRlcy5jbGVhcigpO1xuICAgICAgICB0aGlzLm9ianMuY2xlYXIoKTtcbiAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9pLCAhMSk7XG4gICAgICAgIHJldHVybiAhMDtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF9yMigpIHtcbiAgICAgICAgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfbikpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9uKSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9uLCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXhwb3J0cy5QREZQYWdlUHJveHkgPSBQREZQYWdlUHJveHk7XG4gICAgICB2YXIgX2EgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfbyA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xuICAgICAgY2xhc3MgTG9vcGJhY2tQb3J0IHtcbiAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2EsIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IG5ldyBTZXQoKVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9vLCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHBvc3RNZXNzYWdlKHQsIGUpIHtcbiAgICAgICAgICBjb25zdCBuID0ge1xuICAgICAgICAgICAgZGF0YTogc3RydWN0dXJlZENsb25lKHQsIG51bGwpXG4gICAgICAgICAgfTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX28pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZm9yIChjb25zdCB0IG9mIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfYSkpIHQuY2FsbCh0aGlzLCBuKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBhZGRFdmVudExpc3RlbmVyKHQsIGUpIHtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2EpLmFkZChlKTtcbiAgICAgICAgfVxuICAgICAgICByZW1vdmVFdmVudExpc3RlbmVyKHQsIGUpIHtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2EpLmRlbGV0ZShlKTtcbiAgICAgICAgfVxuICAgICAgICB0ZXJtaW5hdGUoKSB7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9hKS5jbGVhcigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBleHBvcnRzLkxvb3BiYWNrUG9ydCA9IExvb3BiYWNrUG9ydDtcbiAgICAgIGNvbnN0IFBERldvcmtlclV0aWwgPSB7XG4gICAgICAgIGlzV29ya2VyRGlzYWJsZWQ6ICExLFxuICAgICAgICBmYWxsYmFja1dvcmtlclNyYzogbnVsbCxcbiAgICAgICAgZmFrZVdvcmtlcklkOiAwXG4gICAgICB9O1xuICAgICAgZXhwb3J0cy5QREZXb3JrZXJVdGlsID0gUERGV29ya2VyVXRpbDtcbiAgICAgIGlmIChfdXRpbC5pc05vZGVKUyAmJiBcImZ1bmN0aW9uXCIgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIFBERldvcmtlclV0aWwuaXNXb3JrZXJEaXNhYmxlZCA9ICEwO1xuICAgICAgICBQREZXb3JrZXJVdGlsLmZhbGxiYWNrV29ya2VyU3JjID0gXCIuL3BkZi53b3JrZXIuanNcIjtcbiAgICAgIH0gZWxzZSBpZiAoXCJvYmplY3RcIiA9PSB0eXBlb2YgZG9jdW1lbnQpIHtcbiAgICAgICAgdmFyIF9kb2N1bWVudDtcbiAgICAgICAgY29uc3QgdCA9IChfZG9jdW1lbnQgPSBkb2N1bWVudCkgPT09IG51bGwgfHwgX2RvY3VtZW50ID09PSB2b2lkIDAgfHwgKF9kb2N1bWVudCA9IF9kb2N1bWVudC5jdXJyZW50U2NyaXB0KSA9PT0gbnVsbCB8fCBfZG9jdW1lbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kb2N1bWVudC5zcmM7XG4gICAgICAgIHQgJiYgKFBERldvcmtlclV0aWwuZmFsbGJhY2tXb3JrZXJTcmMgPSB0LnJlcGxhY2UoLyhcXC4oPzptaW5cXC4pP2pzKShcXD8uKik/JC9pLCBcIi53b3JrZXIkMSQyXCIpKTtcbiAgICAgIH1cbiAgICAgIFBERldvcmtlclV0aWwuaXNTYW1lT3JpZ2luID0gZnVuY3Rpb24gKHQsIGUpIHtcbiAgICAgICAgbGV0IG47XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbiA9IG5ldyBVUkwodCk7XG4gICAgICAgICAgaWYgKCFuLm9yaWdpbiB8fCBcIm51bGxcIiA9PT0gbi5vcmlnaW4pIHJldHVybiAhMTtcbiAgICAgICAgfSBjYXRjaCAoX3VudXNlZDUpIHtcbiAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaSA9IG5ldyBVUkwoZSwgbik7XG4gICAgICAgIHJldHVybiBuLm9yaWdpbiA9PT0gaS5vcmlnaW47XG4gICAgICB9O1xuICAgICAgUERGV29ya2VyVXRpbC5jcmVhdGVDRE5XcmFwcGVyID0gZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgY29uc3QgZSA9IFwiaW1wb3J0U2NyaXB0cyhcXFwiXCIuY29uY2F0KHQsIFwiXFxcIik7XCIpO1xuICAgICAgICByZXR1cm4gVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbZV0pKTtcbiAgICAgIH07XG4gICAgICBjbGFzcyBQREZXb3JrZXIge1xuICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICBsZXQge1xuICAgICAgICAgICAgbmFtZTogdCA9IG51bGwsXG4gICAgICAgICAgICBwb3J0OiBlID0gbnVsbCxcbiAgICAgICAgICAgIHZlcmJvc2l0eTogbiA9ICgwLCBfdXRpbC5nZXRWZXJib3NpdHlMZXZlbCkoKVxuICAgICAgICAgIH0gPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1swXSA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICAgICAgICAgIGlmIChlICYmIF9jbGFzc1N0YXRpY1ByaXZhdGVGaWVsZFNwZWNHZXQoUERGV29ya2VyLCBQREZXb3JrZXIsIF9sKS5oYXMoZSkpIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCB1c2UgbW9yZSB0aGFuIG9uZSBQREZXb3JrZXIgcGVyIHBvcnQuXCIpO1xuICAgICAgICAgIHRoaXMubmFtZSA9IHQ7XG4gICAgICAgICAgdGhpcy5kZXN0cm95ZWQgPSAhMTtcbiAgICAgICAgICB0aGlzLnZlcmJvc2l0eSA9IG47XG4gICAgICAgICAgdGhpcy5fcmVhZHlDYXBhYmlsaXR5ID0gbmV3IF91dGlsLlByb21pc2VDYXBhYmlsaXR5KCk7XG4gICAgICAgICAgdGhpcy5fcG9ydCA9IG51bGw7XG4gICAgICAgICAgdGhpcy5fd2ViV29ya2VyID0gbnVsbDtcbiAgICAgICAgICB0aGlzLl9tZXNzYWdlSGFuZGxlciA9IG51bGw7XG4gICAgICAgICAgaWYgKGUpIHtcbiAgICAgICAgICAgIF9jbGFzc1N0YXRpY1ByaXZhdGVGaWVsZFNwZWNHZXQoUERGV29ya2VyLCBQREZXb3JrZXIsIF9sKS5zZXQoZSwgdGhpcyk7XG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsaXplRnJvbVBvcnQoZSk7XG4gICAgICAgICAgfSBlbHNlIHRoaXMuX2luaXRpYWxpemUoKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgcHJvbWlzZSgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fcmVhZHlDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHBvcnQoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3BvcnQ7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IG1lc3NhZ2VIYW5kbGVyKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9tZXNzYWdlSGFuZGxlcjtcbiAgICAgICAgfVxuICAgICAgICBfaW5pdGlhbGl6ZUZyb21Qb3J0KHQpIHtcbiAgICAgICAgICB0aGlzLl9wb3J0ID0gdDtcbiAgICAgICAgICB0aGlzLl9tZXNzYWdlSGFuZGxlciA9IG5ldyBfbWVzc2FnZV9oYW5kbGVyLk1lc3NhZ2VIYW5kbGVyKFwibWFpblwiLCBcIndvcmtlclwiLCB0KTtcbiAgICAgICAgICB0aGlzLl9tZXNzYWdlSGFuZGxlci5vbihcInJlYWR5XCIsIGZ1bmN0aW9uICgpIHt9KTtcbiAgICAgICAgICB0aGlzLl9yZWFkeUNhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICAgICAgICAgIHRoaXMuX21lc3NhZ2VIYW5kbGVyLnNlbmQoXCJjb25maWd1cmVcIiwge1xuICAgICAgICAgICAgdmVyYm9zaXR5OiB0aGlzLnZlcmJvc2l0eVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIF9pbml0aWFsaXplKCkge1xuICAgICAgICAgIGlmICghUERGV29ya2VyVXRpbC5pc1dvcmtlckRpc2FibGVkICYmICFQREZXb3JrZXIuX21haW5UaHJlYWRXb3JrZXJNZXNzYWdlSGFuZGxlcikge1xuICAgICAgICAgICAgbGV0IHtcbiAgICAgICAgICAgICAgd29ya2VyU3JjOiB0XG4gICAgICAgICAgICB9ID0gUERGV29ya2VyO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgUERGV29ya2VyVXRpbC5pc1NhbWVPcmlnaW4od2luZG93LmxvY2F0aW9uLmhyZWYsIHQpIHx8ICh0ID0gUERGV29ya2VyVXRpbC5jcmVhdGVDRE5XcmFwcGVyKG5ldyBVUkwodCwgd2luZG93LmxvY2F0aW9uKS5ocmVmKSk7XG4gICAgICAgICAgICAgIGNvbnN0IGUgPSBuZXcgV29ya2VyKHQpLFxuICAgICAgICAgICAgICAgIG4gPSBuZXcgX21lc3NhZ2VfaGFuZGxlci5NZXNzYWdlSGFuZGxlcihcIm1haW5cIiwgXCJ3b3JrZXJcIiwgZSksXG4gICAgICAgICAgICAgICAgdGVybWluYXRlRWFybHkgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBvbldvcmtlckVycm9yKTtcbiAgICAgICAgICAgICAgICAgIG4uZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgICAgZS50ZXJtaW5hdGUoKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveWVkID8gdGhpcy5fcmVhZHlDYXBhYmlsaXR5LnJlamVjdChuZXcgRXJyb3IoXCJXb3JrZXIgd2FzIGRlc3Ryb3llZFwiKSkgOiB0aGlzLl9zZXR1cEZha2VXb3JrZXIoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9uV29ya2VyRXJyb3IgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl93ZWJXb3JrZXIgfHwgdGVybWluYXRlRWFybHkoKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBlLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCBvbldvcmtlckVycm9yKTtcbiAgICAgICAgICAgICAgbi5vbihcInRlc3RcIiwgdCA9PiB7XG4gICAgICAgICAgICAgICAgZS5yZW1vdmVFdmVudExpc3RlbmVyKFwiZXJyb3JcIiwgb25Xb3JrZXJFcnJvcik7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSB0ZXJtaW5hdGVFYXJseSgpO2Vsc2UgaWYgKHQpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VIYW5kbGVyID0gbjtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcnQgPSBlO1xuICAgICAgICAgICAgICAgICAgdGhpcy5fd2ViV29ya2VyID0gZTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWR5Q2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICBuLnNlbmQoXCJjb25maWd1cmVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2ZXJib3NpdHk6IHRoaXMudmVyYm9zaXR5XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0dXBGYWtlV29ya2VyKCk7XG4gICAgICAgICAgICAgICAgICBuLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgIGUudGVybWluYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgbi5vbihcInJlYWR5XCIsIHQgPT4ge1xuICAgICAgICAgICAgICAgIGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsIG9uV29ya2VyRXJyb3IpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlc3Ryb3llZCkgdGVybWluYXRlRWFybHkoKTtlbHNlIHRyeSB7XG4gICAgICAgICAgICAgICAgICBzZW5kVGVzdCgpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKF91bnVzZWQ2KSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9zZXR1cEZha2VXb3JrZXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjb25zdCBzZW5kVGVzdCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB0ID0gbmV3IFVpbnQ4QXJyYXkoKTtcbiAgICAgICAgICAgICAgICBuLnNlbmQoXCJ0ZXN0XCIsIHQsIFt0LmJ1ZmZlcl0pO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBzZW5kVGVzdCgpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9IGNhdGNoIChfdW51c2VkNykge1xuICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoXCJUaGUgd29ya2VyIGhhcyBiZWVuIGRpc2FibGVkLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fc2V0dXBGYWtlV29ya2VyKCk7XG4gICAgICAgIH1cbiAgICAgICAgX3NldHVwRmFrZVdvcmtlcigpIHtcbiAgICAgICAgICBpZiAoIVBERldvcmtlclV0aWwuaXNXb3JrZXJEaXNhYmxlZCkge1xuICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiU2V0dGluZyB1cCBmYWtlIHdvcmtlci5cIik7XG4gICAgICAgICAgICBQREZXb3JrZXJVdGlsLmlzV29ya2VyRGlzYWJsZWQgPSAhMDtcbiAgICAgICAgICB9XG4gICAgICAgICAgUERGV29ya2VyLl9zZXR1cEZha2VXb3JrZXJHbG9iYWwudGhlbih0ID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgICAgICAgICB0aGlzLl9yZWFkeUNhcGFiaWxpdHkucmVqZWN0KG5ldyBFcnJvcihcIldvcmtlciB3YXMgZGVzdHJveWVkXCIpKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZSA9IG5ldyBMb29wYmFja1BvcnQoKTtcbiAgICAgICAgICAgIHRoaXMuX3BvcnQgPSBlO1xuICAgICAgICAgICAgY29uc3QgbiA9IFwiZmFrZVwiICsgUERGV29ya2VyVXRpbC5mYWtlV29ya2VySWQrKyxcbiAgICAgICAgICAgICAgaSA9IG5ldyBfbWVzc2FnZV9oYW5kbGVyLk1lc3NhZ2VIYW5kbGVyKG4gKyBcIl93b3JrZXJcIiwgbiwgZSk7XG4gICAgICAgICAgICB0LnNldHVwKGksIGUpO1xuICAgICAgICAgICAgY29uc3QgciA9IG5ldyBfbWVzc2FnZV9oYW5kbGVyLk1lc3NhZ2VIYW5kbGVyKG4sIG4gKyBcIl93b3JrZXJcIiwgZSk7XG4gICAgICAgICAgICB0aGlzLl9tZXNzYWdlSGFuZGxlciA9IHI7XG4gICAgICAgICAgICB0aGlzLl9yZWFkeUNhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICAgICAgICAgICAgci5zZW5kKFwiY29uZmlndXJlXCIsIHtcbiAgICAgICAgICAgICAgdmVyYm9zaXR5OiB0aGlzLnZlcmJvc2l0eVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSkuY2F0Y2godCA9PiB7XG4gICAgICAgICAgICB0aGlzLl9yZWFkeUNhcGFiaWxpdHkucmVqZWN0KG5ldyBFcnJvcihcIlNldHRpbmcgdXAgZmFrZSB3b3JrZXIgZmFpbGVkOiBcXFwiXCIuY29uY2F0KHQubWVzc2FnZSwgXCJcXFwiLlwiKSkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGRlc3Ryb3koKSB7XG4gICAgICAgICAgdGhpcy5kZXN0cm95ZWQgPSAhMDtcbiAgICAgICAgICBpZiAodGhpcy5fd2ViV29ya2VyKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWJXb3JrZXIudGVybWluYXRlKCk7XG4gICAgICAgICAgICB0aGlzLl93ZWJXb3JrZXIgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfY2xhc3NTdGF0aWNQcml2YXRlRmllbGRTcGVjR2V0KFBERldvcmtlciwgUERGV29ya2VyLCBfbCkuZGVsZXRlKHRoaXMuX3BvcnQpO1xuICAgICAgICAgIHRoaXMuX3BvcnQgPSBudWxsO1xuICAgICAgICAgIGlmICh0aGlzLl9tZXNzYWdlSGFuZGxlcikge1xuICAgICAgICAgICAgdGhpcy5fbWVzc2FnZUhhbmRsZXIuZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5fbWVzc2FnZUhhbmRsZXIgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgZnJvbVBvcnQodCkge1xuICAgICAgICAgIGlmICghKHQgIT09IG51bGwgJiYgdCAhPT0gdm9pZCAwICYmIHQucG9ydCkpIHRocm93IG5ldyBFcnJvcihcIlBERldvcmtlci5mcm9tUG9ydCAtIGludmFsaWQgbWV0aG9kIHNpZ25hdHVyZS5cIik7XG4gICAgICAgICAgcmV0dXJuIF9jbGFzc1N0YXRpY1ByaXZhdGVGaWVsZFNwZWNHZXQodGhpcywgUERGV29ya2VyLCBfbCkuaGFzKHQucG9ydCkgPyBfY2xhc3NTdGF0aWNQcml2YXRlRmllbGRTcGVjR2V0KHRoaXMsIFBERldvcmtlciwgX2wpLmdldCh0LnBvcnQpIDogbmV3IFBERldvcmtlcih0KTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgZ2V0IHdvcmtlclNyYygpIHtcbiAgICAgICAgICBpZiAoX3dvcmtlcl9vcHRpb25zLkdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyU3JjKSByZXR1cm4gX3dvcmtlcl9vcHRpb25zLkdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyU3JjO1xuICAgICAgICAgIGlmIChudWxsICE9PSBQREZXb3JrZXJVdGlsLmZhbGxiYWNrV29ya2VyU3JjKSB7XG4gICAgICAgICAgICBfdXRpbC5pc05vZGVKUyB8fCAoMCwgX2Rpc3BsYXlfdXRpbHMuZGVwcmVjYXRlZCkoJ05vIFwiR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJTcmNcIiBzcGVjaWZpZWQuJyk7XG4gICAgICAgICAgICByZXR1cm4gUERGV29ya2VyVXRpbC5mYWxsYmFja1dvcmtlclNyYztcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBcIkdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyU3JjXCIgc3BlY2lmaWVkLicpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBnZXQgX21haW5UaHJlYWRXb3JrZXJNZXNzYWdlSGFuZGxlcigpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIF9nbG9iYWxUaGlzJHBkZmpzV29yaztcbiAgICAgICAgICAgIHJldHVybiAoKF9nbG9iYWxUaGlzJHBkZmpzV29yayA9IGdsb2JhbFRoaXMucGRmanNXb3JrZXIpID09PSBudWxsIHx8IF9nbG9iYWxUaGlzJHBkZmpzV29yayA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2dsb2JhbFRoaXMkcGRmanNXb3JrLldvcmtlck1lc3NhZ2VIYW5kbGVyKSB8fCBudWxsO1xuICAgICAgICAgIH0gY2F0Y2ggKF91bnVzZWQ4KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGdldCBfc2V0dXBGYWtlV29ya2VyR2xvYmFsKCkge1xuICAgICAgICAgIGNvbnN0IGxvYWRlciA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1haW5Xb3JrZXJNZXNzYWdlSGFuZGxlciA9IHRoaXMuX21haW5UaHJlYWRXb3JrZXJNZXNzYWdlSGFuZGxlcjtcbiAgICAgICAgICAgIGlmIChtYWluV29ya2VyTWVzc2FnZUhhbmRsZXIpIHJldHVybiBtYWluV29ya2VyTWVzc2FnZUhhbmRsZXI7XG4gICAgICAgICAgICBpZiAoX3V0aWwuaXNOb2RlSlMgJiYgXCJmdW5jdGlvblwiID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICBjb25zdCB3b3JrZXIgPSBldmFsKFwicmVxdWlyZVwiKSh0aGlzLndvcmtlclNyYyk7XG4gICAgICAgICAgICAgIHJldHVybiB3b3JrZXIuV29ya2VyTWVzc2FnZUhhbmRsZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhd2FpdCAoMCwgX2Rpc3BsYXlfdXRpbHMubG9hZFNjcmlwdCkodGhpcy53b3JrZXJTcmMpO1xuICAgICAgICAgICAgcmV0dXJuIHdpbmRvdy5wZGZqc1dvcmtlci5Xb3JrZXJNZXNzYWdlSGFuZGxlcjtcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCBcIl9zZXR1cEZha2VXb3JrZXJHbG9iYWxcIiwgbG9hZGVyKCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgX2wgPSB7XG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogbmV3IFdlYWtNYXAoKVxuICAgICAgfTtcbiAgICAgIGV4cG9ydHMuUERGV29ya2VyID0gUERGV29ya2VyO1xuICAgICAgdmFyIF9jID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICB2YXIgX2ggPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfZCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xuICAgICAgdmFyIF91MiA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xuICAgICAgdmFyIF9wID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgICBjbGFzcyBXb3JrZXJUcmFuc3BvcnQge1xuICAgICAgICBjb25zdHJ1Y3RvcihfdDMsIF9lMywgX24yLCBfaTIsIHIpIHtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlTWV0aG9kSW5pdFNwZWModGhpcywgX3ApO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9jLCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBuZXcgTWFwKClcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfaCwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogbmV3IE1hcCgpXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2QsIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IG5ldyBNYXAoKVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF91Miwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIgPSBfdDM7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nVGFzayA9IF9lMztcbiAgICAgICAgICB0aGlzLmNvbW1vbk9ianMgPSBuZXcgUERGT2JqZWN0cygpO1xuICAgICAgICAgIHRoaXMuZm9udExvYWRlciA9IG5ldyBfZm9udF9sb2FkZXIuRm9udExvYWRlcih7XG4gICAgICAgICAgICBvd25lckRvY3VtZW50OiBfaTIub3duZXJEb2N1bWVudCxcbiAgICAgICAgICAgIHN0eWxlRWxlbWVudDogX2kyLnN0eWxlRWxlbWVudFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuX3BhcmFtcyA9IF9pMjtcbiAgICAgICAgICB0aGlzLmNhbnZhc0ZhY3RvcnkgPSByLmNhbnZhc0ZhY3Rvcnk7XG4gICAgICAgICAgdGhpcy5maWx0ZXJGYWN0b3J5ID0gci5maWx0ZXJGYWN0b3J5O1xuICAgICAgICAgIHRoaXMuY01hcFJlYWRlckZhY3RvcnkgPSByLmNNYXBSZWFkZXJGYWN0b3J5O1xuICAgICAgICAgIHRoaXMuc3RhbmRhcmRGb250RGF0YUZhY3RvcnkgPSByLnN0YW5kYXJkRm9udERhdGFGYWN0b3J5O1xuICAgICAgICAgIHRoaXMuZGVzdHJveWVkID0gITE7XG4gICAgICAgICAgdGhpcy5kZXN0cm95Q2FwYWJpbGl0eSA9IG51bGw7XG4gICAgICAgICAgdGhpcy5fbmV0d29ya1N0cmVhbSA9IF9uMjtcbiAgICAgICAgICB0aGlzLl9mdWxsUmVhZGVyID0gbnVsbDtcbiAgICAgICAgICB0aGlzLl9sYXN0UHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgIHRoaXMuZG93bmxvYWRJbmZvQ2FwYWJpbGl0eSA9IG5ldyBfdXRpbC5Qcm9taXNlQ2FwYWJpbGl0eSgpO1xuICAgICAgICAgIHRoaXMuc2V0dXBNZXNzYWdlSGFuZGxlcigpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBhbm5vdGF0aW9uU3RvcmFnZSgpIHtcbiAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJhbm5vdGF0aW9uU3RvcmFnZVwiLCBuZXcgX2Fubm90YXRpb25fc3RvcmFnZS5Bbm5vdGF0aW9uU3RvcmFnZSgpKTtcbiAgICAgICAgfVxuICAgICAgICBnZXRSZW5kZXJpbmdJbnRlbnQodCkge1xuICAgICAgICAgIGxldCBlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMV0gPyBhcmd1bWVudHNbMV0gOiBfdXRpbC5Bbm5vdGF0aW9uTW9kZS5FTkFCTEUsXG4gICAgICAgICAgICBuID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMl0gPyBhcmd1bWVudHNbMl0gOiBudWxsLFxuICAgICAgICAgICAgaSA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzNdICYmIGFyZ3VtZW50c1szXSxcbiAgICAgICAgICAgIHIgPSBfdXRpbC5SZW5kZXJpbmdJbnRlbnRGbGFnLkRJU1BMQVksXG4gICAgICAgICAgICBzID0gX2Fubm90YXRpb25fc3RvcmFnZS5TZXJpYWxpemFibGVFbXB0eTtcbiAgICAgICAgICBzd2l0Y2ggKHQpIHtcbiAgICAgICAgICAgIGNhc2UgXCJhbnlcIjpcbiAgICAgICAgICAgICAgciA9IF91dGlsLlJlbmRlcmluZ0ludGVudEZsYWcuQU5ZO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJkaXNwbGF5XCI6XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInByaW50XCI6XG4gICAgICAgICAgICAgIHIgPSBfdXRpbC5SZW5kZXJpbmdJbnRlbnRGbGFnLlBSSU5UO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcImdldFJlbmRlcmluZ0ludGVudCAtIGludmFsaWQgaW50ZW50OiBcIi5jb25jYXQodCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzd2l0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvbk1vZGUuRElTQUJMRTpcbiAgICAgICAgICAgICAgciArPSBfdXRpbC5SZW5kZXJpbmdJbnRlbnRGbGFnLkFOTk9UQVRJT05TX0RJU0FCTEU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uTW9kZS5FTkFCTEU6XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uTW9kZS5FTkFCTEVfRk9STVM6XG4gICAgICAgICAgICAgIHIgKz0gX3V0aWwuUmVuZGVyaW5nSW50ZW50RmxhZy5BTk5PVEFUSU9OU19GT1JNUztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIF91dGlsLkFubm90YXRpb25Nb2RlLkVOQUJMRV9TVE9SQUdFOlxuICAgICAgICAgICAgICByICs9IF91dGlsLlJlbmRlcmluZ0ludGVudEZsYWcuQU5OT1RBVElPTlNfU1RPUkFHRTtcbiAgICAgICAgICAgICAgcyA9IChyICYgX3V0aWwuUmVuZGVyaW5nSW50ZW50RmxhZy5QUklOVCAmJiBuIGluc3RhbmNlb2YgX2Fubm90YXRpb25fc3RvcmFnZS5QcmludEFubm90YXRpb25TdG9yYWdlID8gbiA6IHRoaXMuYW5ub3RhdGlvblN0b3JhZ2UpLnNlcmlhbGl6YWJsZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJnZXRSZW5kZXJpbmdJbnRlbnQgLSBpbnZhbGlkIGFubm90YXRpb25Nb2RlOiBcIi5jb25jYXQoZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpICYmIChyICs9IF91dGlsLlJlbmRlcmluZ0ludGVudEZsYWcuT1BMSVNUKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVuZGVyaW5nSW50ZW50OiByLFxuICAgICAgICAgICAgY2FjaGVLZXk6IFwiXCIuY29uY2F0KHIsIFwiX1wiKS5jb25jYXQocy5oYXNoKSxcbiAgICAgICAgICAgIGFubm90YXRpb25TdG9yYWdlU2VyaWFsaXphYmxlOiBzXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBkZXN0cm95KCkge1xuICAgICAgICAgIHZhciBfY2xhc3NQcml2YXRlRmllbGRHZXQyO1xuICAgICAgICAgIGlmICh0aGlzLmRlc3Ryb3lDYXBhYmlsaXR5KSByZXR1cm4gdGhpcy5kZXN0cm95Q2FwYWJpbGl0eS5wcm9taXNlO1xuICAgICAgICAgIHRoaXMuZGVzdHJveWVkID0gITA7XG4gICAgICAgICAgdGhpcy5kZXN0cm95Q2FwYWJpbGl0eSA9IG5ldyBfdXRpbC5Qcm9taXNlQ2FwYWJpbGl0eSgpO1xuICAgICAgICAgIChfY2xhc3NQcml2YXRlRmllbGRHZXQyID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF91MikpID09PSBudWxsIHx8IF9jbGFzc1ByaXZhdGVGaWVsZEdldDIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jbGFzc1ByaXZhdGVGaWVsZEdldDIucmVqZWN0KG5ldyBFcnJvcihcIldvcmtlciB3YXMgZGVzdHJveWVkIGR1cmluZyBvblBhc3N3b3JkIGNhbGxiYWNrXCIpKTtcbiAgICAgICAgICBjb25zdCB0ID0gW107XG4gICAgICAgICAgZm9yIChjb25zdCBlIG9mIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfaCkudmFsdWVzKCkpIHQucHVzaChlLl9kZXN0cm95KCkpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfaCkuY2xlYXIoKTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2QpLmNsZWFyKCk7XG4gICAgICAgICAgdGhpcy5oYXNPd25Qcm9wZXJ0eShcImFubm90YXRpb25TdG9yYWdlXCIpICYmIHRoaXMuYW5ub3RhdGlvblN0b3JhZ2UucmVzZXRNb2RpZmllZCgpO1xuICAgICAgICAgIGNvbnN0IGUgPSB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIlRlcm1pbmF0ZVwiLCBudWxsKTtcbiAgICAgICAgICB0LnB1c2goZSk7XG4gICAgICAgICAgUHJvbWlzZS5hbGwodCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbW1vbk9ianMuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMuZm9udExvYWRlci5jbGVhcigpO1xuICAgICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9jKS5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJGYWN0b3J5LmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMuX25ldHdvcmtTdHJlYW0gJiYgdGhpcy5fbmV0d29ya1N0cmVhbS5jYW5jZWxBbGxSZXF1ZXN0cyhuZXcgX3V0aWwuQWJvcnRFeGNlcHRpb24oXCJXb3JrZXIgd2FzIHRlcm1pbmF0ZWQuXCIpKTtcbiAgICAgICAgICAgIGlmICh0aGlzLm1lc3NhZ2VIYW5kbGVyKSB7XG4gICAgICAgICAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIuZGVzdHJveSgpO1xuICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGVzdHJveUNhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICAgICAgICAgIH0sIHRoaXMuZGVzdHJveUNhcGFiaWxpdHkucmVqZWN0KTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5kZXN0cm95Q2FwYWJpbGl0eS5wcm9taXNlO1xuICAgICAgICB9XG4gICAgICAgIHNldHVwTWVzc2FnZUhhbmRsZXIoKSB7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgbWVzc2FnZUhhbmRsZXI6IHQsXG4gICAgICAgICAgICBsb2FkaW5nVGFzazogZVxuICAgICAgICAgIH0gPSB0aGlzO1xuICAgICAgICAgIHQub24oXCJHZXRSZWFkZXJcIiwgKHQsIGUpID0+IHtcbiAgICAgICAgICAgICgwLCBfdXRpbC5hc3NlcnQpKHRoaXMuX25ldHdvcmtTdHJlYW0sIFwiR2V0UmVhZGVyIC0gbm8gYElQREZTdHJlYW1gIGluc3RhbmNlIGF2YWlsYWJsZS5cIik7XG4gICAgICAgICAgICB0aGlzLl9mdWxsUmVhZGVyID0gdGhpcy5fbmV0d29ya1N0cmVhbS5nZXRGdWxsUmVhZGVyKCk7XG4gICAgICAgICAgICB0aGlzLl9mdWxsUmVhZGVyLm9uUHJvZ3Jlc3MgPSB0ID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fbGFzdFByb2dyZXNzID0ge1xuICAgICAgICAgICAgICAgIGxvYWRlZDogdC5sb2FkZWQsXG4gICAgICAgICAgICAgICAgdG90YWw6IHQudG90YWxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBlLm9uUHVsbCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fZnVsbFJlYWRlci5yZWFkKCkudGhlbihmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgICAgIGxldCB7XG4gICAgICAgICAgICAgICAgICB2YWx1ZTogbixcbiAgICAgICAgICAgICAgICAgIGRvbmU6IGlcbiAgICAgICAgICAgICAgICB9ID0gdDtcbiAgICAgICAgICAgICAgICBpZiAoaSkgZS5jbG9zZSgpO2Vsc2Uge1xuICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLmFzc2VydCkobiBpbnN0YW5jZW9mIEFycmF5QnVmZmVyLCBcIkdldFJlYWRlciAtIGV4cGVjdGVkIGFuIEFycmF5QnVmZmVyLlwiKTtcbiAgICAgICAgICAgICAgICAgIGUuZW5xdWV1ZShuZXcgVWludDhBcnJheShuKSwgMSwgW25dKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pLmNhdGNoKHQgPT4ge1xuICAgICAgICAgICAgICAgIGUuZXJyb3IodCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGUub25DYW5jZWwgPSB0ID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fZnVsbFJlYWRlci5jYW5jZWwodCk7XG4gICAgICAgICAgICAgIGUucmVhZHkuY2F0Y2godCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRlc3Ryb3llZCkgdGhyb3cgdDtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHQub24oXCJSZWFkZXJIZWFkZXJzUmVhZHlcIiwgdCA9PiB7XG4gICAgICAgICAgICBjb25zdCBuID0gbmV3IF91dGlsLlByb21pc2VDYXBhYmlsaXR5KCksXG4gICAgICAgICAgICAgIGkgPSB0aGlzLl9mdWxsUmVhZGVyO1xuICAgICAgICAgICAgaS5oZWFkZXJzUmVhZHkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghaS5pc1N0cmVhbWluZ1N1cHBvcnRlZCB8fCAhaS5pc1JhbmdlU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9lJG9uUHJvZ3Jlc3M7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGFzdFByb2dyZXNzICYmICgoX2Ukb25Qcm9ncmVzcyA9IGUub25Qcm9ncmVzcykgPT09IG51bGwgfHwgX2Ukb25Qcm9ncmVzcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Ukb25Qcm9ncmVzcy5jYWxsKGUsIHRoaXMuX2xhc3RQcm9ncmVzcykpO1xuICAgICAgICAgICAgICAgIGkub25Qcm9ncmVzcyA9IHQgPT4ge1xuICAgICAgICAgICAgICAgICAgdmFyIF9lJG9uUHJvZ3Jlc3MyO1xuICAgICAgICAgICAgICAgICAgKF9lJG9uUHJvZ3Jlc3MyID0gZS5vblByb2dyZXNzKSA9PT0gbnVsbCB8fCBfZSRvblByb2dyZXNzMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Ukb25Qcm9ncmVzczIuY2FsbChlLCB7XG4gICAgICAgICAgICAgICAgICAgIGxvYWRlZDogdC5sb2FkZWQsXG4gICAgICAgICAgICAgICAgICAgIHRvdGFsOiB0LnRvdGFsXG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG4ucmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgaXNTdHJlYW1pbmdTdXBwb3J0ZWQ6IGkuaXNTdHJlYW1pbmdTdXBwb3J0ZWQsXG4gICAgICAgICAgICAgICAgaXNSYW5nZVN1cHBvcnRlZDogaS5pc1JhbmdlU3VwcG9ydGVkLFxuICAgICAgICAgICAgICAgIGNvbnRlbnRMZW5ndGg6IGkuY29udGVudExlbmd0aFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIG4ucmVqZWN0KTtcbiAgICAgICAgICAgIHJldHVybiBuLnByb21pc2U7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdC5vbihcIkdldFJhbmdlUmVhZGVyXCIsICh0LCBlKSA9PiB7XG4gICAgICAgICAgICAoMCwgX3V0aWwuYXNzZXJ0KSh0aGlzLl9uZXR3b3JrU3RyZWFtLCBcIkdldFJhbmdlUmVhZGVyIC0gbm8gYElQREZTdHJlYW1gIGluc3RhbmNlIGF2YWlsYWJsZS5cIik7XG4gICAgICAgICAgICBjb25zdCBuID0gdGhpcy5fbmV0d29ya1N0cmVhbS5nZXRSYW5nZVJlYWRlcih0LmJlZ2luLCB0LmVuZCk7XG4gICAgICAgICAgICBpZiAobikge1xuICAgICAgICAgICAgICBlLm9uUHVsbCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBuLnJlYWQoKS50aGVuKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgICBsZXQge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbixcbiAgICAgICAgICAgICAgICAgICAgZG9uZTogaVxuICAgICAgICAgICAgICAgICAgfSA9IHQ7XG4gICAgICAgICAgICAgICAgICBpZiAoaSkgZS5jbG9zZSgpO2Vsc2Uge1xuICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuYXNzZXJ0KShuIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIsIFwiR2V0UmFuZ2VSZWFkZXIgLSBleHBlY3RlZCBhbiBBcnJheUJ1ZmZlci5cIik7XG4gICAgICAgICAgICAgICAgICAgIGUuZW5xdWV1ZShuZXcgVWludDhBcnJheShuKSwgMSwgW25dKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KS5jYXRjaCh0ID0+IHtcbiAgICAgICAgICAgICAgICAgIGUuZXJyb3IodCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGUub25DYW5jZWwgPSB0ID0+IHtcbiAgICAgICAgICAgICAgICBuLmNhbmNlbCh0KTtcbiAgICAgICAgICAgICAgICBlLnJlYWR5LmNhdGNoKHQgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRlc3Ryb3llZCkgdGhyb3cgdDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSBlLmNsb3NlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdC5vbihcIkdldERvY1wiLCB0ID0+IHtcbiAgICAgICAgICAgIGxldCB7XG4gICAgICAgICAgICAgIHBkZkluZm86IG5cbiAgICAgICAgICAgIH0gPSB0O1xuICAgICAgICAgICAgdGhpcy5fbnVtUGFnZXMgPSBuLm51bVBhZ2VzO1xuICAgICAgICAgICAgdGhpcy5faHRtbEZvclhmYSA9IG4uaHRtbEZvclhmYTtcbiAgICAgICAgICAgIGRlbGV0ZSBuLmh0bWxGb3JYZmE7XG4gICAgICAgICAgICBlLl9jYXBhYmlsaXR5LnJlc29sdmUobmV3IFBERkRvY3VtZW50UHJveHkobiwgdGhpcykpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHQub24oXCJEb2NFeGNlcHRpb25cIiwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgIGxldCBuO1xuICAgICAgICAgICAgc3dpdGNoICh0Lm5hbWUpIHtcbiAgICAgICAgICAgICAgY2FzZSBcIlBhc3N3b3JkRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICAgICAgbiA9IG5ldyBfdXRpbC5QYXNzd29yZEV4Y2VwdGlvbih0Lm1lc3NhZ2UsIHQuY29kZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJJbnZhbGlkUERGRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICAgICAgbiA9IG5ldyBfdXRpbC5JbnZhbGlkUERGRXhjZXB0aW9uKHQubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJNaXNzaW5nUERGRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICAgICAgbiA9IG5ldyBfdXRpbC5NaXNzaW5nUERGRXhjZXB0aW9uKHQubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb25cIjpcbiAgICAgICAgICAgICAgICBuID0gbmV3IF91dGlsLlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbih0Lm1lc3NhZ2UsIHQuc3RhdHVzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBcIlVua25vd25FcnJvckV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgICAgIG4gPSBuZXcgX3V0aWwuVW5rbm93bkVycm9yRXhjZXB0aW9uKHQubWVzc2FnZSwgdC5kZXRhaWxzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKFwiRG9jRXhjZXB0aW9uIC0gZXhwZWN0ZWQgYSB2YWxpZCBFcnJvci5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlLl9jYXBhYmlsaXR5LnJlamVjdChuKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0Lm9uKFwiUGFzc3dvcmRSZXF1ZXN0XCIsIHQgPT4ge1xuICAgICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF91MiwgbmV3IF91dGlsLlByb21pc2VDYXBhYmlsaXR5KCkpO1xuICAgICAgICAgICAgaWYgKGUub25QYXNzd29yZCkge1xuICAgICAgICAgICAgICBjb25zdCB1cGRhdGVQYXNzd29yZCA9IHQgPT4ge1xuICAgICAgICAgICAgICAgIHQgaW5zdGFuY2VvZiBFcnJvciA/IF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfdTIpLnJlamVjdCh0KSA6IF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfdTIpLnJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgcGFzc3dvcmQ6IHRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBlLm9uUGFzc3dvcmQodXBkYXRlUGFzc3dvcmQsIHQuY29kZSk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKHQpIHtcbiAgICAgICAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3UyKS5yZWplY3QodCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3UyKS5yZWplY3QobmV3IF91dGlsLlBhc3N3b3JkRXhjZXB0aW9uKHQubWVzc2FnZSwgdC5jb2RlKSk7XG4gICAgICAgICAgICByZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF91MikucHJvbWlzZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0Lm9uKFwiRGF0YUxvYWRlZFwiLCB0ID0+IHtcbiAgICAgICAgICAgIHZhciBfZSRvblByb2dyZXNzMztcbiAgICAgICAgICAgIChfZSRvblByb2dyZXNzMyA9IGUub25Qcm9ncmVzcykgPT09IG51bGwgfHwgX2Ukb25Qcm9ncmVzczMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9lJG9uUHJvZ3Jlc3MzLmNhbGwoZSwge1xuICAgICAgICAgICAgICBsb2FkZWQ6IHQubGVuZ3RoLFxuICAgICAgICAgICAgICB0b3RhbDogdC5sZW5ndGhcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5kb3dubG9hZEluZm9DYXBhYmlsaXR5LnJlc29sdmUodCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdC5vbihcIlN0YXJ0UmVuZGVyUGFnZVwiLCB0ID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRlc3Ryb3llZCkgcmV0dXJuO1xuICAgICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9oKS5nZXQodC5wYWdlSW5kZXgpLl9zdGFydFJlbmRlclBhZ2UodC50cmFuc3BhcmVuY3ksIHQuY2FjaGVLZXkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHQub24oXCJjb21tb25vYmpcIiwgZSA9PiB7XG4gICAgICAgICAgICB2YXIgX2dsb2JhbFRoaXMkRm9udEluc3BlO1xuICAgICAgICAgICAgbGV0IFtuLCBpLCByXSA9IGU7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGVzdHJveWVkICYmICF0aGlzLmNvbW1vbk9ianMuaGFzKG4pKSBzd2l0Y2ggKGkpIHtcbiAgICAgICAgICAgICAgY2FzZSBcIkZvbnRcIjpcbiAgICAgICAgICAgICAgICBjb25zdCBlID0gdGhpcy5fcGFyYW1zO1xuICAgICAgICAgICAgICAgIGlmIChcImVycm9yXCIgaW4gcikge1xuICAgICAgICAgICAgICAgICAgY29uc3QgdCA9IHIuZXJyb3I7XG4gICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJFcnJvciBkdXJpbmcgZm9udCBsb2FkaW5nOiBcIi5jb25jYXQodCkpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5jb21tb25PYmpzLnJlc29sdmUobiwgdCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcyA9IGUucGRmQnVnICYmIChfZ2xvYmFsVGhpcyRGb250SW5zcGUgPSBnbG9iYWxUaGlzLkZvbnRJbnNwZWN0b3IpICE9PSBudWxsICYmIF9nbG9iYWxUaGlzJEZvbnRJbnNwZSAhPT0gdm9pZCAwICYmIF9nbG9iYWxUaGlzJEZvbnRJbnNwZS5lbmFibGVkID8gKHQsIGUpID0+IGdsb2JhbFRoaXMuRm9udEluc3BlY3Rvci5mb250QWRkZWQodCwgZSkgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgYSA9IG5ldyBfZm9udF9sb2FkZXIuRm9udEZhY2VPYmplY3Qociwge1xuICAgICAgICAgICAgICAgICAgICBpc0V2YWxTdXBwb3J0ZWQ6IGUuaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlRm9udEZhY2U6IGUuZGlzYWJsZUZvbnRGYWNlLFxuICAgICAgICAgICAgICAgICAgICBpZ25vcmVFcnJvcnM6IGUuaWdub3JlRXJyb3JzLFxuICAgICAgICAgICAgICAgICAgICBpbnNwZWN0Rm9udDogc1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb250TG9hZGVyLmJpbmQoYSkuY2F0Y2goZSA9PiB0LnNlbmRXaXRoUHJvbWlzZShcIkZvbnRGYWxsYmFja1wiLCB7XG4gICAgICAgICAgICAgICAgICBpZDogblxuICAgICAgICAgICAgICAgIH0pKS5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICFlLmZvbnRFeHRyYVByb3BlcnRpZXMgJiYgYS5kYXRhICYmIChhLmRhdGEgPSBudWxsKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uT2Jqcy5yZXNvbHZlKG4sIGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiRm9udFBhdGhcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIkltYWdlXCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJQYXR0ZXJuXCI6XG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25PYmpzLnJlc29sdmUobiwgcik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR290IHVua25vd24gY29tbW9uIG9iamVjdCB0eXBlIFwiLmNvbmNhdChpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdC5vbihcIm9ialwiLCB0ID0+IHtcbiAgICAgICAgICAgIGxldCBbZSwgbiwgaSwgcl0gPSB0O1xuICAgICAgICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCBzID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9oKS5nZXQobik7XG4gICAgICAgICAgICBpZiAoIXMub2Jqcy5oYXMoZSkpIHN3aXRjaCAoaSkge1xuICAgICAgICAgICAgICBjYXNlIFwiSW1hZ2VcIjpcbiAgICAgICAgICAgICAgICBzLm9ianMucmVzb2x2ZShlLCByKTtcbiAgICAgICAgICAgICAgICBpZiAocikge1xuICAgICAgICAgICAgICAgICAgdmFyIF9yJGRhdGE7XG4gICAgICAgICAgICAgICAgICBsZXQgdDtcbiAgICAgICAgICAgICAgICAgIGlmIChyLmJpdG1hcCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGUsXG4gICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBuXG4gICAgICAgICAgICAgICAgICAgIH0gPSByO1xuICAgICAgICAgICAgICAgICAgICB0ID0gZSAqIG4gKiA0O1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHQgPSAoKF9yJGRhdGEgPSByLmRhdGEpID09PSBudWxsIHx8IF9yJGRhdGEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9yJGRhdGEubGVuZ3RoKSB8fCAwO1xuICAgICAgICAgICAgICAgICAgdCA+IF91dGlsLk1BWF9JTUFHRV9TSVpFX1RPX0NBQ0hFICYmIChzLl9tYXliZUNsZWFudXBBZnRlclJlbmRlciA9ICEwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgXCJQYXR0ZXJuXCI6XG4gICAgICAgICAgICAgICAgcy5vYmpzLnJlc29sdmUoZSwgcik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR290IHVua25vd24gb2JqZWN0IHR5cGUgXCIuY29uY2F0KGkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0Lm9uKFwiRG9jUHJvZ3Jlc3NcIiwgdCA9PiB7XG4gICAgICAgICAgICB2YXIgX2Ukb25Qcm9ncmVzczQ7XG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3llZCB8fCAoKF9lJG9uUHJvZ3Jlc3M0ID0gZS5vblByb2dyZXNzKSA9PT0gbnVsbCB8fCBfZSRvblByb2dyZXNzNCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Ukb25Qcm9ncmVzczQuY2FsbChlLCB7XG4gICAgICAgICAgICAgIGxvYWRlZDogdC5sb2FkZWQsXG4gICAgICAgICAgICAgIHRvdGFsOiB0LnRvdGFsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdC5vbihcIkZldGNoQnVpbHRJbkNNYXBcIiwgdCA9PiB0aGlzLmRlc3Ryb3llZCA/IFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIldvcmtlciB3YXMgZGVzdHJveWVkLlwiKSkgOiB0aGlzLmNNYXBSZWFkZXJGYWN0b3J5ID8gdGhpcy5jTWFwUmVhZGVyRmFjdG9yeS5mZXRjaCh0KSA6IFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihcIkNNYXBSZWFkZXJGYWN0b3J5IG5vdCBpbml0aWFsaXplZCwgc2VlIHRoZSBgdXNlV29ya2VyRmV0Y2hgIHBhcmFtZXRlci5cIikpKTtcbiAgICAgICAgICB0Lm9uKFwiRmV0Y2hTdGFuZGFyZEZvbnREYXRhXCIsIHQgPT4gdGhpcy5kZXN0cm95ZWQgPyBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJXb3JrZXIgd2FzIGRlc3Ryb3llZC5cIikpIDogdGhpcy5zdGFuZGFyZEZvbnREYXRhRmFjdG9yeSA/IHRoaXMuc3RhbmRhcmRGb250RGF0YUZhY3RvcnkuZmV0Y2godCkgOiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoXCJTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSBub3QgaW5pdGlhbGl6ZWQsIHNlZSB0aGUgYHVzZVdvcmtlckZldGNoYCBwYXJhbWV0ZXIuXCIpKSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0RGF0YSgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoXCJHZXREYXRhXCIsIG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIHNhdmVEb2N1bWVudCgpIHtcbiAgICAgICAgICB2YXIgX3RoaXMkX2Z1bGxSZWFkZXIkZmlsLCBfdGhpcyRfZnVsbFJlYWRlcjtcbiAgICAgICAgICB0aGlzLmFubm90YXRpb25TdG9yYWdlLnNpemUgPD0gMCAmJiAoMCwgX3V0aWwud2FybikoXCJzYXZlRG9jdW1lbnQgY2FsbGVkIHdoaWxlIGBhbm5vdGF0aW9uU3RvcmFnZWAgaXMgZW1wdHksIHBsZWFzZSB1c2UgdGhlIGdldERhdGEtbWV0aG9kIGluc3RlYWQuXCIpO1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIG1hcDogdCxcbiAgICAgICAgICAgIHRyYW5zZmVyczogZVxuICAgICAgICAgIH0gPSB0aGlzLmFubm90YXRpb25TdG9yYWdlLnNlcmlhbGl6YWJsZTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoXCJTYXZlRG9jdW1lbnRcIiwge1xuICAgICAgICAgICAgaXNQdXJlWGZhOiAhIXRoaXMuX2h0bWxGb3JYZmEsXG4gICAgICAgICAgICBudW1QYWdlczogdGhpcy5fbnVtUGFnZXMsXG4gICAgICAgICAgICBhbm5vdGF0aW9uU3RvcmFnZTogdCxcbiAgICAgICAgICAgIGZpbGVuYW1lOiAoX3RoaXMkX2Z1bGxSZWFkZXIkZmlsID0gKF90aGlzJF9mdWxsUmVhZGVyID0gdGhpcy5fZnVsbFJlYWRlcikgPT09IG51bGwgfHwgX3RoaXMkX2Z1bGxSZWFkZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJF9mdWxsUmVhZGVyLmZpbGVuYW1lKSAhPT0gbnVsbCAmJiBfdGhpcyRfZnVsbFJlYWRlciRmaWwgIT09IHZvaWQgMCA/IF90aGlzJF9mdWxsUmVhZGVyJGZpbCA6IG51bGxcbiAgICAgICAgICB9LCBlKS5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYW5ub3RhdGlvblN0b3JhZ2UucmVzZXRNb2RpZmllZCgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGdldFBhZ2UodCkge1xuICAgICAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcih0KSB8fCB0IDw9IDAgfHwgdCA+IHRoaXMuX251bVBhZ2VzKSByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiSW52YWxpZCBwYWdlIHJlcXVlc3QuXCIpKTtcbiAgICAgICAgICBjb25zdCBlID0gdCAtIDEsXG4gICAgICAgICAgICBuID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9kKS5nZXQoZSk7XG4gICAgICAgICAgaWYgKG4pIHJldHVybiBuO1xuICAgICAgICAgIGNvbnN0IGkgPSB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkdldFBhZ2VcIiwge1xuICAgICAgICAgICAgcGFnZUluZGV4OiBlXG4gICAgICAgICAgfSkudGhlbih0ID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRlc3Ryb3llZCkgdGhyb3cgbmV3IEVycm9yKFwiVHJhbnNwb3J0IGRlc3Ryb3llZFwiKTtcbiAgICAgICAgICAgIGNvbnN0IG4gPSBuZXcgUERGUGFnZVByb3h5KGUsIHQsIHRoaXMsIHRoaXMuX3BhcmFtcy5wZGZCdWcpO1xuICAgICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9oKS5zZXQoZSwgbik7XG4gICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2QpLnNldChlLCBpKTtcbiAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgfVxuICAgICAgICBnZXRQYWdlSW5kZXgodCkge1xuICAgICAgICAgIHJldHVybiBcIm9iamVjdFwiICE9IHR5cGVvZiB0IHx8IG51bGwgPT09IHQgfHwgIU51bWJlci5pc0ludGVnZXIodC5udW0pIHx8IHQubnVtIDwgMCB8fCAhTnVtYmVyLmlzSW50ZWdlcih0LmdlbikgfHwgdC5nZW4gPCAwID8gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiSW52YWxpZCBwYWdlSW5kZXggcmVxdWVzdC5cIikpIDogdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoXCJHZXRQYWdlSW5kZXhcIiwge1xuICAgICAgICAgICAgbnVtOiB0Lm51bSxcbiAgICAgICAgICAgIGdlbjogdC5nZW5cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBnZXRBbm5vdGF0aW9ucyh0LCBlKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKFwiR2V0QW5ub3RhdGlvbnNcIiwge1xuICAgICAgICAgICAgcGFnZUluZGV4OiB0LFxuICAgICAgICAgICAgaW50ZW50OiBlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0RmllbGRPYmplY3RzKCkge1xuICAgICAgICAgIHJldHVybiBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9wLCBfcDIpLmNhbGwodGhpcywgXCJHZXRGaWVsZE9iamVjdHNcIik7XG4gICAgICAgIH1cbiAgICAgICAgaGFzSlNBY3Rpb25zKCkge1xuICAgICAgICAgIHJldHVybiBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9wLCBfcDIpLmNhbGwodGhpcywgXCJIYXNKU0FjdGlvbnNcIik7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0Q2FsY3VsYXRpb25PcmRlcklkcygpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoXCJHZXRDYWxjdWxhdGlvbk9yZGVySWRzXCIsIG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGdldERlc3RpbmF0aW9ucygpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoXCJHZXREZXN0aW5hdGlvbnNcIiwgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0RGVzdGluYXRpb24odCkge1xuICAgICAgICAgIHJldHVybiBcInN0cmluZ1wiICE9IHR5cGVvZiB0ID8gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKFwiSW52YWxpZCBkZXN0aW5hdGlvbiByZXF1ZXN0LlwiKSkgOiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkdldERlc3RpbmF0aW9uXCIsIHtcbiAgICAgICAgICAgIGlkOiB0XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0UGFnZUxhYmVscygpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoXCJHZXRQYWdlTGFiZWxzXCIsIG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGdldFBhZ2VMYXlvdXQoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKFwiR2V0UGFnZUxheW91dFwiLCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBnZXRQYWdlTW9kZSgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoXCJHZXRQYWdlTW9kZVwiLCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBnZXRWaWV3ZXJQcmVmZXJlbmNlcygpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoXCJHZXRWaWV3ZXJQcmVmZXJlbmNlc1wiLCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBnZXRPcGVuQWN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkdldE9wZW5BY3Rpb25cIiwgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0QXR0YWNobWVudHMoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKFwiR2V0QXR0YWNobWVudHNcIiwgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0SmF2YVNjcmlwdCgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoXCJHZXRKYXZhU2NyaXB0XCIsIG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGdldERvY0pTQWN0aW9ucygpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoXCJHZXREb2NKU0FjdGlvbnNcIiwgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0UGFnZUpTQWN0aW9ucyh0KSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKFwiR2V0UGFnZUpTQWN0aW9uc1wiLCB7XG4gICAgICAgICAgICBwYWdlSW5kZXg6IHRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBnZXRTdHJ1Y3RUcmVlKHQpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoXCJHZXRTdHJ1Y3RUcmVlXCIsIHtcbiAgICAgICAgICAgIHBhZ2VJbmRleDogdFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGdldE91dGxpbmUoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKFwiR2V0T3V0bGluZVwiLCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBnZXRPcHRpb25hbENvbnRlbnRDb25maWcoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKFwiR2V0T3B0aW9uYWxDb250ZW50Q29uZmlnXCIsIG51bGwpLnRoZW4odCA9PiBuZXcgX29wdGlvbmFsX2NvbnRlbnRfY29uZmlnLk9wdGlvbmFsQ29udGVudENvbmZpZyh0KSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0UGVybWlzc2lvbnMoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKFwiR2V0UGVybWlzc2lvbnNcIiwgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0TWV0YWRhdGEoKSB7XG4gICAgICAgICAgY29uc3QgdCA9IFwiR2V0TWV0YWRhdGFcIixcbiAgICAgICAgICAgIGUgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2MpLmdldCh0KTtcbiAgICAgICAgICBpZiAoZSkgcmV0dXJuIGU7XG4gICAgICAgICAgY29uc3QgbiA9IHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKHQsIG51bGwpLnRoZW4odCA9PiB7XG4gICAgICAgICAgICB2YXIgX3RoaXMkX2Z1bGxSZWFkZXIkZmlsMiwgX3RoaXMkX2Z1bGxSZWFkZXIyLCBfdGhpcyRfZnVsbFJlYWRlciRjb24sIF90aGlzJF9mdWxsUmVhZGVyMztcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGluZm86IHRbMF0sXG4gICAgICAgICAgICAgIG1ldGFkYXRhOiB0WzFdID8gbmV3IF9tZXRhZGF0YS5NZXRhZGF0YSh0WzFdKSA6IG51bGwsXG4gICAgICAgICAgICAgIGNvbnRlbnREaXNwb3NpdGlvbkZpbGVuYW1lOiAoX3RoaXMkX2Z1bGxSZWFkZXIkZmlsMiA9IChfdGhpcyRfZnVsbFJlYWRlcjIgPSB0aGlzLl9mdWxsUmVhZGVyKSA9PT0gbnVsbCB8fCBfdGhpcyRfZnVsbFJlYWRlcjIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJF9mdWxsUmVhZGVyMi5maWxlbmFtZSkgIT09IG51bGwgJiYgX3RoaXMkX2Z1bGxSZWFkZXIkZmlsMiAhPT0gdm9pZCAwID8gX3RoaXMkX2Z1bGxSZWFkZXIkZmlsMiA6IG51bGwsXG4gICAgICAgICAgICAgIGNvbnRlbnRMZW5ndGg6IChfdGhpcyRfZnVsbFJlYWRlciRjb24gPSAoX3RoaXMkX2Z1bGxSZWFkZXIzID0gdGhpcy5fZnVsbFJlYWRlcikgPT09IG51bGwgfHwgX3RoaXMkX2Z1bGxSZWFkZXIzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRfZnVsbFJlYWRlcjMuY29udGVudExlbmd0aCkgIT09IG51bGwgJiYgX3RoaXMkX2Z1bGxSZWFkZXIkY29uICE9PSB2b2lkIDAgPyBfdGhpcyRfZnVsbFJlYWRlciRjb24gOiBudWxsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfYykuc2V0KHQsIG4pO1xuICAgICAgICAgIHJldHVybiBuO1xuICAgICAgICB9XG4gICAgICAgIGdldE1hcmtJbmZvKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkdldE1hcmtJbmZvXCIsIG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIGFzeW5jIHN0YXJ0Q2xlYW51cCgpIHtcbiAgICAgICAgICBsZXQgdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzBdICYmIGFyZ3VtZW50c1swXTtcbiAgICAgICAgICBpZiAoIXRoaXMuZGVzdHJveWVkKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZShcIkNsZWFudXBcIiwgbnVsbCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHQgb2YgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9oKS52YWx1ZXMoKSkge1xuICAgICAgICAgICAgICBpZiAoIXQuY2xlYW51cCgpKSB0aHJvdyBuZXcgRXJyb3IoXCJzdGFydENsZWFudXA6IFBhZ2UgXCIuY29uY2F0KHQucGFnZU51bWJlciwgXCIgaXMgY3VycmVudGx5IHJlbmRlcmluZy5cIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jb21tb25PYmpzLmNsZWFyKCk7XG4gICAgICAgICAgICB0IHx8IHRoaXMuZm9udExvYWRlci5jbGVhcigpO1xuICAgICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9jKS5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJGYWN0b3J5LmRlc3Ryb3koITApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBnZXQgbG9hZGluZ1BhcmFtcygpIHtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBkaXNhYmxlQXV0b0ZldGNoOiB0LFxuICAgICAgICAgICAgZW5hYmxlWGZhOiBlXG4gICAgICAgICAgfSA9IHRoaXMuX3BhcmFtcztcbiAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgXCJsb2FkaW5nUGFyYW1zXCIsIHtcbiAgICAgICAgICAgIGRpc2FibGVBdXRvRmV0Y2g6IHQsXG4gICAgICAgICAgICBlbmFibGVYZmE6IGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX3AyKHQpIHtcbiAgICAgICAgbGV0IGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1sxXSA/IGFyZ3VtZW50c1sxXSA6IG51bGw7XG4gICAgICAgIGNvbnN0IG4gPSBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2MpLmdldCh0KTtcbiAgICAgICAgaWYgKG4pIHJldHVybiBuO1xuICAgICAgICBjb25zdCBpID0gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UodCwgZSk7XG4gICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfYykuc2V0KHQsIGkpO1xuICAgICAgICByZXR1cm4gaTtcbiAgICAgIH1cbiAgICAgIHZhciBfZiA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xuICAgICAgdmFyIF9nID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgICBjbGFzcyBQREZPYmplY3RzIHtcbiAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9nKTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfZiwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogT2JqZWN0LmNyZWF0ZShudWxsKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGdldCh0KSB7XG4gICAgICAgICAgbGV0IGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1sxXSA/IGFyZ3VtZW50c1sxXSA6IG51bGw7XG4gICAgICAgICAgaWYgKGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG4gPSBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9nLCBfZzIpLmNhbGwodGhpcywgdCk7XG4gICAgICAgICAgICBuLmNhcGFiaWxpdHkucHJvbWlzZS50aGVuKCgpID0+IGUobi5kYXRhKSk7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgbiA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfZilbdF07XG4gICAgICAgICAgaWYgKCEobiAhPT0gbnVsbCAmJiBuICE9PSB2b2lkIDAgJiYgbi5jYXBhYmlsaXR5LnNldHRsZWQpKSB0aHJvdyBuZXcgRXJyb3IoXCJSZXF1ZXN0aW5nIG9iamVjdCB0aGF0IGlzbid0IHJlc29sdmVkIHlldCBcIi5jb25jYXQodCwgXCIuXCIpKTtcbiAgICAgICAgICByZXR1cm4gbi5kYXRhO1xuICAgICAgICB9XG4gICAgICAgIGhhcyh0KSB7XG4gICAgICAgICAgY29uc3QgZSA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfZilbdF07XG4gICAgICAgICAgcmV0dXJuIChlID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUuY2FwYWJpbGl0eS5zZXR0bGVkKSB8fCAhMTtcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKHQpIHtcbiAgICAgICAgICBsZXQgZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzFdID8gYXJndW1lbnRzWzFdIDogbnVsbDtcbiAgICAgICAgICBjb25zdCBuID0gX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfZywgX2cyKS5jYWxsKHRoaXMsIHQpO1xuICAgICAgICAgIG4uZGF0YSA9IGU7XG4gICAgICAgICAgbi5jYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgICBjbGVhcigpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHQgaW4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9mKSkge1xuICAgICAgICAgICAgdmFyIF9lJGJpdG1hcDtcbiAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgZGF0YTogZVxuICAgICAgICAgICAgfSA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfZilbdF07XG4gICAgICAgICAgICBlID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCB8fCAoX2UkYml0bWFwID0gZS5iaXRtYXApID09PSBudWxsIHx8IF9lJGJpdG1hcCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2UkYml0bWFwLmNsb3NlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfZiwgT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF9nMih0KSB7XG4gICAgICAgIGNvbnN0IGUgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2YpW3RdO1xuICAgICAgICByZXR1cm4gZSB8fCAoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9mKVt0XSA9IHtcbiAgICAgICAgICBjYXBhYmlsaXR5OiBuZXcgX3V0aWwuUHJvbWlzZUNhcGFiaWxpdHkoKSxcbiAgICAgICAgICBkYXRhOiBudWxsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdmFyIF9tID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICBjbGFzcyBSZW5kZXJUYXNrIHtcbiAgICAgICAgY29uc3RydWN0b3IodCkge1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9tLCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBudWxsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9tLCB0KTtcbiAgICAgICAgICB0aGlzLm9uQ29udGludWUgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGdldCBwcm9taXNlKCkge1xuICAgICAgICAgIHJldHVybiBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX20pLmNhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgfVxuICAgICAgICBjYW5jZWwoKSB7XG4gICAgICAgICAgbGV0IHQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1swXSA/IGFyZ3VtZW50c1swXSA6IDA7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9tKS5jYW5jZWwobnVsbCwgdCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHNlcGFyYXRlQW5ub3RzKCkge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHNlcGFyYXRlQW5ub3RzOiB0XG4gICAgICAgICAgfSA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfbSkub3BlcmF0b3JMaXN0O1xuICAgICAgICAgIGlmICghdCkgcmV0dXJuICExO1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGFubm90YXRpb25DYW52YXNNYXA6IGVcbiAgICAgICAgICB9ID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9tKTtcbiAgICAgICAgICByZXR1cm4gdC5mb3JtIHx8IHQuY2FudmFzICYmIChlID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUuc2l6ZSkgPiAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBleHBvcnRzLlJlbmRlclRhc2sgPSBSZW5kZXJUYXNrO1xuICAgICAgY2xhc3MgSW50ZXJuYWxSZW5kZXJUYXNrIHtcbiAgICAgICAgY29uc3RydWN0b3IodCkge1xuICAgICAgICAgIGxldCB7XG4gICAgICAgICAgICBjYWxsYmFjazogZSxcbiAgICAgICAgICAgIHBhcmFtczogbixcbiAgICAgICAgICAgIG9ianM6IGksXG4gICAgICAgICAgICBjb21tb25PYmpzOiByLFxuICAgICAgICAgICAgYW5ub3RhdGlvbkNhbnZhc01hcDogcyxcbiAgICAgICAgICAgIG9wZXJhdG9yTGlzdDogYSxcbiAgICAgICAgICAgIHBhZ2VJbmRleDogbyxcbiAgICAgICAgICAgIGNhbnZhc0ZhY3Rvcnk6IGwsXG4gICAgICAgICAgICBmaWx0ZXJGYWN0b3J5OiBjLFxuICAgICAgICAgICAgdXNlUmVxdWVzdEFuaW1hdGlvbkZyYW1lOiBoID0gITEsXG4gICAgICAgICAgICBwZGZCdWc6IGQgPSAhMSxcbiAgICAgICAgICAgIHBhZ2VDb2xvcnM6IHUgPSBudWxsXG4gICAgICAgICAgfSA9IHQ7XG4gICAgICAgICAgdGhpcy5jYWxsYmFjayA9IGU7XG4gICAgICAgICAgdGhpcy5wYXJhbXMgPSBuO1xuICAgICAgICAgIHRoaXMub2JqcyA9IGk7XG4gICAgICAgICAgdGhpcy5jb21tb25PYmpzID0gcjtcbiAgICAgICAgICB0aGlzLmFubm90YXRpb25DYW52YXNNYXAgPSBzO1xuICAgICAgICAgIHRoaXMub3BlcmF0b3JMaXN0SWR4ID0gbnVsbDtcbiAgICAgICAgICB0aGlzLm9wZXJhdG9yTGlzdCA9IGE7XG4gICAgICAgICAgdGhpcy5fcGFnZUluZGV4ID0gbztcbiAgICAgICAgICB0aGlzLmNhbnZhc0ZhY3RvcnkgPSBsO1xuICAgICAgICAgIHRoaXMuZmlsdGVyRmFjdG9yeSA9IGM7XG4gICAgICAgICAgdGhpcy5fcGRmQnVnID0gZDtcbiAgICAgICAgICB0aGlzLnBhZ2VDb2xvcnMgPSB1O1xuICAgICAgICAgIHRoaXMucnVubmluZyA9ICExO1xuICAgICAgICAgIHRoaXMuZ3JhcGhpY3NSZWFkeUNhbGxiYWNrID0gbnVsbDtcbiAgICAgICAgICB0aGlzLmdyYXBoaWNzUmVhZHkgPSAhMTtcbiAgICAgICAgICB0aGlzLl91c2VSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSAhMCA9PT0gaCAmJiBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiB3aW5kb3c7XG4gICAgICAgICAgdGhpcy5jYW5jZWxsZWQgPSAhMTtcbiAgICAgICAgICB0aGlzLmNhcGFiaWxpdHkgPSBuZXcgX3V0aWwuUHJvbWlzZUNhcGFiaWxpdHkoKTtcbiAgICAgICAgICB0aGlzLnRhc2sgPSBuZXcgUmVuZGVyVGFzayh0aGlzKTtcbiAgICAgICAgICB0aGlzLl9jYW5jZWxCb3VuZCA9IHRoaXMuY2FuY2VsLmJpbmQodGhpcyk7XG4gICAgICAgICAgdGhpcy5fY29udGludWVCb3VuZCA9IHRoaXMuX2NvbnRpbnVlLmJpbmQodGhpcyk7XG4gICAgICAgICAgdGhpcy5fc2NoZWR1bGVOZXh0Qm91bmQgPSB0aGlzLl9zY2hlZHVsZU5leHQuYmluZCh0aGlzKTtcbiAgICAgICAgICB0aGlzLl9uZXh0Qm91bmQgPSB0aGlzLl9uZXh0LmJpbmQodGhpcyk7XG4gICAgICAgICAgdGhpcy5fY2FudmFzID0gbi5jYW52YXNDb250ZXh0LmNhbnZhcztcbiAgICAgICAgfVxuICAgICAgICBnZXQgY29tcGxldGVkKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmNhcGFiaWxpdHkucHJvbWlzZS5jYXRjaChmdW5jdGlvbiAoKSB7fSk7XG4gICAgICAgIH1cbiAgICAgICAgaW5pdGlhbGl6ZUdyYXBoaWNzKHQpIHtcbiAgICAgICAgICB2YXIgX2dsb2JhbFRoaXMkU3RlcHBlck1hLCBfdGhpcyRncmFwaGljc1JlYWR5Q2E7XG4gICAgICAgICAgbGV0IHtcbiAgICAgICAgICAgIHRyYW5zcGFyZW5jeTogZSA9ICExLFxuICAgICAgICAgICAgb3B0aW9uYWxDb250ZW50Q29uZmlnOiBuXG4gICAgICAgICAgfSA9IHQ7XG4gICAgICAgICAgaWYgKHRoaXMuY2FuY2VsbGVkKSByZXR1cm47XG4gICAgICAgICAgaWYgKHRoaXMuX2NhbnZhcykge1xuICAgICAgICAgICAgaWYgKF9jbGFzc1N0YXRpY1ByaXZhdGVGaWVsZFNwZWNHZXQoSW50ZXJuYWxSZW5kZXJUYXNrLCBJbnRlcm5hbFJlbmRlclRhc2ssIF9iKS5oYXModGhpcy5fY2FudmFzKSkgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHVzZSB0aGUgc2FtZSBjYW52YXMgZHVyaW5nIG11bHRpcGxlIHJlbmRlcigpIG9wZXJhdGlvbnMuIFVzZSBkaWZmZXJlbnQgY2FudmFzIG9yIGVuc3VyZSBwcmV2aW91cyBvcGVyYXRpb25zIHdlcmUgY2FuY2VsbGVkIG9yIGNvbXBsZXRlZC5cIik7XG4gICAgICAgICAgICBfY2xhc3NTdGF0aWNQcml2YXRlRmllbGRTcGVjR2V0KEludGVybmFsUmVuZGVyVGFzaywgSW50ZXJuYWxSZW5kZXJUYXNrLCBfYikuYWRkKHRoaXMuX2NhbnZhcyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLl9wZGZCdWcgJiYgKF9nbG9iYWxUaGlzJFN0ZXBwZXJNYSA9IGdsb2JhbFRoaXMuU3RlcHBlck1hbmFnZXIpICE9PSBudWxsICYmIF9nbG9iYWxUaGlzJFN0ZXBwZXJNYSAhPT0gdm9pZCAwICYmIF9nbG9iYWxUaGlzJFN0ZXBwZXJNYS5lbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLnN0ZXBwZXIgPSBnbG9iYWxUaGlzLlN0ZXBwZXJNYW5hZ2VyLmNyZWF0ZSh0aGlzLl9wYWdlSW5kZXgpO1xuICAgICAgICAgICAgdGhpcy5zdGVwcGVyLmluaXQodGhpcy5vcGVyYXRvckxpc3QpO1xuICAgICAgICAgICAgdGhpcy5zdGVwcGVyLm5leHRCcmVha1BvaW50ID0gdGhpcy5zdGVwcGVyLmdldE5leHRCcmVha1BvaW50KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGNhbnZhc0NvbnRleHQ6IGksXG4gICAgICAgICAgICB2aWV3cG9ydDogcixcbiAgICAgICAgICAgIHRyYW5zZm9ybTogcyxcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IGFcbiAgICAgICAgICB9ID0gdGhpcy5wYXJhbXM7XG4gICAgICAgICAgdGhpcy5nZnggPSBuZXcgX2NhbnZhcy5DYW52YXNHcmFwaGljcyhpLCB0aGlzLmNvbW1vbk9ianMsIHRoaXMub2JqcywgdGhpcy5jYW52YXNGYWN0b3J5LCB0aGlzLmZpbHRlckZhY3RvcnksIHtcbiAgICAgICAgICAgIG9wdGlvbmFsQ29udGVudENvbmZpZzogblxuICAgICAgICAgIH0sIHRoaXMuYW5ub3RhdGlvbkNhbnZhc01hcCwgdGhpcy5wYWdlQ29sb3JzKTtcbiAgICAgICAgICB0aGlzLmdmeC5iZWdpbkRyYXdpbmcoe1xuICAgICAgICAgICAgdHJhbnNmb3JtOiBzLFxuICAgICAgICAgICAgdmlld3BvcnQ6IHIsXG4gICAgICAgICAgICB0cmFuc3BhcmVuY3k6IGUsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiBhXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5vcGVyYXRvckxpc3RJZHggPSAwO1xuICAgICAgICAgIHRoaXMuZ3JhcGhpY3NSZWFkeSA9ICEwO1xuICAgICAgICAgIChfdGhpcyRncmFwaGljc1JlYWR5Q2EgPSB0aGlzLmdyYXBoaWNzUmVhZHlDYWxsYmFjaykgPT09IG51bGwgfHwgX3RoaXMkZ3JhcGhpY3NSZWFkeUNhID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRncmFwaGljc1JlYWR5Q2EuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBjYW5jZWwoKSB7XG4gICAgICAgICAgdmFyIF90aGlzJGdmeDtcbiAgICAgICAgICBsZXQgdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzBdID8gYXJndW1lbnRzWzBdIDogbnVsbCxcbiAgICAgICAgICAgIGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1sxXSA/IGFyZ3VtZW50c1sxXSA6IDA7XG4gICAgICAgICAgdGhpcy5ydW5uaW5nID0gITE7XG4gICAgICAgICAgdGhpcy5jYW5jZWxsZWQgPSAhMDtcbiAgICAgICAgICAoX3RoaXMkZ2Z4ID0gdGhpcy5nZngpID09PSBudWxsIHx8IF90aGlzJGdmeCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkZ2Z4LmVuZERyYXdpbmcoKTtcbiAgICAgICAgICB0aGlzLl9jYW52YXMgJiYgX2NsYXNzU3RhdGljUHJpdmF0ZUZpZWxkU3BlY0dldChJbnRlcm5hbFJlbmRlclRhc2ssIEludGVybmFsUmVuZGVyVGFzaywgX2IpLmRlbGV0ZSh0aGlzLl9jYW52YXMpO1xuICAgICAgICAgIHRoaXMuY2FsbGJhY2sodCB8fCBuZXcgX2Rpc3BsYXlfdXRpbHMuUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uKFwiUmVuZGVyaW5nIGNhbmNlbGxlZCwgcGFnZSBcIi5jb25jYXQodGhpcy5fcGFnZUluZGV4ICsgMSksIGUpKTtcbiAgICAgICAgfVxuICAgICAgICBvcGVyYXRvckxpc3RDaGFuZ2VkKCkge1xuICAgICAgICAgIGlmICh0aGlzLmdyYXBoaWNzUmVhZHkpIHtcbiAgICAgICAgICAgIHZhciBfdGhpcyRzdGVwcGVyO1xuICAgICAgICAgICAgKF90aGlzJHN0ZXBwZXIgPSB0aGlzLnN0ZXBwZXIpID09PSBudWxsIHx8IF90aGlzJHN0ZXBwZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHN0ZXBwZXIudXBkYXRlT3BlcmF0b3JMaXN0KHRoaXMub3BlcmF0b3JMaXN0KTtcbiAgICAgICAgICAgIHRoaXMucnVubmluZyB8fCB0aGlzLl9jb250aW51ZSgpO1xuICAgICAgICAgIH0gZWxzZSB0aGlzLmdyYXBoaWNzUmVhZHlDYWxsYmFjayB8fCAodGhpcy5ncmFwaGljc1JlYWR5Q2FsbGJhY2sgPSB0aGlzLl9jb250aW51ZUJvdW5kKTtcbiAgICAgICAgfVxuICAgICAgICBfY29udGludWUoKSB7XG4gICAgICAgICAgdGhpcy5ydW5uaW5nID0gITA7XG4gICAgICAgICAgdGhpcy5jYW5jZWxsZWQgfHwgKHRoaXMudGFzay5vbkNvbnRpbnVlID8gdGhpcy50YXNrLm9uQ29udGludWUodGhpcy5fc2NoZWR1bGVOZXh0Qm91bmQpIDogdGhpcy5fc2NoZWR1bGVOZXh0KCkpO1xuICAgICAgICB9XG4gICAgICAgIF9zY2hlZHVsZU5leHQoKSB7XG4gICAgICAgICAgdGhpcy5fdXNlUmVxdWVzdEFuaW1hdGlvbkZyYW1lID8gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9uZXh0Qm91bmQoKS5jYXRjaCh0aGlzLl9jYW5jZWxCb3VuZCk7XG4gICAgICAgICAgfSkgOiBQcm9taXNlLnJlc29sdmUoKS50aGVuKHRoaXMuX25leHRCb3VuZCkuY2F0Y2godGhpcy5fY2FuY2VsQm91bmQpO1xuICAgICAgICB9XG4gICAgICAgIGFzeW5jIF9uZXh0KCkge1xuICAgICAgICAgIGlmICghdGhpcy5jYW5jZWxsZWQpIHtcbiAgICAgICAgICAgIHRoaXMub3BlcmF0b3JMaXN0SWR4ID0gdGhpcy5nZnguZXhlY3V0ZU9wZXJhdG9yTGlzdCh0aGlzLm9wZXJhdG9yTGlzdCwgdGhpcy5vcGVyYXRvckxpc3RJZHgsIHRoaXMuX2NvbnRpbnVlQm91bmQsIHRoaXMuc3RlcHBlcik7XG4gICAgICAgICAgICBpZiAodGhpcy5vcGVyYXRvckxpc3RJZHggPT09IHRoaXMub3BlcmF0b3JMaXN0LmFyZ3NBcnJheS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgdGhpcy5ydW5uaW5nID0gITE7XG4gICAgICAgICAgICAgIGlmICh0aGlzLm9wZXJhdG9yTGlzdC5sYXN0Q2h1bmspIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdmeC5lbmREcmF3aW5nKHRoaXMucGFnZUNvbG9ycyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2FudmFzICYmIF9jbGFzc1N0YXRpY1ByaXZhdGVGaWVsZFNwZWNHZXQoSW50ZXJuYWxSZW5kZXJUYXNrLCBJbnRlcm5hbFJlbmRlclRhc2ssIF9iKS5kZWxldGUodGhpcy5fY2FudmFzKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBfYiA9IHtcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBuZXcgV2Vha1NldCgpXG4gICAgICB9O1xuICAgICAgY29uc3QgdmVyc2lvbiA9IFwiMy45LjE3OVwiO1xuICAgICAgZXhwb3J0cy52ZXJzaW9uID0gdmVyc2lvbjtcbiAgICAgIGNvbnN0IGJ1aWxkID0gXCIxZWY2ZmJjNTJcIjtcbiAgICAgIGV4cG9ydHMuYnVpbGQgPSBidWlsZDtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGkgPSBuKDMpLFxuICAgICAgICByID0gbigxMjYpO1xuICAgICAgaSh7XG4gICAgICAgIHRhcmdldDogXCJTZXRcIixcbiAgICAgICAgcHJvdG86ICEwLFxuICAgICAgICByZWFsOiAhMCxcbiAgICAgICAgZm9yY2VkOiAhbigxMzQpKFwiZGlmZmVyZW5jZVwiKVxuICAgICAgfSwge1xuICAgICAgICBkaWZmZXJlbmNlOiByXG4gICAgICB9KTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICAgIHZhciBpID0gbigxMjcpLFxuICAgICAgICByID0gbigxMjgpLFxuICAgICAgICBzID0gbigxMjkpLFxuICAgICAgICBhID0gbigxMzIpLFxuICAgICAgICBvID0gbigxMzMpLFxuICAgICAgICBsID0gbigxMzApLFxuICAgICAgICBjID0gbigxMzEpLFxuICAgICAgICBoID0gci5oYXMsXG4gICAgICAgIGQgPSByLnJlbW92ZTtcbiAgICAgIHQuZXhwb3J0cyA9IGZ1bmN0aW9uIGRpZmZlcmVuY2UodCkge1xuICAgICAgICB2YXIgZSA9IGkodGhpcyksXG4gICAgICAgICAgbiA9IG8odCksXG4gICAgICAgICAgciA9IHMoZSk7XG4gICAgICAgIGEoZSkgPD0gbi5zaXplID8gbChlLCBmdW5jdGlvbiAodCkge1xuICAgICAgICAgIG4uaW5jbHVkZXModCkgJiYgZChyLCB0KTtcbiAgICAgICAgfSkgOiBjKG4uZ2V0SXRlcmF0b3IoKSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICBoKGUsIHQpICYmIGQociwgdCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcjtcbiAgICAgIH07XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIHZhciBpID0gbigxMjgpLmhhcztcbiAgICAgIHQuZXhwb3J0cyA9IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIGkodCk7XG4gICAgICAgIHJldHVybiB0O1xuICAgICAgfTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGkgPSBuKDE0KSxcbiAgICAgICAgciA9IFNldC5wcm90b3R5cGU7XG4gICAgICB0LmV4cG9ydHMgPSB7XG4gICAgICAgIFNldDogU2V0LFxuICAgICAgICBhZGQ6IGkoci5hZGQpLFxuICAgICAgICBoYXM6IGkoci5oYXMpLFxuICAgICAgICByZW1vdmU6IGkoci5kZWxldGUpLFxuICAgICAgICBwcm90bzogclxuICAgICAgfTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGkgPSBuKDEyOCksXG4gICAgICAgIHIgPSBuKDEzMCksXG4gICAgICAgIHMgPSBpLlNldCxcbiAgICAgICAgYSA9IGkuYWRkO1xuICAgICAgdC5leHBvcnRzID0gZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgdmFyIGUgPSBuZXcgcygpO1xuICAgICAgICByKHQsIGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgYShlLCB0KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBlO1xuICAgICAgfTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGkgPSBuKDE0KSxcbiAgICAgICAgciA9IG4oMTMxKSxcbiAgICAgICAgcyA9IG4oMTI4KSxcbiAgICAgICAgYSA9IHMuU2V0LFxuICAgICAgICBvID0gcy5wcm90byxcbiAgICAgICAgbCA9IGkoby5mb3JFYWNoKSxcbiAgICAgICAgYyA9IGkoby5rZXlzKSxcbiAgICAgICAgaCA9IGMobmV3IGEoKSkubmV4dDtcbiAgICAgIHQuZXhwb3J0cyA9IGZ1bmN0aW9uICh0LCBlLCBuKSB7XG4gICAgICAgIHJldHVybiBuID8gcihjKHQpLCBlLCBoKSA6IGwodCwgZSk7XG4gICAgICB9O1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICB2YXIgaSA9IG4oOCk7XG4gICAgICB0LmV4cG9ydHMgPSBmdW5jdGlvbiAodCwgZSwgbikge1xuICAgICAgICBmb3IgKHZhciByLCBzLCBhID0gbiB8fCB0Lm5leHQ7ICEociA9IGkoYSwgdCkpLmRvbmU7KSBpZiAodm9pZCAwICE9PSAocyA9IGUoci52YWx1ZSkpKSByZXR1cm4gcztcbiAgICAgIH07XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIHZhciBpID0gbig3MiksXG4gICAgICAgIHIgPSBuKDEyOCk7XG4gICAgICB0LmV4cG9ydHMgPSBpKHIucHJvdG8sIFwic2l6ZVwiLCBcImdldFwiKSB8fCBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gdC5zaXplO1xuICAgICAgfTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGkgPSBuKDMxKSxcbiAgICAgICAgciA9IG4oNDcpLFxuICAgICAgICBzID0gbig4KSxcbiAgICAgICAgYSA9IG4oNjIpLFxuICAgICAgICBvID0gVHlwZUVycm9yLFxuICAgICAgICBsID0gTWF0aC5tYXgsXG4gICAgICAgIFNldFJlY29yZCA9IGZ1bmN0aW9uIFNldFJlY29yZCh0LCBlLCBuLCBpKSB7XG4gICAgICAgICAgdGhpcy5zZXQgPSB0O1xuICAgICAgICAgIHRoaXMuc2l6ZSA9IGU7XG4gICAgICAgICAgdGhpcy5oYXMgPSBuO1xuICAgICAgICAgIHRoaXMua2V5cyA9IGk7XG4gICAgICAgIH07XG4gICAgICBTZXRSZWNvcmQucHJvdG90eXBlID0ge1xuICAgICAgICBnZXRJdGVyYXRvcjogZnVuY3Rpb24gZ2V0SXRlcmF0b3IoKSB7XG4gICAgICAgICAgcmV0dXJuIHIocyh0aGlzLmtleXMsIHRoaXMuc2V0KSk7XG4gICAgICAgIH0sXG4gICAgICAgIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyh0KSB7XG4gICAgICAgICAgcmV0dXJuIHModGhpcy5oYXMsIHRoaXMuc2V0LCB0KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHQuZXhwb3J0cyA9IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHIodCk7XG4gICAgICAgIHZhciBlID0gK3Quc2l6ZTtcbiAgICAgICAgaWYgKGUgIT0gZSkgdGhyb3cgbyhcIkludmFsaWQgc2l6ZVwiKTtcbiAgICAgICAgcmV0dXJuIG5ldyBTZXRSZWNvcmQodCwgbChhKGUpLCAwKSwgaSh0LmhhcyksIGkodC5rZXlzKSk7XG4gICAgICB9O1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICB2YXIgaSA9IG4oMjQpO1xuICAgICAgdC5leHBvcnRzID0gZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBuZXcgKGkoXCJTZXRcIikpKClbdF0oe1xuICAgICAgICAgICAgc2l6ZTogMCxcbiAgICAgICAgICAgIGhhczogZnVuY3Rpb24gaGFzKCkge1xuICAgICAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAga2V5czogZnVuY3Rpb24ga2V5cygpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgZG9uZTogITBcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgfSBjYXRjaCAodCkge1xuICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGkgPSBuKDMpLFxuICAgICAgICByID0gbig3KSxcbiAgICAgICAgcyA9IG4oMTM2KTtcbiAgICAgIGkoe1xuICAgICAgICB0YXJnZXQ6IFwiU2V0XCIsXG4gICAgICAgIHByb3RvOiAhMCxcbiAgICAgICAgcmVhbDogITAsXG4gICAgICAgIGZvcmNlZDogIW4oMTM0KShcImludGVyc2VjdGlvblwiKSB8fCByKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gXCIzLDJcIiAhPSBBcnJheS5mcm9tKG5ldyBTZXQoWzEsIDIsIDNdKS5pbnRlcnNlY3Rpb24obmV3IFNldChbMywgMl0pKSk7XG4gICAgICAgIH0pXG4gICAgICB9LCB7XG4gICAgICAgIGludGVyc2VjdGlvbjogc1xuICAgICAgfSk7XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgICB2YXIgaSA9IG4oMTI3KSxcbiAgICAgICAgciA9IG4oMTI4KSxcbiAgICAgICAgcyA9IG4oMTMyKSxcbiAgICAgICAgYSA9IG4oMTMzKSxcbiAgICAgICAgbyA9IG4oMTMwKSxcbiAgICAgICAgbCA9IG4oMTMxKSxcbiAgICAgICAgYyA9IHIuU2V0LFxuICAgICAgICBoID0gci5hZGQsXG4gICAgICAgIGQgPSByLmhhcztcbiAgICAgIHQuZXhwb3J0cyA9IGZ1bmN0aW9uIGludGVyc2VjdGlvbih0KSB7XG4gICAgICAgIHZhciBlID0gaSh0aGlzKSxcbiAgICAgICAgICBuID0gYSh0KSxcbiAgICAgICAgICByID0gbmV3IGMoKTtcbiAgICAgICAgcyhlKSA+IG4uc2l6ZSA/IGwobi5nZXRJdGVyYXRvcigpLCBmdW5jdGlvbiAodCkge1xuICAgICAgICAgIGQoZSwgdCkgJiYgaChyLCB0KTtcbiAgICAgICAgfSkgOiBvKGUsIGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgbi5pbmNsdWRlcyh0KSAmJiBoKHIsIHQpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHI7XG4gICAgICB9O1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICB2YXIgaSA9IG4oMyksXG4gICAgICAgIHIgPSBuKDEzOCk7XG4gICAgICBpKHtcbiAgICAgICAgdGFyZ2V0OiBcIlNldFwiLFxuICAgICAgICBwcm90bzogITAsXG4gICAgICAgIHJlYWw6ICEwLFxuICAgICAgICBmb3JjZWQ6ICFuKDEzNCkoXCJpc0Rpc2pvaW50RnJvbVwiKVxuICAgICAgfSwge1xuICAgICAgICBpc0Rpc2pvaW50RnJvbTogclxuICAgICAgfSk7XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgICB2YXIgaSA9IG4oMTI3KSxcbiAgICAgICAgciA9IG4oMTI4KS5oYXMsXG4gICAgICAgIHMgPSBuKDEzMiksXG4gICAgICAgIGEgPSBuKDEzMyksXG4gICAgICAgIG8gPSBuKDEzMCksXG4gICAgICAgIGwgPSBuKDEzMSksXG4gICAgICAgIGMgPSBuKDEzOSk7XG4gICAgICB0LmV4cG9ydHMgPSBmdW5jdGlvbiBpc0Rpc2pvaW50RnJvbSh0KSB7XG4gICAgICAgIHZhciBlID0gaSh0aGlzKSxcbiAgICAgICAgICBuID0gYSh0KTtcbiAgICAgICAgaWYgKHMoZSkgPD0gbi5zaXplKSByZXR1cm4gITEgIT09IG8oZSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICBpZiAobi5pbmNsdWRlcyh0KSkgcmV0dXJuICExO1xuICAgICAgICB9LCAhMCk7XG4gICAgICAgIHZhciBoID0gbi5nZXRJdGVyYXRvcigpO1xuICAgICAgICByZXR1cm4gITEgIT09IGwoaCwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICBpZiAocihlLCB0KSkgcmV0dXJuIGMoaCwgXCJub3JtYWxcIiwgITEpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIHZhciBpID0gbig4KSxcbiAgICAgICAgciA9IG4oNDcpLFxuICAgICAgICBzID0gbigzMCk7XG4gICAgICB0LmV4cG9ydHMgPSBmdW5jdGlvbiAodCwgZSwgbikge1xuICAgICAgICB2YXIgYSwgbztcbiAgICAgICAgcih0KTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoIShhID0gcyh0LCBcInJldHVyblwiKSkpIHtcbiAgICAgICAgICAgIGlmIChcInRocm93XCIgPT09IGUpIHRocm93IG47XG4gICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgICB9XG4gICAgICAgICAgYSA9IGkoYSwgdCk7XG4gICAgICAgIH0gY2F0Y2ggKHQpIHtcbiAgICAgICAgICBvID0gITA7XG4gICAgICAgICAgYSA9IHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFwidGhyb3dcIiA9PT0gZSkgdGhyb3cgbjtcbiAgICAgICAgaWYgKG8pIHRocm93IGE7XG4gICAgICAgIHIoYSk7XG4gICAgICAgIHJldHVybiBuO1xuICAgICAgfTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGkgPSBuKDMpLFxuICAgICAgICByID0gbigxNDEpO1xuICAgICAgaSh7XG4gICAgICAgIHRhcmdldDogXCJTZXRcIixcbiAgICAgICAgcHJvdG86ICEwLFxuICAgICAgICByZWFsOiAhMCxcbiAgICAgICAgZm9yY2VkOiAhbigxMzQpKFwiaXNTdWJzZXRPZlwiKVxuICAgICAgfSwge1xuICAgICAgICBpc1N1YnNldE9mOiByXG4gICAgICB9KTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICAgIHZhciBpID0gbigxMjcpLFxuICAgICAgICByID0gbigxMzIpLFxuICAgICAgICBzID0gbigxMzApLFxuICAgICAgICBhID0gbigxMzMpO1xuICAgICAgdC5leHBvcnRzID0gZnVuY3Rpb24gaXNTdWJzZXRPZih0KSB7XG4gICAgICAgIHZhciBlID0gaSh0aGlzKSxcbiAgICAgICAgICBuID0gYSh0KTtcbiAgICAgICAgcmV0dXJuICEocihlKSA+IG4uc2l6ZSkgJiYgITEgIT09IHMoZSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICBpZiAoIW4uaW5jbHVkZXModCkpIHJldHVybiAhMTtcbiAgICAgICAgfSwgITApO1xuICAgICAgfTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGkgPSBuKDMpLFxuICAgICAgICByID0gbigxNDMpO1xuICAgICAgaSh7XG4gICAgICAgIHRhcmdldDogXCJTZXRcIixcbiAgICAgICAgcHJvdG86ICEwLFxuICAgICAgICByZWFsOiAhMCxcbiAgICAgICAgZm9yY2VkOiAhbigxMzQpKFwiaXNTdXBlcnNldE9mXCIpXG4gICAgICB9LCB7XG4gICAgICAgIGlzU3VwZXJzZXRPZjogclxuICAgICAgfSk7XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgICB2YXIgaSA9IG4oMTI3KSxcbiAgICAgICAgciA9IG4oMTI4KS5oYXMsXG4gICAgICAgIHMgPSBuKDEzMiksXG4gICAgICAgIGEgPSBuKDEzMyksXG4gICAgICAgIG8gPSBuKDEzMSksXG4gICAgICAgIGwgPSBuKDEzOSk7XG4gICAgICB0LmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N1cGVyc2V0T2YodCkge1xuICAgICAgICB2YXIgZSA9IGkodGhpcyksXG4gICAgICAgICAgbiA9IGEodCk7XG4gICAgICAgIGlmIChzKGUpIDwgbi5zaXplKSByZXR1cm4gITE7XG4gICAgICAgIHZhciBjID0gbi5nZXRJdGVyYXRvcigpO1xuICAgICAgICByZXR1cm4gITEgIT09IG8oYywgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICBpZiAoIXIoZSwgdCkpIHJldHVybiBsKGMsIFwibm9ybWFsXCIsICExKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICB2YXIgaSA9IG4oMyksXG4gICAgICAgIHIgPSBuKDE0NSk7XG4gICAgICBpKHtcbiAgICAgICAgdGFyZ2V0OiBcIlNldFwiLFxuICAgICAgICBwcm90bzogITAsXG4gICAgICAgIHJlYWw6ICEwLFxuICAgICAgICBmb3JjZWQ6ICFuKDEzNCkoXCJzeW1tZXRyaWNEaWZmZXJlbmNlXCIpXG4gICAgICB9LCB7XG4gICAgICAgIHN5bW1ldHJpY0RpZmZlcmVuY2U6IHJcbiAgICAgIH0pO1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgICAgdmFyIGkgPSBuKDEyNyksXG4gICAgICAgIHIgPSBuKDEyOCksXG4gICAgICAgIHMgPSBuKDEyOSksXG4gICAgICAgIGEgPSBuKDEzMyksXG4gICAgICAgIG8gPSBuKDEzMSksXG4gICAgICAgIGwgPSByLmFkZCxcbiAgICAgICAgYyA9IHIuaGFzLFxuICAgICAgICBoID0gci5yZW1vdmU7XG4gICAgICB0LmV4cG9ydHMgPSBmdW5jdGlvbiBzeW1tZXRyaWNEaWZmZXJlbmNlKHQpIHtcbiAgICAgICAgdmFyIGUgPSBpKHRoaXMpLFxuICAgICAgICAgIG4gPSBhKHQpLmdldEl0ZXJhdG9yKCksXG4gICAgICAgICAgciA9IHMoZSk7XG4gICAgICAgIG8obiwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICBjKGUsIHQpID8gaChyLCB0KSA6IGwociwgdCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcjtcbiAgICAgIH07XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIHZhciBpID0gbigzKSxcbiAgICAgICAgciA9IG4oMTQ3KTtcbiAgICAgIGkoe1xuICAgICAgICB0YXJnZXQ6IFwiU2V0XCIsXG4gICAgICAgIHByb3RvOiAhMCxcbiAgICAgICAgcmVhbDogITAsXG4gICAgICAgIGZvcmNlZDogIW4oMTM0KShcInVuaW9uXCIpXG4gICAgICB9LCB7XG4gICAgICAgIHVuaW9uOiByXG4gICAgICB9KTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICAgIHZhciBpID0gbigxMjcpLFxuICAgICAgICByID0gbigxMjgpLmFkZCxcbiAgICAgICAgcyA9IG4oMTI5KSxcbiAgICAgICAgYSA9IG4oMTMzKSxcbiAgICAgICAgbyA9IG4oMTMxKTtcbiAgICAgIHQuZXhwb3J0cyA9IGZ1bmN0aW9uIHVuaW9uKHQpIHtcbiAgICAgICAgdmFyIGUgPSBpKHRoaXMpLFxuICAgICAgICAgIG4gPSBhKHQpLmdldEl0ZXJhdG9yKCksXG4gICAgICAgICAgbCA9IHMoZSk7XG4gICAgICAgIG8obiwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICByKGwsIHQpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGw7XG4gICAgICB9O1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgICAgdmFyIGkgPSBuKDMpLFxuICAgICAgICByID0gbig0KSxcbiAgICAgICAgcyA9IG4oMjQpLFxuICAgICAgICBhID0gbigxMSksXG4gICAgICAgIG8gPSBuKDQ1KS5mLFxuICAgICAgICBsID0gbigzOSksXG4gICAgICAgIGMgPSBuKDE0OSksXG4gICAgICAgIGggPSBuKDc1KSxcbiAgICAgICAgZCA9IG4oNzYpLFxuICAgICAgICB1ID0gbigxNTApLFxuICAgICAgICBwID0gbig4MiksXG4gICAgICAgIGYgPSBuKDYpLFxuICAgICAgICBnID0gbigzNiksXG4gICAgICAgIG0gPSBcIkRPTUV4Y2VwdGlvblwiLFxuICAgICAgICBiID0gcyhcIkVycm9yXCIpLFxuICAgICAgICB2ID0gcyhtKSxcbiAgICAgICAgeSA9IGZ1bmN0aW9uIERPTUV4Y2VwdGlvbigpIHtcbiAgICAgICAgICBjKHRoaXMsIEEpO1xuICAgICAgICAgIHZhciB0ID0gYXJndW1lbnRzLmxlbmd0aCxcbiAgICAgICAgICAgIGUgPSBkKHQgPCAxID8gdm9pZCAwIDogYXJndW1lbnRzWzBdKSxcbiAgICAgICAgICAgIG4gPSBkKHQgPCAyID8gdm9pZCAwIDogYXJndW1lbnRzWzFdLCBcIkVycm9yXCIpLFxuICAgICAgICAgICAgaSA9IG5ldyB2KGUsIG4pLFxuICAgICAgICAgICAgciA9IGIoZSk7XG4gICAgICAgICAgci5uYW1lID0gbTtcbiAgICAgICAgICBvKGksIFwic3RhY2tcIiwgYSgxLCBwKHIuc3RhY2ssIDEpKSk7XG4gICAgICAgICAgaChpLCB0aGlzLCB5KTtcbiAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgfSxcbiAgICAgICAgQSA9IHkucHJvdG90eXBlID0gdi5wcm90b3R5cGUsXG4gICAgICAgIF8gPSAoXCJzdGFja1wiIGluIGIobSkpLFxuICAgICAgICBTID0gKFwic3RhY2tcIiBpbiBuZXcgdigxLCAyKSksXG4gICAgICAgIEUgPSB2ICYmIGYgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLCBtKSxcbiAgICAgICAgeCA9ICEoIUUgfHwgRS53cml0YWJsZSAmJiBFLmNvbmZpZ3VyYWJsZSksXG4gICAgICAgIHcgPSBfICYmICF4ICYmICFTO1xuICAgICAgaSh7XG4gICAgICAgIGdsb2JhbDogITAsXG4gICAgICAgIGNvbnN0cnVjdG9yOiAhMCxcbiAgICAgICAgZm9yY2VkOiBnIHx8IHdcbiAgICAgIH0sIHtcbiAgICAgICAgRE9NRXhjZXB0aW9uOiB3ID8geSA6IHZcbiAgICAgIH0pO1xuICAgICAgdmFyIEMgPSBzKG0pLFxuICAgICAgICBUID0gQy5wcm90b3R5cGU7XG4gICAgICBpZiAoVC5jb25zdHJ1Y3RvciAhPT0gQykge1xuICAgICAgICBnIHx8IG8oVCwgXCJjb25zdHJ1Y3RvclwiLCBhKDEsIEMpKTtcbiAgICAgICAgZm9yICh2YXIgUCBpbiB1KSBpZiAobCh1LCBQKSkge1xuICAgICAgICAgIHZhciBrID0gdVtQXSxcbiAgICAgICAgICAgIE0gPSBrLnM7XG4gICAgICAgICAgbChDLCBNKSB8fCBvKEMsIE0sIGEoNiwgay5jKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGkgPSBuKDI1KSxcbiAgICAgICAgciA9IFR5cGVFcnJvcjtcbiAgICAgIHQuZXhwb3J0cyA9IGZ1bmN0aW9uICh0LCBlKSB7XG4gICAgICAgIGlmIChpKGUsIHQpKSByZXR1cm4gdDtcbiAgICAgICAgdGhyb3cgcihcIkluY29ycmVjdCBpbnZvY2F0aW9uXCIpO1xuICAgICAgfTtcbiAgICB9LCB0ID0+IHtcbiAgICAgIHQuZXhwb3J0cyA9IHtcbiAgICAgICAgSW5kZXhTaXplRXJyb3I6IHtcbiAgICAgICAgICBzOiBcIklOREVYX1NJWkVfRVJSXCIsXG4gICAgICAgICAgYzogMSxcbiAgICAgICAgICBtOiAxXG4gICAgICAgIH0sXG4gICAgICAgIERPTVN0cmluZ1NpemVFcnJvcjoge1xuICAgICAgICAgIHM6IFwiRE9NU1RSSU5HX1NJWkVfRVJSXCIsXG4gICAgICAgICAgYzogMixcbiAgICAgICAgICBtOiAwXG4gICAgICAgIH0sXG4gICAgICAgIEhpZXJhcmNoeVJlcXVlc3RFcnJvcjoge1xuICAgICAgICAgIHM6IFwiSElFUkFSQ0hZX1JFUVVFU1RfRVJSXCIsXG4gICAgICAgICAgYzogMyxcbiAgICAgICAgICBtOiAxXG4gICAgICAgIH0sXG4gICAgICAgIFdyb25nRG9jdW1lbnRFcnJvcjoge1xuICAgICAgICAgIHM6IFwiV1JPTkdfRE9DVU1FTlRfRVJSXCIsXG4gICAgICAgICAgYzogNCxcbiAgICAgICAgICBtOiAxXG4gICAgICAgIH0sXG4gICAgICAgIEludmFsaWRDaGFyYWN0ZXJFcnJvcjoge1xuICAgICAgICAgIHM6IFwiSU5WQUxJRF9DSEFSQUNURVJfRVJSXCIsXG4gICAgICAgICAgYzogNSxcbiAgICAgICAgICBtOiAxXG4gICAgICAgIH0sXG4gICAgICAgIE5vRGF0YUFsbG93ZWRFcnJvcjoge1xuICAgICAgICAgIHM6IFwiTk9fREFUQV9BTExPV0VEX0VSUlwiLFxuICAgICAgICAgIGM6IDYsXG4gICAgICAgICAgbTogMFxuICAgICAgICB9LFxuICAgICAgICBOb01vZGlmaWNhdGlvbkFsbG93ZWRFcnJvcjoge1xuICAgICAgICAgIHM6IFwiTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSXCIsXG4gICAgICAgICAgYzogNyxcbiAgICAgICAgICBtOiAxXG4gICAgICAgIH0sXG4gICAgICAgIE5vdEZvdW5kRXJyb3I6IHtcbiAgICAgICAgICBzOiBcIk5PVF9GT1VORF9FUlJcIixcbiAgICAgICAgICBjOiA4LFxuICAgICAgICAgIG06IDFcbiAgICAgICAgfSxcbiAgICAgICAgTm90U3VwcG9ydGVkRXJyb3I6IHtcbiAgICAgICAgICBzOiBcIk5PVF9TVVBQT1JURURfRVJSXCIsXG4gICAgICAgICAgYzogOSxcbiAgICAgICAgICBtOiAxXG4gICAgICAgIH0sXG4gICAgICAgIEluVXNlQXR0cmlidXRlRXJyb3I6IHtcbiAgICAgICAgICBzOiBcIklOVVNFX0FUVFJJQlVURV9FUlJcIixcbiAgICAgICAgICBjOiAxMCxcbiAgICAgICAgICBtOiAxXG4gICAgICAgIH0sXG4gICAgICAgIEludmFsaWRTdGF0ZUVycm9yOiB7XG4gICAgICAgICAgczogXCJJTlZBTElEX1NUQVRFX0VSUlwiLFxuICAgICAgICAgIGM6IDExLFxuICAgICAgICAgIG06IDFcbiAgICAgICAgfSxcbiAgICAgICAgU3ludGF4RXJyb3I6IHtcbiAgICAgICAgICBzOiBcIlNZTlRBWF9FUlJcIixcbiAgICAgICAgICBjOiAxMixcbiAgICAgICAgICBtOiAxXG4gICAgICAgIH0sXG4gICAgICAgIEludmFsaWRNb2RpZmljYXRpb25FcnJvcjoge1xuICAgICAgICAgIHM6IFwiSU5WQUxJRF9NT0RJRklDQVRJT05fRVJSXCIsXG4gICAgICAgICAgYzogMTMsXG4gICAgICAgICAgbTogMVxuICAgICAgICB9LFxuICAgICAgICBOYW1lc3BhY2VFcnJvcjoge1xuICAgICAgICAgIHM6IFwiTkFNRVNQQUNFX0VSUlwiLFxuICAgICAgICAgIGM6IDE0LFxuICAgICAgICAgIG06IDFcbiAgICAgICAgfSxcbiAgICAgICAgSW52YWxpZEFjY2Vzc0Vycm9yOiB7XG4gICAgICAgICAgczogXCJJTlZBTElEX0FDQ0VTU19FUlJcIixcbiAgICAgICAgICBjOiAxNSxcbiAgICAgICAgICBtOiAxXG4gICAgICAgIH0sXG4gICAgICAgIFZhbGlkYXRpb25FcnJvcjoge1xuICAgICAgICAgIHM6IFwiVkFMSURBVElPTl9FUlJcIixcbiAgICAgICAgICBjOiAxNixcbiAgICAgICAgICBtOiAwXG4gICAgICAgIH0sXG4gICAgICAgIFR5cGVNaXNtYXRjaEVycm9yOiB7XG4gICAgICAgICAgczogXCJUWVBFX01JU01BVENIX0VSUlwiLFxuICAgICAgICAgIGM6IDE3LFxuICAgICAgICAgIG06IDFcbiAgICAgICAgfSxcbiAgICAgICAgU2VjdXJpdHlFcnJvcjoge1xuICAgICAgICAgIHM6IFwiU0VDVVJJVFlfRVJSXCIsXG4gICAgICAgICAgYzogMTgsXG4gICAgICAgICAgbTogMVxuICAgICAgICB9LFxuICAgICAgICBOZXR3b3JrRXJyb3I6IHtcbiAgICAgICAgICBzOiBcIk5FVFdPUktfRVJSXCIsXG4gICAgICAgICAgYzogMTksXG4gICAgICAgICAgbTogMVxuICAgICAgICB9LFxuICAgICAgICBBYm9ydEVycm9yOiB7XG4gICAgICAgICAgczogXCJBQk9SVF9FUlJcIixcbiAgICAgICAgICBjOiAyMCxcbiAgICAgICAgICBtOiAxXG4gICAgICAgIH0sXG4gICAgICAgIFVSTE1pc21hdGNoRXJyb3I6IHtcbiAgICAgICAgICBzOiBcIlVSTF9NSVNNQVRDSF9FUlJcIixcbiAgICAgICAgICBjOiAyMSxcbiAgICAgICAgICBtOiAxXG4gICAgICAgIH0sXG4gICAgICAgIFF1b3RhRXhjZWVkZWRFcnJvcjoge1xuICAgICAgICAgIHM6IFwiUVVPVEFfRVhDRUVERURfRVJSXCIsXG4gICAgICAgICAgYzogMjIsXG4gICAgICAgICAgbTogMVxuICAgICAgICB9LFxuICAgICAgICBUaW1lb3V0RXJyb3I6IHtcbiAgICAgICAgICBzOiBcIlRJTUVPVVRfRVJSXCIsXG4gICAgICAgICAgYzogMjMsXG4gICAgICAgICAgbTogMVxuICAgICAgICB9LFxuICAgICAgICBJbnZhbGlkTm9kZVR5cGVFcnJvcjoge1xuICAgICAgICAgIHM6IFwiSU5WQUxJRF9OT0RFX1RZUEVfRVJSXCIsXG4gICAgICAgICAgYzogMjQsXG4gICAgICAgICAgbTogMVxuICAgICAgICB9LFxuICAgICAgICBEYXRhQ2xvbmVFcnJvcjoge1xuICAgICAgICAgIHM6IFwiREFUQV9DTE9ORV9FUlJcIixcbiAgICAgICAgICBjOiAyNSxcbiAgICAgICAgICBtOiAxXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIHZhciBpLFxuICAgICAgICByID0gbigzNiksXG4gICAgICAgIHMgPSBuKDMpLFxuICAgICAgICBhID0gbig0KSxcbiAgICAgICAgbyA9IG4oMjQpLFxuICAgICAgICBsID0gbigxNCksXG4gICAgICAgIGMgPSBuKDcpLFxuICAgICAgICBoID0gbig0MSksXG4gICAgICAgIGQgPSBuKDIxKSxcbiAgICAgICAgdSA9IG4oMTUyKSxcbiAgICAgICAgcCA9IG4oMTcpLFxuICAgICAgICBmID0gbigyMCksXG4gICAgICAgIGcgPSBuKDIzKSxcbiAgICAgICAgbSA9IG4oMTUzKSxcbiAgICAgICAgYiA9IG4oNDcpLFxuICAgICAgICB2ID0gbig3OCksXG4gICAgICAgIHkgPSBuKDM5KSxcbiAgICAgICAgQSA9IG4oMTU4KSxcbiAgICAgICAgXyA9IG4oNDQpLFxuICAgICAgICBTID0gbig2NCksXG4gICAgICAgIEUgPSBuKDg1KSxcbiAgICAgICAgeCA9IG4oMTU5KSxcbiAgICAgICAgdyA9IG4oMTYxKSxcbiAgICAgICAgQyA9IG4oMTI4KSxcbiAgICAgICAgVCA9IG4oODMpLFxuICAgICAgICBQID0gbigxMTkpLFxuICAgICAgICBrID0gYS5PYmplY3QsXG4gICAgICAgIE0gPSBhLkFycmF5LFxuICAgICAgICBSID0gYS5EYXRlLFxuICAgICAgICBJID0gYS5FcnJvcixcbiAgICAgICAgRCA9IGEuRXZhbEVycm9yLFxuICAgICAgICBPID0gYS5SYW5nZUVycm9yLFxuICAgICAgICBMID0gYS5SZWZlcmVuY2VFcnJvcixcbiAgICAgICAgTiA9IGEuU3ludGF4RXJyb3IsXG4gICAgICAgIEIgPSBhLlR5cGVFcnJvcixcbiAgICAgICAgaiA9IGEuVVJJRXJyb3IsXG4gICAgICAgIFUgPSBhLlBlcmZvcm1hbmNlTWFyayxcbiAgICAgICAgeiA9IGEuV2ViQXNzZW1ibHksXG4gICAgICAgIEggPSB6ICYmIHouQ29tcGlsZUVycm9yIHx8IEksXG4gICAgICAgIHEgPSB6ICYmIHouTGlua0Vycm9yIHx8IEksXG4gICAgICAgIFcgPSB6ICYmIHouUnVudGltZUVycm9yIHx8IEksXG4gICAgICAgIEcgPSBvKFwiRE9NRXhjZXB0aW9uXCIpLFxuICAgICAgICBWID0gdy5NYXAsXG4gICAgICAgICQgPSB3LmhhcyxcbiAgICAgICAgWCA9IHcuZ2V0LFxuICAgICAgICBLID0gdy5zZXQsXG4gICAgICAgIFkgPSBDLlNldCxcbiAgICAgICAgSiA9IEMuYWRkLFxuICAgICAgICBRID0gbyhcIk9iamVjdFwiLCBcImtleXNcIiksXG4gICAgICAgIFogPSBsKFtdLnB1c2gpLFxuICAgICAgICB0dCA9IGwoKCEwKS52YWx1ZU9mKSxcbiAgICAgICAgZXQgPSBsKDEuLnZhbHVlT2YpLFxuICAgICAgICBudCA9IGwoXCJcIi52YWx1ZU9mKSxcbiAgICAgICAgaXQgPSBsKFIucHJvdG90eXBlLmdldFRpbWUpLFxuICAgICAgICBydCA9IGgoXCJzdHJ1Y3R1cmVkQ2xvbmVcIiksXG4gICAgICAgIHN0ID0gXCJEYXRhQ2xvbmVFcnJvclwiLFxuICAgICAgICBhdCA9IFwiVHJhbnNmZXJyaW5nXCIsXG4gICAgICAgIGNoZWNrQmFzaWNTZW1hbnRpYyA9IGZ1bmN0aW9uIGNoZWNrQmFzaWNTZW1hbnRpYyh0KSB7XG4gICAgICAgICAgcmV0dXJuICFjKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBlID0gbmV3IGEuU2V0KFs3XSksXG4gICAgICAgICAgICAgIG4gPSB0KGUpLFxuICAgICAgICAgICAgICBpID0gdChrKDcpKTtcbiAgICAgICAgICAgIHJldHVybiBuID09IGUgfHwgIW4uaGFzKDcpIHx8IFwib2JqZWN0XCIgIT0gdHlwZW9mIGkgfHwgNyAhPSBpO1xuICAgICAgICAgIH0pICYmIHQ7XG4gICAgICAgIH0sXG4gICAgICAgIGNoZWNrRXJyb3JzQ2xvbmluZyA9IGZ1bmN0aW9uIGNoZWNrRXJyb3JzQ2xvbmluZyh0LCBlKSB7XG4gICAgICAgICAgcmV0dXJuICFjKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBuID0gbmV3IGUoKSxcbiAgICAgICAgICAgICAgaSA9IHQoe1xuICAgICAgICAgICAgICAgIGE6IG4sXG4gICAgICAgICAgICAgICAgYjogblxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiAhKGkgJiYgaS5hID09PSBpLmIgJiYgaS5hIGluc3RhbmNlb2YgZSAmJiBpLmEuc3RhY2sgPT09IG4uc3RhY2spO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBvdCA9IGEuc3RydWN0dXJlZENsb25lLFxuICAgICAgICBsdCA9IHIgfHwgIWNoZWNrRXJyb3JzQ2xvbmluZyhvdCwgSSkgfHwgIWNoZWNrRXJyb3JzQ2xvbmluZyhvdCwgRykgfHwgIShpID0gb3QsICFjKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgdCA9IGkobmV3IGEuQWdncmVnYXRlRXJyb3IoWzFdLCBydCwge1xuICAgICAgICAgICAgY2F1c2U6IDNcbiAgICAgICAgICB9KSk7XG4gICAgICAgICAgcmV0dXJuIFwiQWdncmVnYXRlRXJyb3JcIiAhPSB0Lm5hbWUgfHwgMSAhPSB0LmVycm9yc1swXSB8fCB0Lm1lc3NhZ2UgIT0gcnQgfHwgMyAhPSB0LmNhdXNlO1xuICAgICAgICB9KSksXG4gICAgICAgIGN0ID0gIW90ICYmIGNoZWNrQmFzaWNTZW1hbnRpYyhmdW5jdGlvbiAodCkge1xuICAgICAgICAgIHJldHVybiBuZXcgVShydCwge1xuICAgICAgICAgICAgZGV0YWlsOiB0XG4gICAgICAgICAgfSkuZGV0YWlsO1xuICAgICAgICB9KSxcbiAgICAgICAgaHQgPSBjaGVja0Jhc2ljU2VtYW50aWMob3QpIHx8IGN0LFxuICAgICAgICB0aHJvd1VuY2xvbmVhYmxlID0gZnVuY3Rpb24gdGhyb3dVbmNsb25lYWJsZSh0KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEcoXCJVbmNsb25lYWJsZSB0eXBlOiBcIiArIHQsIHN0KTtcbiAgICAgICAgfSxcbiAgICAgICAgdGhyb3dVbnBvbHlmaWxsYWJsZSA9IGZ1bmN0aW9uIHRocm93VW5wb2x5ZmlsbGFibGUodCwgZSkge1xuICAgICAgICAgIHRocm93IG5ldyBHKChlIHx8IFwiQ2xvbmluZ1wiKSArIFwiIG9mIFwiICsgdCArIFwiIGNhbm5vdCBiZSBwcm9wZXJseSBwb2x5ZmlsbGVkIGluIHRoaXMgZW5naW5lXCIsIHN0KTtcbiAgICAgICAgfSxcbiAgICAgICAgdHJ5TmF0aXZlUmVzdHJpY3RlZFN0cnVjdHVyZWRDbG9uZSA9IGZ1bmN0aW9uIHRyeU5hdGl2ZVJlc3RyaWN0ZWRTdHJ1Y3R1cmVkQ2xvbmUodCwgZSkge1xuICAgICAgICAgIGh0IHx8IHRocm93VW5wb2x5ZmlsbGFibGUoZSk7XG4gICAgICAgICAgcmV0dXJuIGh0KHQpO1xuICAgICAgICB9LFxuICAgICAgICBjbG9uZUJ1ZmZlciA9IGZ1bmN0aW9uIGNsb25lQnVmZmVyKHQsIGUsIG4pIHtcbiAgICAgICAgICBpZiAoJChlLCB0KSkgcmV0dXJuIFgoZSwgdCk7XG4gICAgICAgICAgdmFyIGksIHIsIHMsIG8sIGwsIGM7XG4gICAgICAgICAgaWYgKFwiU2hhcmVkQXJyYXlCdWZmZXJcIiA9PT0gKG4gfHwgdih0KSkpIGkgPSBodCA/IGh0KHQpIDogdDtlbHNlIHtcbiAgICAgICAgICAgIHZhciBoID0gYS5EYXRhVmlldztcbiAgICAgICAgICAgIGggfHwgXCJmdW5jdGlvblwiID09IHR5cGVvZiB0LnNsaWNlIHx8IHRocm93VW5wb2x5ZmlsbGFibGUoXCJBcnJheUJ1ZmZlclwiKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGlmIChcImZ1bmN0aW9uXCIgIT0gdHlwZW9mIHQuc2xpY2UgfHwgdC5yZXNpemFibGUpIHtcbiAgICAgICAgICAgICAgICByID0gdC5ieXRlTGVuZ3RoO1xuICAgICAgICAgICAgICAgIHMgPSBcIm1heEJ5dGVMZW5ndGhcIiBpbiB0ID8ge1xuICAgICAgICAgICAgICAgICAgbWF4Qnl0ZUxlbmd0aDogdC5tYXhCeXRlTGVuZ3RoXG4gICAgICAgICAgICAgICAgfSA6IHZvaWQgMDtcbiAgICAgICAgICAgICAgICBpID0gbmV3IEFycmF5QnVmZmVyKHIsIHMpO1xuICAgICAgICAgICAgICAgIG8gPSBuZXcgaCh0KTtcbiAgICAgICAgICAgICAgICBsID0gbmV3IGgoaSk7XG4gICAgICAgICAgICAgICAgZm9yIChjID0gMDsgYyA8IHI7IGMrKykgbC5zZXRVaW50OChjLCBvLmdldFVpbnQ4KGMpKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGkgPSB0LnNsaWNlKDApO1xuICAgICAgICAgICAgfSBjYXRjaCAodCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRyhcIkFycmF5QnVmZmVyIGlzIGRldGFjaGVkXCIsIHN0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgSyhlLCB0LCBpKTtcbiAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgfSxcbiAgICAgICAgY2xvbmVWaWV3ID0gZnVuY3Rpb24gY2xvbmVWaWV3KHQsIGUsIG4sIGksIHIpIHtcbiAgICAgICAgICB2YXIgcyA9IGFbZV07XG4gICAgICAgICAgZihzKSB8fCB0aHJvd1VucG9seWZpbGxhYmxlKGUpO1xuICAgICAgICAgIHJldHVybiBuZXcgcyhjbG9uZUJ1ZmZlcih0LmJ1ZmZlciwgciksIG4sIGkpO1xuICAgICAgICB9LFxuICAgICAgICBQbGFjZWhvbGRlciA9IGZ1bmN0aW9uIFBsYWNlaG9sZGVyKHQsIGUsIG4pIHtcbiAgICAgICAgICB0aGlzLm9iamVjdCA9IHQ7XG4gICAgICAgICAgdGhpcy50eXBlID0gZTtcbiAgICAgICAgICB0aGlzLm1ldGFkYXRhID0gbjtcbiAgICAgICAgfSxcbiAgICAgICAgc3RydWN0dXJlZENsb25lSW50ZXJuYWwgPSBmdW5jdGlvbiBzdHJ1Y3R1cmVkQ2xvbmVJbnRlcm5hbCh0LCBlLCBuKSB7XG4gICAgICAgICAgZyh0KSAmJiB0aHJvd1VuY2xvbmVhYmxlKFwiU3ltYm9sXCIpO1xuICAgICAgICAgIGlmICghZih0KSkgcmV0dXJuIHQ7XG4gICAgICAgICAgaWYgKGUpIHtcbiAgICAgICAgICAgIGlmICgkKGUsIHQpKSByZXR1cm4gWChlLCB0KTtcbiAgICAgICAgICB9IGVsc2UgZSA9IG5ldyBWKCk7XG4gICAgICAgICAgdmFyIGksXG4gICAgICAgICAgICByLFxuICAgICAgICAgICAgcyxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBjLFxuICAgICAgICAgICAgaCxcbiAgICAgICAgICAgIHUsXG4gICAgICAgICAgICBwLFxuICAgICAgICAgICAgbSA9IHYodCk7XG4gICAgICAgICAgc3dpdGNoIChtKSB7XG4gICAgICAgICAgICBjYXNlIFwiQXJyYXlcIjpcbiAgICAgICAgICAgICAgcyA9IE0oUyh0KSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIk9iamVjdFwiOlxuICAgICAgICAgICAgICBzID0ge307XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIk1hcFwiOlxuICAgICAgICAgICAgICBzID0gbmV3IFYoKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiU2V0XCI6XG4gICAgICAgICAgICAgIHMgPSBuZXcgWSgpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJSZWdFeHBcIjpcbiAgICAgICAgICAgICAgcyA9IG5ldyBSZWdFeHAodC5zb3VyY2UsIHgodCkpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJFcnJvclwiOlxuICAgICAgICAgICAgICBzd2l0Y2ggKHIgPSB0Lm5hbWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwiQWdncmVnYXRlRXJyb3JcIjpcbiAgICAgICAgICAgICAgICAgIHMgPSBvKFwiQWdncmVnYXRlRXJyb3JcIikoW10pO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIkV2YWxFcnJvclwiOlxuICAgICAgICAgICAgICAgICAgcyA9IEQoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJSYW5nZUVycm9yXCI6XG4gICAgICAgICAgICAgICAgICBzID0gTygpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIlJlZmVyZW5jZUVycm9yXCI6XG4gICAgICAgICAgICAgICAgICBzID0gTCgpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIlN5bnRheEVycm9yXCI6XG4gICAgICAgICAgICAgICAgICBzID0gTigpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIlR5cGVFcnJvclwiOlxuICAgICAgICAgICAgICAgICAgcyA9IEIoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJVUklFcnJvclwiOlxuICAgICAgICAgICAgICAgICAgcyA9IGooKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJDb21waWxlRXJyb3JcIjpcbiAgICAgICAgICAgICAgICAgIHMgPSBIKCk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiTGlua0Vycm9yXCI6XG4gICAgICAgICAgICAgICAgICBzID0gcSgpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIlJ1bnRpbWVFcnJvclwiOlxuICAgICAgICAgICAgICAgICAgcyA9IFcoKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICBzID0gSSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIkRPTUV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgICBzID0gbmV3IEcodC5tZXNzYWdlLCB0Lm5hbWUpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJBcnJheUJ1ZmZlclwiOlxuICAgICAgICAgICAgY2FzZSBcIlNoYXJlZEFycmF5QnVmZmVyXCI6XG4gICAgICAgICAgICAgIHMgPSBuID8gbmV3IFBsYWNlaG9sZGVyKHQsIG0pIDogY2xvbmVCdWZmZXIodCwgZSwgbSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIkRhdGFWaWV3XCI6XG4gICAgICAgICAgICBjYXNlIFwiSW50OEFycmF5XCI6XG4gICAgICAgICAgICBjYXNlIFwiVWludDhBcnJheVwiOlxuICAgICAgICAgICAgY2FzZSBcIlVpbnQ4Q2xhbXBlZEFycmF5XCI6XG4gICAgICAgICAgICBjYXNlIFwiSW50MTZBcnJheVwiOlxuICAgICAgICAgICAgY2FzZSBcIlVpbnQxNkFycmF5XCI6XG4gICAgICAgICAgICBjYXNlIFwiSW50MzJBcnJheVwiOlxuICAgICAgICAgICAgY2FzZSBcIlVpbnQzMkFycmF5XCI6XG4gICAgICAgICAgICBjYXNlIFwiRmxvYXQxNkFycmF5XCI6XG4gICAgICAgICAgICBjYXNlIFwiRmxvYXQzMkFycmF5XCI6XG4gICAgICAgICAgICBjYXNlIFwiRmxvYXQ2NEFycmF5XCI6XG4gICAgICAgICAgICBjYXNlIFwiQmlnSW50NjRBcnJheVwiOlxuICAgICAgICAgICAgY2FzZSBcIkJpZ1VpbnQ2NEFycmF5XCI6XG4gICAgICAgICAgICAgIGggPSBcIkRhdGFWaWV3XCIgPT09IG0gPyB0LmJ5dGVMZW5ndGggOiB0Lmxlbmd0aDtcbiAgICAgICAgICAgICAgcyA9IG4gPyBuZXcgUGxhY2Vob2xkZXIodCwgbSwge1xuICAgICAgICAgICAgICAgIG9mZnNldDogdC5ieXRlT2Zmc2V0LFxuICAgICAgICAgICAgICAgIGxlbmd0aDogaFxuICAgICAgICAgICAgICB9KSA6IGNsb25lVmlldyh0LCBtLCB0LmJ5dGVPZmZzZXQsIGgsIGUpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJET01RdWFkXCI6XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcyA9IG5ldyBET01RdWFkKHN0cnVjdHVyZWRDbG9uZUludGVybmFsKHQucDEsIGUsIG4pLCBzdHJ1Y3R1cmVkQ2xvbmVJbnRlcm5hbCh0LnAyLCBlLCBuKSwgc3RydWN0dXJlZENsb25lSW50ZXJuYWwodC5wMywgZSwgbiksIHN0cnVjdHVyZWRDbG9uZUludGVybmFsKHQucDQsIGUsIG4pKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHMgPSB0cnlOYXRpdmVSZXN0cmljdGVkU3RydWN0dXJlZENsb25lKHQsIG0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIkZpbGVcIjpcbiAgICAgICAgICAgICAgaWYgKGh0KSB0cnkge1xuICAgICAgICAgICAgICAgIHMgPSBodCh0KTtcbiAgICAgICAgICAgICAgICB2KHMpICE9PSBtICYmIChzID0gdm9pZCAwKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAodCkge31cbiAgICAgICAgICAgICAgaWYgKCFzKSB0cnkge1xuICAgICAgICAgICAgICAgIHMgPSBuZXcgRmlsZShbdF0sIHQubmFtZSwgdCk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKHQpIHt9XG4gICAgICAgICAgICAgIHMgfHwgdGhyb3dVbnBvbHlmaWxsYWJsZShtKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiRmlsZUxpc3RcIjpcbiAgICAgICAgICAgICAgaWYgKGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIHQ7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIHQgPSBuZXcgYS5EYXRhVHJhbnNmZXIoKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB0ID0gbmV3IGEuQ2xpcGJvYXJkRXZlbnQoXCJcIikuY2xpcGJvYXJkRGF0YTtcbiAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKHQpIHt9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0ICYmIHQuaXRlbXMgJiYgdC5maWxlcyA/IHQgOiBudWxsO1xuICAgICAgICAgICAgICB9KCkpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGMgPSAwLCBoID0gUyh0KTsgYyA8IGg7IGMrKykgbC5pdGVtcy5hZGQoc3RydWN0dXJlZENsb25lSW50ZXJuYWwodFtjXSwgZSwgbikpO1xuICAgICAgICAgICAgICAgIHMgPSBsLmZpbGVzO1xuICAgICAgICAgICAgICB9IGVsc2UgcyA9IHRyeU5hdGl2ZVJlc3RyaWN0ZWRTdHJ1Y3R1cmVkQ2xvbmUodCwgbSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIkltYWdlRGF0YVwiOlxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHMgPSBuZXcgSW1hZ2VEYXRhKHN0cnVjdHVyZWRDbG9uZUludGVybmFsKHQuZGF0YSwgZSwgbiksIHQud2lkdGgsIHQuaGVpZ2h0LCB7XG4gICAgICAgICAgICAgICAgICBjb2xvclNwYWNlOiB0LmNvbG9yU3BhY2VcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHMgPSB0cnlOYXRpdmVSZXN0cmljdGVkU3RydWN0dXJlZENsb25lKHQsIG0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgaWYgKGh0KSBzID0gaHQodCk7ZWxzZSBzd2l0Y2ggKG0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwiQmlnSW50XCI6XG4gICAgICAgICAgICAgICAgICBzID0gayh0LnZhbHVlT2YoKSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiQm9vbGVhblwiOlxuICAgICAgICAgICAgICAgICAgcyA9IGsodHQodCkpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIk51bWJlclwiOlxuICAgICAgICAgICAgICAgICAgcyA9IGsoZXQodCkpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIlN0cmluZ1wiOlxuICAgICAgICAgICAgICAgICAgcyA9IGsobnQodCkpO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIkRhdGVcIjpcbiAgICAgICAgICAgICAgICAgIHMgPSBuZXcgUihpdCh0KSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiQmxvYlwiOlxuICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcyA9IHQuc2xpY2UoMCwgdC5zaXplLCB0LnR5cGUpO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAodCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvd1VucG9seWZpbGxhYmxlKG0pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIkRPTVBvaW50XCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcIkRPTVBvaW50UmVhZE9ubHlcIjpcbiAgICAgICAgICAgICAgICAgIGkgPSBhW21dO1xuICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcyA9IGkuZnJvbVBvaW50ID8gaS5mcm9tUG9pbnQodCkgOiBuZXcgaSh0LngsIHQueSwgdC56LCB0LncpO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAodCkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvd1VucG9seWZpbGxhYmxlKG0pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIkRPTVJlY3RcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiRE9NUmVjdFJlYWRPbmx5XCI6XG4gICAgICAgICAgICAgICAgICBpID0gYVttXTtcbiAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHMgPSBpLmZyb21SZWN0ID8gaS5mcm9tUmVjdCh0KSA6IG5ldyBpKHQueCwgdC55LCB0LndpZHRoLCB0LmhlaWdodCk7XG4gICAgICAgICAgICAgICAgICB9IGNhdGNoICh0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93VW5wb2x5ZmlsbGFibGUobSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiRE9NTWF0cml4XCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcIkRPTU1hdHJpeFJlYWRPbmx5XCI6XG4gICAgICAgICAgICAgICAgICBpID0gYVttXTtcbiAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHMgPSBpLmZyb21NYXRyaXggPyBpLmZyb21NYXRyaXgodCkgOiBuZXcgaSh0KTtcbiAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3dVbnBvbHlmaWxsYWJsZShtKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJBdWRpb0RhdGFcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiVmlkZW9GcmFtZVwiOlxuICAgICAgICAgICAgICAgICAgZCh0LmNsb25lKSB8fCB0aHJvd1VucG9seWZpbGxhYmxlKG0pO1xuICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcyA9IHQuY2xvbmUoKTtcbiAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3dVbmNsb25lYWJsZShtKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJDcm9wVGFyZ2V0XCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcIkNyeXB0b0tleVwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJGaWxlU3lzdGVtRGlyZWN0b3J5SGFuZGxlXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcIkZpbGVTeXN0ZW1GaWxlSGFuZGxlXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcIkZpbGVTeXN0ZW1IYW5kbGVcIjpcbiAgICAgICAgICAgICAgICBjYXNlIFwiR1BVQ29tcGlsYXRpb25JbmZvXCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcIkdQVUNvbXBpbGF0aW9uTWVzc2FnZVwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJJbWFnZUJpdG1hcFwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJSVENDZXJ0aWZpY2F0ZVwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJXZWJBc3NlbWJseS5Nb2R1bGVcIjpcbiAgICAgICAgICAgICAgICAgIHRocm93VW5wb2x5ZmlsbGFibGUobSk7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIHRocm93VW5jbG9uZWFibGUobSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgSyhlLCB0LCBzKTtcbiAgICAgICAgICBzd2l0Y2ggKG0pIHtcbiAgICAgICAgICAgIGNhc2UgXCJBcnJheVwiOlxuICAgICAgICAgICAgY2FzZSBcIk9iamVjdFwiOlxuICAgICAgICAgICAgICB1ID0gUSh0KTtcbiAgICAgICAgICAgICAgZm9yIChjID0gMCwgaCA9IFModSk7IGMgPCBoOyBjKyspIHtcbiAgICAgICAgICAgICAgICBwID0gdVtjXTtcbiAgICAgICAgICAgICAgICBBKHMsIHAsIHN0cnVjdHVyZWRDbG9uZUludGVybmFsKHRbcF0sIGUsIG4pKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJNYXBcIjpcbiAgICAgICAgICAgICAgdC5mb3JFYWNoKGZ1bmN0aW9uICh0LCBpKSB7XG4gICAgICAgICAgICAgICAgSyhzLCBzdHJ1Y3R1cmVkQ2xvbmVJbnRlcm5hbChpLCBlLCBuKSwgc3RydWN0dXJlZENsb25lSW50ZXJuYWwodCwgZSwgbikpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiU2V0XCI6XG4gICAgICAgICAgICAgIHQuZm9yRWFjaChmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgICAgIEoocywgc3RydWN0dXJlZENsb25lSW50ZXJuYWwodCwgZSwgbikpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiRXJyb3JcIjpcbiAgICAgICAgICAgICAgXyhzLCBcIm1lc3NhZ2VcIiwgc3RydWN0dXJlZENsb25lSW50ZXJuYWwodC5tZXNzYWdlLCBlLCBuKSk7XG4gICAgICAgICAgICAgIHkodCwgXCJjYXVzZVwiKSAmJiBfKHMsIFwiY2F1c2VcIiwgc3RydWN0dXJlZENsb25lSW50ZXJuYWwodC5jYXVzZSwgZSwgbikpO1xuICAgICAgICAgICAgICBcIkFnZ3JlZ2F0ZUVycm9yXCIgPT0gciAmJiAocy5lcnJvcnMgPSBzdHJ1Y3R1cmVkQ2xvbmVJbnRlcm5hbCh0LmVycm9ycywgZSwgbikpO1xuICAgICAgICAgICAgY2FzZSBcIkRPTUV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgICBUICYmIF8ocywgXCJzdGFja1wiLCBzdHJ1Y3R1cmVkQ2xvbmVJbnRlcm5hbCh0LnN0YWNrLCBlLCBuKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBzO1xuICAgICAgICB9LFxuICAgICAgICByZXBsYWNlUGxhY2Vob2xkZXJzID0gZnVuY3Rpb24gcmVwbGFjZVBsYWNlaG9sZGVycyh0LCBlKSB7XG4gICAgICAgICAgaWYgKCFmKHQpKSByZXR1cm4gdDtcbiAgICAgICAgICBpZiAoJChlLCB0KSkgcmV0dXJuIFgoZSwgdCk7XG4gICAgICAgICAgdmFyIG4sIGksIHIsIHMsIGEsIG8sIGwsIGM7XG4gICAgICAgICAgaWYgKHQgaW5zdGFuY2VvZiBQbGFjZWhvbGRlcikge1xuICAgICAgICAgICAgbiA9IHQudHlwZTtcbiAgICAgICAgICAgIGkgPSB0Lm9iamVjdDtcbiAgICAgICAgICAgIHN3aXRjaCAobikge1xuICAgICAgICAgICAgICBjYXNlIFwiQXJyYXlCdWZmZXJcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIlNoYXJlZEFycmF5QnVmZmVyXCI6XG4gICAgICAgICAgICAgICAgYyA9IGNsb25lQnVmZmVyKGksIGUsIG4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFwiRGF0YVZpZXdcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIkludDhBcnJheVwiOlxuICAgICAgICAgICAgICBjYXNlIFwiVWludDhBcnJheVwiOlxuICAgICAgICAgICAgICBjYXNlIFwiVWludDhDbGFtcGVkQXJyYXlcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIkludDE2QXJyYXlcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIlVpbnQxNkFycmF5XCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJJbnQzMkFycmF5XCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJVaW50MzJBcnJheVwiOlxuICAgICAgICAgICAgICBjYXNlIFwiRmxvYXQxNkFycmF5XCI6XG4gICAgICAgICAgICAgIGNhc2UgXCJGbG9hdDMyQXJyYXlcIjpcbiAgICAgICAgICAgICAgY2FzZSBcIkZsb2F0NjRBcnJheVwiOlxuICAgICAgICAgICAgICBjYXNlIFwiQmlnSW50NjRBcnJheVwiOlxuICAgICAgICAgICAgICBjYXNlIFwiQmlnVWludDY0QXJyYXlcIjpcbiAgICAgICAgICAgICAgICByID0gdC5tZXRhZGF0YTtcbiAgICAgICAgICAgICAgICBjID0gY2xvbmVWaWV3KGksIG4sIHIub2Zmc2V0LCByLmxlbmd0aCwgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHN3aXRjaCAodih0KSkge1xuICAgICAgICAgICAgY2FzZSBcIkFycmF5XCI6XG4gICAgICAgICAgICBjYXNlIFwiT2JqZWN0XCI6XG4gICAgICAgICAgICAgIG8gPSBRKHQpO1xuICAgICAgICAgICAgICBmb3IgKHMgPSAwLCBhID0gUyhvKTsgcyA8IGE7IHMrKykgdFtsID0gb1tzXV0gPSByZXBsYWNlUGxhY2Vob2xkZXJzKHRbbF0sIGUpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJNYXBcIjpcbiAgICAgICAgICAgICAgYyA9IG5ldyBWKCk7XG4gICAgICAgICAgICAgIHQuZm9yRWFjaChmdW5jdGlvbiAodCwgbikge1xuICAgICAgICAgICAgICAgIEsoYywgcmVwbGFjZVBsYWNlaG9sZGVycyhuLCBlKSwgcmVwbGFjZVBsYWNlaG9sZGVycyh0LCBlKSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJTZXRcIjpcbiAgICAgICAgICAgICAgYyA9IG5ldyBZKCk7XG4gICAgICAgICAgICAgIHQuZm9yRWFjaChmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgICAgIEooYywgcmVwbGFjZVBsYWNlaG9sZGVycyh0LCBlKSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJFcnJvclwiOlxuICAgICAgICAgICAgICB0Lm1lc3NhZ2UgPSByZXBsYWNlUGxhY2Vob2xkZXJzKHQubWVzc2FnZSwgZSk7XG4gICAgICAgICAgICAgIHkodCwgXCJjYXVzZVwiKSAmJiAodC5jYXVzZSA9IHJlcGxhY2VQbGFjZWhvbGRlcnModC5jYXVzZSwgZSkpO1xuICAgICAgICAgICAgICBcIkFnZ3JlZ2F0ZUVycm9yXCIgPT0gdC5uYW1lICYmICh0LmVycm9ycyA9IHJlcGxhY2VQbGFjZWhvbGRlcnModC5lcnJvcnMsIGUpKTtcbiAgICAgICAgICAgIGNhc2UgXCJET01FeGNlcHRpb25cIjpcbiAgICAgICAgICAgICAgVCAmJiAodC5zdGFjayA9IHJlcGxhY2VQbGFjZWhvbGRlcnModC5zdGFjaywgZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBLKGUsIHQsIGMgfHwgdCk7XG4gICAgICAgICAgcmV0dXJuIGMgfHwgdDtcbiAgICAgICAgfTtcbiAgICAgIHMoe1xuICAgICAgICBnbG9iYWw6ICEwLFxuICAgICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgICAgc2hhbTogIVAsXG4gICAgICAgIGZvcmNlZDogbHRcbiAgICAgIH0sIHtcbiAgICAgICAgc3RydWN0dXJlZENsb25lOiBmdW5jdGlvbiBzdHJ1Y3R1cmVkQ2xvbmUodCkge1xuICAgICAgICAgIHZhciBlLFxuICAgICAgICAgICAgbixcbiAgICAgICAgICAgIGkgPSBFKGFyZ3VtZW50cy5sZW5ndGgsIDEpID4gMSAmJiAhcChhcmd1bWVudHNbMV0pID8gYihhcmd1bWVudHNbMV0pIDogdm9pZCAwLFxuICAgICAgICAgICAgciA9IGkgPyBpLnRyYW5zZmVyIDogdm9pZCAwLFxuICAgICAgICAgICAgcyA9ICExO1xuICAgICAgICAgIGlmICh2b2lkIDAgIT09IHIpIHtcbiAgICAgICAgICAgIG4gPSBmdW5jdGlvbiAodCwgZSkge1xuICAgICAgICAgICAgICBpZiAoIWYodCkpIHRocm93IEIoXCJUcmFuc2ZlciBvcHRpb24gY2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIHNlcXVlbmNlXCIpO1xuICAgICAgICAgICAgICB2YXIgbiA9IFtdO1xuICAgICAgICAgICAgICBtKHQsIGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgWihuLCBiKHQpKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGZvciAodmFyIGksIHIsIHMsIG8sIGwsIGMgPSAwLCBoID0gUyhuKSwgcCA9IFtdOyBjIDwgaDspIHtcbiAgICAgICAgICAgICAgICBpID0gbltjKytdO1xuICAgICAgICAgICAgICAgIGlmIChcIkFycmF5QnVmZmVyXCIgIT09IChyID0gdihpKSkpIHtcbiAgICAgICAgICAgICAgICAgIGlmICgkKGUsIGkpKSB0aHJvdyBuZXcgRyhcIkR1cGxpY2F0ZSB0cmFuc2ZlcmFibGVcIiwgc3QpO1xuICAgICAgICAgICAgICAgICAgaWYgKFApIG8gPSBvdChpLCB7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZmVyOiBbaV1cbiAgICAgICAgICAgICAgICAgIH0pO2Vsc2Ugc3dpdGNoIChyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJJbWFnZUJpdG1hcFwiOlxuICAgICAgICAgICAgICAgICAgICAgIHMgPSBhLk9mZnNjcmVlbkNhbnZhcztcbiAgICAgICAgICAgICAgICAgICAgICB1KHMpIHx8IHRocm93VW5wb2x5ZmlsbGFibGUociwgYXQpO1xuICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAobCA9IG5ldyBzKGkud2lkdGgsIGkuaGVpZ2h0KSkuZ2V0Q29udGV4dChcImJpdG1hcHJlbmRlcmVyXCIpLnRyYW5zZmVyRnJvbUltYWdlQml0bWFwKGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbyA9IGwudHJhbnNmZXJUb0ltYWdlQml0bWFwKCk7XG4gICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAodCkge31cbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcIkF1ZGlvRGF0YVwiOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiVmlkZW9GcmFtZVwiOlxuICAgICAgICAgICAgICAgICAgICAgIGQoaS5jbG9uZSkgJiYgZChpLmNsb3NlKSB8fCB0aHJvd1VucG9seWZpbGxhYmxlKHIsIGF0KTtcbiAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbyA9IGkuY2xvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGkuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoICh0KSB7fVxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiTWVkaWFTb3VyY2VIYW5kbGVcIjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcIk1lc3NhZ2VQb3J0XCI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJPZmZzY3JlZW5DYW52YXNcIjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcIlJlYWRhYmxlU3RyZWFtXCI6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJUcmFuc2Zvcm1TdHJlYW1cIjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcIldyaXRhYmxlU3RyZWFtXCI6XG4gICAgICAgICAgICAgICAgICAgICAgdGhyb3dVbnBvbHlmaWxsYWJsZShyLCBhdCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBpZiAodm9pZCAwID09PSBvKSB0aHJvdyBuZXcgRyhcIlRoaXMgb2JqZWN0IGNhbm5vdCBiZSB0cmFuc2ZlcnJlZDogXCIgKyByLCBzdCk7XG4gICAgICAgICAgICAgICAgICBLKGUsIGksIG8pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBaKHAsIGkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBwO1xuICAgICAgICAgICAgfShyLCBlID0gbmV3IFYoKSk7XG4gICAgICAgICAgICBzID0gISFTKG4pO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgbyA9IHN0cnVjdHVyZWRDbG9uZUludGVybmFsKHQsIGUsIHMpO1xuICAgICAgICAgIGlmIChzKSB7XG4gICAgICAgICAgICAhZnVuY3Rpb24gKHQsIGUpIHtcbiAgICAgICAgICAgICAgZm9yICh2YXIgbiwgaSwgciA9IDAsIHMgPSBTKHQpOyByIDwgczspIHtcbiAgICAgICAgICAgICAgICBuID0gdFtyKytdO1xuICAgICAgICAgICAgICAgIGlmICgkKGUsIG4pKSB0aHJvdyBuZXcgRyhcIkR1cGxpY2F0ZSB0cmFuc2ZlcmFibGVcIiwgc3QpO1xuICAgICAgICAgICAgICAgIGlmIChQKSBpID0gb3Qobiwge1xuICAgICAgICAgICAgICAgICAgdHJhbnNmZXI6IFtuXVxuICAgICAgICAgICAgICAgIH0pO2Vsc2Uge1xuICAgICAgICAgICAgICAgICAgZChuLnRyYW5zZmVyKSB8fCB0aHJvd1VucG9seWZpbGxhYmxlKFwiQXJyYXlCdWZmZXJcIiwgYXQpO1xuICAgICAgICAgICAgICAgICAgaSA9IG4udHJhbnNmZXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgSyhlLCBuLCBpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfShyLCBlID0gbmV3IFYoKSk7XG4gICAgICAgICAgICBvID0gcmVwbGFjZVBsYWNlaG9sZGVycyhvLCBlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG87XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICB2YXIgaSA9IG4oMTQpLFxuICAgICAgICByID0gbig3KSxcbiAgICAgICAgcyA9IG4oMjEpLFxuICAgICAgICBhID0gbig3OCksXG4gICAgICAgIG8gPSBuKDI0KSxcbiAgICAgICAgbCA9IG4oNTEpLFxuICAgICAgICBub29wID0gZnVuY3Rpb24gbm9vcCgpIHt9LFxuICAgICAgICBjID0gW10sXG4gICAgICAgIGggPSBvKFwiUmVmbGVjdFwiLCBcImNvbnN0cnVjdFwiKSxcbiAgICAgICAgZCA9IC9eXFxzKig/OmNsYXNzfGZ1bmN0aW9uKVxcYi8sXG4gICAgICAgIHUgPSBpKGQuZXhlYyksXG4gICAgICAgIHAgPSAhZC5leGVjKG5vb3ApLFxuICAgICAgICBmID0gZnVuY3Rpb24gaXNDb25zdHJ1Y3Rvcih0KSB7XG4gICAgICAgICAgaWYgKCFzKHQpKSByZXR1cm4gITE7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGgobm9vcCwgYywgdCk7XG4gICAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgICAgfSBjYXRjaCAodCkge1xuICAgICAgICAgICAgcmV0dXJuICExO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZyA9IGZ1bmN0aW9uIGlzQ29uc3RydWN0b3IodCkge1xuICAgICAgICAgIGlmICghcyh0KSkgcmV0dXJuICExO1xuICAgICAgICAgIHN3aXRjaCAoYSh0KSkge1xuICAgICAgICAgICAgY2FzZSBcIkFzeW5jRnVuY3Rpb25cIjpcbiAgICAgICAgICAgIGNhc2UgXCJHZW5lcmF0b3JGdW5jdGlvblwiOlxuICAgICAgICAgICAgY2FzZSBcIkFzeW5jR2VuZXJhdG9yRnVuY3Rpb25cIjpcbiAgICAgICAgICAgICAgcmV0dXJuICExO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIHAgfHwgISF1KGQsIGwodCkpO1xuICAgICAgICAgIH0gY2F0Y2ggKHQpIHtcbiAgICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICBnLnNoYW0gPSAhMDtcbiAgICAgIHQuZXhwb3J0cyA9ICFoIHx8IHIoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdDtcbiAgICAgICAgcmV0dXJuIGYoZi5jYWxsKSB8fCAhZihPYmplY3QpIHx8ICFmKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0ID0gITA7XG4gICAgICAgIH0pIHx8IHQ7XG4gICAgICB9KSA/IGcgOiBmO1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICB2YXIgaSA9IG4oOTkpLFxuICAgICAgICByID0gbig4KSxcbiAgICAgICAgcyA9IG4oNDcpLFxuICAgICAgICBhID0gbigzMiksXG4gICAgICAgIG8gPSBuKDE1NCksXG4gICAgICAgIGwgPSBuKDY0KSxcbiAgICAgICAgYyA9IG4oMjUpLFxuICAgICAgICBoID0gbigxNTYpLFxuICAgICAgICBkID0gbigxNTcpLFxuICAgICAgICB1ID0gbigxMzkpLFxuICAgICAgICBwID0gVHlwZUVycm9yLFxuICAgICAgICBSZXN1bHQgPSBmdW5jdGlvbiBSZXN1bHQodCwgZSkge1xuICAgICAgICAgIHRoaXMuc3RvcHBlZCA9IHQ7XG4gICAgICAgICAgdGhpcy5yZXN1bHQgPSBlO1xuICAgICAgICB9LFxuICAgICAgICBmID0gUmVzdWx0LnByb3RvdHlwZTtcbiAgICAgIHQuZXhwb3J0cyA9IGZ1bmN0aW9uICh0LCBlLCBuKSB7XG4gICAgICAgIHZhciBnLFxuICAgICAgICAgIG0sXG4gICAgICAgICAgYixcbiAgICAgICAgICB2LFxuICAgICAgICAgIHksXG4gICAgICAgICAgQSxcbiAgICAgICAgICBfLFxuICAgICAgICAgIFMgPSBuICYmIG4udGhhdCxcbiAgICAgICAgICBFID0gISghbiB8fCAhbi5BU19FTlRSSUVTKSxcbiAgICAgICAgICB4ID0gISghbiB8fCAhbi5JU19SRUNPUkQpLFxuICAgICAgICAgIHcgPSAhKCFuIHx8ICFuLklTX0lURVJBVE9SKSxcbiAgICAgICAgICBDID0gISghbiB8fCAhbi5JTlRFUlJVUFRFRCksXG4gICAgICAgICAgVCA9IGkoZSwgUyksXG4gICAgICAgICAgc3RvcCA9IGZ1bmN0aW9uIHN0b3AodCkge1xuICAgICAgICAgICAgZyAmJiB1KGcsIFwibm9ybWFsXCIsIHQpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQoITAsIHQpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgY2FsbEZuID0gZnVuY3Rpb24gY2FsbEZuKHQpIHtcbiAgICAgICAgICAgIGlmIChFKSB7XG4gICAgICAgICAgICAgIHModCk7XG4gICAgICAgICAgICAgIHJldHVybiBDID8gVCh0WzBdLCB0WzFdLCBzdG9wKSA6IFQodFswXSwgdFsxXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gQyA/IFQodCwgc3RvcCkgOiBUKHQpO1xuICAgICAgICAgIH07XG4gICAgICAgIGlmICh4KSBnID0gdC5pdGVyYXRvcjtlbHNlIGlmICh3KSBnID0gdDtlbHNlIHtcbiAgICAgICAgICBpZiAoIShtID0gZCh0KSkpIHRocm93IHAoYSh0KSArIFwiIGlzIG5vdCBpdGVyYWJsZVwiKTtcbiAgICAgICAgICBpZiAobyhtKSkge1xuICAgICAgICAgICAgZm9yIChiID0gMCwgdiA9IGwodCk7IHYgPiBiOyBiKyspIGlmICgoeSA9IGNhbGxGbih0W2JdKSkgJiYgYyhmLCB5KSkgcmV0dXJuIHk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlc3VsdCghMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGcgPSBoKHQsIG0pO1xuICAgICAgICB9XG4gICAgICAgIEEgPSB4ID8gdC5uZXh0IDogZy5uZXh0O1xuICAgICAgICBmb3IgKDsgIShfID0gcihBLCBnKSkuZG9uZTspIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgeSA9IGNhbGxGbihfLnZhbHVlKTtcbiAgICAgICAgICB9IGNhdGNoICh0KSB7XG4gICAgICAgICAgICB1KGcsIFwidGhyb3dcIiwgdCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChcIm9iamVjdFwiID09IHR5cGVvZiB5ICYmIHkgJiYgYyhmLCB5KSkgcmV0dXJuIHk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBSZXN1bHQoITEpO1xuICAgICAgfTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGkgPSBuKDM0KSxcbiAgICAgICAgciA9IG4oMTU1KSxcbiAgICAgICAgcyA9IGkoXCJpdGVyYXRvclwiKSxcbiAgICAgICAgYSA9IEFycmF5LnByb3RvdHlwZTtcbiAgICAgIHQuZXhwb3J0cyA9IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHJldHVybiB2b2lkIDAgIT09IHQgJiYgKHIuQXJyYXkgPT09IHQgfHwgYVtzXSA9PT0gdCk7XG4gICAgICB9O1xuICAgIH0sIHQgPT4ge1xuICAgICAgdC5leHBvcnRzID0ge307XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIHZhciBpID0gbig4KSxcbiAgICAgICAgciA9IG4oMzEpLFxuICAgICAgICBzID0gbig0NyksXG4gICAgICAgIGEgPSBuKDMyKSxcbiAgICAgICAgbyA9IG4oMTU3KSxcbiAgICAgICAgbCA9IFR5cGVFcnJvcjtcbiAgICAgIHQuZXhwb3J0cyA9IGZ1bmN0aW9uICh0LCBlKSB7XG4gICAgICAgIHZhciBuID0gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBvKHQpIDogZTtcbiAgICAgICAgaWYgKHIobikpIHJldHVybiBzKGkobiwgdCkpO1xuICAgICAgICB0aHJvdyBsKGEodCkgKyBcIiBpcyBub3QgaXRlcmFibGVcIik7XG4gICAgICB9O1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICB2YXIgaSA9IG4oNzgpLFxuICAgICAgICByID0gbigzMCksXG4gICAgICAgIHMgPSBuKDE3KSxcbiAgICAgICAgYSA9IG4oMTU1KSxcbiAgICAgICAgbyA9IG4oMzQpKFwiaXRlcmF0b3JcIik7XG4gICAgICB0LmV4cG9ydHMgPSBmdW5jdGlvbiAodCkge1xuICAgICAgICBpZiAoIXModCkpIHJldHVybiByKHQsIG8pIHx8IHIodCwgXCJAQGl0ZXJhdG9yXCIpIHx8IGFbaSh0KV07XG4gICAgICB9O1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgICAgdmFyIGkgPSBuKDE4KSxcbiAgICAgICAgciA9IG4oNDUpLFxuICAgICAgICBzID0gbigxMSk7XG4gICAgICB0LmV4cG9ydHMgPSBmdW5jdGlvbiAodCwgZSwgbikge1xuICAgICAgICB2YXIgYSA9IGkoZSk7XG4gICAgICAgIGEgaW4gdCA/IHIuZih0LCBhLCBzKDAsIG4pKSA6IHRbYV0gPSBuO1xuICAgICAgfTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGkgPSBuKDgpLFxuICAgICAgICByID0gbigzOSksXG4gICAgICAgIHMgPSBuKDI1KSxcbiAgICAgICAgYSA9IG4oMTYwKSxcbiAgICAgICAgbyA9IFJlZ0V4cC5wcm90b3R5cGU7XG4gICAgICB0LmV4cG9ydHMgPSBmdW5jdGlvbiAodCkge1xuICAgICAgICB2YXIgZSA9IHQuZmxhZ3M7XG4gICAgICAgIHJldHVybiB2b2lkIDAgIT09IGUgfHwgXCJmbGFnc1wiIGluIG8gfHwgcih0LCBcImZsYWdzXCIpIHx8ICFzKG8sIHQpID8gZSA6IGkoYSwgdCk7XG4gICAgICB9O1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgICAgdmFyIGkgPSBuKDQ3KTtcbiAgICAgIHQuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHQgPSBpKHRoaXMpLFxuICAgICAgICAgIGUgPSBcIlwiO1xuICAgICAgICB0Lmhhc0luZGljZXMgJiYgKGUgKz0gXCJkXCIpO1xuICAgICAgICB0Lmdsb2JhbCAmJiAoZSArPSBcImdcIik7XG4gICAgICAgIHQuaWdub3JlQ2FzZSAmJiAoZSArPSBcImlcIik7XG4gICAgICAgIHQubXVsdGlsaW5lICYmIChlICs9IFwibVwiKTtcbiAgICAgICAgdC5kb3RBbGwgJiYgKGUgKz0gXCJzXCIpO1xuICAgICAgICB0LnVuaWNvZGUgJiYgKGUgKz0gXCJ1XCIpO1xuICAgICAgICB0LnVuaWNvZGVTZXRzICYmIChlICs9IFwidlwiKTtcbiAgICAgICAgdC5zdGlja3kgJiYgKGUgKz0gXCJ5XCIpO1xuICAgICAgICByZXR1cm4gZTtcbiAgICAgIH07XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIHZhciBpID0gbigxNCksXG4gICAgICAgIHIgPSBNYXAucHJvdG90eXBlO1xuICAgICAgdC5leHBvcnRzID0ge1xuICAgICAgICBNYXA6IE1hcCxcbiAgICAgICAgc2V0OiBpKHIuc2V0KSxcbiAgICAgICAgZ2V0OiBpKHIuZ2V0KSxcbiAgICAgICAgaGFzOiBpKHIuaGFzKSxcbiAgICAgICAgcmVtb3ZlOiBpKHIuZGVsZXRlKSxcbiAgICAgICAgcHJvdG86IHJcbiAgICAgIH07XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgdmFsdWU6ICEwXG4gICAgICB9KTtcbiAgICAgIGUuU2VyaWFsaXphYmxlRW1wdHkgPSBlLlByaW50QW5ub3RhdGlvblN0b3JhZ2UgPSBlLkFubm90YXRpb25TdG9yYWdlID0gdm9pZCAwO1xuICAgICAgbig4OSk7XG4gICAgICBuKDE0OCk7XG4gICAgICBuKDE1MSk7XG4gICAgICB2YXIgaSA9IG4oMSksXG4gICAgICAgIHIgPSBuKDE2MyksXG4gICAgICAgIHMgPSBuKDE2OSk7XG4gICAgICBjb25zdCBhID0gT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIG1hcDogbnVsbCxcbiAgICAgICAgaGFzaDogXCJcIixcbiAgICAgICAgdHJhbnNmZXJzOiB2b2lkIDBcbiAgICAgIH0pO1xuICAgICAgZS5TZXJpYWxpemFibGVFbXB0eSA9IGE7XG4gICAgICB2YXIgX3YgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfeSA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xuICAgICAgdmFyIF9BID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgICBjbGFzcyBBbm5vdGF0aW9uU3RvcmFnZSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLCBfQSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX3YsIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6ICExXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX3ksIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IG5ldyBNYXAoKVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMub25TZXRNb2RpZmllZCA9IG51bGw7XG4gICAgICAgICAgdGhpcy5vblJlc2V0TW9kaWZpZWQgPSBudWxsO1xuICAgICAgICAgIHRoaXMub25Bbm5vdGF0aW9uRWRpdG9yID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBnZXRWYWx1ZSh0LCBlKSB7XG4gICAgICAgICAgY29uc3QgbiA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfeSkuZ2V0KHQpO1xuICAgICAgICAgIHJldHVybiB2b2lkIDAgPT09IG4gPyBlIDogT2JqZWN0LmFzc2lnbihlLCBuKTtcbiAgICAgICAgfVxuICAgICAgICBnZXRSYXdWYWx1ZSh0KSB7XG4gICAgICAgICAgcmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfeSkuZ2V0KHQpO1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZSh0KSB7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF95KS5kZWxldGUodCk7XG4gICAgICAgICAgMCA9PT0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF95KS5zaXplICYmIHRoaXMucmVzZXRNb2RpZmllZCgpO1xuICAgICAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIHRoaXMub25Bbm5vdGF0aW9uRWRpdG9yKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHQgb2YgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF95KS52YWx1ZXMoKSkgaWYgKHQgaW5zdGFuY2VvZiByLkFubm90YXRpb25FZGl0b3IpIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMub25Bbm5vdGF0aW9uRWRpdG9yKG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzZXRWYWx1ZSh0LCBlKSB7XG4gICAgICAgICAgY29uc3QgbiA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfeSkuZ2V0KHQpO1xuICAgICAgICAgIGxldCBpID0gITE7XG4gICAgICAgICAgaWYgKHZvaWQgMCAhPT0gbikge1xuICAgICAgICAgICAgZm9yIChjb25zdCBbdCwgcl0gb2YgT2JqZWN0LmVudHJpZXMoZSkpIGlmIChuW3RdICE9PSByKSB7XG4gICAgICAgICAgICAgIGkgPSAhMDtcbiAgICAgICAgICAgICAgblt0XSA9IHI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGkgPSAhMDtcbiAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfeSkuc2V0KHQsIGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpICYmIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX0EsIF9BMikuY2FsbCh0aGlzKTtcbiAgICAgICAgICBlIGluc3RhbmNlb2Ygci5Bbm5vdGF0aW9uRWRpdG9yICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgdGhpcy5vbkFubm90YXRpb25FZGl0b3IgJiYgdGhpcy5vbkFubm90YXRpb25FZGl0b3IoZS5jb25zdHJ1Y3Rvci5fdHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgaGFzKHQpIHtcbiAgICAgICAgICByZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF95KS5oYXModCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0QWxsKCkge1xuICAgICAgICAgIHJldHVybiBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3kpLnNpemUgPiAwID8gKDAsIGkub2JqZWN0RnJvbU1hcCkoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF95KSkgOiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHNldEFsbCh0KSB7XG4gICAgICAgICAgZm9yIChjb25zdCBbZSwgbl0gb2YgT2JqZWN0LmVudHJpZXModCkpIHRoaXMuc2V0VmFsdWUoZSwgbik7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHNpemUoKSB7XG4gICAgICAgICAgcmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfeSkuc2l6ZTtcbiAgICAgICAgfVxuICAgICAgICByZXNldE1vZGlmaWVkKCkge1xuICAgICAgICAgIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3YpKSB7XG4gICAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX3YsICExKTtcbiAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgdGhpcy5vblJlc2V0TW9kaWZpZWQgJiYgdGhpcy5vblJlc2V0TW9kaWZpZWQoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHByaW50KCkge1xuICAgICAgICAgIHJldHVybiBuZXcgUHJpbnRBbm5vdGF0aW9uU3RvcmFnZSh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgc2VyaWFsaXphYmxlKCkge1xuICAgICAgICAgIGlmICgwID09PSBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3kpLnNpemUpIHJldHVybiBhO1xuICAgICAgICAgIGNvbnN0IHQgPSBuZXcgTWFwKCksXG4gICAgICAgICAgICBlID0gbmV3IHMuTXVybXVySGFzaDNfNjQoKSxcbiAgICAgICAgICAgIG4gPSBbXSxcbiAgICAgICAgICAgIGkgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIGxldCBvID0gITE7XG4gICAgICAgICAgZm9yIChjb25zdCBbbiwgc10gb2YgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF95KSkge1xuICAgICAgICAgICAgY29uc3QgYSA9IHMgaW5zdGFuY2VvZiByLkFubm90YXRpb25FZGl0b3IgPyBzLnNlcmlhbGl6ZSghMSwgaSkgOiBzO1xuICAgICAgICAgICAgaWYgKGEpIHtcbiAgICAgICAgICAgICAgdC5zZXQobiwgYSk7XG4gICAgICAgICAgICAgIGUudXBkYXRlKFwiXCIuY29uY2F0KG4sIFwiOlwiKS5jb25jYXQoSlNPTi5zdHJpbmdpZnkoYSkpKTtcbiAgICAgICAgICAgICAgbyB8fCAobyA9ICEhYS5iaXRtYXApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobykgZm9yIChjb25zdCBlIG9mIHQudmFsdWVzKCkpIGUuYml0bWFwICYmIG4ucHVzaChlLmJpdG1hcCk7XG4gICAgICAgICAgcmV0dXJuIHQuc2l6ZSA+IDAgPyB7XG4gICAgICAgICAgICBtYXA6IHQsXG4gICAgICAgICAgICBoYXNoOiBlLmhleGRpZ2VzdCgpLFxuICAgICAgICAgICAgdHJhbnNmZXJzOiBuXG4gICAgICAgICAgfSA6IGE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF9BMigpIHtcbiAgICAgICAgaWYgKCFfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3YpKSB7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF92LCAhMCk7XG4gICAgICAgICAgXCJmdW5jdGlvblwiID09IHR5cGVvZiB0aGlzLm9uU2V0TW9kaWZpZWQgJiYgdGhpcy5vblNldE1vZGlmaWVkKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGUuQW5ub3RhdGlvblN0b3JhZ2UgPSBBbm5vdGF0aW9uU3RvcmFnZTtcbiAgICAgIHZhciBfMiA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xuICAgICAgY2xhc3MgUHJpbnRBbm5vdGF0aW9uU3RvcmFnZSBleHRlbmRzIEFubm90YXRpb25TdG9yYWdlIHtcbiAgICAgICAgY29uc3RydWN0b3IodCkge1xuICAgICAgICAgIHN1cGVyKCk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgXzIsIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHZvaWQgMFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgbWFwOiBlLFxuICAgICAgICAgICAgICBoYXNoOiBuLFxuICAgICAgICAgICAgICB0cmFuc2ZlcnM6IGlcbiAgICAgICAgICAgIH0gPSB0LnNlcmlhbGl6YWJsZSxcbiAgICAgICAgICAgIHIgPSBzdHJ1Y3R1cmVkQ2xvbmUoZSwgbnVsbCk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF8yLCB7XG4gICAgICAgICAgICBtYXA6IHIsXG4gICAgICAgICAgICBoYXNoOiBuLFxuICAgICAgICAgICAgdHJhbnNmZXJzOiBpXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHByaW50KCkge1xuICAgICAgICAgICgwLCBpLnVucmVhY2hhYmxlKShcIlNob3VsZCBub3QgY2FsbCBQcmludEFubm90YXRpb25TdG9yYWdlLnByaW50XCIpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBzZXJpYWxpemFibGUoKSB7XG4gICAgICAgICAgcmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfMik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGUuUHJpbnRBbm5vdGF0aW9uU3RvcmFnZSA9IFByaW50QW5ub3RhdGlvblN0b3JhZ2U7XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgICB2YXIgX2NsYXNzMTI7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgdmFsdWU6ICEwXG4gICAgICB9KTtcbiAgICAgIGUuQW5ub3RhdGlvbkVkaXRvciA9IHZvaWQgMDtcbiAgICAgIG4oODkpO1xuICAgICAgbigyKTtcbiAgICAgIHZhciBpID0gbigxKSxcbiAgICAgICAgciA9IG4oMTY0KTtcbiAgICAgIHZhciBfUyA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xuICAgICAgdmFyIF9FID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICB2YXIgX3ggPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfdyA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xuICAgICAgdmFyIF9DID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICB2YXIgX1QgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfUCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xuICAgICAgdmFyIF9rID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICB2YXIgX00gPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfUiA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuICAgICAgdmFyIF9GID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgICB2YXIgX0kgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbiAgICAgIHZhciBfRCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuICAgICAgY2xhc3MgQW5ub3RhdGlvbkVkaXRvciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKF90NCkge1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLCBfRCk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9JKTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlTWV0aG9kSW5pdFNwZWModGhpcywgX0YpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLCBfUik7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX1MsIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6ICExXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX0UsIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfeCwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF93LCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLmZvY3VzaW4uYmluZCh0aGlzKVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9DLCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLmZvY3Vzb3V0LmJpbmQodGhpcylcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfVCwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogITFcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfUCwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogITFcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfaywge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogITFcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgXCJfdWlNYW5hZ2VyXCIsIG51bGwpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9NLCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBBbm5vdGF0aW9uRWRpdG9yLl96SW5kZXgrK1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuY29uc3RydWN0b3IgPT09IEFubm90YXRpb25FZGl0b3IgJiYgKDAsIGkudW5yZWFjaGFibGUpKFwiQ2Fubm90IGluaXRpYWxpemUgQW5ub3RhdGlvbkVkaXRvci5cIik7XG4gICAgICAgICAgdGhpcy5wYXJlbnQgPSBfdDQucGFyZW50O1xuICAgICAgICAgIHRoaXMuaWQgPSBfdDQuaWQ7XG4gICAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMuaGVpZ2h0ID0gbnVsbDtcbiAgICAgICAgICB0aGlzLnBhZ2VJbmRleCA9IF90NC5wYXJlbnQucGFnZUluZGV4O1xuICAgICAgICAgIHRoaXMubmFtZSA9IF90NC5uYW1lO1xuICAgICAgICAgIHRoaXMuZGl2ID0gbnVsbDtcbiAgICAgICAgICB0aGlzLl91aU1hbmFnZXIgPSBfdDQudWlNYW5hZ2VyO1xuICAgICAgICAgIHRoaXMuYW5ub3RhdGlvbkVsZW1lbnRJZCA9IG51bGw7XG4gICAgICAgICAgdGhpcy5fd2lsbEtlZXBBc3BlY3RSYXRpbyA9ICExO1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHJvdGF0aW9uOiBfZTQsXG4gICAgICAgICAgICByYXdEaW1zOiB7XG4gICAgICAgICAgICAgIHBhZ2VXaWR0aDogX24zLFxuICAgICAgICAgICAgICBwYWdlSGVpZ2h0OiBfcjMsXG4gICAgICAgICAgICAgIHBhZ2VYOiBfczQsXG4gICAgICAgICAgICAgIHBhZ2VZOiBfYTJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9ID0gdGhpcy5wYXJlbnQudmlld3BvcnQ7XG4gICAgICAgICAgdGhpcy5yb3RhdGlvbiA9IF9lNDtcbiAgICAgICAgICB0aGlzLnBhZ2VSb3RhdGlvbiA9ICgzNjAgKyBfZTQgLSB0aGlzLl91aU1hbmFnZXIudmlld1BhcmFtZXRlcnMucm90YXRpb24pICUgMzYwO1xuICAgICAgICAgIHRoaXMucGFnZURpbWVuc2lvbnMgPSBbX24zLCBfcjNdO1xuICAgICAgICAgIHRoaXMucGFnZVRyYW5zbGF0aW9uID0gW19zNCwgX2EyXTtcbiAgICAgICAgICBjb25zdCBbX28yLCBfbDJdID0gdGhpcy5wYXJlbnREaW1lbnNpb25zO1xuICAgICAgICAgIHRoaXMueCA9IF90NC54IC8gX28yO1xuICAgICAgICAgIHRoaXMueSA9IF90NC55IC8gX2wyO1xuICAgICAgICAgIHRoaXMuaXNBdHRhY2hlZFRvRE9NID0gITE7XG4gICAgICAgICAgdGhpcy5kZWxldGVkID0gITE7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGdldCBfZGVmYXVsdExpbmVDb2xvcigpIHtcbiAgICAgICAgICByZXR1cm4gKDAsIGkuc2hhZG93KSh0aGlzLCBcIl9kZWZhdWx0TGluZUNvbG9yXCIsIHRoaXMuX2NvbG9yTWFuYWdlci5nZXRIZXhDb2RlKFwiQ2FudmFzVGV4dFwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGRlbGV0ZUFubm90YXRpb25FbGVtZW50KHQpIHtcbiAgICAgICAgICBjb25zdCBlID0gbmV3IEZha2VFZGl0b3Ioe1xuICAgICAgICAgICAgaWQ6IHQucGFyZW50LmdldE5leHRJZCgpLFxuICAgICAgICAgICAgcGFyZW50OiB0LnBhcmVudCxcbiAgICAgICAgICAgIHVpTWFuYWdlcjogdC5fdWlNYW5hZ2VyXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgZS5hbm5vdGF0aW9uRWxlbWVudElkID0gdC5hbm5vdGF0aW9uRWxlbWVudElkO1xuICAgICAgICAgIGUuZGVsZXRlZCA9ICEwO1xuICAgICAgICAgIGUuX3VpTWFuYWdlci5hZGRUb0Fubm90YXRpb25TdG9yYWdlKGUpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBpbml0aWFsaXplKHQpIHt9XG4gICAgICAgIHN0YXRpYyB1cGRhdGVEZWZhdWx0UGFyYW1zKHQsIGUpIHt9XG4gICAgICAgIHN0YXRpYyBnZXQgZGVmYXVsdFByb3BlcnRpZXNUb1VwZGF0ZSgpIHtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHByb3BlcnRpZXNUb1VwZGF0ZSgpIHtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgYWRkQ29tbWFuZHModCkge1xuICAgICAgICAgIHRoaXMuX3VpTWFuYWdlci5hZGRDb21tYW5kcyh0KTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgY3VycmVudExheWVyKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl91aU1hbmFnZXIuY3VycmVudExheWVyO1xuICAgICAgICB9XG4gICAgICAgIHNldEluQmFja2dyb3VuZCgpIHtcbiAgICAgICAgICB0aGlzLmRpdi5zdHlsZS56SW5kZXggPSAwO1xuICAgICAgICB9XG4gICAgICAgIHNldEluRm9yZWdyb3VuZCgpIHtcbiAgICAgICAgICB0aGlzLmRpdi5zdHlsZS56SW5kZXggPSBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX00pO1xuICAgICAgICB9XG4gICAgICAgIHNldFBhcmVudCh0KSB7XG4gICAgICAgICAgaWYgKG51bGwgIT09IHQpIHtcbiAgICAgICAgICAgIHRoaXMucGFnZUluZGV4ID0gdC5wYWdlSW5kZXg7XG4gICAgICAgICAgICB0aGlzLnBhZ2VEaW1lbnNpb25zID0gdC5wYWdlRGltZW5zaW9ucztcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5wYXJlbnQgPSB0O1xuICAgICAgICB9XG4gICAgICAgIGZvY3VzaW4odCkge1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfVCkgPyBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1QsICExKSA6IHRoaXMucGFyZW50LnNldFNlbGVjdGVkKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGZvY3Vzb3V0KHQpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuaXNBdHRhY2hlZFRvRE9NKSByZXR1cm47XG4gICAgICAgICAgY29uc3QgZSA9IHQucmVsYXRlZFRhcmdldDtcbiAgICAgICAgICBpZiAoIShlICE9PSBudWxsICYmIGUgIT09IHZvaWQgMCAmJiBlLmNsb3Nlc3QoXCIjXCIuY29uY2F0KHRoaXMuaWQpKSkpIHtcbiAgICAgICAgICAgIHZhciBfdGhpcyRwYXJlbnQ7XG4gICAgICAgICAgICB0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAoKF90aGlzJHBhcmVudCA9IHRoaXMucGFyZW50KSA9PT0gbnVsbCB8fCBfdGhpcyRwYXJlbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJHBhcmVudC5pc011bHRpcGxlU2VsZWN0aW9uKSB8fCB0aGlzLmNvbW1pdE9yUmVtb3ZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbW1pdE9yUmVtb3ZlKCkge1xuICAgICAgICAgIHRoaXMuaXNFbXB0eSgpID8gdGhpcy5yZW1vdmUoKSA6IHRoaXMuY29tbWl0KCk7XG4gICAgICAgIH1cbiAgICAgICAgY29tbWl0KCkge1xuICAgICAgICAgIHRoaXMuYWRkVG9Bbm5vdGF0aW9uU3RvcmFnZSgpO1xuICAgICAgICB9XG4gICAgICAgIGFkZFRvQW5ub3RhdGlvblN0b3JhZ2UoKSB7XG4gICAgICAgICAgdGhpcy5fdWlNYW5hZ2VyLmFkZFRvQW5ub3RhdGlvblN0b3JhZ2UodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgZHJhZ3N0YXJ0KHQpIHtcbiAgICAgICAgICBjb25zdCBlID0gdGhpcy5wYXJlbnQuZGl2LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgIHRoaXMuc3RhcnRYID0gdC5jbGllbnRYIC0gZS54O1xuICAgICAgICAgIHRoaXMuc3RhcnRZID0gdC5jbGllbnRZIC0gZS55O1xuICAgICAgICAgIHQuZGF0YVRyYW5zZmVyLnNldERhdGEoXCJ0ZXh0L3BsYWluXCIsIHRoaXMuaWQpO1xuICAgICAgICAgIHQuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQgPSBcIm1vdmVcIjtcbiAgICAgICAgfVxuICAgICAgICBzZXRBdCh0LCBlLCBuLCBpKSB7XG4gICAgICAgICAgY29uc3QgW3IsIHNdID0gdGhpcy5wYXJlbnREaW1lbnNpb25zO1xuICAgICAgICAgIFtuLCBpXSA9IHRoaXMuc2NyZWVuVG9QYWdlVHJhbnNsYXRpb24obiwgaSk7XG4gICAgICAgICAgdGhpcy54ID0gKHQgKyBuKSAvIHI7XG4gICAgICAgICAgdGhpcy55ID0gKGUgKyBpKSAvIHM7XG4gICAgICAgICAgdGhpcy5maXhBbmRTZXRQb3NpdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIHRyYW5zbGF0ZSh0LCBlKSB7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfUiwgX1IyKS5jYWxsKHRoaXMsIHRoaXMucGFyZW50RGltZW5zaW9ucywgdCwgZSk7XG4gICAgICAgIH1cbiAgICAgICAgdHJhbnNsYXRlSW5QYWdlKHQsIGUpIHtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9SLCBfUjIpLmNhbGwodGhpcywgdGhpcy5wYWdlRGltZW5zaW9ucywgdCwgZSk7XG4gICAgICAgICAgdGhpcy5kaXYuc2Nyb2xsSW50b1ZpZXcoe1xuICAgICAgICAgICAgYmxvY2s6IFwibmVhcmVzdFwiXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZml4QW5kU2V0UG9zaXRpb24oKSB7XG4gICAgICAgICAgY29uc3QgW3QsIGVdID0gdGhpcy5wYWdlRGltZW5zaW9ucztcbiAgICAgICAgICBsZXQge1xuICAgICAgICAgICAgeDogbixcbiAgICAgICAgICAgIHk6IGksXG4gICAgICAgICAgICB3aWR0aDogcixcbiAgICAgICAgICAgIGhlaWdodDogc1xuICAgICAgICAgIH0gPSB0aGlzO1xuICAgICAgICAgIHIgKj0gdDtcbiAgICAgICAgICBzICo9IGU7XG4gICAgICAgICAgbiAqPSB0O1xuICAgICAgICAgIGkgKj0gZTtcbiAgICAgICAgICBzd2l0Y2ggKHRoaXMucm90YXRpb24pIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgbiA9IE1hdGgubWF4KDAsIE1hdGgubWluKHQgLSByLCBuKSk7XG4gICAgICAgICAgICAgIGkgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihlIC0gcywgaSkpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgOTA6XG4gICAgICAgICAgICAgIG4gPSBNYXRoLm1heCgwLCBNYXRoLm1pbih0IC0gcywgbikpO1xuICAgICAgICAgICAgICBpID0gTWF0aC5taW4oZSwgTWF0aC5tYXgociwgaSkpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMTgwOlxuICAgICAgICAgICAgICBuID0gTWF0aC5taW4odCwgTWF0aC5tYXgociwgbikpO1xuICAgICAgICAgICAgICBpID0gTWF0aC5taW4oZSwgTWF0aC5tYXgocywgaSkpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMjcwOlxuICAgICAgICAgICAgICBuID0gTWF0aC5taW4odCwgTWF0aC5tYXgocywgbikpO1xuICAgICAgICAgICAgICBpID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oZSAtIHIsIGkpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy54ID0gbiAvIHQ7XG4gICAgICAgICAgdGhpcy55ID0gaSAvIGU7XG4gICAgICAgICAgdGhpcy5kaXYuc3R5bGUubGVmdCA9IFwiXCIuY29uY2F0KCgxMDAgKiB0aGlzLngpLnRvRml4ZWQoMiksIFwiJVwiKTtcbiAgICAgICAgICB0aGlzLmRpdi5zdHlsZS50b3AgPSBcIlwiLmNvbmNhdCgoMTAwICogdGhpcy55KS50b0ZpeGVkKDIpLCBcIiVcIik7XG4gICAgICAgIH1cbiAgICAgICAgc2NyZWVuVG9QYWdlVHJhbnNsYXRpb24odCwgZSkge1xuICAgICAgICAgIHN3aXRjaCAodGhpcy5wYXJlbnRSb3RhdGlvbikge1xuICAgICAgICAgICAgY2FzZSA5MDpcbiAgICAgICAgICAgICAgcmV0dXJuIFtlLCAtdF07XG4gICAgICAgICAgICBjYXNlIDE4MDpcbiAgICAgICAgICAgICAgcmV0dXJuIFstdCwgLWVdO1xuICAgICAgICAgICAgY2FzZSAyNzA6XG4gICAgICAgICAgICAgIHJldHVybiBbLWUsIHRdO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIFt0LCBlXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcGFnZVRyYW5zbGF0aW9uVG9TY3JlZW4odCwgZSkge1xuICAgICAgICAgIHN3aXRjaCAodGhpcy5wYXJlbnRSb3RhdGlvbikge1xuICAgICAgICAgICAgY2FzZSA5MDpcbiAgICAgICAgICAgICAgcmV0dXJuIFstZSwgdF07XG4gICAgICAgICAgICBjYXNlIDE4MDpcbiAgICAgICAgICAgICAgcmV0dXJuIFstdCwgLWVdO1xuICAgICAgICAgICAgY2FzZSAyNzA6XG4gICAgICAgICAgICAgIHJldHVybiBbZSwgLXRdO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIFt0LCBlXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHBhcmVudFNjYWxlKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl91aU1hbmFnZXIudmlld1BhcmFtZXRlcnMucmVhbFNjYWxlO1xuICAgICAgICB9XG4gICAgICAgIGdldCBwYXJlbnRSb3RhdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gKHRoaXMuX3VpTWFuYWdlci52aWV3UGFyYW1ldGVycy5yb3RhdGlvbiArIHRoaXMucGFnZVJvdGF0aW9uKSAlIDM2MDtcbiAgICAgICAgfVxuICAgICAgICBnZXQgcGFyZW50RGltZW5zaW9ucygpIHtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgIHJlYWxTY2FsZTogdFxuICAgICAgICAgICAgfSA9IHRoaXMuX3VpTWFuYWdlci52aWV3UGFyYW1ldGVycyxcbiAgICAgICAgICAgIFtlLCBuXSA9IHRoaXMucGFnZURpbWVuc2lvbnM7XG4gICAgICAgICAgcmV0dXJuIFtlICogdCwgbiAqIHRdO1xuICAgICAgICB9XG4gICAgICAgIHNldERpbXModCwgZSkge1xuICAgICAgICAgIGNvbnN0IFtuLCBpXSA9IHRoaXMucGFyZW50RGltZW5zaW9ucztcbiAgICAgICAgICB0aGlzLmRpdi5zdHlsZS53aWR0aCA9IFwiXCIuY29uY2F0KCgxMDAgKiB0IC8gbikudG9GaXhlZCgyKSwgXCIlXCIpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUykgfHwgKHRoaXMuZGl2LnN0eWxlLmhlaWdodCA9IFwiXCIuY29uY2F0KCgxMDAgKiBlIC8gaSkudG9GaXhlZCgyKSwgXCIlXCIpKTtcbiAgICAgICAgfVxuICAgICAgICBmaXhEaW1zKCkge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgc3R5bGU6IHRcbiAgICAgICAgICAgIH0gPSB0aGlzLmRpdixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaGVpZ2h0OiBlLFxuICAgICAgICAgICAgICB3aWR0aDogblxuICAgICAgICAgICAgfSA9IHQsXG4gICAgICAgICAgICBpID0gbi5lbmRzV2l0aChcIiVcIiksXG4gICAgICAgICAgICByID0gIV9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUykgJiYgZS5lbmRzV2l0aChcIiVcIik7XG4gICAgICAgICAgaWYgKGkgJiYgcikgcmV0dXJuO1xuICAgICAgICAgIGNvbnN0IFtzLCBhXSA9IHRoaXMucGFyZW50RGltZW5zaW9ucztcbiAgICAgICAgICBpIHx8ICh0LndpZHRoID0gXCJcIi5jb25jYXQoKDEwMCAqIHBhcnNlRmxvYXQobikgLyBzKS50b0ZpeGVkKDIpLCBcIiVcIikpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUykgfHwgciB8fCAodC5oZWlnaHQgPSBcIlwiLmNvbmNhdCgoMTAwICogcGFyc2VGbG9hdChlKSAvIGEpLnRvRml4ZWQoMiksIFwiJVwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0SW5pdGlhbFRyYW5zbGF0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBbMCwgMF07XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyKCkge1xuICAgICAgICAgIHRoaXMuZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgICB0aGlzLmRpdi5zZXRBdHRyaWJ1dGUoXCJkYXRhLWVkaXRvci1yb3RhdGlvblwiLCAoMzYwIC0gdGhpcy5yb3RhdGlvbikgJSAzNjApO1xuICAgICAgICAgIHRoaXMuZGl2LmNsYXNzTmFtZSA9IHRoaXMubmFtZTtcbiAgICAgICAgICB0aGlzLmRpdi5zZXRBdHRyaWJ1dGUoXCJpZFwiLCB0aGlzLmlkKTtcbiAgICAgICAgICB0aGlzLmRpdi5zZXRBdHRyaWJ1dGUoXCJ0YWJJbmRleFwiLCAwKTtcbiAgICAgICAgICB0aGlzLnNldEluRm9yZWdyb3VuZCgpO1xuICAgICAgICAgIHRoaXMuZGl2LmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c2luXCIsIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfdykpO1xuICAgICAgICAgIHRoaXMuZGl2LmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c291dFwiLCBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0MpKTtcbiAgICAgICAgICBjb25zdCBbdCwgZV0gPSB0aGlzLnBhcmVudERpbWVuc2lvbnM7XG4gICAgICAgICAgaWYgKHRoaXMucGFyZW50Um90YXRpb24gJSAxODAgIT0gMCkge1xuICAgICAgICAgICAgdGhpcy5kaXYuc3R5bGUubWF4V2lkdGggPSBcIlwiLmNvbmNhdCgoMTAwICogZSAvIHQpLnRvRml4ZWQoMiksIFwiJVwiKTtcbiAgICAgICAgICAgIHRoaXMuZGl2LnN0eWxlLm1heEhlaWdodCA9IFwiXCIuY29uY2F0KCgxMDAgKiB0IC8gZSkudG9GaXhlZCgyKSwgXCIlXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBbbiwgaV0gPSB0aGlzLmdldEluaXRpYWxUcmFuc2xhdGlvbigpO1xuICAgICAgICAgIHRoaXMudHJhbnNsYXRlKG4sIGkpO1xuICAgICAgICAgICgwLCByLmJpbmRFdmVudHMpKHRoaXMsIHRoaXMuZGl2LCBbXCJkcmFnc3RhcnRcIiwgXCJwb2ludGVyZG93blwiXSk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZGl2O1xuICAgICAgICB9XG4gICAgICAgIHBvaW50ZXJkb3duKHQpIHtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBpc01hYzogZVxuICAgICAgICAgIH0gPSBpLkZlYXR1cmVUZXN0LnBsYXRmb3JtO1xuICAgICAgICAgIGlmICgwICE9PSB0LmJ1dHRvbiB8fCB0LmN0cmxLZXkgJiYgZSkgdC5wcmV2ZW50RGVmYXVsdCgpO2Vsc2Uge1xuICAgICAgICAgICAgdC5jdHJsS2V5ICYmICFlIHx8IHQuc2hpZnRLZXkgfHwgdC5tZXRhS2V5ICYmIGUgPyB0aGlzLnBhcmVudC50b2dnbGVTZWxlY3RlZCh0aGlzKSA6IHRoaXMucGFyZW50LnNldFNlbGVjdGVkKHRoaXMpO1xuICAgICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ULCAhMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGdldFJlY3QodCwgZSkge1xuICAgICAgICAgIGNvbnN0IG4gPSB0aGlzLnBhcmVudFNjYWxlLFxuICAgICAgICAgICAgW2ksIHJdID0gdGhpcy5wYWdlRGltZW5zaW9ucyxcbiAgICAgICAgICAgIFtzLCBhXSA9IHRoaXMucGFnZVRyYW5zbGF0aW9uLFxuICAgICAgICAgICAgbyA9IHQgLyBuLFxuICAgICAgICAgICAgbCA9IGUgLyBuLFxuICAgICAgICAgICAgYyA9IHRoaXMueCAqIGksXG4gICAgICAgICAgICBoID0gdGhpcy55ICogcixcbiAgICAgICAgICAgIGQgPSB0aGlzLndpZHRoICogaSxcbiAgICAgICAgICAgIHUgPSB0aGlzLmhlaWdodCAqIHI7XG4gICAgICAgICAgc3dpdGNoICh0aGlzLnJvdGF0aW9uKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIHJldHVybiBbYyArIG8gKyBzLCByIC0gaCAtIGwgLSB1ICsgYSwgYyArIG8gKyBkICsgcywgciAtIGggLSBsICsgYV07XG4gICAgICAgICAgICBjYXNlIDkwOlxuICAgICAgICAgICAgICByZXR1cm4gW2MgKyBsICsgcywgciAtIGggKyBvICsgYSwgYyArIGwgKyB1ICsgcywgciAtIGggKyBvICsgZCArIGFdO1xuICAgICAgICAgICAgY2FzZSAxODA6XG4gICAgICAgICAgICAgIHJldHVybiBbYyAtIG8gLSBkICsgcywgciAtIGggKyBsICsgYSwgYyAtIG8gKyBzLCByIC0gaCArIGwgKyB1ICsgYV07XG4gICAgICAgICAgICBjYXNlIDI3MDpcbiAgICAgICAgICAgICAgcmV0dXJuIFtjIC0gbCAtIHUgKyBzLCByIC0gaCAtIG8gLSBkICsgYSwgYyAtIGwgKyBzLCByIC0gaCAtIG8gKyBhXTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcm90YXRpb25cIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGdldFJlY3RJbkN1cnJlbnRDb29yZHModCwgZSkge1xuICAgICAgICAgIGNvbnN0IFtuLCBpLCByLCBzXSA9IHQsXG4gICAgICAgICAgICBhID0gciAtIG4sXG4gICAgICAgICAgICBvID0gcyAtIGk7XG4gICAgICAgICAgc3dpdGNoICh0aGlzLnJvdGF0aW9uKSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIHJldHVybiBbbiwgZSAtIHMsIGEsIG9dO1xuICAgICAgICAgICAgY2FzZSA5MDpcbiAgICAgICAgICAgICAgcmV0dXJuIFtuLCBlIC0gaSwgbywgYV07XG4gICAgICAgICAgICBjYXNlIDE4MDpcbiAgICAgICAgICAgICAgcmV0dXJuIFtyLCBlIC0gaSwgYSwgb107XG4gICAgICAgICAgICBjYXNlIDI3MDpcbiAgICAgICAgICAgICAgcmV0dXJuIFtyLCBlIC0gcywgbywgYV07XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHJvdGF0aW9uXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvbmNlQWRkZWQoKSB7fVxuICAgICAgICBpc0VtcHR5KCkge1xuICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgICAgfVxuICAgICAgICBlbmFibGVFZGl0TW9kZSgpIHtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX2ssICEwKTtcbiAgICAgICAgfVxuICAgICAgICBkaXNhYmxlRWRpdE1vZGUoKSB7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9rLCAhMSk7XG4gICAgICAgIH1cbiAgICAgICAgaXNJbkVkaXRNb2RlKCkge1xuICAgICAgICAgIHJldHVybiBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2spO1xuICAgICAgICB9XG4gICAgICAgIHNob3VsZEdldEtleWJvYXJkRXZlbnRzKCkge1xuICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgICAgfVxuICAgICAgICBuZWVkc1RvQmVSZWJ1aWx0KCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmRpdiAmJiAhdGhpcy5pc0F0dGFjaGVkVG9ET007XG4gICAgICAgIH1cbiAgICAgICAgcmVidWlsZCgpIHtcbiAgICAgICAgICB2YXIgX3RoaXMkZGl2LCBfdGhpcyRkaXYyO1xuICAgICAgICAgIChfdGhpcyRkaXYgPSB0aGlzLmRpdikgPT09IG51bGwgfHwgX3RoaXMkZGl2ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRkaXYuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzaW5cIiwgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF93KSk7XG4gICAgICAgICAgKF90aGlzJGRpdjIgPSB0aGlzLmRpdikgPT09IG51bGwgfHwgX3RoaXMkZGl2MiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkZGl2Mi5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNvdXRcIiwgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9DKSk7XG4gICAgICAgIH1cbiAgICAgICAgc2VyaWFsaXplKCkge1xuICAgICAgICAgICgwLCBpLnVucmVhY2hhYmxlKShcIkFuIGVkaXRvciBtdXN0IGJlIHNlcmlhbGl6YWJsZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgZGVzZXJpYWxpemUodCwgZSwgbikge1xuICAgICAgICAgIGNvbnN0IGkgPSBuZXcgdGhpcy5wcm90b3R5cGUuY29uc3RydWN0b3Ioe1xuICAgICAgICAgICAgcGFyZW50OiBlLFxuICAgICAgICAgICAgaWQ6IGUuZ2V0TmV4dElkKCksXG4gICAgICAgICAgICB1aU1hbmFnZXI6IG5cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpLnJvdGF0aW9uID0gdC5yb3RhdGlvbjtcbiAgICAgICAgICBjb25zdCBbciwgc10gPSBpLnBhZ2VEaW1lbnNpb25zLFxuICAgICAgICAgICAgW2EsIG8sIGwsIGNdID0gaS5nZXRSZWN0SW5DdXJyZW50Q29vcmRzKHQucmVjdCwgcyk7XG4gICAgICAgICAgaS54ID0gYSAvIHI7XG4gICAgICAgICAgaS55ID0gbyAvIHM7XG4gICAgICAgICAgaS53aWR0aCA9IGwgLyByO1xuICAgICAgICAgIGkuaGVpZ2h0ID0gYyAvIHM7XG4gICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgcmVtb3ZlKCkge1xuICAgICAgICAgIHRoaXMuZGl2LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJmb2N1c2luXCIsIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfdykpO1xuICAgICAgICAgIHRoaXMuZGl2LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJmb2N1c291dFwiLCBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0MpKTtcbiAgICAgICAgICB0aGlzLmlzRW1wdHkoKSB8fCB0aGlzLmNvbW1pdCgpO1xuICAgICAgICAgIHRoaXMucGFyZW50ID8gdGhpcy5wYXJlbnQucmVtb3ZlKHRoaXMpIDogdGhpcy5fdWlNYW5hZ2VyLnJlbW92ZUVkaXRvcih0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgaXNSZXNpemFibGUoKSB7XG4gICAgICAgICAgcmV0dXJuICExO1xuICAgICAgICB9XG4gICAgICAgIG1ha2VSZXNpemFibGUoKSB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNSZXNpemFibGUpIHtcbiAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX0YsIF9GMikuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRSkuY2xhc3NMaXN0LnJlbW92ZShcImhpZGRlblwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2VsZWN0KCkge1xuICAgICAgICAgIHZhciBfdGhpcyRkaXYzO1xuICAgICAgICAgIHRoaXMubWFrZVJlc2l6YWJsZSgpO1xuICAgICAgICAgIChfdGhpcyRkaXYzID0gdGhpcy5kaXYpID09PSBudWxsIHx8IF90aGlzJGRpdjMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJGRpdjMuY2xhc3NMaXN0LmFkZChcInNlbGVjdGVkRWRpdG9yXCIpO1xuICAgICAgICB9XG4gICAgICAgIHVuc2VsZWN0KCkge1xuICAgICAgICAgIHZhciBfY2xhc3NQcml2YXRlRmllbGRHZXQzLCBfdGhpcyRkaXY0LCBfdGhpcyRkaXY1O1xuICAgICAgICAgIChfY2xhc3NQcml2YXRlRmllbGRHZXQzID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9FKSkgPT09IG51bGwgfHwgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0MyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2NsYXNzUHJpdmF0ZUZpZWxkR2V0My5jbGFzc0xpc3QuYWRkKFwiaGlkZGVuXCIpO1xuICAgICAgICAgIChfdGhpcyRkaXY0ID0gdGhpcy5kaXYpID09PSBudWxsIHx8IF90aGlzJGRpdjQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJGRpdjQuY2xhc3NMaXN0LnJlbW92ZShcInNlbGVjdGVkRWRpdG9yXCIpO1xuICAgICAgICAgICgoX3RoaXMkZGl2NSA9IHRoaXMuZGl2KSA9PT0gbnVsbCB8fCBfdGhpcyRkaXY1ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRkaXY1LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSAmJiB0aGlzLl91aU1hbmFnZXIuY3VycmVudExheWVyLmRpdi5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZVBhcmFtcyh0LCBlKSB7fVxuICAgICAgICBkaXNhYmxlRWRpdGluZygpIHt9XG4gICAgICAgIGVuYWJsZUVkaXRpbmcoKSB7fVxuICAgICAgICBlbnRlckluRWRpdE1vZGUoKSB7fVxuICAgICAgICBnZXQgY29udGVudERpdigpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5kaXY7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGlzRWRpdGluZygpIHtcbiAgICAgICAgICByZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9QKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgaXNFZGl0aW5nKHQpIHtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1AsIHQpO1xuICAgICAgICAgIGlmICh0aGlzLnBhcmVudCkgaWYgKHQpIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50LnNldFNlbGVjdGVkKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQuc2V0QWN0aXZlRWRpdG9yKHRoaXMpO1xuICAgICAgICAgIH0gZWxzZSB0aGlzLnBhcmVudC5zZXRBY3RpdmVFZGl0b3IobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0QXNwZWN0UmF0aW8odCwgZSkge1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfUywgITApO1xuICAgICAgICAgIGNvbnN0IG4gPSB0IC8gZSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3R5bGU6IGlcbiAgICAgICAgICAgIH0gPSB0aGlzLmRpdjtcbiAgICAgICAgICBpLmFzcGVjdFJhdGlvID0gbjtcbiAgICAgICAgICBpLmhlaWdodCA9IFwiYXV0b1wiO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBnZXQgTUlOX1NJWkUoKSB7XG4gICAgICAgICAgcmV0dXJuIDE2O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBfY2xhc3MxMiA9IEFubm90YXRpb25FZGl0b3I7XG4gICAgICBmdW5jdGlvbiBfUjIodCwgZSwgbikge1xuICAgICAgICBsZXQgW2ksIHJdID0gdDtcbiAgICAgICAgW2UsIG5dID0gdGhpcy5zY3JlZW5Ub1BhZ2VUcmFuc2xhdGlvbihlLCBuKTtcbiAgICAgICAgdGhpcy54ICs9IGUgLyBpO1xuICAgICAgICB0aGlzLnkgKz0gbiAvIHI7XG4gICAgICAgIHRoaXMuZml4QW5kU2V0UG9zaXRpb24oKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF9GMigpIHtcbiAgICAgICAgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRSkpIHJldHVybjtcbiAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9FLCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpKTtcbiAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9FKS5jbGFzc0xpc3QuYWRkKFwicmVzaXplcnNcIik7XG4gICAgICAgIGNvbnN0IHQgPSBbXCJ0b3BMZWZ0XCIsIFwidG9wUmlnaHRcIiwgXCJib3R0b21SaWdodFwiLCBcImJvdHRvbUxlZnRcIl07XG4gICAgICAgIHRoaXMuX3dpbGxLZWVwQXNwZWN0UmF0aW8gfHwgdC5wdXNoKFwidG9wTWlkZGxlXCIsIFwibWlkZGxlUmlnaHRcIiwgXCJib3R0b21NaWRkbGVcIiwgXCJtaWRkbGVMZWZ0XCIpO1xuICAgICAgICBmb3IgKGNvbnN0IGUgb2YgdCkge1xuICAgICAgICAgIGNvbnN0IHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRSkuYXBwZW5kKHQpO1xuICAgICAgICAgIHQuY2xhc3NMaXN0LmFkZChcInJlc2l6ZXJcIiwgZSk7XG4gICAgICAgICAgdC5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIiwgX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfSSwgX0kyKS5iaW5kKHRoaXMsIGUpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRpdi5wcmVwZW5kKF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRSkpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX0kyKHQsIGUpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX3gsIFtlLmNsaWVudFgsIGUuY2xpZW50WV0pO1xuICAgICAgICBjb25zdCBuID0gX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfRCwgX0QyKS5iaW5kKHRoaXMsIHQpLFxuICAgICAgICAgIGkgPSB0aGlzLmRpdi5kcmFnZ2FibGU7XG4gICAgICAgIHRoaXMuZGl2LmRyYWdnYWJsZSA9ICExO1xuICAgICAgICBjb25zdCByID0gXCJyZXNpemluZ1wiLmNvbmNhdCh0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpKS5jb25jYXQodC5zbGljZSgxKSk7XG4gICAgICAgIHRoaXMucGFyZW50LmRpdi5jbGFzc0xpc3QuYWRkKHIpO1xuICAgICAgICBjb25zdCBzID0ge1xuICAgICAgICAgIHBhc3NpdmU6ICEwLFxuICAgICAgICAgIGNhcHR1cmU6ICEwXG4gICAgICAgIH07XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcm1vdmVcIiwgbiwgcyk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsICgpID0+IHtcbiAgICAgICAgICB0aGlzLl91aU1hbmFnZXIuc3RvcFVuZG9BY2N1bXVsYXRpb24oKTtcbiAgICAgICAgICB0aGlzLmRpdi5kcmFnZ2FibGUgPSBpO1xuICAgICAgICAgIHRoaXMucGFyZW50LmRpdi5jbGFzc0xpc3QucmVtb3ZlKHIpO1xuICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcm1vdmVcIiwgbiwgcyk7XG4gICAgICAgIH0sIHtcbiAgICAgICAgICBvbmNlOiAhMFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF9EMih0LCBlKSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGNsaWVudFg6IG4sXG4gICAgICAgICAgICBjbGllbnRZOiByXG4gICAgICAgICAgfSA9IGUsXG4gICAgICAgICAgcyA9IG4gLSBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3gpWzBdLFxuICAgICAgICAgIGEgPSByIC0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF94KVsxXTtcbiAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF94KVswXSA9IG47XG4gICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfeClbMV0gPSByO1xuICAgICAgICBjb25zdCBbbywgbF0gPSB0aGlzLnBhcmVudERpbWVuc2lvbnMsXG4gICAgICAgICAgYyA9IHRoaXMueCxcbiAgICAgICAgICBoID0gdGhpcy55LFxuICAgICAgICAgIGQgPSB0aGlzLndpZHRoLFxuICAgICAgICAgIHUgPSB0aGlzLmhlaWdodCxcbiAgICAgICAgICBwID0gX2NsYXNzMTIuTUlOX1NJWkUgLyBvLFxuICAgICAgICAgIGYgPSBfY2xhc3MxMi5NSU5fU0laRSAvIGw7XG4gICAgICAgIGxldCBnO1xuICAgICAgICBjb25zdCByb3VuZCA9IHQgPT4gTWF0aC5yb3VuZCgxZTQgKiB0KSAvIDFlNCxcbiAgICAgICAgICB1cGRhdGVQb3NpdGlvbiA9ICh0LCBlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBbbiwgaV0gPSB0aGlzLnBhcmVudERpbWVuc2lvbnM7XG4gICAgICAgICAgICB0aGlzLnNldERpbXMobiAqIHQsIGkgKiBlKTtcbiAgICAgICAgICAgIHRoaXMuZml4QW5kU2V0UG9zaXRpb24oKTtcbiAgICAgICAgICB9O1xuICAgICAgICBzd2l0Y2ggKHQpIHtcbiAgICAgICAgICBjYXNlIFwidG9wTGVmdFwiOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZiAoTWF0aC5zaWduKHMpICogTWF0aC5zaWduKGEpIDwgMCkgcmV0dXJuO1xuICAgICAgICAgICAgICBjb25zdCB0ID0gTWF0aC5oeXBvdChzLCBhKSxcbiAgICAgICAgICAgICAgICBlID0gTWF0aC5oeXBvdChkICogbywgdSAqIGwpLFxuICAgICAgICAgICAgICAgIG4gPSByb3VuZChjICsgZCksXG4gICAgICAgICAgICAgICAgaSA9IHJvdW5kKGggKyB1KSxcbiAgICAgICAgICAgICAgICByID0gTWF0aC5tYXgoTWF0aC5taW4oMSAtIE1hdGguc2lnbihzKSAqICh0IC8gZSksIDEgLyBkLCAxIC8gdSksIHAgLyBkLCBmIC8gdSksXG4gICAgICAgICAgICAgICAgbSA9IHJvdW5kKGQgKiByKSxcbiAgICAgICAgICAgICAgICBiID0gcm91bmQodSAqIHIpLFxuICAgICAgICAgICAgICAgIHYgPSBuIC0gbSxcbiAgICAgICAgICAgICAgICB5ID0gaSAtIGI7XG4gICAgICAgICAgICAgIGcgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy53aWR0aCA9IG07XG4gICAgICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBiO1xuICAgICAgICAgICAgICAgIHRoaXMueCA9IHY7XG4gICAgICAgICAgICAgICAgdGhpcy55ID0geTtcbiAgICAgICAgICAgICAgICB1cGRhdGVQb3NpdGlvbihtLCBiKTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBcInRvcE1pZGRsZVwiOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjb25zdCB0ID0gcm91bmQodGhpcy55ICsgdSksXG4gICAgICAgICAgICAgICAgZSA9IHJvdW5kKE1hdGgubWF4KGYsIE1hdGgubWluKDEsIHUgLSBhIC8gbCkpKSxcbiAgICAgICAgICAgICAgICBuID0gdCAtIGU7XG4gICAgICAgICAgICAgIGcgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBlO1xuICAgICAgICAgICAgICAgIHRoaXMueSA9IG47XG4gICAgICAgICAgICAgICAgdXBkYXRlUG9zaXRpb24oZCwgZSk7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgXCJ0b3BSaWdodFwiOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZiAoTWF0aC5zaWduKHMpICogTWF0aC5zaWduKGEpID4gMCkgcmV0dXJuO1xuICAgICAgICAgICAgICBjb25zdCB0ID0gTWF0aC5oeXBvdChzLCBhKSxcbiAgICAgICAgICAgICAgICBlID0gTWF0aC5oeXBvdCh0aGlzLndpZHRoICogbywgdGhpcy5oZWlnaHQgKiBsKSxcbiAgICAgICAgICAgICAgICBuID0gcm91bmQoaCArIHRoaXMuaGVpZ2h0KSxcbiAgICAgICAgICAgICAgICBpID0gTWF0aC5tYXgoTWF0aC5taW4oMSArIE1hdGguc2lnbihzKSAqICh0IC8gZSksIDEgLyBkLCAxIC8gdSksIHAgLyBkLCBmIC8gdSksXG4gICAgICAgICAgICAgICAgciA9IHJvdW5kKGQgKiBpKSxcbiAgICAgICAgICAgICAgICBjID0gcm91bmQodSAqIGkpLFxuICAgICAgICAgICAgICAgIG0gPSBuIC0gYztcbiAgICAgICAgICAgICAgZyA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gcjtcbiAgICAgICAgICAgICAgICB0aGlzLmhlaWdodCA9IGM7XG4gICAgICAgICAgICAgICAgdGhpcy55ID0gbTtcbiAgICAgICAgICAgICAgICB1cGRhdGVQb3NpdGlvbihyLCBjKTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBcIm1pZGRsZVJpZ2h0XCI6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNvbnN0IHQgPSByb3VuZChNYXRoLm1heChwLCBNYXRoLm1pbigxLCBkICsgcyAvIG8pKSk7XG4gICAgICAgICAgICAgIGcgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy53aWR0aCA9IHQ7XG4gICAgICAgICAgICAgICAgdXBkYXRlUG9zaXRpb24odCwgdSk7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgXCJib3R0b21SaWdodFwiOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZiAoTWF0aC5zaWduKHMpICogTWF0aC5zaWduKGEpIDwgMCkgcmV0dXJuO1xuICAgICAgICAgICAgICBjb25zdCB0ID0gTWF0aC5oeXBvdChzLCBhKSxcbiAgICAgICAgICAgICAgICBlID0gTWF0aC5oeXBvdCh0aGlzLndpZHRoICogbywgdGhpcy5oZWlnaHQgKiBsKSxcbiAgICAgICAgICAgICAgICBuID0gTWF0aC5tYXgoTWF0aC5taW4oMSArIE1hdGguc2lnbihzKSAqICh0IC8gZSksIDEgLyBkLCAxIC8gdSksIHAgLyBkLCBmIC8gdSksXG4gICAgICAgICAgICAgICAgaSA9IHJvdW5kKGQgKiBuKSxcbiAgICAgICAgICAgICAgICByID0gcm91bmQodSAqIG4pO1xuICAgICAgICAgICAgICBnID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMud2lkdGggPSBpO1xuICAgICAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gcjtcbiAgICAgICAgICAgICAgICB1cGRhdGVQb3NpdGlvbihpLCByKTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBcImJvdHRvbU1pZGRsZVwiOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjb25zdCB0ID0gcm91bmQoTWF0aC5tYXgoZiwgTWF0aC5taW4oMSwgdSArIGEgLyBsKSkpO1xuICAgICAgICAgICAgICBnID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdDtcbiAgICAgICAgICAgICAgICB1cGRhdGVQb3NpdGlvbihkLCB0KTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBcImJvdHRvbUxlZnRcIjpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWYgKE1hdGguc2lnbihzKSAqIE1hdGguc2lnbihhKSA+IDApIHJldHVybjtcbiAgICAgICAgICAgICAgY29uc3QgdCA9IE1hdGguaHlwb3QocywgYSksXG4gICAgICAgICAgICAgICAgZSA9IE1hdGguaHlwb3QodGhpcy53aWR0aCAqIG8sIHRoaXMuaGVpZ2h0ICogbCksXG4gICAgICAgICAgICAgICAgbiA9IHJvdW5kKGMgKyB0aGlzLndpZHRoKSxcbiAgICAgICAgICAgICAgICBpID0gTWF0aC5tYXgoTWF0aC5taW4oMSAtIE1hdGguc2lnbihzKSAqICh0IC8gZSksIDEgLyBkLCAxIC8gdSksIHAgLyBkLCBmIC8gdSksXG4gICAgICAgICAgICAgICAgciA9IHJvdW5kKGQgKiBpKSxcbiAgICAgICAgICAgICAgICBoID0gcm91bmQodSAqIGkpLFxuICAgICAgICAgICAgICAgIG0gPSBuIC0gcjtcbiAgICAgICAgICAgICAgZyA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gcjtcbiAgICAgICAgICAgICAgICB0aGlzLmhlaWdodCA9IGg7XG4gICAgICAgICAgICAgICAgdGhpcy54ID0gbTtcbiAgICAgICAgICAgICAgICB1cGRhdGVQb3NpdGlvbihyLCBoKTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBcIm1pZGRsZUxlZnRcIjpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgY29uc3QgdCA9IHJvdW5kKGMgKyBkKSxcbiAgICAgICAgICAgICAgICBlID0gcm91bmQoTWF0aC5tYXgocCwgTWF0aC5taW4oMSwgZCAtIHMgLyBvKSkpLFxuICAgICAgICAgICAgICAgIG4gPSB0IC0gZTtcbiAgICAgICAgICAgICAgZyA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gZTtcbiAgICAgICAgICAgICAgICB0aGlzLnggPSBuO1xuICAgICAgICAgICAgICAgIHVwZGF0ZVBvc2l0aW9uKGUsIHUpO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFkZENvbW1hbmRzKHtcbiAgICAgICAgICBjbWQ6IGcsXG4gICAgICAgICAgdW5kbzogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy53aWR0aCA9IGQ7XG4gICAgICAgICAgICB0aGlzLmhlaWdodCA9IHU7XG4gICAgICAgICAgICB0aGlzLnggPSBjO1xuICAgICAgICAgICAgdGhpcy55ID0gaDtcbiAgICAgICAgICAgIHVwZGF0ZVBvc2l0aW9uKGQsIHUpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgbXVzdEV4ZWM6ICEwLFxuICAgICAgICAgIHR5cGU6IGkuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuUkVTSVpFLFxuICAgICAgICAgIG92ZXJ3cml0ZUlmU2FtZVR5cGU6ICEwLFxuICAgICAgICAgIGtlZXBVbmRvOiAhMFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIF9kZWZpbmVQcm9wZXJ0eShBbm5vdGF0aW9uRWRpdG9yLCBcIl9jb2xvck1hbmFnZXJcIiwgbmV3IHIuQ29sb3JNYW5hZ2VyKCkpO1xuICAgICAgX2RlZmluZVByb3BlcnR5KEFubm90YXRpb25FZGl0b3IsIFwiX3pJbmRleFwiLCAxKTtcbiAgICAgIGUuQW5ub3RhdGlvbkVkaXRvciA9IEFubm90YXRpb25FZGl0b3I7XG4gICAgICBjbGFzcyBGYWtlRWRpdG9yIGV4dGVuZHMgQW5ub3RhdGlvbkVkaXRvciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHQpIHtcbiAgICAgICAgICBzdXBlcih0KTtcbiAgICAgICAgICB0aGlzLmFubm90YXRpb25FbGVtZW50SWQgPSB0LmFubm90YXRpb25FbGVtZW50SWQ7XG4gICAgICAgICAgdGhpcy5kZWxldGVkID0gITA7XG4gICAgICAgIH1cbiAgICAgICAgc2VyaWFsaXplKCkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogdGhpcy5hbm5vdGF0aW9uRWxlbWVudElkLFxuICAgICAgICAgICAgZGVsZXRlZDogITAsXG4gICAgICAgICAgICBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgIHZhbHVlOiAhMFxuICAgICAgfSk7XG4gICAgICBlLktleWJvYXJkTWFuYWdlciA9IGUuQ29tbWFuZE1hbmFnZXIgPSBlLkNvbG9yTWFuYWdlciA9IGUuQW5ub3RhdGlvbkVkaXRvclVJTWFuYWdlciA9IHZvaWQgMDtcbiAgICAgIGUuYmluZEV2ZW50cyA9IGZ1bmN0aW9uIGJpbmRFdmVudHModCwgZSwgbikge1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgbikgZS5hZGRFdmVudExpc3RlbmVyKGksIHRbaV0uYmluZCh0KSk7XG4gICAgICB9O1xuICAgICAgZS5vcGFjaXR5VG9IZXggPSBmdW5jdGlvbiBvcGFjaXR5VG9IZXgodCkge1xuICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChNYXRoLm1pbigyNTUsIE1hdGgubWF4KDEsIDI1NSAqIHQpKSkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIFwiMFwiKTtcbiAgICAgIH07XG4gICAgICBuKDIpO1xuICAgICAgbig4OSk7XG4gICAgICBuKDEyNSk7XG4gICAgICBuKDEzNSk7XG4gICAgICBuKDEzNyk7XG4gICAgICBuKDE0MCk7XG4gICAgICBuKDE0Mik7XG4gICAgICBuKDE0NCk7XG4gICAgICBuKDE0Nik7XG4gICAgICBuKDE2NSk7XG4gICAgICB2YXIgaSA9IG4oMSksXG4gICAgICAgIHIgPSBuKDE2Nyk7XG4gICAgICB2YXIgX08gPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIGNsYXNzIElkTWFuYWdlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9PLCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiAwXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0SWQoKSB7XG4gICAgICAgICAgdmFyIF90aGlzJE8sIF90aGlzJE8yO1xuICAgICAgICAgIHJldHVybiBcIlwiLmNvbmNhdChpLkFubm90YXRpb25FZGl0b3JQcmVmaXgpLmNvbmNhdCgoX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9PLCAoX3RoaXMkTyA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTyksIF90aGlzJE8yID0gX3RoaXMkTysrLCBfdGhpcyRPKSksIF90aGlzJE8yKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBfTCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xuICAgICAgdmFyIF9PMiA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xuICAgICAgdmFyIF9OID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICB2YXIgX0IgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbiAgICAgIGNsYXNzIEltYWdlTWFuYWdlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLCBfQik7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX0wsIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6ICgwLCBpLmdldFV1aWQpKClcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfTzIsIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IDBcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfTiwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGFzeW5jIGdldEZyb21GaWxlKHQpIHtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBsYXN0TW9kaWZpZWQ6IGUsXG4gICAgICAgICAgICBuYW1lOiBuLFxuICAgICAgICAgICAgc2l6ZTogaSxcbiAgICAgICAgICAgIHR5cGU6IHJcbiAgICAgICAgICB9ID0gdDtcbiAgICAgICAgICByZXR1cm4gX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfQiwgX0IyKS5jYWxsKHRoaXMsIFwiXCIuY29uY2F0KGUsIFwiX1wiKS5jb25jYXQobiwgXCJfXCIpLmNvbmNhdChpLCBcIl9cIikuY29uY2F0KHIpLCB0KTtcbiAgICAgICAgfVxuICAgICAgICBhc3luYyBnZXRGcm9tVXJsKHQpIHtcbiAgICAgICAgICByZXR1cm4gX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfQiwgX0IyKS5jYWxsKHRoaXMsIHQsIHQpO1xuICAgICAgICB9XG4gICAgICAgIGFzeW5jIGdldEZyb21JZCh0KSB7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9OKSB8fCBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX04sIG5ldyBNYXAoKSk7XG4gICAgICAgICAgY29uc3QgZSA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTikuZ2V0KHQpO1xuICAgICAgICAgIGlmICghZSkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgaWYgKGUuYml0bWFwKSB7XG4gICAgICAgICAgICBlLnJlZkNvdW50ZXIgKz0gMTtcbiAgICAgICAgICAgIHJldHVybiBlO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZS5maWxlID8gdGhpcy5nZXRGcm9tRmlsZShlLmZpbGUpIDogdGhpcy5nZXRGcm9tVXJsKGUudXJsKTtcbiAgICAgICAgfVxuICAgICAgICBnZXRTdmdVcmwodCkge1xuICAgICAgICAgIGNvbnN0IGUgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX04pLmdldCh0KTtcbiAgICAgICAgICByZXR1cm4gZSAhPT0gbnVsbCAmJiBlICE9PSB2b2lkIDAgJiYgZS5pc1N2ZyA/IGUuc3ZnVXJsIDogbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBkZWxldGVJZCh0KSB7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9OKSB8fCBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX04sIG5ldyBNYXAoKSk7XG4gICAgICAgICAgY29uc3QgZSA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTikuZ2V0KHQpO1xuICAgICAgICAgIGlmIChlKSB7XG4gICAgICAgICAgICBlLnJlZkNvdW50ZXIgLT0gMTtcbiAgICAgICAgICAgIDAgPT09IGUucmVmQ291bnRlciAmJiAoZS5iaXRtYXAgPSBudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaXNWYWxpZElkKHQpIHtcbiAgICAgICAgICByZXR1cm4gdC5zdGFydHNXaXRoKFwiaW1hZ2VfXCIuY29uY2F0KF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTCksIFwiX1wiKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGFzeW5jIGZ1bmN0aW9uIF9CMih0LCBlKSB7XG4gICAgICAgIHZhciBfbjU7XG4gICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTikgfHwgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9OLCBuZXcgTWFwKCkpO1xuICAgICAgICBsZXQgbiA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTikuZ2V0KHQpO1xuICAgICAgICBpZiAobnVsbCA9PT0gbikgcmV0dXJuIG51bGw7XG4gICAgICAgIGlmICgoX241ID0gbikgIT09IG51bGwgJiYgX241ICE9PSB2b2lkIDAgJiYgX241LmJpdG1hcCkge1xuICAgICAgICAgIG4ucmVmQ291bnRlciArPSAxO1xuICAgICAgICAgIHJldHVybiBuO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdmFyIF90aGlzJE8zLCBfdGhpcyRPNDtcbiAgICAgICAgICBuIHx8IChuID0ge1xuICAgICAgICAgICAgYml0bWFwOiBudWxsLFxuICAgICAgICAgICAgaWQ6IFwiaW1hZ2VfXCIuY29uY2F0KF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTCksIFwiX1wiKS5jb25jYXQoKF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfTzIsIChfdGhpcyRPMyA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTzIpLCBfdGhpcyRPNCA9IF90aGlzJE8zKyssIF90aGlzJE8zKSksIF90aGlzJE80KSksXG4gICAgICAgICAgICByZWZDb3VudGVyOiAwLFxuICAgICAgICAgICAgaXNTdmc6ICExXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbGV0IHQ7XG4gICAgICAgICAgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIGUpIHtcbiAgICAgICAgICAgIG4udXJsID0gZTtcbiAgICAgICAgICAgIGNvbnN0IGkgPSBhd2FpdCBmZXRjaChlKTtcbiAgICAgICAgICAgIGlmICghaS5vaykgdGhyb3cgbmV3IEVycm9yKGkuc3RhdHVzVGV4dCk7XG4gICAgICAgICAgICB0ID0gYXdhaXQgaS5ibG9iKCk7XG4gICAgICAgICAgfSBlbHNlIHQgPSBuLmZpbGUgPSBlO1xuICAgICAgICAgIGlmIChcImltYWdlL3N2Zyt4bWxcIiA9PT0gdC50eXBlKSB7XG4gICAgICAgICAgICBjb25zdCBlID0gbmV3IEZpbGVSZWFkZXIoKSxcbiAgICAgICAgICAgICAgaSA9IG5ldyBJbWFnZSgpLFxuICAgICAgICAgICAgICByID0gbmV3IFByb21pc2UoKHQsIHIpID0+IHtcbiAgICAgICAgICAgICAgICBpLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgIG4uYml0bWFwID0gaTtcbiAgICAgICAgICAgICAgICAgIG4uaXNTdmcgPSAhMDtcbiAgICAgICAgICAgICAgICAgIHQoKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGUub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaS5zcmMgPSBuLnN2Z1VybCA9IGUucmVzdWx0O1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaS5vbmVycm9yID0gZS5vbmVycm9yID0gcjtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBlLnJlYWRBc0RhdGFVUkwodCk7XG4gICAgICAgICAgICBhd2FpdCByO1xuICAgICAgICAgIH0gZWxzZSBuLmJpdG1hcCA9IGF3YWl0IGNyZWF0ZUltYWdlQml0bWFwKHQpO1xuICAgICAgICAgIG4ucmVmQ291bnRlciA9IDE7XG4gICAgICAgIH0gY2F0Y2ggKHQpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKHQpO1xuICAgICAgICAgIG4gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTikuc2V0KHQsIG4pO1xuICAgICAgICBuICYmIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTikuc2V0KG4uaWQsIG4pO1xuICAgICAgICByZXR1cm4gbjtcbiAgICAgIH1cbiAgICAgIHZhciBfaiA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xuICAgICAgdmFyIF9VID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICB2YXIgX3ogPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfSCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xuICAgICAgY2xhc3MgQ29tbWFuZE1hbmFnZXIge1xuICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfaiwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogW11cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfVSwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogITFcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfeiwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX0gsIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IC0xXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbGV0IHQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1swXSA/IGFyZ3VtZW50c1swXSA6IDEyODtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX3osIHQpO1xuICAgICAgICB9XG4gICAgICAgIGFkZCh0KSB7XG4gICAgICAgICAgbGV0IHtcbiAgICAgICAgICAgIGNtZDogZSxcbiAgICAgICAgICAgIHVuZG86IG4sXG4gICAgICAgICAgICBtdXN0RXhlYzogaSxcbiAgICAgICAgICAgIHR5cGU6IHIgPSBOYU4sXG4gICAgICAgICAgICBvdmVyd3JpdGVJZlNhbWVUeXBlOiBzID0gITEsXG4gICAgICAgICAgICBrZWVwVW5kbzogYSA9ICExXG4gICAgICAgICAgfSA9IHQ7XG4gICAgICAgICAgaSAmJiBlKCk7XG4gICAgICAgICAgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfVSkpIHJldHVybjtcbiAgICAgICAgICBjb25zdCBvID0ge1xuICAgICAgICAgICAgY21kOiBlLFxuICAgICAgICAgICAgdW5kbzogbixcbiAgICAgICAgICAgIHR5cGU6IHJcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmICgtMSA9PT0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9IKSkge1xuICAgICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9qKS5sZW5ndGggPiAwICYmIChfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2opLmxlbmd0aCA9IDApO1xuICAgICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ILCAwKTtcbiAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfaikucHVzaChvKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHMgJiYgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9qKVtfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0gpXS50eXBlID09PSByKSB7XG4gICAgICAgICAgICBhICYmIChvLnVuZG8gPSBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2opW19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfSCldLnVuZG8pO1xuICAgICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9qKVtfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0gpXSA9IG87XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGwgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0gpICsgMTtcbiAgICAgICAgICBpZiAobCA9PT0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF96KSkgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9qKS5zcGxpY2UoMCwgMSk7ZWxzZSB7XG4gICAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX0gsIGwpO1xuICAgICAgICAgICAgbCA8IF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfaikubGVuZ3RoICYmIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfaikuc3BsaWNlKGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2opLnB1c2gobyk7XG4gICAgICAgIH1cbiAgICAgICAgc3RvcFVuZG9BY2N1bXVsYXRpb24oKSB7XG4gICAgICAgICAgLTEgIT09IF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfSCkgJiYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfailbX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9IKV0udHlwZSA9IE5hTik7XG4gICAgICAgIH1cbiAgICAgICAgdW5kbygpIHtcbiAgICAgICAgICBpZiAoLTEgIT09IF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfSCkpIHtcbiAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfVSwgITApO1xuICAgICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9qKVtfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0gpXS51bmRvKCk7XG4gICAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1UsICExKTtcbiAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfSCwgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9IKSAtIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZWRvKCkge1xuICAgICAgICAgIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0gpIDwgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9qKS5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX0gsIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfSCkgKyAxKTtcbiAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfVSwgITApO1xuICAgICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9qKVtfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0gpXS5jbWQoKTtcbiAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfVSwgITEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBoYXNTb21ldGhpbmdUb1VuZG8oKSB7XG4gICAgICAgICAgcmV0dXJuIC0xICE9PSBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0gpO1xuICAgICAgICB9XG4gICAgICAgIGhhc1NvbWV0aGluZ1RvUmVkbygpIHtcbiAgICAgICAgICByZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9IKSA8IF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfaikubGVuZ3RoIC0gMTtcbiAgICAgICAgfVxuICAgICAgICBkZXN0cm95KCkge1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfaiwgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGUuQ29tbWFuZE1hbmFnZXIgPSBDb21tYW5kTWFuYWdlcjtcbiAgICAgIHZhciBfcSA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuICAgICAgY2xhc3MgS2V5Ym9hcmRNYW5hZ2VyIHtcbiAgICAgICAgY29uc3RydWN0b3IoX3Q1KSB7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9xKTtcbiAgICAgICAgICB0aGlzLmJ1ZmZlciA9IFtdO1xuICAgICAgICAgIHRoaXMuY2FsbGJhY2tzID0gbmV3IE1hcCgpO1xuICAgICAgICAgIHRoaXMuYWxsS2V5cyA9IG5ldyBTZXQoKTtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBpc01hYzogX2U1XG4gICAgICAgICAgfSA9IGkuRmVhdHVyZVRlc3QucGxhdGZvcm07XG4gICAgICAgICAgZm9yIChjb25zdCBbbiwgaSwgciA9IHt9XSBvZiBfdDUpIGZvciAoY29uc3QgdCBvZiBuKSB7XG4gICAgICAgICAgICBjb25zdCBuID0gdC5zdGFydHNXaXRoKFwibWFjK1wiKTtcbiAgICAgICAgICAgIGlmIChfZTUgJiYgbikge1xuICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5zZXQodC5zbGljZSg0KSwge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBpLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHJcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHRoaXMuYWxsS2V5cy5hZGQodC5zcGxpdChcIitcIikuYXQoLTEpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIV9lNSAmJiAhbikge1xuICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5zZXQodCwge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBpLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHJcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHRoaXMuYWxsS2V5cy5hZGQodC5zcGxpdChcIitcIikuYXQoLTEpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZXhlYyh0LCBlKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmFsbEtleXMuaGFzKGUua2V5KSkgcmV0dXJuO1xuICAgICAgICAgIGNvbnN0IG4gPSB0aGlzLmNhbGxiYWNrcy5nZXQoX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfcSwgX3EyKS5jYWxsKHRoaXMsIGUpKTtcbiAgICAgICAgICBpZiAoIW4pIHJldHVybjtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBjYWxsYmFjazogaSxcbiAgICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgYnViYmxlczogciA9ICExLFxuICAgICAgICAgICAgICBhcmdzOiBzID0gW10sXG4gICAgICAgICAgICAgIGNoZWNrZXI6IGEgPSBudWxsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSA9IG47XG4gICAgICAgICAgaWYgKCFhIHx8IGEodCwgZSkpIHtcbiAgICAgICAgICAgIGkuYmluZCh0LCAuLi5zKSgpO1xuICAgICAgICAgICAgaWYgKCFyKSB7XG4gICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF9xMih0KSB7XG4gICAgICAgIHQuYWx0S2V5ICYmIHRoaXMuYnVmZmVyLnB1c2goXCJhbHRcIik7XG4gICAgICAgIHQuY3RybEtleSAmJiB0aGlzLmJ1ZmZlci5wdXNoKFwiY3RybFwiKTtcbiAgICAgICAgdC5tZXRhS2V5ICYmIHRoaXMuYnVmZmVyLnB1c2goXCJtZXRhXCIpO1xuICAgICAgICB0LnNoaWZ0S2V5ICYmIHRoaXMuYnVmZmVyLnB1c2goXCJzaGlmdFwiKTtcbiAgICAgICAgdGhpcy5idWZmZXIucHVzaCh0LmtleSk7XG4gICAgICAgIGNvbnN0IGUgPSB0aGlzLmJ1ZmZlci5qb2luKFwiK1wiKTtcbiAgICAgICAgdGhpcy5idWZmZXIubGVuZ3RoID0gMDtcbiAgICAgICAgcmV0dXJuIGU7XG4gICAgICB9XG4gICAgICBlLktleWJvYXJkTWFuYWdlciA9IEtleWJvYXJkTWFuYWdlcjtcbiAgICAgIGNsYXNzIENvbG9yTWFuYWdlciB7XG4gICAgICAgIGdldCBfY29sb3JzKCkge1xuICAgICAgICAgIGNvbnN0IHQgPSBuZXcgTWFwKFtbXCJDYW52YXNUZXh0XCIsIG51bGxdLCBbXCJDYW52YXNcIiwgbnVsbF1dKTtcbiAgICAgICAgICAoMCwgci5nZXRDb2xvclZhbHVlcykodCk7XG4gICAgICAgICAgcmV0dXJuICgwLCBpLnNoYWRvdykodGhpcywgXCJfY29sb3JzXCIsIHQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnZlcnQodCkge1xuICAgICAgICAgIGNvbnN0IGUgPSAoMCwgci5nZXRSR0IpKHQpO1xuICAgICAgICAgIGlmICghd2luZG93Lm1hdGNoTWVkaWEoXCIoZm9yY2VkLWNvbG9yczogYWN0aXZlKVwiKS5tYXRjaGVzKSByZXR1cm4gZTtcbiAgICAgICAgICBmb3IgKGNvbnN0IFt0LCBuXSBvZiB0aGlzLl9jb2xvcnMpIGlmIChuLmV2ZXJ5KCh0LCBuKSA9PiB0ID09PSBlW25dKSkgcmV0dXJuIENvbG9yTWFuYWdlci5fY29sb3JzTWFwcGluZy5nZXQodCk7XG4gICAgICAgICAgcmV0dXJuIGU7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0SGV4Q29kZSh0KSB7XG4gICAgICAgICAgY29uc3QgZSA9IHRoaXMuX2NvbG9ycy5nZXQodCk7XG4gICAgICAgICAgcmV0dXJuIGUgPyBpLlV0aWwubWFrZUhleENvbG9yKC4uLmUpIDogdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgX2RlZmluZVByb3BlcnR5KENvbG9yTWFuYWdlciwgXCJfY29sb3JzTWFwcGluZ1wiLCBuZXcgTWFwKFtbXCJDYW52YXNUZXh0XCIsIFswLCAwLCAwXV0sIFtcIkNhbnZhc1wiLCBbMjU1LCAyNTUsIDI1NV1dXSkpO1xuICAgICAgZS5Db2xvck1hbmFnZXIgPSBDb2xvck1hbmFnZXI7XG4gICAgICB2YXIgX1cgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfRyA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xuICAgICAgdmFyIF9WID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICB2YXIgXyQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfWCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xuICAgICAgdmFyIF9LID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICB2YXIgX1kgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfSiA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xuICAgICAgdmFyIF9RID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICB2YXIgX1ogPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfdHQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfZXQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfbnQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfaXQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfcnQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfc3QgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfYXQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfb3QgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfbHQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfY3QgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfaHQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfZHQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfdXQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfcHQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfZnQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfZ3QgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfbXQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfYnQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfeXQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbiAgICAgIHZhciBfdnQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbiAgICAgIHZhciBfQXQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbiAgICAgIHZhciBfdDYgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbiAgICAgIHZhciBfeHQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbiAgICAgIHZhciBfd3QgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbiAgICAgIHZhciBfVHQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbiAgICAgIHZhciBfUHQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbiAgICAgIHZhciBfU3QgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbiAgICAgIHZhciBfQ3QgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbiAgICAgIHZhciBfRXQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbiAgICAgIGNsYXNzIEFubm90YXRpb25FZGl0b3JVSU1hbmFnZXIge1xuICAgICAgICBzdGF0aWMgZ2V0IF9rZXlib2FyZE1hbmFnZXIoKSB7XG4gICAgICAgICAgY29uc3QgdCA9IEFubm90YXRpb25FZGl0b3JVSU1hbmFnZXIucHJvdG90eXBlLFxuICAgICAgICAgICAgYXJyb3dDaGVja2VyID0gdCA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgICBhY3RpdmVFbGVtZW50OiBlXG4gICAgICAgICAgICAgIH0gPSBkb2N1bWVudDtcbiAgICAgICAgICAgICAgcmV0dXJuIGUgJiYgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHQsIF9idCkuY29udGFpbnMoZSkgJiYgdC5oYXNTb21ldGhpbmdUb0NvbnRyb2woKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlID0gdGhpcy5UUkFOU0xBVEVfU01BTEwsXG4gICAgICAgICAgICBuID0gdGhpcy5UUkFOU0xBVEVfQklHO1xuICAgICAgICAgIHJldHVybiAoMCwgaS5zaGFkb3cpKHRoaXMsIFwiX2tleWJvYXJkTWFuYWdlclwiLCBuZXcgS2V5Ym9hcmRNYW5hZ2VyKFtbW1wiY3RybCthXCIsIFwibWFjK21ldGErYVwiXSwgdC5zZWxlY3RBbGxdLCBbW1wiY3RybCt6XCIsIFwibWFjK21ldGErelwiXSwgdC51bmRvXSwgW1tcImN0cmwreVwiLCBcImN0cmwrc2hpZnQrelwiLCBcIm1hYyttZXRhK3NoaWZ0K3pcIiwgXCJjdHJsK3NoaWZ0K1pcIiwgXCJtYWMrbWV0YStzaGlmdCtaXCJdLCB0LnJlZG9dLCBbW1wiQmFja3NwYWNlXCIsIFwiYWx0K0JhY2tzcGFjZVwiLCBcImN0cmwrQmFja3NwYWNlXCIsIFwic2hpZnQrQmFja3NwYWNlXCIsIFwibWFjK0JhY2tzcGFjZVwiLCBcIm1hYythbHQrQmFja3NwYWNlXCIsIFwibWFjK2N0cmwrQmFja3NwYWNlXCIsIFwiRGVsZXRlXCIsIFwiY3RybCtEZWxldGVcIiwgXCJzaGlmdCtEZWxldGVcIiwgXCJtYWMrRGVsZXRlXCJdLCB0LmRlbGV0ZV0sIFtbXCJFc2NhcGVcIiwgXCJtYWMrRXNjYXBlXCJdLCB0LnVuc2VsZWN0QWxsXSwgW1tcIkFycm93TGVmdFwiLCBcIm1hYytBcnJvd0xlZnRcIl0sIHQudHJhbnNsYXRlU2VsZWN0ZWRFZGl0b3JzLCB7XG4gICAgICAgICAgICBhcmdzOiBbLWUsIDBdLFxuICAgICAgICAgICAgY2hlY2tlcjogYXJyb3dDaGVja2VyXG4gICAgICAgICAgfV0sIFtbXCJjdHJsK0Fycm93TGVmdFwiLCBcIm1hYytzaGlmdCtBcnJvd0xlZnRcIl0sIHQudHJhbnNsYXRlU2VsZWN0ZWRFZGl0b3JzLCB7XG4gICAgICAgICAgICBhcmdzOiBbLW4sIDBdLFxuICAgICAgICAgICAgY2hlY2tlcjogYXJyb3dDaGVja2VyXG4gICAgICAgICAgfV0sIFtbXCJBcnJvd1JpZ2h0XCIsIFwibWFjK0Fycm93UmlnaHRcIl0sIHQudHJhbnNsYXRlU2VsZWN0ZWRFZGl0b3JzLCB7XG4gICAgICAgICAgICBhcmdzOiBbZSwgMF0sXG4gICAgICAgICAgICBjaGVja2VyOiBhcnJvd0NoZWNrZXJcbiAgICAgICAgICB9XSwgW1tcImN0cmwrQXJyb3dSaWdodFwiLCBcIm1hYytzaGlmdCtBcnJvd1JpZ2h0XCJdLCB0LnRyYW5zbGF0ZVNlbGVjdGVkRWRpdG9ycywge1xuICAgICAgICAgICAgYXJnczogW24sIDBdLFxuICAgICAgICAgICAgY2hlY2tlcjogYXJyb3dDaGVja2VyXG4gICAgICAgICAgfV0sIFtbXCJBcnJvd1VwXCIsIFwibWFjK0Fycm93VXBcIl0sIHQudHJhbnNsYXRlU2VsZWN0ZWRFZGl0b3JzLCB7XG4gICAgICAgICAgICBhcmdzOiBbMCwgLWVdLFxuICAgICAgICAgICAgY2hlY2tlcjogYXJyb3dDaGVja2VyXG4gICAgICAgICAgfV0sIFtbXCJjdHJsK0Fycm93VXBcIiwgXCJtYWMrc2hpZnQrQXJyb3dVcFwiXSwgdC50cmFuc2xhdGVTZWxlY3RlZEVkaXRvcnMsIHtcbiAgICAgICAgICAgIGFyZ3M6IFswLCAtbl0sXG4gICAgICAgICAgICBjaGVja2VyOiBhcnJvd0NoZWNrZXJcbiAgICAgICAgICB9XSwgW1tcIkFycm93RG93blwiLCBcIm1hYytBcnJvd0Rvd25cIl0sIHQudHJhbnNsYXRlU2VsZWN0ZWRFZGl0b3JzLCB7XG4gICAgICAgICAgICBhcmdzOiBbMCwgZV0sXG4gICAgICAgICAgICBjaGVja2VyOiBhcnJvd0NoZWNrZXJcbiAgICAgICAgICB9XSwgW1tcImN0cmwrQXJyb3dEb3duXCIsIFwibWFjK3NoaWZ0K0Fycm93RG93blwiXSwgdC50cmFuc2xhdGVTZWxlY3RlZEVkaXRvcnMsIHtcbiAgICAgICAgICAgIGFyZ3M6IFswLCBuXSxcbiAgICAgICAgICAgIGNoZWNrZXI6IGFycm93Q2hlY2tlclxuICAgICAgICAgIH1dXSkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0cnVjdG9yKF90OCwgX2U2LCBfbjQsIF9pMykge1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLCBfRXQpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLCBfQ3QpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLCBfU3QpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLCBfUHQpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLCBfVHQpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLCBfd3QpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLCBfeHQpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLCBfdDYpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLCBfQXQpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLCBfdnQpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLCBfeXQpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9XLCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBudWxsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX0csIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IG5ldyBNYXAoKVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9WLCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBuZXcgTWFwKClcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfJCwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9YLCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBuZXcgQ29tbWFuZE1hbmFnZXIoKVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9LLCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiAwXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX1ksIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IG5ldyBTZXQoKVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9KLCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBudWxsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX1EsIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IG5ldyBTZXQoKVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9aLCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBudWxsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX3R0LCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBudWxsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2V0LCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBuZXcgSWRNYW5hZ2VyKClcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfbnQsIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6ICExXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2l0LCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBpLkFubm90YXRpb25FZGl0b3JUeXBlLk5PTkVcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfcnQsIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IG5ldyBTZXQoKVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9zdCwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9hdCwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5jb3B5LmJpbmQodGhpcylcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfb3QsIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuY3V0LmJpbmQodGhpcylcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfbHQsIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMucGFzdGUuYmluZCh0aGlzKVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9jdCwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5rZXlkb3duLmJpbmQodGhpcylcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfaHQsIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMub25FZGl0aW5nQWN0aW9uLmJpbmQodGhpcylcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfZHQsIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMub25QYWdlQ2hhbmdpbmcuYmluZCh0aGlzKVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF91dCwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5vblNjYWxlQ2hhbmdpbmcuYmluZCh0aGlzKVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9wdCwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5vblJvdGF0aW9uQ2hhbmdpbmcuYmluZCh0aGlzKVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9mdCwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICBpc0VkaXRpbmc6ICExLFxuICAgICAgICAgICAgICBpc0VtcHR5OiAhMCxcbiAgICAgICAgICAgICAgaGFzU29tZXRoaW5nVG9VbmRvOiAhMSxcbiAgICAgICAgICAgICAgaGFzU29tZXRoaW5nVG9SZWRvOiAhMSxcbiAgICAgICAgICAgICAgaGFzU2VsZWN0ZWRFZGl0b3I6ICExXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2d0LCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBbMCwgMF1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfbXQsIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfYnQsIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX2J0LCBfdDgpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWiwgX2U2KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1opLl9vbihcImVkaXRpbmdhY3Rpb25cIiwgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9odCkpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWikuX29uKFwicGFnZWNoYW5naW5nXCIsIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfZHQpKTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1opLl9vbihcInNjYWxlY2hhbmdpbmdcIiwgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF91dCkpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWikuX29uKFwicm90YXRpb25jaGFuZ2luZ1wiLCBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3B0KSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF8kLCBfbjQuYW5ub3RhdGlvblN0b3JhZ2UpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfdHQsIF9uNC5maWx0ZXJGYWN0b3J5KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX3N0LCBfaTMpO1xuICAgICAgICAgIHRoaXMudmlld1BhcmFtZXRlcnMgPSB7XG4gICAgICAgICAgICByZWFsU2NhbGU6IHIuUGl4ZWxzUGVySW5jaC5QREZfVE9fQ1NTX1VOSVRTLFxuICAgICAgICAgICAgcm90YXRpb246IDBcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGRlc3Ryb3koKSB7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfdnQsIF92dDIpLmNhbGwodGhpcyk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9aKS5fb2ZmKFwiZWRpdGluZ2FjdGlvblwiLCBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2h0KSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9aKS5fb2ZmKFwicGFnZWNoYW5naW5nXCIsIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfZHQpKTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1opLl9vZmYoXCJzY2FsZWNoYW5naW5nXCIsIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfdXQpKTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1opLl9vZmYoXCJyb3RhdGlvbmNoYW5naW5nXCIsIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfcHQpKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IHQgb2YgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9WKS52YWx1ZXMoKSkgdC5kZXN0cm95KCk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9WKS5jbGVhcigpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRykuY2xlYXIoKTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1EpLmNsZWFyKCk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9XLCBudWxsKTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3J0KS5jbGVhcigpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWCkuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBoY21GaWx0ZXIoKSB7XG4gICAgICAgICAgcmV0dXJuICgwLCBpLnNoYWRvdykodGhpcywgXCJoY21GaWx0ZXJcIiwgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9zdCkgPyBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3R0KS5hZGRIQ01GaWx0ZXIoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9zdCkuZm9yZWdyb3VuZCwgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9zdCkuYmFja2dyb3VuZCkgOiBcIm5vbmVcIik7XG4gICAgICAgIH1cbiAgICAgICAgb25QYWdlQ2hhbmdpbmcodCkge1xuICAgICAgICAgIGxldCB7XG4gICAgICAgICAgICBwYWdlTnVtYmVyOiBlXG4gICAgICAgICAgfSA9IHQ7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9LLCBlIC0gMSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9jdXNNYWluQ29udGFpbmVyKCkge1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfYnQpLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkU2hvdWxkUmVzY2FsZSh0KSB7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9RKS5hZGQodCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVtb3ZlU2hvdWxkUmVzY2FsZSh0KSB7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9RKS5kZWxldGUodCk7XG4gICAgICAgIH1cbiAgICAgICAgb25TY2FsZUNoYW5naW5nKHQpIHtcbiAgICAgICAgICBsZXQge1xuICAgICAgICAgICAgc2NhbGU6IGVcbiAgICAgICAgICB9ID0gdDtcbiAgICAgICAgICB0aGlzLmNvbW1pdE9yUmVtb3ZlKCk7XG4gICAgICAgICAgdGhpcy52aWV3UGFyYW1ldGVycy5yZWFsU2NhbGUgPSBlICogci5QaXhlbHNQZXJJbmNoLlBERl9UT19DU1NfVU5JVFM7XG4gICAgICAgICAgZm9yIChjb25zdCB0IG9mIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUSkpIHQub25TY2FsZUNoYW5naW5nKCk7XG4gICAgICAgIH1cbiAgICAgICAgb25Sb3RhdGlvbkNoYW5naW5nKHQpIHtcbiAgICAgICAgICBsZXQge1xuICAgICAgICAgICAgcGFnZXNSb3RhdGlvbjogZVxuICAgICAgICAgIH0gPSB0O1xuICAgICAgICAgIHRoaXMuY29tbWl0T3JSZW1vdmUoKTtcbiAgICAgICAgICB0aGlzLnZpZXdQYXJhbWV0ZXJzLnJvdGF0aW9uID0gZTtcbiAgICAgICAgfVxuICAgICAgICBhZGRUb0Fubm90YXRpb25TdG9yYWdlKHQpIHtcbiAgICAgICAgICB0LmlzRW1wdHkoKSB8fCAhX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF8kKSB8fCBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgXyQpLmhhcyh0LmlkKSB8fCBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgXyQpLnNldFZhbHVlKHQuaWQsIHQpO1xuICAgICAgICB9XG4gICAgICAgIGNvcHkodCkge1xuICAgICAgICAgIHQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1cpICYmIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfVykuY29tbWl0T3JSZW1vdmUoKTtcbiAgICAgICAgICBpZiAoIXRoaXMuaGFzU2VsZWN0aW9uKSByZXR1cm47XG4gICAgICAgICAgY29uc3QgZSA9IFtdO1xuICAgICAgICAgIGZvciAoY29uc3QgdCBvZiBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3J0KSkge1xuICAgICAgICAgICAgY29uc3QgbiA9IHQuc2VyaWFsaXplKCEwKTtcbiAgICAgICAgICAgIG4gJiYgZS5wdXNoKG4pO1xuICAgICAgICAgIH1cbiAgICAgICAgICAwICE9PSBlLmxlbmd0aCAmJiB0LmNsaXBib2FyZERhdGEuc2V0RGF0YShcImFwcGxpY2F0aW9uL3BkZmpzXCIsIEpTT04uc3RyaW5naWZ5KGUpKTtcbiAgICAgICAgfVxuICAgICAgICBjdXQodCkge1xuICAgICAgICAgIHRoaXMuY29weSh0KTtcbiAgICAgICAgICB0aGlzLmRlbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHBhc3RlKHQpIHtcbiAgICAgICAgICB0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgbGV0IGUgPSB0LmNsaXBib2FyZERhdGEuZ2V0RGF0YShcImFwcGxpY2F0aW9uL3BkZmpzXCIpO1xuICAgICAgICAgIGlmICghZSkgcmV0dXJuO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBlID0gSlNPTi5wYXJzZShlKTtcbiAgICAgICAgICB9IGNhdGNoICh0KSB7XG4gICAgICAgICAgICAoMCwgaS53YXJuKShcInBhc3RlOiBcXFwiXCIuY29uY2F0KHQubWVzc2FnZSwgXCJcXFwiLlwiKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShlKSkgcmV0dXJuO1xuICAgICAgICAgIHRoaXMudW5zZWxlY3RBbGwoKTtcbiAgICAgICAgICBjb25zdCBuID0gdGhpcy5jdXJyZW50TGF5ZXI7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHQgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaSBvZiBlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGUgPSBuLmRlc2VyaWFsaXplKGkpO1xuICAgICAgICAgICAgICBpZiAoIWUpIHJldHVybjtcbiAgICAgICAgICAgICAgdC5wdXNoKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY21kID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiB0KSBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9TdCwgX1N0MikuY2FsbCh0aGlzLCBlKTtcbiAgICAgICAgICAgICAgICBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9FdCwgX0V0MikuY2FsbCh0aGlzLCB0KTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdW5kbyA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgdCkgZS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuYWRkQ29tbWFuZHMoe1xuICAgICAgICAgICAgICBjbWQ6IGNtZCxcbiAgICAgICAgICAgICAgdW5kbzogdW5kbyxcbiAgICAgICAgICAgICAgbXVzdEV4ZWM6ICEwXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGNhdGNoICh0KSB7XG4gICAgICAgICAgICAoMCwgaS53YXJuKShcInBhc3RlOiBcXFwiXCIuY29uY2F0KHQubWVzc2FnZSwgXCJcXFwiLlwiKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGtleWRvd24odCkge1xuICAgICAgICAgIHZhciBfdGhpcyRnZXRBY3RpdmU7XG4gICAgICAgICAgKChfdGhpcyRnZXRBY3RpdmUgPSB0aGlzLmdldEFjdGl2ZSgpKSA9PT0gbnVsbCB8fCBfdGhpcyRnZXRBY3RpdmUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJGdldEFjdGl2ZS5zaG91bGRHZXRLZXlib2FyZEV2ZW50cygpKSB8fCBBbm5vdGF0aW9uRWRpdG9yVUlNYW5hZ2VyLl9rZXlib2FyZE1hbmFnZXIuZXhlYyh0aGlzLCB0KTtcbiAgICAgICAgfVxuICAgICAgICBvbkVkaXRpbmdBY3Rpb24odCkge1xuICAgICAgICAgIFtcInVuZG9cIiwgXCJyZWRvXCIsIFwiZGVsZXRlXCIsIFwic2VsZWN0QWxsXCJdLmluY2x1ZGVzKHQubmFtZSkgJiYgdGhpc1t0Lm5hbWVdKCk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0RWRpdGluZ1N0YXRlKHQpIHtcbiAgICAgICAgICBpZiAodCkge1xuICAgICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfeXQsIF95dDIpLmNhbGwodGhpcyk7XG4gICAgICAgICAgICBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9BdCwgX0F0MikuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX3h0LCBfeHQyKS5jYWxsKHRoaXMsIHtcbiAgICAgICAgICAgICAgaXNFZGl0aW5nOiBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2l0KSAhPT0gaS5Bbm5vdGF0aW9uRWRpdG9yVHlwZS5OT05FLFxuICAgICAgICAgICAgICBpc0VtcHR5OiBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9DdCwgX0N0MikuY2FsbCh0aGlzKSxcbiAgICAgICAgICAgICAgaGFzU29tZXRoaW5nVG9VbmRvOiBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1gpLmhhc1NvbWV0aGluZ1RvVW5kbygpLFxuICAgICAgICAgICAgICBoYXNTb21ldGhpbmdUb1JlZG86IF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWCkuaGFzU29tZXRoaW5nVG9SZWRvKCksXG4gICAgICAgICAgICAgIGhhc1NlbGVjdGVkRWRpdG9yOiAhMVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX3Z0LCBfdnQyKS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfdDYsIF90NykuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX3h0LCBfeHQyKS5jYWxsKHRoaXMsIHtcbiAgICAgICAgICAgICAgaXNFZGl0aW5nOiAhMVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlZ2lzdGVyRWRpdG9yVHlwZXModCkge1xuICAgICAgICAgIGlmICghX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9KKSkge1xuICAgICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9KLCB0KTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdCBvZiBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0opKSBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF93dCwgX3d0MikuY2FsbCh0aGlzLCB0LmRlZmF1bHRQcm9wZXJ0aWVzVG9VcGRhdGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBnZXRJZCgpIHtcbiAgICAgICAgICByZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ldCkuZ2V0SWQoKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgY3VycmVudExheWVyKCkge1xuICAgICAgICAgIHJldHVybiBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1YpLmdldChfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0spKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgY3VycmVudFBhZ2VJbmRleCgpIHtcbiAgICAgICAgICByZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9LKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRMYXllcih0KSB7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9WKS5zZXQodC5wYWdlSW5kZXgsIHQpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfbnQpID8gdC5lbmFibGUoKSA6IHQuZGlzYWJsZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZUxheWVyKHQpIHtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1YpLmRlbGV0ZSh0LnBhZ2VJbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlTW9kZSh0KSB7XG4gICAgICAgICAgbGV0IGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1sxXSA/IGFyZ3VtZW50c1sxXSA6IG51bGw7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9pdCwgdCk7XG4gICAgICAgICAgaWYgKHQgIT09IGkuQW5ub3RhdGlvbkVkaXRvclR5cGUuTk9ORSkge1xuICAgICAgICAgICAgdGhpcy5zZXRFZGl0aW5nU3RhdGUoITApO1xuICAgICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfVHQsIF9UdDIpLmNhbGwodGhpcyk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9WKS52YWx1ZXMoKSkgZS51cGRhdGVNb2RlKHQpO1xuICAgICAgICAgICAgaWYgKGUpIGZvciAoY29uc3QgdCBvZiBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0cpLnZhbHVlcygpKSBpZiAodC5hbm5vdGF0aW9uRWxlbWVudElkID09PSBlKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWQodCk7XG4gICAgICAgICAgICAgIHQuZW50ZXJJbkVkaXRNb2RlKCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldEVkaXRpbmdTdGF0ZSghMSk7XG4gICAgICAgICAgICBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9QdCwgX1B0MikuY2FsbCh0aGlzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlVG9vbGJhcih0KSB7XG4gICAgICAgICAgdCAhPT0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9pdCkgJiYgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9aKS5kaXNwYXRjaChcInN3aXRjaGFubm90YXRpb25lZGl0b3Jtb2RlXCIsIHtcbiAgICAgICAgICAgIHNvdXJjZTogdGhpcyxcbiAgICAgICAgICAgIG1vZGU6IHRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVQYXJhbXModCwgZSkge1xuICAgICAgICAgIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0opKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG4gb2YgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ydCkpIG4udXBkYXRlUGFyYW1zKHQsIGUpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBuIG9mIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfSikpIG4udXBkYXRlRGVmYXVsdFBhcmFtcyh0LCBlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZ2V0RWRpdG9ycyh0KSB7XG4gICAgICAgICAgY29uc3QgZSA9IFtdO1xuICAgICAgICAgIGZvciAoY29uc3QgbiBvZiBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0cpLnZhbHVlcygpKSBuLnBhZ2VJbmRleCA9PT0gdCAmJiBlLnB1c2gobik7XG4gICAgICAgICAgcmV0dXJuIGU7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0RWRpdG9yKHQpIHtcbiAgICAgICAgICByZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9HKS5nZXQodCk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkRWRpdG9yKHQpIHtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0cpLnNldCh0LmlkLCB0KTtcbiAgICAgICAgfVxuICAgICAgICByZW1vdmVFZGl0b3IodCkge1xuICAgICAgICAgIHZhciBfY2xhc3NQcml2YXRlRmllbGRHZXQ0O1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRykuZGVsZXRlKHQuaWQpO1xuICAgICAgICAgIHRoaXMudW5zZWxlY3QodCk7XG4gICAgICAgICAgdC5hbm5vdGF0aW9uRWxlbWVudElkICYmIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWSkuaGFzKHQuYW5ub3RhdGlvbkVsZW1lbnRJZCkgfHwgKChfY2xhc3NQcml2YXRlRmllbGRHZXQ0ID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF8kKSkgPT09IG51bGwgfHwgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0NCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2NsYXNzUHJpdmF0ZUZpZWxkR2V0NC5yZW1vdmUodC5pZCkpO1xuICAgICAgICB9XG4gICAgICAgIGFkZERlbGV0ZWRBbm5vdGF0aW9uRWxlbWVudCh0KSB7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZKS5hZGQodC5hbm5vdGF0aW9uRWxlbWVudElkKTtcbiAgICAgICAgICB0LmRlbGV0ZWQgPSAhMDtcbiAgICAgICAgfVxuICAgICAgICBpc0RlbGV0ZWRBbm5vdGF0aW9uRWxlbWVudCh0KSB7XG4gICAgICAgICAgcmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWSkuaGFzKHQpO1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZURlbGV0ZWRBbm5vdGF0aW9uRWxlbWVudCh0KSB7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZKS5kZWxldGUodC5hbm5vdGF0aW9uRWxlbWVudElkKTtcbiAgICAgICAgICB0LmRlbGV0ZWQgPSAhMTtcbiAgICAgICAgfVxuICAgICAgICBzZXRBY3RpdmVFZGl0b3IodCkge1xuICAgICAgICAgIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1cpICE9PSB0KSB7XG4gICAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1csIHQpO1xuICAgICAgICAgICAgdCAmJiBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF93dCwgX3d0MikuY2FsbCh0aGlzLCB0LnByb3BlcnRpZXNUb1VwZGF0ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRvZ2dsZVNlbGVjdGVkKHQpIHtcbiAgICAgICAgICBpZiAoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ydCkuaGFzKHQpKSB7XG4gICAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3J0KS5kZWxldGUodCk7XG4gICAgICAgICAgICB0LnVuc2VsZWN0KCk7XG4gICAgICAgICAgICBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF94dCwgX3h0MikuY2FsbCh0aGlzLCB7XG4gICAgICAgICAgICAgIGhhc1NlbGVjdGVkRWRpdG9yOiB0aGlzLmhhc1NlbGVjdGlvblxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfcnQpLmFkZCh0KTtcbiAgICAgICAgICAgIHQuc2VsZWN0KCk7XG4gICAgICAgICAgICBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF93dCwgX3d0MikuY2FsbCh0aGlzLCB0LnByb3BlcnRpZXNUb1VwZGF0ZSk7XG4gICAgICAgICAgICBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF94dCwgX3h0MikuY2FsbCh0aGlzLCB7XG4gICAgICAgICAgICAgIGhhc1NlbGVjdGVkRWRpdG9yOiAhMFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNldFNlbGVjdGVkKHQpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ydCkpIGUgIT09IHQgJiYgZS51bnNlbGVjdCgpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfcnQpLmNsZWFyKCk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ydCkuYWRkKHQpO1xuICAgICAgICAgIHQuc2VsZWN0KCk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfd3QsIF93dDIpLmNhbGwodGhpcywgdC5wcm9wZXJ0aWVzVG9VcGRhdGUpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX3h0LCBfeHQyKS5jYWxsKHRoaXMsIHtcbiAgICAgICAgICAgIGhhc1NlbGVjdGVkRWRpdG9yOiAhMFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlzU2VsZWN0ZWQodCkge1xuICAgICAgICAgIHJldHVybiBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3J0KS5oYXModCk7XG4gICAgICAgIH1cbiAgICAgICAgdW5zZWxlY3QodCkge1xuICAgICAgICAgIHQudW5zZWxlY3QoKTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3J0KS5kZWxldGUodCk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfeHQsIF94dDIpLmNhbGwodGhpcywge1xuICAgICAgICAgICAgaGFzU2VsZWN0ZWRFZGl0b3I6IHRoaXMuaGFzU2VsZWN0aW9uXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGhhc1NlbGVjdGlvbigpIHtcbiAgICAgICAgICByZXR1cm4gMCAhPT0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ydCkuc2l6ZTtcbiAgICAgICAgfVxuICAgICAgICBzdG9wVW5kb0FjY3VtdWxhdGlvbigpIHtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1gpLnN0b3BVbmRvQWNjdW11bGF0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgdW5kbygpIHtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1gpLnVuZG8oKTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF94dCwgX3h0MikuY2FsbCh0aGlzLCB7XG4gICAgICAgICAgICBoYXNTb21ldGhpbmdUb1VuZG86IF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWCkuaGFzU29tZXRoaW5nVG9VbmRvKCksXG4gICAgICAgICAgICBoYXNTb21ldGhpbmdUb1JlZG86ICEwLFxuICAgICAgICAgICAgaXNFbXB0eTogX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfQ3QsIF9DdDIpLmNhbGwodGhpcylcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZWRvKCkge1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWCkucmVkbygpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX3h0LCBfeHQyKS5jYWxsKHRoaXMsIHtcbiAgICAgICAgICAgIGhhc1NvbWV0aGluZ1RvVW5kbzogITAsXG4gICAgICAgICAgICBoYXNTb21ldGhpbmdUb1JlZG86IF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWCkuaGFzU29tZXRoaW5nVG9SZWRvKCksXG4gICAgICAgICAgICBpc0VtcHR5OiBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9DdCwgX0N0MikuY2FsbCh0aGlzKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGFkZENvbW1hbmRzKHQpIHtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1gpLmFkZCh0KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF94dCwgX3h0MikuY2FsbCh0aGlzLCB7XG4gICAgICAgICAgICBoYXNTb21ldGhpbmdUb1VuZG86ICEwLFxuICAgICAgICAgICAgaGFzU29tZXRoaW5nVG9SZWRvOiAhMSxcbiAgICAgICAgICAgIGlzRW1wdHk6IF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX0N0LCBfQ3QyKS5jYWxsKHRoaXMpXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZGVsZXRlKCkge1xuICAgICAgICAgIHRoaXMuY29tbWl0T3JSZW1vdmUoKTtcbiAgICAgICAgICBpZiAoIXRoaXMuaGFzU2VsZWN0aW9uKSByZXR1cm47XG4gICAgICAgICAgY29uc3QgdCA9IFsuLi5fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3J0KV07XG4gICAgICAgICAgdGhpcy5hZGRDb21tYW5kcyh7XG4gICAgICAgICAgICBjbWQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIHQpIGUucmVtb3ZlKCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5kbzogKCkgPT4ge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgdCkgX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfU3QsIF9TdDIpLmNhbGwodGhpcywgZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbXVzdEV4ZWM6ICEwXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29tbWl0T3JSZW1vdmUoKSB7XG4gICAgICAgICAgdmFyIF9jbGFzc1ByaXZhdGVGaWVsZEdldDU7XG4gICAgICAgICAgKF9jbGFzc1ByaXZhdGVGaWVsZEdldDUgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1cpKSA9PT0gbnVsbCB8fCBfY2xhc3NQcml2YXRlRmllbGRHZXQ1ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfY2xhc3NQcml2YXRlRmllbGRHZXQ1LmNvbW1pdE9yUmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaGFzU29tZXRoaW5nVG9Db250cm9sKCkge1xuICAgICAgICAgIHJldHVybiBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1cpIHx8IHRoaXMuaGFzU2VsZWN0aW9uO1xuICAgICAgICB9XG4gICAgICAgIHNlbGVjdEFsbCgpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHQgb2YgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ydCkpIHQuY29tbWl0KCk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfRXQsIF9FdDIpLmNhbGwodGhpcywgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9HKS52YWx1ZXMoKSk7XG4gICAgICAgIH1cbiAgICAgICAgdW5zZWxlY3RBbGwoKSB7XG4gICAgICAgICAgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfVykpIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfVykuY29tbWl0T3JSZW1vdmUoKTtlbHNlIGlmICh0aGlzLmhhc1NlbGVjdGlvbikge1xuICAgICAgICAgICAgZm9yIChjb25zdCB0IG9mIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfcnQpKSB0LnVuc2VsZWN0KCk7XG4gICAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3J0KS5jbGVhcigpO1xuICAgICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfeHQsIF94dDIpLmNhbGwodGhpcywge1xuICAgICAgICAgICAgICBoYXNTZWxlY3RlZEVkaXRvcjogITFcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0cmFuc2xhdGVTZWxlY3RlZEVkaXRvcnModCwgZSkge1xuICAgICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzJdICYmIGFyZ3VtZW50c1syXSB8fCB0aGlzLmNvbW1pdE9yUmVtb3ZlKCk7XG4gICAgICAgICAgaWYgKCF0aGlzLmhhc1NlbGVjdGlvbikgcmV0dXJuO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfZ3QpWzBdICs9IHQ7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ndClbMV0gKz0gZTtcbiAgICAgICAgICBjb25zdCBbbiwgaV0gPSBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2d0KSxcbiAgICAgICAgICAgIHIgPSBbLi4uX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ydCldO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfbXQpICYmIGNsZWFyVGltZW91dChfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX210KSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9tdCwgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX210LCBudWxsKTtcbiAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfZ3QpWzBdID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ndClbMV0gPSAwO1xuICAgICAgICAgICAgdGhpcy5hZGRDb21tYW5kcyh7XG4gICAgICAgICAgICAgIGNtZDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdCBvZiByKSBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0cpLmhhcyh0LmlkKSAmJiB0LnRyYW5zbGF0ZUluUGFnZShuLCBpKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdW5kbzogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdCBvZiByKSBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0cpLmhhcyh0LmlkKSAmJiB0LnRyYW5zbGF0ZUluUGFnZSgtbiwgLWkpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBtdXN0RXhlYzogITFcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0sIDFlMykpO1xuICAgICAgICAgIGZvciAoY29uc3QgbiBvZiByKSBuLnRyYW5zbGF0ZUluUGFnZSh0LCBlKTtcbiAgICAgICAgfVxuICAgICAgICBpc0FjdGl2ZSh0KSB7XG4gICAgICAgICAgcmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfVykgPT09IHQ7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0QWN0aXZlKCkge1xuICAgICAgICAgIHJldHVybiBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1cpO1xuICAgICAgICB9XG4gICAgICAgIGdldE1vZGUoKSB7XG4gICAgICAgICAgcmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfaXQpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBpbWFnZU1hbmFnZXIoKSB7XG4gICAgICAgICAgcmV0dXJuICgwLCBpLnNoYWRvdykodGhpcywgXCJpbWFnZU1hbmFnZXJcIiwgbmV3IEltYWdlTWFuYWdlcigpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX3l0MigpIHtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfY3QpLCB7XG4gICAgICAgICAgY2FwdHVyZTogITBcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfdnQyKCkge1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9jdCksIHtcbiAgICAgICAgICBjYXB0dXJlOiAhMFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF9BdDIoKSB7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjb3B5XCIsIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfYXQpKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImN1dFwiLCBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX290KSk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJwYXN0ZVwiLCBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2x0KSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfdDcoKSB7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjb3B5XCIsIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfYXQpKTtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImN1dFwiLCBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX290KSk7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwYXN0ZVwiLCBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2x0KSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfeHQyKHQpIHtcbiAgICAgICAgT2JqZWN0LmVudHJpZXModCkuc29tZSh0ID0+IHtcbiAgICAgICAgICBsZXQgW2UsIG5dID0gdDtcbiAgICAgICAgICByZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9mdClbZV0gIT09IG47XG4gICAgICAgIH0pICYmIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWikuZGlzcGF0Y2goXCJhbm5vdGF0aW9uZWRpdG9yc3RhdGVzY2hhbmdlZFwiLCB7XG4gICAgICAgICAgc291cmNlOiB0aGlzLFxuICAgICAgICAgIGRldGFpbHM6IE9iamVjdC5hc3NpZ24oX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9mdCksIHQpXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX3d0Mih0KSB7XG4gICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWikuZGlzcGF0Y2goXCJhbm5vdGF0aW9uZWRpdG9ycGFyYW1zY2hhbmdlZFwiLCB7XG4gICAgICAgICAgc291cmNlOiB0aGlzLFxuICAgICAgICAgIGRldGFpbHM6IHRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfVHQyKCkge1xuICAgICAgICBpZiAoIV9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfbnQpKSB7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9udCwgITApO1xuICAgICAgICAgIGZvciAoY29uc3QgdCBvZiBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1YpLnZhbHVlcygpKSB0LmVuYWJsZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfUHQyKCkge1xuICAgICAgICB0aGlzLnVuc2VsZWN0QWxsKCk7XG4gICAgICAgIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX250KSkge1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfbnQsICExKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IHQgb2YgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9WKS52YWx1ZXMoKSkgdC5kaXNhYmxlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF9TdDIodCkge1xuICAgICAgICBjb25zdCBlID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9WKS5nZXQodC5wYWdlSW5kZXgpO1xuICAgICAgICBlID8gZS5hZGRPclJlYnVpbGQodCkgOiB0aGlzLmFkZEVkaXRvcih0KTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF9DdDIoKSB7XG4gICAgICAgIGlmICgwID09PSBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0cpLnNpemUpIHJldHVybiAhMDtcbiAgICAgICAgaWYgKDEgPT09IF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRykuc2l6ZSkgZm9yIChjb25zdCB0IG9mIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRykudmFsdWVzKCkpIHJldHVybiB0LmlzRW1wdHkoKTtcbiAgICAgICAgcmV0dXJuICExO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX0V0Mih0KSB7XG4gICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfcnQpLmNsZWFyKCk7XG4gICAgICAgIGZvciAoY29uc3QgZSBvZiB0KSBpZiAoIWUuaXNFbXB0eSgpKSB7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ydCkuYWRkKGUpO1xuICAgICAgICAgIGUuc2VsZWN0KCk7XG4gICAgICAgIH1cbiAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfeHQsIF94dDIpLmNhbGwodGhpcywge1xuICAgICAgICAgIGhhc1NlbGVjdGVkRWRpdG9yOiAhMFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIF9kZWZpbmVQcm9wZXJ0eShBbm5vdGF0aW9uRWRpdG9yVUlNYW5hZ2VyLCBcIlRSQU5TTEFURV9TTUFMTFwiLCAxKTtcbiAgICAgIF9kZWZpbmVQcm9wZXJ0eShBbm5vdGF0aW9uRWRpdG9yVUlNYW5hZ2VyLCBcIlRSQU5TTEFURV9CSUdcIiwgMTApO1xuICAgICAgZS5Bbm5vdGF0aW9uRWRpdG9yVUlNYW5hZ2VyID0gQW5ub3RhdGlvbkVkaXRvclVJTWFuYWdlcjtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICAgIHZhciBpID0gbigzKSxcbiAgICAgICAgciA9IG4oNiksXG4gICAgICAgIHMgPSBuKDQpLFxuICAgICAgICBhID0gbigyNCksXG4gICAgICAgIG8gPSBuKDE0KSxcbiAgICAgICAgbCA9IG4oOCksXG4gICAgICAgIGMgPSBuKDIxKSxcbiAgICAgICAgaCA9IG4oMjApLFxuICAgICAgICBkID0gbig5MSksXG4gICAgICAgIHUgPSBuKDM5KSxcbiAgICAgICAgcCA9IG4oNzcpLFxuICAgICAgICBmID0gbig2NCksXG4gICAgICAgIGcgPSBuKDE1OCksXG4gICAgICAgIG0gPSBuKDcpLFxuICAgICAgICBiID0gbigxNjYpLFxuICAgICAgICB2ID0gbigyNyksXG4gICAgICAgIHkgPSBzLkpTT04sXG4gICAgICAgIEEgPSBzLk51bWJlcixcbiAgICAgICAgXyA9IHMuU3ludGF4RXJyb3IsXG4gICAgICAgIFMgPSB5ICYmIHkucGFyc2UsXG4gICAgICAgIEUgPSBhKFwiT2JqZWN0XCIsIFwia2V5c1wiKSxcbiAgICAgICAgeCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsXG4gICAgICAgIHcgPSBvKFwiXCIuY2hhckF0KSxcbiAgICAgICAgQyA9IG8oXCJcIi5zbGljZSksXG4gICAgICAgIFQgPSBvKC8uLy5leGVjKSxcbiAgICAgICAgUCA9IG8oW10ucHVzaCksXG4gICAgICAgIGsgPSAvXlxcZCQvLFxuICAgICAgICBNID0gL15bMS05XSQvLFxuICAgICAgICBSID0gL14oLXxcXGQpJC8sXG4gICAgICAgIEkgPSAvXltcXHRcXG5cXHIgXSQvLFxuICAgICAgICBpbnRlcm5hbGl6ZSA9IGZ1bmN0aW9uIGludGVybmFsaXplKHQsIGUsIG4sIGkpIHtcbiAgICAgICAgICB2YXIgcixcbiAgICAgICAgICAgIHMsXG4gICAgICAgICAgICBhLFxuICAgICAgICAgICAgbyxcbiAgICAgICAgICAgIGMsXG4gICAgICAgICAgICBwID0gdFtlXSxcbiAgICAgICAgICAgIGcgPSBpICYmIHAgPT09IGkudmFsdWUsXG4gICAgICAgICAgICBtID0gZyAmJiBcInN0cmluZ1wiID09IHR5cGVvZiBpLnNvdXJjZSA/IHtcbiAgICAgICAgICAgICAgc291cmNlOiBpLnNvdXJjZVxuICAgICAgICAgICAgfSA6IHt9O1xuICAgICAgICAgIGlmIChoKHApKSB7XG4gICAgICAgICAgICB2YXIgYiA9IGQocCksXG4gICAgICAgICAgICAgIHYgPSBnID8gaS5ub2RlcyA6IGIgPyBbXSA6IHt9O1xuICAgICAgICAgICAgaWYgKGIpIHtcbiAgICAgICAgICAgICAgciA9IHYubGVuZ3RoO1xuICAgICAgICAgICAgICBhID0gZihwKTtcbiAgICAgICAgICAgICAgZm9yIChvID0gMDsgbyA8IGE7IG8rKykgaW50ZXJuYWxpemVQcm9wZXJ0eShwLCBvLCBpbnRlcm5hbGl6ZShwLCBcIlwiICsgbywgbiwgbyA8IHIgPyB2W29dIDogdm9pZCAwKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzID0gRShwKTtcbiAgICAgICAgICAgICAgYSA9IGYocyk7XG4gICAgICAgICAgICAgIGZvciAobyA9IDA7IG8gPCBhOyBvKyspIHtcbiAgICAgICAgICAgICAgICBjID0gc1tvXTtcbiAgICAgICAgICAgICAgICBpbnRlcm5hbGl6ZVByb3BlcnR5KHAsIGMsIGludGVybmFsaXplKHAsIGMsIG4sIHUodiwgYykgPyB2W2NdIDogdm9pZCAwKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGwobiwgdCwgZSwgcCwgbSk7XG4gICAgICAgIH0sXG4gICAgICAgIGludGVybmFsaXplUHJvcGVydHkgPSBmdW5jdGlvbiBpbnRlcm5hbGl6ZVByb3BlcnR5KHQsIGUsIG4pIHtcbiAgICAgICAgICBpZiAocikge1xuICAgICAgICAgICAgdmFyIGkgPSB4KHQsIGUpO1xuICAgICAgICAgICAgaWYgKGkgJiYgIWkuY29uZmlndXJhYmxlKSByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHZvaWQgMCA9PT0gbiA/IGRlbGV0ZSB0W2VdIDogZyh0LCBlLCBuKTtcbiAgICAgICAgfSxcbiAgICAgICAgTm9kZSA9IGZ1bmN0aW9uIE5vZGUodCwgZSwgbiwgaSkge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB0O1xuICAgICAgICAgIHRoaXMuZW5kID0gZTtcbiAgICAgICAgICB0aGlzLnNvdXJjZSA9IG47XG4gICAgICAgICAgdGhpcy5ub2RlcyA9IGk7XG4gICAgICAgIH0sXG4gICAgICAgIENvbnRleHQgPSBmdW5jdGlvbiBDb250ZXh0KHQsIGUpIHtcbiAgICAgICAgICB0aGlzLnNvdXJjZSA9IHQ7XG4gICAgICAgICAgdGhpcy5pbmRleCA9IGU7XG4gICAgICAgIH07XG4gICAgICBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICAgICAgZm9yazogZnVuY3Rpb24gZm9yayh0KSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBDb250ZXh0KHRoaXMuc291cmNlLCB0KTtcbiAgICAgICAgfSxcbiAgICAgICAgcGFyc2U6IGZ1bmN0aW9uIHBhcnNlKCkge1xuICAgICAgICAgIHZhciB0ID0gdGhpcy5zb3VyY2UsXG4gICAgICAgICAgICBlID0gdGhpcy5za2lwKEksIHRoaXMuaW5kZXgpLFxuICAgICAgICAgICAgbiA9IHRoaXMuZm9yayhlKSxcbiAgICAgICAgICAgIGkgPSB3KHQsIGUpO1xuICAgICAgICAgIGlmIChUKFIsIGkpKSByZXR1cm4gbi5udW1iZXIoKTtcbiAgICAgICAgICBzd2l0Y2ggKGkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJ7XCI6XG4gICAgICAgICAgICAgIHJldHVybiBuLm9iamVjdCgpO1xuICAgICAgICAgICAgY2FzZSBcIltcIjpcbiAgICAgICAgICAgICAgcmV0dXJuIG4uYXJyYXkoKTtcbiAgICAgICAgICAgIGNhc2UgJ1wiJzpcbiAgICAgICAgICAgICAgcmV0dXJuIG4uc3RyaW5nKCk7XG4gICAgICAgICAgICBjYXNlIFwidFwiOlxuICAgICAgICAgICAgICByZXR1cm4gbi5rZXl3b3JkKCEwKTtcbiAgICAgICAgICAgIGNhc2UgXCJmXCI6XG4gICAgICAgICAgICAgIHJldHVybiBuLmtleXdvcmQoITEpO1xuICAgICAgICAgICAgY2FzZSBcIm5cIjpcbiAgICAgICAgICAgICAgcmV0dXJuIG4ua2V5d29yZChudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgXygnVW5leHBlY3RlZCBjaGFyYWN0ZXI6IFwiJyArIGkgKyAnXCIgYXQ6ICcgKyBlKTtcbiAgICAgICAgfSxcbiAgICAgICAgbm9kZTogZnVuY3Rpb24gbm9kZSh0LCBlLCBuLCBpLCByKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBOb2RlKGUsIGksIHQgPyBudWxsIDogQyh0aGlzLnNvdXJjZSwgbiwgaSksIHIpO1xuICAgICAgICB9LFxuICAgICAgICBvYmplY3Q6IGZ1bmN0aW9uIG9iamVjdCgpIHtcbiAgICAgICAgICBmb3IgKHZhciB0ID0gdGhpcy5zb3VyY2UsIGUgPSB0aGlzLmluZGV4ICsgMSwgbiA9ICExLCBpID0ge30sIHIgPSB7fTsgZSA8IHQubGVuZ3RoOykge1xuICAgICAgICAgICAgZSA9IHRoaXMudW50aWwoWydcIicsIFwifVwiXSwgZSk7XG4gICAgICAgICAgICBpZiAoXCJ9XCIgPT0gdyh0LCBlKSAmJiAhbikge1xuICAgICAgICAgICAgICBlKys7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHMgPSB0aGlzLmZvcmsoZSkuc3RyaW5nKCksXG4gICAgICAgICAgICAgIGEgPSBzLnZhbHVlO1xuICAgICAgICAgICAgZSA9IHMuZW5kO1xuICAgICAgICAgICAgZSA9IHRoaXMudW50aWwoW1wiOlwiXSwgZSkgKyAxO1xuICAgICAgICAgICAgZSA9IHRoaXMuc2tpcChJLCBlKTtcbiAgICAgICAgICAgIHMgPSB0aGlzLmZvcmsoZSkucGFyc2UoKTtcbiAgICAgICAgICAgIGcociwgYSwgcyk7XG4gICAgICAgICAgICBnKGksIGEsIHMudmFsdWUpO1xuICAgICAgICAgICAgZSA9IHRoaXMudW50aWwoW1wiLFwiLCBcIn1cIl0sIHMuZW5kKTtcbiAgICAgICAgICAgIHZhciBvID0gdyh0LCBlKTtcbiAgICAgICAgICAgIGlmIChcIixcIiA9PSBvKSB7XG4gICAgICAgICAgICAgIG4gPSAhMDtcbiAgICAgICAgICAgICAgZSsrO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcIn1cIiA9PSBvKSB7XG4gICAgICAgICAgICAgIGUrKztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aGlzLm5vZGUoMSwgaSwgdGhpcy5pbmRleCwgZSwgcik7XG4gICAgICAgIH0sXG4gICAgICAgIGFycmF5OiBmdW5jdGlvbiBhcnJheSgpIHtcbiAgICAgICAgICBmb3IgKHZhciB0ID0gdGhpcy5zb3VyY2UsIGUgPSB0aGlzLmluZGV4ICsgMSwgbiA9ICExLCBpID0gW10sIHIgPSBbXTsgZSA8IHQubGVuZ3RoOykge1xuICAgICAgICAgICAgZSA9IHRoaXMuc2tpcChJLCBlKTtcbiAgICAgICAgICAgIGlmIChcIl1cIiA9PSB3KHQsIGUpICYmICFuKSB7XG4gICAgICAgICAgICAgIGUrKztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgcyA9IHRoaXMuZm9yayhlKS5wYXJzZSgpO1xuICAgICAgICAgICAgUChyLCBzKTtcbiAgICAgICAgICAgIFAoaSwgcy52YWx1ZSk7XG4gICAgICAgICAgICBlID0gdGhpcy51bnRpbChbXCIsXCIsIFwiXVwiXSwgcy5lbmQpO1xuICAgICAgICAgICAgaWYgKFwiLFwiID09IHcodCwgZSkpIHtcbiAgICAgICAgICAgICAgbiA9ICEwO1xuICAgICAgICAgICAgICBlKys7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFwiXVwiID09IHcodCwgZSkpIHtcbiAgICAgICAgICAgICAgZSsrO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRoaXMubm9kZSgxLCBpLCB0aGlzLmluZGV4LCBlLCByKTtcbiAgICAgICAgfSxcbiAgICAgICAgc3RyaW5nOiBmdW5jdGlvbiBzdHJpbmcoKSB7XG4gICAgICAgICAgdmFyIHQgPSB0aGlzLmluZGV4LFxuICAgICAgICAgICAgZSA9IGIodGhpcy5zb3VyY2UsIHRoaXMuaW5kZXggKyAxKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5ub2RlKDAsIGUudmFsdWUsIHQsIGUuZW5kKTtcbiAgICAgICAgfSxcbiAgICAgICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoKSB7XG4gICAgICAgICAgdmFyIHQgPSB0aGlzLnNvdXJjZSxcbiAgICAgICAgICAgIGUgPSB0aGlzLmluZGV4LFxuICAgICAgICAgICAgbiA9IGU7XG4gICAgICAgICAgXCItXCIgPT0gdyh0LCBuKSAmJiBuKys7XG4gICAgICAgICAgaWYgKFwiMFwiID09IHcodCwgbikpIG4rKztlbHNlIHtcbiAgICAgICAgICAgIGlmICghVChNLCB3KHQsIG4pKSkgdGhyb3cgXyhcIkZhaWxlZCB0byBwYXJzZSBudW1iZXIgYXQ6IFwiICsgbik7XG4gICAgICAgICAgICBuID0gdGhpcy5za2lwKGssICsrbik7XG4gICAgICAgICAgfVxuICAgICAgICAgIFwiLlwiID09IHcodCwgbikgJiYgKG4gPSB0aGlzLnNraXAoaywgKytuKSk7XG4gICAgICAgICAgaWYgKFwiZVwiID09IHcodCwgbikgfHwgXCJFXCIgPT0gdyh0LCBuKSkge1xuICAgICAgICAgICAgbisrO1xuICAgICAgICAgICAgXCIrXCIgIT0gdyh0LCBuKSAmJiBcIi1cIiAhPSB3KHQsIG4pIHx8IG4rKztcbiAgICAgICAgICAgIGlmIChuID09IChuID0gdGhpcy5za2lwKGssIG4pKSkgdGhyb3cgXyhcIkZhaWxlZCB0byBwYXJzZSBudW1iZXIncyBleHBvbmVudCB2YWx1ZSBhdDogXCIgKyBuKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRoaXMubm9kZSgwLCBBKEModCwgZSwgbikpLCBlLCBuKTtcbiAgICAgICAgfSxcbiAgICAgICAga2V5d29yZDogZnVuY3Rpb24ga2V5d29yZCh0KSB7XG4gICAgICAgICAgdmFyIGUgPSBcIlwiICsgdCxcbiAgICAgICAgICAgIG4gPSB0aGlzLmluZGV4LFxuICAgICAgICAgICAgaSA9IG4gKyBlLmxlbmd0aDtcbiAgICAgICAgICBpZiAoQyh0aGlzLnNvdXJjZSwgbiwgaSkgIT0gZSkgdGhyb3cgXyhcIkZhaWxlZCB0byBwYXJzZSB2YWx1ZSBhdDogXCIgKyBuKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5ub2RlKDAsIHQsIG4sIGkpO1xuICAgICAgICB9LFxuICAgICAgICBza2lwOiBmdW5jdGlvbiBza2lwKHQsIGUpIHtcbiAgICAgICAgICBmb3IgKHZhciBuID0gdGhpcy5zb3VyY2U7IGUgPCBuLmxlbmd0aCAmJiBUKHQsIHcobiwgZSkpOyBlKyspO1xuICAgICAgICAgIHJldHVybiBlO1xuICAgICAgICB9LFxuICAgICAgICB1bnRpbDogZnVuY3Rpb24gdW50aWwodCwgZSkge1xuICAgICAgICAgIGUgPSB0aGlzLnNraXAoSSwgZSk7XG4gICAgICAgICAgZm9yICh2YXIgbiA9IHcodGhpcy5zb3VyY2UsIGUpLCBpID0gMDsgaSA8IHQubGVuZ3RoOyBpKyspIGlmICh0W2ldID09IG4pIHJldHVybiBlO1xuICAgICAgICAgIHRocm93IF8oJ1VuZXhwZWN0ZWQgY2hhcmFjdGVyOiBcIicgKyBuICsgJ1wiIGF0OiAnICsgZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICB2YXIgRCA9IG0oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciB0LFxuICAgICAgICAgICAgZSA9IFwiOTAwNzE5OTI1NDc0MDk5M1wiO1xuICAgICAgICAgIFMoZSwgZnVuY3Rpb24gKGUsIG4sIGkpIHtcbiAgICAgICAgICAgIHQgPSBpLnNvdXJjZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gdCAhPT0gZTtcbiAgICAgICAgfSksXG4gICAgICAgIE8gPSB2ICYmICFtKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gMSAvIFMoXCItMCBcXHRcIikgIT0gLTEgLyAwO1xuICAgICAgICB9KTtcbiAgICAgIGkoe1xuICAgICAgICB0YXJnZXQ6IFwiSlNPTlwiLFxuICAgICAgICBzdGF0OiAhMCxcbiAgICAgICAgZm9yY2VkOiBEXG4gICAgICB9LCB7XG4gICAgICAgIHBhcnNlOiBmdW5jdGlvbiBwYXJzZSh0LCBlKSB7XG4gICAgICAgICAgcmV0dXJuIE8gJiYgIWMoZSkgPyBTKHQpIDogZnVuY3Rpb24gKHQsIGUpIHtcbiAgICAgICAgICAgIHQgPSBwKHQpO1xuICAgICAgICAgICAgdmFyIG4gPSBuZXcgQ29udGV4dCh0LCAwLCBcIlwiKSxcbiAgICAgICAgICAgICAgaSA9IG4ucGFyc2UoKSxcbiAgICAgICAgICAgICAgciA9IGkudmFsdWUsXG4gICAgICAgICAgICAgIHMgPSBuLnNraXAoSSwgaS5lbmQpO1xuICAgICAgICAgICAgaWYgKHMgPCB0Lmxlbmd0aCkgdGhyb3cgXygnVW5leHBlY3RlZCBleHRyYSBjaGFyYWN0ZXI6IFwiJyArIHcodCwgcykgKyAnXCIgYWZ0ZXIgdGhlIHBhcnNlZCBkYXRhIGF0OiAnICsgcyk7XG4gICAgICAgICAgICByZXR1cm4gYyhlKSA/IGludGVybmFsaXplKHtcbiAgICAgICAgICAgICAgXCJcIjogclxuICAgICAgICAgICAgfSwgXCJcIiwgZSwgaSkgOiByO1xuICAgICAgICAgIH0odCwgZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICB2YXIgaSA9IG4oMTQpLFxuICAgICAgICByID0gbigzOSksXG4gICAgICAgIHMgPSBTeW50YXhFcnJvcixcbiAgICAgICAgYSA9IHBhcnNlSW50LFxuICAgICAgICBvID0gU3RyaW5nLmZyb21DaGFyQ29kZSxcbiAgICAgICAgbCA9IGkoXCJcIi5jaGFyQXQpLFxuICAgICAgICBjID0gaShcIlwiLnNsaWNlKSxcbiAgICAgICAgaCA9IGkoLy4vLmV4ZWMpLFxuICAgICAgICBkID0ge1xuICAgICAgICAgICdcXFxcXCInOiAnXCInLFxuICAgICAgICAgIFwiXFxcXFxcXFxcIjogXCJcXFxcXCIsXG4gICAgICAgICAgXCJcXFxcL1wiOiBcIi9cIixcbiAgICAgICAgICBcIlxcXFxiXCI6IFwiXFxiXCIsXG4gICAgICAgICAgXCJcXFxcZlwiOiBcIlxcZlwiLFxuICAgICAgICAgIFwiXFxcXG5cIjogXCJcXG5cIixcbiAgICAgICAgICBcIlxcXFxyXCI6IFwiXFxyXCIsXG4gICAgICAgICAgXCJcXFxcdFwiOiBcIlxcdFwiXG4gICAgICAgIH0sXG4gICAgICAgIHUgPSAvXltcXGRhLWZdezR9JC9pLFxuICAgICAgICBwID0gL15bXFx1MDAwMC1cXHUwMDFGXSQvO1xuICAgICAgdC5leHBvcnRzID0gZnVuY3Rpb24gKHQsIGUpIHtcbiAgICAgICAgZm9yICh2YXIgbiA9ICEwLCBpID0gXCJcIjsgZSA8IHQubGVuZ3RoOykge1xuICAgICAgICAgIHZhciBmID0gbCh0LCBlKTtcbiAgICAgICAgICBpZiAoXCJcXFxcXCIgPT0gZikge1xuICAgICAgICAgICAgdmFyIGcgPSBjKHQsIGUsIGUgKyAyKTtcbiAgICAgICAgICAgIGlmIChyKGQsIGcpKSB7XG4gICAgICAgICAgICAgIGkgKz0gZFtnXTtcbiAgICAgICAgICAgICAgZSArPSAyO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKFwiXFxcXHVcIiAhPSBnKSB0aHJvdyBzKCdVbmtub3duIGVzY2FwZSBzZXF1ZW5jZTogXCInICsgZyArICdcIicpO1xuICAgICAgICAgICAgICB2YXIgbSA9IGModCwgZSArPSAyLCBlICsgNCk7XG4gICAgICAgICAgICAgIGlmICghaCh1LCBtKSkgdGhyb3cgcyhcIkJhZCBVbmljb2RlIGVzY2FwZSBhdDogXCIgKyBlKTtcbiAgICAgICAgICAgICAgaSArPSBvKGEobSwgMTYpKTtcbiAgICAgICAgICAgICAgZSArPSA0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoJ1wiJyA9PSBmKSB7XG4gICAgICAgICAgICAgIG4gPSAhMTtcbiAgICAgICAgICAgICAgZSsrO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChoKHAsIGYpKSB0aHJvdyBzKFwiQmFkIGNvbnRyb2wgY2hhcmFjdGVyIGluIHN0cmluZyBsaXRlcmFsIGF0OiBcIiArIGUpO1xuICAgICAgICAgICAgaSArPSBmO1xuICAgICAgICAgICAgZSsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobikgdGhyb3cgcyhcIlVudGVybWluYXRlZCBzdHJpbmcgYXQ6IFwiICsgZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdmFsdWU6IGksXG4gICAgICAgICAgZW5kOiBlXG4gICAgICAgIH07XG4gICAgICB9O1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgICAgdmFyIF9jbGFzczE5O1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgIHZhbHVlOiAhMFxuICAgICAgfSk7XG4gICAgICBlLlN0YXRUaW1lciA9IGUuUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uID0gZS5QaXhlbHNQZXJJbmNoID0gZS5QYWdlVmlld3BvcnQgPSBlLlBERkRhdGVTdHJpbmcgPSBlLkRPTVN0YW5kYXJkRm9udERhdGFGYWN0b3J5ID0gZS5ET01TVkdGYWN0b3J5ID0gZS5ET01GaWx0ZXJGYWN0b3J5ID0gZS5ET01DYW52YXNGYWN0b3J5ID0gZS5ET01DTWFwUmVhZGVyRmFjdG9yeSA9IGUuQW5ub3RhdGlvblByZWZpeCA9IHZvaWQgMDtcbiAgICAgIGUuZGVwcmVjYXRlZCA9IGZ1bmN0aW9uIGRlcHJlY2F0ZWQodCkge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkRlcHJlY2F0ZWQgQVBJIHVzYWdlOiBcIiArIHQpO1xuICAgICAgfTtcbiAgICAgIGUuZ2V0Q29sb3JWYWx1ZXMgPSBmdW5jdGlvbiBnZXRDb2xvclZhbHVlcyh0KSB7XG4gICAgICAgIGNvbnN0IGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcbiAgICAgICAgZS5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmQoZSk7XG4gICAgICAgIGZvciAoY29uc3QgbiBvZiB0LmtleXMoKSkge1xuICAgICAgICAgIGUuc3R5bGUuY29sb3IgPSBuO1xuICAgICAgICAgIGNvbnN0IGkgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlKS5jb2xvcjtcbiAgICAgICAgICB0LnNldChuLCBnZXRSR0IoaSkpO1xuICAgICAgICB9XG4gICAgICAgIGUucmVtb3ZlKCk7XG4gICAgICB9O1xuICAgICAgZS5nZXRDdXJyZW50VHJhbnNmb3JtID0gZnVuY3Rpb24gZ2V0Q3VycmVudFRyYW5zZm9ybSh0KSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBhOiBlLFxuICAgICAgICAgIGI6IG4sXG4gICAgICAgICAgYzogaSxcbiAgICAgICAgICBkOiByLFxuICAgICAgICAgIGU6IHMsXG4gICAgICAgICAgZjogYVxuICAgICAgICB9ID0gdC5nZXRUcmFuc2Zvcm0oKTtcbiAgICAgICAgcmV0dXJuIFtlLCBuLCBpLCByLCBzLCBhXTtcbiAgICAgIH07XG4gICAgICBlLmdldEN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlID0gZnVuY3Rpb24gZ2V0Q3VycmVudFRyYW5zZm9ybUludmVyc2UodCkge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgYTogZSxcbiAgICAgICAgICBiOiBuLFxuICAgICAgICAgIGM6IGksXG4gICAgICAgICAgZDogcixcbiAgICAgICAgICBlOiBzLFxuICAgICAgICAgIGY6IGFcbiAgICAgICAgfSA9IHQuZ2V0VHJhbnNmb3JtKCkuaW52ZXJ0U2VsZigpO1xuICAgICAgICByZXR1cm4gW2UsIG4sIGksIHIsIHMsIGFdO1xuICAgICAgfTtcbiAgICAgIGUuZ2V0RmlsZW5hbWVGcm9tVXJsID0gZnVuY3Rpb24gZ2V0RmlsZW5hbWVGcm9tVXJsKHQpIHtcbiAgICAgICAgYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMV0gJiYgYXJndW1lbnRzWzFdIHx8IChbdF0gPSB0LnNwbGl0KC9bIz9dLywgMSkpO1xuICAgICAgICByZXR1cm4gdC5zdWJzdHJpbmcodC5sYXN0SW5kZXhPZihcIi9cIikgKyAxKTtcbiAgICAgIH07XG4gICAgICBlLmdldFBkZkZpbGVuYW1lRnJvbVVybCA9IGZ1bmN0aW9uIGdldFBkZkZpbGVuYW1lRnJvbVVybCh0KSB7XG4gICAgICAgIGxldCBlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMV0gPyBhcmd1bWVudHNbMV0gOiBcImRvY3VtZW50LnBkZlwiO1xuICAgICAgICBpZiAoXCJzdHJpbmdcIiAhPSB0eXBlb2YgdCkgcmV0dXJuIGU7XG4gICAgICAgIGlmIChpc0RhdGFTY2hlbWUodCkpIHtcbiAgICAgICAgICAoMCwgci53YXJuKSgnZ2V0UGRmRmlsZW5hbWVGcm9tVXJsOiBpZ25vcmUgXCJkYXRhOlwiLVVSTCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4nKTtcbiAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuID0gL1teLz8jPV0rXFwucGRmXFxiKD8hLipcXC5wZGZcXGIpL2ksXG4gICAgICAgICAgaSA9IC9eKD86KD86W146XSs6KT9cXC9cXC9bXi9dKyk/KFtePyNdKikoXFw/W14jXSopPygjLiopPyQvLmV4ZWModCk7XG4gICAgICAgIGxldCBzID0gbi5leGVjKGlbMV0pIHx8IG4uZXhlYyhpWzJdKSB8fCBuLmV4ZWMoaVszXSk7XG4gICAgICAgIGlmIChzKSB7XG4gICAgICAgICAgcyA9IHNbMF07XG4gICAgICAgICAgaWYgKHMuaW5jbHVkZXMoXCIlXCIpKSB0cnkge1xuICAgICAgICAgICAgcyA9IG4uZXhlYyhkZWNvZGVVUklDb21wb25lbnQocykpWzBdO1xuICAgICAgICAgIH0gY2F0Y2ggKF91bnVzZWQ5KSB7fVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzIHx8IGU7XG4gICAgICB9O1xuICAgICAgZS5nZXRSR0IgPSBnZXRSR0I7XG4gICAgICBlLmdldFhmYVBhZ2VWaWV3cG9ydCA9IGZ1bmN0aW9uIGdldFhmYVBhZ2VWaWV3cG9ydCh0LCBlKSB7XG4gICAgICAgIGxldCB7XG4gICAgICAgICAgc2NhbGU6IG4gPSAxLFxuICAgICAgICAgIHJvdGF0aW9uOiBpID0gMFxuICAgICAgICB9ID0gZTtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgd2lkdGg6IHIsXG4gICAgICAgICAgICBoZWlnaHQ6IHNcbiAgICAgICAgICB9ID0gdC5hdHRyaWJ1dGVzLnN0eWxlLFxuICAgICAgICAgIGEgPSBbMCwgMCwgcGFyc2VJbnQociksIHBhcnNlSW50KHMpXTtcbiAgICAgICAgcmV0dXJuIG5ldyBQYWdlVmlld3BvcnQoe1xuICAgICAgICAgIHZpZXdCb3g6IGEsXG4gICAgICAgICAgc2NhbGU6IG4sXG4gICAgICAgICAgcm90YXRpb246IGlcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgZS5pc0RhdGFTY2hlbWUgPSBpc0RhdGFTY2hlbWU7XG4gICAgICBlLmlzUGRmRmlsZSA9IGZ1bmN0aW9uIGlzUGRmRmlsZSh0KSB7XG4gICAgICAgIHJldHVybiBcInN0cmluZ1wiID09IHR5cGVvZiB0ICYmIC9cXC5wZGYkL2kudGVzdCh0KTtcbiAgICAgIH07XG4gICAgICBlLmlzVmFsaWRGZXRjaFVybCA9IGlzVmFsaWRGZXRjaFVybDtcbiAgICAgIGUubG9hZFNjcmlwdCA9IGZ1bmN0aW9uIGxvYWRTY3JpcHQodCkge1xuICAgICAgICBsZXQgZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzFdICYmIGFyZ3VtZW50c1sxXTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChuLCBpKSA9PiB7XG4gICAgICAgICAgY29uc3QgciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gICAgICAgICAgci5zcmMgPSB0O1xuICAgICAgICAgIHIub25sb2FkID0gZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgIGUgJiYgci5yZW1vdmUoKTtcbiAgICAgICAgICAgIG4odCk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICByLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpKG5ldyBFcnJvcihcIkNhbm5vdCBsb2FkIHNjcmlwdCBhdDogXCIuY29uY2F0KHIuc3JjKSkpO1xuICAgICAgICAgIH07XG4gICAgICAgICAgKGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5hcHBlbmQocik7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGUuc2V0TGF5ZXJEaW1lbnNpb25zID0gZnVuY3Rpb24gc2V0TGF5ZXJEaW1lbnNpb25zKHQsIGUpIHtcbiAgICAgICAgbGV0IG4gPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1syXSAmJiBhcmd1bWVudHNbMl0sXG4gICAgICAgICAgaSA9ICEoYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbM10pIHx8IGFyZ3VtZW50c1szXTtcbiAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBQYWdlVmlld3BvcnQpIHtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgIHBhZ2VXaWR0aDogaSxcbiAgICAgICAgICAgICAgcGFnZUhlaWdodDogclxuICAgICAgICAgICAgfSA9IGUucmF3RGltcyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3R5bGU6IHNcbiAgICAgICAgICAgIH0gPSB0LFxuICAgICAgICAgICAgYSA9IFwiY2FsYyh2YXIoLS1zY2FsZS1mYWN0b3IpICogXCIuY29uY2F0KGksIFwicHgpXCIpLFxuICAgICAgICAgICAgbyA9IFwiY2FsYyh2YXIoLS1zY2FsZS1mYWN0b3IpICogXCIuY29uY2F0KHIsIFwicHgpXCIpO1xuICAgICAgICAgIGlmIChuICYmIGUucm90YXRpb24gJSAxODAgIT0gMCkge1xuICAgICAgICAgICAgcy53aWR0aCA9IG87XG4gICAgICAgICAgICBzLmhlaWdodCA9IGE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHMud2lkdGggPSBhO1xuICAgICAgICAgICAgcy5oZWlnaHQgPSBvO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpICYmIHQuc2V0QXR0cmlidXRlKFwiZGF0YS1tYWluLXJvdGF0aW9uXCIsIGUucm90YXRpb24pO1xuICAgICAgfTtcbiAgICAgIG4oMik7XG4gICAgICBuKDkzKTtcbiAgICAgIG4oMTAxKTtcbiAgICAgIG4oMTAyKTtcbiAgICAgIG4oMTA1KTtcbiAgICAgIG4oMTA3KTtcbiAgICAgIG4oMTA5KTtcbiAgICAgIG4oMTEzKTtcbiAgICAgIG4oMTE2KTtcbiAgICAgIG4oMTIzKTtcbiAgICAgIG4oODkpO1xuICAgICAgbig4NCk7XG4gICAgICBuKDg2KTtcbiAgICAgIG4oODcpO1xuICAgICAgdmFyIGkgPSBuKDE2OCksXG4gICAgICAgIHIgPSBuKDEpO1xuICAgICAgY29uc3QgcyA9IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIjtcbiAgICAgIGUuQW5ub3RhdGlvblByZWZpeCA9IFwicGRmanNfaW50ZXJuYWxfaWRfXCI7XG4gICAgICBjbGFzcyBQaXhlbHNQZXJJbmNoIHt9XG4gICAgICBfY2xhc3MxOSA9IFBpeGVsc1BlckluY2g7XG4gICAgICBfZGVmaW5lUHJvcGVydHkoUGl4ZWxzUGVySW5jaCwgXCJDU1NcIiwgOTYpO1xuICAgICAgX2RlZmluZVByb3BlcnR5KFBpeGVsc1BlckluY2gsIFwiUERGXCIsIDcyKTtcbiAgICAgIF9kZWZpbmVQcm9wZXJ0eShQaXhlbHNQZXJJbmNoLCBcIlBERl9UT19DU1NfVU5JVFNcIiwgX2NsYXNzMTkuQ1NTIC8gX2NsYXNzMTkuUERGKTtcbiAgICAgIGUuUGl4ZWxzUGVySW5jaCA9IFBpeGVsc1BlckluY2g7XG4gICAgICB2YXIgX2t0ID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICB2YXIgX010ID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICB2YXIgX2U3ID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICB2YXIgX1J0ID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICB2YXIgX0Z0ID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICB2YXIgX0l0ID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICB2YXIgX0R0ID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICB2YXIgX090ID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICB2YXIgX0x0ID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICB2YXIgX050ID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICB2YXIgX08zID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICB2YXIgX04yID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICB2YXIgX0J0ID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICB2YXIgX0h0ID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgICB2YXIgX2p0ID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgICB2YXIgX3F0ID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgICB2YXIgX1V0ID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgICB2YXIgX3p0ID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgICBjbGFzcyBET01GaWx0ZXJGYWN0b3J5IGV4dGVuZHMgaS5CYXNlRmlsdGVyRmFjdG9yeSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgIGxldCB7XG4gICAgICAgICAgICBkb2NJZDogX3Q5LFxuICAgICAgICAgICAgb3duZXJEb2N1bWVudDogX2U4ID0gZ2xvYmFsVGhpcy5kb2N1bWVudFxuICAgICAgICAgIH0gPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1swXSA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICAgICAgICAgIHN1cGVyKCk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF96dCk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9VdCk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9xdCk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9qdCk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9IdCk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX0J0LCB7XG4gICAgICAgICAgICBnZXQ6IF9nZXRfQnQsXG4gICAgICAgICAgICBzZXQ6IHZvaWQgMFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9OMiwge1xuICAgICAgICAgICAgZ2V0OiBfZ2V0X04sXG4gICAgICAgICAgICBzZXQ6IHZvaWQgMFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9rdCwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX010LCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDBcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfZTcsIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHZvaWQgMFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9SdCwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX0Z0LCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDBcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfSXQsIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHZvaWQgMFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9EdCwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX090LCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDBcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfTHQsIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHZvaWQgMFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9OdCwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX08zLCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiAwXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9lNywgX3Q5KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1J0LCBfZTgpO1xuICAgICAgICB9XG4gICAgICAgIGFkZEZpbHRlcih0KSB7XG4gICAgICAgICAgdmFyIF90aGlzJE81LCBfdGhpcyRPNjtcbiAgICAgICAgICBpZiAoIXQpIHJldHVybiBcIm5vbmVcIjtcbiAgICAgICAgICBsZXQgZSxcbiAgICAgICAgICAgIG4sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcixcbiAgICAgICAgICAgIHMgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX04yKS5nZXQodCk7XG4gICAgICAgICAgaWYgKHMpIHJldHVybiBzO1xuICAgICAgICAgIGlmICgxID09PSB0Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgcyA9IHRbMF0sXG4gICAgICAgICAgICAgIGEgPSBuZXcgQXJyYXkoMjU2KTtcbiAgICAgICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgMjU2OyB0KyspIGFbdF0gPSBzW3RdIC8gMjU1O1xuICAgICAgICAgICAgciA9IGUgPSBuID0gaSA9IGEuam9pbihcIixcIik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IFtzLCBhLCBvXSA9IHQsXG4gICAgICAgICAgICAgIGwgPSBuZXcgQXJyYXkoMjU2KSxcbiAgICAgICAgICAgICAgYyA9IG5ldyBBcnJheSgyNTYpLFxuICAgICAgICAgICAgICBoID0gbmV3IEFycmF5KDI1Nik7XG4gICAgICAgICAgICBmb3IgKGxldCB0ID0gMDsgdCA8IDI1NjsgdCsrKSB7XG4gICAgICAgICAgICAgIGxbdF0gPSBzW3RdIC8gMjU1O1xuICAgICAgICAgICAgICBjW3RdID0gYVt0XSAvIDI1NTtcbiAgICAgICAgICAgICAgaFt0XSA9IG9bdF0gLyAyNTU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlID0gbC5qb2luKFwiLFwiKTtcbiAgICAgICAgICAgIG4gPSBjLmpvaW4oXCIsXCIpO1xuICAgICAgICAgICAgaSA9IGguam9pbihcIixcIik7XG4gICAgICAgICAgICByID0gXCJcIi5jb25jYXQoZSkuY29uY2F0KG4pLmNvbmNhdChpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcyA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTjIpLmdldChyKTtcbiAgICAgICAgICBpZiAocykge1xuICAgICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9OMikuc2V0KHQsIHMpO1xuICAgICAgICAgICAgcmV0dXJuIHM7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGEgPSBcImdfXCIuY29uY2F0KF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfZTcpLCBcIl90cmFuc2Zlcl9tYXBfXCIpLmNvbmNhdCgoX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9PMywgKF90aGlzJE81ID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9PMyksIF90aGlzJE82ID0gX3RoaXMkTzUrKywgX3RoaXMkTzUpKSwgX3RoaXMkTzYpKSxcbiAgICAgICAgICAgIG8gPSBcInVybCgjXCIuY29uY2F0KGEsIFwiKVwiKTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX04yKS5zZXQodCwgbyk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9OMikuc2V0KHIsIG8pO1xuICAgICAgICAgIGNvbnN0IGwgPSBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9qdCwgX2p0MikuY2FsbCh0aGlzLCBhKTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9VdCwgX1V0MikuY2FsbCh0aGlzLCBlLCBuLCBpLCBsKTtcbiAgICAgICAgICByZXR1cm4gbztcbiAgICAgICAgfVxuICAgICAgICBhZGRIQ01GaWx0ZXIodCwgZSkge1xuICAgICAgICAgIHZhciBfY2xhc3NQcml2YXRlRmllbGRHZXQ2O1xuICAgICAgICAgIGNvbnN0IG4gPSBcIlwiLmNvbmNhdCh0LCBcIi1cIikuY29uY2F0KGUpO1xuICAgICAgICAgIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0l0KSA9PT0gbikgcmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRHQpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfSXQsIG4pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfRHQsIFwibm9uZVwiKTtcbiAgICAgICAgICAoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0NiA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRnQpKSA9PT0gbnVsbCB8fCBfY2xhc3NQcml2YXRlRmllbGRHZXQ2ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfY2xhc3NQcml2YXRlRmllbGRHZXQ2LnJlbW92ZSgpO1xuICAgICAgICAgIGlmICghdCB8fCAhZSkgcmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRHQpO1xuICAgICAgICAgIGNvbnN0IGkgPSBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF96dCwgX3p0MikuY2FsbCh0aGlzLCB0KTtcbiAgICAgICAgICB0ID0gci5VdGlsLm1ha2VIZXhDb2xvciguLi5pKTtcbiAgICAgICAgICBjb25zdCBzID0gX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfenQsIF96dDIpLmNhbGwodGhpcywgZSk7XG4gICAgICAgICAgZSA9IHIuVXRpbC5tYWtlSGV4Q29sb3IoLi4ucyk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9CdCkuc3R5bGUuY29sb3IgPSBcIlwiO1xuICAgICAgICAgIGlmIChcIiMwMDAwMDBcIiA9PT0gdCAmJiBcIiNmZmZmZmZcIiA9PT0gZSB8fCB0ID09PSBlKSByZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9EdCk7XG4gICAgICAgICAgY29uc3QgYSA9IG5ldyBBcnJheSgyNTYpO1xuICAgICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDw9IDI1NTsgdCsrKSB7XG4gICAgICAgICAgICBjb25zdCBlID0gdCAvIDI1NTtcbiAgICAgICAgICAgIGFbdF0gPSBlIDw9IC4wMzkyOCA/IGUgLyAxMi45MiA6ICgoZSArIC4wNTUpIC8gMS4wNTUpICoqIDIuNDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgbyA9IGEuam9pbihcIixcIiksXG4gICAgICAgICAgICBsID0gXCJnX1wiLmNvbmNhdChfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2U3KSwgXCJfaGNtX2ZpbHRlclwiKSxcbiAgICAgICAgICAgIGMgPSBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX090LCBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9qdCwgX2p0MikuY2FsbCh0aGlzLCBsKSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfVXQsIF9VdDIpLmNhbGwodGhpcywgbywgbywgbywgYyk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfSHQsIF9IdDIpLmNhbGwodGhpcywgYyk7XG4gICAgICAgICAgY29uc3QgZ2V0U3RlcHMgPSAodCwgZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbiA9IGlbdF0gLyAyNTUsXG4gICAgICAgICAgICAgIHIgPSBzW3RdIC8gMjU1LFxuICAgICAgICAgICAgICBhID0gbmV3IEFycmF5KGUgKyAxKTtcbiAgICAgICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDw9IGU7IHQrKykgYVt0XSA9IG4gKyB0IC8gZSAqIChyIC0gbik7XG4gICAgICAgICAgICByZXR1cm4gYS5qb2luKFwiLFwiKTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX1V0LCBfVXQyKS5jYWxsKHRoaXMsIGdldFN0ZXBzKDAsIDUpLCBnZXRTdGVwcygxLCA1KSwgZ2V0U3RlcHMoMiwgNSksIGMpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfRHQsIFwidXJsKCNcIi5jb25jYXQobCwgXCIpXCIpKTtcbiAgICAgICAgICByZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9EdCk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkSGlnaGxpZ2h0SENNRmlsdGVyKHQsIGUsIG4sIGkpIHtcbiAgICAgICAgICB2YXIgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0NztcbiAgICAgICAgICBjb25zdCByID0gXCJcIi5jb25jYXQodCwgXCItXCIpLmNvbmNhdChlLCBcIi1cIikuY29uY2F0KG4sIFwiLVwiKS5jb25jYXQoaSk7XG4gICAgICAgICAgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTHQpID09PSByKSByZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9OdCk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9MdCwgcik7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9OdCwgXCJub25lXCIpO1xuICAgICAgICAgIChfY2xhc3NQcml2YXRlRmllbGRHZXQ3ID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9PdCkpID09PSBudWxsIHx8IF9jbGFzc1ByaXZhdGVGaWVsZEdldDcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jbGFzc1ByaXZhdGVGaWVsZEdldDcucmVtb3ZlKCk7XG4gICAgICAgICAgaWYgKCF0IHx8ICFlKSByZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9OdCk7XG4gICAgICAgICAgY29uc3QgW3MsIGFdID0gW3QsIGVdLm1hcChfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF96dCwgX3p0MikuYmluZCh0aGlzKSk7XG4gICAgICAgICAgbGV0IG8gPSBNYXRoLnJvdW5kKC4yMTI2ICogc1swXSArIC43MTUyICogc1sxXSArIC4wNzIyICogc1syXSksXG4gICAgICAgICAgICBsID0gTWF0aC5yb3VuZCguMjEyNiAqIGFbMF0gKyAuNzE1MiAqIGFbMV0gKyAuMDcyMiAqIGFbMl0pLFxuICAgICAgICAgICAgW2MsIGhdID0gW24sIGldLm1hcChfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF96dCwgX3p0MikuYmluZCh0aGlzKSk7XG4gICAgICAgICAgbCA8IG8gJiYgKFtvLCBsLCBjLCBoXSA9IFtsLCBvLCBoLCBjXSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9CdCkuc3R5bGUuY29sb3IgPSBcIlwiO1xuICAgICAgICAgIGNvbnN0IGdldFN0ZXBzID0gKHQsIGUsIG4pID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaSA9IG5ldyBBcnJheSgyNTYpLFxuICAgICAgICAgICAgICAgIHIgPSAobCAtIG8pIC8gbixcbiAgICAgICAgICAgICAgICBzID0gdCAvIDI1NSxcbiAgICAgICAgICAgICAgICBhID0gKGUgLSB0KSAvICgyNTUgKiBuKTtcbiAgICAgICAgICAgICAgbGV0IGMgPSAwO1xuICAgICAgICAgICAgICBmb3IgKGxldCB0ID0gMDsgdCA8PSBuOyB0KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlID0gTWF0aC5yb3VuZChvICsgdCAqIHIpLFxuICAgICAgICAgICAgICAgICAgbiA9IHMgKyB0ICogYTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCB0ID0gYzsgdCA8PSBlOyB0KyspIGlbdF0gPSBuO1xuICAgICAgICAgICAgICAgIGMgPSBlICsgMTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBmb3IgKGxldCB0ID0gYzsgdCA8IDI1NjsgdCsrKSBpW3RdID0gaVtjIC0gMV07XG4gICAgICAgICAgICAgIHJldHVybiBpLmpvaW4oXCIsXCIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGQgPSBcImdfXCIuY29uY2F0KF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfZTcpLCBcIl9oY21faGlnaGxpZ2h0X2ZpbHRlclwiKSxcbiAgICAgICAgICAgIHUgPSBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX090LCBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9qdCwgX2p0MikuY2FsbCh0aGlzLCBkKSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfSHQsIF9IdDIpLmNhbGwodGhpcywgdSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfVXQsIF9VdDIpLmNhbGwodGhpcywgZ2V0U3RlcHMoY1swXSwgaFswXSwgNSksIGdldFN0ZXBzKGNbMV0sIGhbMV0sIDUpLCBnZXRTdGVwcyhjWzJdLCBoWzJdLCA1KSwgdSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9OdCwgXCJ1cmwoI1wiLmNvbmNhdChkLCBcIilcIikpO1xuICAgICAgICAgIHJldHVybiBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX050KTtcbiAgICAgICAgfVxuICAgICAgICBkZXN0cm95KCkge1xuICAgICAgICAgIGlmICghKGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzBdICYmIGFyZ3VtZW50c1swXSkgfHwgIV9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRHQpICYmICFfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX050KSkge1xuICAgICAgICAgICAgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTXQpKSB7XG4gICAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTXQpLnBhcmVudE5vZGUucGFyZW50Tm9kZS5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9NdCwgbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9rdCkpIHtcbiAgICAgICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9rdCkuY2xlYXIoKTtcbiAgICAgICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9rdCwgbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX08zLCAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF9nZXRfTigpIHtcbiAgICAgICAgcmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfa3QpIHx8IF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfa3QsIG5ldyBNYXAoKSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfZ2V0X0J0KCkge1xuICAgICAgICBpZiAoIV9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTXQpKSB7XG4gICAgICAgICAgY29uc3QgdCA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUnQpLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHN0eWxlOiBlXG4gICAgICAgICAgICB9ID0gdDtcbiAgICAgICAgICBlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiO1xuICAgICAgICAgIGUuY29udGFpbiA9IFwic3RyaWN0XCI7XG4gICAgICAgICAgZS53aWR0aCA9IGUuaGVpZ2h0ID0gMDtcbiAgICAgICAgICBlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuICAgICAgICAgIGUudG9wID0gZS5sZWZ0ID0gMDtcbiAgICAgICAgICBlLnpJbmRleCA9IC0xO1xuICAgICAgICAgIGNvbnN0IG4gPSBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1J0KS5jcmVhdGVFbGVtZW50TlMocywgXCJzdmdcIik7XG4gICAgICAgICAgbi5zZXRBdHRyaWJ1dGUoXCJ3aWR0aFwiLCAwKTtcbiAgICAgICAgICBuLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCAwKTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX010LCBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1J0KS5jcmVhdGVFbGVtZW50TlMocywgXCJkZWZzXCIpKTtcbiAgICAgICAgICB0LmFwcGVuZChuKTtcbiAgICAgICAgICBuLmFwcGVuZChfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX010KSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SdCkuYm9keS5hcHBlbmQodCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTXQpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX0h0Mih0KSB7XG4gICAgICAgIGNvbnN0IGUgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1J0KS5jcmVhdGVFbGVtZW50TlMocywgXCJmZUNvbG9yTWF0cml4XCIpO1xuICAgICAgICBlLnNldEF0dHJpYnV0ZShcInR5cGVcIiwgXCJtYXRyaXhcIik7XG4gICAgICAgIGUuc2V0QXR0cmlidXRlKFwidmFsdWVzXCIsIFwiMC4yMTI2IDAuNzE1MiAwLjA3MjIgMCAwIDAuMjEyNiAwLjcxNTIgMC4wNzIyIDAgMCAwLjIxMjYgMC43MTUyIDAuMDcyMiAwIDAgMCAwIDAgMSAwXCIpO1xuICAgICAgICB0LmFwcGVuZChlKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF9qdDIodCkge1xuICAgICAgICBjb25zdCBlID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9SdCkuY3JlYXRlRWxlbWVudE5TKHMsIFwiZmlsdGVyXCIpO1xuICAgICAgICBlLnNldEF0dHJpYnV0ZShcImNvbG9yLWludGVycG9sYXRpb24tZmlsdGVyc1wiLCBcInNSR0JcIik7XG4gICAgICAgIGUuc2V0QXR0cmlidXRlKFwiaWRcIiwgdCk7XG4gICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfQnQpLmFwcGVuZChlKTtcbiAgICAgICAgcmV0dXJuIGU7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfcXQyKHQsIGUsIG4pIHtcbiAgICAgICAgY29uc3QgaSA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfUnQpLmNyZWF0ZUVsZW1lbnROUyhzLCBlKTtcbiAgICAgICAgaS5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsIFwiZGlzY3JldGVcIik7XG4gICAgICAgIGkuc2V0QXR0cmlidXRlKFwidGFibGVWYWx1ZXNcIiwgbik7XG4gICAgICAgIHQuYXBwZW5kKGkpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX1V0Mih0LCBlLCBuLCBpKSB7XG4gICAgICAgIGNvbnN0IHIgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1J0KS5jcmVhdGVFbGVtZW50TlMocywgXCJmZUNvbXBvbmVudFRyYW5zZmVyXCIpO1xuICAgICAgICBpLmFwcGVuZChyKTtcbiAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfcXQsIF9xdDIpLmNhbGwodGhpcywgciwgXCJmZUZ1bmNSXCIsIHQpO1xuICAgICAgICBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9xdCwgX3F0MikuY2FsbCh0aGlzLCByLCBcImZlRnVuY0dcIiwgZSk7XG4gICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX3F0LCBfcXQyKS5jYWxsKHRoaXMsIHIsIFwiZmVGdW5jQlwiLCBuKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF96dDIodCkge1xuICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0J0KS5zdHlsZS5jb2xvciA9IHQ7XG4gICAgICAgIHJldHVybiBnZXRSR0IoZ2V0Q29tcHV0ZWRTdHlsZShfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0J0KSkuZ2V0UHJvcGVydHlWYWx1ZShcImNvbG9yXCIpKTtcbiAgICAgIH1cbiAgICAgIGUuRE9NRmlsdGVyRmFjdG9yeSA9IERPTUZpbHRlckZhY3Rvcnk7XG4gICAgICBjbGFzcyBET01DYW52YXNGYWN0b3J5IGV4dGVuZHMgaS5CYXNlQ2FudmFzRmFjdG9yeSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgIGxldCB7XG4gICAgICAgICAgICBvd25lckRvY3VtZW50OiB0ID0gZ2xvYmFsVGhpcy5kb2N1bWVudFxuICAgICAgICAgIH0gPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1swXSA/IGFyZ3VtZW50c1swXSA6IHt9O1xuICAgICAgICAgIHN1cGVyKCk7XG4gICAgICAgICAgdGhpcy5fZG9jdW1lbnQgPSB0O1xuICAgICAgICB9XG4gICAgICAgIF9jcmVhdGVDYW52YXModCwgZSkge1xuICAgICAgICAgIGNvbnN0IG4gPSB0aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuICAgICAgICAgIG4ud2lkdGggPSB0O1xuICAgICAgICAgIG4uaGVpZ2h0ID0gZTtcbiAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZS5ET01DYW52YXNGYWN0b3J5ID0gRE9NQ2FudmFzRmFjdG9yeTtcbiAgICAgIGFzeW5jIGZ1bmN0aW9uIGZldGNoRGF0YSh0KSB7XG4gICAgICAgIGxldCBlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMV0gJiYgYXJndW1lbnRzWzFdO1xuICAgICAgICBpZiAoaXNWYWxpZEZldGNoVXJsKHQsIGRvY3VtZW50LmJhc2VVUkkpKSB7XG4gICAgICAgICAgY29uc3QgbiA9IGF3YWl0IGZldGNoKHQpO1xuICAgICAgICAgIGlmICghbi5vaykgdGhyb3cgbmV3IEVycm9yKG4uc3RhdHVzVGV4dCk7XG4gICAgICAgICAgcmV0dXJuIGUgPyBuZXcgVWludDhBcnJheShhd2FpdCBuLmFycmF5QnVmZmVyKCkpIDogKDAsIHIuc3RyaW5nVG9CeXRlcykoYXdhaXQgbi50ZXh0KCkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgobiwgaSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHMgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICBzLm9wZW4oXCJHRVRcIiwgdCwgITApO1xuICAgICAgICAgIGUgJiYgKHMucmVzcG9uc2VUeXBlID0gXCJhcnJheWJ1ZmZlclwiKTtcbiAgICAgICAgICBzLm9ucmVhZHlzdGF0ZWNoYW5nZSA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmIChzLnJlYWR5U3RhdGUgPT09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpIHtcbiAgICAgICAgICAgICAgaWYgKDIwMCA9PT0gcy5zdGF0dXMgfHwgMCA9PT0gcy5zdGF0dXMpIHtcbiAgICAgICAgICAgICAgICBsZXQgdDtcbiAgICAgICAgICAgICAgICBlICYmIHMucmVzcG9uc2UgPyB0ID0gbmV3IFVpbnQ4QXJyYXkocy5yZXNwb25zZSkgOiAhZSAmJiBzLnJlc3BvbnNlVGV4dCAmJiAodCA9ICgwLCByLnN0cmluZ1RvQnl0ZXMpKHMucmVzcG9uc2VUZXh0KSk7XG4gICAgICAgICAgICAgICAgaWYgKHQpIHtcbiAgICAgICAgICAgICAgICAgIG4odCk7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGkobmV3IEVycm9yKHMuc3RhdHVzVGV4dCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgICAgcy5zZW5kKG51bGwpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGNsYXNzIERPTUNNYXBSZWFkZXJGYWN0b3J5IGV4dGVuZHMgaS5CYXNlQ01hcFJlYWRlckZhY3Rvcnkge1xuICAgICAgICBfZmV0Y2hEYXRhKHQsIGUpIHtcbiAgICAgICAgICByZXR1cm4gZmV0Y2hEYXRhKHQsIHRoaXMuaXNDb21wcmVzc2VkKS50aGVuKHQgPT4gKHtcbiAgICAgICAgICAgIGNNYXBEYXRhOiB0LFxuICAgICAgICAgICAgY29tcHJlc3Npb25UeXBlOiBlXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlLkRPTUNNYXBSZWFkZXJGYWN0b3J5ID0gRE9NQ01hcFJlYWRlckZhY3Rvcnk7XG4gICAgICBjbGFzcyBET01TdGFuZGFyZEZvbnREYXRhRmFjdG9yeSBleHRlbmRzIGkuQmFzZVN0YW5kYXJkRm9udERhdGFGYWN0b3J5IHtcbiAgICAgICAgX2ZldGNoRGF0YSh0KSB7XG4gICAgICAgICAgcmV0dXJuIGZldGNoRGF0YSh0LCAhMCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGUuRE9NU3RhbmRhcmRGb250RGF0YUZhY3RvcnkgPSBET01TdGFuZGFyZEZvbnREYXRhRmFjdG9yeTtcbiAgICAgIGNsYXNzIERPTVNWR0ZhY3RvcnkgZXh0ZW5kcyBpLkJhc2VTVkdGYWN0b3J5IHtcbiAgICAgICAgX2NyZWF0ZVNWRyh0KSB7XG4gICAgICAgICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhzLCB0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZS5ET01TVkdGYWN0b3J5ID0gRE9NU1ZHRmFjdG9yeTtcbiAgICAgIGNsYXNzIFBhZ2VWaWV3cG9ydCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHQpIHtcbiAgICAgICAgICBsZXQge1xuICAgICAgICAgICAgdmlld0JveDogZSxcbiAgICAgICAgICAgIHNjYWxlOiBuLFxuICAgICAgICAgICAgcm90YXRpb246IGksXG4gICAgICAgICAgICBvZmZzZXRYOiByID0gMCxcbiAgICAgICAgICAgIG9mZnNldFk6IHMgPSAwLFxuICAgICAgICAgICAgZG9udEZsaXA6IGEgPSAhMVxuICAgICAgICAgIH0gPSB0O1xuICAgICAgICAgIHRoaXMudmlld0JveCA9IGU7XG4gICAgICAgICAgdGhpcy5zY2FsZSA9IG47XG4gICAgICAgICAgdGhpcy5yb3RhdGlvbiA9IGk7XG4gICAgICAgICAgdGhpcy5vZmZzZXRYID0gcjtcbiAgICAgICAgICB0aGlzLm9mZnNldFkgPSBzO1xuICAgICAgICAgIGNvbnN0IG8gPSAoZVsyXSArIGVbMF0pIC8gMixcbiAgICAgICAgICAgIGwgPSAoZVszXSArIGVbMV0pIC8gMjtcbiAgICAgICAgICBsZXQgYywgaCwgZCwgdSwgcCwgZiwgZywgbTtcbiAgICAgICAgICBpICU9IDM2MDtcbiAgICAgICAgICBpIDwgMCAmJiAoaSArPSAzNjApO1xuICAgICAgICAgIHN3aXRjaCAoaSkge1xuICAgICAgICAgICAgY2FzZSAxODA6XG4gICAgICAgICAgICAgIGMgPSAtMTtcbiAgICAgICAgICAgICAgaCA9IDA7XG4gICAgICAgICAgICAgIGQgPSAwO1xuICAgICAgICAgICAgICB1ID0gMTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDkwOlxuICAgICAgICAgICAgICBjID0gMDtcbiAgICAgICAgICAgICAgaCA9IDE7XG4gICAgICAgICAgICAgIGQgPSAxO1xuICAgICAgICAgICAgICB1ID0gMDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDI3MDpcbiAgICAgICAgICAgICAgYyA9IDA7XG4gICAgICAgICAgICAgIGggPSAtMTtcbiAgICAgICAgICAgICAgZCA9IC0xO1xuICAgICAgICAgICAgICB1ID0gMDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgIGMgPSAxO1xuICAgICAgICAgICAgICBoID0gMDtcbiAgICAgICAgICAgICAgZCA9IDA7XG4gICAgICAgICAgICAgIHUgPSAtMTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYWdlVmlld3BvcnQ6IEludmFsaWQgcm90YXRpb24sIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA5MCBkZWdyZWVzLlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGEpIHtcbiAgICAgICAgICAgIGQgPSAtZDtcbiAgICAgICAgICAgIHUgPSAtdTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKDAgPT09IGMpIHtcbiAgICAgICAgICAgIHAgPSBNYXRoLmFicyhsIC0gZVsxXSkgKiBuICsgcjtcbiAgICAgICAgICAgIGYgPSBNYXRoLmFicyhvIC0gZVswXSkgKiBuICsgcztcbiAgICAgICAgICAgIGcgPSAoZVszXSAtIGVbMV0pICogbjtcbiAgICAgICAgICAgIG0gPSAoZVsyXSAtIGVbMF0pICogbjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcCA9IE1hdGguYWJzKG8gLSBlWzBdKSAqIG4gKyByO1xuICAgICAgICAgICAgZiA9IE1hdGguYWJzKGwgLSBlWzFdKSAqIG4gKyBzO1xuICAgICAgICAgICAgZyA9IChlWzJdIC0gZVswXSkgKiBuO1xuICAgICAgICAgICAgbSA9IChlWzNdIC0gZVsxXSkgKiBuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnRyYW5zZm9ybSA9IFtjICogbiwgaCAqIG4sIGQgKiBuLCB1ICogbiwgcCAtIGMgKiBuICogbyAtIGQgKiBuICogbCwgZiAtIGggKiBuICogbyAtIHUgKiBuICogbF07XG4gICAgICAgICAgdGhpcy53aWR0aCA9IGc7XG4gICAgICAgICAgdGhpcy5oZWlnaHQgPSBtO1xuICAgICAgICB9XG4gICAgICAgIGdldCByYXdEaW1zKCkge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHZpZXdCb3g6IHRcbiAgICAgICAgICB9ID0gdGhpcztcbiAgICAgICAgICByZXR1cm4gKDAsIHIuc2hhZG93KSh0aGlzLCBcInJhd0RpbXNcIiwge1xuICAgICAgICAgICAgcGFnZVdpZHRoOiB0WzJdIC0gdFswXSxcbiAgICAgICAgICAgIHBhZ2VIZWlnaHQ6IHRbM10gLSB0WzFdLFxuICAgICAgICAgICAgcGFnZVg6IHRbMF0sXG4gICAgICAgICAgICBwYWdlWTogdFsxXVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNsb25lKCkge1xuICAgICAgICAgIGxldCB7XG4gICAgICAgICAgICBzY2FsZTogdCA9IHRoaXMuc2NhbGUsXG4gICAgICAgICAgICByb3RhdGlvbjogZSA9IHRoaXMucm90YXRpb24sXG4gICAgICAgICAgICBvZmZzZXRYOiBuID0gdGhpcy5vZmZzZXRYLFxuICAgICAgICAgICAgb2Zmc2V0WTogaSA9IHRoaXMub2Zmc2V0WSxcbiAgICAgICAgICAgIGRvbnRGbGlwOiByID0gITFcbiAgICAgICAgICB9ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMF0gPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgICAgICAgICByZXR1cm4gbmV3IFBhZ2VWaWV3cG9ydCh7XG4gICAgICAgICAgICB2aWV3Qm94OiB0aGlzLnZpZXdCb3guc2xpY2UoKSxcbiAgICAgICAgICAgIHNjYWxlOiB0LFxuICAgICAgICAgICAgcm90YXRpb246IGUsXG4gICAgICAgICAgICBvZmZzZXRYOiBuLFxuICAgICAgICAgICAgb2Zmc2V0WTogaSxcbiAgICAgICAgICAgIGRvbnRGbGlwOiByXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29udmVydFRvVmlld3BvcnRQb2ludCh0LCBlKSB7XG4gICAgICAgICAgcmV0dXJuIHIuVXRpbC5hcHBseVRyYW5zZm9ybShbdCwgZV0sIHRoaXMudHJhbnNmb3JtKTtcbiAgICAgICAgfVxuICAgICAgICBjb252ZXJ0VG9WaWV3cG9ydFJlY3RhbmdsZSh0KSB7XG4gICAgICAgICAgY29uc3QgZSA9IHIuVXRpbC5hcHBseVRyYW5zZm9ybShbdFswXSwgdFsxXV0sIHRoaXMudHJhbnNmb3JtKSxcbiAgICAgICAgICAgIG4gPSByLlV0aWwuYXBwbHlUcmFuc2Zvcm0oW3RbMl0sIHRbM11dLCB0aGlzLnRyYW5zZm9ybSk7XG4gICAgICAgICAgcmV0dXJuIFtlWzBdLCBlWzFdLCBuWzBdLCBuWzFdXTtcbiAgICAgICAgfVxuICAgICAgICBjb252ZXJ0VG9QZGZQb2ludCh0LCBlKSB7XG4gICAgICAgICAgcmV0dXJuIHIuVXRpbC5hcHBseUludmVyc2VUcmFuc2Zvcm0oW3QsIGVdLCB0aGlzLnRyYW5zZm9ybSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGUuUGFnZVZpZXdwb3J0ID0gUGFnZVZpZXdwb3J0O1xuICAgICAgY2xhc3MgUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uIGV4dGVuZHMgci5CYXNlRXhjZXB0aW9uIHtcbiAgICAgICAgY29uc3RydWN0b3IodCkge1xuICAgICAgICAgIGxldCBlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMV0gPyBhcmd1bWVudHNbMV0gOiAwO1xuICAgICAgICAgIHN1cGVyKHQsIFwiUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uXCIpO1xuICAgICAgICAgIHRoaXMuZXh0cmFEZWxheSA9IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGUuUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uID0gUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uO1xuICAgICAgZnVuY3Rpb24gaXNEYXRhU2NoZW1lKHQpIHtcbiAgICAgICAgY29uc3QgZSA9IHQubGVuZ3RoO1xuICAgICAgICBsZXQgbiA9IDA7XG4gICAgICAgIGZvciAoOyBuIDwgZSAmJiBcIlwiID09PSB0W25dLnRyaW0oKTspIG4rKztcbiAgICAgICAgcmV0dXJuIFwiZGF0YTpcIiA9PT0gdC5zdWJzdHJpbmcobiwgbiArIDUpLnRvTG93ZXJDYXNlKCk7XG4gICAgICB9XG4gICAgICBlLlN0YXRUaW1lciA9IGNsYXNzIFN0YXRUaW1lciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcInN0YXJ0ZWRcIiwgT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gICAgICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsIFwidGltZXNcIiwgW10pO1xuICAgICAgICB9XG4gICAgICAgIHRpbWUodCkge1xuICAgICAgICAgIHQgaW4gdGhpcy5zdGFydGVkICYmICgwLCByLndhcm4pKFwiVGltZXIgaXMgYWxyZWFkeSBydW5uaW5nIGZvciBcIi5jb25jYXQodCkpO1xuICAgICAgICAgIHRoaXMuc3RhcnRlZFt0XSA9IERhdGUubm93KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGltZUVuZCh0KSB7XG4gICAgICAgICAgdCBpbiB0aGlzLnN0YXJ0ZWQgfHwgKDAsIHIud2FybikoXCJUaW1lciBoYXMgbm90IGJlZW4gc3RhcnRlZCBmb3IgXCIuY29uY2F0KHQpKTtcbiAgICAgICAgICB0aGlzLnRpbWVzLnB1c2goe1xuICAgICAgICAgICAgbmFtZTogdCxcbiAgICAgICAgICAgIHN0YXJ0OiB0aGlzLnN0YXJ0ZWRbdF0sXG4gICAgICAgICAgICBlbmQ6IERhdGUubm93KClcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBkZWxldGUgdGhpcy5zdGFydGVkW3RdO1xuICAgICAgICB9XG4gICAgICAgIHRvU3RyaW5nKCkge1xuICAgICAgICAgIGNvbnN0IHQgPSBbXTtcbiAgICAgICAgICBsZXQgZSA9IDA7XG4gICAgICAgICAgZm9yIChjb25zdCB7XG4gICAgICAgICAgICBuYW1lOiB0XG4gICAgICAgICAgfSBvZiB0aGlzLnRpbWVzKSBlID0gTWF0aC5tYXgodC5sZW5ndGgsIGUpO1xuICAgICAgICAgIGZvciAoY29uc3Qge1xuICAgICAgICAgICAgbmFtZTogbixcbiAgICAgICAgICAgIHN0YXJ0OiBpLFxuICAgICAgICAgICAgZW5kOiByXG4gICAgICAgICAgfSBvZiB0aGlzLnRpbWVzKSB0LnB1c2goXCJcIi5jb25jYXQobi5wYWRFbmQoZSksIFwiIFwiKS5jb25jYXQociAtIGksIFwibXNcXG5cIikpO1xuICAgICAgICAgIHJldHVybiB0LmpvaW4oXCJcIik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBmdW5jdGlvbiBpc1ZhbGlkRmV0Y2hVcmwodCwgZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHByb3RvY29sOiBuXG4gICAgICAgICAgfSA9IGUgPyBuZXcgVVJMKHQsIGUpIDogbmV3IFVSTCh0KTtcbiAgICAgICAgICByZXR1cm4gXCJodHRwOlwiID09PSBuIHx8IFwiaHR0cHM6XCIgPT09IG47XG4gICAgICAgIH0gY2F0Y2ggKF91bnVzZWQxMCkge1xuICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGV0IGE7XG4gICAgICBlLlBERkRhdGVTdHJpbmcgPSBjbGFzcyBQREZEYXRlU3RyaW5nIHtcbiAgICAgICAgc3RhdGljIHRvRGF0ZU9iamVjdCh0KSB7XG4gICAgICAgICAgaWYgKCF0IHx8IFwic3RyaW5nXCIgIT0gdHlwZW9mIHQpIHJldHVybiBudWxsO1xuICAgICAgICAgIGEgfHwgKGEgPSBuZXcgUmVnRXhwKFwiXkQ6KFxcXFxkezR9KShcXFxcZHsyfSk/KFxcXFxkezJ9KT8oXFxcXGR7Mn0pPyhcXFxcZHsyfSk/KFxcXFxkezJ9KT8oW1p8K3wtXSk/KFxcXFxkezJ9KT8nPyhcXFxcZHsyfSk/Jz9cIikpO1xuICAgICAgICAgIGNvbnN0IGUgPSBhLmV4ZWModCk7XG4gICAgICAgICAgaWYgKCFlKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICBjb25zdCBuID0gcGFyc2VJbnQoZVsxXSwgMTApO1xuICAgICAgICAgIGxldCBpID0gcGFyc2VJbnQoZVsyXSwgMTApO1xuICAgICAgICAgIGkgPSBpID49IDEgJiYgaSA8PSAxMiA/IGkgLSAxIDogMDtcbiAgICAgICAgICBsZXQgciA9IHBhcnNlSW50KGVbM10sIDEwKTtcbiAgICAgICAgICByID0gciA+PSAxICYmIHIgPD0gMzEgPyByIDogMTtcbiAgICAgICAgICBsZXQgcyA9IHBhcnNlSW50KGVbNF0sIDEwKTtcbiAgICAgICAgICBzID0gcyA+PSAwICYmIHMgPD0gMjMgPyBzIDogMDtcbiAgICAgICAgICBsZXQgbyA9IHBhcnNlSW50KGVbNV0sIDEwKTtcbiAgICAgICAgICBvID0gbyA+PSAwICYmIG8gPD0gNTkgPyBvIDogMDtcbiAgICAgICAgICBsZXQgbCA9IHBhcnNlSW50KGVbNl0sIDEwKTtcbiAgICAgICAgICBsID0gbCA+PSAwICYmIGwgPD0gNTkgPyBsIDogMDtcbiAgICAgICAgICBjb25zdCBjID0gZVs3XSB8fCBcIlpcIjtcbiAgICAgICAgICBsZXQgaCA9IHBhcnNlSW50KGVbOF0sIDEwKTtcbiAgICAgICAgICBoID0gaCA+PSAwICYmIGggPD0gMjMgPyBoIDogMDtcbiAgICAgICAgICBsZXQgZCA9IHBhcnNlSW50KGVbOV0sIDEwKSB8fCAwO1xuICAgICAgICAgIGQgPSBkID49IDAgJiYgZCA8PSA1OSA/IGQgOiAwO1xuICAgICAgICAgIGlmIChcIi1cIiA9PT0gYykge1xuICAgICAgICAgICAgcyArPSBoO1xuICAgICAgICAgICAgbyArPSBkO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXCIrXCIgPT09IGMpIHtcbiAgICAgICAgICAgIHMgLT0gaDtcbiAgICAgICAgICAgIG8gLT0gZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKG4sIGksIHIsIHMsIG8sIGwpKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGZ1bmN0aW9uIGdldFJHQih0KSB7XG4gICAgICAgIGlmICh0LnN0YXJ0c1dpdGgoXCIjXCIpKSB7XG4gICAgICAgICAgY29uc3QgZSA9IHBhcnNlSW50KHQuc2xpY2UoMSksIDE2KTtcbiAgICAgICAgICByZXR1cm4gWygxNjcxMTY4MCAmIGUpID4+IDE2LCAoNjUyODAgJiBlKSA+PiA4LCAyNTUgJiBlXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodC5zdGFydHNXaXRoKFwicmdiKFwiKSkgcmV0dXJuIHQuc2xpY2UoNCwgLTEpLnNwbGl0KFwiLFwiKS5tYXAodCA9PiBwYXJzZUludCh0KSk7XG4gICAgICAgIGlmICh0LnN0YXJ0c1dpdGgoXCJyZ2JhKFwiKSkgcmV0dXJuIHQuc2xpY2UoNSwgLTEpLnNwbGl0KFwiLFwiKS5tYXAodCA9PiBwYXJzZUludCh0KSkuc2xpY2UoMCwgMyk7XG4gICAgICAgICgwLCByLndhcm4pKFwiTm90IGEgdmFsaWQgY29sb3IgZm9ybWF0OiBcXFwiXCIuY29uY2F0KHQsIFwiXFxcIlwiKSk7XG4gICAgICAgIHJldHVybiBbMCwgMCwgMF07XG4gICAgICB9XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgdmFsdWU6ICEwXG4gICAgICB9KTtcbiAgICAgIGUuQmFzZVN0YW5kYXJkRm9udERhdGFGYWN0b3J5ID0gZS5CYXNlU1ZHRmFjdG9yeSA9IGUuQmFzZUZpbHRlckZhY3RvcnkgPSBlLkJhc2VDYW52YXNGYWN0b3J5ID0gZS5CYXNlQ01hcFJlYWRlckZhY3RvcnkgPSB2b2lkIDA7XG4gICAgICBuKDIpO1xuICAgICAgdmFyIGkgPSBuKDEpO1xuICAgICAgY2xhc3MgQmFzZUZpbHRlckZhY3Rvcnkge1xuICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICB0aGlzLmNvbnN0cnVjdG9yID09PSBCYXNlRmlsdGVyRmFjdG9yeSAmJiAoMCwgaS51bnJlYWNoYWJsZSkoXCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlRmlsdGVyRmFjdG9yeS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgYWRkRmlsdGVyKHQpIHtcbiAgICAgICAgICByZXR1cm4gXCJub25lXCI7XG4gICAgICAgIH1cbiAgICAgICAgYWRkSENNRmlsdGVyKHQsIGUpIHtcbiAgICAgICAgICByZXR1cm4gXCJub25lXCI7XG4gICAgICAgIH1cbiAgICAgICAgYWRkSGlnaGxpZ2h0SENNRmlsdGVyKHQsIGUsIG4sIGkpIHtcbiAgICAgICAgICByZXR1cm4gXCJub25lXCI7XG4gICAgICAgIH1cbiAgICAgICAgZGVzdHJveSgpIHt9XG4gICAgICB9XG4gICAgICBlLkJhc2VGaWx0ZXJGYWN0b3J5ID0gQmFzZUZpbHRlckZhY3Rvcnk7XG4gICAgICBjbGFzcyBCYXNlQ2FudmFzRmFjdG9yeSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgIHRoaXMuY29uc3RydWN0b3IgPT09IEJhc2VDYW52YXNGYWN0b3J5ICYmICgwLCBpLnVucmVhY2hhYmxlKShcIkNhbm5vdCBpbml0aWFsaXplIEJhc2VDYW52YXNGYWN0b3J5LlwiKTtcbiAgICAgICAgfVxuICAgICAgICBjcmVhdGUodCwgZSkge1xuICAgICAgICAgIGlmICh0IDw9IDAgfHwgZSA8PSAwKSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGNhbnZhcyBzaXplXCIpO1xuICAgICAgICAgIGNvbnN0IG4gPSB0aGlzLl9jcmVhdGVDYW52YXModCwgZSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNhbnZhczogbixcbiAgICAgICAgICAgIGNvbnRleHQ6IG4uZ2V0Q29udGV4dChcIjJkXCIpXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXNldCh0LCBlLCBuKSB7XG4gICAgICAgICAgaWYgKCF0LmNhbnZhcykgdGhyb3cgbmV3IEVycm9yKFwiQ2FudmFzIGlzIG5vdCBzcGVjaWZpZWRcIik7XG4gICAgICAgICAgaWYgKGUgPD0gMCB8fCBuIDw9IDApIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY2FudmFzIHNpemVcIik7XG4gICAgICAgICAgdC5jYW52YXMud2lkdGggPSBlO1xuICAgICAgICAgIHQuY2FudmFzLmhlaWdodCA9IG47XG4gICAgICAgIH1cbiAgICAgICAgZGVzdHJveSh0KSB7XG4gICAgICAgICAgaWYgKCF0LmNhbnZhcykgdGhyb3cgbmV3IEVycm9yKFwiQ2FudmFzIGlzIG5vdCBzcGVjaWZpZWRcIik7XG4gICAgICAgICAgdC5jYW52YXMud2lkdGggPSAwO1xuICAgICAgICAgIHQuY2FudmFzLmhlaWdodCA9IDA7XG4gICAgICAgICAgdC5jYW52YXMgPSBudWxsO1xuICAgICAgICAgIHQuY29udGV4dCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgX2NyZWF0ZUNhbnZhcyh0LCBlKSB7XG4gICAgICAgICAgKDAsIGkudW5yZWFjaGFibGUpKFwiQWJzdHJhY3QgbWV0aG9kIGBfY3JlYXRlQ2FudmFzYCBjYWxsZWQuXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlLkJhc2VDYW52YXNGYWN0b3J5ID0gQmFzZUNhbnZhc0ZhY3Rvcnk7XG4gICAgICBjbGFzcyBCYXNlQ01hcFJlYWRlckZhY3Rvcnkge1xuICAgICAgICBjb25zdHJ1Y3Rvcih0KSB7XG4gICAgICAgICAgbGV0IHtcbiAgICAgICAgICAgIGJhc2VVcmw6IGUgPSBudWxsLFxuICAgICAgICAgICAgaXNDb21wcmVzc2VkOiBuID0gITBcbiAgICAgICAgICB9ID0gdDtcbiAgICAgICAgICB0aGlzLmNvbnN0cnVjdG9yID09PSBCYXNlQ01hcFJlYWRlckZhY3RvcnkgJiYgKDAsIGkudW5yZWFjaGFibGUpKFwiQ2Fubm90IGluaXRpYWxpemUgQmFzZUNNYXBSZWFkZXJGYWN0b3J5LlwiKTtcbiAgICAgICAgICB0aGlzLmJhc2VVcmwgPSBlO1xuICAgICAgICAgIHRoaXMuaXNDb21wcmVzc2VkID0gbjtcbiAgICAgICAgfVxuICAgICAgICBhc3luYyBmZXRjaCh0KSB7XG4gICAgICAgICAgbGV0IHtcbiAgICAgICAgICAgIG5hbWU6IGVcbiAgICAgICAgICB9ID0gdDtcbiAgICAgICAgICBpZiAoIXRoaXMuYmFzZVVybCkgdGhyb3cgbmV3IEVycm9yKCdUaGUgQ01hcCBcImJhc2VVcmxcIiBwYXJhbWV0ZXIgbXVzdCBiZSBzcGVjaWZpZWQsIGVuc3VyZSB0aGF0IHRoZSBcImNNYXBVcmxcIiBhbmQgXCJjTWFwUGFja2VkXCIgQVBJIHBhcmFtZXRlcnMgYXJlIHByb3ZpZGVkLicpO1xuICAgICAgICAgIGlmICghZSkgdGhyb3cgbmV3IEVycm9yKFwiQ01hcCBuYW1lIG11c3QgYmUgc3BlY2lmaWVkLlwiKTtcbiAgICAgICAgICBjb25zdCBuID0gdGhpcy5iYXNlVXJsICsgZSArICh0aGlzLmlzQ29tcHJlc3NlZCA/IFwiLmJjbWFwXCIgOiBcIlwiKSxcbiAgICAgICAgICAgIHIgPSB0aGlzLmlzQ29tcHJlc3NlZCA/IGkuQ01hcENvbXByZXNzaW9uVHlwZS5CSU5BUlkgOiBpLkNNYXBDb21wcmVzc2lvblR5cGUuTk9ORTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fZmV0Y2hEYXRhKG4sIHIpLmNhdGNoKHQgPT4ge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIGxvYWQgXCIuY29uY2F0KHRoaXMuaXNDb21wcmVzc2VkID8gXCJiaW5hcnkgXCIgOiBcIlwiLCBcIkNNYXAgYXQ6IFwiKS5jb25jYXQobikpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIF9mZXRjaERhdGEodCwgZSkge1xuICAgICAgICAgICgwLCBpLnVucmVhY2hhYmxlKShcIkFic3RyYWN0IG1ldGhvZCBgX2ZldGNoRGF0YWAgY2FsbGVkLlwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZS5CYXNlQ01hcFJlYWRlckZhY3RvcnkgPSBCYXNlQ01hcFJlYWRlckZhY3Rvcnk7XG4gICAgICBjbGFzcyBCYXNlU3RhbmRhcmRGb250RGF0YUZhY3Rvcnkge1xuICAgICAgICBjb25zdHJ1Y3Rvcih0KSB7XG4gICAgICAgICAgbGV0IHtcbiAgICAgICAgICAgIGJhc2VVcmw6IGUgPSBudWxsXG4gICAgICAgICAgfSA9IHQ7XG4gICAgICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9PT0gQmFzZVN0YW5kYXJkRm9udERhdGFGYWN0b3J5ICYmICgwLCBpLnVucmVhY2hhYmxlKShcIkNhbm5vdCBpbml0aWFsaXplIEJhc2VTdGFuZGFyZEZvbnREYXRhRmFjdG9yeS5cIik7XG4gICAgICAgICAgdGhpcy5iYXNlVXJsID0gZTtcbiAgICAgICAgfVxuICAgICAgICBhc3luYyBmZXRjaCh0KSB7XG4gICAgICAgICAgbGV0IHtcbiAgICAgICAgICAgIGZpbGVuYW1lOiBlXG4gICAgICAgICAgfSA9IHQ7XG4gICAgICAgICAgaWYgKCF0aGlzLmJhc2VVcmwpIHRocm93IG5ldyBFcnJvcignVGhlIHN0YW5kYXJkIGZvbnQgXCJiYXNlVXJsXCIgcGFyYW1ldGVyIG11c3QgYmUgc3BlY2lmaWVkLCBlbnN1cmUgdGhhdCB0aGUgXCJzdGFuZGFyZEZvbnREYXRhVXJsXCIgQVBJIHBhcmFtZXRlciBpcyBwcm92aWRlZC4nKTtcbiAgICAgICAgICBpZiAoIWUpIHRocm93IG5ldyBFcnJvcihcIkZvbnQgZmlsZW5hbWUgbXVzdCBiZSBzcGVjaWZpZWQuXCIpO1xuICAgICAgICAgIGNvbnN0IG4gPSBcIlwiLmNvbmNhdCh0aGlzLmJhc2VVcmwpLmNvbmNhdChlKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fZmV0Y2hEYXRhKG4pLmNhdGNoKHQgPT4ge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIGxvYWQgZm9udCBkYXRhIGF0OiBcIi5jb25jYXQobikpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIF9mZXRjaERhdGEodCkge1xuICAgICAgICAgICgwLCBpLnVucmVhY2hhYmxlKShcIkFic3RyYWN0IG1ldGhvZCBgX2ZldGNoRGF0YWAgY2FsbGVkLlwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZS5CYXNlU3RhbmRhcmRGb250RGF0YUZhY3RvcnkgPSBCYXNlU3RhbmRhcmRGb250RGF0YUZhY3Rvcnk7XG4gICAgICBjbGFzcyBCYXNlU1ZHRmFjdG9yeSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgIHRoaXMuY29uc3RydWN0b3IgPT09IEJhc2VTVkdGYWN0b3J5ICYmICgwLCBpLnVucmVhY2hhYmxlKShcIkNhbm5vdCBpbml0aWFsaXplIEJhc2VTVkdGYWN0b3J5LlwiKTtcbiAgICAgICAgfVxuICAgICAgICBjcmVhdGUodCwgZSkge1xuICAgICAgICAgIGxldCBuID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMl0gJiYgYXJndW1lbnRzWzJdO1xuICAgICAgICAgIGlmICh0IDw9IDAgfHwgZSA8PSAwKSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIFNWRyBkaW1lbnNpb25zXCIpO1xuICAgICAgICAgIGNvbnN0IGkgPSB0aGlzLl9jcmVhdGVTVkcoXCJzdmc6c3ZnXCIpO1xuICAgICAgICAgIGkuc2V0QXR0cmlidXRlKFwidmVyc2lvblwiLCBcIjEuMVwiKTtcbiAgICAgICAgICBpZiAoIW4pIHtcbiAgICAgICAgICAgIGkuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgXCJcIi5jb25jYXQodCwgXCJweFwiKSk7XG4gICAgICAgICAgICBpLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBcIlwiLmNvbmNhdChlLCBcInB4XCIpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaS5zZXRBdHRyaWJ1dGUoXCJwcmVzZXJ2ZUFzcGVjdFJhdGlvXCIsIFwibm9uZVwiKTtcbiAgICAgICAgICBpLnNldEF0dHJpYnV0ZShcInZpZXdCb3hcIiwgXCIwIDAgXCIuY29uY2F0KHQsIFwiIFwiKS5jb25jYXQoZSkpO1xuICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgICAgIGNyZWF0ZUVsZW1lbnQodCkge1xuICAgICAgICAgIGlmIChcInN0cmluZ1wiICE9IHR5cGVvZiB0KSB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIFNWRyBlbGVtZW50IHR5cGVcIik7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2NyZWF0ZVNWRyh0KTtcbiAgICAgICAgfVxuICAgICAgICBfY3JlYXRlU1ZHKHQpIHtcbiAgICAgICAgICAoMCwgaS51bnJlYWNoYWJsZSkoXCJBYnN0cmFjdCBtZXRob2QgYF9jcmVhdGVTVkdgIGNhbGxlZC5cIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGUuQmFzZVNWR0ZhY3RvcnkgPSBCYXNlU1ZHRmFjdG9yeTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICB2YWx1ZTogITBcbiAgICAgIH0pO1xuICAgICAgZS5NdXJtdXJIYXNoM182NCA9IHZvaWQgMDtcbiAgICAgIG4oOTMpO1xuICAgICAgbigxMDEpO1xuICAgICAgbigxMDIpO1xuICAgICAgbigxMDUpO1xuICAgICAgbigxMDcpO1xuICAgICAgbigxMDkpO1xuICAgICAgbigxMTMpO1xuICAgICAgbigxMTYpO1xuICAgICAgbigxMjMpO1xuICAgICAgbigyKTtcbiAgICAgIHZhciBpID0gbigxKTtcbiAgICAgIGNvbnN0IHIgPSAzMjg1Mzc3NTIwLFxuICAgICAgICBzID0gNDI5NDkwMTc2MCxcbiAgICAgICAgYSA9IDY1NTM1O1xuICAgICAgZS5NdXJtdXJIYXNoM182NCA9IGNsYXNzIE11cm11ckhhc2gzXzY0IHtcbiAgICAgICAgY29uc3RydWN0b3IodCkge1xuICAgICAgICAgIHRoaXMuaDEgPSB0ID8gNDI5NDk2NzI5NSAmIHQgOiByO1xuICAgICAgICAgIHRoaXMuaDIgPSB0ID8gNDI5NDk2NzI5NSAmIHQgOiByO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZSh0KSB7XG4gICAgICAgICAgbGV0IGUsIG47XG4gICAgICAgICAgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHQpIHtcbiAgICAgICAgICAgIGUgPSBuZXcgVWludDhBcnJheSgyICogdC5sZW5ndGgpO1xuICAgICAgICAgICAgbiA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgciA9IHQubGVuZ3RoOyBpIDwgcjsgaSsrKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHIgPSB0LmNoYXJDb2RlQXQoaSk7XG4gICAgICAgICAgICAgIGlmIChyIDw9IDI1NSkgZVtuKytdID0gcjtlbHNlIHtcbiAgICAgICAgICAgICAgICBlW24rK10gPSByID4+PiA4O1xuICAgICAgICAgICAgICAgIGVbbisrXSA9IDI1NSAmIHI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCEoMCwgaS5pc0FycmF5QnVmZmVyKSh0KSkgdGhyb3cgbmV3IEVycm9yKFwiV3JvbmcgZGF0YSBmb3JtYXQgaW4gTXVybXVySGFzaDNfNjRfdXBkYXRlLiBJbnB1dCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFycmF5LlwiKTtcbiAgICAgICAgICAgIGUgPSB0LnNsaWNlKCk7XG4gICAgICAgICAgICBuID0gZS5ieXRlTGVuZ3RoO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByID0gbiA+PiAyLFxuICAgICAgICAgICAgbyA9IG4gLSA0ICogcixcbiAgICAgICAgICAgIGwgPSBuZXcgVWludDMyQXJyYXkoZS5idWZmZXIsIDAsIHIpO1xuICAgICAgICAgIGxldCBjID0gMCxcbiAgICAgICAgICAgIGggPSAwLFxuICAgICAgICAgICAgZCA9IHRoaXMuaDEsXG4gICAgICAgICAgICB1ID0gdGhpcy5oMjtcbiAgICAgICAgICBjb25zdCBwID0gMzQzMjkxODM1MyxcbiAgICAgICAgICAgIGYgPSA0NjE4NDU5MDcsXG4gICAgICAgICAgICBnID0gMTE2MDEsXG4gICAgICAgICAgICBtID0gMTM3MTU7XG4gICAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCByOyB0KyspIGlmICgxICYgdCkge1xuICAgICAgICAgICAgYyA9IGxbdF07XG4gICAgICAgICAgICBjID0gYyAqIHAgJiBzIHwgYyAqIGcgJiBhO1xuICAgICAgICAgICAgYyA9IGMgPDwgMTUgfCBjID4+PiAxNztcbiAgICAgICAgICAgIGMgPSBjICogZiAmIHMgfCBjICogbSAmIGE7XG4gICAgICAgICAgICBkIF49IGM7XG4gICAgICAgICAgICBkID0gZCA8PCAxMyB8IGQgPj4+IDE5O1xuICAgICAgICAgICAgZCA9IDUgKiBkICsgMzg2NDI5MjE5NjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaCA9IGxbdF07XG4gICAgICAgICAgICBoID0gaCAqIHAgJiBzIHwgaCAqIGcgJiBhO1xuICAgICAgICAgICAgaCA9IGggPDwgMTUgfCBoID4+PiAxNztcbiAgICAgICAgICAgIGggPSBoICogZiAmIHMgfCBoICogbSAmIGE7XG4gICAgICAgICAgICB1IF49IGg7XG4gICAgICAgICAgICB1ID0gdSA8PCAxMyB8IHUgPj4+IDE5O1xuICAgICAgICAgICAgdSA9IDUgKiB1ICsgMzg2NDI5MjE5NjtcbiAgICAgICAgICB9XG4gICAgICAgICAgYyA9IDA7XG4gICAgICAgICAgc3dpdGNoIChvKSB7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgIGMgXj0gZVs0ICogciArIDJdIDw8IDE2O1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICBjIF49IGVbNCAqIHIgKyAxXSA8PCA4O1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICBjIF49IGVbNCAqIHJdO1xuICAgICAgICAgICAgICBjID0gYyAqIHAgJiBzIHwgYyAqIGcgJiBhO1xuICAgICAgICAgICAgICBjID0gYyA8PCAxNSB8IGMgPj4+IDE3O1xuICAgICAgICAgICAgICBjID0gYyAqIGYgJiBzIHwgYyAqIG0gJiBhO1xuICAgICAgICAgICAgICAxICYgciA/IGQgXj0gYyA6IHUgXj0gYztcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5oMSA9IGQ7XG4gICAgICAgICAgdGhpcy5oMiA9IHU7XG4gICAgICAgIH1cbiAgICAgICAgaGV4ZGlnZXN0KCkge1xuICAgICAgICAgIGxldCB0ID0gdGhpcy5oMSxcbiAgICAgICAgICAgIGUgPSB0aGlzLmgyO1xuICAgICAgICAgIHQgXj0gZSA+Pj4gMTtcbiAgICAgICAgICB0ID0gMzk4MTgwNjc5NyAqIHQgJiBzIHwgMzYwNDUgKiB0ICYgYTtcbiAgICAgICAgICBlID0gNDI4MzU0MzUxMSAqIGUgJiBzIHwgKDI5NTAxNjM3OTcgKiAoZSA8PCAxNiB8IHQgPj4+IDE2KSAmIHMpID4+PiAxNjtcbiAgICAgICAgICB0IF49IGUgPj4+IDE7XG4gICAgICAgICAgdCA9IDQ0NDk4NDQwMyAqIHQgJiBzIHwgNjA0OTkgKiB0ICYgYTtcbiAgICAgICAgICBlID0gMzMwMTg4MjM2NiAqIGUgJiBzIHwgKDMxMjA0Mzc4OTMgKiAoZSA8PCAxNiB8IHQgPj4+IDE2KSAmIHMpID4+PiAxNjtcbiAgICAgICAgICB0IF49IGUgPj4+IDE7XG4gICAgICAgICAgcmV0dXJuICh0ID4+PiAwKS50b1N0cmluZygxNikucGFkU3RhcnQoOCwgXCIwXCIpICsgKGUgPj4+IDApLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg4LCBcIjBcIik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgICB2YXIgX1d0O1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgIHZhbHVlOiAhMFxuICAgICAgfSk7XG4gICAgICBlLkZvbnRMb2FkZXIgPSBlLkZvbnRGYWNlT2JqZWN0ID0gdm9pZCAwO1xuICAgICAgbigxMjUpO1xuICAgICAgbigxMzUpO1xuICAgICAgbigxMzcpO1xuICAgICAgbigxNDApO1xuICAgICAgbigxNDIpO1xuICAgICAgbigxNDQpO1xuICAgICAgbigxNDYpO1xuICAgICAgbig4OSk7XG4gICAgICBuKDE0OCk7XG4gICAgICB2YXIgaSA9IG4oMSk7XG4gICAgICBlLkZvbnRMb2FkZXIgPSAoX1d0ID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCksIGNsYXNzIEZvbnRMb2FkZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcih0KSB7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX1d0LCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBuZXcgU2V0KClcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBsZXQge1xuICAgICAgICAgICAgb3duZXJEb2N1bWVudDogZSA9IGdsb2JhbFRoaXMuZG9jdW1lbnQsXG4gICAgICAgICAgICBzdHlsZUVsZW1lbnQ6IG4gPSBudWxsXG4gICAgICAgICAgfSA9IHQ7XG4gICAgICAgICAgdGhpcy5fZG9jdW1lbnQgPSBlO1xuICAgICAgICAgIHRoaXMubmF0aXZlRm9udEZhY2VzID0gbmV3IFNldCgpO1xuICAgICAgICAgIHRoaXMuc3R5bGVFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgICB0aGlzLmxvYWRpbmdSZXF1ZXN0cyA9IFtdO1xuICAgICAgICAgIHRoaXMubG9hZFRlc3RGb250SWQgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGFkZE5hdGl2ZUZvbnRGYWNlKHQpIHtcbiAgICAgICAgICB0aGlzLm5hdGl2ZUZvbnRGYWNlcy5hZGQodCk7XG4gICAgICAgICAgdGhpcy5fZG9jdW1lbnQuZm9udHMuYWRkKHQpO1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZU5hdGl2ZUZvbnRGYWNlKHQpIHtcbiAgICAgICAgICB0aGlzLm5hdGl2ZUZvbnRGYWNlcy5kZWxldGUodCk7XG4gICAgICAgICAgdGhpcy5fZG9jdW1lbnQuZm9udHMuZGVsZXRlKHQpO1xuICAgICAgICB9XG4gICAgICAgIGluc2VydFJ1bGUodCkge1xuICAgICAgICAgIGlmICghdGhpcy5zdHlsZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuc3R5bGVFbGVtZW50ID0gdGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuICAgICAgICAgICAgdGhpcy5fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKVswXS5hcHBlbmQodGhpcy5zdHlsZUVsZW1lbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBlID0gdGhpcy5zdHlsZUVsZW1lbnQuc2hlZXQ7XG4gICAgICAgICAgZS5pbnNlcnRSdWxlKHQsIGUuY3NzUnVsZXMubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBjbGVhcigpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHQgb2YgdGhpcy5uYXRpdmVGb250RmFjZXMpIHRoaXMuX2RvY3VtZW50LmZvbnRzLmRlbGV0ZSh0KTtcbiAgICAgICAgICB0aGlzLm5hdGl2ZUZvbnRGYWNlcy5jbGVhcigpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfV3QpLmNsZWFyKCk7XG4gICAgICAgICAgaWYgKHRoaXMuc3R5bGVFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLnN0eWxlRWxlbWVudC5yZW1vdmUoKTtcbiAgICAgICAgICAgIHRoaXMuc3R5bGVFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYXN5bmMgbG9hZFN5c3RlbUZvbnQodCkge1xuICAgICAgICAgIGlmICh0ICYmICFfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1d0KS5oYXModC5sb2FkZWROYW1lKSkge1xuICAgICAgICAgICAgKDAsIGkuYXNzZXJ0KSghdGhpcy5kaXNhYmxlRm9udEZhY2UsIFwibG9hZFN5c3RlbUZvbnQgc2hvdWxkbid0IGJlIGNhbGxlZCB3aGVuIGBkaXNhYmxlRm9udEZhY2VgIGlzIHNldC5cIik7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0ZvbnRMb2FkaW5nQVBJU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgICAgIGxvYWRlZE5hbWU6IGUsXG4gICAgICAgICAgICAgICAgICBzcmM6IG4sXG4gICAgICAgICAgICAgICAgICBzdHlsZTogclxuICAgICAgICAgICAgICAgIH0gPSB0LFxuICAgICAgICAgICAgICAgIHMgPSBuZXcgRm9udEZhY2UoZSwgbiwgcik7XG4gICAgICAgICAgICAgIHRoaXMuYWRkTmF0aXZlRm9udEZhY2Uocyk7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgcy5sb2FkKCk7XG4gICAgICAgICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9XdCkuYWRkKGUpO1xuICAgICAgICAgICAgICB9IGNhdGNoIChfdW51c2VkMTEpIHtcbiAgICAgICAgICAgICAgICAoMCwgaS53YXJuKShcIkNhbm5vdCBsb2FkIHN5c3RlbSBmb250OiBcIi5jb25jYXQodC5iYXNlRm9udE5hbWUsIFwiLCBpbnN0YWxsaW5nIGl0IGNvdWxkIGhlbHAgdG8gaW1wcm92ZSBQREYgcmVuZGVyaW5nLlwiKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVOYXRpdmVGb250RmFjZShzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlICgwLCBpLnVucmVhY2hhYmxlKShcIk5vdCBpbXBsZW1lbnRlZDogbG9hZFN5c3RlbUZvbnQgd2l0aG91dCB0aGUgRm9udCBMb2FkaW5nIEFQSS5cIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGFzeW5jIGJpbmQodCkge1xuICAgICAgICAgIGlmICh0LmF0dGFjaGVkIHx8IHQubWlzc2luZ0ZpbGUgJiYgIXQuc3lzdGVtRm9udEluZm8pIHJldHVybjtcbiAgICAgICAgICB0LmF0dGFjaGVkID0gITA7XG4gICAgICAgICAgaWYgKHQuc3lzdGVtRm9udEluZm8pIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZFN5c3RlbUZvbnQodC5zeXN0ZW1Gb250SW5mbyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLmlzRm9udExvYWRpbmdBUElTdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGUgPSB0LmNyZWF0ZU5hdGl2ZUZvbnRGYWNlKCk7XG4gICAgICAgICAgICBpZiAoZSkge1xuICAgICAgICAgICAgICB0aGlzLmFkZE5hdGl2ZUZvbnRGYWNlKGUpO1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGF3YWl0IGUubG9hZGVkO1xuICAgICAgICAgICAgICB9IGNhdGNoIChuKSB7XG4gICAgICAgICAgICAgICAgKDAsIGkud2FybikoXCJGYWlsZWQgdG8gbG9hZCBmb250ICdcIi5jb25jYXQoZS5mYW1pbHksIFwiJzogJ1wiKS5jb25jYXQobiwgXCInLlwiKSk7XG4gICAgICAgICAgICAgICAgdC5kaXNhYmxlRm9udEZhY2UgPSAhMDtcbiAgICAgICAgICAgICAgICB0aHJvdyBuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGUgPSB0LmNyZWF0ZUZvbnRGYWNlUnVsZSgpO1xuICAgICAgICAgIGlmIChlKSB7XG4gICAgICAgICAgICB0aGlzLmluc2VydFJ1bGUoZSk7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1N5bmNGb250TG9hZGluZ1N1cHBvcnRlZCkgcmV0dXJuO1xuICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoZSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG4gPSB0aGlzLl9xdWV1ZUxvYWRpbmdDYWxsYmFjayhlKTtcbiAgICAgICAgICAgICAgdGhpcy5fcHJlcGFyZUZvbnRMb2FkRXZlbnQodCwgbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGlzRm9udExvYWRpbmdBUElTdXBwb3J0ZWQoKSB7XG4gICAgICAgICAgdmFyIF90aGlzJF9kb2N1bWVudDtcbiAgICAgICAgICBjb25zdCB0ID0gISEoKF90aGlzJF9kb2N1bWVudCA9IHRoaXMuX2RvY3VtZW50KSAhPT0gbnVsbCAmJiBfdGhpcyRfZG9jdW1lbnQgIT09IHZvaWQgMCAmJiBfdGhpcyRfZG9jdW1lbnQuZm9udHMpO1xuICAgICAgICAgIHJldHVybiAoMCwgaS5zaGFkb3cpKHRoaXMsIFwiaXNGb250TG9hZGluZ0FQSVN1cHBvcnRlZFwiLCB0KTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgaXNTeW5jRm9udExvYWRpbmdTdXBwb3J0ZWQoKSB7XG4gICAgICAgICAgbGV0IHQgPSAhMTtcbiAgICAgICAgICAoaS5pc05vZGVKUyB8fCBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBuYXZpZ2F0b3IgJiYgL01vemlsbGFcXC81LjAuKj9ydjpcXGQrLio/IEdlY2tvLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKSAmJiAodCA9ICEwKTtcbiAgICAgICAgICByZXR1cm4gKDAsIGkuc2hhZG93KSh0aGlzLCBcImlzU3luY0ZvbnRMb2FkaW5nU3VwcG9ydGVkXCIsIHQpO1xuICAgICAgICB9XG4gICAgICAgIF9xdWV1ZUxvYWRpbmdDYWxsYmFjayh0KSB7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICBsb2FkaW5nUmVxdWVzdHM6IGVcbiAgICAgICAgICAgIH0gPSB0aGlzLFxuICAgICAgICAgICAgbiA9IHtcbiAgICAgICAgICAgICAgZG9uZTogITEsXG4gICAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiBjb21wbGV0ZVJlcXVlc3QoKSB7XG4gICAgICAgICAgICAgICAgKDAsIGkuYXNzZXJ0KSghbi5kb25lLCBcImNvbXBsZXRlUmVxdWVzdCgpIGNhbm5vdCBiZSBjYWxsZWQgdHdpY2UuXCIpO1xuICAgICAgICAgICAgICAgIG4uZG9uZSA9ICEwO1xuICAgICAgICAgICAgICAgIGZvciAoOyBlLmxlbmd0aCA+IDAgJiYgZVswXS5kb25lOykge1xuICAgICAgICAgICAgICAgICAgY29uc3QgdCA9IGUuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQodC5jYWxsYmFjaywgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBjYWxsYmFjazogdFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICBlLnB1c2gobik7XG4gICAgICAgICAgcmV0dXJuIG47XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IF9sb2FkVGVzdEZvbnQoKSB7XG4gICAgICAgICAgY29uc3QgdCA9IGF0b2IoXCJUMVJVVHdBTEFJQUFBd0F3UTBaR0lESHRaZzRBQUFPWUFBQUFnVVpHVkUxbGt6WndBQUFFSEFBQUFCeEhSRVZHQUJRQUZRQUFCRGdBQUFBZVQxTXZNbFlOWXdrQUFBRWdBQUFBWUdOdFlYQUJEUUxVQUFBQ05BQUFBVUpvWldGay94VkZEUUFBQUx3QUFBQTJhR2hsWVFka0Erb0FBQUQwQUFBQUpHaHRkSGdENkFBQUFBQUVXQUFBQUFadFlYaHdBQUpRQUFBQUFSZ0FBQUFHYm1GdFpWam1kSDRBQUFHQUFBQUFzWEJ2YzNUL2hnQXpBQUFEZUFBQUFDQUFBUUFBQUFFQUFMWlJGc1JmRHp6MUFBc0Q2QUFBQUFET0JPVExBQUFBQU00S0hEd0FBQUFBQStnRElRQUFBQWdBQWdBQUFBQUFBQUFCQUFBRElRQUFBRm9ENkFBQUFBQUQ2QUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBVUFBQUFnQUFBQVFENkFIMEFBVUFBQUtLQXJ3QUFBQ01Bb29DdkFBQUFlQUFNUUVDQUFBQ0FBWUpBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUZCbVJXUUF3QUF1QUM0RElQODRBRm9ESVFBQUFBQUFBUUFBQUFBQUFBQUFBQ0FBSUFBQkFBQUFEZ0N1QUFFQUFBQUFBQUFBQVFBQUFBRUFBQUFBQUFFQUFRQUFBQUVBQUFBQUFBSUFBUUFBQUFFQUFBQUFBQU1BQVFBQUFBRUFBQUFBQUFRQUFRQUFBQUVBQUFBQUFBVUFBUUFBQUFFQUFBQUFBQVlBQVFBQUFBTUFBUVFKQUFBQUFnQUJBQU1BQVFRSkFBRUFBZ0FCQUFNQUFRUUpBQUlBQWdBQkFBTUFBUVFKQUFNQUFnQUJBQU1BQVFRSkFBUUFBZ0FCQUFNQUFRUUpBQVVBQWdBQkFBTUFBUVFKQUFZQUFnQUJXQUJZQUFBQUFBQUFBd0FBQUFNQUFBQWNBQUVBQUFBQUFEd0FBd0FCQUFBQUhBQUVBQ0FBQUFBRUFBUUFBUUFBQUM3Ly93QUFBQzcvLy8vVEFBRUFBQUFBQUFBQkJnQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUFBQUFBQUFEL2d3QXlBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFRRUFBRUJBUUpZQUFFQkFTSDREd0Q0R3dIRUF2Z2NBL2dYQkl3TUFZdUwrbno1dFFYa0Q1ajNDQkxuRVFBQ0FRRUJJVmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWUFBQUJBUUFBRHdBQ0FRRUVFL3QzRG92NmZBSDZmQVQrZlBwOCtud0hEb3NNQ3ZtMUN2bTFEQXo2ZkJRQUFBQUFBQUFCQUFBQUFNbUpiekVBQUFBQXpnVGpGUUFBQUFET0JPUXBBQUVBQUFBQUFBQUFEQUFVQUFRQUFBQUJBQUFBQWdBQkFBQUFBQUFBQUFBRDZBQUFBQUFBQUE9PVwiKTtcbiAgICAgICAgICByZXR1cm4gKDAsIGkuc2hhZG93KSh0aGlzLCBcIl9sb2FkVGVzdEZvbnRcIiwgdCk7XG4gICAgICAgIH1cbiAgICAgICAgX3ByZXBhcmVGb250TG9hZEV2ZW50KHQsIGUpIHtcbiAgICAgICAgICBmdW5jdGlvbiBpbnQzMih0LCBlKSB7XG4gICAgICAgICAgICByZXR1cm4gdC5jaGFyQ29kZUF0KGUpIDw8IDI0IHwgdC5jaGFyQ29kZUF0KGUgKyAxKSA8PCAxNiB8IHQuY2hhckNvZGVBdChlICsgMikgPDwgOCB8IDI1NSAmIHQuY2hhckNvZGVBdChlICsgMyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZ1bmN0aW9uIHNwbGljZVN0cmluZyh0LCBlLCBuLCBpKSB7XG4gICAgICAgICAgICByZXR1cm4gdC5zdWJzdHJpbmcoMCwgZSkgKyBpICsgdC5zdWJzdHJpbmcoZSArIG4pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgbiwgcjtcbiAgICAgICAgICBjb25zdCBzID0gdGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgICAgICAgICBzLndpZHRoID0gMTtcbiAgICAgICAgICBzLmhlaWdodCA9IDE7XG4gICAgICAgICAgY29uc3QgYSA9IHMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgICAgICAgIGxldCBvID0gMDtcbiAgICAgICAgICBjb25zdCBsID0gXCJsdFwiLmNvbmNhdChEYXRlLm5vdygpKS5jb25jYXQodGhpcy5sb2FkVGVzdEZvbnRJZCsrKTtcbiAgICAgICAgICBsZXQgYyA9IHRoaXMuX2xvYWRUZXN0Rm9udDtcbiAgICAgICAgICBjID0gc3BsaWNlU3RyaW5nKGMsIDk3NiwgbC5sZW5ndGgsIGwpO1xuICAgICAgICAgIGNvbnN0IGggPSAxNDgyMTg0NzkyO1xuICAgICAgICAgIGxldCBkID0gaW50MzIoYywgMTYpO1xuICAgICAgICAgIGZvciAobiA9IDAsIHIgPSBsLmxlbmd0aCAtIDM7IG4gPCByOyBuICs9IDQpIGQgPSBkIC0gaCArIGludDMyKGwsIG4pIHwgMDtcbiAgICAgICAgICBuIDwgbC5sZW5ndGggJiYgKGQgPSBkIC0gaCArIGludDMyKGwgKyBcIlhYWFwiLCBuKSB8IDApO1xuICAgICAgICAgIGMgPSBzcGxpY2VTdHJpbmcoYywgMTYsIDQsICgwLCBpLnN0cmluZzMyKShkKSk7XG4gICAgICAgICAgY29uc3QgdSA9IFwiQGZvbnQtZmFjZSB7Zm9udC1mYW1pbHk6XFxcIlwiLmNvbmNhdChsLCBcIlxcXCI7c3JjOlwiLCBcInVybChkYXRhOmZvbnQvb3BlbnR5cGU7YmFzZTY0LFwiLmNvbmNhdChidG9hKGMpLCBcIik7XCIpLCBcIn1cIik7XG4gICAgICAgICAgdGhpcy5pbnNlcnRSdWxlKHUpO1xuICAgICAgICAgIGNvbnN0IHAgPSB0aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICAgIHAuc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG4gICAgICAgICAgcC5zdHlsZS53aWR0aCA9IHAuc3R5bGUuaGVpZ2h0ID0gXCIxMHB4XCI7XG4gICAgICAgICAgcC5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcbiAgICAgICAgICBwLnN0eWxlLnRvcCA9IHAuc3R5bGUubGVmdCA9IFwiMHB4XCI7XG4gICAgICAgICAgZm9yIChjb25zdCBlIG9mIFt0LmxvYWRlZE5hbWUsIGxdKSB7XG4gICAgICAgICAgICBjb25zdCB0ID0gdGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG4gICAgICAgICAgICB0LnRleHRDb250ZW50ID0gXCJIaVwiO1xuICAgICAgICAgICAgdC5zdHlsZS5mb250RmFtaWx5ID0gZTtcbiAgICAgICAgICAgIHAuYXBwZW5kKHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9kb2N1bWVudC5ib2R5LmFwcGVuZChwKTtcbiAgICAgICAgICAhZnVuY3Rpb24gaXNGb250UmVhZHkodCwgZSkge1xuICAgICAgICAgICAgaWYgKCsrbyA+IDMwKSB7XG4gICAgICAgICAgICAgICgwLCBpLndhcm4pKFwiTG9hZCB0ZXN0IGZvbnQgbmV2ZXIgbG9hZGVkLlwiKTtcbiAgICAgICAgICAgICAgZSgpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhLmZvbnQgPSBcIjMwcHggXCIgKyB0O1xuICAgICAgICAgICAgYS5maWxsVGV4dChcIi5cIiwgMCwgMjApO1xuICAgICAgICAgICAgYS5nZXRJbWFnZURhdGEoMCwgMCwgMSwgMSkuZGF0YVszXSA+IDAgPyBlKCkgOiBzZXRUaW1lb3V0KGlzRm9udFJlYWR5LmJpbmQobnVsbCwgdCwgZSkpO1xuICAgICAgICAgIH0obCwgKCkgPT4ge1xuICAgICAgICAgICAgcC5yZW1vdmUoKTtcbiAgICAgICAgICAgIGUuY29tcGxldGUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBlLkZvbnRGYWNlT2JqZWN0ID0gY2xhc3MgRm9udEZhY2VPYmplY3Qge1xuICAgICAgICBjb25zdHJ1Y3Rvcih0LCBlKSB7XG4gICAgICAgICAgbGV0IHtcbiAgICAgICAgICAgIGlzRXZhbFN1cHBvcnRlZDogbiA9ICEwLFxuICAgICAgICAgICAgZGlzYWJsZUZvbnRGYWNlOiBpID0gITEsXG4gICAgICAgICAgICBpZ25vcmVFcnJvcnM6IHIgPSAhMSxcbiAgICAgICAgICAgIGluc3BlY3RGb250OiBzID0gbnVsbFxuICAgICAgICAgIH0gPSBlO1xuICAgICAgICAgIHRoaXMuY29tcGlsZWRHbHlwaHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIGZvciAoY29uc3QgZSBpbiB0KSB0aGlzW2VdID0gdFtlXTtcbiAgICAgICAgICB0aGlzLmlzRXZhbFN1cHBvcnRlZCA9ICExICE9PSBuO1xuICAgICAgICAgIHRoaXMuZGlzYWJsZUZvbnRGYWNlID0gITAgPT09IGk7XG4gICAgICAgICAgdGhpcy5pZ25vcmVFcnJvcnMgPSAhMCA9PT0gcjtcbiAgICAgICAgICB0aGlzLl9pbnNwZWN0Rm9udCA9IHM7XG4gICAgICAgIH1cbiAgICAgICAgY3JlYXRlTmF0aXZlRm9udEZhY2UoKSB7XG4gICAgICAgICAgdmFyIF90aGlzJF9pbnNwZWN0Rm9udDtcbiAgICAgICAgICBpZiAoIXRoaXMuZGF0YSB8fCB0aGlzLmRpc2FibGVGb250RmFjZSkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgbGV0IHQ7XG4gICAgICAgICAgaWYgKHRoaXMuY3NzRm9udEluZm8pIHtcbiAgICAgICAgICAgIGNvbnN0IGUgPSB7XG4gICAgICAgICAgICAgIHdlaWdodDogdGhpcy5jc3NGb250SW5mby5mb250V2VpZ2h0XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5jc3NGb250SW5mby5pdGFsaWNBbmdsZSAmJiAoZS5zdHlsZSA9IFwib2JsaXF1ZSBcIi5jb25jYXQodGhpcy5jc3NGb250SW5mby5pdGFsaWNBbmdsZSwgXCJkZWdcIikpO1xuICAgICAgICAgICAgdCA9IG5ldyBGb250RmFjZSh0aGlzLmNzc0ZvbnRJbmZvLmZvbnRGYW1pbHksIHRoaXMuZGF0YSwgZSk7XG4gICAgICAgICAgfSBlbHNlIHQgPSBuZXcgRm9udEZhY2UodGhpcy5sb2FkZWROYW1lLCB0aGlzLmRhdGEsIHt9KTtcbiAgICAgICAgICAoX3RoaXMkX2luc3BlY3RGb250ID0gdGhpcy5faW5zcGVjdEZvbnQpID09PSBudWxsIHx8IF90aGlzJF9pbnNwZWN0Rm9udCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkX2luc3BlY3RGb250LmNhbGwodGhpcywgdGhpcyk7XG4gICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgIH1cbiAgICAgICAgY3JlYXRlRm9udEZhY2VSdWxlKCkge1xuICAgICAgICAgIHZhciBfdGhpcyRfaW5zcGVjdEZvbnQyO1xuICAgICAgICAgIGlmICghdGhpcy5kYXRhIHx8IHRoaXMuZGlzYWJsZUZvbnRGYWNlKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICBjb25zdCB0ID0gKDAsIGkuYnl0ZXNUb1N0cmluZykodGhpcy5kYXRhKSxcbiAgICAgICAgICAgIGUgPSBcInVybChkYXRhOlwiLmNvbmNhdCh0aGlzLm1pbWV0eXBlLCBcIjtiYXNlNjQsXCIpLmNvbmNhdChidG9hKHQpLCBcIik7XCIpO1xuICAgICAgICAgIGxldCBuO1xuICAgICAgICAgIGlmICh0aGlzLmNzc0ZvbnRJbmZvKSB7XG4gICAgICAgICAgICBsZXQgdCA9IFwiZm9udC13ZWlnaHQ6IFwiLmNvbmNhdCh0aGlzLmNzc0ZvbnRJbmZvLmZvbnRXZWlnaHQsIFwiO1wiKTtcbiAgICAgICAgICAgIHRoaXMuY3NzRm9udEluZm8uaXRhbGljQW5nbGUgJiYgKHQgKz0gXCJmb250LXN0eWxlOiBvYmxpcXVlIFwiLmNvbmNhdCh0aGlzLmNzc0ZvbnRJbmZvLml0YWxpY0FuZ2xlLCBcImRlZztcIikpO1xuICAgICAgICAgICAgbiA9IFwiQGZvbnQtZmFjZSB7Zm9udC1mYW1pbHk6XFxcIlwiLmNvbmNhdCh0aGlzLmNzc0ZvbnRJbmZvLmZvbnRGYW1pbHksIFwiXFxcIjtcIikuY29uY2F0KHQsIFwic3JjOlwiKS5jb25jYXQoZSwgXCJ9XCIpO1xuICAgICAgICAgIH0gZWxzZSBuID0gXCJAZm9udC1mYWNlIHtmb250LWZhbWlseTpcXFwiXCIuY29uY2F0KHRoaXMubG9hZGVkTmFtZSwgXCJcXFwiO3NyYzpcIikuY29uY2F0KGUsIFwifVwiKTtcbiAgICAgICAgICAoX3RoaXMkX2luc3BlY3RGb250MiA9IHRoaXMuX2luc3BlY3RGb250KSA9PT0gbnVsbCB8fCBfdGhpcyRfaW5zcGVjdEZvbnQyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRfaW5zcGVjdEZvbnQyLmNhbGwodGhpcywgdGhpcywgZSk7XG4gICAgICAgICAgcmV0dXJuIG47XG4gICAgICAgIH1cbiAgICAgICAgZ2V0UGF0aEdlbmVyYXRvcih0LCBlKSB7XG4gICAgICAgICAgaWYgKHZvaWQgMCAhPT0gdGhpcy5jb21waWxlZEdseXBoc1tlXSkgcmV0dXJuIHRoaXMuY29tcGlsZWRHbHlwaHNbZV07XG4gICAgICAgICAgbGV0IG47XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG4gPSB0LmdldCh0aGlzLmxvYWRlZE5hbWUgKyBcIl9wYXRoX1wiICsgZSk7XG4gICAgICAgICAgfSBjYXRjaCAodCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlnbm9yZUVycm9ycykgdGhyb3cgdDtcbiAgICAgICAgICAgICgwLCBpLndhcm4pKFwiZ2V0UGF0aEdlbmVyYXRvciAtIGlnbm9yaW5nIGNoYXJhY3RlcjogXFxcIlwiLmNvbmNhdCh0LCBcIlxcXCIuXCIpKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBpbGVkR2x5cGhzW2VdID0gZnVuY3Rpb24gKHQsIGUpIHt9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5pc0V2YWxTdXBwb3J0ZWQgJiYgaS5GZWF0dXJlVGVzdC5pc0V2YWxTdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHQgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiBuKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG4gPSB2b2lkIDAgIT09IGUuYXJncyA/IGUuYXJncy5qb2luKFwiLFwiKSA6IFwiXCI7XG4gICAgICAgICAgICAgIHQucHVzaChcImMuXCIsIGUuY21kLCBcIihcIiwgbiwgXCIpO1xcblwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBpbGVkR2x5cGhzW2VdID0gbmV3IEZ1bmN0aW9uKFwiY1wiLCBcInNpemVcIiwgdC5qb2luKFwiXCIpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29tcGlsZWRHbHlwaHNbZV0gPSBmdW5jdGlvbiAodCwgZSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBpIG9mIG4pIHtcbiAgICAgICAgICAgICAgXCJzY2FsZVwiID09PSBpLmNtZCAmJiAoaS5hcmdzID0gW2UsIC1lXSk7XG4gICAgICAgICAgICAgIHRbaS5jbWRdLmFwcGx5KHQsIGkuYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICB2YWx1ZTogITBcbiAgICAgIH0pO1xuICAgICAgZS5Ob2RlU3RhbmRhcmRGb250RGF0YUZhY3RvcnkgPSBlLk5vZGVGaWx0ZXJGYWN0b3J5ID0gZS5Ob2RlQ2FudmFzRmFjdG9yeSA9IGUuTm9kZUNNYXBSZWFkZXJGYWN0b3J5ID0gdm9pZCAwO1xuICAgICAgbigyKTtcbiAgICAgIG4oOTMpO1xuICAgICAgbigxMDEpO1xuICAgICAgbigxMDIpO1xuICAgICAgbigxMDUpO1xuICAgICAgbigxMDcpO1xuICAgICAgbigxMDkpO1xuICAgICAgbigxMTMpO1xuICAgICAgbigxMTYpO1xuICAgICAgbigxMjMpO1xuICAgICAgdmFyIGkgPSBuKDE2OCksXG4gICAgICAgIHIgPSBuKDEpO1xuICAgICAgIWZ1bmN0aW9uIGNoZWNrRE9NTWF0cml4KCkge1xuICAgICAgICBpZiAoIWdsb2JhbFRoaXMuRE9NTWF0cml4ICYmIHIuaXNOb2RlSlMpIHRyeSB7XG4gICAgICAgICAgZ2xvYmFsVGhpcy5ET01NYXRyaXggPSBPYmplY3QoZnVuY3Rpb24gd2VicGFja01pc3NpbmdNb2R1bGUoKSB7IHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdjYW52YXMnXCIpOyBlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7IHRocm93IGU7IH0oKSk7XG4gICAgICAgIH0gY2F0Y2ggKHQpIHtcbiAgICAgICAgICAoMCwgci53YXJuKShcIkNhbm5vdCBwb2x5ZmlsbCBgRE9NTWF0cml4YCwgcmVuZGVyaW5nIG1heSBiZSBicm9rZW46IFxcXCJcIi5jb25jYXQodCwgXCJcXFwiLlwiKSk7XG4gICAgICAgIH1cbiAgICAgIH0oKTtcbiAgICAgICFmdW5jdGlvbiBjaGVja1BhdGgyRCgpIHtcbiAgICAgICAgaWYgKCFnbG9iYWxUaGlzLlBhdGgyRCAmJiByLmlzTm9kZUpTKSB0cnkge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOiB0XG4gICAgICAgICAgICB9ID0gX193ZWJwYWNrX3JlcXVpcmVfXyhPYmplY3QoZnVuY3Rpb24gd2VicGFja01pc3NpbmdNb2R1bGUoKSB7IHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdjYW52YXMnXCIpOyBlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7IHRocm93IGU7IH0oKSkpLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBwb2x5ZmlsbFBhdGgyRDogZVxuICAgICAgICAgICAgfSA9IF9fd2VicGFja19yZXF1aXJlX18oT2JqZWN0KGZ1bmN0aW9uIHdlYnBhY2tNaXNzaW5nTW9kdWxlKCkgeyB2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAncGF0aDJkLXBvbHlmaWxsJ1wiKTsgZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnOyB0aHJvdyBlOyB9KCkpKTtcbiAgICAgICAgICBnbG9iYWxUaGlzLkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCA9IHQ7XG4gICAgICAgICAgZShnbG9iYWxUaGlzKTtcbiAgICAgICAgfSBjYXRjaCAodCkge1xuICAgICAgICAgICgwLCByLndhcm4pKFwiQ2Fubm90IHBvbHlmaWxsIGBQYXRoMkRgLCByZW5kZXJpbmcgbWF5IGJlIGJyb2tlbjogXFxcIlwiLmNvbmNhdCh0LCBcIlxcXCIuXCIpKTtcbiAgICAgICAgfVxuICAgICAgfSgpO1xuICAgICAgY29uc3QgZmV0Y2hEYXRhID0gZnVuY3Rpb24gZmV0Y2hEYXRhKHQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChlLCBuKSA9PiB7XG4gICAgICAgICAgT2JqZWN0KGZ1bmN0aW9uIHdlYnBhY2tNaXNzaW5nTW9kdWxlKCkgeyB2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnZnMnXCIpOyBlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7IHRocm93IGU7IH0oKSkodCwgKHQsIGkpID0+IHtcbiAgICAgICAgICAgICF0ICYmIGkgPyBlKG5ldyBVaW50OEFycmF5KGkpKSA6IG4obmV3IEVycm9yKHQpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgY2xhc3MgTm9kZUZpbHRlckZhY3RvcnkgZXh0ZW5kcyBpLkJhc2VGaWx0ZXJGYWN0b3J5IHt9XG4gICAgICBlLk5vZGVGaWx0ZXJGYWN0b3J5ID0gTm9kZUZpbHRlckZhY3Rvcnk7XG4gICAgICBjbGFzcyBOb2RlQ2FudmFzRmFjdG9yeSBleHRlbmRzIGkuQmFzZUNhbnZhc0ZhY3Rvcnkge1xuICAgICAgICBfY3JlYXRlQ2FudmFzKHQsIGUpIHtcbiAgICAgICAgICByZXR1cm4gT2JqZWN0KGZ1bmN0aW9uIHdlYnBhY2tNaXNzaW5nTW9kdWxlKCkgeyB2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnY2FudmFzJ1wiKTsgZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnOyB0aHJvdyBlOyB9KCkpKHQsIGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlLk5vZGVDYW52YXNGYWN0b3J5ID0gTm9kZUNhbnZhc0ZhY3Rvcnk7XG4gICAgICBjbGFzcyBOb2RlQ01hcFJlYWRlckZhY3RvcnkgZXh0ZW5kcyBpLkJhc2VDTWFwUmVhZGVyRmFjdG9yeSB7XG4gICAgICAgIF9mZXRjaERhdGEodCwgZSkge1xuICAgICAgICAgIHJldHVybiBmZXRjaERhdGEodCkudGhlbih0ID0+ICh7XG4gICAgICAgICAgICBjTWFwRGF0YTogdCxcbiAgICAgICAgICAgIGNvbXByZXNzaW9uVHlwZTogZVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZS5Ob2RlQ01hcFJlYWRlckZhY3RvcnkgPSBOb2RlQ01hcFJlYWRlckZhY3Rvcnk7XG4gICAgICBjbGFzcyBOb2RlU3RhbmRhcmRGb250RGF0YUZhY3RvcnkgZXh0ZW5kcyBpLkJhc2VTdGFuZGFyZEZvbnREYXRhRmFjdG9yeSB7XG4gICAgICAgIF9mZXRjaERhdGEodCkge1xuICAgICAgICAgIHJldHVybiBmZXRjaERhdGEodCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGUuTm9kZVN0YW5kYXJkRm9udERhdGFGYWN0b3J5ID0gTm9kZVN0YW5kYXJkRm9udERhdGFGYWN0b3J5O1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgIHZhbHVlOiAhMFxuICAgICAgfSk7XG4gICAgICBlLkNhbnZhc0dyYXBoaWNzID0gdm9pZCAwO1xuICAgICAgbigyKTtcbiAgICAgIG4oOTMpO1xuICAgICAgbigxMDEpO1xuICAgICAgbigxMDIpO1xuICAgICAgbigxMDUpO1xuICAgICAgbigxMDcpO1xuICAgICAgbigxMDkpO1xuICAgICAgbigxMTMpO1xuICAgICAgbigxMTYpO1xuICAgICAgbigxMjMpO1xuICAgICAgbig4OSk7XG4gICAgICB2YXIgaSA9IG4oMSksXG4gICAgICAgIHIgPSBuKDE2NyksXG4gICAgICAgIHMgPSBuKDE3MyksXG4gICAgICAgIGEgPSBuKDE3NCk7XG4gICAgICBjb25zdCBvID0gNDA5NixcbiAgICAgICAgbCA9IDE2O1xuICAgICAgY2xhc3MgQ2FjaGVkQ2FudmFzZXMge1xuICAgICAgICBjb25zdHJ1Y3Rvcih0KSB7XG4gICAgICAgICAgdGhpcy5jYW52YXNGYWN0b3J5ID0gdDtcbiAgICAgICAgICB0aGlzLmNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBnZXRDYW52YXModCwgZSwgbikge1xuICAgICAgICAgIGxldCBpO1xuICAgICAgICAgIGlmICh2b2lkIDAgIT09IHRoaXMuY2FjaGVbdF0pIHtcbiAgICAgICAgICAgIGkgPSB0aGlzLmNhY2hlW3RdO1xuICAgICAgICAgICAgdGhpcy5jYW52YXNGYWN0b3J5LnJlc2V0KGksIGUsIG4pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpID0gdGhpcy5jYW52YXNGYWN0b3J5LmNyZWF0ZShlLCBuKTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVbdF0gPSBpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgfVxuICAgICAgICBkZWxldGUodCkge1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLmNhY2hlW3RdO1xuICAgICAgICB9XG4gICAgICAgIGNsZWFyKCkge1xuICAgICAgICAgIGZvciAoY29uc3QgdCBpbiB0aGlzLmNhY2hlKSB7XG4gICAgICAgICAgICBjb25zdCBlID0gdGhpcy5jYWNoZVt0XTtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzRmFjdG9yeS5kZXN0cm95KGUpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuY2FjaGVbdF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBkcmF3SW1hZ2VBdEludGVnZXJDb29yZHModCwgZSwgbiwgaSwgcywgYSwgbywgbCwgYywgaCkge1xuICAgICAgICBjb25zdCBbZCwgdSwgcCwgZiwgZywgbV0gPSAoMCwgci5nZXRDdXJyZW50VHJhbnNmb3JtKSh0KTtcbiAgICAgICAgaWYgKDAgPT09IHUgJiYgMCA9PT0gcCkge1xuICAgICAgICAgIGNvbnN0IHIgPSBvICogZCArIGcsXG4gICAgICAgICAgICBiID0gTWF0aC5yb3VuZChyKSxcbiAgICAgICAgICAgIHYgPSBsICogZiArIG0sXG4gICAgICAgICAgICB5ID0gTWF0aC5yb3VuZCh2KSxcbiAgICAgICAgICAgIEEgPSAobyArIGMpICogZCArIGcsXG4gICAgICAgICAgICBfID0gTWF0aC5hYnMoTWF0aC5yb3VuZChBKSAtIGIpIHx8IDEsXG4gICAgICAgICAgICBTID0gKGwgKyBoKSAqIGYgKyBtLFxuICAgICAgICAgICAgRSA9IE1hdGguYWJzKE1hdGgucm91bmQoUykgLSB5KSB8fCAxO1xuICAgICAgICAgIHQuc2V0VHJhbnNmb3JtKE1hdGguc2lnbihkKSwgMCwgMCwgTWF0aC5zaWduKGYpLCBiLCB5KTtcbiAgICAgICAgICB0LmRyYXdJbWFnZShlLCBuLCBpLCBzLCBhLCAwLCAwLCBfLCBFKTtcbiAgICAgICAgICB0LnNldFRyYW5zZm9ybShkLCB1LCBwLCBmLCBnLCBtKTtcbiAgICAgICAgICByZXR1cm4gW18sIEVdO1xuICAgICAgICB9XG4gICAgICAgIGlmICgwID09PSBkICYmIDAgPT09IGYpIHtcbiAgICAgICAgICBjb25zdCByID0gbCAqIHAgKyBnLFxuICAgICAgICAgICAgYiA9IE1hdGgucm91bmQociksXG4gICAgICAgICAgICB2ID0gbyAqIHUgKyBtLFxuICAgICAgICAgICAgeSA9IE1hdGgucm91bmQodiksXG4gICAgICAgICAgICBBID0gKGwgKyBoKSAqIHAgKyBnLFxuICAgICAgICAgICAgXyA9IE1hdGguYWJzKE1hdGgucm91bmQoQSkgLSBiKSB8fCAxLFxuICAgICAgICAgICAgUyA9IChvICsgYykgKiB1ICsgbSxcbiAgICAgICAgICAgIEUgPSBNYXRoLmFicyhNYXRoLnJvdW5kKFMpIC0geSkgfHwgMTtcbiAgICAgICAgICB0LnNldFRyYW5zZm9ybSgwLCBNYXRoLnNpZ24odSksIE1hdGguc2lnbihwKSwgMCwgYiwgeSk7XG4gICAgICAgICAgdC5kcmF3SW1hZ2UoZSwgbiwgaSwgcywgYSwgMCwgMCwgRSwgXyk7XG4gICAgICAgICAgdC5zZXRUcmFuc2Zvcm0oZCwgdSwgcCwgZiwgZywgbSk7XG4gICAgICAgICAgcmV0dXJuIFtFLCBfXTtcbiAgICAgICAgfVxuICAgICAgICB0LmRyYXdJbWFnZShlLCBuLCBpLCBzLCBhLCBvLCBsLCBjLCBoKTtcbiAgICAgICAgcmV0dXJuIFtNYXRoLmh5cG90KGQsIHUpICogYywgTWF0aC5oeXBvdChwLCBmKSAqIGhdO1xuICAgICAgfVxuICAgICAgY2xhc3MgQ2FudmFzRXh0cmFTdGF0ZSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHQsIGUpIHtcbiAgICAgICAgICB0aGlzLmFscGhhSXNTaGFwZSA9ICExO1xuICAgICAgICAgIHRoaXMuZm9udFNpemUgPSAwO1xuICAgICAgICAgIHRoaXMuZm9udFNpemVTY2FsZSA9IDE7XG4gICAgICAgICAgdGhpcy50ZXh0TWF0cml4ID0gaS5JREVOVElUWV9NQVRSSVg7XG4gICAgICAgICAgdGhpcy50ZXh0TWF0cml4U2NhbGUgPSAxO1xuICAgICAgICAgIHRoaXMuZm9udE1hdHJpeCA9IGkuRk9OVF9JREVOVElUWV9NQVRSSVg7XG4gICAgICAgICAgdGhpcy5sZWFkaW5nID0gMDtcbiAgICAgICAgICB0aGlzLnggPSAwO1xuICAgICAgICAgIHRoaXMueSA9IDA7XG4gICAgICAgICAgdGhpcy5saW5lWCA9IDA7XG4gICAgICAgICAgdGhpcy5saW5lWSA9IDA7XG4gICAgICAgICAgdGhpcy5jaGFyU3BhY2luZyA9IDA7XG4gICAgICAgICAgdGhpcy53b3JkU3BhY2luZyA9IDA7XG4gICAgICAgICAgdGhpcy50ZXh0SFNjYWxlID0gMTtcbiAgICAgICAgICB0aGlzLnRleHRSZW5kZXJpbmdNb2RlID0gaS5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMO1xuICAgICAgICAgIHRoaXMudGV4dFJpc2UgPSAwO1xuICAgICAgICAgIHRoaXMuZmlsbENvbG9yID0gXCIjMDAwMDAwXCI7XG4gICAgICAgICAgdGhpcy5zdHJva2VDb2xvciA9IFwiIzAwMDAwMFwiO1xuICAgICAgICAgIHRoaXMucGF0dGVybkZpbGwgPSAhMTtcbiAgICAgICAgICB0aGlzLmZpbGxBbHBoYSA9IDE7XG4gICAgICAgICAgdGhpcy5zdHJva2VBbHBoYSA9IDE7XG4gICAgICAgICAgdGhpcy5saW5lV2lkdGggPSAxO1xuICAgICAgICAgIHRoaXMuYWN0aXZlU01hc2sgPSBudWxsO1xuICAgICAgICAgIHRoaXMudHJhbnNmZXJNYXBzID0gXCJub25lXCI7XG4gICAgICAgICAgdGhpcy5zdGFydE5ld1BhdGhBbmRDbGlwQm94KFswLCAwLCB0LCBlXSk7XG4gICAgICAgIH1cbiAgICAgICAgY2xvbmUoKSB7XG4gICAgICAgICAgY29uc3QgdCA9IE9iamVjdC5jcmVhdGUodGhpcyk7XG4gICAgICAgICAgdC5jbGlwQm94ID0gdGhpcy5jbGlwQm94LnNsaWNlKCk7XG4gICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgIH1cbiAgICAgICAgc2V0Q3VycmVudFBvaW50KHQsIGUpIHtcbiAgICAgICAgICB0aGlzLnggPSB0O1xuICAgICAgICAgIHRoaXMueSA9IGU7XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlUGF0aE1pbk1heCh0LCBlLCBuKSB7XG4gICAgICAgICAgW2UsIG5dID0gaS5VdGlsLmFwcGx5VHJhbnNmb3JtKFtlLCBuXSwgdCk7XG4gICAgICAgICAgdGhpcy5taW5YID0gTWF0aC5taW4odGhpcy5taW5YLCBlKTtcbiAgICAgICAgICB0aGlzLm1pblkgPSBNYXRoLm1pbih0aGlzLm1pblksIG4pO1xuICAgICAgICAgIHRoaXMubWF4WCA9IE1hdGgubWF4KHRoaXMubWF4WCwgZSk7XG4gICAgICAgICAgdGhpcy5tYXhZID0gTWF0aC5tYXgodGhpcy5tYXhZLCBuKTtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVSZWN0TWluTWF4KHQsIGUpIHtcbiAgICAgICAgICBjb25zdCBuID0gaS5VdGlsLmFwcGx5VHJhbnNmb3JtKGUsIHQpLFxuICAgICAgICAgICAgciA9IGkuVXRpbC5hcHBseVRyYW5zZm9ybShlLnNsaWNlKDIpLCB0KTtcbiAgICAgICAgICB0aGlzLm1pblggPSBNYXRoLm1pbih0aGlzLm1pblgsIG5bMF0sIHJbMF0pO1xuICAgICAgICAgIHRoaXMubWluWSA9IE1hdGgubWluKHRoaXMubWluWSwgblsxXSwgclsxXSk7XG4gICAgICAgICAgdGhpcy5tYXhYID0gTWF0aC5tYXgodGhpcy5tYXhYLCBuWzBdLCByWzBdKTtcbiAgICAgICAgICB0aGlzLm1heFkgPSBNYXRoLm1heCh0aGlzLm1heFksIG5bMV0sIHJbMV0pO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZVNjYWxpbmdQYXRoTWluTWF4KHQsIGUpIHtcbiAgICAgICAgICBpLlV0aWwuc2NhbGVNaW5NYXgodCwgZSk7XG4gICAgICAgICAgdGhpcy5taW5YID0gTWF0aC5taW4odGhpcy5taW5YLCBlWzBdKTtcbiAgICAgICAgICB0aGlzLm1heFggPSBNYXRoLm1heCh0aGlzLm1heFgsIGVbMV0pO1xuICAgICAgICAgIHRoaXMubWluWSA9IE1hdGgubWluKHRoaXMubWluWSwgZVsyXSk7XG4gICAgICAgICAgdGhpcy5tYXhZID0gTWF0aC5tYXgodGhpcy5tYXhZLCBlWzNdKTtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVDdXJ2ZVBhdGhNaW5NYXgodCwgZSwgbiwgciwgcywgYSwgbywgbCwgYywgaCkge1xuICAgICAgICAgIGNvbnN0IGQgPSBpLlV0aWwuYmV6aWVyQm91bmRpbmdCb3goZSwgbiwgciwgcywgYSwgbywgbCwgYyk7XG4gICAgICAgICAgaWYgKGgpIHtcbiAgICAgICAgICAgIGhbMF0gPSBNYXRoLm1pbihoWzBdLCBkWzBdLCBkWzJdKTtcbiAgICAgICAgICAgIGhbMV0gPSBNYXRoLm1heChoWzFdLCBkWzBdLCBkWzJdKTtcbiAgICAgICAgICAgIGhbMl0gPSBNYXRoLm1pbihoWzJdLCBkWzFdLCBkWzNdKTtcbiAgICAgICAgICAgIGhbM10gPSBNYXRoLm1heChoWzNdLCBkWzFdLCBkWzNdKTtcbiAgICAgICAgICB9IGVsc2UgdGhpcy51cGRhdGVSZWN0TWluTWF4KHQsIGQpO1xuICAgICAgICB9XG4gICAgICAgIGdldFBhdGhCb3VuZGluZ0JveCgpIHtcbiAgICAgICAgICBsZXQgdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzBdID8gYXJndW1lbnRzWzBdIDogcy5QYXRoVHlwZS5GSUxMLFxuICAgICAgICAgICAgZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzFdID8gYXJndW1lbnRzWzFdIDogbnVsbDtcbiAgICAgICAgICBjb25zdCBuID0gW3RoaXMubWluWCwgdGhpcy5taW5ZLCB0aGlzLm1heFgsIHRoaXMubWF4WV07XG4gICAgICAgICAgaWYgKHQgPT09IHMuUGF0aFR5cGUuU1RST0tFKSB7XG4gICAgICAgICAgICBlIHx8ICgwLCBpLnVucmVhY2hhYmxlKShcIlN0cm9rZSBib3VuZGluZyBib3ggbXVzdCBpbmNsdWRlIHRyYW5zZm9ybS5cIik7XG4gICAgICAgICAgICBjb25zdCB0ID0gaS5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKGUpLFxuICAgICAgICAgICAgICByID0gdFswXSAqIHRoaXMubGluZVdpZHRoIC8gMixcbiAgICAgICAgICAgICAgcyA9IHRbMV0gKiB0aGlzLmxpbmVXaWR0aCAvIDI7XG4gICAgICAgICAgICBuWzBdIC09IHI7XG4gICAgICAgICAgICBuWzFdIC09IHM7XG4gICAgICAgICAgICBuWzJdICs9IHI7XG4gICAgICAgICAgICBuWzNdICs9IHM7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZUNsaXBGcm9tUGF0aCgpIHtcbiAgICAgICAgICBjb25zdCB0ID0gaS5VdGlsLmludGVyc2VjdCh0aGlzLmNsaXBCb3gsIHRoaXMuZ2V0UGF0aEJvdW5kaW5nQm94KCkpO1xuICAgICAgICAgIHRoaXMuc3RhcnROZXdQYXRoQW5kQ2xpcEJveCh0IHx8IFswLCAwLCAwLCAwXSk7XG4gICAgICAgIH1cbiAgICAgICAgaXNFbXB0eUNsaXAoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubWluWCA9PT0gMSAvIDA7XG4gICAgICAgIH1cbiAgICAgICAgc3RhcnROZXdQYXRoQW5kQ2xpcEJveCh0KSB7XG4gICAgICAgICAgdGhpcy5jbGlwQm94ID0gdDtcbiAgICAgICAgICB0aGlzLm1pblggPSAxIC8gMDtcbiAgICAgICAgICB0aGlzLm1pblkgPSAxIC8gMDtcbiAgICAgICAgICB0aGlzLm1heFggPSAwO1xuICAgICAgICAgIHRoaXMubWF4WSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0Q2xpcHBlZFBhdGhCb3VuZGluZ0JveCgpIHtcbiAgICAgICAgICBsZXQgdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzBdID8gYXJndW1lbnRzWzBdIDogcy5QYXRoVHlwZS5GSUxMLFxuICAgICAgICAgICAgZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzFdID8gYXJndW1lbnRzWzFdIDogbnVsbDtcbiAgICAgICAgICByZXR1cm4gaS5VdGlsLmludGVyc2VjdCh0aGlzLmNsaXBCb3gsIHRoaXMuZ2V0UGF0aEJvdW5kaW5nQm94KHQsIGUpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gcHV0QmluYXJ5SW1hZ2VEYXRhKHQsIGUpIHtcbiAgICAgICAgaWYgKFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIEltYWdlRGF0YSAmJiBlIGluc3RhbmNlb2YgSW1hZ2VEYXRhKSB7XG4gICAgICAgICAgdC5wdXRJbWFnZURhdGEoZSwgMCwgMCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG4gPSBlLmhlaWdodCxcbiAgICAgICAgICByID0gZS53aWR0aCxcbiAgICAgICAgICBzID0gbiAlIGwsXG4gICAgICAgICAgYSA9IChuIC0gcykgLyBsLFxuICAgICAgICAgIG8gPSAwID09PSBzID8gYSA6IGEgKyAxLFxuICAgICAgICAgIGMgPSB0LmNyZWF0ZUltYWdlRGF0YShyLCBsKTtcbiAgICAgICAgbGV0IGgsXG4gICAgICAgICAgZCA9IDA7XG4gICAgICAgIGNvbnN0IHUgPSBlLmRhdGEsXG4gICAgICAgICAgcCA9IGMuZGF0YTtcbiAgICAgICAgbGV0IGYsIGcsIG0sIGI7XG4gICAgICAgIGlmIChlLmtpbmQgPT09IGkuSW1hZ2VLaW5kLkdSQVlTQ0FMRV8xQlBQKSB7XG4gICAgICAgICAgY29uc3QgZSA9IHUuYnl0ZUxlbmd0aCxcbiAgICAgICAgICAgIG4gPSBuZXcgVWludDMyQXJyYXkocC5idWZmZXIsIDAsIHAuYnl0ZUxlbmd0aCA+PiAyKSxcbiAgICAgICAgICAgIGIgPSBuLmxlbmd0aCxcbiAgICAgICAgICAgIHYgPSByICsgNyA+PiAzLFxuICAgICAgICAgICAgeSA9IDQyOTQ5NjcyOTUsXG4gICAgICAgICAgICBBID0gaS5GZWF0dXJlVGVzdC5pc0xpdHRsZUVuZGlhbiA/IDQyNzgxOTAwODAgOiAyNTU7XG4gICAgICAgICAgZm9yIChmID0gMDsgZiA8IG87IGYrKykge1xuICAgICAgICAgICAgbSA9IGYgPCBhID8gbCA6IHM7XG4gICAgICAgICAgICBoID0gMDtcbiAgICAgICAgICAgIGZvciAoZyA9IDA7IGcgPCBtOyBnKyspIHtcbiAgICAgICAgICAgICAgY29uc3QgdCA9IGUgLSBkO1xuICAgICAgICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgICAgICAgIGNvbnN0IHMgPSB0ID4gdiA/IHIgOiA4ICogdCAtIDcsXG4gICAgICAgICAgICAgICAgYSA9IC04ICYgcztcbiAgICAgICAgICAgICAgbGV0IG8gPSAwLFxuICAgICAgICAgICAgICAgIGwgPSAwO1xuICAgICAgICAgICAgICBmb3IgKDsgaSA8IGE7IGkgKz0gOCkge1xuICAgICAgICAgICAgICAgIGwgPSB1W2QrK107XG4gICAgICAgICAgICAgICAgbltoKytdID0gMTI4ICYgbCA/IHkgOiBBO1xuICAgICAgICAgICAgICAgIG5baCsrXSA9IDY0ICYgbCA/IHkgOiBBO1xuICAgICAgICAgICAgICAgIG5baCsrXSA9IDMyICYgbCA/IHkgOiBBO1xuICAgICAgICAgICAgICAgIG5baCsrXSA9IDE2ICYgbCA/IHkgOiBBO1xuICAgICAgICAgICAgICAgIG5baCsrXSA9IDggJiBsID8geSA6IEE7XG4gICAgICAgICAgICAgICAgbltoKytdID0gNCAmIGwgPyB5IDogQTtcbiAgICAgICAgICAgICAgICBuW2grK10gPSAyICYgbCA/IHkgOiBBO1xuICAgICAgICAgICAgICAgIG5baCsrXSA9IDEgJiBsID8geSA6IEE7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZm9yICg7IGkgPCBzOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoMCA9PT0gbykge1xuICAgICAgICAgICAgICAgICAgbCA9IHVbZCsrXTtcbiAgICAgICAgICAgICAgICAgIG8gPSAxMjg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5baCsrXSA9IGwgJiBvID8geSA6IEE7XG4gICAgICAgICAgICAgICAgbyA+Pj0gMTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yICg7IGggPCBiOykgbltoKytdID0gMDtcbiAgICAgICAgICAgIHQucHV0SW1hZ2VEYXRhKGMsIDAsIGYgKiBsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZS5raW5kID09PSBpLkltYWdlS2luZC5SR0JBXzMyQlBQKSB7XG4gICAgICAgICAgZyA9IDA7XG4gICAgICAgICAgYiA9IHIgKiBsICogNDtcbiAgICAgICAgICBmb3IgKGYgPSAwOyBmIDwgYTsgZisrKSB7XG4gICAgICAgICAgICBwLnNldCh1LnN1YmFycmF5KGQsIGQgKyBiKSk7XG4gICAgICAgICAgICBkICs9IGI7XG4gICAgICAgICAgICB0LnB1dEltYWdlRGF0YShjLCAwLCBnKTtcbiAgICAgICAgICAgIGcgKz0gbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGYgPCBvKSB7XG4gICAgICAgICAgICBiID0gciAqIHMgKiA0O1xuICAgICAgICAgICAgcC5zZXQodS5zdWJhcnJheShkLCBkICsgYikpO1xuICAgICAgICAgICAgdC5wdXRJbWFnZURhdGEoYywgMCwgZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChlLmtpbmQgIT09IGkuSW1hZ2VLaW5kLlJHQl8yNEJQUCkgdGhyb3cgbmV3IEVycm9yKFwiYmFkIGltYWdlIGtpbmQ6IFwiLmNvbmNhdChlLmtpbmQpKTtcbiAgICAgICAgICBtID0gbDtcbiAgICAgICAgICBiID0gciAqIG07XG4gICAgICAgICAgZm9yIChmID0gMDsgZiA8IG87IGYrKykge1xuICAgICAgICAgICAgaWYgKGYgPj0gYSkge1xuICAgICAgICAgICAgICBtID0gcztcbiAgICAgICAgICAgICAgYiA9IHIgKiBtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaCA9IDA7XG4gICAgICAgICAgICBmb3IgKGcgPSBiOyBnLS07KSB7XG4gICAgICAgICAgICAgIHBbaCsrXSA9IHVbZCsrXTtcbiAgICAgICAgICAgICAgcFtoKytdID0gdVtkKytdO1xuICAgICAgICAgICAgICBwW2grK10gPSB1W2QrK107XG4gICAgICAgICAgICAgIHBbaCsrXSA9IDI1NTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHQucHV0SW1hZ2VEYXRhKGMsIDAsIGYgKiBsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHB1dEJpbmFyeUltYWdlTWFzayh0LCBlKSB7XG4gICAgICAgIGlmIChlLmJpdG1hcCkge1xuICAgICAgICAgIHQuZHJhd0ltYWdlKGUuYml0bWFwLCAwLCAwKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbiA9IGUuaGVpZ2h0LFxuICAgICAgICAgIGkgPSBlLndpZHRoLFxuICAgICAgICAgIHIgPSBuICUgbCxcbiAgICAgICAgICBzID0gKG4gLSByKSAvIGwsXG4gICAgICAgICAgbyA9IDAgPT09IHIgPyBzIDogcyArIDEsXG4gICAgICAgICAgYyA9IHQuY3JlYXRlSW1hZ2VEYXRhKGksIGwpO1xuICAgICAgICBsZXQgaCA9IDA7XG4gICAgICAgIGNvbnN0IGQgPSBlLmRhdGEsXG4gICAgICAgICAgdSA9IGMuZGF0YTtcbiAgICAgICAgZm9yIChsZXQgZSA9IDA7IGUgPCBvOyBlKyspIHtcbiAgICAgICAgICBjb25zdCBuID0gZSA8IHMgPyBsIDogcjtcbiAgICAgICAgICAoe1xuICAgICAgICAgICAgc3JjUG9zOiBoXG4gICAgICAgICAgfSA9ICgwLCBhLmNvbnZlcnRCbGFja0FuZFdoaXRlVG9SR0JBKSh7XG4gICAgICAgICAgICBzcmM6IGQsXG4gICAgICAgICAgICBzcmNQb3M6IGgsXG4gICAgICAgICAgICBkZXN0OiB1LFxuICAgICAgICAgICAgd2lkdGg6IGksXG4gICAgICAgICAgICBoZWlnaHQ6IG4sXG4gICAgICAgICAgICBub25CbGFja0NvbG9yOiAwXG4gICAgICAgICAgfSkpO1xuICAgICAgICAgIHQucHV0SW1hZ2VEYXRhKGMsIDAsIGUgKiBsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gY29weUN0eFN0YXRlKHQsIGUpIHtcbiAgICAgICAgY29uc3QgbiA9IFtcInN0cm9rZVN0eWxlXCIsIFwiZmlsbFN0eWxlXCIsIFwiZmlsbFJ1bGVcIiwgXCJnbG9iYWxBbHBoYVwiLCBcImxpbmVXaWR0aFwiLCBcImxpbmVDYXBcIiwgXCJsaW5lSm9pblwiLCBcIm1pdGVyTGltaXRcIiwgXCJnbG9iYWxDb21wb3NpdGVPcGVyYXRpb25cIiwgXCJmb250XCIsIFwiZmlsdGVyXCJdO1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2Ygbikgdm9pZCAwICE9PSB0W2ldICYmIChlW2ldID0gdFtpXSk7XG4gICAgICAgIGlmICh2b2lkIDAgIT09IHQuc2V0TGluZURhc2gpIHtcbiAgICAgICAgICBlLnNldExpbmVEYXNoKHQuZ2V0TGluZURhc2goKSk7XG4gICAgICAgICAgZS5saW5lRGFzaE9mZnNldCA9IHQubGluZURhc2hPZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHJlc2V0Q3R4VG9EZWZhdWx0KHQpIHtcbiAgICAgICAgdC5zdHJva2VTdHlsZSA9IHQuZmlsbFN0eWxlID0gXCIjMDAwMDAwXCI7XG4gICAgICAgIHQuZmlsbFJ1bGUgPSBcIm5vbnplcm9cIjtcbiAgICAgICAgdC5nbG9iYWxBbHBoYSA9IDE7XG4gICAgICAgIHQubGluZVdpZHRoID0gMTtcbiAgICAgICAgdC5saW5lQ2FwID0gXCJidXR0XCI7XG4gICAgICAgIHQubGluZUpvaW4gPSBcIm1pdGVyXCI7XG4gICAgICAgIHQubWl0ZXJMaW1pdCA9IDEwO1xuICAgICAgICB0Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9IFwic291cmNlLW92ZXJcIjtcbiAgICAgICAgdC5mb250ID0gXCIxMHB4IHNhbnMtc2VyaWZcIjtcbiAgICAgICAgaWYgKHZvaWQgMCAhPT0gdC5zZXRMaW5lRGFzaCkge1xuICAgICAgICAgIHQuc2V0TGluZURhc2goW10pO1xuICAgICAgICAgIHQubGluZURhc2hPZmZzZXQgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaS5pc05vZGVKUykge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGZpbHRlcjogZVxuICAgICAgICAgIH0gPSB0O1xuICAgICAgICAgIFwibm9uZVwiICE9PSBlICYmIFwiXCIgIT09IGUgJiYgKHQuZmlsdGVyID0gXCJub25lXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBjb21wb3NlU01hc2tCYWNrZHJvcCh0LCBlLCBuLCBpKSB7XG4gICAgICAgIGNvbnN0IHIgPSB0Lmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgcyA9IDM7IHMgPCByOyBzICs9IDQpIHtcbiAgICAgICAgICBjb25zdCByID0gdFtzXTtcbiAgICAgICAgICBpZiAoMCA9PT0gcikge1xuICAgICAgICAgICAgdFtzIC0gM10gPSBlO1xuICAgICAgICAgICAgdFtzIC0gMl0gPSBuO1xuICAgICAgICAgICAgdFtzIC0gMV0gPSBpO1xuICAgICAgICAgIH0gZWxzZSBpZiAociA8IDI1NSkge1xuICAgICAgICAgICAgY29uc3QgYSA9IDI1NSAtIHI7XG4gICAgICAgICAgICB0W3MgLSAzXSA9IHRbcyAtIDNdICogciArIGUgKiBhID4+IDg7XG4gICAgICAgICAgICB0W3MgLSAyXSA9IHRbcyAtIDJdICogciArIG4gKiBhID4+IDg7XG4gICAgICAgICAgICB0W3MgLSAxXSA9IHRbcyAtIDFdICogciArIGkgKiBhID4+IDg7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBjb21wb3NlU01hc2tBbHBoYSh0LCBlLCBuKSB7XG4gICAgICAgIGNvbnN0IGkgPSB0Lmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgciA9IDM7IHIgPCBpOyByICs9IDQpIHtcbiAgICAgICAgICBjb25zdCBpID0gbiA/IG5bdFtyXV0gOiB0W3JdO1xuICAgICAgICAgIGVbcl0gPSBlW3JdICogaSAqIC4wMDM5MjE1Njg2Mjc0NTA5OCB8IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGNvbXBvc2VTTWFza0x1bWlub3NpdHkodCwgZSwgbikge1xuICAgICAgICBjb25zdCBpID0gdC5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IHIgPSAzOyByIDwgaTsgciArPSA0KSB7XG4gICAgICAgICAgY29uc3QgaSA9IDc3ICogdFtyIC0gM10gKyAxNTIgKiB0W3IgLSAyXSArIDI4ICogdFtyIC0gMV07XG4gICAgICAgICAgZVtyXSA9IG4gPyBlW3JdICogbltpID4+IDhdID4+IDggOiBlW3JdICogaSA+PiAxNjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gY29tcG9zZVNNYXNrKHQsIGUsIG4sIGkpIHtcbiAgICAgICAgY29uc3QgciA9IGlbMF0sXG4gICAgICAgICAgcyA9IGlbMV0sXG4gICAgICAgICAgYSA9IGlbMl0gLSByLFxuICAgICAgICAgIG8gPSBpWzNdIC0gcztcbiAgICAgICAgaWYgKDAgIT09IGEgJiYgMCAhPT0gbykge1xuICAgICAgICAgICFmdW5jdGlvbiBnZW5lcmljQ29tcG9zZVNNYXNrKHQsIGUsIG4sIGksIHIsIHMsIGEsIG8sIGwsIGMsIGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGQgPSAhIXMsXG4gICAgICAgICAgICAgIHUgPSBkID8gc1swXSA6IDAsXG4gICAgICAgICAgICAgIHAgPSBkID8gc1sxXSA6IDAsXG4gICAgICAgICAgICAgIGYgPSBkID8gc1syXSA6IDAsXG4gICAgICAgICAgICAgIGcgPSBcIkx1bWlub3NpdHlcIiA9PT0gciA/IGNvbXBvc2VTTWFza0x1bWlub3NpdHkgOiBjb21wb3NlU01hc2tBbHBoYSxcbiAgICAgICAgICAgICAgbSA9IE1hdGgubWluKGksIE1hdGguY2VpbCgxMDQ4NTc2IC8gbikpO1xuICAgICAgICAgICAgZm9yIChsZXQgciA9IDA7IHIgPCBpOyByICs9IG0pIHtcbiAgICAgICAgICAgICAgY29uc3QgcyA9IE1hdGgubWluKG0sIGkgLSByKSxcbiAgICAgICAgICAgICAgICBiID0gdC5nZXRJbWFnZURhdGEobyAtIGMsIHIgKyAobCAtIGgpLCBuLCBzKSxcbiAgICAgICAgICAgICAgICB2ID0gZS5nZXRJbWFnZURhdGEobywgciArIGwsIG4sIHMpO1xuICAgICAgICAgICAgICBkICYmIGNvbXBvc2VTTWFza0JhY2tkcm9wKGIuZGF0YSwgdSwgcCwgZik7XG4gICAgICAgICAgICAgIGcoYi5kYXRhLCB2LmRhdGEsIGEpO1xuICAgICAgICAgICAgICBlLnB1dEltYWdlRGF0YSh2LCBvLCByICsgbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfShlLmNvbnRleHQsIG4sIGEsIG8sIGUuc3VidHlwZSwgZS5iYWNrZHJvcCwgZS50cmFuc2Zlck1hcCwgciwgcywgZS5vZmZzZXRYLCBlLm9mZnNldFkpO1xuICAgICAgICAgIHQuc2F2ZSgpO1xuICAgICAgICAgIHQuZ2xvYmFsQWxwaGEgPSAxO1xuICAgICAgICAgIHQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gXCJzb3VyY2Utb3ZlclwiO1xuICAgICAgICAgIHQuc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgICAgICAgIHQuZHJhd0ltYWdlKG4uY2FudmFzLCAwLCAwKTtcbiAgICAgICAgICB0LnJlc3RvcmUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gZ2V0SW1hZ2VTbW9vdGhpbmdFbmFibGVkKHQsIGUpIHtcbiAgICAgICAgY29uc3QgbiA9IGkuVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZSh0KTtcbiAgICAgICAgblswXSA9IE1hdGguZnJvdW5kKG5bMF0pO1xuICAgICAgICBuWzFdID0gTWF0aC5mcm91bmQoblsxXSk7XG4gICAgICAgIGNvbnN0IHMgPSBNYXRoLmZyb3VuZCgoZ2xvYmFsVGhpcy5kZXZpY2VQaXhlbFJhdGlvIHx8IDEpICogci5QaXhlbHNQZXJJbmNoLlBERl9UT19DU1NfVU5JVFMpO1xuICAgICAgICByZXR1cm4gdm9pZCAwICE9PSBlID8gZSA6IG5bMF0gPD0gcyB8fCBuWzFdIDw9IHM7XG4gICAgICB9XG4gICAgICBjb25zdCBjID0gW1wiYnV0dFwiLCBcInJvdW5kXCIsIFwic3F1YXJlXCJdLFxuICAgICAgICBoID0gW1wibWl0ZXJcIiwgXCJyb3VuZFwiLCBcImJldmVsXCJdLFxuICAgICAgICBkID0ge30sXG4gICAgICAgIHUgPSB7fTtcbiAgICAgIHZhciBfR3QgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbiAgICAgIHZhciBfVnQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbiAgICAgIGNsYXNzIENhbnZhc0dyYXBoaWNzIHtcbiAgICAgICAgY29uc3RydWN0b3IoX3QxMCwgX2U5LCBuLCBpLCByLCBzLCBhLCBvKSB7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9WdCk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9HdCk7XG4gICAgICAgICAgbGV0IHtcbiAgICAgICAgICAgIG9wdGlvbmFsQ29udGVudENvbmZpZzogbCxcbiAgICAgICAgICAgIG1hcmtlZENvbnRlbnRTdGFjazogYyA9IG51bGxcbiAgICAgICAgICB9ID0gcztcbiAgICAgICAgICB0aGlzLmN0eCA9IF90MTA7XG4gICAgICAgICAgdGhpcy5jdXJyZW50ID0gbmV3IENhbnZhc0V4dHJhU3RhdGUodGhpcy5jdHguY2FudmFzLndpZHRoLCB0aGlzLmN0eC5jYW52YXMuaGVpZ2h0KTtcbiAgICAgICAgICB0aGlzLnN0YXRlU3RhY2sgPSBbXTtcbiAgICAgICAgICB0aGlzLnBlbmRpbmdDbGlwID0gbnVsbDtcbiAgICAgICAgICB0aGlzLnBlbmRpbmdFT0ZpbGwgPSAhMTtcbiAgICAgICAgICB0aGlzLnJlcyA9IG51bGw7XG4gICAgICAgICAgdGhpcy54b2JqcyA9IG51bGw7XG4gICAgICAgICAgdGhpcy5jb21tb25PYmpzID0gX2U5O1xuICAgICAgICAgIHRoaXMub2JqcyA9IG47XG4gICAgICAgICAgdGhpcy5jYW52YXNGYWN0b3J5ID0gaTtcbiAgICAgICAgICB0aGlzLmZpbHRlckZhY3RvcnkgPSByO1xuICAgICAgICAgIHRoaXMuZ3JvdXBTdGFjayA9IFtdO1xuICAgICAgICAgIHRoaXMucHJvY2Vzc2luZ1R5cGUzID0gbnVsbDtcbiAgICAgICAgICB0aGlzLmJhc2VUcmFuc2Zvcm0gPSBudWxsO1xuICAgICAgICAgIHRoaXMuYmFzZVRyYW5zZm9ybVN0YWNrID0gW107XG4gICAgICAgICAgdGhpcy5ncm91cExldmVsID0gMDtcbiAgICAgICAgICB0aGlzLnNtYXNrU3RhY2sgPSBbXTtcbiAgICAgICAgICB0aGlzLnNtYXNrQ291bnRlciA9IDA7XG4gICAgICAgICAgdGhpcy50ZW1wU01hc2sgPSBudWxsO1xuICAgICAgICAgIHRoaXMuc3VzcGVuZGVkQ3R4ID0gbnVsbDtcbiAgICAgICAgICB0aGlzLmNvbnRlbnRWaXNpYmxlID0gITA7XG4gICAgICAgICAgdGhpcy5tYXJrZWRDb250ZW50U3RhY2sgPSBjIHx8IFtdO1xuICAgICAgICAgIHRoaXMub3B0aW9uYWxDb250ZW50Q29uZmlnID0gbDtcbiAgICAgICAgICB0aGlzLmNhY2hlZENhbnZhc2VzID0gbmV3IENhY2hlZENhbnZhc2VzKHRoaXMuY2FudmFzRmFjdG9yeSk7XG4gICAgICAgICAgdGhpcy5jYWNoZWRQYXR0ZXJucyA9IG5ldyBNYXAoKTtcbiAgICAgICAgICB0aGlzLmFubm90YXRpb25DYW52YXNNYXAgPSBhO1xuICAgICAgICAgIHRoaXMudmlld3BvcnRTY2FsZSA9IDE7XG4gICAgICAgICAgdGhpcy5vdXRwdXRTY2FsZVggPSAxO1xuICAgICAgICAgIHRoaXMub3V0cHV0U2NhbGVZID0gMTtcbiAgICAgICAgICB0aGlzLnBhZ2VDb2xvcnMgPSBvO1xuICAgICAgICAgIHRoaXMuX2NhY2hlZFNjYWxlRm9yU3Ryb2tpbmcgPSBbLTEsIDBdO1xuICAgICAgICAgIHRoaXMuX2NhY2hlZEdldFNpbmdsZVBpeGVsV2lkdGggPSBudWxsO1xuICAgICAgICAgIHRoaXMuX2NhY2hlZEJpdG1hcHNNYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0T2JqZWN0KHQpIHtcbiAgICAgICAgICBsZXQgZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzFdID8gYXJndW1lbnRzWzFdIDogbnVsbDtcbiAgICAgICAgICByZXR1cm4gXCJzdHJpbmdcIiA9PSB0eXBlb2YgdCA/IHQuc3RhcnRzV2l0aChcImdfXCIpID8gdGhpcy5jb21tb25PYmpzLmdldCh0KSA6IHRoaXMub2Jqcy5nZXQodCkgOiBlO1xuICAgICAgICB9XG4gICAgICAgIGJlZ2luRHJhd2luZyh0KSB7XG4gICAgICAgICAgbGV0IHtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogZSxcbiAgICAgICAgICAgIHZpZXdwb3J0OiBuLFxuICAgICAgICAgICAgdHJhbnNwYXJlbmN5OiBpID0gITEsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiBzID0gbnVsbFxuICAgICAgICAgIH0gPSB0O1xuICAgICAgICAgIGNvbnN0IGEgPSB0aGlzLmN0eC5jYW52YXMud2lkdGgsXG4gICAgICAgICAgICBvID0gdGhpcy5jdHguY2FudmFzLmhlaWdodCxcbiAgICAgICAgICAgIGwgPSB0aGlzLmN0eC5maWxsU3R5bGU7XG4gICAgICAgICAgdGhpcy5jdHguZmlsbFN0eWxlID0gcyB8fCBcIiNmZmZmZmZcIjtcbiAgICAgICAgICB0aGlzLmN0eC5maWxsUmVjdCgwLCAwLCBhLCBvKTtcbiAgICAgICAgICB0aGlzLmN0eC5maWxsU3R5bGUgPSBsO1xuICAgICAgICAgIGlmIChpKSB7XG4gICAgICAgICAgICBjb25zdCB0ID0gdGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoXCJ0cmFuc3BhcmVudFwiLCBhLCBvKTtcbiAgICAgICAgICAgIHRoaXMuY29tcG9zaXRlQ3R4ID0gdGhpcy5jdHg7XG4gICAgICAgICAgICB0aGlzLnRyYW5zcGFyZW50Q2FudmFzID0gdC5jYW52YXM7XG4gICAgICAgICAgICB0aGlzLmN0eCA9IHQuY29udGV4dDtcbiAgICAgICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICAgICAgICAgIHRoaXMuY3R4LnRyYW5zZm9ybSguLi4oMCwgci5nZXRDdXJyZW50VHJhbnNmb3JtKSh0aGlzLmNvbXBvc2l0ZUN0eCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmN0eC5zYXZlKCk7XG4gICAgICAgICAgcmVzZXRDdHhUb0RlZmF1bHQodGhpcy5jdHgpO1xuICAgICAgICAgIGlmIChlKSB7XG4gICAgICAgICAgICB0aGlzLmN0eC50cmFuc2Zvcm0oLi4uZSk7XG4gICAgICAgICAgICB0aGlzLm91dHB1dFNjYWxlWCA9IGVbMF07XG4gICAgICAgICAgICB0aGlzLm91dHB1dFNjYWxlWSA9IGVbMF07XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY3R4LnRyYW5zZm9ybSguLi5uLnRyYW5zZm9ybSk7XG4gICAgICAgICAgdGhpcy52aWV3cG9ydFNjYWxlID0gbi5zY2FsZTtcbiAgICAgICAgICB0aGlzLmJhc2VUcmFuc2Zvcm0gPSAoMCwgci5nZXRDdXJyZW50VHJhbnNmb3JtKSh0aGlzLmN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgZXhlY3V0ZU9wZXJhdG9yTGlzdCh0LCBlLCBuLCByKSB7XG4gICAgICAgICAgY29uc3QgcyA9IHQuYXJnc0FycmF5LFxuICAgICAgICAgICAgYSA9IHQuZm5BcnJheTtcbiAgICAgICAgICBsZXQgbyA9IGUgfHwgMDtcbiAgICAgICAgICBjb25zdCBsID0gcy5sZW5ndGg7XG4gICAgICAgICAgaWYgKGwgPT09IG8pIHJldHVybiBvO1xuICAgICAgICAgIGNvbnN0IGMgPSBsIC0gbyA+IDEwICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgbixcbiAgICAgICAgICAgIGggPSBjID8gRGF0ZS5ub3coKSArIDE1IDogMDtcbiAgICAgICAgICBsZXQgZCA9IDA7XG4gICAgICAgICAgY29uc3QgdSA9IHRoaXMuY29tbW9uT2JqcyxcbiAgICAgICAgICAgIHAgPSB0aGlzLm9ianM7XG4gICAgICAgICAgbGV0IGY7XG4gICAgICAgICAgZm9yICg7Oykge1xuICAgICAgICAgICAgaWYgKHZvaWQgMCAhPT0gciAmJiBvID09PSByLm5leHRCcmVha1BvaW50KSB7XG4gICAgICAgICAgICAgIHIuYnJlYWtJdChvLCBuKTtcbiAgICAgICAgICAgICAgcmV0dXJuIG87XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmID0gYVtvXTtcbiAgICAgICAgICAgIGlmIChmICE9PSBpLk9QUy5kZXBlbmRlbmN5KSB0aGlzW2ZdLmFwcGx5KHRoaXMsIHNbb10pO2Vsc2UgZm9yIChjb25zdCB0IG9mIHNbb10pIHtcbiAgICAgICAgICAgICAgY29uc3QgZSA9IHQuc3RhcnRzV2l0aChcImdfXCIpID8gdSA6IHA7XG4gICAgICAgICAgICAgIGlmICghZS5oYXModCkpIHtcbiAgICAgICAgICAgICAgICBlLmdldCh0LCBuKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbysrO1xuICAgICAgICAgICAgaWYgKG8gPT09IGwpIHJldHVybiBvO1xuICAgICAgICAgICAgaWYgKGMgJiYgKytkID4gMTApIHtcbiAgICAgICAgICAgICAgaWYgKERhdGUubm93KCkgPiBoKSB7XG4gICAgICAgICAgICAgICAgbigpO1xuICAgICAgICAgICAgICAgIHJldHVybiBvO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGQgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbmREcmF3aW5nKCkge1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX0d0LCBfR3QyKS5jYWxsKHRoaXMpO1xuICAgICAgICAgIHRoaXMuY2FjaGVkQ2FudmFzZXMuY2xlYXIoKTtcbiAgICAgICAgICB0aGlzLmNhY2hlZFBhdHRlcm5zLmNsZWFyKCk7XG4gICAgICAgICAgZm9yIChjb25zdCB0IG9mIHRoaXMuX2NhY2hlZEJpdG1hcHNNYXAudmFsdWVzKCkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiB0LnZhbHVlcygpKSBcInVuZGVmaW5lZFwiICE9IHR5cGVvZiBIVE1MQ2FudmFzRWxlbWVudCAmJiBlIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQgJiYgKGUud2lkdGggPSBlLmhlaWdodCA9IDApO1xuICAgICAgICAgICAgdC5jbGVhcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9jYWNoZWRCaXRtYXBzTWFwLmNsZWFyKCk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfVnQsIF9WdDIpLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgX3NjYWxlSW1hZ2UodCwgZSkge1xuICAgICAgICAgIGNvbnN0IG4gPSB0LndpZHRoLFxuICAgICAgICAgICAgaSA9IHQuaGVpZ2h0O1xuICAgICAgICAgIGxldCByLFxuICAgICAgICAgICAgcyxcbiAgICAgICAgICAgIGEgPSBNYXRoLm1heChNYXRoLmh5cG90KGVbMF0sIGVbMV0pLCAxKSxcbiAgICAgICAgICAgIG8gPSBNYXRoLm1heChNYXRoLmh5cG90KGVbMl0sIGVbM10pLCAxKSxcbiAgICAgICAgICAgIGwgPSBuLFxuICAgICAgICAgICAgYyA9IGksXG4gICAgICAgICAgICBoID0gXCJwcmVzY2FsZTFcIjtcbiAgICAgICAgICBmb3IgKDsgYSA+IDIgJiYgbCA+IDEgfHwgbyA+IDIgJiYgYyA+IDE7KSB7XG4gICAgICAgICAgICBsZXQgZSA9IGwsXG4gICAgICAgICAgICAgIG4gPSBjO1xuICAgICAgICAgICAgaWYgKGEgPiAyICYmIGwgPiAxKSB7XG4gICAgICAgICAgICAgIGUgPSBsID49IDE2Mzg0ID8gTWF0aC5mbG9vcihsIC8gMikgLSAxIHx8IDEgOiBNYXRoLmNlaWwobCAvIDIpO1xuICAgICAgICAgICAgICBhIC89IGwgLyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG8gPiAyICYmIGMgPiAxKSB7XG4gICAgICAgICAgICAgIG4gPSBjID49IDE2Mzg0ID8gTWF0aC5mbG9vcihjIC8gMikgLSAxIHx8IDEgOiBNYXRoLmNlaWwoYykgLyAyO1xuICAgICAgICAgICAgICBvIC89IGMgLyBuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgciA9IHRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKGgsIGUsIG4pO1xuICAgICAgICAgICAgcyA9IHIuY29udGV4dDtcbiAgICAgICAgICAgIHMuY2xlYXJSZWN0KDAsIDAsIGUsIG4pO1xuICAgICAgICAgICAgcy5kcmF3SW1hZ2UodCwgMCwgMCwgbCwgYywgMCwgMCwgZSwgbik7XG4gICAgICAgICAgICB0ID0gci5jYW52YXM7XG4gICAgICAgICAgICBsID0gZTtcbiAgICAgICAgICAgIGMgPSBuO1xuICAgICAgICAgICAgaCA9IFwicHJlc2NhbGUxXCIgPT09IGggPyBcInByZXNjYWxlMlwiIDogXCJwcmVzY2FsZTFcIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGltZzogdCxcbiAgICAgICAgICAgIHBhaW50V2lkdGg6IGwsXG4gICAgICAgICAgICBwYWludEhlaWdodDogY1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgX2NyZWF0ZU1hc2tDYW52YXModCkge1xuICAgICAgICAgIGNvbnN0IGUgPSB0aGlzLmN0eCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgd2lkdGg6IG4sXG4gICAgICAgICAgICAgIGhlaWdodDogYVxuICAgICAgICAgICAgfSA9IHQsXG4gICAgICAgICAgICBvID0gdGhpcy5jdXJyZW50LmZpbGxDb2xvcixcbiAgICAgICAgICAgIGwgPSB0aGlzLmN1cnJlbnQucGF0dGVybkZpbGwsXG4gICAgICAgICAgICBjID0gKDAsIHIuZ2V0Q3VycmVudFRyYW5zZm9ybSkoZSk7XG4gICAgICAgICAgbGV0IGgsIGQsIHUsIHA7XG4gICAgICAgICAgaWYgKCh0LmJpdG1hcCB8fCB0LmRhdGEpICYmIHQuY291bnQgPiAxKSB7XG4gICAgICAgICAgICBjb25zdCBlID0gdC5iaXRtYXAgfHwgdC5kYXRhLmJ1ZmZlcjtcbiAgICAgICAgICAgIGQgPSBKU09OLnN0cmluZ2lmeShsID8gYyA6IFtjLnNsaWNlKDAsIDQpLCBvXSk7XG4gICAgICAgICAgICBoID0gdGhpcy5fY2FjaGVkQml0bWFwc01hcC5nZXQoZSk7XG4gICAgICAgICAgICBpZiAoIWgpIHtcbiAgICAgICAgICAgICAgaCA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgICAgdGhpcy5fY2FjaGVkQml0bWFwc01hcC5zZXQoZSwgaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBuID0gaC5nZXQoZCk7XG4gICAgICAgICAgICBpZiAobiAmJiAhbCkge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGNhbnZhczogbixcbiAgICAgICAgICAgICAgICBvZmZzZXRYOiBNYXRoLnJvdW5kKE1hdGgubWluKGNbMF0sIGNbMl0pICsgY1s0XSksXG4gICAgICAgICAgICAgICAgb2Zmc2V0WTogTWF0aC5yb3VuZChNYXRoLm1pbihjWzFdLCBjWzNdKSArIGNbNV0pXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB1ID0gbjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCF1KSB7XG4gICAgICAgICAgICBwID0gdGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoXCJtYXNrQ2FudmFzXCIsIG4sIGEpO1xuICAgICAgICAgICAgcHV0QmluYXJ5SW1hZ2VNYXNrKHAuY29udGV4dCwgdCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCBmID0gaS5VdGlsLnRyYW5zZm9ybShjLCBbMSAvIG4sIDAsIDAsIC0xIC8gYSwgMCwgMF0pO1xuICAgICAgICAgIGYgPSBpLlV0aWwudHJhbnNmb3JtKGYsIFsxLCAwLCAwLCAxLCAwLCAtYV0pO1xuICAgICAgICAgIGNvbnN0IGcgPSBpLlV0aWwuYXBwbHlUcmFuc2Zvcm0oWzAsIDBdLCBmKSxcbiAgICAgICAgICAgIG0gPSBpLlV0aWwuYXBwbHlUcmFuc2Zvcm0oW24sIGFdLCBmKSxcbiAgICAgICAgICAgIGIgPSBpLlV0aWwubm9ybWFsaXplUmVjdChbZ1swXSwgZ1sxXSwgbVswXSwgbVsxXV0pLFxuICAgICAgICAgICAgdiA9IE1hdGgucm91bmQoYlsyXSAtIGJbMF0pIHx8IDEsXG4gICAgICAgICAgICB5ID0gTWF0aC5yb3VuZChiWzNdIC0gYlsxXSkgfHwgMSxcbiAgICAgICAgICAgIEEgPSB0aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcyhcImZpbGxDYW52YXNcIiwgdiwgeSksXG4gICAgICAgICAgICBfID0gQS5jb250ZXh0LFxuICAgICAgICAgICAgUyA9IE1hdGgubWluKGdbMF0sIG1bMF0pLFxuICAgICAgICAgICAgRSA9IE1hdGgubWluKGdbMV0sIG1bMV0pO1xuICAgICAgICAgIF8udHJhbnNsYXRlKC1TLCAtRSk7XG4gICAgICAgICAgXy50cmFuc2Zvcm0oLi4uZik7XG4gICAgICAgICAgaWYgKCF1KSB7XG4gICAgICAgICAgICB1ID0gdGhpcy5fc2NhbGVJbWFnZShwLmNhbnZhcywgKDAsIHIuZ2V0Q3VycmVudFRyYW5zZm9ybUludmVyc2UpKF8pKTtcbiAgICAgICAgICAgIHUgPSB1LmltZztcbiAgICAgICAgICAgIGggJiYgbCAmJiBoLnNldChkLCB1KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXy5pbWFnZVNtb290aGluZ0VuYWJsZWQgPSBnZXRJbWFnZVNtb290aGluZ0VuYWJsZWQoKDAsIHIuZ2V0Q3VycmVudFRyYW5zZm9ybSkoXyksIHQuaW50ZXJwb2xhdGUpO1xuICAgICAgICAgIGRyYXdJbWFnZUF0SW50ZWdlckNvb3JkcyhfLCB1LCAwLCAwLCB1LndpZHRoLCB1LmhlaWdodCwgMCwgMCwgbiwgYSk7XG4gICAgICAgICAgXy5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBcInNvdXJjZS1pblwiO1xuICAgICAgICAgIGNvbnN0IHggPSBpLlV0aWwudHJhbnNmb3JtKCgwLCByLmdldEN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlKShfKSwgWzEsIDAsIDAsIDEsIC1TLCAtRV0pO1xuICAgICAgICAgIF8uZmlsbFN0eWxlID0gbCA/IG8uZ2V0UGF0dGVybihlLCB0aGlzLCB4LCBzLlBhdGhUeXBlLkZJTEwpIDogbztcbiAgICAgICAgICBfLmZpbGxSZWN0KDAsIDAsIG4sIGEpO1xuICAgICAgICAgIGlmIChoICYmICFsKSB7XG4gICAgICAgICAgICB0aGlzLmNhY2hlZENhbnZhc2VzLmRlbGV0ZShcImZpbGxDYW52YXNcIik7XG4gICAgICAgICAgICBoLnNldChkLCBBLmNhbnZhcyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjYW52YXM6IEEuY2FudmFzLFxuICAgICAgICAgICAgb2Zmc2V0WDogTWF0aC5yb3VuZChTKSxcbiAgICAgICAgICAgIG9mZnNldFk6IE1hdGgucm91bmQoRSlcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHNldExpbmVXaWR0aCh0KSB7XG4gICAgICAgICAgdCAhPT0gdGhpcy5jdXJyZW50LmxpbmVXaWR0aCAmJiAodGhpcy5fY2FjaGVkU2NhbGVGb3JTdHJva2luZ1swXSA9IC0xKTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnQubGluZVdpZHRoID0gdDtcbiAgICAgICAgICB0aGlzLmN0eC5saW5lV2lkdGggPSB0O1xuICAgICAgICB9XG4gICAgICAgIHNldExpbmVDYXAodCkge1xuICAgICAgICAgIHRoaXMuY3R4LmxpbmVDYXAgPSBjW3RdO1xuICAgICAgICB9XG4gICAgICAgIHNldExpbmVKb2luKHQpIHtcbiAgICAgICAgICB0aGlzLmN0eC5saW5lSm9pbiA9IGhbdF07XG4gICAgICAgIH1cbiAgICAgICAgc2V0TWl0ZXJMaW1pdCh0KSB7XG4gICAgICAgICAgdGhpcy5jdHgubWl0ZXJMaW1pdCA9IHQ7XG4gICAgICAgIH1cbiAgICAgICAgc2V0RGFzaCh0LCBlKSB7XG4gICAgICAgICAgY29uc3QgbiA9IHRoaXMuY3R4O1xuICAgICAgICAgIGlmICh2b2lkIDAgIT09IG4uc2V0TGluZURhc2gpIHtcbiAgICAgICAgICAgIG4uc2V0TGluZURhc2godCk7XG4gICAgICAgICAgICBuLmxpbmVEYXNoT2Zmc2V0ID0gZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2V0UmVuZGVyaW5nSW50ZW50KHQpIHt9XG4gICAgICAgIHNldEZsYXRuZXNzKHQpIHt9XG4gICAgICAgIHNldEdTdGF0ZSh0KSB7XG4gICAgICAgICAgZm9yIChjb25zdCBbZSwgbl0gb2YgdCkgc3dpdGNoIChlKSB7XG4gICAgICAgICAgICBjYXNlIFwiTFdcIjpcbiAgICAgICAgICAgICAgdGhpcy5zZXRMaW5lV2lkdGgobik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIkxDXCI6XG4gICAgICAgICAgICAgIHRoaXMuc2V0TGluZUNhcChuKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiTEpcIjpcbiAgICAgICAgICAgICAgdGhpcy5zZXRMaW5lSm9pbihuKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiTUxcIjpcbiAgICAgICAgICAgICAgdGhpcy5zZXRNaXRlckxpbWl0KG4pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJEXCI6XG4gICAgICAgICAgICAgIHRoaXMuc2V0RGFzaChuWzBdLCBuWzFdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiUklcIjpcbiAgICAgICAgICAgICAgdGhpcy5zZXRSZW5kZXJpbmdJbnRlbnQobik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIkZMXCI6XG4gICAgICAgICAgICAgIHRoaXMuc2V0RmxhdG5lc3Mobik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIkZvbnRcIjpcbiAgICAgICAgICAgICAgdGhpcy5zZXRGb250KG5bMF0sIG5bMV0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJDQVwiOlxuICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3Ryb2tlQWxwaGEgPSBuO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJjYVwiOlxuICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuZmlsbEFscGhhID0gbjtcbiAgICAgICAgICAgICAgdGhpcy5jdHguZ2xvYmFsQWxwaGEgPSBuO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJCTVwiOlxuICAgICAgICAgICAgICB0aGlzLmN0eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBuO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJTTWFza1wiOlxuICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuYWN0aXZlU01hc2sgPSBuID8gdGhpcy50ZW1wU01hc2sgOiBudWxsO1xuICAgICAgICAgICAgICB0aGlzLnRlbXBTTWFzayA9IG51bGw7XG4gICAgICAgICAgICAgIHRoaXMuY2hlY2tTTWFza1N0YXRlKCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIlRSXCI6XG4gICAgICAgICAgICAgIHRoaXMuY3R4LmZpbHRlciA9IHRoaXMuY3VycmVudC50cmFuc2Zlck1hcHMgPSB0aGlzLmZpbHRlckZhY3RvcnkuYWRkRmlsdGVyKG4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBnZXQgaW5TTWFza01vZGUoKSB7XG4gICAgICAgICAgcmV0dXJuICEhdGhpcy5zdXNwZW5kZWRDdHg7XG4gICAgICAgIH1cbiAgICAgICAgY2hlY2tTTWFza1N0YXRlKCkge1xuICAgICAgICAgIGNvbnN0IHQgPSB0aGlzLmluU01hc2tNb2RlO1xuICAgICAgICAgIHRoaXMuY3VycmVudC5hY3RpdmVTTWFzayAmJiAhdCA/IHRoaXMuYmVnaW5TTWFza01vZGUoKSA6ICF0aGlzLmN1cnJlbnQuYWN0aXZlU01hc2sgJiYgdCAmJiB0aGlzLmVuZFNNYXNrTW9kZSgpO1xuICAgICAgICB9XG4gICAgICAgIGJlZ2luU01hc2tNb2RlKCkge1xuICAgICAgICAgIGlmICh0aGlzLmluU01hc2tNb2RlKSB0aHJvdyBuZXcgRXJyb3IoXCJiZWdpblNNYXNrTW9kZSBjYWxsZWQgd2hpbGUgYWxyZWFkeSBpbiBzbWFzayBtb2RlXCIpO1xuICAgICAgICAgIGNvbnN0IHQgPSB0aGlzLmN0eC5jYW52YXMud2lkdGgsXG4gICAgICAgICAgICBlID0gdGhpcy5jdHguY2FudmFzLmhlaWdodCxcbiAgICAgICAgICAgIG4gPSBcInNtYXNrR3JvdXBBdFwiICsgdGhpcy5ncm91cExldmVsLFxuICAgICAgICAgICAgaSA9IHRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKG4sIHQsIGUpO1xuICAgICAgICAgIHRoaXMuc3VzcGVuZGVkQ3R4ID0gdGhpcy5jdHg7XG4gICAgICAgICAgdGhpcy5jdHggPSBpLmNvbnRleHQ7XG4gICAgICAgICAgY29uc3QgcyA9IHRoaXMuY3R4O1xuICAgICAgICAgIHMuc2V0VHJhbnNmb3JtKC4uLigwLCByLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHRoaXMuc3VzcGVuZGVkQ3R4KSk7XG4gICAgICAgICAgY29weUN0eFN0YXRlKHRoaXMuc3VzcGVuZGVkQ3R4LCBzKTtcbiAgICAgICAgICAhZnVuY3Rpb24gbWlycm9yQ29udGV4dE9wZXJhdGlvbnModCwgZSkge1xuICAgICAgICAgICAgaWYgKHQuX3JlbW92ZU1pcnJvcmluZykgdGhyb3cgbmV3IEVycm9yKFwiQ29udGV4dCBpcyBhbHJlYWR5IGZvcndhcmRpbmcgb3BlcmF0aW9ucy5cIik7XG4gICAgICAgICAgICB0Ll9fb3JpZ2luYWxTYXZlID0gdC5zYXZlO1xuICAgICAgICAgICAgdC5fX29yaWdpbmFsUmVzdG9yZSA9IHQucmVzdG9yZTtcbiAgICAgICAgICAgIHQuX19vcmlnaW5hbFJvdGF0ZSA9IHQucm90YXRlO1xuICAgICAgICAgICAgdC5fX29yaWdpbmFsU2NhbGUgPSB0LnNjYWxlO1xuICAgICAgICAgICAgdC5fX29yaWdpbmFsVHJhbnNsYXRlID0gdC50cmFuc2xhdGU7XG4gICAgICAgICAgICB0Ll9fb3JpZ2luYWxUcmFuc2Zvcm0gPSB0LnRyYW5zZm9ybTtcbiAgICAgICAgICAgIHQuX19vcmlnaW5hbFNldFRyYW5zZm9ybSA9IHQuc2V0VHJhbnNmb3JtO1xuICAgICAgICAgICAgdC5fX29yaWdpbmFsUmVzZXRUcmFuc2Zvcm0gPSB0LnJlc2V0VHJhbnNmb3JtO1xuICAgICAgICAgICAgdC5fX29yaWdpbmFsQ2xpcCA9IHQuY2xpcDtcbiAgICAgICAgICAgIHQuX19vcmlnaW5hbE1vdmVUbyA9IHQubW92ZVRvO1xuICAgICAgICAgICAgdC5fX29yaWdpbmFsTGluZVRvID0gdC5saW5lVG87XG4gICAgICAgICAgICB0Ll9fb3JpZ2luYWxCZXppZXJDdXJ2ZVRvID0gdC5iZXppZXJDdXJ2ZVRvO1xuICAgICAgICAgICAgdC5fX29yaWdpbmFsUmVjdCA9IHQucmVjdDtcbiAgICAgICAgICAgIHQuX19vcmlnaW5hbENsb3NlUGF0aCA9IHQuY2xvc2VQYXRoO1xuICAgICAgICAgICAgdC5fX29yaWdpbmFsQmVnaW5QYXRoID0gdC5iZWdpblBhdGg7XG4gICAgICAgICAgICB0Ll9yZW1vdmVNaXJyb3JpbmcgPSAoKSA9PiB7XG4gICAgICAgICAgICAgIHQuc2F2ZSA9IHQuX19vcmlnaW5hbFNhdmU7XG4gICAgICAgICAgICAgIHQucmVzdG9yZSA9IHQuX19vcmlnaW5hbFJlc3RvcmU7XG4gICAgICAgICAgICAgIHQucm90YXRlID0gdC5fX29yaWdpbmFsUm90YXRlO1xuICAgICAgICAgICAgICB0LnNjYWxlID0gdC5fX29yaWdpbmFsU2NhbGU7XG4gICAgICAgICAgICAgIHQudHJhbnNsYXRlID0gdC5fX29yaWdpbmFsVHJhbnNsYXRlO1xuICAgICAgICAgICAgICB0LnRyYW5zZm9ybSA9IHQuX19vcmlnaW5hbFRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgdC5zZXRUcmFuc2Zvcm0gPSB0Ll9fb3JpZ2luYWxTZXRUcmFuc2Zvcm07XG4gICAgICAgICAgICAgIHQucmVzZXRUcmFuc2Zvcm0gPSB0Ll9fb3JpZ2luYWxSZXNldFRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgdC5jbGlwID0gdC5fX29yaWdpbmFsQ2xpcDtcbiAgICAgICAgICAgICAgdC5tb3ZlVG8gPSB0Ll9fb3JpZ2luYWxNb3ZlVG87XG4gICAgICAgICAgICAgIHQubGluZVRvID0gdC5fX29yaWdpbmFsTGluZVRvO1xuICAgICAgICAgICAgICB0LmJlemllckN1cnZlVG8gPSB0Ll9fb3JpZ2luYWxCZXppZXJDdXJ2ZVRvO1xuICAgICAgICAgICAgICB0LnJlY3QgPSB0Ll9fb3JpZ2luYWxSZWN0O1xuICAgICAgICAgICAgICB0LmNsb3NlUGF0aCA9IHQuX19vcmlnaW5hbENsb3NlUGF0aDtcbiAgICAgICAgICAgICAgdC5iZWdpblBhdGggPSB0Ll9fb3JpZ2luYWxCZWdpblBhdGg7XG4gICAgICAgICAgICAgIGRlbGV0ZSB0Ll9yZW1vdmVNaXJyb3Jpbmc7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdC5zYXZlID0gZnVuY3Rpb24gY3R4U2F2ZSgpIHtcbiAgICAgICAgICAgICAgZS5zYXZlKCk7XG4gICAgICAgICAgICAgIHRoaXMuX19vcmlnaW5hbFNhdmUoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0LnJlc3RvcmUgPSBmdW5jdGlvbiBjdHhSZXN0b3JlKCkge1xuICAgICAgICAgICAgICBlLnJlc3RvcmUoKTtcbiAgICAgICAgICAgICAgdGhpcy5fX29yaWdpbmFsUmVzdG9yZSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHQudHJhbnNsYXRlID0gZnVuY3Rpb24gY3R4VHJhbnNsYXRlKHQsIG4pIHtcbiAgICAgICAgICAgICAgZS50cmFuc2xhdGUodCwgbik7XG4gICAgICAgICAgICAgIHRoaXMuX19vcmlnaW5hbFRyYW5zbGF0ZSh0LCBuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0LnNjYWxlID0gZnVuY3Rpb24gY3R4U2NhbGUodCwgbikge1xuICAgICAgICAgICAgICBlLnNjYWxlKHQsIG4pO1xuICAgICAgICAgICAgICB0aGlzLl9fb3JpZ2luYWxTY2FsZSh0LCBuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0LnRyYW5zZm9ybSA9IGZ1bmN0aW9uIGN0eFRyYW5zZm9ybSh0LCBuLCBpLCByLCBzLCBhKSB7XG4gICAgICAgICAgICAgIGUudHJhbnNmb3JtKHQsIG4sIGksIHIsIHMsIGEpO1xuICAgICAgICAgICAgICB0aGlzLl9fb3JpZ2luYWxUcmFuc2Zvcm0odCwgbiwgaSwgciwgcywgYSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdC5zZXRUcmFuc2Zvcm0gPSBmdW5jdGlvbiBjdHhTZXRUcmFuc2Zvcm0odCwgbiwgaSwgciwgcywgYSkge1xuICAgICAgICAgICAgICBlLnNldFRyYW5zZm9ybSh0LCBuLCBpLCByLCBzLCBhKTtcbiAgICAgICAgICAgICAgdGhpcy5fX29yaWdpbmFsU2V0VHJhbnNmb3JtKHQsIG4sIGksIHIsIHMsIGEpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHQucmVzZXRUcmFuc2Zvcm0gPSBmdW5jdGlvbiBjdHhSZXNldFRyYW5zZm9ybSgpIHtcbiAgICAgICAgICAgICAgZS5yZXNldFRyYW5zZm9ybSgpO1xuICAgICAgICAgICAgICB0aGlzLl9fb3JpZ2luYWxSZXNldFRyYW5zZm9ybSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHQucm90YXRlID0gZnVuY3Rpb24gY3R4Um90YXRlKHQpIHtcbiAgICAgICAgICAgICAgZS5yb3RhdGUodCk7XG4gICAgICAgICAgICAgIHRoaXMuX19vcmlnaW5hbFJvdGF0ZSh0KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0LmNsaXAgPSBmdW5jdGlvbiBjdHhSb3RhdGUodCkge1xuICAgICAgICAgICAgICBlLmNsaXAodCk7XG4gICAgICAgICAgICAgIHRoaXMuX19vcmlnaW5hbENsaXAodCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdC5tb3ZlVG8gPSBmdW5jdGlvbiAodCwgbikge1xuICAgICAgICAgICAgICBlLm1vdmVUbyh0LCBuKTtcbiAgICAgICAgICAgICAgdGhpcy5fX29yaWdpbmFsTW92ZVRvKHQsIG4pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHQubGluZVRvID0gZnVuY3Rpb24gKHQsIG4pIHtcbiAgICAgICAgICAgICAgZS5saW5lVG8odCwgbik7XG4gICAgICAgICAgICAgIHRoaXMuX19vcmlnaW5hbExpbmVUbyh0LCBuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0LmJlemllckN1cnZlVG8gPSBmdW5jdGlvbiAodCwgbiwgaSwgciwgcywgYSkge1xuICAgICAgICAgICAgICBlLmJlemllckN1cnZlVG8odCwgbiwgaSwgciwgcywgYSk7XG4gICAgICAgICAgICAgIHRoaXMuX19vcmlnaW5hbEJlemllckN1cnZlVG8odCwgbiwgaSwgciwgcywgYSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdC5yZWN0ID0gZnVuY3Rpb24gKHQsIG4sIGksIHIpIHtcbiAgICAgICAgICAgICAgZS5yZWN0KHQsIG4sIGksIHIpO1xuICAgICAgICAgICAgICB0aGlzLl9fb3JpZ2luYWxSZWN0KHQsIG4sIGksIHIpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHQuY2xvc2VQYXRoID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBlLmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgICB0aGlzLl9fb3JpZ2luYWxDbG9zZVBhdGgoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0LmJlZ2luUGF0aCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgZS5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgICAgdGhpcy5fX29yaWdpbmFsQmVnaW5QYXRoKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0ocywgdGhpcy5zdXNwZW5kZWRDdHgpO1xuICAgICAgICAgIHRoaXMuc2V0R1N0YXRlKFtbXCJCTVwiLCBcInNvdXJjZS1vdmVyXCJdLCBbXCJjYVwiLCAxXSwgW1wiQ0FcIiwgMV1dKTtcbiAgICAgICAgfVxuICAgICAgICBlbmRTTWFza01vZGUoKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmluU01hc2tNb2RlKSB0aHJvdyBuZXcgRXJyb3IoXCJlbmRTTWFza01vZGUgY2FsbGVkIHdoaWxlIG5vdCBpbiBzbWFzayBtb2RlXCIpO1xuICAgICAgICAgIHRoaXMuY3R4Ll9yZW1vdmVNaXJyb3JpbmcoKTtcbiAgICAgICAgICBjb3B5Q3R4U3RhdGUodGhpcy5jdHgsIHRoaXMuc3VzcGVuZGVkQ3R4KTtcbiAgICAgICAgICB0aGlzLmN0eCA9IHRoaXMuc3VzcGVuZGVkQ3R4O1xuICAgICAgICAgIHRoaXMuc3VzcGVuZGVkQ3R4ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb21wb3NlKHQpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuY3VycmVudC5hY3RpdmVTTWFzaykgcmV0dXJuO1xuICAgICAgICAgIGlmICh0KSB7XG4gICAgICAgICAgICB0WzBdID0gTWF0aC5mbG9vcih0WzBdKTtcbiAgICAgICAgICAgIHRbMV0gPSBNYXRoLmZsb29yKHRbMV0pO1xuICAgICAgICAgICAgdFsyXSA9IE1hdGguY2VpbCh0WzJdKTtcbiAgICAgICAgICAgIHRbM10gPSBNYXRoLmNlaWwodFszXSk7XG4gICAgICAgICAgfSBlbHNlIHQgPSBbMCwgMCwgdGhpcy5jdHguY2FudmFzLndpZHRoLCB0aGlzLmN0eC5jYW52YXMuaGVpZ2h0XTtcbiAgICAgICAgICBjb25zdCBlID0gdGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrO1xuICAgICAgICAgIGNvbXBvc2VTTWFzayh0aGlzLnN1c3BlbmRlZEN0eCwgZSwgdGhpcy5jdHgsIHQpO1xuICAgICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICAgICAgICB0aGlzLmN0eC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XG4gICAgICAgICAgdGhpcy5jdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMuY3R4LmNhbnZhcy53aWR0aCwgdGhpcy5jdHguY2FudmFzLmhlaWdodCk7XG4gICAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuICAgICAgICB9XG4gICAgICAgIHNhdmUoKSB7XG4gICAgICAgICAgaWYgKHRoaXMuaW5TTWFza01vZGUpIHtcbiAgICAgICAgICAgIGNvcHlDdHhTdGF0ZSh0aGlzLmN0eCwgdGhpcy5zdXNwZW5kZWRDdHgpO1xuICAgICAgICAgICAgdGhpcy5zdXNwZW5kZWRDdHguc2F2ZSgpO1xuICAgICAgICAgIH0gZWxzZSB0aGlzLmN0eC5zYXZlKCk7XG4gICAgICAgICAgY29uc3QgdCA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgICB0aGlzLnN0YXRlU3RhY2sucHVzaCh0KTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnQgPSB0LmNsb25lKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdG9yZSgpIHtcbiAgICAgICAgICAwID09PSB0aGlzLnN0YXRlU3RhY2subGVuZ3RoICYmIHRoaXMuaW5TTWFza01vZGUgJiYgdGhpcy5lbmRTTWFza01vZGUoKTtcbiAgICAgICAgICBpZiAoMCAhPT0gdGhpcy5zdGF0ZVN0YWNrLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gdGhpcy5zdGF0ZVN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaW5TTWFza01vZGUpIHtcbiAgICAgICAgICAgICAgdGhpcy5zdXNwZW5kZWRDdHgucmVzdG9yZSgpO1xuICAgICAgICAgICAgICBjb3B5Q3R4U3RhdGUodGhpcy5zdXNwZW5kZWRDdHgsIHRoaXMuY3R4KTtcbiAgICAgICAgICAgIH0gZWxzZSB0aGlzLmN0eC5yZXN0b3JlKCk7XG4gICAgICAgICAgICB0aGlzLmNoZWNrU01hc2tTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nQ2xpcCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLl9jYWNoZWRTY2FsZUZvclN0cm9raW5nWzBdID0gLTE7XG4gICAgICAgICAgICB0aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdHJhbnNmb3JtKHQsIGUsIG4sIGksIHIsIHMpIHtcbiAgICAgICAgICB0aGlzLmN0eC50cmFuc2Zvcm0odCwgZSwgbiwgaSwgciwgcyk7XG4gICAgICAgICAgdGhpcy5fY2FjaGVkU2NhbGVGb3JTdHJva2luZ1swXSA9IC0xO1xuICAgICAgICAgIHRoaXMuX2NhY2hlZEdldFNpbmdsZVBpeGVsV2lkdGggPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0cnVjdFBhdGgodCwgZSwgbikge1xuICAgICAgICAgIGNvbnN0IHMgPSB0aGlzLmN0eCxcbiAgICAgICAgICAgIGEgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICAgICAgbGV0IG8sXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgYyA9IGEueCxcbiAgICAgICAgICAgIGggPSBhLnk7XG4gICAgICAgICAgY29uc3QgZCA9ICgwLCByLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHMpLFxuICAgICAgICAgICAgdSA9IDAgPT09IGRbMF0gJiYgMCA9PT0gZFszXSB8fCAwID09PSBkWzFdICYmIDAgPT09IGRbMl0sXG4gICAgICAgICAgICBwID0gdSA/IG4uc2xpY2UoMCkgOiBudWxsO1xuICAgICAgICAgIGZvciAobGV0IG4gPSAwLCByID0gMCwgZiA9IHQubGVuZ3RoOyBuIDwgZjsgbisrKSBzd2l0Y2ggKDAgfCB0W25dKSB7XG4gICAgICAgICAgICBjYXNlIGkuT1BTLnJlY3RhbmdsZTpcbiAgICAgICAgICAgICAgYyA9IGVbcisrXTtcbiAgICAgICAgICAgICAgaCA9IGVbcisrXTtcbiAgICAgICAgICAgICAgY29uc3QgdCA9IGVbcisrXSxcbiAgICAgICAgICAgICAgICBuID0gZVtyKytdLFxuICAgICAgICAgICAgICAgIGYgPSBjICsgdCxcbiAgICAgICAgICAgICAgICBnID0gaCArIG47XG4gICAgICAgICAgICAgIHMubW92ZVRvKGMsIGgpO1xuICAgICAgICAgICAgICBpZiAoMCA9PT0gdCB8fCAwID09PSBuKSBzLmxpbmVUbyhmLCBnKTtlbHNlIHtcbiAgICAgICAgICAgICAgICBzLmxpbmVUbyhmLCBoKTtcbiAgICAgICAgICAgICAgICBzLmxpbmVUbyhmLCBnKTtcbiAgICAgICAgICAgICAgICBzLmxpbmVUbyhjLCBnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB1IHx8IGEudXBkYXRlUmVjdE1pbk1heChkLCBbYywgaCwgZiwgZ10pO1xuICAgICAgICAgICAgICBzLmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgaS5PUFMubW92ZVRvOlxuICAgICAgICAgICAgICBjID0gZVtyKytdO1xuICAgICAgICAgICAgICBoID0gZVtyKytdO1xuICAgICAgICAgICAgICBzLm1vdmVUbyhjLCBoKTtcbiAgICAgICAgICAgICAgdSB8fCBhLnVwZGF0ZVBhdGhNaW5NYXgoZCwgYywgaCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBpLk9QUy5saW5lVG86XG4gICAgICAgICAgICAgIGMgPSBlW3IrK107XG4gICAgICAgICAgICAgIGggPSBlW3IrK107XG4gICAgICAgICAgICAgIHMubGluZVRvKGMsIGgpO1xuICAgICAgICAgICAgICB1IHx8IGEudXBkYXRlUGF0aE1pbk1heChkLCBjLCBoKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIGkuT1BTLmN1cnZlVG86XG4gICAgICAgICAgICAgIG8gPSBjO1xuICAgICAgICAgICAgICBsID0gaDtcbiAgICAgICAgICAgICAgYyA9IGVbciArIDRdO1xuICAgICAgICAgICAgICBoID0gZVtyICsgNV07XG4gICAgICAgICAgICAgIHMuYmV6aWVyQ3VydmVUbyhlW3JdLCBlW3IgKyAxXSwgZVtyICsgMl0sIGVbciArIDNdLCBjLCBoKTtcbiAgICAgICAgICAgICAgYS51cGRhdGVDdXJ2ZVBhdGhNaW5NYXgoZCwgbywgbCwgZVtyXSwgZVtyICsgMV0sIGVbciArIDJdLCBlW3IgKyAzXSwgYywgaCwgcCk7XG4gICAgICAgICAgICAgIHIgKz0gNjtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIGkuT1BTLmN1cnZlVG8yOlxuICAgICAgICAgICAgICBvID0gYztcbiAgICAgICAgICAgICAgbCA9IGg7XG4gICAgICAgICAgICAgIHMuYmV6aWVyQ3VydmVUbyhjLCBoLCBlW3JdLCBlW3IgKyAxXSwgZVtyICsgMl0sIGVbciArIDNdKTtcbiAgICAgICAgICAgICAgYS51cGRhdGVDdXJ2ZVBhdGhNaW5NYXgoZCwgbywgbCwgYywgaCwgZVtyXSwgZVtyICsgMV0sIGVbciArIDJdLCBlW3IgKyAzXSwgcCk7XG4gICAgICAgICAgICAgIGMgPSBlW3IgKyAyXTtcbiAgICAgICAgICAgICAgaCA9IGVbciArIDNdO1xuICAgICAgICAgICAgICByICs9IDQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBpLk9QUy5jdXJ2ZVRvMzpcbiAgICAgICAgICAgICAgbyA9IGM7XG4gICAgICAgICAgICAgIGwgPSBoO1xuICAgICAgICAgICAgICBjID0gZVtyICsgMl07XG4gICAgICAgICAgICAgIGggPSBlW3IgKyAzXTtcbiAgICAgICAgICAgICAgcy5iZXppZXJDdXJ2ZVRvKGVbcl0sIGVbciArIDFdLCBjLCBoLCBjLCBoKTtcbiAgICAgICAgICAgICAgYS51cGRhdGVDdXJ2ZVBhdGhNaW5NYXgoZCwgbywgbCwgZVtyXSwgZVtyICsgMV0sIGMsIGgsIGMsIGgsIHApO1xuICAgICAgICAgICAgICByICs9IDQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBpLk9QUy5jbG9zZVBhdGg6XG4gICAgICAgICAgICAgIHMuY2xvc2VQYXRoKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHUgJiYgYS51cGRhdGVTY2FsaW5nUGF0aE1pbk1heChkLCBwKTtcbiAgICAgICAgICBhLnNldEN1cnJlbnRQb2ludChjLCBoKTtcbiAgICAgICAgfVxuICAgICAgICBjbG9zZVBhdGgoKSB7XG4gICAgICAgICAgdGhpcy5jdHguY2xvc2VQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgc3Ryb2tlKCkge1xuICAgICAgICAgIGxldCB0ID0gIShhcmd1bWVudHMubGVuZ3RoID4gMCAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1swXSkgfHwgYXJndW1lbnRzWzBdO1xuICAgICAgICAgIGNvbnN0IGUgPSB0aGlzLmN0eCxcbiAgICAgICAgICAgIG4gPSB0aGlzLmN1cnJlbnQuc3Ryb2tlQ29sb3I7XG4gICAgICAgICAgZS5nbG9iYWxBbHBoYSA9IHRoaXMuY3VycmVudC5zdHJva2VBbHBoYTtcbiAgICAgICAgICBpZiAodGhpcy5jb250ZW50VmlzaWJsZSkgaWYgKFwib2JqZWN0XCIgPT0gdHlwZW9mIG4gJiYgbiAhPT0gbnVsbCAmJiBuICE9PSB2b2lkIDAgJiYgbi5nZXRQYXR0ZXJuKSB7XG4gICAgICAgICAgICBlLnNhdmUoKTtcbiAgICAgICAgICAgIGUuc3Ryb2tlU3R5bGUgPSBuLmdldFBhdHRlcm4oZSwgdGhpcywgKDAsIHIuZ2V0Q3VycmVudFRyYW5zZm9ybUludmVyc2UpKGUpLCBzLlBhdGhUeXBlLlNUUk9LRSk7XG4gICAgICAgICAgICB0aGlzLnJlc2NhbGVBbmRTdHJva2UoITEpO1xuICAgICAgICAgICAgZS5yZXN0b3JlKCk7XG4gICAgICAgICAgfSBlbHNlIHRoaXMucmVzY2FsZUFuZFN0cm9rZSghMCk7XG4gICAgICAgICAgdCAmJiB0aGlzLmNvbnN1bWVQYXRoKHRoaXMuY3VycmVudC5nZXRDbGlwcGVkUGF0aEJvdW5kaW5nQm94KCkpO1xuICAgICAgICAgIGUuZ2xvYmFsQWxwaGEgPSB0aGlzLmN1cnJlbnQuZmlsbEFscGhhO1xuICAgICAgICB9XG4gICAgICAgIGNsb3NlU3Ryb2tlKCkge1xuICAgICAgICAgIHRoaXMuY2xvc2VQYXRoKCk7XG4gICAgICAgICAgdGhpcy5zdHJva2UoKTtcbiAgICAgICAgfVxuICAgICAgICBmaWxsKCkge1xuICAgICAgICAgIGxldCB0ID0gIShhcmd1bWVudHMubGVuZ3RoID4gMCAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1swXSkgfHwgYXJndW1lbnRzWzBdO1xuICAgICAgICAgIGNvbnN0IGUgPSB0aGlzLmN0eCxcbiAgICAgICAgICAgIG4gPSB0aGlzLmN1cnJlbnQuZmlsbENvbG9yO1xuICAgICAgICAgIGxldCBpID0gITE7XG4gICAgICAgICAgaWYgKHRoaXMuY3VycmVudC5wYXR0ZXJuRmlsbCkge1xuICAgICAgICAgICAgZS5zYXZlKCk7XG4gICAgICAgICAgICBlLmZpbGxTdHlsZSA9IG4uZ2V0UGF0dGVybihlLCB0aGlzLCAoMCwgci5nZXRDdXJyZW50VHJhbnNmb3JtSW52ZXJzZSkoZSksIHMuUGF0aFR5cGUuRklMTCk7XG4gICAgICAgICAgICBpID0gITA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGEgPSB0aGlzLmN1cnJlbnQuZ2V0Q2xpcHBlZFBhdGhCb3VuZGluZ0JveCgpO1xuICAgICAgICAgIGlmICh0aGlzLmNvbnRlbnRWaXNpYmxlICYmIG51bGwgIT09IGEpIGlmICh0aGlzLnBlbmRpbmdFT0ZpbGwpIHtcbiAgICAgICAgICAgIGUuZmlsbChcImV2ZW5vZGRcIik7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdFT0ZpbGwgPSAhMTtcbiAgICAgICAgICB9IGVsc2UgZS5maWxsKCk7XG4gICAgICAgICAgaSAmJiBlLnJlc3RvcmUoKTtcbiAgICAgICAgICB0ICYmIHRoaXMuY29uc3VtZVBhdGgoYSk7XG4gICAgICAgIH1cbiAgICAgICAgZW9GaWxsKCkge1xuICAgICAgICAgIHRoaXMucGVuZGluZ0VPRmlsbCA9ICEwO1xuICAgICAgICAgIHRoaXMuZmlsbCgpO1xuICAgICAgICB9XG4gICAgICAgIGZpbGxTdHJva2UoKSB7XG4gICAgICAgICAgdGhpcy5maWxsKCExKTtcbiAgICAgICAgICB0aGlzLnN0cm9rZSghMSk7XG4gICAgICAgICAgdGhpcy5jb25zdW1lUGF0aCgpO1xuICAgICAgICB9XG4gICAgICAgIGVvRmlsbFN0cm9rZSgpIHtcbiAgICAgICAgICB0aGlzLnBlbmRpbmdFT0ZpbGwgPSAhMDtcbiAgICAgICAgICB0aGlzLmZpbGxTdHJva2UoKTtcbiAgICAgICAgfVxuICAgICAgICBjbG9zZUZpbGxTdHJva2UoKSB7XG4gICAgICAgICAgdGhpcy5jbG9zZVBhdGgoKTtcbiAgICAgICAgICB0aGlzLmZpbGxTdHJva2UoKTtcbiAgICAgICAgfVxuICAgICAgICBjbG9zZUVPRmlsbFN0cm9rZSgpIHtcbiAgICAgICAgICB0aGlzLnBlbmRpbmdFT0ZpbGwgPSAhMDtcbiAgICAgICAgICB0aGlzLmNsb3NlUGF0aCgpO1xuICAgICAgICAgIHRoaXMuZmlsbFN0cm9rZSgpO1xuICAgICAgICB9XG4gICAgICAgIGVuZFBhdGgoKSB7XG4gICAgICAgICAgdGhpcy5jb25zdW1lUGF0aCgpO1xuICAgICAgICB9XG4gICAgICAgIGNsaXAoKSB7XG4gICAgICAgICAgdGhpcy5wZW5kaW5nQ2xpcCA9IGQ7XG4gICAgICAgIH1cbiAgICAgICAgZW9DbGlwKCkge1xuICAgICAgICAgIHRoaXMucGVuZGluZ0NsaXAgPSB1O1xuICAgICAgICB9XG4gICAgICAgIGJlZ2luVGV4dCgpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnQudGV4dE1hdHJpeCA9IGkuSURFTlRJVFlfTUFUUklYO1xuICAgICAgICAgIHRoaXMuY3VycmVudC50ZXh0TWF0cml4U2NhbGUgPSAxO1xuICAgICAgICAgIHRoaXMuY3VycmVudC54ID0gdGhpcy5jdXJyZW50LmxpbmVYID0gMDtcbiAgICAgICAgICB0aGlzLmN1cnJlbnQueSA9IHRoaXMuY3VycmVudC5saW5lWSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgZW5kVGV4dCgpIHtcbiAgICAgICAgICBjb25zdCB0ID0gdGhpcy5wZW5kaW5nVGV4dFBhdGhzLFxuICAgICAgICAgICAgZSA9IHRoaXMuY3R4O1xuICAgICAgICAgIGlmICh2b2lkIDAgIT09IHQpIHtcbiAgICAgICAgICAgIGUuc2F2ZSgpO1xuICAgICAgICAgICAgZS5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgbiBvZiB0KSB7XG4gICAgICAgICAgICAgIGUuc2V0VHJhbnNmb3JtKC4uLm4udHJhbnNmb3JtKTtcbiAgICAgICAgICAgICAgZS50cmFuc2xhdGUobi54LCBuLnkpO1xuICAgICAgICAgICAgICBuLmFkZFRvUGF0aChlLCBuLmZvbnRTaXplKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGUucmVzdG9yZSgpO1xuICAgICAgICAgICAgZS5jbGlwKCk7XG4gICAgICAgICAgICBlLmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMucGVuZGluZ1RleHRQYXRocztcbiAgICAgICAgICB9IGVsc2UgZS5iZWdpblBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBzZXRDaGFyU3BhY2luZyh0KSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50LmNoYXJTcGFjaW5nID0gdDtcbiAgICAgICAgfVxuICAgICAgICBzZXRXb3JkU3BhY2luZyh0KSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50LndvcmRTcGFjaW5nID0gdDtcbiAgICAgICAgfVxuICAgICAgICBzZXRIU2NhbGUodCkge1xuICAgICAgICAgIHRoaXMuY3VycmVudC50ZXh0SFNjYWxlID0gdCAvIDEwMDtcbiAgICAgICAgfVxuICAgICAgICBzZXRMZWFkaW5nKHQpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnQubGVhZGluZyA9IC10O1xuICAgICAgICB9XG4gICAgICAgIHNldEZvbnQodCwgZSkge1xuICAgICAgICAgIHZhciBfbiRzeXN0ZW1Gb250SW5mbztcbiAgICAgICAgICBjb25zdCBuID0gdGhpcy5jb21tb25PYmpzLmdldCh0KSxcbiAgICAgICAgICAgIHIgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICAgICAgaWYgKCFuKSB0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBmaW5kIGZvbnQgZm9yIFwiLmNvbmNhdCh0KSk7XG4gICAgICAgICAgci5mb250TWF0cml4ID0gbi5mb250TWF0cml4IHx8IGkuRk9OVF9JREVOVElUWV9NQVRSSVg7XG4gICAgICAgICAgMCAhPT0gci5mb250TWF0cml4WzBdICYmIDAgIT09IHIuZm9udE1hdHJpeFszXSB8fCAoMCwgaS53YXJuKShcIkludmFsaWQgZm9udCBtYXRyaXggZm9yIGZvbnQgXCIgKyB0KTtcbiAgICAgICAgICBpZiAoZSA8IDApIHtcbiAgICAgICAgICAgIGUgPSAtZTtcbiAgICAgICAgICAgIHIuZm9udERpcmVjdGlvbiA9IC0xO1xuICAgICAgICAgIH0gZWxzZSByLmZvbnREaXJlY3Rpb24gPSAxO1xuICAgICAgICAgIHRoaXMuY3VycmVudC5mb250ID0gbjtcbiAgICAgICAgICB0aGlzLmN1cnJlbnQuZm9udFNpemUgPSBlO1xuICAgICAgICAgIGlmIChuLmlzVHlwZTNGb250KSByZXR1cm47XG4gICAgICAgICAgY29uc3QgcyA9IG4ubG9hZGVkTmFtZSB8fCBcInNhbnMtc2VyaWZcIixcbiAgICAgICAgICAgIGEgPSAoKF9uJHN5c3RlbUZvbnRJbmZvID0gbi5zeXN0ZW1Gb250SW5mbykgPT09IG51bGwgfHwgX24kc3lzdGVtRm9udEluZm8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9uJHN5c3RlbUZvbnRJbmZvLmNzcykgfHwgXCJcXFwiXCIuY29uY2F0KHMsIFwiXFxcIiwgXCIpLmNvbmNhdChuLmZhbGxiYWNrTmFtZSk7XG4gICAgICAgICAgbGV0IG8gPSBcIm5vcm1hbFwiO1xuICAgICAgICAgIG4uYmxhY2sgPyBvID0gXCI5MDBcIiA6IG4uYm9sZCAmJiAobyA9IFwiYm9sZFwiKTtcbiAgICAgICAgICBjb25zdCBsID0gbi5pdGFsaWMgPyBcIml0YWxpY1wiIDogXCJub3JtYWxcIjtcbiAgICAgICAgICBsZXQgYyA9IGU7XG4gICAgICAgICAgZSA8IDE2ID8gYyA9IDE2IDogZSA+IDEwMCAmJiAoYyA9IDEwMCk7XG4gICAgICAgICAgdGhpcy5jdXJyZW50LmZvbnRTaXplU2NhbGUgPSBlIC8gYztcbiAgICAgICAgICB0aGlzLmN0eC5mb250ID0gXCJcIi5jb25jYXQobCwgXCIgXCIpLmNvbmNhdChvLCBcIiBcIikuY29uY2F0KGMsIFwicHggXCIpLmNvbmNhdChhKTtcbiAgICAgICAgfVxuICAgICAgICBzZXRUZXh0UmVuZGVyaW5nTW9kZSh0KSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50LnRleHRSZW5kZXJpbmdNb2RlID0gdDtcbiAgICAgICAgfVxuICAgICAgICBzZXRUZXh0UmlzZSh0KSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50LnRleHRSaXNlID0gdDtcbiAgICAgICAgfVxuICAgICAgICBtb3ZlVGV4dCh0LCBlKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50LnggPSB0aGlzLmN1cnJlbnQubGluZVggKz0gdDtcbiAgICAgICAgICB0aGlzLmN1cnJlbnQueSA9IHRoaXMuY3VycmVudC5saW5lWSArPSBlO1xuICAgICAgICB9XG4gICAgICAgIHNldExlYWRpbmdNb3ZlVGV4dCh0LCBlKSB7XG4gICAgICAgICAgdGhpcy5zZXRMZWFkaW5nKC1lKTtcbiAgICAgICAgICB0aGlzLm1vdmVUZXh0KHQsIGUpO1xuICAgICAgICB9XG4gICAgICAgIHNldFRleHRNYXRyaXgodCwgZSwgbiwgaSwgciwgcykge1xuICAgICAgICAgIHRoaXMuY3VycmVudC50ZXh0TWF0cml4ID0gW3QsIGUsIG4sIGksIHIsIHNdO1xuICAgICAgICAgIHRoaXMuY3VycmVudC50ZXh0TWF0cml4U2NhbGUgPSBNYXRoLmh5cG90KHQsIGUpO1xuICAgICAgICAgIHRoaXMuY3VycmVudC54ID0gdGhpcy5jdXJyZW50LmxpbmVYID0gMDtcbiAgICAgICAgICB0aGlzLmN1cnJlbnQueSA9IHRoaXMuY3VycmVudC5saW5lWSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dExpbmUoKSB7XG4gICAgICAgICAgdGhpcy5tb3ZlVGV4dCgwLCB0aGlzLmN1cnJlbnQubGVhZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgcGFpbnRDaGFyKHQsIGUsIG4sIHMpIHtcbiAgICAgICAgICBjb25zdCBhID0gdGhpcy5jdHgsXG4gICAgICAgICAgICBvID0gdGhpcy5jdXJyZW50LFxuICAgICAgICAgICAgbCA9IG8uZm9udCxcbiAgICAgICAgICAgIGMgPSBvLnRleHRSZW5kZXJpbmdNb2RlLFxuICAgICAgICAgICAgaCA9IG8uZm9udFNpemUgLyBvLmZvbnRTaXplU2NhbGUsXG4gICAgICAgICAgICBkID0gYyAmIGkuVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0VfTUFTSyxcbiAgICAgICAgICAgIHUgPSAhIShjICYgaS5UZXh0UmVuZGVyaW5nTW9kZS5BRERfVE9fUEFUSF9GTEFHKSxcbiAgICAgICAgICAgIHAgPSBvLnBhdHRlcm5GaWxsICYmICFsLm1pc3NpbmdGaWxlO1xuICAgICAgICAgIGxldCBmO1xuICAgICAgICAgIChsLmRpc2FibGVGb250RmFjZSB8fCB1IHx8IHApICYmIChmID0gbC5nZXRQYXRoR2VuZXJhdG9yKHRoaXMuY29tbW9uT2JqcywgdCkpO1xuICAgICAgICAgIGlmIChsLmRpc2FibGVGb250RmFjZSB8fCBwKSB7XG4gICAgICAgICAgICBhLnNhdmUoKTtcbiAgICAgICAgICAgIGEudHJhbnNsYXRlKGUsIG4pO1xuICAgICAgICAgICAgYS5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgIGYoYSwgaCk7XG4gICAgICAgICAgICBzICYmIGEuc2V0VHJhbnNmb3JtKC4uLnMpO1xuICAgICAgICAgICAgZCAhPT0gaS5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMICYmIGQgIT09IGkuVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0UgfHwgYS5maWxsKCk7XG4gICAgICAgICAgICBkICE9PSBpLlRleHRSZW5kZXJpbmdNb2RlLlNUUk9LRSAmJiBkICE9PSBpLlRleHRSZW5kZXJpbmdNb2RlLkZJTExfU1RST0tFIHx8IGEuc3Ryb2tlKCk7XG4gICAgICAgICAgICBhLnJlc3RvcmUoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZCAhPT0gaS5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMICYmIGQgIT09IGkuVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0UgfHwgYS5maWxsVGV4dCh0LCBlLCBuKTtcbiAgICAgICAgICAgIGQgIT09IGkuVGV4dFJlbmRlcmluZ01vZGUuU1RST0tFICYmIGQgIT09IGkuVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0UgfHwgYS5zdHJva2VUZXh0KHQsIGUsIG4pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodSkge1xuICAgICAgICAgICAgKHRoaXMucGVuZGluZ1RleHRQYXRocyB8fCAodGhpcy5wZW5kaW5nVGV4dFBhdGhzID0gW10pKS5wdXNoKHtcbiAgICAgICAgICAgICAgdHJhbnNmb3JtOiAoMCwgci5nZXRDdXJyZW50VHJhbnNmb3JtKShhKSxcbiAgICAgICAgICAgICAgeDogZSxcbiAgICAgICAgICAgICAgeTogbixcbiAgICAgICAgICAgICAgZm9udFNpemU6IGgsXG4gICAgICAgICAgICAgIGFkZFRvUGF0aDogZlxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGdldCBpc0ZvbnRTdWJwaXhlbEFBRW5hYmxlZCgpIHtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBjb250ZXh0OiB0XG4gICAgICAgICAgfSA9IHRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKFwiaXNGb250U3VicGl4ZWxBQUVuYWJsZWRcIiwgMTAsIDEwKTtcbiAgICAgICAgICB0LnNjYWxlKDEuNSwgMSk7XG4gICAgICAgICAgdC5maWxsVGV4dChcIklcIiwgMCwgMTApO1xuICAgICAgICAgIGNvbnN0IGUgPSB0LmdldEltYWdlRGF0YSgwLCAwLCAxMCwgMTApLmRhdGE7XG4gICAgICAgICAgbGV0IG4gPSAhMTtcbiAgICAgICAgICBmb3IgKGxldCB0ID0gMzsgdCA8IGUubGVuZ3RoOyB0ICs9IDQpIGlmIChlW3RdID4gMCAmJiBlW3RdIDwgMjU1KSB7XG4gICAgICAgICAgICBuID0gITA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuICgwLCBpLnNoYWRvdykodGhpcywgXCJpc0ZvbnRTdWJwaXhlbEFBRW5hYmxlZFwiLCBuKTtcbiAgICAgICAgfVxuICAgICAgICBzaG93VGV4dCh0KSB7XG4gICAgICAgICAgY29uc3QgZSA9IHRoaXMuY3VycmVudCxcbiAgICAgICAgICAgIG4gPSBlLmZvbnQ7XG4gICAgICAgICAgaWYgKG4uaXNUeXBlM0ZvbnQpIHJldHVybiB0aGlzLnNob3dUeXBlM1RleHQodCk7XG4gICAgICAgICAgY29uc3QgYSA9IGUuZm9udFNpemU7XG4gICAgICAgICAgaWYgKDAgPT09IGEpIHJldHVybjtcbiAgICAgICAgICBjb25zdCBvID0gdGhpcy5jdHgsXG4gICAgICAgICAgICBsID0gZS5mb250U2l6ZVNjYWxlLFxuICAgICAgICAgICAgYyA9IGUuY2hhclNwYWNpbmcsXG4gICAgICAgICAgICBoID0gZS53b3JkU3BhY2luZyxcbiAgICAgICAgICAgIGQgPSBlLmZvbnREaXJlY3Rpb24sXG4gICAgICAgICAgICB1ID0gZS50ZXh0SFNjYWxlICogZCxcbiAgICAgICAgICAgIHAgPSB0Lmxlbmd0aCxcbiAgICAgICAgICAgIGYgPSBuLnZlcnRpY2FsLFxuICAgICAgICAgICAgZyA9IGYgPyAxIDogLTEsXG4gICAgICAgICAgICBtID0gbi5kZWZhdWx0Vk1ldHJpY3MsXG4gICAgICAgICAgICBiID0gYSAqIGUuZm9udE1hdHJpeFswXSxcbiAgICAgICAgICAgIHYgPSBlLnRleHRSZW5kZXJpbmdNb2RlID09PSBpLlRleHRSZW5kZXJpbmdNb2RlLkZJTEwgJiYgIW4uZGlzYWJsZUZvbnRGYWNlICYmICFlLnBhdHRlcm5GaWxsO1xuICAgICAgICAgIG8uc2F2ZSgpO1xuICAgICAgICAgIG8udHJhbnNmb3JtKC4uLmUudGV4dE1hdHJpeCk7XG4gICAgICAgICAgby50cmFuc2xhdGUoZS54LCBlLnkgKyBlLnRleHRSaXNlKTtcbiAgICAgICAgICBkID4gMCA/IG8uc2NhbGUodSwgLTEpIDogby5zY2FsZSh1LCAxKTtcbiAgICAgICAgICBsZXQgeTtcbiAgICAgICAgICBpZiAoZS5wYXR0ZXJuRmlsbCkge1xuICAgICAgICAgICAgby5zYXZlKCk7XG4gICAgICAgICAgICBjb25zdCB0ID0gZS5maWxsQ29sb3IuZ2V0UGF0dGVybihvLCB0aGlzLCAoMCwgci5nZXRDdXJyZW50VHJhbnNmb3JtSW52ZXJzZSkobyksIHMuUGF0aFR5cGUuRklMTCk7XG4gICAgICAgICAgICB5ID0gKDAsIHIuZ2V0Q3VycmVudFRyYW5zZm9ybSkobyk7XG4gICAgICAgICAgICBvLnJlc3RvcmUoKTtcbiAgICAgICAgICAgIG8uZmlsbFN0eWxlID0gdDtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IEEgPSBlLmxpbmVXaWR0aDtcbiAgICAgICAgICBjb25zdCBfID0gZS50ZXh0TWF0cml4U2NhbGU7XG4gICAgICAgICAgaWYgKDAgPT09IF8gfHwgMCA9PT0gQSkge1xuICAgICAgICAgICAgY29uc3QgdCA9IGUudGV4dFJlbmRlcmluZ01vZGUgJiBpLlRleHRSZW5kZXJpbmdNb2RlLkZJTExfU1RST0tFX01BU0s7XG4gICAgICAgICAgICB0ICE9PSBpLlRleHRSZW5kZXJpbmdNb2RlLlNUUk9LRSAmJiB0ICE9PSBpLlRleHRSZW5kZXJpbmdNb2RlLkZJTExfU1RST0tFIHx8IChBID0gdGhpcy5nZXRTaW5nbGVQaXhlbFdpZHRoKCkpO1xuICAgICAgICAgIH0gZWxzZSBBIC89IF87XG4gICAgICAgICAgaWYgKDEgIT09IGwpIHtcbiAgICAgICAgICAgIG8uc2NhbGUobCwgbCk7XG4gICAgICAgICAgICBBIC89IGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIG8ubGluZVdpZHRoID0gQTtcbiAgICAgICAgICBpZiAobi5pc0ludmFsaWRQREZqc0ZvbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IG4gPSBbXTtcbiAgICAgICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiB0KSB7XG4gICAgICAgICAgICAgIG4ucHVzaChlLnVuaWNvZGUpO1xuICAgICAgICAgICAgICBpICs9IGUud2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvLmZpbGxUZXh0KG4uam9pbihcIlwiKSwgMCwgMCk7XG4gICAgICAgICAgICBlLnggKz0gaSAqIGIgKiB1O1xuICAgICAgICAgICAgby5yZXN0b3JlKCk7XG4gICAgICAgICAgICB0aGlzLmNvbXBvc2UoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IFMsXG4gICAgICAgICAgICBFID0gMDtcbiAgICAgICAgICBmb3IgKFMgPSAwOyBTIDwgcDsgKytTKSB7XG4gICAgICAgICAgICBjb25zdCBlID0gdFtTXTtcbiAgICAgICAgICAgIGlmIChcIm51bWJlclwiID09IHR5cGVvZiBlKSB7XG4gICAgICAgICAgICAgIEUgKz0gZyAqIGUgKiBhIC8gMWUzO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBpID0gITE7XG4gICAgICAgICAgICBjb25zdCByID0gKGUuaXNTcGFjZSA/IGggOiAwKSArIGMsXG4gICAgICAgICAgICAgIHMgPSBlLmZvbnRDaGFyLFxuICAgICAgICAgICAgICB1ID0gZS5hY2NlbnQ7XG4gICAgICAgICAgICBsZXQgcCxcbiAgICAgICAgICAgICAgQSxcbiAgICAgICAgICAgICAgXyA9IGUud2lkdGg7XG4gICAgICAgICAgICBpZiAoZikge1xuICAgICAgICAgICAgICBjb25zdCB0ID0gZS52bWV0cmljIHx8IG0sXG4gICAgICAgICAgICAgICAgbiA9IC0oZS52bWV0cmljID8gdFsxXSA6IC41ICogXykgKiBiLFxuICAgICAgICAgICAgICAgIGkgPSB0WzJdICogYjtcbiAgICAgICAgICAgICAgXyA9IHQgPyAtdFswXSA6IF87XG4gICAgICAgICAgICAgIHAgPSBuIC8gbDtcbiAgICAgICAgICAgICAgQSA9IChFICsgaSkgLyBsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcCA9IEUgLyBsO1xuICAgICAgICAgICAgICBBID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuLnJlbWVhc3VyZSAmJiBfID4gMCkge1xuICAgICAgICAgICAgICBjb25zdCB0ID0gMWUzICogby5tZWFzdXJlVGV4dChzKS53aWR0aCAvIGEgKiBsO1xuICAgICAgICAgICAgICBpZiAoXyA8IHQgJiYgdGhpcy5pc0ZvbnRTdWJwaXhlbEFBRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGUgPSBfIC8gdDtcbiAgICAgICAgICAgICAgICBpID0gITA7XG4gICAgICAgICAgICAgICAgby5zYXZlKCk7XG4gICAgICAgICAgICAgICAgby5zY2FsZShlLCAxKTtcbiAgICAgICAgICAgICAgICBwIC89IGU7XG4gICAgICAgICAgICAgIH0gZWxzZSBfICE9PSB0ICYmIChwICs9IChfIC0gdCkgLyAyZTMgKiBhIC8gbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5jb250ZW50VmlzaWJsZSAmJiAoZS5pc0luRm9udCB8fCBuLm1pc3NpbmdGaWxlKSkgaWYgKHYgJiYgIXUpIG8uZmlsbFRleHQocywgcCwgQSk7ZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMucGFpbnRDaGFyKHMsIHAsIEEsIHkpO1xuICAgICAgICAgICAgICBpZiAodSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHQgPSBwICsgYSAqIHUub2Zmc2V0LnggLyBsLFxuICAgICAgICAgICAgICAgICAgZSA9IEEgLSBhICogdS5vZmZzZXQueSAvIGw7XG4gICAgICAgICAgICAgICAgdGhpcy5wYWludENoYXIodS5mb250Q2hhciwgdCwgZSwgeSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEUgKz0gZiA/IF8gKiBiIC0gciAqIGQgOiBfICogYiArIHIgKiBkO1xuICAgICAgICAgICAgaSAmJiBvLnJlc3RvcmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZiA/IGUueSAtPSBFIDogZS54ICs9IEUgKiB1O1xuICAgICAgICAgIG8ucmVzdG9yZSgpO1xuICAgICAgICAgIHRoaXMuY29tcG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIHNob3dUeXBlM1RleHQodCkge1xuICAgICAgICAgIGNvbnN0IGUgPSB0aGlzLmN0eCxcbiAgICAgICAgICAgIG4gPSB0aGlzLmN1cnJlbnQsXG4gICAgICAgICAgICByID0gbi5mb250LFxuICAgICAgICAgICAgcyA9IG4uZm9udFNpemUsXG4gICAgICAgICAgICBhID0gbi5mb250RGlyZWN0aW9uLFxuICAgICAgICAgICAgbyA9IHIudmVydGljYWwgPyAxIDogLTEsXG4gICAgICAgICAgICBsID0gbi5jaGFyU3BhY2luZyxcbiAgICAgICAgICAgIGMgPSBuLndvcmRTcGFjaW5nLFxuICAgICAgICAgICAgaCA9IG4udGV4dEhTY2FsZSAqIGEsXG4gICAgICAgICAgICBkID0gbi5mb250TWF0cml4IHx8IGkuRk9OVF9JREVOVElUWV9NQVRSSVgsXG4gICAgICAgICAgICB1ID0gdC5sZW5ndGg7XG4gICAgICAgICAgbGV0IHAsIGYsIGcsIG07XG4gICAgICAgICAgaWYgKCEobi50ZXh0UmVuZGVyaW5nTW9kZSA9PT0gaS5UZXh0UmVuZGVyaW5nTW9kZS5JTlZJU0lCTEUpICYmIDAgIT09IHMpIHtcbiAgICAgICAgICAgIHRoaXMuX2NhY2hlZFNjYWxlRm9yU3Ryb2tpbmdbMF0gPSAtMTtcbiAgICAgICAgICAgIHRoaXMuX2NhY2hlZEdldFNpbmdsZVBpeGVsV2lkdGggPSBudWxsO1xuICAgICAgICAgICAgZS5zYXZlKCk7XG4gICAgICAgICAgICBlLnRyYW5zZm9ybSguLi5uLnRleHRNYXRyaXgpO1xuICAgICAgICAgICAgZS50cmFuc2xhdGUobi54LCBuLnkpO1xuICAgICAgICAgICAgZS5zY2FsZShoLCBhKTtcbiAgICAgICAgICAgIGZvciAocCA9IDA7IHAgPCB1OyArK3ApIHtcbiAgICAgICAgICAgICAgZiA9IHRbcF07XG4gICAgICAgICAgICAgIGlmIChcIm51bWJlclwiID09IHR5cGVvZiBmKSB7XG4gICAgICAgICAgICAgICAgbSA9IG8gKiBmICogcyAvIDFlMztcbiAgICAgICAgICAgICAgICB0aGlzLmN0eC50cmFuc2xhdGUobSwgMCk7XG4gICAgICAgICAgICAgICAgbi54ICs9IG0gKiBoO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IGEgPSAoZi5pc1NwYWNlID8gYyA6IDApICsgbCxcbiAgICAgICAgICAgICAgICB1ID0gci5jaGFyUHJvY09wZXJhdG9yTGlzdFtmLm9wZXJhdG9yTGlzdElkXTtcbiAgICAgICAgICAgICAgaWYgKCF1KSB7XG4gICAgICAgICAgICAgICAgKDAsIGkud2FybikoXCJUeXBlMyBjaGFyYWN0ZXIgXFxcIlwiLmNvbmNhdChmLm9wZXJhdG9yTGlzdElkLCBcIlxcXCIgaXMgbm90IGF2YWlsYWJsZS5cIikpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRlbnRWaXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzaW5nVHlwZTMgPSBmO1xuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZSgpO1xuICAgICAgICAgICAgICAgIGUuc2NhbGUocywgcyk7XG4gICAgICAgICAgICAgICAgZS50cmFuc2Zvcm0oLi4uZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5leGVjdXRlT3BlcmF0b3JMaXN0KHUpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVzdG9yZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGcgPSBpLlV0aWwuYXBwbHlUcmFuc2Zvcm0oW2Yud2lkdGgsIDBdLCBkKVswXSAqIHMgKyBhO1xuICAgICAgICAgICAgICBlLnRyYW5zbGF0ZShnLCAwKTtcbiAgICAgICAgICAgICAgbi54ICs9IGcgKiBoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZS5yZXN0b3JlKCk7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NpbmdUeXBlMyA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNldENoYXJXaWR0aCh0LCBlKSB7fVxuICAgICAgICBzZXRDaGFyV2lkdGhBbmRCb3VuZHModCwgZSwgbiwgaSwgciwgcykge1xuICAgICAgICAgIHRoaXMuY3R4LnJlY3QobiwgaSwgciAtIG4sIHMgLSBpKTtcbiAgICAgICAgICB0aGlzLmN0eC5jbGlwKCk7XG4gICAgICAgICAgdGhpcy5lbmRQYXRoKCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0Q29sb3JOX1BhdHRlcm4odCkge1xuICAgICAgICAgIGxldCBlO1xuICAgICAgICAgIGlmIChcIlRpbGluZ1BhdHRlcm5cIiA9PT0gdFswXSkge1xuICAgICAgICAgICAgY29uc3QgbiA9IHRbMV0sXG4gICAgICAgICAgICAgIGkgPSB0aGlzLmJhc2VUcmFuc2Zvcm0gfHwgKDAsIHIuZ2V0Q3VycmVudFRyYW5zZm9ybSkodGhpcy5jdHgpLFxuICAgICAgICAgICAgICBhID0ge1xuICAgICAgICAgICAgICAgIGNyZWF0ZUNhbnZhc0dyYXBoaWNzOiB0ID0+IG5ldyBDYW52YXNHcmFwaGljcyh0LCB0aGlzLmNvbW1vbk9ianMsIHRoaXMub2JqcywgdGhpcy5jYW52YXNGYWN0b3J5LCB0aGlzLmZpbHRlckZhY3RvcnksIHtcbiAgICAgICAgICAgICAgICAgIG9wdGlvbmFsQ29udGVudENvbmZpZzogdGhpcy5vcHRpb25hbENvbnRlbnRDb25maWcsXG4gICAgICAgICAgICAgICAgICBtYXJrZWRDb250ZW50U3RhY2s6IHRoaXMubWFya2VkQ29udGVudFN0YWNrXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGUgPSBuZXcgcy5UaWxpbmdQYXR0ZXJuKHQsIG4sIHRoaXMuY3R4LCBhLCBpKTtcbiAgICAgICAgICB9IGVsc2UgZSA9IHRoaXMuX2dldFBhdHRlcm4odFsxXSwgdFsyXSk7XG4gICAgICAgICAgcmV0dXJuIGU7XG4gICAgICAgIH1cbiAgICAgICAgc2V0U3Ryb2tlQ29sb3JOKCkge1xuICAgICAgICAgIHRoaXMuY3VycmVudC5zdHJva2VDb2xvciA9IHRoaXMuZ2V0Q29sb3JOX1BhdHRlcm4oYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICBzZXRGaWxsQ29sb3JOKCkge1xuICAgICAgICAgIHRoaXMuY3VycmVudC5maWxsQ29sb3IgPSB0aGlzLmdldENvbG9yTl9QYXR0ZXJuKGFyZ3VtZW50cyk7XG4gICAgICAgICAgdGhpcy5jdXJyZW50LnBhdHRlcm5GaWxsID0gITA7XG4gICAgICAgIH1cbiAgICAgICAgc2V0U3Ryb2tlUkdCQ29sb3IodCwgZSwgbikge1xuICAgICAgICAgIGNvbnN0IHIgPSBpLlV0aWwubWFrZUhleENvbG9yKHQsIGUsIG4pO1xuICAgICAgICAgIHRoaXMuY3R4LnN0cm9rZVN0eWxlID0gcjtcbiAgICAgICAgICB0aGlzLmN1cnJlbnQuc3Ryb2tlQ29sb3IgPSByO1xuICAgICAgICB9XG4gICAgICAgIHNldEZpbGxSR0JDb2xvcih0LCBlLCBuKSB7XG4gICAgICAgICAgY29uc3QgciA9IGkuVXRpbC5tYWtlSGV4Q29sb3IodCwgZSwgbik7XG4gICAgICAgICAgdGhpcy5jdHguZmlsbFN0eWxlID0gcjtcbiAgICAgICAgICB0aGlzLmN1cnJlbnQuZmlsbENvbG9yID0gcjtcbiAgICAgICAgICB0aGlzLmN1cnJlbnQucGF0dGVybkZpbGwgPSAhMTtcbiAgICAgICAgfVxuICAgICAgICBfZ2V0UGF0dGVybih0KSB7XG4gICAgICAgICAgbGV0IGUsXG4gICAgICAgICAgICBuID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMV0gPyBhcmd1bWVudHNbMV0gOiBudWxsO1xuICAgICAgICAgIGlmICh0aGlzLmNhY2hlZFBhdHRlcm5zLmhhcyh0KSkgZSA9IHRoaXMuY2FjaGVkUGF0dGVybnMuZ2V0KHQpO2Vsc2Uge1xuICAgICAgICAgICAgZSA9ICgwLCBzLmdldFNoYWRpbmdQYXR0ZXJuKSh0aGlzLmdldE9iamVjdCh0KSk7XG4gICAgICAgICAgICB0aGlzLmNhY2hlZFBhdHRlcm5zLnNldCh0LCBlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbiAmJiAoZS5tYXRyaXggPSBuKTtcbiAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgfVxuICAgICAgICBzaGFkaW5nRmlsbCh0KSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmNvbnRlbnRWaXNpYmxlKSByZXR1cm47XG4gICAgICAgICAgY29uc3QgZSA9IHRoaXMuY3R4O1xuICAgICAgICAgIHRoaXMuc2F2ZSgpO1xuICAgICAgICAgIGNvbnN0IG4gPSB0aGlzLl9nZXRQYXR0ZXJuKHQpO1xuICAgICAgICAgIGUuZmlsbFN0eWxlID0gbi5nZXRQYXR0ZXJuKGUsIHRoaXMsICgwLCByLmdldEN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlKShlKSwgcy5QYXRoVHlwZS5TSEFESU5HKTtcbiAgICAgICAgICBjb25zdCBhID0gKDAsIHIuZ2V0Q3VycmVudFRyYW5zZm9ybUludmVyc2UpKGUpO1xuICAgICAgICAgIGlmIChhKSB7XG4gICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IHQsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBuXG4gICAgICAgICAgICAgIH0gPSBlLmNhbnZhcyxcbiAgICAgICAgICAgICAgW3IsIHMsIG8sIGxdID0gaS5VdGlsLmdldEF4aWFsQWxpZ25lZEJvdW5kaW5nQm94KFswLCAwLCB0LCBuXSwgYSk7XG4gICAgICAgICAgICB0aGlzLmN0eC5maWxsUmVjdChyLCBzLCBvIC0gciwgbCAtIHMpO1xuICAgICAgICAgIH0gZWxzZSB0aGlzLmN0eC5maWxsUmVjdCgtMWUxMCwgLTFlMTAsIDJlMTAsIDJlMTApO1xuICAgICAgICAgIHRoaXMuY29tcG9zZSh0aGlzLmN1cnJlbnQuZ2V0Q2xpcHBlZFBhdGhCb3VuZGluZ0JveCgpKTtcbiAgICAgICAgICB0aGlzLnJlc3RvcmUoKTtcbiAgICAgICAgfVxuICAgICAgICBiZWdpbklubGluZUltYWdlKCkge1xuICAgICAgICAgICgwLCBpLnVucmVhY2hhYmxlKShcIlNob3VsZCBub3QgY2FsbCBiZWdpbklubGluZUltYWdlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGJlZ2luSW1hZ2VEYXRhKCkge1xuICAgICAgICAgICgwLCBpLnVucmVhY2hhYmxlKShcIlNob3VsZCBub3QgY2FsbCBiZWdpbkltYWdlRGF0YVwiKTtcbiAgICAgICAgfVxuICAgICAgICBwYWludEZvcm1YT2JqZWN0QmVnaW4odCwgZSkge1xuICAgICAgICAgIGlmICh0aGlzLmNvbnRlbnRWaXNpYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnNhdmUoKTtcbiAgICAgICAgICAgIHRoaXMuYmFzZVRyYW5zZm9ybVN0YWNrLnB1c2godGhpcy5iYXNlVHJhbnNmb3JtKTtcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkodCkgJiYgNiA9PT0gdC5sZW5ndGggJiYgdGhpcy50cmFuc2Zvcm0oLi4udCk7XG4gICAgICAgICAgICB0aGlzLmJhc2VUcmFuc2Zvcm0gPSAoMCwgci5nZXRDdXJyZW50VHJhbnNmb3JtKSh0aGlzLmN0eCk7XG4gICAgICAgICAgICBpZiAoZSkge1xuICAgICAgICAgICAgICBjb25zdCB0ID0gZVsyXSAtIGVbMF0sXG4gICAgICAgICAgICAgICAgbiA9IGVbM10gLSBlWzFdO1xuICAgICAgICAgICAgICB0aGlzLmN0eC5yZWN0KGVbMF0sIGVbMV0sIHQsIG4pO1xuICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQudXBkYXRlUmVjdE1pbk1heCgoMCwgci5nZXRDdXJyZW50VHJhbnNmb3JtKSh0aGlzLmN0eCksIGUpO1xuICAgICAgICAgICAgICB0aGlzLmNsaXAoKTtcbiAgICAgICAgICAgICAgdGhpcy5lbmRQYXRoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHBhaW50Rm9ybVhPYmplY3RFbmQoKSB7XG4gICAgICAgICAgaWYgKHRoaXMuY29udGVudFZpc2libGUpIHtcbiAgICAgICAgICAgIHRoaXMucmVzdG9yZSgpO1xuICAgICAgICAgICAgdGhpcy5iYXNlVHJhbnNmb3JtID0gdGhpcy5iYXNlVHJhbnNmb3JtU3RhY2sucG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJlZ2luR3JvdXAodCkge1xuICAgICAgICAgIGlmICghdGhpcy5jb250ZW50VmlzaWJsZSkgcmV0dXJuO1xuICAgICAgICAgIHRoaXMuc2F2ZSgpO1xuICAgICAgICAgIGlmICh0aGlzLmluU01hc2tNb2RlKSB7XG4gICAgICAgICAgICB0aGlzLmVuZFNNYXNrTW9kZSgpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgZSA9IHRoaXMuY3R4O1xuICAgICAgICAgIHQuaXNvbGF0ZWQgfHwgKDAsIGkuaW5mbykoXCJUT0RPOiBTdXBwb3J0IG5vbi1pc29sYXRlZCBncm91cHMuXCIpO1xuICAgICAgICAgIHQua25vY2tvdXQgJiYgKDAsIGkud2FybikoXCJLbm9ja291dCBncm91cHMgbm90IHN1cHBvcnRlZC5cIik7XG4gICAgICAgICAgY29uc3QgbiA9ICgwLCByLmdldEN1cnJlbnRUcmFuc2Zvcm0pKGUpO1xuICAgICAgICAgIHQubWF0cml4ICYmIGUudHJhbnNmb3JtKC4uLnQubWF0cml4KTtcbiAgICAgICAgICBpZiAoIXQuYmJveCkgdGhyb3cgbmV3IEVycm9yKFwiQm91bmRpbmcgYm94IGlzIHJlcXVpcmVkLlwiKTtcbiAgICAgICAgICBsZXQgcyA9IGkuVXRpbC5nZXRBeGlhbEFsaWduZWRCb3VuZGluZ0JveCh0LmJib3gsICgwLCByLmdldEN1cnJlbnRUcmFuc2Zvcm0pKGUpKTtcbiAgICAgICAgICBjb25zdCBhID0gWzAsIDAsIGUuY2FudmFzLndpZHRoLCBlLmNhbnZhcy5oZWlnaHRdO1xuICAgICAgICAgIHMgPSBpLlV0aWwuaW50ZXJzZWN0KHMsIGEpIHx8IFswLCAwLCAwLCAwXTtcbiAgICAgICAgICBjb25zdCBsID0gTWF0aC5mbG9vcihzWzBdKSxcbiAgICAgICAgICAgIGMgPSBNYXRoLmZsb29yKHNbMV0pO1xuICAgICAgICAgIGxldCBoID0gTWF0aC5tYXgoTWF0aC5jZWlsKHNbMl0pIC0gbCwgMSksXG4gICAgICAgICAgICBkID0gTWF0aC5tYXgoTWF0aC5jZWlsKHNbM10pIC0gYywgMSksXG4gICAgICAgICAgICB1ID0gMSxcbiAgICAgICAgICAgIHAgPSAxO1xuICAgICAgICAgIGlmIChoID4gbykge1xuICAgICAgICAgICAgdSA9IGggLyBvO1xuICAgICAgICAgICAgaCA9IG87XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChkID4gbykge1xuICAgICAgICAgICAgcCA9IGQgLyBvO1xuICAgICAgICAgICAgZCA9IG87XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY3VycmVudC5zdGFydE5ld1BhdGhBbmRDbGlwQm94KFswLCAwLCBoLCBkXSk7XG4gICAgICAgICAgbGV0IGYgPSBcImdyb3VwQXRcIiArIHRoaXMuZ3JvdXBMZXZlbDtcbiAgICAgICAgICB0LnNtYXNrICYmIChmICs9IFwiX3NtYXNrX1wiICsgdGhpcy5zbWFza0NvdW50ZXIrKyAlIDIpO1xuICAgICAgICAgIGNvbnN0IGcgPSB0aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcyhmLCBoLCBkKSxcbiAgICAgICAgICAgIG0gPSBnLmNvbnRleHQ7XG4gICAgICAgICAgbS5zY2FsZSgxIC8gdSwgMSAvIHApO1xuICAgICAgICAgIG0udHJhbnNsYXRlKC1sLCAtYyk7XG4gICAgICAgICAgbS50cmFuc2Zvcm0oLi4ubik7XG4gICAgICAgICAgaWYgKHQuc21hc2spIHRoaXMuc21hc2tTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIGNhbnZhczogZy5jYW52YXMsXG4gICAgICAgICAgICBjb250ZXh0OiBtLFxuICAgICAgICAgICAgb2Zmc2V0WDogbCxcbiAgICAgICAgICAgIG9mZnNldFk6IGMsXG4gICAgICAgICAgICBzY2FsZVg6IHUsXG4gICAgICAgICAgICBzY2FsZVk6IHAsXG4gICAgICAgICAgICBzdWJ0eXBlOiB0LnNtYXNrLnN1YnR5cGUsXG4gICAgICAgICAgICBiYWNrZHJvcDogdC5zbWFzay5iYWNrZHJvcCxcbiAgICAgICAgICAgIHRyYW5zZmVyTWFwOiB0LnNtYXNrLnRyYW5zZmVyTWFwIHx8IG51bGwsXG4gICAgICAgICAgICBzdGFydFRyYW5zZm9ybUludmVyc2U6IG51bGxcbiAgICAgICAgICB9KTtlbHNlIHtcbiAgICAgICAgICAgIGUuc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgICAgICAgICAgZS50cmFuc2xhdGUobCwgYyk7XG4gICAgICAgICAgICBlLnNjYWxlKHUsIHApO1xuICAgICAgICAgICAgZS5zYXZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvcHlDdHhTdGF0ZShlLCBtKTtcbiAgICAgICAgICB0aGlzLmN0eCA9IG07XG4gICAgICAgICAgdGhpcy5zZXRHU3RhdGUoW1tcIkJNXCIsIFwic291cmNlLW92ZXJcIl0sIFtcImNhXCIsIDFdLCBbXCJDQVwiLCAxXV0pO1xuICAgICAgICAgIHRoaXMuZ3JvdXBTdGFjay5wdXNoKGUpO1xuICAgICAgICAgIHRoaXMuZ3JvdXBMZXZlbCsrO1xuICAgICAgICB9XG4gICAgICAgIGVuZEdyb3VwKHQpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuY29udGVudFZpc2libGUpIHJldHVybjtcbiAgICAgICAgICB0aGlzLmdyb3VwTGV2ZWwtLTtcbiAgICAgICAgICBjb25zdCBlID0gdGhpcy5jdHgsXG4gICAgICAgICAgICBuID0gdGhpcy5ncm91cFN0YWNrLnBvcCgpO1xuICAgICAgICAgIHRoaXMuY3R4ID0gbjtcbiAgICAgICAgICB0aGlzLmN0eC5pbWFnZVNtb290aGluZ0VuYWJsZWQgPSAhMTtcbiAgICAgICAgICBpZiAodC5zbWFzaykge1xuICAgICAgICAgICAgdGhpcy50ZW1wU01hc2sgPSB0aGlzLnNtYXNrU3RhY2sucG9wKCk7XG4gICAgICAgICAgICB0aGlzLnJlc3RvcmUoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuICAgICAgICAgICAgY29uc3QgdCA9ICgwLCByLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHRoaXMuY3R4KTtcbiAgICAgICAgICAgIHRoaXMucmVzdG9yZSgpO1xuICAgICAgICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgICAgICAgdGhpcy5jdHguc2V0VHJhbnNmb3JtKC4uLnQpO1xuICAgICAgICAgICAgY29uc3QgbiA9IGkuVXRpbC5nZXRBeGlhbEFsaWduZWRCb3VuZGluZ0JveChbMCwgMCwgZS5jYW52YXMud2lkdGgsIGUuY2FudmFzLmhlaWdodF0sIHQpO1xuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKGUuY2FudmFzLCAwLCAwKTtcbiAgICAgICAgICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgICAgIHRoaXMuY29tcG9zZShuKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYmVnaW5Bbm5vdGF0aW9uKHQsIGUsIG4sIHMsIGEpIHtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9HdCwgX0d0MikuY2FsbCh0aGlzKTtcbiAgICAgICAgICByZXNldEN0eFRvRGVmYXVsdCh0aGlzLmN0eCk7XG4gICAgICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgICAgIHRoaXMuc2F2ZSgpO1xuICAgICAgICAgIHRoaXMuYmFzZVRyYW5zZm9ybSAmJiB0aGlzLmN0eC5zZXRUcmFuc2Zvcm0oLi4udGhpcy5iYXNlVHJhbnNmb3JtKTtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlKSAmJiA0ID09PSBlLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgcyA9IGVbMl0gLSBlWzBdLFxuICAgICAgICAgICAgICBvID0gZVszXSAtIGVbMV07XG4gICAgICAgICAgICBpZiAoYSAmJiB0aGlzLmFubm90YXRpb25DYW52YXNNYXApIHtcbiAgICAgICAgICAgICAgKG4gPSBuLnNsaWNlKCkpWzRdIC09IGVbMF07XG4gICAgICAgICAgICAgIG5bNV0gLT0gZVsxXTtcbiAgICAgICAgICAgICAgKGUgPSBlLnNsaWNlKCkpWzBdID0gZVsxXSA9IDA7XG4gICAgICAgICAgICAgIGVbMl0gPSBzO1xuICAgICAgICAgICAgICBlWzNdID0gbztcbiAgICAgICAgICAgICAgY29uc3QgW2EsIGxdID0gaS5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKCgwLCByLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHRoaXMuY3R4KSksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgdmlld3BvcnRTY2FsZTogY1xuICAgICAgICAgICAgICAgIH0gPSB0aGlzLFxuICAgICAgICAgICAgICAgIGggPSBNYXRoLmNlaWwocyAqIHRoaXMub3V0cHV0U2NhbGVYICogYyksXG4gICAgICAgICAgICAgICAgZCA9IE1hdGguY2VpbChvICogdGhpcy5vdXRwdXRTY2FsZVkgKiBjKTtcbiAgICAgICAgICAgICAgdGhpcy5hbm5vdGF0aW9uQ2FudmFzID0gdGhpcy5jYW52YXNGYWN0b3J5LmNyZWF0ZShoLCBkKTtcbiAgICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICAgIGNhbnZhczogdSxcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBwXG4gICAgICAgICAgICAgIH0gPSB0aGlzLmFubm90YXRpb25DYW52YXM7XG4gICAgICAgICAgICAgIHRoaXMuYW5ub3RhdGlvbkNhbnZhc01hcC5zZXQodCwgdSk7XG4gICAgICAgICAgICAgIHRoaXMuYW5ub3RhdGlvbkNhbnZhcy5zYXZlZEN0eCA9IHRoaXMuY3R4O1xuICAgICAgICAgICAgICB0aGlzLmN0eCA9IHA7XG4gICAgICAgICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICAgICAgICAgICAgdGhpcy5jdHguc2V0VHJhbnNmb3JtKGEsIDAsIDAsIC1sLCAwLCBvICogbCk7XG4gICAgICAgICAgICAgIHJlc2V0Q3R4VG9EZWZhdWx0KHRoaXMuY3R4KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlc2V0Q3R4VG9EZWZhdWx0KHRoaXMuY3R4KTtcbiAgICAgICAgICAgICAgdGhpcy5jdHgucmVjdChlWzBdLCBlWzFdLCBzLCBvKTtcbiAgICAgICAgICAgICAgdGhpcy5jdHguY2xpcCgpO1xuICAgICAgICAgICAgICB0aGlzLmVuZFBhdGgoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5jdXJyZW50ID0gbmV3IENhbnZhc0V4dHJhU3RhdGUodGhpcy5jdHguY2FudmFzLndpZHRoLCB0aGlzLmN0eC5jYW52YXMuaGVpZ2h0KTtcbiAgICAgICAgICB0aGlzLnRyYW5zZm9ybSguLi5uKTtcbiAgICAgICAgICB0aGlzLnRyYW5zZm9ybSguLi5zKTtcbiAgICAgICAgfVxuICAgICAgICBlbmRBbm5vdGF0aW9uKCkge1xuICAgICAgICAgIGlmICh0aGlzLmFubm90YXRpb25DYW52YXMpIHtcbiAgICAgICAgICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX1Z0LCBfVnQyKS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5jdHggPSB0aGlzLmFubm90YXRpb25DYW52YXMuc2F2ZWRDdHg7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5hbm5vdGF0aW9uQ2FudmFzLnNhdmVkQ3R4O1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuYW5ub3RhdGlvbkNhbnZhcztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcGFpbnRJbWFnZU1hc2tYT2JqZWN0KHQpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuY29udGVudFZpc2libGUpIHJldHVybjtcbiAgICAgICAgICBjb25zdCBlID0gdC5jb3VudDtcbiAgICAgICAgICAodCA9IHRoaXMuZ2V0T2JqZWN0KHQuZGF0YSwgdCkpLmNvdW50ID0gZTtcbiAgICAgICAgICBjb25zdCBuID0gdGhpcy5jdHgsXG4gICAgICAgICAgICBpID0gdGhpcy5wcm9jZXNzaW5nVHlwZTM7XG4gICAgICAgICAgaWYgKGkpIHtcbiAgICAgICAgICAgIHZvaWQgMCA9PT0gaS5jb21waWxlZCAmJiAoaS5jb21waWxlZCA9IGZ1bmN0aW9uIGNvbXBpbGVUeXBlM0dseXBoKHQpIHtcbiAgICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICAgIHdpZHRoOiBlLFxuICAgICAgICAgICAgICAgIGhlaWdodDogblxuICAgICAgICAgICAgICB9ID0gdDtcbiAgICAgICAgICAgICAgaWYgKGUgPiAxZTMgfHwgbiA+IDFlMykgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgIGNvbnN0IGkgPSBuZXcgVWludDhBcnJheShbMCwgMiwgNCwgMCwgMSwgMCwgNSwgNCwgOCwgMTAsIDAsIDgsIDAsIDIsIDEsIDBdKSxcbiAgICAgICAgICAgICAgICByID0gZSArIDE7XG4gICAgICAgICAgICAgIGxldCBzLFxuICAgICAgICAgICAgICAgIGEsXG4gICAgICAgICAgICAgICAgbyxcbiAgICAgICAgICAgICAgICBsID0gbmV3IFVpbnQ4QXJyYXkociAqIChuICsgMSkpO1xuICAgICAgICAgICAgICBjb25zdCBjID0gZSArIDcgJiAtODtcbiAgICAgICAgICAgICAgbGV0IGggPSBuZXcgVWludDhBcnJheShjICogbiksXG4gICAgICAgICAgICAgICAgZCA9IDA7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiB0LmRhdGEpIHtcbiAgICAgICAgICAgICAgICBsZXQgdCA9IDEyODtcbiAgICAgICAgICAgICAgICBmb3IgKDsgdCA+IDA7KSB7XG4gICAgICAgICAgICAgICAgICBoW2QrK10gPSBlICYgdCA/IDAgOiAyNTU7XG4gICAgICAgICAgICAgICAgICB0ID4+PSAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsZXQgdSA9IDA7XG4gICAgICAgICAgICAgIGQgPSAwO1xuICAgICAgICAgICAgICBpZiAoMCAhPT0gaFtkXSkge1xuICAgICAgICAgICAgICAgIGxbMF0gPSAxO1xuICAgICAgICAgICAgICAgICsrdTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBmb3IgKGEgPSAxOyBhIDwgZTsgYSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhbZF0gIT09IGhbZCArIDFdKSB7XG4gICAgICAgICAgICAgICAgICBsW2FdID0gaFtkXSA/IDIgOiAxO1xuICAgICAgICAgICAgICAgICAgKyt1O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkKys7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKDAgIT09IGhbZF0pIHtcbiAgICAgICAgICAgICAgICBsW2FdID0gMjtcbiAgICAgICAgICAgICAgICArK3U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZm9yIChzID0gMTsgcyA8IG47IHMrKykge1xuICAgICAgICAgICAgICAgIGQgPSBzICogYztcbiAgICAgICAgICAgICAgICBvID0gcyAqIHI7XG4gICAgICAgICAgICAgICAgaWYgKGhbZCAtIGNdICE9PSBoW2RdKSB7XG4gICAgICAgICAgICAgICAgICBsW29dID0gaFtkXSA/IDEgOiA4O1xuICAgICAgICAgICAgICAgICAgKyt1O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgdCA9IChoW2RdID8gNCA6IDApICsgKGhbZCAtIGNdID8gOCA6IDApO1xuICAgICAgICAgICAgICAgIGZvciAoYSA9IDE7IGEgPCBlOyBhKyspIHtcbiAgICAgICAgICAgICAgICAgIHQgPSAodCA+PiAyKSArIChoW2QgKyAxXSA/IDQgOiAwKSArIChoW2QgLSBjICsgMV0gPyA4IDogMCk7XG4gICAgICAgICAgICAgICAgICBpZiAoaVt0XSkge1xuICAgICAgICAgICAgICAgICAgICBsW28gKyBhXSA9IGlbdF07XG4gICAgICAgICAgICAgICAgICAgICsrdTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGQrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGhbZCAtIGNdICE9PSBoW2RdKSB7XG4gICAgICAgICAgICAgICAgICBsW28gKyBhXSA9IGhbZF0gPyAyIDogNDtcbiAgICAgICAgICAgICAgICAgICsrdTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHUgPiAxZTMpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGQgPSBjICogKG4gLSAxKTtcbiAgICAgICAgICAgICAgbyA9IHMgKiByO1xuICAgICAgICAgICAgICBpZiAoMCAhPT0gaFtkXSkge1xuICAgICAgICAgICAgICAgIGxbb10gPSA4O1xuICAgICAgICAgICAgICAgICsrdTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBmb3IgKGEgPSAxOyBhIDwgZTsgYSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhbZF0gIT09IGhbZCArIDFdKSB7XG4gICAgICAgICAgICAgICAgICBsW28gKyBhXSA9IGhbZF0gPyA0IDogODtcbiAgICAgICAgICAgICAgICAgICsrdTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZCsrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICgwICE9PSBoW2RdKSB7XG4gICAgICAgICAgICAgICAgbFtvICsgYV0gPSA0O1xuICAgICAgICAgICAgICAgICsrdTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAodSA+IDFlMykgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgIGNvbnN0IHAgPSBuZXcgSW50MzJBcnJheShbMCwgciwgLTEsIDAsIC1yLCAwLCAwLCAwLCAxXSksXG4gICAgICAgICAgICAgICAgZiA9IG5ldyBQYXRoMkQoKTtcbiAgICAgICAgICAgICAgZm9yIChzID0gMDsgdSAmJiBzIDw9IG47IHMrKykge1xuICAgICAgICAgICAgICAgIGxldCB0ID0gcyAqIHI7XG4gICAgICAgICAgICAgICAgY29uc3QgbiA9IHQgKyBlO1xuICAgICAgICAgICAgICAgIGZvciAoOyB0IDwgbiAmJiAhbFt0XTspIHQrKztcbiAgICAgICAgICAgICAgICBpZiAodCA9PT0gbikgY29udGludWU7XG4gICAgICAgICAgICAgICAgZi5tb3ZlVG8odCAlIHIsIHMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGkgPSB0O1xuICAgICAgICAgICAgICAgIGxldCBhID0gbFt0XTtcbiAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBlID0gcFthXTtcbiAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgdCArPSBlO1xuICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoIWxbdF0pO1xuICAgICAgICAgICAgICAgICAgY29uc3QgbiA9IGxbdF07XG4gICAgICAgICAgICAgICAgICBpZiAoNSAhPT0gbiAmJiAxMCAhPT0gbikge1xuICAgICAgICAgICAgICAgICAgICBhID0gbjtcbiAgICAgICAgICAgICAgICAgICAgbFt0XSA9IDA7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhID0gbiAmIDUxICogYSA+PiA0O1xuICAgICAgICAgICAgICAgICAgICBsW3RdICY9IGEgPj4gMiB8IGEgPDwgMjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGYubGluZVRvKHQgJSByLCB0IC8gciB8IDApO1xuICAgICAgICAgICAgICAgICAgbFt0XSB8fCAtLXU7XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAoaSAhPT0gdCk7XG4gICAgICAgICAgICAgICAgLS1zO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGggPSBudWxsO1xuICAgICAgICAgICAgICBsID0gbnVsbDtcbiAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgdC5zYXZlKCk7XG4gICAgICAgICAgICAgICAgdC5zY2FsZSgxIC8gZSwgLTEgLyBuKTtcbiAgICAgICAgICAgICAgICB0LnRyYW5zbGF0ZSgwLCAtbik7XG4gICAgICAgICAgICAgICAgdC5maWxsKGYpO1xuICAgICAgICAgICAgICAgIHQuYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICAgICAgdC5yZXN0b3JlKCk7XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KHQpKTtcbiAgICAgICAgICAgIGlmIChpLmNvbXBpbGVkKSB7XG4gICAgICAgICAgICAgIGkuY29tcGlsZWQobik7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgciA9IHRoaXMuX2NyZWF0ZU1hc2tDYW52YXModCksXG4gICAgICAgICAgICBzID0gci5jYW52YXM7XG4gICAgICAgICAgbi5zYXZlKCk7XG4gICAgICAgICAgbi5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XG4gICAgICAgICAgbi5kcmF3SW1hZ2Uocywgci5vZmZzZXRYLCByLm9mZnNldFkpO1xuICAgICAgICAgIG4ucmVzdG9yZSgpO1xuICAgICAgICAgIHRoaXMuY29tcG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIHBhaW50SW1hZ2VNYXNrWE9iamVjdFJlcGVhdCh0LCBlKSB7XG4gICAgICAgICAgbGV0IG4gPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1syXSA/IGFyZ3VtZW50c1syXSA6IDAsXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbM10gPyBhcmd1bWVudHNbM10gOiAwLFxuICAgICAgICAgICAgYSA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ID8gYXJndW1lbnRzWzRdIDogdm9pZCAwLFxuICAgICAgICAgICAgbyA9IGFyZ3VtZW50cy5sZW5ndGggPiA1ID8gYXJndW1lbnRzWzVdIDogdm9pZCAwO1xuICAgICAgICAgIGlmICghdGhpcy5jb250ZW50VmlzaWJsZSkgcmV0dXJuO1xuICAgICAgICAgIHQgPSB0aGlzLmdldE9iamVjdCh0LmRhdGEsIHQpO1xuICAgICAgICAgIGNvbnN0IGwgPSB0aGlzLmN0eDtcbiAgICAgICAgICBsLnNhdmUoKTtcbiAgICAgICAgICBjb25zdCBjID0gKDAsIHIuZ2V0Q3VycmVudFRyYW5zZm9ybSkobCk7XG4gICAgICAgICAgbC50cmFuc2Zvcm0oZSwgbiwgcywgYSwgMCwgMCk7XG4gICAgICAgICAgY29uc3QgaCA9IHRoaXMuX2NyZWF0ZU1hc2tDYW52YXModCk7XG4gICAgICAgICAgbC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgaC5vZmZzZXRYIC0gY1s0XSwgaC5vZmZzZXRZIC0gY1s1XSk7XG4gICAgICAgICAgZm9yIChsZXQgdCA9IDAsIHIgPSBvLmxlbmd0aDsgdCA8IHI7IHQgKz0gMikge1xuICAgICAgICAgICAgY29uc3QgciA9IGkuVXRpbC50cmFuc2Zvcm0oYywgW2UsIG4sIHMsIGEsIG9bdF0sIG9bdCArIDFdXSksXG4gICAgICAgICAgICAgIFtkLCB1XSA9IGkuVXRpbC5hcHBseVRyYW5zZm9ybShbMCwgMF0sIHIpO1xuICAgICAgICAgICAgbC5kcmF3SW1hZ2UoaC5jYW52YXMsIGQsIHUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsLnJlc3RvcmUoKTtcbiAgICAgICAgICB0aGlzLmNvbXBvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBwYWludEltYWdlTWFza1hPYmplY3RHcm91cCh0KSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmNvbnRlbnRWaXNpYmxlKSByZXR1cm47XG4gICAgICAgICAgY29uc3QgZSA9IHRoaXMuY3R4LFxuICAgICAgICAgICAgbiA9IHRoaXMuY3VycmVudC5maWxsQ29sb3IsXG4gICAgICAgICAgICBpID0gdGhpcy5jdXJyZW50LnBhdHRlcm5GaWxsO1xuICAgICAgICAgIGZvciAoY29uc3QgYSBvZiB0KSB7XG4gICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgZGF0YTogdCxcbiAgICAgICAgICAgICAgICB3aWR0aDogbyxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGwsXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBjXG4gICAgICAgICAgICAgIH0gPSBhLFxuICAgICAgICAgICAgICBoID0gdGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoXCJtYXNrQ2FudmFzXCIsIG8sIGwpLFxuICAgICAgICAgICAgICBkID0gaC5jb250ZXh0O1xuICAgICAgICAgICAgZC5zYXZlKCk7XG4gICAgICAgICAgICBwdXRCaW5hcnlJbWFnZU1hc2soZCwgdGhpcy5nZXRPYmplY3QodCwgYSkpO1xuICAgICAgICAgICAgZC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSBcInNvdXJjZS1pblwiO1xuICAgICAgICAgICAgZC5maWxsU3R5bGUgPSBpID8gbi5nZXRQYXR0ZXJuKGQsIHRoaXMsICgwLCByLmdldEN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlKShlKSwgcy5QYXRoVHlwZS5GSUxMKSA6IG47XG4gICAgICAgICAgICBkLmZpbGxSZWN0KDAsIDAsIG8sIGwpO1xuICAgICAgICAgICAgZC5yZXN0b3JlKCk7XG4gICAgICAgICAgICBlLnNhdmUoKTtcbiAgICAgICAgICAgIGUudHJhbnNmb3JtKC4uLmMpO1xuICAgICAgICAgICAgZS5zY2FsZSgxLCAtMSk7XG4gICAgICAgICAgICBkcmF3SW1hZ2VBdEludGVnZXJDb29yZHMoZSwgaC5jYW52YXMsIDAsIDAsIG8sIGwsIDAsIC0xLCAxLCAxKTtcbiAgICAgICAgICAgIGUucmVzdG9yZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmNvbXBvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBwYWludEltYWdlWE9iamVjdCh0KSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmNvbnRlbnRWaXNpYmxlKSByZXR1cm47XG4gICAgICAgICAgY29uc3QgZSA9IHRoaXMuZ2V0T2JqZWN0KHQpO1xuICAgICAgICAgIGUgPyB0aGlzLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0KGUpIDogKDAsIGkud2FybikoXCJEZXBlbmRlbnQgaW1hZ2UgaXNuJ3QgcmVhZHkgeWV0XCIpO1xuICAgICAgICB9XG4gICAgICAgIHBhaW50SW1hZ2VYT2JqZWN0UmVwZWF0KHQsIGUsIG4sIHIpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuY29udGVudFZpc2libGUpIHJldHVybjtcbiAgICAgICAgICBjb25zdCBzID0gdGhpcy5nZXRPYmplY3QodCk7XG4gICAgICAgICAgaWYgKCFzKSB7XG4gICAgICAgICAgICAoMCwgaS53YXJuKShcIkRlcGVuZGVudCBpbWFnZSBpc24ndCByZWFkeSB5ZXRcIik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGEgPSBzLndpZHRoLFxuICAgICAgICAgICAgbyA9IHMuaGVpZ2h0LFxuICAgICAgICAgICAgbCA9IFtdO1xuICAgICAgICAgIGZvciAobGV0IHQgPSAwLCBpID0gci5sZW5ndGg7IHQgPCBpOyB0ICs9IDIpIGwucHVzaCh7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IFtlLCAwLCAwLCBuLCByW3RdLCByW3QgKyAxXV0sXG4gICAgICAgICAgICB4OiAwLFxuICAgICAgICAgICAgeTogMCxcbiAgICAgICAgICAgIHc6IGEsXG4gICAgICAgICAgICBoOiBvXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5wYWludElubGluZUltYWdlWE9iamVjdEdyb3VwKHMsIGwpO1xuICAgICAgICB9XG4gICAgICAgIGFwcGx5VHJhbnNmZXJNYXBzVG9DYW52YXModCkge1xuICAgICAgICAgIGlmIChcIm5vbmVcIiAhPT0gdGhpcy5jdXJyZW50LnRyYW5zZmVyTWFwcykge1xuICAgICAgICAgICAgdC5maWx0ZXIgPSB0aGlzLmN1cnJlbnQudHJhbnNmZXJNYXBzO1xuICAgICAgICAgICAgdC5kcmF3SW1hZ2UodC5jYW52YXMsIDAsIDApO1xuICAgICAgICAgICAgdC5maWx0ZXIgPSBcIm5vbmVcIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHQuY2FudmFzO1xuICAgICAgICB9XG4gICAgICAgIGFwcGx5VHJhbnNmZXJNYXBzVG9CaXRtYXAodCkge1xuICAgICAgICAgIGlmIChcIm5vbmVcIiA9PT0gdGhpcy5jdXJyZW50LnRyYW5zZmVyTWFwcykgcmV0dXJuIHQuYml0bWFwO1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgYml0bWFwOiBlLFxuICAgICAgICAgICAgICB3aWR0aDogbixcbiAgICAgICAgICAgICAgaGVpZ2h0OiBpXG4gICAgICAgICAgICB9ID0gdCxcbiAgICAgICAgICAgIHIgPSB0aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcyhcImlubGluZUltYWdlXCIsIG4sIGkpLFxuICAgICAgICAgICAgcyA9IHIuY29udGV4dDtcbiAgICAgICAgICBzLmZpbHRlciA9IHRoaXMuY3VycmVudC50cmFuc2Zlck1hcHM7XG4gICAgICAgICAgcy5kcmF3SW1hZ2UoZSwgMCwgMCk7XG4gICAgICAgICAgcy5maWx0ZXIgPSBcIm5vbmVcIjtcbiAgICAgICAgICByZXR1cm4gci5jYW52YXM7XG4gICAgICAgIH1cbiAgICAgICAgcGFpbnRJbmxpbmVJbWFnZVhPYmplY3QodCkge1xuICAgICAgICAgIGlmICghdGhpcy5jb250ZW50VmlzaWJsZSkgcmV0dXJuO1xuICAgICAgICAgIGNvbnN0IGUgPSB0LndpZHRoLFxuICAgICAgICAgICAgbiA9IHQuaGVpZ2h0LFxuICAgICAgICAgICAgcyA9IHRoaXMuY3R4O1xuICAgICAgICAgIHRoaXMuc2F2ZSgpO1xuICAgICAgICAgIGlmICghaS5pc05vZGVKUykge1xuICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICBmaWx0ZXI6IHRcbiAgICAgICAgICAgIH0gPSBzO1xuICAgICAgICAgICAgXCJub25lXCIgIT09IHQgJiYgXCJcIiAhPT0gdCAmJiAocy5maWx0ZXIgPSBcIm5vbmVcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHMuc2NhbGUoMSAvIGUsIC0xIC8gbik7XG4gICAgICAgICAgbGV0IGE7XG4gICAgICAgICAgaWYgKHQuYml0bWFwKSBhID0gdGhpcy5hcHBseVRyYW5zZmVyTWFwc1RvQml0bWFwKHQpO2Vsc2UgaWYgKFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgSFRNTEVsZW1lbnQgJiYgdCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50IHx8ICF0LmRhdGEpIGEgPSB0O2Vsc2Uge1xuICAgICAgICAgICAgY29uc3QgaSA9IHRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKFwiaW5saW5lSW1hZ2VcIiwgZSwgbikuY29udGV4dDtcbiAgICAgICAgICAgIHB1dEJpbmFyeUltYWdlRGF0YShpLCB0KTtcbiAgICAgICAgICAgIGEgPSB0aGlzLmFwcGx5VHJhbnNmZXJNYXBzVG9DYW52YXMoaSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IG8gPSB0aGlzLl9zY2FsZUltYWdlKGEsICgwLCByLmdldEN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlKShzKSk7XG4gICAgICAgICAgcy5pbWFnZVNtb290aGluZ0VuYWJsZWQgPSBnZXRJbWFnZVNtb290aGluZ0VuYWJsZWQoKDAsIHIuZ2V0Q3VycmVudFRyYW5zZm9ybSkocyksIHQuaW50ZXJwb2xhdGUpO1xuICAgICAgICAgIGRyYXdJbWFnZUF0SW50ZWdlckNvb3JkcyhzLCBvLmltZywgMCwgMCwgby5wYWludFdpZHRoLCBvLnBhaW50SGVpZ2h0LCAwLCAtbiwgZSwgbik7XG4gICAgICAgICAgdGhpcy5jb21wb3NlKCk7XG4gICAgICAgICAgdGhpcy5yZXN0b3JlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcGFpbnRJbmxpbmVJbWFnZVhPYmplY3RHcm91cCh0LCBlKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmNvbnRlbnRWaXNpYmxlKSByZXR1cm47XG4gICAgICAgICAgY29uc3QgbiA9IHRoaXMuY3R4O1xuICAgICAgICAgIGxldCBpO1xuICAgICAgICAgIGlmICh0LmJpdG1hcCkgaSA9IHQuYml0bWFwO2Vsc2Uge1xuICAgICAgICAgICAgY29uc3QgZSA9IHQud2lkdGgsXG4gICAgICAgICAgICAgIG4gPSB0LmhlaWdodCxcbiAgICAgICAgICAgICAgciA9IHRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKFwiaW5saW5lSW1hZ2VcIiwgZSwgbikuY29udGV4dDtcbiAgICAgICAgICAgIHB1dEJpbmFyeUltYWdlRGF0YShyLCB0KTtcbiAgICAgICAgICAgIGkgPSB0aGlzLmFwcGx5VHJhbnNmZXJNYXBzVG9DYW52YXMocik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZvciAoY29uc3QgdCBvZiBlKSB7XG4gICAgICAgICAgICBuLnNhdmUoKTtcbiAgICAgICAgICAgIG4udHJhbnNmb3JtKC4uLnQudHJhbnNmb3JtKTtcbiAgICAgICAgICAgIG4uc2NhbGUoMSwgLTEpO1xuICAgICAgICAgICAgZHJhd0ltYWdlQXRJbnRlZ2VyQ29vcmRzKG4sIGksIHQueCwgdC55LCB0LncsIHQuaCwgMCwgLTEsIDEsIDEpO1xuICAgICAgICAgICAgbi5yZXN0b3JlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY29tcG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIHBhaW50U29saWRDb2xvckltYWdlTWFzaygpIHtcbiAgICAgICAgICBpZiAodGhpcy5jb250ZW50VmlzaWJsZSkge1xuICAgICAgICAgICAgdGhpcy5jdHguZmlsbFJlY3QoMCwgMCwgMSwgMSk7XG4gICAgICAgICAgICB0aGlzLmNvbXBvc2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbWFya1BvaW50KHQpIHt9XG4gICAgICAgIG1hcmtQb2ludFByb3BzKHQsIGUpIHt9XG4gICAgICAgIGJlZ2luTWFya2VkQ29udGVudCh0KSB7XG4gICAgICAgICAgdGhpcy5tYXJrZWRDb250ZW50U3RhY2sucHVzaCh7XG4gICAgICAgICAgICB2aXNpYmxlOiAhMFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGJlZ2luTWFya2VkQ29udGVudFByb3BzKHQsIGUpIHtcbiAgICAgICAgICBcIk9DXCIgPT09IHQgPyB0aGlzLm1hcmtlZENvbnRlbnRTdGFjay5wdXNoKHtcbiAgICAgICAgICAgIHZpc2libGU6IHRoaXMub3B0aW9uYWxDb250ZW50Q29uZmlnLmlzVmlzaWJsZShlKVxuICAgICAgICAgIH0pIDogdGhpcy5tYXJrZWRDb250ZW50U3RhY2sucHVzaCh7XG4gICAgICAgICAgICB2aXNpYmxlOiAhMFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuY29udGVudFZpc2libGUgPSB0aGlzLmlzQ29udGVudFZpc2libGUoKTtcbiAgICAgICAgfVxuICAgICAgICBlbmRNYXJrZWRDb250ZW50KCkge1xuICAgICAgICAgIHRoaXMubWFya2VkQ29udGVudFN0YWNrLnBvcCgpO1xuICAgICAgICAgIHRoaXMuY29udGVudFZpc2libGUgPSB0aGlzLmlzQ29udGVudFZpc2libGUoKTtcbiAgICAgICAgfVxuICAgICAgICBiZWdpbkNvbXBhdCgpIHt9XG4gICAgICAgIGVuZENvbXBhdCgpIHt9XG4gICAgICAgIGNvbnN1bWVQYXRoKHQpIHtcbiAgICAgICAgICBjb25zdCBlID0gdGhpcy5jdXJyZW50LmlzRW1wdHlDbGlwKCk7XG4gICAgICAgICAgdGhpcy5wZW5kaW5nQ2xpcCAmJiB0aGlzLmN1cnJlbnQudXBkYXRlQ2xpcEZyb21QYXRoKCk7XG4gICAgICAgICAgdGhpcy5wZW5kaW5nQ2xpcCB8fCB0aGlzLmNvbXBvc2UodCk7XG4gICAgICAgICAgY29uc3QgbiA9IHRoaXMuY3R4O1xuICAgICAgICAgIGlmICh0aGlzLnBlbmRpbmdDbGlwKSB7XG4gICAgICAgICAgICBlIHx8ICh0aGlzLnBlbmRpbmdDbGlwID09PSB1ID8gbi5jbGlwKFwiZXZlbm9kZFwiKSA6IG4uY2xpcCgpKTtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZ0NsaXAgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmN1cnJlbnQuc3RhcnROZXdQYXRoQW5kQ2xpcEJveCh0aGlzLmN1cnJlbnQuY2xpcEJveCk7XG4gICAgICAgICAgbi5iZWdpblBhdGgoKTtcbiAgICAgICAgfVxuICAgICAgICBnZXRTaW5nbGVQaXhlbFdpZHRoKCkge1xuICAgICAgICAgIGlmICghdGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aCkge1xuICAgICAgICAgICAgY29uc3QgdCA9ICgwLCByLmdldEN1cnJlbnRUcmFuc2Zvcm0pKHRoaXMuY3R4KTtcbiAgICAgICAgICAgIGlmICgwID09PSB0WzFdICYmIDAgPT09IHRbMl0pIHRoaXMuX2NhY2hlZEdldFNpbmdsZVBpeGVsV2lkdGggPSAxIC8gTWF0aC5taW4oTWF0aC5hYnModFswXSksIE1hdGguYWJzKHRbM10pKTtlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3QgZSA9IE1hdGguYWJzKHRbMF0gKiB0WzNdIC0gdFsyXSAqIHRbMV0pLFxuICAgICAgICAgICAgICAgIG4gPSBNYXRoLmh5cG90KHRbMF0sIHRbMl0pLFxuICAgICAgICAgICAgICAgIGkgPSBNYXRoLmh5cG90KHRbMV0sIHRbM10pO1xuICAgICAgICAgICAgICB0aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoID0gTWF0aC5tYXgobiwgaSkgLyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aDtcbiAgICAgICAgfVxuICAgICAgICBnZXRTY2FsZUZvclN0cm9raW5nKCkge1xuICAgICAgICAgIGlmICgtMSA9PT0gdGhpcy5fY2FjaGVkU2NhbGVGb3JTdHJva2luZ1swXSkge1xuICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICAgIGxpbmVXaWR0aDogdFxuICAgICAgICAgICAgICB9ID0gdGhpcy5jdXJyZW50LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYTogZSxcbiAgICAgICAgICAgICAgICBiOiBuLFxuICAgICAgICAgICAgICAgIGM6IGksXG4gICAgICAgICAgICAgICAgZDogclxuICAgICAgICAgICAgICB9ID0gdGhpcy5jdHguZ2V0VHJhbnNmb3JtKCk7XG4gICAgICAgICAgICBsZXQgcywgYTtcbiAgICAgICAgICAgIGlmICgwID09PSBuICYmIDAgPT09IGkpIHtcbiAgICAgICAgICAgICAgY29uc3QgbiA9IE1hdGguYWJzKGUpLFxuICAgICAgICAgICAgICAgIGkgPSBNYXRoLmFicyhyKTtcbiAgICAgICAgICAgICAgaWYgKG4gPT09IGkpIHtcbiAgICAgICAgICAgICAgICBpZiAoMCA9PT0gdCkgcyA9IGEgPSAxIC8gbjtlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGUgPSBuICogdDtcbiAgICAgICAgICAgICAgICAgIHMgPSBhID0gZSA8IDEgPyAxIC8gZSA6IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT09IHQpIHtcbiAgICAgICAgICAgICAgICBzID0gMSAvIG47XG4gICAgICAgICAgICAgICAgYSA9IDEgLyBpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGUgPSBuICogdCxcbiAgICAgICAgICAgICAgICAgIHIgPSBpICogdDtcbiAgICAgICAgICAgICAgICBzID0gZSA8IDEgPyAxIC8gZSA6IDE7XG4gICAgICAgICAgICAgICAgYSA9IHIgPCAxID8gMSAvIHIgOiAxO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCBvID0gTWF0aC5hYnMoZSAqIHIgLSBuICogaSksXG4gICAgICAgICAgICAgICAgbCA9IE1hdGguaHlwb3QoZSwgbiksXG4gICAgICAgICAgICAgICAgYyA9IE1hdGguaHlwb3QoaSwgcik7XG4gICAgICAgICAgICAgIGlmICgwID09PSB0KSB7XG4gICAgICAgICAgICAgICAgcyA9IGMgLyBvO1xuICAgICAgICAgICAgICAgIGEgPSBsIC8gbztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlID0gdCAqIG87XG4gICAgICAgICAgICAgICAgcyA9IGMgPiBlID8gYyAvIGUgOiAxO1xuICAgICAgICAgICAgICAgIGEgPSBsID4gZSA/IGwgLyBlIDogMTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fY2FjaGVkU2NhbGVGb3JTdHJva2luZ1swXSA9IHM7XG4gICAgICAgICAgICB0aGlzLl9jYWNoZWRTY2FsZUZvclN0cm9raW5nWzFdID0gYTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlZFNjYWxlRm9yU3Ryb2tpbmc7XG4gICAgICAgIH1cbiAgICAgICAgcmVzY2FsZUFuZFN0cm9rZSh0KSB7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICBjdHg6IGVcbiAgICAgICAgICAgIH0gPSB0aGlzLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBsaW5lV2lkdGg6IG5cbiAgICAgICAgICAgIH0gPSB0aGlzLmN1cnJlbnQsXG4gICAgICAgICAgICBbaSwgcl0gPSB0aGlzLmdldFNjYWxlRm9yU3Ryb2tpbmcoKTtcbiAgICAgICAgICBlLmxpbmVXaWR0aCA9IG4gfHwgMTtcbiAgICAgICAgICBpZiAoMSA9PT0gaSAmJiAxID09PSByKSB7XG4gICAgICAgICAgICBlLnN0cm9rZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBzID0gZS5nZXRMaW5lRGFzaCgpO1xuICAgICAgICAgIHQgJiYgZS5zYXZlKCk7XG4gICAgICAgICAgZS5zY2FsZShpLCByKTtcbiAgICAgICAgICBpZiAocy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCB0ID0gTWF0aC5tYXgoaSwgcik7XG4gICAgICAgICAgICBlLnNldExpbmVEYXNoKHMubWFwKGUgPT4gZSAvIHQpKTtcbiAgICAgICAgICAgIGUubGluZURhc2hPZmZzZXQgLz0gdDtcbiAgICAgICAgICB9XG4gICAgICAgICAgZS5zdHJva2UoKTtcbiAgICAgICAgICB0ICYmIGUucmVzdG9yZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlzQ29udGVudFZpc2libGUoKSB7XG4gICAgICAgICAgZm9yIChsZXQgdCA9IHRoaXMubWFya2VkQ29udGVudFN0YWNrLmxlbmd0aCAtIDE7IHQgPj0gMDsgdC0tKSBpZiAoIXRoaXMubWFya2VkQ29udGVudFN0YWNrW3RdLnZpc2libGUpIHJldHVybiAhMTtcbiAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF9HdDIoKSB7XG4gICAgICAgIGZvciAoOyB0aGlzLnN0YXRlU3RhY2subGVuZ3RoIHx8IHRoaXMuaW5TTWFza01vZGU7KSB0aGlzLnJlc3RvcmUoKTtcbiAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuICAgICAgICBpZiAodGhpcy50cmFuc3BhcmVudENhbnZhcykge1xuICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5jb21wb3NpdGVDdHg7XG4gICAgICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgICAgIHRoaXMuY3R4LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgICAgICAgICB0aGlzLmN0eC5kcmF3SW1hZ2UodGhpcy50cmFuc3BhcmVudENhbnZhcywgMCwgMCk7XG4gICAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuICAgICAgICAgIHRoaXMudHJhbnNwYXJlbnRDYW52YXMgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfVnQyKCkge1xuICAgICAgICBpZiAodGhpcy5wYWdlQ29sb3JzKSB7XG4gICAgICAgICAgY29uc3QgdCA9IHRoaXMuZmlsdGVyRmFjdG9yeS5hZGRIQ01GaWx0ZXIodGhpcy5wYWdlQ29sb3JzLmZvcmVncm91bmQsIHRoaXMucGFnZUNvbG9ycy5iYWNrZ3JvdW5kKTtcbiAgICAgICAgICBpZiAoXCJub25lXCIgIT09IHQpIHtcbiAgICAgICAgICAgIGNvbnN0IGUgPSB0aGlzLmN0eC5maWx0ZXI7XG4gICAgICAgICAgICB0aGlzLmN0eC5maWx0ZXIgPSB0O1xuICAgICAgICAgICAgdGhpcy5jdHguZHJhd0ltYWdlKHRoaXMuY3R4LmNhbnZhcywgMCwgMCk7XG4gICAgICAgICAgICB0aGlzLmN0eC5maWx0ZXIgPSBlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZS5DYW52YXNHcmFwaGljcyA9IENhbnZhc0dyYXBoaWNzO1xuICAgICAgZm9yIChjb25zdCB0IGluIGkuT1BTKSB2b2lkIDAgIT09IENhbnZhc0dyYXBoaWNzLnByb3RvdHlwZVt0XSAmJiAoQ2FudmFzR3JhcGhpY3MucHJvdG90eXBlW2kuT1BTW3RdXSA9IENhbnZhc0dyYXBoaWNzLnByb3RvdHlwZVt0XSk7XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgdmFsdWU6ICEwXG4gICAgICB9KTtcbiAgICAgIGUuVGlsaW5nUGF0dGVybiA9IGUuUGF0aFR5cGUgPSB2b2lkIDA7XG4gICAgICBlLmdldFNoYWRpbmdQYXR0ZXJuID0gZnVuY3Rpb24gZ2V0U2hhZGluZ1BhdHRlcm4odCkge1xuICAgICAgICBzd2l0Y2ggKHRbMF0pIHtcbiAgICAgICAgICBjYXNlIFwiUmFkaWFsQXhpYWxcIjpcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmFkaWFsQXhpYWxTaGFkaW5nUGF0dGVybih0KTtcbiAgICAgICAgICBjYXNlIFwiTWVzaFwiOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBNZXNoU2hhZGluZ1BhdHRlcm4odCk7XG4gICAgICAgICAgY2FzZSBcIkR1bW15XCI6XG4gICAgICAgICAgICByZXR1cm4gbmV3IER1bW15U2hhZGluZ1BhdHRlcm4oKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIElSIHR5cGU6IFwiLmNvbmNhdCh0WzBdKSk7XG4gICAgICB9O1xuICAgICAgbigyKTtcbiAgICAgIHZhciBpID0gbigxKSxcbiAgICAgICAgciA9IG4oMTY3KTtcbiAgICAgIGNvbnN0IHMgPSB7XG4gICAgICAgIEZJTEw6IFwiRmlsbFwiLFxuICAgICAgICBTVFJPS0U6IFwiU3Ryb2tlXCIsXG4gICAgICAgIFNIQURJTkc6IFwiU2hhZGluZ1wiXG4gICAgICB9O1xuICAgICAgZS5QYXRoVHlwZSA9IHM7XG4gICAgICBmdW5jdGlvbiBhcHBseUJvdW5kaW5nQm94KHQsIGUpIHtcbiAgICAgICAgaWYgKCFlKSByZXR1cm47XG4gICAgICAgIGNvbnN0IG4gPSBlWzJdIC0gZVswXSxcbiAgICAgICAgICBpID0gZVszXSAtIGVbMV0sXG4gICAgICAgICAgciA9IG5ldyBQYXRoMkQoKTtcbiAgICAgICAgci5yZWN0KGVbMF0sIGVbMV0sIG4sIGkpO1xuICAgICAgICB0LmNsaXAocik7XG4gICAgICB9XG4gICAgICBjbGFzcyBCYXNlU2hhZGluZ1BhdHRlcm4ge1xuICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICB0aGlzLmNvbnN0cnVjdG9yID09PSBCYXNlU2hhZGluZ1BhdHRlcm4gJiYgKDAsIGkudW5yZWFjaGFibGUpKFwiQ2Fubm90IGluaXRpYWxpemUgQmFzZVNoYWRpbmdQYXR0ZXJuLlwiKTtcbiAgICAgICAgfVxuICAgICAgICBnZXRQYXR0ZXJuKCkge1xuICAgICAgICAgICgwLCBpLnVucmVhY2hhYmxlKShcIkFic3RyYWN0IG1ldGhvZCBgZ2V0UGF0dGVybmAgY2FsbGVkLlwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2xhc3MgUmFkaWFsQXhpYWxTaGFkaW5nUGF0dGVybiBleHRlbmRzIEJhc2VTaGFkaW5nUGF0dGVybiB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHQpIHtcbiAgICAgICAgICBzdXBlcigpO1xuICAgICAgICAgIHRoaXMuX3R5cGUgPSB0WzFdO1xuICAgICAgICAgIHRoaXMuX2Jib3ggPSB0WzJdO1xuICAgICAgICAgIHRoaXMuX2NvbG9yU3RvcHMgPSB0WzNdO1xuICAgICAgICAgIHRoaXMuX3AwID0gdFs0XTtcbiAgICAgICAgICB0aGlzLl9wMSA9IHRbNV07XG4gICAgICAgICAgdGhpcy5fcjAgPSB0WzZdO1xuICAgICAgICAgIHRoaXMuX3IxID0gdFs3XTtcbiAgICAgICAgICB0aGlzLm1hdHJpeCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgX2NyZWF0ZUdyYWRpZW50KHQpIHtcbiAgICAgICAgICBsZXQgZTtcbiAgICAgICAgICBcImF4aWFsXCIgPT09IHRoaXMuX3R5cGUgPyBlID0gdC5jcmVhdGVMaW5lYXJHcmFkaWVudCh0aGlzLl9wMFswXSwgdGhpcy5fcDBbMV0sIHRoaXMuX3AxWzBdLCB0aGlzLl9wMVsxXSkgOiBcInJhZGlhbFwiID09PSB0aGlzLl90eXBlICYmIChlID0gdC5jcmVhdGVSYWRpYWxHcmFkaWVudCh0aGlzLl9wMFswXSwgdGhpcy5fcDBbMV0sIHRoaXMuX3IwLCB0aGlzLl9wMVswXSwgdGhpcy5fcDFbMV0sIHRoaXMuX3IxKSk7XG4gICAgICAgICAgZm9yIChjb25zdCB0IG9mIHRoaXMuX2NvbG9yU3RvcHMpIGUuYWRkQ29sb3JTdG9wKHRbMF0sIHRbMV0pO1xuICAgICAgICAgIHJldHVybiBlO1xuICAgICAgICB9XG4gICAgICAgIGdldFBhdHRlcm4odCwgZSwgbiwgYSkge1xuICAgICAgICAgIGxldCBvO1xuICAgICAgICAgIGlmIChhID09PSBzLlNUUk9LRSB8fCBhID09PSBzLkZJTEwpIHtcbiAgICAgICAgICAgIGNvbnN0IHMgPSBlLmN1cnJlbnQuZ2V0Q2xpcHBlZFBhdGhCb3VuZGluZ0JveChhLCAoMCwgci5nZXRDdXJyZW50VHJhbnNmb3JtKSh0KSkgfHwgWzAsIDAsIDAsIDBdLFxuICAgICAgICAgICAgICBsID0gTWF0aC5jZWlsKHNbMl0gLSBzWzBdKSB8fCAxLFxuICAgICAgICAgICAgICBjID0gTWF0aC5jZWlsKHNbM10gLSBzWzFdKSB8fCAxLFxuICAgICAgICAgICAgICBoID0gZS5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoXCJwYXR0ZXJuXCIsIGwsIGMsICEwKSxcbiAgICAgICAgICAgICAgZCA9IGguY29udGV4dDtcbiAgICAgICAgICAgIGQuY2xlYXJSZWN0KDAsIDAsIGQuY2FudmFzLndpZHRoLCBkLmNhbnZhcy5oZWlnaHQpO1xuICAgICAgICAgICAgZC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgIGQucmVjdCgwLCAwLCBkLmNhbnZhcy53aWR0aCwgZC5jYW52YXMuaGVpZ2h0KTtcbiAgICAgICAgICAgIGQudHJhbnNsYXRlKC1zWzBdLCAtc1sxXSk7XG4gICAgICAgICAgICBuID0gaS5VdGlsLnRyYW5zZm9ybShuLCBbMSwgMCwgMCwgMSwgc1swXSwgc1sxXV0pO1xuICAgICAgICAgICAgZC50cmFuc2Zvcm0oLi4uZS5iYXNlVHJhbnNmb3JtKTtcbiAgICAgICAgICAgIHRoaXMubWF0cml4ICYmIGQudHJhbnNmb3JtKC4uLnRoaXMubWF0cml4KTtcbiAgICAgICAgICAgIGFwcGx5Qm91bmRpbmdCb3goZCwgdGhpcy5fYmJveCk7XG4gICAgICAgICAgICBkLmZpbGxTdHlsZSA9IHRoaXMuX2NyZWF0ZUdyYWRpZW50KGQpO1xuICAgICAgICAgICAgZC5maWxsKCk7XG4gICAgICAgICAgICBvID0gdC5jcmVhdGVQYXR0ZXJuKGguY2FudmFzLCBcIm5vLXJlcGVhdFwiKTtcbiAgICAgICAgICAgIGNvbnN0IHUgPSBuZXcgRE9NTWF0cml4KG4pO1xuICAgICAgICAgICAgby5zZXRUcmFuc2Zvcm0odSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFwcGx5Qm91bmRpbmdCb3godCwgdGhpcy5fYmJveCk7XG4gICAgICAgICAgICBvID0gdGhpcy5fY3JlYXRlR3JhZGllbnQodCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBkcmF3VHJpYW5nbGUodCwgZSwgbiwgaSwgciwgcywgYSwgbykge1xuICAgICAgICBjb25zdCBsID0gZS5jb29yZHMsXG4gICAgICAgICAgYyA9IGUuY29sb3JzLFxuICAgICAgICAgIGggPSB0LmRhdGEsXG4gICAgICAgICAgZCA9IDQgKiB0LndpZHRoO1xuICAgICAgICBsZXQgdTtcbiAgICAgICAgaWYgKGxbbiArIDFdID4gbFtpICsgMV0pIHtcbiAgICAgICAgICB1ID0gbjtcbiAgICAgICAgICBuID0gaTtcbiAgICAgICAgICBpID0gdTtcbiAgICAgICAgICB1ID0gcztcbiAgICAgICAgICBzID0gYTtcbiAgICAgICAgICBhID0gdTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobFtpICsgMV0gPiBsW3IgKyAxXSkge1xuICAgICAgICAgIHUgPSBpO1xuICAgICAgICAgIGkgPSByO1xuICAgICAgICAgIHIgPSB1O1xuICAgICAgICAgIHUgPSBhO1xuICAgICAgICAgIGEgPSBvO1xuICAgICAgICAgIG8gPSB1O1xuICAgICAgICB9XG4gICAgICAgIGlmIChsW24gKyAxXSA+IGxbaSArIDFdKSB7XG4gICAgICAgICAgdSA9IG47XG4gICAgICAgICAgbiA9IGk7XG4gICAgICAgICAgaSA9IHU7XG4gICAgICAgICAgdSA9IHM7XG4gICAgICAgICAgcyA9IGE7XG4gICAgICAgICAgYSA9IHU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcCA9IChsW25dICsgZS5vZmZzZXRYKSAqIGUuc2NhbGVYLFxuICAgICAgICAgIGYgPSAobFtuICsgMV0gKyBlLm9mZnNldFkpICogZS5zY2FsZVksXG4gICAgICAgICAgZyA9IChsW2ldICsgZS5vZmZzZXRYKSAqIGUuc2NhbGVYLFxuICAgICAgICAgIG0gPSAobFtpICsgMV0gKyBlLm9mZnNldFkpICogZS5zY2FsZVksXG4gICAgICAgICAgYiA9IChsW3JdICsgZS5vZmZzZXRYKSAqIGUuc2NhbGVYLFxuICAgICAgICAgIHYgPSAobFtyICsgMV0gKyBlLm9mZnNldFkpICogZS5zY2FsZVk7XG4gICAgICAgIGlmIChmID49IHYpIHJldHVybjtcbiAgICAgICAgY29uc3QgeSA9IGNbc10sXG4gICAgICAgICAgQSA9IGNbcyArIDFdLFxuICAgICAgICAgIF8gPSBjW3MgKyAyXSxcbiAgICAgICAgICBTID0gY1thXSxcbiAgICAgICAgICBFID0gY1thICsgMV0sXG4gICAgICAgICAgeCA9IGNbYSArIDJdLFxuICAgICAgICAgIHcgPSBjW29dLFxuICAgICAgICAgIEMgPSBjW28gKyAxXSxcbiAgICAgICAgICBUID0gY1tvICsgMl0sXG4gICAgICAgICAgUCA9IE1hdGgucm91bmQoZiksXG4gICAgICAgICAgayA9IE1hdGgucm91bmQodik7XG4gICAgICAgIGxldCBNLCBSLCBJLCBELCBPLCBMLCBOLCBCO1xuICAgICAgICBmb3IgKGxldCB0ID0gUDsgdCA8PSBrOyB0KyspIHtcbiAgICAgICAgICBpZiAodCA8IG0pIHtcbiAgICAgICAgICAgIGNvbnN0IGUgPSB0IDwgZiA/IDAgOiAoZiAtIHQpIC8gKGYgLSBtKTtcbiAgICAgICAgICAgIE0gPSBwIC0gKHAgLSBnKSAqIGU7XG4gICAgICAgICAgICBSID0geSAtICh5IC0gUykgKiBlO1xuICAgICAgICAgICAgSSA9IEEgLSAoQSAtIEUpICogZTtcbiAgICAgICAgICAgIEQgPSBfIC0gKF8gLSB4KSAqIGU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBlO1xuICAgICAgICAgICAgZSA9IHQgPiB2ID8gMSA6IG0gPT09IHYgPyAwIDogKG0gLSB0KSAvIChtIC0gdik7XG4gICAgICAgICAgICBNID0gZyAtIChnIC0gYikgKiBlO1xuICAgICAgICAgICAgUiA9IFMgLSAoUyAtIHcpICogZTtcbiAgICAgICAgICAgIEkgPSBFIC0gKEUgLSBDKSAqIGU7XG4gICAgICAgICAgICBEID0geCAtICh4IC0gVCkgKiBlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgZTtcbiAgICAgICAgICBlID0gdCA8IGYgPyAwIDogdCA+IHYgPyAxIDogKGYgLSB0KSAvIChmIC0gdik7XG4gICAgICAgICAgTyA9IHAgLSAocCAtIGIpICogZTtcbiAgICAgICAgICBMID0geSAtICh5IC0gdykgKiBlO1xuICAgICAgICAgIE4gPSBBIC0gKEEgLSBDKSAqIGU7XG4gICAgICAgICAgQiA9IF8gLSAoXyAtIFQpICogZTtcbiAgICAgICAgICBjb25zdCBuID0gTWF0aC5yb3VuZChNYXRoLm1pbihNLCBPKSksXG4gICAgICAgICAgICBpID0gTWF0aC5yb3VuZChNYXRoLm1heChNLCBPKSk7XG4gICAgICAgICAgbGV0IHIgPSBkICogdCArIDQgKiBuO1xuICAgICAgICAgIGZvciAobGV0IHQgPSBuOyB0IDw9IGk7IHQrKykge1xuICAgICAgICAgICAgZSA9IChNIC0gdCkgLyAoTSAtIE8pO1xuICAgICAgICAgICAgZSA8IDAgPyBlID0gMCA6IGUgPiAxICYmIChlID0gMSk7XG4gICAgICAgICAgICBoW3IrK10gPSBSIC0gKFIgLSBMKSAqIGUgfCAwO1xuICAgICAgICAgICAgaFtyKytdID0gSSAtIChJIC0gTikgKiBlIHwgMDtcbiAgICAgICAgICAgIGhbcisrXSA9IEQgLSAoRCAtIEIpICogZSB8IDA7XG4gICAgICAgICAgICBoW3IrK10gPSAyNTU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBkcmF3RmlndXJlKHQsIGUsIG4pIHtcbiAgICAgICAgY29uc3QgaSA9IGUuY29vcmRzLFxuICAgICAgICAgIHIgPSBlLmNvbG9ycztcbiAgICAgICAgbGV0IHMsIGE7XG4gICAgICAgIHN3aXRjaCAoZS50eXBlKSB7XG4gICAgICAgICAgY2FzZSBcImxhdHRpY2VcIjpcbiAgICAgICAgICAgIGNvbnN0IG8gPSBlLnZlcnRpY2VzUGVyUm93LFxuICAgICAgICAgICAgICBsID0gTWF0aC5mbG9vcihpLmxlbmd0aCAvIG8pIC0gMSxcbiAgICAgICAgICAgICAgYyA9IG8gLSAxO1xuICAgICAgICAgICAgZm9yIChzID0gMDsgcyA8IGw7IHMrKykge1xuICAgICAgICAgICAgICBsZXQgZSA9IHMgKiBvO1xuICAgICAgICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IGM7IHMrKywgZSsrKSB7XG4gICAgICAgICAgICAgICAgZHJhd1RyaWFuZ2xlKHQsIG4sIGlbZV0sIGlbZSArIDFdLCBpW2UgKyBvXSwgcltlXSwgcltlICsgMV0sIHJbZSArIG9dKTtcbiAgICAgICAgICAgICAgICBkcmF3VHJpYW5nbGUodCwgbiwgaVtlICsgbyArIDFdLCBpW2UgKyAxXSwgaVtlICsgb10sIHJbZSArIG8gKyAxXSwgcltlICsgMV0sIHJbZSArIG9dKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBcInRyaWFuZ2xlc1wiOlxuICAgICAgICAgICAgZm9yIChzID0gMCwgYSA9IGkubGVuZ3RoOyBzIDwgYTsgcyArPSAzKSBkcmF3VHJpYW5nbGUodCwgbiwgaVtzXSwgaVtzICsgMV0sIGlbcyArIDJdLCByW3NdLCByW3MgKyAxXSwgcltzICsgMl0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgZmlndXJlXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjbGFzcyBNZXNoU2hhZGluZ1BhdHRlcm4gZXh0ZW5kcyBCYXNlU2hhZGluZ1BhdHRlcm4ge1xuICAgICAgICBjb25zdHJ1Y3Rvcih0KSB7XG4gICAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgICB0aGlzLl9jb29yZHMgPSB0WzJdO1xuICAgICAgICAgIHRoaXMuX2NvbG9ycyA9IHRbM107XG4gICAgICAgICAgdGhpcy5fZmlndXJlcyA9IHRbNF07XG4gICAgICAgICAgdGhpcy5fYm91bmRzID0gdFs1XTtcbiAgICAgICAgICB0aGlzLl9iYm94ID0gdFs3XTtcbiAgICAgICAgICB0aGlzLl9iYWNrZ3JvdW5kID0gdFs4XTtcbiAgICAgICAgICB0aGlzLm1hdHJpeCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgX2NyZWF0ZU1lc2hDYW52YXModCwgZSwgbikge1xuICAgICAgICAgIGNvbnN0IGkgPSBNYXRoLmZsb29yKHRoaXMuX2JvdW5kc1swXSksXG4gICAgICAgICAgICByID0gTWF0aC5mbG9vcih0aGlzLl9ib3VuZHNbMV0pLFxuICAgICAgICAgICAgcyA9IE1hdGguY2VpbCh0aGlzLl9ib3VuZHNbMl0pIC0gaSxcbiAgICAgICAgICAgIGEgPSBNYXRoLmNlaWwodGhpcy5fYm91bmRzWzNdKSAtIHIsXG4gICAgICAgICAgICBvID0gTWF0aC5taW4oTWF0aC5jZWlsKE1hdGguYWJzKHMgKiB0WzBdICogMS4xKSksIDNlMyksXG4gICAgICAgICAgICBsID0gTWF0aC5taW4oTWF0aC5jZWlsKE1hdGguYWJzKGEgKiB0WzFdICogMS4xKSksIDNlMyksXG4gICAgICAgICAgICBjID0gcyAvIG8sXG4gICAgICAgICAgICBoID0gYSAvIGwsXG4gICAgICAgICAgICBkID0ge1xuICAgICAgICAgICAgICBjb29yZHM6IHRoaXMuX2Nvb3JkcyxcbiAgICAgICAgICAgICAgY29sb3JzOiB0aGlzLl9jb2xvcnMsXG4gICAgICAgICAgICAgIG9mZnNldFg6IC1pLFxuICAgICAgICAgICAgICBvZmZzZXRZOiAtcixcbiAgICAgICAgICAgICAgc2NhbGVYOiAxIC8gYyxcbiAgICAgICAgICAgICAgc2NhbGVZOiAxIC8gaFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHUgPSBvICsgNCxcbiAgICAgICAgICAgIHAgPSBsICsgNCxcbiAgICAgICAgICAgIGYgPSBuLmdldENhbnZhcyhcIm1lc2hcIiwgdSwgcCwgITEpLFxuICAgICAgICAgICAgZyA9IGYuY29udGV4dCxcbiAgICAgICAgICAgIG0gPSBnLmNyZWF0ZUltYWdlRGF0YShvLCBsKTtcbiAgICAgICAgICBpZiAoZSkge1xuICAgICAgICAgICAgY29uc3QgdCA9IG0uZGF0YTtcbiAgICAgICAgICAgIGZvciAobGV0IG4gPSAwLCBpID0gdC5sZW5ndGg7IG4gPCBpOyBuICs9IDQpIHtcbiAgICAgICAgICAgICAgdFtuXSA9IGVbMF07XG4gICAgICAgICAgICAgIHRbbiArIDFdID0gZVsxXTtcbiAgICAgICAgICAgICAgdFtuICsgMl0gPSBlWzJdO1xuICAgICAgICAgICAgICB0W24gKyAzXSA9IDI1NTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChjb25zdCB0IG9mIHRoaXMuX2ZpZ3VyZXMpIGRyYXdGaWd1cmUobSwgdCwgZCk7XG4gICAgICAgICAgZy5wdXRJbWFnZURhdGEobSwgMiwgMik7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNhbnZhczogZi5jYW52YXMsXG4gICAgICAgICAgICBvZmZzZXRYOiBpIC0gMiAqIGMsXG4gICAgICAgICAgICBvZmZzZXRZOiByIC0gMiAqIGgsXG4gICAgICAgICAgICBzY2FsZVg6IGMsXG4gICAgICAgICAgICBzY2FsZVk6IGhcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGdldFBhdHRlcm4odCwgZSwgbiwgYSkge1xuICAgICAgICAgIGFwcGx5Qm91bmRpbmdCb3godCwgdGhpcy5fYmJveCk7XG4gICAgICAgICAgbGV0IG87XG4gICAgICAgICAgaWYgKGEgPT09IHMuU0hBRElORykgbyA9IGkuVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZSgoMCwgci5nZXRDdXJyZW50VHJhbnNmb3JtKSh0KSk7ZWxzZSB7XG4gICAgICAgICAgICBvID0gaS5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKGUuYmFzZVRyYW5zZm9ybSk7XG4gICAgICAgICAgICBpZiAodGhpcy5tYXRyaXgpIHtcbiAgICAgICAgICAgICAgY29uc3QgdCA9IGkuVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZSh0aGlzLm1hdHJpeCk7XG4gICAgICAgICAgICAgIG8gPSBbb1swXSAqIHRbMF0sIG9bMV0gKiB0WzFdXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgbCA9IHRoaXMuX2NyZWF0ZU1lc2hDYW52YXMobywgYSA9PT0gcy5TSEFESU5HID8gbnVsbCA6IHRoaXMuX2JhY2tncm91bmQsIGUuY2FjaGVkQ2FudmFzZXMpO1xuICAgICAgICAgIGlmIChhICE9PSBzLlNIQURJTkcpIHtcbiAgICAgICAgICAgIHQuc2V0VHJhbnNmb3JtKC4uLmUuYmFzZVRyYW5zZm9ybSk7XG4gICAgICAgICAgICB0aGlzLm1hdHJpeCAmJiB0LnRyYW5zZm9ybSguLi50aGlzLm1hdHJpeCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHQudHJhbnNsYXRlKGwub2Zmc2V0WCwgbC5vZmZzZXRZKTtcbiAgICAgICAgICB0LnNjYWxlKGwuc2NhbGVYLCBsLnNjYWxlWSk7XG4gICAgICAgICAgcmV0dXJuIHQuY3JlYXRlUGF0dGVybihsLmNhbnZhcywgXCJuby1yZXBlYXRcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNsYXNzIER1bW15U2hhZGluZ1BhdHRlcm4gZXh0ZW5kcyBCYXNlU2hhZGluZ1BhdHRlcm4ge1xuICAgICAgICBnZXRQYXR0ZXJuKCkge1xuICAgICAgICAgIHJldHVybiBcImhvdHBpbmtcIjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgYSA9IDEsXG4gICAgICAgIG8gPSAyO1xuICAgICAgY2xhc3MgVGlsaW5nUGF0dGVybiB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHQsIGUsIG4sIGksIHIpIHtcbiAgICAgICAgICB0aGlzLm9wZXJhdG9yTGlzdCA9IHRbMl07XG4gICAgICAgICAgdGhpcy5tYXRyaXggPSB0WzNdIHx8IFsxLCAwLCAwLCAxLCAwLCAwXTtcbiAgICAgICAgICB0aGlzLmJib3ggPSB0WzRdO1xuICAgICAgICAgIHRoaXMueHN0ZXAgPSB0WzVdO1xuICAgICAgICAgIHRoaXMueXN0ZXAgPSB0WzZdO1xuICAgICAgICAgIHRoaXMucGFpbnRUeXBlID0gdFs3XTtcbiAgICAgICAgICB0aGlzLnRpbGluZ1R5cGUgPSB0WzhdO1xuICAgICAgICAgIHRoaXMuY29sb3IgPSBlO1xuICAgICAgICAgIHRoaXMuY3R4ID0gbjtcbiAgICAgICAgICB0aGlzLmNhbnZhc0dyYXBoaWNzRmFjdG9yeSA9IGk7XG4gICAgICAgICAgdGhpcy5iYXNlVHJhbnNmb3JtID0gcjtcbiAgICAgICAgfVxuICAgICAgICBjcmVhdGVQYXR0ZXJuQ2FudmFzKHQpIHtcbiAgICAgICAgICBjb25zdCBlID0gdGhpcy5vcGVyYXRvckxpc3QsXG4gICAgICAgICAgICBuID0gdGhpcy5iYm94LFxuICAgICAgICAgICAgcyA9IHRoaXMueHN0ZXAsXG4gICAgICAgICAgICBhID0gdGhpcy55c3RlcCxcbiAgICAgICAgICAgIG8gPSB0aGlzLnBhaW50VHlwZSxcbiAgICAgICAgICAgIGwgPSB0aGlzLnRpbGluZ1R5cGUsXG4gICAgICAgICAgICBjID0gdGhpcy5jb2xvcixcbiAgICAgICAgICAgIGggPSB0aGlzLmNhbnZhc0dyYXBoaWNzRmFjdG9yeTtcbiAgICAgICAgICAoMCwgaS5pbmZvKShcIlRpbGluZ1R5cGU6IFwiICsgbCk7XG4gICAgICAgICAgY29uc3QgZCA9IG5bMF0sXG4gICAgICAgICAgICB1ID0gblsxXSxcbiAgICAgICAgICAgIHAgPSBuWzJdLFxuICAgICAgICAgICAgZiA9IG5bM10sXG4gICAgICAgICAgICBnID0gaS5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKHRoaXMubWF0cml4KSxcbiAgICAgICAgICAgIG0gPSBpLlV0aWwuc2luZ3VsYXJWYWx1ZURlY29tcG9zZTJkU2NhbGUodGhpcy5iYXNlVHJhbnNmb3JtKSxcbiAgICAgICAgICAgIGIgPSBbZ1swXSAqIG1bMF0sIGdbMV0gKiBtWzFdXSxcbiAgICAgICAgICAgIHYgPSB0aGlzLmdldFNpemVBbmRTY2FsZShzLCB0aGlzLmN0eC5jYW52YXMud2lkdGgsIGJbMF0pLFxuICAgICAgICAgICAgeSA9IHRoaXMuZ2V0U2l6ZUFuZFNjYWxlKGEsIHRoaXMuY3R4LmNhbnZhcy5oZWlnaHQsIGJbMV0pLFxuICAgICAgICAgICAgQSA9IHQuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKFwicGF0dGVyblwiLCB2LnNpemUsIHkuc2l6ZSwgITApLFxuICAgICAgICAgICAgXyA9IEEuY29udGV4dCxcbiAgICAgICAgICAgIFMgPSBoLmNyZWF0ZUNhbnZhc0dyYXBoaWNzKF8pO1xuICAgICAgICAgIFMuZ3JvdXBMZXZlbCA9IHQuZ3JvdXBMZXZlbDtcbiAgICAgICAgICB0aGlzLnNldEZpbGxBbmRTdHJva2VTdHlsZVRvQ29udGV4dChTLCBvLCBjKTtcbiAgICAgICAgICBsZXQgRSA9IGQsXG4gICAgICAgICAgICB4ID0gdSxcbiAgICAgICAgICAgIHcgPSBwLFxuICAgICAgICAgICAgQyA9IGY7XG4gICAgICAgICAgaWYgKGQgPCAwKSB7XG4gICAgICAgICAgICBFID0gMDtcbiAgICAgICAgICAgIHcgKz0gTWF0aC5hYnMoZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1IDwgMCkge1xuICAgICAgICAgICAgeCA9IDA7XG4gICAgICAgICAgICBDICs9IE1hdGguYWJzKHUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfLnRyYW5zbGF0ZSgtdi5zY2FsZSAqIEUsIC15LnNjYWxlICogeCk7XG4gICAgICAgICAgUy50cmFuc2Zvcm0odi5zY2FsZSwgMCwgMCwgeS5zY2FsZSwgMCwgMCk7XG4gICAgICAgICAgXy5zYXZlKCk7XG4gICAgICAgICAgdGhpcy5jbGlwQmJveChTLCBFLCB4LCB3LCBDKTtcbiAgICAgICAgICBTLmJhc2VUcmFuc2Zvcm0gPSAoMCwgci5nZXRDdXJyZW50VHJhbnNmb3JtKShTLmN0eCk7XG4gICAgICAgICAgUy5leGVjdXRlT3BlcmF0b3JMaXN0KGUpO1xuICAgICAgICAgIFMuZW5kRHJhd2luZygpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjYW52YXM6IEEuY2FudmFzLFxuICAgICAgICAgICAgc2NhbGVYOiB2LnNjYWxlLFxuICAgICAgICAgICAgc2NhbGVZOiB5LnNjYWxlLFxuICAgICAgICAgICAgb2Zmc2V0WDogRSxcbiAgICAgICAgICAgIG9mZnNldFk6IHhcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGdldFNpemVBbmRTY2FsZSh0LCBlLCBuKSB7XG4gICAgICAgICAgdCA9IE1hdGguYWJzKHQpO1xuICAgICAgICAgIGNvbnN0IGkgPSBNYXRoLm1heChUaWxpbmdQYXR0ZXJuLk1BWF9QQVRURVJOX1NJWkUsIGUpO1xuICAgICAgICAgIGxldCByID0gTWF0aC5jZWlsKHQgKiBuKTtcbiAgICAgICAgICByID49IGkgPyByID0gaSA6IG4gPSByIC8gdDtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2NhbGU6IG4sXG4gICAgICAgICAgICBzaXplOiByXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjbGlwQmJveCh0LCBlLCBuLCBpLCBzKSB7XG4gICAgICAgICAgY29uc3QgYSA9IGkgLSBlLFxuICAgICAgICAgICAgbyA9IHMgLSBuO1xuICAgICAgICAgIHQuY3R4LnJlY3QoZSwgbiwgYSwgbyk7XG4gICAgICAgICAgdC5jdXJyZW50LnVwZGF0ZVJlY3RNaW5NYXgoKDAsIHIuZ2V0Q3VycmVudFRyYW5zZm9ybSkodC5jdHgpLCBbZSwgbiwgaSwgc10pO1xuICAgICAgICAgIHQuY2xpcCgpO1xuICAgICAgICAgIHQuZW5kUGF0aCgpO1xuICAgICAgICB9XG4gICAgICAgIHNldEZpbGxBbmRTdHJva2VTdHlsZVRvQ29udGV4dCh0LCBlLCBuKSB7XG4gICAgICAgICAgY29uc3QgciA9IHQuY3R4LFxuICAgICAgICAgICAgcyA9IHQuY3VycmVudDtcbiAgICAgICAgICBzd2l0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNhc2UgYTpcbiAgICAgICAgICAgICAgY29uc3QgdCA9IHRoaXMuY3R4O1xuICAgICAgICAgICAgICByLmZpbGxTdHlsZSA9IHQuZmlsbFN0eWxlO1xuICAgICAgICAgICAgICByLnN0cm9rZVN0eWxlID0gdC5zdHJva2VTdHlsZTtcbiAgICAgICAgICAgICAgcy5maWxsQ29sb3IgPSB0LmZpbGxTdHlsZTtcbiAgICAgICAgICAgICAgcy5zdHJva2VDb2xvciA9IHQuc3Ryb2tlU3R5bGU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBvOlxuICAgICAgICAgICAgICBjb25zdCBsID0gaS5VdGlsLm1ha2VIZXhDb2xvcihuWzBdLCBuWzFdLCBuWzJdKTtcbiAgICAgICAgICAgICAgci5maWxsU3R5bGUgPSBsO1xuICAgICAgICAgICAgICByLnN0cm9rZVN0eWxlID0gbDtcbiAgICAgICAgICAgICAgcy5maWxsQ29sb3IgPSBsO1xuICAgICAgICAgICAgICBzLnN0cm9rZUNvbG9yID0gbDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcihcIlVuc3VwcG9ydGVkIHBhaW50IHR5cGU6IFwiLmNvbmNhdChlKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGdldFBhdHRlcm4odCwgZSwgbiwgcikge1xuICAgICAgICAgIGxldCBhID0gbjtcbiAgICAgICAgICBpZiAociAhPT0gcy5TSEFESU5HKSB7XG4gICAgICAgICAgICBhID0gaS5VdGlsLnRyYW5zZm9ybShhLCBlLmJhc2VUcmFuc2Zvcm0pO1xuICAgICAgICAgICAgdGhpcy5tYXRyaXggJiYgKGEgPSBpLlV0aWwudHJhbnNmb3JtKGEsIHRoaXMubWF0cml4KSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IG8gPSB0aGlzLmNyZWF0ZVBhdHRlcm5DYW52YXMoZSk7XG4gICAgICAgICAgbGV0IGwgPSBuZXcgRE9NTWF0cml4KGEpO1xuICAgICAgICAgIGwgPSBsLnRyYW5zbGF0ZShvLm9mZnNldFgsIG8ub2Zmc2V0WSk7XG4gICAgICAgICAgbCA9IGwuc2NhbGUoMSAvIG8uc2NhbGVYLCAxIC8gby5zY2FsZVkpO1xuICAgICAgICAgIGNvbnN0IGMgPSB0LmNyZWF0ZVBhdHRlcm4oby5jYW52YXMsIFwicmVwZWF0XCIpO1xuICAgICAgICAgIGMuc2V0VHJhbnNmb3JtKGwpO1xuICAgICAgICAgIHJldHVybiBjO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBfZGVmaW5lUHJvcGVydHkoVGlsaW5nUGF0dGVybiwgXCJNQVhfUEFUVEVSTl9TSVpFXCIsIDNlMyk7XG4gICAgICBlLlRpbGluZ1BhdHRlcm4gPSBUaWxpbmdQYXR0ZXJuO1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgIHZhbHVlOiAhMFxuICAgICAgfSk7XG4gICAgICBlLmNvbnZlcnRCbGFja0FuZFdoaXRlVG9SR0JBID0gY29udmVydEJsYWNrQW5kV2hpdGVUb1JHQkE7XG4gICAgICBlLmNvbnZlcnRUb1JHQkEgPSBmdW5jdGlvbiBjb252ZXJ0VG9SR0JBKHQpIHtcbiAgICAgICAgc3dpdGNoICh0LmtpbmQpIHtcbiAgICAgICAgICBjYXNlIGkuSW1hZ2VLaW5kLkdSQVlTQ0FMRV8xQlBQOlxuICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRCbGFja0FuZFdoaXRlVG9SR0JBKHQpO1xuICAgICAgICAgIGNhc2UgaS5JbWFnZUtpbmQuUkdCXzI0QlBQOlxuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNvbnZlcnRSR0JUb1JHQkEodCkge1xuICAgICAgICAgICAgICBsZXQge1xuICAgICAgICAgICAgICAgICAgc3JjOiBlLFxuICAgICAgICAgICAgICAgICAgc3JjUG9zOiBuID0gMCxcbiAgICAgICAgICAgICAgICAgIGRlc3Q6IHIsXG4gICAgICAgICAgICAgICAgICBkZXN0UG9zOiBzID0gMCxcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiBhLFxuICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBvXG4gICAgICAgICAgICAgICAgfSA9IHQsXG4gICAgICAgICAgICAgICAgbCA9IDA7XG4gICAgICAgICAgICAgIGNvbnN0IGMgPSBlLmxlbmd0aCA+PiAyLFxuICAgICAgICAgICAgICAgIGggPSBuZXcgVWludDMyQXJyYXkoZS5idWZmZXIsIG4sIGMpO1xuICAgICAgICAgICAgICBpZiAoaS5GZWF0dXJlVGVzdC5pc0xpdHRsZUVuZGlhbikge1xuICAgICAgICAgICAgICAgIGZvciAoOyBsIDwgYyAtIDI7IGwgKz0gMywgcyArPSA0KSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCB0ID0gaFtsXSxcbiAgICAgICAgICAgICAgICAgICAgZSA9IGhbbCArIDFdLFxuICAgICAgICAgICAgICAgICAgICBuID0gaFtsICsgMl07XG4gICAgICAgICAgICAgICAgICByW3NdID0gNDI3ODE5MDA4MCB8IHQ7XG4gICAgICAgICAgICAgICAgICByW3MgKyAxXSA9IHQgPj4+IDI0IHwgZSA8PCA4IHwgNDI3ODE5MDA4MDtcbiAgICAgICAgICAgICAgICAgIHJbcyArIDJdID0gZSA+Pj4gMTYgfCBuIDw8IDE2IHwgNDI3ODE5MDA4MDtcbiAgICAgICAgICAgICAgICAgIHJbcyArIDNdID0gbiA+Pj4gOCB8IDQyNzgxOTAwODA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAobGV0IHQgPSA0ICogbCwgbiA9IGUubGVuZ3RoOyB0IDwgbjsgdCArPSAzKSByW3MrK10gPSBlW3RdIHwgZVt0ICsgMV0gPDwgOCB8IGVbdCArIDJdIDw8IDE2IHwgNDI3ODE5MDA4MDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKDsgbCA8IGMgLSAyOyBsICs9IDMsIHMgKz0gNCkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgdCA9IGhbbF0sXG4gICAgICAgICAgICAgICAgICAgIGUgPSBoW2wgKyAxXSxcbiAgICAgICAgICAgICAgICAgICAgbiA9IGhbbCArIDJdO1xuICAgICAgICAgICAgICAgICAgcltzXSA9IDI1NSB8IHQ7XG4gICAgICAgICAgICAgICAgICByW3MgKyAxXSA9IHQgPDwgMjQgfCBlID4+PiA4IHwgMjU1O1xuICAgICAgICAgICAgICAgICAgcltzICsgMl0gPSBlIDw8IDE2IHwgbiA+Pj4gMTYgfCAyNTU7XG4gICAgICAgICAgICAgICAgICByW3MgKyAzXSA9IG4gPDwgOCB8IDI1NTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgdCA9IDQgKiBsLCBuID0gZS5sZW5ndGg7IHQgPCBuOyB0ICs9IDMpIHJbcysrXSA9IGVbdF0gPDwgMjQgfCBlW3QgKyAxXSA8PCAxNiB8IGVbdCArIDJdIDw8IDggfCAyNTU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzcmNQb3M6IG4sXG4gICAgICAgICAgICAgICAgZGVzdFBvczogc1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSh0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH07XG4gICAgICBlLmdyYXlUb1JHQkEgPSBmdW5jdGlvbiBncmF5VG9SR0JBKHQsIGUpIHtcbiAgICAgICAgaWYgKGkuRmVhdHVyZVRlc3QuaXNMaXR0bGVFbmRpYW4pIGZvciAobGV0IG4gPSAwLCBpID0gdC5sZW5ndGg7IG4gPCBpOyBuKyspIGVbbl0gPSA2NTc5MyAqIHRbbl0gfCA0Mjc4MTkwMDgwO2Vsc2UgZm9yIChsZXQgbiA9IDAsIGkgPSB0Lmxlbmd0aDsgbiA8IGk7IG4rKykgZVtuXSA9IDE2ODQzMDA4ICogdFtuXSB8IDI1NTtcbiAgICAgIH07XG4gICAgICBuKDkzKTtcbiAgICAgIG4oMTAxKTtcbiAgICAgIG4oMTAyKTtcbiAgICAgIG4oMTA1KTtcbiAgICAgIG4oMTA3KTtcbiAgICAgIG4oMTA5KTtcbiAgICAgIG4oMTEzKTtcbiAgICAgIG4oMTE2KTtcbiAgICAgIG4oMTIzKTtcbiAgICAgIHZhciBpID0gbigxKTtcbiAgICAgIGZ1bmN0aW9uIGNvbnZlcnRCbGFja0FuZFdoaXRlVG9SR0JBKHQpIHtcbiAgICAgICAgbGV0IHtcbiAgICAgICAgICBzcmM6IGUsXG4gICAgICAgICAgc3JjUG9zOiBuID0gMCxcbiAgICAgICAgICBkZXN0OiByLFxuICAgICAgICAgIHdpZHRoOiBzLFxuICAgICAgICAgIGhlaWdodDogYSxcbiAgICAgICAgICBub25CbGFja0NvbG9yOiBvID0gNDI5NDk2NzI5NSxcbiAgICAgICAgICBpbnZlcnNlRGVjb2RlOiBsID0gITFcbiAgICAgICAgfSA9IHQ7XG4gICAgICAgIGNvbnN0IGMgPSBpLkZlYXR1cmVUZXN0LmlzTGl0dGxlRW5kaWFuID8gNDI3ODE5MDA4MCA6IDI1NSxcbiAgICAgICAgICBbaCwgZF0gPSBsID8gW28sIGNdIDogW2MsIG9dLFxuICAgICAgICAgIHUgPSBzID4+IDMsXG4gICAgICAgICAgcCA9IDcgJiBzLFxuICAgICAgICAgIGYgPSBlLmxlbmd0aDtcbiAgICAgICAgciA9IG5ldyBVaW50MzJBcnJheShyLmJ1ZmZlcik7XG4gICAgICAgIGxldCBnID0gMDtcbiAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCBhOyB0KyspIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHQgPSBuICsgdTsgbiA8IHQ7IG4rKykge1xuICAgICAgICAgICAgY29uc3QgdCA9IG4gPCBmID8gZVtuXSA6IDI1NTtcbiAgICAgICAgICAgIHJbZysrXSA9IDEyOCAmIHQgPyBkIDogaDtcbiAgICAgICAgICAgIHJbZysrXSA9IDY0ICYgdCA/IGQgOiBoO1xuICAgICAgICAgICAgcltnKytdID0gMzIgJiB0ID8gZCA6IGg7XG4gICAgICAgICAgICByW2crK10gPSAxNiAmIHQgPyBkIDogaDtcbiAgICAgICAgICAgIHJbZysrXSA9IDggJiB0ID8gZCA6IGg7XG4gICAgICAgICAgICByW2crK10gPSA0ICYgdCA/IGQgOiBoO1xuICAgICAgICAgICAgcltnKytdID0gMiAmIHQgPyBkIDogaDtcbiAgICAgICAgICAgIHJbZysrXSA9IDEgJiB0ID8gZCA6IGg7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgwID09PSBwKSBjb250aW51ZTtcbiAgICAgICAgICBjb25zdCB0ID0gbiA8IGYgPyBlW24rK10gOiAyNTU7XG4gICAgICAgICAgZm9yIChsZXQgZSA9IDA7IGUgPCBwOyBlKyspIHJbZysrXSA9IHQgJiAxIDw8IDcgLSBlID8gZCA6IGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzcmNQb3M6IG4sXG4gICAgICAgICAgZGVzdFBvczogZ1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0sICh0LCBlKSA9PiB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgIHZhbHVlOiAhMFxuICAgICAgfSk7XG4gICAgICBlLkdsb2JhbFdvcmtlck9wdGlvbnMgPSB2b2lkIDA7XG4gICAgICBjb25zdCBuID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIGUuR2xvYmFsV29ya2VyT3B0aW9ucyA9IG47XG4gICAgICBuLndvcmtlclBvcnQgPSBudWxsO1xuICAgICAgbi53b3JrZXJTcmMgPSBcIlwiO1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgICAgdmFyIF9YdCwgXyR0LCBfS3Q7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgdmFsdWU6ICEwXG4gICAgICB9KTtcbiAgICAgIGUuTWVzc2FnZUhhbmRsZXIgPSB2b2lkIDA7XG4gICAgICBuKDIpO1xuICAgICAgdmFyIGkgPSBuKDEpO1xuICAgICAgY29uc3QgciA9IDEsXG4gICAgICAgIHMgPSAyLFxuICAgICAgICBhID0gMSxcbiAgICAgICAgbyA9IDIsXG4gICAgICAgIGwgPSAzLFxuICAgICAgICBjID0gNCxcbiAgICAgICAgaCA9IDUsXG4gICAgICAgIGQgPSA2LFxuICAgICAgICB1ID0gNyxcbiAgICAgICAgcCA9IDg7XG4gICAgICBmdW5jdGlvbiB3cmFwUmVhc29uKHQpIHtcbiAgICAgICAgdCBpbnN0YW5jZW9mIEVycm9yIHx8IFwib2JqZWN0XCIgPT0gdHlwZW9mIHQgJiYgbnVsbCAhPT0gdCB8fCAoMCwgaS51bnJlYWNoYWJsZSkoJ3dyYXBSZWFzb246IEV4cGVjdGVkIFwicmVhc29uXCIgdG8gYmUgYSAocG9zc2libHkgY2xvbmVkKSBFcnJvci4nKTtcbiAgICAgICAgc3dpdGNoICh0Lm5hbWUpIHtcbiAgICAgICAgICBjYXNlIFwiQWJvcnRFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHJldHVybiBuZXcgaS5BYm9ydEV4Y2VwdGlvbih0Lm1lc3NhZ2UpO1xuICAgICAgICAgIGNhc2UgXCJNaXNzaW5nUERGRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICByZXR1cm4gbmV3IGkuTWlzc2luZ1BERkV4Y2VwdGlvbih0Lm1lc3NhZ2UpO1xuICAgICAgICAgIGNhc2UgXCJQYXNzd29yZEV4Y2VwdGlvblwiOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBpLlBhc3N3b3JkRXhjZXB0aW9uKHQubWVzc2FnZSwgdC5jb2RlKTtcbiAgICAgICAgICBjYXNlIFwiVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uXCI6XG4gICAgICAgICAgICByZXR1cm4gbmV3IGkuVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uKHQubWVzc2FnZSwgdC5zdGF0dXMpO1xuICAgICAgICAgIGNhc2UgXCJVbmtub3duRXJyb3JFeGNlcHRpb25cIjpcbiAgICAgICAgICAgIHJldHVybiBuZXcgaS5Vbmtub3duRXJyb3JFeGNlcHRpb24odC5tZXNzYWdlLCB0LmRldGFpbHMpO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gbmV3IGkuVW5rbm93bkVycm9yRXhjZXB0aW9uKHQubWVzc2FnZSwgdC50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZS5NZXNzYWdlSGFuZGxlciA9IChfWHQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKSwgXyR0ID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCksIF9LdCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpLCBjbGFzcyBNZXNzYWdlSGFuZGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKF90MTEsIF9lMTAsIF9uNikge1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLCBfS3QpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLCBfJHQpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLCBfWHQpO1xuICAgICAgICAgIHRoaXMuc291cmNlTmFtZSA9IF90MTE7XG4gICAgICAgICAgdGhpcy50YXJnZXROYW1lID0gX2UxMDtcbiAgICAgICAgICB0aGlzLmNvbU9iaiA9IF9uNjtcbiAgICAgICAgICB0aGlzLmNhbGxiYWNrSWQgPSAxO1xuICAgICAgICAgIHRoaXMuc3RyZWFtSWQgPSAxO1xuICAgICAgICAgIHRoaXMuc3RyZWFtU2lua3MgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIHRoaXMuY2FsbGJhY2tDYXBhYmlsaXRpZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIHRoaXMuYWN0aW9uSGFuZGxlciA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgdGhpcy5fb25Db21PYmpPbk1lc3NhZ2UgPSB0ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGUgPSB0LmRhdGE7XG4gICAgICAgICAgICBpZiAoZS50YXJnZXROYW1lICE9PSB0aGlzLnNvdXJjZU5hbWUpIHJldHVybjtcbiAgICAgICAgICAgIGlmIChlLnN0cmVhbSkge1xuICAgICAgICAgICAgICBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF8kdCwgXyR0MikuY2FsbCh0aGlzLCBlKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGUuY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgY29uc3QgdCA9IGUuY2FsbGJhY2tJZCxcbiAgICAgICAgICAgICAgICBuID0gdGhpcy5jYWxsYmFja0NhcGFiaWxpdGllc1t0XTtcbiAgICAgICAgICAgICAgaWYgKCFuKSB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgcmVzb2x2ZSBjYWxsYmFjayBcIi5jb25jYXQodCkpO1xuICAgICAgICAgICAgICBkZWxldGUgdGhpcy5jYWxsYmFja0NhcGFiaWxpdGllc1t0XTtcbiAgICAgICAgICAgICAgaWYgKGUuY2FsbGJhY2sgPT09IHIpIG4ucmVzb2x2ZShlLmRhdGEpO2Vsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChlLmNhbGxiYWNrICE9PSBzKSB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIGNhbGxiYWNrIGNhc2VcIik7XG4gICAgICAgICAgICAgICAgbi5yZWplY3Qod3JhcFJlYXNvbihlLnJlYXNvbikpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGkgPSB0aGlzLmFjdGlvbkhhbmRsZXJbZS5hY3Rpb25dO1xuICAgICAgICAgICAgaWYgKCFpKSB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGFjdGlvbiBmcm9tIHdvcmtlcjogXCIuY29uY2F0KGUuYWN0aW9uKSk7XG4gICAgICAgICAgICBpZiAoZS5jYWxsYmFja0lkKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHQgPSB0aGlzLnNvdXJjZU5hbWUsXG4gICAgICAgICAgICAgICAgYSA9IGUuc291cmNlTmFtZTtcbiAgICAgICAgICAgICAgbmV3IFByb21pc2UoZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICB0KGkoZS5kYXRhKSk7XG4gICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgICAgICBfbjYucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgICAgc291cmNlTmFtZTogdCxcbiAgICAgICAgICAgICAgICAgIHRhcmdldE5hbWU6IGEsXG4gICAgICAgICAgICAgICAgICBjYWxsYmFjazogcixcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrSWQ6IGUuY2FsbGJhY2tJZCxcbiAgICAgICAgICAgICAgICAgIGRhdGE6IGlcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgICAgICBfbjYucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgICAgc291cmNlTmFtZTogdCxcbiAgICAgICAgICAgICAgICAgIHRhcmdldE5hbWU6IGEsXG4gICAgICAgICAgICAgICAgICBjYWxsYmFjazogcyxcbiAgICAgICAgICAgICAgICAgIGNhbGxiYWNrSWQ6IGUuY2FsbGJhY2tJZCxcbiAgICAgICAgICAgICAgICAgIHJlYXNvbjogd3JhcFJlYXNvbihpKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBlLnN0cmVhbUlkID8gX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfWHQsIF9YdDIpLmNhbGwodGhpcywgZSkgOiBpKGUuZGF0YSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICBfbjYuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5fb25Db21PYmpPbk1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIG9uKHQsIGUpIHtcbiAgICAgICAgICBjb25zdCBuID0gdGhpcy5hY3Rpb25IYW5kbGVyO1xuICAgICAgICAgIGlmIChuW3RdKSB0aHJvdyBuZXcgRXJyb3IoXCJUaGVyZSBpcyBhbHJlYWR5IGFuIGFjdGlvbk5hbWUgY2FsbGVkIFxcXCJcIi5jb25jYXQodCwgXCJcXFwiXCIpKTtcbiAgICAgICAgICBuW3RdID0gZTtcbiAgICAgICAgfVxuICAgICAgICBzZW5kKHQsIGUsIG4pIHtcbiAgICAgICAgICB0aGlzLmNvbU9iai5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICBzb3VyY2VOYW1lOiB0aGlzLnNvdXJjZU5hbWUsXG4gICAgICAgICAgICB0YXJnZXROYW1lOiB0aGlzLnRhcmdldE5hbWUsXG4gICAgICAgICAgICBhY3Rpb246IHQsXG4gICAgICAgICAgICBkYXRhOiBlXG4gICAgICAgICAgfSwgbik7XG4gICAgICAgIH1cbiAgICAgICAgc2VuZFdpdGhQcm9taXNlKHQsIGUsIG4pIHtcbiAgICAgICAgICBjb25zdCByID0gdGhpcy5jYWxsYmFja0lkKyssXG4gICAgICAgICAgICBzID0gbmV3IGkuUHJvbWlzZUNhcGFiaWxpdHkoKTtcbiAgICAgICAgICB0aGlzLmNhbGxiYWNrQ2FwYWJpbGl0aWVzW3JdID0gcztcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5jb21PYmoucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICBzb3VyY2VOYW1lOiB0aGlzLnNvdXJjZU5hbWUsXG4gICAgICAgICAgICAgIHRhcmdldE5hbWU6IHRoaXMudGFyZ2V0TmFtZSxcbiAgICAgICAgICAgICAgYWN0aW9uOiB0LFxuICAgICAgICAgICAgICBjYWxsYmFja0lkOiByLFxuICAgICAgICAgICAgICBkYXRhOiBlXG4gICAgICAgICAgICB9LCBuKTtcbiAgICAgICAgICB9IGNhdGNoICh0KSB7XG4gICAgICAgICAgICBzLnJlamVjdCh0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHMucHJvbWlzZTtcbiAgICAgICAgfVxuICAgICAgICBzZW5kV2l0aFN0cmVhbSh0LCBlLCBuLCByKSB7XG4gICAgICAgICAgY29uc3QgcyA9IHRoaXMuc3RyZWFtSWQrKyxcbiAgICAgICAgICAgIG8gPSB0aGlzLnNvdXJjZU5hbWUsXG4gICAgICAgICAgICBsID0gdGhpcy50YXJnZXROYW1lLFxuICAgICAgICAgICAgYyA9IHRoaXMuY29tT2JqO1xuICAgICAgICAgIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe1xuICAgICAgICAgICAgc3RhcnQ6IG4gPT4ge1xuICAgICAgICAgICAgICBjb25zdCBhID0gbmV3IGkuUHJvbWlzZUNhcGFiaWxpdHkoKTtcbiAgICAgICAgICAgICAgdGhpcy5zdHJlYW1Db250cm9sbGVyc1tzXSA9IHtcbiAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBuLFxuICAgICAgICAgICAgICAgIHN0YXJ0Q2FsbDogYSxcbiAgICAgICAgICAgICAgICBwdWxsQ2FsbDogbnVsbCxcbiAgICAgICAgICAgICAgICBjYW5jZWxDYWxsOiBudWxsLFxuICAgICAgICAgICAgICAgIGlzQ2xvc2VkOiAhMVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBjLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgICAgICBzb3VyY2VOYW1lOiBvLFxuICAgICAgICAgICAgICAgIHRhcmdldE5hbWU6IGwsXG4gICAgICAgICAgICAgICAgYWN0aW9uOiB0LFxuICAgICAgICAgICAgICAgIHN0cmVhbUlkOiBzLFxuICAgICAgICAgICAgICAgIGRhdGE6IGUsXG4gICAgICAgICAgICAgICAgZGVzaXJlZFNpemU6IG4uZGVzaXJlZFNpemVcbiAgICAgICAgICAgICAgfSwgcik7XG4gICAgICAgICAgICAgIHJldHVybiBhLnByb21pc2U7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHVsbDogdCA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGUgPSBuZXcgaS5Qcm9taXNlQ2FwYWJpbGl0eSgpO1xuICAgICAgICAgICAgICB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW3NdLnB1bGxDYWxsID0gZTtcbiAgICAgICAgICAgICAgYy5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICAgICAgc291cmNlTmFtZTogbyxcbiAgICAgICAgICAgICAgICB0YXJnZXROYW1lOiBsLFxuICAgICAgICAgICAgICAgIHN0cmVhbTogZCxcbiAgICAgICAgICAgICAgICBzdHJlYW1JZDogcyxcbiAgICAgICAgICAgICAgICBkZXNpcmVkU2l6ZTogdC5kZXNpcmVkU2l6ZVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuIGUucHJvbWlzZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYW5jZWw6IHQgPT4ge1xuICAgICAgICAgICAgICAoMCwgaS5hc3NlcnQpKHQgaW5zdGFuY2VvZiBFcnJvciwgXCJjYW5jZWwgbXVzdCBoYXZlIGEgdmFsaWQgcmVhc29uXCIpO1xuICAgICAgICAgICAgICBjb25zdCBlID0gbmV3IGkuUHJvbWlzZUNhcGFiaWxpdHkoKTtcbiAgICAgICAgICAgICAgdGhpcy5zdHJlYW1Db250cm9sbGVyc1tzXS5jYW5jZWxDYWxsID0gZTtcbiAgICAgICAgICAgICAgdGhpcy5zdHJlYW1Db250cm9sbGVyc1tzXS5pc0Nsb3NlZCA9ICEwO1xuICAgICAgICAgICAgICBjLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgICAgICBzb3VyY2VOYW1lOiBvLFxuICAgICAgICAgICAgICAgIHRhcmdldE5hbWU6IGwsXG4gICAgICAgICAgICAgICAgc3RyZWFtOiBhLFxuICAgICAgICAgICAgICAgIHN0cmVhbUlkOiBzLFxuICAgICAgICAgICAgICAgIHJlYXNvbjogd3JhcFJlYXNvbih0KVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuIGUucHJvbWlzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBuKTtcbiAgICAgICAgfVxuICAgICAgICBkZXN0cm95KCkge1xuICAgICAgICAgIHRoaXMuY29tT2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuX29uQ29tT2JqT25NZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBmdW5jdGlvbiBfWHQyKHQpIHtcbiAgICAgICAgY29uc3QgZSA9IHQuc3RyZWFtSWQsXG4gICAgICAgICAgbiA9IHRoaXMuc291cmNlTmFtZSxcbiAgICAgICAgICByID0gdC5zb3VyY2VOYW1lLFxuICAgICAgICAgIHMgPSB0aGlzLmNvbU9iaixcbiAgICAgICAgICBhID0gdGhpcyxcbiAgICAgICAgICBvID0gdGhpcy5hY3Rpb25IYW5kbGVyW3QuYWN0aW9uXSxcbiAgICAgICAgICBkID0ge1xuICAgICAgICAgICAgZW5xdWV1ZSh0KSB7XG4gICAgICAgICAgICAgIGxldCBhID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMV0gPyBhcmd1bWVudHNbMV0gOiAxLFxuICAgICAgICAgICAgICAgIG8gPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHZvaWQgMDtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuaXNDYW5jZWxsZWQpIHJldHVybjtcbiAgICAgICAgICAgICAgY29uc3QgbCA9IHRoaXMuZGVzaXJlZFNpemU7XG4gICAgICAgICAgICAgIHRoaXMuZGVzaXJlZFNpemUgLT0gYTtcbiAgICAgICAgICAgICAgaWYgKGwgPiAwICYmIHRoaXMuZGVzaXJlZFNpemUgPD0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2lua0NhcGFiaWxpdHkgPSBuZXcgaS5Qcm9taXNlQ2FwYWJpbGl0eSgpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVhZHkgPSB0aGlzLnNpbmtDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcy5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICAgICAgc291cmNlTmFtZTogbixcbiAgICAgICAgICAgICAgICB0YXJnZXROYW1lOiByLFxuICAgICAgICAgICAgICAgIHN0cmVhbTogYyxcbiAgICAgICAgICAgICAgICBzdHJlYW1JZDogZSxcbiAgICAgICAgICAgICAgICBjaHVuazogdFxuICAgICAgICAgICAgICB9LCBvKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjbG9zZSgpIHtcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzQ2FuY2VsbGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0NhbmNlbGxlZCA9ICEwO1xuICAgICAgICAgICAgICAgIHMucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgICAgc291cmNlTmFtZTogbixcbiAgICAgICAgICAgICAgICAgIHRhcmdldE5hbWU6IHIsXG4gICAgICAgICAgICAgICAgICBzdHJlYW06IGwsXG4gICAgICAgICAgICAgICAgICBzdHJlYW1JZDogZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBhLnN0cmVhbVNpbmtzW2VdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3IodCkge1xuICAgICAgICAgICAgICAoMCwgaS5hc3NlcnQpKHQgaW5zdGFuY2VvZiBFcnJvciwgXCJlcnJvciBtdXN0IGhhdmUgYSB2YWxpZCByZWFzb25cIik7XG4gICAgICAgICAgICAgIGlmICghdGhpcy5pc0NhbmNlbGxlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNDYW5jZWxsZWQgPSAhMDtcbiAgICAgICAgICAgICAgICBzLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgICAgICAgIHNvdXJjZU5hbWU6IG4sXG4gICAgICAgICAgICAgICAgICB0YXJnZXROYW1lOiByLFxuICAgICAgICAgICAgICAgICAgc3RyZWFtOiBoLFxuICAgICAgICAgICAgICAgICAgc3RyZWFtSWQ6IGUsXG4gICAgICAgICAgICAgICAgICByZWFzb246IHdyYXBSZWFzb24odClcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNpbmtDYXBhYmlsaXR5OiBuZXcgaS5Qcm9taXNlQ2FwYWJpbGl0eSgpLFxuICAgICAgICAgICAgb25QdWxsOiBudWxsLFxuICAgICAgICAgICAgb25DYW5jZWw6IG51bGwsXG4gICAgICAgICAgICBpc0NhbmNlbGxlZDogITEsXG4gICAgICAgICAgICBkZXNpcmVkU2l6ZTogdC5kZXNpcmVkU2l6ZSxcbiAgICAgICAgICAgIHJlYWR5OiBudWxsXG4gICAgICAgICAgfTtcbiAgICAgICAgZC5zaW5rQ2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgICAgIGQucmVhZHkgPSBkLnNpbmtDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgIHRoaXMuc3RyZWFtU2lua3NbZV0gPSBkO1xuICAgICAgICBuZXcgUHJvbWlzZShmdW5jdGlvbiAoZSkge1xuICAgICAgICAgIGUobyh0LmRhdGEsIGQpKTtcbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcy5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICBzb3VyY2VOYW1lOiBuLFxuICAgICAgICAgICAgdGFyZ2V0TmFtZTogcixcbiAgICAgICAgICAgIHN0cmVhbTogcCxcbiAgICAgICAgICAgIHN0cmVhbUlkOiBlLFxuICAgICAgICAgICAgc3VjY2VzczogITBcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICBzLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIHNvdXJjZU5hbWU6IG4sXG4gICAgICAgICAgICB0YXJnZXROYW1lOiByLFxuICAgICAgICAgICAgc3RyZWFtOiBwLFxuICAgICAgICAgICAgc3RyZWFtSWQ6IGUsXG4gICAgICAgICAgICByZWFzb246IHdyYXBSZWFzb24odClcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfJHQyKHQpIHtcbiAgICAgICAgY29uc3QgZSA9IHQuc3RyZWFtSWQsXG4gICAgICAgICAgbiA9IHRoaXMuc291cmNlTmFtZSxcbiAgICAgICAgICByID0gdC5zb3VyY2VOYW1lLFxuICAgICAgICAgIHMgPSB0aGlzLmNvbU9iaixcbiAgICAgICAgICBmID0gdGhpcy5zdHJlYW1Db250cm9sbGVyc1tlXSxcbiAgICAgICAgICBnID0gdGhpcy5zdHJlYW1TaW5rc1tlXTtcbiAgICAgICAgc3dpdGNoICh0LnN0cmVhbSkge1xuICAgICAgICAgIGNhc2UgcDpcbiAgICAgICAgICAgIHQuc3VjY2VzcyA/IGYuc3RhcnRDYWxsLnJlc29sdmUoKSA6IGYuc3RhcnRDYWxsLnJlamVjdCh3cmFwUmVhc29uKHQucmVhc29uKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIHU6XG4gICAgICAgICAgICB0LnN1Y2Nlc3MgPyBmLnB1bGxDYWxsLnJlc29sdmUoKSA6IGYucHVsbENhbGwucmVqZWN0KHdyYXBSZWFzb24odC5yZWFzb24pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgZDpcbiAgICAgICAgICAgIGlmICghZykge1xuICAgICAgICAgICAgICBzLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgICAgICBzb3VyY2VOYW1lOiBuLFxuICAgICAgICAgICAgICAgIHRhcmdldE5hbWU6IHIsXG4gICAgICAgICAgICAgICAgc3RyZWFtOiB1LFxuICAgICAgICAgICAgICAgIHN0cmVhbUlkOiBlLFxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6ICEwXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGcuZGVzaXJlZFNpemUgPD0gMCAmJiB0LmRlc2lyZWRTaXplID4gMCAmJiBnLnNpbmtDYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgICAgICAgICAgIGcuZGVzaXJlZFNpemUgPSB0LmRlc2lyZWRTaXplO1xuICAgICAgICAgICAgbmV3IFByb21pc2UoZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgdmFyIF9nJG9uUHVsbDtcbiAgICAgICAgICAgICAgdCgoX2ckb25QdWxsID0gZy5vblB1bGwpID09PSBudWxsIHx8IF9nJG9uUHVsbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2ckb25QdWxsLmNhbGwoZykpO1xuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHMucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgIHNvdXJjZU5hbWU6IG4sXG4gICAgICAgICAgICAgICAgdGFyZ2V0TmFtZTogcixcbiAgICAgICAgICAgICAgICBzdHJlYW06IHUsXG4gICAgICAgICAgICAgICAgc3RyZWFtSWQ6IGUsXG4gICAgICAgICAgICAgICAgc3VjY2VzczogITBcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgICBzLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgICAgICBzb3VyY2VOYW1lOiBuLFxuICAgICAgICAgICAgICAgIHRhcmdldE5hbWU6IHIsXG4gICAgICAgICAgICAgICAgc3RyZWFtOiB1LFxuICAgICAgICAgICAgICAgIHN0cmVhbUlkOiBlLFxuICAgICAgICAgICAgICAgIHJlYXNvbjogd3JhcFJlYXNvbih0KVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBjOlxuICAgICAgICAgICAgKDAsIGkuYXNzZXJ0KShmLCBcImVucXVldWUgc2hvdWxkIGhhdmUgc3RyZWFtIGNvbnRyb2xsZXJcIik7XG4gICAgICAgICAgICBpZiAoZi5pc0Nsb3NlZCkgYnJlYWs7XG4gICAgICAgICAgICBmLmNvbnRyb2xsZXIuZW5xdWV1ZSh0LmNodW5rKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgbDpcbiAgICAgICAgICAgICgwLCBpLmFzc2VydCkoZiwgXCJjbG9zZSBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlclwiKTtcbiAgICAgICAgICAgIGlmIChmLmlzQ2xvc2VkKSBicmVhaztcbiAgICAgICAgICAgIGYuaXNDbG9zZWQgPSAhMDtcbiAgICAgICAgICAgIGYuY29udHJvbGxlci5jbG9zZSgpO1xuICAgICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfS3QsIF9LdDIpLmNhbGwodGhpcywgZiwgZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIGg6XG4gICAgICAgICAgICAoMCwgaS5hc3NlcnQpKGYsIFwiZXJyb3Igc2hvdWxkIGhhdmUgc3RyZWFtIGNvbnRyb2xsZXJcIik7XG4gICAgICAgICAgICBmLmNvbnRyb2xsZXIuZXJyb3Iod3JhcFJlYXNvbih0LnJlYXNvbikpO1xuICAgICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfS3QsIF9LdDIpLmNhbGwodGhpcywgZiwgZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIG86XG4gICAgICAgICAgICB0LnN1Y2Nlc3MgPyBmLmNhbmNlbENhbGwucmVzb2x2ZSgpIDogZi5jYW5jZWxDYWxsLnJlamVjdCh3cmFwUmVhc29uKHQucmVhc29uKSk7XG4gICAgICAgICAgICBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9LdCwgX0t0MikuY2FsbCh0aGlzLCBmLCBlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgYTpcbiAgICAgICAgICAgIGlmICghZykgYnJlYWs7XG4gICAgICAgICAgICBuZXcgUHJvbWlzZShmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICB2YXIgX2ckb25DYW5jZWw7XG4gICAgICAgICAgICAgIGUoKF9nJG9uQ2FuY2VsID0gZy5vbkNhbmNlbCkgPT09IG51bGwgfHwgX2ckb25DYW5jZWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9nJG9uQ2FuY2VsLmNhbGwoZywgd3JhcFJlYXNvbih0LnJlYXNvbikpKTtcbiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBzLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgICAgICBzb3VyY2VOYW1lOiBuLFxuICAgICAgICAgICAgICAgIHRhcmdldE5hbWU6IHIsXG4gICAgICAgICAgICAgICAgc3RyZWFtOiBvLFxuICAgICAgICAgICAgICAgIHN0cmVhbUlkOiBlLFxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6ICEwXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgcy5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICAgICAgc291cmNlTmFtZTogbixcbiAgICAgICAgICAgICAgICB0YXJnZXROYW1lOiByLFxuICAgICAgICAgICAgICAgIHN0cmVhbTogbyxcbiAgICAgICAgICAgICAgICBzdHJlYW1JZDogZSxcbiAgICAgICAgICAgICAgICByZWFzb246IHdyYXBSZWFzb24odClcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGcuc2lua0NhcGFiaWxpdHkucmVqZWN0KHdyYXBSZWFzb24odC5yZWFzb24pKTtcbiAgICAgICAgICAgIGcuaXNDYW5jZWxsZWQgPSAhMDtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnN0cmVhbVNpbmtzW2VdO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuZXhwZWN0ZWQgc3RyZWFtIGNhc2VcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGFzeW5jIGZ1bmN0aW9uIF9LdDIodCwgZSkge1xuICAgICAgICB2YXIgX3Qkc3RhcnRDYWxsLCBfdCRwdWxsQ2FsbCwgX3QkY2FuY2VsQ2FsbDtcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFsoX3Qkc3RhcnRDYWxsID0gdC5zdGFydENhbGwpID09PSBudWxsIHx8IF90JHN0YXJ0Q2FsbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3Qkc3RhcnRDYWxsLnByb21pc2UsIChfdCRwdWxsQ2FsbCA9IHQucHVsbENhbGwpID09PSBudWxsIHx8IF90JHB1bGxDYWxsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdCRwdWxsQ2FsbC5wcm9taXNlLCAoX3QkY2FuY2VsQ2FsbCA9IHQuY2FuY2VsQ2FsbCkgPT09IG51bGwgfHwgX3QkY2FuY2VsQ2FsbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3QkY2FuY2VsQ2FsbC5wcm9taXNlXSk7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW2VdO1xuICAgICAgfVxuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgICAgdmFyIF9ZdCwgX0p0O1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgIHZhbHVlOiAhMFxuICAgICAgfSk7XG4gICAgICBlLk1ldGFkYXRhID0gdm9pZCAwO1xuICAgICAgdmFyIGkgPSBuKDEpO1xuICAgICAgZS5NZXRhZGF0YSA9IChfWXQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKSwgX0p0ID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCksIGNsYXNzIE1ldGFkYXRhIHtcbiAgICAgICAgY29uc3RydWN0b3IodCkge1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9ZdCwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX0p0LCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDBcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBsZXQge1xuICAgICAgICAgICAgcGFyc2VkRGF0YTogZSxcbiAgICAgICAgICAgIHJhd0RhdGE6IG5cbiAgICAgICAgICB9ID0gdDtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1l0LCBlKTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX0p0LCBuKTtcbiAgICAgICAgfVxuICAgICAgICBnZXRSYXcoKSB7XG4gICAgICAgICAgcmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfSnQpO1xuICAgICAgICB9XG4gICAgICAgIGdldCh0KSB7XG4gICAgICAgICAgdmFyIF9jbGFzc1ByaXZhdGVGaWVsZEdldDg7XG4gICAgICAgICAgcmV0dXJuIChfY2xhc3NQcml2YXRlRmllbGRHZXQ4ID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZdCkuZ2V0KHQpKSAhPT0gbnVsbCAmJiBfY2xhc3NQcml2YXRlRmllbGRHZXQ4ICE9PSB2b2lkIDAgPyBfY2xhc3NQcml2YXRlRmllbGRHZXQ4IDogbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBnZXRBbGwoKSB7XG4gICAgICAgICAgcmV0dXJuICgwLCBpLm9iamVjdEZyb21NYXApKF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWXQpKTtcbiAgICAgICAgfVxuICAgICAgICBoYXModCkge1xuICAgICAgICAgIHJldHVybiBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1l0KS5oYXModCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgICAgdmFyIF9adCwgX3RlLCBfZWUsIF9uZSwgX2llO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgIHZhbHVlOiAhMFxuICAgICAgfSk7XG4gICAgICBlLk9wdGlvbmFsQ29udGVudENvbmZpZyA9IHZvaWQgMDtcbiAgICAgIHZhciBpID0gbigxKSxcbiAgICAgICAgciA9IG4oMTY5KTtcbiAgICAgIGNvbnN0IHMgPSBTeW1ib2woXCJJTlRFUk5BTFwiKTtcbiAgICAgIHZhciBfUXQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIGNsYXNzIE9wdGlvbmFsQ29udGVudEdyb3VwIHtcbiAgICAgICAgY29uc3RydWN0b3IodCwgZSkge1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9RdCwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogITBcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLm5hbWUgPSB0O1xuICAgICAgICAgIHRoaXMuaW50ZW50ID0gZTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgdmlzaWJsZSgpIHtcbiAgICAgICAgICByZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9RdCk7XG4gICAgICAgIH1cbiAgICAgICAgX3NldFZpc2libGUodCwgZSkge1xuICAgICAgICAgIHQgIT09IHMgJiYgKDAsIGkudW5yZWFjaGFibGUpKFwiSW50ZXJuYWwgbWV0aG9kIGBfc2V0VmlzaWJsZWAgY2FsbGVkLlwiKTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1F0LCBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZS5PcHRpb25hbENvbnRlbnRDb25maWcgPSAoX1p0ID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCksIF90ZSA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpLCBfZWUgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKSwgX25lID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCksIF9pZSA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpLCBjbGFzcyBPcHRpb25hbENvbnRlbnRDb25maWcge1xuICAgICAgICBjb25zdHJ1Y3RvcihfdDEyKSB7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9pZSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX1p0LCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBudWxsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX3RlLCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBuZXcgTWFwKClcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfZWUsIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfbmUsIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLm5hbWUgPSBudWxsO1xuICAgICAgICAgIHRoaXMuY3JlYXRvciA9IG51bGw7XG4gICAgICAgICAgaWYgKG51bGwgIT09IF90MTIpIHtcbiAgICAgICAgICAgIHRoaXMubmFtZSA9IF90MTIubmFtZTtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRvciA9IF90MTIuY3JlYXRvcjtcbiAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfbmUsIF90MTIub3JkZXIpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIF90MTIuZ3JvdXBzKSBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3RlKS5zZXQoZS5pZCwgbmV3IE9wdGlvbmFsQ29udGVudEdyb3VwKGUubmFtZSwgZS5pbnRlbnQpKTtcbiAgICAgICAgICAgIGlmIChcIk9GRlwiID09PSBfdDEyLmJhc2VTdGF0ZSkgZm9yIChjb25zdCB0IG9mIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfdGUpLnZhbHVlcygpKSB0Ll9zZXRWaXNpYmxlKHMsICExKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiBfdDEyLm9uKSBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3RlKS5nZXQoZSkuX3NldFZpc2libGUocywgITApO1xuICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIF90MTIub2ZmKSBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3RlKS5nZXQoZSkuX3NldFZpc2libGUocywgITEpO1xuICAgICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9lZSwgdGhpcy5nZXRIYXNoKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpc1Zpc2libGUodCkge1xuICAgICAgICAgIGlmICgwID09PSBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3RlKS5zaXplKSByZXR1cm4gITA7XG4gICAgICAgICAgaWYgKCF0KSB7XG4gICAgICAgICAgICAoMCwgaS53YXJuKShcIk9wdGlvbmFsIGNvbnRlbnQgZ3JvdXAgbm90IGRlZmluZWQuXCIpO1xuICAgICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoXCJPQ0dcIiA9PT0gdC50eXBlKSB7XG4gICAgICAgICAgICBpZiAoIV9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfdGUpLmhhcyh0LmlkKSkge1xuICAgICAgICAgICAgICAoMCwgaS53YXJuKShcIk9wdGlvbmFsIGNvbnRlbnQgZ3JvdXAgbm90IGZvdW5kOiBcIi5jb25jYXQodC5pZCkpO1xuICAgICAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF90ZSkuZ2V0KHQuaWQpLnZpc2libGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChcIk9DTURcIiA9PT0gdC50eXBlKSB7XG4gICAgICAgICAgICBpZiAodC5leHByZXNzaW9uKSByZXR1cm4gX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfaWUsIF9pZTIpLmNhbGwodGhpcywgdC5leHByZXNzaW9uKTtcbiAgICAgICAgICAgIGlmICghdC5wb2xpY3kgfHwgXCJBbnlPblwiID09PSB0LnBvbGljeSkge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgdC5pZHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoIV9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfdGUpLmhhcyhlKSkge1xuICAgICAgICAgICAgICAgICAgKDAsIGkud2FybikoXCJPcHRpb25hbCBjb250ZW50IGdyb3VwIG5vdCBmb3VuZDogXCIuY29uY2F0KGUpKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfdGUpLmdldChlKS52aXNpYmxlKSByZXR1cm4gITA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuICExO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFwiQWxsT25cIiA9PT0gdC5wb2xpY3kpIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIHQuaWRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3RlKS5oYXMoZSkpIHtcbiAgICAgICAgICAgICAgICAgICgwLCBpLndhcm4pKFwiT3B0aW9uYWwgY29udGVudCBncm91cCBub3QgZm91bmQ6IFwiLmNvbmNhdChlKSk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF90ZSkuZ2V0KGUpLnZpc2libGUpIHJldHVybiAhMTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXCJBbnlPZmZcIiA9PT0gdC5wb2xpY3kpIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIHQuaWRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3RlKS5oYXMoZSkpIHtcbiAgICAgICAgICAgICAgICAgICgwLCBpLndhcm4pKFwiT3B0aW9uYWwgY29udGVudCBncm91cCBub3QgZm91bmQ6IFwiLmNvbmNhdChlKSk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF90ZSkuZ2V0KGUpLnZpc2libGUpIHJldHVybiAhMDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXCJBbGxPZmZcIiA9PT0gdC5wb2xpY3kpIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIHQuaWRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3RlKS5oYXMoZSkpIHtcbiAgICAgICAgICAgICAgICAgICgwLCBpLndhcm4pKFwiT3B0aW9uYWwgY29udGVudCBncm91cCBub3QgZm91bmQ6IFwiLmNvbmNhdChlKSk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3RlKS5nZXQoZSkudmlzaWJsZSkgcmV0dXJuICExO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICgwLCBpLndhcm4pKFwiVW5rbm93biBvcHRpb25hbCBjb250ZW50IHBvbGljeSBcIi5jb25jYXQodC5wb2xpY3ksIFwiLlwiKSk7XG4gICAgICAgICAgICByZXR1cm4gITA7XG4gICAgICAgICAgfVxuICAgICAgICAgICgwLCBpLndhcm4pKFwiVW5rbm93biBncm91cCB0eXBlIFwiLmNvbmNhdCh0LnR5cGUsIFwiLlwiKSk7XG4gICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICB9XG4gICAgICAgIHNldFZpc2liaWxpdHkodCkge1xuICAgICAgICAgIGxldCBlID0gIShhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1sxXSkgfHwgYXJndW1lbnRzWzFdO1xuICAgICAgICAgIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3RlKS5oYXModCkpIHtcbiAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfdGUpLmdldCh0KS5fc2V0VmlzaWJsZShzLCAhIWUpO1xuICAgICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9adCwgbnVsbCk7XG4gICAgICAgICAgfSBlbHNlICgwLCBpLndhcm4pKFwiT3B0aW9uYWwgY29udGVudCBncm91cCBub3QgZm91bmQ6IFwiLmNvbmNhdCh0KSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGhhc0luaXRpYWxWaXNpYmlsaXR5KCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmdldEhhc2goKSA9PT0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9lZSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0T3JkZXIoKSB7XG4gICAgICAgICAgcmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfdGUpLnNpemUgPyBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX25lKSA/IF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfbmUpLnNsaWNlKCkgOiBbLi4uX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF90ZSkua2V5cygpXSA6IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0R3JvdXBzKCkge1xuICAgICAgICAgIHJldHVybiBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3RlKS5zaXplID4gMCA/ICgwLCBpLm9iamVjdEZyb21NYXApKF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfdGUpKSA6IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0R3JvdXAodCkge1xuICAgICAgICAgIHJldHVybiBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3RlKS5nZXQodCkgfHwgbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBnZXRIYXNoKCkge1xuICAgICAgICAgIGlmIChudWxsICE9PSBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1p0KSkgcmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWnQpO1xuICAgICAgICAgIGNvbnN0IHQgPSBuZXcgci5NdXJtdXJIYXNoM182NCgpO1xuICAgICAgICAgIGZvciAoY29uc3QgW2UsIG5dIG9mIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfdGUpKSB0LnVwZGF0ZShcIlwiLmNvbmNhdChlLCBcIjpcIikuY29uY2F0KG4udmlzaWJsZSkpO1xuICAgICAgICAgIHJldHVybiBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1p0LCB0LmhleGRpZ2VzdCgpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBmdW5jdGlvbiBfaWUyKHQpIHtcbiAgICAgICAgY29uc3QgZSA9IHQubGVuZ3RoO1xuICAgICAgICBpZiAoZSA8IDIpIHJldHVybiAhMDtcbiAgICAgICAgY29uc3QgbiA9IHRbMF07XG4gICAgICAgIGZvciAobGV0IHIgPSAxOyByIDwgZTsgcisrKSB7XG4gICAgICAgICAgY29uc3QgZSA9IHRbcl07XG4gICAgICAgICAgbGV0IHM7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZSkpIHMgPSBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9pZSwgX2llMikuY2FsbCh0aGlzLCBlKTtlbHNlIHtcbiAgICAgICAgICAgIGlmICghX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF90ZSkuaGFzKGUpKSB7XG4gICAgICAgICAgICAgICgwLCBpLndhcm4pKFwiT3B0aW9uYWwgY29udGVudCBncm91cCBub3QgZm91bmQ6IFwiLmNvbmNhdChlKSk7XG4gICAgICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHMgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3RlKS5nZXQoZSkudmlzaWJsZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3dpdGNoIChuKSB7XG4gICAgICAgICAgICBjYXNlIFwiQW5kXCI6XG4gICAgICAgICAgICAgIGlmICghcykgcmV0dXJuICExO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJPclwiOlxuICAgICAgICAgICAgICBpZiAocykgcmV0dXJuICEwO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJOb3RcIjpcbiAgICAgICAgICAgICAgcmV0dXJuICFzO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuICEwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJBbmRcIiA9PT0gbjtcbiAgICAgIH1cbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICB2YWx1ZTogITBcbiAgICAgIH0pO1xuICAgICAgZS5QREZEYXRhVHJhbnNwb3J0U3RyZWFtID0gdm9pZCAwO1xuICAgICAgbig5Myk7XG4gICAgICBuKDEwMSk7XG4gICAgICBuKDEwMik7XG4gICAgICBuKDEwNSk7XG4gICAgICBuKDEwNyk7XG4gICAgICBuKDEwOSk7XG4gICAgICBuKDExMyk7XG4gICAgICBuKDExNik7XG4gICAgICBuKDEyMyk7XG4gICAgICBuKDg5KTtcbiAgICAgIHZhciBpID0gbigxKSxcbiAgICAgICAgciA9IG4oMTY3KTtcbiAgICAgIGUuUERGRGF0YVRyYW5zcG9ydFN0cmVhbSA9IGNsYXNzIFBERkRhdGFUcmFuc3BvcnRTdHJlYW0ge1xuICAgICAgICBjb25zdHJ1Y3Rvcih0LCBlKSB7XG4gICAgICAgICAgbGV0IHtcbiAgICAgICAgICAgIGxlbmd0aDogbixcbiAgICAgICAgICAgIGluaXRpYWxEYXRhOiByLFxuICAgICAgICAgICAgcHJvZ3Jlc3NpdmVEb25lOiBzID0gITEsXG4gICAgICAgICAgICBjb250ZW50RGlzcG9zaXRpb25GaWxlbmFtZTogYSA9IG51bGwsXG4gICAgICAgICAgICBkaXNhYmxlUmFuZ2U6IG8gPSAhMSxcbiAgICAgICAgICAgIGRpc2FibGVTdHJlYW06IGwgPSAhMVxuICAgICAgICAgIH0gPSB0O1xuICAgICAgICAgICgwLCBpLmFzc2VydCkoZSwgJ1BERkRhdGFUcmFuc3BvcnRTdHJlYW0gLSBtaXNzaW5nIHJlcXVpcmVkIFwicGRmRGF0YVJhbmdlVHJhbnNwb3J0XCIgYXJndW1lbnQuJyk7XG4gICAgICAgICAgdGhpcy5fcXVldWVkQ2h1bmtzID0gW107XG4gICAgICAgICAgdGhpcy5fcHJvZ3Jlc3NpdmVEb25lID0gcztcbiAgICAgICAgICB0aGlzLl9jb250ZW50RGlzcG9zaXRpb25GaWxlbmFtZSA9IGE7XG4gICAgICAgICAgaWYgKChyID09PSBudWxsIHx8IHIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHIubGVuZ3RoKSA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHQgPSByIGluc3RhbmNlb2YgVWludDhBcnJheSAmJiByLmJ5dGVMZW5ndGggPT09IHIuYnVmZmVyLmJ5dGVMZW5ndGggPyByLmJ1ZmZlciA6IG5ldyBVaW50OEFycmF5KHIpLmJ1ZmZlcjtcbiAgICAgICAgICAgIHRoaXMuX3F1ZXVlZENodW5rcy5wdXNoKHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQgPSBlO1xuICAgICAgICAgIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkID0gIWw7XG4gICAgICAgICAgdGhpcy5faXNSYW5nZVN1cHBvcnRlZCA9ICFvO1xuICAgICAgICAgIHRoaXMuX2NvbnRlbnRMZW5ndGggPSBuO1xuICAgICAgICAgIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyID0gbnVsbDtcbiAgICAgICAgICB0aGlzLl9yYW5nZVJlYWRlcnMgPSBbXTtcbiAgICAgICAgICB0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQuYWRkUmFuZ2VMaXN0ZW5lcigodCwgZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fb25SZWNlaXZlRGF0YSh7XG4gICAgICAgICAgICAgIGJlZ2luOiB0LFxuICAgICAgICAgICAgICBjaHVuazogZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5fcGRmRGF0YVJhbmdlVHJhbnNwb3J0LmFkZFByb2dyZXNzTGlzdGVuZXIoKHQsIGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX29uUHJvZ3Jlc3Moe1xuICAgICAgICAgICAgICBsb2FkZWQ6IHQsXG4gICAgICAgICAgICAgIHRvdGFsOiBlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQuYWRkUHJvZ3Jlc3NpdmVSZWFkTGlzdGVuZXIodCA9PiB7XG4gICAgICAgICAgICB0aGlzLl9vblJlY2VpdmVEYXRhKHtcbiAgICAgICAgICAgICAgY2h1bms6IHRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuX3BkZkRhdGFSYW5nZVRyYW5zcG9ydC5hZGRQcm9ncmVzc2l2ZURvbmVMaXN0ZW5lcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9vblByb2dyZXNzaXZlRG9uZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuX3BkZkRhdGFSYW5nZVRyYW5zcG9ydC50cmFuc3BvcnRSZWFkeSgpO1xuICAgICAgICB9XG4gICAgICAgIF9vblJlY2VpdmVEYXRhKHQpIHtcbiAgICAgICAgICBsZXQge1xuICAgICAgICAgICAgYmVnaW46IGUsXG4gICAgICAgICAgICBjaHVuazogblxuICAgICAgICAgIH0gPSB0O1xuICAgICAgICAgIGNvbnN0IHIgPSBuIGluc3RhbmNlb2YgVWludDhBcnJheSAmJiBuLmJ5dGVMZW5ndGggPT09IG4uYnVmZmVyLmJ5dGVMZW5ndGggPyBuLmJ1ZmZlciA6IG5ldyBVaW50OEFycmF5KG4pLmJ1ZmZlcjtcbiAgICAgICAgICBpZiAodm9pZCAwID09PSBlKSB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciA/IHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLl9lbnF1ZXVlKHIpIDogdGhpcy5fcXVldWVkQ2h1bmtzLnB1c2gocik7ZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB0ID0gdGhpcy5fcmFuZ2VSZWFkZXJzLnNvbWUoZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgaWYgKHQuX2JlZ2luICE9PSBlKSByZXR1cm4gITE7XG4gICAgICAgICAgICAgIHQuX2VucXVldWUocik7XG4gICAgICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgKDAsIGkuYXNzZXJ0KSh0LCBcIl9vblJlY2VpdmVEYXRhIC0gbm8gYFBERkRhdGFUcmFuc3BvcnRTdHJlYW1SYW5nZVJlYWRlcmAgaW5zdGFuY2UgZm91bmQuXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBnZXQgX3Byb2dyZXNzaXZlRGF0YUxlbmd0aCgpIHtcbiAgICAgICAgICB2YXIgX3RoaXMkX2Z1bGxSZXF1ZXN0UmVhLCBfdGhpcyRfZnVsbFJlcXVlc3RSZWEyO1xuICAgICAgICAgIHJldHVybiAoX3RoaXMkX2Z1bGxSZXF1ZXN0UmVhID0gKF90aGlzJF9mdWxsUmVxdWVzdFJlYTIgPSB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcikgPT09IG51bGwgfHwgX3RoaXMkX2Z1bGxSZXF1ZXN0UmVhMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkX2Z1bGxSZXF1ZXN0UmVhMi5fbG9hZGVkKSAhPT0gbnVsbCAmJiBfdGhpcyRfZnVsbFJlcXVlc3RSZWEgIT09IHZvaWQgMCA/IF90aGlzJF9mdWxsUmVxdWVzdFJlYSA6IDA7XG4gICAgICAgIH1cbiAgICAgICAgX29uUHJvZ3Jlc3ModCkge1xuICAgICAgICAgIHZhciBfdGhpcyRfcmFuZ2VSZWFkZXJzJCwgX3RoaXMkX3JhbmdlUmVhZGVycyQkLCBfdGhpcyRfZnVsbFJlcXVlc3RSZWEzLCBfdGhpcyRfZnVsbFJlcXVlc3RSZWE0O1xuICAgICAgICAgIHZvaWQgMCA9PT0gdC50b3RhbCA/IChfdGhpcyRfcmFuZ2VSZWFkZXJzJCA9IHRoaXMuX3JhbmdlUmVhZGVyc1swXSkgPT09IG51bGwgfHwgX3RoaXMkX3JhbmdlUmVhZGVycyQgPT09IHZvaWQgMCB8fCAoX3RoaXMkX3JhbmdlUmVhZGVycyQkID0gX3RoaXMkX3JhbmdlUmVhZGVycyQub25Qcm9ncmVzcykgPT09IG51bGwgfHwgX3RoaXMkX3JhbmdlUmVhZGVycyQkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRfcmFuZ2VSZWFkZXJzJCQuY2FsbChfdGhpcyRfcmFuZ2VSZWFkZXJzJCwge1xuICAgICAgICAgICAgbG9hZGVkOiB0LmxvYWRlZFxuICAgICAgICAgIH0pIDogKF90aGlzJF9mdWxsUmVxdWVzdFJlYTMgPSB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcikgPT09IG51bGwgfHwgX3RoaXMkX2Z1bGxSZXF1ZXN0UmVhMyA9PT0gdm9pZCAwIHx8IChfdGhpcyRfZnVsbFJlcXVlc3RSZWE0ID0gX3RoaXMkX2Z1bGxSZXF1ZXN0UmVhMy5vblByb2dyZXNzKSA9PT0gbnVsbCB8fCBfdGhpcyRfZnVsbFJlcXVlc3RSZWE0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRfZnVsbFJlcXVlc3RSZWE0LmNhbGwoX3RoaXMkX2Z1bGxSZXF1ZXN0UmVhMywge1xuICAgICAgICAgICAgbG9hZGVkOiB0LmxvYWRlZCxcbiAgICAgICAgICAgIHRvdGFsOiB0LnRvdGFsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgX29uUHJvZ3Jlc3NpdmVEb25lKCkge1xuICAgICAgICAgIHZhciBfdGhpcyRfZnVsbFJlcXVlc3RSZWE1O1xuICAgICAgICAgIChfdGhpcyRfZnVsbFJlcXVlc3RSZWE1ID0gdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIpID09PSBudWxsIHx8IF90aGlzJF9mdWxsUmVxdWVzdFJlYTUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJF9mdWxsUmVxdWVzdFJlYTUucHJvZ3Jlc3NpdmVEb25lKCk7XG4gICAgICAgICAgdGhpcy5fcHJvZ3Jlc3NpdmVEb25lID0gITA7XG4gICAgICAgIH1cbiAgICAgICAgX3JlbW92ZVJhbmdlUmVhZGVyKHQpIHtcbiAgICAgICAgICBjb25zdCBlID0gdGhpcy5fcmFuZ2VSZWFkZXJzLmluZGV4T2YodCk7XG4gICAgICAgICAgZSA+PSAwICYmIHRoaXMuX3JhbmdlUmVhZGVycy5zcGxpY2UoZSwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0RnVsbFJlYWRlcigpIHtcbiAgICAgICAgICAoMCwgaS5hc3NlcnQpKCF0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciwgXCJQREZEYXRhVHJhbnNwb3J0U3RyZWFtLmdldEZ1bGxSZWFkZXIgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2UuXCIpO1xuICAgICAgICAgIGNvbnN0IHQgPSB0aGlzLl9xdWV1ZWRDaHVua3M7XG4gICAgICAgICAgdGhpcy5fcXVldWVkQ2h1bmtzID0gbnVsbDtcbiAgICAgICAgICByZXR1cm4gbmV3IFBERkRhdGFUcmFuc3BvcnRTdHJlYW1SZWFkZXIodGhpcywgdCwgdGhpcy5fcHJvZ3Jlc3NpdmVEb25lLCB0aGlzLl9jb250ZW50RGlzcG9zaXRpb25GaWxlbmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0UmFuZ2VSZWFkZXIodCwgZSkge1xuICAgICAgICAgIGlmIChlIDw9IHRoaXMuX3Byb2dyZXNzaXZlRGF0YUxlbmd0aCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgY29uc3QgbiA9IG5ldyBQREZEYXRhVHJhbnNwb3J0U3RyZWFtUmFuZ2VSZWFkZXIodGhpcywgdCwgZSk7XG4gICAgICAgICAgdGhpcy5fcGRmRGF0YVJhbmdlVHJhbnNwb3J0LnJlcXVlc3REYXRhUmFuZ2UodCwgZSk7XG4gICAgICAgICAgdGhpcy5fcmFuZ2VSZWFkZXJzLnB1c2gobik7XG4gICAgICAgICAgcmV0dXJuIG47XG4gICAgICAgIH1cbiAgICAgICAgY2FuY2VsQWxsUmVxdWVzdHModCkge1xuICAgICAgICAgIHZhciBfdGhpcyRfZnVsbFJlcXVlc3RSZWE2O1xuICAgICAgICAgIChfdGhpcyRfZnVsbFJlcXVlc3RSZWE2ID0gdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIpID09PSBudWxsIHx8IF90aGlzJF9mdWxsUmVxdWVzdFJlYTYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJF9mdWxsUmVxdWVzdFJlYTYuY2FuY2VsKHQpO1xuICAgICAgICAgIGZvciAoY29uc3QgZSBvZiB0aGlzLl9yYW5nZVJlYWRlcnMuc2xpY2UoMCkpIGUuY2FuY2VsKHQpO1xuICAgICAgICAgIHRoaXMuX3BkZkRhdGFSYW5nZVRyYW5zcG9ydC5hYm9ydCgpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY2xhc3MgUERGRGF0YVRyYW5zcG9ydFN0cmVhbVJlYWRlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHQsIGUpIHtcbiAgICAgICAgICBsZXQgbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzJdICYmIGFyZ3VtZW50c1syXSxcbiAgICAgICAgICAgIGkgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1szXSA/IGFyZ3VtZW50c1szXSA6IG51bGw7XG4gICAgICAgICAgdGhpcy5fc3RyZWFtID0gdDtcbiAgICAgICAgICB0aGlzLl9kb25lID0gbiB8fCAhMTtcbiAgICAgICAgICB0aGlzLl9maWxlbmFtZSA9ICgwLCByLmlzUGRmRmlsZSkoaSkgPyBpIDogbnVsbDtcbiAgICAgICAgICB0aGlzLl9xdWV1ZWRDaHVua3MgPSBlIHx8IFtdO1xuICAgICAgICAgIHRoaXMuX2xvYWRlZCA9IDA7XG4gICAgICAgICAgZm9yIChjb25zdCB0IG9mIHRoaXMuX3F1ZXVlZENodW5rcykgdGhpcy5fbG9hZGVkICs9IHQuYnl0ZUxlbmd0aDtcbiAgICAgICAgICB0aGlzLl9yZXF1ZXN0cyA9IFtdO1xuICAgICAgICAgIHRoaXMuX2hlYWRlcnNSZWFkeSA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgIHQuX2Z1bGxSZXF1ZXN0UmVhZGVyID0gdGhpcztcbiAgICAgICAgICB0aGlzLm9uUHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIF9lbnF1ZXVlKHQpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuX2RvbmUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9yZXF1ZXN0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3JlcXVlc3RzLnNoaWZ0KCkucmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHQsXG4gICAgICAgICAgICAgICAgZG9uZTogITFcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgdGhpcy5fcXVldWVkQ2h1bmtzLnB1c2godCk7XG4gICAgICAgICAgICB0aGlzLl9sb2FkZWQgKz0gdC5ieXRlTGVuZ3RoO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBnZXQgaGVhZGVyc1JlYWR5KCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9oZWFkZXJzUmVhZHk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGZpbGVuYW1lKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9maWxlbmFtZTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgaXNSYW5nZVN1cHBvcnRlZCgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fc3RyZWFtLl9pc1JhbmdlU3VwcG9ydGVkO1xuICAgICAgICB9XG4gICAgICAgIGdldCBpc1N0cmVhbWluZ1N1cHBvcnRlZCgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fc3RyZWFtLl9pc1N0cmVhbWluZ1N1cHBvcnRlZDtcbiAgICAgICAgfVxuICAgICAgICBnZXQgY29udGVudExlbmd0aCgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fc3RyZWFtLl9jb250ZW50TGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGFzeW5jIHJlYWQoKSB7XG4gICAgICAgICAgaWYgKHRoaXMuX3F1ZXVlZENodW5rcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5fcXVldWVkQ2h1bmtzLnNoaWZ0KCksXG4gICAgICAgICAgICAgIGRvbmU6ICExXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5fZG9uZSkgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAsXG4gICAgICAgICAgICBkb25lOiAhMFxuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3QgdCA9IG5ldyBpLlByb21pc2VDYXBhYmlsaXR5KCk7XG4gICAgICAgICAgdGhpcy5fcmVxdWVzdHMucHVzaCh0KTtcbiAgICAgICAgICByZXR1cm4gdC5wcm9taXNlO1xuICAgICAgICB9XG4gICAgICAgIGNhbmNlbCh0KSB7XG4gICAgICAgICAgdGhpcy5fZG9uZSA9ICEwO1xuICAgICAgICAgIGZvciAoY29uc3QgdCBvZiB0aGlzLl9yZXF1ZXN0cykgdC5yZXNvbHZlKHtcbiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAsXG4gICAgICAgICAgICBkb25lOiAhMFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuX3JlcXVlc3RzLmxlbmd0aCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgcHJvZ3Jlc3NpdmVEb25lKCkge1xuICAgICAgICAgIHRoaXMuX2RvbmUgfHwgKHRoaXMuX2RvbmUgPSAhMCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNsYXNzIFBERkRhdGFUcmFuc3BvcnRTdHJlYW1SYW5nZVJlYWRlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHQsIGUsIG4pIHtcbiAgICAgICAgICB0aGlzLl9zdHJlYW0gPSB0O1xuICAgICAgICAgIHRoaXMuX2JlZ2luID0gZTtcbiAgICAgICAgICB0aGlzLl9lbmQgPSBuO1xuICAgICAgICAgIHRoaXMuX3F1ZXVlZENodW5rID0gbnVsbDtcbiAgICAgICAgICB0aGlzLl9yZXF1ZXN0cyA9IFtdO1xuICAgICAgICAgIHRoaXMuX2RvbmUgPSAhMTtcbiAgICAgICAgICB0aGlzLm9uUHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIF9lbnF1ZXVlKHQpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuX2RvbmUpIHtcbiAgICAgICAgICAgIGlmICgwID09PSB0aGlzLl9yZXF1ZXN0cy5sZW5ndGgpIHRoaXMuX3F1ZXVlZENodW5rID0gdDtlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5fcmVxdWVzdHMuc2hpZnQoKS5yZXNvbHZlKHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdCxcbiAgICAgICAgICAgICAgICBkb25lOiAhMVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCB0IG9mIHRoaXMuX3JlcXVlc3RzKSB0LnJlc29sdmUoe1xuICAgICAgICAgICAgICAgIHZhbHVlOiB2b2lkIDAsXG4gICAgICAgICAgICAgICAgZG9uZTogITBcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHRoaXMuX3JlcXVlc3RzLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9kb25lID0gITA7XG4gICAgICAgICAgICB0aGlzLl9zdHJlYW0uX3JlbW92ZVJhbmdlUmVhZGVyKHRoaXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBnZXQgaXNTdHJlYW1pbmdTdXBwb3J0ZWQoKSB7XG4gICAgICAgICAgcmV0dXJuICExO1xuICAgICAgICB9XG4gICAgICAgIGFzeW5jIHJlYWQoKSB7XG4gICAgICAgICAgaWYgKHRoaXMuX3F1ZXVlZENodW5rKSB7XG4gICAgICAgICAgICBjb25zdCB0ID0gdGhpcy5fcXVldWVkQ2h1bms7XG4gICAgICAgICAgICB0aGlzLl9xdWV1ZWRDaHVuayA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB2YWx1ZTogdCxcbiAgICAgICAgICAgICAgZG9uZTogITFcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLl9kb25lKSByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHZvaWQgMCxcbiAgICAgICAgICAgIGRvbmU6ICEwXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCB0ID0gbmV3IGkuUHJvbWlzZUNhcGFiaWxpdHkoKTtcbiAgICAgICAgICB0aGlzLl9yZXF1ZXN0cy5wdXNoKHQpO1xuICAgICAgICAgIHJldHVybiB0LnByb21pc2U7XG4gICAgICAgIH1cbiAgICAgICAgY2FuY2VsKHQpIHtcbiAgICAgICAgICB0aGlzLl9kb25lID0gITA7XG4gICAgICAgICAgZm9yIChjb25zdCB0IG9mIHRoaXMuX3JlcXVlc3RzKSB0LnJlc29sdmUoe1xuICAgICAgICAgICAgdmFsdWU6IHZvaWQgMCxcbiAgICAgICAgICAgIGRvbmU6ICEwXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5fcmVxdWVzdHMubGVuZ3RoID0gMDtcbiAgICAgICAgICB0aGlzLl9zdHJlYW0uX3JlbW92ZVJhbmdlUmVhZGVyKHRoaXMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgdmFsdWU6ICEwXG4gICAgICB9KTtcbiAgICAgIGUuUERGRmV0Y2hTdHJlYW0gPSB2b2lkIDA7XG4gICAgICBuKDkzKTtcbiAgICAgIG4oMTAxKTtcbiAgICAgIG4oMTAyKTtcbiAgICAgIG4oMTA1KTtcbiAgICAgIG4oMTA3KTtcbiAgICAgIG4oMTA5KTtcbiAgICAgIG4oMTEzKTtcbiAgICAgIG4oMTE2KTtcbiAgICAgIG4oMTIzKTtcbiAgICAgIG4oODkpO1xuICAgICAgdmFyIGkgPSBuKDEpLFxuICAgICAgICByID0gbigxODEpO1xuICAgICAgZnVuY3Rpb24gY3JlYXRlRmV0Y2hPcHRpb25zKHQsIGUsIG4pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICAgICAgaGVhZGVyczogdCxcbiAgICAgICAgICBzaWduYWw6IG4uc2lnbmFsLFxuICAgICAgICAgIG1vZGU6IFwiY29yc1wiLFxuICAgICAgICAgIGNyZWRlbnRpYWxzOiBlID8gXCJpbmNsdWRlXCIgOiBcInNhbWUtb3JpZ2luXCIsXG4gICAgICAgICAgcmVkaXJlY3Q6IFwiZm9sbG93XCJcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGNyZWF0ZUhlYWRlcnModCkge1xuICAgICAgICBjb25zdCBlID0gbmV3IEhlYWRlcnMoKTtcbiAgICAgICAgZm9yIChjb25zdCBuIGluIHQpIHtcbiAgICAgICAgICBjb25zdCBpID0gdFtuXTtcbiAgICAgICAgICB2b2lkIDAgIT09IGkgJiYgZS5hcHBlbmQobiwgaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGU7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBnZXRBcnJheUJ1ZmZlcih0KSB7XG4gICAgICAgIGlmICh0IGluc3RhbmNlb2YgVWludDhBcnJheSkgcmV0dXJuIHQuYnVmZmVyO1xuICAgICAgICBpZiAodCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSByZXR1cm4gdDtcbiAgICAgICAgKDAsIGkud2FybikoXCJnZXRBcnJheUJ1ZmZlciAtIHVuZXhwZWN0ZWQgZGF0YSBmb3JtYXQ6IFwiLmNvbmNhdCh0KSk7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSh0KS5idWZmZXI7XG4gICAgICB9XG4gICAgICBlLlBERkZldGNoU3RyZWFtID0gY2xhc3MgUERGRmV0Y2hTdHJlYW0ge1xuICAgICAgICBjb25zdHJ1Y3Rvcih0KSB7XG4gICAgICAgICAgdGhpcy5zb3VyY2UgPSB0O1xuICAgICAgICAgIHRoaXMuaXNIdHRwID0gL15odHRwcz86L2kudGVzdCh0LnVybCk7XG4gICAgICAgICAgdGhpcy5odHRwSGVhZGVycyA9IHRoaXMuaXNIdHRwICYmIHQuaHR0cEhlYWRlcnMgfHwge307XG4gICAgICAgICAgdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIgPSBudWxsO1xuICAgICAgICAgIHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgX3Byb2dyZXNzaXZlRGF0YUxlbmd0aCgpIHtcbiAgICAgICAgICB2YXIgX3RoaXMkX2Z1bGxSZXF1ZXN0UmVhNywgX3RoaXMkX2Z1bGxSZXF1ZXN0UmVhODtcbiAgICAgICAgICByZXR1cm4gKF90aGlzJF9mdWxsUmVxdWVzdFJlYTcgPSAoX3RoaXMkX2Z1bGxSZXF1ZXN0UmVhOCA9IHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyKSA9PT0gbnVsbCB8fCBfdGhpcyRfZnVsbFJlcXVlc3RSZWE4ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRfZnVsbFJlcXVlc3RSZWE4Ll9sb2FkZWQpICE9PSBudWxsICYmIF90aGlzJF9mdWxsUmVxdWVzdFJlYTcgIT09IHZvaWQgMCA/IF90aGlzJF9mdWxsUmVxdWVzdFJlYTcgOiAwO1xuICAgICAgICB9XG4gICAgICAgIGdldEZ1bGxSZWFkZXIoKSB7XG4gICAgICAgICAgKDAsIGkuYXNzZXJ0KSghdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIsIFwiUERGRmV0Y2hTdHJlYW0uZ2V0RnVsbFJlYWRlciBjYW4gb25seSBiZSBjYWxsZWQgb25jZS5cIik7XG4gICAgICAgICAgdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIgPSBuZXcgUERGRmV0Y2hTdHJlYW1SZWFkZXIodGhpcyk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyO1xuICAgICAgICB9XG4gICAgICAgIGdldFJhbmdlUmVhZGVyKHQsIGUpIHtcbiAgICAgICAgICBpZiAoZSA8PSB0aGlzLl9wcm9ncmVzc2l2ZURhdGFMZW5ndGgpIHJldHVybiBudWxsO1xuICAgICAgICAgIGNvbnN0IG4gPSBuZXcgUERGRmV0Y2hTdHJlYW1SYW5nZVJlYWRlcih0aGlzLCB0LCBlKTtcbiAgICAgICAgICB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnB1c2gobik7XG4gICAgICAgICAgcmV0dXJuIG47XG4gICAgICAgIH1cbiAgICAgICAgY2FuY2VsQWxsUmVxdWVzdHModCkge1xuICAgICAgICAgIHZhciBfdGhpcyRfZnVsbFJlcXVlc3RSZWE5O1xuICAgICAgICAgIChfdGhpcyRfZnVsbFJlcXVlc3RSZWE5ID0gdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIpID09PSBudWxsIHx8IF90aGlzJF9mdWxsUmVxdWVzdFJlYTkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJF9mdWxsUmVxdWVzdFJlYTkuY2FuY2VsKHQpO1xuICAgICAgICAgIGZvciAoY29uc3QgZSBvZiB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnNsaWNlKDApKSBlLmNhbmNlbCh0KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNsYXNzIFBERkZldGNoU3RyZWFtUmVhZGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IodCkge1xuICAgICAgICAgIHRoaXMuX3N0cmVhbSA9IHQ7XG4gICAgICAgICAgdGhpcy5fcmVhZGVyID0gbnVsbDtcbiAgICAgICAgICB0aGlzLl9sb2FkZWQgPSAwO1xuICAgICAgICAgIHRoaXMuX2ZpbGVuYW1lID0gbnVsbDtcbiAgICAgICAgICBjb25zdCBlID0gdC5zb3VyY2U7XG4gICAgICAgICAgdGhpcy5fd2l0aENyZWRlbnRpYWxzID0gZS53aXRoQ3JlZGVudGlhbHMgfHwgITE7XG4gICAgICAgICAgdGhpcy5fY29udGVudExlbmd0aCA9IGUubGVuZ3RoO1xuICAgICAgICAgIHRoaXMuX2hlYWRlcnNDYXBhYmlsaXR5ID0gbmV3IGkuUHJvbWlzZUNhcGFiaWxpdHkoKTtcbiAgICAgICAgICB0aGlzLl9kaXNhYmxlUmFuZ2UgPSBlLmRpc2FibGVSYW5nZSB8fCAhMTtcbiAgICAgICAgICB0aGlzLl9yYW5nZUNodW5rU2l6ZSA9IGUucmFuZ2VDaHVua1NpemU7XG4gICAgICAgICAgdGhpcy5fcmFuZ2VDaHVua1NpemUgfHwgdGhpcy5fZGlzYWJsZVJhbmdlIHx8ICh0aGlzLl9kaXNhYmxlUmFuZ2UgPSAhMCk7XG4gICAgICAgICAgdGhpcy5fYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgICAgICAgIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkID0gIWUuZGlzYWJsZVN0cmVhbTtcbiAgICAgICAgICB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkID0gIWUuZGlzYWJsZVJhbmdlO1xuICAgICAgICAgIHRoaXMuX2hlYWRlcnMgPSBjcmVhdGVIZWFkZXJzKHRoaXMuX3N0cmVhbS5odHRwSGVhZGVycyk7XG4gICAgICAgICAgY29uc3QgbiA9IGUudXJsO1xuICAgICAgICAgIGZldGNoKG4sIGNyZWF0ZUZldGNoT3B0aW9ucyh0aGlzLl9oZWFkZXJzLCB0aGlzLl93aXRoQ3JlZGVudGlhbHMsIHRoaXMuX2Fib3J0Q29udHJvbGxlcikpLnRoZW4odCA9PiB7XG4gICAgICAgICAgICBpZiAoISgwLCByLnZhbGlkYXRlUmVzcG9uc2VTdGF0dXMpKHQuc3RhdHVzKSkgdGhyb3cgKDAsIHIuY3JlYXRlUmVzcG9uc2VTdGF0dXNFcnJvcikodC5zdGF0dXMsIG4pO1xuICAgICAgICAgICAgdGhpcy5fcmVhZGVyID0gdC5ib2R5LmdldFJlYWRlcigpO1xuICAgICAgICAgICAgdGhpcy5faGVhZGVyc0NhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICAgICAgICAgICAgY29uc3QgZ2V0UmVzcG9uc2VIZWFkZXIgPSBlID0+IHQuaGVhZGVycy5nZXQoZSksXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhbGxvd1JhbmdlUmVxdWVzdHM6IGUsXG4gICAgICAgICAgICAgICAgc3VnZ2VzdGVkTGVuZ3RoOiBzXG4gICAgICAgICAgICAgIH0gPSAoMCwgci52YWxpZGF0ZVJhbmdlUmVxdWVzdENhcGFiaWxpdGllcykoe1xuICAgICAgICAgICAgICAgIGdldFJlc3BvbnNlSGVhZGVyOiBnZXRSZXNwb25zZUhlYWRlcixcbiAgICAgICAgICAgICAgICBpc0h0dHA6IHRoaXMuX3N0cmVhbS5pc0h0dHAsXG4gICAgICAgICAgICAgICAgcmFuZ2VDaHVua1NpemU6IHRoaXMuX3JhbmdlQ2h1bmtTaXplLFxuICAgICAgICAgICAgICAgIGRpc2FibGVSYW5nZTogdGhpcy5fZGlzYWJsZVJhbmdlXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5faXNSYW5nZVN1cHBvcnRlZCA9IGU7XG4gICAgICAgICAgICB0aGlzLl9jb250ZW50TGVuZ3RoID0gcyB8fCB0aGlzLl9jb250ZW50TGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy5fZmlsZW5hbWUgPSAoMCwgci5leHRyYWN0RmlsZW5hbWVGcm9tSGVhZGVyKShnZXRSZXNwb25zZUhlYWRlcik7XG4gICAgICAgICAgICAhdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQgJiYgdGhpcy5faXNSYW5nZVN1cHBvcnRlZCAmJiB0aGlzLmNhbmNlbChuZXcgaS5BYm9ydEV4Y2VwdGlvbihcIlN0cmVhbWluZyBpcyBkaXNhYmxlZC5cIikpO1xuICAgICAgICAgIH0pLmNhdGNoKHRoaXMuX2hlYWRlcnNDYXBhYmlsaXR5LnJlamVjdCk7XG4gICAgICAgICAgdGhpcy5vblByb2dyZXNzID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBnZXQgaGVhZGVyc1JlYWR5KCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5wcm9taXNlO1xuICAgICAgICB9XG4gICAgICAgIGdldCBmaWxlbmFtZSgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fZmlsZW5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGNvbnRlbnRMZW5ndGgoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRlbnRMZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGlzUmFuZ2VTdXBwb3J0ZWQoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQ7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGlzU3RyZWFtaW5nU3VwcG9ydGVkKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZDtcbiAgICAgICAgfVxuICAgICAgICBhc3luYyByZWFkKCkge1xuICAgICAgICAgIHZhciBfdGhpcyRvblByb2dyZXNzO1xuICAgICAgICAgIGF3YWl0IHRoaXMuX2hlYWRlcnNDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgdmFsdWU6IHQsXG4gICAgICAgICAgICBkb25lOiBlXG4gICAgICAgICAgfSA9IGF3YWl0IHRoaXMuX3JlYWRlci5yZWFkKCk7XG4gICAgICAgICAgaWYgKGUpIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogdCxcbiAgICAgICAgICAgIGRvbmU6IGVcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMuX2xvYWRlZCArPSB0LmJ5dGVMZW5ndGg7XG4gICAgICAgICAgKF90aGlzJG9uUHJvZ3Jlc3MgPSB0aGlzLm9uUHJvZ3Jlc3MpID09PSBudWxsIHx8IF90aGlzJG9uUHJvZ3Jlc3MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJG9uUHJvZ3Jlc3MuY2FsbCh0aGlzLCB7XG4gICAgICAgICAgICBsb2FkZWQ6IHRoaXMuX2xvYWRlZCxcbiAgICAgICAgICAgIHRvdGFsOiB0aGlzLl9jb250ZW50TGVuZ3RoXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiBnZXRBcnJheUJ1ZmZlcih0KSxcbiAgICAgICAgICAgIGRvbmU6ICExXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjYW5jZWwodCkge1xuICAgICAgICAgIHZhciBfdGhpcyRfcmVhZGVyO1xuICAgICAgICAgIChfdGhpcyRfcmVhZGVyID0gdGhpcy5fcmVhZGVyKSA9PT0gbnVsbCB8fCBfdGhpcyRfcmVhZGVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRfcmVhZGVyLmNhbmNlbCh0KTtcbiAgICAgICAgICB0aGlzLl9hYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2xhc3MgUERGRmV0Y2hTdHJlYW1SYW5nZVJlYWRlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHQsIGUsIG4pIHtcbiAgICAgICAgICB0aGlzLl9zdHJlYW0gPSB0O1xuICAgICAgICAgIHRoaXMuX3JlYWRlciA9IG51bGw7XG4gICAgICAgICAgdGhpcy5fbG9hZGVkID0gMDtcbiAgICAgICAgICBjb25zdCBzID0gdC5zb3VyY2U7XG4gICAgICAgICAgdGhpcy5fd2l0aENyZWRlbnRpYWxzID0gcy53aXRoQ3JlZGVudGlhbHMgfHwgITE7XG4gICAgICAgICAgdGhpcy5fcmVhZENhcGFiaWxpdHkgPSBuZXcgaS5Qcm9taXNlQ2FwYWJpbGl0eSgpO1xuICAgICAgICAgIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkID0gIXMuZGlzYWJsZVN0cmVhbTtcbiAgICAgICAgICB0aGlzLl9hYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICAgICAgdGhpcy5faGVhZGVycyA9IGNyZWF0ZUhlYWRlcnModGhpcy5fc3RyZWFtLmh0dHBIZWFkZXJzKTtcbiAgICAgICAgICB0aGlzLl9oZWFkZXJzLmFwcGVuZChcIlJhbmdlXCIsIFwiYnl0ZXM9XCIuY29uY2F0KGUsIFwiLVwiKS5jb25jYXQobiAtIDEpKTtcbiAgICAgICAgICBjb25zdCBhID0gcy51cmw7XG4gICAgICAgICAgZmV0Y2goYSwgY3JlYXRlRmV0Y2hPcHRpb25zKHRoaXMuX2hlYWRlcnMsIHRoaXMuX3dpdGhDcmVkZW50aWFscywgdGhpcy5fYWJvcnRDb250cm9sbGVyKSkudGhlbih0ID0+IHtcbiAgICAgICAgICAgIGlmICghKDAsIHIudmFsaWRhdGVSZXNwb25zZVN0YXR1cykodC5zdGF0dXMpKSB0aHJvdyAoMCwgci5jcmVhdGVSZXNwb25zZVN0YXR1c0Vycm9yKSh0LnN0YXR1cywgYSk7XG4gICAgICAgICAgICB0aGlzLl9yZWFkQ2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgICAgICAgICB0aGlzLl9yZWFkZXIgPSB0LmJvZHkuZ2V0UmVhZGVyKCk7XG4gICAgICAgICAgfSkuY2F0Y2godGhpcy5fcmVhZENhcGFiaWxpdHkucmVqZWN0KTtcbiAgICAgICAgICB0aGlzLm9uUHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGdldCBpc1N0cmVhbWluZ1N1cHBvcnRlZCgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQ7XG4gICAgICAgIH1cbiAgICAgICAgYXN5bmMgcmVhZCgpIHtcbiAgICAgICAgICB2YXIgX3RoaXMkb25Qcm9ncmVzczI7XG4gICAgICAgICAgYXdhaXQgdGhpcy5fcmVhZENhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICB2YWx1ZTogdCxcbiAgICAgICAgICAgIGRvbmU6IGVcbiAgICAgICAgICB9ID0gYXdhaXQgdGhpcy5fcmVhZGVyLnJlYWQoKTtcbiAgICAgICAgICBpZiAoZSkgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiB0LFxuICAgICAgICAgICAgZG9uZTogZVxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5fbG9hZGVkICs9IHQuYnl0ZUxlbmd0aDtcbiAgICAgICAgICAoX3RoaXMkb25Qcm9ncmVzczIgPSB0aGlzLm9uUHJvZ3Jlc3MpID09PSBudWxsIHx8IF90aGlzJG9uUHJvZ3Jlc3MyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRvblByb2dyZXNzMi5jYWxsKHRoaXMsIHtcbiAgICAgICAgICAgIGxvYWRlZDogdGhpcy5fbG9hZGVkXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiBnZXRBcnJheUJ1ZmZlcih0KSxcbiAgICAgICAgICAgIGRvbmU6ICExXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjYW5jZWwodCkge1xuICAgICAgICAgIHZhciBfdGhpcyRfcmVhZGVyMjtcbiAgICAgICAgICAoX3RoaXMkX3JlYWRlcjIgPSB0aGlzLl9yZWFkZXIpID09PSBudWxsIHx8IF90aGlzJF9yZWFkZXIyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRfcmVhZGVyMi5jYW5jZWwodCk7XG4gICAgICAgICAgdGhpcy5fYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICB2YWx1ZTogITBcbiAgICAgIH0pO1xuICAgICAgZS5jcmVhdGVSZXNwb25zZVN0YXR1c0Vycm9yID0gZnVuY3Rpb24gY3JlYXRlUmVzcG9uc2VTdGF0dXNFcnJvcih0LCBlKSB7XG4gICAgICAgIGlmICg0MDQgPT09IHQgfHwgMCA9PT0gdCAmJiBlLnN0YXJ0c1dpdGgoXCJmaWxlOlwiKSkgcmV0dXJuIG5ldyBpLk1pc3NpbmdQREZFeGNlcHRpb24oJ01pc3NpbmcgUERGIFwiJyArIGUgKyAnXCIuJyk7XG4gICAgICAgIHJldHVybiBuZXcgaS5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24oXCJVbmV4cGVjdGVkIHNlcnZlciByZXNwb25zZSAoXCIuY29uY2F0KHQsIFwiKSB3aGlsZSByZXRyaWV2aW5nIFBERiBcXFwiXCIpLmNvbmNhdChlLCBcIlxcXCIuXCIpLCB0KTtcbiAgICAgIH07XG4gICAgICBlLmV4dHJhY3RGaWxlbmFtZUZyb21IZWFkZXIgPSBmdW5jdGlvbiBleHRyYWN0RmlsZW5hbWVGcm9tSGVhZGVyKHQpIHtcbiAgICAgICAgY29uc3QgZSA9IHQoXCJDb250ZW50LURpc3Bvc2l0aW9uXCIpO1xuICAgICAgICBpZiAoZSkge1xuICAgICAgICAgIGxldCB0ID0gKDAsIHIuZ2V0RmlsZW5hbWVGcm9tQ29udGVudERpc3Bvc2l0aW9uSGVhZGVyKShlKTtcbiAgICAgICAgICBpZiAodC5pbmNsdWRlcyhcIiVcIikpIHRyeSB7XG4gICAgICAgICAgICB0ID0gZGVjb2RlVVJJQ29tcG9uZW50KHQpO1xuICAgICAgICAgIH0gY2F0Y2ggKF91bnVzZWQxMikge31cbiAgICAgICAgICBpZiAoKDAsIHMuaXNQZGZGaWxlKSh0KSkgcmV0dXJuIHQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9O1xuICAgICAgZS52YWxpZGF0ZVJhbmdlUmVxdWVzdENhcGFiaWxpdGllcyA9IGZ1bmN0aW9uIHZhbGlkYXRlUmFuZ2VSZXF1ZXN0Q2FwYWJpbGl0aWVzKHQpIHtcbiAgICAgICAgbGV0IHtcbiAgICAgICAgICBnZXRSZXNwb25zZUhlYWRlcjogZSxcbiAgICAgICAgICBpc0h0dHA6IG4sXG4gICAgICAgICAgcmFuZ2VDaHVua1NpemU6IGksXG4gICAgICAgICAgZGlzYWJsZVJhbmdlOiByXG4gICAgICAgIH0gPSB0O1xuICAgICAgICBjb25zdCBzID0ge1xuICAgICAgICAgICAgYWxsb3dSYW5nZVJlcXVlc3RzOiAhMSxcbiAgICAgICAgICAgIHN1Z2dlc3RlZExlbmd0aDogdm9pZCAwXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhID0gcGFyc2VJbnQoZShcIkNvbnRlbnQtTGVuZ3RoXCIpLCAxMCk7XG4gICAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihhKSkgcmV0dXJuIHM7XG4gICAgICAgIHMuc3VnZ2VzdGVkTGVuZ3RoID0gYTtcbiAgICAgICAgaWYgKGEgPD0gMiAqIGkpIHJldHVybiBzO1xuICAgICAgICBpZiAociB8fCAhbikgcmV0dXJuIHM7XG4gICAgICAgIGlmIChcImJ5dGVzXCIgIT09IGUoXCJBY2NlcHQtUmFuZ2VzXCIpKSByZXR1cm4gcztcbiAgICAgICAgaWYgKFwiaWRlbnRpdHlcIiAhPT0gKGUoXCJDb250ZW50LUVuY29kaW5nXCIpIHx8IFwiaWRlbnRpdHlcIikpIHJldHVybiBzO1xuICAgICAgICBzLmFsbG93UmFuZ2VSZXF1ZXN0cyA9ICEwO1xuICAgICAgICByZXR1cm4gcztcbiAgICAgIH07XG4gICAgICBlLnZhbGlkYXRlUmVzcG9uc2VTdGF0dXMgPSBmdW5jdGlvbiB2YWxpZGF0ZVJlc3BvbnNlU3RhdHVzKHQpIHtcbiAgICAgICAgcmV0dXJuIDIwMCA9PT0gdCB8fCAyMDYgPT09IHQ7XG4gICAgICB9O1xuICAgICAgdmFyIGkgPSBuKDEpLFxuICAgICAgICByID0gbigxODIpLFxuICAgICAgICBzID0gbigxNjcpO1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgIHZhbHVlOiAhMFxuICAgICAgfSk7XG4gICAgICBlLmdldEZpbGVuYW1lRnJvbUNvbnRlbnREaXNwb3NpdGlvbkhlYWRlciA9IGZ1bmN0aW9uIGdldEZpbGVuYW1lRnJvbUNvbnRlbnREaXNwb3NpdGlvbkhlYWRlcih0KSB7XG4gICAgICAgIGxldCBlID0gITAsXG4gICAgICAgICAgbiA9IHRvUGFyYW1SZWdFeHAoXCJmaWxlbmFtZVxcXFwqXCIsIFwiaVwiKS5leGVjKHQpO1xuICAgICAgICBpZiAobikge1xuICAgICAgICAgIG4gPSBuWzFdO1xuICAgICAgICAgIGxldCB0ID0gcmZjMjYxNnVucXVvdGUobik7XG4gICAgICAgICAgdCA9IHVuZXNjYXBlKHQpO1xuICAgICAgICAgIHQgPSByZmM1OTg3ZGVjb2RlKHQpO1xuICAgICAgICAgIHQgPSByZmMyMDQ3ZGVjb2RlKHQpO1xuICAgICAgICAgIHJldHVybiBmaXh1cEVuY29kaW5nKHQpO1xuICAgICAgICB9XG4gICAgICAgIG4gPSBmdW5jdGlvbiByZmMyMjMxZ2V0cGFyYW0odCkge1xuICAgICAgICAgIGNvbnN0IGUgPSBbXTtcbiAgICAgICAgICBsZXQgbjtcbiAgICAgICAgICBjb25zdCBpID0gdG9QYXJhbVJlZ0V4cChcImZpbGVuYW1lXFxcXCooKD8hMFxcXFxkKVxcXFxkKykoXFxcXCo/KVwiLCBcImlnXCIpO1xuICAgICAgICAgIGZvciAoOyBudWxsICE9PSAobiA9IGkuZXhlYyh0KSk7KSB7XG4gICAgICAgICAgICBsZXQgWywgdCwgaSwgcl0gPSBuO1xuICAgICAgICAgICAgdCA9IHBhcnNlSW50KHQsIDEwKTtcbiAgICAgICAgICAgIGlmICh0IGluIGUpIHtcbiAgICAgICAgICAgICAgaWYgKDAgPT09IHQpIGJyZWFrO1xuICAgICAgICAgICAgfSBlbHNlIGVbdF0gPSBbaSwgcl07XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHIgPSBbXTtcbiAgICAgICAgICBmb3IgKGxldCB0ID0gMDsgdCA8IGUubGVuZ3RoICYmIHQgaW4gZTsgKyt0KSB7XG4gICAgICAgICAgICBsZXQgW24sIGldID0gZVt0XTtcbiAgICAgICAgICAgIGkgPSByZmMyNjE2dW5xdW90ZShpKTtcbiAgICAgICAgICAgIGlmIChuKSB7XG4gICAgICAgICAgICAgIGkgPSB1bmVzY2FwZShpKTtcbiAgICAgICAgICAgICAgMCA9PT0gdCAmJiAoaSA9IHJmYzU5ODdkZWNvZGUoaSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgci5wdXNoKGkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gci5qb2luKFwiXCIpO1xuICAgICAgICB9KHQpO1xuICAgICAgICBpZiAobikge1xuICAgICAgICAgIHJldHVybiBmaXh1cEVuY29kaW5nKHJmYzIwNDdkZWNvZGUobikpO1xuICAgICAgICB9XG4gICAgICAgIG4gPSB0b1BhcmFtUmVnRXhwKFwiZmlsZW5hbWVcIiwgXCJpXCIpLmV4ZWModCk7XG4gICAgICAgIGlmIChuKSB7XG4gICAgICAgICAgbiA9IG5bMV07XG4gICAgICAgICAgbGV0IHQgPSByZmMyNjE2dW5xdW90ZShuKTtcbiAgICAgICAgICB0ID0gcmZjMjA0N2RlY29kZSh0KTtcbiAgICAgICAgICByZXR1cm4gZml4dXBFbmNvZGluZyh0KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiB0b1BhcmFtUmVnRXhwKHQsIGUpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChcIig/Ol58OylcXFxccypcIiArIHQgKyAnXFxcXHMqPVxcXFxzKihbXlwiO1xcXFxzXVteO1xcXFxzXSp8XCIoPzpbXlwiXFxcXFxcXFxdfFxcXFxcXFxcXCI/KStcIj8pJywgZSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdGV4dGRlY29kZSh0LCBuKSB7XG4gICAgICAgICAgaWYgKHQpIHtcbiAgICAgICAgICAgIGlmICghL15bXFx4MDAtXFx4RkZdKyQvLnRlc3QobikpIHJldHVybiBuO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgciA9IG5ldyBUZXh0RGVjb2Rlcih0LCB7XG4gICAgICAgICAgICAgICAgICBmYXRhbDogITBcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBzID0gKDAsIGkuc3RyaW5nVG9CeXRlcykobik7XG4gICAgICAgICAgICAgIG4gPSByLmRlY29kZShzKTtcbiAgICAgICAgICAgICAgZSA9ICExO1xuICAgICAgICAgICAgfSBjYXRjaCAoX3VudXNlZDEzKSB7fVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBmaXh1cEVuY29kaW5nKHQpIHtcbiAgICAgICAgICBpZiAoZSAmJiAvW1xceDgwLVxceGZmXS8udGVzdCh0KSkge1xuICAgICAgICAgICAgdCA9IHRleHRkZWNvZGUoXCJ1dGYtOFwiLCB0KTtcbiAgICAgICAgICAgIGUgJiYgKHQgPSB0ZXh0ZGVjb2RlKFwiaXNvLTg4NTktMVwiLCB0KSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0O1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHJmYzI2MTZ1bnF1b3RlKHQpIHtcbiAgICAgICAgICBpZiAodC5zdGFydHNXaXRoKCdcIicpKSB7XG4gICAgICAgICAgICBjb25zdCBlID0gdC5zbGljZSgxKS5zcGxpdCgnXFxcXFwiJyk7XG4gICAgICAgICAgICBmb3IgKGxldCB0ID0gMDsgdCA8IGUubGVuZ3RoOyArK3QpIHtcbiAgICAgICAgICAgICAgY29uc3QgbiA9IGVbdF0uaW5kZXhPZignXCInKTtcbiAgICAgICAgICAgICAgaWYgKC0xICE9PSBuKSB7XG4gICAgICAgICAgICAgICAgZVt0XSA9IGVbdF0uc2xpY2UoMCwgbik7XG4gICAgICAgICAgICAgICAgZS5sZW5ndGggPSB0ICsgMTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlW3RdID0gZVt0XS5yZXBsYWNlQWxsKC9cXFxcKC4pL2csIFwiJDFcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ID0gZS5qb2luKCdcIicpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdDtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiByZmM1OTg3ZGVjb2RlKHQpIHtcbiAgICAgICAgICBjb25zdCBlID0gdC5pbmRleE9mKFwiJ1wiKTtcbiAgICAgICAgICBpZiAoLTEgPT09IGUpIHJldHVybiB0O1xuICAgICAgICAgIHJldHVybiB0ZXh0ZGVjb2RlKHQuc2xpY2UoMCwgZSksIHQuc2xpY2UoZSArIDEpLnJlcGxhY2UoL15bXiddKicvLCBcIlwiKSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gcmZjMjA0N2RlY29kZSh0KSB7XG4gICAgICAgICAgcmV0dXJuICF0LnN0YXJ0c1dpdGgoXCI9P1wiKSB8fCAvW1xceDAwLVxceDE5XFx4ODAtXFx4ZmZdLy50ZXN0KHQpID8gdCA6IHQucmVwbGFjZUFsbCgvPVxcPyhbXFx3LV0qKVxcPyhbUXFCYl0pXFw/KCg/OlteP118XFw/KD8hPSkpKilcXD89L2csIGZ1bmN0aW9uICh0LCBlLCBuLCBpKSB7XG4gICAgICAgICAgICBpZiAoXCJxXCIgPT09IG4gfHwgXCJRXCIgPT09IG4pIHJldHVybiB0ZXh0ZGVjb2RlKGUsIGkgPSAoaSA9IGkucmVwbGFjZUFsbChcIl9cIiwgXCIgXCIpKS5yZXBsYWNlQWxsKC89KFswLTlhLWZBLUZdezJ9KS9nLCBmdW5jdGlvbiAodCwgZSkge1xuICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChlLCAxNikpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgaSA9IGF0b2IoaSk7XG4gICAgICAgICAgICB9IGNhdGNoIChfdW51c2VkMTQpIHt9XG4gICAgICAgICAgICByZXR1cm4gdGV4dGRlY29kZShlLCBpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgIH07XG4gICAgICBuKDg5KTtcbiAgICAgIG4oMTQ4KTtcbiAgICAgIHZhciBpID0gbigxKTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICB2YWx1ZTogITBcbiAgICAgIH0pO1xuICAgICAgZS5QREZOZXR3b3JrU3RyZWFtID0gdm9pZCAwO1xuICAgICAgbig4OSk7XG4gICAgICB2YXIgaSA9IG4oMSksXG4gICAgICAgIHIgPSBuKDE4MSk7XG4gICAgICBjbGFzcyBOZXR3b3JrTWFuYWdlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHQpIHtcbiAgICAgICAgICBsZXQgZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzFdID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgICAgICAgdGhpcy51cmwgPSB0O1xuICAgICAgICAgIHRoaXMuaXNIdHRwID0gL15odHRwcz86L2kudGVzdCh0KTtcbiAgICAgICAgICB0aGlzLmh0dHBIZWFkZXJzID0gdGhpcy5pc0h0dHAgJiYgZS5odHRwSGVhZGVycyB8fCBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIHRoaXMud2l0aENyZWRlbnRpYWxzID0gZS53aXRoQ3JlZGVudGlhbHMgfHwgITE7XG4gICAgICAgICAgdGhpcy5jdXJyWGhySWQgPSAwO1xuICAgICAgICAgIHRoaXMucGVuZGluZ1JlcXVlc3RzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgfVxuICAgICAgICByZXF1ZXN0UmFuZ2UodCwgZSwgbikge1xuICAgICAgICAgIGNvbnN0IGkgPSB7XG4gICAgICAgICAgICBiZWdpbjogdCxcbiAgICAgICAgICAgIGVuZDogZVxuICAgICAgICAgIH07XG4gICAgICAgICAgZm9yIChjb25zdCB0IGluIG4pIGlbdF0gPSBuW3RdO1xuICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QoaSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVxdWVzdEZ1bGwodCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QodCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVxdWVzdCh0KSB7XG4gICAgICAgICAgY29uc3QgZSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpLFxuICAgICAgICAgICAgbiA9IHRoaXMuY3VyclhocklkKyssXG4gICAgICAgICAgICBpID0gdGhpcy5wZW5kaW5nUmVxdWVzdHNbbl0gPSB7XG4gICAgICAgICAgICAgIHhocjogZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICBlLm9wZW4oXCJHRVRcIiwgdGhpcy51cmwpO1xuICAgICAgICAgIGUud2l0aENyZWRlbnRpYWxzID0gdGhpcy53aXRoQ3JlZGVudGlhbHM7XG4gICAgICAgICAgZm9yIChjb25zdCB0IGluIHRoaXMuaHR0cEhlYWRlcnMpIHtcbiAgICAgICAgICAgIGNvbnN0IG4gPSB0aGlzLmh0dHBIZWFkZXJzW3RdO1xuICAgICAgICAgICAgdm9pZCAwICE9PSBuICYmIGUuc2V0UmVxdWVzdEhlYWRlcih0LCBuKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMuaXNIdHRwICYmIFwiYmVnaW5cIiBpbiB0ICYmIFwiZW5kXCIgaW4gdCkge1xuICAgICAgICAgICAgZS5zZXRSZXF1ZXN0SGVhZGVyKFwiUmFuZ2VcIiwgXCJieXRlcz1cIi5jb25jYXQodC5iZWdpbiwgXCItXCIpLmNvbmNhdCh0LmVuZCAtIDEpKTtcbiAgICAgICAgICAgIGkuZXhwZWN0ZWRTdGF0dXMgPSAyMDY7XG4gICAgICAgICAgfSBlbHNlIGkuZXhwZWN0ZWRTdGF0dXMgPSAyMDA7XG4gICAgICAgICAgZS5yZXNwb25zZVR5cGUgPSBcImFycmF5YnVmZmVyXCI7XG4gICAgICAgICAgdC5vbkVycm9yICYmIChlLm9uZXJyb3IgPSBmdW5jdGlvbiAobikge1xuICAgICAgICAgICAgdC5vbkVycm9yKGUuc3RhdHVzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBlLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IHRoaXMub25TdGF0ZUNoYW5nZS5iaW5kKHRoaXMsIG4pO1xuICAgICAgICAgIGUub25wcm9ncmVzcyA9IHRoaXMub25Qcm9ncmVzcy5iaW5kKHRoaXMsIG4pO1xuICAgICAgICAgIGkub25IZWFkZXJzUmVjZWl2ZWQgPSB0Lm9uSGVhZGVyc1JlY2VpdmVkO1xuICAgICAgICAgIGkub25Eb25lID0gdC5vbkRvbmU7XG4gICAgICAgICAgaS5vbkVycm9yID0gdC5vbkVycm9yO1xuICAgICAgICAgIGkub25Qcm9ncmVzcyA9IHQub25Qcm9ncmVzcztcbiAgICAgICAgICBlLnNlbmQobnVsbCk7XG4gICAgICAgICAgcmV0dXJuIG47XG4gICAgICAgIH1cbiAgICAgICAgb25Qcm9ncmVzcyh0LCBlKSB7XG4gICAgICAgICAgdmFyIF9uJG9uUHJvZ3Jlc3M7XG4gICAgICAgICAgY29uc3QgbiA9IHRoaXMucGVuZGluZ1JlcXVlc3RzW3RdO1xuICAgICAgICAgIG4gJiYgKChfbiRvblByb2dyZXNzID0gbi5vblByb2dyZXNzKSA9PT0gbnVsbCB8fCBfbiRvblByb2dyZXNzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfbiRvblByb2dyZXNzLmNhbGwobiwgZSkpO1xuICAgICAgICB9XG4gICAgICAgIG9uU3RhdGVDaGFuZ2UodCwgZSkge1xuICAgICAgICAgIHZhciBfbiRvbkVycm9yMztcbiAgICAgICAgICBjb25zdCBuID0gdGhpcy5wZW5kaW5nUmVxdWVzdHNbdF07XG4gICAgICAgICAgaWYgKCFuKSByZXR1cm47XG4gICAgICAgICAgY29uc3QgciA9IG4ueGhyO1xuICAgICAgICAgIGlmIChyLnJlYWR5U3RhdGUgPj0gMiAmJiBuLm9uSGVhZGVyc1JlY2VpdmVkKSB7XG4gICAgICAgICAgICBuLm9uSGVhZGVyc1JlY2VpdmVkKCk7XG4gICAgICAgICAgICBkZWxldGUgbi5vbkhlYWRlcnNSZWNlaXZlZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKDQgIT09IHIucmVhZHlTdGF0ZSkgcmV0dXJuO1xuICAgICAgICAgIGlmICghKHQgaW4gdGhpcy5wZW5kaW5nUmVxdWVzdHMpKSByZXR1cm47XG4gICAgICAgICAgZGVsZXRlIHRoaXMucGVuZGluZ1JlcXVlc3RzW3RdO1xuICAgICAgICAgIGlmICgwID09PSByLnN0YXR1cyAmJiB0aGlzLmlzSHR0cCkge1xuICAgICAgICAgICAgdmFyIF9uJG9uRXJyb3I7XG4gICAgICAgICAgICAoX24kb25FcnJvciA9IG4ub25FcnJvcikgPT09IG51bGwgfHwgX24kb25FcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogX24kb25FcnJvci5jYWxsKG4sIHIuc3RhdHVzKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcyA9IHIuc3RhdHVzIHx8IDIwMDtcbiAgICAgICAgICBpZiAoISgyMDAgPT09IHMgJiYgMjA2ID09PSBuLmV4cGVjdGVkU3RhdHVzKSAmJiBzICE9PSBuLmV4cGVjdGVkU3RhdHVzKSB7XG4gICAgICAgICAgICB2YXIgX24kb25FcnJvcjI7XG4gICAgICAgICAgICAoX24kb25FcnJvcjIgPSBuLm9uRXJyb3IpID09PSBudWxsIHx8IF9uJG9uRXJyb3IyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfbiRvbkVycm9yMi5jYWxsKG4sIHIuc3RhdHVzKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgYSA9IGZ1bmN0aW9uIGdldEFycmF5QnVmZmVyKHQpIHtcbiAgICAgICAgICAgIGNvbnN0IGUgPSB0LnJlc3BvbnNlO1xuICAgICAgICAgICAgcmV0dXJuIFwic3RyaW5nXCIgIT0gdHlwZW9mIGUgPyBlIDogKDAsIGkuc3RyaW5nVG9CeXRlcykoZSkuYnVmZmVyO1xuICAgICAgICAgIH0ocik7XG4gICAgICAgICAgaWYgKDIwNiA9PT0gcykge1xuICAgICAgICAgICAgY29uc3QgdCA9IHIuZ2V0UmVzcG9uc2VIZWFkZXIoXCJDb250ZW50LVJhbmdlXCIpLFxuICAgICAgICAgICAgICBlID0gL2J5dGVzIChcXGQrKS0oXFxkKylcXC8oXFxkKykvLmV4ZWModCk7XG4gICAgICAgICAgICBuLm9uRG9uZSh7XG4gICAgICAgICAgICAgIGJlZ2luOiBwYXJzZUludChlWzFdLCAxMCksXG4gICAgICAgICAgICAgIGNodW5rOiBhXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2UgYSA/IG4ub25Eb25lKHtcbiAgICAgICAgICAgIGJlZ2luOiAwLFxuICAgICAgICAgICAgY2h1bms6IGFcbiAgICAgICAgICB9KSA6IChfbiRvbkVycm9yMyA9IG4ub25FcnJvcikgPT09IG51bGwgfHwgX24kb25FcnJvcjMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9uJG9uRXJyb3IzLmNhbGwobiwgci5zdGF0dXMpO1xuICAgICAgICB9XG4gICAgICAgIGdldFJlcXVlc3RYaHIodCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnBlbmRpbmdSZXF1ZXN0c1t0XS54aHI7XG4gICAgICAgIH1cbiAgICAgICAgaXNQZW5kaW5nUmVxdWVzdCh0KSB7XG4gICAgICAgICAgcmV0dXJuIHQgaW4gdGhpcy5wZW5kaW5nUmVxdWVzdHM7XG4gICAgICAgIH1cbiAgICAgICAgYWJvcnRSZXF1ZXN0KHQpIHtcbiAgICAgICAgICBjb25zdCBlID0gdGhpcy5wZW5kaW5nUmVxdWVzdHNbdF0ueGhyO1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLnBlbmRpbmdSZXF1ZXN0c1t0XTtcbiAgICAgICAgICBlLmFib3J0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGUuUERGTmV0d29ya1N0cmVhbSA9IGNsYXNzIFBERk5ldHdvcmtTdHJlYW0ge1xuICAgICAgICBjb25zdHJ1Y3Rvcih0KSB7XG4gICAgICAgICAgdGhpcy5fc291cmNlID0gdDtcbiAgICAgICAgICB0aGlzLl9tYW5hZ2VyID0gbmV3IE5ldHdvcmtNYW5hZ2VyKHQudXJsLCB7XG4gICAgICAgICAgICBodHRwSGVhZGVyczogdC5odHRwSGVhZGVycyxcbiAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdC53aXRoQ3JlZGVudGlhbHNcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLl9yYW5nZUNodW5rU2l6ZSA9IHQucmFuZ2VDaHVua1NpemU7XG4gICAgICAgICAgdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIgPSBudWxsO1xuICAgICAgICAgIHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBfb25SYW5nZVJlcXVlc3RSZWFkZXJDbG9zZWQodCkge1xuICAgICAgICAgIGNvbnN0IGUgPSB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLmluZGV4T2YodCk7XG4gICAgICAgICAgZSA+PSAwICYmIHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMuc3BsaWNlKGUsIDEpO1xuICAgICAgICB9XG4gICAgICAgIGdldEZ1bGxSZWFkZXIoKSB7XG4gICAgICAgICAgKDAsIGkuYXNzZXJ0KSghdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIsIFwiUERGTmV0d29ya1N0cmVhbS5nZXRGdWxsUmVhZGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBvbmNlLlwiKTtcbiAgICAgICAgICB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciA9IG5ldyBQREZOZXR3b3JrU3RyZWFtRnVsbFJlcXVlc3RSZWFkZXIodGhpcy5fbWFuYWdlciwgdGhpcy5fc291cmNlKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0UmFuZ2VSZWFkZXIodCwgZSkge1xuICAgICAgICAgIGNvbnN0IG4gPSBuZXcgUERGTmV0d29ya1N0cmVhbVJhbmdlUmVxdWVzdFJlYWRlcih0aGlzLl9tYW5hZ2VyLCB0LCBlKTtcbiAgICAgICAgICBuLm9uQ2xvc2VkID0gdGhpcy5fb25SYW5nZVJlcXVlc3RSZWFkZXJDbG9zZWQuYmluZCh0aGlzKTtcbiAgICAgICAgICB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnB1c2gobik7XG4gICAgICAgICAgcmV0dXJuIG47XG4gICAgICAgIH1cbiAgICAgICAgY2FuY2VsQWxsUmVxdWVzdHModCkge1xuICAgICAgICAgIHZhciBfdGhpcyRfZnVsbFJlcXVlc3RSZWExMDtcbiAgICAgICAgICAoX3RoaXMkX2Z1bGxSZXF1ZXN0UmVhMTAgPSB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcikgPT09IG51bGwgfHwgX3RoaXMkX2Z1bGxSZXF1ZXN0UmVhMTAgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJF9mdWxsUmVxdWVzdFJlYTEwLmNhbmNlbCh0KTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGUgb2YgdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycy5zbGljZSgwKSkgZS5jYW5jZWwodCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjbGFzcyBQREZOZXR3b3JrU3RyZWFtRnVsbFJlcXVlc3RSZWFkZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcih0LCBlKSB7XG4gICAgICAgICAgdGhpcy5fbWFuYWdlciA9IHQ7XG4gICAgICAgICAgY29uc3QgbiA9IHtcbiAgICAgICAgICAgIG9uSGVhZGVyc1JlY2VpdmVkOiB0aGlzLl9vbkhlYWRlcnNSZWNlaXZlZC5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgb25Eb25lOiB0aGlzLl9vbkRvbmUuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIG9uRXJyb3I6IHRoaXMuX29uRXJyb3IuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIG9uUHJvZ3Jlc3M6IHRoaXMuX29uUHJvZ3Jlc3MuYmluZCh0aGlzKVxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5fdXJsID0gZS51cmw7XG4gICAgICAgICAgdGhpcy5fZnVsbFJlcXVlc3RJZCA9IHQucmVxdWVzdEZ1bGwobik7XG4gICAgICAgICAgdGhpcy5faGVhZGVyc1JlY2VpdmVkQ2FwYWJpbGl0eSA9IG5ldyBpLlByb21pc2VDYXBhYmlsaXR5KCk7XG4gICAgICAgICAgdGhpcy5fZGlzYWJsZVJhbmdlID0gZS5kaXNhYmxlUmFuZ2UgfHwgITE7XG4gICAgICAgICAgdGhpcy5fY29udGVudExlbmd0aCA9IGUubGVuZ3RoO1xuICAgICAgICAgIHRoaXMuX3JhbmdlQ2h1bmtTaXplID0gZS5yYW5nZUNodW5rU2l6ZTtcbiAgICAgICAgICB0aGlzLl9yYW5nZUNodW5rU2l6ZSB8fCB0aGlzLl9kaXNhYmxlUmFuZ2UgfHwgKHRoaXMuX2Rpc2FibGVSYW5nZSA9ICEwKTtcbiAgICAgICAgICB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZCA9ICExO1xuICAgICAgICAgIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQgPSAhMTtcbiAgICAgICAgICB0aGlzLl9jYWNoZWRDaHVua3MgPSBbXTtcbiAgICAgICAgICB0aGlzLl9yZXF1ZXN0cyA9IFtdO1xuICAgICAgICAgIHRoaXMuX2RvbmUgPSAhMTtcbiAgICAgICAgICB0aGlzLl9zdG9yZWRFcnJvciA9IHZvaWQgMDtcbiAgICAgICAgICB0aGlzLl9maWxlbmFtZSA9IG51bGw7XG4gICAgICAgICAgdGhpcy5vblByb2dyZXNzID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBfb25IZWFkZXJzUmVjZWl2ZWQoKSB7XG4gICAgICAgICAgY29uc3QgdCA9IHRoaXMuX2Z1bGxSZXF1ZXN0SWQsXG4gICAgICAgICAgICBlID0gdGhpcy5fbWFuYWdlci5nZXRSZXF1ZXN0WGhyKHQpLFxuICAgICAgICAgICAgZ2V0UmVzcG9uc2VIZWFkZXIgPSB0ID0+IGUuZ2V0UmVzcG9uc2VIZWFkZXIodCksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFsbG93UmFuZ2VSZXF1ZXN0czogbixcbiAgICAgICAgICAgICAgc3VnZ2VzdGVkTGVuZ3RoOiBpXG4gICAgICAgICAgICB9ID0gKDAsIHIudmFsaWRhdGVSYW5nZVJlcXVlc3RDYXBhYmlsaXRpZXMpKHtcbiAgICAgICAgICAgICAgZ2V0UmVzcG9uc2VIZWFkZXI6IGdldFJlc3BvbnNlSGVhZGVyLFxuICAgICAgICAgICAgICBpc0h0dHA6IHRoaXMuX21hbmFnZXIuaXNIdHRwLFxuICAgICAgICAgICAgICByYW5nZUNodW5rU2l6ZTogdGhpcy5fcmFuZ2VDaHVua1NpemUsXG4gICAgICAgICAgICAgIGRpc2FibGVSYW5nZTogdGhpcy5fZGlzYWJsZVJhbmdlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICBuICYmICh0aGlzLl9pc1JhbmdlU3VwcG9ydGVkID0gITApO1xuICAgICAgICAgIHRoaXMuX2NvbnRlbnRMZW5ndGggPSBpIHx8IHRoaXMuX2NvbnRlbnRMZW5ndGg7XG4gICAgICAgICAgdGhpcy5fZmlsZW5hbWUgPSAoMCwgci5leHRyYWN0RmlsZW5hbWVGcm9tSGVhZGVyKShnZXRSZXNwb25zZUhlYWRlcik7XG4gICAgICAgICAgdGhpcy5faXNSYW5nZVN1cHBvcnRlZCAmJiB0aGlzLl9tYW5hZ2VyLmFib3J0UmVxdWVzdCh0KTtcbiAgICAgICAgICB0aGlzLl9oZWFkZXJzUmVjZWl2ZWRDYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgICBfb25Eb25lKHQpIHtcbiAgICAgICAgICBpZiAodCkgaWYgKHRoaXMuX3JlcXVlc3RzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX3JlcXVlc3RzLnNoaWZ0KCkucmVzb2x2ZSh7XG4gICAgICAgICAgICAgIHZhbHVlOiB0LmNodW5rLFxuICAgICAgICAgICAgICBkb25lOiAhMVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHRoaXMuX2NhY2hlZENodW5rcy5wdXNoKHQuY2h1bmspO1xuICAgICAgICAgIHRoaXMuX2RvbmUgPSAhMDtcbiAgICAgICAgICBpZiAoISh0aGlzLl9jYWNoZWRDaHVua3MubGVuZ3RoID4gMCkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdCBvZiB0aGlzLl9yZXF1ZXN0cykgdC5yZXNvbHZlKHtcbiAgICAgICAgICAgICAgdmFsdWU6IHZvaWQgMCxcbiAgICAgICAgICAgICAgZG9uZTogITBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5fcmVxdWVzdHMubGVuZ3RoID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX29uRXJyb3IodCkge1xuICAgICAgICAgIHRoaXMuX3N0b3JlZEVycm9yID0gKDAsIHIuY3JlYXRlUmVzcG9uc2VTdGF0dXNFcnJvcikodCwgdGhpcy5fdXJsKTtcbiAgICAgICAgICB0aGlzLl9oZWFkZXJzUmVjZWl2ZWRDYXBhYmlsaXR5LnJlamVjdCh0aGlzLl9zdG9yZWRFcnJvcik7XG4gICAgICAgICAgZm9yIChjb25zdCB0IG9mIHRoaXMuX3JlcXVlc3RzKSB0LnJlamVjdCh0aGlzLl9zdG9yZWRFcnJvcik7XG4gICAgICAgICAgdGhpcy5fcmVxdWVzdHMubGVuZ3RoID0gMDtcbiAgICAgICAgICB0aGlzLl9jYWNoZWRDaHVua3MubGVuZ3RoID0gMDtcbiAgICAgICAgfVxuICAgICAgICBfb25Qcm9ncmVzcyh0KSB7XG4gICAgICAgICAgdmFyIF90aGlzJG9uUHJvZ3Jlc3MzO1xuICAgICAgICAgIChfdGhpcyRvblByb2dyZXNzMyA9IHRoaXMub25Qcm9ncmVzcykgPT09IG51bGwgfHwgX3RoaXMkb25Qcm9ncmVzczMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJG9uUHJvZ3Jlc3MzLmNhbGwodGhpcywge1xuICAgICAgICAgICAgbG9hZGVkOiB0LmxvYWRlZCxcbiAgICAgICAgICAgIHRvdGFsOiB0Lmxlbmd0aENvbXB1dGFibGUgPyB0LnRvdGFsIDogdGhpcy5fY29udGVudExlbmd0aFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGdldCBmaWxlbmFtZSgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fZmlsZW5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGlzUmFuZ2VTdXBwb3J0ZWQoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQ7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGlzU3RyZWFtaW5nU3VwcG9ydGVkKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZDtcbiAgICAgICAgfVxuICAgICAgICBnZXQgY29udGVudExlbmd0aCgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fY29udGVudExlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBnZXQgaGVhZGVyc1JlYWR5KCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9oZWFkZXJzUmVjZWl2ZWRDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgIH1cbiAgICAgICAgYXN5bmMgcmVhZCgpIHtcbiAgICAgICAgICBpZiAodGhpcy5fc3RvcmVkRXJyb3IpIHRocm93IHRoaXMuX3N0b3JlZEVycm9yO1xuICAgICAgICAgIGlmICh0aGlzLl9jYWNoZWRDaHVua3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuX2NhY2hlZENodW5rcy5zaGlmdCgpLFxuICAgICAgICAgICAgICBkb25lOiAhMVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMuX2RvbmUpIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwLFxuICAgICAgICAgICAgZG9uZTogITBcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IHQgPSBuZXcgaS5Qcm9taXNlQ2FwYWJpbGl0eSgpO1xuICAgICAgICAgIHRoaXMuX3JlcXVlc3RzLnB1c2godCk7XG4gICAgICAgICAgcmV0dXJuIHQucHJvbWlzZTtcbiAgICAgICAgfVxuICAgICAgICBjYW5jZWwodCkge1xuICAgICAgICAgIHRoaXMuX2RvbmUgPSAhMDtcbiAgICAgICAgICB0aGlzLl9oZWFkZXJzUmVjZWl2ZWRDYXBhYmlsaXR5LnJlamVjdCh0KTtcbiAgICAgICAgICBmb3IgKGNvbnN0IHQgb2YgdGhpcy5fcmVxdWVzdHMpIHQucmVzb2x2ZSh7XG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwLFxuICAgICAgICAgICAgZG9uZTogITBcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLl9yZXF1ZXN0cy5sZW5ndGggPSAwO1xuICAgICAgICAgIHRoaXMuX21hbmFnZXIuaXNQZW5kaW5nUmVxdWVzdCh0aGlzLl9mdWxsUmVxdWVzdElkKSAmJiB0aGlzLl9tYW5hZ2VyLmFib3J0UmVxdWVzdCh0aGlzLl9mdWxsUmVxdWVzdElkKTtcbiAgICAgICAgICB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNsYXNzIFBERk5ldHdvcmtTdHJlYW1SYW5nZVJlcXVlc3RSZWFkZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcih0LCBlLCBuKSB7XG4gICAgICAgICAgdGhpcy5fbWFuYWdlciA9IHQ7XG4gICAgICAgICAgY29uc3QgaSA9IHtcbiAgICAgICAgICAgIG9uRG9uZTogdGhpcy5fb25Eb25lLmJpbmQodGhpcyksXG4gICAgICAgICAgICBvbkVycm9yOiB0aGlzLl9vbkVycm9yLmJpbmQodGhpcyksXG4gICAgICAgICAgICBvblByb2dyZXNzOiB0aGlzLl9vblByb2dyZXNzLmJpbmQodGhpcylcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMuX3VybCA9IHQudXJsO1xuICAgICAgICAgIHRoaXMuX3JlcXVlc3RJZCA9IHQucmVxdWVzdFJhbmdlKGUsIG4sIGkpO1xuICAgICAgICAgIHRoaXMuX3JlcXVlc3RzID0gW107XG4gICAgICAgICAgdGhpcy5fcXVldWVkQ2h1bmsgPSBudWxsO1xuICAgICAgICAgIHRoaXMuX2RvbmUgPSAhMTtcbiAgICAgICAgICB0aGlzLl9zdG9yZWRFcnJvciA9IHZvaWQgMDtcbiAgICAgICAgICB0aGlzLm9uUHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgIHRoaXMub25DbG9zZWQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIF9jbG9zZSgpIHtcbiAgICAgICAgICB2YXIgX3RoaXMkb25DbG9zZWQ7XG4gICAgICAgICAgKF90aGlzJG9uQ2xvc2VkID0gdGhpcy5vbkNsb3NlZCkgPT09IG51bGwgfHwgX3RoaXMkb25DbG9zZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJG9uQ2xvc2VkLmNhbGwodGhpcywgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgX29uRG9uZSh0KSB7XG4gICAgICAgICAgY29uc3QgZSA9IHQuY2h1bms7XG4gICAgICAgICAgaWYgKHRoaXMuX3JlcXVlc3RzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuX3JlcXVlc3RzLnNoaWZ0KCkucmVzb2x2ZSh7XG4gICAgICAgICAgICAgIHZhbHVlOiBlLFxuICAgICAgICAgICAgICBkb25lOiAhMVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHRoaXMuX3F1ZXVlZENodW5rID0gZTtcbiAgICAgICAgICB0aGlzLl9kb25lID0gITA7XG4gICAgICAgICAgZm9yIChjb25zdCB0IG9mIHRoaXMuX3JlcXVlc3RzKSB0LnJlc29sdmUoe1xuICAgICAgICAgICAgdmFsdWU6IHZvaWQgMCxcbiAgICAgICAgICAgIGRvbmU6ICEwXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5fcmVxdWVzdHMubGVuZ3RoID0gMDtcbiAgICAgICAgICB0aGlzLl9jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIF9vbkVycm9yKHQpIHtcbiAgICAgICAgICB0aGlzLl9zdG9yZWRFcnJvciA9ICgwLCByLmNyZWF0ZVJlc3BvbnNlU3RhdHVzRXJyb3IpKHQsIHRoaXMuX3VybCk7XG4gICAgICAgICAgZm9yIChjb25zdCB0IG9mIHRoaXMuX3JlcXVlc3RzKSB0LnJlamVjdCh0aGlzLl9zdG9yZWRFcnJvcik7XG4gICAgICAgICAgdGhpcy5fcmVxdWVzdHMubGVuZ3RoID0gMDtcbiAgICAgICAgICB0aGlzLl9xdWV1ZWRDaHVuayA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgX29uUHJvZ3Jlc3ModCkge1xuICAgICAgICAgIHZhciBfdGhpcyRvblByb2dyZXNzNDtcbiAgICAgICAgICB0aGlzLmlzU3RyZWFtaW5nU3VwcG9ydGVkIHx8ICgoX3RoaXMkb25Qcm9ncmVzczQgPSB0aGlzLm9uUHJvZ3Jlc3MpID09PSBudWxsIHx8IF90aGlzJG9uUHJvZ3Jlc3M0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRvblByb2dyZXNzNC5jYWxsKHRoaXMsIHtcbiAgICAgICAgICAgIGxvYWRlZDogdC5sb2FkZWRcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGlzU3RyZWFtaW5nU3VwcG9ydGVkKCkge1xuICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgICAgfVxuICAgICAgICBhc3luYyByZWFkKCkge1xuICAgICAgICAgIGlmICh0aGlzLl9zdG9yZWRFcnJvcikgdGhyb3cgdGhpcy5fc3RvcmVkRXJyb3I7XG4gICAgICAgICAgaWYgKG51bGwgIT09IHRoaXMuX3F1ZXVlZENodW5rKSB7XG4gICAgICAgICAgICBjb25zdCB0ID0gdGhpcy5fcXVldWVkQ2h1bms7XG4gICAgICAgICAgICB0aGlzLl9xdWV1ZWRDaHVuayA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB2YWx1ZTogdCxcbiAgICAgICAgICAgICAgZG9uZTogITFcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLl9kb25lKSByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHZvaWQgMCxcbiAgICAgICAgICAgIGRvbmU6ICEwXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCB0ID0gbmV3IGkuUHJvbWlzZUNhcGFiaWxpdHkoKTtcbiAgICAgICAgICB0aGlzLl9yZXF1ZXN0cy5wdXNoKHQpO1xuICAgICAgICAgIHJldHVybiB0LnByb21pc2U7XG4gICAgICAgIH1cbiAgICAgICAgY2FuY2VsKHQpIHtcbiAgICAgICAgICB0aGlzLl9kb25lID0gITA7XG4gICAgICAgICAgZm9yIChjb25zdCB0IG9mIHRoaXMuX3JlcXVlc3RzKSB0LnJlc29sdmUoe1xuICAgICAgICAgICAgdmFsdWU6IHZvaWQgMCxcbiAgICAgICAgICAgIGRvbmU6ICEwXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5fcmVxdWVzdHMubGVuZ3RoID0gMDtcbiAgICAgICAgICB0aGlzLl9tYW5hZ2VyLmlzUGVuZGluZ1JlcXVlc3QodGhpcy5fcmVxdWVzdElkKSAmJiB0aGlzLl9tYW5hZ2VyLmFib3J0UmVxdWVzdCh0aGlzLl9yZXF1ZXN0SWQpO1xuICAgICAgICAgIHRoaXMuX2Nsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICB2YWx1ZTogITBcbiAgICAgIH0pO1xuICAgICAgZS5QREZOb2RlU3RyZWFtID0gdm9pZCAwO1xuICAgICAgbig4OSk7XG4gICAgICBuKDkzKTtcbiAgICAgIG4oMTAxKTtcbiAgICAgIG4oMTAyKTtcbiAgICAgIG4oMTA1KTtcbiAgICAgIG4oMTA3KTtcbiAgICAgIG4oMTA5KTtcbiAgICAgIG4oMTEzKTtcbiAgICAgIG4oMTE2KTtcbiAgICAgIG4oMTIzKTtcbiAgICAgIHZhciBpID0gbigxKSxcbiAgICAgICAgciA9IG4oMTgxKTtcbiAgICAgIGNvbnN0IHMgPSAvXmZpbGU6XFwvXFwvXFwvW2EtekEtWl06XFwvLztcbiAgICAgIGUuUERGTm9kZVN0cmVhbSA9IGNsYXNzIFBERk5vZGVTdHJlYW0ge1xuICAgICAgICBjb25zdHJ1Y3Rvcih0KSB7XG4gICAgICAgICAgdGhpcy5zb3VyY2UgPSB0O1xuICAgICAgICAgIHRoaXMudXJsID0gZnVuY3Rpb24gcGFyc2VVcmwodCkge1xuICAgICAgICAgICAgY29uc3QgZSA9IF9fd2VicGFja19yZXF1aXJlX18oT2JqZWN0KGZ1bmN0aW9uIHdlYnBhY2tNaXNzaW5nTW9kdWxlKCkgeyB2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAndXJsJ1wiKTsgZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnOyB0aHJvdyBlOyB9KCkpKSxcbiAgICAgICAgICAgICAgbiA9IGUucGFyc2UodCk7XG4gICAgICAgICAgICBpZiAoXCJmaWxlOlwiID09PSBuLnByb3RvY29sIHx8IG4uaG9zdCkgcmV0dXJuIG47XG4gICAgICAgICAgICBpZiAoL15bYS16XTpbL1xcXFxdL2kudGVzdCh0KSkgcmV0dXJuIGUucGFyc2UoXCJmaWxlOi8vL1wiLmNvbmNhdCh0KSk7XG4gICAgICAgICAgICBuLmhvc3QgfHwgKG4ucHJvdG9jb2wgPSBcImZpbGU6XCIpO1xuICAgICAgICAgICAgcmV0dXJuIG47XG4gICAgICAgICAgfSh0LnVybCk7XG4gICAgICAgICAgdGhpcy5pc0h0dHAgPSBcImh0dHA6XCIgPT09IHRoaXMudXJsLnByb3RvY29sIHx8IFwiaHR0cHM6XCIgPT09IHRoaXMudXJsLnByb3RvY29sO1xuICAgICAgICAgIHRoaXMuaXNGc1VybCA9IFwiZmlsZTpcIiA9PT0gdGhpcy51cmwucHJvdG9jb2w7XG4gICAgICAgICAgdGhpcy5odHRwSGVhZGVycyA9IHRoaXMuaXNIdHRwICYmIHQuaHR0cEhlYWRlcnMgfHwge307XG4gICAgICAgICAgdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIgPSBudWxsO1xuICAgICAgICAgIHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgX3Byb2dyZXNzaXZlRGF0YUxlbmd0aCgpIHtcbiAgICAgICAgICB2YXIgX3RoaXMkX2Z1bGxSZXF1ZXN0UmVhMTEsIF90aGlzJF9mdWxsUmVxdWVzdFJlYTEyO1xuICAgICAgICAgIHJldHVybiAoX3RoaXMkX2Z1bGxSZXF1ZXN0UmVhMTEgPSAoX3RoaXMkX2Z1bGxSZXF1ZXN0UmVhMTIgPSB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcikgPT09IG51bGwgfHwgX3RoaXMkX2Z1bGxSZXF1ZXN0UmVhMTIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJF9mdWxsUmVxdWVzdFJlYTEyLl9sb2FkZWQpICE9PSBudWxsICYmIF90aGlzJF9mdWxsUmVxdWVzdFJlYTExICE9PSB2b2lkIDAgPyBfdGhpcyRfZnVsbFJlcXVlc3RSZWExMSA6IDA7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0RnVsbFJlYWRlcigpIHtcbiAgICAgICAgICAoMCwgaS5hc3NlcnQpKCF0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciwgXCJQREZOb2RlU3RyZWFtLmdldEZ1bGxSZWFkZXIgY2FuIG9ubHkgYmUgY2FsbGVkIG9uY2UuXCIpO1xuICAgICAgICAgIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyID0gdGhpcy5pc0ZzVXJsID8gbmV3IFBERk5vZGVTdHJlYW1Gc0Z1bGxSZWFkZXIodGhpcykgOiBuZXcgUERGTm9kZVN0cmVhbUZ1bGxSZWFkZXIodGhpcyk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyO1xuICAgICAgICB9XG4gICAgICAgIGdldFJhbmdlUmVhZGVyKHQsIGUpIHtcbiAgICAgICAgICBpZiAoZSA8PSB0aGlzLl9wcm9ncmVzc2l2ZURhdGFMZW5ndGgpIHJldHVybiBudWxsO1xuICAgICAgICAgIGNvbnN0IG4gPSB0aGlzLmlzRnNVcmwgPyBuZXcgUERGTm9kZVN0cmVhbUZzUmFuZ2VSZWFkZXIodGhpcywgdCwgZSkgOiBuZXcgUERGTm9kZVN0cmVhbVJhbmdlUmVhZGVyKHRoaXMsIHQsIGUpO1xuICAgICAgICAgIHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMucHVzaChuKTtcbiAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgfVxuICAgICAgICBjYW5jZWxBbGxSZXF1ZXN0cyh0KSB7XG4gICAgICAgICAgdmFyIF90aGlzJF9mdWxsUmVxdWVzdFJlYTEzO1xuICAgICAgICAgIChfdGhpcyRfZnVsbFJlcXVlc3RSZWExMyA9IHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyKSA9PT0gbnVsbCB8fCBfdGhpcyRfZnVsbFJlcXVlc3RSZWExMyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkX2Z1bGxSZXF1ZXN0UmVhMTMuY2FuY2VsKHQpO1xuICAgICAgICAgIGZvciAoY29uc3QgZSBvZiB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnNsaWNlKDApKSBlLmNhbmNlbCh0KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNsYXNzIEJhc2VGdWxsUmVhZGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IodCkge1xuICAgICAgICAgIHRoaXMuX3VybCA9IHQudXJsO1xuICAgICAgICAgIHRoaXMuX2RvbmUgPSAhMTtcbiAgICAgICAgICB0aGlzLl9zdG9yZWRFcnJvciA9IG51bGw7XG4gICAgICAgICAgdGhpcy5vblByb2dyZXNzID0gbnVsbDtcbiAgICAgICAgICBjb25zdCBlID0gdC5zb3VyY2U7XG4gICAgICAgICAgdGhpcy5fY29udGVudExlbmd0aCA9IGUubGVuZ3RoO1xuICAgICAgICAgIHRoaXMuX2xvYWRlZCA9IDA7XG4gICAgICAgICAgdGhpcy5fZmlsZW5hbWUgPSBudWxsO1xuICAgICAgICAgIHRoaXMuX2Rpc2FibGVSYW5nZSA9IGUuZGlzYWJsZVJhbmdlIHx8ICExO1xuICAgICAgICAgIHRoaXMuX3JhbmdlQ2h1bmtTaXplID0gZS5yYW5nZUNodW5rU2l6ZTtcbiAgICAgICAgICB0aGlzLl9yYW5nZUNodW5rU2l6ZSB8fCB0aGlzLl9kaXNhYmxlUmFuZ2UgfHwgKHRoaXMuX2Rpc2FibGVSYW5nZSA9ICEwKTtcbiAgICAgICAgICB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZCA9ICFlLmRpc2FibGVTdHJlYW07XG4gICAgICAgICAgdGhpcy5faXNSYW5nZVN1cHBvcnRlZCA9ICFlLmRpc2FibGVSYW5nZTtcbiAgICAgICAgICB0aGlzLl9yZWFkYWJsZVN0cmVhbSA9IG51bGw7XG4gICAgICAgICAgdGhpcy5fcmVhZENhcGFiaWxpdHkgPSBuZXcgaS5Qcm9taXNlQ2FwYWJpbGl0eSgpO1xuICAgICAgICAgIHRoaXMuX2hlYWRlcnNDYXBhYmlsaXR5ID0gbmV3IGkuUHJvbWlzZUNhcGFiaWxpdHkoKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgaGVhZGVyc1JlYWR5KCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5wcm9taXNlO1xuICAgICAgICB9XG4gICAgICAgIGdldCBmaWxlbmFtZSgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fZmlsZW5hbWU7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGNvbnRlbnRMZW5ndGgoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRlbnRMZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGlzUmFuZ2VTdXBwb3J0ZWQoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQ7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGlzU3RyZWFtaW5nU3VwcG9ydGVkKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZDtcbiAgICAgICAgfVxuICAgICAgICBhc3luYyByZWFkKCkge1xuICAgICAgICAgIHZhciBfdGhpcyRvblByb2dyZXNzNTtcbiAgICAgICAgICBhd2FpdCB0aGlzLl9yZWFkQ2FwYWJpbGl0eS5wcm9taXNlO1xuICAgICAgICAgIGlmICh0aGlzLl9kb25lKSByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHZvaWQgMCxcbiAgICAgICAgICAgIGRvbmU6ICEwXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAodGhpcy5fc3RvcmVkRXJyb3IpIHRocm93IHRoaXMuX3N0b3JlZEVycm9yO1xuICAgICAgICAgIGNvbnN0IHQgPSB0aGlzLl9yZWFkYWJsZVN0cmVhbS5yZWFkKCk7XG4gICAgICAgICAgaWYgKG51bGwgPT09IHQpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlYWRDYXBhYmlsaXR5ID0gbmV3IGkuUHJvbWlzZUNhcGFiaWxpdHkoKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlYWQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fbG9hZGVkICs9IHQubGVuZ3RoO1xuICAgICAgICAgIChfdGhpcyRvblByb2dyZXNzNSA9IHRoaXMub25Qcm9ncmVzcykgPT09IG51bGwgfHwgX3RoaXMkb25Qcm9ncmVzczUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJG9uUHJvZ3Jlc3M1LmNhbGwodGhpcywge1xuICAgICAgICAgICAgbG9hZGVkOiB0aGlzLl9sb2FkZWQsXG4gICAgICAgICAgICB0b3RhbDogdGhpcy5fY29udGVudExlbmd0aFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogbmV3IFVpbnQ4QXJyYXkodCkuYnVmZmVyLFxuICAgICAgICAgICAgZG9uZTogITFcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGNhbmNlbCh0KSB7XG4gICAgICAgICAgdGhpcy5fcmVhZGFibGVTdHJlYW0gPyB0aGlzLl9yZWFkYWJsZVN0cmVhbS5kZXN0cm95KHQpIDogdGhpcy5fZXJyb3IodCk7XG4gICAgICAgIH1cbiAgICAgICAgX2Vycm9yKHQpIHtcbiAgICAgICAgICB0aGlzLl9zdG9yZWRFcnJvciA9IHQ7XG4gICAgICAgICAgdGhpcy5fcmVhZENhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICAgIF9zZXRSZWFkYWJsZVN0cmVhbSh0KSB7XG4gICAgICAgICAgdGhpcy5fcmVhZGFibGVTdHJlYW0gPSB0O1xuICAgICAgICAgIHQub24oXCJyZWFkYWJsZVwiLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9yZWFkQ2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdC5vbihcImVuZFwiLCAoKSA9PiB7XG4gICAgICAgICAgICB0LmRlc3Ryb3koKTtcbiAgICAgICAgICAgIHRoaXMuX2RvbmUgPSAhMDtcbiAgICAgICAgICAgIHRoaXMuX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0Lm9uKFwiZXJyb3JcIiwgdCA9PiB7XG4gICAgICAgICAgICB0aGlzLl9lcnJvcih0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICAhdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQgJiYgdGhpcy5faXNSYW5nZVN1cHBvcnRlZCAmJiB0aGlzLl9lcnJvcihuZXcgaS5BYm9ydEV4Y2VwdGlvbihcInN0cmVhbWluZyBpcyBkaXNhYmxlZFwiKSk7XG4gICAgICAgICAgdGhpcy5fc3RvcmVkRXJyb3IgJiYgdGhpcy5fcmVhZGFibGVTdHJlYW0uZGVzdHJveSh0aGlzLl9zdG9yZWRFcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNsYXNzIEJhc2VSYW5nZVJlYWRlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHQpIHtcbiAgICAgICAgICB0aGlzLl91cmwgPSB0LnVybDtcbiAgICAgICAgICB0aGlzLl9kb25lID0gITE7XG4gICAgICAgICAgdGhpcy5fc3RvcmVkRXJyb3IgPSBudWxsO1xuICAgICAgICAgIHRoaXMub25Qcm9ncmVzcyA9IG51bGw7XG4gICAgICAgICAgdGhpcy5fbG9hZGVkID0gMDtcbiAgICAgICAgICB0aGlzLl9yZWFkYWJsZVN0cmVhbSA9IG51bGw7XG4gICAgICAgICAgdGhpcy5fcmVhZENhcGFiaWxpdHkgPSBuZXcgaS5Qcm9taXNlQ2FwYWJpbGl0eSgpO1xuICAgICAgICAgIGNvbnN0IGUgPSB0LnNvdXJjZTtcbiAgICAgICAgICB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZCA9ICFlLmRpc2FibGVTdHJlYW07XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGlzU3RyZWFtaW5nU3VwcG9ydGVkKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZDtcbiAgICAgICAgfVxuICAgICAgICBhc3luYyByZWFkKCkge1xuICAgICAgICAgIHZhciBfdGhpcyRvblByb2dyZXNzNjtcbiAgICAgICAgICBhd2FpdCB0aGlzLl9yZWFkQ2FwYWJpbGl0eS5wcm9taXNlO1xuICAgICAgICAgIGlmICh0aGlzLl9kb25lKSByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHZvaWQgMCxcbiAgICAgICAgICAgIGRvbmU6ICEwXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAodGhpcy5fc3RvcmVkRXJyb3IpIHRocm93IHRoaXMuX3N0b3JlZEVycm9yO1xuICAgICAgICAgIGNvbnN0IHQgPSB0aGlzLl9yZWFkYWJsZVN0cmVhbS5yZWFkKCk7XG4gICAgICAgICAgaWYgKG51bGwgPT09IHQpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlYWRDYXBhYmlsaXR5ID0gbmV3IGkuUHJvbWlzZUNhcGFiaWxpdHkoKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlYWQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fbG9hZGVkICs9IHQubGVuZ3RoO1xuICAgICAgICAgIChfdGhpcyRvblByb2dyZXNzNiA9IHRoaXMub25Qcm9ncmVzcykgPT09IG51bGwgfHwgX3RoaXMkb25Qcm9ncmVzczYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJG9uUHJvZ3Jlc3M2LmNhbGwodGhpcywge1xuICAgICAgICAgICAgbG9hZGVkOiB0aGlzLl9sb2FkZWRcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IG5ldyBVaW50OEFycmF5KHQpLmJ1ZmZlcixcbiAgICAgICAgICAgIGRvbmU6ICExXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjYW5jZWwodCkge1xuICAgICAgICAgIHRoaXMuX3JlYWRhYmxlU3RyZWFtID8gdGhpcy5fcmVhZGFibGVTdHJlYW0uZGVzdHJveSh0KSA6IHRoaXMuX2Vycm9yKHQpO1xuICAgICAgICB9XG4gICAgICAgIF9lcnJvcih0KSB7XG4gICAgICAgICAgdGhpcy5fc3RvcmVkRXJyb3IgPSB0O1xuICAgICAgICAgIHRoaXMuX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgICBfc2V0UmVhZGFibGVTdHJlYW0odCkge1xuICAgICAgICAgIHRoaXMuX3JlYWRhYmxlU3RyZWFtID0gdDtcbiAgICAgICAgICB0Lm9uKFwicmVhZGFibGVcIiwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fcmVhZENhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHQub24oXCJlbmRcIiwgKCkgPT4ge1xuICAgICAgICAgICAgdC5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLl9kb25lID0gITA7XG4gICAgICAgICAgICB0aGlzLl9yZWFkQ2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdC5vbihcImVycm9yXCIsIHQgPT4ge1xuICAgICAgICAgICAgdGhpcy5fZXJyb3IodCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5fc3RvcmVkRXJyb3IgJiYgdGhpcy5fcmVhZGFibGVTdHJlYW0uZGVzdHJveSh0aGlzLl9zdG9yZWRFcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGNyZWF0ZVJlcXVlc3RPcHRpb25zKHQsIGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwcm90b2NvbDogdC5wcm90b2NvbCxcbiAgICAgICAgICBhdXRoOiB0LmF1dGgsXG4gICAgICAgICAgaG9zdDogdC5ob3N0bmFtZSxcbiAgICAgICAgICBwb3J0OiB0LnBvcnQsXG4gICAgICAgICAgcGF0aDogdC5wYXRoLFxuICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgICBoZWFkZXJzOiBlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjbGFzcyBQREZOb2RlU3RyZWFtRnVsbFJlYWRlciBleHRlbmRzIEJhc2VGdWxsUmVhZGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IodCkge1xuICAgICAgICAgIHN1cGVyKHQpO1xuICAgICAgICAgIGNvbnN0IGhhbmRsZVJlc3BvbnNlID0gZSA9PiB7XG4gICAgICAgICAgICBpZiAoNDA0ID09PSBlLnN0YXR1c0NvZGUpIHtcbiAgICAgICAgICAgICAgY29uc3QgdCA9IG5ldyBpLk1pc3NpbmdQREZFeGNlcHRpb24oXCJNaXNzaW5nIFBERiBcXFwiXCIuY29uY2F0KHRoaXMuX3VybCwgXCJcXFwiLlwiKSk7XG4gICAgICAgICAgICAgIHRoaXMuX3N0b3JlZEVycm9yID0gdDtcbiAgICAgICAgICAgICAgdGhpcy5faGVhZGVyc0NhcGFiaWxpdHkucmVqZWN0KHQpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgICAgICAgICB0aGlzLl9zZXRSZWFkYWJsZVN0cmVhbShlKTtcbiAgICAgICAgICAgIGNvbnN0IGdldFJlc3BvbnNlSGVhZGVyID0gdCA9PiB0aGlzLl9yZWFkYWJsZVN0cmVhbS5oZWFkZXJzW3QudG9Mb3dlckNhc2UoKV0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhbGxvd1JhbmdlUmVxdWVzdHM6IG4sXG4gICAgICAgICAgICAgICAgc3VnZ2VzdGVkTGVuZ3RoOiBzXG4gICAgICAgICAgICAgIH0gPSAoMCwgci52YWxpZGF0ZVJhbmdlUmVxdWVzdENhcGFiaWxpdGllcykoe1xuICAgICAgICAgICAgICAgIGdldFJlc3BvbnNlSGVhZGVyOiBnZXRSZXNwb25zZUhlYWRlcixcbiAgICAgICAgICAgICAgICBpc0h0dHA6IHQuaXNIdHRwLFxuICAgICAgICAgICAgICAgIHJhbmdlQ2h1bmtTaXplOiB0aGlzLl9yYW5nZUNodW5rU2l6ZSxcbiAgICAgICAgICAgICAgICBkaXNhYmxlUmFuZ2U6IHRoaXMuX2Rpc2FibGVSYW5nZVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQgPSBuO1xuICAgICAgICAgICAgdGhpcy5fY29udGVudExlbmd0aCA9IHMgfHwgdGhpcy5fY29udGVudExlbmd0aDtcbiAgICAgICAgICAgIHRoaXMuX2ZpbGVuYW1lID0gKDAsIHIuZXh0cmFjdEZpbGVuYW1lRnJvbUhlYWRlcikoZ2V0UmVzcG9uc2VIZWFkZXIpO1xuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5fcmVxdWVzdCA9IG51bGw7XG4gICAgICAgICAgaWYgKFwiaHR0cDpcIiA9PT0gdGhpcy5fdXJsLnByb3RvY29sKSB7XG4gICAgICAgICAgICBjb25zdCBlID0gX193ZWJwYWNrX3JlcXVpcmVfXyhPYmplY3QoZnVuY3Rpb24gd2VicGFja01pc3NpbmdNb2R1bGUoKSB7IHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdodHRwJ1wiKTsgZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnOyB0aHJvdyBlOyB9KCkpKTtcbiAgICAgICAgICAgIHRoaXMuX3JlcXVlc3QgPSBlLnJlcXVlc3QoY3JlYXRlUmVxdWVzdE9wdGlvbnModGhpcy5fdXJsLCB0Lmh0dHBIZWFkZXJzKSwgaGFuZGxlUmVzcG9uc2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBlID0gX193ZWJwYWNrX3JlcXVpcmVfXyhPYmplY3QoZnVuY3Rpb24gd2VicGFja01pc3NpbmdNb2R1bGUoKSB7IHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdodHRwcydcIik7IGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJzsgdGhyb3cgZTsgfSgpKSk7XG4gICAgICAgICAgICB0aGlzLl9yZXF1ZXN0ID0gZS5yZXF1ZXN0KGNyZWF0ZVJlcXVlc3RPcHRpb25zKHRoaXMuX3VybCwgdC5odHRwSGVhZGVycyksIGhhbmRsZVJlc3BvbnNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fcmVxdWVzdC5vbihcImVycm9yXCIsIHQgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc3RvcmVkRXJyb3IgPSB0O1xuICAgICAgICAgICAgdGhpcy5faGVhZGVyc0NhcGFiaWxpdHkucmVqZWN0KHQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuX3JlcXVlc3QuZW5kKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNsYXNzIFBERk5vZGVTdHJlYW1SYW5nZVJlYWRlciBleHRlbmRzIEJhc2VSYW5nZVJlYWRlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHQsIGUsIG4pIHtcbiAgICAgICAgICBzdXBlcih0KTtcbiAgICAgICAgICB0aGlzLl9odHRwSGVhZGVycyA9IHt9O1xuICAgICAgICAgIGZvciAoY29uc3QgZSBpbiB0Lmh0dHBIZWFkZXJzKSB7XG4gICAgICAgICAgICBjb25zdCBuID0gdC5odHRwSGVhZGVyc1tlXTtcbiAgICAgICAgICAgIHZvaWQgMCAhPT0gbiAmJiAodGhpcy5faHR0cEhlYWRlcnNbZV0gPSBuKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5faHR0cEhlYWRlcnMuUmFuZ2UgPSBcImJ5dGVzPVwiLmNvbmNhdChlLCBcIi1cIikuY29uY2F0KG4gLSAxKTtcbiAgICAgICAgICBjb25zdCBoYW5kbGVSZXNwb25zZSA9IHQgPT4ge1xuICAgICAgICAgICAgaWYgKDQwNCAhPT0gdC5zdGF0dXNDb2RlKSB0aGlzLl9zZXRSZWFkYWJsZVN0cmVhbSh0KTtlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3QgdCA9IG5ldyBpLk1pc3NpbmdQREZFeGNlcHRpb24oXCJNaXNzaW5nIFBERiBcXFwiXCIuY29uY2F0KHRoaXMuX3VybCwgXCJcXFwiLlwiKSk7XG4gICAgICAgICAgICAgIHRoaXMuX3N0b3JlZEVycm9yID0gdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMuX3JlcXVlc3QgPSBudWxsO1xuICAgICAgICAgIGlmIChcImh0dHA6XCIgPT09IHRoaXMuX3VybC5wcm90b2NvbCkge1xuICAgICAgICAgICAgY29uc3QgdCA9IF9fd2VicGFja19yZXF1aXJlX18oT2JqZWN0KGZ1bmN0aW9uIHdlYnBhY2tNaXNzaW5nTW9kdWxlKCkgeyB2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnaHR0cCdcIik7IGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJzsgdGhyb3cgZTsgfSgpKSk7XG4gICAgICAgICAgICB0aGlzLl9yZXF1ZXN0ID0gdC5yZXF1ZXN0KGNyZWF0ZVJlcXVlc3RPcHRpb25zKHRoaXMuX3VybCwgdGhpcy5faHR0cEhlYWRlcnMpLCBoYW5kbGVSZXNwb25zZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKE9iamVjdChmdW5jdGlvbiB3ZWJwYWNrTWlzc2luZ01vZHVsZSgpIHsgdmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ2h0dHBzJ1wiKTsgZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnOyB0aHJvdyBlOyB9KCkpKTtcbiAgICAgICAgICAgIHRoaXMuX3JlcXVlc3QgPSB0LnJlcXVlc3QoY3JlYXRlUmVxdWVzdE9wdGlvbnModGhpcy5fdXJsLCB0aGlzLl9odHRwSGVhZGVycyksIGhhbmRsZVJlc3BvbnNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fcmVxdWVzdC5vbihcImVycm9yXCIsIHQgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc3RvcmVkRXJyb3IgPSB0O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuX3JlcXVlc3QuZW5kKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNsYXNzIFBERk5vZGVTdHJlYW1Gc0Z1bGxSZWFkZXIgZXh0ZW5kcyBCYXNlRnVsbFJlYWRlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHQpIHtcbiAgICAgICAgICBzdXBlcih0KTtcbiAgICAgICAgICBsZXQgZSA9IGRlY29kZVVSSUNvbXBvbmVudCh0aGlzLl91cmwucGF0aCk7XG4gICAgICAgICAgcy50ZXN0KHRoaXMuX3VybC5ocmVmKSAmJiAoZSA9IGUucmVwbGFjZSgvXlxcLy8sIFwiXCIpKTtcbiAgICAgICAgICBjb25zdCBuID0gX193ZWJwYWNrX3JlcXVpcmVfXyhPYmplY3QoZnVuY3Rpb24gd2VicGFja01pc3NpbmdNb2R1bGUoKSB7IHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdmcydcIik7IGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJzsgdGhyb3cgZTsgfSgpKSk7XG4gICAgICAgICAgbi5sc3RhdChlLCAodCwgcikgPT4ge1xuICAgICAgICAgICAgaWYgKHQpIHtcbiAgICAgICAgICAgICAgXCJFTk9FTlRcIiA9PT0gdC5jb2RlICYmICh0ID0gbmV3IGkuTWlzc2luZ1BERkV4Y2VwdGlvbihcIk1pc3NpbmcgUERGIFxcXCJcIi5jb25jYXQoZSwgXCJcXFwiLlwiKSkpO1xuICAgICAgICAgICAgICB0aGlzLl9zdG9yZWRFcnJvciA9IHQ7XG4gICAgICAgICAgICAgIHRoaXMuX2hlYWRlcnNDYXBhYmlsaXR5LnJlamVjdCh0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRMZW5ndGggPSByLnNpemU7XG4gICAgICAgICAgICAgIHRoaXMuX3NldFJlYWRhYmxlU3RyZWFtKG4uY3JlYXRlUmVhZFN0cmVhbShlKSk7XG4gICAgICAgICAgICAgIHRoaXMuX2hlYWRlcnNDYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2xhc3MgUERGTm9kZVN0cmVhbUZzUmFuZ2VSZWFkZXIgZXh0ZW5kcyBCYXNlUmFuZ2VSZWFkZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcih0LCBlLCBuKSB7XG4gICAgICAgICAgc3VwZXIodCk7XG4gICAgICAgICAgbGV0IGkgPSBkZWNvZGVVUklDb21wb25lbnQodGhpcy5fdXJsLnBhdGgpO1xuICAgICAgICAgIHMudGVzdCh0aGlzLl91cmwuaHJlZikgJiYgKGkgPSBpLnJlcGxhY2UoL15cXC8vLCBcIlwiKSk7XG4gICAgICAgICAgY29uc3QgciA9IF9fd2VicGFja19yZXF1aXJlX18oT2JqZWN0KGZ1bmN0aW9uIHdlYnBhY2tNaXNzaW5nTW9kdWxlKCkgeyB2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnZnMnXCIpOyBlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7IHRocm93IGU7IH0oKSkpO1xuICAgICAgICAgIHRoaXMuX3NldFJlYWRhYmxlU3RyZWFtKHIuY3JlYXRlUmVhZFN0cmVhbShpLCB7XG4gICAgICAgICAgICBzdGFydDogZSxcbiAgICAgICAgICAgIGVuZDogbiAtIDFcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICB2YWx1ZTogITBcbiAgICAgIH0pO1xuICAgICAgZS5TVkdHcmFwaGljcyA9IHZvaWQgMDtcbiAgICAgIG4oODQpO1xuICAgICAgbig4Nik7XG4gICAgICBuKDg3KTtcbiAgICAgIG4oOTMpO1xuICAgICAgbigxMDEpO1xuICAgICAgbigxMDIpO1xuICAgICAgbigxMDUpO1xuICAgICAgbigxMDcpO1xuICAgICAgbigxMDkpO1xuICAgICAgbigxMTMpO1xuICAgICAgbigxMTYpO1xuICAgICAgbigxMjMpO1xuICAgICAgbigyKTtcbiAgICAgIG4oODkpO1xuICAgICAgbigxODYpO1xuICAgICAgdmFyIGkgPSBuKDE2NyksXG4gICAgICAgIHIgPSBuKDEpO1xuICAgICAgY29uc3QgcyA9IFwibm9ybWFsXCIsXG4gICAgICAgIGEgPSBcIm5vcm1hbFwiLFxuICAgICAgICBvID0gXCIjMDAwMDAwXCIsXG4gICAgICAgIGwgPSBbXCJidXR0XCIsIFwicm91bmRcIiwgXCJzcXVhcmVcIl0sXG4gICAgICAgIGMgPSBbXCJtaXRlclwiLCBcInJvdW5kXCIsIFwiYmV2ZWxcIl0sXG4gICAgICAgIGNyZWF0ZU9iamVjdFVSTCA9IGZ1bmN0aW9uIGNyZWF0ZU9iamVjdFVSTCh0KSB7XG4gICAgICAgICAgbGV0IGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1sxXSA/IGFyZ3VtZW50c1sxXSA6IFwiXCIsXG4gICAgICAgICAgICBuID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMl0gJiYgYXJndW1lbnRzWzJdO1xuICAgICAgICAgIGlmIChVUkwuY3JlYXRlT2JqZWN0VVJMICYmIFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIEJsb2IgJiYgIW4pIHJldHVybiBVUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFt0XSwge1xuICAgICAgICAgICAgdHlwZTogZVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgICBjb25zdCBpID0gXCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPVwiO1xuICAgICAgICAgIGxldCByID0gXCJkYXRhOlwiLmNvbmNhdChlLCBcIjtiYXNlNjQsXCIpO1xuICAgICAgICAgIGZvciAobGV0IGUgPSAwLCBuID0gdC5sZW5ndGg7IGUgPCBuOyBlICs9IDMpIHtcbiAgICAgICAgICAgIGNvbnN0IHMgPSAyNTUgJiB0W2VdLFxuICAgICAgICAgICAgICBhID0gMjU1ICYgdFtlICsgMV0sXG4gICAgICAgICAgICAgIG8gPSAyNTUgJiB0W2UgKyAyXTtcbiAgICAgICAgICAgIHIgKz0gaVtzID4+IDJdICsgaVsoMyAmIHMpIDw8IDQgfCBhID4+IDRdICsgaVtlICsgMSA8IG4gPyAoMTUgJiBhKSA8PCAyIHwgbyA+PiA2IDogNjRdICsgaVtlICsgMiA8IG4gPyA2MyAmIG8gOiA2NF07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByO1xuICAgICAgICB9LFxuICAgICAgICBoID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IHQgPSBuZXcgVWludDhBcnJheShbMTM3LCA4MCwgNzgsIDcxLCAxMywgMTAsIDI2LCAxMF0pLFxuICAgICAgICAgICAgZSA9IG5ldyBJbnQzMkFycmF5KDI1Nik7XG4gICAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCAyNTY7IHQrKykge1xuICAgICAgICAgICAgbGV0IG4gPSB0O1xuICAgICAgICAgICAgZm9yIChsZXQgdCA9IDA7IHQgPCA4OyB0KyspIG4gPSAxICYgbiA/IDM5ODgyOTIzODQgXiBuID4+IDEgJiAyMTQ3NDgzNjQ3IDogbiA+PiAxICYgMjE0NzQ4MzY0NztcbiAgICAgICAgICAgIGVbdF0gPSBuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmdW5jdGlvbiB3cml0ZVBuZ0NodW5rKHQsIG4sIGksIHIpIHtcbiAgICAgICAgICAgIGxldCBzID0gcjtcbiAgICAgICAgICAgIGNvbnN0IGEgPSBuLmxlbmd0aDtcbiAgICAgICAgICAgIGlbc10gPSBhID4+IDI0ICYgMjU1O1xuICAgICAgICAgICAgaVtzICsgMV0gPSBhID4+IDE2ICYgMjU1O1xuICAgICAgICAgICAgaVtzICsgMl0gPSBhID4+IDggJiAyNTU7XG4gICAgICAgICAgICBpW3MgKyAzXSA9IDI1NSAmIGE7XG4gICAgICAgICAgICBzICs9IDQ7XG4gICAgICAgICAgICBpW3NdID0gMjU1ICYgdC5jaGFyQ29kZUF0KDApO1xuICAgICAgICAgICAgaVtzICsgMV0gPSAyNTUgJiB0LmNoYXJDb2RlQXQoMSk7XG4gICAgICAgICAgICBpW3MgKyAyXSA9IDI1NSAmIHQuY2hhckNvZGVBdCgyKTtcbiAgICAgICAgICAgIGlbcyArIDNdID0gMjU1ICYgdC5jaGFyQ29kZUF0KDMpO1xuICAgICAgICAgICAgcyArPSA0O1xuICAgICAgICAgICAgaS5zZXQobiwgcyk7XG4gICAgICAgICAgICBzICs9IG4ubGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgbyA9IGZ1bmN0aW9uIGNyYzMyKHQsIG4sIGkpIHtcbiAgICAgICAgICAgICAgbGV0IHIgPSAtMTtcbiAgICAgICAgICAgICAgZm9yIChsZXQgcyA9IG47IHMgPCBpOyBzKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuID0gMjU1ICYgKHIgXiB0W3NdKTtcbiAgICAgICAgICAgICAgICByID0gciA+Pj4gOCBeIGVbbl07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIC0xIF4gcjtcbiAgICAgICAgICAgIH0oaSwgciArIDQsIHMpO1xuICAgICAgICAgICAgaVtzXSA9IG8gPj4gMjQgJiAyNTU7XG4gICAgICAgICAgICBpW3MgKyAxXSA9IG8gPj4gMTYgJiAyNTU7XG4gICAgICAgICAgICBpW3MgKyAyXSA9IG8gPj4gOCAmIDI1NTtcbiAgICAgICAgICAgIGlbcyArIDNdID0gMjU1ICYgbztcbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gZGVmbGF0ZVN5bmNVbmNvbXByZXNzZWQodCkge1xuICAgICAgICAgICAgbGV0IGUgPSB0Lmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IG4gPSA2NTUzNSxcbiAgICAgICAgICAgICAgaSA9IE1hdGguY2VpbChlIC8gbiksXG4gICAgICAgICAgICAgIHIgPSBuZXcgVWludDhBcnJheSgyICsgZSArIDUgKiBpICsgNCk7XG4gICAgICAgICAgICBsZXQgcyA9IDA7XG4gICAgICAgICAgICByW3MrK10gPSAxMjA7XG4gICAgICAgICAgICByW3MrK10gPSAxNTY7XG4gICAgICAgICAgICBsZXQgYSA9IDA7XG4gICAgICAgICAgICBmb3IgKDsgZSA+IG47KSB7XG4gICAgICAgICAgICAgIHJbcysrXSA9IDA7XG4gICAgICAgICAgICAgIHJbcysrXSA9IDI1NTtcbiAgICAgICAgICAgICAgcltzKytdID0gMjU1O1xuICAgICAgICAgICAgICByW3MrK10gPSAwO1xuICAgICAgICAgICAgICByW3MrK10gPSAwO1xuICAgICAgICAgICAgICByLnNldCh0LnN1YmFycmF5KGEsIGEgKyBuKSwgcyk7XG4gICAgICAgICAgICAgIHMgKz0gbjtcbiAgICAgICAgICAgICAgYSArPSBuO1xuICAgICAgICAgICAgICBlIC09IG47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByW3MrK10gPSAxO1xuICAgICAgICAgICAgcltzKytdID0gMjU1ICYgZTtcbiAgICAgICAgICAgIHJbcysrXSA9IGUgPj4gOCAmIDI1NTtcbiAgICAgICAgICAgIHJbcysrXSA9IDI1NSAmIH5lO1xuICAgICAgICAgICAgcltzKytdID0gKDY1NTM1ICYgfmUpID4+IDggJiAyNTU7XG4gICAgICAgICAgICByLnNldCh0LnN1YmFycmF5KGEpLCBzKTtcbiAgICAgICAgICAgIHMgKz0gdC5sZW5ndGggLSBhO1xuICAgICAgICAgICAgY29uc3QgbyA9IGZ1bmN0aW9uIGFkbGVyMzIodCwgZSwgbikge1xuICAgICAgICAgICAgICBsZXQgaSA9IDEsXG4gICAgICAgICAgICAgICAgciA9IDA7XG4gICAgICAgICAgICAgIGZvciAobGV0IHMgPSBlOyBzIDwgbjsgKytzKSB7XG4gICAgICAgICAgICAgICAgaSA9IChpICsgKDI1NSAmIHRbc10pKSAlIDY1NTIxO1xuICAgICAgICAgICAgICAgIHIgPSAociArIGkpICUgNjU1MjE7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHIgPDwgMTYgfCBpO1xuICAgICAgICAgICAgfSh0LCAwLCB0Lmxlbmd0aCk7XG4gICAgICAgICAgICByW3MrK10gPSBvID4+IDI0ICYgMjU1O1xuICAgICAgICAgICAgcltzKytdID0gbyA+PiAxNiAmIDI1NTtcbiAgICAgICAgICAgIHJbcysrXSA9IG8gPj4gOCAmIDI1NTtcbiAgICAgICAgICAgIHJbcysrXSA9IDI1NSAmIG87XG4gICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZnVuY3Rpb24gZW5jb2RlKGUsIG4sIGksIHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGEgPSBlLndpZHRoLFxuICAgICAgICAgICAgICBvID0gZS5oZWlnaHQ7XG4gICAgICAgICAgICBsZXQgbCwgYywgaDtcbiAgICAgICAgICAgIGNvbnN0IGQgPSBlLmRhdGE7XG4gICAgICAgICAgICBzd2l0Y2ggKG4pIHtcbiAgICAgICAgICAgICAgY2FzZSByLkltYWdlS2luZC5HUkFZU0NBTEVfMUJQUDpcbiAgICAgICAgICAgICAgICBjID0gMDtcbiAgICAgICAgICAgICAgICBsID0gMTtcbiAgICAgICAgICAgICAgICBoID0gYSArIDcgPj4gMztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSByLkltYWdlS2luZC5SR0JfMjRCUFA6XG4gICAgICAgICAgICAgICAgYyA9IDI7XG4gICAgICAgICAgICAgICAgbCA9IDg7XG4gICAgICAgICAgICAgICAgaCA9IDMgKiBhO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIHIuSW1hZ2VLaW5kLlJHQkFfMzJCUFA6XG4gICAgICAgICAgICAgICAgYyA9IDY7XG4gICAgICAgICAgICAgICAgbCA9IDg7XG4gICAgICAgICAgICAgICAgaCA9IDQgKiBhO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImludmFsaWQgZm9ybWF0XCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdSA9IG5ldyBVaW50OEFycmF5KCgxICsgaCkgKiBvKTtcbiAgICAgICAgICAgIGxldCBwID0gMCxcbiAgICAgICAgICAgICAgZiA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCB0ID0gMDsgdCA8IG87ICsrdCkge1xuICAgICAgICAgICAgICB1W3ArK10gPSAwO1xuICAgICAgICAgICAgICB1LnNldChkLnN1YmFycmF5KGYsIGYgKyBoKSwgcCk7XG4gICAgICAgICAgICAgIGYgKz0gaDtcbiAgICAgICAgICAgICAgcCArPSBoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG4gPT09IHIuSW1hZ2VLaW5kLkdSQVlTQ0FMRV8xQlBQICYmIHMpIHtcbiAgICAgICAgICAgICAgcCA9IDA7XG4gICAgICAgICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgbzsgdCsrKSB7XG4gICAgICAgICAgICAgICAgcCsrO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IHQgPSAwOyB0IDwgaDsgdCsrKSB1W3ArK10gXj0gMjU1O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBnID0gbmV3IFVpbnQ4QXJyYXkoW2EgPj4gMjQgJiAyNTUsIGEgPj4gMTYgJiAyNTUsIGEgPj4gOCAmIDI1NSwgMjU1ICYgYSwgbyA+PiAyNCAmIDI1NSwgbyA+PiAxNiAmIDI1NSwgbyA+PiA4ICYgMjU1LCAyNTUgJiBvLCBsLCBjLCAwLCAwLCAwXSksXG4gICAgICAgICAgICAgIG0gPSBmdW5jdGlvbiBkZWZsYXRlU3luYyh0KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFyLmlzTm9kZUpTKSByZXR1cm4gZGVmbGF0ZVN5bmNVbmNvbXByZXNzZWQodCk7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGUgPSBwYXJzZUludChwcm9jZXNzLnZlcnNpb25zLm5vZGUpID49IDggPyB0IDogQnVmZmVyLmZyb20odCksXG4gICAgICAgICAgICAgICAgICAgIG4gPSBPYmplY3QoZnVuY3Rpb24gd2VicGFja01pc3NpbmdNb2R1bGUoKSB7IHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICd6bGliJ1wiKTsgZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnOyB0aHJvdyBlOyB9KCkpKGUsIHtcbiAgICAgICAgICAgICAgICAgICAgICBsZXZlbDogOVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBuIGluc3RhbmNlb2YgVWludDhBcnJheSA/IG4gOiBuZXcgVWludDhBcnJheShuKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoICh0KSB7XG4gICAgICAgICAgICAgICAgICAoMCwgci53YXJuKShcIk5vdCBjb21wcmVzc2luZyBQTkcgYmVjYXVzZSB6bGliLmRlZmxhdGVTeW5jIGlzIHVuYXZhaWxhYmxlOiBcIiArIHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZGVmbGF0ZVN5bmNVbmNvbXByZXNzZWQodCk7XG4gICAgICAgICAgICAgIH0odSksXG4gICAgICAgICAgICAgIGIgPSB0Lmxlbmd0aCArIDM2ICsgZy5sZW5ndGggKyBtLmxlbmd0aCxcbiAgICAgICAgICAgICAgdiA9IG5ldyBVaW50OEFycmF5KGIpO1xuICAgICAgICAgICAgbGV0IHkgPSAwO1xuICAgICAgICAgICAgdi5zZXQodCwgeSk7XG4gICAgICAgICAgICB5ICs9IHQubGVuZ3RoO1xuICAgICAgICAgICAgd3JpdGVQbmdDaHVuayhcIklIRFJcIiwgZywgdiwgeSk7XG4gICAgICAgICAgICB5ICs9IDEyICsgZy5sZW5ndGg7XG4gICAgICAgICAgICB3cml0ZVBuZ0NodW5rKFwiSURBVEFcIiwgbSwgdiwgeSk7XG4gICAgICAgICAgICB5ICs9IDEyICsgbS5sZW5ndGg7XG4gICAgICAgICAgICB3cml0ZVBuZ0NodW5rKFwiSUVORFwiLCBuZXcgVWludDhBcnJheSgwKSwgdiwgeSk7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlT2JqZWN0VVJMKHYsIFwiaW1hZ2UvcG5nXCIsIGkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gY29udmVydEltZ0RhdGFUb1BuZyh0LCBlLCBuKSB7XG4gICAgICAgICAgICByZXR1cm4gZW5jb2RlKHQsIHZvaWQgMCA9PT0gdC5raW5kID8gci5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFAgOiB0LmtpbmQsIGUsIG4pO1xuICAgICAgICAgIH07XG4gICAgICAgIH0oKTtcbiAgICAgIGNsYXNzIFNWR0V4dHJhU3RhdGUge1xuICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICB0aGlzLmZvbnRTaXplU2NhbGUgPSAxO1xuICAgICAgICAgIHRoaXMuZm9udFdlaWdodCA9IGE7XG4gICAgICAgICAgdGhpcy5mb250U2l6ZSA9IDA7XG4gICAgICAgICAgdGhpcy50ZXh0TWF0cml4ID0gci5JREVOVElUWV9NQVRSSVg7XG4gICAgICAgICAgdGhpcy5mb250TWF0cml4ID0gci5GT05UX0lERU5USVRZX01BVFJJWDtcbiAgICAgICAgICB0aGlzLmxlYWRpbmcgPSAwO1xuICAgICAgICAgIHRoaXMudGV4dFJlbmRlcmluZ01vZGUgPSByLlRleHRSZW5kZXJpbmdNb2RlLkZJTEw7XG4gICAgICAgICAgdGhpcy50ZXh0TWF0cml4U2NhbGUgPSAxO1xuICAgICAgICAgIHRoaXMueCA9IDA7XG4gICAgICAgICAgdGhpcy55ID0gMDtcbiAgICAgICAgICB0aGlzLmxpbmVYID0gMDtcbiAgICAgICAgICB0aGlzLmxpbmVZID0gMDtcbiAgICAgICAgICB0aGlzLmNoYXJTcGFjaW5nID0gMDtcbiAgICAgICAgICB0aGlzLndvcmRTcGFjaW5nID0gMDtcbiAgICAgICAgICB0aGlzLnRleHRIU2NhbGUgPSAxO1xuICAgICAgICAgIHRoaXMudGV4dFJpc2UgPSAwO1xuICAgICAgICAgIHRoaXMuZmlsbENvbG9yID0gbztcbiAgICAgICAgICB0aGlzLnN0cm9rZUNvbG9yID0gXCIjMDAwMDAwXCI7XG4gICAgICAgICAgdGhpcy5maWxsQWxwaGEgPSAxO1xuICAgICAgICAgIHRoaXMuc3Ryb2tlQWxwaGEgPSAxO1xuICAgICAgICAgIHRoaXMubGluZVdpZHRoID0gMTtcbiAgICAgICAgICB0aGlzLmxpbmVKb2luID0gXCJcIjtcbiAgICAgICAgICB0aGlzLmxpbmVDYXAgPSBcIlwiO1xuICAgICAgICAgIHRoaXMubWl0ZXJMaW1pdCA9IDA7XG4gICAgICAgICAgdGhpcy5kYXNoQXJyYXkgPSBbXTtcbiAgICAgICAgICB0aGlzLmRhc2hQaGFzZSA9IDA7XG4gICAgICAgICAgdGhpcy5kZXBlbmRlbmNpZXMgPSBbXTtcbiAgICAgICAgICB0aGlzLmFjdGl2ZUNsaXBVcmwgPSBudWxsO1xuICAgICAgICAgIHRoaXMuY2xpcEdyb3VwID0gbnVsbDtcbiAgICAgICAgICB0aGlzLm1hc2tJZCA9IFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgY2xvbmUoKSB7XG4gICAgICAgICAgcmV0dXJuIE9iamVjdC5jcmVhdGUodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0Q3VycmVudFBvaW50KHQsIGUpIHtcbiAgICAgICAgICB0aGlzLnggPSB0O1xuICAgICAgICAgIHRoaXMueSA9IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIHBmKHQpIHtcbiAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIodCkpIHJldHVybiB0LnRvU3RyaW5nKCk7XG4gICAgICAgIGNvbnN0IGUgPSB0LnRvRml4ZWQoMTApO1xuICAgICAgICBsZXQgbiA9IGUubGVuZ3RoIC0gMTtcbiAgICAgICAgaWYgKFwiMFwiICE9PSBlW25dKSByZXR1cm4gZTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgIG4tLTtcbiAgICAgICAgfSB3aGlsZSAoXCIwXCIgPT09IGVbbl0pO1xuICAgICAgICByZXR1cm4gZS5zdWJzdHJpbmcoMCwgXCIuXCIgPT09IGVbbl0gPyBuIDogbiArIDEpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gcG0odCkge1xuICAgICAgICBpZiAoMCA9PT0gdFs0XSAmJiAwID09PSB0WzVdKSB7XG4gICAgICAgICAgaWYgKDAgPT09IHRbMV0gJiYgMCA9PT0gdFsyXSkgcmV0dXJuIDEgPT09IHRbMF0gJiYgMSA9PT0gdFszXSA/IFwiXCIgOiBcInNjYWxlKFwiLmNvbmNhdChwZih0WzBdKSwgXCIgXCIpLmNvbmNhdChwZih0WzNdKSwgXCIpXCIpO1xuICAgICAgICAgIGlmICh0WzBdID09PSB0WzNdICYmIHRbMV0gPT09IC10WzJdKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJyb3RhdGUoXCIuY29uY2F0KHBmKDE4MCAqIE1hdGguYWNvcyh0WzBdKSAvIE1hdGguUEkpLCBcIilcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKDEgPT09IHRbMF0gJiYgMCA9PT0gdFsxXSAmJiAwID09PSB0WzJdICYmIDEgPT09IHRbM10pIHJldHVybiBcInRyYW5zbGF0ZShcIi5jb25jYXQocGYodFs0XSksIFwiIFwiKS5jb25jYXQocGYodFs1XSksIFwiKVwiKTtcbiAgICAgICAgcmV0dXJuIFwibWF0cml4KFwiLmNvbmNhdChwZih0WzBdKSwgXCIgXCIpLmNvbmNhdChwZih0WzFdKSwgXCIgXCIpLmNvbmNhdChwZih0WzJdKSwgXCIgXCIpLmNvbmNhdChwZih0WzNdKSwgXCIgXCIpLmNvbmNhdChwZih0WzRdKSwgXCIgXCIpLmNvbmNhdChwZih0WzVdKSwgXCIpXCIpO1xuICAgICAgfVxuICAgICAgbGV0IGQgPSAwLFxuICAgICAgICB1ID0gMCxcbiAgICAgICAgcCA9IDA7XG4gICAgICBlLlNWR0dyYXBoaWNzID0gY2xhc3MgU1ZHR3JhcGhpY3Mge1xuICAgICAgICBjb25zdHJ1Y3Rvcih0LCBlKSB7XG4gICAgICAgICAgbGV0IG4gPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1syXSAmJiBhcmd1bWVudHNbMl07XG4gICAgICAgICAgKDAsIGkuZGVwcmVjYXRlZCkoXCJUaGUgU1ZHIGJhY2stZW5kIGlzIG5vIGxvbmdlciBtYWludGFpbmVkIGFuZCAqbWF5KiBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuXCIpO1xuICAgICAgICAgIHRoaXMuc3ZnRmFjdG9yeSA9IG5ldyBpLkRPTVNWR0ZhY3RvcnkoKTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBuZXcgU1ZHRXh0cmFTdGF0ZSgpO1xuICAgICAgICAgIHRoaXMudHJhbnNmb3JtTWF0cml4ID0gci5JREVOVElUWV9NQVRSSVg7XG4gICAgICAgICAgdGhpcy50cmFuc2Zvcm1TdGFjayA9IFtdO1xuICAgICAgICAgIHRoaXMuZXh0cmFTdGFjayA9IFtdO1xuICAgICAgICAgIHRoaXMuY29tbW9uT2JqcyA9IHQ7XG4gICAgICAgICAgdGhpcy5vYmpzID0gZTtcbiAgICAgICAgICB0aGlzLnBlbmRpbmdDbGlwID0gbnVsbDtcbiAgICAgICAgICB0aGlzLnBlbmRpbmdFT0ZpbGwgPSAhMTtcbiAgICAgICAgICB0aGlzLmVtYmVkRm9udHMgPSAhMTtcbiAgICAgICAgICB0aGlzLmVtYmVkZGVkRm9udHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIHRoaXMuY3NzU3R5bGUgPSBudWxsO1xuICAgICAgICAgIHRoaXMuZm9yY2VEYXRhU2NoZW1hID0gISFuO1xuICAgICAgICAgIHRoaXMuX29wZXJhdG9ySWRNYXBwaW5nID0gW107XG4gICAgICAgICAgZm9yIChjb25zdCB0IGluIHIuT1BTKSB0aGlzLl9vcGVyYXRvcklkTWFwcGluZ1tyLk9QU1t0XV0gPSB0O1xuICAgICAgICB9XG4gICAgICAgIGdldE9iamVjdCh0KSB7XG4gICAgICAgICAgbGV0IGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1sxXSA/IGFyZ3VtZW50c1sxXSA6IG51bGw7XG4gICAgICAgICAgcmV0dXJuIFwic3RyaW5nXCIgPT0gdHlwZW9mIHQgPyB0LnN0YXJ0c1dpdGgoXCJnX1wiKSA/IHRoaXMuY29tbW9uT2Jqcy5nZXQodCkgOiB0aGlzLm9ianMuZ2V0KHQpIDogZTtcbiAgICAgICAgfVxuICAgICAgICBzYXZlKCkge1xuICAgICAgICAgIHRoaXMudHJhbnNmb3JtU3RhY2sucHVzaCh0aGlzLnRyYW5zZm9ybU1hdHJpeCk7XG4gICAgICAgICAgY29uc3QgdCA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgICB0aGlzLmV4dHJhU3RhY2sucHVzaCh0KTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnQgPSB0LmNsb25lKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdG9yZSgpIHtcbiAgICAgICAgICB0aGlzLnRyYW5zZm9ybU1hdHJpeCA9IHRoaXMudHJhbnNmb3JtU3RhY2sucG9wKCk7XG4gICAgICAgICAgdGhpcy5jdXJyZW50ID0gdGhpcy5leHRyYVN0YWNrLnBvcCgpO1xuICAgICAgICAgIHRoaXMucGVuZGluZ0NsaXAgPSBudWxsO1xuICAgICAgICAgIHRoaXMudGdycCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZ3JvdXAodCkge1xuICAgICAgICAgIHRoaXMuc2F2ZSgpO1xuICAgICAgICAgIHRoaXMuZXhlY3V0ZU9wVHJlZSh0KTtcbiAgICAgICAgICB0aGlzLnJlc3RvcmUoKTtcbiAgICAgICAgfVxuICAgICAgICBsb2FkRGVwZW5kZW5jaWVzKHQpIHtcbiAgICAgICAgICBjb25zdCBlID0gdC5mbkFycmF5LFxuICAgICAgICAgICAgbiA9IHQuYXJnc0FycmF5O1xuICAgICAgICAgIGZvciAobGV0IHQgPSAwLCBpID0gZS5sZW5ndGg7IHQgPCBpOyB0KyspIGlmIChlW3RdID09PSByLk9QUy5kZXBlbmRlbmN5KSBmb3IgKGNvbnN0IGUgb2Ygblt0XSkge1xuICAgICAgICAgICAgY29uc3QgdCA9IGUuc3RhcnRzV2l0aChcImdfXCIpID8gdGhpcy5jb21tb25PYmpzIDogdGhpcy5vYmpzLFxuICAgICAgICAgICAgICBuID0gbmV3IFByb21pc2UobiA9PiB7XG4gICAgICAgICAgICAgICAgdC5nZXQoZSwgbik7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50LmRlcGVuZGVuY2llcy5wdXNoKG4pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwodGhpcy5jdXJyZW50LmRlcGVuZGVuY2llcyk7XG4gICAgICAgIH1cbiAgICAgICAgdHJhbnNmb3JtKHQsIGUsIG4sIGksIHMsIGEpIHtcbiAgICAgICAgICBjb25zdCBvID0gW3QsIGUsIG4sIGksIHMsIGFdO1xuICAgICAgICAgIHRoaXMudHJhbnNmb3JtTWF0cml4ID0gci5VdGlsLnRyYW5zZm9ybSh0aGlzLnRyYW5zZm9ybU1hdHJpeCwgbyk7XG4gICAgICAgICAgdGhpcy50Z3JwID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBnZXRTVkcodCwgZSkge1xuICAgICAgICAgIHRoaXMudmlld3BvcnQgPSBlO1xuICAgICAgICAgIGNvbnN0IG4gPSB0aGlzLl9pbml0aWFsaXplKGUpO1xuICAgICAgICAgIHJldHVybiB0aGlzLmxvYWREZXBlbmRlbmNpZXModCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybU1hdHJpeCA9IHIuSURFTlRJVFlfTUFUUklYO1xuICAgICAgICAgICAgdGhpcy5leGVjdXRlT3BUcmVlKHRoaXMuY29udmVydE9wTGlzdCh0KSk7XG4gICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjb252ZXJ0T3BMaXN0KHQpIHtcbiAgICAgICAgICBjb25zdCBlID0gdGhpcy5fb3BlcmF0b3JJZE1hcHBpbmcsXG4gICAgICAgICAgICBuID0gdC5hcmdzQXJyYXksXG4gICAgICAgICAgICBpID0gdC5mbkFycmF5LFxuICAgICAgICAgICAgciA9IFtdO1xuICAgICAgICAgIGZvciAobGV0IHQgPSAwLCBzID0gaS5sZW5ndGg7IHQgPCBzOyB0KyspIHtcbiAgICAgICAgICAgIGNvbnN0IHMgPSBpW3RdO1xuICAgICAgICAgICAgci5wdXNoKHtcbiAgICAgICAgICAgICAgZm5JZDogcyxcbiAgICAgICAgICAgICAgZm46IGVbc10sXG4gICAgICAgICAgICAgIGFyZ3M6IG5bdF1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gb3BMaXN0VG9UcmVlKHQpIHtcbiAgICAgICAgICAgIGxldCBlID0gW107XG4gICAgICAgICAgICBjb25zdCBuID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGkgb2YgdCkgaWYgKFwic2F2ZVwiICE9PSBpLmZuKSBcInJlc3RvcmVcIiA9PT0gaS5mbiA/IGUgPSBuLnBvcCgpIDogZS5wdXNoKGkpO2Vsc2Uge1xuICAgICAgICAgICAgICBlLnB1c2goe1xuICAgICAgICAgICAgICAgIGZuSWQ6IDkyLFxuICAgICAgICAgICAgICAgIGZuOiBcImdyb3VwXCIsXG4gICAgICAgICAgICAgICAgaXRlbXM6IFtdXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBuLnB1c2goZSk7XG4gICAgICAgICAgICAgIGUgPSBlLmF0KC0xKS5pdGVtcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlO1xuICAgICAgICAgIH0ocik7XG4gICAgICAgIH1cbiAgICAgICAgZXhlY3V0ZU9wVHJlZSh0KSB7XG4gICAgICAgICAgZm9yIChjb25zdCBlIG9mIHQpIHtcbiAgICAgICAgICAgIGNvbnN0IHQgPSBlLmZuLFxuICAgICAgICAgICAgICBuID0gZS5mbklkLFxuICAgICAgICAgICAgICBpID0gZS5hcmdzO1xuICAgICAgICAgICAgc3dpdGNoICgwIHwgbikge1xuICAgICAgICAgICAgICBjYXNlIHIuT1BTLmJlZ2luVGV4dDpcbiAgICAgICAgICAgICAgICB0aGlzLmJlZ2luVGV4dCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIHIuT1BTLmRlcGVuZGVuY3k6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2Ugci5PUFMuc2V0TGVhZGluZzpcbiAgICAgICAgICAgICAgICB0aGlzLnNldExlYWRpbmcoaSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2Ugci5PUFMuc2V0TGVhZGluZ01vdmVUZXh0OlxuICAgICAgICAgICAgICAgIHRoaXMuc2V0TGVhZGluZ01vdmVUZXh0KGlbMF0sIGlbMV0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIHIuT1BTLnNldEZvbnQ6XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRGb250KGkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIHIuT1BTLnNob3dUZXh0OlxuICAgICAgICAgICAgICBjYXNlIHIuT1BTLnNob3dTcGFjZWRUZXh0OlxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd1RleHQoaVswXSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2Ugci5PUFMuZW5kVGV4dDpcbiAgICAgICAgICAgICAgICB0aGlzLmVuZFRleHQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSByLk9QUy5tb3ZlVGV4dDpcbiAgICAgICAgICAgICAgICB0aGlzLm1vdmVUZXh0KGlbMF0sIGlbMV0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIHIuT1BTLnNldENoYXJTcGFjaW5nOlxuICAgICAgICAgICAgICAgIHRoaXMuc2V0Q2hhclNwYWNpbmcoaVswXSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2Ugci5PUFMuc2V0V29yZFNwYWNpbmc6XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRXb3JkU3BhY2luZyhpWzBdKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSByLk9QUy5zZXRIU2NhbGU6XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRIU2NhbGUoaVswXSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2Ugci5PUFMuc2V0VGV4dE1hdHJpeDpcbiAgICAgICAgICAgICAgICB0aGlzLnNldFRleHRNYXRyaXgoaVswXSwgaVsxXSwgaVsyXSwgaVszXSwgaVs0XSwgaVs1XSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2Ugci5PUFMuc2V0VGV4dFJpc2U6XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRUZXh0UmlzZShpWzBdKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSByLk9QUy5zZXRUZXh0UmVuZGVyaW5nTW9kZTpcbiAgICAgICAgICAgICAgICB0aGlzLnNldFRleHRSZW5kZXJpbmdNb2RlKGlbMF0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIHIuT1BTLnNldExpbmVXaWR0aDpcbiAgICAgICAgICAgICAgICB0aGlzLnNldExpbmVXaWR0aChpWzBdKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSByLk9QUy5zZXRMaW5lSm9pbjpcbiAgICAgICAgICAgICAgICB0aGlzLnNldExpbmVKb2luKGlbMF0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIHIuT1BTLnNldExpbmVDYXA6XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRMaW5lQ2FwKGlbMF0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIHIuT1BTLnNldE1pdGVyTGltaXQ6XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRNaXRlckxpbWl0KGlbMF0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIHIuT1BTLnNldEZpbGxSR0JDb2xvcjpcbiAgICAgICAgICAgICAgICB0aGlzLnNldEZpbGxSR0JDb2xvcihpWzBdLCBpWzFdLCBpWzJdKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSByLk9QUy5zZXRTdHJva2VSR0JDb2xvcjpcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0cm9rZVJHQkNvbG9yKGlbMF0sIGlbMV0sIGlbMl0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIHIuT1BTLnNldFN0cm9rZUNvbG9yTjpcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0cm9rZUNvbG9yTihpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSByLk9QUy5zZXRGaWxsQ29sb3JOOlxuICAgICAgICAgICAgICAgIHRoaXMuc2V0RmlsbENvbG9yTihpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSByLk9QUy5zaGFkaW5nRmlsbDpcbiAgICAgICAgICAgICAgICB0aGlzLnNoYWRpbmdGaWxsKGlbMF0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIHIuT1BTLnNldERhc2g6XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXNoKGlbMF0sIGlbMV0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIHIuT1BTLnNldFJlbmRlcmluZ0ludGVudDpcbiAgICAgICAgICAgICAgICB0aGlzLnNldFJlbmRlcmluZ0ludGVudChpWzBdKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSByLk9QUy5zZXRGbGF0bmVzczpcbiAgICAgICAgICAgICAgICB0aGlzLnNldEZsYXRuZXNzKGlbMF0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIHIuT1BTLnNldEdTdGF0ZTpcbiAgICAgICAgICAgICAgICB0aGlzLnNldEdTdGF0ZShpWzBdKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSByLk9QUy5maWxsOlxuICAgICAgICAgICAgICAgIHRoaXMuZmlsbCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIHIuT1BTLmVvRmlsbDpcbiAgICAgICAgICAgICAgICB0aGlzLmVvRmlsbCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIHIuT1BTLnN0cm9rZTpcbiAgICAgICAgICAgICAgICB0aGlzLnN0cm9rZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIHIuT1BTLmZpbGxTdHJva2U6XG4gICAgICAgICAgICAgICAgdGhpcy5maWxsU3Ryb2tlKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2Ugci5PUFMuZW9GaWxsU3Ryb2tlOlxuICAgICAgICAgICAgICAgIHRoaXMuZW9GaWxsU3Ryb2tlKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2Ugci5PUFMuY2xpcDpcbiAgICAgICAgICAgICAgICB0aGlzLmNsaXAoXCJub256ZXJvXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIHIuT1BTLmVvQ2xpcDpcbiAgICAgICAgICAgICAgICB0aGlzLmNsaXAoXCJldmVub2RkXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIHIuT1BTLnBhaW50U29saWRDb2xvckltYWdlTWFzazpcbiAgICAgICAgICAgICAgICB0aGlzLnBhaW50U29saWRDb2xvckltYWdlTWFzaygpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIHIuT1BTLnBhaW50SW1hZ2VYT2JqZWN0OlxuICAgICAgICAgICAgICAgIHRoaXMucGFpbnRJbWFnZVhPYmplY3QoaVswXSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2Ugci5PUFMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3Q6XG4gICAgICAgICAgICAgICAgdGhpcy5wYWludElubGluZUltYWdlWE9iamVjdChpWzBdKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSByLk9QUy5wYWludEltYWdlTWFza1hPYmplY3Q6XG4gICAgICAgICAgICAgICAgdGhpcy5wYWludEltYWdlTWFza1hPYmplY3QoaVswXSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2Ugci5PUFMucGFpbnRGb3JtWE9iamVjdEJlZ2luOlxuICAgICAgICAgICAgICAgIHRoaXMucGFpbnRGb3JtWE9iamVjdEJlZ2luKGlbMF0sIGlbMV0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIHIuT1BTLnBhaW50Rm9ybVhPYmplY3RFbmQ6XG4gICAgICAgICAgICAgICAgdGhpcy5wYWludEZvcm1YT2JqZWN0RW5kKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2Ugci5PUFMuY2xvc2VQYXRoOlxuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2Ugci5PUFMuY2xvc2VTdHJva2U6XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZVN0cm9rZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIHIuT1BTLmNsb3NlRmlsbFN0cm9rZTpcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlRmlsbFN0cm9rZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIHIuT1BTLmNsb3NlRU9GaWxsU3Ryb2tlOlxuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VFT0ZpbGxTdHJva2UoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSByLk9QUy5uZXh0TGluZTpcbiAgICAgICAgICAgICAgICB0aGlzLm5leHRMaW5lKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2Ugci5PUFMudHJhbnNmb3JtOlxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtKGlbMF0sIGlbMV0sIGlbMl0sIGlbM10sIGlbNF0sIGlbNV0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIHIuT1BTLmNvbnN0cnVjdFBhdGg6XG4gICAgICAgICAgICAgICAgdGhpcy5jb25zdHJ1Y3RQYXRoKGlbMF0sIGlbMV0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIHIuT1BTLmVuZFBhdGg6XG4gICAgICAgICAgICAgICAgdGhpcy5lbmRQYXRoKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgOTI6XG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cChlLml0ZW1zKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAoMCwgci53YXJuKShcIlVuaW1wbGVtZW50ZWQgb3BlcmF0b3IgXCIuY29uY2F0KHQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2V0V29yZFNwYWNpbmcodCkge1xuICAgICAgICAgIHRoaXMuY3VycmVudC53b3JkU3BhY2luZyA9IHQ7XG4gICAgICAgIH1cbiAgICAgICAgc2V0Q2hhclNwYWNpbmcodCkge1xuICAgICAgICAgIHRoaXMuY3VycmVudC5jaGFyU3BhY2luZyA9IHQ7XG4gICAgICAgIH1cbiAgICAgICAgbmV4dExpbmUoKSB7XG4gICAgICAgICAgdGhpcy5tb3ZlVGV4dCgwLCB0aGlzLmN1cnJlbnQubGVhZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0VGV4dE1hdHJpeCh0LCBlLCBuLCBpLCByLCBzKSB7XG4gICAgICAgICAgY29uc3QgYSA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgICBhLnRleHRNYXRyaXggPSBhLmxpbmVNYXRyaXggPSBbdCwgZSwgbiwgaSwgciwgc107XG4gICAgICAgICAgYS50ZXh0TWF0cml4U2NhbGUgPSBNYXRoLmh5cG90KHQsIGUpO1xuICAgICAgICAgIGEueCA9IGEubGluZVggPSAwO1xuICAgICAgICAgIGEueSA9IGEubGluZVkgPSAwO1xuICAgICAgICAgIGEueGNvb3JkcyA9IFtdO1xuICAgICAgICAgIGEueWNvb3JkcyA9IFtdO1xuICAgICAgICAgIGEudHNwYW4gPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudChcInN2Zzp0c3BhblwiKTtcbiAgICAgICAgICBhLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZm9udC1mYW1pbHlcIiwgYS5mb250RmFtaWx5KTtcbiAgICAgICAgICBhLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZm9udC1zaXplXCIsIFwiXCIuY29uY2F0KHBmKGEuZm9udFNpemUpLCBcInB4XCIpKTtcbiAgICAgICAgICBhLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwieVwiLCBwZigtYS55KSk7XG4gICAgICAgICAgYS50eHRFbGVtZW50ID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6dGV4dFwiKTtcbiAgICAgICAgICBhLnR4dEVsZW1lbnQuYXBwZW5kKGEudHNwYW4pO1xuICAgICAgICB9XG4gICAgICAgIGJlZ2luVGV4dCgpIHtcbiAgICAgICAgICBjb25zdCB0ID0gdGhpcy5jdXJyZW50O1xuICAgICAgICAgIHQueCA9IHQubGluZVggPSAwO1xuICAgICAgICAgIHQueSA9IHQubGluZVkgPSAwO1xuICAgICAgICAgIHQudGV4dE1hdHJpeCA9IHIuSURFTlRJVFlfTUFUUklYO1xuICAgICAgICAgIHQubGluZU1hdHJpeCA9IHIuSURFTlRJVFlfTUFUUklYO1xuICAgICAgICAgIHQudGV4dE1hdHJpeFNjYWxlID0gMTtcbiAgICAgICAgICB0LnRzcGFuID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6dHNwYW5cIik7XG4gICAgICAgICAgdC50eHRFbGVtZW50ID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6dGV4dFwiKTtcbiAgICAgICAgICB0LnR4dGdycCA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOmdcIik7XG4gICAgICAgICAgdC54Y29vcmRzID0gW107XG4gICAgICAgICAgdC55Y29vcmRzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgbW92ZVRleHQodCwgZSkge1xuICAgICAgICAgIGNvbnN0IG4gPSB0aGlzLmN1cnJlbnQ7XG4gICAgICAgICAgbi54ID0gbi5saW5lWCArPSB0O1xuICAgICAgICAgIG4ueSA9IG4ubGluZVkgKz0gZTtcbiAgICAgICAgICBuLnhjb29yZHMgPSBbXTtcbiAgICAgICAgICBuLnljb29yZHMgPSBbXTtcbiAgICAgICAgICBuLnRzcGFuID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6dHNwYW5cIik7XG4gICAgICAgICAgbi50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImZvbnQtZmFtaWx5XCIsIG4uZm9udEZhbWlseSk7XG4gICAgICAgICAgbi50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImZvbnQtc2l6ZVwiLCBcIlwiLmNvbmNhdChwZihuLmZvbnRTaXplKSwgXCJweFwiKSk7XG4gICAgICAgICAgbi50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInlcIiwgcGYoLW4ueSkpO1xuICAgICAgICB9XG4gICAgICAgIHNob3dUZXh0KHQpIHtcbiAgICAgICAgICBjb25zdCBlID0gdGhpcy5jdXJyZW50LFxuICAgICAgICAgICAgbiA9IGUuZm9udCxcbiAgICAgICAgICAgIGkgPSBlLmZvbnRTaXplO1xuICAgICAgICAgIGlmICgwID09PSBpKSByZXR1cm47XG4gICAgICAgICAgY29uc3QgbCA9IGUuZm9udFNpemVTY2FsZSxcbiAgICAgICAgICAgIGMgPSBlLmNoYXJTcGFjaW5nLFxuICAgICAgICAgICAgaCA9IGUud29yZFNwYWNpbmcsXG4gICAgICAgICAgICBkID0gZS5mb250RGlyZWN0aW9uLFxuICAgICAgICAgICAgdSA9IGUudGV4dEhTY2FsZSAqIGQsXG4gICAgICAgICAgICBwID0gbi52ZXJ0aWNhbCxcbiAgICAgICAgICAgIGYgPSBwID8gMSA6IC0xLFxuICAgICAgICAgICAgZyA9IG4uZGVmYXVsdFZNZXRyaWNzLFxuICAgICAgICAgICAgbSA9IGkgKiBlLmZvbnRNYXRyaXhbMF07XG4gICAgICAgICAgbGV0IGIgPSAwO1xuICAgICAgICAgIGZvciAoY29uc3QgciBvZiB0KSB7XG4gICAgICAgICAgICBpZiAobnVsbCA9PT0gcikge1xuICAgICAgICAgICAgICBiICs9IGQgKiBoO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcIm51bWJlclwiID09IHR5cGVvZiByKSB7XG4gICAgICAgICAgICAgIGIgKz0gZiAqIHIgKiBpIC8gMWUzO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHQgPSAoci5pc1NwYWNlID8gaCA6IDApICsgYyxcbiAgICAgICAgICAgICAgcyA9IHIuZm9udENoYXI7XG4gICAgICAgICAgICBsZXQgYSxcbiAgICAgICAgICAgICAgbyxcbiAgICAgICAgICAgICAgdSA9IHIud2lkdGg7XG4gICAgICAgICAgICBpZiAocCkge1xuICAgICAgICAgICAgICBsZXQgdDtcbiAgICAgICAgICAgICAgY29uc3QgZSA9IHIudm1ldHJpYyB8fCBnO1xuICAgICAgICAgICAgICB0ID0gci52bWV0cmljID8gZVsxXSA6IC41ICogdTtcbiAgICAgICAgICAgICAgdCA9IC10ICogbTtcbiAgICAgICAgICAgICAgY29uc3QgbiA9IGVbMl0gKiBtO1xuICAgICAgICAgICAgICB1ID0gZSA/IC1lWzBdIDogdTtcbiAgICAgICAgICAgICAgYSA9IHQgLyBsO1xuICAgICAgICAgICAgICBvID0gKGIgKyBuKSAvIGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBhID0gYiAvIGw7XG4gICAgICAgICAgICAgIG8gPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHIuaXNJbkZvbnQgfHwgbi5taXNzaW5nRmlsZSkge1xuICAgICAgICAgICAgICBlLnhjb29yZHMucHVzaChlLnggKyBhKTtcbiAgICAgICAgICAgICAgcCAmJiBlLnljb29yZHMucHVzaCgtZS55ICsgbyk7XG4gICAgICAgICAgICAgIGUudHNwYW4udGV4dENvbnRlbnQgKz0gcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGIgKz0gcCA/IHUgKiBtIC0gdCAqIGQgOiB1ICogbSArIHQgKiBkO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwieFwiLCBlLnhjb29yZHMubWFwKHBmKS5qb2luKFwiIFwiKSk7XG4gICAgICAgICAgcCA/IGUudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ5XCIsIGUueWNvb3Jkcy5tYXAocGYpLmpvaW4oXCIgXCIpKSA6IGUudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ5XCIsIHBmKC1lLnkpKTtcbiAgICAgICAgICBwID8gZS55IC09IGIgOiBlLnggKz0gYiAqIHU7XG4gICAgICAgICAgZS50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImZvbnQtZmFtaWx5XCIsIGUuZm9udEZhbWlseSk7XG4gICAgICAgICAgZS50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImZvbnQtc2l6ZVwiLCBcIlwiLmNvbmNhdChwZihlLmZvbnRTaXplKSwgXCJweFwiKSk7XG4gICAgICAgICAgZS5mb250U3R5bGUgIT09IHMgJiYgZS50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImZvbnQtc3R5bGVcIiwgZS5mb250U3R5bGUpO1xuICAgICAgICAgIGUuZm9udFdlaWdodCAhPT0gYSAmJiBlLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZm9udC13ZWlnaHRcIiwgZS5mb250V2VpZ2h0KTtcbiAgICAgICAgICBjb25zdCB2ID0gZS50ZXh0UmVuZGVyaW5nTW9kZSAmIHIuVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0VfTUFTSztcbiAgICAgICAgICBpZiAodiA9PT0gci5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMIHx8IHYgPT09IHIuVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0UpIHtcbiAgICAgICAgICAgIGUuZmlsbENvbG9yICE9PSBvICYmIGUudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmaWxsXCIsIGUuZmlsbENvbG9yKTtcbiAgICAgICAgICAgIGUuZmlsbEFscGhhIDwgMSAmJiBlLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZmlsbC1vcGFjaXR5XCIsIGUuZmlsbEFscGhhKTtcbiAgICAgICAgICB9IGVsc2UgZS50ZXh0UmVuZGVyaW5nTW9kZSA9PT0gci5UZXh0UmVuZGVyaW5nTW9kZS5BRERfVE9fUEFUSCA/IGUudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmaWxsXCIsIFwidHJhbnNwYXJlbnRcIikgOiBlLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZmlsbFwiLCBcIm5vbmVcIik7XG4gICAgICAgICAgaWYgKHYgPT09IHIuVGV4dFJlbmRlcmluZ01vZGUuU1RST0tFIHx8IHYgPT09IHIuVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0UpIHtcbiAgICAgICAgICAgIGNvbnN0IHQgPSAxIC8gKGUudGV4dE1hdHJpeFNjYWxlIHx8IDEpO1xuICAgICAgICAgICAgdGhpcy5fc2V0U3Ryb2tlQXR0cmlidXRlcyhlLnRzcGFuLCB0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IHkgPSBlLnRleHRNYXRyaXg7XG4gICAgICAgICAgaWYgKDAgIT09IGUudGV4dFJpc2UpIHtcbiAgICAgICAgICAgIHkgPSB5LnNsaWNlKCk7XG4gICAgICAgICAgICB5WzVdICs9IGUudGV4dFJpc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGUudHh0RWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInRyYW5zZm9ybVwiLCBcIlwiLmNvbmNhdChwbSh5KSwgXCIgc2NhbGUoXCIpLmNvbmNhdChwZih1KSwgXCIsIC0xKVwiKSk7XG4gICAgICAgICAgZS50eHRFbGVtZW50LnNldEF0dHJpYnV0ZU5TKFwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlXCIsIFwieG1sOnNwYWNlXCIsIFwicHJlc2VydmVcIik7XG4gICAgICAgICAgZS50eHRFbGVtZW50LmFwcGVuZChlLnRzcGFuKTtcbiAgICAgICAgICBlLnR4dGdycC5hcHBlbmQoZS50eHRFbGVtZW50KTtcbiAgICAgICAgICB0aGlzLl9lbnN1cmVUcmFuc2Zvcm1Hcm91cCgpLmFwcGVuZChlLnR4dEVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIHNldExlYWRpbmdNb3ZlVGV4dCh0LCBlKSB7XG4gICAgICAgICAgdGhpcy5zZXRMZWFkaW5nKC1lKTtcbiAgICAgICAgICB0aGlzLm1vdmVUZXh0KHQsIGUpO1xuICAgICAgICB9XG4gICAgICAgIGFkZEZvbnRTdHlsZSh0KSB7XG4gICAgICAgICAgaWYgKCF0LmRhdGEpIHRocm93IG5ldyBFcnJvcignYWRkRm9udFN0eWxlOiBObyBmb250IGRhdGEgYXZhaWxhYmxlLCBlbnN1cmUgdGhhdCB0aGUgXCJmb250RXh0cmFQcm9wZXJ0aWVzXCIgQVBJIHBhcmFtZXRlciBpcyBzZXQuJyk7XG4gICAgICAgICAgaWYgKCF0aGlzLmNzc1N0eWxlKSB7XG4gICAgICAgICAgICB0aGlzLmNzc1N0eWxlID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6c3R5bGVcIik7XG4gICAgICAgICAgICB0aGlzLmNzc1N0eWxlLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwidHlwZVwiLCBcInRleHQvY3NzXCIpO1xuICAgICAgICAgICAgdGhpcy5kZWZzLmFwcGVuZCh0aGlzLmNzc1N0eWxlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgZSA9IGNyZWF0ZU9iamVjdFVSTCh0LmRhdGEsIHQubWltZXR5cGUsIHRoaXMuZm9yY2VEYXRhU2NoZW1hKTtcbiAgICAgICAgICB0aGlzLmNzc1N0eWxlLnRleHRDb250ZW50ICs9IFwiQGZvbnQtZmFjZSB7IGZvbnQtZmFtaWx5OiBcXFwiXCIuY29uY2F0KHQubG9hZGVkTmFtZSwgXCJcXFwiOyBzcmM6IHVybChcIikuY29uY2F0KGUsIFwiKTsgfVxcblwiKTtcbiAgICAgICAgfVxuICAgICAgICBzZXRGb250KHQpIHtcbiAgICAgICAgICBjb25zdCBlID0gdGhpcy5jdXJyZW50LFxuICAgICAgICAgICAgbiA9IHRoaXMuY29tbW9uT2Jqcy5nZXQodFswXSk7XG4gICAgICAgICAgbGV0IGkgPSB0WzFdO1xuICAgICAgICAgIGUuZm9udCA9IG47XG4gICAgICAgICAgaWYgKHRoaXMuZW1iZWRGb250cyAmJiAhbi5taXNzaW5nRmlsZSAmJiAhdGhpcy5lbWJlZGRlZEZvbnRzW24ubG9hZGVkTmFtZV0pIHtcbiAgICAgICAgICAgIHRoaXMuYWRkRm9udFN0eWxlKG4pO1xuICAgICAgICAgICAgdGhpcy5lbWJlZGRlZEZvbnRzW24ubG9hZGVkTmFtZV0gPSBuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlLmZvbnRNYXRyaXggPSBuLmZvbnRNYXRyaXggfHwgci5GT05UX0lERU5USVRZX01BVFJJWDtcbiAgICAgICAgICBsZXQgcyA9IFwibm9ybWFsXCI7XG4gICAgICAgICAgbi5ibGFjayA/IHMgPSBcIjkwMFwiIDogbi5ib2xkICYmIChzID0gXCJib2xkXCIpO1xuICAgICAgICAgIGNvbnN0IGEgPSBuLml0YWxpYyA/IFwiaXRhbGljXCIgOiBcIm5vcm1hbFwiO1xuICAgICAgICAgIGlmIChpIDwgMCkge1xuICAgICAgICAgICAgaSA9IC1pO1xuICAgICAgICAgICAgZS5mb250RGlyZWN0aW9uID0gLTE7XG4gICAgICAgICAgfSBlbHNlIGUuZm9udERpcmVjdGlvbiA9IDE7XG4gICAgICAgICAgZS5mb250U2l6ZSA9IGk7XG4gICAgICAgICAgZS5mb250RmFtaWx5ID0gbi5sb2FkZWROYW1lO1xuICAgICAgICAgIGUuZm9udFdlaWdodCA9IHM7XG4gICAgICAgICAgZS5mb250U3R5bGUgPSBhO1xuICAgICAgICAgIGUudHNwYW4gPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudChcInN2Zzp0c3BhblwiKTtcbiAgICAgICAgICBlLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwieVwiLCBwZigtZS55KSk7XG4gICAgICAgICAgZS54Y29vcmRzID0gW107XG4gICAgICAgICAgZS55Y29vcmRzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgZW5kVGV4dCgpIHtcbiAgICAgICAgICB2YXIgX3QkdHh0RWxlbWVudDtcbiAgICAgICAgICBjb25zdCB0ID0gdGhpcy5jdXJyZW50O1xuICAgICAgICAgIGlmICh0LnRleHRSZW5kZXJpbmdNb2RlICYgci5UZXh0UmVuZGVyaW5nTW9kZS5BRERfVE9fUEFUSF9GTEFHICYmIChfdCR0eHRFbGVtZW50ID0gdC50eHRFbGVtZW50KSAhPT0gbnVsbCAmJiBfdCR0eHRFbGVtZW50ICE9PSB2b2lkIDAgJiYgX3QkdHh0RWxlbWVudC5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICAgICAgICAgIHQuZWxlbWVudCA9IHQudHh0RWxlbWVudDtcbiAgICAgICAgICAgIHRoaXMuY2xpcChcIm5vbnplcm9cIik7XG4gICAgICAgICAgICB0aGlzLmVuZFBhdGgoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2V0TGluZVdpZHRoKHQpIHtcbiAgICAgICAgICB0ID4gMCAmJiAodGhpcy5jdXJyZW50LmxpbmVXaWR0aCA9IHQpO1xuICAgICAgICB9XG4gICAgICAgIHNldExpbmVDYXAodCkge1xuICAgICAgICAgIHRoaXMuY3VycmVudC5saW5lQ2FwID0gbFt0XTtcbiAgICAgICAgfVxuICAgICAgICBzZXRMaW5lSm9pbih0KSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50LmxpbmVKb2luID0gY1t0XTtcbiAgICAgICAgfVxuICAgICAgICBzZXRNaXRlckxpbWl0KHQpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnQubWl0ZXJMaW1pdCA9IHQ7XG4gICAgICAgIH1cbiAgICAgICAgc2V0U3Ryb2tlQWxwaGEodCkge1xuICAgICAgICAgIHRoaXMuY3VycmVudC5zdHJva2VBbHBoYSA9IHQ7XG4gICAgICAgIH1cbiAgICAgICAgc2V0U3Ryb2tlUkdCQ29sb3IodCwgZSwgbikge1xuICAgICAgICAgIHRoaXMuY3VycmVudC5zdHJva2VDb2xvciA9IHIuVXRpbC5tYWtlSGV4Q29sb3IodCwgZSwgbik7XG4gICAgICAgIH1cbiAgICAgICAgc2V0RmlsbEFscGhhKHQpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnQuZmlsbEFscGhhID0gdDtcbiAgICAgICAgfVxuICAgICAgICBzZXRGaWxsUkdCQ29sb3IodCwgZSwgbikge1xuICAgICAgICAgIHRoaXMuY3VycmVudC5maWxsQ29sb3IgPSByLlV0aWwubWFrZUhleENvbG9yKHQsIGUsIG4pO1xuICAgICAgICAgIHRoaXMuY3VycmVudC50c3BhbiA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOnRzcGFuXCIpO1xuICAgICAgICAgIHRoaXMuY3VycmVudC54Y29vcmRzID0gW107XG4gICAgICAgICAgdGhpcy5jdXJyZW50Lnljb29yZHMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICBzZXRTdHJva2VDb2xvck4odCkge1xuICAgICAgICAgIHRoaXMuY3VycmVudC5zdHJva2VDb2xvciA9IHRoaXMuX21ha2VDb2xvck5fUGF0dGVybih0KTtcbiAgICAgICAgfVxuICAgICAgICBzZXRGaWxsQ29sb3JOKHQpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnQuZmlsbENvbG9yID0gdGhpcy5fbWFrZUNvbG9yTl9QYXR0ZXJuKHQpO1xuICAgICAgICB9XG4gICAgICAgIHNoYWRpbmdGaWxsKHQpIHtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgIHdpZHRoOiBlLFxuICAgICAgICAgICAgICBoZWlnaHQ6IG5cbiAgICAgICAgICAgIH0gPSB0aGlzLnZpZXdwb3J0LFxuICAgICAgICAgICAgaSA9IHIuVXRpbC5pbnZlcnNlVHJhbnNmb3JtKHRoaXMudHJhbnNmb3JtTWF0cml4KSxcbiAgICAgICAgICAgIFtzLCBhLCBvLCBsXSA9IHIuVXRpbC5nZXRBeGlhbEFsaWduZWRCb3VuZGluZ0JveChbMCwgMCwgZSwgbl0sIGkpLFxuICAgICAgICAgICAgYyA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOnJlY3RcIik7XG4gICAgICAgICAgYy5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInhcIiwgcyk7XG4gICAgICAgICAgYy5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInlcIiwgYSk7XG4gICAgICAgICAgYy5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcIndpZHRoXCIsIG8gLSBzKTtcbiAgICAgICAgICBjLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiaGVpZ2h0XCIsIGwgLSBhKTtcbiAgICAgICAgICBjLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZmlsbFwiLCB0aGlzLl9tYWtlU2hhZGluZ1BhdHRlcm4odCkpO1xuICAgICAgICAgIHRoaXMuY3VycmVudC5maWxsQWxwaGEgPCAxICYmIGMuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmaWxsLW9wYWNpdHlcIiwgdGhpcy5jdXJyZW50LmZpbGxBbHBoYSk7XG4gICAgICAgICAgdGhpcy5fZW5zdXJlVHJhbnNmb3JtR3JvdXAoKS5hcHBlbmQoYyk7XG4gICAgICAgIH1cbiAgICAgICAgX21ha2VDb2xvck5fUGF0dGVybih0KSB7XG4gICAgICAgICAgcmV0dXJuIFwiVGlsaW5nUGF0dGVyblwiID09PSB0WzBdID8gdGhpcy5fbWFrZVRpbGluZ1BhdHRlcm4odCkgOiB0aGlzLl9tYWtlU2hhZGluZ1BhdHRlcm4odCk7XG4gICAgICAgIH1cbiAgICAgICAgX21ha2VUaWxpbmdQYXR0ZXJuKHQpIHtcbiAgICAgICAgICBjb25zdCBlID0gdFsxXSxcbiAgICAgICAgICAgIG4gPSB0WzJdLFxuICAgICAgICAgICAgaSA9IHRbM10gfHwgci5JREVOVElUWV9NQVRSSVgsXG4gICAgICAgICAgICBbcywgYSwgbywgbF0gPSB0WzRdLFxuICAgICAgICAgICAgYyA9IHRbNV0sXG4gICAgICAgICAgICBoID0gdFs2XSxcbiAgICAgICAgICAgIGQgPSB0WzddLFxuICAgICAgICAgICAgdSA9IFwic2hhZGluZ1wiICsgcCsrLFxuICAgICAgICAgICAgW2YsIGcsIG0sIGJdID0gci5VdGlsLm5vcm1hbGl6ZVJlY3QoWy4uLnIuVXRpbC5hcHBseVRyYW5zZm9ybShbcywgYV0sIGkpLCAuLi5yLlV0aWwuYXBwbHlUcmFuc2Zvcm0oW28sIGxdLCBpKV0pLFxuICAgICAgICAgICAgW3YsIHldID0gci5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKGkpLFxuICAgICAgICAgICAgQSA9IGMgKiB2LFxuICAgICAgICAgICAgXyA9IGggKiB5LFxuICAgICAgICAgICAgUyA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOnBhdHRlcm5cIik7XG4gICAgICAgICAgUy5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImlkXCIsIHUpO1xuICAgICAgICAgIFMuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJwYXR0ZXJuVW5pdHNcIiwgXCJ1c2VyU3BhY2VPblVzZVwiKTtcbiAgICAgICAgICBTLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwid2lkdGhcIiwgQSk7XG4gICAgICAgICAgUy5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImhlaWdodFwiLCBfKTtcbiAgICAgICAgICBTLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwieFwiLCBcIlwiLmNvbmNhdChmKSk7XG4gICAgICAgICAgUy5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInlcIiwgXCJcIi5jb25jYXQoZykpO1xuICAgICAgICAgIGNvbnN0IEUgPSB0aGlzLnN2ZyxcbiAgICAgICAgICAgIHggPSB0aGlzLnRyYW5zZm9ybU1hdHJpeCxcbiAgICAgICAgICAgIHcgPSB0aGlzLmN1cnJlbnQuZmlsbENvbG9yLFxuICAgICAgICAgICAgQyA9IHRoaXMuY3VycmVudC5zdHJva2VDb2xvcixcbiAgICAgICAgICAgIFQgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlKG0gLSBmLCBiIC0gZyk7XG4gICAgICAgICAgdGhpcy5zdmcgPSBUO1xuICAgICAgICAgIHRoaXMudHJhbnNmb3JtTWF0cml4ID0gaTtcbiAgICAgICAgICBpZiAoMiA9PT0gZCkge1xuICAgICAgICAgICAgY29uc3QgdCA9IHIuVXRpbC5tYWtlSGV4Q29sb3IoLi4uZSk7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQuZmlsbENvbG9yID0gdDtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHJva2VDb2xvciA9IHQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZXhlY3V0ZU9wVHJlZSh0aGlzLmNvbnZlcnRPcExpc3QobikpO1xuICAgICAgICAgIHRoaXMuc3ZnID0gRTtcbiAgICAgICAgICB0aGlzLnRyYW5zZm9ybU1hdHJpeCA9IHg7XG4gICAgICAgICAgdGhpcy5jdXJyZW50LmZpbGxDb2xvciA9IHc7XG4gICAgICAgICAgdGhpcy5jdXJyZW50LnN0cm9rZUNvbG9yID0gQztcbiAgICAgICAgICBTLmFwcGVuZChULmNoaWxkTm9kZXNbMF0pO1xuICAgICAgICAgIHRoaXMuZGVmcy5hcHBlbmQoUyk7XG4gICAgICAgICAgcmV0dXJuIFwidXJsKCNcIi5jb25jYXQodSwgXCIpXCIpO1xuICAgICAgICB9XG4gICAgICAgIF9tYWtlU2hhZGluZ1BhdHRlcm4odCkge1xuICAgICAgICAgIFwic3RyaW5nXCIgPT0gdHlwZW9mIHQgJiYgKHQgPSB0aGlzLm9ianMuZ2V0KHQpKTtcbiAgICAgICAgICBzd2l0Y2ggKHRbMF0pIHtcbiAgICAgICAgICAgIGNhc2UgXCJSYWRpYWxBeGlhbFwiOlxuICAgICAgICAgICAgICBjb25zdCBlID0gXCJzaGFkaW5nXCIgKyBwKyssXG4gICAgICAgICAgICAgICAgbiA9IHRbM107XG4gICAgICAgICAgICAgIGxldCBpO1xuICAgICAgICAgICAgICBzd2l0Y2ggKHRbMV0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwiYXhpYWxcIjpcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG4gPSB0WzRdLFxuICAgICAgICAgICAgICAgICAgICByID0gdFs1XTtcbiAgICAgICAgICAgICAgICAgIGkgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudChcInN2ZzpsaW5lYXJHcmFkaWVudFwiKTtcbiAgICAgICAgICAgICAgICAgIGkuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJpZFwiLCBlKTtcbiAgICAgICAgICAgICAgICAgIGkuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJncmFkaWVudFVuaXRzXCIsIFwidXNlclNwYWNlT25Vc2VcIik7XG4gICAgICAgICAgICAgICAgICBpLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwieDFcIiwgblswXSk7XG4gICAgICAgICAgICAgICAgICBpLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwieTFcIiwgblsxXSk7XG4gICAgICAgICAgICAgICAgICBpLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwieDJcIiwgclswXSk7XG4gICAgICAgICAgICAgICAgICBpLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwieTJcIiwgclsxXSk7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwicmFkaWFsXCI6XG4gICAgICAgICAgICAgICAgICBjb25zdCBzID0gdFs0XSxcbiAgICAgICAgICAgICAgICAgICAgYSA9IHRbNV0sXG4gICAgICAgICAgICAgICAgICAgIG8gPSB0WzZdLFxuICAgICAgICAgICAgICAgICAgICBsID0gdFs3XTtcbiAgICAgICAgICAgICAgICAgIGkgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudChcInN2ZzpyYWRpYWxHcmFkaWVudFwiKTtcbiAgICAgICAgICAgICAgICAgIGkuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJpZFwiLCBlKTtcbiAgICAgICAgICAgICAgICAgIGkuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJncmFkaWVudFVuaXRzXCIsIFwidXNlclNwYWNlT25Vc2VcIik7XG4gICAgICAgICAgICAgICAgICBpLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiY3hcIiwgYVswXSk7XG4gICAgICAgICAgICAgICAgICBpLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiY3lcIiwgYVsxXSk7XG4gICAgICAgICAgICAgICAgICBpLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiclwiLCBsKTtcbiAgICAgICAgICAgICAgICAgIGkuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmeFwiLCBzWzBdKTtcbiAgICAgICAgICAgICAgICAgIGkuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmeVwiLCBzWzFdKTtcbiAgICAgICAgICAgICAgICAgIGkuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmclwiLCBvKTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIFJhZGlhbEF4aWFsIHR5cGU6IFwiLmNvbmNhdCh0WzFdKSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZm9yIChjb25zdCB0IG9mIG4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6c3RvcFwiKTtcbiAgICAgICAgICAgICAgICBlLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwib2Zmc2V0XCIsIHRbMF0pO1xuICAgICAgICAgICAgICAgIGUuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJzdG9wLWNvbG9yXCIsIHRbMV0pO1xuICAgICAgICAgICAgICAgIGkuYXBwZW5kKGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMuZGVmcy5hcHBlbmQoaSk7XG4gICAgICAgICAgICAgIHJldHVybiBcInVybCgjXCIuY29uY2F0KGUsIFwiKVwiKTtcbiAgICAgICAgICAgIGNhc2UgXCJNZXNoXCI6XG4gICAgICAgICAgICAgICgwLCByLndhcm4pKFwiVW5pbXBsZW1lbnRlZCBwYXR0ZXJuIE1lc2hcIik7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgY2FzZSBcIkR1bW15XCI6XG4gICAgICAgICAgICAgIHJldHVybiBcImhvdHBpbmtcIjtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVua25vd24gSVIgdHlwZTogXCIuY29uY2F0KHRbMF0pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2V0RGFzaCh0LCBlKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50LmRhc2hBcnJheSA9IHQ7XG4gICAgICAgICAgdGhpcy5jdXJyZW50LmRhc2hQaGFzZSA9IGU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3RydWN0UGF0aCh0LCBlKSB7XG4gICAgICAgICAgY29uc3QgbiA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgICBsZXQgaSA9IG4ueCxcbiAgICAgICAgICAgIHMgPSBuLnksXG4gICAgICAgICAgICBhID0gW10sXG4gICAgICAgICAgICBvID0gMDtcbiAgICAgICAgICBmb3IgKGNvbnN0IG4gb2YgdCkgc3dpdGNoICgwIHwgbikge1xuICAgICAgICAgICAgY2FzZSByLk9QUy5yZWN0YW5nbGU6XG4gICAgICAgICAgICAgIGkgPSBlW28rK107XG4gICAgICAgICAgICAgIHMgPSBlW28rK107XG4gICAgICAgICAgICAgIGNvbnN0IHQgPSBpICsgZVtvKytdLFxuICAgICAgICAgICAgICAgIG4gPSBzICsgZVtvKytdO1xuICAgICAgICAgICAgICBhLnB1c2goXCJNXCIsIHBmKGkpLCBwZihzKSwgXCJMXCIsIHBmKHQpLCBwZihzKSwgXCJMXCIsIHBmKHQpLCBwZihuKSwgXCJMXCIsIHBmKGkpLCBwZihuKSwgXCJaXCIpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2Ugci5PUFMubW92ZVRvOlxuICAgICAgICAgICAgICBpID0gZVtvKytdO1xuICAgICAgICAgICAgICBzID0gZVtvKytdO1xuICAgICAgICAgICAgICBhLnB1c2goXCJNXCIsIHBmKGkpLCBwZihzKSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSByLk9QUy5saW5lVG86XG4gICAgICAgICAgICAgIGkgPSBlW28rK107XG4gICAgICAgICAgICAgIHMgPSBlW28rK107XG4gICAgICAgICAgICAgIGEucHVzaChcIkxcIiwgcGYoaSksIHBmKHMpKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHIuT1BTLmN1cnZlVG86XG4gICAgICAgICAgICAgIGkgPSBlW28gKyA0XTtcbiAgICAgICAgICAgICAgcyA9IGVbbyArIDVdO1xuICAgICAgICAgICAgICBhLnB1c2goXCJDXCIsIHBmKGVbb10pLCBwZihlW28gKyAxXSksIHBmKGVbbyArIDJdKSwgcGYoZVtvICsgM10pLCBwZihpKSwgcGYocykpO1xuICAgICAgICAgICAgICBvICs9IDY7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSByLk9QUy5jdXJ2ZVRvMjpcbiAgICAgICAgICAgICAgYS5wdXNoKFwiQ1wiLCBwZihpKSwgcGYocyksIHBmKGVbb10pLCBwZihlW28gKyAxXSksIHBmKGVbbyArIDJdKSwgcGYoZVtvICsgM10pKTtcbiAgICAgICAgICAgICAgaSA9IGVbbyArIDJdO1xuICAgICAgICAgICAgICBzID0gZVtvICsgM107XG4gICAgICAgICAgICAgIG8gKz0gNDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHIuT1BTLmN1cnZlVG8zOlxuICAgICAgICAgICAgICBpID0gZVtvICsgMl07XG4gICAgICAgICAgICAgIHMgPSBlW28gKyAzXTtcbiAgICAgICAgICAgICAgYS5wdXNoKFwiQ1wiLCBwZihlW29dKSwgcGYoZVtvICsgMV0pLCBwZihpKSwgcGYocyksIHBmKGkpLCBwZihzKSk7XG4gICAgICAgICAgICAgIG8gKz0gNDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIHIuT1BTLmNsb3NlUGF0aDpcbiAgICAgICAgICAgICAgYS5wdXNoKFwiWlwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYSA9IGEuam9pbihcIiBcIik7XG4gICAgICAgICAgaWYgKG4ucGF0aCAmJiB0Lmxlbmd0aCA+IDAgJiYgdFswXSAhPT0gci5PUFMucmVjdGFuZ2xlICYmIHRbMF0gIT09IHIuT1BTLm1vdmVUbykgYSA9IG4ucGF0aC5nZXRBdHRyaWJ1dGVOUyhudWxsLCBcImRcIikgKyBhO2Vsc2Uge1xuICAgICAgICAgICAgbi5wYXRoID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6cGF0aFwiKTtcbiAgICAgICAgICAgIHRoaXMuX2Vuc3VyZVRyYW5zZm9ybUdyb3VwKCkuYXBwZW5kKG4ucGF0aCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG4ucGF0aC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImRcIiwgYSk7XG4gICAgICAgICAgbi5wYXRoLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZmlsbFwiLCBcIm5vbmVcIik7XG4gICAgICAgICAgbi5lbGVtZW50ID0gbi5wYXRoO1xuICAgICAgICAgIG4uc2V0Q3VycmVudFBvaW50KGksIHMpO1xuICAgICAgICB9XG4gICAgICAgIGVuZFBhdGgoKSB7XG4gICAgICAgICAgY29uc3QgdCA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgICB0LnBhdGggPSBudWxsO1xuICAgICAgICAgIGlmICghdGhpcy5wZW5kaW5nQ2xpcCkgcmV0dXJuO1xuICAgICAgICAgIGlmICghdC5lbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdDbGlwID0gbnVsbDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgZSA9IFwiY2xpcHBhdGhcIiArIGQrKyxcbiAgICAgICAgICAgIG4gPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudChcInN2ZzpjbGlwUGF0aFwiKTtcbiAgICAgICAgICBuLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiaWRcIiwgZSk7XG4gICAgICAgICAgbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInRyYW5zZm9ybVwiLCBwbSh0aGlzLnRyYW5zZm9ybU1hdHJpeCkpO1xuICAgICAgICAgIGNvbnN0IGkgPSB0LmVsZW1lbnQuY2xvbmVOb2RlKCEwKTtcbiAgICAgICAgICBcImV2ZW5vZGRcIiA9PT0gdGhpcy5wZW5kaW5nQ2xpcCA/IGkuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJjbGlwLXJ1bGVcIiwgXCJldmVub2RkXCIpIDogaS5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImNsaXAtcnVsZVwiLCBcIm5vbnplcm9cIik7XG4gICAgICAgICAgdGhpcy5wZW5kaW5nQ2xpcCA9IG51bGw7XG4gICAgICAgICAgbi5hcHBlbmQoaSk7XG4gICAgICAgICAgdGhpcy5kZWZzLmFwcGVuZChuKTtcbiAgICAgICAgICBpZiAodC5hY3RpdmVDbGlwVXJsKSB7XG4gICAgICAgICAgICB0LmNsaXBHcm91cCA9IG51bGw7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHQgb2YgdGhpcy5leHRyYVN0YWNrKSB0LmNsaXBHcm91cCA9IG51bGw7XG4gICAgICAgICAgICBuLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiY2xpcC1wYXRoXCIsIHQuYWN0aXZlQ2xpcFVybCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHQuYWN0aXZlQ2xpcFVybCA9IFwidXJsKCNcIi5jb25jYXQoZSwgXCIpXCIpO1xuICAgICAgICAgIHRoaXMudGdycCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY2xpcCh0KSB7XG4gICAgICAgICAgdGhpcy5wZW5kaW5nQ2xpcCA9IHQ7XG4gICAgICAgIH1cbiAgICAgICAgY2xvc2VQYXRoKCkge1xuICAgICAgICAgIGNvbnN0IHQgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICAgICAgaWYgKHQucGF0aCkge1xuICAgICAgICAgICAgY29uc3QgZSA9IFwiXCIuY29uY2F0KHQucGF0aC5nZXRBdHRyaWJ1dGVOUyhudWxsLCBcImRcIiksIFwiWlwiKTtcbiAgICAgICAgICAgIHQucGF0aC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImRcIiwgZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNldExlYWRpbmcodCkge1xuICAgICAgICAgIHRoaXMuY3VycmVudC5sZWFkaW5nID0gLXQ7XG4gICAgICAgIH1cbiAgICAgICAgc2V0VGV4dFJpc2UodCkge1xuICAgICAgICAgIHRoaXMuY3VycmVudC50ZXh0UmlzZSA9IHQ7XG4gICAgICAgIH1cbiAgICAgICAgc2V0VGV4dFJlbmRlcmluZ01vZGUodCkge1xuICAgICAgICAgIHRoaXMuY3VycmVudC50ZXh0UmVuZGVyaW5nTW9kZSA9IHQ7XG4gICAgICAgIH1cbiAgICAgICAgc2V0SFNjYWxlKHQpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnQudGV4dEhTY2FsZSA9IHQgLyAxMDA7XG4gICAgICAgIH1cbiAgICAgICAgc2V0UmVuZGVyaW5nSW50ZW50KHQpIHt9XG4gICAgICAgIHNldEZsYXRuZXNzKHQpIHt9XG4gICAgICAgIHNldEdTdGF0ZSh0KSB7XG4gICAgICAgICAgZm9yIChjb25zdCBbZSwgbl0gb2YgdCkgc3dpdGNoIChlKSB7XG4gICAgICAgICAgICBjYXNlIFwiTFdcIjpcbiAgICAgICAgICAgICAgdGhpcy5zZXRMaW5lV2lkdGgobik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIkxDXCI6XG4gICAgICAgICAgICAgIHRoaXMuc2V0TGluZUNhcChuKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiTEpcIjpcbiAgICAgICAgICAgICAgdGhpcy5zZXRMaW5lSm9pbihuKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiTUxcIjpcbiAgICAgICAgICAgICAgdGhpcy5zZXRNaXRlckxpbWl0KG4pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJEXCI6XG4gICAgICAgICAgICAgIHRoaXMuc2V0RGFzaChuWzBdLCBuWzFdKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiUklcIjpcbiAgICAgICAgICAgICAgdGhpcy5zZXRSZW5kZXJpbmdJbnRlbnQobik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIkZMXCI6XG4gICAgICAgICAgICAgIHRoaXMuc2V0RmxhdG5lc3Mobik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIkZvbnRcIjpcbiAgICAgICAgICAgICAgdGhpcy5zZXRGb250KG4pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJDQVwiOlxuICAgICAgICAgICAgICB0aGlzLnNldFN0cm9rZUFscGhhKG4pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJjYVwiOlxuICAgICAgICAgICAgICB0aGlzLnNldEZpbGxBbHBoYShuKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAoMCwgci53YXJuKShcIlVuaW1wbGVtZW50ZWQgZ3JhcGhpYyBzdGF0ZSBvcGVyYXRvciBcIi5jb25jYXQoZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmaWxsKCkge1xuICAgICAgICAgIGNvbnN0IHQgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICAgICAgaWYgKHQuZWxlbWVudCkge1xuICAgICAgICAgICAgdC5lbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZmlsbFwiLCB0LmZpbGxDb2xvcik7XG4gICAgICAgICAgICB0LmVsZW1lbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmaWxsLW9wYWNpdHlcIiwgdC5maWxsQWxwaGEpO1xuICAgICAgICAgICAgdGhpcy5lbmRQYXRoKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN0cm9rZSgpIHtcbiAgICAgICAgICBjb25zdCB0ID0gdGhpcy5jdXJyZW50O1xuICAgICAgICAgIGlmICh0LmVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldFN0cm9rZUF0dHJpYnV0ZXModC5lbGVtZW50KTtcbiAgICAgICAgICAgIHQuZWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImZpbGxcIiwgXCJub25lXCIpO1xuICAgICAgICAgICAgdGhpcy5lbmRQYXRoKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIF9zZXRTdHJva2VBdHRyaWJ1dGVzKHQpIHtcbiAgICAgICAgICBsZXQgZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzFdID8gYXJndW1lbnRzWzFdIDogMTtcbiAgICAgICAgICBjb25zdCBuID0gdGhpcy5jdXJyZW50O1xuICAgICAgICAgIGxldCBpID0gbi5kYXNoQXJyYXk7XG4gICAgICAgICAgMSAhPT0gZSAmJiBpLmxlbmd0aCA+IDAgJiYgKGkgPSBpLm1hcChmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgcmV0dXJuIGUgKiB0O1xuICAgICAgICAgIH0pKTtcbiAgICAgICAgICB0LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwic3Ryb2tlXCIsIG4uc3Ryb2tlQ29sb3IpO1xuICAgICAgICAgIHQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJzdHJva2Utb3BhY2l0eVwiLCBuLnN0cm9rZUFscGhhKTtcbiAgICAgICAgICB0LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwic3Ryb2tlLW1pdGVybGltaXRcIiwgcGYobi5taXRlckxpbWl0KSk7XG4gICAgICAgICAgdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInN0cm9rZS1saW5lY2FwXCIsIG4ubGluZUNhcCk7XG4gICAgICAgICAgdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInN0cm9rZS1saW5lam9pblwiLCBuLmxpbmVKb2luKTtcbiAgICAgICAgICB0LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwic3Ryb2tlLXdpZHRoXCIsIHBmKGUgKiBuLmxpbmVXaWR0aCkgKyBcInB4XCIpO1xuICAgICAgICAgIHQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJzdHJva2UtZGFzaGFycmF5XCIsIGkubWFwKHBmKS5qb2luKFwiIFwiKSk7XG4gICAgICAgICAgdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInN0cm9rZS1kYXNob2Zmc2V0XCIsIHBmKGUgKiBuLmRhc2hQaGFzZSkgKyBcInB4XCIpO1xuICAgICAgICB9XG4gICAgICAgIGVvRmlsbCgpIHtcbiAgICAgICAgICB2YXIgX3RoaXMkY3VycmVudCRlbGVtZW50O1xuICAgICAgICAgIChfdGhpcyRjdXJyZW50JGVsZW1lbnQgPSB0aGlzLmN1cnJlbnQuZWxlbWVudCkgPT09IG51bGwgfHwgX3RoaXMkY3VycmVudCRlbGVtZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRjdXJyZW50JGVsZW1lbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJmaWxsLXJ1bGVcIiwgXCJldmVub2RkXCIpO1xuICAgICAgICAgIHRoaXMuZmlsbCgpO1xuICAgICAgICB9XG4gICAgICAgIGZpbGxTdHJva2UoKSB7XG4gICAgICAgICAgdGhpcy5zdHJva2UoKTtcbiAgICAgICAgICB0aGlzLmZpbGwoKTtcbiAgICAgICAgfVxuICAgICAgICBlb0ZpbGxTdHJva2UoKSB7XG4gICAgICAgICAgdmFyIF90aGlzJGN1cnJlbnQkZWxlbWVudDI7XG4gICAgICAgICAgKF90aGlzJGN1cnJlbnQkZWxlbWVudDIgPSB0aGlzLmN1cnJlbnQuZWxlbWVudCkgPT09IG51bGwgfHwgX3RoaXMkY3VycmVudCRlbGVtZW50MiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkY3VycmVudCRlbGVtZW50Mi5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImZpbGwtcnVsZVwiLCBcImV2ZW5vZGRcIik7XG4gICAgICAgICAgdGhpcy5maWxsU3Ryb2tlKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2xvc2VTdHJva2UoKSB7XG4gICAgICAgICAgdGhpcy5jbG9zZVBhdGgoKTtcbiAgICAgICAgICB0aGlzLnN0cm9rZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNsb3NlRmlsbFN0cm9rZSgpIHtcbiAgICAgICAgICB0aGlzLmNsb3NlUGF0aCgpO1xuICAgICAgICAgIHRoaXMuZmlsbFN0cm9rZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNsb3NlRU9GaWxsU3Ryb2tlKCkge1xuICAgICAgICAgIHRoaXMuY2xvc2VQYXRoKCk7XG4gICAgICAgICAgdGhpcy5lb0ZpbGxTdHJva2UoKTtcbiAgICAgICAgfVxuICAgICAgICBwYWludFNvbGlkQ29sb3JJbWFnZU1hc2soKSB7XG4gICAgICAgICAgY29uc3QgdCA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOnJlY3RcIik7XG4gICAgICAgICAgdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInhcIiwgXCIwXCIpO1xuICAgICAgICAgIHQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ5XCIsIFwiMFwiKTtcbiAgICAgICAgICB0LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwid2lkdGhcIiwgXCIxcHhcIik7XG4gICAgICAgICAgdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImhlaWdodFwiLCBcIjFweFwiKTtcbiAgICAgICAgICB0LnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZmlsbFwiLCB0aGlzLmN1cnJlbnQuZmlsbENvbG9yKTtcbiAgICAgICAgICB0aGlzLl9lbnN1cmVUcmFuc2Zvcm1Hcm91cCgpLmFwcGVuZCh0KTtcbiAgICAgICAgfVxuICAgICAgICBwYWludEltYWdlWE9iamVjdCh0KSB7XG4gICAgICAgICAgY29uc3QgZSA9IHRoaXMuZ2V0T2JqZWN0KHQpO1xuICAgICAgICAgIGUgPyB0aGlzLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0KGUpIDogKDAsIHIud2FybikoXCJEZXBlbmRlbnQgaW1hZ2Ugd2l0aCBvYmplY3QgSUQgXCIuY29uY2F0KHQsIFwiIGlzIG5vdCByZWFkeSB5ZXRcIikpO1xuICAgICAgICB9XG4gICAgICAgIHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0KHQsIGUpIHtcbiAgICAgICAgICBjb25zdCBuID0gdC53aWR0aCxcbiAgICAgICAgICAgIGkgPSB0LmhlaWdodCxcbiAgICAgICAgICAgIHIgPSBoKHQsIHRoaXMuZm9yY2VEYXRhU2NoZW1hLCAhIWUpLFxuICAgICAgICAgICAgcyA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOnJlY3RcIik7XG4gICAgICAgICAgcy5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInhcIiwgXCIwXCIpO1xuICAgICAgICAgIHMuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ5XCIsIFwiMFwiKTtcbiAgICAgICAgICBzLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwid2lkdGhcIiwgcGYobikpO1xuICAgICAgICAgIHMuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJoZWlnaHRcIiwgcGYoaSkpO1xuICAgICAgICAgIHRoaXMuY3VycmVudC5lbGVtZW50ID0gcztcbiAgICAgICAgICB0aGlzLmNsaXAoXCJub256ZXJvXCIpO1xuICAgICAgICAgIGNvbnN0IGEgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudChcInN2ZzppbWFnZVwiKTtcbiAgICAgICAgICBhLnNldEF0dHJpYnV0ZU5TKFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiLCBcInhsaW5rOmhyZWZcIiwgcik7XG4gICAgICAgICAgYS5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInhcIiwgXCIwXCIpO1xuICAgICAgICAgIGEuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ5XCIsIHBmKC1pKSk7XG4gICAgICAgICAgYS5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcIndpZHRoXCIsIHBmKG4pICsgXCJweFwiKTtcbiAgICAgICAgICBhLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiaGVpZ2h0XCIsIHBmKGkpICsgXCJweFwiKTtcbiAgICAgICAgICBhLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwidHJhbnNmb3JtXCIsIFwic2NhbGUoXCIuY29uY2F0KHBmKDEgLyBuKSwgXCIgXCIpLmNvbmNhdChwZigtMSAvIGkpLCBcIilcIikpO1xuICAgICAgICAgIGUgPyBlLmFwcGVuZChhKSA6IHRoaXMuX2Vuc3VyZVRyYW5zZm9ybUdyb3VwKCkuYXBwZW5kKGEpO1xuICAgICAgICB9XG4gICAgICAgIHBhaW50SW1hZ2VNYXNrWE9iamVjdCh0KSB7XG4gICAgICAgICAgY29uc3QgZSA9IHRoaXMuZ2V0T2JqZWN0KHQuZGF0YSwgdCk7XG4gICAgICAgICAgaWYgKGUuYml0bWFwKSB7XG4gICAgICAgICAgICAoMCwgci53YXJuKShcInBhaW50SW1hZ2VNYXNrWE9iamVjdDogSW1hZ2VCaXRtYXAgc3VwcG9ydCBpcyBub3QgaW1wbGVtZW50ZWQsIGVuc3VyZSB0aGF0IHRoZSBgaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWRgIEFQSSBwYXJhbWV0ZXIgaXMgZGlzYWJsZWQuXCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBuID0gdGhpcy5jdXJyZW50LFxuICAgICAgICAgICAgaSA9IGUud2lkdGgsXG4gICAgICAgICAgICBzID0gZS5oZWlnaHQsXG4gICAgICAgICAgICBhID0gbi5maWxsQ29sb3I7XG4gICAgICAgICAgbi5tYXNrSWQgPSBcIm1hc2tcIiArIHUrKztcbiAgICAgICAgICBjb25zdCBvID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6bWFza1wiKTtcbiAgICAgICAgICBvLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiaWRcIiwgbi5tYXNrSWQpO1xuICAgICAgICAgIGNvbnN0IGwgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudChcInN2ZzpyZWN0XCIpO1xuICAgICAgICAgIGwuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ4XCIsIFwiMFwiKTtcbiAgICAgICAgICBsLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwieVwiLCBcIjBcIik7XG4gICAgICAgICAgbC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcIndpZHRoXCIsIHBmKGkpKTtcbiAgICAgICAgICBsLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiaGVpZ2h0XCIsIHBmKHMpKTtcbiAgICAgICAgICBsLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwiZmlsbFwiLCBhKTtcbiAgICAgICAgICBsLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwibWFza1wiLCBcInVybCgjXCIuY29uY2F0KG4ubWFza0lkLCBcIilcIikpO1xuICAgICAgICAgIHRoaXMuZGVmcy5hcHBlbmQobyk7XG4gICAgICAgICAgdGhpcy5fZW5zdXJlVHJhbnNmb3JtR3JvdXAoKS5hcHBlbmQobCk7XG4gICAgICAgICAgdGhpcy5wYWludElubGluZUltYWdlWE9iamVjdChlLCBvKTtcbiAgICAgICAgfVxuICAgICAgICBwYWludEZvcm1YT2JqZWN0QmVnaW4odCwgZSkge1xuICAgICAgICAgIEFycmF5LmlzQXJyYXkodCkgJiYgNiA9PT0gdC5sZW5ndGggJiYgdGhpcy50cmFuc2Zvcm0odFswXSwgdFsxXSwgdFsyXSwgdFszXSwgdFs0XSwgdFs1XSk7XG4gICAgICAgICAgaWYgKGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHQgPSBlWzJdIC0gZVswXSxcbiAgICAgICAgICAgICAgbiA9IGVbM10gLSBlWzFdLFxuICAgICAgICAgICAgICBpID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6cmVjdFwiKTtcbiAgICAgICAgICAgIGkuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJ4XCIsIGVbMF0pO1xuICAgICAgICAgICAgaS5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInlcIiwgZVsxXSk7XG4gICAgICAgICAgICBpLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwid2lkdGhcIiwgcGYodCkpO1xuICAgICAgICAgICAgaS5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcImhlaWdodFwiLCBwZihuKSk7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQuZWxlbWVudCA9IGk7XG4gICAgICAgICAgICB0aGlzLmNsaXAoXCJub256ZXJvXCIpO1xuICAgICAgICAgICAgdGhpcy5lbmRQYXRoKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHBhaW50Rm9ybVhPYmplY3RFbmQoKSB7fVxuICAgICAgICBfaW5pdGlhbGl6ZSh0KSB7XG4gICAgICAgICAgY29uc3QgZSA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUodC53aWR0aCwgdC5oZWlnaHQpLFxuICAgICAgICAgICAgbiA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOmRlZnNcIik7XG4gICAgICAgICAgZS5hcHBlbmQobik7XG4gICAgICAgICAgdGhpcy5kZWZzID0gbjtcbiAgICAgICAgICBjb25zdCBpID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6Z1wiKTtcbiAgICAgICAgICBpLnNldEF0dHJpYnV0ZU5TKG51bGwsIFwidHJhbnNmb3JtXCIsIHBtKHQudHJhbnNmb3JtKSk7XG4gICAgICAgICAgZS5hcHBlbmQoaSk7XG4gICAgICAgICAgdGhpcy5zdmcgPSBpO1xuICAgICAgICAgIHJldHVybiBlO1xuICAgICAgICB9XG4gICAgICAgIF9lbnN1cmVDbGlwR3JvdXAoKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnQuY2xpcEdyb3VwKSB7XG4gICAgICAgICAgICBjb25zdCB0ID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6Z1wiKTtcbiAgICAgICAgICAgIHQuc2V0QXR0cmlidXRlTlMobnVsbCwgXCJjbGlwLXBhdGhcIiwgdGhpcy5jdXJyZW50LmFjdGl2ZUNsaXBVcmwpO1xuICAgICAgICAgICAgdGhpcy5zdmcuYXBwZW5kKHQpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50LmNsaXBHcm91cCA9IHQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnQuY2xpcEdyb3VwO1xuICAgICAgICB9XG4gICAgICAgIF9lbnN1cmVUcmFuc2Zvcm1Hcm91cCgpIHtcbiAgICAgICAgICBpZiAoIXRoaXMudGdycCkge1xuICAgICAgICAgICAgdGhpcy50Z3JwID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6Z1wiKTtcbiAgICAgICAgICAgIHRoaXMudGdycC5zZXRBdHRyaWJ1dGVOUyhudWxsLCBcInRyYW5zZm9ybVwiLCBwbSh0aGlzLnRyYW5zZm9ybU1hdHJpeCkpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50LmFjdGl2ZUNsaXBVcmwgPyB0aGlzLl9lbnN1cmVDbGlwR3JvdXAoKS5hcHBlbmQodGhpcy50Z3JwKSA6IHRoaXMuc3ZnLmFwcGVuZCh0aGlzLnRncnApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhpcy50Z3JwO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgICAgdmFyIGkgPSBuKDMpLFxuICAgICAgICByID0gbigxODcpLFxuICAgICAgICBzID0gbigxOTIpO1xuICAgICAgaSh7XG4gICAgICAgIHRhcmdldDogXCJBcnJheVwiLFxuICAgICAgICBwcm90bzogITBcbiAgICAgIH0sIHtcbiAgICAgICAgZ3JvdXA6IGZ1bmN0aW9uIGdyb3VwKHQpIHtcbiAgICAgICAgICByZXR1cm4gcih0aGlzLCB0LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHZvaWQgMCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcyhcImdyb3VwXCIpO1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICB2YXIgaSA9IG4oOTkpLFxuICAgICAgICByID0gbigxNCksXG4gICAgICAgIHMgPSBuKDEzKSxcbiAgICAgICAgYSA9IG4oNDApLFxuICAgICAgICBvID0gbigxOCksXG4gICAgICAgIGwgPSBuKDY0KSxcbiAgICAgICAgYyA9IG4oMTg4KSxcbiAgICAgICAgaCA9IG4oMTA4KSxcbiAgICAgICAgZCA9IEFycmF5LFxuICAgICAgICB1ID0gcihbXS5wdXNoKTtcbiAgICAgIHQuZXhwb3J0cyA9IGZ1bmN0aW9uICh0LCBlLCBuLCByKSB7XG4gICAgICAgIGZvciAodmFyIHAsIGYsIGcsIG0gPSBhKHQpLCBiID0gcyhtKSwgdiA9IGkoZSwgbiksIHkgPSBjKG51bGwpLCBBID0gbChiKSwgXyA9IDA7IEEgPiBfOyBfKyspIHtcbiAgICAgICAgICBnID0gYltfXTtcbiAgICAgICAgICAoZiA9IG8odihnLCBfLCBtKSkpIGluIHkgPyB1KHlbZl0sIGcpIDogeVtmXSA9IFtnXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAociAmJiAocCA9IHIobSkpICE9PSBkKSBmb3IgKGYgaW4geSkgeVtmXSA9IGgocCwgeVtmXSk7XG4gICAgICAgIHJldHVybiB5O1xuICAgICAgfTtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgdmFyIGksXG4gICAgICAgIHIgPSBuKDQ3KSxcbiAgICAgICAgcyA9IG4oMTg5KSxcbiAgICAgICAgYSA9IG4oNjYpLFxuICAgICAgICBvID0gbig1NSksXG4gICAgICAgIGwgPSBuKDE5MSksXG4gICAgICAgIGMgPSBuKDQzKSxcbiAgICAgICAgaCA9IG4oNTQpLFxuICAgICAgICBkID0gXCJwcm90b3R5cGVcIixcbiAgICAgICAgdSA9IFwic2NyaXB0XCIsXG4gICAgICAgIHAgPSBoKFwiSUVfUFJPVE9cIiksXG4gICAgICAgIEVtcHR5Q29uc3RydWN0b3IgPSBmdW5jdGlvbiBFbXB0eUNvbnN0cnVjdG9yKCkge30sXG4gICAgICAgIHNjcmlwdFRhZyA9IGZ1bmN0aW9uIHNjcmlwdFRhZyh0KSB7XG4gICAgICAgICAgcmV0dXJuIFwiPFwiICsgdSArIFwiPlwiICsgdCArIFwiPC9cIiArIHUgKyBcIj5cIjtcbiAgICAgICAgfSxcbiAgICAgICAgTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWCA9IGZ1bmN0aW9uIE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVgodCkge1xuICAgICAgICAgIHQud3JpdGUoc2NyaXB0VGFnKFwiXCIpKTtcbiAgICAgICAgICB0LmNsb3NlKCk7XG4gICAgICAgICAgdmFyIGUgPSB0LnBhcmVudFdpbmRvdy5PYmplY3Q7XG4gICAgICAgICAgdCA9IG51bGw7XG4gICAgICAgICAgcmV0dXJuIGU7XG4gICAgICAgIH0sXG4gICAgICAgIF9OdWxsUHJvdG9PYmplY3QgPSBmdW5jdGlvbiBOdWxsUHJvdG9PYmplY3QoKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGkgPSBuZXcgQWN0aXZlWE9iamVjdChcImh0bWxmaWxlXCIpO1xuICAgICAgICAgIH0gY2F0Y2ggKHQpIHt9XG4gICAgICAgICAgX051bGxQcm90b09iamVjdCA9IFwidW5kZWZpbmVkXCIgIT0gdHlwZW9mIGRvY3VtZW50ID8gZG9jdW1lbnQuZG9tYWluICYmIGkgPyBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGkpIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHQsXG4gICAgICAgICAgICAgIGUgPSBjKFwiaWZyYW1lXCIpLFxuICAgICAgICAgICAgICBuID0gXCJqYXZhXCIgKyB1ICsgXCI6XCI7XG4gICAgICAgICAgICBlLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICAgICAgICAgIGwuYXBwZW5kQ2hpbGQoZSk7XG4gICAgICAgICAgICBlLnNyYyA9IFN0cmluZyhuKTtcbiAgICAgICAgICAgICh0ID0gZS5jb250ZW50V2luZG93LmRvY3VtZW50KS5vcGVuKCk7XG4gICAgICAgICAgICB0LndyaXRlKHNjcmlwdFRhZyhcImRvY3VtZW50LkY9T2JqZWN0XCIpKTtcbiAgICAgICAgICAgIHQuY2xvc2UoKTtcbiAgICAgICAgICAgIHJldHVybiB0LkY7XG4gICAgICAgICAgfSgpIDogTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWChpKTtcbiAgICAgICAgICBmb3IgKHZhciB0ID0gYS5sZW5ndGg7IHQtLTspIGRlbGV0ZSBfTnVsbFByb3RvT2JqZWN0W2RdW2FbdF1dO1xuICAgICAgICAgIHJldHVybiBfTnVsbFByb3RvT2JqZWN0KCk7XG4gICAgICAgIH07XG4gICAgICBvW3BdID0gITA7XG4gICAgICB0LmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZSh0LCBlKSB7XG4gICAgICAgIHZhciBuO1xuICAgICAgICBpZiAobnVsbCAhPT0gdCkge1xuICAgICAgICAgIEVtcHR5Q29uc3RydWN0b3JbZF0gPSByKHQpO1xuICAgICAgICAgIG4gPSBuZXcgRW1wdHlDb25zdHJ1Y3RvcigpO1xuICAgICAgICAgIEVtcHR5Q29uc3RydWN0b3JbZF0gPSBudWxsO1xuICAgICAgICAgIG5bcF0gPSB0O1xuICAgICAgICB9IGVsc2UgbiA9IF9OdWxsUHJvdG9PYmplY3QoKTtcbiAgICAgICAgcmV0dXJuIHZvaWQgMCA9PT0gZSA/IG4gOiBzLmYobiwgZSk7XG4gICAgICB9O1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICB2YXIgaSA9IG4oNiksXG4gICAgICAgIHIgPSBuKDQ2KSxcbiAgICAgICAgcyA9IG4oNDUpLFxuICAgICAgICBhID0gbig0NyksXG4gICAgICAgIG8gPSBuKDEyKSxcbiAgICAgICAgbCA9IG4oMTkwKTtcbiAgICAgIGUuZiA9IGkgJiYgIXIgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModCwgZSkge1xuICAgICAgICBhKHQpO1xuICAgICAgICBmb3IgKHZhciBuLCBpID0gbyhlKSwgciA9IGwoZSksIGMgPSByLmxlbmd0aCwgaCA9IDA7IGMgPiBoOykgcy5mKHQsIG4gPSByW2grK10sIGlbbl0pO1xuICAgICAgICByZXR1cm4gdDtcbiAgICAgIH07XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIHZhciBpID0gbig1OSksXG4gICAgICAgIHIgPSBuKDY2KTtcbiAgICAgIHQuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXModCkge1xuICAgICAgICByZXR1cm4gaSh0LCByKTtcbiAgICAgIH07XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIHZhciBpID0gbigyNCk7XG4gICAgICB0LmV4cG9ydHMgPSBpKFwiZG9jdW1lbnRcIiwgXCJkb2N1bWVudEVsZW1lbnRcIik7XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIHZhciBpID0gbigzNCksXG4gICAgICAgIHIgPSBuKDE4OCksXG4gICAgICAgIHMgPSBuKDQ1KS5mLFxuICAgICAgICBhID0gaShcInVuc2NvcGFibGVzXCIpLFxuICAgICAgICBvID0gQXJyYXkucHJvdG90eXBlO1xuICAgICAgbnVsbCA9PSBvW2FdICYmIHMobywgYSwge1xuICAgICAgICBjb25maWd1cmFibGU6ICEwLFxuICAgICAgICB2YWx1ZTogcihudWxsKVxuICAgICAgfSk7XG4gICAgICB0LmV4cG9ydHMgPSBmdW5jdGlvbiAodCkge1xuICAgICAgICBvW2FdW3RdID0gITA7XG4gICAgICB9O1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgIHZhbHVlOiAhMFxuICAgICAgfSk7XG4gICAgICBlLlhmYVRleHQgPSB2b2lkIDA7XG4gICAgICBuKDg5KTtcbiAgICAgIGNsYXNzIFhmYVRleHQge1xuICAgICAgICBzdGF0aWMgdGV4dENvbnRlbnQodCkge1xuICAgICAgICAgIGNvbnN0IGUgPSBbXSxcbiAgICAgICAgICAgIG4gPSB7XG4gICAgICAgICAgICAgIGl0ZW1zOiBlLFxuICAgICAgICAgICAgICBzdHlsZXM6IE9iamVjdC5jcmVhdGUobnVsbClcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgIWZ1bmN0aW9uIHdhbGsodCkge1xuICAgICAgICAgICAgaWYgKCF0KSByZXR1cm47XG4gICAgICAgICAgICBsZXQgbiA9IG51bGw7XG4gICAgICAgICAgICBjb25zdCBpID0gdC5uYW1lO1xuICAgICAgICAgICAgaWYgKFwiI3RleHRcIiA9PT0gaSkgbiA9IHQudmFsdWU7ZWxzZSB7XG4gICAgICAgICAgICAgIHZhciBfdCRhdHRyaWJ1dGVzO1xuICAgICAgICAgICAgICBpZiAoIVhmYVRleHQuc2hvdWxkQnVpbGRUZXh0KGkpKSByZXR1cm47XG4gICAgICAgICAgICAgIHQgIT09IG51bGwgJiYgdCAhPT0gdm9pZCAwICYmIChfdCRhdHRyaWJ1dGVzID0gdC5hdHRyaWJ1dGVzKSAhPT0gbnVsbCAmJiBfdCRhdHRyaWJ1dGVzICE9PSB2b2lkIDAgJiYgX3QkYXR0cmlidXRlcy50ZXh0Q29udGVudCA/IG4gPSB0LmF0dHJpYnV0ZXMudGV4dENvbnRlbnQgOiB0LnZhbHVlICYmIChuID0gdC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBudWxsICE9PSBuICYmIGUucHVzaCh7XG4gICAgICAgICAgICAgIHN0cjogblxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAodC5jaGlsZHJlbikgZm9yIChjb25zdCBlIG9mIHQuY2hpbGRyZW4pIHdhbGsoZSk7XG4gICAgICAgICAgfSh0KTtcbiAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgc2hvdWxkQnVpbGRUZXh0KHQpIHtcbiAgICAgICAgICByZXR1cm4gIShcInRleHRhcmVhXCIgPT09IHQgfHwgXCJpbnB1dFwiID09PSB0IHx8IFwib3B0aW9uXCIgPT09IHQgfHwgXCJzZWxlY3RcIiA9PT0gdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGUuWGZhVGV4dCA9IFhmYVRleHQ7XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgdmFsdWU6ICEwXG4gICAgICB9KTtcbiAgICAgIGUuVGV4dExheWVyUmVuZGVyVGFzayA9IHZvaWQgMDtcbiAgICAgIGUucmVuZGVyVGV4dExheWVyID0gZnVuY3Rpb24gcmVuZGVyVGV4dExheWVyKHQpIHtcbiAgICAgICAgaWYgKCF0LnRleHRDb250ZW50U291cmNlICYmICh0LnRleHRDb250ZW50IHx8IHQudGV4dENvbnRlbnRTdHJlYW0pKSB7XG4gICAgICAgICAgKDAsIHIuZGVwcmVjYXRlZCkoXCJUaGUgVGV4dExheWVyUmVuZGVyIGB0ZXh0Q29udGVudGAvYHRleHRDb250ZW50U3RyZWFtYCBwYXJhbWV0ZXJzIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLCBwbGVhc2UgdXNlIGB0ZXh0Q29udGVudFNvdXJjZWAgaW5zdGVhZC5cIik7XG4gICAgICAgICAgdC50ZXh0Q29udGVudFNvdXJjZSA9IHQudGV4dENvbnRlbnQgfHwgdC50ZXh0Q29udGVudFN0cmVhbTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBjb250YWluZXI6IGUsXG4gICAgICAgICAgICB2aWV3cG9ydDogblxuICAgICAgICAgIH0gPSB0LFxuICAgICAgICAgIGkgPSBnZXRDb21wdXRlZFN0eWxlKGUpLFxuICAgICAgICAgIHMgPSBpLmdldFByb3BlcnR5VmFsdWUoXCJ2aXNpYmlsaXR5XCIpLFxuICAgICAgICAgIGEgPSBwYXJzZUZsb2F0KGkuZ2V0UHJvcGVydHlWYWx1ZShcIi0tc2NhbGUtZmFjdG9yXCIpKTtcbiAgICAgICAgXCJ2aXNpYmxlXCIgPT09IHMgJiYgKCFhIHx8IE1hdGguYWJzKGEgLSBuLnNjYWxlKSA+IDFlLTUpICYmIGNvbnNvbGUuZXJyb3IoXCJUaGUgYC0tc2NhbGUtZmFjdG9yYCBDU1MtdmFyaWFibGUgbXVzdCBiZSBzZXQsIHRvIHRoZSBzYW1lIHZhbHVlIGFzIGB2aWV3cG9ydC5zY2FsZWAsIGVpdGhlciBvbiB0aGUgYGNvbnRhaW5lcmAtZWxlbWVudCBpdHNlbGYgb3IgaGlnaGVyIHVwIGluIHRoZSBET00uXCIpO1xuICAgICAgICBjb25zdCBvID0gbmV3IFRleHRMYXllclJlbmRlclRhc2sodCk7XG4gICAgICAgIG8uX3JlbmRlcigpO1xuICAgICAgICByZXR1cm4gbztcbiAgICAgIH07XG4gICAgICBlLnVwZGF0ZVRleHRMYXllciA9IGZ1bmN0aW9uIHVwZGF0ZVRleHRMYXllcih0KSB7XG4gICAgICAgIGxldCB7XG4gICAgICAgICAgY29udGFpbmVyOiBlLFxuICAgICAgICAgIHZpZXdwb3J0OiBuLFxuICAgICAgICAgIHRleHREaXZzOiBpLFxuICAgICAgICAgIHRleHREaXZQcm9wZXJ0aWVzOiBzLFxuICAgICAgICAgIGlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkOiBhLFxuICAgICAgICAgIG11c3RSb3RhdGU6IG8gPSAhMCxcbiAgICAgICAgICBtdXN0UmVzY2FsZTogbCA9ICEwXG4gICAgICAgIH0gPSB0O1xuICAgICAgICBvICYmICgwLCByLnNldExheWVyRGltZW5zaW9ucykoZSwge1xuICAgICAgICAgIHJvdGF0aW9uOiBuLnJvdGF0aW9uXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAobCkge1xuICAgICAgICAgIGNvbnN0IHQgPSBnZXRDdHgoMCwgYSksXG4gICAgICAgICAgICBlID0ge1xuICAgICAgICAgICAgICBwcmV2Rm9udFNpemU6IG51bGwsXG4gICAgICAgICAgICAgIHByZXZGb250RmFtaWx5OiBudWxsLFxuICAgICAgICAgICAgICBkaXY6IG51bGwsXG4gICAgICAgICAgICAgIHNjYWxlOiBuLnNjYWxlICogKGdsb2JhbFRoaXMuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxKSxcbiAgICAgICAgICAgICAgcHJvcGVydGllczogbnVsbCxcbiAgICAgICAgICAgICAgY3R4OiB0XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIGZvciAoY29uc3QgdCBvZiBpKSB7XG4gICAgICAgICAgICBlLnByb3BlcnRpZXMgPSBzLmdldCh0KTtcbiAgICAgICAgICAgIGUuZGl2ID0gdDtcbiAgICAgICAgICAgIGxheW91dChlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBuKDg5KTtcbiAgICAgIG4oMik7XG4gICAgICB2YXIgaSA9IG4oMSksXG4gICAgICAgIHIgPSBuKDE2Nyk7XG4gICAgICBjb25zdCBzID0gMzAsXG4gICAgICAgIGEgPSAuOCxcbiAgICAgICAgbyA9IG5ldyBNYXAoKTtcbiAgICAgIGZ1bmN0aW9uIGdldEN0eCh0LCBlKSB7XG4gICAgICAgIGxldCBuO1xuICAgICAgICBpZiAoZSAmJiBpLkZlYXR1cmVUZXN0LmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKSBuID0gbmV3IE9mZnNjcmVlbkNhbnZhcyh0LCB0KS5nZXRDb250ZXh0KFwiMmRcIiwge1xuICAgICAgICAgIGFscGhhOiAhMVxuICAgICAgICB9KTtlbHNlIHtcbiAgICAgICAgICBjb25zdCBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcbiAgICAgICAgICBlLndpZHRoID0gZS5oZWlnaHQgPSB0O1xuICAgICAgICAgIG4gPSBlLmdldENvbnRleHQoXCIyZFwiLCB7XG4gICAgICAgICAgICBhbHBoYTogITFcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbjtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIGFwcGVuZFRleHQodCwgZSwgbikge1xuICAgICAgICBjb25zdCByID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIiksXG4gICAgICAgICAgbCA9IHtcbiAgICAgICAgICAgIGFuZ2xlOiAwLFxuICAgICAgICAgICAgY2FudmFzV2lkdGg6IDAsXG4gICAgICAgICAgICBoYXNUZXh0OiBcIlwiICE9PSBlLnN0cixcbiAgICAgICAgICAgIGhhc0VPTDogZS5oYXNFT0wsXG4gICAgICAgICAgICBmb250U2l6ZTogMFxuICAgICAgICAgIH07XG4gICAgICAgIHQuX3RleHREaXZzLnB1c2gocik7XG4gICAgICAgIGNvbnN0IGMgPSBpLlV0aWwudHJhbnNmb3JtKHQuX3RyYW5zZm9ybSwgZS50cmFuc2Zvcm0pO1xuICAgICAgICBsZXQgaCA9IE1hdGguYXRhbjIoY1sxXSwgY1swXSk7XG4gICAgICAgIGNvbnN0IGQgPSBuW2UuZm9udE5hbWVdO1xuICAgICAgICBkLnZlcnRpY2FsICYmIChoICs9IE1hdGguUEkgLyAyKTtcbiAgICAgICAgY29uc3QgdSA9IE1hdGguaHlwb3QoY1syXSwgY1szXSksXG4gICAgICAgICAgcCA9IHUgKiBmdW5jdGlvbiBnZXRBc2NlbnQodCwgZSkge1xuICAgICAgICAgICAgY29uc3QgbiA9IG8uZ2V0KHQpO1xuICAgICAgICAgICAgaWYgKG4pIHJldHVybiBuO1xuICAgICAgICAgICAgY29uc3QgaSA9IGdldEN0eChzLCBlKTtcbiAgICAgICAgICAgIGkuZm9udCA9IFwiXCIuY29uY2F0KHMsIFwicHggXCIpLmNvbmNhdCh0KTtcbiAgICAgICAgICAgIGNvbnN0IHIgPSBpLm1lYXN1cmVUZXh0KFwiXCIpO1xuICAgICAgICAgICAgbGV0IGwgPSByLmZvbnRCb3VuZGluZ0JveEFzY2VudCxcbiAgICAgICAgICAgICAgYyA9IE1hdGguYWJzKHIuZm9udEJvdW5kaW5nQm94RGVzY2VudCk7XG4gICAgICAgICAgICBpZiAobCkge1xuICAgICAgICAgICAgICBjb25zdCBlID0gbCAvIChsICsgYyk7XG4gICAgICAgICAgICAgIG8uc2V0KHQsIGUpO1xuICAgICAgICAgICAgICBpLmNhbnZhcy53aWR0aCA9IGkuY2FudmFzLmhlaWdodCA9IDA7XG4gICAgICAgICAgICAgIHJldHVybiBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaS5zdHJva2VTdHlsZSA9IFwicmVkXCI7XG4gICAgICAgICAgICBpLmNsZWFyUmVjdCgwLCAwLCBzLCBzKTtcbiAgICAgICAgICAgIGkuc3Ryb2tlVGV4dChcImdcIiwgMCwgMCk7XG4gICAgICAgICAgICBsZXQgaCA9IGkuZ2V0SW1hZ2VEYXRhKDAsIDAsIHMsIHMpLmRhdGE7XG4gICAgICAgICAgICBjID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IHQgPSBoLmxlbmd0aCAtIDEgLSAzOyB0ID49IDA7IHQgLT0gNCkgaWYgKGhbdF0gPiAwKSB7XG4gICAgICAgICAgICAgIGMgPSBNYXRoLmNlaWwodCAvIDQgLyBzKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpLmNsZWFyUmVjdCgwLCAwLCBzLCBzKTtcbiAgICAgICAgICAgIGkuc3Ryb2tlVGV4dChcIkFcIiwgMCwgcyk7XG4gICAgICAgICAgICBoID0gaS5nZXRJbWFnZURhdGEoMCwgMCwgcywgcykuZGF0YTtcbiAgICAgICAgICAgIGwgPSAwO1xuICAgICAgICAgICAgZm9yIChsZXQgdCA9IDAsIGUgPSBoLmxlbmd0aDsgdCA8IGU7IHQgKz0gNCkgaWYgKGhbdF0gPiAwKSB7XG4gICAgICAgICAgICAgIGwgPSBzIC0gTWF0aC5mbG9vcih0IC8gNCAvIHMpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkuY2FudmFzLndpZHRoID0gaS5jYW52YXMuaGVpZ2h0ID0gMDtcbiAgICAgICAgICAgIGlmIChsKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGUgPSBsIC8gKGwgKyBjKTtcbiAgICAgICAgICAgICAgby5zZXQodCwgZSk7XG4gICAgICAgICAgICAgIHJldHVybiBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgby5zZXQodCwgYSk7XG4gICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgICB9KGQuZm9udEZhbWlseSwgdC5faXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQpO1xuICAgICAgICBsZXQgZiwgZztcbiAgICAgICAgaWYgKDAgPT09IGgpIHtcbiAgICAgICAgICBmID0gY1s0XTtcbiAgICAgICAgICBnID0gY1s1XSAtIHA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZiA9IGNbNF0gKyBwICogTWF0aC5zaW4oaCk7XG4gICAgICAgICAgZyA9IGNbNV0gLSBwICogTWF0aC5jb3MoaCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbSA9IFwiY2FsYyh2YXIoLS1zY2FsZS1mYWN0b3IpKlwiLFxuICAgICAgICAgIGIgPSByLnN0eWxlO1xuICAgICAgICBpZiAodC5fY29udGFpbmVyID09PSB0Ll9yb290Q29udGFpbmVyKSB7XG4gICAgICAgICAgYi5sZWZ0ID0gXCJcIi5jb25jYXQoKDEwMCAqIGYgLyB0Ll9wYWdlV2lkdGgpLnRvRml4ZWQoMiksIFwiJVwiKTtcbiAgICAgICAgICBiLnRvcCA9IFwiXCIuY29uY2F0KCgxMDAgKiBnIC8gdC5fcGFnZUhlaWdodCkudG9GaXhlZCgyKSwgXCIlXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGIubGVmdCA9IFwiXCIuY29uY2F0KG0pLmNvbmNhdChmLnRvRml4ZWQoMiksIFwicHgpXCIpO1xuICAgICAgICAgIGIudG9wID0gXCJcIi5jb25jYXQobSkuY29uY2F0KGcudG9GaXhlZCgyKSwgXCJweClcIik7XG4gICAgICAgIH1cbiAgICAgICAgYi5mb250U2l6ZSA9IFwiXCIuY29uY2F0KG0pLmNvbmNhdCh1LnRvRml4ZWQoMiksIFwicHgpXCIpO1xuICAgICAgICBiLmZvbnRGYW1pbHkgPSBkLmZvbnRGYW1pbHk7XG4gICAgICAgIGwuZm9udFNpemUgPSB1O1xuICAgICAgICByLnNldEF0dHJpYnV0ZShcInJvbGVcIiwgXCJwcmVzZW50YXRpb25cIik7XG4gICAgICAgIHIudGV4dENvbnRlbnQgPSBlLnN0cjtcbiAgICAgICAgci5kaXIgPSBlLmRpcjtcbiAgICAgICAgdC5fZm9udEluc3BlY3RvckVuYWJsZWQgJiYgKHIuZGF0YXNldC5mb250TmFtZSA9IGUuZm9udE5hbWUpO1xuICAgICAgICAwICE9PSBoICYmIChsLmFuZ2xlID0gaCAqICgxODAgLyBNYXRoLlBJKSk7XG4gICAgICAgIGxldCB2ID0gITE7XG4gICAgICAgIGlmIChlLnN0ci5sZW5ndGggPiAxKSB2ID0gITA7ZWxzZSBpZiAoXCIgXCIgIT09IGUuc3RyICYmIGUudHJhbnNmb3JtWzBdICE9PSBlLnRyYW5zZm9ybVszXSkge1xuICAgICAgICAgIGNvbnN0IHQgPSBNYXRoLmFicyhlLnRyYW5zZm9ybVswXSksXG4gICAgICAgICAgICBuID0gTWF0aC5hYnMoZS50cmFuc2Zvcm1bM10pO1xuICAgICAgICAgIHQgIT09IG4gJiYgTWF0aC5tYXgodCwgbikgLyBNYXRoLm1pbih0LCBuKSA+IDEuNSAmJiAodiA9ICEwKTtcbiAgICAgICAgfVxuICAgICAgICB2ICYmIChsLmNhbnZhc1dpZHRoID0gZC52ZXJ0aWNhbCA/IGUuaGVpZ2h0IDogZS53aWR0aCk7XG4gICAgICAgIHQuX3RleHREaXZQcm9wZXJ0aWVzLnNldChyLCBsKTtcbiAgICAgICAgdC5faXNSZWFkYWJsZVN0cmVhbSAmJiB0Ll9sYXlvdXRUZXh0KHIpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gbGF5b3V0KHQpIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgZGl2OiBlLFxuICAgICAgICAgICAgc2NhbGU6IG4sXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiBpLFxuICAgICAgICAgICAgY3R4OiByLFxuICAgICAgICAgICAgcHJldkZvbnRTaXplOiBzLFxuICAgICAgICAgICAgcHJldkZvbnRGYW1pbHk6IGFcbiAgICAgICAgICB9ID0gdCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzdHlsZTogb1xuICAgICAgICAgIH0gPSBlO1xuICAgICAgICBsZXQgbCA9IFwiXCI7XG4gICAgICAgIGlmICgwICE9PSBpLmNhbnZhc1dpZHRoICYmIGkuaGFzVGV4dCkge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgZm9udEZhbWlseTogY1xuICAgICAgICAgICAgfSA9IG8sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGNhbnZhc1dpZHRoOiBoLFxuICAgICAgICAgICAgICBmb250U2l6ZTogZFxuICAgICAgICAgICAgfSA9IGk7XG4gICAgICAgICAgaWYgKHMgIT09IGQgfHwgYSAhPT0gYykge1xuICAgICAgICAgICAgci5mb250ID0gXCJcIi5jb25jYXQoZCAqIG4sIFwicHggXCIpLmNvbmNhdChjKTtcbiAgICAgICAgICAgIHQucHJldkZvbnRTaXplID0gZDtcbiAgICAgICAgICAgIHQucHJldkZvbnRGYW1pbHkgPSBjO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICB3aWR0aDogdVxuICAgICAgICAgIH0gPSByLm1lYXN1cmVUZXh0KGUudGV4dENvbnRlbnQpO1xuICAgICAgICAgIHUgPiAwICYmIChsID0gXCJzY2FsZVgoXCIuY29uY2F0KGggKiBuIC8gdSwgXCIpXCIpKTtcbiAgICAgICAgfVxuICAgICAgICAwICE9PSBpLmFuZ2xlICYmIChsID0gXCJyb3RhdGUoXCIuY29uY2F0KGkuYW5nbGUsIFwiZGVnKSBcIikuY29uY2F0KGwpKTtcbiAgICAgICAgbC5sZW5ndGggPiAwICYmIChvLnRyYW5zZm9ybSA9IGwpO1xuICAgICAgfVxuICAgICAgY2xhc3MgVGV4dExheWVyUmVuZGVyVGFzayB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHQpIHtcbiAgICAgICAgICB2YXIgX2dsb2JhbFRoaXMkRm9udEluc3BlMjtcbiAgICAgICAgICBsZXQge1xuICAgICAgICAgICAgdGV4dENvbnRlbnRTb3VyY2U6IGUsXG4gICAgICAgICAgICBjb250YWluZXI6IG4sXG4gICAgICAgICAgICB2aWV3cG9ydDogcyxcbiAgICAgICAgICAgIHRleHREaXZzOiBhLFxuICAgICAgICAgICAgdGV4dERpdlByb3BlcnRpZXM6IG8sXG4gICAgICAgICAgICB0ZXh0Q29udGVudEl0ZW1zU3RyOiBsLFxuICAgICAgICAgICAgaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ6IGNcbiAgICAgICAgICB9ID0gdDtcbiAgICAgICAgICB0aGlzLl90ZXh0Q29udGVudFNvdXJjZSA9IGU7XG4gICAgICAgICAgdGhpcy5faXNSZWFkYWJsZVN0cmVhbSA9IGUgaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbTtcbiAgICAgICAgICB0aGlzLl9jb250YWluZXIgPSB0aGlzLl9yb290Q29udGFpbmVyID0gbjtcbiAgICAgICAgICB0aGlzLl90ZXh0RGl2cyA9IGEgfHwgW107XG4gICAgICAgICAgdGhpcy5fdGV4dENvbnRlbnRJdGVtc1N0ciA9IGwgfHwgW107XG4gICAgICAgICAgdGhpcy5faXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQgPSBjO1xuICAgICAgICAgIHRoaXMuX2ZvbnRJbnNwZWN0b3JFbmFibGVkID0gISEoKF9nbG9iYWxUaGlzJEZvbnRJbnNwZTIgPSBnbG9iYWxUaGlzLkZvbnRJbnNwZWN0b3IpICE9PSBudWxsICYmIF9nbG9iYWxUaGlzJEZvbnRJbnNwZTIgIT09IHZvaWQgMCAmJiBfZ2xvYmFsVGhpcyRGb250SW5zcGUyLmVuYWJsZWQpO1xuICAgICAgICAgIHRoaXMuX3JlYWRlciA9IG51bGw7XG4gICAgICAgICAgdGhpcy5fdGV4dERpdlByb3BlcnRpZXMgPSBvIHx8IG5ldyBXZWFrTWFwKCk7XG4gICAgICAgICAgdGhpcy5fY2FuY2VsZWQgPSAhMTtcbiAgICAgICAgICB0aGlzLl9jYXBhYmlsaXR5ID0gbmV3IGkuUHJvbWlzZUNhcGFiaWxpdHkoKTtcbiAgICAgICAgICB0aGlzLl9sYXlvdXRUZXh0UGFyYW1zID0ge1xuICAgICAgICAgICAgcHJldkZvbnRTaXplOiBudWxsLFxuICAgICAgICAgICAgcHJldkZvbnRGYW1pbHk6IG51bGwsXG4gICAgICAgICAgICBkaXY6IG51bGwsXG4gICAgICAgICAgICBzY2FsZTogcy5zY2FsZSAqIChnbG9iYWxUaGlzLmRldmljZVBpeGVsUmF0aW8gfHwgMSksXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiBudWxsLFxuICAgICAgICAgICAgY3R4OiBnZXRDdHgoMCwgYylcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHBhZ2VXaWR0aDogaCxcbiAgICAgICAgICAgIHBhZ2VIZWlnaHQ6IGQsXG4gICAgICAgICAgICBwYWdlWDogdSxcbiAgICAgICAgICAgIHBhZ2VZOiBwXG4gICAgICAgICAgfSA9IHMucmF3RGltcztcbiAgICAgICAgICB0aGlzLl90cmFuc2Zvcm0gPSBbMSwgMCwgMCwgLTEsIC11LCBwICsgZF07XG4gICAgICAgICAgdGhpcy5fcGFnZVdpZHRoID0gaDtcbiAgICAgICAgICB0aGlzLl9wYWdlSGVpZ2h0ID0gZDtcbiAgICAgICAgICAoMCwgci5zZXRMYXllckRpbWVuc2lvbnMpKG4sIHMpO1xuICAgICAgICAgIHRoaXMuX2NhcGFiaWxpdHkucHJvbWlzZS5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xheW91dFRleHRQYXJhbXMgPSBudWxsO1xuICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHt9KTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgcHJvbWlzZSgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fY2FwYWJpbGl0eS5wcm9taXNlO1xuICAgICAgICB9XG4gICAgICAgIGNhbmNlbCgpIHtcbiAgICAgICAgICB0aGlzLl9jYW5jZWxlZCA9ICEwO1xuICAgICAgICAgIGlmICh0aGlzLl9yZWFkZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlYWRlci5jYW5jZWwobmV3IGkuQWJvcnRFeGNlcHRpb24oXCJUZXh0TGF5ZXIgdGFzayBjYW5jZWxsZWQuXCIpKS5jYXRjaCgoKSA9PiB7fSk7XG4gICAgICAgICAgICB0aGlzLl9yZWFkZXIgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9jYXBhYmlsaXR5LnJlamVjdChuZXcgaS5BYm9ydEV4Y2VwdGlvbihcIlRleHRMYXllciB0YXNrIGNhbmNlbGxlZC5cIikpO1xuICAgICAgICB9XG4gICAgICAgIF9wcm9jZXNzSXRlbXModCwgZSkge1xuICAgICAgICAgIGZvciAoY29uc3QgbiBvZiB0KSBpZiAodm9pZCAwICE9PSBuLnN0cikge1xuICAgICAgICAgICAgdGhpcy5fdGV4dENvbnRlbnRJdGVtc1N0ci5wdXNoKG4uc3RyKTtcbiAgICAgICAgICAgIGFwcGVuZFRleHQodGhpcywgbiwgZSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChcImJlZ2luTWFya2VkQ29udGVudFByb3BzXCIgPT09IG4udHlwZSB8fCBcImJlZ2luTWFya2VkQ29udGVudFwiID09PSBuLnR5cGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHQgPSB0aGlzLl9jb250YWluZXI7XG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwibWFya2VkQ29udGVudFwiKTtcbiAgICAgICAgICAgIG51bGwgIT09IG4uaWQgJiYgdGhpcy5fY29udGFpbmVyLnNldEF0dHJpYnV0ZShcImlkXCIsIFwiXCIuY29uY2F0KG4uaWQpKTtcbiAgICAgICAgICAgIHQuYXBwZW5kKHRoaXMuX2NvbnRhaW5lcik7XG4gICAgICAgICAgfSBlbHNlIFwiZW5kTWFya2VkQ29udGVudFwiID09PSBuLnR5cGUgJiYgKHRoaXMuX2NvbnRhaW5lciA9IHRoaXMuX2NvbnRhaW5lci5wYXJlbnROb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBfbGF5b3V0VGV4dCh0KSB7XG4gICAgICAgICAgY29uc3QgZSA9IHRoaXMuX2xheW91dFRleHRQYXJhbXMucHJvcGVydGllcyA9IHRoaXMuX3RleHREaXZQcm9wZXJ0aWVzLmdldCh0KTtcbiAgICAgICAgICB0aGlzLl9sYXlvdXRUZXh0UGFyYW1zLmRpdiA9IHQ7XG4gICAgICAgICAgbGF5b3V0KHRoaXMuX2xheW91dFRleHRQYXJhbXMpO1xuICAgICAgICAgIGUuaGFzVGV4dCAmJiB0aGlzLl9jb250YWluZXIuYXBwZW5kKHQpO1xuICAgICAgICAgIGlmIChlLmhhc0VPTCkge1xuICAgICAgICAgICAgY29uc3QgdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJiclwiKTtcbiAgICAgICAgICAgIHQuc2V0QXR0cmlidXRlKFwicm9sZVwiLCBcInByZXNlbnRhdGlvblwiKTtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lci5hcHBlbmQodCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIF9yZW5kZXIoKSB7XG4gICAgICAgICAgY29uc3QgdCA9IG5ldyBpLlByb21pc2VDYXBhYmlsaXR5KCk7XG4gICAgICAgICAgbGV0IGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIGlmICh0aGlzLl9pc1JlYWRhYmxlU3RyZWFtKSB7XG4gICAgICAgICAgICBjb25zdCBwdW1wID0gKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9yZWFkZXIucmVhZCgpLnRoZW4obiA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBpLFxuICAgICAgICAgICAgICAgICAgZG9uZTogclxuICAgICAgICAgICAgICAgIH0gPSBuO1xuICAgICAgICAgICAgICAgIGlmIChyKSB0LnJlc29sdmUoKTtlbHNlIHtcbiAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZSwgaS5zdHlsZXMpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc0l0ZW1zKGkuaXRlbXMsIGUpO1xuICAgICAgICAgICAgICAgICAgcHVtcCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSwgdC5yZWplY3QpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuX3JlYWRlciA9IHRoaXMuX3RleHRDb250ZW50U291cmNlLmdldFJlYWRlcigpO1xuICAgICAgICAgICAgcHVtcCgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuX3RleHRDb250ZW50U291cmNlKSB0aHJvdyBuZXcgRXJyb3IoJ05vIFwidGV4dENvbnRlbnRTb3VyY2VcIiBwYXJhbWV0ZXIgc3BlY2lmaWVkLicpO1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgaXRlbXM6IGUsXG4gICAgICAgICAgICAgICAgc3R5bGVzOiBuXG4gICAgICAgICAgICAgIH0gPSB0aGlzLl90ZXh0Q29udGVudFNvdXJjZTtcbiAgICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc0l0ZW1zKGUsIG4pO1xuICAgICAgICAgICAgICB0LnJlc29sdmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdC5wcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgZSA9IG51bGw7XG4gICAgICAgICAgICAhZnVuY3Rpb24gcmVuZGVyKHQpIHtcbiAgICAgICAgICAgICAgaWYgKHQuX2NhbmNlbGVkKSByZXR1cm47XG4gICAgICAgICAgICAgIGNvbnN0IGUgPSB0Ll90ZXh0RGl2cyxcbiAgICAgICAgICAgICAgICBuID0gdC5fY2FwYWJpbGl0eTtcbiAgICAgICAgICAgICAgaWYgKGUubGVuZ3RoID4gMWU1KSBuLnJlc29sdmUoKTtlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIXQuX2lzUmVhZGFibGVTdHJlYW0pIGZvciAoY29uc3QgbiBvZiBlKSB0Ll9sYXlvdXRUZXh0KG4pO1xuICAgICAgICAgICAgICAgIG4ucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KHRoaXMpO1xuICAgICAgICAgIH0sIHRoaXMuX2NhcGFiaWxpdHkucmVqZWN0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZS5UZXh0TGF5ZXJSZW5kZXJUYXNrID0gVGV4dExheWVyUmVuZGVyVGFzaztcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICB2YWx1ZTogITBcbiAgICAgIH0pO1xuICAgICAgZS5Bbm5vdGF0aW9uRWRpdG9yTGF5ZXIgPSB2b2lkIDA7XG4gICAgICBuKDEyNSk7XG4gICAgICBuKDEzNSk7XG4gICAgICBuKDEzNyk7XG4gICAgICBuKDE0MCk7XG4gICAgICBuKDE0Mik7XG4gICAgICBuKDE0NCk7XG4gICAgICBuKDE0Nik7XG4gICAgICB2YXIgaSA9IG4oMSksXG4gICAgICAgIHIgPSBuKDE2MyksXG4gICAgICAgIHMgPSBuKDE2NCksXG4gICAgICAgIGEgPSBuKDE5NiksXG4gICAgICAgIG8gPSBuKDIwMSksXG4gICAgICAgIGwgPSBuKDE2NyksXG4gICAgICAgIGMgPSBuKDIwMik7XG4gICAgICB2YXIgX3JlID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICB2YXIgX3NlID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICB2YXIgX2FlID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICB2YXIgX29lID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICB2YXIgX2xlID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICB2YXIgX2NlID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICB2YXIgX2hlID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICB2YXIgX2RlID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICB2YXIgX3VlID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICB2YXIgX3BlID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICB2YXIgX21lID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgICB2YXIgX2JlID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgICB2YXIgX2dlID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgICB2YXIgX2ZlID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgICBjbGFzcyBBbm5vdGF0aW9uRWRpdG9yTGF5ZXIge1xuICAgICAgICBjb25zdHJ1Y3RvcihfdDEzKSB7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9mZSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9nZSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9iZSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9tZSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX3JlLCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB2b2lkIDBcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfc2UsIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6ICExXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2FlLCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBudWxsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX29lLCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnBvaW50ZXJ1cC5iaW5kKHRoaXMpXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2xlLCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnBvaW50ZXJkb3duLmJpbmQodGhpcylcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfY2UsIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IG5ldyBNYXAoKVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9oZSwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogITFcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfZGUsIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6ICExXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX3VlLCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiAhMVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9wZSwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbGV0IHtcbiAgICAgICAgICAgIHVpTWFuYWdlcjogX2UxMSxcbiAgICAgICAgICAgIHBhZ2VJbmRleDogX243LFxuICAgICAgICAgICAgZGl2OiBfaTQsXG4gICAgICAgICAgICBhY2Nlc3NpYmlsaXR5TWFuYWdlcjogX3I0LFxuICAgICAgICAgICAgYW5ub3RhdGlvbkxheWVyOiBzLFxuICAgICAgICAgICAgdmlld3BvcnQ6IGwsXG4gICAgICAgICAgICBsMTBuOiBoXG4gICAgICAgICAgfSA9IF90MTM7XG4gICAgICAgICAgY29uc3QgZCA9IFthLkZyZWVUZXh0RWRpdG9yLCBvLklua0VkaXRvciwgYy5TdGFtcEVkaXRvcl07XG4gICAgICAgICAgaWYgKCFBbm5vdGF0aW9uRWRpdG9yTGF5ZXIuX2luaXRpYWxpemVkKSB7XG4gICAgICAgICAgICBBbm5vdGF0aW9uRWRpdG9yTGF5ZXIuX2luaXRpYWxpemVkID0gITA7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHQgb2YgZCkgdC5pbml0aWFsaXplKGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfZTExLnJlZ2lzdGVyRWRpdG9yVHlwZXMoZCk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9wZSwgX2UxMSk7XG4gICAgICAgICAgdGhpcy5wYWdlSW5kZXggPSBfbjc7XG4gICAgICAgICAgdGhpcy5kaXYgPSBfaTQ7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9yZSwgX3I0KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX2FlLCBzKTtcbiAgICAgICAgICB0aGlzLnZpZXdwb3J0ID0gbDtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3BlKS5hZGRMYXllcih0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgaXNFbXB0eSgpIHtcbiAgICAgICAgICByZXR1cm4gMCA9PT0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9jZSkuc2l6ZTtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVUb29sYmFyKHQpIHtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3BlKS51cGRhdGVUb29sYmFyKHQpO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZU1vZGUoKSB7XG4gICAgICAgICAgbGV0IHQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1swXSA/IGFyZ3VtZW50c1swXSA6IF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfcGUpLmdldE1vZGUoKTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9mZSwgX2ZlMikuY2FsbCh0aGlzKTtcbiAgICAgICAgICBpZiAodCA9PT0gaS5Bbm5vdGF0aW9uRWRpdG9yVHlwZS5JTkspIHtcbiAgICAgICAgICAgIHRoaXMuYWRkSW5rRWRpdG9ySWZOZWVkZWQoITEpO1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlQ2xpY2soKTtcbiAgICAgICAgICB9IGVsc2UgdGhpcy5lbmFibGVDbGljaygpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfcGUpLnVuc2VsZWN0QWxsKCk7XG4gICAgICAgICAgaWYgKHQgIT09IGkuQW5ub3RhdGlvbkVkaXRvclR5cGUuTk9ORSkge1xuICAgICAgICAgICAgdGhpcy5kaXYuY2xhc3NMaXN0LnRvZ2dsZShcImZyZWVUZXh0RWRpdGluZ1wiLCB0ID09PSBpLkFubm90YXRpb25FZGl0b3JUeXBlLkZSRUVURVhUKTtcbiAgICAgICAgICAgIHRoaXMuZGl2LmNsYXNzTGlzdC50b2dnbGUoXCJpbmtFZGl0aW5nXCIsIHQgPT09IGkuQW5ub3RhdGlvbkVkaXRvclR5cGUuSU5LKTtcbiAgICAgICAgICAgIHRoaXMuZGl2LmNsYXNzTGlzdC50b2dnbGUoXCJzdGFtcEVkaXRpbmdcIiwgdCA9PT0gaS5Bbm5vdGF0aW9uRWRpdG9yVHlwZS5TVEFNUCk7XG4gICAgICAgICAgICB0aGlzLmRpdi5oaWRkZW4gPSAhMTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYWRkSW5rRWRpdG9ySWZOZWVkZWQodCkge1xuICAgICAgICAgIGlmICghdCAmJiBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3BlKS5nZXRNb2RlKCkgIT09IGkuQW5ub3RhdGlvbkVkaXRvclR5cGUuSU5LKSByZXR1cm47XG4gICAgICAgICAgaWYgKCF0KSBmb3IgKGNvbnN0IHQgb2YgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9jZSkudmFsdWVzKCkpIGlmICh0LmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgdC5zZXRJbkJhY2tncm91bmQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfZ2UsIF9nZTIpLmNhbGwodGhpcywge1xuICAgICAgICAgICAgb2Zmc2V0WDogMCxcbiAgICAgICAgICAgIG9mZnNldFk6IDBcbiAgICAgICAgICB9KS5zZXRJbkJhY2tncm91bmQoKTtcbiAgICAgICAgfVxuICAgICAgICBzZXRFZGl0aW5nU3RhdGUodCkge1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfcGUpLnNldEVkaXRpbmdTdGF0ZSh0KTtcbiAgICAgICAgfVxuICAgICAgICBhZGRDb21tYW5kcyh0KSB7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9wZSkuYWRkQ29tbWFuZHModCk7XG4gICAgICAgIH1cbiAgICAgICAgZW5hYmxlKCkge1xuICAgICAgICAgIHRoaXMuZGl2LnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcImF1dG9cIjtcbiAgICAgICAgICBjb25zdCB0ID0gbmV3IFNldCgpO1xuICAgICAgICAgIGZvciAoY29uc3QgZSBvZiBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2NlKS52YWx1ZXMoKSkge1xuICAgICAgICAgICAgZS5lbmFibGVFZGl0aW5nKCk7XG4gICAgICAgICAgICBlLmFubm90YXRpb25FbGVtZW50SWQgJiYgdC5hZGQoZS5hbm5vdGF0aW9uRWxlbWVudElkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCFfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2FlKSkgcmV0dXJuO1xuICAgICAgICAgIGNvbnN0IGUgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2FlKS5nZXRFZGl0YWJsZUFubm90YXRpb25zKCk7XG4gICAgICAgICAgZm9yIChjb25zdCBuIG9mIGUpIHtcbiAgICAgICAgICAgIG4uaGlkZSgpO1xuICAgICAgICAgICAgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfcGUpLmlzRGVsZXRlZEFubm90YXRpb25FbGVtZW50KG4uZGF0YS5pZCkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKHQuaGFzKG4uZGF0YS5pZCkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgY29uc3QgZSA9IHRoaXMuZGVzZXJpYWxpemUobik7XG4gICAgICAgICAgICBpZiAoZSkge1xuICAgICAgICAgICAgICB0aGlzLmFkZE9yUmVidWlsZChlKTtcbiAgICAgICAgICAgICAgZS5lbmFibGVFZGl0aW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRpc2FibGUoKSB7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF91ZSwgITApO1xuICAgICAgICAgIHRoaXMuZGl2LnN0eWxlLnBvaW50ZXJFdmVudHMgPSBcIm5vbmVcIjtcbiAgICAgICAgICBjb25zdCB0ID0gbmV3IFNldCgpO1xuICAgICAgICAgIGZvciAoY29uc3QgZSBvZiBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2NlKS52YWx1ZXMoKSkge1xuICAgICAgICAgICAgZS5kaXNhYmxlRWRpdGluZygpO1xuICAgICAgICAgICAgaWYgKGUuYW5ub3RhdGlvbkVsZW1lbnRJZCAmJiBudWxsID09PSBlLnNlcmlhbGl6ZSgpKSB7XG4gICAgICAgICAgICAgIHZhciBfdGhpcyRnZXRFZGl0YWJsZUFubm87XG4gICAgICAgICAgICAgIChfdGhpcyRnZXRFZGl0YWJsZUFubm8gPSB0aGlzLmdldEVkaXRhYmxlQW5ub3RhdGlvbihlLmFubm90YXRpb25FbGVtZW50SWQpKSA9PT0gbnVsbCB8fCBfdGhpcyRnZXRFZGl0YWJsZUFubm8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJGdldEVkaXRhYmxlQW5uby5zaG93KCk7XG4gICAgICAgICAgICAgIGUucmVtb3ZlKCk7XG4gICAgICAgICAgICB9IGVsc2UgdC5hZGQoZS5hbm5vdGF0aW9uRWxlbWVudElkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfYWUpKSB7XG4gICAgICAgICAgICBjb25zdCBlID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9hZSkuZ2V0RWRpdGFibGVBbm5vdGF0aW9ucygpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBuIG9mIGUpIHtcbiAgICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICAgIGlkOiBlXG4gICAgICAgICAgICAgIH0gPSBuLmRhdGE7XG4gICAgICAgICAgICAgIHQuaGFzKGUpIHx8IF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfcGUpLmlzRGVsZXRlZEFubm90YXRpb25FbGVtZW50KGUpIHx8IG4uc2hvdygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9mZSwgX2ZlMikuY2FsbCh0aGlzKTtcbiAgICAgICAgICB0aGlzLmlzRW1wdHkgJiYgKHRoaXMuZGl2LmhpZGRlbiA9ICEwKTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX3VlLCAhMSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0RWRpdGFibGVBbm5vdGF0aW9uKHQpIHtcbiAgICAgICAgICB2YXIgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0OTtcbiAgICAgICAgICByZXR1cm4gKChfY2xhc3NQcml2YXRlRmllbGRHZXQ5ID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9hZSkpID09PSBudWxsIHx8IF9jbGFzc1ByaXZhdGVGaWVsZEdldDkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jbGFzc1ByaXZhdGVGaWVsZEdldDkuZ2V0RWRpdGFibGVBbm5vdGF0aW9uKHQpKSB8fCBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHNldEFjdGl2ZUVkaXRvcih0KSB7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9wZSkuZ2V0QWN0aXZlKCkgIT09IHQgJiYgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9wZSkuc2V0QWN0aXZlRWRpdG9yKHQpO1xuICAgICAgICB9XG4gICAgICAgIGVuYWJsZUNsaWNrKCkge1xuICAgICAgICAgIHRoaXMuZGl2LmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLCBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2xlKSk7XG4gICAgICAgICAgdGhpcy5kaXYuYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX29lKSk7XG4gICAgICAgIH1cbiAgICAgICAgZGlzYWJsZUNsaWNrKCkge1xuICAgICAgICAgIHRoaXMuZGl2LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLCBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2xlKSk7XG4gICAgICAgICAgdGhpcy5kaXYucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX29lKSk7XG4gICAgICAgIH1cbiAgICAgICAgYXR0YWNoKHQpIHtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2NlKS5zZXQodC5pZCwgdCk7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgYW5ub3RhdGlvbkVsZW1lbnRJZDogZVxuICAgICAgICAgIH0gPSB0O1xuICAgICAgICAgIGUgJiYgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9wZSkuaXNEZWxldGVkQW5ub3RhdGlvbkVsZW1lbnQoZSkgJiYgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9wZSkucmVtb3ZlRGVsZXRlZEFubm90YXRpb25FbGVtZW50KHQpO1xuICAgICAgICB9XG4gICAgICAgIGRldGFjaCh0KSB7XG4gICAgICAgICAgdmFyIF9jbGFzc1ByaXZhdGVGaWVsZEdldDEwO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfY2UpLmRlbGV0ZSh0LmlkKTtcbiAgICAgICAgICAoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0MTAgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3JlKSkgPT09IG51bGwgfHwgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0MTAgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jbGFzc1ByaXZhdGVGaWVsZEdldDEwLnJlbW92ZVBvaW50ZXJJblRleHRMYXllcih0LmNvbnRlbnREaXYpO1xuICAgICAgICAgICFfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3VlKSAmJiB0LmFubm90YXRpb25FbGVtZW50SWQgJiYgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9wZSkuYWRkRGVsZXRlZEFubm90YXRpb25FbGVtZW50KHQpO1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZSh0KSB7XG4gICAgICAgICAgdGhpcy5kZXRhY2godCk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9wZSkucmVtb3ZlRWRpdG9yKHQpO1xuICAgICAgICAgIHQuZGl2LnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHQuZGl2LnN0eWxlLmRpc3BsYXkgPSBcIlwiO1xuICAgICAgICAgICAgdC5kaXYucmVtb3ZlKCk7XG4gICAgICAgICAgICB0LmlzQXR0YWNoZWRUb0RPTSA9ICExO1xuICAgICAgICAgICAgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gZG9jdW1lbnQuYm9keSAmJiBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3BlKS5mb2N1c01haW5Db250YWluZXIoKTtcbiAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2RlKSB8fCB0aGlzLmFkZElua0VkaXRvcklmTmVlZGVkKCExKTtcbiAgICAgICAgfVxuICAgICAgICBhZGQodCkge1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX21lLCBfbWUyKS5jYWxsKHRoaXMsIHQpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfcGUpLmFkZEVkaXRvcih0KTtcbiAgICAgICAgICB0aGlzLmF0dGFjaCh0KTtcbiAgICAgICAgICBpZiAoIXQuaXNBdHRhY2hlZFRvRE9NKSB7XG4gICAgICAgICAgICBjb25zdCBlID0gdC5yZW5kZXIoKTtcbiAgICAgICAgICAgIHRoaXMuZGl2LmFwcGVuZChlKTtcbiAgICAgICAgICAgIHQuaXNBdHRhY2hlZFRvRE9NID0gITA7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubW92ZUVkaXRvckluRE9NKHQpO1xuICAgICAgICAgIHQub25jZUFkZGVkKCk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9wZSkuYWRkVG9Bbm5vdGF0aW9uU3RvcmFnZSh0KTtcbiAgICAgICAgfVxuICAgICAgICBtb3ZlRWRpdG9ySW5ET00odCkge1xuICAgICAgICAgIHZhciBfY2xhc3NQcml2YXRlRmllbGRHZXQxMTtcbiAgICAgICAgICAoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0MTEgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3JlKSkgPT09IG51bGwgfHwgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0MTEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jbGFzc1ByaXZhdGVGaWVsZEdldDExLm1vdmVFbGVtZW50SW5ET00odGhpcy5kaXYsIHQuZGl2LCB0LmNvbnRlbnREaXYsICEwKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRPclJlYnVpbGQodCkge1xuICAgICAgICAgIHQubmVlZHNUb0JlUmVidWlsdCgpID8gdC5yZWJ1aWxkKCkgOiB0aGlzLmFkZCh0KTtcbiAgICAgICAgfVxuICAgICAgICBhZGRVbmRvYWJsZUVkaXRvcih0KSB7XG4gICAgICAgICAgdGhpcy5hZGRDb21tYW5kcyh7XG4gICAgICAgICAgICBjbWQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5hZGRPclJlYnVpbGQodCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdW5kbzogKCkgPT4ge1xuICAgICAgICAgICAgICB0LnJlbW92ZSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG11c3RFeGVjOiAhMVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGdldE5leHRJZCgpIHtcbiAgICAgICAgICByZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9wZSkuZ2V0SWQoKTtcbiAgICAgICAgfVxuICAgICAgICBkZXNlcmlhbGl6ZSh0KSB7XG4gICAgICAgICAgdmFyIF90JGFubm90YXRpb25UeXBlO1xuICAgICAgICAgIHN3aXRjaCAoKF90JGFubm90YXRpb25UeXBlID0gdC5hbm5vdGF0aW9uVHlwZSkgIT09IG51bGwgJiYgX3QkYW5ub3RhdGlvblR5cGUgIT09IHZvaWQgMCA/IF90JGFubm90YXRpb25UeXBlIDogdC5hbm5vdGF0aW9uRWRpdG9yVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBpLkFubm90YXRpb25FZGl0b3JUeXBlLkZSRUVURVhUOlxuICAgICAgICAgICAgICByZXR1cm4gYS5GcmVlVGV4dEVkaXRvci5kZXNlcmlhbGl6ZSh0LCB0aGlzLCBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3BlKSk7XG4gICAgICAgICAgICBjYXNlIGkuQW5ub3RhdGlvbkVkaXRvclR5cGUuSU5LOlxuICAgICAgICAgICAgICByZXR1cm4gby5JbmtFZGl0b3IuZGVzZXJpYWxpemUodCwgdGhpcywgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9wZSkpO1xuICAgICAgICAgICAgY2FzZSBpLkFubm90YXRpb25FZGl0b3JUeXBlLlNUQU1QOlxuICAgICAgICAgICAgICByZXR1cm4gYy5TdGFtcEVkaXRvci5kZXNlcmlhbGl6ZSh0LCB0aGlzLCBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3BlKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHNldFNlbGVjdGVkKHQpIHtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3BlKS5zZXRTZWxlY3RlZCh0KTtcbiAgICAgICAgfVxuICAgICAgICB0b2dnbGVTZWxlY3RlZCh0KSB7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9wZSkudG9nZ2xlU2VsZWN0ZWQodCk7XG4gICAgICAgIH1cbiAgICAgICAgaXNTZWxlY3RlZCh0KSB7XG4gICAgICAgICAgcmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfcGUpLmlzU2VsZWN0ZWQodCk7XG4gICAgICAgIH1cbiAgICAgICAgdW5zZWxlY3QodCkge1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfcGUpLnVuc2VsZWN0KHQpO1xuICAgICAgICB9XG4gICAgICAgIHBvaW50ZXJ1cCh0KSB7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgaXNNYWM6IGVcbiAgICAgICAgICB9ID0gaS5GZWF0dXJlVGVzdC5wbGF0Zm9ybTtcbiAgICAgICAgICBpZiAoISgwICE9PSB0LmJ1dHRvbiB8fCB0LmN0cmxLZXkgJiYgZSkgJiYgdC50YXJnZXQgPT09IHRoaXMuZGl2ICYmIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfaGUpKSB7XG4gICAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX2hlLCAhMSk7XG4gICAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3NlKSA/IF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX2dlLCBfZ2UyKS5jYWxsKHRoaXMsIHQpIDogX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9zZSwgITApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBwb2ludGVyZG93bih0KSB7XG4gICAgICAgICAgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfaGUpKSB7XG4gICAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX2hlLCAhMSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGlzTWFjOiBlXG4gICAgICAgICAgfSA9IGkuRmVhdHVyZVRlc3QucGxhdGZvcm07XG4gICAgICAgICAgaWYgKDAgIT09IHQuYnV0dG9uIHx8IHQuY3RybEtleSAmJiBlKSByZXR1cm47XG4gICAgICAgICAgaWYgKHQudGFyZ2V0ICE9PSB0aGlzLmRpdikgcmV0dXJuO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfaGUsICEwKTtcbiAgICAgICAgICBjb25zdCBuID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9wZSkuZ2V0QWN0aXZlKCk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9zZSwgIW4gfHwgbi5pc0VtcHR5KCkpO1xuICAgICAgICB9XG4gICAgICAgIGRyb3AodCkge1xuICAgICAgICAgIGNvbnN0IGUgPSB0LmRhdGFUcmFuc2Zlci5nZXREYXRhKFwidGV4dC9wbGFpblwiKSxcbiAgICAgICAgICAgIG4gPSBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3BlKS5nZXRFZGl0b3IoZSk7XG4gICAgICAgICAgaWYgKCFuKSByZXR1cm47XG4gICAgICAgICAgdC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHQuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSBcIm1vdmVcIjtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9tZSwgX21lMikuY2FsbCh0aGlzLCBuKTtcbiAgICAgICAgICBjb25zdCBpID0gdGhpcy5kaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksXG4gICAgICAgICAgICByID0gdC5jbGllbnRYIC0gaS54LFxuICAgICAgICAgICAgcyA9IHQuY2xpZW50WSAtIGkueTtcbiAgICAgICAgICBuLnRyYW5zbGF0ZShyIC0gbi5zdGFydFgsIHMgLSBuLnN0YXJ0WSk7XG4gICAgICAgICAgdGhpcy5tb3ZlRWRpdG9ySW5ET00obik7XG4gICAgICAgICAgbi5kaXYuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgICBkcmFnb3Zlcih0KSB7XG4gICAgICAgICAgdC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIGRlc3Ryb3koKSB7XG4gICAgICAgICAgdmFyIF9jbGFzc1ByaXZhdGVGaWVsZEdldDEyO1xuICAgICAgICAgICgoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0MTIgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3BlKS5nZXRBY3RpdmUoKSkgPT09IG51bGwgfHwgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0MTIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jbGFzc1ByaXZhdGVGaWVsZEdldDEyLnBhcmVudCkgPT09IHRoaXMgJiYgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9wZSkuc2V0QWN0aXZlRWRpdG9yKG51bGwpO1xuICAgICAgICAgIGZvciAoY29uc3QgdCBvZiBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2NlKS52YWx1ZXMoKSkge1xuICAgICAgICAgICAgdmFyIF9jbGFzc1ByaXZhdGVGaWVsZEdldDEzO1xuICAgICAgICAgICAgKF9jbGFzc1ByaXZhdGVGaWVsZEdldDEzID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9yZSkpID09PSBudWxsIHx8IF9jbGFzc1ByaXZhdGVGaWVsZEdldDEzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfY2xhc3NQcml2YXRlRmllbGRHZXQxMy5yZW1vdmVQb2ludGVySW5UZXh0TGF5ZXIodC5jb250ZW50RGl2KTtcbiAgICAgICAgICAgIHQuc2V0UGFyZW50KG51bGwpO1xuICAgICAgICAgICAgdC5pc0F0dGFjaGVkVG9ET00gPSAhMTtcbiAgICAgICAgICAgIHQuZGl2LnJlbW92ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmRpdiA9IG51bGw7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9jZSkuY2xlYXIoKTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3BlKS5yZW1vdmVMYXllcih0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZW5kZXIodCkge1xuICAgICAgICAgIGxldCB7XG4gICAgICAgICAgICB2aWV3cG9ydDogZVxuICAgICAgICAgIH0gPSB0O1xuICAgICAgICAgIHRoaXMudmlld3BvcnQgPSBlO1xuICAgICAgICAgICgwLCBsLnNldExheWVyRGltZW5zaW9ucykodGhpcy5kaXYsIGUpO1xuICAgICAgICAgICgwLCBzLmJpbmRFdmVudHMpKHRoaXMsIHRoaXMuZGl2LCBbXCJkcmFnb3ZlclwiLCBcImRyb3BcIl0pO1xuICAgICAgICAgIGZvciAoY29uc3QgdCBvZiBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3BlKS5nZXRFZGl0b3JzKHRoaXMucGFnZUluZGV4KSkgdGhpcy5hZGQodCk7XG4gICAgICAgICAgdGhpcy51cGRhdGVNb2RlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlKHQpIHtcbiAgICAgICAgICBsZXQge1xuICAgICAgICAgICAgdmlld3BvcnQ6IGVcbiAgICAgICAgICB9ID0gdDtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3BlKS5jb21taXRPclJlbW92ZSgpO1xuICAgICAgICAgIHRoaXMudmlld3BvcnQgPSBlO1xuICAgICAgICAgICgwLCBsLnNldExheWVyRGltZW5zaW9ucykodGhpcy5kaXYsIHtcbiAgICAgICAgICAgIHJvdGF0aW9uOiBlLnJvdGF0aW9uXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy51cGRhdGVNb2RlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHBhZ2VEaW1lbnNpb25zKCkge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHBhZ2VXaWR0aDogdCxcbiAgICAgICAgICAgIHBhZ2VIZWlnaHQ6IGVcbiAgICAgICAgICB9ID0gdGhpcy52aWV3cG9ydC5yYXdEaW1zO1xuICAgICAgICAgIHJldHVybiBbdCwgZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF9tZTIodCkge1xuICAgICAgICBpZiAodC5wYXJlbnQgIT09IHRoaXMpIHtcbiAgICAgICAgICB2YXIgX3QkcGFyZW50O1xuICAgICAgICAgIGlmICh0LmFubm90YXRpb25FbGVtZW50SWQpIHtcbiAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfcGUpLmFkZERlbGV0ZWRBbm5vdGF0aW9uRWxlbWVudCh0LmFubm90YXRpb25FbGVtZW50SWQpO1xuICAgICAgICAgICAgci5Bbm5vdGF0aW9uRWRpdG9yLmRlbGV0ZUFubm90YXRpb25FbGVtZW50KHQpO1xuICAgICAgICAgICAgdC5hbm5vdGF0aW9uRWxlbWVudElkID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5hdHRhY2godCk7XG4gICAgICAgICAgKF90JHBhcmVudCA9IHQucGFyZW50KSA9PT0gbnVsbCB8fCBfdCRwYXJlbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90JHBhcmVudC5kZXRhY2godCk7XG4gICAgICAgICAgdC5zZXRQYXJlbnQodGhpcyk7XG4gICAgICAgICAgaWYgKHQuZGl2ICYmIHQuaXNBdHRhY2hlZFRvRE9NKSB7XG4gICAgICAgICAgICB0LmRpdi5yZW1vdmUoKTtcbiAgICAgICAgICAgIHRoaXMuZGl2LmFwcGVuZCh0LmRpdik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfYmUyKHQpIHtcbiAgICAgICAgc3dpdGNoIChfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3BlKS5nZXRNb2RlKCkpIHtcbiAgICAgICAgICBjYXNlIGkuQW5ub3RhdGlvbkVkaXRvclR5cGUuRlJFRVRFWFQ6XG4gICAgICAgICAgICByZXR1cm4gbmV3IGEuRnJlZVRleHRFZGl0b3IodCk7XG4gICAgICAgICAgY2FzZSBpLkFubm90YXRpb25FZGl0b3JUeXBlLklOSzpcbiAgICAgICAgICAgIHJldHVybiBuZXcgby5JbmtFZGl0b3IodCk7XG4gICAgICAgICAgY2FzZSBpLkFubm90YXRpb25FZGl0b3JUeXBlLlNUQU1QOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBjLlN0YW1wRWRpdG9yKHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX2dlMih0KSB7XG4gICAgICAgIGNvbnN0IGUgPSB0aGlzLmdldE5leHRJZCgpLFxuICAgICAgICAgIG4gPSBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9iZSwgX2JlMikuY2FsbCh0aGlzLCB7XG4gICAgICAgICAgICBwYXJlbnQ6IHRoaXMsXG4gICAgICAgICAgICBpZDogZSxcbiAgICAgICAgICAgIHg6IHQub2Zmc2V0WCxcbiAgICAgICAgICAgIHk6IHQub2Zmc2V0WSxcbiAgICAgICAgICAgIHVpTWFuYWdlcjogX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9wZSlcbiAgICAgICAgICB9KTtcbiAgICAgICAgbiAmJiB0aGlzLmFkZChuKTtcbiAgICAgICAgcmV0dXJuIG47XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfZmUyKCkge1xuICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX2RlLCAhMCk7XG4gICAgICAgIGZvciAoY29uc3QgdCBvZiBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2NlKS52YWx1ZXMoKSkgdC5pc0VtcHR5KCkgJiYgdC5yZW1vdmUoKTtcbiAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9kZSwgITEpO1xuICAgICAgfVxuICAgICAgX2RlZmluZVByb3BlcnR5KEFubm90YXRpb25FZGl0b3JMYXllciwgXCJfaW5pdGlhbGl6ZWRcIiwgITEpO1xuICAgICAgZS5Bbm5vdGF0aW9uRWRpdG9yTGF5ZXIgPSBBbm5vdGF0aW9uRWRpdG9yTGF5ZXI7XG4gICAgfSwgKHQsIGUsIG4pID0+IHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgICB2YXIgX2NsYXNzMzA7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgdmFsdWU6ICEwXG4gICAgICB9KTtcbiAgICAgIGUuRnJlZVRleHRFZGl0b3IgPSB2b2lkIDA7XG4gICAgICBuKDg5KTtcbiAgICAgIHZhciBpID0gbigxKSxcbiAgICAgICAgciA9IG4oMTY0KSxcbiAgICAgICAgcyA9IG4oMTYzKSxcbiAgICAgICAgYSA9IG4oMTk3KTtcbiAgICAgIHZhciBfdmUgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfeWUgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfQWUgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfZTEyID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICB2YXIgX1NlID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICB2YXIgX0VlID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICB2YXIgX3hlID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICB2YXIgX3dlID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICB2YXIgX0NlID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICB2YXIgX1RlID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgICB2YXIgX1BlID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgICB2YXIgX1JlID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgICB2YXIgX2tlID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgICB2YXIgX0ZlID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgICB2YXIgX0llID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgICB2YXIgX01lID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgICBjbGFzcyBGcmVlVGV4dEVkaXRvciBleHRlbmRzIHMuQW5ub3RhdGlvbkVkaXRvciB7XG4gICAgICAgIHN0YXRpYyBnZXQgX2tleWJvYXJkTWFuYWdlcigpIHtcbiAgICAgICAgICBjb25zdCB0ID0gRnJlZVRleHRFZGl0b3IucHJvdG90eXBlLFxuICAgICAgICAgICAgYXJyb3dDaGVja2VyID0gdCA9PiB0LmlzRW1wdHkoKSxcbiAgICAgICAgICAgIGUgPSByLkFubm90YXRpb25FZGl0b3JVSU1hbmFnZXIuVFJBTlNMQVRFX1NNQUxMLFxuICAgICAgICAgICAgbiA9IHIuQW5ub3RhdGlvbkVkaXRvclVJTWFuYWdlci5UUkFOU0xBVEVfQklHO1xuICAgICAgICAgIHJldHVybiAoMCwgaS5zaGFkb3cpKHRoaXMsIFwiX2tleWJvYXJkTWFuYWdlclwiLCBuZXcgci5LZXlib2FyZE1hbmFnZXIoW1tbXCJjdHJsK3NcIiwgXCJtYWMrbWV0YStzXCIsIFwiY3RybCtwXCIsIFwibWFjK21ldGErcFwiXSwgdC5jb21taXRPclJlbW92ZSwge1xuICAgICAgICAgICAgYnViYmxlczogITBcbiAgICAgICAgICB9XSwgW1tcImN0cmwrRW50ZXJcIiwgXCJtYWMrbWV0YStFbnRlclwiLCBcIkVzY2FwZVwiLCBcIm1hYytFc2NhcGVcIl0sIHQuY29tbWl0T3JSZW1vdmVdLCBbW1wiQXJyb3dMZWZ0XCIsIFwibWFjK0Fycm93TGVmdFwiXSwgdC5fdHJhbnNsYXRlRW1wdHksIHtcbiAgICAgICAgICAgIGFyZ3M6IFstZSwgMF0sXG4gICAgICAgICAgICBjaGVja2VyOiBhcnJvd0NoZWNrZXJcbiAgICAgICAgICB9XSwgW1tcImN0cmwrQXJyb3dMZWZ0XCIsIFwibWFjK3NoaWZ0K0Fycm93TGVmdFwiXSwgdC5fdHJhbnNsYXRlRW1wdHksIHtcbiAgICAgICAgICAgIGFyZ3M6IFstbiwgMF0sXG4gICAgICAgICAgICBjaGVja2VyOiBhcnJvd0NoZWNrZXJcbiAgICAgICAgICB9XSwgW1tcIkFycm93UmlnaHRcIiwgXCJtYWMrQXJyb3dSaWdodFwiXSwgdC5fdHJhbnNsYXRlRW1wdHksIHtcbiAgICAgICAgICAgIGFyZ3M6IFtlLCAwXSxcbiAgICAgICAgICAgIGNoZWNrZXI6IGFycm93Q2hlY2tlclxuICAgICAgICAgIH1dLCBbW1wiY3RybCtBcnJvd1JpZ2h0XCIsIFwibWFjK3NoaWZ0K0Fycm93UmlnaHRcIl0sIHQuX3RyYW5zbGF0ZUVtcHR5LCB7XG4gICAgICAgICAgICBhcmdzOiBbbiwgMF0sXG4gICAgICAgICAgICBjaGVja2VyOiBhcnJvd0NoZWNrZXJcbiAgICAgICAgICB9XSwgW1tcIkFycm93VXBcIiwgXCJtYWMrQXJyb3dVcFwiXSwgdC5fdHJhbnNsYXRlRW1wdHksIHtcbiAgICAgICAgICAgIGFyZ3M6IFswLCAtZV0sXG4gICAgICAgICAgICBjaGVja2VyOiBhcnJvd0NoZWNrZXJcbiAgICAgICAgICB9XSwgW1tcImN0cmwrQXJyb3dVcFwiLCBcIm1hYytzaGlmdCtBcnJvd1VwXCJdLCB0Ll90cmFuc2xhdGVFbXB0eSwge1xuICAgICAgICAgICAgYXJnczogWzAsIC1uXSxcbiAgICAgICAgICAgIGNoZWNrZXI6IGFycm93Q2hlY2tlclxuICAgICAgICAgIH1dLCBbW1wiQXJyb3dEb3duXCIsIFwibWFjK0Fycm93RG93blwiXSwgdC5fdHJhbnNsYXRlRW1wdHksIHtcbiAgICAgICAgICAgIGFyZ3M6IFswLCBlXSxcbiAgICAgICAgICAgIGNoZWNrZXI6IGFycm93Q2hlY2tlclxuICAgICAgICAgIH1dLCBbW1wiY3RybCtBcnJvd0Rvd25cIiwgXCJtYWMrc2hpZnQrQXJyb3dEb3duXCJdLCB0Ll90cmFuc2xhdGVFbXB0eSwge1xuICAgICAgICAgICAgYXJnczogWzAsIG5dLFxuICAgICAgICAgICAgY2hlY2tlcjogYXJyb3dDaGVja2VyXG4gICAgICAgICAgfV1dKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3RydWN0b3IoX3QxNCkge1xuICAgICAgICAgIHN1cGVyKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgX3QxNCksIHt9LCB7XG4gICAgICAgICAgICBuYW1lOiBcImZyZWVUZXh0RWRpdG9yXCJcbiAgICAgICAgICB9KSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9NZSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9JZSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9GZSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9rZSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9SZSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9QZSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9UZSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX3ZlLCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLmVkaXRvckRpdkJsdXIuYmluZCh0aGlzKVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF95ZSwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5lZGl0b3JEaXZGb2N1cy5iaW5kKHRoaXMpXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX0FlLCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLmVkaXRvckRpdklucHV0LmJpbmQodGhpcylcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfZTEyLCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLmVkaXRvckRpdktleWRvd24uYmluZCh0aGlzKVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9TZSwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdm9pZCAwXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX0VlLCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBcIlwiXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX3hlLCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBcIlwiLmNvbmNhdCh0aGlzLmlkLCBcIi1lZGl0b3JcIilcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfd2UsIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHZvaWQgMFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9DZSwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfU2UsIF90MTQuY29sb3IgfHwgRnJlZVRleHRFZGl0b3IuX2RlZmF1bHRDb2xvciB8fCBzLkFubm90YXRpb25FZGl0b3IuX2RlZmF1bHRMaW5lQ29sb3IpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfd2UsIF90MTQuZm9udFNpemUgfHwgRnJlZVRleHRFZGl0b3IuX2RlZmF1bHRGb250U2l6ZSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGluaXRpYWxpemUodCkge1xuICAgICAgICAgIHRoaXMuX2wxMG5Qcm9taXNlID0gbmV3IE1hcChbXCJmcmVlX3RleHQyX2RlZmF1bHRfY29udGVudFwiLCBcImVkaXRvcl9mcmVlX3RleHQyX2FyaWFfbGFiZWxcIl0ubWFwKGUgPT4gW2UsIHQuZ2V0KGUpXSkpO1xuICAgICAgICAgIGNvbnN0IGUgPSBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk7XG4gICAgICAgICAgdGhpcy5faW50ZXJuYWxQYWRkaW5nID0gcGFyc2VGbG9hdChlLmdldFByb3BlcnR5VmFsdWUoXCItLWZyZWV0ZXh0LXBhZGRpbmdcIikpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyB1cGRhdGVEZWZhdWx0UGFyYW1zKHQsIGUpIHtcbiAgICAgICAgICBzd2l0Y2ggKHQpIHtcbiAgICAgICAgICAgIGNhc2UgaS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5GUkVFVEVYVF9TSVpFOlxuICAgICAgICAgICAgICBGcmVlVGV4dEVkaXRvci5fZGVmYXVsdEZvbnRTaXplID0gZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIGkuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuRlJFRVRFWFRfQ09MT1I6XG4gICAgICAgICAgICAgIEZyZWVUZXh0RWRpdG9yLl9kZWZhdWx0Q29sb3IgPSBlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVQYXJhbXModCwgZSkge1xuICAgICAgICAgIHN3aXRjaCAodCkge1xuICAgICAgICAgICAgY2FzZSBpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLkZSRUVURVhUX1NJWkU6XG4gICAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX1RlLCBfVGUyKS5jYWxsKHRoaXMsIGUpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgaS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5GUkVFVEVYVF9DT0xPUjpcbiAgICAgICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfUGUsIF9QZTIpLmNhbGwodGhpcywgZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBnZXQgZGVmYXVsdFByb3BlcnRpZXNUb1VwZGF0ZSgpIHtcbiAgICAgICAgICByZXR1cm4gW1tpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLkZSRUVURVhUX1NJWkUsIEZyZWVUZXh0RWRpdG9yLl9kZWZhdWx0Rm9udFNpemVdLCBbaS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5GUkVFVEVYVF9DT0xPUiwgRnJlZVRleHRFZGl0b3IuX2RlZmF1bHRDb2xvciB8fCBzLkFubm90YXRpb25FZGl0b3IuX2RlZmF1bHRMaW5lQ29sb3JdXTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgcHJvcGVydGllc1RvVXBkYXRlKCkge1xuICAgICAgICAgIHJldHVybiBbW2kuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuRlJFRVRFWFRfU0laRSwgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF93ZSldLCBbaS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5GUkVFVEVYVF9DT0xPUiwgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9TZSldXTtcbiAgICAgICAgfVxuICAgICAgICBfdHJhbnNsYXRlRW1wdHkodCwgZSkge1xuICAgICAgICAgIHRoaXMuX3VpTWFuYWdlci50cmFuc2xhdGVTZWxlY3RlZEVkaXRvcnModCwgZSwgITApO1xuICAgICAgICB9XG4gICAgICAgIGdldEluaXRpYWxUcmFuc2xhdGlvbigpIHtcbiAgICAgICAgICBjb25zdCB0ID0gdGhpcy5wYXJlbnRTY2FsZTtcbiAgICAgICAgICByZXR1cm4gWy1GcmVlVGV4dEVkaXRvci5faW50ZXJuYWxQYWRkaW5nICogdCwgLShGcmVlVGV4dEVkaXRvci5faW50ZXJuYWxQYWRkaW5nICsgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF93ZSkpICogdF07XG4gICAgICAgIH1cbiAgICAgICAgcmVidWlsZCgpIHtcbiAgICAgICAgICBzdXBlci5yZWJ1aWxkKCk7XG4gICAgICAgICAgbnVsbCAhPT0gdGhpcy5kaXYgJiYgKHRoaXMuaXNBdHRhY2hlZFRvRE9NIHx8IHRoaXMucGFyZW50LmFkZCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICAgICAgZW5hYmxlRWRpdE1vZGUoKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmlzSW5FZGl0TW9kZSgpKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5zZXRFZGl0aW5nU3RhdGUoITEpO1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQudXBkYXRlVG9vbGJhcihpLkFubm90YXRpb25FZGl0b3JUeXBlLkZSRUVURVhUKTtcbiAgICAgICAgICAgIHN1cGVyLmVuYWJsZUVkaXRNb2RlKCk7XG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlEaXYuY2xhc3NMaXN0LnJlbW92ZShcImVuYWJsZWRcIik7XG4gICAgICAgICAgICB0aGlzLmVkaXRvckRpdi5jb250ZW50RWRpdGFibGUgPSAhMDtcbiAgICAgICAgICAgIHRoaXMuZGl2LmRyYWdnYWJsZSA9ICExO1xuICAgICAgICAgICAgdGhpcy5kaXYucmVtb3ZlQXR0cmlidXRlKFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCIpO1xuICAgICAgICAgICAgdGhpcy5lZGl0b3JEaXYuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9lMTIpKTtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yRGl2LmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLCBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3llKSk7XG4gICAgICAgICAgICB0aGlzLmVkaXRvckRpdi5hZGRFdmVudExpc3RlbmVyKFwiYmx1clwiLCBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3ZlKSk7XG4gICAgICAgICAgICB0aGlzLmVkaXRvckRpdi5hZGRFdmVudExpc3RlbmVyKFwiaW5wdXRcIiwgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9BZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkaXNhYmxlRWRpdE1vZGUoKSB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNJbkVkaXRNb2RlKCkpIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50LnNldEVkaXRpbmdTdGF0ZSghMCk7XG4gICAgICAgICAgICBzdXBlci5kaXNhYmxlRWRpdE1vZGUoKTtcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheURpdi5jbGFzc0xpc3QuYWRkKFwiZW5hYmxlZFwiKTtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yRGl2LmNvbnRlbnRFZGl0YWJsZSA9ICExO1xuICAgICAgICAgICAgdGhpcy5kaXYuc2V0QXR0cmlidXRlKFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCIsIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfeGUpKTtcbiAgICAgICAgICAgIHRoaXMuZGl2LmRyYWdnYWJsZSA9ICEwO1xuICAgICAgICAgICAgdGhpcy5lZGl0b3JEaXYucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9lMTIpKTtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yRGl2LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLCBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3llKSk7XG4gICAgICAgICAgICB0aGlzLmVkaXRvckRpdi5yZW1vdmVFdmVudExpc3RlbmVyKFwiYmx1clwiLCBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3ZlKSk7XG4gICAgICAgICAgICB0aGlzLmVkaXRvckRpdi5yZW1vdmVFdmVudExpc3RlbmVyKFwiaW5wdXRcIiwgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9BZSkpO1xuICAgICAgICAgICAgdGhpcy5kaXYuZm9jdXMoe1xuICAgICAgICAgICAgICBwcmV2ZW50U2Nyb2xsOiAhMFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmlzRWRpdGluZyA9ICExO1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQuZGl2LmNsYXNzTGlzdC5hZGQoXCJmcmVlVGV4dEVkaXRpbmdcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvY3VzaW4odCkge1xuICAgICAgICAgIHN1cGVyLmZvY3VzaW4odCk7XG4gICAgICAgICAgdC50YXJnZXQgIT09IHRoaXMuZWRpdG9yRGl2ICYmIHRoaXMuZWRpdG9yRGl2LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgb25jZUFkZGVkKCkge1xuICAgICAgICAgIGlmICh0aGlzLndpZHRoKSBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9NZSwgX01lMikuY2FsbCh0aGlzKTtlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlRWRpdE1vZGUoKTtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yRGl2LmZvY3VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlzRW1wdHkoKSB7XG4gICAgICAgICAgcmV0dXJuICF0aGlzLmVkaXRvckRpdiB8fCBcIlwiID09PSB0aGlzLmVkaXRvckRpdi5pbm5lclRleHQudHJpbSgpO1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZSgpIHtcbiAgICAgICAgICB0aGlzLmlzRWRpdGluZyA9ICExO1xuICAgICAgICAgIGlmICh0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQuc2V0RWRpdGluZ1N0YXRlKCEwKTtcbiAgICAgICAgICAgIHRoaXMucGFyZW50LmRpdi5jbGFzc0xpc3QuYWRkKFwiZnJlZVRleHRFZGl0aW5nXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdXBlci5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgICBjb21taXQoKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmlzSW5FZGl0TW9kZSgpKSByZXR1cm47XG4gICAgICAgICAgc3VwZXIuY29tbWl0KCk7XG4gICAgICAgICAgdGhpcy5kaXNhYmxlRWRpdE1vZGUoKTtcbiAgICAgICAgICBjb25zdCB0ID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9FZSksXG4gICAgICAgICAgICBlID0gX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9FZSwgX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfUmUsIF9SZTIpLmNhbGwodGhpcykudHJpbUVuZCgpKTtcbiAgICAgICAgICBpZiAodCA9PT0gZSkgcmV0dXJuO1xuICAgICAgICAgIGNvbnN0IHNldFRleHQgPSB0ID0+IHtcbiAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfRWUsIHQpO1xuICAgICAgICAgICAgaWYgKHQpIHtcbiAgICAgICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfRmUsIF9GZTIpLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgIHRoaXMucmVidWlsZCgpO1xuICAgICAgICAgICAgICBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9rZSwgX2tlMikuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH0gZWxzZSB0aGlzLnJlbW92ZSgpO1xuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5hZGRDb21tYW5kcyh7XG4gICAgICAgICAgICBjbWQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgc2V0VGV4dChlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bmRvOiAoKSA9PiB7XG4gICAgICAgICAgICAgIHNldFRleHQodCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbXVzdEV4ZWM6ICExXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfa2UsIF9rZTIpLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgc2hvdWxkR2V0S2V5Ym9hcmRFdmVudHMoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaXNJbkVkaXRNb2RlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZW50ZXJJbkVkaXRNb2RlKCkge1xuICAgICAgICAgIHRoaXMuZW5hYmxlRWRpdE1vZGUoKTtcbiAgICAgICAgICB0aGlzLmVkaXRvckRpdi5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIGRibGNsaWNrKHQpIHtcbiAgICAgICAgICB0aGlzLmVudGVySW5FZGl0TW9kZSgpO1xuICAgICAgICB9XG4gICAgICAgIGtleWRvd24odCkge1xuICAgICAgICAgIHQudGFyZ2V0ID09PSB0aGlzLmRpdiAmJiBcIkVudGVyXCIgPT09IHQua2V5ICYmIHRoaXMuZW50ZXJJbkVkaXRNb2RlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWRpdG9yRGl2S2V5ZG93bih0KSB7XG4gICAgICAgICAgRnJlZVRleHRFZGl0b3IuX2tleWJvYXJkTWFuYWdlci5leGVjKHRoaXMsIHQpO1xuICAgICAgICB9XG4gICAgICAgIGVkaXRvckRpdkZvY3VzKHQpIHtcbiAgICAgICAgICB0aGlzLmlzRWRpdGluZyA9ICEwO1xuICAgICAgICB9XG4gICAgICAgIGVkaXRvckRpdkJsdXIodCkge1xuICAgICAgICAgIHRoaXMuaXNFZGl0aW5nID0gITE7XG4gICAgICAgIH1cbiAgICAgICAgZWRpdG9yRGl2SW5wdXQodCkge1xuICAgICAgICAgIHRoaXMucGFyZW50LmRpdi5jbGFzc0xpc3QudG9nZ2xlKFwiZnJlZVRleHRFZGl0aW5nXCIsIHRoaXMuaXNFbXB0eSgpKTtcbiAgICAgICAgfVxuICAgICAgICBkaXNhYmxlRWRpdGluZygpIHtcbiAgICAgICAgICB0aGlzLmVkaXRvckRpdi5zZXRBdHRyaWJ1dGUoXCJyb2xlXCIsIFwiY29tbWVudFwiKTtcbiAgICAgICAgICB0aGlzLmVkaXRvckRpdi5yZW1vdmVBdHRyaWJ1dGUoXCJhcmlhLW11bHRpbGluZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBlbmFibGVFZGl0aW5nKCkge1xuICAgICAgICAgIHRoaXMuZWRpdG9yRGl2LnNldEF0dHJpYnV0ZShcInJvbGVcIiwgXCJ0ZXh0Ym94XCIpO1xuICAgICAgICAgIHRoaXMuZWRpdG9yRGl2LnNldEF0dHJpYnV0ZShcImFyaWEtbXVsdGlsaW5lXCIsICEwKTtcbiAgICAgICAgfVxuICAgICAgICByZW5kZXIoKSB7XG4gICAgICAgICAgaWYgKHRoaXMuZGl2KSByZXR1cm4gdGhpcy5kaXY7XG4gICAgICAgICAgbGV0IHQsIGU7XG4gICAgICAgICAgaWYgKHRoaXMud2lkdGgpIHtcbiAgICAgICAgICAgIHQgPSB0aGlzLng7XG4gICAgICAgICAgICBlID0gdGhpcy55O1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdXBlci5yZW5kZXIoKTtcbiAgICAgICAgICB0aGlzLmVkaXRvckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgICAgdGhpcy5lZGl0b3JEaXYuY2xhc3NOYW1lID0gXCJpbnRlcm5hbFwiO1xuICAgICAgICAgIHRoaXMuZWRpdG9yRGl2LnNldEF0dHJpYnV0ZShcImlkXCIsIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfeGUpKTtcbiAgICAgICAgICB0aGlzLmVuYWJsZUVkaXRpbmcoKTtcbiAgICAgICAgICBGcmVlVGV4dEVkaXRvci5fbDEwblByb21pc2UuZ2V0KFwiZWRpdG9yX2ZyZWVfdGV4dDJfYXJpYV9sYWJlbFwiKS50aGVuKHQgPT4ge1xuICAgICAgICAgICAgdmFyIF90aGlzJGVkaXRvckRpdjtcbiAgICAgICAgICAgIHJldHVybiAoX3RoaXMkZWRpdG9yRGl2ID0gdGhpcy5lZGl0b3JEaXYpID09PSBudWxsIHx8IF90aGlzJGVkaXRvckRpdiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkZWRpdG9yRGl2LnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIiwgdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgRnJlZVRleHRFZGl0b3IuX2wxMG5Qcm9taXNlLmdldChcImZyZWVfdGV4dDJfZGVmYXVsdF9jb250ZW50XCIpLnRoZW4odCA9PiB7XG4gICAgICAgICAgICB2YXIgX3RoaXMkZWRpdG9yRGl2MjtcbiAgICAgICAgICAgIHJldHVybiAoX3RoaXMkZWRpdG9yRGl2MiA9IHRoaXMuZWRpdG9yRGl2KSA9PT0gbnVsbCB8fCBfdGhpcyRlZGl0b3JEaXYyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRlZGl0b3JEaXYyLnNldEF0dHJpYnV0ZShcImRlZmF1bHQtY29udGVudFwiLCB0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmVkaXRvckRpdi5jb250ZW50RWRpdGFibGUgPSAhMDtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBzdHlsZTogblxuICAgICAgICAgIH0gPSB0aGlzLmVkaXRvckRpdjtcbiAgICAgICAgICBuLmZvbnRTaXplID0gXCJjYWxjKFwiLmNvbmNhdChfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3dlKSwgXCJweCAqIHZhcigtLXNjYWxlLWZhY3RvcikpXCIpO1xuICAgICAgICAgIG4uY29sb3IgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1NlKTtcbiAgICAgICAgICB0aGlzLmRpdi5hcHBlbmQodGhpcy5lZGl0b3JEaXYpO1xuICAgICAgICAgIHRoaXMub3ZlcmxheURpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgICAgdGhpcy5vdmVybGF5RGl2LmNsYXNzTGlzdC5hZGQoXCJvdmVybGF5XCIsIFwiZW5hYmxlZFwiKTtcbiAgICAgICAgICB0aGlzLmRpdi5hcHBlbmQodGhpcy5vdmVybGF5RGl2KTtcbiAgICAgICAgICAoMCwgci5iaW5kRXZlbnRzKSh0aGlzLCB0aGlzLmRpdiwgW1wiZGJsY2xpY2tcIiwgXCJrZXlkb3duXCJdKTtcbiAgICAgICAgICBpZiAodGhpcy53aWR0aCkge1xuICAgICAgICAgICAgY29uc3QgW24sIGldID0gdGhpcy5wYXJlbnREaW1lbnNpb25zO1xuICAgICAgICAgICAgaWYgKHRoaXMuYW5ub3RhdGlvbkVsZW1lbnRJZCkge1xuICAgICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb246IHJcbiAgICAgICAgICAgICAgfSA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfQ2UpO1xuICAgICAgICAgICAgICBsZXQgW3MsIGFdID0gdGhpcy5nZXRJbml0aWFsVHJhbnNsYXRpb24oKTtcbiAgICAgICAgICAgICAgW3MsIGFdID0gdGhpcy5wYWdlVHJhbnNsYXRpb25Ub1NjcmVlbihzLCBhKTtcbiAgICAgICAgICAgICAgY29uc3QgW28sIGxdID0gdGhpcy5wYWdlRGltZW5zaW9ucyxcbiAgICAgICAgICAgICAgICBbYywgaF0gPSB0aGlzLnBhZ2VUcmFuc2xhdGlvbjtcbiAgICAgICAgICAgICAgbGV0IGQsIHU7XG4gICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5yb3RhdGlvbikge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgIGQgPSB0ICsgKHJbMF0gLSBjKSAvIG87XG4gICAgICAgICAgICAgICAgICB1ID0gZSArIHRoaXMuaGVpZ2h0IC0gKHJbMV0gLSBoKSAvIGw7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDkwOlxuICAgICAgICAgICAgICAgICAgZCA9IHQgKyAoclswXSAtIGMpIC8gbztcbiAgICAgICAgICAgICAgICAgIHUgPSBlIC0gKHJbMV0gLSBoKSAvIGw7XG4gICAgICAgICAgICAgICAgICBbcywgYV0gPSBbYSwgLXNdO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAxODA6XG4gICAgICAgICAgICAgICAgICBkID0gdCAtIHRoaXMud2lkdGggKyAoclswXSAtIGMpIC8gbztcbiAgICAgICAgICAgICAgICAgIHUgPSBlIC0gKHJbMV0gLSBoKSAvIGw7XG4gICAgICAgICAgICAgICAgICBbcywgYV0gPSBbLXMsIC1hXTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgMjcwOlxuICAgICAgICAgICAgICAgICAgZCA9IHQgKyAoclswXSAtIGMgLSB0aGlzLmhlaWdodCAqIGwpIC8gbztcbiAgICAgICAgICAgICAgICAgIHUgPSBlICsgKHJbMV0gLSBoIC0gdGhpcy53aWR0aCAqIG8pIC8gbDtcbiAgICAgICAgICAgICAgICAgIFtzLCBhXSA9IFstYSwgc107XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdGhpcy5zZXRBdChkICogbiwgdSAqIGksIHMsIGEpO1xuICAgICAgICAgICAgfSBlbHNlIHRoaXMuc2V0QXQodCAqIG4sIGUgKiBpLCB0aGlzLndpZHRoICogbiwgdGhpcy5oZWlnaHQgKiBpKTtcbiAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX0ZlLCBfRmUyKS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5kaXYuZHJhZ2dhYmxlID0gITA7XG4gICAgICAgICAgICB0aGlzLmVkaXRvckRpdi5jb250ZW50RWRpdGFibGUgPSAhMTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kaXYuZHJhZ2dhYmxlID0gITE7XG4gICAgICAgICAgICB0aGlzLmVkaXRvckRpdi5jb250ZW50RWRpdGFibGUgPSAhMDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZGl2O1xuICAgICAgICB9XG4gICAgICAgIGdldCBjb250ZW50RGl2KCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmVkaXRvckRpdjtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgZGVzZXJpYWxpemUodCwgZSwgbikge1xuICAgICAgICAgIGxldCByID0gbnVsbDtcbiAgICAgICAgICBpZiAodCBpbnN0YW5jZW9mIGEuRnJlZVRleHRBbm5vdGF0aW9uRWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdEFwcGVhcmFuY2VEYXRhOiB7XG4gICAgICAgICAgICAgICAgICBmb250U2l6ZTogZSxcbiAgICAgICAgICAgICAgICAgIGZvbnRDb2xvcjogblxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVjdDogcyxcbiAgICAgICAgICAgICAgICByb3RhdGlvbjogYSxcbiAgICAgICAgICAgICAgICBpZDogb1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB0ZXh0Q29udGVudDogbCxcbiAgICAgICAgICAgICAgdGV4dFBvc2l0aW9uOiBjLFxuICAgICAgICAgICAgICBwYXJlbnQ6IHtcbiAgICAgICAgICAgICAgICBwYWdlOiB7XG4gICAgICAgICAgICAgICAgICBwYWdlTnVtYmVyOiBoXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9ID0gdDtcbiAgICAgICAgICAgIGlmICghbCB8fCAwID09PSBsLmxlbmd0aCkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICByID0gdCA9IHtcbiAgICAgICAgICAgICAgYW5ub3RhdGlvblR5cGU6IGkuQW5ub3RhdGlvbkVkaXRvclR5cGUuRlJFRVRFWFQsXG4gICAgICAgICAgICAgIGNvbG9yOiBBcnJheS5mcm9tKG4pLFxuICAgICAgICAgICAgICBmb250U2l6ZTogZSxcbiAgICAgICAgICAgICAgdmFsdWU6IGwuam9pbihcIlxcblwiKSxcbiAgICAgICAgICAgICAgcG9zaXRpb246IGMsXG4gICAgICAgICAgICAgIHBhZ2VJbmRleDogaCAtIDEsXG4gICAgICAgICAgICAgIHJlY3Q6IHMsXG4gICAgICAgICAgICAgIHJvdGF0aW9uOiBhLFxuICAgICAgICAgICAgICBpZDogbyxcbiAgICAgICAgICAgICAgZGVsZXRlZDogITFcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHMgPSBzdXBlci5kZXNlcmlhbGl6ZSh0LCBlLCBuKTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQocywgX3dlLCB0LmZvbnRTaXplKTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQocywgX1NlLCBpLlV0aWwubWFrZUhleENvbG9yKC4uLnQuY29sb3IpKTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQocywgX0VlLCB0LnZhbHVlKTtcbiAgICAgICAgICBzLmFubm90YXRpb25FbGVtZW50SWQgPSB0LmlkIHx8IG51bGw7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHMsIF9DZSwgcik7XG4gICAgICAgICAgcmV0dXJuIHM7XG4gICAgICAgIH1cbiAgICAgICAgc2VyaWFsaXplKCkge1xuICAgICAgICAgIGxldCB0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMF0gJiYgYXJndW1lbnRzWzBdO1xuICAgICAgICAgIGlmICh0aGlzLmlzRW1wdHkoKSkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgaWYgKHRoaXMuZGVsZXRlZCkgcmV0dXJuIHtcbiAgICAgICAgICAgIHBhZ2VJbmRleDogdGhpcy5wYWdlSW5kZXgsXG4gICAgICAgICAgICBpZDogdGhpcy5hbm5vdGF0aW9uRWxlbWVudElkLFxuICAgICAgICAgICAgZGVsZXRlZDogITBcbiAgICAgICAgICB9O1xuICAgICAgICAgIGNvbnN0IGUgPSBGcmVlVGV4dEVkaXRvci5faW50ZXJuYWxQYWRkaW5nICogdGhpcy5wYXJlbnRTY2FsZSxcbiAgICAgICAgICAgIG4gPSB0aGlzLmdldFJlY3QoZSwgZSksXG4gICAgICAgICAgICByID0gcy5Bbm5vdGF0aW9uRWRpdG9yLl9jb2xvck1hbmFnZXIuY29udmVydCh0aGlzLmlzQXR0YWNoZWRUb0RPTSA/IGdldENvbXB1dGVkU3R5bGUodGhpcy5lZGl0b3JEaXYpLmNvbG9yIDogX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9TZSkpLFxuICAgICAgICAgICAgYSA9IHtcbiAgICAgICAgICAgICAgYW5ub3RhdGlvblR5cGU6IGkuQW5ub3RhdGlvbkVkaXRvclR5cGUuRlJFRVRFWFQsXG4gICAgICAgICAgICAgIGNvbG9yOiByLFxuICAgICAgICAgICAgICBmb250U2l6ZTogX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF93ZSksXG4gICAgICAgICAgICAgIHZhbHVlOiBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0VlKSxcbiAgICAgICAgICAgICAgcGFnZUluZGV4OiB0aGlzLnBhZ2VJbmRleCxcbiAgICAgICAgICAgICAgcmVjdDogbixcbiAgICAgICAgICAgICAgcm90YXRpb246IHRoaXMucm90YXRpb25cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKHQpIHJldHVybiBhO1xuICAgICAgICAgIGlmICh0aGlzLmFubm90YXRpb25FbGVtZW50SWQgJiYgIV9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX0llLCBfSWUyKS5jYWxsKHRoaXMsIGEpKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICBhLmlkID0gdGhpcy5hbm5vdGF0aW9uRWxlbWVudElkO1xuICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBfY2xhc3MzMCA9IEZyZWVUZXh0RWRpdG9yO1xuICAgICAgZnVuY3Rpb24gX1RlMih0KSB7XG4gICAgICAgIGNvbnN0IHNldEZvbnRzaXplID0gdCA9PiB7XG4gICAgICAgICAgICB0aGlzLmVkaXRvckRpdi5zdHlsZS5mb250U2l6ZSA9IFwiY2FsYyhcIi5jb25jYXQodCwgXCJweCAqIHZhcigtLXNjYWxlLWZhY3RvcikpXCIpO1xuICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUoMCwgLSh0IC0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF93ZSkpICogdGhpcy5wYXJlbnRTY2FsZSk7XG4gICAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX3dlLCB0KTtcbiAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX2tlLCBfa2UyKS5jYWxsKHRoaXMpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZSA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfd2UpO1xuICAgICAgICB0aGlzLmFkZENvbW1hbmRzKHtcbiAgICAgICAgICBjbWQ6ICgpID0+IHtcbiAgICAgICAgICAgIHNldEZvbnRzaXplKHQpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgdW5kbzogKCkgPT4ge1xuICAgICAgICAgICAgc2V0Rm9udHNpemUoZSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBtdXN0RXhlYzogITAsXG4gICAgICAgICAgdHlwZTogaS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5GUkVFVEVYVF9TSVpFLFxuICAgICAgICAgIG92ZXJ3cml0ZUlmU2FtZVR5cGU6ICEwLFxuICAgICAgICAgIGtlZXBVbmRvOiAhMFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF9QZTIodCkge1xuICAgICAgICBjb25zdCBlID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9TZSk7XG4gICAgICAgIHRoaXMuYWRkQ29tbWFuZHMoe1xuICAgICAgICAgIGNtZDogKCkgPT4ge1xuICAgICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9TZSwgdGhpcy5lZGl0b3JEaXYuc3R5bGUuY29sb3IgPSB0KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIHVuZG86ICgpID0+IHtcbiAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfU2UsIHRoaXMuZWRpdG9yRGl2LnN0eWxlLmNvbG9yID0gZSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBtdXN0RXhlYzogITAsXG4gICAgICAgICAgdHlwZTogaS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5GUkVFVEVYVF9DT0xPUixcbiAgICAgICAgICBvdmVyd3JpdGVJZlNhbWVUeXBlOiAhMCxcbiAgICAgICAgICBrZWVwVW5kbzogITBcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfUmUyKCkge1xuICAgICAgICBjb25zdCB0ID0gdGhpcy5lZGl0b3JEaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJkaXZcIik7XG4gICAgICAgIGlmICgwID09PSB0Lmxlbmd0aCkgcmV0dXJuIHRoaXMuZWRpdG9yRGl2LmlubmVyVGV4dDtcbiAgICAgICAgY29uc3QgZSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IG4gb2YgdCkgZS5wdXNoKG4uaW5uZXJUZXh0LnJlcGxhY2UoL1xcclxcbj98XFxuLywgXCJcIikpO1xuICAgICAgICByZXR1cm4gZS5qb2luKFwiXFxuXCIpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX2tlMigpIHtcbiAgICAgICAgY29uc3QgW3QsIGVdID0gdGhpcy5wYXJlbnREaW1lbnNpb25zO1xuICAgICAgICBsZXQgbjtcbiAgICAgICAgaWYgKHRoaXMuaXNBdHRhY2hlZFRvRE9NKSBuID0gdGhpcy5kaXYuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZWxzZSB7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICBjdXJyZW50TGF5ZXI6IHQsXG4gICAgICAgICAgICAgIGRpdjogZVxuICAgICAgICAgICAgfSA9IHRoaXMsXG4gICAgICAgICAgICBpID0gZS5zdHlsZS5kaXNwbGF5O1xuICAgICAgICAgIGUuc3R5bGUuZGlzcGxheSA9IFwiaGlkZGVuXCI7XG4gICAgICAgICAgdC5kaXYuYXBwZW5kKHRoaXMuZGl2KTtcbiAgICAgICAgICBuID0gZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICBlLnJlbW92ZSgpO1xuICAgICAgICAgIGUuc3R5bGUuZGlzcGxheSA9IGk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucm90YXRpb24gJSAxODAgPT0gdGhpcy5wYXJlbnRSb3RhdGlvbiAlIDE4MCkge1xuICAgICAgICAgIHRoaXMud2lkdGggPSBuLndpZHRoIC8gdDtcbiAgICAgICAgICB0aGlzLmhlaWdodCA9IG4uaGVpZ2h0IC8gZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLndpZHRoID0gbi5oZWlnaHQgLyB0O1xuICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gbi53aWR0aCAvIGU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maXhBbmRTZXRQb3NpdGlvbigpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX0ZlMigpIHtcbiAgICAgICAgdGhpcy5lZGl0b3JEaXYucmVwbGFjZUNoaWxkcmVuKCk7XG4gICAgICAgIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0VlKSkgZm9yIChjb25zdCB0IG9mIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRWUpLnNwbGl0KFwiXFxuXCIpKSB7XG4gICAgICAgICAgY29uc3QgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgICAgZS5hcHBlbmQodCA/IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHQpIDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJyXCIpKTtcbiAgICAgICAgICB0aGlzLmVkaXRvckRpdi5hcHBlbmQoZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF9JZTIodCkge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgdmFsdWU6IGUsXG4gICAgICAgICAgZm9udFNpemU6IG4sXG4gICAgICAgICAgY29sb3I6IGksXG4gICAgICAgICAgcmVjdDogcixcbiAgICAgICAgICBwYWdlSW5kZXg6IHNcbiAgICAgICAgfSA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfQ2UpO1xuICAgICAgICByZXR1cm4gdC52YWx1ZSAhPT0gZSB8fCB0LmZvbnRTaXplICE9PSBuIHx8IHQucmVjdC5zb21lKCh0LCBlKSA9PiBNYXRoLmFicyh0IC0gcltlXSkgPj0gMSkgfHwgdC5jb2xvci5zb21lKCh0LCBlKSA9PiB0ICE9PSBpW2VdKSB8fCB0LnBhZ2VJbmRleCAhPT0gcztcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF9NZTIoKSB7XG4gICAgICAgIGxldCB0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMF0gJiYgYXJndW1lbnRzWzBdO1xuICAgICAgICBpZiAoIXRoaXMuYW5ub3RhdGlvbkVsZW1lbnRJZCkgcmV0dXJuO1xuICAgICAgICBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9rZSwgX2tlMikuY2FsbCh0aGlzKTtcbiAgICAgICAgaWYgKCF0ICYmICgwID09PSB0aGlzLndpZHRoIHx8IDAgPT09IHRoaXMuaGVpZ2h0KSkge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfTWUsIF9NZTIpLmNhbGwodGhpcywgITApLCAwKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZSA9IF9jbGFzczMwLl9pbnRlcm5hbFBhZGRpbmcgKiB0aGlzLnBhcmVudFNjYWxlO1xuICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0NlKS5yZWN0ID0gdGhpcy5nZXRSZWN0KGUsIGUpO1xuICAgICAgfVxuICAgICAgX2RlZmluZVByb3BlcnR5KEZyZWVUZXh0RWRpdG9yLCBcIl9mcmVlVGV4dERlZmF1bHRDb250ZW50XCIsIFwiXCIpO1xuICAgICAgX2RlZmluZVByb3BlcnR5KEZyZWVUZXh0RWRpdG9yLCBcIl9sMTBuUHJvbWlzZVwiLCB2b2lkIDApO1xuICAgICAgX2RlZmluZVByb3BlcnR5KEZyZWVUZXh0RWRpdG9yLCBcIl9pbnRlcm5hbFBhZGRpbmdcIiwgMCk7XG4gICAgICBfZGVmaW5lUHJvcGVydHkoRnJlZVRleHRFZGl0b3IsIFwiX2RlZmF1bHRDb2xvclwiLCBudWxsKTtcbiAgICAgIF9kZWZpbmVQcm9wZXJ0eShGcmVlVGV4dEVkaXRvciwgXCJfZGVmYXVsdEZvbnRTaXplXCIsIDEwKTtcbiAgICAgIF9kZWZpbmVQcm9wZXJ0eShGcmVlVGV4dEVkaXRvciwgXCJfdHlwZVwiLCBcImZyZWV0ZXh0XCIpO1xuICAgICAgZS5GcmVlVGV4dEVkaXRvciA9IEZyZWVUZXh0RWRpdG9yO1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgICAgdmFyIF9yZTIsIF9hbiwgX29uLCBfbG4sIF9jbjtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICB2YWx1ZTogITBcbiAgICAgIH0pO1xuICAgICAgZS5TdGFtcEFubm90YXRpb25FbGVtZW50ID0gZS5JbmtBbm5vdGF0aW9uRWxlbWVudCA9IGUuRnJlZVRleHRBbm5vdGF0aW9uRWxlbWVudCA9IGUuQW5ub3RhdGlvbkxheWVyID0gdm9pZCAwO1xuICAgICAgbig4OSk7XG4gICAgICBuKDEyNSk7XG4gICAgICBuKDEzNSk7XG4gICAgICBuKDEzNyk7XG4gICAgICBuKDE0MCk7XG4gICAgICBuKDE0Mik7XG4gICAgICBuKDE0NCk7XG4gICAgICBuKDE0Nik7XG4gICAgICB2YXIgaSA9IG4oMSksXG4gICAgICAgIHIgPSBuKDE2NyksXG4gICAgICAgIHMgPSBuKDE2MiksXG4gICAgICAgIGEgPSBuKDE5OCksXG4gICAgICAgIG8gPSBuKDE5OSksXG4gICAgICAgIGwgPSBuKDIwMCk7XG4gICAgICBjb25zdCBjID0gMWUzLFxuICAgICAgICBoID0gbmV3IFdlYWtTZXQoKTtcbiAgICAgIGZ1bmN0aW9uIGdldFJlY3REaW1zKHQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB3aWR0aDogdFsyXSAtIHRbMF0sXG4gICAgICAgICAgaGVpZ2h0OiB0WzNdIC0gdFsxXVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY2xhc3MgQW5ub3RhdGlvbkVsZW1lbnRGYWN0b3J5IHtcbiAgICAgICAgc3RhdGljIGNyZWF0ZSh0KSB7XG4gICAgICAgICAgc3dpdGNoICh0LmRhdGEuYW5ub3RhdGlvblR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgaS5Bbm5vdGF0aW9uVHlwZS5MSU5LOlxuICAgICAgICAgICAgICByZXR1cm4gbmV3IExpbmtBbm5vdGF0aW9uRWxlbWVudCh0KTtcbiAgICAgICAgICAgIGNhc2UgaS5Bbm5vdGF0aW9uVHlwZS5URVhUOlxuICAgICAgICAgICAgICByZXR1cm4gbmV3IFRleHRBbm5vdGF0aW9uRWxlbWVudCh0KTtcbiAgICAgICAgICAgIGNhc2UgaS5Bbm5vdGF0aW9uVHlwZS5XSURHRVQ6XG4gICAgICAgICAgICAgIHN3aXRjaCAodC5kYXRhLmZpZWxkVHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJUeFwiOlxuICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUZXh0V2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQodCk7XG4gICAgICAgICAgICAgICAgY2FzZSBcIkJ0blwiOlxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHQuZGF0YS5yYWRpb0J1dHRvbiA/IG5ldyBSYWRpb0J1dHRvbldpZGdldEFubm90YXRpb25FbGVtZW50KHQpIDogdC5kYXRhLmNoZWNrQm94ID8gbmV3IENoZWNrYm94V2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQodCkgOiBuZXcgUHVzaEJ1dHRvbldpZGdldEFubm90YXRpb25FbGVtZW50KHQpO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJDaFwiOlxuICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDaG9pY2VXaWRnZXRBbm5vdGF0aW9uRWxlbWVudCh0KTtcbiAgICAgICAgICAgICAgICBjYXNlIFwiU2lnXCI6XG4gICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNpZ25hdHVyZVdpZGdldEFubm90YXRpb25FbGVtZW50KHQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQodCk7XG4gICAgICAgICAgICBjYXNlIGkuQW5ub3RhdGlvblR5cGUuUE9QVVA6XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgUG9wdXBBbm5vdGF0aW9uRWxlbWVudCh0KTtcbiAgICAgICAgICAgIGNhc2UgaS5Bbm5vdGF0aW9uVHlwZS5GUkVFVEVYVDpcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGcmVlVGV4dEFubm90YXRpb25FbGVtZW50KHQpO1xuICAgICAgICAgICAgY2FzZSBpLkFubm90YXRpb25UeXBlLkxJTkU6XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgTGluZUFubm90YXRpb25FbGVtZW50KHQpO1xuICAgICAgICAgICAgY2FzZSBpLkFubm90YXRpb25UeXBlLlNRVUFSRTpcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTcXVhcmVBbm5vdGF0aW9uRWxlbWVudCh0KTtcbiAgICAgICAgICAgIGNhc2UgaS5Bbm5vdGF0aW9uVHlwZS5DSVJDTEU6XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgQ2lyY2xlQW5ub3RhdGlvbkVsZW1lbnQodCk7XG4gICAgICAgICAgICBjYXNlIGkuQW5ub3RhdGlvblR5cGUuUE9MWUxJTkU6XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgUG9seWxpbmVBbm5vdGF0aW9uRWxlbWVudCh0KTtcbiAgICAgICAgICAgIGNhc2UgaS5Bbm5vdGF0aW9uVHlwZS5DQVJFVDpcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDYXJldEFubm90YXRpb25FbGVtZW50KHQpO1xuICAgICAgICAgICAgY2FzZSBpLkFubm90YXRpb25UeXBlLklOSzpcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBJbmtBbm5vdGF0aW9uRWxlbWVudCh0KTtcbiAgICAgICAgICAgIGNhc2UgaS5Bbm5vdGF0aW9uVHlwZS5QT0xZR09OOlxuICAgICAgICAgICAgICByZXR1cm4gbmV3IFBvbHlnb25Bbm5vdGF0aW9uRWxlbWVudCh0KTtcbiAgICAgICAgICAgIGNhc2UgaS5Bbm5vdGF0aW9uVHlwZS5ISUdITElHSFQ6XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgSGlnaGxpZ2h0QW5ub3RhdGlvbkVsZW1lbnQodCk7XG4gICAgICAgICAgICBjYXNlIGkuQW5ub3RhdGlvblR5cGUuVU5ERVJMSU5FOlxuICAgICAgICAgICAgICByZXR1cm4gbmV3IFVuZGVybGluZUFubm90YXRpb25FbGVtZW50KHQpO1xuICAgICAgICAgICAgY2FzZSBpLkFubm90YXRpb25UeXBlLlNRVUlHR0xZOlxuICAgICAgICAgICAgICByZXR1cm4gbmV3IFNxdWlnZ2x5QW5ub3RhdGlvbkVsZW1lbnQodCk7XG4gICAgICAgICAgICBjYXNlIGkuQW5ub3RhdGlvblR5cGUuU1RSSUtFT1VUOlxuICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0cmlrZU91dEFubm90YXRpb25FbGVtZW50KHQpO1xuICAgICAgICAgICAgY2FzZSBpLkFubm90YXRpb25UeXBlLlNUQU1QOlxuICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0YW1wQW5ub3RhdGlvbkVsZW1lbnQodCk7XG4gICAgICAgICAgICBjYXNlIGkuQW5ub3RhdGlvblR5cGUuRklMRUFUVEFDSE1FTlQ6XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgRmlsZUF0dGFjaG1lbnRBbm5vdGF0aW9uRWxlbWVudCh0KTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgQW5ub3RhdGlvbkVsZW1lbnQodCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgX0RlID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICBjbGFzcyBBbm5vdGF0aW9uRWxlbWVudCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHQpIHtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfRGUsIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6ICExXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbGV0IHtcbiAgICAgICAgICAgIGlzUmVuZGVyYWJsZTogZSA9ICExLFxuICAgICAgICAgICAgaWdub3JlQm9yZGVyOiBuID0gITEsXG4gICAgICAgICAgICBjcmVhdGVRdWFkcmlsYXRlcmFsczogaSA9ICExXG4gICAgICAgICAgfSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzFdID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgICAgICAgdGhpcy5pc1JlbmRlcmFibGUgPSBlO1xuICAgICAgICAgIHRoaXMuZGF0YSA9IHQuZGF0YTtcbiAgICAgICAgICB0aGlzLmxheWVyID0gdC5sYXllcjtcbiAgICAgICAgICB0aGlzLmxpbmtTZXJ2aWNlID0gdC5saW5rU2VydmljZTtcbiAgICAgICAgICB0aGlzLmRvd25sb2FkTWFuYWdlciA9IHQuZG93bmxvYWRNYW5hZ2VyO1xuICAgICAgICAgIHRoaXMuaW1hZ2VSZXNvdXJjZXNQYXRoID0gdC5pbWFnZVJlc291cmNlc1BhdGg7XG4gICAgICAgICAgdGhpcy5yZW5kZXJGb3JtcyA9IHQucmVuZGVyRm9ybXM7XG4gICAgICAgICAgdGhpcy5zdmdGYWN0b3J5ID0gdC5zdmdGYWN0b3J5O1xuICAgICAgICAgIHRoaXMuYW5ub3RhdGlvblN0b3JhZ2UgPSB0LmFubm90YXRpb25TdG9yYWdlO1xuICAgICAgICAgIHRoaXMuZW5hYmxlU2NyaXB0aW5nID0gdC5lbmFibGVTY3JpcHRpbmc7XG4gICAgICAgICAgdGhpcy5oYXNKU0FjdGlvbnMgPSB0Lmhhc0pTQWN0aW9ucztcbiAgICAgICAgICB0aGlzLl9maWVsZE9iamVjdHMgPSB0LmZpZWxkT2JqZWN0cztcbiAgICAgICAgICB0aGlzLnBhcmVudCA9IHQucGFyZW50O1xuICAgICAgICAgIGUgJiYgKHRoaXMuY29udGFpbmVyID0gdGhpcy5fY3JlYXRlQ29udGFpbmVyKG4pKTtcbiAgICAgICAgICBpICYmIHRoaXMuX2NyZWF0ZVF1YWRyaWxhdGVyYWxzKCk7XG4gICAgICAgIH1cbiAgICAgICAgX2NyZWF0ZUNvbnRhaW5lcih0KSB7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICBkYXRhOiBlLFxuICAgICAgICAgICAgICBwYXJlbnQ6IHtcbiAgICAgICAgICAgICAgICBwYWdlOiBuLFxuICAgICAgICAgICAgICAgIHZpZXdwb3J0OiByXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gPSB0aGlzLFxuICAgICAgICAgICAgcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzZWN0aW9uXCIpO1xuICAgICAgICAgIHMuc2V0QXR0cmlidXRlKFwiZGF0YS1hbm5vdGF0aW9uLWlkXCIsIGUuaWQpO1xuICAgICAgICAgIHMuc3R5bGUuekluZGV4ID0gdGhpcy5wYXJlbnQuekluZGV4Kys7XG4gICAgICAgICAgdGhpcy5kYXRhLnBvcHVwUmVmICYmIHMuc2V0QXR0cmlidXRlKFwiYXJpYS1oYXNwb3B1cFwiLCBcImRpYWxvZ1wiKTtcbiAgICAgICAgICBlLm5vUm90YXRlICYmIHMuY2xhc3NMaXN0LmFkZChcIm5vcm90YXRlXCIpO1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHBhZ2VXaWR0aDogYSxcbiAgICAgICAgICAgIHBhZ2VIZWlnaHQ6IG8sXG4gICAgICAgICAgICBwYWdlWDogbCxcbiAgICAgICAgICAgIHBhZ2VZOiBjXG4gICAgICAgICAgfSA9IHIucmF3RGltcztcbiAgICAgICAgICBpZiAoIWUucmVjdCB8fCB0aGlzIGluc3RhbmNlb2YgUG9wdXBBbm5vdGF0aW9uRWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICByb3RhdGlvbjogdFxuICAgICAgICAgICAgfSA9IGU7XG4gICAgICAgICAgICBlLmhhc093bkNhbnZhcyB8fCAwID09PSB0IHx8IHRoaXMuc2V0Um90YXRpb24odCwgcyk7XG4gICAgICAgICAgICByZXR1cm4gcztcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICB3aWR0aDogaCxcbiAgICAgICAgICAgICAgaGVpZ2h0OiBkXG4gICAgICAgICAgICB9ID0gZ2V0UmVjdERpbXMoZS5yZWN0KSxcbiAgICAgICAgICAgIHUgPSBpLlV0aWwubm9ybWFsaXplUmVjdChbZS5yZWN0WzBdLCBuLnZpZXdbM10gLSBlLnJlY3RbMV0gKyBuLnZpZXdbMV0sIGUucmVjdFsyXSwgbi52aWV3WzNdIC0gZS5yZWN0WzNdICsgbi52aWV3WzFdXSk7XG4gICAgICAgICAgaWYgKCF0ICYmIGUuYm9yZGVyU3R5bGUud2lkdGggPiAwKSB7XG4gICAgICAgICAgICBzLnN0eWxlLmJvcmRlcldpZHRoID0gXCJcIi5jb25jYXQoZS5ib3JkZXJTdHlsZS53aWR0aCwgXCJweFwiKTtcbiAgICAgICAgICAgIGNvbnN0IHQgPSBlLmJvcmRlclN0eWxlLmhvcml6b250YWxDb3JuZXJSYWRpdXMsXG4gICAgICAgICAgICAgIG4gPSBlLmJvcmRlclN0eWxlLnZlcnRpY2FsQ29ybmVyUmFkaXVzO1xuICAgICAgICAgICAgaWYgKHQgPiAwIHx8IG4gPiAwKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGUgPSBcImNhbGMoXCIuY29uY2F0KHQsIFwicHggKiB2YXIoLS1zY2FsZS1mYWN0b3IpKSAvIGNhbGMoXCIpLmNvbmNhdChuLCBcInB4ICogdmFyKC0tc2NhbGUtZmFjdG9yKSlcIik7XG4gICAgICAgICAgICAgIHMuc3R5bGUuYm9yZGVyUmFkaXVzID0gZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcyBpbnN0YW5jZW9mIFJhZGlvQnV0dG9uV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgY29uc3QgdCA9IFwiY2FsYyhcIi5jb25jYXQoaCwgXCJweCAqIHZhcigtLXNjYWxlLWZhY3RvcikpIC8gY2FsYyhcIikuY29uY2F0KGQsIFwicHggKiB2YXIoLS1zY2FsZS1mYWN0b3IpKVwiKTtcbiAgICAgICAgICAgICAgcy5zdHlsZS5ib3JkZXJSYWRpdXMgPSB0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3dpdGNoIChlLmJvcmRlclN0eWxlLnN0eWxlKSB7XG4gICAgICAgICAgICAgIGNhc2UgaS5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLlNPTElEOlxuICAgICAgICAgICAgICAgIHMuc3R5bGUuYm9yZGVyU3R5bGUgPSBcInNvbGlkXCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgaS5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLkRBU0hFRDpcbiAgICAgICAgICAgICAgICBzLnN0eWxlLmJvcmRlclN0eWxlID0gXCJkYXNoZWRcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBpLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuQkVWRUxFRDpcbiAgICAgICAgICAgICAgICAoMCwgaS53YXJuKShcIlVuaW1wbGVtZW50ZWQgYm9yZGVyIHN0eWxlOiBiZXZlbGVkXCIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIGkuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5JTlNFVDpcbiAgICAgICAgICAgICAgICAoMCwgaS53YXJuKShcIlVuaW1wbGVtZW50ZWQgYm9yZGVyIHN0eWxlOiBpbnNldFwiKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBpLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuVU5ERVJMSU5FOlxuICAgICAgICAgICAgICAgIHMuc3R5bGUuYm9yZGVyQm90dG9tU3R5bGUgPSBcInNvbGlkXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByID0gZS5ib3JkZXJDb2xvciB8fCBudWxsO1xuICAgICAgICAgICAgaWYgKHIpIHtcbiAgICAgICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9EZSwgITApO1xuICAgICAgICAgICAgICBzLnN0eWxlLmJvcmRlckNvbG9yID0gaS5VdGlsLm1ha2VIZXhDb2xvcigwIHwgclswXSwgMCB8IHJbMV0sIDAgfCByWzJdKTtcbiAgICAgICAgICAgIH0gZWxzZSBzLnN0eWxlLmJvcmRlcldpZHRoID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcy5zdHlsZS5sZWZ0ID0gMTAwICogKHVbMF0gLSBsKSAvIGEgKyBcIiVcIjtcbiAgICAgICAgICBzLnN0eWxlLnRvcCA9IDEwMCAqICh1WzFdIC0gYykgLyBvICsgXCIlXCI7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgcm90YXRpb246IHBcbiAgICAgICAgICB9ID0gZTtcbiAgICAgICAgICBpZiAoZS5oYXNPd25DYW52YXMgfHwgMCA9PT0gcCkge1xuICAgICAgICAgICAgcy5zdHlsZS53aWR0aCA9IDEwMCAqIGggLyBhICsgXCIlXCI7XG4gICAgICAgICAgICBzLnN0eWxlLmhlaWdodCA9IDEwMCAqIGQgLyBvICsgXCIlXCI7XG4gICAgICAgICAgfSBlbHNlIHRoaXMuc2V0Um90YXRpb24ocCwgcyk7XG4gICAgICAgICAgcmV0dXJuIHM7XG4gICAgICAgIH1cbiAgICAgICAgc2V0Um90YXRpb24odCkge1xuICAgICAgICAgIGxldCBlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMV0gPyBhcmd1bWVudHNbMV0gOiB0aGlzLmNvbnRhaW5lcjtcbiAgICAgICAgICBpZiAoIXRoaXMuZGF0YS5yZWN0KSByZXR1cm47XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICBwYWdlV2lkdGg6IG4sXG4gICAgICAgICAgICAgIHBhZ2VIZWlnaHQ6IGlcbiAgICAgICAgICAgIH0gPSB0aGlzLnBhcmVudC52aWV3cG9ydC5yYXdEaW1zLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB3aWR0aDogcixcbiAgICAgICAgICAgICAgaGVpZ2h0OiBzXG4gICAgICAgICAgICB9ID0gZ2V0UmVjdERpbXModGhpcy5kYXRhLnJlY3QpO1xuICAgICAgICAgIGxldCBhLCBvO1xuICAgICAgICAgIGlmICh0ICUgMTgwID09IDApIHtcbiAgICAgICAgICAgIGEgPSAxMDAgKiByIC8gbjtcbiAgICAgICAgICAgIG8gPSAxMDAgKiBzIC8gaTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYSA9IDEwMCAqIHMgLyBuO1xuICAgICAgICAgICAgbyA9IDEwMCAqIHIgLyBpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlLnN0eWxlLndpZHRoID0gXCJcIi5jb25jYXQoYSwgXCIlXCIpO1xuICAgICAgICAgIGUuc3R5bGUuaGVpZ2h0ID0gXCJcIi5jb25jYXQobywgXCIlXCIpO1xuICAgICAgICAgIGUuc2V0QXR0cmlidXRlKFwiZGF0YS1tYWluLXJvdGF0aW9uXCIsICgzNjAgLSB0KSAlIDM2MCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IF9jb21tb25BY3Rpb25zKCkge1xuICAgICAgICAgIGNvbnN0IHNldENvbG9yID0gKHQsIGUsIG4pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGkgPSBuLmRldGFpbFt0XTtcbiAgICAgICAgICAgIG4udGFyZ2V0LnN0eWxlW2VdID0gYS5Db2xvckNvbnZlcnRlcnNbXCJcIi5jb25jYXQoaVswXSwgXCJfSFRNTFwiKV0oaS5zbGljZSgxKSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gKDAsIGkuc2hhZG93KSh0aGlzLCBcIl9jb21tb25BY3Rpb25zXCIsIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IHQgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBlID0gdC5kZXRhaWwuZGlzcGxheSAlIDIgPT0gMTtcbiAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuc3R5bGUudmlzaWJpbGl0eSA9IGUgPyBcImhpZGRlblwiIDogXCJ2aXNpYmxlXCI7XG4gICAgICAgICAgICAgIHRoaXMuYW5ub3RhdGlvblN0b3JhZ2Uuc2V0VmFsdWUodGhpcy5kYXRhLmlkLCB7XG4gICAgICAgICAgICAgICAgaGlkZGVuOiBlLFxuICAgICAgICAgICAgICAgIHByaW50OiAwID09PSB0LmRldGFpbC5kaXNwbGF5IHx8IDMgPT09IHQuZGV0YWlsLmRpc3BsYXlcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcHJpbnQ6IHQgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmFubm90YXRpb25TdG9yYWdlLnNldFZhbHVlKHRoaXMuZGF0YS5pZCwge1xuICAgICAgICAgICAgICAgIHByaW50OiB0LmRldGFpbC5wcmludFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoaWRkZW46IHQgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5zdHlsZS52aXNpYmlsaXR5ID0gdC5kZXRhaWwuaGlkZGVuID8gXCJoaWRkZW5cIiA6IFwidmlzaWJsZVwiO1xuICAgICAgICAgICAgICB0aGlzLmFubm90YXRpb25TdG9yYWdlLnNldFZhbHVlKHRoaXMuZGF0YS5pZCwge1xuICAgICAgICAgICAgICAgIGhpZGRlbjogdC5kZXRhaWwuaGlkZGVuXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZvY3VzOiB0ID0+IHtcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0LnRhcmdldC5mb2N1cyh7XG4gICAgICAgICAgICAgICAgcHJldmVudFNjcm9sbDogITFcbiAgICAgICAgICAgICAgfSksIDApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHVzZXJOYW1lOiB0ID0+IHtcbiAgICAgICAgICAgICAgdC50YXJnZXQudGl0bGUgPSB0LmRldGFpbC51c2VyTmFtZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZWFkb25seTogdCA9PiB7XG4gICAgICAgICAgICAgIHQuZGV0YWlsLnJlYWRvbmx5ID8gdC50YXJnZXQuc2V0QXR0cmlidXRlKFwicmVhZG9ubHlcIiwgXCJcIikgOiB0LnRhcmdldC5yZW1vdmVBdHRyaWJ1dGUoXCJyZWFkb25seVwiKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1aXJlZDogdCA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX3NldFJlcXVpcmVkKHQudGFyZ2V0LCB0LmRldGFpbC5yZXF1aXJlZCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYmdDb2xvcjogdCA9PiB7XG4gICAgICAgICAgICAgIHNldENvbG9yKFwiYmdDb2xvclwiLCBcImJhY2tncm91bmRDb2xvclwiLCB0KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmaWxsQ29sb3I6IHQgPT4ge1xuICAgICAgICAgICAgICBzZXRDb2xvcihcImZpbGxDb2xvclwiLCBcImJhY2tncm91bmRDb2xvclwiLCB0KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmZ0NvbG9yOiB0ID0+IHtcbiAgICAgICAgICAgICAgc2V0Q29sb3IoXCJmZ0NvbG9yXCIsIFwiY29sb3JcIiwgdCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGV4dENvbG9yOiB0ID0+IHtcbiAgICAgICAgICAgICAgc2V0Q29sb3IoXCJ0ZXh0Q29sb3JcIiwgXCJjb2xvclwiLCB0KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBib3JkZXJDb2xvcjogdCA9PiB7XG4gICAgICAgICAgICAgIHNldENvbG9yKFwiYm9yZGVyQ29sb3JcIiwgXCJib3JkZXJDb2xvclwiLCB0KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdHJva2VDb2xvcjogdCA9PiB7XG4gICAgICAgICAgICAgIHNldENvbG9yKFwic3Ryb2tlQ29sb3JcIiwgXCJib3JkZXJDb2xvclwiLCB0KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByb3RhdGlvbjogdCA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGUgPSB0LmRldGFpbC5yb3RhdGlvbjtcbiAgICAgICAgICAgICAgdGhpcy5zZXRSb3RhdGlvbihlKTtcbiAgICAgICAgICAgICAgdGhpcy5hbm5vdGF0aW9uU3RvcmFnZS5zZXRWYWx1ZSh0aGlzLmRhdGEuaWQsIHtcbiAgICAgICAgICAgICAgICByb3RhdGlvbjogZVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBfZGlzcGF0Y2hFdmVudEZyb21TYW5kYm94KHQsIGUpIHtcbiAgICAgICAgICBjb25zdCBuID0gdGhpcy5fY29tbW9uQWN0aW9ucztcbiAgICAgICAgICBmb3IgKGNvbnN0IGkgb2YgT2JqZWN0LmtleXMoZS5kZXRhaWwpKSB7XG4gICAgICAgICAgICBjb25zdCByID0gdFtpXSB8fCBuW2ldO1xuICAgICAgICAgICAgciA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByKGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBfc2V0RGVmYXVsdFByb3BlcnRpZXNGcm9tSlModCkge1xuICAgICAgICAgIGlmICghdGhpcy5lbmFibGVTY3JpcHRpbmcpIHJldHVybjtcbiAgICAgICAgICBjb25zdCBlID0gdGhpcy5hbm5vdGF0aW9uU3RvcmFnZS5nZXRSYXdWYWx1ZSh0aGlzLmRhdGEuaWQpO1xuICAgICAgICAgIGlmICghZSkgcmV0dXJuO1xuICAgICAgICAgIGNvbnN0IG4gPSB0aGlzLl9jb21tb25BY3Rpb25zO1xuICAgICAgICAgIGZvciAoY29uc3QgW2ksIHJdIG9mIE9iamVjdC5lbnRyaWVzKGUpKSB7XG4gICAgICAgICAgICBjb25zdCBzID0gbltpXTtcbiAgICAgICAgICAgIGlmIChzKSB7XG4gICAgICAgICAgICAgIHMoe1xuICAgICAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgICAgW2ldOiByXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IHRcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGRlbGV0ZSBlW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBfY3JlYXRlUXVhZHJpbGF0ZXJhbHMoKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLmNvbnRhaW5lcikgcmV0dXJuO1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHF1YWRQb2ludHM6IHRcbiAgICAgICAgICB9ID0gdGhpcy5kYXRhO1xuICAgICAgICAgIGlmICghdCkgcmV0dXJuO1xuICAgICAgICAgIGNvbnN0IFtlLCBuLCBpLCByXSA9IHRoaXMuZGF0YS5yZWN0O1xuICAgICAgICAgIGlmICgxID09PSB0Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgWywge1xuICAgICAgICAgICAgICB4OiBzLFxuICAgICAgICAgICAgICB5OiBhXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgIHg6IG8sXG4gICAgICAgICAgICAgIHk6IGxcbiAgICAgICAgICAgIH1dID0gdFswXTtcbiAgICAgICAgICAgIGlmIChpID09PSBzICYmIHIgPT09IGEgJiYgZSA9PT0gbyAmJiBuID09PSBsKSByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHN0eWxlOiBzXG4gICAgICAgICAgfSA9IHRoaXMuY29udGFpbmVyO1xuICAgICAgICAgIGxldCBhO1xuICAgICAgICAgIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0RlKSkge1xuICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICBib3JkZXJDb2xvcjogdCxcbiAgICAgICAgICAgICAgYm9yZGVyV2lkdGg6IGVcbiAgICAgICAgICAgIH0gPSBzO1xuICAgICAgICAgICAgcy5ib3JkZXJXaWR0aCA9IDA7XG4gICAgICAgICAgICBhID0gW1widXJsKCdkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCxcIiwgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiJywgJyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPVwibm9uZVwiIHZpZXdCb3g9XCIwIDAgMSAxXCI+JywgXCI8ZyBmaWxsPVxcXCJ0cmFuc3BhcmVudFxcXCIgc3Ryb2tlPVxcXCJcIi5jb25jYXQodCwgXCJcXFwiIHN0cm9rZS13aWR0aD1cXFwiXCIpLmNvbmNhdChlLCBcIlxcXCI+XCIpXTtcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJoYXNCb3JkZXJcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IG8gPSBpIC0gZSxcbiAgICAgICAgICAgIGwgPSByIC0gbixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3ZnRmFjdG9yeTogY1xuICAgICAgICAgICAgfSA9IHRoaXMsXG4gICAgICAgICAgICBoID0gYy5jcmVhdGVFbGVtZW50KFwic3ZnXCIpO1xuICAgICAgICAgIGguY2xhc3NMaXN0LmFkZChcInF1YWRyaWxhdGVyYWxzQ29udGFpbmVyXCIpO1xuICAgICAgICAgIGguc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgMCk7XG4gICAgICAgICAgaC5zZXRBdHRyaWJ1dGUoXCJoZWlnaHRcIiwgMCk7XG4gICAgICAgICAgY29uc3QgZCA9IGMuY3JlYXRlRWxlbWVudChcImRlZnNcIik7XG4gICAgICAgICAgaC5hcHBlbmQoZCk7XG4gICAgICAgICAgY29uc3QgdSA9IGMuY3JlYXRlRWxlbWVudChcImNsaXBQYXRoXCIpLFxuICAgICAgICAgICAgcCA9IFwiY2xpcHBhdGhfXCIuY29uY2F0KHRoaXMuZGF0YS5pZCk7XG4gICAgICAgICAgdS5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBwKTtcbiAgICAgICAgICB1LnNldEF0dHJpYnV0ZShcImNsaXBQYXRoVW5pdHNcIiwgXCJvYmplY3RCb3VuZGluZ0JveFwiKTtcbiAgICAgICAgICBkLmFwcGVuZCh1KTtcbiAgICAgICAgICBmb3IgKGNvbnN0IFssIHtcbiAgICAgICAgICAgIHg6IG4sXG4gICAgICAgICAgICB5OiBpXG4gICAgICAgICAgfSwge1xuICAgICAgICAgICAgeDogcyxcbiAgICAgICAgICAgIHk6IGhcbiAgICAgICAgICB9XSBvZiB0KSB7XG4gICAgICAgICAgICB2YXIgX2EzO1xuICAgICAgICAgICAgY29uc3QgdCA9IGMuY3JlYXRlRWxlbWVudChcInJlY3RcIiksXG4gICAgICAgICAgICAgIGQgPSAocyAtIGUpIC8gbyxcbiAgICAgICAgICAgICAgcCA9IChyIC0gaSkgLyBsLFxuICAgICAgICAgICAgICBmID0gKG4gLSBzKSAvIG8sXG4gICAgICAgICAgICAgIGcgPSAoaSAtIGgpIC8gbDtcbiAgICAgICAgICAgIHQuc2V0QXR0cmlidXRlKFwieFwiLCBkKTtcbiAgICAgICAgICAgIHQuc2V0QXR0cmlidXRlKFwieVwiLCBwKTtcbiAgICAgICAgICAgIHQuc2V0QXR0cmlidXRlKFwid2lkdGhcIiwgZik7XG4gICAgICAgICAgICB0LnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBnKTtcbiAgICAgICAgICAgIHUuYXBwZW5kKHQpO1xuICAgICAgICAgICAgKF9hMyA9IGEpID09PSBudWxsIHx8IF9hMyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EzLnB1c2goXCI8cmVjdCB2ZWN0b3ItZWZmZWN0PVxcXCJub24tc2NhbGluZy1zdHJva2VcXFwiIHg9XFxcIlwiLmNvbmNhdChkLCBcIlxcXCIgeT1cXFwiXCIpLmNvbmNhdChwLCBcIlxcXCIgd2lkdGg9XFxcIlwiKS5jb25jYXQoZiwgXCJcXFwiIGhlaWdodD1cXFwiXCIpLmNvbmNhdChnLCBcIlxcXCIvPlwiKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0RlKSkge1xuICAgICAgICAgICAgYS5wdXNoKFwiPC9nPjwvc3ZnPicpXCIpO1xuICAgICAgICAgICAgcy5iYWNrZ3JvdW5kSW1hZ2UgPSBhLmpvaW4oXCJcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZChoKTtcbiAgICAgICAgICB0aGlzLmNvbnRhaW5lci5zdHlsZS5jbGlwUGF0aCA9IFwidXJsKCNcIi5jb25jYXQocCwgXCIpXCIpO1xuICAgICAgICB9XG4gICAgICAgIF9jcmVhdGVQb3B1cCgpIHtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBjb250YWluZXI6IHQsXG4gICAgICAgICAgICBkYXRhOiBlXG4gICAgICAgICAgfSA9IHRoaXM7XG4gICAgICAgICAgdC5zZXRBdHRyaWJ1dGUoXCJhcmlhLWhhc3BvcHVwXCIsIFwiZGlhbG9nXCIpO1xuICAgICAgICAgIGNvbnN0IG4gPSBuZXcgUG9wdXBBbm5vdGF0aW9uRWxlbWVudCh7XG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIGNvbG9yOiBlLmNvbG9yLFxuICAgICAgICAgICAgICB0aXRsZU9iajogZS50aXRsZU9iaixcbiAgICAgICAgICAgICAgbW9kaWZpY2F0aW9uRGF0ZTogZS5tb2RpZmljYXRpb25EYXRlLFxuICAgICAgICAgICAgICBjb250ZW50c09iajogZS5jb250ZW50c09iaixcbiAgICAgICAgICAgICAgcmljaFRleHQ6IGUucmljaFRleHQsXG4gICAgICAgICAgICAgIHBhcmVudFJlY3Q6IGUucmVjdCxcbiAgICAgICAgICAgICAgYm9yZGVyU3R5bGU6IDAsXG4gICAgICAgICAgICAgIGlkOiBcInBvcHVwX1wiLmNvbmNhdChlLmlkKSxcbiAgICAgICAgICAgICAgcm90YXRpb246IGUucm90YXRpb25cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwYXJlbnQ6IHRoaXMucGFyZW50LFxuICAgICAgICAgICAgZWxlbWVudHM6IFt0aGlzXVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMucGFyZW50LmRpdi5hcHBlbmQobi5yZW5kZXIoKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyKCkge1xuICAgICAgICAgICgwLCBpLnVucmVhY2hhYmxlKShcIkFic3RyYWN0IG1ldGhvZCBgQW5ub3RhdGlvbkVsZW1lbnQucmVuZGVyYCBjYWxsZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgX2dldEVsZW1lbnRzQnlOYW1lKHQpIHtcbiAgICAgICAgICBsZXQgZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIHZvaWQgMCAhPT0gYXJndW1lbnRzWzFdID8gYXJndW1lbnRzWzFdIDogbnVsbDtcbiAgICAgICAgICBjb25zdCBuID0gW107XG4gICAgICAgICAgaWYgKHRoaXMuX2ZpZWxkT2JqZWN0cykge1xuICAgICAgICAgICAgY29uc3QgciA9IHRoaXMuX2ZpZWxkT2JqZWN0c1t0XTtcbiAgICAgICAgICAgIGlmIChyKSBmb3IgKGNvbnN0IHtcbiAgICAgICAgICAgICAgcGFnZTogdCxcbiAgICAgICAgICAgICAgaWQ6IHMsXG4gICAgICAgICAgICAgIGV4cG9ydFZhbHVlczogYVxuICAgICAgICAgICAgfSBvZiByKSB7XG4gICAgICAgICAgICAgIGlmICgtMSA9PT0gdCkgY29udGludWU7XG4gICAgICAgICAgICAgIGlmIChzID09PSBlKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgY29uc3QgciA9IFwic3RyaW5nXCIgPT0gdHlwZW9mIGEgPyBhIDogbnVsbCxcbiAgICAgICAgICAgICAgICBvID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIltkYXRhLWVsZW1lbnQtaWQ9XFxcIlwiLmNvbmNhdChzLCBcIlxcXCJdXCIpKTtcbiAgICAgICAgICAgICAgIW8gfHwgaC5oYXMobykgPyBuLnB1c2goe1xuICAgICAgICAgICAgICAgIGlkOiBzLFxuICAgICAgICAgICAgICAgIGV4cG9ydFZhbHVlOiByLFxuICAgICAgICAgICAgICAgIGRvbUVsZW1lbnQ6IG9cbiAgICAgICAgICAgICAgfSkgOiAoMCwgaS53YXJuKShcIl9nZXRFbGVtZW50c0J5TmFtZSAtIGVsZW1lbnQgbm90IGFsbG93ZWQ6IFwiLmNvbmNhdChzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChjb25zdCBpIG9mIGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKHQpKSB7XG4gICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgZXhwb3J0VmFsdWU6IHRcbiAgICAgICAgICAgICAgfSA9IGksXG4gICAgICAgICAgICAgIHIgPSBpLmdldEF0dHJpYnV0ZShcImRhdGEtZWxlbWVudC1pZFwiKTtcbiAgICAgICAgICAgIHIgIT09IGUgJiYgaC5oYXMoaSkgJiYgbi5wdXNoKHtcbiAgICAgICAgICAgICAgaWQ6IHIsXG4gICAgICAgICAgICAgIGV4cG9ydFZhbHVlOiB0LFxuICAgICAgICAgICAgICBkb21FbGVtZW50OiBpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG47XG4gICAgICAgIH1cbiAgICAgICAgc2hvdygpIHtcbiAgICAgICAgICB2YXIgX3RoaXMkcG9wdXA7XG4gICAgICAgICAgdGhpcy5jb250YWluZXIgJiYgKHRoaXMuY29udGFpbmVyLmhpZGRlbiA9ICExKTtcbiAgICAgICAgICAoX3RoaXMkcG9wdXAgPSB0aGlzLnBvcHVwKSA9PT0gbnVsbCB8fCBfdGhpcyRwb3B1cCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkcG9wdXAubWF5YmVTaG93KCk7XG4gICAgICAgIH1cbiAgICAgICAgaGlkZSgpIHtcbiAgICAgICAgICB2YXIgX3RoaXMkcG9wdXAyO1xuICAgICAgICAgIHRoaXMuY29udGFpbmVyICYmICh0aGlzLmNvbnRhaW5lci5oaWRkZW4gPSAhMCk7XG4gICAgICAgICAgKF90aGlzJHBvcHVwMiA9IHRoaXMucG9wdXApID09PSBudWxsIHx8IF90aGlzJHBvcHVwMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkcG9wdXAyLmZvcmNlSGlkZSgpO1xuICAgICAgICB9XG4gICAgICAgIGdldEVsZW1lbnRzVG9UcmlnZ2VyUG9wdXAoKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICAgICAgICB9XG4gICAgICAgIGFkZEhpZ2hsaWdodEFyZWEoKSB7XG4gICAgICAgICAgY29uc3QgdCA9IHRoaXMuZ2V0RWxlbWVudHNUb1RyaWdnZXJQb3B1cCgpO1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHQpKSBmb3IgKGNvbnN0IGUgb2YgdCkgZS5jbGFzc0xpc3QuYWRkKFwiaGlnaGxpZ2h0QXJlYVwiKTtlbHNlIHQuY2xhc3NMaXN0LmFkZChcImhpZ2hsaWdodEFyZWFcIik7XG4gICAgICAgIH1cbiAgICAgICAgX2VkaXRPbkRvdWJsZUNsaWNrKCkge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGFubm90YXRpb25FZGl0b3JUeXBlOiB0LFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICBpZDogZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gPSB0aGlzO1xuICAgICAgICAgIHRoaXMuY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJkYmxjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgICAgICB2YXIgX3RoaXMkbGlua1NlcnZpY2UkZXZlO1xuICAgICAgICAgICAgKF90aGlzJGxpbmtTZXJ2aWNlJGV2ZSA9IHRoaXMubGlua1NlcnZpY2UuZXZlbnRCdXMpID09PSBudWxsIHx8IF90aGlzJGxpbmtTZXJ2aWNlJGV2ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkbGlua1NlcnZpY2UkZXZlLmRpc3BhdGNoKFwic3dpdGNoYW5ub3RhdGlvbmVkaXRvcm1vZGVcIiwge1xuICAgICAgICAgICAgICBzb3VyY2U6IHRoaXMsXG4gICAgICAgICAgICAgIG1vZGU6IHQsXG4gICAgICAgICAgICAgIGVkaXRJZDogZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBfTGUgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbiAgICAgIHZhciBfT2UgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbiAgICAgIGNsYXNzIExpbmtBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50IHtcbiAgICAgICAgY29uc3RydWN0b3IoX3QxNSkge1xuICAgICAgICAgIGxldCBfZTEzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMV0gPyBhcmd1bWVudHNbMV0gOiBudWxsO1xuICAgICAgICAgIHN1cGVyKF90MTUsIHtcbiAgICAgICAgICAgIGlzUmVuZGVyYWJsZTogITAsXG4gICAgICAgICAgICBpZ25vcmVCb3JkZXI6ICEhKF9lMTMgIT09IG51bGwgJiYgX2UxMyAhPT0gdm9pZCAwICYmIF9lMTMuaWdub3JlQm9yZGVyKSxcbiAgICAgICAgICAgIGNyZWF0ZVF1YWRyaWxhdGVyYWxzOiAhMFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLCBfT2UpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLCBfTGUpO1xuICAgICAgICAgIHRoaXMuaXNUb29sdGlwT25seSA9IF90MTUuZGF0YS5pc1Rvb2x0aXBPbmx5O1xuICAgICAgICB9XG4gICAgICAgIHJlbmRlcigpIHtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgIGRhdGE6IHQsXG4gICAgICAgICAgICAgIGxpbmtTZXJ2aWNlOiBlXG4gICAgICAgICAgICB9ID0gdGhpcyxcbiAgICAgICAgICAgIG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcbiAgICAgICAgICBuLnNldEF0dHJpYnV0ZShcImRhdGEtZWxlbWVudC1pZFwiLCB0LmlkKTtcbiAgICAgICAgICBsZXQgaSA9ICExO1xuICAgICAgICAgIGlmICh0LnVybCkge1xuICAgICAgICAgICAgZS5hZGRMaW5rQXR0cmlidXRlcyhuLCB0LnVybCwgdC5uZXdXaW5kb3cpO1xuICAgICAgICAgICAgaSA9ICEwO1xuICAgICAgICAgIH0gZWxzZSBpZiAodC5hY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX2JpbmROYW1lZEFjdGlvbihuLCB0LmFjdGlvbik7XG4gICAgICAgICAgICBpID0gITA7XG4gICAgICAgICAgfSBlbHNlIGlmICh0LmF0dGFjaG1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2JpbmRBdHRhY2htZW50KG4sIHQuYXR0YWNobWVudCk7XG4gICAgICAgICAgICBpID0gITA7XG4gICAgICAgICAgfSBlbHNlIGlmICh0LnNldE9DR1N0YXRlKSB7XG4gICAgICAgICAgICBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9PZSwgX09lMikuY2FsbCh0aGlzLCBuLCB0LnNldE9DR1N0YXRlKTtcbiAgICAgICAgICAgIGkgPSAhMDtcbiAgICAgICAgICB9IGVsc2UgaWYgKHQuZGVzdCkge1xuICAgICAgICAgICAgdGhpcy5fYmluZExpbmsobiwgdC5kZXN0KTtcbiAgICAgICAgICAgIGkgPSAhMDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHQuYWN0aW9ucyAmJiAodC5hY3Rpb25zLkFjdGlvbiB8fCB0LmFjdGlvbnNbXCJNb3VzZSBVcFwiXSB8fCB0LmFjdGlvbnNbXCJNb3VzZSBEb3duXCJdKSAmJiB0aGlzLmVuYWJsZVNjcmlwdGluZyAmJiB0aGlzLmhhc0pTQWN0aW9ucykge1xuICAgICAgICAgICAgICB0aGlzLl9iaW5kSlNBY3Rpb24obiwgdCk7XG4gICAgICAgICAgICAgIGkgPSAhMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0LnJlc2V0Rm9ybSkge1xuICAgICAgICAgICAgICB0aGlzLl9iaW5kUmVzZXRGb3JtQWN0aW9uKG4sIHQucmVzZXRGb3JtKTtcbiAgICAgICAgICAgICAgaSA9ICEwO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzVG9vbHRpcE9ubHkgJiYgIWkpIHtcbiAgICAgICAgICAgICAgdGhpcy5fYmluZExpbmsobiwgXCJcIik7XG4gICAgICAgICAgICAgIGkgPSAhMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5jb250YWluZXIuY2xhc3NMaXN0LmFkZChcImxpbmtBbm5vdGF0aW9uXCIpO1xuICAgICAgICAgIGkgJiYgdGhpcy5jb250YWluZXIuYXBwZW5kKG4pO1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgICAgICBfYmluZExpbmsodCwgZSkge1xuICAgICAgICAgIHQuaHJlZiA9IHRoaXMubGlua1NlcnZpY2UuZ2V0RGVzdGluYXRpb25IYXNoKGUpO1xuICAgICAgICAgIHQub25jbGljayA9ICgpID0+IHtcbiAgICAgICAgICAgIGUgJiYgdGhpcy5saW5rU2VydmljZS5nb1RvRGVzdGluYXRpb24oZSk7XG4gICAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgICAgfTtcbiAgICAgICAgICAoZSB8fCBcIlwiID09PSBlKSAmJiBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9MZSwgX0xlMikuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBfYmluZE5hbWVkQWN0aW9uKHQsIGUpIHtcbiAgICAgICAgICB0LmhyZWYgPSB0aGlzLmxpbmtTZXJ2aWNlLmdldEFuY2hvclVybChcIlwiKTtcbiAgICAgICAgICB0Lm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxpbmtTZXJ2aWNlLmV4ZWN1dGVOYW1lZEFjdGlvbihlKTtcbiAgICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX0xlLCBfTGUyKS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIF9iaW5kQXR0YWNobWVudCh0LCBlKSB7XG4gICAgICAgICAgdC5ocmVmID0gdGhpcy5saW5rU2VydmljZS5nZXRBbmNob3JVcmwoXCJcIik7XG4gICAgICAgICAgdC5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgICAgICAgdmFyIF90aGlzJGRvd25sb2FkTWFuYWdlcjtcbiAgICAgICAgICAgIChfdGhpcyRkb3dubG9hZE1hbmFnZXIgPSB0aGlzLmRvd25sb2FkTWFuYWdlcikgPT09IG51bGwgfHwgX3RoaXMkZG93bmxvYWRNYW5hZ2VyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRkb3dubG9hZE1hbmFnZXIub3Blbk9yRG93bmxvYWREYXRhKHRoaXMuY29udGFpbmVyLCBlLmNvbnRlbnQsIGUuZmlsZW5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuICExO1xuICAgICAgICAgIH07XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfTGUsIF9MZTIpLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgX2JpbmRKU0FjdGlvbih0LCBlKSB7XG4gICAgICAgICAgdC5ocmVmID0gdGhpcy5saW5rU2VydmljZS5nZXRBbmNob3JVcmwoXCJcIik7XG4gICAgICAgICAgY29uc3QgbiA9IG5ldyBNYXAoW1tcIkFjdGlvblwiLCBcIm9uY2xpY2tcIl0sIFtcIk1vdXNlIFVwXCIsIFwib25tb3VzZXVwXCJdLCBbXCJNb3VzZSBEb3duXCIsIFwib25tb3VzZWRvd25cIl1dKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IGkgb2YgT2JqZWN0LmtleXMoZS5hY3Rpb25zKSkge1xuICAgICAgICAgICAgY29uc3QgciA9IG4uZ2V0KGkpO1xuICAgICAgICAgICAgciAmJiAodFtyXSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgdmFyIF90aGlzJGxpbmtTZXJ2aWNlJGV2ZTI7XG4gICAgICAgICAgICAgIChfdGhpcyRsaW5rU2VydmljZSRldmUyID0gdGhpcy5saW5rU2VydmljZS5ldmVudEJ1cykgPT09IG51bGwgfHwgX3RoaXMkbGlua1NlcnZpY2UkZXZlMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkbGlua1NlcnZpY2UkZXZlMi5kaXNwYXRjaChcImRpc3BhdGNoZXZlbnRpbnNhbmRib3hcIiwge1xuICAgICAgICAgICAgICAgIHNvdXJjZTogdGhpcyxcbiAgICAgICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgICAgIGlkOiBlLmlkLFxuICAgICAgICAgICAgICAgICAgbmFtZTogaVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0Lm9uY2xpY2sgfHwgKHQub25jbGljayA9ICgpID0+ICExKTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9MZSwgX0xlMikuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBfYmluZFJlc2V0Rm9ybUFjdGlvbih0LCBlKSB7XG4gICAgICAgICAgY29uc3QgbiA9IHQub25jbGljaztcbiAgICAgICAgICBuIHx8ICh0LmhyZWYgPSB0aGlzLmxpbmtTZXJ2aWNlLmdldEFuY2hvclVybChcIlwiKSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfTGUsIF9MZTIpLmNhbGwodGhpcyk7XG4gICAgICAgICAgaWYgKHRoaXMuX2ZpZWxkT2JqZWN0cykgdC5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgICAgICAgdmFyIF90aGlzJGxpbmtTZXJ2aWNlJGV2ZTM7XG4gICAgICAgICAgICBuID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG4oKTtcbiAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgICBmaWVsZHM6IHQsXG4gICAgICAgICAgICAgICAgcmVmczogcixcbiAgICAgICAgICAgICAgICBpbmNsdWRlOiBzXG4gICAgICAgICAgICAgIH0gPSBlLFxuICAgICAgICAgICAgICBhID0gW107XG4gICAgICAgICAgICBpZiAoMCAhPT0gdC5sZW5ndGggfHwgMCAhPT0gci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgY29uc3QgZSA9IG5ldyBTZXQocik7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgbiBvZiB0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdCA9IHRoaXMuX2ZpZWxkT2JqZWN0c1tuXSB8fCBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHtcbiAgICAgICAgICAgICAgICAgIGlkOiBuXG4gICAgICAgICAgICAgICAgfSBvZiB0KSBlLmFkZChuKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBmb3IgKGNvbnN0IHQgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLl9maWVsZE9iamVjdHMpKSBmb3IgKGNvbnN0IG4gb2YgdCkgZS5oYXMobi5pZCkgPT09IHMgJiYgYS5wdXNoKG4pO1xuICAgICAgICAgICAgfSBlbHNlIGZvciAoY29uc3QgdCBvZiBPYmplY3QudmFsdWVzKHRoaXMuX2ZpZWxkT2JqZWN0cykpIGEucHVzaCguLi50KTtcbiAgICAgICAgICAgIGNvbnN0IG8gPSB0aGlzLmFubm90YXRpb25TdG9yYWdlLFxuICAgICAgICAgICAgICBsID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHQgb2YgYSkge1xuICAgICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgaWQ6IGVcbiAgICAgICAgICAgICAgfSA9IHQ7XG4gICAgICAgICAgICAgIGwucHVzaChlKTtcbiAgICAgICAgICAgICAgc3dpdGNoICh0LnR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwidGV4dFwiOlxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuID0gdC5kZWZhdWx0VmFsdWUgfHwgXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgby5zZXRWYWx1ZShlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG5cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgXCJjaGVja2JveFwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJyYWRpb2J1dHRvblwiOlxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuID0gdC5kZWZhdWx0VmFsdWUgPT09IHQuZXhwb3J0VmFsdWVzO1xuICAgICAgICAgICAgICAgICAgICBvLnNldFZhbHVlKGUsIHtcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogblxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBcImNvbWJvYm94XCI6XG4gICAgICAgICAgICAgICAgY2FzZSBcImxpc3Rib3hcIjpcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbiA9IHQuZGVmYXVsdFZhbHVlIHx8IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIG8uc2V0VmFsdWUoZSwge1xuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBuXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3QgbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJbZGF0YS1lbGVtZW50LWlkPVxcXCJcIi5jb25jYXQoZSwgXCJcXFwiXVwiKSk7XG4gICAgICAgICAgICAgIG4gJiYgKGguaGFzKG4pID8gbi5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcInJlc2V0Zm9ybVwiKSkgOiAoMCwgaS53YXJuKShcIl9iaW5kUmVzZXRGb3JtQWN0aW9uIC0gZWxlbWVudCBub3QgYWxsb3dlZDogXCIuY29uY2F0KGUpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVuYWJsZVNjcmlwdGluZyAmJiAoKF90aGlzJGxpbmtTZXJ2aWNlJGV2ZTMgPSB0aGlzLmxpbmtTZXJ2aWNlLmV2ZW50QnVzKSA9PT0gbnVsbCB8fCBfdGhpcyRsaW5rU2VydmljZSRldmUzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRsaW5rU2VydmljZSRldmUzLmRpc3BhdGNoKFwiZGlzcGF0Y2hldmVudGluc2FuZGJveFwiLCB7XG4gICAgICAgICAgICAgIHNvdXJjZTogdGhpcyxcbiAgICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgICAgaWQ6IFwiYXBwXCIsXG4gICAgICAgICAgICAgICAgaWRzOiBsLFxuICAgICAgICAgICAgICAgIG5hbWU6IFwiUmVzZXRGb3JtXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgcmV0dXJuICExO1xuICAgICAgICAgIH07ZWxzZSB7XG4gICAgICAgICAgICAoMCwgaS53YXJuKSgnX2JpbmRSZXNldEZvcm1BY3Rpb24gLSBcInJlc2V0Rm9ybVwiIGFjdGlvbiBub3Qgc3VwcG9ydGVkLCBlbnN1cmUgdGhhdCB0aGUgYGZpZWxkT2JqZWN0c2AgcGFyYW1ldGVyIGlzIHByb3ZpZGVkLicpO1xuICAgICAgICAgICAgbiB8fCAodC5vbmNsaWNrID0gKCkgPT4gITEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX0xlMigpIHtcbiAgICAgICAgdGhpcy5jb250YWluZXIuc2V0QXR0cmlidXRlKFwiZGF0YS1pbnRlcm5hbC1saW5rXCIsIFwiXCIpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX09lMih0LCBlKSB7XG4gICAgICAgIHQuaHJlZiA9IHRoaXMubGlua1NlcnZpY2UuZ2V0QW5jaG9yVXJsKFwiXCIpO1xuICAgICAgICB0Lm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5saW5rU2VydmljZS5leGVjdXRlU2V0T0NHU3RhdGUoZSk7XG4gICAgICAgICAgcmV0dXJuICExO1xuICAgICAgICB9O1xuICAgICAgICBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9MZSwgX0xlMikuY2FsbCh0aGlzKTtcbiAgICAgIH1cbiAgICAgIGNsYXNzIFRleHRBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50IHtcbiAgICAgICAgY29uc3RydWN0b3IodCkge1xuICAgICAgICAgIHZhciBfdCRkYXRhJHRpdGxlT2JqLCBfdCRkYXRhJGNvbnRlbnRzT2JqLCBfdCRkYXRhJHJpY2hUZXh0O1xuICAgICAgICAgIHN1cGVyKHQsIHtcbiAgICAgICAgICAgIGlzUmVuZGVyYWJsZTogISEodC5kYXRhLnBvcHVwUmVmIHx8IChfdCRkYXRhJHRpdGxlT2JqID0gdC5kYXRhLnRpdGxlT2JqKSAhPT0gbnVsbCAmJiBfdCRkYXRhJHRpdGxlT2JqICE9PSB2b2lkIDAgJiYgX3QkZGF0YSR0aXRsZU9iai5zdHIgfHwgKF90JGRhdGEkY29udGVudHNPYmogPSB0LmRhdGEuY29udGVudHNPYmopICE9PSBudWxsICYmIF90JGRhdGEkY29udGVudHNPYmogIT09IHZvaWQgMCAmJiBfdCRkYXRhJGNvbnRlbnRzT2JqLnN0ciB8fCAoX3QkZGF0YSRyaWNoVGV4dCA9IHQuZGF0YS5yaWNoVGV4dCkgIT09IG51bGwgJiYgX3QkZGF0YSRyaWNoVGV4dCAhPT0gdm9pZCAwICYmIF90JGRhdGEkcmljaFRleHQuc3RyKVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJlbmRlcigpIHtcbiAgICAgICAgICB0aGlzLmNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwidGV4dEFubm90YXRpb25cIik7XG4gICAgICAgICAgY29uc3QgdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIik7XG4gICAgICAgICAgdC5zcmMgPSB0aGlzLmltYWdlUmVzb3VyY2VzUGF0aCArIFwiYW5ub3RhdGlvbi1cIiArIHRoaXMuZGF0YS5uYW1lLnRvTG93ZXJDYXNlKCkgKyBcIi5zdmdcIjtcbiAgICAgICAgICB0LmFsdCA9IFwiW3t7dHlwZX19IEFubm90YXRpb25dXCI7XG4gICAgICAgICAgdC5kYXRhc2V0LmwxMG5JZCA9IFwidGV4dF9hbm5vdGF0aW9uX3R5cGVcIjtcbiAgICAgICAgICB0LmRhdGFzZXQubDEwbkFyZ3MgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICB0eXBlOiB0aGlzLmRhdGEubmFtZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuZGF0YS5wb3B1cFJlZiB8fCB0aGlzLl9jcmVhdGVQb3B1cCgpO1xuICAgICAgICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZCh0KTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNsYXNzIFdpZGdldEFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgQW5ub3RhdGlvbkVsZW1lbnQge1xuICAgICAgICByZW5kZXIoKSB7XG4gICAgICAgICAgdGhpcy5kYXRhLmFsdGVybmF0aXZlVGV4dCAmJiAodGhpcy5jb250YWluZXIudGl0bGUgPSB0aGlzLmRhdGEuYWx0ZXJuYXRpdmVUZXh0KTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gICAgICAgIH1cbiAgICAgICAgc2hvd0VsZW1lbnRBbmRIaWRlQ2FudmFzKHQpIHtcbiAgICAgICAgICBpZiAodGhpcy5kYXRhLmhhc093bkNhbnZhcykge1xuICAgICAgICAgICAgdmFyIF90JHByZXZpb3VzU2libGluZztcbiAgICAgICAgICAgIFwiQ0FOVkFTXCIgPT09ICgoX3QkcHJldmlvdXNTaWJsaW5nID0gdC5wcmV2aW91c1NpYmxpbmcpID09PSBudWxsIHx8IF90JHByZXZpb3VzU2libGluZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3QkcHJldmlvdXNTaWJsaW5nLm5vZGVOYW1lKSAmJiAodC5wcmV2aW91c1NpYmxpbmcuaGlkZGVuID0gITApO1xuICAgICAgICAgICAgdC5oaWRkZW4gPSAhMTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX2dldEtleU1vZGlmaWVyKHQpIHtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBpc1dpbjogZSxcbiAgICAgICAgICAgIGlzTWFjOiBuXG4gICAgICAgICAgfSA9IGkuRmVhdHVyZVRlc3QucGxhdGZvcm07XG4gICAgICAgICAgcmV0dXJuIGUgJiYgdC5jdHJsS2V5IHx8IG4gJiYgdC5tZXRhS2V5O1xuICAgICAgICB9XG4gICAgICAgIF9zZXRFdmVudExpc3RlbmVyKHQsIGUsIG4sIGkpIHtcbiAgICAgICAgICBlLmluY2x1ZGVzKFwibW91c2VcIikgPyB0LmFkZEV2ZW50TGlzdGVuZXIoZSwgdCA9PiB7XG4gICAgICAgICAgICB2YXIgX3RoaXMkbGlua1NlcnZpY2UkZXZlNDtcbiAgICAgICAgICAgIChfdGhpcyRsaW5rU2VydmljZSRldmU0ID0gdGhpcy5saW5rU2VydmljZS5ldmVudEJ1cykgPT09IG51bGwgfHwgX3RoaXMkbGlua1NlcnZpY2UkZXZlNCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkbGlua1NlcnZpY2UkZXZlNC5kaXNwYXRjaChcImRpc3BhdGNoZXZlbnRpbnNhbmRib3hcIiwge1xuICAgICAgICAgICAgICBzb3VyY2U6IHRoaXMsXG4gICAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLmRhdGEuaWQsXG4gICAgICAgICAgICAgICAgbmFtZTogbixcbiAgICAgICAgICAgICAgICB2YWx1ZTogaSh0KSxcbiAgICAgICAgICAgICAgICBzaGlmdDogdC5zaGlmdEtleSxcbiAgICAgICAgICAgICAgICBtb2RpZmllcjogdGhpcy5fZ2V0S2V5TW9kaWZpZXIodClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSkgOiB0LmFkZEV2ZW50TGlzdGVuZXIoZSwgdCA9PiB7XG4gICAgICAgICAgICB2YXIgX3RoaXMkbGlua1NlcnZpY2UkZXZlNTtcbiAgICAgICAgICAgIChfdGhpcyRsaW5rU2VydmljZSRldmU1ID0gdGhpcy5saW5rU2VydmljZS5ldmVudEJ1cykgPT09IG51bGwgfHwgX3RoaXMkbGlua1NlcnZpY2UkZXZlNSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkbGlua1NlcnZpY2UkZXZlNS5kaXNwYXRjaChcImRpc3BhdGNoZXZlbnRpbnNhbmRib3hcIiwge1xuICAgICAgICAgICAgICBzb3VyY2U6IHRoaXMsXG4gICAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLmRhdGEuaWQsXG4gICAgICAgICAgICAgICAgbmFtZTogbixcbiAgICAgICAgICAgICAgICB2YWx1ZTogaSh0KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBfc2V0RXZlbnRMaXN0ZW5lcnModCwgZSwgbikge1xuICAgICAgICAgIGZvciAoY29uc3QgW2ksIHJdIG9mIGUpIHtcbiAgICAgICAgICAgIHZhciBfdGhpcyRkYXRhJGFjdGlvbnM7XG4gICAgICAgICAgICAoXCJBY3Rpb25cIiA9PT0gciB8fCAoKF90aGlzJGRhdGEkYWN0aW9ucyA9IHRoaXMuZGF0YS5hY3Rpb25zKSA9PT0gbnVsbCB8fCBfdGhpcyRkYXRhJGFjdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJGRhdGEkYWN0aW9uc1tyXSkpICYmIHRoaXMuX3NldEV2ZW50TGlzdGVuZXIodCwgaSwgciwgbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIF9zZXRCYWNrZ3JvdW5kQ29sb3IodCkge1xuICAgICAgICAgIGNvbnN0IGUgPSB0aGlzLmRhdGEuYmFja2dyb3VuZENvbG9yIHx8IG51bGw7XG4gICAgICAgICAgdC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBudWxsID09PSBlID8gXCJ0cmFuc3BhcmVudFwiIDogaS5VdGlsLm1ha2VIZXhDb2xvcihlWzBdLCBlWzFdLCBlWzJdKTtcbiAgICAgICAgfVxuICAgICAgICBfc2V0VGV4dFN0eWxlKHQpIHtcbiAgICAgICAgICBjb25zdCBlID0gW1wibGVmdFwiLCBcImNlbnRlclwiLCBcInJpZ2h0XCJdLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBmb250Q29sb3I6IG5cbiAgICAgICAgICAgIH0gPSB0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhLFxuICAgICAgICAgICAgciA9IHRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEuZm9udFNpemUgfHwgOSxcbiAgICAgICAgICAgIHMgPSB0LnN0eWxlO1xuICAgICAgICAgIGxldCBhO1xuICAgICAgICAgIGNvbnN0IHJvdW5kVG9PbmVEZWNpbWFsID0gdCA9PiBNYXRoLnJvdW5kKDEwICogdCkgLyAxMDtcbiAgICAgICAgICBpZiAodGhpcy5kYXRhLm11bHRpTGluZSkge1xuICAgICAgICAgICAgY29uc3QgdCA9IE1hdGguYWJzKHRoaXMuZGF0YS5yZWN0WzNdIC0gdGhpcy5kYXRhLnJlY3RbMV0gLSAyKSxcbiAgICAgICAgICAgICAgZSA9IHQgLyAoTWF0aC5yb3VuZCh0IC8gKGkuTElORV9GQUNUT1IgKiByKSkgfHwgMSk7XG4gICAgICAgICAgICBhID0gTWF0aC5taW4ociwgcm91bmRUb09uZURlY2ltYWwoZSAvIGkuTElORV9GQUNUT1IpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdCA9IE1hdGguYWJzKHRoaXMuZGF0YS5yZWN0WzNdIC0gdGhpcy5kYXRhLnJlY3RbMV0gLSAyKTtcbiAgICAgICAgICAgIGEgPSBNYXRoLm1pbihyLCByb3VuZFRvT25lRGVjaW1hbCh0IC8gaS5MSU5FX0ZBQ1RPUikpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzLmZvbnRTaXplID0gXCJjYWxjKFwiLmNvbmNhdChhLCBcInB4ICogdmFyKC0tc2NhbGUtZmFjdG9yKSlcIik7XG4gICAgICAgICAgcy5jb2xvciA9IGkuVXRpbC5tYWtlSGV4Q29sb3IoblswXSwgblsxXSwgblsyXSk7XG4gICAgICAgICAgbnVsbCAhPT0gdGhpcy5kYXRhLnRleHRBbGlnbm1lbnQgJiYgKHMudGV4dEFsaWduID0gZVt0aGlzLmRhdGEudGV4dEFsaWdubWVudF0pO1xuICAgICAgICB9XG4gICAgICAgIF9zZXRSZXF1aXJlZCh0LCBlKSB7XG4gICAgICAgICAgZSA/IHQuc2V0QXR0cmlidXRlKFwicmVxdWlyZWRcIiwgITApIDogdC5yZW1vdmVBdHRyaWJ1dGUoXCJyZXF1aXJlZFwiKTtcbiAgICAgICAgICB0LnNldEF0dHJpYnV0ZShcImFyaWEtcmVxdWlyZWRcIiwgZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNsYXNzIFRleHRXaWRnZXRBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIFdpZGdldEFubm90YXRpb25FbGVtZW50IHtcbiAgICAgICAgY29uc3RydWN0b3IodCkge1xuICAgICAgICAgIHN1cGVyKHQsIHtcbiAgICAgICAgICAgIGlzUmVuZGVyYWJsZTogdC5yZW5kZXJGb3JtcyB8fCAhdC5kYXRhLmhhc0FwcGVhcmFuY2UgJiYgISF0LmRhdGEuZmllbGRWYWx1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHNldFByb3BlcnR5T25TaWJsaW5ncyh0LCBlLCBuLCBpKSB7XG4gICAgICAgICAgY29uc3QgciA9IHRoaXMuYW5ub3RhdGlvblN0b3JhZ2U7XG4gICAgICAgICAgZm9yIChjb25zdCBzIG9mIHRoaXMuX2dldEVsZW1lbnRzQnlOYW1lKHQubmFtZSwgdC5pZCkpIHtcbiAgICAgICAgICAgIHMuZG9tRWxlbWVudCAmJiAocy5kb21FbGVtZW50W2VdID0gbik7XG4gICAgICAgICAgICByLnNldFZhbHVlKHMuaWQsIHtcbiAgICAgICAgICAgICAgW2ldOiBuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyKCkge1xuICAgICAgICAgIGNvbnN0IHQgPSB0aGlzLmFubm90YXRpb25TdG9yYWdlLFxuICAgICAgICAgICAgZSA9IHRoaXMuZGF0YS5pZDtcbiAgICAgICAgICB0aGlzLmNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwidGV4dFdpZGdldEFubm90YXRpb25cIik7XG4gICAgICAgICAgbGV0IG4gPSBudWxsO1xuICAgICAgICAgIGlmICh0aGlzLnJlbmRlckZvcm1zKSB7XG4gICAgICAgICAgICB2YXIgX3RoaXMkZGF0YSR0ZXh0Q29udGVuO1xuICAgICAgICAgICAgY29uc3QgaSA9IHQuZ2V0VmFsdWUoZSwge1xuICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhLmZpZWxkVmFsdWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbGV0IHIgPSBpLnZhbHVlIHx8IFwiXCI7XG4gICAgICAgICAgICBjb25zdCBzID0gdC5nZXRWYWx1ZShlLCB7XG4gICAgICAgICAgICAgIGNoYXJMaW1pdDogdGhpcy5kYXRhLm1heExlblxuICAgICAgICAgICAgfSkuY2hhckxpbWl0O1xuICAgICAgICAgICAgcyAmJiByLmxlbmd0aCA+IHMgJiYgKHIgPSByLnNsaWNlKDAsIHMpKTtcbiAgICAgICAgICAgIGxldCBhID0gaS5mb3JtYXR0ZWRWYWx1ZSB8fCAoKF90aGlzJGRhdGEkdGV4dENvbnRlbiA9IHRoaXMuZGF0YS50ZXh0Q29udGVudCkgPT09IG51bGwgfHwgX3RoaXMkZGF0YSR0ZXh0Q29udGVuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRkYXRhJHRleHRDb250ZW4uam9pbihcIlxcblwiKSkgfHwgbnVsbDtcbiAgICAgICAgICAgIGEgJiYgdGhpcy5kYXRhLmNvbWIgJiYgKGEgPSBhLnJlcGxhY2VBbGwoL1xccysvZywgXCJcIikpO1xuICAgICAgICAgICAgY29uc3QgbyA9IHtcbiAgICAgICAgICAgICAgdXNlclZhbHVlOiByLFxuICAgICAgICAgICAgICBmb3JtYXR0ZWRWYWx1ZTogYSxcbiAgICAgICAgICAgICAgbGFzdENvbW1pdHRlZFZhbHVlOiBudWxsLFxuICAgICAgICAgICAgICBjb21taXRLZXk6IDFcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhLm11bHRpTGluZSkge1xuICAgICAgICAgICAgICB2YXIgX2E0O1xuICAgICAgICAgICAgICBuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRleHRhcmVhXCIpO1xuICAgICAgICAgICAgICBuLnRleHRDb250ZW50ID0gKF9hNCA9IGEpICE9PSBudWxsICYmIF9hNCAhPT0gdm9pZCAwID8gX2E0IDogcjtcbiAgICAgICAgICAgICAgdGhpcy5kYXRhLmRvTm90U2Nyb2xsICYmIChuLnN0eWxlLm92ZXJmbG93WSA9IFwiaGlkZGVuXCIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFyIF9hNTtcbiAgICAgICAgICAgICAgbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICAgICAgICAgICAgbi50eXBlID0gXCJ0ZXh0XCI7XG4gICAgICAgICAgICAgIG4uc2V0QXR0cmlidXRlKFwidmFsdWVcIiwgKF9hNSA9IGEpICE9PSBudWxsICYmIF9hNSAhPT0gdm9pZCAwID8gX2E1IDogcik7XG4gICAgICAgICAgICAgIHRoaXMuZGF0YS5kb05vdFNjcm9sbCAmJiAobi5zdHlsZS5vdmVyZmxvd1ggPSBcImhpZGRlblwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGF0YS5oYXNPd25DYW52YXMgJiYgKG4uaGlkZGVuID0gITApO1xuICAgICAgICAgICAgaC5hZGQobik7XG4gICAgICAgICAgICBuLnNldEF0dHJpYnV0ZShcImRhdGEtZWxlbWVudC1pZFwiLCBlKTtcbiAgICAgICAgICAgIG4uZGlzYWJsZWQgPSB0aGlzLmRhdGEucmVhZE9ubHk7XG4gICAgICAgICAgICBuLm5hbWUgPSB0aGlzLmRhdGEuYmFzZUZpZWxkTmFtZSB8fCB0aGlzLmRhdGEuZmllbGROYW1lO1xuICAgICAgICAgICAgbi50YWJJbmRleCA9IGM7XG4gICAgICAgICAgICB0aGlzLl9zZXRSZXF1aXJlZChuLCB0aGlzLmRhdGEucmVxdWlyZWQpO1xuICAgICAgICAgICAgcyAmJiAobi5tYXhMZW5ndGggPSBzKTtcbiAgICAgICAgICAgIG4uYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsIGkgPT4ge1xuICAgICAgICAgICAgICB0LnNldFZhbHVlKGUsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogaS50YXJnZXQudmFsdWVcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlPblNpYmxpbmdzKG4sIFwidmFsdWVcIiwgaS50YXJnZXQudmFsdWUsIFwidmFsdWVcIik7XG4gICAgICAgICAgICAgIG8uZm9ybWF0dGVkVmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBuLmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNldGZvcm1cIiwgdCA9PiB7XG4gICAgICAgICAgICAgIHZhciBfdGhpcyRkYXRhJGRlZmF1bHRGaWU7XG4gICAgICAgICAgICAgIGNvbnN0IGUgPSAoX3RoaXMkZGF0YSRkZWZhdWx0RmllID0gdGhpcy5kYXRhLmRlZmF1bHRGaWVsZFZhbHVlKSAhPT0gbnVsbCAmJiBfdGhpcyRkYXRhJGRlZmF1bHRGaWUgIT09IHZvaWQgMCA/IF90aGlzJGRhdGEkZGVmYXVsdEZpZSA6IFwiXCI7XG4gICAgICAgICAgICAgIG4udmFsdWUgPSBvLnVzZXJWYWx1ZSA9IGU7XG4gICAgICAgICAgICAgIG8uZm9ybWF0dGVkVmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsZXQgYmx1ckxpc3RlbmVyID0gdCA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZWRWYWx1ZTogZVxuICAgICAgICAgICAgICB9ID0gbztcbiAgICAgICAgICAgICAgbnVsbCAhPSBlICYmICh0LnRhcmdldC52YWx1ZSA9IGUpO1xuICAgICAgICAgICAgICB0LnRhcmdldC5zY3JvbGxMZWZ0ID0gMDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAodGhpcy5lbmFibGVTY3JpcHRpbmcgJiYgdGhpcy5oYXNKU0FjdGlvbnMpIHtcbiAgICAgICAgICAgICAgdmFyIF90aGlzJGRhdGEkYWN0aW9uczI7XG4gICAgICAgICAgICAgIG4uYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsIHQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgICAgIHRhcmdldDogZVxuICAgICAgICAgICAgICAgIH0gPSB0O1xuICAgICAgICAgICAgICAgIG8udXNlclZhbHVlICYmIChlLnZhbHVlID0gby51c2VyVmFsdWUpO1xuICAgICAgICAgICAgICAgIG8ubGFzdENvbW1pdHRlZFZhbHVlID0gZS52YWx1ZTtcbiAgICAgICAgICAgICAgICBvLmNvbW1pdEtleSA9IDE7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBuLmFkZEV2ZW50TGlzdGVuZXIoXCJ1cGRhdGVmcm9tc2FuZGJveFwiLCBuID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dFbGVtZW50QW5kSGlkZUNhbnZhcyhuLnRhcmdldCk7XG4gICAgICAgICAgICAgICAgY29uc3QgaSA9IHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlKG4pIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9uJGRldGFpbCR2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgby51c2VyVmFsdWUgPSAoX24kZGV0YWlsJHZhbHVlID0gbi5kZXRhaWwudmFsdWUpICE9PSBudWxsICYmIF9uJGRldGFpbCR2YWx1ZSAhPT0gdm9pZCAwID8gX24kZGV0YWlsJHZhbHVlIDogXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgdC5zZXRWYWx1ZShlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG8udXNlclZhbHVlLnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIG4udGFyZ2V0LnZhbHVlID0gby51c2VyVmFsdWU7XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkVmFsdWUobikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkVmFsdWU6IGlcbiAgICAgICAgICAgICAgICAgICAgfSA9IG4uZGV0YWlsO1xuICAgICAgICAgICAgICAgICAgICBvLmZvcm1hdHRlZFZhbHVlID0gaTtcbiAgICAgICAgICAgICAgICAgICAgbnVsbCAhPSBpICYmIG4udGFyZ2V0ICE9PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmIChuLnRhcmdldC52YWx1ZSA9IGkpO1xuICAgICAgICAgICAgICAgICAgICB0LnNldFZhbHVlKGUsIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZWRWYWx1ZTogaVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBzZWxSYW5nZSh0KSB7XG4gICAgICAgICAgICAgICAgICAgIHQudGFyZ2V0LnNldFNlbGVjdGlvblJhbmdlKC4uLnQuZGV0YWlsLnNlbFJhbmdlKTtcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICBjaGFyTGltaXQ6IG4gPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFyTGltaXQ6IGlcbiAgICAgICAgICAgICAgICAgICAgICB9ID0gbi5kZXRhaWwsXG4gICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0OiByXG4gICAgICAgICAgICAgICAgICAgICAgfSA9IG47XG4gICAgICAgICAgICAgICAgICAgIGlmICgwID09PSBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgci5yZW1vdmVBdHRyaWJ1dGUoXCJtYXhMZW5ndGhcIik7XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHIuc2V0QXR0cmlidXRlKFwibWF4TGVuZ3RoXCIsIGkpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgcyA9IG8udXNlclZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAocyAmJiAhKHMubGVuZ3RoIDw9IGkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzJGxpbmtTZXJ2aWNlJGV2ZTY7XG4gICAgICAgICAgICAgICAgICAgICAgcyA9IHMuc2xpY2UoMCwgaSk7XG4gICAgICAgICAgICAgICAgICAgICAgci52YWx1ZSA9IG8udXNlclZhbHVlID0gcztcbiAgICAgICAgICAgICAgICAgICAgICB0LnNldFZhbHVlKGUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzXG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgKF90aGlzJGxpbmtTZXJ2aWNlJGV2ZTYgPSB0aGlzLmxpbmtTZXJ2aWNlLmV2ZW50QnVzKSA9PT0gbnVsbCB8fCBfdGhpcyRsaW5rU2VydmljZSRldmU2ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRsaW5rU2VydmljZSRldmU2LmRpc3BhdGNoKFwiZGlzcGF0Y2hldmVudGluc2FuZGJveFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IHRoaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiS2V5c3Ryb2tlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsQ29tbWl0OiAhMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0S2V5OiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxTdGFydDogci5zZWxlY3Rpb25TdGFydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsRW5kOiByLnNlbGVjdGlvbkVuZFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLl9kaXNwYXRjaEV2ZW50RnJvbVNhbmRib3goaSwgbik7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBuLmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHQgPT4ge1xuICAgICAgICAgICAgICAgIG8uY29tbWl0S2V5ID0gMTtcbiAgICAgICAgICAgICAgICBsZXQgbiA9IC0xO1xuICAgICAgICAgICAgICAgIFwiRXNjYXBlXCIgPT09IHQua2V5ID8gbiA9IDAgOiBcIkVudGVyXCIgIT09IHQua2V5IHx8IHRoaXMuZGF0YS5tdWx0aUxpbmUgPyBcIlRhYlwiID09PSB0LmtleSAmJiAoby5jb21taXRLZXkgPSAzKSA6IG4gPSAyO1xuICAgICAgICAgICAgICAgIGlmICgtMSA9PT0gbikgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBpXG4gICAgICAgICAgICAgICAgfSA9IHQudGFyZ2V0O1xuICAgICAgICAgICAgICAgIGlmIChvLmxhc3RDb21taXR0ZWRWYWx1ZSAhPT0gaSkge1xuICAgICAgICAgICAgICAgICAgdmFyIF90aGlzJGxpbmtTZXJ2aWNlJGV2ZTc7XG4gICAgICAgICAgICAgICAgICBvLmxhc3RDb21taXR0ZWRWYWx1ZSA9IGk7XG4gICAgICAgICAgICAgICAgICBvLnVzZXJWYWx1ZSA9IGk7XG4gICAgICAgICAgICAgICAgICAoX3RoaXMkbGlua1NlcnZpY2UkZXZlNyA9IHRoaXMubGlua1NlcnZpY2UuZXZlbnRCdXMpID09PSBudWxsIHx8IF90aGlzJGxpbmtTZXJ2aWNlJGV2ZTcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJGxpbmtTZXJ2aWNlJGV2ZTcuZGlzcGF0Y2goXCJkaXNwYXRjaGV2ZW50aW5zYW5kYm94XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlOiB0aGlzLFxuICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgICAgICAgICBpZDogZSxcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIktleXN0cm9rZVwiLFxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpLFxuICAgICAgICAgICAgICAgICAgICAgIHdpbGxDb21taXQ6ICEwLFxuICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdEtleTogbixcbiAgICAgICAgICAgICAgICAgICAgICBzZWxTdGFydDogdC50YXJnZXQuc2VsZWN0aW9uU3RhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgc2VsRW5kOiB0LnRhcmdldC5zZWxlY3Rpb25FbmRcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgY29uc3QgaSA9IGJsdXJMaXN0ZW5lcjtcbiAgICAgICAgICAgICAgYmx1ckxpc3RlbmVyID0gbnVsbDtcbiAgICAgICAgICAgICAgbi5hZGRFdmVudExpc3RlbmVyKFwiYmx1clwiLCB0ID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgX3RoaXMkbGlua1NlcnZpY2UkZXZlODtcbiAgICAgICAgICAgICAgICBpZiAoIXQucmVsYXRlZFRhcmdldCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBuXG4gICAgICAgICAgICAgICAgfSA9IHQudGFyZ2V0O1xuICAgICAgICAgICAgICAgIG8udXNlclZhbHVlID0gbjtcbiAgICAgICAgICAgICAgICBvLmxhc3RDb21taXR0ZWRWYWx1ZSAhPT0gbiAmJiAoKF90aGlzJGxpbmtTZXJ2aWNlJGV2ZTggPSB0aGlzLmxpbmtTZXJ2aWNlLmV2ZW50QnVzKSA9PT0gbnVsbCB8fCBfdGhpcyRsaW5rU2VydmljZSRldmU4ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRsaW5rU2VydmljZSRldmU4LmRpc3BhdGNoKFwiZGlzcGF0Y2hldmVudGluc2FuZGJveFwiLCB7XG4gICAgICAgICAgICAgICAgICBzb3VyY2U6IHRoaXMsXG4gICAgICAgICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGUsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiS2V5c3Ryb2tlXCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBuLFxuICAgICAgICAgICAgICAgICAgICB3aWxsQ29tbWl0OiAhMCxcbiAgICAgICAgICAgICAgICAgICAgY29tbWl0S2V5OiBvLmNvbW1pdEtleSxcbiAgICAgICAgICAgICAgICAgICAgc2VsU3RhcnQ6IHQudGFyZ2V0LnNlbGVjdGlvblN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICBzZWxFbmQ6IHQudGFyZ2V0LnNlbGVjdGlvbkVuZFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICBpKHQpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgKChfdGhpcyRkYXRhJGFjdGlvbnMyID0gdGhpcy5kYXRhLmFjdGlvbnMpID09PSBudWxsIHx8IF90aGlzJGRhdGEkYWN0aW9uczIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJGRhdGEkYWN0aW9uczIuS2V5c3Ryb2tlKSAmJiBuLmFkZEV2ZW50TGlzdGVuZXIoXCJiZWZvcmVpbnB1dFwiLCB0ID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgX3RoaXMkbGlua1NlcnZpY2UkZXZlOTtcbiAgICAgICAgICAgICAgICBvLmxhc3RDb21taXR0ZWRWYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBuLFxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IGlcbiAgICAgICAgICAgICAgICAgIH0gPSB0LFxuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcixcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uU3RhcnQ6IHMsXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbkVuZDogYVxuICAgICAgICAgICAgICAgICAgfSA9IGk7XG4gICAgICAgICAgICAgICAgbGV0IGwgPSBzLFxuICAgICAgICAgICAgICAgICAgYyA9IGE7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0LmlucHV0VHlwZSkge1xuICAgICAgICAgICAgICAgICAgY2FzZSBcImRlbGV0ZVdvcmRCYWNrd2FyZFwiOlxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgdCA9IHIuc3Vic3RyaW5nKDAsIHMpLm1hdGNoKC9cXHcqW15cXHddKiQvKTtcbiAgICAgICAgICAgICAgICAgICAgICB0ICYmIChsIC09IHRbMF0ubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgY2FzZSBcImRlbGV0ZVdvcmRGb3J3YXJkXCI6XG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ID0gci5zdWJzdHJpbmcocykubWF0Y2goL15bXlxcd10qXFx3Ki8pO1xuICAgICAgICAgICAgICAgICAgICAgIHQgJiYgKGMgKz0gdFswXS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBjYXNlIFwiZGVsZXRlQ29udGVudEJhY2t3YXJkXCI6XG4gICAgICAgICAgICAgICAgICAgIHMgPT09IGEgJiYgKGwgLT0gMSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgY2FzZSBcImRlbGV0ZUNvbnRlbnRGb3J3YXJkXCI6XG4gICAgICAgICAgICAgICAgICAgIHMgPT09IGEgJiYgKGMgKz0gMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAoX3RoaXMkbGlua1NlcnZpY2UkZXZlOSA9IHRoaXMubGlua1NlcnZpY2UuZXZlbnRCdXMpID09PSBudWxsIHx8IF90aGlzJGxpbmtTZXJ2aWNlJGV2ZTkgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJGxpbmtTZXJ2aWNlJGV2ZTkuZGlzcGF0Y2goXCJkaXNwYXRjaGV2ZW50aW5zYW5kYm94XCIsIHtcbiAgICAgICAgICAgICAgICAgIHNvdXJjZTogdGhpcyxcbiAgICAgICAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgICAgICBpZDogZSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJLZXlzdHJva2VcIixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHIsXG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZTogbiB8fCBcIlwiLFxuICAgICAgICAgICAgICAgICAgICB3aWxsQ29tbWl0OiAhMSxcbiAgICAgICAgICAgICAgICAgICAgc2VsU3RhcnQ6IGwsXG4gICAgICAgICAgICAgICAgICAgIHNlbEVuZDogY1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgdGhpcy5fc2V0RXZlbnRMaXN0ZW5lcnMobiwgW1tcImZvY3VzXCIsIFwiRm9jdXNcIl0sIFtcImJsdXJcIiwgXCJCbHVyXCJdLCBbXCJtb3VzZWRvd25cIiwgXCJNb3VzZSBEb3duXCJdLCBbXCJtb3VzZWVudGVyXCIsIFwiTW91c2UgRW50ZXJcIl0sIFtcIm1vdXNlbGVhdmVcIiwgXCJNb3VzZSBFeGl0XCJdLCBbXCJtb3VzZXVwXCIsIFwiTW91c2UgVXBcIl1dLCB0ID0+IHQudGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJsdXJMaXN0ZW5lciAmJiBuLmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsIGJsdXJMaXN0ZW5lcik7XG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhLmNvbWIpIHtcbiAgICAgICAgICAgICAgY29uc3QgdCA9ICh0aGlzLmRhdGEucmVjdFsyXSAtIHRoaXMuZGF0YS5yZWN0WzBdKSAvIHM7XG4gICAgICAgICAgICAgIG4uY2xhc3NMaXN0LmFkZChcImNvbWJcIik7XG4gICAgICAgICAgICAgIG4uc3R5bGUubGV0dGVyU3BhY2luZyA9IFwiY2FsYyhcIi5jb25jYXQodCwgXCJweCAqIHZhcigtLXNjYWxlLWZhY3RvcikgLSAxY2gpXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICAgICAgICAgIG4udGV4dENvbnRlbnQgPSB0aGlzLmRhdGEuZmllbGRWYWx1ZTtcbiAgICAgICAgICAgIG4uc3R5bGUudmVydGljYWxBbGlnbiA9IFwibWlkZGxlXCI7XG4gICAgICAgICAgICBuLnN0eWxlLmRpc3BsYXkgPSBcInRhYmxlLWNlbGxcIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fc2V0VGV4dFN0eWxlKG4pO1xuICAgICAgICAgIHRoaXMuX3NldEJhY2tncm91bmRDb2xvcihuKTtcbiAgICAgICAgICB0aGlzLl9zZXREZWZhdWx0UHJvcGVydGllc0Zyb21KUyhuKTtcbiAgICAgICAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmQobik7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjbGFzcyBTaWduYXR1cmVXaWRnZXRBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIFdpZGdldEFubm90YXRpb25FbGVtZW50IHtcbiAgICAgICAgY29uc3RydWN0b3IodCkge1xuICAgICAgICAgIHN1cGVyKHQsIHtcbiAgICAgICAgICAgIGlzUmVuZGVyYWJsZTogISF0LmRhdGEuaGFzT3duQ2FudmFzXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNsYXNzIENoZWNrYm94V2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQgZXh0ZW5kcyBXaWRnZXRBbm5vdGF0aW9uRWxlbWVudCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHQpIHtcbiAgICAgICAgICBzdXBlcih0LCB7XG4gICAgICAgICAgICBpc1JlbmRlcmFibGU6IHQucmVuZGVyRm9ybXNcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZW5kZXIoKSB7XG4gICAgICAgICAgY29uc3QgdCA9IHRoaXMuYW5ub3RhdGlvblN0b3JhZ2UsXG4gICAgICAgICAgICBlID0gdGhpcy5kYXRhLFxuICAgICAgICAgICAgbiA9IGUuaWQ7XG4gICAgICAgICAgbGV0IGkgPSB0LmdldFZhbHVlKG4sIHtcbiAgICAgICAgICAgIHZhbHVlOiBlLmV4cG9ydFZhbHVlID09PSBlLmZpZWxkVmFsdWVcbiAgICAgICAgICB9KS52YWx1ZTtcbiAgICAgICAgICBpZiAoXCJzdHJpbmdcIiA9PSB0eXBlb2YgaSkge1xuICAgICAgICAgICAgaSA9IFwiT2ZmXCIgIT09IGk7XG4gICAgICAgICAgICB0LnNldFZhbHVlKG4sIHtcbiAgICAgICAgICAgICAgdmFsdWU6IGlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwiYnV0dG9uV2lkZ2V0QW5ub3RhdGlvblwiLCBcImNoZWNrQm94XCIpO1xuICAgICAgICAgIGNvbnN0IHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgICAgICAgaC5hZGQocik7XG4gICAgICAgICAgci5zZXRBdHRyaWJ1dGUoXCJkYXRhLWVsZW1lbnQtaWRcIiwgbik7XG4gICAgICAgICAgci5kaXNhYmxlZCA9IGUucmVhZE9ubHk7XG4gICAgICAgICAgdGhpcy5fc2V0UmVxdWlyZWQociwgdGhpcy5kYXRhLnJlcXVpcmVkKTtcbiAgICAgICAgICByLnR5cGUgPSBcImNoZWNrYm94XCI7XG4gICAgICAgICAgci5uYW1lID0gZS5iYXNlRmllbGROYW1lIHx8IGUuZmllbGROYW1lO1xuICAgICAgICAgIGkgJiYgci5zZXRBdHRyaWJ1dGUoXCJjaGVja2VkXCIsICEwKTtcbiAgICAgICAgICByLnNldEF0dHJpYnV0ZShcImV4cG9ydFZhbHVlXCIsIGUuZXhwb3J0VmFsdWUpO1xuICAgICAgICAgIHIudGFiSW5kZXggPSBjO1xuICAgICAgICAgIHIuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCBpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgbmFtZTogcixcbiAgICAgICAgICAgICAgY2hlY2tlZDogc1xuICAgICAgICAgICAgfSA9IGkudGFyZ2V0O1xuICAgICAgICAgICAgZm9yIChjb25zdCBpIG9mIHRoaXMuX2dldEVsZW1lbnRzQnlOYW1lKHIsIG4pKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG4gPSBzICYmIGkuZXhwb3J0VmFsdWUgPT09IGUuZXhwb3J0VmFsdWU7XG4gICAgICAgICAgICAgIGkuZG9tRWxlbWVudCAmJiAoaS5kb21FbGVtZW50LmNoZWNrZWQgPSBuKTtcbiAgICAgICAgICAgICAgdC5zZXRWYWx1ZShpLmlkLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IG5cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0LnNldFZhbHVlKG4sIHtcbiAgICAgICAgICAgICAgdmFsdWU6IHNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHIuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2V0Zm9ybVwiLCB0ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG4gPSBlLmRlZmF1bHRGaWVsZFZhbHVlIHx8IFwiT2ZmXCI7XG4gICAgICAgICAgICB0LnRhcmdldC5jaGVja2VkID0gbiA9PT0gZS5leHBvcnRWYWx1ZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAodGhpcy5lbmFibGVTY3JpcHRpbmcgJiYgdGhpcy5oYXNKU0FjdGlvbnMpIHtcbiAgICAgICAgICAgIHIuYWRkRXZlbnRMaXN0ZW5lcihcInVwZGF0ZWZyb21zYW5kYm94XCIsIGUgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBpID0ge1xuICAgICAgICAgICAgICAgIHZhbHVlKGUpIHtcbiAgICAgICAgICAgICAgICAgIGUudGFyZ2V0LmNoZWNrZWQgPSBcIk9mZlwiICE9PSBlLmRldGFpbC52YWx1ZTtcbiAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUobiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZS50YXJnZXQuY2hlY2tlZFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB0aGlzLl9kaXNwYXRjaEV2ZW50RnJvbVNhbmRib3goaSwgZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX3NldEV2ZW50TGlzdGVuZXJzKHIsIFtbXCJjaGFuZ2VcIiwgXCJWYWxpZGF0ZVwiXSwgW1wiY2hhbmdlXCIsIFwiQWN0aW9uXCJdLCBbXCJmb2N1c1wiLCBcIkZvY3VzXCJdLCBbXCJibHVyXCIsIFwiQmx1clwiXSwgW1wibW91c2Vkb3duXCIsIFwiTW91c2UgRG93blwiXSwgW1wibW91c2VlbnRlclwiLCBcIk1vdXNlIEVudGVyXCJdLCBbXCJtb3VzZWxlYXZlXCIsIFwiTW91c2UgRXhpdFwiXSwgW1wibW91c2V1cFwiLCBcIk1vdXNlIFVwXCJdXSwgdCA9PiB0LnRhcmdldC5jaGVja2VkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fc2V0QmFja2dyb3VuZENvbG9yKHIpO1xuICAgICAgICAgIHRoaXMuX3NldERlZmF1bHRQcm9wZXJ0aWVzRnJvbUpTKHIpO1xuICAgICAgICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZChyKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNsYXNzIFJhZGlvQnV0dG9uV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQgZXh0ZW5kcyBXaWRnZXRBbm5vdGF0aW9uRWxlbWVudCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHQpIHtcbiAgICAgICAgICBzdXBlcih0LCB7XG4gICAgICAgICAgICBpc1JlbmRlcmFibGU6IHQucmVuZGVyRm9ybXNcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZW5kZXIoKSB7XG4gICAgICAgICAgdGhpcy5jb250YWluZXIuY2xhc3NMaXN0LmFkZChcImJ1dHRvbldpZGdldEFubm90YXRpb25cIiwgXCJyYWRpb0J1dHRvblwiKTtcbiAgICAgICAgICBjb25zdCB0ID0gdGhpcy5hbm5vdGF0aW9uU3RvcmFnZSxcbiAgICAgICAgICAgIGUgPSB0aGlzLmRhdGEsXG4gICAgICAgICAgICBuID0gZS5pZDtcbiAgICAgICAgICBsZXQgaSA9IHQuZ2V0VmFsdWUobiwge1xuICAgICAgICAgICAgdmFsdWU6IGUuZmllbGRWYWx1ZSA9PT0gZS5idXR0b25WYWx1ZVxuICAgICAgICAgIH0pLnZhbHVlO1xuICAgICAgICAgIGlmIChcInN0cmluZ1wiID09IHR5cGVvZiBpKSB7XG4gICAgICAgICAgICBpID0gaSAhPT0gZS5idXR0b25WYWx1ZTtcbiAgICAgICAgICAgIHQuc2V0VmFsdWUobiwge1xuICAgICAgICAgICAgICB2YWx1ZTogaVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIik7XG4gICAgICAgICAgaC5hZGQocik7XG4gICAgICAgICAgci5zZXRBdHRyaWJ1dGUoXCJkYXRhLWVsZW1lbnQtaWRcIiwgbik7XG4gICAgICAgICAgci5kaXNhYmxlZCA9IGUucmVhZE9ubHk7XG4gICAgICAgICAgdGhpcy5fc2V0UmVxdWlyZWQociwgdGhpcy5kYXRhLnJlcXVpcmVkKTtcbiAgICAgICAgICByLnR5cGUgPSBcInJhZGlvXCI7XG4gICAgICAgICAgci5uYW1lID0gZS5iYXNlRmllbGROYW1lIHx8IGUuZmllbGROYW1lO1xuICAgICAgICAgIGkgJiYgci5zZXRBdHRyaWJ1dGUoXCJjaGVja2VkXCIsICEwKTtcbiAgICAgICAgICByLnRhYkluZGV4ID0gYztcbiAgICAgICAgICByLmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgZSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgIG5hbWU6IGksXG4gICAgICAgICAgICAgIGNoZWNrZWQ6IHJcbiAgICAgICAgICAgIH0gPSBlLnRhcmdldDtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZSBvZiB0aGlzLl9nZXRFbGVtZW50c0J5TmFtZShpLCBuKSkgdC5zZXRWYWx1ZShlLmlkLCB7XG4gICAgICAgICAgICAgIHZhbHVlOiAhMVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0LnNldFZhbHVlKG4sIHtcbiAgICAgICAgICAgICAgdmFsdWU6IHJcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHIuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2V0Zm9ybVwiLCB0ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG4gPSBlLmRlZmF1bHRGaWVsZFZhbHVlO1xuICAgICAgICAgICAgdC50YXJnZXQuY2hlY2tlZCA9IG51bGwgIT0gbiAmJiBuID09PSBlLmJ1dHRvblZhbHVlO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmICh0aGlzLmVuYWJsZVNjcmlwdGluZyAmJiB0aGlzLmhhc0pTQWN0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgaSA9IGUuYnV0dG9uVmFsdWU7XG4gICAgICAgICAgICByLmFkZEV2ZW50TGlzdGVuZXIoXCJ1cGRhdGVmcm9tc2FuZGJveFwiLCBlID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgciA9IHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogZSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByID0gaSA9PT0gZS5kZXRhaWwudmFsdWU7XG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGkgb2YgdGhpcy5fZ2V0RWxlbWVudHNCeU5hbWUoZS50YXJnZXQubmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZSA9IHIgJiYgaS5pZCA9PT0gbjtcbiAgICAgICAgICAgICAgICAgICAgaS5kb21FbGVtZW50ICYmIChpLmRvbUVsZW1lbnQuY2hlY2tlZCA9IGUpO1xuICAgICAgICAgICAgICAgICAgICB0LnNldFZhbHVlKGkuaWQsIHtcbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHRoaXMuX2Rpc3BhdGNoRXZlbnRGcm9tU2FuZGJveChyLCBlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5fc2V0RXZlbnRMaXN0ZW5lcnMociwgW1tcImNoYW5nZVwiLCBcIlZhbGlkYXRlXCJdLCBbXCJjaGFuZ2VcIiwgXCJBY3Rpb25cIl0sIFtcImZvY3VzXCIsIFwiRm9jdXNcIl0sIFtcImJsdXJcIiwgXCJCbHVyXCJdLCBbXCJtb3VzZWRvd25cIiwgXCJNb3VzZSBEb3duXCJdLCBbXCJtb3VzZWVudGVyXCIsIFwiTW91c2UgRW50ZXJcIl0sIFtcIm1vdXNlbGVhdmVcIiwgXCJNb3VzZSBFeGl0XCJdLCBbXCJtb3VzZXVwXCIsIFwiTW91c2UgVXBcIl1dLCB0ID0+IHQudGFyZ2V0LmNoZWNrZWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9zZXRCYWNrZ3JvdW5kQ29sb3Iocik7XG4gICAgICAgICAgdGhpcy5fc2V0RGVmYXVsdFByb3BlcnRpZXNGcm9tSlMocik7XG4gICAgICAgICAgdGhpcy5jb250YWluZXIuYXBwZW5kKHIpO1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2xhc3MgUHVzaEJ1dHRvbldpZGdldEFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgTGlua0Fubm90YXRpb25FbGVtZW50IHtcbiAgICAgICAgY29uc3RydWN0b3IodCkge1xuICAgICAgICAgIHN1cGVyKHQsIHtcbiAgICAgICAgICAgIGlnbm9yZUJvcmRlcjogdC5kYXRhLmhhc0FwcGVhcmFuY2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZW5kZXIoKSB7XG4gICAgICAgICAgY29uc3QgdCA9IHN1cGVyLnJlbmRlcigpO1xuICAgICAgICAgIHQuY2xhc3NMaXN0LmFkZChcImJ1dHRvbldpZGdldEFubm90YXRpb25cIiwgXCJwdXNoQnV0dG9uXCIpO1xuICAgICAgICAgIHRoaXMuZGF0YS5hbHRlcm5hdGl2ZVRleHQgJiYgKHQudGl0bGUgPSB0aGlzLmRhdGEuYWx0ZXJuYXRpdmVUZXh0KTtcbiAgICAgICAgICBjb25zdCBlID0gdC5sYXN0Q2hpbGQ7XG4gICAgICAgICAgaWYgKHRoaXMuZW5hYmxlU2NyaXB0aW5nICYmIHRoaXMuaGFzSlNBY3Rpb25zICYmIGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldERlZmF1bHRQcm9wZXJ0aWVzRnJvbUpTKGUpO1xuICAgICAgICAgICAgZS5hZGRFdmVudExpc3RlbmVyKFwidXBkYXRlZnJvbXNhbmRib3hcIiwgdCA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2Rpc3BhdGNoRXZlbnRGcm9tU2FuZGJveCh7fSwgdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNsYXNzIENob2ljZVdpZGdldEFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQge1xuICAgICAgICBjb25zdHJ1Y3Rvcih0KSB7XG4gICAgICAgICAgc3VwZXIodCwge1xuICAgICAgICAgICAgaXNSZW5kZXJhYmxlOiB0LnJlbmRlckZvcm1zXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyKCkge1xuICAgICAgICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJjaG9pY2VXaWRnZXRBbm5vdGF0aW9uXCIpO1xuICAgICAgICAgIGNvbnN0IHQgPSB0aGlzLmFubm90YXRpb25TdG9yYWdlLFxuICAgICAgICAgICAgZSA9IHRoaXMuZGF0YS5pZCxcbiAgICAgICAgICAgIG4gPSB0LmdldFZhbHVlKGUsIHtcbiAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuZGF0YS5maWVsZFZhbHVlXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIpO1xuICAgICAgICAgIGguYWRkKGkpO1xuICAgICAgICAgIGkuc2V0QXR0cmlidXRlKFwiZGF0YS1lbGVtZW50LWlkXCIsIGUpO1xuICAgICAgICAgIGkuZGlzYWJsZWQgPSB0aGlzLmRhdGEucmVhZE9ubHk7XG4gICAgICAgICAgdGhpcy5fc2V0UmVxdWlyZWQoaSwgdGhpcy5kYXRhLnJlcXVpcmVkKTtcbiAgICAgICAgICBpLm5hbWUgPSB0aGlzLmRhdGEuYmFzZUZpZWxkTmFtZSB8fCB0aGlzLmRhdGEuZmllbGROYW1lO1xuICAgICAgICAgIGkudGFiSW5kZXggPSBjO1xuICAgICAgICAgIGxldCByID0gdGhpcy5kYXRhLmNvbWJvICYmIHRoaXMuZGF0YS5vcHRpb25zLmxlbmd0aCA+IDA7XG4gICAgICAgICAgaWYgKCF0aGlzLmRhdGEuY29tYm8pIHtcbiAgICAgICAgICAgIGkuc2l6ZSA9IHRoaXMuZGF0YS5vcHRpb25zLmxlbmd0aDtcbiAgICAgICAgICAgIHRoaXMuZGF0YS5tdWx0aVNlbGVjdCAmJiAoaS5tdWx0aXBsZSA9ICEwKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaS5hZGRFdmVudExpc3RlbmVyKFwicmVzZXRmb3JtXCIsIHQgPT4ge1xuICAgICAgICAgICAgY29uc3QgZSA9IHRoaXMuZGF0YS5kZWZhdWx0RmllbGRWYWx1ZTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdCBvZiBpLm9wdGlvbnMpIHQuc2VsZWN0ZWQgPSB0LnZhbHVlID09PSBlO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGZvciAoY29uc3QgdCBvZiB0aGlzLmRhdGEub3B0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIik7XG4gICAgICAgICAgICBlLnRleHRDb250ZW50ID0gdC5kaXNwbGF5VmFsdWU7XG4gICAgICAgICAgICBlLnZhbHVlID0gdC5leHBvcnRWYWx1ZTtcbiAgICAgICAgICAgIGlmIChuLnZhbHVlLmluY2x1ZGVzKHQuZXhwb3J0VmFsdWUpKSB7XG4gICAgICAgICAgICAgIGUuc2V0QXR0cmlidXRlKFwic2VsZWN0ZWRcIiwgITApO1xuICAgICAgICAgICAgICByID0gITE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpLmFwcGVuZChlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IHMgPSBudWxsO1xuICAgICAgICAgIGlmIChyKSB7XG4gICAgICAgICAgICBjb25zdCB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcIm9wdGlvblwiKTtcbiAgICAgICAgICAgIHQudmFsdWUgPSBcIiBcIjtcbiAgICAgICAgICAgIHQuc2V0QXR0cmlidXRlKFwiaGlkZGVuXCIsICEwKTtcbiAgICAgICAgICAgIHQuc2V0QXR0cmlidXRlKFwic2VsZWN0ZWRcIiwgITApO1xuICAgICAgICAgICAgaS5wcmVwZW5kKHQpO1xuICAgICAgICAgICAgcyA9ICgpID0+IHtcbiAgICAgICAgICAgICAgdC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgaS5yZW1vdmVFdmVudExpc3RlbmVyKFwiaW5wdXRcIiwgcyk7XG4gICAgICAgICAgICAgIHMgPSBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGkuYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsIHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBnZXRWYWx1ZSA9IHQgPT4ge1xuICAgICAgICAgICAgY29uc3QgZSA9IHQgPyBcInZhbHVlXCIgOiBcInRleHRDb250ZW50XCIsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBuLFxuICAgICAgICAgICAgICAgIG11bHRpcGxlOiByXG4gICAgICAgICAgICAgIH0gPSBpO1xuICAgICAgICAgICAgcmV0dXJuIHIgPyBBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwobiwgdCA9PiB0LnNlbGVjdGVkKS5tYXAodCA9PiB0W2VdKSA6IC0xID09PSBuLnNlbGVjdGVkSW5kZXggPyBudWxsIDogbltuLnNlbGVjdGVkSW5kZXhdW2VdO1xuICAgICAgICAgIH07XG4gICAgICAgICAgbGV0IGEgPSBnZXRWYWx1ZSghMSk7XG4gICAgICAgICAgY29uc3QgZ2V0SXRlbXMgPSB0ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGUgPSB0LnRhcmdldC5vcHRpb25zO1xuICAgICAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5tYXAuY2FsbChlLCB0ID0+ICh7XG4gICAgICAgICAgICAgIGRpc3BsYXlWYWx1ZTogdC50ZXh0Q29udGVudCxcbiAgICAgICAgICAgICAgZXhwb3J0VmFsdWU6IHQudmFsdWVcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmICh0aGlzLmVuYWJsZVNjcmlwdGluZyAmJiB0aGlzLmhhc0pTQWN0aW9ucykge1xuICAgICAgICAgICAgaS5hZGRFdmVudExpc3RlbmVyKFwidXBkYXRlZnJvbXNhbmRib3hcIiwgbiA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHIgPSB7XG4gICAgICAgICAgICAgICAgdmFsdWUobikge1xuICAgICAgICAgICAgICAgICAgdmFyIF9zNTtcbiAgICAgICAgICAgICAgICAgIChfczUgPSBzKSA9PT0gbnVsbCB8fCBfczUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9zNSgpO1xuICAgICAgICAgICAgICAgICAgY29uc3QgciA9IG4uZGV0YWlsLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBvID0gbmV3IFNldChBcnJheS5pc0FycmF5KHIpID8gciA6IFtyXSk7XG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHQgb2YgaS5vcHRpb25zKSB0LnNlbGVjdGVkID0gby5oYXModC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICB0LnNldFZhbHVlKGUsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGdldFZhbHVlKCEwKVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICBhID0gZ2V0VmFsdWUoITEpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbXVsdGlwbGVTZWxlY3Rpb24odCkge1xuICAgICAgICAgICAgICAgICAgaS5tdWx0aXBsZSA9ICEwO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcmVtb3ZlKG4pIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHIgPSBpLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIHMgPSBuLmRldGFpbC5yZW1vdmU7XG4gICAgICAgICAgICAgICAgICByW3NdLnNlbGVjdGVkID0gITE7XG4gICAgICAgICAgICAgICAgICBpLnJlbW92ZShzKTtcbiAgICAgICAgICAgICAgICAgIGlmIChyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgLTEgPT09IEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXguY2FsbChyLCB0ID0+IHQuc2VsZWN0ZWQpICYmIChyWzBdLnNlbGVjdGVkID0gITApO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgdC5zZXRWYWx1ZShlLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBnZXRWYWx1ZSghMCksXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBnZXRJdGVtcyhuKVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICBhID0gZ2V0VmFsdWUoITEpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY2xlYXIobikge1xuICAgICAgICAgICAgICAgICAgZm9yICg7IDAgIT09IGkubGVuZ3RoOykgaS5yZW1vdmUoMCk7XG4gICAgICAgICAgICAgICAgICB0LnNldFZhbHVlKGUsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbXVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICBhID0gZ2V0VmFsdWUoITEpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaW5zZXJ0KG4pIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgICAgICAgICBpbmRleDogcixcbiAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5VmFsdWU6IHMsXG4gICAgICAgICAgICAgICAgICAgICAgZXhwb3J0VmFsdWU6IG9cbiAgICAgICAgICAgICAgICAgICAgfSA9IG4uZGV0YWlsLmluc2VydCxcbiAgICAgICAgICAgICAgICAgICAgbCA9IGkuY2hpbGRyZW5bcl0sXG4gICAgICAgICAgICAgICAgICAgIGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIpO1xuICAgICAgICAgICAgICAgICAgYy50ZXh0Q29udGVudCA9IHM7XG4gICAgICAgICAgICAgICAgICBjLnZhbHVlID0gbztcbiAgICAgICAgICAgICAgICAgIGwgPyBsLmJlZm9yZShjKSA6IGkuYXBwZW5kKGMpO1xuICAgICAgICAgICAgICAgICAgdC5zZXRWYWx1ZShlLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBnZXRWYWx1ZSghMCksXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBnZXRJdGVtcyhuKVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICBhID0gZ2V0VmFsdWUoITEpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaXRlbXMobikge1xuICAgICAgICAgICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICAgICAgICBpdGVtczogclxuICAgICAgICAgICAgICAgICAgfSA9IG4uZGV0YWlsO1xuICAgICAgICAgICAgICAgICAgZm9yICg7IDAgIT09IGkubGVuZ3RoOykgaS5yZW1vdmUoMCk7XG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHQgb2Ygcikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5VmFsdWU6IGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRWYWx1ZTogblxuICAgICAgICAgICAgICAgICAgICAgIH0gPSB0LFxuICAgICAgICAgICAgICAgICAgICAgIHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIpO1xuICAgICAgICAgICAgICAgICAgICByLnRleHRDb250ZW50ID0gZTtcbiAgICAgICAgICAgICAgICAgICAgci52YWx1ZSA9IG47XG4gICAgICAgICAgICAgICAgICAgIGkuYXBwZW5kKHIpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaS5vcHRpb25zLmxlbmd0aCA+IDAgJiYgKGkub3B0aW9uc1swXS5zZWxlY3RlZCA9ICEwKTtcbiAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZSwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZ2V0VmFsdWUoITApLFxuICAgICAgICAgICAgICAgICAgICBpdGVtczogZ2V0SXRlbXMobilcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgYSA9IGdldFZhbHVlKCExKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGluZGljZXMobikge1xuICAgICAgICAgICAgICAgICAgY29uc3QgaSA9IG5ldyBTZXQobi5kZXRhaWwuaW5kaWNlcyk7XG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHQgb2Ygbi50YXJnZXQub3B0aW9ucykgdC5zZWxlY3RlZCA9IGkuaGFzKHQuaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgdC5zZXRWYWx1ZShlLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBnZXRWYWx1ZSghMClcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgYSA9IGdldFZhbHVlKCExKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVkaXRhYmxlKHQpIHtcbiAgICAgICAgICAgICAgICAgIHQudGFyZ2V0LmRpc2FibGVkID0gIXQuZGV0YWlsLmVkaXRhYmxlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgdGhpcy5fZGlzcGF0Y2hFdmVudEZyb21TYW5kYm94KHIsIG4pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpLmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCBuID0+IHtcbiAgICAgICAgICAgICAgdmFyIF90aGlzJGxpbmtTZXJ2aWNlJGV2ZTEwO1xuICAgICAgICAgICAgICBjb25zdCBpID0gZ2V0VmFsdWUoITApO1xuICAgICAgICAgICAgICB0LnNldFZhbHVlKGUsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogaVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgbi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAoX3RoaXMkbGlua1NlcnZpY2UkZXZlMTAgPSB0aGlzLmxpbmtTZXJ2aWNlLmV2ZW50QnVzKSA9PT0gbnVsbCB8fCBfdGhpcyRsaW5rU2VydmljZSRldmUxMCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkbGlua1NlcnZpY2UkZXZlMTAuZGlzcGF0Y2goXCJkaXNwYXRjaGV2ZW50aW5zYW5kYm94XCIsIHtcbiAgICAgICAgICAgICAgICBzb3VyY2U6IHRoaXMsXG4gICAgICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgICAgICBpZDogZSxcbiAgICAgICAgICAgICAgICAgIG5hbWU6IFwiS2V5c3Ryb2tlXCIsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogYSxcbiAgICAgICAgICAgICAgICAgIGNoYW5nZUV4OiBpLFxuICAgICAgICAgICAgICAgICAgd2lsbENvbW1pdDogITEsXG4gICAgICAgICAgICAgICAgICBjb21taXRLZXk6IDEsXG4gICAgICAgICAgICAgICAgICBrZXlEb3duOiAhMVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuX3NldEV2ZW50TGlzdGVuZXJzKGksIFtbXCJmb2N1c1wiLCBcIkZvY3VzXCJdLCBbXCJibHVyXCIsIFwiQmx1clwiXSwgW1wibW91c2Vkb3duXCIsIFwiTW91c2UgRG93blwiXSwgW1wibW91c2VlbnRlclwiLCBcIk1vdXNlIEVudGVyXCJdLCBbXCJtb3VzZWxlYXZlXCIsIFwiTW91c2UgRXhpdFwiXSwgW1wibW91c2V1cFwiLCBcIk1vdXNlIFVwXCJdLCBbXCJpbnB1dFwiLCBcIkFjdGlvblwiXSwgW1wiaW5wdXRcIiwgXCJWYWxpZGF0ZVwiXV0sIHQgPT4gdC50YXJnZXQudmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSBpLmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCBmdW5jdGlvbiAobikge1xuICAgICAgICAgICAgdC5zZXRWYWx1ZShlLCB7XG4gICAgICAgICAgICAgIHZhbHVlOiBnZXRWYWx1ZSghMClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuZGF0YS5jb21ibyAmJiB0aGlzLl9zZXRUZXh0U3R5bGUoaSk7XG4gICAgICAgICAgdGhpcy5fc2V0QmFja2dyb3VuZENvbG9yKGkpO1xuICAgICAgICAgIHRoaXMuX3NldERlZmF1bHRQcm9wZXJ0aWVzRnJvbUpTKGkpO1xuICAgICAgICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZChpKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNsYXNzIFBvcHVwQW5ub3RhdGlvbkVsZW1lbnQgZXh0ZW5kcyBBbm5vdGF0aW9uRWxlbWVudCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHQpIHtcbiAgICAgICAgICB2YXIgX2UkdGl0bGVPYmosIF9lJGNvbnRlbnRzT2JqLCBfZSRyaWNoVGV4dDtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBkYXRhOiBlLFxuICAgICAgICAgICAgZWxlbWVudHM6IG5cbiAgICAgICAgICB9ID0gdDtcbiAgICAgICAgICBzdXBlcih0LCB7XG4gICAgICAgICAgICBpc1JlbmRlcmFibGU6ICEhKChfZSR0aXRsZU9iaiA9IGUudGl0bGVPYmopICE9PSBudWxsICYmIF9lJHRpdGxlT2JqICE9PSB2b2lkIDAgJiYgX2UkdGl0bGVPYmouc3RyIHx8IChfZSRjb250ZW50c09iaiA9IGUuY29udGVudHNPYmopICE9PSBudWxsICYmIF9lJGNvbnRlbnRzT2JqICE9PSB2b2lkIDAgJiYgX2UkY29udGVudHNPYmouc3RyIHx8IChfZSRyaWNoVGV4dCA9IGUucmljaFRleHQpICE9PSBudWxsICYmIF9lJHJpY2hUZXh0ICE9PSB2b2lkIDAgJiYgX2UkcmljaFRleHQuc3RyKVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuZWxlbWVudHMgPSBuO1xuICAgICAgICB9XG4gICAgICAgIHJlbmRlcigpIHtcbiAgICAgICAgICB0aGlzLmNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwicG9wdXBBbm5vdGF0aW9uXCIpO1xuICAgICAgICAgIGNvbnN0IHQgPSBuZXcgUG9wdXBFbGVtZW50KHtcbiAgICAgICAgICAgICAgY29udGFpbmVyOiB0aGlzLmNvbnRhaW5lcixcbiAgICAgICAgICAgICAgY29sb3I6IHRoaXMuZGF0YS5jb2xvcixcbiAgICAgICAgICAgICAgdGl0bGVPYmo6IHRoaXMuZGF0YS50aXRsZU9iaixcbiAgICAgICAgICAgICAgbW9kaWZpY2F0aW9uRGF0ZTogdGhpcy5kYXRhLm1vZGlmaWNhdGlvbkRhdGUsXG4gICAgICAgICAgICAgIGNvbnRlbnRzT2JqOiB0aGlzLmRhdGEuY29udGVudHNPYmosXG4gICAgICAgICAgICAgIHJpY2hUZXh0OiB0aGlzLmRhdGEucmljaFRleHQsXG4gICAgICAgICAgICAgIHJlY3Q6IHRoaXMuZGF0YS5yZWN0LFxuICAgICAgICAgICAgICBwYXJlbnRSZWN0OiB0aGlzLmRhdGEucGFyZW50UmVjdCB8fCBudWxsLFxuICAgICAgICAgICAgICBwYXJlbnQ6IHRoaXMucGFyZW50LFxuICAgICAgICAgICAgICBlbGVtZW50czogdGhpcy5lbGVtZW50cyxcbiAgICAgICAgICAgICAgb3BlbjogdGhpcy5kYXRhLm9wZW5cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgZSA9IFtdO1xuICAgICAgICAgIGZvciAoY29uc3QgbiBvZiB0aGlzLmVsZW1lbnRzKSB7XG4gICAgICAgICAgICBuLnBvcHVwID0gdDtcbiAgICAgICAgICAgIGUucHVzaChuLmRhdGEuaWQpO1xuICAgICAgICAgICAgbi5hZGRIaWdobGlnaHRBcmVhKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY29udGFpbmVyLnNldEF0dHJpYnV0ZShcImFyaWEtY29udHJvbHNcIiwgZS5qb2luKFwiLFwiKSk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgX05lID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICB2YXIgX0JlID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICB2YXIgX1VlID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICB2YXIgX0hlID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICB2YXIgX1NlMiA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xuICAgICAgdmFyIF9idDIgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfV2UgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfR2UgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfVmUgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfJGUgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfWGUgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfS2UgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfWWUgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfSmUgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfUWUgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfWmUgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfcWUgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbiAgICAgIHZhciBfemUgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbiAgICAgIHZhciBfamUgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbiAgICAgIGNsYXNzIFBvcHVwRWxlbWVudCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHQpIHtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlTWV0aG9kSW5pdFNwZWModGhpcywgX2plKTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlTWV0aG9kSW5pdFNwZWModGhpcywgX3plKTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlTWV0aG9kSW5pdFNwZWModGhpcywgX3FlKTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfTmUsIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfQmUsIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX2plLCBfamUyKS5iaW5kKHRoaXMpXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX1VlLCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF96ZSwgX3plMikuYmluZCh0aGlzKVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9IZSwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfcWUsIF9xZTIpLmJpbmQodGhpcylcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfU2UyLCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBudWxsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2J0Miwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9XZSwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9HZSwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9WZSwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF8kZSwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9YZSwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogITFcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfS2UsIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfWWUsIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfSmUsIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfUWUsIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfWmUsIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6ICExXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbGV0IHtcbiAgICAgICAgICAgIGNvbnRhaW5lcjogZSxcbiAgICAgICAgICAgIGNvbG9yOiBuLFxuICAgICAgICAgICAgZWxlbWVudHM6IGksXG4gICAgICAgICAgICB0aXRsZU9iajogcyxcbiAgICAgICAgICAgIG1vZGlmaWNhdGlvbkRhdGU6IGEsXG4gICAgICAgICAgICBjb250ZW50c09iajogbyxcbiAgICAgICAgICAgIHJpY2hUZXh0OiBsLFxuICAgICAgICAgICAgcGFyZW50OiBjLFxuICAgICAgICAgICAgcmVjdDogaCxcbiAgICAgICAgICAgIHBhcmVudFJlY3Q6IGQsXG4gICAgICAgICAgICBvcGVuOiB1XG4gICAgICAgICAgfSA9IHQ7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9idDIsIGUpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfUWUsIHMpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfV2UsIG8pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfSmUsIGwpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfVmUsIGMpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfU2UyLCBuKTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1llLCBoKTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgXyRlLCBkKTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX0dlLCBpKTtcbiAgICAgICAgICBjb25zdCBwID0gci5QREZEYXRlU3RyaW5nLnRvRGF0ZU9iamVjdChhKTtcbiAgICAgICAgICBwICYmIF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfTmUsIGMubDEwbi5nZXQoXCJhbm5vdGF0aW9uX2RhdGVfc3RyaW5nXCIsIHtcbiAgICAgICAgICAgIGRhdGU6IHAudG9Mb2NhbGVEYXRlU3RyaW5nKCksXG4gICAgICAgICAgICB0aW1lOiBwLnRvTG9jYWxlVGltZVN0cmluZygpXG4gICAgICAgICAgfSkpO1xuICAgICAgICAgIHRoaXMudHJpZ2dlciA9IGkuZmxhdE1hcCh0ID0+IHQuZ2V0RWxlbWVudHNUb1RyaWdnZXJQb3B1cCgpKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IHQgb2YgdGhpcy50cmlnZ2VyKSB7XG4gICAgICAgICAgICB0LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0hlKSk7XG4gICAgICAgICAgICB0LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfVWUpKTtcbiAgICAgICAgICAgIHQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIiwgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9CZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2J0MikuaGlkZGVuID0gITA7XG4gICAgICAgICAgdSAmJiBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9xZSwgX3FlMikuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZW5kZXIoKSB7XG4gICAgICAgICAgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfS2UpKSByZXR1cm47XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICBwYWdlOiB7XG4gICAgICAgICAgICAgICAgdmlldzogdFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB2aWV3cG9ydDoge1xuICAgICAgICAgICAgICAgIHJhd0RpbXM6IHtcbiAgICAgICAgICAgICAgICAgIHBhZ2VXaWR0aDogZSxcbiAgICAgICAgICAgICAgICAgIHBhZ2VIZWlnaHQ6IG4sXG4gICAgICAgICAgICAgICAgICBwYWdlWDogcixcbiAgICAgICAgICAgICAgICAgIHBhZ2VZOiBzXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9ID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9WZSksXG4gICAgICAgICAgICBhID0gX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9LZSwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSk7XG4gICAgICAgICAgYS5jbGFzc05hbWUgPSBcInBvcHVwXCI7XG4gICAgICAgICAgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfU2UyKSkge1xuICAgICAgICAgICAgY29uc3QgdCA9IGEuc3R5bGUub3V0bGluZUNvbG9yID0gaS5VdGlsLm1ha2VIZXhDb2xvciguLi5fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1NlMikpO1xuICAgICAgICAgICAgaWYgKENTUy5zdXBwb3J0cyhcImJhY2tncm91bmQtY29sb3JcIiwgXCJjb2xvci1taXgoaW4gc3JnYiwgcmVkIDMwJSwgd2hpdGUpXCIpKSBhLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IFwiY29sb3ItbWl4KGluIHNyZ2IsIFwiLmNvbmNhdCh0LCBcIiAzMCUsIHdoaXRlKVwiKTtlbHNlIHtcbiAgICAgICAgICAgICAgY29uc3QgdCA9IC43O1xuICAgICAgICAgICAgICBhLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGkuVXRpbC5tYWtlSGV4Q29sb3IoLi4uX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9TZTIpLm1hcChlID0+IE1hdGguZmxvb3IodCAqICgyNTUgLSBlKSArIGUpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IG8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3BhblwiKTtcbiAgICAgICAgICBvLmNsYXNzTmFtZSA9IFwiaGVhZGVyXCI7XG4gICAgICAgICAgY29uc3QgYyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJoMVwiKTtcbiAgICAgICAgICBvLmFwcGVuZChjKTtcbiAgICAgICAgICAoe1xuICAgICAgICAgICAgZGlyOiBjLmRpcixcbiAgICAgICAgICAgIHN0cjogYy50ZXh0Q29udGVudFxuICAgICAgICAgIH0gPSBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1FlKSk7XG4gICAgICAgICAgYS5hcHBlbmQobyk7XG4gICAgICAgICAgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfTmUpKSB7XG4gICAgICAgICAgICBjb25zdCB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIik7XG4gICAgICAgICAgICB0LmNsYXNzTGlzdC5hZGQoXCJwb3B1cERhdGVcIik7XG4gICAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX05lKS50aGVuKGUgPT4ge1xuICAgICAgICAgICAgICB0LnRleHRDb250ZW50ID0gZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgby5hcHBlbmQodCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGggPSBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1dlKSxcbiAgICAgICAgICAgIGQgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0plKTtcbiAgICAgICAgICBpZiAoIShkICE9PSBudWxsICYmIGQgIT09IHZvaWQgMCAmJiBkLnN0cikgfHwgaCAhPT0gbnVsbCAmJiBoICE9PSB2b2lkIDAgJiYgaC5zdHIgJiYgaC5zdHIgIT09IGQuc3RyKSB7XG4gICAgICAgICAgICBjb25zdCB0ID0gdGhpcy5fZm9ybWF0Q29udGVudHMoaCk7XG4gICAgICAgICAgICBhLmFwcGVuZCh0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbC5YZmFMYXllci5yZW5kZXIoe1xuICAgICAgICAgICAgICB4ZmFIdG1sOiBkLmh0bWwsXG4gICAgICAgICAgICAgIGludGVudDogXCJyaWNoVGV4dFwiLFxuICAgICAgICAgICAgICBkaXY6IGFcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYS5sYXN0Q2hpbGQuY2xhc3NMaXN0LmFkZChcInJpY2hUZXh0XCIsIFwicG9wdXBDb250ZW50XCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgdSA9ICEhX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF8kZSksXG4gICAgICAgICAgICBwID0gdSA/IF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfJGUpIDogX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZZSk7XG4gICAgICAgICAgZm9yIChjb25zdCB0IG9mIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfR2UpKSBpZiAoIXAgfHwgbnVsbCAhPT0gaS5VdGlsLmludGVyc2VjdCh0LmRhdGEucmVjdCwgcCkpIHtcbiAgICAgICAgICAgIHAgPSB0LmRhdGEucmVjdDtcbiAgICAgICAgICAgIHUgPSAhMDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBmID0gaS5VdGlsLm5vcm1hbGl6ZVJlY3QoW3BbMF0sIHRbM10gLSBwWzFdICsgdFsxXSwgcFsyXSwgdFszXSAtIHBbM10gKyB0WzFdXSksXG4gICAgICAgICAgICBnID0gdSA/IHBbMl0gLSBwWzBdICsgNSA6IDAsXG4gICAgICAgICAgICBtID0gZlswXSArIGcsXG4gICAgICAgICAgICBiID0gZlsxXSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc3R5bGU6IHZcbiAgICAgICAgICAgIH0gPSBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2J0Mik7XG4gICAgICAgICAgdi5sZWZ0ID0gMTAwICogKG0gLSByKSAvIGUgKyBcIiVcIjtcbiAgICAgICAgICB2LnRvcCA9IDEwMCAqIChiIC0gcykgLyBuICsgXCIlXCI7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9idDIpLmFwcGVuZChhKTtcbiAgICAgICAgfVxuICAgICAgICBfZm9ybWF0Q29udGVudHModCkge1xuICAgICAgICAgIGxldCB7XG4gICAgICAgICAgICBzdHI6IGUsXG4gICAgICAgICAgICBkaXI6IG5cbiAgICAgICAgICB9ID0gdDtcbiAgICAgICAgICBjb25zdCBpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInBcIik7XG4gICAgICAgICAgaS5jbGFzc0xpc3QuYWRkKFwicG9wdXBDb250ZW50XCIpO1xuICAgICAgICAgIGkuZGlyID0gbjtcbiAgICAgICAgICBjb25zdCByID0gZS5zcGxpdCgvKD86XFxyXFxuP3xcXG4pLyk7XG4gICAgICAgICAgZm9yIChsZXQgdCA9IDAsIGUgPSByLmxlbmd0aDsgdCA8IGU7ICsrdCkge1xuICAgICAgICAgICAgY29uc3QgbiA9IHJbdF07XG4gICAgICAgICAgICBpLmFwcGVuZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShuKSk7XG4gICAgICAgICAgICB0IDwgZSAtIDEgJiYgaS5hcHBlbmQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJyXCIpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yY2VIaWRlKCkge1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWmUsIHRoaXMuaXNWaXNpYmxlKTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1plKSAmJiAoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9idDIpLmhpZGRlbiA9ICEwKTtcbiAgICAgICAgfVxuICAgICAgICBtYXliZVNob3coKSB7XG4gICAgICAgICAgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWmUpKSB7XG4gICAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1plLCAhMSk7XG4gICAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2J0MikuaGlkZGVuID0gITE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGdldCBpc1Zpc2libGUoKSB7XG4gICAgICAgICAgcmV0dXJuICExID09PSBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2J0MikuaGlkZGVuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfcWUyKCkge1xuICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1hlLCAhX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9YZSkpO1xuICAgICAgICBpZiAoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9YZSkpIHtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF96ZSwgX3plMikuY2FsbCh0aGlzKTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2J0MikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfSGUpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9qZSwgX2plMikuY2FsbCh0aGlzKTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2J0MikucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfSGUpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX3plMigpIHtcbiAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9LZSkgfHwgdGhpcy5yZW5kZXIoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNWaXNpYmxlKSBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1hlKSAmJiBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2J0MikuY2xhc3NMaXN0LmFkZChcImZvY3VzZWRcIik7ZWxzZSB7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9idDIpLmhpZGRlbiA9ICExO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfYnQyKS5zdHlsZS56SW5kZXggPSBwYXJzZUludChfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2J0Mikuc3R5bGUuekluZGV4KSArIDFlMztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX2plMigpIHtcbiAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9idDIpLmNsYXNzTGlzdC5yZW1vdmUoXCJmb2N1c2VkXCIpO1xuICAgICAgICBpZiAoIV9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWGUpICYmIHRoaXMuaXNWaXNpYmxlKSB7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9idDIpLmhpZGRlbiA9ICEwO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfYnQyKS5zdHlsZS56SW5kZXggPSBwYXJzZUludChfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2J0Mikuc3R5bGUuekluZGV4KSAtIDFlMztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2xhc3MgRnJlZVRleHRBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50IHtcbiAgICAgICAgY29uc3RydWN0b3IodCkge1xuICAgICAgICAgIHZhciBfdCRkYXRhJHRpdGxlT2JqMiwgX3QkZGF0YSRjb250ZW50c09iajIsIF90JGRhdGEkcmljaFRleHQyO1xuICAgICAgICAgIHN1cGVyKHQsIHtcbiAgICAgICAgICAgIGlzUmVuZGVyYWJsZTogISEodC5kYXRhLnBvcHVwUmVmIHx8IChfdCRkYXRhJHRpdGxlT2JqMiA9IHQuZGF0YS50aXRsZU9iaikgIT09IG51bGwgJiYgX3QkZGF0YSR0aXRsZU9iajIgIT09IHZvaWQgMCAmJiBfdCRkYXRhJHRpdGxlT2JqMi5zdHIgfHwgKF90JGRhdGEkY29udGVudHNPYmoyID0gdC5kYXRhLmNvbnRlbnRzT2JqKSAhPT0gbnVsbCAmJiBfdCRkYXRhJGNvbnRlbnRzT2JqMiAhPT0gdm9pZCAwICYmIF90JGRhdGEkY29udGVudHNPYmoyLnN0ciB8fCAoX3QkZGF0YSRyaWNoVGV4dDIgPSB0LmRhdGEucmljaFRleHQpICE9PSBudWxsICYmIF90JGRhdGEkcmljaFRleHQyICE9PSB2b2lkIDAgJiYgX3QkZGF0YSRyaWNoVGV4dDIuc3RyKSxcbiAgICAgICAgICAgIGlnbm9yZUJvcmRlcjogITBcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnRleHRDb250ZW50ID0gdC5kYXRhLnRleHRDb250ZW50O1xuICAgICAgICAgIHRoaXMudGV4dFBvc2l0aW9uID0gdC5kYXRhLnRleHRQb3NpdGlvbjtcbiAgICAgICAgICB0aGlzLmFubm90YXRpb25FZGl0b3JUeXBlID0gaS5Bbm5vdGF0aW9uRWRpdG9yVHlwZS5GUkVFVEVYVDtcbiAgICAgICAgfVxuICAgICAgICByZW5kZXIoKSB7XG4gICAgICAgICAgdGhpcy5jb250YWluZXIuY2xhc3NMaXN0LmFkZChcImZyZWVUZXh0QW5ub3RhdGlvblwiKTtcbiAgICAgICAgICBpZiAodGhpcy50ZXh0Q29udGVudCkge1xuICAgICAgICAgICAgY29uc3QgdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgICAgICAgICB0LmNsYXNzTGlzdC5hZGQoXCJhbm5vdGF0aW9uVGV4dENvbnRlbnRcIik7XG4gICAgICAgICAgICB0LnNldEF0dHJpYnV0ZShcInJvbGVcIiwgXCJjb21tZW50XCIpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBlIG9mIHRoaXMudGV4dENvbnRlbnQpIHtcbiAgICAgICAgICAgICAgY29uc3QgbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpO1xuICAgICAgICAgICAgICBuLnRleHRDb250ZW50ID0gZTtcbiAgICAgICAgICAgICAgdC5hcHBlbmQobik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmQodCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZGF0YS5wb3B1cFJlZiB8fCB0aGlzLl9jcmVhdGVQb3B1cCgpO1xuICAgICAgICAgIHRoaXMuX2VkaXRPbkRvdWJsZUNsaWNrKCk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlLkZyZWVUZXh0QW5ub3RhdGlvbkVsZW1lbnQgPSBGcmVlVGV4dEFubm90YXRpb25FbGVtZW50O1xuICAgICAgdmFyIF90biA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xuICAgICAgY2xhc3MgTGluZUFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgQW5ub3RhdGlvbkVsZW1lbnQge1xuICAgICAgICBjb25zdHJ1Y3Rvcih0KSB7XG4gICAgICAgICAgdmFyIF90JGRhdGEkdGl0bGVPYmozLCBfdCRkYXRhJGNvbnRlbnRzT2JqMywgX3QkZGF0YSRyaWNoVGV4dDM7XG4gICAgICAgICAgc3VwZXIodCwge1xuICAgICAgICAgICAgaXNSZW5kZXJhYmxlOiAhISh0LmRhdGEucG9wdXBSZWYgfHwgKF90JGRhdGEkdGl0bGVPYmozID0gdC5kYXRhLnRpdGxlT2JqKSAhPT0gbnVsbCAmJiBfdCRkYXRhJHRpdGxlT2JqMyAhPT0gdm9pZCAwICYmIF90JGRhdGEkdGl0bGVPYmozLnN0ciB8fCAoX3QkZGF0YSRjb250ZW50c09iajMgPSB0LmRhdGEuY29udGVudHNPYmopICE9PSBudWxsICYmIF90JGRhdGEkY29udGVudHNPYmozICE9PSB2b2lkIDAgJiYgX3QkZGF0YSRjb250ZW50c09iajMuc3RyIHx8IChfdCRkYXRhJHJpY2hUZXh0MyA9IHQuZGF0YS5yaWNoVGV4dCkgIT09IG51bGwgJiYgX3QkZGF0YSRyaWNoVGV4dDMgIT09IHZvaWQgMCAmJiBfdCRkYXRhJHJpY2hUZXh0My5zdHIpLFxuICAgICAgICAgICAgaWdub3JlQm9yZGVyOiAhMFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF90biwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJlbmRlcigpIHtcbiAgICAgICAgICB0aGlzLmNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwibGluZUFubm90YXRpb25cIik7XG4gICAgICAgICAgY29uc3QgdCA9IHRoaXMuZGF0YSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgd2lkdGg6IGUsXG4gICAgICAgICAgICAgIGhlaWdodDogblxuICAgICAgICAgICAgfSA9IGdldFJlY3REaW1zKHQucmVjdCksXG4gICAgICAgICAgICBpID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZShlLCBuLCAhMCksXG4gICAgICAgICAgICByID0gX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF90biwgdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoXCJzdmc6bGluZVwiKSk7XG4gICAgICAgICAgci5zZXRBdHRyaWJ1dGUoXCJ4MVwiLCB0LnJlY3RbMl0gLSB0LmxpbmVDb29yZGluYXRlc1swXSk7XG4gICAgICAgICAgci5zZXRBdHRyaWJ1dGUoXCJ5MVwiLCB0LnJlY3RbM10gLSB0LmxpbmVDb29yZGluYXRlc1sxXSk7XG4gICAgICAgICAgci5zZXRBdHRyaWJ1dGUoXCJ4MlwiLCB0LnJlY3RbMl0gLSB0LmxpbmVDb29yZGluYXRlc1syXSk7XG4gICAgICAgICAgci5zZXRBdHRyaWJ1dGUoXCJ5MlwiLCB0LnJlY3RbM10gLSB0LmxpbmVDb29yZGluYXRlc1szXSk7XG4gICAgICAgICAgci5zZXRBdHRyaWJ1dGUoXCJzdHJva2Utd2lkdGhcIiwgdC5ib3JkZXJTdHlsZS53aWR0aCB8fCAxKTtcbiAgICAgICAgICByLnNldEF0dHJpYnV0ZShcInN0cm9rZVwiLCBcInRyYW5zcGFyZW50XCIpO1xuICAgICAgICAgIHIuc2V0QXR0cmlidXRlKFwiZmlsbFwiLCBcInRyYW5zcGFyZW50XCIpO1xuICAgICAgICAgIGkuYXBwZW5kKHIpO1xuICAgICAgICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZChpKTtcbiAgICAgICAgICB0LnBvcHVwUmVmIHx8IHRoaXMuX2NyZWF0ZVBvcHVwKCk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICAgICAgICB9XG4gICAgICAgIGdldEVsZW1lbnRzVG9UcmlnZ2VyUG9wdXAoKSB7XG4gICAgICAgICAgcmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfdG4pO1xuICAgICAgICB9XG4gICAgICAgIGFkZEhpZ2hsaWdodEFyZWEoKSB7XG4gICAgICAgICAgdGhpcy5jb250YWluZXIuY2xhc3NMaXN0LmFkZChcImhpZ2hsaWdodEFyZWFcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBfZW4gPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIGNsYXNzIFNxdWFyZUFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgQW5ub3RhdGlvbkVsZW1lbnQge1xuICAgICAgICBjb25zdHJ1Y3Rvcih0KSB7XG4gICAgICAgICAgdmFyIF90JGRhdGEkdGl0bGVPYmo0LCBfdCRkYXRhJGNvbnRlbnRzT2JqNCwgX3QkZGF0YSRyaWNoVGV4dDQ7XG4gICAgICAgICAgc3VwZXIodCwge1xuICAgICAgICAgICAgaXNSZW5kZXJhYmxlOiAhISh0LmRhdGEucG9wdXBSZWYgfHwgKF90JGRhdGEkdGl0bGVPYmo0ID0gdC5kYXRhLnRpdGxlT2JqKSAhPT0gbnVsbCAmJiBfdCRkYXRhJHRpdGxlT2JqNCAhPT0gdm9pZCAwICYmIF90JGRhdGEkdGl0bGVPYmo0LnN0ciB8fCAoX3QkZGF0YSRjb250ZW50c09iajQgPSB0LmRhdGEuY29udGVudHNPYmopICE9PSBudWxsICYmIF90JGRhdGEkY29udGVudHNPYmo0ICE9PSB2b2lkIDAgJiYgX3QkZGF0YSRjb250ZW50c09iajQuc3RyIHx8IChfdCRkYXRhJHJpY2hUZXh0NCA9IHQuZGF0YS5yaWNoVGV4dCkgIT09IG51bGwgJiYgX3QkZGF0YSRyaWNoVGV4dDQgIT09IHZvaWQgMCAmJiBfdCRkYXRhJHJpY2hUZXh0NC5zdHIpLFxuICAgICAgICAgICAgaWdub3JlQm9yZGVyOiAhMFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9lbiwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJlbmRlcigpIHtcbiAgICAgICAgICB0aGlzLmNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwic3F1YXJlQW5ub3RhdGlvblwiKTtcbiAgICAgICAgICBjb25zdCB0ID0gdGhpcy5kYXRhLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB3aWR0aDogZSxcbiAgICAgICAgICAgICAgaGVpZ2h0OiBuXG4gICAgICAgICAgICB9ID0gZ2V0UmVjdERpbXModC5yZWN0KSxcbiAgICAgICAgICAgIGkgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlKGUsIG4sICEwKSxcbiAgICAgICAgICAgIHIgPSB0LmJvcmRlclN0eWxlLndpZHRoLFxuICAgICAgICAgICAgcyA9IF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfZW4sIHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOnJlY3RcIikpO1xuICAgICAgICAgIHMuc2V0QXR0cmlidXRlKFwieFwiLCByIC8gMik7XG4gICAgICAgICAgcy5zZXRBdHRyaWJ1dGUoXCJ5XCIsIHIgLyAyKTtcbiAgICAgICAgICBzLnNldEF0dHJpYnV0ZShcIndpZHRoXCIsIGUgLSByKTtcbiAgICAgICAgICBzLnNldEF0dHJpYnV0ZShcImhlaWdodFwiLCBuIC0gcik7XG4gICAgICAgICAgcy5zZXRBdHRyaWJ1dGUoXCJzdHJva2Utd2lkdGhcIiwgciB8fCAxKTtcbiAgICAgICAgICBzLnNldEF0dHJpYnV0ZShcInN0cm9rZVwiLCBcInRyYW5zcGFyZW50XCIpO1xuICAgICAgICAgIHMuc2V0QXR0cmlidXRlKFwiZmlsbFwiLCBcInRyYW5zcGFyZW50XCIpO1xuICAgICAgICAgIGkuYXBwZW5kKHMpO1xuICAgICAgICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZChpKTtcbiAgICAgICAgICB0LnBvcHVwUmVmIHx8IHRoaXMuX2NyZWF0ZVBvcHVwKCk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICAgICAgICB9XG4gICAgICAgIGdldEVsZW1lbnRzVG9UcmlnZ2VyUG9wdXAoKSB7XG4gICAgICAgICAgcmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfZW4pO1xuICAgICAgICB9XG4gICAgICAgIGFkZEhpZ2hsaWdodEFyZWEoKSB7XG4gICAgICAgICAgdGhpcy5jb250YWluZXIuY2xhc3NMaXN0LmFkZChcImhpZ2hsaWdodEFyZWFcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBfbm4gPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIGNsYXNzIENpcmNsZUFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgQW5ub3RhdGlvbkVsZW1lbnQge1xuICAgICAgICBjb25zdHJ1Y3Rvcih0KSB7XG4gICAgICAgICAgdmFyIF90JGRhdGEkdGl0bGVPYmo1LCBfdCRkYXRhJGNvbnRlbnRzT2JqNSwgX3QkZGF0YSRyaWNoVGV4dDU7XG4gICAgICAgICAgc3VwZXIodCwge1xuICAgICAgICAgICAgaXNSZW5kZXJhYmxlOiAhISh0LmRhdGEucG9wdXBSZWYgfHwgKF90JGRhdGEkdGl0bGVPYmo1ID0gdC5kYXRhLnRpdGxlT2JqKSAhPT0gbnVsbCAmJiBfdCRkYXRhJHRpdGxlT2JqNSAhPT0gdm9pZCAwICYmIF90JGRhdGEkdGl0bGVPYmo1LnN0ciB8fCAoX3QkZGF0YSRjb250ZW50c09iajUgPSB0LmRhdGEuY29udGVudHNPYmopICE9PSBudWxsICYmIF90JGRhdGEkY29udGVudHNPYmo1ICE9PSB2b2lkIDAgJiYgX3QkZGF0YSRjb250ZW50c09iajUuc3RyIHx8IChfdCRkYXRhJHJpY2hUZXh0NSA9IHQuZGF0YS5yaWNoVGV4dCkgIT09IG51bGwgJiYgX3QkZGF0YSRyaWNoVGV4dDUgIT09IHZvaWQgMCAmJiBfdCRkYXRhJHJpY2hUZXh0NS5zdHIpLFxuICAgICAgICAgICAgaWdub3JlQm9yZGVyOiAhMFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9ubiwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJlbmRlcigpIHtcbiAgICAgICAgICB0aGlzLmNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwiY2lyY2xlQW5ub3RhdGlvblwiKTtcbiAgICAgICAgICBjb25zdCB0ID0gdGhpcy5kYXRhLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB3aWR0aDogZSxcbiAgICAgICAgICAgICAgaGVpZ2h0OiBuXG4gICAgICAgICAgICB9ID0gZ2V0UmVjdERpbXModC5yZWN0KSxcbiAgICAgICAgICAgIGkgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlKGUsIG4sICEwKSxcbiAgICAgICAgICAgIHIgPSB0LmJvcmRlclN0eWxlLndpZHRoLFxuICAgICAgICAgICAgcyA9IF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfbm4sIHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KFwic3ZnOmVsbGlwc2VcIikpO1xuICAgICAgICAgIHMuc2V0QXR0cmlidXRlKFwiY3hcIiwgZSAvIDIpO1xuICAgICAgICAgIHMuc2V0QXR0cmlidXRlKFwiY3lcIiwgbiAvIDIpO1xuICAgICAgICAgIHMuc2V0QXR0cmlidXRlKFwicnhcIiwgZSAvIDIgLSByIC8gMik7XG4gICAgICAgICAgcy5zZXRBdHRyaWJ1dGUoXCJyeVwiLCBuIC8gMiAtIHIgLyAyKTtcbiAgICAgICAgICBzLnNldEF0dHJpYnV0ZShcInN0cm9rZS13aWR0aFwiLCByIHx8IDEpO1xuICAgICAgICAgIHMuc2V0QXR0cmlidXRlKFwic3Ryb2tlXCIsIFwidHJhbnNwYXJlbnRcIik7XG4gICAgICAgICAgcy5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIFwidHJhbnNwYXJlbnRcIik7XG4gICAgICAgICAgaS5hcHBlbmQocyk7XG4gICAgICAgICAgdGhpcy5jb250YWluZXIuYXBwZW5kKGkpO1xuICAgICAgICAgIHQucG9wdXBSZWYgfHwgdGhpcy5fY3JlYXRlUG9wdXAoKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0RWxlbWVudHNUb1RyaWdnZXJQb3B1cCgpIHtcbiAgICAgICAgICByZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ubik7XG4gICAgICAgIH1cbiAgICAgICAgYWRkSGlnaGxpZ2h0QXJlYSgpIHtcbiAgICAgICAgICB0aGlzLmNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwiaGlnaGxpZ2h0QXJlYVwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIF9pbiA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xuICAgICAgY2xhc3MgUG9seWxpbmVBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50IHtcbiAgICAgICAgY29uc3RydWN0b3IodCkge1xuICAgICAgICAgIHZhciBfdCRkYXRhJHRpdGxlT2JqNiwgX3QkZGF0YSRjb250ZW50c09iajYsIF90JGRhdGEkcmljaFRleHQ2O1xuICAgICAgICAgIHN1cGVyKHQsIHtcbiAgICAgICAgICAgIGlzUmVuZGVyYWJsZTogISEodC5kYXRhLnBvcHVwUmVmIHx8IChfdCRkYXRhJHRpdGxlT2JqNiA9IHQuZGF0YS50aXRsZU9iaikgIT09IG51bGwgJiYgX3QkZGF0YSR0aXRsZU9iajYgIT09IHZvaWQgMCAmJiBfdCRkYXRhJHRpdGxlT2JqNi5zdHIgfHwgKF90JGRhdGEkY29udGVudHNPYmo2ID0gdC5kYXRhLmNvbnRlbnRzT2JqKSAhPT0gbnVsbCAmJiBfdCRkYXRhJGNvbnRlbnRzT2JqNiAhPT0gdm9pZCAwICYmIF90JGRhdGEkY29udGVudHNPYmo2LnN0ciB8fCAoX3QkZGF0YSRyaWNoVGV4dDYgPSB0LmRhdGEucmljaFRleHQpICE9PSBudWxsICYmIF90JGRhdGEkcmljaFRleHQ2ICE9PSB2b2lkIDAgJiYgX3QkZGF0YSRyaWNoVGV4dDYuc3RyKSxcbiAgICAgICAgICAgIGlnbm9yZUJvcmRlcjogITBcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfaW4sIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLmNvbnRhaW5lckNsYXNzTmFtZSA9IFwicG9seWxpbmVBbm5vdGF0aW9uXCI7XG4gICAgICAgICAgdGhpcy5zdmdFbGVtZW50TmFtZSA9IFwic3ZnOnBvbHlsaW5lXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyKCkge1xuICAgICAgICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTGlzdC5hZGQodGhpcy5jb250YWluZXJDbGFzc05hbWUpO1xuICAgICAgICAgIGNvbnN0IHQgPSB0aGlzLmRhdGEsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHdpZHRoOiBlLFxuICAgICAgICAgICAgICBoZWlnaHQ6IG5cbiAgICAgICAgICAgIH0gPSBnZXRSZWN0RGltcyh0LnJlY3QpLFxuICAgICAgICAgICAgaSA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUoZSwgbiwgITApO1xuICAgICAgICAgIGxldCByID0gW107XG4gICAgICAgICAgZm9yIChjb25zdCBlIG9mIHQudmVydGljZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IG4gPSBlLnggLSB0LnJlY3RbMF0sXG4gICAgICAgICAgICAgIGkgPSB0LnJlY3RbM10gLSBlLnk7XG4gICAgICAgICAgICByLnB1c2gobiArIFwiLFwiICsgaSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHIgPSByLmpvaW4oXCIgXCIpO1xuICAgICAgICAgIGNvbnN0IHMgPSBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX2luLCB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCh0aGlzLnN2Z0VsZW1lbnROYW1lKSk7XG4gICAgICAgICAgcy5zZXRBdHRyaWJ1dGUoXCJwb2ludHNcIiwgcik7XG4gICAgICAgICAgcy5zZXRBdHRyaWJ1dGUoXCJzdHJva2Utd2lkdGhcIiwgdC5ib3JkZXJTdHlsZS53aWR0aCB8fCAxKTtcbiAgICAgICAgICBzLnNldEF0dHJpYnV0ZShcInN0cm9rZVwiLCBcInRyYW5zcGFyZW50XCIpO1xuICAgICAgICAgIHMuc2V0QXR0cmlidXRlKFwiZmlsbFwiLCBcInRyYW5zcGFyZW50XCIpO1xuICAgICAgICAgIGkuYXBwZW5kKHMpO1xuICAgICAgICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZChpKTtcbiAgICAgICAgICB0LnBvcHVwUmVmIHx8IHRoaXMuX2NyZWF0ZVBvcHVwKHMsIHQpO1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgICAgICBnZXRFbGVtZW50c1RvVHJpZ2dlclBvcHVwKCkge1xuICAgICAgICAgIHJldHVybiBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2luKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRIaWdobGlnaHRBcmVhKCkge1xuICAgICAgICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJoaWdobGlnaHRBcmVhXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjbGFzcyBQb2x5Z29uQW5ub3RhdGlvbkVsZW1lbnQgZXh0ZW5kcyBQb2x5bGluZUFubm90YXRpb25FbGVtZW50IHtcbiAgICAgICAgY29uc3RydWN0b3IodCkge1xuICAgICAgICAgIHN1cGVyKHQpO1xuICAgICAgICAgIHRoaXMuY29udGFpbmVyQ2xhc3NOYW1lID0gXCJwb2x5Z29uQW5ub3RhdGlvblwiO1xuICAgICAgICAgIHRoaXMuc3ZnRWxlbWVudE5hbWUgPSBcInN2Zzpwb2x5Z29uXCI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNsYXNzIENhcmV0QW5ub3RhdGlvbkVsZW1lbnQgZXh0ZW5kcyBBbm5vdGF0aW9uRWxlbWVudCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHQpIHtcbiAgICAgICAgICB2YXIgX3QkZGF0YSR0aXRsZU9iajcsIF90JGRhdGEkY29udGVudHNPYmo3LCBfdCRkYXRhJHJpY2hUZXh0NztcbiAgICAgICAgICBzdXBlcih0LCB7XG4gICAgICAgICAgICBpc1JlbmRlcmFibGU6ICEhKHQuZGF0YS5wb3B1cFJlZiB8fCAoX3QkZGF0YSR0aXRsZU9iajcgPSB0LmRhdGEudGl0bGVPYmopICE9PSBudWxsICYmIF90JGRhdGEkdGl0bGVPYmo3ICE9PSB2b2lkIDAgJiYgX3QkZGF0YSR0aXRsZU9iajcuc3RyIHx8IChfdCRkYXRhJGNvbnRlbnRzT2JqNyA9IHQuZGF0YS5jb250ZW50c09iaikgIT09IG51bGwgJiYgX3QkZGF0YSRjb250ZW50c09iajcgIT09IHZvaWQgMCAmJiBfdCRkYXRhJGNvbnRlbnRzT2JqNy5zdHIgfHwgKF90JGRhdGEkcmljaFRleHQ3ID0gdC5kYXRhLnJpY2hUZXh0KSAhPT0gbnVsbCAmJiBfdCRkYXRhJHJpY2hUZXh0NyAhPT0gdm9pZCAwICYmIF90JGRhdGEkcmljaFRleHQ3LnN0ciksXG4gICAgICAgICAgICBpZ25vcmVCb3JkZXI6ICEwXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyKCkge1xuICAgICAgICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJjYXJldEFubm90YXRpb25cIik7XG4gICAgICAgICAgdGhpcy5kYXRhLnBvcHVwUmVmIHx8IHRoaXMuX2NyZWF0ZVBvcHVwKCk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgX3JuID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICBjbGFzcyBJbmtBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50IHtcbiAgICAgICAgY29uc3RydWN0b3IodCkge1xuICAgICAgICAgIHZhciBfdCRkYXRhJHRpdGxlT2JqOCwgX3QkZGF0YSRjb250ZW50c09iajgsIF90JGRhdGEkcmljaFRleHQ4O1xuICAgICAgICAgIHN1cGVyKHQsIHtcbiAgICAgICAgICAgIGlzUmVuZGVyYWJsZTogISEodC5kYXRhLnBvcHVwUmVmIHx8IChfdCRkYXRhJHRpdGxlT2JqOCA9IHQuZGF0YS50aXRsZU9iaikgIT09IG51bGwgJiYgX3QkZGF0YSR0aXRsZU9iajggIT09IHZvaWQgMCAmJiBfdCRkYXRhJHRpdGxlT2JqOC5zdHIgfHwgKF90JGRhdGEkY29udGVudHNPYmo4ID0gdC5kYXRhLmNvbnRlbnRzT2JqKSAhPT0gbnVsbCAmJiBfdCRkYXRhJGNvbnRlbnRzT2JqOCAhPT0gdm9pZCAwICYmIF90JGRhdGEkY29udGVudHNPYmo4LnN0ciB8fCAoX3QkZGF0YSRyaWNoVGV4dDggPSB0LmRhdGEucmljaFRleHQpICE9PSBudWxsICYmIF90JGRhdGEkcmljaFRleHQ4ICE9PSB2b2lkIDAgJiYgX3QkZGF0YSRyaWNoVGV4dDguc3RyKSxcbiAgICAgICAgICAgIGlnbm9yZUJvcmRlcjogITBcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfcm4sIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IFtdXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5jb250YWluZXJDbGFzc05hbWUgPSBcImlua0Fubm90YXRpb25cIjtcbiAgICAgICAgICB0aGlzLnN2Z0VsZW1lbnROYW1lID0gXCJzdmc6cG9seWxpbmVcIjtcbiAgICAgICAgICB0aGlzLmFubm90YXRpb25FZGl0b3JUeXBlID0gaS5Bbm5vdGF0aW9uRWRpdG9yVHlwZS5JTks7XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyKCkge1xuICAgICAgICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTGlzdC5hZGQodGhpcy5jb250YWluZXJDbGFzc05hbWUpO1xuICAgICAgICAgIGNvbnN0IHQgPSB0aGlzLmRhdGEsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHdpZHRoOiBlLFxuICAgICAgICAgICAgICBoZWlnaHQ6IG5cbiAgICAgICAgICAgIH0gPSBnZXRSZWN0RGltcyh0LnJlY3QpLFxuICAgICAgICAgICAgaSA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUoZSwgbiwgITApO1xuICAgICAgICAgIGZvciAoY29uc3QgZSBvZiB0Lmlua0xpc3RzKSB7XG4gICAgICAgICAgICBsZXQgbiA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBpIG9mIGUpIHtcbiAgICAgICAgICAgICAgY29uc3QgZSA9IGkueCAtIHQucmVjdFswXSxcbiAgICAgICAgICAgICAgICByID0gdC5yZWN0WzNdIC0gaS55O1xuICAgICAgICAgICAgICBuLnB1c2goXCJcIi5jb25jYXQoZSwgXCIsXCIpLmNvbmNhdChyKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuID0gbi5qb2luKFwiIFwiKTtcbiAgICAgICAgICAgIGNvbnN0IHIgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCh0aGlzLnN2Z0VsZW1lbnROYW1lKTtcbiAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfcm4pLnB1c2gocik7XG4gICAgICAgICAgICByLnNldEF0dHJpYnV0ZShcInBvaW50c1wiLCBuKTtcbiAgICAgICAgICAgIHIuc2V0QXR0cmlidXRlKFwic3Ryb2tlLXdpZHRoXCIsIHQuYm9yZGVyU3R5bGUud2lkdGggfHwgMSk7XG4gICAgICAgICAgICByLnNldEF0dHJpYnV0ZShcInN0cm9rZVwiLCBcInRyYW5zcGFyZW50XCIpO1xuICAgICAgICAgICAgci5zZXRBdHRyaWJ1dGUoXCJmaWxsXCIsIFwidHJhbnNwYXJlbnRcIik7XG4gICAgICAgICAgICB0LnBvcHVwUmVmIHx8IHRoaXMuX2NyZWF0ZVBvcHVwKHIsIHQpO1xuICAgICAgICAgICAgaS5hcHBlbmQocik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZChpKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0RWxlbWVudHNUb1RyaWdnZXJQb3B1cCgpIHtcbiAgICAgICAgICByZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ybik7XG4gICAgICAgIH1cbiAgICAgICAgYWRkSGlnaGxpZ2h0QXJlYSgpIHtcbiAgICAgICAgICB0aGlzLmNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwiaGlnaGxpZ2h0QXJlYVwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZS5JbmtBbm5vdGF0aW9uRWxlbWVudCA9IElua0Fubm90YXRpb25FbGVtZW50O1xuICAgICAgY2xhc3MgSGlnaGxpZ2h0QW5ub3RhdGlvbkVsZW1lbnQgZXh0ZW5kcyBBbm5vdGF0aW9uRWxlbWVudCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHQpIHtcbiAgICAgICAgICB2YXIgX3QkZGF0YSR0aXRsZU9iajksIF90JGRhdGEkY29udGVudHNPYmo5LCBfdCRkYXRhJHJpY2hUZXh0OTtcbiAgICAgICAgICBzdXBlcih0LCB7XG4gICAgICAgICAgICBpc1JlbmRlcmFibGU6ICEhKHQuZGF0YS5wb3B1cFJlZiB8fCAoX3QkZGF0YSR0aXRsZU9iajkgPSB0LmRhdGEudGl0bGVPYmopICE9PSBudWxsICYmIF90JGRhdGEkdGl0bGVPYmo5ICE9PSB2b2lkIDAgJiYgX3QkZGF0YSR0aXRsZU9iajkuc3RyIHx8IChfdCRkYXRhJGNvbnRlbnRzT2JqOSA9IHQuZGF0YS5jb250ZW50c09iaikgIT09IG51bGwgJiYgX3QkZGF0YSRjb250ZW50c09iajkgIT09IHZvaWQgMCAmJiBfdCRkYXRhJGNvbnRlbnRzT2JqOS5zdHIgfHwgKF90JGRhdGEkcmljaFRleHQ5ID0gdC5kYXRhLnJpY2hUZXh0KSAhPT0gbnVsbCAmJiBfdCRkYXRhJHJpY2hUZXh0OSAhPT0gdm9pZCAwICYmIF90JGRhdGEkcmljaFRleHQ5LnN0ciksXG4gICAgICAgICAgICBpZ25vcmVCb3JkZXI6ICEwLFxuICAgICAgICAgICAgY3JlYXRlUXVhZHJpbGF0ZXJhbHM6ICEwXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyKCkge1xuICAgICAgICAgIHRoaXMuZGF0YS5wb3B1cFJlZiB8fCB0aGlzLl9jcmVhdGVQb3B1cCgpO1xuICAgICAgICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJoaWdobGlnaHRBbm5vdGF0aW9uXCIpO1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2xhc3MgVW5kZXJsaW5lQW5ub3RhdGlvbkVsZW1lbnQgZXh0ZW5kcyBBbm5vdGF0aW9uRWxlbWVudCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHQpIHtcbiAgICAgICAgICB2YXIgX3QkZGF0YSR0aXRsZU9iajEwLCBfdCRkYXRhJGNvbnRlbnRzT2JqMTAsIF90JGRhdGEkcmljaFRleHQxMDtcbiAgICAgICAgICBzdXBlcih0LCB7XG4gICAgICAgICAgICBpc1JlbmRlcmFibGU6ICEhKHQuZGF0YS5wb3B1cFJlZiB8fCAoX3QkZGF0YSR0aXRsZU9iajEwID0gdC5kYXRhLnRpdGxlT2JqKSAhPT0gbnVsbCAmJiBfdCRkYXRhJHRpdGxlT2JqMTAgIT09IHZvaWQgMCAmJiBfdCRkYXRhJHRpdGxlT2JqMTAuc3RyIHx8IChfdCRkYXRhJGNvbnRlbnRzT2JqMTAgPSB0LmRhdGEuY29udGVudHNPYmopICE9PSBudWxsICYmIF90JGRhdGEkY29udGVudHNPYmoxMCAhPT0gdm9pZCAwICYmIF90JGRhdGEkY29udGVudHNPYmoxMC5zdHIgfHwgKF90JGRhdGEkcmljaFRleHQxMCA9IHQuZGF0YS5yaWNoVGV4dCkgIT09IG51bGwgJiYgX3QkZGF0YSRyaWNoVGV4dDEwICE9PSB2b2lkIDAgJiYgX3QkZGF0YSRyaWNoVGV4dDEwLnN0ciksXG4gICAgICAgICAgICBpZ25vcmVCb3JkZXI6ICEwLFxuICAgICAgICAgICAgY3JlYXRlUXVhZHJpbGF0ZXJhbHM6ICEwXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyKCkge1xuICAgICAgICAgIHRoaXMuZGF0YS5wb3B1cFJlZiB8fCB0aGlzLl9jcmVhdGVQb3B1cCgpO1xuICAgICAgICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJ1bmRlcmxpbmVBbm5vdGF0aW9uXCIpO1xuICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2xhc3MgU3F1aWdnbHlBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50IHtcbiAgICAgICAgY29uc3RydWN0b3IodCkge1xuICAgICAgICAgIHZhciBfdCRkYXRhJHRpdGxlT2JqMTEsIF90JGRhdGEkY29udGVudHNPYmoxMSwgX3QkZGF0YSRyaWNoVGV4dDExO1xuICAgICAgICAgIHN1cGVyKHQsIHtcbiAgICAgICAgICAgIGlzUmVuZGVyYWJsZTogISEodC5kYXRhLnBvcHVwUmVmIHx8IChfdCRkYXRhJHRpdGxlT2JqMTEgPSB0LmRhdGEudGl0bGVPYmopICE9PSBudWxsICYmIF90JGRhdGEkdGl0bGVPYmoxMSAhPT0gdm9pZCAwICYmIF90JGRhdGEkdGl0bGVPYmoxMS5zdHIgfHwgKF90JGRhdGEkY29udGVudHNPYmoxMSA9IHQuZGF0YS5jb250ZW50c09iaikgIT09IG51bGwgJiYgX3QkZGF0YSRjb250ZW50c09iajExICE9PSB2b2lkIDAgJiYgX3QkZGF0YSRjb250ZW50c09iajExLnN0ciB8fCAoX3QkZGF0YSRyaWNoVGV4dDExID0gdC5kYXRhLnJpY2hUZXh0KSAhPT0gbnVsbCAmJiBfdCRkYXRhJHJpY2hUZXh0MTEgIT09IHZvaWQgMCAmJiBfdCRkYXRhJHJpY2hUZXh0MTEuc3RyKSxcbiAgICAgICAgICAgIGlnbm9yZUJvcmRlcjogITAsXG4gICAgICAgICAgICBjcmVhdGVRdWFkcmlsYXRlcmFsczogITBcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZW5kZXIoKSB7XG4gICAgICAgICAgdGhpcy5kYXRhLnBvcHVwUmVmIHx8IHRoaXMuX2NyZWF0ZVBvcHVwKCk7XG4gICAgICAgICAgdGhpcy5jb250YWluZXIuY2xhc3NMaXN0LmFkZChcInNxdWlnZ2x5QW5ub3RhdGlvblwiKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNsYXNzIFN0cmlrZU91dEFubm90YXRpb25FbGVtZW50IGV4dGVuZHMgQW5ub3RhdGlvbkVsZW1lbnQge1xuICAgICAgICBjb25zdHJ1Y3Rvcih0KSB7XG4gICAgICAgICAgdmFyIF90JGRhdGEkdGl0bGVPYmoxMiwgX3QkZGF0YSRjb250ZW50c09iajEyLCBfdCRkYXRhJHJpY2hUZXh0MTI7XG4gICAgICAgICAgc3VwZXIodCwge1xuICAgICAgICAgICAgaXNSZW5kZXJhYmxlOiAhISh0LmRhdGEucG9wdXBSZWYgfHwgKF90JGRhdGEkdGl0bGVPYmoxMiA9IHQuZGF0YS50aXRsZU9iaikgIT09IG51bGwgJiYgX3QkZGF0YSR0aXRsZU9iajEyICE9PSB2b2lkIDAgJiYgX3QkZGF0YSR0aXRsZU9iajEyLnN0ciB8fCAoX3QkZGF0YSRjb250ZW50c09iajEyID0gdC5kYXRhLmNvbnRlbnRzT2JqKSAhPT0gbnVsbCAmJiBfdCRkYXRhJGNvbnRlbnRzT2JqMTIgIT09IHZvaWQgMCAmJiBfdCRkYXRhJGNvbnRlbnRzT2JqMTIuc3RyIHx8IChfdCRkYXRhJHJpY2hUZXh0MTIgPSB0LmRhdGEucmljaFRleHQpICE9PSBudWxsICYmIF90JGRhdGEkcmljaFRleHQxMiAhPT0gdm9pZCAwICYmIF90JGRhdGEkcmljaFRleHQxMi5zdHIpLFxuICAgICAgICAgICAgaWdub3JlQm9yZGVyOiAhMCxcbiAgICAgICAgICAgIGNyZWF0ZVF1YWRyaWxhdGVyYWxzOiAhMFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJlbmRlcigpIHtcbiAgICAgICAgICB0aGlzLmRhdGEucG9wdXBSZWYgfHwgdGhpcy5fY3JlYXRlUG9wdXAoKTtcbiAgICAgICAgICB0aGlzLmNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwic3RyaWtlb3V0QW5ub3RhdGlvblwiKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNsYXNzIFN0YW1wQW5ub3RhdGlvbkVsZW1lbnQgZXh0ZW5kcyBBbm5vdGF0aW9uRWxlbWVudCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHQpIHtcbiAgICAgICAgICB2YXIgX3QkZGF0YSR0aXRsZU9iajEzLCBfdCRkYXRhJGNvbnRlbnRzT2JqMTMsIF90JGRhdGEkcmljaFRleHQxMztcbiAgICAgICAgICBzdXBlcih0LCB7XG4gICAgICAgICAgICBpc1JlbmRlcmFibGU6ICEhKHQuZGF0YS5wb3B1cFJlZiB8fCAoX3QkZGF0YSR0aXRsZU9iajEzID0gdC5kYXRhLnRpdGxlT2JqKSAhPT0gbnVsbCAmJiBfdCRkYXRhJHRpdGxlT2JqMTMgIT09IHZvaWQgMCAmJiBfdCRkYXRhJHRpdGxlT2JqMTMuc3RyIHx8IChfdCRkYXRhJGNvbnRlbnRzT2JqMTMgPSB0LmRhdGEuY29udGVudHNPYmopICE9PSBudWxsICYmIF90JGRhdGEkY29udGVudHNPYmoxMyAhPT0gdm9pZCAwICYmIF90JGRhdGEkY29udGVudHNPYmoxMy5zdHIgfHwgKF90JGRhdGEkcmljaFRleHQxMyA9IHQuZGF0YS5yaWNoVGV4dCkgIT09IG51bGwgJiYgX3QkZGF0YSRyaWNoVGV4dDEzICE9PSB2b2lkIDAgJiYgX3QkZGF0YSRyaWNoVGV4dDEzLnN0ciksXG4gICAgICAgICAgICBpZ25vcmVCb3JkZXI6ICEwXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyKCkge1xuICAgICAgICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJzdGFtcEFubm90YXRpb25cIik7XG4gICAgICAgICAgdGhpcy5kYXRhLnBvcHVwUmVmIHx8IHRoaXMuX2NyZWF0ZVBvcHVwKCk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlLlN0YW1wQW5ub3RhdGlvbkVsZW1lbnQgPSBTdGFtcEFubm90YXRpb25FbGVtZW50O1xuICAgICAgdmFyIF9zbiA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpO1xuICAgICAgY2xhc3MgRmlsZUF0dGFjaG1lbnRBbm5vdGF0aW9uRWxlbWVudCBleHRlbmRzIEFubm90YXRpb25FbGVtZW50IHtcbiAgICAgICAgY29uc3RydWN0b3IodCkge1xuICAgICAgICAgIHZhciBfdGhpcyRsaW5rU2VydmljZSRldmUxMTtcbiAgICAgICAgICBzdXBlcih0LCB7XG4gICAgICAgICAgICBpc1JlbmRlcmFibGU6ICEwXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX3NuLCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBudWxsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgZmlsZW5hbWU6IGUsXG4gICAgICAgICAgICBjb250ZW50OiBuXG4gICAgICAgICAgfSA9IHRoaXMuZGF0YS5maWxlO1xuICAgICAgICAgIHRoaXMuZmlsZW5hbWUgPSAoMCwgci5nZXRGaWxlbmFtZUZyb21VcmwpKGUsICEwKTtcbiAgICAgICAgICB0aGlzLmNvbnRlbnQgPSBuO1xuICAgICAgICAgIChfdGhpcyRsaW5rU2VydmljZSRldmUxMSA9IHRoaXMubGlua1NlcnZpY2UuZXZlbnRCdXMpID09PSBudWxsIHx8IF90aGlzJGxpbmtTZXJ2aWNlJGV2ZTExID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRsaW5rU2VydmljZSRldmUxMS5kaXNwYXRjaChcImZpbGVhdHRhY2htZW50YW5ub3RhdGlvblwiLCB7XG4gICAgICAgICAgICBzb3VyY2U6IHRoaXMsXG4gICAgICAgICAgICBmaWxlbmFtZTogZSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IG5cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZW5kZXIoKSB7XG4gICAgICAgICAgdmFyIF90aGlzJGRhdGEkdGl0bGVPYmosIF90aGlzJGRhdGEkY29udGVudHNPYjtcbiAgICAgICAgICB0aGlzLmNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwiZmlsZUF0dGFjaG1lbnRBbm5vdGF0aW9uXCIpO1xuICAgICAgICAgIGxldCB0O1xuICAgICAgICAgIGlmICh0aGlzLmRhdGEuaGFzQXBwZWFyYW5jZSkgdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7ZWxzZSB7XG4gICAgICAgICAgICB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImltZ1wiKTtcbiAgICAgICAgICAgIHQuc3JjID0gXCJcIi5jb25jYXQodGhpcy5pbWFnZVJlc291cmNlc1BhdGgsIFwiYW5ub3RhdGlvbi1cIikuY29uY2F0KC9wYXBlcmNsaXAvaS50ZXN0KHRoaXMuZGF0YS5uYW1lKSA/IFwicGFwZXJjbGlwXCIgOiBcInB1c2hwaW5cIiwgXCIuc3ZnXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0LmNsYXNzTGlzdC5hZGQoXCJwb3B1cFRyaWdnZXJBcmVhXCIpO1xuICAgICAgICAgIHQuYWRkRXZlbnRMaXN0ZW5lcihcImRibGNsaWNrXCIsIHRoaXMuX2Rvd25sb2FkLmJpbmQodGhpcykpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfc24sIHQpO1xuICAgICAgICAgICF0aGlzLmRhdGEucG9wdXBSZWYgJiYgKCgoX3RoaXMkZGF0YSR0aXRsZU9iaiA9IHRoaXMuZGF0YS50aXRsZU9iaikgPT09IG51bGwgfHwgX3RoaXMkZGF0YSR0aXRsZU9iaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkZGF0YSR0aXRsZU9iai5zdHIpIHx8ICgoX3RoaXMkZGF0YSRjb250ZW50c09iID0gdGhpcy5kYXRhLmNvbnRlbnRzT2JqKSA9PT0gbnVsbCB8fCBfdGhpcyRkYXRhJGNvbnRlbnRzT2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJGRhdGEkY29udGVudHNPYi5zdHIpIHx8IHRoaXMuZGF0YS5yaWNoVGV4dCkgJiYgdGhpcy5fY3JlYXRlUG9wdXAoKTtcbiAgICAgICAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmQodCk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICAgICAgICB9XG4gICAgICAgIGdldEVsZW1lbnRzVG9UcmlnZ2VyUG9wdXAoKSB7XG4gICAgICAgICAgcmV0dXJuIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfc24pO1xuICAgICAgICB9XG4gICAgICAgIGFkZEhpZ2hsaWdodEFyZWEoKSB7XG4gICAgICAgICAgdGhpcy5jb250YWluZXIuY2xhc3NMaXN0LmFkZChcImhpZ2hsaWdodEFyZWFcIik7XG4gICAgICAgIH1cbiAgICAgICAgX2Rvd25sb2FkKCkge1xuICAgICAgICAgIHZhciBfdGhpcyRkb3dubG9hZE1hbmFnZXIyO1xuICAgICAgICAgIChfdGhpcyRkb3dubG9hZE1hbmFnZXIyID0gdGhpcy5kb3dubG9hZE1hbmFnZXIpID09PSBudWxsIHx8IF90aGlzJGRvd25sb2FkTWFuYWdlcjIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJGRvd25sb2FkTWFuYWdlcjIub3Blbk9yRG93bmxvYWREYXRhKHRoaXMuY29udGFpbmVyLCB0aGlzLmNvbnRlbnQsIHRoaXMuZmlsZW5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlLkFubm90YXRpb25MYXllciA9IChfcmUyID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCksIF9hbiA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha01hcCgpLCBfb24gPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKSwgX2xuID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCksIF9jbiA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpLCBjbGFzcyBBbm5vdGF0aW9uTGF5ZXIge1xuICAgICAgICBjb25zdHJ1Y3RvcihfdDE2KSB7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9jbik7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9sbik7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX3JlMiwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9hbiwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9vbiwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogbmV3IE1hcCgpXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbGV0IHtcbiAgICAgICAgICAgIGRpdjogX2UxNCxcbiAgICAgICAgICAgIGFjY2Vzc2liaWxpdHlNYW5hZ2VyOiBfbjgsXG4gICAgICAgICAgICBhbm5vdGF0aW9uQ2FudmFzTWFwOiBfaTUsXG4gICAgICAgICAgICBsMTBuOiBfcjUsXG4gICAgICAgICAgICBwYWdlOiBzLFxuICAgICAgICAgICAgdmlld3BvcnQ6IGFcbiAgICAgICAgICB9ID0gX3QxNjtcbiAgICAgICAgICB0aGlzLmRpdiA9IF9lMTQ7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9yZTIsIF9uOCk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9hbiwgX2k1KTtcbiAgICAgICAgICB0aGlzLmwxMG4gPSBfcjU7XG4gICAgICAgICAgdGhpcy5wYWdlID0gcztcbiAgICAgICAgICB0aGlzLnZpZXdwb3J0ID0gYTtcbiAgICAgICAgICB0aGlzLnpJbmRleCA9IDA7XG4gICAgICAgICAgdGhpcy5sMTBuIHx8ICh0aGlzLmwxMG4gPSBvLk51bGxMMTBuKTtcbiAgICAgICAgfVxuICAgICAgICBhc3luYyByZW5kZXIodCkge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgICAgYW5ub3RhdGlvbnM6IGVcbiAgICAgICAgICAgIH0gPSB0LFxuICAgICAgICAgICAgbiA9IHRoaXMuZGl2O1xuICAgICAgICAgICgwLCByLnNldExheWVyRGltZW5zaW9ucykobiwgdGhpcy52aWV3cG9ydCk7XG4gICAgICAgICAgY29uc3QgYSA9IG5ldyBNYXAoKSxcbiAgICAgICAgICAgIG8gPSB7XG4gICAgICAgICAgICAgIGRhdGE6IG51bGwsXG4gICAgICAgICAgICAgIGxheWVyOiBuLFxuICAgICAgICAgICAgICBsaW5rU2VydmljZTogdC5saW5rU2VydmljZSxcbiAgICAgICAgICAgICAgZG93bmxvYWRNYW5hZ2VyOiB0LmRvd25sb2FkTWFuYWdlcixcbiAgICAgICAgICAgICAgaW1hZ2VSZXNvdXJjZXNQYXRoOiB0LmltYWdlUmVzb3VyY2VzUGF0aCB8fCBcIlwiLFxuICAgICAgICAgICAgICByZW5kZXJGb3JtczogITEgIT09IHQucmVuZGVyRm9ybXMsXG4gICAgICAgICAgICAgIHN2Z0ZhY3Rvcnk6IG5ldyByLkRPTVNWR0ZhY3RvcnkoKSxcbiAgICAgICAgICAgICAgYW5ub3RhdGlvblN0b3JhZ2U6IHQuYW5ub3RhdGlvblN0b3JhZ2UgfHwgbmV3IHMuQW5ub3RhdGlvblN0b3JhZ2UoKSxcbiAgICAgICAgICAgICAgZW5hYmxlU2NyaXB0aW5nOiAhMCA9PT0gdC5lbmFibGVTY3JpcHRpbmcsXG4gICAgICAgICAgICAgIGhhc0pTQWN0aW9uczogdC5oYXNKU0FjdGlvbnMsXG4gICAgICAgICAgICAgIGZpZWxkT2JqZWN0czogdC5maWVsZE9iamVjdHMsXG4gICAgICAgICAgICAgIHBhcmVudDogdGhpcyxcbiAgICAgICAgICAgICAgZWxlbWVudHM6IG51bGxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgZm9yIChjb25zdCB0IG9mIGUpIHtcbiAgICAgICAgICAgIGlmICh0Lm5vSFRNTCkgY29udGludWU7XG4gICAgICAgICAgICBjb25zdCBlID0gdC5hbm5vdGF0aW9uVHlwZSA9PT0gaS5Bbm5vdGF0aW9uVHlwZS5QT1BVUDtcbiAgICAgICAgICAgIGlmIChlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGUgPSBhLmdldCh0LmlkKTtcbiAgICAgICAgICAgICAgaWYgKCFlKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgby5lbGVtZW50cyA9IGU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IGUsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBuXG4gICAgICAgICAgICAgIH0gPSBnZXRSZWN0RGltcyh0LnJlY3QpO1xuICAgICAgICAgICAgICBpZiAoZSA8PSAwIHx8IG4gPD0gMCkgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvLmRhdGEgPSB0O1xuICAgICAgICAgICAgY29uc3QgbiA9IEFubm90YXRpb25FbGVtZW50RmFjdG9yeS5jcmVhdGUobyk7XG4gICAgICAgICAgICBpZiAoIW4uaXNSZW5kZXJhYmxlKSBjb250aW51ZTtcbiAgICAgICAgICAgIGlmICghZSAmJiB0LnBvcHVwUmVmKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGUgPSBhLmdldCh0LnBvcHVwUmVmKTtcbiAgICAgICAgICAgICAgZSA/IGUucHVzaChuKSA6IGEuc2V0KHQucG9wdXBSZWYsIFtuXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuLmFubm90YXRpb25FZGl0b3JUeXBlID4gMCAmJiBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX29uKS5zZXQobi5kYXRhLmlkLCBuKTtcbiAgICAgICAgICAgIGNvbnN0IHIgPSBuLnJlbmRlcigpO1xuICAgICAgICAgICAgdC5oaWRkZW4gJiYgKHIuc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCIpO1xuICAgICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfbG4sIF9sbjIpLmNhbGwodGhpcywgciwgdC5pZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX2NuLCBfY24yKS5jYWxsKHRoaXMpO1xuICAgICAgICAgIGF3YWl0IHRoaXMubDEwbi50cmFuc2xhdGUobik7XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlKHQpIHtcbiAgICAgICAgICBsZXQge1xuICAgICAgICAgICAgdmlld3BvcnQ6IGVcbiAgICAgICAgICB9ID0gdDtcbiAgICAgICAgICBjb25zdCBuID0gdGhpcy5kaXY7XG4gICAgICAgICAgdGhpcy52aWV3cG9ydCA9IGU7XG4gICAgICAgICAgKDAsIHIuc2V0TGF5ZXJEaW1lbnNpb25zKShuLCB7XG4gICAgICAgICAgICByb3RhdGlvbjogZS5yb3RhdGlvblxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX2NuLCBfY24yKS5jYWxsKHRoaXMpO1xuICAgICAgICAgIG4uaGlkZGVuID0gITE7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0RWRpdGFibGVBbm5vdGF0aW9ucygpIHtcbiAgICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX29uKS52YWx1ZXMoKSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0RWRpdGFibGVBbm5vdGF0aW9uKHQpIHtcbiAgICAgICAgICByZXR1cm4gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9vbikuZ2V0KHQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGZ1bmN0aW9uIF9sbjIodCwgZSkge1xuICAgICAgICB2YXIgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0MTQ7XG4gICAgICAgIGNvbnN0IG4gPSB0LmZpcnN0Q2hpbGQgfHwgdDtcbiAgICAgICAgbi5pZCA9IFwiXCIuY29uY2F0KHIuQW5ub3RhdGlvblByZWZpeCkuY29uY2F0KGUpO1xuICAgICAgICB0aGlzLmRpdi5hcHBlbmQodCk7XG4gICAgICAgIChfY2xhc3NQcml2YXRlRmllbGRHZXQxNCA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfcmUyKSkgPT09IG51bGwgfHwgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0MTQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jbGFzc1ByaXZhdGVGaWVsZEdldDE0Lm1vdmVFbGVtZW50SW5ET00odGhpcy5kaXYsIHQsIG4sICExKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF9jbjIoKSB7XG4gICAgICAgIGlmICghX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9hbikpIHJldHVybjtcbiAgICAgICAgY29uc3QgdCA9IHRoaXMuZGl2O1xuICAgICAgICBmb3IgKGNvbnN0IFtlLCBuXSBvZiBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2FuKSkge1xuICAgICAgICAgIGNvbnN0IGkgPSB0LnF1ZXJ5U2VsZWN0b3IoXCJbZGF0YS1hbm5vdGF0aW9uLWlkPVxcXCJcIi5jb25jYXQoZSwgXCJcXFwiXVwiKSk7XG4gICAgICAgICAgaWYgKCFpKSBjb250aW51ZTtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBmaXJzdENoaWxkOiByXG4gICAgICAgICAgfSA9IGk7XG4gICAgICAgICAgciA/IFwiQ0FOVkFTXCIgPT09IHIubm9kZU5hbWUgPyByLnJlcGxhY2VXaXRoKG4pIDogci5iZWZvcmUobikgOiBpLmFwcGVuZChuKTtcbiAgICAgICAgfVxuICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2FuKS5jbGVhcigpO1xuICAgICAgfVxuICAgIH0sICh0LCBlKSA9PiB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgIHZhbHVlOiAhMFxuICAgICAgfSk7XG4gICAgICBlLkNvbG9yQ29udmVydGVycyA9IHZvaWQgMDtcbiAgICAgIGZ1bmN0aW9uIG1ha2VDb2xvckNvbXAodCkge1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcigyNTUgKiBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCB0KSkpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCBcIjBcIik7XG4gICAgICB9XG4gICAgICBlLkNvbG9yQ29udmVydGVycyA9IGNsYXNzIENvbG9yQ29udmVydGVycyB7XG4gICAgICAgIHN0YXRpYyBDTVlLX0codCkge1xuICAgICAgICAgIGxldCBbZSwgbiwgaSwgcl0gPSB0O1xuICAgICAgICAgIHJldHVybiBbXCJHXCIsIDEgLSBNYXRoLm1pbigxLCAuMyAqIGUgKyAuNTkgKiBpICsgLjExICogbiArIHIpXTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgR19DTVlLKHQpIHtcbiAgICAgICAgICBsZXQgW2VdID0gdDtcbiAgICAgICAgICByZXR1cm4gW1wiQ01ZS1wiLCAwLCAwLCAwLCAxIC0gZV07XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIEdfUkdCKHQpIHtcbiAgICAgICAgICBsZXQgW2VdID0gdDtcbiAgICAgICAgICByZXR1cm4gW1wiUkdCXCIsIGUsIGUsIGVdO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBHX0hUTUwodCkge1xuICAgICAgICAgIGxldCBbZV0gPSB0O1xuICAgICAgICAgIGNvbnN0IG4gPSBtYWtlQ29sb3JDb21wKGUpO1xuICAgICAgICAgIHJldHVybiBcIiNcIi5jb25jYXQobikuY29uY2F0KG4pLmNvbmNhdChuKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgUkdCX0codCkge1xuICAgICAgICAgIGxldCBbZSwgbiwgaV0gPSB0O1xuICAgICAgICAgIHJldHVybiBbXCJHXCIsIC4zICogZSArIC41OSAqIG4gKyAuMTEgKiBpXTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgUkdCX0hUTUwodCkge1xuICAgICAgICAgIGxldCBbZSwgbiwgaV0gPSB0O1xuICAgICAgICAgIHJldHVybiBcIiNcIi5jb25jYXQobWFrZUNvbG9yQ29tcChlKSkuY29uY2F0KG1ha2VDb2xvckNvbXAobikpLmNvbmNhdChtYWtlQ29sb3JDb21wKGkpKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgVF9IVE1MKCkge1xuICAgICAgICAgIHJldHVybiBcIiMwMDAwMDAwMFwiO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBDTVlLX1JHQih0KSB7XG4gICAgICAgICAgbGV0IFtlLCBuLCBpLCByXSA9IHQ7XG4gICAgICAgICAgcmV0dXJuIFtcIlJHQlwiLCAxIC0gTWF0aC5taW4oMSwgZSArIHIpLCAxIC0gTWF0aC5taW4oMSwgaSArIHIpLCAxIC0gTWF0aC5taW4oMSwgbiArIHIpXTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgQ01ZS19IVE1MKHQpIHtcbiAgICAgICAgICBjb25zdCBlID0gdGhpcy5DTVlLX1JHQih0KS5zbGljZSgxKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5SR0JfSFRNTChlKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgUkdCX0NNWUsodCkge1xuICAgICAgICAgIGxldCBbZSwgbiwgaV0gPSB0O1xuICAgICAgICAgIGNvbnN0IHIgPSAxIC0gZSxcbiAgICAgICAgICAgIHMgPSAxIC0gbixcbiAgICAgICAgICAgIGEgPSAxIC0gaTtcbiAgICAgICAgICByZXR1cm4gW1wiQ01ZS1wiLCByLCBzLCBhLCBNYXRoLm1pbihyLCBzLCBhKV07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSwgKHQsIGUpID0+IHtcbiAgICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgdmFsdWU6ICEwXG4gICAgICB9KTtcbiAgICAgIGUuTnVsbEwxMG4gPSB2b2lkIDA7XG4gICAgICBlLmdldEwxMG5GYWxsYmFjayA9IGdldEwxMG5GYWxsYmFjaztcbiAgICAgIGNvbnN0IG4gPSB7XG4gICAgICAgIG9mX3BhZ2VzOiBcIm9mIHt7cGFnZXNDb3VudH19XCIsXG4gICAgICAgIHBhZ2Vfb2ZfcGFnZXM6IFwiKHt7cGFnZU51bWJlcn19IG9mIHt7cGFnZXNDb3VudH19KVwiLFxuICAgICAgICBkb2N1bWVudF9wcm9wZXJ0aWVzX2tiOiBcInt7c2l6ZV9rYn19IEtCICh7e3NpemVfYn19IGJ5dGVzKVwiLFxuICAgICAgICBkb2N1bWVudF9wcm9wZXJ0aWVzX21iOiBcInt7c2l6ZV9tYn19IE1CICh7e3NpemVfYn19IGJ5dGVzKVwiLFxuICAgICAgICBkb2N1bWVudF9wcm9wZXJ0aWVzX2RhdGVfc3RyaW5nOiBcInt7ZGF0ZX19LCB7e3RpbWV9fVwiLFxuICAgICAgICBkb2N1bWVudF9wcm9wZXJ0aWVzX3BhZ2Vfc2l6ZV91bml0X2luY2hlczogXCJpblwiLFxuICAgICAgICBkb2N1bWVudF9wcm9wZXJ0aWVzX3BhZ2Vfc2l6ZV91bml0X21pbGxpbWV0ZXJzOiBcIm1tXCIsXG4gICAgICAgIGRvY3VtZW50X3Byb3BlcnRpZXNfcGFnZV9zaXplX29yaWVudGF0aW9uX3BvcnRyYWl0OiBcInBvcnRyYWl0XCIsXG4gICAgICAgIGRvY3VtZW50X3Byb3BlcnRpZXNfcGFnZV9zaXplX29yaWVudGF0aW9uX2xhbmRzY2FwZTogXCJsYW5kc2NhcGVcIixcbiAgICAgICAgZG9jdW1lbnRfcHJvcGVydGllc19wYWdlX3NpemVfbmFtZV9hMzogXCJBM1wiLFxuICAgICAgICBkb2N1bWVudF9wcm9wZXJ0aWVzX3BhZ2Vfc2l6ZV9uYW1lX2E0OiBcIkE0XCIsXG4gICAgICAgIGRvY3VtZW50X3Byb3BlcnRpZXNfcGFnZV9zaXplX25hbWVfbGV0dGVyOiBcIkxldHRlclwiLFxuICAgICAgICBkb2N1bWVudF9wcm9wZXJ0aWVzX3BhZ2Vfc2l6ZV9uYW1lX2xlZ2FsOiBcIkxlZ2FsXCIsXG4gICAgICAgIGRvY3VtZW50X3Byb3BlcnRpZXNfcGFnZV9zaXplX2RpbWVuc2lvbl9zdHJpbmc6IFwie3t3aWR0aH19IMOXIHt7aGVpZ2h0fX0ge3t1bml0fX0gKHt7b3JpZW50YXRpb259fSlcIixcbiAgICAgICAgZG9jdW1lbnRfcHJvcGVydGllc19wYWdlX3NpemVfZGltZW5zaW9uX25hbWVfc3RyaW5nOiBcInt7d2lkdGh9fSDDlyB7e2hlaWdodH19IHt7dW5pdH19ICh7e25hbWV9fSwge3tvcmllbnRhdGlvbn19KVwiLFxuICAgICAgICBkb2N1bWVudF9wcm9wZXJ0aWVzX2xpbmVhcml6ZWRfeWVzOiBcIlllc1wiLFxuICAgICAgICBkb2N1bWVudF9wcm9wZXJ0aWVzX2xpbmVhcml6ZWRfbm86IFwiTm9cIixcbiAgICAgICAgYWRkaXRpb25hbF9sYXllcnM6IFwiQWRkaXRpb25hbCBMYXllcnNcIixcbiAgICAgICAgcGFnZV9sYW5kbWFyazogXCJQYWdlIHt7cGFnZX19XCIsXG4gICAgICAgIHRodW1iX3BhZ2VfdGl0bGU6IFwiUGFnZSB7e3BhZ2V9fVwiLFxuICAgICAgICB0aHVtYl9wYWdlX2NhbnZhczogXCJUaHVtYm5haWwgb2YgUGFnZSB7e3BhZ2V9fVwiLFxuICAgICAgICBmaW5kX3JlYWNoZWRfdG9wOiBcIlJlYWNoZWQgdG9wIG9mIGRvY3VtZW50LCBjb250aW51ZWQgZnJvbSBib3R0b21cIixcbiAgICAgICAgZmluZF9yZWFjaGVkX2JvdHRvbTogXCJSZWFjaGVkIGVuZCBvZiBkb2N1bWVudCwgY29udGludWVkIGZyb20gdG9wXCIsXG4gICAgICAgIFwiZmluZF9tYXRjaF9jb3VudFtvbmVdXCI6IFwie3tjdXJyZW50fX0gb2Yge3t0b3RhbH19IG1hdGNoXCIsXG4gICAgICAgIFwiZmluZF9tYXRjaF9jb3VudFtvdGhlcl1cIjogXCJ7e2N1cnJlbnR9fSBvZiB7e3RvdGFsfX0gbWF0Y2hlc1wiLFxuICAgICAgICBcImZpbmRfbWF0Y2hfY291bnRfbGltaXRbb25lXVwiOiBcIk1vcmUgdGhhbiB7e2xpbWl0fX0gbWF0Y2hcIixcbiAgICAgICAgXCJmaW5kX21hdGNoX2NvdW50X2xpbWl0W290aGVyXVwiOiBcIk1vcmUgdGhhbiB7e2xpbWl0fX0gbWF0Y2hlc1wiLFxuICAgICAgICBmaW5kX25vdF9mb3VuZDogXCJQaHJhc2Ugbm90IGZvdW5kXCIsXG4gICAgICAgIHBhZ2Vfc2NhbGVfd2lkdGg6IFwiUGFnZSBXaWR0aFwiLFxuICAgICAgICBwYWdlX3NjYWxlX2ZpdDogXCJQYWdlIEZpdFwiLFxuICAgICAgICBwYWdlX3NjYWxlX2F1dG86IFwiQXV0b21hdGljIFpvb21cIixcbiAgICAgICAgcGFnZV9zY2FsZV9hY3R1YWw6IFwiQWN0dWFsIFNpemVcIixcbiAgICAgICAgcGFnZV9zY2FsZV9wZXJjZW50OiBcInt7c2NhbGV9fSVcIixcbiAgICAgICAgbG9hZGluZ19lcnJvcjogXCJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBsb2FkaW5nIHRoZSBQREYuXCIsXG4gICAgICAgIGludmFsaWRfZmlsZV9lcnJvcjogXCJJbnZhbGlkIG9yIGNvcnJ1cHRlZCBQREYgZmlsZS5cIixcbiAgICAgICAgbWlzc2luZ19maWxlX2Vycm9yOiBcIk1pc3NpbmcgUERGIGZpbGUuXCIsXG4gICAgICAgIHVuZXhwZWN0ZWRfcmVzcG9uc2VfZXJyb3I6IFwiVW5leHBlY3RlZCBzZXJ2ZXIgcmVzcG9uc2UuXCIsXG4gICAgICAgIHJlbmRlcmluZ19lcnJvcjogXCJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZW5kZXJpbmcgdGhlIHBhZ2UuXCIsXG4gICAgICAgIGFubm90YXRpb25fZGF0ZV9zdHJpbmc6IFwie3tkYXRlfX0sIHt7dGltZX19XCIsXG4gICAgICAgIHByaW50aW5nX25vdF9zdXBwb3J0ZWQ6IFwiV2FybmluZzogUHJpbnRpbmcgaXMgbm90IGZ1bGx5IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXIuXCIsXG4gICAgICAgIHByaW50aW5nX25vdF9yZWFkeTogXCJXYXJuaW5nOiBUaGUgUERGIGlzIG5vdCBmdWxseSBsb2FkZWQgZm9yIHByaW50aW5nLlwiLFxuICAgICAgICB3ZWJfZm9udHNfZGlzYWJsZWQ6IFwiV2ViIGZvbnRzIGFyZSBkaXNhYmxlZDogdW5hYmxlIHRvIHVzZSBlbWJlZGRlZCBQREYgZm9udHMuXCIsXG4gICAgICAgIGZyZWVfdGV4dDJfZGVmYXVsdF9jb250ZW50OiBcIlN0YXJ0IHR5cGluZ+KAplwiLFxuICAgICAgICBlZGl0b3JfZnJlZV90ZXh0Ml9hcmlhX2xhYmVsOiBcIlRleHQgRWRpdG9yXCIsXG4gICAgICAgIGVkaXRvcl9pbmsyX2FyaWFfbGFiZWw6IFwiRHJhdyBFZGl0b3JcIixcbiAgICAgICAgZWRpdG9yX2lua19jYW52YXNfYXJpYV9sYWJlbDogXCJVc2VyLWNyZWF0ZWQgaW1hZ2VcIixcbiAgICAgICAgcHJpbnRfcHJvZ3Jlc3NfcGVyY2VudDogXCJ7e3Byb2dyZXNzfX0lXCJcbiAgICAgIH07XG4gICAgICBmdW5jdGlvbiBnZXRMMTBuRmFsbGJhY2sodCwgZSkge1xuICAgICAgICBzd2l0Y2ggKHQpIHtcbiAgICAgICAgICBjYXNlIFwiZmluZF9tYXRjaF9jb3VudFwiOlxuICAgICAgICAgICAgdCA9IFwiZmluZF9tYXRjaF9jb3VudFtcIi5jb25jYXQoMSA9PT0gZS50b3RhbCA/IFwib25lXCIgOiBcIm90aGVyXCIsIFwiXVwiKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgXCJmaW5kX21hdGNoX2NvdW50X2xpbWl0XCI6XG4gICAgICAgICAgICB0ID0gXCJmaW5kX21hdGNoX2NvdW50X2xpbWl0W1wiLmNvbmNhdCgxID09PSBlLmxpbWl0ID8gXCJvbmVcIiA6IFwib3RoZXJcIiwgXCJdXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuW3RdIHx8IFwiXCI7XG4gICAgICB9XG4gICAgICBjb25zdCBpID0ge1xuICAgICAgICBnZXRMYW5ndWFnZTogYXN5bmMgKCkgPT4gXCJlbi11c1wiLFxuICAgICAgICBnZXREaXJlY3Rpb246IGFzeW5jICgpID0+IFwibHRyXCIsXG4gICAgICAgIGFzeW5jIGdldCh0KSB7XG4gICAgICAgICAgbGV0IGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1sxXSA/IGFyZ3VtZW50c1sxXSA6IG51bGw7XG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGZvcm1hdEwxMG5WYWx1ZSh0LCBlKSB7XG4gICAgICAgICAgICByZXR1cm4gZSA/IHQucmVwbGFjZUFsbCgvXFx7XFx7XFxzKihcXHcrKVxccypcXH1cXH0vZywgKHQsIG4pID0+IG4gaW4gZSA/IGVbbl0gOiBcInt7XCIgKyBuICsgXCJ9fVwiKSA6IHQ7XG4gICAgICAgICAgfShhcmd1bWVudHMubGVuZ3RoID4gMiAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1syXSA/IGFyZ3VtZW50c1syXSA6IGdldEwxMG5GYWxsYmFjayh0LCBlKSwgZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGFzeW5jIHRyYW5zbGF0ZSh0KSB7fVxuICAgICAgfTtcbiAgICAgIGUuTnVsbEwxMG4gPSBpO1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgIHZhbHVlOiAhMFxuICAgICAgfSk7XG4gICAgICBlLlhmYUxheWVyID0gdm9pZCAwO1xuICAgICAgbig4OSk7XG4gICAgICB2YXIgaSA9IG4oMTkzKTtcbiAgICAgIGUuWGZhTGF5ZXIgPSBjbGFzcyBYZmFMYXllciB7XG4gICAgICAgIHN0YXRpYyBzZXR1cFN0b3JhZ2UodCwgZSwgbiwgaSwgcikge1xuICAgICAgICAgIGNvbnN0IHMgPSBpLmdldFZhbHVlKGUsIHtcbiAgICAgICAgICAgIHZhbHVlOiBudWxsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgc3dpdGNoIChuLm5hbWUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJ0ZXh0YXJlYVwiOlxuICAgICAgICAgICAgICBudWxsICE9PSBzLnZhbHVlICYmICh0LnRleHRDb250ZW50ID0gcy52YWx1ZSk7XG4gICAgICAgICAgICAgIGlmIChcInByaW50XCIgPT09IHIpIGJyZWFrO1xuICAgICAgICAgICAgICB0LmFkZEV2ZW50TGlzdGVuZXIoXCJpbnB1dFwiLCB0ID0+IHtcbiAgICAgICAgICAgICAgICBpLnNldFZhbHVlKGUsIHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiB0LnRhcmdldC52YWx1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiaW5wdXRcIjpcbiAgICAgICAgICAgICAgaWYgKFwicmFkaW9cIiA9PT0gbi5hdHRyaWJ1dGVzLnR5cGUgfHwgXCJjaGVja2JveFwiID09PSBuLmF0dHJpYnV0ZXMudHlwZSkge1xuICAgICAgICAgICAgICAgIHMudmFsdWUgPT09IG4uYXR0cmlidXRlcy54ZmFPbiA/IHQuc2V0QXR0cmlidXRlKFwiY2hlY2tlZFwiLCAhMCkgOiBzLnZhbHVlID09PSBuLmF0dHJpYnV0ZXMueGZhT2ZmICYmIHQucmVtb3ZlQXR0cmlidXRlKFwiY2hlY2tlZFwiKTtcbiAgICAgICAgICAgICAgICBpZiAoXCJwcmludFwiID09PSByKSBicmVhaztcbiAgICAgICAgICAgICAgICB0LmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgdCA9PiB7XG4gICAgICAgICAgICAgICAgICBpLnNldFZhbHVlKGUsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHQudGFyZ2V0LmNoZWNrZWQgPyB0LnRhcmdldC5nZXRBdHRyaWJ1dGUoXCJ4ZmFPblwiKSA6IHQudGFyZ2V0LmdldEF0dHJpYnV0ZShcInhmYU9mZlwiKVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbnVsbCAhPT0gcy52YWx1ZSAmJiB0LnNldEF0dHJpYnV0ZShcInZhbHVlXCIsIHMudmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChcInByaW50XCIgPT09IHIpIGJyZWFrO1xuICAgICAgICAgICAgICAgIHQuYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsIHQgPT4ge1xuICAgICAgICAgICAgICAgICAgaS5zZXRWYWx1ZShlLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0LnRhcmdldC52YWx1ZVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwic2VsZWN0XCI6XG4gICAgICAgICAgICAgIGlmIChudWxsICE9PSBzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdC5zZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiLCBzLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHQgb2Ygbi5jaGlsZHJlbikgdC5hdHRyaWJ1dGVzLnZhbHVlID09PSBzLnZhbHVlID8gdC5hdHRyaWJ1dGVzLnNlbGVjdGVkID0gITAgOiB0LmF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkoXCJzZWxlY3RlZFwiKSAmJiBkZWxldGUgdC5hdHRyaWJ1dGVzLnNlbGVjdGVkO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHQuYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsIHQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG4gPSB0LnRhcmdldC5vcHRpb25zLFxuICAgICAgICAgICAgICAgICAgciA9IC0xID09PSBuLnNlbGVjdGVkSW5kZXggPyBcIlwiIDogbltuLnNlbGVjdGVkSW5kZXhdLnZhbHVlO1xuICAgICAgICAgICAgICAgIGkuc2V0VmFsdWUoZSwge1xuICAgICAgICAgICAgICAgICAgdmFsdWU6IHJcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBzZXRBdHRyaWJ1dGVzKHQpIHtcbiAgICAgICAgICBsZXQge1xuICAgICAgICAgICAgaHRtbDogZSxcbiAgICAgICAgICAgIGVsZW1lbnQ6IG4sXG4gICAgICAgICAgICBzdG9yYWdlOiBpID0gbnVsbCxcbiAgICAgICAgICAgIGludGVudDogcixcbiAgICAgICAgICAgIGxpbmtTZXJ2aWNlOiBzXG4gICAgICAgICAgfSA9IHQ7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBhXG4gICAgICAgICAgICB9ID0gbixcbiAgICAgICAgICAgIG8gPSBlIGluc3RhbmNlb2YgSFRNTEFuY2hvckVsZW1lbnQ7XG4gICAgICAgICAgXCJyYWRpb1wiID09PSBhLnR5cGUgJiYgKGEubmFtZSA9IFwiXCIuY29uY2F0KGEubmFtZSwgXCItXCIpLmNvbmNhdChyKSk7XG4gICAgICAgICAgZm9yIChjb25zdCBbdCwgbl0gb2YgT2JqZWN0LmVudHJpZXMoYSkpIGlmIChudWxsICE9IG4pIHN3aXRjaCAodCkge1xuICAgICAgICAgICAgY2FzZSBcImNsYXNzXCI6XG4gICAgICAgICAgICAgIG4ubGVuZ3RoICYmIGUuc2V0QXR0cmlidXRlKHQsIG4uam9pbihcIiBcIikpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJkYXRhSWRcIjpcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiaWRcIjpcbiAgICAgICAgICAgICAgZS5zZXRBdHRyaWJ1dGUoXCJkYXRhLWVsZW1lbnQtaWRcIiwgbik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInN0eWxlXCI6XG4gICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZS5zdHlsZSwgbik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInRleHRDb250ZW50XCI6XG4gICAgICAgICAgICAgIGUudGV4dENvbnRlbnQgPSBuO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICghbyB8fCBcImhyZWZcIiAhPT0gdCAmJiBcIm5ld1dpbmRvd1wiICE9PSB0KSAmJiBlLnNldEF0dHJpYnV0ZSh0LCBuKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbyAmJiBzLmFkZExpbmtBdHRyaWJ1dGVzKGUsIGEuaHJlZiwgYS5uZXdXaW5kb3cpO1xuICAgICAgICAgIGkgJiYgYS5kYXRhSWQgJiYgdGhpcy5zZXR1cFN0b3JhZ2UoZSwgYS5kYXRhSWQsIG4sIGkpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyByZW5kZXIodCkge1xuICAgICAgICAgIGNvbnN0IGUgPSB0LmFubm90YXRpb25TdG9yYWdlLFxuICAgICAgICAgICAgbiA9IHQubGlua1NlcnZpY2UsXG4gICAgICAgICAgICByID0gdC54ZmFIdG1sLFxuICAgICAgICAgICAgcyA9IHQuaW50ZW50IHx8IFwiZGlzcGxheVwiLFxuICAgICAgICAgICAgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoci5uYW1lKTtcbiAgICAgICAgICByLmF0dHJpYnV0ZXMgJiYgdGhpcy5zZXRBdHRyaWJ1dGVzKHtcbiAgICAgICAgICAgIGh0bWw6IGEsXG4gICAgICAgICAgICBlbGVtZW50OiByLFxuICAgICAgICAgICAgaW50ZW50OiBzLFxuICAgICAgICAgICAgbGlua1NlcnZpY2U6IG5cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBvID0gW1tyLCAtMSwgYV1dLFxuICAgICAgICAgICAgbCA9IHQuZGl2O1xuICAgICAgICAgIGwuYXBwZW5kKGEpO1xuICAgICAgICAgIGlmICh0LnZpZXdwb3J0KSB7XG4gICAgICAgICAgICBjb25zdCBlID0gXCJtYXRyaXgoXCIuY29uY2F0KHQudmlld3BvcnQudHJhbnNmb3JtLmpvaW4oXCIsXCIpLCBcIilcIik7XG4gICAgICAgICAgICBsLnN0eWxlLnRyYW5zZm9ybSA9IGU7XG4gICAgICAgICAgfVxuICAgICAgICAgIFwicmljaFRleHRcIiAhPT0gcyAmJiBsLnNldEF0dHJpYnV0ZShcImNsYXNzXCIsIFwieGZhTGF5ZXIgeGZhRm9udFwiKTtcbiAgICAgICAgICBjb25zdCBjID0gW107XG4gICAgICAgICAgZm9yICg7IG8ubGVuZ3RoID4gMDspIHtcbiAgICAgICAgICAgIHZhciBfbCRhdHRyaWJ1dGVzO1xuICAgICAgICAgICAgY29uc3QgW3QsIHIsIGFdID0gby5hdCgtMSk7XG4gICAgICAgICAgICBpZiAociArIDEgPT09IHQuY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIG8ucG9wKCk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbCA9IHQuY2hpbGRyZW5bKytvLmF0KC0xKVsxXV07XG4gICAgICAgICAgICBpZiAobnVsbCA9PT0gbCkgY29udGludWU7XG4gICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgIG5hbWU6IGhcbiAgICAgICAgICAgIH0gPSBsO1xuICAgICAgICAgICAgaWYgKFwiI3RleHRcIiA9PT0gaCkge1xuICAgICAgICAgICAgICBjb25zdCB0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobC52YWx1ZSk7XG4gICAgICAgICAgICAgIGMucHVzaCh0KTtcbiAgICAgICAgICAgICAgYS5hcHBlbmQodCk7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZCA9IGwgIT09IG51bGwgJiYgbCAhPT0gdm9pZCAwICYmIChfbCRhdHRyaWJ1dGVzID0gbC5hdHRyaWJ1dGVzKSAhPT0gbnVsbCAmJiBfbCRhdHRyaWJ1dGVzICE9PSB2b2lkIDAgJiYgX2wkYXR0cmlidXRlcy54bWxucyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhsLmF0dHJpYnV0ZXMueG1sbnMsIGgpIDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudChoKTtcbiAgICAgICAgICAgIGEuYXBwZW5kKGQpO1xuICAgICAgICAgICAgbC5hdHRyaWJ1dGVzICYmIHRoaXMuc2V0QXR0cmlidXRlcyh7XG4gICAgICAgICAgICAgIGh0bWw6IGQsXG4gICAgICAgICAgICAgIGVsZW1lbnQ6IGwsXG4gICAgICAgICAgICAgIHN0b3JhZ2U6IGUsXG4gICAgICAgICAgICAgIGludGVudDogcyxcbiAgICAgICAgICAgICAgbGlua1NlcnZpY2U6IG5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGwuY2hpbGRyZW4gJiYgbC5jaGlsZHJlbi5sZW5ndGggPiAwKSBvLnB1c2goW2wsIC0xLCBkXSk7ZWxzZSBpZiAobC52YWx1ZSkge1xuICAgICAgICAgICAgICBjb25zdCB0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobC52YWx1ZSk7XG4gICAgICAgICAgICAgIGkuWGZhVGV4dC5zaG91bGRCdWlsZFRleHQoaCkgJiYgYy5wdXNoKHQpO1xuICAgICAgICAgICAgICBkLmFwcGVuZCh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yIChjb25zdCB0IG9mIGwucXVlcnlTZWxlY3RvckFsbChcIi54ZmFOb25JbnRlcmFjdGl2ZSBpbnB1dCwgLnhmYU5vbkludGVyYWN0aXZlIHRleHRhcmVhXCIpKSB0LnNldEF0dHJpYnV0ZShcInJlYWRPbmx5XCIsICEwKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGV4dERpdnM6IGNcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyB1cGRhdGUodCkge1xuICAgICAgICAgIGNvbnN0IGUgPSBcIm1hdHJpeChcIi5jb25jYXQodC52aWV3cG9ydC50cmFuc2Zvcm0uam9pbihcIixcIiksIFwiKVwiKTtcbiAgICAgICAgICB0LmRpdi5zdHlsZS50cmFuc2Zvcm0gPSBlO1xuICAgICAgICAgIHQuZGl2LmhpZGRlbiA9ICExO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0sICh0LCBlLCBuKSA9PiB7XG4gICAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgICAgdmFyIF9jbGFzczQxO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgIHZhbHVlOiAhMFxuICAgICAgfSk7XG4gICAgICBlLklua0VkaXRvciA9IHZvaWQgMDtcbiAgICAgIG4oODkpO1xuICAgICAgbigyKTtcbiAgICAgIHZhciBpID0gbigxKSxcbiAgICAgICAgciA9IG4oMTYzKSxcbiAgICAgICAgcyA9IG4oMTk3KSxcbiAgICAgICAgYSA9IG4oMTY0KTtcbiAgICAgIHZhciBfaG4gPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfZG4gPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfdW4gPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfcG4gPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfZm4gPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfZ24gPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfbW4gPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfYm4gPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfdm4gPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfeW4gPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfQW4gPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfbjkgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfU24gPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfRW4gPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfeG4gPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfd24gPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbiAgICAgIHZhciBfUGUzID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgICB2YXIgX0NuID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgICB2YXIgX0ZuID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgICB2YXIgX0luID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgICB2YXIgX0RuID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgICB2YXIgX0xuID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgICB2YXIgX0JuID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgICB2YXIgX2puID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgICB2YXIgX09uID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgICB2YXIgX05uID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgICB2YXIgX1VuID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgICB2YXIgX1BuID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgICB2YXIgX0huID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgICB2YXIgX2tuID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgICB2YXIgX01uID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgICB2YXIgX1JuID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgICB2YXIgX3FuID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgICB2YXIgX3puID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgICB2YXIgX1huID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgICB2YXIgX0tuID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgICB2YXIgX1duID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgICB2YXIgX1RuID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgICBjbGFzcyBJbmtFZGl0b3IgZXh0ZW5kcyByLkFubm90YXRpb25FZGl0b3Ige1xuICAgICAgICBjb25zdHJ1Y3RvcihfdDE3KSB7XG4gICAgICAgICAgc3VwZXIoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBfdDE3KSwge30sIHtcbiAgICAgICAgICAgIG5hbWU6IFwiaW5rRWRpdG9yXCJcbiAgICAgICAgICB9KSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9Ubik7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9Xbik7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9Lbik7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9Ybik7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF96bik7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9xbik7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9Sbik7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9Nbik7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9rbik7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9Ibik7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9Qbik7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9Vbik7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9Obik7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9Pbik7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9qbik7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9Cbik7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9Mbik7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9Ebik7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9Jbik7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9Gbik7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9Dbik7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9QZTMpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLCBfd24pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9obiwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogMFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9kbiwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogMFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF91biwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5jYW52YXNDb250ZXh0TWVudS5iaW5kKHRoaXMpXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX3BuLCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLmNhbnZhc1BvaW50ZXJtb3ZlLmJpbmQodGhpcylcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfZm4sIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuY2FudmFzUG9pbnRlcmxlYXZlLmJpbmQodGhpcylcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfZ24sIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuY2FudmFzUG9pbnRlcnVwLmJpbmQodGhpcylcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfbW4sIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuY2FudmFzUG9pbnRlcmRvd24uYmluZCh0aGlzKVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF9ibiwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogbmV3IFBhdGgyRCgpXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX3ZuLCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiAhMVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEluaXRTcGVjKHRoaXMsIF95biwge1xuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICB2YWx1ZTogITFcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfQW4sIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6ICExXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX245LCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBudWxsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX1NuLCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiAwXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX0VuLCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiAwXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX3huLCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBudWxsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5jb2xvciA9IF90MTcuY29sb3IgfHwgbnVsbDtcbiAgICAgICAgICB0aGlzLnRoaWNrbmVzcyA9IF90MTcudGhpY2tuZXNzIHx8IG51bGw7XG4gICAgICAgICAgdGhpcy5vcGFjaXR5ID0gX3QxNy5vcGFjaXR5IHx8IG51bGw7XG4gICAgICAgICAgdGhpcy5wYXRocyA9IFtdO1xuICAgICAgICAgIHRoaXMuYmV6aWVyUGF0aDJEID0gW107XG4gICAgICAgICAgdGhpcy5hbGxSYXdQYXRocyA9IFtdO1xuICAgICAgICAgIHRoaXMuY3VycmVudFBhdGggPSBbXTtcbiAgICAgICAgICB0aGlzLnNjYWxlRmFjdG9yID0gMTtcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0aW9uWCA9IHRoaXMudHJhbnNsYXRpb25ZID0gMDtcbiAgICAgICAgICB0aGlzLnggPSAwO1xuICAgICAgICAgIHRoaXMueSA9IDA7XG4gICAgICAgICAgdGhpcy5fd2lsbEtlZXBBc3BlY3RSYXRpbyA9ICEwO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBpbml0aWFsaXplKHQpIHtcbiAgICAgICAgICB0aGlzLl9sMTBuUHJvbWlzZSA9IG5ldyBNYXAoW1wiZWRpdG9yX2lua19jYW52YXNfYXJpYV9sYWJlbFwiLCBcImVkaXRvcl9pbmsyX2FyaWFfbGFiZWxcIl0ubWFwKGUgPT4gW2UsIHQuZ2V0KGUpXSkpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyB1cGRhdGVEZWZhdWx0UGFyYW1zKHQsIGUpIHtcbiAgICAgICAgICBzd2l0Y2ggKHQpIHtcbiAgICAgICAgICAgIGNhc2UgaS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5JTktfVEhJQ0tORVNTOlxuICAgICAgICAgICAgICBJbmtFZGl0b3IuX2RlZmF1bHRUaGlja25lc3MgPSBlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgaS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5JTktfQ09MT1I6XG4gICAgICAgICAgICAgIElua0VkaXRvci5fZGVmYXVsdENvbG9yID0gZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIGkuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSU5LX09QQUNJVFk6XG4gICAgICAgICAgICAgIElua0VkaXRvci5fZGVmYXVsdE9wYWNpdHkgPSBlIC8gMTAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVQYXJhbXModCwgZSkge1xuICAgICAgICAgIHN3aXRjaCAodCkge1xuICAgICAgICAgICAgY2FzZSBpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLklOS19USElDS05FU1M6XG4gICAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX3duLCBfd24yKS5jYWxsKHRoaXMsIGUpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgaS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5JTktfQ09MT1I6XG4gICAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX1BlMywgX1BlNCkuY2FsbCh0aGlzLCBlKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIGkuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSU5LX09QQUNJVFk6XG4gICAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX0NuLCBfQ24yKS5jYWxsKHRoaXMsIGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgZ2V0IGRlZmF1bHRQcm9wZXJ0aWVzVG9VcGRhdGUoKSB7XG4gICAgICAgICAgcmV0dXJuIFtbaS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5JTktfVEhJQ0tORVNTLCBJbmtFZGl0b3IuX2RlZmF1bHRUaGlja25lc3NdLCBbaS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5JTktfQ09MT1IsIElua0VkaXRvci5fZGVmYXVsdENvbG9yIHx8IHIuQW5ub3RhdGlvbkVkaXRvci5fZGVmYXVsdExpbmVDb2xvcl0sIFtpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLklOS19PUEFDSVRZLCBNYXRoLnJvdW5kKDEwMCAqIElua0VkaXRvci5fZGVmYXVsdE9wYWNpdHkpXV07XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHByb3BlcnRpZXNUb1VwZGF0ZSgpIHtcbiAgICAgICAgICB2YXIgX3RoaXMkb3BhY2l0eTtcbiAgICAgICAgICByZXR1cm4gW1tpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLklOS19USElDS05FU1MsIHRoaXMudGhpY2tuZXNzIHx8IElua0VkaXRvci5fZGVmYXVsdFRoaWNrbmVzc10sIFtpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLklOS19DT0xPUiwgdGhpcy5jb2xvciB8fCBJbmtFZGl0b3IuX2RlZmF1bHRDb2xvciB8fCByLkFubm90YXRpb25FZGl0b3IuX2RlZmF1bHRMaW5lQ29sb3JdLCBbaS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5JTktfT1BBQ0lUWSwgTWF0aC5yb3VuZCgxMDAgKiAoKF90aGlzJG9wYWNpdHkgPSB0aGlzLm9wYWNpdHkpICE9PSBudWxsICYmIF90aGlzJG9wYWNpdHkgIT09IHZvaWQgMCA/IF90aGlzJG9wYWNpdHkgOiBJbmtFZGl0b3IuX2RlZmF1bHRPcGFjaXR5KSldXTtcbiAgICAgICAgfVxuICAgICAgICByZWJ1aWxkKCkge1xuICAgICAgICAgIHN1cGVyLnJlYnVpbGQoKTtcbiAgICAgICAgICBpZiAobnVsbCAhPT0gdGhpcy5kaXYpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5jYW52YXMpIHtcbiAgICAgICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfa24sIF9rbjIpLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX01uLCBfTW4yKS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzQXR0YWNoZWRUb0RPTSkge1xuICAgICAgICAgICAgICB0aGlzLnBhcmVudC5hZGQodGhpcyk7XG4gICAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX1JuLCBfUm4yKS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfVG4sIF9UbjIpLmNhbGwodGhpcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlbW92ZSgpIHtcbiAgICAgICAgICBpZiAobnVsbCAhPT0gdGhpcy5jYW52YXMpIHtcbiAgICAgICAgICAgIHRoaXMuaXNFbXB0eSgpIHx8IHRoaXMuY29tbWl0KCk7XG4gICAgICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuY2FudmFzLmhlaWdodCA9IDA7XG4gICAgICAgICAgICB0aGlzLmNhbnZhcy5yZW1vdmUoKTtcbiAgICAgICAgICAgIHRoaXMuY2FudmFzID0gbnVsbDtcbiAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfbjkpLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfbjksIG51bGwpO1xuICAgICAgICAgICAgc3VwZXIucmVtb3ZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNldFBhcmVudCh0KSB7XG4gICAgICAgICAgIXRoaXMucGFyZW50ICYmIHQgPyB0aGlzLl91aU1hbmFnZXIucmVtb3ZlU2hvdWxkUmVzY2FsZSh0aGlzKSA6IHRoaXMucGFyZW50ICYmIG51bGwgPT09IHQgJiYgdGhpcy5fdWlNYW5hZ2VyLmFkZFNob3VsZFJlc2NhbGUodGhpcyk7XG4gICAgICAgICAgc3VwZXIuc2V0UGFyZW50KHQpO1xuICAgICAgICB9XG4gICAgICAgIG9uU2NhbGVDaGFuZ2luZygpIHtcbiAgICAgICAgICBjb25zdCBbdCwgZV0gPSB0aGlzLnBhcmVudERpbWVuc2lvbnMsXG4gICAgICAgICAgICBuID0gdGhpcy53aWR0aCAqIHQsXG4gICAgICAgICAgICBpID0gdGhpcy5oZWlnaHQgKiBlO1xuICAgICAgICAgIHRoaXMuc2V0RGltZW5zaW9ucyhuLCBpKTtcbiAgICAgICAgfVxuICAgICAgICBlbmFibGVFZGl0TW9kZSgpIHtcbiAgICAgICAgICBpZiAoIV9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfdm4pICYmIG51bGwgIT09IHRoaXMuY2FudmFzKSB7XG4gICAgICAgICAgICBzdXBlci5lbmFibGVFZGl0TW9kZSgpO1xuICAgICAgICAgICAgdGhpcy5kaXYuZHJhZ2dhYmxlID0gITE7XG4gICAgICAgICAgICB0aGlzLmNhbnZhcy5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIiwgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9tbikpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkaXNhYmxlRWRpdE1vZGUoKSB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNJbkVkaXRNb2RlKCkgJiYgbnVsbCAhPT0gdGhpcy5jYW52YXMpIHtcbiAgICAgICAgICAgIHN1cGVyLmRpc2FibGVFZGl0TW9kZSgpO1xuICAgICAgICAgICAgdGhpcy5kaXYuZHJhZ2dhYmxlID0gIXRoaXMuaXNFbXB0eSgpO1xuICAgICAgICAgICAgdGhpcy5kaXYuY2xhc3NMaXN0LnJlbW92ZShcImVkaXRpbmdcIik7XG4gICAgICAgICAgICB0aGlzLmNhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIiwgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9tbikpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvbmNlQWRkZWQoKSB7XG4gICAgICAgICAgdGhpcy5kaXYuZHJhZ2dhYmxlID0gIXRoaXMuaXNFbXB0eSgpO1xuICAgICAgICB9XG4gICAgICAgIGlzRW1wdHkoKSB7XG4gICAgICAgICAgcmV0dXJuIDAgPT09IHRoaXMucGF0aHMubGVuZ3RoIHx8IDEgPT09IHRoaXMucGF0aHMubGVuZ3RoICYmIDAgPT09IHRoaXMucGF0aHNbMF0ubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIGNvbW1pdCgpIHtcbiAgICAgICAgICBpZiAoIV9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfdm4pKSB7XG4gICAgICAgICAgICBzdXBlci5jb21taXQoKTtcbiAgICAgICAgICAgIHRoaXMuaXNFZGl0aW5nID0gITE7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVFZGl0TW9kZSgpO1xuICAgICAgICAgICAgdGhpcy5zZXRJbkZvcmVncm91bmQoKTtcbiAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfdm4sICEwKTtcbiAgICAgICAgICAgIHRoaXMuZGl2LmNsYXNzTGlzdC5hZGQoXCJkaXNhYmxlZFwiKTtcbiAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX1RuLCBfVG4yKS5jYWxsKHRoaXMsICEwKTtcbiAgICAgICAgICAgIHRoaXMubWFrZVJlc2l6YWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQuYWRkSW5rRWRpdG9ySWZOZWVkZWQoITApO1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQubW92ZUVkaXRvckluRE9NKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5kaXYuZm9jdXMoe1xuICAgICAgICAgICAgICBwcmV2ZW50U2Nyb2xsOiAhMFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvY3VzaW4odCkge1xuICAgICAgICAgIHN1cGVyLmZvY3VzaW4odCk7XG4gICAgICAgICAgdGhpcy5lbmFibGVFZGl0TW9kZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNhbnZhc1BvaW50ZXJkb3duKHQpIHtcbiAgICAgICAgICBpZiAoMCA9PT0gdC5idXR0b24gJiYgdGhpcy5pc0luRWRpdE1vZGUoKSAmJiAhX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF92bikpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0SW5Gb3JlZ3JvdW5kKCk7XG4gICAgICAgICAgICB0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBcIm1vdXNlXCIgIT09IHQudHlwZSAmJiB0aGlzLmRpdi5mb2N1cygpO1xuICAgICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfRG4sIF9EbjIpLmNhbGwodGhpcywgdC5vZmZzZXRYLCB0Lm9mZnNldFkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYW52YXNDb250ZXh0TWVudSh0KSB7XG4gICAgICAgICAgdC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIGNhbnZhc1BvaW50ZXJtb3ZlKHQpIHtcbiAgICAgICAgICB0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfTG4sIF9MbjIpLmNhbGwodGhpcywgdC5vZmZzZXRYLCB0Lm9mZnNldFkpO1xuICAgICAgICB9XG4gICAgICAgIGNhbnZhc1BvaW50ZXJ1cCh0KSB7XG4gICAgICAgICAgdC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX0huLCBfSG4yKS5jYWxsKHRoaXMsIHQpO1xuICAgICAgICB9XG4gICAgICAgIGNhbnZhc1BvaW50ZXJsZWF2ZSh0KSB7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfSG4sIF9IbjIpLmNhbGwodGhpcywgdCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGlzUmVzaXphYmxlKCkge1xuICAgICAgICAgIHJldHVybiAhdGhpcy5pc0VtcHR5KCkgJiYgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF92bik7XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyKCkge1xuICAgICAgICAgIGlmICh0aGlzLmRpdikgcmV0dXJuIHRoaXMuZGl2O1xuICAgICAgICAgIGxldCB0LCBlO1xuICAgICAgICAgIGlmICh0aGlzLndpZHRoKSB7XG4gICAgICAgICAgICB0ID0gdGhpcy54O1xuICAgICAgICAgICAgZSA9IHRoaXMueTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3VwZXIucmVuZGVyKCk7XG4gICAgICAgICAgSW5rRWRpdG9yLl9sMTBuUHJvbWlzZS5nZXQoXCJlZGl0b3JfaW5rMl9hcmlhX2xhYmVsXCIpLnRoZW4odCA9PiB7XG4gICAgICAgICAgICB2YXIgX3RoaXMkZGl2NjtcbiAgICAgICAgICAgIHJldHVybiAoX3RoaXMkZGl2NiA9IHRoaXMuZGl2KSA9PT0gbnVsbCB8fCBfdGhpcyRkaXY2ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRkaXY2LnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIiwgdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29uc3QgW24sIGksIHIsIHNdID0gX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfRm4sIF9GbjIpLmNhbGwodGhpcyk7XG4gICAgICAgICAgdGhpcy5zZXRBdChuLCBpLCAwLCAwKTtcbiAgICAgICAgICB0aGlzLnNldERpbXMociwgcyk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfa24sIF9rbjIpLmNhbGwodGhpcyk7XG4gICAgICAgICAgaWYgKHRoaXMud2lkdGgpIHtcbiAgICAgICAgICAgIGNvbnN0IFtuLCBpXSA9IHRoaXMucGFyZW50RGltZW5zaW9ucztcbiAgICAgICAgICAgIHRoaXMuc2V0QXNwZWN0UmF0aW8odGhpcy53aWR0aCAqIG4sIHRoaXMuaGVpZ2h0ICogaSk7XG4gICAgICAgICAgICB0aGlzLnNldEF0KHQgKiBuLCBlICogaSwgdGhpcy53aWR0aCAqIG4sIHRoaXMuaGVpZ2h0ICogaSk7XG4gICAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX0FuLCAhMCk7XG4gICAgICAgICAgICBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9SbiwgX1JuMikuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuc2V0RGltcyh0aGlzLndpZHRoICogbiwgdGhpcy5oZWlnaHQgKiBpKTtcbiAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX1BuLCBfUG4yKS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5kaXYuY2xhc3NMaXN0LmFkZChcImRpc2FibGVkXCIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRpdi5jbGFzc0xpc3QuYWRkKFwiZWRpdGluZ1wiKTtcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlRWRpdE1vZGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfTW4sIF9NbjIpLmNhbGwodGhpcyk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZGl2O1xuICAgICAgICB9XG4gICAgICAgIHNldERpbWVuc2lvbnModCwgZSkge1xuICAgICAgICAgIGNvbnN0IG4gPSBNYXRoLnJvdW5kKHQpLFxuICAgICAgICAgICAgaSA9IE1hdGgucm91bmQoZSk7XG4gICAgICAgICAgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfU24pID09PSBuICYmIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfRW4pID09PSBpKSByZXR1cm47XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9Tbiwgbik7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9FbiwgaSk7XG4gICAgICAgICAgdGhpcy5jYW52YXMuc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCI7XG4gICAgICAgICAgY29uc3QgW3IsIHNdID0gdGhpcy5wYXJlbnREaW1lbnNpb25zO1xuICAgICAgICAgIHRoaXMud2lkdGggPSB0IC8gcjtcbiAgICAgICAgICB0aGlzLmhlaWdodCA9IGUgLyBzO1xuICAgICAgICAgIHRoaXMuZml4QW5kU2V0UG9zaXRpb24oKTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3ZuKSAmJiBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9xbiwgX3FuMikuY2FsbCh0aGlzLCB0LCBlKTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9SbiwgX1JuMikuY2FsbCh0aGlzKTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9QbiwgX1BuMikuY2FsbCh0aGlzKTtcbiAgICAgICAgICB0aGlzLmNhbnZhcy5zdHlsZS52aXNpYmlsaXR5ID0gXCJ2aXNpYmxlXCI7XG4gICAgICAgICAgdGhpcy5maXhEaW1zKCk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGRlc2VyaWFsaXplKHQsIGUsIG4pIHtcbiAgICAgICAgICBpZiAodCBpbnN0YW5jZW9mIHMuSW5rQW5ub3RhdGlvbkVsZW1lbnQpIHJldHVybiBudWxsO1xuICAgICAgICAgIGNvbnN0IGEgPSBzdXBlci5kZXNlcmlhbGl6ZSh0LCBlLCBuKTtcbiAgICAgICAgICBhLnRoaWNrbmVzcyA9IHQudGhpY2tuZXNzO1xuICAgICAgICAgIGEuY29sb3IgPSBpLlV0aWwubWFrZUhleENvbG9yKC4uLnQuY29sb3IpO1xuICAgICAgICAgIGEub3BhY2l0eSA9IHQub3BhY2l0eTtcbiAgICAgICAgICBjb25zdCBbbywgbF0gPSBhLnBhZ2VEaW1lbnNpb25zLFxuICAgICAgICAgICAgYyA9IGEud2lkdGggKiBvLFxuICAgICAgICAgICAgaCA9IGEuaGVpZ2h0ICogbCxcbiAgICAgICAgICAgIGQgPSBhLnBhcmVudFNjYWxlLFxuICAgICAgICAgICAgdSA9IHQudGhpY2tuZXNzIC8gMjtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQoYSwgX3ZuLCAhMCk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KGEsIF9TbiwgTWF0aC5yb3VuZChjKSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KGEsIF9FbiwgTWF0aC5yb3VuZChoKSk7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgcGF0aHM6IHAsXG4gICAgICAgICAgICByZWN0OiBmLFxuICAgICAgICAgICAgcm90YXRpb246IGdcbiAgICAgICAgICB9ID0gdDtcbiAgICAgICAgICBmb3IgKGxldCB7XG4gICAgICAgICAgICBiZXppZXI6IHRcbiAgICAgICAgICB9IG9mIHApIHtcbiAgICAgICAgICAgIHQgPSBfY2xhc3NTdGF0aWNQcml2YXRlTWV0aG9kR2V0KElua0VkaXRvciwgSW5rRWRpdG9yLCBfJG4pLmNhbGwoSW5rRWRpdG9yLCB0LCBmLCBnKTtcbiAgICAgICAgICAgIGNvbnN0IGUgPSBbXTtcbiAgICAgICAgICAgIGEucGF0aHMucHVzaChlKTtcbiAgICAgICAgICAgIGxldCBuID0gZCAqICh0WzBdIC0gdSksXG4gICAgICAgICAgICAgIGkgPSBkICogKHRbMV0gLSB1KTtcbiAgICAgICAgICAgIGZvciAobGV0IHIgPSAyLCBzID0gdC5sZW5ndGg7IHIgPCBzOyByICs9IDYpIHtcbiAgICAgICAgICAgICAgY29uc3QgcyA9IGQgKiAodFtyXSAtIHUpLFxuICAgICAgICAgICAgICAgIGEgPSBkICogKHRbciArIDFdIC0gdSksXG4gICAgICAgICAgICAgICAgbyA9IGQgKiAodFtyICsgMl0gLSB1KSxcbiAgICAgICAgICAgICAgICBsID0gZCAqICh0W3IgKyAzXSAtIHUpLFxuICAgICAgICAgICAgICAgIGMgPSBkICogKHRbciArIDRdIC0gdSksXG4gICAgICAgICAgICAgICAgaCA9IGQgKiAodFtyICsgNV0gLSB1KTtcbiAgICAgICAgICAgICAgZS5wdXNoKFtbbiwgaV0sIFtzLCBhXSwgW28sIGxdLCBbYywgaF1dKTtcbiAgICAgICAgICAgICAgbiA9IGM7XG4gICAgICAgICAgICAgIGkgPSBoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgciA9IF9jbGFzc1N0YXRpY1ByaXZhdGVNZXRob2RHZXQodGhpcywgSW5rRWRpdG9yLCBfR24pLmNhbGwodGhpcywgZSk7XG4gICAgICAgICAgICBhLmJlemllclBhdGgyRC5wdXNoKHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBtID0gX2NsYXNzUHJpdmF0ZU1ldGhvZEdldChhLCBfS24sIF9LbjIpLmNhbGwoYSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KGEsIF9kbiwgTWF0aC5tYXgoci5Bbm5vdGF0aW9uRWRpdG9yLk1JTl9TSVpFLCBtWzJdIC0gbVswXSkpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldChhLCBfaG4sIE1hdGgubWF4KHIuQW5ub3RhdGlvbkVkaXRvci5NSU5fU0laRSwgbVszXSAtIG1bMV0pKTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KGEsIF9xbiwgX3FuMikuY2FsbChhLCBjLCBoKTtcbiAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgfVxuICAgICAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNFbXB0eSgpKSByZXR1cm4gbnVsbDtcbiAgICAgICAgICBjb25zdCB0ID0gdGhpcy5nZXRSZWN0KDAsIDApLFxuICAgICAgICAgICAgZSA9IHIuQW5ub3RhdGlvbkVkaXRvci5fY29sb3JNYW5hZ2VyLmNvbnZlcnQodGhpcy5jdHguc3Ryb2tlU3R5bGUpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhbm5vdGF0aW9uVHlwZTogaS5Bbm5vdGF0aW9uRWRpdG9yVHlwZS5JTkssXG4gICAgICAgICAgICBjb2xvcjogZSxcbiAgICAgICAgICAgIHRoaWNrbmVzczogdGhpcy50aGlja25lc3MsXG4gICAgICAgICAgICBvcGFjaXR5OiB0aGlzLm9wYWNpdHksXG4gICAgICAgICAgICBwYXRoczogX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfWG4sIF9YbjIpLmNhbGwodGhpcywgdGhpcy5zY2FsZUZhY3RvciAvIHRoaXMucGFyZW50U2NhbGUsIHRoaXMudHJhbnNsYXRpb25YLCB0aGlzLnRyYW5zbGF0aW9uWSwgdCksXG4gICAgICAgICAgICBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4LFxuICAgICAgICAgICAgcmVjdDogdCxcbiAgICAgICAgICAgIHJvdGF0aW9uOiB0aGlzLnJvdGF0aW9uXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgX2NsYXNzNDEgPSBJbmtFZGl0b3I7XG4gICAgICBmdW5jdGlvbiBfd24yKHQpIHtcbiAgICAgICAgY29uc3QgZSA9IHRoaXMudGhpY2tuZXNzO1xuICAgICAgICB0aGlzLmFkZENvbW1hbmRzKHtcbiAgICAgICAgICBjbWQ6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudGhpY2tuZXNzID0gdDtcbiAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX1RuLCBfVG4yKS5jYWxsKHRoaXMpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgdW5kbzogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy50aGlja25lc3MgPSBlO1xuICAgICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfVG4sIF9UbjIpLmNhbGwodGhpcyk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBtdXN0RXhlYzogITAsXG4gICAgICAgICAgdHlwZTogaS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZS5JTktfVEhJQ0tORVNTLFxuICAgICAgICAgIG92ZXJ3cml0ZUlmU2FtZVR5cGU6ICEwLFxuICAgICAgICAgIGtlZXBVbmRvOiAhMFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF9QZTQodCkge1xuICAgICAgICBjb25zdCBlID0gdGhpcy5jb2xvcjtcbiAgICAgICAgdGhpcy5hZGRDb21tYW5kcyh7XG4gICAgICAgICAgY21kOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbG9yID0gdDtcbiAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX1BuLCBfUG4yKS5jYWxsKHRoaXMpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgdW5kbzogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb2xvciA9IGU7XG4gICAgICAgICAgICBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9QbiwgX1BuMikuY2FsbCh0aGlzKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIG11c3RFeGVjOiAhMCxcbiAgICAgICAgICB0eXBlOiBpLkFubm90YXRpb25FZGl0b3JQYXJhbXNUeXBlLklOS19DT0xPUixcbiAgICAgICAgICBvdmVyd3JpdGVJZlNhbWVUeXBlOiAhMCxcbiAgICAgICAgICBrZWVwVW5kbzogITBcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfQ24yKHQpIHtcbiAgICAgICAgdCAvPSAxMDA7XG4gICAgICAgIGNvbnN0IGUgPSB0aGlzLm9wYWNpdHk7XG4gICAgICAgIHRoaXMuYWRkQ29tbWFuZHMoe1xuICAgICAgICAgIGNtZDogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vcGFjaXR5ID0gdDtcbiAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX1BuLCBfUG4yKS5jYWxsKHRoaXMpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgdW5kbzogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vcGFjaXR5ID0gZTtcbiAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX1BuLCBfUG4yKS5jYWxsKHRoaXMpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgbXVzdEV4ZWM6ICEwLFxuICAgICAgICAgIHR5cGU6IGkuQW5ub3RhdGlvbkVkaXRvclBhcmFtc1R5cGUuSU5LX09QQUNJVFksXG4gICAgICAgICAgb3ZlcndyaXRlSWZTYW1lVHlwZTogITAsXG4gICAgICAgICAga2VlcFVuZG86ICEwXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX0ZuMigpIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHBhcmVudFJvdGF0aW9uOiB0LFxuICAgICAgICAgIHBhcmVudERpbWVuc2lvbnM6IFtlLCBuXVxuICAgICAgICB9ID0gdGhpcztcbiAgICAgICAgc3dpdGNoICh0KSB7XG4gICAgICAgICAgY2FzZSA5MDpcbiAgICAgICAgICAgIHJldHVybiBbMCwgbiwgbiwgZV07XG4gICAgICAgICAgY2FzZSAxODA6XG4gICAgICAgICAgICByZXR1cm4gW2UsIG4sIGUsIG5dO1xuICAgICAgICAgIGNhc2UgMjcwOlxuICAgICAgICAgICAgcmV0dXJuIFtlLCAwLCBuLCBlXTtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIFswLCAwLCBlLCBuXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX0luMigpIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGN0eDogdCxcbiAgICAgICAgICBjb2xvcjogZSxcbiAgICAgICAgICBvcGFjaXR5OiBuLFxuICAgICAgICAgIHRoaWNrbmVzczogaSxcbiAgICAgICAgICBwYXJlbnRTY2FsZTogcixcbiAgICAgICAgICBzY2FsZUZhY3Rvcjogc1xuICAgICAgICB9ID0gdGhpcztcbiAgICAgICAgdC5saW5lV2lkdGggPSBpICogciAvIHM7XG4gICAgICAgIHQubGluZUNhcCA9IFwicm91bmRcIjtcbiAgICAgICAgdC5saW5lSm9pbiA9IFwicm91bmRcIjtcbiAgICAgICAgdC5taXRlckxpbWl0ID0gMTA7XG4gICAgICAgIHQuc3Ryb2tlU3R5bGUgPSBcIlwiLmNvbmNhdChlKS5jb25jYXQoKDAsIGEub3BhY2l0eVRvSGV4KShuKSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfRG4yKHQsIGUpIHtcbiAgICAgICAgdGhpcy5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfdW4pKTtcbiAgICAgICAgdGhpcy5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJsZWF2ZVwiLCBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2ZuKSk7XG4gICAgICAgIHRoaXMuY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3BuKSk7XG4gICAgICAgIHRoaXMuY2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9nbikpO1xuICAgICAgICB0aGlzLmNhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIiwgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9tbikpO1xuICAgICAgICB0aGlzLmlzRWRpdGluZyA9ICEwO1xuICAgICAgICBpZiAoIV9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfQW4pKSB7XG4gICAgICAgICAgdmFyIF90aGlzJG9wYWNpdHkyO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfQW4sICEwKTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9SbiwgX1JuMikuY2FsbCh0aGlzKTtcbiAgICAgICAgICB0aGlzLnRoaWNrbmVzcyB8fCAodGhpcy50aGlja25lc3MgPSBfY2xhc3M0MS5fZGVmYXVsdFRoaWNrbmVzcyk7XG4gICAgICAgICAgdGhpcy5jb2xvciB8fCAodGhpcy5jb2xvciA9IF9jbGFzczQxLl9kZWZhdWx0Q29sb3IgfHwgci5Bbm5vdGF0aW9uRWRpdG9yLl9kZWZhdWx0TGluZUNvbG9yKTtcbiAgICAgICAgICAoX3RoaXMkb3BhY2l0eTIgPSB0aGlzLm9wYWNpdHkpICE9PSBudWxsICYmIF90aGlzJG9wYWNpdHkyICE9PSB2b2lkIDAgPyBfdGhpcyRvcGFjaXR5MiA6IHRoaXMub3BhY2l0eSA9IF9jbGFzczQxLl9kZWZhdWx0T3BhY2l0eTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN1cnJlbnRQYXRoLnB1c2goW3QsIGVdKTtcbiAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF95biwgITEpO1xuICAgICAgICBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9JbiwgX0luMikuY2FsbCh0aGlzKTtcbiAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF94biwgKCkgPT4ge1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX09uLCBfT24yKS5jYWxsKHRoaXMpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfeG4pICYmIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF94bikpO1xuICAgICAgICB9KTtcbiAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3huKSk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfTG4yKHQsIGUpIHtcbiAgICAgICAgY29uc3QgW24sIGldID0gdGhpcy5jdXJyZW50UGF0aC5hdCgtMSk7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQYXRoLmxlbmd0aCA+IDEgJiYgdCA9PT0gbiAmJiBlID09PSBpKSByZXR1cm47XG4gICAgICAgIGNvbnN0IHIgPSB0aGlzLmN1cnJlbnRQYXRoO1xuICAgICAgICBsZXQgcyA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfYm4pO1xuICAgICAgICByLnB1c2goW3QsIGVdKTtcbiAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF95biwgITApO1xuICAgICAgICBpZiAoci5sZW5ndGggPD0gMikge1xuICAgICAgICAgIHMubW92ZVRvKC4uLnJbMF0pO1xuICAgICAgICAgIHMubGluZVRvKHQsIGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICgzID09PSByLmxlbmd0aCkge1xuICAgICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ibiwgcyA9IG5ldyBQYXRoMkQoKSk7XG4gICAgICAgICAgICBzLm1vdmVUbyguLi5yWzBdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfTm4sIF9ObjIpLmNhbGwodGhpcywgcywgLi4uci5hdCgtMyksIC4uLnIuYXQoLTIpLCB0LCBlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX0JuMigpIHtcbiAgICAgICAgaWYgKDAgPT09IHRoaXMuY3VycmVudFBhdGgubGVuZ3RoKSByZXR1cm47XG4gICAgICAgIGNvbnN0IHQgPSB0aGlzLmN1cnJlbnRQYXRoLmF0KC0xKTtcbiAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ibikubGluZVRvKC4uLnQpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX2puMih0LCBlKSB7XG4gICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfeG4sIG51bGwpO1xuICAgICAgICB0ID0gTWF0aC5taW4oTWF0aC5tYXgodCwgMCksIHRoaXMuY2FudmFzLndpZHRoKTtcbiAgICAgICAgZSA9IE1hdGgubWluKE1hdGgubWF4KGUsIDApLCB0aGlzLmNhbnZhcy5oZWlnaHQpO1xuICAgICAgICBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9MbiwgX0xuMikuY2FsbCh0aGlzLCB0LCBlKTtcbiAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfQm4sIF9CbjIpLmNhbGwodGhpcyk7XG4gICAgICAgIGxldCBuO1xuICAgICAgICBpZiAoMSAhPT0gdGhpcy5jdXJyZW50UGF0aC5sZW5ndGgpIG4gPSBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9VbiwgX1VuMikuY2FsbCh0aGlzKTtlbHNlIHtcbiAgICAgICAgICBjb25zdCBpID0gW3QsIGVdO1xuICAgICAgICAgIG4gPSBbW2ksIGkuc2xpY2UoKSwgaS5zbGljZSgpLCBpXV07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaSA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfYm4pLFxuICAgICAgICAgIHIgPSB0aGlzLmN1cnJlbnRQYXRoO1xuICAgICAgICB0aGlzLmN1cnJlbnRQYXRoID0gW107XG4gICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfYm4sIG5ldyBQYXRoMkQoKSk7XG4gICAgICAgIHRoaXMuYWRkQ29tbWFuZHMoe1xuICAgICAgICAgIGNtZDogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hbGxSYXdQYXRocy5wdXNoKHIpO1xuICAgICAgICAgICAgdGhpcy5wYXRocy5wdXNoKG4pO1xuICAgICAgICAgICAgdGhpcy5iZXppZXJQYXRoMkQucHVzaChpKTtcbiAgICAgICAgICAgIHRoaXMucmVidWlsZCgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgdW5kbzogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hbGxSYXdQYXRocy5wb3AoKTtcbiAgICAgICAgICAgIHRoaXMucGF0aHMucG9wKCk7XG4gICAgICAgICAgICB0aGlzLmJlemllclBhdGgyRC5wb3AoKTtcbiAgICAgICAgICAgIGlmICgwID09PSB0aGlzLnBhdGhzLmxlbmd0aCkgdGhpcy5yZW1vdmUoKTtlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLmNhbnZhcykge1xuICAgICAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX2tuLCBfa24yKS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX01uLCBfTW4yKS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX1RuLCBfVG4yKS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbXVzdEV4ZWM6ICEwXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX09uMigpIHtcbiAgICAgICAgaWYgKCFfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3luKSkgcmV0dXJuO1xuICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX3luLCAhMSk7XG4gICAgICAgIGNvbnN0IHQgPSBNYXRoLmNlaWwodGhpcy50aGlja25lc3MgKiB0aGlzLnBhcmVudFNjYWxlKSxcbiAgICAgICAgICBlID0gdGhpcy5jdXJyZW50UGF0aC5zbGljZSgtMyksXG4gICAgICAgICAgbiA9IGUubWFwKHQgPT4gdFswXSksXG4gICAgICAgICAgaSA9IGUubWFwKHQgPT4gdFsxXSksXG4gICAgICAgICAge1xuICAgICAgICAgICAgY3R4OiByXG4gICAgICAgICAgfSA9IChNYXRoLm1pbiguLi5uKSwgTWF0aC5tYXgoLi4ubiksIE1hdGgubWluKC4uLmkpLCBNYXRoLm1heCguLi5pKSwgdGhpcyk7XG4gICAgICAgIHIuc2F2ZSgpO1xuICAgICAgICByLmNsZWFyUmVjdCgwLCAwLCB0aGlzLmNhbnZhcy53aWR0aCwgdGhpcy5jYW52YXMuaGVpZ2h0KTtcbiAgICAgICAgZm9yIChjb25zdCB0IG9mIHRoaXMuYmV6aWVyUGF0aDJEKSByLnN0cm9rZSh0KTtcbiAgICAgICAgci5zdHJva2UoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ibikpO1xuICAgICAgICByLnJlc3RvcmUoKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF9ObjIodCwgZSwgbiwgaSwgciwgcywgYSkge1xuICAgICAgICBjb25zdCBvID0gKGUgKyBpKSAvIDIsXG4gICAgICAgICAgbCA9IChuICsgcikgLyAyLFxuICAgICAgICAgIGMgPSAoaSArIHMpIC8gMixcbiAgICAgICAgICBoID0gKHIgKyBhKSAvIDI7XG4gICAgICAgIHQuYmV6aWVyQ3VydmVUbyhvICsgMiAqIChpIC0gbykgLyAzLCBsICsgMiAqIChyIC0gbCkgLyAzLCBjICsgMiAqIChpIC0gYykgLyAzLCBoICsgMiAqIChyIC0gaCkgLyAzLCBjLCBoKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF9VbjIoKSB7XG4gICAgICAgIGNvbnN0IHQgPSB0aGlzLmN1cnJlbnRQYXRoO1xuICAgICAgICBpZiAodC5sZW5ndGggPD0gMikgcmV0dXJuIFtbdFswXSwgdFswXSwgdC5hdCgtMSksIHQuYXQoLTEpXV07XG4gICAgICAgIGNvbnN0IGUgPSBbXTtcbiAgICAgICAgbGV0IG4sXG4gICAgICAgICAgW2ksIHJdID0gdFswXTtcbiAgICAgICAgZm9yIChuID0gMTsgbiA8IHQubGVuZ3RoIC0gMjsgbisrKSB7XG4gICAgICAgICAgY29uc3QgW3MsIGFdID0gdFtuXSxcbiAgICAgICAgICAgIFtvLCBsXSA9IHRbbiArIDFdLFxuICAgICAgICAgICAgYyA9IChzICsgbykgLyAyLFxuICAgICAgICAgICAgaCA9IChhICsgbCkgLyAyLFxuICAgICAgICAgICAgZCA9IFtpICsgMiAqIChzIC0gaSkgLyAzLCByICsgMiAqIChhIC0gcikgLyAzXSxcbiAgICAgICAgICAgIHUgPSBbYyArIDIgKiAocyAtIGMpIC8gMywgaCArIDIgKiAoYSAtIGgpIC8gM107XG4gICAgICAgICAgZS5wdXNoKFtbaSwgcl0sIGQsIHUsIFtjLCBoXV0pO1xuICAgICAgICAgIFtpLCByXSA9IFtjLCBoXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBbcywgYV0gPSB0W25dLFxuICAgICAgICAgIFtvLCBsXSA9IHRbbiArIDFdLFxuICAgICAgICAgIGMgPSBbaSArIDIgKiAocyAtIGkpIC8gMywgciArIDIgKiAoYSAtIHIpIC8gM10sXG4gICAgICAgICAgaCA9IFtvICsgMiAqIChzIC0gbykgLyAzLCBsICsgMiAqIChhIC0gbCkgLyAzXTtcbiAgICAgICAgZS5wdXNoKFtbaSwgcl0sIGMsIGgsIFtvLCBsXV0pO1xuICAgICAgICByZXR1cm4gZTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF9QbjIoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzRW1wdHkoKSkge1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX3puLCBfem4yKS5jYWxsKHRoaXMpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9JbiwgX0luMikuY2FsbCh0aGlzKTtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGNhbnZhczogdCxcbiAgICAgICAgICBjdHg6IGVcbiAgICAgICAgfSA9IHRoaXM7XG4gICAgICAgIGUuc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgICAgICBlLmNsZWFyUmVjdCgwLCAwLCB0LndpZHRoLCB0LmhlaWdodCk7XG4gICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX3puLCBfem4yKS5jYWxsKHRoaXMpO1xuICAgICAgICBmb3IgKGNvbnN0IHQgb2YgdGhpcy5iZXppZXJQYXRoMkQpIGUuc3Ryb2tlKHQpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX0huMih0KSB7XG4gICAgICAgIHRoaXMuY2FudmFzLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybGVhdmVcIiwgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9mbikpO1xuICAgICAgICB0aGlzLmNhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcm1vdmVcIiwgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9wbikpO1xuICAgICAgICB0aGlzLmNhbnZhcy5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfZ24pKTtcbiAgICAgICAgdGhpcy5jYW52YXMuYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfbW4pKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jYW52YXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfdW4pKTtcbiAgICAgICAgfSwgMTApO1xuICAgICAgICBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9qbiwgX2puMikuY2FsbCh0aGlzLCB0Lm9mZnNldFgsIHQub2Zmc2V0WSk7XG4gICAgICAgIHRoaXMuYWRkVG9Bbm5vdGF0aW9uU3RvcmFnZSgpO1xuICAgICAgICB0aGlzLnNldEluQmFja2dyb3VuZCgpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX2tuMigpIHtcbiAgICAgICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuICAgICAgICB0aGlzLmNhbnZhcy53aWR0aCA9IHRoaXMuY2FudmFzLmhlaWdodCA9IDA7XG4gICAgICAgIHRoaXMuY2FudmFzLmNsYXNzTmFtZSA9IFwiaW5rRWRpdG9yQ2FudmFzXCI7XG4gICAgICAgIF9jbGFzczQxLl9sMTBuUHJvbWlzZS5nZXQoXCJlZGl0b3JfaW5rX2NhbnZhc19hcmlhX2xhYmVsXCIpLnRoZW4odCA9PiB7XG4gICAgICAgICAgdmFyIF90aGlzJGNhbnZhcztcbiAgICAgICAgICByZXR1cm4gKF90aGlzJGNhbnZhcyA9IHRoaXMuY2FudmFzKSA9PT0gbnVsbCB8fCBfdGhpcyRjYW52YXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJGNhbnZhcy5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIsIHQpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kaXYuYXBwZW5kKHRoaXMuY2FudmFzKTtcbiAgICAgICAgdGhpcy5jdHggPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfTW4yKCkge1xuICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX245LCBuZXcgUmVzaXplT2JzZXJ2ZXIodCA9PiB7XG4gICAgICAgICAgY29uc3QgZSA9IHRbMF0uY29udGVudFJlY3Q7XG4gICAgICAgICAgZS53aWR0aCAmJiBlLmhlaWdodCAmJiB0aGlzLnNldERpbWVuc2lvbnMoZS53aWR0aCwgZS5oZWlnaHQpO1xuICAgICAgICB9KSk7XG4gICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfbjkpLm9ic2VydmUodGhpcy5kaXYpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX1JuMigpIHtcbiAgICAgICAgaWYgKCFfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0FuKSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBbdCwgZV0gPSB0aGlzLnBhcmVudERpbWVuc2lvbnM7XG4gICAgICAgIHRoaXMuY2FudmFzLndpZHRoID0gTWF0aC5jZWlsKHRoaXMud2lkdGggKiB0KTtcbiAgICAgICAgdGhpcy5jYW52YXMuaGVpZ2h0ID0gTWF0aC5jZWlsKHRoaXMuaGVpZ2h0ICogZSk7XG4gICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX3puLCBfem4yKS5jYWxsKHRoaXMpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX3FuMih0LCBlKSB7XG4gICAgICAgIGNvbnN0IG4gPSBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9XbiwgX1duMikuY2FsbCh0aGlzKSxcbiAgICAgICAgICBpID0gKHQgLSBuKSAvIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfZG4pLFxuICAgICAgICAgIHIgPSAoZSAtIG4pIC8gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9obik7XG4gICAgICAgIHRoaXMuc2NhbGVGYWN0b3IgPSBNYXRoLm1pbihpLCByKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF96bjIoKSB7XG4gICAgICAgIGNvbnN0IHQgPSBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9XbiwgX1duMikuY2FsbCh0aGlzKSAvIDI7XG4gICAgICAgIHRoaXMuY3R4LnNldFRyYW5zZm9ybSh0aGlzLnNjYWxlRmFjdG9yLCAwLCAwLCB0aGlzLnNjYWxlRmFjdG9yLCB0aGlzLnRyYW5zbGF0aW9uWCAqIHRoaXMuc2NhbGVGYWN0b3IgKyB0LCB0aGlzLnRyYW5zbGF0aW9uWSAqIHRoaXMuc2NhbGVGYWN0b3IgKyB0KTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF9Hbih0KSB7XG4gICAgICAgIGNvbnN0IGUgPSBuZXcgUGF0aDJEKCk7XG4gICAgICAgIGZvciAobGV0IG4gPSAwLCBpID0gdC5sZW5ndGg7IG4gPCBpOyBuKyspIHtcbiAgICAgICAgICBjb25zdCBbaSwgciwgcywgYV0gPSB0W25dO1xuICAgICAgICAgIDAgPT09IG4gJiYgZS5tb3ZlVG8oLi4uaSk7XG4gICAgICAgICAgZS5iZXppZXJDdXJ2ZVRvKHJbMF0sIHJbMV0sIHNbMF0sIHNbMV0sIGFbMF0sIGFbMV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX1ZuKHQsIGUsIG4pIHtcbiAgICAgICAgY29uc3QgW2ksIHIsIHMsIGFdID0gZTtcbiAgICAgICAgc3dpdGNoIChuKSB7XG4gICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgZm9yIChsZXQgZSA9IDAsIG4gPSB0Lmxlbmd0aDsgZSA8IG47IGUgKz0gMikge1xuICAgICAgICAgICAgICB0W2VdICs9IGk7XG4gICAgICAgICAgICAgIHRbZSArIDFdID0gYSAtIHRbZSArIDFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA5MDpcbiAgICAgICAgICAgIGZvciAobGV0IGUgPSAwLCBuID0gdC5sZW5ndGg7IGUgPCBuOyBlICs9IDIpIHtcbiAgICAgICAgICAgICAgY29uc3QgbiA9IHRbZV07XG4gICAgICAgICAgICAgIHRbZV0gPSB0W2UgKyAxXSArIGk7XG4gICAgICAgICAgICAgIHRbZSArIDFdID0gbiArIHI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDE4MDpcbiAgICAgICAgICAgIGZvciAobGV0IGUgPSAwLCBuID0gdC5sZW5ndGg7IGUgPCBuOyBlICs9IDIpIHtcbiAgICAgICAgICAgICAgdFtlXSA9IHMgLSB0W2VdO1xuICAgICAgICAgICAgICB0W2UgKyAxXSArPSByO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAyNzA6XG4gICAgICAgICAgICBmb3IgKGxldCBlID0gMCwgbiA9IHQubGVuZ3RoOyBlIDwgbjsgZSArPSAyKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG4gPSB0W2VdO1xuICAgICAgICAgICAgICB0W2VdID0gcyAtIHRbZSArIDFdO1xuICAgICAgICAgICAgICB0W2UgKyAxXSA9IGEgLSBuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcm90YXRpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfJG4odCwgZSwgbikge1xuICAgICAgICBjb25zdCBbaSwgciwgcywgYV0gPSBlO1xuICAgICAgICBzd2l0Y2ggKG4pIHtcbiAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICBmb3IgKGxldCBlID0gMCwgbiA9IHQubGVuZ3RoOyBlIDwgbjsgZSArPSAyKSB7XG4gICAgICAgICAgICAgIHRbZV0gLT0gaTtcbiAgICAgICAgICAgICAgdFtlICsgMV0gPSBhIC0gdFtlICsgMV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDkwOlxuICAgICAgICAgICAgZm9yIChsZXQgZSA9IDAsIG4gPSB0Lmxlbmd0aDsgZSA8IG47IGUgKz0gMikge1xuICAgICAgICAgICAgICBjb25zdCBuID0gdFtlXTtcbiAgICAgICAgICAgICAgdFtlXSA9IHRbZSArIDFdIC0gcjtcbiAgICAgICAgICAgICAgdFtlICsgMV0gPSBuIC0gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgMTgwOlxuICAgICAgICAgICAgZm9yIChsZXQgZSA9IDAsIG4gPSB0Lmxlbmd0aDsgZSA8IG47IGUgKz0gMikge1xuICAgICAgICAgICAgICB0W2VdID0gcyAtIHRbZV07XG4gICAgICAgICAgICAgIHRbZSArIDFdIC09IHI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIDI3MDpcbiAgICAgICAgICAgIGZvciAobGV0IGUgPSAwLCBuID0gdC5sZW5ndGg7IGUgPCBuOyBlICs9IDIpIHtcbiAgICAgICAgICAgICAgY29uc3QgbiA9IHRbZV07XG4gICAgICAgICAgICAgIHRbZV0gPSBhIC0gdFtlICsgMV07XG4gICAgICAgICAgICAgIHRbZSArIDFdID0gcyAtIG47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCByb3RhdGlvblwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF9YbjIodCwgZSwgbiwgaSkge1xuICAgICAgICBjb25zdCByID0gW10sXG4gICAgICAgICAgcyA9IHRoaXMudGhpY2tuZXNzIC8gMixcbiAgICAgICAgICBhID0gdCAqIGUgKyBzLFxuICAgICAgICAgIG8gPSB0ICogbiArIHM7XG4gICAgICAgIGZvciAoY29uc3QgZSBvZiB0aGlzLnBhdGhzKSB7XG4gICAgICAgICAgY29uc3QgbiA9IFtdLFxuICAgICAgICAgICAgcyA9IFtdO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwLCByID0gZS5sZW5ndGg7IGkgPCByOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IFtsLCBjLCBoLCBkXSA9IGVbaV0sXG4gICAgICAgICAgICAgIHUgPSB0ICogbFswXSArIGEsXG4gICAgICAgICAgICAgIHAgPSB0ICogbFsxXSArIG8sXG4gICAgICAgICAgICAgIGYgPSB0ICogY1swXSArIGEsXG4gICAgICAgICAgICAgIGcgPSB0ICogY1sxXSArIG8sXG4gICAgICAgICAgICAgIG0gPSB0ICogaFswXSArIGEsXG4gICAgICAgICAgICAgIGIgPSB0ICogaFsxXSArIG8sXG4gICAgICAgICAgICAgIHYgPSB0ICogZFswXSArIGEsXG4gICAgICAgICAgICAgIHkgPSB0ICogZFsxXSArIG87XG4gICAgICAgICAgICBpZiAoMCA9PT0gaSkge1xuICAgICAgICAgICAgICBuLnB1c2godSwgcCk7XG4gICAgICAgICAgICAgIHMucHVzaCh1LCBwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG4ucHVzaChmLCBnLCBtLCBiLCB2LCB5KTtcbiAgICAgICAgICAgIHMucHVzaChmLCBnKTtcbiAgICAgICAgICAgIGkgPT09IHIgLSAxICYmIHMucHVzaCh2LCB5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgci5wdXNoKHtcbiAgICAgICAgICAgIGJlemllcjogX2NsYXNzU3RhdGljUHJpdmF0ZU1ldGhvZEdldChfY2xhc3M0MSwgX2NsYXNzNDEsIF9WbikuY2FsbChfY2xhc3M0MSwgbiwgaSwgdGhpcy5yb3RhdGlvbiksXG4gICAgICAgICAgICBwb2ludHM6IF9jbGFzc1N0YXRpY1ByaXZhdGVNZXRob2RHZXQoX2NsYXNzNDEsIF9jbGFzczQxLCBfVm4pLmNhbGwoX2NsYXNzNDEsIHMsIGksIHRoaXMucm90YXRpb24pXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHI7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfS24yKCkge1xuICAgICAgICBsZXQgdCA9IDEgLyAwLFxuICAgICAgICAgIGUgPSAtMSAvIDAsXG4gICAgICAgICAgbiA9IDEgLyAwLFxuICAgICAgICAgIHIgPSAtMSAvIDA7XG4gICAgICAgIGZvciAoY29uc3QgcyBvZiB0aGlzLnBhdGhzKSBmb3IgKGNvbnN0IFthLCBvLCBsLCBjXSBvZiBzKSB7XG4gICAgICAgICAgY29uc3QgcyA9IGkuVXRpbC5iZXppZXJCb3VuZGluZ0JveCguLi5hLCAuLi5vLCAuLi5sLCAuLi5jKTtcbiAgICAgICAgICB0ID0gTWF0aC5taW4odCwgc1swXSk7XG4gICAgICAgICAgbiA9IE1hdGgubWluKG4sIHNbMV0pO1xuICAgICAgICAgIGUgPSBNYXRoLm1heChlLCBzWzJdKTtcbiAgICAgICAgICByID0gTWF0aC5tYXgociwgc1szXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFt0LCBuLCBlLCByXTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF9XbjIoKSB7XG4gICAgICAgIHJldHVybiBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3ZuKSA/IE1hdGguY2VpbCh0aGlzLnRoaWNrbmVzcyAqIHRoaXMucGFyZW50U2NhbGUpIDogMDtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF9UbjIoKSB7XG4gICAgICAgIGxldCB0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMF0gJiYgYXJndW1lbnRzWzBdO1xuICAgICAgICBpZiAodGhpcy5pc0VtcHR5KCkpIHJldHVybjtcbiAgICAgICAgaWYgKCFfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX3ZuKSkge1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX1BuLCBfUG4yKS5jYWxsKHRoaXMpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlID0gX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfS24sIF9LbjIpLmNhbGwodGhpcyksXG4gICAgICAgICAgbiA9IF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX1duLCBfV24yKS5jYWxsKHRoaXMpO1xuICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX2RuLCBNYXRoLm1heChyLkFubm90YXRpb25FZGl0b3IuTUlOX1NJWkUsIGVbMl0gLSBlWzBdKSk7XG4gICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfaG4sIE1hdGgubWF4KHIuQW5ub3RhdGlvbkVkaXRvci5NSU5fU0laRSwgZVszXSAtIGVbMV0pKTtcbiAgICAgICAgY29uc3QgaSA9IE1hdGguY2VpbChuICsgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9kbikgKiB0aGlzLnNjYWxlRmFjdG9yKSxcbiAgICAgICAgICBzID0gTWF0aC5jZWlsKG4gKyBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2huKSAqIHRoaXMuc2NhbGVGYWN0b3IpLFxuICAgICAgICAgIFthLCBvXSA9IHRoaXMucGFyZW50RGltZW5zaW9ucztcbiAgICAgICAgdGhpcy53aWR0aCA9IGkgLyBhO1xuICAgICAgICB0aGlzLmhlaWdodCA9IHMgLyBvO1xuICAgICAgICB0aGlzLnNldEFzcGVjdFJhdGlvKGksIHMpO1xuICAgICAgICBjb25zdCBsID0gdGhpcy50cmFuc2xhdGlvblgsXG4gICAgICAgICAgYyA9IHRoaXMudHJhbnNsYXRpb25ZO1xuICAgICAgICB0aGlzLnRyYW5zbGF0aW9uWCA9IC1lWzBdO1xuICAgICAgICB0aGlzLnRyYW5zbGF0aW9uWSA9IC1lWzFdO1xuICAgICAgICBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9SbiwgX1JuMikuY2FsbCh0aGlzKTtcbiAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfUG4sIF9QbjIpLmNhbGwodGhpcyk7XG4gICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfU24sIGkpO1xuICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX0VuLCBzKTtcbiAgICAgICAgdGhpcy5zZXREaW1zKGksIHMpO1xuICAgICAgICBjb25zdCBoID0gdCA/IG4gLyB0aGlzLnNjYWxlRmFjdG9yIC8gMiA6IDA7XG4gICAgICAgIHRoaXMudHJhbnNsYXRlKGwgLSB0aGlzLnRyYW5zbGF0aW9uWCAtIGgsIGMgLSB0aGlzLnRyYW5zbGF0aW9uWSAtIGgpO1xuICAgICAgfVxuICAgICAgX2RlZmluZVByb3BlcnR5KElua0VkaXRvciwgXCJfZGVmYXVsdENvbG9yXCIsIG51bGwpO1xuICAgICAgX2RlZmluZVByb3BlcnR5KElua0VkaXRvciwgXCJfZGVmYXVsdE9wYWNpdHlcIiwgMSk7XG4gICAgICBfZGVmaW5lUHJvcGVydHkoSW5rRWRpdG9yLCBcIl9kZWZhdWx0VGhpY2tuZXNzXCIsIDEpO1xuICAgICAgX2RlZmluZVByb3BlcnR5KElua0VkaXRvciwgXCJfbDEwblByb21pc2VcIiwgdm9pZCAwKTtcbiAgICAgIF9kZWZpbmVQcm9wZXJ0eShJbmtFZGl0b3IsIFwiX3R5cGVcIiwgXCJpbmtcIik7XG4gICAgICBlLklua0VkaXRvciA9IElua0VkaXRvcjtcbiAgICB9LCAodCwgZSwgbikgPT4ge1xuICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICB2YWx1ZTogITBcbiAgICAgIH0pO1xuICAgICAgZS5TdGFtcEVkaXRvciA9IHZvaWQgMDtcbiAgICAgIG4oMTQ4KTtcbiAgICAgIG4oMTUxKTtcbiAgICAgIHZhciBpID0gbigxNjMpLFxuICAgICAgICByID0gbigxKSxcbiAgICAgICAgcyA9IG4oMTY3KSxcbiAgICAgICAgYSA9IG4oMTk3KTtcbiAgICAgIHZhciBfWW4gPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfSm4gPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfUW4gPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfWm4gPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfdGkgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtNYXAoKTtcbiAgICAgIHZhciBfbjEwID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICB2YXIgX2VpID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICB2YXIgX25pID0gLyojX19QVVJFX18qL25ldyBXZWFrTWFwKCk7XG4gICAgICB2YXIgX2lpID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgICB2YXIgX2tuMyA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuICAgICAgdmFyIF9zaSA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuICAgICAgdmFyIF9haSA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuICAgICAgdmFyIF9yaSA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuICAgICAgdmFyIF9vaSA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuICAgICAgdmFyIF9NbjMgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbiAgICAgIGNsYXNzIFN0YW1wRWRpdG9yIGV4dGVuZHMgaS5Bbm5vdGF0aW9uRWRpdG9yIHtcbiAgICAgICAgY29uc3RydWN0b3IoX3QxOCkge1xuICAgICAgICAgIHN1cGVyKF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgX3QxOCksIHt9LCB7XG4gICAgICAgICAgICBuYW1lOiBcInN0YW1wRWRpdG9yXCJcbiAgICAgICAgICB9KSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEluaXRTcGVjKHRoaXMsIF9NbjMpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLCBfb2kpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLCBfcmkpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLCBfYWkpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLCBfc2kpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RJbml0U3BlYyh0aGlzLCBfa24zKTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlTWV0aG9kSW5pdFNwZWModGhpcywgX2lpKTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfWW4sIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfSm4sIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfUW4sIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfWm4sIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfdGksIHtcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRJbml0U3BlYyh0aGlzLCBfbjEwLCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBudWxsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX2VpLCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBudWxsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkSW5pdFNwZWModGhpcywgX25pLCB7XG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiAhMVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWm4sIF90MTguYml0bWFwVXJsKTtcbiAgICAgICAgfVxuICAgICAgICByZW1vdmUoKSB7XG4gICAgICAgICAgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfSm4pKSB7XG4gICAgICAgICAgICB2YXIgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0MTUsIF9jbGFzc1ByaXZhdGVGaWVsZEdldDE2O1xuICAgICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZbiwgbnVsbCk7XG4gICAgICAgICAgICB0aGlzLl91aU1hbmFnZXIuaW1hZ2VNYW5hZ2VyLmRlbGV0ZUlkKF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfSm4pKTtcbiAgICAgICAgICAgIChfY2xhc3NQcml2YXRlRmllbGRHZXQxNSA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfdGkpKSA9PT0gbnVsbCB8fCBfY2xhc3NQcml2YXRlRmllbGRHZXQxNSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2NsYXNzUHJpdmF0ZUZpZWxkR2V0MTUucmVtb3ZlKCk7XG4gICAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX3RpLCBudWxsKTtcbiAgICAgICAgICAgIChfY2xhc3NQcml2YXRlRmllbGRHZXQxNiA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfbjEwKSkgPT09IG51bGwgfHwgX2NsYXNzUHJpdmF0ZUZpZWxkR2V0MTYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jbGFzc1ByaXZhdGVGaWVsZEdldDE2LmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfbjEwLCBudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3VwZXIucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVidWlsZCgpIHtcbiAgICAgICAgICBzdXBlci5yZWJ1aWxkKCk7XG4gICAgICAgICAgaWYgKG51bGwgIT09IHRoaXMuZGl2KSB7XG4gICAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0puKSAmJiBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9paSwgX2lpMikuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuaXNBdHRhY2hlZFRvRE9NIHx8IHRoaXMucGFyZW50LmFkZCh0aGlzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb25jZUFkZGVkKCkge1xuICAgICAgICAgIHRoaXMuZGl2LmRyYWdnYWJsZSA9ICEwO1xuICAgICAgICAgIHRoaXMucGFyZW50LmFkZFVuZG9hYmxlRWRpdG9yKHRoaXMpO1xuICAgICAgICAgIHRoaXMuZGl2LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgaXNFbXB0eSgpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbCA9PT0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9RbikgJiYgbnVsbCA9PT0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZbikgJiYgbnVsbCA9PT0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9abik7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGlzUmVzaXphYmxlKCkge1xuICAgICAgICAgIHJldHVybiAhMDtcbiAgICAgICAgfVxuICAgICAgICByZW5kZXIoKSB7XG4gICAgICAgICAgaWYgKHRoaXMuZGl2KSByZXR1cm4gdGhpcy5kaXY7XG4gICAgICAgICAgbGV0IHQsIGU7XG4gICAgICAgICAgaWYgKHRoaXMud2lkdGgpIHtcbiAgICAgICAgICAgIHQgPSB0aGlzLng7XG4gICAgICAgICAgICBlID0gdGhpcy55O1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdXBlci5yZW5kZXIoKTtcbiAgICAgICAgICBpZiAoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZbikpIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX2tuMywgX2tuNCkuY2FsbCh0aGlzKTtlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGl2LmNsYXNzTGlzdC5hZGQoXCJsb2FkaW5nXCIpO1xuICAgICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfaWksIF9paTIpLmNhbGwodGhpcyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLndpZHRoKSB7XG4gICAgICAgICAgICBjb25zdCBbbiwgaV0gPSB0aGlzLnBhcmVudERpbWVuc2lvbnM7XG4gICAgICAgICAgICB0aGlzLnNldEF0KHQgKiBuLCBlICogaSwgdGhpcy53aWR0aCAqIG4sIHRoaXMuaGVpZ2h0ICogaSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aGlzLmRpdjtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgZGVzZXJpYWxpemUodCwgZSwgbikge1xuICAgICAgICAgIGlmICh0IGluc3RhbmNlb2YgYS5TdGFtcEFubm90YXRpb25FbGVtZW50KSByZXR1cm4gbnVsbDtcbiAgICAgICAgICBjb25zdCBpID0gc3VwZXIuZGVzZXJpYWxpemUodCwgZSwgbiksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHJlY3Q6IHIsXG4gICAgICAgICAgICAgIGJpdG1hcFVybDogcyxcbiAgICAgICAgICAgICAgYml0bWFwSWQ6IG8sXG4gICAgICAgICAgICAgIGlzU3ZnOiBsXG4gICAgICAgICAgICB9ID0gdDtcbiAgICAgICAgICBvICYmIG4uaW1hZ2VNYW5hZ2VyLmlzVmFsaWRJZChvKSA/IF9jbGFzc1ByaXZhdGVGaWVsZFNldChpLCBfSm4sIG8pIDogX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KGksIF9abiwgcyk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KGksIF9uaSwgbCk7XG4gICAgICAgICAgY29uc3QgW2MsIGhdID0gaS5wYWdlRGltZW5zaW9ucztcbiAgICAgICAgICBpLndpZHRoID0gKHJbMl0gLSByWzBdKSAvIGM7XG4gICAgICAgICAgaS5oZWlnaHQgPSAoclszXSAtIHJbMV0pIC8gaDtcbiAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgfVxuICAgICAgICBzZXJpYWxpemUoKSB7XG4gICAgICAgICAgbGV0IHQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiB2b2lkIDAgIT09IGFyZ3VtZW50c1swXSAmJiBhcmd1bWVudHNbMF0sXG4gICAgICAgICAgICBlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgdm9pZCAwICE9PSBhcmd1bWVudHNbMV0gPyBhcmd1bWVudHNbMV0gOiBudWxsO1xuICAgICAgICAgIGlmICh0aGlzLmlzRW1wdHkoKSkgcmV0dXJuIG51bGw7XG4gICAgICAgICAgY29uc3QgbiA9IHtcbiAgICAgICAgICAgIGFubm90YXRpb25UeXBlOiByLkFubm90YXRpb25FZGl0b3JUeXBlLlNUQU1QLFxuICAgICAgICAgICAgYml0bWFwSWQ6IF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfSm4pLFxuICAgICAgICAgICAgcGFnZUluZGV4OiB0aGlzLnBhZ2VJbmRleCxcbiAgICAgICAgICAgIHJlY3Q6IHRoaXMuZ2V0UmVjdCgwLCAwKSxcbiAgICAgICAgICAgIHJvdGF0aW9uOiB0aGlzLnJvdGF0aW9uLFxuICAgICAgICAgICAgaXNTdmc6IF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfbmkpXG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAodCkge1xuICAgICAgICAgICAgbi5iaXRtYXBVcmwgPSBfY2xhc3NQcml2YXRlTWV0aG9kR2V0KHRoaXMsIF9vaSwgX29pMikuY2FsbCh0aGlzLCAhMCk7XG4gICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG51bGwgPT09IGUpIHJldHVybiBuO1xuICAgICAgICAgIGUuc3RhbXBzIHx8IChlLnN0YW1wcyA9IG5ldyBNYXAoKSk7XG4gICAgICAgICAgY29uc3QgaSA9IF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfbmkpID8gKG4ucmVjdFsyXSAtIG4ucmVjdFswXSkgKiAobi5yZWN0WzNdIC0gbi5yZWN0WzFdKSA6IG51bGw7XG4gICAgICAgICAgaWYgKGUuc3RhbXBzLmhhcyhfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0puKSkpIHtcbiAgICAgICAgICAgIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX25pKSkge1xuICAgICAgICAgICAgICBjb25zdCB0ID0gZS5zdGFtcHMuZ2V0KF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfSm4pKTtcbiAgICAgICAgICAgICAgaWYgKGkgPiB0LmFyZWEpIHtcbiAgICAgICAgICAgICAgICB0LmFyZWEgPSBpO1xuICAgICAgICAgICAgICAgIHQuc2VyaWFsaXplZC5iaXRtYXAuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICB0LnNlcmlhbGl6ZWQuYml0bWFwID0gX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfb2ksIF9vaTIpLmNhbGwodGhpcywgITEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGUuc3RhbXBzLnNldChfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX0puKSwge1xuICAgICAgICAgICAgICBhcmVhOiBpLFxuICAgICAgICAgICAgICBzZXJpYWxpemVkOiBuXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG4uYml0bWFwID0gX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfb2ksIF9vaTIpLmNhbGwodGhpcywgITEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX2lpMigpIHtcbiAgICAgICAgaWYgKF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfSm4pKSB7XG4gICAgICAgICAgdGhpcy5fdWlNYW5hZ2VyLmltYWdlTWFuYWdlci5nZXRGcm9tSWQoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9KbikpLnRoZW4odCA9PiB7XG4gICAgICAgICAgICBpZiAodCkge1xuICAgICAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1luLCB0LmJpdG1hcCk7XG4gICAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX2tuMywgX2tuNCkuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH0gZWxzZSB0aGlzLnJlbW92ZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9abikpIHtcbiAgICAgICAgICBjb25zdCB0ID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9abik7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9abiwgbnVsbCk7XG4gICAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9RbiwgdGhpcy5fdWlNYW5hZ2VyLmltYWdlTWFuYWdlci5nZXRGcm9tVXJsKHQpLnRoZW4odCA9PiB7XG4gICAgICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1FuLCBudWxsKTtcbiAgICAgICAgICAgIGlmICh0KSB7XG4gICAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgYml0bWFwOiBfY2xhc3NQcml2YXRlRmllbGREZXN0cnVjdHVyZVNldCh0aGlzLCBfWW4pLnZhbHVlLFxuICAgICAgICAgICAgICAgIGlkOiBfY2xhc3NQcml2YXRlRmllbGREZXN0cnVjdHVyZVNldCh0aGlzLCBfSm4pLnZhbHVlLFxuICAgICAgICAgICAgICAgIGlzU3ZnOiBfY2xhc3NQcml2YXRlRmllbGREZXN0cnVjdHVyZVNldCh0aGlzLCBfbmkpLnZhbHVlXG4gICAgICAgICAgICAgIH0gPSB0KTtcbiAgICAgICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfa24zLCBfa240KS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfSBlbHNlIHRoaXMucmVtb3ZlKCk7XG4gICAgICAgICAgfSkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpO1xuICAgICAgICB0LnR5cGUgPSBcImZpbGVcIjtcbiAgICAgICAgdC5hY2NlcHQgPSBcImltYWdlLypcIjtcbiAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9RbiwgbmV3IFByb21pc2UoZSA9PiB7XG4gICAgICAgICAgdC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfUW4sIG51bGwpO1xuICAgICAgICAgICAgaWYgKHQuZmlsZXMgJiYgMCAhPT0gdC5maWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgY29uc3QgZSA9IGF3YWl0IHRoaXMuX3VpTWFuYWdlci5pbWFnZU1hbmFnZXIuZ2V0RnJvbUZpbGUodC5maWxlc1swXSk7XG4gICAgICAgICAgICAgIGlmICghZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgYml0bWFwOiBfY2xhc3NQcml2YXRlRmllbGREZXN0cnVjdHVyZVNldCh0aGlzLCBfWW4pLnZhbHVlLFxuICAgICAgICAgICAgICAgIGlkOiBfY2xhc3NQcml2YXRlRmllbGREZXN0cnVjdHVyZVNldCh0aGlzLCBfSm4pLnZhbHVlLFxuICAgICAgICAgICAgICAgIGlzU3ZnOiBfY2xhc3NQcml2YXRlRmllbGREZXN0cnVjdHVyZVNldCh0aGlzLCBfbmkpLnZhbHVlXG4gICAgICAgICAgICAgIH0gPSBlKTtcbiAgICAgICAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfa24zLCBfa240KS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfSBlbHNlIHRoaXMucmVtb3ZlKCk7XG4gICAgICAgICAgICBlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdC5hZGRFdmVudExpc3RlbmVyKFwiY2FuY2VsXCIsICgpID0+IHtcbiAgICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfUW4sIG51bGwpO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmUoKTtcbiAgICAgICAgICAgIGUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSkpO1xuICAgICAgICB0LmNsaWNrKCk7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfa240KCkge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgZGl2OiB0XG4gICAgICAgIH0gPSB0aGlzO1xuICAgICAgICBsZXQge1xuICAgICAgICAgIHdpZHRoOiBlLFxuICAgICAgICAgIGhlaWdodDogblxuICAgICAgICB9ID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9Zbik7XG4gICAgICAgIGNvbnN0IFtpLCByXSA9IHRoaXMucGFnZURpbWVuc2lvbnMsXG4gICAgICAgICAgcyA9IC43NTtcbiAgICAgICAgaWYgKHRoaXMud2lkdGgpIHtcbiAgICAgICAgICBlID0gdGhpcy53aWR0aCAqIGk7XG4gICAgICAgICAgbiA9IHRoaXMuaGVpZ2h0ICogcjtcbiAgICAgICAgfSBlbHNlIGlmIChlID4gcyAqIGkgfHwgbiA+IHMgKiByKSB7XG4gICAgICAgICAgY29uc3QgdCA9IE1hdGgubWluKHMgKiBpIC8gZSwgcyAqIHIgLyBuKTtcbiAgICAgICAgICBlICo9IHQ7XG4gICAgICAgICAgbiAqPSB0O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IFthLCBvXSA9IHRoaXMucGFyZW50RGltZW5zaW9ucztcbiAgICAgICAgdGhpcy5zZXREaW1zKGUgKiBhIC8gaSwgbiAqIG8gLyByKTtcbiAgICAgICAgY29uc3QgbCA9IF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfdGksIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIikpO1xuICAgICAgICB0LmFwcGVuZChsKTtcbiAgICAgICAgX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfcmksIF9yaTIpLmNhbGwodGhpcywgZSwgbik7XG4gICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX01uMywgX01uNCkuY2FsbCh0aGlzKTtcbiAgICAgICAgdC5jbGFzc0xpc3QucmVtb3ZlKFwibG9hZGluZ1wiKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF9zaTIodCwgZSkge1xuICAgICAgICBjb25zdCBbbiwgaV0gPSB0aGlzLnBhcmVudERpbWVuc2lvbnM7XG4gICAgICAgIHRoaXMud2lkdGggPSB0IC8gbjtcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBlIC8gaTtcbiAgICAgICAgdGhpcy5zZXREaW1zKHQsIGUpO1xuICAgICAgICB0aGlzLmZpeEFuZFNldFBvc2l0aW9uKCk7XG4gICAgICAgIG51bGwgIT09IF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfZWkpICYmIGNsZWFyVGltZW91dChfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX2VpKSk7XG4gICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfZWksIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfZWksIG51bGwpO1xuICAgICAgICAgIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX3JpLCBfcmkyKS5jYWxsKHRoaXMsIHQsIGUpO1xuICAgICAgICB9LCAyMDApKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF9haTIodCwgZSkge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgd2lkdGg6IG4sXG4gICAgICAgICAgaGVpZ2h0OiBpXG4gICAgICAgIH0gPSBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1luKTtcbiAgICAgICAgbGV0IHIgPSBuLFxuICAgICAgICAgIHMgPSBpLFxuICAgICAgICAgIGEgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1luKTtcbiAgICAgICAgZm9yICg7IHIgPiAyICogdCB8fCBzID4gMiAqIGU7KSB7XG4gICAgICAgICAgY29uc3QgbiA9IHIsXG4gICAgICAgICAgICBpID0gcztcbiAgICAgICAgICByID4gMiAqIHQgJiYgKHIgPSByID49IDE2Mzg0ID8gTWF0aC5mbG9vcihyIC8gMikgLSAxIDogTWF0aC5jZWlsKHIgLyAyKSk7XG4gICAgICAgICAgcyA+IDIgKiBlICYmIChzID0gcyA+PSAxNjM4NCA/IE1hdGguZmxvb3IocyAvIDIpIC0gMSA6IE1hdGguY2VpbChzIC8gMikpO1xuICAgICAgICAgIGNvbnN0IG8gPSBuZXcgT2Zmc2NyZWVuQ2FudmFzKHIsIHMpO1xuICAgICAgICAgIG8uZ2V0Q29udGV4dChcIjJkXCIpLmRyYXdJbWFnZShhLCAwLCAwLCBuLCBpLCAwLCAwLCByLCBzKTtcbiAgICAgICAgICBhID0gby50cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF9yaTIodCwgZSkge1xuICAgICAgICBjb25zdCBuID0gX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF90aSk7XG4gICAgICAgIGlmICghbiB8fCBuLndpZHRoID09PSB0ICYmIG4uaGVpZ2h0ID09PSBlKSByZXR1cm47XG4gICAgICAgIG4ud2lkdGggPSB0O1xuICAgICAgICBuLmhlaWdodCA9IGU7XG4gICAgICAgIGNvbnN0IGkgPSBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX25pKSA/IF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWW4pIDogX2NsYXNzUHJpdmF0ZU1ldGhvZEdldCh0aGlzLCBfYWksIF9haTIpLmNhbGwodGhpcywgdCwgZSksXG4gICAgICAgICAgciA9IG4uZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgICAgICByLmZpbHRlciA9IHRoaXMuX3VpTWFuYWdlci5oY21GaWx0ZXI7XG4gICAgICAgIHIuZHJhd0ltYWdlKGksIDAsIDAsIGkud2lkdGgsIGkuaGVpZ2h0LCAwLCAwLCB0LCBlKTtcbiAgICAgIH1cbiAgICAgIGZ1bmN0aW9uIF9vaTIodCkge1xuICAgICAgICBpZiAodCkge1xuICAgICAgICAgIGlmIChfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX25pKSkge1xuICAgICAgICAgICAgY29uc3QgdCA9IHRoaXMuX3VpTWFuYWdlci5pbWFnZU1hbmFnZXIuZ2V0U3ZnVXJsKF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfSm4pKTtcbiAgICAgICAgICAgIGlmICh0KSByZXR1cm4gdDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gICAgICAgICAgKHtcbiAgICAgICAgICAgIHdpZHRoOiB0LndpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0OiB0LmhlaWdodFxuICAgICAgICAgIH0gPSBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1luKSk7XG4gICAgICAgICAgdC5nZXRDb250ZXh0KFwiMmRcIikuZHJhd0ltYWdlKF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWW4pLCAwLCAwKTtcbiAgICAgICAgICByZXR1cm4gdC50b0RhdGFVUkwoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9uaSkpIHtcbiAgICAgICAgICBjb25zdCBbdCwgZV0gPSB0aGlzLnBhZ2VEaW1lbnNpb25zLFxuICAgICAgICAgICAgbiA9IE1hdGgucm91bmQodGhpcy53aWR0aCAqIHQgKiBzLlBpeGVsc1BlckluY2guUERGX1RPX0NTU19VTklUUyksXG4gICAgICAgICAgICBpID0gTWF0aC5yb3VuZCh0aGlzLmhlaWdodCAqIGUgKiBzLlBpeGVsc1BlckluY2guUERGX1RPX0NTU19VTklUUyksXG4gICAgICAgICAgICByID0gbmV3IE9mZnNjcmVlbkNhbnZhcyhuLCBpKTtcbiAgICAgICAgICByLmdldENvbnRleHQoXCIyZFwiKS5kcmF3SW1hZ2UoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZbiksIDAsIDAsIF9jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWW4pLndpZHRoLCBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1luKS5oZWlnaHQsIDAsIDAsIG4sIGkpO1xuICAgICAgICAgIHJldHVybiByLnRyYW5zZmVyVG9JbWFnZUJpdG1hcCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHJ1Y3R1cmVkQ2xvbmUoX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZbikpO1xuICAgICAgfVxuICAgICAgZnVuY3Rpb24gX01uNCgpIHtcbiAgICAgICAgX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9uMTAsIG5ldyBSZXNpemVPYnNlcnZlcih0ID0+IHtcbiAgICAgICAgICBjb25zdCBlID0gdFswXS5jb250ZW50UmVjdDtcbiAgICAgICAgICBlLndpZHRoICYmIGUuaGVpZ2h0ICYmIF9jbGFzc1ByaXZhdGVNZXRob2RHZXQodGhpcywgX3NpLCBfc2kyKS5jYWxsKHRoaXMsIGUud2lkdGgsIGUuaGVpZ2h0KTtcbiAgICAgICAgfSkpO1xuICAgICAgICBfY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX24xMCkub2JzZXJ2ZSh0aGlzLmRpdik7XG4gICAgICB9XG4gICAgICBfZGVmaW5lUHJvcGVydHkoU3RhbXBFZGl0b3IsIFwiX3R5cGVcIiwgXCJzdGFtcFwiKTtcbiAgICAgIGUuU3RhbXBFZGl0b3IgPSBTdGFtcEVkaXRvcjtcbiAgICB9XSxcbiAgICBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcbiAgZnVuY3Rpb24gX193X3BkZmpzX3JlcXVpcmVfXyh0KSB7XG4gICAgdmFyIGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bdF07XG4gICAgaWYgKHZvaWQgMCAhPT0gZSkgcmV0dXJuIGUuZXhwb3J0cztcbiAgICB2YXIgbiA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1t0XSA9IHtcbiAgICAgIGV4cG9ydHM6IHt9XG4gICAgfTtcbiAgICBfX3dlYnBhY2tfbW9kdWxlc19fW3RdLmNhbGwobi5leHBvcnRzLCBuLCBuLmV4cG9ydHMsIF9fd19wZGZqc19yZXF1aXJlX18pO1xuICAgIHJldHVybiBuLmV4cG9ydHM7XG4gIH1cbiAgdmFyIF9fbmVzdGVkX3dlYnBhY2tfZXhwb3J0c19fID0ge307XG4gICgoKSA9PiB7XG4gICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICB2YXIgdCA9IF9fbmVzdGVkX3dlYnBhY2tfZXhwb3J0c19fO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgdmFsdWU6ICEwXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwiQWJvcnRFeGNlcHRpb25cIiwge1xuICAgICAgZW51bWVyYWJsZTogITAsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIGUuQWJvcnRFeGNlcHRpb247XG4gICAgICB9XG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwiQW5ub3RhdGlvbkVkaXRvckxheWVyXCIsIHtcbiAgICAgIGVudW1lcmFibGU6ICEwLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBzLkFubm90YXRpb25FZGl0b3JMYXllcjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJBbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZVwiLCB7XG4gICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gZS5Bbm5vdGF0aW9uRWRpdG9yUGFyYW1zVHlwZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJBbm5vdGF0aW9uRWRpdG9yVHlwZVwiLCB7XG4gICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gZS5Bbm5vdGF0aW9uRWRpdG9yVHlwZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJBbm5vdGF0aW9uRWRpdG9yVUlNYW5hZ2VyXCIsIHtcbiAgICAgIGVudW1lcmFibGU6ICEwLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBhLkFubm90YXRpb25FZGl0b3JVSU1hbmFnZXI7XG4gICAgICB9XG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwiQW5ub3RhdGlvbkxheWVyXCIsIHtcbiAgICAgIGVudW1lcmFibGU6ICEwLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBvLkFubm90YXRpb25MYXllcjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJBbm5vdGF0aW9uTW9kZVwiLCB7XG4gICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gZS5Bbm5vdGF0aW9uTW9kZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJDTWFwQ29tcHJlc3Npb25UeXBlXCIsIHtcbiAgICAgIGVudW1lcmFibGU6ICEwLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBlLkNNYXBDb21wcmVzc2lvblR5cGU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwiRmVhdHVyZVRlc3RcIiwge1xuICAgICAgZW51bWVyYWJsZTogITAsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIGUuRmVhdHVyZVRlc3Q7XG4gICAgICB9XG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwiR2xvYmFsV29ya2VyT3B0aW9uc1wiLCB7XG4gICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gbC5HbG9iYWxXb3JrZXJPcHRpb25zO1xuICAgICAgfVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcIkltYWdlS2luZFwiLCB7XG4gICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gZS5JbWFnZUtpbmQ7XG4gICAgICB9XG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwiSW52YWxpZFBERkV4Y2VwdGlvblwiLCB7XG4gICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gZS5JbnZhbGlkUERGRXhjZXB0aW9uO1xuICAgICAgfVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcIk1pc3NpbmdQREZFeGNlcHRpb25cIiwge1xuICAgICAgZW51bWVyYWJsZTogITAsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIGUuTWlzc2luZ1BERkV4Y2VwdGlvbjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJPUFNcIiwge1xuICAgICAgZW51bWVyYWJsZTogITAsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIGUuT1BTO1xuICAgICAgfVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcIlBERkRhdGFSYW5nZVRyYW5zcG9ydFwiLCB7XG4gICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gbi5QREZEYXRhUmFuZ2VUcmFuc3BvcnQ7XG4gICAgICB9XG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwiUERGRGF0ZVN0cmluZ1wiLCB7XG4gICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gaS5QREZEYXRlU3RyaW5nO1xuICAgICAgfVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcIlBERldvcmtlclwiLCB7XG4gICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gbi5QREZXb3JrZXI7XG4gICAgICB9XG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwiUGFzc3dvcmRSZXNwb25zZXNcIiwge1xuICAgICAgZW51bWVyYWJsZTogITAsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIGUuUGFzc3dvcmRSZXNwb25zZXM7XG4gICAgICB9XG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwiUGVybWlzc2lvbkZsYWdcIiwge1xuICAgICAgZW51bWVyYWJsZTogITAsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIGUuUGVybWlzc2lvbkZsYWc7XG4gICAgICB9XG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwiUGl4ZWxzUGVySW5jaFwiLCB7XG4gICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gaS5QaXhlbHNQZXJJbmNoO1xuICAgICAgfVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcIlByb21pc2VDYXBhYmlsaXR5XCIsIHtcbiAgICAgIGVudW1lcmFibGU6ICEwLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBlLlByb21pc2VDYXBhYmlsaXR5O1xuICAgICAgfVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcIlJlbmRlcmluZ0NhbmNlbGxlZEV4Y2VwdGlvblwiLCB7XG4gICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gaS5SZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb247XG4gICAgICB9XG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwiU1ZHR3JhcGhpY3NcIiwge1xuICAgICAgZW51bWVyYWJsZTogITAsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIG4uU1ZHR3JhcGhpY3M7XG4gICAgICB9XG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwiVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uXCIsIHtcbiAgICAgIGVudW1lcmFibGU6ICEwLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBlLlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJVdGlsXCIsIHtcbiAgICAgIGVudW1lcmFibGU6ICEwLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBlLlV0aWw7XG4gICAgICB9XG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwiVmVyYm9zaXR5TGV2ZWxcIiwge1xuICAgICAgZW51bWVyYWJsZTogITAsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIGUuVmVyYm9zaXR5TGV2ZWw7XG4gICAgICB9XG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwiWGZhTGF5ZXJcIiwge1xuICAgICAgZW51bWVyYWJsZTogITAsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIGMuWGZhTGF5ZXI7XG4gICAgICB9XG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwiYnVpbGRcIiwge1xuICAgICAgZW51bWVyYWJsZTogITAsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIG4uYnVpbGQ7XG4gICAgICB9XG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwiY3JlYXRlVmFsaWRBYnNvbHV0ZVVybFwiLCB7XG4gICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gZS5jcmVhdGVWYWxpZEFic29sdXRlVXJsO1xuICAgICAgfVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcImdldERvY3VtZW50XCIsIHtcbiAgICAgIGVudW1lcmFibGU6ICEwLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBuLmdldERvY3VtZW50O1xuICAgICAgfVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcImdldEZpbGVuYW1lRnJvbVVybFwiLCB7XG4gICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gaS5nZXRGaWxlbmFtZUZyb21Vcmw7XG4gICAgICB9XG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwiZ2V0UGRmRmlsZW5hbWVGcm9tVXJsXCIsIHtcbiAgICAgIGVudW1lcmFibGU6ICEwLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBpLmdldFBkZkZpbGVuYW1lRnJvbVVybDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJnZXRYZmFQYWdlVmlld3BvcnRcIiwge1xuICAgICAgZW51bWVyYWJsZTogITAsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIGkuZ2V0WGZhUGFnZVZpZXdwb3J0O1xuICAgICAgfVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcImlzRGF0YVNjaGVtZVwiLCB7XG4gICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gaS5pc0RhdGFTY2hlbWU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwiaXNQZGZGaWxlXCIsIHtcbiAgICAgIGVudW1lcmFibGU6ICEwLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBpLmlzUGRmRmlsZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJsb2FkU2NyaXB0XCIsIHtcbiAgICAgIGVudW1lcmFibGU6ICEwLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBpLmxvYWRTY3JpcHQ7XG4gICAgICB9XG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwibm9ybWFsaXplVW5pY29kZVwiLCB7XG4gICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gZS5ub3JtYWxpemVVbmljb2RlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInJlbmRlclRleHRMYXllclwiLCB7XG4gICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gci5yZW5kZXJUZXh0TGF5ZXI7XG4gICAgICB9XG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwic2V0TGF5ZXJEaW1lbnNpb25zXCIsIHtcbiAgICAgIGVudW1lcmFibGU6ICEwLFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgIHJldHVybiBpLnNldExheWVyRGltZW5zaW9ucztcbiAgICAgIH1cbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgXCJzaGFkb3dcIiwge1xuICAgICAgZW51bWVyYWJsZTogITAsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIGUuc2hhZG93O1xuICAgICAgfVxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBcInVwZGF0ZVRleHRMYXllclwiLCB7XG4gICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gci51cGRhdGVUZXh0TGF5ZXI7XG4gICAgICB9XG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwidmVyc2lvblwiLCB7XG4gICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gbi52ZXJzaW9uO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHZhciBlID0gX193X3BkZmpzX3JlcXVpcmVfXygxKSxcbiAgICAgIG4gPSBfX3dfcGRmanNfcmVxdWlyZV9fKDEyNCksXG4gICAgICBpID0gX193X3BkZmpzX3JlcXVpcmVfXygxNjcpLFxuICAgICAgciA9IF9fd19wZGZqc19yZXF1aXJlX18oMTk0KSxcbiAgICAgIHMgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDE5NSksXG4gICAgICBhID0gX193X3BkZmpzX3JlcXVpcmVfXygxNjQpLFxuICAgICAgbyA9IF9fd19wZGZqc19yZXF1aXJlX18oMTk3KSxcbiAgICAgIGwgPSBfX3dfcGRmanNfcmVxdWlyZV9fKDE3NSksXG4gICAgICBjID0gX193X3BkZmpzX3JlcXVpcmVfXygyMDApO1xuICB9KSgpO1xuICByZXR1cm4gX19uZXN0ZWRfd2VicGFja19leHBvcnRzX187XG59KSgpKTtcblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9wZGYuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1jYWxsYWJsZS5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgaXNDYWxsYWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pcy1jYWxsYWJsZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWNhbGxhYmxlLmpzXCIpO1xudmFyIHRyeVRvU3RyaW5nID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90cnktdG8tc3RyaW5nLmpzXCIpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogSXNDYWxsYWJsZShhcmd1bWVudCkgaXMgdHJ1ZWBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc0NhbGxhYmxlKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgZnVuY3Rpb24nKTtcbn07XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1jYWxsYWJsZS5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNvbnN0cnVjdG9yLmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBpc0NvbnN0cnVjdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3IuanNcIik7XG52YXIgdHJ5VG9TdHJpbmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RyeS10by1zdHJpbmcuanNcIik7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ29uc3RydWN0b3IoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBjb25zdHJ1Y3RvcicpO1xufTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNvbnN0cnVjdG9yLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlLmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBpc0NhbGxhYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY2FsbGFibGUuanNcIik7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmICh0eXBlb2YgYXJndW1lbnQgPT0gJ29iamVjdCcgfHwgaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgJFR5cGVFcnJvcihcIkNhbid0IHNldCBcIiArICRTdHJpbmcoYXJndW1lbnQpICsgJyBhcyBhIHByb3RvdHlwZScpO1xufTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZS5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMuanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIHdlbGxLbm93blN5bWJvbCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzXCIpO1xudmFyIGNyZWF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZS5qc1wiKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanNcIikuZik7XG5cbnZhciBVTlNDT1BBQkxFUyA9IHdlbGxLbm93blN5bWJvbCgndW5zY29wYWJsZXMnKTtcbnZhciBBcnJheVByb3RvdHlwZSA9IEFycmF5LnByb3RvdHlwZTtcblxuLy8gQXJyYXkucHJvdG90eXBlW0BAdW5zY29wYWJsZXNdXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS1AQHVuc2NvcGFibGVzXG5pZiAoQXJyYXlQcm90b3R5cGVbVU5TQ09QQUJMRVNdID09IHVuZGVmaW5lZCkge1xuICBkZWZpbmVQcm9wZXJ0eShBcnJheVByb3RvdHlwZSwgVU5TQ09QQUJMRVMsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgdmFsdWU6IGNyZWF0ZShudWxsKVxuICB9KTtcbn1cblxuLy8gYWRkIGEga2V5IHRvIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIEFycmF5UHJvdG90eXBlW1VOU0NPUEFCTEVTXVtrZXldID0gdHJ1ZTtcbn07XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FkdmFuY2Utc3RyaW5nLWluZGV4LmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBjaGFyQXQgPSAoX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlLmpzXCIpLmNoYXJBdCk7XG5cbi8vIGBBZHZhbmNlU3RyaW5nSW5kZXhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hZHZhbmNlc3RyaW5naW5kZXhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFMsIGluZGV4LCB1bmljb2RlKSB7XG4gIHJldHVybiBpbmRleCArICh1bmljb2RlID8gY2hhckF0KFMsIGluZGV4KS5sZW5ndGggOiAxKTtcbn07XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYWR2YW5jZS1zdHJpbmctaW5kZXguanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYW4taW5zdGFuY2UuanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIGlzUHJvdG90eXBlT2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZiAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanNcIik7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgUHJvdG90eXBlKSB7XG4gIGlmIChpc1Byb3RvdHlwZU9mKFByb3RvdHlwZSwgaXQpKSByZXR1cm4gaXQ7XG4gIHRocm93ICRUeXBlRXJyb3IoJ0luY29ycmVjdCBpbnZvY2F0aW9uJyk7XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLWluc3RhbmNlLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaXMtb2JqZWN0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtb2JqZWN0LmpzXCIpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBUeXBlKGFyZ3VtZW50KSBpcyBPYmplY3RgXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoaXNPYmplY3QoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93ICRUeXBlRXJyb3IoJFN0cmluZyhhcmd1bWVudCkgKyAnIGlzIG5vdCBhbiBvYmplY3QnKTtcbn07XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYW4tb2JqZWN0LmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci1iYXNpYy1kZXRlY3Rpb24uanMiOigobW9kdWxlKT0+e2V2YWwoIlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXR5cGVkLWFycmF5cyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBBcnJheUJ1ZmZlciAhPSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgRGF0YVZpZXcgIT0gJ3VuZGVmaW5lZCc7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLWJhc2ljLWRldGVjdGlvbi5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1idWZmZXItbm9uLWV4dGVuc2libGUuanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxuLy8gRkYyNi0gYnVnOiBBcnJheUJ1ZmZlcnMgYXJlIG5vbi1leHRlbnNpYmxlLCBidXQgT2JqZWN0LmlzRXh0ZW5zaWJsZSBkb2VzIG5vdCByZXBvcnQgaXRcbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mYWlscyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciA9PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcig4KTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWlzZXh0ZW5zaWJsZSwgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBpZiAoT2JqZWN0LmlzRXh0ZW5zaWJsZShidWZmZXIpKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoYnVmZmVyLCAnYScsIHsgdmFsdWU6IDggfSk7XG4gIH1cbn0pO1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci1ub24tZXh0ZW5zaWJsZS5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlLmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBOQVRJVkVfQVJSQVlfQlVGRkVSID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci1iYXNpYy1kZXRlY3Rpb24gKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1idWZmZXItYmFzaWMtZGV0ZWN0aW9uLmpzXCIpO1xudmFyIERFU0NSSVBUT1JTID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanNcIik7XG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2dsb2JhbCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dsb2JhbC5qc1wiKTtcbnZhciBpc0NhbGxhYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY2FsbGFibGUuanNcIik7XG52YXIgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaXMtb2JqZWN0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtb2JqZWN0LmpzXCIpO1xudmFyIGhhc093biA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qc1wiKTtcbnZhciBjbGFzc29mID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2NsYXNzb2YgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jbGFzc29mLmpzXCIpO1xudmFyIHRyeVRvU3RyaW5nID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90cnktdG8tc3RyaW5nLmpzXCIpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanNcIik7XG52YXIgZGVmaW5lQnVpbHRJbiA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4gKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanNcIik7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvciAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3Nvci5qc1wiKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mLmpzXCIpO1xudmFyIGdldFByb3RvdHlwZU9mID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YuanNcIik7XG52YXIgc2V0UHJvdG90eXBlT2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZi5qc1wiKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC5qc1wiKTtcbnZhciB1aWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvdWlkICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdWlkLmpzXCIpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qc1wiKTtcblxudmFyIGVuZm9yY2VJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5lbmZvcmNlO1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcbnZhciBJbnQ4QXJyYXkgPSBnbG9iYWwuSW50OEFycmF5O1xudmFyIEludDhBcnJheVByb3RvdHlwZSA9IEludDhBcnJheSAmJiBJbnQ4QXJyYXkucHJvdG90eXBlO1xudmFyIFVpbnQ4Q2xhbXBlZEFycmF5ID0gZ2xvYmFsLlVpbnQ4Q2xhbXBlZEFycmF5O1xudmFyIFVpbnQ4Q2xhbXBlZEFycmF5UHJvdG90eXBlID0gVWludDhDbGFtcGVkQXJyYXkgJiYgVWludDhDbGFtcGVkQXJyYXkucHJvdG90eXBlO1xudmFyIFR5cGVkQXJyYXkgPSBJbnQ4QXJyYXkgJiYgZ2V0UHJvdG90eXBlT2YoSW50OEFycmF5KTtcbnZhciBUeXBlZEFycmF5UHJvdG90eXBlID0gSW50OEFycmF5UHJvdG90eXBlICYmIGdldFByb3RvdHlwZU9mKEludDhBcnJheVByb3RvdHlwZSk7XG52YXIgT2JqZWN0UHJvdG90eXBlID0gT2JqZWN0LnByb3RvdHlwZTtcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciBUWVBFRF9BUlJBWV9UQUcgPSB1aWQoJ1RZUEVEX0FSUkFZX1RBRycpO1xudmFyIFRZUEVEX0FSUkFZX0NPTlNUUlVDVE9SID0gJ1R5cGVkQXJyYXlDb25zdHJ1Y3Rvcic7XG4vLyBGaXhpbmcgbmF0aXZlIHR5cGVkIGFycmF5cyBpbiBPcGVyYSBQcmVzdG8gY3Jhc2hlcyB0aGUgYnJvd3Nlciwgc2VlICM1OTVcbnZhciBOQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTID0gTkFUSVZFX0FSUkFZX0JVRkZFUiAmJiAhIXNldFByb3RvdHlwZU9mICYmIGNsYXNzb2YoZ2xvYmFsLm9wZXJhKSAhPT0gJ09wZXJhJztcbnZhciBUWVBFRF9BUlJBWV9UQUdfUkVRVUlSRUQgPSBmYWxzZTtcbnZhciBOQU1FLCBDb25zdHJ1Y3RvciwgUHJvdG90eXBlO1xuXG52YXIgVHlwZWRBcnJheUNvbnN0cnVjdG9yc0xpc3QgPSB7XG4gIEludDhBcnJheTogMSxcbiAgVWludDhBcnJheTogMSxcbiAgVWludDhDbGFtcGVkQXJyYXk6IDEsXG4gIEludDE2QXJyYXk6IDIsXG4gIFVpbnQxNkFycmF5OiAyLFxuICBJbnQzMkFycmF5OiA0LFxuICBVaW50MzJBcnJheTogNCxcbiAgRmxvYXQzMkFycmF5OiA0LFxuICBGbG9hdDY0QXJyYXk6IDhcbn07XG5cbnZhciBCaWdJbnRBcnJheUNvbnN0cnVjdG9yc0xpc3QgPSB7XG4gIEJpZ0ludDY0QXJyYXk6IDgsXG4gIEJpZ1VpbnQ2NEFycmF5OiA4XG59O1xuXG52YXIgaXNWaWV3ID0gZnVuY3Rpb24gaXNWaWV3KGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gZmFsc2U7XG4gIHZhciBrbGFzcyA9IGNsYXNzb2YoaXQpO1xuICByZXR1cm4ga2xhc3MgPT09ICdEYXRhVmlldydcbiAgICB8fCBoYXNPd24oVHlwZWRBcnJheUNvbnN0cnVjdG9yc0xpc3QsIGtsYXNzKVxuICAgIHx8IGhhc093bihCaWdJbnRBcnJheUNvbnN0cnVjdG9yc0xpc3QsIGtsYXNzKTtcbn07XG5cbnZhciBnZXRUeXBlZEFycmF5Q29uc3RydWN0b3IgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHByb3RvID0gZ2V0UHJvdG90eXBlT2YoaXQpO1xuICBpZiAoIWlzT2JqZWN0KHByb3RvKSkgcmV0dXJuO1xuICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHByb3RvKTtcbiAgcmV0dXJuIChzdGF0ZSAmJiBoYXNPd24oc3RhdGUsIFRZUEVEX0FSUkFZX0NPTlNUUlVDVE9SKSkgPyBzdGF0ZVtUWVBFRF9BUlJBWV9DT05TVFJVQ1RPUl0gOiBnZXRUeXBlZEFycmF5Q29uc3RydWN0b3IocHJvdG8pO1xufTtcblxudmFyIGlzVHlwZWRBcnJheSA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIGZhbHNlO1xuICB2YXIga2xhc3MgPSBjbGFzc29mKGl0KTtcbiAgcmV0dXJuIGhhc093bihUeXBlZEFycmF5Q29uc3RydWN0b3JzTGlzdCwga2xhc3MpXG4gICAgfHwgaGFzT3duKEJpZ0ludEFycmF5Q29uc3RydWN0b3JzTGlzdCwga2xhc3MpO1xufTtcblxudmFyIGFUeXBlZEFycmF5ID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpc1R5cGVkQXJyYXkoaXQpKSByZXR1cm4gaXQ7XG4gIHRocm93IFR5cGVFcnJvcignVGFyZ2V0IGlzIG5vdCBhIHR5cGVkIGFycmF5Jyk7XG59O1xuXG52YXIgYVR5cGVkQXJyYXlDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChDKSB7XG4gIGlmIChpc0NhbGxhYmxlKEMpICYmICghc2V0UHJvdG90eXBlT2YgfHwgaXNQcm90b3R5cGVPZihUeXBlZEFycmF5LCBDKSkpIHJldHVybiBDO1xuICB0aHJvdyBUeXBlRXJyb3IodHJ5VG9TdHJpbmcoQykgKyAnIGlzIG5vdCBhIHR5cGVkIGFycmF5IGNvbnN0cnVjdG9yJyk7XG59O1xuXG52YXIgZXhwb3J0VHlwZWRBcnJheU1ldGhvZCA9IGZ1bmN0aW9uIChLRVksIHByb3BlcnR5LCBmb3JjZWQsIG9wdGlvbnMpIHtcbiAgaWYgKCFERVNDUklQVE9SUykgcmV0dXJuO1xuICBpZiAoZm9yY2VkKSBmb3IgKHZhciBBUlJBWSBpbiBUeXBlZEFycmF5Q29uc3RydWN0b3JzTGlzdCkge1xuICAgIHZhciBUeXBlZEFycmF5Q29uc3RydWN0b3IgPSBnbG9iYWxbQVJSQVldO1xuICAgIGlmIChUeXBlZEFycmF5Q29uc3RydWN0b3IgJiYgaGFzT3duKFR5cGVkQXJyYXlDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIEtFWSkpIHRyeSB7XG4gICAgICBkZWxldGUgVHlwZWRBcnJheUNvbnN0cnVjdG9yLnByb3RvdHlwZVtLRVldO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBvbGQgV2ViS2l0IGJ1ZyAtIHNvbWUgbWV0aG9kcyBhcmUgbm9uLWNvbmZpZ3VyYWJsZVxuICAgICAgdHJ5IHtcbiAgICAgICAgVHlwZWRBcnJheUNvbnN0cnVjdG9yLnByb3RvdHlwZVtLRVldID0gcHJvcGVydHk7XG4gICAgICB9IGNhdGNoIChlcnJvcjIpIHsgLyogZW1wdHkgKi8gfVxuICAgIH1cbiAgfVxuICBpZiAoIVR5cGVkQXJyYXlQcm90b3R5cGVbS0VZXSB8fCBmb3JjZWQpIHtcbiAgICBkZWZpbmVCdWlsdEluKFR5cGVkQXJyYXlQcm90b3R5cGUsIEtFWSwgZm9yY2VkID8gcHJvcGVydHlcbiAgICAgIDogTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyAmJiBJbnQ4QXJyYXlQcm90b3R5cGVbS0VZXSB8fCBwcm9wZXJ0eSwgb3B0aW9ucyk7XG4gIH1cbn07XG5cbnZhciBleHBvcnRUeXBlZEFycmF5U3RhdGljTWV0aG9kID0gZnVuY3Rpb24gKEtFWSwgcHJvcGVydHksIGZvcmNlZCkge1xuICB2YXIgQVJSQVksIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcjtcbiAgaWYgKCFERVNDUklQVE9SUykgcmV0dXJuO1xuICBpZiAoc2V0UHJvdG90eXBlT2YpIHtcbiAgICBpZiAoZm9yY2VkKSBmb3IgKEFSUkFZIGluIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNMaXN0KSB7XG4gICAgICBUeXBlZEFycmF5Q29uc3RydWN0b3IgPSBnbG9iYWxbQVJSQVldO1xuICAgICAgaWYgKFR5cGVkQXJyYXlDb25zdHJ1Y3RvciAmJiBoYXNPd24oVHlwZWRBcnJheUNvbnN0cnVjdG9yLCBLRVkpKSB0cnkge1xuICAgICAgICBkZWxldGUgVHlwZWRBcnJheUNvbnN0cnVjdG9yW0tFWV07XG4gICAgICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gICAgfVxuICAgIGlmICghVHlwZWRBcnJheVtLRVldIHx8IGZvcmNlZCkge1xuICAgICAgLy8gVjggfiBDaHJvbWUgNDktNTAgYCVUeXBlZEFycmF5JWAgbWV0aG9kcyBhcmUgbm9uLXdyaXRhYmxlIG5vbi1jb25maWd1cmFibGVcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBkZWZpbmVCdWlsdEluKFR5cGVkQXJyYXksIEtFWSwgZm9yY2VkID8gcHJvcGVydHkgOiBOQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTICYmIFR5cGVkQXJyYXlbS0VZXSB8fCBwcm9wZXJ0eSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gICAgfSBlbHNlIHJldHVybjtcbiAgfVxuICBmb3IgKEFSUkFZIGluIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNMaXN0KSB7XG4gICAgVHlwZWRBcnJheUNvbnN0cnVjdG9yID0gZ2xvYmFsW0FSUkFZXTtcbiAgICBpZiAoVHlwZWRBcnJheUNvbnN0cnVjdG9yICYmICghVHlwZWRBcnJheUNvbnN0cnVjdG9yW0tFWV0gfHwgZm9yY2VkKSkge1xuICAgICAgZGVmaW5lQnVpbHRJbihUeXBlZEFycmF5Q29uc3RydWN0b3IsIEtFWSwgcHJvcGVydHkpO1xuICAgIH1cbiAgfVxufTtcblxuZm9yIChOQU1FIGluIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNMaXN0KSB7XG4gIENvbnN0cnVjdG9yID0gZ2xvYmFsW05BTUVdO1xuICBQcm90b3R5cGUgPSBDb25zdHJ1Y3RvciAmJiBDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIGlmIChQcm90b3R5cGUpIGVuZm9yY2VJbnRlcm5hbFN0YXRlKFByb3RvdHlwZSlbVFlQRURfQVJSQVlfQ09OU1RSVUNUT1JdID0gQ29uc3RydWN0b3I7XG4gIGVsc2UgTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyA9IGZhbHNlO1xufVxuXG5mb3IgKE5BTUUgaW4gQmlnSW50QXJyYXlDb25zdHJ1Y3RvcnNMaXN0KSB7XG4gIENvbnN0cnVjdG9yID0gZ2xvYmFsW05BTUVdO1xuICBQcm90b3R5cGUgPSBDb25zdHJ1Y3RvciAmJiBDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIGlmIChQcm90b3R5cGUpIGVuZm9yY2VJbnRlcm5hbFN0YXRlKFByb3RvdHlwZSlbVFlQRURfQVJSQVlfQ09OU1RSVUNUT1JdID0gQ29uc3RydWN0b3I7XG59XG5cbi8vIFdlYktpdCBidWcgLSB0eXBlZCBhcnJheXMgY29uc3RydWN0b3JzIHByb3RvdHlwZSBpcyBPYmplY3QucHJvdG90eXBlXG5pZiAoIU5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1MgfHwgIWlzQ2FsbGFibGUoVHlwZWRBcnJheSkgfHwgVHlwZWRBcnJheSA9PT0gRnVuY3Rpb24ucHJvdG90eXBlKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zaGFkb3cgLS0gc2FmZVxuICBUeXBlZEFycmF5ID0gZnVuY3Rpb24gVHlwZWRBcnJheSgpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ0luY29ycmVjdCBpbnZvY2F0aW9uJyk7XG4gIH07XG4gIGlmIChOQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTKSBmb3IgKE5BTUUgaW4gVHlwZWRBcnJheUNvbnN0cnVjdG9yc0xpc3QpIHtcbiAgICBpZiAoZ2xvYmFsW05BTUVdKSBzZXRQcm90b3R5cGVPZihnbG9iYWxbTkFNRV0sIFR5cGVkQXJyYXkpO1xuICB9XG59XG5cbmlmICghTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyB8fCAhVHlwZWRBcnJheVByb3RvdHlwZSB8fCBUeXBlZEFycmF5UHJvdG90eXBlID09PSBPYmplY3RQcm90b3R5cGUpIHtcbiAgVHlwZWRBcnJheVByb3RvdHlwZSA9IFR5cGVkQXJyYXkucHJvdG90eXBlO1xuICBpZiAoTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUykgZm9yIChOQU1FIGluIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNMaXN0KSB7XG4gICAgaWYgKGdsb2JhbFtOQU1FXSkgc2V0UHJvdG90eXBlT2YoZ2xvYmFsW05BTUVdLnByb3RvdHlwZSwgVHlwZWRBcnJheVByb3RvdHlwZSk7XG4gIH1cbn1cblxuLy8gV2ViS2l0IGJ1ZyAtIG9uZSBtb3JlIG9iamVjdCBpbiBVaW50OENsYW1wZWRBcnJheSBwcm90b3R5cGUgY2hhaW5cbmlmIChOQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTICYmIGdldFByb3RvdHlwZU9mKFVpbnQ4Q2xhbXBlZEFycmF5UHJvdG90eXBlKSAhPT0gVHlwZWRBcnJheVByb3RvdHlwZSkge1xuICBzZXRQcm90b3R5cGVPZihVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSwgVHlwZWRBcnJheVByb3RvdHlwZSk7XG59XG5cbmlmIChERVNDUklQVE9SUyAmJiAhaGFzT3duKFR5cGVkQXJyYXlQcm90b3R5cGUsIFRPX1NUUklOR19UQUcpKSB7XG4gIFRZUEVEX0FSUkFZX1RBR19SRVFVSVJFRCA9IHRydWU7XG4gIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihUeXBlZEFycmF5UHJvdG90eXBlLCBUT19TVFJJTkdfVEFHLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0KHRoaXMpID8gdGhpc1tUWVBFRF9BUlJBWV9UQUddIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgfSk7XG4gIGZvciAoTkFNRSBpbiBUeXBlZEFycmF5Q29uc3RydWN0b3JzTGlzdCkgaWYgKGdsb2JhbFtOQU1FXSkge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShnbG9iYWxbTkFNRV0sIFRZUEVEX0FSUkFZX1RBRywgTkFNRSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIE5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1M6IE5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1MsXG4gIFRZUEVEX0FSUkFZX1RBRzogVFlQRURfQVJSQVlfVEFHX1JFUVVJUkVEICYmIFRZUEVEX0FSUkFZX1RBRyxcbiAgYVR5cGVkQXJyYXk6IGFUeXBlZEFycmF5LFxuICBhVHlwZWRBcnJheUNvbnN0cnVjdG9yOiBhVHlwZWRBcnJheUNvbnN0cnVjdG9yLFxuICBleHBvcnRUeXBlZEFycmF5TWV0aG9kOiBleHBvcnRUeXBlZEFycmF5TWV0aG9kLFxuICBleHBvcnRUeXBlZEFycmF5U3RhdGljTWV0aG9kOiBleHBvcnRUeXBlZEFycmF5U3RhdGljTWV0aG9kLFxuICBnZXRUeXBlZEFycmF5Q29uc3RydWN0b3I6IGdldFR5cGVkQXJyYXlDb25zdHJ1Y3RvcixcbiAgaXNWaWV3OiBpc1ZpZXcsXG4gIGlzVHlwZWRBcnJheTogaXNUeXBlZEFycmF5LFxuICBUeXBlZEFycmF5OiBUeXBlZEFycmF5LFxuICBUeXBlZEFycmF5UHJvdG90eXBlOiBUeXBlZEFycmF5UHJvdG90eXBlXG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci12aWV3LWNvcmUuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZ2xvYmFsICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2xvYmFsLmpzXCIpO1xudmFyIHVuY3VycnlUaGlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qc1wiKTtcbnZhciBERVNDUklQVE9SUyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9kZXNjcmlwdG9ycyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Rlc2NyaXB0b3JzLmpzXCIpO1xudmFyIE5BVElWRV9BUlJBWV9CVUZGRVIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLWJhc2ljLWRldGVjdGlvbiAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci1iYXNpYy1kZXRlY3Rpb24uanNcIik7XG52YXIgRnVuY3Rpb25OYW1lID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzXCIpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanNcIik7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvciAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3Nvci5qc1wiKTtcbnZhciBkZWZpbmVCdWlsdElucyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW5zICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWlucy5qc1wiKTtcbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mYWlscyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzXCIpO1xudmFyIGFuSW5zdGFuY2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hbi1pbnN0YW5jZS5qc1wiKTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHkgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5LmpzXCIpO1xudmFyIHRvTGVuZ3RoID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWxlbmd0aC5qc1wiKTtcbnZhciB0b0luZGV4ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3RvLWluZGV4ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXguanNcIik7XG52YXIgSUVFRTc1NCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pZWVlNzU0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaWVlZTc1NC5qc1wiKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZiAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mLmpzXCIpO1xudmFyIHNldFByb3RvdHlwZU9mID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YuanNcIik7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy5qc1wiKS5mKTtcbnZhciBhcnJheUZpbGwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvYXJyYXktZmlsbCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWZpbGwuanNcIik7XG52YXIgYXJyYXlTbGljZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9hcnJheS1zbGljZS1zaW1wbGUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zbGljZS1zaW1wbGUuanNcIik7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZy5qc1wiKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUuanNcIik7XG5cbnZhciBQUk9QRVJfRlVOQ1RJT05fTkFNRSA9IEZ1bmN0aW9uTmFtZS5QUk9QRVI7XG52YXIgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgPSBGdW5jdGlvbk5hbWUuQ09ORklHVVJBQkxFO1xudmFyIEFSUkFZX0JVRkZFUiA9ICdBcnJheUJ1ZmZlcic7XG52YXIgREFUQV9WSUVXID0gJ0RhdGFWaWV3JztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBXUk9OR19MRU5HVEggPSAnV3JvbmcgbGVuZ3RoJztcbnZhciBXUk9OR19JTkRFWCA9ICdXcm9uZyBpbmRleCc7XG52YXIgZ2V0SW50ZXJuYWxBcnJheUJ1ZmZlclN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoQVJSQVlfQlVGRkVSKTtcbnZhciBnZXRJbnRlcm5hbERhdGFWaWV3U3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihEQVRBX1ZJRVcpO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBOYXRpdmVBcnJheUJ1ZmZlciA9IGdsb2JhbFtBUlJBWV9CVUZGRVJdO1xudmFyICRBcnJheUJ1ZmZlciA9IE5hdGl2ZUFycmF5QnVmZmVyO1xudmFyIEFycmF5QnVmZmVyUHJvdG90eXBlID0gJEFycmF5QnVmZmVyICYmICRBcnJheUJ1ZmZlcltQUk9UT1RZUEVdO1xudmFyICREYXRhVmlldyA9IGdsb2JhbFtEQVRBX1ZJRVddO1xudmFyIERhdGFWaWV3UHJvdG90eXBlID0gJERhdGFWaWV3ICYmICREYXRhVmlld1tQUk9UT1RZUEVdO1xudmFyIE9iamVjdFByb3RvdHlwZSA9IE9iamVjdC5wcm90b3R5cGU7XG52YXIgQXJyYXkgPSBnbG9iYWwuQXJyYXk7XG52YXIgUmFuZ2VFcnJvciA9IGdsb2JhbC5SYW5nZUVycm9yO1xudmFyIGZpbGwgPSB1bmN1cnJ5VGhpcyhhcnJheUZpbGwpO1xudmFyIHJldmVyc2UgPSB1bmN1cnJ5VGhpcyhbXS5yZXZlcnNlKTtcblxudmFyIHBhY2tJRUVFNzU0ID0gSUVFRTc1NC5wYWNrO1xudmFyIHVucGFja0lFRUU3NTQgPSBJRUVFNzU0LnVucGFjaztcblxudmFyIHBhY2tJbnQ4ID0gZnVuY3Rpb24gKG51bWJlcikge1xuICByZXR1cm4gW251bWJlciAmIDB4RkZdO1xufTtcblxudmFyIHBhY2tJbnQxNiA9IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgcmV0dXJuIFtudW1iZXIgJiAweEZGLCBudW1iZXIgPj4gOCAmIDB4RkZdO1xufTtcblxudmFyIHBhY2tJbnQzMiA9IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgcmV0dXJuIFtudW1iZXIgJiAweEZGLCBudW1iZXIgPj4gOCAmIDB4RkYsIG51bWJlciA+PiAxNiAmIDB4RkYsIG51bWJlciA+PiAyNCAmIDB4RkZdO1xufTtcblxudmFyIHVucGFja0ludDMyID0gZnVuY3Rpb24gKGJ1ZmZlcikge1xuICByZXR1cm4gYnVmZmVyWzNdIDw8IDI0IHwgYnVmZmVyWzJdIDw8IDE2IHwgYnVmZmVyWzFdIDw8IDggfCBidWZmZXJbMF07XG59O1xuXG52YXIgcGFja0Zsb2F0MzIgPSBmdW5jdGlvbiAobnVtYmVyKSB7XG4gIHJldHVybiBwYWNrSUVFRTc1NChudW1iZXIsIDIzLCA0KTtcbn07XG5cbnZhciBwYWNrRmxvYXQ2NCA9IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgcmV0dXJuIHBhY2tJRUVFNzU0KG51bWJlciwgNTIsIDgpO1xufTtcblxudmFyIGFkZEdldHRlciA9IGZ1bmN0aW9uIChDb25zdHJ1Y3Rvciwga2V5LCBnZXRJbnRlcm5hbFN0YXRlKSB7XG4gIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihDb25zdHJ1Y3RvcltQUk9UT1RZUEVdLCBrZXksIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKVtrZXldO1xuICAgIH1cbiAgfSk7XG59O1xuXG52YXIgZ2V0ID0gZnVuY3Rpb24gKHZpZXcsIGNvdW50LCBpbmRleCwgaXNMaXR0bGVFbmRpYW4pIHtcbiAgdmFyIHN0b3JlID0gZ2V0SW50ZXJuYWxEYXRhVmlld1N0YXRlKHZpZXcpO1xuICB2YXIgaW50SW5kZXggPSB0b0luZGV4KGluZGV4KTtcbiAgdmFyIGJvb2xJc0xpdHRsZUVuZGlhbiA9ICEhaXNMaXR0bGVFbmRpYW47XG4gIGlmIChpbnRJbmRleCArIGNvdW50ID4gc3RvcmUuYnl0ZUxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19JTkRFWCk7XG4gIHZhciBieXRlcyA9IHN0b3JlLmJ5dGVzO1xuICB2YXIgc3RhcnQgPSBpbnRJbmRleCArIHN0b3JlLmJ5dGVPZmZzZXQ7XG4gIHZhciBwYWNrID0gYXJyYXlTbGljZShieXRlcywgc3RhcnQsIHN0YXJ0ICsgY291bnQpO1xuICByZXR1cm4gYm9vbElzTGl0dGxlRW5kaWFuID8gcGFjayA6IHJldmVyc2UocGFjayk7XG59O1xuXG52YXIgc2V0ID0gZnVuY3Rpb24gKHZpZXcsIGNvdW50LCBpbmRleCwgY29udmVyc2lvbiwgdmFsdWUsIGlzTGl0dGxlRW5kaWFuKSB7XG4gIHZhciBzdG9yZSA9IGdldEludGVybmFsRGF0YVZpZXdTdGF0ZSh2aWV3KTtcbiAgdmFyIGludEluZGV4ID0gdG9JbmRleChpbmRleCk7XG4gIHZhciBwYWNrID0gY29udmVyc2lvbigrdmFsdWUpO1xuICB2YXIgYm9vbElzTGl0dGxlRW5kaWFuID0gISFpc0xpdHRsZUVuZGlhbjtcbiAgaWYgKGludEluZGV4ICsgY291bnQgPiBzdG9yZS5ieXRlTGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0lOREVYKTtcbiAgdmFyIGJ5dGVzID0gc3RvcmUuYnl0ZXM7XG4gIHZhciBzdGFydCA9IGludEluZGV4ICsgc3RvcmUuYnl0ZU9mZnNldDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSBieXRlc1tzdGFydCArIGldID0gcGFja1tib29sSXNMaXR0bGVFbmRpYW4gPyBpIDogY291bnQgLSBpIC0gMV07XG59O1xuXG5pZiAoIU5BVElWRV9BUlJBWV9CVUZGRVIpIHtcbiAgJEFycmF5QnVmZmVyID0gZnVuY3Rpb24gQXJyYXlCdWZmZXIobGVuZ3RoKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCBBcnJheUJ1ZmZlclByb3RvdHlwZSk7XG4gICAgdmFyIGJ5dGVMZW5ndGggPSB0b0luZGV4KGxlbmd0aCk7XG4gICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgICB0eXBlOiBBUlJBWV9CVUZGRVIsXG4gICAgICBieXRlczogZmlsbChBcnJheShieXRlTGVuZ3RoKSwgMCksXG4gICAgICBieXRlTGVuZ3RoOiBieXRlTGVuZ3RoXG4gICAgfSk7XG4gICAgaWYgKCFERVNDUklQVE9SUykge1xuICAgICAgdGhpcy5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aDtcbiAgICAgIHRoaXMuZGV0YWNoZWQgPSBmYWxzZTtcbiAgICB9XG4gIH07XG5cbiAgQXJyYXlCdWZmZXJQcm90b3R5cGUgPSAkQXJyYXlCdWZmZXJbUFJPVE9UWVBFXTtcblxuICAkRGF0YVZpZXcgPSBmdW5jdGlvbiBEYXRhVmlldyhidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsIERhdGFWaWV3UHJvdG90eXBlKTtcbiAgICBhbkluc3RhbmNlKGJ1ZmZlciwgQXJyYXlCdWZmZXJQcm90b3R5cGUpO1xuICAgIHZhciBidWZmZXJTdGF0ZSA9IGdldEludGVybmFsQXJyYXlCdWZmZXJTdGF0ZShidWZmZXIpO1xuICAgIHZhciBidWZmZXJMZW5ndGggPSBidWZmZXJTdGF0ZS5ieXRlTGVuZ3RoO1xuICAgIHZhciBvZmZzZXQgPSB0b0ludGVnZXJPckluZmluaXR5KGJ5dGVPZmZzZXQpO1xuICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+IGJ1ZmZlckxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcignV3Jvbmcgb2Zmc2V0Jyk7XG4gICAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPT09IHVuZGVmaW5lZCA/IGJ1ZmZlckxlbmd0aCAtIG9mZnNldCA6IHRvTGVuZ3RoKGJ5dGVMZW5ndGgpO1xuICAgIGlmIChvZmZzZXQgKyBieXRlTGVuZ3RoID4gYnVmZmVyTGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgICB0eXBlOiBEQVRBX1ZJRVcsXG4gICAgICBidWZmZXI6IGJ1ZmZlcixcbiAgICAgIGJ5dGVMZW5ndGg6IGJ5dGVMZW5ndGgsXG4gICAgICBieXRlT2Zmc2V0OiBvZmZzZXQsXG4gICAgICBieXRlczogYnVmZmVyU3RhdGUuYnl0ZXNcbiAgICB9KTtcbiAgICBpZiAoIURFU0NSSVBUT1JTKSB7XG4gICAgICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjtcbiAgICAgIHRoaXMuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGg7XG4gICAgICB0aGlzLmJ5dGVPZmZzZXQgPSBvZmZzZXQ7XG4gICAgfVxuICB9O1xuXG4gIERhdGFWaWV3UHJvdG90eXBlID0gJERhdGFWaWV3W1BST1RPVFlQRV07XG5cbiAgaWYgKERFU0NSSVBUT1JTKSB7XG4gICAgYWRkR2V0dGVyKCRBcnJheUJ1ZmZlciwgJ2J5dGVMZW5ndGgnLCBnZXRJbnRlcm5hbEFycmF5QnVmZmVyU3RhdGUpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsICdidWZmZXInLCBnZXRJbnRlcm5hbERhdGFWaWV3U3RhdGUpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsICdieXRlTGVuZ3RoJywgZ2V0SW50ZXJuYWxEYXRhVmlld1N0YXRlKTtcbiAgICBhZGRHZXR0ZXIoJERhdGFWaWV3LCAnYnl0ZU9mZnNldCcsIGdldEludGVybmFsRGF0YVZpZXdTdGF0ZSk7XG4gIH1cblxuICBkZWZpbmVCdWlsdElucyhEYXRhVmlld1Byb3RvdHlwZSwge1xuICAgIGdldEludDg6IGZ1bmN0aW9uIGdldEludDgoYnl0ZU9mZnNldCkge1xuICAgICAgcmV0dXJuIGdldCh0aGlzLCAxLCBieXRlT2Zmc2V0KVswXSA8PCAyNCA+PiAyNDtcbiAgICB9LFxuICAgIGdldFVpbnQ4OiBmdW5jdGlvbiBnZXRVaW50OChieXRlT2Zmc2V0KSB7XG4gICAgICByZXR1cm4gZ2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQpWzBdO1xuICAgIH0sXG4gICAgZ2V0SW50MTY6IGZ1bmN0aW9uIGdldEludDE2KGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHZhciBieXRlcyA9IGdldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlKTtcbiAgICAgIHJldHVybiAoYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzBdKSA8PCAxNiA+PiAxNjtcbiAgICB9LFxuICAgIGdldFVpbnQxNjogZnVuY3Rpb24gZ2V0VWludDE2KGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHZhciBieXRlcyA9IGdldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlKTtcbiAgICAgIHJldHVybiBieXRlc1sxXSA8PCA4IHwgYnl0ZXNbMF07XG4gICAgfSxcbiAgICBnZXRJbnQzMjogZnVuY3Rpb24gZ2V0SW50MzIoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0ludDMyKGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlKSk7XG4gICAgfSxcbiAgICBnZXRVaW50MzI6IGZ1bmN0aW9uIGdldFVpbnQzMihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSW50MzIoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogZmFsc2UpKSA+Pj4gMDtcbiAgICB9LFxuICAgIGdldEZsb2F0MzI6IGZ1bmN0aW9uIGdldEZsb2F0MzIoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0lFRUU3NTQoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogZmFsc2UpLCAyMyk7XG4gICAgfSxcbiAgICBnZXRGbG9hdDY0OiBmdW5jdGlvbiBnZXRGbG9hdDY0KGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJRUVFNzU0KGdldCh0aGlzLCA4LCBieXRlT2Zmc2V0LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlKSwgNTIpO1xuICAgIH0sXG4gICAgc2V0SW50ODogZnVuY3Rpb24gc2V0SW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgc2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQsIHBhY2tJbnQ4LCB2YWx1ZSk7XG4gICAgfSxcbiAgICBzZXRVaW50ODogZnVuY3Rpb24gc2V0VWludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgIHNldCh0aGlzLCAxLCBieXRlT2Zmc2V0LCBwYWNrSW50OCwgdmFsdWUpO1xuICAgIH0sXG4gICAgc2V0SW50MTY6IGZ1bmN0aW9uIHNldEludDE2KGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgcGFja0ludDE2LCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiBmYWxzZSk7XG4gICAgfSxcbiAgICBzZXRVaW50MTY6IGZ1bmN0aW9uIHNldFVpbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIHBhY2tJbnQxNiwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogZmFsc2UpO1xuICAgIH0sXG4gICAgc2V0SW50MzI6IGZ1bmN0aW9uIHNldEludDMyKGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0ludDMyLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiBmYWxzZSk7XG4gICAgfSxcbiAgICBzZXRVaW50MzI6IGZ1bmN0aW9uIHNldFVpbnQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tJbnQzMiwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogZmFsc2UpO1xuICAgIH0sXG4gICAgc2V0RmxvYXQzMjogZnVuY3Rpb24gc2V0RmxvYXQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tGbG9hdDMyLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiBmYWxzZSk7XG4gICAgfSxcbiAgICBzZXRGbG9hdDY0OiBmdW5jdGlvbiBzZXRGbG9hdDY0KGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgOCwgYnl0ZU9mZnNldCwgcGFja0Zsb2F0NjQsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IGZhbHNlKTtcbiAgICB9XG4gIH0pO1xufSBlbHNlIHtcbiAgdmFyIElOQ09SUkVDVF9BUlJBWV9CVUZGRVJfTkFNRSA9IFBST1BFUl9GVU5DVElPTl9OQU1FICYmIE5hdGl2ZUFycmF5QnVmZmVyLm5hbWUgIT09IEFSUkFZX0JVRkZFUjtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tbmV3IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG4gIGlmICghZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIE5hdGl2ZUFycmF5QnVmZmVyKDEpO1xuICB9KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyBOYXRpdmVBcnJheUJ1ZmZlcigtMSk7XG4gIH0pIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgTmF0aXZlQXJyYXlCdWZmZXIoKTtcbiAgICBuZXcgTmF0aXZlQXJyYXlCdWZmZXIoMS41KTtcbiAgICBuZXcgTmF0aXZlQXJyYXlCdWZmZXIoTmFOKTtcbiAgICByZXR1cm4gTmF0aXZlQXJyYXlCdWZmZXIubGVuZ3RoICE9IDEgfHwgSU5DT1JSRUNUX0FSUkFZX0JVRkZFUl9OQU1FICYmICFDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRTtcbiAgfSkpIHtcbiAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLW5ldyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xuICAgICRBcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIEFycmF5QnVmZmVyKGxlbmd0aCkge1xuICAgICAgYW5JbnN0YW5jZSh0aGlzLCBBcnJheUJ1ZmZlclByb3RvdHlwZSk7XG4gICAgICByZXR1cm4gbmV3IE5hdGl2ZUFycmF5QnVmZmVyKHRvSW5kZXgobGVuZ3RoKSk7XG4gICAgfTtcblxuICAgICRBcnJheUJ1ZmZlcltQUk9UT1RZUEVdID0gQXJyYXlCdWZmZXJQcm90b3R5cGU7XG5cbiAgICBmb3IgKHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lcyhOYXRpdmVBcnJheUJ1ZmZlciksIGogPSAwLCBrZXk7IGtleXMubGVuZ3RoID4gajspIHtcbiAgICAgIGlmICghKChrZXkgPSBrZXlzW2orK10pIGluICRBcnJheUJ1ZmZlcikpIHtcbiAgICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KCRBcnJheUJ1ZmZlciwga2V5LCBOYXRpdmVBcnJheUJ1ZmZlcltrZXldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBBcnJheUJ1ZmZlclByb3RvdHlwZS5jb25zdHJ1Y3RvciA9ICRBcnJheUJ1ZmZlcjtcbiAgfSBlbHNlIGlmIChJTkNPUlJFQ1RfQVJSQVlfQlVGRkVSX05BTUUgJiYgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUpIHtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoTmF0aXZlQXJyYXlCdWZmZXIsICduYW1lJywgQVJSQVlfQlVGRkVSKTtcbiAgfVxuXG4gIC8vIFdlYktpdCBidWcgLSB0aGUgc2FtZSBwYXJlbnQgcHJvdG90eXBlIGZvciB0eXBlZCBhcnJheXMgYW5kIGRhdGEgdmlld1xuICBpZiAoc2V0UHJvdG90eXBlT2YgJiYgZ2V0UHJvdG90eXBlT2YoRGF0YVZpZXdQcm90b3R5cGUpICE9PSBPYmplY3RQcm90b3R5cGUpIHtcbiAgICBzZXRQcm90b3R5cGVPZihEYXRhVmlld1Byb3RvdHlwZSwgT2JqZWN0UHJvdG90eXBlKTtcbiAgfVxuXG4gIC8vIGlPUyBTYWZhcmkgNy54IGJ1Z1xuICB2YXIgdGVzdFZpZXcgPSBuZXcgJERhdGFWaWV3KG5ldyAkQXJyYXlCdWZmZXIoMikpO1xuICB2YXIgJHNldEludDggPSB1bmN1cnJ5VGhpcyhEYXRhVmlld1Byb3RvdHlwZS5zZXRJbnQ4KTtcbiAgdGVzdFZpZXcuc2V0SW50OCgwLCAyMTQ3NDgzNjQ4KTtcbiAgdGVzdFZpZXcuc2V0SW50OCgxLCAyMTQ3NDgzNjQ5KTtcbiAgaWYgKHRlc3RWaWV3LmdldEludDgoMCkgfHwgIXRlc3RWaWV3LmdldEludDgoMSkpIGRlZmluZUJ1aWx0SW5zKERhdGFWaWV3UHJvdG90eXBlLCB7XG4gICAgc2V0SW50ODogZnVuY3Rpb24gc2V0SW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgJHNldEludDgodGhpcywgYnl0ZU9mZnNldCwgdmFsdWUgPDwgMjQgPj4gMjQpO1xuICAgIH0sXG4gICAgc2V0VWludDg6IGZ1bmN0aW9uIHNldFVpbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICAkc2V0SW50OCh0aGlzLCBieXRlT2Zmc2V0LCB2YWx1ZSA8PCAyNCA+PiAyNCk7XG4gICAgfVxuICB9LCB7IHVuc2FmZTogdHJ1ZSB9KTtcbn1cblxuc2V0VG9TdHJpbmdUYWcoJEFycmF5QnVmZmVyLCBBUlJBWV9CVUZGRVIpO1xuc2V0VG9TdHJpbmdUYWcoJERhdGFWaWV3LCBEQVRBX1ZJRVcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQXJyYXlCdWZmZXI6ICRBcnJheUJ1ZmZlcixcbiAgRGF0YVZpZXc6ICREYXRhVmlld1xufTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1idWZmZXIuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktZmlsbC5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgdG9PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvdG8tb2JqZWN0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzXCIpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzXCIpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanNcIik7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmlsbGAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWxsXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZpbGwodmFsdWUgLyogLCBzdGFydCA9IDAsIGVuZCA9IEBsZW5ndGggKi8pIHtcbiAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGFyZ3VtZW50c0xlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIGxlbmd0aCk7XG4gIHZhciBlbmQgPSBhcmd1bWVudHNMZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICB2YXIgZW5kUG9zID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW5ndGgpO1xuICB3aGlsZSAoZW5kUG9zID4gaW5kZXgpIE9baW5kZXgrK10gPSB2YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWZpbGwuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktZnJvbS1jb25zdHJ1Y3Rvci1hbmQtbGlzdC5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZS5qc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIGxpc3QpIHtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKGxpc3QpO1xuICB2YXIgcmVzdWx0ID0gbmV3IENvbnN0cnVjdG9yKGxlbmd0aCk7XG4gIHdoaWxlIChsZW5ndGggPiBpbmRleCkgcmVzdWx0W2luZGV4XSA9IGxpc3RbaW5kZXgrK107XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWZyb20tY29uc3RydWN0b3ItYW5kLWxpc3QuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktZnJvbS5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgYmluZCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQuanNcIik7XG52YXIgY2FsbCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbC5qc1wiKTtcbnZhciB0b09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy90by1vYmplY3QgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1vYmplY3QuanNcIik7XG52YXIgY2FsbFdpdGhTYWZlSXRlcmF0aW9uQ2xvc2luZyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9jYWxsLXdpdGgtc2FmZS1pdGVyYXRpb24tY2xvc2luZyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NhbGwtd2l0aC1zYWZlLWl0ZXJhdGlvbi1jbG9zaW5nLmpzXCIpO1xudmFyIGlzQXJyYXlJdGVyYXRvck1ldGhvZCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QuanNcIik7XG52YXIgaXNDb25zdHJ1Y3RvciA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvciAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yLmpzXCIpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanNcIik7XG52YXIgY3JlYXRlUHJvcGVydHkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LmpzXCIpO1xudmFyIGdldEl0ZXJhdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1pdGVyYXRvci5qc1wiKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qc1wiKTtcblxudmFyICRBcnJheSA9IEFycmF5O1xuXG4vLyBgQXJyYXkuZnJvbWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LmZyb21cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZnJvbShhcnJheUxpa2UgLyogLCBtYXBmbiA9IHVuZGVmaW5lZCwgdGhpc0FyZyA9IHVuZGVmaW5lZCAqLykge1xuICB2YXIgTyA9IHRvT2JqZWN0KGFycmF5TGlrZSk7XG4gIHZhciBJU19DT05TVFJVQ1RPUiA9IGlzQ29uc3RydWN0b3IodGhpcyk7XG4gIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgbWFwZm4gPSBhcmd1bWVudHNMZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICB2YXIgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQ7XG4gIGlmIChtYXBwaW5nKSBtYXBmbiA9IGJpbmQobWFwZm4sIGFyZ3VtZW50c0xlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQpO1xuICB2YXIgaXRlcmF0b3JNZXRob2QgPSBnZXRJdGVyYXRvck1ldGhvZChPKTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxlbmd0aCwgcmVzdWx0LCBzdGVwLCBpdGVyYXRvciwgbmV4dCwgdmFsdWU7XG4gIC8vIGlmIHRoZSB0YXJnZXQgaXMgbm90IGl0ZXJhYmxlIG9yIGl0J3MgYW4gYXJyYXkgd2l0aCB0aGUgZGVmYXVsdCBpdGVyYXRvciAtIHVzZSBhIHNpbXBsZSBjYXNlXG4gIGlmIChpdGVyYXRvck1ldGhvZCAmJiAhKHRoaXMgPT09ICRBcnJheSAmJiBpc0FycmF5SXRlcmF0b3JNZXRob2QoaXRlcmF0b3JNZXRob2QpKSkge1xuICAgIGl0ZXJhdG9yID0gZ2V0SXRlcmF0b3IoTywgaXRlcmF0b3JNZXRob2QpO1xuICAgIG5leHQgPSBpdGVyYXRvci5uZXh0O1xuICAgIHJlc3VsdCA9IElTX0NPTlNUUlVDVE9SID8gbmV3IHRoaXMoKSA6IFtdO1xuICAgIGZvciAoOyEoc3RlcCA9IGNhbGwobmV4dCwgaXRlcmF0b3IpKS5kb25lOyBpbmRleCsrKSB7XG4gICAgICB2YWx1ZSA9IG1hcHBpbmcgPyBjYWxsV2l0aFNhZmVJdGVyYXRpb25DbG9zaW5nKGl0ZXJhdG9yLCBtYXBmbiwgW3N0ZXAudmFsdWUsIGluZGV4XSwgdHJ1ZSkgOiBzdGVwLnZhbHVlO1xuICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgdmFsdWUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICByZXN1bHQgPSBJU19DT05TVFJVQ1RPUiA/IG5ldyB0aGlzKGxlbmd0aCkgOiAkQXJyYXkobGVuZ3RoKTtcbiAgICBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgdmFsdWUgPSBtYXBwaW5nID8gbWFwZm4oT1tpbmRleF0sIGluZGV4KSA6IE9baW5kZXhdO1xuICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgdmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXN1bHQubGVuZ3RoID0gaW5kZXg7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWZyb20uanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMuanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIHRvSW5kZXhlZE9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0LmpzXCIpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzXCIpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanNcIik7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBpbmRleE9mLCBpbmNsdWRlcyB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgdmFyIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICBpZiAoKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pICYmIE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xuICBpbmNsdWRlczogY3JlYXRlTWV0aG9kKHRydWUpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmluZGV4T2ZgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5pbmRleG9mXG4gIGluZGV4T2Y6IGNyZWF0ZU1ldGhvZChmYWxzZSlcbn07XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uLWZyb20tbGFzdC5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgYmluZCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQuanNcIik7XG52YXIgSW5kZXhlZE9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0LmpzXCIpO1xudmFyIHRvT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3RvLW9iamVjdCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLW9iamVjdC5qc1wiKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlLmpzXCIpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgZmluZExhc3QsIGZpbmRMYXN0SW5kZXggfWAgbWV0aG9kcyBpbXBsZW1lbnRhdGlvblxudmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHZhciBJU19GSU5EX0xBU1RfSU5ERVggPSBUWVBFID09IDE7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGNhbGxiYWNrZm4sIHRoYXQpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgc2VsZiA9IEluZGV4ZWRPYmplY3QoTyk7XG4gICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIHRoYXQpO1xuICAgIHZhciBpbmRleCA9IGxlbmd0aE9mQXJyYXlMaWtlKHNlbGYpO1xuICAgIHZhciB2YWx1ZSwgcmVzdWx0O1xuICAgIHdoaWxlIChpbmRleC0tID4gMCkge1xuICAgICAgdmFsdWUgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlc3VsdCA9IGJvdW5kRnVuY3Rpb24odmFsdWUsIGluZGV4LCBPKTtcbiAgICAgIGlmIChyZXN1bHQpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICBjYXNlIDA6IHJldHVybiB2YWx1ZTsgLy8gZmluZExhc3RcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gaW5kZXg7IC8vIGZpbmRMYXN0SW5kZXhcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfTEFTVF9JTkRFWCA/IC0xIDogdW5kZWZpbmVkO1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmluZExhc3RgIG1ldGhvZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1hcnJheS1maW5kLWZyb20tbGFzdFxuICBmaW5kTGFzdDogY3JlYXRlTWV0aG9kKDApLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRMYXN0SW5kZXhgIG1ldGhvZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1hcnJheS1maW5kLWZyb20tbGFzdFxuICBmaW5kTGFzdEluZGV4OiBjcmVhdGVNZXRob2QoMSlcbn07XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uLWZyb20tbGFzdC5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24uanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIGJpbmQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0LmpzXCIpO1xudmFyIHVuY3VycnlUaGlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qc1wiKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QuanNcIik7XG52YXIgdG9PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvdG8tb2JqZWN0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzXCIpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanNcIik7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUuanNcIik7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUueyBmb3JFYWNoLCBtYXAsIGZpbHRlciwgc29tZSwgZXZlcnksIGZpbmQsIGZpbmRJbmRleCwgZmlsdGVyUmVqZWN0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoVFlQRSkge1xuICB2YXIgSVNfTUFQID0gVFlQRSA9PSAxO1xuICB2YXIgSVNfRklMVEVSID0gVFlQRSA9PSAyO1xuICB2YXIgSVNfU09NRSA9IFRZUEUgPT0gMztcbiAgdmFyIElTX0VWRVJZID0gVFlQRSA9PSA0O1xuICB2YXIgSVNfRklORF9JTkRFWCA9IFRZUEUgPT0gNjtcbiAgdmFyIElTX0ZJTFRFUl9SRUpFQ1QgPSBUWVBFID09IDc7XG4gIHZhciBOT19IT0xFUyA9IFRZUEUgPT0gNSB8fCBJU19GSU5EX0lOREVYO1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0LCBzcGVjaWZpY0NyZWF0ZSkge1xuICAgIHZhciBPID0gdG9PYmplY3QoJHRoaXMpO1xuICAgIHZhciBzZWxmID0gSW5kZXhlZE9iamVjdChPKTtcbiAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgdGhhdCk7XG4gICAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKHNlbGYpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGNyZWF0ZSA9IHNwZWNpZmljQ3JlYXRlIHx8IGFycmF5U3BlY2llc0NyZWF0ZTtcbiAgICB2YXIgdGFyZ2V0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSIHx8IElTX0ZJTFRFUl9SRUpFQ1QgPyBjcmVhdGUoJHRoaXMsIDApIDogdW5kZWZpbmVkO1xuICAgIHZhciB2YWx1ZSwgcmVzdWx0O1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoTk9fSE9MRVMgfHwgaW5kZXggaW4gc2VsZikge1xuICAgICAgdmFsdWUgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlc3VsdCA9IGJvdW5kRnVuY3Rpb24odmFsdWUsIGluZGV4LCBPKTtcbiAgICAgIGlmIChUWVBFKSB7XG4gICAgICAgIGlmIChJU19NQVApIHRhcmdldFtpbmRleF0gPSByZXN1bHQ7IC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXN1bHQpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgICAvLyBzb21lXG4gICAgICAgICAgY2FzZSA1OiByZXR1cm4gdmFsdWU7ICAgICAgICAgICAgIC8vIGZpbmRcbiAgICAgICAgICBjYXNlIDY6IHJldHVybiBpbmRleDsgICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiBwdXNoKHRhcmdldCwgdmFsdWUpOyAgICAgIC8vIGZpbHRlclxuICAgICAgICB9IGVsc2Ugc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgY2FzZSA0OiByZXR1cm4gZmFsc2U7ICAgICAgICAgICAgIC8vIGV2ZXJ5XG4gICAgICAgICAgY2FzZSA3OiBwdXNoKHRhcmdldCwgdmFsdWUpOyAgICAgIC8vIGZpbHRlclJlamVjdFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBJU19GSU5EX0lOREVYID8gLTEgOiBJU19TT01FIHx8IElTX0VWRVJZID8gSVNfRVZFUlkgOiB0YXJnZXQ7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxuICBmb3JFYWNoOiBjcmVhdGVNZXRob2QoMCksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUubWFwYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubWFwXG4gIG1hcDogY3JlYXRlTWV0aG9kKDEpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZpbHRlclxuICBmaWx0ZXI6IGNyZWF0ZU1ldGhvZCgyKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5zb21lYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc29tZVxuICBzb21lOiBjcmVhdGVNZXRob2QoMyksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZXZlcnlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5ldmVyeVxuICBldmVyeTogY3JlYXRlTWV0aG9kKDQpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbmRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kXG4gIGZpbmQ6IGNyZWF0ZU1ldGhvZCg1KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maW5kSW5kZXhcbiAgZmluZEluZGV4OiBjcmVhdGVNZXRob2QoNiksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmlsdGVyUmVqZWN0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtYXJyYXktZmlsdGVyaW5nXG4gIGZpbHRlclJlamVjdDogY3JlYXRlTWV0aG9kKDcpXG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbi5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0LmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mYWlscyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSwgYXJndW1lbnQpIHtcbiAgdmFyIG1ldGhvZCA9IFtdW01FVEhPRF9OQU1FXTtcbiAgcmV0dXJuICEhbWV0aG9kICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jYWxsIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gICAgbWV0aG9kLmNhbGwobnVsbCwgYXJndW1lbnQgfHwgZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfSwgMSk7XG4gIH0pO1xufTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0LmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LXNldC1sZW5ndGguanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIERFU0NSSVBUT1JTID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanNcIik7XG52YXIgaXNBcnJheSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pcy1hcnJheSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWFycmF5LmpzXCIpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBTYWZhcmkgPCAxMyBkb2VzIG5vdCB0aHJvdyBhbiBlcnJvciBpbiB0aGlzIGNhc2VcbnZhciBTSUxFTlRfT05fTk9OX1dSSVRBQkxFX0xFTkdUSF9TRVQgPSBERVNDUklQVE9SUyAmJiAhZnVuY3Rpb24gKCkge1xuICAvLyBtYWtlcyBubyBzZW5zZSB3aXRob3V0IHByb3BlciBzdHJpY3QgbW9kZSBzdXBwb3J0XG4gIGlmICh0aGlzICE9PSB1bmRlZmluZWQpIHJldHVybiB0cnVlO1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwgJ2xlbmd0aCcsIHsgd3JpdGFibGU6IGZhbHNlIH0pLmxlbmd0aCA9IDE7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yO1xuICB9XG59KCk7XG5cbm1vZHVsZS5leHBvcnRzID0gU0lMRU5UX09OX05PTl9XUklUQUJMRV9MRU5HVEhfU0VUID8gZnVuY3Rpb24gKE8sIGxlbmd0aCkge1xuICBpZiAoaXNBcnJheShPKSAmJiAhZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sICdsZW5ndGgnKS53cml0YWJsZSkge1xuICAgIHRocm93ICRUeXBlRXJyb3IoJ0Nhbm5vdCBzZXQgcmVhZCBvbmx5IC5sZW5ndGgnKTtcbiAgfSByZXR1cm4gTy5sZW5ndGggPSBsZW5ndGg7XG59IDogZnVuY3Rpb24gKE8sIGxlbmd0aCkge1xuICByZXR1cm4gTy5sZW5ndGggPSBsZW5ndGg7XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LXNldC1sZW5ndGguanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktc2xpY2Utc2ltcGxlLmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciB0b0Fic29sdXRlSW5kZXggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXggKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleC5qc1wiKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlLmpzXCIpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS5qc1wiKTtcblxudmFyICRBcnJheSA9IEFycmF5O1xudmFyIG1heCA9IE1hdGgubWF4O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgdmFyIGsgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbmd0aCk7XG4gIHZhciBmaW4gPSB0b0Fic29sdXRlSW5kZXgoZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiBlbmQsIGxlbmd0aCk7XG4gIHZhciByZXN1bHQgPSAkQXJyYXkobWF4KGZpbiAtIGssIDApKTtcbiAgZm9yICh2YXIgbiA9IDA7IGsgPCBmaW47IGsrKywgbisrKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIG4sIE9ba10pO1xuICByZXN1bHQubGVuZ3RoID0gbjtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktc2xpY2Utc2ltcGxlLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LXNsaWNlLmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciB1bmN1cnJ5VGhpcyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMuanNcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoW10uc2xpY2UpO1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LXNsaWNlLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LXNvcnQuanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIGFycmF5U2xpY2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2Utc2ltcGxlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktc2xpY2Utc2ltcGxlLmpzXCIpO1xuXG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG52YXIgbWVyZ2VTb3J0ID0gZnVuY3Rpb24gKGFycmF5LCBjb21wYXJlZm4pIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgdmFyIG1pZGRsZSA9IGZsb29yKGxlbmd0aCAvIDIpO1xuICByZXR1cm4gbGVuZ3RoIDwgOCA/IGluc2VydGlvblNvcnQoYXJyYXksIGNvbXBhcmVmbikgOiBtZXJnZShcbiAgICBhcnJheSxcbiAgICBtZXJnZVNvcnQoYXJyYXlTbGljZShhcnJheSwgMCwgbWlkZGxlKSwgY29tcGFyZWZuKSxcbiAgICBtZXJnZVNvcnQoYXJyYXlTbGljZShhcnJheSwgbWlkZGxlKSwgY29tcGFyZWZuKSxcbiAgICBjb21wYXJlZm5cbiAgKTtcbn07XG5cbnZhciBpbnNlcnRpb25Tb3J0ID0gZnVuY3Rpb24gKGFycmF5LCBjb21wYXJlZm4pIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgdmFyIGkgPSAxO1xuICB2YXIgZWxlbWVudCwgajtcblxuICB3aGlsZSAoaSA8IGxlbmd0aCkge1xuICAgIGogPSBpO1xuICAgIGVsZW1lbnQgPSBhcnJheVtpXTtcbiAgICB3aGlsZSAoaiAmJiBjb21wYXJlZm4oYXJyYXlbaiAtIDFdLCBlbGVtZW50KSA+IDApIHtcbiAgICAgIGFycmF5W2pdID0gYXJyYXlbLS1qXTtcbiAgICB9XG4gICAgaWYgKGogIT09IGkrKykgYXJyYXlbal0gPSBlbGVtZW50O1xuICB9IHJldHVybiBhcnJheTtcbn07XG5cbnZhciBtZXJnZSA9IGZ1bmN0aW9uIChhcnJheSwgbGVmdCwgcmlnaHQsIGNvbXBhcmVmbikge1xuICB2YXIgbGxlbmd0aCA9IGxlZnQubGVuZ3RoO1xuICB2YXIgcmxlbmd0aCA9IHJpZ2h0Lmxlbmd0aDtcbiAgdmFyIGxpbmRleCA9IDA7XG4gIHZhciByaW5kZXggPSAwO1xuXG4gIHdoaWxlIChsaW5kZXggPCBsbGVuZ3RoIHx8IHJpbmRleCA8IHJsZW5ndGgpIHtcbiAgICBhcnJheVtsaW5kZXggKyByaW5kZXhdID0gKGxpbmRleCA8IGxsZW5ndGggJiYgcmluZGV4IDwgcmxlbmd0aClcbiAgICAgID8gY29tcGFyZWZuKGxlZnRbbGluZGV4XSwgcmlnaHRbcmluZGV4XSkgPD0gMCA/IGxlZnRbbGluZGV4KytdIDogcmlnaHRbcmluZGV4KytdXG4gICAgICA6IGxpbmRleCA8IGxsZW5ndGggPyBsZWZ0W2xpbmRleCsrXSA6IHJpZ2h0W3JpbmRleCsrXTtcbiAgfSByZXR1cm4gYXJyYXk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IG1lcmdlU29ydDtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zb3J0LmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3IuanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIGlzQXJyYXkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaXMtYXJyYXkgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1hcnJheS5qc1wiKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3IuanNcIik7XG52YXIgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaXMtb2JqZWN0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtb2JqZWN0LmpzXCIpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzXCIpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xudmFyICRBcnJheSA9IEFycmF5O1xuXG4vLyBhIHBhcnQgb2YgYEFycmF5U3BlY2llc0NyZWF0ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5c3BlY2llc2NyZWF0ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWxBcnJheSkge1xuICB2YXIgQztcbiAgaWYgKGlzQXJyYXkob3JpZ2luYWxBcnJheSkpIHtcbiAgICBDID0gb3JpZ2luYWxBcnJheS5jb25zdHJ1Y3RvcjtcbiAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgIGlmIChpc0NvbnN0cnVjdG9yKEMpICYmIChDID09PSAkQXJyYXkgfHwgaXNBcnJheShDLnByb3RvdHlwZSkpKSBDID0gdW5kZWZpbmVkO1xuICAgIGVsc2UgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmIChDID09PSBudWxsKSBDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gQyA9PT0gdW5kZWZpbmVkID8gJEFycmF5IDogQztcbn07XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jb25zdHJ1Y3Rvci5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZS5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgYXJyYXlTcGVjaWVzQ29uc3RydWN0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvciAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY29uc3RydWN0b3IuanNcIik7XG5cbi8vIGBBcnJheVNwZWNpZXNDcmVhdGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheXNwZWNpZXNjcmVhdGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsQXJyYXksIGxlbmd0aCkge1xuICByZXR1cm4gbmV3IChhcnJheVNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbEFycmF5KSkobGVuZ3RoID09PSAwID8gMCA6IGxlbmd0aCk7XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LXRvLXJldmVyc2VkLmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlLmpzXCIpO1xuXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtY2hhbmdlLWFycmF5LWJ5LWNvcHkvI3NlYy1hcnJheS5wcm90b3R5cGUudG9SZXZlcnNlZFxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWNoYW5nZS1hcnJheS1ieS1jb3B5LyNzZWMtJXR5cGVkYXJyYXklLnByb3RvdHlwZS50b1JldmVyc2VkXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBDKSB7XG4gIHZhciBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgdmFyIEEgPSBuZXcgQyhsZW4pO1xuICB2YXIgayA9IDA7XG4gIGZvciAoOyBrIDwgbGVuOyBrKyspIEFba10gPSBPW2xlbiAtIGsgLSAxXTtcbiAgcmV0dXJuIEE7XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LXRvLXJldmVyc2VkLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LXdpdGguanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanNcIik7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qc1wiKTtcblxudmFyICRSYW5nZUVycm9yID0gUmFuZ2VFcnJvcjtcblxuLy8gaHR0cHM6Ly90YzM5LmVzL3Byb3Bvc2FsLWNoYW5nZS1hcnJheS1ieS1jb3B5LyNzZWMtYXJyYXkucHJvdG90eXBlLndpdGhcbi8vIGh0dHBzOi8vdGMzOS5lcy9wcm9wb3NhbC1jaGFuZ2UtYXJyYXktYnktY29weS8jc2VjLSV0eXBlZGFycmF5JS5wcm90b3R5cGUud2l0aFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgQywgaW5kZXgsIHZhbHVlKSB7XG4gIHZhciBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgdmFyIHJlbGF0aXZlSW5kZXggPSB0b0ludGVnZXJPckluZmluaXR5KGluZGV4KTtcbiAgdmFyIGFjdHVhbEluZGV4ID0gcmVsYXRpdmVJbmRleCA8IDAgPyBsZW4gKyByZWxhdGl2ZUluZGV4IDogcmVsYXRpdmVJbmRleDtcbiAgaWYgKGFjdHVhbEluZGV4ID49IGxlbiB8fCBhY3R1YWxJbmRleCA8IDApIHRocm93ICRSYW5nZUVycm9yKCdJbmNvcnJlY3QgaW5kZXgnKTtcbiAgdmFyIEEgPSBuZXcgQyhsZW4pO1xuICB2YXIgayA9IDA7XG4gIGZvciAoOyBrIDwgbGVuOyBrKyspIEFba10gPSBrID09PSBhY3R1YWxJbmRleCA/IHZhbHVlIDogT1trXTtcbiAgcmV0dXJuIEE7XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LXdpdGguanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2FsbC13aXRoLXNhZmUtaXRlcmF0aW9uLWNsb3NpbmcuanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2FuLW9iamVjdCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qc1wiKTtcbnZhciBpdGVyYXRvckNsb3NlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UuanNcIik7XG5cbi8vIGNhbGwgc29tZXRoaW5nIG9uIGl0ZXJhdG9yIHN0ZXAgd2l0aCBzYWZlIGNsb3Npbmcgb24gZXJyb3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIEVOVFJJRVMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gRU5UUklFUyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGl0ZXJhdG9yQ2xvc2UoaXRlcmF0b3IsICd0aHJvdycsIGVycm9yKTtcbiAgfVxufTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jYWxsLXdpdGgtc2FmZS1pdGVyYXRpb24tY2xvc2luZy5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24uanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIHdlbGxLbm93blN5bWJvbCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzXCIpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgU0FGRV9DTE9TSU5HID0gZmFsc2U7XG5cbnRyeSB7XG4gIHZhciBjYWxsZWQgPSAwO1xuICB2YXIgaXRlcmF0b3JXaXRoUmV0dXJuID0ge1xuICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7IGRvbmU6ICEhY2FsbGVkKysgfTtcbiAgICB9LFxuICAgICdyZXR1cm4nOiBmdW5jdGlvbiAoKSB7XG4gICAgICBTQUZFX0NMT1NJTkcgPSB0cnVlO1xuICAgIH1cbiAgfTtcbiAgaXRlcmF0b3JXaXRoUmV0dXJuW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWZyb20sIG5vLXRocm93LWxpdGVyYWwgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgQXJyYXkuZnJvbShpdGVyYXRvcldpdGhSZXR1cm4sIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMsIFNLSVBfQ0xPU0lORykge1xuICBpZiAoIVNLSVBfQ0xPU0lORyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gIHZhciBJVEVSQVRJT05fU1VQUE9SVCA9IGZhbHNlO1xuICB0cnkge1xuICAgIHZhciBvYmplY3QgPSB7fTtcbiAgICBvYmplY3RbSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiB7IGRvbmU6IElURVJBVElPTl9TVVBQT1JUID0gdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH07XG4gICAgZXhlYyhvYmplY3QpO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBJVEVSQVRJT05fU1VQUE9SVDtcbn07XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NsYXNzb2YtcmF3LmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciB1bmN1cnJ5VGhpcyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMuanNcIik7XG5cbnZhciB0b1N0cmluZyA9IHVuY3VycnlUaGlzKHt9LnRvU3RyaW5nKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHN0cmluZ1NsaWNlKHRvU3RyaW5nKGl0KSwgOCwgLTEpO1xufTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jbGFzc29mLXJhdy5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jbGFzc29mLmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0LmpzXCIpO1xudmFyIGlzQ2FsbGFibGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qc1wiKTtcbnZhciBjbGFzc29mUmF3ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanNcIik7XG52YXIgd2VsbEtub3duU3ltYm9sID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wuanNcIik7XG5cbnZhciBUT19TVFJJTkdfVEFHID0gd2VsbEtub3duU3ltYm9sKCd0b1N0cmluZ1RhZycpO1xudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQ09SUkVDVF9BUkdVTUVOVFMgPSBjbGFzc29mUmF3KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG4vLyBnZXR0aW5nIHRhZyBmcm9tIEVTNisgYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgXG5tb2R1bGUuZXhwb3J0cyA9IFRPX1NUUklOR19UQUdfU1VQUE9SVCA/IGNsYXNzb2ZSYXcgOiBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIE8sIHRhZywgcmVzdWx0O1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAodGFnID0gdHJ5R2V0KE8gPSAkT2JqZWN0KGl0KSwgVE9fU1RSSU5HX1RBRykpID09ICdzdHJpbmcnID8gdGFnXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBDT1JSRUNUX0FSR1VNRU5UUyA/IGNsYXNzb2ZSYXcoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAocmVzdWx0ID0gY2xhc3NvZlJhdyhPKSkgPT0gJ09iamVjdCcgJiYgaXNDYWxsYWJsZShPLmNhbGxlZSkgPyAnQXJndW1lbnRzJyA6IHJlc3VsdDtcbn07XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb2xsZWN0aW9uLXdlYWsuanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIHVuY3VycnlUaGlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qc1wiKTtcbnZhciBkZWZpbmVCdWlsdElucyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW5zICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWlucy5qc1wiKTtcbnZhciBnZXRXZWFrRGF0YSA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1tZXRhZGF0YS5qc1wiKS5nZXRXZWFrRGF0YSk7XG52YXIgYW5JbnN0YW5jZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9hbi1pbnN0YW5jZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLWluc3RhbmNlLmpzXCIpO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2FuLW9iamVjdCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qc1wiKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzXCIpO1xudmFyIGlzT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2lzLW9iamVjdCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qc1wiKTtcbnZhciBpdGVyYXRlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2l0ZXJhdGUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRlLmpzXCIpO1xudmFyIEFycmF5SXRlcmF0aW9uTW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbiAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbi5qc1wiKTtcbnZhciBoYXNPd24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkuanNcIik7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlLmpzXCIpO1xuXG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGludGVybmFsU3RhdGVHZXR0ZXJGb3IgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcjtcbnZhciBmaW5kID0gQXJyYXlJdGVyYXRpb25Nb2R1bGUuZmluZDtcbnZhciBmaW5kSW5kZXggPSBBcnJheUl0ZXJhdGlvbk1vZHVsZS5maW5kSW5kZXg7XG52YXIgc3BsaWNlID0gdW5jdXJyeVRoaXMoW10uc3BsaWNlKTtcbnZhciBpZCA9IDA7XG5cbi8vIGZhbGxiYWNrIGZvciB1bmNhdWdodCBmcm96ZW4ga2V5c1xudmFyIHVuY2F1Z2h0RnJvemVuU3RvcmUgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgcmV0dXJuIHN0YXRlLmZyb3plbiB8fCAoc3RhdGUuZnJvemVuID0gbmV3IFVuY2F1Z2h0RnJvemVuU3RvcmUoKSk7XG59O1xuXG52YXIgVW5jYXVnaHRGcm96ZW5TdG9yZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5lbnRyaWVzID0gW107XG59O1xuXG52YXIgZmluZFVuY2F1Z2h0RnJvemVuID0gZnVuY3Rpb24gKHN0b3JlLCBrZXkpIHtcbiAgcmV0dXJuIGZpbmQoc3RvcmUuZW50cmllcywgZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGl0WzBdID09PSBrZXk7XG4gIH0pO1xufTtcblxuVW5jYXVnaHRGcm96ZW5TdG9yZS5wcm90b3R5cGUgPSB7XG4gIGdldDogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgcmV0dXJuIGVudHJ5WzFdO1xuICB9LFxuICBoYXM6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gISFmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgZW50cnlbMV0gPSB2YWx1ZTtcbiAgICBlbHNlIHRoaXMuZW50cmllcy5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0sXG4gICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGluZGV4ID0gZmluZEluZGV4KHRoaXMuZW50cmllcywgZnVuY3Rpb24gKGl0KSB7XG4gICAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgICB9KTtcbiAgICBpZiAofmluZGV4KSBzcGxpY2UodGhpcy5lbnRyaWVzLCBpbmRleCwgMSk7XG4gICAgcmV0dXJuICEhfmluZGV4O1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29uc3RydWN0b3I6IGZ1bmN0aW9uICh3cmFwcGVyLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVAsIEFEREVSKSB7XG4gICAgdmFyIENvbnN0cnVjdG9yID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgaXRlcmFibGUpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhhdCwgUHJvdG90eXBlKTtcbiAgICAgIHNldEludGVybmFsU3RhdGUodGhhdCwge1xuICAgICAgICB0eXBlOiBDT05TVFJVQ1RPUl9OQU1FLFxuICAgICAgICBpZDogaWQrKyxcbiAgICAgICAgZnJvemVuOiB1bmRlZmluZWRcbiAgICAgIH0pO1xuICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpdGVyYWJsZSkpIGl0ZXJhdGUoaXRlcmFibGUsIHRoYXRbQURERVJdLCB7IHRoYXQ6IHRoYXQsIEFTX0VOVFJJRVM6IElTX01BUCB9KTtcbiAgICB9KTtcblxuICAgIHZhciBQcm90b3R5cGUgPSBDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbiAgICB2YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IGludGVybmFsU3RhdGVHZXR0ZXJGb3IoQ09OU1RSVUNUT1JfTkFNRSk7XG5cbiAgICB2YXIgZGVmaW5lID0gZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICB2YXIgZGF0YSA9IGdldFdlYWtEYXRhKGFuT2JqZWN0KGtleSksIHRydWUpO1xuICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHVuY2F1Z2h0RnJvemVuU3RvcmUoc3RhdGUpLnNldChrZXksIHZhbHVlKTtcbiAgICAgIGVsc2UgZGF0YVtzdGF0ZS5pZF0gPSB2YWx1ZTtcbiAgICAgIHJldHVybiB0aGF0O1xuICAgIH07XG5cbiAgICBkZWZpbmVCdWlsdElucyhQcm90b3R5cGUsIHtcbiAgICAgIC8vIGB7IFdlYWtNYXAsIFdlYWtTZXQgfS5wcm90b3R5cGUuZGVsZXRlKGtleSlgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtd2Vha21hcC5wcm90b3R5cGUuZGVsZXRlXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXdlYWtzZXQucHJvdG90eXBlLmRlbGV0ZVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgICAgICAgaWYgKCFpc09iamVjdChrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBkYXRhID0gZ2V0V2Vha0RhdGEoa2V5KTtcbiAgICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHJldHVybiB1bmNhdWdodEZyb3plblN0b3JlKHN0YXRlKVsnZGVsZXRlJ10oa2V5KTtcbiAgICAgICAgcmV0dXJuIGRhdGEgJiYgaGFzT3duKGRhdGEsIHN0YXRlLmlkKSAmJiBkZWxldGUgZGF0YVtzdGF0ZS5pZF07XG4gICAgICB9LFxuICAgICAgLy8gYHsgV2Vha01hcCwgV2Vha1NldCB9LnByb3RvdHlwZS5oYXMoa2V5KWAgbWV0aG9kc1xuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy13ZWFrbWFwLnByb3RvdHlwZS5oYXNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtd2Vha3NldC5wcm90b3R5cGUuaGFzXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgICAgICAgaWYgKCFpc09iamVjdChrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBkYXRhID0gZ2V0V2Vha0RhdGEoa2V5KTtcbiAgICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHJldHVybiB1bmNhdWdodEZyb3plblN0b3JlKHN0YXRlKS5oYXMoa2V5KTtcbiAgICAgICAgcmV0dXJuIGRhdGEgJiYgaGFzT3duKGRhdGEsIHN0YXRlLmlkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGRlZmluZUJ1aWx0SW5zKFByb3RvdHlwZSwgSVNfTUFQID8ge1xuICAgICAgLy8gYFdlYWtNYXAucHJvdG90eXBlLmdldChrZXkpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtd2Vha21hcC5wcm90b3R5cGUuZ2V0XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgICAgICAgaWYgKGlzT2JqZWN0KGtleSkpIHtcbiAgICAgICAgICB2YXIgZGF0YSA9IGdldFdlYWtEYXRhKGtleSk7XG4gICAgICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHJldHVybiB1bmNhdWdodEZyb3plblN0b3JlKHN0YXRlKS5nZXQoa2V5KTtcbiAgICAgICAgICByZXR1cm4gZGF0YSA/IGRhdGFbc3RhdGUuaWRdIDogdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gYFdlYWtNYXAucHJvdG90eXBlLnNldChrZXksIHZhbHVlKWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXdlYWttYXAucHJvdG90eXBlLnNldFxuICAgICAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gZGVmaW5lKHRoaXMsIGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0gOiB7XG4gICAgICAvLyBgV2Vha1NldC5wcm90b3R5cGUuYWRkKHZhbHVlKWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXdlYWtzZXQucHJvdG90eXBlLmFkZFxuICAgICAgYWRkOiBmdW5jdGlvbiBhZGQodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGRlZmluZSh0aGlzLCB2YWx1ZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gIH1cbn07XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29sbGVjdGlvbi13ZWFrLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NvbGxlY3Rpb24uanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyICQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZXhwb3J0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzXCIpO1xudmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9nbG9iYWwgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwuanNcIik7XG52YXIgdW5jdXJyeVRoaXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzXCIpO1xudmFyIGlzRm9yY2VkID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWZvcmNlZC5qc1wiKTtcbnZhciBkZWZpbmVCdWlsdEluID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbiAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi5qc1wiKTtcbnZhciBJbnRlcm5hbE1ldGFkYXRhTW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEuanNcIik7XG52YXIgaXRlcmF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pdGVyYXRlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0ZS5qc1wiKTtcbnZhciBhbkluc3RhbmNlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYW4taW5zdGFuY2UuanNcIik7XG52YXIgaXNDYWxsYWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pcy1jYWxsYWJsZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWNhbGxhYmxlLmpzXCIpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQuanNcIik7XG52YXIgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaXMtb2JqZWN0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtb2JqZWN0LmpzXCIpO1xudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2ZhaWxzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZmFpbHMuanNcIik7XG52YXIgY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbiAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbi5qc1wiKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnLmpzXCIpO1xudmFyIGluaGVyaXRJZlJlcXVpcmVkID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2luaGVyaXQtaWYtcmVxdWlyZWQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmhlcml0LWlmLXJlcXVpcmVkLmpzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT05TVFJVQ1RPUl9OQU1FLCB3cmFwcGVyLCBjb21tb24pIHtcbiAgdmFyIElTX01BUCA9IENPTlNUUlVDVE9SX05BTUUuaW5kZXhPZignTWFwJykgIT09IC0xO1xuICB2YXIgSVNfV0VBSyA9IENPTlNUUlVDVE9SX05BTUUuaW5kZXhPZignV2VhaycpICE9PSAtMTtcbiAgdmFyIEFEREVSID0gSVNfTUFQID8gJ3NldCcgOiAnYWRkJztcbiAgdmFyIE5hdGl2ZUNvbnN0cnVjdG9yID0gZ2xvYmFsW0NPTlNUUlVDVE9SX05BTUVdO1xuICB2YXIgTmF0aXZlUHJvdG90eXBlID0gTmF0aXZlQ29uc3RydWN0b3IgJiYgTmF0aXZlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuICB2YXIgQ29uc3RydWN0b3IgPSBOYXRpdmVDb25zdHJ1Y3RvcjtcbiAgdmFyIGV4cG9ydGVkID0ge307XG5cbiAgdmFyIGZpeE1ldGhvZCA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgICB2YXIgdW5jdXJyaWVkTmF0aXZlTWV0aG9kID0gdW5jdXJyeVRoaXMoTmF0aXZlUHJvdG90eXBlW0tFWV0pO1xuICAgIGRlZmluZUJ1aWx0SW4oTmF0aXZlUHJvdG90eXBlLCBLRVksXG4gICAgICBLRVkgPT0gJ2FkZCcgPyBmdW5jdGlvbiBhZGQodmFsdWUpIHtcbiAgICAgICAgdW5jdXJyaWVkTmF0aXZlTWV0aG9kKHRoaXMsIHZhbHVlID09PSAwID8gMCA6IHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9IDogS0VZID09ICdkZWxldGUnID8gZnVuY3Rpb24gKGtleSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3Qoa2V5KSA/IGZhbHNlIDogdW5jdXJyaWVkTmF0aXZlTWV0aG9kKHRoaXMsIGtleSA9PT0gMCA/IDAgOiBrZXkpO1xuICAgICAgfSA6IEtFWSA9PSAnZ2V0JyA/IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGtleSkgPyB1bmRlZmluZWQgOiB1bmN1cnJpZWROYXRpdmVNZXRob2QodGhpcywga2V5ID09PSAwID8gMCA6IGtleSk7XG4gICAgICB9IDogS0VZID09ICdoYXMnID8gZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3Qoa2V5KSA/IGZhbHNlIDogdW5jdXJyaWVkTmF0aXZlTWV0aG9kKHRoaXMsIGtleSA9PT0gMCA/IDAgOiBrZXkpO1xuICAgICAgfSA6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgICAgIHVuY3VycmllZE5hdGl2ZU1ldGhvZCh0aGlzLCBrZXkgPT09IDAgPyAwIDoga2V5LCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgICk7XG4gIH07XG5cbiAgdmFyIFJFUExBQ0UgPSBpc0ZvcmNlZChcbiAgICBDT05TVFJVQ1RPUl9OQU1FLFxuICAgICFpc0NhbGxhYmxlKE5hdGl2ZUNvbnN0cnVjdG9yKSB8fCAhKElTX1dFQUsgfHwgTmF0aXZlUHJvdG90eXBlLmZvckVhY2ggJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5ldyBOYXRpdmVDb25zdHJ1Y3RvcigpLmVudHJpZXMoKS5uZXh0KCk7XG4gICAgfSkpXG4gICk7XG5cbiAgaWYgKFJFUExBQ0UpIHtcbiAgICAvLyBjcmVhdGUgY29sbGVjdGlvbiBjb25zdHJ1Y3RvclxuICAgIENvbnN0cnVjdG9yID0gY29tbW9uLmdldENvbnN0cnVjdG9yKHdyYXBwZXIsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCwgQURERVIpO1xuICAgIEludGVybmFsTWV0YWRhdGFNb2R1bGUuZW5hYmxlKCk7XG4gIH0gZWxzZSBpZiAoaXNGb3JjZWQoQ09OU1RSVUNUT1JfTkFNRSwgdHJ1ZSkpIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQ29uc3RydWN0b3IoKTtcbiAgICAvLyBlYXJseSBpbXBsZW1lbnRhdGlvbnMgbm90IHN1cHBvcnRzIGNoYWluaW5nXG4gICAgdmFyIEhBU05UX0NIQUlOSU5HID0gaW5zdGFuY2VbQURERVJdKElTX1dFQUsgPyB7fSA6IC0wLCAxKSAhPSBpbnN0YW5jZTtcbiAgICAvLyBWOCB+IENocm9taXVtIDQwLSB3ZWFrLWNvbGxlY3Rpb25zIHRocm93cyBvbiBwcmltaXRpdmVzLCBidXQgc2hvdWxkIHJldHVybiBmYWxzZVxuICAgIHZhciBUSFJPV1NfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgaW5zdGFuY2UuaGFzKDEpOyB9KTtcbiAgICAvLyBtb3N0IGVhcmx5IGltcGxlbWVudGF0aW9ucyBkb2Vzbid0IHN1cHBvcnRzIGl0ZXJhYmxlcywgbW9zdCBtb2Rlcm4gLSBub3QgY2xvc2UgaXQgY29ycmVjdGx5XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICAgIHZhciBBQ0NFUFRfSVRFUkFCTEVTID0gY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkgeyBuZXcgTmF0aXZlQ29uc3RydWN0b3IoaXRlcmFibGUpOyB9KTtcbiAgICAvLyBmb3IgZWFybHkgaW1wbGVtZW50YXRpb25zIC0wIGFuZCArMCBub3QgdGhlIHNhbWVcbiAgICB2YXIgQlVHR1lfWkVSTyA9ICFJU19XRUFLICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFY4IH4gQ2hyb21pdW0gNDItIGZhaWxzIG9ubHkgd2l0aCA1KyBlbGVtZW50c1xuICAgICAgdmFyICRpbnN0YW5jZSA9IG5ldyBOYXRpdmVDb25zdHJ1Y3RvcigpO1xuICAgICAgdmFyIGluZGV4ID0gNTtcbiAgICAgIHdoaWxlIChpbmRleC0tKSAkaW5zdGFuY2VbQURERVJdKGluZGV4LCBpbmRleCk7XG4gICAgICByZXR1cm4gISRpbnN0YW5jZS5oYXMoLTApO1xuICAgIH0pO1xuXG4gICAgaWYgKCFBQ0NFUFRfSVRFUkFCTEVTKSB7XG4gICAgICBDb25zdHJ1Y3RvciA9IHdyYXBwZXIoZnVuY3Rpb24gKGR1bW15LCBpdGVyYWJsZSkge1xuICAgICAgICBhbkluc3RhbmNlKGR1bW15LCBOYXRpdmVQcm90b3R5cGUpO1xuICAgICAgICB2YXIgdGhhdCA9IGluaGVyaXRJZlJlcXVpcmVkKG5ldyBOYXRpdmVDb25zdHJ1Y3RvcigpLCBkdW1teSwgQ29uc3RydWN0b3IpO1xuICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0ZXJhYmxlKSkgaXRlcmF0ZShpdGVyYWJsZSwgdGhhdFtBRERFUl0sIHsgdGhhdDogdGhhdCwgQVNfRU5UUklFUzogSVNfTUFQIH0pO1xuICAgICAgICByZXR1cm4gdGhhdDtcbiAgICAgIH0pO1xuICAgICAgQ29uc3RydWN0b3IucHJvdG90eXBlID0gTmF0aXZlUHJvdG90eXBlO1xuICAgICAgTmF0aXZlUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29uc3RydWN0b3I7XG4gICAgfVxuXG4gICAgaWYgKFRIUk9XU19PTl9QUklNSVRJVkVTIHx8IEJVR0dZX1pFUk8pIHtcbiAgICAgIGZpeE1ldGhvZCgnZGVsZXRlJyk7XG4gICAgICBmaXhNZXRob2QoJ2hhcycpO1xuICAgICAgSVNfTUFQICYmIGZpeE1ldGhvZCgnZ2V0Jyk7XG4gICAgfVxuXG4gICAgaWYgKEJVR0dZX1pFUk8gfHwgSEFTTlRfQ0hBSU5JTkcpIGZpeE1ldGhvZChBRERFUik7XG5cbiAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIHNob3VsZCBub3QgY29udGFpbnMgLmNsZWFyIG1ldGhvZFxuICAgIGlmIChJU19XRUFLICYmIE5hdGl2ZVByb3RvdHlwZS5jbGVhcikgZGVsZXRlIE5hdGl2ZVByb3RvdHlwZS5jbGVhcjtcbiAgfVxuXG4gIGV4cG9ydGVkW0NPTlNUUlVDVE9SX05BTUVdID0gQ29uc3RydWN0b3I7XG4gICQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCBmb3JjZWQ6IENvbnN0cnVjdG9yICE9IE5hdGl2ZUNvbnN0cnVjdG9yIH0sIGV4cG9ydGVkKTtcblxuICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgQ09OU1RSVUNUT1JfTkFNRSk7XG5cbiAgaWYgKCFJU19XRUFLKSBjb21tb24uc2V0U3Ryb25nKENvbnN0cnVjdG9yLCBDT05TVFJVQ1RPUl9OQU1FLCBJU19NQVApO1xuXG4gIHJldHVybiBDb25zdHJ1Y3Rvcjtcbn07XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29sbGVjdGlvbi5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMuanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIGhhc093biA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qc1wiKTtcbnZhciBvd25LZXlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL293bi1rZXlzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb3duLWtleXMuanNcIik7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzXCIpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5LmpzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSwgZXhjZXB0aW9ucykge1xuICB2YXIga2V5cyA9IG93bktleXMoc291cmNlKTtcbiAgdmFyIGRlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbiAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoIWhhc093bih0YXJnZXQsIGtleSkgJiYgIShleGNlcHRpb25zICYmIGhhc093bihleGNlcHRpb25zLCBrZXkpKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgIH1cbiAgfVxufTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29ycmVjdC1pcy1yZWdleHAtbG9naWMuanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIHdlbGxLbm93blN5bWJvbCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzXCIpO1xuXG52YXIgTUFUQ0ggPSB3ZWxsS25vd25TeW1ib2woJ21hdGNoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FKSB7XG4gIHZhciByZWdleHAgPSAvLi87XG4gIHRyeSB7XG4gICAgJy8uLydbTUVUSE9EX05BTUVdKHJlZ2V4cCk7XG4gIH0gY2F0Y2ggKGVycm9yMSkge1xuICAgIHRyeSB7XG4gICAgICByZWdleHBbTUFUQ0hdID0gZmFsc2U7XG4gICAgICByZXR1cm4gJy8uLydbTUVUSE9EX05BTUVdKHJlZ2V4cCk7XG4gICAgfSBjYXRjaCAoZXJyb3IyKSB7IC8qIGVtcHR5ICovIH1cbiAgfSByZXR1cm4gZmFsc2U7XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NvcnJlY3QtaXMtcmVnZXhwLWxvZ2ljLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlci5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgZmFpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZmFpbHMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mYWlscy5qc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIEYucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gbnVsbDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRwcm90b3R5cGVvZiAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyBGKCkpICE9PSBGLnByb3RvdHlwZTtcbn0pO1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlci5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0LmpzIjooKG1vZHVsZSk9PntldmFsKCJcbi8vIGBDcmVhdGVJdGVyUmVzdWx0T2JqZWN0YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlaXRlcnJlc3VsdG9iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIGRvbmUpIHtcbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiBkb25lIH07XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5LmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBERVNDUklQVE9SUyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9kZXNjcmlwdG9ycyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Rlc2NyaXB0b3JzLmpzXCIpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5LmpzXCIpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERFU0NSSVBUT1JTID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZGVmaW5lUHJvcGVydHlNb2R1bGUuZihvYmplY3QsIGtleSwgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIHZhbHVlKSk7XG59IDogZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiOigobW9kdWxlKT0+e2V2YWwoIlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvci5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHkuanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIHRvUHJvcGVydHlLZXkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzXCIpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5LmpzXCIpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgdmFyIHByb3BlcnR5S2V5ID0gdG9Qcm9wZXJ0eUtleShrZXkpO1xuICBpZiAocHJvcGVydHlLZXkgaW4gb2JqZWN0KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwgcHJvcGVydHlLZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCB2YWx1ZSkpO1xuICBlbHNlIG9iamVjdFtwcm9wZXJ0eUtleV0gPSB2YWx1ZTtcbn07XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3Nvci5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgbWFrZUJ1aWx0SW4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbiAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanNcIik7XG52YXIgZGVmaW5lUHJvcGVydHkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanNcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgbmFtZSwgZGVzY3JpcHRvcikge1xuICBpZiAoZGVzY3JpcHRvci5nZXQpIG1ha2VCdWlsdEluKGRlc2NyaXB0b3IuZ2V0LCBuYW1lLCB7IGdldHRlcjogdHJ1ZSB9KTtcbiAgaWYgKGRlc2NyaXB0b3Iuc2V0KSBtYWtlQnVpbHRJbihkZXNjcmlwdG9yLnNldCwgbmFtZSwgeyBzZXR0ZXI6IHRydWUgfSk7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eS5mKHRhcmdldCwgbmFtZSwgZGVzY3JpcHRvcik7XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3Nvci5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIGlzQ2FsbGFibGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qc1wiKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eS5qc1wiKTtcbnZhciBtYWtlQnVpbHRJbiA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9tYWtlLWJ1aWx0LWluICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbWFrZS1idWlsdC1pbi5qc1wiKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eS5qc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWx1ZSwgb3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTtcbiAgdmFyIHNpbXBsZSA9IG9wdGlvbnMuZW51bWVyYWJsZTtcbiAgdmFyIG5hbWUgPSBvcHRpb25zLm5hbWUgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubmFtZSA6IGtleTtcbiAgaWYgKGlzQ2FsbGFibGUodmFsdWUpKSBtYWtlQnVpbHRJbih2YWx1ZSwgbmFtZSwgb3B0aW9ucyk7XG4gIGlmIChvcHRpb25zLmdsb2JhbCkge1xuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lR2xvYmFsUHJvcGVydHkoa2V5LCB2YWx1ZSk7XG4gIH0gZWxzZSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghb3B0aW9ucy51bnNhZmUpIGRlbGV0ZSBPW2tleV07XG4gICAgICBlbHNlIGlmIChPW2tleV0pIHNpbXBsZSA9IHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICAgIGlmIChzaW1wbGUpIE9ba2V5XSA9IHZhbHVlO1xuICAgIGVsc2UgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihPLCBrZXksIHtcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiAhb3B0aW9ucy5ub25Db25maWd1cmFibGUsXG4gICAgICB3cml0YWJsZTogIW9wdGlvbnMubm9uV3JpdGFibGVcbiAgICB9KTtcbiAgfSByZXR1cm4gTztcbn07XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbnMuanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIGRlZmluZUJ1aWx0SW4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLmpzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNyYywgb3B0aW9ucykge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSBkZWZpbmVCdWlsdEluKHRhcmdldCwga2V5LCBzcmNba2V5XSwgb3B0aW9ucyk7XG4gIHJldHVybiB0YXJnZXQ7XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbnMuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eS5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2dsb2JhbCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dsb2JhbC5qc1wiKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgdHJ5IHtcbiAgICBkZWZpbmVQcm9wZXJ0eShnbG9iYWwsIGtleSwgeyB2YWx1ZTogdmFsdWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgZ2xvYmFsW2tleV0gPSB2YWx1ZTtcbiAgfSByZXR1cm4gdmFsdWU7XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHkuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVsZXRlLXByb3BlcnR5LW9yLXRocm93LmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciB0cnlUb1N0cmluZyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy90cnktdG8tc3RyaW5nICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZy5qc1wiKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIFApIHtcbiAgaWYgKCFkZWxldGUgT1tQXSkgdGhyb3cgJFR5cGVFcnJvcignQ2Fubm90IGRlbGV0ZSBwcm9wZXJ0eSAnICsgdHJ5VG9TdHJpbmcoUCkgKyAnIG9mICcgKyB0cnlUb1N0cmluZyhPKSk7XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlbGV0ZS1wcm9wZXJ0eS1vci10aHJvdy5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZXNjcmlwdG9ycy5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgZmFpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZmFpbHMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mYWlscy5qc1wiKTtcblxuLy8gRGV0ZWN0IElFOCdzIGluY29tcGxldGUgZGVmaW5lUHJvcGVydHkgaW1wbGVtZW50YXRpb25cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KVsxXSAhPSA3O1xufSk7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtYWxsLmpzIjooKG1vZHVsZSk9PntldmFsKCJcbnZhciBkb2N1bWVudEFsbCA9IHR5cGVvZiBkb2N1bWVudCA9PSAnb2JqZWN0JyAmJiBkb2N1bWVudC5hbGw7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtSXNIVE1MRERBLWludGVybmFsLXNsb3Rcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLXR5cGVvZi11bmRlZmluZWQgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbnZhciBJU19IVE1MRERBID0gdHlwZW9mIGRvY3VtZW50QWxsID09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50QWxsICE9PSB1bmRlZmluZWQ7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBhbGw6IGRvY3VtZW50QWxsLFxuICBJU19IVE1MRERBOiBJU19IVE1MRERBXG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RvY3VtZW50LWFsbC5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudC5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2dsb2JhbCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dsb2JhbC5qc1wiKTtcbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pcy1vYmplY3QgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1vYmplY3QuanNcIik7XG5cbnZhciBkb2N1bWVudCA9IGdsb2JhbC5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIEVYSVNUUyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEVYSVNUUyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaXQpIDoge307XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50LmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXIuanMiOigobW9kdWxlKT0+e2V2YWwoIlxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDB4MUZGRkZGRkZGRkZGRkY7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID4gTUFYX1NBRkVfSU5URUdFUikgdGhyb3cgJFR5cGVFcnJvcignTWF4aW11bSBhbGxvd2VkIGluZGV4IGV4Y2VlZGVkJyk7XG4gIHJldHVybiBpdDtcbn07XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlci5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kb20tZXhjZXB0aW9uLWNvbnN0YW50cy5qcyI6KChtb2R1bGUpPT57ZXZhbCgiXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgSW5kZXhTaXplRXJyb3I6IHsgczogJ0lOREVYX1NJWkVfRVJSJywgYzogMSwgbTogMSB9LFxuICBET01TdHJpbmdTaXplRXJyb3I6IHsgczogJ0RPTVNUUklOR19TSVpFX0VSUicsIGM6IDIsIG06IDAgfSxcbiAgSGllcmFyY2h5UmVxdWVzdEVycm9yOiB7IHM6ICdISUVSQVJDSFlfUkVRVUVTVF9FUlInLCBjOiAzLCBtOiAxIH0sXG4gIFdyb25nRG9jdW1lbnRFcnJvcjogeyBzOiAnV1JPTkdfRE9DVU1FTlRfRVJSJywgYzogNCwgbTogMSB9LFxuICBJbnZhbGlkQ2hhcmFjdGVyRXJyb3I6IHsgczogJ0lOVkFMSURfQ0hBUkFDVEVSX0VSUicsIGM6IDUsIG06IDEgfSxcbiAgTm9EYXRhQWxsb3dlZEVycm9yOiB7IHM6ICdOT19EQVRBX0FMTE9XRURfRVJSJywgYzogNiwgbTogMCB9LFxuICBOb01vZGlmaWNhdGlvbkFsbG93ZWRFcnJvcjogeyBzOiAnTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSJywgYzogNywgbTogMSB9LFxuICBOb3RGb3VuZEVycm9yOiB7IHM6ICdOT1RfRk9VTkRfRVJSJywgYzogOCwgbTogMSB9LFxuICBOb3RTdXBwb3J0ZWRFcnJvcjogeyBzOiAnTk9UX1NVUFBPUlRFRF9FUlInLCBjOiA5LCBtOiAxIH0sXG4gIEluVXNlQXR0cmlidXRlRXJyb3I6IHsgczogJ0lOVVNFX0FUVFJJQlVURV9FUlInLCBjOiAxMCwgbTogMSB9LFxuICBJbnZhbGlkU3RhdGVFcnJvcjogeyBzOiAnSU5WQUxJRF9TVEFURV9FUlInLCBjOiAxMSwgbTogMSB9LFxuICBTeW50YXhFcnJvcjogeyBzOiAnU1lOVEFYX0VSUicsIGM6IDEyLCBtOiAxIH0sXG4gIEludmFsaWRNb2RpZmljYXRpb25FcnJvcjogeyBzOiAnSU5WQUxJRF9NT0RJRklDQVRJT05fRVJSJywgYzogMTMsIG06IDEgfSxcbiAgTmFtZXNwYWNlRXJyb3I6IHsgczogJ05BTUVTUEFDRV9FUlInLCBjOiAxNCwgbTogMSB9LFxuICBJbnZhbGlkQWNjZXNzRXJyb3I6IHsgczogJ0lOVkFMSURfQUNDRVNTX0VSUicsIGM6IDE1LCBtOiAxIH0sXG4gIFZhbGlkYXRpb25FcnJvcjogeyBzOiAnVkFMSURBVElPTl9FUlInLCBjOiAxNiwgbTogMCB9LFxuICBUeXBlTWlzbWF0Y2hFcnJvcjogeyBzOiAnVFlQRV9NSVNNQVRDSF9FUlInLCBjOiAxNywgbTogMSB9LFxuICBTZWN1cml0eUVycm9yOiB7IHM6ICdTRUNVUklUWV9FUlInLCBjOiAxOCwgbTogMSB9LFxuICBOZXR3b3JrRXJyb3I6IHsgczogJ05FVFdPUktfRVJSJywgYzogMTksIG06IDEgfSxcbiAgQWJvcnRFcnJvcjogeyBzOiAnQUJPUlRfRVJSJywgYzogMjAsIG06IDEgfSxcbiAgVVJMTWlzbWF0Y2hFcnJvcjogeyBzOiAnVVJMX01JU01BVENIX0VSUicsIGM6IDIxLCBtOiAxIH0sXG4gIFF1b3RhRXhjZWVkZWRFcnJvcjogeyBzOiAnUVVPVEFfRVhDRUVERURfRVJSJywgYzogMjIsIG06IDEgfSxcbiAgVGltZW91dEVycm9yOiB7IHM6ICdUSU1FT1VUX0VSUicsIGM6IDIzLCBtOiAxIH0sXG4gIEludmFsaWROb2RlVHlwZUVycm9yOiB7IHM6ICdJTlZBTElEX05PREVfVFlQRV9FUlInLCBjOiAyNCwgbTogMSB9LFxuICBEYXRhQ2xvbmVFcnJvcjogeyBzOiAnREFUQV9DTE9ORV9FUlInLCBjOiAyNSwgbTogMSB9XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RvbS1leGNlcHRpb24tY29uc3RhbnRzLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMuanMiOigobW9kdWxlKT0+e2V2YWwoIlxuLy8gaXRlcmFibGUgRE9NIGNvbGxlY3Rpb25zXG4vLyBmbGFnIC0gYGl0ZXJhYmxlYCBpbnRlcmZhY2UgLSAnZW50cmllcycsICdrZXlzJywgJ3ZhbHVlcycsICdmb3JFYWNoJyBtZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ1NTUnVsZUxpc3Q6IDAsXG4gIENTU1N0eWxlRGVjbGFyYXRpb246IDAsXG4gIENTU1ZhbHVlTGlzdDogMCxcbiAgQ2xpZW50UmVjdExpc3Q6IDAsXG4gIERPTVJlY3RMaXN0OiAwLFxuICBET01TdHJpbmdMaXN0OiAwLFxuICBET01Ub2tlbkxpc3Q6IDEsXG4gIERhdGFUcmFuc2Zlckl0ZW1MaXN0OiAwLFxuICBGaWxlTGlzdDogMCxcbiAgSFRNTEFsbENvbGxlY3Rpb246IDAsXG4gIEhUTUxDb2xsZWN0aW9uOiAwLFxuICBIVE1MRm9ybUVsZW1lbnQ6IDAsXG4gIEhUTUxTZWxlY3RFbGVtZW50OiAwLFxuICBNZWRpYUxpc3Q6IDAsXG4gIE1pbWVUeXBlQXJyYXk6IDAsXG4gIE5hbWVkTm9kZU1hcDogMCxcbiAgTm9kZUxpc3Q6IDEsXG4gIFBhaW50UmVxdWVzdExpc3Q6IDAsXG4gIFBsdWdpbjogMCxcbiAgUGx1Z2luQXJyYXk6IDAsXG4gIFNWR0xlbmd0aExpc3Q6IDAsXG4gIFNWR051bWJlckxpc3Q6IDAsXG4gIFNWR1BhdGhTZWdMaXN0OiAwLFxuICBTVkdQb2ludExpc3Q6IDAsXG4gIFNWR1N0cmluZ0xpc3Q6IDAsXG4gIFNWR1RyYW5zZm9ybUxpc3Q6IDAsXG4gIFNvdXJjZUJ1ZmZlckxpc3Q6IDAsXG4gIFN0eWxlU2hlZXRMaXN0OiAwLFxuICBUZXh0VHJhY2tDdWVMaXN0OiAwLFxuICBUZXh0VHJhY2tMaXN0OiAwLFxuICBUb3VjaExpc3Q6IDBcbn07XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9tLWl0ZXJhYmxlcy5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kb20tdG9rZW4tbGlzdC1wcm90b3R5cGUuanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxuLy8gaW4gb2xkIFdlYktpdCB2ZXJzaW9ucywgYGVsZW1lbnQuY2xhc3NMaXN0YCBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgZ2xvYmFsIGBET01Ub2tlbkxpc3RgXG52YXIgZG9jdW1lbnRDcmVhdGVFbGVtZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanNcIik7XG5cbnZhciBjbGFzc0xpc3QgPSBkb2N1bWVudENyZWF0ZUVsZW1lbnQoJ3NwYW4nKS5jbGFzc0xpc3Q7XG52YXIgRE9NVG9rZW5MaXN0UHJvdG90eXBlID0gY2xhc3NMaXN0ICYmIGNsYXNzTGlzdC5jb25zdHJ1Y3RvciAmJiBjbGFzc0xpc3QuY29uc3RydWN0b3IucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IERPTVRva2VuTGlzdFByb3RvdHlwZSA9PT0gT2JqZWN0LnByb3RvdHlwZSA/IHVuZGVmaW5lZCA6IERPTVRva2VuTGlzdFByb3RvdHlwZTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kb20tdG9rZW4tbGlzdC1wcm90b3R5cGUuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLWZmLXZlcnNpb24uanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIHVzZXJBZ2VudCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50LmpzXCIpO1xuXG52YXIgZmlyZWZveCA9IHVzZXJBZ2VudC5tYXRjaCgvZmlyZWZveFxcLyhcXGQrKS9pKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhIWZpcmVmb3ggJiYgK2ZpcmVmb3hbMV07XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLWZmLXZlcnNpb24uanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLWlzLWJyb3dzZXIuanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIElTX0RFTk8gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWRlbm8gKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtaXMtZGVuby5qc1wiKTtcbnZhciBJU19OT0RFID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUuanNcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gIUlTX0RFTk8gJiYgIUlTX05PREVcbiAgJiYgdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0J1xuICAmJiB0eXBlb2YgZG9jdW1lbnQgPT0gJ29iamVjdCc7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLWlzLWJyb3dzZXIuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLWlzLWRlbm8uanMiOigobW9kdWxlKT0+e2V2YWwoIlxuLyogZ2xvYmFsIERlbm8gLS0gRGVubyBjYXNlICovXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBEZW5vID09ICdvYmplY3QnICYmIERlbm8gJiYgdHlwZW9mIERlbm8udmVyc2lvbiA9PSAnb2JqZWN0JztcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtaXMtZGVuby5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtaXMtaWUtb3ItZWRnZS5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgVUEgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudC5qc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPSAvTVNJRXxUcmlkZW50Ly50ZXN0KFVBKTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtaXMtaWUtb3ItZWRnZS5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtaXMtaW9zLXBlYmJsZS5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgdXNlckFnZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQuanNcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gL2lwYWR8aXBob25lfGlwb2QvaS50ZXN0KHVzZXJBZ2VudCkgJiYgdHlwZW9mIFBlYmJsZSAhPSAndW5kZWZpbmVkJztcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtaXMtaW9zLXBlYmJsZS5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtaXMtaW9zLmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciB1c2VyQWdlbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudC5qc1wiKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZG9zL25vLXZ1bG5lcmFibGUgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSAvKD86aXBhZHxpcGhvbmV8aXBvZCkuKmFwcGxld2Via2l0L2kudGVzdCh1c2VyQWdlbnQpO1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUuanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIGNsYXNzb2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jbGFzc29mLXJhdy5qc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgcHJvY2VzcyAhPSAndW5kZWZpbmVkJyAmJiBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJztcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZS5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtaXMtd2Vib3Mtd2Via2l0LmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciB1c2VyQWdlbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudC5qc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPSAvd2ViMHMoPyEuKmNocm9tZSkvaS50ZXN0KHVzZXJBZ2VudCk7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLWlzLXdlYm9zLXdlYmtpdC5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudC5qcyI6KChtb2R1bGUpPT57ZXZhbCgiXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBuYXZpZ2F0b3IgIT0gJ3VuZGVmaW5lZCcgJiYgU3RyaW5nKG5hdmlnYXRvci51c2VyQWdlbnQpIHx8ICcnO1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50LmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uLmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZ2xvYmFsICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2xvYmFsLmpzXCIpO1xudmFyIHVzZXJBZ2VudCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50LmpzXCIpO1xuXG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIERlbm8gPSBnbG9iYWwuRGVubztcbnZhciB2ZXJzaW9ucyA9IHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucyB8fCBEZW5vICYmIERlbm8udmVyc2lvbjtcbnZhciB2OCA9IHZlcnNpb25zICYmIHZlcnNpb25zLnY4O1xudmFyIG1hdGNoLCB2ZXJzaW9uO1xuXG5pZiAodjgpIHtcbiAgbWF0Y2ggPSB2OC5zcGxpdCgnLicpO1xuICAvLyBpbiBvbGQgQ2hyb21lLCB2ZXJzaW9ucyBvZiBWOCBpc24ndCBWOCA9IENocm9tZSAvIDEwXG4gIC8vIGJ1dCB0aGVpciBjb3JyZWN0IHZlcnNpb25zIGFyZSBub3QgaW50ZXJlc3RpbmcgZm9yIHVzXG4gIHZlcnNpb24gPSBtYXRjaFswXSA+IDAgJiYgbWF0Y2hbMF0gPCA0ID8gMSA6ICsobWF0Y2hbMF0gKyBtYXRjaFsxXSk7XG59XG5cbi8vIEJyb3dzZXJGUyBOb2RlSlMgYHByb2Nlc3NgIHBvbHlmaWxsIGluY29ycmVjdGx5IHNldCBgLnY4YCB0byBgMC4wYFxuLy8gc28gY2hlY2sgYHVzZXJBZ2VudGAgZXZlbiBpZiBgLnY4YCBleGlzdHMsIGJ1dCAwXG5pZiAoIXZlcnNpb24gJiYgdXNlckFnZW50KSB7XG4gIG1hdGNoID0gdXNlckFnZW50Lm1hdGNoKC9FZGdlXFwvKFxcZCspLyk7XG4gIGlmICghbWF0Y2ggfHwgbWF0Y2hbMV0gPj0gNzQpIHtcbiAgICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLyk7XG4gICAgaWYgKG1hdGNoKSB2ZXJzaW9uID0gK21hdGNoWzFdO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdmVyc2lvbjtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbi5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtd2Via2l0LXZlcnNpb24uanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIHVzZXJBZ2VudCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50LmpzXCIpO1xuXG52YXIgd2Via2l0ID0gdXNlckFnZW50Lm1hdGNoKC9BcHBsZVdlYktpdFxcLyhcXGQrKVxcLi8pO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICEhd2Via2l0ICYmICt3ZWJraXRbMV07XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLXdlYmtpdC12ZXJzaW9uLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VudW0tYnVnLWtleXMuanMiOigobW9kdWxlKT0+e2V2YWwoIlxuLy8gSUU4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IFtcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ2hhc093blByb3BlcnR5JyxcbiAgJ2lzUHJvdG90eXBlT2YnLFxuICAncHJvcGVydHlJc0VudW1lcmFibGUnLFxuICAndG9Mb2NhbGVTdHJpbmcnLFxuICAndG9TdHJpbmcnLFxuICAndmFsdWVPZidcbl07XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lcnJvci1zdGFjay1jbGVhci5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgdW5jdXJyeVRoaXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzXCIpO1xuXG52YXIgJEVycm9yID0gRXJyb3I7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xuXG52YXIgVEVTVCA9IChmdW5jdGlvbiAoYXJnKSB7IHJldHVybiBTdHJpbmcoJEVycm9yKGFyZykuc3RhY2spOyB9KSgnenhjYXNkJyk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVkb3Mvbm8tdnVsbmVyYWJsZSAtLSBzYWZlXG52YXIgVjhfT1JfQ0hBS1JBX1NUQUNLX0VOVFJZID0gL1xcblxccyphdCBbXjpdKjpbXlxcbl0qLztcbnZhciBJU19WOF9PUl9DSEFLUkFfU1RBQ0sgPSBWOF9PUl9DSEFLUkFfU1RBQ0tfRU5UUlkudGVzdChURVNUKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RhY2ssIGRyb3BFbnRyaWVzKSB7XG4gIGlmIChJU19WOF9PUl9DSEFLUkFfU1RBQ0sgJiYgdHlwZW9mIHN0YWNrID09ICdzdHJpbmcnICYmICEkRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UpIHtcbiAgICB3aGlsZSAoZHJvcEVudHJpZXMtLSkgc3RhY2sgPSByZXBsYWNlKHN0YWNrLCBWOF9PUl9DSEFLUkFfU1RBQ0tfRU5UUlksICcnKTtcbiAgfSByZXR1cm4gc3RhY2s7XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWNsZWFyLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWluc3RhbGwuanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanNcIik7XG52YXIgY2xlYXJFcnJvclN0YWNrID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWNsZWFyICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXJyb3Itc3RhY2stY2xlYXIuanNcIik7XG52YXIgRVJST1JfU1RBQ0tfSU5TVEFMTEFCTEUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZXJyb3Itc3RhY2staW5zdGFsbGFibGUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsYWJsZS5qc1wiKTtcblxuLy8gbm9uLXN0YW5kYXJkIFY4XG52YXIgY2FwdHVyZVN0YWNrVHJhY2UgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXJyb3IsIEMsIHN0YWNrLCBkcm9wRW50cmllcykge1xuICBpZiAoRVJST1JfU1RBQ0tfSU5TVEFMTEFCTEUpIHtcbiAgICBpZiAoY2FwdHVyZVN0YWNrVHJhY2UpIGNhcHR1cmVTdGFja1RyYWNlKGVycm9yLCBDKTtcbiAgICBlbHNlIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShlcnJvciwgJ3N0YWNrJywgY2xlYXJFcnJvclN0YWNrKHN0YWNrLCBkcm9wRW50cmllcykpO1xuICB9XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWluc3RhbGwuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXJyb3Itc3RhY2staW5zdGFsbGFibGUuanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2ZhaWxzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZmFpbHMuanNcIik7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3IuanNcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGVycm9yID0gRXJyb3IoJ2EnKTtcbiAgaWYgKCEoJ3N0YWNrJyBpbiBlcnJvcikpIHJldHVybiB0cnVlO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVycm9yLCAnc3RhY2snLCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgNykpO1xuICByZXR1cm4gZXJyb3Iuc3RhY2sgIT09IDc7XG59KTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsYWJsZS5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lcnJvci10by1zdHJpbmcuanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIERFU0NSSVBUT1JTID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanNcIik7XG52YXIgZmFpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZmFpbHMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mYWlscy5qc1wiKTtcbnZhciBhbk9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9hbi1vYmplY3QgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hbi1vYmplY3QuanNcIik7XG52YXIgY3JlYXRlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtY3JlYXRlLmpzXCIpO1xudmFyIG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL25vcm1hbGl6ZS1zdHJpbmctYXJndW1lbnQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9ub3JtYWxpemUtc3RyaW5nLWFyZ3VtZW50LmpzXCIpO1xuXG52YXIgbmF0aXZlRXJyb3JUb1N0cmluZyA9IEVycm9yLnByb3RvdHlwZS50b1N0cmluZztcblxudmFyIElOQ09SUkVDVF9UT19TVFJJTkcgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGlmIChERVNDUklQVE9SUykge1xuICAgIC8vIENocm9tZSAzMi0gaW5jb3JyZWN0bHkgY2FsbCBhY2Nlc3NvclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIHZhciBvYmplY3QgPSBjcmVhdGUoT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnbmFtZScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gdGhpcyA9PT0gb2JqZWN0O1xuICAgIH0gfSkpO1xuICAgIGlmIChuYXRpdmVFcnJvclRvU3RyaW5nLmNhbGwob2JqZWN0KSAhPT0gJ3RydWUnKSByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvLyBGRjEwLSBkb2VzIG5vdCBwcm9wZXJseSBoYW5kbGUgbm9uLXN0cmluZ3NcbiAgcmV0dXJuIG5hdGl2ZUVycm9yVG9TdHJpbmcuY2FsbCh7IG1lc3NhZ2U6IDEsIG5hbWU6IDIgfSkgIT09ICcyOiAxJ1xuICAgIC8vIElFOCBkb2VzIG5vdCBwcm9wZXJseSBoYW5kbGUgZGVmYXVsdHNcbiAgICB8fCBuYXRpdmVFcnJvclRvU3RyaW5nLmNhbGwoe30pICE9PSAnRXJyb3InO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gSU5DT1JSRUNUX1RPX1NUUklORyA/IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICB2YXIgTyA9IGFuT2JqZWN0KHRoaXMpO1xuICB2YXIgbmFtZSA9IG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50KE8ubmFtZSwgJ0Vycm9yJyk7XG4gIHZhciBtZXNzYWdlID0gbm9ybWFsaXplU3RyaW5nQXJndW1lbnQoTy5tZXNzYWdlKTtcbiAgcmV0dXJuICFuYW1lID8gbWVzc2FnZSA6ICFtZXNzYWdlID8gbmFtZSA6IG5hbWUgKyAnOiAnICsgbWVzc2FnZTtcbn0gOiBuYXRpdmVFcnJvclRvU3RyaW5nO1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Vycm9yLXRvLXN0cmluZy5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9leHBvcnQuanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9nbG9iYWwgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwuanNcIik7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gKF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qc1wiKS5mKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5LmpzXCIpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLmpzXCIpO1xudmFyIGRlZmluZUdsb2JhbFByb3BlcnR5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2RlZmluZS1nbG9iYWwtcHJvcGVydHkgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5LmpzXCIpO1xudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzXCIpO1xudmFyIGlzRm9yY2VkID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWZvcmNlZC5qc1wiKTtcblxuLypcbiAgb3B0aW9ucy50YXJnZXQgICAgICAgICAtIG5hbWUgb2YgdGhlIHRhcmdldCBvYmplY3RcbiAgb3B0aW9ucy5nbG9iYWwgICAgICAgICAtIHRhcmdldCBpcyB0aGUgZ2xvYmFsIG9iamVjdFxuICBvcHRpb25zLnN0YXQgICAgICAgICAgIC0gZXhwb3J0IGFzIHN0YXRpYyBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnByb3RvICAgICAgICAgIC0gZXhwb3J0IGFzIHByb3RvdHlwZSBtZXRob2RzIG9mIHRhcmdldFxuICBvcHRpb25zLnJlYWwgICAgICAgICAgIC0gcmVhbCBwcm90b3R5cGUgbWV0aG9kIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy5mb3JjZWQgICAgICAgICAtIGV4cG9ydCBldmVuIGlmIHRoZSBuYXRpdmUgZmVhdHVyZSBpcyBhdmFpbGFibGVcbiAgb3B0aW9ucy5iaW5kICAgICAgICAgICAtIGJpbmQgbWV0aG9kcyB0byB0aGUgdGFyZ2V0LCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMud3JhcCAgICAgICAgICAgLSB3cmFwIGNvbnN0cnVjdG9ycyB0byBwcmV2ZW50aW5nIGdsb2JhbCBwb2xsdXRpb24sIHJlcXVpcmVkIGZvciB0aGUgYHB1cmVgIHZlcnNpb25cbiAgb3B0aW9ucy51bnNhZmUgICAgICAgICAtIHVzZSB0aGUgc2ltcGxlIGFzc2lnbm1lbnQgb2YgcHJvcGVydHkgaW5zdGVhZCBvZiBkZWxldGUgKyBkZWZpbmVQcm9wZXJ0eVxuICBvcHRpb25zLnNoYW0gICAgICAgICAgIC0gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICBvcHRpb25zLmVudW1lcmFibGUgICAgIC0gZXhwb3J0IGFzIGVudW1lcmFibGUgcHJvcGVydHlcbiAgb3B0aW9ucy5kb250Q2FsbEdldFNldCAtIHByZXZlbnQgY2FsbGluZyBhIGdldHRlciBvbiB0YXJnZXRcbiAgb3B0aW9ucy5uYW1lICAgICAgICAgICAtIHRoZSAubmFtZSBvZiB0aGUgZnVuY3Rpb24gaWYgaXQgZG9lcyBub3QgbWF0Y2ggdGhlIGtleVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9wdGlvbnMsIHNvdXJjZSkge1xuICB2YXIgVEFSR0VUID0gb3B0aW9ucy50YXJnZXQ7XG4gIHZhciBHTE9CQUwgPSBvcHRpb25zLmdsb2JhbDtcbiAgdmFyIFNUQVRJQyA9IG9wdGlvbnMuc3RhdDtcbiAgdmFyIEZPUkNFRCwgdGFyZ2V0LCBrZXksIHRhcmdldFByb3BlcnR5LCBzb3VyY2VQcm9wZXJ0eSwgZGVzY3JpcHRvcjtcbiAgaWYgKEdMT0JBTCkge1xuICAgIHRhcmdldCA9IGdsb2JhbDtcbiAgfSBlbHNlIGlmIChTVEFUSUMpIHtcbiAgICB0YXJnZXQgPSBnbG9iYWxbVEFSR0VUXSB8fCBkZWZpbmVHbG9iYWxQcm9wZXJ0eShUQVJHRVQsIHt9KTtcbiAgfSBlbHNlIHtcbiAgICB0YXJnZXQgPSAoZ2xvYmFsW1RBUkdFVF0gfHwge30pLnByb3RvdHlwZTtcbiAgfVxuICBpZiAodGFyZ2V0KSBmb3IgKGtleSBpbiBzb3VyY2UpIHtcbiAgICBzb3VyY2VQcm9wZXJ0eSA9IHNvdXJjZVtrZXldO1xuICAgIGlmIChvcHRpb25zLmRvbnRDYWxsR2V0U2V0KSB7XG4gICAgICBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KTtcbiAgICAgIHRhcmdldFByb3BlcnR5ID0gZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIH0gZWxzZSB0YXJnZXRQcm9wZXJ0eSA9IHRhcmdldFtrZXldO1xuICAgIEZPUkNFRCA9IGlzRm9yY2VkKEdMT0JBTCA/IGtleSA6IFRBUkdFVCArIChTVEFUSUMgPyAnLicgOiAnIycpICsga2V5LCBvcHRpb25zLmZvcmNlZCk7XG4gICAgLy8gY29udGFpbmVkIGluIHRhcmdldFxuICAgIGlmICghRk9SQ0VEICYmIHRhcmdldFByb3BlcnR5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2Ygc291cmNlUHJvcGVydHkgPT0gdHlwZW9mIHRhcmdldFByb3BlcnR5KSBjb250aW51ZTtcbiAgICAgIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoc291cmNlUHJvcGVydHksIHRhcmdldFByb3BlcnR5KTtcbiAgICB9XG4gICAgLy8gYWRkIGEgZmxhZyB0byBub3QgY29tcGxldGVseSBmdWxsIHBvbHlmaWxsc1xuICAgIGlmIChvcHRpb25zLnNoYW0gfHwgKHRhcmdldFByb3BlcnR5ICYmIHRhcmdldFByb3BlcnR5LnNoYW0pKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoc291cmNlUHJvcGVydHksICdzaGFtJywgdHJ1ZSk7XG4gICAgfVxuICAgIGRlZmluZUJ1aWx0SW4odGFyZ2V0LCBrZXksIHNvdXJjZVByb3BlcnR5LCBvcHRpb25zKTtcbiAgfVxufTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9leHBvcnQuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZmFpbHMuanMiOigobW9kdWxlKT0+e2V2YWwoIlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mYWlscy5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljLmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbi8vIFRPRE86IFJlbW92ZSBmcm9tIGBjb3JlLWpzQDRgIHNpbmNlIGl0J3MgbW92ZWQgdG8gZW50cnkgcG9pbnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjLmpzXCIpO1xudmFyIHVuY3VycnlUaGlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1jbGF1c2UgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtY2xhdXNlLmpzXCIpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLmpzXCIpO1xudmFyIHJlZ2V4cEV4ZWMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtZXhlYy5qc1wiKTtcbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mYWlscyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzXCIpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzXCIpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanNcIik7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgUmVnRXhwUHJvdG90eXBlID0gUmVnRXhwLnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBleGVjLCBGT1JDRUQsIFNIQU0pIHtcbiAgdmFyIFNZTUJPTCA9IHdlbGxLbm93blN5bWJvbChLRVkpO1xuXG4gIHZhciBERUxFR0FURVNfVE9fU1lNQk9MID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTdHJpbmcgbWV0aG9kcyBjYWxsIHN5bWJvbC1uYW1lZCBSZWdFcCBtZXRob2RzXG4gICAgdmFyIE8gPSB7fTtcbiAgICBPW1NZTUJPTF0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9O1xuICAgIHJldHVybiAnJ1tLRVldKE8pICE9IDc7XG4gIH0pO1xuXG4gIHZhciBERUxFR0FURVNfVE9fRVhFQyA9IERFTEVHQVRFU19UT19TWU1CT0wgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTeW1ib2wtbmFtZWQgUmVnRXhwIG1ldGhvZHMgY2FsbCAuZXhlY1xuICAgIHZhciBleGVjQ2FsbGVkID0gZmFsc2U7XG4gICAgdmFyIHJlID0gL2EvO1xuXG4gICAgaWYgKEtFWSA9PT0gJ3NwbGl0Jykge1xuICAgICAgLy8gV2UgY2FuJ3QgdXNlIHJlYWwgcmVnZXggaGVyZSBzaW5jZSBpdCBjYXVzZXMgZGVvcHRpbWl6YXRpb25cbiAgICAgIC8vIGFuZCBzZXJpb3VzIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uIGluIFY4XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMzA2XG4gICAgICByZSA9IHt9O1xuICAgICAgLy8gUmVnRXhwW0BAc3BsaXRdIGRvZXNuJ3QgY2FsbCB0aGUgcmVnZXgncyBleGVjIG1ldGhvZCwgYnV0IGZpcnN0IGNyZWF0ZXNcbiAgICAgIC8vIGEgbmV3IG9uZS4gV2UgbmVlZCB0byByZXR1cm4gdGhlIHBhdGNoZWQgcmVnZXggd2hlbiBjcmVhdGluZyB0aGUgbmV3IG9uZS5cbiAgICAgIHJlLmNvbnN0cnVjdG9yID0ge307XG4gICAgICByZS5jb25zdHJ1Y3RvcltTUEVDSUVTXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlOyB9O1xuICAgICAgcmUuZmxhZ3MgPSAnJztcbiAgICAgIHJlW1NZTUJPTF0gPSAvLi9bU1lNQk9MXTtcbiAgICB9XG5cbiAgICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyBleGVjQ2FsbGVkID0gdHJ1ZTsgcmV0dXJuIG51bGw7IH07XG5cbiAgICByZVtTWU1CT0xdKCcnKTtcbiAgICByZXR1cm4gIWV4ZWNDYWxsZWQ7XG4gIH0pO1xuXG4gIGlmIChcbiAgICAhREVMRUdBVEVTX1RPX1NZTUJPTCB8fFxuICAgICFERUxFR0FURVNfVE9fRVhFQyB8fFxuICAgIEZPUkNFRFxuICApIHtcbiAgICB2YXIgdW5jdXJyaWVkTmF0aXZlUmVnRXhwTWV0aG9kID0gdW5jdXJyeVRoaXMoLy4vW1NZTUJPTF0pO1xuICAgIHZhciBtZXRob2RzID0gZXhlYyhTWU1CT0wsICcnW0tFWV0sIGZ1bmN0aW9uIChuYXRpdmVNZXRob2QsIHJlZ2V4cCwgc3RyLCBhcmcyLCBmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgdmFyIHVuY3VycmllZE5hdGl2ZU1ldGhvZCA9IHVuY3VycnlUaGlzKG5hdGl2ZU1ldGhvZCk7XG4gICAgICB2YXIgJGV4ZWMgPSByZWdleHAuZXhlYztcbiAgICAgIGlmICgkZXhlYyA9PT0gcmVnZXhwRXhlYyB8fCAkZXhlYyA9PT0gUmVnRXhwUHJvdG90eXBlLmV4ZWMpIHtcbiAgICAgICAgaWYgKERFTEVHQVRFU19UT19TWU1CT0wgJiYgIWZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgICAgLy8gVGhlIG5hdGl2ZSBTdHJpbmcgbWV0aG9kIGFscmVhZHkgZGVsZWdhdGVzIHRvIEBAbWV0aG9kICh0aGlzXG4gICAgICAgICAgLy8gcG9seWZpbGxlZCBmdW5jdGlvbiksIGxlYXNpbmcgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxuICAgICAgICAgIC8vIFdlIGF2b2lkIGl0IGJ5IGRpcmVjdGx5IGNhbGxpbmcgdGhlIG5hdGl2ZSBAQG1ldGhvZCBtZXRob2QuXG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuY3VycmllZE5hdGl2ZVJlZ0V4cE1ldGhvZChyZWdleHAsIHN0ciwgYXJnMikgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogdW5jdXJyaWVkTmF0aXZlTWV0aG9kKHN0ciwgcmVnZXhwLCBhcmcyKSB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UgfTtcbiAgICB9KTtcblxuICAgIGRlZmluZUJ1aWx0SW4oU3RyaW5nLnByb3RvdHlwZSwgS0VZLCBtZXRob2RzWzBdKTtcbiAgICBkZWZpbmVCdWlsdEluKFJlZ0V4cFByb3RvdHlwZSwgU1lNQk9MLCBtZXRob2RzWzFdKTtcbiAgfVxuXG4gIGlmIChTSEFNKSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoUmVnRXhwUHJvdG90eXBlW1NZTUJPTF0sICdzaGFtJywgdHJ1ZSk7XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZmxhdHRlbi1pbnRvLWFycmF5LmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBpc0FycmF5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2lzLWFycmF5ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtYXJyYXkuanNcIik7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZS5qc1wiKTtcbnZhciBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlciAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RvZXMtbm90LWV4Y2VlZC1zYWZlLWludGVnZXIuanNcIik7XG52YXIgYmluZCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQuanNcIik7XG5cbi8vIGBGbGF0dGVuSW50b0FycmF5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtZmxhdE1hcC8jc2VjLUZsYXR0ZW5JbnRvQXJyYXlcbnZhciBmbGF0dGVuSW50b0FycmF5ID0gZnVuY3Rpb24gKHRhcmdldCwgb3JpZ2luYWwsIHNvdXJjZSwgc291cmNlTGVuLCBzdGFydCwgZGVwdGgsIG1hcHBlciwgdGhpc0FyZykge1xuICB2YXIgdGFyZ2V0SW5kZXggPSBzdGFydDtcbiAgdmFyIHNvdXJjZUluZGV4ID0gMDtcbiAgdmFyIG1hcEZuID0gbWFwcGVyID8gYmluZChtYXBwZXIsIHRoaXNBcmcpIDogZmFsc2U7XG4gIHZhciBlbGVtZW50LCBlbGVtZW50TGVuO1xuXG4gIHdoaWxlIChzb3VyY2VJbmRleCA8IHNvdXJjZUxlbikge1xuICAgIGlmIChzb3VyY2VJbmRleCBpbiBzb3VyY2UpIHtcbiAgICAgIGVsZW1lbnQgPSBtYXBGbiA/IG1hcEZuKHNvdXJjZVtzb3VyY2VJbmRleF0sIHNvdXJjZUluZGV4LCBvcmlnaW5hbCkgOiBzb3VyY2Vbc291cmNlSW5kZXhdO1xuXG4gICAgICBpZiAoZGVwdGggPiAwICYmIGlzQXJyYXkoZWxlbWVudCkpIHtcbiAgICAgICAgZWxlbWVudExlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKGVsZW1lbnQpO1xuICAgICAgICB0YXJnZXRJbmRleCA9IGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgZWxlbWVudCwgZWxlbWVudExlbiwgdGFyZ2V0SW5kZXgsIGRlcHRoIC0gMSkgLSAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyKHRhcmdldEluZGV4ICsgMSk7XG4gICAgICAgIHRhcmdldFt0YXJnZXRJbmRleF0gPSBlbGVtZW50O1xuICAgICAgfVxuXG4gICAgICB0YXJnZXRJbmRleCsrO1xuICAgIH1cbiAgICBzb3VyY2VJbmRleCsrO1xuICB9XG4gIHJldHVybiB0YXJnZXRJbmRleDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZmxhdHRlbkludG9BcnJheTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mbGF0dGVuLWludG8tYXJyYXkuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnJlZXppbmcuanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2ZhaWxzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZmFpbHMuanNcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2V4dGVuc2libGUsIGVzL25vLW9iamVjdC1wcmV2ZW50ZXh0ZW5zaW9ucyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmlzRXh0ZW5zaWJsZShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKTtcbn0pO1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZyZWV6aW5nLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5LmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBOQVRJVkVfQklORCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlLmpzXCIpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgYXBwbHkgPSBGdW5jdGlvblByb3RvdHlwZS5hcHBseTtcbnZhciBjYWxsID0gRnVuY3Rpb25Qcm90b3R5cGUuY2FsbDtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXJlZmxlY3QgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgUmVmbGVjdCA9PSAnb2JqZWN0JyAmJiBSZWZsZWN0LmFwcGx5IHx8IChOQVRJVkVfQklORCA/IGNhbGwuYmluZChhcHBseSkgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBjYWxsLmFwcGx5KGFwcGx5LCBhcmd1bWVudHMpO1xufSk7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHkuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0LmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciB1bmN1cnJ5VGhpcyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtY2xhdXNlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZS5qc1wiKTtcbnZhciBhQ2FsbGFibGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2EtY2FsbGFibGUuanNcIik7XG52YXIgTkFUSVZFX0JJTkQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qc1wiKTtcblxudmFyIGJpbmQgPSB1bmN1cnJ5VGhpcyh1bmN1cnJ5VGhpcy5iaW5kKTtcblxuLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCkge1xuICBhQ2FsbGFibGUoZm4pO1xuICByZXR1cm4gdGhhdCA9PT0gdW5kZWZpbmVkID8gZm4gOiBOQVRJVkVfQklORCA/IGJpbmQoZm4sIHRoYXQpIDogZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0LmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlLmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mYWlscyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG4gIHZhciB0ZXN0ID0gKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSkuYmluZCgpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuIHR5cGVvZiB0ZXN0ICE9ICdmdW5jdGlvbicgfHwgdGVzdC5oYXNPd25Qcm9wZXJ0eSgncHJvdG90eXBlJyk7XG59KTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZS5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1jYWxsLmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBOQVRJVkVfQklORCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlLmpzXCIpO1xuXG52YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGNhbGwpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShjYWxsLCBhcmd1bWVudHMpO1xufTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1jYWxsLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUuanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIERFU0NSSVBUT1JTID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanNcIik7XG52YXIgaGFzT3duID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5LmpzXCIpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0RGVzY3JpcHRvciA9IERFU0NSSVBUT1JTICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbnZhciBFWElTVFMgPSBoYXNPd24oRnVuY3Rpb25Qcm90b3R5cGUsICduYW1lJyk7XG4vLyBhZGRpdGlvbmFsIHByb3RlY3Rpb24gZnJvbSBtaW5pZmllZCAvIG1hbmdsZWQgLyBkcm9wcGVkIGZ1bmN0aW9uIG5hbWVzXG52YXIgUFJPUEVSID0gRVhJU1RTICYmIChmdW5jdGlvbiBzb21ldGhpbmcoKSB7IC8qIGVtcHR5ICovIH0pLm5hbWUgPT09ICdzb21ldGhpbmcnO1xudmFyIENPTkZJR1VSQUJMRSA9IEVYSVNUUyAmJiAoIURFU0NSSVBUT1JTIHx8IChERVNDUklQVE9SUyAmJiBnZXREZXNjcmlwdG9yKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpLmNvbmZpZ3VyYWJsZSkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgRVhJU1RTOiBFWElTVFMsXG4gIFBST1BFUjogUFJPUEVSLFxuICBDT05GSUdVUkFCTEU6IENPTkZJR1VSQUJMRVxufTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1hY2Nlc3Nvci5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgdW5jdXJyeVRoaXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzXCIpO1xudmFyIGFDYWxsYWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9hLWNhbGxhYmxlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1jYWxsYWJsZS5qc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBrZXksIG1ldGhvZCkge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbiAgICByZXR1cm4gdW5jdXJyeVRoaXMoYUNhbGxhYmxlKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBrZXkpW21ldGhvZF0pKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtYWNjZXNzb3IuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZS5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgY2xhc3NvZlJhdyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9jbGFzc29mLXJhdyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NsYXNzb2YtcmF3LmpzXCIpO1xudmFyIHVuY3VycnlUaGlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4pIHtcbiAgLy8gTmFzaG9ybiBidWc6XG4gIC8vICAgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzExMjhcbiAgLy8gICBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTEzMFxuICBpZiAoY2xhc3NvZlJhdyhmbikgPT09ICdGdW5jdGlvbicpIHJldHVybiB1bmN1cnJ5VGhpcyhmbik7XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1jbGF1c2UuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBOQVRJVkVfQklORCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlLmpzXCIpO1xuXG52YXIgRnVuY3Rpb25Qcm90b3R5cGUgPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgY2FsbCA9IEZ1bmN0aW9uUHJvdG90eXBlLmNhbGw7XG52YXIgdW5jdXJyeVRoaXNXaXRoQmluZCA9IE5BVElWRV9CSU5EICYmIEZ1bmN0aW9uUHJvdG90eXBlLmJpbmQuYmluZChjYWxsLCBjYWxsKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/IHVuY3VycnlUaGlzV2l0aEJpbmQgOiBmdW5jdGlvbiAoZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY2FsbC5hcHBseShmbiwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2dsb2JhbCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dsb2JhbC5qc1wiKTtcbnZhciBpc0NhbGxhYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY2FsbGFibGUuanNcIik7XG5cbnZhciBhRnVuY3Rpb24gPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoYXJndW1lbnQpID8gYXJndW1lbnQgOiB1bmRlZmluZWQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lc3BhY2UsIG1ldGhvZCkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBhRnVuY3Rpb24oZ2xvYmFsW25hbWVzcGFjZV0pIDogZ2xvYmFsW25hbWVzcGFjZV0gJiYgZ2xvYmFsW25hbWVzcGFjZV1bbWV0aG9kXTtcbn07XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QuanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIGNsYXNzb2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvY2xhc3NvZiAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NsYXNzb2YuanNcIik7XG52YXIgZ2V0TWV0aG9kID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2dldC1tZXRob2QgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtbWV0aG9kLmpzXCIpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQuanNcIik7XG52YXIgSXRlcmF0b3JzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9ycy5qc1wiKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC5qc1wiKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGl0KSkgcmV0dXJuIGdldE1ldGhvZChpdCwgSVRFUkFUT1IpXG4gICAgfHwgZ2V0TWV0aG9kKGl0LCAnQEBpdGVyYXRvcicpXG4gICAgfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbn07XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtaXRlcmF0b3IuanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIGNhbGwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanNcIik7XG52YXIgYUNhbGxhYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzXCIpO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2FuLW9iamVjdCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qc1wiKTtcbnZhciB0cnlUb1N0cmluZyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy90cnktdG8tc3RyaW5nICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZy5qc1wiKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qc1wiKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50LCB1c2luZ0l0ZXJhdG9yKSB7XG4gIHZhciBpdGVyYXRvck1ldGhvZCA9IGFyZ3VtZW50cy5sZW5ndGggPCAyID8gZ2V0SXRlcmF0b3JNZXRob2QoYXJndW1lbnQpIDogdXNpbmdJdGVyYXRvcjtcbiAgaWYgKGFDYWxsYWJsZShpdGVyYXRvck1ldGhvZCkpIHJldHVybiBhbk9iamVjdChjYWxsKGl0ZXJhdG9yTWV0aG9kLCBhcmd1bWVudCkpO1xuICB0aHJvdyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGl0ZXJhYmxlJyk7XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1pdGVyYXRvci5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtanNvbi1yZXBsYWNlci1mdW5jdGlvbi5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgdW5jdXJyeVRoaXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzXCIpO1xudmFyIGlzQXJyYXkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaXMtYXJyYXkgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1hcnJheS5qc1wiKTtcbnZhciBpc0NhbGxhYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY2FsbGFibGUuanNcIik7XG52YXIgY2xhc3NvZiA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9jbGFzc29mLXJhdyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NsYXNzb2YtcmF3LmpzXCIpO1xudmFyIHRvU3RyaW5nID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3RvLXN0cmluZyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXN0cmluZy5qc1wiKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocmVwbGFjZXIpIHtcbiAgaWYgKGlzQ2FsbGFibGUocmVwbGFjZXIpKSByZXR1cm4gcmVwbGFjZXI7XG4gIGlmICghaXNBcnJheShyZXBsYWNlcikpIHJldHVybjtcbiAgdmFyIHJhd0xlbmd0aCA9IHJlcGxhY2VyLmxlbmd0aDtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCByYXdMZW5ndGg7IGkrKykge1xuICAgIHZhciBlbGVtZW50ID0gcmVwbGFjZXJbaV07XG4gICAgaWYgKHR5cGVvZiBlbGVtZW50ID09ICdzdHJpbmcnKSBwdXNoKGtleXMsIGVsZW1lbnQpO1xuICAgIGVsc2UgaWYgKHR5cGVvZiBlbGVtZW50ID09ICdudW1iZXInIHx8IGNsYXNzb2YoZWxlbWVudCkgPT0gJ051bWJlcicgfHwgY2xhc3NvZihlbGVtZW50KSA9PSAnU3RyaW5nJykgcHVzaChrZXlzLCB0b1N0cmluZyhlbGVtZW50KSk7XG4gIH1cbiAgdmFyIGtleXNMZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIHJvb3QgPSB0cnVlO1xuICByZXR1cm4gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICBpZiAocm9vdCkge1xuICAgICAgcm9vdCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpZiAoaXNBcnJheSh0aGlzKSkgcmV0dXJuIHZhbHVlO1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwga2V5c0xlbmd0aDsgaisrKSBpZiAoa2V5c1tqXSA9PT0ga2V5KSByZXR1cm4gdmFsdWU7XG4gIH07XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1qc29uLXJlcGxhY2VyLWZ1bmN0aW9uLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1tZXRob2QuanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIGFDYWxsYWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9hLWNhbGxhYmxlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1jYWxsYWJsZS5qc1wiKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzXCIpO1xuXG4vLyBgR2V0TWV0aG9kYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0bWV0aG9kXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChWLCBQKSB7XG4gIHZhciBmdW5jID0gVltQXTtcbiAgcmV0dXJuIGlzTnVsbE9yVW5kZWZpbmVkKGZ1bmMpID8gdW5kZWZpbmVkIDogYUNhbGxhYmxlKGZ1bmMpO1xufTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtbWV0aG9kLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1zdWJzdGl0dXRpb24uanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIHVuY3VycnlUaGlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qc1wiKTtcbnZhciB0b09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy90by1vYmplY3QgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1vYmplY3QuanNcIik7XG5cbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVkb3Mvbm8tdnVsbmVyYWJsZSAtLSBzYWZlXG52YXIgU1VCU1RJVFVUSU9OX1NZTUJPTFMgPSAvXFwkKFskJidgXXxcXGR7MSwyfXw8W14+XSo+KS9nO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEID0gL1xcJChbJCYnYF18XFxkezEsMn0pL2c7XG5cbi8vIGBHZXRTdWJzdGl0dXRpb25gIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXRzdWJzdGl0dXRpb25cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1hdGNoZWQsIHN0ciwgcG9zaXRpb24sIGNhcHR1cmVzLCBuYW1lZENhcHR1cmVzLCByZXBsYWNlbWVudCkge1xuICB2YXIgdGFpbFBvcyA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gIHZhciBtID0gY2FwdHVyZXMubGVuZ3RoO1xuICB2YXIgc3ltYm9scyA9IFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEO1xuICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgbmFtZWRDYXB0dXJlcyA9IHRvT2JqZWN0KG5hbWVkQ2FwdHVyZXMpO1xuICAgIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MUztcbiAgfVxuICByZXR1cm4gcmVwbGFjZShyZXBsYWNlbWVudCwgc3ltYm9scywgZnVuY3Rpb24gKG1hdGNoLCBjaCkge1xuICAgIHZhciBjYXB0dXJlO1xuICAgIHN3aXRjaCAoY2hhckF0KGNoLCAwKSkge1xuICAgICAgY2FzZSAnJCc6IHJldHVybiAnJCc7XG4gICAgICBjYXNlICcmJzogcmV0dXJuIG1hdGNoZWQ7XG4gICAgICBjYXNlICdgJzogcmV0dXJuIHN0cmluZ1NsaWNlKHN0ciwgMCwgcG9zaXRpb24pO1xuICAgICAgY2FzZSBcIidcIjogcmV0dXJuIHN0cmluZ1NsaWNlKHN0ciwgdGFpbFBvcyk7XG4gICAgICBjYXNlICc8JzpcbiAgICAgICAgY2FwdHVyZSA9IG5hbWVkQ2FwdHVyZXNbc3RyaW5nU2xpY2UoY2gsIDEsIC0xKV07XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDogLy8gXFxkXFxkP1xuICAgICAgICB2YXIgbiA9ICtjaDtcbiAgICAgICAgaWYgKG4gPT09IDApIHJldHVybiBtYXRjaDtcbiAgICAgICAgaWYgKG4gPiBtKSB7XG4gICAgICAgICAgdmFyIGYgPSBmbG9vcihuIC8gMTApO1xuICAgICAgICAgIGlmIChmID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgaWYgKGYgPD0gbSkgcmV0dXJuIGNhcHR1cmVzW2YgLSAxXSA9PT0gdW5kZWZpbmVkID8gY2hhckF0KGNoLCAxKSA6IGNhcHR1cmVzW2YgLSAxXSArIGNoYXJBdChjaCwgMSk7XG4gICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICB9XG4gICAgICAgIGNhcHR1cmUgPSBjYXB0dXJlc1tuIC0gMV07XG4gICAgfVxuICAgIHJldHVybiBjYXB0dXJlID09PSB1bmRlZmluZWQgPyAnJyA6IGNhcHR1cmU7XG4gIH0pO1xufTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtc3Vic3RpdHV0aW9uLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dsb2JhbC5qcyI6KGZ1bmN0aW9uKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7ZXZhbCgiXG52YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT0gTWF0aCAmJiBpdDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5tb2R1bGUuZXhwb3J0cyA9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1nbG9iYWwtdGhpcyAtLSBzYWZlXG4gIGNoZWNrKHR5cGVvZiBnbG9iYWxUaGlzID09ICdvYmplY3QnICYmIGdsb2JhbFRoaXMpIHx8XG4gIGNoZWNrKHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93KSB8fFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZikgfHxcbiAgY2hlY2sodHlwZW9mIF9fd2VicGFja19yZXF1aXJlX18uZyA9PSAnb2JqZWN0JyAmJiBfX3dlYnBhY2tfcmVxdWlyZV9fLmcpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuYyAtLSBmYWxsYmFja1xuICAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSkoKSB8fCB0aGlzIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2xvYmFsLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkuanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIHVuY3VycnlUaGlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qc1wiKTtcbnZhciB0b09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy90by1vYmplY3QgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1vYmplY3QuanNcIik7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHVuY3VycnlUaGlzKHt9Lmhhc093blByb3BlcnR5KTtcblxuLy8gYEhhc093blByb3BlcnR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaGFzb3ducHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtaGFzb3duIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0Lmhhc093biB8fCBmdW5jdGlvbiBoYXNPd24oaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkodG9PYmplY3QoaXQpLCBrZXkpO1xufTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5LmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2hpZGRlbi1rZXlzLmpzIjooKG1vZHVsZSk9PntldmFsKCJcbm1vZHVsZS5leHBvcnRzID0ge307XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaG9zdC1yZXBvcnQtZXJyb3JzLmpzIjooKG1vZHVsZSk9PntldmFsKCJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZSAtLSBzYWZlXG4gICAgYXJndW1lbnRzLmxlbmd0aCA9PSAxID8gY29uc29sZS5lcnJvcihhKSA6IGNvbnNvbGUuZXJyb3IoYSwgYik7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaG9zdC1yZXBvcnQtZXJyb3JzLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2h0bWwuanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIGdldEJ1aWx0SW4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLmpzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdldEJ1aWx0SW4oJ2RvY3VtZW50JywgJ2RvY3VtZW50RWxlbWVudCcpO1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2h0bWwuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUuanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIERFU0NSSVBUT1JTID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanNcIik7XG52YXIgZmFpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZmFpbHMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mYWlscy5qc1wiKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQuanNcIik7XG5cbi8vIFRoYW5rcyB0byBJRTggZm9yIGl0cyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0ZUVsZW1lbnQoJ2RpdicpLCAnYScsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH1cbiAgfSkuYSAhPSA3O1xufSk7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaWVlZTc1NC5qcyI6KChtb2R1bGUpPT57ZXZhbCgiXG4vLyBJRUVFNzU0IGNvbnZlcnNpb25zIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvaWVlZTc1NFxudmFyICRBcnJheSA9IEFycmF5O1xudmFyIGFicyA9IE1hdGguYWJzO1xudmFyIHBvdyA9IE1hdGgucG93O1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBsb2cgPSBNYXRoLmxvZztcbnZhciBMTjIgPSBNYXRoLkxOMjtcblxudmFyIHBhY2sgPSBmdW5jdGlvbiAobnVtYmVyLCBtYW50aXNzYUxlbmd0aCwgYnl0ZXMpIHtcbiAgdmFyIGJ1ZmZlciA9ICRBcnJheShieXRlcyk7XG4gIHZhciBleHBvbmVudExlbmd0aCA9IGJ5dGVzICogOCAtIG1hbnRpc3NhTGVuZ3RoIC0gMTtcbiAgdmFyIGVNYXggPSAoMSA8PCBleHBvbmVudExlbmd0aCkgLSAxO1xuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDE7XG4gIHZhciBydCA9IG1hbnRpc3NhTGVuZ3RoID09PSAyMyA/IHBvdygyLCAtMjQpIC0gcG93KDIsIC03NykgOiAwO1xuICB2YXIgc2lnbiA9IG51bWJlciA8IDAgfHwgbnVtYmVyID09PSAwICYmIDEgLyBudW1iZXIgPCAwID8gMSA6IDA7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBleHBvbmVudCwgbWFudGlzc2EsIGM7XG4gIG51bWJlciA9IGFicyhudW1iZXIpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICBpZiAobnVtYmVyICE9IG51bWJlciB8fCBudW1iZXIgPT09IEluZmluaXR5KSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICBtYW50aXNzYSA9IG51bWJlciAhPSBudW1iZXIgPyAxIDogMDtcbiAgICBleHBvbmVudCA9IGVNYXg7XG4gIH0gZWxzZSB7XG4gICAgZXhwb25lbnQgPSBmbG9vcihsb2cobnVtYmVyKSAvIExOMik7XG4gICAgYyA9IHBvdygyLCAtZXhwb25lbnQpO1xuICAgIGlmIChudW1iZXIgKiBjIDwgMSkge1xuICAgICAgZXhwb25lbnQtLTtcbiAgICAgIGMgKj0gMjtcbiAgICB9XG4gICAgaWYgKGV4cG9uZW50ICsgZUJpYXMgPj0gMSkge1xuICAgICAgbnVtYmVyICs9IHJ0IC8gYztcbiAgICB9IGVsc2Uge1xuICAgICAgbnVtYmVyICs9IHJ0ICogcG93KDIsIDEgLSBlQmlhcyk7XG4gICAgfVxuICAgIGlmIChudW1iZXIgKiBjID49IDIpIHtcbiAgICAgIGV4cG9uZW50Kys7XG4gICAgICBjIC89IDI7XG4gICAgfVxuICAgIGlmIChleHBvbmVudCArIGVCaWFzID49IGVNYXgpIHtcbiAgICAgIG1hbnRpc3NhID0gMDtcbiAgICAgIGV4cG9uZW50ID0gZU1heDtcbiAgICB9IGVsc2UgaWYgKGV4cG9uZW50ICsgZUJpYXMgPj0gMSkge1xuICAgICAgbWFudGlzc2EgPSAobnVtYmVyICogYyAtIDEpICogcG93KDIsIG1hbnRpc3NhTGVuZ3RoKTtcbiAgICAgIGV4cG9uZW50ID0gZXhwb25lbnQgKyBlQmlhcztcbiAgICB9IGVsc2Uge1xuICAgICAgbWFudGlzc2EgPSBudW1iZXIgKiBwb3coMiwgZUJpYXMgLSAxKSAqIHBvdygyLCBtYW50aXNzYUxlbmd0aCk7XG4gICAgICBleHBvbmVudCA9IDA7XG4gICAgfVxuICB9XG4gIHdoaWxlIChtYW50aXNzYUxlbmd0aCA+PSA4KSB7XG4gICAgYnVmZmVyW2luZGV4KytdID0gbWFudGlzc2EgJiAyNTU7XG4gICAgbWFudGlzc2EgLz0gMjU2O1xuICAgIG1hbnRpc3NhTGVuZ3RoIC09IDg7XG4gIH1cbiAgZXhwb25lbnQgPSBleHBvbmVudCA8PCBtYW50aXNzYUxlbmd0aCB8IG1hbnRpc3NhO1xuICBleHBvbmVudExlbmd0aCArPSBtYW50aXNzYUxlbmd0aDtcbiAgd2hpbGUgKGV4cG9uZW50TGVuZ3RoID4gMCkge1xuICAgIGJ1ZmZlcltpbmRleCsrXSA9IGV4cG9uZW50ICYgMjU1O1xuICAgIGV4cG9uZW50IC89IDI1NjtcbiAgICBleHBvbmVudExlbmd0aCAtPSA4O1xuICB9XG4gIGJ1ZmZlclstLWluZGV4XSB8PSBzaWduICogMTI4O1xuICByZXR1cm4gYnVmZmVyO1xufTtcblxudmFyIHVucGFjayA9IGZ1bmN0aW9uIChidWZmZXIsIG1hbnRpc3NhTGVuZ3RoKSB7XG4gIHZhciBieXRlcyA9IGJ1ZmZlci5sZW5ndGg7XG4gIHZhciBleHBvbmVudExlbmd0aCA9IGJ5dGVzICogOCAtIG1hbnRpc3NhTGVuZ3RoIC0gMTtcbiAgdmFyIGVNYXggPSAoMSA8PCBleHBvbmVudExlbmd0aCkgLSAxO1xuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDE7XG4gIHZhciBuQml0cyA9IGV4cG9uZW50TGVuZ3RoIC0gNztcbiAgdmFyIGluZGV4ID0gYnl0ZXMgLSAxO1xuICB2YXIgc2lnbiA9IGJ1ZmZlcltpbmRleC0tXTtcbiAgdmFyIGV4cG9uZW50ID0gc2lnbiAmIDEyNztcbiAgdmFyIG1hbnRpc3NhO1xuICBzaWduID4+PSA3O1xuICB3aGlsZSAobkJpdHMgPiAwKSB7XG4gICAgZXhwb25lbnQgPSBleHBvbmVudCAqIDI1NiArIGJ1ZmZlcltpbmRleC0tXTtcbiAgICBuQml0cyAtPSA4O1xuICB9XG4gIG1hbnRpc3NhID0gZXhwb25lbnQgJiAoMSA8PCAtbkJpdHMpIC0gMTtcbiAgZXhwb25lbnQgPj49IC1uQml0cztcbiAgbkJpdHMgKz0gbWFudGlzc2FMZW5ndGg7XG4gIHdoaWxlIChuQml0cyA+IDApIHtcbiAgICBtYW50aXNzYSA9IG1hbnRpc3NhICogMjU2ICsgYnVmZmVyW2luZGV4LS1dO1xuICAgIG5CaXRzIC09IDg7XG4gIH1cbiAgaWYgKGV4cG9uZW50ID09PSAwKSB7XG4gICAgZXhwb25lbnQgPSAxIC0gZUJpYXM7XG4gIH0gZWxzZSBpZiAoZXhwb25lbnQgPT09IGVNYXgpIHtcbiAgICByZXR1cm4gbWFudGlzc2EgPyBOYU4gOiBzaWduID8gLUluZmluaXR5IDogSW5maW5pdHk7XG4gIH0gZWxzZSB7XG4gICAgbWFudGlzc2EgPSBtYW50aXNzYSArIHBvdygyLCBtYW50aXNzYUxlbmd0aCk7XG4gICAgZXhwb25lbnQgPSBleHBvbmVudCAtIGVCaWFzO1xuICB9IHJldHVybiAoc2lnbiA/IC0xIDogMSkgKiBtYW50aXNzYSAqIHBvdygyLCBleHBvbmVudCAtIG1hbnRpc3NhTGVuZ3RoKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBwYWNrOiBwYWNrLFxuICB1bnBhY2s6IHVucGFja1xufTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pZWVlNzU0LmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0LmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciB1bmN1cnJ5VGhpcyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMuanNcIik7XG52YXIgZmFpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZmFpbHMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mYWlscy5qc1wiKTtcbnZhciBjbGFzc29mID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanNcIik7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xudmFyIHNwbGl0ID0gdW5jdXJyeVRoaXMoJycuc3BsaXQpO1xuXG4vLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHRocm93cyBhbiBlcnJvciBpbiByaGlubywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3JoaW5vL2lzc3Vlcy8zNDZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiAhJE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApO1xufSkgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoaXQpID09ICdTdHJpbmcnID8gc3BsaXQoaXQsICcnKSA6ICRPYmplY3QoaXQpO1xufSA6ICRPYmplY3Q7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5oZXJpdC1pZi1yZXF1aXJlZC5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgaXNDYWxsYWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pcy1jYWxsYWJsZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWNhbGxhYmxlLmpzXCIpO1xudmFyIGlzT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2lzLW9iamVjdCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qc1wiKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZiAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mLmpzXCIpO1xuXG4vLyBtYWtlcyBzdWJjbGFzc2luZyB3b3JrIGNvcnJlY3QgZm9yIHdyYXBwZWQgYnVpbHQtaW5zXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgkdGhpcywgZHVtbXksIFdyYXBwZXIpIHtcbiAgdmFyIE5ld1RhcmdldCwgTmV3VGFyZ2V0UHJvdG90eXBlO1xuICBpZiAoXG4gICAgLy8gaXQgY2FuIHdvcmsgb25seSB3aXRoIG5hdGl2ZSBgc2V0UHJvdG90eXBlT2ZgXG4gICAgc2V0UHJvdG90eXBlT2YgJiZcbiAgICAvLyB3ZSBoYXZlbid0IGNvbXBsZXRlbHkgY29ycmVjdCBwcmUtRVM2IHdheSBmb3IgZ2V0dGluZyBgbmV3LnRhcmdldGAsIHNvIHVzZSB0aGlzXG4gICAgaXNDYWxsYWJsZShOZXdUYXJnZXQgPSBkdW1teS5jb25zdHJ1Y3RvcikgJiZcbiAgICBOZXdUYXJnZXQgIT09IFdyYXBwZXIgJiZcbiAgICBpc09iamVjdChOZXdUYXJnZXRQcm90b3R5cGUgPSBOZXdUYXJnZXQucHJvdG90eXBlKSAmJlxuICAgIE5ld1RhcmdldFByb3RvdHlwZSAhPT0gV3JhcHBlci5wcm90b3R5cGVcbiAgKSBzZXRQcm90b3R5cGVPZigkdGhpcywgTmV3VGFyZ2V0UHJvdG90eXBlKTtcbiAgcmV0dXJuICR0aGlzO1xufTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmhlcml0LWlmLXJlcXVpcmVkLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlLmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciB1bmN1cnJ5VGhpcyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMuanNcIik7XG52YXIgaXNDYWxsYWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pcy1jYWxsYWJsZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWNhbGxhYmxlLmpzXCIpO1xudmFyIHN0b3JlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NoYXJlZC1zdG9yZS5qc1wiKTtcblxudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyhGdW5jdGlvbi50b1N0cmluZyk7XG5cbi8vIHRoaXMgaGVscGVyIGJyb2tlbiBpbiBgY29yZS1qc0AzLjQuMS0zLjQuNGAsIHNvIHdlIGNhbid0IHVzZSBgc2hhcmVkYCBoZWxwZXJcbmlmICghaXNDYWxsYWJsZShzdG9yZS5pbnNwZWN0U291cmNlKSkge1xuICBzdG9yZS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9TdHJpbmcoaXQpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlLmluc3BlY3RTb3VyY2U7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zdGFsbC1lcnJvci1jYXVzZS5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaXMtb2JqZWN0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtb2JqZWN0LmpzXCIpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanNcIik7XG5cbi8vIGBJbnN0YWxsRXJyb3JDYXVzZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvcHJvcG9zYWwtZXJyb3ItY2F1c2UvI3NlYy1lcnJvcm9iamVjdHMtaW5zdGFsbC1lcnJvci1jYXVzZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgb3B0aW9ucykge1xuICBpZiAoaXNPYmplY3Qob3B0aW9ucykgJiYgJ2NhdXNlJyBpbiBvcHRpb25zKSB7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KE8sICdjYXVzZScsIG9wdGlvbnMuY2F1c2UpO1xuICB9XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luc3RhbGwtZXJyb3ItY2F1c2UuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEuanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyICQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZXhwb3J0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzXCIpO1xudmFyIHVuY3VycnlUaGlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qc1wiKTtcbnZhciBoaWRkZW5LZXlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanNcIik7XG52YXIgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaXMtb2JqZWN0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtb2JqZWN0LmpzXCIpO1xudmFyIGhhc093biA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qc1wiKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanNcIikuZik7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzXCIpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbE1vZHVsZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy1leHRlcm5hbCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsLmpzXCIpO1xudmFyIGlzRXh0ZW5zaWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9vYmplY3QtaXMtZXh0ZW5zaWJsZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1leHRlbnNpYmxlLmpzXCIpO1xudmFyIHVpZCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy91aWQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91aWQuanNcIik7XG52YXIgRlJFRVpJTkcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZnJlZXppbmcgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mcmVlemluZy5qc1wiKTtcblxudmFyIFJFUVVJUkVEID0gZmFsc2U7XG52YXIgTUVUQURBVEEgPSB1aWQoJ21ldGEnKTtcbnZhciBpZCA9IDA7XG5cbnZhciBzZXRNZXRhZGF0YSA9IGZ1bmN0aW9uIChpdCkge1xuICBkZWZpbmVQcm9wZXJ0eShpdCwgTUVUQURBVEEsIHsgdmFsdWU6IHtcbiAgICBvYmplY3RJRDogJ08nICsgaWQrKywgLy8gb2JqZWN0IElEXG4gICAgd2Vha0RhdGE6IHt9ICAgICAgICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gfSk7XG59O1xuXG52YXIgZmFzdEtleSA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIC8vIHJldHVybiBhIHByaW1pdGl2ZSB3aXRoIHByZWZpeFxuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJyA/IGl0IDogKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyA/ICdTJyA6ICdQJykgKyBpdDtcbiAgaWYgKCFoYXNPd24oaXQsIE1FVEFEQVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gJ0YnO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiAnRSc7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhZGF0YShpdCk7XG4gIC8vIHJldHVybiBvYmplY3QgSURcbiAgfSByZXR1cm4gaXRbTUVUQURBVEFdLm9iamVjdElEO1xufTtcblxudmFyIGdldFdlYWtEYXRhID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgaWYgKCFoYXNPd24oaXQsIE1FVEFEQVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhZGF0YShpdCk7XG4gIC8vIHJldHVybiB0aGUgc3RvcmUgb2Ygd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSByZXR1cm4gaXRbTUVUQURBVEFdLndlYWtEYXRhO1xufTtcblxuLy8gYWRkIG1ldGFkYXRhIG9uIGZyZWV6ZS1mYW1pbHkgbWV0aG9kcyBjYWxsaW5nXG52YXIgb25GcmVlemUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKEZSRUVaSU5HICYmIFJFUVVJUkVEICYmIGlzRXh0ZW5zaWJsZShpdCkgJiYgIWhhc093bihpdCwgTUVUQURBVEEpKSBzZXRNZXRhZGF0YShpdCk7XG4gIHJldHVybiBpdDtcbn07XG5cbnZhciBlbmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gIG1ldGEuZW5hYmxlID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuICBSRVFVSVJFRCA9IHRydWU7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mO1xuICB2YXIgc3BsaWNlID0gdW5jdXJyeVRoaXMoW10uc3BsaWNlKTtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgdGVzdFtNRVRBREFUQV0gPSAxO1xuXG4gIC8vIHByZXZlbnQgZXhwb3Npbmcgb2YgbWV0YWRhdGEga2V5XG4gIGlmIChnZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QpLmxlbmd0aCkge1xuICAgIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZiA9IGZ1bmN0aW9uIChpdCkge1xuICAgICAgdmFyIHJlc3VsdCA9IGdldE93blByb3BlcnR5TmFtZXMoaXQpO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IHJlc3VsdC5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAocmVzdWx0W2ldID09PSBNRVRBREFUQSkge1xuICAgICAgICAgIHNwbGljZShyZXN1bHQsIGksIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IHJldHVybiByZXN1bHQ7XG4gICAgfTtcblxuICAgICQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICAgICAgZ2V0T3duUHJvcGVydHlOYW1lczogZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsTW9kdWxlLmZcbiAgICB9KTtcbiAgfVxufTtcblxudmFyIG1ldGEgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgZW5hYmxlOiBlbmFibGUsXG4gIGZhc3RLZXk6IGZhc3RLZXksXG4gIGdldFdlYWtEYXRhOiBnZXRXZWFrRGF0YSxcbiAgb25GcmVlemU6IG9uRnJlZXplXG59O1xuXG5oaWRkZW5LZXlzW01FVEFEQVRBXSA9IHRydWU7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUuanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIE5BVElWRV9XRUFLX01BUCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24gKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanNcIik7XG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2dsb2JhbCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dsb2JhbC5qc1wiKTtcbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pcy1vYmplY3QgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1vYmplY3QuanNcIik7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eS5qc1wiKTtcbnZhciBoYXNPd24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkuanNcIik7XG52YXIgc2hhcmVkID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NoYXJlZC1zdG9yZS5qc1wiKTtcbnZhciBzaGFyZWRLZXkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvc2hhcmVkLWtleSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NoYXJlZC1rZXkuanNcIik7XG52YXIgaGlkZGVuS2V5cyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9oaWRkZW4ta2V5cyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2hpZGRlbi1rZXlzLmpzXCIpO1xuXG52YXIgT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQgPSAnT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgV2Vha01hcCA9IGdsb2JhbC5XZWFrTWFwO1xudmFyIHNldCwgZ2V0LCBoYXM7XG5cbnZhciBlbmZvcmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBoYXMoaXQpID8gZ2V0KGl0KSA6IHNldChpdCwge30pO1xufTtcblxudmFyIGdldHRlckZvciA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgc3RhdGU7XG4gICAgaWYgKCFpc09iamVjdChpdCkgfHwgKHN0YXRlID0gZ2V0KGl0KSkudHlwZSAhPT0gVFlQRSkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCcpO1xuICAgIH0gcmV0dXJuIHN0YXRlO1xuICB9O1xufTtcblxuaWYgKE5BVElWRV9XRUFLX01BUCB8fCBzaGFyZWQuc3RhdGUpIHtcbiAgdmFyIHN0b3JlID0gc2hhcmVkLnN0YXRlIHx8IChzaGFyZWQuc3RhdGUgPSBuZXcgV2Vha01hcCgpKTtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tc2VsZi1hc3NpZ24gLS0gcHJvdG90eXBlIG1ldGhvZHMgcHJvdGVjdGlvbiAqL1xuICBzdG9yZS5nZXQgPSBzdG9yZS5nZXQ7XG4gIHN0b3JlLmhhcyA9IHN0b3JlLmhhcztcbiAgc3RvcmUuc2V0ID0gc3RvcmUuc2V0O1xuICAvKiBlc2xpbnQtZW5hYmxlIG5vLXNlbGYtYXNzaWduIC0tIHByb3RvdHlwZSBtZXRob2RzIHByb3RlY3Rpb24gKi9cbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmIChzdG9yZS5oYXMoaXQpKSB0aHJvdyBUeXBlRXJyb3IoT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQpO1xuICAgIG1ldGFkYXRhLmZhY2FkZSA9IGl0O1xuICAgIHN0b3JlLnNldChpdCwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIHN0b3JlLmdldChpdCkgfHwge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBzdG9yZS5oYXMoaXQpO1xuICB9O1xufSBlbHNlIHtcbiAgdmFyIFNUQVRFID0gc2hhcmVkS2V5KCdzdGF0ZScpO1xuICBoaWRkZW5LZXlzW1NUQVRFXSA9IHRydWU7XG4gIHNldCA9IGZ1bmN0aW9uIChpdCwgbWV0YWRhdGEpIHtcbiAgICBpZiAoaGFzT3duKGl0LCBTVEFURSkpIHRocm93IFR5cGVFcnJvcihPQkpFQ1RfQUxSRUFEWV9JTklUSUFMSVpFRCk7XG4gICAgbWV0YWRhdGEuZmFjYWRlID0gaXQ7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KGl0LCBTVEFURSwgbWV0YWRhdGEpO1xuICAgIHJldHVybiBtZXRhZGF0YTtcbiAgfTtcbiAgZ2V0ID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpID8gaXRbU1RBVEVdIDoge307XG4gIH07XG4gIGhhcyA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiBoYXNPd24oaXQsIFNUQVRFKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBnZXQ6IGdldCxcbiAgaGFzOiBoYXMsXG4gIGVuZm9yY2U6IGVuZm9yY2UsXG4gIGdldHRlckZvcjogZ2V0dGVyRm9yXG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZC5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgd2VsbEtub3duU3ltYm9sID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wuanNcIik7XG52YXIgSXRlcmF0b3JzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9ycy5qc1wiKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG4vLyBjaGVjayBvbiBkZWZhdWx0IEFycmF5IGl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgIT09IHVuZGVmaW5lZCAmJiAoSXRlcmF0b3JzLkFycmF5ID09PSBpdCB8fCBBcnJheVByb3RvdHlwZVtJVEVSQVRPUl0gPT09IGl0KTtcbn07XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWFycmF5LmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBjbGFzc29mID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanNcIik7XG5cbi8vIGBJc0FycmF5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNhcnJheVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWlzYXJyYXkgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoYXJndW1lbnQpID09ICdBcnJheSc7XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWFycmF5LmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWJpZy1pbnQtYXJyYXkuanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIGNsYXNzb2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvY2xhc3NvZiAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NsYXNzb2YuanNcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBrbGFzcyA9IGNsYXNzb2YoaXQpO1xuICByZXR1cm4ga2xhc3MgPT0gJ0JpZ0ludDY0QXJyYXknIHx8IGtsYXNzID09ICdCaWdVaW50NjRBcnJheSc7XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWJpZy1pbnQtYXJyYXkuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY2FsbGFibGUuanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyICRkb2N1bWVudEFsbCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9kb2N1bWVudC1hbGwgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kb2N1bWVudC1hbGwuanNcIik7XG5cbnZhciBkb2N1bWVudEFsbCA9ICRkb2N1bWVudEFsbC5hbGw7XG5cbi8vIGBJc0NhbGxhYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNjYWxsYWJsZVxubW9kdWxlLmV4cG9ydHMgPSAkZG9jdW1lbnRBbGwuSVNfSFRNTEREQSA/IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbicgfHwgYXJndW1lbnQgPT09IGRvY3VtZW50QWxsO1xufSA6IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09ICdmdW5jdGlvbic7XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWNhbGxhYmxlLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yLmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciB1bmN1cnJ5VGhpcyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMuanNcIik7XG52YXIgZmFpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZmFpbHMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mYWlscy5qc1wiKTtcbnZhciBpc0NhbGxhYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY2FsbGFibGUuanNcIik7XG52YXIgY2xhc3NvZiA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9jbGFzc29mICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi5qc1wiKTtcbnZhciBnZXRCdWlsdEluID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbiAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qc1wiKTtcbnZhciBpbnNwZWN0U291cmNlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanNcIik7XG5cbnZhciBub29wID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xudmFyIGVtcHR5ID0gW107XG52YXIgY29uc3RydWN0ID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdjb25zdHJ1Y3QnKTtcbnZhciBjb25zdHJ1Y3RvclJlZ0V4cCA9IC9eXFxzKig/OmNsYXNzfGZ1bmN0aW9uKVxcYi87XG52YXIgZXhlYyA9IHVuY3VycnlUaGlzKGNvbnN0cnVjdG9yUmVnRXhwLmV4ZWMpO1xudmFyIElOQ09SUkVDVF9UT19TVFJJTkcgPSAhY29uc3RydWN0b3JSZWdFeHAuZXhlYyhub29wKTtcblxudmFyIGlzQ29uc3RydWN0b3JNb2Rlcm4gPSBmdW5jdGlvbiBpc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG4gIGlmICghaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdHJ1Y3Qobm9vcCwgZW1wdHksIGFyZ3VtZW50KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbnZhciBpc0NvbnN0cnVjdG9yTGVnYWN5ID0gZnVuY3Rpb24gaXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkge1xuICBpZiAoIWlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gZmFsc2U7XG4gIHN3aXRjaCAoY2xhc3NvZihhcmd1bWVudCkpIHtcbiAgICBjYXNlICdBc3luY0Z1bmN0aW9uJzpcbiAgICBjYXNlICdHZW5lcmF0b3JGdW5jdGlvbic6XG4gICAgY2FzZSAnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbic6IHJldHVybiBmYWxzZTtcbiAgfVxuICB0cnkge1xuICAgIC8vIHdlIGNhbid0IGNoZWNrIC5wcm90b3R5cGUgc2luY2UgY29uc3RydWN0b3JzIHByb2R1Y2VkIGJ5IC5iaW5kIGhhdmVuJ3QgaXRcbiAgICAvLyBgRnVuY3Rpb24jdG9TdHJpbmdgIHRocm93cyBvbiBzb21lIGJ1aWx0LWl0IGZ1bmN0aW9uIGluIHNvbWUgbGVnYWN5IGVuZ2luZXNcbiAgICAvLyAoZm9yIGV4YW1wbGUsIGBET01RdWFkYCBhbmQgc2ltaWxhciBpbiBGRjQxLSlcbiAgICByZXR1cm4gSU5DT1JSRUNUX1RPX1NUUklORyB8fCAhIWV4ZWMoY29uc3RydWN0b3JSZWdFeHAsIGluc3BlY3RTb3VyY2UoYXJndW1lbnQpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcblxuaXNDb25zdHJ1Y3RvckxlZ2FjeS5zaGFtID0gdHJ1ZTtcblxuLy8gYElzQ29uc3RydWN0b3JgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NvbnN0cnVjdG9yXG5tb2R1bGUuZXhwb3J0cyA9ICFjb25zdHJ1Y3QgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgY2FsbGVkO1xuICByZXR1cm4gaXNDb25zdHJ1Y3Rvck1vZGVybihpc0NvbnN0cnVjdG9yTW9kZXJuLmNhbGwpXG4gICAgfHwgIWlzQ29uc3RydWN0b3JNb2Rlcm4oT2JqZWN0KVxuICAgIHx8ICFpc0NvbnN0cnVjdG9yTW9kZXJuKGZ1bmN0aW9uICgpIHsgY2FsbGVkID0gdHJ1ZTsgfSlcbiAgICB8fCBjYWxsZWQ7XG59KSA/IGlzQ29uc3RydWN0b3JMZWdhY3kgOiBpc0NvbnN0cnVjdG9yTW9kZXJuO1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWZvcmNlZC5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgZmFpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZmFpbHMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mYWlscy5qc1wiKTtcbnZhciBpc0NhbGxhYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY2FsbGFibGUuanNcIik7XG5cbnZhciByZXBsYWNlbWVudCA9IC8jfFxcLnByb3RvdHlwZVxcLi87XG5cbnZhciBpc0ZvcmNlZCA9IGZ1bmN0aW9uIChmZWF0dXJlLCBkZXRlY3Rpb24pIHtcbiAgdmFyIHZhbHVlID0gZGF0YVtub3JtYWxpemUoZmVhdHVyZSldO1xuICByZXR1cm4gdmFsdWUgPT0gUE9MWUZJTEwgPyB0cnVlXG4gICAgOiB2YWx1ZSA9PSBOQVRJVkUgPyBmYWxzZVxuICAgIDogaXNDYWxsYWJsZShkZXRlY3Rpb24pID8gZmFpbHMoZGV0ZWN0aW9uKVxuICAgIDogISFkZXRlY3Rpb247XG59O1xuXG52YXIgbm9ybWFsaXplID0gaXNGb3JjZWQubm9ybWFsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICByZXR1cm4gU3RyaW5nKHN0cmluZykucmVwbGFjZShyZXBsYWNlbWVudCwgJy4nKS50b0xvd2VyQ2FzZSgpO1xufTtcblxudmFyIGRhdGEgPSBpc0ZvcmNlZC5kYXRhID0ge307XG52YXIgTkFUSVZFID0gaXNGb3JjZWQuTkFUSVZFID0gJ04nO1xudmFyIFBPTFlGSUxMID0gaXNGb3JjZWQuUE9MWUZJTEwgPSAnUCc7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGb3JjZWQ7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWludGVncmFsLW51bWJlci5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaXMtb2JqZWN0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtb2JqZWN0LmpzXCIpO1xuXG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBgSXNJbnRlZ3JhbE51bWJlcmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzaW50ZWdyYWxudW1iZXJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1udW1iZXItaXNpbnRlZ2VyIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyLmlzSW50ZWdlciB8fCBmdW5jdGlvbiBpc0ludGVnZXIoaXQpIHtcbiAgcmV0dXJuICFpc09iamVjdChpdCkgJiYgaXNGaW5pdGUoaXQpICYmIGZsb29yKGl0KSA9PT0gaXQ7XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWludGVncmFsLW51bWJlci5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZC5qcyI6KChtb2R1bGUpPT57ZXZhbCgiXG4vLyB3ZSBjYW4ndCB1c2UganVzdCBgaXQgPT0gbnVsbGAgc2luY2Ugb2YgYGRvY3VtZW50LmFsbGAgc3BlY2lhbCBjYXNlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLUlzSFRNTEREQS1pbnRlcm5hbC1zbG90LWFlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSBudWxsIHx8IGl0ID09PSB1bmRlZmluZWQ7XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgaXNDYWxsYWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pcy1jYWxsYWJsZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWNhbGxhYmxlLmpzXCIpO1xudmFyICRkb2N1bWVudEFsbCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9kb2N1bWVudC1hbGwgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kb2N1bWVudC1hbGwuanNcIik7XG5cbnZhciBkb2N1bWVudEFsbCA9ICRkb2N1bWVudEFsbC5hbGw7XG5cbm1vZHVsZS5leHBvcnRzID0gJGRvY3VtZW50QWxsLklTX0hUTUxEREEgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogaXNDYWxsYWJsZShpdCkgfHwgaXQgPT09IGRvY3VtZW50QWxsO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KTtcbn07XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtb2JqZWN0LmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanMiOigobW9kdWxlKT0+e2V2YWwoIlxubW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1wdXJlLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXJlZ2V4cC5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaXMtb2JqZWN0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtb2JqZWN0LmpzXCIpO1xudmFyIGNsYXNzb2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jbGFzc29mLXJhdy5qc1wiKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC5qc1wiKTtcblxudmFyIE1BVENIID0gd2VsbEtub3duU3ltYm9sKCdtYXRjaCcpO1xuXG4vLyBgSXNSZWdFeHBgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc3JlZ2V4cFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIGlzUmVnRXhwO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmICgoaXNSZWdFeHAgPSBpdFtNQVRDSF0pICE9PSB1bmRlZmluZWQgPyAhIWlzUmVnRXhwIDogY2xhc3NvZihpdCkgPT0gJ1JlZ0V4cCcpO1xufTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1yZWdleHAuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtc3ltYm9sLmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBnZXRCdWlsdEluID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbiAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qc1wiKTtcbnZhciBpc0NhbGxhYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY2FsbGFibGUuanNcIik7XG52YXIgaXNQcm90b3R5cGVPZiA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZi5qc1wiKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkLmpzXCIpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgJFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICByZXR1cm4gaXNDYWxsYWJsZSgkU3ltYm9sKSAmJiBpc1Byb3RvdHlwZU9mKCRTeW1ib2wucHJvdG90eXBlLCAkT2JqZWN0KGl0KSk7XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRlLmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBiaW5kID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dC5qc1wiKTtcbnZhciBjYWxsID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1jYWxsLmpzXCIpO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2FuLW9iamVjdCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qc1wiKTtcbnZhciB0cnlUb1N0cmluZyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy90cnktdG8tc3RyaW5nICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZy5qc1wiKTtcbnZhciBpc0FycmF5SXRlcmF0b3JNZXRob2QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kLmpzXCIpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanNcIik7XG52YXIgaXNQcm90b3R5cGVPZiA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZi5qc1wiKTtcbnZhciBnZXRJdGVyYXRvciA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9nZXQtaXRlcmF0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtaXRlcmF0b3IuanNcIik7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QuanNcIik7XG52YXIgaXRlcmF0b3JDbG9zZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pdGVyYXRvci1jbG9zZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlLmpzXCIpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxudmFyIFJlc3VsdCA9IGZ1bmN0aW9uIChzdG9wcGVkLCByZXN1bHQpIHtcbiAgdGhpcy5zdG9wcGVkID0gc3RvcHBlZDtcbiAgdGhpcy5yZXN1bHQgPSByZXN1bHQ7XG59O1xuXG52YXIgUmVzdWx0UHJvdG90eXBlID0gUmVzdWx0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmFibGUsIHVuYm91bmRGdW5jdGlvbiwgb3B0aW9ucykge1xuICB2YXIgdGhhdCA9IG9wdGlvbnMgJiYgb3B0aW9ucy50aGF0O1xuICB2YXIgQVNfRU5UUklFUyA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5BU19FTlRSSUVTKTtcbiAgdmFyIElTX1JFQ09SRCA9ICEhKG9wdGlvbnMgJiYgb3B0aW9ucy5JU19SRUNPUkQpO1xuICB2YXIgSVNfSVRFUkFUT1IgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuSVNfSVRFUkFUT1IpO1xuICB2YXIgSU5URVJSVVBURUQgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuSU5URVJSVVBURUQpO1xuICB2YXIgZm4gPSBiaW5kKHVuYm91bmRGdW5jdGlvbiwgdGhhdCk7XG4gIHZhciBpdGVyYXRvciwgaXRlckZuLCBpbmRleCwgbGVuZ3RoLCByZXN1bHQsIG5leHQsIHN0ZXA7XG5cbiAgdmFyIHN0b3AgPSBmdW5jdGlvbiAoY29uZGl0aW9uKSB7XG4gICAgaWYgKGl0ZXJhdG9yKSBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAnbm9ybWFsJywgY29uZGl0aW9uKTtcbiAgICByZXR1cm4gbmV3IFJlc3VsdCh0cnVlLCBjb25kaXRpb24pO1xuICB9O1xuXG4gIHZhciBjYWxsRm4gPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBpZiAoQVNfRU5UUklFUykge1xuICAgICAgYW5PYmplY3QodmFsdWUpO1xuICAgICAgcmV0dXJuIElOVEVSUlVQVEVEID8gZm4odmFsdWVbMF0sIHZhbHVlWzFdLCBzdG9wKSA6IGZuKHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG4gICAgfSByZXR1cm4gSU5URVJSVVBURUQgPyBmbih2YWx1ZSwgc3RvcCkgOiBmbih2YWx1ZSk7XG4gIH07XG5cbiAgaWYgKElTX1JFQ09SRCkge1xuICAgIGl0ZXJhdG9yID0gaXRlcmFibGUuaXRlcmF0b3I7XG4gIH0gZWxzZSBpZiAoSVNfSVRFUkFUT1IpIHtcbiAgICBpdGVyYXRvciA9IGl0ZXJhYmxlO1xuICB9IGVsc2Uge1xuICAgIGl0ZXJGbiA9IGdldEl0ZXJhdG9yTWV0aG9kKGl0ZXJhYmxlKTtcbiAgICBpZiAoIWl0ZXJGbikgdGhyb3cgJFR5cGVFcnJvcih0cnlUb1N0cmluZyhpdGVyYWJsZSkgKyAnIGlzIG5vdCBpdGVyYWJsZScpO1xuICAgIC8vIG9wdGltaXNhdGlvbiBmb3IgYXJyYXkgaXRlcmF0b3JzXG4gICAgaWYgKGlzQXJyYXlJdGVyYXRvck1ldGhvZChpdGVyRm4pKSB7XG4gICAgICBmb3IgKGluZGV4ID0gMCwgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoaXRlcmFibGUpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgICByZXN1bHQgPSBjYWxsRm4oaXRlcmFibGVbaW5kZXhdKTtcbiAgICAgICAgaWYgKHJlc3VsdCAmJiBpc1Byb3RvdHlwZU9mKFJlc3VsdFByb3RvdHlwZSwgcmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gcmV0dXJuIG5ldyBSZXN1bHQoZmFsc2UpO1xuICAgIH1cbiAgICBpdGVyYXRvciA9IGdldEl0ZXJhdG9yKGl0ZXJhYmxlLCBpdGVyRm4pO1xuICB9XG5cbiAgbmV4dCA9IElTX1JFQ09SRCA/IGl0ZXJhYmxlLm5leHQgOiBpdGVyYXRvci5uZXh0O1xuICB3aGlsZSAoIShzdGVwID0gY2FsbChuZXh0LCBpdGVyYXRvcikpLmRvbmUpIHtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gY2FsbEZuKHN0ZXAudmFsdWUpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAndGhyb3cnLCBlcnJvcik7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09ICdvYmplY3QnICYmIHJlc3VsdCAmJiBpc1Byb3RvdHlwZU9mKFJlc3VsdFByb3RvdHlwZSwgcmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgfSByZXR1cm4gbmV3IFJlc3VsdChmYWxzZSk7XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdGUuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UuanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIGNhbGwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanNcIik7XG52YXIgYW5PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvYW4tb2JqZWN0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYW4tb2JqZWN0LmpzXCIpO1xudmFyIGdldE1ldGhvZCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9nZXQtbWV0aG9kICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGtpbmQsIHZhbHVlKSB7XG4gIHZhciBpbm5lclJlc3VsdCwgaW5uZXJFcnJvcjtcbiAgYW5PYmplY3QoaXRlcmF0b3IpO1xuICB0cnkge1xuICAgIGlubmVyUmVzdWx0ID0gZ2V0TWV0aG9kKGl0ZXJhdG9yLCAncmV0dXJuJyk7XG4gICAgaWYgKCFpbm5lclJlc3VsdCkge1xuICAgICAgaWYgKGtpbmQgPT09ICd0aHJvdycpIHRocm93IHZhbHVlO1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBpbm5lclJlc3VsdCA9IGNhbGwoaW5uZXJSZXN1bHQsIGl0ZXJhdG9yKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpbm5lckVycm9yID0gdHJ1ZTtcbiAgICBpbm5lclJlc3VsdCA9IGVycm9yO1xuICB9XG4gIGlmIChraW5kID09PSAndGhyb3cnKSB0aHJvdyB2YWx1ZTtcbiAgaWYgKGlubmVyRXJyb3IpIHRocm93IGlubmVyUmVzdWx0O1xuICBhbk9iamVjdChpbm5lclJlc3VsdCk7XG4gIHJldHVybiB2YWx1ZTtcbn07XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLWNvbnN0cnVjdG9yLmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRvcnMtY29yZS5qc1wiKS5JdGVyYXRvclByb3RvdHlwZSk7XG52YXIgY3JlYXRlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtY3JlYXRlLmpzXCIpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzXCIpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcuanNcIik7XG52YXIgSXRlcmF0b3JzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9ycy5qc1wiKTtcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0LCBFTlVNRVJBQkxFX05FWFQpIHtcbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIEl0ZXJhdG9yQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7IG5leHQ6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigrIUVOVU1FUkFCTEVfTkVYVCwgbmV4dCkgfSk7XG4gIHNldFRvU3RyaW5nVGFnKEl0ZXJhdG9yQ29uc3RydWN0b3IsIFRPX1NUUklOR19UQUcsIGZhbHNlLCB0cnVlKTtcbiAgSXRlcmF0b3JzW1RPX1NUUklOR19UQUddID0gcmV0dXJuVGhpcztcbiAgcmV0dXJuIEl0ZXJhdG9yQ29uc3RydWN0b3I7XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1jb25zdHJ1Y3Rvci5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmUuanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyICQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZXhwb3J0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzXCIpO1xudmFyIGNhbGwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanNcIik7XG52YXIgSVNfUFVSRSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pcy1wdXJlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtcHVyZS5qc1wiKTtcbnZhciBGdW5jdGlvbk5hbWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUuanNcIik7XG52YXIgaXNDYWxsYWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pcy1jYWxsYWJsZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWNhbGxhYmxlLmpzXCIpO1xudmFyIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLWNvbnN0cnVjdG9yICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3ItY3JlYXRlLWNvbnN0cnVjdG9yLmpzXCIpO1xudmFyIGdldFByb3RvdHlwZU9mID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YuanNcIik7XG52YXIgc2V0UHJvdG90eXBlT2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZi5qc1wiKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnLmpzXCIpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHkuanNcIik7XG52YXIgZGVmaW5lQnVpbHRJbiA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4gKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanNcIik7XG52YXIgd2VsbEtub3duU3ltYm9sID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wuanNcIik7XG52YXIgSXRlcmF0b3JzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9ycy5qc1wiKTtcbnZhciBJdGVyYXRvcnNDb3JlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUuanNcIik7XG5cbnZhciBQUk9QRVJfRlVOQ1RJT05fTkFNRSA9IEZ1bmN0aW9uTmFtZS5QUk9QRVI7XG52YXIgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgPSBGdW5jdGlvbk5hbWUuQ09ORklHVVJBQkxFO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gSXRlcmF0b3JzQ29yZS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gSXRlcmF0b3JzQ29yZS5CVUdHWV9TQUZBUklfSVRFUkFUT1JTO1xudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG52YXIgRU5UUklFUyA9ICdlbnRyaWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYWJsZSwgTkFNRSwgSXRlcmF0b3JDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvcihJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcblxuICB2YXIgZ2V0SXRlcmF0aW9uTWV0aG9kID0gZnVuY3Rpb24gKEtJTkQpIHtcbiAgICBpZiAoS0lORCA9PT0gREVGQVVMVCAmJiBkZWZhdWx0SXRlcmF0b3IpIHJldHVybiBkZWZhdWx0SXRlcmF0b3I7XG4gICAgaWYgKCFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIEtJTkQgaW4gSXRlcmFibGVQcm90b3R5cGUpIHJldHVybiBJdGVyYWJsZVByb3RvdHlwZVtLSU5EXTtcbiAgICBzd2l0Y2ggKEtJTkQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIEVOVFJJRVM6IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgfSByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcyk7IH07XG4gIH07XG5cbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIHZhciBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSBmYWxzZTtcbiAgdmFyIEl0ZXJhYmxlUHJvdG90eXBlID0gSXRlcmFibGUucHJvdG90eXBlO1xuICB2YXIgbmF0aXZlSXRlcmF0b3IgPSBJdGVyYWJsZVByb3RvdHlwZVtJVEVSQVRPUl1cbiAgICB8fCBJdGVyYWJsZVByb3RvdHlwZVsnQEBpdGVyYXRvciddXG4gICAgfHwgREVGQVVMVCAmJiBJdGVyYWJsZVByb3RvdHlwZVtERUZBVUxUXTtcbiAgdmFyIGRlZmF1bHRJdGVyYXRvciA9ICFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIG5hdGl2ZUl0ZXJhdG9yIHx8IGdldEl0ZXJhdGlvbk1ldGhvZChERUZBVUxUKTtcbiAgdmFyIGFueU5hdGl2ZUl0ZXJhdG9yID0gTkFNRSA9PSAnQXJyYXknID8gSXRlcmFibGVQcm90b3R5cGUuZW50cmllcyB8fCBuYXRpdmVJdGVyYXRvciA6IG5hdGl2ZUl0ZXJhdG9yO1xuICB2YXIgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBtZXRob2RzLCBLRVk7XG5cbiAgLy8gZml4IG5hdGl2ZVxuICBpZiAoYW55TmF0aXZlSXRlcmF0b3IpIHtcbiAgICBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihhbnlOYXRpdmVJdGVyYXRvci5jYWxsKG5ldyBJdGVyYWJsZSgpKSk7XG4gICAgaWYgKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgaWYgKCFJU19QVVJFICYmIGdldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSkgIT09IEl0ZXJhdG9yUHJvdG90eXBlKSB7XG4gICAgICAgIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgICAgICAgIHNldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSXRlcmF0b3JQcm90b3R5cGUpO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc0NhbGxhYmxlKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0pKSB7XG4gICAgICAgICAgZGVmaW5lQnVpbHRJbihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBUT19TVFJJTkdfVEFHLCB0cnVlLCB0cnVlKTtcbiAgICAgIGlmIChJU19QVVJFKSBJdGVyYXRvcnNbVE9fU1RSSU5HX1RBR10gPSByZXR1cm5UaGlzO1xuICAgIH1cbiAgfVxuXG4gIC8vIGZpeCBBcnJheS5wcm90b3R5cGUueyB2YWx1ZXMsIEBAaXRlcmF0b3IgfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYgKFBST1BFUl9GVU5DVElPTl9OQU1FICYmIERFRkFVTFQgPT0gVkFMVUVTICYmIG5hdGl2ZUl0ZXJhdG9yICYmIG5hdGl2ZUl0ZXJhdG9yLm5hbWUgIT09IFZBTFVFUykge1xuICAgIGlmICghSVNfUFVSRSAmJiBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KEl0ZXJhYmxlUHJvdG90eXBlLCAnbmFtZScsIFZBTFVFUyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIElOQ09SUkVDVF9WQUxVRVNfTkFNRSA9IHRydWU7XG4gICAgICBkZWZhdWx0SXRlcmF0b3IgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBjYWxsKG5hdGl2ZUl0ZXJhdG9yLCB0aGlzKTsgfTtcbiAgICB9XG4gIH1cblxuICAvLyBleHBvcnQgYWRkaXRpb25hbCBtZXRob2RzXG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogZ2V0SXRlcmF0aW9uTWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyBkZWZhdWx0SXRlcmF0b3IgOiBnZXRJdGVyYXRpb25NZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiBnZXRJdGVyYXRpb25NZXRob2QoRU5UUklFUylcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoS0VZIGluIG1ldGhvZHMpIHtcbiAgICAgIGlmIChCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB8fCAhKEtFWSBpbiBJdGVyYWJsZVByb3RvdHlwZSkpIHtcbiAgICAgICAgZGVmaW5lQnVpbHRJbihJdGVyYWJsZVByb3RvdHlwZSwgS0VZLCBtZXRob2RzW0tFWV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSAkKHsgdGFyZ2V0OiBOQU1FLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB9LCBtZXRob2RzKTtcbiAgfVxuXG4gIC8vIGRlZmluZSBpdGVyYXRvclxuICBpZiAoKCFJU19QVVJFIHx8IEZPUkNFRCkgJiYgSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdICE9PSBkZWZhdWx0SXRlcmF0b3IpIHtcbiAgICBkZWZpbmVCdWlsdEluKEl0ZXJhYmxlUHJvdG90eXBlLCBJVEVSQVRPUiwgZGVmYXVsdEl0ZXJhdG9yLCB7IG5hbWU6IERFRkFVTFQgfSk7XG4gIH1cbiAgSXRlcmF0b3JzW05BTUVdID0gZGVmYXVsdEl0ZXJhdG9yO1xuXG4gIHJldHVybiBtZXRob2RzO1xufTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRvci1kZWZpbmUuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUuanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2ZhaWxzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZmFpbHMuanNcIik7XG52YXIgaXNDYWxsYWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pcy1jYWxsYWJsZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWNhbGxhYmxlLmpzXCIpO1xudmFyIGlzT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2lzLW9iamVjdCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qc1wiKTtcbnZhciBjcmVhdGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1jcmVhdGUuanNcIik7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZi5qc1wiKTtcbnZhciBkZWZpbmVCdWlsdEluID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbiAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi5qc1wiKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC5qc1wiKTtcbnZhciBJU19QVVJFID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2lzLXB1cmUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1wdXJlLmpzXCIpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IGZhbHNlO1xuXG4vLyBgJUl0ZXJhdG9yUHJvdG90eXBlJWAgb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVpdGVyYXRvcnByb3RvdHlwZSUtb2JqZWN0XG52YXIgSXRlcmF0b3JQcm90b3R5cGUsIFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSwgYXJyYXlJdGVyYXRvcjtcblxuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tYXJyYXktcHJvdG90eXBlLWtleXMgLS0gc2FmZSAqL1xuaWYgKFtdLmtleXMpIHtcbiAgYXJyYXlJdGVyYXRvciA9IFtdLmtleXMoKTtcbiAgLy8gU2FmYXJpIDggaGFzIGJ1Z2d5IGl0ZXJhdG9ycyB3L28gYG5leHRgXG4gIGlmICghKCduZXh0JyBpbiBhcnJheUl0ZXJhdG9yKSkgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IHRydWU7XG4gIGVsc2Uge1xuICAgIFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKGdldFByb3RvdHlwZU9mKGFycmF5SXRlcmF0b3IpKTtcbiAgICBpZiAoUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlKSBJdGVyYXRvclByb3RvdHlwZSA9IFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZTtcbiAgfVxufVxuXG52YXIgTkVXX0lURVJBVE9SX1BST1RPVFlQRSA9ICFpc09iamVjdChJdGVyYXRvclByb3RvdHlwZSkgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgdGVzdCA9IHt9O1xuICAvLyBGRjQ0LSBsZWdhY3kgaXRlcmF0b3JzIGNhc2VcbiAgcmV0dXJuIEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXS5jYWxsKHRlc3QpICE9PSB0ZXN0O1xufSk7XG5cbmlmIChORVdfSVRFUkFUT1JfUFJPVE9UWVBFKSBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuZWxzZSBpZiAoSVNfUFVSRSkgSXRlcmF0b3JQcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuXG4vLyBgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWl0ZXJhdG9ycHJvdG90eXBlJS1AQGl0ZXJhdG9yXG5pZiAoIWlzQ2FsbGFibGUoSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdKSkge1xuICBkZWZpbmVCdWlsdEluKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEl0ZXJhdG9yUHJvdG90eXBlOiBJdGVyYXRvclByb3RvdHlwZSxcbiAgQlVHR1lfU0FGQVJJX0lURVJBVE9SUzogQlVHR1lfU0FGQVJJX0lURVJBVE9SU1xufTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRvcnMtY29yZS5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRvcnMuanMiOigobW9kdWxlKT0+e2V2YWwoIlxubW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRvcnMuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIHRvTGVuZ3RoID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWxlbmd0aC5qc1wiKTtcblxuLy8gYExlbmd0aE9mQXJyYXlMaWtlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbGVuZ3Rob2ZhcnJheWxpa2Vcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gdG9MZW5ndGgob2JqLmxlbmd0aCk7XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIHVuY3VycnlUaGlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qc1wiKTtcbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mYWlscyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzXCIpO1xudmFyIGlzQ2FsbGFibGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qc1wiKTtcbnZhciBoYXNPd24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkuanNcIik7XG52YXIgREVTQ1JJUFRPUlMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZXNjcmlwdG9ycy5qc1wiKTtcbnZhciBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUuanNcIikuQ09ORklHVVJBQkxFKTtcbnZhciBpbnNwZWN0U291cmNlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5zcGVjdC1zb3VyY2UuanNcIik7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlLmpzXCIpO1xuXG52YXIgZW5mb3JjZUludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmVuZm9yY2U7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0O1xudmFyICRTdHJpbmcgPSBTdHJpbmc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgam9pbiA9IHVuY3VycnlUaGlzKFtdLmpvaW4pO1xuXG52YXIgQ09ORklHVVJBQkxFX0xFTkdUSCA9IERFU0NSSVBUT1JTICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBkZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdsZW5ndGgnLCB7IHZhbHVlOiA4IH0pLmxlbmd0aCAhPT0gODtcbn0pO1xuXG52YXIgVEVNUExBVEUgPSBTdHJpbmcoU3RyaW5nKS5zcGxpdCgnU3RyaW5nJyk7XG5cbnZhciBtYWtlQnVpbHRJbiA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlLCBuYW1lLCBvcHRpb25zKSB7XG4gIGlmIChzdHJpbmdTbGljZSgkU3RyaW5nKG5hbWUpLCAwLCA3KSA9PT0gJ1N5bWJvbCgnKSB7XG4gICAgbmFtZSA9ICdbJyArIHJlcGxhY2UoJFN0cmluZyhuYW1lKSwgL15TeW1ib2xcXCgoW14pXSopXFwpLywgJyQxJykgKyAnXSc7XG4gIH1cbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5nZXR0ZXIpIG5hbWUgPSAnZ2V0ICcgKyBuYW1lO1xuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnNldHRlcikgbmFtZSA9ICdzZXQgJyArIG5hbWU7XG4gIGlmICghaGFzT3duKHZhbHVlLCAnbmFtZScpIHx8IChDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSAmJiB2YWx1ZS5uYW1lICE9PSBuYW1lKSkge1xuICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lUHJvcGVydHkodmFsdWUsICduYW1lJywgeyB2YWx1ZTogbmFtZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICAgIGVsc2UgdmFsdWUubmFtZSA9IG5hbWU7XG4gIH1cbiAgaWYgKENPTkZJR1VSQUJMRV9MRU5HVEggJiYgb3B0aW9ucyAmJiBoYXNPd24ob3B0aW9ucywgJ2FyaXR5JykgJiYgdmFsdWUubGVuZ3RoICE9PSBvcHRpb25zLmFyaXR5KSB7XG4gICAgZGVmaW5lUHJvcGVydHkodmFsdWUsICdsZW5ndGgnLCB7IHZhbHVlOiBvcHRpb25zLmFyaXR5IH0pO1xuICB9XG4gIHRyeSB7XG4gICAgaWYgKG9wdGlvbnMgJiYgaGFzT3duKG9wdGlvbnMsICdjb25zdHJ1Y3RvcicpICYmIG9wdGlvbnMuY29uc3RydWN0b3IpIHtcbiAgICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lUHJvcGVydHkodmFsdWUsICdwcm90b3R5cGUnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KTtcbiAgICAvLyBpbiBWOCB+IENocm9tZSA1MywgcHJvdG90eXBlcyBvZiBzb21lIG1ldGhvZHMsIGxpa2UgYEFycmF5LnByb3RvdHlwZS52YWx1ZXNgLCBhcmUgbm9uLXdyaXRhYmxlXG4gICAgfSBlbHNlIGlmICh2YWx1ZS5wcm90b3R5cGUpIHZhbHVlLnByb3RvdHlwZSA9IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICB2YXIgc3RhdGUgPSBlbmZvcmNlSW50ZXJuYWxTdGF0ZSh2YWx1ZSk7XG4gIGlmICghaGFzT3duKHN0YXRlLCAnc291cmNlJykpIHtcbiAgICBzdGF0ZS5zb3VyY2UgPSBqb2luKFRFTVBMQVRFLCB0eXBlb2YgbmFtZSA9PSAnc3RyaW5nJyA/IG5hbWUgOiAnJyk7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcblxuLy8gYWRkIGZha2UgRnVuY3Rpb24jdG9TdHJpbmcgZm9yIGNvcnJlY3Qgd29yayB3cmFwcGVkIG1ldGhvZHMgLyBjb25zdHJ1Y3RvcnMgd2l0aCBtZXRob2RzIGxpa2UgTG9EYXNoIGlzTmF0aXZlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXh0ZW5kLW5hdGl2ZSAtLSByZXF1aXJlZFxuRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gbWFrZUJ1aWx0SW4oZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKHRoaXMpICYmIGdldEludGVybmFsU3RhdGUodGhpcykuc291cmNlIHx8IGluc3BlY3RTb3VyY2UodGhpcyk7XG59LCAndG9TdHJpbmcnKTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYWtlLWJ1aWx0LWluLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21hcC1oZWxwZXJzLmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciB1bmN1cnJ5VGhpcyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMuanNcIik7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1tYXAgLS0gc2FmZVxudmFyIE1hcFByb3RvdHlwZSA9IE1hcC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tbWFwIC0tIHNhZmVcbiAgTWFwOiBNYXAsXG4gIHNldDogdW5jdXJyeVRoaXMoTWFwUHJvdG90eXBlLnNldCksXG4gIGdldDogdW5jdXJyeVRoaXMoTWFwUHJvdG90eXBlLmdldCksXG4gIGhhczogdW5jdXJyeVRoaXMoTWFwUHJvdG90eXBlLmhhcyksXG4gIHJlbW92ZTogdW5jdXJyeVRoaXMoTWFwUHJvdG90eXBlWydkZWxldGUnXSksXG4gIHByb3RvOiBNYXBQcm90b3R5cGVcbn07XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbWFwLWhlbHBlcnMuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbWF0aC10cnVuYy5qcyI6KChtb2R1bGUpPT57ZXZhbCgiXG52YXIgY2VpbCA9IE1hdGguY2VpbDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGBNYXRoLnRydW5jYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC50cnVuY1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW1hdGgtdHJ1bmMgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnRydW5jIHx8IGZ1bmN0aW9uIHRydW5jKHgpIHtcbiAgdmFyIG4gPSAreDtcbiAgcmV0dXJuIChuID4gMCA/IGZsb29yIDogY2VpbCkobik7XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21hdGgtdHJ1bmMuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbWljcm90YXNrLmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZ2xvYmFsICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2xvYmFsLmpzXCIpO1xudmFyIGJpbmQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0LmpzXCIpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanNcIikuZik7XG52YXIgbWFjcm90YXNrID0gKF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy90YXNrICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdGFzay5qc1wiKS5zZXQpO1xudmFyIFF1ZXVlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3F1ZXVlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcXVldWUuanNcIik7XG52YXIgSVNfSU9TID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtaXMtaW9zLmpzXCIpO1xudmFyIElTX0lPU19QRUJCTEUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcy1wZWJibGUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtaXMtaW9zLXBlYmJsZS5qc1wiKTtcbnZhciBJU19XRUJPU19XRUJLSVQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZW5naW5lLWlzLXdlYm9zLXdlYmtpdCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS1pcy13ZWJvcy13ZWJraXQuanNcIik7XG52YXIgSVNfTk9ERSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlLmpzXCIpO1xuXG52YXIgTXV0YXRpb25PYnNlcnZlciA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBQcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XG4vLyBOb2RlLmpzIDExIHNob3dzIEV4cGVyaW1lbnRhbFdhcm5pbmcgb24gZ2V0dGluZyBgcXVldWVNaWNyb3Rhc2tgXG52YXIgcXVldWVNaWNyb3Rhc2tEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgJ3F1ZXVlTWljcm90YXNrJyk7XG52YXIgbWljcm90YXNrID0gcXVldWVNaWNyb3Rhc2tEZXNjcmlwdG9yICYmIHF1ZXVlTWljcm90YXNrRGVzY3JpcHRvci52YWx1ZTtcbnZhciBub3RpZnksIHRvZ2dsZSwgbm9kZSwgcHJvbWlzZSwgdGhlbjtcblxuLy8gbW9kZXJuIGVuZ2luZXMgaGF2ZSBxdWV1ZU1pY3JvdGFzayBtZXRob2RcbmlmICghbWljcm90YXNrKSB7XG4gIHZhciBxdWV1ZSA9IG5ldyBRdWV1ZSgpO1xuXG4gIHZhciBmbHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyZW50LCBmbjtcbiAgICBpZiAoSVNfTk9ERSAmJiAocGFyZW50ID0gcHJvY2Vzcy5kb21haW4pKSBwYXJlbnQuZXhpdCgpO1xuICAgIHdoaWxlIChmbiA9IHF1ZXVlLmdldCgpKSB0cnkge1xuICAgICAgZm4oKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKHF1ZXVlLmhlYWQpIG5vdGlmeSgpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIGlmIChwYXJlbnQpIHBhcmVudC5lbnRlcigpO1xuICB9O1xuXG4gIC8vIGJyb3dzZXJzIHdpdGggTXV0YXRpb25PYnNlcnZlciwgZXhjZXB0IGlPUyAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMzlcbiAgLy8gYWxzbyBleGNlcHQgV2ViT1MgV2Via2l0IGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84OThcbiAgaWYgKCFJU19JT1MgJiYgIUlTX05PREUgJiYgIUlTX1dFQk9TX1dFQktJVCAmJiBNdXRhdGlvbk9ic2VydmVyICYmIGRvY3VtZW50KSB7XG4gICAgdG9nZ2xlID0gdHJ1ZTtcbiAgICBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xuICAgIG5ldyBNdXRhdGlvbk9ic2VydmVyKGZsdXNoKS5vYnNlcnZlKG5vZGUsIHsgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBub2RlLmRhdGEgPSB0b2dnbGUgPSAhdG9nZ2xlO1xuICAgIH07XG4gIC8vIGVudmlyb25tZW50cyB3aXRoIG1heWJlIG5vbi1jb21wbGV0ZWx5IGNvcnJlY3QsIGJ1dCBleGlzdGVudCBQcm9taXNlXG4gIH0gZWxzZSBpZiAoIUlTX0lPU19QRUJCTEUgJiYgUHJvbWlzZSAmJiBQcm9taXNlLnJlc29sdmUpIHtcbiAgICAvLyBQcm9taXNlLnJlc29sdmUgd2l0aG91dCBhbiBhcmd1bWVudCB0aHJvd3MgYW4gZXJyb3IgaW4gTEcgV2ViT1MgMlxuICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAvLyB3b3JrYXJvdW5kIG9mIFdlYktpdCB+IGlPUyBTYWZhcmkgMTAuMSBidWdcbiAgICBwcm9taXNlLmNvbnN0cnVjdG9yID0gUHJvbWlzZTtcbiAgICB0aGVuID0gYmluZChwcm9taXNlLnRoZW4sIHByb21pc2UpO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoZW4oZmx1c2gpO1xuICAgIH07XG4gIC8vIE5vZGUuanMgd2l0aG91dCBwcm9taXNlc1xuICB9IGVsc2UgaWYgKElTX05PREUpIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZsdXNoKTtcbiAgICB9O1xuICAvLyBmb3Igb3RoZXIgZW52aXJvbm1lbnRzIC0gbWFjcm90YXNrIGJhc2VkIG9uOlxuICAvLyAtIHNldEltbWVkaWF0ZVxuICAvLyAtIE1lc3NhZ2VDaGFubmVsXG4gIC8vIC0gd2luZG93LnBvc3RNZXNzYWdlXG4gIC8vIC0gb25yZWFkeXN0YXRlY2hhbmdlXG4gIC8vIC0gc2V0VGltZW91dFxuICB9IGVsc2Uge1xuICAgIC8vIGB3ZWJwYWNrYCBkZXYgc2VydmVyIGJ1ZyBvbiBJRSBnbG9iYWwgbWV0aG9kcyAtIHVzZSBiaW5kKGZuLCBnbG9iYWwpXG4gICAgbWFjcm90YXNrID0gYmluZChtYWNyb3Rhc2ssIGdsb2JhbCk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWFjcm90YXNrKGZsdXNoKTtcbiAgICB9O1xuICB9XG5cbiAgbWljcm90YXNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgaWYgKCFxdWV1ZS5oZWFkKSBub3RpZnkoKTtcbiAgICBxdWV1ZS5hZGQoZm4pO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1pY3JvdGFzaztcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9taWNyb3Rhc2suanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eS5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgYUNhbGxhYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzXCIpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxudmFyIFByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKEMpIHtcbiAgdmFyIHJlc29sdmUsIHJlamVjdDtcbiAgdGhpcy5wcm9taXNlID0gbmV3IEMoZnVuY3Rpb24gKCQkcmVzb2x2ZSwgJCRyZWplY3QpIHtcbiAgICBpZiAocmVzb2x2ZSAhPT0gdW5kZWZpbmVkIHx8IHJlamVjdCAhPT0gdW5kZWZpbmVkKSB0aHJvdyAkVHlwZUVycm9yKCdCYWQgUHJvbWlzZSBjb25zdHJ1Y3RvcicpO1xuICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgcmVqZWN0ID0gJCRyZWplY3Q7XG4gIH0pO1xuICB0aGlzLnJlc29sdmUgPSBhQ2FsbGFibGUocmVzb2x2ZSk7XG4gIHRoaXMucmVqZWN0ID0gYUNhbGxhYmxlKHJlamVjdCk7XG59O1xuXG4vLyBgTmV3UHJvbWlzZUNhcGFiaWxpdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1uZXdwcm9taXNlY2FwYWJpbGl0eVxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIChDKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHkuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbm9ybWFsaXplLXN0cmluZy1hcmd1bWVudC5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgdG9TdHJpbmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvdG8tc3RyaW5nICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tc3RyaW5nLmpzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCwgJGRlZmF1bHQpIHtcbiAgcmV0dXJuIGFyZ3VtZW50ID09PSB1bmRlZmluZWQgPyBhcmd1bWVudHMubGVuZ3RoIDwgMiA/ICcnIDogJGRlZmF1bHQgOiB0b1N0cmluZyhhcmd1bWVudCk7XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL25vcm1hbGl6ZS1zdHJpbmctYXJndW1lbnQuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbm90LWEtcmVnZXhwLmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBpc1JlZ0V4cCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pcy1yZWdleHAgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1yZWdleHAuanNcIik7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXNSZWdFeHAoaXQpKSB7XG4gICAgdGhyb3cgJFR5cGVFcnJvcihcIlRoZSBtZXRob2QgZG9lc24ndCBhY2NlcHQgcmVndWxhciBleHByZXNzaW9uc1wiKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL25vdC1hLXJlZ2V4cC5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9udW1iZXItcGFyc2UtZmxvYXQuanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9nbG9iYWwgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwuanNcIik7XG52YXIgZmFpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZmFpbHMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mYWlscy5qc1wiKTtcbnZhciB1bmN1cnJ5VGhpcyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMuanNcIik7XG52YXIgdG9TdHJpbmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvdG8tc3RyaW5nICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tc3RyaW5nLmpzXCIpO1xudmFyIHRyaW0gPSAoX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3N0cmluZy10cmltICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3RyaW5nLXRyaW0uanNcIikudHJpbSk7XG52YXIgd2hpdGVzcGFjZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvd2hpdGVzcGFjZXMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93aGl0ZXNwYWNlcy5qc1wiKTtcblxudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgJHBhcnNlRmxvYXQgPSBnbG9iYWwucGFyc2VGbG9hdDtcbnZhciBTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyIElURVJBVE9SID0gU3ltYm9sICYmIFN5bWJvbC5pdGVyYXRvcjtcbnZhciBGT1JDRUQgPSAxIC8gJHBhcnNlRmxvYXQod2hpdGVzcGFjZXMgKyAnLTAnKSAhPT0gLUluZmluaXR5XG4gIC8vIE1TIEVkZ2UgMTgtIGJyb2tlbiB3aXRoIGJveGVkIHN5bWJvbHNcbiAgfHwgKElURVJBVE9SICYmICFmYWlscyhmdW5jdGlvbiAoKSB7ICRwYXJzZUZsb2F0KE9iamVjdChJVEVSQVRPUikpOyB9KSk7XG5cbi8vIGBwYXJzZUZsb2F0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcGFyc2VmbG9hdC1zdHJpbmdcbm1vZHVsZS5leHBvcnRzID0gRk9SQ0VEID8gZnVuY3Rpb24gcGFyc2VGbG9hdChzdHJpbmcpIHtcbiAgdmFyIHRyaW1tZWRTdHJpbmcgPSB0cmltKHRvU3RyaW5nKHN0cmluZykpO1xuICB2YXIgcmVzdWx0ID0gJHBhcnNlRmxvYXQodHJpbW1lZFN0cmluZyk7XG4gIHJldHVybiByZXN1bHQgPT09IDAgJiYgY2hhckF0KHRyaW1tZWRTdHJpbmcsIDApID09ICctJyA/IC0wIDogcmVzdWx0O1xufSA6ICRwYXJzZUZsb2F0O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL251bWJlci1wYXJzZS1mbG9hdC5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9udW1iZXItcGFyc2UtaW50LmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZ2xvYmFsICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2xvYmFsLmpzXCIpO1xudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2ZhaWxzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZmFpbHMuanNcIik7XG52YXIgdW5jdXJyeVRoaXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzXCIpO1xudmFyIHRvU3RyaW5nID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3RvLXN0cmluZyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXN0cmluZy5qc1wiKTtcbnZhciB0cmltID0gKF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9zdHJpbmctdHJpbSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N0cmluZy10cmltLmpzXCIpLnRyaW0pO1xudmFyIHdoaXRlc3BhY2VzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3doaXRlc3BhY2VzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2hpdGVzcGFjZXMuanNcIik7XG5cbnZhciAkcGFyc2VJbnQgPSBnbG9iYWwucGFyc2VJbnQ7XG52YXIgU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBJVEVSQVRPUiA9IFN5bWJvbCAmJiBTeW1ib2wuaXRlcmF0b3I7XG52YXIgaGV4ID0gL15bKy1dPzB4L2k7XG52YXIgZXhlYyA9IHVuY3VycnlUaGlzKGhleC5leGVjKTtcbnZhciBGT1JDRUQgPSAkcGFyc2VJbnQod2hpdGVzcGFjZXMgKyAnMDgnKSAhPT0gOCB8fCAkcGFyc2VJbnQod2hpdGVzcGFjZXMgKyAnMHgxNicpICE9PSAyMlxuICAvLyBNUyBFZGdlIDE4LSBicm9rZW4gd2l0aCBib3hlZCBzeW1ib2xzXG4gIHx8IChJVEVSQVRPUiAmJiAhZmFpbHMoZnVuY3Rpb24gKCkgeyAkcGFyc2VJbnQoT2JqZWN0KElURVJBVE9SKSk7IH0pKTtcblxuLy8gYHBhcnNlSW50YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcGFyc2VpbnQtc3RyaW5nLXJhZGl4XG5tb2R1bGUuZXhwb3J0cyA9IEZPUkNFRCA/IGZ1bmN0aW9uIHBhcnNlSW50KHN0cmluZywgcmFkaXgpIHtcbiAgdmFyIFMgPSB0cmltKHRvU3RyaW5nKHN0cmluZykpO1xuICByZXR1cm4gJHBhcnNlSW50KFMsIChyYWRpeCA+Pj4gMCkgfHwgKGV4ZWMoaGV4LCBTKSA/IDE2IDogMTApKTtcbn0gOiAkcGFyc2VJbnQ7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbnVtYmVyLXBhcnNlLWludC5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtYXNzaWduLmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBERVNDUklQVE9SUyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9kZXNjcmlwdG9ycyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Rlc2NyaXB0b3JzLmpzXCIpO1xudmFyIHVuY3VycnlUaGlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qc1wiKTtcbnZhciBjYWxsID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1jYWxsLmpzXCIpO1xudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2ZhaWxzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZmFpbHMuanNcIik7XG52YXIgb2JqZWN0S2V5cyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9vYmplY3Qta2V5cyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLmpzXCIpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qc1wiKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlLmpzXCIpO1xudmFyIHRvT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3RvLW9iamVjdCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLW9iamVjdC5qc1wiKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QuanNcIik7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtYXNzaWduIC0tIHNhZmVcbnZhciAkYXNzaWduID0gT2JqZWN0LmFzc2lnbjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xuXG4vLyBgT2JqZWN0LmFzc2lnbmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5hc3NpZ25cbm1vZHVsZS5leHBvcnRzID0gISRhc3NpZ24gfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBzaG91bGQgaGF2ZSBjb3JyZWN0IG9yZGVyIG9mIG9wZXJhdGlvbnMgKEVkZ2UgYnVnKVxuICBpZiAoREVTQ1JJUFRPUlMgJiYgJGFzc2lnbih7IGI6IDEgfSwgJGFzc2lnbihkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGRlZmluZVByb3BlcnR5KHRoaXMsICdiJywge1xuICAgICAgICB2YWx1ZTogMyxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2VcbiAgICAgIH0pO1xuICAgIH1cbiAgfSksIHsgYjogMiB9KSkuYiAhPT0gMSkgcmV0dXJuIHRydWU7XG4gIC8vIHNob3VsZCB3b3JrIHdpdGggc3ltYm9scyBhbmQgc2hvdWxkIGhhdmUgZGV0ZXJtaW5pc3RpYyBwcm9wZXJ0eSBvcmRlciAoVjggYnVnKVxuICB2YXIgQSA9IHt9O1xuICB2YXIgQiA9IHt9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tc3ltYm9sIC0tIHNhZmVcbiAgdmFyIHN5bWJvbCA9IFN5bWJvbCgpO1xuICB2YXIgYWxwaGFiZXQgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnO1xuICBBW3N5bWJvbF0gPSA3O1xuICBhbHBoYWJldC5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAoY2hyKSB7IEJbY2hyXSA9IGNocjsgfSk7XG4gIHJldHVybiAkYXNzaWduKHt9LCBBKVtzeW1ib2xdICE9IDcgfHwgb2JqZWN0S2V5cygkYXNzaWduKHt9LCBCKSkuam9pbignJykgIT0gYWxwaGFiZXQ7XG59KSA/IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgdmFyIFQgPSB0b09iamVjdCh0YXJnZXQpO1xuICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMTtcbiAgdmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mO1xuICB2YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mO1xuICB3aGlsZSAoYXJndW1lbnRzTGVuZ3RoID4gaW5kZXgpIHtcbiAgICB2YXIgUyA9IEluZGV4ZWRPYmplY3QoYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICB2YXIga2V5cyA9IGdldE93blByb3BlcnR5U3ltYm9scyA/IGNvbmNhdChvYmplY3RLZXlzKFMpLCBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoUykpIDogb2JqZWN0S2V5cyhTKTtcbiAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgdmFyIGogPSAwO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGopIHtcbiAgICAgIGtleSA9IGtleXNbaisrXTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMgfHwgY2FsbChwcm9wZXJ0eUlzRW51bWVyYWJsZSwgUywga2V5KSkgVFtrZXldID0gU1trZXldO1xuICAgIH1cbiAgfSByZXR1cm4gVDtcbn0gOiAkYXNzaWduO1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1hc3NpZ24uanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZS5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG4vKiBnbG9iYWwgQWN0aXZlWE9iamVjdCAtLSBvbGQgSUUsIFdTSCAqL1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2FuLW9iamVjdCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qc1wiKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcy5qc1wiKTtcbnZhciBlbnVtQnVnS2V5cyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qc1wiKTtcbnZhciBoaWRkZW5LZXlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanNcIik7XG52YXIgaHRtbCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9odG1sICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaHRtbC5qc1wiKTtcbnZhciBkb2N1bWVudENyZWF0ZUVsZW1lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudC5qc1wiKTtcbnZhciBzaGFyZWRLZXkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvc2hhcmVkLWtleSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NoYXJlZC1rZXkuanNcIik7XG5cbnZhciBHVCA9ICc+JztcbnZhciBMVCA9ICc8JztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBTQ1JJUFQgPSAnc2NyaXB0JztcbnZhciBJRV9QUk9UTyA9IHNoYXJlZEtleSgnSUVfUFJPVE8nKTtcblxudmFyIEVtcHR5Q29uc3RydWN0b3IgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG5cbnZhciBzY3JpcHRUYWcgPSBmdW5jdGlvbiAoY29udGVudCkge1xuICByZXR1cm4gTFQgKyBTQ1JJUFQgKyBHVCArIGNvbnRlbnQgKyBMVCArICcvJyArIFNDUklQVCArIEdUO1xufTtcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIEFjdGl2ZVggT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYID0gZnVuY3Rpb24gKGFjdGl2ZVhEb2N1bWVudCkge1xuICBhY3RpdmVYRG9jdW1lbnQud3JpdGUoc2NyaXB0VGFnKCcnKSk7XG4gIGFjdGl2ZVhEb2N1bWVudC5jbG9zZSgpO1xuICB2YXIgdGVtcCA9IGFjdGl2ZVhEb2N1bWVudC5wYXJlbnRXaW5kb3cuT2JqZWN0O1xuICBhY3RpdmVYRG9jdW1lbnQgPSBudWxsOyAvLyBhdm9pZCBtZW1vcnkgbGVha1xuICByZXR1cm4gdGVtcDtcbn07XG5cbi8vIENyZWF0ZSBvYmplY3Qgd2l0aCBmYWtlIGBudWxsYCBwcm90b3R5cGU6IHVzZSBpZnJhbWUgT2JqZWN0IHdpdGggY2xlYXJlZCBwcm90b3R5cGVcbnZhciBOdWxsUHJvdG9PYmplY3RWaWFJRnJhbWUgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSBkb2N1bWVudENyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO1xuICB2YXIgSlMgPSAnamF2YScgKyBTQ1JJUFQgKyAnOic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIGh0bWwuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzQ3NVxuICBpZnJhbWUuc3JjID0gU3RyaW5nKEpTKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJ2RvY3VtZW50LkY9T2JqZWN0JykpO1xuICBpZnJhbWVEb2N1bWVudC5jbG9zZSgpO1xuICByZXR1cm4gaWZyYW1lRG9jdW1lbnQuRjtcbn07XG5cbi8vIENoZWNrIGZvciBkb2N1bWVudC5kb21haW4gYW5kIGFjdGl2ZSB4IHN1cHBvcnRcbi8vIE5vIG5lZWQgdG8gdXNlIGFjdGl2ZSB4IGFwcHJvYWNoIHdoZW4gZG9jdW1lbnQuZG9tYWluIGlzIG5vdCBzZXRcbi8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW0vaXNzdWVzLzE1MFxuLy8gdmFyaWF0aW9uIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9raXRjYW1icmlkZ2UvZXM1LXNoaW0vY29tbWl0LzRmNzM4YWMwNjYzNDZcbi8vIGF2b2lkIElFIEdDIGJ1Z1xudmFyIGFjdGl2ZVhEb2N1bWVudDtcbnZhciBOdWxsUHJvdG9PYmplY3QgPSBmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgYWN0aXZlWERvY3VtZW50ID0gbmV3IEFjdGl2ZVhPYmplY3QoJ2h0bWxmaWxlJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGlnbm9yZSAqLyB9XG4gIE51bGxQcm90b09iamVjdCA9IHR5cGVvZiBkb2N1bWVudCAhPSAndW5kZWZpbmVkJ1xuICAgID8gZG9jdW1lbnQuZG9tYWluICYmIGFjdGl2ZVhEb2N1bWVudFxuICAgICAgPyBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCkgLy8gb2xkIElFXG4gICAgICA6IE51bGxQcm90b09iamVjdFZpYUlGcmFtZSgpXG4gICAgOiBOdWxsUHJvdG9PYmplY3RWaWFBY3RpdmVYKGFjdGl2ZVhEb2N1bWVudCk7IC8vIFdTSFxuICB2YXIgbGVuZ3RoID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB3aGlsZSAobGVuZ3RoLS0pIGRlbGV0ZSBOdWxsUHJvdG9PYmplY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tsZW5ndGhdXTtcbiAgcmV0dXJuIE51bGxQcm90b09iamVjdCgpO1xufTtcblxuaGlkZGVuS2V5c1tJRV9QUk9UT10gPSB0cnVlO1xuXG4vLyBgT2JqZWN0LmNyZWF0ZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtY3JlYXRlIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoTyAhPT0gbnVsbCkge1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eUNvbnN0cnVjdG9yKCk7XG4gICAgRW1wdHlDb25zdHJ1Y3RvcltQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBOdWxsUHJvdG9PYmplY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRlZmluZVByb3BlcnRpZXNNb2R1bGUuZihyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtY3JlYXRlLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcy5qcyI6KChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgREVTQ1JJUFRPUlMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZXNjcmlwdG9ycy5qc1wiKTtcbnZhciBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1ZyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnLmpzXCIpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5LmpzXCIpO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2FuLW9iamVjdCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qc1wiKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdC5qc1wiKTtcbnZhciBvYmplY3RLZXlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWtleXMuanNcIik7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnRpZXMgLS0gc2FmZVxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgJiYgIVY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBwcm9wcyA9IHRvSW5kZXhlZE9iamVjdChQcm9wZXJ0aWVzKTtcbiAgdmFyIGtleXMgPSBvYmplY3RLZXlzKFByb3BlcnRpZXMpO1xuICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChsZW5ndGggPiBpbmRleCkgZGVmaW5lUHJvcGVydHlNb2R1bGUuZihPLCBrZXkgPSBrZXlzW2luZGV4KytdLCBwcm9wc1trZXldKTtcbiAgcmV0dXJuIE87XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcy5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5LmpzIjooKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBERVNDUklQVE9SUyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9kZXNjcmlwdG9ycyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Rlc2NyaXB0b3JzLmpzXCIpO1xudmFyIElFOF9ET01fREVGSU5FID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUuanNcIik7XG52YXIgVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvdjgtcHJvdG90eXBlLWRlZmluZS1idWcgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qc1wiKTtcbnZhciBhbk9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9hbi1vYmplY3QgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hbi1vYmplY3QuanNcIik7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXkgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXkuanNcIik7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgJGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIEVOVU1FUkFCTEUgPSAnZW51bWVyYWJsZSc7XG52YXIgQ09ORklHVVJBQkxFID0gJ2NvbmZpZ3VyYWJsZSc7XG52YXIgV1JJVEFCTEUgPSAnd3JpdGFibGUnO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/IFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID8gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAodHlwZW9mIE8gPT09ICdmdW5jdGlvbicgJiYgUCA9PT0gJ3Byb3RvdHlwZScgJiYgJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzICYmIFdSSVRBQkxFIGluIEF0dHJpYnV0ZXMgJiYgIUF0dHJpYnV0ZXNbV1JJVEFCTEVdKSB7XG4gICAgdmFyIGN1cnJlbnQgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnRbV1JJVEFCTEVdKSB7XG4gICAgICBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgICAgIEF0dHJpYnV0ZXMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogQ09ORklHVVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0NPTkZJR1VSQUJMRV0gOiBjdXJyZW50W0NPTkZJR1VSQUJMRV0sXG4gICAgICAgIGVudW1lcmFibGU6IEVOVU1FUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbRU5VTUVSQUJMRV0gOiBjdXJyZW50W0VOVU1FUkFCTEVdLFxuICAgICAgICB3cml0YWJsZTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICB9IHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG59IDogJGRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyAkVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyI6KChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgREVTQ1JJUFRPUlMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZXNjcmlwdG9ycy5qc1wiKTtcbnZhciBjYWxsID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1jYWxsLmpzXCIpO1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUuanNcIik7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3IuanNcIik7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanNcIik7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXkgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXkuanNcIik7XG52YXIgaGFzT3duID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5LmpzXCIpO1xudmFyIElFOF9ET01fREVGSU5FID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2llOC1kb20tZGVmaW5lICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUuanNcIik7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JbmRleGVkT2JqZWN0KE8pO1xuICBQID0gdG9Qcm9wZXJ0eUtleShQKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXNPd24oTywgUCkpIHJldHVybiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoIWNhbGwocHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUuZiwgTywgUCksIE9bUF0pO1xufTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsLmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbi8qIGVzbGludC1kaXNhYmxlIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHNhZmUgKi9cbnZhciBjbGFzc29mID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanNcIik7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanNcIik7XG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSAoX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMuanNcIikuZik7XG52YXIgYXJyYXlTbGljZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9hcnJheS1zbGljZS1zaW1wbGUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zbGljZS1zaW1wbGUuanNcIik7XG5cbnZhciB3aW5kb3dOYW1lcyA9IHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzXG4gID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KSA6IFtdO1xuXG52YXIgZ2V0V2luZG93TmFtZXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5TmFtZXMoaXQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBhcnJheVNsaWNlKHdpbmRvd05hbWVzKTtcbiAgfVxufTtcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgYnVnZ3kgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgd2l0aCBpZnJhbWUgYW5kIHdpbmRvd1xubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgcmV0dXJuIHdpbmRvd05hbWVzICYmIGNsYXNzb2YoaXQpID09ICdXaW5kb3cnXG4gICAgPyBnZXRXaW5kb3dOYW1lcyhpdClcbiAgICA6ICRnZXRPd25Qcm9wZXJ0eU5hbWVzKHRvSW5kZXhlZE9iamVjdChpdCkpO1xufTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy1leHRlcm5hbC5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy5qcyI6KChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxleHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgaW50ZXJuYWxPYmplY3RLZXlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwuanNcIik7XG52YXIgZW51bUJ1Z0tleXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZW51bS1idWcta2V5cyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VudW0tYnVnLWtleXMuanNcIik7XG5cbnZhciBoaWRkZW5LZXlzID0gZW51bUJ1Z0tleXMuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5bmFtZXMgLS0gc2FmZVxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiBpbnRlcm5hbE9iamVjdEtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanMiOigoX191bnVzZWRfd2VicGFja19tb2R1bGUsZXhwb3J0cyk9PntldmFsKCJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZi5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgaGFzT3duID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5LmpzXCIpO1xudmFyIGlzQ2FsbGFibGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qc1wiKTtcbnZhciB0b09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy90by1vYmplY3QgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1vYmplY3QuanNcIik7XG52YXIgc2hhcmVkS2V5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXkgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzXCIpO1xudmFyIENPUlJFQ1RfUFJPVE9UWVBFX0dFVFRFUiA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXIgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXIuanNcIik7XG5cbnZhciBJRV9QUk9UTyA9IHNoYXJlZEtleSgnSUVfUFJPVE8nKTtcbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xudmFyIE9iamVjdFByb3RvdHlwZSA9ICRPYmplY3QucHJvdG90eXBlO1xuXG4vLyBgT2JqZWN0LmdldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldHByb3RvdHlwZW9mXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldHByb3RvdHlwZW9mIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID8gJE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIChPKSB7XG4gIHZhciBvYmplY3QgPSB0b09iamVjdChPKTtcbiAgaWYgKGhhc093bihvYmplY3QsIElFX1BST1RPKSkgcmV0dXJuIG9iamVjdFtJRV9QUk9UT107XG4gIHZhciBjb25zdHJ1Y3RvciA9IG9iamVjdC5jb25zdHJ1Y3RvcjtcbiAgaWYgKGlzQ2FsbGFibGUoY29uc3RydWN0b3IpICYmIG9iamVjdCBpbnN0YW5jZW9mIGNvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuIGNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gb2JqZWN0IGluc3RhbmNlb2YgJE9iamVjdCA/IE9iamVjdFByb3RvdHlwZSA6IG51bGw7XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1leHRlbnNpYmxlLmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mYWlscyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzXCIpO1xudmFyIGlzT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2lzLW9iamVjdCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qc1wiKTtcbnZhciBjbGFzc29mID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanNcIik7XG52YXIgQVJSQVlfQlVGRkVSX05PTl9FWFRFTlNJQkxFID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci1ub24tZXh0ZW5zaWJsZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci1ub24tZXh0ZW5zaWJsZS5qc1wiKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2V4dGVuc2libGUgLS0gc2FmZVxudmFyICRpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlO1xudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7ICRpc0V4dGVuc2libGUoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmlzRXh0ZW5zaWJsZWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5pc2V4dGVuc2libGVcbm1vZHVsZS5leHBvcnRzID0gKEZBSUxTX09OX1BSSU1JVElWRVMgfHwgQVJSQVlfQlVGRkVSX05PTl9FWFRFTlNJQkxFKSA/IGZ1bmN0aW9uIGlzRXh0ZW5zaWJsZShpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoQVJSQVlfQlVGRkVSX05PTl9FWFRFTlNJQkxFICYmIGNsYXNzb2YoaXQpID09ICdBcnJheUJ1ZmZlcicpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuICRpc0V4dGVuc2libGUgPyAkaXNFeHRlbnNpYmxlKGl0KSA6IHRydWU7XG59IDogJGlzRXh0ZW5zaWJsZTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtaXMtZXh0ZW5zaWJsZS5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mLmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciB1bmN1cnJ5VGhpcyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMuanNcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoe30uaXNQcm90b3R5cGVPZik7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZi5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbC5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgdW5jdXJyeVRoaXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzXCIpO1xudmFyIGhhc093biA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qc1wiKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdC5qc1wiKTtcbnZhciBpbmRleE9mID0gKF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzLmpzXCIpLmluZGV4T2YpO1xudmFyIGhpZGRlbktleXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaGlkZGVuLWtleXMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9oaWRkZW4ta2V5cy5qc1wiKTtcblxudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgIWhhc093bihoaWRkZW5LZXlzLCBrZXkpICYmIGhhc093bihPLCBrZXkpICYmIHB1c2gocmVzdWx0LCBrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzT3duKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHB1c2gocmVzdWx0LCBrZXkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLWludGVybmFsLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1rZXlzLmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBpbnRlcm5hbE9iamVjdEtleXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3Qta2V5cy1pbnRlcm5hbC5qc1wiKTtcbnZhciBlbnVtQnVnS2V5cyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qc1wiKTtcblxuLy8gYE9iamVjdC5rZXlzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmtleXNcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3Qta2V5cyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWtleXMuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUuanMiOigoX191bnVzZWRfd2VicGFja19tb2R1bGUsZXhwb3J0cyk9PntldmFsKCJcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBOYXNob3JuIH4gSkRLOCBidWdcbnZhciBOQVNIT1JOX0JVRyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiAhJHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoeyAxOiAyIH0sIDEpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUucHJvcGVydHlpc2VudW1lcmFibGVcbmV4cG9ydHMuZiA9IE5BU0hPUk5fQlVHID8gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBWKTtcbiAgcmV0dXJuICEhZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGU7XG59IDogJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1wcm9wZXJ0eS1pcy1lbnVtZXJhYmxlLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mLmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvIC0tIHNhZmUgKi9cbnZhciB1bmN1cnJ5VGhpc0FjY2Vzc29yID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1hY2Nlc3NvciAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1hY2Nlc3Nvci5qc1wiKTtcbnZhciBhbk9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9hbi1vYmplY3QgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hbi1vYmplY3QuanNcIik7XG52YXIgYVBvc3NpYmxlUHJvdG90eXBlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2EtcG9zc2libGUtcHJvdG90eXBlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1wb3NzaWJsZS1wcm90b3R5cGUuanNcIik7XG5cbi8vIGBPYmplY3Quc2V0UHJvdG90eXBlT2ZgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Quc2V0cHJvdG90eXBlb2Zcbi8vIFdvcmtzIHdpdGggX19wcm90b19fIG9ubHkuIE9sZCB2OCBjYW4ndCB3b3JrIHdpdGggbnVsbCBwcm90byBvYmplY3RzLlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1zZXRwcm90b3R5cGVvZiAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoJ19fcHJvdG9fXycgaW4ge30gPyBmdW5jdGlvbiAoKSB7XG4gIHZhciBDT1JSRUNUX1NFVFRFUiA9IGZhbHNlO1xuICB2YXIgdGVzdCA9IHt9O1xuICB2YXIgc2V0dGVyO1xuICB0cnkge1xuICAgIHNldHRlciA9IHVuY3VycnlUaGlzQWNjZXNzb3IoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycsICdzZXQnKTtcbiAgICBzZXR0ZXIodGVzdCwgW10pO1xuICAgIENPUlJFQ1RfU0VUVEVSID0gdGVzdCBpbnN0YW5jZW9mIEFycmF5O1xuICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgIGFuT2JqZWN0KE8pO1xuICAgIGFQb3NzaWJsZVByb3RvdHlwZShwcm90byk7XG4gICAgaWYgKENPUlJFQ1RfU0VUVEVSKSBzZXR0ZXIoTywgcHJvdG8pO1xuICAgIGVsc2UgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICByZXR1cm4gTztcbiAgfTtcbn0oKSA6IHVuZGVmaW5lZCk7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlLmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBjYWxsID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1jYWxsLmpzXCIpO1xudmFyIGlzQ2FsbGFibGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qc1wiKTtcbnZhciBpc09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pcy1vYmplY3QgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1vYmplY3QuanNcIik7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgT3JkaW5hcnlUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9yZGluYXJ5dG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0LCBwcmVmKSB7XG4gIHZhciBmbiwgdmFsO1xuICBpZiAocHJlZiA9PT0gJ3N0cmluZycgJiYgaXNDYWxsYWJsZShmbiA9IGlucHV0LnRvU3RyaW5nKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKGlzQ2FsbGFibGUoZm4gPSBpbnB1dC52YWx1ZU9mKSAmJiAhaXNPYmplY3QodmFsID0gY2FsbChmbiwgaW5wdXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKHByZWYgIT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIHRocm93ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29yZGluYXJ5LXRvLXByaW1pdGl2ZS5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vd24ta2V5cy5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgZ2V0QnVpbHRJbiA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4gKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtYnVpbHQtaW4uanNcIik7XG52YXIgdW5jdXJyeVRoaXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzXCIpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy5qc1wiKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMuanNcIik7XG52YXIgYW5PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvYW4tb2JqZWN0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYW4tb2JqZWN0LmpzXCIpO1xuXG52YXIgY29uY2F0ID0gdW5jdXJyeVRoaXMoW10uY29uY2F0KTtcblxuLy8gYWxsIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBub24tZW51bWVyYWJsZSBhbmQgc3ltYm9sc1xubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ293bktleXMnKSB8fCBmdW5jdGlvbiBvd25LZXlzKGl0KSB7XG4gIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mKGFuT2JqZWN0KGl0KSk7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgcmV0dXJuIGdldE93blByb3BlcnR5U3ltYm9scyA/IGNvbmNhdChrZXlzLCBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpKSA6IGtleXM7XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL293bi1rZXlzLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3BlcmZvcm0uanMiOigobW9kdWxlKT0+e2V2YWwoIlxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiB7IGVycm9yOiBmYWxzZSwgdmFsdWU6IGV4ZWMoKSB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB7IGVycm9yOiB0cnVlLCB2YWx1ZTogZXJyb3IgfTtcbiAgfVxufTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9wZXJmb3JtLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uLmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZ2xvYmFsICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2xvYmFsLmpzXCIpO1xudmFyIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvciAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yLmpzXCIpO1xudmFyIGlzQ2FsbGFibGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qc1wiKTtcbnZhciBpc0ZvcmNlZCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pcy1mb3JjZWQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1mb3JjZWQuanNcIik7XG52YXIgaW5zcGVjdFNvdXJjZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlLmpzXCIpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzXCIpO1xudmFyIElTX0JST1dTRVIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWJyb3dzZXIgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtaXMtYnJvd3Nlci5qc1wiKTtcbnZhciBJU19ERU5PID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1kZW5vICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLWlzLWRlbm8uanNcIik7XG52YXIgSVNfUFVSRSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pcy1wdXJlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtcHVyZS5qc1wiKTtcbnZhciBWOF9WRVJTSU9OID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24uanNcIik7XG5cbnZhciBOYXRpdmVQcm9taXNlUHJvdG90eXBlID0gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yICYmIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xudmFyIFNVQkNMQVNTSU5HID0gZmFsc2U7XG52YXIgTkFUSVZFX1BST01JU0VfUkVKRUNUSU9OX0VWRU5UID0gaXNDYWxsYWJsZShnbG9iYWwuUHJvbWlzZVJlamVjdGlvbkV2ZW50KTtcblxudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gaXNGb3JjZWQoJ1Byb21pc2UnLCBmdW5jdGlvbiAoKSB7XG4gIHZhciBQUk9NSVNFX0NPTlNUUlVDVE9SX1NPVVJDRSA9IGluc3BlY3RTb3VyY2UoTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKTtcbiAgdmFyIEdMT0JBTF9DT1JFX0pTX1BST01JU0UgPSBQUk9NSVNFX0NPTlNUUlVDVE9SX1NPVVJDRSAhPT0gU3RyaW5nKE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvcik7XG4gIC8vIFY4IDYuNiAoTm9kZSAxMCBhbmQgQ2hyb21lIDY2KSBoYXZlIGEgYnVnIHdpdGggcmVzb2x2aW5nIGN1c3RvbSB0aGVuYWJsZXNcbiAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9ODMwNTY1XG4gIC8vIFdlIGNhbid0IGRldGVjdCBpdCBzeW5jaHJvbm91c2x5LCBzbyBqdXN0IGNoZWNrIHZlcnNpb25zXG4gIGlmICghR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSAmJiBWOF9WRVJTSU9OID09PSA2NikgcmV0dXJuIHRydWU7XG4gIC8vIFdlIG5lZWQgUHJvbWlzZSN7IGNhdGNoLCBmaW5hbGx5IH0gaW4gdGhlIHB1cmUgdmVyc2lvbiBmb3IgcHJldmVudGluZyBwcm90b3R5cGUgcG9sbHV0aW9uXG4gIGlmIChJU19QVVJFICYmICEoTmF0aXZlUHJvbWlzZVByb3RvdHlwZVsnY2F0Y2gnXSAmJiBOYXRpdmVQcm9taXNlUHJvdG90eXBlWydmaW5hbGx5J10pKSByZXR1cm4gdHJ1ZTtcbiAgLy8gV2UgY2FuJ3QgdXNlIEBAc3BlY2llcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbiAgLy8gZGVvcHRpbWl6YXRpb24gYW5kIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzlcbiAgaWYgKCFWOF9WRVJTSU9OIHx8IFY4X1ZFUlNJT04gPCA1MSB8fCAhL25hdGl2ZSBjb2RlLy50ZXN0KFBST01JU0VfQ09OU1RSVUNUT1JfU09VUkNFKSkge1xuICAgIC8vIERldGVjdCBjb3JyZWN0bmVzcyBvZiBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gICAgdmFyIHByb21pc2UgPSBuZXcgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUoMSk7IH0pO1xuICAgIHZhciBGYWtlUHJvbWlzZSA9IGZ1bmN0aW9uIChleGVjKSB7XG4gICAgICBleGVjKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbiAgICB9O1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IHByb21pc2UuY29uc3RydWN0b3IgPSB7fTtcbiAgICBjb25zdHJ1Y3RvcltTUEVDSUVTXSA9IEZha2VQcm9taXNlO1xuICAgIFNVQkNMQVNTSU5HID0gcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSkgaW5zdGFuY2VvZiBGYWtlUHJvbWlzZTtcbiAgICBpZiAoIVNVQkNMQVNTSU5HKSByZXR1cm4gdHJ1ZTtcbiAgLy8gVW5oYW5kbGVkIHJlamVjdGlvbnMgdHJhY2tpbmcgc3VwcG9ydCwgTm9kZUpTIFByb21pc2Ugd2l0aG91dCBpdCBmYWlscyBAQHNwZWNpZXMgdGVzdFxuICB9IHJldHVybiAhR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSAmJiAoSVNfQlJPV1NFUiB8fCBJU19ERU5PKSAmJiAhTkFUSVZFX1BST01JU0VfUkVKRUNUSU9OX0VWRU5UO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBDT05TVFJVQ1RPUjogRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IsXG4gIFJFSkVDVElPTl9FVkVOVDogTkFUSVZFX1BST01JU0VfUkVKRUNUSU9OX0VWRU5ULFxuICBTVUJDTEFTU0lORzogU1VCQ0xBU1NJTkdcbn07XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3IuanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9nbG9iYWwgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwuanNcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2xvYmFsLlByb21pc2U7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3IuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcHJvbWlzZS1yZXNvbHZlLmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBhbk9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9hbi1vYmplY3QgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hbi1vYmplY3QuanNcIik7XG52YXIgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaXMtb2JqZWN0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtb2JqZWN0LmpzXCIpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHkgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5LmpzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDLCB4KSB7XG4gIGFuT2JqZWN0KEMpO1xuICBpZiAoaXNPYmplY3QoeCkgJiYgeC5jb25zdHJ1Y3RvciA9PT0gQykgcmV0dXJuIHg7XG4gIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5LmYoQyk7XG4gIHZhciByZXNvbHZlID0gcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgcmVzb2x2ZSh4KTtcbiAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LnByb21pc2U7XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZS5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbi5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3IuanNcIik7XG52YXIgY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbiAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbi5qc1wiKTtcbnZhciBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24gKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbi5qc1wiKS5DT05TVFJVQ1RPUik7XG5cbm1vZHVsZS5leHBvcnRzID0gRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgfHwgIWNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbihmdW5jdGlvbiAoaXRlcmFibGUpIHtcbiAgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yLmFsbChpdGVyYWJsZSkudGhlbih1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbi5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9wcm94eS1hY2Nlc3Nvci5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgZGVmaW5lUHJvcGVydHkgPSAoX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5LmpzXCIpLmYpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUYXJnZXQsIFNvdXJjZSwga2V5KSB7XG4gIGtleSBpbiBUYXJnZXQgfHwgZGVmaW5lUHJvcGVydHkoVGFyZ2V0LCBrZXksIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBTb3VyY2Vba2V5XTsgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uIChpdCkgeyBTb3VyY2Vba2V5XSA9IGl0OyB9XG4gIH0pO1xufTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9wcm94eS1hY2Nlc3Nvci5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9xdWV1ZS5qcyI6KChtb2R1bGUpPT57ZXZhbCgiXG52YXIgUXVldWUgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuaGVhZCA9IG51bGw7XG4gIHRoaXMudGFpbCA9IG51bGw7XG59O1xuXG5RdWV1ZS5wcm90b3R5cGUgPSB7XG4gIGFkZDogZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICB2YXIgZW50cnkgPSB7IGl0ZW06IGl0ZW0sIG5leHQ6IG51bGwgfTtcbiAgICB2YXIgdGFpbCA9IHRoaXMudGFpbDtcbiAgICBpZiAodGFpbCkgdGFpbC5uZXh0ID0gZW50cnk7XG4gICAgZWxzZSB0aGlzLmhlYWQgPSBlbnRyeTtcbiAgICB0aGlzLnRhaWwgPSBlbnRyeTtcbiAgfSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGVudHJ5ID0gdGhpcy5oZWFkO1xuICAgIGlmIChlbnRyeSkge1xuICAgICAgdmFyIG5leHQgPSB0aGlzLmhlYWQgPSBlbnRyeS5uZXh0O1xuICAgICAgaWYgKG5leHQgPT09IG51bGwpIHRoaXMudGFpbCA9IG51bGw7XG4gICAgICByZXR1cm4gZW50cnkuaXRlbTtcbiAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUXVldWU7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcXVldWUuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMtYWJzdHJhY3QuanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIGNhbGwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanNcIik7XG52YXIgYW5PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvYW4tb2JqZWN0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYW4tb2JqZWN0LmpzXCIpO1xudmFyIGlzQ2FsbGFibGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qc1wiKTtcbnZhciBjbGFzc29mID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi1yYXcuanNcIik7XG52YXIgcmVnZXhwRXhlYyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9yZWdleHAtZXhlYyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1leGVjLmpzXCIpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYFJlZ0V4cEV4ZWNgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHBleGVjXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChSLCBTKSB7XG4gIHZhciBleGVjID0gUi5leGVjO1xuICBpZiAoaXNDYWxsYWJsZShleGVjKSkge1xuICAgIHZhciByZXN1bHQgPSBjYWxsKGV4ZWMsIFIsIFMpO1xuICAgIGlmIChyZXN1bHQgIT09IG51bGwpIGFuT2JqZWN0KHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAoY2xhc3NvZihSKSA9PT0gJ1JlZ0V4cCcpIHJldHVybiBjYWxsKHJlZ2V4cEV4ZWMsIFIsIFMpO1xuICB0aHJvdyAkVHlwZUVycm9yKCdSZWdFeHAjZXhlYyBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyJyk7XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1leGVjLWFic3RyYWN0LmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1leGVjLmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbi8qIGVzbGludC1kaXNhYmxlIHJlZ2V4cC9uby1lbXB0eS1jYXB0dXJpbmctZ3JvdXAsIHJlZ2V4cC9uby1lbXB0eS1ncm91cCwgcmVnZXhwL25vLWxhenktZW5kcyAtLSB0ZXN0aW5nICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWdleHAvbm8tdXNlbGVzcy1xdWFudGlmaWVyIC0tIHRlc3RpbmcgKi9cbnZhciBjYWxsID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1jYWxsLmpzXCIpO1xudmFyIHVuY3VycnlUaGlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qc1wiKTtcbnZhciB0b1N0cmluZyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy90by1zdHJpbmcgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1zdHJpbmcuanNcIik7XG52YXIgcmVnZXhwRmxhZ3MgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvcmVnZXhwLWZsYWdzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWZsYWdzLmpzXCIpO1xudmFyIHN0aWNreUhlbHBlcnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvcmVnZXhwLXN0aWNreS1oZWxwZXJzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLXN0aWNreS1oZWxwZXJzLmpzXCIpO1xudmFyIHNoYXJlZCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9zaGFyZWQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQuanNcIik7XG52YXIgY3JlYXRlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtY3JlYXRlLmpzXCIpO1xudmFyIGdldEludGVybmFsU3RhdGUgPSAoX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUuanNcIikuZ2V0KTtcbnZhciBVTlNVUFBPUlRFRF9ET1RfQUxMID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3JlZ2V4cC11bnN1cHBvcnRlZC1kb3QtYWxsICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLXVuc3VwcG9ydGVkLWRvdC1hbGwuanNcIik7XG52YXIgVU5TVVBQT1JURURfTkNHID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3JlZ2V4cC11bnN1cHBvcnRlZC1uY2cgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtbmNnLmpzXCIpO1xuXG52YXIgbmF0aXZlUmVwbGFjZSA9IHNoYXJlZCgnbmF0aXZlLXN0cmluZy1yZXBsYWNlJywgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbnZhciBuYXRpdmVFeGVjID0gUmVnRXhwLnByb3RvdHlwZS5leGVjO1xudmFyIHBhdGNoZWRFeGVjID0gbmF0aXZlRXhlYztcbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIGluZGV4T2YgPSB1bmN1cnJ5VGhpcygnJy5pbmRleE9mKTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbnZhciBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUxID0gL2EvO1xuICB2YXIgcmUyID0gL2IqL2c7XG4gIGNhbGwobmF0aXZlRXhlYywgcmUxLCAnYScpO1xuICBjYWxsKG5hdGl2ZUV4ZWMsIHJlMiwgJ2EnKTtcbiAgcmV0dXJuIHJlMS5sYXN0SW5kZXggIT09IDAgfHwgcmUyLmxhc3RJbmRleCAhPT0gMDtcbn0pKCk7XG5cbnZhciBVTlNVUFBPUlRFRF9ZID0gc3RpY2t5SGVscGVycy5CUk9LRU5fQ0FSRVQ7XG5cbi8vIG5vbnBhcnRpY2lwYXRpbmcgY2FwdHVyaW5nIGdyb3VwLCBjb3BpZWQgZnJvbSBlczUtc2hpbSdzIFN0cmluZyNzcGxpdCBwYXRjaC5cbnZhciBOUENHX0lOQ0xVREVEID0gLygpPz8vLmV4ZWMoJycpWzFdICE9PSB1bmRlZmluZWQ7XG5cbnZhciBQQVRDSCA9IFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyB8fCBOUENHX0lOQ0xVREVEIHx8IFVOU1VQUE9SVEVEX1kgfHwgVU5TVVBQT1JURURfRE9UX0FMTCB8fCBVTlNVUFBPUlRFRF9OQ0c7XG5cbmlmIChQQVRDSCkge1xuICBwYXRjaGVkRXhlYyA9IGZ1bmN0aW9uIGV4ZWMoc3RyaW5nKSB7XG4gICAgdmFyIHJlID0gdGhpcztcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHJlKTtcbiAgICB2YXIgc3RyID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICB2YXIgcmF3ID0gc3RhdGUucmF3O1xuICAgIHZhciByZXN1bHQsIHJlQ29weSwgbGFzdEluZGV4LCBtYXRjaCwgaSwgb2JqZWN0LCBncm91cDtcblxuICAgIGlmIChyYXcpIHtcbiAgICAgIHJhdy5sYXN0SW5kZXggPSByZS5sYXN0SW5kZXg7XG4gICAgICByZXN1bHQgPSBjYWxsKHBhdGNoZWRFeGVjLCByYXcsIHN0cik7XG4gICAgICByZS5sYXN0SW5kZXggPSByYXcubGFzdEluZGV4O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB2YXIgZ3JvdXBzID0gc3RhdGUuZ3JvdXBzO1xuICAgIHZhciBzdGlja3kgPSBVTlNVUFBPUlRFRF9ZICYmIHJlLnN0aWNreTtcbiAgICB2YXIgZmxhZ3MgPSBjYWxsKHJlZ2V4cEZsYWdzLCByZSk7XG4gICAgdmFyIHNvdXJjZSA9IHJlLnNvdXJjZTtcbiAgICB2YXIgY2hhcnNBZGRlZCA9IDA7XG4gICAgdmFyIHN0ckNvcHkgPSBzdHI7XG5cbiAgICBpZiAoc3RpY2t5KSB7XG4gICAgICBmbGFncyA9IHJlcGxhY2UoZmxhZ3MsICd5JywgJycpO1xuICAgICAgaWYgKGluZGV4T2YoZmxhZ3MsICdnJykgPT09IC0xKSB7XG4gICAgICAgIGZsYWdzICs9ICdnJztcbiAgICAgIH1cblxuICAgICAgc3RyQ29weSA9IHN0cmluZ1NsaWNlKHN0ciwgcmUubGFzdEluZGV4KTtcbiAgICAgIC8vIFN1cHBvcnQgYW5jaG9yZWQgc3RpY2t5IGJlaGF2aW9yLlxuICAgICAgaWYgKHJlLmxhc3RJbmRleCA+IDAgJiYgKCFyZS5tdWx0aWxpbmUgfHwgcmUubXVsdGlsaW5lICYmIGNoYXJBdChzdHIsIHJlLmxhc3RJbmRleCAtIDEpICE9PSAnXFxuJykpIHtcbiAgICAgICAgc291cmNlID0gJyg/OiAnICsgc291cmNlICsgJyknO1xuICAgICAgICBzdHJDb3B5ID0gJyAnICsgc3RyQ29weTtcbiAgICAgICAgY2hhcnNBZGRlZCsrO1xuICAgICAgfVxuICAgICAgLy8gXig/ICsgcnggKyApIGlzIG5lZWRlZCwgaW4gY29tYmluYXRpb24gd2l0aCBzb21lIHN0ciBzbGljaW5nLCB0b1xuICAgICAgLy8gc2ltdWxhdGUgdGhlICd5JyBmbGFnLlxuICAgICAgcmVDb3B5ID0gbmV3IFJlZ0V4cCgnXig/OicgKyBzb3VyY2UgKyAnKScsIGZsYWdzKTtcbiAgICB9XG5cbiAgICBpZiAoTlBDR19JTkNMVURFRCkge1xuICAgICAgcmVDb3B5ID0gbmV3IFJlZ0V4cCgnXicgKyBzb3VyY2UgKyAnJCg/IVxcXFxzKScsIGZsYWdzKTtcbiAgICB9XG4gICAgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORykgbGFzdEluZGV4ID0gcmUubGFzdEluZGV4O1xuXG4gICAgbWF0Y2ggPSBjYWxsKG5hdGl2ZUV4ZWMsIHN0aWNreSA/IHJlQ29weSA6IHJlLCBzdHJDb3B5KTtcblxuICAgIGlmIChzdGlja3kpIHtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBtYXRjaC5pbnB1dCA9IHN0cmluZ1NsaWNlKG1hdGNoLmlucHV0LCBjaGFyc0FkZGVkKTtcbiAgICAgICAgbWF0Y2hbMF0gPSBzdHJpbmdTbGljZShtYXRjaFswXSwgY2hhcnNBZGRlZCk7XG4gICAgICAgIG1hdGNoLmluZGV4ID0gcmUubGFzdEluZGV4O1xuICAgICAgICByZS5sYXN0SW5kZXggKz0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgfSBlbHNlIHJlLmxhc3RJbmRleCA9IDA7XG4gICAgfSBlbHNlIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgJiYgbWF0Y2gpIHtcbiAgICAgIHJlLmxhc3RJbmRleCA9IHJlLmdsb2JhbCA/IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoIDogbGFzdEluZGV4O1xuICAgIH1cbiAgICBpZiAoTlBDR19JTkNMVURFRCAmJiBtYXRjaCAmJiBtYXRjaC5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBGaXggYnJvd3NlcnMgd2hvc2UgYGV4ZWNgIG1ldGhvZHMgZG9uJ3QgY29uc2lzdGVudGx5IHJldHVybiBgdW5kZWZpbmVkYFxuICAgICAgLy8gZm9yIE5QQ0csIGxpa2UgSUU4LiBOT1RFOiBUaGlzIGRvZXNuJ3Qgd29yayBmb3IgLyguPyk/L1xuICAgICAgY2FsbChuYXRpdmVSZXBsYWNlLCBtYXRjaFswXSwgcmVDb3B5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAoaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMjsgaSsrKSB7XG4gICAgICAgICAgaWYgKGFyZ3VtZW50c1tpXSA9PT0gdW5kZWZpbmVkKSBtYXRjaFtpXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoICYmIGdyb3Vwcykge1xuICAgICAgbWF0Y2guZ3JvdXBzID0gb2JqZWN0ID0gY3JlYXRlKG51bGwpO1xuICAgICAgZm9yIChpID0gMDsgaSA8IGdyb3Vwcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBncm91cCA9IGdyb3Vwc1tpXTtcbiAgICAgICAgb2JqZWN0W2dyb3VwWzBdXSA9IG1hdGNoW2dyb3VwWzFdXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2g7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0Y2hlZEV4ZWM7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWZsYWdzLmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBhbk9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9hbi1vYmplY3QgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hbi1vYmplY3QuanNcIik7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLmZsYWdzYCBnZXR0ZXIgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LXJlZ2V4cC5wcm90b3R5cGUuZmxhZ3Ncbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGhhdCA9IGFuT2JqZWN0KHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIGlmICh0aGF0Lmhhc0luZGljZXMpIHJlc3VsdCArPSAnZCc7XG4gIGlmICh0aGF0Lmdsb2JhbCkgcmVzdWx0ICs9ICdnJztcbiAgaWYgKHRoYXQuaWdub3JlQ2FzZSkgcmVzdWx0ICs9ICdpJztcbiAgaWYgKHRoYXQubXVsdGlsaW5lKSByZXN1bHQgKz0gJ20nO1xuICBpZiAodGhhdC5kb3RBbGwpIHJlc3VsdCArPSAncyc7XG4gIGlmICh0aGF0LnVuaWNvZGUpIHJlc3VsdCArPSAndSc7XG4gIGlmICh0aGF0LnVuaWNvZGVTZXRzKSByZXN1bHQgKz0gJ3YnO1xuICBpZiAodGhhdC5zdGlja3kpIHJlc3VsdCArPSAneSc7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1mbGFncy5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtZ2V0LWZsYWdzLmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBjYWxsID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1jYWxsLmpzXCIpO1xudmFyIGhhc093biA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qc1wiKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mLmpzXCIpO1xudmFyIHJlZ0V4cEZsYWdzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3JlZ2V4cC1mbGFncyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1mbGFncy5qc1wiKTtcblxudmFyIFJlZ0V4cFByb3RvdHlwZSA9IFJlZ0V4cC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFIpIHtcbiAgdmFyIGZsYWdzID0gUi5mbGFncztcbiAgcmV0dXJuIGZsYWdzID09PSB1bmRlZmluZWQgJiYgISgnZmxhZ3MnIGluIFJlZ0V4cFByb3RvdHlwZSkgJiYgIWhhc093bihSLCAnZmxhZ3MnKSAmJiBpc1Byb3RvdHlwZU9mKFJlZ0V4cFByb3RvdHlwZSwgUilcbiAgICA/IGNhbGwocmVnRXhwRmxhZ3MsIFIpIDogZmxhZ3M7XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1nZXQtZmxhZ3MuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLXN0aWNreS1oZWxwZXJzLmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mYWlscyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzXCIpO1xudmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9nbG9iYWwgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwuanNcIik7XG5cbi8vIGJhYmVsLW1pbmlmeSBhbmQgQ2xvc3VyZSBDb21waWxlciB0cmFuc3BpbGVzIFJlZ0V4cCgnYScsICd5JykgLT4gL2EveSBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG52YXIgJFJlZ0V4cCA9IGdsb2JhbC5SZWdFeHA7XG5cbnZhciBVTlNVUFBPUlRFRF9ZID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUgPSAkUmVnRXhwKCdhJywgJ3knKTtcbiAgcmUubGFzdEluZGV4ID0gMjtcbiAgcmV0dXJuIHJlLmV4ZWMoJ2FiY2QnKSAhPSBudWxsO1xufSk7XG5cbi8vIFVDIEJyb3dzZXIgYnVnXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTAwOFxudmFyIE1JU1NFRF9TVElDS1kgPSBVTlNVUFBPUlRFRF9ZIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICEkUmVnRXhwKCdhJywgJ3knKS5zdGlja3k7XG59KTtcblxudmFyIEJST0tFTl9DQVJFVCA9IFVOU1VQUE9SVEVEX1kgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD03NzM2ODdcbiAgdmFyIHJlID0gJFJlZ0V4cCgnXnInLCAnZ3knKTtcbiAgcmUubGFzdEluZGV4ID0gMjtcbiAgcmV0dXJuIHJlLmV4ZWMoJ3N0cicpICE9IG51bGw7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEJST0tFTl9DQVJFVDogQlJPS0VOX0NBUkVULFxuICBNSVNTRURfU1RJQ0tZOiBNSVNTRURfU1RJQ0tZLFxuICBVTlNVUFBPUlRFRF9ZOiBVTlNVUFBPUlRFRF9ZXG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1zdGlja3ktaGVscGVycy5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtZG90LWFsbC5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgZmFpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZmFpbHMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mYWlscy5qc1wiKTtcbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZ2xvYmFsICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2xvYmFsLmpzXCIpO1xuXG4vLyBiYWJlbC1taW5pZnkgYW5kIENsb3N1cmUgQ29tcGlsZXIgdHJhbnNwaWxlcyBSZWdFeHAoJy4nLCAncycpIC0+IC8uL3MgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyICRSZWdFeHAgPSBnbG9iYWwuUmVnRXhwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlID0gJFJlZ0V4cCgnLicsICdzJyk7XG4gIHJldHVybiAhKHJlLmRvdEFsbCAmJiByZS5leGVjKCdcXG4nKSAmJiByZS5mbGFncyA9PT0gJ3MnKTtcbn0pO1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC11bnN1cHBvcnRlZC1kb3QtYWxsLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC11bnN1cHBvcnRlZC1uY2cuanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2ZhaWxzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZmFpbHMuanNcIik7XG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2dsb2JhbCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dsb2JhbC5qc1wiKTtcblxuLy8gYmFiZWwtbWluaWZ5IGFuZCBDbG9zdXJlIENvbXBpbGVyIHRyYW5zcGlsZXMgUmVnRXhwKCcoPzxhPmIpJywgJ2cnKSAtPiAvKD88YT5iKS9nIGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbnZhciAkUmVnRXhwID0gZ2xvYmFsLlJlZ0V4cDtcblxubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciByZSA9ICRSZWdFeHAoJyg/PGE+YiknLCAnZycpO1xuICByZXR1cm4gcmUuZXhlYygnYicpLmdyb3Vwcy5hICE9PSAnYicgfHxcbiAgICAnYicucmVwbGFjZShyZSwgJyQ8YT5jJykgIT09ICdiYyc7XG59KTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtbmNnLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZS5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZC5qc1wiKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVxdWlyZW9iamVjdGNvZXJjaWJsZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKGl0KSkgdGhyb3cgJFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZS5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtaGVscGVycy5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgdW5jdXJyeVRoaXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzXCIpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tc2V0IC0tIHNhZmVcbnZhciBTZXRQcm90b3R5cGUgPSBTZXQucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXNldCAtLSBzYWZlXG4gIFNldDogU2V0LFxuICBhZGQ6IHVuY3VycnlUaGlzKFNldFByb3RvdHlwZS5hZGQpLFxuICBoYXM6IHVuY3VycnlUaGlzKFNldFByb3RvdHlwZS5oYXMpLFxuICByZW1vdmU6IHVuY3VycnlUaGlzKFNldFByb3RvdHlwZVsnZGVsZXRlJ10pLFxuICBwcm90bzogU2V0UHJvdG90eXBlXG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1oZWxwZXJzLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1zcGVjaWVzLmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBnZXRCdWlsdEluID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbiAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qc1wiKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yLmpzXCIpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzXCIpO1xudmFyIERFU0NSSVBUT1JTID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanNcIik7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTlNUUlVDVE9SX05BTUUpIHtcbiAgdmFyIENvbnN0cnVjdG9yID0gZ2V0QnVpbHRJbihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICBpZiAoREVTQ1JJUFRPUlMgJiYgQ29uc3RydWN0b3IgJiYgIUNvbnN0cnVjdG9yW1NQRUNJRVNdKSB7XG4gICAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKENvbnN0cnVjdG9yLCBTUEVDSUVTLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH1cbiAgICB9KTtcbiAgfVxufTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtc3BlY2llcy5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZy5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgZGVmaW5lUHJvcGVydHkgPSAoX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5LmpzXCIpLmYpO1xudmFyIGhhc093biA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qc1wiKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC5qc1wiKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRhcmdldCwgVEFHLCBTVEFUSUMpIHtcbiAgaWYgKHRhcmdldCAmJiAhU1RBVElDKSB0YXJnZXQgPSB0YXJnZXQucHJvdG90eXBlO1xuICBpZiAodGFyZ2V0ICYmICFoYXNPd24odGFyZ2V0LCBUT19TVFJJTkdfVEFHKSkge1xuICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwgVE9fU1RSSU5HX1RBRywgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBUQUcgfSk7XG4gIH1cbn07XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLWtleS5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgc2hhcmVkID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3NoYXJlZCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NoYXJlZC5qc1wiKTtcbnZhciB1aWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvdWlkICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdWlkLmpzXCIpO1xuXG52YXIga2V5cyA9IHNoYXJlZCgna2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIGtleXNba2V5XSB8fCAoa2V5c1trZXldID0gdWlkKGtleSkpO1xufTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQta2V5LmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NoYXJlZC1zdG9yZS5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2dsb2JhbCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dsb2JhbC5qc1wiKTtcbnZhciBkZWZpbmVHbG9iYWxQcm9wZXJ0eSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9kZWZpbmUtZ2xvYmFsLXByb3BlcnR5ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eS5qc1wiKTtcblxudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgZGVmaW5lR2xvYmFsUHJvcGVydHkoU0hBUkVELCB7fSk7XG5cbm1vZHVsZS5leHBvcnRzID0gc3RvcmU7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLXN0b3JlLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NoYXJlZC5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgSVNfUFVSRSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pcy1wdXJlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtcHVyZS5qc1wiKTtcbnZhciBzdG9yZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQtc3RvcmUuanNcIik7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoge30pO1xufSkoJ3ZlcnNpb25zJywgW10pLnB1c2goe1xuICB2ZXJzaW9uOiAnMy4zMi4wJyxcbiAgbW9kZTogSVNfUFVSRSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDE0LTIwMjMgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSknLFxuICBsaWNlbnNlOiAnaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvYmxvYi92My4zMi4wL0xJQ0VOU0UnLFxuICBzb3VyY2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcydcbn0pO1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NoYXJlZC5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBhbk9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9hbi1vYmplY3QgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hbi1vYmplY3QuanNcIik7XG52YXIgYUNvbnN0cnVjdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2EtY29uc3RydWN0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNvbnN0cnVjdG9yLmpzXCIpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQuanNcIik7XG52YXIgd2VsbEtub3duU3ltYm9sID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wuanNcIik7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG5cbi8vIGBTcGVjaWVzQ29uc3RydWN0b3JgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zcGVjaWVzY29uc3RydWN0b3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGRlZmF1bHRDb25zdHJ1Y3Rvcikge1xuICB2YXIgQyA9IGFuT2JqZWN0KE8pLmNvbnN0cnVjdG9yO1xuICB2YXIgUztcbiAgcmV0dXJuIEMgPT09IHVuZGVmaW5lZCB8fCBpc051bGxPclVuZGVmaW5lZChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID8gZGVmYXVsdENvbnN0cnVjdG9yIDogYUNvbnN0cnVjdG9yKFMpO1xufTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUuanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIHVuY3VycnlUaGlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qc1wiKTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHkgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5LmpzXCIpO1xudmFyIHRvU3RyaW5nID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3RvLXN0cmluZyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXN0cmluZy5qc1wiKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZS5qc1wiKTtcblxudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgY2hhckNvZGVBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJDb2RlQXQpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKENPTlZFUlRfVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIHBvcykge1xuICAgIHZhciBTID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSgkdGhpcykpO1xuICAgIHZhciBwb3NpdGlvbiA9IHRvSW50ZWdlck9ySW5maW5pdHkocG9zKTtcbiAgICB2YXIgc2l6ZSA9IFMubGVuZ3RoO1xuICAgIHZhciBmaXJzdCwgc2Vjb25kO1xuICAgIGlmIChwb3NpdGlvbiA8IDAgfHwgcG9zaXRpb24gPj0gc2l6ZSkgcmV0dXJuIENPTlZFUlRfVE9fU1RSSU5HID8gJycgOiB1bmRlZmluZWQ7XG4gICAgZmlyc3QgPSBjaGFyQ29kZUF0KFMsIHBvc2l0aW9uKTtcbiAgICByZXR1cm4gZmlyc3QgPCAweEQ4MDAgfHwgZmlyc3QgPiAweERCRkYgfHwgcG9zaXRpb24gKyAxID09PSBzaXplXG4gICAgICB8fCAoc2Vjb25kID0gY2hhckNvZGVBdChTLCBwb3NpdGlvbiArIDEpKSA8IDB4REMwMCB8fCBzZWNvbmQgPiAweERGRkZcbiAgICAgICAgPyBDT05WRVJUX1RPX1NUUklOR1xuICAgICAgICAgID8gY2hhckF0KFMsIHBvc2l0aW9uKVxuICAgICAgICAgIDogZmlyc3RcbiAgICAgICAgOiBDT05WRVJUX1RPX1NUUklOR1xuICAgICAgICAgID8gc3RyaW5nU2xpY2UoUywgcG9zaXRpb24sIHBvc2l0aW9uICsgMilcbiAgICAgICAgICA6IChmaXJzdCAtIDB4RDgwMCA8PCAxMCkgKyAoc2Vjb25kIC0gMHhEQzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuY29kZXBvaW50YXRcbiAgY29kZUF0OiBjcmVhdGVNZXRob2QoZmFsc2UpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5hdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuYXRcbiAgY2hhckF0OiBjcmVhdGVNZXRob2QodHJ1ZSlcbn07XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZS5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctcHVueWNvZGUtdG8tYXNjaWkuanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxuLy8gYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL2Jlc3RpZWpzL3B1bnljb2RlLmpzL2Jsb2IvbWFzdGVyL3B1bnljb2RlLmpzXG52YXIgdW5jdXJyeVRoaXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzXCIpO1xuXG52YXIgbWF4SW50ID0gMjE0NzQ4MzY0NzsgLy8gYWthLiAweDdGRkZGRkZGIG9yIDJeMzEtMVxudmFyIGJhc2UgPSAzNjtcbnZhciB0TWluID0gMTtcbnZhciB0TWF4ID0gMjY7XG52YXIgc2tldyA9IDM4O1xudmFyIGRhbXAgPSA3MDA7XG52YXIgaW5pdGlhbEJpYXMgPSA3MjtcbnZhciBpbml0aWFsTiA9IDEyODsgLy8gMHg4MFxudmFyIGRlbGltaXRlciA9ICctJzsgLy8gJ1xceDJEJ1xudmFyIHJlZ2V4Tm9uQVNDSUkgPSAvW15cXDAtXFx1MDA3RV0vOyAvLyBub24tQVNDSUkgY2hhcnNcbnZhciByZWdleFNlcGFyYXRvcnMgPSAvWy5cXHUzMDAyXFx1RkYwRVxcdUZGNjFdL2c7IC8vIFJGQyAzNDkwIHNlcGFyYXRvcnNcbnZhciBPVkVSRkxPV19FUlJPUiA9ICdPdmVyZmxvdzogaW5wdXQgbmVlZHMgd2lkZXIgaW50ZWdlcnMgdG8gcHJvY2Vzcyc7XG52YXIgYmFzZU1pbnVzVE1pbiA9IGJhc2UgLSB0TWluO1xuXG52YXIgJFJhbmdlRXJyb3IgPSBSYW5nZUVycm9yO1xudmFyIGV4ZWMgPSB1bmN1cnJ5VGhpcyhyZWdleFNlcGFyYXRvcnMuZXhlYyk7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIGZyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG52YXIgY2hhckNvZGVBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJDb2RlQXQpO1xudmFyIGpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIHNwbGl0ID0gdW5jdXJyeVRoaXMoJycuc3BsaXQpO1xudmFyIHRvTG93ZXJDYXNlID0gdW5jdXJyeVRoaXMoJycudG9Mb3dlckNhc2UpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgbnVtZXJpYyBjb2RlIHBvaW50cyBvZiBlYWNoIFVuaWNvZGVcbiAqIGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiBXaGlsZSBKYXZhU2NyaXB0IHVzZXMgVUNTLTIgaW50ZXJuYWxseSxcbiAqIHRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IGEgcGFpciBvZiBzdXJyb2dhdGUgaGFsdmVzIChlYWNoIG9mIHdoaWNoXG4gKiBVQ1MtMiBleHBvc2VzIGFzIHNlcGFyYXRlIGNoYXJhY3RlcnMpIGludG8gYSBzaW5nbGUgY29kZSBwb2ludCxcbiAqIG1hdGNoaW5nIFVURi0xNi5cbiAqL1xudmFyIHVjczJkZWNvZGUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHZhciBvdXRwdXQgPSBbXTtcbiAgdmFyIGNvdW50ZXIgPSAwO1xuICB2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcbiAgd2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcbiAgICB2YXIgdmFsdWUgPSBjaGFyQ29kZUF0KHN0cmluZywgY291bnRlcisrKTtcbiAgICBpZiAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REJGRiAmJiBjb3VudGVyIDwgbGVuZ3RoKSB7XG4gICAgICAvLyBJdCdzIGEgaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyLlxuICAgICAgdmFyIGV4dHJhID0gY2hhckNvZGVBdChzdHJpbmcsIGNvdW50ZXIrKyk7XG4gICAgICBpZiAoKGV4dHJhICYgMHhGQzAwKSA9PSAweERDMDApIHsgLy8gTG93IHN1cnJvZ2F0ZS5cbiAgICAgICAgcHVzaChvdXRwdXQsICgodmFsdWUgJiAweDNGRikgPDwgMTApICsgKGV4dHJhICYgMHgzRkYpICsgMHgxMDAwMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJdCdzIGFuIHVubWF0Y2hlZCBzdXJyb2dhdGU7IG9ubHkgYXBwZW5kIHRoaXMgY29kZSB1bml0LCBpbiBjYXNlIHRoZVxuICAgICAgICAvLyBuZXh0IGNvZGUgdW5pdCBpcyB0aGUgaGlnaCBzdXJyb2dhdGUgb2YgYSBzdXJyb2dhdGUgcGFpci5cbiAgICAgICAgcHVzaChvdXRwdXQsIHZhbHVlKTtcbiAgICAgICAgY291bnRlci0tO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwdXNoKG91dHB1dCwgdmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0cHV0O1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIGRpZ2l0L2ludGVnZXIgaW50byBhIGJhc2ljIGNvZGUgcG9pbnQuXG4gKi9cbnZhciBkaWdpdFRvQmFzaWMgPSBmdW5jdGlvbiAoZGlnaXQpIHtcbiAgLy8gIDAuLjI1IG1hcCB0byBBU0NJSSBhLi56IG9yIEEuLlpcbiAgLy8gMjYuLjM1IG1hcCB0byBBU0NJSSAwLi45XG4gIHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNik7XG59O1xuXG4vKipcbiAqIEJpYXMgYWRhcHRhdGlvbiBmdW5jdGlvbiBhcyBwZXIgc2VjdGlvbiAzLjQgb2YgUkZDIDM0OTIuXG4gKiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzQ5MiNzZWN0aW9uLTMuNFxuICovXG52YXIgYWRhcHQgPSBmdW5jdGlvbiAoZGVsdGEsIG51bVBvaW50cywgZmlyc3RUaW1lKSB7XG4gIHZhciBrID0gMDtcbiAgZGVsdGEgPSBmaXJzdFRpbWUgPyBmbG9vcihkZWx0YSAvIGRhbXApIDogZGVsdGEgPj4gMTtcbiAgZGVsdGEgKz0gZmxvb3IoZGVsdGEgLyBudW1Qb2ludHMpO1xuICB3aGlsZSAoZGVsdGEgPiBiYXNlTWludXNUTWluICogdE1heCA+PiAxKSB7XG4gICAgZGVsdGEgPSBmbG9vcihkZWx0YSAvIGJhc2VNaW51c1RNaW4pO1xuICAgIGsgKz0gYmFzZTtcbiAgfVxuICByZXR1cm4gZmxvb3IoayArIChiYXNlTWludXNUTWluICsgMSkgKiBkZWx0YSAvIChkZWx0YSArIHNrZXcpKTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzIChlLmcuIGEgZG9tYWluIG5hbWUgbGFiZWwpIHRvIGFcbiAqIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG4gKi9cbnZhciBlbmNvZGUgPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgdmFyIG91dHB1dCA9IFtdO1xuXG4gIC8vIENvbnZlcnQgdGhlIGlucHV0IGluIFVDUy0yIHRvIGFuIGFycmF5IG9mIFVuaWNvZGUgY29kZSBwb2ludHMuXG4gIGlucHV0ID0gdWNzMmRlY29kZShpbnB1dCk7XG5cbiAgLy8gQ2FjaGUgdGhlIGxlbmd0aC5cbiAgdmFyIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuXG4gIC8vIEluaXRpYWxpemUgdGhlIHN0YXRlLlxuICB2YXIgbiA9IGluaXRpYWxOO1xuICB2YXIgZGVsdGEgPSAwO1xuICB2YXIgYmlhcyA9IGluaXRpYWxCaWFzO1xuICB2YXIgaSwgY3VycmVudFZhbHVlO1xuXG4gIC8vIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHMuXG4gIGZvciAoaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgIGN1cnJlbnRWYWx1ZSA9IGlucHV0W2ldO1xuICAgIGlmIChjdXJyZW50VmFsdWUgPCAweDgwKSB7XG4gICAgICBwdXNoKG91dHB1dCwgZnJvbUNoYXJDb2RlKGN1cnJlbnRWYWx1ZSkpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBiYXNpY0xlbmd0aCA9IG91dHB1dC5sZW5ndGg7IC8vIG51bWJlciBvZiBiYXNpYyBjb2RlIHBvaW50cy5cbiAgdmFyIGhhbmRsZWRDUENvdW50ID0gYmFzaWNMZW5ndGg7IC8vIG51bWJlciBvZiBjb2RlIHBvaW50cyB0aGF0IGhhdmUgYmVlbiBoYW5kbGVkO1xuXG4gIC8vIEZpbmlzaCB0aGUgYmFzaWMgc3RyaW5nIHdpdGggYSBkZWxpbWl0ZXIgdW5sZXNzIGl0J3MgZW1wdHkuXG4gIGlmIChiYXNpY0xlbmd0aCkge1xuICAgIHB1c2gob3V0cHV0LCBkZWxpbWl0ZXIpO1xuICB9XG5cbiAgLy8gTWFpbiBlbmNvZGluZyBsb29wOlxuICB3aGlsZSAoaGFuZGxlZENQQ291bnQgPCBpbnB1dExlbmd0aCkge1xuICAgIC8vIEFsbCBub24tYmFzaWMgY29kZSBwb2ludHMgPCBuIGhhdmUgYmVlbiBoYW5kbGVkIGFscmVhZHkuIEZpbmQgdGhlIG5leHQgbGFyZ2VyIG9uZTpcbiAgICB2YXIgbSA9IG1heEludDtcbiAgICBmb3IgKGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGN1cnJlbnRWYWx1ZSA9IGlucHV0W2ldO1xuICAgICAgaWYgKGN1cnJlbnRWYWx1ZSA+PSBuICYmIGN1cnJlbnRWYWx1ZSA8IG0pIHtcbiAgICAgICAgbSA9IGN1cnJlbnRWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJbmNyZWFzZSBgZGVsdGFgIGVub3VnaCB0byBhZHZhbmNlIHRoZSBkZWNvZGVyJ3MgPG4saT4gc3RhdGUgdG8gPG0sMD4sIGJ1dCBndWFyZCBhZ2FpbnN0IG92ZXJmbG93LlxuICAgIHZhciBoYW5kbGVkQ1BDb3VudFBsdXNPbmUgPSBoYW5kbGVkQ1BDb3VudCArIDE7XG4gICAgaWYgKG0gLSBuID4gZmxvb3IoKG1heEludCAtIGRlbHRhKSAvIGhhbmRsZWRDUENvdW50UGx1c09uZSkpIHtcbiAgICAgIHRocm93ICRSYW5nZUVycm9yKE9WRVJGTE9XX0VSUk9SKTtcbiAgICB9XG5cbiAgICBkZWx0YSArPSAobSAtIG4pICogaGFuZGxlZENQQ291bnRQbHVzT25lO1xuICAgIG4gPSBtO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjdXJyZW50VmFsdWUgPSBpbnB1dFtpXTtcbiAgICAgIGlmIChjdXJyZW50VmFsdWUgPCBuICYmICsrZGVsdGEgPiBtYXhJbnQpIHtcbiAgICAgICAgdGhyb3cgJFJhbmdlRXJyb3IoT1ZFUkZMT1dfRVJST1IpO1xuICAgICAgfVxuICAgICAgaWYgKGN1cnJlbnRWYWx1ZSA9PSBuKSB7XG4gICAgICAgIC8vIFJlcHJlc2VudCBkZWx0YSBhcyBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyLlxuICAgICAgICB2YXIgcSA9IGRlbHRhO1xuICAgICAgICB2YXIgayA9IGJhc2U7XG4gICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgdmFyIHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuICAgICAgICAgIGlmIChxIDwgdCkgYnJlYWs7XG4gICAgICAgICAgdmFyIHFNaW51c1QgPSBxIC0gdDtcbiAgICAgICAgICB2YXIgYmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuICAgICAgICAgIHB1c2gob3V0cHV0LCBmcm9tQ2hhckNvZGUoZGlnaXRUb0Jhc2ljKHQgKyBxTWludXNUICUgYmFzZU1pbnVzVCkpKTtcbiAgICAgICAgICBxID0gZmxvb3IocU1pbnVzVCAvIGJhc2VNaW51c1QpO1xuICAgICAgICAgIGsgKz0gYmFzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1c2gob3V0cHV0LCBmcm9tQ2hhckNvZGUoZGlnaXRUb0Jhc2ljKHEpKSk7XG4gICAgICAgIGJpYXMgPSBhZGFwdChkZWx0YSwgaGFuZGxlZENQQ291bnRQbHVzT25lLCBoYW5kbGVkQ1BDb3VudCA9PSBiYXNpY0xlbmd0aCk7XG4gICAgICAgIGRlbHRhID0gMDtcbiAgICAgICAgaGFuZGxlZENQQ291bnQrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkZWx0YSsrO1xuICAgIG4rKztcbiAgfVxuICByZXR1cm4gam9pbihvdXRwdXQsICcnKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlucHV0KSB7XG4gIHZhciBlbmNvZGVkID0gW107XG4gIHZhciBsYWJlbHMgPSBzcGxpdChyZXBsYWNlKHRvTG93ZXJDYXNlKGlucHV0KSwgcmVnZXhTZXBhcmF0b3JzLCAnXFx1MDAyRScpLCAnLicpO1xuICB2YXIgaSwgbGFiZWw7XG4gIGZvciAoaSA9IDA7IGkgPCBsYWJlbHMubGVuZ3RoOyBpKyspIHtcbiAgICBsYWJlbCA9IGxhYmVsc1tpXTtcbiAgICBwdXNoKGVuY29kZWQsIGV4ZWMocmVnZXhOb25BU0NJSSwgbGFiZWwpID8gJ3huLS0nICsgZW5jb2RlKGxhYmVsKSA6IGxhYmVsKTtcbiAgfVxuICByZXR1cm4gam9pbihlbmNvZGVkLCAnLicpO1xufTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctcHVueWNvZGUtdG8tYXNjaWkuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3RyaW5nLXJlcGVhdC5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qc1wiKTtcbnZhciB0b1N0cmluZyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy90by1zdHJpbmcgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1zdHJpbmcuanNcIik7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUuanNcIik7XG5cbnZhciAkUmFuZ2VFcnJvciA9IFJhbmdlRXJyb3I7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLnJlcGVhdGAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUucmVwZWF0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlcGVhdChjb3VudCkge1xuICB2YXIgc3RyID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKSk7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgdmFyIG4gPSB0b0ludGVnZXJPckluZmluaXR5KGNvdW50KTtcbiAgaWYgKG4gPCAwIHx8IG4gPT0gSW5maW5pdHkpIHRocm93ICRSYW5nZUVycm9yKCdXcm9uZyBudW1iZXIgb2YgcmVwZXRpdGlvbnMnKTtcbiAgZm9yICg7biA+IDA7IChuID4+Pj0gMSkgJiYgKHN0ciArPSBzdHIpKSBpZiAobiAmIDEpIHJlc3VsdCArPSBzdHI7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N0cmluZy1yZXBlYXQuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3RyaW5nLXRyaW0tZW5kLmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciAkdHJpbUVuZCA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvc3RyaW5nLXRyaW0gKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctdHJpbS5qc1wiKS5lbmQpO1xudmFyIGZvcmNlZFN0cmluZ1RyaW1NZXRob2QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvc3RyaW5nLXRyaW0tZm9yY2VkICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3RyaW5nLXRyaW0tZm9yY2VkLmpzXCIpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW1FbmQsIHRyaW1SaWdodCB9YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltZW5kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jU3RyaW5nLnByb3RvdHlwZS50cmltcmlnaHRcbm1vZHVsZS5leHBvcnRzID0gZm9yY2VkU3RyaW5nVHJpbU1ldGhvZCgndHJpbUVuZCcpID8gZnVuY3Rpb24gdHJpbUVuZCgpIHtcbiAgcmV0dXJuICR0cmltRW5kKHRoaXMpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXN0cmluZy1wcm90b3R5cGUtdHJpbXN0YXJ0LXRyaW1lbmQgLS0gc2FmZVxufSA6ICcnLnRyaW1FbmQ7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3RyaW5nLXRyaW0tZW5kLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N0cmluZy10cmltLWZvcmNlZC5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgUFJPUEVSX0ZVTkNUSU9OX05BTUUgPSAoX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzXCIpLlBST1BFUik7XG52YXIgZmFpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZmFpbHMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mYWlscy5qc1wiKTtcbnZhciB3aGl0ZXNwYWNlcyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy93aGl0ZXNwYWNlcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3doaXRlc3BhY2VzLmpzXCIpO1xuXG52YXIgbm9uID0gJ1xcdTIwMEJcXHUwMDg1XFx1MTgwRSc7XG5cbi8vIGNoZWNrIHRoYXQgYSBtZXRob2Qgd29ya3Mgd2l0aCB0aGUgY29ycmVjdCBsaXN0XG4vLyBvZiB3aGl0ZXNwYWNlcyBhbmQgaGFzIGEgY29ycmVjdCBuYW1lXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICByZXR1cm4gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAhIXdoaXRlc3BhY2VzW01FVEhPRF9OQU1FXSgpXG4gICAgICB8fCBub25bTUVUSE9EX05BTUVdKCkgIT09IG5vblxuICAgICAgfHwgKFBST1BFUl9GVU5DVElPTl9OQU1FICYmIHdoaXRlc3BhY2VzW01FVEhPRF9OQU1FXS5uYW1lICE9PSBNRVRIT0RfTkFNRSk7XG4gIH0pO1xufTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctdHJpbS1mb3JjZWQuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3RyaW5nLXRyaW0uanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIHVuY3VycnlUaGlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qc1wiKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZS5qc1wiKTtcbnZhciB0b1N0cmluZyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy90by1zdHJpbmcgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1zdHJpbmcuanNcIik7XG52YXIgd2hpdGVzcGFjZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvd2hpdGVzcGFjZXMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93aGl0ZXNwYWNlcy5qc1wiKTtcblxudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBsdHJpbSA9IFJlZ0V4cCgnXlsnICsgd2hpdGVzcGFjZXMgKyAnXSsnKTtcbnZhciBydHJpbSA9IFJlZ0V4cCgnKF58W14nICsgd2hpdGVzcGFjZXMgKyAnXSlbJyArIHdoaXRlc3BhY2VzICsgJ10rJCcpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW0sIHRyaW1TdGFydCwgdHJpbUVuZCwgdHJpbUxlZnQsIHRyaW1SaWdodCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcykge1xuICAgIHZhciBzdHJpbmcgPSB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKCR0aGlzKSk7XG4gICAgaWYgKFRZUEUgJiAxKSBzdHJpbmcgPSByZXBsYWNlKHN0cmluZywgbHRyaW0sICcnKTtcbiAgICBpZiAoVFlQRSAmIDIpIHN0cmluZyA9IHJlcGxhY2Uoc3RyaW5nLCBydHJpbSwgJyQxJyk7XG4gICAgcmV0dXJuIHN0cmluZztcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW1MZWZ0LCB0cmltU3RhcnQgfWAgbWV0aG9kc1xuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbXN0YXJ0XG4gIHN0YXJ0OiBjcmVhdGVNZXRob2QoMSksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnsgdHJpbVJpZ2h0LCB0cmltRW5kIH1gIG1ldGhvZHNcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1lbmRcbiAgZW5kOiBjcmVhdGVNZXRob2QoMiksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnRyaW1gIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbVxuICB0cmltOiBjcmVhdGVNZXRob2QoMylcbn07XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3RyaW5nLXRyaW0uanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3RydWN0dXJlZC1jbG9uZS1wcm9wZXItdHJhbnNmZXIuanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9nbG9iYWwgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwuanNcIik7XG52YXIgZmFpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZmFpbHMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mYWlscy5qc1wiKTtcbnZhciBWOCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbiAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uLmpzXCIpO1xudmFyIElTX0JST1dTRVIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWJyb3dzZXIgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtaXMtYnJvd3Nlci5qc1wiKTtcbnZhciBJU19ERU5PID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1kZW5vICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLWlzLWRlbm8uanNcIik7XG52YXIgSVNfTk9ERSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlLmpzXCIpO1xuXG52YXIgc3RydWN0dXJlZENsb25lID0gZ2xvYmFsLnN0cnVjdHVyZWRDbG9uZTtcblxubW9kdWxlLmV4cG9ydHMgPSAhIXN0cnVjdHVyZWRDbG9uZSAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBwcmV2ZW50IFY4IEFycmF5QnVmZmVyRGV0YWNoaW5nIHByb3RlY3RvciBjZWxsIGludmFsaWRhdGlvbiBhbmQgcGVyZm9ybWFuY2UgZGVncmFkYXRpb25cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY3OVxuICBpZiAoKElTX0RFTk8gJiYgVjggPiA5MikgfHwgKElTX05PREUgJiYgVjggPiA5NCkgfHwgKElTX0JST1dTRVIgJiYgVjggPiA5NykpIHJldHVybiBmYWxzZTtcbiAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcig4KTtcbiAgdmFyIGNsb25lID0gc3RydWN0dXJlZENsb25lKGJ1ZmZlciwgeyB0cmFuc2ZlcjogW2J1ZmZlcl0gfSk7XG4gIHJldHVybiBidWZmZXIuYnl0ZUxlbmd0aCAhPSAwIHx8IGNsb25lLmJ5dGVMZW5ndGggIT0gODtcbn0pO1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N0cnVjdHVyZWQtY2xvbmUtcHJvcGVyLXRyYW5zZmVyLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgVjhfVkVSU0lPTiA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbiAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uLmpzXCIpO1xudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2ZhaWxzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZmFpbHMuanNcIik7XG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2dsb2JhbCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dsb2JhbC5qc1wiKTtcblxudmFyICRTdHJpbmcgPSBnbG9iYWwuU3RyaW5nO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5c3ltYm9scyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xubW9kdWxlLmV4cG9ydHMgPSAhIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN5bWJvbCA9IFN5bWJvbCgpO1xuICAvLyBDaHJvbWUgMzggU3ltYm9sIGhhcyBpbmNvcnJlY3QgdG9TdHJpbmcgY29udmVyc2lvblxuICAvLyBgZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzYCBwb2x5ZmlsbCBzeW1ib2xzIGNvbnZlcnRlZCB0byBvYmplY3QgYXJlIG5vdCBTeW1ib2wgaW5zdGFuY2VzXG4gIC8vIG5iOiBEbyBub3QgY2FsbCBgU3RyaW5nYCBkaXJlY3RseSB0byBhdm9pZCB0aGlzIGJlaW5nIG9wdGltaXplZCBvdXQgdG8gYHN5bWJvbCsnJ2Agd2hpY2ggd2lsbCxcbiAgLy8gb2YgY291cnNlLCBmYWlsLlxuICByZXR1cm4gISRTdHJpbmcoc3ltYm9sKSB8fCAhKE9iamVjdChzeW1ib2wpIGluc3RhbmNlb2YgU3ltYm9sKSB8fFxuICAgIC8vIENocm9tZSAzOC00MCBzeW1ib2xzIGFyZSBub3QgaW5oZXJpdGVkIGZyb20gRE9NIGNvbGxlY3Rpb25zIHByb3RvdHlwZXMgdG8gaW5zdGFuY2VzXG4gICAgIVN5bWJvbC5zaGFtICYmIFY4X1ZFUlNJT04gJiYgVjhfVkVSU0lPTiA8IDQxO1xufSk7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbi5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90YXNrLmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZ2xvYmFsICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2xvYmFsLmpzXCIpO1xudmFyIGFwcGx5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHkuanNcIik7XG52YXIgYmluZCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQuanNcIik7XG52YXIgaXNDYWxsYWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pcy1jYWxsYWJsZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWNhbGxhYmxlLmpzXCIpO1xudmFyIGhhc093biA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qc1wiKTtcbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mYWlscyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzXCIpO1xudmFyIGh0bWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaHRtbCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2h0bWwuanNcIik7XG52YXIgYXJyYXlTbGljZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9hcnJheS1zbGljZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LXNsaWNlLmpzXCIpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudC5qc1wiKTtcbnZhciB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy92YWxpZGF0ZS1hcmd1bWVudHMtbGVuZ3RoICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdmFsaWRhdGUtYXJndW1lbnRzLWxlbmd0aC5qc1wiKTtcbnZhciBJU19JT1MgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWlvcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MuanNcIik7XG52YXIgSVNfTk9ERSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlLmpzXCIpO1xuXG52YXIgc2V0ID0gZ2xvYmFsLnNldEltbWVkaWF0ZTtcbnZhciBjbGVhciA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZTtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgRGlzcGF0Y2ggPSBnbG9iYWwuRGlzcGF0Y2g7XG52YXIgRnVuY3Rpb24gPSBnbG9iYWwuRnVuY3Rpb247XG52YXIgTWVzc2FnZUNoYW5uZWwgPSBnbG9iYWwuTWVzc2FnZUNoYW5uZWw7XG52YXIgU3RyaW5nID0gZ2xvYmFsLlN0cmluZztcbnZhciBjb3VudGVyID0gMDtcbnZhciBxdWV1ZSA9IHt9O1xudmFyIE9OUkVBRFlTVEFURUNIQU5HRSA9ICdvbnJlYWR5c3RhdGVjaGFuZ2UnO1xudmFyICRsb2NhdGlvbiwgZGVmZXIsIGNoYW5uZWwsIHBvcnQ7XG5cbmZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gRGVubyB0aHJvd3MgYSBSZWZlcmVuY2VFcnJvciBvbiBgbG9jYXRpb25gIGFjY2VzcyB3aXRob3V0IGAtLWxvY2F0aW9uYCBmbGFnXG4gICRsb2NhdGlvbiA9IGdsb2JhbC5sb2NhdGlvbjtcbn0pO1xuXG52YXIgcnVuID0gZnVuY3Rpb24gKGlkKSB7XG4gIGlmIChoYXNPd24ocXVldWUsIGlkKSkge1xuICAgIHZhciBmbiA9IHF1ZXVlW2lkXTtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICAgIGZuKCk7XG4gIH1cbn07XG5cbnZhciBydW5uZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBydW4oaWQpO1xuICB9O1xufTtcblxudmFyIGV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgcnVuKGV2ZW50LmRhdGEpO1xufTtcblxudmFyIGdsb2JhbFBvc3RNZXNzYWdlRGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgLy8gb2xkIGVuZ2luZXMgaGF2ZSBub3QgbG9jYXRpb24ub3JpZ2luXG4gIGdsb2JhbC5wb3N0TWVzc2FnZShTdHJpbmcoaWQpLCAkbG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgJGxvY2F0aW9uLmhvc3QpO1xufTtcblxuLy8gTm9kZS5qcyAwLjkrICYgSUUxMCsgaGFzIHNldEltbWVkaWF0ZSwgb3RoZXJ3aXNlOlxuaWYgKCFzZXQgfHwgIWNsZWFyKSB7XG4gIHNldCA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShoYW5kbGVyKSB7XG4gICAgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwgMSk7XG4gICAgdmFyIGZuID0gaXNDYWxsYWJsZShoYW5kbGVyKSA/IGhhbmRsZXIgOiBGdW5jdGlvbihoYW5kbGVyKTtcbiAgICB2YXIgYXJncyA9IGFycmF5U2xpY2UoYXJndW1lbnRzLCAxKTtcbiAgICBxdWV1ZVsrK2NvdW50ZXJdID0gZnVuY3Rpb24gKCkge1xuICAgICAgYXBwbHkoZm4sIHVuZGVmaW5lZCwgYXJncyk7XG4gICAgfTtcbiAgICBkZWZlcihjb3VudGVyKTtcbiAgICByZXR1cm4gY291bnRlcjtcbiAgfTtcbiAgY2xlYXIgPSBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShpZCkge1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gIH07XG4gIC8vIE5vZGUuanMgMC44LVxuICBpZiAoSVNfTk9ERSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKHJ1bm5lcihpZCkpO1xuICAgIH07XG4gIC8vIFNwaGVyZSAoSlMgZ2FtZSBlbmdpbmUpIERpc3BhdGNoIEFQSVxuICB9IGVsc2UgaWYgKERpc3BhdGNoICYmIERpc3BhdGNoLm5vdykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBEaXNwYXRjaC5ub3cocnVubmVyKGlkKSk7XG4gICAgfTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBNZXNzYWdlQ2hhbm5lbCwgaW5jbHVkZXMgV2ViV29ya2Vyc1xuICAvLyBleGNlcHQgaU9TIC0gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzYyNFxuICB9IGVsc2UgaWYgKE1lc3NhZ2VDaGFubmVsICYmICFJU19JT1MpIHtcbiAgICBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gICAgcG9ydCA9IGNoYW5uZWwucG9ydDI7XG4gICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBldmVudExpc3RlbmVyO1xuICAgIGRlZmVyID0gYmluZChwb3J0LnBvc3RNZXNzYWdlLCBwb3J0KTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBwb3N0TWVzc2FnZSwgc2tpcCBXZWJXb3JrZXJzXG4gIC8vIElFOCBoYXMgcG9zdE1lc3NhZ2UsIGJ1dCBpdCdzIHN5bmMgJiB0eXBlb2YgaXRzIHBvc3RNZXNzYWdlIGlzICdvYmplY3QnXG4gIH0gZWxzZSBpZiAoXG4gICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIgJiZcbiAgICBpc0NhbGxhYmxlKGdsb2JhbC5wb3N0TWVzc2FnZSkgJiZcbiAgICAhZ2xvYmFsLmltcG9ydFNjcmlwdHMgJiZcbiAgICAkbG9jYXRpb24gJiYgJGxvY2F0aW9uLnByb3RvY29sICE9PSAnZmlsZTonICYmXG4gICAgIWZhaWxzKGdsb2JhbFBvc3RNZXNzYWdlRGVmZXIpXG4gICkge1xuICAgIGRlZmVyID0gZ2xvYmFsUG9zdE1lc3NhZ2VEZWZlcjtcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGV2ZW50TGlzdGVuZXIsIGZhbHNlKTtcbiAgLy8gSUU4LVxuICB9IGVsc2UgaWYgKE9OUkVBRFlTVEFURUNIQU5HRSBpbiBjcmVhdGVFbGVtZW50KCdzY3JpcHQnKSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpKVtPTlJFQURZU1RBVEVDSEFOR0VdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBodG1sLnJlbW92ZUNoaWxkKHRoaXMpO1xuICAgICAgICBydW4oaWQpO1xuICAgICAgfTtcbiAgICB9O1xuICAvLyBSZXN0IG9sZCBicm93c2Vyc1xuICB9IGVsc2Uge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBzZXRUaW1lb3V0KHJ1bm5lcihpZCksIDApO1xuICAgIH07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0LFxuICBjbGVhcjogY2xlYXJcbn07XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdGFzay5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90aGlzLW51bWJlci12YWx1ZS5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgdW5jdXJyeVRoaXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzXCIpO1xuXG4vLyBgdGhpc051bWJlclZhbHVlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdGhpc251bWJlcnZhbHVlXG5tb2R1bGUuZXhwb3J0cyA9IHVuY3VycnlUaGlzKDEuMC52YWx1ZU9mKTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90aGlzLW51bWJlci12YWx1ZS5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleC5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qc1wiKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBIZWxwZXIgZm9yIGEgcG9wdWxhciByZXBlYXRpbmcgY2FzZSBvZiB0aGUgc3BlYzpcbi8vIExldCBpbnRlZ2VyIGJlID8gVG9JbnRlZ2VyKGluZGV4KS5cbi8vIElmIGludGVnZXIgPCAwLCBsZXQgcmVzdWx0IGJlIG1heCgobGVuZ3RoICsgaW50ZWdlciksIDApOyBlbHNlIGxldCByZXN1bHQgYmUgbWluKGludGVnZXIsIGxlbmd0aCkuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIHZhciBpbnRlZ2VyID0gdG9JbnRlZ2VyT3JJbmZpbml0eShpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleC5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1iaWctaW50LmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciB0b1ByaW1pdGl2ZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy90by1wcmltaXRpdmUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1wcmltaXRpdmUuanNcIik7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgVG9CaWdJbnRgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2JpZ2ludFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIHByaW0gPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgJ251bWJlcicpO1xuICBpZiAodHlwZW9mIHByaW0gPT0gJ251bWJlcicpIHRocm93ICRUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG51bWJlciB0byBiaWdpbnRcIik7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1iaWdpbnQgLS0gc2FmZVxuICByZXR1cm4gQmlnSW50KHByaW0pO1xufTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1iaWctaW50LmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWluZGV4LmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHkgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5LmpzXCIpO1xudmFyIHRvTGVuZ3RoID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWxlbmd0aC5qc1wiKTtcblxudmFyICRSYW5nZUVycm9yID0gUmFuZ2VFcnJvcjtcblxuLy8gYFRvSW5kZXhgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2luZGV4XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIDA7XG4gIHZhciBudW1iZXIgPSB0b0ludGVnZXJPckluZmluaXR5KGl0KTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKG51bWJlcik7XG4gIGlmIChudW1iZXIgIT09IGxlbmd0aCkgdGhyb3cgJFJhbmdlRXJyb3IoJ1dyb25nIGxlbmd0aCBvciBpbmRleCcpO1xuICByZXR1cm4gbGVuZ3RoO1xufTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1pbmRleC5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdC5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG4vLyB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIEluZGV4ZWRPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qc1wiKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZS5qc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIEluZGV4ZWRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShpdCkpO1xufTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdC5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5LmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciB0cnVuYyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9tYXRoLXRydW5jICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbWF0aC10cnVuYy5qc1wiKTtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4gbnVtYmVyICE9PSBudW1iZXIgfHwgbnVtYmVyID09PSAwID8gMCA6IHRydW5jKG51bWJlcik7XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHkuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHkgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5LmpzXCIpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbGVuZ3RoXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gYXJndW1lbnQgPiAwID8gbWluKHRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpLCAweDFGRkZGRkZGRkZGRkZGKSA6IDA7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLW9iamVjdC5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUuanNcIik7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG4vLyBgVG9PYmplY3RgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b29iamVjdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuICRPYmplY3QocmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudCkpO1xufTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1vYmplY3QuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2Zmc2V0LmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciB0b1Bvc2l0aXZlSW50ZWdlciA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy90by1wb3NpdGl2ZS1pbnRlZ2VyICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcG9zaXRpdmUtaW50ZWdlci5qc1wiKTtcblxudmFyICRSYW5nZUVycm9yID0gUmFuZ2VFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIEJZVEVTKSB7XG4gIHZhciBvZmZzZXQgPSB0b1Bvc2l0aXZlSW50ZWdlcihpdCk7XG4gIGlmIChvZmZzZXQgJSBCWVRFUykgdGhyb3cgJFJhbmdlRXJyb3IoJ1dyb25nIG9mZnNldCcpO1xuICByZXR1cm4gb2Zmc2V0O1xufTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1vZmZzZXQuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcG9zaXRpdmUtaW50ZWdlci5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qc1wiKTtcblxudmFyICRSYW5nZUVycm9yID0gUmFuZ2VFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHJlc3VsdCA9IHRvSW50ZWdlck9ySW5maW5pdHkoaXQpO1xuICBpZiAocmVzdWx0IDwgMCkgdGhyb3cgJFJhbmdlRXJyb3IoXCJUaGUgYXJndW1lbnQgY2FuJ3QgYmUgbGVzcyB0aGFuIDBcIik7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXBvc2l0aXZlLWludGVnZXIuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlLmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBjYWxsID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1jYWxsLmpzXCIpO1xudmFyIGlzT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2lzLW9iamVjdCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qc1wiKTtcbnZhciBpc1N5bWJvbCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pcy1zeW1ib2wgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1zeW1ib2wuanNcIik7XG52YXIgZ2V0TWV0aG9kID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2dldC1tZXRob2QgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtbWV0aG9kLmpzXCIpO1xudmFyIG9yZGluYXJ5VG9QcmltaXRpdmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb3JkaW5hcnktdG8tcHJpbWl0aXZlLmpzXCIpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzXCIpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciBUT19QUklNSVRJVkUgPSB3ZWxsS25vd25TeW1ib2woJ3RvUHJpbWl0aXZlJyk7XG5cbi8vIGBUb1ByaW1pdGl2ZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICBpZiAoIWlzT2JqZWN0KGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpIHJldHVybiBpbnB1dDtcbiAgdmFyIGV4b3RpY1RvUHJpbSA9IGdldE1ldGhvZChpbnB1dCwgVE9fUFJJTUlUSVZFKTtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKGV4b3RpY1RvUHJpbSkge1xuICAgIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnZGVmYXVsdCc7XG4gICAgcmVzdWx0ID0gY2FsbChleG90aWNUb1ByaW0sIGlucHV0LCBwcmVmKTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlc3VsdCkgfHwgaXNTeW1ib2wocmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgICB0aHJvdyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xuICB9XG4gIGlmIChwcmVmID09PSB1bmRlZmluZWQpIHByZWYgPSAnbnVtYmVyJztcbiAgcmV0dXJuIG9yZGluYXJ5VG9QcmltaXRpdmUoaW5wdXQsIHByZWYpO1xufTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1wcmltaXRpdmUuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciB0b1ByaW1pdGl2ZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy90by1wcmltaXRpdmUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1wcmltaXRpdmUuanNcIik7XG52YXIgaXNTeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaXMtc3ltYm9sICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtc3ltYm9sLmpzXCIpO1xuXG4vLyBgVG9Qcm9wZXJ0eUtleWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvcHJvcGVydHlrZXlcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBrZXkgPSB0b1ByaW1pdGl2ZShhcmd1bWVudCwgJ3N0cmluZycpO1xuICByZXR1cm4gaXNTeW1ib2woa2V5KSA/IGtleSA6IGtleSArICcnO1xufTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXkuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0LmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciB3ZWxsS25vd25TeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC5qc1wiKTtcblxudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgdGVzdCA9IHt9O1xuXG50ZXN0W1RPX1NUUklOR19UQUddID0gJ3onO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0cmluZyh0ZXN0KSA9PT0gJ1tvYmplY3Qgel0nO1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydC5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1zdHJpbmcuanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIGNsYXNzb2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvY2xhc3NvZiAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NsYXNzb2YuanNcIik7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoY2xhc3NvZihhcmd1bWVudCkgPT09ICdTeW1ib2wnKSB0aHJvdyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nJyk7XG4gIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbn07XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tc3RyaW5nLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXVpbnQ4LWNsYW1wZWQuanMiOigobW9kdWxlKT0+e2V2YWwoIlxudmFyIHJvdW5kID0gTWF0aC5yb3VuZDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHZhbHVlID0gcm91bmQoaXQpO1xuICByZXR1cm4gdmFsdWUgPCAwID8gMCA6IHZhbHVlID4gMHhGRiA/IDB4RkYgOiB2YWx1ZSAmIDB4RkY7XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXVpbnQ4LWNsYW1wZWQuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdHJ5LW5vZGUtcmVxdWlyZS5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgSVNfTk9ERSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlLmpzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jIC0tIHNhZmVcbiAgICBpZiAoSVNfTk9ERSkgcmV0dXJuIEZ1bmN0aW9uKCdyZXR1cm4gcmVxdWlyZShcIicgKyBuYW1lICsgJ1wiKScpKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdHJ5LW5vZGUtcmVxdWlyZS5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90cnktdG8tc3RyaW5nLmpzIjooKG1vZHVsZSk9PntldmFsKCJcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB0cnkge1xuICAgIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cbn07XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZy5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90eXBlZC1hcnJheS1jb25zdHJ1Y3Rvci5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9leHBvcnQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9leHBvcnQuanNcIik7XG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2dsb2JhbCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dsb2JhbC5qc1wiKTtcbnZhciBjYWxsID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1jYWxsLmpzXCIpO1xudmFyIERFU0NSSVBUT1JTID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanNcIik7XG52YXIgVFlQRURfQVJSQVlTX0NPTlNUUlVDVE9SU19SRVFVSVJFU19XUkFQUEVSUyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy90eXBlZC1hcnJheS1jb25zdHJ1Y3RvcnMtcmVxdWlyZS13cmFwcGVycyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3R5cGVkLWFycmF5LWNvbnN0cnVjdG9ycy1yZXF1aXJlLXdyYXBwZXJzLmpzXCIpO1xudmFyIEFycmF5QnVmZmVyVmlld0NvcmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci12aWV3LWNvcmUuanNcIik7XG52YXIgQXJyYXlCdWZmZXJNb2R1bGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLmpzXCIpO1xudmFyIGFuSW5zdGFuY2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hbi1pbnN0YW5jZS5qc1wiKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvci5qc1wiKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5LmpzXCIpO1xudmFyIGlzSW50ZWdyYWxOdW1iZXIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaXMtaW50ZWdyYWwtbnVtYmVyICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtaW50ZWdyYWwtbnVtYmVyLmpzXCIpO1xudmFyIHRvTGVuZ3RoID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWxlbmd0aC5qc1wiKTtcbnZhciB0b0luZGV4ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3RvLWluZGV4ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXguanNcIik7XG52YXIgdG9PZmZzZXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvdG8tb2Zmc2V0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2Zmc2V0LmpzXCIpO1xudmFyIHRvVWludDhDbGFtcGVkID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3RvLXVpbnQ4LWNsYW1wZWQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by11aW50OC1jbGFtcGVkLmpzXCIpO1xudmFyIHRvUHJvcGVydHlLZXkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzXCIpO1xudmFyIGhhc093biA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qc1wiKTtcbnZhciBjbGFzc29mID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2NsYXNzb2YgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jbGFzc29mLmpzXCIpO1xudmFyIGlzT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2lzLW9iamVjdCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qc1wiKTtcbnZhciBpc1N5bWJvbCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pcy1zeW1ib2wgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1zeW1ib2wuanNcIik7XG52YXIgY3JlYXRlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtY3JlYXRlLmpzXCIpO1xudmFyIGlzUHJvdG90eXBlT2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZiAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanNcIik7XG52YXIgc2V0UHJvdG90eXBlT2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZi5qc1wiKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gKF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzXCIpLmYpO1xudmFyIHR5cGVkQXJyYXlGcm9tID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3R5cGVkLWFycmF5LWZyb20gKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90eXBlZC1hcnJheS1mcm9tLmpzXCIpO1xudmFyIGZvckVhY2ggPSAoX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbiAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbi5qc1wiKS5mb3JFYWNoKTtcbnZhciBzZXRTcGVjaWVzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3NldC1zcGVjaWVzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LXNwZWNpZXMuanNcIik7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvciAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3Nvci5qc1wiKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eS5qc1wiKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanNcIik7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlLmpzXCIpO1xudmFyIGluaGVyaXRJZlJlcXVpcmVkID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2luaGVyaXQtaWYtcmVxdWlyZWQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmhlcml0LWlmLXJlcXVpcmVkLmpzXCIpO1xuXG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0O1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZW5mb3JjZTtcbnZhciBuYXRpdmVEZWZpbmVQcm9wZXJ0eSA9IGRlZmluZVByb3BlcnR5TW9kdWxlLmY7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG52YXIgUmFuZ2VFcnJvciA9IGdsb2JhbC5SYW5nZUVycm9yO1xudmFyIEFycmF5QnVmZmVyID0gQXJyYXlCdWZmZXJNb2R1bGUuQXJyYXlCdWZmZXI7XG52YXIgQXJyYXlCdWZmZXJQcm90b3R5cGUgPSBBcnJheUJ1ZmZlci5wcm90b3R5cGU7XG52YXIgRGF0YVZpZXcgPSBBcnJheUJ1ZmZlck1vZHVsZS5EYXRhVmlldztcbnZhciBOQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5OQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTO1xudmFyIFRZUEVEX0FSUkFZX1RBRyA9IEFycmF5QnVmZmVyVmlld0NvcmUuVFlQRURfQVJSQVlfVEFHO1xudmFyIFR5cGVkQXJyYXkgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLlR5cGVkQXJyYXk7XG52YXIgVHlwZWRBcnJheVByb3RvdHlwZSA9IEFycmF5QnVmZmVyVmlld0NvcmUuVHlwZWRBcnJheVByb3RvdHlwZTtcbnZhciBhVHlwZWRBcnJheUNvbnN0cnVjdG9yID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheUNvbnN0cnVjdG9yO1xudmFyIGlzVHlwZWRBcnJheSA9IEFycmF5QnVmZmVyVmlld0NvcmUuaXNUeXBlZEFycmF5O1xudmFyIEJZVEVTX1BFUl9FTEVNRU5UID0gJ0JZVEVTX1BFUl9FTEVNRU5UJztcbnZhciBXUk9OR19MRU5HVEggPSAnV3JvbmcgbGVuZ3RoJztcblxudmFyIGZyb21MaXN0ID0gZnVuY3Rpb24gKEMsIGxpc3QpIHtcbiAgYVR5cGVkQXJyYXlDb25zdHJ1Y3RvcihDKTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICB2YXIgcmVzdWx0ID0gbmV3IEMobGVuZ3RoKTtcbiAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSByZXN1bHRbaW5kZXhdID0gbGlzdFtpbmRleCsrXTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbnZhciBhZGRHZXR0ZXIgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoaXQsIGtleSwge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpW2tleV07XG4gICAgfVxuICB9KTtcbn07XG5cbnZhciBpc0FycmF5QnVmZmVyID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBrbGFzcztcbiAgcmV0dXJuIGlzUHJvdG90eXBlT2YoQXJyYXlCdWZmZXJQcm90b3R5cGUsIGl0KSB8fCAoa2xhc3MgPSBjbGFzc29mKGl0KSkgPT0gJ0FycmF5QnVmZmVyJyB8fCBrbGFzcyA9PSAnU2hhcmVkQXJyYXlCdWZmZXInO1xufTtcblxudmFyIGlzVHlwZWRBcnJheUluZGV4ID0gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7XG4gIHJldHVybiBpc1R5cGVkQXJyYXkodGFyZ2V0KVxuICAgICYmICFpc1N5bWJvbChrZXkpXG4gICAgJiYga2V5IGluIHRhcmdldFxuICAgICYmIGlzSW50ZWdyYWxOdW1iZXIoK2tleSlcbiAgICAmJiBrZXkgPj0gMDtcbn07XG5cbnZhciB3cmFwcGVkR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSB7XG4gIGtleSA9IHRvUHJvcGVydHlLZXkoa2V5KTtcbiAgcmV0dXJuIGlzVHlwZWRBcnJheUluZGV4KHRhcmdldCwga2V5KVxuICAgID8gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDIsIHRhcmdldFtrZXldKVxuICAgIDogbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KTtcbn07XG5cbnZhciB3cmFwcGVkRGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZGVzY3JpcHRvcikge1xuICBrZXkgPSB0b1Byb3BlcnR5S2V5KGtleSk7XG4gIGlmIChpc1R5cGVkQXJyYXlJbmRleCh0YXJnZXQsIGtleSlcbiAgICAmJiBpc09iamVjdChkZXNjcmlwdG9yKVxuICAgICYmIGhhc093bihkZXNjcmlwdG9yLCAndmFsdWUnKVxuICAgICYmICFoYXNPd24oZGVzY3JpcHRvciwgJ2dldCcpXG4gICAgJiYgIWhhc093bihkZXNjcmlwdG9yLCAnc2V0JylcbiAgICAvLyBUT0RPOiBhZGQgdmFsaWRhdGlvbiBkZXNjcmlwdG9yIHcvbyBjYWxsaW5nIGFjY2Vzc29yc1xuICAgICYmICFkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZVxuICAgICYmICghaGFzT3duKGRlc2NyaXB0b3IsICd3cml0YWJsZScpIHx8IGRlc2NyaXB0b3Iud3JpdGFibGUpXG4gICAgJiYgKCFoYXNPd24oZGVzY3JpcHRvciwgJ2VudW1lcmFibGUnKSB8fCBkZXNjcmlwdG9yLmVudW1lcmFibGUpXG4gICkge1xuICAgIHRhcmdldFtrZXldID0gZGVzY3JpcHRvci52YWx1ZTtcbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9IHJldHVybiBuYXRpdmVEZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZGVzY3JpcHRvcik7XG59O1xuXG5pZiAoREVTQ1JJUFRPUlMpIHtcbiAgaWYgKCFOQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTKSB7XG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmYgPSB3cmFwcGVkR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICAgIGRlZmluZVByb3BlcnR5TW9kdWxlLmYgPSB3cmFwcGVkRGVmaW5lUHJvcGVydHk7XG4gICAgYWRkR2V0dGVyKFR5cGVkQXJyYXlQcm90b3R5cGUsICdidWZmZXInKTtcbiAgICBhZGRHZXR0ZXIoVHlwZWRBcnJheVByb3RvdHlwZSwgJ2J5dGVPZmZzZXQnKTtcbiAgICBhZGRHZXR0ZXIoVHlwZWRBcnJheVByb3RvdHlwZSwgJ2J5dGVMZW5ndGgnKTtcbiAgICBhZGRHZXR0ZXIoVHlwZWRBcnJheVByb3RvdHlwZSwgJ2xlbmd0aCcpO1xuICB9XG5cbiAgJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1MgfSwge1xuICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogd3JhcHBlZEdldE93blByb3BlcnR5RGVzY3JpcHRvcixcbiAgICBkZWZpbmVQcm9wZXJ0eTogd3JhcHBlZERlZmluZVByb3BlcnR5XG4gIH0pO1xuXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFRZUEUsIHdyYXBwZXIsIENMQU1QRUQpIHtcbiAgICB2YXIgQllURVMgPSBUWVBFLm1hdGNoKC9cXGQrLylbMF0gLyA4O1xuICAgIHZhciBDT05TVFJVQ1RPUl9OQU1FID0gVFlQRSArIChDTEFNUEVEID8gJ0NsYW1wZWQnIDogJycpICsgJ0FycmF5JztcbiAgICB2YXIgR0VUVEVSID0gJ2dldCcgKyBUWVBFO1xuICAgIHZhciBTRVRURVIgPSAnc2V0JyArIFRZUEU7XG4gICAgdmFyIE5hdGl2ZVR5cGVkQXJyYXlDb25zdHJ1Y3RvciA9IGdsb2JhbFtDT05TVFJVQ1RPUl9OQU1FXTtcbiAgICB2YXIgVHlwZWRBcnJheUNvbnN0cnVjdG9yID0gTmF0aXZlVHlwZWRBcnJheUNvbnN0cnVjdG9yO1xuICAgIHZhciBUeXBlZEFycmF5Q29uc3RydWN0b3JQcm90b3R5cGUgPSBUeXBlZEFycmF5Q29uc3RydWN0b3IgJiYgVHlwZWRBcnJheUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgICB2YXIgZXhwb3J0ZWQgPSB7fTtcblxuICAgIHZhciBnZXR0ZXIgPSBmdW5jdGlvbiAodGhhdCwgaW5kZXgpIHtcbiAgICAgIHZhciBkYXRhID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgIHJldHVybiBkYXRhLnZpZXdbR0VUVEVSXShpbmRleCAqIEJZVEVTICsgZGF0YS5ieXRlT2Zmc2V0LCB0cnVlKTtcbiAgICB9O1xuXG4gICAgdmFyIHNldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCwgdmFsdWUpIHtcbiAgICAgIHZhciBkYXRhID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgIGRhdGEudmlld1tTRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLmJ5dGVPZmZzZXQsIENMQU1QRUQgPyB0b1VpbnQ4Q2xhbXBlZCh2YWx1ZSkgOiB2YWx1ZSwgdHJ1ZSk7XG4gICAgfTtcblxuICAgIHZhciBhZGRFbGVtZW50ID0gZnVuY3Rpb24gKHRoYXQsIGluZGV4KSB7XG4gICAgICBuYXRpdmVEZWZpbmVQcm9wZXJ0eSh0aGF0LCBpbmRleCwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0dGVyKHRoaXMsIGluZGV4KTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gc2V0dGVyKHRoaXMsIGluZGV4LCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBpZiAoIU5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1MpIHtcbiAgICAgIFR5cGVkQXJyYXlDb25zdHJ1Y3RvciA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsIG9mZnNldCwgJGxlbmd0aCkge1xuICAgICAgICBhbkluc3RhbmNlKHRoYXQsIFR5cGVkQXJyYXlDb25zdHJ1Y3RvclByb3RvdHlwZSk7XG4gICAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICAgIHZhciBieXRlT2Zmc2V0ID0gMDtcbiAgICAgICAgdmFyIGJ1ZmZlciwgYnl0ZUxlbmd0aCwgbGVuZ3RoO1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGRhdGEpKSB7XG4gICAgICAgICAgbGVuZ3RoID0gdG9JbmRleChkYXRhKTtcbiAgICAgICAgICBieXRlTGVuZ3RoID0gbGVuZ3RoICogQllURVM7XG4gICAgICAgICAgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKGJ5dGVMZW5ndGgpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQXJyYXlCdWZmZXIoZGF0YSkpIHtcbiAgICAgICAgICBidWZmZXIgPSBkYXRhO1xuICAgICAgICAgIGJ5dGVPZmZzZXQgPSB0b09mZnNldChvZmZzZXQsIEJZVEVTKTtcbiAgICAgICAgICB2YXIgJGxlbiA9IGRhdGEuYnl0ZUxlbmd0aDtcbiAgICAgICAgICBpZiAoJGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoJGxlbiAlIEJZVEVTKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gJGxlbiAtIGJ5dGVPZmZzZXQ7XG4gICAgICAgICAgICBpZiAoYnl0ZUxlbmd0aCA8IDApIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnl0ZUxlbmd0aCA9IHRvTGVuZ3RoKCRsZW5ndGgpICogQllURVM7XG4gICAgICAgICAgICBpZiAoYnl0ZUxlbmd0aCArIGJ5dGVPZmZzZXQgPiAkbGVuKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxlbmd0aCA9IGJ5dGVMZW5ndGggLyBCWVRFUztcbiAgICAgICAgfSBlbHNlIGlmIChpc1R5cGVkQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICByZXR1cm4gZnJvbUxpc3QoVHlwZWRBcnJheUNvbnN0cnVjdG9yLCBkYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gY2FsbCh0eXBlZEFycmF5RnJvbSwgVHlwZWRBcnJheUNvbnN0cnVjdG9yLCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBzZXRJbnRlcm5hbFN0YXRlKHRoYXQsIHtcbiAgICAgICAgICBidWZmZXI6IGJ1ZmZlcixcbiAgICAgICAgICBieXRlT2Zmc2V0OiBieXRlT2Zmc2V0LFxuICAgICAgICAgIGJ5dGVMZW5ndGg6IGJ5dGVMZW5ndGgsXG4gICAgICAgICAgbGVuZ3RoOiBsZW5ndGgsXG4gICAgICAgICAgdmlldzogbmV3IERhdGFWaWV3KGJ1ZmZlcilcbiAgICAgICAgfSk7XG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgYWRkRWxlbWVudCh0aGF0LCBpbmRleCsrKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoc2V0UHJvdG90eXBlT2YpIHNldFByb3RvdHlwZU9mKFR5cGVkQXJyYXlDb25zdHJ1Y3RvciwgVHlwZWRBcnJheSk7XG4gICAgICBUeXBlZEFycmF5Q29uc3RydWN0b3JQcm90b3R5cGUgPSBUeXBlZEFycmF5Q29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKFR5cGVkQXJyYXlQcm90b3R5cGUpO1xuICAgIH0gZWxzZSBpZiAoVFlQRURfQVJSQVlTX0NPTlNUUlVDVE9SU19SRVFVSVJFU19XUkFQUEVSUykge1xuICAgICAgVHlwZWRBcnJheUNvbnN0cnVjdG9yID0gd3JhcHBlcihmdW5jdGlvbiAoZHVtbXksIGRhdGEsIHR5cGVkQXJyYXlPZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZShkdW1teSwgVHlwZWRBcnJheUNvbnN0cnVjdG9yUHJvdG90eXBlKTtcbiAgICAgICAgcmV0dXJuIGluaGVyaXRJZlJlcXVpcmVkKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoIWlzT2JqZWN0KGRhdGEpKSByZXR1cm4gbmV3IE5hdGl2ZVR5cGVkQXJyYXlDb25zdHJ1Y3Rvcih0b0luZGV4KGRhdGEpKTtcbiAgICAgICAgICBpZiAoaXNBcnJheUJ1ZmZlcihkYXRhKSkgcmV0dXJuICRsZW5ndGggIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBuZXcgTmF0aXZlVHlwZWRBcnJheUNvbnN0cnVjdG9yKGRhdGEsIHRvT2Zmc2V0KHR5cGVkQXJyYXlPZmZzZXQsIEJZVEVTKSwgJGxlbmd0aClcbiAgICAgICAgICAgIDogdHlwZWRBcnJheU9mZnNldCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgID8gbmV3IE5hdGl2ZVR5cGVkQXJyYXlDb25zdHJ1Y3RvcihkYXRhLCB0b09mZnNldCh0eXBlZEFycmF5T2Zmc2V0LCBCWVRFUykpXG4gICAgICAgICAgICAgIDogbmV3IE5hdGl2ZVR5cGVkQXJyYXlDb25zdHJ1Y3RvcihkYXRhKTtcbiAgICAgICAgICBpZiAoaXNUeXBlZEFycmF5KGRhdGEpKSByZXR1cm4gZnJvbUxpc3QoVHlwZWRBcnJheUNvbnN0cnVjdG9yLCBkYXRhKTtcbiAgICAgICAgICByZXR1cm4gY2FsbCh0eXBlZEFycmF5RnJvbSwgVHlwZWRBcnJheUNvbnN0cnVjdG9yLCBkYXRhKTtcbiAgICAgICAgfSgpLCBkdW1teSwgVHlwZWRBcnJheUNvbnN0cnVjdG9yKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoc2V0UHJvdG90eXBlT2YpIHNldFByb3RvdHlwZU9mKFR5cGVkQXJyYXlDb25zdHJ1Y3RvciwgVHlwZWRBcnJheSk7XG4gICAgICBmb3JFYWNoKGdldE93blByb3BlcnR5TmFtZXMoTmF0aXZlVHlwZWRBcnJheUNvbnN0cnVjdG9yKSwgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZiAoIShrZXkgaW4gVHlwZWRBcnJheUNvbnN0cnVjdG9yKSkge1xuICAgICAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShUeXBlZEFycmF5Q29uc3RydWN0b3IsIGtleSwgTmF0aXZlVHlwZWRBcnJheUNvbnN0cnVjdG9yW2tleV0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIFR5cGVkQXJyYXlDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBUeXBlZEFycmF5Q29uc3RydWN0b3JQcm90b3R5cGU7XG4gICAgfVxuXG4gICAgaWYgKFR5cGVkQXJyYXlDb25zdHJ1Y3RvclByb3RvdHlwZS5jb25zdHJ1Y3RvciAhPT0gVHlwZWRBcnJheUNvbnN0cnVjdG9yKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoVHlwZWRBcnJheUNvbnN0cnVjdG9yUHJvdG90eXBlLCAnY29uc3RydWN0b3InLCBUeXBlZEFycmF5Q29uc3RydWN0b3IpO1xuICAgIH1cblxuICAgIGVuZm9yY2VJbnRlcm5hbFN0YXRlKFR5cGVkQXJyYXlDb25zdHJ1Y3RvclByb3RvdHlwZSkuVHlwZWRBcnJheUNvbnN0cnVjdG9yID0gVHlwZWRBcnJheUNvbnN0cnVjdG9yO1xuXG4gICAgaWYgKFRZUEVEX0FSUkFZX1RBRykge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KFR5cGVkQXJyYXlDb25zdHJ1Y3RvclByb3RvdHlwZSwgVFlQRURfQVJSQVlfVEFHLCBDT05TVFJVQ1RPUl9OQU1FKTtcbiAgICB9XG5cbiAgICB2YXIgRk9SQ0VEID0gVHlwZWRBcnJheUNvbnN0cnVjdG9yICE9IE5hdGl2ZVR5cGVkQXJyYXlDb25zdHJ1Y3RvcjtcblxuICAgIGV4cG9ydGVkW0NPTlNUUlVDVE9SX05BTUVdID0gVHlwZWRBcnJheUNvbnN0cnVjdG9yO1xuXG4gICAgJCh7IGdsb2JhbDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIGZvcmNlZDogRk9SQ0VELCBzaGFtOiAhTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyB9LCBleHBvcnRlZCk7XG5cbiAgICBpZiAoIShCWVRFU19QRVJfRUxFTUVOVCBpbiBUeXBlZEFycmF5Q29uc3RydWN0b3IpKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoVHlwZWRBcnJheUNvbnN0cnVjdG9yLCBCWVRFU19QRVJfRUxFTUVOVCwgQllURVMpO1xuICAgIH1cblxuICAgIGlmICghKEJZVEVTX1BFUl9FTEVNRU5UIGluIFR5cGVkQXJyYXlDb25zdHJ1Y3RvclByb3RvdHlwZSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShUeXBlZEFycmF5Q29uc3RydWN0b3JQcm90b3R5cGUsIEJZVEVTX1BFUl9FTEVNRU5ULCBCWVRFUyk7XG4gICAgfVxuXG4gICAgc2V0U3BlY2llcyhDT05TVFJVQ1RPUl9OQU1FKTtcbiAgfTtcbn0gZWxzZSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90eXBlZC1hcnJheS1jb25zdHJ1Y3Rvci5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90eXBlZC1hcnJheS1jb25zdHJ1Y3RvcnMtcmVxdWlyZS13cmFwcGVycy5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXcgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZ2xvYmFsICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2xvYmFsLmpzXCIpO1xudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2ZhaWxzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZmFpbHMuanNcIik7XG52YXIgY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbiAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbi5qc1wiKTtcbnZhciBOQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTID0gKF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZS5qc1wiKS5OQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTKTtcblxudmFyIEFycmF5QnVmZmVyID0gZ2xvYmFsLkFycmF5QnVmZmVyO1xudmFyIEludDhBcnJheSA9IGdsb2JhbC5JbnQ4QXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gIU5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1MgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgSW50OEFycmF5KDEpO1xufSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgbmV3IEludDhBcnJheSgtMSk7XG59KSB8fCAhY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkge1xuICBuZXcgSW50OEFycmF5KCk7XG4gIG5ldyBJbnQ4QXJyYXkobnVsbCk7XG4gIG5ldyBJbnQ4QXJyYXkoMS41KTtcbiAgbmV3IEludDhBcnJheShpdGVyYWJsZSk7XG59LCB0cnVlKSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIFNhZmFyaSAoMTErKSBidWcgLSBhIHJlYXNvbiB3aHkgZXZlbiBTYWZhcmkgMTMgc2hvdWxkIGxvYWQgYSB0eXBlZCBhcnJheSBwb2x5ZmlsbFxuICByZXR1cm4gbmV3IEludDhBcnJheShuZXcgQXJyYXlCdWZmZXIoMiksIDEsIHVuZGVmaW5lZCkubGVuZ3RoICE9PSAxO1xufSk7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdHlwZWQtYXJyYXktY29uc3RydWN0b3JzLXJlcXVpcmUtd3JhcHBlcnMuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdHlwZWQtYXJyYXktZnJvbS5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgYmluZCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQuanNcIik7XG52YXIgY2FsbCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbC5qc1wiKTtcbnZhciBhQ29uc3RydWN0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvYS1jb25zdHJ1Y3RvciAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2EtY29uc3RydWN0b3IuanNcIik7XG52YXIgdG9PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvdG8tb2JqZWN0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzXCIpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanNcIik7XG52YXIgZ2V0SXRlcmF0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLmpzXCIpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzXCIpO1xudmFyIGlzQXJyYXlJdGVyYXRvck1ldGhvZCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QuanNcIik7XG52YXIgaXNCaWdJbnRBcnJheSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pcy1iaWctaW50LWFycmF5ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtYmlnLWludC1hcnJheS5qc1wiKTtcbnZhciBhVHlwZWRBcnJheUNvbnN0cnVjdG9yID0gKF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZS5qc1wiKS5hVHlwZWRBcnJheUNvbnN0cnVjdG9yKTtcbnZhciB0b0JpZ0ludCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy90by1iaWctaW50ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tYmlnLWludC5qc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmcm9tKHNvdXJjZSAvKiAsIG1hcGZuLCB0aGlzQXJnICovKSB7XG4gIHZhciBDID0gYUNvbnN0cnVjdG9yKHRoaXMpO1xuICB2YXIgTyA9IHRvT2JqZWN0KHNvdXJjZSk7XG4gIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgbWFwZm4gPSBhcmd1bWVudHNMZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICB2YXIgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQ7XG4gIHZhciBpdGVyYXRvck1ldGhvZCA9IGdldEl0ZXJhdG9yTWV0aG9kKE8pO1xuICB2YXIgaSwgbGVuZ3RoLCByZXN1bHQsIHRoaXNJc0JpZ0ludEFycmF5LCB2YWx1ZSwgc3RlcCwgaXRlcmF0b3IsIG5leHQ7XG4gIGlmIChpdGVyYXRvck1ldGhvZCAmJiAhaXNBcnJheUl0ZXJhdG9yTWV0aG9kKGl0ZXJhdG9yTWV0aG9kKSkge1xuICAgIGl0ZXJhdG9yID0gZ2V0SXRlcmF0b3IoTywgaXRlcmF0b3JNZXRob2QpO1xuICAgIG5leHQgPSBpdGVyYXRvci5uZXh0O1xuICAgIE8gPSBbXTtcbiAgICB3aGlsZSAoIShzdGVwID0gY2FsbChuZXh0LCBpdGVyYXRvcikpLmRvbmUpIHtcbiAgICAgIE8ucHVzaChzdGVwLnZhbHVlKTtcbiAgICB9XG4gIH1cbiAgaWYgKG1hcHBpbmcgJiYgYXJndW1lbnRzTGVuZ3RoID4gMikge1xuICAgIG1hcGZuID0gYmluZChtYXBmbiwgYXJndW1lbnRzWzJdKTtcbiAgfVxuICBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgcmVzdWx0ID0gbmV3IChhVHlwZWRBcnJheUNvbnN0cnVjdG9yKEMpKShsZW5ndGgpO1xuICB0aGlzSXNCaWdJbnRBcnJheSA9IGlzQmlnSW50QXJyYXkocmVzdWx0KTtcbiAgZm9yIChpID0gMDsgbGVuZ3RoID4gaTsgaSsrKSB7XG4gICAgdmFsdWUgPSBtYXBwaW5nID8gbWFwZm4oT1tpXSwgaSkgOiBPW2ldO1xuICAgIC8vIEZGMzAtIHR5cGVkIGFycmF5cyBkb2Vzbid0IHByb3Blcmx5IGNvbnZlcnQgb2JqZWN0cyB0byB0eXBlZCBhcnJheSB2YWx1ZXNcbiAgICByZXN1bHRbaV0gPSB0aGlzSXNCaWdJbnRBcnJheSA/IHRvQmlnSW50KHZhbHVlKSA6ICt2YWx1ZTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90eXBlZC1hcnJheS1mcm9tLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgdW5jdXJyeVRoaXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzXCIpO1xuXG52YXIgaWQgPSAwO1xudmFyIHBvc3RmaXggPSBNYXRoLnJhbmRvbSgpO1xudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiAnU3ltYm9sKCcgKyAoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSkgKyAnKV8nICsgdG9TdHJpbmcoKytpZCArIHBvc3RmaXgsIDM2KTtcbn07XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdWlkLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VybC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2ZhaWxzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZmFpbHMuanNcIik7XG52YXIgd2VsbEtub3duU3ltYm9sID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wuanNcIik7XG52YXIgREVTQ1JJUFRPUlMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZXNjcmlwdG9ycy5qc1wiKTtcbnZhciBJU19QVVJFID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2lzLXB1cmUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1wdXJlLmpzXCIpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vcmVsYXRpdmUtdXJsLXN0eWxlIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHZhciB1cmwgPSBuZXcgVVJMKCdiP2E9MSZiPTImYz0zJywgJ2h0dHA6Ly9hJyk7XG4gIHZhciBwYXJhbXMgPSB1cmwuc2VhcmNoUGFyYW1zO1xuICB2YXIgcGFyYW1zMiA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoJ2E9MSZhPTImYj0zJyk7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgdXJsLnBhdGhuYW1lID0gJ2MlMjBkJztcbiAgcGFyYW1zLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICBwYXJhbXNbJ2RlbGV0ZSddKCdiJyk7XG4gICAgcmVzdWx0ICs9IGtleSArIHZhbHVlO1xuICB9KTtcbiAgcGFyYW1zMlsnZGVsZXRlJ10oJ2EnLCAyKTtcbiAgLy8gYHVuZGVmaW5lZGAgY2FzZSBpcyBhIENocm9taXVtIDExNyBidWdcbiAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MTQyMjJcbiAgcGFyYW1zMlsnZGVsZXRlJ10oJ2InLCB1bmRlZmluZWQpO1xuICByZXR1cm4gKElTX1BVUkUgJiYgKCF1cmwudG9KU09OIHx8ICFwYXJhbXMyLmhhcygnYScsIDEpIHx8IHBhcmFtczIuaGFzKCdhJywgMikgfHwgIXBhcmFtczIuaGFzKCdhJywgdW5kZWZpbmVkKSB8fCBwYXJhbXMyLmhhcygnYicpKSlcbiAgICB8fCAoIXBhcmFtcy5zaXplICYmIChJU19QVVJFIHx8ICFERVNDUklQVE9SUykpXG4gICAgfHwgIXBhcmFtcy5zb3J0XG4gICAgfHwgdXJsLmhyZWYgIT09ICdodHRwOi8vYS9jJTIwZD9hPTEmYz0zJ1xuICAgIHx8IHBhcmFtcy5nZXQoJ2MnKSAhPT0gJzMnXG4gICAgfHwgU3RyaW5nKG5ldyBVUkxTZWFyY2hQYXJhbXMoJz9hPTEnKSkgIT09ICdhPTEnXG4gICAgfHwgIXBhcmFtc1tJVEVSQVRPUl1cbiAgICAvLyB0aHJvd3MgaW4gRWRnZVxuICAgIHx8IG5ldyBVUkwoJ2h0dHBzOi8vYUBiJykudXNlcm5hbWUgIT09ICdhJ1xuICAgIHx8IG5ldyBVUkxTZWFyY2hQYXJhbXMobmV3IFVSTFNlYXJjaFBhcmFtcygnYT1iJykpLmdldCgnYScpICE9PSAnYidcbiAgICAvLyBub3QgcHVueWNvZGVkIGluIEVkZ2VcbiAgICB8fCBuZXcgVVJMKCdodHRwOi8v0YLQtdGB0YInKS5ob3N0ICE9PSAneG4tLWUxYXliYydcbiAgICAvLyBub3QgZXNjYXBlZCBpbiBDaHJvbWUgNjItXG4gICAgfHwgbmV3IFVSTCgnaHR0cDovL2Ej0LEnKS5oYXNoICE9PSAnIyVEMCVCMSdcbiAgICAvLyBmYWlscyBpbiBDaHJvbWUgNjYtXG4gICAgfHwgcmVzdWx0ICE9PSAnYTFjMydcbiAgICAvLyB0aHJvd3MgaW4gU2FmYXJpXG4gICAgfHwgbmV3IFVSTCgnaHR0cDovL3gnLCB1bmRlZmluZWQpLmhvc3QgIT09ICd4Jztcbn0pO1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VybC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQuanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxuLyogZXNsaW50LWRpc2FibGUgZXMvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgTkFUSVZFX1NZTUJPTCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbi5qc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfU1lNQk9MXG4gICYmICFTeW1ib2wuc2hhbVxuICAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnO1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnLmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBERVNDUklQVE9SUyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9kZXNjcmlwdG9ycyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Rlc2NyaXB0b3JzLmpzXCIpO1xudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2ZhaWxzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZmFpbHMuanNcIik7XG5cbi8vIFY4IH4gQ2hyb21lIDM2LVxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzMzNFxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sICdwcm90b3R5cGUnLCB7XG4gICAgdmFsdWU6IDQyLFxuICAgIHdyaXRhYmxlOiBmYWxzZVxuICB9KS5wcm90b3R5cGUgIT0gNDI7XG59KTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92YWxpZGF0ZS1hcmd1bWVudHMtbGVuZ3RoLmpzIjooKG1vZHVsZSk9PntldmFsKCJcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChwYXNzZWQsIHJlcXVpcmVkKSB7XG4gIGlmIChwYXNzZWQgPCByZXF1aXJlZCkgdGhyb3cgJFR5cGVFcnJvcignTm90IGVub3VnaCBhcmd1bWVudHMnKTtcbiAgcmV0dXJuIHBhc3NlZDtcbn07XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdmFsaWRhdGUtYXJndW1lbnRzLWxlbmd0aC5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9nbG9iYWwgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwuanNcIik7XG52YXIgaXNDYWxsYWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pcy1jYWxsYWJsZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWNhbGxhYmxlLmpzXCIpO1xuXG52YXIgV2Vha01hcCA9IGdsb2JhbC5XZWFrTWFwO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQ2FsbGFibGUoV2Vha01hcCkgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhXZWFrTWFwKSk7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2Vhay1tYXAtYmFzaWMtZGV0ZWN0aW9uLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZ2xvYmFsICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2xvYmFsLmpzXCIpO1xudmFyIHNoYXJlZCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9zaGFyZWQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQuanNcIik7XG52YXIgaGFzT3duID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5LmpzXCIpO1xudmFyIHVpZCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy91aWQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91aWQuanNcIik7XG52YXIgTkFUSVZFX1NZTUJPTCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9zeW1ib2wtY29uc3RydWN0b3ItZGV0ZWN0aW9uICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbi5qc1wiKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VzZS1zeW1ib2wtYXMtdWlkLmpzXCIpO1xuXG52YXIgU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBXZWxsS25vd25TeW1ib2xzU3RvcmUgPSBzaGFyZWQoJ3drcycpO1xudmFyIGNyZWF0ZVdlbGxLbm93blN5bWJvbCA9IFVTRV9TWU1CT0xfQVNfVUlEID8gU3ltYm9sWydmb3InXSB8fCBTeW1ib2wgOiBTeW1ib2wgJiYgU3ltYm9sLndpdGhvdXRTZXR0ZXIgfHwgdWlkO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGlmICghaGFzT3duKFdlbGxLbm93blN5bWJvbHNTdG9yZSwgbmFtZSkpIHtcbiAgICBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV0gPSBOQVRJVkVfU1lNQk9MICYmIGhhc093bihTeW1ib2wsIG5hbWUpXG4gICAgICA/IFN5bWJvbFtuYW1lXVxuICAgICAgOiBjcmVhdGVXZWxsS25vd25TeW1ib2woJ1N5bWJvbC4nICsgbmFtZSk7XG4gIH0gcmV0dXJuIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXTtcbn07XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2hpdGVzcGFjZXMuanMiOigobW9kdWxlKT0+e2V2YWwoIlxuLy8gYSBzdHJpbmcgb2YgYWxsIHZhbGlkIHVuaWNvZGUgd2hpdGVzcGFjZXNcbm1vZHVsZS5leHBvcnRzID0gJ1xcdTAwMDlcXHUwMDBBXFx1MDAwQlxcdTAwMENcXHUwMDBEXFx1MDAyMFxcdTAwQTBcXHUxNjgwXFx1MjAwMFxcdTIwMDFcXHUyMDAyJyArXG4gICdcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwQVxcdTIwMkZcXHUyMDVGXFx1MzAwMFxcdTIwMjhcXHUyMDI5XFx1RkVGRic7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2hpdGVzcGFjZXMuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd3JhcC1lcnJvci1jb25zdHJ1Y3Rvci13aXRoLWNhdXNlLmpzIjooKG1vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBnZXRCdWlsdEluID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbiAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qc1wiKTtcbnZhciBoYXNPd24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkuanNcIik7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eS5qc1wiKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mLmpzXCIpO1xudmFyIHNldFByb3RvdHlwZU9mID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YuanNcIik7XG52YXIgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb3B5LWNvbnN0cnVjdG9yLXByb3BlcnRpZXMuanNcIik7XG52YXIgcHJveHlBY2Nlc3NvciA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9wcm94eS1hY2Nlc3NvciAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3Byb3h5LWFjY2Vzc29yLmpzXCIpO1xudmFyIGluaGVyaXRJZlJlcXVpcmVkID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2luaGVyaXQtaWYtcmVxdWlyZWQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmhlcml0LWlmLXJlcXVpcmVkLmpzXCIpO1xudmFyIG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL25vcm1hbGl6ZS1zdHJpbmctYXJndW1lbnQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9ub3JtYWxpemUtc3RyaW5nLWFyZ3VtZW50LmpzXCIpO1xudmFyIGluc3RhbGxFcnJvckNhdXNlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2luc3RhbGwtZXJyb3ItY2F1c2UgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnN0YWxsLWVycm9yLWNhdXNlLmpzXCIpO1xudmFyIGluc3RhbGxFcnJvclN0YWNrID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWluc3RhbGwgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsLmpzXCIpO1xudmFyIERFU0NSSVBUT1JTID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanNcIik7XG52YXIgSVNfUFVSRSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pcy1wdXJlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtcHVyZS5qc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoRlVMTF9OQU1FLCB3cmFwcGVyLCBGT1JDRUQsIElTX0FHR1JFR0FURV9FUlJPUikge1xuICB2YXIgU1RBQ0tfVFJBQ0VfTElNSVQgPSAnc3RhY2tUcmFjZUxpbWl0JztcbiAgdmFyIE9QVElPTlNfUE9TSVRJT04gPSBJU19BR0dSRUdBVEVfRVJST1IgPyAyIDogMTtcbiAgdmFyIHBhdGggPSBGVUxMX05BTUUuc3BsaXQoJy4nKTtcbiAgdmFyIEVSUk9SX05BTUUgPSBwYXRoW3BhdGgubGVuZ3RoIC0gMV07XG4gIHZhciBPcmlnaW5hbEVycm9yID0gZ2V0QnVpbHRJbi5hcHBseShudWxsLCBwYXRoKTtcblxuICBpZiAoIU9yaWdpbmFsRXJyb3IpIHJldHVybjtcblxuICB2YXIgT3JpZ2luYWxFcnJvclByb3RvdHlwZSA9IE9yaWdpbmFsRXJyb3IucHJvdG90eXBlO1xuXG4gIC8vIFY4IDkuMy0gYnVnIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTEyMDA2XG4gIGlmICghSVNfUFVSRSAmJiBoYXNPd24oT3JpZ2luYWxFcnJvclByb3RvdHlwZSwgJ2NhdXNlJykpIGRlbGV0ZSBPcmlnaW5hbEVycm9yUHJvdG90eXBlLmNhdXNlO1xuXG4gIGlmICghRk9SQ0VEKSByZXR1cm4gT3JpZ2luYWxFcnJvcjtcblxuICB2YXIgQmFzZUVycm9yID0gZ2V0QnVpbHRJbignRXJyb3InKTtcblxuICB2YXIgV3JhcHBlZEVycm9yID0gd3JhcHBlcihmdW5jdGlvbiAoYSwgYikge1xuICAgIHZhciBtZXNzYWdlID0gbm9ybWFsaXplU3RyaW5nQXJndW1lbnQoSVNfQUdHUkVHQVRFX0VSUk9SID8gYiA6IGEsIHVuZGVmaW5lZCk7XG4gICAgdmFyIHJlc3VsdCA9IElTX0FHR1JFR0FURV9FUlJPUiA/IG5ldyBPcmlnaW5hbEVycm9yKGEpIDogbmV3IE9yaWdpbmFsRXJyb3IoKTtcbiAgICBpZiAobWVzc2FnZSAhPT0gdW5kZWZpbmVkKSBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkocmVzdWx0LCAnbWVzc2FnZScsIG1lc3NhZ2UpO1xuICAgIGluc3RhbGxFcnJvclN0YWNrKHJlc3VsdCwgV3JhcHBlZEVycm9yLCByZXN1bHQuc3RhY2ssIDIpO1xuICAgIGlmICh0aGlzICYmIGlzUHJvdG90eXBlT2YoT3JpZ2luYWxFcnJvclByb3RvdHlwZSwgdGhpcykpIGluaGVyaXRJZlJlcXVpcmVkKHJlc3VsdCwgdGhpcywgV3JhcHBlZEVycm9yKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IE9QVElPTlNfUE9TSVRJT04pIGluc3RhbGxFcnJvckNhdXNlKHJlc3VsdCwgYXJndW1lbnRzW09QVElPTlNfUE9TSVRJT05dKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9KTtcblxuICBXcmFwcGVkRXJyb3IucHJvdG90eXBlID0gT3JpZ2luYWxFcnJvclByb3RvdHlwZTtcblxuICBpZiAoRVJST1JfTkFNRSAhPT0gJ0Vycm9yJykge1xuICAgIGlmIChzZXRQcm90b3R5cGVPZikgc2V0UHJvdG90eXBlT2YoV3JhcHBlZEVycm9yLCBCYXNlRXJyb3IpO1xuICAgIGVsc2UgY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyhXcmFwcGVkRXJyb3IsIEJhc2VFcnJvciwgeyBuYW1lOiB0cnVlIH0pO1xuICB9IGVsc2UgaWYgKERFU0NSSVBUT1JTICYmIFNUQUNLX1RSQUNFX0xJTUlUIGluIE9yaWdpbmFsRXJyb3IpIHtcbiAgICBwcm94eUFjY2Vzc29yKFdyYXBwZWRFcnJvciwgT3JpZ2luYWxFcnJvciwgU1RBQ0tfVFJBQ0VfTElNSVQpO1xuICAgIHByb3h5QWNjZXNzb3IoV3JhcHBlZEVycm9yLCBPcmlnaW5hbEVycm9yLCAncHJlcGFyZVN0YWNrVHJhY2UnKTtcbiAgfVxuXG4gIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoV3JhcHBlZEVycm9yLCBPcmlnaW5hbEVycm9yKTtcblxuICBpZiAoIUlTX1BVUkUpIHRyeSB7XG4gICAgLy8gU2FmYXJpIDEzLSBidWc6IFdlYkFzc2VtYmx5IGVycm9ycyBkb2VzIG5vdCBoYXZlIGEgcHJvcGVyIGAubmFtZWBcbiAgICBpZiAoT3JpZ2luYWxFcnJvclByb3RvdHlwZS5uYW1lICE9PSBFUlJPUl9OQU1FKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoT3JpZ2luYWxFcnJvclByb3RvdHlwZSwgJ25hbWUnLCBFUlJPUl9OQU1FKTtcbiAgICB9XG4gICAgT3JpZ2luYWxFcnJvclByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFdyYXBwZWRFcnJvcjtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuXG4gIHJldHVybiBXcmFwcGVkRXJyb3I7XG59O1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dyYXAtZXJyb3ItY29uc3RydWN0b3Itd2l0aC1jYXVzZS5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXktYnVmZmVyLmNvbnN0cnVjdG9yLmpzIjooKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyICQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZXhwb3J0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzXCIpO1xudmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9nbG9iYWwgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwuanNcIik7XG52YXIgYXJyYXlCdWZmZXJNb2R1bGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLmpzXCIpO1xudmFyIHNldFNwZWNpZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvc2V0LXNwZWNpZXMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtc3BlY2llcy5qc1wiKTtcblxudmFyIEFSUkFZX0JVRkZFUiA9ICdBcnJheUJ1ZmZlcic7XG52YXIgQXJyYXlCdWZmZXIgPSBhcnJheUJ1ZmZlck1vZHVsZVtBUlJBWV9CVUZGRVJdO1xudmFyIE5hdGl2ZUFycmF5QnVmZmVyID0gZ2xvYmFsW0FSUkFZX0JVRkZFUl07XG5cbi8vIGBBcnJheUJ1ZmZlcmAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXlidWZmZXItY29uc3RydWN0b3JcbiQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCBmb3JjZWQ6IE5hdGl2ZUFycmF5QnVmZmVyICE9PSBBcnJheUJ1ZmZlciB9LCB7XG4gIEFycmF5QnVmZmVyOiBBcnJheUJ1ZmZlclxufSk7XG5cbnNldFNwZWNpZXMoQVJSQVlfQlVGRkVSKTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXktYnVmZmVyLmNvbnN0cnVjdG9yLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS1idWZmZXIuc2xpY2UuanMiOigoX191bnVzZWRfd2VicGFja19tb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9leHBvcnQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9leHBvcnQuanNcIik7XG52YXIgdW5jdXJyeVRoaXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1jbGF1c2UuanNcIik7XG52YXIgZmFpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZmFpbHMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mYWlscy5qc1wiKTtcbnZhciBBcnJheUJ1ZmZlck1vZHVsZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9hcnJheS1idWZmZXIgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1idWZmZXIuanNcIik7XG52YXIgYW5PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvYW4tb2JqZWN0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYW4tb2JqZWN0LmpzXCIpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4LmpzXCIpO1xudmFyIHRvTGVuZ3RoID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWxlbmd0aC5qc1wiKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvciAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3IuanNcIik7XG5cbnZhciBBcnJheUJ1ZmZlciA9IEFycmF5QnVmZmVyTW9kdWxlLkFycmF5QnVmZmVyO1xudmFyIERhdGFWaWV3ID0gQXJyYXlCdWZmZXJNb2R1bGUuRGF0YVZpZXc7XG52YXIgRGF0YVZpZXdQcm90b3R5cGUgPSBEYXRhVmlldy5wcm90b3R5cGU7XG52YXIgbmF0aXZlQXJyYXlCdWZmZXJTbGljZSA9IHVuY3VycnlUaGlzKEFycmF5QnVmZmVyLnByb3RvdHlwZS5zbGljZSk7XG52YXIgZ2V0VWludDggPSB1bmN1cnJ5VGhpcyhEYXRhVmlld1Byb3RvdHlwZS5nZXRVaW50OCk7XG52YXIgc2V0VWludDggPSB1bmN1cnJ5VGhpcyhEYXRhVmlld1Byb3RvdHlwZS5zZXRVaW50OCk7XG5cbnZhciBJTkNPUlJFQ1RfU0xJQ0UgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhbmV3IEFycmF5QnVmZmVyKDIpLnNsaWNlKDEsIHVuZGVmaW5lZCkuYnl0ZUxlbmd0aDtcbn0pO1xuXG4vLyBgQXJyYXlCdWZmZXIucHJvdG90eXBlLnNsaWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXlidWZmZXIucHJvdG90eXBlLnNsaWNlXG4kKHsgdGFyZ2V0OiAnQXJyYXlCdWZmZXInLCBwcm90bzogdHJ1ZSwgdW5zYWZlOiB0cnVlLCBmb3JjZWQ6IElOQ09SUkVDVF9TTElDRSB9LCB7XG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShzdGFydCwgZW5kKSB7XG4gICAgaWYgKG5hdGl2ZUFycmF5QnVmZmVyU2xpY2UgJiYgZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBuYXRpdmVBcnJheUJ1ZmZlclNsaWNlKGFuT2JqZWN0KHRoaXMpLCBzdGFydCk7IC8vIEZGIGZpeFxuICAgIH1cbiAgICB2YXIgbGVuZ3RoID0gYW5PYmplY3QodGhpcykuYnl0ZUxlbmd0aDtcbiAgICB2YXIgZmlyc3QgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbmd0aCk7XG4gICAgdmFyIGZpbiA9IHRvQWJzb2x1dGVJbmRleChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IGVuZCwgbGVuZ3RoKTtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IChzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgQXJyYXlCdWZmZXIpKSh0b0xlbmd0aChmaW4gLSBmaXJzdCkpO1xuICAgIHZhciB2aWV3U291cmNlID0gbmV3IERhdGFWaWV3KHRoaXMpO1xuICAgIHZhciB2aWV3VGFyZ2V0ID0gbmV3IERhdGFWaWV3KHJlc3VsdCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB3aGlsZSAoZmlyc3QgPCBmaW4pIHtcbiAgICAgIHNldFVpbnQ4KHZpZXdUYXJnZXQsIGluZGV4KyssIGdldFVpbnQ4KHZpZXdTb3VyY2UsIGZpcnN0KyspKTtcbiAgICB9IHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS1idWZmZXIuc2xpY2UuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmF0LmpzIjooKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyICQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZXhwb3J0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzXCIpO1xudmFyIHRvT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3RvLW9iamVjdCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLW9iamVjdC5qc1wiKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlLmpzXCIpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHkuanNcIik7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMuanNcIik7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuYXRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuYXRcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlIH0sIHtcbiAgYXQ6IGZ1bmN0aW9uIGF0KGluZGV4KSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIHJlbGF0aXZlSW5kZXggPSB0b0ludGVnZXJPckluZmluaXR5KGluZGV4KTtcbiAgICB2YXIgayA9IHJlbGF0aXZlSW5kZXggPj0gMCA/IHJlbGF0aXZlSW5kZXggOiBsZW4gKyByZWxhdGl2ZUluZGV4O1xuICAgIHJldHVybiAoayA8IDAgfHwgayA+PSBsZW4pID8gdW5kZWZpbmVkIDogT1trXTtcbiAgfVxufSk7XG5cbmFkZFRvVW5zY29wYWJsZXMoJ2F0Jyk7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmF0LmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5maW5kLWxhc3QtaW5kZXguanMiOigoX191bnVzZWRfd2VicGFja19tb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9leHBvcnQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9leHBvcnQuanNcIik7XG52YXIgJGZpbmRMYXN0SW5kZXggPSAoX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbi1mcm9tLWxhc3QgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24tZnJvbS1sYXN0LmpzXCIpLmZpbmRMYXN0SW5kZXgpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzLmpzXCIpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZpbmRMYXN0SW5kZXhgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZGxhc3RpbmRleFxuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUgfSwge1xuICBmaW5kTGFzdEluZGV4OiBmdW5jdGlvbiBmaW5kTGFzdEluZGV4KGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kTGFzdEluZGV4KHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cbmFkZFRvVW5zY29wYWJsZXMoJ2ZpbmRMYXN0SW5kZXgnKTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmluZC1sYXN0LWluZGV4LmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5maW5kLWxhc3QuanMiOigoX191bnVzZWRfd2VicGFja19tb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9leHBvcnQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9leHBvcnQuanNcIik7XG52YXIgJGZpbmRMYXN0ID0gKF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24tZnJvbS1sYXN0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uLWZyb20tbGFzdC5qc1wiKS5maW5kTGFzdCk7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMuanNcIik7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmluZExhc3RgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZGxhc3RcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlIH0sIHtcbiAgZmluZExhc3Q6IGZ1bmN0aW9uIGZpbmRMYXN0KGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kTGFzdCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuXG5hZGRUb1Vuc2NvcGFibGVzKCdmaW5kTGFzdCcpO1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5maW5kLWxhc3QuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZsYXQtbWFwLmpzIjooKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyICQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZXhwb3J0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzXCIpO1xudmFyIGZsYXR0ZW5JbnRvQXJyYXkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZmxhdHRlbi1pbnRvLWFycmF5ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZmxhdHRlbi1pbnRvLWFycmF5LmpzXCIpO1xudmFyIGFDYWxsYWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9hLWNhbGxhYmxlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1jYWxsYWJsZS5qc1wiKTtcbnZhciB0b09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy90by1vYmplY3QgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1vYmplY3QuanNcIik7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZS5qc1wiKTtcbnZhciBhcnJheVNwZWNpZXNDcmVhdGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvYXJyYXktc3BlY2llcy1jcmVhdGUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZS5qc1wiKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5mbGF0TWFwYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZsYXRtYXBcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlIH0sIHtcbiAgZmxhdE1hcDogZnVuY3Rpb24gZmxhdE1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHNvdXJjZUxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHZhciBBO1xuICAgIGFDYWxsYWJsZShjYWxsYmFja2ZuKTtcbiAgICBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIEEubGVuZ3RoID0gZmxhdHRlbkludG9BcnJheShBLCBPLCBPLCBzb3VyY2VMZW4sIDAsIDEsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZsYXQtbWFwLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5pbmNsdWRlcy5qcyI6KChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciAkID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2V4cG9ydCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2V4cG9ydC5qc1wiKTtcbnZhciAkaW5jbHVkZXMgPSAoX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMuanNcIikuaW5jbHVkZXMpO1xudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2ZhaWxzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZmFpbHMuanNcIik7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMuanNcIik7XG5cbi8vIEZGOTkrIGJ1Z1xudmFyIEJST0tFTl9PTl9TUEFSU0UgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1wcm90b3R5cGUtaW5jbHVkZXMgLS0gZGV0ZWN0aW9uXG4gIHJldHVybiAhQXJyYXkoMSkuaW5jbHVkZXMoKTtcbn0pO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBCUk9LRU5fT05fU1BBUlNFIH0sIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKGVsIC8qICwgZnJvbUluZGV4ID0gMCAqLykge1xuICAgIHJldHVybiAkaW5jbHVkZXModGhpcywgZWwsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoJ2luY2x1ZGVzJyk7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmluY2x1ZGVzLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvci5qcyI6KChtb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgdG9JbmRleGVkT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QuanNcIik7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMuanNcIik7XG52YXIgSXRlcmF0b3JzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9ycy5qc1wiKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUuanNcIik7XG52YXIgZGVmaW5lUHJvcGVydHkgPSAoX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5LmpzXCIpLmYpO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9yLWRlZmluZS5qc1wiKTtcbnZhciBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtaXRlci1yZXN1bHQtb2JqZWN0LmpzXCIpO1xudmFyIElTX1BVUkUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaXMtcHVyZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanNcIik7XG52YXIgREVTQ1JJUFRPUlMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZXNjcmlwdG9ycy5qc1wiKTtcblxudmFyIEFSUkFZX0lURVJBVE9SID0gJ0FycmF5IEl0ZXJhdG9yJztcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKEFSUkFZX0lURVJBVE9SKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5lbnRyaWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmVudHJpZXNcbi8vIGBBcnJheS5wcm90b3R5cGUua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5rZXlzXG4vLyBgQXJyYXkucHJvdG90eXBlLnZhbHVlc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS52YWx1ZXNcbi8vIGBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUtQEBpdGVyYXRvclxuLy8gYENyZWF0ZUFycmF5SXRlcmF0b3JgIGludGVybmFsIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1jcmVhdGVhcnJheWl0ZXJhdG9yXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmluZUl0ZXJhdG9yKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogQVJSQVlfSVRFUkFUT1IsXG4gICAgdGFyZ2V0OiB0b0luZGV4ZWRPYmplY3QoaXRlcmF0ZWQpLCAvLyB0YXJnZXRcbiAgICBpbmRleDogMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgICBraW5kOiBraW5kICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmRcbiAgfSk7XG4vLyBgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0lYXJyYXlpdGVyYXRvcnByb3RvdHlwZSUubmV4dFxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICB2YXIgdGFyZ2V0ID0gc3RhdGUudGFyZ2V0O1xuICB2YXIga2luZCA9IHN0YXRlLmtpbmQ7XG4gIHZhciBpbmRleCA9IHN0YXRlLmluZGV4Kys7XG4gIGlmICghdGFyZ2V0IHx8IGluZGV4ID49IHRhcmdldC5sZW5ndGgpIHtcbiAgICBzdGF0ZS50YXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKTtcbiAgfVxuICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGluZGV4LCBmYWxzZSk7XG4gIGlmIChraW5kID09ICd2YWx1ZXMnKSByZXR1cm4gY3JlYXRlSXRlclJlc3VsdE9iamVjdCh0YXJnZXRbaW5kZXhdLCBmYWxzZSk7XG4gIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KFtpbmRleCwgdGFyZ2V0W2luZGV4XV0sIGZhbHNlKTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZXVubWFwcGVkYXJndW1lbnRzb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZW1hcHBlZGFyZ3VtZW50c29iamVjdFxudmFyIHZhbHVlcyA9IEl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuXG4vLyBWOCB+IENocm9tZSA0NS0gYnVnXG5pZiAoIUlTX1BVUkUgJiYgREVTQ1JJUFRPUlMgJiYgdmFsdWVzLm5hbWUgIT09ICd2YWx1ZXMnKSB0cnkge1xuICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZXMsICduYW1lJywgeyB2YWx1ZTogJ3ZhbHVlcycgfSk7XG59IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIjooKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyICQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZXhwb3J0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzXCIpO1xudmFyIHRvT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3RvLW9iamVjdCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLW9iamVjdC5qc1wiKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlLmpzXCIpO1xudmFyIHNldEFycmF5TGVuZ3RoID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2FycmF5LXNldC1sZW5ndGggKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zZXQtbGVuZ3RoLmpzXCIpO1xudmFyIGRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlci5qc1wiKTtcbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mYWlscyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzXCIpO1xuXG52YXIgSU5DT1JSRUNUX1RPX0xFTkdUSCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIFtdLnB1c2guY2FsbCh7IGxlbmd0aDogMHgxMDAwMDAwMDAgfSwgMSkgIT09IDQyOTQ5NjcyOTc7XG59KTtcblxuLy8gVjggYW5kIFNhZmFyaSA8PSAxNS40LCBGRiA8IDIzIHRocm93cyBJbnRlcm5hbEVycm9yXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0xMjY4MVxudmFyIHByb3BlckVycm9yT25Ob25Xcml0YWJsZUxlbmd0aCA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoW10sICdsZW5ndGgnLCB7IHdyaXRhYmxlOiBmYWxzZSB9KS5wdXNoKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yO1xuICB9XG59O1xuXG52YXIgRk9SQ0VEID0gSU5DT1JSRUNUX1RPX0xFTkdUSCB8fCAhcHJvcGVyRXJyb3JPbk5vbldyaXRhYmxlTGVuZ3RoKCk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUucHVzaGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5wdXNoXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgcHVzaDogZnVuY3Rpb24gcHVzaChpdGVtKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGFyZ0NvdW50ID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIobGVuICsgYXJnQ291bnQpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJnQ291bnQ7IGkrKykge1xuICAgICAgT1tsZW5dID0gYXJndW1lbnRzW2ldO1xuICAgICAgbGVuKys7XG4gICAgfVxuICAgIHNldEFycmF5TGVuZ3RoKE8sIGxlbik7XG4gICAgcmV0dXJuIGxlbjtcbiAgfVxufSk7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnNvcnQuanMiOigoX191bnVzZWRfd2VicGFja19tb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9leHBvcnQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9leHBvcnQuanNcIik7XG52YXIgdW5jdXJyeVRoaXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzXCIpO1xudmFyIGFDYWxsYWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9hLWNhbGxhYmxlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1jYWxsYWJsZS5qc1wiKTtcbnZhciB0b09iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy90by1vYmplY3QgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1vYmplY3QuanNcIik7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZS5qc1wiKTtcbnZhciBkZWxldGVQcm9wZXJ0eU9yVGhyb3cgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZGVsZXRlLXByb3BlcnR5LW9yLXRocm93ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVsZXRlLXByb3BlcnR5LW9yLXRocm93LmpzXCIpO1xudmFyIHRvU3RyaW5nID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3RvLXN0cmluZyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXN0cmluZy5qc1wiKTtcbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mYWlscyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzXCIpO1xudmFyIGludGVybmFsU29ydCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9hcnJheS1zb3J0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktc29ydC5qc1wiKTtcbnZhciBhcnJheU1ldGhvZElzU3RyaWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1pcy1zdHJpY3QgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0LmpzXCIpO1xudmFyIEZGID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2VuZ2luZS1mZi12ZXJzaW9uICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLWZmLXZlcnNpb24uanNcIik7XG52YXIgSUVfT1JfRURHRSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9lbmdpbmUtaXMtaWUtb3ItZWRnZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS1pcy1pZS1vci1lZGdlLmpzXCIpO1xudmFyIFY4ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24uanNcIik7XG52YXIgV0VCS0lUID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2VuZ2luZS13ZWJraXQtdmVyc2lvbiAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS13ZWJraXQtdmVyc2lvbi5qc1wiKTtcblxudmFyIHRlc3QgPSBbXTtcbnZhciBuYXRpdmVTb3J0ID0gdW5jdXJyeVRoaXModGVzdC5zb3J0KTtcbnZhciBwdXNoID0gdW5jdXJyeVRoaXModGVzdC5wdXNoKTtcblxuLy8gSUU4LVxudmFyIEZBSUxTX09OX1VOREVGSU5FRCA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdGVzdC5zb3J0KHVuZGVmaW5lZCk7XG59KTtcbi8vIFY4IGJ1Z1xudmFyIEZBSUxTX09OX05VTEwgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHRlc3Quc29ydChudWxsKTtcbn0pO1xuLy8gT2xkIFdlYktpdFxudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdzb3J0Jyk7XG5cbnZhciBTVEFCTEVfU09SVCA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGZlYXR1cmUgZGV0ZWN0aW9uIGNhbiBiZSB0b28gc2xvdywgc28gY2hlY2sgZW5naW5lcyB2ZXJzaW9uc1xuICBpZiAoVjgpIHJldHVybiBWOCA8IDcwO1xuICBpZiAoRkYgJiYgRkYgPiAzKSByZXR1cm47XG4gIGlmIChJRV9PUl9FREdFKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKFdFQktJVCkgcmV0dXJuIFdFQktJVCA8IDYwMztcblxuICB2YXIgcmVzdWx0ID0gJyc7XG4gIHZhciBjb2RlLCBjaHIsIHZhbHVlLCBpbmRleDtcblxuICAvLyBnZW5lcmF0ZSBhbiBhcnJheSB3aXRoIG1vcmUgNTEyIGVsZW1lbnRzIChDaGFrcmEgYW5kIG9sZCBWOCBmYWlscyBvbmx5IGluIHRoaXMgY2FzZSlcbiAgZm9yIChjb2RlID0gNjU7IGNvZGUgPCA3NjsgY29kZSsrKSB7XG4gICAgY2hyID0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcblxuICAgIHN3aXRjaCAoY29kZSkge1xuICAgICAgY2FzZSA2NjogY2FzZSA2OTogY2FzZSA3MDogY2FzZSA3MjogdmFsdWUgPSAzOyBicmVhaztcbiAgICAgIGNhc2UgNjg6IGNhc2UgNzE6IHZhbHVlID0gNDsgYnJlYWs7XG4gICAgICBkZWZhdWx0OiB2YWx1ZSA9IDI7XG4gICAgfVxuXG4gICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgNDc7IGluZGV4KyspIHtcbiAgICAgIHRlc3QucHVzaCh7IGs6IGNociArIGluZGV4LCB2OiB2YWx1ZSB9KTtcbiAgICB9XG4gIH1cblxuICB0ZXN0LnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGIudiAtIGEudjsgfSk7XG5cbiAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgdGVzdC5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBjaHIgPSB0ZXN0W2luZGV4XS5rLmNoYXJBdCgwKTtcbiAgICBpZiAocmVzdWx0LmNoYXJBdChyZXN1bHQubGVuZ3RoIC0gMSkgIT09IGNocikgcmVzdWx0ICs9IGNocjtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQgIT09ICdER0JFRkhBQ0lKSyc7XG59KTtcblxudmFyIEZPUkNFRCA9IEZBSUxTX09OX1VOREVGSU5FRCB8fCAhRkFJTFNfT05fTlVMTCB8fCAhU1RSSUNUX01FVEhPRCB8fCAhU1RBQkxFX1NPUlQ7XG5cbnZhciBnZXRTb3J0Q29tcGFyZSA9IGZ1bmN0aW9uIChjb21wYXJlZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh4LCB5KSB7XG4gICAgaWYgKHkgPT09IHVuZGVmaW5lZCkgcmV0dXJuIC0xO1xuICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHJldHVybiAxO1xuICAgIGlmIChjb21wYXJlZm4gIT09IHVuZGVmaW5lZCkgcmV0dXJuICtjb21wYXJlZm4oeCwgeSkgfHwgMDtcbiAgICByZXR1cm4gdG9TdHJpbmcoeCkgPiB0b1N0cmluZyh5KSA/IDEgOiAtMTtcbiAgfTtcbn07XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc29ydGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5zb3J0XG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgIGlmIChjb21wYXJlZm4gIT09IHVuZGVmaW5lZCkgYUNhbGxhYmxlKGNvbXBhcmVmbik7XG5cbiAgICB2YXIgYXJyYXkgPSB0b09iamVjdCh0aGlzKTtcblxuICAgIGlmIChTVEFCTEVfU09SVCkgcmV0dXJuIGNvbXBhcmVmbiA9PT0gdW5kZWZpbmVkID8gbmF0aXZlU29ydChhcnJheSkgOiBuYXRpdmVTb3J0KGFycmF5LCBjb21wYXJlZm4pO1xuXG4gICAgdmFyIGl0ZW1zID0gW107XG4gICAgdmFyIGFycmF5TGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoYXJyYXkpO1xuICAgIHZhciBpdGVtc0xlbmd0aCwgaW5kZXg7XG5cbiAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBhcnJheUxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgaWYgKGluZGV4IGluIGFycmF5KSBwdXNoKGl0ZW1zLCBhcnJheVtpbmRleF0pO1xuICAgIH1cblxuICAgIGludGVybmFsU29ydChpdGVtcywgZ2V0U29ydENvbXBhcmUoY29tcGFyZWZuKSk7XG5cbiAgICBpdGVtc0xlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKGl0ZW1zKTtcbiAgICBpbmRleCA9IDA7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBpdGVtc0xlbmd0aCkgYXJyYXlbaW5kZXhdID0gaXRlbXNbaW5kZXgrK107XG4gICAgd2hpbGUgKGluZGV4IDwgYXJyYXlMZW5ndGgpIGRlbGV0ZVByb3BlcnR5T3JUaHJvdyhhcnJheSwgaW5kZXgrKyk7XG5cbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cbn0pO1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5zb3J0LmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS51bnNjb3BhYmxlcy5mbGF0LW1hcC5qcyI6KChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbi8vIHRoaXMgbWV0aG9kIHdhcyBhZGRlZCB0byB1bnNjb3BhYmxlcyBhZnRlciBpbXBsZW1lbnRhdGlvblxuLy8gaW4gcG9wdWxhciBlbmdpbmVzLCBzbyBpdCdzIG1vdmVkIHRvIGEgc2VwYXJhdGUgbW9kdWxlXG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMuanNcIik7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoJ2ZsYXRNYXAnKTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkudW5zY29wYWJsZXMuZmxhdC1tYXAuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LndpdGguanMiOigoX191bnVzZWRfd2VicGFja19tb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9leHBvcnQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9leHBvcnQuanNcIik7XG52YXIgYXJyYXlXaXRoID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2FycmF5LXdpdGggKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS13aXRoLmpzXCIpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0LmpzXCIpO1xuXG52YXIgJEFycmF5ID0gQXJyYXk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUud2l0aGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS53aXRoXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSB9LCB7XG4gICd3aXRoJzogZnVuY3Rpb24gKGluZGV4LCB2YWx1ZSkge1xuICAgIHJldHVybiBhcnJheVdpdGgodG9JbmRleGVkT2JqZWN0KHRoaXMpLCAkQXJyYXksIGluZGV4LCB2YWx1ZSk7XG4gIH1cbn0pO1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS53aXRoLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qcyI6KChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBmdW5jdGlvbnMgYC5sZW5ndGhgICovXG52YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9leHBvcnQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9leHBvcnQuanNcIik7XG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2dsb2JhbCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dsb2JhbC5qc1wiKTtcbnZhciBhcHBseSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5LmpzXCIpO1xudmFyIHdyYXBFcnJvckNvbnN0cnVjdG9yV2l0aENhdXNlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3dyYXAtZXJyb3ItY29uc3RydWN0b3Itd2l0aC1jYXVzZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dyYXAtZXJyb3ItY29uc3RydWN0b3Itd2l0aC1jYXVzZS5qc1wiKTtcblxudmFyIFdFQl9BU1NFTUJMWSA9ICdXZWJBc3NlbWJseSc7XG52YXIgV2ViQXNzZW1ibHkgPSBnbG9iYWxbV0VCX0FTU0VNQkxZXTtcblxudmFyIEZPUkNFRCA9IEVycm9yKCdlJywgeyBjYXVzZTogNyB9KS5jYXVzZSAhPT0gNztcblxudmFyIGV4cG9ydEdsb2JhbEVycm9yQ2F1c2VXcmFwcGVyID0gZnVuY3Rpb24gKEVSUk9SX05BTUUsIHdyYXBwZXIpIHtcbiAgdmFyIE8gPSB7fTtcbiAgT1tFUlJPUl9OQU1FXSA9IHdyYXBFcnJvckNvbnN0cnVjdG9yV2l0aENhdXNlKEVSUk9SX05BTUUsIHdyYXBwZXIsIEZPUkNFRCk7XG4gICQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCBhcml0eTogMSwgZm9yY2VkOiBGT1JDRUQgfSwgTyk7XG59O1xuXG52YXIgZXhwb3J0V2ViQXNzZW1ibHlFcnJvckNhdXNlV3JhcHBlciA9IGZ1bmN0aW9uIChFUlJPUl9OQU1FLCB3cmFwcGVyKSB7XG4gIGlmIChXZWJBc3NlbWJseSAmJiBXZWJBc3NlbWJseVtFUlJPUl9OQU1FXSkge1xuICAgIHZhciBPID0ge307XG4gICAgT1tFUlJPUl9OQU1FXSA9IHdyYXBFcnJvckNvbnN0cnVjdG9yV2l0aENhdXNlKFdFQl9BU1NFTUJMWSArICcuJyArIEVSUk9SX05BTUUsIHdyYXBwZXIsIEZPUkNFRCk7XG4gICAgJCh7IHRhcmdldDogV0VCX0FTU0VNQkxZLCBzdGF0OiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgYXJpdHk6IDEsIGZvcmNlZDogRk9SQ0VEIH0sIE8pO1xuICB9XG59O1xuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW5hdGl2ZWVycm9yXG5leHBvcnRHbG9iYWxFcnJvckNhdXNlV3JhcHBlcignRXJyb3InLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gRXJyb3IobWVzc2FnZSkgeyByZXR1cm4gYXBwbHkoaW5pdCwgdGhpcywgYXJndW1lbnRzKTsgfTtcbn0pO1xuZXhwb3J0R2xvYmFsRXJyb3JDYXVzZVdyYXBwZXIoJ0V2YWxFcnJvcicsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBFdmFsRXJyb3IobWVzc2FnZSkgeyByZXR1cm4gYXBwbHkoaW5pdCwgdGhpcywgYXJndW1lbnRzKTsgfTtcbn0pO1xuZXhwb3J0R2xvYmFsRXJyb3JDYXVzZVdyYXBwZXIoJ1JhbmdlRXJyb3InLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gUmFuZ2VFcnJvcihtZXNzYWdlKSB7IHJldHVybiBhcHBseShpbml0LCB0aGlzLCBhcmd1bWVudHMpOyB9O1xufSk7XG5leHBvcnRHbG9iYWxFcnJvckNhdXNlV3JhcHBlcignUmVmZXJlbmNlRXJyb3InLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gUmVmZXJlbmNlRXJyb3IobWVzc2FnZSkgeyByZXR1cm4gYXBwbHkoaW5pdCwgdGhpcywgYXJndW1lbnRzKTsgfTtcbn0pO1xuZXhwb3J0R2xvYmFsRXJyb3JDYXVzZVdyYXBwZXIoJ1N5bnRheEVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFN5bnRheEVycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydEdsb2JhbEVycm9yQ2F1c2VXcmFwcGVyKCdUeXBlRXJyb3InLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVHlwZUVycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydEdsb2JhbEVycm9yQ2F1c2VXcmFwcGVyKCdVUklFcnJvcicsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVUklFcnJvcihtZXNzYWdlKSB7IHJldHVybiBhcHBseShpbml0LCB0aGlzLCBhcmd1bWVudHMpOyB9O1xufSk7XG5leHBvcnRXZWJBc3NlbWJseUVycm9yQ2F1c2VXcmFwcGVyKCdDb21waWxlRXJyb3InLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gQ29tcGlsZUVycm9yKG1lc3NhZ2UpIHsgcmV0dXJuIGFwcGx5KGluaXQsIHRoaXMsIGFyZ3VtZW50cyk7IH07XG59KTtcbmV4cG9ydFdlYkFzc2VtYmx5RXJyb3JDYXVzZVdyYXBwZXIoJ0xpbmtFcnJvcicsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBMaW5rRXJyb3IobWVzc2FnZSkgeyByZXR1cm4gYXBwbHkoaW5pdCwgdGhpcywgYXJndW1lbnRzKTsgfTtcbn0pO1xuZXhwb3J0V2ViQXNzZW1ibHlFcnJvckNhdXNlV3JhcHBlcignUnVudGltZUVycm9yJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFJ1bnRpbWVFcnJvcihtZXNzYWdlKSB7IHJldHVybiBhcHBseShpbml0LCB0aGlzLCBhcmd1bWVudHMpOyB9O1xufSk7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmVycm9yLmNhdXNlLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5nbG9iYWwtdGhpcy5qcyI6KChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciAkID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2V4cG9ydCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2V4cG9ydC5qc1wiKTtcbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZ2xvYmFsICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2xvYmFsLmpzXCIpO1xuXG4vLyBgZ2xvYmFsVGhpc2Agb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdsb2JhbHRoaXNcbiQoeyBnbG9iYWw6IHRydWUsIGZvcmNlZDogZ2xvYmFsLmdsb2JhbFRoaXMgIT09IGdsb2JhbCB9LCB7XG4gIGdsb2JhbFRoaXM6IGdsb2JhbFxufSk7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmdsb2JhbC10aGlzLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5qc29uLnN0cmluZ2lmeS5qcyI6KChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciAkID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2V4cG9ydCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2V4cG9ydC5qc1wiKTtcbnZhciBnZXRCdWlsdEluID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbiAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qc1wiKTtcbnZhciBhcHBseSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5LmpzXCIpO1xudmFyIGNhbGwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanNcIik7XG52YXIgdW5jdXJyeVRoaXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzXCIpO1xudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2ZhaWxzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZmFpbHMuanNcIik7XG52YXIgaXNDYWxsYWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pcy1jYWxsYWJsZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWNhbGxhYmxlLmpzXCIpO1xudmFyIGlzU3ltYm9sID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qc1wiKTtcbnZhciBhcnJheVNsaWNlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktc2xpY2UuanNcIik7XG52YXIgZ2V0UmVwbGFjZXJGdW5jdGlvbiA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9nZXQtanNvbi1yZXBsYWNlci1mdW5jdGlvbiAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1qc29uLXJlcGxhY2VyLWZ1bmN0aW9uLmpzXCIpO1xudmFyIE5BVElWRV9TWU1CT0wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvc3ltYm9sLWNvbnN0cnVjdG9yLWRldGVjdGlvbiAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N5bWJvbC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanNcIik7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRzdHJpbmdpZnkgPSBnZXRCdWlsdEluKCdKU09OJywgJ3N0cmluZ2lmeScpO1xudmFyIGV4ZWMgPSB1bmN1cnJ5VGhpcygvLi8uZXhlYyk7XG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciBjaGFyQ29kZUF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckNvZGVBdCk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIG51bWJlclRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxudmFyIHRlc3RlciA9IC9bXFx1RDgwMC1cXHVERkZGXS9nO1xudmFyIGxvdyA9IC9eW1xcdUQ4MDAtXFx1REJGRl0kLztcbnZhciBoaSA9IC9eW1xcdURDMDAtXFx1REZGRl0kLztcblxudmFyIFdST05HX1NZTUJPTFNfQ09OVkVSU0lPTiA9ICFOQVRJVkVfU1lNQk9MIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpKCk7XG4gIC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIHt9XG4gIHJldHVybiAkc3RyaW5naWZ5KFtzeW1ib2xdKSAhPSAnW251bGxdJ1xuICAgIC8vIFdlYktpdCBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMgbnVsbFxuICAgIHx8ICRzdHJpbmdpZnkoeyBhOiBzeW1ib2wgfSkgIT0gJ3t9J1xuICAgIC8vIFY4IHRocm93cyBvbiBib3hlZCBzeW1ib2xzXG4gICAgfHwgJHN0cmluZ2lmeShPYmplY3Qoc3ltYm9sKSkgIT0gJ3t9Jztcbn0pO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC13ZWxsLWZvcm1lZC1zdHJpbmdpZnlcbnZhciBJTExfRk9STUVEX1VOSUNPREUgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkc3RyaW5naWZ5KCdcXHVERjA2XFx1RDgzNCcpICE9PSAnXCJcXFxcdWRmMDZcXFxcdWQ4MzRcIidcbiAgICB8fCAkc3RyaW5naWZ5KCdcXHVERUFEJykgIT09ICdcIlxcXFx1ZGVhZFwiJztcbn0pO1xuXG52YXIgc3RyaW5naWZ5V2l0aFN5bWJvbHNGaXggPSBmdW5jdGlvbiAoaXQsIHJlcGxhY2VyKSB7XG4gIHZhciBhcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMpO1xuICB2YXIgJHJlcGxhY2VyID0gZ2V0UmVwbGFjZXJGdW5jdGlvbihyZXBsYWNlcik7XG4gIGlmICghaXNDYWxsYWJsZSgkcmVwbGFjZXIpICYmIChpdCA9PT0gdW5kZWZpbmVkIHx8IGlzU3ltYm9sKGl0KSkpIHJldHVybjsgLy8gSUU4IHJldHVybnMgc3RyaW5nIG9uIHVuZGVmaW5lZFxuICBhcmdzWzFdID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAvLyBzb21lIG9sZCBpbXBsZW1lbnRhdGlvbnMgKGxpa2UgV2ViS2l0KSBjb3VsZCBwYXNzIG51bWJlcnMgYXMga2V5c1xuICAgIGlmIChpc0NhbGxhYmxlKCRyZXBsYWNlcikpIHZhbHVlID0gY2FsbCgkcmVwbGFjZXIsIHRoaXMsICRTdHJpbmcoa2V5KSwgdmFsdWUpO1xuICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gIH07XG4gIHJldHVybiBhcHBseSgkc3RyaW5naWZ5LCBudWxsLCBhcmdzKTtcbn07XG5cbnZhciBmaXhJbGxGb3JtZWQgPSBmdW5jdGlvbiAobWF0Y2gsIG9mZnNldCwgc3RyaW5nKSB7XG4gIHZhciBwcmV2ID0gY2hhckF0KHN0cmluZywgb2Zmc2V0IC0gMSk7XG4gIHZhciBuZXh0ID0gY2hhckF0KHN0cmluZywgb2Zmc2V0ICsgMSk7XG4gIGlmICgoZXhlYyhsb3csIG1hdGNoKSAmJiAhZXhlYyhoaSwgbmV4dCkpIHx8IChleGVjKGhpLCBtYXRjaCkgJiYgIWV4ZWMobG93LCBwcmV2KSkpIHtcbiAgICByZXR1cm4gJ1xcXFx1JyArIG51bWJlclRvU3RyaW5nKGNoYXJDb2RlQXQobWF0Y2gsIDApLCAxNik7XG4gIH0gcmV0dXJuIG1hdGNoO1xufTtcblxuaWYgKCRzdHJpbmdpZnkpIHtcbiAgLy8gYEpTT04uc3RyaW5naWZ5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1qc29uLnN0cmluZ2lmeVxuICAkKHsgdGFyZ2V0OiAnSlNPTicsIHN0YXQ6IHRydWUsIGFyaXR5OiAzLCBmb3JjZWQ6IFdST05HX1NZTUJPTFNfQ09OVkVSU0lPTiB8fCBJTExfRk9STUVEX1VOSUNPREUgfSwge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gICAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoaXQsIHJlcGxhY2VyLCBzcGFjZSkge1xuICAgICAgdmFyIGFyZ3MgPSBhcnJheVNsaWNlKGFyZ3VtZW50cyk7XG4gICAgICB2YXIgcmVzdWx0ID0gYXBwbHkoV1JPTkdfU1lNQk9MU19DT05WRVJTSU9OID8gc3RyaW5naWZ5V2l0aFN5bWJvbHNGaXggOiAkc3RyaW5naWZ5LCBudWxsLCBhcmdzKTtcbiAgICAgIHJldHVybiBJTExfRk9STUVEX1VOSUNPREUgJiYgdHlwZW9mIHJlc3VsdCA9PSAnc3RyaW5nJyA/IHJlcGxhY2UocmVzdWx0LCB0ZXN0ZXIsIGZpeElsbEZvcm1lZCkgOiByZXN1bHQ7XG4gICAgfVxuICB9KTtcbn1cblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuanNvbi5zdHJpbmdpZnkuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm1hdGguaHlwb3QuanMiOigoX191bnVzZWRfd2VicGFja19tb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9leHBvcnQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9leHBvcnQuanNcIik7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1tYXRoLWh5cG90IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG52YXIgJGh5cG90ID0gTWF0aC5oeXBvdDtcbnZhciBhYnMgPSBNYXRoLmFicztcbnZhciBzcXJ0ID0gTWF0aC5zcXJ0O1xuXG4vLyBDaHJvbWUgNzcgYnVnXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD05NTQ2XG52YXIgRk9SQ0VEID0gISEkaHlwb3QgJiYgJGh5cG90KEluZmluaXR5LCBOYU4pICE9PSBJbmZpbml0eTtcblxuLy8gYE1hdGguaHlwb3RgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLmh5cG90XG4kKHsgdGFyZ2V0OiAnTWF0aCcsIHN0YXQ6IHRydWUsIGFyaXR5OiAyLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIGh5cG90OiBmdW5jdGlvbiBoeXBvdCh2YWx1ZTEsIHZhbHVlMikge1xuICAgIHZhciBzdW0gPSAwO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGxhcmcgPSAwO1xuICAgIHZhciBhcmcsIGRpdjtcbiAgICB3aGlsZSAoaSA8IGFMZW4pIHtcbiAgICAgIGFyZyA9IGFicyhhcmd1bWVudHNbaSsrXSk7XG4gICAgICBpZiAobGFyZyA8IGFyZykge1xuICAgICAgICBkaXYgPSBsYXJnIC8gYXJnO1xuICAgICAgICBzdW0gPSBzdW0gKiBkaXYgKiBkaXYgKyAxO1xuICAgICAgICBsYXJnID0gYXJnO1xuICAgICAgfSBlbHNlIGlmIChhcmcgPiAwKSB7XG4gICAgICAgIGRpdiA9IGFyZyAvIGxhcmc7XG4gICAgICAgIHN1bSArPSBkaXYgKiBkaXY7XG4gICAgICB9IGVsc2Ugc3VtICs9IGFyZztcbiAgICB9XG4gICAgcmV0dXJuIGxhcmcgPT09IEluZmluaXR5ID8gSW5maW5pdHkgOiBsYXJnICogc3FydChzdW0pO1xuICB9XG59KTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMubWF0aC5oeXBvdC5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMubnVtYmVyLnRvLWZpeGVkLmpzIjooKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyICQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZXhwb3J0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzXCIpO1xudmFyIHVuY3VycnlUaGlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qc1wiKTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHkgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5LmpzXCIpO1xudmFyIHRoaXNOdW1iZXJWYWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy90aGlzLW51bWJlci12YWx1ZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RoaXMtbnVtYmVyLXZhbHVlLmpzXCIpO1xudmFyICRyZXBlYXQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvc3RyaW5nLXJlcGVhdCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N0cmluZy1yZXBlYXQuanNcIik7XG52YXIgZmFpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZmFpbHMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mYWlscy5qc1wiKTtcblxudmFyICRSYW5nZUVycm9yID0gUmFuZ2VFcnJvcjtcbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciByZXBlYXQgPSB1bmN1cnJ5VGhpcygkcmVwZWF0KTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcbnZhciBuYXRpdmVUb0ZpeGVkID0gdW5jdXJyeVRoaXMoMS4wLnRvRml4ZWQpO1xuXG52YXIgcG93ID0gZnVuY3Rpb24gKHgsIG4sIGFjYykge1xuICByZXR1cm4gbiA9PT0gMCA/IGFjYyA6IG4gJSAyID09PSAxID8gcG93KHgsIG4gLSAxLCBhY2MgKiB4KSA6IHBvdyh4ICogeCwgbiAvIDIsIGFjYyk7XG59O1xuXG52YXIgbG9nID0gZnVuY3Rpb24gKHgpIHtcbiAgdmFyIG4gPSAwO1xuICB2YXIgeDIgPSB4O1xuICB3aGlsZSAoeDIgPj0gNDA5Nikge1xuICAgIG4gKz0gMTI7XG4gICAgeDIgLz0gNDA5NjtcbiAgfVxuICB3aGlsZSAoeDIgPj0gMikge1xuICAgIG4gKz0gMTtcbiAgICB4MiAvPSAyO1xuICB9IHJldHVybiBuO1xufTtcblxudmFyIG11bHRpcGx5ID0gZnVuY3Rpb24gKGRhdGEsIG4sIGMpIHtcbiAgdmFyIGluZGV4ID0gLTE7XG4gIHZhciBjMiA9IGM7XG4gIHdoaWxlICgrK2luZGV4IDwgNikge1xuICAgIGMyICs9IG4gKiBkYXRhW2luZGV4XTtcbiAgICBkYXRhW2luZGV4XSA9IGMyICUgMWU3O1xuICAgIGMyID0gZmxvb3IoYzIgLyAxZTcpO1xuICB9XG59O1xuXG52YXIgZGl2aWRlID0gZnVuY3Rpb24gKGRhdGEsIG4pIHtcbiAgdmFyIGluZGV4ID0gNjtcbiAgdmFyIGMgPSAwO1xuICB3aGlsZSAoLS1pbmRleCA+PSAwKSB7XG4gICAgYyArPSBkYXRhW2luZGV4XTtcbiAgICBkYXRhW2luZGV4XSA9IGZsb29yKGMgLyBuKTtcbiAgICBjID0gKGMgJSBuKSAqIDFlNztcbiAgfVxufTtcblxudmFyIGRhdGFUb1N0cmluZyA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gIHZhciBpbmRleCA9IDY7XG4gIHZhciBzID0gJyc7XG4gIHdoaWxlICgtLWluZGV4ID49IDApIHtcbiAgICBpZiAocyAhPT0gJycgfHwgaW5kZXggPT09IDAgfHwgZGF0YVtpbmRleF0gIT09IDApIHtcbiAgICAgIHZhciB0ID0gJFN0cmluZyhkYXRhW2luZGV4XSk7XG4gICAgICBzID0gcyA9PT0gJycgPyB0IDogcyArIHJlcGVhdCgnMCcsIDcgLSB0Lmxlbmd0aCkgKyB0O1xuICAgIH1cbiAgfSByZXR1cm4gcztcbn07XG5cbnZhciBGT1JDRUQgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuYXRpdmVUb0ZpeGVkKDAuMDAwMDgsIDMpICE9PSAnMC4wMDAnIHx8XG4gICAgbmF0aXZlVG9GaXhlZCgwLjksIDApICE9PSAnMScgfHxcbiAgICBuYXRpdmVUb0ZpeGVkKDEuMjU1LCAyKSAhPT0gJzEuMjUnIHx8XG4gICAgbmF0aXZlVG9GaXhlZCgxMDAwMDAwMDAwMDAwMDAwMTI4LjAsIDApICE9PSAnMTAwMDAwMDAwMDAwMDAwMDEyOCc7XG59KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBWOCB+IEFuZHJvaWQgNC4zLVxuICBuYXRpdmVUb0ZpeGVkKHt9KTtcbn0pO1xuXG4vLyBgTnVtYmVyLnByb3RvdHlwZS50b0ZpeGVkYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbnVtYmVyLnByb3RvdHlwZS50b2ZpeGVkXG4kKHsgdGFyZ2V0OiAnTnVtYmVyJywgcHJvdG86IHRydWUsIGZvcmNlZDogRk9SQ0VEIH0sIHtcbiAgdG9GaXhlZDogZnVuY3Rpb24gdG9GaXhlZChmcmFjdGlvbkRpZ2l0cykge1xuICAgIHZhciBudW1iZXIgPSB0aGlzTnVtYmVyVmFsdWUodGhpcyk7XG4gICAgdmFyIGZyYWN0RGlnaXRzID0gdG9JbnRlZ2VyT3JJbmZpbml0eShmcmFjdGlvbkRpZ2l0cyk7XG4gICAgdmFyIGRhdGEgPSBbMCwgMCwgMCwgMCwgMCwgMF07XG4gICAgdmFyIHNpZ24gPSAnJztcbiAgICB2YXIgcmVzdWx0ID0gJzAnO1xuICAgIHZhciBlLCB6LCBqLCBrO1xuXG4gICAgLy8gVE9ETzogRVMyMDE4IGluY3JlYXNlZCB0aGUgbWF4aW11bSBudW1iZXIgb2YgZnJhY3Rpb24gZGlnaXRzIHRvIDEwMCwgbmVlZCB0byBpbXByb3ZlIHRoZSBpbXBsZW1lbnRhdGlvblxuICAgIGlmIChmcmFjdERpZ2l0cyA8IDAgfHwgZnJhY3REaWdpdHMgPiAyMCkgdGhyb3cgJFJhbmdlRXJyb3IoJ0luY29ycmVjdCBmcmFjdGlvbiBkaWdpdHMnKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgIGlmIChudW1iZXIgIT0gbnVtYmVyKSByZXR1cm4gJ05hTic7XG4gICAgaWYgKG51bWJlciA8PSAtMWUyMSB8fCBudW1iZXIgPj0gMWUyMSkgcmV0dXJuICRTdHJpbmcobnVtYmVyKTtcbiAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgc2lnbiA9ICctJztcbiAgICAgIG51bWJlciA9IC1udW1iZXI7XG4gICAgfVxuICAgIGlmIChudW1iZXIgPiAxZS0yMSkge1xuICAgICAgZSA9IGxvZyhudW1iZXIgKiBwb3coMiwgNjksIDEpKSAtIDY5O1xuICAgICAgeiA9IGUgPCAwID8gbnVtYmVyICogcG93KDIsIC1lLCAxKSA6IG51bWJlciAvIHBvdygyLCBlLCAxKTtcbiAgICAgIHogKj0gMHgxMDAwMDAwMDAwMDAwMDtcbiAgICAgIGUgPSA1MiAtIGU7XG4gICAgICBpZiAoZSA+IDApIHtcbiAgICAgICAgbXVsdGlwbHkoZGF0YSwgMCwgeik7XG4gICAgICAgIGogPSBmcmFjdERpZ2l0cztcbiAgICAgICAgd2hpbGUgKGogPj0gNykge1xuICAgICAgICAgIG11bHRpcGx5KGRhdGEsIDFlNywgMCk7XG4gICAgICAgICAgaiAtPSA3O1xuICAgICAgICB9XG4gICAgICAgIG11bHRpcGx5KGRhdGEsIHBvdygxMCwgaiwgMSksIDApO1xuICAgICAgICBqID0gZSAtIDE7XG4gICAgICAgIHdoaWxlIChqID49IDIzKSB7XG4gICAgICAgICAgZGl2aWRlKGRhdGEsIDEgPDwgMjMpO1xuICAgICAgICAgIGogLT0gMjM7XG4gICAgICAgIH1cbiAgICAgICAgZGl2aWRlKGRhdGEsIDEgPDwgaik7XG4gICAgICAgIG11bHRpcGx5KGRhdGEsIDEsIDEpO1xuICAgICAgICBkaXZpZGUoZGF0YSwgMik7XG4gICAgICAgIHJlc3VsdCA9IGRhdGFUb1N0cmluZyhkYXRhKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG11bHRpcGx5KGRhdGEsIDAsIHopO1xuICAgICAgICBtdWx0aXBseShkYXRhLCAxIDw8IC1lLCAwKTtcbiAgICAgICAgcmVzdWx0ID0gZGF0YVRvU3RyaW5nKGRhdGEpICsgcmVwZWF0KCcwJywgZnJhY3REaWdpdHMpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZnJhY3REaWdpdHMgPiAwKSB7XG4gICAgICBrID0gcmVzdWx0Lmxlbmd0aDtcbiAgICAgIHJlc3VsdCA9IHNpZ24gKyAoayA8PSBmcmFjdERpZ2l0c1xuICAgICAgICA/ICcwLicgKyByZXBlYXQoJzAnLCBmcmFjdERpZ2l0cyAtIGspICsgcmVzdWx0XG4gICAgICAgIDogc3RyaW5nU2xpY2UocmVzdWx0LCAwLCBrIC0gZnJhY3REaWdpdHMpICsgJy4nICsgc3RyaW5nU2xpY2UocmVzdWx0LCBrIC0gZnJhY3REaWdpdHMpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gc2lnbiArIHJlc3VsdDtcbiAgICB9IHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5udW1iZXIudG8tZml4ZWQuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5hc3NpZ24uanMiOigoX191bnVzZWRfd2VicGFja19tb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9leHBvcnQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9leHBvcnQuanNcIik7XG52YXIgYXNzaWduID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL29iamVjdC1hc3NpZ24gKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtYXNzaWduLmpzXCIpO1xuXG4vLyBgT2JqZWN0LmFzc2lnbmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5hc3NpZ25cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtYXNzaWduIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgYXJpdHk6IDIsIGZvcmNlZDogT2JqZWN0LmFzc2lnbiAhPT0gYXNzaWduIH0sIHtcbiAgYXNzaWduOiBhc3NpZ25cbn0pO1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuYXNzaWduLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuaGFzLW93bi5qcyI6KChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciAkID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2V4cG9ydCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2V4cG9ydC5qc1wiKTtcbnZhciBoYXNPd24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkuanNcIik7XG5cbi8vIGBPYmplY3QuaGFzT3duYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0Lmhhc293blxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUgfSwge1xuICBoYXNPd246IGhhc093blxufSk7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5oYXMtb3duLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5wYXJzZS1mbG9hdC5qcyI6KChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciAkID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2V4cG9ydCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2V4cG9ydC5qc1wiKTtcbnZhciAkcGFyc2VGbG9hdCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9udW1iZXItcGFyc2UtZmxvYXQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9udW1iZXItcGFyc2UtZmxvYXQuanNcIik7XG5cbi8vIGBwYXJzZUZsb2F0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcGFyc2VmbG9hdC1zdHJpbmdcbiQoeyBnbG9iYWw6IHRydWUsIGZvcmNlZDogcGFyc2VGbG9hdCAhPSAkcGFyc2VGbG9hdCB9LCB7XG4gIHBhcnNlRmxvYXQ6ICRwYXJzZUZsb2F0XG59KTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucGFyc2UtZmxvYXQuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnBhcnNlLWludC5qcyI6KChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciAkID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2V4cG9ydCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2V4cG9ydC5qc1wiKTtcbnZhciAkcGFyc2VJbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvbnVtYmVyLXBhcnNlLWludCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL251bWJlci1wYXJzZS1pbnQuanNcIik7XG5cbi8vIGBwYXJzZUludGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXBhcnNlaW50LXN0cmluZy1yYWRpeFxuJCh7IGdsb2JhbDogdHJ1ZSwgZm9yY2VkOiBwYXJzZUludCAhPSAkcGFyc2VJbnQgfSwge1xuICBwYXJzZUludDogJHBhcnNlSW50XG59KTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucGFyc2UtaW50LmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5wcm9taXNlLmFsbC1zZXR0bGVkLmpzIjooKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyICQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZXhwb3J0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzXCIpO1xudmFyIGNhbGwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanNcIik7XG52YXIgYUNhbGxhYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzXCIpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHkgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5LmpzXCIpO1xudmFyIHBlcmZvcm0gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvcGVyZm9ybSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3BlcmZvcm0uanNcIik7XG52YXIgaXRlcmF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pdGVyYXRlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0ZS5qc1wiKTtcbnZhciBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbiAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3Byb21pc2Utc3RhdGljcy1pbmNvcnJlY3QtaXRlcmF0aW9uLmpzXCIpO1xuXG4vLyBgUHJvbWlzZS5hbGxTZXR0bGVkYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5hbGxzZXR0bGVkXG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04gfSwge1xuICBhbGxTZXR0bGVkOiBmdW5jdGlvbiBhbGxTZXR0bGVkKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZihDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHByb21pc2VSZXNvbHZlID0gYUNhbGxhYmxlKEMucmVzb2x2ZSk7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgY291bnRlciA9IDA7XG4gICAgICB2YXIgcmVtYWluaW5nID0gMTtcbiAgICAgIGl0ZXJhdGUoaXRlcmFibGUsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGNvdW50ZXIrKztcbiAgICAgICAgdmFyIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIGNhbGwocHJvbWlzZVJlc29sdmUsIEMsIHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbaW5kZXhdID0geyBzdGF0dXM6ICdmdWxmaWxsZWQnLCB2YWx1ZTogdmFsdWUgfTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzW2luZGV4XSA9IHsgc3RhdHVzOiAncmVqZWN0ZWQnLCByZWFzb246IGVycm9yIH07XG4gICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHJlamVjdChyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5wcm9taXNlLmFsbC1zZXR0bGVkLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5wcm9taXNlLmFsbC5qcyI6KChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciAkID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2V4cG9ydCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2V4cG9ydC5qc1wiKTtcbnZhciBjYWxsID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1jYWxsLmpzXCIpO1xudmFyIGFDYWxsYWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9hLWNhbGxhYmxlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1jYWxsYWJsZS5qc1wiKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eS5qc1wiKTtcbnZhciBwZXJmb3JtID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3BlcmZvcm0gKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9wZXJmb3JtLmpzXCIpO1xudmFyIGl0ZXJhdGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaXRlcmF0ZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdGUuanNcIik7XG52YXIgUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvcHJvbWlzZS1zdGF0aWNzLWluY29ycmVjdC1pdGVyYXRpb24gKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbi5qc1wiKTtcblxuLy8gYFByb21pc2UuYWxsYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5hbGxcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiB9LCB7XG4gIGFsbDogZnVuY3Rpb24gYWxsKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZihDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICRwcm9taXNlUmVzb2x2ZSA9IGFDYWxsYWJsZShDLnJlc29sdmUpO1xuICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICBpdGVyYXRlKGl0ZXJhYmxlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgaW5kZXggPSBjb3VudGVyKys7XG4gICAgICAgIHZhciBhbHJlYWR5Q2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHJlbWFpbmluZysrO1xuICAgICAgICBjYWxsKCRwcm9taXNlUmVzb2x2ZSwgQywgcHJvbWlzZSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAoYWxyZWFkeUNhbGxlZCkgcmV0dXJuO1xuICAgICAgICAgIGFscmVhZHlDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgIHZhbHVlc1tpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmVycm9yKSByZWplY3QocmVzdWx0LnZhbHVlKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucHJvbWlzZS5hbGwuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnByb21pc2UuY2F0Y2guanMiOigoX191bnVzZWRfd2VicGFja19tb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9leHBvcnQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9leHBvcnQuanNcIik7XG52YXIgSVNfUFVSRSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pcy1wdXJlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtcHVyZS5qc1wiKTtcbnZhciBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24gKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbi5qc1wiKS5DT05TVFJVQ1RPUik7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3IuanNcIik7XG52YXIgZ2V0QnVpbHRJbiA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4gKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtYnVpbHQtaW4uanNcIik7XG52YXIgaXNDYWxsYWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pcy1jYWxsYWJsZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWNhbGxhYmxlLmpzXCIpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLmpzXCIpO1xuXG52YXIgTmF0aXZlUHJvbWlzZVByb3RvdHlwZSA9IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciAmJiBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG4vLyBgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2hgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnByb3RvdHlwZS5jYXRjaFxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiwgcmVhbDogdHJ1ZSB9LCB7XG4gICdjYXRjaCc6IGZ1bmN0aW9uIChvblJlamVjdGVkKSB7XG4gICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xuICB9XG59KTtcblxuLy8gbWFrZXMgc3VyZSB0aGF0IG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXMgYFByb21pc2UjY2F0Y2hgIHByb3Blcmx5IHdvcmtzIHdpdGggcGF0Y2hlZCBgUHJvbWlzZSN0aGVuYFxuaWYgKCFJU19QVVJFICYmIGlzQ2FsbGFibGUoTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKSkge1xuICB2YXIgbWV0aG9kID0gZ2V0QnVpbHRJbignUHJvbWlzZScpLnByb3RvdHlwZVsnY2F0Y2gnXTtcbiAgaWYgKE5hdGl2ZVByb21pc2VQcm90b3R5cGVbJ2NhdGNoJ10gIT09IG1ldGhvZCkge1xuICAgIGRlZmluZUJ1aWx0SW4oTmF0aXZlUHJvbWlzZVByb3RvdHlwZSwgJ2NhdGNoJywgbWV0aG9kLCB7IHVuc2FmZTogdHJ1ZSB9KTtcbiAgfVxufVxuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5wcm9taXNlLmNhdGNoLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5wcm9taXNlLmNvbnN0cnVjdG9yLmpzIjooKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyICQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZXhwb3J0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzXCIpO1xudmFyIElTX1BVUkUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaXMtcHVyZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXB1cmUuanNcIik7XG52YXIgSVNfTk9ERSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlLmpzXCIpO1xudmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9nbG9iYWwgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwuanNcIik7XG52YXIgY2FsbCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbC5qc1wiKTtcbnZhciBkZWZpbmVCdWlsdEluID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbiAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi5qc1wiKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9vYmplY3Qtc2V0LXByb3RvdHlwZS1vZiAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mLmpzXCIpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcuanNcIik7XG52YXIgc2V0U3BlY2llcyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9zZXQtc3BlY2llcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1zcGVjaWVzLmpzXCIpO1xudmFyIGFDYWxsYWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9hLWNhbGxhYmxlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1jYWxsYWJsZS5qc1wiKTtcbnZhciBpc0NhbGxhYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY2FsbGFibGUuanNcIik7XG52YXIgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaXMtb2JqZWN0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtb2JqZWN0LmpzXCIpO1xudmFyIGFuSW5zdGFuY2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hbi1pbnN0YW5jZS5qc1wiKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvciAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3IuanNcIik7XG52YXIgdGFzayA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvdGFzayAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3Rhc2suanNcIikuc2V0KTtcbnZhciBtaWNyb3Rhc2sgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvbWljcm90YXNrICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbWljcm90YXNrLmpzXCIpO1xudmFyIGhvc3RSZXBvcnRFcnJvcnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaG9zdC1yZXBvcnQtZXJyb3JzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaG9zdC1yZXBvcnQtZXJyb3JzLmpzXCIpO1xudmFyIHBlcmZvcm0gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvcGVyZm9ybSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3BlcmZvcm0uanNcIik7XG52YXIgUXVldWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvcXVldWUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9xdWV1ZS5qc1wiKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUuanNcIik7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3IuanNcIik7XG52YXIgUHJvbWlzZUNvbnN0cnVjdG9yRGV0ZWN0aW9uID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24uanNcIik7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHkuanNcIik7XG5cbnZhciBQUk9NSVNFID0gJ1Byb21pc2UnO1xudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gUHJvbWlzZUNvbnN0cnVjdG9yRGV0ZWN0aW9uLkNPTlNUUlVDVE9SO1xudmFyIE5BVElWRV9QUk9NSVNFX1JFSkVDVElPTl9FVkVOVCA9IFByb21pc2VDb25zdHJ1Y3RvckRldGVjdGlvbi5SRUpFQ1RJT05fRVZFTlQ7XG52YXIgTkFUSVZFX1BST01JU0VfU1VCQ0xBU1NJTkcgPSBQcm9taXNlQ29uc3RydWN0b3JEZXRlY3Rpb24uU1VCQ0xBU1NJTkc7XG52YXIgZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihQUk9NSVNFKTtcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgTmF0aXZlUHJvbWlzZVByb3RvdHlwZSA9IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciAmJiBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IucHJvdG90eXBlO1xudmFyIFByb21pc2VDb25zdHJ1Y3RvciA9IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvcjtcbnZhciBQcm9taXNlUHJvdG90eXBlID0gTmF0aXZlUHJvbWlzZVByb3RvdHlwZTtcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIGRvY3VtZW50ID0gZ2xvYmFsLmRvY3VtZW50O1xudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmY7XG52YXIgbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHk7XG5cbnZhciBESVNQQVRDSF9FVkVOVCA9ICEhKGRvY3VtZW50ICYmIGRvY3VtZW50LmNyZWF0ZUV2ZW50ICYmIGdsb2JhbC5kaXNwYXRjaEV2ZW50KTtcbnZhciBVTkhBTkRMRURfUkVKRUNUSU9OID0gJ3VuaGFuZGxlZHJlamVjdGlvbic7XG52YXIgUkVKRUNUSU9OX0hBTkRMRUQgPSAncmVqZWN0aW9uaGFuZGxlZCc7XG52YXIgUEVORElORyA9IDA7XG52YXIgRlVMRklMTEVEID0gMTtcbnZhciBSRUpFQ1RFRCA9IDI7XG52YXIgSEFORExFRCA9IDE7XG52YXIgVU5IQU5ETEVEID0gMjtcblxudmFyIEludGVybmFsLCBPd25Qcm9taXNlQ2FwYWJpbGl0eSwgUHJvbWlzZVdyYXBwZXIsIG5hdGl2ZVRoZW47XG5cbi8vIGhlbHBlcnNcbnZhciBpc1RoZW5hYmxlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciB0aGVuO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmIGlzQ2FsbGFibGUodGhlbiA9IGl0LnRoZW4pID8gdGhlbiA6IGZhbHNlO1xufTtcblxudmFyIGNhbGxSZWFjdGlvbiA9IGZ1bmN0aW9uIChyZWFjdGlvbiwgc3RhdGUpIHtcbiAgdmFyIHZhbHVlID0gc3RhdGUudmFsdWU7XG4gIHZhciBvayA9IHN0YXRlLnN0YXRlID09IEZVTEZJTExFRDtcbiAgdmFyIGhhbmRsZXIgPSBvayA/IHJlYWN0aW9uLm9rIDogcmVhY3Rpb24uZmFpbDtcbiAgdmFyIHJlc29sdmUgPSByZWFjdGlvbi5yZXNvbHZlO1xuICB2YXIgcmVqZWN0ID0gcmVhY3Rpb24ucmVqZWN0O1xuICB2YXIgZG9tYWluID0gcmVhY3Rpb24uZG9tYWluO1xuICB2YXIgcmVzdWx0LCB0aGVuLCBleGl0ZWQ7XG4gIHRyeSB7XG4gICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgIGlmICghb2spIHtcbiAgICAgICAgaWYgKHN0YXRlLnJlamVjdGlvbiA9PT0gVU5IQU5ETEVEKSBvbkhhbmRsZVVuaGFuZGxlZChzdGF0ZSk7XG4gICAgICAgIHN0YXRlLnJlamVjdGlvbiA9IEhBTkRMRUQ7XG4gICAgICB9XG4gICAgICBpZiAoaGFuZGxlciA9PT0gdHJ1ZSkgcmVzdWx0ID0gdmFsdWU7XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKGRvbWFpbikgZG9tYWluLmVudGVyKCk7XG4gICAgICAgIHJlc3VsdCA9IGhhbmRsZXIodmFsdWUpOyAvLyBjYW4gdGhyb3dcbiAgICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICAgIGRvbWFpbi5leGl0KCk7XG4gICAgICAgICAgZXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHJlc3VsdCA9PT0gcmVhY3Rpb24ucHJvbWlzZSkge1xuICAgICAgICByZWplY3QoVHlwZUVycm9yKCdQcm9taXNlLWNoYWluIGN5Y2xlJykpO1xuICAgICAgfSBlbHNlIGlmICh0aGVuID0gaXNUaGVuYWJsZShyZXN1bHQpKSB7XG4gICAgICAgIGNhbGwodGhlbiwgcmVzdWx0LCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSBlbHNlIHJlc29sdmUocmVzdWx0KTtcbiAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZG9tYWluICYmICFleGl0ZWQpIGRvbWFpbi5leGl0KCk7XG4gICAgcmVqZWN0KGVycm9yKTtcbiAgfVxufTtcblxudmFyIG5vdGlmeSA9IGZ1bmN0aW9uIChzdGF0ZSwgaXNSZWplY3QpIHtcbiAgaWYgKHN0YXRlLm5vdGlmaWVkKSByZXR1cm47XG4gIHN0YXRlLm5vdGlmaWVkID0gdHJ1ZTtcbiAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVhY3Rpb25zID0gc3RhdGUucmVhY3Rpb25zO1xuICAgIHZhciByZWFjdGlvbjtcbiAgICB3aGlsZSAocmVhY3Rpb24gPSByZWFjdGlvbnMuZ2V0KCkpIHtcbiAgICAgIGNhbGxSZWFjdGlvbihyZWFjdGlvbiwgc3RhdGUpO1xuICAgIH1cbiAgICBzdGF0ZS5ub3RpZmllZCA9IGZhbHNlO1xuICAgIGlmIChpc1JlamVjdCAmJiAhc3RhdGUucmVqZWN0aW9uKSBvblVuaGFuZGxlZChzdGF0ZSk7XG4gIH0pO1xufTtcblxudmFyIGRpc3BhdGNoRXZlbnQgPSBmdW5jdGlvbiAobmFtZSwgcHJvbWlzZSwgcmVhc29uKSB7XG4gIHZhciBldmVudCwgaGFuZGxlcjtcbiAgaWYgKERJU1BBVENIX0VWRU5UKSB7XG4gICAgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKTtcbiAgICBldmVudC5wcm9taXNlID0gcHJvbWlzZTtcbiAgICBldmVudC5yZWFzb24gPSByZWFzb247XG4gICAgZXZlbnQuaW5pdEV2ZW50KG5hbWUsIGZhbHNlLCB0cnVlKTtcbiAgICBnbG9iYWwuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gIH0gZWxzZSBldmVudCA9IHsgcHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiByZWFzb24gfTtcbiAgaWYgKCFOQVRJVkVfUFJPTUlTRV9SRUpFQ1RJT05fRVZFTlQgJiYgKGhhbmRsZXIgPSBnbG9iYWxbJ29uJyArIG5hbWVdKSkgaGFuZGxlcihldmVudCk7XG4gIGVsc2UgaWYgKG5hbWUgPT09IFVOSEFORExFRF9SRUpFQ1RJT04pIGhvc3RSZXBvcnRFcnJvcnMoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHJlYXNvbik7XG59O1xuXG52YXIgb25VbmhhbmRsZWQgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgY2FsbCh0YXNrLCBnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvbWlzZSA9IHN0YXRlLmZhY2FkZTtcbiAgICB2YXIgdmFsdWUgPSBzdGF0ZS52YWx1ZTtcbiAgICB2YXIgSVNfVU5IQU5ETEVEID0gaXNVbmhhbmRsZWQoc3RhdGUpO1xuICAgIHZhciByZXN1bHQ7XG4gICAgaWYgKElTX1VOSEFORExFRCkge1xuICAgICAgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChJU19OT0RFKSB7XG4gICAgICAgICAgcHJvY2Vzcy5lbWl0KCd1bmhhbmRsZWRSZWplY3Rpb24nLCB2YWx1ZSwgcHJvbWlzZSk7XG4gICAgICAgIH0gZWxzZSBkaXNwYXRjaEV2ZW50KFVOSEFORExFRF9SRUpFQ1RJT04sIHByb21pc2UsIHZhbHVlKTtcbiAgICAgIH0pO1xuICAgICAgLy8gQnJvd3NlcnMgc2hvdWxkIG5vdCB0cmlnZ2VyIGByZWplY3Rpb25IYW5kbGVkYCBldmVudCBpZiBpdCB3YXMgaGFuZGxlZCBoZXJlLCBOb2RlSlMgLSBzaG91bGRcbiAgICAgIHN0YXRlLnJlamVjdGlvbiA9IElTX05PREUgfHwgaXNVbmhhbmRsZWQoc3RhdGUpID8gVU5IQU5ETEVEIDogSEFORExFRDtcbiAgICAgIGlmIChyZXN1bHQuZXJyb3IpIHRocm93IHJlc3VsdC52YWx1ZTtcbiAgICB9XG4gIH0pO1xufTtcblxudmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gIHJldHVybiBzdGF0ZS5yZWplY3Rpb24gIT09IEhBTkRMRUQgJiYgIXN0YXRlLnBhcmVudDtcbn07XG5cbnZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICBjYWxsKHRhc2ssIGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gc3RhdGUuZmFjYWRlO1xuICAgIGlmIChJU19OT0RFKSB7XG4gICAgICBwcm9jZXNzLmVtaXQoJ3JlamVjdGlvbkhhbmRsZWQnLCBwcm9taXNlKTtcbiAgICB9IGVsc2UgZGlzcGF0Y2hFdmVudChSRUpFQ1RJT05fSEFORExFRCwgcHJvbWlzZSwgc3RhdGUudmFsdWUpO1xuICB9KTtcbn07XG5cbnZhciBiaW5kID0gZnVuY3Rpb24gKGZuLCBzdGF0ZSwgdW53cmFwKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBmbihzdGF0ZSwgdmFsdWUsIHVud3JhcCk7XG4gIH07XG59O1xuXG52YXIgaW50ZXJuYWxSZWplY3QgPSBmdW5jdGlvbiAoc3RhdGUsIHZhbHVlLCB1bndyYXApIHtcbiAgaWYgKHN0YXRlLmRvbmUpIHJldHVybjtcbiAgc3RhdGUuZG9uZSA9IHRydWU7XG4gIGlmICh1bndyYXApIHN0YXRlID0gdW53cmFwO1xuICBzdGF0ZS52YWx1ZSA9IHZhbHVlO1xuICBzdGF0ZS5zdGF0ZSA9IFJFSkVDVEVEO1xuICBub3RpZnkoc3RhdGUsIHRydWUpO1xufTtcblxudmFyIGludGVybmFsUmVzb2x2ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgdmFsdWUsIHVud3JhcCkge1xuICBpZiAoc3RhdGUuZG9uZSkgcmV0dXJuO1xuICBzdGF0ZS5kb25lID0gdHJ1ZTtcbiAgaWYgKHVud3JhcCkgc3RhdGUgPSB1bndyYXA7XG4gIHRyeSB7XG4gICAgaWYgKHN0YXRlLmZhY2FkZSA9PT0gdmFsdWUpIHRocm93IFR5cGVFcnJvcihcIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmXCIpO1xuICAgIHZhciB0aGVuID0gaXNUaGVuYWJsZSh2YWx1ZSk7XG4gICAgaWYgKHRoZW4pIHtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB3cmFwcGVyID0geyBkb25lOiBmYWxzZSB9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNhbGwodGhlbiwgdmFsdWUsXG4gICAgICAgICAgICBiaW5kKGludGVybmFsUmVzb2x2ZSwgd3JhcHBlciwgc3RhdGUpLFxuICAgICAgICAgICAgYmluZChpbnRlcm5hbFJlamVjdCwgd3JhcHBlciwgc3RhdGUpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBpbnRlcm5hbFJlamVjdCh3cmFwcGVyLCBlcnJvciwgc3RhdGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGUudmFsdWUgPSB2YWx1ZTtcbiAgICAgIHN0YXRlLnN0YXRlID0gRlVMRklMTEVEO1xuICAgICAgbm90aWZ5KHN0YXRlLCBmYWxzZSk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGludGVybmFsUmVqZWN0KHsgZG9uZTogZmFsc2UgfSwgZXJyb3IsIHN0YXRlKTtcbiAgfVxufTtcblxuLy8gY29uc3RydWN0b3IgcG9seWZpbGxcbmlmIChGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUikge1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICBQcm9taXNlQ29uc3RydWN0b3IgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCBQcm9taXNlUHJvdG90eXBlKTtcbiAgICBhQ2FsbGFibGUoZXhlY3V0b3IpO1xuICAgIGNhbGwoSW50ZXJuYWwsIHRoaXMpO1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUHJvbWlzZVN0YXRlKHRoaXMpO1xuICAgIHRyeSB7XG4gICAgICBleGVjdXRvcihiaW5kKGludGVybmFsUmVzb2x2ZSwgc3RhdGUpLCBiaW5kKGludGVybmFsUmVqZWN0LCBzdGF0ZSkpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpbnRlcm5hbFJlamVjdChzdGF0ZSwgZXJyb3IpO1xuICAgIH1cbiAgfTtcblxuICBQcm9taXNlUHJvdG90eXBlID0gUHJvbWlzZUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMgLS0gcmVxdWlyZWQgZm9yIGAubGVuZ3RoYFxuICBJbnRlcm5hbCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICAgIHR5cGU6IFBST01JU0UsXG4gICAgICBkb25lOiBmYWxzZSxcbiAgICAgIG5vdGlmaWVkOiBmYWxzZSxcbiAgICAgIHBhcmVudDogZmFsc2UsXG4gICAgICByZWFjdGlvbnM6IG5ldyBRdWV1ZSgpLFxuICAgICAgcmVqZWN0aW9uOiBmYWxzZSxcbiAgICAgIHN0YXRlOiBQRU5ESU5HLFxuICAgICAgdmFsdWU6IHVuZGVmaW5lZFxuICAgIH0pO1xuICB9O1xuXG4gIC8vIGBQcm9taXNlLnByb3RvdHlwZS50aGVuYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnByb3RvdHlwZS50aGVuXG4gIEludGVybmFsLnByb3RvdHlwZSA9IGRlZmluZUJ1aWx0SW4oUHJvbWlzZVByb3RvdHlwZSwgJ3RoZW4nLCBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUodGhpcyk7XG4gICAgdmFyIHJlYWN0aW9uID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsIFByb21pc2VDb25zdHJ1Y3RvcikpO1xuICAgIHN0YXRlLnBhcmVudCA9IHRydWU7XG4gICAgcmVhY3Rpb24ub2sgPSBpc0NhbGxhYmxlKG9uRnVsZmlsbGVkKSA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICByZWFjdGlvbi5mYWlsID0gaXNDYWxsYWJsZShvblJlamVjdGVkKSAmJiBvblJlamVjdGVkO1xuICAgIHJlYWN0aW9uLmRvbWFpbiA9IElTX05PREUgPyBwcm9jZXNzLmRvbWFpbiA6IHVuZGVmaW5lZDtcbiAgICBpZiAoc3RhdGUuc3RhdGUgPT0gUEVORElORykgc3RhdGUucmVhY3Rpb25zLmFkZChyZWFjdGlvbik7XG4gICAgZWxzZSBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbFJlYWN0aW9uKHJlYWN0aW9uLCBzdGF0ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gIH0pO1xuXG4gIE93blByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gbmV3IEludGVybmFsKCk7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUocHJvbWlzZSk7XG4gICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgICB0aGlzLnJlc29sdmUgPSBiaW5kKGludGVybmFsUmVzb2x2ZSwgc3RhdGUpO1xuICAgIHRoaXMucmVqZWN0ID0gYmluZChpbnRlcm5hbFJlamVjdCwgc3RhdGUpO1xuICB9O1xuXG4gIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gICAgcmV0dXJuIEMgPT09IFByb21pc2VDb25zdHJ1Y3RvciB8fCBDID09PSBQcm9taXNlV3JhcHBlclxuICAgICAgPyBuZXcgT3duUHJvbWlzZUNhcGFiaWxpdHkoQylcbiAgICAgIDogbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICB9O1xuXG4gIGlmICghSVNfUFVSRSAmJiBpc0NhbGxhYmxlKE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvcikgJiYgTmF0aXZlUHJvbWlzZVByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSkge1xuICAgIG5hdGl2ZVRoZW4gPSBOYXRpdmVQcm9taXNlUHJvdG90eXBlLnRoZW47XG5cbiAgICBpZiAoIU5BVElWRV9QUk9NSVNFX1NVQkNMQVNTSU5HKSB7XG4gICAgICAvLyBtYWtlIGBQcm9taXNlI3RoZW5gIHJldHVybiBhIHBvbHlmaWxsZWQgYFByb21pc2VgIGZvciBuYXRpdmUgcHJvbWlzZS1iYXNlZCBBUElzXG4gICAgICBkZWZpbmVCdWlsdEluKE5hdGl2ZVByb21pc2VQcm90b3R5cGUsICd0aGVuJywgZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZUNvbnN0cnVjdG9yKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBjYWxsKG5hdGl2ZVRoZW4sIHRoYXQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pLnRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpO1xuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzY0MFxuICAgICAgfSwgeyB1bnNhZmU6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgLy8gbWFrZSBgLmNvbnN0cnVjdG9yID09PSBQcm9taXNlYCB3b3JrIGZvciBuYXRpdmUgcHJvbWlzZS1iYXNlZCBBUElzXG4gICAgdHJ5IHtcbiAgICAgIGRlbGV0ZSBOYXRpdmVQcm9taXNlUHJvdG90eXBlLmNvbnN0cnVjdG9yO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cblxuICAgIC8vIG1ha2UgYGluc3RhbmNlb2YgUHJvbWlzZWAgd29yayBmb3IgbmF0aXZlIHByb21pc2UtYmFzZWQgQVBJc1xuICAgIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgICAgc2V0UHJvdG90eXBlT2YoTmF0aXZlUHJvbWlzZVByb3RvdHlwZSwgUHJvbWlzZVByb3RvdHlwZSk7XG4gICAgfVxuICB9XG59XG5cbiQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCB3cmFwOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SIH0sIHtcbiAgUHJvbWlzZTogUHJvbWlzZUNvbnN0cnVjdG9yXG59KTtcblxuc2V0VG9TdHJpbmdUYWcoUHJvbWlzZUNvbnN0cnVjdG9yLCBQUk9NSVNFLCBmYWxzZSwgdHJ1ZSk7XG5zZXRTcGVjaWVzKFBST01JU0UpO1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5wcm9taXNlLmNvbnN0cnVjdG9yLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5wcm9taXNlLmZpbmFsbHkuanMiOigoX191bnVzZWRfd2VicGFja19tb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9leHBvcnQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9leHBvcnQuanNcIik7XG52YXIgSVNfUFVSRSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pcy1wdXJlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtcHVyZS5qc1wiKTtcbnZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3Rvci5qc1wiKTtcbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mYWlscyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzXCIpO1xudmFyIGdldEJ1aWx0SW4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLmpzXCIpO1xudmFyIGlzQ2FsbGFibGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qc1wiKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvciAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3IuanNcIik7XG52YXIgcHJvbWlzZVJlc29sdmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvcHJvbWlzZS1yZXNvbHZlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcHJvbWlzZS1yZXNvbHZlLmpzXCIpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLmpzXCIpO1xuXG52YXIgTmF0aXZlUHJvbWlzZVByb3RvdHlwZSA9IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciAmJiBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG4vLyBTYWZhcmkgYnVnIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDA4MjlcbnZhciBOT05fR0VORVJJQyA9ICEhTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tdGhlbmFibGUgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgTmF0aXZlUHJvbWlzZVByb3RvdHlwZVsnZmluYWxseSddLmNhbGwoeyB0aGVuOiBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0gfSwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbn0pO1xuXG4vLyBgUHJvbWlzZS5wcm90b3R5cGUuZmluYWxseWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucHJvdG90eXBlLmZpbmFsbHlcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgcHJvdG86IHRydWUsIHJlYWw6IHRydWUsIGZvcmNlZDogTk9OX0dFTkVSSUMgfSwge1xuICAnZmluYWxseSc6IGZ1bmN0aW9uIChvbkZpbmFsbHkpIHtcbiAgICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBnZXRCdWlsdEluKCdQcm9taXNlJykpO1xuICAgIHZhciBpc0Z1bmN0aW9uID0gaXNDYWxsYWJsZShvbkZpbmFsbHkpO1xuICAgIHJldHVybiB0aGlzLnRoZW4oXG4gICAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHg7IH0pO1xuICAgICAgfSA6IG9uRmluYWxseSxcbiAgICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoZSkge1xuICAgICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkgeyB0aHJvdyBlOyB9KTtcbiAgICAgIH0gOiBvbkZpbmFsbHlcbiAgICApO1xuICB9XG59KTtcblxuLy8gbWFrZXMgc3VyZSB0aGF0IG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXMgYFByb21pc2UjZmluYWxseWAgcHJvcGVybHkgd29ya3Mgd2l0aCBwYXRjaGVkIGBQcm9taXNlI3RoZW5gXG5pZiAoIUlTX1BVUkUgJiYgaXNDYWxsYWJsZShOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IpKSB7XG4gIHZhciBtZXRob2QgPSBnZXRCdWlsdEluKCdQcm9taXNlJykucHJvdG90eXBlWydmaW5hbGx5J107XG4gIGlmIChOYXRpdmVQcm9taXNlUHJvdG90eXBlWydmaW5hbGx5J10gIT09IG1ldGhvZCkge1xuICAgIGRlZmluZUJ1aWx0SW4oTmF0aXZlUHJvbWlzZVByb3RvdHlwZSwgJ2ZpbmFsbHknLCBtZXRob2QsIHsgdW5zYWZlOiB0cnVlIH0pO1xuICB9XG59XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnByb21pc2UuZmluYWxseS5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucHJvbWlzZS5qcyI6KChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbi8vIFRPRE86IFJlbW92ZSB0aGlzIG1vZHVsZSBmcm9tIGBjb3JlLWpzQDRgIHNpbmNlIGl0J3Mgc3BsaXQgdG8gbW9kdWxlcyBsaXN0ZWQgYmVsb3dcbl9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL21vZHVsZXMvZXMucHJvbWlzZS5jb25zdHJ1Y3RvciAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5wcm9taXNlLmNvbnN0cnVjdG9yLmpzXCIpO1xuX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbW9kdWxlcy9lcy5wcm9taXNlLmFsbCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5wcm9taXNlLmFsbC5qc1wiKTtcbl9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL21vZHVsZXMvZXMucHJvbWlzZS5jYXRjaCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5wcm9taXNlLmNhdGNoLmpzXCIpO1xuX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbW9kdWxlcy9lcy5wcm9taXNlLnJhY2UgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucHJvbWlzZS5yYWNlLmpzXCIpO1xuX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbW9kdWxlcy9lcy5wcm9taXNlLnJlamVjdCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5wcm9taXNlLnJlamVjdC5qc1wiKTtcbl9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL21vZHVsZXMvZXMucHJvbWlzZS5yZXNvbHZlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnByb21pc2UucmVzb2x2ZS5qc1wiKTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucHJvbWlzZS5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucHJvbWlzZS5yYWNlLmpzIjooKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyICQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZXhwb3J0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzXCIpO1xudmFyIGNhbGwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanNcIik7XG52YXIgYUNhbGxhYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzXCIpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHkgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5LmpzXCIpO1xudmFyIHBlcmZvcm0gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvcGVyZm9ybSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3BlcmZvcm0uanNcIik7XG52YXIgaXRlcmF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pdGVyYXRlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0ZS5qc1wiKTtcbnZhciBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbiAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3Byb21pc2Utc3RhdGljcy1pbmNvcnJlY3QtaXRlcmF0aW9uLmpzXCIpO1xuXG4vLyBgUHJvbWlzZS5yYWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5yYWNlXG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04gfSwge1xuICByYWNlOiBmdW5jdGlvbiByYWNlKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZihDKTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICRwcm9taXNlUmVzb2x2ZSA9IGFDYWxsYWJsZShDLnJlc29sdmUpO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgY2FsbCgkcHJvbWlzZVJlc29sdmUsIEMsIHByb21pc2UpLnRoZW4oY2FwYWJpbGl0eS5yZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnByb21pc2UucmFjZS5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucHJvbWlzZS5yZWplY3QuanMiOigoX191bnVzZWRfd2VicGFja19tb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9leHBvcnQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9leHBvcnQuanNcIik7XG52YXIgY2FsbCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbC5qc1wiKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbmV3LXByb21pc2UtY2FwYWJpbGl0eS5qc1wiKTtcbnZhciBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24gKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbi5qc1wiKS5DT05TVFJVQ1RPUik7XG5cbi8vIGBQcm9taXNlLnJlamVjdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucmVqZWN0XG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgfSwge1xuICByZWplY3Q6IGZ1bmN0aW9uIHJlamVjdChyKSB7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKHRoaXMpO1xuICAgIGNhbGwoY2FwYWJpbGl0eS5yZWplY3QsIHVuZGVmaW5lZCwgcik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnByb21pc2UucmVqZWN0LmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5wcm9taXNlLnJlc29sdmUuanMiOigoX191bnVzZWRfd2VicGFja19tb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9leHBvcnQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9leHBvcnQuanNcIik7XG52YXIgZ2V0QnVpbHRJbiA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4gKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtYnVpbHQtaW4uanNcIik7XG52YXIgSVNfUFVSRSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pcy1wdXJlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtcHVyZS5qc1wiKTtcbnZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3Rvci5qc1wiKTtcbnZhciBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24gKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbi5qc1wiKS5DT05TVFJVQ1RPUik7XG52YXIgcHJvbWlzZVJlc29sdmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvcHJvbWlzZS1yZXNvbHZlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcHJvbWlzZS1yZXNvbHZlLmpzXCIpO1xuXG52YXIgUHJvbWlzZUNvbnN0cnVjdG9yV3JhcHBlciA9IGdldEJ1aWx0SW4oJ1Byb21pc2UnKTtcbnZhciBDSEVDS19XUkFQUEVSID0gSVNfUFVSRSAmJiAhRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1I7XG5cbi8vIGBQcm9taXNlLnJlc29sdmVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnJlc29sdmVcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBJU19QVVJFIHx8IEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SIH0sIHtcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKENIRUNLX1dSQVBQRVIgJiYgdGhpcyA9PT0gUHJvbWlzZUNvbnN0cnVjdG9yV3JhcHBlciA/IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA6IHRoaXMsIHgpO1xuICB9XG59KTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucHJvbWlzZS5yZXNvbHZlLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWZsZWN0LnRvLXN0cmluZy10YWcuanMiOigoX191bnVzZWRfd2VicGFja19tb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9leHBvcnQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9leHBvcnQuanNcIik7XG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2dsb2JhbCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dsb2JhbC5qc1wiKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnLmpzXCIpO1xuXG4kKHsgZ2xvYmFsOiB0cnVlIH0sIHsgUmVmbGVjdDoge30gfSk7XG5cbi8vIFJlZmxlY3RbQEB0b1N0cmluZ1RhZ10gcHJvcGVydHlcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVmbGVjdC1AQHRvc3RyaW5ndGFnXG5zZXRUb1N0cmluZ1RhZyhnbG9iYWwuUmVmbGVjdCwgJ1JlZmxlY3QnLCB0cnVlKTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVmbGVjdC50by1zdHJpbmctdGFnLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuY29uc3RydWN0b3IuanMiOigoX191bnVzZWRfd2VicGFja19tb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgREVTQ1JJUFRPUlMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZXNjcmlwdG9ycy5qc1wiKTtcbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZ2xvYmFsICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2xvYmFsLmpzXCIpO1xudmFyIHVuY3VycnlUaGlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qc1wiKTtcbnZhciBpc0ZvcmNlZCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pcy1mb3JjZWQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1mb3JjZWQuanNcIik7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaW5oZXJpdC1pZi1yZXF1aXJlZCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luaGVyaXQtaWYtcmVxdWlyZWQuanNcIik7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eS5qc1wiKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gKF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzXCIpLmYpO1xudmFyIGlzUHJvdG90eXBlT2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZiAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanNcIik7XG52YXIgaXNSZWdFeHAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaXMtcmVnZXhwICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtcmVnZXhwLmpzXCIpO1xudmFyIHRvU3RyaW5nID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3RvLXN0cmluZyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXN0cmluZy5qc1wiKTtcbnZhciBnZXRSZWdFeHBGbGFncyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9yZWdleHAtZ2V0LWZsYWdzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWdldC1mbGFncy5qc1wiKTtcbnZhciBzdGlja3lIZWxwZXJzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3JlZ2V4cC1zdGlja3ktaGVscGVycyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1zdGlja3ktaGVscGVycy5qc1wiKTtcbnZhciBwcm94eUFjY2Vzc29yID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3Byb3h5LWFjY2Vzc29yICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcHJveHktYWNjZXNzb3IuanNcIik7XG52YXIgZGVmaW5lQnVpbHRJbiA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4gKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanNcIik7XG52YXIgZmFpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZmFpbHMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mYWlscy5qc1wiKTtcbnZhciBoYXNPd24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkuanNcIik7XG52YXIgZW5mb3JjZUludGVybmFsU3RhdGUgPSAoX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUuanNcIikuZW5mb3JjZSk7XG52YXIgc2V0U3BlY2llcyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9zZXQtc3BlY2llcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC1zcGVjaWVzLmpzXCIpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLmpzXCIpO1xudmFyIFVOU1VQUE9SVEVEX0RPVF9BTEwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvcmVnZXhwLXVuc3VwcG9ydGVkLWRvdC1hbGwgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtZG90LWFsbC5qc1wiKTtcbnZhciBVTlNVUFBPUlRFRF9OQ0cgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvcmVnZXhwLXVuc3VwcG9ydGVkLW5jZyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC11bnN1cHBvcnRlZC1uY2cuanNcIik7XG5cbnZhciBNQVRDSCA9IHdlbGxLbm93blN5bWJvbCgnbWF0Y2gnKTtcbnZhciBOYXRpdmVSZWdFeHAgPSBnbG9iYWwuUmVnRXhwO1xudmFyIFJlZ0V4cFByb3RvdHlwZSA9IE5hdGl2ZVJlZ0V4cC5wcm90b3R5cGU7XG52YXIgU3ludGF4RXJyb3IgPSBnbG9iYWwuU3ludGF4RXJyb3I7XG52YXIgZXhlYyA9IHVuY3VycnlUaGlzKFJlZ0V4cFByb3RvdHlwZS5leGVjKTtcbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBzdHJpbmdJbmRleE9mID0gdW5jdXJyeVRoaXMoJycuaW5kZXhPZik7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG4vLyBUT0RPOiBVc2Ugb25seSBwcm9wZXIgUmVnRXhwSWRlbnRpZmllck5hbWVcbnZhciBJU19OQ0cgPSAvXlxcPzxbXlxcc1xcZCEjJSYqKzw9PkBeXVteXFxzISMlJiorPD0+QF5dKj4vO1xudmFyIHJlMSA9IC9hL2c7XG52YXIgcmUyID0gL2EvZztcblxuLy8gXCJuZXdcIiBzaG91bGQgY3JlYXRlIGEgbmV3IG9iamVjdCwgb2xkIHdlYmtpdCBidWdcbnZhciBDT1JSRUNUX05FVyA9IG5ldyBOYXRpdmVSZWdFeHAocmUxKSAhPT0gcmUxO1xuXG52YXIgTUlTU0VEX1NUSUNLWSA9IHN0aWNreUhlbHBlcnMuTUlTU0VEX1NUSUNLWTtcbnZhciBVTlNVUFBPUlRFRF9ZID0gc3RpY2t5SGVscGVycy5VTlNVUFBPUlRFRF9ZO1xuXG52YXIgQkFTRV9GT1JDRUQgPSBERVNDUklQVE9SUyAmJlxuICAoIUNPUlJFQ1RfTkVXIHx8IE1JU1NFRF9TVElDS1kgfHwgVU5TVVBQT1JURURfRE9UX0FMTCB8fCBVTlNVUFBPUlRFRF9OQ0cgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHJlMltNQVRDSF0gPSBmYWxzZTtcbiAgICAvLyBSZWdFeHAgY29uc3RydWN0b3IgY2FuIGFsdGVyIGZsYWdzIGFuZCBJc1JlZ0V4cCB3b3JrcyBjb3JyZWN0IHdpdGggQEBtYXRjaFxuICAgIHJldHVybiBOYXRpdmVSZWdFeHAocmUxKSAhPSByZTEgfHwgTmF0aXZlUmVnRXhwKHJlMikgPT0gcmUyIHx8IE5hdGl2ZVJlZ0V4cChyZTEsICdpJykgIT0gJy9hL2knO1xuICB9KSk7XG5cbnZhciBoYW5kbGVEb3RBbGwgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHZhciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIHZhciBicmFja2V0cyA9IGZhbHNlO1xuICB2YXIgY2hyO1xuICBmb3IgKDsgaW5kZXggPD0gbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY2hyID0gY2hhckF0KHN0cmluZywgaW5kZXgpO1xuICAgIGlmIChjaHIgPT09ICdcXFxcJykge1xuICAgICAgcmVzdWx0ICs9IGNociArIGNoYXJBdChzdHJpbmcsICsraW5kZXgpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmICghYnJhY2tldHMgJiYgY2hyID09PSAnLicpIHtcbiAgICAgIHJlc3VsdCArPSAnW1xcXFxzXFxcXFNdJztcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGNociA9PT0gJ1snKSB7XG4gICAgICAgIGJyYWNrZXRzID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoY2hyID09PSAnXScpIHtcbiAgICAgICAgYnJhY2tldHMgPSBmYWxzZTtcbiAgICAgIH0gcmVzdWx0ICs9IGNocjtcbiAgICB9XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG5cbnZhciBoYW5kbGVOQ0cgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gIHZhciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIHZhciBuYW1lZCA9IFtdO1xuICB2YXIgbmFtZXMgPSB7fTtcbiAgdmFyIGJyYWNrZXRzID0gZmFsc2U7XG4gIHZhciBuY2cgPSBmYWxzZTtcbiAgdmFyIGdyb3VwaWQgPSAwO1xuICB2YXIgZ3JvdXBuYW1lID0gJyc7XG4gIHZhciBjaHI7XG4gIGZvciAoOyBpbmRleCA8PSBsZW5ndGg7IGluZGV4KyspIHtcbiAgICBjaHIgPSBjaGFyQXQoc3RyaW5nLCBpbmRleCk7XG4gICAgaWYgKGNociA9PT0gJ1xcXFwnKSB7XG4gICAgICBjaHIgPSBjaHIgKyBjaGFyQXQoc3RyaW5nLCArK2luZGV4KTtcbiAgICB9IGVsc2UgaWYgKGNociA9PT0gJ10nKSB7XG4gICAgICBicmFja2V0cyA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoIWJyYWNrZXRzKSBzd2l0Y2ggKHRydWUpIHtcbiAgICAgIGNhc2UgY2hyID09PSAnWyc6XG4gICAgICAgIGJyYWNrZXRzID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIGNociA9PT0gJygnOlxuICAgICAgICBpZiAoZXhlYyhJU19OQ0csIHN0cmluZ1NsaWNlKHN0cmluZywgaW5kZXggKyAxKSkpIHtcbiAgICAgICAgICBpbmRleCArPSAyO1xuICAgICAgICAgIG5jZyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ICs9IGNocjtcbiAgICAgICAgZ3JvdXBpZCsrO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIGNhc2UgY2hyID09PSAnPicgJiYgbmNnOlxuICAgICAgICBpZiAoZ3JvdXBuYW1lID09PSAnJyB8fCBoYXNPd24obmFtZXMsIGdyb3VwbmFtZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0ludmFsaWQgY2FwdHVyZSBncm91cCBuYW1lJyk7XG4gICAgICAgIH1cbiAgICAgICAgbmFtZXNbZ3JvdXBuYW1lXSA9IHRydWU7XG4gICAgICAgIG5hbWVkW25hbWVkLmxlbmd0aF0gPSBbZ3JvdXBuYW1lLCBncm91cGlkXTtcbiAgICAgICAgbmNnID0gZmFsc2U7XG4gICAgICAgIGdyb3VwbmFtZSA9ICcnO1xuICAgICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKG5jZykgZ3JvdXBuYW1lICs9IGNocjtcbiAgICBlbHNlIHJlc3VsdCArPSBjaHI7XG4gIH0gcmV0dXJuIFtyZXN1bHQsIG5hbWVkXTtcbn07XG5cbi8vIGBSZWdFeHBgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cC1jb25zdHJ1Y3RvclxuaWYgKGlzRm9yY2VkKCdSZWdFeHAnLCBCQVNFX0ZPUkNFRCkpIHtcbiAgdmFyIFJlZ0V4cFdyYXBwZXIgPSBmdW5jdGlvbiBSZWdFeHAocGF0dGVybiwgZmxhZ3MpIHtcbiAgICB2YXIgdGhpc0lzUmVnRXhwID0gaXNQcm90b3R5cGVPZihSZWdFeHBQcm90b3R5cGUsIHRoaXMpO1xuICAgIHZhciBwYXR0ZXJuSXNSZWdFeHAgPSBpc1JlZ0V4cChwYXR0ZXJuKTtcbiAgICB2YXIgZmxhZ3NBcmVVbmRlZmluZWQgPSBmbGFncyA9PT0gdW5kZWZpbmVkO1xuICAgIHZhciBncm91cHMgPSBbXTtcbiAgICB2YXIgcmF3UGF0dGVybiA9IHBhdHRlcm47XG4gICAgdmFyIHJhd0ZsYWdzLCBkb3RBbGwsIHN0aWNreSwgaGFuZGxlZCwgcmVzdWx0LCBzdGF0ZTtcblxuICAgIGlmICghdGhpc0lzUmVnRXhwICYmIHBhdHRlcm5Jc1JlZ0V4cCAmJiBmbGFnc0FyZVVuZGVmaW5lZCAmJiBwYXR0ZXJuLmNvbnN0cnVjdG9yID09PSBSZWdFeHBXcmFwcGVyKSB7XG4gICAgICByZXR1cm4gcGF0dGVybjtcbiAgICB9XG5cbiAgICBpZiAocGF0dGVybklzUmVnRXhwIHx8IGlzUHJvdG90eXBlT2YoUmVnRXhwUHJvdG90eXBlLCBwYXR0ZXJuKSkge1xuICAgICAgcGF0dGVybiA9IHBhdHRlcm4uc291cmNlO1xuICAgICAgaWYgKGZsYWdzQXJlVW5kZWZpbmVkKSBmbGFncyA9IGdldFJlZ0V4cEZsYWdzKHJhd1BhdHRlcm4pO1xuICAgIH1cblxuICAgIHBhdHRlcm4gPSBwYXR0ZXJuID09PSB1bmRlZmluZWQgPyAnJyA6IHRvU3RyaW5nKHBhdHRlcm4pO1xuICAgIGZsYWdzID0gZmxhZ3MgPT09IHVuZGVmaW5lZCA/ICcnIDogdG9TdHJpbmcoZmxhZ3MpO1xuICAgIHJhd1BhdHRlcm4gPSBwYXR0ZXJuO1xuXG4gICAgaWYgKFVOU1VQUE9SVEVEX0RPVF9BTEwgJiYgJ2RvdEFsbCcgaW4gcmUxKSB7XG4gICAgICBkb3RBbGwgPSAhIWZsYWdzICYmIHN0cmluZ0luZGV4T2YoZmxhZ3MsICdzJykgPiAtMTtcbiAgICAgIGlmIChkb3RBbGwpIGZsYWdzID0gcmVwbGFjZShmbGFncywgL3MvZywgJycpO1xuICAgIH1cblxuICAgIHJhd0ZsYWdzID0gZmxhZ3M7XG5cbiAgICBpZiAoTUlTU0VEX1NUSUNLWSAmJiAnc3RpY2t5JyBpbiByZTEpIHtcbiAgICAgIHN0aWNreSA9ICEhZmxhZ3MgJiYgc3RyaW5nSW5kZXhPZihmbGFncywgJ3knKSA+IC0xO1xuICAgICAgaWYgKHN0aWNreSAmJiBVTlNVUFBPUlRFRF9ZKSBmbGFncyA9IHJlcGxhY2UoZmxhZ3MsIC95L2csICcnKTtcbiAgICB9XG5cbiAgICBpZiAoVU5TVVBQT1JURURfTkNHKSB7XG4gICAgICBoYW5kbGVkID0gaGFuZGxlTkNHKHBhdHRlcm4pO1xuICAgICAgcGF0dGVybiA9IGhhbmRsZWRbMF07XG4gICAgICBncm91cHMgPSBoYW5kbGVkWzFdO1xuICAgIH1cblxuICAgIHJlc3VsdCA9IGluaGVyaXRJZlJlcXVpcmVkKE5hdGl2ZVJlZ0V4cChwYXR0ZXJuLCBmbGFncyksIHRoaXNJc1JlZ0V4cCA/IHRoaXMgOiBSZWdFeHBQcm90b3R5cGUsIFJlZ0V4cFdyYXBwZXIpO1xuXG4gICAgaWYgKGRvdEFsbCB8fCBzdGlja3kgfHwgZ3JvdXBzLmxlbmd0aCkge1xuICAgICAgc3RhdGUgPSBlbmZvcmNlSW50ZXJuYWxTdGF0ZShyZXN1bHQpO1xuICAgICAgaWYgKGRvdEFsbCkge1xuICAgICAgICBzdGF0ZS5kb3RBbGwgPSB0cnVlO1xuICAgICAgICBzdGF0ZS5yYXcgPSBSZWdFeHBXcmFwcGVyKGhhbmRsZURvdEFsbChwYXR0ZXJuKSwgcmF3RmxhZ3MpO1xuICAgICAgfVxuICAgICAgaWYgKHN0aWNreSkgc3RhdGUuc3RpY2t5ID0gdHJ1ZTtcbiAgICAgIGlmIChncm91cHMubGVuZ3RoKSBzdGF0ZS5ncm91cHMgPSBncm91cHM7XG4gICAgfVxuXG4gICAgaWYgKHBhdHRlcm4gIT09IHJhd1BhdHRlcm4pIHRyeSB7XG4gICAgICAvLyBmYWlscyBpbiBvbGQgZW5naW5lcywgYnV0IHdlIGhhdmUgbm8gYWx0ZXJuYXRpdmVzIGZvciB1bnN1cHBvcnRlZCByZWdleCBzeW50YXhcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShyZXN1bHQsICdzb3VyY2UnLCByYXdQYXR0ZXJuID09PSAnJyA/ICcoPzopJyA6IHJhd1BhdHRlcm4pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgZm9yICh2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoTmF0aXZlUmVnRXhwKSwgaW5kZXggPSAwOyBrZXlzLmxlbmd0aCA+IGluZGV4Oykge1xuICAgIHByb3h5QWNjZXNzb3IoUmVnRXhwV3JhcHBlciwgTmF0aXZlUmVnRXhwLCBrZXlzW2luZGV4KytdKTtcbiAgfVxuXG4gIFJlZ0V4cFByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlZ0V4cFdyYXBwZXI7XG4gIFJlZ0V4cFdyYXBwZXIucHJvdG90eXBlID0gUmVnRXhwUHJvdG90eXBlO1xuICBkZWZpbmVCdWlsdEluKGdsb2JhbCwgJ1JlZ0V4cCcsIFJlZ0V4cFdyYXBwZXIsIHsgY29uc3RydWN0b3I6IHRydWUgfSk7XG59XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LXJlZ2V4cC1AQHNwZWNpZXNcbnNldFNwZWNpZXMoJ1JlZ0V4cCcpO1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuY29uc3RydWN0b3IuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5kb3QtYWxsLmpzIjooKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIERFU0NSSVBUT1JTID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanNcIik7XG52YXIgVU5TVVBQT1JURURfRE9UX0FMTCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9yZWdleHAtdW5zdXBwb3J0ZWQtZG90LWFsbCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC11bnN1cHBvcnRlZC1kb3QtYWxsLmpzXCIpO1xudmFyIGNsYXNzb2YgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jbGFzc29mLXJhdy5qc1wiKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yLmpzXCIpO1xudmFyIGdldEludGVybmFsU3RhdGUgPSAoX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUuanNcIikuZ2V0KTtcblxudmFyIFJlZ0V4cFByb3RvdHlwZSA9IFJlZ0V4cC5wcm90b3R5cGU7XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUuZG90QWxsYCBnZXR0ZXJcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LXJlZ2V4cC5wcm90b3R5cGUuZG90YWxsXG5pZiAoREVTQ1JJUFRPUlMgJiYgVU5TVVBQT1JURURfRE9UX0FMTCkge1xuICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoUmVnRXhwUHJvdG90eXBlLCAnZG90QWxsJywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uIGRvdEFsbCgpIHtcbiAgICAgIGlmICh0aGlzID09PSBSZWdFeHBQcm90b3R5cGUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAvLyBXZSBjYW4ndCB1c2UgSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IgYmVjYXVzZVxuICAgICAgLy8gd2UgZG9uJ3QgYWRkIG1ldGFkYXRhIGZvciByZWdleHBzIGNyZWF0ZWQgYnkgYSBsaXRlcmFsLlxuICAgICAgaWYgKGNsYXNzb2YodGhpcykgPT09ICdSZWdFeHAnKSB7XG4gICAgICAgIHJldHVybiAhIWdldEludGVybmFsU3RhdGUodGhpcykuZG90QWxsO1xuICAgICAgfVxuICAgICAgdGhyb3cgJFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCBSZWdFeHAgcmVxdWlyZWQnKTtcbiAgICB9XG4gIH0pO1xufVxuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuZG90LWFsbC5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMuanMiOigoX191bnVzZWRfd2VicGFja19tb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9leHBvcnQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9leHBvcnQuanNcIik7XG52YXIgZXhlYyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9yZWdleHAtZXhlYyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlZ2V4cC1leGVjLmpzXCIpO1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS5leGVjYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS5leGVjXG4kKHsgdGFyZ2V0OiAnUmVnRXhwJywgcHJvdG86IHRydWUsIGZvcmNlZDogLy4vLmV4ZWMgIT09IGV4ZWMgfSwge1xuICBleGVjOiBleGVjXG59KTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5mbGFncy5qcyI6KChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZ2xvYmFsICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2xvYmFsLmpzXCIpO1xudmFyIERFU0NSSVBUT1JTID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanNcIik7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvciAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3Nvci5qc1wiKTtcbnZhciByZWdFeHBGbGFncyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9yZWdleHAtZmxhZ3MgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtZmxhZ3MuanNcIik7XG52YXIgZmFpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZmFpbHMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mYWlscy5qc1wiKTtcblxuLy8gYmFiZWwtbWluaWZ5IGFuZCBDbG9zdXJlIENvbXBpbGVyIHRyYW5zcGlsZXMgUmVnRXhwKCcuJywgJ2QnKSAtPiAvLi9kIGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbnZhciBSZWdFeHAgPSBnbG9iYWwuUmVnRXhwO1xudmFyIFJlZ0V4cFByb3RvdHlwZSA9IFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciBGT1JDRUQgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBJTkRJQ0VTX1NVUFBPUlQgPSB0cnVlO1xuICB0cnkge1xuICAgIFJlZ0V4cCgnLicsICdkJyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgSU5ESUNFU19TVVBQT1JUID0gZmFsc2U7XG4gIH1cblxuICB2YXIgTyA9IHt9O1xuICAvLyBtb2Rlcm4gVjggYnVnXG4gIHZhciBjYWxscyA9ICcnO1xuICB2YXIgZXhwZWN0ZWQgPSBJTkRJQ0VTX1NVUFBPUlQgPyAnZGdpbXN5JyA6ICdnaW1zeSc7XG5cbiAgdmFyIGFkZEdldHRlciA9IGZ1bmN0aW9uIChrZXksIGNocikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCBrZXksIHsgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxscyArPSBjaHI7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IH0pO1xuICB9O1xuXG4gIHZhciBwYWlycyA9IHtcbiAgICBkb3RBbGw6ICdzJyxcbiAgICBnbG9iYWw6ICdnJyxcbiAgICBpZ25vcmVDYXNlOiAnaScsXG4gICAgbXVsdGlsaW5lOiAnbScsXG4gICAgc3RpY2t5OiAneSdcbiAgfTtcblxuICBpZiAoSU5ESUNFU19TVVBQT1JUKSBwYWlycy5oYXNJbmRpY2VzID0gJ2QnO1xuXG4gIGZvciAodmFyIGtleSBpbiBwYWlycykgYWRkR2V0dGVyKGtleSwgcGFpcnNba2V5XSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxuICB2YXIgcmVzdWx0ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihSZWdFeHBQcm90b3R5cGUsICdmbGFncycpLmdldC5jYWxsKE8pO1xuXG4gIHJldHVybiByZXN1bHQgIT09IGV4cGVjdGVkIHx8IGNhbGxzICE9PSBleHBlY3RlZDtcbn0pO1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS5mbGFnc2AgZ2V0dGVyXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1yZWdleHAucHJvdG90eXBlLmZsYWdzXG5pZiAoRk9SQ0VEKSBkZWZpbmVCdWlsdEluQWNjZXNzb3IoUmVnRXhwUHJvdG90eXBlLCAnZmxhZ3MnLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiByZWdFeHBGbGFnc1xufSk7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5mbGFncy5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLnRlc3QuanMiOigoX191bnVzZWRfd2VicGFja19tb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG4vLyBUT0RPOiBSZW1vdmUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIG1vdmVkIHRvIGVudHJ5IHBvaW50c1xuX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbW9kdWxlcy9lcy5yZWdleHAuZXhlYyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuZXhlYy5qc1wiKTtcbnZhciAkID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2V4cG9ydCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2V4cG9ydC5qc1wiKTtcbnZhciBjYWxsID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1jYWxsLmpzXCIpO1xudmFyIGlzQ2FsbGFibGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qc1wiKTtcbnZhciBhbk9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9hbi1vYmplY3QgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hbi1vYmplY3QuanNcIik7XG52YXIgdG9TdHJpbmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvdG8tc3RyaW5nICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tc3RyaW5nLmpzXCIpO1xuXG52YXIgREVMRUdBVEVTX1RPX0VYRUMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBleGVjQ2FsbGVkID0gZmFsc2U7XG4gIHZhciByZSA9IC9bYWNdLztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHtcbiAgICBleGVjQ2FsbGVkID0gdHJ1ZTtcbiAgICByZXR1cm4gLy4vLmV4ZWMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbiAgcmV0dXJuIHJlLnRlc3QoJ2FiYycpID09PSB0cnVlICYmIGV4ZWNDYWxsZWQ7XG59KCk7XG5cbnZhciBuYXRpdmVUZXN0ID0gLy4vLnRlc3Q7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLnRlc3RgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLnRlc3RcbiQoeyB0YXJnZXQ6ICdSZWdFeHAnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhREVMRUdBVEVTX1RPX0VYRUMgfSwge1xuICB0ZXN0OiBmdW5jdGlvbiAoUykge1xuICAgIHZhciBSID0gYW5PYmplY3QodGhpcyk7XG4gICAgdmFyIHN0cmluZyA9IHRvU3RyaW5nKFMpO1xuICAgIHZhciBleGVjID0gUi5leGVjO1xuICAgIGlmICghaXNDYWxsYWJsZShleGVjKSkgcmV0dXJuIGNhbGwobmF0aXZlVGVzdCwgUiwgc3RyaW5nKTtcbiAgICB2YXIgcmVzdWx0ID0gY2FsbChleGVjLCBSLCBzdHJpbmcpO1xuICAgIGlmIChyZXN1bHQgPT09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICBhbk9iamVjdChyZXN1bHQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59KTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLnRlc3QuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC50by1zdHJpbmcuanMiOigoX191bnVzZWRfd2VicGFja19tb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgUFJPUEVSX0ZVTkNUSU9OX05BTUUgPSAoX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1uYW1lLmpzXCIpLlBST1BFUik7XG52YXIgZGVmaW5lQnVpbHRJbiA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4gKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanNcIik7XG52YXIgYW5PYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvYW4tb2JqZWN0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYW4tb2JqZWN0LmpzXCIpO1xudmFyICR0b1N0cmluZyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy90by1zdHJpbmcgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1zdHJpbmcuanNcIik7XG52YXIgZmFpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZmFpbHMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mYWlscy5qc1wiKTtcbnZhciBnZXRSZWdFeHBGbGFncyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9yZWdleHAtZ2V0LWZsYWdzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWdldC1mbGFncy5qc1wiKTtcblxudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgUmVnRXhwUHJvdG90eXBlID0gUmVnRXhwLnByb3RvdHlwZTtcbnZhciBuYXRpdmVUb1N0cmluZyA9IFJlZ0V4cFByb3RvdHlwZVtUT19TVFJJTkddO1xuXG52YXIgTk9UX0dFTkVSSUMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IHJldHVybiBuYXRpdmVUb1N0cmluZy5jYWxsKHsgc291cmNlOiAnYScsIGZsYWdzOiAnYicgfSkgIT0gJy9hL2InOyB9KTtcbi8vIEZGNDQtIFJlZ0V4cCN0b1N0cmluZyBoYXMgYSB3cm9uZyBuYW1lXG52YXIgSU5DT1JSRUNUX05BTUUgPSBQUk9QRVJfRlVOQ1RJT05fTkFNRSAmJiBuYXRpdmVUb1N0cmluZy5uYW1lICE9IFRPX1NUUklORztcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLnRvc3RyaW5nXG5pZiAoTk9UX0dFTkVSSUMgfHwgSU5DT1JSRUNUX05BTUUpIHtcbiAgZGVmaW5lQnVpbHRJbihSZWdFeHAucHJvdG90eXBlLCBUT19TVFJJTkcsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHZhciBSID0gYW5PYmplY3QodGhpcyk7XG4gICAgdmFyIHBhdHRlcm4gPSAkdG9TdHJpbmcoUi5zb3VyY2UpO1xuICAgIHZhciBmbGFncyA9ICR0b1N0cmluZyhnZXRSZWdFeHBGbGFncyhSKSk7XG4gICAgcmV0dXJuICcvJyArIHBhdHRlcm4gKyAnLycgKyBmbGFncztcbiAgfSwgeyB1bnNhZmU6IHRydWUgfSk7XG59XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC50by1zdHJpbmcuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5hdC1hbHRlcm5hdGl2ZS5qcyI6KChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciAkID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2V4cG9ydCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2V4cG9ydC5qc1wiKTtcbnZhciB1bmN1cnJ5VGhpcyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMuanNcIik7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUuanNcIik7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qc1wiKTtcbnZhciB0b1N0cmluZyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy90by1zdHJpbmcgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1zdHJpbmcuanNcIik7XG52YXIgZmFpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZmFpbHMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mYWlscy5qc1wiKTtcblxudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG5cbnZhciBGT1JDRUQgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1hcnJheS1zdHJpbmctcHJvdG90eXBlLWF0IC0tIHNhZmVcbiAgcmV0dXJuICftoYLtvrcnLmF0KC0yKSAhPT0gJ1xcdUQ4NDInO1xufSk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLmF0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5hdFxuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIGF0OiBmdW5jdGlvbiBhdChpbmRleCkge1xuICAgIHZhciBTID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKSk7XG4gICAgdmFyIGxlbiA9IFMubGVuZ3RoO1xuICAgIHZhciByZWxhdGl2ZUluZGV4ID0gdG9JbnRlZ2VyT3JJbmZpbml0eShpbmRleCk7XG4gICAgdmFyIGsgPSByZWxhdGl2ZUluZGV4ID49IDAgPyByZWxhdGl2ZUluZGV4IDogbGVuICsgcmVsYXRpdmVJbmRleDtcbiAgICByZXR1cm4gKGsgPCAwIHx8IGsgPj0gbGVuKSA/IHVuZGVmaW5lZCA6IGNoYXJBdChTLCBrKTtcbiAgfVxufSk7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5hdC1hbHRlcm5hdGl2ZS5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLmVuZHMtd2l0aC5qcyI6KChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciAkID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2V4cG9ydCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2V4cG9ydC5qc1wiKTtcbnZhciB1bmN1cnJ5VGhpcyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtY2xhdXNlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZS5qc1wiKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSAoX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzXCIpLmYpO1xudmFyIHRvTGVuZ3RoID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWxlbmd0aC5qc1wiKTtcbnZhciB0b1N0cmluZyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy90by1zdHJpbmcgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1zdHJpbmcuanNcIik7XG52YXIgbm90QVJlZ0V4cCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9ub3QtYS1yZWdleHAgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9ub3QtYS1yZWdleHAuanNcIik7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUuanNcIik7XG52YXIgY29ycmVjdElzUmVnRXhwTG9naWMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvY29ycmVjdC1pcy1yZWdleHAtbG9naWMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb3JyZWN0LWlzLXJlZ2V4cC1sb2dpYy5qc1wiKTtcbnZhciBJU19QVVJFID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2lzLXB1cmUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1wdXJlLmpzXCIpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tc3RyaW5nLXByb3RvdHlwZS1lbmRzd2l0aCAtLSBzYWZlXG52YXIgbmF0aXZlRW5kc1dpdGggPSB1bmN1cnJ5VGhpcygnJy5lbmRzV2l0aCk7XG52YXIgc2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG52YXIgbWluID0gTWF0aC5taW47XG5cbnZhciBDT1JSRUNUX0lTX1JFR0VYUF9MT0dJQyA9IGNvcnJlY3RJc1JlZ0V4cExvZ2ljKCdlbmRzV2l0aCcpO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvcHVsbC83MDJcbnZhciBNRE5fUE9MWUZJTExfQlVHID0gIUlTX1BVUkUgJiYgIUNPUlJFQ1RfSVNfUkVHRVhQX0xPR0lDICYmICEhZnVuY3Rpb24gKCkge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihTdHJpbmcucHJvdG90eXBlLCAnZW5kc1dpdGgnKTtcbiAgcmV0dXJuIGRlc2NyaXB0b3IgJiYgIWRlc2NyaXB0b3Iud3JpdGFibGU7XG59KCk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLmVuZHNXaXRoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5lbmRzd2l0aFxuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFNRE5fUE9MWUZJTExfQlVHICYmICFDT1JSRUNUX0lTX1JFR0VYUF9MT0dJQyB9LCB7XG4gIGVuZHNXaXRoOiBmdW5jdGlvbiBlbmRzV2l0aChzZWFyY2hTdHJpbmcgLyogLCBlbmRQb3NpdGlvbiA9IEBsZW5ndGggKi8pIHtcbiAgICB2YXIgdGhhdCA9IHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcykpO1xuICAgIG5vdEFSZWdFeHAoc2VhcmNoU3RyaW5nKTtcbiAgICB2YXIgZW5kUG9zaXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbGVuID0gdGhhdC5sZW5ndGg7XG4gICAgdmFyIGVuZCA9IGVuZFBvc2l0aW9uID09PSB1bmRlZmluZWQgPyBsZW4gOiBtaW4odG9MZW5ndGgoZW5kUG9zaXRpb24pLCBsZW4pO1xuICAgIHZhciBzZWFyY2ggPSB0b1N0cmluZyhzZWFyY2hTdHJpbmcpO1xuICAgIHJldHVybiBuYXRpdmVFbmRzV2l0aFxuICAgICAgPyBuYXRpdmVFbmRzV2l0aCh0aGF0LCBzZWFyY2gsIGVuZClcbiAgICAgIDogc2xpY2UodGhhdCwgZW5kIC0gc2VhcmNoLmxlbmd0aCwgZW5kKSA9PT0gc2VhcmNoO1xuICB9XG59KTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLmVuZHMtd2l0aC5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLmluY2x1ZGVzLmpzIjooKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyICQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZXhwb3J0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzXCIpO1xudmFyIHVuY3VycnlUaGlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qc1wiKTtcbnZhciBub3RBUmVnRXhwID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL25vdC1hLXJlZ2V4cCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL25vdC1hLXJlZ2V4cC5qc1wiKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZS5qc1wiKTtcbnZhciB0b1N0cmluZyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy90by1zdHJpbmcgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1zdHJpbmcuanNcIik7XG52YXIgY29ycmVjdElzUmVnRXhwTG9naWMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvY29ycmVjdC1pcy1yZWdleHAtbG9naWMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb3JyZWN0LWlzLXJlZ2V4cC1sb2dpYy5qc1wiKTtcblxudmFyIHN0cmluZ0luZGV4T2YgPSB1bmN1cnJ5VGhpcygnJy5pbmRleE9mKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogIWNvcnJlY3RJc1JlZ0V4cExvZ2ljKCdpbmNsdWRlcycpIH0sIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHJldHVybiAhIX5zdHJpbmdJbmRleE9mKFxuICAgICAgdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKSksXG4gICAgICB0b1N0cmluZyhub3RBUmVnRXhwKHNlYXJjaFN0cmluZykpLFxuICAgICAgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWRcbiAgICApO1xuICB9XG59KTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLmluY2x1ZGVzLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3IuanMiOigoX191bnVzZWRfd2VicGFja19tb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgY2hhckF0ID0gKF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZS5qc1wiKS5jaGFyQXQpO1xudmFyIHRvU3RyaW5nID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3RvLXN0cmluZyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXN0cmluZy5qc1wiKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUuanNcIik7XG52YXIgZGVmaW5lSXRlcmF0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3ItZGVmaW5lLmpzXCIpO1xudmFyIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXItcmVzdWx0LW9iamVjdCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1pdGVyLXJlc3VsdC1vYmplY3QuanNcIik7XG5cbnZhciBTVFJJTkdfSVRFUkFUT1IgPSAnU3RyaW5nIEl0ZXJhdG9yJztcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFNUUklOR19JVEVSQVRPUik7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS1AQGl0ZXJhdG9yXG5kZWZpbmVJdGVyYXRvcihTdHJpbmcsICdTdHJpbmcnLCBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogU1RSSU5HX0lURVJBVE9SLFxuICAgIHN0cmluZzogdG9TdHJpbmcoaXRlcmF0ZWQpLFxuICAgIGluZGV4OiAwXG4gIH0pO1xuLy8gYCVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUubmV4dGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVzdHJpbmdpdGVyYXRvcnByb3RvdHlwZSUubmV4dFxufSwgZnVuY3Rpb24gbmV4dCgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgdmFyIHN0cmluZyA9IHN0YXRlLnN0cmluZztcbiAgdmFyIGluZGV4ID0gc3RhdGUuaW5kZXg7XG4gIHZhciBwb2ludDtcbiAgaWYgKGluZGV4ID49IHN0cmluZy5sZW5ndGgpIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSk7XG4gIHBvaW50ID0gY2hhckF0KHN0cmluZywgaW5kZXgpO1xuICBzdGF0ZS5pbmRleCArPSBwb2ludC5sZW5ndGg7XG4gIHJldHVybiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHBvaW50LCBmYWxzZSk7XG59KTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLml0ZXJhdG9yLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcubWF0Y2guanMiOigoX191bnVzZWRfd2VicGFja19tb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgY2FsbCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbC5qc1wiKTtcbnZhciBmaXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYy5qc1wiKTtcbnZhciBhbk9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9hbi1vYmplY3QgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hbi1vYmplY3QuanNcIik7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZC5qc1wiKTtcbnZhciB0b0xlbmd0aCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy90by1sZW5ndGggKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1sZW5ndGguanNcIik7XG52YXIgdG9TdHJpbmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvdG8tc3RyaW5nICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tc3RyaW5nLmpzXCIpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzXCIpO1xudmFyIGdldE1ldGhvZCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9nZXQtbWV0aG9kICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qc1wiKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvYWR2YW5jZS1zdHJpbmctaW5kZXggKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hZHZhbmNlLXN0cmluZy1pbmRleC5qc1wiKTtcbnZhciByZWdFeHBFeGVjID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjLWFic3RyYWN0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMtYWJzdHJhY3QuanNcIik7XG5cbi8vIEBAbWF0Y2ggbG9naWNcbmZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljKCdtYXRjaCcsIGZ1bmN0aW9uIChNQVRDSCwgbmF0aXZlTWF0Y2gsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLm1hdGNoYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUubWF0Y2hcbiAgICBmdW5jdGlvbiBtYXRjaChyZWdleHApIHtcbiAgICAgIHZhciBPID0gcmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKTtcbiAgICAgIHZhciBtYXRjaGVyID0gaXNOdWxsT3JVbmRlZmluZWQocmVnZXhwKSA/IHVuZGVmaW5lZCA6IGdldE1ldGhvZChyZWdleHAsIE1BVENIKTtcbiAgICAgIHJldHVybiBtYXRjaGVyID8gY2FsbChtYXRjaGVyLCByZWdleHAsIE8pIDogbmV3IFJlZ0V4cChyZWdleHApW01BVENIXSh0b1N0cmluZyhPKSk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQG1hdGNoXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAbWF0Y2hcbiAgICBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgICB2YXIgcnggPSBhbk9iamVjdCh0aGlzKTtcbiAgICAgIHZhciBTID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUobmF0aXZlTWF0Y2gsIHJ4LCBTKTtcblxuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuXG4gICAgICBpZiAoIXJ4Lmdsb2JhbCkgcmV0dXJuIHJlZ0V4cEV4ZWMocngsIFMpO1xuXG4gICAgICB2YXIgZnVsbFVuaWNvZGUgPSByeC51bmljb2RlO1xuICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB2YXIgbiA9IDA7XG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgd2hpbGUgKChyZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKSkgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gdG9TdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgQVtuXSA9IG1hdGNoU3RyO1xuICAgICAgICBpZiAobWF0Y2hTdHIgPT09ICcnKSByeC5sYXN0SW5kZXggPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgdG9MZW5ndGgocngubGFzdEluZGV4KSwgZnVsbFVuaWNvZGUpO1xuICAgICAgICBuKys7XG4gICAgICB9XG4gICAgICByZXR1cm4gbiA9PT0gMCA/IG51bGwgOiBBO1xuICAgIH1cbiAgXTtcbn0pO1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcubWF0Y2guanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5yZXBsYWNlLWFsbC5qcyI6KChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciAkID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2V4cG9ydCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2V4cG9ydC5qc1wiKTtcbnZhciBjYWxsID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1jYWxsLmpzXCIpO1xudmFyIHVuY3VycnlUaGlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qc1wiKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZS5qc1wiKTtcbnZhciBpc0NhbGxhYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY2FsbGFibGUuanNcIik7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZC5qc1wiKTtcbnZhciBpc1JlZ0V4cCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pcy1yZWdleHAgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1yZWdleHAuanNcIik7XG52YXIgdG9TdHJpbmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvdG8tc3RyaW5nICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tc3RyaW5nLmpzXCIpO1xudmFyIGdldE1ldGhvZCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9nZXQtbWV0aG9kICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LW1ldGhvZC5qc1wiKTtcbnZhciBnZXRSZWdFeHBGbGFncyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9yZWdleHAtZ2V0LWZsYWdzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWdldC1mbGFncy5qc1wiKTtcbnZhciBnZXRTdWJzdGl0dXRpb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZ2V0LXN1YnN0aXR1dGlvbiAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1zdWJzdGl0dXRpb24uanNcIik7XG52YXIgd2VsbEtub3duU3ltYm9sID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wuanNcIik7XG52YXIgSVNfUFVSRSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pcy1wdXJlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtcHVyZS5qc1wiKTtcblxudmFyIFJFUExBQ0UgPSB3ZWxsS25vd25TeW1ib2woJ3JlcGxhY2UnKTtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIGluZGV4T2YgPSB1bmN1cnJ5VGhpcygnJy5pbmRleE9mKTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG5cbnZhciBzdHJpbmdJbmRleE9mID0gZnVuY3Rpb24gKHN0cmluZywgc2VhcmNoVmFsdWUsIGZyb21JbmRleCkge1xuICBpZiAoZnJvbUluZGV4ID4gc3RyaW5nLmxlbmd0aCkgcmV0dXJuIC0xO1xuICBpZiAoc2VhcmNoVmFsdWUgPT09ICcnKSByZXR1cm4gZnJvbUluZGV4O1xuICByZXR1cm4gaW5kZXhPZihzdHJpbmcsIHNlYXJjaFZhbHVlLCBmcm9tSW5kZXgpO1xufTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUucmVwbGFjZUFsbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUucmVwbGFjZWFsbFxuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlIH0sIHtcbiAgcmVwbGFjZUFsbDogZnVuY3Rpb24gcmVwbGFjZUFsbChzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XG4gICAgdmFyIE8gPSByZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpO1xuICAgIHZhciBJU19SRUdfRVhQLCBmbGFncywgcmVwbGFjZXIsIHN0cmluZywgc2VhcmNoU3RyaW5nLCBmdW5jdGlvbmFsUmVwbGFjZSwgc2VhcmNoTGVuZ3RoLCBhZHZhbmNlQnksIHJlcGxhY2VtZW50O1xuICAgIHZhciBwb3NpdGlvbiA9IDA7XG4gICAgdmFyIGVuZE9mTGFzdE1hdGNoID0gMDtcbiAgICB2YXIgcmVzdWx0ID0gJyc7XG4gICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChzZWFyY2hWYWx1ZSkpIHtcbiAgICAgIElTX1JFR19FWFAgPSBpc1JlZ0V4cChzZWFyY2hWYWx1ZSk7XG4gICAgICBpZiAoSVNfUkVHX0VYUCkge1xuICAgICAgICBmbGFncyA9IHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUoZ2V0UmVnRXhwRmxhZ3Moc2VhcmNoVmFsdWUpKSk7XG4gICAgICAgIGlmICghfmluZGV4T2YoZmxhZ3MsICdnJykpIHRocm93ICRUeXBlRXJyb3IoJ2AucmVwbGFjZUFsbGAgZG9lcyBub3QgYWxsb3cgbm9uLWdsb2JhbCByZWdleGVzJyk7XG4gICAgICB9XG4gICAgICByZXBsYWNlciA9IGdldE1ldGhvZChzZWFyY2hWYWx1ZSwgUkVQTEFDRSk7XG4gICAgICBpZiAocmVwbGFjZXIpIHtcbiAgICAgICAgcmV0dXJuIGNhbGwocmVwbGFjZXIsIHNlYXJjaFZhbHVlLCBPLCByZXBsYWNlVmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChJU19QVVJFICYmIElTX1JFR19FWFApIHtcbiAgICAgICAgcmV0dXJuIHJlcGxhY2UodG9TdHJpbmcoTyksIHNlYXJjaFZhbHVlLCByZXBsYWNlVmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBzdHJpbmcgPSB0b1N0cmluZyhPKTtcbiAgICBzZWFyY2hTdHJpbmcgPSB0b1N0cmluZyhzZWFyY2hWYWx1ZSk7XG4gICAgZnVuY3Rpb25hbFJlcGxhY2UgPSBpc0NhbGxhYmxlKHJlcGxhY2VWYWx1ZSk7XG4gICAgaWYgKCFmdW5jdGlvbmFsUmVwbGFjZSkgcmVwbGFjZVZhbHVlID0gdG9TdHJpbmcocmVwbGFjZVZhbHVlKTtcbiAgICBzZWFyY2hMZW5ndGggPSBzZWFyY2hTdHJpbmcubGVuZ3RoO1xuICAgIGFkdmFuY2VCeSA9IG1heCgxLCBzZWFyY2hMZW5ndGgpO1xuICAgIHBvc2l0aW9uID0gc3RyaW5nSW5kZXhPZihzdHJpbmcsIHNlYXJjaFN0cmluZywgMCk7XG4gICAgd2hpbGUgKHBvc2l0aW9uICE9PSAtMSkge1xuICAgICAgcmVwbGFjZW1lbnQgPSBmdW5jdGlvbmFsUmVwbGFjZVxuICAgICAgICA/IHRvU3RyaW5nKHJlcGxhY2VWYWx1ZShzZWFyY2hTdHJpbmcsIHBvc2l0aW9uLCBzdHJpbmcpKVxuICAgICAgICA6IGdldFN1YnN0aXR1dGlvbihzZWFyY2hTdHJpbmcsIHN0cmluZywgcG9zaXRpb24sIFtdLCB1bmRlZmluZWQsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICByZXN1bHQgKz0gc3RyaW5nU2xpY2Uoc3RyaW5nLCBlbmRPZkxhc3RNYXRjaCwgcG9zaXRpb24pICsgcmVwbGFjZW1lbnQ7XG4gICAgICBlbmRPZkxhc3RNYXRjaCA9IHBvc2l0aW9uICsgc2VhcmNoTGVuZ3RoO1xuICAgICAgcG9zaXRpb24gPSBzdHJpbmdJbmRleE9mKHN0cmluZywgc2VhcmNoU3RyaW5nLCBwb3NpdGlvbiArIGFkdmFuY2VCeSk7XG4gICAgfVxuICAgIGlmIChlbmRPZkxhc3RNYXRjaCA8IHN0cmluZy5sZW5ndGgpIHtcbiAgICAgIHJlc3VsdCArPSBzdHJpbmdTbGljZShzdHJpbmcsIGVuZE9mTGFzdE1hdGNoKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5yZXBsYWNlLWFsbC5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnJlcGxhY2UuanMiOigoX191bnVzZWRfd2VicGFja19tb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgYXBwbHkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHkgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1hcHBseS5qc1wiKTtcbnZhciBjYWxsID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1jYWxsLmpzXCIpO1xudmFyIHVuY3VycnlUaGlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qc1wiKTtcbnZhciBmaXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYy5qc1wiKTtcbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mYWlscyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzXCIpO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2FuLW9iamVjdCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qc1wiKTtcbnZhciBpc0NhbGxhYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY2FsbGFibGUuanNcIik7XG52YXIgaXNOdWxsT3JVbmRlZmluZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZC5qc1wiKTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHkgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5LmpzXCIpO1xudmFyIHRvTGVuZ3RoID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWxlbmd0aC5qc1wiKTtcbnZhciB0b1N0cmluZyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy90by1zdHJpbmcgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1zdHJpbmcuanNcIik7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUuanNcIik7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2FkdmFuY2Utc3RyaW5nLWluZGV4ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYWR2YW5jZS1zdHJpbmctaW5kZXguanNcIik7XG52YXIgZ2V0TWV0aG9kID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2dldC1tZXRob2QgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtbWV0aG9kLmpzXCIpO1xudmFyIGdldFN1YnN0aXR1dGlvbiA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9nZXQtc3Vic3RpdHV0aW9uICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LXN1YnN0aXR1dGlvbi5qc1wiKTtcbnZhciByZWdFeHBFeGVjID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjLWFic3RyYWN0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMtYWJzdHJhY3QuanNcIik7XG52YXIgd2VsbEtub3duU3ltYm9sID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wuanNcIik7XG5cbnZhciBSRVBMQUNFID0gd2VsbEtub3duU3ltYm9sKCdyZXBsYWNlJyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG52YXIgY29uY2F0ID0gdW5jdXJyeVRoaXMoW10uY29uY2F0KTtcbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG52YXIgc3RyaW5nSW5kZXhPZiA9IHVuY3VycnlUaGlzKCcnLmluZGV4T2YpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG52YXIgbWF5YmVUb1N0cmluZyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/IGl0IDogU3RyaW5nKGl0KTtcbn07XG5cbi8vIElFIDw9IDExIHJlcGxhY2VzICQwIHdpdGggdGhlIHdob2xlIG1hdGNoLCBhcyBpZiBpdCB3YXMgJCZcbi8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzYwMjQ2NjYvZ2V0dGluZy1pZS10by1yZXBsYWNlLWEtcmVnZXgtd2l0aC10aGUtbGl0ZXJhbC1zdHJpbmctMFxudmFyIFJFUExBQ0VfS0VFUFNfJDAgPSAoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL3ByZWZlci1lc2NhcGUtcmVwbGFjZW1lbnQtZG9sbGFyLWNoYXIgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuICdhJy5yZXBsYWNlKC8uLywgJyQwJykgPT09ICckMCc7XG59KSgpO1xuXG4vLyBTYWZhcmkgPD0gMTMuMC4zKD8pIHN1YnN0aXR1dGVzIG50aCBjYXB0dXJlIHdoZXJlIG4+bSB3aXRoIGFuIGVtcHR5IHN0cmluZ1xudmFyIFJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFID0gKGZ1bmN0aW9uICgpIHtcbiAgaWYgKC8uL1tSRVBMQUNFXSkge1xuICAgIHJldHVybiAvLi9bUkVQTEFDRV0oJ2EnLCAnJDAnKSA9PT0gJyc7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufSkoKTtcblxudmFyIFJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlID0gLy4vO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICByZXN1bHQuZ3JvdXBzID0geyBhOiAnNycgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL25vLXVzZWxlc3MtZG9sbGFyLXJlcGxhY2VtZW50cyAtLSBmYWxzZSBwb3NpdGl2ZVxuICByZXR1cm4gJycucmVwbGFjZShyZSwgJyQ8YT4nKSAhPT0gJzcnO1xufSk7XG5cbi8vIEBAcmVwbGFjZSBsb2dpY1xuZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMoJ3JlcGxhY2UnLCBmdW5jdGlvbiAoXywgbmF0aXZlUmVwbGFjZSwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHZhciBVTlNBRkVfU1VCU1RJVFVURSA9IFJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFID8gJyQnIDogJyQwJztcblxuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlXG4gICAgZnVuY3Rpb24gcmVwbGFjZShzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgTyA9IHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcyk7XG4gICAgICB2YXIgcmVwbGFjZXIgPSBpc051bGxPclVuZGVmaW5lZChzZWFyY2hWYWx1ZSkgPyB1bmRlZmluZWQgOiBnZXRNZXRob2Qoc2VhcmNoVmFsdWUsIFJFUExBQ0UpO1xuICAgICAgcmV0dXJuIHJlcGxhY2VyXG4gICAgICAgID8gY2FsbChyZXBsYWNlciwgc2VhcmNoVmFsdWUsIE8sIHJlcGxhY2VWYWx1ZSlcbiAgICAgICAgOiBjYWxsKG5hdGl2ZVJlcGxhY2UsIHRvU3RyaW5nKE8pLCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHJlcGxhY2VcbiAgICBmdW5jdGlvbiAoc3RyaW5nLCByZXBsYWNlVmFsdWUpIHtcbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHRoaXMpO1xuICAgICAgdmFyIFMgPSB0b1N0cmluZyhzdHJpbmcpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiByZXBsYWNlVmFsdWUgPT0gJ3N0cmluZycgJiZcbiAgICAgICAgc3RyaW5nSW5kZXhPZihyZXBsYWNlVmFsdWUsIFVOU0FGRV9TVUJTVElUVVRFKSA9PT0gLTEgJiZcbiAgICAgICAgc3RyaW5nSW5kZXhPZihyZXBsYWNlVmFsdWUsICckPCcpID09PSAtMVxuICAgICAgKSB7XG4gICAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUobmF0aXZlUmVwbGFjZSwgcngsIFMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGZ1bmN0aW9uYWxSZXBsYWNlID0gaXNDYWxsYWJsZShyZXBsYWNlVmFsdWUpO1xuICAgICAgaWYgKCFmdW5jdGlvbmFsUmVwbGFjZSkgcmVwbGFjZVZhbHVlID0gdG9TdHJpbmcocmVwbGFjZVZhbHVlKTtcblxuICAgICAgdmFyIGdsb2JhbCA9IHJ4Lmdsb2JhbDtcbiAgICAgIGlmIChnbG9iYWwpIHtcbiAgICAgICAgdmFyIGZ1bGxVbmljb2RlID0gcngudW5pY29kZTtcbiAgICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIGJyZWFrO1xuXG4gICAgICAgIHB1c2gocmVzdWx0cywgcmVzdWx0KTtcbiAgICAgICAgaWYgKCFnbG9iYWwpIGJyZWFrO1xuXG4gICAgICAgIHZhciBtYXRjaFN0ciA9IHRvU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhY2N1bXVsYXRlZFJlc3VsdCA9ICcnO1xuICAgICAgdmFyIG5leHRTb3VyY2VQb3NpdGlvbiA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0c1tpXTtcblxuICAgICAgICB2YXIgbWF0Y2hlZCA9IHRvU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IG1heChtaW4odG9JbnRlZ2VyT3JJbmZpbml0eShyZXN1bHQuaW5kZXgpLCBTLmxlbmd0aCksIDApO1xuICAgICAgICB2YXIgY2FwdHVyZXMgPSBbXTtcbiAgICAgICAgLy8gTk9URTogVGhpcyBpcyBlcXVpdmFsZW50IHRvXG4gICAgICAgIC8vICAgY2FwdHVyZXMgPSByZXN1bHQuc2xpY2UoMSkubWFwKG1heWJlVG9TdHJpbmcpXG4gICAgICAgIC8vIGJ1dCBmb3Igc29tZSByZWFzb24gYG5hdGl2ZVNsaWNlLmNhbGwocmVzdWx0LCAxLCByZXN1bHQubGVuZ3RoKWAgKGNhbGxlZCBpblxuICAgICAgICAvLyB0aGUgc2xpY2UgcG9seWZpbGwgd2hlbiBzbGljaW5nIG5hdGl2ZSBhcnJheXMpIFwiZG9lc24ndCB3b3JrXCIgaW4gc2FmYXJpIDkgYW5kXG4gICAgICAgIC8vIGNhdXNlcyBhIGNyYXNoIChodHRwczovL3Bhc3RlYmluLmNvbS9OMjFRemVRQSkgd2hlbiB0cnlpbmcgdG8gZGVidWcgaXQuXG4gICAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgcmVzdWx0Lmxlbmd0aDsgaisrKSBwdXNoKGNhcHR1cmVzLCBtYXliZVRvU3RyaW5nKHJlc3VsdFtqXSkpO1xuICAgICAgICB2YXIgbmFtZWRDYXB0dXJlcyA9IHJlc3VsdC5ncm91cHM7XG4gICAgICAgIGlmIChmdW5jdGlvbmFsUmVwbGFjZSkge1xuICAgICAgICAgIHZhciByZXBsYWNlckFyZ3MgPSBjb25jYXQoW21hdGNoZWRdLCBjYXB0dXJlcywgcG9zaXRpb24sIFMpO1xuICAgICAgICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHB1c2gocmVwbGFjZXJBcmdzLCBuYW1lZENhcHR1cmVzKTtcbiAgICAgICAgICB2YXIgcmVwbGFjZW1lbnQgPSB0b1N0cmluZyhhcHBseShyZXBsYWNlVmFsdWUsIHVuZGVmaW5lZCwgcmVwbGFjZXJBcmdzKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVwbGFjZW1lbnQgPSBnZXRTdWJzdGl0dXRpb24obWF0Y2hlZCwgUywgcG9zaXRpb24sIGNhcHR1cmVzLCBuYW1lZENhcHR1cmVzLCByZXBsYWNlVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwb3NpdGlvbiA+PSBuZXh0U291cmNlUG9zaXRpb24pIHtcbiAgICAgICAgICBhY2N1bXVsYXRlZFJlc3VsdCArPSBzdHJpbmdTbGljZShTLCBuZXh0U291cmNlUG9zaXRpb24sIHBvc2l0aW9uKSArIHJlcGxhY2VtZW50O1xuICAgICAgICAgIG5leHRTb3VyY2VQb3NpdGlvbiA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2N1bXVsYXRlZFJlc3VsdCArIHN0cmluZ1NsaWNlKFMsIG5leHRTb3VyY2VQb3NpdGlvbik7XG4gICAgfVxuICBdO1xufSwgIVJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTIHx8ICFSRVBMQUNFX0tFRVBTXyQwIHx8IFJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFKTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnJlcGxhY2UuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5zcGxpdC5qcyI6KChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBhcHBseSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5LmpzXCIpO1xudmFyIGNhbGwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanNcIik7XG52YXIgdW5jdXJyeVRoaXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzXCIpO1xudmFyIGZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9maXgtcmVnZXhwLXdlbGwta25vd24tc3ltYm9sLWxvZ2ljLmpzXCIpO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2FuLW9iamVjdCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qc1wiKTtcbnZhciBpc051bGxPclVuZGVmaW5lZCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pcy1udWxsLW9yLXVuZGVmaW5lZCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkLmpzXCIpO1xudmFyIGlzUmVnRXhwID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2lzLXJlZ2V4cCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXJlZ2V4cC5qc1wiKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZS5qc1wiKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvc3BlY2llcy1jb25zdHJ1Y3RvciAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3IuanNcIik7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2FkdmFuY2Utc3RyaW5nLWluZGV4ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYWR2YW5jZS1zdHJpbmctaW5kZXguanNcIik7XG52YXIgdG9MZW5ndGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzXCIpO1xudmFyIHRvU3RyaW5nID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3RvLXN0cmluZyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXN0cmluZy5qc1wiKTtcbnZhciBnZXRNZXRob2QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZ2V0LW1ldGhvZCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1tZXRob2QuanNcIik7XG52YXIgYXJyYXlTbGljZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9hcnJheS1zbGljZS1zaW1wbGUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zbGljZS1zaW1wbGUuanNcIik7XG52YXIgY2FsbFJlZ0V4cEV4ZWMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMtYWJzdHJhY3QgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtZXhlYy1hYnN0cmFjdC5qc1wiKTtcbnZhciByZWdleHBFeGVjID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMuanNcIik7XG52YXIgc3RpY2t5SGVscGVycyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9yZWdleHAtc3RpY2t5LWhlbHBlcnMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtc3RpY2t5LWhlbHBlcnMuanNcIik7XG52YXIgZmFpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZmFpbHMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mYWlscy5qc1wiKTtcblxudmFyIFVOU1VQUE9SVEVEX1kgPSBzdGlja3lIZWxwZXJzLlVOU1VQUE9SVEVEX1k7XG52YXIgTUFYX1VJTlQzMiA9IDB4RkZGRkZGRkY7XG52YXIgbWluID0gTWF0aC5taW47XG52YXIgJHB1c2ggPSBbXS5wdXNoO1xudmFyIGV4ZWMgPSB1bmN1cnJ5VGhpcygvLi8uZXhlYyk7XG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKCRwdXNoKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxuLy8gQ2hyb21lIDUxIGhhcyBhIGJ1Z2d5IFwic3BsaXRcIiBpbXBsZW1lbnRhdGlvbiB3aGVuIFJlZ0V4cCNleGVjICE9PSBuYXRpdmVFeGVjXG4vLyBXZWV4IEpTIGhhcyBmcm96ZW4gYnVpbHQtaW4gcHJvdG90eXBlcywgc28gdXNlIHRyeSAvIGNhdGNoIHdyYXBwZXJcbnZhciBTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL25vLWVtcHR5LWdyb3VwIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHZhciByZSA9IC8oPzopLztcbiAgdmFyIG9yaWdpbmFsRXhlYyA9IHJlLmV4ZWM7XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBvcmlnaW5hbEV4ZWMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfTtcbiAgdmFyIHJlc3VsdCA9ICdhYicuc3BsaXQocmUpO1xuICByZXR1cm4gcmVzdWx0Lmxlbmd0aCAhPT0gMiB8fCByZXN1bHRbMF0gIT09ICdhJyB8fCByZXN1bHRbMV0gIT09ICdiJztcbn0pO1xuXG4vLyBAQHNwbGl0IGxvZ2ljXG5maXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYygnc3BsaXQnLCBmdW5jdGlvbiAoU1BMSVQsIG5hdGl2ZVNwbGl0LCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgdmFyIGludGVybmFsU3BsaXQ7XG4gIGlmIChcbiAgICAnYWJiYycuc3BsaXQoLyhiKSovKVsxXSA9PSAnYycgfHxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL25vLWVtcHR5LWdyb3VwIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gICAgJ3Rlc3QnLnNwbGl0KC8oPzopLywgLTEpLmxlbmd0aCAhPSA0IHx8XG4gICAgJ2FiJy5zcGxpdCgvKD86YWIpKi8pLmxlbmd0aCAhPSAyIHx8XG4gICAgJy4nLnNwbGl0KC8oLj8pKC4/KS8pLmxlbmd0aCAhPSA0IHx8XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9uby1lbXB0eS1jYXB0dXJpbmctZ3JvdXAsIHJlZ2V4cC9uby1lbXB0eS1ncm91cCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICAgICcuJy5zcGxpdCgvKCkoKS8pLmxlbmd0aCA+IDEgfHxcbiAgICAnJy5zcGxpdCgvLj8vKS5sZW5ndGhcbiAgKSB7XG4gICAgLy8gYmFzZWQgb24gZXM1LXNoaW0gaW1wbGVtZW50YXRpb24sIG5lZWQgdG8gcmV3b3JrIGl0XG4gICAgaW50ZXJuYWxTcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgc3RyaW5nID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKSk7XG4gICAgICB2YXIgbGltID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IE1BWF9VSU5UMzIgOiBsaW1pdCA+Pj4gMDtcbiAgICAgIGlmIChsaW0gPT09IDApIHJldHVybiBbXTtcbiAgICAgIGlmIChzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFtzdHJpbmddO1xuICAgICAgLy8gSWYgYHNlcGFyYXRvcmAgaXMgbm90IGEgcmVnZXgsIHVzZSBuYXRpdmUgc3BsaXRcbiAgICAgIGlmICghaXNSZWdFeHAoc2VwYXJhdG9yKSkge1xuICAgICAgICByZXR1cm4gY2FsbChuYXRpdmVTcGxpdCwgc3RyaW5nLCBzZXBhcmF0b3IsIGxpbSk7XG4gICAgICB9XG4gICAgICB2YXIgb3V0cHV0ID0gW107XG4gICAgICB2YXIgZmxhZ3MgPSAoc2VwYXJhdG9yLmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3Iuc3RpY2t5ID8gJ3knIDogJycpO1xuICAgICAgdmFyIGxhc3RMYXN0SW5kZXggPSAwO1xuICAgICAgLy8gTWFrZSBgZ2xvYmFsYCBhbmQgYXZvaWQgYGxhc3RJbmRleGAgaXNzdWVzIGJ5IHdvcmtpbmcgd2l0aCBhIGNvcHlcbiAgICAgIHZhciBzZXBhcmF0b3JDb3B5ID0gbmV3IFJlZ0V4cChzZXBhcmF0b3Iuc291cmNlLCBmbGFncyArICdnJyk7XG4gICAgICB2YXIgbWF0Y2gsIGxhc3RJbmRleCwgbGFzdExlbmd0aDtcbiAgICAgIHdoaWxlIChtYXRjaCA9IGNhbGwocmVnZXhwRXhlYywgc2VwYXJhdG9yQ29weSwgc3RyaW5nKSkge1xuICAgICAgICBsYXN0SW5kZXggPSBzZXBhcmF0b3JDb3B5Lmxhc3RJbmRleDtcbiAgICAgICAgaWYgKGxhc3RJbmRleCA+IGxhc3RMYXN0SW5kZXgpIHtcbiAgICAgICAgICBwdXNoKG91dHB1dCwgc3RyaW5nU2xpY2Uoc3RyaW5nLCBsYXN0TGFzdEluZGV4LCBtYXRjaC5pbmRleCkpO1xuICAgICAgICAgIGlmIChtYXRjaC5sZW5ndGggPiAxICYmIG1hdGNoLmluZGV4IDwgc3RyaW5nLmxlbmd0aCkgYXBwbHkoJHB1c2gsIG91dHB1dCwgYXJyYXlTbGljZShtYXRjaCwgMSkpO1xuICAgICAgICAgIGxhc3RMZW5ndGggPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgICAgbGFzdExhc3RJbmRleCA9IGxhc3RJbmRleDtcbiAgICAgICAgICBpZiAob3V0cHV0Lmxlbmd0aCA+PSBsaW0pIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZXBhcmF0b3JDb3B5Lmxhc3RJbmRleCA9PT0gbWF0Y2guaW5kZXgpIHNlcGFyYXRvckNvcHkubGFzdEluZGV4Kys7IC8vIEF2b2lkIGFuIGluZmluaXRlIGxvb3BcbiAgICAgIH1cbiAgICAgIGlmIChsYXN0TGFzdEluZGV4ID09PSBzdHJpbmcubGVuZ3RoKSB7XG4gICAgICAgIGlmIChsYXN0TGVuZ3RoIHx8ICFleGVjKHNlcGFyYXRvckNvcHksICcnKSkgcHVzaChvdXRwdXQsICcnKTtcbiAgICAgIH0gZWxzZSBwdXNoKG91dHB1dCwgc3RyaW5nU2xpY2Uoc3RyaW5nLCBsYXN0TGFzdEluZGV4KSk7XG4gICAgICByZXR1cm4gb3V0cHV0Lmxlbmd0aCA+IGxpbSA/IGFycmF5U2xpY2Uob3V0cHV0LCAwLCBsaW0pIDogb3V0cHV0O1xuICAgIH07XG4gIC8vIENoYWtyYSwgVjhcbiAgfSBlbHNlIGlmICgnMCcuc3BsaXQodW5kZWZpbmVkLCAwKS5sZW5ndGgpIHtcbiAgICBpbnRlcm5hbFNwbGl0ID0gZnVuY3Rpb24gKHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHJldHVybiBzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCAmJiBsaW1pdCA9PT0gMCA/IFtdIDogY2FsbChuYXRpdmVTcGxpdCwgdGhpcywgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgfTtcbiAgfSBlbHNlIGludGVybmFsU3BsaXQgPSBuYXRpdmVTcGxpdDtcblxuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnNwbGl0YCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc3BsaXRcbiAgICBmdW5jdGlvbiBzcGxpdChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgTyA9IHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcyk7XG4gICAgICB2YXIgc3BsaXR0ZXIgPSBpc051bGxPclVuZGVmaW5lZChzZXBhcmF0b3IpID8gdW5kZWZpbmVkIDogZ2V0TWV0aG9kKHNlcGFyYXRvciwgU1BMSVQpO1xuICAgICAgcmV0dXJuIHNwbGl0dGVyXG4gICAgICAgID8gY2FsbChzcGxpdHRlciwgc2VwYXJhdG9yLCBPLCBsaW1pdClcbiAgICAgICAgOiBjYWxsKGludGVybmFsU3BsaXQsIHRvU3RyaW5nKE8pLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAc3BsaXRdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBzcGxpdFxuICAgIC8vXG4gICAgLy8gTk9URTogVGhpcyBjYW5ub3QgYmUgcHJvcGVybHkgcG9seWZpbGxlZCBpbiBlbmdpbmVzIHRoYXQgZG9uJ3Qgc3VwcG9ydFxuICAgIC8vIHRoZSAneScgZmxhZy5cbiAgICBmdW5jdGlvbiAoc3RyaW5nLCBsaW1pdCkge1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QodGhpcyk7XG4gICAgICB2YXIgUyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKGludGVybmFsU3BsaXQsIHJ4LCBTLCBsaW1pdCwgaW50ZXJuYWxTcGxpdCAhPT0gbmF0aXZlU3BsaXQpO1xuXG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciBDID0gc3BlY2llc0NvbnN0cnVjdG9yKHJ4LCBSZWdFeHApO1xuXG4gICAgICB2YXIgdW5pY29kZU1hdGNoaW5nID0gcngudW5pY29kZTtcbiAgICAgIHZhciBmbGFncyA9IChyeC5pZ25vcmVDYXNlID8gJ2knIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyeC5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJ4LnVuaWNvZGUgPyAndScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKFVOU1VQUE9SVEVEX1kgPyAnZycgOiAneScpO1xuXG4gICAgICAvLyBeKD8gKyByeCArICkgaXMgbmVlZGVkLCBpbiBjb21iaW5hdGlvbiB3aXRoIHNvbWUgUyBzbGljaW5nLCB0b1xuICAgICAgLy8gc2ltdWxhdGUgdGhlICd5JyBmbGFnLlxuICAgICAgdmFyIHNwbGl0dGVyID0gbmV3IEMoVU5TVVBQT1JURURfWSA/ICdeKD86JyArIHJ4LnNvdXJjZSArICcpJyA6IHJ4LCBmbGFncyk7XG4gICAgICB2YXIgbGltID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IE1BWF9VSU5UMzIgOiBsaW1pdCA+Pj4gMDtcbiAgICAgIGlmIChsaW0gPT09IDApIHJldHVybiBbXTtcbiAgICAgIGlmIChTLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGNhbGxSZWdFeHBFeGVjKHNwbGl0dGVyLCBTKSA9PT0gbnVsbCA/IFtTXSA6IFtdO1xuICAgICAgdmFyIHAgPSAwO1xuICAgICAgdmFyIHEgPSAwO1xuICAgICAgdmFyIEEgPSBbXTtcbiAgICAgIHdoaWxlIChxIDwgUy5sZW5ndGgpIHtcbiAgICAgICAgc3BsaXR0ZXIubGFzdEluZGV4ID0gVU5TVVBQT1JURURfWSA/IDAgOiBxO1xuICAgICAgICB2YXIgeiA9IGNhbGxSZWdFeHBFeGVjKHNwbGl0dGVyLCBVTlNVUFBPUlRFRF9ZID8gc3RyaW5nU2xpY2UoUywgcSkgOiBTKTtcbiAgICAgICAgdmFyIGU7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB6ID09PSBudWxsIHx8XG4gICAgICAgICAgKGUgPSBtaW4odG9MZW5ndGgoc3BsaXR0ZXIubGFzdEluZGV4ICsgKFVOU1VQUE9SVEVEX1kgPyBxIDogMCkpLCBTLmxlbmd0aCkpID09PSBwXG4gICAgICAgICkge1xuICAgICAgICAgIHEgPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgcSwgdW5pY29kZU1hdGNoaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwdXNoKEEsIHN0cmluZ1NsaWNlKFMsIHAsIHEpKTtcbiAgICAgICAgICBpZiAoQS5sZW5ndGggPT09IGxpbSkgcmV0dXJuIEE7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gei5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgIHB1c2goQSwgeltpXSk7XG4gICAgICAgICAgICBpZiAoQS5sZW5ndGggPT09IGxpbSkgcmV0dXJuIEE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHEgPSBwID0gZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcHVzaChBLCBzdHJpbmdTbGljZShTLCBwKSk7XG4gICAgICByZXR1cm4gQTtcbiAgICB9XG4gIF07XG59LCAhU1BMSVRfV09SS1NfV0lUSF9PVkVSV1JJVFRFTl9FWEVDLCBVTlNVUFBPUlRFRF9ZKTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnNwbGl0LmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuc3RhcnRzLXdpdGguanMiOigoX191bnVzZWRfd2VicGFja19tb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9leHBvcnQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9leHBvcnQuanNcIik7XG52YXIgdW5jdXJyeVRoaXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLWNsYXVzZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1jbGF1c2UuanNcIik7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gKF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qc1wiKS5mKTtcbnZhciB0b0xlbmd0aCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy90by1sZW5ndGggKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1sZW5ndGguanNcIik7XG52YXIgdG9TdHJpbmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvdG8tc3RyaW5nICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tc3RyaW5nLmpzXCIpO1xudmFyIG5vdEFSZWdFeHAgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvbm90LWEtcmVnZXhwICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbm90LWEtcmVnZXhwLmpzXCIpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlLmpzXCIpO1xudmFyIGNvcnJlY3RJc1JlZ0V4cExvZ2ljID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2NvcnJlY3QtaXMtcmVnZXhwLWxvZ2ljICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29ycmVjdC1pcy1yZWdleHAtbG9naWMuanNcIik7XG52YXIgSVNfUFVSRSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pcy1wdXJlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtcHVyZS5qc1wiKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXN0cmluZy1wcm90b3R5cGUtc3RhcnRzd2l0aCAtLSBzYWZlXG52YXIgbmF0aXZlU3RhcnRzV2l0aCA9IHVuY3VycnlUaGlzKCcnLnN0YXJ0c1dpdGgpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG52YXIgQ09SUkVDVF9JU19SRUdFWFBfTE9HSUMgPSBjb3JyZWN0SXNSZWdFeHBMb2dpYygnc3RhcnRzV2l0aCcpO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvcHVsbC83MDJcbnZhciBNRE5fUE9MWUZJTExfQlVHID0gIUlTX1BVUkUgJiYgIUNPUlJFQ1RfSVNfUkVHRVhQX0xPR0lDICYmICEhZnVuY3Rpb24gKCkge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihTdHJpbmcucHJvdG90eXBlLCAnc3RhcnRzV2l0aCcpO1xuICByZXR1cm4gZGVzY3JpcHRvciAmJiAhZGVzY3JpcHRvci53cml0YWJsZTtcbn0oKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUuc3RhcnRzV2l0aGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc3RhcnRzd2l0aFxuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFNRE5fUE9MWUZJTExfQlVHICYmICFDT1JSRUNUX0lTX1JFR0VYUF9MT0dJQyB9LCB7XG4gIHN0YXJ0c1dpdGg6IGZ1bmN0aW9uIHN0YXJ0c1dpdGgoc2VhcmNoU3RyaW5nIC8qICwgcG9zaXRpb24gPSAwICovKSB7XG4gICAgdmFyIHRoYXQgPSB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpKTtcbiAgICBub3RBUmVnRXhwKHNlYXJjaFN0cmluZyk7XG4gICAgdmFyIGluZGV4ID0gdG9MZW5ndGgobWluKGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCB0aGF0Lmxlbmd0aCkpO1xuICAgIHZhciBzZWFyY2ggPSB0b1N0cmluZyhzZWFyY2hTdHJpbmcpO1xuICAgIHJldHVybiBuYXRpdmVTdGFydHNXaXRoXG4gICAgICA/IG5hdGl2ZVN0YXJ0c1dpdGgodGhhdCwgc2VhcmNoLCBpbmRleClcbiAgICAgIDogc3RyaW5nU2xpY2UodGhhdCwgaW5kZXgsIGluZGV4ICsgc2VhcmNoLmxlbmd0aCkgPT09IHNlYXJjaDtcbiAgfVxufSk7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5zdGFydHMtd2l0aC5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnRyaW0tZW5kLmpzIjooKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxuLy8gVE9ETzogUmVtb3ZlIHRoaXMgbGluZSBmcm9tIGBjb3JlLWpzQDRgXG5fX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9tb2R1bGVzL2VzLnN0cmluZy50cmltLXJpZ2h0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy50cmltLXJpZ2h0LmpzXCIpO1xudmFyICQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZXhwb3J0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzXCIpO1xudmFyIHRyaW1FbmQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvc3RyaW5nLXRyaW0tZW5kICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3RyaW5nLXRyaW0tZW5kLmpzXCIpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS50cmltRW5kYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltZW5kXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tc3RyaW5nLXByb3RvdHlwZS10cmltc3RhcnQtdHJpbWVuZCAtLSBzYWZlXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIG5hbWU6ICd0cmltRW5kJywgZm9yY2VkOiAnJy50cmltRW5kICE9PSB0cmltRW5kIH0sIHtcbiAgdHJpbUVuZDogdHJpbUVuZFxufSk7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy50cmltLWVuZC5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnRyaW0tcmlnaHQuanMiOigoX191bnVzZWRfd2VicGFja19tb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9leHBvcnQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9leHBvcnQuanNcIik7XG52YXIgdHJpbUVuZCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9zdHJpbmctdHJpbS1lbmQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctdHJpbS1lbmQuanNcIik7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLnRyaW1SaWdodGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbWVuZFxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXN0cmluZy1wcm90b3R5cGUtdHJpbWxlZnQtdHJpbXJpZ2h0IC0tIHNhZmVcbiQoeyB0YXJnZXQ6ICdTdHJpbmcnLCBwcm90bzogdHJ1ZSwgbmFtZTogJ3RyaW1FbmQnLCBmb3JjZWQ6ICcnLnRyaW1SaWdodCAhPT0gdHJpbUVuZCB9LCB7XG4gIHRyaW1SaWdodDogdHJpbUVuZFxufSk7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy50cmltLXJpZ2h0LmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcudHJpbS5qcyI6KChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciAkID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2V4cG9ydCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2V4cG9ydC5qc1wiKTtcbnZhciAkdHJpbSA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvc3RyaW5nLXRyaW0gKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctdHJpbS5qc1wiKS50cmltKTtcbnZhciBmb3JjZWRTdHJpbmdUcmltTWV0aG9kID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3N0cmluZy10cmltLWZvcmNlZCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3N0cmluZy10cmltLWZvcmNlZC5qc1wiKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGUudHJpbWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbVxuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IGZvcmNlZFN0cmluZ1RyaW1NZXRob2QoJ3RyaW0nKSB9LCB7XG4gIHRyaW06IGZ1bmN0aW9uIHRyaW0oKSB7XG4gICAgcmV0dXJuICR0cmltKHRoaXMpO1xuICB9XG59KTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnRyaW0uanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5kZXNjcmlwdGlvbi5qcyI6KChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCIvLyBgU3ltYm9sLnByb3RvdHlwZS5kZXNjcmlwdGlvbmAgZ2V0dGVyXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUuZGVzY3JpcHRpb25cblxudmFyICQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZXhwb3J0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzXCIpO1xudmFyIERFU0NSSVBUT1JTID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanNcIik7XG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2dsb2JhbCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dsb2JhbC5qc1wiKTtcbnZhciB1bmN1cnJ5VGhpcyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMuanNcIik7XG52YXIgaGFzT3duID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5LmpzXCIpO1xudmFyIGlzQ2FsbGFibGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qc1wiKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mLmpzXCIpO1xudmFyIHRvU3RyaW5nID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3RvLXN0cmluZyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXN0cmluZy5qc1wiKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yLmpzXCIpO1xudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzLmpzXCIpO1xuXG52YXIgTmF0aXZlU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBTeW1ib2xQcm90b3R5cGUgPSBOYXRpdmVTeW1ib2wgJiYgTmF0aXZlU3ltYm9sLnByb3RvdHlwZTtcblxuaWYgKERFU0NSSVBUT1JTICYmIGlzQ2FsbGFibGUoTmF0aXZlU3ltYm9sKSAmJiAoISgnZGVzY3JpcHRpb24nIGluIFN5bWJvbFByb3RvdHlwZSkgfHxcbiAgLy8gU2FmYXJpIDEyIGJ1Z1xuICBOYXRpdmVTeW1ib2woKS5kZXNjcmlwdGlvbiAhPT0gdW5kZWZpbmVkXG4pKSB7XG4gIHZhciBFbXB0eVN0cmluZ0Rlc2NyaXB0aW9uU3RvcmUgPSB7fTtcbiAgLy8gd3JhcCBTeW1ib2wgY29uc3RydWN0b3IgZm9yIGNvcnJlY3Qgd29yayB3aXRoIHVuZGVmaW5lZCBkZXNjcmlwdGlvblxuICB2YXIgU3ltYm9sV3JhcHBlciA9IGZ1bmN0aW9uIFN5bWJvbCgpIHtcbiAgICB2YXIgZGVzY3JpcHRpb24gPSBhcmd1bWVudHMubGVuZ3RoIDwgMSB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHRvU3RyaW5nKGFyZ3VtZW50c1swXSk7XG4gICAgdmFyIHJlc3VsdCA9IGlzUHJvdG90eXBlT2YoU3ltYm9sUHJvdG90eXBlLCB0aGlzKVxuICAgICAgPyBuZXcgTmF0aXZlU3ltYm9sKGRlc2NyaXB0aW9uKVxuICAgICAgLy8gaW4gRWRnZSAxMywgU3RyaW5nKFN5bWJvbCh1bmRlZmluZWQpKSA9PT0gJ1N5bWJvbCh1bmRlZmluZWQpJ1xuICAgICAgOiBkZXNjcmlwdGlvbiA9PT0gdW5kZWZpbmVkID8gTmF0aXZlU3ltYm9sKCkgOiBOYXRpdmVTeW1ib2woZGVzY3JpcHRpb24pO1xuICAgIGlmIChkZXNjcmlwdGlvbiA9PT0gJycpIEVtcHR5U3RyaW5nRGVzY3JpcHRpb25TdG9yZVtyZXN1bHRdID0gdHJ1ZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoU3ltYm9sV3JhcHBlciwgTmF0aXZlU3ltYm9sKTtcbiAgU3ltYm9sV3JhcHBlci5wcm90b3R5cGUgPSBTeW1ib2xQcm90b3R5cGU7XG4gIFN5bWJvbFByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFN5bWJvbFdyYXBwZXI7XG5cbiAgdmFyIE5BVElWRV9TWU1CT0wgPSBTdHJpbmcoTmF0aXZlU3ltYm9sKCd0ZXN0JykpID09ICdTeW1ib2wodGVzdCknO1xuICB2YXIgdGhpc1N5bWJvbFZhbHVlID0gdW5jdXJyeVRoaXMoU3ltYm9sUHJvdG90eXBlLnZhbHVlT2YpO1xuICB2YXIgc3ltYm9sRGVzY3JpcHRpdmVTdHJpbmcgPSB1bmN1cnJ5VGhpcyhTeW1ib2xQcm90b3R5cGUudG9TdHJpbmcpO1xuICB2YXIgcmVnZXhwID0gL15TeW1ib2xcXCgoLiopXFwpW14pXSskLztcbiAgdmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbiAgdmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG4gIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihTeW1ib2xQcm90b3R5cGUsICdkZXNjcmlwdGlvbicsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBkZXNjcmlwdGlvbigpIHtcbiAgICAgIHZhciBzeW1ib2wgPSB0aGlzU3ltYm9sVmFsdWUodGhpcyk7XG4gICAgICBpZiAoaGFzT3duKEVtcHR5U3RyaW5nRGVzY3JpcHRpb25TdG9yZSwgc3ltYm9sKSkgcmV0dXJuICcnO1xuICAgICAgdmFyIHN0cmluZyA9IHN5bWJvbERlc2NyaXB0aXZlU3RyaW5nKHN5bWJvbCk7XG4gICAgICB2YXIgZGVzYyA9IE5BVElWRV9TWU1CT0wgPyBzdHJpbmdTbGljZShzdHJpbmcsIDcsIC0xKSA6IHJlcGxhY2Uoc3RyaW5nLCByZWdleHAsICckMScpO1xuICAgICAgcmV0dXJuIGRlc2MgPT09ICcnID8gdW5kZWZpbmVkIDogZGVzYztcbiAgICB9XG4gIH0pO1xuXG4gICQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICAgIFN5bWJvbDogU3ltYm9sV3JhcHBlclxuICB9KTtcbn1cblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmRlc2NyaXB0aW9uLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS5hdC5qcyI6KChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBBcnJheUJ1ZmZlclZpZXdDb3JlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci12aWV3LWNvcmUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlLmpzXCIpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UuanNcIik7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eS5qc1wiKTtcblxudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS5hdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSV0eXBlZGFycmF5JS5wcm90b3R5cGUuYXRcbmV4cG9ydFR5cGVkQXJyYXlNZXRob2QoJ2F0JywgZnVuY3Rpb24gYXQoaW5kZXgpIHtcbiAgdmFyIE8gPSBhVHlwZWRBcnJheSh0aGlzKTtcbiAgdmFyIGxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICB2YXIgcmVsYXRpdmVJbmRleCA9IHRvSW50ZWdlck9ySW5maW5pdHkoaW5kZXgpO1xuICB2YXIgayA9IHJlbGF0aXZlSW5kZXggPj0gMCA/IHJlbGF0aXZlSW5kZXggOiBsZW4gKyByZWxhdGl2ZUluZGV4O1xuICByZXR1cm4gKGsgPCAwIHx8IGsgPj0gbGVuKSA/IHVuZGVmaW5lZCA6IE9ba107XG59KTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkuYXQuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LmZpbGwuanMiOigoX191bnVzZWRfd2VicGFja19tb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZS5qc1wiKTtcbnZhciAkZmlsbCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9hcnJheS1maWxsICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktZmlsbC5qc1wiKTtcbnZhciB0b0JpZ0ludCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy90by1iaWctaW50ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tYmlnLWludC5qc1wiKTtcbnZhciBjbGFzc29mID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2NsYXNzb2YgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jbGFzc29mLmpzXCIpO1xudmFyIGNhbGwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanNcIik7XG52YXIgdW5jdXJyeVRoaXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzXCIpO1xudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2ZhaWxzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZmFpbHMuanNcIik7XG5cbnZhciBhVHlwZWRBcnJheSA9IEFycmF5QnVmZmVyVmlld0NvcmUuYVR5cGVkQXJyYXk7XG52YXIgZXhwb3J0VHlwZWRBcnJheU1ldGhvZCA9IEFycmF5QnVmZmVyVmlld0NvcmUuZXhwb3J0VHlwZWRBcnJheU1ldGhvZDtcbnZhciBzbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxuLy8gVjggfiBDaHJvbWUgPCA1OSwgU2FmYXJpIDwgMTQuMSwgRkYgPCA1NSwgRWRnZSA8PTE4XG52YXIgQ09OVkVSU0lPTl9CVUcgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBjb3VudCA9IDA7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby10eXBlZC1hcnJheXMgLS0gc2FmZVxuICBuZXcgSW50OEFycmF5KDIpLmZpbGwoeyB2YWx1ZU9mOiBmdW5jdGlvbiAoKSB7IHJldHVybiBjb3VudCsrOyB9IH0pO1xuICByZXR1cm4gY291bnQgIT09IDE7XG59KTtcblxuLy8gYCVUeXBlZEFycmF5JS5wcm90b3R5cGUuZmlsbGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSV0eXBlZGFycmF5JS5wcm90b3R5cGUuZmlsbFxuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCgnZmlsbCcsIGZ1bmN0aW9uIGZpbGwodmFsdWUgLyogLCBzdGFydCwgZW5kICovKSB7XG4gIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICBhVHlwZWRBcnJheSh0aGlzKTtcbiAgdmFyIGFjdHVhbFZhbHVlID0gc2xpY2UoY2xhc3NvZih0aGlzKSwgMCwgMykgPT09ICdCaWcnID8gdG9CaWdJbnQodmFsdWUpIDogK3ZhbHVlO1xuICByZXR1cm4gY2FsbCgkZmlsbCwgdGhpcywgYWN0dWFsVmFsdWUsIGxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIGxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQpO1xufSwgQ09OVkVSU0lPTl9CVUcpO1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS5maWxsLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS5maW5kLWxhc3QtaW5kZXguanMiOigoX191bnVzZWRfd2VicGFja19tb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZS5qc1wiKTtcbnZhciAkZmluZExhc3RJbmRleCA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uLWZyb20tbGFzdCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbi1mcm9tLWxhc3QuanNcIikuZmluZExhc3RJbmRleCk7XG5cbnZhciBhVHlwZWRBcnJheSA9IEFycmF5QnVmZmVyVmlld0NvcmUuYVR5cGVkQXJyYXk7XG52YXIgZXhwb3J0VHlwZWRBcnJheU1ldGhvZCA9IEFycmF5QnVmZmVyVmlld0NvcmUuZXhwb3J0VHlwZWRBcnJheU1ldGhvZDtcblxuLy8gYCVUeXBlZEFycmF5JS5wcm90b3R5cGUuZmluZExhc3RJbmRleGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSV0eXBlZGFycmF5JS5wcm90b3R5cGUuZmluZGxhc3RpbmRleFxuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCgnZmluZExhc3RJbmRleCcsIGZ1bmN0aW9uIGZpbmRMYXN0SW5kZXgocHJlZGljYXRlIC8qICwgdGhpc0FyZyAqLykge1xuICByZXR1cm4gJGZpbmRMYXN0SW5kZXgoYVR5cGVkQXJyYXkodGhpcyksIHByZWRpY2F0ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xufSk7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LmZpbmQtbGFzdC1pbmRleC5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkuZmluZC1sYXN0LmpzIjooKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIEFycmF5QnVmZmVyVmlld0NvcmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci12aWV3LWNvcmUuanNcIik7XG52YXIgJGZpbmRMYXN0ID0gKF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24tZnJvbS1sYXN0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uLWZyb20tbGFzdC5qc1wiKS5maW5kTGFzdCk7XG5cbnZhciBhVHlwZWRBcnJheSA9IEFycmF5QnVmZmVyVmlld0NvcmUuYVR5cGVkQXJyYXk7XG52YXIgZXhwb3J0VHlwZWRBcnJheU1ldGhvZCA9IEFycmF5QnVmZmVyVmlld0NvcmUuZXhwb3J0VHlwZWRBcnJheU1ldGhvZDtcblxuLy8gYCVUeXBlZEFycmF5JS5wcm90b3R5cGUuZmluZExhc3RgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0ldHlwZWRhcnJheSUucHJvdG90eXBlLmZpbmRsYXN0XG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCdmaW5kTGFzdCcsIGZ1bmN0aW9uIGZpbmRMYXN0KHByZWRpY2F0ZSAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgcmV0dXJuICRmaW5kTGFzdChhVHlwZWRBcnJheSh0aGlzKSwgcHJlZGljYXRlLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG59KTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkuZmluZC1sYXN0LmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS5pbnQzMi1hcnJheS5qcyI6KChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBjcmVhdGVUeXBlZEFycmF5Q29uc3RydWN0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvdHlwZWQtYXJyYXktY29uc3RydWN0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90eXBlZC1hcnJheS1jb25zdHJ1Y3Rvci5qc1wiKTtcblxuLy8gYEludDMyQXJyYXlgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXR5cGVkYXJyYXktb2JqZWN0c1xuY3JlYXRlVHlwZWRBcnJheUNvbnN0cnVjdG9yKCdJbnQzMicsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBJbnQzMkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkuaW50MzItYXJyYXkuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LmludDgtYXJyYXkuanMiOigoX191bnVzZWRfd2VicGFja19tb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgY3JlYXRlVHlwZWRBcnJheUNvbnN0cnVjdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3R5cGVkLWFycmF5LWNvbnN0cnVjdG9yICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdHlwZWQtYXJyYXktY29uc3RydWN0b3IuanNcIik7XG5cbi8vIGBJbnQ4QXJyYXlgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXR5cGVkYXJyYXktb2JqZWN0c1xuY3JlYXRlVHlwZWRBcnJheUNvbnN0cnVjdG9yKCdJbnQ4JywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEludDhBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LmludDgtYXJyYXkuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LnNldC5qcyI6KChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZ2xvYmFsICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2xvYmFsLmpzXCIpO1xudmFyIGNhbGwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwuanNcIik7XG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZS5qc1wiKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlLmpzXCIpO1xudmFyIHRvT2Zmc2V0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3RvLW9mZnNldCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLW9mZnNldC5qc1wiKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvdG8tb2JqZWN0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tb2JqZWN0LmpzXCIpO1xudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2ZhaWxzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZmFpbHMuanNcIik7XG5cbnZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG52YXIgSW50OEFycmF5ID0gZ2xvYmFsLkludDhBcnJheTtcbnZhciBJbnQ4QXJyYXlQcm90b3R5cGUgPSBJbnQ4QXJyYXkgJiYgSW50OEFycmF5LnByb3RvdHlwZTtcbnZhciAkc2V0ID0gSW50OEFycmF5UHJvdG90eXBlICYmIEludDhBcnJheVByb3RvdHlwZS5zZXQ7XG52YXIgYVR5cGVkQXJyYXkgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5O1xudmFyIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7XG5cbnZhciBXT1JLU19XSVRIX09CSkVDVFNfQU5EX0dFTkVSSUNfT05fVFlQRURfQVJSQVlTID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLXR5cGVkLWFycmF5cyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICB2YXIgYXJyYXkgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkoMik7XG4gIGNhbGwoJHNldCwgYXJyYXksIHsgbGVuZ3RoOiAxLCAwOiAzIH0sIDEpO1xuICByZXR1cm4gYXJyYXlbMV0gIT09IDM7XG59KTtcblxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MTEyOTQgYW5kIG90aGVyXG52YXIgVE9fT0JKRUNUX0JVRyA9IFdPUktTX1dJVEhfT0JKRUNUU19BTkRfR0VORVJJQ19PTl9UWVBFRF9BUlJBWVMgJiYgQXJyYXlCdWZmZXJWaWV3Q29yZS5OQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIGFycmF5ID0gbmV3IEludDhBcnJheSgyKTtcbiAgYXJyYXkuc2V0KDEpO1xuICBhcnJheS5zZXQoJzInLCAxKTtcbiAgcmV0dXJuIGFycmF5WzBdICE9PSAwIHx8IGFycmF5WzFdICE9PSAyO1xufSk7XG5cbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLnNldGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSV0eXBlZGFycmF5JS5wcm90b3R5cGUuc2V0XG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCdzZXQnLCBmdW5jdGlvbiBzZXQoYXJyYXlMaWtlIC8qICwgb2Zmc2V0ICovKSB7XG4gIGFUeXBlZEFycmF5KHRoaXMpO1xuICB2YXIgb2Zmc2V0ID0gdG9PZmZzZXQoYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIDEpO1xuICB2YXIgc3JjID0gdG9JbmRleGVkT2JqZWN0KGFycmF5TGlrZSk7XG4gIGlmIChXT1JLU19XSVRIX09CSkVDVFNfQU5EX0dFTkVSSUNfT05fVFlQRURfQVJSQVlTKSByZXR1cm4gY2FsbCgkc2V0LCB0aGlzLCBzcmMsIG9mZnNldCk7XG4gIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgdmFyIGxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKHNyYyk7XG4gIHZhciBpbmRleCA9IDA7XG4gIGlmIChsZW4gKyBvZmZzZXQgPiBsZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoJ1dyb25nIGxlbmd0aCcpO1xuICB3aGlsZSAoaW5kZXggPCBsZW4pIHRoaXNbb2Zmc2V0ICsgaW5kZXhdID0gc3JjW2luZGV4KytdO1xufSwgIVdPUktTX1dJVEhfT0JKRUNUU19BTkRfR0VORVJJQ19PTl9UWVBFRF9BUlJBWVMgfHwgVE9fT0JKRUNUX0JVRyk7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LnNldC5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkuc29ydC5qcyI6KChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZ2xvYmFsICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2xvYmFsLmpzXCIpO1xudmFyIHVuY3VycnlUaGlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy1jbGF1c2UgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMtY2xhdXNlLmpzXCIpO1xudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2ZhaWxzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZmFpbHMuanNcIik7XG52YXIgYUNhbGxhYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzXCIpO1xudmFyIGludGVybmFsU29ydCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9hcnJheS1zb3J0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktc29ydC5qc1wiKTtcbnZhciBBcnJheUJ1ZmZlclZpZXdDb3JlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci12aWV3LWNvcmUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlLmpzXCIpO1xudmFyIEZGID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2VuZ2luZS1mZi12ZXJzaW9uICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLWZmLXZlcnNpb24uanNcIik7XG52YXIgSUVfT1JfRURHRSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9lbmdpbmUtaXMtaWUtb3ItZWRnZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS1pcy1pZS1vci1lZGdlLmpzXCIpO1xudmFyIFY4ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24uanNcIik7XG52YXIgV0VCS0lUID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2VuZ2luZS13ZWJraXQtdmVyc2lvbiAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS13ZWJraXQtdmVyc2lvbi5qc1wiKTtcblxudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xudmFyIFVpbnQxNkFycmF5ID0gZ2xvYmFsLlVpbnQxNkFycmF5O1xudmFyIG5hdGl2ZVNvcnQgPSBVaW50MTZBcnJheSAmJiB1bmN1cnJ5VGhpcyhVaW50MTZBcnJheS5wcm90b3R5cGUuc29ydCk7XG5cbi8vIFdlYktpdFxudmFyIEFDQ0VQVF9JTkNPUlJFQ1RfQVJHVU1FTlRTID0gISFuYXRpdmVTb3J0ICYmICEoZmFpbHMoZnVuY3Rpb24gKCkge1xuICBuYXRpdmVTb3J0KG5ldyBVaW50MTZBcnJheSgyKSwgbnVsbCk7XG59KSAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIG5hdGl2ZVNvcnQobmV3IFVpbnQxNkFycmF5KDIpLCB7fSk7XG59KSk7XG5cbnZhciBTVEFCTEVfU09SVCA9ICEhbmF0aXZlU29ydCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBmZWF0dXJlIGRldGVjdGlvbiBjYW4gYmUgdG9vIHNsb3csIHNvIGNoZWNrIGVuZ2luZXMgdmVyc2lvbnNcbiAgaWYgKFY4KSByZXR1cm4gVjggPCA3NDtcbiAgaWYgKEZGKSByZXR1cm4gRkYgPCA2NztcbiAgaWYgKElFX09SX0VER0UpIHJldHVybiB0cnVlO1xuICBpZiAoV0VCS0lUKSByZXR1cm4gV0VCS0lUIDwgNjAyO1xuXG4gIHZhciBhcnJheSA9IG5ldyBVaW50MTZBcnJheSg1MTYpO1xuICB2YXIgZXhwZWN0ZWQgPSBBcnJheSg1MTYpO1xuICB2YXIgaW5kZXgsIG1vZDtcblxuICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCA1MTY7IGluZGV4KyspIHtcbiAgICBtb2QgPSBpbmRleCAlIDQ7XG4gICAgYXJyYXlbaW5kZXhdID0gNTE1IC0gaW5kZXg7XG4gICAgZXhwZWN0ZWRbaW5kZXhdID0gaW5kZXggLSAyICogbW9kICsgMztcbiAgfVxuXG4gIG5hdGl2ZVNvcnQoYXJyYXksIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIChhIC8gNCB8IDApIC0gKGIgLyA0IHwgMCk7XG4gIH0pO1xuXG4gIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IDUxNjsgaW5kZXgrKykge1xuICAgIGlmIChhcnJheVtpbmRleF0gIT09IGV4cGVjdGVkW2luZGV4XSkgcmV0dXJuIHRydWU7XG4gIH1cbn0pO1xuXG52YXIgZ2V0U29ydENvbXBhcmUgPSBmdW5jdGlvbiAoY29tcGFyZWZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoeCwgeSkge1xuICAgIGlmIChjb21wYXJlZm4gIT09IHVuZGVmaW5lZCkgcmV0dXJuICtjb21wYXJlZm4oeCwgeSkgfHwgMDtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgIGlmICh5ICE9PSB5KSByZXR1cm4gLTE7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICBpZiAoeCAhPT0geCkgcmV0dXJuIDE7XG4gICAgaWYgKHggPT09IDAgJiYgeSA9PT0gMCkgcmV0dXJuIDEgLyB4ID4gMCAmJiAxIC8geSA8IDAgPyAxIDogLTE7XG4gICAgcmV0dXJuIHggPiB5O1xuICB9O1xufTtcblxuLy8gYCVUeXBlZEFycmF5JS5wcm90b3R5cGUuc29ydGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSV0eXBlZGFycmF5JS5wcm90b3R5cGUuc29ydFxuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCgnc29ydCcsIGZ1bmN0aW9uIHNvcnQoY29tcGFyZWZuKSB7XG4gIGlmIChjb21wYXJlZm4gIT09IHVuZGVmaW5lZCkgYUNhbGxhYmxlKGNvbXBhcmVmbik7XG4gIGlmIChTVEFCTEVfU09SVCkgcmV0dXJuIG5hdGl2ZVNvcnQodGhpcywgY29tcGFyZWZuKTtcblxuICByZXR1cm4gaW50ZXJuYWxTb3J0KGFUeXBlZEFycmF5KHRoaXMpLCBnZXRTb3J0Q29tcGFyZShjb21wYXJlZm4pKTtcbn0sICFTVEFCTEVfU09SVCB8fCBBQ0NFUFRfSU5DT1JSRUNUX0FSR1VNRU5UUyk7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LnNvcnQuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LnRvLWxvY2FsZS1zdHJpbmcuanMiOigoX191bnVzZWRfd2VicGFja19tb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2dsb2JhbCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dsb2JhbC5qc1wiKTtcbnZhciBhcHBseSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5LmpzXCIpO1xudmFyIEFycmF5QnVmZmVyVmlld0NvcmUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci12aWV3LWNvcmUuanNcIik7XG52YXIgZmFpbHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZmFpbHMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mYWlscy5qc1wiKTtcbnZhciBhcnJheVNsaWNlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktc2xpY2UuanNcIik7XG5cbnZhciBJbnQ4QXJyYXkgPSBnbG9iYWwuSW50OEFycmF5O1xudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xudmFyICR0b0xvY2FsZVN0cmluZyA9IFtdLnRvTG9jYWxlU3RyaW5nO1xuXG4vLyBpT1MgU2FmYXJpIDYueCBmYWlscyBoZXJlXG52YXIgVE9fTE9DQUxFX1NUUklOR19CVUcgPSAhIUludDhBcnJheSAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICR0b0xvY2FsZVN0cmluZy5jYWxsKG5ldyBJbnQ4QXJyYXkoMSkpO1xufSk7XG5cbnZhciBGT1JDRUQgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBbMSwgMl0udG9Mb2NhbGVTdHJpbmcoKSAhPSBuZXcgSW50OEFycmF5KFsxLCAyXSkudG9Mb2NhbGVTdHJpbmcoKTtcbn0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIEludDhBcnJheS5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcuY2FsbChbMSwgMl0pO1xufSk7XG5cbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXR5cGVkYXJyYXklLnByb3RvdHlwZS50b2xvY2FsZXN0cmluZ1xuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCgndG9Mb2NhbGVTdHJpbmcnLCBmdW5jdGlvbiB0b0xvY2FsZVN0cmluZygpIHtcbiAgcmV0dXJuIGFwcGx5KFxuICAgICR0b0xvY2FsZVN0cmluZyxcbiAgICBUT19MT0NBTEVfU1RSSU5HX0JVRyA/IGFycmF5U2xpY2UoYVR5cGVkQXJyYXkodGhpcykpIDogYVR5cGVkQXJyYXkodGhpcyksXG4gICAgYXJyYXlTbGljZShhcmd1bWVudHMpXG4gICk7XG59LCBGT1JDRUQpO1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS50by1sb2NhbGUtc3RyaW5nLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS50by1yZXZlcnNlZC5qcyI6KChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBhcnJheVRvUmV2ZXJzZWQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvYXJyYXktdG8tcmV2ZXJzZWQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS10by1yZXZlcnNlZC5qc1wiKTtcbnZhciBBcnJheUJ1ZmZlclZpZXdDb3JlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci12aWV3LWNvcmUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlLmpzXCIpO1xuXG52YXIgYVR5cGVkQXJyYXkgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5O1xudmFyIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7XG52YXIgZ2V0VHlwZWRBcnJheUNvbnN0cnVjdG9yID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5nZXRUeXBlZEFycmF5Q29uc3RydWN0b3I7XG5cbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLnRvUmV2ZXJzZWRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0ldHlwZWRhcnJheSUucHJvdG90eXBlLnRvcmV2ZXJzZWRcbmV4cG9ydFR5cGVkQXJyYXlNZXRob2QoJ3RvUmV2ZXJzZWQnLCBmdW5jdGlvbiB0b1JldmVyc2VkKCkge1xuICByZXR1cm4gYXJyYXlUb1JldmVyc2VkKGFUeXBlZEFycmF5KHRoaXMpLCBnZXRUeXBlZEFycmF5Q29uc3RydWN0b3IodGhpcykpO1xufSk7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LnRvLXJldmVyc2VkLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS50by1zb3J0ZWQuanMiOigoX191bnVzZWRfd2VicGFja19tb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZS5qc1wiKTtcbnZhciB1bmN1cnJ5VGhpcyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMuanNcIik7XG52YXIgYUNhbGxhYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzXCIpO1xudmFyIGFycmF5RnJvbUNvbnN0cnVjdG9yQW5kTGlzdCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9hcnJheS1mcm9tLWNvbnN0cnVjdG9yLWFuZC1saXN0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktZnJvbS1jb25zdHJ1Y3Rvci1hbmQtbGlzdC5qc1wiKTtcblxudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBnZXRUeXBlZEFycmF5Q29uc3RydWN0b3IgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmdldFR5cGVkQXJyYXlDb25zdHJ1Y3RvcjtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xudmFyIHNvcnQgPSB1bmN1cnJ5VGhpcyhBcnJheUJ1ZmZlclZpZXdDb3JlLlR5cGVkQXJyYXlQcm90b3R5cGUuc29ydCk7XG5cbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLnRvU29ydGVkYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXR5cGVkYXJyYXklLnByb3RvdHlwZS50b3NvcnRlZFxuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCgndG9Tb3J0ZWQnLCBmdW5jdGlvbiB0b1NvcnRlZChjb21wYXJlRm4pIHtcbiAgaWYgKGNvbXBhcmVGbiAhPT0gdW5kZWZpbmVkKSBhQ2FsbGFibGUoY29tcGFyZUZuKTtcbiAgdmFyIE8gPSBhVHlwZWRBcnJheSh0aGlzKTtcbiAgdmFyIEEgPSBhcnJheUZyb21Db25zdHJ1Y3RvckFuZExpc3QoZ2V0VHlwZWRBcnJheUNvbnN0cnVjdG9yKE8pLCBPKTtcbiAgcmV0dXJuIHNvcnQoQSwgY29tcGFyZUZuKTtcbn0pO1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS50by1zb3J0ZWQuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LnVpbnQzMi1hcnJheS5qcyI6KChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBjcmVhdGVUeXBlZEFycmF5Q29uc3RydWN0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvdHlwZWQtYXJyYXktY29uc3RydWN0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90eXBlZC1hcnJheS1jb25zdHJ1Y3Rvci5qc1wiKTtcblxuLy8gYFVpbnQzMkFycmF5YCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10eXBlZGFycmF5LW9iamVjdHNcbmNyZWF0ZVR5cGVkQXJyYXlDb25zdHJ1Y3RvcignVWludDMyJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFVpbnQzMkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkudWludDMyLWFycmF5LmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS51aW50OC1hcnJheS5qcyI6KChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBjcmVhdGVUeXBlZEFycmF5Q29uc3RydWN0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvdHlwZWQtYXJyYXktY29uc3RydWN0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90eXBlZC1hcnJheS1jb25zdHJ1Y3Rvci5qc1wiKTtcblxuLy8gYFVpbnQ4QXJyYXlgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXR5cGVkYXJyYXktb2JqZWN0c1xuY3JlYXRlVHlwZWRBcnJheUNvbnN0cnVjdG9yKCdVaW50OCcsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50OEFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkudWludDgtYXJyYXkuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LnVpbnQ4LWNsYW1wZWQtYXJyYXkuanMiOigoX191bnVzZWRfd2VicGFja19tb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgY3JlYXRlVHlwZWRBcnJheUNvbnN0cnVjdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3R5cGVkLWFycmF5LWNvbnN0cnVjdG9yICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdHlwZWQtYXJyYXktY29uc3RydWN0b3IuanNcIik7XG5cbi8vIGBVaW50OENsYW1wZWRBcnJheWAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdHlwZWRhcnJheS1vYmplY3RzXG5jcmVhdGVUeXBlZEFycmF5Q29uc3RydWN0b3IoJ1VpbnQ4JywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFVpbnQ4Q2xhbXBlZEFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59LCB0cnVlKTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkudWludDgtY2xhbXBlZC1hcnJheS5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkud2l0aC5qcyI6KChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBhcnJheVdpdGggPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvYXJyYXktd2l0aCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LXdpdGguanNcIik7XG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZS5qc1wiKTtcbnZhciBpc0JpZ0ludEFycmF5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2lzLWJpZy1pbnQtYXJyYXkgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1iaWctaW50LWFycmF5LmpzXCIpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHkuanNcIik7XG52YXIgdG9CaWdJbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvdG8tYmlnLWludCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWJpZy1pbnQuanNcIik7XG5cbnZhciBhVHlwZWRBcnJheSA9IEFycmF5QnVmZmVyVmlld0NvcmUuYVR5cGVkQXJyYXk7XG52YXIgZ2V0VHlwZWRBcnJheUNvbnN0cnVjdG9yID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5nZXRUeXBlZEFycmF5Q29uc3RydWN0b3I7XG52YXIgZXhwb3J0VHlwZWRBcnJheU1ldGhvZCA9IEFycmF5QnVmZmVyVmlld0NvcmUuZXhwb3J0VHlwZWRBcnJheU1ldGhvZDtcblxudmFyIFBST1BFUl9PUkRFUiA9ICEhZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10aHJvdy1saXRlcmFsLCBlcy9uby10eXBlZC1hcnJheXMsIGVzL25vLWFycmF5LXByb3RvdHlwZS13aXRoIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gICAgbmV3IEludDhBcnJheSgxKVsnd2l0aCddKDIsIHsgdmFsdWVPZjogZnVuY3Rpb24gKCkgeyB0aHJvdyA4OyB9IH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vIHNvbWUgZWFybHkgaW1wbGVtZW50YXRpb25zLCBsaWtlIFdlYktpdCwgZG9lcyBub3QgZm9sbG93IHRoZSBmaW5hbCBzZW1hbnRpY1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWNoYW5nZS1hcnJheS1ieS1jb3B5L3B1bGwvODZcbiAgICByZXR1cm4gZXJyb3IgPT09IDg7XG4gIH1cbn0oKTtcblxuLy8gYCVUeXBlZEFycmF5JS5wcm90b3R5cGUud2l0aGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSV0eXBlZGFycmF5JS5wcm90b3R5cGUud2l0aFxuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCgnd2l0aCcsIHsgJ3dpdGgnOiBmdW5jdGlvbiAoaW5kZXgsIHZhbHVlKSB7XG4gIHZhciBPID0gYVR5cGVkQXJyYXkodGhpcyk7XG4gIHZhciByZWxhdGl2ZUluZGV4ID0gdG9JbnRlZ2VyT3JJbmZpbml0eShpbmRleCk7XG4gIHZhciBhY3R1YWxWYWx1ZSA9IGlzQmlnSW50QXJyYXkoTykgPyB0b0JpZ0ludCh2YWx1ZSkgOiArdmFsdWU7XG4gIHJldHVybiBhcnJheVdpdGgoTywgZ2V0VHlwZWRBcnJheUNvbnN0cnVjdG9yKE8pLCByZWxhdGl2ZUluZGV4LCBhY3R1YWxWYWx1ZSk7XG59IH1bJ3dpdGgnXSwgIVBST1BFUl9PUkRFUik7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LndpdGguanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLndlYWstbWFwLmNvbnN0cnVjdG9yLmpzIjooKF9fdW51c2VkX3dlYnBhY2tfbW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxudmFyIEZSRUVaSU5HID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2ZyZWV6aW5nICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnJlZXppbmcuanNcIik7XG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2dsb2JhbCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dsb2JhbC5qc1wiKTtcbnZhciB1bmN1cnJ5VGhpcyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMuanNcIik7XG52YXIgZGVmaW5lQnVpbHRJbnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWlucyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbnMuanNcIik7XG52YXIgSW50ZXJuYWxNZXRhZGF0YU1vZHVsZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pbnRlcm5hbC1tZXRhZGF0YSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhLmpzXCIpO1xudmFyIGNvbGxlY3Rpb24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvY29sbGVjdGlvbiAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NvbGxlY3Rpb24uanNcIik7XG52YXIgY29sbGVjdGlvbldlYWsgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvY29sbGVjdGlvbi13ZWFrICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY29sbGVjdGlvbi13ZWFrLmpzXCIpO1xudmFyIGlzT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2lzLW9iamVjdCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLW9iamVjdC5qc1wiKTtcbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZS5qc1wiKS5lbmZvcmNlKTtcbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mYWlscyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzXCIpO1xudmFyIE5BVElWRV9XRUFLX01BUCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24gKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWFrLW1hcC1iYXNpYy1kZXRlY3Rpb24uanNcIik7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLWFycmF5LWlzYXJyYXkgLS0gc2FmZVxudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2V4dGVuc2libGUgLS0gc2FmZVxudmFyIGlzRXh0ZW5zaWJsZSA9ICRPYmplY3QuaXNFeHRlbnNpYmxlO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc2Zyb3plbiAtLSBzYWZlXG52YXIgaXNGcm96ZW4gPSAkT2JqZWN0LmlzRnJvemVuO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1pc3NlYWxlZCAtLSBzYWZlXG52YXIgaXNTZWFsZWQgPSAkT2JqZWN0LmlzU2VhbGVkO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1mcmVlemUgLS0gc2FmZVxudmFyIGZyZWV6ZSA9ICRPYmplY3QuZnJlZXplO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1zZWFsIC0tIHNhZmVcbnZhciBzZWFsID0gJE9iamVjdC5zZWFsO1xuXG52YXIgRlJPWkVOID0ge307XG52YXIgU0VBTEVEID0ge307XG52YXIgSVNfSUUxMSA9ICFnbG9iYWwuQWN0aXZlWE9iamVjdCAmJiAnQWN0aXZlWE9iamVjdCcgaW4gZ2xvYmFsO1xudmFyIEludGVybmFsV2Vha01hcDtcblxudmFyIHdyYXBwZXIgPSBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gV2Vha01hcCgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTtcbiAgfTtcbn07XG5cbi8vIGBXZWFrTWFwYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy13ZWFrbWFwLWNvbnN0cnVjdG9yXG52YXIgJFdlYWtNYXAgPSBjb2xsZWN0aW9uKCdXZWFrTWFwJywgd3JhcHBlciwgY29sbGVjdGlvbldlYWspO1xudmFyIFdlYWtNYXBQcm90b3R5cGUgPSAkV2Vha01hcC5wcm90b3R5cGU7XG52YXIgbmF0aXZlU2V0ID0gdW5jdXJyeVRoaXMoV2Vha01hcFByb3RvdHlwZS5zZXQpO1xuXG4vLyBDaGFrcmEgRWRnZSBidWc6IGFkZGluZyBmcm96ZW4gYXJyYXlzIHRvIFdlYWtNYXAgdW5mcmVlemUgdGhlbVxudmFyIGhhc01TRWRnZUZyZWV6aW5nQnVnID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gRlJFRVpJTkcgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciBmcm96ZW5BcnJheSA9IGZyZWV6ZShbXSk7XG4gICAgbmF0aXZlU2V0KG5ldyAkV2Vha01hcCgpLCBmcm96ZW5BcnJheSwgMSk7XG4gICAgcmV0dXJuICFpc0Zyb3plbihmcm96ZW5BcnJheSk7XG4gIH0pO1xufTtcblxuLy8gSUUxMSBXZWFrTWFwIGZyb3plbiBrZXlzIGZpeFxuLy8gV2UgY2FuJ3QgdXNlIGZlYXR1cmUgZGV0ZWN0aW9uIGJlY2F1c2UgaXQgY3Jhc2ggc29tZSBvbGQgSUUgYnVpbGRzXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNDg1XG5pZiAoTkFUSVZFX1dFQUtfTUFQKSBpZiAoSVNfSUUxMSkge1xuICBJbnRlcm5hbFdlYWtNYXAgPSBjb2xsZWN0aW9uV2Vhay5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCAnV2Vha01hcCcsIHRydWUpO1xuICBJbnRlcm5hbE1ldGFkYXRhTW9kdWxlLmVuYWJsZSgpO1xuICB2YXIgbmF0aXZlRGVsZXRlID0gdW5jdXJyeVRoaXMoV2Vha01hcFByb3RvdHlwZVsnZGVsZXRlJ10pO1xuICB2YXIgbmF0aXZlSGFzID0gdW5jdXJyeVRoaXMoV2Vha01hcFByb3RvdHlwZS5oYXMpO1xuICB2YXIgbmF0aXZlR2V0ID0gdW5jdXJyeVRoaXMoV2Vha01hcFByb3RvdHlwZS5nZXQpO1xuICBkZWZpbmVCdWlsdElucyhXZWFrTWFwUHJvdG90eXBlLCB7XG4gICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGlmIChpc09iamVjdChrZXkpICYmICFpc0V4dGVuc2libGUoa2V5KSkge1xuICAgICAgICB2YXIgc3RhdGUgPSBlbmZvcmNlSW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgICAgICAgaWYgKCFzdGF0ZS5mcm96ZW4pIHN0YXRlLmZyb3plbiA9IG5ldyBJbnRlcm5hbFdlYWtNYXAoKTtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZURlbGV0ZSh0aGlzLCBrZXkpIHx8IHN0YXRlLmZyb3plblsnZGVsZXRlJ10oa2V5KTtcbiAgICAgIH0gcmV0dXJuIG5hdGl2ZURlbGV0ZSh0aGlzLCBrZXkpO1xuICAgIH0sXG4gICAgaGFzOiBmdW5jdGlvbiBoYXMoa2V5KSB7XG4gICAgICBpZiAoaXNPYmplY3Qoa2V5KSAmJiAhaXNFeHRlbnNpYmxlKGtleSkpIHtcbiAgICAgICAgdmFyIHN0YXRlID0gZW5mb3JjZUludGVybmFsU3RhdGUodGhpcyk7XG4gICAgICAgIGlmICghc3RhdGUuZnJvemVuKSBzdGF0ZS5mcm96ZW4gPSBuZXcgSW50ZXJuYWxXZWFrTWFwKCk7XG4gICAgICAgIHJldHVybiBuYXRpdmVIYXModGhpcywga2V5KSB8fCBzdGF0ZS5mcm96ZW4uaGFzKGtleSk7XG4gICAgICB9IHJldHVybiBuYXRpdmVIYXModGhpcywga2V5KTtcbiAgICB9LFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgICAgaWYgKGlzT2JqZWN0KGtleSkgJiYgIWlzRXh0ZW5zaWJsZShrZXkpKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICBpZiAoIXN0YXRlLmZyb3plbikgc3RhdGUuZnJvemVuID0gbmV3IEludGVybmFsV2Vha01hcCgpO1xuICAgICAgICByZXR1cm4gbmF0aXZlSGFzKHRoaXMsIGtleSkgPyBuYXRpdmVHZXQodGhpcywga2V5KSA6IHN0YXRlLmZyb3plbi5nZXQoa2V5KTtcbiAgICAgIH0gcmV0dXJuIG5hdGl2ZUdldCh0aGlzLCBrZXkpO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKGlzT2JqZWN0KGtleSkgJiYgIWlzRXh0ZW5zaWJsZShrZXkpKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICBpZiAoIXN0YXRlLmZyb3plbikgc3RhdGUuZnJvemVuID0gbmV3IEludGVybmFsV2Vha01hcCgpO1xuICAgICAgICBuYXRpdmVIYXModGhpcywga2V5KSA/IG5hdGl2ZVNldCh0aGlzLCBrZXksIHZhbHVlKSA6IHN0YXRlLmZyb3plbi5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICB9IGVsc2UgbmF0aXZlU2V0KHRoaXMsIGtleSwgdmFsdWUpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICB9KTtcbi8vIENoYWtyYSBFZGdlIGZyb3plbiBrZXlzIGZpeFxufSBlbHNlIGlmIChoYXNNU0VkZ2VGcmVlemluZ0J1ZygpKSB7XG4gIGRlZmluZUJ1aWx0SW5zKFdlYWtNYXBQcm90b3R5cGUsIHtcbiAgICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgICB2YXIgYXJyYXlJbnRlZ3JpdHlMZXZlbDtcbiAgICAgIGlmIChpc0FycmF5KGtleSkpIHtcbiAgICAgICAgaWYgKGlzRnJvemVuKGtleSkpIGFycmF5SW50ZWdyaXR5TGV2ZWwgPSBGUk9aRU47XG4gICAgICAgIGVsc2UgaWYgKGlzU2VhbGVkKGtleSkpIGFycmF5SW50ZWdyaXR5TGV2ZWwgPSBTRUFMRUQ7XG4gICAgICB9XG4gICAgICBuYXRpdmVTZXQodGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICBpZiAoYXJyYXlJbnRlZ3JpdHlMZXZlbCA9PSBGUk9aRU4pIGZyZWV6ZShrZXkpO1xuICAgICAgaWYgKGFycmF5SW50ZWdyaXR5TGV2ZWwgPT0gU0VBTEVEKSBzZWFsKGtleSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gIH0pO1xufVxuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy53ZWFrLW1hcC5jb25zdHJ1Y3Rvci5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMud2Vhay1tYXAuanMiOigoX191bnVzZWRfd2VicGFja19tb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG4vLyBUT0RPOiBSZW1vdmUgdGhpcyBtb2R1bGUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIHJlcGxhY2VkIHRvIG1vZHVsZSBiZWxvd1xuX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vbW9kdWxlcy9lcy53ZWFrLW1hcC5jb25zdHJ1Y3RvciAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy53ZWFrLW1hcC5jb25zdHJ1Y3Rvci5qc1wiKTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMud2Vhay1tYXAuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuaXRlcmF0b3IuanMiOigoX191bnVzZWRfd2VicGFja19tb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2dsb2JhbCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dsb2JhbC5qc1wiKTtcbnZhciBET01JdGVyYWJsZXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZG9tLWl0ZXJhYmxlcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMuanNcIik7XG52YXIgRE9NVG9rZW5MaXN0UHJvdG90eXBlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2RvbS10b2tlbi1saXN0LXByb3RvdHlwZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RvbS10b2tlbi1saXN0LXByb3RvdHlwZS5qc1wiKTtcbnZhciBBcnJheUl0ZXJhdG9yTWV0aG9kcyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3IuanNcIik7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eS5qc1wiKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC5qc1wiKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgQXJyYXlWYWx1ZXMgPSBBcnJheUl0ZXJhdG9yTWV0aG9kcy52YWx1ZXM7XG5cbnZhciBoYW5kbGVQcm90b3R5cGUgPSBmdW5jdGlvbiAoQ29sbGVjdGlvblByb3RvdHlwZSwgQ09MTEVDVElPTl9OQU1FKSB7XG4gIGlmIChDb2xsZWN0aW9uUHJvdG90eXBlKSB7XG4gICAgLy8gc29tZSBDaHJvbWUgdmVyc2lvbnMgaGF2ZSBub24tY29uZmlndXJhYmxlIG1ldGhvZHMgb24gRE9NVG9rZW5MaXN0XG4gICAgaWYgKENvbGxlY3Rpb25Qcm90b3R5cGVbSVRFUkFUT1JdICE9PSBBcnJheVZhbHVlcykgdHJ5IHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShDb2xsZWN0aW9uUHJvdG90eXBlLCBJVEVSQVRPUiwgQXJyYXlWYWx1ZXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBDb2xsZWN0aW9uUHJvdG90eXBlW0lURVJBVE9SXSA9IEFycmF5VmFsdWVzO1xuICAgIH1cbiAgICBpZiAoIUNvbGxlY3Rpb25Qcm90b3R5cGVbVE9fU1RSSU5HX1RBR10pIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShDb2xsZWN0aW9uUHJvdG90eXBlLCBUT19TVFJJTkdfVEFHLCBDT0xMRUNUSU9OX05BTUUpO1xuICAgIH1cbiAgICBpZiAoRE9NSXRlcmFibGVzW0NPTExFQ1RJT05fTkFNRV0pIGZvciAodmFyIE1FVEhPRF9OQU1FIGluIEFycmF5SXRlcmF0b3JNZXRob2RzKSB7XG4gICAgICAvLyBzb21lIENocm9tZSB2ZXJzaW9ucyBoYXZlIG5vbi1jb25maWd1cmFibGUgbWV0aG9kcyBvbiBET01Ub2tlbkxpc3RcbiAgICAgIGlmIChDb2xsZWN0aW9uUHJvdG90eXBlW01FVEhPRF9OQU1FXSAhPT0gQXJyYXlJdGVyYXRvck1ldGhvZHNbTUVUSE9EX05BTUVdKSB0cnkge1xuICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoQ29sbGVjdGlvblByb3RvdHlwZSwgTUVUSE9EX05BTUUsIEFycmF5SXRlcmF0b3JNZXRob2RzW01FVEhPRF9OQU1FXSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBDb2xsZWN0aW9uUHJvdG90eXBlW01FVEhPRF9OQU1FXSA9IEFycmF5SXRlcmF0b3JNZXRob2RzW01FVEhPRF9OQU1FXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbmZvciAodmFyIENPTExFQ1RJT05fTkFNRSBpbiBET01JdGVyYWJsZXMpIHtcbiAgaGFuZGxlUHJvdG90eXBlKGdsb2JhbFtDT0xMRUNUSU9OX05BTUVdICYmIGdsb2JhbFtDT0xMRUNUSU9OX05BTUVdLnByb3RvdHlwZSwgQ09MTEVDVElPTl9OQU1FKTtcbn1cblxuaGFuZGxlUHJvdG90eXBlKERPTVRva2VuTGlzdFByb3RvdHlwZSwgJ0RPTVRva2VuTGlzdCcpO1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLml0ZXJhdG9yLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWV4Y2VwdGlvbi5jb25zdHJ1Y3Rvci5qcyI6KChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciAkID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2V4cG9ydCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2V4cG9ydC5qc1wiKTtcbnZhciB0cnlOb2RlUmVxdWlyZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy90cnktbm9kZS1yZXF1aXJlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdHJ5LW5vZGUtcmVxdWlyZS5qc1wiKTtcbnZhciBnZXRCdWlsdEluID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbiAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qc1wiKTtcbnZhciBmYWlscyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mYWlscyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ZhaWxzLmpzXCIpO1xudmFyIGNyZWF0ZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZS5qc1wiKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvci5qc1wiKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IChfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanNcIikuZik7XG52YXIgZGVmaW5lQnVpbHRJbiA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4gKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4uanNcIik7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvciAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3Nvci5qc1wiKTtcbnZhciBoYXNPd24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkuanNcIik7XG52YXIgYW5JbnN0YW5jZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9hbi1pbnN0YW5jZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLWluc3RhbmNlLmpzXCIpO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2FuLW9iamVjdCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qc1wiKTtcbnZhciBlcnJvclRvU3RyaW5nID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Vycm9yLXRvLXN0cmluZyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Vycm9yLXRvLXN0cmluZy5qc1wiKTtcbnZhciBub3JtYWxpemVTdHJpbmdBcmd1bWVudCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9ub3JtYWxpemUtc3RyaW5nLWFyZ3VtZW50ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbm9ybWFsaXplLXN0cmluZy1hcmd1bWVudC5qc1wiKTtcbnZhciBET01FeGNlcHRpb25Db25zdGFudHMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZG9tLWV4Y2VwdGlvbi1jb25zdGFudHMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kb20tZXhjZXB0aW9uLWNvbnN0YW50cy5qc1wiKTtcbnZhciBjbGVhckVycm9yU3RhY2sgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZXJyb3Itc3RhY2stY2xlYXIgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lcnJvci1zdGFjay1jbGVhci5qc1wiKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUuanNcIik7XG52YXIgREVTQ1JJUFRPUlMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZXNjcmlwdG9ycy5qc1wiKTtcbnZhciBJU19QVVJFID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2lzLXB1cmUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1wdXJlLmpzXCIpO1xuXG52YXIgRE9NX0VYQ0VQVElPTiA9ICdET01FeGNlcHRpb24nO1xudmFyIERBVEFfQ0xPTkVfRVJSID0gJ0RBVEFfQ0xPTkVfRVJSJztcbnZhciBFcnJvciA9IGdldEJ1aWx0SW4oJ0Vycm9yJyk7XG4vLyBOb2RlSlMgPCAxNy4wIGRvZXMgbm90IGV4cG9zZSBgRE9NRXhjZXB0aW9uYCB0byBnbG9iYWxcbnZhciBOYXRpdmVET01FeGNlcHRpb24gPSBnZXRCdWlsdEluKERPTV9FWENFUFRJT04pIHx8IChmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLy8gTm9kZUpTIDwgMTUuMCBkb2VzIG5vdCBleHBvc2UgYE1lc3NhZ2VDaGFubmVsYCB0byBnbG9iYWxcbiAgICB2YXIgTWVzc2FnZUNoYW5uZWwgPSBnZXRCdWlsdEluKCdNZXNzYWdlQ2hhbm5lbCcpIHx8IHRyeU5vZGVSZXF1aXJlKCd3b3JrZXJfdGhyZWFkcycpLk1lc3NhZ2VDaGFubmVsO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby13ZWFrLW1hcCwgdW5pY29ybi9yZXF1aXJlLXBvc3QtbWVzc2FnZS10YXJnZXQtb3JpZ2luIC0tIHNhZmVcbiAgICBuZXcgTWVzc2FnZUNoYW5uZWwoKS5wb3J0MS5wb3N0TWVzc2FnZShuZXcgV2Vha01hcCgpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IubmFtZSA9PSBEQVRBX0NMT05FX0VSUiAmJiBlcnJvci5jb2RlID09IDI1KSByZXR1cm4gZXJyb3IuY29uc3RydWN0b3I7XG4gIH1cbn0pKCk7XG52YXIgTmF0aXZlRE9NRXhjZXB0aW9uUHJvdG90eXBlID0gTmF0aXZlRE9NRXhjZXB0aW9uICYmIE5hdGl2ZURPTUV4Y2VwdGlvbi5wcm90b3R5cGU7XG52YXIgRXJyb3JQcm90b3R5cGUgPSBFcnJvci5wcm90b3R5cGU7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihET01fRVhDRVBUSU9OKTtcbnZhciBIQVNfU1RBQ0sgPSAnc3RhY2snIGluIEVycm9yKERPTV9FWENFUFRJT04pO1xuXG52YXIgY29kZUZvciA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiBoYXNPd24oRE9NRXhjZXB0aW9uQ29uc3RhbnRzLCBuYW1lKSAmJiBET01FeGNlcHRpb25Db25zdGFudHNbbmFtZV0ubSA/IERPTUV4Y2VwdGlvbkNvbnN0YW50c1tuYW1lXS5jIDogMDtcbn07XG5cbnZhciAkRE9NRXhjZXB0aW9uID0gZnVuY3Rpb24gRE9NRXhjZXB0aW9uKCkge1xuICBhbkluc3RhbmNlKHRoaXMsIERPTUV4Y2VwdGlvblByb3RvdHlwZSk7XG4gIHZhciBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgbWVzc2FnZSA9IG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50KGFyZ3VtZW50c0xlbmd0aCA8IDEgPyB1bmRlZmluZWQgOiBhcmd1bWVudHNbMF0pO1xuICB2YXIgbmFtZSA9IG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50KGFyZ3VtZW50c0xlbmd0aCA8IDIgPyB1bmRlZmluZWQgOiBhcmd1bWVudHNbMV0sICdFcnJvcicpO1xuICB2YXIgY29kZSA9IGNvZGVGb3IobmFtZSk7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IERPTV9FWENFUFRJT04sXG4gICAgbmFtZTogbmFtZSxcbiAgICBtZXNzYWdlOiBtZXNzYWdlLFxuICAgIGNvZGU6IGNvZGVcbiAgfSk7XG4gIGlmICghREVTQ1JJUFRPUlMpIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgdGhpcy5jb2RlID0gY29kZTtcbiAgfVxuICBpZiAoSEFTX1NUQUNLKSB7XG4gICAgdmFyIGVycm9yID0gRXJyb3IobWVzc2FnZSk7XG4gICAgZXJyb3IubmFtZSA9IERPTV9FWENFUFRJT047XG4gICAgZGVmaW5lUHJvcGVydHkodGhpcywgJ3N0YWNrJywgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIGNsZWFyRXJyb3JTdGFjayhlcnJvci5zdGFjaywgMSkpKTtcbiAgfVxufTtcblxudmFyIERPTUV4Y2VwdGlvblByb3RvdHlwZSA9ICRET01FeGNlcHRpb24ucHJvdG90eXBlID0gY3JlYXRlKEVycm9yUHJvdG90eXBlKTtcblxudmFyIGNyZWF0ZUdldHRlckRlc2NyaXB0b3IgPSBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgZ2V0OiBnZXQgfTtcbn07XG5cbnZhciBnZXR0ZXJGb3IgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBjcmVhdGVHZXR0ZXJEZXNjcmlwdG9yKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKVtrZXldO1xuICB9KTtcbn07XG5cbmlmIChERVNDUklQVE9SUykge1xuICAvLyBgRE9NRXhjZXB0aW9uLnByb3RvdHlwZS5jb2RlYCBnZXR0ZXJcbiAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKERPTUV4Y2VwdGlvblByb3RvdHlwZSwgJ2NvZGUnLCBnZXR0ZXJGb3IoJ2NvZGUnKSk7XG4gIC8vIGBET01FeGNlcHRpb24ucHJvdG90eXBlLm1lc3NhZ2VgIGdldHRlclxuICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoRE9NRXhjZXB0aW9uUHJvdG90eXBlLCAnbWVzc2FnZScsIGdldHRlckZvcignbWVzc2FnZScpKTtcbiAgLy8gYERPTUV4Y2VwdGlvbi5wcm90b3R5cGUubmFtZWAgZ2V0dGVyXG4gIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihET01FeGNlcHRpb25Qcm90b3R5cGUsICduYW1lJywgZ2V0dGVyRm9yKCduYW1lJykpO1xufVxuXG5kZWZpbmVQcm9wZXJ0eShET01FeGNlcHRpb25Qcm90b3R5cGUsICdjb25zdHJ1Y3RvcicsIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCAkRE9NRXhjZXB0aW9uKSk7XG5cbi8vIEZGMzYtIERPTUV4Y2VwdGlvbiBpcyBhIGZ1bmN0aW9uLCBidXQgY2FuJ3QgYmUgY29uc3RydWN0ZWRcbnZhciBJTkNPUlJFQ1RfQ09OU1RSVUNUT1IgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhKG5ldyBOYXRpdmVET01FeGNlcHRpb24oKSBpbnN0YW5jZW9mIEVycm9yKTtcbn0pO1xuXG4vLyBTYWZhcmkgMTAuMSAvIENocm9tZSAzMi0gLyBJRTgtIERPTUV4Y2VwdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgYnVnc1xudmFyIElOQ09SUkVDVF9UT19TVFJJTkcgPSBJTkNPUlJFQ1RfQ09OU1RSVUNUT1IgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gRXJyb3JQcm90b3R5cGUudG9TdHJpbmcgIT09IGVycm9yVG9TdHJpbmcgfHwgU3RyaW5nKG5ldyBOYXRpdmVET01FeGNlcHRpb24oMSwgMikpICE9PSAnMjogMSc7XG59KTtcblxuLy8gRGVubyAxLjYuMy0gRE9NRXhjZXB0aW9uLnByb3RvdHlwZS5jb2RlIGp1c3QgbWlzc2VkXG52YXIgSU5DT1JSRUNUX0NPREUgPSBJTkNPUlJFQ1RfQ09OU1RSVUNUT1IgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmV3IE5hdGl2ZURPTUV4Y2VwdGlvbigxLCAnRGF0YUNsb25lRXJyb3InKS5jb2RlICE9PSAyNTtcbn0pO1xuXG4vLyBEZW5vIDEuNi4zLSBET01FeGNlcHRpb24gY29uc3RhbnRzIGp1c3QgbWlzc2VkXG52YXIgTUlTU0VEX0NPTlNUQU5UUyA9IElOQ09SUkVDVF9DT05TVFJVQ1RPUlxuICB8fCBOYXRpdmVET01FeGNlcHRpb25bREFUQV9DTE9ORV9FUlJdICE9PSAyNVxuICB8fCBOYXRpdmVET01FeGNlcHRpb25Qcm90b3R5cGVbREFUQV9DTE9ORV9FUlJdICE9PSAyNTtcblxudmFyIEZPUkNFRF9DT05TVFJVQ1RPUiA9IElTX1BVUkUgPyBJTkNPUlJFQ1RfVE9fU1RSSU5HIHx8IElOQ09SUkVDVF9DT0RFIHx8IE1JU1NFRF9DT05TVEFOVFMgOiBJTkNPUlJFQ1RfQ09OU1RSVUNUT1I7XG5cbi8vIGBET01FeGNlcHRpb25gIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2lkbC1ET01FeGNlcHRpb25cbiQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCBmb3JjZWQ6IEZPUkNFRF9DT05TVFJVQ1RPUiB9LCB7XG4gIERPTUV4Y2VwdGlvbjogRk9SQ0VEX0NPTlNUUlVDVE9SID8gJERPTUV4Y2VwdGlvbiA6IE5hdGl2ZURPTUV4Y2VwdGlvblxufSk7XG5cbnZhciBQb2x5ZmlsbGVkRE9NRXhjZXB0aW9uID0gZ2V0QnVpbHRJbihET01fRVhDRVBUSU9OKTtcbnZhciBQb2x5ZmlsbGVkRE9NRXhjZXB0aW9uUHJvdG90eXBlID0gUG9seWZpbGxlZERPTUV4Y2VwdGlvbi5wcm90b3R5cGU7XG5cbmlmIChJTkNPUlJFQ1RfVE9fU1RSSU5HICYmIChJU19QVVJFIHx8IE5hdGl2ZURPTUV4Y2VwdGlvbiA9PT0gUG9seWZpbGxlZERPTUV4Y2VwdGlvbikpIHtcbiAgZGVmaW5lQnVpbHRJbihQb2x5ZmlsbGVkRE9NRXhjZXB0aW9uUHJvdG90eXBlLCAndG9TdHJpbmcnLCBlcnJvclRvU3RyaW5nKTtcbn1cblxuaWYgKElOQ09SUkVDVF9DT0RFICYmIERFU0NSSVBUT1JTICYmIE5hdGl2ZURPTUV4Y2VwdGlvbiA9PT0gUG9seWZpbGxlZERPTUV4Y2VwdGlvbikge1xuICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoUG9seWZpbGxlZERPTUV4Y2VwdGlvblByb3RvdHlwZSwgJ2NvZGUnLCBjcmVhdGVHZXR0ZXJEZXNjcmlwdG9yKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gY29kZUZvcihhbk9iamVjdCh0aGlzKS5uYW1lKTtcbiAgfSkpO1xufVxuXG4vLyBgRE9NRXhjZXB0aW9uYCBjb25zdGFudHNcbmZvciAodmFyIGtleSBpbiBET01FeGNlcHRpb25Db25zdGFudHMpIGlmIChoYXNPd24oRE9NRXhjZXB0aW9uQ29uc3RhbnRzLCBrZXkpKSB7XG4gIHZhciBjb25zdGFudCA9IERPTUV4Y2VwdGlvbkNvbnN0YW50c1trZXldO1xuICB2YXIgY29uc3RhbnROYW1lID0gY29uc3RhbnQucztcbiAgdmFyIGRlc2NyaXB0b3IgPSBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoNiwgY29uc3RhbnQuYyk7XG4gIGlmICghaGFzT3duKFBvbHlmaWxsZWRET01FeGNlcHRpb24sIGNvbnN0YW50TmFtZSkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eShQb2x5ZmlsbGVkRE9NRXhjZXB0aW9uLCBjb25zdGFudE5hbWUsIGRlc2NyaXB0b3IpO1xuICB9XG4gIGlmICghaGFzT3duKFBvbHlmaWxsZWRET01FeGNlcHRpb25Qcm90b3R5cGUsIGNvbnN0YW50TmFtZSkpIHtcbiAgICBkZWZpbmVQcm9wZXJ0eShQb2x5ZmlsbGVkRE9NRXhjZXB0aW9uUHJvdG90eXBlLCBjb25zdGFudE5hbWUsIGRlc2NyaXB0b3IpO1xuICB9XG59XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5kb20tZXhjZXB0aW9uLmNvbnN0cnVjdG9yLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWV4Y2VwdGlvbi5zdGFjay5qcyI6KChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciAkID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2V4cG9ydCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2V4cG9ydC5qc1wiKTtcbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZ2xvYmFsICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2xvYmFsLmpzXCIpO1xudmFyIGdldEJ1aWx0SW4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluLmpzXCIpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzXCIpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gKF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eS5qc1wiKS5mKTtcbnZhciBoYXNPd24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkuanNcIik7XG52YXIgYW5JbnN0YW5jZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9hbi1pbnN0YW5jZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLWluc3RhbmNlLmpzXCIpO1xudmFyIGluaGVyaXRJZlJlcXVpcmVkID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2luaGVyaXQtaWYtcmVxdWlyZWQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmhlcml0LWlmLXJlcXVpcmVkLmpzXCIpO1xudmFyIG5vcm1hbGl6ZVN0cmluZ0FyZ3VtZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL25vcm1hbGl6ZS1zdHJpbmctYXJndW1lbnQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9ub3JtYWxpemUtc3RyaW5nLWFyZ3VtZW50LmpzXCIpO1xudmFyIERPTUV4Y2VwdGlvbkNvbnN0YW50cyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9kb20tZXhjZXB0aW9uLWNvbnN0YW50cyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RvbS1leGNlcHRpb24tY29uc3RhbnRzLmpzXCIpO1xudmFyIGNsZWFyRXJyb3JTdGFjayA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9lcnJvci1zdGFjay1jbGVhciAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Vycm9yLXN0YWNrLWNsZWFyLmpzXCIpO1xudmFyIERFU0NSSVBUT1JTID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVzY3JpcHRvcnMuanNcIik7XG52YXIgSVNfUFVSRSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pcy1wdXJlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtcHVyZS5qc1wiKTtcblxudmFyIERPTV9FWENFUFRJT04gPSAnRE9NRXhjZXB0aW9uJztcbnZhciBFcnJvciA9IGdldEJ1aWx0SW4oJ0Vycm9yJyk7XG52YXIgTmF0aXZlRE9NRXhjZXB0aW9uID0gZ2V0QnVpbHRJbihET01fRVhDRVBUSU9OKTtcblxudmFyICRET01FeGNlcHRpb24gPSBmdW5jdGlvbiBET01FeGNlcHRpb24oKSB7XG4gIGFuSW5zdGFuY2UodGhpcywgRE9NRXhjZXB0aW9uUHJvdG90eXBlKTtcbiAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBtZXNzYWdlID0gbm9ybWFsaXplU3RyaW5nQXJndW1lbnQoYXJndW1lbnRzTGVuZ3RoIDwgMSA/IHVuZGVmaW5lZCA6IGFyZ3VtZW50c1swXSk7XG4gIHZhciBuYW1lID0gbm9ybWFsaXplU3RyaW5nQXJndW1lbnQoYXJndW1lbnRzTGVuZ3RoIDwgMiA/IHVuZGVmaW5lZCA6IGFyZ3VtZW50c1sxXSwgJ0Vycm9yJyk7XG4gIHZhciB0aGF0ID0gbmV3IE5hdGl2ZURPTUV4Y2VwdGlvbihtZXNzYWdlLCBuYW1lKTtcbiAgdmFyIGVycm9yID0gRXJyb3IobWVzc2FnZSk7XG4gIGVycm9yLm5hbWUgPSBET01fRVhDRVBUSU9OO1xuICBkZWZpbmVQcm9wZXJ0eSh0aGF0LCAnc3RhY2snLCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgY2xlYXJFcnJvclN0YWNrKGVycm9yLnN0YWNrLCAxKSkpO1xuICBpbmhlcml0SWZSZXF1aXJlZCh0aGF0LCB0aGlzLCAkRE9NRXhjZXB0aW9uKTtcbiAgcmV0dXJuIHRoYXQ7XG59O1xuXG52YXIgRE9NRXhjZXB0aW9uUHJvdG90eXBlID0gJERPTUV4Y2VwdGlvbi5wcm90b3R5cGUgPSBOYXRpdmVET01FeGNlcHRpb24ucHJvdG90eXBlO1xuXG52YXIgRVJST1JfSEFTX1NUQUNLID0gJ3N0YWNrJyBpbiBFcnJvcihET01fRVhDRVBUSU9OKTtcbnZhciBET01fRVhDRVBUSU9OX0hBU19TVEFDSyA9ICdzdGFjaycgaW4gbmV3IE5hdGl2ZURPTUV4Y2VwdGlvbigxLCAyKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzL25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGRlc2NyaXB0b3IgPSBOYXRpdmVET01FeGNlcHRpb24gJiYgREVTQ1JJUFRPUlMgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsIERPTV9FWENFUFRJT04pO1xuXG4vLyBCdW4gfiAwLjEuMSBET01FeGNlcHRpb24gaGF2ZSBpbmNvcnJlY3QgZGVzY3JpcHRvciBhbmQgd2UgY2FuJ3QgcmVkZWZpbmUgaXRcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9KYXJyZWQtU3VtbmVyL2J1bi9pc3N1ZXMvMzk5XG52YXIgQlVHR1lfREVTQ1JJUFRPUiA9ICEhZGVzY3JpcHRvciAmJiAhKGRlc2NyaXB0b3Iud3JpdGFibGUgJiYgZGVzY3JpcHRvci5jb25maWd1cmFibGUpO1xuXG52YXIgRk9SQ0VEX0NPTlNUUlVDVE9SID0gRVJST1JfSEFTX1NUQUNLICYmICFCVUdHWV9ERVNDUklQVE9SICYmICFET01fRVhDRVBUSU9OX0hBU19TVEFDSztcblxuLy8gYERPTUV4Y2VwdGlvbmAgY29uc3RydWN0b3IgcGF0Y2ggZm9yIGAuc3RhY2tgIHdoZXJlIGl0J3MgcmVxdWlyZWRcbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtRE9NRXhjZXB0aW9uLXNwZWNpYWxuZXNzXG4kKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgZm9yY2VkOiBJU19QVVJFIHx8IEZPUkNFRF9DT05TVFJVQ1RPUiB9LCB7IC8vIFRPRE86IGZpeCBleHBvcnQgbG9naWNcbiAgRE9NRXhjZXB0aW9uOiBGT1JDRURfQ09OU1RSVUNUT1IgPyAkRE9NRXhjZXB0aW9uIDogTmF0aXZlRE9NRXhjZXB0aW9uXG59KTtcblxudmFyIFBvbHlmaWxsZWRET01FeGNlcHRpb24gPSBnZXRCdWlsdEluKERPTV9FWENFUFRJT04pO1xudmFyIFBvbHlmaWxsZWRET01FeGNlcHRpb25Qcm90b3R5cGUgPSBQb2x5ZmlsbGVkRE9NRXhjZXB0aW9uLnByb3RvdHlwZTtcblxuaWYgKFBvbHlmaWxsZWRET01FeGNlcHRpb25Qcm90b3R5cGUuY29uc3RydWN0b3IgIT09IFBvbHlmaWxsZWRET01FeGNlcHRpb24pIHtcbiAgaWYgKCFJU19QVVJFKSB7XG4gICAgZGVmaW5lUHJvcGVydHkoUG9seWZpbGxlZERPTUV4Y2VwdGlvblByb3RvdHlwZSwgJ2NvbnN0cnVjdG9yJywgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKDEsIFBvbHlmaWxsZWRET01FeGNlcHRpb24pKTtcbiAgfVxuXG4gIGZvciAodmFyIGtleSBpbiBET01FeGNlcHRpb25Db25zdGFudHMpIGlmIChoYXNPd24oRE9NRXhjZXB0aW9uQ29uc3RhbnRzLCBrZXkpKSB7XG4gICAgdmFyIGNvbnN0YW50ID0gRE9NRXhjZXB0aW9uQ29uc3RhbnRzW2tleV07XG4gICAgdmFyIGNvbnN0YW50TmFtZSA9IGNvbnN0YW50LnM7XG4gICAgaWYgKCFoYXNPd24oUG9seWZpbGxlZERPTUV4Y2VwdGlvbiwgY29uc3RhbnROYW1lKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkoUG9seWZpbGxlZERPTUV4Y2VwdGlvbiwgY29uc3RhbnROYW1lLCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoNiwgY29uc3RhbnQuYykpO1xuICAgIH1cbiAgfVxufVxuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWV4Y2VwdGlvbi5zdGFjay5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1leGNlcHRpb24udG8tc3RyaW5nLXRhZy5qcyI6KChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBnZXRCdWlsdEluID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbiAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qc1wiKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnLmpzXCIpO1xuXG52YXIgRE9NX0VYQ0VQVElPTiA9ICdET01FeGNlcHRpb24nO1xuXG4vLyBgRE9NRXhjZXB0aW9uLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXWAgcHJvcGVydHlcbnNldFRvU3RyaW5nVGFnKGdldEJ1aWx0SW4oRE9NX0VYQ0VQVElPTiksIERPTV9FWENFUFRJT04pO1xuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWV4Y2VwdGlvbi50by1zdHJpbmctdGFnLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuc2VsZi5qcyI6KChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciAkID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2V4cG9ydCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2V4cG9ydC5qc1wiKTtcbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZ2xvYmFsICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2xvYmFsLmpzXCIpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3IgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3IuanNcIik7XG52YXIgREVTQ1JJUFRPUlMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZXNjcmlwdG9ycy5qc1wiKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBJTkNPUlJFQ1RfVkFMVUUgPSBnbG9iYWwuc2VsZiAhPT0gZ2xvYmFsO1xuXG4vLyBgc2VsZmAgZ2V0dGVyXG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93aW5kb3ctb2JqZWN0Lmh0bWwjZG9tLXNlbGZcbnRyeSB7XG4gIGlmIChERVNDUklQVE9SUykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbiAgICB2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAnc2VsZicpO1xuICAgIC8vIHNvbWUgZW5naW5lcyBoYXZlIGBzZWxmYCwgYnV0IHdpdGggaW5jb3JyZWN0IGRlc2NyaXB0b3JcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZGVub2xhbmQvZGVuby9pc3N1ZXMvMTU3NjVcbiAgICBpZiAoSU5DT1JSRUNUX1ZBTFVFIHx8ICFkZXNjcmlwdG9yIHx8ICFkZXNjcmlwdG9yLmdldCB8fCAhZGVzY3JpcHRvci5lbnVtZXJhYmxlKSB7XG4gICAgICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoZ2xvYmFsLCAnc2VsZicsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiBzZWxmKCkge1xuICAgICAgICAgIHJldHVybiBnbG9iYWw7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gc2VsZih2YWx1ZSkge1xuICAgICAgICAgIGlmICh0aGlzICE9PSBnbG9iYWwpIHRocm93ICRUeXBlRXJyb3IoJ0lsbGVnYWwgaW52b2NhdGlvbicpO1xuICAgICAgICAgIGRlZmluZVByb3BlcnR5KGdsb2JhbCwgJ3NlbGYnLCB7XG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gIH0gZWxzZSAkKHsgZ2xvYmFsOiB0cnVlLCBzaW1wbGU6IHRydWUsIGZvcmNlZDogSU5DT1JSRUNUX1ZBTFVFIH0sIHtcbiAgICBzZWxmOiBnbG9iYWxcbiAgfSk7XG59IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5zZWxmLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuc3RydWN0dXJlZC1jbG9uZS5qcyI6KChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBJU19QVVJFID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2lzLXB1cmUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1wdXJlLmpzXCIpO1xudmFyICQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZXhwb3J0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZXhwb3J0LmpzXCIpO1xudmFyIGdsb2JhbCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9nbG9iYWwgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nbG9iYWwuanNcIik7XG52YXIgZ2V0QnVpbHRpbiA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4gKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtYnVpbHQtaW4uanNcIik7XG52YXIgdW5jdXJyeVRoaXMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzXCIpO1xudmFyIGZhaWxzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2ZhaWxzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZmFpbHMuanNcIik7XG52YXIgdWlkID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3VpZCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qc1wiKTtcbnZhciBpc0NhbGxhYmxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtY2FsbGFibGUuanNcIik7XG52YXIgaXNDb25zdHJ1Y3RvciA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvciAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yLmpzXCIpO1xudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2lzLW51bGwtb3ItdW5kZWZpbmVkICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtbnVsbC1vci11bmRlZmluZWQuanNcIik7XG52YXIgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaXMtb2JqZWN0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtb2JqZWN0LmpzXCIpO1xudmFyIGlzU3ltYm9sID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLXN5bWJvbC5qc1wiKTtcbnZhciBpdGVyYXRlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2l0ZXJhdGUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pdGVyYXRlLmpzXCIpO1xudmFyIGFuT2JqZWN0ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2FuLW9iamVjdCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qc1wiKTtcbnZhciBjbGFzc29mID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2NsYXNzb2YgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jbGFzc29mLmpzXCIpO1xudmFyIGhhc093biA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eS5qc1wiKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHkgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHkuanNcIik7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eS5qc1wiKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlLmpzXCIpO1xudmFyIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGggKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92YWxpZGF0ZS1hcmd1bWVudHMtbGVuZ3RoLmpzXCIpO1xudmFyIGdldFJlZ0V4cEZsYWdzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3JlZ2V4cC1nZXQtZmxhZ3MgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtZ2V0LWZsYWdzLmpzXCIpO1xudmFyIE1hcEhlbHBlcnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvbWFwLWhlbHBlcnMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9tYXAtaGVscGVycy5qc1wiKTtcbnZhciBTZXRIZWxwZXJzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3NldC1oZWxwZXJzICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LWhlbHBlcnMuanNcIik7XG52YXIgRVJST1JfU1RBQ0tfSU5TVEFMTEFCTEUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZXJyb3Itc3RhY2staW5zdGFsbGFibGUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lcnJvci1zdGFjay1pbnN0YWxsYWJsZS5qc1wiKTtcbnZhciBQUk9QRVJfVFJBTlNGRVIgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvc3RydWN0dXJlZC1jbG9uZS1wcm9wZXItdHJhbnNmZXIgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJ1Y3R1cmVkLWNsb25lLXByb3Blci10cmFuc2Zlci5qc1wiKTtcblxudmFyIE9iamVjdCA9IGdsb2JhbC5PYmplY3Q7XG52YXIgQXJyYXkgPSBnbG9iYWwuQXJyYXk7XG52YXIgRGF0ZSA9IGdsb2JhbC5EYXRlO1xudmFyIEVycm9yID0gZ2xvYmFsLkVycm9yO1xudmFyIEV2YWxFcnJvciA9IGdsb2JhbC5FdmFsRXJyb3I7XG52YXIgUmFuZ2VFcnJvciA9IGdsb2JhbC5SYW5nZUVycm9yO1xudmFyIFJlZmVyZW5jZUVycm9yID0gZ2xvYmFsLlJlZmVyZW5jZUVycm9yO1xudmFyIFN5bnRheEVycm9yID0gZ2xvYmFsLlN5bnRheEVycm9yO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgVVJJRXJyb3IgPSBnbG9iYWwuVVJJRXJyb3I7XG52YXIgUGVyZm9ybWFuY2VNYXJrID0gZ2xvYmFsLlBlcmZvcm1hbmNlTWFyaztcbnZhciBXZWJBc3NlbWJseSA9IGdsb2JhbC5XZWJBc3NlbWJseTtcbnZhciBDb21waWxlRXJyb3IgPSBXZWJBc3NlbWJseSAmJiBXZWJBc3NlbWJseS5Db21waWxlRXJyb3IgfHwgRXJyb3I7XG52YXIgTGlua0Vycm9yID0gV2ViQXNzZW1ibHkgJiYgV2ViQXNzZW1ibHkuTGlua0Vycm9yIHx8IEVycm9yO1xudmFyIFJ1bnRpbWVFcnJvciA9IFdlYkFzc2VtYmx5ICYmIFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvciB8fCBFcnJvcjtcbnZhciBET01FeGNlcHRpb24gPSBnZXRCdWlsdGluKCdET01FeGNlcHRpb24nKTtcbnZhciBNYXAgPSBNYXBIZWxwZXJzLk1hcDtcbnZhciBtYXBIYXMgPSBNYXBIZWxwZXJzLmhhcztcbnZhciBtYXBHZXQgPSBNYXBIZWxwZXJzLmdldDtcbnZhciBtYXBTZXQgPSBNYXBIZWxwZXJzLnNldDtcbnZhciBTZXQgPSBTZXRIZWxwZXJzLlNldDtcbnZhciBzZXRBZGQgPSBTZXRIZWxwZXJzLmFkZDtcbnZhciBvYmplY3RLZXlzID0gZ2V0QnVpbHRpbignT2JqZWN0JywgJ2tleXMnKTtcbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG52YXIgdGhpc0Jvb2xlYW5WYWx1ZSA9IHVuY3VycnlUaGlzKHRydWUudmFsdWVPZik7XG52YXIgdGhpc051bWJlclZhbHVlID0gdW5jdXJyeVRoaXMoMS4wLnZhbHVlT2YpO1xudmFyIHRoaXNTdHJpbmdWYWx1ZSA9IHVuY3VycnlUaGlzKCcnLnZhbHVlT2YpO1xudmFyIHRoaXNUaW1lVmFsdWUgPSB1bmN1cnJ5VGhpcyhEYXRlLnByb3RvdHlwZS5nZXRUaW1lKTtcbnZhciBQRVJGT1JNQU5DRV9NQVJLID0gdWlkKCdzdHJ1Y3R1cmVkQ2xvbmUnKTtcbnZhciBEQVRBX0NMT05FX0VSUk9SID0gJ0RhdGFDbG9uZUVycm9yJztcbnZhciBUUkFOU0ZFUlJJTkcgPSAnVHJhbnNmZXJyaW5nJztcblxudmFyIGNoZWNrQmFzaWNTZW1hbnRpYyA9IGZ1bmN0aW9uIChzdHJ1Y3R1cmVkQ2xvbmVJbXBsZW1lbnRhdGlvbikge1xuICByZXR1cm4gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2V0MSA9IG5ldyBnbG9iYWwuU2V0KFs3XSk7XG4gICAgdmFyIHNldDIgPSBzdHJ1Y3R1cmVkQ2xvbmVJbXBsZW1lbnRhdGlvbihzZXQxKTtcbiAgICB2YXIgbnVtYmVyID0gc3RydWN0dXJlZENsb25lSW1wbGVtZW50YXRpb24oT2JqZWN0KDcpKTtcbiAgICByZXR1cm4gc2V0MiA9PSBzZXQxIHx8ICFzZXQyLmhhcyg3KSB8fCB0eXBlb2YgbnVtYmVyICE9ICdvYmplY3QnIHx8IG51bWJlciAhPSA3O1xuICB9KSAmJiBzdHJ1Y3R1cmVkQ2xvbmVJbXBsZW1lbnRhdGlvbjtcbn07XG5cbnZhciBjaGVja0Vycm9yc0Nsb25pbmcgPSBmdW5jdGlvbiAoc3RydWN0dXJlZENsb25lSW1wbGVtZW50YXRpb24sICRFcnJvcikge1xuICByZXR1cm4gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXJyb3IgPSBuZXcgJEVycm9yKCk7XG4gICAgdmFyIHRlc3QgPSBzdHJ1Y3R1cmVkQ2xvbmVJbXBsZW1lbnRhdGlvbih7IGE6IGVycm9yLCBiOiBlcnJvciB9KTtcbiAgICByZXR1cm4gISh0ZXN0ICYmIHRlc3QuYSA9PT0gdGVzdC5iICYmIHRlc3QuYSBpbnN0YW5jZW9mICRFcnJvciAmJiB0ZXN0LmEuc3RhY2sgPT09IGVycm9yLnN0YWNrKTtcbiAgfSk7XG59O1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL2h0bWwvcHVsbC81NzQ5XG52YXIgY2hlY2tOZXdFcnJvcnNDbG9uaW5nU2VtYW50aWMgPSBmdW5jdGlvbiAoc3RydWN0dXJlZENsb25lSW1wbGVtZW50YXRpb24pIHtcbiAgcmV0dXJuICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRlc3QgPSBzdHJ1Y3R1cmVkQ2xvbmVJbXBsZW1lbnRhdGlvbihuZXcgZ2xvYmFsLkFnZ3JlZ2F0ZUVycm9yKFsxXSwgUEVSRk9STUFOQ0VfTUFSSywgeyBjYXVzZTogMyB9KSk7XG4gICAgcmV0dXJuIHRlc3QubmFtZSAhPSAnQWdncmVnYXRlRXJyb3InIHx8IHRlc3QuZXJyb3JzWzBdICE9IDEgfHwgdGVzdC5tZXNzYWdlICE9IFBFUkZPUk1BTkNFX01BUksgfHwgdGVzdC5jYXVzZSAhPSAzO1xuICB9KTtcbn07XG5cbi8vIEZGOTQrLCBTYWZhcmkgMTUuNCssIENocm9tZSA5OCssIE5vZGVKUyAxNy4wKywgRGVubyAxLjEzK1xuLy8gRkY8MTAzIGFuZCBTYWZhcmkgaW1wbGVtZW50YXRpb25zIGNhbid0IGNsb25lIGVycm9yc1xuLy8gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1NjYwNFxuLy8gRkYxMDMgY2FuIGNsb25lIGVycm9ycywgYnV0IGAuc3RhY2tgIG9mIGNsb25lIGlzIGFuIGVtcHR5IHN0cmluZ1xuLy8gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3ODc2MlxuLy8gRkYxMDQrIGZpeGVkIGl0IG9uIHVzdWFsIGVycm9ycywgYnV0IG5vdCBvbiBET01FeGNlcHRpb25zXG4vLyBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzc3MzIxXG4vLyBDaHJvbWUgPDEwMiByZXR1cm5zIGBudWxsYCBpZiBjbG9uZWQgb2JqZWN0IGNvbnRhaW5zIG11bHRpcGxlIHJlZmVyZW5jZXMgdG8gb25lIGVycm9yXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0xMjU0MlxuLy8gTm9kZUpTIGltcGxlbWVudGF0aW9uIGNhbid0IGNsb25lIERPTUV4Y2VwdGlvbnNcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvNDEwMzhcbi8vIG9ubHkgRkYxMDMrIHN1cHBvcnRzIG5ldyAoaHRtbC81NzQ5KSBlcnJvciBjbG9uaW5nIHNlbWFudGljXG52YXIgbmF0aXZlU3RydWN0dXJlZENsb25lID0gZ2xvYmFsLnN0cnVjdHVyZWRDbG9uZTtcblxudmFyIEZPUkNFRF9SRVBMQUNFTUVOVCA9IElTX1BVUkVcbiAgfHwgIWNoZWNrRXJyb3JzQ2xvbmluZyhuYXRpdmVTdHJ1Y3R1cmVkQ2xvbmUsIEVycm9yKVxuICB8fCAhY2hlY2tFcnJvcnNDbG9uaW5nKG5hdGl2ZVN0cnVjdHVyZWRDbG9uZSwgRE9NRXhjZXB0aW9uKVxuICB8fCAhY2hlY2tOZXdFcnJvcnNDbG9uaW5nU2VtYW50aWMobmF0aXZlU3RydWN0dXJlZENsb25lKTtcblxuLy8gQ2hyb21lIDgyKywgU2FmYXJpIDE0LjErLCBEZW5vIDEuMTErXG4vLyBDaHJvbWUgNzgtODEgaW1wbGVtZW50YXRpb24gc3dhcHMgYC5uYW1lYCBhbmQgYC5tZXNzYWdlYCBvZiBjbG9uZWQgYERPTUV4Y2VwdGlvbmBcbi8vIENocm9tZSByZXR1cm5zIGBudWxsYCBpZiBjbG9uZWQgb2JqZWN0IGNvbnRhaW5zIG11bHRpcGxlIHJlZmVyZW5jZXMgdG8gb25lIGVycm9yXG4vLyBTYWZhcmkgMTQuMSBpbXBsZW1lbnRhdGlvbiBkb2Vzbid0IGNsb25lIHNvbWUgYFJlZ0V4cGAgZmxhZ3MsIHNvIHJlcXVpcmVzIGEgd29ya2Fyb3VuZFxuLy8gU2FmYXJpIGltcGxlbWVudGF0aW9uIGNhbid0IGNsb25lIGVycm9yc1xuLy8gRGVubyAxLjItMS4xMCBpbXBsZW1lbnRhdGlvbnMgdG9vIG5haXZlXG4vLyBOb2RlSlMgMTYuMCsgZG9lcyBub3QgaGF2ZSBgUGVyZm9ybWFuY2VNYXJrYCBjb25zdHJ1Y3RvclxuLy8gTm9kZUpTIDwxNy4yIHN0cnVjdHVyZWQgY2xvbmluZyBpbXBsZW1lbnRhdGlvbiBmcm9tIGBwZXJmb3JtYW5jZS5tYXJrYCBpcyB0b28gbmFpdmVcbi8vIGFuZCBjYW4ndCBjbG9uZSwgZm9yIGV4YW1wbGUsIGBSZWdFeHBgIG9yIHNvbWUgYm94ZWQgcHJpbWl0aXZlc1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy80MDg0MFxuLy8gbm8gb25lIG9mIHRob3NlIGltcGxlbWVudGF0aW9ucyBzdXBwb3J0cyBuZXcgKGh0bWwvNTc0OSkgZXJyb3IgY2xvbmluZyBzZW1hbnRpY1xudmFyIHN0cnVjdHVyZWRDbG9uZUZyb21NYXJrID0gIW5hdGl2ZVN0cnVjdHVyZWRDbG9uZSAmJiBjaGVja0Jhc2ljU2VtYW50aWMoZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHJldHVybiBuZXcgUGVyZm9ybWFuY2VNYXJrKFBFUkZPUk1BTkNFX01BUkssIHsgZGV0YWlsOiB2YWx1ZSB9KS5kZXRhaWw7XG59KTtcblxudmFyIG5hdGl2ZVJlc3RyaWN0ZWRTdHJ1Y3R1cmVkQ2xvbmUgPSBjaGVja0Jhc2ljU2VtYW50aWMobmF0aXZlU3RydWN0dXJlZENsb25lKSB8fCBzdHJ1Y3R1cmVkQ2xvbmVGcm9tTWFyaztcblxudmFyIHRocm93VW5jbG9uZWFibGUgPSBmdW5jdGlvbiAodHlwZSkge1xuICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCdVbmNsb25lYWJsZSB0eXBlOiAnICsgdHlwZSwgREFUQV9DTE9ORV9FUlJPUik7XG59O1xuXG52YXIgdGhyb3dVbnBvbHlmaWxsYWJsZSA9IGZ1bmN0aW9uICh0eXBlLCBhY3Rpb24pIHtcbiAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbigoYWN0aW9uIHx8ICdDbG9uaW5nJykgKyAnIG9mICcgKyB0eXBlICsgJyBjYW5ub3QgYmUgcHJvcGVybHkgcG9seWZpbGxlZCBpbiB0aGlzIGVuZ2luZScsIERBVEFfQ0xPTkVfRVJST1IpO1xufTtcblxudmFyIHRyeU5hdGl2ZVJlc3RyaWN0ZWRTdHJ1Y3R1cmVkQ2xvbmUgPSBmdW5jdGlvbiAodmFsdWUsIHR5cGUpIHtcbiAgaWYgKCFuYXRpdmVSZXN0cmljdGVkU3RydWN0dXJlZENsb25lKSB0aHJvd1VucG9seWZpbGxhYmxlKHR5cGUpO1xuICByZXR1cm4gbmF0aXZlUmVzdHJpY3RlZFN0cnVjdHVyZWRDbG9uZSh2YWx1ZSk7XG59O1xuXG52YXIgY3JlYXRlRGF0YVRyYW5zZmVyID0gZnVuY3Rpb24gKCkge1xuICB2YXIgZGF0YVRyYW5zZmVyO1xuICB0cnkge1xuICAgIGRhdGFUcmFuc2ZlciA9IG5ldyBnbG9iYWwuRGF0YVRyYW5zZmVyKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdHJ5IHtcbiAgICAgIGRhdGFUcmFuc2ZlciA9IG5ldyBnbG9iYWwuQ2xpcGJvYXJkRXZlbnQoJycpLmNsaXBib2FyZERhdGE7XG4gICAgfSBjYXRjaCAoZXJyb3IyKSB7IC8qIGVtcHR5ICovIH1cbiAgfVxuICByZXR1cm4gZGF0YVRyYW5zZmVyICYmIGRhdGFUcmFuc2Zlci5pdGVtcyAmJiBkYXRhVHJhbnNmZXIuZmlsZXMgPyBkYXRhVHJhbnNmZXIgOiBudWxsO1xufTtcblxudmFyIGNsb25lQnVmZmVyID0gZnVuY3Rpb24gKHZhbHVlLCBtYXAsICR0eXBlKSB7XG4gIGlmIChtYXBIYXMobWFwLCB2YWx1ZSkpIHJldHVybiBtYXBHZXQobWFwLCB2YWx1ZSk7XG5cbiAgdmFyIHR5cGUgPSAkdHlwZSB8fCBjbGFzc29mKHZhbHVlKTtcbiAgdmFyIGNsb25lLCBsZW5ndGgsIG9wdGlvbnMsIHNvdXJjZSwgdGFyZ2V0LCBpO1xuXG4gIGlmICh0eXBlID09PSAnU2hhcmVkQXJyYXlCdWZmZXInKSB7XG4gICAgaWYgKG5hdGl2ZVJlc3RyaWN0ZWRTdHJ1Y3R1cmVkQ2xvbmUpIGNsb25lID0gbmF0aXZlUmVzdHJpY3RlZFN0cnVjdHVyZWRDbG9uZSh2YWx1ZSk7XG4gICAgLy8gU2hhcmVkQXJyYXlCdWZmZXIgc2hvdWxkIHVzZSBzaGFyZWQgbWVtb3J5LCB3ZSBjYW4ndCBwb2x5ZmlsbCBpdCwgc28gcmV0dXJuIHRoZSBvcmlnaW5hbFxuICAgIGVsc2UgY2xvbmUgPSB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgRGF0YVZpZXcgPSBnbG9iYWwuRGF0YVZpZXc7XG5cbiAgICAvLyBgQXJyYXlCdWZmZXIjc2xpY2VgIGlzIG5vdCBhdmFpbGFibGUgaW4gSUUxMFxuICAgIC8vIGBBcnJheUJ1ZmZlciNzbGljZWAgYW5kIGBEYXRhVmlld2AgYXJlIG5vdCBhdmFpbGFibGUgaW4gb2xkIEZGXG4gICAgaWYgKCFEYXRhVmlldyAmJiB0eXBlb2YgdmFsdWUuc2xpY2UgIT0gJ2Z1bmN0aW9uJykgdGhyb3dVbnBvbHlmaWxsYWJsZSgnQXJyYXlCdWZmZXInKTtcbiAgICAvLyBkZXRhY2hlZCBidWZmZXJzIHRocm93cyBpbiBgRGF0YVZpZXdgIGFuZCBgLnNsaWNlYFxuICAgIHRyeSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlLnNsaWNlID09ICdmdW5jdGlvbicgJiYgIXZhbHVlLnJlc2l6YWJsZSkge1xuICAgICAgICBjbG9uZSA9IHZhbHVlLnNsaWNlKDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGVuZ3RoID0gdmFsdWUuYnl0ZUxlbmd0aDtcbiAgICAgICAgb3B0aW9ucyA9ICdtYXhCeXRlTGVuZ3RoJyBpbiB2YWx1ZSA/IHsgbWF4Qnl0ZUxlbmd0aDogdmFsdWUubWF4Qnl0ZUxlbmd0aCB9IDogdW5kZWZpbmVkO1xuICAgICAgICBjbG9uZSA9IG5ldyBBcnJheUJ1ZmZlcihsZW5ndGgsIG9wdGlvbnMpO1xuICAgICAgICBzb3VyY2UgPSBuZXcgRGF0YVZpZXcodmFsdWUpO1xuICAgICAgICB0YXJnZXQgPSBuZXcgRGF0YVZpZXcoY2xvbmUpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB0YXJnZXQuc2V0VWludDgoaSwgc291cmNlLmdldFVpbnQ4KGkpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCdBcnJheUJ1ZmZlciBpcyBkZXRhY2hlZCcsIERBVEFfQ0xPTkVfRVJST1IpO1xuICAgIH1cbiAgfVxuXG4gIG1hcFNldChtYXAsIHZhbHVlLCBjbG9uZSk7XG5cbiAgcmV0dXJuIGNsb25lO1xufTtcblxudmFyIGNsb25lVmlldyA9IGZ1bmN0aW9uICh2YWx1ZSwgdHlwZSwgb2Zmc2V0LCBsZW5ndGgsIG1hcCkge1xuICB2YXIgQyA9IGdsb2JhbFt0eXBlXTtcbiAgLy8gaW4gc29tZSBvbGQgZW5naW5lcyBsaWtlIFNhZmFyaSA5LCB0eXBlb2YgQyBpcyAnb2JqZWN0J1xuICAvLyBvbiBVaW50OENsYW1wZWRBcnJheSBvciBzb21lIG90aGVyIGNvbnN0cnVjdG9yc1xuICBpZiAoIWlzT2JqZWN0KEMpKSB0aHJvd1VucG9seWZpbGxhYmxlKHR5cGUpO1xuICByZXR1cm4gbmV3IEMoY2xvbmVCdWZmZXIodmFsdWUuYnVmZmVyLCBtYXApLCBvZmZzZXQsIGxlbmd0aCk7XG59O1xuXG52YXIgUGxhY2Vob2xkZXIgPSBmdW5jdGlvbiAob2JqZWN0LCB0eXBlLCBtZXRhZGF0YSkge1xuICB0aGlzLm9iamVjdCA9IG9iamVjdDtcbiAgdGhpcy50eXBlID0gdHlwZTtcbiAgdGhpcy5tZXRhZGF0YSA9IG1ldGFkYXRhO1xufTtcblxudmFyIHN0cnVjdHVyZWRDbG9uZUludGVybmFsID0gZnVuY3Rpb24gKHZhbHVlLCBtYXAsIHRyYW5zZmVycmVkQnVmZmVycykge1xuICBpZiAoaXNTeW1ib2wodmFsdWUpKSB0aHJvd1VuY2xvbmVhYmxlKCdTeW1ib2wnKTtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgLy8gZWZmZWN0aXZlbHkgcHJlc2VydmVzIGNpcmN1bGFyIHJlZmVyZW5jZXNcbiAgaWYgKG1hcCkge1xuICAgIGlmIChtYXBIYXMobWFwLCB2YWx1ZSkpIHJldHVybiBtYXBHZXQobWFwLCB2YWx1ZSk7XG4gIH0gZWxzZSBtYXAgPSBuZXcgTWFwKCk7XG5cbiAgdmFyIHR5cGUgPSBjbGFzc29mKHZhbHVlKTtcbiAgdmFyIEMsIG5hbWUsIGNsb25lZCwgZGF0YVRyYW5zZmVyLCBpLCBsZW5ndGgsIGtleXMsIGtleTtcblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdBcnJheSc6XG4gICAgICBjbG9uZWQgPSBBcnJheShsZW5ndGhPZkFycmF5TGlrZSh2YWx1ZSkpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnT2JqZWN0JzpcbiAgICAgIGNsb25lZCA9IHt9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnTWFwJzpcbiAgICAgIGNsb25lZCA9IG5ldyBNYXAoKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ1NldCc6XG4gICAgICBjbG9uZWQgPSBuZXcgU2V0KCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdSZWdFeHAnOlxuICAgICAgLy8gaW4gdGhpcyBibG9jayBiZWNhdXNlIG9mIGEgU2FmYXJpIDE0LjEgYnVnXG4gICAgICAvLyBvbGQgRkYgZG9lcyBub3QgY2xvbmUgcmVnZXhlcyBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLCBzbyBnZXQgdGhlIHNvdXJjZSBhbmQgZmxhZ3MgZGlyZWN0bHlcbiAgICAgIGNsb25lZCA9IG5ldyBSZWdFeHAodmFsdWUuc291cmNlLCBnZXRSZWdFeHBGbGFncyh2YWx1ZSkpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnRXJyb3InOlxuICAgICAgbmFtZSA9IHZhbHVlLm5hbWU7XG4gICAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgICAgY2FzZSAnQWdncmVnYXRlRXJyb3InOlxuICAgICAgICAgIGNsb25lZCA9IGdldEJ1aWx0aW4oJ0FnZ3JlZ2F0ZUVycm9yJykoW10pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdFdmFsRXJyb3InOlxuICAgICAgICAgIGNsb25lZCA9IEV2YWxFcnJvcigpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdSYW5nZUVycm9yJzpcbiAgICAgICAgICBjbG9uZWQgPSBSYW5nZUVycm9yKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1JlZmVyZW5jZUVycm9yJzpcbiAgICAgICAgICBjbG9uZWQgPSBSZWZlcmVuY2VFcnJvcigpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdTeW50YXhFcnJvcic6XG4gICAgICAgICAgY2xvbmVkID0gU3ludGF4RXJyb3IoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnVHlwZUVycm9yJzpcbiAgICAgICAgICBjbG9uZWQgPSBUeXBlRXJyb3IoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnVVJJRXJyb3InOlxuICAgICAgICAgIGNsb25lZCA9IFVSSUVycm9yKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0NvbXBpbGVFcnJvcic6XG4gICAgICAgICAgY2xvbmVkID0gQ29tcGlsZUVycm9yKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0xpbmtFcnJvcic6XG4gICAgICAgICAgY2xvbmVkID0gTGlua0Vycm9yKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ1J1bnRpbWVFcnJvcic6XG4gICAgICAgICAgY2xvbmVkID0gUnVudGltZUVycm9yKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY2xvbmVkID0gRXJyb3IoKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ0RPTUV4Y2VwdGlvbic6XG4gICAgICBjbG9uZWQgPSBuZXcgRE9NRXhjZXB0aW9uKHZhbHVlLm1lc3NhZ2UsIHZhbHVlLm5hbWUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnQXJyYXlCdWZmZXInOlxuICAgIGNhc2UgJ1NoYXJlZEFycmF5QnVmZmVyJzpcbiAgICAgIGNsb25lZCA9IHRyYW5zZmVycmVkQnVmZmVyc1xuICAgICAgICA/IG5ldyBQbGFjZWhvbGRlcih2YWx1ZSwgdHlwZSlcbiAgICAgICAgOiBjbG9uZUJ1ZmZlcih2YWx1ZSwgbWFwLCB0eXBlKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ0RhdGFWaWV3JzpcbiAgICBjYXNlICdJbnQ4QXJyYXknOlxuICAgIGNhc2UgJ1VpbnQ4QXJyYXknOlxuICAgIGNhc2UgJ1VpbnQ4Q2xhbXBlZEFycmF5JzpcbiAgICBjYXNlICdJbnQxNkFycmF5JzpcbiAgICBjYXNlICdVaW50MTZBcnJheSc6XG4gICAgY2FzZSAnSW50MzJBcnJheSc6XG4gICAgY2FzZSAnVWludDMyQXJyYXknOlxuICAgIGNhc2UgJ0Zsb2F0MTZBcnJheSc6XG4gICAgY2FzZSAnRmxvYXQzMkFycmF5JzpcbiAgICBjYXNlICdGbG9hdDY0QXJyYXknOlxuICAgIGNhc2UgJ0JpZ0ludDY0QXJyYXknOlxuICAgIGNhc2UgJ0JpZ1VpbnQ2NEFycmF5JzpcbiAgICAgIGxlbmd0aCA9IHR5cGUgPT09ICdEYXRhVmlldycgPyB2YWx1ZS5ieXRlTGVuZ3RoIDogdmFsdWUubGVuZ3RoO1xuICAgICAgY2xvbmVkID0gdHJhbnNmZXJyZWRCdWZmZXJzXG4gICAgICAgID8gbmV3IFBsYWNlaG9sZGVyKHZhbHVlLCB0eXBlLCB7IG9mZnNldDogdmFsdWUuYnl0ZU9mZnNldCwgbGVuZ3RoOiBsZW5ndGggfSlcbiAgICAgICAgOiBjbG9uZVZpZXcodmFsdWUsIHR5cGUsIHZhbHVlLmJ5dGVPZmZzZXQsIGxlbmd0aCwgbWFwKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ0RPTVF1YWQnOlxuICAgICAgdHJ5IHtcbiAgICAgICAgY2xvbmVkID0gbmV3IERPTVF1YWQoXG4gICAgICAgICAgc3RydWN0dXJlZENsb25lSW50ZXJuYWwodmFsdWUucDEsIG1hcCwgdHJhbnNmZXJyZWRCdWZmZXJzKSxcbiAgICAgICAgICBzdHJ1Y3R1cmVkQ2xvbmVJbnRlcm5hbCh2YWx1ZS5wMiwgbWFwLCB0cmFuc2ZlcnJlZEJ1ZmZlcnMpLFxuICAgICAgICAgIHN0cnVjdHVyZWRDbG9uZUludGVybmFsKHZhbHVlLnAzLCBtYXAsIHRyYW5zZmVycmVkQnVmZmVycyksXG4gICAgICAgICAgc3RydWN0dXJlZENsb25lSW50ZXJuYWwodmFsdWUucDQsIG1hcCwgdHJhbnNmZXJyZWRCdWZmZXJzKVxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY2xvbmVkID0gdHJ5TmF0aXZlUmVzdHJpY3RlZFN0cnVjdHVyZWRDbG9uZSh2YWx1ZSwgdHlwZSk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICBjYXNlICdGaWxlJzpcbiAgICAgIGlmIChuYXRpdmVSZXN0cmljdGVkU3RydWN0dXJlZENsb25lKSB0cnkge1xuICAgICAgICBjbG9uZWQgPSBuYXRpdmVSZXN0cmljdGVkU3RydWN0dXJlZENsb25lKHZhbHVlKTtcbiAgICAgICAgLy8gTm9kZUpTIDIwLjAuMCBidWcsIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvNDc2MTJcbiAgICAgICAgaWYgKGNsYXNzb2YoY2xvbmVkKSAhPT0gdHlwZSkgY2xvbmVkID0gdW5kZWZpbmVkO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICAgICAgaWYgKCFjbG9uZWQpIHRyeSB7XG4gICAgICAgIGNsb25lZCA9IG5ldyBGaWxlKFt2YWx1ZV0sIHZhbHVlLm5hbWUsIHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgICAgIGlmICghY2xvbmVkKSB0aHJvd1VucG9seWZpbGxhYmxlKHR5cGUpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnRmlsZUxpc3QnOlxuICAgICAgZGF0YVRyYW5zZmVyID0gY3JlYXRlRGF0YVRyYW5zZmVyKCk7XG4gICAgICBpZiAoZGF0YVRyYW5zZmVyKSB7XG4gICAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKHZhbHVlKTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgZGF0YVRyYW5zZmVyLml0ZW1zLmFkZChzdHJ1Y3R1cmVkQ2xvbmVJbnRlcm5hbCh2YWx1ZVtpXSwgbWFwLCB0cmFuc2ZlcnJlZEJ1ZmZlcnMpKTtcbiAgICAgICAgfVxuICAgICAgICBjbG9uZWQgPSBkYXRhVHJhbnNmZXIuZmlsZXM7XG4gICAgICB9IGVsc2UgY2xvbmVkID0gdHJ5TmF0aXZlUmVzdHJpY3RlZFN0cnVjdHVyZWRDbG9uZSh2YWx1ZSwgdHlwZSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdJbWFnZURhdGEnOlxuICAgICAgLy8gU2FmYXJpIDkgSW1hZ2VEYXRhIGlzIGEgY29uc3RydWN0b3IsIGJ1dCB0eXBlb2YgSW1hZ2VEYXRhIGlzICdvYmplY3QnXG4gICAgICB0cnkge1xuICAgICAgICBjbG9uZWQgPSBuZXcgSW1hZ2VEYXRhKFxuICAgICAgICAgIHN0cnVjdHVyZWRDbG9uZUludGVybmFsKHZhbHVlLmRhdGEsIG1hcCwgdHJhbnNmZXJyZWRCdWZmZXJzKSxcbiAgICAgICAgICB2YWx1ZS53aWR0aCxcbiAgICAgICAgICB2YWx1ZS5oZWlnaHQsXG4gICAgICAgICAgeyBjb2xvclNwYWNlOiB2YWx1ZS5jb2xvclNwYWNlIH1cbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNsb25lZCA9IHRyeU5hdGl2ZVJlc3RyaWN0ZWRTdHJ1Y3R1cmVkQ2xvbmUodmFsdWUsIHR5cGUpO1xuICAgICAgfSBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKG5hdGl2ZVJlc3RyaWN0ZWRTdHJ1Y3R1cmVkQ2xvbmUpIHtcbiAgICAgICAgY2xvbmVkID0gbmF0aXZlUmVzdHJpY3RlZFN0cnVjdHVyZWRDbG9uZSh2YWx1ZSk7XG4gICAgICB9IGVsc2Ugc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgJ0JpZ0ludCc6XG4gICAgICAgICAgLy8gY2FuIGJlIGEgM3JkIHBhcnR5IHBvbHlmaWxsXG4gICAgICAgICAgY2xvbmVkID0gT2JqZWN0KHZhbHVlLnZhbHVlT2YoKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ0Jvb2xlYW4nOlxuICAgICAgICAgIGNsb25lZCA9IE9iamVjdCh0aGlzQm9vbGVhblZhbHVlKHZhbHVlKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgJ051bWJlcic6XG4gICAgICAgICAgY2xvbmVkID0gT2JqZWN0KHRoaXNOdW1iZXJWYWx1ZSh2YWx1ZSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdTdHJpbmcnOlxuICAgICAgICAgIGNsb25lZCA9IE9iamVjdCh0aGlzU3RyaW5nVmFsdWUodmFsdWUpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnRGF0ZSc6XG4gICAgICAgICAgY2xvbmVkID0gbmV3IERhdGUodGhpc1RpbWVWYWx1ZSh2YWx1ZSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdCbG9iJzpcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY2xvbmVkID0gdmFsdWUuc2xpY2UoMCwgdmFsdWUuc2l6ZSwgdmFsdWUudHlwZSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93VW5wb2x5ZmlsbGFibGUodHlwZSk7XG4gICAgICAgICAgfSBicmVhaztcbiAgICAgICAgY2FzZSAnRE9NUG9pbnQnOlxuICAgICAgICBjYXNlICdET01Qb2ludFJlYWRPbmx5JzpcbiAgICAgICAgICBDID0gZ2xvYmFsW3R5cGVdO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjbG9uZWQgPSBDLmZyb21Qb2ludFxuICAgICAgICAgICAgICA/IEMuZnJvbVBvaW50KHZhbHVlKVxuICAgICAgICAgICAgICA6IG5ldyBDKHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnosIHZhbHVlLncpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aHJvd1VucG9seWZpbGxhYmxlKHR5cGUpO1xuICAgICAgICAgIH0gYnJlYWs7XG4gICAgICAgIGNhc2UgJ0RPTVJlY3QnOlxuICAgICAgICBjYXNlICdET01SZWN0UmVhZE9ubHknOlxuICAgICAgICAgIEMgPSBnbG9iYWxbdHlwZV07XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNsb25lZCA9IEMuZnJvbVJlY3RcbiAgICAgICAgICAgICAgPyBDLmZyb21SZWN0KHZhbHVlKVxuICAgICAgICAgICAgICA6IG5ldyBDKHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLndpZHRoLCB2YWx1ZS5oZWlnaHQpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aHJvd1VucG9seWZpbGxhYmxlKHR5cGUpO1xuICAgICAgICAgIH0gYnJlYWs7XG4gICAgICAgIGNhc2UgJ0RPTU1hdHJpeCc6XG4gICAgICAgIGNhc2UgJ0RPTU1hdHJpeFJlYWRPbmx5JzpcbiAgICAgICAgICBDID0gZ2xvYmFsW3R5cGVdO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjbG9uZWQgPSBDLmZyb21NYXRyaXhcbiAgICAgICAgICAgICAgPyBDLmZyb21NYXRyaXgodmFsdWUpXG4gICAgICAgICAgICAgIDogbmV3IEModmFsdWUpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aHJvd1VucG9seWZpbGxhYmxlKHR5cGUpO1xuICAgICAgICAgIH0gYnJlYWs7XG4gICAgICAgIGNhc2UgJ0F1ZGlvRGF0YSc6XG4gICAgICAgIGNhc2UgJ1ZpZGVvRnJhbWUnOlxuICAgICAgICAgIGlmICghaXNDYWxsYWJsZSh2YWx1ZS5jbG9uZSkpIHRocm93VW5wb2x5ZmlsbGFibGUodHlwZSk7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNsb25lZCA9IHZhbHVlLmNsb25lKCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93VW5jbG9uZWFibGUodHlwZSk7XG4gICAgICAgICAgfSBicmVhaztcbiAgICAgICAgY2FzZSAnQ3JvcFRhcmdldCc6XG4gICAgICAgIGNhc2UgJ0NyeXB0b0tleSc6XG4gICAgICAgIGNhc2UgJ0ZpbGVTeXN0ZW1EaXJlY3RvcnlIYW5kbGUnOlxuICAgICAgICBjYXNlICdGaWxlU3lzdGVtRmlsZUhhbmRsZSc6XG4gICAgICAgIGNhc2UgJ0ZpbGVTeXN0ZW1IYW5kbGUnOlxuICAgICAgICBjYXNlICdHUFVDb21waWxhdGlvbkluZm8nOlxuICAgICAgICBjYXNlICdHUFVDb21waWxhdGlvbk1lc3NhZ2UnOlxuICAgICAgICBjYXNlICdJbWFnZUJpdG1hcCc6XG4gICAgICAgIGNhc2UgJ1JUQ0NlcnRpZmljYXRlJzpcbiAgICAgICAgY2FzZSAnV2ViQXNzZW1ibHkuTW9kdWxlJzpcbiAgICAgICAgICB0aHJvd1VucG9seWZpbGxhYmxlKHR5cGUpO1xuICAgICAgICAgIC8vIGJyZWFrIG9taXR0ZWRcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvd1VuY2xvbmVhYmxlKHR5cGUpO1xuICAgICAgfVxuICB9XG5cbiAgbWFwU2V0KG1hcCwgdmFsdWUsIGNsb25lZCk7XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnQXJyYXknOlxuICAgIGNhc2UgJ09iamVjdCc6XG4gICAgICBrZXlzID0gb2JqZWN0S2V5cyh2YWx1ZSk7XG4gICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShrZXlzKTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KGNsb25lZCwga2V5LCBzdHJ1Y3R1cmVkQ2xvbmVJbnRlcm5hbCh2YWx1ZVtrZXldLCBtYXAsIHRyYW5zZmVycmVkQnVmZmVycykpO1xuICAgICAgfSBicmVhaztcbiAgICBjYXNlICdNYXAnOlxuICAgICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbiAodiwgaykge1xuICAgICAgICBtYXBTZXQoY2xvbmVkLCBzdHJ1Y3R1cmVkQ2xvbmVJbnRlcm5hbChrLCBtYXAsIHRyYW5zZmVycmVkQnVmZmVycyksIHN0cnVjdHVyZWRDbG9uZUludGVybmFsKHYsIG1hcCwgdHJhbnNmZXJyZWRCdWZmZXJzKSk7XG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ1NldCc6XG4gICAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uICh2KSB7XG4gICAgICAgIHNldEFkZChjbG9uZWQsIHN0cnVjdHVyZWRDbG9uZUludGVybmFsKHYsIG1hcCwgdHJhbnNmZXJyZWRCdWZmZXJzKSk7XG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ0Vycm9yJzpcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShjbG9uZWQsICdtZXNzYWdlJywgc3RydWN0dXJlZENsb25lSW50ZXJuYWwodmFsdWUubWVzc2FnZSwgbWFwLCB0cmFuc2ZlcnJlZEJ1ZmZlcnMpKTtcbiAgICAgIGlmIChoYXNPd24odmFsdWUsICdjYXVzZScpKSB7XG4gICAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShjbG9uZWQsICdjYXVzZScsIHN0cnVjdHVyZWRDbG9uZUludGVybmFsKHZhbHVlLmNhdXNlLCBtYXAsIHRyYW5zZmVycmVkQnVmZmVycykpO1xuICAgICAgfVxuICAgICAgaWYgKG5hbWUgPT0gJ0FnZ3JlZ2F0ZUVycm9yJykge1xuICAgICAgICBjbG9uZWQuZXJyb3JzID0gc3RydWN0dXJlZENsb25lSW50ZXJuYWwodmFsdWUuZXJyb3JzLCBtYXAsIHRyYW5zZmVycmVkQnVmZmVycyk7XG4gICAgICB9IC8vIGJyZWFrIG9taXR0ZWRcbiAgICBjYXNlICdET01FeGNlcHRpb24nOlxuICAgICAgaWYgKEVSUk9SX1NUQUNLX0lOU1RBTExBQkxFKSB7XG4gICAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShjbG9uZWQsICdzdGFjaycsIHN0cnVjdHVyZWRDbG9uZUludGVybmFsKHZhbHVlLnN0YWNrLCBtYXAsIHRyYW5zZmVycmVkQnVmZmVycykpO1xuICAgICAgfVxuICB9XG5cbiAgcmV0dXJuIGNsb25lZDtcbn07XG5cbnZhciByZXBsYWNlUGxhY2Vob2xkZXJzID0gZnVuY3Rpb24gKHZhbHVlLCBtYXApIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHJldHVybiB2YWx1ZTtcbiAgaWYgKG1hcEhhcyhtYXAsIHZhbHVlKSkgcmV0dXJuIG1hcEdldChtYXAsIHZhbHVlKTtcblxuICB2YXIgdHlwZSwgb2JqZWN0LCBtZXRhZGF0YSwgaSwgbGVuZ3RoLCBrZXlzLCBrZXksIHJlcGxhY2VtZW50O1xuXG4gIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFBsYWNlaG9sZGVyKSB7XG4gICAgdHlwZSA9IHZhbHVlLnR5cGU7XG4gICAgb2JqZWN0ID0gdmFsdWUub2JqZWN0O1xuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdBcnJheUJ1ZmZlcic6XG4gICAgICBjYXNlICdTaGFyZWRBcnJheUJ1ZmZlcic6XG4gICAgICAgIHJlcGxhY2VtZW50ID0gY2xvbmVCdWZmZXIob2JqZWN0LCBtYXAsIHR5cGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0RhdGFWaWV3JzpcbiAgICAgIGNhc2UgJ0ludDhBcnJheSc6XG4gICAgICBjYXNlICdVaW50OEFycmF5JzpcbiAgICAgIGNhc2UgJ1VpbnQ4Q2xhbXBlZEFycmF5JzpcbiAgICAgIGNhc2UgJ0ludDE2QXJyYXknOlxuICAgICAgY2FzZSAnVWludDE2QXJyYXknOlxuICAgICAgY2FzZSAnSW50MzJBcnJheSc6XG4gICAgICBjYXNlICdVaW50MzJBcnJheSc6XG4gICAgICBjYXNlICdGbG9hdDE2QXJyYXknOlxuICAgICAgY2FzZSAnRmxvYXQzMkFycmF5JzpcbiAgICAgIGNhc2UgJ0Zsb2F0NjRBcnJheSc6XG4gICAgICBjYXNlICdCaWdJbnQ2NEFycmF5JzpcbiAgICAgIGNhc2UgJ0JpZ1VpbnQ2NEFycmF5JzpcbiAgICAgICAgbWV0YWRhdGEgPSB2YWx1ZS5tZXRhZGF0YTtcbiAgICAgICAgcmVwbGFjZW1lbnQgPSBjbG9uZVZpZXcob2JqZWN0LCB0eXBlLCBtZXRhZGF0YS5vZmZzZXQsIG1ldGFkYXRhLmxlbmd0aCwgbWFwKTtcbiAgICB9XG4gIH0gZWxzZSBzd2l0Y2ggKGNsYXNzb2YodmFsdWUpKSB7XG4gICAgY2FzZSAnQXJyYXknOlxuICAgIGNhc2UgJ09iamVjdCc6XG4gICAgICBrZXlzID0gb2JqZWN0S2V5cyh2YWx1ZSk7XG4gICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShrZXlzKTsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICAgIHZhbHVlW2tleV0gPSByZXBsYWNlUGxhY2Vob2xkZXJzKHZhbHVlW2tleV0sIG1hcCk7XG4gICAgICB9IGJyZWFrO1xuICAgIGNhc2UgJ01hcCc6XG4gICAgICByZXBsYWNlbWVudCA9IG5ldyBNYXAoKTtcbiAgICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24gKHYsIGspIHtcbiAgICAgICAgbWFwU2V0KHJlcGxhY2VtZW50LCByZXBsYWNlUGxhY2Vob2xkZXJzKGssIG1hcCksIHJlcGxhY2VQbGFjZWhvbGRlcnModiwgbWFwKSk7XG4gICAgICB9KTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ1NldCc6XG4gICAgICByZXBsYWNlbWVudCA9IG5ldyBTZXQoKTtcbiAgICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgc2V0QWRkKHJlcGxhY2VtZW50LCByZXBsYWNlUGxhY2Vob2xkZXJzKHYsIG1hcCkpO1xuICAgICAgfSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdFcnJvcic6XG4gICAgICB2YWx1ZS5tZXNzYWdlID0gcmVwbGFjZVBsYWNlaG9sZGVycyh2YWx1ZS5tZXNzYWdlLCBtYXApO1xuICAgICAgaWYgKGhhc093bih2YWx1ZSwgJ2NhdXNlJykpIHtcbiAgICAgICAgdmFsdWUuY2F1c2UgPSByZXBsYWNlUGxhY2Vob2xkZXJzKHZhbHVlLmNhdXNlLCBtYXApO1xuICAgICAgfVxuICAgICAgaWYgKHZhbHVlLm5hbWUgPT0gJ0FnZ3JlZ2F0ZUVycm9yJykge1xuICAgICAgICB2YWx1ZS5lcnJvcnMgPSByZXBsYWNlUGxhY2Vob2xkZXJzKHZhbHVlLmVycm9ycywgbWFwKTtcbiAgICAgIH0gLy8gYnJlYWsgb21pdHRlZFxuICAgIGNhc2UgJ0RPTUV4Y2VwdGlvbic6XG4gICAgICBpZiAoRVJST1JfU1RBQ0tfSU5TVEFMTEFCTEUpIHtcbiAgICAgICAgdmFsdWUuc3RhY2sgPSByZXBsYWNlUGxhY2Vob2xkZXJzKHZhbHVlLnN0YWNrLCBtYXApO1xuICAgICAgfVxuICB9XG5cbiAgbWFwU2V0KG1hcCwgdmFsdWUsIHJlcGxhY2VtZW50IHx8IHZhbHVlKTtcblxuICByZXR1cm4gcmVwbGFjZW1lbnQgfHwgdmFsdWU7XG59O1xuXG52YXIgdHJ5VG9UcmFuc2ZlciA9IGZ1bmN0aW9uIChyYXdUcmFuc2ZlciwgbWFwKSB7XG4gIGlmICghaXNPYmplY3QocmF3VHJhbnNmZXIpKSB0aHJvdyBUeXBlRXJyb3IoJ1RyYW5zZmVyIG9wdGlvbiBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgc2VxdWVuY2UnKTtcblxuICB2YXIgdHJhbnNmZXIgPSBbXTtcblxuICBpdGVyYXRlKHJhd1RyYW5zZmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBwdXNoKHRyYW5zZmVyLCBhbk9iamVjdCh2YWx1ZSkpO1xuICB9KTtcblxuICB2YXIgaSA9IDA7XG4gIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZSh0cmFuc2Zlcik7XG4gIHZhciBidWZmZXJzID0gW107XG4gIHZhciB2YWx1ZSwgdHlwZSwgQywgdHJhbnNmZXJyZWQsIGNhbnZhcywgY29udGV4dDtcblxuICB3aGlsZSAoaSA8IGxlbmd0aCkge1xuICAgIHZhbHVlID0gdHJhbnNmZXJbaSsrXTtcblxuICAgIHR5cGUgPSBjbGFzc29mKHZhbHVlKTtcblxuICAgIGlmICh0eXBlID09PSAnQXJyYXlCdWZmZXInKSB7XG4gICAgICBwdXNoKGJ1ZmZlcnMsIHZhbHVlKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChtYXBIYXMobWFwLCB2YWx1ZSkpIHRocm93IG5ldyBET01FeGNlcHRpb24oJ0R1cGxpY2F0ZSB0cmFuc2ZlcmFibGUnLCBEQVRBX0NMT05FX0VSUk9SKTtcblxuICAgIGlmIChQUk9QRVJfVFJBTlNGRVIpIHtcbiAgICAgIHRyYW5zZmVycmVkID0gbmF0aXZlU3RydWN0dXJlZENsb25lKHZhbHVlLCB7IHRyYW5zZmVyOiBbdmFsdWVdIH0pO1xuICAgIH0gZWxzZSBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ0ltYWdlQml0bWFwJzpcbiAgICAgICAgQyA9IGdsb2JhbC5PZmZzY3JlZW5DYW52YXM7XG4gICAgICAgIGlmICghaXNDb25zdHJ1Y3RvcihDKSkgdGhyb3dVbnBvbHlmaWxsYWJsZSh0eXBlLCBUUkFOU0ZFUlJJTkcpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNhbnZhcyA9IG5ldyBDKHZhbHVlLndpZHRoLCB2YWx1ZS5oZWlnaHQpO1xuICAgICAgICAgIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnYml0bWFwcmVuZGVyZXInKTtcbiAgICAgICAgICBjb250ZXh0LnRyYW5zZmVyRnJvbUltYWdlQml0bWFwKHZhbHVlKTtcbiAgICAgICAgICB0cmFuc2ZlcnJlZCA9IGNhbnZhcy50cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0F1ZGlvRGF0YSc6XG4gICAgICBjYXNlICdWaWRlb0ZyYW1lJzpcbiAgICAgICAgaWYgKCFpc0NhbGxhYmxlKHZhbHVlLmNsb25lKSB8fCAhaXNDYWxsYWJsZSh2YWx1ZS5jbG9zZSkpIHRocm93VW5wb2x5ZmlsbGFibGUodHlwZSwgVFJBTlNGRVJSSU5HKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0cmFuc2ZlcnJlZCA9IHZhbHVlLmNsb25lKCk7XG4gICAgICAgICAgdmFsdWUuY2xvc2UoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ01lZGlhU291cmNlSGFuZGxlJzpcbiAgICAgIGNhc2UgJ01lc3NhZ2VQb3J0JzpcbiAgICAgIGNhc2UgJ09mZnNjcmVlbkNhbnZhcyc6XG4gICAgICBjYXNlICdSZWFkYWJsZVN0cmVhbSc6XG4gICAgICBjYXNlICdUcmFuc2Zvcm1TdHJlYW0nOlxuICAgICAgY2FzZSAnV3JpdGFibGVTdHJlYW0nOlxuICAgICAgICB0aHJvd1VucG9seWZpbGxhYmxlKHR5cGUsIFRSQU5TRkVSUklORyk7XG4gICAgfVxuXG4gICAgaWYgKHRyYW5zZmVycmVkID09PSB1bmRlZmluZWQpIHRocm93IG5ldyBET01FeGNlcHRpb24oJ1RoaXMgb2JqZWN0IGNhbm5vdCBiZSB0cmFuc2ZlcnJlZDogJyArIHR5cGUsIERBVEFfQ0xPTkVfRVJST1IpO1xuXG4gICAgbWFwU2V0KG1hcCwgdmFsdWUsIHRyYW5zZmVycmVkKTtcbiAgfVxuXG4gIHJldHVybiBidWZmZXJzO1xufTtcblxudmFyIHRyeVRvVHJhbnNmZXJCdWZmZXJzID0gZnVuY3Rpb24gKHRyYW5zZmVyLCBtYXApIHtcbiAgdmFyIGkgPSAwO1xuICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UodHJhbnNmZXIpO1xuICB2YXIgdmFsdWUsIHRyYW5zZmVycmVkO1xuXG4gIHdoaWxlIChpIDwgbGVuZ3RoKSB7XG4gICAgdmFsdWUgPSB0cmFuc2ZlcltpKytdO1xuXG4gICAgaWYgKG1hcEhhcyhtYXAsIHZhbHVlKSkgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignRHVwbGljYXRlIHRyYW5zZmVyYWJsZScsIERBVEFfQ0xPTkVfRVJST1IpO1xuXG4gICAgaWYgKFBST1BFUl9UUkFOU0ZFUikge1xuICAgICAgdHJhbnNmZXJyZWQgPSBuYXRpdmVTdHJ1Y3R1cmVkQ2xvbmUodmFsdWUsIHsgdHJhbnNmZXI6IFt2YWx1ZV0gfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghaXNDYWxsYWJsZSh2YWx1ZS50cmFuc2ZlcikpIHRocm93VW5wb2x5ZmlsbGFibGUoJ0FycmF5QnVmZmVyJywgVFJBTlNGRVJSSU5HKTtcbiAgICAgIHRyYW5zZmVycmVkID0gdmFsdWUudHJhbnNmZXIoKTtcbiAgICB9XG5cbiAgICBtYXBTZXQobWFwLCB2YWx1ZSwgdHJhbnNmZXJyZWQpO1xuICB9XG59O1xuXG4vLyBgc3RydWN0dXJlZENsb25lYCBtZXRob2Rcbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N0cnVjdHVyZWQtZGF0YS5odG1sI2RvbS1zdHJ1Y3R1cmVkY2xvbmVcbiQoeyBnbG9iYWw6IHRydWUsIGVudW1lcmFibGU6IHRydWUsIHNoYW06ICFQUk9QRVJfVFJBTlNGRVIsIGZvcmNlZDogRk9SQ0VEX1JFUExBQ0VNRU5UIH0sIHtcbiAgc3RydWN0dXJlZENsb25lOiBmdW5jdGlvbiBzdHJ1Y3R1cmVkQ2xvbmUodmFsdWUgLyogLCB7IHRyYW5zZmVyIH0gKi8pIHtcbiAgICB2YXIgb3B0aW9ucyA9IHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpID4gMSAmJiAhaXNOdWxsT3JVbmRlZmluZWQoYXJndW1lbnRzWzFdKSA/IGFuT2JqZWN0KGFyZ3VtZW50c1sxXSkgOiB1bmRlZmluZWQ7XG4gICAgdmFyIHRyYW5zZmVyID0gb3B0aW9ucyA/IG9wdGlvbnMudHJhbnNmZXIgOiB1bmRlZmluZWQ7XG4gICAgdmFyIHRyYW5zZmVycmVkQnVmZmVycyA9IGZhbHNlO1xuICAgIHZhciBtYXAsIGJ1ZmZlcnM7XG5cbiAgICBpZiAodHJhbnNmZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbWFwID0gbmV3IE1hcCgpO1xuICAgICAgYnVmZmVycyA9IHRyeVRvVHJhbnNmZXIodHJhbnNmZXIsIG1hcCk7XG4gICAgICB0cmFuc2ZlcnJlZEJ1ZmZlcnMgPSAhIWxlbmd0aE9mQXJyYXlMaWtlKGJ1ZmZlcnMpO1xuICAgIH1cblxuICAgIHZhciBjbG9uZSA9IHN0cnVjdHVyZWRDbG9uZUludGVybmFsKHZhbHVlLCBtYXAsIHRyYW5zZmVycmVkQnVmZmVycyk7XG5cbiAgICAvLyBzaW5jZSBvZiBhbiBpc3N1ZSB3aXRoIGNsb25pbmcgdmlld3Mgb2YgdHJhbnNmZXJyZWQgYnVmZmVycywgd2UgYSBmb3JjZWQgdG8gdHJhbnNmZXIgLyBjbG9uZSB0aGVtIGluIDIgc3RlcHNcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTI2NVxuICAgIGlmICh0cmFuc2ZlcnJlZEJ1ZmZlcnMpIHtcbiAgICAgIG1hcCA9IG5ldyBNYXAoKTtcbiAgICAgIHRyeVRvVHJhbnNmZXJCdWZmZXJzKHRyYW5zZmVyLCBtYXApO1xuICAgICAgY2xvbmUgPSByZXBsYWNlUGxhY2Vob2xkZXJzKGNsb25lLCBtYXApO1xuICAgIH1cblxuICAgIHJldHVybiBjbG9uZTtcbiAgfVxufSk7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi5zdHJ1Y3R1cmVkLWNsb25lLmpzPyIpfSksIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIudXJsLXNlYXJjaC1wYXJhbXMuY29uc3RydWN0b3IuanMiOigobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e2V2YWwoIlxuLy8gVE9ETzogaW4gY29yZS1qc0A0LCBtb3ZlIC9tb2R1bGVzLyBkZXBlbmRlbmNpZXMgdG8gcHVibGljIGVudHJpZXMgZm9yIGJldHRlciBvcHRpbWl6YXRpb24gYnkgdG9vbHMgbGlrZSBgcHJlc2V0LWVudmBcbl9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3IuanNcIik7XG52YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9leHBvcnQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9leHBvcnQuanNcIik7XG52YXIgZ2xvYmFsID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2dsb2JhbCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dsb2JhbC5qc1wiKTtcbnZhciBjYWxsID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1jYWxsLmpzXCIpO1xudmFyIHVuY3VycnlUaGlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qc1wiKTtcbnZhciBERVNDUklQVE9SUyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9kZXNjcmlwdG9ycyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Rlc2NyaXB0b3JzLmpzXCIpO1xudmFyIFVTRV9OQVRJVkVfVVJMID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3VybC1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24gKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91cmwtY29uc3RydWN0b3ItZGV0ZWN0aW9uLmpzXCIpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLmpzXCIpO1xudmFyIGRlZmluZUJ1aWx0SW5BY2Nlc3NvciA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3IgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4tYWNjZXNzb3IuanNcIik7XG52YXIgZGVmaW5lQnVpbHRJbnMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWlucyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbnMuanNcIik7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZy5qc1wiKTtcbnZhciBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1jb25zdHJ1Y3RvciAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdG9yLWNyZWF0ZS1jb25zdHJ1Y3Rvci5qc1wiKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUuanNcIik7XG52YXIgYW5JbnN0YW5jZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9hbi1pbnN0YW5jZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLWluc3RhbmNlLmpzXCIpO1xudmFyIGlzQ2FsbGFibGUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qc1wiKTtcbnZhciBoYXNPd24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkuanNcIik7XG52YXIgYmluZCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQuanNcIik7XG52YXIgY2xhc3NvZiA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9jbGFzc29mICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY2xhc3NvZi5qc1wiKTtcbnZhciBhbk9iamVjdCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9hbi1vYmplY3QgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hbi1vYmplY3QuanNcIik7XG52YXIgaXNPYmplY3QgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaXMtb2JqZWN0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtb2JqZWN0LmpzXCIpO1xudmFyICR0b1N0cmluZyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy90by1zdHJpbmcgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1zdHJpbmcuanNcIik7XG52YXIgY3JlYXRlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtY3JlYXRlLmpzXCIpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzXCIpO1xudmFyIGdldEl0ZXJhdG9yID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1pdGVyYXRvci5qc1wiKTtcbnZhciBnZXRJdGVyYXRvck1ldGhvZCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZC5qc1wiKTtcbnZhciB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy92YWxpZGF0ZS1hcmd1bWVudHMtbGVuZ3RoICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdmFsaWRhdGUtYXJndW1lbnRzLWxlbmd0aC5qc1wiKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbC5qc1wiKTtcbnZhciBhcnJheVNvcnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvYXJyYXktc29ydCAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LXNvcnQuanNcIik7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBVUkxfU0VBUkNIX1BBUkFNUyA9ICdVUkxTZWFyY2hQYXJhbXMnO1xudmFyIFVSTF9TRUFSQ0hfUEFSQU1TX0lURVJBVE9SID0gVVJMX1NFQVJDSF9QQVJBTVMgKyAnSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoVVJMX1NFQVJDSF9QQVJBTVMpO1xudmFyIGdldEludGVybmFsSXRlcmF0b3JTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFVSTF9TRUFSQ0hfUEFSQU1TX0lURVJBVE9SKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBBdm9pZCBOb2RlSlMgZXhwZXJpbWVudGFsIHdhcm5pbmdcbnZhciBzYWZlR2V0QnVpbHRJbiA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIGlmICghREVTQ1JJUFRPUlMpIHJldHVybiBnbG9iYWxbbmFtZV07XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGdsb2JhbCwgbmFtZSk7XG4gIHJldHVybiBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IudmFsdWU7XG59O1xuXG52YXIgbmF0aXZlRmV0Y2ggPSBzYWZlR2V0QnVpbHRJbignZmV0Y2gnKTtcbnZhciBOYXRpdmVSZXF1ZXN0ID0gc2FmZUdldEJ1aWx0SW4oJ1JlcXVlc3QnKTtcbnZhciBIZWFkZXJzID0gc2FmZUdldEJ1aWx0SW4oJ0hlYWRlcnMnKTtcbnZhciBSZXF1ZXN0UHJvdG90eXBlID0gTmF0aXZlUmVxdWVzdCAmJiBOYXRpdmVSZXF1ZXN0LnByb3RvdHlwZTtcbnZhciBIZWFkZXJzUHJvdG90eXBlID0gSGVhZGVycyAmJiBIZWFkZXJzLnByb3RvdHlwZTtcbnZhciBSZWdFeHAgPSBnbG9iYWwuUmVnRXhwO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgZGVjb2RlVVJJQ29tcG9uZW50ID0gZ2xvYmFsLmRlY29kZVVSSUNvbXBvbmVudDtcbnZhciBlbmNvZGVVUklDb21wb25lbnQgPSBnbG9iYWwuZW5jb2RlVVJJQ29tcG9uZW50O1xudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgam9pbiA9IHVuY3VycnlUaGlzKFtdLmpvaW4pO1xudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgc2hpZnQgPSB1bmN1cnJ5VGhpcyhbXS5zaGlmdCk7XG52YXIgc3BsaWNlID0gdW5jdXJyeVRoaXMoW10uc3BsaWNlKTtcbnZhciBzcGxpdCA9IHVuY3VycnlUaGlzKCcnLnNwbGl0KTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxudmFyIHBsdXMgPSAvXFwrL2c7XG52YXIgc2VxdWVuY2VzID0gQXJyYXkoNCk7XG5cbnZhciBwZXJjZW50U2VxdWVuY2UgPSBmdW5jdGlvbiAoYnl0ZXMpIHtcbiAgcmV0dXJuIHNlcXVlbmNlc1tieXRlcyAtIDFdIHx8IChzZXF1ZW5jZXNbYnl0ZXMgLSAxXSA9IFJlZ0V4cCgnKCg/OiVbXFxcXGRhLWZdezJ9KXsnICsgYnl0ZXMgKyAnfSknLCAnZ2knKSk7XG59O1xuXG52YXIgcGVyY2VudERlY29kZSA9IGZ1bmN0aW9uIChzZXF1ZW5jZSkge1xuICB0cnkge1xuICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoc2VxdWVuY2UpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBzZXF1ZW5jZTtcbiAgfVxufTtcblxudmFyIGRlc2VyaWFsaXplID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciByZXN1bHQgPSByZXBsYWNlKGl0LCBwbHVzLCAnICcpO1xuICB2YXIgYnl0ZXMgPSA0O1xuICB0cnkge1xuICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQocmVzdWx0KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB3aGlsZSAoYnl0ZXMpIHtcbiAgICAgIHJlc3VsdCA9IHJlcGxhY2UocmVzdWx0LCBwZXJjZW50U2VxdWVuY2UoYnl0ZXMtLSksIHBlcmNlbnREZWNvZGUpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59O1xuXG52YXIgZmluZCA9IC9bIScoKX5dfCUyMC9nO1xuXG52YXIgcmVwbGFjZW1lbnRzID0ge1xuICAnISc6ICclMjEnLFxuICBcIidcIjogJyUyNycsXG4gICcoJzogJyUyOCcsXG4gICcpJzogJyUyOScsXG4gICd+JzogJyU3RScsXG4gICclMjAnOiAnKydcbn07XG5cbnZhciByZXBsYWNlciA9IGZ1bmN0aW9uIChtYXRjaCkge1xuICByZXR1cm4gcmVwbGFjZW1lbnRzW21hdGNoXTtcbn07XG5cbnZhciBzZXJpYWxpemUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHJlcGxhY2UoZW5jb2RlVVJJQ29tcG9uZW50KGl0KSwgZmluZCwgcmVwbGFjZXIpO1xufTtcblxudmFyIFVSTFNlYXJjaFBhcmFtc0l0ZXJhdG9yID0gY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvcihmdW5jdGlvbiBJdGVyYXRvcihwYXJhbXMsIGtpbmQpIHtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCB7XG4gICAgdHlwZTogVVJMX1NFQVJDSF9QQVJBTVNfSVRFUkFUT1IsXG4gICAgaXRlcmF0b3I6IGdldEl0ZXJhdG9yKGdldEludGVybmFsUGFyYW1zU3RhdGUocGFyYW1zKS5lbnRyaWVzKSxcbiAgICBraW5kOiBraW5kXG4gIH0pO1xufSwgJ0l0ZXJhdG9yJywgZnVuY3Rpb24gbmV4dCgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxJdGVyYXRvclN0YXRlKHRoaXMpO1xuICB2YXIga2luZCA9IHN0YXRlLmtpbmQ7XG4gIHZhciBzdGVwID0gc3RhdGUuaXRlcmF0b3IubmV4dCgpO1xuICB2YXIgZW50cnkgPSBzdGVwLnZhbHVlO1xuICBpZiAoIXN0ZXAuZG9uZSkge1xuICAgIHN0ZXAudmFsdWUgPSBraW5kID09PSAna2V5cycgPyBlbnRyeS5rZXkgOiBraW5kID09PSAndmFsdWVzJyA/IGVudHJ5LnZhbHVlIDogW2VudHJ5LmtleSwgZW50cnkudmFsdWVdO1xuICB9IHJldHVybiBzdGVwO1xufSwgdHJ1ZSk7XG5cbnZhciBVUkxTZWFyY2hQYXJhbXNTdGF0ZSA9IGZ1bmN0aW9uIChpbml0KSB7XG4gIHRoaXMuZW50cmllcyA9IFtdO1xuICB0aGlzLnVybCA9IG51bGw7XG5cbiAgaWYgKGluaXQgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChpc09iamVjdChpbml0KSkgdGhpcy5wYXJzZU9iamVjdChpbml0KTtcbiAgICBlbHNlIHRoaXMucGFyc2VRdWVyeSh0eXBlb2YgaW5pdCA9PSAnc3RyaW5nJyA/IGNoYXJBdChpbml0LCAwKSA9PT0gJz8nID8gc3RyaW5nU2xpY2UoaW5pdCwgMSkgOiBpbml0IDogJHRvU3RyaW5nKGluaXQpKTtcbiAgfVxufTtcblxuVVJMU2VhcmNoUGFyYW1zU3RhdGUucHJvdG90eXBlID0ge1xuICB0eXBlOiBVUkxfU0VBUkNIX1BBUkFNUyxcbiAgYmluZFVSTDogZnVuY3Rpb24gKHVybCkge1xuICAgIHRoaXMudXJsID0gdXJsO1xuICAgIHRoaXMudXBkYXRlKCk7XG4gIH0sXG4gIHBhcnNlT2JqZWN0OiBmdW5jdGlvbiAob2JqZWN0KSB7XG4gICAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gZ2V0SXRlcmF0b3JNZXRob2Qob2JqZWN0KTtcbiAgICB2YXIgaXRlcmF0b3IsIG5leHQsIHN0ZXAsIGVudHJ5SXRlcmF0b3IsIGVudHJ5TmV4dCwgZmlyc3QsIHNlY29uZDtcblxuICAgIGlmIChpdGVyYXRvck1ldGhvZCkge1xuICAgICAgaXRlcmF0b3IgPSBnZXRJdGVyYXRvcihvYmplY3QsIGl0ZXJhdG9yTWV0aG9kKTtcbiAgICAgIG5leHQgPSBpdGVyYXRvci5uZXh0O1xuICAgICAgd2hpbGUgKCEoc3RlcCA9IGNhbGwobmV4dCwgaXRlcmF0b3IpKS5kb25lKSB7XG4gICAgICAgIGVudHJ5SXRlcmF0b3IgPSBnZXRJdGVyYXRvcihhbk9iamVjdChzdGVwLnZhbHVlKSk7XG4gICAgICAgIGVudHJ5TmV4dCA9IGVudHJ5SXRlcmF0b3IubmV4dDtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChmaXJzdCA9IGNhbGwoZW50cnlOZXh0LCBlbnRyeUl0ZXJhdG9yKSkuZG9uZSB8fFxuICAgICAgICAgIChzZWNvbmQgPSBjYWxsKGVudHJ5TmV4dCwgZW50cnlJdGVyYXRvcikpLmRvbmUgfHxcbiAgICAgICAgICAhY2FsbChlbnRyeU5leHQsIGVudHJ5SXRlcmF0b3IpLmRvbmVcbiAgICAgICAgKSB0aHJvdyBUeXBlRXJyb3IoJ0V4cGVjdGVkIHNlcXVlbmNlIHdpdGggbGVuZ3RoIDInKTtcbiAgICAgICAgcHVzaCh0aGlzLmVudHJpZXMsIHsga2V5OiAkdG9TdHJpbmcoZmlyc3QudmFsdWUpLCB2YWx1ZTogJHRvU3RyaW5nKHNlY29uZC52YWx1ZSkgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGZvciAodmFyIGtleSBpbiBvYmplY3QpIGlmIChoYXNPd24ob2JqZWN0LCBrZXkpKSB7XG4gICAgICBwdXNoKHRoaXMuZW50cmllcywgeyBrZXk6IGtleSwgdmFsdWU6ICR0b1N0cmluZyhvYmplY3Rba2V5XSkgfSk7XG4gICAgfVxuICB9LFxuICBwYXJzZVF1ZXJ5OiBmdW5jdGlvbiAocXVlcnkpIHtcbiAgICBpZiAocXVlcnkpIHtcbiAgICAgIHZhciBhdHRyaWJ1dGVzID0gc3BsaXQocXVlcnksICcmJyk7XG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgdmFyIGF0dHJpYnV0ZSwgZW50cnk7XG4gICAgICB3aGlsZSAoaW5kZXggPCBhdHRyaWJ1dGVzLmxlbmd0aCkge1xuICAgICAgICBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzW2luZGV4KytdO1xuICAgICAgICBpZiAoYXR0cmlidXRlLmxlbmd0aCkge1xuICAgICAgICAgIGVudHJ5ID0gc3BsaXQoYXR0cmlidXRlLCAnPScpO1xuICAgICAgICAgIHB1c2godGhpcy5lbnRyaWVzLCB7XG4gICAgICAgICAgICBrZXk6IGRlc2VyaWFsaXplKHNoaWZ0KGVudHJ5KSksXG4gICAgICAgICAgICB2YWx1ZTogZGVzZXJpYWxpemUoam9pbihlbnRyeSwgJz0nKSlcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgc2VyaWFsaXplOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGVudHJpZXMgPSB0aGlzLmVudHJpZXM7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGVudHJ5O1xuICAgIHdoaWxlIChpbmRleCA8IGVudHJpZXMubGVuZ3RoKSB7XG4gICAgICBlbnRyeSA9IGVudHJpZXNbaW5kZXgrK107XG4gICAgICBwdXNoKHJlc3VsdCwgc2VyaWFsaXplKGVudHJ5LmtleSkgKyAnPScgKyBzZXJpYWxpemUoZW50cnkudmFsdWUpKTtcbiAgICB9IHJldHVybiBqb2luKHJlc3VsdCwgJyYnKTtcbiAgfSxcbiAgdXBkYXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5lbnRyaWVzLmxlbmd0aCA9IDA7XG4gICAgdGhpcy5wYXJzZVF1ZXJ5KHRoaXMudXJsLnF1ZXJ5KTtcbiAgfSxcbiAgdXBkYXRlVVJMOiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHRoaXMudXJsKSB0aGlzLnVybC51cGRhdGUoKTtcbiAgfVxufTtcblxuLy8gYFVSTFNlYXJjaFBhcmFtc2AgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jaW50ZXJmYWNlLXVybHNlYXJjaHBhcmFtc1xudmFyIFVSTFNlYXJjaFBhcmFtc0NvbnN0cnVjdG9yID0gZnVuY3Rpb24gVVJMU2VhcmNoUGFyYW1zKC8qIGluaXQgKi8pIHtcbiAgYW5JbnN0YW5jZSh0aGlzLCBVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGUpO1xuICB2YXIgaW5pdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkO1xuICB2YXIgc3RhdGUgPSBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIG5ldyBVUkxTZWFyY2hQYXJhbXNTdGF0ZShpbml0KSk7XG4gIGlmICghREVTQ1JJUFRPUlMpIHRoaXMuc2l6ZSA9IHN0YXRlLmVudHJpZXMubGVuZ3RoO1xufTtcblxudmFyIFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZSA9IFVSTFNlYXJjaFBhcmFtc0NvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuZGVmaW5lQnVpbHRJbnMoVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlLCB7XG4gIC8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmFwcGVuZGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybHNlYXJjaHBhcmFtcy1hcHBlbmRcbiAgYXBwZW5kOiBmdW5jdGlvbiBhcHBlbmQobmFtZSwgdmFsdWUpIHtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlKHRoaXMpO1xuICAgIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDIpO1xuICAgIHB1c2goc3RhdGUuZW50cmllcywgeyBrZXk6ICR0b1N0cmluZyhuYW1lKSwgdmFsdWU6ICR0b1N0cmluZyh2YWx1ZSkgfSk7XG4gICAgaWYgKCFERVNDUklQVE9SUykgdGhpcy5sZW5ndGgrKztcbiAgICBzdGF0ZS51cGRhdGVVUkwoKTtcbiAgfSxcbiAgLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuZGVsZXRlYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsc2VhcmNocGFyYW1zLWRlbGV0ZVxuICAnZGVsZXRlJzogZnVuY3Rpb24gKG5hbWUgLyogLCB2YWx1ZSAqLykge1xuICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsUGFyYW1zU3RhdGUodGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpO1xuICAgIHZhciBlbnRyaWVzID0gc3RhdGUuZW50cmllcztcbiAgICB2YXIga2V5ID0gJHRvU3RyaW5nKG5hbWUpO1xuICAgIHZhciAkdmFsdWUgPSBsZW5ndGggPCAyID8gdW5kZWZpbmVkIDogYXJndW1lbnRzWzFdO1xuICAgIHZhciB2YWx1ZSA9ICR2YWx1ZSA9PT0gdW5kZWZpbmVkID8gJHZhbHVlIDogJHRvU3RyaW5nKCR2YWx1ZSk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB3aGlsZSAoaW5kZXggPCBlbnRyaWVzLmxlbmd0aCkge1xuICAgICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgICBpZiAoZW50cnkua2V5ID09PSBrZXkgJiYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgZW50cnkudmFsdWUgPT09IHZhbHVlKSkge1xuICAgICAgICBzcGxpY2UoZW50cmllcywgaW5kZXgsIDEpO1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkgYnJlYWs7XG4gICAgICB9IGVsc2UgaW5kZXgrKztcbiAgICB9XG4gICAgaWYgKCFERVNDUklQVE9SUykgdGhpcy5zaXplID0gZW50cmllcy5sZW5ndGg7XG4gICAgc3RhdGUudXBkYXRlVVJMKCk7XG4gIH0sXG4gIC8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmdldGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybHNlYXJjaHBhcmFtcy1nZXRcbiAgZ2V0OiBmdW5jdGlvbiBnZXQobmFtZSkge1xuICAgIHZhciBlbnRyaWVzID0gZ2V0SW50ZXJuYWxQYXJhbXNTdGF0ZSh0aGlzKS5lbnRyaWVzO1xuICAgIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpO1xuICAgIHZhciBrZXkgPSAkdG9TdHJpbmcobmFtZSk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICBmb3IgKDsgaW5kZXggPCBlbnRyaWVzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgaWYgKGVudHJpZXNbaW5kZXhdLmtleSA9PT0ga2V5KSByZXR1cm4gZW50cmllc1tpbmRleF0udmFsdWU7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9LFxuICAvLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5nZXRBbGxgIG1ldGhvZFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmxzZWFyY2hwYXJhbXMtZ2V0YWxsXG4gIGdldEFsbDogZnVuY3Rpb24gZ2V0QWxsKG5hbWUpIHtcbiAgICB2YXIgZW50cmllcyA9IGdldEludGVybmFsUGFyYW1zU3RhdGUodGhpcykuZW50cmllcztcbiAgICB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChhcmd1bWVudHMubGVuZ3RoLCAxKTtcbiAgICB2YXIga2V5ID0gJHRvU3RyaW5nKG5hbWUpO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGZvciAoOyBpbmRleCA8IGVudHJpZXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBpZiAoZW50cmllc1tpbmRleF0ua2V5ID09PSBrZXkpIHB1c2gocmVzdWx0LCBlbnRyaWVzW2luZGV4XS52YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sXG4gIC8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmhhc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybHNlYXJjaHBhcmFtcy1oYXNcbiAgaGFzOiBmdW5jdGlvbiBoYXMobmFtZSAvKiAsIHZhbHVlICovKSB7XG4gICAgdmFyIGVudHJpZXMgPSBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlKHRoaXMpLmVudHJpZXM7XG4gICAgdmFyIGxlbmd0aCA9IHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpO1xuICAgIHZhciBrZXkgPSAkdG9TdHJpbmcobmFtZSk7XG4gICAgdmFyICR2YWx1ZSA9IGxlbmd0aCA8IDIgPyB1bmRlZmluZWQgOiBhcmd1bWVudHNbMV07XG4gICAgdmFyIHZhbHVlID0gJHZhbHVlID09PSB1bmRlZmluZWQgPyAkdmFsdWUgOiAkdG9TdHJpbmcoJHZhbHVlKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHdoaWxlIChpbmRleCA8IGVudHJpZXMubGVuZ3RoKSB7XG4gICAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4KytdO1xuICAgICAgaWYgKGVudHJ5LmtleSA9PT0ga2V5ICYmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGVudHJ5LnZhbHVlID09PSB2YWx1ZSkpIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG4gIC8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLnNldGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybHNlYXJjaHBhcmFtcy1zZXRcbiAgc2V0OiBmdW5jdGlvbiBzZXQobmFtZSwgdmFsdWUpIHtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlKHRoaXMpO1xuICAgIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGFyZ3VtZW50cy5sZW5ndGgsIDEpO1xuICAgIHZhciBlbnRyaWVzID0gc3RhdGUuZW50cmllcztcbiAgICB2YXIgZm91bmQgPSBmYWxzZTtcbiAgICB2YXIga2V5ID0gJHRvU3RyaW5nKG5hbWUpO1xuICAgIHZhciB2YWwgPSAkdG9TdHJpbmcodmFsdWUpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGVudHJ5O1xuICAgIGZvciAoOyBpbmRleCA8IGVudHJpZXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgICAgaWYgKGVudHJ5LmtleSA9PT0ga2V5KSB7XG4gICAgICAgIGlmIChmb3VuZCkgc3BsaWNlKGVudHJpZXMsIGluZGV4LS0sIDEpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgZW50cnkudmFsdWUgPSB2YWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFmb3VuZCkgcHVzaChlbnRyaWVzLCB7IGtleToga2V5LCB2YWx1ZTogdmFsIH0pO1xuICAgIGlmICghREVTQ1JJUFRPUlMpIHRoaXMuc2l6ZSA9IGVudHJpZXMubGVuZ3RoO1xuICAgIHN0YXRlLnVwZGF0ZVVSTCgpO1xuICB9LFxuICAvLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5zb3J0YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsc2VhcmNocGFyYW1zLXNvcnRcbiAgc29ydDogZnVuY3Rpb24gc29ydCgpIHtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlKHRoaXMpO1xuICAgIGFycmF5U29ydChzdGF0ZS5lbnRyaWVzLCBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGEua2V5ID4gYi5rZXkgPyAxIDogLTE7XG4gICAgfSk7XG4gICAgc3RhdGUudXBkYXRlVVJMKCk7XG4gIH0sXG4gIC8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZFxuICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHZhciBlbnRyaWVzID0gZ2V0SW50ZXJuYWxQYXJhbXNTdGF0ZSh0aGlzKS5lbnRyaWVzO1xuICAgIHZhciBib3VuZEZ1bmN0aW9uID0gYmluZChjYWxsYmFjaywgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGVudHJ5O1xuICAgIHdoaWxlIChpbmRleCA8IGVudHJpZXMubGVuZ3RoKSB7XG4gICAgICBlbnRyeSA9IGVudHJpZXNbaW5kZXgrK107XG4gICAgICBib3VuZEZ1bmN0aW9uKGVudHJ5LnZhbHVlLCBlbnRyeS5rZXksIHRoaXMpO1xuICAgIH1cbiAgfSxcbiAgLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUua2V5c2AgbWV0aG9kXG4gIGtleXM6IGZ1bmN0aW9uIGtleXMoKSB7XG4gICAgcmV0dXJuIG5ldyBVUkxTZWFyY2hQYXJhbXNJdGVyYXRvcih0aGlzLCAna2V5cycpO1xuICB9LFxuICAvLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS52YWx1ZXNgIG1ldGhvZFxuICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcygpIHtcbiAgICByZXR1cm4gbmV3IFVSTFNlYXJjaFBhcmFtc0l0ZXJhdG9yKHRoaXMsICd2YWx1ZXMnKTtcbiAgfSxcbiAgLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuZW50cmllc2AgbWV0aG9kXG4gIGVudHJpZXM6IGZ1bmN0aW9uIGVudHJpZXMoKSB7XG4gICAgcmV0dXJuIG5ldyBVUkxTZWFyY2hQYXJhbXNJdGVyYXRvcih0aGlzLCAnZW50cmllcycpO1xuICB9XG59LCB7IGVudW1lcmFibGU6IHRydWUgfSk7XG5cbi8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2RcbmRlZmluZUJ1aWx0SW4oVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlLCBJVEVSQVRPUiwgVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlLmVudHJpZXMsIHsgbmFtZTogJ2VudHJpZXMnIH0pO1xuXG4vLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3VybHNlYXJjaHBhcmFtcy1zdHJpbmdpZmljYXRpb24tYmVoYXZpb3JcbmRlZmluZUJ1aWx0SW4oVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIGdldEludGVybmFsUGFyYW1zU3RhdGUodGhpcykuc2VyaWFsaXplKCk7XG59LCB7IGVudW1lcmFibGU6IHRydWUgfSk7XG5cbi8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLnNpemVgIGdldHRlclxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy91cmwvcHVsbC83MzRcbmlmIChERVNDUklQVE9SUykgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZSwgJ3NpemUnLCB7XG4gIGdldDogZnVuY3Rpb24gc2l6ZSgpIHtcbiAgICByZXR1cm4gZ2V0SW50ZXJuYWxQYXJhbXNTdGF0ZSh0aGlzKS5lbnRyaWVzLmxlbmd0aDtcbiAgfSxcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBlbnVtZXJhYmxlOiB0cnVlXG59KTtcblxuc2V0VG9TdHJpbmdUYWcoVVJMU2VhcmNoUGFyYW1zQ29uc3RydWN0b3IsIFVSTF9TRUFSQ0hfUEFSQU1TKTtcblxuJCh7IGdsb2JhbDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIGZvcmNlZDogIVVTRV9OQVRJVkVfVVJMIH0sIHtcbiAgVVJMU2VhcmNoUGFyYW1zOiBVUkxTZWFyY2hQYXJhbXNDb25zdHJ1Y3RvclxufSk7XG5cbi8vIFdyYXAgYGZldGNoYCBhbmQgYFJlcXVlc3RgIGZvciBjb3JyZWN0IHdvcmsgd2l0aCBwb2x5ZmlsbGVkIGBVUkxTZWFyY2hQYXJhbXNgXG5pZiAoIVVTRV9OQVRJVkVfVVJMICYmIGlzQ2FsbGFibGUoSGVhZGVycykpIHtcbiAgdmFyIGhlYWRlcnNIYXMgPSB1bmN1cnJ5VGhpcyhIZWFkZXJzUHJvdG90eXBlLmhhcyk7XG4gIHZhciBoZWFkZXJzU2V0ID0gdW5jdXJyeVRoaXMoSGVhZGVyc1Byb3RvdHlwZS5zZXQpO1xuXG4gIHZhciB3cmFwUmVxdWVzdE9wdGlvbnMgPSBmdW5jdGlvbiAoaW5pdCkge1xuICAgIGlmIChpc09iamVjdChpbml0KSkge1xuICAgICAgdmFyIGJvZHkgPSBpbml0LmJvZHk7XG4gICAgICB2YXIgaGVhZGVycztcbiAgICAgIGlmIChjbGFzc29mKGJvZHkpID09PSBVUkxfU0VBUkNIX1BBUkFNUykge1xuICAgICAgICBoZWFkZXJzID0gaW5pdC5oZWFkZXJzID8gbmV3IEhlYWRlcnMoaW5pdC5oZWFkZXJzKSA6IG5ldyBIZWFkZXJzKCk7XG4gICAgICAgIGlmICghaGVhZGVyc0hhcyhoZWFkZXJzLCAnY29udGVudC10eXBlJykpIHtcbiAgICAgICAgICBoZWFkZXJzU2V0KGhlYWRlcnMsICdjb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3JlYXRlKGluaXQsIHtcbiAgICAgICAgICBib2R5OiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMCwgJHRvU3RyaW5nKGJvZHkpKSxcbiAgICAgICAgICBoZWFkZXJzOiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMCwgaGVhZGVycylcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSByZXR1cm4gaW5pdDtcbiAgfTtcblxuICBpZiAoaXNDYWxsYWJsZShuYXRpdmVGZXRjaCkpIHtcbiAgICAkKHsgZ2xvYmFsOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCBkb250Q2FsbEdldFNldDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgICAgIGZldGNoOiBmdW5jdGlvbiBmZXRjaChpbnB1dCAvKiAsIGluaXQgKi8pIHtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZUZldGNoKGlucHV0LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IHdyYXBSZXF1ZXN0T3B0aW9ucyhhcmd1bWVudHNbMV0pIDoge30pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKGlzQ2FsbGFibGUoTmF0aXZlUmVxdWVzdCkpIHtcbiAgICB2YXIgUmVxdWVzdENvbnN0cnVjdG9yID0gZnVuY3Rpb24gUmVxdWVzdChpbnB1dCAvKiAsIGluaXQgKi8pIHtcbiAgICAgIGFuSW5zdGFuY2UodGhpcywgUmVxdWVzdFByb3RvdHlwZSk7XG4gICAgICByZXR1cm4gbmV3IE5hdGl2ZVJlcXVlc3QoaW5wdXQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gd3JhcFJlcXVlc3RPcHRpb25zKGFyZ3VtZW50c1sxXSkgOiB7fSk7XG4gICAgfTtcblxuICAgIFJlcXVlc3RQcm90b3R5cGUuY29uc3RydWN0b3IgPSBSZXF1ZXN0Q29uc3RydWN0b3I7XG4gICAgUmVxdWVzdENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IFJlcXVlc3RQcm90b3R5cGU7XG5cbiAgICAkKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgZG9udENhbGxHZXRTZXQ6IHRydWUsIGZvcmNlZDogdHJ1ZSB9LCB7XG4gICAgICBSZXF1ZXN0OiBSZXF1ZXN0Q29uc3RydWN0b3JcbiAgICB9KTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgVVJMU2VhcmNoUGFyYW1zOiBVUkxTZWFyY2hQYXJhbXNDb25zdHJ1Y3RvcixcbiAgZ2V0U3RhdGU6IGdldEludGVybmFsUGFyYW1zU3RhdGVcbn07XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi51cmwtc2VhcmNoLXBhcmFtcy5jb25zdHJ1Y3Rvci5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLnVybC1zZWFyY2gtcGFyYW1zLmRlbGV0ZS5qcyI6KChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBkZWZpbmVCdWlsdEluID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbiAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi5qc1wiKTtcbnZhciB1bmN1cnJ5VGhpcyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMuanNcIik7XG52YXIgdG9TdHJpbmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvdG8tc3RyaW5nICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tc3RyaW5nLmpzXCIpO1xudmFyIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGggKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92YWxpZGF0ZS1hcmd1bWVudHMtbGVuZ3RoLmpzXCIpO1xuXG52YXIgJFVSTFNlYXJjaFBhcmFtcyA9IFVSTFNlYXJjaFBhcmFtcztcbnZhciBVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGUgPSAkVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZTtcbnZhciBhcHBlbmQgPSB1bmN1cnJ5VGhpcyhVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGUuYXBwZW5kKTtcbnZhciAkZGVsZXRlID0gdW5jdXJyeVRoaXMoVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlWydkZWxldGUnXSk7XG52YXIgZm9yRWFjaCA9IHVuY3VycnlUaGlzKFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZS5mb3JFYWNoKTtcbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG52YXIgcGFyYW1zID0gbmV3ICRVUkxTZWFyY2hQYXJhbXMoJ2E9MSZhPTImYj0zJyk7XG5cbnBhcmFtc1snZGVsZXRlJ10oJ2EnLCAxKTtcbi8vIGB1bmRlZmluZWRgIGNhc2UgaXMgYSBDaHJvbWl1bSAxMTcgYnVnXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0xNDIyMlxucGFyYW1zWydkZWxldGUnXSgnYicsIHVuZGVmaW5lZCk7XG5cbmlmIChwYXJhbXMgKyAnJyAhPT0gJ2E9MicpIHtcbiAgZGVmaW5lQnVpbHRJbihVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGUsICdkZWxldGUnLCBmdW5jdGlvbiAobmFtZSAvKiAsIHZhbHVlICovKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyICR2YWx1ZSA9IGxlbmd0aCA8IDIgPyB1bmRlZmluZWQgOiBhcmd1bWVudHNbMV07XG4gICAgaWYgKGxlbmd0aCAmJiAkdmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuICRkZWxldGUodGhpcywgbmFtZSk7XG4gICAgdmFyIGVudHJpZXMgPSBbXTtcbiAgICBmb3JFYWNoKHRoaXMsIGZ1bmN0aW9uICh2LCBrKSB7IC8vIGFsc28gdmFsaWRhdGVzIGB0aGlzYFxuICAgICAgcHVzaChlbnRyaWVzLCB7IGtleTogaywgdmFsdWU6IHYgfSk7XG4gICAgfSk7XG4gICAgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgobGVuZ3RoLCAxKTtcbiAgICB2YXIga2V5ID0gdG9TdHJpbmcobmFtZSk7XG4gICAgdmFyIHZhbHVlID0gdG9TdHJpbmcoJHZhbHVlKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBkaW5kZXggPSAwO1xuICAgIHZhciBmb3VuZCA9IGZhbHNlO1xuICAgIHZhciBlbnRyaWVzTGVuZ3RoID0gZW50cmllcy5sZW5ndGg7XG4gICAgdmFyIGVudHJ5O1xuICAgIHdoaWxlIChpbmRleCA8IGVudHJpZXNMZW5ndGgpIHtcbiAgICAgIGVudHJ5ID0gZW50cmllc1tpbmRleCsrXTtcbiAgICAgIGlmIChmb3VuZCB8fCBlbnRyeS5rZXkgPT09IGtleSkge1xuICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICRkZWxldGUodGhpcywgZW50cnkua2V5KTtcbiAgICAgIH0gZWxzZSBkaW5kZXgrKztcbiAgICB9XG4gICAgd2hpbGUgKGRpbmRleCA8IGVudHJpZXNMZW5ndGgpIHtcbiAgICAgIGVudHJ5ID0gZW50cmllc1tkaW5kZXgrK107XG4gICAgICBpZiAoIShlbnRyeS5rZXkgPT09IGtleSAmJiBlbnRyeS52YWx1ZSA9PT0gdmFsdWUpKSBhcHBlbmQodGhpcywgZW50cnkua2V5LCBlbnRyeS52YWx1ZSk7XG4gICAgfVxuICB9LCB7IGVudW1lcmFibGU6IHRydWUsIHVuc2FmZTogdHJ1ZSB9KTtcbn1cblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLnVybC1zZWFyY2gtcGFyYW1zLmRlbGV0ZS5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLnVybC1zZWFyY2gtcGFyYW1zLmhhcy5qcyI6KChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbnZhciBkZWZpbmVCdWlsdEluID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbiAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi5qc1wiKTtcbnZhciB1bmN1cnJ5VGhpcyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMuanNcIik7XG52YXIgdG9TdHJpbmcgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvdG8tc3RyaW5nICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tc3RyaW5nLmpzXCIpO1xudmFyIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGggKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92YWxpZGF0ZS1hcmd1bWVudHMtbGVuZ3RoLmpzXCIpO1xuXG52YXIgJFVSTFNlYXJjaFBhcmFtcyA9IFVSTFNlYXJjaFBhcmFtcztcbnZhciBVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGUgPSAkVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZTtcbnZhciBnZXRBbGwgPSB1bmN1cnJ5VGhpcyhVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGUuZ2V0QWxsKTtcbnZhciAkaGFzID0gdW5jdXJyeVRoaXMoVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlLmhhcyk7XG52YXIgcGFyYW1zID0gbmV3ICRVUkxTZWFyY2hQYXJhbXMoJ2E9MScpO1xuXG4vLyBgdW5kZWZpbmVkYCBjYXNlIGlzIGEgQ2hyb21pdW0gMTE3IGJ1Z1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MTQyMjJcbmlmIChwYXJhbXMuaGFzKCdhJywgMikgfHwgIXBhcmFtcy5oYXMoJ2EnLCB1bmRlZmluZWQpKSB7XG4gIGRlZmluZUJ1aWx0SW4oVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlLCAnaGFzJywgZnVuY3Rpb24gaGFzKG5hbWUgLyogLCB2YWx1ZSAqLykge1xuICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciAkdmFsdWUgPSBsZW5ndGggPCAyID8gdW5kZWZpbmVkIDogYXJndW1lbnRzWzFdO1xuICAgIGlmIChsZW5ndGggJiYgJHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiAkaGFzKHRoaXMsIG5hbWUpO1xuICAgIHZhciB2YWx1ZXMgPSBnZXRBbGwodGhpcywgbmFtZSk7IC8vIGFsc28gdmFsaWRhdGVzIGB0aGlzYFxuICAgIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoKGxlbmd0aCwgMSk7XG4gICAgdmFyIHZhbHVlID0gdG9TdHJpbmcoJHZhbHVlKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHdoaWxlIChpbmRleCA8IHZhbHVlcy5sZW5ndGgpIHtcbiAgICAgIGlmICh2YWx1ZXNbaW5kZXgrK10gPT09IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICB9IHJldHVybiBmYWxzZTtcbiAgfSwgeyBlbnVtZXJhYmxlOiB0cnVlLCB1bnNhZmU6IHRydWUgfSk7XG59XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi51cmwtc2VhcmNoLXBhcmFtcy5oYXMuanM/Iil9KSwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi51cmwtc2VhcmNoLXBhcmFtcy5qcyI6KChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbi8vIFRPRE86IFJlbW92ZSB0aGlzIG1vZHVsZSBmcm9tIGBjb3JlLWpzQDRgIHNpbmNlIGl0J3MgcmVwbGFjZWQgdG8gbW9kdWxlIGJlbG93XG5fX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9tb2R1bGVzL3dlYi51cmwtc2VhcmNoLXBhcmFtcy5jb25zdHJ1Y3RvciAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIudXJsLXNlYXJjaC1wYXJhbXMuY29uc3RydWN0b3IuanNcIik7XG5cblxuLy8jIHNvdXJjZVVSTD13ZWJwYWNrOi8vYmFiZWwvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi51cmwtc2VhcmNoLXBhcmFtcy5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLnVybC1zZWFyY2gtcGFyYW1zLnNpemUuanMiOigoX191bnVzZWRfd2VicGFja19tb2R1bGUsX191bnVzZWRfd2VicGFja19leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pPT57ZXZhbCgiXG52YXIgREVTQ1JJUFRPUlMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZXNjcmlwdG9ycy5qc1wiKTtcbnZhciB1bmN1cnJ5VGhpcyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMuanNcIik7XG52YXIgZGVmaW5lQnVpbHRJbkFjY2Vzc29yID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3NvciAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi1hY2Nlc3Nvci5qc1wiKTtcblxudmFyIFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZSA9IFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGU7XG52YXIgZm9yRWFjaCA9IHVuY3VycnlUaGlzKFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZS5mb3JFYWNoKTtcblxuLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuc2l6ZWAgZ2V0dGVyXG4vLyBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL3VybC9wdWxsLzczNFxuaWYgKERFU0NSSVBUT1JTICYmICEoJ3NpemUnIGluIFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZSkpIHtcbiAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiBzaXplKCkge1xuICAgICAgdmFyIGNvdW50ID0gMDtcbiAgICAgIGZvckVhY2godGhpcywgZnVuY3Rpb24gKCkgeyBjb3VudCsrOyB9KTtcbiAgICAgIHJldHVybiBjb3VudDtcbiAgICB9LFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlXG4gIH0pO1xufVxuXG5cbi8vIyBzb3VyY2VVUkw9d2VicGFjazovL2JhYmVsLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIudXJsLXNlYXJjaC1wYXJhbXMuc2l6ZS5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLnVybC5jb25zdHJ1Y3Rvci5qcyI6KChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbi8vIFRPRE86IGluIGNvcmUtanNANCwgbW92ZSAvbW9kdWxlcy8gZGVwZW5kZW5jaWVzIHRvIHB1YmxpYyBlbnRyaWVzIGZvciBiZXR0ZXIgb3B0aW1pemF0aW9uIGJ5IHRvb2xzIGxpa2UgYHByZXNldC1lbnZgXG5fX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9tb2R1bGVzL2VzLnN0cmluZy5pdGVyYXRvciAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3IuanNcIik7XG52YXIgJCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9leHBvcnQgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9leHBvcnQuanNcIik7XG52YXIgREVTQ1JJUFRPUlMgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZXNjcmlwdG9ycy5qc1wiKTtcbnZhciBVU0VfTkFUSVZFX1VSTCA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy91cmwtY29uc3RydWN0b3ItZGV0ZWN0aW9uICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdXJsLWNvbnN0cnVjdG9yLWRldGVjdGlvbi5qc1wiKTtcbnZhciBnbG9iYWwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZ2xvYmFsICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2xvYmFsLmpzXCIpO1xudmFyIGJpbmQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0ICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0LmpzXCIpO1xudmFyIHVuY3VycnlUaGlzID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcy5qc1wiKTtcbnZhciBkZWZpbmVCdWlsdEluID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbiAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbi5qc1wiKTtcbnZhciBkZWZpbmVCdWlsdEluQWNjZXNzb3IgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLWFjY2Vzc29yLmpzXCIpO1xudmFyIGFuSW5zdGFuY2UgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hbi1pbnN0YW5jZS5qc1wiKTtcbnZhciBoYXNPd24gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkuanNcIik7XG52YXIgYXNzaWduID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL29iamVjdC1hc3NpZ24gKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtYXNzaWduLmpzXCIpO1xudmFyIGFycmF5RnJvbSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9hcnJheS1mcm9tICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktZnJvbS5qc1wiKTtcbnZhciBhcnJheVNsaWNlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlLXNpbXBsZSAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LXNsaWNlLXNpbXBsZS5qc1wiKTtcbnZhciBjb2RlQXQgPSAoX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3N0cmluZy1tdWx0aWJ5dGUgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlLmpzXCIpLmNvZGVBdCk7XG52YXIgdG9BU0NJSSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9zdHJpbmctcHVueWNvZGUtdG8tYXNjaWkgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctcHVueWNvZGUtdG8tYXNjaWkuanNcIik7XG52YXIgJHRvU3RyaW5nID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3RvLXN0cmluZyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXN0cmluZy5qc1wiKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZyAqLyBcIi4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnLmpzXCIpO1xudmFyIHZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL3ZhbGlkYXRlLWFyZ3VtZW50cy1sZW5ndGggKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92YWxpZGF0ZS1hcmd1bWVudHMtbGVuZ3RoLmpzXCIpO1xudmFyIFVSTFNlYXJjaFBhcmFtc01vZHVsZSA9IF9fd2VicGFja19yZXF1aXJlX18oLyohIC4uL21vZHVsZXMvd2ViLnVybC1zZWFyY2gtcGFyYW1zLmNvbnN0cnVjdG9yICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi51cmwtc2VhcmNoLXBhcmFtcy5jb25zdHJ1Y3Rvci5qc1wiKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gX193ZWJwYWNrX3JlcXVpcmVfXygvKiEgLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlICovIFwiLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUuanNcIik7XG5cbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgZ2V0SW50ZXJuYWxVUkxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKCdVUkwnKTtcbnZhciBVUkxTZWFyY2hQYXJhbXMgPSBVUkxTZWFyY2hQYXJhbXNNb2R1bGUuVVJMU2VhcmNoUGFyYW1zO1xudmFyIGdldEludGVybmFsU2VhcmNoUGFyYW1zU3RhdGUgPSBVUkxTZWFyY2hQYXJhbXNNb2R1bGUuZ2V0U3RhdGU7XG5cbnZhciBOYXRpdmVVUkwgPSBnbG9iYWwuVVJMO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgcGFyc2VJbnQgPSBnbG9iYWwucGFyc2VJbnQ7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIHBvdyA9IE1hdGgucG93O1xudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgZXhlYyA9IHVuY3VycnlUaGlzKC8uLy5leGVjKTtcbnZhciBqb2luID0gdW5jdXJyeVRoaXMoW10uam9pbik7XG52YXIgbnVtYmVyVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcygxLjAudG9TdHJpbmcpO1xudmFyIHBvcCA9IHVuY3VycnlUaGlzKFtdLnBvcCk7XG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciBzaGlmdCA9IHVuY3VycnlUaGlzKFtdLnNoaWZ0KTtcbnZhciBzcGxpdCA9IHVuY3VycnlUaGlzKCcnLnNwbGl0KTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcbnZhciB0b0xvd2VyQ2FzZSA9IHVuY3VycnlUaGlzKCcnLnRvTG93ZXJDYXNlKTtcbnZhciB1bnNoaWZ0ID0gdW5jdXJyeVRoaXMoW10udW5zaGlmdCk7XG5cbnZhciBJTlZBTElEX0FVVEhPUklUWSA9ICdJbnZhbGlkIGF1dGhvcml0eSc7XG52YXIgSU5WQUxJRF9TQ0hFTUUgPSAnSW52YWxpZCBzY2hlbWUnO1xudmFyIElOVkFMSURfSE9TVCA9ICdJbnZhbGlkIGhvc3QnO1xudmFyIElOVkFMSURfUE9SVCA9ICdJbnZhbGlkIHBvcnQnO1xuXG52YXIgQUxQSEEgPSAvW2Etel0vaTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvbm8tb2JzY3VyZS1yYW5nZSAtLSBzYWZlXG52YXIgQUxQSEFOVU1FUklDID0gL1tcXGQrLS5hLXpdL2k7XG52YXIgRElHSVQgPSAvXFxkLztcbnZhciBIRVhfU1RBUlQgPSAvXjB4L2k7XG52YXIgT0NUID0gL15bMC03XSskLztcbnZhciBERUMgPSAvXlxcZCskLztcbnZhciBIRVggPSAvXltcXGRhLWZdKyQvaTtcbi8qIGVzbGludC1kaXNhYmxlIHJlZ2V4cC9uby1jb250cm9sLWNoYXJhY3RlciAtLSBzYWZlICovXG52YXIgRk9SQklEREVOX0hPU1RfQ09ERV9QT0lOVCA9IC9bXFwwXFx0XFxuXFxyICMlLzo8Pj9AW1xcXFxcXF1efF0vO1xudmFyIEZPUkJJRERFTl9IT1NUX0NPREVfUE9JTlRfRVhDTFVESU5HX1BFUkNFTlQgPSAvW1xcMFxcdFxcblxcciAjLzo8Pj9AW1xcXFxcXF1efF0vO1xudmFyIExFQURJTkdfQzBfQ09OVFJPTF9PUl9TUEFDRSA9IC9eW1xcdTAwMDAtXFx1MDAyMF0rLztcbnZhciBUUkFJTElOR19DMF9DT05UUk9MX09SX1NQQUNFID0gLyhefFteXFx1MDAwMC1cXHUwMDIwXSlbXFx1MDAwMC1cXHUwMDIwXSskLztcbnZhciBUQUJfQU5EX05FV19MSU5FID0gL1tcXHRcXG5cXHJdL2c7XG4vKiBlc2xpbnQtZW5hYmxlIHJlZ2V4cC9uby1jb250cm9sLWNoYXJhY3RlciAtLSBzYWZlICovXG52YXIgRU9GO1xuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2lwdjQtbnVtYmVyLXBhcnNlclxudmFyIHBhcnNlSVB2NCA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICB2YXIgcGFydHMgPSBzcGxpdChpbnB1dCwgJy4nKTtcbiAgdmFyIHBhcnRzTGVuZ3RoLCBudW1iZXJzLCBpbmRleCwgcGFydCwgcmFkaXgsIG51bWJlciwgaXB2NDtcbiAgaWYgKHBhcnRzLmxlbmd0aCAmJiBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSA9PSAnJykge1xuICAgIHBhcnRzLmxlbmd0aC0tO1xuICB9XG4gIHBhcnRzTGVuZ3RoID0gcGFydHMubGVuZ3RoO1xuICBpZiAocGFydHNMZW5ndGggPiA0KSByZXR1cm4gaW5wdXQ7XG4gIG51bWJlcnMgPSBbXTtcbiAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgcGFydHNMZW5ndGg7IGluZGV4KyspIHtcbiAgICBwYXJ0ID0gcGFydHNbaW5kZXhdO1xuICAgIGlmIChwYXJ0ID09ICcnKSByZXR1cm4gaW5wdXQ7XG4gICAgcmFkaXggPSAxMDtcbiAgICBpZiAocGFydC5sZW5ndGggPiAxICYmIGNoYXJBdChwYXJ0LCAwKSA9PSAnMCcpIHtcbiAgICAgIHJhZGl4ID0gZXhlYyhIRVhfU1RBUlQsIHBhcnQpID8gMTYgOiA4O1xuICAgICAgcGFydCA9IHN0cmluZ1NsaWNlKHBhcnQsIHJhZGl4ID09IDggPyAxIDogMik7XG4gICAgfVxuICAgIGlmIChwYXJ0ID09PSAnJykge1xuICAgICAgbnVtYmVyID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFleGVjKHJhZGl4ID09IDEwID8gREVDIDogcmFkaXggPT0gOCA/IE9DVCA6IEhFWCwgcGFydCkpIHJldHVybiBpbnB1dDtcbiAgICAgIG51bWJlciA9IHBhcnNlSW50KHBhcnQsIHJhZGl4KTtcbiAgICB9XG4gICAgcHVzaChudW1iZXJzLCBudW1iZXIpO1xuICB9XG4gIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHBhcnRzTGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgbnVtYmVyID0gbnVtYmVyc1tpbmRleF07XG4gICAgaWYgKGluZGV4ID09IHBhcnRzTGVuZ3RoIC0gMSkge1xuICAgICAgaWYgKG51bWJlciA+PSBwb3coMjU2LCA1IC0gcGFydHNMZW5ndGgpKSByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2UgaWYgKG51bWJlciA+IDI1NSkgcmV0dXJuIG51bGw7XG4gIH1cbiAgaXB2NCA9IHBvcChudW1iZXJzKTtcbiAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgbnVtYmVycy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBpcHY0ICs9IG51bWJlcnNbaW5kZXhdICogcG93KDI1NiwgMyAtIGluZGV4KTtcbiAgfVxuICByZXR1cm4gaXB2NDtcbn07XG5cbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1pcHY2LXBhcnNlclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1zdGF0ZW1lbnRzIC0tIFRPRE9cbnZhciBwYXJzZUlQdjYgPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgdmFyIGFkZHJlc3MgPSBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF07XG4gIHZhciBwaWVjZUluZGV4ID0gMDtcbiAgdmFyIGNvbXByZXNzID0gbnVsbDtcbiAgdmFyIHBvaW50ZXIgPSAwO1xuICB2YXIgdmFsdWUsIGxlbmd0aCwgbnVtYmVyc1NlZW4sIGlwdjRQaWVjZSwgbnVtYmVyLCBzd2Fwcywgc3dhcDtcblxuICB2YXIgY2hyID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBjaGFyQXQoaW5wdXQsIHBvaW50ZXIpO1xuICB9O1xuXG4gIGlmIChjaHIoKSA9PSAnOicpIHtcbiAgICBpZiAoY2hhckF0KGlucHV0LCAxKSAhPSAnOicpIHJldHVybjtcbiAgICBwb2ludGVyICs9IDI7XG4gICAgcGllY2VJbmRleCsrO1xuICAgIGNvbXByZXNzID0gcGllY2VJbmRleDtcbiAgfVxuICB3aGlsZSAoY2hyKCkpIHtcbiAgICBpZiAocGllY2VJbmRleCA9PSA4KSByZXR1cm47XG4gICAgaWYgKGNocigpID09ICc6Jykge1xuICAgICAgaWYgKGNvbXByZXNzICE9PSBudWxsKSByZXR1cm47XG4gICAgICBwb2ludGVyKys7XG4gICAgICBwaWVjZUluZGV4Kys7XG4gICAgICBjb21wcmVzcyA9IHBpZWNlSW5kZXg7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdmFsdWUgPSBsZW5ndGggPSAwO1xuICAgIHdoaWxlIChsZW5ndGggPCA0ICYmIGV4ZWMoSEVYLCBjaHIoKSkpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUgKiAxNiArIHBhcnNlSW50KGNocigpLCAxNik7XG4gICAgICBwb2ludGVyKys7XG4gICAgICBsZW5ndGgrKztcbiAgICB9XG4gICAgaWYgKGNocigpID09ICcuJykge1xuICAgICAgaWYgKGxlbmd0aCA9PSAwKSByZXR1cm47XG4gICAgICBwb2ludGVyIC09IGxlbmd0aDtcbiAgICAgIGlmIChwaWVjZUluZGV4ID4gNikgcmV0dXJuO1xuICAgICAgbnVtYmVyc1NlZW4gPSAwO1xuICAgICAgd2hpbGUgKGNocigpKSB7XG4gICAgICAgIGlwdjRQaWVjZSA9IG51bGw7XG4gICAgICAgIGlmIChudW1iZXJzU2VlbiA+IDApIHtcbiAgICAgICAgICBpZiAoY2hyKCkgPT0gJy4nICYmIG51bWJlcnNTZWVuIDwgNCkgcG9pbnRlcisrO1xuICAgICAgICAgIGVsc2UgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZXhlYyhESUdJVCwgY2hyKCkpKSByZXR1cm47XG4gICAgICAgIHdoaWxlIChleGVjKERJR0lULCBjaHIoKSkpIHtcbiAgICAgICAgICBudW1iZXIgPSBwYXJzZUludChjaHIoKSwgMTApO1xuICAgICAgICAgIGlmIChpcHY0UGllY2UgPT09IG51bGwpIGlwdjRQaWVjZSA9IG51bWJlcjtcbiAgICAgICAgICBlbHNlIGlmIChpcHY0UGllY2UgPT0gMCkgcmV0dXJuO1xuICAgICAgICAgIGVsc2UgaXB2NFBpZWNlID0gaXB2NFBpZWNlICogMTAgKyBudW1iZXI7XG4gICAgICAgICAgaWYgKGlwdjRQaWVjZSA+IDI1NSkgcmV0dXJuO1xuICAgICAgICAgIHBvaW50ZXIrKztcbiAgICAgICAgfVxuICAgICAgICBhZGRyZXNzW3BpZWNlSW5kZXhdID0gYWRkcmVzc1twaWVjZUluZGV4XSAqIDI1NiArIGlwdjRQaWVjZTtcbiAgICAgICAgbnVtYmVyc1NlZW4rKztcbiAgICAgICAgaWYgKG51bWJlcnNTZWVuID09IDIgfHwgbnVtYmVyc1NlZW4gPT0gNCkgcGllY2VJbmRleCsrO1xuICAgICAgfVxuICAgICAgaWYgKG51bWJlcnNTZWVuICE9IDQpIHJldHVybjtcbiAgICAgIGJyZWFrO1xuICAgIH0gZWxzZSBpZiAoY2hyKCkgPT0gJzonKSB7XG4gICAgICBwb2ludGVyKys7XG4gICAgICBpZiAoIWNocigpKSByZXR1cm47XG4gICAgfSBlbHNlIGlmIChjaHIoKSkgcmV0dXJuO1xuICAgIGFkZHJlc3NbcGllY2VJbmRleCsrXSA9IHZhbHVlO1xuICB9XG4gIGlmIChjb21wcmVzcyAhPT0gbnVsbCkge1xuICAgIHN3YXBzID0gcGllY2VJbmRleCAtIGNvbXByZXNzO1xuICAgIHBpZWNlSW5kZXggPSA3O1xuICAgIHdoaWxlIChwaWVjZUluZGV4ICE9IDAgJiYgc3dhcHMgPiAwKSB7XG4gICAgICBzd2FwID0gYWRkcmVzc1twaWVjZUluZGV4XTtcbiAgICAgIGFkZHJlc3NbcGllY2VJbmRleC0tXSA9IGFkZHJlc3NbY29tcHJlc3MgKyBzd2FwcyAtIDFdO1xuICAgICAgYWRkcmVzc1tjb21wcmVzcyArIC0tc3dhcHNdID0gc3dhcDtcbiAgICB9XG4gIH0gZWxzZSBpZiAocGllY2VJbmRleCAhPSA4KSByZXR1cm47XG4gIHJldHVybiBhZGRyZXNzO1xufTtcblxudmFyIGZpbmRMb25nZXN0WmVyb1NlcXVlbmNlID0gZnVuY3Rpb24gKGlwdjYpIHtcbiAgdmFyIG1heEluZGV4ID0gbnVsbDtcbiAgdmFyIG1heExlbmd0aCA9IDE7XG4gIHZhciBjdXJyU3RhcnQgPSBudWxsO1xuICB2YXIgY3Vyckxlbmd0aCA9IDA7XG4gIHZhciBpbmRleCA9IDA7XG4gIGZvciAoOyBpbmRleCA8IDg7IGluZGV4KyspIHtcbiAgICBpZiAoaXB2NltpbmRleF0gIT09IDApIHtcbiAgICAgIGlmIChjdXJyTGVuZ3RoID4gbWF4TGVuZ3RoKSB7XG4gICAgICAgIG1heEluZGV4ID0gY3VyclN0YXJ0O1xuICAgICAgICBtYXhMZW5ndGggPSBjdXJyTGVuZ3RoO1xuICAgICAgfVxuICAgICAgY3VyclN0YXJ0ID0gbnVsbDtcbiAgICAgIGN1cnJMZW5ndGggPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY3VyclN0YXJ0ID09PSBudWxsKSBjdXJyU3RhcnQgPSBpbmRleDtcbiAgICAgICsrY3Vyckxlbmd0aDtcbiAgICB9XG4gIH1cbiAgaWYgKGN1cnJMZW5ndGggPiBtYXhMZW5ndGgpIHtcbiAgICBtYXhJbmRleCA9IGN1cnJTdGFydDtcbiAgICBtYXhMZW5ndGggPSBjdXJyTGVuZ3RoO1xuICB9XG4gIHJldHVybiBtYXhJbmRleDtcbn07XG5cbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jaG9zdC1zZXJpYWxpemluZ1xudmFyIHNlcmlhbGl6ZUhvc3QgPSBmdW5jdGlvbiAoaG9zdCkge1xuICB2YXIgcmVzdWx0LCBpbmRleCwgY29tcHJlc3MsIGlnbm9yZTA7XG4gIC8vIGlwdjRcbiAgaWYgKHR5cGVvZiBob3N0ID09ICdudW1iZXInKSB7XG4gICAgcmVzdWx0ID0gW107XG4gICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgNDsgaW5kZXgrKykge1xuICAgICAgdW5zaGlmdChyZXN1bHQsIGhvc3QgJSAyNTYpO1xuICAgICAgaG9zdCA9IGZsb29yKGhvc3QgLyAyNTYpO1xuICAgIH0gcmV0dXJuIGpvaW4ocmVzdWx0LCAnLicpO1xuICAvLyBpcHY2XG4gIH0gZWxzZSBpZiAodHlwZW9mIGhvc3QgPT0gJ29iamVjdCcpIHtcbiAgICByZXN1bHQgPSAnJztcbiAgICBjb21wcmVzcyA9IGZpbmRMb25nZXN0WmVyb1NlcXVlbmNlKGhvc3QpO1xuICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IDg7IGluZGV4KyspIHtcbiAgICAgIGlmIChpZ25vcmUwICYmIGhvc3RbaW5kZXhdID09PSAwKSBjb250aW51ZTtcbiAgICAgIGlmIChpZ25vcmUwKSBpZ25vcmUwID0gZmFsc2U7XG4gICAgICBpZiAoY29tcHJlc3MgPT09IGluZGV4KSB7XG4gICAgICAgIHJlc3VsdCArPSBpbmRleCA/ICc6JyA6ICc6Oic7XG4gICAgICAgIGlnbm9yZTAgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ICs9IG51bWJlclRvU3RyaW5nKGhvc3RbaW5kZXhdLCAxNik7XG4gICAgICAgIGlmIChpbmRleCA8IDcpIHJlc3VsdCArPSAnOic7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiAnWycgKyByZXN1bHQgKyAnXSc7XG4gIH0gcmV0dXJuIGhvc3Q7XG59O1xuXG52YXIgQzBDb250cm9sUGVyY2VudEVuY29kZVNldCA9IHt9O1xudmFyIGZyYWdtZW50UGVyY2VudEVuY29kZVNldCA9IGFzc2lnbih7fSwgQzBDb250cm9sUGVyY2VudEVuY29kZVNldCwge1xuICAnICc6IDEsICdcIic6IDEsICc8JzogMSwgJz4nOiAxLCAnYCc6IDFcbn0pO1xudmFyIHBhdGhQZXJjZW50RW5jb2RlU2V0ID0gYXNzaWduKHt9LCBmcmFnbWVudFBlcmNlbnRFbmNvZGVTZXQsIHtcbiAgJyMnOiAxLCAnPyc6IDEsICd7JzogMSwgJ30nOiAxXG59KTtcbnZhciB1c2VyaW5mb1BlcmNlbnRFbmNvZGVTZXQgPSBhc3NpZ24oe30sIHBhdGhQZXJjZW50RW5jb2RlU2V0LCB7XG4gICcvJzogMSwgJzonOiAxLCAnOyc6IDEsICc9JzogMSwgJ0AnOiAxLCAnWyc6IDEsICdcXFxcJzogMSwgJ10nOiAxLCAnXic6IDEsICd8JzogMVxufSk7XG5cbnZhciBwZXJjZW50RW5jb2RlID0gZnVuY3Rpb24gKGNociwgc2V0KSB7XG4gIHZhciBjb2RlID0gY29kZUF0KGNociwgMCk7XG4gIHJldHVybiBjb2RlID4gMHgyMCAmJiBjb2RlIDwgMHg3RiAmJiAhaGFzT3duKHNldCwgY2hyKSA/IGNociA6IGVuY29kZVVSSUNvbXBvbmVudChjaHIpO1xufTtcblxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNzcGVjaWFsLXNjaGVtZVxudmFyIHNwZWNpYWxTY2hlbWVzID0ge1xuICBmdHA6IDIxLFxuICBmaWxlOiBudWxsLFxuICBodHRwOiA4MCxcbiAgaHR0cHM6IDQ0MyxcbiAgd3M6IDgwLFxuICB3c3M6IDQ0M1xufTtcblxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN3aW5kb3dzLWRyaXZlLWxldHRlclxudmFyIGlzV2luZG93c0RyaXZlTGV0dGVyID0gZnVuY3Rpb24gKHN0cmluZywgbm9ybWFsaXplZCkge1xuICB2YXIgc2Vjb25kO1xuICByZXR1cm4gc3RyaW5nLmxlbmd0aCA9PSAyICYmIGV4ZWMoQUxQSEEsIGNoYXJBdChzdHJpbmcsIDApKVxuICAgICYmICgoc2Vjb25kID0gY2hhckF0KHN0cmluZywgMSkpID09ICc6JyB8fCAoIW5vcm1hbGl6ZWQgJiYgc2Vjb25kID09ICd8JykpO1xufTtcblxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNzdGFydC13aXRoLWEtd2luZG93cy1kcml2ZS1sZXR0ZXJcbnZhciBzdGFydHNXaXRoV2luZG93c0RyaXZlTGV0dGVyID0gZnVuY3Rpb24gKHN0cmluZykge1xuICB2YXIgdGhpcmQ7XG4gIHJldHVybiBzdHJpbmcubGVuZ3RoID4gMSAmJiBpc1dpbmRvd3NEcml2ZUxldHRlcihzdHJpbmdTbGljZShzdHJpbmcsIDAsIDIpKSAmJiAoXG4gICAgc3RyaW5nLmxlbmd0aCA9PSAyIHx8XG4gICAgKCh0aGlyZCA9IGNoYXJBdChzdHJpbmcsIDIpKSA9PT0gJy8nIHx8IHRoaXJkID09PSAnXFxcXCcgfHwgdGhpcmQgPT09ICc/JyB8fCB0aGlyZCA9PT0gJyMnKVxuICApO1xufTtcblxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNzaW5nbGUtZG90LXBhdGgtc2VnbWVudFxudmFyIGlzU2luZ2xlRG90ID0gZnVuY3Rpb24gKHNlZ21lbnQpIHtcbiAgcmV0dXJuIHNlZ21lbnQgPT09ICcuJyB8fCB0b0xvd2VyQ2FzZShzZWdtZW50KSA9PT0gJyUyZSc7XG59O1xuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvdWJsZS1kb3QtcGF0aC1zZWdtZW50XG52YXIgaXNEb3VibGVEb3QgPSBmdW5jdGlvbiAoc2VnbWVudCkge1xuICBzZWdtZW50ID0gdG9Mb3dlckNhc2Uoc2VnbWVudCk7XG4gIHJldHVybiBzZWdtZW50ID09PSAnLi4nIHx8IHNlZ21lbnQgPT09ICclMmUuJyB8fCBzZWdtZW50ID09PSAnLiUyZScgfHwgc2VnbWVudCA9PT0gJyUyZSUyZSc7XG59O1xuXG4vLyBTdGF0ZXM6XG52YXIgU0NIRU1FX1NUQVJUID0ge307XG52YXIgU0NIRU1FID0ge307XG52YXIgTk9fU0NIRU1FID0ge307XG52YXIgU1BFQ0lBTF9SRUxBVElWRV9PUl9BVVRIT1JJVFkgPSB7fTtcbnZhciBQQVRIX09SX0FVVEhPUklUWSA9IHt9O1xudmFyIFJFTEFUSVZFID0ge307XG52YXIgUkVMQVRJVkVfU0xBU0ggPSB7fTtcbnZhciBTUEVDSUFMX0FVVEhPUklUWV9TTEFTSEVTID0ge307XG52YXIgU1BFQ0lBTF9BVVRIT1JJVFlfSUdOT1JFX1NMQVNIRVMgPSB7fTtcbnZhciBBVVRIT1JJVFkgPSB7fTtcbnZhciBIT1NUID0ge307XG52YXIgSE9TVE5BTUUgPSB7fTtcbnZhciBQT1JUID0ge307XG52YXIgRklMRSA9IHt9O1xudmFyIEZJTEVfU0xBU0ggPSB7fTtcbnZhciBGSUxFX0hPU1QgPSB7fTtcbnZhciBQQVRIX1NUQVJUID0ge307XG52YXIgUEFUSCA9IHt9O1xudmFyIENBTk5PVF9CRV9BX0JBU0VfVVJMX1BBVEggPSB7fTtcbnZhciBRVUVSWSA9IHt9O1xudmFyIEZSQUdNRU5UID0ge307XG5cbnZhciBVUkxTdGF0ZSA9IGZ1bmN0aW9uICh1cmwsIGlzQmFzZSwgYmFzZSkge1xuICB2YXIgdXJsU3RyaW5nID0gJHRvU3RyaW5nKHVybCk7XG4gIHZhciBiYXNlU3RhdGUsIGZhaWx1cmUsIHNlYXJjaFBhcmFtcztcbiAgaWYgKGlzQmFzZSkge1xuICAgIGZhaWx1cmUgPSB0aGlzLnBhcnNlKHVybFN0cmluZyk7XG4gICAgaWYgKGZhaWx1cmUpIHRocm93IFR5cGVFcnJvcihmYWlsdXJlKTtcbiAgICB0aGlzLnNlYXJjaFBhcmFtcyA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGJhc2UgIT09IHVuZGVmaW5lZCkgYmFzZVN0YXRlID0gbmV3IFVSTFN0YXRlKGJhc2UsIHRydWUpO1xuICAgIGZhaWx1cmUgPSB0aGlzLnBhcnNlKHVybFN0cmluZywgbnVsbCwgYmFzZVN0YXRlKTtcbiAgICBpZiAoZmFpbHVyZSkgdGhyb3cgVHlwZUVycm9yKGZhaWx1cmUpO1xuICAgIHNlYXJjaFBhcmFtcyA9IGdldEludGVybmFsU2VhcmNoUGFyYW1zU3RhdGUobmV3IFVSTFNlYXJjaFBhcmFtcygpKTtcbiAgICBzZWFyY2hQYXJhbXMuYmluZFVSTCh0aGlzKTtcbiAgICB0aGlzLnNlYXJjaFBhcmFtcyA9IHNlYXJjaFBhcmFtcztcbiAgfVxufTtcblxuVVJMU3RhdGUucHJvdG90eXBlID0ge1xuICB0eXBlOiAnVVJMJyxcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmwtcGFyc2luZ1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LXN0YXRlbWVudHMgLS0gVE9ET1xuICBwYXJzZTogZnVuY3Rpb24gKGlucHV0LCBzdGF0ZU92ZXJyaWRlLCBiYXNlKSB7XG4gICAgdmFyIHVybCA9IHRoaXM7XG4gICAgdmFyIHN0YXRlID0gc3RhdGVPdmVycmlkZSB8fCBTQ0hFTUVfU1RBUlQ7XG4gICAgdmFyIHBvaW50ZXIgPSAwO1xuICAgIHZhciBidWZmZXIgPSAnJztcbiAgICB2YXIgc2VlbkF0ID0gZmFsc2U7XG4gICAgdmFyIHNlZW5CcmFja2V0ID0gZmFsc2U7XG4gICAgdmFyIHNlZW5QYXNzd29yZFRva2VuID0gZmFsc2U7XG4gICAgdmFyIGNvZGVQb2ludHMsIGNociwgYnVmZmVyQ29kZVBvaW50cywgZmFpbHVyZTtcblxuICAgIGlucHV0ID0gJHRvU3RyaW5nKGlucHV0KTtcblxuICAgIGlmICghc3RhdGVPdmVycmlkZSkge1xuICAgICAgdXJsLnNjaGVtZSA9ICcnO1xuICAgICAgdXJsLnVzZXJuYW1lID0gJyc7XG4gICAgICB1cmwucGFzc3dvcmQgPSAnJztcbiAgICAgIHVybC5ob3N0ID0gbnVsbDtcbiAgICAgIHVybC5wb3J0ID0gbnVsbDtcbiAgICAgIHVybC5wYXRoID0gW107XG4gICAgICB1cmwucXVlcnkgPSBudWxsO1xuICAgICAgdXJsLmZyYWdtZW50ID0gbnVsbDtcbiAgICAgIHVybC5jYW5ub3RCZUFCYXNlVVJMID0gZmFsc2U7XG4gICAgICBpbnB1dCA9IHJlcGxhY2UoaW5wdXQsIExFQURJTkdfQzBfQ09OVFJPTF9PUl9TUEFDRSwgJycpO1xuICAgICAgaW5wdXQgPSByZXBsYWNlKGlucHV0LCBUUkFJTElOR19DMF9DT05UUk9MX09SX1NQQUNFLCAnJDEnKTtcbiAgICB9XG5cbiAgICBpbnB1dCA9IHJlcGxhY2UoaW5wdXQsIFRBQl9BTkRfTkVXX0xJTkUsICcnKTtcblxuICAgIGNvZGVQb2ludHMgPSBhcnJheUZyb20oaW5wdXQpO1xuXG4gICAgd2hpbGUgKHBvaW50ZXIgPD0gY29kZVBvaW50cy5sZW5ndGgpIHtcbiAgICAgIGNociA9IGNvZGVQb2ludHNbcG9pbnRlcl07XG4gICAgICBzd2l0Y2ggKHN0YXRlKSB7XG4gICAgICAgIGNhc2UgU0NIRU1FX1NUQVJUOlxuICAgICAgICAgIGlmIChjaHIgJiYgZXhlYyhBTFBIQSwgY2hyKSkge1xuICAgICAgICAgICAgYnVmZmVyICs9IHRvTG93ZXJDYXNlKGNocik7XG4gICAgICAgICAgICBzdGF0ZSA9IFNDSEVNRTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCFzdGF0ZU92ZXJyaWRlKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IE5PX1NDSEVNRTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH0gZWxzZSByZXR1cm4gSU5WQUxJRF9TQ0hFTUU7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBTQ0hFTUU6XG4gICAgICAgICAgaWYgKGNociAmJiAoZXhlYyhBTFBIQU5VTUVSSUMsIGNocikgfHwgY2hyID09ICcrJyB8fCBjaHIgPT0gJy0nIHx8IGNociA9PSAnLicpKSB7XG4gICAgICAgICAgICBidWZmZXIgKz0gdG9Mb3dlckNhc2UoY2hyKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNociA9PSAnOicpIHtcbiAgICAgICAgICAgIGlmIChzdGF0ZU92ZXJyaWRlICYmIChcbiAgICAgICAgICAgICAgKHVybC5pc1NwZWNpYWwoKSAhPSBoYXNPd24oc3BlY2lhbFNjaGVtZXMsIGJ1ZmZlcikpIHx8XG4gICAgICAgICAgICAgIChidWZmZXIgPT0gJ2ZpbGUnICYmICh1cmwuaW5jbHVkZXNDcmVkZW50aWFscygpIHx8IHVybC5wb3J0ICE9PSBudWxsKSkgfHxcbiAgICAgICAgICAgICAgKHVybC5zY2hlbWUgPT0gJ2ZpbGUnICYmICF1cmwuaG9zdClcbiAgICAgICAgICAgICkpIHJldHVybjtcbiAgICAgICAgICAgIHVybC5zY2hlbWUgPSBidWZmZXI7XG4gICAgICAgICAgICBpZiAoc3RhdGVPdmVycmlkZSkge1xuICAgICAgICAgICAgICBpZiAodXJsLmlzU3BlY2lhbCgpICYmIHNwZWNpYWxTY2hlbWVzW3VybC5zY2hlbWVdID09IHVybC5wb3J0KSB1cmwucG9ydCA9IG51bGw7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJ1ZmZlciA9ICcnO1xuICAgICAgICAgICAgaWYgKHVybC5zY2hlbWUgPT0gJ2ZpbGUnKSB7XG4gICAgICAgICAgICAgIHN0YXRlID0gRklMRTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodXJsLmlzU3BlY2lhbCgpICYmIGJhc2UgJiYgYmFzZS5zY2hlbWUgPT0gdXJsLnNjaGVtZSkge1xuICAgICAgICAgICAgICBzdGF0ZSA9IFNQRUNJQUxfUkVMQVRJVkVfT1JfQVVUSE9SSVRZO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh1cmwuaXNTcGVjaWFsKCkpIHtcbiAgICAgICAgICAgICAgc3RhdGUgPSBTUEVDSUFMX0FVVEhPUklUWV9TTEFTSEVTO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RlUG9pbnRzW3BvaW50ZXIgKyAxXSA9PSAnLycpIHtcbiAgICAgICAgICAgICAgc3RhdGUgPSBQQVRIX09SX0FVVEhPUklUWTtcbiAgICAgICAgICAgICAgcG9pbnRlcisrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdXJsLmNhbm5vdEJlQUJhc2VVUkwgPSB0cnVlO1xuICAgICAgICAgICAgICBwdXNoKHVybC5wYXRoLCAnJyk7XG4gICAgICAgICAgICAgIHN0YXRlID0gQ0FOTk9UX0JFX0FfQkFTRV9VUkxfUEFUSDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKCFzdGF0ZU92ZXJyaWRlKSB7XG4gICAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICAgIHN0YXRlID0gTk9fU0NIRU1FO1xuICAgICAgICAgICAgcG9pbnRlciA9IDA7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IGVsc2UgcmV0dXJuIElOVkFMSURfU0NIRU1FO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgTk9fU0NIRU1FOlxuICAgICAgICAgIGlmICghYmFzZSB8fCAoYmFzZS5jYW5ub3RCZUFCYXNlVVJMICYmIGNociAhPSAnIycpKSByZXR1cm4gSU5WQUxJRF9TQ0hFTUU7XG4gICAgICAgICAgaWYgKGJhc2UuY2Fubm90QmVBQmFzZVVSTCAmJiBjaHIgPT0gJyMnKSB7XG4gICAgICAgICAgICB1cmwuc2NoZW1lID0gYmFzZS5zY2hlbWU7XG4gICAgICAgICAgICB1cmwucGF0aCA9IGFycmF5U2xpY2UoYmFzZS5wYXRoKTtcbiAgICAgICAgICAgIHVybC5xdWVyeSA9IGJhc2UucXVlcnk7XG4gICAgICAgICAgICB1cmwuZnJhZ21lbnQgPSAnJztcbiAgICAgICAgICAgIHVybC5jYW5ub3RCZUFCYXNlVVJMID0gdHJ1ZTtcbiAgICAgICAgICAgIHN0YXRlID0gRlJBR01FTlQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgc3RhdGUgPSBiYXNlLnNjaGVtZSA9PSAnZmlsZScgPyBGSUxFIDogUkVMQVRJVkU7XG4gICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgY2FzZSBTUEVDSUFMX1JFTEFUSVZFX09SX0FVVEhPUklUWTpcbiAgICAgICAgICBpZiAoY2hyID09ICcvJyAmJiBjb2RlUG9pbnRzW3BvaW50ZXIgKyAxXSA9PSAnLycpIHtcbiAgICAgICAgICAgIHN0YXRlID0gU1BFQ0lBTF9BVVRIT1JJVFlfSUdOT1JFX1NMQVNIRVM7XG4gICAgICAgICAgICBwb2ludGVyKys7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0YXRlID0gUkVMQVRJVkU7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUEFUSF9PUl9BVVRIT1JJVFk6XG4gICAgICAgICAgaWYgKGNociA9PSAnLycpIHtcbiAgICAgICAgICAgIHN0YXRlID0gQVVUSE9SSVRZO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0YXRlID0gUEFUSDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIFJFTEFUSVZFOlxuICAgICAgICAgIHVybC5zY2hlbWUgPSBiYXNlLnNjaGVtZTtcbiAgICAgICAgICBpZiAoY2hyID09IEVPRikge1xuICAgICAgICAgICAgdXJsLnVzZXJuYW1lID0gYmFzZS51c2VybmFtZTtcbiAgICAgICAgICAgIHVybC5wYXNzd29yZCA9IGJhc2UucGFzc3dvcmQ7XG4gICAgICAgICAgICB1cmwuaG9zdCA9IGJhc2UuaG9zdDtcbiAgICAgICAgICAgIHVybC5wb3J0ID0gYmFzZS5wb3J0O1xuICAgICAgICAgICAgdXJsLnBhdGggPSBhcnJheVNsaWNlKGJhc2UucGF0aCk7XG4gICAgICAgICAgICB1cmwucXVlcnkgPSBiYXNlLnF1ZXJ5O1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2hyID09ICcvJyB8fCAoY2hyID09ICdcXFxcJyAmJiB1cmwuaXNTcGVjaWFsKCkpKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IFJFTEFUSVZFX1NMQVNIO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2hyID09ICc/Jykge1xuICAgICAgICAgICAgdXJsLnVzZXJuYW1lID0gYmFzZS51c2VybmFtZTtcbiAgICAgICAgICAgIHVybC5wYXNzd29yZCA9IGJhc2UucGFzc3dvcmQ7XG4gICAgICAgICAgICB1cmwuaG9zdCA9IGJhc2UuaG9zdDtcbiAgICAgICAgICAgIHVybC5wb3J0ID0gYmFzZS5wb3J0O1xuICAgICAgICAgICAgdXJsLnBhdGggPSBhcnJheVNsaWNlKGJhc2UucGF0aCk7XG4gICAgICAgICAgICB1cmwucXVlcnkgPSAnJztcbiAgICAgICAgICAgIHN0YXRlID0gUVVFUlk7XG4gICAgICAgICAgfSBlbHNlIGlmIChjaHIgPT0gJyMnKSB7XG4gICAgICAgICAgICB1cmwudXNlcm5hbWUgPSBiYXNlLnVzZXJuYW1lO1xuICAgICAgICAgICAgdXJsLnBhc3N3b3JkID0gYmFzZS5wYXNzd29yZDtcbiAgICAgICAgICAgIHVybC5ob3N0ID0gYmFzZS5ob3N0O1xuICAgICAgICAgICAgdXJsLnBvcnQgPSBiYXNlLnBvcnQ7XG4gICAgICAgICAgICB1cmwucGF0aCA9IGFycmF5U2xpY2UoYmFzZS5wYXRoKTtcbiAgICAgICAgICAgIHVybC5xdWVyeSA9IGJhc2UucXVlcnk7XG4gICAgICAgICAgICB1cmwuZnJhZ21lbnQgPSAnJztcbiAgICAgICAgICAgIHN0YXRlID0gRlJBR01FTlQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVybC51c2VybmFtZSA9IGJhc2UudXNlcm5hbWU7XG4gICAgICAgICAgICB1cmwucGFzc3dvcmQgPSBiYXNlLnBhc3N3b3JkO1xuICAgICAgICAgICAgdXJsLmhvc3QgPSBiYXNlLmhvc3Q7XG4gICAgICAgICAgICB1cmwucG9ydCA9IGJhc2UucG9ydDtcbiAgICAgICAgICAgIHVybC5wYXRoID0gYXJyYXlTbGljZShiYXNlLnBhdGgpO1xuICAgICAgICAgICAgdXJsLnBhdGgubGVuZ3RoLS07XG4gICAgICAgICAgICBzdGF0ZSA9IFBBVEg7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUkVMQVRJVkVfU0xBU0g6XG4gICAgICAgICAgaWYgKHVybC5pc1NwZWNpYWwoKSAmJiAoY2hyID09ICcvJyB8fCBjaHIgPT0gJ1xcXFwnKSkge1xuICAgICAgICAgICAgc3RhdGUgPSBTUEVDSUFMX0FVVEhPUklUWV9JR05PUkVfU0xBU0hFUztcbiAgICAgICAgICB9IGVsc2UgaWYgKGNociA9PSAnLycpIHtcbiAgICAgICAgICAgIHN0YXRlID0gQVVUSE9SSVRZO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1cmwudXNlcm5hbWUgPSBiYXNlLnVzZXJuYW1lO1xuICAgICAgICAgICAgdXJsLnBhc3N3b3JkID0gYmFzZS5wYXNzd29yZDtcbiAgICAgICAgICAgIHVybC5ob3N0ID0gYmFzZS5ob3N0O1xuICAgICAgICAgICAgdXJsLnBvcnQgPSBiYXNlLnBvcnQ7XG4gICAgICAgICAgICBzdGF0ZSA9IFBBVEg7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IGJyZWFrO1xuXG4gICAgICAgIGNhc2UgU1BFQ0lBTF9BVVRIT1JJVFlfU0xBU0hFUzpcbiAgICAgICAgICBzdGF0ZSA9IFNQRUNJQUxfQVVUSE9SSVRZX0lHTk9SRV9TTEFTSEVTO1xuICAgICAgICAgIGlmIChjaHIgIT0gJy8nIHx8IGNoYXJBdChidWZmZXIsIHBvaW50ZXIgKyAxKSAhPSAnLycpIGNvbnRpbnVlO1xuICAgICAgICAgIHBvaW50ZXIrKztcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFNQRUNJQUxfQVVUSE9SSVRZX0lHTk9SRV9TTEFTSEVTOlxuICAgICAgICAgIGlmIChjaHIgIT0gJy8nICYmIGNociAhPSAnXFxcXCcpIHtcbiAgICAgICAgICAgIHN0YXRlID0gQVVUSE9SSVRZO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfSBicmVhaztcblxuICAgICAgICBjYXNlIEFVVEhPUklUWTpcbiAgICAgICAgICBpZiAoY2hyID09ICdAJykge1xuICAgICAgICAgICAgaWYgKHNlZW5BdCkgYnVmZmVyID0gJyU0MCcgKyBidWZmZXI7XG4gICAgICAgICAgICBzZWVuQXQgPSB0cnVlO1xuICAgICAgICAgICAgYnVmZmVyQ29kZVBvaW50cyA9IGFycmF5RnJvbShidWZmZXIpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWZmZXJDb2RlUG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIHZhciBjb2RlUG9pbnQgPSBidWZmZXJDb2RlUG9pbnRzW2ldO1xuICAgICAgICAgICAgICBpZiAoY29kZVBvaW50ID09ICc6JyAmJiAhc2VlblBhc3N3b3JkVG9rZW4pIHtcbiAgICAgICAgICAgICAgICBzZWVuUGFzc3dvcmRUb2tlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdmFyIGVuY29kZWRDb2RlUG9pbnRzID0gcGVyY2VudEVuY29kZShjb2RlUG9pbnQsIHVzZXJpbmZvUGVyY2VudEVuY29kZVNldCk7XG4gICAgICAgICAgICAgIGlmIChzZWVuUGFzc3dvcmRUb2tlbikgdXJsLnBhc3N3b3JkICs9IGVuY29kZWRDb2RlUG9pbnRzO1xuICAgICAgICAgICAgICBlbHNlIHVybC51c2VybmFtZSArPSBlbmNvZGVkQ29kZVBvaW50cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJ1ZmZlciA9ICcnO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBjaHIgPT0gRU9GIHx8IGNociA9PSAnLycgfHwgY2hyID09ICc/JyB8fCBjaHIgPT0gJyMnIHx8XG4gICAgICAgICAgICAoY2hyID09ICdcXFxcJyAmJiB1cmwuaXNTcGVjaWFsKCkpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoc2VlbkF0ICYmIGJ1ZmZlciA9PSAnJykgcmV0dXJuIElOVkFMSURfQVVUSE9SSVRZO1xuICAgICAgICAgICAgcG9pbnRlciAtPSBhcnJheUZyb20oYnVmZmVyKS5sZW5ndGggKyAxO1xuICAgICAgICAgICAgYnVmZmVyID0gJyc7XG4gICAgICAgICAgICBzdGF0ZSA9IEhPU1Q7XG4gICAgICAgICAgfSBlbHNlIGJ1ZmZlciArPSBjaHI7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBIT1NUOlxuICAgICAgICBjYXNlIEhPU1ROQU1FOlxuICAgICAgICAgIGlmIChzdGF0ZU92ZXJyaWRlICYmIHVybC5zY2hlbWUgPT0gJ2ZpbGUnKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEZJTEVfSE9TVDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2hyID09ICc6JyAmJiAhc2VlbkJyYWNrZXQpIHtcbiAgICAgICAgICAgIGlmIChidWZmZXIgPT0gJycpIHJldHVybiBJTlZBTElEX0hPU1Q7XG4gICAgICAgICAgICBmYWlsdXJlID0gdXJsLnBhcnNlSG9zdChidWZmZXIpO1xuICAgICAgICAgICAgaWYgKGZhaWx1cmUpIHJldHVybiBmYWlsdXJlO1xuICAgICAgICAgICAgYnVmZmVyID0gJyc7XG4gICAgICAgICAgICBzdGF0ZSA9IFBPUlQ7XG4gICAgICAgICAgICBpZiAoc3RhdGVPdmVycmlkZSA9PSBIT1NUTkFNRSkgcmV0dXJuO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBjaHIgPT0gRU9GIHx8IGNociA9PSAnLycgfHwgY2hyID09ICc/JyB8fCBjaHIgPT0gJyMnIHx8XG4gICAgICAgICAgICAoY2hyID09ICdcXFxcJyAmJiB1cmwuaXNTcGVjaWFsKCkpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAodXJsLmlzU3BlY2lhbCgpICYmIGJ1ZmZlciA9PSAnJykgcmV0dXJuIElOVkFMSURfSE9TVDtcbiAgICAgICAgICAgIGlmIChzdGF0ZU92ZXJyaWRlICYmIGJ1ZmZlciA9PSAnJyAmJiAodXJsLmluY2x1ZGVzQ3JlZGVudGlhbHMoKSB8fCB1cmwucG9ydCAhPT0gbnVsbCkpIHJldHVybjtcbiAgICAgICAgICAgIGZhaWx1cmUgPSB1cmwucGFyc2VIb3N0KGJ1ZmZlcik7XG4gICAgICAgICAgICBpZiAoZmFpbHVyZSkgcmV0dXJuIGZhaWx1cmU7XG4gICAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICAgIHN0YXRlID0gUEFUSF9TVEFSVDtcbiAgICAgICAgICAgIGlmIChzdGF0ZU92ZXJyaWRlKSByZXR1cm47XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGNociA9PSAnWycpIHNlZW5CcmFja2V0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGVsc2UgaWYgKGNociA9PSAnXScpIHNlZW5CcmFja2V0ID0gZmFsc2U7XG4gICAgICAgICAgICBidWZmZXIgKz0gY2hyO1xuICAgICAgICAgIH0gYnJlYWs7XG5cbiAgICAgICAgY2FzZSBQT1JUOlxuICAgICAgICAgIGlmIChleGVjKERJR0lULCBjaHIpKSB7XG4gICAgICAgICAgICBidWZmZXIgKz0gY2hyO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBjaHIgPT0gRU9GIHx8IGNociA9PSAnLycgfHwgY2hyID09ICc/JyB8fCBjaHIgPT0gJyMnIHx8XG4gICAgICAgICAgICAoY2hyID09ICdcXFxcJyAmJiB1cmwuaXNTcGVjaWFsKCkpIHx8XG4gICAgICAgICAgICBzdGF0ZU92ZXJyaWRlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoYnVmZmVyICE9ICcnKSB7XG4gICAgICAgICAgICAgIHZhciBwb3J0ID0gcGFyc2VJbnQoYnVmZmVyLCAxMCk7XG4gICAgICAgICAgICAgIGlmIChwb3J0ID4gMHhGRkZGKSByZXR1cm4gSU5WQUxJRF9QT1JUO1xuICAgICAgICAgICAgICB1cmwucG9ydCA9ICh1cmwuaXNTcGVjaWFsKCkgJiYgcG9ydCA9PT0gc3BlY2lhbFNjaGVtZXNbdXJsLnNjaGVtZV0pID8gbnVsbCA6IHBvcnQ7XG4gICAgICAgICAgICAgIGJ1ZmZlciA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHN0YXRlT3ZlcnJpZGUpIHJldHVybjtcbiAgICAgICAgICAgIHN0YXRlID0gUEFUSF9TVEFSVDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH0gZWxzZSByZXR1cm4gSU5WQUxJRF9QT1JUO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgRklMRTpcbiAgICAgICAgICB1cmwuc2NoZW1lID0gJ2ZpbGUnO1xuICAgICAgICAgIGlmIChjaHIgPT0gJy8nIHx8IGNociA9PSAnXFxcXCcpIHN0YXRlID0gRklMRV9TTEFTSDtcbiAgICAgICAgICBlbHNlIGlmIChiYXNlICYmIGJhc2Uuc2NoZW1lID09ICdmaWxlJykge1xuICAgICAgICAgICAgaWYgKGNociA9PSBFT0YpIHtcbiAgICAgICAgICAgICAgdXJsLmhvc3QgPSBiYXNlLmhvc3Q7XG4gICAgICAgICAgICAgIHVybC5wYXRoID0gYXJyYXlTbGljZShiYXNlLnBhdGgpO1xuICAgICAgICAgICAgICB1cmwucXVlcnkgPSBiYXNlLnF1ZXJ5O1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjaHIgPT0gJz8nKSB7XG4gICAgICAgICAgICAgIHVybC5ob3N0ID0gYmFzZS5ob3N0O1xuICAgICAgICAgICAgICB1cmwucGF0aCA9IGFycmF5U2xpY2UoYmFzZS5wYXRoKTtcbiAgICAgICAgICAgICAgdXJsLnF1ZXJ5ID0gJyc7XG4gICAgICAgICAgICAgIHN0YXRlID0gUVVFUlk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNociA9PSAnIycpIHtcbiAgICAgICAgICAgICAgdXJsLmhvc3QgPSBiYXNlLmhvc3Q7XG4gICAgICAgICAgICAgIHVybC5wYXRoID0gYXJyYXlTbGljZShiYXNlLnBhdGgpO1xuICAgICAgICAgICAgICB1cmwucXVlcnkgPSBiYXNlLnF1ZXJ5O1xuICAgICAgICAgICAgICB1cmwuZnJhZ21lbnQgPSAnJztcbiAgICAgICAgICAgICAgc3RhdGUgPSBGUkFHTUVOVDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmICghc3RhcnRzV2l0aFdpbmRvd3NEcml2ZUxldHRlcihqb2luKGFycmF5U2xpY2UoY29kZVBvaW50cywgcG9pbnRlciksICcnKSkpIHtcbiAgICAgICAgICAgICAgICB1cmwuaG9zdCA9IGJhc2UuaG9zdDtcbiAgICAgICAgICAgICAgICB1cmwucGF0aCA9IGFycmF5U2xpY2UoYmFzZS5wYXRoKTtcbiAgICAgICAgICAgICAgICB1cmwuc2hvcnRlblBhdGgoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzdGF0ZSA9IFBBVEg7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGF0ZSA9IFBBVEg7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IGJyZWFrO1xuXG4gICAgICAgIGNhc2UgRklMRV9TTEFTSDpcbiAgICAgICAgICBpZiAoY2hyID09ICcvJyB8fCBjaHIgPT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEZJTEVfSE9TVDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoYmFzZSAmJiBiYXNlLnNjaGVtZSA9PSAnZmlsZScgJiYgIXN0YXJ0c1dpdGhXaW5kb3dzRHJpdmVMZXR0ZXIoam9pbihhcnJheVNsaWNlKGNvZGVQb2ludHMsIHBvaW50ZXIpLCAnJykpKSB7XG4gICAgICAgICAgICBpZiAoaXNXaW5kb3dzRHJpdmVMZXR0ZXIoYmFzZS5wYXRoWzBdLCB0cnVlKSkgcHVzaCh1cmwucGF0aCwgYmFzZS5wYXRoWzBdKTtcbiAgICAgICAgICAgIGVsc2UgdXJsLmhvc3QgPSBiYXNlLmhvc3Q7XG4gICAgICAgICAgfVxuICAgICAgICAgIHN0YXRlID0gUEFUSDtcbiAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICBjYXNlIEZJTEVfSE9TVDpcbiAgICAgICAgICBpZiAoY2hyID09IEVPRiB8fCBjaHIgPT0gJy8nIHx8IGNociA9PSAnXFxcXCcgfHwgY2hyID09ICc/JyB8fCBjaHIgPT0gJyMnKSB7XG4gICAgICAgICAgICBpZiAoIXN0YXRlT3ZlcnJpZGUgJiYgaXNXaW5kb3dzRHJpdmVMZXR0ZXIoYnVmZmVyKSkge1xuICAgICAgICAgICAgICBzdGF0ZSA9IFBBVEg7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGJ1ZmZlciA9PSAnJykge1xuICAgICAgICAgICAgICB1cmwuaG9zdCA9ICcnO1xuICAgICAgICAgICAgICBpZiAoc3RhdGVPdmVycmlkZSkgcmV0dXJuO1xuICAgICAgICAgICAgICBzdGF0ZSA9IFBBVEhfU1RBUlQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBmYWlsdXJlID0gdXJsLnBhcnNlSG9zdChidWZmZXIpO1xuICAgICAgICAgICAgICBpZiAoZmFpbHVyZSkgcmV0dXJuIGZhaWx1cmU7XG4gICAgICAgICAgICAgIGlmICh1cmwuaG9zdCA9PSAnbG9jYWxob3N0JykgdXJsLmhvc3QgPSAnJztcbiAgICAgICAgICAgICAgaWYgKHN0YXRlT3ZlcnJpZGUpIHJldHVybjtcbiAgICAgICAgICAgICAgYnVmZmVyID0gJyc7XG4gICAgICAgICAgICAgIHN0YXRlID0gUEFUSF9TVEFSVDtcbiAgICAgICAgICAgIH0gY29udGludWU7XG4gICAgICAgICAgfSBlbHNlIGJ1ZmZlciArPSBjaHI7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBQQVRIX1NUQVJUOlxuICAgICAgICAgIGlmICh1cmwuaXNTcGVjaWFsKCkpIHtcbiAgICAgICAgICAgIHN0YXRlID0gUEFUSDtcbiAgICAgICAgICAgIGlmIChjaHIgIT0gJy8nICYmIGNociAhPSAnXFxcXCcpIGNvbnRpbnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIXN0YXRlT3ZlcnJpZGUgJiYgY2hyID09ICc/Jykge1xuICAgICAgICAgICAgdXJsLnF1ZXJ5ID0gJyc7XG4gICAgICAgICAgICBzdGF0ZSA9IFFVRVJZO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIXN0YXRlT3ZlcnJpZGUgJiYgY2hyID09ICcjJykge1xuICAgICAgICAgICAgdXJsLmZyYWdtZW50ID0gJyc7XG4gICAgICAgICAgICBzdGF0ZSA9IEZSQUdNRU5UO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY2hyICE9IEVPRikge1xuICAgICAgICAgICAgc3RhdGUgPSBQQVRIO1xuICAgICAgICAgICAgaWYgKGNociAhPSAnLycpIGNvbnRpbnVlO1xuICAgICAgICAgIH0gYnJlYWs7XG5cbiAgICAgICAgY2FzZSBQQVRIOlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGNociA9PSBFT0YgfHwgY2hyID09ICcvJyB8fFxuICAgICAgICAgICAgKGNociA9PSAnXFxcXCcgJiYgdXJsLmlzU3BlY2lhbCgpKSB8fFxuICAgICAgICAgICAgKCFzdGF0ZU92ZXJyaWRlICYmIChjaHIgPT0gJz8nIHx8IGNociA9PSAnIycpKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKGlzRG91YmxlRG90KGJ1ZmZlcikpIHtcbiAgICAgICAgICAgICAgdXJsLnNob3J0ZW5QYXRoKCk7XG4gICAgICAgICAgICAgIGlmIChjaHIgIT0gJy8nICYmICEoY2hyID09ICdcXFxcJyAmJiB1cmwuaXNTcGVjaWFsKCkpKSB7XG4gICAgICAgICAgICAgICAgcHVzaCh1cmwucGF0aCwgJycpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzU2luZ2xlRG90KGJ1ZmZlcikpIHtcbiAgICAgICAgICAgICAgaWYgKGNociAhPSAnLycgJiYgIShjaHIgPT0gJ1xcXFwnICYmIHVybC5pc1NwZWNpYWwoKSkpIHtcbiAgICAgICAgICAgICAgICBwdXNoKHVybC5wYXRoLCAnJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmICh1cmwuc2NoZW1lID09ICdmaWxlJyAmJiAhdXJsLnBhdGgubGVuZ3RoICYmIGlzV2luZG93c0RyaXZlTGV0dGVyKGJ1ZmZlcikpIHtcbiAgICAgICAgICAgICAgICBpZiAodXJsLmhvc3QpIHVybC5ob3N0ID0gJyc7XG4gICAgICAgICAgICAgICAgYnVmZmVyID0gY2hhckF0KGJ1ZmZlciwgMCkgKyAnOic7IC8vIG5vcm1hbGl6ZSB3aW5kb3dzIGRyaXZlIGxldHRlclxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHB1c2godXJsLnBhdGgsIGJ1ZmZlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICAgIGlmICh1cmwuc2NoZW1lID09ICdmaWxlJyAmJiAoY2hyID09IEVPRiB8fCBjaHIgPT0gJz8nIHx8IGNociA9PSAnIycpKSB7XG4gICAgICAgICAgICAgIHdoaWxlICh1cmwucGF0aC5sZW5ndGggPiAxICYmIHVybC5wYXRoWzBdID09PSAnJykge1xuICAgICAgICAgICAgICAgIHNoaWZ0KHVybC5wYXRoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNociA9PSAnPycpIHtcbiAgICAgICAgICAgICAgdXJsLnF1ZXJ5ID0gJyc7XG4gICAgICAgICAgICAgIHN0YXRlID0gUVVFUlk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNociA9PSAnIycpIHtcbiAgICAgICAgICAgICAgdXJsLmZyYWdtZW50ID0gJyc7XG4gICAgICAgICAgICAgIHN0YXRlID0gRlJBR01FTlQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJ1ZmZlciArPSBwZXJjZW50RW5jb2RlKGNociwgcGF0aFBlcmNlbnRFbmNvZGVTZXQpO1xuICAgICAgICAgIH0gYnJlYWs7XG5cbiAgICAgICAgY2FzZSBDQU5OT1RfQkVfQV9CQVNFX1VSTF9QQVRIOlxuICAgICAgICAgIGlmIChjaHIgPT0gJz8nKSB7XG4gICAgICAgICAgICB1cmwucXVlcnkgPSAnJztcbiAgICAgICAgICAgIHN0YXRlID0gUVVFUlk7XG4gICAgICAgICAgfSBlbHNlIGlmIChjaHIgPT0gJyMnKSB7XG4gICAgICAgICAgICB1cmwuZnJhZ21lbnQgPSAnJztcbiAgICAgICAgICAgIHN0YXRlID0gRlJBR01FTlQ7XG4gICAgICAgICAgfSBlbHNlIGlmIChjaHIgIT0gRU9GKSB7XG4gICAgICAgICAgICB1cmwucGF0aFswXSArPSBwZXJjZW50RW5jb2RlKGNociwgQzBDb250cm9sUGVyY2VudEVuY29kZVNldCk7XG4gICAgICAgICAgfSBicmVhaztcblxuICAgICAgICBjYXNlIFFVRVJZOlxuICAgICAgICAgIGlmICghc3RhdGVPdmVycmlkZSAmJiBjaHIgPT0gJyMnKSB7XG4gICAgICAgICAgICB1cmwuZnJhZ21lbnQgPSAnJztcbiAgICAgICAgICAgIHN0YXRlID0gRlJBR01FTlQ7XG4gICAgICAgICAgfSBlbHNlIGlmIChjaHIgIT0gRU9GKSB7XG4gICAgICAgICAgICBpZiAoY2hyID09IFwiJ1wiICYmIHVybC5pc1NwZWNpYWwoKSkgdXJsLnF1ZXJ5ICs9ICclMjcnO1xuICAgICAgICAgICAgZWxzZSBpZiAoY2hyID09ICcjJykgdXJsLnF1ZXJ5ICs9ICclMjMnO1xuICAgICAgICAgICAgZWxzZSB1cmwucXVlcnkgKz0gcGVyY2VudEVuY29kZShjaHIsIEMwQ29udHJvbFBlcmNlbnRFbmNvZGVTZXQpO1xuICAgICAgICAgIH0gYnJlYWs7XG5cbiAgICAgICAgY2FzZSBGUkFHTUVOVDpcbiAgICAgICAgICBpZiAoY2hyICE9IEVPRikgdXJsLmZyYWdtZW50ICs9IHBlcmNlbnRFbmNvZGUoY2hyLCBmcmFnbWVudFBlcmNlbnRFbmNvZGVTZXQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBwb2ludGVyKys7XG4gICAgfVxuICB9LFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2hvc3QtcGFyc2luZ1xuICBwYXJzZUhvc3Q6IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgIHZhciByZXN1bHQsIGNvZGVQb2ludHMsIGluZGV4O1xuICAgIGlmIChjaGFyQXQoaW5wdXQsIDApID09ICdbJykge1xuICAgICAgaWYgKGNoYXJBdChpbnB1dCwgaW5wdXQubGVuZ3RoIC0gMSkgIT0gJ10nKSByZXR1cm4gSU5WQUxJRF9IT1NUO1xuICAgICAgcmVzdWx0ID0gcGFyc2VJUHY2KHN0cmluZ1NsaWNlKGlucHV0LCAxLCAtMSkpO1xuICAgICAgaWYgKCFyZXN1bHQpIHJldHVybiBJTlZBTElEX0hPU1Q7XG4gICAgICB0aGlzLmhvc3QgPSByZXN1bHQ7XG4gICAgLy8gb3BhcXVlIGhvc3RcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmlzU3BlY2lhbCgpKSB7XG4gICAgICBpZiAoZXhlYyhGT1JCSURERU5fSE9TVF9DT0RFX1BPSU5UX0VYQ0xVRElOR19QRVJDRU5ULCBpbnB1dCkpIHJldHVybiBJTlZBTElEX0hPU1Q7XG4gICAgICByZXN1bHQgPSAnJztcbiAgICAgIGNvZGVQb2ludHMgPSBhcnJheUZyb20oaW5wdXQpO1xuICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgY29kZVBvaW50cy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgcmVzdWx0ICs9IHBlcmNlbnRFbmNvZGUoY29kZVBvaW50c1tpbmRleF0sIEMwQ29udHJvbFBlcmNlbnRFbmNvZGVTZXQpO1xuICAgICAgfVxuICAgICAgdGhpcy5ob3N0ID0gcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dCA9IHRvQVNDSUkoaW5wdXQpO1xuICAgICAgaWYgKGV4ZWMoRk9SQklEREVOX0hPU1RfQ09ERV9QT0lOVCwgaW5wdXQpKSByZXR1cm4gSU5WQUxJRF9IT1NUO1xuICAgICAgcmVzdWx0ID0gcGFyc2VJUHY0KGlucHV0KTtcbiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIHJldHVybiBJTlZBTElEX0hPU1Q7XG4gICAgICB0aGlzLmhvc3QgPSByZXN1bHQ7XG4gICAgfVxuICB9LFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2Nhbm5vdC1oYXZlLWEtdXNlcm5hbWUtcGFzc3dvcmQtcG9ydFxuICBjYW5ub3RIYXZlVXNlcm5hbWVQYXNzd29yZFBvcnQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gIXRoaXMuaG9zdCB8fCB0aGlzLmNhbm5vdEJlQUJhc2VVUkwgfHwgdGhpcy5zY2hlbWUgPT0gJ2ZpbGUnO1xuICB9LFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2luY2x1ZGUtY3JlZGVudGlhbHNcbiAgaW5jbHVkZXNDcmVkZW50aWFsczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLnVzZXJuYW1lICE9ICcnIHx8IHRoaXMucGFzc3dvcmQgIT0gJyc7XG4gIH0sXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jaXMtc3BlY2lhbFxuICBpc1NwZWNpYWw6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gaGFzT3duKHNwZWNpYWxTY2hlbWVzLCB0aGlzLnNjaGVtZSk7XG4gIH0sXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jc2hvcnRlbi1hLXVybHMtcGF0aFxuICBzaG9ydGVuUGF0aDogZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXRoID0gdGhpcy5wYXRoO1xuICAgIHZhciBwYXRoU2l6ZSA9IHBhdGgubGVuZ3RoO1xuICAgIGlmIChwYXRoU2l6ZSAmJiAodGhpcy5zY2hlbWUgIT0gJ2ZpbGUnIHx8IHBhdGhTaXplICE9IDEgfHwgIWlzV2luZG93c0RyaXZlTGV0dGVyKHBhdGhbMF0sIHRydWUpKSkge1xuICAgICAgcGF0aC5sZW5ndGgtLTtcbiAgICB9XG4gIH0sXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC11cmwtc2VyaWFsaXplclxuICBzZXJpYWxpemU6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdXJsID0gdGhpcztcbiAgICB2YXIgc2NoZW1lID0gdXJsLnNjaGVtZTtcbiAgICB2YXIgdXNlcm5hbWUgPSB1cmwudXNlcm5hbWU7XG4gICAgdmFyIHBhc3N3b3JkID0gdXJsLnBhc3N3b3JkO1xuICAgIHZhciBob3N0ID0gdXJsLmhvc3Q7XG4gICAgdmFyIHBvcnQgPSB1cmwucG9ydDtcbiAgICB2YXIgcGF0aCA9IHVybC5wYXRoO1xuICAgIHZhciBxdWVyeSA9IHVybC5xdWVyeTtcbiAgICB2YXIgZnJhZ21lbnQgPSB1cmwuZnJhZ21lbnQ7XG4gICAgdmFyIG91dHB1dCA9IHNjaGVtZSArICc6JztcbiAgICBpZiAoaG9zdCAhPT0gbnVsbCkge1xuICAgICAgb3V0cHV0ICs9ICcvLyc7XG4gICAgICBpZiAodXJsLmluY2x1ZGVzQ3JlZGVudGlhbHMoKSkge1xuICAgICAgICBvdXRwdXQgKz0gdXNlcm5hbWUgKyAocGFzc3dvcmQgPyAnOicgKyBwYXNzd29yZCA6ICcnKSArICdAJztcbiAgICAgIH1cbiAgICAgIG91dHB1dCArPSBzZXJpYWxpemVIb3N0KGhvc3QpO1xuICAgICAgaWYgKHBvcnQgIT09IG51bGwpIG91dHB1dCArPSAnOicgKyBwb3J0O1xuICAgIH0gZWxzZSBpZiAoc2NoZW1lID09ICdmaWxlJykgb3V0cHV0ICs9ICcvLyc7XG4gICAgb3V0cHV0ICs9IHVybC5jYW5ub3RCZUFCYXNlVVJMID8gcGF0aFswXSA6IHBhdGgubGVuZ3RoID8gJy8nICsgam9pbihwYXRoLCAnLycpIDogJyc7XG4gICAgaWYgKHF1ZXJ5ICE9PSBudWxsKSBvdXRwdXQgKz0gJz8nICsgcXVlcnk7XG4gICAgaWYgKGZyYWdtZW50ICE9PSBudWxsKSBvdXRwdXQgKz0gJyMnICsgZnJhZ21lbnQ7XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfSxcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLWhyZWZcbiAgc2V0SHJlZjogZnVuY3Rpb24gKGhyZWYpIHtcbiAgICB2YXIgZmFpbHVyZSA9IHRoaXMucGFyc2UoaHJlZik7XG4gICAgaWYgKGZhaWx1cmUpIHRocm93IFR5cGVFcnJvcihmYWlsdXJlKTtcbiAgICB0aGlzLnNlYXJjaFBhcmFtcy51cGRhdGUoKTtcbiAgfSxcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLW9yaWdpblxuICBnZXRPcmlnaW46IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2NoZW1lID0gdGhpcy5zY2hlbWU7XG4gICAgdmFyIHBvcnQgPSB0aGlzLnBvcnQ7XG4gICAgaWYgKHNjaGVtZSA9PSAnYmxvYicpIHRyeSB7XG4gICAgICByZXR1cm4gbmV3IFVSTENvbnN0cnVjdG9yKHNjaGVtZS5wYXRoWzBdKS5vcmlnaW47XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuICAgIGlmIChzY2hlbWUgPT0gJ2ZpbGUnIHx8ICF0aGlzLmlzU3BlY2lhbCgpKSByZXR1cm4gJ251bGwnO1xuICAgIHJldHVybiBzY2hlbWUgKyAnOi8vJyArIHNlcmlhbGl6ZUhvc3QodGhpcy5ob3N0KSArIChwb3J0ICE9PSBudWxsID8gJzonICsgcG9ydCA6ICcnKTtcbiAgfSxcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLXByb3RvY29sXG4gIGdldFByb3RvY29sOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2NoZW1lICsgJzonO1xuICB9LFxuICBzZXRQcm90b2NvbDogZnVuY3Rpb24gKHByb3RvY29sKSB7XG4gICAgdGhpcy5wYXJzZSgkdG9TdHJpbmcocHJvdG9jb2wpICsgJzonLCBTQ0hFTUVfU1RBUlQpO1xuICB9LFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtdXNlcm5hbWVcbiAgZ2V0VXNlcm5hbWU6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy51c2VybmFtZTtcbiAgfSxcbiAgc2V0VXNlcm5hbWU6IGZ1bmN0aW9uICh1c2VybmFtZSkge1xuICAgIHZhciBjb2RlUG9pbnRzID0gYXJyYXlGcm9tKCR0b1N0cmluZyh1c2VybmFtZSkpO1xuICAgIGlmICh0aGlzLmNhbm5vdEhhdmVVc2VybmFtZVBhc3N3b3JkUG9ydCgpKSByZXR1cm47XG4gICAgdGhpcy51c2VybmFtZSA9ICcnO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29kZVBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy51c2VybmFtZSArPSBwZXJjZW50RW5jb2RlKGNvZGVQb2ludHNbaV0sIHVzZXJpbmZvUGVyY2VudEVuY29kZVNldCk7XG4gICAgfVxuICB9LFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtcGFzc3dvcmRcbiAgZ2V0UGFzc3dvcmQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXNzd29yZDtcbiAgfSxcbiAgc2V0UGFzc3dvcmQ6IGZ1bmN0aW9uIChwYXNzd29yZCkge1xuICAgIHZhciBjb2RlUG9pbnRzID0gYXJyYXlGcm9tKCR0b1N0cmluZyhwYXNzd29yZCkpO1xuICAgIGlmICh0aGlzLmNhbm5vdEhhdmVVc2VybmFtZVBhc3N3b3JkUG9ydCgpKSByZXR1cm47XG4gICAgdGhpcy5wYXNzd29yZCA9ICcnO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29kZVBvaW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5wYXNzd29yZCArPSBwZXJjZW50RW5jb2RlKGNvZGVQb2ludHNbaV0sIHVzZXJpbmZvUGVyY2VudEVuY29kZVNldCk7XG4gICAgfVxuICB9LFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtaG9zdFxuICBnZXRIb3N0OiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGhvc3QgPSB0aGlzLmhvc3Q7XG4gICAgdmFyIHBvcnQgPSB0aGlzLnBvcnQ7XG4gICAgcmV0dXJuIGhvc3QgPT09IG51bGwgPyAnJ1xuICAgICAgOiBwb3J0ID09PSBudWxsID8gc2VyaWFsaXplSG9zdChob3N0KVxuICAgICAgOiBzZXJpYWxpemVIb3N0KGhvc3QpICsgJzonICsgcG9ydDtcbiAgfSxcbiAgc2V0SG9zdDogZnVuY3Rpb24gKGhvc3QpIHtcbiAgICBpZiAodGhpcy5jYW5ub3RCZUFCYXNlVVJMKSByZXR1cm47XG4gICAgdGhpcy5wYXJzZShob3N0LCBIT1NUKTtcbiAgfSxcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLWhvc3RuYW1lXG4gIGdldEhvc3RuYW1lOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGhvc3QgPSB0aGlzLmhvc3Q7XG4gICAgcmV0dXJuIGhvc3QgPT09IG51bGwgPyAnJyA6IHNlcmlhbGl6ZUhvc3QoaG9zdCk7XG4gIH0sXG4gIHNldEhvc3RuYW1lOiBmdW5jdGlvbiAoaG9zdG5hbWUpIHtcbiAgICBpZiAodGhpcy5jYW5ub3RCZUFCYXNlVVJMKSByZXR1cm47XG4gICAgdGhpcy5wYXJzZShob3N0bmFtZSwgSE9TVE5BTUUpO1xuICB9LFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtcG9ydFxuICBnZXRQb3J0OiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHBvcnQgPSB0aGlzLnBvcnQ7XG4gICAgcmV0dXJuIHBvcnQgPT09IG51bGwgPyAnJyA6ICR0b1N0cmluZyhwb3J0KTtcbiAgfSxcbiAgc2V0UG9ydDogZnVuY3Rpb24gKHBvcnQpIHtcbiAgICBpZiAodGhpcy5jYW5ub3RIYXZlVXNlcm5hbWVQYXNzd29yZFBvcnQoKSkgcmV0dXJuO1xuICAgIHBvcnQgPSAkdG9TdHJpbmcocG9ydCk7XG4gICAgaWYgKHBvcnQgPT0gJycpIHRoaXMucG9ydCA9IG51bGw7XG4gICAgZWxzZSB0aGlzLnBhcnNlKHBvcnQsIFBPUlQpO1xuICB9LFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtcGF0aG5hbWVcbiAgZ2V0UGF0aG5hbWU6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGF0aCA9IHRoaXMucGF0aDtcbiAgICByZXR1cm4gdGhpcy5jYW5ub3RCZUFCYXNlVVJMID8gcGF0aFswXSA6IHBhdGgubGVuZ3RoID8gJy8nICsgam9pbihwYXRoLCAnLycpIDogJyc7XG4gIH0sXG4gIHNldFBhdGhuYW1lOiBmdW5jdGlvbiAocGF0aG5hbWUpIHtcbiAgICBpZiAodGhpcy5jYW5ub3RCZUFCYXNlVVJMKSByZXR1cm47XG4gICAgdGhpcy5wYXRoID0gW107XG4gICAgdGhpcy5wYXJzZShwYXRobmFtZSwgUEFUSF9TVEFSVCk7XG4gIH0sXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1zZWFyY2hcbiAgZ2V0U2VhcmNoOiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHF1ZXJ5ID0gdGhpcy5xdWVyeTtcbiAgICByZXR1cm4gcXVlcnkgPyAnPycgKyBxdWVyeSA6ICcnO1xuICB9LFxuICBzZXRTZWFyY2g6IGZ1bmN0aW9uIChzZWFyY2gpIHtcbiAgICBzZWFyY2ggPSAkdG9TdHJpbmcoc2VhcmNoKTtcbiAgICBpZiAoc2VhcmNoID09ICcnKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCc/JyA9PSBjaGFyQXQoc2VhcmNoLCAwKSkgc2VhcmNoID0gc3RyaW5nU2xpY2Uoc2VhcmNoLCAxKTtcbiAgICAgIHRoaXMucXVlcnkgPSAnJztcbiAgICAgIHRoaXMucGFyc2Uoc2VhcmNoLCBRVUVSWSk7XG4gICAgfVxuICAgIHRoaXMuc2VhcmNoUGFyYW1zLnVwZGF0ZSgpO1xuICB9LFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtc2VhcmNocGFyYW1zXG4gIGdldFNlYXJjaFBhcmFtczogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLnNlYXJjaFBhcmFtcy5mYWNhZGU7XG4gIH0sXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1oYXNoXG4gIGdldEhhc2g6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZnJhZ21lbnQgPSB0aGlzLmZyYWdtZW50O1xuICAgIHJldHVybiBmcmFnbWVudCA/ICcjJyArIGZyYWdtZW50IDogJyc7XG4gIH0sXG4gIHNldEhhc2g6IGZ1bmN0aW9uIChoYXNoKSB7XG4gICAgaGFzaCA9ICR0b1N0cmluZyhoYXNoKTtcbiAgICBpZiAoaGFzaCA9PSAnJykge1xuICAgICAgdGhpcy5mcmFnbWVudCA9IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICgnIycgPT0gY2hhckF0KGhhc2gsIDApKSBoYXNoID0gc3RyaW5nU2xpY2UoaGFzaCwgMSk7XG4gICAgdGhpcy5mcmFnbWVudCA9ICcnO1xuICAgIHRoaXMucGFyc2UoaGFzaCwgRlJBR01FTlQpO1xuICB9LFxuICB1cGRhdGU6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnF1ZXJ5ID0gdGhpcy5zZWFyY2hQYXJhbXMuc2VyaWFsaXplKCkgfHwgbnVsbDtcbiAgfVxufTtcblxuLy8gYFVSTGAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jdXJsLWNsYXNzXG52YXIgVVJMQ29uc3RydWN0b3IgPSBmdW5jdGlvbiBVUkwodXJsIC8qICwgYmFzZSAqLykge1xuICB2YXIgdGhhdCA9IGFuSW5zdGFuY2UodGhpcywgVVJMUHJvdG90eXBlKTtcbiAgdmFyIGJhc2UgPSB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChhcmd1bWVudHMubGVuZ3RoLCAxKSA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gIHZhciBzdGF0ZSA9IHNldEludGVybmFsU3RhdGUodGhhdCwgbmV3IFVSTFN0YXRlKHVybCwgZmFsc2UsIGJhc2UpKTtcbiAgaWYgKCFERVNDUklQVE9SUykge1xuICAgIHRoYXQuaHJlZiA9IHN0YXRlLnNlcmlhbGl6ZSgpO1xuICAgIHRoYXQub3JpZ2luID0gc3RhdGUuZ2V0T3JpZ2luKCk7XG4gICAgdGhhdC5wcm90b2NvbCA9IHN0YXRlLmdldFByb3RvY29sKCk7XG4gICAgdGhhdC51c2VybmFtZSA9IHN0YXRlLmdldFVzZXJuYW1lKCk7XG4gICAgdGhhdC5wYXNzd29yZCA9IHN0YXRlLmdldFBhc3N3b3JkKCk7XG4gICAgdGhhdC5ob3N0ID0gc3RhdGUuZ2V0SG9zdCgpO1xuICAgIHRoYXQuaG9zdG5hbWUgPSBzdGF0ZS5nZXRIb3N0bmFtZSgpO1xuICAgIHRoYXQucG9ydCA9IHN0YXRlLmdldFBvcnQoKTtcbiAgICB0aGF0LnBhdGhuYW1lID0gc3RhdGUuZ2V0UGF0aG5hbWUoKTtcbiAgICB0aGF0LnNlYXJjaCA9IHN0YXRlLmdldFNlYXJjaCgpO1xuICAgIHRoYXQuc2VhcmNoUGFyYW1zID0gc3RhdGUuZ2V0U2VhcmNoUGFyYW1zKCk7XG4gICAgdGhhdC5oYXNoID0gc3RhdGUuZ2V0SGFzaCgpO1xuICB9XG59O1xuXG52YXIgVVJMUHJvdG90eXBlID0gVVJMQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG52YXIgYWNjZXNzb3JEZXNjcmlwdG9yID0gZnVuY3Rpb24gKGdldHRlciwgc2V0dGVyKSB7XG4gIHJldHVybiB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZ2V0SW50ZXJuYWxVUkxTdGF0ZSh0aGlzKVtnZXR0ZXJdKCk7XG4gICAgfSxcbiAgICBzZXQ6IHNldHRlciAmJiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHJldHVybiBnZXRJbnRlcm5hbFVSTFN0YXRlKHRoaXMpW3NldHRlcl0odmFsdWUpO1xuICAgIH0sXG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IHRydWVcbiAgfTtcbn07XG5cbmlmIChERVNDUklQVE9SUykge1xuICAvLyBgVVJMLnByb3RvdHlwZS5ocmVmYCBhY2Nlc3NvcnMgcGFpclxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtaHJlZlxuICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoVVJMUHJvdG90eXBlLCAnaHJlZicsIGFjY2Vzc29yRGVzY3JpcHRvcignc2VyaWFsaXplJywgJ3NldEhyZWYnKSk7XG4gIC8vIGBVUkwucHJvdG90eXBlLm9yaWdpbmAgZ2V0dGVyXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1vcmlnaW5cbiAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFVSTFByb3RvdHlwZSwgJ29yaWdpbicsIGFjY2Vzc29yRGVzY3JpcHRvcignZ2V0T3JpZ2luJykpO1xuICAvLyBgVVJMLnByb3RvdHlwZS5wcm90b2NvbGAgYWNjZXNzb3JzIHBhaXJcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLXByb3RvY29sXG4gIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihVUkxQcm90b3R5cGUsICdwcm90b2NvbCcsIGFjY2Vzc29yRGVzY3JpcHRvcignZ2V0UHJvdG9jb2wnLCAnc2V0UHJvdG9jb2wnKSk7XG4gIC8vIGBVUkwucHJvdG90eXBlLnVzZXJuYW1lYCBhY2Nlc3NvcnMgcGFpclxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtdXNlcm5hbWVcbiAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFVSTFByb3RvdHlwZSwgJ3VzZXJuYW1lJywgYWNjZXNzb3JEZXNjcmlwdG9yKCdnZXRVc2VybmFtZScsICdzZXRVc2VybmFtZScpKTtcbiAgLy8gYFVSTC5wcm90b3R5cGUucGFzc3dvcmRgIGFjY2Vzc29ycyBwYWlyXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1wYXNzd29yZFxuICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoVVJMUHJvdG90eXBlLCAncGFzc3dvcmQnLCBhY2Nlc3NvckRlc2NyaXB0b3IoJ2dldFBhc3N3b3JkJywgJ3NldFBhc3N3b3JkJykpO1xuICAvLyBgVVJMLnByb3RvdHlwZS5ob3N0YCBhY2Nlc3NvcnMgcGFpclxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtaG9zdFxuICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoVVJMUHJvdG90eXBlLCAnaG9zdCcsIGFjY2Vzc29yRGVzY3JpcHRvcignZ2V0SG9zdCcsICdzZXRIb3N0JykpO1xuICAvLyBgVVJMLnByb3RvdHlwZS5ob3N0bmFtZWAgYWNjZXNzb3JzIHBhaXJcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLWhvc3RuYW1lXG4gIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihVUkxQcm90b3R5cGUsICdob3N0bmFtZScsIGFjY2Vzc29yRGVzY3JpcHRvcignZ2V0SG9zdG5hbWUnLCAnc2V0SG9zdG5hbWUnKSk7XG4gIC8vIGBVUkwucHJvdG90eXBlLnBvcnRgIGFjY2Vzc29ycyBwYWlyXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1wb3J0XG4gIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihVUkxQcm90b3R5cGUsICdwb3J0JywgYWNjZXNzb3JEZXNjcmlwdG9yKCdnZXRQb3J0JywgJ3NldFBvcnQnKSk7XG4gIC8vIGBVUkwucHJvdG90eXBlLnBhdGhuYW1lYCBhY2Nlc3NvcnMgcGFpclxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtcGF0aG5hbWVcbiAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFVSTFByb3RvdHlwZSwgJ3BhdGhuYW1lJywgYWNjZXNzb3JEZXNjcmlwdG9yKCdnZXRQYXRobmFtZScsICdzZXRQYXRobmFtZScpKTtcbiAgLy8gYFVSTC5wcm90b3R5cGUuc2VhcmNoYCBhY2Nlc3NvcnMgcGFpclxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtc2VhcmNoXG4gIGRlZmluZUJ1aWx0SW5BY2Nlc3NvcihVUkxQcm90b3R5cGUsICdzZWFyY2gnLCBhY2Nlc3NvckRlc2NyaXB0b3IoJ2dldFNlYXJjaCcsICdzZXRTZWFyY2gnKSk7XG4gIC8vIGBVUkwucHJvdG90eXBlLnNlYXJjaFBhcmFtc2AgZ2V0dGVyXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybC1zZWFyY2hwYXJhbXNcbiAgZGVmaW5lQnVpbHRJbkFjY2Vzc29yKFVSTFByb3RvdHlwZSwgJ3NlYXJjaFBhcmFtcycsIGFjY2Vzc29yRGVzY3JpcHRvcignZ2V0U2VhcmNoUGFyYW1zJykpO1xuICAvLyBgVVJMLnByb3RvdHlwZS5oYXNoYCBhY2Nlc3NvcnMgcGFpclxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmwtaGFzaFxuICBkZWZpbmVCdWlsdEluQWNjZXNzb3IoVVJMUHJvdG90eXBlLCAnaGFzaCcsIGFjY2Vzc29yRGVzY3JpcHRvcignZ2V0SGFzaCcsICdzZXRIYXNoJykpO1xufVxuXG4vLyBgVVJMLnByb3RvdHlwZS50b0pTT05gIG1ldGhvZFxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsLXRvanNvblxuZGVmaW5lQnVpbHRJbihVUkxQcm90b3R5cGUsICd0b0pTT04nLCBmdW5jdGlvbiB0b0pTT04oKSB7XG4gIHJldHVybiBnZXRJbnRlcm5hbFVSTFN0YXRlKHRoaXMpLnNlcmlhbGl6ZSgpO1xufSwgeyBlbnVtZXJhYmxlOiB0cnVlIH0pO1xuXG4vLyBgVVJMLnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI1VSTC1zdHJpbmdpZmljYXRpb24tYmVoYXZpb3JcbmRlZmluZUJ1aWx0SW4oVVJMUHJvdG90eXBlLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIGdldEludGVybmFsVVJMU3RhdGUodGhpcykuc2VyaWFsaXplKCk7XG59LCB7IGVudW1lcmFibGU6IHRydWUgfSk7XG5cbmlmIChOYXRpdmVVUkwpIHtcbiAgdmFyIG5hdGl2ZUNyZWF0ZU9iamVjdFVSTCA9IE5hdGl2ZVVSTC5jcmVhdGVPYmplY3RVUkw7XG4gIHZhciBuYXRpdmVSZXZva2VPYmplY3RVUkwgPSBOYXRpdmVVUkwucmV2b2tlT2JqZWN0VVJMO1xuICAvLyBgVVJMLmNyZWF0ZU9iamVjdFVSTGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9VUkwvY3JlYXRlT2JqZWN0VVJMXG4gIGlmIChuYXRpdmVDcmVhdGVPYmplY3RVUkwpIGRlZmluZUJ1aWx0SW4oVVJMQ29uc3RydWN0b3IsICdjcmVhdGVPYmplY3RVUkwnLCBiaW5kKG5hdGl2ZUNyZWF0ZU9iamVjdFVSTCwgTmF0aXZlVVJMKSk7XG4gIC8vIGBVUkwucmV2b2tlT2JqZWN0VVJMYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1VSTC9yZXZva2VPYmplY3RVUkxcbiAgaWYgKG5hdGl2ZVJldm9rZU9iamVjdFVSTCkgZGVmaW5lQnVpbHRJbihVUkxDb25zdHJ1Y3RvciwgJ3Jldm9rZU9iamVjdFVSTCcsIGJpbmQobmF0aXZlUmV2b2tlT2JqZWN0VVJMLCBOYXRpdmVVUkwpKTtcbn1cblxuc2V0VG9TdHJpbmdUYWcoVVJMQ29uc3RydWN0b3IsICdVUkwnKTtcblxuJCh7IGdsb2JhbDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIGZvcmNlZDogIVVTRV9OQVRJVkVfVVJMLCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBVUkw6IFVSTENvbnN0cnVjdG9yXG59KTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLnVybC5jb25zdHJ1Y3Rvci5qcz8iKX0pLCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLnVybC5qcyI6KChfX3VudXNlZF93ZWJwYWNrX21vZHVsZSxfX3VudXNlZF93ZWJwYWNrX2V4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk9PntldmFsKCJcbi8vIFRPRE86IFJlbW92ZSB0aGlzIG1vZHVsZSBmcm9tIGBjb3JlLWpzQDRgIHNpbmNlIGl0J3MgcmVwbGFjZWQgdG8gbW9kdWxlIGJlbG93XG5fX3dlYnBhY2tfcmVxdWlyZV9fKC8qISAuLi9tb2R1bGVzL3dlYi51cmwuY29uc3RydWN0b3IgKi8gXCIuL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLnVybC5jb25zdHJ1Y3Rvci5qc1wiKTtcblxuXG4vLyMgc291cmNlVVJMPXdlYnBhY2s6Ly9iYWJlbC8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLnVybC5qcz8iKX0pfSk7dmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXz17fTtmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKXt2YXIgY2FjaGVkTW9kdWxlPV9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07aWYoY2FjaGVkTW9kdWxlIT09dW5kZWZpbmVkKXtyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHN9dmFyIG1vZHVsZT1fX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdPXtpZDptb2R1bGVJZCxsb2FkZWQ6ZmFsc2UsZXhwb3J0czp7fX07X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cyxtb2R1bGUsbW9kdWxlLmV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyk7bW9kdWxlLmxvYWRlZD10cnVlO3JldHVybiBtb2R1bGUuZXhwb3J0c30oKCk9PntfX3dlYnBhY2tfcmVxdWlyZV9fLmFtZE89e319KSgpOygoKT0+e19fd2VicGFja19yZXF1aXJlX18ubj0obW9kdWxlKT0+e3ZhciBnZXR0ZXI9bW9kdWxlJiZtb2R1bGUuX19lc01vZHVsZT8oKT0+KG1vZHVsZVsnZGVmYXVsdCddKTooKT0+KG1vZHVsZSk7X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlcix7YTpnZXR0ZXJ9KTtyZXR1cm4gZ2V0dGVyfX0pKCk7KCgpPT57X193ZWJwYWNrX3JlcXVpcmVfXy5kPShleHBvcnRzLGRlZmluaXRpb24pPT57Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbil7aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sa2V5KSYmIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLGtleSkpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLGtleSx7ZW51bWVyYWJsZTp0cnVlLGdldDpkZWZpbml0aW9uW2tleV19KX19fX0pKCk7KCgpPT57X193ZWJwYWNrX3JlcXVpcmVfXy5nPShmdW5jdGlvbigpe2lmKHR5cGVvZiBnbG9iYWxUaGlzPT09J29iamVjdCcpcmV0dXJuIGdsb2JhbFRoaXM7dHJ5e3JldHVybiB0aGlzfHxuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKX1jYXRjaChlKXtpZih0eXBlb2Ygd2luZG93PT09J29iamVjdCcpcmV0dXJuIHdpbmRvd319KSgpfSkoKTsoKCk9PntfX3dlYnBhY2tfcmVxdWlyZV9fLmhtZD0obW9kdWxlKT0+e21vZHVsZT1PYmplY3QuY3JlYXRlKG1vZHVsZSk7aWYoIW1vZHVsZS5jaGlsZHJlbiltb2R1bGUuY2hpbGRyZW49W107T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwnZXhwb3J0cycse2VudW1lcmFibGU6dHJ1ZSxzZXQ6KCk9Pnt0aHJvdyBuZXcgRXJyb3IoJ0VTIE1vZHVsZXMgbWF5IG5vdCBhc3NpZ24gbW9kdWxlLmV4cG9ydHMgb3IgZXhwb3J0cy4qLCBVc2UgRVNNIGV4cG9ydCBzeW50YXgsIGluc3RlYWQ6ICcrbW9kdWxlLmlkKTt9fSk7cmV0dXJuIG1vZHVsZX19KSgpOygoKT0+e19fd2VicGFja19yZXF1aXJlX18ubz0ob2JqLHByb3ApPT4oT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaixwcm9wKSl9KSgpOygoKT0+e19fd2VicGFja19yZXF1aXJlX18ucj0oZXhwb3J0cyk9PntpZih0eXBlb2YgU3ltYm9sIT09J3VuZGVmaW5lZCcmJlN5bWJvbC50b1N0cmluZ1RhZyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZTonTW9kdWxlJ30pfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCdfX2VzTW9kdWxlJyx7dmFsdWU6dHJ1ZX0pfX0pKCk7dmFyIF9fd2VicGFja19leHBvcnRzX189X193ZWJwYWNrX3JlcXVpcmVfXygiLi9wZGYuanMiKX0pKCk7",p=`data:text/javascript;base64,${S}`,M=`data:text/javascript;base64,${s}`;class J{constructor(I,g={},C={}){c(this,"container",null);c(this,"wrapper",null);c(this,"wrapperMain",null);c(this,"options",{});c(this,"requestOptions",{});c(this,"pdfDocument",null);this.container=I,this.options={staticFileUrl:"https://unpkg.com/pdfjs-dist@3.1.81/",...g},this.requestOptions=C,this.createWrapper()}createWrapper(){this.wrapper=document.createElement("div"),this.wrapper.className="vue-office-pdf",this.wrapper.setAttribute("style","text-align: center;overflow-y: auto;"),this.container.appendChild(this.wrapper)}createWrapperMain(){this.wrapperMain=document.createElement("div"),this.wrapperMain.className="vue-office-pdf-wrapper",this.wrapperMain.setAttribute("style","background: gray; padding: 30px 0;position: relative;"),this.wrapper.appendChild(this.wrapperMain)}createCanvas(I){let g=this.wrapperMain.querySelectorAll("canvas");if(g[I-1])return[g[I-1],g[I-1].getContext("2d")];const C=document.createElement("canvas");return C.setAttribute("style","width:100%"),this.wrapperMain.appendChild(C),[C,C.getContext("2d")]}installPdfScript(){return Y(p).then(()=>{window.pdfjsLib.GlobalWorkerOptions.workerSrc=M})}checkPdfLib(){return window.pdfjsLib?Promise.resolve():this.installPdfScript()}getDocument(I){return window.pdfjsLib.getDocument({url:u(I),cMapUrl:`${this.options.staticFileUrl.endsWith("/")?this.options.staticFileUrl:this.options.staticFileUrl+"/"}cmaps/`,cMapPacked:!0,enableXfa:!0,...L(this.options,["width","staticFileUrl"])}).promise}renderSinglePage(I){return this.pdfDocument.getPage(I).then(g=>{const C=g.getViewport({scale:2}),l=window.devicePixelRatio||1;let[b,A]=this.createCanvas(I);b.width=Math.floor(C.width*l),b.height=Math.floor(C.height*l);let G=Math.floor(C.width),X=Math.floor(C.height);if(this.options.width){let m=this.options.width/G;G=Math.floor(this.options.width),X=Math.floor(X*m)}let d=this.wrapperMain.getBoundingClientRect().width-20;if(G>d){let m=d/G;G=Math.floor(d),X=Math.floor(X*m)}b.style.width=G+"px",b.style.height=X+"px";const W=l!==1?[l,0,0,l,0,0]:null;return g.render({canvasContext:A,transform:W,viewport:C}).promise.then(()=>{if(this.pdfDocument.numPages>I)return this.renderSinglePage(I+1)})})}renderPage(){if(!this.wrapperMain)this.createWrapperMain();else{let I=this.wrapperMain.querySelectorAll("canvas");if(I.length>this.pdfDocument.numPages)for(let g=I.length-1;g>=this.pdfDocument.numPages;g--)this.wrapperMain.removeChild(I[g])}return this.renderSinglePage(1)}clearAllCanvas(){this.wrapperMain&&(this.wrapper.removeChild(this.wrapperMain),this.wrapperMain=null)}setOptions(I){this.options=I}setRequestOptions(I){this.requestOptions=I}preview(I){return new Promise((g,C)=>{if(!I){this.clearAllCanvas(),C(new Error("预览地址不能为空"));return}this.checkPdfLib().then(l=>{this.getDocument(I).then(b=>{this.pdfDocument=b,this.renderPage().then(A=>{g()}).catch(A=>{this.clearAllCanvas(),C(A)})}).catch(b=>{this.clearAllCanvas(),C(b)})}).catch(l=>{this.clearAllCanvas(),C(l)})})}rerender(){return this.renderPage().then(I=>Promise.resolve()).catch(I=>(this.clearAllCanvas(),Promise.reject(I)))}save(I){this.pdfDocument&&this.pdfDocument._transport&&this.pdfDocument._transport.getData().then(g=>{i(I||`js-preview-pdf-${new Date().getTime()}.pdf`,g.buffer)})}destroy(){this.container.removeChild(this.wrapper),this.container=null,this.wrapper=null,this.wrapperMain=null,this.options={},this.requestOptions={},this.pdfDocument=null}}function F(Z,I,g){return new J(Z,I,g)}const z={init:F},U={__name:"JsPdfDemo",setup(Z){const I=N(null);return h(()=>{window.myPdfPreview=z.init(I.value),window.myPdfPreview.preview("/vue-office/examples/dist/static/test-files/test.pdf").then(g=>{console.log("excel preview done",window.myPdfPreview)}).catch(g=>{console.log("err",g)})}),(g,C)=>(R(),x("div",{ref_key:"dom",ref:I,style:{height:"calc(100vh - 50px)"}},null,512))}};export{U as default}; diff --git a/examples/dist/assets/PdfDemo-b6ff8e47.js b/examples/dist/assets/PdfDemo-b6ff8e47.js new file mode 100644 index 0000000..3be1393 --- /dev/null +++ b/examples/dist/assets/PdfDemo-b6ff8e47.js @@ -0,0 +1 @@ +import{g as I,d as F,l as M}from"./url-de9b02cf.js";import{o as D}from"./omit-bc810850.js";import{d as L,_ as N,r as v,o as U,w as B,a as g,c as y,F as q,k as $,l as G,m as W,e as H,f as X,g as z,u as V}from"./index-846e3dd9.js";import{P as K,u as k}from"./PreviewWrapper-a72046cf.js";const Y=`(()=>{"use strict";var e={7757:(e,t,r)=>{var n,a;function i(e,t,r){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,"string");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function s(e,t){l(e,t),t.add(e)}function o(e,t,r){if(!t.has(e))throw new TypeError("attempted to get private field on non-instance");return r}function c(e,t,r){l(e,t),t.set(e,r)}function l(e,t){if(t.has(e))throw new TypeError("Cannot initialize the same private elements twice on an object")}function h(e,t){return function(e,t){return t.get?t.get.call(e):t.value}(e,d(e,t,"get"))}function u(e,t,r){return function(e,t,r){if(t.set)t.set.call(e,r);else{if(!t.writable)throw new TypeError("attempted to set read only private field");t.value=r}}(e,d(e,t,"set"),r),r}function d(e,t,r){if(!t.has(e))throw new TypeError("attempted to "+r+" private field on non-instance");return t.get(e)}r(5837),r(1703),r(9575),r(2472),r(8675),r(3105),r(3408),r(2958),r(3462),r(3824),r(2974),r(1439),r(7585),r(5315),r(3948),r(7658),r(8674),r(7727),r(4944),r(3792),r(9714),r(1550),r(4916),r(3123),r(1817),r(4723),r(6314),r(5306),r(7601),r(1299),r(7635),r(8264),r(7287),r(9743),r(2707),r(5581),r(7145),r(6699),r(2023),r(6755),r(285),r(1637),r(6229),r(7330),r(2062),r(8757),r(9135),r(4129),r(6977),r(1058),r(4603),r(8450),r(4678),r(9601),r(2262),r(2087),r(541),r(3210),r(5827),r(5438),r(8255),r(4197),r(5125),r(4506),r(5109),r(6495),r(8862),r(7852),r(7714),r(2801),r(1174),r(7922),e=r.hmd(e),n=globalThis,a=()=>(()=>{var e=[,(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.WorkerTask=t.WorkerMessageHandler=void 0,r(2),r(84),r(93),r(94),r(97),r(99),r(101),r(105),r(108),r(115),r(116),r(126),r(128),r(131),r(133),r(135),r(137),r(139),r(143);var n=r(144),a=r(149),i=r(150),s=r(152),o=r(156),c=r(222),l=r(216),h=r(257),u=r(258);class d{constructor(e){this.name=e,this.terminated=!1,this._capability=new n.PromiseCapability}get finished(){return this._capability.promise}finish(){this._capability.resolve()}terminate(){this.terminated=!0}ensureNotTerminated(){if(this.terminated)throw new Error("Worker task was terminated")}}t.WorkerTask=d;class f{static setup(e,t){let r=!1;e.on("test",(function(t){r||(r=!0,e.send("test",t instanceof Uint8Array))})),e.on("configure",(function(e){(0,n.setVerbosityLevel)(e.verbosity)})),e.on("GetDocRequest",(function(e){return f.createDocumentHandler(e,t)}))}static createDocumentHandler(e,t){let r,f=!1,g=null;const p=new Set,m=(0,n.getVerbosityLevel)(),{docId:b,apiVersion:y}=e,w="3.9.179";if(y!==w)throw new Error('The API version "'.concat(y,'" does not match the Worker version "').concat(w,'".'));const v=[];for(const e in[])v.push(e);if(v.length)throw new Error("The \`Array.prototype\` contains unexpected enumerable properties: "+v.join(", ")+"; thus breaking e.g. \`for...in\` iteration of \`Array\`s.");const x=b+"_worker";let S=new h.MessageHandler(x,b,t);function A(){if(f)throw new Error("Worker was terminated")}function k(e){p.add(e)}function C(e){e.finish(),p.delete(e)}async function O(e){await r.ensureDoc("checkHeader"),await r.ensureDoc("parseStartXRef"),await r.ensureDoc("parse",[e]),await r.ensureDoc("checkFirstPage",[e]),await r.ensureDoc("checkLastPage",[e]);const t=await r.ensureDoc("isPureXfa");if(t){const e=new d("loadXfaFonts");k(e),await Promise.all([r.loadXfaFonts(S,e).catch((e=>{})).then((()=>C(e))),r.loadXfaImages()])}const[n,a]=await Promise.all([r.ensureDoc("numPages"),r.ensureDoc("fingerprints")]);return{numPages:n,fingerprints:a,htmlForXfa:t?await r.ensureDoc("htmlForXfa"):null}}return S.on("GetPage",(function(e){return r.getPage(e.pageIndex).then((function(e){return Promise.all([r.ensure(e,"rotate"),r.ensure(e,"ref"),r.ensure(e,"userUnit"),r.ensure(e,"view")]).then((function(e){let[t,r,n,a]=e;return{rotate:t,ref:r,userUnit:n,view:a}}))}))})),S.on("GetPageIndex",(function(e){const t=i.Ref.get(e.num,e.gen);return r.ensureCatalog("getPageIndex",[t])})),S.on("GetDestinations",(function(e){return r.ensureCatalog("destinations")})),S.on("GetDestination",(function(e){return r.ensureCatalog("getDestination",[e.id])})),S.on("GetPageLabels",(function(e){return r.ensureCatalog("pageLabels")})),S.on("GetPageLayout",(function(e){return r.ensureCatalog("pageLayout")})),S.on("GetPageMode",(function(e){return r.ensureCatalog("pageMode")})),S.on("GetViewerPreferences",(function(e){return r.ensureCatalog("viewerPreferences")})),S.on("GetOpenAction",(function(e){return r.ensureCatalog("openAction")})),S.on("GetAttachments",(function(e){return r.ensureCatalog("attachments")})),S.on("GetJavaScript",(function(e){return r.ensureCatalog("javaScript")})),S.on("GetDocJSActions",(function(e){return r.ensureCatalog("jsActions")})),S.on("GetPageJSActions",(function(e){let{pageIndex:t}=e;return r.getPage(t).then((function(e){return r.ensure(e,"jsActions")}))})),S.on("GetOutline",(function(e){return r.ensureCatalog("documentOutline")})),S.on("GetOptionalContentConfig",(function(e){return r.ensureCatalog("optionalContentConfig")})),S.on("GetPermissions",(function(e){return r.ensureCatalog("permissions")})),S.on("GetMetadata",(function(e){return Promise.all([r.ensureDoc("documentInfo"),r.ensureCatalog("metadata")])})),S.on("GetMarkInfo",(function(e){return r.ensureCatalog("markInfo")})),S.on("GetData",(function(e){return r.requestLoadedStream().then((function(e){return e.bytes}))})),S.on("GetAnnotations",(function(e){let{pageIndex:t,intent:n}=e;return r.getPage(t).then((function(e){const r=new d("GetAnnotations: page ".concat(t));return k(r),e.getAnnotationsData(S,r,n).then((e=>(C(r),e)),(e=>{throw C(r),e}))}))})),S.on("GetFieldObjects",(function(e){return r.ensureDoc("fieldObjects")})),S.on("HasJSActions",(function(e){return r.ensureDoc("hasJSActions")})),S.on("GetCalculationOrderIds",(function(e){return r.ensureDoc("calculationOrderIds")})),S.on("SaveDocument",(async function(e){let{isPureXfa:t,numPages:s,annotationStorage:c,filename:h}=e;const u=[r.requestLoadedStream(),r.ensureCatalog("acroForm"),r.ensureCatalog("acroFormRef"),r.ensureDoc("startXRef"),r.ensureDoc("linearization")],f=t?null:(0,a.getNewAnnotationsMap)(c),g=await r.ensureDoc("xref");if(f){const e=o.AnnotationFactory.generateImages(c.values(),g,r.evaluatorOptions.isOffscreenCanvasSupported);for(const[t,n]of f)u.push(r.getPage(t).then((r=>{const a=new d("Save (editor): page ".concat(t));return r.saveNewAnnotations(S,a,n,e).finally((function(){C(a)}))})))}if(t)u.push(r.serializeXfaData(c));else for(let e=0;ee.needAppearances)),m=a instanceof i.Dict&&a.get("XFA")||null;let b=null,y=!1;if(Array.isArray(m)){for(let e=0,t=m.length;e{"string"==typeof r&&(e[t]=(0,n.stringToPDFString)(r))})),w={rootRef:g.trailer.getRaw("Root")||null,encryptRef:g.trailer.getRaw("Encrypt")||null,newRef:g.getNewTemporaryRef(),infoRef:g.trailer.getRaw("Info")||null,info:e,fileIds:g.trailer.get("ID")||null,startXRef:c?o:null!==(v=g.lastXRefStreamPos)&&void 0!==v?v:o,filename:h}}return(0,l.incrementalUpdate)({originalData:r.bytes,xrefInfo:w,newRefs:d,xref:g,hasXfa:!!m,xfaDatasetsRef:b,hasXfaDatasetsEntry:y,needAppearances:p,acroFormRef:s,acroForm:a,xfaData:f}).finally((()=>{g.resetNewTemporaryRef()}))}))})),S.on("GetOperatorList",(function(e,t){const a=e.pageIndex;r.getPage(a).then((function(r){const i=new d("GetOperatorList: page ".concat(a));k(i);const s=m>=n.VerbosityLevel.INFOS?Date.now():0;r.getOperatorList({handler:S,sink:t,task:i,intent:e.intent,cacheKey:e.cacheKey,annotationStorage:e.annotationStorage}).then((function(e){C(i),s&&(0,n.info)("page=".concat(a+1," - getOperatorList: time=").concat(Date.now()-s,"ms, len=").concat(e.length)),t.close()}),(function(e){C(i),i.terminated||t.error(e)}))}))})),S.on("GetTextContent",(function(e,t){const{pageIndex:a,includeMarkedContent:i,disableNormalization:s}=e;r.getPage(a).then((function(e){const r=new d("GetTextContent: page "+a);k(r);const o=m>=n.VerbosityLevel.INFOS?Date.now():0;e.extractTextContent({handler:S,task:r,sink:t,includeMarkedContent:i,disableNormalization:s}).then((function(){C(r),o&&(0,n.info)("page=".concat(a+1," - getTextContent: time=")+(Date.now()-o)+"ms"),t.close()}),(function(e){C(r),r.terminated||t.error(e)}))}))})),S.on("GetStructTree",(function(e){return r.getPage(e.pageIndex).then((function(e){return r.ensure(e,"getStructTree")}))})),S.on("FontFallback",(function(e){return r.fontFallback(e.id,S)})),S.on("Cleanup",(function(e){return r.cleanup(!0)})),S.on("Terminate",(function(e){f=!0;const t=[];if(r){r.terminate(new n.AbortException("Worker was terminated."));const e=r.cleanup();t.push(e),r=null}else(0,c.clearGlobalCaches)();g&&g(new n.AbortException("Worker was terminated."));for(const e of p)t.push(e.finished),e.terminate();return Promise.all(t).then((function(){S.destroy(),S=null}))})),S.on("Ready",(function(t){!function(e){function t(e){A(),S.send("GetDoc",{pdfInfo:e})}function i(e){if(A(),e instanceof n.PasswordException){const t=new d("PasswordException: response ".concat(e.code));k(t),S.sendWithPromise("PasswordRequest",e).then((function(e){let{password:n}=e;C(t),r.updatePassword(n),o()})).catch((function(){C(t),S.send("DocException",e)}))}else e instanceof n.InvalidPDFException||e instanceof n.MissingPDFException||e instanceof n.UnexpectedResponseException||e instanceof n.UnknownErrorException?S.send("DocException",e):S.send("DocException",new n.UnknownErrorException(e.message,e.toString()))}function o(){A(),O(!1).then(t,(function(e){A(),e instanceof a.XRefParseException?r.requestLoadedStream().then((function(){A(),O(!0).then(t,i)})):i(e)}))}A(),function(e){let{data:t,password:r,disableAutoFetch:i,rangeChunkSize:o,length:c,docBaseUrl:l,enableXfa:h,evaluatorOptions:d}=e;const f={source:null,disableAutoFetch:i,docBaseUrl:l,docId:b,enableXfa:h,evaluatorOptions:d,handler:S,length:c,password:r,rangeChunkSize:o},p=new n.PromiseCapability;let m;if(t){try{f.source=t,m=new s.LocalPdfManager(f),p.resolve(m)}catch(e){p.reject(e)}return p.promise}let y,w=[];try{y=new u.PDFWorkerStream(S)}catch(e){return p.reject(e),p.promise}const v=y.getFullReader();v.headersReady.then((function(){if(v.isRangeSupported){f.source=y,f.length=v.contentLength,f.disableAutoFetch||(f.disableAutoFetch=v.isStreamingSupported),m=new s.NetworkPdfManager(f);for(const e of w)m.sendProgressiveData(e);w=[],p.resolve(m),g=null}})).catch((function(e){p.reject(e),g=null}));let x=0;return new Promise((function(e,t){v.read().then((function e(r){let{value:i,done:o}=r;try{if(A(),o)return m||function(){const e=(0,a.arrayBuffersToBytes)(w);c&&e.length!==c&&(0,n.warn)("reported HTTP length is different from actual");try{f.source=e,m=new s.LocalPdfManager(f),p.resolve(m)}catch(e){p.reject(e)}w=[]}(),void(g=null);x+=i.byteLength,v.isStreamingSupported||S.send("DocProgress",{loaded:x,total:Math.max(x,v.contentLength||0)}),m?m.sendProgressiveData(i):w.push(i),v.read().then(e,t)}catch(r){t(r)}}),t)})).catch((function(e){p.reject(e),g=null})),g=function(e){y.cancelAllRequests(e)},p.promise}(e).then((function(e){if(f)throw e.terminate(new n.AbortException("Worker was terminated.")),new Error("Worker was terminated");r=e,r.requestLoadedStream(!0).then((e=>{S.send("DataLoaded",{length:e.bytes.byteLength})}))})).then(o,i)}(e),e=null})),x}static initializeFromPort(e){const t=new h.MessageHandler("worker","main",e);f.setup(t,e),t.send("ready",null)}}t.WorkerMessageHandler=f,"undefined"==typeof window&&!n.isNodeJS&&"undefined"!=typeof self&&function(e){return"function"==typeof e.postMessage&&"onmessage"in e}(self)&&f.initializeFromPort(self)},(e,t,r)=>{var n=r(3),a=r(4),i=r(69),s=r(70),o="WebAssembly",c=a[o],l=7!==Error("e",{cause:7}).cause,h=function(e,t){var r={};r[e]=s(e,t,l),n({global:!0,constructor:!0,arity:1,forced:l},r)},u=function(e,t){if(c&&c[e]){var r={};r[e]=s(o+"."+e,t,l),n({target:o,stat:!0,constructor:!0,arity:1,forced:l},r)}};h("Error",(function(e){return function(t){return i(e,this,arguments)}})),h("EvalError",(function(e){return function(t){return i(e,this,arguments)}})),h("RangeError",(function(e){return function(t){return i(e,this,arguments)}})),h("ReferenceError",(function(e){return function(t){return i(e,this,arguments)}})),h("SyntaxError",(function(e){return function(t){return i(e,this,arguments)}})),h("TypeError",(function(e){return function(t){return i(e,this,arguments)}})),h("URIError",(function(e){return function(t){return i(e,this,arguments)}})),u("CompileError",(function(e){return function(t){return i(e,this,arguments)}})),u("LinkError",(function(e){return function(t){return i(e,this,arguments)}})),u("RuntimeError",(function(e){return function(t){return i(e,this,arguments)}}))},(e,t,r)=>{var n=r(4),a=r(5).f,i=r(44),s=r(48),o=r(38),c=r(56),l=r(68);e.exports=function(e,t){var r,h,u,d,f,g=e.target,p=e.global,m=e.stat;if(r=p?n:m?n[g]||o(g,{}):(n[g]||{}).prototype)for(h in t){if(d=t[h],u=e.dontCallGetSet?(f=a(r,h))&&f.value:r[h],!l(p?h:g+(m?".":"#")+h,e.forced)&&void 0!==u){if(typeof d==typeof u)continue;c(d,u)}(e.sham||u&&u.sham)&&i(d,"sham",!0),s(r,h,d,e)}}},function(e){var t=function(e){return e&&e.Math==Math&&e};e.exports=t("object"==typeof globalThis&&globalThis)||t("object"==typeof window&&window)||t("object"==typeof self&&self)||t("object"==typeof r.g&&r.g)||function(){return this}()||this||Function("return this")()},(e,t,r)=>{var n=r(6),a=r(8),i=r(10),s=r(11),o=r(12),c=r(18),l=r(39),h=r(42),u=Object.getOwnPropertyDescriptor;t.f=n?u:function(e,t){if(e=o(e),t=c(t),h)try{return u(e,t)}catch(e){}if(l(e,t))return s(!a(i.f,e,t),e[t])}},(e,t,r)=>{var n=r(7);e.exports=!n((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},e=>{e.exports=function(e){try{return!!e()}catch(e){return!0}}},(e,t,r)=>{var n=r(9),a=Function.prototype.call;e.exports=n?a.bind(a):function(){return a.apply(a,arguments)}},(e,t,r)=>{var n=r(7);e.exports=!n((function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")}))},(e,t)=>{var r={}.propertyIsEnumerable,n=Object.getOwnPropertyDescriptor,a=n&&!r.call({1:2},1);t.f=a?function(e){var t=n(this,e);return!!t&&t.enumerable}:r},e=>{e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},(e,t,r)=>{var n=r(13),a=r(16);e.exports=function(e){return n(a(e))}},(e,t,r)=>{var n=r(14),a=r(7),i=r(15),s=Object,o=n("".split);e.exports=a((function(){return!s("z").propertyIsEnumerable(0)}))?function(e){return"String"==i(e)?o(e,""):s(e)}:s},(e,t,r)=>{var n=r(9),a=Function.prototype,i=a.call,s=n&&a.bind.bind(i,i);e.exports=n?s:function(e){return function(){return i.apply(e,arguments)}}},(e,t,r)=>{var n=r(14),a=n({}.toString),i=n("".slice);e.exports=function(e){return i(a(e),8,-1)}},(e,t,r)=>{var n=r(17),a=TypeError;e.exports=function(e){if(n(e))throw a("Can't call method on "+e);return e}},e=>{e.exports=function(e){return null==e}},(e,t,r)=>{var n=r(19),a=r(23);e.exports=function(e){var t=n(e,"string");return a(t)?t:t+""}},(e,t,r)=>{var n=r(8),a=r(20),i=r(23),s=r(30),o=r(33),c=r(34),l=TypeError,h=c("toPrimitive");e.exports=function(e,t){if(!a(e)||i(e))return e;var r,c=s(e,h);if(c){if(void 0===t&&(t="default"),r=n(c,e,t),!a(r)||i(r))return r;throw l("Can't convert object to primitive value")}return void 0===t&&(t="number"),o(e,t)}},(e,t,r)=>{var n=r(21),a=r(22),i=a.all;e.exports=a.IS_HTMLDDA?function(e){return"object"==typeof e?null!==e:n(e)||e===i}:function(e){return"object"==typeof e?null!==e:n(e)}},(e,t,r)=>{var n=r(22),a=n.all;e.exports=n.IS_HTMLDDA?function(e){return"function"==typeof e||e===a}:function(e){return"function"==typeof e}},e=>{var t="object"==typeof document&&document.all,r=void 0===t&&void 0!==t;e.exports={all:t,IS_HTMLDDA:r}},(e,t,r)=>{var n=r(24),a=r(21),i=r(25),s=r(26),o=Object;e.exports=s?function(e){return"symbol"==typeof e}:function(e){var t=n("Symbol");return a(t)&&i(t.prototype,o(e))}},(e,t,r)=>{var n=r(4),a=r(21);e.exports=function(e,t){return arguments.length<2?(r=n[e],a(r)?r:void 0):n[e]&&n[e][t];var r}},(e,t,r)=>{var n=r(14);e.exports=n({}.isPrototypeOf)},(e,t,r)=>{var n=r(27);e.exports=n&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},(e,t,r)=>{var n=r(28),a=r(7),i=r(4).String;e.exports=!!Object.getOwnPropertySymbols&&!a((function(){var e=Symbol();return!i(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&n&&n<41}))},(e,t,r)=>{var n,a,i=r(4),s=r(29),o=i.process,c=i.Deno,l=o&&o.versions||c&&c.version,h=l&&l.v8;h&&(a=(n=h.split("."))[0]>0&&n[0]<4?1:+(n[0]+n[1])),!a&&s&&(!(n=s.match(/Edge\\/(\\d+)/))||n[1]>=74)&&(n=s.match(/Chrome\\/(\\d+)/))&&(a=+n[1]),e.exports=a},e=>{e.exports="undefined"!=typeof navigator&&String(navigator.userAgent)||""},(e,t,r)=>{var n=r(31),a=r(17);e.exports=function(e,t){var r=e[t];return a(r)?void 0:n(r)}},(e,t,r)=>{var n=r(21),a=r(32),i=TypeError;e.exports=function(e){if(n(e))return e;throw i(a(e)+" is not a function")}},e=>{var t=String;e.exports=function(e){try{return t(e)}catch(e){return"Object"}}},(e,t,r)=>{var n=r(8),a=r(21),i=r(20),s=TypeError;e.exports=function(e,t){var r,o;if("string"===t&&a(r=e.toString)&&!i(o=n(r,e)))return o;if(a(r=e.valueOf)&&!i(o=n(r,e)))return o;if("string"!==t&&a(r=e.toString)&&!i(o=n(r,e)))return o;throw s("Can't convert object to primitive value")}},(e,t,r)=>{var n=r(4),a=r(35),i=r(39),s=r(41),o=r(27),c=r(26),l=n.Symbol,h=a("wks"),u=c?l.for||l:l&&l.withoutSetter||s;e.exports=function(e){return i(h,e)||(h[e]=o&&i(l,e)?l[e]:u("Symbol."+e)),h[e]}},(e,t,r)=>{var n=r(36),a=r(37);(e.exports=function(e,t){return a[e]||(a[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.31.1",mode:n?"pure":"global",copyright:"© 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.31.1/LICENSE",source:"https://github.com/zloirock/core-js"})},e=>{e.exports=!1},(e,t,r)=>{var n=r(4),a=r(38),i="__core-js_shared__",s=n[i]||a(i,{});e.exports=s},(e,t,r)=>{var n=r(4),a=Object.defineProperty;e.exports=function(e,t){try{a(n,e,{value:t,configurable:!0,writable:!0})}catch(r){n[e]=t}return t}},(e,t,r)=>{var n=r(14),a=r(40),i=n({}.hasOwnProperty);e.exports=Object.hasOwn||function(e,t){return i(a(e),t)}},(e,t,r)=>{var n=r(16),a=Object;e.exports=function(e){return a(n(e))}},(e,t,r)=>{var n=r(14),a=0,i=Math.random(),s=n(1..toString);e.exports=function(e){return"Symbol("+(void 0===e?"":e)+")_"+s(++a+i,36)}},(e,t,r)=>{var n=r(6),a=r(7),i=r(43);e.exports=!n&&!a((function(){return 7!=Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},(e,t,r)=>{var n=r(4),a=r(20),i=n.document,s=a(i)&&a(i.createElement);e.exports=function(e){return s?i.createElement(e):{}}},(e,t,r)=>{var n=r(6),a=r(45),i=r(11);e.exports=n?function(e,t,r){return a.f(e,t,i(1,r))}:function(e,t,r){return e[t]=r,e}},(e,t,r)=>{var n=r(6),a=r(42),i=r(46),s=r(47),o=r(18),c=TypeError,l=Object.defineProperty,h=Object.getOwnPropertyDescriptor,u="enumerable",d="configurable",f="writable";t.f=n?i?function(e,t,r){if(s(e),t=o(t),s(r),"function"==typeof e&&"prototype"===t&&"value"in r&&f in r&&!r[f]){var n=h(e,t);n&&n[f]&&(e[t]=r.value,r={configurable:d in r?r[d]:n[d],enumerable:u in r?r[u]:n[u],writable:!1})}return l(e,t,r)}:l:function(e,t,r){if(s(e),t=o(t),s(r),a)try{return l(e,t,r)}catch(e){}if("get"in r||"set"in r)throw c("Accessors not supported");return"value"in r&&(e[t]=r.value),e}},(e,t,r)=>{var n=r(6),a=r(7);e.exports=n&&a((function(){return 42!=Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype}))},(e,t,r)=>{var n=r(20),a=String,i=TypeError;e.exports=function(e){if(n(e))return e;throw i(a(e)+" is not an object")}},(e,t,r)=>{var n=r(21),a=r(45),i=r(49),s=r(38);e.exports=function(e,t,r,o){o||(o={});var c=o.enumerable,l=void 0!==o.name?o.name:t;if(n(r)&&i(r,l,o),o.global)c?e[t]=r:s(t,r);else{try{o.unsafe?e[t]&&(c=!0):delete e[t]}catch(e){}c?e[t]=r:a.f(e,t,{value:r,enumerable:!1,configurable:!o.nonConfigurable,writable:!o.nonWritable})}return e}},(e,t,r)=>{var n=r(14),a=r(7),i=r(21),s=r(39),o=r(6),c=r(50).CONFIGURABLE,l=r(51),h=r(52),u=h.enforce,d=h.get,f=String,g=Object.defineProperty,p=n("".slice),m=n("".replace),b=n([].join),y=o&&!a((function(){return 8!==g((function(){}),"length",{value:8}).length})),w=String(String).split("String"),v=e.exports=function(e,t,r){"Symbol("===p(f(t),0,7)&&(t="["+m(f(t),/^Symbol\\(([^)]*)\\)/,"$1")+"]"),r&&r.getter&&(t="get "+t),r&&r.setter&&(t="set "+t),(!s(e,"name")||c&&e.name!==t)&&(o?g(e,"name",{value:t,configurable:!0}):e.name=t),y&&r&&s(r,"arity")&&e.length!==r.arity&&g(e,"length",{value:r.arity});try{r&&s(r,"constructor")&&r.constructor?o&&g(e,"prototype",{writable:!1}):e.prototype&&(e.prototype=void 0)}catch(e){}var n=u(e);return s(n,"source")||(n.source=b(w,"string"==typeof t?t:"")),e};Function.prototype.toString=v((function(){return i(this)&&d(this).source||l(this)}),"toString")},(e,t,r)=>{var n=r(6),a=r(39),i=Function.prototype,s=n&&Object.getOwnPropertyDescriptor,o=a(i,"name"),c=o&&"something"===function(){}.name,l=o&&(!n||n&&s(i,"name").configurable);e.exports={EXISTS:o,PROPER:c,CONFIGURABLE:l}},(e,t,r)=>{var n=r(14),a=r(21),i=r(37),s=n(Function.toString);a(i.inspectSource)||(i.inspectSource=function(e){return s(e)}),e.exports=i.inspectSource},(e,t,r)=>{var n,a,i,s=r(53),o=r(4),c=r(20),l=r(44),h=r(39),u=r(37),d=r(54),f=r(55),g="Object already initialized",p=o.TypeError,m=o.WeakMap;if(s||u.state){var b=u.state||(u.state=new m);b.get=b.get,b.has=b.has,b.set=b.set,n=function(e,t){if(b.has(e))throw p(g);return t.facade=e,b.set(e,t),t},a=function(e){return b.get(e)||{}},i=function(e){return b.has(e)}}else{var y=d("state");f[y]=!0,n=function(e,t){if(h(e,y))throw p(g);return t.facade=e,l(e,y,t),t},a=function(e){return h(e,y)?e[y]:{}},i=function(e){return h(e,y)}}e.exports={set:n,get:a,has:i,enforce:function(e){return i(e)?a(e):n(e,{})},getterFor:function(e){return function(t){var r;if(!c(t)||(r=a(t)).type!==e)throw p("Incompatible receiver, "+e+" required");return r}}}},(e,t,r)=>{var n=r(4),a=r(21),i=n.WeakMap;e.exports=a(i)&&/native code/.test(String(i))},(e,t,r)=>{var n=r(35),a=r(41),i=n("keys");e.exports=function(e){return i[e]||(i[e]=a(e))}},e=>{e.exports={}},(e,t,r)=>{var n=r(39),a=r(57),i=r(5),s=r(45);e.exports=function(e,t,r){for(var o=a(t),c=s.f,l=i.f,h=0;h{var n=r(24),a=r(14),i=r(58),s=r(67),o=r(47),c=a([].concat);e.exports=n("Reflect","ownKeys")||function(e){var t=i.f(o(e)),r=s.f;return r?c(t,r(e)):t}},(e,t,r)=>{var n=r(59),a=r(66).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return n(e,a)}},(e,t,r)=>{var n=r(14),a=r(39),i=r(12),s=r(60).indexOf,o=r(55),c=n([].push);e.exports=function(e,t){var r,n=i(e),l=0,h=[];for(r in n)!a(o,r)&&a(n,r)&&c(h,r);for(;t.length>l;)a(n,r=t[l++])&&(~s(h,r)||c(h,r));return h}},(e,t,r)=>{var n=r(12),a=r(61),i=r(64),s=function(e){return function(t,r,s){var o,c=n(t),l=i(c),h=a(s,l);if(e&&r!=r){for(;l>h;)if((o=c[h++])!=o)return!0}else for(;l>h;h++)if((e||h in c)&&c[h]===r)return e||h||0;return!e&&-1}};e.exports={includes:s(!0),indexOf:s(!1)}},(e,t,r)=>{var n=r(62),a=Math.max,i=Math.min;e.exports=function(e,t){var r=n(e);return r<0?a(r+t,0):i(r,t)}},(e,t,r)=>{var n=r(63);e.exports=function(e){var t=+e;return t!=t||0===t?0:n(t)}},e=>{var t=Math.ceil,r=Math.floor;e.exports=Math.trunc||function(e){var n=+e;return(n>0?r:t)(n)}},(e,t,r)=>{var n=r(65);e.exports=function(e){return n(e.length)}},(e,t,r)=>{var n=r(62),a=Math.min;e.exports=function(e){return e>0?a(n(e),9007199254740991):0}},e=>{e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},(e,t)=>{t.f=Object.getOwnPropertySymbols},(e,t,r)=>{var n=r(7),a=r(21),i=/#|\\.prototype\\./,s=function(e,t){var r=c[o(e)];return r==h||r!=l&&(a(t)?n(t):!!t)},o=s.normalize=function(e){return String(e).replace(i,".").toLowerCase()},c=s.data={},l=s.NATIVE="N",h=s.POLYFILL="P";e.exports=s},(e,t,r)=>{var n=r(9),a=Function.prototype,i=a.apply,s=a.call;e.exports="object"==typeof Reflect&&Reflect.apply||(n?s.bind(i):function(){return s.apply(i,arguments)})},(e,t,r)=>{var n=r(24),a=r(39),i=r(44),s=r(25),o=r(71),c=r(56),l=r(74),h=r(75),u=r(76),d=r(80),f=r(81),g=r(6),p=r(36);e.exports=function(e,t,r,m){var b="stackTraceLimit",y=m?2:1,w=e.split("."),v=w[w.length-1],x=n.apply(null,w);if(x){var S=x.prototype;if(!p&&a(S,"cause")&&delete S.cause,!r)return x;var A=n("Error"),k=t((function(e,t){var r=u(m?t:e,void 0),n=m?new x(e):new x;return void 0!==r&&i(n,"message",r),f(n,k,n.stack,2),this&&s(S,this)&&h(n,this,k),arguments.length>y&&d(n,arguments[y]),n}));if(k.prototype=S,"Error"!==v?o?o(k,A):c(k,A,{name:!0}):g&&b in x&&(l(k,x,b),l(k,x,"prepareStackTrace")),c(k,x),!p)try{S.name!==v&&i(S,"name",v),S.constructor=k}catch(e){}return k}}},(e,t,r)=>{var n=r(72),a=r(47),i=r(73);e.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,r={};try{(e=n(Object.prototype,"__proto__","set"))(r,[]),t=r instanceof Array}catch(e){}return function(r,n){return a(r),i(n),t?e(r,n):r.__proto__=n,r}}():void 0)},(e,t,r)=>{var n=r(14),a=r(31);e.exports=function(e,t,r){try{return n(a(Object.getOwnPropertyDescriptor(e,t)[r]))}catch(e){}}},(e,t,r)=>{var n=r(21),a=String,i=TypeError;e.exports=function(e){if("object"==typeof e||n(e))return e;throw i("Can't set "+a(e)+" as a prototype")}},(e,t,r)=>{var n=r(45).f;e.exports=function(e,t,r){r in e||n(e,r,{configurable:!0,get:function(){return t[r]},set:function(e){t[r]=e}})}},(e,t,r)=>{var n=r(21),a=r(20),i=r(71);e.exports=function(e,t,r){var s,o;return i&&n(s=t.constructor)&&s!==r&&a(o=s.prototype)&&o!==r.prototype&&i(e,o),e}},(e,t,r)=>{var n=r(77);e.exports=function(e,t){return void 0===e?arguments.length<2?"":t:n(e)}},(e,t,r)=>{var n=r(78),a=String;e.exports=function(e){if("Symbol"===n(e))throw TypeError("Cannot convert a Symbol value to a string");return a(e)}},(e,t,r)=>{var n=r(79),a=r(21),i=r(15),s=r(34)("toStringTag"),o=Object,c="Arguments"==i(function(){return arguments}());e.exports=n?i:function(e){var t,r,n;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(r=function(e,t){try{return e[t]}catch(e){}}(t=o(e),s))?r:c?i(t):"Object"==(n=i(t))&&a(t.callee)?"Arguments":n}},(e,t,r)=>{var n={};n[r(34)("toStringTag")]="z",e.exports="[object z]"===String(n)},(e,t,r)=>{var n=r(20),a=r(44);e.exports=function(e,t){n(t)&&"cause"in t&&a(e,"cause",t.cause)}},(e,t,r)=>{var n=r(44),a=r(82),i=r(83),s=Error.captureStackTrace;e.exports=function(e,t,r,o){i&&(s?s(e,t):n(e,"stack",a(r,o)))}},(e,t,r)=>{var n=r(14),a=Error,i=n("".replace),s=String(a("zxcasd").stack),o=/\\n\\s*at [^:]*:[^\\n]*/,c=o.test(s);e.exports=function(e,t){if(c&&"string"==typeof e&&!a.prepareStackTrace)for(;t--;)e=i(e,o,"");return e}},(e,t,r)=>{var n=r(7),a=r(11);e.exports=!n((function(){var e=Error("a");return!("stack"in e)||(Object.defineProperty(e,"stack",a(1,7)),7!==e.stack)}))},(e,t,r)=>{var n=r(85),a=r(90).findLast,i=n.aTypedArray;(0,n.exportTypedArrayMethod)("findLast",(function(e){return a(i(this),e,arguments.length>1?arguments[1]:void 0)}))},(e,t,r)=>{var n,a,i,s=r(86),o=r(6),c=r(4),l=r(21),h=r(20),u=r(39),d=r(78),f=r(32),g=r(44),p=r(48),m=r(87),b=r(25),y=r(88),w=r(71),v=r(34),x=r(41),S=r(52),A=S.enforce,k=S.get,C=c.Int8Array,O=C&&C.prototype,F=c.Uint8ClampedArray,I=F&&F.prototype,T=C&&y(C),M=O&&y(O),E=Object.prototype,P=c.TypeError,R=v("toStringTag"),N=x("TYPED_ARRAY_TAG"),D="TypedArrayConstructor",B=s&&!!w&&"Opera"!==d(c.opera),L=!1,_={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},j={BigInt64Array:8,BigUint64Array:8},U=function(e){if(!h(e))return!1;var t=d(e);return u(_,t)||u(j,t)};for(n in _)(i=(a=c[n])&&a.prototype)?A(i)[D]=a:B=!1;for(n in j)(i=(a=c[n])&&a.prototype)&&(A(i)[D]=a);if((!B||!l(T)||T===Function.prototype)&&(T=function(){throw P("Incorrect invocation")},B))for(n in _)c[n]&&w(c[n],T);if((!B||!M||M===E)&&(M=T.prototype,B))for(n in _)c[n]&&w(c[n].prototype,M);if(B&&y(I)!==M&&w(I,M),o&&!u(M,R))for(n in L=!0,m(M,R,{configurable:!0,get:function(){return h(this)?this[N]:void 0}}),_)c[n]&&g(c[n],N,n);e.exports={NATIVE_ARRAY_BUFFER_VIEWS:B,TYPED_ARRAY_TAG:L&&N,aTypedArray:function(e){if(U(e))return e;throw P("Target is not a typed array")},aTypedArrayConstructor:function(e){if(l(e)&&(!w||b(T,e)))return e;throw P(f(e)+" is not a typed array constructor")},exportTypedArrayMethod:function(e,t,r,n){if(o){if(r)for(var a in _){var i=c[a];if(i&&u(i.prototype,e))try{delete i.prototype[e]}catch(r){try{i.prototype[e]=t}catch(e){}}}M[e]&&!r||p(M,e,r?t:B&&O[e]||t,n)}},exportTypedArrayStaticMethod:function(e,t,r){var n,a;if(o){if(w){if(r)for(n in _)if((a=c[n])&&u(a,e))try{delete a[e]}catch(e){}if(T[e]&&!r)return;try{return p(T,e,r?t:B&&T[e]||t)}catch(e){}}for(n in _)!(a=c[n])||a[e]&&!r||p(a,e,t)}},getTypedArrayConstructor:function e(t){var r=y(t);if(h(r)){var n=k(r);return n&&u(n,D)?n[D]:e(r)}},isView:function(e){if(!h(e))return!1;var t=d(e);return"DataView"===t||u(_,t)||u(j,t)},isTypedArray:U,TypedArray:T,TypedArrayPrototype:M}},e=>{e.exports="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView},(e,t,r)=>{var n=r(49),a=r(45);e.exports=function(e,t,r){return r.get&&n(r.get,t,{getter:!0}),r.set&&n(r.set,t,{setter:!0}),a.f(e,t,r)}},(e,t,r)=>{var n=r(39),a=r(21),i=r(40),s=r(54),o=r(89),c=s("IE_PROTO"),l=Object,h=l.prototype;e.exports=o?l.getPrototypeOf:function(e){var t=i(e);if(n(t,c))return t[c];var r=t.constructor;return a(r)&&t instanceof r?r.prototype:t instanceof l?h:null}},(e,t,r)=>{var n=r(7);e.exports=!n((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},(e,t,r)=>{var n=r(91),a=r(13),i=r(40),s=r(64),o=function(e){var t=1==e;return function(r,o,c){for(var l,h=i(r),u=a(h),d=n(o,c),f=s(u);f-- >0;)if(d(l=u[f],f,h))switch(e){case 0:return l;case 1:return f}return t?-1:void 0}};e.exports={findLast:o(0),findLastIndex:o(1)}},(e,t,r)=>{var n=r(92),a=r(31),i=r(9),s=n(n.bind);e.exports=function(e,t){return a(e),void 0===t?e:i?s(e,t):function(){return e.apply(t,arguments)}}},(e,t,r)=>{var n=r(15),a=r(14);e.exports=function(e){if("Function"===n(e))return a(e)}},(e,t,r)=>{var n=r(85),a=r(90).findLastIndex,i=n.aTypedArray;(0,n.exportTypedArrayMethod)("findLastIndex",(function(e){return a(i(this),e,arguments.length>1?arguments[1]:void 0)}))},(e,t,r)=>{var n=r(4),a=r(8),i=r(85),s=r(64),o=r(95),c=r(40),l=r(7),h=n.RangeError,u=n.Int8Array,d=u&&u.prototype,f=d&&d.set,g=i.aTypedArray,p=i.exportTypedArrayMethod,m=!l((function(){var e=new Uint8ClampedArray(2);return a(f,e,{length:1,0:3},1),3!==e[1]})),b=m&&i.NATIVE_ARRAY_BUFFER_VIEWS&&l((function(){var e=new u(2);return e.set(1),e.set("2",1),0!==e[0]||2!==e[1]}));p("set",(function(e){g(this);var t=o(arguments.length>1?arguments[1]:void 0,1),r=c(e);if(m)return a(f,this,r,t);var n=this.length,i=s(r),l=0;if(i+t>n)throw h("Wrong length");for(;l{var n=r(96),a=RangeError;e.exports=function(e,t){var r=n(e);if(r%t)throw a("Wrong offset");return r}},(e,t,r)=>{var n=r(62),a=RangeError;e.exports=function(e){var t=n(e);if(t<0)throw a("The argument can't be less than 0");return t}},(e,t,r)=>{var n=r(98),a=r(85),i=a.aTypedArray,s=a.exportTypedArrayMethod,o=a.getTypedArrayConstructor;s("toReversed",(function(){return n(i(this),o(this))}))},(e,t,r)=>{var n=r(64);e.exports=function(e,t){for(var r=n(e),a=new t(r),i=0;i{var n=r(85),a=r(14),i=r(31),s=r(100),o=n.aTypedArray,c=n.getTypedArrayConstructor,l=n.exportTypedArrayMethod,h=a(n.TypedArrayPrototype.sort);l("toSorted",(function(e){void 0!==e&&i(e);var t=o(this),r=s(c(t),t);return h(r,e)}))},(e,t,r)=>{var n=r(64);e.exports=function(e,t){for(var r=0,a=n(t),i=new e(a);a>r;)i[r]=t[r++];return i}},(e,t,r)=>{var n=r(102),a=r(85),i=r(103),s=r(62),o=r(104),c=a.aTypedArray,l=a.getTypedArrayConstructor,h=a.exportTypedArrayMethod,u=!!function(){try{new Int8Array(1).with(2,{valueOf:function(){throw 8}})}catch(e){return 8===e}}();h("with",{with:function(e,t){var r=c(this),a=s(e),h=i(r)?o(t):+t;return n(r,l(r),a,h)}}.with,!u)},(e,t,r)=>{var n=r(64),a=r(62),i=RangeError;e.exports=function(e,t,r,s){var o=n(e),c=a(r),l=c<0?o+c:c;if(l>=o||l<0)throw i("Incorrect index");for(var h=new t(o),u=0;u{var n=r(78);e.exports=function(e){var t=n(e);return"BigInt64Array"==t||"BigUint64Array"==t}},(e,t,r)=>{var n=r(19),a=TypeError;e.exports=function(e){var t=n(e,"number");if("number"==typeof t)throw a("Can't convert number to bigint");return BigInt(t)}},(e,t,r)=>{var n=r(6),a=r(87),i=r(106),s=ArrayBuffer.prototype;n&&!("detached"in s)&&a(s,"detached",{configurable:!0,get:function(){return i(this)}})},(e,t,r)=>{var n=r(14),a=r(107),i=n(ArrayBuffer.prototype.slice);e.exports=function(e){if(0!==a(e))return!1;try{return i(e,0,0),!1}catch(e){return!0}}},(e,t,r)=>{var n=r(72),a=r(15),i=TypeError;e.exports=n(ArrayBuffer.prototype,"byteLength","get")||function(e){if("ArrayBuffer"!=a(e))throw i("ArrayBuffer expected");return e.byteLength}},(e,t,r)=>{var n=r(3),a=r(109);a&&n({target:"ArrayBuffer",proto:!0},{transfer:function(){return a(this,arguments.length?arguments[0]:void 0,!0)}})},(e,t,r)=>{var n=r(4),a=r(14),i=r(72),s=r(110),o=r(106),c=r(107),l=r(111),h=n.TypeError,u=n.structuredClone,d=n.ArrayBuffer,f=n.DataView,g=Math.min,p=d.prototype,m=f.prototype,b=a(p.slice),y=i(p,"resizable","get"),w=i(p,"maxByteLength","get"),v=a(m.getInt8),x=a(m.setInt8);e.exports=l&&function(e,t,r){var n=c(e),a=void 0===t?n:s(t),i=!y||!y(e);if(o(e))throw h("ArrayBuffer is detached");var l=u(e,{transfer:[e]});if(n==a&&(r||i))return l;if(n>=a&&(!r||i))return b(l,0,a);for(var p=r&&!i&&w?{maxByteLength:w(l)}:void 0,m=new d(a,p),S=new f(l),A=new f(m),k=g(a,n),C=0;C{var n=r(62),a=r(65),i=RangeError;e.exports=function(e){if(void 0===e)return 0;var t=n(e),r=a(t);if(t!==r)throw i("Wrong length or index");return r}},(e,t,r)=>{var n=r(4),a=r(7),i=r(28),s=r(112),o=r(113),c=r(114),l=n.structuredClone;e.exports=!!l&&!a((function(){if(o&&i>92||c&&i>94||s&&i>97)return!1;var e=new ArrayBuffer(8),t=l(e,{transfer:[e]});return 0!=e.byteLength||8!=t.byteLength}))},(e,t,r)=>{var n=r(113),a=r(114);e.exports=!n&&!a&&"object"==typeof window&&"object"==typeof document},e=>{e.exports="object"==typeof Deno&&Deno&&"object"==typeof Deno.version},(e,t,r)=>{var n=r(15);e.exports="undefined"!=typeof process&&"process"==n(process)},(e,t,r)=>{var n=r(3),a=r(109);a&&n({target:"ArrayBuffer",proto:!0},{transferToFixedLength:function(){return a(this,arguments.length?arguments[0]:void 0,!1)}})},(e,t,r)=>{var n=r(3),a=r(117);n({target:"Set",proto:!0,real:!0,forced:!r(125)("difference")},{difference:a})},(e,t,r)=>{var n=r(118),a=r(119),i=r(120),s=r(123),o=r(124),c=r(121),l=r(122),h=a.has,u=a.remove;e.exports=function(e){var t=n(this),r=o(e),a=i(t);return s(t)<=r.size?c(t,(function(e){r.includes(e)&&u(a,e)})):l(r.getIterator(),(function(e){h(t,e)&&u(a,e)})),a}},(e,t,r)=>{var n=r(119).has;e.exports=function(e){return n(e),e}},(e,t,r)=>{var n=r(14),a=Set.prototype;e.exports={Set,add:n(a.add),has:n(a.has),remove:n(a.delete),proto:a}},(e,t,r)=>{var n=r(119),a=r(121),i=n.Set,s=n.add;e.exports=function(e){var t=new i;return a(e,(function(e){s(t,e)})),t}},(e,t,r)=>{var n=r(14),a=r(122),i=r(119),s=i.Set,o=i.proto,c=n(o.forEach),l=n(o.keys),h=l(new s).next;e.exports=function(e,t,r){return r?a(l(e),t,h):c(e,t)}},(e,t,r)=>{var n=r(8);e.exports=function(e,t,r){for(var a,i,s=r||e.next;!(a=n(s,e)).done;)if(void 0!==(i=t(a.value)))return i}},(e,t,r)=>{var n=r(72),a=r(119);e.exports=n(a.proto,"size","get")||function(e){return e.size}},(e,t,r)=>{var n=r(31),a=r(47),i=r(8),s=r(62),o=TypeError,c=Math.max,l=function(e,t,r,n){this.set=e,this.size=t,this.has=r,this.keys=n};l.prototype={getIterator:function(){return a(i(this.keys,this.set))},includes:function(e){return i(this.has,this.set,e)}},e.exports=function(e){a(e);var t=+e.size;if(t!=t)throw o("Invalid size");return new l(e,c(s(t),0),n(e.has),n(e.keys))}},(e,t,r)=>{var n=r(24);e.exports=function(e){try{return(new(n("Set")))[e]({size:0,has:function(){return!1},keys:function(){return{next:function(){return{done:!0}}}}}),!0}catch(e){return!1}}},(e,t,r)=>{var n=r(3),a=r(7),i=r(127);n({target:"Set",proto:!0,real:!0,forced:!r(125)("intersection")||a((function(){return"3,2"!=Array.from(new Set([1,2,3]).intersection(new Set([3,2])))}))},{intersection:i})},(e,t,r)=>{var n=r(118),a=r(119),i=r(123),s=r(124),o=r(121),c=r(122),l=a.Set,h=a.add,u=a.has;e.exports=function(e){var t=n(this),r=s(e),a=new l;return i(t)>r.size?c(r.getIterator(),(function(e){u(t,e)&&h(a,e)})):o(t,(function(e){r.includes(e)&&h(a,e)})),a}},(e,t,r)=>{var n=r(3),a=r(129);n({target:"Set",proto:!0,real:!0,forced:!r(125)("isDisjointFrom")},{isDisjointFrom:a})},(e,t,r)=>{var n=r(118),a=r(119).has,i=r(123),s=r(124),o=r(121),c=r(122),l=r(130);e.exports=function(e){var t=n(this),r=s(e);if(i(t)<=r.size)return!1!==o(t,(function(e){if(r.includes(e))return!1}),!0);var h=r.getIterator();return!1!==c(h,(function(e){if(a(t,e))return l(h,"normal",!1)}))}},(e,t,r)=>{var n=r(8),a=r(47),i=r(30);e.exports=function(e,t,r){var s,o;a(e);try{if(!(s=i(e,"return"))){if("throw"===t)throw r;return r}s=n(s,e)}catch(e){o=!0,s=e}if("throw"===t)throw r;if(o)throw s;return a(s),r}},(e,t,r)=>{var n=r(3),a=r(132);n({target:"Set",proto:!0,real:!0,forced:!r(125)("isSubsetOf")},{isSubsetOf:a})},(e,t,r)=>{var n=r(118),a=r(123),i=r(121),s=r(124);e.exports=function(e){var t=n(this),r=s(e);return!(a(t)>r.size)&&!1!==i(t,(function(e){if(!r.includes(e))return!1}),!0)}},(e,t,r)=>{var n=r(3),a=r(134);n({target:"Set",proto:!0,real:!0,forced:!r(125)("isSupersetOf")},{isSupersetOf:a})},(e,t,r)=>{var n=r(118),a=r(119).has,i=r(123),s=r(124),o=r(122),c=r(130);e.exports=function(e){var t=n(this),r=s(e);if(i(t){var n=r(3),a=r(136);n({target:"Set",proto:!0,real:!0,forced:!r(125)("symmetricDifference")},{symmetricDifference:a})},(e,t,r)=>{var n=r(118),a=r(119),i=r(120),s=r(124),o=r(122),c=a.add,l=a.has,h=a.remove;e.exports=function(e){var t=n(this),r=s(e).getIterator(),a=i(t);return o(r,(function(e){l(t,e)?h(a,e):c(a,e)})),a}},(e,t,r)=>{var n=r(3),a=r(138);n({target:"Set",proto:!0,real:!0,forced:!r(125)("union")},{union:a})},(e,t,r)=>{var n=r(118),a=r(119).add,i=r(120),s=r(124),o=r(122);e.exports=function(e){var t=n(this),r=s(e).getIterator(),c=i(t);return o(r,(function(e){a(c,e)})),c}},(e,t,r)=>{var n=r(3),a=r(40),i=r(64),s=r(140),o=r(142);n({target:"Array",proto:!0,arity:1,forced:r(7)((function(){return 4294967297!==[].push.call({length:4294967296},1)}))||!function(){try{Object.defineProperty([],"length",{writable:!1}).push()}catch(e){return e instanceof TypeError}}()},{push:function(e){var t=a(this),r=i(t),n=arguments.length;o(r+n);for(var c=0;c{var n=r(6),a=r(141),i=TypeError,s=Object.getOwnPropertyDescriptor,o=n&&!function(){if(void 0!==this)return!0;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(e){return e instanceof TypeError}}();e.exports=o?function(e,t){if(a(e)&&!s(e,"length").writable)throw i("Cannot set read only .length");return e.length=t}:function(e,t){return e.length=t}},(e,t,r)=>{var n=r(15);e.exports=Array.isArray||function(e){return"Array"==n(e)}},e=>{var t=TypeError;e.exports=function(e){if(e>9007199254740991)throw t("Maximum allowed index exceeded");return e}},(e,t,r)=>{var n=r(3),a=r(4),i=r(87),s=r(6),o=TypeError,c=Object.defineProperty,l=a.self!==a;try{if(s){var h=Object.getOwnPropertyDescriptor(a,"self");!l&&h&&h.get&&h.enumerable||i(a,"self",{get:function(){return a},set:function(e){if(this!==a)throw o("Illegal invocation");c(a,"self",{value:e,writable:!0,configurable:!0,enumerable:!0})},configurable:!0,enumerable:!0})}else n({global:!0,simple:!0,forced:l},{self:a})}catch(e){}},(e,t,r)=>{var n;Object.defineProperty(t,"__esModule",{value:!0}),t.VerbosityLevel=t.Util=t.UnknownErrorException=t.UnexpectedResponseException=t.TextRenderingMode=t.RenderingIntentFlag=t.PromiseCapability=t.PermissionFlag=t.PasswordResponses=t.PasswordException=t.PageActionEventType=t.OPS=t.MissingPDFException=t.MAX_IMAGE_SIZE_TO_CACHE=t.LINE_FACTOR=t.LINE_DESCENT_FACTOR=t.InvalidPDFException=t.ImageKind=t.IDENTITY_MATRIX=t.FormatError=t.FeatureTest=t.FONT_IDENTITY_MATRIX=t.DocumentActionEventType=t.CMapCompressionType=t.BaseException=t.BASELINE_FACTOR=t.AnnotationType=t.AnnotationReplyType=t.AnnotationMode=t.AnnotationFlag=t.AnnotationFieldFlag=t.AnnotationEditorType=t.AnnotationEditorPrefix=t.AnnotationEditorParamsType=t.AnnotationBorderStyleType=t.AnnotationActionEventType=t.AbortException=void 0,t.assert=function(e,t){e||l(t)},t.bytesToString=g,t.createValidAbsoluteUrl=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if(!e)return null;try{if(r&&"string"==typeof e){if(r.addDefaultProtocol&&e.startsWith("www.")){const t=e.match(/\\./g);(null==t?void 0:t.length)>=2&&(e="http://".concat(e))}if(r.tryConvertEncoding)try{e=y(e)}catch(e){}}const n=t?new URL(e,t):new URL(e);if(function(e){switch(null==e?void 0:e.protocol){case"http:":case"https:":case"ftp:":case"mailto:":case"tel:":return!0;default:return!1}}(n))return n}catch(e){}return null},t.getModificationDate=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:new Date;return[e.getUTCFullYear().toString(),(e.getUTCMonth()+1).toString().padStart(2,"0"),e.getUTCDate().toString().padStart(2,"0"),e.getUTCHours().toString().padStart(2,"0"),e.getUTCMinutes().toString().padStart(2,"0"),e.getUTCSeconds().toString().padStart(2,"0")].join("")},t.getUuid=function(){var e,t;if("undefined"!=typeof crypto&&"function"==typeof(null===(e=crypto)||void 0===e?void 0:e.randomUUID))return crypto.randomUUID();const r=new Uint8Array(32);if("undefined"!=typeof crypto&&"function"==typeof(null===(t=crypto)||void 0===t?void 0:t.getRandomValues))crypto.getRandomValues(r);else for(let e=0;e<32;e++)r[e]=Math.floor(255*Math.random());return g(r)},t.getVerbosityLevel=function(){return s},t.info=function(e){s>=i.INFOS&&console.log("Info: ".concat(e))},t.isArrayBuffer=function(e){return"object"==typeof e&&void 0!==(null==e?void 0:e.byteLength)},t.isArrayEqual=function(e,t){if(e.length!==t.length)return!1;for(let r=0,n=e.length;rt?t.normalize("NFKC"):v.get(r)))},t.objectFromMap=function(e){const t=Object.create(null);for(const[r,n]of e)t[r]=n;return t},t.objectSize=function(e){return Object.keys(e).length},t.setVerbosityLevel=function(e){Number.isInteger(e)&&(s=e)},t.shadow=d,t.string32=function(e){return String.fromCharCode(e>>24&255,e>>16&255,e>>8&255,255&e)},t.stringToBytes=p,t.stringToPDFString=function(e){if(e[0]>="ï"){let t;if("þ"===e[0]&&"ÿ"===e[1]?t="utf-16be":"ÿ"===e[0]&&"þ"===e[1]?t="utf-16le":"ï"===e[0]&&"»"===e[1]&&"¿"===e[2]&&(t="utf-8"),t)try{const r=new TextDecoder(t,{fatal:!0}),n=p(e);return r.decode(n)}catch(e){o('stringToPDFString: "'.concat(e,'".'))}}const t=[];for(let r=0,n=e.length;r=i.WARNINGS&&console.log("Warning: ".concat(e))}function l(e){throw new Error(e)}function d(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];return Object.defineProperty(e,t,{value:r,enumerable:!n,configurable:!0,writable:!1}),r}const f=function(){function e(t,r){this.constructor===e&&l("Cannot initialize BaseException."),this.message=t,this.name=r}return e.prototype=new Error,e.constructor=e,e}();function g(e){"object"==typeof e&&void 0!==(null==e?void 0:e.length)||l("Invalid argument for bytesToString");const t=e.length,r=8192;if(te.toString(16).padStart(2,"0")));t.Util=class{static makeHexColor(e,t,r){return"#".concat(m[e]).concat(m[t]).concat(m[r])}static scaleMinMax(e,t){let r;e[0]?(e[0]<0&&(r=t[0],t[0]=t[1],t[1]=r),t[0]*=e[0],t[1]*=e[0],e[3]<0&&(r=t[2],t[2]=t[3],t[3]=r),t[2]*=e[3],t[3]*=e[3]):(r=t[0],t[0]=t[2],t[2]=r,r=t[1],t[1]=t[3],t[3]=r,e[1]<0&&(r=t[2],t[2]=t[3],t[3]=r),t[2]*=e[1],t[3]*=e[1],e[2]<0&&(r=t[0],t[0]=t[1],t[1]=r),t[0]*=e[2],t[1]*=e[2]),t[0]+=e[4],t[1]+=e[4],t[2]+=e[5],t[3]+=e[5]}static transform(e,t){return[e[0]*t[0]+e[2]*t[1],e[1]*t[0]+e[3]*t[1],e[0]*t[2]+e[2]*t[3],e[1]*t[2]+e[3]*t[3],e[0]*t[4]+e[2]*t[5]+e[4],e[1]*t[4]+e[3]*t[5]+e[5]]}static applyTransform(e,t){return[e[0]*t[0]+e[1]*t[2]+t[4],e[0]*t[1]+e[1]*t[3]+t[5]]}static applyInverseTransform(e,t){const r=t[0]*t[3]-t[1]*t[2];return[(e[0]*t[3]-e[1]*t[2]+t[2]*t[5]-t[4]*t[3])/r,(-e[0]*t[1]+e[1]*t[0]+t[4]*t[1]-t[5]*t[0])/r]}static getAxialAlignedBoundingBox(e,t){const r=this.applyTransform(e,t),n=this.applyTransform(e.slice(2,4),t),a=this.applyTransform([e[0],e[3]],t),i=this.applyTransform([e[2],e[1]],t);return[Math.min(r[0],n[0],a[0],i[0]),Math.min(r[1],n[1],a[1],i[1]),Math.max(r[0],n[0],a[0],i[0]),Math.max(r[1],n[1],a[1],i[1])]}static inverseTransform(e){const t=e[0]*e[3]-e[1]*e[2];return[e[3]/t,-e[1]/t,-e[2]/t,e[0]/t,(e[2]*e[5]-e[4]*e[3])/t,(e[4]*e[1]-e[5]*e[0])/t]}static singularValueDecompose2dScale(e){const t=[e[0],e[2],e[1],e[3]],r=e[0]*t[0]+e[1]*t[2],n=e[0]*t[1]+e[1]*t[3],a=e[2]*t[0]+e[3]*t[2],i=e[2]*t[1]+e[3]*t[3],s=(r+i)/2,o=Math.sqrt((r+i)**2-4*(r*i-a*n))/2,c=s+o||1,l=s-o||1;return[Math.sqrt(c),Math.sqrt(l)]}static normalizeRect(e){const t=e.slice(0);return e[0]>e[2]&&(t[0]=e[2],t[2]=e[0]),e[1]>e[3]&&(t[1]=e[3],t[3]=e[1]),t}static intersect(e,t){const r=Math.max(Math.min(e[0],e[2]),Math.min(t[0],t[2])),n=Math.min(Math.max(e[0],e[2]),Math.max(t[0],t[2]));if(r>n)return null;const a=Math.max(Math.min(e[1],e[3]),Math.min(t[1],t[3])),i=Math.min(Math.max(e[1],e[3]),Math.max(t[1],t[3]));return a>i?null:[r,a,n,i]}static bezierBoundingBox(e,t,r,n,a,i,s,o){const c=[],l=[[],[]];let h,u,d,f,g,p,m,b;for(let l=0;l<2;++l)if(0===l?(u=6*e-12*r+6*a,h=-3*e+9*r-9*a+3*s,d=3*r-3*e):(u=6*t-12*n+6*i,h=-3*t+9*n-9*i+3*o,d=3*n-3*t),Math.abs(h)<1e-12){if(Math.abs(u)<1e-12)continue;f=-d/u,0{this.resolve=t=>{u(this,n,!0),e(t)},this.reject=e=>{u(this,n,!0),t(e)}}))}get settled(){return h(this,n)}});let w=null,v=null},(e,t,r)=>{var n=r(48),a=r(14),i=r(77),s=r(146),o=URLSearchParams,c=o.prototype,l=a(c.append),h=a(c.delete),u=a(c.forEach),d=a([].push),f=new o("a=1&a=2");f.delete("a",1),f+""!="a=2"&&n(c,"delete",(function(e){var t=arguments.length,r=t<2?void 0:arguments[1];if(t&&void 0===r)return h(this,e);var n=[];u(this,(function(e,t){d(n,{key:t,value:e})})),s(t,1);for(var a,o=i(e),c=i(r),f=0,g=0,p=!1,m=n.length;f{var t=TypeError;e.exports=function(e,r){if(e{var n=r(48),a=r(14),i=r(77),s=r(146),o=URLSearchParams,c=o.prototype,l=a(c.getAll),h=a(c.has);new o("a=1").has("a",2)&&n(c,"has",(function(e){var t=arguments.length,r=t<2?void 0:arguments[1];if(t&&void 0===r)return h(this,e);var n=l(this,e);s(t,1);for(var a=i(r),o=0;o{var n=r(6),a=r(14),i=r(87),s=URLSearchParams.prototype,o=a(s.forEach);n&&!("size"in s)&&i(s,"size",{get:function(){var e=0;return o(this,(function(){e++})),e},configurable:!0,enumerable:!0})},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.XRefParseException=t.XRefEntryException=t.ParserEOFException=t.PDF_VERSION_REGEXP=t.MissingDataException=void 0,t.arrayBuffersToBytes=function(e){const t=e.length;if(0===t)return new Uint8Array(0);if(1===t)return new Uint8Array(e[0]);let r=0;for(let n=0;n=0;t--){const n=s[t];if(n instanceof a.Dict)for(const t of n.getKeys()){const s=r[t];if(!s)continue;const o=[];d(n.getRaw(t),e,o,new a.RefSet),o.length>0&&(i[s]=o)}}if(t.has("A")){const r=[];d(t.get("A"),e,r,new a.RefSet),r.length>0&&(i.Action=r)}return(0,n.objectSize)(i)>0?i:null},t.encodeToXmlString=function(e){const t=[];let r=0;for(let n=0,a=e.length;n55295&&(a<57344||a>65533)&&n++,r=n+1}return 0===t.length?e:(r126||35===a||40===a||41===a||60===a||62===a||91===a||93===a||123===a||125===a||47===a||37===a)&&(r"\\n"===e?"\\\\n":"\\r"===e?"\\\\r":"\\\\".concat(e)))},t.getInheritableProperty=h,t.getLookupTableFactory=function(e){let t;return function(){return e&&(t=Object.create(null),e(t),e=null),t}},t.getNewAnnotationsMap=function(e){if(!e)return null;const t=new Map;for(const[r,a]of e){if(!r.startsWith(n.AnnotationEditorPrefix))continue;let e=t.get(a.pageIndex);e||(e=[],t.set(a.pageIndex,e)),e.push(a)}return t.size>0?t:null},t.getRotationMatrix=function(e,t,r){switch(e){case 90:return[0,1,-1,0,t,0];case 180:return[-1,0,0,-1,t,r];case 270:return[0,-1,1,0,0,r];default:throw new Error("Invalid rotation")}},t.isAscii=function(e){return/^[\\x00-\\x7F]*$/.test(e)},t.isWhiteSpace=function(e){return 32===e||9===e||13===e||10===e},t.log2=function(e){return e<=0?0:Math.ceil(Math.log2(e))},t.numberToString=function(e){if(Number.isInteger(e))return e.toString();const t=Math.round(100*e);return t%100==0?(t/100).toString():t%10==0?e.toFixed(1):e.toFixed(2)},t.parseXFAPath=function(e){const t=/(.+)\\[(\\d+)\\]$/;return e.split(".").map((e=>{const r=e.match(t);return r?{name:r[1],pos:parseInt(r[2],10)}:{name:e,pos:0}}))},t.readInt8=function(e,t){return e[t]<<24>>24},t.readUint16=function(e,t){return e[t]<<8|e[t+1]},t.readUint32=function(e,t){return(e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3])>>>0},t.recoverJsURL=function(e){const t=new RegExp("^\\\\s*("+["app.launchURL","window.open","xfa.host.gotoURL"].join("|").replaceAll(".","\\\\.")+")\\\\((?:'|\\")([^'\\"]*)(?:'|\\")(?:,\\\\s*(\\\\w+)\\\\)|\\\\))","i").exec(e);if(null!=t&&t[2]){const e=t[2];let r=!1;return"true"===t[3]&&"app.launchURL"===t[1]&&(r=!0),{url:e,newWindow:r}}return null},t.stringToUTF16HexString=function(e){const t=[];for(let r=0,n=e.length;r>8&255).toString(16).padStart(2,"0"),(255&n).toString(16).padStart(2,"0"))}return t.join("")},t.stringToUTF16String=function(e){const t=[];arguments.length>1&&void 0!==arguments[1]&&arguments[1]&&t.push("þÿ");for(let r=0,n=e.length;r>8&255),String.fromCharCode(255&n))}return t.join("")},t.toRomanNumerals=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];(0,n.assert)(Number.isInteger(e)&&e>0,"The number should be a positive integer.");const r=[];let a;for(;e>=1e3;)e-=1e3,r.push("M");a=e/100|0,e%=100,r.push(u[a]),a=e/10|0,e%=10,r.push(u[10+a]),r.push(u[20+e]);const i=r.join("");return t?i.toLowerCase():i},t.validateCSSFont=function(e){const t=new Set(["100","200","300","400","500","600","700","800","900","1000","normal","bold","bolder","lighter"]),{fontFamily:r,fontWeight:n,italicAngle:a}=e;if(!g(r,!0))return!1;const i=n?n.toString():"";e.fontWeight=t.has(i)?i:"400";const s=parseFloat(a);return e.italicAngle=isNaN(s)||s<-90||s>90?"14":a.toString(),!0},t.validateFontName=g,r(84),r(93),r(94),r(97),r(99),r(101),r(105),r(108),r(115),r(139),r(116),r(126),r(128),r(131),r(133),r(135),r(137),r(2);var n=r(144),a=r(150),i=r(151);t.PDF_VERSION_REGEXP=/^[1-9]\\.\\d$/;class s extends n.BaseException{constructor(e,t){super("Missing data [".concat(e,", ").concat(t,")"),"MissingDataException"),this.begin=e,this.end=t}}t.MissingDataException=s;class o extends n.BaseException{constructor(e){super(e,"ParserEOFException")}}t.ParserEOFException=o;class c extends n.BaseException{constructor(e){super(e,"XRefEntryException")}}t.XRefEntryException=c;class l extends n.BaseException{constructor(e){super(e,"XRefParseException")}}function h(e){let t,{dict:r,key:n,getArray:i=!1,stopWhenFound:s=!0}=e;const o=new a.RefSet;for(;r instanceof a.Dict&&(!r.objId||!o.has(r.objId));){r.objId&&o.put(r.objId);const e=i?r.getArray(n):r.get(n);if(void 0!==e){if(s)return e;(t||(t=[])).push(e)}r=r.get("Parent")}return t}t.XRefParseException=l;const u=["","C","CC","CCC","CD","D","DC","DCC","DCCC","CM","","X","XX","XXX","XL","L","LX","LXX","LXXX","XC","","I","II","III","IV","V","VI","VII","VIII","IX"];function d(e,t,r,s){if(!e)return;let o=null;if(e instanceof a.Ref){if(s.has(e))return;o=e,s.put(o),e=t.fetch(e)}if(Array.isArray(e))for(const n of e)d(n,t,r,s);else if(e instanceof a.Dict){if((0,a.isName)(e.get("S"),"JavaScript")){const t=e.get("JS");let a;t instanceof i.BaseStream?a=t.getString():"string"==typeof t&&(a=t),a&&(a=(0,n.stringToPDFString)(a).replaceAll("\\0","")),a&&r.push(a)}d(e.getRaw("Next"),t,r,s)}o&&s.remove(o)}const f={60:"<",62:">",38:"&",34:""",39:"'"};function g(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const r=/^("|').*("|')$/.exec(e);if(r&&r[1]===r[2]){if(new RegExp("[^\\\\\\\\]".concat(r[1])).test(e.slice(1,-1)))return t&&(0,n.warn)("FontFamily contains unescaped ".concat(r[1],": ").concat(e,".")),!1}else for(const r of e.split(/[ \\t]+/))if(/^(\\d|(-(\\d|-)))/.test(r)||!/^[\\w-\\\\]+$/.test(r))return t&&(0,n.warn)("FontFamily contains invalid : ".concat(e,".")),!1;return!0}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.RefSetCache=t.RefSet=t.Ref=t.Name=t.EOF=t.Dict=t.Cmd=t.CIRCULAR_REF=void 0,t.clearPrimitiveCaches=function(){s=Object.create(null),o=Object.create(null),c=Object.create(null)},t.isCmd=function(e,t){return e instanceof h&&(void 0===t||e.cmd===t)},t.isDict=function(e,t){return e instanceof d&&(void 0===t||m(e.get("Type"),t))},t.isName=m,t.isRefsEqual=function(e,t){return e.num===t.num&&e.gen===t.gen},r(139),r(116),r(126),r(128),r(131),r(133),r(135),r(137);var n=r(144);const a=Symbol("CIRCULAR_REF");t.CIRCULAR_REF=a;const i=Symbol("EOF");t.EOF=i;let s=Object.create(null),o=Object.create(null),c=Object.create(null);class l{constructor(e){this.name=e}static get(e){var t;return(t=o)[e]||(t[e]=new l(e))}}t.Name=l;class h{constructor(e){this.cmd=e}static get(e){var t;return(t=s)[e]||(t[e]=new h(e))}}t.Cmd=h;const u=function(){return u};class d{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;this._map=Object.create(null),this.xref=e,this.objId=null,this.suppressEncryption=!1,this.__nonSerializable__=u}assignXref(e){this.xref=e}get size(){return Object.keys(this._map).length}get(e,t,r){let n=this._map[e];return void 0===n&&void 0!==t&&(n=this._map[t],void 0===n&&void 0!==r&&(n=this._map[r])),n instanceof f&&this.xref?this.xref.fetch(n,this.suppressEncryption):n}async getAsync(e,t,r){let n=this._map[e];return void 0===n&&void 0!==t&&(n=this._map[t],void 0===n&&void 0!==r&&(n=this._map[r])),n instanceof f&&this.xref?this.xref.fetchAsync(n,this.suppressEncryption):n}getArray(e,t,r){let n=this._map[e];if(void 0===n&&void 0!==t&&(n=this._map[t],void 0===n&&void 0!==r&&(n=this._map[r])),n instanceof f&&this.xref&&(n=this.xref.fetch(n,this.suppressEncryption)),Array.isArray(n)){n=n.slice();for(let e=0,t=n.length;e{(0,n.unreachable)("Should not call \`set\` on the empty dictionary.")},(0,n.shadow)(this,"empty",e)}static merge(e){let{xref:t,dictArray:r,mergeSubDicts:n=!1}=e;const a=new d(t),i=new Map;for(const e of r)if(e instanceof d)for(const[t,r]of Object.entries(e._map)){let e=i.get(t);if(void 0===e)e=[],i.set(t,e);else if(!(n&&r instanceof d))continue;e.push(r)}for(const[e,r]of i){if(1===r.length||!(r[0]instanceof d)){a._map[e]=r[0];continue}const n=new d(t);for(const e of r)for(const[t,r]of Object.entries(e._map))void 0===n._map[t]&&(n._map[t]=r);n.size>0&&(a._map[e]=n)}return i.clear(),a.size>0?a:d.empty}}t.Dict=d;class f{constructor(e,t){this.num=e,this.gen=t}toString(){return 0===this.gen?"".concat(this.num,"R"):"".concat(this.num,"R").concat(this.gen)}static fromString(e){const t=c[e];if(t)return t;const r=/^(\\d+)R(\\d*)$/.exec(e);return r&&"0"!==r[1]?c[e]=new f(parseInt(r[1]),r[2]?parseInt(r[2]):0):null}static get(e,t){var r;const n=0===t?"".concat(e,"R"):"".concat(e,"R").concat(t);return(r=c)[n]||(r[n]=new f(e,t))}}t.Ref=f;class g{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;this._set=new Set(null==e?void 0:e._set)}has(e){return this._set.has(e.toString())}put(e){this._set.add(e.toString())}remove(e){this._set.delete(e.toString())}[Symbol.iterator](){return this._set.values()}clear(){this._set.clear()}}t.RefSet=g;class p{constructor(){this._map=new Map}get size(){return this._map.size}get(e){return this._map.get(e.toString())}has(e){return this._map.has(e.toString())}put(e,t){this._map.set(e.toString(),t)}putAlias(e,t){this._map.set(e.toString(),this.get(t))}[Symbol.iterator](){return this._map.values()}clear(){this._map.clear()}}function m(e,t){return e instanceof l&&(void 0===t||e.name===t)}t.RefSetCache=p},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.BaseStream=void 0;var n=r(144);class a{constructor(){this.constructor===a&&(0,n.unreachable)("Cannot initialize BaseStream.")}get length(){(0,n.unreachable)("Abstract getter \`length\` accessed")}get isEmpty(){(0,n.unreachable)("Abstract getter \`isEmpty\` accessed")}get isDataLoaded(){return(0,n.shadow)(this,"isDataLoaded",!0)}getByte(){(0,n.unreachable)("Abstract method \`getByte\` called")}getBytes(e){(0,n.unreachable)("Abstract method \`getBytes\` called")}peekByte(){const e=this.getByte();return-1!==e&&this.pos--,e}peekBytes(e){const t=this.getBytes(e);return this.pos-=t.length,t}getUint16(){const e=this.getByte(),t=this.getByte();return-1===e||-1===t?-1:(e<<8)+t}getInt32(){return(this.getByte()<<24)+(this.getByte()<<16)+(this.getByte()<<8)+this.getByte()}getByteRange(e,t){(0,n.unreachable)("Abstract method \`getByteRange\` called")}getString(e){return(0,n.bytesToString)(this.getBytes(e))}skip(e){this.pos+=e||1}reset(){(0,n.unreachable)("Abstract method \`reset\` called")}moveStart(){(0,n.unreachable)("Abstract method \`moveStart\` called")}makeSubStream(e,t){(0,n.unreachable)("Abstract method \`makeSubStream\` called")}getBaseStreams(){return null}}t.BaseStream=a},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.NetworkPdfManager=t.LocalPdfManager=void 0;var n=r(144),a=r(153),i=r(149),s=r(155),o=r(154);class c{constructor(e){var t;this.constructor===c&&(0,n.unreachable)("Cannot initialize BasePdfManager."),this._docBaseUrl=function(e){if(e){const t=(0,n.createValidAbsoluteUrl)(e);if(t)return t.href;(0,n.warn)('Invalid absolute docBaseUrl: "'.concat(e,'".'))}return null}(e.docBaseUrl),this._docId=e.docId,this._password=e.password,this.enableXfa=e.enableXfa,(t=e.evaluatorOptions).isOffscreenCanvasSupported&&(t.isOffscreenCanvasSupported=n.FeatureTest.isOffscreenCanvasSupported),this.evaluatorOptions=e.evaluatorOptions}get docId(){return this._docId}get password(){return this._password}get docBaseUrl(){const e=this.pdfDocument.catalog;return(0,n.shadow)(this,"docBaseUrl",e.baseUrl||this._docBaseUrl)}ensureDoc(e,t){return this.ensure(this.pdfDocument,e,t)}ensureXRef(e,t){return this.ensure(this.pdfDocument.xref,e,t)}ensureCatalog(e,t){return this.ensure(this.pdfDocument.catalog,e,t)}getPage(e){return this.pdfDocument.getPage(e)}fontFallback(e,t){return this.pdfDocument.fontFallback(e,t)}loadXfaFonts(e,t){return this.pdfDocument.loadXfaFonts(e,t)}loadXfaImages(){return this.pdfDocument.loadXfaImages()}serializeXfaData(e){return this.pdfDocument.serializeXfaData(e)}cleanup(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this.pdfDocument.cleanup(e)}async ensure(e,t,r){(0,n.unreachable)("Abstract method \`ensure\` called")}requestRange(e,t){(0,n.unreachable)("Abstract method \`requestRange\` called")}requestLoadedStream(){(0,n.unreachable)("Abstract method \`requestLoadedStream\` called")}sendProgressiveData(e){(0,n.unreachable)("Abstract method \`sendProgressiveData\` called")}updatePassword(e){this._password=e}terminate(e){(0,n.unreachable)("Abstract method \`terminate\` called")}}t.LocalPdfManager=class extends c{constructor(e){super(e);const t=new o.Stream(e.source);this.pdfDocument=new s.PDFDocument(this,t),this._loadedStreamPromise=Promise.resolve(t)}async ensure(e,t,r){const n=e[t];return"function"==typeof n?n.apply(e,r):n}requestRange(e,t){return Promise.resolve()}requestLoadedStream(){return this._loadedStreamPromise}terminate(e){}},t.NetworkPdfManager=class extends c{constructor(e){super(e),this.streamManager=new a.ChunkedStreamManager(e.source,{msgHandler:e.handler,length:e.length,disableAutoFetch:e.disableAutoFetch,rangeChunkSize:e.rangeChunkSize}),this.pdfDocument=new s.PDFDocument(this,this.streamManager.getStream())}async ensure(e,t,r){try{const n=e[t];return"function"==typeof n?n.apply(e,r):n}catch(n){if(!(n instanceof i.MissingDataException))throw n;return await this.requestRange(n.begin,n.end),this.ensure(e,t,r)}}requestRange(e,t){return this.streamManager.requestRange(e,t)}requestLoadedStream(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this.streamManager.requestAllChunks(e)}sendProgressiveData(e){this.streamManager.onReceiveData({chunk:e})}terminate(e){this.streamManager.abort(e)}}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ChunkedStreamManager=t.ChunkedStream=void 0,r(84),r(93),r(94),r(97),r(99),r(101),r(105),r(108),r(115),r(116),r(126),r(128),r(131),r(133),r(135),r(137),r(139),r(2);var n=r(149),a=r(144),i=r(154);class s extends i.Stream{constructor(e,t,r){super(new Uint8Array(e),0,e,null),this.chunkSize=t,this._loadedChunks=new Set,this.numChunks=Math.ceil(e/t),this.manager=r,this.progressiveDataLength=0,this.lastSuccessfulEnsureByteChunk=-1}getMissingChunks(){const e=[];for(let t=0,r=this.numChunks;t=this.end?this.numChunks:Math.floor(t/this.chunkSize);for(let e=r;ethis.numChunks)&&t!==this.lastSuccessfulEnsureByteChunk){if(!this._loadedChunks.has(t))throw new n.MissingDataException(e,e+1);this.lastSuccessfulEnsureByteChunk=t}}ensureRange(e,t){if(e>=t)return;if(t<=this.progressiveDataLength)return;const r=Math.floor(e/this.chunkSize);if(r>this.numChunks)return;const a=Math.min(Math.floor((t-1)/this.chunkSize)+1,this.numChunks);for(let i=r;i=this.end?-1:(e>=this.progressiveDataLength&&this.ensureByte(e),this.bytes[this.pos++])}getBytes(e){const t=this.bytes,r=this.pos,n=this.end;if(!e)return n>this.progressiveDataLength&&this.ensureRange(r,n),t.subarray(r,n);let a=r+e;return a>n&&(a=n),a>this.progressiveDataLength&&this.ensureRange(r,a),this.pos=a,t.subarray(r,a)}getByteRange(e,t){return e<0&&(e=0),t>this.end&&(t=this.end),t>this.progressiveDataLength&&this.ensureRange(e,t),this.bytes.subarray(e,t)}makeSubStream(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;function n(){}t?e+t>this.progressiveDataLength&&this.ensureRange(e,e+t):e>=this.progressiveDataLength&&this.ensureByte(e),n.prototype=Object.create(this),n.prototype.getMissingChunks=function(){const e=this.chunkSize,t=Math.floor(this.start/e),r=Math.floor((this.end-1)/e)+1,n=[];for(let e=t;e{const s=o=>{let{value:c,done:l}=o;try{if(l){const t=(0,n.arrayBuffersToBytes)(a);return a=null,void e(t)}i+=c.byteLength,r.isStreamingSupported&&this.onProgress({loaded:i}),a.push(c),r.read().then(s,t)}catch(e){t(e)}};r.read().then(s,t)})).then((t=>{this.aborted||this.onReceiveData({chunk:t,begin:e})}))}requestAllChunks(){if(!(arguments.length>0&&void 0!==arguments[0]&&arguments[0])){const e=this.stream.getMissingChunks();this._requestChunks(e)}return this._loadedStreamCapability.promise}_requestChunks(e){const t=this.currRequestId++,r=new Set;this._chunksNeededByRequest.set(t,r);for(const t of e)this.stream.hasChunk(t)||r.add(t);if(0===r.size)return Promise.resolve();const n=new a.PromiseCapability;this._promisesByRequest.set(t,n);const i=[];for(const e of r){let r=this._requestsByChunk.get(e);r||(r=[],this._requestsByChunk.set(e,r),i.push(e)),r.push(t)}if(i.length>0){const e=this.groupChunks(i);for(const t of e){const e=t.beginChunk*this.chunkSize,r=Math.min(t.endChunk*this.chunkSize,this.length);this.sendRequest(e,r).catch(n.reject)}}return n.promise.catch((e=>{if(!this.aborted)throw e}))}getStream(){return this.stream}requestRange(e,t){t=Math.min(t,this.length);const r=this.getBeginChunk(e),n=this.getEndChunk(t),a=[];for(let e=r;e0&&void 0!==arguments[0]?arguments[0]:[];const t=[];for(const r of e){const e=this.getBeginChunk(r.begin),n=this.getEndChunk(r.end);for(let r=e;r=0&&n+1!==i&&(t.push({beginChunk:r,endChunk:n+1}),r=i),a+1===e.length&&t.push({beginChunk:r,endChunk:i+1}),n=i}return t}onProgress(e){this.msgHandler.send("DocProgress",{loaded:this.stream.numChunksLoaded*this.chunkSize+e.loaded,total:this.length})}onReceiveData(e){const t=e.chunk,r=void 0===e.begin,n=r?this.progressiveDataLength:e.begin,a=n+t.byteLength,i=Math.floor(n/this.chunkSize),s=a0||o.push(r)}}}if(!this.disableAutoFetch&&0===this._requestsByChunk.size){let e;if(1===this.stream.numChunksLoaded){const t=this.stream.numChunks-1;this.stream.hasChunk(t)||(e=t)}else e=this.stream.nextEmptyChunk(s);Number.isInteger(e)&&this._requestChunks([e])}for(const e of o){const t=this._promisesByRequest.get(e);this._promisesByRequest.delete(e),t.resolve()}this.msgHandler.send("DocProgress",{loaded:this.stream.numChunksLoaded*this.chunkSize,total:this.length})}onError(e){this._loadedStreamCapability.reject(e)}getBeginChunk(e){return Math.floor(e/this.chunkSize)}getEndChunk(e){return Math.floor((e-1)/this.chunkSize)+1}abort(e){this.aborted=!0,this.pdfNetworkStream&&this.pdfNetworkStream.cancelAllRequests(e);for(const t of this._promisesByRequest.values())t.reject(e)}}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.StringStream=t.Stream=t.NullStream=void 0,r(84),r(93),r(94),r(97),r(99),r(101),r(105),r(108),r(115);var n=r(151),a=r(144);class i extends n.BaseStream{constructor(e,t,r,n){super(),this.bytes=e instanceof Uint8Array?e:new Uint8Array(e),this.start=t||0,this.pos=this.start,this.end=t+r||this.bytes.length,this.dict=n}get length(){return this.end-this.start}get isEmpty(){return 0===this.length}getByte(){return this.pos>=this.end?-1:this.bytes[this.pos++]}getBytes(e){const t=this.bytes,r=this.pos,n=this.end;if(!e)return t.subarray(r,n);let a=r+e;return a>n&&(a=n),this.pos=a,t.subarray(r,a)}getByteRange(e,t){return e<0&&(e=0),t>this.end&&(t=this.end),this.bytes.subarray(e,t)}reset(){this.pos=this.start}moveStart(){this.start=this.pos}makeSubStream(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;return new i(this.bytes.buffer,e,t,r)}}t.Stream=i,t.StringStream=class extends i{constructor(e){super((0,a.stringToBytes)(e))}},t.NullStream=class extends i{constructor(){super(new Uint8Array(0))}}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Page=t.PDFDocument=void 0,r(2),r(139),r(116),r(126),r(128),r(131),r(133),r(135),r(137),r(84),r(93),r(94),r(97),r(99),r(101),r(105),r(108),r(115);var n=r(144),a=r(156),i=r(149),c=r(150),l=r(201),h=r(151),u=r(218),d=r(220),f=r(222),g=r(255),p=r(166),m=r(154),b=r(226),y=r(214),w=r(163),v=r(168),x=r(225),S=r(216),A=r(227),k=r(256);const C=[0,0,612,792];var O=new WeakSet;class F{constructor(e){s(this,O);let{pdfManager:t,xref:r,pageIndex:n,pageDict:a,ref:i,globalIdFactory:o,fontCache:c,builtInCMapCache:l,standardFontDataCache:h,globalImageCache:u,systemFontCache:d,nonBlendModesSet:f,xfaFactory:g}=e;this.pdfManager=t,this.pageIndex=n,this.pageDict=a,this.xref=r,this.ref=i,this.fontCache=c,this.builtInCMapCache=l,this.standardFontDataCache=h,this.globalImageCache=u,this.systemFontCache=d,this.nonBlendModesSet=f,this.evaluatorOptions=t.evaluatorOptions,this.resourcesPromise=null,this.xfaFactory=g;const p={obj:0};this._localIdFactory=class extends o{static createObjId(){return"p".concat(n,"_").concat(++p.obj)}static getPageObjId(){return"p".concat(i.toString())}}}_getInheritableProperty(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const r=(0,i.getInheritableProperty)({dict:this.pageDict,key:e,getArray:t,stopWhenFound:!1});return Array.isArray(r)?1!==r.length&&r[0]instanceof c.Dict?c.Dict.merge({xref:this.xref,dictArray:r}):r[0]:r}get content(){return this.pageDict.getArray("Contents")}get resources(){const e=this._getInheritableProperty("Resources");return(0,n.shadow)(this,"resources",e instanceof c.Dict?e:c.Dict.empty)}_getBoundingBox(e){if(this.xfaData)return this.xfaData.bbox;let t=this._getInheritableProperty(e,!0);if(Array.isArray(t)&&4===t.length){if(t=n.Util.normalizeRect(t),t[2]-t[0]>0&&t[3]-t[1]>0)return t;(0,n.warn)("Empty, or invalid, /".concat(e," entry."))}return null}get mediaBox(){return(0,n.shadow)(this,"mediaBox",this._getBoundingBox("MediaBox")||C)}get cropBox(){return(0,n.shadow)(this,"cropBox",this._getBoundingBox("CropBox")||this.mediaBox)}get userUnit(){let e=this.pageDict.get("UserUnit");return("number"!=typeof e||e<=0)&&(e=1),(0,n.shadow)(this,"userUnit",e)}get view(){const{cropBox:e,mediaBox:t}=this;if(e!==t&&!(0,n.isArrayEqual)(e,t)){const r=n.Util.intersect(e,t);if(r&&r[2]-r[0]>0&&r[3]-r[1]>0)return(0,n.shadow)(this,"view",r);(0,n.warn)("Empty /CropBox and /MediaBox intersection.")}return(0,n.shadow)(this,"view",t)}get rotate(){let e=this._getInheritableProperty("Rotate")||0;return e%90!=0?e=0:e>=360?e%=360:e<0&&(e=(e%360+360)%360),(0,n.shadow)(this,"rotate",e)}_onSubStreamError(e,t){if(!this.evaluatorOptions.ignoreErrors)throw e;(0,n.warn)("getContentStream - ignoring sub-stream (".concat(t,'): "').concat(e,'".'))}getContentStream(){return this.pdfManager.ensure(this,"content").then((e=>e instanceof h.BaseStream?e:Array.isArray(e)?new v.StreamsSequenceStream(e,this._onSubStreamError.bind(this)):new m.NullStream))}get xfaData(){return(0,n.shadow)(this,"xfaData",this.xfaFactory?{bbox:this.xfaFactory.getBoundingBox(this.pageIndex)}:null)}async saveNewAnnotations(e,t,r,n){if(this.xfaFactory)throw new Error("XFA: Cannot save new annotations.");const i=new w.PartialEvaluator({xref:this.xref,handler:e,pageIndex:this.pageIndex,idFactory:this._localIdFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,standardFontDataCache:this.standardFontDataCache,globalImageCache:this.globalImageCache,systemFontCache:this.systemFontCache,options:this.evaluatorOptions}),s=new c.RefSet,l=new c.RefSet;o(this,O,I).call(this,r,s,l);const h=this.pageDict,u=this.annotations.filter((e=>!(e instanceof c.Ref&&s.has(e)))),d=await a.AnnotationFactory.saveNewAnnotations(i,t,r,n);for(const{ref:e}of d.annotations)e instanceof c.Ref&&!l.has(e)&&u.push(e);const f=h.get("Annots");h.set("Annots",u);const g=[];let p=null;this.xref.encrypt&&(p=this.xref.encrypt.createCipherTransform(this.ref.num,this.ref.gen)),await(0,S.writeObject)(this.ref,h,g,p),f&&h.set("Annots",f);const m=d.dependencies;return m.push({ref:this.ref,data:g.join("")},...d.annotations),m}save(e,t,r){const a=new w.PartialEvaluator({xref:this.xref,handler:e,pageIndex:this.pageIndex,idFactory:this._localIdFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,standardFontDataCache:this.standardFontDataCache,globalImageCache:this.globalImageCache,systemFontCache:this.systemFontCache,options:this.evaluatorOptions});return this._parsedAnnotations.then((function(e){const i=[];for(const s of e)s.mustBePrinted(r)&&i.push(s.save(a,t,r).catch((function(e){return(0,n.warn)('save - ignoring annotation data during "'.concat(t.name,'" task: "').concat(e,'".')),null})));return Promise.all(i).then((function(e){return e.filter((e=>!!e))}))}))}loadResources(e){return this.resourcesPromise||(this.resourcesPromise=this.pdfManager.ensure(this,"resources")),this.resourcesPromise.then((()=>new b.ObjectLoader(this.resources,e,this.xref).load()))}getOperatorList(e){let{handler:t,sink:r,task:s,intent:l,cacheKey:h,annotationStorage:u=null}=e;const d=this.getContentStream(),f=this.loadResources(["ColorSpace","ExtGState","Font","Pattern","Properties","Shading","XObject"]),g=new w.PartialEvaluator({xref:this.xref,handler:t,pageIndex:this.pageIndex,idFactory:this._localIdFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,standardFontDataCache:this.standardFontDataCache,globalImageCache:this.globalImageCache,systemFontCache:this.systemFontCache,options:this.evaluatorOptions}),p=this.xfaFactory?null:(0,i.getNewAnnotationsMap)(u);let m=null,b=Promise.resolve(null);if(p){let e;const t=p.get(this.pageIndex);if(t){const r=new Set;for(const{bitmapId:e,bitmap:n}of t)!e||n||r.has(e)||r.add(e);const{isOffscreenCanvasSupported:i}=this.evaluatorOptions;if(r.size>0){const s=t.slice();for(const[e,t]of u)e.startsWith(n.AnnotationEditorPrefix)&&t.bitmap&&r.has(t.bitmapId)&&s.push(t);e=a.AnnotationFactory.generateImages(s,this.xref,i)}else e=a.AnnotationFactory.generateImages(t,this.xref,i);m=new c.RefSet,o(this,O,I).call(this,t,m,null),b=a.AnnotationFactory.printNewAnnotations(g,s,t,e)}}const v=Promise.all([d,f]).then((e=>{let[n]=e;const a=new y.OperatorList(l,r);return t.send("StartRenderPage",{transparency:g.hasBlendModes(this.resources,this.nonBlendModesSet),pageIndex:this.pageIndex,cacheKey:h}),g.getOperatorList({stream:n,task:s,resources:this.resources,operatorList:a}).then((function(){return a}))}));return Promise.all([v,this._parsedAnnotations,b]).then((function(e){let[t,r,a]=e;if(a){r=r.filter((e=>!(e.ref&&m.has(e.ref))));for(let e=0,t=a.length;ee.ref&&(0,c.isRefsEqual)(e.ref,n.refToReplace)));i>=0&&(r.splice(i,1,n),a.splice(e--,1),t--)}}r=r.concat(a)}if(0===r.length||l&n.RenderingIntentFlag.ANNOTATIONS_DISABLE)return t.flush(!0),{length:t.totalLength};const i=!!(l&n.RenderingIntentFlag.ANNOTATIONS_FORMS),o=!!(l&n.RenderingIntentFlag.ANY),h=!!(l&n.RenderingIntentFlag.DISPLAY),d=!!(l&n.RenderingIntentFlag.PRINT),f=[];for(const e of r)(o||h&&e.mustBeViewed(u)||d&&e.mustBePrinted(u))&&f.push(e.getOperatorList(g,s,l,i,u).catch((function(e){return(0,n.warn)('getOperatorList - ignoring annotation data during "'.concat(s.name,'" task: "').concat(e,'".')),{opList:null,separateForm:!1,separateCanvas:!1}})));return Promise.all(f).then((function(e){let r=!1,n=!1;for(const{opList:a,separateForm:i,separateCanvas:s}of e)t.addOpList(a),r||(r=i),n||(n=s);return t.flush(!0,{form:r,canvas:n}),{length:t.totalLength}}))}))}extractTextContent(e){let{handler:t,task:r,includeMarkedContent:n,disableNormalization:a,sink:i}=e;const s=this.getContentStream(),o=this.loadResources(["ExtGState","Font","Properties","XObject"]);return Promise.all([s,o]).then((e=>{let[s]=e;return new w.PartialEvaluator({xref:this.xref,handler:t,pageIndex:this.pageIndex,idFactory:this._localIdFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,standardFontDataCache:this.standardFontDataCache,globalImageCache:this.globalImageCache,systemFontCache:this.systemFontCache,options:this.evaluatorOptions}).getTextContent({stream:s,task:r,resources:this.resources,includeMarkedContent:n,disableNormalization:a,sink:i,viewBox:this.view})}))}async getStructTree(){const e=await this.pdfManager.ensureCatalog("structTreeRoot");return e?(await this.pdfManager.ensure(this,"_parseStructTree",[e])).serializable:null}_parseStructTree(e){const t=new x.StructTreePage(e,this.pageDict);return t.parse(),t}async getAnnotationsData(e,t,r){const a=await this._parsedAnnotations;if(0===a.length)return[];const i=[],s=[];let o;const c=!!(r&n.RenderingIntentFlag.ANY),l=!!(r&n.RenderingIntentFlag.DISPLAY),h=!!(r&n.RenderingIntentFlag.PRINT);for(const r of a){const a=c||l&&r.viewable;(a||h&&r.printable)&&i.push(r.data),r.hasTextContent&&a&&(o||(o=new w.PartialEvaluator({xref:this.xref,handler:e,pageIndex:this.pageIndex,idFactory:this._localIdFactory,fontCache:this.fontCache,builtInCMapCache:this.builtInCMapCache,standardFontDataCache:this.standardFontDataCache,globalImageCache:this.globalImageCache,systemFontCache:this.systemFontCache,options:this.evaluatorOptions})),s.push(r.extractTextContent(o,t,[-1/0,-1/0,1/0,1/0]).catch((function(e){(0,n.warn)('getAnnotationsData - ignoring textContent during "'.concat(t.name,'" task: "').concat(e,'".'))}))))}return await Promise.all(s),i}get annotations(){const e=this._getInheritableProperty("Annots");return(0,n.shadow)(this,"annotations",Array.isArray(e)?e:[])}get _parsedAnnotations(){const e=this.pdfManager.ensure(this,"annotations").then((()=>{const e=[];for(const t of this.annotations)e.push(a.AnnotationFactory.create(this.xref,t,this.pdfManager,this._localIdFactory,!1).catch((function(e){return(0,n.warn)('_parsedAnnotations: "'.concat(e,'".')),null})));return Promise.all(e).then((function(e){if(0===e.length)return e;const t=[];let r;for(const n of e)n&&(n instanceof a.PopupAnnotation?(r||(r=[])).push(n):t.push(n));return r&&t.push(...r),t}))}));return(0,n.shadow)(this,"_parsedAnnotations",e)}get jsActions(){const e=(0,i.collectActions)(this.xref,this.pageDict,n.PageActionEventType);return(0,n.shadow)(this,"jsActions",e)}}function I(e,t,r){for(const a of e)if(a.id){const e=c.Ref.fromString(a.id);if(!e){(0,n.warn)("A non-linked annotation cannot be modified: ".concat(a.id));continue}if(a.deleted){t.put(e);continue}null==r||r.put(e),a.ref=e,delete a.id}}t.Page=F;const T=new Uint8Array([37,80,68,70,45]),M=new Uint8Array([115,116,97,114,116,120,114,101,102]),E=new Uint8Array([101,110,100,111,98,106]);function P(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1024,n=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const a=t.length,i=e.peekBytes(r),s=i.length-a;if(s<=0)return!1;if(n){const r=a-1;let n=i.length-1;for(;n>=r;){let s=0;for(;s=a)return e.pos+=n-r,!0;n--}}else{let r=0;for(;r<=s;){let n=0;for(;n=a)return e.pos+=r,!0;r++}}return!1}t.PDFDocument=class{constructor(e,t){if(t.length<=0)throw new n.InvalidPDFException("The PDF file is empty, i.e. its size is zero bytes.");this.pdfManager=e,this.stream=t,this.xref=new k.XRef(t,e),this._pagePromises=new Map,this._version=null;const r={font:0};this._globalIdFactory=class{static getDocId(){return"g_".concat(e.docId)}static createFontId(){return"f"+ ++r.font}static createObjId(){(0,n.unreachable)("Abstract method \`createObjId\` called.")}static getPageObjId(){(0,n.unreachable)("Abstract method \`getPageObjId\` called.")}}}parse(e){this.xref.parse(e),this.catalog=new d.Catalog(this.pdfManager,this.xref)}get linearization(){let e=null;try{e=p.Linearization.create(this.stream)}catch(e){if(e instanceof i.MissingDataException)throw e;(0,n.info)(e)}return(0,n.shadow)(this,"linearization",e)}get startXRef(){const e=this.stream;let t=0;if(this.linearization)e.reset(),P(e,E)&&(t=e.pos+6-e.start);else{const r=1024,n=M.length;let a=!1,s=e.end;for(;!a&&s>0;)s-=r-n,s<0&&(s=0),e.pos=s,a=P(e,M,r,!0);if(a){let r;e.skip(9);do{r=e.getByte()}while((0,i.isWhiteSpace)(r));let n="";for(;r>=32&&r<=57;)n+=String.fromCharCode(r),r=e.getByte();t=parseInt(n,10),isNaN(t)&&(t=0)}}return(0,n.shadow)(this,"startXRef",t)}checkHeader(){const e=this.stream;if(e.reset(),!P(e,T))return;e.moveStart(),e.skip(T.length);let t,r="";for(;(t=e.getByte())>32&&r.length<7;)r+=String.fromCharCode(t);i.PDF_VERSION_REGEXP.test(r)?this._version=r:(0,n.warn)("Invalid PDF header version: ".concat(r))}parseStartXRef(){this.xref.setStartXRef(this.startXRef)}get numPages(){let e=0;return e=this.catalog.hasActualNumPages?this.catalog.numPages:this.xfaFactory?this.xfaFactory.getNumPages():this.linearization?this.linearization.numPages:this.catalog.numPages,(0,n.shadow)(this,"numPages",e)}_hasOnlyDocumentSignatures(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return!!Array.isArray(e)&&e.every((e=>{if(!((e=this.xref.fetchIfRef(e))instanceof c.Dict))return!1;if(e.has("Kids"))return++t>10?((0,n.warn)("_hasOnlyDocumentSignatures: maximum recursion depth reached"),!1):this._hasOnlyDocumentSignatures(e.get("Kids"),t);const r=(0,c.isName)(e.get("FT"),"Sig"),a=e.get("Rect"),i=Array.isArray(a)&&a.every((e=>0===e));return r&&i}))}get _xfaStreams(){const e=this.catalog.acroForm;if(!e)return null;const t=e.get("XFA"),r={"xdp:xdp":"",template:"",datasets:"",config:"",connectionSet:"",localeSet:"",stylesheet:"","/xdp:xdp":""};if(t instanceof h.BaseStream&&!t.isEmpty)return r["xdp:xdp"]=t,r;if(!Array.isArray(t)||0===t.length)return null;for(let e=0,n=t.length;e{p.set(e,t)}));const m=[];for(const[e,r]of p){const s=r.get("FontDescriptor");if(!(s instanceof c.Dict))continue;let o=s.get("FontFamily");o=o.replaceAll(/[ ]+(\\d)/g,"$1");const l={fontFamily:o,fontWeight:s.get("FontWeight"),italicAngle:-s.get("ItalicAngle")};(0,i.validateCSSFont)(l)&&m.push(u.handleSetFont(a,[c.Name.get(e),1],null,d,t,g,null,l).catch((function(e){return(0,n.warn)('loadXfaFonts: "'.concat(e,'".')),null})))}await Promise.all(m);const v=this.xfaFactory.setFonts(f);if(!v)return;h.ignoreErrors=!0,m.length=0,f.length=0;const x=new Set;for(const e of v)(0,l.getXfaFontName)("".concat(e,"-Regular"))||x.add(e);x.size&&v.push("PdfJS-Fallback");for(const e of v)if(!x.has(e))for(const r of[{name:"Regular",fontWeight:400,italicAngle:0},{name:"Bold",fontWeight:700,italicAngle:0},{name:"Italic",fontWeight:400,italicAngle:12},{name:"BoldItalic",fontWeight:700,italicAngle:12}]){const i="".concat(e,"-").concat(r.name),s=(0,l.getXfaFontDict)(i);m.push(u.handleSetFont(a,[c.Name.get(i),1],null,d,t,g,s,{fontFamily:e,fontWeight:r.fontWeight,italicAngle:r.italicAngle}).catch((function(e){return(0,n.warn)('loadXfaFonts: "'.concat(e,'".')),null})))}await Promise.all(m),this.xfaFactory.appendFonts(f,x)}async serializeXfaData(e){return this.xfaFactory?this.xfaFactory.serializeData(e):null}get version(){return this.catalog.version||this._version}get formInfo(){const e={hasFields:!1,hasAcroForm:!1,hasXfa:!1,hasSignatures:!1},t=this.catalog.acroForm;if(!t)return(0,n.shadow)(this,"formInfo",e);try{const r=t.get("Fields"),n=Array.isArray(r)&&r.length>0;e.hasFields=n;const a=t.get("XFA");e.hasXfa=Array.isArray(a)&&a.length>0||a instanceof h.BaseStream&&!a.isEmpty;const i=!!(1&t.get("SigFlags")),s=i&&this._hasOnlyDocumentSignatures(r);e.hasAcroForm=n&&!s,e.hasSignatures=i}catch(e){if(e instanceof i.MissingDataException)throw e;(0,n.warn)('Cannot fetch form information: "'.concat(e,'".'))}return(0,n.shadow)(this,"formInfo",e)}get documentInfo(){const e={PDFFormatVersion:this.version,Language:this.catalog.lang,EncryptFilterName:this.xref.encrypt?this.xref.encrypt.filterName:null,IsLinearized:!!this.linearization,IsAcroFormPresent:this.formInfo.hasAcroForm,IsXFAPresent:this.formInfo.hasXfa,IsCollectionPresent:!!this.catalog.collection,IsSignaturesPresent:this.formInfo.hasSignatures};let t;try{t=this.xref.trailer.get("Info")}catch(e){if(e instanceof i.MissingDataException)throw e;(0,n.info)("The document information dictionary is invalid.")}if(!(t instanceof c.Dict))return(0,n.shadow)(this,"documentInfo",e);for(const r of t.getKeys()){const a=t.get(r);switch(r){case"Title":case"Author":case"Subject":case"Keywords":case"Creator":case"Producer":case"CreationDate":case"ModDate":if("string"==typeof a){e[r]=(0,n.stringToPDFString)(a);continue}break;case"Trapped":if(a instanceof c.Name){e[r]=a;continue}break;default:let t;switch(typeof a){case"string":t=(0,n.stringToPDFString)(a);break;case"number":case"boolean":t=a;break;default:a instanceof c.Name&&(t=a)}if(void 0===t){(0,n.warn)('Bad value, for custom key "'.concat(r,'", in Info: ').concat(a,"."));continue}e.Custom||(e.Custom=Object.create(null)),e.Custom[r]=t;continue}(0,n.warn)('Bad value, for key "'.concat(r,'", in Info: ').concat(a,"."))}return(0,n.shadow)(this,"documentInfo",e)}get fingerprints(){function e(e){return"string"==typeof e&&e.length>0&&"\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0"!==e}function t(e){const t=[];for(const r of e){const e=r.toString(16);t.push(e.padStart(2,"0"))}return t.join("")}const r=this.xref.trailer.get("ID");let a,i;return Array.isArray(r)&&e(r[0])?(a=(0,n.stringToBytes)(r[0]),r[1]!==r[0]&&e(r[1])&&(i=(0,n.stringToBytes)(r[1]))):a=(0,u.calculateMD5)(this.stream.getByteRange(0,1024),0,1024),(0,n.shadow)(this,"fingerprints",[t(a),i?t(i):null])}async _getLinearizationPage(e){const{catalog:t,linearization:r,xref:a}=this,i=c.Ref.get(r.objectNumberFirst,0);try{const e=await a.fetchAsync(i);if(e instanceof c.Dict){let r=e.getRaw("Type");if(r instanceof c.Ref&&(r=await a.fetchAsync(r)),(0,c.isName)(r,"Page")||!e.has("Type")&&!e.has("Kids"))return t.pageKidsCountCache.has(i)||t.pageKidsCountCache.put(i,1),t.pageIndexCache.has(i)||t.pageIndexCache.put(i,0),[e,i]}throw new n.FormatError("The Linearization dictionary doesn't point to a valid Page dictionary.")}catch(r){return(0,n.warn)('_getLinearizationPage: "'.concat(r.message,'".')),t.getPageDict(e)}}getPage(e){const t=this._pagePromises.get(e);if(t)return t;const{catalog:r,linearization:n,xfaFactory:a}=this;let i;return i=a?Promise.resolve([c.Dict.empty,null]):(null==n?void 0:n.pageFirst)===e?this._getLinearizationPage(e):r.getPageDict(e),i=i.then((t=>{let[n,i]=t;return new F({pdfManager:this.pdfManager,xref:this.xref,pageIndex:e,pageDict:n,ref:i,globalIdFactory:this._globalIdFactory,fontCache:r.fontCache,builtInCMapCache:r.builtInCMapCache,standardFontDataCache:r.standardFontDataCache,globalImageCache:r.globalImageCache,systemFontCache:r.systemFontCache,nonBlendModesSet:r.nonBlendModesSet,xfaFactory:a})})),this._pagePromises.set(e,i),i}async checkFirstPage(){if(!(arguments.length>0&&void 0!==arguments[0]&&arguments[0]))try{await this.getPage(0)}catch(e){if(e instanceof i.XRefEntryException)throw this._pagePromises.delete(0),await this.cleanup(),new i.XRefParseException}}async checkLastPage(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const{catalog:t,pdfManager:r}=this;let a;t.setActualNumPages();try{if(await Promise.all([r.ensureDoc("xfaFactory"),r.ensureDoc("linearization"),r.ensureCatalog("numPages")]),this.xfaFactory)return;if(a=this.linearization?this.linearization.numPages:t.numPages,!Number.isInteger(a))throw new n.FormatError("Page count is not an integer.");if(a<=1)return;await this.getPage(a-1)}catch(s){if(this._pagePromises.delete(a-1),await this.cleanup(),s instanceof i.XRefEntryException&&!e)throw new i.XRefParseException;let o;(0,n.warn)("checkLastPage - invalid /Pages tree /Count: ".concat(a,"."));try{o=await t.getAllPageDicts(e)}catch(r){if(r instanceof i.XRefEntryException&&!e)throw new i.XRefParseException;return void t.setActualNumPages(1)}for(const[e,[n,a]]of o){let i;n instanceof Error?(i=Promise.reject(n),i.catch((()=>{}))):i=Promise.resolve(new F({pdfManager:r,xref:this.xref,pageIndex:e,pageDict:n,ref:a,globalIdFactory:this._globalIdFactory,fontCache:t.fontCache,builtInCMapCache:t.builtInCMapCache,standardFontDataCache:t.standardFontDataCache,globalImageCache:t.globalImageCache,systemFontCache:t.systemFontCache,nonBlendModesSet:t.nonBlendModesSet,xfaFactory:null})),this._pagePromises.set(e,i)}t.setActualNumPages(o.size)}}fontFallback(e,t){return this.catalog.fontFallback(e,t)}async cleanup(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];return this.catalog?this.catalog.cleanup(e):(0,f.clearGlobalCaches)()}_collectFieldObjects(e,t,r){const i=this.xref.fetchIfRef(t);if(i.has("T")){const t=(0,n.stringToPDFString)(i.get("T"));e=""===e?t:"".concat(e,".").concat(t)}if(!i.has("Kids")&&/\\[\\d+\\]$/.test(e)&&(e=e.substring(0,e.lastIndexOf("["))),r.has(e)||r.set(e,[]),r.get(e).push(a.AnnotationFactory.create(this.xref,t,this.pdfManager,this._localIdFactory,!0).then((e=>null==e?void 0:e.getFieldObject())).catch((function(e){return(0,n.warn)('_collectFieldObjects: "'.concat(e,'".')),null}))),i.has("Kids")){const t=i.get("Kids");for(const n of t)this._collectFieldObjects(e,n,r)}}get fieldObjects(){if(!this.formInfo.hasFields)return(0,n.shadow)(this,"fieldObjects",Promise.resolve(null));const e=Object.create(null),t=new Map;for(const e of this.catalog.acroForm.get("Fields"))this._collectFieldObjects("",e,t);const r=[];for(const[n,a]of t)r.push(Promise.all(a).then((t=>{(t=t.filter((e=>!!e))).length>0&&(e[n]=t)})));return(0,n.shadow)(this,"fieldObjects",Promise.all(r).then((()=>e)))}get hasJSActions(){const e=this.pdfManager.ensureDoc("_parseHasJSActions");return(0,n.shadow)(this,"hasJSActions",e)}async _parseHasJSActions(){const[e,t]=await Promise.all([this.pdfManager.ensureCatalog("jsActions"),this.pdfManager.ensureDoc("fieldObjects")]);return!!e||!!t&&Object.values(t).some((e=>e.some((e=>null!==e.actions))))}get calculationOrderIds(){const e=this.catalog.acroForm;if(null==e||!e.has("CO"))return(0,n.shadow)(this,"calculationOrderIds",null);const t=e.get("CO");if(!Array.isArray(t)||0===t.length)return(0,n.shadow)(this,"calculationOrderIds",null);const r=[];for(const e of t)e instanceof c.Ref&&r.push(e.toString());return 0===r.length?(0,n.shadow)(this,"calculationOrderIds",null):(0,n.shadow)(this,"calculationOrderIds",r)}}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.PopupAnnotation=t.MarkupAnnotation=t.AnnotationFactory=t.AnnotationBorderStyle=t.Annotation=void 0,t.getQuadPoints=v,r(139),r(84),r(93),r(94),r(97),r(99),r(101),r(105),r(108),r(115),r(157),r(159);var n=r(144),a=r(149),i=r(161),s=r(150),o=r(154),c=r(216),l=r(151),h=r(210),u=r(220),d=r(162),f=r(223),g=r(176),p=r(226),m=r(214),b=r(227);function y(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new Uint8ClampedArray(3);if(!Array.isArray(e))return t;const r=t||new Uint8ClampedArray(3);switch(e.length){case 0:return null;case 1:return d.ColorSpace.singletons.gray.getRgbItem(e,0,r,0),r;case 3:return d.ColorSpace.singletons.rgb.getRgbItem(e,0,r,0),r;case 4:return d.ColorSpace.singletons.cmyk.getRgbItem(e,0,r,0),r;default:return t}}function w(e){return Array.from(e,(e=>e/255))}function v(e,t){const r=e.getArray("QuadPoints");if(!Array.isArray(r)||0===r.length||r.length%8>0)return null;const n=[];for(let e=0,a=r.length/8;et[2]||st[3]))return null;n.push([{x:a,y:o},{x:i,y:o},{x:a,y:s},{x:i,y:s}])}return n}function x(e,t,r){const[a,i,s,o]=n.Util.getAxialAlignedBoundingBox(t,r);if(a===s||i===o)return[1,0,0,1,e[0],e[1]];const c=(e[2]-e[0])/(s-a),l=(e[3]-e[1])/(o-i);return[c,0,0,l,e[0]-a*c,e[1]-i*l]}t.AnnotationFactory=class{static create(e,t,r,n,a){return Promise.all([r.ensureCatalog("acroForm"),r.ensureCatalog("baseUrl"),r.ensureCatalog("attachments"),r.ensureDoc("xfaDatasets"),a?this._getPageIndex(e,t,r):-1]).then((i=>{let[s,o,c,l,h]=i;return r.ensure(this,"_create",[e,t,r,n,s,c,l,a,h])}))}static _create(e,t,r,i,o){let c=arguments.length>5&&void 0!==arguments[5]?arguments[5]:null,l=arguments.length>6?arguments[6]:void 0,h=arguments.length>7?arguments[7]:void 0,u=arguments.length>8&&void 0!==arguments[8]?arguments[8]:-1;const d=e.fetchIfRef(t);if(!(d instanceof s.Dict))return;const f=t instanceof s.Ref?t.toString():"annot_".concat(i.createObjId());let g=d.get("Subtype");g=g instanceof s.Name?g.name:null;const p=o instanceof s.Dict?o:s.Dict.empty,m={xref:e,ref:t,dict:d,subtype:g,id:f,pdfManager:r,acroForm:p,attachments:c,xfaDatasets:l,collectFields:h,needAppearances:!h&&!0===p.get("NeedAppearances"),pageIndex:u,evaluatorOptions:r.evaluatorOptions};switch(g){case"Link":return new E(m);case"Text":return new M(m);case"Widget":let e=(0,a.getInheritableProperty)({dict:d,key:"FT"});switch(e=e instanceof s.Name?e.name:null,e){case"Tx":return new O(m);case"Btn":return new F(m);case"Ch":return new I(m);case"Sig":return new T(m)}return(0,n.warn)('Unimplemented widget field type "'.concat(e,'", falling back to base field type.')),new C(m);case"Popup":return new P(m);case"FreeText":return new R(m);case"Line":return new N(m);case"Square":return new D(m);case"Circle":return new B(m);case"PolyLine":return new L(m);case"Polygon":return new _(m);case"Caret":return new j(m);case"Ink":return new U(m);case"Highlight":return new $(m);case"Underline":return new X(m);case"Squiggly":return new H(m);case"StrikeOut":return new q(m);case"Stamp":return new z(m);case"FileAttachment":return new G(m);default:return h||(g?(0,n.warn)('Unimplemented annotation type "'.concat(g,'", falling back to base annotation.')):(0,n.warn)("Annotation is missing the required /Subtype.")),new S(m)}}static async _getPageIndex(e,t,r){try{const n=await e.fetchIfRefAsync(t);if(!(n instanceof s.Dict))return-1;const a=n.getRaw("P");return a instanceof s.Ref?await r.ensureCatalog("getPageIndex",[a]):-1}catch(e){return(0,n.warn)('_getPageIndex: "'.concat(e,'".')),-1}}static generateImages(e,t,r){if(!r)return(0,n.warn)("generateImages: OffscreenCanvas is not supported, cannot save or print some annotations with images."),null;let a;for(const{bitmapId:r,bitmap:n}of e)n&&(a||(a=new Map),a.set(r,z.createImage(n,t)));return a}static async saveNewAnnotations(e,t,r,a){const i=e.xref;let o;const l=[],h=[],{isOffscreenCanvasSupported:u}=e.options;for(const d of r)if(!d.deleted)switch(d.annotationType){case n.AnnotationEditorType.FREETEXT:if(!o){const e=new s.Dict(i);e.set("BaseFont",s.Name.get("Helvetica")),e.set("Type",s.Name.get("Font")),e.set("Subtype",s.Name.get("Type1")),e.set("Encoding",s.Name.get("WinAnsiEncoding"));const t=[];o=i.getNewTemporaryRef(),await(0,c.writeObject)(o,e,t,null),l.push({ref:o,data:t.join("")})}h.push(R.createNewAnnotation(i,d,l,{evaluator:e,task:t,baseFontRef:o}));break;case n.AnnotationEditorType.INK:h.push(U.createNewAnnotation(i,d,l));break;case n.AnnotationEditorType.STAMP:if(!u)break;const r=await a.get(d.bitmapId);if(r.imageStream){const{imageStream:e,smaskStream:t}=r,n=[];if(t){const r=i.getNewTemporaryRef();await(0,c.writeObject)(r,t,n,null),l.push({ref:r,data:n.join("")}),e.dict.set("SMask",r),n.length=0}const a=r.imageRef=i.getNewTemporaryRef();await(0,c.writeObject)(a,e,n,null),l.push({ref:a,data:n.join("")}),r.imageStream=r.smaskStream=null}h.push(z.createNewAnnotation(i,d,l,{image:r}))}return{annotations:await Promise.all(h),dependencies:l}}static async printNewAnnotations(e,t,r,a){if(!r)return null;const{options:i,xref:s}=e,o=[];for(const c of r)if(!c.deleted)switch(c.annotationType){case n.AnnotationEditorType.FREETEXT:o.push(R.createNewPrintAnnotation(s,c,{evaluator:e,task:t,evaluatorOptions:i}));break;case n.AnnotationEditorType.INK:o.push(U.createNewPrintAnnotation(s,c,{evaluatorOptions:i}));break;case n.AnnotationEditorType.STAMP:if(!i.isOffscreenCanvasSupported)break;const r=await a.get(c.bitmapId);if(r.imageStream){const{imageStream:e,smaskStream:t}=r;t&&e.dict.set("SMask",t),r.imageRef=new g.JpegStream(e,e.length),r.imageStream=r.smaskStream=null}o.push(z.createNewPrintAnnotation(s,c,{image:r,evaluatorOptions:i}))}return Promise.all(o)}};class S{constructor(e){const{dict:t,xref:r}=e;this.setTitle(t.get("T")),this.setContents(t.get("Contents")),this.setModificationDate(t.get("M")),this.setFlags(t.get("F")),this.setRectangle(t.getArray("Rect")),this.setColor(t.getArray("C")),this.setBorderStyle(t),this.setAppearance(t),this.setOptionalContent(t);const i=t.get("MK");this.setBorderAndBackgroundColors(i),this.setRotation(i,t),this.ref=e.ref instanceof s.Ref?e.ref:null,this._streams=[],this.appearance&&this._streams.push(this.appearance);const o=!!(this.flags&n.AnnotationFlag.LOCKED),c=!!(this.flags&n.AnnotationFlag.LOCKEDCONTENTS);if(this.data={annotationFlags:this.flags,borderStyle:this.borderStyle,color:this.color,backgroundColor:this.backgroundColor,borderColor:this.borderColor,rotation:this.rotation,contentsObj:this._contents,hasAppearance:!!this.appearance,id:e.id,modificationDate:this.modificationDate,rect:this.rectangle,subtype:e.subtype,hasOwnCanvas:!1,noRotate:!!(this.flags&n.AnnotationFlag.NOROTATE),noHTML:o&&c},e.collectFields){const i=t.get("Kids");if(Array.isArray(i)){const e=[];for(const t of i)t instanceof s.Ref&&e.push(t.toString());0!==e.length&&(this.data.kidIds=e)}this.data.actions=(0,a.collectActions)(r,t,n.AnnotationActionEventType),this.data.fieldName=this._constructFieldName(t),this.data.pageIndex=e.pageIndex}this._isOffscreenCanvasSupported=e.evaluatorOptions.isOffscreenCanvasSupported,this._fallbackFontDict=null,this._needAppearances=!1}_hasFlag(e,t){return!!(e&t)}_isViewable(e){return!this._hasFlag(e,n.AnnotationFlag.INVISIBLE)&&!this._hasFlag(e,n.AnnotationFlag.NOVIEW)}_isPrintable(e){return this._hasFlag(e,n.AnnotationFlag.PRINT)&&!this._hasFlag(e,n.AnnotationFlag.INVISIBLE)}mustBeViewed(e){var t;const r=null==e||null===(t=e.get(this.data.id))||void 0===t?void 0:t.hidden;return void 0!==r?!r:this.viewable&&!this._hasFlag(this.flags,n.AnnotationFlag.HIDDEN)}mustBePrinted(e){var t;const r=null==e||null===(t=e.get(this.data.id))||void 0===t?void 0:t.print;return void 0!==r?r:this.printable}get viewable(){return null!==this.data.quadPoints&&(0===this.flags||this._isViewable(this.flags))}get printable(){return null!==this.data.quadPoints&&0!==this.flags&&this._isPrintable(this.flags)}_parseStringHelper(e){const t="string"==typeof e?(0,n.stringToPDFString)(e):"";return{str:t,dir:t&&"rtl"===(0,h.bidi)(t).dir?"rtl":"ltr"}}setDefaultAppearance(e){const t=(0,a.getInheritableProperty)({dict:e.dict,key:"DA"})||e.acroForm.get("DA");this._defaultAppearance="string"==typeof t?t:"",this.data.defaultAppearanceData=(0,i.parseDefaultAppearance)(this._defaultAppearance)}setTitle(e){this._title=this._parseStringHelper(e)}setContents(e){this._contents=this._parseStringHelper(e)}setModificationDate(e){this.modificationDate="string"==typeof e?e:null}setFlags(e){this.flags=Number.isInteger(e)&&e>0?e:0}hasFlag(e){return this._hasFlag(this.flags,e)}setRectangle(e){this.rectangle=Array.isArray(e)&&4===e.length?n.Util.normalizeRect(e):[0,0,0,0]}setColor(e){this.color=y(e)}setLineEndings(e){if(this.lineEndings=["None","None"],Array.isArray(e)&&2===e.length)for(let t=0;t<2;t++){const r=e[t];if(r instanceof s.Name)switch(r.name){case"None":continue;case"Square":case"Circle":case"Diamond":case"OpenArrow":case"ClosedArrow":case"Butt":case"ROpenArrow":case"RClosedArrow":case"Slash":this.lineEndings[t]=r.name;continue}(0,n.warn)("Ignoring invalid lineEnding: ".concat(r))}}setRotation(e,t){this.rotation=0;let r=e instanceof s.Dict?e.get("R")||0:t.get("Rotate")||0;Number.isInteger(r)&&0!==r&&(r%=360,r<0&&(r+=360),r%90==0&&(this.rotation=r))}setBorderAndBackgroundColors(e){e instanceof s.Dict?(this.borderColor=y(e.getArray("BC"),null),this.backgroundColor=y(e.getArray("BG"),null)):this.borderColor=this.backgroundColor=null}setBorderStyle(e){if(this.borderStyle=new A,e instanceof s.Dict)if(e.has("BS")){const t=e.get("BS"),r=t.get("Type");r&&!(0,s.isName)(r,"Border")||(this.borderStyle.setWidth(t.get("W"),this.rectangle),this.borderStyle.setStyle(t.get("S")),this.borderStyle.setDashArray(t.getArray("D")))}else if(e.has("Border")){const t=e.getArray("Border");Array.isArray(t)&&t.length>=3&&(this.borderStyle.setHorizontalCornerRadius(t[0]),this.borderStyle.setVerticalCornerRadius(t[1]),this.borderStyle.setWidth(t[2],this.rectangle),4===t.length&&this.borderStyle.setDashArray(t[3],!0))}else this.borderStyle.setWidth(0)}setAppearance(e){this.appearance=null;const t=e.get("AP");if(!(t instanceof s.Dict))return;const r=t.get("N");if(r instanceof l.BaseStream)return void(this.appearance=r);if(!(r instanceof s.Dict))return;const n=e.get("AS");if(!(n instanceof s.Name&&r.has(n.name)))return;const a=r.get(n.name);a instanceof l.BaseStream&&(this.appearance=a)}setOptionalContent(e){this.oc=null;const t=e.get("OC");t instanceof s.Name?(0,n.warn)("setOptionalContent: Support for /Name-entry is not implemented."):t instanceof s.Dict&&(this.oc=t)}loadResources(e,t){return t.dict.getAsync("Resources").then((t=>{if(t)return new p.ObjectLoader(t,e,t.xref).load().then((function(){return t}))}))}async getOperatorList(e,t,r,a,i){const c=this.data;let l=this.appearance;const h=!!(this.data.hasOwnCanvas&&r&n.RenderingIntentFlag.DISPLAY);if(!l){if(!h)return{opList:new m.OperatorList,separateForm:!1,separateCanvas:!1};l=new o.StringStream(""),l.dict=new s.Dict}const u=l.dict,d=await this.loadResources(["ExtGState","ColorSpace","Pattern","Shading","XObject","Font"],l),f=u.getArray("BBox")||[0,0,1,1],g=u.getArray("Matrix")||[1,0,0,1,0,0],p=x(c.rect,f,g),b=new m.OperatorList;let y;return this.oc&&(y=await e.parseMarkedContentProps(this.oc,null)),void 0!==y&&b.addOp(n.OPS.beginMarkedContentProps,["OC",y]),b.addOp(n.OPS.beginAnnotation,[c.id,c.rect,p,g,h]),await e.getOperatorList({stream:l,task:t,resources:d,operatorList:b,fallbackFontDict:this._fallbackFontDict}),b.addOp(n.OPS.endAnnotation,[]),void 0!==y&&b.addOp(n.OPS.endMarkedContent,[]),this.reset(),{opList:b,separateForm:!1,separateCanvas:h}}async save(e,t,r){return null}get hasTextContent(){return!1}async extractTextContent(e,t,r){if(!this.appearance)return;const a=await this.loadResources(["ExtGState","Font","Properties","XObject"],this.appearance),i=[],s=[];let o=null;const c={desiredSize:Math.Infinity,ready:!0,enqueue(e,t){for(const t of e.items)void 0!==t.str&&(o||(o=t.transform.slice(-2)),s.push(t.str),t.hasEOL&&(i.push(s.join("")),s.length=0))}};if(await e.getTextContent({stream:this.appearance,task:t,resources:a,includeMarkedContent:!0,sink:c,viewBox:r}),this.reset(),s.length&&i.push(s.join("")),i.length>1||i[0]){const e=this.appearance.dict,t=e.getArray("BBox")||[0,0,1,1],r=e.getArray("Matrix")||[1,0,0,1,0,0],a=this.data.rect,s=x(a,t,r);s[4]-=a[0],s[5]-=a[1],o=n.Util.applyTransform(o,s),o=n.Util.applyTransform(o,r),this.data.textPosition=o,this.data.textContent=i}}getFieldObject(){return this.data.kidIds?{id:this.data.id,actions:this.data.actions,name:this.data.fieldName,strokeColor:this.data.borderColor,fillColor:this.data.backgroundColor,type:"",kidIds:this.data.kidIds,page:this.data.pageIndex,rotation:this.rotation}:null}reset(){for(const e of this._streams)e.reset()}_constructFieldName(e){if(!e.has("T")&&!e.has("Parent"))return(0,n.warn)("Unknown field name, falling back to empty field name."),"";if(!e.has("Parent"))return(0,n.stringToPDFString)(e.get("T"));const t=[];e.has("T")&&t.unshift((0,n.stringToPDFString)(e.get("T")));let r=e;const a=new s.RefSet;for(e.objId&&a.put(e.objId);r.has("Parent")&&(r=r.get("Parent"),r instanceof s.Dict&&(!r.objId||!a.has(r.objId)));)if(r.objId&&a.put(r.objId),r.has("T")){const e=(0,n.stringToPDFString)(r.get("T"));e.startsWith("#")||t.unshift(e)}return t.join(".")}}t.Annotation=S;class A{constructor(){this.width=1,this.style=n.AnnotationBorderStyleType.SOLID,this.dashArray=[3],this.horizontalCornerRadius=0,this.verticalCornerRadius=0}setWidth(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[0,0,0,0];if(e instanceof s.Name)this.width=0;else if("number"==typeof e){if(e>0){const r=(t[2]-t[0])/2,a=(t[3]-t[1])/2;r>0&&a>0&&(e>r||e>a)&&((0,n.warn)("AnnotationBorderStyle.setWidth - ignoring width: ".concat(e)),e=1)}this.width=e}}setStyle(e){if(e instanceof s.Name)switch(e.name){case"S":this.style=n.AnnotationBorderStyleType.SOLID;break;case"D":this.style=n.AnnotationBorderStyleType.DASHED;break;case"B":this.style=n.AnnotationBorderStyleType.BEVELED;break;case"I":this.style=n.AnnotationBorderStyleType.INSET;break;case"U":this.style=n.AnnotationBorderStyleType.UNDERLINE}}setDashArray(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(Array.isArray(e)&&e.length>0){let r=!0,n=!0;for(const t of e){if(!(+t>=0)){r=!1;break}t>0&&(n=!1)}r&&!n?(this.dashArray=e,t&&this.setStyle(s.Name.get("D"))):this.width=0}else e&&(this.width=0)}setHorizontalCornerRadius(e){Number.isInteger(e)&&(this.horizontalCornerRadius=e)}setVerticalCornerRadius(e){Number.isInteger(e)&&(this.verticalCornerRadius=e)}}t.AnnotationBorderStyle=A;class k extends S{constructor(e){super(e);const{dict:t}=e;if(t.has("IRT")){const e=t.getRaw("IRT");this.data.inReplyTo=e instanceof s.Ref?e.toString():null;const r=t.get("RT");this.data.replyType=r instanceof s.Name?r.name:n.AnnotationReplyType.REPLY}let r=null;if(this.data.replyType===n.AnnotationReplyType.GROUP){const e=t.get("IRT");this.setTitle(e.get("T")),this.data.titleObj=this._title,this.setContents(e.get("Contents")),this.data.contentsObj=this._contents,e.has("CreationDate")?(this.setCreationDate(e.get("CreationDate")),this.data.creationDate=this.creationDate):this.data.creationDate=null,e.has("M")?(this.setModificationDate(e.get("M")),this.data.modificationDate=this.modificationDate):this.data.modificationDate=null,r=e.getRaw("Popup"),e.has("C")?(this.setColor(e.getArray("C")),this.data.color=this.color):this.data.color=null}else this.data.titleObj=this._title,this.setCreationDate(t.get("CreationDate")),this.data.creationDate=this.creationDate,r=t.getRaw("Popup"),t.has("C")||(this.data.color=null);this.data.popupRef=r instanceof s.Ref?r.toString():null,t.has("RC")&&(this.data.richText=b.XFAFactory.getRichTextAsHtml(t.get("RC")))}setCreationDate(e){this.creationDate="string"==typeof e?e:null}_setDefaultAppearance(e){let{xref:t,extra:r,strokeColor:n,fillColor:a,blendMode:i,strokeAlpha:c,fillAlpha:l,pointsCallback:h}=e,u=Number.MAX_VALUE,d=Number.MAX_VALUE,f=Number.MIN_VALUE,g=Number.MIN_VALUE;const p=["q"];r&&p.push(r),n&&p.push("".concat(n[0]," ").concat(n[1]," ").concat(n[2]," RG")),a&&p.push("".concat(a[0]," ").concat(a[1]," ").concat(a[2]," rg"));let m=this.data.quadPoints;m||(m=[[{x:this.rectangle[0],y:this.rectangle[3]},{x:this.rectangle[2],y:this.rectangle[3]},{x:this.rectangle[0],y:this.rectangle[1]},{x:this.rectangle[2],y:this.rectangle[1]}]]);for(const e of m){const[t,r,n,a]=h(p,e);u=Math.min(u,t),f=Math.max(f,r),d=Math.min(d,n),g=Math.max(g,a)}p.push("Q");const b=new s.Dict(t),y=new s.Dict(t);y.set("Subtype",s.Name.get("Form"));const w=new o.StringStream(p.join(" "));w.dict=y,b.set("Fm0",w);const v=new s.Dict(t);i&&v.set("BM",s.Name.get(i)),"number"==typeof c&&v.set("CA",c),"number"==typeof l&&v.set("ca",l);const x=new s.Dict(t);x.set("GS0",v);const S=new s.Dict(t);S.set("ExtGState",x),S.set("XObject",b);const A=new s.Dict(t);A.set("Resources",S);const k=this.data.rect=[u,d,f,g];A.set("BBox",k),this.appearance=new o.StringStream("/GS0 gs /Fm0 Do"),this.appearance.dict=A,this._streams.push(this.appearance,w)}static async createNewAnnotation(e,t,r,n){const a=t.ref||e.getNewTemporaryRef(),i=await this.createNewAppearanceStream(t,e,n),s=[];let o;if(i){const n=e.getNewTemporaryRef();o=this.createNewDict(t,e,{apRef:n});const a=e.encrypt?e.encrypt.createCipherTransform(n.num,n.gen):null;await(0,c.writeObject)(n,i,s,a),r.push({ref:n,data:s.join("")})}else o=this.createNewDict(t,e,{});s.length=0;const l=e.encrypt?e.encrypt.createCipherTransform(a.num,a.gen):null;return await(0,c.writeObject)(a,o,s,l),{ref:a,data:s.join("")}}static async createNewPrintAnnotation(e,t,r){const n=await this.createNewAppearanceStream(t,e,r),a=this.createNewDict(t,e,{ap:n}),i=new this.prototype.constructor({dict:a,xref:e,evaluatorOptions:r.evaluatorOptions});return t.ref&&(i.ref=i.refToReplace=t.ref),i}}t.MarkupAnnotation=k;class C extends S{constructor(e){var t;super(e);const{dict:r,xref:i}=e,o=this.data;this._needAppearances=e.needAppearances,o.annotationType=n.AnnotationType.WIDGET,void 0===o.fieldName&&(o.fieldName=this._constructFieldName(r)),o.fieldName&&/\\[\\d+\\]$/.test(o.fieldName)&&!r.has("Kids")&&(o.baseFieldName=o.fieldName.substring(0,o.fieldName.lastIndexOf("["))),void 0===o.actions&&(o.actions=(0,a.collectActions)(i,r,n.AnnotationActionEventType));let c=(0,a.getInheritableProperty)({dict:r,key:"V",getArray:!0});o.fieldValue=this._decodeFormValue(c);const l=(0,a.getInheritableProperty)({dict:r,key:"DV",getArray:!0});if(o.defaultFieldValue=this._decodeFormValue(l),void 0===c&&e.xfaDatasets){const t=this._title.str;t&&(this._hasValueFromXFA=!0,o.fieldValue=c=e.xfaDatasets.getValue(t))}void 0===c&&null!==o.defaultFieldValue&&(o.fieldValue=o.defaultFieldValue),o.alternativeText=(0,n.stringToPDFString)(r.get("TU")||""),this.setDefaultAppearance(e),o.hasAppearance||(o.hasAppearance=this._needAppearances&&void 0!==o.fieldValue&&null!==o.fieldValue);const h=(0,a.getInheritableProperty)({dict:r,key:"FT"});o.fieldType=h instanceof s.Name?h.name:null;const u=(0,a.getInheritableProperty)({dict:r,key:"DR"}),d=e.acroForm.get("DR"),f=null===(t=this.appearance)||void 0===t?void 0:t.dict.get("Resources");this._fieldResources={localResources:u,acroFormResources:d,appearanceResources:f,mergedResources:s.Dict.merge({xref:i,dictArray:[u,f,d],mergeSubDicts:!0})},o.fieldFlags=(0,a.getInheritableProperty)({dict:r,key:"Ff"}),(!Number.isInteger(o.fieldFlags)||o.fieldFlags<0)&&(o.fieldFlags=0),o.readOnly=this.hasFieldFlag(n.AnnotationFieldFlag.READONLY),o.required=this.hasFieldFlag(n.AnnotationFieldFlag.REQUIRED),o.hidden=this._hasFlag(o.annotationFlags,n.AnnotationFlag.HIDDEN)}_decodeFormValue(e){return Array.isArray(e)?e.filter((e=>"string"==typeof e)).map((e=>(0,n.stringToPDFString)(e))):e instanceof s.Name?(0,n.stringToPDFString)(e.name):"string"==typeof e?(0,n.stringToPDFString)(e):null}hasFieldFlag(e){return!!(this.data.fieldFlags&e)}getRotationMatrix(e){var t;let r=null==e||null===(t=e.get(this.data.id))||void 0===t?void 0:t.rotation;if(void 0===r&&(r=this.rotation),0===r)return n.IDENTITY_MATRIX;const i=this.data.rect[2]-this.data.rect[0],s=this.data.rect[3]-this.data.rect[1];return(0,a.getRotationMatrix)(r,i,s)}getBorderAndBackgroundAppearances(e){var t;let r=null==e||null===(t=e.get(this.data.id))||void 0===t?void 0:t.rotation;if(void 0===r&&(r=this.rotation),!this.backgroundColor&&!this.borderColor)return"";const n=this.data.rect[2]-this.data.rect[0],a=this.data.rect[3]-this.data.rect[1],s=0===r||180===r?"0 0 ".concat(n," ").concat(a," re"):"0 0 ".concat(a," ").concat(n," re");let o="";return this.backgroundColor&&(o="".concat((0,i.getPdfColor)(this.backgroundColor,!0)," ").concat(s," f ")),this.borderColor&&(o+="".concat(this.borderStyle.width||1," w ").concat((0,i.getPdfColor)(this.borderColor,!1)," ").concat(s," S ")),o}async getOperatorList(e,t,r,a,i){if(a&&!(this instanceof T)&&!this.data.noHTML&&!this.data.hasOwnCanvas)return{opList:new m.OperatorList,separateForm:!0,separateCanvas:!1};if(!this._hasText)return super.getOperatorList(e,t,r,a,i);const s=await this._getAppearance(e,t,r,i);if(this.appearance&&null===s)return super.getOperatorList(e,t,r,a,i);const c=new m.OperatorList;if(!this._defaultAppearance||null===s)return{opList:c,separateForm:!1,separateCanvas:!1};const l=!!(this.data.hasOwnCanvas&&r&n.RenderingIntentFlag.DISPLAY),h=[0,0,this.data.rect[2]-this.data.rect[0],this.data.rect[3]-this.data.rect[1]],u=x(this.data.rect,h,[1,0,0,1,0,0]);let d;this.oc&&(d=await e.parseMarkedContentProps(this.oc,null)),void 0!==d&&c.addOp(n.OPS.beginMarkedContentProps,["OC",d]),c.addOp(n.OPS.beginAnnotation,[this.data.id,this.data.rect,u,this.getRotationMatrix(i),l]);const f=new o.StringStream(s);return await e.getOperatorList({stream:f,task:t,resources:this._fieldResources.mergedResources,operatorList:c}),c.addOp(n.OPS.endAnnotation,[]),void 0!==d&&c.addOp(n.OPS.endMarkedContent,[]),{opList:c,separateForm:!1,separateCanvas:l}}_getMKDict(e){const t=new s.Dict(null);return e&&t.set("R",e),this.borderColor&&t.set("BC",w(this.borderColor)),this.backgroundColor&&t.set("BG",w(this.backgroundColor)),t.size>0?t:null}amendSavedDict(e,t){}async save(e,t,r){var i;const l=null==r?void 0:r.get(this.data.id);let h=null==l?void 0:l.value,u=null==l?void 0:l.rotation;if(h===this.data.fieldValue||void 0===h){if(!this._hasValueFromXFA&&void 0===u)return null;h||(h=this.data.fieldValue)}if(void 0===u&&!this._hasValueFromXFA&&Array.isArray(h)&&Array.isArray(this.data.fieldValue)&&h.length===this.data.fieldValue.length&&h.every(((e,t)=>e===this.data.fieldValue[t])))return null;void 0===u&&(u=this.rotation);let d=null;if(!this._needAppearances&&(d=await this._getAppearance(e,t,n.RenderingIntentFlag.SAVE,r),null===d))return null;let f=!1;null!==(i=d)&&void 0!==i&&i.needAppearances&&(f=!0,d=null);const{xref:g}=e,p=g.fetchIfRef(this.ref);if(!(p instanceof s.Dict))return null;const m=new s.Dict(g);for(const e of p.getKeys())"AP"!==e&&m.set(e,p.getRaw(e));const b={path:this.data.fieldName,value:h},y=e=>(0,a.isAscii)(e)?e:(0,a.stringToUTF16String)(e,!0);m.set("V",Array.isArray(h)?h.map(y):y(h)),this.amendSavedDict(r,m);const w=this._getMKDict(u);w&&m.set("MK",w);const v=g.encrypt,x=v?v.createCipherTransform(this.ref.num,this.ref.gen):null,S=[],A=[{ref:this.ref,data:"",xfa:b,needAppearances:f}];if(null!==d){const e=g.getNewTemporaryRef(),t=new s.Dict(g);m.set("AP",t),t.set("N",e);let a=null;v&&(a=v.createCipherTransform(e.num,e.gen));const i=this._getSaveFieldResources(g),l=new o.StringStream(d),h=l.dict=new s.Dict(g);h.set("Subtype",s.Name.get("Form")),h.set("Resources",i),h.set("BBox",[0,0,this.data.rect[2]-this.data.rect[0],this.data.rect[3]-this.data.rect[1]]);const u=this.getRotationMatrix(r);u!==n.IDENTITY_MATRIX&&h.set("Matrix",u),await(0,c.writeObject)(e,l,S,a),A.push({ref:e,data:S.join(""),xfa:null,needAppearances:!1}),S.length=0}return m.set("M","D:".concat((0,n.getModificationDate)())),await(0,c.writeObject)(this.ref,m,S,x),A[0].data=S.join(""),A}async _getAppearance(e,t,r,s){if(this.hasFieldFlag(n.AnnotationFieldFlag.PASSWORD))return null;const o=null==s?void 0:s.get(this.data.id);let c,l;if(o&&(c=o.formattedValue||o.value,l=o.rotation),void 0===l&&void 0===c&&!this._needAppearances&&(!this._hasValueFromXFA||this.appearance))return null;const h=this.getBorderAndBackgroundAppearances(s);if(void 0===c&&(c=this.data.fieldValue,!c))return"/Tx BMC q ".concat(h,"Q EMC");if(Array.isArray(c)&&1===c.length&&(c=c[0]),(0,n.assert)("string"==typeof c,"Expected \`value\` to be a string."),c=c.trim(),this.data.combo){const e=this.data.options.find((e=>{let{exportValue:t}=e;return c===t}));c=(null==e?void 0:e.displayValue)||c}if(""===c)return"/Tx BMC q ".concat(h,"Q EMC");void 0===l&&(l=this.rotation);let u,d=-1;this.data.multiLine?(u=c.split(/\\r\\n?|\\n/).map((e=>e.normalize("NFC"))),d=u.length):u=[c.replace(/\\r\\n?|\\n/,"").normalize("NFC")];let f=this.data.rect[3]-this.data.rect[1],g=this.data.rect[2]-this.data.rect[0];90!==l&&270!==l||([g,f]=[f,g]),this._defaultAppearance||(this.data.defaultAppearanceData=(0,i.parseDefaultAppearance)(this._defaultAppearance="/Helvetica 0 Tf 0 g"));let p,m,b,y=await C._getFontData(e,t,this.data.defaultAppearanceData,this._fieldResources.mergedResources);const w=[];let v=!1;for(const e of u){const t=y.encodeString(e);t.length>1&&(v=!0),w.push(t.join(""))}if(v&&r&n.RenderingIntentFlag.SAVE)return{needAppearances:!0};if(v&&this._isOffscreenCanvasSupported){const r=this.data.comb?"monospace":"sans-serif",n=new i.FakeUnicodeFont(e.xref,r),s=n.createFontResources(u.join("")),o=s.getRaw("Font");if(this._fieldResources.mergedResources.has("Font")){const e=this._fieldResources.mergedResources.get("Font");for(const t of o.getKeys())e.set(t,o.getRaw(t))}else this._fieldResources.mergedResources.set("Font",o);const l=n.fontName.name;y=await C._getFontData(e,t,{fontName:l,fontSize:0},s);for(let e=0,t=w.length;e2?"/Tx BMC q ".concat(h,"BT ")+p+" 1 0 0 1 ".concat((0,a.numberToString)(2)," ").concat((0,a.numberToString)(k)," Tm (").concat((0,a.escapeString)(w[0]),") Tj ET Q EMC"):"/Tx BMC q ".concat(h,"BT ")+p+" 1 0 0 1 0 0 Tm ".concat(this._renderText(w[0],y,m,g,A,{shift:0},2,k)," ET Q EMC")}static async _getFontData(e,t,r,n){const a=new m.OperatorList,i={font:null,clone(){return this}},{fontName:o,fontSize:c}=r;return await e.handleSetFont(n,[o&&s.Name.get(o),c],null,a,t,i,null),i.font}_getTextWidth(e,t){return t.charsToGlyphs(e).reduce(((e,t)=>e+t.width),0)/1e3}_computeFontSize(e,t,r,a,s){let{fontSize:o}=this.data.defaultAppearanceData,c=(o||12)*n.LINE_FACTOR,l=Math.round(e/c);if(!o){const h=e=>Math.floor(100*e)/100;if(-1===s){const i=this._getTextWidth(r,a);o=h(Math.min(e/n.LINE_FACTOR,i>t?t/i:1/0)),l=1}else{const i=r.split(/\\r\\n?|\\n/),u=[];for(const e of i){const t=a.encodeString(e).join(""),r=a.charsToGlyphs(t),n=a.getCharPositions(t);u.push({line:t,glyphs:r,positions:n})}const d=r=>{let n=0;for(const i of u)if(n+=this._splitLine(null,a,r,t,i).length*r,n>e)return!0;return!1};for(l=Math.max(l,s);c=e/l,o=h(c/n.LINE_FACTOR),d(o);)l++}const{fontName:u,fontColor:d}=this.data.defaultAppearanceData;this._defaultAppearance=(0,i.createDefaultAppearance)({fontSize:o,fontName:u,fontColor:d})}return[this._defaultAppearance,o,e/l]}_renderText(e,t,r,n,i,s,o,c){let l;l=1===i?(n-this._getTextWidth(e,t)*r)/2:2===i?n-this._getTextWidth(e,t)*r-o:o;const h=(0,a.numberToString)(l-s.shift);return s.shift=l,"".concat(h," ").concat(c=(0,a.numberToString)(c)," Td (").concat((0,a.escapeString)(e),") Tj")}_getSaveFieldResources(e){var t;const{localResources:r,appearanceResources:n,acroFormResources:a}=this._fieldResources,i=null===(t=this.data.defaultAppearanceData)||void 0===t?void 0:t.fontName;if(!i)return r||s.Dict.empty;for(const e of[r,n])if(e instanceof s.Dict){const t=e.get("Font");if(t instanceof s.Dict&&t.has(i))return e}if(a instanceof s.Dict){const t=a.get("Font");if(t instanceof s.Dict&&t.has(i)){const n=new s.Dict(e);n.set(i,t.getRaw(i));const a=new s.Dict(e);return a.set("Font",n),s.Dict.merge({xref:e,dictArray:[a,r],mergeSubDicts:!0})}}return r||s.Dict.empty}getFieldObject(){return null}}class O extends C{constructor(e){super(e),this.data.hasOwnCanvas=this.data.readOnly&&!this.data.noHTML,this._hasText=!0;const t=e.dict;"string"!=typeof this.data.fieldValue&&(this.data.fieldValue="");let r=(0,a.getInheritableProperty)({dict:t,key:"Q"});(!Number.isInteger(r)||r<0||r>2)&&(r=null),this.data.textAlignment=r;let i=(0,a.getInheritableProperty)({dict:t,key:"MaxLen"});(!Number.isInteger(i)||i<0)&&(i=0),this.data.maxLen=i,this.data.multiLine=this.hasFieldFlag(n.AnnotationFieldFlag.MULTILINE),this.data.comb=this.hasFieldFlag(n.AnnotationFieldFlag.COMB)&&!this.hasFieldFlag(n.AnnotationFieldFlag.MULTILINE)&&!this.hasFieldFlag(n.AnnotationFieldFlag.PASSWORD)&&!this.hasFieldFlag(n.AnnotationFieldFlag.FILESELECT)&&0!==this.data.maxLen,this.data.doNotScroll=this.hasFieldFlag(n.AnnotationFieldFlag.DONOTSCROLL)}get hasTextContent(){return!!this.appearance&&!this._needAppearances}_getCombAppearance(e,t,r,n,i,s,o,c,l,h,u){const d=i/this.data.maxLen,f=this.getBorderAndBackgroundAppearances(u),g=[],p=t.getCharPositions(r);for(const[e,t]of p)g.push("(".concat((0,a.escapeString)(r.substring(e,t)),") Tj"));const m=g.join(" ".concat((0,a.numberToString)(d)," 0 Td "));return"/Tx BMC q ".concat(f,"BT ")+e+" 1 0 0 1 ".concat((0,a.numberToString)(o)," ").concat((0,a.numberToString)(c+l)," Tm ").concat(m," ET Q EMC")}_getMultilineAppearance(e,t,r,n,i,s,o,c,l,h,u,d){const f=[],g=i-2*c,p={shift:0};for(let e=0,a=t.length;e4&&void 0!==arguments[4]?arguments[4]:{};e=a.line||e;const i=a.glyphs||t.charsToGlyphs(e);if(i.length<=1)return[e];const s=a.positions||t.getCharPositions(e),o=r/1e3,c=[];let l=-1,h=-1,u=-1,d=0,f=0;for(let t=0,r=i.length;tn?(c.push(e.substring(d,r)),d=r,f=p,l=-1,u=-1):(f+=p,l=r,h=a,u=t):f+p>n?-1!==l?(c.push(e.substring(d,h)),d=h,t=u+1,l=-1,f=0):(c.push(e.substring(d,r)),d=r,f=p):f+=p}return d"Off"!==e));i.length=0,i.push("Off",e)}i.includes(this.data.fieldValue)||(this.data.fieldValue="Off"),this.data.exportValue=i[1];const o=r.get(this.data.exportValue);this.checkedAppearance=o instanceof l.BaseStream?o:null;const c=r.get("Off");this.uncheckedAppearance=c instanceof l.BaseStream?c:null,this.checkedAppearance?this._streams.push(this.checkedAppearance):this._getDefaultCheckedAppearance(e,"check"),this.uncheckedAppearance&&this._streams.push(this.uncheckedAppearance),this._fallbackFontDict=this.fallbackFontDict}_processRadioButton(e){this.data.fieldValue=this.data.buttonValue=null;const t=e.dict.get("Parent");if(t instanceof s.Dict){this.parent=e.dict.getRaw("Parent");const r=t.get("V");r instanceof s.Name&&(this.data.fieldValue=this._decodeFormValue(r))}const r=e.dict.get("AP");if(!(r instanceof s.Dict))return;const n=r.get("N");if(!(n instanceof s.Dict))return;for(const e of n.getKeys())if("Off"!==e){this.data.buttonValue=this._decodeFormValue(e);break}const a=n.get(this.data.buttonValue);this.checkedAppearance=a instanceof l.BaseStream?a:null;const i=n.get("Off");this.uncheckedAppearance=i instanceof l.BaseStream?i:null,this.checkedAppearance?this._streams.push(this.checkedAppearance):this._getDefaultCheckedAppearance(e,"disc"),this.uncheckedAppearance&&this._streams.push(this.uncheckedAppearance),this._fallbackFontDict=this.fallbackFontDict}_processPushButton(e){e.dict.has("A")||e.dict.has("AA")||this.data.alternativeText?(this.data.isTooltipOnly=!e.dict.has("A")&&!e.dict.has("AA"),u.Catalog.parseDestDictionary({destDict:e.dict,resultObj:this.data,docBaseUrl:e.pdfManager.docBaseUrl,docAttachments:e.attachments})):(0,n.warn)("Push buttons without action dictionaries are not supported")}getFieldObject(){let e,t="button";return this.data.checkBox?(t="checkbox",e=this.data.exportValue):this.data.radioButton&&(t="radiobutton",e=this.data.buttonValue),{id:this.data.id,value:this.data.fieldValue||"Off",defaultValue:this.data.defaultFieldValue,exportValues:e,editable:!this.data.readOnly,name:this.data.fieldName,rect:this.data.rect,hidden:this.data.hidden,actions:this.data.actions,page:this.data.pageIndex,strokeColor:this.data.borderColor,fillColor:this.data.backgroundColor,rotation:this.rotation,type:t}}get fallbackFontDict(){const e=new s.Dict;return e.set("BaseFont",s.Name.get("ZapfDingbats")),e.set("Type",s.Name.get("FallbackType")),e.set("Subtype",s.Name.get("FallbackType")),e.set("Encoding",s.Name.get("ZapfDingbatsEncoding")),(0,n.shadow)(this,"fallbackFontDict",e)}}class I extends C{constructor(e){super(e);const{dict:t,xref:r}=e;this.indices=t.getArray("I"),this.hasIndices=Array.isArray(this.indices)&&this.indices.length>0,this.data.options=[];const i=(0,a.getInheritableProperty)({dict:t,key:"Opt"});if(Array.isArray(i))for(let e=0,t=i.length;e=0&&t0?this.data.fieldValue[0]:null;return{id:this.data.id,value:t,defaultValue:this.data.defaultFieldValue,editable:!this.data.readOnly,name:this.data.fieldName,rect:this.data.rect,numItems:this.data.fieldValue.length,multipleSelection:this.data.multiSelect,hidden:this.data.hidden,actions:this.data.actions,items:this.data.options,page:this.data.pageIndex,strokeColor:this.data.borderColor,fillColor:this.data.backgroundColor,rotation:this.rotation,type:e}}amendSavedDict(e,t){var r;if(!this.hasIndices)return;let n=null==e||null===(r=e.get(this.data.id))||void 0===r?void 0:r.value;Array.isArray(n)||(n=[n]);const a=[],{options:i}=this.data;for(let e=0,t=0,r=i.length;er&&(r=n,t=e)}[g,p]=this._computeFontSize(e,h-4,t,f,-1)}const m=p*n.LINE_FACTOR,b=(m-p)/2,y=Math.floor(l/m);let w=0;if(d.length>0){const e=Math.min(...d),t=Math.max(...d);w=Math.max(0,t-y+1),w>e&&(w=e)}const v=Math.min(w+y+1,u),x=["/Tx BMC q","1 1 ".concat(h," ").concat(l," re W n")];if(d.length){x.push("0.600006 0.756866 0.854904 rg");for(const e of d)w<=e&&e1)return null;e=t.join(""),T.push(e);let r=0;const n=y.charsToGlyphs(e);for(const e of n)r+=e.width*F;I=Math.max(I,r)}let M=1;I>A&&(M=A/I);let E=1;const P=n.LINE_FACTOR*d,R=(n.LINE_FACTOR-n.LINE_DESCENT_FACTOR)*d,N=P*O.length;N>k&&(E=k/N);const D=d*Math.min(M,E);let B,L,_;switch(g){case 0:_=[1,0,0,1],L=[f[0],f[1],A,k],B=[f[0],f[3]-R];break;case 90:_=[0,1,-1,0],L=[f[1],-f[2],A,k],B=[f[1],-f[0]-R];break;case 180:_=[-1,0,0,-1],L=[-f[2],-f[3],A,k],B=[-f[2],-f[1]-R];break;case 270:_=[0,-1,1,0],L=[-f[3],f[0],A,k],B=[-f[3],f[2]-R]}const j=["q","".concat(_.join(" ")," 0 0 cm"),"".concat(L.join(" ")," re W n"),"BT","".concat((0,i.getPdfColor)(u,!0)),"0 Tc /Helv ".concat((0,a.numberToString)(D)," Tf")];j.push("".concat(B.join(" ")," Td (").concat((0,a.escapeString)(T[0]),") Tj"));const U=(0,a.numberToString)(P);for(let e=1,t=T.length;e(e.push("".concat(a[0]," ").concat(a[1]," m"),"".concat(a[2]," ").concat(a[3]," l"),"S"),[t[0].x-l,t[1].x+l,t[3].y-l,t[1].y+l])})}}}class D extends k{constructor(e){super(e);const{dict:t,xref:r}=e;if(this.data.annotationType=n.AnnotationType.SQUARE,this.data.hasOwnCanvas=this.data.noRotate,!this.appearance){const e=this.color?w(this.color):[0,0,0],n=t.get("CA"),a=y(t.getArray("IC"),null),i=a?w(a):null,s=i?n:null;if(0===this.borderStyle.width&&!i)return;this._setDefaultAppearance({xref:r,extra:"".concat(this.borderStyle.width," w"),strokeColor:e,fillColor:i,strokeAlpha:n,fillAlpha:s,pointsCallback:(e,t)=>{const r=t[2].x+this.borderStyle.width/2,n=t[2].y+this.borderStyle.width/2,a=t[3].x-t[2].x-this.borderStyle.width,s=t[1].y-t[3].y-this.borderStyle.width;return e.push("".concat(r," ").concat(n," ").concat(a," ").concat(s," re")),i?e.push("B"):e.push("S"),[t[0].x,t[1].x,t[3].y,t[1].y]}})}}}class B extends k{constructor(e){super(e);const{dict:t,xref:r}=e;if(this.data.annotationType=n.AnnotationType.CIRCLE,!this.appearance){const e=this.color?w(this.color):[0,0,0],n=t.get("CA"),a=y(t.getArray("IC"),null),i=a?w(a):null,s=i?n:null;if(0===this.borderStyle.width&&!i)return;const o=4/3*Math.tan(Math.PI/8);this._setDefaultAppearance({xref:r,extra:"".concat(this.borderStyle.width," w"),strokeColor:e,fillColor:i,strokeAlpha:n,fillAlpha:s,pointsCallback:(e,t)=>{const r=t[0].x+this.borderStyle.width/2,n=t[0].y-this.borderStyle.width/2,a=t[3].x-this.borderStyle.width/2,s=t[3].y+this.borderStyle.width/2,c=r+(a-r)/2,l=n+(s-n)/2,h=(a-r)/2*o,u=(s-n)/2*o;return e.push("".concat(c," ").concat(s," m"),"".concat(c+h," ").concat(s," ").concat(a," ").concat(l+u," ").concat(a," ").concat(l," c"),"".concat(a," ").concat(l-u," ").concat(c+h," ").concat(n," ").concat(c," ").concat(n," c"),"".concat(c-h," ").concat(n," ").concat(r," ").concat(l-u," ").concat(r," ").concat(l," c"),"".concat(r," ").concat(l+u," ").concat(c-h," ").concat(s," ").concat(c," ").concat(s," c"),"h"),i?e.push("B"):e.push("S"),[t[0].x,t[1].x,t[3].y,t[1].y]}})}}}class L extends k{constructor(e){super(e);const{dict:t,xref:r}=e;this.data.annotationType=n.AnnotationType.POLYLINE,this.data.hasOwnCanvas=this.data.noRotate,this.data.vertices=[],this instanceof _||(this.setLineEndings(t.getArray("LE")),this.data.lineEndings=this.lineEndings);const a=t.getArray("Vertices");if(Array.isArray(a)){for(let e=0,t=a.length;e{const r=this.data.vertices;for(let t=0,n=r.length;t{for(const t of this.data.inkLists){for(let r=0,n=t.length;re.points))),f.set("F",4),f.set("Rotate",u);const g=new s.Dict(t);f.set("BS",g),g.set("W",d),f.set("C",Array.from(o,(e=>e/255))),f.set("CA",c);const p=new s.Dict(t);return f.set("AP",p),a?p.set("N",a):p.set("N",i),f}static async createNewAppearanceStream(e,t,r){const{color:n,rect:c,paths:l,thickness:h,opacity:u}=e,d=["".concat(h," w 1 J 1 j"),"".concat((0,i.getPdfColor)(n,!1))];1!==u&&d.push("/R0 gs");const f=[];for(const{bezier:e}of l){f.length=0,f.push("".concat((0,a.numberToString)(e[0])," ").concat((0,a.numberToString)(e[1])," m"));for(let t=2,r=e.length;t(e.push("".concat(t[0].x," ").concat(t[0].y," m"),"".concat(t[1].x," ").concat(t[1].y," l"),"".concat(t[3].x," ").concat(t[3].y," l"),"".concat(t[2].x," ").concat(t[2].y," l"),"f"),[t[0].x,t[1].x,t[3].y,t[1].y])})}}else this.data.popupRef=null}}class X extends k{constructor(e){super(e);const{dict:t,xref:r}=e;if(this.data.annotationType=n.AnnotationType.UNDERLINE,this.data.quadPoints=v(t,null)){if(!this.appearance){const e=this.color?w(this.color):[0,0,0],n=t.get("CA");this._setDefaultAppearance({xref:r,extra:"[] 0 d 0.571 w",strokeColor:e,strokeAlpha:n,pointsCallback:(e,t)=>(e.push("".concat(t[2].x," ").concat(t[2].y+1.3," m"),"".concat(t[3].x," ").concat(t[3].y+1.3," l"),"S"),[t[0].x,t[1].x,t[3].y,t[1].y])})}}else this.data.popupRef=null}}class H extends k{constructor(e){super(e);const{dict:t,xref:r}=e;if(this.data.annotationType=n.AnnotationType.SQUIGGLY,this.data.quadPoints=v(t,null)){if(!this.appearance){const e=this.color?w(this.color):[0,0,0],n=t.get("CA");this._setDefaultAppearance({xref:r,extra:"[] 0 d 1 w",strokeColor:e,strokeAlpha:n,pointsCallback:(e,t)=>{const r=(t[0].y-t[2].y)/6;let n=r,a=t[2].x;const i=t[2].y,s=t[3].x;e.push("".concat(a," ").concat(i+n," m"));do{a+=2,n=0===n?r:0,e.push("".concat(a," ").concat(i+n," l"))}while(a(e.push((t[0].x+t[2].x)/2+" "+(t[0].y+t[2].y)/2+" m",(t[1].x+t[3].x)/2+" "+(t[1].y+t[3].y)/2+" l","S"),[t[0].x,t[1].x,t[3].y,t[1].y])})}}else this.data.popupRef=null}}class z extends k{constructor(e){super(e),this.data.annotationType=n.AnnotationType.STAMP,this.data.hasOwnCanvas=this.data.noRotate}static async createImage(e,t){const{width:r,height:a}=e,i=new OffscreenCanvas(r,a),c=i.getContext("2d",{alpha:!0});c.drawImage(e,0,0);const l=c.getImageData(0,0,r,a).data,h=new Uint32Array(l.buffer),u=h.some(n.FeatureTest.isLittleEndian?e=>e>>>24!=255:e=>255!=(255&e));u&&(c.fillStyle="white",c.fillRect(0,0,r,a),c.drawImage(e,0,0));const d=i.convertToBlob({type:"image/jpeg",quality:1}).then((e=>e.arrayBuffer())),f=s.Name.get("XObject"),g=s.Name.get("Image"),p=new s.Dict(t);p.set("Type",f),p.set("Subtype",g),p.set("BitsPerComponent",8),p.set("ColorSpace",s.Name.get("DeviceRGB")),p.set("Filter",s.Name.get("DCTDecode")),p.set("BBox",[0,0,r,a]),p.set("Width",r),p.set("Height",a);let m=null;if(u){const e=new Uint8Array(h.length);if(n.FeatureTest.isLittleEndian)for(let t=0,r=h.length;t>>24;else for(let t=0,r=h.length;t{var n=r(4),a=r(6),i=r(87),s=r(158),o=r(7),c=n.RegExp,l=c.prototype;a&&o((function(){var e=!0;try{c(".","d")}catch(t){e=!1}var t={},r="",n=e?"dgimsy":"gimsy",a=function(e,n){Object.defineProperty(t,e,{get:function(){return r+=n,!0}})},i={dotAll:"s",global:"g",ignoreCase:"i",multiline:"m",sticky:"y"};for(var s in e&&(i.hasIndices="d"),i)a(s,i[s]);return Object.getOwnPropertyDescriptor(l,"flags").get.call(t)!==n||r!==n}))&&i(l,"flags",{configurable:!0,get:s})},(e,t,r)=>{var n=r(47);e.exports=function(){var e=n(this),t="";return e.hasIndices&&(t+="d"),e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.dotAll&&(t+="s"),e.unicode&&(t+="u"),e.unicodeSets&&(t+="v"),e.sticky&&(t+="y"),t}},(e,t,r)=>{var n=r(3),a=r(40),i=r(64),s=r(140),o=r(160),c=r(142);n({target:"Array",proto:!0,arity:1,forced:1!==[].unshift(0)||!function(){try{Object.defineProperty([],"length",{writable:!1}).unshift()}catch(e){return e instanceof TypeError}}()},{unshift:function(e){var t=a(this),r=i(t),n=arguments.length;if(n){c(r+n);for(var l=r;l--;){var h=l+n;l in t?t[h]=t[l]:o(t,h)}for(var u=0;u{var n=r(32),a=TypeError;e.exports=function(e,t){if(!delete e[t])throw a("Cannot delete property "+n(t)+" of "+n(e))}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.FakeUnicodeFont=void 0,t.createDefaultAppearance=function(e){let{fontSize:t,fontName:r,fontColor:n}=e;return"/".concat((0,a.escapePDFName)(r)," ").concat(t," Tf ").concat(f(n,!0))},t.getPdfColor=f,t.parseAppearanceStream=function(e,t,r){return new d(e,t,r).parse()},t.parseDefaultAppearance=function(e){return new u(e).parse()},r(84),r(93),r(94),r(97),r(99),r(101),r(105),r(108),r(115),r(139);var n=r(150),a=r(149),i=r(144),s=r(162),o=r(163),c=r(209),l=r(207),h=r(154);class u extends o.EvaluatorPreprocessor{constructor(e){super(new h.StringStream(e))}parse(){const e={fn:0,args:[]},t={fontSize:0,fontName:"",fontColor:new Uint8ClampedArray(3)};try{for(;e.args.length=0,this.read(e);){if(0!==this.savedStatesDepth)continue;const{fn:r,args:a}=e;switch(0|r){case i.OPS.setFont:const[e,r]=a;e instanceof n.Name&&(t.fontName=e.name),"number"==typeof r&&r>0&&(t.fontSize=r);break;case i.OPS.setFillRGBColor:s.ColorSpace.singletons.rgb.getRgbItem(a,0,t.fontColor,0);break;case i.OPS.setFillGray:s.ColorSpace.singletons.gray.getRgbItem(a,0,t.fontColor,0);break;case i.OPS.setFillCMYKColor:s.ColorSpace.singletons.cmyk.getRgbItem(a,0,t.fontColor,0)}}}catch(e){(0,i.warn)('parseDefaultAppearance - ignoring errors: "'.concat(e,'".'))}return t}}class d extends o.EvaluatorPreprocessor{constructor(e,t,r){var n;super(e),this.stream=e,this.evaluatorOptions=t,this.xref=r,this.resources=null===(n=e.dict)||void 0===n?void 0:n.get("Resources")}parse(){const e={fn:0,args:[]};let t={scaleFactor:1,fontSize:0,fontName:"",fontColor:new Uint8ClampedArray(3),fillColorSpace:s.ColorSpace.singletons.gray},r=!1;const a=[];try{for(;e.args.length=0,!r&&this.read(e);){const{fn:o,args:c}=e;switch(0|o){case i.OPS.save:a.push({scaleFactor:t.scaleFactor,fontSize:t.fontSize,fontName:t.fontName,fontColor:t.fontColor.slice(),fillColorSpace:t.fillColorSpace});break;case i.OPS.restore:t=a.pop()||t;break;case i.OPS.setTextMatrix:t.scaleFactor*=Math.hypot(c[0],c[1]);break;case i.OPS.setFont:const[e,o]=c;e instanceof n.Name&&(t.fontName=e.name),"number"==typeof o&&o>0&&(t.fontSize=o*t.scaleFactor);break;case i.OPS.setFillColorSpace:t.fillColorSpace=s.ColorSpace.parse({cs:c[0],xref:this.xref,resources:this.resources,pdfFunctionFactory:this._pdfFunctionFactory,localColorSpaceCache:this._localColorSpaceCache});break;case i.OPS.setFillColor:t.fillColorSpace.getRgbItem(c,0,t.fontColor,0);break;case i.OPS.setFillRGBColor:s.ColorSpace.singletons.rgb.getRgbItem(c,0,t.fontColor,0);break;case i.OPS.setFillGray:s.ColorSpace.singletons.gray.getRgbItem(c,0,t.fontColor,0);break;case i.OPS.setFillCMYKColor:s.ColorSpace.singletons.cmyk.getRgbItem(c,0,t.fontColor,0);break;case i.OPS.showText:case i.OPS.showSpacedText:case i.OPS.nextLineShowText:case i.OPS.nextLineSetSpacingShowText:r=!0}}}catch(e){(0,i.warn)('parseAppearanceStream - ignoring errors: "'.concat(e,'".'))}return this.stream.reset(),delete t.scaleFactor,delete t.fillColorSpace,t}get _localColorSpaceCache(){return(0,i.shadow)(this,"_localColorSpaceCache",new c.LocalColorSpaceCache)}get _pdfFunctionFactory(){const e=new l.PDFFunctionFactory({xref:this.xref,isEvalSupported:this.evaluatorOptions.isEvalSupported});return(0,i.shadow)(this,"_pdfFunctionFactory",e)}}function f(e,t){if(e[0]===e[1]&&e[1]===e[2]){const r=e[0]/255;return"".concat((0,a.numberToString)(r)," ").concat(t?"g":"G")}return Array.from(e,(e=>(0,a.numberToString)(e/255))).join(" ")+" "+(t?"rg":"RG")}class g{constructor(e,t){this.xref=e,this.widths=null,this.firstChar=1/0,this.lastChar=-1/0,this.fontFamily=t;const r=new OffscreenCanvas(1,1);this.ctxMeasure=r.getContext("2d"),g._fontNameId||(g._fontNameId=1),this.fontName=n.Name.get("InvalidPDFjsFont_".concat(t,"_").concat(g._fontNameId++))}get toUnicodeRef(){if(!g._toUnicodeRef){const e="/CIDInit /ProcSet findresource begin\\n12 dict begin\\nbegincmap\\n/CIDSystemInfo\\n<< /Registry (Adobe)\\n/Ordering (UCS) /Supplement 0 >> def\\n/CMapName /Adobe-Identity-UCS def\\n/CMapType 2 def\\n1 begincodespacerange\\n<0000> \\nendcodespacerange\\n1 beginbfrange\\n<0000> <0000>\\nendbfrange\\nendcmap CMapName currentdict /CMap defineresource pop end end",t=g.toUnicodeStream=new h.StringStream(e),r=new n.Dict(this.xref);t.dict=r,r.set("Length",e.length),g._toUnicodeRef=this.xref.getNewPersistentRef(t)}return g._toUnicodeRef}get fontDescriptorRef(){if(!g._fontDescriptorRef){const e=new n.Dict(this.xref);e.set("Type",n.Name.get("FontDescriptor")),e.set("FontName",this.fontName),e.set("FontFamily","MyriadPro Regular"),e.set("FontBBox",[0,0,0,0]),e.set("FontStretch",n.Name.get("Normal")),e.set("FontWeight",400),e.set("ItalicAngle",0),g._fontDescriptorRef=this.xref.getNewPersistentRef(e)}return g._fontDescriptorRef}get descendantFontRef(){const e=new n.Dict(this.xref);e.set("BaseFont",this.fontName),e.set("Type",n.Name.get("Font")),e.set("Subtype",n.Name.get("CIDFontType0")),e.set("CIDToGIDMap",n.Name.get("Identity")),e.set("FirstChar",this.firstChar),e.set("LastChar",this.lastChar),e.set("FontDescriptor",this.fontDescriptorRef),e.set("DW",1e3);const t=[],r=[...this.widths.entries()].sort();let a=null,i=null;for(const[e,n]of r)a?e===a+i.length?i.push(n):(t.push(a,i),a=e,i=[n]):(a=e,i=[n]);a&&t.push(a,i),e.set("W",t);const s=new n.Dict(this.xref);return s.set("Ordering","Identity"),s.set("Registry","Adobe"),s.set("Supplement",0),e.set("CIDSystemInfo",s),this.xref.getNewPersistentRef(e)}get baseFontRef(){const e=new n.Dict(this.xref);return e.set("BaseFont",this.fontName),e.set("Type",n.Name.get("Font")),e.set("Subtype",n.Name.get("Type0")),e.set("Encoding",n.Name.get("Identity-H")),e.set("DescendantFonts",[this.descendantFontRef]),e.set("ToUnicode",this.toUnicodeRef),this.xref.getNewPersistentRef(e)}get resources(){const e=new n.Dict(this.xref),t=new n.Dict(this.xref);return t.set(this.fontName.name,this.baseFontRef),e.set("Font",t),e}_createContext(){return this.widths=new Map,this.ctxMeasure.font="1000px ".concat(this.fontFamily),this.ctxMeasure}createFontResources(e){const t=this._createContext();for(const r of e.split(/\\r\\n?|\\n/))for(const e of r.split("")){const r=e.charCodeAt(0);if(this.widths.has(r))continue;const n=t.measureText(e),a=Math.ceil(n.width);this.widths.set(r,a),this.firstChar=Math.min(r,this.firstChar),this.lastChar=Math.max(r,this.lastChar)}return this.resources}createAppearance(e,t,r,s,o,c){const l=this._createContext(),u=[];let d=-1/0;for(const t of e.split(/\\r\\n?|\\n/)){u.push(t);const e=l.measureText(t).width;d=Math.max(d,e);for(const e of t.split("")){const t=e.charCodeAt(0);let r=this.widths.get(t);if(void 0===r){const n=l.measureText(e);r=Math.ceil(n.width),this.widths.set(t,r),this.firstChar=Math.min(t,this.firstChar),this.lastChar=Math.max(t,this.lastChar)}}}d*=s/1e3;const[g,p,m,b]=t;let y=m-g,w=b-p;r%180!=0&&([y,w]=[w,y]);let v=1;d>y&&(v=y/d);let x=1;const S=i.LINE_FACTOR*s,A=i.LINE_DESCENT_FACTOR*s,k=S*u.length;k>w&&(x=w/k);const C=s*Math.min(v,x),O=["q","0 0 ".concat((0,a.numberToString)(y)," ").concat((0,a.numberToString)(w)," re W n"),"BT","1 0 0 1 0 ".concat((0,a.numberToString)(w+A)," Tm 0 Tc ").concat(f(o,!0)),"/".concat(this.fontName.name," ").concat((0,a.numberToString)(C)," Tf")],{resources:F}=this;if(1!==(c="number"==typeof c&&c>=0&&c<=1?c:1)){O.push("/R0 gs");const e=new n.Dict(this.xref),t=new n.Dict(this.xref);t.set("ca",c),t.set("CA",c),t.set("Type",n.Name.get("ExtGState")),e.set("R0",t),F.set("ExtGState",e)}const I=(0,a.numberToString)(S);for(const e of u)O.push("0 -".concat(I," Td <").concat((0,a.stringToUTF16HexString)(e),"> Tj"));O.push("ET","Q");const T=O.join("\\n"),M=new n.Dict(this.xref);if(M.set("Subtype",n.Name.get("Form")),M.set("Type",n.Name.get("XObject")),M.set("BBox",[0,0,y,w]),M.set("Length",T.length),M.set("Resources",F),r){const e=(0,a.getRotationMatrix)(r,y,w);M.set("Matrix",e)}const E=new h.StringStream(T);return E.dict=M,E}}t.FakeUnicodeFont=g},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ColorSpace=void 0,r(84),r(93),r(94),r(97),r(99),r(101),r(105),r(108),r(115),r(2);var n=r(144),a=r(150),i=r(151),s=r(149);class o{constructor(e,t){this.constructor===o&&(0,n.unreachable)("Cannot initialize ColorSpace."),this.name=e,this.numComps=t}getRgb(e,t){const r=new Uint8ClampedArray(3);return this.getRgbItem(e,t,r,0),r}getRgbItem(e,t,r,a){(0,n.unreachable)("Should not call ColorSpace.getRgbItem")}getRgbBuffer(e,t,r,a,i,s,o){(0,n.unreachable)("Should not call ColorSpace.getRgbBuffer")}getOutputLength(e,t){(0,n.unreachable)("Should not call ColorSpace.getOutputLength")}isPassthrough(e){return!1}isDefaultDecode(e,t){return o.isDefaultDecode(e,this.numComps)}fillRgb(e,t,r,n,a,i,s,o,c){const l=t*r;let h=null;const u=1<u&&"DeviceGray"!==this.name&&"DeviceRGB"!==this.name){const t=s<=8?new Uint8Array(u):new Uint16Array(u);for(let e=0;e2&&void 0!==arguments[2]?arguments[2]:null,i=arguments.length>3?arguments[3]:void 0;if((e=t.fetchIfRef(e))instanceof a.Name)switch(e.name){case"G":case"DeviceGray":return this.singletons.gray;case"RGB":case"DeviceRGB":return this.singletons.rgb;case"CMYK":case"DeviceCMYK":return this.singletons.cmyk;case"Pattern":return new l(null);default:if(r instanceof a.Dict){const n=r.get("ColorSpace");if(n instanceof a.Dict){const s=n.get(e.name);if(s){if(s instanceof a.Name)return this._parse(s,t,r,i);e=s;break}}}throw new n.FormatError("Unrecognized ColorSpace: ".concat(e.name))}if(Array.isArray(e)){const a=t.fetchIfRef(e[0]).name;let s,o,u,d,f,b;switch(a){case"G":case"DeviceGray":return this.singletons.gray;case"RGB":case"DeviceRGB":return this.singletons.rgb;case"CMYK":case"DeviceCMYK":return this.singletons.cmyk;case"CalGray":return s=t.fetchIfRef(e[1]),d=s.getArray("WhitePoint"),f=s.getArray("BlackPoint"),b=s.get("Gamma"),new g(d,f,b);case"CalRGB":s=t.fetchIfRef(e[1]),d=s.getArray("WhitePoint"),f=s.getArray("BlackPoint"),b=s.getArray("Gamma");const y=s.getArray("Matrix");return new p(d,f,b,y);case"ICCBased":const w=t.fetchIfRef(e[1]).dict;o=w.get("N");const v=w.get("Alternate");if(v){const e=this._parse(v,t,r,i);if(e.numComps===o)return e;(0,n.warn)("ICCBased color space: Ignoring incorrect /Alternate entry.")}if(1===o)return this.singletons.gray;if(3===o)return this.singletons.rgb;if(4===o)return this.singletons.cmyk;break;case"Pattern":return u=e[1]||null,u&&(u=this._parse(u,t,r,i)),new l(u);case"I":case"Indexed":u=this._parse(e[1],t,r,i);const x=t.fetchIfRef(e[2])+1,S=t.fetchIfRef(e[3]);return new h(u,x,S);case"Separation":case"DeviceN":const A=t.fetchIfRef(e[1]);o=Array.isArray(A)?A.length:1,u=this._parse(e[2],t,r,i);const k=i.create(e[3]);return new c(o,u,k);case"Lab":s=t.fetchIfRef(e[1]),d=s.getArray("WhitePoint"),f=s.getArray("BlackPoint");const C=s.getArray("Range");return new m(d,f,C);default:throw new n.FormatError("Unimplemented ColorSpace object: ".concat(a))}}throw new n.FormatError("Unrecognized ColorSpace object: ".concat(e))}static isDefaultDecode(e,t){if(!Array.isArray(e))return!0;if(2*t!==e.length)return(0,n.warn)("The decode map is not the correct length"),!0;for(let t=0,r=e.length;t=.99554525?1:d(0,1,1.055*e**(1/2.4)-.055)}function d(e,t,r){return Math.max(e,Math.min(t,r))}function f(e){return e<0?-f(-e):e>8?((e+16)/116)**3:e*l}function g(n,o,l,g,p,m){const b=d(0,1,o[l]*m),y=d(0,1,o[l+1]*m),w=d(0,1,o[l+2]*m),v=1===b?1:b**n.GR,x=1===y?1:y**n.GG,S=1===w?1:w**n.GB,A=n.MXA*v+n.MXB*x+n.MXC*S,k=n.MYA*v+n.MYB*x+n.MYC*S,C=n.MZA*v+n.MZB*x+n.MZC*S,O=s;O[0]=A,O[1]=k,O[2]=C;const F=c;!function(r,n,a){if(1===r[0]&&1===r[2])return a[0]=n[0],a[1]=n[1],void(a[2]=n[2]);const s=a;h(e,n,s);const o=i;!function(e,t,r){r[0]=1*t[0]/e[0],r[1]=1*t[1]/e[1],r[2]=1*t[2]/e[2]}(r,s,o),h(t,o,a)}(n.whitePoint,O,F);const I=s;!function(e,t,r){if(0===e[0]&&0===e[1]&&0===e[2])return r[0]=t[0],r[1]=t[1],void(r[2]=t[2]);const n=f(0),a=(1-n)/(1-f(e[0])),i=1-a,s=(1-n)/(1-f(e[1])),o=1-s,c=(1-n)/(1-f(e[2])),l=1-c;r[0]=t[0]*a+i,r[1]=t[1]*s+o,r[2]=t[2]*c+l}(n.blackPoint,F,I);const T=c;!function(r,n,a){const s=a;h(e,n,s);const o=i;!function(e,t,r){r[0]=.95047*t[0]/e[0],r[1]=1*t[1]/e[1],r[2]=1.08883*t[2]/e[2]}(r,s,o),h(t,o,a)}(a,I,T);const M=s;h(r,T,M),g[p]=255*u(M[0]),g[p+1]=255*u(M[1]),g[p+2]=255*u(M[2])}return class extends o{constructor(e,t,r,a){if(super("CalRGB",3),!e)throw new n.FormatError("WhitePoint missing - required for color space CalRGB");t||(t=new Float32Array(3)),r||(r=new Float32Array([1,1,1])),a||(a=new Float32Array([1,0,0,0,1,0,0,0,1]));const i=e[0],s=e[1],o=e[2];this.whitePoint=e;const c=t[0],l=t[1],h=t[2];if(this.blackPoint=t,this.GR=r[0],this.GG=r[1],this.GB=r[2],this.MXA=a[0],this.MYA=a[1],this.MZA=a[2],this.MXB=a[3],this.MYB=a[4],this.MZB=a[5],this.MXC=a[6],this.MYC=a[7],this.MZC=a[8],i<0||o<0||1!==s)throw new n.FormatError("Invalid WhitePoint components for ".concat(this.name,", no fallback available"));(c<0||l<0||h<0)&&((0,n.info)("Invalid BlackPoint for ".concat(this.name," [").concat(c,", ").concat(l,", ").concat(h,"], falling back to default.")),this.blackPoint=new Float32Array(3)),(this.GR<0||this.GG<0||this.GB<0)&&((0,n.info)("Invalid Gamma [".concat(this.GR,", ").concat(this.GG,", ").concat(this.GB,"] for ").concat(this.name,", falling back to default.")),this.GR=this.GG=this.GB=1)}getRgbItem(e,t,r,n){g(this,e,t,r,n,1)}getRgbBuffer(e,t,r,n,a,i,s){const o=1/((1<=6/29?e**3:108/841*(e-4/29)}function t(e,t,r,n){return r+e*(n-r)/t}function r(r,n,a,i,s,o){let c=n[a],l=n[a+1],h=n[a+2];!1!==i&&(c=t(c,i,0,100),l=t(l,i,r.amin,r.amax),h=t(h,i,r.bmin,r.bmax)),l>r.amax?l=r.amax:lr.bmax?h=r.bmax:hthis.amax||this.bmin>this.bmax)&&((0,n.info)("Invalid Range, falling back to defaults"),this.amin=-100,this.amax=100,this.bmin=-100,this.bmax=100)}getRgbItem(e,t,n,a){r(this,e,t,!1,n,a)}getRgbBuffer(e,t,n,a,i,s,o){const c=(1<{Object.defineProperty(t,"__esModule",{value:!0}),t.PartialEvaluator=t.EvaluatorPreprocessor=void 0,r(139),r(2),r(84),r(93),r(94),r(97),r(99),r(101),r(105),r(108),r(115),r(116),r(126),r(128),r(131),r(133),r(135),r(137),r(157),r(159);var n=r(144),a=r(164),s=r(150),o=r(184),c=r(187),l=r(191),h=r(200),u=r(201),d=r(192),f=r(207),g=r(166),p=r(209),m=r(154),b=r(151),y=r(210),w=r(162),v=r(168),x=r(188),S=r(211),A=r(189),k=r(149),C=r(195),O=r(190),F=r(212),I=r(213),T=r(214),M=r(215);const E=Object.freeze({maxImageSize:-1,disableFontFace:!1,ignoreErrors:!1,isEvalSupported:!0,isOffscreenCanvasSupported:!1,canvasMaxAreaInBytes:-1,fontExtraProperties:!1,useSystemFonts:!0,cMapUrl:null,standardFontDataUrl:null}),P=Promise.resolve();function R(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(Array.isArray(e)){for(const t of e){const e=R(t,!0);if(e)return e}return(0,n.warn)("Unsupported blend mode Array: ".concat(e)),"source-over"}if(!(e instanceof s.Name))return t?null:"source-over";switch(e.name){case"Normal":case"Compatible":return"source-over";case"Multiply":return"multiply";case"Screen":return"screen";case"Overlay":return"overlay";case"Darken":return"darken";case"Lighten":return"lighten";case"ColorDodge":return"color-dodge";case"ColorBurn":return"color-burn";case"HardLight":return"hard-light";case"SoftLight":return"soft-light";case"Difference":return"difference";case"Exclusion":return"exclusion";case"Hue":return"hue";case"Saturation":return"saturation";case"Color":return"color";case"Luminosity":return"luminosity"}return t?null:((0,n.warn)("Unsupported blend mode: ".concat(e.name)),"source-over")}function N(e){var t;e.fn===n.OPS.paintImageMaskXObject&&(null===(t=e.args[0])||void 0===t?void 0:t.count)>0&&e.args[0].count++}class D{constructor(){this.reset()}check(){return!(++this.checked0&&void 0!==arguments[0]?arguments[0]:null;const t=Object.create(this);return t.options=Object.assign(Object.create(null),this.options,e),t}hasBlendModes(e,t){if(!(e instanceof s.Dict))return!1;if(e.objId&&t.has(e.objId))return!1;const r=new s.RefSet(t);e.objId&&r.put(e.objId);const a=[e],i=this.xref;for(;a.length;){const e=a.shift(),o=e.get("ExtGState");if(o instanceof s.Dict)for(let e of o.getRawValues()){if(e instanceof s.Ref){if(r.has(e))continue;try{e=i.fetch(e)}catch(t){r.put(e),(0,n.info)('hasBlendModes - ignoring ExtGState: "'.concat(t,'".'));continue}}if(!(e instanceof s.Dict))continue;e.objId&&r.put(e.objId);const a=e.get("BM");if(a instanceof s.Name){if("Normal"!==a.name)return!0}else if(void 0!==a&&Array.isArray(a))for(const e of a)if(e instanceof s.Name&&"Normal"!==e.name)return!0}const c=e.get("XObject");if(c instanceof s.Dict)for(let e of c.getRawValues()){if(e instanceof s.Ref){if(r.has(e))continue;try{e=i.fetch(e)}catch(t){r.put(e),(0,n.info)('hasBlendModes - ignoring XObject: "'.concat(t,'".'));continue}}if(!(e instanceof b.BaseStream))continue;e.dict.objId&&r.put(e.dict.objId);const o=e.dict.get("Resources");!(o instanceof s.Dict)||o.objId&&r.has(o.objId)||(a.push(o),o.objId&&r.put(o.objId))}}for(const e of r)t.put(e);return!1}async fetchBuiltInCMap(e){const t=this.builtInCMapCache.get(e);if(t)return t;let r;if(null!==this.options.cMapUrl){const t="".concat(this.options.cMapUrl).concat(e,".bcmap"),a=await fetch(t);if(!a.ok)throw new Error('fetchBuiltInCMap: failed to fetch file "'.concat(t,'" with "').concat(a.statusText,'".'));r={cMapData:new Uint8Array(await a.arrayBuffer()),compressionType:n.CMapCompressionType.BINARY}}else r=await this.handler.sendWithPromise("FetchBuiltInCMap",{name:e});return r.compressionType!==n.CMapCompressionType.NONE&&this.builtInCMapCache.set(e,r),r}async fetchStandardFontData(e){const t=this.standardFontDataCache.get(e);if(t)return new m.Stream(t);if(this.options.useSystemFonts&&"Symbol"!==e&&"ZapfDingbats"!==e)return null;const r=(0,l.getFontNameToFileMap)()[e];let a;if(null!==this.options.standardFontDataUrl){const e="".concat(this.options.standardFontDataUrl).concat(r),t=await fetch(e);t.ok?a=await t.arrayBuffer():(0,n.warn)('fetchStandardFontData: failed to fetch file "'.concat(e,'" with "').concat(t.statusText,'".'))}else try{a=await this.handler.sendWithPromise("FetchStandardFontData",{filename:r})}catch(e){(0,n.warn)('fetchStandardFontData: failed to fetch file "'.concat(r,'" with "').concat(e,'".'))}return a?(this.standardFontDataCache.set(e,a),new m.Stream(a)):null}async buildFormXObject(e,t,r,a,i,o,c){const l=t.dict,h=l.getArray("Matrix");let u,d,f=l.getArray("BBox");f=Array.isArray(f)&&4===f.length?n.Util.normalizeRect(f):null,l.has("OC")&&(u=await this.parseMarkedContentProps(l.get("OC"),e)),void 0!==u&&a.addOp(n.OPS.beginMarkedContentProps,["OC",u]);const g=l.get("Group");if(g){d={matrix:h,bbox:f,smask:r,isolated:!1,knockout:!1};const t=g.get("S");let i=null;if((0,s.isName)(t,"Transparency")&&(d.isolated=g.get("I")||!1,d.knockout=g.get("K")||!1,g.has("CS"))){const t=g.getRaw("CS");i=w.ColorSpace.getCached(t,this.xref,c)||await this.parseColorSpace({cs:t,resources:e,localColorSpaceCache:c})}null!=r&&r.backdrop&&(i||(i=w.ColorSpace.singletons.rgb),r.backdrop=i.getRgb(r.backdrop,0)),a.addOp(n.OPS.beginGroup,[d])}const p=g?[h,null]:[h,f];return a.addOp(n.OPS.paintFormXObjectBegin,p),this.getOperatorList({stream:t,task:i,resources:l.get("Resources")||e,operatorList:a,initialState:o}).then((function(){a.addOp(n.OPS.paintFormXObjectEnd,[]),g&&a.addOp(n.OPS.endGroup,[d]),void 0!==u&&a.addOp(n.OPS.endMarkedContent,[])}))}_sendImgData(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const n=t?[t.bitmap||t.data.buffer]:null;return this.parsingType3Font||r?this.handler.send("commonobj",[e,"Image",t],n):this.handler.send("obj",[e,this.pageIndex,"Image",t],n)}async buildPaintImageXObject(e){let{resources:t,image:r,isInline:a=!1,operatorList:i,cacheKey:s,localImageCache:o,localColorSpaceCache:c}=e;const l=r.dict,h=l.objId,u=l.get("W","Width"),d=l.get("H","Height");if(!u||"number"!=typeof u||!d||"number"!=typeof d)return void(0,n.warn)("Image dimensions are missing, or not numbers.");const f=this.options.maxImageSize;if(-1!==f&&u*d>f){const e="Image exceeded maximum allowed size and was removed.";if(this.options.ignoreErrors)return void(0,n.warn)(e);throw new Error(e)}let g,p,m;if(l.has("OC")&&(g=await this.parseMarkedContentProps(l.get("OC"),t)),l.get("IM","ImageMask")){const e=l.get("I","Interpolate"),t=u+7>>3,a=r.getBytes(t*d),c=l.getArray("D","Decode");if(this.parsingType3Font){if(p=M.PDFImage.createRawMask({imgArray:a,width:u,height:d,imageIsFromDecodeStream:r instanceof v.DecodeStream,inverseDecode:(null==c?void 0:c[0])>0,interpolate:e}),p.cached=!!s,m=[p],i.addImageOps(n.OPS.paintImageMaskXObject,m,g),s){const e={fn:n.OPS.paintImageMaskXObject,args:m,optionalContent:g};o.set(s,h,e),h&&this._regionalImageCache.set(null,h,e)}return}if(p=await M.PDFImage.createMask({imgArray:a,width:u,height:d,imageIsFromDecodeStream:r instanceof v.DecodeStream,inverseDecode:(null==c?void 0:c[0])>0,interpolate:e,isOffscreenCanvasSupported:this.options.isOffscreenCanvasSupported}),p.isSingleOpaquePixel){if(i.addImageOps(n.OPS.paintSolidColorImageMask,[],g),s){const e={fn:n.OPS.paintSolidColorImageMask,args:[],optionalContent:g};o.set(s,h,e),h&&this._regionalImageCache.set(null,h,e)}return}const f="mask_".concat(this.idFactory.createObjId());if(i.addDependency(f),this._sendImgData(f,p),m=[{data:f,width:p.width,height:p.height,interpolate:p.interpolate,count:1}],i.addImageOps(n.OPS.paintImageMaskXObject,m,g),s){const e={fn:n.OPS.paintImageMaskXObject,args:m,optionalContent:g};o.set(s,h,e),h&&this._regionalImageCache.set(null,h,e)}return}if(a&&!l.has("SMask")&&!l.has("Mask")&&u+d<200){const e=new M.PDFImage({xref:this.xref,res:t,image:r,isInline:a,pdfFunctionFactory:this._pdfFunctionFactory,localColorSpaceCache:c});return p=await e.createImageData(!0,!1),i.isOffscreenCanvasSupported=this.options.isOffscreenCanvasSupported,void i.addImageOps(n.OPS.paintInlineImageXObject,[p],g)}let b="img_".concat(this.idFactory.createObjId()),y=!1;if(this.parsingType3Font?b="".concat(this.idFactory.getDocId(),"_type3_").concat(b):h&&(y=this.globalImageCache.shouldCache(h,this.pageIndex),y&&(b="".concat(this.idFactory.getDocId(),"_").concat(b))),i.addDependency(b),m=[b,u,d],M.PDFImage.buildImage({xref:this.xref,res:t,image:r,isInline:a,pdfFunctionFactory:this._pdfFunctionFactory,localColorSpaceCache:c}).then((async e=>{if(p=await e.createImageData(!1,this.options.isOffscreenCanvasSupported),s&&h&&y){const e=p.bitmap?p.width*p.height*4:p.data.length;this.globalImageCache.addByteSize(h,e)}return this._sendImgData(b,p,y)})).catch((e=>((0,n.warn)('Unable to decode image "'.concat(b,'": "').concat(e,'".')),this._sendImgData(b,null,y)))),i.addImageOps(n.OPS.paintImageXObject,m,g),s){const e={fn:n.OPS.paintImageXObject,args:m,optionalContent:g};o.set(s,h,e),h&&(this._regionalImageCache.set(null,h,e),y&&((0,n.assert)(!a,"Cannot cache an inline image globally."),this.globalImageCache.setData(h,{objId:b,fn:n.OPS.paintImageXObject,args:m,optionalContent:g,byteSize:0})))}}handleSMask(e,t,r,n,a,i){const s=e.get("G"),o={subtype:e.get("S").name,backdrop:e.get("BC")},c=e.get("TR");if((0,f.isPDFFunction)(c)){const e=this._pdfFunctionFactory.create(c),t=new Uint8Array(256),r=new Float32Array(1);for(let n=0;n<256;n++)r[0]=n/255,e(r,0,r,0),t[n]=255*r[0]|0;o.transferMap=t}return this.buildFormXObject(t,s,o,r,n,a.state.clone(),i)}handleTransferFunction(e){let t;if(Array.isArray(e))t=e;else{if(!(0,f.isPDFFunction)(e))return null;t=[e]}const r=[];let n=0,a=0;for(const e of t){const t=this.xref.fetchIfRef(e);if(n++,(0,s.isName)(t,"Identity")){r.push(null);continue}if(!(0,f.isPDFFunction)(t))return null;const i=this._pdfFunctionFactory.create(t),o=new Uint8Array(256),c=new Float32Array(1);for(let e=0;e<256;e++)c[0]=e/255,i(c,0,c,0),o[e]=255*c[0]|0;r.push(o),a++}return 1!==n&&4!==n||0===a?null:r}handleTilingType(e,t,r,a,i,o,c,l){const u=new T.OperatorList,d=s.Dict.merge({xref:this.xref,dictArray:[i.get("Resources"),r]});return this.getOperatorList({stream:a,task:c,resources:d,operatorList:u}).then((function(){const r=u.getIR(),n=(0,h.getTilingPatternIR)(r,i,t);o.addDependencies(u.dependencies),o.addOp(e,n),i.objId&&l.set(null,i.objId,{operatorListIR:r,dict:i})})).catch((e=>{if(!(e instanceof n.AbortException)){if(!this.options.ignoreErrors)throw e;(0,n.warn)('handleTilingType - ignoring pattern: "'.concat(e,'".'))}}))}handleSetFont(e,t,r,n,a,i){let c=arguments.length>6&&void 0!==arguments[6]?arguments[6]:null,l=arguments.length>7&&void 0!==arguments[7]?arguments[7]:null;const h=(null==t?void 0:t[0])instanceof s.Name?t[0].name:null;return this.loadFont(h,r,e,c,l).then((t=>t.font.isType3Font?t.loadType3Data(this,e,a).then((function(){return n.addDependencies(t.type3Dependencies),t})).catch((e=>new L({loadedName:"g_font_error",font:new o.ErrorFont("Type3 font load error: ".concat(e)),dict:t.font,evaluatorOptions:this.options}))):t)).then((e=>(i.font=e.font,e.send(this.handler),e.loadedName)))}handleText(e,t){const r=t.font,a=r.charsToGlyphs(e);return r.data&&(t.textRenderingMode&n.TextRenderingMode.ADD_TO_PATH_FLAG||"Pattern"===t.fillColorSpace.name||r.disableFontFace||this.options.disableFontFace)&&B.buildFontPaths(r,a,this.handler,this.options),a}ensureStateFont(e){if(e.font)return;const t=new n.FormatError("Missing setFont (Tf) operator before text rendering operator.");if(!this.options.ignoreErrors)throw t;(0,n.warn)('ensureStateFont: "'.concat(t,'".'))}async setGState(e){let{resources:t,gState:r,operatorList:a,cacheKey:i,task:o,stateManager:c,localGStateCache:l,localColorSpaceCache:h}=e;const u=r.objId;let d=!0;const f=[];let g=Promise.resolve();for(const e of r.getKeys()){const i=r.get(e);switch(e){case"Type":break;case"LW":case"LC":case"LJ":case"ML":case"D":case"RI":case"FL":case"CA":case"ca":f.push([e,i]);break;case"Font":d=!1,g=g.then((()=>this.handleSetFont(t,null,i[0],a,o,c.state).then((function(t){a.addDependency(t),f.push([e,[t,i[1]]])}))));break;case"BM":f.push([e,R(i)]);break;case"SMask":if((0,s.isName)(i,"None")){f.push([e,!1]);break}i instanceof s.Dict?(d=!1,g=g.then((()=>this.handleSMask(i,t,a,o,c,h))),f.push([e,!0])):(0,n.warn)("Unsupported SMask type");break;case"TR":const r=this.handleTransferFunction(i);f.push([e,r]);break;case"OP":case"op":case"OPM":case"BG":case"BG2":case"UCR":case"UCR2":case"TR2":case"HT":case"SM":case"SA":case"AIS":case"TK":(0,n.info)("graphic state operator "+e);break;default:(0,n.info)("Unknown graphic state operator "+e)}}return g.then((function(){f.length>0&&a.addOp(n.OPS.setGState,[f]),d&&l.set(i,u,f)}))}loadFont(e,t,r){var a;let i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,c=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null;const l=async()=>new L({loadedName:"g_font_error",font:new o.ErrorFont('Font "'.concat(e,'" is not available.')),dict:t,evaluatorOptions:this.options});let h;if(t)t instanceof s.Ref&&(h=t);else{const t=r.get("Font");t&&(h=t.getRaw(e))}if(h){if(this.parsingType3Font&&this.type3FontRefs.has(h))return l();if(this.fontCache.has(h))return this.fontCache.get(h);t=this.xref.fetchIfRef(h)}if(!(t instanceof s.Dict)){if(!this.options.ignoreErrors&&!this.parsingType3Font)return(0,n.warn)('Font "'.concat(e,'" is not available.')),l();(0,n.warn)('Font "'.concat(e,'" is not available -- attempting to fallback to a default font.')),t=i||B.fallbackFontDict}if(t.cacheKey&&this.fontCache.has(t.cacheKey))return this.fontCache.get(t.cacheKey);const u=new n.PromiseCapability;let d;try{d=this.preEvaluateFont(t),d.cssFontInfo=c}catch(e){return(0,n.warn)('loadFont - preEvaluateFont failed: "'.concat(e,'".')),l()}const{descriptor:f,hash:g}=d,p=h instanceof s.Ref;let m;if(g&&f instanceof s.Dict){const e=f.fontAliases||(f.fontAliases=Object.create(null));if(e[g]){const t=e[g].aliasRef;if(p&&t&&this.fontCache.has(t))return this.fontCache.putAlias(h,t),this.fontCache.get(h)}else e[g]={fontID:this.idFactory.createFontId()};p&&(e[g].aliasRef=h),m=e[g].fontID}else m=this.idFactory.createFontId();return(0,n.assert)(null===(a=m)||void 0===a?void 0:a.startsWith("f"),'The "fontID" must be (correctly) defined.'),p?this.fontCache.put(h,u.promise):(t.cacheKey="cacheKey_".concat(m),this.fontCache.put(t.cacheKey,u.promise)),t.loadedName="".concat(this.idFactory.getDocId(),"_").concat(m),this.translateFont(d).then((e=>{u.resolve(new L({loadedName:t.loadedName,font:e,dict:t,evaluatorOptions:this.options}))})).catch((e=>{(0,n.warn)('loadFont - translateFont failed: "'.concat(e,'".')),u.resolve(new L({loadedName:t.loadedName,font:new o.ErrorFont(e instanceof Error?e.message:e),dict:t,evaluatorOptions:this.options}))})),u.promise}buildPath(e,t,r){let a=arguments.length>3&&void 0!==arguments[3]&&arguments[3];const i=e.length-1;if(r||(r=[]),i<0||e.fnArray[i]!==n.OPS.constructPath){let i;switch(a&&((0,n.warn)('Encountered path operator "'.concat(t,'" inside of a text object.')),e.addOp(n.OPS.save,null)),t){case n.OPS.rectangle:const e=r[0]+r[2],t=r[1]+r[3];i=[Math.min(r[0],e),Math.max(r[0],e),Math.min(r[1],t),Math.max(r[1],t)];break;case n.OPS.moveTo:case n.OPS.lineTo:i=[r[0],r[0],r[1],r[1]];break;default:i=[1/0,-1/0,1/0,-1/0]}e.addOp(n.OPS.constructPath,[[t],r,i]),a&&e.addOp(n.OPS.restore,null)}else{const a=e.argsArray[i];a[0].push(t),a[1].push(...r);const s=a[2];switch(t){case n.OPS.rectangle:const e=r[0]+r[2],t=r[1]+r[3];s[0]=Math.min(s[0],r[0],e),s[1]=Math.max(s[1],r[0],e),s[2]=Math.min(s[2],r[1],t),s[3]=Math.max(s[3],r[1],t);break;case n.OPS.moveTo:case n.OPS.lineTo:s[0]=Math.min(s[0],r[0]),s[1]=Math.max(s[1],r[0]),s[2]=Math.min(s[2],r[1]),s[3]=Math.max(s[3],r[1])}}}parseColorSpace(e){let{cs:t,resources:r,localColorSpaceCache:a}=e;return w.ColorSpace.parseAsync({cs:t,xref:this.xref,resources:r,pdfFunctionFactory:this._pdfFunctionFactory,localColorSpaceCache:a}).catch((e=>{if(e instanceof n.AbortException)return null;if(this.options.ignoreErrors)return(0,n.warn)('parseColorSpace - ignoring ColorSpace: "'.concat(e,'".')),null;throw e}))}parseShading(e){let{shading:t,resources:r,localColorSpaceCache:n,localShadingPatternCache:a}=e,i=a.get(t);if(!i){const e=h.Pattern.parseShading(t,this.xref,r,this._pdfFunctionFactory,n).getIR();i="pattern_".concat(this.idFactory.createObjId()),this.parsingType3Font&&(i="".concat(this.idFactory.getDocId(),"_type3_").concat(i)),a.set(t,i),this.parsingType3Font?this.handler.send("commonobj",[i,"Pattern",e]):this.handler.send("obj",[i,this.pageIndex,"Pattern",e])}return i}handleColorN(e,t,r,a,i,o,c,l,u,d){const f=r.pop();if(f instanceof s.Name){const g=i.getRaw(f.name),p=g instanceof s.Ref&&u.getByRef(g);if(p)try{const n=a.base?a.base.getRgb(r,0):null,i=(0,h.getTilingPatternIR)(p.operatorListIR,p.dict,n);return void e.addOp(t,i)}catch(e){}const m=this.xref.fetchIfRef(g);if(m){const i=m instanceof b.BaseStream?m.dict:m,s=i.get("PatternType");if(1===s){const n=a.base?a.base.getRgb(r,0):null;return this.handleTilingType(t,n,o,m,i,e,c,u)}if(2===s){const r=i.get("Shading"),n=i.getArray("Matrix"),a=this.parseShading({shading:r,resources:o,localColorSpaceCache:l,localShadingPatternCache:d});return void e.addOp(t,["Shading",a,n])}throw new n.FormatError("Unknown PatternType: ".concat(s))}}throw new n.FormatError("Unknown PatternName: ".concat(f))}_parseVisibilityExpression(e,t,r){if(++t>10)return void(0,n.warn)("Visibility expression is too deeply nested");const a=e.length,i=this.xref.fetchIfRef(e[0]);if(!(a<2)&&i instanceof s.Name){switch(i.name){case"And":case"Or":case"Not":r.push(i.name);break;default:return void(0,n.warn)("Invalid operator ".concat(i.name," in visibility expression"))}for(let n=1;n0)return{type:"OCMD",expression:t}}const t=r.get("OCGs");if(Array.isArray(t)||t instanceof s.Dict){const e=[];if(Array.isArray(t))for(const r of t)e.push(r.toString());else e.push(t.objId);return{type:a,ids:e,policy:r.get("P")instanceof s.Name?r.get("P").name:null,expression:null}}if(t instanceof s.Ref)return{type:a,id:t.toString()}}return null}getOperatorList(e){let{stream:t,task:r,resources:a,operatorList:i,initialState:o=null,fallbackFontDict:c=null}=e;if(a||(a=s.Dict.empty),o||(o=new U),!i)throw new Error('getOperatorList: missing "operatorList" parameter');const l=this,h=this.xref;let u=!1;const d=new p.LocalImageCache,f=new p.LocalColorSpaceCache,g=new p.LocalGStateCache,m=new p.LocalTilingPatternCache,y=new Map,v=a.get("XObject")||s.Dict.empty,x=a.get("Pattern")||s.Dict.empty,S=new _(o),A=new $(t,h,S),k=new D;function C(e){for(let e=0,t=A.savedStatesDepth;e0&&i.addOp(n.OPS.setGState,[t]),e=null;continue}}return void p(new Promise((function(e,t){if(!R)throw new n.FormatError("GState must be referred to by name.");const o=a.get("ExtGState");if(!(o instanceof s.Dict))throw new n.FormatError("ExtGState should be a dictionary.");const c=o.get(E);if(!(c instanceof s.Dict))throw new n.FormatError("GState should be a dictionary.");l.setGState({resources:a,gState:c,operatorList:i,cacheKey:E,task:r,stateManager:S,localGStateCache:g,localColorSpaceCache:f}).then(e,t)})).catch((function(e){if(!(e instanceof n.AbortException)){if(!l.options.ignoreErrors)throw e;(0,n.warn)('getOperatorList - ignoring ExtGState: "'.concat(e,'".'))}})));case n.OPS.moveTo:case n.OPS.lineTo:case n.OPS.curveTo:case n.OPS.curveTo2:case n.OPS.curveTo3:case n.OPS.closePath:case n.OPS.rectangle:l.buildPath(i,t,e,u);continue;case n.OPS.markPoint:case n.OPS.markPointProps:case n.OPS.beginCompat:case n.OPS.endCompat:continue;case n.OPS.beginMarkedContentProps:if(!(e[0]instanceof s.Name)){(0,n.warn)("Expected name for beginMarkedContentProps arg0=".concat(e[0]));continue}if("OC"===e[0].name)return void p(l.parseMarkedContentProps(e[1],a).then((e=>{i.addOp(n.OPS.beginMarkedContentProps,["OC",e])})).catch((e=>{if(!(e instanceof n.AbortException)){if(!l.options.ignoreErrors)throw e;(0,n.warn)('getOperatorList - ignoring beginMarkedContentProps: "'.concat(e,'".'))}})));e=[e[0].name,e[1]instanceof s.Dict?e[1].get("MCID"):null];break;case n.OPS.beginMarkedContent:case n.OPS.endMarkedContent:default:if(null!==e){for(I=0,T=e.length;I{if(!(e instanceof n.AbortException)){if(!this.options.ignoreErrors)throw e;(0,n.warn)('getOperatorList - ignoring errors during "'.concat(r.name,'" task: "').concat(e,'".')),C()}}))}getTextContent(e){let{stream:t,task:r,resources:a,stateManager:i=null,includeMarkedContent:o=!1,sink:c,seenStyles:l=new Set,viewBox:h,markedContentData:u=null,disableNormalization:d=!1}=e;a||(a=s.Dict.empty),i||(i=new _(new j)),o&&(u||(u={level:0}));const f={items:[],styles:Object.create(null)},g={initialized:!1,str:[],totalWidth:0,totalHeight:0,width:0,height:0,vertical:!1,prevTransform:null,textAdvanceScale:0,spaceInFlowMin:0,spaceInFlowMax:0,trackingSpaceMin:1/0,negativeSpaceMax:-1/0,notASpace:-1/0,transform:null,fontName:null,hasEOL:!1},m=[" "," "];let w=0;function v(e){const t=(w+1)%2,r=" "!==m[w]&&" "===m[t];return m[w]=e,w=t,r}function x(){return" "!==m[w]&&" "===m[(w+1)%2]}function S(){m[0]=m[1]=" ",w=0}const A=this,k=this.xref,C=[];let O=null;const F=new p.LocalImageCache,I=new p.LocalGStateCache,T=new $(t,k,i);let M;function E(e){let{width:t=0,height:r=0,transform:n=g.prevTransform,fontName:a=g.fontName}=e;f.items.push({str:" ",dir:"ltr",width:t,height:r,transform:n,fontName:a,hasEOL:!1})}function R(){const e=M.font,t=[M.fontSize*M.textHScale,0,0,M.fontSize,0,M.textRise];if(e.isType3Font&&(M.fontSize<=1||e.isCharBBox)&&!(0,n.isArrayEqual)(M.fontMatrix,n.FONT_IDENTITY_MATRIX)){const r=e.bbox[3]-e.bbox[1];r>0&&(t[3]*=r*M.fontMatrix[3])}return n.Util.transform(M.ctm,n.Util.transform(M.textMatrix,t))}function N(){if(g.initialized)return g;const{font:e,loadedName:t}=M;l.has(t)||(l.add(t),f.styles[t]={fontFamily:e.fallbackName,ascent:e.ascent,descent:e.descent,vertical:e.vertical}),g.fontName=t;const r=g.transform=R();e.vertical?(g.width=g.totalWidth=Math.hypot(r[0],r[1]),g.height=g.totalHeight=0,g.vertical=!0):(g.width=g.totalWidth=0,g.height=g.totalHeight=Math.hypot(r[2],r[3]),g.vertical=!1);const n=Math.hypot(M.textLineMatrix[0],M.textLineMatrix[1]),a=Math.hypot(M.ctm[0],M.ctm[1]);g.textAdvanceScale=a*n;const{fontSize:i}=M;return g.trackingSpaceMin=.102*i,g.notASpace=.03*i,g.negativeSpaceMax=-.2*i,g.spaceInFlowMin=.102*i,g.spaceInFlowMax=.6*i,g.hasEOL=!1,g.initialized=!0,g}function B(){if(!g.initialized)return;const e=Math.hypot(M.textLineMatrix[0],M.textLineMatrix[1]),t=Math.hypot(M.ctm[0],M.ctm[1])*e;t!==g.textAdvanceScale&&(g.vertical?(g.totalHeight+=g.height*g.textAdvanceScale,g.height=0):(g.totalWidth+=g.width*g.textAdvanceScale,g.width=0),g.textAdvanceScale=t)}function L(e,t){return A.loadFont(e,t,a).then((function(e){return e.font.isType3Font?e.loadType3Data(A,a,r).catch((function(){})).then((function(){return e})):e})).then((function(e){M.loadedName=e.loadedName,M.font=e.font,M.fontMatrix=e.font.fontMatrix||n.FONT_IDENTITY_MATRIX}))}function U(e,t,r){const n=Math.hypot(r[0],r[1]);return[(r[0]*e+r[1]*t)/n,(r[2]*e+r[3]*t)/n]}function X(e){var t;const r=R();let n=r[4],a=r[5];if(null!==(t=M.font)&&void 0!==t&&t.vertical){if(nh[2]||a+eh[3])return!1}else if(n+eh[2]||ah[3])return!1;if(!M.font||!g.prevTransform)return!0;let i=g.prevTransform[4],s=g.prevTransform[5];if(i===n&&s===a)return!0;let o=-1;switch(r[0]&&0===r[1]&&0===r[2]?o=r[0]>0?0:180:r[1]&&0===r[0]&&0===r[3]&&(o=r[1]>0?90:270),o){case 0:break;case 90:[n,a]=[a,n],[i,s]=[s,i];break;case 180:[n,a,i,s]=[-n,-a,-i,-s];break;case 270:[n,a]=[-a,-n],[i,s]=[-s,-i];break;default:[n,a]=U(n,a,r),[i,s]=U(i,s,g.prevTransform)}if(M.font.vertical){const e=(s-a)/g.textAdvanceScale,t=n-i,r=Math.sign(g.height);return e.5*g.width?(q(),!0):(S(),G(),!0):Math.abs(t)>g.width?(q(),!0):(e<=r*g.notASpace&&S(),e<=r*g.trackingSpaceMin?x()?(S(),G(),E({height:Math.abs(e)})):g.height+=e:z(e,g.prevTransform,r)||(0===g.str.length?(S(),E({height:Math.abs(e)})):g.height+=e),Math.abs(t)>.25*g.width&&G(),!0)}const c=(n-i)/g.textAdvanceScale,l=a-s,u=Math.sign(g.width);return c.5*g.height?(q(),!0):(S(),G(),!0):Math.abs(l)>g.height?(q(),!0):(c<=u*g.notASpace&&S(),c<=u*g.trackingSpaceMin?x()?(S(),G(),E({width:Math.abs(c)})):g.width+=c:z(c,g.prevTransform,u)||(0===g.str.length?(S(),E({width:Math.abs(c)})):g.width+=c),Math.abs(l)>.25*g.height&&G(),!0)}function H(e){let{chars:t,extraSpacing:r}=e;const n=M.font;if(!t){const e=M.charSpacing+r;return void(e&&(n.vertical?M.translateTextMatrix(0,-e):M.translateTextMatrix(e*M.textHScale,0)))}const a=n.charsToGlyphs(t),i=M.fontMatrix[0]*M.fontSize;for(let e=0,t=a.length;e0&&void 0!==arguments[0]&&arguments[0];const t=f.items.length;0===t||e&&t<10||(c.enqueue(f,t),f.items=[],f.styles=Object.create(null))}const V=new D;return new Promise((function e(t,g){const p=function(r){W(!0),Promise.all([r,c.ready]).then((function(){try{e(t,g)}catch(e){g(e)}}),g)};r.ensureNotTerminated(),V.reset();const m={};let y,w=[];for(;!(y=V.check())&&(w.length=0,m.args=w,T.read(m));){const e=M;M=i.state;const t=m.fn;switch(w=m.args,0|t){case n.OPS.setFont:var v=w[0].name,x=w[1];if(M.font&&v===M.fontName&&x===M.fontSize)break;return G(),M.fontName=v,M.fontSize=x,void p(L(v,null));case n.OPS.setTextRise:M.textRise=w[0];break;case n.OPS.setHScale:M.textHScale=w[0]/100;break;case n.OPS.setLeading:M.leading=w[0];break;case n.OPS.moveText:M.translateTextLineMatrix(w[0],w[1]),M.textMatrix=M.textLineMatrix.slice();break;case n.OPS.setLeadingMoveText:M.leading=-w[1],M.translateTextLineMatrix(w[0],w[1]),M.textMatrix=M.textLineMatrix.slice();break;case n.OPS.nextLine:M.carriageReturn();break;case n.OPS.setTextMatrix:M.setTextMatrix(w[0],w[1],w[2],w[3],w[4],w[5]),M.setTextLineMatrix(w[0],w[1],w[2],w[3],w[4],w[5]),B();break;case n.OPS.setCharSpacing:M.charSpacing=w[0];break;case n.OPS.setWordSpacing:M.wordSpacing=w[0];break;case n.OPS.beginText:M.textMatrix=n.IDENTITY_MATRIX.slice(),M.textLineMatrix=n.IDENTITY_MATRIX.slice();break;case n.OPS.showSpacedText:if(!i.state.font){A.ensureStateFont(i.state);continue}const t=(M.font.vertical?1:-1)*M.fontSize/1e3,g=w[0];for(let e=0,r=g.length;e0){const e=C.join("");C.length=0,H({chars:e,extraSpacing:0})}break;case n.OPS.showText:if(!i.state.font){A.ensureStateFont(i.state);continue}H({chars:w[0],extraSpacing:0});break;case n.OPS.nextLineShowText:if(!i.state.font){A.ensureStateFont(i.state);continue}M.carriageReturn(),H({chars:w[0],extraSpacing:0});break;case n.OPS.nextLineSetSpacingShowText:if(!i.state.font){A.ensureStateFont(i.state);continue}M.wordSpacing=w[0],M.charSpacing=w[1],M.carriageReturn(),H({chars:w[2],extraSpacing:0});break;case n.OPS.paintXObject:G(),O||(O=a.get("XObject")||s.Dict.empty);var S=w[0]instanceof s.Name,E=w[0].name;if(S&&F.getByName(E))break;return void p(new Promise((function(e,t){if(!S)throw new n.FormatError("XObject must be referred to by name.");let f=O.getRaw(E);if(f instanceof s.Ref){if(F.getByRef(f))return void e();if(A.globalImageCache.getData(f,A.pageIndex))return void e();f=k.fetch(f)}if(!(f instanceof b.BaseStream))throw new n.FormatError("XObject should be a stream");const g=f.dict.get("Subtype");if(!(g instanceof s.Name))throw new n.FormatError("XObject should have a Name subtype");if("Form"!==g.name)return F.set(E,f.dict.objId,!0),void e();const p=i.state.clone(),m=new _(p),y=f.dict.getArray("Matrix");Array.isArray(y)&&6===y.length&&m.transform(y),W();const w={enqueueInvoked:!1,enqueue(e,t){this.enqueueInvoked=!0,c.enqueue(e,t)},get desiredSize(){return c.desiredSize},get ready(){return c.ready}};A.getTextContent({stream:f,task:r,resources:f.dict.get("Resources")||a,stateManager:m,includeMarkedContent:o,sink:w,seenStyles:l,viewBox:h,markedContentData:u,disableNormalization:d}).then((function(){w.enqueueInvoked||F.set(E,f.dict.objId,!0),e()}),t)})).catch((function(e){if(!(e instanceof n.AbortException)){if(!A.options.ignoreErrors)throw e;(0,n.warn)('getTextContent - ignoring XObject: "'.concat(e,'".'))}})));case n.OPS.setGState:if(S=w[0]instanceof s.Name,E=w[0].name,S&&I.getByName(E))break;return void p(new Promise((function(e,t){if(!S)throw new n.FormatError("GState must be referred to by name.");const r=a.get("ExtGState");if(!(r instanceof s.Dict))throw new n.FormatError("ExtGState should be a dictionary.");const i=r.get(E);if(!(i instanceof s.Dict))throw new n.FormatError("GState should be a dictionary.");const o=i.get("Font");o?(G(),M.fontName=null,M.fontSize=o[1],L(null,o[0]).then(e,t)):(I.set(E,i.objId,!0),e())})).catch((function(e){if(!(e instanceof n.AbortException)){if(!A.options.ignoreErrors)throw e;(0,n.warn)('getTextContent - ignoring ExtGState: "'.concat(e,'".'))}})));case n.OPS.beginMarkedContent:G(),o&&(u.level++,f.items.push({type:"beginMarkedContent",tag:w[0]instanceof s.Name?w[0].name:null}));break;case n.OPS.beginMarkedContentProps:if(G(),o){u.level++;let e=null;w[1]instanceof s.Dict&&(e=w[1].get("MCID")),f.items.push({type:"beginMarkedContentProps",id:Number.isInteger(e)?"".concat(A.idFactory.getPageObjId(),"_mc").concat(e):null,tag:w[0]instanceof s.Name?w[0].name:null})}break;case n.OPS.endMarkedContent:if(G(),o){if(0===u.level)break;u.level--,f.items.push({type:"endMarkedContent"})}break;case n.OPS.restore:!e||e.font===M.font&&e.fontSize===M.fontSize&&e.fontName===M.fontName||G()}if(f.items.length>=c.desiredSize){y=!0;break}}y?p(P):(G(),W(),t())})).catch((e=>{if(!(e instanceof n.AbortException)){if(!this.options.ignoreErrors)throw e;(0,n.warn)('getTextContent - ignoring errors during "'.concat(r.name,'" task: "').concat(e,'".')),G(),W()}}))}extractDataStructures(e,t,r){const a=this.xref;let i;const o=this.readToUnicode(r.toUnicode||e.get("ToUnicode")||t.get("ToUnicode"));if(r.composite){const t=e.get("CIDSystemInfo");t instanceof s.Dict&&(r.cidSystemInfo={registry:(0,n.stringToPDFString)(t.get("Registry")),ordering:(0,n.stringToPDFString)(t.get("Ordering")),supplement:t.get("Supplement")});try{const t=e.get("CIDToGIDMap");t instanceof b.BaseStream&&(i=t.getBytes())}catch(e){if(!this.options.ignoreErrors)throw e;(0,n.warn)('extractDataStructures - ignoring CIDToGIDMap data: "'.concat(e,'".'))}}const h=[];let u,d=null;if(e.has("Encoding")){if(u=e.get("Encoding"),u instanceof s.Dict){if(d=u.get("BaseEncoding"),d=d instanceof s.Name?d.name:null,u.has("Differences")){const e=u.get("Differences");let t=0;for(const r of e){const e=a.fetchIfRef(r);if("number"==typeof e)t=e;else{if(!(e instanceof s.Name))throw new n.FormatError("Invalid entry in 'Differences' array: ".concat(e));h[t++]=e.name}}}}else if(u instanceof s.Name)d=u.name;else{const e="Encoding is not a Name nor a Dict";if(!this.options.ignoreErrors)throw new n.FormatError(e);(0,n.warn)(e)}"MacRomanEncoding"!==d&&"MacExpertEncoding"!==d&&"WinAnsiEncoding"!==d&&(d=null)}const f=!r.file||r.isInternalFont,g=(0,l.getSymbolsFonts)()[r.name];if(d&&f&&g&&(d=null),d)r.defaultEncoding=(0,c.getEncoding)(d);else{const e=!!(r.flags&x.FontFlags.Symbolic),t=!!(r.flags&x.FontFlags.Nonsymbolic);u=c.StandardEncoding,"TrueType"!==r.type||t||(u=c.WinAnsiEncoding),(e||g)&&(u=c.MacRomanEncoding,f&&(/Symbol/i.test(r.name)?u=c.SymbolSetEncoding:/Dingbats/i.test(r.name)?u=c.ZapfDingbatsEncoding:/Wingdings/i.test(r.name)&&(u=c.WinAnsiEncoding))),r.defaultEncoding=u}return r.differences=h,r.baseEncodingName=d,r.hasEncoding=!!d||h.length>0,r.dict=e,o.then((e=>(r.toUnicode=e,this.buildToUnicode(r)))).then((e=>(r.toUnicode=e,i&&(r.cidToGidMap=this.readCidToGidMap(i,e)),r)))}_simpleFontToUnicode(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];(0,n.assert)(!e.composite,"Must be a simple font.");const r=[],a=e.defaultEncoding.slice(),i=e.baseEncodingName,s=e.differences;for(const e in s){const t=s[e];".notdef"!==t&&(a[e]=t)}const o=(0,A.getGlyphsUnicode)();for(const n in a){let s=a[n];if(""===s)continue;let l=o[s];if(void 0!==l){r[n]=String.fromCharCode(l);continue}let h=0;switch(s[0]){case"G":3===s.length&&(h=parseInt(s.substring(1),16));break;case"g":5===s.length&&(h=parseInt(s.substring(1),16));break;case"C":case"c":if(s.length>=3&&s.length<=4){const r=s.substring(1);if(t){h=parseInt(r,16);break}if(h=+r,Number.isNaN(h)&&Number.isInteger(parseInt(r,16)))return this._simpleFontToUnicode(e,!0)}break;case"u":l=(0,O.getUnicodeForGlyph)(s,o),-1!==l&&(h=l);break;default:switch(s){case"f_h":case"f_t":case"T_h":r[n]=s.replaceAll("_","");continue}}if(h>0&&h<=1114111&&Number.isInteger(h)){if(i&&h===+n){const e=(0,c.getEncoding)(i);if(e&&(s=e[n])){r[n]=String.fromCharCode(o[s]);continue}}r[n]=String.fromCodePoint(h)}}return r}async buildToUnicode(e){var t;if(e.hasIncludedToUnicodeMap=(null===(t=e.toUnicode)||void 0===t?void 0:t.length)>0,e.hasIncludedToUnicodeMap)return!e.composite&&e.hasEncoding&&(e.fallbackToUnicode=this._simpleFontToUnicode(e)),e.toUnicode;if(!e.composite)return new d.ToUnicodeMap(this._simpleFontToUnicode(e));if(e.composite&&(e.cMap.builtInCMap&&!(e.cMap instanceof a.IdentityCMap)||"Adobe"===e.cidSystemInfo.registry&&("GB1"===e.cidSystemInfo.ordering||"CNS1"===e.cidSystemInfo.ordering||"Japan1"===e.cidSystemInfo.ordering||"Korea1"===e.cidSystemInfo.ordering))){const{registry:t,ordering:r}=e.cidSystemInfo,i=s.Name.get("".concat(t,"-").concat(r,"-UCS2")),o=await a.CMapFactory.create({encoding:i,fetchBuiltInCMap:this._fetchBuiltInCMapBound,useCMap:null}),c=[],l=[];return e.cMap.forEach((function(e,t){if(t>65535)throw new n.FormatError("Max size of CID is 65,535");const r=o.lookup(t);if(r){l.length=0;for(let e=0,t=r.length;e{if(e instanceof n.AbortException)return null;if(this.options.ignoreErrors)return(0,n.warn)('readToUnicode - ignoring ToUnicode data: "'.concat(e,'".')),null;throw e})):Promise.resolve(null):Promise.resolve(null)}readCidToGidMap(e,t){const r=[];for(let n=0,a=e.length;n>1;(0!==a||t.has(i))&&(r[i]=a)}return r}extractWidths(e,t,r){const n=this.xref;let a=[],i=0;const o=[];let c,l,h,u,d,f,g,p;if(r.composite){if(i=e.has("DW")?e.get("DW"):1e3,p=e.get("W"),p)for(l=0,h=p.length;l{if(i){const e=[];let t=g;for(const r of i)e[t++]=this.xref.fetchIfRef(r);r.widths=e}else r.widths=this.buildCharCodeToWidth(t.widths,r);return new o.Font(e,d,r)}))}i=new s.Dict(null),i.set("FontName",s.Name.get(f)),i.set("FontBBox",c.getArray("FontBBox")||[0,0,0,0])}let A=i.get("FontName"),k=c.get("BaseFont");"string"==typeof A&&(A=s.Name.get(A)),"string"==typeof k&&(k=s.Name.get(k));const C=null===(t=A)||void 0===t?void 0:t.name,O=null===(r=k)||void 0===r?void 0:r.name;if(w||C===O||((0,n.info)("The FontDescriptor's FontName is \\"".concat(C,'" but should be the same as the Font\\'s BaseFont "').concat(O,'".')),C&&O&&(O.startsWith(C)||!(0,l.isKnownFontName)(C)&&(0,l.isKnownFontName)(O))&&(A=null)),A||(A=k),!(A instanceof s.Name))throw new n.FormatError("invalid font name");let F,I,T,M,E;try{F=i.get("FontFile","FontFile2","FontFile3")}catch(e){if(!this.options.ignoreErrors)throw e;(0,n.warn)('translateFont - fetching "'.concat(A.name,'" font file: "').concat(e,'".')),F=new m.NullStream}let P=!1,R=null,N=null;if(F){if(F.dict){const e=F.dict.get("Subtype");e instanceof s.Name&&(I=e.name),T=F.dict.get("Length1"),M=F.dict.get("Length2"),E=F.dict.get("Length3")}}else if(y){const e=(0,u.getXfaFontName)(A.name);e&&(y.fontFamily="".concat(y.fontFamily,"-PdfJS-XFA"),y.metrics=e.metrics||null,R=e.factors||null,F=await this.fetchStandardFontData(e.name),P=!!F,h=c=(0,u.getXfaFontDict)(A.name),d=!0)}else if(!w){const e=(0,l.getStandardFontName)(A.name);e&&(F=await this.fetchStandardFontData(e),P=!!F),!P&&this.options.useSystemFonts&&(N=(0,S.getFontSubstitution)(this.systemFontCache,this.idFactory,this.options.standardFontDataUrl,A.name,e))}if(v={type:f,name:A.name,subtype:I,file:F,length1:T,length2:M,length3:E,isInternalFont:P,loadedName:h.loadedName,composite:d,fixedPitch:!1,fontMatrix:c.getArray("FontMatrix")||n.FONT_IDENTITY_MATRIX,firstChar:g,lastChar:p,toUnicode:b,bbox:i.getArray("FontBBox")||c.getArray("FontBBox"),ascent:i.get("Ascent"),descent:i.get("Descent"),xHeight:i.get("XHeight")||0,capHeight:i.get("CapHeight")||0,flags:i.get("Flags"),italicAngle:i.get("ItalicAngle")||0,isType3Font:w,cssFontInfo:y,scaleFactors:R,systemFontInfo:N},d){const e=h.get("Encoding");e instanceof s.Name&&(v.cidEncoding=e.name);const t=await a.CMapFactory.create({encoding:e,fetchBuiltInCMap:this._fetchBuiltInCMapBound,useCMap:null});v.cMap=t,v.vertical=v.cMap.vertical}return this.extractDataStructures(c,h,v).then((e=>(this.extractWidths(c,i,e),new o.Font(A.name,F,e))))}static buildFontPaths(e,t,r,a){function i(t){const i="".concat(e.loadedName,"_path_").concat(t);try{if(e.renderer.hasBuiltPath(t))return;r.send("commonobj",[i,"FontPath",e.renderer.getPathJs(t)])}catch(e){if(a.ignoreErrors)return void(0,n.warn)("buildFontPaths - ignoring ".concat(i,' glyph: "').concat(e,'".'));throw e}}for(const e of t){i(e.fontChar);const t=e.accent;(null==t?void 0:t.fontChar)&&i(t.fontChar)}}static get fallbackFontDict(){const e=new s.Dict;return e.set("BaseFont",s.Name.get("Helvetica")),e.set("Type",s.Name.get("FallbackType")),e.set("Subtype",s.Name.get("FallbackType")),e.set("Encoding",s.Name.get("WinAnsiEncoding")),(0,n.shadow)(this,"fallbackFontDict",e)}}t.PartialEvaluator=B;class L{constructor(e){let{loadedName:t,font:r,dict:n,evaluatorOptions:a}=e;this.loadedName=t,this.font=r,this.dict=n,this._evaluatorOptions=a||E,this.type3Loaded=null,this.type3Dependencies=r.isType3Font?new Set:null,this.sent=!1}send(e){this.sent||(this.sent=!0,e.send("commonobj",[this.loadedName,"Font",this.font.exportData(this._evaluatorOptions.fontExtraProperties)]))}fallback(e){this.font.data&&(this.font.disableFontFace=!0,B.buildFontPaths(this.font,this.font.glyphCacheValues,e,this._evaluatorOptions))}loadType3Data(e,t,r){if(this.type3Loaded)return this.type3Loaded;if(!this.font.isType3Font)throw new Error("Must be a Type3 font.");const a=e.clone({ignoreErrors:!1});a.parsingType3Font=!0;const i=new s.RefSet(e.type3FontRefs);this.dict.objId&&!i.has(this.dict.objId)&&i.put(this.dict.objId),a.type3FontRefs=i;const o=this.font,c=this.type3Dependencies;let l=Promise.resolve();const h=this.dict.get("CharProcs"),u=this.dict.get("Resources")||t,d=Object.create(null),f=n.Util.normalizeRect(o.bbox||[0,0,0,0]),g=f[2]-f[0],p=f[3]-f[1],m=Math.hypot(g,p);for(const e of h.getKeys())l=l.then((()=>{const t=h.get(e),i=new T.OperatorList;return a.getOperatorList({stream:t,task:r,resources:u,operatorList:i}).then((()=>{i.fnArray[0]===n.OPS.setCharWidthAndBounds&&this._removeType3ColorOperators(i,m),d[e]=i.getIR();for(const e of i.dependencies)c.add(e)})).catch((function(t){(0,n.warn)('Type3 font resource "'.concat(e,'" is not available.'));const r=new T.OperatorList;d[e]=r.getIR()}))}));return this.type3Loaded=l.then((()=>{o.charProcOperatorList=d,this._bbox&&(o.isCharBBox=!0,o.bbox=this._bbox)})),this.type3Loaded}_removeType3ColorOperators(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:NaN;const r=n.Util.normalizeRect(e.argsArray[0].slice(2)),a=r[2]-r[0],i=r[3]-r[1],s=Math.hypot(a,i);0===a||0===i?(e.fnArray.splice(0,1),e.argsArray.splice(0,1)):(0===t||Math.round(s/t)>=10)&&(this._bbox||(this._bbox=[1/0,1/0,-1/0,-1/0]),this._bbox[0]=Math.min(this._bbox[0],r[0]),this._bbox[1]=Math.min(this._bbox[1],r[1]),this._bbox[2]=Math.max(this._bbox[2],r[2]),this._bbox[3]=Math.max(this._bbox[3],r[3]));let o=0,c=e.length;for(;o0&&void 0!==arguments[0]?arguments[0]:new U;this.state=e,this.stateStack=[]}save(){const e=this.state;this.stateStack.push(this.state),this.state=e.clone()}restore(){const e=this.stateStack.pop();e&&(this.state=e)}transform(e){this.state.ctm=n.Util.transform(this.state.ctm,e)}}class j{constructor(){this.ctm=new Float32Array(n.IDENTITY_MATRIX),this.fontName=null,this.fontSize=0,this.loadedName=null,this.font=null,this.fontMatrix=n.FONT_IDENTITY_MATRIX,this.textMatrix=n.IDENTITY_MATRIX.slice(),this.textLineMatrix=n.IDENTITY_MATRIX.slice(),this.charSpacing=0,this.wordSpacing=0,this.leading=0,this.textHScale=1,this.textRise=0}setTextMatrix(e,t,r,n,a,i){const s=this.textMatrix;s[0]=e,s[1]=t,s[2]=r,s[3]=n,s[4]=a,s[5]=i}setTextLineMatrix(e,t,r,n,a,i){const s=this.textLineMatrix;s[0]=e,s[1]=t,s[2]=r,s[3]=n,s[4]=a,s[5]=i}translateTextMatrix(e,t){const r=this.textMatrix;r[4]=r[0]*e+r[2]*t+r[4],r[5]=r[1]*e+r[3]*t+r[5]}translateTextLineMatrix(e,t){const r=this.textLineMatrix;r[4]=r[0]*e+r[2]*t+r[4],r[5]=r[1]*e+r[3]*t+r[5]}carriageReturn(){this.translateTextLineMatrix(0,-this.leading),this.textMatrix=this.textLineMatrix.slice()}clone(){const e=Object.create(this);return e.textMatrix=this.textMatrix.slice(),e.textLineMatrix=this.textLineMatrix.slice(),e.fontMatrix=this.fontMatrix.slice(),e}}class U{constructor(){this.ctm=new Float32Array(n.IDENTITY_MATRIX),this.font=null,this.textRenderingMode=n.TextRenderingMode.FILL,this.fillColorSpace=w.ColorSpace.singletons.gray,this.strokeColorSpace=w.ColorSpace.singletons.gray}clone(){return Object.create(this)}}class \${static get opMap(){const e=(0,k.getLookupTableFactory)((function(e){e.w={id:n.OPS.setLineWidth,numArgs:1,variableArgs:!1},e.J={id:n.OPS.setLineCap,numArgs:1,variableArgs:!1},e.j={id:n.OPS.setLineJoin,numArgs:1,variableArgs:!1},e.M={id:n.OPS.setMiterLimit,numArgs:1,variableArgs:!1},e.d={id:n.OPS.setDash,numArgs:2,variableArgs:!1},e.ri={id:n.OPS.setRenderingIntent,numArgs:1,variableArgs:!1},e.i={id:n.OPS.setFlatness,numArgs:1,variableArgs:!1},e.gs={id:n.OPS.setGState,numArgs:1,variableArgs:!1},e.q={id:n.OPS.save,numArgs:0,variableArgs:!1},e.Q={id:n.OPS.restore,numArgs:0,variableArgs:!1},e.cm={id:n.OPS.transform,numArgs:6,variableArgs:!1},e.m={id:n.OPS.moveTo,numArgs:2,variableArgs:!1},e.l={id:n.OPS.lineTo,numArgs:2,variableArgs:!1},e.c={id:n.OPS.curveTo,numArgs:6,variableArgs:!1},e.v={id:n.OPS.curveTo2,numArgs:4,variableArgs:!1},e.y={id:n.OPS.curveTo3,numArgs:4,variableArgs:!1},e.h={id:n.OPS.closePath,numArgs:0,variableArgs:!1},e.re={id:n.OPS.rectangle,numArgs:4,variableArgs:!1},e.S={id:n.OPS.stroke,numArgs:0,variableArgs:!1},e.s={id:n.OPS.closeStroke,numArgs:0,variableArgs:!1},e.f={id:n.OPS.fill,numArgs:0,variableArgs:!1},e.F={id:n.OPS.fill,numArgs:0,variableArgs:!1},e["f*"]={id:n.OPS.eoFill,numArgs:0,variableArgs:!1},e.B={id:n.OPS.fillStroke,numArgs:0,variableArgs:!1},e["B*"]={id:n.OPS.eoFillStroke,numArgs:0,variableArgs:!1},e.b={id:n.OPS.closeFillStroke,numArgs:0,variableArgs:!1},e["b*"]={id:n.OPS.closeEOFillStroke,numArgs:0,variableArgs:!1},e.n={id:n.OPS.endPath,numArgs:0,variableArgs:!1},e.W={id:n.OPS.clip,numArgs:0,variableArgs:!1},e["W*"]={id:n.OPS.eoClip,numArgs:0,variableArgs:!1},e.BT={id:n.OPS.beginText,numArgs:0,variableArgs:!1},e.ET={id:n.OPS.endText,numArgs:0,variableArgs:!1},e.Tc={id:n.OPS.setCharSpacing,numArgs:1,variableArgs:!1},e.Tw={id:n.OPS.setWordSpacing,numArgs:1,variableArgs:!1},e.Tz={id:n.OPS.setHScale,numArgs:1,variableArgs:!1},e.TL={id:n.OPS.setLeading,numArgs:1,variableArgs:!1},e.Tf={id:n.OPS.setFont,numArgs:2,variableArgs:!1},e.Tr={id:n.OPS.setTextRenderingMode,numArgs:1,variableArgs:!1},e.Ts={id:n.OPS.setTextRise,numArgs:1,variableArgs:!1},e.Td={id:n.OPS.moveText,numArgs:2,variableArgs:!1},e.TD={id:n.OPS.setLeadingMoveText,numArgs:2,variableArgs:!1},e.Tm={id:n.OPS.setTextMatrix,numArgs:6,variableArgs:!1},e["T*"]={id:n.OPS.nextLine,numArgs:0,variableArgs:!1},e.Tj={id:n.OPS.showText,numArgs:1,variableArgs:!1},e.TJ={id:n.OPS.showSpacedText,numArgs:1,variableArgs:!1},e["'"]={id:n.OPS.nextLineShowText,numArgs:1,variableArgs:!1},e['"']={id:n.OPS.nextLineSetSpacingShowText,numArgs:3,variableArgs:!1},e.d0={id:n.OPS.setCharWidth,numArgs:2,variableArgs:!1},e.d1={id:n.OPS.setCharWidthAndBounds,numArgs:6,variableArgs:!1},e.CS={id:n.OPS.setStrokeColorSpace,numArgs:1,variableArgs:!1},e.cs={id:n.OPS.setFillColorSpace,numArgs:1,variableArgs:!1},e.SC={id:n.OPS.setStrokeColor,numArgs:4,variableArgs:!0},e.SCN={id:n.OPS.setStrokeColorN,numArgs:33,variableArgs:!0},e.sc={id:n.OPS.setFillColor,numArgs:4,variableArgs:!0},e.scn={id:n.OPS.setFillColorN,numArgs:33,variableArgs:!0},e.G={id:n.OPS.setStrokeGray,numArgs:1,variableArgs:!1},e.g={id:n.OPS.setFillGray,numArgs:1,variableArgs:!1},e.RG={id:n.OPS.setStrokeRGBColor,numArgs:3,variableArgs:!1},e.rg={id:n.OPS.setFillRGBColor,numArgs:3,variableArgs:!1},e.K={id:n.OPS.setStrokeCMYKColor,numArgs:4,variableArgs:!1},e.k={id:n.OPS.setFillCMYKColor,numArgs:4,variableArgs:!1},e.sh={id:n.OPS.shadingFill,numArgs:1,variableArgs:!1},e.BI={id:n.OPS.beginInlineImage,numArgs:0,variableArgs:!1},e.ID={id:n.OPS.beginImageData,numArgs:0,variableArgs:!1},e.EI={id:n.OPS.endInlineImage,numArgs:1,variableArgs:!1},e.Do={id:n.OPS.paintXObject,numArgs:1,variableArgs:!1},e.MP={id:n.OPS.markPoint,numArgs:1,variableArgs:!1},e.DP={id:n.OPS.markPointProps,numArgs:2,variableArgs:!1},e.BMC={id:n.OPS.beginMarkedContent,numArgs:1,variableArgs:!1},e.BDC={id:n.OPS.beginMarkedContentProps,numArgs:2,variableArgs:!1},e.EMC={id:n.OPS.endMarkedContent,numArgs:0,variableArgs:!1},e.BX={id:n.OPS.beginCompat,numArgs:0,variableArgs:!1},e.EX={id:n.OPS.endCompat,numArgs:0,variableArgs:!1},e.BM=null,e.BD=null,e.true=null,e.fa=null,e.fal=null,e.fals=null,e.false=null,e.nu=null,e.nul=null,e.null=null}));return(0,n.shadow)(this,"opMap",e())}constructor(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:new _;this.parser=new g.Parser({lexer:new g.Lexer(e,$.opMap),xref:t}),this.stateManager=r,this.nonProcessedArgs=[],this._isPathOp=!1,this._numInvalidPathOPS=0}get savedStatesDepth(){return this.stateManager.stateStack.length}read(e){let t=e.args;for(;;){const r=this.parser.getObj();if(r instanceof s.Cmd){const a=r.cmd,i=$.opMap[a];if(!i){(0,n.warn)('Unknown command "'.concat(a,'".'));continue}const s=i.id,o=i.numArgs;let c=null!==t?t.length:0;if(this._isPathOp||(this._numInvalidPathOPS=0),this._isPathOp=s>=n.OPS.moveTo&&s<=n.OPS.endPath,i.variableArgs)c>o&&(0,n.info)("Command ".concat(a,": expected [0, ").concat(o,"] args, but received ").concat(c," args."));else{if(c!==o){const e=this.nonProcessedArgs;for(;c>o;)e.push(t.shift()),c--;for(;c$.MAX_INVALID_PATH_OPS)throw new n.FormatError("Invalid ".concat(e));(0,n.warn)("Skipping ".concat(e)),null!==t&&(t.length=0);continue}}return this.preprocessCommand(s,t),e.fn=s,e.args=t,!0}if(r===s.EOF)return!1;if(null!==r&&(null===t&&(t=[]),t.push(r),t.length>33))throw new n.FormatError("Too many arguments")}}preprocessCommand(e,t){switch(0|e){case n.OPS.save:this.stateManager.save();break;case n.OPS.restore:this.stateManager.restore();break;case n.OPS.transform:this.stateManager.transform(t)}}}i($,"MAX_INVALID_PATH_OPS",10),t.EvaluatorPreprocessor=$},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.IdentityCMap=t.CMapFactory=t.CMap=void 0,r(139),r(2);var n=r(144),a=r(150),i=r(151),s=r(165),o=r(166),c=r(149),l=r(154);const h=["Adobe-GB1-UCS2","Adobe-CNS1-UCS2","Adobe-Japan1-UCS2","Adobe-Korea1-UCS2","78-EUC-H","78-EUC-V","78-H","78-RKSJ-H","78-RKSJ-V","78-V","78ms-RKSJ-H","78ms-RKSJ-V","83pv-RKSJ-H","90ms-RKSJ-H","90ms-RKSJ-V","90msp-RKSJ-H","90msp-RKSJ-V","90pv-RKSJ-H","90pv-RKSJ-V","Add-H","Add-RKSJ-H","Add-RKSJ-V","Add-V","Adobe-CNS1-0","Adobe-CNS1-1","Adobe-CNS1-2","Adobe-CNS1-3","Adobe-CNS1-4","Adobe-CNS1-5","Adobe-CNS1-6","Adobe-GB1-0","Adobe-GB1-1","Adobe-GB1-2","Adobe-GB1-3","Adobe-GB1-4","Adobe-GB1-5","Adobe-Japan1-0","Adobe-Japan1-1","Adobe-Japan1-2","Adobe-Japan1-3","Adobe-Japan1-4","Adobe-Japan1-5","Adobe-Japan1-6","Adobe-Korea1-0","Adobe-Korea1-1","Adobe-Korea1-2","B5-H","B5-V","B5pc-H","B5pc-V","CNS-EUC-H","CNS-EUC-V","CNS1-H","CNS1-V","CNS2-H","CNS2-V","ETHK-B5-H","ETHK-B5-V","ETen-B5-H","ETen-B5-V","ETenms-B5-H","ETenms-B5-V","EUC-H","EUC-V","Ext-H","Ext-RKSJ-H","Ext-RKSJ-V","Ext-V","GB-EUC-H","GB-EUC-V","GB-H","GB-V","GBK-EUC-H","GBK-EUC-V","GBK2K-H","GBK2K-V","GBKp-EUC-H","GBKp-EUC-V","GBT-EUC-H","GBT-EUC-V","GBT-H","GBT-V","GBTpc-EUC-H","GBTpc-EUC-V","GBpc-EUC-H","GBpc-EUC-V","H","HKdla-B5-H","HKdla-B5-V","HKdlb-B5-H","HKdlb-B5-V","HKgccs-B5-H","HKgccs-B5-V","HKm314-B5-H","HKm314-B5-V","HKm471-B5-H","HKm471-B5-V","HKscs-B5-H","HKscs-B5-V","Hankaku","Hiragana","KSC-EUC-H","KSC-EUC-V","KSC-H","KSC-Johab-H","KSC-Johab-V","KSC-V","KSCms-UHC-H","KSCms-UHC-HW-H","KSCms-UHC-HW-V","KSCms-UHC-V","KSCpc-EUC-H","KSCpc-EUC-V","Katakana","NWP-H","NWP-V","RKSJ-H","RKSJ-V","Roman","UniCNS-UCS2-H","UniCNS-UCS2-V","UniCNS-UTF16-H","UniCNS-UTF16-V","UniCNS-UTF32-H","UniCNS-UTF32-V","UniCNS-UTF8-H","UniCNS-UTF8-V","UniGB-UCS2-H","UniGB-UCS2-V","UniGB-UTF16-H","UniGB-UTF16-V","UniGB-UTF32-H","UniGB-UTF32-V","UniGB-UTF8-H","UniGB-UTF8-V","UniJIS-UCS2-H","UniJIS-UCS2-HW-H","UniJIS-UCS2-HW-V","UniJIS-UCS2-V","UniJIS-UTF16-H","UniJIS-UTF16-V","UniJIS-UTF32-H","UniJIS-UTF32-V","UniJIS-UTF8-H","UniJIS-UTF8-V","UniJIS2004-UTF16-H","UniJIS2004-UTF16-V","UniJIS2004-UTF32-H","UniJIS2004-UTF32-V","UniJIS2004-UTF8-H","UniJIS2004-UTF8-V","UniJISPro-UCS2-HW-V","UniJISPro-UCS2-V","UniJISPro-UTF8-V","UniJISX0213-UTF32-H","UniJISX0213-UTF32-V","UniJISX02132004-UTF32-H","UniJISX02132004-UTF32-V","UniKS-UCS2-H","UniKS-UCS2-V","UniKS-UTF16-H","UniKS-UTF16-V","UniKS-UTF32-H","UniKS-UTF32-V","UniKS-UTF8-H","UniKS-UTF8-V","V","WP-Symbol"],u=2**24-1;class d{constructor(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this.codespaceRanges=[[],[],[],[]],this.numCodespaceRanges=0,this._map=[],this.name="",this.vertical=!1,this.useCMap=null,this.builtInCMap=e}addCodespaceRange(e,t,r){this.codespaceRanges[e-1].push(t,r),this.numCodespaceRanges++}mapCidRange(e,t,r){if(t-e>u)throw new Error("mapCidRange - ignoring data above MAX_MAP_RANGE.");for(;e<=t;)this._map[e++]=r++}mapBfRange(e,t,r){if(t-e>u)throw new Error("mapBfRange - ignoring data above MAX_MAP_RANGE.");const n=r.length-1;for(;e<=t;){this._map[e++]=r;const t=r.charCodeAt(n)+1;r=t>255?r.substring(0,n-1)+String.fromCharCode(r.charCodeAt(n-1)+1)+"\\0":r.substring(0,n)+String.fromCharCode(t)}}mapBfRangeToArray(e,t,r){if(t-e>u)throw new Error("mapBfRangeToArray - ignoring data above MAX_MAP_RANGE.");const n=r.length;let a=0;for(;e<=t&&a>>0;const s=a[i];for(let e=0,t=s.length;e=t&&n<=a)return r.charcode=n,void(r.length=i+1)}}r.charcode=0,r.length=1}getCharCodeLength(e){const t=this.codespaceRanges;for(let r=0,n=t.length;r=a&&e<=i)return r+1}}return 1}get length(){return this._map.length}get isIdentityCMap(){if("Identity-H"!==this.name&&"Identity-V"!==this.name)return!1;if(65536!==this._map.length)return!1;for(let e=0;e<65536;e++)if(this._map[e]!==e)return!1;return!0}}t.CMap=d;class f extends d{constructor(e,t){super(),this.vertical=e,this.addCodespaceRange(t,0,65535)}mapCidRange(e,t,r){(0,n.unreachable)("should not call mapCidRange")}mapBfRange(e,t,r){(0,n.unreachable)("should not call mapBfRange")}mapBfRangeToArray(e,t,r){(0,n.unreachable)("should not call mapBfRangeToArray")}mapOne(e,t){(0,n.unreachable)("should not call mapCidOne")}lookup(e){return Number.isInteger(e)&&e<=65535?e:void 0}contains(e){return Number.isInteger(e)&&e<=65535}forEach(e){for(let t=0;t<=65535;t++)e(t,t)}charCodeOf(e){return Number.isInteger(e)&&e<=65535?e:-1}getMap(){const e=new Array(65536);for(let t=0;t<=65535;t++)e[t]=t;return e}get length(){return 65536}get isIdentityCMap(){(0,n.unreachable)("should not access .isIdentityCMap")}}function g(e){let t=0;for(let r=0;r>>0}function p(e){if("string"!=typeof e)throw new n.FormatError("Malformed CMap: expected string.")}function m(e){if(!Number.isInteger(e))throw new n.FormatError("Malformed CMap: expected int.")}function b(e,t){for(;;){let r=t.getObj();if(r===a.EOF)break;if((0,a.isCmd)(r,"endbfchar"))return;p(r);const n=g(r);r=t.getObj(),p(r);const i=r;e.mapOne(n,i)}}function y(e,t){for(;;){let r=t.getObj();if(r===a.EOF)break;if((0,a.isCmd)(r,"endbfrange"))return;p(r);const n=g(r);r=t.getObj(),p(r);const i=g(r);if(r=t.getObj(),Number.isInteger(r)||"string"==typeof r){const t=Number.isInteger(r)?String.fromCharCode(r):r;e.mapBfRange(n,i,t)}else{if(!(0,a.isCmd)(r,"["))break;{r=t.getObj();const s=[];for(;!(0,a.isCmd)(r,"]")&&r!==a.EOF;)s.push(r),r=t.getObj();e.mapBfRangeToArray(n,i,s)}}}throw new n.FormatError("Invalid bf range.")}function w(e,t){for(;;){let r=t.getObj();if(r===a.EOF)break;if((0,a.isCmd)(r,"endcidchar"))return;p(r);const n=g(r);r=t.getObj(),m(r);const i=r;e.mapOne(n,i)}}function v(e,t){for(;;){let r=t.getObj();if(r===a.EOF)break;if((0,a.isCmd)(r,"endcidrange"))return;p(r);const n=g(r);r=t.getObj(),p(r);const i=g(r);r=t.getObj(),m(r);const s=r;e.mapCidRange(n,i,s)}}function x(e,t){for(;;){let r=t.getObj();if(r===a.EOF)break;if((0,a.isCmd)(r,"endcodespacerange"))return;if("string"!=typeof r)break;const n=g(r);if(r=t.getObj(),"string"!=typeof r)break;const i=g(r);e.addCodespaceRange(r.length,n,i)}throw new n.FormatError("Invalid codespace range.")}function S(e,t){const r=t.getObj();Number.isInteger(r)&&(e.vertical=!!r)}function A(e,t){const r=t.getObj();r instanceof a.Name&&(e.name=r.name)}async function k(e,t,r,i){let s,o;e:for(;;)try{const r=t.getObj();if(r===a.EOF)break;if(r instanceof a.Name)"WMode"===r.name?S(e,t):"CMapName"===r.name&&A(e,t),s=r;else if(r instanceof a.Cmd)switch(r.cmd){case"endcmap":break e;case"usecmap":s instanceof a.Name&&(o=s.name);break;case"begincodespacerange":x(e,t);break;case"beginbfchar":b(e,t);break;case"begincidchar":w(e,t);break;case"beginbfrange":y(e,t);break;case"begincidrange":v(e,t)}}catch(e){if(e instanceof c.MissingDataException)throw e;(0,n.warn)("Invalid cMap data: "+e);continue}return!i&&o&&(i=o),i?C(e,r,i):e}async function C(e,t,r){if(e.useCMap=await O(r,t),0===e.numCodespaceRanges){const t=e.useCMap.codespaceRanges;for(let r=0;rC(i,t,e)));if(a===n.CMapCompressionType.NONE){const e=new o.Lexer(new l.Stream(r));return k(i,e,t,null)}throw new Error('Invalid CMap "compressionType" value: '.concat(a))}t.IdentityCMap=f,t.CMapFactory=class{static async create(e){let{encoding:t,fetchBuiltInCMap:r,useCMap:n}=e;if(t instanceof a.Name)return O(t.name,r);if(t instanceof i.BaseStream){const e=await k(new d,new o.Lexer(t),r,n);return e.isIdentityCMap?O(e.name,r):e}throw new Error("Encoding required.")}}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.BinaryCMapReader=void 0,r(84),r(93),r(94),r(97),r(99),r(101),r(105),r(108),r(115),r(2);var n=r(144);function a(e,t){let r=0;for(let n=0;n<=t;n++)r=r<<8|e[n];return r>>>0}function i(e,t){return 1===t?String.fromCharCode(e[0],e[1]):3===t?String.fromCharCode(e[0],e[1],e[2],e[3]):String.fromCharCode(...e.subarray(0,t+1))}function s(e,t,r){let n=0;for(let a=r;a>=0;a--)n+=e[a]+t[a],e[a]=255&n,n>>=8}function o(e,t){let r=1;for(let n=t;n>=0&&r>0;n--)r+=e[n],e[n]=255&r,r>>=8}const c=16;class l{constructor(e){this.buffer=e,this.pos=0,this.end=e.length,this.tmpBuf=new Uint8Array(19)}readByte(){return this.pos>=this.end?-1:this.buffer[this.pos++]}readNumber(){let e,t=0;do{const r=this.readByte();if(r<0)throw new n.FormatError("unexpected EOF in bcmap");e=!(128&r),t=t<<7|127&r}while(!e);return t}readSigned(){const e=this.readNumber();return 1&e?~(e>>>1):e>>>1}readHex(e,t){e.set(this.buffer.subarray(this.pos,this.pos+t+1)),this.pos+=t+1}readHexNumber(e,t){let r;const a=this.tmpBuf;let i=0;do{const e=this.readByte();if(e<0)throw new n.FormatError("unexpected EOF in bcmap");r=!(128&e),a[i++]=127&e}while(!r);let s=t,o=0,c=0;for(;s>=0;){for(;c<8&&a.length>0;)o|=a[--i]<>=8,c-=8}}readHexSigned(e,t){this.readHexNumber(e,t);const r=1&e[t]?255:0;let n=0;for(let a=0;a<=t;a++)n=(1&n)<<8|e[a],e[a]=n>>1^r}readString(){const e=this.readNumber(),t=new Array(e);for(let r=0;r=0;){const e=y>>5;if(7===e){switch(31&y){case 0:n.readString();break;case 1:u=n.readString()}continue}const r=!!(16&y),l=15&y;if(l+1>c)throw new Error("BinaryCMapReader.process: Invalid dataSize.");const h=1,w=n.readNumber();switch(e){case 0:n.readHex(d,l),n.readHexNumber(f,l),s(f,d,l),t.addCodespaceRange(l+1,a(d,l),a(f,l));for(let e=1;e{Object.defineProperty(t,"__esModule",{value:!0}),t.Parser=t.Linearization=t.Lexer=void 0,r(139),r(84),r(93),r(94),r(97),r(99),r(101),r(105),r(108),r(115),r(2);var n=r(144),a=r(150),i=r(149),s=r(154),o=r(167),c=r(169),l=r(170),h=r(172),u=r(173),d=r(176),f=r(179),g=r(181),p=r(182),m=r(183);class b{constructor(e){let{lexer:t,xref:r,allowStreams:n=!1,recoveryMode:a=!1}=e;this.lexer=t,this.xref=r,this.allowStreams=n,this.recoveryMode=a,this.imageCache=Object.create(null),this._imageId=0,this.refill()}refill(){this.buf1=this.lexer.getObj(),this.buf2=this.lexer.getObj()}shift(){this.buf2 instanceof a.Cmd&&"ID"===this.buf2.cmd?(this.buf1=this.buf2,this.buf2=null):(this.buf1=this.buf2,this.buf2=this.lexer.getObj())}tryShift(){try{return this.shift(),!0}catch(e){if(e instanceof i.MissingDataException)throw e;return!1}}getObj(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;const t=this.buf1;if(this.shift(),t instanceof a.Cmd)switch(t.cmd){case"BI":return this.makeInlineImage(e);case"[":const r=[];for(;!(0,a.isCmd)(this.buf1,"]")&&this.buf1!==a.EOF;)r.push(this.getObj(e));if(this.buf1===a.EOF){if(this.recoveryMode)return r;throw new i.ParserEOFException("End of file inside array.")}return this.shift(),r;case"<<":const s=new a.Dict(this.xref);for(;!(0,a.isCmd)(this.buf1,">>")&&this.buf1!==a.EOF;){if(!(this.buf1 instanceof a.Name)){(0,n.info)("Malformed dictionary: key must be a name object"),this.shift();continue}const t=this.buf1.name;if(this.shift(),this.buf1===a.EOF)break;s.set(t,this.getObj(e))}if(this.buf1===a.EOF){if(this.recoveryMode)return s;throw new i.ParserEOFException("End of file inside dictionary.")}return(0,a.isCmd)(this.buf2,"stream")?this.allowStreams?this.makeStream(s,e):s:(this.shift(),s);default:return t}if(Number.isInteger(t)){if(Number.isInteger(this.buf1)&&(0,a.isCmd)(this.buf2,"R")){const e=a.Ref.get(t,this.buf1);return this.shift(),this.shift(),e}return t}return"string"==typeof t&&e?e.decryptString(t):t}findDefaultInlineStreamEnd(e){const{knownCommands:t}=this.lexer,r=e.pos;let o,c,l=0;for(;-1!==(o=e.getByte());)if(0===l)l=69===o?1:0;else if(1===l)l=73===o?2:0;else if(32===o||10===o||13===o){c=e.pos;const r=e.peekBytes(15),i=r.length;if(0===i)break;for(let e=0;e127)){l=0;break}if(2!==l)continue;if(!t){(0,n.warn)("findDefaultInlineStreamEnd - \`lexer.knownCommands\` is undefined.");continue}const h=new v(new s.Stream(r.slice()),t);h._hexStringWarn=()=>{};let u=0;for(;;){const e=h.getObj();if(e===a.EOF){l=0;break}if(e instanceof a.Cmd){const r=t[e.cmd];if(!r){l=0;break}if(r.variableArgs?u<=r.numArgs:u===r.numArgs)break;u=0}else u++}if(2===l)break}else l=0;-1===o&&((0,n.warn)("findDefaultInlineStreamEnd: Reached the end of the stream without finding a valid EI marker"),c&&((0,n.warn)('... trying to recover by using the last "EI" occurrence.'),e.skip(-(e.pos-c))));let h=4;return e.skip(-h),o=e.peekByte(),e.skip(h),(0,i.isWhiteSpace)(o)||h--,e.pos-h-r}findDCTDecodeInlineStreamEnd(e){const t=e.pos;let r,a,i=!1;for(;-1!==(r=e.getByte());)if(255===r){switch(e.getByte()){case 0:break;case 255:e.skip(-1);break;case 217:i=!0;break;case 192:case 193:case 194:case 195:case 197:case 198:case 199:case 201:case 202:case 203:case 205:case 206:case 207:case 196:case 204:case 218:case 219:case 220:case 221:case 222:case 223:case 224:case 225:case 226:case 227:case 228:case 229:case 230:case 231:case 232:case 233:case 234:case 235:case 236:case 237:case 238:case 239:case 254:a=e.getUint16(),a>2?e.skip(a-2):e.skip(-2)}if(i)break}const s=e.pos-t;return-1===r?((0,n.warn)("Inline DCTDecode image stream: EOI marker not found, searching for /EI/ instead."),e.skip(-s),this.findDefaultInlineStreamEnd(e)):(this.inlineStreamSkipEI(e),s)}findASCII85DecodeInlineStreamEnd(e){const t=e.pos;let r;for(;-1!==(r=e.getByte());)if(126===r){const t=e.pos;for(r=e.peekByte();(0,i.isWhiteSpace)(r);)e.skip(),r=e.peekByte();if(62===r){e.skip();break}if(e.pos>t){const t=e.peekBytes(2);if(69===t[0]&&73===t[1])break}}const a=e.pos-t;return-1===r?((0,n.warn)("Inline ASCII85Decode image stream: EOD marker not found, searching for /EI/ instead."),e.skip(-a),this.findDefaultInlineStreamEnd(e)):(this.inlineStreamSkipEI(e),a)}findASCIIHexDecodeInlineStreamEnd(e){const t=e.pos;let r;for(;-1!==(r=e.getByte())&&62!==r;);const a=e.pos-t;return-1===r?((0,n.warn)("Inline ASCIIHexDecode image stream: EOD marker not found, searching for /EI/ instead."),e.skip(-a),this.findDefaultInlineStreamEnd(e)):(this.inlineStreamSkipEI(e),a)}inlineStreamSkipEI(e){let t,r=0;for(;-1!==(t=e.getByte());)if(0===r)r=69===t?1:0;else if(1===r)r=73===t?2:0;else if(2===r)break}makeInlineImage(e){const t=this.lexer,r=t.stream,i=Object.create(null);let s;for(;!(0,a.isCmd)(this.buf1,"ID")&&this.buf1!==a.EOF;){if(!(this.buf1 instanceof a.Name))throw new n.FormatError("Dictionary key must be a name object");const t=this.buf1.name;if(this.shift(),this.buf1===a.EOF)break;i[t]=this.getObj(e)}-1!==t.beginInlineImagePos&&(s=r.pos-t.beginInlineImagePos);const o=this.xref.fetchIfRef(i.F||i.Filter);let c;if(o instanceof a.Name)c=o.name;else if(Array.isArray(o)){const e=this.xref.fetchIfRef(o[0]);e instanceof a.Name&&(c=e.name)}const l=r.pos;let h,u;switch(c){case"DCT":case"DCTDecode":h=this.findDCTDecodeInlineStreamEnd(r);break;case"A85":case"ASCII85Decode":h=this.findASCII85DecodeInlineStreamEnd(r);break;case"AHx":case"ASCIIHexDecode":h=this.findASCIIHexDecodeInlineStreamEnd(r);break;default:h=this.findDefaultInlineStreamEnd(r)}if(h<1e3&&s>0){const e=r.pos;r.pos=t.beginInlineImagePos,u=function(e){const t=[],r=e.length;let n=0;for(;n=n)return r.pos+=s,r.pos-e;s++}r.pos+=i}return-1}makeStream(e,t){const r=this.lexer;let s=r.stream;r.skipToNextLine();const o=s.pos-1;let c=e.get("Length");if(Number.isInteger(c)||((0,n.info)('Bad length "'.concat(c&&c.toString(),'" in stream.')),c=0),s.pos=o+c,r.nextChar(),this.tryShift()&&(0,a.isCmd)(this.buf2,"endstream"))this.shift();else{const e=new Uint8Array([101,110,100,115,116,114,101,97,109]);let t=this._findStreamLength(o,e);if(t<0){const r=1;for(let a=1;a<=r;a++){const r=e.length-a,c=e.slice(0,r),l=this._findStreamLength(o,c);if(l>=0){const e=s.peekBytes(r+1)[r];if(!(0,i.isWhiteSpace)(e))break;(0,n.info)('Found "'.concat((0,n.bytesToString)(c),'" when searching for endstream command.')),t=l;break}}if(t<0)throw new n.FormatError("Missing endstream command.")}c=t,r.nextChar(),this.shift(),this.shift()}return this.shift(),s=s.makeSubStream(o,c,e),t&&(s=t.createStream(s,c)),s=this.filter(s,e,c),s.dict=e,s}filter(e,t,r){let i=t.get("F","Filter"),s=t.get("DP","DecodeParms");if(i instanceof a.Name)return Array.isArray(s)&&(0,n.warn)("/DecodeParms should not be an Array, when /Filter is a Name."),this.makeFilter(e,i.name,r,s);let o=r;if(Array.isArray(i)){const t=i,r=s;for(let c=0,l=t.length;c=48&&e<=57?15&e:e>=65&&e<=70||e>=97&&e<=102?9+(15&e):-1}class v{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;this.stream=e,this.nextChar(),this.strBuf=[],this.knownCommands=t,this._hexStringNumWarn=0,this.beginInlineImagePos=-1}nextChar(){return this.currentChar=this.stream.getByte()}peekChar(){return this.stream.peekByte()}getNumber(){let e=this.currentChar,t=!1,r=0,a=1;if(45===e?(a=-1,e=this.nextChar(),45===e&&(e=this.nextChar())):43===e&&(e=this.nextChar()),10===e||13===e)do{e=this.nextChar()}while(10===e||13===e);if(46===e&&(r=10,e=this.nextChar()),e<48||e>57){const t="Invalid number: ".concat(String.fromCharCode(e)," (charCode ").concat(e,")");if((0,i.isWhiteSpace)(e)||-1===e)return(0,n.info)('Lexer.getNumber - "'.concat(t,'".')),0;throw new n.FormatError(t)}let s=e-48,o=0,c=1;for(;(e=this.nextChar())>=0;)if(e>=48&&e<=57){const n=e-48;t?o=10*o+n:(0!==r&&(r*=10),s=10*s+n)}else if(46===e){if(0!==r)break;r=1}else if(45===e)(0,n.warn)("Badly formatted number: minus sign in the middle");else{if(69!==e&&101!==e)break;if(e=this.peekChar(),43===e||45===e)c=45===e?-1:1,this.nextChar();else if(e<48||e>57)break;t=!0}return 0!==r&&(s/=r),t&&(s*=10**(c*o)),a*s}getString(){let e=1,t=!1;const r=this.strBuf;r.length=0;let a=this.nextChar();for(;;){let i=!1;switch(0|a){case-1:(0,n.warn)("Unterminated string"),t=!0;break;case 40:++e,r.push("(");break;case 41:0==--e?(this.nextChar(),t=!0):r.push(")");break;case 92:switch(a=this.nextChar(),a){case-1:(0,n.warn)("Unterminated string"),t=!0;break;case 110:r.push("\\n");break;case 114:r.push("\\r");break;case 116:r.push("\\t");break;case 98:r.push("\\b");break;case 102:r.push("\\f");break;case 92:case 40:case 41:r.push(String.fromCharCode(a));break;case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:let e=15&a;a=this.nextChar(),i=!0,a>=48&&a<=55&&(e=(e<<3)+(15&a),a=this.nextChar(),a>=48&&a<=55&&(i=!1,e=(e<<3)+(15&a))),r.push(String.fromCharCode(e));break;case 13:10===this.peekChar()&&this.nextChar();break;case 10:break;default:r.push(String.fromCharCode(a))}break;default:r.push(String.fromCharCode(a))}if(t)break;i||(a=this.nextChar())}return r.join("")}getName(){let e,t;const r=this.strBuf;for(r.length=0;(e=this.nextChar())>=0&&!y[e];)if(35===e){if(e=this.nextChar(),y[e]){(0,n.warn)("Lexer_getName: NUMBER SIGN (#) should be followed by a hexadecimal number."),r.push("#");break}const a=w(e);if(-1!==a){t=e,e=this.nextChar();const i=w(e);if(-1===i){if((0,n.warn)("Lexer_getName: Illegal digit (".concat(String.fromCharCode(e),") in hexadecimal number.")),r.push("#",String.fromCharCode(t)),y[e])break;r.push(String.fromCharCode(e));continue}r.push(String.fromCharCode(a<<4|i))}else r.push("#",String.fromCharCode(e))}else r.push(String.fromCharCode(e));return r.length>127&&(0,n.warn)("Name token is longer than allowed by the spec: ".concat(r.length)),a.Name.get(r.join(""))}_hexStringWarn(e){5!=this._hexStringNumWarn++?this._hexStringNumWarn>5||(0,n.warn)("getHexString - ignoring invalid character: ".concat(e)):(0,n.warn)("getHexString - ignoring additional invalid characters.")}getHexString(){const e=this.strBuf;e.length=0;let t,r,a=this.currentChar,i=!0;for(this._hexStringNumWarn=0;;){if(a<0){(0,n.warn)("Unterminated hex string");break}if(62===a){this.nextChar();break}if(1!==y[a]){if(i){if(t=w(a),-1===t){this._hexStringWarn(a),a=this.nextChar();continue}}else{if(r=w(a),-1===r){this._hexStringWarn(a),a=this.nextChar();continue}e.push(String.fromCharCode(t<<4|r))}i=!i,a=this.nextChar()}else a=this.nextChar()}return e.join("")}getObj(){let e=!1,t=this.currentChar;for(;;){if(t<0)return a.EOF;if(e)10!==t&&13!==t||(e=!1);else if(37===t)e=!0;else if(1!==y[t])break;t=this.nextChar()}switch(0|t){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 43:case 45:case 46:return this.getNumber();case 40:return this.getString();case 47:return this.getName();case 91:return this.nextChar(),a.Cmd.get("[");case 93:return this.nextChar(),a.Cmd.get("]");case 60:return t=this.nextChar(),60===t?(this.nextChar(),a.Cmd.get("<<")):this.getHexString();case 62:return t=this.nextChar(),62===t?(this.nextChar(),a.Cmd.get(">>")):a.Cmd.get(">");case 123:return this.nextChar(),a.Cmd.get("{");case 125:return this.nextChar(),a.Cmd.get("}");case 41:throw this.nextChar(),new n.FormatError("Illegal character: ".concat(t))}let r=String.fromCharCode(t);if(t<32||t>127){const e=this.peekChar();if(e>=32&&e<=127)return this.nextChar(),a.Cmd.get(r)}const i=this.knownCommands;let s=void 0!==(null==i?void 0:i[r]);for(;(t=this.nextChar())>=0&&!y[t];){const e=r+String.fromCharCode(t);if(s&&void 0===i[e])break;if(128===r.length)throw new n.FormatError("Command token too long: ".concat(r.length));r=e,s=void 0!==(null==i?void 0:i[r])}return"true"===r||"false"!==r&&("null"===r?null:("BI"===r&&(this.beginInlineImagePos=this.stream.pos),a.Cmd.get(r)))}skipToNextLine(){let e=this.currentChar;for(;e>=0;){if(13===e){e=this.nextChar(),10===e&&this.nextChar();break}if(10===e){this.nextChar();break}e=this.nextChar()}}}t.Lexer=v,t.Linearization=class{static create(e){function t(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const n=e.get(t);if(Number.isInteger(n)&&(r?n>=0:n>0))return n;throw new Error('The "'.concat(t,'" parameter in the linearization dictionary is invalid.'))}const r=new b({lexer:new v(e),xref:null}),n=r.getObj(),i=r.getObj(),s=r.getObj(),o=r.getObj();let c,l;if(!(Number.isInteger(n)&&Number.isInteger(i)&&(0,a.isCmd)(s,"obj")&&o instanceof a.Dict&&"number"==typeof(c=o.get("Linearized"))&&c>0))return null;if((l=t(o,"L"))!==e.length)throw new Error('The "L" parameter in the linearization dictionary does not equal the stream length.');return{length:l,hints:function(e){const t=e.get("H");let r;if(Array.isArray(t)&&(2===(r=t.length)||4===r)){for(let e=0;e0))throw new Error("Hint (".concat(e,") in the linearization dictionary is invalid."))}return t}throw new Error("Hint array in the linearization dictionary is invalid.")}(o),objectNumberFirst:t(o,"O"),endFirst:t(o,"E"),numPages:t(o,"N"),mainXRefEntriesOffset:t(o,"T"),pageFirst:o.has("P")?t(o,"P",!0):0}}}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Ascii85Stream=void 0,r(84),r(93),r(94),r(97),r(99),r(101),r(105),r(108),r(115);var n=r(168),a=r(149);class i extends n.DecodeStream{constructor(e,t){t&&(t*=.8),super(t),this.str=e,this.dict=e.dict,this.input=new Uint8Array(5)}readBlock(){const e=this.str;let t=e.getByte();for(;(0,a.isWhiteSpace)(t);)t=e.getByte();if(-1===t||126===t)return void(this.eof=!0);const r=this.bufferLength;let n,i;if(122===t){for(n=this.ensureBuffer(r+4),i=0;i<4;++i)n[r+i]=0;this.bufferLength+=4}else{const s=this.input;for(s[0]=t,i=1;i<5;++i){for(t=e.getByte();(0,a.isWhiteSpace)(t);)t=e.getByte();if(s[i]=t,-1===t||126===t)break}if(n=this.ensureBuffer(r+i-1),this.bufferLength+=i-1,i<5){for(;i<5;++i)s[i]=117;this.eof=!0}let o=0;for(i=0;i<5;++i)o=85*o+(s[i]-33);for(i=3;i>=0;--i)n[r+i]=255&o,o>>=8}}}t.Ascii85Stream=i},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.StreamsSequenceStream=t.DecodeStream=void 0,r(84),r(93),r(94),r(97),r(99),r(101),r(105),r(108),r(115),r(139);var n=r(151),a=r(154);const i=new Uint8Array(0);class s extends n.BaseStream{constructor(e){if(super(),this._rawMinBufferLength=e||0,this.pos=0,this.bufferLength=0,this.eof=!1,this.buffer=i,this.minBufferLength=512,e)for(;this.minBufferLengthn&&(r=n)}else{for(;!this.eof;)this.readBlock();r=this.bufferLength}return this.pos=r,this.buffer.subarray(t,r)}reset(){this.pos=0}makeSubStream(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if(void 0===t)for(;!this.eof;)this.readBlock();else{const r=e+t;for(;this.bufferLength<=r&&!this.eof;)this.readBlock()}return new a.Stream(this.buffer,e,t,r)}getBaseStreams(){return this.str?this.str.getBaseStreams():null}}t.DecodeStream=s,t.StreamsSequenceStream=class extends s{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=0;for(const t of e)r+=t instanceof s?t._rawMinBufferLength:t.length;super(r),this.streams=e,this._onError=t}readBlock(){const e=this.streams;if(0===e.length)return void(this.eof=!0);const t=e.shift();let r;try{r=t.getBytes()}catch(e){var n;if(this._onError)return void this._onError(e,null===(n=t.dict)||void 0===n?void 0:n.objId);throw e}const a=this.bufferLength,i=a+r.length;this.ensureBuffer(i).set(r,a),this.bufferLength=i}getBaseStreams(){const e=[];for(const t of this.streams){const r=t.getBaseStreams();r&&e.push(...r)}return e.length>0?e:null}}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.AsciiHexStream=void 0;var n=r(168);class a extends n.DecodeStream{constructor(e,t){t&&(t*=.5),super(t),this.str=e,this.dict=e.dict,this.firstDigit=-1}readBlock(){const e=this.str.getBytes(8e3);if(!e.length)return void(this.eof=!0);const t=e.length+1>>1,r=this.ensureBuffer(this.bufferLength+t);let n=this.bufferLength,a=this.firstDigit;for(const t of e){let e;if(t>=48&&t<=57)e=15&t;else{if(!(t>=65&&t<=70||t>=97&&t<=102)){if(62===t){this.eof=!0;break}continue}e=9+(15&t)}a<0?a=e:(r[n++]=a<<4|e,a=-1)}a>=0&&this.eof&&(r[n++]=a<<4,a=-1),this.firstDigit=a,this.bufferLength=n}}t.AsciiHexStream=a},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.CCITTFaxStream=void 0;var n=r(171),a=r(168),i=r(150);class s extends a.DecodeStream{constructor(e,t,r){super(t),this.str=e,this.dict=e.dict,r instanceof i.Dict||(r=i.Dict.empty);const a={next:()=>e.getByte()};this.ccittFaxDecoder=new n.CCITTFaxDecoder(a,{K:r.get("K"),EndOfLine:r.get("EndOfLine"),EncodedByteAlign:r.get("EncodedByteAlign"),Columns:r.get("Columns"),Rows:r.get("Rows"),EndOfBlock:r.get("EndOfBlock"),BlackIs1:r.get("BlackIs1")})}readBlock(){for(;!this.eof;){const e=this.ccittFaxDecoder.readNextChar();if(-1===e)return void(this.eof=!0);this.ensureBuffer(this.bufferLength+1),this.buffer[this.bufferLength++]=e}}}t.CCITTFaxStream=s},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.CCITTFaxDecoder=void 0,r(2),r(84),r(93),r(94),r(97),r(99),r(101),r(105),r(108),r(115);var n=r(144);const a=-1,i=[[-1,-1],[-1,-1],[7,8],[7,7],[6,6],[6,6],[6,5],[6,5],[4,0],[4,0],[4,0],[4,0],[4,0],[4,0],[4,0],[4,0],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[3,3],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2],[1,2]],s=[[-1,-1],[12,-2],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[11,1792],[11,1792],[12,1984],[12,2048],[12,2112],[12,2176],[12,2240],[12,2304],[11,1856],[11,1856],[11,1920],[11,1920],[12,2368],[12,2432],[12,2496],[12,2560]],o=[[-1,-1],[-1,-1],[-1,-1],[-1,-1],[8,29],[8,29],[8,30],[8,30],[8,45],[8,45],[8,46],[8,46],[7,22],[7,22],[7,22],[7,22],[7,23],[7,23],[7,23],[7,23],[8,47],[8,47],[8,48],[8,48],[6,13],[6,13],[6,13],[6,13],[6,13],[6,13],[6,13],[6,13],[7,20],[7,20],[7,20],[7,20],[8,33],[8,33],[8,34],[8,34],[8,35],[8,35],[8,36],[8,36],[8,37],[8,37],[8,38],[8,38],[7,19],[7,19],[7,19],[7,19],[8,31],[8,31],[8,32],[8,32],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,1],[6,12],[6,12],[6,12],[6,12],[6,12],[6,12],[6,12],[6,12],[8,53],[8,53],[8,54],[8,54],[7,26],[7,26],[7,26],[7,26],[8,39],[8,39],[8,40],[8,40],[8,41],[8,41],[8,42],[8,42],[8,43],[8,43],[8,44],[8,44],[7,21],[7,21],[7,21],[7,21],[7,28],[7,28],[7,28],[7,28],[8,61],[8,61],[8,62],[8,62],[8,63],[8,63],[8,0],[8,0],[8,320],[8,320],[8,384],[8,384],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,10],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[5,11],[7,27],[7,27],[7,27],[7,27],[8,59],[8,59],[8,60],[8,60],[9,1472],[9,1536],[9,1600],[9,1728],[7,18],[7,18],[7,18],[7,18],[7,24],[7,24],[7,24],[7,24],[8,49],[8,49],[8,50],[8,50],[8,51],[8,51],[8,52],[8,52],[7,25],[7,25],[7,25],[7,25],[8,55],[8,55],[8,56],[8,56],[8,57],[8,57],[8,58],[8,58],[6,192],[6,192],[6,192],[6,192],[6,192],[6,192],[6,192],[6,192],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[6,1664],[8,448],[8,448],[8,512],[8,512],[9,704],[9,768],[8,640],[8,640],[8,576],[8,576],[9,832],[9,896],[9,960],[9,1024],[9,1088],[9,1152],[9,1216],[9,1280],[9,1344],[9,1408],[7,256],[7,256],[7,256],[7,256],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,2],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,128],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,8],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[5,9],[6,16],[6,16],[6,16],[6,16],[6,16],[6,16],[6,16],[6,16],[6,17],[6,17],[6,17],[6,17],[6,17],[6,17],[6,17],[6,17],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,4],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[4,5],[6,14],[6,14],[6,14],[6,14],[6,14],[6,14],[6,14],[6,14],[6,15],[6,15],[6,15],[6,15],[6,15],[6,15],[6,15],[6,15],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[5,64],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,6],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7],[4,7]],c=[[-1,-1],[-1,-1],[12,-2],[12,-2],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[-1,-1],[11,1792],[11,1792],[11,1792],[11,1792],[12,1984],[12,1984],[12,2048],[12,2048],[12,2112],[12,2112],[12,2176],[12,2176],[12,2240],[12,2240],[12,2304],[12,2304],[11,1856],[11,1856],[11,1856],[11,1856],[11,1920],[11,1920],[11,1920],[11,1920],[12,2368],[12,2368],[12,2432],[12,2432],[12,2496],[12,2496],[12,2560],[12,2560],[10,18],[10,18],[10,18],[10,18],[10,18],[10,18],[10,18],[10,18],[12,52],[12,52],[13,640],[13,704],[13,768],[13,832],[12,55],[12,55],[12,56],[12,56],[13,1280],[13,1344],[13,1408],[13,1472],[12,59],[12,59],[12,60],[12,60],[13,1536],[13,1600],[11,24],[11,24],[11,24],[11,24],[11,25],[11,25],[11,25],[11,25],[13,1664],[13,1728],[12,320],[12,320],[12,384],[12,384],[12,448],[12,448],[13,512],[13,576],[12,53],[12,53],[12,54],[12,54],[13,896],[13,960],[13,1024],[13,1088],[13,1152],[13,1216],[10,64],[10,64],[10,64],[10,64],[10,64],[10,64],[10,64],[10,64]],l=[[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[8,13],[11,23],[11,23],[12,50],[12,51],[12,44],[12,45],[12,46],[12,47],[12,57],[12,58],[12,61],[12,256],[10,16],[10,16],[10,16],[10,16],[10,17],[10,17],[10,17],[10,17],[12,48],[12,49],[12,62],[12,63],[12,30],[12,31],[12,32],[12,33],[12,40],[12,41],[11,22],[11,22],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[8,14],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,10],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[7,11],[9,15],[9,15],[9,15],[9,15],[9,15],[9,15],[9,15],[9,15],[12,128],[12,192],[12,26],[12,27],[12,28],[12,29],[11,19],[11,19],[11,20],[11,20],[12,34],[12,35],[12,36],[12,37],[12,38],[12,39],[11,21],[11,21],[12,42],[12,43],[10,0],[10,0],[10,0],[10,0],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12],[7,12]],h=[[-1,-1],[-1,-1],[-1,-1],[-1,-1],[6,9],[6,8],[5,7],[5,7],[4,6],[4,6],[4,6],[4,6],[4,5],[4,5],[4,5],[4,5],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[3,4],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,3],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2],[2,2]];t.CCITTFaxDecoder=class{constructor(e){var t;let r,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!e||"function"!=typeof e.next)throw new Error('CCITTFaxDecoder - invalid "source" parameter.');for(this.source=e,this.eof=!1,this.encoding=n.K||0,this.eoline=n.EndOfLine||!1,this.byteAlign=n.EncodedByteAlign||!1,this.columns=n.Columns||1728,this.rows=n.Rows||0,this.eoblock=null===(t=n.EndOfBlock)||void 0===t||t,this.black=n.BlackIs1||!1,this.codingLine=new Uint32Array(this.columns+1),this.refLine=new Uint32Array(this.columns+2),this.codingLine[0]=this.columns,this.codingPos=0,this.row=0,this.nextLine2D=this.encoding<0,this.inputBits=0,this.inputBuf=0,this.outputBits=0,this.rowsDone=!1;0===(r=this._lookBits(12));)this._eatBits(1);1===r&&this._eatBits(12),this.encoding>0&&(this.nextLine2D=!this._lookBits(1),this._eatBits(1))}readNextChar(){if(this.eof)return-1;const e=this.refLine,t=this.codingLine,r=this.columns;let i,s,o,c,l;if(0===this.outputBits){if(this.rowsDone&&(this.eof=!0),this.eof)return-1;let o,l,h;if(this.err=!1,this.nextLine2D){for(c=0;t[c]=64);do{l+=h=this._getWhiteCode()}while(h>=64)}else{do{o+=h=this._getWhiteCode()}while(h>=64);do{l+=h=this._getBlackCode()}while(h>=64)}for(this._addPixels(t[this.codingPos]+o,s),t[this.codingPos]0?--i:++i;e[i]<=t[this.codingPos]&&e[i]0?--i:++i;e[i]<=t[this.codingPos]&&e[i]0?--i:++i;e[i]<=t[this.codingPos]&&e[i]=64);else do{o+=h=this._getWhiteCode()}while(h>=64);this._addPixels(t[this.codingPos]+o,s),s^=1}let u=!1;if(this.byteAlign&&(this.inputBits&=-8),this.eoblock||this.row!==this.rows-1){if(o=this._lookBits(12),this.eoline)for(;o!==a&&1!==o;)this._eatBits(1),o=this._lookBits(12);else for(;0===o;)this._eatBits(1),o=this._lookBits(12);1===o?(this._eatBits(12),u=!0):o===a&&(this.eof=!0)}else this.rowsDone=!0;if(!this.eof&&this.encoding>0&&!this.rowsDone&&(this.nextLine2D=!this._lookBits(1),this._eatBits(1)),this.eoblock&&u&&this.byteAlign){if(o=this._lookBits(12),1===o){if(this._eatBits(12),this.encoding>0&&(this._lookBits(1),this._eatBits(1)),this.encoding>=0)for(c=0;c<4;++c)o=this._lookBits(12),1!==o&&(0,n.info)("bad rtc code: "+o),this._eatBits(12),this.encoding>0&&(this._lookBits(1),this._eatBits(1));this.eof=!0}}else if(this.err&&this.eoline){for(;;){if(o=this._lookBits(13),o===a)return this.eof=!0,-1;if(o>>1==1)break;this._eatBits(1)}this._eatBits(12),this.encoding>0&&(this._eatBits(1),this.nextLine2D=!(1&o))}this.outputBits=t[0]>0?t[this.codingPos=0]:t[this.codingPos=1],this.row++}if(this.outputBits>=8)l=1&this.codingPos?0:255,this.outputBits-=8,0===this.outputBits&&t[this.codingPos]o?(l<<=o,1&this.codingPos||(l|=255>>8-o),this.outputBits-=o,o=0):(l<<=this.outputBits,1&this.codingPos||(l|=255>>8-this.outputBits),o-=this.outputBits,this.outputBits=0,t[this.codingPos]0&&(l<<=o,o=0))}while(o)}return this.black&&(l^=255),l}_addPixels(e,t){const r=this.codingLine;let a=this.codingPos;e>r[a]&&(e>this.columns&&((0,n.info)("row is wrong length"),this.err=!0,e=this.columns),1&a^t&&++a,r[a]=e),this.codingPos=a}_addPixelsNeg(e,t){const r=this.codingLine;let a=this.codingPos;if(e>r[a])e>this.columns&&((0,n.info)("row is wrong length"),this.err=!0,e=this.columns),1&a^t&&++a,r[a]=e;else if(e0&&e=i){const t=r[e-i];if(t[0]===n)return this._eatBits(n),[!0,t[1],!0]}}return[!1,0,!1]}_getTwoDimCode(){let e,t=0;if(this.eoblock){var r;if(t=this._lookBits(7),e=i[t],(null===(r=e)||void 0===r?void 0:r[0])>0)return this._eatBits(e[0]),e[1]}else{const e=this._findTableCode(1,7,i);if(e[0]&&e[2])return e[1]}return(0,n.info)("Bad two dim code"),a}_getWhiteCode(){let e,t=0;if(this.eoblock){if(t=this._lookBits(12),t===a)return 1;if(e=t>>5==0?s[t]:o[t>>3],e[0]>0)return this._eatBits(e[0]),e[1]}else{let e=this._findTableCode(1,9,o);if(e[0])return e[1];if(e=this._findTableCode(11,12,s),e[0])return e[1]}return(0,n.info)("bad white code"),this._eatBits(1),1}_getBlackCode(){let e,t;if(this.eoblock){if(e=this._lookBits(13),e===a)return 1;if(t=e>>7==0?c[e]:e>>9==0&&e>>7!=0?l[(e>>1)-64]:h[e>>7],t[0]>0)return this._eatBits(t[0]),t[1]}else{let e=this._findTableCode(2,6,h);if(e[0])return e[1];if(e=this._findTableCode(7,12,l,64),e[0])return e[1];if(e=this._findTableCode(10,13,c),e[0])return e[1]}return(0,n.info)("bad black code"),this._eatBits(1),1}_lookBits(e){let t;for(;this.inputBits>16-e;this.inputBuf=this.inputBuf<<8|t,this.inputBits+=8}return this.inputBuf>>this.inputBits-e&65535>>16-e}_eatBits(e){(this.inputBits-=e)<0&&(this.inputBits=0)}}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.FlateStream=void 0,r(84),r(93),r(94),r(97),r(99),r(101),r(105),r(108),r(115);var n=r(168),a=r(144);const i=new Int32Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),s=new Int32Array([3,4,5,6,7,8,9,10,65547,65549,65551,65553,131091,131095,131099,131103,196643,196651,196659,196667,262211,262227,262243,262259,327811,327843,327875,327907,258,258,258]),o=new Int32Array([1,2,3,4,65541,65543,131081,131085,196625,196633,262177,262193,327745,327777,393345,393409,459009,459137,524801,525057,590849,591361,657409,658433,724993,727041,794625,798721,868353,876545]),c=[new Int32Array([459008,524368,524304,524568,459024,524400,524336,590016,459016,524384,524320,589984,524288,524416,524352,590048,459012,524376,524312,589968,459028,524408,524344,590032,459020,524392,524328,59e4,524296,524424,524360,590064,459010,524372,524308,524572,459026,524404,524340,590024,459018,524388,524324,589992,524292,524420,524356,590056,459014,524380,524316,589976,459030,524412,524348,590040,459022,524396,524332,590008,524300,524428,524364,590072,459009,524370,524306,524570,459025,524402,524338,590020,459017,524386,524322,589988,524290,524418,524354,590052,459013,524378,524314,589972,459029,524410,524346,590036,459021,524394,524330,590004,524298,524426,524362,590068,459011,524374,524310,524574,459027,524406,524342,590028,459019,524390,524326,589996,524294,524422,524358,590060,459015,524382,524318,589980,459031,524414,524350,590044,459023,524398,524334,590012,524302,524430,524366,590076,459008,524369,524305,524569,459024,524401,524337,590018,459016,524385,524321,589986,524289,524417,524353,590050,459012,524377,524313,589970,459028,524409,524345,590034,459020,524393,524329,590002,524297,524425,524361,590066,459010,524373,524309,524573,459026,524405,524341,590026,459018,524389,524325,589994,524293,524421,524357,590058,459014,524381,524317,589978,459030,524413,524349,590042,459022,524397,524333,590010,524301,524429,524365,590074,459009,524371,524307,524571,459025,524403,524339,590022,459017,524387,524323,589990,524291,524419,524355,590054,459013,524379,524315,589974,459029,524411,524347,590038,459021,524395,524331,590006,524299,524427,524363,590070,459011,524375,524311,524575,459027,524407,524343,590030,459019,524391,524327,589998,524295,524423,524359,590062,459015,524383,524319,589982,459031,524415,524351,590046,459023,524399,524335,590014,524303,524431,524367,590078,459008,524368,524304,524568,459024,524400,524336,590017,459016,524384,524320,589985,524288,524416,524352,590049,459012,524376,524312,589969,459028,524408,524344,590033,459020,524392,524328,590001,524296,524424,524360,590065,459010,524372,524308,524572,459026,524404,524340,590025,459018,524388,524324,589993,524292,524420,524356,590057,459014,524380,524316,589977,459030,524412,524348,590041,459022,524396,524332,590009,524300,524428,524364,590073,459009,524370,524306,524570,459025,524402,524338,590021,459017,524386,524322,589989,524290,524418,524354,590053,459013,524378,524314,589973,459029,524410,524346,590037,459021,524394,524330,590005,524298,524426,524362,590069,459011,524374,524310,524574,459027,524406,524342,590029,459019,524390,524326,589997,524294,524422,524358,590061,459015,524382,524318,589981,459031,524414,524350,590045,459023,524398,524334,590013,524302,524430,524366,590077,459008,524369,524305,524569,459024,524401,524337,590019,459016,524385,524321,589987,524289,524417,524353,590051,459012,524377,524313,589971,459028,524409,524345,590035,459020,524393,524329,590003,524297,524425,524361,590067,459010,524373,524309,524573,459026,524405,524341,590027,459018,524389,524325,589995,524293,524421,524357,590059,459014,524381,524317,589979,459030,524413,524349,590043,459022,524397,524333,590011,524301,524429,524365,590075,459009,524371,524307,524571,459025,524403,524339,590023,459017,524387,524323,589991,524291,524419,524355,590055,459013,524379,524315,589975,459029,524411,524347,590039,459021,524395,524331,590007,524299,524427,524363,590071,459011,524375,524311,524575,459027,524407,524343,590031,459019,524391,524327,589999,524295,524423,524359,590063,459015,524383,524319,589983,459031,524415,524351,590047,459023,524399,524335,590015,524303,524431,524367,590079]),9],l=[new Int32Array([327680,327696,327688,327704,327684,327700,327692,327708,327682,327698,327690,327706,327686,327702,327694,0,327681,327697,327689,327705,327685,327701,327693,327709,327683,327699,327691,327707,327687,327703,327695,0]),5];class h extends n.DecodeStream{constructor(e,t){super(t),this.str=e,this.dict=e.dict;const r=e.getByte(),n=e.getByte();if(-1===r||-1===n)throw new a.FormatError("Invalid header in flate stream: ".concat(r,", ").concat(n));if(8!=(15&r))throw new a.FormatError("Unknown compression method in flate stream: ".concat(r,", ").concat(n));if(((r<<8)+n)%31!=0)throw new a.FormatError("Bad FCHECK in flate stream: ".concat(r,", ").concat(n));if(32&n)throw new a.FormatError("FDICT bit set in flate stream: ".concat(r,", ").concat(n));this.codeSize=0,this.codeBuf=0}getBits(e){const t=this.str;let r,n=this.codeSize,i=this.codeBuf;for(;n>e,this.codeSize=n-=e,r}getCode(e){const t=this.str,r=e[0],n=e[1];let i,s=this.codeSize,o=this.codeBuf;for(;s>16,h=65535&c;if(l<1||s>l,this.codeSize=s-l,h}generateHuffmanTable(e){const t=e.length;let r,n=0;for(r=0;rn&&(n=e[r]);const a=1<>=1;for(r=e;r>=1,0===u){let t;if(-1===(t=r.getByte()))throw new a.FormatError("Bad block header in flate stream");let n=t;if(-1===(t=r.getByte()))throw new a.FormatError("Bad block header in flate stream");if(n|=t<<8,-1===(t=r.getByte()))throw new a.FormatError("Bad block header in flate stream");let i=t;if(-1===(t=r.getByte()))throw new a.FormatError("Bad block header in flate stream");if(i|=t<<8,i!==(65535&~n)&&(0!==n||0!==i))throw new a.FormatError("Bad uncompressed block length in flate stream");this.codeBuf=0,this.codeSize=0;const s=this.bufferLength,o=s+n;if(e=this.ensureBuffer(o),this.bufferLength=o,0===n)-1===r.peekByte()&&(this.eof=!0);else{const t=r.getBytes(n);e.set(t,s),t.length0;)u[o++]=g}n=this.generateHuffmanTable(u.subarray(0,e)),h=this.generateHuffmanTable(u.subarray(e,l))}}e=this.buffer;let d=e?e.length:0,f=this.bufferLength;for(;;){let r=this.getCode(n);if(r<256){f+1>=d&&(e=this.ensureBuffer(f+1),d=e.length),e[f++]=r;continue}if(256===r)return void(this.bufferLength=f);r-=257,r=s[r];let a=r>>16;a>0&&(a=this.getBits(a)),t=(65535&r)+a,r=this.getCode(h),r=o[r],a=r>>16,a>0&&(a=this.getBits(a));const i=(65535&r)+a;f+t>=d&&(e=this.ensureBuffer(f+t),d=e.length);for(let r=0;r{Object.defineProperty(t,"__esModule",{value:!0}),t.Jbig2Stream=void 0,r(139);var n=r(151),a=r(168),i=r(150),s=r(174),o=r(144);class c extends a.DecodeStream{constructor(e,t,r){super(t),this.stream=e,this.dict=e.dict,this.maybeLength=t,this.params=r}get bytes(){return(0,o.shadow)(this,"bytes",this.stream.getBytes(this.maybeLength))}ensureBuffer(e){}readBlock(){if(this.eof)return;const e=new s.Jbig2Image,t=[];if(this.params instanceof i.Dict){const e=this.params.get("JBIG2Globals");if(e instanceof n.BaseStream){const r=e.getBytes();t.push({data:r,start:0,end:r.length})}}t.push({data:this.bytes,start:0,end:this.bytes.length});const r=e.parseChunks(t),a=r.length;for(let e=0;e{Object.defineProperty(t,"__esModule",{value:!0}),t.Jbig2Image=void 0,r(84),r(93),r(94),r(97),r(99),r(101),r(105),r(108),r(115),r(139),r(2);var n=r(144),a=r(149),i=r(175),s=r(171);class o extends n.BaseException{constructor(e){super("JBIG2 error: ".concat(e),"Jbig2Error")}}class c{getContexts(e){return e in this?this[e]:this[e]=new Int8Array(65536)}}class l{constructor(e,t,r){this.data=e,this.start=t,this.end=r}get decoder(){const e=new i.ArithmeticDecoder(this.data,this.start,this.end);return(0,n.shadow)(this,"decoder",e)}get contextCache(){const e=new c;return(0,n.shadow)(this,"contextCache",e)}}const h=2**31-1,u=-(2**31);function d(e,t,r){const n=e.getContexts(t);let a=1;function i(e){let t=0;for(let i=0;i>>0}const s=i(1),o=i(1)?i(1)?i(1)?i(1)?i(1)?i(32)+4436:i(12)+340:i(8)+84:i(6)+20:i(4)+4:i(2);let c;return 0===s?c=o:o>0&&(c=-o),c>=u&&c<=h?c:null}function f(e,t,r){const n=e.getContexts("IAID");let a=1;for(let e=0;e=O&&D=F)for(X=X<<1&y,m=0;m=0&&_=0&&(j=E[B][_],j&&(X|=j<=e?l<<=1:l=l<<1|k[o][c];for(g=0;g=S||c<0||c>=x?l<<=1:l=l<<1|n[o][c];const h=C.readBit(O,l);t[s]=h}}return k}function x(e,t,r,n,a,i,s,c,l,h,u,g,p,m,b,y,w,x,S){if(e&&t)throw new o("refinement with Huffman is not supported");const A=[];let k,C;for(k=0;k1&&(a=e?S.readBits(x):d(F,"IAIT",O));const i=s*I+a,T=e?m.symbolIDTable.decode(S):f(F,O,l),M=t&&(e?S.readBit():d(F,"IARI",O));let E=c[T],P=E[0].length,R=E.length;if(M){const e=d(F,"IARDW",O),t=d(F,"IARDH",O);P+=e,R+=t,E=v(P,R,b,E,(e>>1)+d(F,"IARDX",O),(t>>1)+d(F,"IARDY",O),!1,y,w)}const N=i-(1&g?0:R-1),D=n-(2&g?P-1:0);let B,L,_;if(h){for(B=0;B>5&7;const h=[31&c];let u=t+6;if(7===c){l=536870911&(0,a.readUint32)(e,u-1),u+=3;let t=l+7>>3;for(h[0]=e[u++];--t>0;)h.push(e[u++])}else if(5===c||6===c)throw new o("invalid referred-to flags");r.retainBits=h;let d=4;r.number<=256?d=1:r.number<=65536&&(d=2);const f=[];let p,m;for(p=0;p>>24&255,i[3]=t.height>>16&255,i[4]=t.height>>8&255,i[5]=255&t.height,p=u,m=e.length;p>2&3,e.huffmanDWSelector=t>>4&3,e.bitmapSizeSelector=t>>6&1,e.aggregationInstancesSelector=t>>7&1,e.bitmapCodingContextUsed=!!(256&t),e.bitmapCodingContextRetained=!!(512&t),e.template=t>>10&3,e.refinementTemplate=t>>12&1,u+=2,!e.huffman){for(h=0===e.template?4:1,c=[],l=0;l>2&3,d.stripSize=1<>4&3,d.transposed=!!(64&f),d.combinationOperator=f>>7&3,d.defaultPixelValue=f>>9&1,d.dsOffset=f<<17>>27,d.refinementTemplate=f>>15&1,d.huffman){const e=(0,a.readUint16)(n,u);u+=2,d.huffmanFS=3&e,d.huffmanDS=e>>2&3,d.huffmanDT=e>>4&3,d.huffmanRefinementDW=e>>6&3,d.huffmanRefinementDH=e>>8&3,d.huffmanRefinementDX=e>>10&3,d.huffmanRefinementDY=e>>12&3,d.huffmanRefinementSizeSelector=!!(16384&e)}if(d.refinement&&!d.refinementTemplate){for(c=[],l=0;l<2;l++)c.push({x:(0,a.readInt8)(n,u),y:(0,a.readInt8)(n,u+1)}),u+=2;d.refinementAt=c}d.numberOfSymbolInstances=(0,a.readUint32)(n,u),u+=4,s=[d,r.referredTo,n,u,i];break;case 16:const g={},p=n[u++];g.mmr=!!(1&p),g.template=p>>1&3,g.patternWidth=n[u++],g.patternHeight=n[u++],g.maxPatternIndex=(0,a.readUint32)(n,u),u+=4,s=[g,r.number,n,u,i];break;case 22:case 23:const m={};m.info=k(n,u),u+=C;const b=n[u++];m.mmr=!!(1&b),m.template=b>>1&3,m.enableSkip=!!(8&b),m.combinationOperator=b>>4&7,m.defaultPixelValue=b>>7&1,m.gridWidth=(0,a.readUint32)(n,u),u+=4,m.gridHeight=(0,a.readUint32)(n,u),u+=4,m.gridOffsetX=4294967295&(0,a.readUint32)(n,u),u+=4,m.gridOffsetY=4294967295&(0,a.readUint32)(n,u),u+=4,m.gridVectorX=(0,a.readUint16)(n,u),u+=2,m.gridVectorY=(0,a.readUint16)(n,u),u+=2,s=[m,r.referredTo,n,u,i];break;case 38:case 39:const y={};y.info=k(n,u),u+=C;const w=n[u++];if(y.mmr=!!(1&w),y.template=w>>1&3,y.prediction=!!(8&w),!y.mmr){for(h=0===y.template?4:1,c=[],l=0;l>2&1,v.combinationOperator=x>>3&3,v.requiresBuffer=!!(32&x),v.combinationOperatorOverride=!!(64&x),s=[v];break;case 49:case 50:case 51:case 62:break;case 53:s=[r.number,n,u,i];break;default:throw new o("segment type ".concat(r.typeName,"(").concat(r.type,") is not implemented"))}const d="on"+r.typeName;d in t&&t[d].apply(t,s)}function F(e,t){for(let r=0,n=e.length;r>3,r=new Uint8ClampedArray(t*e.height);e.defaultPixelValue&&r.fill(255),this.buffer=r}drawBitmap(e,t){const r=this.currentPageInfo,n=e.width,a=e.height,i=r.width+7>>3,s=r.combinationOperatorOverride?e.combinationOperator:r.combinationOperator,c=this.buffer,l=128>>(7&e.x);let h,u,d,f,g=e.y*i+(e.x>>3);switch(s){case 0:for(h=0;h>=1,d||(d=128,f++);g+=i}break;case 2:for(h=0;h>=1,d||(d=128,f++);g+=i}break;default:throw new o("operator ".concat(s," is not supported"))}}onImmediateGenericRegion(e,t,r,n){const a=e.info,i=new l(t,r,n),s=w(e.mmr,a.width,a.height,e.template,e.prediction,null,e.at,i);this.drawBitmap(a,s)}onImmediateLosslessGenericRegion(){this.onImmediateGenericRegion(...arguments)}onSymbolDictionary(e,t,r,n,i,s){let c,h;e.huffman&&(c=function(e,t,r){let n,a,i,s,c=0;switch(e.huffmanDHSelector){case 0:case 1:n=R(e.huffmanDHSelector+4);break;case 3:n=D(c,t,r),c++;break;default:throw new o("invalid Huffman DH selector")}switch(e.huffmanDWSelector){case 0:case 1:a=R(e.huffmanDWSelector+2);break;case 3:a=D(c,t,r),c++;break;default:throw new o("invalid Huffman DW selector")}return e.bitmapSizeSelector?(i=D(c,t,r),c++):i=R(1),s=e.aggregationInstancesSelector?D(c,t,r):R(1),{tableDeltaHeight:n,tableDeltaWidth:a,tableBitmapSize:i,tableAggregateInstances:s}}(e,r,this.customTables),h=new N(n,i,s));let u=this.symbols;u||(this.symbols=u={});const g=[];for(const e of r){const t=u[e];t&&g.push(...t)}const p=new l(n,i,s);u[t]=function(e,t,r,n,i,s,c,l,h,u,g,p){if(e&&t)throw new o("symbol refinement with Huffman is not supported");const m=[];let b=0,y=(0,a.log2)(r.length+n);const S=g.decoder,A=g.contextCache;let k,C;for(e&&(k=R(1),C=[],y=Math.max(y,1));m.length1)o=x(e,t,n,b,0,a,1,r.concat(m),y,0,0,1,0,s,h,u,g,0,p);else{const e=f(A,S,y),t=d(A,"IARDX",S),a=d(A,"IARDY",S);o=v(n,b,h,e=32){let r,n,s;switch(t){case 32:if(0===e)throw new o("no previous value in symbol ID table");n=a.readBits(2)+3,r=i[e-1].prefixLength;break;case 33:n=a.readBits(3)+3,r=0;break;case 34:n=a.readBits(7)+11,r=0;break;default:throw new o("invalid code length in symbol ID table")}for(s=0;s=0;y--)M=e?L(T,h,u,!0):w(!1,h,u,r,!1,null,F,m),I[y]=M;for(E=0;E=0;v--)R^=I[v][E][P],D|=R<>8,j=f+E*g-P*p>>8,_>=0&&_+k<=n&&j>=0&&j+C<=i)for(y=0;y=i))for($=b[t],U=B[y],v=0;v=0&&e>1&7),l=1+(n>>4&7),h=[];let u,d,f=i;do{u=o.readBits(c),d=o.readBits(l),h.push(new T([f,u,d,0])),f+=1<>t&1;if(t<=0)this.children[r]=new M(e);else{let n=this.children[r];n||(this.children[r]=n=new M(null)),n.buildTree(e,t-1)}}decodeNode(e){if(this.isLeaf){if(this.isOOB)return null;const t=e.readBits(this.rangeLength);return this.rangeLow+(this.isLowerRange?-t:t)}const t=this.children[e.readBit()];if(!t)throw new o("invalid Huffman data");return t.decodeNode(e)}}class E{constructor(e,t){t||this.assignPrefixCodes(e),this.rootNode=new M(null);for(let t=0,r=e.length;t0&&this.rootNode.buildTree(r,r.prefixLength-1)}}decode(e){return this.rootNode.decodeNode(e)}assignPrefixCodes(e){const t=e.length;let r=0;for(let n=0;n=this.end)throw new o("end of data while reading bit");this.currentByte=this.data[this.position++],this.shift=7}const e=this.currentByte>>this.shift&1;return this.shift--,e}readBits(e){let t,r=0;for(t=e-1;t>=0;t--)r|=this.readBit()<=this.end?-1:this.data[this.position++]}}function D(e,t,r){let n=0;for(let a=0,i=t.length;a>r&1,r--}if(n&&!l){const e=5;for(let t=0;t{Object.defineProperty(t,"__esModule",{value:!0}),t.ArithmeticDecoder=void 0;const r=[{qe:22017,nmps:1,nlps:1,switchFlag:1},{qe:13313,nmps:2,nlps:6,switchFlag:0},{qe:6145,nmps:3,nlps:9,switchFlag:0},{qe:2753,nmps:4,nlps:12,switchFlag:0},{qe:1313,nmps:5,nlps:29,switchFlag:0},{qe:545,nmps:38,nlps:33,switchFlag:0},{qe:22017,nmps:7,nlps:6,switchFlag:1},{qe:21505,nmps:8,nlps:14,switchFlag:0},{qe:18433,nmps:9,nlps:14,switchFlag:0},{qe:14337,nmps:10,nlps:14,switchFlag:0},{qe:12289,nmps:11,nlps:17,switchFlag:0},{qe:9217,nmps:12,nlps:18,switchFlag:0},{qe:7169,nmps:13,nlps:20,switchFlag:0},{qe:5633,nmps:29,nlps:21,switchFlag:0},{qe:22017,nmps:15,nlps:14,switchFlag:1},{qe:21505,nmps:16,nlps:14,switchFlag:0},{qe:20737,nmps:17,nlps:15,switchFlag:0},{qe:18433,nmps:18,nlps:16,switchFlag:0},{qe:14337,nmps:19,nlps:17,switchFlag:0},{qe:13313,nmps:20,nlps:18,switchFlag:0},{qe:12289,nmps:21,nlps:19,switchFlag:0},{qe:10241,nmps:22,nlps:19,switchFlag:0},{qe:9217,nmps:23,nlps:20,switchFlag:0},{qe:8705,nmps:24,nlps:21,switchFlag:0},{qe:7169,nmps:25,nlps:22,switchFlag:0},{qe:6145,nmps:26,nlps:23,switchFlag:0},{qe:5633,nmps:27,nlps:24,switchFlag:0},{qe:5121,nmps:28,nlps:25,switchFlag:0},{qe:4609,nmps:29,nlps:26,switchFlag:0},{qe:4353,nmps:30,nlps:27,switchFlag:0},{qe:2753,nmps:31,nlps:28,switchFlag:0},{qe:2497,nmps:32,nlps:29,switchFlag:0},{qe:2209,nmps:33,nlps:30,switchFlag:0},{qe:1313,nmps:34,nlps:31,switchFlag:0},{qe:1089,nmps:35,nlps:32,switchFlag:0},{qe:673,nmps:36,nlps:33,switchFlag:0},{qe:545,nmps:37,nlps:34,switchFlag:0},{qe:321,nmps:38,nlps:35,switchFlag:0},{qe:273,nmps:39,nlps:36,switchFlag:0},{qe:133,nmps:40,nlps:37,switchFlag:0},{qe:73,nmps:41,nlps:38,switchFlag:0},{qe:37,nmps:42,nlps:39,switchFlag:0},{qe:21,nmps:43,nlps:40,switchFlag:0},{qe:9,nmps:44,nlps:41,switchFlag:0},{qe:5,nmps:45,nlps:42,switchFlag:0},{qe:1,nmps:45,nlps:43,switchFlag:0},{qe:22017,nmps:46,nlps:46,switchFlag:0}];t.ArithmeticDecoder=class{constructor(e,t,r){this.data=e,this.bp=t,this.dataEnd=r,this.chigh=e[t],this.clow=0,this.byteIn(),this.chigh=this.chigh<<7&65535|this.clow>>9&127,this.clow=this.clow<<7&65535,this.ct-=7,this.a=32768}byteIn(){const e=this.data;let t=this.bp;255===e[t]?e[t+1]>143?(this.clow+=65280,this.ct=8):(t++,this.clow+=e[t]<<9,this.ct=7,this.bp=t):(t++,this.clow+=t65535&&(this.chigh+=this.clow>>16,this.clow&=65535)}readBit(e,t){let n=e[t]>>1,a=1&e[t];const i=r[n],s=i.qe;let o,c=this.a-s;if(this.chigh>15&1,this.clow=this.clow<<1&65535,this.ct--}while(0==(32768&c));return this.a=c,e[t]=n<<1|a,o}}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.JpegStream=void 0,r(84),r(93),r(94),r(97),r(99),r(101),r(105),r(108),r(115);var n=r(168),a=r(150),i=r(177),s=r(144);class o extends n.DecodeStream{constructor(e,t,r){let n;for(;-1!==(n=e.getByte());)if(255===n){e.skip(-1);break}super(t),this.stream=e,this.dict=e.dict,this.maybeLength=t,this.params=r}get bytes(){return(0,s.shadow)(this,"bytes",this.stream.getBytes(this.maybeLength))}ensureBuffer(e){}readBlock(){if(this.eof)return;const e={decodeTransform:void 0,colorTransform:void 0},t=this.dict.getArray("D","Decode");if((this.forceRGBA||this.forceRGB)&&Array.isArray(t)){const r=this.dict.get("BPC","BitsPerComponent")||8,n=t.length,a=new Int32Array(n);let i=!1;const s=(1<{Object.defineProperty(t,"__esModule",{value:!0}),t.JpegImage=void 0,r(84),r(93),r(94),r(97),r(99),r(101),r(105),r(108),r(115),r(139);var n=r(144),a=r(178),i=r(149);class s extends n.BaseException{constructor(e){super("JPEG error: ".concat(e),"JpegError")}}class o extends n.BaseException{constructor(e,t){super(e,"DNLMarkerError"),this.scanLines=t}}class c extends n.BaseException{constructor(e){super(e,"EOIMarkerError")}}const l=new Uint8Array([0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63]),h=4017,u=799,d=3406,f=2276,g=1567,p=3784,m=5793,b=2896;function y(e,t){let r,n,a=0,i=16;for(;i>0&&!e[i-1];)i--;const s=[{children:[],index:0}];let o,c=s[0];for(r=0;r0;)c=s.pop();for(c.index++,s.push(c);s.length<=r;)s.push(o={children:[],index:0}),c.children[c.index]=o.children,c=o;a++}r+19&&void 0!==arguments[9]&&arguments[9];const m=r.mcusPerLine,b=r.progressive,y=t;let v=0,x=0;function S(){if(x>0)return x--,v>>x&1;if(v=e[t++],255===v){const n=e[t++];if(n){if(220===n&&p){t+=2;const n=(0,i.readUint16)(e,t);if(t+=2,n>0&&n!==r.scanLines)throw new o("Found DNL marker (0xFFDC) while parsing scan data",n)}else if(217===n){if(p){const e=M*(8===r.precision?8:0);if(e>0&&Math.round(r.scanLines/e)>=5)throw new o("Found EOI marker (0xFFD9) while parsing scan data, possibly caused by incorrect \`scanLines\` parameter",e)}throw new c("Found EOI marker (0xFFD9) while parsing scan data")}throw new s("unexpected marker ".concat((v<<8|n).toString(16)))}}return x=7,v>>>7}function k(e){let t=e;for(;;){switch(t=t[S()],typeof t){case"number":return t;case"object":continue}throw new s("invalid huffman sequence")}}function C(e){let t=0;for(;e>0;)t=t<<1|S(),e--;return t}function O(e){if(1===e)return 1===S()?1:-1;const t=C(e);return t>=1<0)return void I--;let r=u;const n=d;for(;r<=n;){const n=k(e.huffmanTableAC),a=15&n,i=n>>4;if(0===a){if(i<15){I=C(i)+(1<>4,0===a)o<15?(I=C(o)+(1<>4;if(0===n){if(i<15)break;a+=16;continue}a+=i;const s=l[a];e.blockData[t+s]=O(n),a++}};let U,$=0;const X=1===R?a[0].blocksPerLine*a[0].blocksPerColumn:m*r.mcusPerColumn;let H,q;for(;$<=X;){const r=h?Math.min(X-$,h):X;if(r>0){for(D=0;D0?"unexpected":"excessive";(0,n.warn)("decodeScan - ".concat(e," MCU data, current marker is: ").concat(U.invalid)),t=U.offset}if(!(U.marker>=65488&&U.marker<=65495))break;t+=2}return t-y}function x(e,t,r){const n=e.quantizationTable,a=e.blockData;let i,o,c,l,y,w,v,x,S,A,k,C,O,F,I,T,M;if(!n)throw new s("missing required Quantization Table.");for(let e=0;e<64;e+=8)S=a[t+e],A=a[t+e+1],k=a[t+e+2],C=a[t+e+3],O=a[t+e+4],F=a[t+e+5],I=a[t+e+6],T=a[t+e+7],S*=n[e],0!=(A|k|C|O|F|I|T)?(A*=n[e+1],k*=n[e+2],C*=n[e+3],O*=n[e+4],F*=n[e+5],I*=n[e+6],T*=n[e+7],i=m*S+128>>8,o=m*O+128>>8,c=k,l=I,y=b*(A-T)+128>>8,x=b*(A+T)+128>>8,w=C<<4,v=F<<4,i=i+o+1>>1,o=i-o,M=c*p+l*g+128>>8,c=c*g-l*p+128>>8,l=M,y=y+v+1>>1,v=y-v,x=x+w+1>>1,w=x-w,i=i+l+1>>1,l=i-l,o=o+c+1>>1,c=o-c,M=y*f+x*d+2048>>12,y=y*d-x*f+2048>>12,x=M,M=w*u+v*h+2048>>12,w=w*h-v*u+2048>>12,v=M,r[e]=i+x,r[e+7]=i-x,r[e+1]=o+v,r[e+6]=o-v,r[e+2]=c+w,r[e+5]=c-w,r[e+3]=l+y,r[e+4]=l-y):(M=m*S+512>>10,r[e]=M,r[e+1]=M,r[e+2]=M,r[e+3]=M,r[e+4]=M,r[e+5]=M,r[e+6]=M,r[e+7]=M);for(let e=0;e<8;++e)S=r[e],A=r[e+8],k=r[e+16],C=r[e+24],O=r[e+32],F=r[e+40],I=r[e+48],T=r[e+56],0!=(A|k|C|O|F|I|T)?(i=m*S+2048>>12,o=m*O+2048>>12,c=k,l=I,y=b*(A-T)+2048>>12,x=b*(A+T)+2048>>12,w=C,v=F,i=4112+(i+o+1>>1),o=i-o,M=c*p+l*g+2048>>12,c=c*g-l*p+2048>>12,l=M,y=y+v+1>>1,v=y-v,x=x+w+1>>1,w=x-w,i=i+l+1>>1,l=i-l,o=o+c+1>>1,c=o-c,M=y*f+x*d+2048>>12,y=y*d-x*f+2048>>12,x=M,M=w*u+v*h+2048>>12,w=w*h-v*u+2048>>12,v=M,S=i+x,T=i-x,A=o+v,I=o-v,k=c+w,F=c-w,C=l+y,O=l-y,S<16?S=0:S>=4080?S=255:S>>=4,A<16?A=0:A>=4080?A=255:A>>=4,k<16?k=0:k>=4080?k=255:k>>=4,C<16?C=0:C>=4080?C=255:C>>=4,O<16?O=0:O>=4080?O=255:O>>=4,F<16?F=0:F>=4080?F=255:F>>=4,I<16?I=0:I>=4080?I=255:I>>=4,T<16?T=0:T>=4080?T=255:T>>=4,a[t+e]=S,a[t+e+8]=A,a[t+e+16]=k,a[t+e+24]=C,a[t+e+32]=O,a[t+e+40]=F,a[t+e+48]=I,a[t+e+56]=T):(M=m*S+8192>>14,M=M<-2040?0:M>=2024?255:M+2056>>4,a[t+e]=M,a[t+e+8]=M,a[t+e+16]=M,a[t+e+24]=M,a[t+e+32]=M,a[t+e+40]=M,a[t+e+48]=M,a[t+e+56]=M)}function S(e,t){const r=t.blocksPerLine,n=t.blocksPerColumn,a=new Int16Array(64);for(let e=0;e2&&void 0!==arguments[2]?arguments[2]:t;const n=e.length-1;let a=r=n)return null;const s=(0,i.readUint16)(e,t);if(s>=65472&&s<=65534)return{invalid:null,marker:s,offset:t};let o=(0,i.readUint16)(e,a);for(;!(o>=65472&&o<=65534);){if(++a>=n)return null;o=(0,i.readUint16)(e,a)}return{invalid:s.toString(16),marker:o,offset:a}}t.JpegImage=class{constructor(){let{decodeTransform:e=null,colorTransform:t=-1}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this._decodeTransform=e,this._colorTransform=t}parse(e){let{dnlScanLines:t=null}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};function r(){const t=(0,i.readUint16)(e,d);d+=2;let r=d+t-2;const a=A(e,r,d);null!=a&&a.invalid&&((0,n.warn)("readDataBlock - incorrect length, current marker is: "+a.invalid),r=a.offset);const s=e.subarray(d,r);return d+=s.length,s}function a(e){const t=Math.ceil(e.samplesPerLine/8/e.maxH),r=Math.ceil(e.scanLines/8/e.maxV);for(const n of e.components){const a=Math.ceil(Math.ceil(e.samplesPerLine/8)*n.h/e.maxH),i=Math.ceil(Math.ceil(e.scanLines/8)*n.v/e.maxV),s=t*n.h,o=r*n.v*64*(s+1);n.blockData=new Int16Array(o),n.blocksPerLine=a,n.blocksPerColumn=i}e.mcusPerLine=t,e.mcusPerColumn=r}let h,u,d=0,f=null,g=null,p=0;const m=[],b=[],w=[];let x=(0,i.readUint16)(e,d);if(d+=2,65496!==x)throw new s("SOI not found");x=(0,i.readUint16)(e,d),d+=2;e:for(;65497!==x;){let S,k,C;switch(x){case 65504:case 65505:case 65506:case 65507:case 65508:case 65509:case 65510:case 65511:case 65512:case 65513:case 65514:case 65515:case 65516:case 65517:case 65518:case 65519:case 65534:const O=r();65504===x&&74===O[0]&&70===O[1]&&73===O[2]&&70===O[3]&&0===O[4]&&(f={version:{major:O[5],minor:O[6]},densityUnits:O[7],xDensity:O[8]<<8|O[9],yDensity:O[10]<<8|O[11],thumbWidth:O[12],thumbHeight:O[13],thumbData:O.subarray(14,14+3*O[12]*O[13])}),65518===x&&65===O[0]&&100===O[1]&&111===O[2]&&98===O[3]&&101===O[4]&&(g={version:O[5]<<8|O[6],flags0:O[7]<<8|O[8],flags1:O[9]<<8|O[10],transformCode:O[11]});break;case 65499:const F=(0,i.readUint16)(e,d);d+=2;const I=F+d-2;let T;for(;d>4==0)for(k=0;k<64;k++)T=l[k],r[T]=e[d++];else{if(t>>4!=1)throw new s("DQT - invalid table spec");for(k=0;k<64;k++)T=l[k],r[T]=(0,i.readUint16)(e,d),d+=2}m[15&t]=r}break;case 65472:case 65473:case 65474:if(h)throw new s("Only single frame JPEGs supported");d+=2,h={},h.extended=65473===x,h.progressive=65474===x,h.precision=e[d++];const M=(0,i.readUint16)(e,d);d+=2,h.scanLines=t||M,h.samplesPerLine=(0,i.readUint16)(e,d),d+=2,h.components=[],h.componentIds={};const E=e[d++];let P=0,R=0;for(S=0;S>4,n=15&e[d+1];P>4==0?w:b)[15&t]=y(r,a)}break;case 65501:d+=2,u=(0,i.readUint16)(e,d),d+=2;break;case 65498:const D=1==++p&&!t;d+=2;const B=e[d++],L=[];for(S=0;S>4],n.huffmanTableAC=b[15&a],L.push(n)}const _=e[d++],j=e[d++],U=e[d++];try{const t=v(e,d,h,L,u,_,j,U>>4,15&U,D);d+=t}catch(t){if(t instanceof o)return(0,n.warn)("".concat(t.message," -- attempting to re-parse the JPEG image.")),this.parse(e,{dnlScanLines:t.scanLines});if(t instanceof c){(0,n.warn)("".concat(t.message," -- ignoring the rest of the image data."));break e}throw t}break;case 65500:d+=4;break;case 65535:255!==e[d]&&d--;break;default:const $=A(e,d-2,d-3);if(null!=$&&$.invalid){(0,n.warn)("JpegImage.parse - unexpected data, current marker is: "+$.invalid),d=$.offset;break}if(!$||d>=e.length-1){(0,n.warn)("JpegImage.parse - reached the end of the image data without finding an EOI marker (0xFFD9).");break e}throw new s("JpegImage.parse - unknown marker: "+x.toString(16))}x=(0,i.readUint16)(e,d),d+=2}this.width=h.samplesPerLine,this.height=h.scanLines,this.jfif=f,this.adobe=g,this.components=[];for(const e of h.components){const t=m[e.quantizationId];t&&(e.quantizationTable=t),this.components.push({index:e.index,output:S(0,e),scaleX:e.h/h.maxH,scaleY:e.v/h.maxV,blocksPerLine:e.blocksPerLine,blocksPerColumn:e.blocksPerColumn})}this.numComponents=this.components.length}_getLinearizedBlockData(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const n=this.width/e,a=this.height/t;let i,s,o,c,l,h,u,d,f,g,p,m=0;const b=this.components.length,y=e*t*b,w=new Uint8ClampedArray(y),v=new Uint32Array(e),x=4294967288;let S;for(u=0;u>8)+A[f+1];return w}get _isColorConversionNeeded(){return this.adobe?!!this.adobe.transformCode:3===this.numComponents?0!==this._colorTransform&&(82!==this.components[0].index||71!==this.components[1].index||66!==this.components[2].index):1===this._colorTransform}_convertYccToRgb(e){let t,r,n;for(let a=0,i=e.length;a4)throw new s("Unsupported color mode");const c=this._getLinearizedBlockData(t,r,o);if(1===this.numComponents&&(n||i)){const e=c.length*(n?4:3),t=new Uint8ClampedArray(e);let r=0;if(n)(0,a.grayToRGBA)(c,new Uint32Array(t.buffer));else for(const e of c)t[r++]=e,t[r++]=e,t[r++]=e;return t}if(3===this.numComponents&&this._isColorConversionNeeded){if(n){const e=new Uint8ClampedArray(c.length/3*4);return this._convertYccToRgba(c,e)}return this._convertYccToRgb(c)}if(4===this.numComponents){if(this._isColorConversionNeeded)return n?this._convertYcckToRgba(c):i?this._convertYcckToRgb(c):this._convertYcckToCmyk(c);if(n)return this._convertCmykToRgba(c);if(i)return this._convertCmykToRgb(c)}return c}}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.convertBlackAndWhiteToRGBA=a,t.convertToRGBA=function(e){switch(e.kind){case n.ImageKind.GRAYSCALE_1BPP:return a(e);case n.ImageKind.RGB_24BPP:return function(e){let{src:t,srcPos:r=0,dest:a,destPos:i=0,width:s,height:o}=e,c=0;const l=t.length>>2,h=new Uint32Array(t.buffer,r,l);if(n.FeatureTest.isLittleEndian){for(;c>>24|t<<8|4278190080,a[i+2]=t>>>16|r<<16|4278190080,a[i+3]=r>>>8|4278190080}for(let e=4*c,r=t.length;e>>8|255,a[i+2]=t<<16|r>>>16|255,a[i+3]=r<<8|255}for(let e=4*c,r=t.length;e>3,f=7&i,g=t.length;a=new Uint32Array(a.buffer);let p=0;for(let e=0;e{Object.defineProperty(t,"__esModule",{value:!0}),t.JpxStream=void 0,r(84),r(93),r(94),r(97),r(99),r(101),r(105),r(108),r(115);var n=r(168),a=r(180),i=r(144);class s extends n.DecodeStream{constructor(e,t,r){super(t),this.stream=e,this.dict=e.dict,this.maybeLength=t,this.params=r}get bytes(){return(0,i.shadow)(this,"bytes",this.stream.getBytes(this.maybeLength))}ensureBuffer(e){}readBlock(){if(this.eof)return;const e=new a.JpxImage;e.parse(this.bytes);const t=e.width,r=e.height,n=e.componentsCount,i=e.tiles.length;if(1===i)this.buffer=e.tiles[0].items;else{const a=new Uint8ClampedArray(t*r*n);for(let r=0;r{Object.defineProperty(t,"__esModule",{value:!0}),t.JpxImage=void 0,r(139),r(2),r(84),r(93),r(94),r(97),r(99),r(101),r(105),r(108),r(115);var n=r(144),a=r(149),s=r(175);class o extends n.BaseException{constructor(e){super("JPX error: ".concat(e),"JpxError")}}const c={LL:0,LH:1,HL:1,HH:2};function l(e,t){e.x0=Math.ceil(t.XOsiz/e.XRsiz),e.x1=Math.ceil(t.Xsiz/e.XRsiz),e.y0=Math.ceil(t.YOsiz/e.YRsiz),e.y1=Math.ceil(t.Ysiz/e.YRsiz),e.width=e.x1-e.x0,e.height=e.y1-e.y0}function h(e,t){const r=e.SIZ,n=[];let a;const i=Math.ceil((r.Xsiz-r.XTOsiz)/r.XTsiz),s=Math.ceil((r.Ysiz-r.YTOsiz)/r.YTsiz);for(let e=0;e0?Math.min(n.xcb,a.PPx-1):Math.min(n.xcb,a.PPx),a.ycb_=r>0?Math.min(n.ycb,a.PPy-1):Math.min(n.ycb,a.PPy),a}function d(e,t,r){const n=1<t.trx0?Math.ceil(t.trx1/n)-Math.floor(t.trx0/n):0,l=t.try1>t.try0?Math.ceil(t.try1/a)-Math.floor(t.try0/a):0,h=c*l;t.precinctParameters={precinctWidth:n,precinctHeight:a,numprecinctswide:c,numprecinctshigh:l,numprecincts:h,precinctWidthInSubband:s,precinctHeightInSubband:o}}function f(e,t,r){const n=r.xcb_,a=r.ycb_,i=1<>n,c=t.tby0>>a,l=t.tbx1+i-1>>n,h=t.tby1+s-1>>a,u=t.resolution.precinctParameters,d=[],f=[];let g,p,m,b;for(p=c;pe.cbxMax&&(e.cbxMax=g),pe.cbyMax&&(e.cbyMax=p)):f[b]=e={cbxMin:g,cbyMin:p,cbxMax:g,cbyMax:p},m.precinct=e}t.codeblockParameters={codeblockWidth:n,codeblockHeight:a,numcodeblockwide:l-o+1,numcodeblockhigh:h-c+1},t.codeblocks=d,t.precincts=f}function g(e,t,r){const n=[],a=e.subbands;for(let e=0,r=a.length;ee.codingStyleParameters.decompositionLevelsCount)continue;const t=e.resolutions[l],r=t.precinctParameters.numprecincts;for(;ue.codingStyleParameters.decompositionLevelsCount)continue;const t=e.resolutions[c],r=t.precinctParameters.numprecincts;for(;ue.codingStyleParameters.decompositionLevelsCount)continue;const t=e.resolutions[c],r=t.precinctParameters.numprecincts;if(!(h>=r)){for(;s=0;--e){const r=t.resolutions[e],n=g*r.precinctParameters.precinctWidth,a=g*r.precinctParameters.precinctHeight;h=Math.min(h,n),u=Math.min(u,a),d=Math.max(d,r.precinctParameters.numprecinctswide),f=Math.max(f,r.precinctParameters.numprecinctshigh),l[e]={width:n,height:a},g<<=1}r=Math.min(r,h),n=Math.min(n,u),a=Math.max(a,d),i=Math.max(i,f),s[o]={resolutions:l,minWidth:h,minHeight:u,maxNumWide:d,maxNumHigh:f}}return{components:s,minWidth:r,minHeight:n,maxNumWide:a,maxNumHigh:i}}function S(e){const t=e.SIZ,r=e.currentTile.index,n=e.tiles[r],a=t.Csiz;for(let e=0;e>>c&(1<0;){const e=i.shift();c=e.codeblock,void 0===c.data&&(c.data=[]),c.data.push({data:t,start:r+s,end:r+s+e.dataLength,codingpasses:e.codingpasses}),s+=e.dataLength}}return s}function k(e,t,r,n,a,i,o,c,l){const h=n.tbx0,u=n.tby0,d=n.tbx1-n.tbx0,f=n.codeblocks,g="H"===n.type.charAt(0)?1:0,p="H"===n.type.charAt(1)?t:0;for(let r=0,m=f.length;r=i?L:L*(1<0?1-e:0));const p=t.subbands[n],m=c[p.type];k(i,r,0,p,g?1:2**(f+m-s)*(1+a/2048),h+s-1,g,u,d)}m.push({width:r,height:a,items:i})}const y=p.calculate(m,n.tcx0,n.tcy0);return{left:n.tcx0,top:n.tcy0,width:y.width,height:y.height,items:y.items}}function O(e,t){const r=e.SIZ.Csiz,n=e.tiles[t];for(let t=0;t>24&255,c>>16&255,c>>8&255,255&c);(0,n.warn)("Unsupported header type ".concat(c," (").concat(i,")."))}h&&(r+=l)}}parseImageProperties(e){let t=e.getByte();for(;t>=0;){const r=t;if(t=e.getByte(),65361==(r<<8|t)){e.skip(4);const t=e.getInt32()>>>0,r=e.getInt32()>>>0,n=e.getInt32()>>>0,a=e.getInt32()>>>0;e.skip(16);const i=e.getUint16();return this.width=t-n,this.height=r-a,this.componentsCount=i,void(this.bitsPerComponent=8)}}throw new o("No size marker found in JPX stream")}parseCodestream(e,t,r){const i={};let s=!1;try{let o=t;for(;o+1>5,u=[];r>3,t.mu=0):(t.epsilon=e[r]>>3,t.mu=(7&e[r])<<8|e[r+1],r+=2),u.push(t)}w.SPqcds=u,i.mainHeader?i.QCD=w:(i.currentTile.QCD=w,i.currentTile.QCC=[]);break;case 65373:p=(0,a.readUint16)(e,o);const v={};let x;switch(r=o+2,i.SIZ.Csiz<257?x=e[r++]:(x=(0,a.readUint16)(e,r),r+=2),c=e[r++],31&c){case 0:d=8,f=!0;break;case 1:d=16,f=!1;break;case 2:d=16,f=!0;break;default:throw new Error("Invalid SQcd value "+c)}for(v.noQuantization=8===d,v.scalarExpounded=f,v.guardBits=c>>5,u=[];r>3,t.mu=0):(t.epsilon=e[r]>>3,t.mu=(7&e[r])<<8|e[r+1],r+=2),u.push(t)}v.SPqcds=u,i.mainHeader?i.QCC[x]=v:i.currentTile.QCC[x]=v;break;case 65362:p=(0,a.readUint16)(e,o);const k={};r=o+2;const C=e[r++];k.entropyCoderWithCustomPrecincts=!!(1&C),k.sopMarkerUsed=!!(2&C),k.ephMarkerUsed=!!(4&C),k.progressionOrder=e[r++],k.layersCount=(0,a.readUint16)(e,r),r+=2,k.multipleComponentTransform=e[r++],k.decompositionLevelsCount=e[r++],k.xcb=2+(15&e[r++]),k.ycb=2+(15&e[r++]);const F=e[r++];if(k.selectiveArithmeticCodingBypass=!!(1&F),k.resetContextProbabilities=!!(2&F),k.terminationOnEachCodingPass=!!(4&F),k.verticallyStripe=!!(8&F),k.predictableTermination=!!(16&F),k.segmentationSymbolUsed=!!(32&F),k.reversibleTransformation=e[r++],k.entropyCoderWithCustomPrecincts){const t=[];for(;r>4})}k.precinctsSizes=t}const I=[];k.selectiveArithmeticCodingBypass&&I.push("selectiveArithmeticCodingBypass"),k.terminationOnEachCodingPass&&I.push("terminationOnEachCodingPass"),k.verticallyStripe&&I.push("verticallyStripe"),k.predictableTermination&&I.push("predictableTermination"),I.length>0&&(s=!0,(0,n.warn)("JPX: Unsupported COD options (".concat(I.join(", "),")."))),i.mainHeader?i.COD=k:(i.currentTile.COD=k,i.currentTile.COC=[]);break;case 65424:p=(0,a.readUint16)(e,o),g={},g.index=(0,a.readUint16)(e,o+2),g.length=(0,a.readUint32)(e,o+4),g.dataEnd=g.length+o-2,g.partIndex=e[o+8],g.partsCount=e[o+9],i.mainHeader=!1,0===g.partIndex&&(g.COD=i.COD,g.COC=i.COC.slice(0),g.QCD=i.QCD,g.QCC=i.QCC.slice(0)),i.currentTile=g;break;case 65427:g=i.currentTile,0===g.partIndex&&(O(i,g.index),S(i)),p=g.dataEnd-o,A(i,e,o,p);break;case 65363:(0,n.warn)("JPX: Codestream code 0xFF53 (COC) is not implemented.");case 65365:case 65367:case 65368:case 65380:p=(0,a.readUint16)(e,o);break;default:throw new Error("Unknown codestream code: "+t.toString(16))}o+=p}}catch(e){if(s||this.failOnCorruptedImage)throw new o(e.message);(0,n.warn)('JPX: Trying to recover from: "'.concat(e.message,'".'))}this.tiles=function(e){const t=e.SIZ,r=e.components,n=t.Csiz,a=[];for(let t=0,i=e.tiles.length;t>2);c[b++]=e+m>>h,c[b++]=e>>h,c[b++]=e+p>>h}else for(d=0;d>h,c[b++]=g-.34413*p-.71414*m>>h,c[b++]=g+1.772*p>>h;if(e)for(d=0,b=3;d>h}else for(let e=0;e>h,b+=n}a.push(l)}return a}(i),this.width=i.SIZ.Xsiz-i.SIZ.XOsiz,this.height=i.SIZ.Ysiz-i.SIZ.YOsiz,this.componentsCount=i.SIZ.Csiz}};class F{constructor(e,t){const r=(0,a.log2)(Math.max(e,t))+1;this.levels=[];for(let n=0;n>=1,t>>=1,n++}n--,r=this.levels[n],r.items[r.index]=a,this.currentLevel=n,delete this.value}incrementValue(){const e=this.levels[this.currentLevel];e.items[e.index]++}nextLevel(){let e=this.currentLevel,t=this.levels[e];const r=t.items[t.index];return e--,e<0?(this.value=r,!1):(this.currentLevel=e,t=this.levels[e],t.items[t.index]=r,!0)}}class I{constructor(e,t,r){const n=(0,a.log2)(Math.max(e,t))+1;this.levels=[];for(let a=0;ar)return this.currentLevel=n,this.propagateValues(),!1;e>>=1,t>>=1,n++}return this.currentLevel=n-1,!0}incrementValue(e){const t=this.levels[this.currentLevel];t.items[t.index]=e+1,this.propagateValues()}propagateValues(){let e=this.currentLevel,t=this.levels[e];const r=t.items[t.index];for(;--e>=0;)t=this.levels[e],t.items[t.index]=r}nextLevel(){let e=this.currentLevel,t=this.levels[e];const r=t.items[t.index];return t.items[t.index]=255,e--,!(e<0||(this.currentLevel=e,t=this.levels[e],t.items[t.index]=r,0))}}class T{constructor(e,t,r,n,a){let i;this.width=e,this.height=t,i="HH"===r?T.HHContextLabel:"HL"===r?T.HLContextLabel:T.LLAndLHContextsLabel,this.contextLabelTable=i;const s=e*t;let o;this.neighborsSignificance=new Uint8Array(s),this.coefficentsSign=new Uint8Array(s),o=a>14?new Uint32Array(s):a>6?new Uint16Array(s):new Uint8Array(s),this.coefficentsMagnitude=o,this.processingFlags=new Uint8Array(s);const c=new Uint8Array(s);if(0!==n)for(let e=0;e0,o=t+10&&(c=r-a,s&&(n[c-1]+=16),o&&(n[c+1]+=16),n[c]+=4),e+1=r)break;if(s[d]&=-2,n[d]||!i[d])continue;const g=c[i[d]];if(e.readBit(o,g)){const e=this.decodeSignBit(t,u,d);a[d]=e,n[d]=1,this.setNeighborsSignificance(t,u,d),s[d]|=2}l[d]++,s[d]|=1}}}decodeSignBit(e,t,r){const n=this.width,a=this.height,i=this.coefficentsMagnitude,s=this.coefficentsSign;let o,c,l,h,u,d;h=t>0&&0!==i[r-1],t+10&&0!==i[r-n],e+1=0?(u=9+o,d=this.decoder.readBit(this.contexts,u)):(u=9-o,d=1^this.decoder.readBit(this.contexts,u)),d}runMagnitudeRefinementPass(){const e=this.decoder,t=this.width,r=this.height,n=this.coefficentsMagnitude,a=this.neighborsSignificance,i=this.contexts,s=this.bitsDecoded,o=this.processingFlags,c=t*r,l=4*t;for(let r,h=0;h>1;let a,i,s,o;const c=-1.586134342059924,l=-.052980118572961,h=.882911075530934,u=.443506852043971,d=1.230174104914001;for(a=(t|=0)-3,i=n+4;i--;a+=2)e[a]*=.8128930661159609;for(a=t-2,s=u*e[a-1],i=n+3;i--&&(o=u*e[a+1],e[a]=d*e[a]-s-o,i--);a+=2)a+=2,s=u*e[a+1],e[a]=d*e[a]-s-o;for(a=t-1,s=h*e[a-1],i=n+2;i--&&(o=h*e[a+1],e[a]-=s+o,i--);a+=2)a+=2,s=h*e[a+1],e[a]-=s+o;for(a=t,s=l*e[a-1],i=n+1;i--&&(o=l*e[a+1],e[a]-=s+o,i--);a+=2)a+=2,s=l*e[a+1],e[a]-=s+o;if(0!==n)for(a=t+1,s=c*e[a-1],i=n;i--&&(o=c*e[a+1],e[a]-=s+o,i--);a+=2)a+=2,s=c*e[a+1],e[a]-=s+o}}class P extends M{filter(e,t,r){const n=r>>1;let a,i;for(a=t|=0,i=n+1;i--;a+=2)e[a]-=e[a-1]+e[a+1]+2>>2;for(a=t+1,i=n;i--;a+=2)e[a]+=e[a-1]+e[a+1]>>1}}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.LZWStream=void 0,r(84),r(93),r(94),r(97),r(99),r(101),r(105),r(108),r(115);var n=r(168);class a extends n.DecodeStream{constructor(e,t,r){super(t),this.str=e,this.dict=e.dict,this.cachedData=0,this.bitsCached=0;const n=4096,a={earlyChange:r,codeLength:9,nextCode:258,dictionaryValues:new Uint8Array(n),dictionaryLengths:new Uint16Array(n),dictionaryPrevCodes:new Uint16Array(n),currentSequence:new Uint8Array(n),currentSequenceLength:0};for(let e=0;e<256;++e)a.dictionaryValues[e]=e,a.dictionaryLengths[e]=1;this.lzwState=a}readBits(e){let t=this.bitsCached,r=this.cachedData;for(;t>>t&(1<0;if(e<256)d[0]=e,f=1;else{if(!(e>=258)){if(256===e){h=9,s=258,f=0;continue}this.eof=!0,delete this.lzwState;break}if(e=0;t--)d[t]=o[r],r=l[r];else d[f++]=d[0]}if(a&&(l[s]=u,c[s]=c[u]+1,o[s]=d[0],s++,h=s+i&s+i-1?h:0|Math.min(Math.log(s+i)/.6931471805599453+1,12)),u=e,g+=f,n{Object.defineProperty(t,"__esModule",{value:!0}),t.PredictorStream=void 0,r(84),r(93),r(94),r(97),r(99),r(101),r(105),r(108),r(115);var n=r(168),a=r(150),i=r(144);class s extends n.DecodeStream{constructor(e,t,r){if(super(t),!(r instanceof a.Dict))return e;const n=this.predictor=r.get("Predictor")||1;if(n<=1)return e;if(2!==n&&(n<10||n>15))throw new i.FormatError("Unsupported predictor: ".concat(n));this.readBlock=2===n?this.readBlockTiff:this.readBlockPng,this.str=e,this.dict=e.dict;const s=this.colors=r.get("Colors")||1,o=this.bits=r.get("BPC","BitsPerComponent")||8,c=this.columns=r.get("Columns")||1;return this.pixBytes=s*o+7>>3,this.rowBytes=c*s*o+7>>3,this}readBlockTiff(){const e=this.rowBytes,t=this.bufferLength,r=this.ensureBuffer(t+e),n=this.bits,a=this.colors,i=this.str.getBytes(e);if(this.eof=!i.length,this.eof)return;let s,o=0,c=0,l=0,h=0,u=t;if(1===n&&1===a)for(s=0;s>1,e^=e>>2,e^=e>>4,o=(1&e)<<7,r[u++]=e}else if(8===n){for(s=0;s>8&255,r[u++]=255&e}}else{const e=new Uint8Array(a+1),u=(1<>l-n)&u,l-=n,c=c<=8&&(r[f++]=c>>h-8&255,h-=8);h>0&&(r[f++]=(c<<8-h)+(o&(1<<8-h)-1))}this.bufferLength+=e}readBlockPng(){const e=this.rowBytes,t=this.pixBytes,r=this.str.getByte(),n=this.str.getBytes(e);if(this.eof=!n.length,this.eof)return;const a=this.bufferLength,s=this.ensureBuffer(a+e);let o=s.subarray(a-e,a);0===o.length&&(o=new Uint8Array(e));let c,l,h,u=a;switch(r){case 0:for(c=0;c>1)+n[c];for(;c>1)+n[c]&255,u++;break;case 4:for(c=0;c{Object.defineProperty(t,"__esModule",{value:!0}),t.RunLengthStream=void 0;var n=r(168);class a extends n.DecodeStream{constructor(e,t){super(t),this.str=e,this.dict=e.dict}readBlock(){const e=this.str.getBytes(2);if(!e||e.length<2||128===e[0])return void(this.eof=!0);let t,r=this.bufferLength,n=e[0];if(n<128){if(t=this.ensureBuffer(r+n+1),t[r++]=e[1],n>0){const e=this.str.getBytes(n);t.set(e,r),r+=n}}else{n=257-n;const a=e[1];t=this.ensureBuffer(r+n+1);for(let e=0;e{Object.defineProperty(t,"__esModule",{value:!0}),t.Font=t.ErrorFont=void 0,r(116),r(126),r(128),r(131),r(133),r(135),r(137),r(139),r(157),r(84),r(93),r(94),r(97),r(99),r(101),r(105),r(108),r(115);var n=r(144),a=r(185),i=r(188),s=r(190),o=r(189),c=r(187),l=r(191),h=r(192),u=r(193),d=r(194),f=r(195),g=r(196),p=r(164),m=r(197),b=r(149),y=r(154),w=r(198);const v=[[57344,63743],[1048576,1114109]],x=1e3,S=["ascent","bbox","black","bold","charProcOperatorList","composite","cssFontInfo","data","defaultVMetrics","defaultWidth","descent","fallbackName","fontMatrix","isInvalidPDFjsFont","isType3Font","italic","loadedName","mimetype","missingFile","name","remeasure","subtype","systemFontInfo","type","vertical"],A=["cMap","defaultEncoding","differences","isMonospace","isSerifFont","isSymbolicFont","seacMap","toFontChar","toUnicode","vmetrics","widths"];function k(e){if(!e.fontMatrix)return;if(e.fontMatrix[0]===n.FONT_IDENTITY_MATRIX[0])return;const t=.001/e.fontMatrix[0],r=e.widths;for(const e in r)r[e]*=t;e.defaultWidth*=t}function C(e){if(!e.fallbackToUnicode)return;if(e.toUnicode instanceof h.IdentityToUnicodeMap)return;const t=[];for(const r in e.fallbackToUnicode)e.toUnicode.has(r)||(t[r]=e.fallbackToUnicode[r]);t.length>0&&e.toUnicode.amend(t)}class O{constructor(e,t,r,n,a,i,s,o,c){this.originalCharCode=e,this.fontChar=t,this.unicode=r,this.accent=n,this.width=a,this.vmetric=i,this.operatorListId=s,this.isSpace=o,this.isInFont=c}get category(){return(0,n.shadow)(this,"category",(0,s.getCharUnicodeCategory)(this.unicode),!0)}}function F(e,t){return(e<<8)+t}function I(e,t,r){e[t+1]=r,e[t]=r>>>8}function T(e,t){const r=(e<<8)+t;return 32768&r?r-65536:r}function M(e){return String.fromCharCode(e>>8&255,255&e)}function E(e){return e>32767?e=32767:e<-32768&&(e=-32768),String.fromCharCode(e>>8&255,255&e)}function P(e){const t=e.peekBytes(4);return"ttcf"===(0,n.bytesToString)(t)}function R(e,t){for(const r in t)e[+r]=t[r]}function N(e,t,r){const n=[];let a;for(let r=0,i=e.length;r2&&void 0!==arguments[2]&&arguments[2];switch(t.length){case 1:return t.charCodeAt(0);case 2:return t.charCodeAt(0)<<8|t.charCodeAt(1)}const a="Unsupported CID string (charCode ".concat(e,'): "').concat(t,'".');if(r)throw new n.FormatError(a);return(0,n.warn)(a),t}function _(e,t,r,a){const i=Object.create(null),s=new Map,o=[],c=new Set;let l=0,h=v[l][0],u=v[l][1];for(let f in e){f|=0;let g=e[f];if(!t(g))continue;if(h>u){if(l++,l>=v.length){(0,n.warn)("Ran out of space in font private use area.");break}h=v[l][0],u=v[l][1]}const p=h++;0===g&&(g=r);let m=a.get(f);"string"==typeof m&&(m=m.codePointAt(0)),!m||(d=m,v[0][0]<=d&&d<=v[0][1]||v[1][0]<=d&&d<=v[1][1])||c.has(g)||(s.set(m,g),c.add(g)),i[p]=g,o[f]=p}var d;return{toFontChar:o,charCodeToGlyphId:i,toUnicodeExtraMap:s,nextAvailableFontCharCode:h}}function j(e,t,r){const a=function(e,t,r){const n=[];for(const t in e)e[t]>=r||n.push({fontCharCode:0|t,glyphId:e[t]});if(t)for(const[e,a]of t)a>=r||n.push({fontCharCode:e,glyphId:a});0===n.length&&n.push({fontCharCode:0,glyphId:0}),n.sort((function(e,t){return e.fontCharCode-t.fontCharCode}));const a=[],i=n.length;for(let e=0;e65535?2:1;let s,o,c,l,h="\\0\\0"+M(i)+"\\0\\0"+(0,n.string32)(4+8*i);for(s=a.length-1;s>=0&&!(a[s][0]<=65535);--s);const u=s+1;a[s][0]<65535&&65535===a[s][1]&&(a[s][1]=65534);const d=a[s][1]<65535?1:0,f=u+d,g=m.OpenTypeFileBuilder.getSearchParams(f,2);let p,b,y,w,v="",x="",S="",A="",k="",C=0;for(s=0,o=u;s0&&(x+="ÿÿ",v+="ÿÿ",S+="\\0",A+="\\0\\0");const O="\\0\\0"+M(2*f)+M(g.range)+M(g.entry)+M(g.rangeShift)+x+"\\0\\0"+v+S+A+k;let F="",I="";if(i>1){for(h+="\\0\\0\\n"+(0,n.string32)(4+8*i+4+O.length),F="",s=0,o=a.length;se||!l)&&(l=e),h 123 are reserved for internal usage");c|=1<65535&&(h=65535)}else l=0,h=255;const d=e.bbox||[0,0,0,0],f=r.unitsPerEm||1/(e.fontMatrix||n.FONT_IDENTITY_MATRIX)[0],g=e.ascentScaled?1:f/x,p=r.ascent||Math.round(g*(e.ascent||d[3]));let m=r.descent||Math.round(g*(e.descent||d[1]));m>0&&e.descent>0&&d[1]<0&&(m=-m);const b=r.yMax||p,y=-r.yMin||-m;return"\\0$ô\\0\\0\\0Š»\\0\\0\\0ŒŠ»\\0\\0ß\\x001\\0\\0\\0\\0"+String.fromCharCode(e.fixedPitch?9:0)+"\\0\\0\\0\\0\\0\\0"+(0,n.string32)(a)+(0,n.string32)(i)+(0,n.string32)(o)+(0,n.string32)(c)+"*21*"+M(e.italicAngle?1:0)+M(l||e.firstChar)+M(h||e.lastChar)+M(p)+M(m)+"\\0d"+M(b)+M(y)+"\\0\\0\\0\\0\\0\\0\\0\\0"+M(e.xHeight)+M(e.capHeight)+M(0)+M(l||e.firstChar)+"\\0"}function $(e){const t=Math.floor(65536*e.italicAngle);return"\\0\\0\\0"+(0,n.string32)(t)+"\\0\\0\\0\\0"+(0,n.string32)(e.fixedPitch?1:0)+"\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0"}function X(e){return e.replaceAll(/[^\\x21-\\x7E]|[[\\](){}<>/%]/g,"").slice(0,63)}function H(e,t){t||(t=[[],[]]);const r=[t[0][0]||"Original licence",t[0][1]||e,t[0][2]||"Unknown",t[0][3]||"uniqueID",t[0][4]||e,t[0][5]||"Version 0.11",t[0][6]||X(e),t[0][7]||"Unknown",t[0][8]||"Unknown",t[0][9]||"Unknown"],n=[];let a,i,s,o,c;for(a=0,i=r.length;a=1&&t[3]>=1&&t[3]<=4}(e)?o?(r="CIDFontType0",a="CIDFontType0C"):(r="MMType1"===i?"MMType1":"Type1",a="Type1C"):((0,n.warn)("getFontFileType: Unable to detect correct font file Type/Subtype."),r=i,a=s),[r,a]}(t,r),o===this.type&&c===this.subtype||(0,n.info)("Inconsistent font file Type/SubType, expected: ".concat(this.type,"/").concat(this.subtype," but found: ").concat(o,"/").concat(c,"."));try{switch(o){case"MMType1":(0,n.info)("MMType1 font ("+e+"), falling back to Type1.");case"Type1":case"CIDFontType0":this.mimetype="font/opentype";const a="Type1C"===c||"CIDFontType0C"===c?new u.CFFFont(t,r):new w.Type1Font(e,t,r);k(r),d=this.convert(e,a,r);break;case"OpenType":case"TrueType":case"CIDFontType2":this.mimetype="font/opentype",d=this.checkAndRepair(e,t,r),this.isOpenType&&(k(r),o="OpenType");break;default:throw new n.FormatError("Font ".concat(o," is not supported"))}}catch(e){return(0,n.warn)(e),void this.fallbackToSystemFont(r)}C(r),this.data=d,this.type=o,this.subtype=c,this.fontMatrix=r.fontMatrix,this.widths=r.widths,this.defaultWidth=r.defaultWidth,this.toUnicode=r.toUnicode,this.seacMap=r.seacMap}get renderer(){const e=d.FontRendererFactory.create(this,i.SEAC_ANALYSIS_ENABLED);return(0,n.shadow)(this,"renderer",e)}exportData(){const e=arguments.length>0&&void 0!==arguments[0]&&arguments[0]?[...S,...A]:S,t=Object.create(null);let r,n;for(r of e)n=this[r],void 0!==n&&(t[r]=n);return t}fallbackToSystemFont(e){this.missingFile=!0;const{name:t,type:r}=this;let n=(0,i.normalizeFontName)(t);const a=(0,l.getStdFontMap)(),u=(0,l.getNonStdFontMap)(),d=!!a[n],g=!(!u[n]||!a[u[n]]);n=a[n]||u[n]||n;const p=(0,f.getFontBasicMetrics)()[n];p&&(isNaN(this.ascent)&&(this.ascent=p.ascent/x),isNaN(this.descent)&&(this.descent=p.descent/x),isNaN(this.capHeight)&&(this.capHeight=p.capHeight/x)),this.bold=/bold/gi.test(n),this.italic=/oblique|italic/gi.test(n),this.black=/Black/g.test(t);const m=/Narrow/g.test(t);if(this.remeasure=(!d||m)&&Object.keys(this.widths).length>0,(d||g)&&"CIDFontType2"===r&&this.cidEncoding.startsWith("Identity-")){const r=e.cidToGidMap,n=[];if(R(n,(0,l.getGlyphMapForStandardFonts)()),/Arial-?Black/i.test(t)?R(n,(0,l.getSupplementalGlyphMapForArialBlack)()):/Calibri/i.test(t)&&R(n,(0,l.getSupplementalGlyphMapForCalibri)()),r){for(const e in n){const t=n[e];void 0!==r[t]&&(n[+e]=r[t])}r.length!==this.toUnicode.length&&e.hasIncludedToUnicodeMap&&this.toUnicode instanceof h.IdentityToUnicodeMap&&this.toUnicode.forEach((function(e,t){const a=n[e];void 0===r[a]&&(n[+e]=t)}))}this.toUnicode instanceof h.IdentityToUnicodeMap||this.toUnicode.forEach((function(e,t){n[+e]=t})),this.toFontChar=n,this.toUnicode=new h.ToUnicodeMap(n)}else if(/Symbol/i.test(n))this.toFontChar=N(c.SymbolSetEncoding,(0,o.getGlyphsUnicode)(),this.differences);else if(/Dingbats/i.test(n))this.toFontChar=N(c.ZapfDingbatsEncoding,(0,o.getDingbatsGlyphsUnicode)(),this.differences);else if(d){const e=N(this.defaultEncoding,(0,o.getGlyphsUnicode)(),this.differences);"CIDFontType2"!==r||this.cidEncoding.startsWith("Identity-")||this.toUnicode instanceof h.IdentityToUnicodeMap||this.toUnicode.forEach((function(t,r){e[+t]=r})),this.toFontChar=e}else{const e=(0,o.getGlyphsUnicode)(),r=[];this.toUnicode.forEach(((t,n)=>{if(!this.composite){const r=this.differences[t]||this.defaultEncoding[t],a=(0,s.getUnicodeForGlyph)(r,e);-1!==a&&(n=a)}r[+t]=n})),this.composite&&this.toUnicode instanceof h.IdentityToUnicodeMap&&/Tahoma|Verdana/i.test(t)&&R(r,(0,l.getGlyphMapForStandardFonts)()),this.toFontChar=r}C(e),this.loadedName=n.split("-")[0]}checkAndRepair(e,t,r){var s,l;const d=["OS/2","cmap","head","hhea","hmtx","maxp","name","post","loca","glyf","fpgm","prep","cvt ","CFF "];function f(e,t){const r=Object.create(null);r["OS/2"]=null,r.cmap=null,r.head=null,r.hhea=null,r.hmtx=null,r.maxp=null,r.name=null,r.post=null;for(let n=0;n>>0,n=e.getInt32()>>>0,a=e.getInt32()>>>0,i=e.pos;e.pos=e.start||0,e.skip(n);const s=e.getBytes(a);return e.pos=i,"head"===t&&(s[8]=s[9]=s[10]=s[11]=0,s[17]|=32),{tag:t,checksum:r,length:a,offset:n,data:s}}function w(e){return{version:e.getString(4),numTables:e.getUint16(),searchRange:e.getUint16(),entrySelector:e.getUint16(),rangeShift:e.getUint16()}}function v(e,t,r,n,a,i){const s={length:0,sizeOfInstructions:0};if(t<0||t>=e.length||r>e.length||r-t<=12)return s;const o=e.subarray(t,r),c=T(o[2],o[3]),l=T(o[4],o[5]),h=T(o[6],o[7]),u=T(o[8],o[9]);c>h&&(I(o,2,h),I(o,6,c)),l>u&&(I(o,4,u),I(o,8,l));const d=T(o[0],o[1]);if(d<0)return d<-1||(n.set(o,a),s.length=o.length),s;let f,g=10,p=0;for(f=0;fo.length?s:!i&&b>0?(n.set(o.subarray(0,m),a),n.set([0,0],a+m),n.set(o.subarray(y,v),a+m+2),v-=b,o.length-v>3&&(v=v+3&-4),s.length=v,s):o.length-v>3?(v=v+3&-4,n.set(o.subarray(0,v),a),s.length=v,s):(n.set(o,a),s.length=o.length,s)}function x(e){const r=(t.start||0)+e.offset;t.pos=r;const n=[[],[]],a=[],i=e.length,s=r+i;if(0!==t.getUint16()||i<6)return[n,a];const o=t.getUint16(),c=t.getUint16();let l,h;for(l=0;ls)continue;t.pos=i;const o=e.name;if(e.encoding){let r="";for(let n=0,a=e.length;n0&&(l+=e-1)}}else(m||y)&&((0,n.warn)("TT: nested FDEFs not allowed"),p=!0),m=!0,u=l,s=d.pop(),t.functionsDefined[s]={data:c,i:l};else if(!m&&!y)if(s=d.at(-1),isNaN(s))(0,n.info)("TT: CALL empty stack (or invalid entry).");else if(t.functionsUsed[s]=!0,s in t.functionsStackDeltas){const e=d.length+t.functionsStackDeltas[s];if(e<0)return(0,n.warn)("TT: CALL invalid functions stack delta."),void(t.hintsValid=!1);d.length=e}else if(s in t.functionsDefined&&!g.includes(s)){if(f.push({data:c,i:l,stackTop:d.length-1}),g.push(s),o=t.functionsDefined[s],!o)return(0,n.warn)("TT: CALL non-existent function"),void(t.hintsValid=!1);c=o.data,l=o.i}if(!m&&!y){let t=0;for(e<=142?t=S[e]:e>=192&&e<=223?t=-1:e>=224&&(t=-2),e>=113&&e<=117&&(a=d.pop(),isNaN(a)||(t=2*-a));t<0&&d.length>0;)d.pop(),t++;for(;t>0;)d.push(NaN),t--}}t.tooComplexToFollowFunctions=p;const w=[c];l>c.length&&w.push(new Uint8Array(l-c.length)),u>h&&((0,n.warn)("TT: complementing a missing function tail"),w.push(new Uint8Array([34,45]))),function(e,t){if(t.length>1){let r,n,a=0;for(r=0,n=t.length;r>>0,s=[];for(let t=0;t>>0);const o={ttcTag:t,majorVersion:r,minorVersion:a,numFonts:i,offsetTable:s};switch(r){case 1:return o;case 2:return o.dsigTag=e.getInt32()>>>0,o.dsigLength=e.getInt32()>>>0,o.dsigOffset=e.getInt32()>>>0,o}throw new n.FormatError("Invalid TrueType Collection majorVersion: ".concat(r,"."))}(e),i=t.split("+");let s;for(let c=0;c0||!(r.cMap instanceof p.IdentityCMap));if("OTTO"===C.version&&!t||!O.head||!O.hhea||!O.maxp||!O.post)return E=new y.Stream(O["CFF "].data),M=new u.CFFFont(E,r),k(r),this.convert(e,M,r);delete O.glyf,delete O.loca,delete O.fpgm,delete O.prep,delete O["cvt "],this.isOpenType=!0}if(!O.maxp)throw new n.FormatError('Required "maxp" table is not found');t.pos=(t.start||0)+O.maxp.offset;const X=t.getInt32(),q=t.getUint16();if((null===(s=r.scaleFactors)||void 0===s?void 0:s.length)===q&&R){const{scaleFactors:e}=r,t=F(O.head.data[50],O.head.data[51]),n=new g.GlyfTable({glyfTable:O.glyf.data,isGlyphLocationsLong:t,locaTable:O.loca.data,numGlyphs:q});n.scale(e);const{glyf:a,loca:i,isLocationLong:s}=n.write();O.glyf.data=a,O.loca.data=i,s!==!!t&&(O.head.data[50]=0,O.head.data[51]=s?1:0);const o=O.hmtx.data;for(let t=0;t>8&255,o[r+1]=255&n,I(o,r+2,Math.round(e[t]*T(o[r+2],o[r+3])))}}let z=q+1,G=!0;z>65535&&(G=!1,z=q,(0,n.warn)("Not enough space in glyfs to duplicate first glyph."));let W=0,V=0;X>=65536&&O.maxp.length>=22&&(t.pos+=8,t.getUint16()>2&&(O.maxp.data[14]=0,O.maxp.data[15]=2),t.pos+=4,W=t.getUint16(),t.pos+=4,V=t.getUint16()),O.maxp.data[4]=z>>8,O.maxp.data[5]=255&z;const K=function(e,t,r,a){const i={functionsDefined:[],functionsUsed:[],functionsStackDeltas:[],tooComplexToFollowFunctions:!1,hintsValid:!0};if(e&&A(e,i),t&&A(t,i),e&&function(e,t){if(!e.tooComplexToFollowFunctions)if(e.functionsDefined.length>t)(0,n.warn)("TT: more functions defined than expected"),e.hintsValid=!1;else for(let r=0,a=e.functionsUsed.length;rt)return(0,n.warn)("TT: invalid function id: "+r),void(e.hintsValid=!1);if(e.functionsUsed[r]&&!e.functionsDefined[r])return(0,n.warn)("TT: undefined function: "+r),void(e.hintsValid=!1)}}(i,a),r&&1&r.length){const e=new Uint8Array(r.length+1);e.set(r.data),r.data=e}return i.hintsValid}(O.fpgm,O.prep,O["cvt "],W);if(K||(delete O.fpgm,delete O.prep,delete O["cvt "]),function(e,t,r,a,i,s){if(!t)return void(r&&(r.data=null));e.pos=(e.start||0)+t.offset,e.pos+=4,e.pos+=2,e.pos+=2,e.pos+=2,e.pos+=2,e.pos+=2,e.pos+=2,e.pos+=2,e.pos+=2,e.pos+=2;const o=e.getUint16();e.pos+=8,e.pos+=2;let c=e.getUint16();0!==o&&(2&F(a.data[44],a.data[45])||(t.data[22]=0,t.data[23]=0)),c>i&&((0,n.info)("The numOfMetrics (".concat(c,") should not be greater than the numGlyphs (").concat(i,").")),c=i,t.data[34]=(65280&c)>>8,t.data[35]=255&c);const l=i-c-(r.length-4*c>>1);if(l>0){const e=new Uint8Array(r.length+2*l);e.set(r.data),s&&(e[r.length]=r.data[2],e[r.length+1]=r.data[3]),r.data=e}}(t,O.hhea,O.hmtx,O.head,z,G),!O.head)throw new n.FormatError('Required "head" table is not found');!function(e,t,r){const a=e.data,i=function(e,t,r,n){return(e<<24)+(t<<16)+(r<<8)+n}(a[0],a[1],a[2],a[3]);i>>16!=1&&((0,n.info)("Attempting to fix invalid version in head table: "+i),a[0]=0,a[1]=1,a[2]=0,a[3]=0);const s=F(a[50],a[51]);if(s<0||s>1){(0,n.info)("Attempting to fix invalid indexToLocFormat in head table: "+s);const e=t+1;if(r===e<<1)a[50]=0,a[51]=0;else{if(r!==e<<2)throw new n.FormatError("Could not fix indexToLocFormat: "+s);a[50]=0,a[51]=1}}}(O.head,q,R?O.loca.length:0);let Y=Object.create(null);if(R){const e=F(O.head.data[50],O.head.data[51]),t=function(e,t,r,n,a,i,s){let o,c,l;n?(o=4,c=function(e,t){return e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3]},l=function(e,t,r){e[t]=r>>>24&255,e[t+1]=r>>16&255,e[t+2]=r>>8&255,e[t+3]=255&r}):(o=2,c=function(e,t){return e[t]<<9|e[t+1]<<1},l=function(e,t,r){e[t]=r>>9&255,e[t+1]=r>>1&255});const h=i?r+1:r,u=o*(1+h),d=new Uint8Array(u);d.set(e.data.subarray(0,u)),e.data=d;const f=t.data,g=f.length,p=new Uint8Array(g);let m,b;const y=[];for(m=0,b=0;mg&&(e=g),y.push({index:m,offset:e,endOffset:0})}for(y.sort(((e,t)=>e.offset-t.offset)),m=0;me.index-t.index)),m=0;ms&&(s=e.sizeOfInstructions),x+=t,l(d,b,x)}if(0===x){const e=new Uint8Array([0,1,0,0,0,0,0,0,0,0,0,0,0,0,49,0]);for(m=0,b=o;mr+x?t.data=p.subarray(0,r+x):(t.data=new Uint8Array(r+x),t.data.set(p.subarray(0,x))),t.data.set(p.subarray(0,r),x),l(e.data,d.length-o,x+r)}else t.data=p.subarray(0,x);return{missingGlyphs:w,maxSizeOfInstructions:s}}(O.loca,O.glyf,q,e,K,G,V);Y=t.missingGlyphs,X>=65536&&O.maxp.length>=22&&(O.maxp.data[26]=t.maxSizeOfInstructions>>8,O.maxp.data[27]=255&t.maxSizeOfInstructions)}if(!O.hhea)throw new n.FormatError('Required "hhea" table is not found');0===O.hhea.data[10]&&0===O.hhea.data[11]&&(O.hhea.data[10]=255,O.hhea.data[11]=255);const J={unitsPerEm:F(O.head.data[18],O.head.data[19]),yMax:T(O.head.data[42],O.head.data[43]),yMin:T(O.head.data[38],O.head.data[39]),ascent:T(O.hhea.data[4],O.hhea.data[5]),descent:T(O.hhea.data[6],O.hhea.data[7]),lineGap:T(O.hhea.data[8],O.hhea.data[9])};this.ascent=J.ascent/J.unitsPerEm,this.descent=J.descent/J.unitsPerEm,this.lineGap=J.lineGap/J.unitsPerEm,null!==(l=this.cssFontInfo)&&void 0!==l&&l.lineHeight?(this.lineHeight=this.cssFontInfo.metrics.lineHeight,this.lineGap=this.cssFontInfo.metrics.lineGap):this.lineHeight=this.ascent-this.descent+this.lineGap,O.post&&function(e,r,a){const s=(t.start||0)+e.offset;t.pos=s;const o=s+e.length,c=t.getInt32();t.skip(28);let l,h,u=!0;switch(c){case 65536:l=i.MacStandardGlyphOrdering;break;case 131072:const e=t.getUint16();if(e!==a){u=!1;break}const s=[];for(h=0;h=32768){u=!1;break}s.push(e)}if(!u)break;const d=[],f=[];for(;t.pos65535)throw new n.FormatError("Max size of CID is 65,535");let i=-1;t?i=a:void 0!==e[a]&&(i=e[a]),i>=0&&i>>0;let d=!1;if((null===(h=c)||void 0===h?void 0:h.platformId)!==n||(null===(u=c)||void 0===u?void 0:u.encodingId)!==i){if(0!==n||0!==i&&1!==i&&3!==i)if(1===n&&0===i)d=!0;else if(3!==n||1!==i||!a&&c){if(r&&3===n&&0===i){d=!0;let r=!0;if(e>3;e.push(n),r=Math.max(n,r)}const n=[];for(let e=0;e<=r;e++)n.push({firstCode:t.getUint16(),entryCount:t.getUint16(),idDelta:T(t.getByte(),t.getByte()),idRangePos:t.pos+t.getUint16()});for(let r=0;r<256;r++)if(0===e[r])t.pos=n[0].idRangePos+2*r,m=t.getUint16(),g.push({charCode:r,glyphId:m});else{const a=n[e[r]];for(p=0;p>1;t.skip(6);const r=[];let n;for(n=0;n>1)-(e-n),i.offsetIndex=a,o=Math.max(o,a+i.end-i.start+1)):i.offsetIndex=-1}const c=[];for(p=0;p>>0;for(p=0;p>>0,r=t.getInt32()>>>0;let n=t.getInt32()>>>0;for(let t=e;t<=r;t++)g.push({charCode:t,glyphId:n++})}}}g.sort((function(e,t){return e.charCode-t.charCode}));for(let e=1;e=61440&&t<=61695&&(t&=255),Z[t]=e.glyphId}if(r.glyphNames&&(u.length||this.differences.length))for(let e=0;e<256;++e){if(!d&&void 0!==Z[e])continue;const t=this.differences[e]||u[e];if(!t)continue;const n=r.glyphNames.indexOf(t);n>0&&Q(n)&&(Z[e]=n)}}0===Z.length&&(Z[0]=0);let ee=z-1;if(G||(ee=0),!r.cssFontInfo){const e=_(Z,Q,ee,this.toUnicode);this.toFontChar=e.toFontChar,O.cmap={tag:"cmap",data:j(e.charCodeToGlyphId,e.toUnicodeExtraMap,z)},O["OS/2"]&&function(e,t){t.pos=(t.start||0)+e.offset;const r=t.getUint16();t.skip(60);const n=t.getUint16();return!(r<4&&768&n||t.getUint16()>t.getUint16()||(t.skip(6),0===t.getUint16()||(e.data[8]=e.data[9]=0,0)))}(O["OS/2"],t)||(O["OS/2"]={tag:"OS/2",data:U(r,e.charCodeToGlyphId,J)})}if(!R)try{E=new y.Stream(O["CFF "].data),M=new a.CFFParser(E,r,i.SEAC_ANALYSIS_ENABLED).parse(),M.duplicateFirstGlyph();const e=new a.CFFCompiler(M);O["CFF "].data=e.compile()}catch(e){(0,n.warn)("Failed to compile font "+r.loadedName)}if(O.name){const[t,n]=x(O.name);O.name.data=H(e,t),this.psName=t[0][6]||null,r.composite||function(e,t,r){if(e.isInternalFont)return;if(e.hasIncludedToUnicodeMap)return;if(e.hasEncoding)return;if(e.toUnicode instanceof h.IdentityToUnicodeMap)return;if(!t)return;if(0===r.length)return;if(e.defaultEncoding===c.WinAnsiEncoding)return;for(const e of r)if(!B(e))return;const n=c.WinAnsiEncoding,a=[],i=(0,o.getGlyphsUnicode)();for(const e in n){const t=n[e];if(""===t)continue;const r=i[t];void 0!==r&&(a[e]=String.fromCharCode(r))}a.length>0&&e.toUnicode.amend(a)}(r,this.isSymbolicFont,n)}else O.name={tag:"name",data:H(this.name)};const te=new m.OpenTypeFileBuilder(C.version);for(const e in O)te.addTable(e,O[e].data);return te.toArray()}convert(e,t,r){r.fixedPitch=!1,r.builtInEncoding&&function(e,t){if(e.isInternalFont)return;if(e.hasIncludedToUnicodeMap)return;if(t===e.defaultEncoding)return;if(e.toUnicode instanceof h.IdentityToUnicodeMap)return;const r=[],n=(0,o.getGlyphsUnicode)();for(const a in t){if(e.hasEncoding&&(e.baseEncodingName||void 0!==e.differences[a]))continue;const i=t[a],o=(0,s.getUnicodeForGlyph)(i,n);-1!==o&&(r[a]=String.fromCharCode(o))}r.length>0&&e.toUnicode.amend(r)}(r,r.builtInEncoding);let a=1;t instanceof u.CFFFont&&(a=t.numGlyphs-1);const l=t.getGlyphMapping(r);let d=null,f=l,g=null;r.cssFontInfo||(d=_(l,t.hasGlyphId.bind(t),a,this.toUnicode),this.toFontChar=d.toFontChar,f=d.charCodeToGlyphId,g=d.toUnicodeExtraMap);const p=t.numGlyphs;function b(e,t){let r=null;for(const n in e)t===e[n]&&(r||(r=[])).push(0|n);return r}function y(e,t){for(const r in e)if(t===e[r])return 0|r;return d.charCodeToGlyphId[d.nextAvailableFontCharCode]=t,d.nextAvailableFontCharCode++}const w=t.seacs;if(d&&i.SEAC_ANALYSIS_ENABLED&&null!=w&&w.length){const e=r.fontMatrix||n.FONT_IDENTITY_MATRIX,a=t.getCharset(),i=Object.create(null);for(let t in w){t|=0;const r=w[t],n=c.StandardEncoding[r[2]],s=c.StandardEncoding[r[3]],o=a.indexOf(n),h=a.indexOf(s);if(o<0||h<0)continue;const u={x:r[0]*e[0]+r[1]*e[2]+e[4],y:r[0]*e[1]+r[1]*e[3]+e[5]},f=b(l,t);if(f)for(const e of f){const t=d.charCodeToGlyphId,r=y(t,o),n=y(t,h);i[e]={baseFontCharCode:r,accentFontCharCode:n,accentOffset:u}}}r.seacMap=i}const v=1/(r.fontMatrix||n.FONT_IDENTITY_MATRIX)[0],x=new m.OpenTypeFileBuilder("OTTO");return x.addTable("CFF ",t.data),x.addTable("OS/2",U(r,f)),x.addTable("cmap",j(f,g,p)),x.addTable("head","\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0_<õ\\0\\0"+E(v)+"\\0\\0\\0\\0ž\\v~'\\0\\0\\0\\0ž\\v~'\\0\\0"+E(r.descent)+"ÿ"+E(r.ascent)+M(r.italicAngle?2:0)+"\\0\\0\\0\\0\\0\\0\\0"),x.addTable("hhea","\\0\\0\\0"+E(r.ascent)+E(r.descent)+"\\0\\0ÿÿ\\0\\0\\0\\0\\0\\0"+E(r.capHeight)+E(Math.tan(r.italicAngle)*r.xHeight)+"\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0"+M(p)),x.addTable("hmtx",function(){const e=t.charstrings,r=t.cff?t.cff.widths:null;let n="\\0\\0\\0\\0";for(let t=1,a=p;t1&&void 0!==arguments[1]&&arguments[1],u=this._glyphCache[e];if((null===(t=u)||void 0===t?void 0:t.isSpace)===h)return u;let d=e;null!==(r=this.cMap)&&void 0!==r&&r.contains(e)&&(d=this.cMap.lookup(e),"string"==typeof d&&(d=L(e,d))),c=this.widths[d],"number"!=typeof c&&(c=this.defaultWidth);const f=null===(a=this.vmetrics)||void 0===a?void 0:a[d];let g=this.toUnicode.get(e)||e;"number"==typeof g&&(g=String.fromCharCode(g));let p=void 0!==this.toFontChar[e];if(o=this.toFontChar[e]||e,this.missingFile){const t=this.differences[e]||this.defaultEncoding[e];".notdef"!==t&&""!==t||"Type1"!==this.type||(o=32),o=(0,s.mapSpecialUnicodeValues)(o)}this.isType3Font&&(l=o);let m=null;if(null!==(i=this.seacMap)&&void 0!==i&&i[e]){p=!0;const t=this.seacMap[e];o=t.baseFontCharCode,m={fontChar:String.fromCodePoint(t.accentFontCharCode),offset:t.accentOffset}}let b="";return"number"==typeof o&&(o<=1114111?b=String.fromCodePoint(o):(0,n.warn)("charToGlyph - invalid fontCharCode: ".concat(o))),u=new O(e,b,g,m,c,f,l,h,p),this._glyphCache[e]=u}charsToGlyphs(e){let t=this._charsCache[e];if(t)return t;if(t=[],this.cMap){const r=Object.create(null),n=e.length;let a=0;for(;at.length%2==1,a=this.toUnicode instanceof h.IdentityToUnicodeMap?e=>this.toUnicode.charCodeOf(e):e=>this.toUnicode.charCodeOf(String.fromCodePoint(e));for(let i=0,s=e.length;i55295&&(s<57344||s>65533)&&i++,this.toUnicode){const e=a(s);if(-1!==e){n()&&(t.push(r.join("")),r.length=0);for(let t=(this.cMap?this.cMap.getCharCodeLength(e):1)-1;t>=0;t--)r.push(String.fromCharCode(e>>8*t&255));continue}}n()||(t.push(r.join("")),r.length=0),r.push(String.fromCodePoint(s))}return t.push(r.join("")),t}},t.ErrorFont=class{constructor(e){this.error=e,this.loadedName="g_font_error",this.missingFile=!0}charsToGlyphs(){return[]}encodeString(e){return[e]}exportData(){return{error:this.error}}}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.CFFTopDict=t.CFFStrings=t.CFFStandardStrings=t.CFFPrivateDict=t.CFFParser=t.CFFIndex=t.CFFHeader=t.CFFFDSelect=t.CFFCompiler=t.CFFCharset=t.CFF=void 0,r(139),r(84),r(93),r(94),r(97),r(99),r(101),r(105),r(108),r(115);var n=r(144),a=r(186),i=r(187);const s=[".notdef","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","endash","dagger","daggerdbl","periodcentered","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","questiondown","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","ring","cedilla","hungarumlaut","ogonek","caron","emdash","AE","ordfeminine","Lslash","Oslash","OE","ordmasculine","ae","dotlessi","lslash","oslash","oe","germandbls","onesuperior","logicalnot","mu","trademark","Eth","onehalf","plusminus","Thorn","onequarter","divide","brokenbar","degree","thorn","threequarters","twosuperior","registered","minus","eth","multiply","threesuperior","copyright","Aacute","Acircumflex","Adieresis","Agrave","Aring","Atilde","Ccedilla","Eacute","Ecircumflex","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Ntilde","Oacute","Ocircumflex","Odieresis","Ograve","Otilde","Scaron","Uacute","Ucircumflex","Udieresis","Ugrave","Yacute","Ydieresis","Zcaron","aacute","acircumflex","adieresis","agrave","aring","atilde","ccedilla","eacute","ecircumflex","edieresis","egrave","iacute","icircumflex","idieresis","igrave","ntilde","oacute","ocircumflex","odieresis","ograve","otilde","scaron","uacute","ucircumflex","udieresis","ugrave","yacute","ydieresis","zcaron","exclamsmall","Hungarumlautsmall","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","commasuperior","threequartersemdash","periodsuperior","questionsmall","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","ffi","ffl","parenleftinferior","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","exclamdownsmall","centoldstyle","Lslashsmall","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","Dotaccentsmall","Macronsmall","figuredash","hypheninferior","Ogoneksmall","Ringsmall","Cedillasmall","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall","001.000","001.001","001.002","001.003","Black","Bold","Book","Light","Medium","Regular","Roman","Semibold"];t.CFFStandardStrings=s;const o=[null,{id:"hstem",min:2,stackClearing:!0,stem:!0},null,{id:"vstem",min:2,stackClearing:!0,stem:!0},{id:"vmoveto",min:1,stackClearing:!0},{id:"rlineto",min:2,resetStack:!0},{id:"hlineto",min:1,resetStack:!0},{id:"vlineto",min:1,resetStack:!0},{id:"rrcurveto",min:6,resetStack:!0},null,{id:"callsubr",min:1,undefStack:!0},{id:"return",min:0,undefStack:!0},null,null,{id:"endchar",min:0,stackClearing:!0},null,null,null,{id:"hstemhm",min:2,stackClearing:!0,stem:!0},{id:"hintmask",min:0,stackClearing:!0},{id:"cntrmask",min:0,stackClearing:!0},{id:"rmoveto",min:2,stackClearing:!0},{id:"hmoveto",min:1,stackClearing:!0},{id:"vstemhm",min:2,stackClearing:!0,stem:!0},{id:"rcurveline",min:8,resetStack:!0},{id:"rlinecurve",min:8,resetStack:!0},{id:"vvcurveto",min:4,resetStack:!0},{id:"hhcurveto",min:4,resetStack:!0},null,{id:"callgsubr",min:1,undefStack:!0},{id:"vhcurveto",min:4,resetStack:!0},{id:"hvcurveto",min:4,resetStack:!0}],c=[null,null,null,{id:"and",min:2,stackDelta:-1},{id:"or",min:2,stackDelta:-1},{id:"not",min:1,stackDelta:0},null,null,null,{id:"abs",min:1,stackDelta:0},{id:"add",min:2,stackDelta:-1,stackFn(e,t){e[t-2]=e[t-2]+e[t-1]}},{id:"sub",min:2,stackDelta:-1,stackFn(e,t){e[t-2]=e[t-2]-e[t-1]}},{id:"div",min:2,stackDelta:-1,stackFn(e,t){e[t-2]=e[t-2]/e[t-1]}},null,{id:"neg",min:1,stackDelta:0,stackFn(e,t){e[t-1]=-e[t-1]}},{id:"eq",min:2,stackDelta:-1},null,null,{id:"drop",min:1,stackDelta:-1},null,{id:"put",min:2,stackDelta:-2},{id:"get",min:1,stackDelta:0},{id:"ifelse",min:4,stackDelta:-3},{id:"random",min:0,stackDelta:1},{id:"mul",min:2,stackDelta:-1,stackFn(e,t){e[t-2]=e[t-2]*e[t-1]}},null,{id:"sqrt",min:1,stackDelta:0},{id:"dup",min:1,stackDelta:1},{id:"exch",min:2,stackDelta:0},{id:"index",min:2,stackDelta:0},{id:"roll",min:3,stackDelta:-2},null,null,null,{id:"hflex",min:7,resetStack:!0},{id:"flex",min:13,resetStack:!0},{id:"hflex1",min:9,resetStack:!0},{id:"flex1",min:11,resetStack:!0}];t.CFFParser=class{constructor(e,t,r){this.bytes=e.getBytes(),this.properties=t,this.seacAnalysisEnabled=!!r}parse(){const e=this.properties,t=new l;this.cff=t;const r=this.parseHeader(),n=this.parseIndex(r.endPos),a=this.parseIndex(n.endPos),i=this.parseIndex(a.endPos),s=this.parseIndex(i.endPos),o=this.parseDict(a.obj.get(0)),c=this.createDict(p,o,t.strings);t.header=r.obj,t.names=this.parseNameIndex(n.obj),t.strings=this.parseStringIndex(i.obj),t.topDict=c,t.globalSubrIndex=s.obj,this.parsePrivateDict(t.topDict),t.isCIDFont=c.hasName("ROS");const h=c.getByName("CharStrings"),u=this.parseIndex(h).obj,d=c.getByName("FontMatrix");d&&(e.fontMatrix=d);const f=c.getByName("FontBBox");let g,m;if(f&&(e.ascent=Math.max(f[3],f[1]),e.descent=Math.min(f[1],f[3]),e.ascentScaled=!0),t.isCIDFont){const e=this.parseIndex(c.getByName("FDArray")).obj;for(let r=0,n=e.count;r=t)throw new n.FormatError("Invalid CFF header");0!==r&&((0,n.info)("cff data is shifted"),e=e.subarray(r),this.bytes=e);const a=e[0],i=e[1],s=e[2],o=e[3];return{obj:new h(a,i,s,o),endPos:s}}parseDict(e){let t=0;function r(){let r=e[t++];return 30===r?function(){let r="";const n=["0","1","2","3","4","5","6","7","8","9",".","E","E-",null,"-"],a=e.length;for(;t>4,s=15&a;if(15===i)break;if(r+=n[i],15===s)break;r+=n[s]}return parseFloat(r)}():28===r?(r=e[t++],r=(r<<24|e[t++]<<16)>>16,r):29===r?(r=e[t++],r=r<<8|e[t++],r=r<<8|e[t++],r=r<<8|e[t++],r):r>=32&&r<=246?r-139:r>=247&&r<=250?256*(r-247)+e[t++]+108:r>=251&&r<=254?-256*(r-251)-e[t++]-108:((0,n.warn)('CFFParser_parseDict: "'+r+'" is a reserved command.'),NaN)}let a=[];const i=[];t=0;const s=e.length;for(;t10)return!1;let i=e.stackSize;const s=e.stack;let l=t.length;for(let h=0;h>16,h+=2,i++;else if(14===u){if(i>=4&&(i-=4,this.seacAnalysisEnabled))return e.seac=s.slice(i,i+4),!1;d=o[u]}else if(u>=32&&u<=246)s[i]=u-139,i++;else if(u>=247&&u<=254)s[i]=u<251?(u-247<<8)+t[h]+108:-(u-251<<8)-t[h]-108,h++,i++;else if(255===u)s[i]=(t[h]<<24|t[h+1]<<16|t[h+2]<<8|t[h+3])/65536,h+=4,i++;else if(19===u||20===u){if(e.hints+=i>>1,0===e.hints){t.copyWithin(h-1,h,-1),h-=1,l-=1;continue}h+=e.hints+7>>3,i%=2,d=o[u]}else{if(10===u||29===u){const t=10===u?r:a;if(!t)return d=o[u],(0,n.warn)("Missing subrsIndex for "+d.id),!1;let c=32768;t.count<1240?c=107:t.count<33900&&(c=1131);const l=s[--i]+c;if(l<0||l>=t.count||isNaN(l))return d=o[u],(0,n.warn)("Out of bounds subrIndex for "+d.id),!1;if(e.stackSize=i,e.callDepth++,!this.parseCharString(e,t.get(l),r,a))return!1;e.callDepth--,i=e.stackSize;continue}if(11===u)return e.stackSize=i,!0;if(0===u&&h===t.length)t[h-1]=14,d=o[14];else{if(9===u){t.copyWithin(h-1,h,-1),h-=1,l-=1;continue}d=o[u]}}if(d){if(d.stem&&(e.hints+=i>>1,3===u||23===u?e.hasVStems=!0:!e.hasVStems||1!==u&&18!==u||((0,n.warn)("CFF stem hints are in wrong order"),t[h-1]=1===u?3:23)),"min"in d&&!e.undefStack&&i=2&&d.stem?i%=2:i>1&&(0,n.warn)("Found too many parameters for stack-clearing command"),i>0&&(e.width=s[i-1])),"stackDelta"in d?("stackFn"in d&&d.stackFn(s,i),i+=d.stackDelta):d.stackClearing?i=0:d.resetStack?(i=0,e.undefStack=!1):d.undefStack&&(i=0,e.undefStack=!0,e.firstStackClearing=!1)}}return l=s.length&&((0,n.warn)("Invalid fd index for glyph index."),d=!1),d&&(g=s[t].privateDict,f=g.subrsIndex)}else r&&(f=r);if(d&&(d=this.parseCharString(u,h,f,a)),null!==u.width){const t=g.getByName("nominalWidthX");l[e]=t+u.width}else{const t=g.getByName("defaultWidthX");l[e]=t}null!==u.seac&&(c[e]=u.seac),d||t.set(e,new Uint8Array([14]))}return{charStrings:t,seacs:c,widths:l}}emptyPrivateDictionary(e){const t=this.createDict(b,[],e.strings);e.setByKey(18,[0,0]),e.privateDict=t}parsePrivateDict(e){if(!e.hasName("Private"))return void this.emptyPrivateDictionary(e);const t=e.getByName("Private");if(!Array.isArray(t)||2!==t.length)return void e.removeByName("Private");const r=t[0],n=t[1];if(0===r||n>=this.bytes.length)return void this.emptyPrivateDictionary(e);const a=n+r,i=this.bytes.subarray(n,a),s=this.parseDict(i),o=this.createDict(b,s,e.strings);if(e.privateDict=o,0===o.getByName("ExpansionFactor")&&o.setByName("ExpansionFactor",.06),!o.getByName("Subrs"))return;const c=o.getByName("Subrs"),l=n+c;if(0===c||l>=this.bytes.length)return void this.emptyPrivateDictionary(e);const h=this.parseIndex(l);o.subrsIndex=h.obj}parseCharsets(e,t,r,i){if(0===e)return new w(!0,y.ISO_ADOBE,a.ISOAdobeCharset);if(1===e)return new w(!0,y.EXPERT,a.ExpertCharset);if(2===e)return new w(!0,y.EXPERT_SUBSET,a.ExpertSubsetCharset);const s=this.bytes,o=e,c=s[e++],l=[i?0:".notdef"];let h,u,d;switch(t-=1,c){case 0:for(d=0;d=65535)return void(0,n.warn)("Not enough space in charstrings to duplicate first glyph.");const e=this.charStrings.get(0);this.charStrings.add(e),this.isCIDFont&&this.fdSelect.fdSelect.push(this.fdSelect.fdSelect[0])}hasGlyphId(e){return!(e<0||e>=this.charStrings.count)&&this.charStrings.get(e).length>0}}t.CFF=l;class h{constructor(e,t,r,n){this.major=e,this.minor=t,this.hdrSize=r,this.offSize=n}}t.CFFHeader=h;class u{constructor(){this.strings=[]}get(e){return e>=0&&e<=390?s[e]:e-391<=this.strings.length?this.strings[e-391]:s[0]}getSID(e){let t=s.indexOf(e);return-1!==t?t:(t=this.strings.indexOf(e),-1!==t?t+391:-1)}add(e){this.strings.push(e)}get count(){return this.strings.length}}t.CFFStrings=u;class d{constructor(){this.objects=[],this.length=0}add(e){this.length+=e.length,this.objects.push(e)}set(e,t){this.length+=t.length-this.objects[e].length,this.objects[e]=t}get(e){return this.objects[e]}get count(){return this.objects.length}}t.CFFIndex=d;class f{constructor(e,t){this.keyToNameMap=e.keyToNameMap,this.nameToKeyMap=e.nameToKeyMap,this.defaults=e.defaults,this.types=e.types,this.opcodes=e.opcodes,this.order=e.order,this.strings=t,this.values=Object.create(null)}setByKey(e,t){if(!(e in this.keyToNameMap))return!1;if(0===t.length)return!0;for(const r of t)if(isNaN(r))return(0,n.warn)('Invalid CFFDict value: "'.concat(t,'" for key "').concat(e,'".')),!0;const r=this.types[e];return"num"!==r&&"sid"!==r&&"offset"!==r||(t=t[0]),this.values[e]=t,!0}setByName(e,t){if(!(e in this.nameToKeyMap))throw new n.FormatError('Invalid dictionary name "'.concat(e,'"'));this.values[this.nameToKeyMap[e]]=t}hasName(e){return this.nameToKeyMap[e]in this.values}getByName(e){if(!(e in this.nameToKeyMap))throw new n.FormatError("Invalid dictionary name ".concat(e,'"'));const t=this.nameToKeyMap[e];return t in this.values?this.values[t]:this.defaults[t]}removeByName(e){delete this.values[this.nameToKeyMap[e]]}static createTables(e){const t={keyToNameMap:{},nameToKeyMap:{},defaults:{},types:{},opcodes:{},order:[]};for(const r of e){const e=Array.isArray(r[0])?(r[0][0]<<8)+r[0][1]:r[0];t.keyToNameMap[e]=r[1],t.nameToKeyMap[r[1]]=e,t.types[e]=r[2],t.defaults[e]=r[3],t.opcodes[e]=Array.isArray(r[0])?r[0]:[r[0]],t.order.push(e)}return t}}const g=[[[12,30],"ROS",["sid","sid","num"],null],[[12,20],"SyntheticBase","num",null],[0,"version","sid",null],[1,"Notice","sid",null],[[12,0],"Copyright","sid",null],[2,"FullName","sid",null],[3,"FamilyName","sid",null],[4,"Weight","sid",null],[[12,1],"isFixedPitch","num",0],[[12,2],"ItalicAngle","num",0],[[12,3],"UnderlinePosition","num",-100],[[12,4],"UnderlineThickness","num",50],[[12,5],"PaintType","num",0],[[12,6],"CharstringType","num",2],[[12,7],"FontMatrix",["num","num","num","num","num","num"],[.001,0,0,.001,0,0]],[13,"UniqueID","num",null],[5,"FontBBox",["num","num","num","num"],[0,0,0,0]],[[12,8],"StrokeWidth","num",0],[14,"XUID","array",null],[15,"charset","offset",0],[16,"Encoding","offset",0],[17,"CharStrings","offset",0],[18,"Private",["offset","offset"],null],[[12,21],"PostScript","sid",null],[[12,22],"BaseFontName","sid",null],[[12,23],"BaseFontBlend","delta",null],[[12,31],"CIDFontVersion","num",0],[[12,32],"CIDFontRevision","num",0],[[12,33],"CIDFontType","num",0],[[12,34],"CIDCount","num",8720],[[12,35],"UIDBase","num",null],[[12,37],"FDSelect","offset",null],[[12,36],"FDArray","offset",null],[[12,38],"FontName","sid",null]];class p extends f{static get tables(){return(0,n.shadow)(this,"tables",this.createTables(g))}constructor(e){super(p.tables,e),this.privateDict=null}}t.CFFTopDict=p;const m=[[6,"BlueValues","delta",null],[7,"OtherBlues","delta",null],[8,"FamilyBlues","delta",null],[9,"FamilyOtherBlues","delta",null],[[12,9],"BlueScale","num",.039625],[[12,10],"BlueShift","num",7],[[12,11],"BlueFuzz","num",1],[10,"StdHW","num",null],[11,"StdVW","num",null],[[12,12],"StemSnapH","delta",null],[[12,13],"StemSnapV","delta",null],[[12,14],"ForceBold","num",0],[[12,17],"LanguageGroup","num",0],[[12,18],"ExpansionFactor","num",.06],[[12,19],"initialRandomSeed","num",0],[20,"defaultWidthX","num",0],[21,"nominalWidthX","num",0],[19,"Subrs","offset",null]];class b extends f{static get tables(){return(0,n.shadow)(this,"tables",this.createTables(m))}constructor(e){super(b.tables,e),this.subrsIndex=null}}t.CFFPrivateDict=b;const y={ISO_ADOBE:0,EXPERT:1,EXPERT_SUBSET:2};class w{constructor(e,t,r,n){this.predefined=e,this.format=t,this.charset=r,this.raw=n}}t.CFFCharset=w;class v{constructor(e,t,r,n){this.predefined=e,this.format=t,this.encoding=r,this.raw=n}}class x{constructor(e,t){this.format=e,this.fdSelect=t}getFDIndex(e){return e<0||e>=this.fdSelect.length?-1:this.fdSelect[e]}}t.CFFFDSelect=x;class S{constructor(){this.offsets=Object.create(null)}isTracking(e){return e in this.offsets}track(e,t){if(e in this.offsets)throw new n.FormatError("Already tracking location of ".concat(e));this.offsets[e]=t}offset(e){for(const t in this.offsets)this.offsets[t]+=e}setEntryLocation(e,t,r){if(!(e in this.offsets))throw new n.FormatError("Not tracking location of ".concat(e));const a=r.data,i=this.offsets[e];for(let e=0,r=t.length;e>24&255,a[o]=h>>16&255,a[c]=h>>8&255,a[l]=255&h}}}class A{constructor(e){this.cff=e}compile(){const e=this.cff,t={data:[],length:0,add(e){try{this.data.push(...e)}catch(t){this.data=this.data.concat(e)}this.length=this.data.length}},r=this.compileHeader(e.header);t.add(r);const a=this.compileNameIndex(e.names);if(t.add(a),e.isCIDFont&&e.topDict.hasName("FontMatrix")){const t=e.topDict.getByName("FontMatrix");e.topDict.removeByName("FontMatrix");for(const r of e.fdArray){let e=t.slice(0);r.hasName("FontMatrix")&&(e=n.Util.transform(e,r.getByName("FontMatrix"))),r.setByName("FontMatrix",e)}}const i=e.topDict.getByName("XUID");(null==i?void 0:i.length)>16&&e.topDict.removeByName("XUID"),e.topDict.setByName("charset",0);let s=this.compileTopDicts([e.topDict],t.length,e.isCIDFont);t.add(s.output);const o=s.trackers[0],c=this.compileStringIndex(e.strings.strings);t.add(c);const l=this.compileIndex(e.globalSubrIndex);if(t.add(l),e.encoding&&e.topDict.hasName("Encoding"))if(e.encoding.predefined)o.setEntryLocation("Encoding",[e.encoding.format],t);else{const r=this.compileEncoding(e.encoding);o.setEntryLocation("Encoding",[t.length],t),t.add(r)}const h=this.compileCharset(e.charset,e.charStrings.count,e.strings,e.isCIDFont);o.setEntryLocation("charset",[t.length],t),t.add(h);const u=this.compileCharStrings(e.charStrings);if(o.setEntryLocation("CharStrings",[t.length],t),t.add(u),e.isCIDFont){o.setEntryLocation("FDSelect",[t.length],t);const r=this.compileFDSelect(e.fdSelect);t.add(r),s=this.compileTopDicts(e.fdArray,t.length,!0),o.setEntryLocation("FDArray",[t.length],t),t.add(s.output);const n=s.trackers;this.compilePrivateDicts(e.fdArray,n,t)}return this.compilePrivateDicts([e.topDict],[o],t),t.add([0]),t.data}encodeNumber(e){return Number.isInteger(e)?this.encodeInteger(e):this.encodeFloat(e)}static get EncodeFloatRegExp(){return(0,n.shadow)(this,"EncodeFloatRegExp",/\\.(\\d*?)(?:9{5,20}|0{5,20})\\d{0,2}(?:e(.+)|$)/)}encodeFloat(e){let t=e.toString();const r=A.EncodeFloatRegExp.exec(t);if(r){const n=parseFloat("1e"+((r[2]?+r[2]:0)+r[1].length));t=(Math.round(e*n)/n).toString()}let n,a,i="";for(n=0,a=t.length;n=-107&&e<=107?[e+139]:e>=108&&e<=1131?[247+((e-=108)>>8),255&e]:e>=-1131&&e<=-108?[251+((e=-e-108)>>8),255&e]:e>=-32768&&e<=32767?[28,e>>8&255,255&e]:[29,e>>24&255,e>>16&255,e>>8&255,255&e],t}compileHeader(e){return[e.major,e.minor,4,e.offSize]}compileNameIndex(e){const t=new d;for(const r of e){const e=Math.min(r.length,127);let a=new Array(e);for(let t=0;t"~"||"["===e||"]"===e||"("===e||")"===e||"{"===e||"}"===e||"<"===e||">"===e||"/"===e||"%"===e)&&(e="_"),a[t]=e}a=a.join(""),""===a&&(a="Bad_Font_Name"),t.add((0,n.stringToBytes)(a))}return this.compileIndex(t)}compileTopDicts(e,t,r){const n=[];let a=new d;for(const i of e){r&&(i.removeByName("CIDFontVersion"),i.removeByName("CIDFontRevision"),i.removeByName("CIDFontType"),i.removeByName("CIDCount"),i.removeByName("UIDBase"));const e=new S,s=this.compileDict(i,e);n.push(e),a.add(s),e.offset(t)}return a=this.compileIndex(a,n),{trackers:n,output:a}}compilePrivateDicts(e,t,r){for(let a=0,i=e.length;a>8&255,255&s]);else{i=new Uint8Array(1+2*s),i[0]=0;let t=0;const a=e.charset.length;let o=!1;for(let s=1;s>8&255,i[s+1]=255&c}}return this.compileTypedArray(i)}compileEncoding(e){return this.compileTypedArray(e.raw)}compileFDSelect(e){const t=e.format;let r,n;switch(t){case 0:for(r=new Uint8Array(1+e.fdSelect.length),r[0]=t,n=0;n>8&255,255&a,i];for(n=1;n>8&255,255&n,t),i=t)}const o=(s.length-3)/3;s[1]=o>>8&255,s[2]=255&o,s.push(n>>8&255,255&n),r=new Uint8Array(s)}return this.compileTypedArray(r)}compileTypedArray(e){return Array.from(e)}compileIndex(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];const r=e.objects,n=r.length;if(0===n)return[0,0];const a=[n>>8&255,255&n];let i,s,o=1;for(i=0;i>8&255,255&c):3===s?a.push(c>>16&255,c>>8&255,255&c):a.push(c>>>24&255,c>>16&255,c>>8&255,255&c),r[i]&&(c+=r[i].length);for(i=0;i{Object.defineProperty(t,"__esModule",{value:!0}),t.ISOAdobeCharset=t.ExpertSubsetCharset=t.ExpertCharset=void 0,t.ISOAdobeCharset=[".notdef","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","endash","dagger","daggerdbl","periodcentered","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","questiondown","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","ring","cedilla","hungarumlaut","ogonek","caron","emdash","AE","ordfeminine","Lslash","Oslash","OE","ordmasculine","ae","dotlessi","lslash","oslash","oe","germandbls","onesuperior","logicalnot","mu","trademark","Eth","onehalf","plusminus","Thorn","onequarter","divide","brokenbar","degree","thorn","threequarters","twosuperior","registered","minus","eth","multiply","threesuperior","copyright","Aacute","Acircumflex","Adieresis","Agrave","Aring","Atilde","Ccedilla","Eacute","Ecircumflex","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Ntilde","Oacute","Ocircumflex","Odieresis","Ograve","Otilde","Scaron","Uacute","Ucircumflex","Udieresis","Ugrave","Yacute","Ydieresis","Zcaron","aacute","acircumflex","adieresis","agrave","aring","atilde","ccedilla","eacute","ecircumflex","edieresis","egrave","iacute","icircumflex","idieresis","igrave","ntilde","oacute","ocircumflex","odieresis","ograve","otilde","scaron","uacute","ucircumflex","udieresis","ugrave","yacute","ydieresis","zcaron"],t.ExpertCharset=[".notdef","space","exclamsmall","Hungarumlautsmall","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","questionsmall","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","fi","fl","ffi","ffl","parenleftinferior","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","exclamdownsmall","centoldstyle","Lslashsmall","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","Dotaccentsmall","Macronsmall","figuredash","hypheninferior","Ogoneksmall","Ringsmall","Cedillasmall","onequarter","onehalf","threequarters","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall"],t.ExpertSubsetCharset=[".notdef","space","dollaroldstyle","dollarsuperior","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","fi","fl","ffi","ffl","parenleftinferior","parenrightinferior","hyphensuperior","colonmonetary","onefitted","rupiah","centoldstyle","figuredash","hypheninferior","onequarter","onehalf","threequarters","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior"]},(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ZapfDingbatsEncoding=t.WinAnsiEncoding=t.SymbolSetEncoding=t.StandardEncoding=t.MacRomanEncoding=t.ExpertEncoding=void 0,t.getEncoding=function(e){switch(e){case"WinAnsiEncoding":return s;case"StandardEncoding":return i;case"MacRomanEncoding":return a;case"SymbolSetEncoding":return o;case"ZapfDingbatsEncoding":return c;case"ExpertEncoding":return r;case"MacExpertEncoding":return n;default:return null}};const r=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclamsmall","Hungarumlautsmall","","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","questionsmall","","asuperior","bsuperior","centsuperior","dsuperior","esuperior","","","","isuperior","","","lsuperior","msuperior","nsuperior","osuperior","","","rsuperior","ssuperior","tsuperior","","ff","fi","fl","ffi","ffl","parenleftinferior","","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","exclamdownsmall","centoldstyle","Lslashsmall","","","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","","Dotaccentsmall","","","Macronsmall","","","figuredash","hypheninferior","","","Ogoneksmall","Ringsmall","Cedillasmall","","","","onequarter","onehalf","threequarters","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","","","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall"];t.ExpertEncoding=r;const n=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclamsmall","Hungarumlautsmall","centoldstyle","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","","threequartersemdash","","questionsmall","","","","","Ethsmall","","","onequarter","onehalf","threequarters","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","","","","","","","ff","fi","fl","ffi","ffl","parenleftinferior","","parenrightinferior","Circumflexsmall","hypheninferior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","","","asuperior","centsuperior","","","","","Aacutesmall","Agravesmall","Acircumflexsmall","Adieresissmall","Atildesmall","Aringsmall","Ccedillasmall","Eacutesmall","Egravesmall","Ecircumflexsmall","Edieresissmall","Iacutesmall","Igravesmall","Icircumflexsmall","Idieresissmall","Ntildesmall","Oacutesmall","Ogravesmall","Ocircumflexsmall","Odieresissmall","Otildesmall","Uacutesmall","Ugravesmall","Ucircumflexsmall","Udieresissmall","","eightsuperior","fourinferior","threeinferior","sixinferior","eightinferior","seveninferior","Scaronsmall","","centinferior","twoinferior","","Dieresissmall","","Caronsmall","osuperior","fiveinferior","","commainferior","periodinferior","Yacutesmall","","dollarinferior","","","Thornsmall","","nineinferior","zeroinferior","Zcaronsmall","AEsmall","Oslashsmall","questiondownsmall","oneinferior","Lslashsmall","","","","","","","Cedillasmall","","","","","","OEsmall","figuredash","hyphensuperior","","","","","exclamdownsmall","","Ydieresissmall","","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","ninesuperior","zerosuperior","","esuperior","rsuperior","tsuperior","","","isuperior","ssuperior","dsuperior","","","","","","lsuperior","Ogoneksmall","Brevesmall","Macronsmall","bsuperior","nsuperior","msuperior","commasuperior","periodsuperior","Dotaccentsmall","Ringsmall","","","",""],a=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","","Adieresis","Aring","Ccedilla","Eacute","Ntilde","Odieresis","Udieresis","aacute","agrave","acircumflex","adieresis","atilde","aring","ccedilla","eacute","egrave","ecircumflex","edieresis","iacute","igrave","icircumflex","idieresis","ntilde","oacute","ograve","ocircumflex","odieresis","otilde","uacute","ugrave","ucircumflex","udieresis","dagger","degree","cent","sterling","section","bullet","paragraph","germandbls","registered","copyright","trademark","acute","dieresis","notequal","AE","Oslash","infinity","plusminus","lessequal","greaterequal","yen","mu","partialdiff","summation","product","pi","integral","ordfeminine","ordmasculine","Omega","ae","oslash","questiondown","exclamdown","logicalnot","radical","florin","approxequal","Delta","guillemotleft","guillemotright","ellipsis","space","Agrave","Atilde","Otilde","OE","oe","endash","emdash","quotedblleft","quotedblright","quoteleft","quoteright","divide","lozenge","ydieresis","Ydieresis","fraction","currency","guilsinglleft","guilsinglright","fi","fl","daggerdbl","periodcentered","quotesinglbase","quotedblbase","perthousand","Acircumflex","Ecircumflex","Aacute","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Oacute","Ocircumflex","apple","Ograve","Uacute","Ucircumflex","Ugrave","dotlessi","circumflex","tilde","macron","breve","dotaccent","ring","cedilla","hungarumlaut","ogonek","caron"];t.MacRomanEncoding=a;const i=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","","endash","dagger","daggerdbl","periodcentered","","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","","questiondown","","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","","ring","cedilla","","hungarumlaut","ogonek","caron","emdash","","","","","","","","","","","","","","","","","AE","","ordfeminine","","","","","Lslash","Oslash","OE","ordmasculine","","","","","","ae","","","","dotlessi","","","lslash","oslash","oe","germandbls","","","",""];t.StandardEncoding=i;const s=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","bullet","Euro","bullet","quotesinglbase","florin","quotedblbase","ellipsis","dagger","daggerdbl","circumflex","perthousand","Scaron","guilsinglleft","OE","bullet","Zcaron","bullet","bullet","quoteleft","quoteright","quotedblleft","quotedblright","bullet","endash","emdash","tilde","trademark","scaron","guilsinglright","oe","bullet","zcaron","Ydieresis","space","exclamdown","cent","sterling","currency","yen","brokenbar","section","dieresis","copyright","ordfeminine","guillemotleft","logicalnot","hyphen","registered","macron","degree","plusminus","twosuperior","threesuperior","acute","mu","paragraph","periodcentered","cedilla","onesuperior","ordmasculine","guillemotright","onequarter","onehalf","threequarters","questiondown","Agrave","Aacute","Acircumflex","Atilde","Adieresis","Aring","AE","Ccedilla","Egrave","Eacute","Ecircumflex","Edieresis","Igrave","Iacute","Icircumflex","Idieresis","Eth","Ntilde","Ograve","Oacute","Ocircumflex","Otilde","Odieresis","multiply","Oslash","Ugrave","Uacute","Ucircumflex","Udieresis","Yacute","Thorn","germandbls","agrave","aacute","acircumflex","atilde","adieresis","aring","ae","ccedilla","egrave","eacute","ecircumflex","edieresis","igrave","iacute","icircumflex","idieresis","eth","ntilde","ograve","oacute","ocircumflex","otilde","odieresis","divide","oslash","ugrave","uacute","ucircumflex","udieresis","yacute","thorn","ydieresis"];t.WinAnsiEncoding=s;const o=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","universal","numbersign","existential","percent","ampersand","suchthat","parenleft","parenright","asteriskmath","plus","comma","minus","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","congruent","Alpha","Beta","Chi","Delta","Epsilon","Phi","Gamma","Eta","Iota","theta1","Kappa","Lambda","Mu","Nu","Omicron","Pi","Theta","Rho","Sigma","Tau","Upsilon","sigma1","Omega","Xi","Psi","Zeta","bracketleft","therefore","bracketright","perpendicular","underscore","radicalex","alpha","beta","chi","delta","epsilon","phi","gamma","eta","iota","phi1","kappa","lambda","mu","nu","omicron","pi","theta","rho","sigma","tau","upsilon","omega1","omega","xi","psi","zeta","braceleft","bar","braceright","similar","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Euro","Upsilon1","minute","lessequal","fraction","infinity","florin","club","diamond","heart","spade","arrowboth","arrowleft","arrowup","arrowright","arrowdown","degree","plusminus","second","greaterequal","multiply","proportional","partialdiff","bullet","divide","notequal","equivalence","approxequal","ellipsis","arrowvertex","arrowhorizex","carriagereturn","aleph","Ifraktur","Rfraktur","weierstrass","circlemultiply","circleplus","emptyset","intersection","union","propersuperset","reflexsuperset","notsubset","propersubset","reflexsubset","element","notelement","angle","gradient","registerserif","copyrightserif","trademarkserif","product","radical","dotmath","logicalnot","logicaland","logicalor","arrowdblboth","arrowdblleft","arrowdblup","arrowdblright","arrowdbldown","lozenge","angleleft","registersans","copyrightsans","trademarksans","summation","parenlefttp","parenleftex","parenleftbt","bracketlefttp","bracketleftex","bracketleftbt","bracelefttp","braceleftmid","braceleftbt","braceex","","angleright","integral","integraltp","integralex","integralbt","parenrighttp","parenrightex","parenrightbt","bracketrighttp","bracketrightex","bracketrightbt","bracerighttp","bracerightmid","bracerightbt",""];t.SymbolSetEncoding=o;const c=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","a1","a2","a202","a3","a4","a5","a119","a118","a117","a11","a12","a13","a14","a15","a16","a105","a17","a18","a19","a20","a21","a22","a23","a24","a25","a26","a27","a28","a6","a7","a8","a9","a10","a29","a30","a31","a32","a33","a34","a35","a36","a37","a38","a39","a40","a41","a42","a43","a44","a45","a46","a47","a48","a49","a50","a51","a52","a53","a54","a55","a56","a57","a58","a59","a60","a61","a62","a63","a64","a65","a66","a67","a68","a69","a70","a71","a72","a73","a74","a203","a75","a204","a76","a77","a78","a79","a81","a82","a83","a84","a97","a98","a99","a100","","a89","a90","a93","a94","a91","a92","a205","a85","a206","a86","a87","a88","a95","a96","","","","","","","","","","","","","","","","","","","","a101","a102","a103","a104","a106","a107","a108","a112","a111","a110","a109","a120","a121","a122","a123","a124","a125","a126","a127","a128","a129","a130","a131","a132","a133","a134","a135","a136","a137","a138","a139","a140","a141","a142","a143","a144","a145","a146","a147","a148","a149","a150","a151","a152","a153","a154","a155","a156","a157","a158","a159","a160","a161","a163","a164","a196","a165","a192","a166","a167","a168","a169","a170","a171","a172","a173","a162","a174","a175","a176","a177","a178","a179","a193","a180","a199","a181","a200","a182","","a201","a183","a184","a197","a185","a194","a198","a186","a195","a187","a188","a189","a190","a191",""];t.ZapfDingbatsEncoding=c},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.SEAC_ANALYSIS_ENABLED=t.MacStandardGlyphOrdering=t.FontFlags=void 0,t.normalizeFontName=function(e){return e.replaceAll(/[,_]/g,"-").replaceAll(/\\s/g,"")},t.recoverGlyphName=c,t.type1FontGlyphMapping=function(e,t,r){const i=Object.create(null);let s,l,h;const u=!!(e.flags&o.Symbolic);if(e.isInternalFont)for(h=t,l=0;l=0?s:0;else if(e.baseEncodingName)for(h=(0,n.getEncoding)(e.baseEncodingName),l=0;l=0?s:0;else if(u)for(l in t)i[l]=t[l];else for(h=n.StandardEncoding,l=0;l=0?s:0;const d=e.differences;let f;if(d)for(l in d){const e=d[l];if(s=r.indexOf(e),-1===s){f||(f=(0,a.getGlyphsUnicode)());const t=c(e,f);t!==e&&(s=r.indexOf(t))}i[l]=s>=0?s:0}return i},r(157);var n=r(187),a=r(189),i=r(190),s=r(144);t.SEAC_ANALYSIS_ENABLED=!0;const o={FixedPitch:1,Serif:2,Symbolic:4,Script:8,Nonsymbolic:32,Italic:64,AllCap:65536,SmallCap:131072,ForceBold:262144};function c(e,t){if(void 0!==t[e])return e;const r=(0,i.getUnicodeForGlyph)(e,t);if(-1!==r)for(const e in t)if(t[e]===r)return e;return(0,s.info)("Unable to recover a standard glyph name for: "+e),e}t.FontFlags=o,t.MacStandardGlyphOrdering=[".notdef",".null","nonmarkingreturn","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","Adieresis","Aring","Ccedilla","Eacute","Ntilde","Odieresis","Udieresis","aacute","agrave","acircumflex","adieresis","atilde","aring","ccedilla","eacute","egrave","ecircumflex","edieresis","iacute","igrave","icircumflex","idieresis","ntilde","oacute","ograve","ocircumflex","odieresis","otilde","uacute","ugrave","ucircumflex","udieresis","dagger","degree","cent","sterling","section","bullet","paragraph","germandbls","registered","copyright","trademark","acute","dieresis","notequal","AE","Oslash","infinity","plusminus","lessequal","greaterequal","yen","mu","partialdiff","summation","product","pi","integral","ordfeminine","ordmasculine","Omega","ae","oslash","questiondown","exclamdown","logicalnot","radical","florin","approxequal","Delta","guillemotleft","guillemotright","ellipsis","nonbreakingspace","Agrave","Atilde","Otilde","OE","oe","endash","emdash","quotedblleft","quotedblright","quoteleft","quoteright","divide","lozenge","ydieresis","Ydieresis","fraction","currency","guilsinglleft","guilsinglright","fi","fl","daggerdbl","periodcentered","quotesinglbase","quotedblbase","perthousand","Acircumflex","Ecircumflex","Aacute","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Oacute","Ocircumflex","apple","Ograve","Uacute","Ucircumflex","Ugrave","dotlessi","circumflex","tilde","macron","breve","dotaccent","ring","cedilla","hungarumlaut","ogonek","caron","Lslash","lslash","Scaron","scaron","Zcaron","zcaron","brokenbar","Eth","eth","Yacute","yacute","Thorn","thorn","minus","multiply","onesuperior","twosuperior","threesuperior","onehalf","onequarter","threequarters","franc","Gbreve","gbreve","Idotaccent","Scedilla","scedilla","Cacute","cacute","Ccaron","ccaron","dcroat"]},(e,t,r)=>{r.r(t),r.d(t,{getDingbatsGlyphsUnicode:()=>i,getGlyphsUnicode:()=>a});var n=r(149);const a=(0,n.getLookupTableFactory)((function(e){e.A=65,e.AE=198,e.AEacute=508,e.AEmacron=482,e.AEsmall=63462,e.Aacute=193,e.Aacutesmall=63457,e.Abreve=258,e.Abreveacute=7854,e.Abrevecyrillic=1232,e.Abrevedotbelow=7862,e.Abrevegrave=7856,e.Abrevehookabove=7858,e.Abrevetilde=7860,e.Acaron=461,e.Acircle=9398,e.Acircumflex=194,e.Acircumflexacute=7844,e.Acircumflexdotbelow=7852,e.Acircumflexgrave=7846,e.Acircumflexhookabove=7848,e.Acircumflexsmall=63458,e.Acircumflextilde=7850,e.Acute=63177,e.Acutesmall=63412,e.Acyrillic=1040,e.Adblgrave=512,e.Adieresis=196,e.Adieresiscyrillic=1234,e.Adieresismacron=478,e.Adieresissmall=63460,e.Adotbelow=7840,e.Adotmacron=480,e.Agrave=192,e.Agravesmall=63456,e.Ahookabove=7842,e.Aiecyrillic=1236,e.Ainvertedbreve=514,e.Alpha=913,e.Alphatonos=902,e.Amacron=256,e.Amonospace=65313,e.Aogonek=260,e.Aring=197,e.Aringacute=506,e.Aringbelow=7680,e.Aringsmall=63461,e.Asmall=63329,e.Atilde=195,e.Atildesmall=63459,e.Aybarmenian=1329,e.B=66,e.Bcircle=9399,e.Bdotaccent=7682,e.Bdotbelow=7684,e.Becyrillic=1041,e.Benarmenian=1330,e.Beta=914,e.Bhook=385,e.Blinebelow=7686,e.Bmonospace=65314,e.Brevesmall=63220,e.Bsmall=63330,e.Btopbar=386,e.C=67,e.Caarmenian=1342,e.Cacute=262,e.Caron=63178,e.Caronsmall=63221,e.Ccaron=268,e.Ccedilla=199,e.Ccedillaacute=7688,e.Ccedillasmall=63463,e.Ccircle=9400,e.Ccircumflex=264,e.Cdot=266,e.Cdotaccent=266,e.Cedillasmall=63416,e.Chaarmenian=1353,e.Cheabkhasiancyrillic=1212,e.Checyrillic=1063,e.Chedescenderabkhasiancyrillic=1214,e.Chedescendercyrillic=1206,e.Chedieresiscyrillic=1268,e.Cheharmenian=1347,e.Chekhakassiancyrillic=1227,e.Cheverticalstrokecyrillic=1208,e.Chi=935,e.Chook=391,e.Circumflexsmall=63222,e.Cmonospace=65315,e.Coarmenian=1361,e.Csmall=63331,e.D=68,e.DZ=497,e.DZcaron=452,e.Daarmenian=1332,e.Dafrican=393,e.Dcaron=270,e.Dcedilla=7696,e.Dcircle=9401,e.Dcircumflexbelow=7698,e.Dcroat=272,e.Ddotaccent=7690,e.Ddotbelow=7692,e.Decyrillic=1044,e.Deicoptic=1006,e.Delta=8710,e.Deltagreek=916,e.Dhook=394,e.Dieresis=63179,e.DieresisAcute=63180,e.DieresisGrave=63181,e.Dieresissmall=63400,e.Digammagreek=988,e.Djecyrillic=1026,e.Dlinebelow=7694,e.Dmonospace=65316,e.Dotaccentsmall=63223,e.Dslash=272,e.Dsmall=63332,e.Dtopbar=395,e.Dz=498,e.Dzcaron=453,e.Dzeabkhasiancyrillic=1248,e.Dzecyrillic=1029,e.Dzhecyrillic=1039,e.E=69,e.Eacute=201,e.Eacutesmall=63465,e.Ebreve=276,e.Ecaron=282,e.Ecedillabreve=7708,e.Echarmenian=1333,e.Ecircle=9402,e.Ecircumflex=202,e.Ecircumflexacute=7870,e.Ecircumflexbelow=7704,e.Ecircumflexdotbelow=7878,e.Ecircumflexgrave=7872,e.Ecircumflexhookabove=7874,e.Ecircumflexsmall=63466,e.Ecircumflextilde=7876,e.Ecyrillic=1028,e.Edblgrave=516,e.Edieresis=203,e.Edieresissmall=63467,e.Edot=278,e.Edotaccent=278,e.Edotbelow=7864,e.Efcyrillic=1060,e.Egrave=200,e.Egravesmall=63464,e.Eharmenian=1335,e.Ehookabove=7866,e.Eightroman=8551,e.Einvertedbreve=518,e.Eiotifiedcyrillic=1124,e.Elcyrillic=1051,e.Elevenroman=8554,e.Emacron=274,e.Emacronacute=7702,e.Emacrongrave=7700,e.Emcyrillic=1052,e.Emonospace=65317,e.Encyrillic=1053,e.Endescendercyrillic=1186,e.Eng=330,e.Enghecyrillic=1188,e.Enhookcyrillic=1223,e.Eogonek=280,e.Eopen=400,e.Epsilon=917,e.Epsilontonos=904,e.Ercyrillic=1056,e.Ereversed=398,e.Ereversedcyrillic=1069,e.Escyrillic=1057,e.Esdescendercyrillic=1194,e.Esh=425,e.Esmall=63333,e.Eta=919,e.Etarmenian=1336,e.Etatonos=905,e.Eth=208,e.Ethsmall=63472,e.Etilde=7868,e.Etildebelow=7706,e.Euro=8364,e.Ezh=439,e.Ezhcaron=494,e.Ezhreversed=440,e.F=70,e.Fcircle=9403,e.Fdotaccent=7710,e.Feharmenian=1366,e.Feicoptic=996,e.Fhook=401,e.Fitacyrillic=1138,e.Fiveroman=8548,e.Fmonospace=65318,e.Fourroman=8547,e.Fsmall=63334,e.G=71,e.GBsquare=13191,e.Gacute=500,e.Gamma=915,e.Gammaafrican=404,e.Gangiacoptic=1002,e.Gbreve=286,e.Gcaron=486,e.Gcedilla=290,e.Gcircle=9404,e.Gcircumflex=284,e.Gcommaaccent=290,e.Gdot=288,e.Gdotaccent=288,e.Gecyrillic=1043,e.Ghadarmenian=1346,e.Ghemiddlehookcyrillic=1172,e.Ghestrokecyrillic=1170,e.Gheupturncyrillic=1168,e.Ghook=403,e.Gimarmenian=1331,e.Gjecyrillic=1027,e.Gmacron=7712,e.Gmonospace=65319,e.Grave=63182,e.Gravesmall=63328,e.Gsmall=63335,e.Gsmallhook=667,e.Gstroke=484,e.H=72,e.H18533=9679,e.H18543=9642,e.H18551=9643,e.H22073=9633,e.HPsquare=13259,e.Haabkhasiancyrillic=1192,e.Hadescendercyrillic=1202,e.Hardsigncyrillic=1066,e.Hbar=294,e.Hbrevebelow=7722,e.Hcedilla=7720,e.Hcircle=9405,e.Hcircumflex=292,e.Hdieresis=7718,e.Hdotaccent=7714,e.Hdotbelow=7716,e.Hmonospace=65320,e.Hoarmenian=1344,e.Horicoptic=1e3,e.Hsmall=63336,e.Hungarumlaut=63183,e.Hungarumlautsmall=63224,e.Hzsquare=13200,e.I=73,e.IAcyrillic=1071,e.IJ=306,e.IUcyrillic=1070,e.Iacute=205,e.Iacutesmall=63469,e.Ibreve=300,e.Icaron=463,e.Icircle=9406,e.Icircumflex=206,e.Icircumflexsmall=63470,e.Icyrillic=1030,e.Idblgrave=520,e.Idieresis=207,e.Idieresisacute=7726,e.Idieresiscyrillic=1252,e.Idieresissmall=63471,e.Idot=304,e.Idotaccent=304,e.Idotbelow=7882,e.Iebrevecyrillic=1238,e.Iecyrillic=1045,e.Ifraktur=8465,e.Igrave=204,e.Igravesmall=63468,e.Ihookabove=7880,e.Iicyrillic=1048,e.Iinvertedbreve=522,e.Iishortcyrillic=1049,e.Imacron=298,e.Imacroncyrillic=1250,e.Imonospace=65321,e.Iniarmenian=1339,e.Iocyrillic=1025,e.Iogonek=302,e.Iota=921,e.Iotaafrican=406,e.Iotadieresis=938,e.Iotatonos=906,e.Ismall=63337,e.Istroke=407,e.Itilde=296,e.Itildebelow=7724,e.Izhitsacyrillic=1140,e.Izhitsadblgravecyrillic=1142,e.J=74,e.Jaarmenian=1345,e.Jcircle=9407,e.Jcircumflex=308,e.Jecyrillic=1032,e.Jheharmenian=1355,e.Jmonospace=65322,e.Jsmall=63338,e.K=75,e.KBsquare=13189,e.KKsquare=13261,e.Kabashkircyrillic=1184,e.Kacute=7728,e.Kacyrillic=1050,e.Kadescendercyrillic=1178,e.Kahookcyrillic=1219,e.Kappa=922,e.Kastrokecyrillic=1182,e.Kaverticalstrokecyrillic=1180,e.Kcaron=488,e.Kcedilla=310,e.Kcircle=9408,e.Kcommaaccent=310,e.Kdotbelow=7730,e.Keharmenian=1364,e.Kenarmenian=1343,e.Khacyrillic=1061,e.Kheicoptic=998,e.Khook=408,e.Kjecyrillic=1036,e.Klinebelow=7732,e.Kmonospace=65323,e.Koppacyrillic=1152,e.Koppagreek=990,e.Ksicyrillic=1134,e.Ksmall=63339,e.L=76,e.LJ=455,e.LL=63167,e.Lacute=313,e.Lambda=923,e.Lcaron=317,e.Lcedilla=315,e.Lcircle=9409,e.Lcircumflexbelow=7740,e.Lcommaaccent=315,e.Ldot=319,e.Ldotaccent=319,e.Ldotbelow=7734,e.Ldotbelowmacron=7736,e.Liwnarmenian=1340,e.Lj=456,e.Ljecyrillic=1033,e.Llinebelow=7738,e.Lmonospace=65324,e.Lslash=321,e.Lslashsmall=63225,e.Lsmall=63340,e.M=77,e.MBsquare=13190,e.Macron=63184,e.Macronsmall=63407,e.Macute=7742,e.Mcircle=9410,e.Mdotaccent=7744,e.Mdotbelow=7746,e.Menarmenian=1348,e.Mmonospace=65325,e.Msmall=63341,e.Mturned=412,e.Mu=924,e.N=78,e.NJ=458,e.Nacute=323,e.Ncaron=327,e.Ncedilla=325,e.Ncircle=9411,e.Ncircumflexbelow=7754,e.Ncommaaccent=325,e.Ndotaccent=7748,e.Ndotbelow=7750,e.Nhookleft=413,e.Nineroman=8552,e.Nj=459,e.Njecyrillic=1034,e.Nlinebelow=7752,e.Nmonospace=65326,e.Nowarmenian=1350,e.Nsmall=63342,e.Ntilde=209,e.Ntildesmall=63473,e.Nu=925,e.O=79,e.OE=338,e.OEsmall=63226,e.Oacute=211,e.Oacutesmall=63475,e.Obarredcyrillic=1256,e.Obarreddieresiscyrillic=1258,e.Obreve=334,e.Ocaron=465,e.Ocenteredtilde=415,e.Ocircle=9412,e.Ocircumflex=212,e.Ocircumflexacute=7888,e.Ocircumflexdotbelow=7896,e.Ocircumflexgrave=7890,e.Ocircumflexhookabove=7892,e.Ocircumflexsmall=63476,e.Ocircumflextilde=7894,e.Ocyrillic=1054,e.Odblacute=336,e.Odblgrave=524,e.Odieresis=214,e.Odieresiscyrillic=1254,e.Odieresissmall=63478,e.Odotbelow=7884,e.Ogoneksmall=63227,e.Ograve=210,e.Ogravesmall=63474,e.Oharmenian=1365,e.Ohm=8486,e.Ohookabove=7886,e.Ohorn=416,e.Ohornacute=7898,e.Ohorndotbelow=7906,e.Ohorngrave=7900,e.Ohornhookabove=7902,e.Ohorntilde=7904,e.Ohungarumlaut=336,e.Oi=418,e.Oinvertedbreve=526,e.Omacron=332,e.Omacronacute=7762,e.Omacrongrave=7760,e.Omega=8486,e.Omegacyrillic=1120,e.Omegagreek=937,e.Omegaroundcyrillic=1146,e.Omegatitlocyrillic=1148,e.Omegatonos=911,e.Omicron=927,e.Omicrontonos=908,e.Omonospace=65327,e.Oneroman=8544,e.Oogonek=490,e.Oogonekmacron=492,e.Oopen=390,e.Oslash=216,e.Oslashacute=510,e.Oslashsmall=63480,e.Osmall=63343,e.Ostrokeacute=510,e.Otcyrillic=1150,e.Otilde=213,e.Otildeacute=7756,e.Otildedieresis=7758,e.Otildesmall=63477,e.P=80,e.Pacute=7764,e.Pcircle=9413,e.Pdotaccent=7766,e.Pecyrillic=1055,e.Peharmenian=1354,e.Pemiddlehookcyrillic=1190,e.Phi=934,e.Phook=420,e.Pi=928,e.Piwrarmenian=1363,e.Pmonospace=65328,e.Psi=936,e.Psicyrillic=1136,e.Psmall=63344,e.Q=81,e.Qcircle=9414,e.Qmonospace=65329,e.Qsmall=63345,e.R=82,e.Raarmenian=1356,e.Racute=340,e.Rcaron=344,e.Rcedilla=342,e.Rcircle=9415,e.Rcommaaccent=342,e.Rdblgrave=528,e.Rdotaccent=7768,e.Rdotbelow=7770,e.Rdotbelowmacron=7772,e.Reharmenian=1360,e.Rfraktur=8476,e.Rho=929,e.Ringsmall=63228,e.Rinvertedbreve=530,e.Rlinebelow=7774,e.Rmonospace=65330,e.Rsmall=63346,e.Rsmallinverted=641,e.Rsmallinvertedsuperior=694,e.S=83,e.SF010000=9484,e.SF020000=9492,e.SF030000=9488,e.SF040000=9496,e.SF050000=9532,e.SF060000=9516,e.SF070000=9524,e.SF080000=9500,e.SF090000=9508,e.SF100000=9472,e.SF110000=9474,e.SF190000=9569,e.SF200000=9570,e.SF210000=9558,e.SF220000=9557,e.SF230000=9571,e.SF240000=9553,e.SF250000=9559,e.SF260000=9565,e.SF270000=9564,e.SF280000=9563,e.SF360000=9566,e.SF370000=9567,e.SF380000=9562,e.SF390000=9556,e.SF400000=9577,e.SF410000=9574,e.SF420000=9568,e.SF430000=9552,e.SF440000=9580,e.SF450000=9575,e.SF460000=9576,e.SF470000=9572,e.SF480000=9573,e.SF490000=9561,e.SF500000=9560,e.SF510000=9554,e.SF520000=9555,e.SF530000=9579,e.SF540000=9578,e.Sacute=346,e.Sacutedotaccent=7780,e.Sampigreek=992,e.Scaron=352,e.Scarondotaccent=7782,e.Scaronsmall=63229,e.Scedilla=350,e.Schwa=399,e.Schwacyrillic=1240,e.Schwadieresiscyrillic=1242,e.Scircle=9416,e.Scircumflex=348,e.Scommaaccent=536,e.Sdotaccent=7776,e.Sdotbelow=7778,e.Sdotbelowdotaccent=7784,e.Seharmenian=1357,e.Sevenroman=8550,e.Shaarmenian=1351,e.Shacyrillic=1064,e.Shchacyrillic=1065,e.Sheicoptic=994,e.Shhacyrillic=1210,e.Shimacoptic=1004,e.Sigma=931,e.Sixroman=8549,e.Smonospace=65331,e.Softsigncyrillic=1068,e.Ssmall=63347,e.Stigmagreek=986,e.T=84,e.Tau=932,e.Tbar=358,e.Tcaron=356,e.Tcedilla=354,e.Tcircle=9417,e.Tcircumflexbelow=7792,e.Tcommaaccent=354,e.Tdotaccent=7786,e.Tdotbelow=7788,e.Tecyrillic=1058,e.Tedescendercyrillic=1196,e.Tenroman=8553,e.Tetsecyrillic=1204,e.Theta=920,e.Thook=428,e.Thorn=222,e.Thornsmall=63486,e.Threeroman=8546,e.Tildesmall=63230,e.Tiwnarmenian=1359,e.Tlinebelow=7790,e.Tmonospace=65332,e.Toarmenian=1337,e.Tonefive=444,e.Tonesix=388,e.Tonetwo=423,e.Tretroflexhook=430,e.Tsecyrillic=1062,e.Tshecyrillic=1035,e.Tsmall=63348,e.Twelveroman=8555,e.Tworoman=8545,e.U=85,e.Uacute=218,e.Uacutesmall=63482,e.Ubreve=364,e.Ucaron=467,e.Ucircle=9418,e.Ucircumflex=219,e.Ucircumflexbelow=7798,e.Ucircumflexsmall=63483,e.Ucyrillic=1059,e.Udblacute=368,e.Udblgrave=532,e.Udieresis=220,e.Udieresisacute=471,e.Udieresisbelow=7794,e.Udieresiscaron=473,e.Udieresiscyrillic=1264,e.Udieresisgrave=475,e.Udieresismacron=469,e.Udieresissmall=63484,e.Udotbelow=7908,e.Ugrave=217,e.Ugravesmall=63481,e.Uhookabove=7910,e.Uhorn=431,e.Uhornacute=7912,e.Uhorndotbelow=7920,e.Uhorngrave=7914,e.Uhornhookabove=7916,e.Uhorntilde=7918,e.Uhungarumlaut=368,e.Uhungarumlautcyrillic=1266,e.Uinvertedbreve=534,e.Ukcyrillic=1144,e.Umacron=362,e.Umacroncyrillic=1262,e.Umacrondieresis=7802,e.Umonospace=65333,e.Uogonek=370,e.Upsilon=933,e.Upsilon1=978,e.Upsilonacutehooksymbolgreek=979,e.Upsilonafrican=433,e.Upsilondieresis=939,e.Upsilondieresishooksymbolgreek=980,e.Upsilonhooksymbol=978,e.Upsilontonos=910,e.Uring=366,e.Ushortcyrillic=1038,e.Usmall=63349,e.Ustraightcyrillic=1198,e.Ustraightstrokecyrillic=1200,e.Utilde=360,e.Utildeacute=7800,e.Utildebelow=7796,e.V=86,e.Vcircle=9419,e.Vdotbelow=7806,e.Vecyrillic=1042,e.Vewarmenian=1358,e.Vhook=434,e.Vmonospace=65334,e.Voarmenian=1352,e.Vsmall=63350,e.Vtilde=7804,e.W=87,e.Wacute=7810,e.Wcircle=9420,e.Wcircumflex=372,e.Wdieresis=7812,e.Wdotaccent=7814,e.Wdotbelow=7816,e.Wgrave=7808,e.Wmonospace=65335,e.Wsmall=63351,e.X=88,e.Xcircle=9421,e.Xdieresis=7820,e.Xdotaccent=7818,e.Xeharmenian=1341,e.Xi=926,e.Xmonospace=65336,e.Xsmall=63352,e.Y=89,e.Yacute=221,e.Yacutesmall=63485,e.Yatcyrillic=1122,e.Ycircle=9422,e.Ycircumflex=374,e.Ydieresis=376,e.Ydieresissmall=63487,e.Ydotaccent=7822,e.Ydotbelow=7924,e.Yericyrillic=1067,e.Yerudieresiscyrillic=1272,e.Ygrave=7922,e.Yhook=435,e.Yhookabove=7926,e.Yiarmenian=1349,e.Yicyrillic=1031,e.Yiwnarmenian=1362,e.Ymonospace=65337,e.Ysmall=63353,e.Ytilde=7928,e.Yusbigcyrillic=1130,e.Yusbigiotifiedcyrillic=1132,e.Yuslittlecyrillic=1126,e.Yuslittleiotifiedcyrillic=1128,e.Z=90,e.Zaarmenian=1334,e.Zacute=377,e.Zcaron=381,e.Zcaronsmall=63231,e.Zcircle=9423,e.Zcircumflex=7824,e.Zdot=379,e.Zdotaccent=379,e.Zdotbelow=7826,e.Zecyrillic=1047,e.Zedescendercyrillic=1176,e.Zedieresiscyrillic=1246,e.Zeta=918,e.Zhearmenian=1338,e.Zhebrevecyrillic=1217,e.Zhecyrillic=1046,e.Zhedescendercyrillic=1174,e.Zhedieresiscyrillic=1244,e.Zlinebelow=7828,e.Zmonospace=65338,e.Zsmall=63354,e.Zstroke=437,e.a=97,e.aabengali=2438,e.aacute=225,e.aadeva=2310,e.aagujarati=2694,e.aagurmukhi=2566,e.aamatragurmukhi=2622,e.aarusquare=13059,e.aavowelsignbengali=2494,e.aavowelsigndeva=2366,e.aavowelsigngujarati=2750,e.abbreviationmarkarmenian=1375,e.abbreviationsigndeva=2416,e.abengali=2437,e.abopomofo=12570,e.abreve=259,e.abreveacute=7855,e.abrevecyrillic=1233,e.abrevedotbelow=7863,e.abrevegrave=7857,e.abrevehookabove=7859,e.abrevetilde=7861,e.acaron=462,e.acircle=9424,e.acircumflex=226,e.acircumflexacute=7845,e.acircumflexdotbelow=7853,e.acircumflexgrave=7847,e.acircumflexhookabove=7849,e.acircumflextilde=7851,e.acute=180,e.acutebelowcmb=791,e.acutecmb=769,e.acutecomb=769,e.acutedeva=2388,e.acutelowmod=719,e.acutetonecmb=833,e.acyrillic=1072,e.adblgrave=513,e.addakgurmukhi=2673,e.adeva=2309,e.adieresis=228,e.adieresiscyrillic=1235,e.adieresismacron=479,e.adotbelow=7841,e.adotmacron=481,e.ae=230,e.aeacute=509,e.aekorean=12624,e.aemacron=483,e.afii00208=8213,e.afii08941=8356,e.afii10017=1040,e.afii10018=1041,e.afii10019=1042,e.afii10020=1043,e.afii10021=1044,e.afii10022=1045,e.afii10023=1025,e.afii10024=1046,e.afii10025=1047,e.afii10026=1048,e.afii10027=1049,e.afii10028=1050,e.afii10029=1051,e.afii10030=1052;e.afii10031=1053,e.afii10032=1054,e.afii10033=1055,e.afii10034=1056,e.afii10035=1057,e.afii10036=1058,e.afii10037=1059,e.afii10038=1060,e.afii10039=1061,e.afii10040=1062,e.afii10041=1063,e.afii10042=1064,e.afii10043=1065,e.afii10044=1066,e.afii10045=1067,e.afii10046=1068,e.afii10047=1069,e.afii10048=1070,e.afii10049=1071,e.afii10050=1168,e.afii10051=1026,e.afii10052=1027,e.afii10053=1028,e.afii10054=1029,e.afii10055=1030,e.afii10056=1031,e.afii10057=1032,e.afii10058=1033,e.afii10059=1034,e.afii10060=1035,e.afii10061=1036,e.afii10062=1038,e.afii10063=63172,e.afii10064=63173,e.afii10065=1072,e.afii10066=1073,e.afii10067=1074,e.afii10068=1075,e.afii10069=1076,e.afii10070=1077,e.afii10071=1105,e.afii10072=1078,e.afii10073=1079,e.afii10074=1080,e.afii10075=1081,e.afii10076=1082,e.afii10077=1083,e.afii10078=1084,e.afii10079=1085,e.afii10080=1086,e.afii10081=1087,e.afii10082=1088,e.afii10083=1089,e.afii10084=1090,e.afii10085=1091,e.afii10086=1092,e.afii10087=1093,e.afii10088=1094,e.afii10089=1095,e.afii10090=1096,e.afii10091=1097,e.afii10092=1098,e.afii10093=1099,e.afii10094=1100,e.afii10095=1101,e.afii10096=1102,e.afii10097=1103,e.afii10098=1169,e.afii10099=1106,e.afii10100=1107,e.afii10101=1108,e.afii10102=1109,e.afii10103=1110,e.afii10104=1111,e.afii10105=1112,e.afii10106=1113,e.afii10107=1114,e.afii10108=1115,e.afii10109=1116,e.afii10110=1118,e.afii10145=1039,e.afii10146=1122,e.afii10147=1138,e.afii10148=1140,e.afii10192=63174,e.afii10193=1119,e.afii10194=1123,e.afii10195=1139,e.afii10196=1141,e.afii10831=63175,e.afii10832=63176,e.afii10846=1241,e.afii299=8206,e.afii300=8207,e.afii301=8205,e.afii57381=1642,e.afii57388=1548,e.afii57392=1632,e.afii57393=1633,e.afii57394=1634,e.afii57395=1635,e.afii57396=1636,e.afii57397=1637,e.afii57398=1638,e.afii57399=1639,e.afii57400=1640,e.afii57401=1641,e.afii57403=1563,e.afii57407=1567,e.afii57409=1569,e.afii57410=1570,e.afii57411=1571,e.afii57412=1572,e.afii57413=1573,e.afii57414=1574,e.afii57415=1575,e.afii57416=1576,e.afii57417=1577,e.afii57418=1578,e.afii57419=1579,e.afii57420=1580,e.afii57421=1581,e.afii57422=1582,e.afii57423=1583,e.afii57424=1584,e.afii57425=1585,e.afii57426=1586,e.afii57427=1587,e.afii57428=1588,e.afii57429=1589,e.afii57430=1590,e.afii57431=1591,e.afii57432=1592,e.afii57433=1593,e.afii57434=1594,e.afii57440=1600,e.afii57441=1601,e.afii57442=1602,e.afii57443=1603,e.afii57444=1604,e.afii57445=1605,e.afii57446=1606,e.afii57448=1608,e.afii57449=1609,e.afii57450=1610,e.afii57451=1611,e.afii57452=1612,e.afii57453=1613,e.afii57454=1614,e.afii57455=1615,e.afii57456=1616,e.afii57457=1617,e.afii57458=1618,e.afii57470=1607,e.afii57505=1700,e.afii57506=1662,e.afii57507=1670,e.afii57508=1688,e.afii57509=1711,e.afii57511=1657,e.afii57512=1672,e.afii57513=1681,e.afii57514=1722,e.afii57519=1746,e.afii57534=1749,e.afii57636=8362,e.afii57645=1470,e.afii57658=1475,e.afii57664=1488,e.afii57665=1489,e.afii57666=1490,e.afii57667=1491,e.afii57668=1492,e.afii57669=1493,e.afii57670=1494,e.afii57671=1495,e.afii57672=1496,e.afii57673=1497,e.afii57674=1498,e.afii57675=1499,e.afii57676=1500,e.afii57677=1501,e.afii57678=1502,e.afii57679=1503,e.afii57680=1504,e.afii57681=1505,e.afii57682=1506,e.afii57683=1507,e.afii57684=1508,e.afii57685=1509,e.afii57686=1510,e.afii57687=1511,e.afii57688=1512,e.afii57689=1513,e.afii57690=1514,e.afii57694=64298,e.afii57695=64299,e.afii57700=64331,e.afii57705=64287,e.afii57716=1520,e.afii57717=1521,e.afii57718=1522,e.afii57723=64309,e.afii57793=1460,e.afii57794=1461,e.afii57795=1462,e.afii57796=1467,e.afii57797=1464,e.afii57798=1463,e.afii57799=1456,e.afii57800=1458,e.afii57801=1457,e.afii57802=1459,e.afii57803=1474,e.afii57804=1473,e.afii57806=1465,e.afii57807=1468,e.afii57839=1469,e.afii57841=1471,e.afii57842=1472,e.afii57929=700,e.afii61248=8453,e.afii61289=8467,e.afii61352=8470,e.afii61573=8236,e.afii61574=8237,e.afii61575=8238,e.afii61664=8204,e.afii63167=1645,e.afii64937=701,e.agrave=224,e.agujarati=2693,e.agurmukhi=2565,e.ahiragana=12354,e.ahookabove=7843,e.aibengali=2448,e.aibopomofo=12574,e.aideva=2320,e.aiecyrillic=1237,e.aigujarati=2704,e.aigurmukhi=2576,e.aimatragurmukhi=2632,e.ainarabic=1593,e.ainfinalarabic=65226,e.aininitialarabic=65227,e.ainmedialarabic=65228,e.ainvertedbreve=515,e.aivowelsignbengali=2504,e.aivowelsigndeva=2376,e.aivowelsigngujarati=2760,e.akatakana=12450,e.akatakanahalfwidth=65393,e.akorean=12623,e.alef=1488,e.alefarabic=1575,e.alefdageshhebrew=64304,e.aleffinalarabic=65166,e.alefhamzaabovearabic=1571,e.alefhamzaabovefinalarabic=65156,e.alefhamzabelowarabic=1573,e.alefhamzabelowfinalarabic=65160,e.alefhebrew=1488,e.aleflamedhebrew=64335,e.alefmaddaabovearabic=1570,e.alefmaddaabovefinalarabic=65154,e.alefmaksuraarabic=1609,e.alefmaksurafinalarabic=65264,e.alefmaksurainitialarabic=65267,e.alefmaksuramedialarabic=65268,e.alefpatahhebrew=64302,e.alefqamatshebrew=64303,e.aleph=8501,e.allequal=8780,e.alpha=945,e.alphatonos=940,e.amacron=257,e.amonospace=65345,e.ampersand=38,e.ampersandmonospace=65286,e.ampersandsmall=63270,e.amsquare=13250,e.anbopomofo=12578,e.angbopomofo=12580,e.angbracketleft=12296,e.angbracketright=12297,e.angkhankhuthai=3674,e.angle=8736,e.anglebracketleft=12296,e.anglebracketleftvertical=65087,e.anglebracketright=12297,e.anglebracketrightvertical=65088,e.angleleft=9001,e.angleright=9002,e.angstrom=8491,e.anoteleia=903,e.anudattadeva=2386,e.anusvarabengali=2434,e.anusvaradeva=2306,e.anusvaragujarati=2690,e.aogonek=261,e.apaatosquare=13056,e.aparen=9372,e.apostrophearmenian=1370,e.apostrophemod=700,e.apple=63743,e.approaches=8784,e.approxequal=8776,e.approxequalorimage=8786,e.approximatelyequal=8773,e.araeaekorean=12686,e.araeakorean=12685,e.arc=8978,e.arighthalfring=7834,e.aring=229,e.aringacute=507,e.aringbelow=7681,e.arrowboth=8596,e.arrowdashdown=8675,e.arrowdashleft=8672,e.arrowdashright=8674,e.arrowdashup=8673,e.arrowdblboth=8660,e.arrowdbldown=8659,e.arrowdblleft=8656,e.arrowdblright=8658,e.arrowdblup=8657,e.arrowdown=8595,e.arrowdownleft=8601,e.arrowdownright=8600,e.arrowdownwhite=8681,e.arrowheaddownmod=709,e.arrowheadleftmod=706,e.arrowheadrightmod=707,e.arrowheadupmod=708,e.arrowhorizex=63719,e.arrowleft=8592,e.arrowleftdbl=8656,e.arrowleftdblstroke=8653,e.arrowleftoverright=8646,e.arrowleftwhite=8678,e.arrowright=8594,e.arrowrightdblstroke=8655,e.arrowrightheavy=10142,e.arrowrightoverleft=8644,e.arrowrightwhite=8680,e.arrowtableft=8676,e.arrowtabright=8677,e.arrowup=8593,e.arrowupdn=8597,e.arrowupdnbse=8616,e.arrowupdownbase=8616,e.arrowupleft=8598,e.arrowupleftofdown=8645,e.arrowupright=8599,e.arrowupwhite=8679,e.arrowvertex=63718,e.asciicircum=94,e.asciicircummonospace=65342,e.asciitilde=126,e.asciitildemonospace=65374,e.ascript=593,e.ascriptturned=594,e.asmallhiragana=12353,e.asmallkatakana=12449,e.asmallkatakanahalfwidth=65383,e.asterisk=42,e.asteriskaltonearabic=1645,e.asteriskarabic=1645,e.asteriskmath=8727,e.asteriskmonospace=65290,e.asterisksmall=65121,e.asterism=8258,e.asuperior=63209,e.asymptoticallyequal=8771,e.at=64,e.atilde=227,e.atmonospace=65312,e.atsmall=65131,e.aturned=592,e.aubengali=2452,e.aubopomofo=12576,e.audeva=2324,e.augujarati=2708,e.augurmukhi=2580,e.aulengthmarkbengali=2519,e.aumatragurmukhi=2636,e.auvowelsignbengali=2508,e.auvowelsigndeva=2380,e.auvowelsigngujarati=2764,e.avagrahadeva=2365,e.aybarmenian=1377,e.ayin=1506,e.ayinaltonehebrew=64288,e.ayinhebrew=1506,e.b=98,e.babengali=2476,e.backslash=92,e.backslashmonospace=65340,e.badeva=2348,e.bagujarati=2732,e.bagurmukhi=2604,e.bahiragana=12400,e.bahtthai=3647,e.bakatakana=12496,e.bar=124,e.barmonospace=65372,e.bbopomofo=12549,e.bcircle=9425,e.bdotaccent=7683,e.bdotbelow=7685,e.beamedsixteenthnotes=9836,e.because=8757,e.becyrillic=1073,e.beharabic=1576,e.behfinalarabic=65168,e.behinitialarabic=65169,e.behiragana=12409,e.behmedialarabic=65170,e.behmeeminitialarabic=64671,e.behmeemisolatedarabic=64520,e.behnoonfinalarabic=64621,e.bekatakana=12505,e.benarmenian=1378,e.bet=1489,e.beta=946,e.betasymbolgreek=976,e.betdagesh=64305,e.betdageshhebrew=64305,e.bethebrew=1489,e.betrafehebrew=64332,e.bhabengali=2477,e.bhadeva=2349,e.bhagujarati=2733,e.bhagurmukhi=2605,e.bhook=595,e.bihiragana=12403,e.bikatakana=12499,e.bilabialclick=664,e.bindigurmukhi=2562,e.birusquare=13105,e.blackcircle=9679,e.blackdiamond=9670,e.blackdownpointingtriangle=9660,e.blackleftpointingpointer=9668,e.blackleftpointingtriangle=9664,e.blacklenticularbracketleft=12304,e.blacklenticularbracketleftvertical=65083,e.blacklenticularbracketright=12305,e.blacklenticularbracketrightvertical=65084,e.blacklowerlefttriangle=9699,e.blacklowerrighttriangle=9698,e.blackrectangle=9644,e.blackrightpointingpointer=9658,e.blackrightpointingtriangle=9654,e.blacksmallsquare=9642,e.blacksmilingface=9787,e.blacksquare=9632,e.blackstar=9733,e.blackupperlefttriangle=9700,e.blackupperrighttriangle=9701,e.blackuppointingsmalltriangle=9652,e.blackuppointingtriangle=9650,e.blank=9251,e.blinebelow=7687,e.block=9608,e.bmonospace=65346,e.bobaimaithai=3610,e.bohiragana=12412,e.bokatakana=12508,e.bparen=9373,e.bqsquare=13251,e.braceex=63732,e.braceleft=123,e.braceleftbt=63731,e.braceleftmid=63730,e.braceleftmonospace=65371,e.braceleftsmall=65115,e.bracelefttp=63729,e.braceleftvertical=65079,e.braceright=125,e.bracerightbt=63742,e.bracerightmid=63741,e.bracerightmonospace=65373,e.bracerightsmall=65116,e.bracerighttp=63740,e.bracerightvertical=65080,e.bracketleft=91,e.bracketleftbt=63728,e.bracketleftex=63727,e.bracketleftmonospace=65339,e.bracketlefttp=63726,e.bracketright=93,e.bracketrightbt=63739,e.bracketrightex=63738,e.bracketrightmonospace=65341,e.bracketrighttp=63737,e.breve=728,e.brevebelowcmb=814,e.brevecmb=774,e.breveinvertedbelowcmb=815,e.breveinvertedcmb=785,e.breveinverteddoublecmb=865,e.bridgebelowcmb=810,e.bridgeinvertedbelowcmb=826,e.brokenbar=166,e.bstroke=384,e.bsuperior=63210,e.btopbar=387,e.buhiragana=12406,e.bukatakana=12502,e.bullet=8226,e.bulletinverse=9688,e.bulletoperator=8729,e.bullseye=9678,e.c=99,e.caarmenian=1390,e.cabengali=2458,e.cacute=263,e.cadeva=2330,e.cagujarati=2714,e.cagurmukhi=2586,e.calsquare=13192,e.candrabindubengali=2433,e.candrabinducmb=784,e.candrabindudeva=2305,e.candrabindugujarati=2689,e.capslock=8682,e.careof=8453,e.caron=711,e.caronbelowcmb=812,e.caroncmb=780,e.carriagereturn=8629,e.cbopomofo=12568,e.ccaron=269,e.ccedilla=231,e.ccedillaacute=7689,e.ccircle=9426,e.ccircumflex=265,e.ccurl=597,e.cdot=267,e.cdotaccent=267,e.cdsquare=13253,e.cedilla=184,e.cedillacmb=807,e.cent=162,e.centigrade=8451,e.centinferior=63199,e.centmonospace=65504,e.centoldstyle=63394,e.centsuperior=63200,e.chaarmenian=1401,e.chabengali=2459,e.chadeva=2331,e.chagujarati=2715,e.chagurmukhi=2587,e.chbopomofo=12564,e.cheabkhasiancyrillic=1213,e.checkmark=10003,e.checyrillic=1095,e.chedescenderabkhasiancyrillic=1215,e.chedescendercyrillic=1207,e.chedieresiscyrillic=1269,e.cheharmenian=1395,e.chekhakassiancyrillic=1228,e.cheverticalstrokecyrillic=1209,e.chi=967,e.chieuchacirclekorean=12919,e.chieuchaparenkorean=12823,e.chieuchcirclekorean=12905,e.chieuchkorean=12618,e.chieuchparenkorean=12809,e.chochangthai=3594,e.chochanthai=3592,e.chochingthai=3593,e.chochoethai=3596,e.chook=392,e.cieucacirclekorean=12918,e.cieucaparenkorean=12822,e.cieuccirclekorean=12904,e.cieuckorean=12616,e.cieucparenkorean=12808,e.cieucuparenkorean=12828,e.circle=9675,e.circlecopyrt=169,e.circlemultiply=8855,e.circleot=8857,e.circleplus=8853,e.circlepostalmark=12342,e.circlewithlefthalfblack=9680,e.circlewithrighthalfblack=9681,e.circumflex=710,e.circumflexbelowcmb=813,e.circumflexcmb=770,e.clear=8999,e.clickalveolar=450,e.clickdental=448,e.clicklateral=449,e.clickretroflex=451,e.club=9827,e.clubsuitblack=9827,e.clubsuitwhite=9831,e.cmcubedsquare=13220,e.cmonospace=65347,e.cmsquaredsquare=13216,e.coarmenian=1409,e.colon=58,e.colonmonetary=8353,e.colonmonospace=65306,e.colonsign=8353,e.colonsmall=65109,e.colontriangularhalfmod=721,e.colontriangularmod=720,e.comma=44,e.commaabovecmb=787,e.commaaboverightcmb=789,e.commaaccent=63171,e.commaarabic=1548,e.commaarmenian=1373,e.commainferior=63201,e.commamonospace=65292,e.commareversedabovecmb=788,e.commareversedmod=701,e.commasmall=65104,e.commasuperior=63202,e.commaturnedabovecmb=786,e.commaturnedmod=699,e.compass=9788,e.congruent=8773,e.contourintegral=8750,e.control=8963,e.controlACK=6,e.controlBEL=7,e.controlBS=8,e.controlCAN=24,e.controlCR=13,e.controlDC1=17,e.controlDC2=18,e.controlDC3=19,e.controlDC4=20,e.controlDEL=127,e.controlDLE=16,e.controlEM=25,e.controlENQ=5,e.controlEOT=4,e.controlESC=27,e.controlETB=23,e.controlETX=3,e.controlFF=12,e.controlFS=28,e.controlGS=29,e.controlHT=9,e.controlLF=10,e.controlNAK=21,e.controlNULL=0,e.controlRS=30,e.controlSI=15,e.controlSO=14,e.controlSOT=2,e.controlSTX=1,e.controlSUB=26,e.controlSYN=22,e.controlUS=31,e.controlVT=11,e.copyright=169,e.copyrightsans=63721,e.copyrightserif=63193,e.cornerbracketleft=12300,e.cornerbracketlefthalfwidth=65378,e.cornerbracketleftvertical=65089,e.cornerbracketright=12301,e.cornerbracketrighthalfwidth=65379,e.cornerbracketrightvertical=65090,e.corporationsquare=13183,e.cosquare=13255,e.coverkgsquare=13254,e.cparen=9374,e.cruzeiro=8354,e.cstretched=663,e.curlyand=8911,e.curlyor=8910,e.currency=164,e.cyrBreve=63185,e.cyrFlex=63186,e.cyrbreve=63188,e.cyrflex=63189,e.d=100,e.daarmenian=1380,e.dabengali=2470,e.dadarabic=1590,e.dadeva=2342,e.dadfinalarabic=65214,e.dadinitialarabic=65215,e.dadmedialarabic=65216,e.dagesh=1468,e.dageshhebrew=1468,e.dagger=8224,e.daggerdbl=8225,e.dagujarati=2726,e.dagurmukhi=2598,e.dahiragana=12384,e.dakatakana=12480,e.dalarabic=1583,e.dalet=1491,e.daletdagesh=64307,e.daletdageshhebrew=64307,e.dalethebrew=1491,e.dalfinalarabic=65194,e.dammaarabic=1615,e.dammalowarabic=1615,e.dammatanaltonearabic=1612,e.dammatanarabic=1612,e.danda=2404,e.dargahebrew=1447,e.dargalefthebrew=1447,e.dasiapneumatacyrilliccmb=1157,e.dblGrave=63187,e.dblanglebracketleft=12298,e.dblanglebracketleftvertical=65085,e.dblanglebracketright=12299,e.dblanglebracketrightvertical=65086,e.dblarchinvertedbelowcmb=811,e.dblarrowleft=8660,e.dblarrowright=8658,e.dbldanda=2405,e.dblgrave=63190,e.dblgravecmb=783,e.dblintegral=8748,e.dbllowline=8215,e.dbllowlinecmb=819,e.dbloverlinecmb=831,e.dblprimemod=698,e.dblverticalbar=8214,e.dblverticallineabovecmb=782,e.dbopomofo=12553,e.dbsquare=13256,e.dcaron=271,e.dcedilla=7697,e.dcircle=9427,e.dcircumflexbelow=7699,e.dcroat=273,e.ddabengali=2465,e.ddadeva=2337,e.ddagujarati=2721,e.ddagurmukhi=2593,e.ddalarabic=1672,e.ddalfinalarabic=64393,e.dddhadeva=2396,e.ddhabengali=2466,e.ddhadeva=2338,e.ddhagujarati=2722,e.ddhagurmukhi=2594,e.ddotaccent=7691,e.ddotbelow=7693,e.decimalseparatorarabic=1643,e.decimalseparatorpersian=1643,e.decyrillic=1076,e.degree=176,e.dehihebrew=1453,e.dehiragana=12391,e.deicoptic=1007,e.dekatakana=12487,e.deleteleft=9003,e.deleteright=8998,e.delta=948,e.deltaturned=397,e.denominatorminusonenumeratorbengali=2552,e.dezh=676,e.dhabengali=2471,e.dhadeva=2343,e.dhagujarati=2727,e.dhagurmukhi=2599,e.dhook=599,e.dialytikatonos=901,e.dialytikatonoscmb=836,e.diamond=9830,e.diamondsuitwhite=9826,e.dieresis=168,e.dieresisacute=63191,e.dieresisbelowcmb=804,e.dieresiscmb=776,e.dieresisgrave=63192,e.dieresistonos=901,e.dihiragana=12386,e.dikatakana=12482,e.dittomark=12291,e.divide=247,e.divides=8739,e.divisionslash=8725,e.djecyrillic=1106,e.dkshade=9619,e.dlinebelow=7695,e.dlsquare=13207,e.dmacron=273,e.dmonospace=65348,e.dnblock=9604,e.dochadathai=3598,e.dodekthai=3604,e.dohiragana=12393,e.dokatakana=12489,e.dollar=36;e.dollarinferior=63203,e.dollarmonospace=65284,e.dollaroldstyle=63268,e.dollarsmall=65129,e.dollarsuperior=63204,e.dong=8363,e.dorusquare=13094,e.dotaccent=729,e.dotaccentcmb=775,e.dotbelowcmb=803,e.dotbelowcomb=803,e.dotkatakana=12539,e.dotlessi=305,e.dotlessj=63166,e.dotlessjstrokehook=644,e.dotmath=8901,e.dottedcircle=9676,e.doubleyodpatah=64287,e.doubleyodpatahhebrew=64287,e.downtackbelowcmb=798,e.downtackmod=725,e.dparen=9375,e.dsuperior=63211,e.dtail=598,e.dtopbar=396,e.duhiragana=12389,e.dukatakana=12485,e.dz=499,e.dzaltone=675,e.dzcaron=454,e.dzcurl=677,e.dzeabkhasiancyrillic=1249,e.dzecyrillic=1109,e.dzhecyrillic=1119,e.e=101,e.eacute=233,e.earth=9793,e.ebengali=2447,e.ebopomofo=12572,e.ebreve=277,e.ecandradeva=2317,e.ecandragujarati=2701,e.ecandravowelsigndeva=2373,e.ecandravowelsigngujarati=2757,e.ecaron=283,e.ecedillabreve=7709,e.echarmenian=1381,e.echyiwnarmenian=1415,e.ecircle=9428,e.ecircumflex=234,e.ecircumflexacute=7871,e.ecircumflexbelow=7705,e.ecircumflexdotbelow=7879,e.ecircumflexgrave=7873,e.ecircumflexhookabove=7875,e.ecircumflextilde=7877,e.ecyrillic=1108,e.edblgrave=517,e.edeva=2319,e.edieresis=235,e.edot=279,e.edotaccent=279,e.edotbelow=7865,e.eegurmukhi=2575,e.eematragurmukhi=2631,e.efcyrillic=1092,e.egrave=232,e.egujarati=2703,e.eharmenian=1383,e.ehbopomofo=12573,e.ehiragana=12360,e.ehookabove=7867,e.eibopomofo=12575,e.eight=56,e.eightarabic=1640,e.eightbengali=2542,e.eightcircle=9319,e.eightcircleinversesansserif=10129,e.eightdeva=2414,e.eighteencircle=9329,e.eighteenparen=9349,e.eighteenperiod=9369,e.eightgujarati=2798,e.eightgurmukhi=2670,e.eighthackarabic=1640,e.eighthangzhou=12328,e.eighthnotebeamed=9835,e.eightideographicparen=12839,e.eightinferior=8328,e.eightmonospace=65304,e.eightoldstyle=63288,e.eightparen=9339,e.eightperiod=9359,e.eightpersian=1784,e.eightroman=8567,e.eightsuperior=8312,e.eightthai=3672,e.einvertedbreve=519,e.eiotifiedcyrillic=1125,e.ekatakana=12456,e.ekatakanahalfwidth=65396,e.ekonkargurmukhi=2676,e.ekorean=12628,e.elcyrillic=1083,e.element=8712,e.elevencircle=9322,e.elevenparen=9342,e.elevenperiod=9362,e.elevenroman=8570,e.ellipsis=8230,e.ellipsisvertical=8942,e.emacron=275,e.emacronacute=7703,e.emacrongrave=7701,e.emcyrillic=1084,e.emdash=8212,e.emdashvertical=65073,e.emonospace=65349,e.emphasismarkarmenian=1371,e.emptyset=8709,e.enbopomofo=12579,e.encyrillic=1085,e.endash=8211,e.endashvertical=65074,e.endescendercyrillic=1187,e.eng=331,e.engbopomofo=12581,e.enghecyrillic=1189,e.enhookcyrillic=1224,e.enspace=8194,e.eogonek=281,e.eokorean=12627,e.eopen=603,e.eopenclosed=666,e.eopenreversed=604,e.eopenreversedclosed=606,e.eopenreversedhook=605,e.eparen=9376,e.epsilon=949,e.epsilontonos=941,e.equal=61,e.equalmonospace=65309,e.equalsmall=65126,e.equalsuperior=8316,e.equivalence=8801,e.erbopomofo=12582,e.ercyrillic=1088,e.ereversed=600,e.ereversedcyrillic=1101,e.escyrillic=1089,e.esdescendercyrillic=1195,e.esh=643,e.eshcurl=646,e.eshortdeva=2318,e.eshortvowelsigndeva=2374,e.eshreversedloop=426,e.eshsquatreversed=645,e.esmallhiragana=12359,e.esmallkatakana=12455,e.esmallkatakanahalfwidth=65386,e.estimated=8494,e.esuperior=63212,e.eta=951,e.etarmenian=1384,e.etatonos=942,e.eth=240,e.etilde=7869,e.etildebelow=7707,e.etnahtafoukhhebrew=1425,e.etnahtafoukhlefthebrew=1425,e.etnahtahebrew=1425,e.etnahtalefthebrew=1425,e.eturned=477,e.eukorean=12641,e.euro=8364,e.evowelsignbengali=2503,e.evowelsigndeva=2375,e.evowelsigngujarati=2759,e.exclam=33,e.exclamarmenian=1372,e.exclamdbl=8252,e.exclamdown=161,e.exclamdownsmall=63393,e.exclammonospace=65281,e.exclamsmall=63265,e.existential=8707,e.ezh=658,e.ezhcaron=495,e.ezhcurl=659,e.ezhreversed=441,e.ezhtail=442,e.f=102,e.fadeva=2398,e.fagurmukhi=2654,e.fahrenheit=8457,e.fathaarabic=1614,e.fathalowarabic=1614,e.fathatanarabic=1611,e.fbopomofo=12552,e.fcircle=9429,e.fdotaccent=7711,e.feharabic=1601,e.feharmenian=1414,e.fehfinalarabic=65234,e.fehinitialarabic=65235,e.fehmedialarabic=65236,e.feicoptic=997,e.female=9792,e.ff=64256,e.f_f=64256,e.ffi=64259,e.f_f_i=64259,e.ffl=64260,e.f_f_l=64260,e.fi=64257,e.f_i=64257,e.fifteencircle=9326,e.fifteenparen=9346,e.fifteenperiod=9366,e.figuredash=8210,e.filledbox=9632,e.filledrect=9644,e.finalkaf=1498,e.finalkafdagesh=64314,e.finalkafdageshhebrew=64314,e.finalkafhebrew=1498,e.finalmem=1501,e.finalmemhebrew=1501,e.finalnun=1503,e.finalnunhebrew=1503,e.finalpe=1507,e.finalpehebrew=1507,e.finaltsadi=1509,e.finaltsadihebrew=1509,e.firsttonechinese=713,e.fisheye=9673,e.fitacyrillic=1139,e.five=53,e.fivearabic=1637,e.fivebengali=2539,e.fivecircle=9316,e.fivecircleinversesansserif=10126,e.fivedeva=2411,e.fiveeighths=8541,e.fivegujarati=2795,e.fivegurmukhi=2667,e.fivehackarabic=1637,e.fivehangzhou=12325,e.fiveideographicparen=12836,e.fiveinferior=8325,e.fivemonospace=65301,e.fiveoldstyle=63285,e.fiveparen=9336,e.fiveperiod=9356,e.fivepersian=1781,e.fiveroman=8564,e.fivesuperior=8309,e.fivethai=3669,e.fl=64258,e.f_l=64258,e.florin=402,e.fmonospace=65350,e.fmsquare=13209,e.fofanthai=3615,e.fofathai=3613,e.fongmanthai=3663,e.forall=8704,e.four=52,e.fourarabic=1636,e.fourbengali=2538,e.fourcircle=9315,e.fourcircleinversesansserif=10125,e.fourdeva=2410,e.fourgujarati=2794,e.fourgurmukhi=2666,e.fourhackarabic=1636,e.fourhangzhou=12324,e.fourideographicparen=12835,e.fourinferior=8324,e.fourmonospace=65300,e.fournumeratorbengali=2551,e.fouroldstyle=63284,e.fourparen=9335,e.fourperiod=9355,e.fourpersian=1780,e.fourroman=8563,e.foursuperior=8308,e.fourteencircle=9325,e.fourteenparen=9345,e.fourteenperiod=9365,e.fourthai=3668,e.fourthtonechinese=715,e.fparen=9377,e.fraction=8260,e.franc=8355,e.g=103,e.gabengali=2455,e.gacute=501,e.gadeva=2327,e.gafarabic=1711,e.gaffinalarabic=64403,e.gafinitialarabic=64404,e.gafmedialarabic=64405,e.gagujarati=2711,e.gagurmukhi=2583,e.gahiragana=12364,e.gakatakana=12460,e.gamma=947,e.gammalatinsmall=611,e.gammasuperior=736,e.gangiacoptic=1003,e.gbopomofo=12557,e.gbreve=287,e.gcaron=487,e.gcedilla=291,e.gcircle=9430,e.gcircumflex=285,e.gcommaaccent=291,e.gdot=289,e.gdotaccent=289,e.gecyrillic=1075,e.gehiragana=12370,e.gekatakana=12466,e.geometricallyequal=8785,e.gereshaccenthebrew=1436,e.gereshhebrew=1523,e.gereshmuqdamhebrew=1437,e.germandbls=223,e.gershayimaccenthebrew=1438,e.gershayimhebrew=1524,e.getamark=12307,e.ghabengali=2456,e.ghadarmenian=1394,e.ghadeva=2328,e.ghagujarati=2712,e.ghagurmukhi=2584,e.ghainarabic=1594,e.ghainfinalarabic=65230,e.ghaininitialarabic=65231,e.ghainmedialarabic=65232,e.ghemiddlehookcyrillic=1173,e.ghestrokecyrillic=1171,e.gheupturncyrillic=1169,e.ghhadeva=2394,e.ghhagurmukhi=2650,e.ghook=608,e.ghzsquare=13203,e.gihiragana=12366,e.gikatakana=12462,e.gimarmenian=1379,e.gimel=1490,e.gimeldagesh=64306,e.gimeldageshhebrew=64306,e.gimelhebrew=1490,e.gjecyrillic=1107,e.glottalinvertedstroke=446,e.glottalstop=660,e.glottalstopinverted=662,e.glottalstopmod=704,e.glottalstopreversed=661,e.glottalstopreversedmod=705,e.glottalstopreversedsuperior=740,e.glottalstopstroke=673,e.glottalstopstrokereversed=674,e.gmacron=7713,e.gmonospace=65351,e.gohiragana=12372,e.gokatakana=12468,e.gparen=9378,e.gpasquare=13228,e.gradient=8711,e.grave=96,e.gravebelowcmb=790,e.gravecmb=768,e.gravecomb=768,e.gravedeva=2387,e.gravelowmod=718,e.gravemonospace=65344,e.gravetonecmb=832,e.greater=62,e.greaterequal=8805,e.greaterequalorless=8923,e.greatermonospace=65310,e.greaterorequivalent=8819,e.greaterorless=8823,e.greateroverequal=8807,e.greatersmall=65125,e.gscript=609,e.gstroke=485,e.guhiragana=12368,e.guillemotleft=171,e.guillemotright=187,e.guilsinglleft=8249,e.guilsinglright=8250,e.gukatakana=12464,e.guramusquare=13080,e.gysquare=13257,e.h=104,e.haabkhasiancyrillic=1193,e.haaltonearabic=1729,e.habengali=2489,e.hadescendercyrillic=1203,e.hadeva=2361,e.hagujarati=2745,e.hagurmukhi=2617,e.haharabic=1581,e.hahfinalarabic=65186,e.hahinitialarabic=65187,e.hahiragana=12399,e.hahmedialarabic=65188,e.haitusquare=13098,e.hakatakana=12495,e.hakatakanahalfwidth=65418,e.halantgurmukhi=2637,e.hamzaarabic=1569,e.hamzalowarabic=1569,e.hangulfiller=12644,e.hardsigncyrillic=1098,e.harpoonleftbarbup=8636,e.harpoonrightbarbup=8640,e.hasquare=13258,e.hatafpatah=1458,e.hatafpatah16=1458,e.hatafpatah23=1458,e.hatafpatah2f=1458,e.hatafpatahhebrew=1458,e.hatafpatahnarrowhebrew=1458,e.hatafpatahquarterhebrew=1458,e.hatafpatahwidehebrew=1458,e.hatafqamats=1459,e.hatafqamats1b=1459,e.hatafqamats28=1459,e.hatafqamats34=1459,e.hatafqamatshebrew=1459,e.hatafqamatsnarrowhebrew=1459,e.hatafqamatsquarterhebrew=1459,e.hatafqamatswidehebrew=1459,e.hatafsegol=1457,e.hatafsegol17=1457,e.hatafsegol24=1457,e.hatafsegol30=1457,e.hatafsegolhebrew=1457,e.hatafsegolnarrowhebrew=1457,e.hatafsegolquarterhebrew=1457,e.hatafsegolwidehebrew=1457,e.hbar=295,e.hbopomofo=12559,e.hbrevebelow=7723,e.hcedilla=7721,e.hcircle=9431,e.hcircumflex=293,e.hdieresis=7719,e.hdotaccent=7715,e.hdotbelow=7717,e.he=1492,e.heart=9829,e.heartsuitblack=9829,e.heartsuitwhite=9825,e.hedagesh=64308,e.hedageshhebrew=64308,e.hehaltonearabic=1729,e.heharabic=1607,e.hehebrew=1492,e.hehfinalaltonearabic=64423,e.hehfinalalttwoarabic=65258,e.hehfinalarabic=65258,e.hehhamzaabovefinalarabic=64421,e.hehhamzaaboveisolatedarabic=64420,e.hehinitialaltonearabic=64424,e.hehinitialarabic=65259,e.hehiragana=12408,e.hehmedialaltonearabic=64425,e.hehmedialarabic=65260,e.heiseierasquare=13179,e.hekatakana=12504,e.hekatakanahalfwidth=65421,e.hekutaarusquare=13110,e.henghook=615,e.herutusquare=13113,e.het=1495,e.hethebrew=1495,e.hhook=614,e.hhooksuperior=689,e.hieuhacirclekorean=12923,e.hieuhaparenkorean=12827,e.hieuhcirclekorean=12909,e.hieuhkorean=12622,e.hieuhparenkorean=12813,e.hihiragana=12402,e.hikatakana=12498,e.hikatakanahalfwidth=65419,e.hiriq=1460,e.hiriq14=1460,e.hiriq21=1460,e.hiriq2d=1460,e.hiriqhebrew=1460,e.hiriqnarrowhebrew=1460,e.hiriqquarterhebrew=1460,e.hiriqwidehebrew=1460,e.hlinebelow=7830,e.hmonospace=65352,e.hoarmenian=1392,e.hohipthai=3627,e.hohiragana=12411,e.hokatakana=12507,e.hokatakanahalfwidth=65422,e.holam=1465,e.holam19=1465,e.holam26=1465,e.holam32=1465,e.holamhebrew=1465,e.holamnarrowhebrew=1465,e.holamquarterhebrew=1465,e.holamwidehebrew=1465,e.honokhukthai=3630,e.hookabovecomb=777,e.hookcmb=777,e.hookpalatalizedbelowcmb=801,e.hookretroflexbelowcmb=802,e.hoonsquare=13122,e.horicoptic=1001,e.horizontalbar=8213,e.horncmb=795,e.hotsprings=9832,e.house=8962,e.hparen=9379,e.hsuperior=688,e.hturned=613,e.huhiragana=12405,e.huiitosquare=13107,e.hukatakana=12501,e.hukatakanahalfwidth=65420,e.hungarumlaut=733,e.hungarumlautcmb=779,e.hv=405,e.hyphen=45,e.hypheninferior=63205,e.hyphenmonospace=65293,e.hyphensmall=65123,e.hyphensuperior=63206,e.hyphentwo=8208,e.i=105,e.iacute=237,e.iacyrillic=1103,e.ibengali=2439,e.ibopomofo=12583,e.ibreve=301,e.icaron=464,e.icircle=9432,e.icircumflex=238,e.icyrillic=1110,e.idblgrave=521,e.ideographearthcircle=12943,e.ideographfirecircle=12939,e.ideographicallianceparen=12863,e.ideographiccallparen=12858,e.ideographiccentrecircle=12965,e.ideographicclose=12294,e.ideographiccomma=12289,e.ideographiccommaleft=65380,e.ideographiccongratulationparen=12855,e.ideographiccorrectcircle=12963,e.ideographicearthparen=12847,e.ideographicenterpriseparen=12861,e.ideographicexcellentcircle=12957,e.ideographicfestivalparen=12864,e.ideographicfinancialcircle=12950,e.ideographicfinancialparen=12854,e.ideographicfireparen=12843,e.ideographichaveparen=12850,e.ideographichighcircle=12964,e.ideographiciterationmark=12293,e.ideographiclaborcircle=12952,e.ideographiclaborparen=12856,e.ideographicleftcircle=12967,e.ideographiclowcircle=12966,e.ideographicmedicinecircle=12969,e.ideographicmetalparen=12846,e.ideographicmoonparen=12842,e.ideographicnameparen=12852,e.ideographicperiod=12290,e.ideographicprintcircle=12958,e.ideographicreachparen=12867,e.ideographicrepresentparen=12857,e.ideographicresourceparen=12862,e.ideographicrightcircle=12968,e.ideographicsecretcircle=12953,e.ideographicselfparen=12866,e.ideographicsocietyparen=12851,e.ideographicspace=12288,e.ideographicspecialparen=12853,e.ideographicstockparen=12849,e.ideographicstudyparen=12859,e.ideographicsunparen=12848,e.ideographicsuperviseparen=12860,e.ideographicwaterparen=12844,e.ideographicwoodparen=12845,e.ideographiczero=12295,e.ideographmetalcircle=12942,e.ideographmooncircle=12938,e.ideographnamecircle=12948,e.ideographsuncircle=12944,e.ideographwatercircle=12940,e.ideographwoodcircle=12941,e.ideva=2311,e.idieresis=239,e.idieresisacute=7727,e.idieresiscyrillic=1253,e.idotbelow=7883,e.iebrevecyrillic=1239,e.iecyrillic=1077,e.ieungacirclekorean=12917,e.ieungaparenkorean=12821,e.ieungcirclekorean=12903,e.ieungkorean=12615,e.ieungparenkorean=12807,e.igrave=236,e.igujarati=2695,e.igurmukhi=2567,e.ihiragana=12356,e.ihookabove=7881,e.iibengali=2440,e.iicyrillic=1080,e.iideva=2312,e.iigujarati=2696,e.iigurmukhi=2568,e.iimatragurmukhi=2624,e.iinvertedbreve=523,e.iishortcyrillic=1081,e.iivowelsignbengali=2496,e.iivowelsigndeva=2368,e.iivowelsigngujarati=2752,e.ij=307,e.ikatakana=12452,e.ikatakanahalfwidth=65394,e.ikorean=12643,e.ilde=732,e.iluyhebrew=1452,e.imacron=299,e.imacroncyrillic=1251,e.imageorapproximatelyequal=8787,e.imatragurmukhi=2623,e.imonospace=65353,e.increment=8710,e.infinity=8734,e.iniarmenian=1387,e.integral=8747,e.integralbottom=8993,e.integralbt=8993,e.integralex=63733,e.integraltop=8992,e.integraltp=8992,e.intersection=8745,e.intisquare=13061,e.invbullet=9688,e.invcircle=9689,e.invsmileface=9787,e.iocyrillic=1105,e.iogonek=303,e.iota=953,e.iotadieresis=970,e.iotadieresistonos=912,e.iotalatin=617,e.iotatonos=943,e.iparen=9380,e.irigurmukhi=2674,e.ismallhiragana=12355,e.ismallkatakana=12451,e.ismallkatakanahalfwidth=65384,e.issharbengali=2554,e.istroke=616,e.isuperior=63213,e.iterationhiragana=12445,e.iterationkatakana=12541,e.itilde=297,e.itildebelow=7725,e.iubopomofo=12585,e.iucyrillic=1102,e.ivowelsignbengali=2495,e.ivowelsigndeva=2367,e.ivowelsigngujarati=2751,e.izhitsacyrillic=1141,e.izhitsadblgravecyrillic=1143,e.j=106,e.jaarmenian=1393,e.jabengali=2460,e.jadeva=2332,e.jagujarati=2716,e.jagurmukhi=2588,e.jbopomofo=12560,e.jcaron=496,e.jcircle=9433,e.jcircumflex=309,e.jcrossedtail=669,e.jdotlessstroke=607,e.jecyrillic=1112,e.jeemarabic=1580,e.jeemfinalarabic=65182,e.jeeminitialarabic=65183,e.jeemmedialarabic=65184,e.jeharabic=1688,e.jehfinalarabic=64395,e.jhabengali=2461,e.jhadeva=2333,e.jhagujarati=2717,e.jhagurmukhi=2589,e.jheharmenian=1403,e.jis=12292,e.jmonospace=65354,e.jparen=9381,e.jsuperior=690,e.k=107,e.kabashkircyrillic=1185,e.kabengali=2453,e.kacute=7729,e.kacyrillic=1082,e.kadescendercyrillic=1179,e.kadeva=2325,e.kaf=1499,e.kafarabic=1603,e.kafdagesh=64315,e.kafdageshhebrew=64315,e.kaffinalarabic=65242,e.kafhebrew=1499,e.kafinitialarabic=65243,e.kafmedialarabic=65244,e.kafrafehebrew=64333,e.kagujarati=2709,e.kagurmukhi=2581,e.kahiragana=12363,e.kahookcyrillic=1220,e.kakatakana=12459,e.kakatakanahalfwidth=65398,e.kappa=954,e.kappasymbolgreek=1008,e.kapyeounmieumkorean=12657,e.kapyeounphieuphkorean=12676,e.kapyeounpieupkorean=12664,e.kapyeounssangpieupkorean=12665,e.karoriisquare=13069,e.kashidaautoarabic=1600,e.kashidaautonosidebearingarabic=1600,e.kasmallkatakana=12533,e.kasquare=13188,e.kasraarabic=1616,e.kasratanarabic=1613,e.kastrokecyrillic=1183,e.katahiraprolongmarkhalfwidth=65392,e.kaverticalstrokecyrillic=1181,e.kbopomofo=12558,e.kcalsquare=13193,e.kcaron=489,e.kcedilla=311,e.kcircle=9434,e.kcommaaccent=311,e.kdotbelow=7731,e.keharmenian=1412,e.kehiragana=12369,e.kekatakana=12465,e.kekatakanahalfwidth=65401,e.kenarmenian=1391,e.kesmallkatakana=12534,e.kgreenlandic=312,e.khabengali=2454,e.khacyrillic=1093,e.khadeva=2326,e.khagujarati=2710,e.khagurmukhi=2582,e.khaharabic=1582,e.khahfinalarabic=65190,e.khahinitialarabic=65191,e.khahmedialarabic=65192,e.kheicoptic=999,e.khhadeva=2393,e.khhagurmukhi=2649,e.khieukhacirclekorean=12920,e.khieukhaparenkorean=12824,e.khieukhcirclekorean=12906,e.khieukhkorean=12619,e.khieukhparenkorean=12810,e.khokhaithai=3586,e.khokhonthai=3589,e.khokhuatthai=3587,e.khokhwaithai=3588,e.khomutthai=3675,e.khook=409,e.khorakhangthai=3590,e.khzsquare=13201,e.kihiragana=12365,e.kikatakana=12461,e.kikatakanahalfwidth=65399,e.kiroguramusquare=13077,e.kiromeetorusquare=13078,e.kirosquare=13076,e.kiyeokacirclekorean=12910,e.kiyeokaparenkorean=12814,e.kiyeokcirclekorean=12896,e.kiyeokkorean=12593,e.kiyeokparenkorean=12800,e.kiyeoksioskorean=12595;e.kjecyrillic=1116,e.klinebelow=7733,e.klsquare=13208,e.kmcubedsquare=13222,e.kmonospace=65355,e.kmsquaredsquare=13218,e.kohiragana=12371,e.kohmsquare=13248,e.kokaithai=3585,e.kokatakana=12467,e.kokatakanahalfwidth=65402,e.kooposquare=13086,e.koppacyrillic=1153,e.koreanstandardsymbol=12927,e.koroniscmb=835,e.kparen=9382,e.kpasquare=13226,e.ksicyrillic=1135,e.ktsquare=13263,e.kturned=670,e.kuhiragana=12367,e.kukatakana=12463,e.kukatakanahalfwidth=65400,e.kvsquare=13240,e.kwsquare=13246,e.l=108,e.labengali=2482,e.lacute=314,e.ladeva=2354,e.lagujarati=2738,e.lagurmukhi=2610,e.lakkhangyaothai=3653,e.lamaleffinalarabic=65276,e.lamalefhamzaabovefinalarabic=65272,e.lamalefhamzaaboveisolatedarabic=65271,e.lamalefhamzabelowfinalarabic=65274,e.lamalefhamzabelowisolatedarabic=65273,e.lamalefisolatedarabic=65275,e.lamalefmaddaabovefinalarabic=65270,e.lamalefmaddaaboveisolatedarabic=65269,e.lamarabic=1604,e.lambda=955,e.lambdastroke=411,e.lamed=1500,e.lameddagesh=64316,e.lameddageshhebrew=64316,e.lamedhebrew=1500,e.lamfinalarabic=65246,e.lamhahinitialarabic=64714,e.laminitialarabic=65247,e.lamjeeminitialarabic=64713,e.lamkhahinitialarabic=64715,e.lamlamhehisolatedarabic=65010,e.lammedialarabic=65248,e.lammeemhahinitialarabic=64904,e.lammeeminitialarabic=64716,e.largecircle=9711,e.lbar=410,e.lbelt=620,e.lbopomofo=12556,e.lcaron=318,e.lcedilla=316,e.lcircle=9435,e.lcircumflexbelow=7741,e.lcommaaccent=316,e.ldot=320,e.ldotaccent=320,e.ldotbelow=7735,e.ldotbelowmacron=7737,e.leftangleabovecmb=794,e.lefttackbelowcmb=792,e.less=60,e.lessequal=8804,e.lessequalorgreater=8922,e.lessmonospace=65308,e.lessorequivalent=8818,e.lessorgreater=8822,e.lessoverequal=8806,e.lesssmall=65124,e.lezh=622,e.lfblock=9612,e.lhookretroflex=621,e.lira=8356,e.liwnarmenian=1388,e.lj=457,e.ljecyrillic=1113,e.ll=63168,e.lladeva=2355,e.llagujarati=2739,e.llinebelow=7739,e.llladeva=2356,e.llvocalicbengali=2529,e.llvocalicdeva=2401,e.llvocalicvowelsignbengali=2531,e.llvocalicvowelsigndeva=2403,e.lmiddletilde=619,e.lmonospace=65356,e.lmsquare=13264,e.lochulathai=3628,e.logicaland=8743,e.logicalnot=172,e.logicalnotreversed=8976,e.logicalor=8744,e.lolingthai=3621,e.longs=383,e.lowlinecenterline=65102,e.lowlinecmb=818,e.lowlinedashed=65101,e.lozenge=9674,e.lparen=9383,e.lslash=322,e.lsquare=8467,e.lsuperior=63214,e.ltshade=9617,e.luthai=3622,e.lvocalicbengali=2444,e.lvocalicdeva=2316,e.lvocalicvowelsignbengali=2530,e.lvocalicvowelsigndeva=2402,e.lxsquare=13267,e.m=109,e.mabengali=2478,e.macron=175,e.macronbelowcmb=817,e.macroncmb=772,e.macronlowmod=717,e.macronmonospace=65507,e.macute=7743,e.madeva=2350,e.magujarati=2734,e.magurmukhi=2606,e.mahapakhhebrew=1444,e.mahapakhlefthebrew=1444,e.mahiragana=12414,e.maichattawalowleftthai=63637,e.maichattawalowrightthai=63636,e.maichattawathai=3659,e.maichattawaupperleftthai=63635,e.maieklowleftthai=63628,e.maieklowrightthai=63627,e.maiekthai=3656,e.maiekupperleftthai=63626,e.maihanakatleftthai=63620,e.maihanakatthai=3633,e.maitaikhuleftthai=63625,e.maitaikhuthai=3655,e.maitholowleftthai=63631,e.maitholowrightthai=63630,e.maithothai=3657,e.maithoupperleftthai=63629,e.maitrilowleftthai=63634,e.maitrilowrightthai=63633,e.maitrithai=3658,e.maitriupperleftthai=63632,e.maiyamokthai=3654,e.makatakana=12510,e.makatakanahalfwidth=65423,e.male=9794,e.mansyonsquare=13127,e.maqafhebrew=1470,e.mars=9794,e.masoracirclehebrew=1455,e.masquare=13187,e.mbopomofo=12551,e.mbsquare=13268,e.mcircle=9436,e.mcubedsquare=13221,e.mdotaccent=7745,e.mdotbelow=7747,e.meemarabic=1605,e.meemfinalarabic=65250,e.meeminitialarabic=65251,e.meemmedialarabic=65252,e.meemmeeminitialarabic=64721,e.meemmeemisolatedarabic=64584,e.meetorusquare=13133,e.mehiragana=12417,e.meizierasquare=13182,e.mekatakana=12513,e.mekatakanahalfwidth=65426,e.mem=1502,e.memdagesh=64318,e.memdageshhebrew=64318,e.memhebrew=1502,e.menarmenian=1396,e.merkhahebrew=1445,e.merkhakefulahebrew=1446,e.merkhakefulalefthebrew=1446,e.merkhalefthebrew=1445,e.mhook=625,e.mhzsquare=13202,e.middledotkatakanahalfwidth=65381,e.middot=183,e.mieumacirclekorean=12914,e.mieumaparenkorean=12818,e.mieumcirclekorean=12900,e.mieumkorean=12609,e.mieumpansioskorean=12656,e.mieumparenkorean=12804,e.mieumpieupkorean=12654,e.mieumsioskorean=12655,e.mihiragana=12415,e.mikatakana=12511,e.mikatakanahalfwidth=65424,e.minus=8722,e.minusbelowcmb=800,e.minuscircle=8854,e.minusmod=727,e.minusplus=8723,e.minute=8242,e.miribaarusquare=13130,e.mirisquare=13129,e.mlonglegturned=624,e.mlsquare=13206,e.mmcubedsquare=13219,e.mmonospace=65357,e.mmsquaredsquare=13215,e.mohiragana=12418,e.mohmsquare=13249,e.mokatakana=12514,e.mokatakanahalfwidth=65427,e.molsquare=13270,e.momathai=3617,e.moverssquare=13223,e.moverssquaredsquare=13224,e.mparen=9384,e.mpasquare=13227,e.mssquare=13235,e.msuperior=63215,e.mturned=623,e.mu=181,e.mu1=181,e.muasquare=13186,e.muchgreater=8811,e.muchless=8810,e.mufsquare=13196,e.mugreek=956,e.mugsquare=13197,e.muhiragana=12416,e.mukatakana=12512,e.mukatakanahalfwidth=65425,e.mulsquare=13205,e.multiply=215,e.mumsquare=13211,e.munahhebrew=1443,e.munahlefthebrew=1443,e.musicalnote=9834,e.musicalnotedbl=9835,e.musicflatsign=9837,e.musicsharpsign=9839,e.mussquare=13234,e.muvsquare=13238,e.muwsquare=13244,e.mvmegasquare=13241,e.mvsquare=13239,e.mwmegasquare=13247,e.mwsquare=13245,e.n=110,e.nabengali=2472,e.nabla=8711,e.nacute=324,e.nadeva=2344,e.nagujarati=2728,e.nagurmukhi=2600,e.nahiragana=12394,e.nakatakana=12490,e.nakatakanahalfwidth=65413,e.napostrophe=329,e.nasquare=13185,e.nbopomofo=12555,e.nbspace=160,e.ncaron=328,e.ncedilla=326,e.ncircle=9437,e.ncircumflexbelow=7755,e.ncommaaccent=326,e.ndotaccent=7749,e.ndotbelow=7751,e.nehiragana=12397,e.nekatakana=12493,e.nekatakanahalfwidth=65416,e.newsheqelsign=8362,e.nfsquare=13195,e.ngabengali=2457,e.ngadeva=2329,e.ngagujarati=2713,e.ngagurmukhi=2585,e.ngonguthai=3591,e.nhiragana=12435,e.nhookleft=626,e.nhookretroflex=627,e.nieunacirclekorean=12911,e.nieunaparenkorean=12815,e.nieuncieuckorean=12597,e.nieuncirclekorean=12897,e.nieunhieuhkorean=12598,e.nieunkorean=12596,e.nieunpansioskorean=12648,e.nieunparenkorean=12801,e.nieunsioskorean=12647,e.nieuntikeutkorean=12646,e.nihiragana=12395,e.nikatakana=12491,e.nikatakanahalfwidth=65414,e.nikhahitleftthai=63641,e.nikhahitthai=3661,e.nine=57,e.ninearabic=1641,e.ninebengali=2543,e.ninecircle=9320,e.ninecircleinversesansserif=10130,e.ninedeva=2415,e.ninegujarati=2799,e.ninegurmukhi=2671,e.ninehackarabic=1641,e.ninehangzhou=12329,e.nineideographicparen=12840,e.nineinferior=8329,e.ninemonospace=65305,e.nineoldstyle=63289,e.nineparen=9340,e.nineperiod=9360,e.ninepersian=1785,e.nineroman=8568,e.ninesuperior=8313,e.nineteencircle=9330,e.nineteenparen=9350,e.nineteenperiod=9370,e.ninethai=3673,e.nj=460,e.njecyrillic=1114,e.nkatakana=12531,e.nkatakanahalfwidth=65437,e.nlegrightlong=414,e.nlinebelow=7753,e.nmonospace=65358,e.nmsquare=13210,e.nnabengali=2467,e.nnadeva=2339,e.nnagujarati=2723,e.nnagurmukhi=2595,e.nnnadeva=2345,e.nohiragana=12398,e.nokatakana=12494,e.nokatakanahalfwidth=65417,e.nonbreakingspace=160,e.nonenthai=3603,e.nonuthai=3609,e.noonarabic=1606,e.noonfinalarabic=65254,e.noonghunnaarabic=1722,e.noonghunnafinalarabic=64415,e.nooninitialarabic=65255,e.noonjeeminitialarabic=64722,e.noonjeemisolatedarabic=64587,e.noonmedialarabic=65256,e.noonmeeminitialarabic=64725,e.noonmeemisolatedarabic=64590,e.noonnoonfinalarabic=64653,e.notcontains=8716,e.notelement=8713,e.notelementof=8713,e.notequal=8800,e.notgreater=8815,e.notgreaternorequal=8817,e.notgreaternorless=8825,e.notidentical=8802,e.notless=8814,e.notlessnorequal=8816,e.notparallel=8742,e.notprecedes=8832,e.notsubset=8836,e.notsucceeds=8833,e.notsuperset=8837,e.nowarmenian=1398,e.nparen=9385,e.nssquare=13233,e.nsuperior=8319,e.ntilde=241,e.nu=957,e.nuhiragana=12396,e.nukatakana=12492,e.nukatakanahalfwidth=65415,e.nuktabengali=2492,e.nuktadeva=2364,e.nuktagujarati=2748,e.nuktagurmukhi=2620,e.numbersign=35,e.numbersignmonospace=65283,e.numbersignsmall=65119,e.numeralsigngreek=884,e.numeralsignlowergreek=885,e.numero=8470,e.nun=1504,e.nundagesh=64320,e.nundageshhebrew=64320,e.nunhebrew=1504,e.nvsquare=13237,e.nwsquare=13243,e.nyabengali=2462,e.nyadeva=2334,e.nyagujarati=2718,e.nyagurmukhi=2590,e.o=111,e.oacute=243,e.oangthai=3629,e.obarred=629,e.obarredcyrillic=1257,e.obarreddieresiscyrillic=1259,e.obengali=2451,e.obopomofo=12571,e.obreve=335,e.ocandradeva=2321,e.ocandragujarati=2705,e.ocandravowelsigndeva=2377,e.ocandravowelsigngujarati=2761,e.ocaron=466,e.ocircle=9438,e.ocircumflex=244,e.ocircumflexacute=7889,e.ocircumflexdotbelow=7897,e.ocircumflexgrave=7891,e.ocircumflexhookabove=7893,e.ocircumflextilde=7895,e.ocyrillic=1086,e.odblacute=337,e.odblgrave=525,e.odeva=2323,e.odieresis=246,e.odieresiscyrillic=1255,e.odotbelow=7885,e.oe=339,e.oekorean=12634,e.ogonek=731,e.ogonekcmb=808,e.ograve=242,e.ogujarati=2707,e.oharmenian=1413,e.ohiragana=12362,e.ohookabove=7887,e.ohorn=417,e.ohornacute=7899,e.ohorndotbelow=7907,e.ohorngrave=7901,e.ohornhookabove=7903,e.ohorntilde=7905,e.ohungarumlaut=337,e.oi=419,e.oinvertedbreve=527,e.okatakana=12458,e.okatakanahalfwidth=65397,e.okorean=12631,e.olehebrew=1451,e.omacron=333,e.omacronacute=7763,e.omacrongrave=7761,e.omdeva=2384,e.omega=969,e.omega1=982,e.omegacyrillic=1121,e.omegalatinclosed=631,e.omegaroundcyrillic=1147,e.omegatitlocyrillic=1149,e.omegatonos=974,e.omgujarati=2768,e.omicron=959,e.omicrontonos=972,e.omonospace=65359,e.one=49,e.onearabic=1633,e.onebengali=2535,e.onecircle=9312,e.onecircleinversesansserif=10122,e.onedeva=2407,e.onedotenleader=8228,e.oneeighth=8539,e.onefitted=63196,e.onegujarati=2791,e.onegurmukhi=2663,e.onehackarabic=1633,e.onehalf=189,e.onehangzhou=12321,e.oneideographicparen=12832,e.oneinferior=8321,e.onemonospace=65297,e.onenumeratorbengali=2548,e.oneoldstyle=63281,e.oneparen=9332,e.oneperiod=9352,e.onepersian=1777,e.onequarter=188,e.oneroman=8560,e.onesuperior=185,e.onethai=3665,e.onethird=8531,e.oogonek=491,e.oogonekmacron=493,e.oogurmukhi=2579,e.oomatragurmukhi=2635,e.oopen=596,e.oparen=9386,e.openbullet=9702,e.option=8997,e.ordfeminine=170,e.ordmasculine=186,e.orthogonal=8735,e.oshortdeva=2322,e.oshortvowelsigndeva=2378,e.oslash=248,e.oslashacute=511,e.osmallhiragana=12361,e.osmallkatakana=12457,e.osmallkatakanahalfwidth=65387,e.ostrokeacute=511,e.osuperior=63216,e.otcyrillic=1151,e.otilde=245,e.otildeacute=7757,e.otildedieresis=7759,e.oubopomofo=12577,e.overline=8254,e.overlinecenterline=65098,e.overlinecmb=773,e.overlinedashed=65097,e.overlinedblwavy=65100,e.overlinewavy=65099,e.overscore=175,e.ovowelsignbengali=2507,e.ovowelsigndeva=2379,e.ovowelsigngujarati=2763,e.p=112,e.paampssquare=13184,e.paasentosquare=13099,e.pabengali=2474,e.pacute=7765,e.padeva=2346,e.pagedown=8671,e.pageup=8670,e.pagujarati=2730,e.pagurmukhi=2602,e.pahiragana=12401,e.paiyannoithai=3631,e.pakatakana=12497,e.palatalizationcyrilliccmb=1156,e.palochkacyrillic=1216,e.pansioskorean=12671,e.paragraph=182,e.parallel=8741,e.parenleft=40,e.parenleftaltonearabic=64830,e.parenleftbt=63725,e.parenleftex=63724,e.parenleftinferior=8333,e.parenleftmonospace=65288,e.parenleftsmall=65113,e.parenleftsuperior=8317,e.parenlefttp=63723,e.parenleftvertical=65077,e.parenright=41,e.parenrightaltonearabic=64831,e.parenrightbt=63736,e.parenrightex=63735,e.parenrightinferior=8334,e.parenrightmonospace=65289,e.parenrightsmall=65114,e.parenrightsuperior=8318,e.parenrighttp=63734,e.parenrightvertical=65078,e.partialdiff=8706,e.paseqhebrew=1472,e.pashtahebrew=1433,e.pasquare=13225,e.patah=1463,e.patah11=1463,e.patah1d=1463,e.patah2a=1463,e.patahhebrew=1463,e.patahnarrowhebrew=1463,e.patahquarterhebrew=1463,e.patahwidehebrew=1463,e.pazerhebrew=1441,e.pbopomofo=12550,e.pcircle=9439,e.pdotaccent=7767,e.pe=1508,e.pecyrillic=1087,e.pedagesh=64324,e.pedageshhebrew=64324,e.peezisquare=13115,e.pefinaldageshhebrew=64323,e.peharabic=1662,e.peharmenian=1402,e.pehebrew=1508,e.pehfinalarabic=64343,e.pehinitialarabic=64344,e.pehiragana=12410,e.pehmedialarabic=64345,e.pekatakana=12506,e.pemiddlehookcyrillic=1191,e.perafehebrew=64334,e.percent=37,e.percentarabic=1642,e.percentmonospace=65285,e.percentsmall=65130,e.period=46,e.periodarmenian=1417,e.periodcentered=183,e.periodhalfwidth=65377,e.periodinferior=63207,e.periodmonospace=65294,e.periodsmall=65106,e.periodsuperior=63208,e.perispomenigreekcmb=834,e.perpendicular=8869,e.perthousand=8240,e.peseta=8359,e.pfsquare=13194,e.phabengali=2475,e.phadeva=2347,e.phagujarati=2731,e.phagurmukhi=2603,e.phi=966,e.phi1=981,e.phieuphacirclekorean=12922,e.phieuphaparenkorean=12826,e.phieuphcirclekorean=12908,e.phieuphkorean=12621,e.phieuphparenkorean=12812,e.philatin=632,e.phinthuthai=3642,e.phisymbolgreek=981,e.phook=421,e.phophanthai=3614,e.phophungthai=3612,e.phosamphaothai=3616,e.pi=960,e.pieupacirclekorean=12915,e.pieupaparenkorean=12819,e.pieupcieuckorean=12662,e.pieupcirclekorean=12901,e.pieupkiyeokkorean=12658,e.pieupkorean=12610,e.pieupparenkorean=12805,e.pieupsioskiyeokkorean=12660,e.pieupsioskorean=12612,e.pieupsiostikeutkorean=12661,e.pieupthieuthkorean=12663,e.pieuptikeutkorean=12659,e.pihiragana=12404,e.pikatakana=12500,e.pisymbolgreek=982,e.piwrarmenian=1411,e.planckover2pi=8463,e.planckover2pi1=8463,e.plus=43,e.plusbelowcmb=799,e.pluscircle=8853,e.plusminus=177,e.plusmod=726,e.plusmonospace=65291,e.plussmall=65122,e.plussuperior=8314,e.pmonospace=65360,e.pmsquare=13272,e.pohiragana=12413,e.pointingindexdownwhite=9759,e.pointingindexleftwhite=9756,e.pointingindexrightwhite=9758,e.pointingindexupwhite=9757,e.pokatakana=12509,e.poplathai=3611,e.postalmark=12306,e.postalmarkface=12320,e.pparen=9387,e.precedes=8826,e.prescription=8478,e.primemod=697,e.primereversed=8245,e.product=8719,e.projective=8965,e.prolongedkana=12540,e.propellor=8984,e.propersubset=8834,e.propersuperset=8835,e.proportion=8759,e.proportional=8733,e.psi=968,e.psicyrillic=1137,e.psilipneumatacyrilliccmb=1158,e.pssquare=13232,e.puhiragana=12407,e.pukatakana=12503,e.pvsquare=13236,e.pwsquare=13242,e.q=113,e.qadeva=2392,e.qadmahebrew=1448,e.qafarabic=1602,e.qaffinalarabic=65238,e.qafinitialarabic=65239,e.qafmedialarabic=65240,e.qamats=1464,e.qamats10=1464,e.qamats1a=1464,e.qamats1c=1464,e.qamats27=1464,e.qamats29=1464,e.qamats33=1464,e.qamatsde=1464,e.qamatshebrew=1464,e.qamatsnarrowhebrew=1464,e.qamatsqatanhebrew=1464,e.qamatsqatannarrowhebrew=1464,e.qamatsqatanquarterhebrew=1464,e.qamatsqatanwidehebrew=1464,e.qamatsquarterhebrew=1464,e.qamatswidehebrew=1464,e.qarneyparahebrew=1439,e.qbopomofo=12561,e.qcircle=9440,e.qhook=672,e.qmonospace=65361,e.qof=1511,e.qofdagesh=64327,e.qofdageshhebrew=64327,e.qofhebrew=1511,e.qparen=9388,e.quarternote=9833,e.qubuts=1467,e.qubuts18=1467,e.qubuts25=1467,e.qubuts31=1467,e.qubutshebrew=1467,e.qubutsnarrowhebrew=1467,e.qubutsquarterhebrew=1467,e.qubutswidehebrew=1467,e.question=63,e.questionarabic=1567,e.questionarmenian=1374,e.questiondown=191,e.questiondownsmall=63423,e.questiongreek=894,e.questionmonospace=65311,e.questionsmall=63295,e.quotedbl=34,e.quotedblbase=8222,e.quotedblleft=8220,e.quotedblmonospace=65282,e.quotedblprime=12318,e.quotedblprimereversed=12317,e.quotedblright=8221,e.quoteleft=8216,e.quoteleftreversed=8219,e.quotereversed=8219,e.quoteright=8217,e.quoterightn=329,e.quotesinglbase=8218,e.quotesingle=39,e.quotesinglemonospace=65287,e.r=114,e.raarmenian=1404,e.rabengali=2480,e.racute=341,e.radeva=2352,e.radical=8730,e.radicalex=63717,e.radoverssquare=13230,e.radoverssquaredsquare=13231,e.radsquare=13229,e.rafe=1471,e.rafehebrew=1471,e.ragujarati=2736,e.ragurmukhi=2608,e.rahiragana=12425,e.rakatakana=12521,e.rakatakanahalfwidth=65431,e.ralowerdiagonalbengali=2545,e.ramiddlediagonalbengali=2544,e.ramshorn=612,e.ratio=8758,e.rbopomofo=12566,e.rcaron=345,e.rcedilla=343,e.rcircle=9441,e.rcommaaccent=343,e.rdblgrave=529,e.rdotaccent=7769,e.rdotbelow=7771,e.rdotbelowmacron=7773,e.referencemark=8251,e.reflexsubset=8838,e.reflexsuperset=8839,e.registered=174,e.registersans=63720,e.registerserif=63194,e.reharabic=1585,e.reharmenian=1408,e.rehfinalarabic=65198,e.rehiragana=12428,e.rekatakana=12524;e.rekatakanahalfwidth=65434,e.resh=1512,e.reshdageshhebrew=64328,e.reshhebrew=1512,e.reversedtilde=8765,e.reviahebrew=1431,e.reviamugrashhebrew=1431,e.revlogicalnot=8976,e.rfishhook=638,e.rfishhookreversed=639,e.rhabengali=2525,e.rhadeva=2397,e.rho=961,e.rhook=637,e.rhookturned=635,e.rhookturnedsuperior=693,e.rhosymbolgreek=1009,e.rhotichookmod=734,e.rieulacirclekorean=12913,e.rieulaparenkorean=12817,e.rieulcirclekorean=12899,e.rieulhieuhkorean=12608,e.rieulkiyeokkorean=12602,e.rieulkiyeoksioskorean=12649,e.rieulkorean=12601,e.rieulmieumkorean=12603,e.rieulpansioskorean=12652,e.rieulparenkorean=12803,e.rieulphieuphkorean=12607,e.rieulpieupkorean=12604,e.rieulpieupsioskorean=12651,e.rieulsioskorean=12605,e.rieulthieuthkorean=12606,e.rieultikeutkorean=12650,e.rieulyeorinhieuhkorean=12653,e.rightangle=8735,e.righttackbelowcmb=793,e.righttriangle=8895,e.rihiragana=12426,e.rikatakana=12522,e.rikatakanahalfwidth=65432,e.ring=730,e.ringbelowcmb=805,e.ringcmb=778,e.ringhalfleft=703,e.ringhalfleftarmenian=1369,e.ringhalfleftbelowcmb=796,e.ringhalfleftcentered=723,e.ringhalfright=702,e.ringhalfrightbelowcmb=825,e.ringhalfrightcentered=722,e.rinvertedbreve=531,e.rittorusquare=13137,e.rlinebelow=7775,e.rlongleg=636,e.rlonglegturned=634,e.rmonospace=65362,e.rohiragana=12429,e.rokatakana=12525,e.rokatakanahalfwidth=65435,e.roruathai=3619,e.rparen=9389,e.rrabengali=2524,e.rradeva=2353,e.rragurmukhi=2652,e.rreharabic=1681,e.rrehfinalarabic=64397,e.rrvocalicbengali=2528,e.rrvocalicdeva=2400,e.rrvocalicgujarati=2784,e.rrvocalicvowelsignbengali=2500,e.rrvocalicvowelsigndeva=2372,e.rrvocalicvowelsigngujarati=2756,e.rsuperior=63217,e.rtblock=9616,e.rturned=633,e.rturnedsuperior=692,e.ruhiragana=12427,e.rukatakana=12523,e.rukatakanahalfwidth=65433,e.rupeemarkbengali=2546,e.rupeesignbengali=2547,e.rupiah=63197,e.ruthai=3620,e.rvocalicbengali=2443,e.rvocalicdeva=2315,e.rvocalicgujarati=2699,e.rvocalicvowelsignbengali=2499,e.rvocalicvowelsigndeva=2371,e.rvocalicvowelsigngujarati=2755,e.s=115,e.sabengali=2488,e.sacute=347,e.sacutedotaccent=7781,e.sadarabic=1589,e.sadeva=2360,e.sadfinalarabic=65210,e.sadinitialarabic=65211,e.sadmedialarabic=65212,e.sagujarati=2744,e.sagurmukhi=2616,e.sahiragana=12373,e.sakatakana=12469,e.sakatakanahalfwidth=65403,e.sallallahoualayhewasallamarabic=65018,e.samekh=1505,e.samekhdagesh=64321,e.samekhdageshhebrew=64321,e.samekhhebrew=1505,e.saraaathai=3634,e.saraaethai=3649,e.saraaimaimalaithai=3652,e.saraaimaimuanthai=3651,e.saraamthai=3635,e.saraathai=3632,e.saraethai=3648,e.saraiileftthai=63622,e.saraiithai=3637,e.saraileftthai=63621,e.saraithai=3636,e.saraothai=3650,e.saraueeleftthai=63624,e.saraueethai=3639,e.saraueleftthai=63623,e.sarauethai=3638,e.sarauthai=3640,e.sarauuthai=3641,e.sbopomofo=12569,e.scaron=353,e.scarondotaccent=7783,e.scedilla=351,e.schwa=601,e.schwacyrillic=1241,e.schwadieresiscyrillic=1243,e.schwahook=602,e.scircle=9442,e.scircumflex=349,e.scommaaccent=537,e.sdotaccent=7777,e.sdotbelow=7779,e.sdotbelowdotaccent=7785,e.seagullbelowcmb=828,e.second=8243,e.secondtonechinese=714,e.section=167,e.seenarabic=1587,e.seenfinalarabic=65202,e.seeninitialarabic=65203,e.seenmedialarabic=65204,e.segol=1462,e.segol13=1462,e.segol1f=1462,e.segol2c=1462,e.segolhebrew=1462,e.segolnarrowhebrew=1462,e.segolquarterhebrew=1462,e.segoltahebrew=1426,e.segolwidehebrew=1462,e.seharmenian=1405,e.sehiragana=12379,e.sekatakana=12475,e.sekatakanahalfwidth=65406,e.semicolon=59,e.semicolonarabic=1563,e.semicolonmonospace=65307,e.semicolonsmall=65108,e.semivoicedmarkkana=12444,e.semivoicedmarkkanahalfwidth=65439,e.sentisquare=13090,e.sentosquare=13091,e.seven=55,e.sevenarabic=1639,e.sevenbengali=2541,e.sevencircle=9318,e.sevencircleinversesansserif=10128,e.sevendeva=2413,e.seveneighths=8542,e.sevengujarati=2797,e.sevengurmukhi=2669,e.sevenhackarabic=1639,e.sevenhangzhou=12327,e.sevenideographicparen=12838,e.seveninferior=8327,e.sevenmonospace=65303,e.sevenoldstyle=63287,e.sevenparen=9338,e.sevenperiod=9358,e.sevenpersian=1783,e.sevenroman=8566,e.sevensuperior=8311,e.seventeencircle=9328,e.seventeenparen=9348,e.seventeenperiod=9368,e.seventhai=3671,e.sfthyphen=173,e.shaarmenian=1399,e.shabengali=2486,e.shacyrillic=1096,e.shaddaarabic=1617,e.shaddadammaarabic=64609,e.shaddadammatanarabic=64606,e.shaddafathaarabic=64608,e.shaddakasraarabic=64610,e.shaddakasratanarabic=64607,e.shade=9618,e.shadedark=9619,e.shadelight=9617,e.shademedium=9618,e.shadeva=2358,e.shagujarati=2742,e.shagurmukhi=2614,e.shalshelethebrew=1427,e.shbopomofo=12565,e.shchacyrillic=1097,e.sheenarabic=1588,e.sheenfinalarabic=65206,e.sheeninitialarabic=65207,e.sheenmedialarabic=65208,e.sheicoptic=995,e.sheqel=8362,e.sheqelhebrew=8362,e.sheva=1456,e.sheva115=1456,e.sheva15=1456,e.sheva22=1456,e.sheva2e=1456,e.shevahebrew=1456,e.shevanarrowhebrew=1456,e.shevaquarterhebrew=1456,e.shevawidehebrew=1456,e.shhacyrillic=1211,e.shimacoptic=1005,e.shin=1513,e.shindagesh=64329,e.shindageshhebrew=64329,e.shindageshshindot=64300,e.shindageshshindothebrew=64300,e.shindageshsindot=64301,e.shindageshsindothebrew=64301,e.shindothebrew=1473,e.shinhebrew=1513,e.shinshindot=64298,e.shinshindothebrew=64298,e.shinsindot=64299,e.shinsindothebrew=64299,e.shook=642,e.sigma=963,e.sigma1=962,e.sigmafinal=962,e.sigmalunatesymbolgreek=1010,e.sihiragana=12375,e.sikatakana=12471,e.sikatakanahalfwidth=65404,e.siluqhebrew=1469,e.siluqlefthebrew=1469,e.similar=8764,e.sindothebrew=1474,e.siosacirclekorean=12916,e.siosaparenkorean=12820,e.sioscieuckorean=12670,e.sioscirclekorean=12902,e.sioskiyeokkorean=12666,e.sioskorean=12613,e.siosnieunkorean=12667,e.siosparenkorean=12806,e.siospieupkorean=12669,e.siostikeutkorean=12668,e.six=54,e.sixarabic=1638,e.sixbengali=2540,e.sixcircle=9317,e.sixcircleinversesansserif=10127,e.sixdeva=2412,e.sixgujarati=2796,e.sixgurmukhi=2668,e.sixhackarabic=1638,e.sixhangzhou=12326,e.sixideographicparen=12837,e.sixinferior=8326,e.sixmonospace=65302,e.sixoldstyle=63286,e.sixparen=9337,e.sixperiod=9357,e.sixpersian=1782,e.sixroman=8565,e.sixsuperior=8310,e.sixteencircle=9327,e.sixteencurrencydenominatorbengali=2553,e.sixteenparen=9347,e.sixteenperiod=9367,e.sixthai=3670,e.slash=47,e.slashmonospace=65295,e.slong=383,e.slongdotaccent=7835,e.smileface=9786,e.smonospace=65363,e.sofpasuqhebrew=1475,e.softhyphen=173,e.softsigncyrillic=1100,e.sohiragana=12381,e.sokatakana=12477,e.sokatakanahalfwidth=65407,e.soliduslongoverlaycmb=824,e.solidusshortoverlaycmb=823,e.sorusithai=3625,e.sosalathai=3624,e.sosothai=3595,e.sosuathai=3626,e.space=32,e.spacehackarabic=32,e.spade=9824,e.spadesuitblack=9824,e.spadesuitwhite=9828,e.sparen=9390,e.squarebelowcmb=827,e.squarecc=13252,e.squarecm=13213,e.squarediagonalcrosshatchfill=9641,e.squarehorizontalfill=9636,e.squarekg=13199,e.squarekm=13214,e.squarekmcapital=13262,e.squareln=13265,e.squarelog=13266,e.squaremg=13198,e.squaremil=13269,e.squaremm=13212,e.squaremsquared=13217,e.squareorthogonalcrosshatchfill=9638,e.squareupperlefttolowerrightfill=9639,e.squareupperrighttolowerleftfill=9640,e.squareverticalfill=9637,e.squarewhitewithsmallblack=9635,e.srsquare=13275,e.ssabengali=2487,e.ssadeva=2359,e.ssagujarati=2743,e.ssangcieuckorean=12617,e.ssanghieuhkorean=12677,e.ssangieungkorean=12672,e.ssangkiyeokkorean=12594,e.ssangnieunkorean=12645,e.ssangpieupkorean=12611,e.ssangsioskorean=12614,e.ssangtikeutkorean=12600,e.ssuperior=63218,e.sterling=163,e.sterlingmonospace=65505,e.strokelongoverlaycmb=822,e.strokeshortoverlaycmb=821,e.subset=8834,e.subsetnotequal=8842,e.subsetorequal=8838,e.succeeds=8827,e.suchthat=8715,e.suhiragana=12377,e.sukatakana=12473,e.sukatakanahalfwidth=65405,e.sukunarabic=1618,e.summation=8721,e.sun=9788,e.superset=8835,e.supersetnotequal=8843,e.supersetorequal=8839,e.svsquare=13276,e.syouwaerasquare=13180,e.t=116,e.tabengali=2468,e.tackdown=8868,e.tackleft=8867,e.tadeva=2340,e.tagujarati=2724,e.tagurmukhi=2596,e.taharabic=1591,e.tahfinalarabic=65218,e.tahinitialarabic=65219,e.tahiragana=12383,e.tahmedialarabic=65220,e.taisyouerasquare=13181,e.takatakana=12479,e.takatakanahalfwidth=65408,e.tatweelarabic=1600,e.tau=964,e.tav=1514,e.tavdages=64330,e.tavdagesh=64330,e.tavdageshhebrew=64330,e.tavhebrew=1514,e.tbar=359,e.tbopomofo=12554,e.tcaron=357,e.tccurl=680,e.tcedilla=355,e.tcheharabic=1670,e.tchehfinalarabic=64379,e.tchehinitialarabic=64380,e.tchehmedialarabic=64381,e.tcircle=9443,e.tcircumflexbelow=7793,e.tcommaaccent=355,e.tdieresis=7831,e.tdotaccent=7787,e.tdotbelow=7789,e.tecyrillic=1090,e.tedescendercyrillic=1197,e.teharabic=1578,e.tehfinalarabic=65174,e.tehhahinitialarabic=64674,e.tehhahisolatedarabic=64524,e.tehinitialarabic=65175,e.tehiragana=12390,e.tehjeeminitialarabic=64673,e.tehjeemisolatedarabic=64523,e.tehmarbutaarabic=1577,e.tehmarbutafinalarabic=65172,e.tehmedialarabic=65176,e.tehmeeminitialarabic=64676,e.tehmeemisolatedarabic=64526,e.tehnoonfinalarabic=64627,e.tekatakana=12486,e.tekatakanahalfwidth=65411,e.telephone=8481,e.telephoneblack=9742,e.telishagedolahebrew=1440,e.telishaqetanahebrew=1449,e.tencircle=9321,e.tenideographicparen=12841,e.tenparen=9341,e.tenperiod=9361,e.tenroman=8569,e.tesh=679,e.tet=1496,e.tetdagesh=64312,e.tetdageshhebrew=64312,e.tethebrew=1496,e.tetsecyrillic=1205,e.tevirhebrew=1435,e.tevirlefthebrew=1435,e.thabengali=2469,e.thadeva=2341,e.thagujarati=2725,e.thagurmukhi=2597,e.thalarabic=1584,e.thalfinalarabic=65196,e.thanthakhatlowleftthai=63640,e.thanthakhatlowrightthai=63639,e.thanthakhatthai=3660,e.thanthakhatupperleftthai=63638,e.theharabic=1579,e.thehfinalarabic=65178,e.thehinitialarabic=65179,e.thehmedialarabic=65180,e.thereexists=8707,e.therefore=8756,e.theta=952,e.theta1=977,e.thetasymbolgreek=977,e.thieuthacirclekorean=12921,e.thieuthaparenkorean=12825,e.thieuthcirclekorean=12907,e.thieuthkorean=12620,e.thieuthparenkorean=12811,e.thirteencircle=9324,e.thirteenparen=9344,e.thirteenperiod=9364,e.thonangmonthothai=3601,e.thook=429,e.thophuthaothai=3602,e.thorn=254,e.thothahanthai=3607,e.thothanthai=3600,e.thothongthai=3608,e.thothungthai=3606,e.thousandcyrillic=1154,e.thousandsseparatorarabic=1644,e.thousandsseparatorpersian=1644,e.three=51,e.threearabic=1635,e.threebengali=2537,e.threecircle=9314,e.threecircleinversesansserif=10124,e.threedeva=2409,e.threeeighths=8540,e.threegujarati=2793,e.threegurmukhi=2665,e.threehackarabic=1635,e.threehangzhou=12323,e.threeideographicparen=12834,e.threeinferior=8323,e.threemonospace=65299,e.threenumeratorbengali=2550,e.threeoldstyle=63283,e.threeparen=9334,e.threeperiod=9354,e.threepersian=1779,e.threequarters=190,e.threequartersemdash=63198,e.threeroman=8562,e.threesuperior=179,e.threethai=3667,e.thzsquare=13204,e.tihiragana=12385,e.tikatakana=12481,e.tikatakanahalfwidth=65409,e.tikeutacirclekorean=12912,e.tikeutaparenkorean=12816,e.tikeutcirclekorean=12898,e.tikeutkorean=12599,e.tikeutparenkorean=12802,e.tilde=732,e.tildebelowcmb=816,e.tildecmb=771,e.tildecomb=771,e.tildedoublecmb=864,e.tildeoperator=8764,e.tildeoverlaycmb=820,e.tildeverticalcmb=830,e.timescircle=8855,e.tipehahebrew=1430,e.tipehalefthebrew=1430,e.tippigurmukhi=2672,e.titlocyrilliccmb=1155,e.tiwnarmenian=1407,e.tlinebelow=7791,e.tmonospace=65364,e.toarmenian=1385,e.tohiragana=12392,e.tokatakana=12488,e.tokatakanahalfwidth=65412,e.tonebarextrahighmod=741,e.tonebarextralowmod=745,e.tonebarhighmod=742,e.tonebarlowmod=744,e.tonebarmidmod=743,e.tonefive=445,e.tonesix=389,e.tonetwo=424,e.tonos=900,e.tonsquare=13095,e.topatakthai=3599,e.tortoiseshellbracketleft=12308,e.tortoiseshellbracketleftsmall=65117,e.tortoiseshellbracketleftvertical=65081,e.tortoiseshellbracketright=12309,e.tortoiseshellbracketrightsmall=65118,e.tortoiseshellbracketrightvertical=65082,e.totaothai=3605,e.tpalatalhook=427,e.tparen=9391,e.trademark=8482,e.trademarksans=63722,e.trademarkserif=63195,e.tretroflexhook=648,e.triagdn=9660,e.triaglf=9668,e.triagrt=9658,e.triagup=9650,e.ts=678,e.tsadi=1510,e.tsadidagesh=64326,e.tsadidageshhebrew=64326,e.tsadihebrew=1510,e.tsecyrillic=1094,e.tsere=1461,e.tsere12=1461,e.tsere1e=1461,e.tsere2b=1461,e.tserehebrew=1461,e.tserenarrowhebrew=1461,e.tserequarterhebrew=1461,e.tserewidehebrew=1461,e.tshecyrillic=1115,e.tsuperior=63219,e.ttabengali=2463,e.ttadeva=2335,e.ttagujarati=2719,e.ttagurmukhi=2591,e.tteharabic=1657,e.ttehfinalarabic=64359,e.ttehinitialarabic=64360,e.ttehmedialarabic=64361,e.tthabengali=2464,e.tthadeva=2336,e.tthagujarati=2720,e.tthagurmukhi=2592,e.tturned=647,e.tuhiragana=12388,e.tukatakana=12484,e.tukatakanahalfwidth=65410,e.tusmallhiragana=12387,e.tusmallkatakana=12483,e.tusmallkatakanahalfwidth=65391,e.twelvecircle=9323,e.twelveparen=9343,e.twelveperiod=9363,e.twelveroman=8571,e.twentycircle=9331,e.twentyhangzhou=21316,e.twentyparen=9351,e.twentyperiod=9371,e.two=50,e.twoarabic=1634,e.twobengali=2536,e.twocircle=9313,e.twocircleinversesansserif=10123,e.twodeva=2408,e.twodotenleader=8229,e.twodotleader=8229,e.twodotleadervertical=65072,e.twogujarati=2792,e.twogurmukhi=2664,e.twohackarabic=1634,e.twohangzhou=12322,e.twoideographicparen=12833,e.twoinferior=8322,e.twomonospace=65298,e.twonumeratorbengali=2549,e.twooldstyle=63282,e.twoparen=9333,e.twoperiod=9353,e.twopersian=1778,e.tworoman=8561,e.twostroke=443,e.twosuperior=178,e.twothai=3666,e.twothirds=8532,e.u=117,e.uacute=250,e.ubar=649,e.ubengali=2441,e.ubopomofo=12584,e.ubreve=365,e.ucaron=468,e.ucircle=9444,e.ucircumflex=251,e.ucircumflexbelow=7799,e.ucyrillic=1091,e.udattadeva=2385,e.udblacute=369,e.udblgrave=533,e.udeva=2313,e.udieresis=252,e.udieresisacute=472,e.udieresisbelow=7795,e.udieresiscaron=474,e.udieresiscyrillic=1265,e.udieresisgrave=476,e.udieresismacron=470,e.udotbelow=7909,e.ugrave=249,e.ugujarati=2697,e.ugurmukhi=2569,e.uhiragana=12358,e.uhookabove=7911,e.uhorn=432,e.uhornacute=7913,e.uhorndotbelow=7921,e.uhorngrave=7915,e.uhornhookabove=7917,e.uhorntilde=7919,e.uhungarumlaut=369,e.uhungarumlautcyrillic=1267,e.uinvertedbreve=535,e.ukatakana=12454,e.ukatakanahalfwidth=65395,e.ukcyrillic=1145,e.ukorean=12636,e.umacron=363,e.umacroncyrillic=1263,e.umacrondieresis=7803,e.umatragurmukhi=2625,e.umonospace=65365,e.underscore=95,e.underscoredbl=8215,e.underscoremonospace=65343,e.underscorevertical=65075,e.underscorewavy=65103,e.union=8746,e.universal=8704,e.uogonek=371,e.uparen=9392,e.upblock=9600,e.upperdothebrew=1476,e.upsilon=965,e.upsilondieresis=971,e.upsilondieresistonos=944,e.upsilonlatin=650,e.upsilontonos=973,e.uptackbelowcmb=797,e.uptackmod=724,e.uragurmukhi=2675,e.uring=367,e.ushortcyrillic=1118,e.usmallhiragana=12357,e.usmallkatakana=12453,e.usmallkatakanahalfwidth=65385,e.ustraightcyrillic=1199,e.ustraightstrokecyrillic=1201,e.utilde=361,e.utildeacute=7801,e.utildebelow=7797,e.uubengali=2442,e.uudeva=2314,e.uugujarati=2698,e.uugurmukhi=2570,e.uumatragurmukhi=2626,e.uuvowelsignbengali=2498,e.uuvowelsigndeva=2370,e.uuvowelsigngujarati=2754,e.uvowelsignbengali=2497,e.uvowelsigndeva=2369,e.uvowelsigngujarati=2753,e.v=118,e.vadeva=2357,e.vagujarati=2741,e.vagurmukhi=2613,e.vakatakana=12535,e.vav=1493,e.vavdagesh=64309,e.vavdagesh65=64309,e.vavdageshhebrew=64309,e.vavhebrew=1493,e.vavholam=64331,e.vavholamhebrew=64331,e.vavvavhebrew=1520,e.vavyodhebrew=1521,e.vcircle=9445,e.vdotbelow=7807,e.vecyrillic=1074,e.veharabic=1700,e.vehfinalarabic=64363,e.vehinitialarabic=64364,e.vehmedialarabic=64365,e.vekatakana=12537,e.venus=9792,e.verticalbar=124,e.verticallineabovecmb=781,e.verticallinebelowcmb=809,e.verticallinelowmod=716,e.verticallinemod=712,e.vewarmenian=1406,e.vhook=651,e.vikatakana=12536,e.viramabengali=2509,e.viramadeva=2381,e.viramagujarati=2765,e.visargabengali=2435,e.visargadeva=2307,e.visargagujarati=2691,e.vmonospace=65366,e.voarmenian=1400,e.voicediterationhiragana=12446,e.voicediterationkatakana=12542,e.voicedmarkkana=12443,e.voicedmarkkanahalfwidth=65438,e.vokatakana=12538,e.vparen=9393,e.vtilde=7805,e.vturned=652,e.vuhiragana=12436,e.vukatakana=12532,e.w=119,e.wacute=7811,e.waekorean=12633,e.wahiragana=12431,e.wakatakana=12527,e.wakatakanahalfwidth=65436,e.wakorean=12632,e.wasmallhiragana=12430,e.wasmallkatakana=12526,e.wattosquare=13143,e.wavedash=12316,e.wavyunderscorevertical=65076,e.wawarabic=1608,e.wawfinalarabic=65262,e.wawhamzaabovearabic=1572,e.wawhamzaabovefinalarabic=65158,e.wbsquare=13277,e.wcircle=9446,e.wcircumflex=373,e.wdieresis=7813,e.wdotaccent=7815,e.wdotbelow=7817,e.wehiragana=12433,e.weierstrass=8472,e.wekatakana=12529,e.wekorean=12638,e.weokorean=12637,e.wgrave=7809,e.whitebullet=9702,e.whitecircle=9675,e.whitecircleinverse=9689,e.whitecornerbracketleft=12302,e.whitecornerbracketleftvertical=65091,e.whitecornerbracketright=12303,e.whitecornerbracketrightvertical=65092,e.whitediamond=9671,e.whitediamondcontainingblacksmalldiamond=9672,e.whitedownpointingsmalltriangle=9663;e.whitedownpointingtriangle=9661,e.whiteleftpointingsmalltriangle=9667,e.whiteleftpointingtriangle=9665,e.whitelenticularbracketleft=12310,e.whitelenticularbracketright=12311,e.whiterightpointingsmalltriangle=9657,e.whiterightpointingtriangle=9655,e.whitesmallsquare=9643,e.whitesmilingface=9786,e.whitesquare=9633,e.whitestar=9734,e.whitetelephone=9743,e.whitetortoiseshellbracketleft=12312,e.whitetortoiseshellbracketright=12313,e.whiteuppointingsmalltriangle=9653,e.whiteuppointingtriangle=9651,e.wihiragana=12432,e.wikatakana=12528,e.wikorean=12639,e.wmonospace=65367,e.wohiragana=12434,e.wokatakana=12530,e.wokatakanahalfwidth=65382,e.won=8361,e.wonmonospace=65510,e.wowaenthai=3623,e.wparen=9394,e.wring=7832,e.wsuperior=695,e.wturned=653,e.wynn=447,e.x=120,e.xabovecmb=829,e.xbopomofo=12562,e.xcircle=9447,e.xdieresis=7821,e.xdotaccent=7819,e.xeharmenian=1389,e.xi=958,e.xmonospace=65368,e.xparen=9395,e.xsuperior=739,e.y=121,e.yaadosquare=13134,e.yabengali=2479,e.yacute=253,e.yadeva=2351,e.yaekorean=12626,e.yagujarati=2735,e.yagurmukhi=2607,e.yahiragana=12420,e.yakatakana=12516,e.yakatakanahalfwidth=65428,e.yakorean=12625,e.yamakkanthai=3662,e.yasmallhiragana=12419,e.yasmallkatakana=12515,e.yasmallkatakanahalfwidth=65388,e.yatcyrillic=1123,e.ycircle=9448,e.ycircumflex=375,e.ydieresis=255,e.ydotaccent=7823,e.ydotbelow=7925,e.yeharabic=1610,e.yehbarreearabic=1746,e.yehbarreefinalarabic=64431,e.yehfinalarabic=65266,e.yehhamzaabovearabic=1574,e.yehhamzaabovefinalarabic=65162,e.yehhamzaaboveinitialarabic=65163,e.yehhamzaabovemedialarabic=65164,e.yehinitialarabic=65267,e.yehmedialarabic=65268,e.yehmeeminitialarabic=64733,e.yehmeemisolatedarabic=64600,e.yehnoonfinalarabic=64660,e.yehthreedotsbelowarabic=1745,e.yekorean=12630,e.yen=165,e.yenmonospace=65509,e.yeokorean=12629,e.yeorinhieuhkorean=12678,e.yerahbenyomohebrew=1450,e.yerahbenyomolefthebrew=1450,e.yericyrillic=1099,e.yerudieresiscyrillic=1273,e.yesieungkorean=12673,e.yesieungpansioskorean=12675,e.yesieungsioskorean=12674,e.yetivhebrew=1434,e.ygrave=7923,e.yhook=436,e.yhookabove=7927,e.yiarmenian=1397,e.yicyrillic=1111,e.yikorean=12642,e.yinyang=9775,e.yiwnarmenian=1410,e.ymonospace=65369,e.yod=1497,e.yoddagesh=64313,e.yoddageshhebrew=64313,e.yodhebrew=1497,e.yodyodhebrew=1522,e.yodyodpatahhebrew=64287,e.yohiragana=12424,e.yoikorean=12681,e.yokatakana=12520,e.yokatakanahalfwidth=65430,e.yokorean=12635,e.yosmallhiragana=12423,e.yosmallkatakana=12519,e.yosmallkatakanahalfwidth=65390,e.yotgreek=1011,e.yoyaekorean=12680,e.yoyakorean=12679,e.yoyakthai=3618,e.yoyingthai=3597,e.yparen=9396,e.ypogegrammeni=890,e.ypogegrammenigreekcmb=837,e.yr=422,e.yring=7833,e.ysuperior=696,e.ytilde=7929,e.yturned=654,e.yuhiragana=12422,e.yuikorean=12684,e.yukatakana=12518,e.yukatakanahalfwidth=65429,e.yukorean=12640,e.yusbigcyrillic=1131,e.yusbigiotifiedcyrillic=1133,e.yuslittlecyrillic=1127,e.yuslittleiotifiedcyrillic=1129,e.yusmallhiragana=12421,e.yusmallkatakana=12517,e.yusmallkatakanahalfwidth=65389,e.yuyekorean=12683,e.yuyeokorean=12682,e.yyabengali=2527,e.yyadeva=2399,e.z=122,e.zaarmenian=1382,e.zacute=378,e.zadeva=2395,e.zagurmukhi=2651,e.zaharabic=1592,e.zahfinalarabic=65222,e.zahinitialarabic=65223,e.zahiragana=12374,e.zahmedialarabic=65224,e.zainarabic=1586,e.zainfinalarabic=65200,e.zakatakana=12470,e.zaqefgadolhebrew=1429,e.zaqefqatanhebrew=1428,e.zarqahebrew=1432,e.zayin=1494,e.zayindagesh=64310,e.zayindageshhebrew=64310,e.zayinhebrew=1494,e.zbopomofo=12567,e.zcaron=382,e.zcircle=9449,e.zcircumflex=7825,e.zcurl=657,e.zdot=380,e.zdotaccent=380,e.zdotbelow=7827,e.zecyrillic=1079,e.zedescendercyrillic=1177,e.zedieresiscyrillic=1247,e.zehiragana=12380,e.zekatakana=12476,e.zero=48,e.zeroarabic=1632,e.zerobengali=2534,e.zerodeva=2406,e.zerogujarati=2790,e.zerogurmukhi=2662,e.zerohackarabic=1632,e.zeroinferior=8320,e.zeromonospace=65296,e.zerooldstyle=63280,e.zeropersian=1776,e.zerosuperior=8304,e.zerothai=3664,e.zerowidthjoiner=65279,e.zerowidthnonjoiner=8204,e.zerowidthspace=8203,e.zeta=950,e.zhbopomofo=12563,e.zhearmenian=1386,e.zhebrevecyrillic=1218,e.zhecyrillic=1078,e.zhedescendercyrillic=1175,e.zhedieresiscyrillic=1245,e.zihiragana=12376,e.zikatakana=12472,e.zinorhebrew=1454,e.zlinebelow=7829,e.zmonospace=65370,e.zohiragana=12382,e.zokatakana=12478,e.zparen=9397,e.zretroflexhook=656,e.zstroke=438,e.zuhiragana=12378,e.zukatakana=12474,e[".notdef"]=0,e.angbracketleftbig=9001,e.angbracketleftBig=9001,e.angbracketleftbigg=9001,e.angbracketleftBigg=9001,e.angbracketrightBig=9002,e.angbracketrightbig=9002,e.angbracketrightBigg=9002,e.angbracketrightbigg=9002,e.arrowhookleft=8618,e.arrowhookright=8617,e.arrowlefttophalf=8636,e.arrowleftbothalf=8637,e.arrownortheast=8599,e.arrownorthwest=8598,e.arrowrighttophalf=8640,e.arrowrightbothalf=8641,e.arrowsoutheast=8600,e.arrowsouthwest=8601,e.backslashbig=8726,e.backslashBig=8726,e.backslashBigg=8726,e.backslashbigg=8726,e.bardbl=8214,e.bracehtipdownleft=65079,e.bracehtipdownright=65079,e.bracehtipupleft=65080,e.bracehtipupright=65080,e.braceleftBig=123,e.braceleftbig=123,e.braceleftbigg=123,e.braceleftBigg=123,e.bracerightBig=125,e.bracerightbig=125,e.bracerightbigg=125,e.bracerightBigg=125,e.bracketleftbig=91,e.bracketleftBig=91,e.bracketleftbigg=91,e.bracketleftBigg=91,e.bracketrightBig=93,e.bracketrightbig=93,e.bracketrightbigg=93,e.bracketrightBigg=93,e.ceilingleftbig=8968,e.ceilingleftBig=8968,e.ceilingleftBigg=8968,e.ceilingleftbigg=8968,e.ceilingrightbig=8969,e.ceilingrightBig=8969,e.ceilingrightbigg=8969,e.ceilingrightBigg=8969,e.circledotdisplay=8857,e.circledottext=8857,e.circlemultiplydisplay=8855,e.circlemultiplytext=8855,e.circleplusdisplay=8853,e.circleplustext=8853,e.contintegraldisplay=8750,e.contintegraltext=8750,e.coproductdisplay=8720,e.coproducttext=8720,e.floorleftBig=8970,e.floorleftbig=8970,e.floorleftbigg=8970,e.floorleftBigg=8970,e.floorrightbig=8971,e.floorrightBig=8971,e.floorrightBigg=8971,e.floorrightbigg=8971,e.hatwide=770,e.hatwider=770,e.hatwidest=770,e.intercal=7488,e.integraldisplay=8747,e.integraltext=8747,e.intersectiondisplay=8898,e.intersectiontext=8898,e.logicalanddisplay=8743,e.logicalandtext=8743,e.logicalordisplay=8744,e.logicalortext=8744,e.parenleftBig=40,e.parenleftbig=40,e.parenleftBigg=40,e.parenleftbigg=40,e.parenrightBig=41,e.parenrightbig=41,e.parenrightBigg=41,e.parenrightbigg=41,e.prime=8242,e.productdisplay=8719,e.producttext=8719,e.radicalbig=8730,e.radicalBig=8730,e.radicalBigg=8730,e.radicalbigg=8730,e.radicalbt=8730,e.radicaltp=8730,e.radicalvertex=8730,e.slashbig=47,e.slashBig=47,e.slashBigg=47,e.slashbigg=47,e.summationdisplay=8721,e.summationtext=8721,e.tildewide=732,e.tildewider=732,e.tildewidest=732,e.uniondisplay=8899,e.unionmultidisplay=8846,e.unionmultitext=8846,e.unionsqdisplay=8852,e.unionsqtext=8852,e.uniontext=8899,e.vextenddouble=8741,e.vextendsingle=8739})),i=(0,n.getLookupTableFactory)((function(e){e.space=32,e.a1=9985,e.a2=9986,e.a202=9987,e.a3=9988,e.a4=9742,e.a5=9990,e.a119=9991,e.a118=9992,e.a117=9993,e.a11=9755,e.a12=9758,e.a13=9996,e.a14=9997,e.a15=9998,e.a16=9999,e.a105=1e4,e.a17=10001,e.a18=10002,e.a19=10003,e.a20=10004,e.a21=10005,e.a22=10006,e.a23=10007,e.a24=10008,e.a25=10009,e.a26=10010,e.a27=10011,e.a28=10012,e.a6=10013,e.a7=10014,e.a8=10015,e.a9=10016,e.a10=10017,e.a29=10018,e.a30=10019,e.a31=10020,e.a32=10021,e.a33=10022,e.a34=10023,e.a35=9733,e.a36=10025,e.a37=10026,e.a38=10027,e.a39=10028,e.a40=10029,e.a41=10030,e.a42=10031,e.a43=10032,e.a44=10033,e.a45=10034,e.a46=10035,e.a47=10036,e.a48=10037,e.a49=10038,e.a50=10039,e.a51=10040,e.a52=10041,e.a53=10042,e.a54=10043,e.a55=10044,e.a56=10045,e.a57=10046,e.a58=10047,e.a59=10048,e.a60=10049,e.a61=10050,e.a62=10051,e.a63=10052,e.a64=10053,e.a65=10054,e.a66=10055,e.a67=10056,e.a68=10057,e.a69=10058,e.a70=10059,e.a71=9679,e.a72=10061,e.a73=9632,e.a74=10063,e.a203=10064,e.a75=10065,e.a204=10066,e.a76=9650,e.a77=9660,e.a78=9670,e.a79=10070,e.a81=9687,e.a82=10072,e.a83=10073,e.a84=10074,e.a97=10075,e.a98=10076,e.a99=10077,e.a100=10078,e.a101=10081,e.a102=10082,e.a103=10083,e.a104=10084,e.a106=10085,e.a107=10086,e.a108=10087,e.a112=9827,e.a111=9830,e.a110=9829,e.a109=9824,e.a120=9312,e.a121=9313,e.a122=9314,e.a123=9315,e.a124=9316,e.a125=9317,e.a126=9318,e.a127=9319,e.a128=9320,e.a129=9321,e.a130=10102,e.a131=10103,e.a132=10104,e.a133=10105,e.a134=10106,e.a135=10107,e.a136=10108,e.a137=10109,e.a138=10110,e.a139=10111,e.a140=10112,e.a141=10113,e.a142=10114,e.a143=10115,e.a144=10116,e.a145=10117,e.a146=10118,e.a147=10119,e.a148=10120,e.a149=10121,e.a150=10122,e.a151=10123,e.a152=10124,e.a153=10125,e.a154=10126,e.a155=10127,e.a156=10128,e.a157=10129,e.a158=10130,e.a159=10131,e.a160=10132,e.a161=8594,e.a163=8596,e.a164=8597,e.a196=10136,e.a165=10137,e.a192=10138,e.a166=10139,e.a167=10140,e.a168=10141,e.a169=10142,e.a170=10143,e.a171=10144,e.a172=10145,e.a173=10146,e.a162=10147,e.a174=10148,e.a175=10149,e.a176=10150,e.a177=10151,e.a178=10152,e.a179=10153,e.a193=10154,e.a180=10155,e.a199=10156,e.a181=10157,e.a200=10158,e.a182=10159,e.a201=10161,e.a183=10162,e.a184=10163,e.a197=10164,e.a185=10165,e.a194=10166,e.a198=10167,e.a186=10168,e.a195=10169,e.a187=10170,e.a188=10171,e.a189=10172,e.a190=10173,e.a191=10174,e.a89=10088,e.a90=10089,e.a93=10090,e.a94=10091,e.a91=10092,e.a92=10093,e.a205=10094,e.a85=10095,e.a206=10096,e.a86=10097,e.a87=10098,e.a88=10099,e.a95=10100,e.a96=10101,e[".notdef"]=0}))},(e,t,r)=>{r.r(t),r.d(t,{clearUnicodeCaches:()=>u,getCharUnicodeCategory:()=>h,getUnicodeForGlyph:()=>i,getUnicodeRangeFor:()=>o,mapSpecialUnicodeValues:()=>a});const n=(0,r(149).getLookupTableFactory)((function(e){e[63721]=169,e[63193]=169,e[63720]=174,e[63194]=174,e[63722]=8482,e[63195]=8482,e[63729]=9127,e[63730]=9128,e[63731]=9129,e[63740]=9131,e[63741]=9132,e[63742]=9133,e[63726]=9121,e[63727]=9122,e[63728]=9123,e[63737]=9124,e[63738]=9125,e[63739]=9126,e[63723]=9115,e[63724]=9116,e[63725]=9117,e[63734]=9118,e[63735]=9119,e[63736]=9120}));function a(e){return e>=65520&&e<=65535?0:e>=62976&&e<=63743?n()[e]||e:173===e?45:e}function i(e,t){let r=t[e];if(void 0!==r)return r;if(!e)return-1;if("u"===e[0]){const t=e.length;let n;if(7===t&&"n"===e[1]&&"i"===e[2])n=e.substring(3);else{if(!(t>=5&&t<=7))return-1;n=e.substring(1)}if(n===n.toUpperCase()&&(r=parseInt(n,16),r>=0))return r}return-1}const s=[[0,127],[128,255],[256,383],[384,591],[592,687,7424,7551,7552,7615],[688,767,42752,42783],[768,879,7616,7679],[880,1023],[11392,11519],[1024,1279,1280,1327,11744,11775,42560,42655],[1328,1423],[1424,1535],[42240,42559],[1536,1791,1872,1919],[1984,2047],[2304,2431],[2432,2559],[2560,2687],[2688,2815],[2816,2943],[2944,3071],[3072,3199],[3200,3327],[3328,3455],[3584,3711],[3712,3839],[4256,4351,11520,11567],[6912,7039],[4352,4607],[7680,7935,11360,11391,42784,43007],[7936,8191],[8192,8303,11776,11903],[8304,8351],[8352,8399],[8400,8447],[8448,8527],[8528,8591],[8592,8703,10224,10239,10496,10623,11008,11263],[8704,8959,10752,11007,10176,10223,10624,10751],[8960,9215],[9216,9279],[9280,9311],[9312,9471],[9472,9599],[9600,9631],[9632,9727],[9728,9983],[9984,10175],[12288,12351],[12352,12447],[12448,12543,12784,12799],[12544,12591,12704,12735],[12592,12687],[43072,43135],[12800,13055],[13056,13311],[44032,55215],[55296,57343],[67840,67871],[19968,40959,11904,12031,12032,12255,12272,12287,13312,19903,131072,173791,12688,12703],[57344,63743],[12736,12783,63744,64255,194560,195103],[64256,64335],[64336,65023],[65056,65071],[65040,65055],[65104,65135],[65136,65279],[65280,65519],[65520,65535],[3840,4095],[1792,1871],[1920,1983],[3456,3583],[4096,4255],[4608,4991,4992,5023,11648,11743],[5024,5119],[5120,5759],[5760,5791],[5792,5887],[6016,6143],[6144,6319],[10240,10495],[40960,42127],[5888,5919,5920,5951,5952,5983,5984,6015],[66304,66351],[66352,66383],[66560,66639],[118784,119039,119040,119295,119296,119375],[119808,120831],[1044480,1048573],[65024,65039,917760,917999],[917504,917631],[6400,6479],[6480,6527],[6528,6623],[6656,6687],[11264,11359],[11568,11647],[19904,19967],[43008,43055],[65536,65663,65664,65791,65792,65855],[65856,65935],[66432,66463],[66464,66527],[66640,66687],[66688,66735],[67584,67647],[68096,68191],[119552,119647],[73728,74751,74752,74879],[119648,119679],[7040,7103],[7168,7247],[7248,7295],[43136,43231],[43264,43311],[43312,43359],[43520,43615],[65936,65999],[66e3,66047],[66208,66271,66176,66207,67872,67903],[127024,127135,126976,127023]];function o(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1;if(-1!==t){const r=s[t];for(let n=0,a=r.length;n=r[n]&&e<=r[n+1])return t}for(let t=0,r=s.length;t=r[n]&&e<=r[n+1])return t}return-1}const c=new RegExp("^(\\\\s)|(\\\\p{Mn})|(\\\\p{Cf})$","u"),l=new Map;function h(e){const t=l.get(e);if(t)return t;const r=e.match(c),n={isWhitespace:!(null==r||!r[1]),isZeroWidthDiacritic:!(null==r||!r[2]),isInvisibleFormatMark:!(null==r||!r[3])};return l.set(e,n),n}function u(){l.clear()}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getSerifFonts=t.getNonStdFontMap=t.getGlyphMapForStandardFonts=t.getFontNameToFileMap=void 0,t.getStandardFontName=function(e){const t=(0,a.normalizeFontName)(e);return i()[t]},t.getSymbolsFonts=t.getSupplementalGlyphMapForCalibri=t.getSupplementalGlyphMapForArialBlack=t.getStdFontMap=void 0,t.isKnownFontName=function(e){const t=(0,a.normalizeFontName)(e);return!!(i()[t]||o()[t]||c()[t]||l()[t])};var n=r(149),a=r(188);const i=(0,n.getLookupTableFactory)((function(e){e["Times-Roman"]="Times-Roman",e.Helvetica="Helvetica",e.Courier="Courier",e.Symbol="Symbol",e["Times-Bold"]="Times-Bold",e["Helvetica-Bold"]="Helvetica-Bold",e["Courier-Bold"]="Courier-Bold",e.ZapfDingbats="ZapfDingbats",e["Times-Italic"]="Times-Italic",e["Helvetica-Oblique"]="Helvetica-Oblique",e["Courier-Oblique"]="Courier-Oblique",e["Times-BoldItalic"]="Times-BoldItalic",e["Helvetica-BoldOblique"]="Helvetica-BoldOblique",e["Courier-BoldOblique"]="Courier-BoldOblique",e.ArialNarrow="Helvetica",e["ArialNarrow-Bold"]="Helvetica-Bold",e["ArialNarrow-BoldItalic"]="Helvetica-BoldOblique",e["ArialNarrow-Italic"]="Helvetica-Oblique",e.ArialBlack="Helvetica",e["ArialBlack-Bold"]="Helvetica-Bold",e["ArialBlack-BoldItalic"]="Helvetica-BoldOblique",e["ArialBlack-Italic"]="Helvetica-Oblique",e["Arial-Black"]="Helvetica",e["Arial-Black-Bold"]="Helvetica-Bold",e["Arial-Black-BoldItalic"]="Helvetica-BoldOblique",e["Arial-Black-Italic"]="Helvetica-Oblique",e.Arial="Helvetica",e["Arial-Bold"]="Helvetica-Bold",e["Arial-BoldItalic"]="Helvetica-BoldOblique",e["Arial-Italic"]="Helvetica-Oblique",e.ArialMT="Helvetica",e["Arial-BoldItalicMT"]="Helvetica-BoldOblique",e["Arial-BoldMT"]="Helvetica-Bold",e["Arial-ItalicMT"]="Helvetica-Oblique",e["Arial-BoldItalicMT-BoldItalic"]="Helvetica-BoldOblique",e["Arial-BoldMT-Bold"]="Helvetica-Bold",e["Arial-ItalicMT-Italic"]="Helvetica-Oblique",e.ArialUnicodeMS="Helvetica",e["ArialUnicodeMS-Bold"]="Helvetica-Bold",e["ArialUnicodeMS-BoldItalic"]="Helvetica-BoldOblique",e["ArialUnicodeMS-Italic"]="Helvetica-Oblique",e["Courier-BoldItalic"]="Courier-BoldOblique",e["Courier-Italic"]="Courier-Oblique",e.CourierNew="Courier",e["CourierNew-Bold"]="Courier-Bold",e["CourierNew-BoldItalic"]="Courier-BoldOblique",e["CourierNew-Italic"]="Courier-Oblique",e["CourierNewPS-BoldItalicMT"]="Courier-BoldOblique",e["CourierNewPS-BoldMT"]="Courier-Bold",e["CourierNewPS-ItalicMT"]="Courier-Oblique",e.CourierNewPSMT="Courier",e["Helvetica-BoldItalic"]="Helvetica-BoldOblique",e["Helvetica-Italic"]="Helvetica-Oblique",e["Symbol-Bold"]="Symbol",e["Symbol-BoldItalic"]="Symbol",e["Symbol-Italic"]="Symbol",e.TimesNewRoman="Times-Roman",e["TimesNewRoman-Bold"]="Times-Bold",e["TimesNewRoman-BoldItalic"]="Times-BoldItalic",e["TimesNewRoman-Italic"]="Times-Italic",e.TimesNewRomanPS="Times-Roman",e["TimesNewRomanPS-Bold"]="Times-Bold",e["TimesNewRomanPS-BoldItalic"]="Times-BoldItalic",e["TimesNewRomanPS-BoldItalicMT"]="Times-BoldItalic",e["TimesNewRomanPS-BoldMT"]="Times-Bold",e["TimesNewRomanPS-Italic"]="Times-Italic",e["TimesNewRomanPS-ItalicMT"]="Times-Italic",e.TimesNewRomanPSMT="Times-Roman",e["TimesNewRomanPSMT-Bold"]="Times-Bold",e["TimesNewRomanPSMT-BoldItalic"]="Times-BoldItalic",e["TimesNewRomanPSMT-Italic"]="Times-Italic"}));t.getStdFontMap=i;const s=(0,n.getLookupTableFactory)((function(e){e.Courier="FoxitFixed.pfb",e["Courier-Bold"]="FoxitFixedBold.pfb",e["Courier-BoldOblique"]="FoxitFixedBoldItalic.pfb",e["Courier-Oblique"]="FoxitFixedItalic.pfb",e.Helvetica="LiberationSans-Regular.ttf",e["Helvetica-Bold"]="LiberationSans-Bold.ttf",e["Helvetica-BoldOblique"]="LiberationSans-BoldItalic.ttf",e["Helvetica-Oblique"]="LiberationSans-Italic.ttf",e["Times-Roman"]="FoxitSerif.pfb",e["Times-Bold"]="FoxitSerifBold.pfb",e["Times-BoldItalic"]="FoxitSerifBoldItalic.pfb",e["Times-Italic"]="FoxitSerifItalic.pfb",e.Symbol="FoxitSymbol.pfb",e.ZapfDingbats="FoxitDingbats.pfb",e["LiberationSans-Regular"]="LiberationSans-Regular.ttf",e["LiberationSans-Bold"]="LiberationSans-Bold.ttf",e["LiberationSans-Italic"]="LiberationSans-Italic.ttf",e["LiberationSans-BoldItalic"]="LiberationSans-BoldItalic.ttf"}));t.getFontNameToFileMap=s;const o=(0,n.getLookupTableFactory)((function(e){e.Calibri="Helvetica",e["Calibri-Bold"]="Helvetica-Bold",e["Calibri-BoldItalic"]="Helvetica-BoldOblique",e["Calibri-Italic"]="Helvetica-Oblique",e.CenturyGothic="Helvetica",e["CenturyGothic-Bold"]="Helvetica-Bold",e["CenturyGothic-BoldItalic"]="Helvetica-BoldOblique",e["CenturyGothic-Italic"]="Helvetica-Oblique",e.ComicSansMS="Comic Sans MS",e["ComicSansMS-Bold"]="Comic Sans MS-Bold",e["ComicSansMS-BoldItalic"]="Comic Sans MS-BoldItalic",e["ComicSansMS-Italic"]="Comic Sans MS-Italic",e.Impact="Helvetica",e["ItcSymbol-Bold"]="Helvetica-Bold",e["ItcSymbol-BoldItalic"]="Helvetica-BoldOblique",e["ItcSymbol-Book"]="Helvetica",e["ItcSymbol-BookItalic"]="Helvetica-Oblique",e["ItcSymbol-Medium"]="Helvetica",e["ItcSymbol-MediumItalic"]="Helvetica-Oblique",e.LucidaConsole="Courier",e["LucidaConsole-Bold"]="Courier-Bold",e["LucidaConsole-BoldItalic"]="Courier-BoldOblique",e["LucidaConsole-Italic"]="Courier-Oblique",e["LucidaSans-Demi"]="Helvetica-Bold",e["MS-Gothic"]="MS Gothic",e["MS-Gothic-Bold"]="MS Gothic-Bold",e["MS-Gothic-BoldItalic"]="MS Gothic-BoldItalic",e["MS-Gothic-Italic"]="MS Gothic-Italic",e["MS-Mincho"]="MS Mincho",e["MS-Mincho-Bold"]="MS Mincho-Bold",e["MS-Mincho-BoldItalic"]="MS Mincho-BoldItalic",e["MS-Mincho-Italic"]="MS Mincho-Italic",e["MS-PGothic"]="MS PGothic",e["MS-PGothic-Bold"]="MS PGothic-Bold",e["MS-PGothic-BoldItalic"]="MS PGothic-BoldItalic",e["MS-PGothic-Italic"]="MS PGothic-Italic",e["MS-PMincho"]="MS PMincho",e["MS-PMincho-Bold"]="MS PMincho-Bold",e["MS-PMincho-BoldItalic"]="MS PMincho-BoldItalic",e["MS-PMincho-Italic"]="MS PMincho-Italic",e.NuptialScript="Times-Italic",e.SegoeUISymbol="Helvetica"}));t.getNonStdFontMap=o;const c=(0,n.getLookupTableFactory)((function(e){e["Adobe Jenson"]=!0,e["Adobe Text"]=!0,e.Albertus=!0,e.Aldus=!0,e.Alexandria=!0,e.Algerian=!0,e["American Typewriter"]=!0,e.Antiqua=!0,e.Apex=!0,e.Arno=!0,e.Aster=!0,e.Aurora=!0,e.Baskerville=!0,e.Bell=!0,e.Bembo=!0,e["Bembo Schoolbook"]=!0,e.Benguiat=!0,e["Berkeley Old Style"]=!0,e["Bernhard Modern"]=!0,e["Berthold City"]=!0,e.Bodoni=!0,e["Bauer Bodoni"]=!0,e["Book Antiqua"]=!0,e.Bookman=!0,e["Bordeaux Roman"]=!0,e["Californian FB"]=!0,e.Calisto=!0,e.Calvert=!0,e.Capitals=!0,e.Cambria=!0,e.Cartier=!0,e.Caslon=!0,e.Catull=!0,e.Centaur=!0,e["Century Old Style"]=!0,e["Century Schoolbook"]=!0,e.Chaparral=!0,e["Charis SIL"]=!0,e.Cheltenham=!0,e["Cholla Slab"]=!0,e.Clarendon=!0,e.Clearface=!0,e.Cochin=!0,e.Colonna=!0,e["Computer Modern"]=!0,e["Concrete Roman"]=!0,e.Constantia=!0,e["Cooper Black"]=!0,e.Corona=!0,e.Ecotype=!0,e.Egyptienne=!0,e.Elephant=!0,e.Excelsior=!0,e.Fairfield=!0,e["FF Scala"]=!0,e.Folkard=!0,e.Footlight=!0,e.FreeSerif=!0,e["Friz Quadrata"]=!0,e.Garamond=!0,e.Gentium=!0,e.Georgia=!0,e.Gloucester=!0,e["Goudy Old Style"]=!0,e["Goudy Schoolbook"]=!0,e["Goudy Pro Font"]=!0,e.Granjon=!0,e["Guardian Egyptian"]=!0,e.Heather=!0,e.Hercules=!0,e["High Tower Text"]=!0,e.Hiroshige=!0,e["Hoefler Text"]=!0,e["Humana Serif"]=!0,e.Imprint=!0,e["Ionic No. 5"]=!0,e.Janson=!0,e.Joanna=!0,e.Korinna=!0,e.Lexicon=!0,e.LiberationSerif=!0,e["Liberation Serif"]=!0,e["Linux Libertine"]=!0,e.Literaturnaya=!0,e.Lucida=!0,e["Lucida Bright"]=!0,e.Melior=!0,e.Memphis=!0,e.Miller=!0,e.Minion=!0,e.Modern=!0,e["Mona Lisa"]=!0,e["Mrs Eaves"]=!0,e["MS Serif"]=!0,e["Museo Slab"]=!0,e["New York"]=!0,e["Nimbus Roman"]=!0,e["NPS Rawlinson Roadway"]=!0,e.NuptialScript=!0,e.Palatino=!0,e.Perpetua=!0,e.Plantin=!0,e["Plantin Schoolbook"]=!0,e.Playbill=!0,e["Poor Richard"]=!0,e["Rawlinson Roadway"]=!0,e.Renault=!0,e.Requiem=!0,e.Rockwell=!0,e.Roman=!0,e["Rotis Serif"]=!0,e.Sabon=!0,e.Scala=!0,e.Seagull=!0,e.Sistina=!0,e.Souvenir=!0,e.STIX=!0,e["Stone Informal"]=!0,e["Stone Serif"]=!0,e.Sylfaen=!0,e.Times=!0,e.Trajan=!0,e["Trinité"]=!0,e["Trump Mediaeval"]=!0,e.Utopia=!0,e["Vale Type"]=!0,e["Bitstream Vera"]=!0,e["Vera Serif"]=!0,e.Versailles=!0,e.Wanted=!0,e.Weiss=!0,e["Wide Latin"]=!0,e.Windsor=!0,e.XITS=!0}));t.getSerifFonts=c;const l=(0,n.getLookupTableFactory)((function(e){e.Dingbats=!0,e.Symbol=!0,e.ZapfDingbats=!0,e.Wingdings=!0,e["Wingdings-Bold"]=!0,e["Wingdings-Regular"]=!0}));t.getSymbolsFonts=l;const h=(0,n.getLookupTableFactory)((function(e){e[2]=10,e[3]=32,e[4]=33,e[5]=34,e[6]=35,e[7]=36,e[8]=37,e[9]=38,e[10]=39,e[11]=40,e[12]=41,e[13]=42,e[14]=43,e[15]=44,e[16]=45,e[17]=46,e[18]=47,e[19]=48,e[20]=49,e[21]=50,e[22]=51,e[23]=52,e[24]=53,e[25]=54,e[26]=55,e[27]=56,e[28]=57,e[29]=58,e[30]=894,e[31]=60,e[32]=61,e[33]=62,e[34]=63,e[35]=64,e[36]=65,e[37]=66,e[38]=67,e[39]=68,e[40]=69,e[41]=70,e[42]=71,e[43]=72,e[44]=73,e[45]=74,e[46]=75,e[47]=76,e[48]=77,e[49]=78,e[50]=79,e[51]=80,e[52]=81,e[53]=82,e[54]=83,e[55]=84,e[56]=85,e[57]=86,e[58]=87,e[59]=88,e[60]=89,e[61]=90,e[62]=91,e[63]=92,e[64]=93,e[65]=94,e[66]=95,e[67]=96,e[68]=97,e[69]=98,e[70]=99,e[71]=100,e[72]=101,e[73]=102,e[74]=103,e[75]=104,e[76]=105,e[77]=106,e[78]=107,e[79]=108,e[80]=109,e[81]=110,e[82]=111,e[83]=112,e[84]=113,e[85]=114,e[86]=115,e[87]=116,e[88]=117,e[89]=118,e[90]=119,e[91]=120,e[92]=121,e[93]=122,e[94]=123,e[95]=124,e[96]=125,e[97]=126,e[98]=196,e[99]=197,e[100]=199,e[101]=201,e[102]=209,e[103]=214,e[104]=220,e[105]=225,e[106]=224,e[107]=226,e[108]=228,e[109]=227,e[110]=229,e[111]=231,e[112]=233,e[113]=232,e[114]=234,e[115]=235,e[116]=237,e[117]=236,e[118]=238,e[119]=239,e[120]=241,e[121]=243,e[122]=242,e[123]=244,e[124]=246,e[125]=245,e[126]=250,e[127]=249,e[128]=251,e[129]=252,e[130]=8224,e[131]=176,e[132]=162,e[133]=163,e[134]=167,e[135]=8226,e[136]=182,e[137]=223,e[138]=174,e[139]=169,e[140]=8482,e[141]=180,e[142]=168,e[143]=8800,e[144]=198,e[145]=216,e[146]=8734,e[147]=177,e[148]=8804,e[149]=8805,e[150]=165,e[151]=181,e[152]=8706,e[153]=8721,e[154]=8719,e[156]=8747,e[157]=170,e[158]=186,e[159]=8486,e[160]=230,e[161]=248,e[162]=191,e[163]=161,e[164]=172,e[165]=8730,e[166]=402,e[167]=8776,e[168]=8710,e[169]=171,e[170]=187,e[171]=8230,e[179]=8220,e[180]=8221,e[181]=8216,e[182]=8217,e[200]=193,e[203]=205,e[207]=211,e[210]=218,e[223]=711,e[224]=321,e[225]=322,e[226]=352,e[227]=353,e[228]=381,e[229]=382,e[233]=221,e[234]=253,e[252]=263,e[253]=268,e[254]=269,e[258]=258,e[260]=260,e[261]=261,e[265]=280,e[266]=281,e[267]=282,e[268]=283,e[269]=313,e[275]=323,e[276]=324,e[278]=328,e[283]=344,e[284]=345,e[285]=346,e[286]=347,e[292]=367,e[295]=377,e[296]=378,e[298]=380,e[305]=963,e[306]=964,e[307]=966,e[308]=8215,e[309]=8252,e[310]=8319,e[311]=8359,e[312]=8592,e[313]=8593,e[337]=9552,e[493]=1039,e[494]=1040,e[672]=1488,e[673]=1489,e[674]=1490,e[675]=1491,e[676]=1492,e[677]=1493,e[678]=1494,e[679]=1495,e[680]=1496,e[681]=1497,e[682]=1498,e[683]=1499,e[684]=1500,e[685]=1501,e[686]=1502,e[687]=1503,e[688]=1504,e[689]=1505,e[690]=1506,e[691]=1507,e[692]=1508,e[693]=1509,e[694]=1510,e[695]=1511,e[696]=1512,e[697]=1513,e[698]=1514,e[705]=1524,e[706]=8362,e[710]=64288,e[711]=64298,e[759]=1617,e[761]=1776,e[763]=1778,e[775]=1652,e[777]=1764,e[778]=1780,e[779]=1781,e[780]=1782,e[782]=771,e[783]=64726,e[786]=8363,e[788]=8532,e[790]=768,e[791]=769,e[792]=768,e[795]=803,e[797]=64336,e[798]=64337,e[799]=64342,e[800]=64343,e[801]=64344,e[802]=64345,e[803]=64362,e[804]=64363,e[805]=64364,e[2424]=7821,e[2425]=7822,e[2426]=7823,e[2427]=7824,e[2428]=7825,e[2429]=7826,e[2430]=7827,e[2433]=7682,e[2678]=8045,e[2679]=8046,e[2830]=1552,e[2838]=686,e[2840]=751,e[2842]=753,e[2843]=754,e[2844]=755,e[2846]=757,e[2856]=767,e[2857]=848,e[2858]=849,e[2862]=853,e[2863]=854,e[2864]=855,e[2865]=861,e[2866]=862,e[2906]=7460,e[2908]=7462,e[2909]=7463,e[2910]=7464,e[2912]=7466,e[2913]=7467,e[2914]=7468,e[2916]=7470,e[2917]=7471,e[2918]=7472,e[2920]=7474,e[2921]=7475,e[2922]=7476,e[2924]=7478,e[2925]=7479,e[2926]=7480,e[2928]=7482,e[2929]=7483,e[2930]=7484,e[2932]=7486,e[2933]=7487,e[2934]=7488,e[2936]=7490,e[2937]=7491,e[2938]=7492,e[2940]=7494,e[2941]=7495,e[2942]=7496,e[2944]=7498,e[2946]=7500,e[2948]=7502,e[2950]=7504,e[2951]=7505,e[2952]=7506,e[2954]=7508,e[2955]=7509,e[2956]=7510,e[2958]=7512,e[2959]=7513,e[2960]=7514,e[2962]=7516,e[2963]=7517,e[2964]=7518,e[2966]=7520,e[2967]=7521,e[2968]=7522,e[2970]=7524,e[2971]=7525,e[2972]=7526,e[2974]=7528,e[2975]=7529,e[2976]=7530,e[2978]=1537,e[2979]=1538,e[2980]=1539,e[2982]=1549,e[2983]=1551,e[2984]=1552,e[2986]=1554,e[2987]=1555,e[2988]=1556,e[2990]=1623,e[2991]=1624,e[2995]=1775,e[2999]=1791,e[3002]=64290,e[3003]=64291,e[3004]=64292,e[3006]=64294,e[3007]=64295,e[3008]=64296,e[3011]=1900,e[3014]=8223,e[3015]=8244,e[3017]=7532,e[3018]=7533,e[3019]=7534,e[3075]=7590,e[3076]=7591,e[3079]=7594,e[3080]=7595,e[3083]=7598,e[3084]=7599,e[3087]=7602,e[3088]=7603,e[3091]=7606,e[3092]=7607,e[3095]=7610,e[3096]=7611,e[3099]=7614,e[3100]=7615,e[3103]=7618,e[3104]=7619,e[3107]=8337,e[3108]=8338,e[3116]=1884,e[3119]=1885,e[3120]=1885,e[3123]=1886,e[3124]=1886,e[3127]=1887,e[3128]=1887,e[3131]=1888,e[3132]=1888,e[3135]=1889,e[3136]=1889,e[3139]=1890,e[3140]=1890,e[3143]=1891,e[3144]=1891,e[3147]=1892,e[3148]=1892,e[3153]=580,e[3154]=581,e[3157]=584,e[3158]=585,e[3161]=588,e[3162]=589,e[3165]=891,e[3166]=892,e[3169]=1274,e[3170]=1275,e[3173]=1278,e[3174]=1279,e[3181]=7622,e[3182]=7623,e[3282]=11799,e[3316]=578,e[3379]=42785,e[3393]=1159,e[3416]=8377}));t.getGlyphMapForStandardFonts=h;const u=(0,n.getLookupTableFactory)((function(e){e[227]=322,e[264]=261,e[291]=346}));t.getSupplementalGlyphMapForArialBlack=u;const d=(0,n.getLookupTableFactory)((function(e){e[1]=32,e[4]=65,e[5]=192,e[6]=193,e[9]=196,e[17]=66,e[18]=67,e[21]=268,e[24]=68,e[28]=69,e[29]=200,e[30]=201,e[32]=282,e[38]=70,e[39]=71,e[44]=72,e[47]=73,e[48]=204,e[49]=205,e[58]=74,e[60]=75,e[62]=76,e[68]=77,e[69]=78,e[75]=79,e[76]=210,e[80]=214,e[87]=80,e[89]=81,e[90]=82,e[92]=344,e[94]=83,e[97]=352,e[100]=84,e[104]=85,e[109]=220,e[115]=86,e[116]=87,e[121]=88,e[122]=89,e[124]=221,e[127]=90,e[129]=381,e[258]=97,e[259]=224,e[260]=225,e[263]=228,e[268]=261,e[271]=98,e[272]=99,e[273]=263,e[275]=269,e[282]=100,e[286]=101,e[287]=232,e[288]=233,e[290]=283,e[295]=281,e[296]=102,e[336]=103,e[346]=104,e[349]=105,e[350]=236,e[351]=237,e[361]=106,e[364]=107,e[367]=108,e[371]=322,e[373]=109,e[374]=110,e[381]=111,e[382]=242,e[383]=243,e[386]=246,e[393]=112,e[395]=113,e[396]=114,e[398]=345,e[400]=115,e[401]=347,e[403]=353,e[410]=116,e[437]=117,e[442]=252,e[448]=118,e[449]=119,e[454]=120,e[455]=121,e[457]=253,e[460]=122,e[462]=382,e[463]=380,e[853]=44,e[855]=58,e[856]=46,e[876]=47,e[878]=45,e[882]=45,e[894]=40,e[895]=41,e[896]=91,e[897]=93,e[923]=64,e[1004]=48,e[1005]=49,e[1006]=50,e[1007]=51,e[1008]=52,e[1009]=53,e[1010]=54,e[1011]=55,e[1012]=56,e[1013]=57,e[1081]=37,e[1085]=43,e[1086]=45}));t.getSupplementalGlyphMapForCalibri=d},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ToUnicodeMap=t.IdentityToUnicodeMap=void 0;var n=r(144);t.ToUnicodeMap=class{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];this._map=e}get length(){return this._map.length}forEach(e){for(const t in this._map)e(t,this._map[t].charCodeAt(0))}has(e){return void 0!==this._map[e]}get(e){return this._map[e]}charCodeOf(e){const t=this._map;if(t.length<=65536)return t.indexOf(e);for(const r in t)if(t[r]===e)return 0|r;return-1}amend(e){for(const t in e)this._map[t]=e[t]}},t.IdentityToUnicodeMap=class{constructor(e,t){this.firstChar=e,this.lastChar=t}get length(){return this.lastChar+1-this.firstChar}forEach(e){for(let t=this.firstChar,r=this.lastChar;t<=r;t++)e(t,t)}has(e){return this.firstChar<=e&&e<=this.lastChar}get(e){if(this.firstChar<=e&&e<=this.lastChar)return String.fromCharCode(e)}charCodeOf(e){return Number.isInteger(e)&&e>=this.firstChar&&e<=this.lastChar?e:-1}amend(e){(0,n.unreachable)("Should not call amend()")}}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.CFFFont=void 0;var n=r(185),a=r(188),i=r(144);t.CFFFont=class{constructor(e,t){this.properties=t;const r=new n.CFFParser(e,t,a.SEAC_ANALYSIS_ENABLED);this.cff=r.parse(),this.cff.duplicateFirstGlyph();const s=new n.CFFCompiler(this.cff);this.seacs=this.cff.seacs;try{this.data=s.compile()}catch(r){(0,i.warn)("Failed to compile font "+t.loadedName),this.data=e}this._createBuiltInEncoding()}get numGlyphs(){return this.cff.charStrings.count}getCharset(){return this.cff.charset.charset}getGlyphMapping(){const e=this.cff,t=this.properties,{cidToGidMap:r,cMap:n}=t,i=e.charset.charset;let s,o;if(t.composite){let t,a;if((null==r?void 0:r.length)>0){t=Object.create(null);for(let e=0,n=r.length;e=0){const n=r[t];n&&(a[e]=n)}}a.length>0&&(this.properties.builtInEncoding=a)}}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.FontRendererFactory=void 0,r(139),r(157),r(159),r(84),r(93),r(94),r(97),r(99),r(101),r(105),r(108),r(115);var n=r(144),a=r(185),i=r(189),s=r(187),o=r(154);function c(e,t){return(e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3])>>>0}function l(e,t){return e[t]<<8|e[t+1]}function h(e,t){return(e[t]<<24|e[t+1]<<16)>>16}function u(e,t){return e[t]<<24>>24}function d(e,t){return h(e,t)/16384}function f(e){const t=e.length;let r=32768;return t<1240?r=107:t<33900&&(r=1131),r}function g(e,t,r){const a=1===l(e,t+2)?c(e,t+8):c(e,t+16),i=l(e,t+a);let s,o,h;if(4===i){l(e,t+a+2);const r=l(e,t+a+6)>>1;for(o=t+a+14,s=[],h=0;h>1;r0;)p.push({flags:c})}for(r=0;r>1,I=!0;break;case 4:u+=l.pop(),i(h,u),I=!0;break;case 5:for(;l.length>0;)h+=l.shift(),u+=l.shift(),o(h,u);break;case 6:for(;l.length>0&&(h+=l.shift(),o(h,u),0!==l.length);)u+=l.shift(),o(h,u);break;case 7:for(;l.length>0&&(u+=l.shift(),o(h,u),0!==l.length);)h+=l.shift(),o(h,u);break;case 8:for(;l.length>0;)w=h+l.shift(),x=u+l.shift(),v=w+l.shift(),S=x+l.shift(),h=v+l.shift(),u=S+l.shift(),c(w,x,v,S,h,u);break;case 10:if(O=l.pop(),F=null,r.isCFFCIDFont){const e=r.fdSelect.getFDIndex(a);if(e>=0&&eMath.abs(u-t)?h+=l.shift():u+=l.shift(),c(w,x,v,S,h,u);break;default:throw new n.FormatError("unknown operator: 12 ".concat(T))}break;case 14:if(l.length>=4){const e=l.pop(),n=l.pop();u=l.pop(),h=l.pop(),t.push({cmd:"save"},{cmd:"translate",args:[h,u]});let a=m(r.cmap,String.fromCharCode(r.glyphNameMap[s.StandardEncoding[e]]));y(r.glyphs[a.glyphId],t,r,a.glyphId),t.push({cmd:"restore"}),a=m(r.cmap,String.fromCharCode(r.glyphNameMap[s.StandardEncoding[n]])),y(r.glyphs[a.glyphId],t,r,a.glyphId)}return;case 19:case 20:d+=l.length>>1,p+=d+7>>3,I=!0;break;case 21:u+=l.pop(),h+=l.pop(),i(h,u),I=!0;break;case 22:h+=l.pop(),i(h,u),I=!0;break;case 24:for(;l.length>2;)w=h+l.shift(),x=u+l.shift(),v=w+l.shift(),S=x+l.shift(),h=v+l.shift(),u=S+l.shift(),c(w,x,v,S,h,u);h+=l.shift(),u+=l.shift(),o(h,u);break;case 25:for(;l.length>6;)h+=l.shift(),u+=l.shift(),o(h,u);w=h+l.shift(),x=u+l.shift(),v=w+l.shift(),S=x+l.shift(),h=v+l.shift(),u=S+l.shift(),c(w,x,v,S,h,u);break;case 26:for(l.length%2&&(h+=l.shift());l.length>0;)w=h,x=u+l.shift(),v=w+l.shift(),S=x+l.shift(),h=v,u=S+l.shift(),c(w,x,v,S,h,u);break;case 27:for(l.length%2&&(u+=l.shift());l.length>0;)w=h+l.shift(),x=u,v=w+l.shift(),S=x+l.shift(),h=v+l.shift(),u=S,c(w,x,v,S,h,u);break;case 28:l.push((g[p]<<24|g[p+1]<<16)>>16),p+=2;break;case 29:O=l.pop()+r.gsubrsBias,F=r.gsubrs[O],F&&e(F);break;case 30:for(;l.length>0&&(w=h,x=u+l.shift(),v=w+l.shift(),S=x+l.shift(),h=v+l.shift(),u=S+(1===l.length?l.shift():0),c(w,x,v,S,h,u),0!==l.length);)w=h+l.shift(),x=u,v=w+l.shift(),S=x+l.shift(),u=S+l.shift(),h=v+(1===l.length?l.shift():0),c(w,x,v,S,h,u);break;case 31:for(;l.length>0&&(w=h+l.shift(),x=u,v=w+l.shift(),S=x+l.shift(),u=S+l.shift(),h=v+(1===l.length?l.shift():0),c(w,x,v,S,h,u),0!==l.length);)w=h,x=u+l.shift(),v=w+l.shift(),S=x+l.shift(),h=v+l.shift(),u=S+(1===l.length?l.shift():0),c(w,x,v,S,h,u);break;default:if(T<32)throw new n.FormatError("unknown operator: ".concat(T));T<247?l.push(T-139):T<251?l.push(256*(T-247)+g[p++]+108):T<255?l.push(256*-(T-251)-g[p++]-108):(l.push((g[p]<<24|g[p+1]<<16|g[p+2]<<8|g[p+3])/65536),p+=4)}I&&(l.length=0)}}(e)}const w=[];class v{constructor(e){this.constructor===v&&(0,n.unreachable)("Cannot initialize CompiledFont."),this.fontMatrix=e,this.compiledGlyphs=Object.create(null),this.compiledCharCodeToGlyphId=Object.create(null)}getPathJs(e){const{charCode:t,glyphId:r}=m(this.cmap,e);let n=this.compiledGlyphs[r];if(!n)try{n=this.compileGlyph(this.glyphs[r],r),this.compiledGlyphs[r]=n}catch(e){throw this.compiledGlyphs[r]=w,void 0===this.compiledCharCodeToGlyphId[t]&&(this.compiledCharCodeToGlyphId[t]=r),e}return void 0===this.compiledCharCodeToGlyphId[t]&&(this.compiledCharCodeToGlyphId[t]=r),n}compileGlyph(e,t){if(!e||0===e.length||14===e[0])return w;let r=this.fontMatrix;if(this.isCFFCIDFont){const e=this.fdSelect.getFDIndex(t);e>=0&&e2*l(e,t));const i=[];let s=a(t,0);for(let r=n;r{Object.defineProperty(t,"__esModule",{value:!0}),t.getMetrics=t.getFontBasicMetrics=void 0;var n=r(149);const a=(0,n.getLookupTableFactory)((function(e){e.Courier=600,e["Courier-Bold"]=600,e["Courier-BoldOblique"]=600,e["Courier-Oblique"]=600,e.Helvetica=(0,n.getLookupTableFactory)((function(e){e.space=278,e.exclam=278,e.quotedbl=355,e.numbersign=556,e.dollar=556,e.percent=889,e.ampersand=667,e.quoteright=222,e.parenleft=333,e.parenright=333,e.asterisk=389,e.plus=584,e.comma=278,e.hyphen=333,e.period=278,e.slash=278,e.zero=556,e.one=556,e.two=556,e.three=556,e.four=556,e.five=556,e.six=556,e.seven=556,e.eight=556,e.nine=556,e.colon=278,e.semicolon=278,e.less=584,e.equal=584,e.greater=584,e.question=556,e.at=1015,e.A=667,e.B=667,e.C=722,e.D=722,e.E=667,e.F=611,e.G=778,e.H=722,e.I=278,e.J=500,e.K=667,e.L=556,e.M=833,e.N=722,e.O=778,e.P=667,e.Q=778,e.R=722,e.S=667,e.T=611,e.U=722,e.V=667,e.W=944,e.X=667,e.Y=667,e.Z=611,e.bracketleft=278,e.backslash=278,e.bracketright=278,e.asciicircum=469,e.underscore=556,e.quoteleft=222,e.a=556,e.b=556,e.c=500,e.d=556,e.e=556,e.f=278,e.g=556,e.h=556,e.i=222,e.j=222,e.k=500,e.l=222,e.m=833,e.n=556,e.o=556,e.p=556,e.q=556,e.r=333,e.s=500,e.t=278,e.u=556,e.v=500,e.w=722,e.x=500,e.y=500,e.z=500,e.braceleft=334,e.bar=260,e.braceright=334,e.asciitilde=584,e.exclamdown=333,e.cent=556,e.sterling=556,e.fraction=167,e.yen=556,e.florin=556,e.section=556,e.currency=556,e.quotesingle=191,e.quotedblleft=333,e.guillemotleft=556,e.guilsinglleft=333,e.guilsinglright=333,e.fi=500,e.fl=500,e.endash=556,e.dagger=556,e.daggerdbl=556,e.periodcentered=278,e.paragraph=537,e.bullet=350,e.quotesinglbase=222,e.quotedblbase=333,e.quotedblright=333,e.guillemotright=556,e.ellipsis=1e3,e.perthousand=1e3,e.questiondown=611,e.grave=333,e.acute=333,e.circumflex=333,e.tilde=333,e.macron=333,e.breve=333,e.dotaccent=333,e.dieresis=333,e.ring=333,e.cedilla=333,e.hungarumlaut=333,e.ogonek=333,e.caron=333,e.emdash=1e3,e.AE=1e3,e.ordfeminine=370,e.Lslash=556,e.Oslash=778,e.OE=1e3,e.ordmasculine=365,e.ae=889,e.dotlessi=278,e.lslash=222,e.oslash=611,e.oe=944,e.germandbls=611,e.Idieresis=278,e.eacute=556,e.abreve=556,e.uhungarumlaut=556,e.ecaron=556,e.Ydieresis=667,e.divide=584,e.Yacute=667,e.Acircumflex=667,e.aacute=556,e.Ucircumflex=722,e.yacute=500,e.scommaaccent=500,e.ecircumflex=556,e.Uring=722,e.Udieresis=722,e.aogonek=556,e.Uacute=722,e.uogonek=556,e.Edieresis=667,e.Dcroat=722,e.commaaccent=250,e.copyright=737,e.Emacron=667,e.ccaron=500,e.aring=556,e.Ncommaaccent=722,e.lacute=222,e.agrave=556,e.Tcommaaccent=611,e.Cacute=722,e.atilde=556,e.Edotaccent=667,e.scaron=500,e.scedilla=500,e.iacute=278,e.lozenge=471,e.Rcaron=722,e.Gcommaaccent=778,e.ucircumflex=556,e.acircumflex=556,e.Amacron=667,e.rcaron=333,e.ccedilla=500,e.Zdotaccent=611,e.Thorn=667,e.Omacron=778,e.Racute=722,e.Sacute=667,e.dcaron=643,e.Umacron=722,e.uring=556,e.threesuperior=333,e.Ograve=778,e.Agrave=667,e.Abreve=667,e.multiply=584,e.uacute=556,e.Tcaron=611,e.partialdiff=476,e.ydieresis=500,e.Nacute=722,e.icircumflex=278,e.Ecircumflex=667,e.adieresis=556,e.edieresis=556,e.cacute=500,e.nacute=556,e.umacron=556,e.Ncaron=722,e.Iacute=278,e.plusminus=584,e.brokenbar=260,e.registered=737,e.Gbreve=778,e.Idotaccent=278,e.summation=600,e.Egrave=667,e.racute=333,e.omacron=556,e.Zacute=611,e.Zcaron=611,e.greaterequal=549,e.Eth=722,e.Ccedilla=722,e.lcommaaccent=222,e.tcaron=317,e.eogonek=556,e.Uogonek=722,e.Aacute=667,e.Adieresis=667,e.egrave=556,e.zacute=500,e.iogonek=222,e.Oacute=778,e.oacute=556,e.amacron=556,e.sacute=500,e.idieresis=278,e.Ocircumflex=778,e.Ugrave=722,e.Delta=612,e.thorn=556,e.twosuperior=333,e.Odieresis=778,e.mu=556,e.igrave=278,e.ohungarumlaut=556,e.Eogonek=667,e.dcroat=556,e.threequarters=834,e.Scedilla=667,e.lcaron=299,e.Kcommaaccent=667,e.Lacute=556,e.trademark=1e3,e.edotaccent=556,e.Igrave=278,e.Imacron=278,e.Lcaron=556,e.onehalf=834,e.lessequal=549,e.ocircumflex=556,e.ntilde=556,e.Uhungarumlaut=722,e.Eacute=667,e.emacron=556,e.gbreve=556,e.onequarter=834,e.Scaron=667,e.Scommaaccent=667,e.Ohungarumlaut=778,e.degree=400,e.ograve=556,e.Ccaron=722,e.ugrave=556,e.radical=453,e.Dcaron=722,e.rcommaaccent=333,e.Ntilde=722,e.otilde=556,e.Rcommaaccent=722,e.Lcommaaccent=556,e.Atilde=667,e.Aogonek=667,e.Aring=667,e.Otilde=778,e.zdotaccent=500,e.Ecaron=667,e.Iogonek=278,e.kcommaaccent=500,e.minus=584,e.Icircumflex=278,e.ncaron=556,e.tcommaaccent=278,e.logicalnot=584,e.odieresis=556,e.udieresis=556,e.notequal=549,e.gcommaaccent=556,e.eth=556,e.zcaron=500,e.ncommaaccent=556,e.onesuperior=333,e.imacron=278,e.Euro=556})),e["Helvetica-Bold"]=(0,n.getLookupTableFactory)((function(e){e.space=278,e.exclam=333,e.quotedbl=474,e.numbersign=556,e.dollar=556,e.percent=889,e.ampersand=722,e.quoteright=278,e.parenleft=333,e.parenright=333,e.asterisk=389,e.plus=584,e.comma=278,e.hyphen=333,e.period=278,e.slash=278,e.zero=556,e.one=556,e.two=556,e.three=556,e.four=556,e.five=556,e.six=556,e.seven=556,e.eight=556,e.nine=556,e.colon=333,e.semicolon=333,e.less=584,e.equal=584,e.greater=584,e.question=611,e.at=975,e.A=722,e.B=722,e.C=722,e.D=722,e.E=667,e.F=611,e.G=778,e.H=722,e.I=278,e.J=556,e.K=722,e.L=611,e.M=833,e.N=722,e.O=778,e.P=667,e.Q=778,e.R=722,e.S=667,e.T=611,e.U=722,e.V=667,e.W=944,e.X=667,e.Y=667,e.Z=611,e.bracketleft=333,e.backslash=278,e.bracketright=333,e.asciicircum=584,e.underscore=556,e.quoteleft=278,e.a=556,e.b=611,e.c=556,e.d=611,e.e=556,e.f=333,e.g=611,e.h=611,e.i=278,e.j=278,e.k=556,e.l=278,e.m=889,e.n=611,e.o=611,e.p=611,e.q=611,e.r=389,e.s=556,e.t=333,e.u=611,e.v=556,e.w=778,e.x=556,e.y=556,e.z=500,e.braceleft=389,e.bar=280,e.braceright=389,e.asciitilde=584,e.exclamdown=333,e.cent=556,e.sterling=556,e.fraction=167,e.yen=556,e.florin=556,e.section=556,e.currency=556,e.quotesingle=238,e.quotedblleft=500,e.guillemotleft=556,e.guilsinglleft=333,e.guilsinglright=333,e.fi=611,e.fl=611,e.endash=556,e.dagger=556,e.daggerdbl=556,e.periodcentered=278,e.paragraph=556,e.bullet=350,e.quotesinglbase=278,e.quotedblbase=500,e.quotedblright=500,e.guillemotright=556,e.ellipsis=1e3,e.perthousand=1e3,e.questiondown=611,e.grave=333,e.acute=333,e.circumflex=333,e.tilde=333,e.macron=333,e.breve=333,e.dotaccent=333,e.dieresis=333,e.ring=333,e.cedilla=333,e.hungarumlaut=333,e.ogonek=333,e.caron=333,e.emdash=1e3,e.AE=1e3,e.ordfeminine=370,e.Lslash=611,e.Oslash=778,e.OE=1e3,e.ordmasculine=365,e.ae=889,e.dotlessi=278,e.lslash=278,e.oslash=611,e.oe=944,e.germandbls=611,e.Idieresis=278,e.eacute=556,e.abreve=556,e.uhungarumlaut=611,e.ecaron=556,e.Ydieresis=667,e.divide=584,e.Yacute=667,e.Acircumflex=722,e.aacute=556,e.Ucircumflex=722,e.yacute=556,e.scommaaccent=556,e.ecircumflex=556,e.Uring=722,e.Udieresis=722,e.aogonek=556,e.Uacute=722,e.uogonek=611,e.Edieresis=667,e.Dcroat=722,e.commaaccent=250,e.copyright=737,e.Emacron=667,e.ccaron=556,e.aring=556,e.Ncommaaccent=722,e.lacute=278,e.agrave=556,e.Tcommaaccent=611,e.Cacute=722,e.atilde=556,e.Edotaccent=667,e.scaron=556,e.scedilla=556,e.iacute=278,e.lozenge=494,e.Rcaron=722,e.Gcommaaccent=778,e.ucircumflex=611,e.acircumflex=556,e.Amacron=722,e.rcaron=389,e.ccedilla=556,e.Zdotaccent=611,e.Thorn=667,e.Omacron=778,e.Racute=722,e.Sacute=667,e.dcaron=743,e.Umacron=722,e.uring=611,e.threesuperior=333,e.Ograve=778,e.Agrave=722,e.Abreve=722,e.multiply=584,e.uacute=611,e.Tcaron=611,e.partialdiff=494,e.ydieresis=556,e.Nacute=722,e.icircumflex=278,e.Ecircumflex=667,e.adieresis=556,e.edieresis=556,e.cacute=556,e.nacute=611,e.umacron=611,e.Ncaron=722,e.Iacute=278,e.plusminus=584,e.brokenbar=280,e.registered=737,e.Gbreve=778,e.Idotaccent=278,e.summation=600,e.Egrave=667,e.racute=389,e.omacron=611,e.Zacute=611,e.Zcaron=611,e.greaterequal=549,e.Eth=722,e.Ccedilla=722,e.lcommaaccent=278,e.tcaron=389,e.eogonek=556,e.Uogonek=722,e.Aacute=722,e.Adieresis=722,e.egrave=556,e.zacute=500,e.iogonek=278,e.Oacute=778,e.oacute=611,e.amacron=556,e.sacute=556,e.idieresis=278,e.Ocircumflex=778,e.Ugrave=722,e.Delta=612,e.thorn=611,e.twosuperior=333,e.Odieresis=778,e.mu=611,e.igrave=278,e.ohungarumlaut=611,e.Eogonek=667,e.dcroat=611,e.threequarters=834,e.Scedilla=667,e.lcaron=400,e.Kcommaaccent=722,e.Lacute=611,e.trademark=1e3,e.edotaccent=556,e.Igrave=278,e.Imacron=278,e.Lcaron=611,e.onehalf=834,e.lessequal=549,e.ocircumflex=611,e.ntilde=611,e.Uhungarumlaut=722,e.Eacute=667,e.emacron=556,e.gbreve=611,e.onequarter=834,e.Scaron=667,e.Scommaaccent=667,e.Ohungarumlaut=778,e.degree=400,e.ograve=611,e.Ccaron=722,e.ugrave=611,e.radical=549,e.Dcaron=722,e.rcommaaccent=389,e.Ntilde=722,e.otilde=611,e.Rcommaaccent=722,e.Lcommaaccent=611,e.Atilde=722,e.Aogonek=722,e.Aring=722,e.Otilde=778,e.zdotaccent=500,e.Ecaron=667,e.Iogonek=278,e.kcommaaccent=556,e.minus=584,e.Icircumflex=278,e.ncaron=611,e.tcommaaccent=333,e.logicalnot=584,e.odieresis=611,e.udieresis=611,e.notequal=549,e.gcommaaccent=611,e.eth=611,e.zcaron=500,e.ncommaaccent=611,e.onesuperior=333,e.imacron=278,e.Euro=556})),e["Helvetica-BoldOblique"]=(0,n.getLookupTableFactory)((function(e){e.space=278,e.exclam=333,e.quotedbl=474,e.numbersign=556,e.dollar=556,e.percent=889,e.ampersand=722,e.quoteright=278,e.parenleft=333,e.parenright=333,e.asterisk=389,e.plus=584,e.comma=278,e.hyphen=333,e.period=278,e.slash=278,e.zero=556,e.one=556,e.two=556,e.three=556,e.four=556,e.five=556,e.six=556,e.seven=556,e.eight=556,e.nine=556,e.colon=333,e.semicolon=333,e.less=584,e.equal=584,e.greater=584,e.question=611,e.at=975,e.A=722,e.B=722,e.C=722,e.D=722,e.E=667,e.F=611,e.G=778,e.H=722,e.I=278,e.J=556,e.K=722,e.L=611,e.M=833,e.N=722,e.O=778,e.P=667,e.Q=778,e.R=722,e.S=667,e.T=611,e.U=722,e.V=667,e.W=944,e.X=667,e.Y=667,e.Z=611,e.bracketleft=333,e.backslash=278,e.bracketright=333,e.asciicircum=584,e.underscore=556,e.quoteleft=278,e.a=556,e.b=611,e.c=556,e.d=611,e.e=556,e.f=333,e.g=611,e.h=611,e.i=278,e.j=278,e.k=556,e.l=278,e.m=889,e.n=611,e.o=611,e.p=611,e.q=611,e.r=389,e.s=556,e.t=333,e.u=611,e.v=556,e.w=778,e.x=556,e.y=556,e.z=500,e.braceleft=389,e.bar=280,e.braceright=389,e.asciitilde=584,e.exclamdown=333,e.cent=556,e.sterling=556,e.fraction=167,e.yen=556,e.florin=556,e.section=556,e.currency=556,e.quotesingle=238,e.quotedblleft=500,e.guillemotleft=556,e.guilsinglleft=333,e.guilsinglright=333,e.fi=611,e.fl=611,e.endash=556,e.dagger=556,e.daggerdbl=556,e.periodcentered=278,e.paragraph=556,e.bullet=350,e.quotesinglbase=278,e.quotedblbase=500,e.quotedblright=500,e.guillemotright=556,e.ellipsis=1e3,e.perthousand=1e3,e.questiondown=611,e.grave=333,e.acute=333,e.circumflex=333,e.tilde=333,e.macron=333,e.breve=333,e.dotaccent=333,e.dieresis=333,e.ring=333,e.cedilla=333,e.hungarumlaut=333,e.ogonek=333,e.caron=333,e.emdash=1e3,e.AE=1e3,e.ordfeminine=370,e.Lslash=611,e.Oslash=778,e.OE=1e3,e.ordmasculine=365,e.ae=889,e.dotlessi=278,e.lslash=278,e.oslash=611,e.oe=944,e.germandbls=611,e.Idieresis=278,e.eacute=556,e.abreve=556,e.uhungarumlaut=611,e.ecaron=556,e.Ydieresis=667,e.divide=584,e.Yacute=667,e.Acircumflex=722,e.aacute=556,e.Ucircumflex=722,e.yacute=556,e.scommaaccent=556,e.ecircumflex=556,e.Uring=722,e.Udieresis=722,e.aogonek=556,e.Uacute=722,e.uogonek=611,e.Edieresis=667,e.Dcroat=722,e.commaaccent=250,e.copyright=737,e.Emacron=667,e.ccaron=556,e.aring=556,e.Ncommaaccent=722,e.lacute=278,e.agrave=556,e.Tcommaaccent=611,e.Cacute=722,e.atilde=556,e.Edotaccent=667,e.scaron=556,e.scedilla=556,e.iacute=278,e.lozenge=494,e.Rcaron=722,e.Gcommaaccent=778,e.ucircumflex=611,e.acircumflex=556,e.Amacron=722,e.rcaron=389,e.ccedilla=556,e.Zdotaccent=611,e.Thorn=667,e.Omacron=778,e.Racute=722,e.Sacute=667,e.dcaron=743,e.Umacron=722,e.uring=611,e.threesuperior=333,e.Ograve=778,e.Agrave=722,e.Abreve=722,e.multiply=584,e.uacute=611,e.Tcaron=611,e.partialdiff=494,e.ydieresis=556,e.Nacute=722,e.icircumflex=278,e.Ecircumflex=667,e.adieresis=556,e.edieresis=556,e.cacute=556,e.nacute=611,e.umacron=611,e.Ncaron=722,e.Iacute=278,e.plusminus=584,e.brokenbar=280,e.registered=737,e.Gbreve=778,e.Idotaccent=278,e.summation=600,e.Egrave=667,e.racute=389,e.omacron=611,e.Zacute=611,e.Zcaron=611,e.greaterequal=549,e.Eth=722,e.Ccedilla=722,e.lcommaaccent=278,e.tcaron=389,e.eogonek=556,e.Uogonek=722,e.Aacute=722,e.Adieresis=722,e.egrave=556,e.zacute=500,e.iogonek=278,e.Oacute=778,e.oacute=611,e.amacron=556,e.sacute=556,e.idieresis=278,e.Ocircumflex=778,e.Ugrave=722,e.Delta=612,e.thorn=611,e.twosuperior=333,e.Odieresis=778,e.mu=611,e.igrave=278,e.ohungarumlaut=611,e.Eogonek=667,e.dcroat=611,e.threequarters=834,e.Scedilla=667,e.lcaron=400,e.Kcommaaccent=722,e.Lacute=611,e.trademark=1e3,e.edotaccent=556,e.Igrave=278,e.Imacron=278,e.Lcaron=611,e.onehalf=834,e.lessequal=549,e.ocircumflex=611,e.ntilde=611,e.Uhungarumlaut=722,e.Eacute=667,e.emacron=556,e.gbreve=611,e.onequarter=834,e.Scaron=667,e.Scommaaccent=667,e.Ohungarumlaut=778,e.degree=400,e.ograve=611,e.Ccaron=722,e.ugrave=611,e.radical=549,e.Dcaron=722,e.rcommaaccent=389,e.Ntilde=722,e.otilde=611,e.Rcommaaccent=722,e.Lcommaaccent=611,e.Atilde=722,e.Aogonek=722,e.Aring=722,e.Otilde=778,e.zdotaccent=500,e.Ecaron=667,e.Iogonek=278,e.kcommaaccent=556,e.minus=584,e.Icircumflex=278,e.ncaron=611,e.tcommaaccent=333,e.logicalnot=584,e.odieresis=611,e.udieresis=611,e.notequal=549,e.gcommaaccent=611,e.eth=611,e.zcaron=500,e.ncommaaccent=611,e.onesuperior=333,e.imacron=278,e.Euro=556})),e["Helvetica-Oblique"]=(0,n.getLookupTableFactory)((function(e){e.space=278,e.exclam=278,e.quotedbl=355,e.numbersign=556,e.dollar=556,e.percent=889,e.ampersand=667,e.quoteright=222,e.parenleft=333,e.parenright=333,e.asterisk=389,e.plus=584,e.comma=278,e.hyphen=333,e.period=278,e.slash=278,e.zero=556,e.one=556,e.two=556,e.three=556,e.four=556,e.five=556,e.six=556,e.seven=556,e.eight=556,e.nine=556,e.colon=278,e.semicolon=278,e.less=584,e.equal=584,e.greater=584,e.question=556,e.at=1015,e.A=667,e.B=667,e.C=722,e.D=722,e.E=667,e.F=611,e.G=778,e.H=722,e.I=278,e.J=500,e.K=667,e.L=556,e.M=833,e.N=722,e.O=778,e.P=667,e.Q=778,e.R=722,e.S=667,e.T=611,e.U=722,e.V=667,e.W=944,e.X=667,e.Y=667,e.Z=611,e.bracketleft=278,e.backslash=278,e.bracketright=278,e.asciicircum=469,e.underscore=556,e.quoteleft=222,e.a=556,e.b=556,e.c=500,e.d=556,e.e=556,e.f=278,e.g=556,e.h=556,e.i=222,e.j=222,e.k=500,e.l=222,e.m=833,e.n=556,e.o=556,e.p=556,e.q=556,e.r=333,e.s=500,e.t=278,e.u=556,e.v=500,e.w=722,e.x=500,e.y=500,e.z=500,e.braceleft=334,e.bar=260,e.braceright=334,e.asciitilde=584,e.exclamdown=333,e.cent=556,e.sterling=556,e.fraction=167,e.yen=556,e.florin=556,e.section=556,e.currency=556,e.quotesingle=191,e.quotedblleft=333,e.guillemotleft=556,e.guilsinglleft=333,e.guilsinglright=333,e.fi=500,e.fl=500,e.endash=556,e.dagger=556,e.daggerdbl=556,e.periodcentered=278,e.paragraph=537,e.bullet=350,e.quotesinglbase=222,e.quotedblbase=333,e.quotedblright=333,e.guillemotright=556,e.ellipsis=1e3,e.perthousand=1e3,e.questiondown=611,e.grave=333,e.acute=333,e.circumflex=333,e.tilde=333,e.macron=333,e.breve=333,e.dotaccent=333,e.dieresis=333,e.ring=333,e.cedilla=333,e.hungarumlaut=333,e.ogonek=333,e.caron=333,e.emdash=1e3,e.AE=1e3,e.ordfeminine=370,e.Lslash=556,e.Oslash=778,e.OE=1e3,e.ordmasculine=365,e.ae=889,e.dotlessi=278,e.lslash=222,e.oslash=611,e.oe=944,e.germandbls=611,e.Idieresis=278,e.eacute=556,e.abreve=556,e.uhungarumlaut=556,e.ecaron=556,e.Ydieresis=667,e.divide=584,e.Yacute=667,e.Acircumflex=667,e.aacute=556,e.Ucircumflex=722,e.yacute=500,e.scommaaccent=500,e.ecircumflex=556,e.Uring=722,e.Udieresis=722,e.aogonek=556,e.Uacute=722,e.uogonek=556,e.Edieresis=667,e.Dcroat=722,e.commaaccent=250,e.copyright=737,e.Emacron=667,e.ccaron=500,e.aring=556,e.Ncommaaccent=722,e.lacute=222,e.agrave=556,e.Tcommaaccent=611,e.Cacute=722,e.atilde=556,e.Edotaccent=667,e.scaron=500,e.scedilla=500,e.iacute=278,e.lozenge=471,e.Rcaron=722,e.Gcommaaccent=778,e.ucircumflex=556,e.acircumflex=556,e.Amacron=667,e.rcaron=333,e.ccedilla=500,e.Zdotaccent=611,e.Thorn=667,e.Omacron=778,e.Racute=722,e.Sacute=667,e.dcaron=643,e.Umacron=722,e.uring=556,e.threesuperior=333,e.Ograve=778,e.Agrave=667,e.Abreve=667,e.multiply=584,e.uacute=556,e.Tcaron=611,e.partialdiff=476,e.ydieresis=500,e.Nacute=722,e.icircumflex=278,e.Ecircumflex=667,e.adieresis=556,e.edieresis=556,e.cacute=500,e.nacute=556,e.umacron=556,e.Ncaron=722,e.Iacute=278,e.plusminus=584,e.brokenbar=260,e.registered=737,e.Gbreve=778,e.Idotaccent=278,e.summation=600,e.Egrave=667,e.racute=333,e.omacron=556,e.Zacute=611,e.Zcaron=611,e.greaterequal=549,e.Eth=722,e.Ccedilla=722,e.lcommaaccent=222,e.tcaron=317,e.eogonek=556,e.Uogonek=722,e.Aacute=667,e.Adieresis=667,e.egrave=556,e.zacute=500,e.iogonek=222,e.Oacute=778,e.oacute=556,e.amacron=556,e.sacute=500,e.idieresis=278,e.Ocircumflex=778,e.Ugrave=722,e.Delta=612,e.thorn=556,e.twosuperior=333,e.Odieresis=778,e.mu=556,e.igrave=278,e.ohungarumlaut=556,e.Eogonek=667,e.dcroat=556,e.threequarters=834,e.Scedilla=667,e.lcaron=299,e.Kcommaaccent=667,e.Lacute=556,e.trademark=1e3,e.edotaccent=556,e.Igrave=278,e.Imacron=278,e.Lcaron=556,e.onehalf=834,e.lessequal=549,e.ocircumflex=556,e.ntilde=556,e.Uhungarumlaut=722,e.Eacute=667,e.emacron=556,e.gbreve=556,e.onequarter=834,e.Scaron=667,e.Scommaaccent=667,e.Ohungarumlaut=778,e.degree=400,e.ograve=556,e.Ccaron=722,e.ugrave=556,e.radical=453,e.Dcaron=722,e.rcommaaccent=333,e.Ntilde=722,e.otilde=556,e.Rcommaaccent=722,e.Lcommaaccent=556,e.Atilde=667,e.Aogonek=667,e.Aring=667,e.Otilde=778,e.zdotaccent=500,e.Ecaron=667,e.Iogonek=278,e.kcommaaccent=500,e.minus=584,e.Icircumflex=278,e.ncaron=556,e.tcommaaccent=278,e.logicalnot=584,e.odieresis=556,e.udieresis=556,e.notequal=549,e.gcommaaccent=556,e.eth=556,e.zcaron=500,e.ncommaaccent=556,e.onesuperior=333,e.imacron=278,e.Euro=556})),e.Symbol=(0,n.getLookupTableFactory)((function(e){e.space=250,e.exclam=333,e.universal=713,e.numbersign=500,e.existential=549,e.percent=833,e.ampersand=778,e.suchthat=439,e.parenleft=333,e.parenright=333,e.asteriskmath=500,e.plus=549,e.comma=250,e.minus=549,e.period=250,e.slash=278,e.zero=500,e.one=500,e.two=500,e.three=500,e.four=500,e.five=500,e.six=500,e.seven=500,e.eight=500,e.nine=500,e.colon=278,e.semicolon=278,e.less=549,e.equal=549,e.greater=549,e.question=444,e.congruent=549,e.Alpha=722,e.Beta=667,e.Chi=722,e.Delta=612,e.Epsilon=611,e.Phi=763,e.Gamma=603,e.Eta=722,e.Iota=333,e.theta1=631,e.Kappa=722,e.Lambda=686,e.Mu=889,e.Nu=722,e.Omicron=722,e.Pi=768,e.Theta=741,e.Rho=556,e.Sigma=592,e.Tau=611,e.Upsilon=690,e.sigma1=439,e.Omega=768,e.Xi=645,e.Psi=795,e.Zeta=611,e.bracketleft=333,e.therefore=863,e.bracketright=333,e.perpendicular=658,e.underscore=500,e.radicalex=500,e.alpha=631,e.beta=549,e.chi=549,e.delta=494,e.epsilon=439,e.phi=521,e.gamma=411,e.eta=603,e.iota=329,e.phi1=603,e.kappa=549,e.lambda=549,e.mu=576,e.nu=521,e.omicron=549,e.pi=549,e.theta=521,e.rho=549,e.sigma=603,e.tau=439,e.upsilon=576,e.omega1=713,e.omega=686,e.xi=493,e.psi=686,e.zeta=494,e.braceleft=480,e.bar=200,e.braceright=480,e.similar=549,e.Euro=750,e.Upsilon1=620,e.minute=247,e.lessequal=549,e.fraction=167,e.infinity=713,e.florin=500,e.club=753,e.diamond=753,e.heart=753,e.spade=753,e.arrowboth=1042,e.arrowleft=987,e.arrowup=603,e.arrowright=987,e.arrowdown=603,e.degree=400,e.plusminus=549,e.second=411,e.greaterequal=549,e.multiply=549,e.proportional=713,e.partialdiff=494,e.bullet=460,e.divide=549,e.notequal=549,e.equivalence=549,e.approxequal=549,e.ellipsis=1e3,e.arrowvertex=603,e.arrowhorizex=1e3,e.carriagereturn=658,e.aleph=823,e.Ifraktur=686,e.Rfraktur=795,e.weierstrass=987,e.circlemultiply=768,e.circleplus=768,e.emptyset=823,e.intersection=768,e.union=768,e.propersuperset=713,e.reflexsuperset=713,e.notsubset=713,e.propersubset=713,e.reflexsubset=713,e.element=713,e.notelement=713,e.angle=768,e.gradient=713,e.registerserif=790,e.copyrightserif=790,e.trademarkserif=890,e.product=823,e.radical=549,e.dotmath=250,e.logicalnot=713,e.logicaland=603,e.logicalor=603,e.arrowdblboth=1042,e.arrowdblleft=987,e.arrowdblup=603,e.arrowdblright=987,e.arrowdbldown=603,e.lozenge=494,e.angleleft=329,e.registersans=790,e.copyrightsans=790,e.trademarksans=786,e.summation=713,e.parenlefttp=384,e.parenleftex=384,e.parenleftbt=384,e.bracketlefttp=384,e.bracketleftex=384,e.bracketleftbt=384,e.bracelefttp=494,e.braceleftmid=494,e.braceleftbt=494,e.braceex=494,e.angleright=329,e.integral=274,e.integraltp=686,e.integralex=686,e.integralbt=686,e.parenrighttp=384,e.parenrightex=384,e.parenrightbt=384,e.bracketrighttp=384,e.bracketrightex=384,e.bracketrightbt=384,e.bracerighttp=494,e.bracerightmid=494,e.bracerightbt=494,e.apple=790})),e["Times-Roman"]=(0,n.getLookupTableFactory)((function(e){e.space=250,e.exclam=333,e.quotedbl=408,e.numbersign=500,e.dollar=500,e.percent=833,e.ampersand=778,e.quoteright=333,e.parenleft=333,e.parenright=333,e.asterisk=500,e.plus=564,e.comma=250,e.hyphen=333,e.period=250,e.slash=278,e.zero=500,e.one=500,e.two=500,e.three=500,e.four=500,e.five=500,e.six=500,e.seven=500,e.eight=500,e.nine=500,e.colon=278,e.semicolon=278,e.less=564,e.equal=564,e.greater=564,e.question=444,e.at=921,e.A=722,e.B=667,e.C=667,e.D=722,e.E=611,e.F=556,e.G=722,e.H=722,e.I=333,e.J=389,e.K=722,e.L=611,e.M=889,e.N=722,e.O=722,e.P=556,e.Q=722,e.R=667,e.S=556,e.T=611,e.U=722,e.V=722,e.W=944,e.X=722,e.Y=722,e.Z=611,e.bracketleft=333,e.backslash=278,e.bracketright=333,e.asciicircum=469,e.underscore=500,e.quoteleft=333,e.a=444,e.b=500,e.c=444,e.d=500,e.e=444,e.f=333,e.g=500,e.h=500,e.i=278,e.j=278,e.k=500,e.l=278,e.m=778,e.n=500,e.o=500,e.p=500,e.q=500,e.r=333,e.s=389,e.t=278,e.u=500,e.v=500,e.w=722,e.x=500,e.y=500,e.z=444,e.braceleft=480,e.bar=200,e.braceright=480,e.asciitilde=541,e.exclamdown=333,e.cent=500,e.sterling=500,e.fraction=167,e.yen=500,e.florin=500,e.section=500,e.currency=500,e.quotesingle=180,e.quotedblleft=444,e.guillemotleft=500,e.guilsinglleft=333,e.guilsinglright=333,e.fi=556,e.fl=556,e.endash=500,e.dagger=500,e.daggerdbl=500,e.periodcentered=250,e.paragraph=453,e.bullet=350,e.quotesinglbase=333,e.quotedblbase=444,e.quotedblright=444,e.guillemotright=500,e.ellipsis=1e3,e.perthousand=1e3,e.questiondown=444,e.grave=333,e.acute=333,e.circumflex=333,e.tilde=333,e.macron=333,e.breve=333,e.dotaccent=333,e.dieresis=333,e.ring=333,e.cedilla=333,e.hungarumlaut=333,e.ogonek=333,e.caron=333,e.emdash=1e3,e.AE=889,e.ordfeminine=276,e.Lslash=611,e.Oslash=722,e.OE=889,e.ordmasculine=310,e.ae=667,e.dotlessi=278,e.lslash=278,e.oslash=500,e.oe=722,e.germandbls=500,e.Idieresis=333,e.eacute=444,e.abreve=444,e.uhungarumlaut=500,e.ecaron=444,e.Ydieresis=722,e.divide=564,e.Yacute=722,e.Acircumflex=722,e.aacute=444,e.Ucircumflex=722,e.yacute=500,e.scommaaccent=389,e.ecircumflex=444,e.Uring=722,e.Udieresis=722,e.aogonek=444,e.Uacute=722,e.uogonek=500,e.Edieresis=611,e.Dcroat=722,e.commaaccent=250,e.copyright=760,e.Emacron=611,e.ccaron=444,e.aring=444,e.Ncommaaccent=722,e.lacute=278,e.agrave=444,e.Tcommaaccent=611,e.Cacute=667,e.atilde=444,e.Edotaccent=611,e.scaron=389,e.scedilla=389,e.iacute=278,e.lozenge=471,e.Rcaron=667,e.Gcommaaccent=722,e.ucircumflex=500,e.acircumflex=444,e.Amacron=722,e.rcaron=333,e.ccedilla=444,e.Zdotaccent=611,e.Thorn=556,e.Omacron=722,e.Racute=667,e.Sacute=556,e.dcaron=588,e.Umacron=722,e.uring=500,e.threesuperior=300,e.Ograve=722,e.Agrave=722,e.Abreve=722,e.multiply=564,e.uacute=500,e.Tcaron=611,e.partialdiff=476,e.ydieresis=500,e.Nacute=722,e.icircumflex=278,e.Ecircumflex=611,e.adieresis=444,e.edieresis=444,e.cacute=444,e.nacute=500,e.umacron=500,e.Ncaron=722,e.Iacute=333,e.plusminus=564,e.brokenbar=200,e.registered=760,e.Gbreve=722,e.Idotaccent=333,e.summation=600,e.Egrave=611,e.racute=333,e.omacron=500,e.Zacute=611,e.Zcaron=611,e.greaterequal=549,e.Eth=722,e.Ccedilla=667,e.lcommaaccent=278,e.tcaron=326,e.eogonek=444,e.Uogonek=722,e.Aacute=722,e.Adieresis=722,e.egrave=444,e.zacute=444,e.iogonek=278,e.Oacute=722,e.oacute=500,e.amacron=444,e.sacute=389,e.idieresis=278,e.Ocircumflex=722,e.Ugrave=722,e.Delta=612,e.thorn=500,e.twosuperior=300,e.Odieresis=722,e.mu=500,e.igrave=278,e.ohungarumlaut=500,e.Eogonek=611,e.dcroat=500,e.threequarters=750,e.Scedilla=556,e.lcaron=344,e.Kcommaaccent=722,e.Lacute=611,e.trademark=980,e.edotaccent=444,e.Igrave=333,e.Imacron=333,e.Lcaron=611,e.onehalf=750,e.lessequal=549,e.ocircumflex=500,e.ntilde=500,e.Uhungarumlaut=722,e.Eacute=611,e.emacron=444,e.gbreve=500,e.onequarter=750,e.Scaron=556,e.Scommaaccent=556,e.Ohungarumlaut=722,e.degree=400,e.ograve=500,e.Ccaron=667,e.ugrave=500,e.radical=453,e.Dcaron=722,e.rcommaaccent=333,e.Ntilde=722,e.otilde=500,e.Rcommaaccent=667,e.Lcommaaccent=611,e.Atilde=722,e.Aogonek=722,e.Aring=722,e.Otilde=722,e.zdotaccent=444,e.Ecaron=611,e.Iogonek=333,e.kcommaaccent=500,e.minus=564,e.Icircumflex=333,e.ncaron=500,e.tcommaaccent=278,e.logicalnot=564,e.odieresis=500,e.udieresis=500,e.notequal=549,e.gcommaaccent=500,e.eth=500,e.zcaron=444,e.ncommaaccent=500,e.onesuperior=300,e.imacron=278,e.Euro=500})),e["Times-Bold"]=(0,n.getLookupTableFactory)((function(e){e.space=250,e.exclam=333,e.quotedbl=555,e.numbersign=500,e.dollar=500,e.percent=1e3,e.ampersand=833,e.quoteright=333,e.parenleft=333,e.parenright=333,e.asterisk=500,e.plus=570,e.comma=250,e.hyphen=333,e.period=250,e.slash=278,e.zero=500,e.one=500,e.two=500,e.three=500,e.four=500,e.five=500,e.six=500,e.seven=500,e.eight=500,e.nine=500,e.colon=333,e.semicolon=333,e.less=570,e.equal=570,e.greater=570,e.question=500,e.at=930,e.A=722,e.B=667,e.C=722,e.D=722,e.E=667,e.F=611,e.G=778,e.H=778,e.I=389,e.J=500,e.K=778,e.L=667,e.M=944,e.N=722,e.O=778,e.P=611,e.Q=778,e.R=722,e.S=556,e.T=667,e.U=722,e.V=722,e.W=1e3,e.X=722,e.Y=722,e.Z=667,e.bracketleft=333,e.backslash=278,e.bracketright=333,e.asciicircum=581,e.underscore=500,e.quoteleft=333,e.a=500,e.b=556,e.c=444,e.d=556,e.e=444,e.f=333,e.g=500,e.h=556,e.i=278,e.j=333,e.k=556,e.l=278,e.m=833,e.n=556,e.o=500,e.p=556,e.q=556,e.r=444,e.s=389,e.t=333,e.u=556,e.v=500,e.w=722,e.x=500,e.y=500,e.z=444,e.braceleft=394,e.bar=220,e.braceright=394,e.asciitilde=520,e.exclamdown=333,e.cent=500,e.sterling=500,e.fraction=167,e.yen=500,e.florin=500,e.section=500,e.currency=500,e.quotesingle=278,e.quotedblleft=500,e.guillemotleft=500,e.guilsinglleft=333,e.guilsinglright=333,e.fi=556,e.fl=556,e.endash=500,e.dagger=500,e.daggerdbl=500,e.periodcentered=250,e.paragraph=540,e.bullet=350,e.quotesinglbase=333,e.quotedblbase=500,e.quotedblright=500,e.guillemotright=500,e.ellipsis=1e3,e.perthousand=1e3,e.questiondown=500,e.grave=333,e.acute=333,e.circumflex=333,e.tilde=333,e.macron=333,e.breve=333,e.dotaccent=333,e.dieresis=333,e.ring=333,e.cedilla=333,e.hungarumlaut=333,e.ogonek=333,e.caron=333,e.emdash=1e3,e.AE=1e3,e.ordfeminine=300,e.Lslash=667,e.Oslash=778,e.OE=1e3,e.ordmasculine=330,e.ae=722,e.dotlessi=278,e.lslash=278,e.oslash=500,e.oe=722,e.germandbls=556,e.Idieresis=389,e.eacute=444,e.abreve=500,e.uhungarumlaut=556,e.ecaron=444,e.Ydieresis=722,e.divide=570,e.Yacute=722,e.Acircumflex=722,e.aacute=500,e.Ucircumflex=722,e.yacute=500,e.scommaaccent=389,e.ecircumflex=444,e.Uring=722,e.Udieresis=722,e.aogonek=500,e.Uacute=722,e.uogonek=556,e.Edieresis=667,e.Dcroat=722,e.commaaccent=250,e.copyright=747,e.Emacron=667,e.ccaron=444,e.aring=500,e.Ncommaaccent=722,e.lacute=278,e.agrave=500,e.Tcommaaccent=667,e.Cacute=722,e.atilde=500,e.Edotaccent=667,e.scaron=389,e.scedilla=389,e.iacute=278,e.lozenge=494,e.Rcaron=722,e.Gcommaaccent=778,e.ucircumflex=556,e.acircumflex=500,e.Amacron=722,e.rcaron=444,e.ccedilla=444,e.Zdotaccent=667,e.Thorn=611,e.Omacron=778,e.Racute=722,e.Sacute=556,e.dcaron=672,e.Umacron=722,e.uring=556,e.threesuperior=300,e.Ograve=778,e.Agrave=722,e.Abreve=722,e.multiply=570,e.uacute=556,e.Tcaron=667,e.partialdiff=494,e.ydieresis=500,e.Nacute=722,e.icircumflex=278,e.Ecircumflex=667,e.adieresis=500,e.edieresis=444,e.cacute=444,e.nacute=556,e.umacron=556,e.Ncaron=722,e.Iacute=389,e.plusminus=570,e.brokenbar=220,e.registered=747,e.Gbreve=778,e.Idotaccent=389,e.summation=600,e.Egrave=667,e.racute=444,e.omacron=500,e.Zacute=667,e.Zcaron=667,e.greaterequal=549,e.Eth=722,e.Ccedilla=722,e.lcommaaccent=278,e.tcaron=416,e.eogonek=444,e.Uogonek=722,e.Aacute=722,e.Adieresis=722,e.egrave=444,e.zacute=444,e.iogonek=278,e.Oacute=778,e.oacute=500,e.amacron=500,e.sacute=389,e.idieresis=278,e.Ocircumflex=778,e.Ugrave=722,e.Delta=612,e.thorn=556,e.twosuperior=300,e.Odieresis=778,e.mu=556,e.igrave=278,e.ohungarumlaut=500,e.Eogonek=667,e.dcroat=556,e.threequarters=750,e.Scedilla=556,e.lcaron=394,e.Kcommaaccent=778,e.Lacute=667,e.trademark=1e3,e.edotaccent=444,e.Igrave=389,e.Imacron=389,e.Lcaron=667,e.onehalf=750,e.lessequal=549,e.ocircumflex=500,e.ntilde=556,e.Uhungarumlaut=722,e.Eacute=667,e.emacron=444,e.gbreve=500,e.onequarter=750,e.Scaron=556,e.Scommaaccent=556,e.Ohungarumlaut=778,e.degree=400,e.ograve=500,e.Ccaron=722,e.ugrave=556,e.radical=549,e.Dcaron=722,e.rcommaaccent=444,e.Ntilde=722,e.otilde=500,e.Rcommaaccent=722,e.Lcommaaccent=667,e.Atilde=722,e.Aogonek=722,e.Aring=722,e.Otilde=778,e.zdotaccent=444,e.Ecaron=667,e.Iogonek=389,e.kcommaaccent=556,e.minus=570,e.Icircumflex=389,e.ncaron=556,e.tcommaaccent=333,e.logicalnot=570,e.odieresis=500,e.udieresis=556,e.notequal=549,e.gcommaaccent=500,e.eth=500,e.zcaron=444,e.ncommaaccent=556,e.onesuperior=300,e.imacron=278,e.Euro=500})),e["Times-BoldItalic"]=(0,n.getLookupTableFactory)((function(e){e.space=250,e.exclam=389,e.quotedbl=555,e.numbersign=500,e.dollar=500,e.percent=833,e.ampersand=778,e.quoteright=333,e.parenleft=333,e.parenright=333,e.asterisk=500,e.plus=570,e.comma=250,e.hyphen=333,e.period=250,e.slash=278,e.zero=500,e.one=500,e.two=500,e.three=500,e.four=500,e.five=500,e.six=500,e.seven=500,e.eight=500,e.nine=500,e.colon=333,e.semicolon=333,e.less=570,e.equal=570,e.greater=570,e.question=500,e.at=832,e.A=667,e.B=667,e.C=667,e.D=722,e.E=667,e.F=667,e.G=722,e.H=778,e.I=389,e.J=500,e.K=667,e.L=611,e.M=889,e.N=722,e.O=722,e.P=611,e.Q=722,e.R=667,e.S=556,e.T=611,e.U=722,e.V=667,e.W=889,e.X=667,e.Y=611,e.Z=611,e.bracketleft=333,e.backslash=278,e.bracketright=333,e.asciicircum=570,e.underscore=500,e.quoteleft=333,e.a=500,e.b=500,e.c=444,e.d=500,e.e=444,e.f=333,e.g=500,e.h=556,e.i=278,e.j=278,e.k=500,e.l=278,e.m=778,e.n=556,e.o=500,e.p=500,e.q=500,e.r=389,e.s=389,e.t=278,e.u=556,e.v=444,e.w=667,e.x=500,e.y=444,e.z=389,e.braceleft=348,e.bar=220,e.braceright=348,e.asciitilde=570,e.exclamdown=389,e.cent=500,e.sterling=500,e.fraction=167,e.yen=500,e.florin=500,e.section=500,e.currency=500,e.quotesingle=278,e.quotedblleft=500,e.guillemotleft=500,e.guilsinglleft=333,e.guilsinglright=333,e.fi=556,e.fl=556,e.endash=500,e.dagger=500,e.daggerdbl=500,e.periodcentered=250,e.paragraph=500,e.bullet=350,e.quotesinglbase=333,e.quotedblbase=500,e.quotedblright=500,e.guillemotright=500,e.ellipsis=1e3,e.perthousand=1e3,e.questiondown=500,e.grave=333,e.acute=333,e.circumflex=333,e.tilde=333,e.macron=333,e.breve=333,e.dotaccent=333,e.dieresis=333,e.ring=333,e.cedilla=333,e.hungarumlaut=333,e.ogonek=333,e.caron=333,e.emdash=1e3,e.AE=944,e.ordfeminine=266,e.Lslash=611,e.Oslash=722,e.OE=944,e.ordmasculine=300,e.ae=722,e.dotlessi=278,e.lslash=278,e.oslash=500,e.oe=722,e.germandbls=500,e.Idieresis=389,e.eacute=444,e.abreve=500,e.uhungarumlaut=556,e.ecaron=444,e.Ydieresis=611,e.divide=570,e.Yacute=611,e.Acircumflex=667,e.aacute=500,e.Ucircumflex=722,e.yacute=444,e.scommaaccent=389,e.ecircumflex=444,e.Uring=722,e.Udieresis=722,e.aogonek=500,e.Uacute=722,e.uogonek=556,e.Edieresis=667,e.Dcroat=722,e.commaaccent=250,e.copyright=747,e.Emacron=667,e.ccaron=444,e.aring=500,e.Ncommaaccent=722,e.lacute=278,e.agrave=500,e.Tcommaaccent=611,e.Cacute=667,e.atilde=500,e.Edotaccent=667,e.scaron=389,e.scedilla=389,e.iacute=278,e.lozenge=494,e.Rcaron=667,e.Gcommaaccent=722,e.ucircumflex=556,e.acircumflex=500,e.Amacron=667,e.rcaron=389,e.ccedilla=444,e.Zdotaccent=611,e.Thorn=611,e.Omacron=722,e.Racute=667,e.Sacute=556,e.dcaron=608,e.Umacron=722,e.uring=556,e.threesuperior=300,e.Ograve=722,e.Agrave=667,e.Abreve=667,e.multiply=570,e.uacute=556,e.Tcaron=611,e.partialdiff=494,e.ydieresis=444,e.Nacute=722,e.icircumflex=278,e.Ecircumflex=667,e.adieresis=500,e.edieresis=444,e.cacute=444,e.nacute=556,e.umacron=556,e.Ncaron=722,e.Iacute=389,e.plusminus=570,e.brokenbar=220,e.registered=747,e.Gbreve=722,e.Idotaccent=389,e.summation=600,e.Egrave=667,e.racute=389,e.omacron=500,e.Zacute=611,e.Zcaron=611,e.greaterequal=549,e.Eth=722,e.Ccedilla=667,e.lcommaaccent=278,e.tcaron=366,e.eogonek=444,e.Uogonek=722,e.Aacute=667,e.Adieresis=667,e.egrave=444,e.zacute=389,e.iogonek=278,e.Oacute=722,e.oacute=500,e.amacron=500,e.sacute=389,e.idieresis=278,e.Ocircumflex=722,e.Ugrave=722,e.Delta=612,e.thorn=500,e.twosuperior=300,e.Odieresis=722,e.mu=576,e.igrave=278,e.ohungarumlaut=500,e.Eogonek=667,e.dcroat=500,e.threequarters=750,e.Scedilla=556,e.lcaron=382,e.Kcommaaccent=667,e.Lacute=611,e.trademark=1e3,e.edotaccent=444,e.Igrave=389,e.Imacron=389,e.Lcaron=611,e.onehalf=750,e.lessequal=549,e.ocircumflex=500,e.ntilde=556,e.Uhungarumlaut=722,e.Eacute=667,e.emacron=444,e.gbreve=500,e.onequarter=750,e.Scaron=556,e.Scommaaccent=556,e.Ohungarumlaut=722,e.degree=400,e.ograve=500,e.Ccaron=667,e.ugrave=556,e.radical=549,e.Dcaron=722,e.rcommaaccent=389,e.Ntilde=722,e.otilde=500,e.Rcommaaccent=667,e.Lcommaaccent=611,e.Atilde=667,e.Aogonek=667,e.Aring=667,e.Otilde=722,e.zdotaccent=389,e.Ecaron=667,e.Iogonek=389,e.kcommaaccent=500,e.minus=606,e.Icircumflex=389,e.ncaron=556,e.tcommaaccent=278,e.logicalnot=606,e.odieresis=500,e.udieresis=556,e.notequal=549,e.gcommaaccent=500,e.eth=500,e.zcaron=389,e.ncommaaccent=556,e.onesuperior=300,e.imacron=278,e.Euro=500})),e["Times-Italic"]=(0,n.getLookupTableFactory)((function(e){e.space=250,e.exclam=333,e.quotedbl=420,e.numbersign=500,e.dollar=500,e.percent=833,e.ampersand=778,e.quoteright=333,e.parenleft=333,e.parenright=333,e.asterisk=500,e.plus=675,e.comma=250,e.hyphen=333,e.period=250,e.slash=278,e.zero=500,e.one=500,e.two=500,e.three=500,e.four=500,e.five=500,e.six=500,e.seven=500,e.eight=500,e.nine=500,e.colon=333,e.semicolon=333,e.less=675,e.equal=675,e.greater=675,e.question=500,e.at=920,e.A=611,e.B=611,e.C=667,e.D=722,e.E=611,e.F=611,e.G=722,e.H=722,e.I=333,e.J=444,e.K=667,e.L=556,e.M=833,e.N=667,e.O=722,e.P=611,e.Q=722,e.R=611,e.S=500,e.T=556,e.U=722,e.V=611,e.W=833,e.X=611,e.Y=556,e.Z=556,e.bracketleft=389,e.backslash=278,e.bracketright=389,e.asciicircum=422,e.underscore=500,e.quoteleft=333,e.a=500,e.b=500,e.c=444,e.d=500,e.e=444,e.f=278,e.g=500,e.h=500,e.i=278,e.j=278,e.k=444,e.l=278,e.m=722,e.n=500,e.o=500,e.p=500,e.q=500,e.r=389,e.s=389,e.t=278,e.u=500,e.v=444,e.w=667,e.x=444,e.y=444,e.z=389,e.braceleft=400,e.bar=275,e.braceright=400,e.asciitilde=541,e.exclamdown=389,e.cent=500,e.sterling=500,e.fraction=167,e.yen=500,e.florin=500,e.section=500,e.currency=500,e.quotesingle=214,e.quotedblleft=556,e.guillemotleft=500,e.guilsinglleft=333,e.guilsinglright=333,e.fi=500,e.fl=500,e.endash=500,e.dagger=500,e.daggerdbl=500,e.periodcentered=250,e.paragraph=523,e.bullet=350,e.quotesinglbase=333,e.quotedblbase=556,e.quotedblright=556,e.guillemotright=500,e.ellipsis=889,e.perthousand=1e3,e.questiondown=500,e.grave=333,e.acute=333,e.circumflex=333,e.tilde=333,e.macron=333,e.breve=333,e.dotaccent=333,e.dieresis=333,e.ring=333,e.cedilla=333,e.hungarumlaut=333,e.ogonek=333,e.caron=333,e.emdash=889,e.AE=889,e.ordfeminine=276,e.Lslash=556,e.Oslash=722,e.OE=944,e.ordmasculine=310,e.ae=667,e.dotlessi=278,e.lslash=278,e.oslash=500,e.oe=667,e.germandbls=500,e.Idieresis=333,e.eacute=444,e.abreve=500,e.uhungarumlaut=500,e.ecaron=444,e.Ydieresis=556,e.divide=675,e.Yacute=556,e.Acircumflex=611,e.aacute=500,e.Ucircumflex=722,e.yacute=444,e.scommaaccent=389,e.ecircumflex=444,e.Uring=722,e.Udieresis=722,e.aogonek=500,e.Uacute=722,e.uogonek=500,e.Edieresis=611,e.Dcroat=722,e.commaaccent=250,e.copyright=760,e.Emacron=611,e.ccaron=444,e.aring=500,e.Ncommaaccent=667,e.lacute=278,e.agrave=500,e.Tcommaaccent=556,e.Cacute=667,e.atilde=500,e.Edotaccent=611,e.scaron=389,e.scedilla=389,e.iacute=278,e.lozenge=471,e.Rcaron=611,e.Gcommaaccent=722,e.ucircumflex=500,e.acircumflex=500,e.Amacron=611,e.rcaron=389,e.ccedilla=444,e.Zdotaccent=556,e.Thorn=611,e.Omacron=722,e.Racute=611,e.Sacute=500,e.dcaron=544,e.Umacron=722,e.uring=500,e.threesuperior=300,e.Ograve=722,e.Agrave=611,e.Abreve=611,e.multiply=675,e.uacute=500,e.Tcaron=556,e.partialdiff=476,e.ydieresis=444,e.Nacute=667,e.icircumflex=278,e.Ecircumflex=611,e.adieresis=500,e.edieresis=444,e.cacute=444,e.nacute=500,e.umacron=500,e.Ncaron=667,e.Iacute=333,e.plusminus=675,e.brokenbar=275,e.registered=760,e.Gbreve=722,e.Idotaccent=333,e.summation=600,e.Egrave=611,e.racute=389,e.omacron=500,e.Zacute=556,e.Zcaron=556,e.greaterequal=549,e.Eth=722,e.Ccedilla=667,e.lcommaaccent=278,e.tcaron=300,e.eogonek=444,e.Uogonek=722,e.Aacute=611,e.Adieresis=611,e.egrave=444,e.zacute=389,e.iogonek=278,e.Oacute=722,e.oacute=500,e.amacron=500,e.sacute=389,e.idieresis=278,e.Ocircumflex=722,e.Ugrave=722,e.Delta=612,e.thorn=500,e.twosuperior=300,e.Odieresis=722,e.mu=500,e.igrave=278,e.ohungarumlaut=500,e.Eogonek=611,e.dcroat=500,e.threequarters=750,e.Scedilla=500,e.lcaron=300,e.Kcommaaccent=667,e.Lacute=556,e.trademark=980,e.edotaccent=444,e.Igrave=333,e.Imacron=333,e.Lcaron=611,e.onehalf=750,e.lessequal=549,e.ocircumflex=500,e.ntilde=500,e.Uhungarumlaut=722,e.Eacute=611,e.emacron=444,e.gbreve=500,e.onequarter=750,e.Scaron=500,e.Scommaaccent=500,e.Ohungarumlaut=722,e.degree=400,e.ograve=500,e.Ccaron=667,e.ugrave=500,e.radical=453,e.Dcaron=722,e.rcommaaccent=389,e.Ntilde=667,e.otilde=500,e.Rcommaaccent=611,e.Lcommaaccent=556,e.Atilde=611,e.Aogonek=611,e.Aring=611,e.Otilde=722,e.zdotaccent=389,e.Ecaron=611,e.Iogonek=333,e.kcommaaccent=444,e.minus=675,e.Icircumflex=333,e.ncaron=500,e.tcommaaccent=278,e.logicalnot=675,e.odieresis=500,e.udieresis=500,e.notequal=549,e.gcommaaccent=500,e.eth=500,e.zcaron=389,e.ncommaaccent=500,e.onesuperior=300,e.imacron=278,e.Euro=500})),e.ZapfDingbats=(0,n.getLookupTableFactory)((function(e){e.space=278,e.a1=974,e.a2=961,e.a202=974,e.a3=980,e.a4=719,e.a5=789,e.a119=790,e.a118=791,e.a117=690,e.a11=960,e.a12=939,e.a13=549,e.a14=855,e.a15=911,e.a16=933,e.a105=911,e.a17=945,e.a18=974,e.a19=755,e.a20=846,e.a21=762,e.a22=761,e.a23=571,e.a24=677,e.a25=763,e.a26=760,e.a27=759,e.a28=754,e.a6=494,e.a7=552,e.a8=537,e.a9=577,e.a10=692,e.a29=786,e.a30=788,e.a31=788,e.a32=790,e.a33=793,e.a34=794,e.a35=816,e.a36=823,e.a37=789,e.a38=841,e.a39=823,e.a40=833,e.a41=816,e.a42=831,e.a43=923,e.a44=744,e.a45=723,e.a46=749,e.a47=790,e.a48=792,e.a49=695,e.a50=776,e.a51=768,e.a52=792,e.a53=759,e.a54=707,e.a55=708,e.a56=682,e.a57=701,e.a58=826,e.a59=815,e.a60=789,e.a61=789,e.a62=707,e.a63=687,e.a64=696,e.a65=689,e.a66=786,e.a67=787,e.a68=713,e.a69=791,e.a70=785,e.a71=791,e.a72=873,e.a73=761,e.a74=762,e.a203=762,e.a75=759,e.a204=759,e.a76=892,e.a77=892,e.a78=788,e.a79=784,e.a81=438,e.a82=138,e.a83=277,e.a84=415,e.a97=392,e.a98=392,e.a99=668,e.a100=668,e.a89=390,e.a90=390,e.a93=317,e.a94=317,e.a91=276,e.a92=276,e.a205=509,e.a85=509,e.a206=410,e.a86=410,e.a87=234,e.a88=234,e.a95=334,e.a96=334,e.a101=732,e.a102=544,e.a103=544,e.a104=910,e.a106=667,e.a107=760,e.a108=760,e.a112=776,e.a111=595,e.a110=694,e.a109=626,e.a120=788,e.a121=788,e.a122=788,e.a123=788,e.a124=788,e.a125=788,e.a126=788,e.a127=788,e.a128=788,e.a129=788,e.a130=788,e.a131=788,e.a132=788,e.a133=788,e.a134=788,e.a135=788,e.a136=788,e.a137=788,e.a138=788,e.a139=788,e.a140=788,e.a141=788,e.a142=788,e.a143=788,e.a144=788,e.a145=788,e.a146=788,e.a147=788,e.a148=788,e.a149=788,e.a150=788,e.a151=788,e.a152=788,e.a153=788,e.a154=788,e.a155=788,e.a156=788,e.a157=788,e.a158=788,e.a159=788,e.a160=894,e.a161=838,e.a163=1016,e.a164=458,e.a196=748,e.a165=924,e.a192=748,e.a166=918,e.a167=927,e.a168=928,e.a169=928,e.a170=834,e.a171=873,e.a172=828,e.a173=924,e.a162=924,e.a174=917,e.a175=930,e.a176=931,e.a177=463,e.a178=883,e.a179=836,e.a193=836,e.a180=867,e.a199=867,e.a181=696,e.a200=696,e.a182=874,e.a201=874,e.a183=760,e.a184=946,e.a197=771,e.a185=865,e.a194=771,e.a198=888,e.a186=967,e.a195=888,e.a187=831,e.a188=873,e.a189=927,e.a190=970,e.a191=918}))}));t.getMetrics=a;const i=(0,n.getLookupTableFactory)((function(e){e.Courier={ascent:629,descent:-157,capHeight:562,xHeight:-426},e["Courier-Bold"]={ascent:629,descent:-157,capHeight:562,xHeight:439},e["Courier-Oblique"]={ascent:629,descent:-157,capHeight:562,xHeight:426},e["Courier-BoldOblique"]={ascent:629,descent:-157,capHeight:562,xHeight:426},e.Helvetica={ascent:718,descent:-207,capHeight:718,xHeight:523},e["Helvetica-Bold"]={ascent:718,descent:-207,capHeight:718,xHeight:532},e["Helvetica-Oblique"]={ascent:718,descent:-207,capHeight:718,xHeight:523},e["Helvetica-BoldOblique"]={ascent:718,descent:-207,capHeight:718,xHeight:532},e["Times-Roman"]={ascent:683,descent:-217,capHeight:662,xHeight:450},e["Times-Bold"]={ascent:683,descent:-217,capHeight:676,xHeight:461},e["Times-Italic"]={ascent:683,descent:-217,capHeight:653,xHeight:441},e["Times-BoldItalic"]={ascent:683,descent:-217,capHeight:669,xHeight:462},e.Symbol={ascent:Math.NaN,descent:Math.NaN,capHeight:Math.NaN,xHeight:Math.NaN},e.ZapfDingbats={ascent:Math.NaN,descent:Math.NaN,capHeight:Math.NaN,xHeight:Math.NaN}}));t.getFontBasicMetrics=i},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.GlyfTable=void 0,r(139),r(84),r(93),r(94),r(97),r(99),r(101),r(105),r(108),r(115),r(157),t.GlyfTable=class{constructor(e){let{glyfTable:t,isGlyphLocationsLong:r,locaTable:a,numGlyphs:i}=e;this.glyphs=[];const s=new DataView(a.buffer,a.byteOffset,a.byteLength),o=new DataView(t.buffer,t.byteOffset,t.byteLength),c=r?4:2;let l=r?s.getUint32(0):2*s.getUint16(0),h=0;for(let e=0;ee+(t.getSize()+3&-4)),0)}write(){const e=this.getSize(),t=new DataView(new ArrayBuffer(e)),r=e>131070,n=r?4:2,a=new DataView(new ArrayBuffer((this.glyphs.length+1)*n));r?a.setUint32(0,0):a.setUint16(0,0);let i=0,s=0;for(const e of this.glyphs)i+=e.write(i,t),i=i+3&-4,s+=n,r?a.setUint32(s,i):a.setUint16(s,i>>1);return{isLocationLong:r,loca:new Uint8Array(a.buffer),glyf:new Uint8Array(t.buffer)}}scale(e){for(let t=0,r=this.glyphs.length;te+t.getSize()),0);return this.header.getSize()+e}write(e,t){if(!this.header)return 0;const r=e;if(e+=this.header.write(e,t),this.simple)e+=this.simple.write(e,t);else for(const r of this.composites)e+=r.write(e,t);return e-r}scale(e){if(!this.header)return;const t=(this.header.xMin+this.header.xMax)/2;if(this.header.scale(t,e),this.simple)this.simple.scale(t,e);else for(const r of this.composites)r.scale(t,e)}}class a{constructor(e){let{numberOfContours:t,xMin:r,yMin:n,xMax:a,yMax:i}=e;this.numberOfContours=t,this.xMin=r,this.yMin=n,this.xMax=a,this.yMax=i}static parse(e,t){return[10,new a({numberOfContours:t.getInt16(e),xMin:t.getInt16(e+2),yMin:t.getInt16(e+4),xMax:t.getInt16(e+6),yMax:t.getInt16(e+8)})]}getSize(){return 10}write(e,t){return t.setInt16(e,this.numberOfContours),t.setInt16(e+2,this.xMin),t.setInt16(e+4,this.yMin),t.setInt16(e+6,this.xMax),t.setInt16(e+8,this.yMax),10}scale(e,t){this.xMin=Math.round(e+(this.xMin-e)*t),this.xMax=Math.round(e+(this.xMax-e)*t)}}class i{constructor(e){let{flags:t,xCoordinates:r,yCoordinates:n}=e;this.xCoordinates=r,this.yCoordinates=n,this.flags=t}}class s{constructor(e){let{contours:t,instructions:r}=e;this.contours=t,this.instructions=r}static parse(e,t,r){const n=[];for(let a=0;a255?e+=2:o>0&&(e+=1),t=i,o=Math.abs(s-r),o>255?e+=2:o>0&&(e+=1),r=s}}return e}write(e,t){const r=e,n=[],a=[],i=[];let s=0,o=0;for(const r of this.contours){for(let e=0,t=r.xCoordinates.length;e=0?18:2,n.push(e)):n.push(l)}s=c;const h=r.yCoordinates[e];if(l=h-o,0===l)t|=32,a.push(0);else{const e=Math.abs(l);e<=255?(t|=l>=0?36:4,a.push(e)):a.push(l)}o=h,i.push(t)}t.setUint16(e,n.length-1),e+=2}t.setUint16(e,this.instructions.length),e+=2,this.instructions.length&&(new Uint8Array(t.buffer,0,t.buffer.byteLength).set(this.instructions,e),e+=this.instructions.length);for(const r of i)t.setUint8(e++,r);for(let r=0,a=n.length;r=-128&&this.argument1<=127&&this.argument2>=-128&&this.argument2<=127||(e+=2):this.argument1>=0&&this.argument1<=255&&this.argument2>=0&&this.argument2<=255||(e+=2),e}write(e,t){const r=e;return 2&this.flags?this.argument1>=-128&&this.argument1<=127&&this.argument2>=-128&&this.argument2<=127||(this.flags|=1):this.argument1>=0&&this.argument1<=255&&this.argument2>=0&&this.argument2<=255||(this.flags|=1),t.setUint16(e,this.flags),t.setUint16(e+2,this.glyphIndex),e+=4,1&this.flags?(2&this.flags?(t.setInt16(e,this.argument1),t.setInt16(e+2,this.argument2)):(t.setUint16(e,this.argument1),t.setUint16(e+2,this.argument2)),e+=4):(t.setUint8(e,this.argument1),t.setUint8(e+1,this.argument2),e+=2),256&this.flags&&(t.setUint16(e,this.instructions.length),e+=2,this.instructions.length&&(new Uint8Array(t.buffer,0,t.buffer.byteLength).set(this.instructions,e),e+=this.instructions.length)),e-r}scale(e,t){}}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.OpenTypeFileBuilder=void 0,r(84),r(93),r(94),r(97),r(99),r(101),r(105),r(108),r(115),r(139),r(2);var n=r(149),a=r(144);function i(e,t,r){e[t]=r>>8&255,e[t+1]=255&r}function s(e,t,r){e[t]=r>>24&255,e[t+1]=r>>16&255,e[t+2]=r>>8&255,e[t+3]=255&r}function o(e,t,r){if(r instanceof Uint8Array)e.set(r,t);else if("string"==typeof r)for(let n=0,a=r.length;nr;)r<<=1,n++;const a=r*t;return{range:a,entry:n,rangeShift:t*e-a}}toArray(){let e=this.sfnt;const t=this.tables,r=Object.keys(t);r.sort();const l=r.length;let h,u,d,f,g,p=12+16*l;const m=[p];for(h=0;h>>0,m.push(p);const b=new Uint8Array(p);for(h=0;h>>0;s(b,p+4,e),s(b,p+8,m[h]),s(b,p+12,t[g].length),p+=16}return b}addTable(e,t){if(e in this.tables)throw new Error("Table "+e+" already exists");this.tables[e]=t}}t.OpenTypeFileBuilder=c},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Type1Font=void 0,r(139);var n=r(185),a=r(144),i=r(188),s=r(149),o=r(154),c=r(199);function l(e,t,r){const n=e.length,a=t.length,i=n-a;let o=r,c=!1;for(;o=a){for(o+=r;o=0&&(n[e]=a)}return(0,i.type1FontGlyphMapping)(e,n,r)}hasGlyphId(e){return!(e<0||e>=this.numGlyphs)&&(0===e||this.charstrings[e-1].charstring.length>0)}getSeacs(e){const t=[];for(let r=0,n=e.length;r0;e--)t[e]-=t[e-1];g.setByName(e,t)}s.topDict.privateDict=g;const m=new n.CFFIndex;for(u=0,d=a.length;u{Object.defineProperty(t,"__esModule",{value:!0}),t.Type1Parser=void 0,r(139),r(84),r(93),r(94),r(97),r(99),r(101),r(105),r(108),r(115),r(159);var n=r(187),a=r(149),i=r(154),s=r(144);const o=[4],c=[5],l=[6],h=[7],u=[8],d=[12,35],f=[14],g=[21],p=[22],m=[30],b=[31];class y{constructor(){this.width=0,this.lsb=0,this.flexing=!1,this.output=[],this.stack=[]}convert(e,t,r){const n=e.length;let a,i,y,w=!1;for(let v=0;vn)return!0;const a=n-e;for(let e=a;e>8&255,255&t):(t=65536*t|0,this.output.push(255,t>>24&255,t>>16&255,t>>8&255,255&t))}return this.output.push(...t),r?this.stack.splice(a,e):this.stack.length=0,!1}}function w(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102}function v(e,t,r){if(r>=e.length)return new Uint8Array(0);let n,a,i=0|t;for(n=0;n>8,i=52845*(t+i)+22719&65535}return o}function x(e){return 47===e||91===e||93===e||123===e||125===e||40===e||41===e}t.Type1Parser=class{constructor(e,t,r){if(t){const t=e.getBytes(),r=!((w(t[0])||(0,a.isWhiteSpace)(t[0]))&&w(t[1])&&w(t[2])&&w(t[3])&&w(t[4])&&w(t[5])&&w(t[6])&&w(t[7]));e=new i.Stream(r?v(t,55665,4):function(e,t,r){let n=55665;const a=e.length,i=new Uint8Array(a>>>1);let s,o;for(s=0,o=0;s>8,n=52845*(e+n)+22719&65535}}return i.slice(4,o)}(t))}this.seacAnalysisEnabled=!!r,this.stream=e,this.nextChar()}readNumberArray(){this.getToken();const e=[];for(;;){const t=this.getToken();if(null===t||"]"===t||"}"===t)break;e.push(parseFloat(t||0))}return e}readNumber(){const e=this.getToken();return parseFloat(e||0)}readInt(){const e=this.getToken();return 0|parseInt(e||0,10)}readBoolean(){return"true"===this.getToken()?1:0}nextChar(){return this.currentChar=this.stream.getByte()}prevChar(){return this.stream.skip(-2),this.currentChar=this.stream.getByte()}getToken(){let e=!1,t=this.currentChar;for(;;){if(-1===t)return null;if(e)10!==t&&13!==t||(e=!1);else if(37===t)e=!0;else if(!(0,a.isWhiteSpace)(t))break;t=this.nextChar()}if(x(t))return this.nextChar(),String.fromCharCode(t);let r="";do{r+=String.fromCharCode(t),t=this.nextChar()}while(t>=0&&!(0,a.isWhiteSpace)(t)&&!x(t));return r}readCharStrings(e,t){return-1===t?e:v(e,4330,t)}extractFontProgram(e){const t=this.stream,r=[],n=[],a=Object.create(null);a.lenIV=4;const i={subrs:[],charstrings:[],properties:{privateData:a}};let s,o,c,l;for(;null!==(s=this.getToken());)if("/"===s)switch(s=this.getToken(),s){case"CharStrings":for(this.getToken(),this.getToken(),this.getToken(),this.getToken();s=this.getToken(),null!==s&&"end"!==s;){if("/"!==s)continue;const e=this.getToken();o=this.readInt(),this.getToken(),c=o>0?t.getBytes(o):new Uint8Array(0),l=i.properties.privateData.lenIV;const r=this.readCharStrings(c,l);this.nextChar(),s=this.getToken(),"noaccess"===s?this.getToken():"/"===s&&this.prevChar(),n.push({glyph:e,encoded:r})}break;case"Subrs":for(this.readInt(),this.getToken();"dup"===this.getToken();){const e=this.readInt();o=this.readInt(),this.getToken(),c=o>0?t.getBytes(o):new Uint8Array(0),l=i.properties.privateData.lenIV;const n=this.readCharStrings(c,l);this.nextChar(),s=this.getToken(),"noaccess"===s&&this.getToken(),r[e]=n}break;case"BlueValues":case"OtherBlues":case"FamilyBlues":case"FamilyOtherBlues":const e=this.readNumberArray();e.length>0&&e.length;break;case"StemSnapH":case"StemSnapV":i.properties.privateData[s]=this.readNumberArray();break;case"StdHW":case"StdVW":i.properties.privateData[s]=this.readNumberArray()[0];break;case"BlueShift":case"lenIV":case"BlueFuzz":case"BlueScale":case"LanguageGroup":i.properties.privateData[s]=this.readNumber();break;case"ExpansionFactor":i.properties.privateData[s]=this.readNumber()||.06;break;case"ForceBold":i.properties.privateData[s]=this.readBoolean()}for(const{encoded:t,glyph:a}of n){const n=new y,s=n.convert(t,r,this.seacAnalysisEnabled);let o=n.output;s&&(o=[14]);const c={glyphName:a,charstring:o,width:n.width,lsb:n.lsb,seac:n.seac};if(".notdef"===a?i.charstrings.unshift(c):i.charstrings.push(c),e.builtInEncoding){const t=e.builtInEncoding.indexOf(a);t>-1&&void 0===e.widths[t]&&t>=e.firstChar&&t<=e.lastChar&&(e.widths[t]=n.width)}}return i}extractFontHeader(e){let t;for(;null!==(t=this.getToken());)if("/"===t)switch(t=this.getToken(),t){case"FontMatrix":const r=this.readNumberArray();e.fontMatrix=r;break;case"Encoding":const a=this.getToken();let i;if(/^\\d+$/.test(a)){i=[];const e=0|parseInt(a,10);this.getToken();for(let r=0;r{Object.defineProperty(t,"__esModule",{value:!0}),t.Pattern=void 0,t.getTilingPatternIR=function(e,t,r){const a=t.getArray("Matrix"),i=n.Util.normalizeRect(t.getArray("BBox")),s=t.get("XStep"),o=t.get("YStep"),c=t.get("PaintType"),l=t.get("TilingType");if(i[2]-i[0]==0||i[3]-i[1]==0)throw new n.FormatError("Invalid getTilingPatternIR /BBox array: [".concat(i,"]."));return["TilingPattern",r,e,a,i,s,o,c,l]},r(84),r(93),r(94),r(97),r(99),r(101),r(105),r(108),r(115),r(139),r(159);var n=r(144),a=r(151),s=r(162),o=r(149);t.Pattern=class{constructor(){(0,n.unreachable)("Cannot initialize Pattern.")}static parseShading(e,t,r,i,s){const c=e instanceof a.BaseStream?e.dict:e,h=c.get("ShadingType");try{switch(h){case 2:case 3:return new l(c,t,r,i,s);case 4:case 5:case 6:case 7:return new d(e,t,r,i,s);default:throw new n.FormatError("Unsupported ShadingType: "+h)}}catch(e){if(e instanceof o.MissingDataException)throw e;return(0,n.warn)(e),new f}}};class c{constructor(){this.constructor===c&&(0,n.unreachable)("Cannot initialize BaseShading.")}getIR(){(0,n.unreachable)("Abstract method \`getIR\` called.")}}i(c,"SMALL_NUMBER",1e-6);class l extends c{constructor(e,t,r,a,i){super(),this.coordsArr=e.getArray("Coords"),this.shadingType=e.get("ShadingType");const o=s.ColorSpace.parse({cs:e.getRaw("CS")||e.getRaw("ColorSpace"),xref:t,resources:r,pdfFunctionFactory:a,localColorSpaceCache:i}),l=e.getArray("BBox");this.bbox=Array.isArray(l)&&4===l.length?n.Util.normalizeRect(l):null;let h=0,u=1;if(e.has("Domain")){const t=e.getArray("Domain");h=t[0],u=t[1]}let d=!1,f=!1;if(e.has("Extend")){const t=e.getArray("Extend");d=t[0],f=t[1]}if(!(3!==this.shadingType||d&&f)){const[e,t,r,a,i,s]=this.coordsArr,o=Math.hypot(e-a,t-i);r<=s+o&&s<=r+o&&(0,n.warn)("Unsupported radial gradient.")}this.extendStart=d,this.extendEnd=f;const g=e.getRaw("Function"),p=a.createFromArray(g),m=(u-h)/840,b=this.colorStops=[];if(h>=u||m<=0)return void(0,n.info)("Bad shading domain.");const y=new Float32Array(o.numComps),w=new Float32Array(1);let v,x=0;w[0]=h,p(w,0,y,0);let S=o.getRgb(y,0);const A=n.Util.makeHexColor(S[0],S[1],S[2]);b.push([0,A]);let k=1;w[0]=h+m,p(w,0,y,0);let C=o.getRgb(y,0),O=C[0]-S[0]+1,F=C[1]-S[1]+1,I=C[2]-S[2]+1,T=C[0]-S[0]-1,M=C[1]-S[1]-1,E=C[2]-S[2]-1;for(let e=2;e<840;e++){w[0]=h+e*m,p(w,0,y,0),v=o.getRgb(y,0);const t=e-x;if(O=Math.min(O,(v[0]-S[0]+1)/t),F=Math.min(F,(v[1]-S[1]+1)/t),I=Math.min(I,(v[2]-S[2]+1)/t),T=Math.max(T,(v[0]-S[0]-1)/t),M=Math.max(M,(v[1]-S[1]-1)/t),E=Math.max(E,(v[2]-S[2]-1)/t),!(T<=O&&M<=F&&E<=I)){const e=n.Util.makeHexColor(C[0],C[1],C[2]);b.push([k/840,e]),O=v[0]-C[0]+1,F=v[1]-C[1]+1,I=v[2]-C[2]+1,T=v[0]-C[0]-1,M=v[1]-C[1]-1,E=v[2]-C[2]-1,x=k,S=C}k=e,C=v}const P=n.Util.makeHexColor(C[0],C[1],C[2]);b.push([1,P]);let R="transparent";e.has("Background")&&(v=o.getRgb(e.get("Background"),0),R=n.Util.makeHexColor(v[0],v[1],v[2])),d||(b.unshift([0,R]),b[1][0]+=c.SMALL_NUMBER),f||(b.at(-1)[0]-=c.SMALL_NUMBER,b.push([1,R])),this.colorStops=b}getIR(){const e=this.coordsArr,t=this.shadingType;let r,a,i,s,o;return 2===t?(a=[e[0],e[1]],i=[e[2],e[3]],s=null,o=null,r="axial"):3===t?(a=[e[0],e[1]],i=[e[3],e[4]],s=e[2],o=e[5],r="radial"):(0,n.unreachable)("getPattern type unknown: ".concat(t)),["RadialAxial",r,this.bbox,this.colorStops,a,i,s,o]}}class h{constructor(e,t){this.stream=e,this.context=t,this.buffer=0,this.bufferLength=0;const r=t.numComps;this.tmpCompsBuf=new Float32Array(r);const n=t.colorSpace.numComps;this.tmpCsCompsBuf=t.colorFn?new Float32Array(n):this.tmpCompsBuf}get hasData(){if(this.stream.end)return this.stream.pos0)return!0;const e=this.stream.getByte();return!(e<0||(this.buffer=e,this.bufferLength=8,0))}readBits(e){let t=this.buffer,r=this.bufferLength;if(32===e){if(0===r)return(this.stream.getByte()<<24|this.stream.getByte()<<16|this.stream.getByte()<<8|this.stream.getByte())>>>0;t=t<<24|this.stream.getByte()<<16|this.stream.getByte()<<8|this.stream.getByte();const e=this.stream.getByte();return this.buffer=e&(1<>r)>>>0}if(8===e&&0===r)return this.stream.getByte();for(;r>r}align(){this.buffer=0,this.bufferLength=0}readFlag(){return this.readBits(this.context.bitsPerFlag)}readCoordinate(){const e=this.context.bitsPerCoordinate,t=this.readBits(e),r=this.readBits(e),n=this.context.decode,a=e<32?1/((1<i?i:e,t=t>s?s:t,r=r{Object.defineProperty(t,"__esModule",{value:!0}),t.getXfaFontDict=function(e){const t=function(e){const t=d(e);if(!t)return null;const{baseWidths:r,baseMapping:n,factors:a}=t,i=a?r.map(((e,t)=>e*a[t])):r;let s,o=-2;const c=[];for(const[e,t]of n.map(((e,t)=>[e,t])).sort(((e,t)=>{let[r]=e,[n]=t;return r-n})))-1!==e&&(e===o+1?(s.push(i[t]),o+=1):(o=e,s=[i[t]],c.push(e,s)));return c}(e),r=new a.Dict(null);r.set("BaseFont",a.Name.get(e)),r.set("Type",a.Name.get("Font")),r.set("Subtype",a.Name.get("CIDFontType2")),r.set("Encoding",a.Name.get("Identity-H")),r.set("CIDToGIDMap",a.Name.get("Identity")),r.set("W",t),r.set("FirstChar",t[0]),r.set("LastChar",t.at(-2)+t.at(-1).length-1);const n=new a.Dict(null);r.set("FontDescriptor",n);const i=new a.Dict(null);return i.set("Ordering","Identity"),i.set("Registry","Adobe"),i.set("Supplement",0),r.set("CIDSystemInfo",i),r},t.getXfaFontName=d,r(139);var n=r(202),a=r(150),i=r(203),s=r(204),o=r(205),c=r(206),l=r(149),h=r(188);const u=(0,l.getLookupTableFactory)((function(e){e["MyriadPro-Regular"]=e["PdfJS-Fallback-Regular"]={name:"LiberationSans-Regular",factors:o.MyriadProRegularFactors,baseWidths:s.LiberationSansRegularWidths,baseMapping:s.LiberationSansRegularMapping,metrics:o.MyriadProRegularMetrics},e["MyriadPro-Bold"]=e["PdfJS-Fallback-Bold"]={name:"LiberationSans-Bold",factors:o.MyriadProBoldFactors,baseWidths:s.LiberationSansBoldWidths,baseMapping:s.LiberationSansBoldMapping,metrics:o.MyriadProBoldMetrics},e["MyriadPro-It"]=e["MyriadPro-Italic"]=e["PdfJS-Fallback-Italic"]={name:"LiberationSans-Italic",factors:o.MyriadProItalicFactors,baseWidths:s.LiberationSansItalicWidths,baseMapping:s.LiberationSansItalicMapping,metrics:o.MyriadProItalicMetrics},e["MyriadPro-BoldIt"]=e["MyriadPro-BoldItalic"]=e["PdfJS-Fallback-BoldItalic"]={name:"LiberationSans-BoldItalic",factors:o.MyriadProBoldItalicFactors,baseWidths:s.LiberationSansBoldItalicWidths,baseMapping:s.LiberationSansBoldItalicMapping,metrics:o.MyriadProBoldItalicMetrics},e.ArialMT=e.Arial=e["Arial-Regular"]={name:"LiberationSans-Regular",baseWidths:s.LiberationSansRegularWidths,baseMapping:s.LiberationSansRegularMapping},e["Arial-BoldMT"]=e["Arial-Bold"]={name:"LiberationSans-Bold",baseWidths:s.LiberationSansBoldWidths,baseMapping:s.LiberationSansBoldMapping},e["Arial-ItalicMT"]=e["Arial-Italic"]={name:"LiberationSans-Italic",baseWidths:s.LiberationSansItalicWidths,baseMapping:s.LiberationSansItalicMapping},e["Arial-BoldItalicMT"]=e["Arial-BoldItalic"]={name:"LiberationSans-BoldItalic",baseWidths:s.LiberationSansBoldItalicWidths,baseMapping:s.LiberationSansBoldItalicMapping},e["Calibri-Regular"]={name:"LiberationSans-Regular",factors:n.CalibriRegularFactors,baseWidths:s.LiberationSansRegularWidths,baseMapping:s.LiberationSansRegularMapping,metrics:n.CalibriRegularMetrics},e["Calibri-Bold"]={name:"LiberationSans-Bold",factors:n.CalibriBoldFactors,baseWidths:s.LiberationSansBoldWidths,baseMapping:s.LiberationSansBoldMapping,metrics:n.CalibriBoldMetrics},e["Calibri-Italic"]={name:"LiberationSans-Italic",factors:n.CalibriItalicFactors,baseWidths:s.LiberationSansItalicWidths,baseMapping:s.LiberationSansItalicMapping,metrics:n.CalibriItalicMetrics},e["Calibri-BoldItalic"]={name:"LiberationSans-BoldItalic",factors:n.CalibriBoldItalicFactors,baseWidths:s.LiberationSansBoldItalicWidths,baseMapping:s.LiberationSansBoldItalicMapping,metrics:n.CalibriBoldItalicMetrics},e["Segoeui-Regular"]={name:"LiberationSans-Regular",factors:c.SegoeuiRegularFactors,baseWidths:s.LiberationSansRegularWidths,baseMapping:s.LiberationSansRegularMapping,metrics:c.SegoeuiRegularMetrics},e["Segoeui-Bold"]={name:"LiberationSans-Bold",factors:c.SegoeuiBoldFactors,baseWidths:s.LiberationSansBoldWidths,baseMapping:s.LiberationSansBoldMapping,metrics:c.SegoeuiBoldMetrics},e["Segoeui-Italic"]={name:"LiberationSans-Italic",factors:c.SegoeuiItalicFactors,baseWidths:s.LiberationSansItalicWidths,baseMapping:s.LiberationSansItalicMapping,metrics:c.SegoeuiItalicMetrics},e["Segoeui-BoldItalic"]={name:"LiberationSans-BoldItalic",factors:c.SegoeuiBoldItalicFactors,baseWidths:s.LiberationSansBoldItalicWidths,baseMapping:s.LiberationSansBoldItalicMapping,metrics:c.SegoeuiBoldItalicMetrics},e["Helvetica-Regular"]=e.Helvetica={name:"LiberationSans-Regular",factors:i.HelveticaRegularFactors,baseWidths:s.LiberationSansRegularWidths,baseMapping:s.LiberationSansRegularMapping,metrics:i.HelveticaRegularMetrics},e["Helvetica-Bold"]={name:"LiberationSans-Bold",factors:i.HelveticaBoldFactors,baseWidths:s.LiberationSansBoldWidths,baseMapping:s.LiberationSansBoldMapping,metrics:i.HelveticaBoldMetrics},e["Helvetica-Italic"]={name:"LiberationSans-Italic",factors:i.HelveticaItalicFactors,baseWidths:s.LiberationSansItalicWidths,baseMapping:s.LiberationSansItalicMapping,metrics:i.HelveticaItalicMetrics},e["Helvetica-BoldItalic"]={name:"LiberationSans-BoldItalic",factors:i.HelveticaBoldItalicFactors,baseWidths:s.LiberationSansBoldItalicWidths,baseMapping:s.LiberationSansBoldItalicMapping,metrics:i.HelveticaBoldItalicMetrics}}));function d(e){const t=(0,h.normalizeFontName)(e);return u()[t]}},(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.CalibriRegularMetrics=t.CalibriRegularFactors=t.CalibriItalicMetrics=t.CalibriItalicFactors=t.CalibriBoldMetrics=t.CalibriBoldItalicMetrics=t.CalibriBoldItalicFactors=t.CalibriBoldFactors=void 0,t.CalibriBoldFactors=[1.3877,1,1,1,.97801,.92482,.89552,.91133,.81988,.97566,.98152,.93548,.93548,1.2798,.85284,.92794,1,.96134,1.54657,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.82845,.82845,.85284,.85284,.85284,.75859,.92138,.83908,.7762,.73293,.87289,.73133,.7514,.81921,.87356,.95958,.59526,.75727,.69225,1.04924,.9121,.86943,.79795,.88198,.77958,.70864,.81055,.90399,.88653,.96017,.82577,.77892,.78257,.97507,1.54657,.97507,.85284,.89552,.90176,.88762,.8785,.75241,.8785,.90518,.95015,.77618,.8785,.88401,.91916,.86304,.88401,.91488,.8785,.8801,.8785,.8785,.91343,.7173,1.04106,.8785,.85075,.95794,.82616,.85162,.79492,.88331,1.69808,.88331,.85284,.97801,.89552,.91133,.89552,.91133,1.7801,.89552,1.24487,1.13254,1.12401,.96839,.85284,.68787,.70645,.85592,.90747,1.01466,1.0088,.90323,1,1.07463,1,.91056,.75806,1.19118,.96839,.78864,.82845,.84133,.75859,.83908,.83908,.83908,.83908,.83908,.83908,.77539,.73293,.73133,.73133,.73133,.73133,.95958,.95958,.95958,.95958,.88506,.9121,.86943,.86943,.86943,.86943,.86943,.85284,.87508,.90399,.90399,.90399,.90399,.77892,.79795,.90807,.88762,.88762,.88762,.88762,.88762,.88762,.8715,.75241,.90518,.90518,.90518,.90518,.88401,.88401,.88401,.88401,.8785,.8785,.8801,.8801,.8801,.8801,.8801,.90747,.89049,.8785,.8785,.8785,.8785,.85162,.8785,.85162,.83908,.88762,.83908,.88762,.83908,.88762,.73293,.75241,.73293,.75241,.73293,.75241,.73293,.75241,.87289,.83016,.88506,.93125,.73133,.90518,.73133,.90518,.73133,.90518,.73133,.90518,.73133,.90518,.81921,.77618,.81921,.77618,.81921,.77618,1,1,.87356,.8785,.91075,.89608,.95958,.88401,.95958,.88401,.95958,.88401,.95958,.88401,.95958,.88401,.76229,.90167,.59526,.91916,1,1,.86304,.69225,.88401,1,1,.70424,.79468,.91926,.88175,.70823,.94903,.9121,.8785,1,1,.9121,.8785,.87802,.88656,.8785,.86943,.8801,.86943,.8801,.86943,.8801,.87402,.89291,.77958,.91343,1,1,.77958,.91343,.70864,.7173,.70864,.7173,.70864,.7173,.70864,.7173,1,1,.81055,.75841,.81055,1.06452,.90399,.8785,.90399,.8785,.90399,.8785,.90399,.8785,.90399,.8785,.90399,.8785,.96017,.95794,.77892,.85162,.77892,.78257,.79492,.78257,.79492,.78257,.79492,.9297,.56892,.83908,.88762,.77539,.8715,.87508,.89049,1,1,.81055,1.04106,1.20528,1.20528,1,1.15543,.70674,.98387,.94721,1.33431,1.45894,.95161,1.06303,.83908,.80352,.57184,.6965,.56289,.82001,.56029,.81235,1.02988,.83908,.7762,.68156,.80367,.73133,.78257,.87356,.86943,.95958,.75727,.89019,1.04924,.9121,.7648,.86943,.87356,.79795,.78275,.81055,.77892,.9762,.82577,.99819,.84896,.95958,.77892,.96108,1.01407,.89049,1.02988,.94211,.96108,.8936,.84021,.87842,.96399,.79109,.89049,1.00813,1.02988,.86077,.87445,.92099,.84723,.86513,.8801,.75638,.85714,.78216,.79586,.87965,.94211,.97747,.78287,.97926,.84971,1.02988,.94211,.8801,.94211,.84971,.73133,1,1,1,1,1,1,1,1,1,1,1,1,.90264,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.90518,1,1,1,1,1,1,1,1,1,1,1,1,.90548,1,1,1,1,1,1,.96017,.95794,.96017,.95794,.96017,.95794,.77892,.85162,1,1,.89552,.90527,1,.90363,.92794,.92794,.92794,.92794,.87012,.87012,.87012,.89552,.89552,1.42259,.71143,1.06152,1,1,1.03372,1.03372,.97171,1.4956,2.2807,.93835,.83406,.91133,.84107,.91133,1,1,1,.72021,1,1.23108,.83489,.88525,.88525,.81499,.90527,1.81055,.90527,1.81055,1.31006,1.53711,.94434,1.08696,1,.95018,.77192,.85284,.90747,1.17534,.69825,.9716,1.37077,.90747,.90747,.85356,.90747,.90747,1.44947,.85284,.8941,.8941,.70572,.8,.70572,.70572,.70572,.70572,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.99862,.99862,1,1,1,1,1,1.08004,.91027,1,1,1,.99862,1,1,1,1,1,1,1,1,1,1,1,1,.90727,.90727,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],t.CalibriBoldMetrics={lineHeight:1.2207,lineGap:.2207},t.CalibriBoldItalicFactors=[1.3877,1,1,1,.97801,.92482,.89552,.91133,.81988,.97566,.98152,.93548,.93548,1.2798,.85284,.92794,1,.96134,1.56239,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.82845,.82845,.85284,.85284,.85284,.75859,.92138,.83908,.7762,.71805,.87289,.73133,.7514,.81921,.87356,.95958,.59526,.75727,.69225,1.04924,.90872,.85938,.79795,.87068,.77958,.69766,.81055,.90399,.88653,.96068,.82577,.77892,.78257,.97507,1.529,.97507,.85284,.89552,.90176,.94908,.86411,.74012,.86411,.88323,.95015,.86411,.86331,.88401,.91916,.86304,.88401,.9039,.86331,.86331,.86411,.86411,.90464,.70852,1.04106,.86331,.84372,.95794,.82616,.84548,.79492,.88331,1.69808,.88331,.85284,.97801,.89552,.91133,.89552,.91133,1.7801,.89552,1.24487,1.13254,1.19129,.96839,.85284,.68787,.70645,.85592,.90747,1.01466,1.0088,.90323,1,1.07463,1,.91056,.75806,1.19118,.96839,.78864,.82845,.84133,.75859,.83908,.83908,.83908,.83908,.83908,.83908,.77539,.71805,.73133,.73133,.73133,.73133,.95958,.95958,.95958,.95958,.88506,.90872,.85938,.85938,.85938,.85938,.85938,.85284,.87068,.90399,.90399,.90399,.90399,.77892,.79795,.90807,.94908,.94908,.94908,.94908,.94908,.94908,.85887,.74012,.88323,.88323,.88323,.88323,.88401,.88401,.88401,.88401,.8785,.86331,.86331,.86331,.86331,.86331,.86331,.90747,.89049,.86331,.86331,.86331,.86331,.84548,.86411,.84548,.83908,.94908,.83908,.94908,.83908,.94908,.71805,.74012,.71805,.74012,.71805,.74012,.71805,.74012,.87289,.79538,.88506,.92726,.73133,.88323,.73133,.88323,.73133,.88323,.73133,.88323,.73133,.88323,.81921,.86411,.81921,.86411,.81921,.86411,1,1,.87356,.86331,.91075,.8777,.95958,.88401,.95958,.88401,.95958,.88401,.95958,.88401,.95958,.88401,.76467,.90167,.59526,.91916,1,1,.86304,.69225,.88401,1,1,.70424,.77312,.91926,.88175,.70823,.94903,.90872,.86331,1,1,.90872,.86331,.86906,.88116,.86331,.85938,.86331,.85938,.86331,.85938,.86331,.87402,.86549,.77958,.90464,1,1,.77958,.90464,.69766,.70852,.69766,.70852,.69766,.70852,.69766,.70852,1,1,.81055,.75841,.81055,1.06452,.90399,.86331,.90399,.86331,.90399,.86331,.90399,.86331,.90399,.86331,.90399,.86331,.96068,.95794,.77892,.84548,.77892,.78257,.79492,.78257,.79492,.78257,.79492,.9297,.56892,.83908,.94908,.77539,.85887,.87068,.89049,1,1,.81055,1.04106,1.20528,1.20528,1,1.15543,.70088,.98387,.94721,1.33431,1.45894,.95161,1.48387,.83908,.80352,.57118,.6965,.56347,.79179,.55853,.80346,1.02988,.83908,.7762,.67174,.86036,.73133,.78257,.87356,.86441,.95958,.75727,.89019,1.04924,.90872,.74889,.85938,.87891,.79795,.7957,.81055,.77892,.97447,.82577,.97466,.87179,.95958,.77892,.94252,.95612,.8753,1.02988,.92733,.94252,.87411,.84021,.8728,.95612,.74081,.8753,1.02189,1.02988,.84814,.87445,.91822,.84723,.85668,.86331,.81344,.87581,.76422,.82046,.96057,.92733,.99375,.78022,.95452,.86015,1.02988,.92733,.86331,.92733,.86015,.73133,1,1,1,1,1,1,1,1,1,1,1,1,.90631,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.88323,1,1,1,1,1,1,1,1,1,1,1,1,.85174,1,1,1,1,1,1,.96068,.95794,.96068,.95794,.96068,.95794,.77892,.84548,1,1,.89552,.90527,1,.90363,.92794,.92794,.92794,.89807,.87012,.87012,.87012,.89552,.89552,1.42259,.71094,1.06152,1,1,1.03372,1.03372,.97171,1.4956,2.2807,.92972,.83406,.91133,.83326,.91133,1,1,1,.72021,1,1.23108,.83489,.88525,.88525,.81499,.90616,1.81055,.90527,1.81055,1.3107,1.53711,.94434,1.08696,1,.95018,.77192,.85284,.90747,1.17534,.69825,.9716,1.37077,.90747,.90747,.85356,.90747,.90747,1.44947,.85284,.8941,.8941,.70572,.8,.70572,.70572,.70572,.70572,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.99862,.99862,1,1,1,1,1,1.08004,.91027,1,1,1,.99862,1,1,1,1,1,1,1,1,1,1,1,1,.90727,.90727,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],t.CalibriBoldItalicMetrics={lineHeight:1.2207,lineGap:.2207},t.CalibriItalicFactors=[1.3877,1,1,1,1.17223,1.1293,.89552,.91133,.80395,1.02269,1.15601,.91056,.91056,1.2798,.85284,.89807,1,.90861,1.39543,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.96309,.96309,.85284,.85284,.85284,.83319,.88071,.8675,.81552,.72346,.85193,.73206,.7522,.81105,.86275,.90685,.6377,.77892,.75593,1.02638,.89249,.84118,.77452,.85374,.75186,.67789,.79776,.88844,.85066,.94309,.77818,.7306,.76659,1.10369,1.38313,1.10369,1.06139,.89552,.8739,.9245,.9245,.83203,.9245,.85865,1.09842,.9245,.9245,1.03297,1.07692,.90918,1.03297,.94959,.9245,.92274,.9245,.9245,1.02933,.77832,1.20562,.9245,.8916,.98986,.86621,.89453,.79004,.94152,1.77256,.94152,.85284,.97801,.89552,.91133,.89552,.91133,1.91729,.89552,1.17889,1.13254,1.16359,.92098,.85284,.68787,.71353,.84737,.90747,1.0088,1.0044,.87683,1,1.09091,1,.92229,.739,1.15642,.92098,.76288,.80504,.80972,.75859,.8675,.8675,.8675,.8675,.8675,.8675,.76318,.72346,.73206,.73206,.73206,.73206,.90685,.90685,.90685,.90685,.86477,.89249,.84118,.84118,.84118,.84118,.84118,.85284,.84557,.88844,.88844,.88844,.88844,.7306,.77452,.86331,.9245,.9245,.9245,.9245,.9245,.9245,.84843,.83203,.85865,.85865,.85865,.85865,.82601,.82601,.82601,.82601,.94469,.9245,.92274,.92274,.92274,.92274,.92274,.90747,.86651,.9245,.9245,.9245,.9245,.89453,.9245,.89453,.8675,.9245,.8675,.9245,.8675,.9245,.72346,.83203,.72346,.83203,.72346,.83203,.72346,.83203,.85193,.8875,.86477,.99034,.73206,.85865,.73206,.85865,.73206,.85865,.73206,.85865,.73206,.85865,.81105,.9245,.81105,.9245,.81105,.9245,1,1,.86275,.9245,.90872,.93591,.90685,.82601,.90685,.82601,.90685,.82601,.90685,1.03297,.90685,.82601,.77896,1.05611,.6377,1.07692,1,1,.90918,.75593,1.03297,1,1,.76032,.9375,.98156,.93407,.77261,1.11429,.89249,.9245,1,1,.89249,.9245,.92534,.86698,.9245,.84118,.92274,.84118,.92274,.84118,.92274,.8667,.86291,.75186,1.02933,1,1,.75186,1.02933,.67789,.77832,.67789,.77832,.67789,.77832,.67789,.77832,1,1,.79776,.97655,.79776,1.23023,.88844,.9245,.88844,.9245,.88844,.9245,.88844,.9245,.88844,.9245,.88844,.9245,.94309,.98986,.7306,.89453,.7306,.76659,.79004,.76659,.79004,.76659,.79004,1.09231,.54873,.8675,.9245,.76318,.84843,.84557,.86651,1,1,.79776,1.20562,1.18622,1.18622,1,1.1437,.67009,.96334,.93695,1.35191,1.40909,.95161,1.48387,.8675,.90861,.6192,.7363,.64824,.82411,.56321,.85696,1.23516,.8675,.81552,.7286,.84134,.73206,.76659,.86275,.84369,.90685,.77892,.85871,1.02638,.89249,.75828,.84118,.85984,.77452,.76466,.79776,.7306,.90782,.77818,.903,.87291,.90685,.7306,.99058,1.03667,.94635,1.23516,.9849,.99058,.92393,.8916,.942,1.03667,.75026,.94635,1.0297,1.23516,.90918,.94048,.98217,.89746,.84153,.92274,.82507,.88832,.84438,.88178,1.03525,.9849,1.00225,.78086,.97248,.89404,1.23516,.9849,.92274,.9849,.89404,.73206,1,1,1,1,1,1,1,1,1,1,1,1,.89693,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.85865,1,1,1,1,1,1,1,1,1,1,1,1,.90933,1,1,1,1,1,1,.94309,.98986,.94309,.98986,.94309,.98986,.7306,.89453,1,1,.89552,.90527,1,.90186,1.12308,1.12308,1.12308,1.12308,1.2566,1.2566,1.2566,.89552,.89552,1.42259,.68994,1.03809,1,1,1.0176,1.0176,1.11523,1.4956,2.01462,.97858,.82616,.91133,.83437,.91133,1,1,1,.70508,1,1.23108,.79801,.84426,.84426,.774,.90572,1.81055,.90749,1.81055,1.28809,1.55469,.94434,1.07806,1,.97094,.7589,.85284,.90747,1.19658,.69825,.97622,1.33512,.90747,.90747,.85284,.90747,.90747,1.44947,.85284,.8941,.8941,.70572,.8,.70572,.70572,.70572,.70572,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.99862,.99862,1,1,1,1,1,1.0336,.91027,1,1,1,.99862,1,1,1,1,1,1,1,1,1,1,1,1,1.05859,1.05859,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],t.CalibriItalicMetrics={lineHeight:1.2207,lineGap:.2207},t.CalibriRegularFactors=[1.3877,1,1,1,1.17223,1.1293,.89552,.91133,.80395,1.02269,1.15601,.91056,.91056,1.2798,.85284,.89807,1,.90861,1.39016,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.91133,.96309,.96309,.85284,.85284,.85284,.83319,.88071,.8675,.81552,.73834,.85193,.73206,.7522,.81105,.86275,.90685,.6377,.77892,.75593,1.02638,.89385,.85122,.77452,.86503,.75186,.68887,.79776,.88844,.85066,.94258,.77818,.7306,.76659,1.10369,1.39016,1.10369,1.06139,.89552,.8739,.86128,.94469,.8457,.94469,.89464,1.09842,.84636,.94469,1.03297,1.07692,.90918,1.03297,.95897,.94469,.9482,.94469,.94469,1.04692,.78223,1.20562,.94469,.90332,.98986,.86621,.90527,.79004,.94152,1.77256,.94152,.85284,.97801,.89552,.91133,.89552,.91133,1.91729,.89552,1.17889,1.13254,1.08707,.92098,.85284,.68787,.71353,.84737,.90747,1.0088,1.0044,.87683,1,1.09091,1,.92229,.739,1.15642,.92098,.76288,.80504,.80972,.75859,.8675,.8675,.8675,.8675,.8675,.8675,.76318,.73834,.73206,.73206,.73206,.73206,.90685,.90685,.90685,.90685,.86477,.89385,.85122,.85122,.85122,.85122,.85122,.85284,.85311,.88844,.88844,.88844,.88844,.7306,.77452,.86331,.86128,.86128,.86128,.86128,.86128,.86128,.8693,.8457,.89464,.89464,.89464,.89464,.82601,.82601,.82601,.82601,.94469,.94469,.9482,.9482,.9482,.9482,.9482,.90747,.86651,.94469,.94469,.94469,.94469,.90527,.94469,.90527,.8675,.86128,.8675,.86128,.8675,.86128,.73834,.8457,.73834,.8457,.73834,.8457,.73834,.8457,.85193,.92454,.86477,.9921,.73206,.89464,.73206,.89464,.73206,.89464,.73206,.89464,.73206,.89464,.81105,.84636,.81105,.84636,.81105,.84636,1,1,.86275,.94469,.90872,.95786,.90685,.82601,.90685,.82601,.90685,.82601,.90685,1.03297,.90685,.82601,.77741,1.05611,.6377,1.07692,1,1,.90918,.75593,1.03297,1,1,.76032,.90452,.98156,1.11842,.77261,1.11429,.89385,.94469,1,1,.89385,.94469,.95877,.86901,.94469,.85122,.9482,.85122,.9482,.85122,.9482,.8667,.90016,.75186,1.04692,1,1,.75186,1.04692,.68887,.78223,.68887,.78223,.68887,.78223,.68887,.78223,1,1,.79776,.92188,.79776,1.23023,.88844,.94469,.88844,.94469,.88844,.94469,.88844,.94469,.88844,.94469,.88844,.94469,.94258,.98986,.7306,.90527,.7306,.76659,.79004,.76659,.79004,.76659,.79004,1.09231,.54873,.8675,.86128,.76318,.8693,.85311,.86651,1,1,.79776,1.20562,1.18622,1.18622,1,1.1437,.67742,.96334,.93695,1.35191,1.40909,.95161,1.48387,.86686,.90861,.62267,.74359,.65649,.85498,.56963,.88254,1.23516,.8675,.81552,.75443,.84503,.73206,.76659,.86275,.85122,.90685,.77892,.85746,1.02638,.89385,.75657,.85122,.86275,.77452,.74171,.79776,.7306,.95165,.77818,.89772,.88831,.90685,.7306,.98142,1.02191,.96576,1.23516,.99018,.98142,.9236,.89258,.94035,1.02191,.78848,.96576,.9561,1.23516,.90918,.92578,.95424,.89746,.83969,.9482,.80113,.89442,.85208,.86155,.98022,.99018,1.00452,.81209,.99247,.89181,1.23516,.99018,.9482,.99018,.89181,.73206,1,1,1,1,1,1,1,1,1,1,1,1,.88844,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.89464,1,1,1,1,1,1,1,1,1,1,1,1,.96766,1,1,1,1,1,1,.94258,.98986,.94258,.98986,.94258,.98986,.7306,.90527,1,1,.89552,.90527,1,.90186,1.12308,1.12308,1.12308,1.12308,1.2566,1.2566,1.2566,.89552,.89552,1.42259,.69043,1.03809,1,1,1.0176,1.0176,1.11523,1.4956,2.01462,.99331,.82616,.91133,.84286,.91133,1,1,1,.70508,1,1.23108,.79801,.84426,.84426,.774,.90527,1.81055,.90527,1.81055,1.28809,1.55469,.94434,1.07806,1,.97094,.7589,.85284,.90747,1.19658,.69825,.97622,1.33512,.90747,.90747,.85356,.90747,.90747,1.44947,.85284,.8941,.8941,.70572,.8,.70572,.70572,.70572,.70572,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.99862,.99862,1,1,1,1,1,1.0336,.91027,1,1,1,.99862,1,1,1,1,1,1,1,1,1,1,1,1,1.05859,1.05859,1,1,1,1.07185,.99413,.96334,1.08065,1,1,1,1,1,1,1,1,1,1,1],t.CalibriRegularMetrics={lineHeight:1.2207,lineGap:.2207}},(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.HelveticaRegularMetrics=t.HelveticaRegularFactors=t.HelveticaItalicMetrics=t.HelveticaItalicFactors=t.HelveticaBoldMetrics=t.HelveticaBoldItalicMetrics=t.HelveticaBoldItalicFactors=t.HelveticaBoldFactors=void 0,t.HelveticaBoldFactors=[.76116,1,1,1.0006,.99998,.99974,.99973,.99973,.99982,.99977,1.00087,.99998,.99998,.99959,1.00003,1.0006,.99998,1.0006,1.0006,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99998,1,1.00003,1.00003,1.00003,1.00026,.9999,.99977,.99977,.99977,.99977,1.00001,1.00026,1.00022,.99977,1.0006,.99973,.99977,1.00026,.99999,.99977,1.00022,1.00001,1.00022,.99977,1.00001,1.00026,.99977,1.00001,1.00016,1.00001,1.00001,1.00026,.99998,1.0006,.99998,1.00003,.99973,.99998,.99973,1.00026,.99973,1.00026,.99973,.99998,1.00026,1.00026,1.0006,1.0006,.99973,1.0006,.99982,1.00026,1.00026,1.00026,1.00026,.99959,.99973,.99998,1.00026,.99973,1.00022,.99973,.99973,1,.99959,1.00077,.99959,1.00003,.99998,.99973,.99973,.99973,.99973,1.00077,.99973,.99998,1.00025,.99968,.99973,1.00003,1.00025,.60299,1.00024,1.06409,1,1,.99998,1,.99973,1.0006,.99998,1,.99936,.99973,1.00002,1.00002,1.00002,1.00026,.99977,.99977,.99977,.99977,.99977,.99977,1,.99977,1.00001,1.00001,1.00001,1.00001,1.0006,1.0006,1.0006,1.0006,.99977,.99977,1.00022,1.00022,1.00022,1.00022,1.00022,1.00003,1.00022,.99977,.99977,.99977,.99977,1.00001,1.00001,1.00026,.99973,.99973,.99973,.99973,.99973,.99973,.99982,.99973,.99973,.99973,.99973,.99973,1.0006,1.0006,1.0006,1.0006,1.00026,1.00026,1.00026,1.00026,1.00026,1.00026,1.00026,1.06409,1.00026,1.00026,1.00026,1.00026,1.00026,.99973,1.00026,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,1.03374,.99977,1.00026,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00022,1.00026,1.00022,1.00026,1.00022,1.00026,1.00022,1.00026,.99977,1.00026,.99977,1.00026,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.00042,.99973,.99973,1.0006,.99977,.99973,.99973,1.00026,1.0006,1.00026,1.0006,1.00026,1.03828,1.00026,.99999,1.00026,1.0006,.99977,1.00026,.99977,1.00026,.99977,1.00026,.9993,.9998,1.00026,1.00022,1.00026,1.00022,1.00026,1.00022,1.00026,1,1.00016,.99977,.99959,.99977,.99959,.99977,.99959,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00026,.99998,1.00026,.8121,1.00026,.99998,.99977,1.00026,.99977,1.00026,.99977,1.00026,.99977,1.00026,.99977,1.00026,.99977,1.00026,1.00016,1.00022,1.00001,.99973,1.00001,1.00026,1,1.00026,1,1.00026,1,1.0006,.99973,.99977,.99973,1,.99982,1.00022,1.00026,1.00001,.99973,1.00026,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,1.00034,.99977,1,.99997,1.00026,1.00078,1.00036,.99973,1.00013,1.0006,.99977,.99977,.99988,.85148,1.00001,1.00026,.99977,1.00022,1.0006,.99977,1.00001,.99999,.99977,1.00069,1.00022,.99977,1.00001,.99984,1.00026,1.00001,1.00024,1.00001,.9999,1,1.0006,1.00001,1.00041,.99962,1.00026,1.0006,.99995,1.00041,.99942,.99973,.99927,1.00082,.99902,1.00026,1.00087,1.0006,1.00069,.99973,.99867,.99973,.9993,1.00026,1.00049,1.00056,1,.99988,.99935,.99995,.99954,1.00055,.99945,1.00032,1.0006,.99995,1.00026,.99995,1.00032,1.00001,1.00008,.99971,1.00019,.9994,1.00001,1.0006,1.00044,.99973,1.00023,1.00047,1,.99942,.99561,.99989,1.00035,.99977,1.00035,.99977,1.00019,.99944,1.00001,1.00021,.99926,1.00035,1.00035,.99942,1.00048,.99999,.99977,1.00022,1.00035,1.00001,.99977,1.00026,.99989,1.00057,1.00001,.99936,1.00052,1.00012,.99996,1.00043,1,1.00035,.9994,.99976,1.00035,.99973,1.00052,1.00041,1.00119,1.00037,.99973,1.00002,.99986,1.00041,1.00041,.99902,.9996,1.00034,.99999,1.00026,.99999,1.00026,.99973,1.00052,.99973,1,.99973,1.00041,1.00075,.9994,1.0003,.99999,1,1.00041,.99955,1,.99915,.99973,.99973,1.00026,1.00119,.99955,.99973,1.0006,.99911,1.0006,1.00026,.99972,1.00026,.99902,1.00041,.99973,.99999,1,1,1.00038,1.0005,1.00016,1.00022,1.00016,1.00022,1.00016,1.00022,1.00001,.99973,1,1,.99973,1,1,.99955,1.0006,1.0006,1.0006,1.0006,1,1,1,.99973,.99973,.99972,1,1,1.00106,.99999,.99998,.99998,.99999,.99998,1.66475,1,.99973,.99973,1.00023,.99973,.99971,1.00047,1.00023,1,.99991,.99984,1.00002,1.00002,1.00002,1.00002,1,1,1,1,1,1,1,.99972,1,1.20985,1.39713,1.00003,1.00031,1.00015,1,.99561,1.00027,1.00031,1.00031,.99915,1.00031,1.00031,.99999,1.00003,.99999,.99999,1.41144,1.6,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.40579,1.40579,1.36625,.99999,1,.99861,.99861,1,1.00026,1.00026,1.00026,1.00026,.99972,.99999,.99999,.99999,.99999,1.40483,1,.99977,1.00054,1,1,.99953,.99962,1.00042,.9995,1,1,1,1,1,1,1,1,.99998,.99998,.99998,.99998,1,1,1,1,1,1,1,1,1,1,1],t.HelveticaBoldMetrics={lineHeight:1.2,lineGap:.2},t.HelveticaBoldItalicFactors=[.76116,1,1,1.0006,.99998,.99974,.99973,.99973,.99982,.99977,1.00087,.99998,.99998,.99959,1.00003,1.0006,.99998,1.0006,1.0006,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99998,1,1.00003,1.00003,1.00003,1.00026,.9999,.99977,.99977,.99977,.99977,1.00001,1.00026,1.00022,.99977,1.0006,.99973,.99977,1.00026,.99999,.99977,1.00022,1.00001,1.00022,.99977,1.00001,1.00026,.99977,1.00001,1.00016,1.00001,1.00001,1.00026,.99998,1.0006,.99998,1.00003,.99973,.99998,.99973,1.00026,.99973,1.00026,.99973,.99998,1.00026,1.00026,1.0006,1.0006,.99973,1.0006,.99982,1.00026,1.00026,1.00026,1.00026,.99959,.99973,.99998,1.00026,.99973,1.00022,.99973,.99973,1,.99959,1.00077,.99959,1.00003,.99998,.99973,.99973,.99973,.99973,1.00077,.99973,.99998,1.00025,.99968,.99973,1.00003,1.00025,.60299,1.00024,1.06409,1,1,.99998,1,.99973,1.0006,.99998,1,.99936,.99973,1.00002,1.00002,1.00002,1.00026,.99977,.99977,.99977,.99977,.99977,.99977,1,.99977,1.00001,1.00001,1.00001,1.00001,1.0006,1.0006,1.0006,1.0006,.99977,.99977,1.00022,1.00022,1.00022,1.00022,1.00022,1.00003,1.00022,.99977,.99977,.99977,.99977,1.00001,1.00001,1.00026,.99973,.99973,.99973,.99973,.99973,.99973,.99982,.99973,.99973,.99973,.99973,.99973,1.0006,1.0006,1.0006,1.0006,1.00026,1.00026,1.00026,1.00026,1.00026,1.00026,1.00026,1.06409,1.00026,1.00026,1.00026,1.00026,1.00026,.99973,1.00026,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,1.0044,.99977,1.00026,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00022,1.00026,1.00022,1.00026,1.00022,1.00026,1.00022,1.00026,.99977,1.00026,.99977,1.00026,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,.99971,.99973,.99973,1.0006,.99977,.99973,.99973,1.00026,1.0006,1.00026,1.0006,1.00026,1.01011,1.00026,.99999,1.00026,1.0006,.99977,1.00026,.99977,1.00026,.99977,1.00026,.9993,.9998,1.00026,1.00022,1.00026,1.00022,1.00026,1.00022,1.00026,1,1.00016,.99977,.99959,.99977,.99959,.99977,.99959,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00026,.99998,1.00026,.8121,1.00026,.99998,.99977,1.00026,.99977,1.00026,.99977,1.00026,.99977,1.00026,.99977,1.00026,.99977,1.00026,1.00016,1.00022,1.00001,.99973,1.00001,1.00026,1,1.00026,1,1.00026,1,1.0006,.99973,.99977,.99973,1,.99982,1.00022,1.00026,1.00001,.99973,1.00026,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99977,1,1,1.00026,.99969,.99972,.99981,.9998,1.0006,.99977,.99977,1.00022,.91155,1.00001,1.00026,.99977,1.00022,1.0006,.99977,1.00001,.99999,.99977,.99966,1.00022,1.00032,1.00001,.99944,1.00026,1.00001,.99968,1.00001,1.00047,1,1.0006,1.00001,.99981,1.00101,1.00026,1.0006,.99948,.99981,1.00064,.99973,.99942,1.00101,1.00061,1.00026,1.00069,1.0006,1.00014,.99973,1.01322,.99973,1.00065,1.00026,1.00012,.99923,1,1.00064,1.00076,.99948,1.00055,1.00063,1.00007,.99943,1.0006,.99948,1.00026,.99948,.99943,1.00001,1.00001,1.00029,1.00038,1.00035,1.00001,1.0006,1.0006,.99973,.99978,1.00001,1.00057,.99989,.99967,.99964,.99967,.99977,.99999,.99977,1.00038,.99977,1.00001,.99973,1.00066,.99967,.99967,1.00041,.99998,.99999,.99977,1.00022,.99967,1.00001,.99977,1.00026,.99964,1.00031,1.00001,.99999,.99999,1,1.00023,1,1,.99999,1.00035,1.00001,.99999,.99973,.99977,.99999,1.00058,.99973,.99973,.99955,.9995,1.00026,1.00026,1.00032,.99989,1.00034,.99999,1.00026,1.00026,1.00026,.99973,.45998,.99973,1.00026,.99973,1.00001,.99999,.99982,.99994,.99996,1,1.00042,1.00044,1.00029,1.00023,.99973,.99973,1.00026,.99949,1.00002,.99973,1.0006,1.0006,1.0006,.99975,1.00026,1.00026,1.00032,.98685,.99973,1.00026,1,1,.99966,1.00044,1.00016,1.00022,1.00016,1.00022,1.00016,1.00022,1.00001,.99973,1,1,.99973,1,1,.99955,1.0006,1.0006,1.0006,1.0006,1,1,1,.99973,.99973,.99972,1,1,1.00106,.99999,.99998,.99998,.99999,.99998,1.66475,1,.99973,.99973,1,.99973,.99971,.99978,1,1,.99991,.99984,1.00002,1.00002,1.00002,1.00002,1.00098,1,1,1,1.00049,1,1,.99972,1,1.20985,1.39713,1.00003,1.00031,1.00015,1,.99561,1.00027,1.00031,1.00031,.99915,1.00031,1.00031,.99999,1.00003,.99999,.99999,1.41144,1.6,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.40579,1.40579,1.36625,.99999,1,.99861,.99861,1,1.00026,1.00026,1.00026,1.00026,.99972,.99999,.99999,.99999,.99999,1.40483,1,.99977,1.00054,1,1,.99953,.99962,1.00042,.9995,1,1,1,1,1,1,1,1,.99998,.99998,.99998,.99998,1,1,1,1,1,1,1,1,1,1,1],t.HelveticaBoldItalicMetrics={lineHeight:1.35,lineGap:.2},t.HelveticaItalicFactors=[.76116,1,1,1.0006,1.0006,1.00006,.99973,.99973,.99982,1.00001,1.00043,.99998,.99998,.99959,1.00003,1.0006,.99998,1.0006,1.0006,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,1.0006,1,1.00003,1.00003,1.00003,.99973,.99987,1.00001,1.00001,.99977,.99977,1.00001,1.00026,1.00022,.99977,1.0006,1,1.00001,.99973,.99999,.99977,1.00022,1.00001,1.00022,.99977,1.00001,1.00026,.99977,1.00001,1.00016,1.00001,1.00001,1.00026,1.0006,1.0006,1.0006,.99949,.99973,.99998,.99973,.99973,1,.99973,.99973,1.0006,.99973,.99973,.99924,.99924,1,.99924,.99999,.99973,.99973,.99973,.99973,.99998,1,1.0006,.99973,1,.99977,1,1,1,1.00005,1.0009,1.00005,1.00003,.99998,.99973,.99973,.99973,.99973,1.0009,.99973,.99998,1.00025,.99968,.99973,1.00003,1.00025,.60299,1.00024,1.06409,1,1,.99998,1,.9998,1.0006,.99998,1,.99936,.99973,1.00002,1.00002,1.00002,1.00026,1.00001,1.00001,1.00001,1.00001,1.00001,1.00001,1,.99977,1.00001,1.00001,1.00001,1.00001,1.0006,1.0006,1.0006,1.0006,.99977,.99977,1.00022,1.00022,1.00022,1.00022,1.00022,1.00003,1.00022,.99977,.99977,.99977,.99977,1.00001,1.00001,1.00026,.99973,.99973,.99973,.99973,.99973,.99973,.99982,1,.99973,.99973,.99973,.99973,1.0006,1.0006,1.0006,1.0006,.99973,.99973,.99973,.99973,.99973,.99973,.99973,1.06409,1.00026,.99973,.99973,.99973,.99973,1,.99973,1,1.00001,.99973,1.00001,.99973,1.00001,.99973,.99977,1,.99977,1,.99977,1,.99977,1,.99977,1.0288,.99977,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00022,.99973,1.00022,.99973,1.00022,.99973,1.00022,.99973,.99977,.99973,.99977,.99973,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,.99924,1.0006,1.0006,.99946,1.00034,1,.99924,1.00001,1,1,.99973,.99924,.99973,.99924,.99973,1.06311,.99973,1.00024,.99973,.99924,.99977,.99973,.99977,.99973,.99977,.99973,1.00041,.9998,.99973,1.00022,.99973,1.00022,.99973,1.00022,.99973,1,1.00016,.99977,.99998,.99977,.99998,.99977,.99998,1.00001,1,1.00001,1,1.00001,1,1.00001,1,1.00026,1.0006,1.00026,.89547,1.00026,1.0006,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,1.00016,.99977,1.00001,1,1.00001,1.00026,1,1.00026,1,1.00026,1,.99924,.99973,1.00001,.99973,1,.99982,1.00022,1.00026,1.00001,1,1.00026,1.0006,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,1.00001,1,1.00054,.99977,1.00084,1.00007,.99973,1.00013,.99924,1.00001,1.00001,.99945,.91221,1.00001,1.00026,.99977,1.00022,1.0006,1.00001,1.00001,.99999,.99977,.99933,1.00022,1.00054,1.00001,1.00065,1.00026,1.00001,1.0001,1.00001,1.00052,1,1.0006,1.00001,.99945,.99897,.99968,.99924,1.00036,.99945,.99949,1,1.0006,.99897,.99918,.99968,.99911,.99924,1,.99962,1.01487,1,1.0005,.99973,1.00012,1.00043,1,.99995,.99994,1.00036,.99947,1.00019,1.00063,1.00025,.99924,1.00036,.99973,1.00036,1.00025,1.00001,1.00001,1.00027,1.0001,1.00068,1.00001,1.0006,1.0006,1,1.00008,.99957,.99972,.9994,.99954,.99975,1.00051,1.00001,1.00019,1.00001,1.0001,.99986,1.00001,1.00001,1.00038,.99954,.99954,.9994,1.00066,.99999,.99977,1.00022,1.00054,1.00001,.99977,1.00026,.99975,1.0001,1.00001,.99993,.9995,.99955,1.00016,.99978,.99974,1.00019,1.00022,.99955,1.00053,.99973,1.00089,1.00005,.99967,1.00048,.99973,1.00002,1.00034,.99973,.99973,.99964,1.00006,1.00066,.99947,.99973,.98894,.99973,1,.44898,1,.99946,1,1.00039,1.00082,.99991,.99991,.99985,1.00022,1.00023,1.00061,1.00006,.99966,.99973,.99973,.99973,1.00019,1.0008,1,.99924,.99924,.99924,.99983,1.00044,.99973,.99964,.98332,1,.99973,1,1,.99962,.99895,1.00016,.99977,1.00016,.99977,1.00016,.99977,1.00001,1,1,1,.99973,1,1,.99955,.99924,.99924,.99924,.99924,.99998,.99998,.99998,.99973,.99973,.99972,1,1,1.00267,.99999,.99998,.99998,1,.99998,1.66475,1,.99973,.99973,1.00023,.99973,1.00423,.99925,.99999,1,.99991,.99984,1.00002,1.00002,1.00002,1.00002,1.00049,1,1.00245,1,1,1,1,.96329,1,1.20985,1.39713,1.00003,.8254,1.00015,1,1.00035,1.00027,1.00031,1.00031,1.00003,1.00031,1.00031,.99999,1.00003,.99999,.99999,1.41144,1.6,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.40579,1.40579,1.36625,.99999,1,.99861,.99861,1,1.00026,1.00026,1.00026,1.00026,.95317,.99999,.99999,.99999,.99999,1.40483,1,.99977,1.00054,1,1,.99953,.99962,1.00042,.9995,1,1,1,1,1,1,1,1,.99998,.99998,.99998,.99998,1,1,1,1,1,1,1,1,1,1,1],t.HelveticaItalicMetrics={lineHeight:1.35,lineGap:.2},t.HelveticaRegularFactors=[.76116,1,1,1.0006,1.0006,1.00006,.99973,.99973,.99982,1.00001,1.00043,.99998,.99998,.99959,1.00003,1.0006,.99998,1.0006,1.0006,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,.99973,1.0006,1,1.00003,1.00003,1.00003,.99973,.99987,1.00001,1.00001,.99977,.99977,1.00001,1.00026,1.00022,.99977,1.0006,1,1.00001,.99973,.99999,.99977,1.00022,1.00001,1.00022,.99977,1.00001,1.00026,.99977,1.00001,1.00016,1.00001,1.00001,1.00026,1.0006,1.0006,1.0006,.99949,.99973,.99998,.99973,.99973,1,.99973,.99973,1.0006,.99973,.99973,.99924,.99924,1,.99924,.99999,.99973,.99973,.99973,.99973,.99998,1,1.0006,.99973,1,.99977,1,1,1,1.00005,1.0009,1.00005,1.00003,.99998,.99973,.99973,.99973,.99973,1.0009,.99973,.99998,1.00025,.99968,.99973,1.00003,1.00025,.60299,1.00024,1.06409,1,1,.99998,1,.9998,1.0006,.99998,1,.99936,.99973,1.00002,1.00002,1.00002,1.00026,1.00001,1.00001,1.00001,1.00001,1.00001,1.00001,1,.99977,1.00001,1.00001,1.00001,1.00001,1.0006,1.0006,1.0006,1.0006,.99977,.99977,1.00022,1.00022,1.00022,1.00022,1.00022,1.00003,1.00022,.99977,.99977,.99977,.99977,1.00001,1.00001,1.00026,.99973,.99973,.99973,.99973,.99973,.99973,.99982,1,.99973,.99973,.99973,.99973,1.0006,1.0006,1.0006,1.0006,.99973,.99973,.99973,.99973,.99973,.99973,.99973,1.06409,1.00026,.99973,.99973,.99973,.99973,1,.99973,1,1.00001,.99973,1.00001,.99973,1.00001,.99973,.99977,1,.99977,1,.99977,1,.99977,1,.99977,1.04596,.99977,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00001,.99973,1.00022,.99973,1.00022,.99973,1.00022,.99973,1.00022,.99973,.99977,.99973,.99977,.99973,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,1.0006,.99924,1.0006,1.0006,1.00019,1.00034,1,.99924,1.00001,1,1,.99973,.99924,.99973,.99924,.99973,1.02572,.99973,1.00005,.99973,.99924,.99977,.99973,.99977,.99973,.99977,.99973,.99999,.9998,.99973,1.00022,.99973,1.00022,.99973,1.00022,.99973,1,1.00016,.99977,.99998,.99977,.99998,.99977,.99998,1.00001,1,1.00001,1,1.00001,1,1.00001,1,1.00026,1.0006,1.00026,.84533,1.00026,1.0006,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,.99977,.99973,1.00016,.99977,1.00001,1,1.00001,1.00026,1,1.00026,1,1.00026,1,.99924,.99973,1.00001,.99973,1,.99982,1.00022,1.00026,1.00001,1,1.00026,1.0006,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99998,.99928,1,.99977,1.00013,1.00055,.99947,.99945,.99941,.99924,1.00001,1.00001,1.0004,.91621,1.00001,1.00026,.99977,1.00022,1.0006,1.00001,1.00005,.99999,.99977,1.00015,1.00022,.99977,1.00001,.99973,1.00026,1.00001,1.00019,1.00001,.99946,1,1.0006,1.00001,.99978,1.00045,.99973,.99924,1.00023,.99978,.99966,1,1.00065,1.00045,1.00019,.99973,.99973,.99924,1,1,.96499,1,1.00055,.99973,1.00008,1.00027,1,.9997,.99995,1.00023,.99933,1.00019,1.00015,1.00031,.99924,1.00023,.99973,1.00023,1.00031,1.00001,.99928,1.00029,1.00092,1.00035,1.00001,1.0006,1.0006,1,.99988,.99975,1,1.00082,.99561,.9996,1.00035,1.00001,.99962,1.00001,1.00092,.99964,1.00001,.99963,.99999,1.00035,1.00035,1.00082,.99962,.99999,.99977,1.00022,1.00035,1.00001,.99977,1.00026,.9996,.99967,1.00001,1.00034,1.00074,1.00054,1.00053,1.00063,.99971,.99962,1.00035,.99975,.99977,.99973,1.00043,.99953,1.0007,.99915,.99973,1.00008,.99892,1.00073,1.00073,1.00114,.99915,1.00073,.99955,.99973,1.00092,.99973,1,.99998,1,1.0003,1,1.00043,1.00001,.99969,1.0003,1,1.00035,1.00001,.9995,1,1.00092,.99973,.99973,.99973,1.0007,.9995,1,.99924,1.0006,.99924,.99972,1.00062,.99973,1.00114,1.00073,1,.99955,1,1,1.00047,.99968,1.00016,.99977,1.00016,.99977,1.00016,.99977,1.00001,1,1,1,.99973,1,1,.99955,.99924,.99924,.99924,.99924,.99998,.99998,.99998,.99973,.99973,.99972,1,1,1.00267,.99999,.99998,.99998,1,.99998,1.66475,1,.99973,.99973,1.00023,.99973,.99971,.99925,1.00023,1,.99991,.99984,1.00002,1.00002,1.00002,1.00002,1,1,1,1,1,1,1,.96329,1,1.20985,1.39713,1.00003,.8254,1.00015,1,1.00035,1.00027,1.00031,1.00031,.99915,1.00031,1.00031,.99999,1.00003,.99999,.99999,1.41144,1.6,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.41144,1.40579,1.40579,1.36625,.99999,1,.99861,.99861,1,1.00026,1.00026,1.00026,1.00026,.95317,.99999,.99999,.99999,.99999,1.40483,1,.99977,1.00054,1,1,.99953,.99962,1.00042,.9995,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],t.HelveticaRegularMetrics={lineHeight:1.2,lineGap:.2}},(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.LiberationSansRegularWidths=t.LiberationSansRegularMapping=t.LiberationSansItalicWidths=t.LiberationSansItalicMapping=t.LiberationSansBoldWidths=t.LiberationSansBoldMapping=t.LiberationSansBoldItalicWidths=t.LiberationSansBoldItalicMapping=void 0,t.LiberationSansBoldWidths=[365,0,333,278,333,474,556,556,889,722,238,333,333,389,584,278,333,278,278,556,556,556,556,556,556,556,556,556,556,333,333,584,584,584,611,975,722,722,722,722,667,611,778,722,278,556,722,611,833,722,778,667,778,722,667,611,722,667,944,667,667,611,333,278,333,584,556,333,556,611,556,611,556,333,611,611,278,278,556,278,889,611,611,611,611,389,556,333,611,556,778,556,556,500,389,280,389,584,333,556,556,556,556,280,556,333,737,370,556,584,737,552,400,549,333,333,333,576,556,278,333,333,365,556,834,834,834,611,722,722,722,722,722,722,1e3,722,667,667,667,667,278,278,278,278,722,722,778,778,778,778,778,584,778,722,722,722,722,667,667,611,556,556,556,556,556,556,889,556,556,556,556,556,278,278,278,278,611,611,611,611,611,611,611,549,611,611,611,611,611,556,611,556,722,556,722,556,722,556,722,556,722,556,722,556,722,556,722,719,722,611,667,556,667,556,667,556,667,556,667,556,778,611,778,611,778,611,778,611,722,611,722,611,278,278,278,278,278,278,278,278,278,278,785,556,556,278,722,556,556,611,278,611,278,611,385,611,479,611,278,722,611,722,611,722,611,708,723,611,778,611,778,611,778,611,1e3,944,722,389,722,389,722,389,667,556,667,556,667,556,667,556,611,333,611,479,611,333,722,611,722,611,722,611,722,611,722,611,722,611,944,778,667,556,667,611,500,611,500,611,500,278,556,722,556,1e3,889,778,611,667,556,611,333,333,333,333,333,333,333,333,333,333,333,465,722,333,853,906,474,825,927,838,278,722,722,601,719,667,611,722,778,278,722,667,833,722,644,778,722,667,600,611,667,821,667,809,802,278,667,615,451,611,278,582,615,610,556,606,475,460,611,541,278,558,556,612,556,445,611,766,619,520,684,446,582,715,576,753,845,278,582,611,582,845,667,669,885,567,711,667,278,276,556,1094,1062,875,610,722,622,719,722,719,722,567,712,667,904,626,719,719,610,702,833,722,778,719,667,722,611,622,854,667,730,703,1005,1019,870,979,719,711,1031,719,556,618,615,417,635,556,709,497,615,615,500,635,740,604,611,604,611,556,490,556,875,556,615,581,833,844,729,854,615,552,854,583,556,556,611,417,552,556,278,281,278,969,906,611,500,615,556,604,778,611,487,447,944,778,944,778,944,778,667,556,333,333,556,1e3,1e3,552,278,278,278,278,500,500,500,556,556,350,1e3,1e3,240,479,333,333,604,333,167,396,556,556,1094,556,885,489,1115,1e3,768,600,834,834,834,834,1e3,500,1e3,500,1e3,500,500,494,612,823,713,584,549,713,979,722,274,549,549,583,549,549,604,584,604,604,708,625,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,729,604,604,354,354,1e3,990,990,990,990,494,604,604,604,604,354,1021,1052,917,750,750,531,656,594,510,500,750,750,611,611,333,333,333,333,333,333,333,333,222,222,333,333,333,333,333,333,333,333],t.LiberationSansBoldMapping=[-1,-1,-1,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,161,162,163,164,165,166,167,168,169,170,171,172,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,402,506,507,508,509,510,511,536,537,538,539,710,711,713,728,729,730,731,732,733,900,901,902,903,904,905,906,908,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1138,1139,1168,1169,7808,7809,7810,7811,7812,7813,7922,7923,8208,8209,8211,8212,8213,8215,8216,8217,8218,8219,8220,8221,8222,8224,8225,8226,8230,8240,8242,8243,8249,8250,8252,8254,8260,8319,8355,8356,8359,8364,8453,8467,8470,8482,8486,8494,8539,8540,8541,8542,8592,8593,8594,8595,8596,8597,8616,8706,8710,8719,8721,8722,8730,8734,8735,8745,8747,8776,8800,8801,8804,8805,8962,8976,8992,8993,9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9600,9604,9608,9612,9616,9617,9618,9619,9632,9633,9642,9643,9644,9650,9658,9660,9668,9674,9675,9679,9688,9689,9702,9786,9787,9788,9792,9794,9824,9827,9829,9830,9834,9835,9836,61441,61442,61445,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],t.LiberationSansBoldItalicWidths=[365,0,333,278,333,474,556,556,889,722,238,333,333,389,584,278,333,278,278,556,556,556,556,556,556,556,556,556,556,333,333,584,584,584,611,975,722,722,722,722,667,611,778,722,278,556,722,611,833,722,778,667,778,722,667,611,722,667,944,667,667,611,333,278,333,584,556,333,556,611,556,611,556,333,611,611,278,278,556,278,889,611,611,611,611,389,556,333,611,556,778,556,556,500,389,280,389,584,333,556,556,556,556,280,556,333,737,370,556,584,737,552,400,549,333,333,333,576,556,278,333,333,365,556,834,834,834,611,722,722,722,722,722,722,1e3,722,667,667,667,667,278,278,278,278,722,722,778,778,778,778,778,584,778,722,722,722,722,667,667,611,556,556,556,556,556,556,889,556,556,556,556,556,278,278,278,278,611,611,611,611,611,611,611,549,611,611,611,611,611,556,611,556,722,556,722,556,722,556,722,556,722,556,722,556,722,556,722,740,722,611,667,556,667,556,667,556,667,556,667,556,778,611,778,611,778,611,778,611,722,611,722,611,278,278,278,278,278,278,278,278,278,278,782,556,556,278,722,556,556,611,278,611,278,611,396,611,479,611,278,722,611,722,611,722,611,708,723,611,778,611,778,611,778,611,1e3,944,722,389,722,389,722,389,667,556,667,556,667,556,667,556,611,333,611,479,611,333,722,611,722,611,722,611,722,611,722,611,722,611,944,778,667,556,667,611,500,611,500,611,500,278,556,722,556,1e3,889,778,611,667,556,611,333,333,333,333,333,333,333,333,333,333,333,333,722,333,854,906,473,844,930,847,278,722,722,610,671,667,611,722,778,278,722,667,833,722,657,778,718,667,590,611,667,822,667,829,781,278,667,620,479,611,278,591,620,621,556,610,479,492,611,558,278,566,556,603,556,450,611,712,605,532,664,409,591,704,578,773,834,278,591,611,591,834,667,667,886,614,719,667,278,278,556,1094,1042,854,622,719,677,719,722,708,722,614,722,667,927,643,719,719,615,687,833,722,778,719,667,722,611,677,781,667,729,708,979,989,854,1e3,708,719,1042,729,556,619,604,534,618,556,736,510,611,611,507,622,740,604,611,611,611,556,889,556,885,556,646,583,889,935,707,854,594,552,865,589,556,556,611,469,563,556,278,278,278,969,906,611,507,619,556,611,778,611,575,467,944,778,944,778,944,778,667,556,333,333,556,1e3,1e3,552,278,278,278,278,500,500,500,556,556,350,1e3,1e3,240,479,333,333,604,333,167,396,556,556,1104,556,885,516,1146,1e3,768,600,834,834,834,834,999,500,1e3,500,1e3,500,500,494,612,823,713,584,549,713,979,722,274,549,549,583,549,549,604,584,604,604,708,625,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,729,604,604,354,354,1e3,990,990,990,990,494,604,604,604,604,354,1021,1052,917,750,750,531,656,594,510,500,750,750,611,611,333,333,333,333,333,333,333,333,222,222,333,333,333,333,333,333,333,333],t.LiberationSansBoldItalicMapping=[-1,-1,-1,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,161,162,163,164,165,166,167,168,169,170,171,172,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,402,506,507,508,509,510,511,536,537,538,539,710,711,713,728,729,730,731,732,733,900,901,902,903,904,905,906,908,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1138,1139,1168,1169,7808,7809,7810,7811,7812,7813,7922,7923,8208,8209,8211,8212,8213,8215,8216,8217,8218,8219,8220,8221,8222,8224,8225,8226,8230,8240,8242,8243,8249,8250,8252,8254,8260,8319,8355,8356,8359,8364,8453,8467,8470,8482,8486,8494,8539,8540,8541,8542,8592,8593,8594,8595,8596,8597,8616,8706,8710,8719,8721,8722,8730,8734,8735,8745,8747,8776,8800,8801,8804,8805,8962,8976,8992,8993,9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9600,9604,9608,9612,9616,9617,9618,9619,9632,9633,9642,9643,9644,9650,9658,9660,9668,9674,9675,9679,9688,9689,9702,9786,9787,9788,9792,9794,9824,9827,9829,9830,9834,9835,9836,61441,61442,61445,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],t.LiberationSansItalicWidths=[365,0,333,278,278,355,556,556,889,667,191,333,333,389,584,278,333,278,278,556,556,556,556,556,556,556,556,556,556,278,278,584,584,584,556,1015,667,667,722,722,667,611,778,722,278,500,667,556,833,722,778,667,778,722,667,611,722,667,944,667,667,611,278,278,278,469,556,333,556,556,500,556,556,278,556,556,222,222,500,222,833,556,556,556,556,333,500,278,556,500,722,500,500,500,334,260,334,584,333,556,556,556,556,260,556,333,737,370,556,584,737,552,400,549,333,333,333,576,537,278,333,333,365,556,834,834,834,611,667,667,667,667,667,667,1e3,722,667,667,667,667,278,278,278,278,722,722,778,778,778,778,778,584,778,722,722,722,722,667,667,611,556,556,556,556,556,556,889,500,556,556,556,556,278,278,278,278,556,556,556,556,556,556,556,549,611,556,556,556,556,500,556,500,667,556,667,556,667,556,722,500,722,500,722,500,722,500,722,625,722,556,667,556,667,556,667,556,667,556,667,556,778,556,778,556,778,556,778,556,722,556,722,556,278,278,278,278,278,278,278,222,278,278,733,444,500,222,667,500,500,556,222,556,222,556,281,556,400,556,222,722,556,722,556,722,556,615,723,556,778,556,778,556,778,556,1e3,944,722,333,722,333,722,333,667,500,667,500,667,500,667,500,611,278,611,354,611,278,722,556,722,556,722,556,722,556,722,556,722,556,944,722,667,500,667,611,500,611,500,611,500,222,556,667,556,1e3,889,778,611,667,500,611,278,333,333,333,333,333,333,333,333,333,333,333,667,278,789,846,389,794,865,775,222,667,667,570,671,667,611,722,778,278,667,667,833,722,648,778,725,667,600,611,667,837,667,831,761,278,667,570,439,555,222,550,570,571,500,556,439,463,555,542,222,500,492,548,500,447,556,670,573,486,603,374,550,652,546,728,779,222,550,556,550,779,667,667,843,544,708,667,278,278,500,1066,982,844,589,715,639,724,667,651,667,544,704,667,917,614,715,715,589,686,833,722,778,725,667,722,611,639,795,667,727,673,920,923,805,886,651,694,1022,682,556,562,522,493,553,556,688,465,556,556,472,564,686,550,556,556,556,500,833,500,835,500,572,518,830,851,621,736,526,492,752,534,556,556,556,378,496,500,222,222,222,910,828,556,472,565,500,556,778,556,492,339,944,722,944,722,944,722,667,500,333,333,556,1e3,1e3,552,222,222,222,222,333,333,333,556,556,350,1e3,1e3,188,354,333,333,500,333,167,365,556,556,1094,556,885,323,1083,1e3,768,600,834,834,834,834,1e3,500,998,500,1e3,500,500,494,612,823,713,584,549,713,979,719,274,549,549,584,549,549,604,584,604,604,708,625,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,729,604,604,354,354,1e3,990,990,990,990,494,604,604,604,604,354,1021,1052,917,750,750,531,656,594,510,500,750,750,500,500,333,333,333,333,333,333,333,333,222,222,294,294,324,324,316,328,398,285],t.LiberationSansItalicMapping=[-1,-1,-1,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,161,162,163,164,165,166,167,168,169,170,171,172,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,402,506,507,508,509,510,511,536,537,538,539,710,711,713,728,729,730,731,732,733,900,901,902,903,904,905,906,908,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1138,1139,1168,1169,7808,7809,7810,7811,7812,7813,7922,7923,8208,8209,8211,8212,8213,8215,8216,8217,8218,8219,8220,8221,8222,8224,8225,8226,8230,8240,8242,8243,8249,8250,8252,8254,8260,8319,8355,8356,8359,8364,8453,8467,8470,8482,8486,8494,8539,8540,8541,8542,8592,8593,8594,8595,8596,8597,8616,8706,8710,8719,8721,8722,8730,8734,8735,8745,8747,8776,8800,8801,8804,8805,8962,8976,8992,8993,9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9600,9604,9608,9612,9616,9617,9618,9619,9632,9633,9642,9643,9644,9650,9658,9660,9668,9674,9675,9679,9688,9689,9702,9786,9787,9788,9792,9794,9824,9827,9829,9830,9834,9835,9836,61441,61442,61445,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],t.LiberationSansRegularWidths=[365,0,333,278,278,355,556,556,889,667,191,333,333,389,584,278,333,278,278,556,556,556,556,556,556,556,556,556,556,278,278,584,584,584,556,1015,667,667,722,722,667,611,778,722,278,500,667,556,833,722,778,667,778,722,667,611,722,667,944,667,667,611,278,278,278,469,556,333,556,556,500,556,556,278,556,556,222,222,500,222,833,556,556,556,556,333,500,278,556,500,722,500,500,500,334,260,334,584,333,556,556,556,556,260,556,333,737,370,556,584,737,552,400,549,333,333,333,576,537,278,333,333,365,556,834,834,834,611,667,667,667,667,667,667,1e3,722,667,667,667,667,278,278,278,278,722,722,778,778,778,778,778,584,778,722,722,722,722,667,667,611,556,556,556,556,556,556,889,500,556,556,556,556,278,278,278,278,556,556,556,556,556,556,556,549,611,556,556,556,556,500,556,500,667,556,667,556,667,556,722,500,722,500,722,500,722,500,722,615,722,556,667,556,667,556,667,556,667,556,667,556,778,556,778,556,778,556,778,556,722,556,722,556,278,278,278,278,278,278,278,222,278,278,735,444,500,222,667,500,500,556,222,556,222,556,292,556,334,556,222,722,556,722,556,722,556,604,723,556,778,556,778,556,778,556,1e3,944,722,333,722,333,722,333,667,500,667,500,667,500,667,500,611,278,611,375,611,278,722,556,722,556,722,556,722,556,722,556,722,556,944,722,667,500,667,611,500,611,500,611,500,222,556,667,556,1e3,889,778,611,667,500,611,278,333,333,333,333,333,333,333,333,333,333,333,667,278,784,838,384,774,855,752,222,667,667,551,668,667,611,722,778,278,667,668,833,722,650,778,722,667,618,611,667,798,667,835,748,278,667,578,446,556,222,547,578,575,500,557,446,441,556,556,222,500,500,576,500,448,556,690,569,482,617,395,547,648,525,713,781,222,547,556,547,781,667,667,865,542,719,667,278,278,500,1057,1010,854,583,722,635,719,667,656,667,542,677,667,923,604,719,719,583,656,833,722,778,719,667,722,611,635,760,667,740,667,917,938,792,885,656,719,1010,722,556,573,531,365,583,556,669,458,559,559,438,583,688,552,556,542,556,500,458,500,823,500,573,521,802,823,625,719,521,510,750,542,556,556,556,365,510,500,222,278,222,906,812,556,438,559,500,552,778,556,489,411,944,722,944,722,944,722,667,500,333,333,556,1e3,1e3,552,222,222,222,222,333,333,333,556,556,350,1e3,1e3,188,354,333,333,500,333,167,365,556,556,1094,556,885,323,1073,1e3,768,600,834,834,834,834,1e3,500,1e3,500,1e3,500,500,494,612,823,713,584,549,713,979,719,274,549,549,583,549,549,604,584,604,604,708,625,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,729,604,604,354,354,1e3,990,990,990,990,494,604,604,604,604,354,1021,1052,917,750,750,531,656,594,510,500,750,750,500,500,333,333,333,333,333,333,333,333,222,222,294,294,324,324,316,328,398,285],t.LiberationSansRegularMapping=[-1,-1,-1,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,161,162,163,164,165,166,167,168,169,170,171,172,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,402,506,507,508,509,510,511,536,537,538,539,710,711,713,728,729,730,731,732,733,900,901,902,903,904,905,906,908,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1138,1139,1168,1169,7808,7809,7810,7811,7812,7813,7922,7923,8208,8209,8211,8212,8213,8215,8216,8217,8218,8219,8220,8221,8222,8224,8225,8226,8230,8240,8242,8243,8249,8250,8252,8254,8260,8319,8355,8356,8359,8364,8453,8467,8470,8482,8486,8494,8539,8540,8541,8542,8592,8593,8594,8595,8596,8597,8616,8706,8710,8719,8721,8722,8730,8734,8735,8745,8747,8776,8800,8801,8804,8805,8962,8976,8992,8993,9472,9474,9484,9488,9492,9496,9500,9508,9516,9524,9532,9552,9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568,9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9600,9604,9608,9612,9616,9617,9618,9619,9632,9633,9642,9643,9644,9650,9658,9660,9668,9674,9675,9679,9688,9689,9702,9786,9787,9788,9792,9794,9824,9827,9829,9830,9834,9835,9836,61441,61442,61445,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]},(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.MyriadProRegularMetrics=t.MyriadProRegularFactors=t.MyriadProItalicMetrics=t.MyriadProItalicFactors=t.MyriadProBoldMetrics=t.MyriadProBoldItalicMetrics=t.MyriadProBoldItalicFactors=t.MyriadProBoldFactors=void 0,t.MyriadProBoldFactors=[1.36898,1,1,.72706,.80479,.83734,.98894,.99793,.9897,.93884,.86209,.94292,.94292,1.16661,1.02058,.93582,.96694,.93582,1.19137,.99793,.99793,.99793,.99793,.99793,.99793,.99793,.99793,.99793,.99793,.78076,.78076,1.02058,1.02058,1.02058,.72851,.78966,.90838,.83637,.82391,.96376,.80061,.86275,.8768,.95407,1.0258,.73901,.85022,.83655,1.0156,.95546,.92179,.87107,.92179,.82114,.8096,.89713,.94438,.95353,.94083,.91905,.90406,.9446,.94292,1.18777,.94292,1.02058,.89903,.90088,.94938,.97898,.81093,.97571,.94938,1.024,.9577,.95933,.98621,1.0474,.97455,.98981,.9672,.95933,.9446,.97898,.97407,.97646,.78036,1.10208,.95442,.95298,.97579,.9332,.94039,.938,.80687,1.01149,.80687,1.02058,.80479,.99793,.99793,.99793,.99793,1.01149,1.00872,.90088,.91882,1.0213,.8361,1.02058,.62295,.54324,.89022,1.08595,1,1,.90088,1,.97455,.93582,.90088,1,1.05686,.8361,.99642,.99642,.99642,.72851,.90838,.90838,.90838,.90838,.90838,.90838,.868,.82391,.80061,.80061,.80061,.80061,1.0258,1.0258,1.0258,1.0258,.97484,.95546,.92179,.92179,.92179,.92179,.92179,1.02058,.92179,.94438,.94438,.94438,.94438,.90406,.86958,.98225,.94938,.94938,.94938,.94938,.94938,.94938,.9031,.81093,.94938,.94938,.94938,.94938,.98621,.98621,.98621,.98621,.93969,.95933,.9446,.9446,.9446,.9446,.9446,1.08595,.9446,.95442,.95442,.95442,.95442,.94039,.97898,.94039,.90838,.94938,.90838,.94938,.90838,.94938,.82391,.81093,.82391,.81093,.82391,.81093,.82391,.81093,.96376,.84313,.97484,.97571,.80061,.94938,.80061,.94938,.80061,.94938,.80061,.94938,.80061,.94938,.8768,.9577,.8768,.9577,.8768,.9577,1,1,.95407,.95933,.97069,.95933,1.0258,.98621,1.0258,.98621,1.0258,.98621,1.0258,.98621,1.0258,.98621,.887,1.01591,.73901,1.0474,1,1,.97455,.83655,.98981,1,1,.83655,.73977,.83655,.73903,.84638,1.033,.95546,.95933,1,1,.95546,.95933,.8271,.95417,.95933,.92179,.9446,.92179,.9446,.92179,.9446,.936,.91964,.82114,.97646,1,1,.82114,.97646,.8096,.78036,.8096,.78036,1,1,.8096,.78036,1,1,.89713,.77452,.89713,1.10208,.94438,.95442,.94438,.95442,.94438,.95442,.94438,.95442,.94438,.95442,.94438,.95442,.94083,.97579,.90406,.94039,.90406,.9446,.938,.9446,.938,.9446,.938,1,.99793,.90838,.94938,.868,.9031,.92179,.9446,1,1,.89713,1.10208,.90088,.90088,.90088,.90088,.90088,.90088,.90088,.90088,.90088,.90989,.9358,.91945,.83181,.75261,.87992,.82976,.96034,.83689,.97268,1.0078,.90838,.83637,.8019,.90157,.80061,.9446,.95407,.92436,1.0258,.85022,.97153,1.0156,.95546,.89192,.92179,.92361,.87107,.96318,.89713,.93704,.95638,.91905,.91709,.92796,1.0258,.93704,.94836,1.0373,.95933,1.0078,.95871,.94836,.96174,.92601,.9498,.98607,.95776,.95933,1.05453,1.0078,.98275,.9314,.95617,.91701,1.05993,.9446,.78367,.9553,1,.86832,1.0128,.95871,.99394,.87548,.96361,.86774,1.0078,.95871,.9446,.95871,.86774,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.94083,.97579,.94083,.97579,.94083,.97579,.90406,.94039,.96694,1,.89903,1,1,1,.93582,.93582,.93582,1,.908,.908,.918,.94219,.94219,.96544,1,1.285,1,1,.81079,.81079,1,1,.74854,1,1,1,1,.99793,1,1,1,.65,1,1.36145,1,1,1,1,1,1,1,1,1,1,1,1.17173,1,.80535,.76169,1.02058,1.0732,1.05486,1,1,1.30692,1.08595,1.08595,1,1.08595,1.08595,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.16161,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],t.MyriadProBoldMetrics={lineHeight:1.2,lineGap:.2},t.MyriadProBoldItalicFactors=[1.36898,1,1,.66227,.80779,.81625,.97276,.97276,.97733,.92222,.83266,.94292,.94292,1.16148,1.02058,.93582,.96694,.93582,1.17337,.97276,.97276,.97276,.97276,.97276,.97276,.97276,.97276,.97276,.97276,.78076,.78076,1.02058,1.02058,1.02058,.71541,.76813,.85576,.80591,.80729,.94299,.77512,.83655,.86523,.92222,.98621,.71743,.81698,.79726,.98558,.92222,.90637,.83809,.90637,.80729,.76463,.86275,.90699,.91605,.9154,.85308,.85458,.90531,.94292,1.21296,.94292,1.02058,.89903,1.18616,.99613,.91677,.78216,.91677,.90083,.98796,.9135,.92168,.95381,.98981,.95298,.95381,.93459,.92168,.91513,.92004,.91677,.95077,.748,1.04502,.91677,.92061,.94236,.89544,.89364,.9,.80687,.8578,.80687,1.02058,.80779,.97276,.97276,.97276,.97276,.8578,.99973,1.18616,.91339,1.08074,.82891,1.02058,.55509,.71526,.89022,1.08595,1,1,1.18616,1,.96736,.93582,1.18616,1,1.04864,.82711,.99043,.99043,.99043,.71541,.85576,.85576,.85576,.85576,.85576,.85576,.845,.80729,.77512,.77512,.77512,.77512,.98621,.98621,.98621,.98621,.95961,.92222,.90637,.90637,.90637,.90637,.90637,1.02058,.90251,.90699,.90699,.90699,.90699,.85458,.83659,.94951,.99613,.99613,.99613,.99613,.99613,.99613,.85811,.78216,.90083,.90083,.90083,.90083,.95381,.95381,.95381,.95381,.9135,.92168,.91513,.91513,.91513,.91513,.91513,1.08595,.91677,.91677,.91677,.91677,.91677,.89364,.92332,.89364,.85576,.99613,.85576,.99613,.85576,.99613,.80729,.78216,.80729,.78216,.80729,.78216,.80729,.78216,.94299,.76783,.95961,.91677,.77512,.90083,.77512,.90083,.77512,.90083,.77512,.90083,.77512,.90083,.86523,.9135,.86523,.9135,.86523,.9135,1,1,.92222,.92168,.92222,.92168,.98621,.95381,.98621,.95381,.98621,.95381,.98621,.95381,.98621,.95381,.86036,.97096,.71743,.98981,1,1,.95298,.79726,.95381,1,1,.79726,.6894,.79726,.74321,.81691,1.0006,.92222,.92168,1,1,.92222,.92168,.79464,.92098,.92168,.90637,.91513,.90637,.91513,.90637,.91513,.909,.87514,.80729,.95077,1,1,.80729,.95077,.76463,.748,.76463,.748,1,1,.76463,.748,1,1,.86275,.72651,.86275,1.04502,.90699,.91677,.90699,.91677,.90699,.91677,.90699,.91677,.90699,.91677,.90699,.91677,.9154,.94236,.85458,.89364,.85458,.90531,.9,.90531,.9,.90531,.9,1,.97276,.85576,.99613,.845,.85811,.90251,.91677,1,1,.86275,1.04502,1.18616,1.18616,1.18616,1.18616,1.18616,1.18616,1.18616,1.18616,1.18616,1.00899,1.30628,.85576,.80178,.66862,.7927,.69323,.88127,.72459,.89711,.95381,.85576,.80591,.7805,.94729,.77512,.90531,.92222,.90637,.98621,.81698,.92655,.98558,.92222,.85359,.90637,.90976,.83809,.94523,.86275,.83509,.93157,.85308,.83392,.92346,.98621,.83509,.92886,.91324,.92168,.95381,.90646,.92886,.90557,.86847,.90276,.91324,.86842,.92168,.99531,.95381,.9224,.85408,.92699,.86847,1.0051,.91513,.80487,.93481,1,.88159,1.05214,.90646,.97355,.81539,.89398,.85923,.95381,.90646,.91513,.90646,.85923,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.9154,.94236,.9154,.94236,.9154,.94236,.85458,.89364,.96694,1,.89903,1,1,1,.91782,.91782,.91782,1,.896,.896,.896,.9332,.9332,.95973,1,1.26,1,1,.80479,.80178,1,1,.85633,1,1,1,1,.97276,1,1,1,.698,1,1.36145,1,1,1,1,1,1,1,1,1,1,1,1.14542,1,.79199,.78694,1.02058,1.03493,1.05486,1,1,1.23026,1.08595,1.08595,1,1.08595,1.08595,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.20006,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],t.MyriadProBoldItalicMetrics={lineHeight:1.2,lineGap:.2},t.MyriadProItalicFactors=[1.36898,1,1,.65507,.84943,.85639,.88465,.88465,.86936,.88307,.86948,.85283,.85283,1.06383,1.02058,.75945,.9219,.75945,1.17337,.88465,.88465,.88465,.88465,.88465,.88465,.88465,.88465,.88465,.88465,.75945,.75945,1.02058,1.02058,1.02058,.69046,.70926,.85158,.77812,.76852,.89591,.70466,.76125,.80094,.86822,.83864,.728,.77212,.79475,.93637,.87514,.8588,.76013,.8588,.72421,.69866,.77598,.85991,.80811,.87832,.78112,.77512,.8562,1.0222,1.18417,1.0222,1.27014,.89903,1.15012,.93859,.94399,.846,.94399,.81453,1.0186,.94219,.96017,1.03075,1.02175,.912,1.03075,.96998,.96017,.93859,.94399,.94399,.95493,.746,1.12658,.94578,.91,.979,.882,.882,.83,.85034,.83537,.85034,1.02058,.70869,.88465,.88465,.88465,.88465,.83537,.90083,1.15012,.9161,.94565,.73541,1.02058,.53609,.69353,.79519,1.08595,1,1,1.15012,1,.91974,.75945,1.15012,1,.9446,.73361,.9005,.9005,.9005,.62864,.85158,.85158,.85158,.85158,.85158,.85158,.773,.76852,.70466,.70466,.70466,.70466,.83864,.83864,.83864,.83864,.90561,.87514,.8588,.8588,.8588,.8588,.8588,1.02058,.85751,.85991,.85991,.85991,.85991,.77512,.76013,.88075,.93859,.93859,.93859,.93859,.93859,.93859,.8075,.846,.81453,.81453,.81453,.81453,.82424,.82424,.82424,.82424,.9278,.96017,.93859,.93859,.93859,.93859,.93859,1.08595,.8562,.94578,.94578,.94578,.94578,.882,.94578,.882,.85158,.93859,.85158,.93859,.85158,.93859,.76852,.846,.76852,.846,.76852,.846,.76852,.846,.89591,.8544,.90561,.94399,.70466,.81453,.70466,.81453,.70466,.81453,.70466,.81453,.70466,.81453,.80094,.94219,.80094,.94219,.80094,.94219,1,1,.86822,.96017,.86822,.96017,.83864,.82424,.83864,.82424,.83864,.82424,.83864,1.03075,.83864,.82424,.81402,1.02738,.728,1.02175,1,1,.912,.79475,1.03075,1,1,.79475,.83911,.79475,.66266,.80553,1.06676,.87514,.96017,1,1,.87514,.96017,.86865,.87396,.96017,.8588,.93859,.8588,.93859,.8588,.93859,.867,.84759,.72421,.95493,1,1,.72421,.95493,.69866,.746,.69866,.746,1,1,.69866,.746,1,1,.77598,.88417,.77598,1.12658,.85991,.94578,.85991,.94578,.85991,.94578,.85991,.94578,.85991,.94578,.85991,.94578,.87832,.979,.77512,.882,.77512,.8562,.83,.8562,.83,.8562,.83,1,.88465,.85158,.93859,.773,.8075,.85751,.8562,1,1,.77598,1.12658,1.15012,1.15012,1.15012,1.15012,1.15012,1.15313,1.15012,1.15012,1.15012,1.08106,1.03901,.85158,.77025,.62264,.7646,.65351,.86026,.69461,.89947,1.03075,.85158,.77812,.76449,.88836,.70466,.8562,.86822,.8588,.83864,.77212,.85308,.93637,.87514,.82352,.8588,.85701,.76013,.89058,.77598,.8156,.82565,.78112,.77899,.89386,.83864,.8156,.9486,.92388,.96186,1.03075,.91123,.9486,.93298,.878,.93942,.92388,.84596,.96186,.95119,1.03075,.922,.88787,.95829,.88,.93559,.93859,.78815,.93758,1,.89217,1.03737,.91123,.93969,.77487,.85769,.86799,1.03075,.91123,.93859,.91123,.86799,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.87832,.979,.87832,.979,.87832,.979,.77512,.882,.9219,1,.89903,1,1,1,.87321,.87321,.87321,1,1.027,1.027,1.027,.86847,.86847,.79121,1,1.124,1,1,.73572,.73572,1,1,.85034,1,1,1,1,.88465,1,1,1,.669,1,1.36145,1,1,1,1,1,1,1,1,1,1,1,1.04828,1,.74948,.75187,1.02058,.98391,1.02119,1,1,1.06233,1.08595,1.08595,1,1.08595,1.08595,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.05233,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],t.MyriadProItalicMetrics={lineHeight:1.2,lineGap:.2},t.MyriadProRegularFactors=[1.36898,1,1,.76305,.82784,.94935,.89364,.92241,.89073,.90706,.98472,.85283,.85283,1.0664,1.02058,.74505,.9219,.74505,1.23456,.92241,.92241,.92241,.92241,.92241,.92241,.92241,.92241,.92241,.92241,.74505,.74505,1.02058,1.02058,1.02058,.73002,.72601,.91755,.8126,.80314,.92222,.73764,.79726,.83051,.90284,.86023,.74,.8126,.84869,.96518,.91115,.8858,.79761,.8858,.74498,.73914,.81363,.89591,.83659,.89633,.85608,.8111,.90531,1.0222,1.22736,1.0222,1.27014,.89903,.90088,.86667,1.0231,.896,1.01411,.90083,1.05099,1.00512,.99793,1.05326,1.09377,.938,1.06226,1.00119,.99793,.98714,1.0231,1.01231,.98196,.792,1.19137,.99074,.962,1.01915,.926,.942,.856,.85034,.92006,.85034,1.02058,.69067,.92241,.92241,.92241,.92241,.92006,.9332,.90088,.91882,.93484,.75339,1.02058,.56866,.54324,.79519,1.08595,1,1,.90088,1,.95325,.74505,.90088,1,.97198,.75339,.91009,.91009,.91009,.66466,.91755,.91755,.91755,.91755,.91755,.91755,.788,.80314,.73764,.73764,.73764,.73764,.86023,.86023,.86023,.86023,.92915,.91115,.8858,.8858,.8858,.8858,.8858,1.02058,.8858,.89591,.89591,.89591,.89591,.8111,.79611,.89713,.86667,.86667,.86667,.86667,.86667,.86667,.86936,.896,.90083,.90083,.90083,.90083,.84224,.84224,.84224,.84224,.97276,.99793,.98714,.98714,.98714,.98714,.98714,1.08595,.89876,.99074,.99074,.99074,.99074,.942,1.0231,.942,.91755,.86667,.91755,.86667,.91755,.86667,.80314,.896,.80314,.896,.80314,.896,.80314,.896,.92222,.93372,.92915,1.01411,.73764,.90083,.73764,.90083,.73764,.90083,.73764,.90083,.73764,.90083,.83051,1.00512,.83051,1.00512,.83051,1.00512,1,1,.90284,.99793,.90976,.99793,.86023,.84224,.86023,.84224,.86023,.84224,.86023,1.05326,.86023,.84224,.82873,1.07469,.74,1.09377,1,1,.938,.84869,1.06226,1,1,.84869,.83704,.84869,.81441,.85588,1.08927,.91115,.99793,1,1,.91115,.99793,.91887,.90991,.99793,.8858,.98714,.8858,.98714,.8858,.98714,.894,.91434,.74498,.98196,1,1,.74498,.98196,.73914,.792,.73914,.792,1,1,.73914,.792,1,1,.81363,.904,.81363,1.19137,.89591,.99074,.89591,.99074,.89591,.99074,.89591,.99074,.89591,.99074,.89591,.99074,.89633,1.01915,.8111,.942,.8111,.90531,.856,.90531,.856,.90531,.856,1,.92241,.91755,.86667,.788,.86936,.8858,.89876,1,1,.81363,1.19137,.90088,.90088,.90088,.90088,.90088,.90088,.90088,.90088,.90088,.90388,1.03901,.92138,.78105,.7154,.86169,.80513,.94007,.82528,.98612,1.06226,.91755,.8126,.81884,.92819,.73764,.90531,.90284,.8858,.86023,.8126,.91172,.96518,.91115,.83089,.8858,.87791,.79761,.89297,.81363,.88157,.89992,.85608,.81992,.94307,.86023,.88157,.95308,.98699,.99793,1.06226,.95817,.95308,.97358,.928,.98088,.98699,.92761,.99793,.96017,1.06226,.986,.944,.95978,.938,.96705,.98714,.80442,.98972,1,.89762,1.04552,.95817,.99007,.87064,.91879,.88888,1.06226,.95817,.98714,.95817,.88888,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.89633,1.01915,.89633,1.01915,.89633,1.01915,.8111,.942,.9219,1,.89903,1,1,1,.93173,.93173,.93173,1,1.06304,1.06304,1.06904,.89903,.89903,.80549,1,1.156,1,1,.76575,.76575,1,1,.72458,1,1,1,1,.92241,1,1,1,.619,1,1.36145,1,1,1,1,1,1,1,1,1,1,1,1.07257,1,.74705,.71119,1.02058,1.024,1.02119,1,1,1.1536,1.08595,1.08595,1,1.08595,1.08595,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.05638,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],t.MyriadProRegularMetrics={lineHeight:1.2,lineGap:.2}},(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.SegoeuiRegularMetrics=t.SegoeuiRegularFactors=t.SegoeuiItalicMetrics=t.SegoeuiItalicFactors=t.SegoeuiBoldMetrics=t.SegoeuiBoldItalicMetrics=t.SegoeuiBoldItalicFactors=t.SegoeuiBoldFactors=void 0,t.SegoeuiBoldFactors=[1.76738,1,1,.99297,.9824,1.04016,1.06497,1.03424,.97529,1.17647,1.23203,1.1085,1.1085,1.16939,1.2107,.9754,1.21408,.9754,1.59578,1.03424,1.03424,1.03424,1.03424,1.03424,1.03424,1.03424,1.03424,1.03424,1.03424,.81378,.81378,1.2107,1.2107,1.2107,.71703,.97847,.97363,.88776,.8641,1.02096,.79795,.85132,.914,1.06085,1.1406,.8007,.89858,.83693,1.14889,1.09398,.97489,.92094,.97489,.90399,.84041,.95923,1.00135,1,1.06467,.98243,.90996,.99361,1.1085,1.56942,1.1085,1.2107,.74627,.94282,.96752,1.01519,.86304,1.01359,.97278,1.15103,1.01359,.98561,1.02285,1.02285,1.00527,1.02285,1.0302,.99041,1.0008,1.01519,1.01359,1.02258,.79104,1.16862,.99041,.97454,1.02511,.99298,.96752,.95801,.94856,1.16579,.94856,1.2107,.9824,1.03424,1.03424,1,1.03424,1.16579,.8727,1.3871,1.18622,1.10818,1.04478,1.2107,1.18622,.75155,.94994,1.28826,1.21408,1.21408,.91056,1,.91572,.9754,.64663,1.18328,1.24866,1.04478,1.14169,1.15749,1.17389,.71703,.97363,.97363,.97363,.97363,.97363,.97363,.93506,.8641,.79795,.79795,.79795,.79795,1.1406,1.1406,1.1406,1.1406,1.02096,1.09398,.97426,.97426,.97426,.97426,.97426,1.2107,.97489,1.00135,1.00135,1.00135,1.00135,.90996,.92094,1.02798,.96752,.96752,.96752,.96752,.96752,.96752,.93136,.86304,.97278,.97278,.97278,.97278,1.02285,1.02285,1.02285,1.02285,.97122,.99041,1,1,1,1,1,1.28826,1.0008,.99041,.99041,.99041,.99041,.96752,1.01519,.96752,.97363,.96752,.97363,.96752,.97363,.96752,.8641,.86304,.8641,.86304,.8641,.86304,.8641,.86304,1.02096,1.03057,1.02096,1.03517,.79795,.97278,.79795,.97278,.79795,.97278,.79795,.97278,.79795,.97278,.914,1.01359,.914,1.01359,.914,1.01359,1,1,1.06085,.98561,1.06085,1.00879,1.1406,1.02285,1.1406,1.02285,1.1406,1.02285,1.1406,1.02285,1.1406,1.02285,.97138,1.08692,.8007,1.02285,1,1,1.00527,.83693,1.02285,1,1,.83693,.9455,.83693,.90418,.83693,1.13005,1.09398,.99041,1,1,1.09398,.99041,.96692,1.09251,.99041,.97489,1.0008,.97489,1.0008,.97489,1.0008,.93994,.97931,.90399,1.02258,1,1,.90399,1.02258,.84041,.79104,.84041,.79104,.84041,.79104,.84041,.79104,1,1,.95923,1.07034,.95923,1.16862,1.00135,.99041,1.00135,.99041,1.00135,.99041,1.00135,.99041,1.00135,.99041,1.00135,.99041,1.06467,1.02511,.90996,.96752,.90996,.99361,.95801,.99361,.95801,.99361,.95801,1.07733,1.03424,.97363,.96752,.93506,.93136,.97489,1.0008,1,1,.95923,1.16862,1.15103,1.15103,1.01173,1.03959,.75953,.81378,.79912,1.15103,1.21994,.95161,.87815,1.01149,.81525,.7676,.98167,1.01134,1.02546,.84097,1.03089,1.18102,.97363,.88776,.85134,.97826,.79795,.99361,1.06085,.97489,1.1406,.89858,1.0388,1.14889,1.09398,.86039,.97489,1.0595,.92094,.94793,.95923,.90996,.99346,.98243,1.02112,.95493,1.1406,.90996,1.03574,1.02597,1.0008,1.18102,1.06628,1.03574,1.0192,1.01932,1.00886,.97531,1.0106,1.0008,1.13189,1.18102,1.02277,.98683,1.0016,.99561,1.07237,1.0008,.90434,.99921,.93803,.8965,1.23085,1.06628,1.04983,.96268,1.0499,.98439,1.18102,1.06628,1.0008,1.06628,.98439,.79795,1,1,1,1,1,1,1,1,1,1,1,1,1.09466,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.97278,1,1,1,1,1,1,1,1,1,1,1,1,1.02065,1,1,1,1,1,1,1.06467,1.02511,1.06467,1.02511,1.06467,1.02511,.90996,.96752,1,1.21408,.89903,1,1,.75155,1.04394,1.04394,1.04394,1.04394,.98633,.98633,.98633,.73047,.73047,1.20642,.91211,1.25635,1.222,1.02956,1.03372,1.03372,.96039,1.24633,1,1.12454,.93503,1.03424,1.19687,1.03424,1,1,1,.771,1,1,1.15749,1.15749,1.15749,1.10948,.86279,.94434,.86279,.94434,.86182,1,1,1.16897,1,.96085,.90137,1.2107,1.18416,1.13973,.69825,.9716,2.10339,1.29004,1.29004,1.21172,1.29004,1.29004,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.42603,1,.99862,.99862,1,.87025,.87025,.87025,.87025,1.18874,1.42603,1,1.42603,1.42603,.99862,1,1,1,1,1,1.2886,1.04315,1.15296,1.34163,1,1,1,1.09193,1.09193,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],t.SegoeuiBoldMetrics={lineHeight:1.33008,lineGap:0},t.SegoeuiBoldItalicFactors=[1.76738,1,1,.98946,1.03959,1.04016,1.02809,1.036,.97639,1.10953,1.23203,1.11144,1.11144,1.16939,1.21237,.9754,1.21261,.9754,1.59754,1.036,1.036,1.036,1.036,1.036,1.036,1.036,1.036,1.036,1.036,.81378,.81378,1.21237,1.21237,1.21237,.73541,.97847,.97363,.89723,.87897,1.0426,.79429,.85292,.91149,1.05815,1.1406,.79631,.90128,.83853,1.04396,1.10615,.97552,.94436,.97552,.88641,.80527,.96083,1.00135,1,1.06777,.9817,.91142,.99361,1.11144,1.57293,1.11144,1.21237,.74627,1.31818,1.06585,.97042,.83055,.97042,.93503,1.1261,.97042,.97922,1.14236,.94552,1.01054,1.14236,1.02471,.97922,.94165,.97042,.97042,1.0276,.78929,1.1261,.97922,.95874,1.02197,.98507,.96752,.97168,.95107,1.16579,.95107,1.21237,1.03959,1.036,1.036,1,1.036,1.16579,.87357,1.31818,1.18754,1.26781,1.05356,1.21237,1.18622,.79487,.94994,1.29004,1.24047,1.24047,1.31818,1,.91484,.9754,1.31818,1.1349,1.24866,1.05356,1.13934,1.15574,1.17389,.73541,.97363,.97363,.97363,.97363,.97363,.97363,.94385,.87897,.79429,.79429,.79429,.79429,1.1406,1.1406,1.1406,1.1406,1.0426,1.10615,.97552,.97552,.97552,.97552,.97552,1.21237,.97552,1.00135,1.00135,1.00135,1.00135,.91142,.94436,.98721,1.06585,1.06585,1.06585,1.06585,1.06585,1.06585,.96705,.83055,.93503,.93503,.93503,.93503,1.14236,1.14236,1.14236,1.14236,.93125,.97922,.94165,.94165,.94165,.94165,.94165,1.29004,.94165,.97922,.97922,.97922,.97922,.96752,.97042,.96752,.97363,1.06585,.97363,1.06585,.97363,1.06585,.87897,.83055,.87897,.83055,.87897,.83055,.87897,.83055,1.0426,1.0033,1.0426,.97042,.79429,.93503,.79429,.93503,.79429,.93503,.79429,.93503,.79429,.93503,.91149,.97042,.91149,.97042,.91149,.97042,1,1,1.05815,.97922,1.05815,.97922,1.1406,1.14236,1.1406,1.14236,1.1406,1.14236,1.1406,1.14236,1.1406,1.14236,.97441,1.04302,.79631,1.01582,1,1,1.01054,.83853,1.14236,1,1,.83853,1.09125,.83853,.90418,.83853,1.19508,1.10615,.97922,1,1,1.10615,.97922,1.01034,1.10466,.97922,.97552,.94165,.97552,.94165,.97552,.94165,.91602,.91981,.88641,1.0276,1,1,.88641,1.0276,.80527,.78929,.80527,.78929,.80527,.78929,.80527,.78929,1,1,.96083,1.05403,.95923,1.16862,1.00135,.97922,1.00135,.97922,1.00135,.97922,1.00135,.97922,1.00135,.97922,1.00135,.97922,1.06777,1.02197,.91142,.96752,.91142,.99361,.97168,.99361,.97168,.99361,.97168,1.23199,1.036,.97363,1.06585,.94385,.96705,.97552,.94165,1,1,.96083,1.1261,1.31818,1.31818,1.31818,1.31818,1.31818,1.31818,1.31818,1.31818,1.31818,.95161,1.27126,1.00811,.83284,.77702,.99137,.95253,1.0347,.86142,1.07205,1.14236,.97363,.89723,.86869,1.09818,.79429,.99361,1.05815,.97552,1.1406,.90128,1.06662,1.04396,1.10615,.84918,.97552,1.04694,.94436,.98015,.96083,.91142,1.00356,.9817,1.01945,.98999,1.1406,.91142,1.04961,.9898,1.00639,1.14236,1.07514,1.04961,.99607,1.02897,1.008,.9898,.95134,1.00639,1.11121,1.14236,1.00518,.97981,1.02186,1,1.08578,.94165,.99314,.98387,.93028,.93377,1.35125,1.07514,1.10687,.93491,1.04232,1.00351,1.14236,1.07514,.94165,1.07514,1.00351,.79429,1,1,1,1,1,1,1,1,1,1,1,1,1.09097,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.93503,1,1,1,1,1,1,1,1,1,1,1,1,.96609,1,1,1,1,1,1,1.06777,1.02197,1.06777,1.02197,1.06777,1.02197,.91142,.96752,1,1.21261,.89903,1,1,.75155,1.04745,1.04745,1.04745,1.04394,.98633,.98633,.98633,.72959,.72959,1.20502,.91406,1.26514,1.222,1.02956,1.03372,1.03372,.96039,1.24633,1,1.09125,.93327,1.03336,1.16541,1.036,1,1,1,.771,1,1,1.15574,1.15574,1.15574,1.15574,.86364,.94434,.86279,.94434,.86224,1,1,1.16798,1,.96085,.90068,1.21237,1.18416,1.13904,.69825,.9716,2.10339,1.29004,1.29004,1.21339,1.29004,1.29004,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.42603,1,.99862,.99862,1,.87025,.87025,.87025,.87025,1.18775,1.42603,1,1.42603,1.42603,.99862,1,1,1,1,1,1.2886,1.04315,1.15296,1.34163,1,1,1,1.13269,1.13269,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],t.SegoeuiBoldItalicMetrics={lineHeight:1.33008,lineGap:0},t.SegoeuiItalicFactors=[1.76738,1,1,.98946,1.14763,1.05365,1.06234,.96927,.92586,1.15373,1.18414,.91349,.91349,1.07403,1.17308,.78383,1.20088,.78383,1.42531,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.78383,.78383,1.17308,1.17308,1.17308,.77349,.94565,.94729,.85944,.88506,.9858,.74817,.80016,.88449,.98039,.95782,.69238,.89898,.83231,.98183,1.03989,.96924,.86237,.96924,.80595,.74524,.86091,.95402,.94143,.98448,.8858,.83089,.93285,1.0949,1.39016,1.0949,1.45994,.74627,1.04839,.97454,.97454,.87207,.97454,.87533,1.06151,.97454,1.00176,1.16484,1.08132,.98047,1.16484,1.02989,1.01054,.96225,.97454,.97454,1.06598,.79004,1.16344,1.00351,.94629,.9973,.91016,.96777,.9043,.91082,.92481,.91082,1.17308,.95748,.96927,.96927,1,.96927,.92481,.80597,1.04839,1.23393,1.1781,.9245,1.17308,1.20808,.63218,.94261,1.24822,1.09971,1.09971,1.04839,1,.85273,.78032,1.04839,1.09971,1.22326,.9245,1.09836,1.13525,1.15222,.70424,.94729,.94729,.94729,.94729,.94729,.94729,.85498,.88506,.74817,.74817,.74817,.74817,.95782,.95782,.95782,.95782,.9858,1.03989,.96924,.96924,.96924,.96924,.96924,1.17308,.96924,.95402,.95402,.95402,.95402,.83089,.86237,.88409,.97454,.97454,.97454,.97454,.97454,.97454,.92916,.87207,.87533,.87533,.87533,.87533,.93146,.93146,.93146,.93146,.93854,1.01054,.96225,.96225,.96225,.96225,.96225,1.24822,.8761,1.00351,1.00351,1.00351,1.00351,.96777,.97454,.96777,.94729,.97454,.94729,.97454,.94729,.97454,.88506,.87207,.88506,.87207,.88506,.87207,.88506,.87207,.9858,.95391,.9858,.97454,.74817,.87533,.74817,.87533,.74817,.87533,.74817,.87533,.74817,.87533,.88449,.97454,.88449,.97454,.88449,.97454,1,1,.98039,1.00176,.98039,1.00176,.95782,.93146,.95782,.93146,.95782,.93146,.95782,1.16484,.95782,.93146,.84421,1.12761,.69238,1.08132,1,1,.98047,.83231,1.16484,1,1,.84723,1.04861,.84723,.78755,.83231,1.23736,1.03989,1.01054,1,1,1.03989,1.01054,.9857,1.03849,1.01054,.96924,.96225,.96924,.96225,.96924,.96225,.92383,.90171,.80595,1.06598,1,1,.80595,1.06598,.74524,.79004,.74524,.79004,.74524,.79004,.74524,.79004,1,1,.86091,1.02759,.85771,1.16344,.95402,1.00351,.95402,1.00351,.95402,1.00351,.95402,1.00351,.95402,1.00351,.95402,1.00351,.98448,.9973,.83089,.96777,.83089,.93285,.9043,.93285,.9043,.93285,.9043,1.31868,.96927,.94729,.97454,.85498,.92916,.96924,.8761,1,1,.86091,1.16344,1.04839,1.04839,1.04839,1.04839,1.04839,1.04839,1.04839,1.04839,1.04839,.81965,.81965,.94729,.78032,.71022,.90883,.84171,.99877,.77596,1.05734,1.2,.94729,.85944,.82791,.9607,.74817,.93285,.98039,.96924,.95782,.89898,.98316,.98183,1.03989,.78614,.96924,.97642,.86237,.86075,.86091,.83089,.90082,.8858,.97296,1.01284,.95782,.83089,1.0976,1.04,1.03342,1.2,1.0675,1.0976,.98205,1.03809,1.05097,1.04,.95364,1.03342,1.05401,1.2,1.02148,1.0119,1.04724,1.0127,1.02732,.96225,.8965,.97783,.93574,.94818,1.30679,1.0675,1.11826,.99821,1.0557,1.0326,1.2,1.0675,.96225,1.0675,1.0326,.74817,1,1,1,1,1,1,1,1,1,1,1,1,1.03754,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.87533,1,1,1,1,1,1,1,1,1,1,1,1,.98705,1,1,1,1,1,1,.98448,.9973,.98448,.9973,.98448,.9973,.83089,.96777,1,1.20088,.89903,1,1,.75155,.94945,.94945,.94945,.94945,1.12317,1.12317,1.12317,.67603,.67603,1.15621,.73584,1.21191,1.22135,1.06483,.94868,.94868,.95996,1.24633,1,1.07497,.87709,.96927,1.01473,.96927,1,1,1,.77295,1,1,1.09836,1.09836,1.09836,1.01522,.86321,.94434,.8649,.94434,.86182,1,1,1.083,1,.91578,.86438,1.17308,1.18416,1.14589,.69825,.97622,1.96791,1.24822,1.24822,1.17308,1.24822,1.24822,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.42603,1,.99862,.99862,1,.87025,.87025,.87025,.87025,1.17984,1.42603,1,1.42603,1.42603,.99862,1,1,1,1,1,1.2886,1.04315,1.15296,1.34163,1,1,1,1.10742,1.10742,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],t.SegoeuiItalicMetrics={lineHeight:1.33008,lineGap:0},t.SegoeuiRegularFactors=[1.76738,1,1,.98594,1.02285,1.10454,1.06234,.96927,.92037,1.19985,1.2046,.90616,.90616,1.07152,1.1714,.78032,1.20088,.78032,1.40246,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.96927,.78032,.78032,1.1714,1.1714,1.1714,.80597,.94084,.96706,.85944,.85734,.97093,.75842,.79936,.88198,.9831,.95782,.71387,.86969,.84636,1.07796,1.03584,.96924,.83968,.96924,.82826,.79649,.85771,.95132,.93119,.98965,.88433,.8287,.93365,1.08612,1.3638,1.08612,1.45786,.74627,.80499,.91484,1.05707,.92383,1.05882,.9403,1.12654,1.05882,1.01756,1.09011,1.09011,.99414,1.09011,1.034,1.01756,1.05356,1.05707,1.05882,1.04399,.84863,1.21968,1.01756,.95801,1.00068,.91797,.96777,.9043,.90351,.92105,.90351,1.1714,.85337,.96927,.96927,.99912,.96927,.92105,.80597,1.2434,1.20808,1.05937,.90957,1.1714,1.20808,.75155,.94261,1.24644,1.09971,1.09971,.84751,1,.85273,.78032,.61584,1.05425,1.17914,.90957,1.08665,1.11593,1.14169,.73381,.96706,.96706,.96706,.96706,.96706,.96706,.86035,.85734,.75842,.75842,.75842,.75842,.95782,.95782,.95782,.95782,.97093,1.03584,.96924,.96924,.96924,.96924,.96924,1.1714,.96924,.95132,.95132,.95132,.95132,.8287,.83968,.89049,.91484,.91484,.91484,.91484,.91484,.91484,.93575,.92383,.9403,.9403,.9403,.9403,.8717,.8717,.8717,.8717,1.00527,1.01756,1.05356,1.05356,1.05356,1.05356,1.05356,1.24644,.95923,1.01756,1.01756,1.01756,1.01756,.96777,1.05707,.96777,.96706,.91484,.96706,.91484,.96706,.91484,.85734,.92383,.85734,.92383,.85734,.92383,.85734,.92383,.97093,1.0969,.97093,1.05882,.75842,.9403,.75842,.9403,.75842,.9403,.75842,.9403,.75842,.9403,.88198,1.05882,.88198,1.05882,.88198,1.05882,1,1,.9831,1.01756,.9831,1.01756,.95782,.8717,.95782,.8717,.95782,.8717,.95782,1.09011,.95782,.8717,.84784,1.11551,.71387,1.09011,1,1,.99414,.84636,1.09011,1,1,.84636,1.0536,.84636,.94298,.84636,1.23297,1.03584,1.01756,1,1,1.03584,1.01756,1.00323,1.03444,1.01756,.96924,1.05356,.96924,1.05356,.96924,1.05356,.93066,.98293,.82826,1.04399,1,1,.82826,1.04399,.79649,.84863,.79649,.84863,.79649,.84863,.79649,.84863,1,1,.85771,1.17318,.85771,1.21968,.95132,1.01756,.95132,1.01756,.95132,1.01756,.95132,1.01756,.95132,1.01756,.95132,1.01756,.98965,1.00068,.8287,.96777,.8287,.93365,.9043,.93365,.9043,.93365,.9043,1.08571,.96927,.96706,.91484,.86035,.93575,.96924,.95923,1,1,.85771,1.21968,1.11437,1.11437,.93109,.91202,.60411,.84164,.55572,1.01173,.97361,.81818,.81818,.96635,.78032,.72727,.92366,.98601,1.03405,.77968,1.09799,1.2,.96706,.85944,.85638,.96491,.75842,.93365,.9831,.96924,.95782,.86969,.94152,1.07796,1.03584,.78437,.96924,.98715,.83968,.83491,.85771,.8287,.94492,.88433,.9287,1.0098,.95782,.8287,1.0625,.98248,1.03424,1.2,1.01071,1.0625,.95246,1.03809,1.04912,.98248,1.00221,1.03424,1.05443,1.2,1.04785,.99609,1.00169,1.05176,.99346,1.05356,.9087,1.03004,.95542,.93117,1.23362,1.01071,1.07831,1.02512,1.05205,1.03502,1.2,1.01071,1.05356,1.01071,1.03502,.75842,1,1,1,1,1,1,1,1,1,1,1,1,1.03719,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,.9403,1,1,1,1,1,1,1,1,1,1,1,1,1.04021,1,1,1,1,1,1,.98965,1.00068,.98965,1.00068,.98965,1.00068,.8287,.96777,1,1.20088,.89903,1,1,.75155,1.03077,1.03077,1.03077,1.03077,1.13196,1.13196,1.13196,.67428,.67428,1.16039,.73291,1.20996,1.22135,1.06483,.94868,.94868,.95996,1.24633,1,1.07497,.87796,.96927,1.01518,.96927,1,1,1,.77295,1,1,1.10539,1.10539,1.11358,1.06967,.86279,.94434,.86279,.94434,.86182,1,1,1.083,1,.91578,.86507,1.1714,1.18416,1.14589,.69825,.97622,1.9697,1.24822,1.24822,1.17238,1.24822,1.24822,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1.42603,1,.99862,.99862,1,.87025,.87025,.87025,.87025,1.18083,1.42603,1,1.42603,1.42603,.99862,1,1,1,1,1,1.2886,1.04315,1.15296,1.34163,1,1,1,1.10938,1.10938,1,1,1,1.05425,1.09971,1.09971,1.09971,1,1,1,1,1,1,1,1,1,1,1],t.SegoeuiRegularMetrics={lineHeight:1.33008,lineGap:0}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.PostScriptEvaluator=t.PostScriptCompiler=t.PDFFunctionFactory=void 0,t.isPDFFunction=function(e){let t;if(e instanceof n.Dict)t=e;else{if(!(e instanceof o.BaseStream))return!1;t=e.dict}return t.has("FunctionType")},r(2),r(139),r(84),r(93),r(94),r(97),r(99),r(101),r(105),r(108),r(115),r(159);var n=r(150),a=r(144),s=r(208),o=r(151),c=r(209);function l(e){if(!Array.isArray(e))return null;const t=e.length;for(let r=0;r>c)*h,l&=(1<r?e=r:e0&&(d=o[u-1]);let f=i[1];u>1,g=o.length>>1,p=new d(u),m=Object.create(null);let b=8192;const y=new Float32Array(g);return function(e,t,r,n){let a,i,s="";const o=y;for(a=0;ae&&(i=e)),h[a]=i}b>0&&(b--,m[s]=h),r.set(h,n)}}}class u{constructor(e){this.stack=e?Array.from(e):[]}push(e){if(this.stack.length>=u.MAX_STACK_SIZE)throw new Error("PostScript function stack overflow.");this.stack.push(e)}pop(){if(this.stack.length<=0)throw new Error("PostScript function stack underflow.");return this.stack.pop()}copy(e){if(this.stack.length+e>=u.MAX_STACK_SIZE)throw new Error("PostScript function stack overflow.");const t=this.stack;for(let r=t.length-e,n=e-1;n>=0;n--,r++)t.push(t[r])}index(e){this.push(this.stack[this.stack.length-e-1])}roll(e,t){const r=this.stack,n=r.length-e,a=r.length-1,i=n+(t-Math.floor(t/e)*e);for(let e=n,t=a;e0?t.push(o<>c);break;case"ceiling":o=t.pop(),t.push(Math.ceil(o));break;case"copy":o=t.pop(),t.copy(o);break;case"cos":o=t.pop(),t.push(Math.cos(o%360/180*Math.PI));break;case"cvi":o=0|t.pop(),t.push(o);break;case"cvr":break;case"div":c=t.pop(),o=t.pop(),t.push(o/c);break;case"dup":t.copy(1);break;case"eq":c=t.pop(),o=t.pop(),t.push(o===c);break;case"exch":t.roll(2,1);break;case"exp":c=t.pop(),o=t.pop(),t.push(o**c);break;case"false":t.push(!1);break;case"floor":o=t.pop(),t.push(Math.floor(o));break;case"ge":c=t.pop(),o=t.pop(),t.push(o>=c);break;case"gt":c=t.pop(),o=t.pop(),t.push(o>c);break;case"idiv":c=t.pop(),o=t.pop(),t.push(o/c|0);break;case"index":o=t.pop(),t.index(o);break;case"le":c=t.pop(),o=t.pop(),t.push(o<=c);break;case"ln":o=t.pop(),t.push(Math.log(o));break;case"log":o=t.pop(),t.push(Math.log10(o));break;case"lt":c=t.pop(),o=t.pop(),t.push(o=t?new p(t):e.max<=t?e:new b(e,t)}class C{compile(e,t,r){const n=[],a=[],i=t.length>>1,s=r.length>>1;let o,c,l,h,u,d,f,m,b=0;for(let e=0;et.min&&(o.unshift("Math.max(",i,", "),o.push(")")),s{Object.defineProperty(t,"__esModule",{value:!0}),t.PostScriptParser=t.PostScriptLexer=void 0,r(139);var n=r(144),a=r(150),i=r(149);t.PostScriptParser=class{constructor(e){this.lexer=e,this.operators=[],this.token=null,this.prev=null}nextToken(){this.prev=this.token,this.token=this.lexer.getToken()}accept(e){return this.token.type===e&&(this.nextToken(),!0)}expect(e){if(this.accept(e))return!0;throw new n.FormatError("Unexpected symbol: found ".concat(this.token.type," expected ").concat(e,"."))}parse(){return this.nextToken(),this.expect(s.LBRACE),this.parseBlock(),this.expect(s.RBRACE),this.operators}parseBlock(){for(;;)if(this.accept(s.NUMBER))this.operators.push(this.prev.value);else if(this.accept(s.OPERATOR))this.operators.push(this.prev.value);else{if(!this.accept(s.LBRACE))return;this.parseCondition()}}parseCondition(){const e=this.operators.length;if(this.operators.push(null,null),this.parseBlock(),this.expect(s.RBRACE),this.accept(s.IF))this.operators[e]=this.operators.length,this.operators[e+1]="jz";else{if(!this.accept(s.LBRACE))throw new n.FormatError("PS Function: error parsing conditional.");{const t=this.operators.length;this.operators.push(null,null);const r=this.operators.length;this.parseBlock(),this.expect(s.RBRACE),this.expect(s.IFELSE),this.operators[t]=this.operators.length,this.operators[t+1]="j",this.operators[e]=r,this.operators[e+1]="jz"}}}};const s={LBRACE:0,RBRACE:1,NUMBER:2,OPERATOR:3,IF:4,IFELSE:5};class o{static get opCache(){return(0,n.shadow)(this,"opCache",Object.create(null))}constructor(e,t){this.type=e,this.value=t}static getOperator(e){var t;return(t=o.opCache)[e]||(t[e]=new o(s.OPERATOR,e))}static get LBRACE(){return(0,n.shadow)(this,"LBRACE",new o(s.LBRACE,"{"))}static get RBRACE(){return(0,n.shadow)(this,"RBRACE",new o(s.RBRACE,"}"))}static get IF(){return(0,n.shadow)(this,"IF",new o(s.IF,"IF"))}static get IFELSE(){return(0,n.shadow)(this,"IFELSE",new o(s.IFELSE,"IFELSE"))}}t.PostScriptLexer=class{constructor(e){this.stream=e,this.nextChar(),this.strBuf=[]}nextChar(){return this.currentChar=this.stream.getByte()}getToken(){let e=!1,t=this.currentChar;for(;;){if(t<0)return a.EOF;if(e)10!==t&&13!==t||(e=!1);else if(37===t)e=!0;else if(!(0,i.isWhiteSpace)(t))break;t=this.nextChar()}switch(0|t){case 48:case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 43:case 45:case 46:return new o(s.NUMBER,this.getNumber());case 123:return this.nextChar(),o.LBRACE;case 125:return this.nextChar(),o.RBRACE}const r=this.strBuf;for(r.length=0,r[0]=String.fromCharCode(t);(t=this.nextChar())>=0&&(t>=65&&t<=90||t>=97&&t<=122);)r.push(String.fromCharCode(t));const n=r.join("");switch(n.toLowerCase()){case"if":return o.IF;case"ifelse":return o.IFELSE;default:return o.getOperator(n)}}getNumber(){let e=this.currentChar;const t=this.strBuf;for(t.length=0,t[0]=String.fromCharCode(e);(e=this.nextChar())>=0&&(e>=48&&e<=57||45===e||46===e);)t.push(String.fromCharCode(e));const r=parseFloat(t.join(""));if(isNaN(r))throw new n.FormatError("Invalid floating point number: ".concat(r));return r}}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.RegionalImageCache=t.LocalTilingPatternCache=t.LocalImageCache=t.LocalGStateCache=t.LocalFunctionCache=t.LocalColorSpaceCache=t.GlobalImageCache=void 0,r(2),r(116),r(126),r(128),r(131),r(133),r(135),r(137);var n=r(144),a=r(150);class s{constructor(e){this.constructor===s&&(0,n.unreachable)("Cannot initialize BaseLocalCache."),this._onlyRefs=!0===(null==e?void 0:e.onlyRefs),this._onlyRefs||(this._nameRefMap=new Map,this._imageMap=new Map),this._imageCache=new a.RefSetCache}getByName(e){this._onlyRefs&&(0,n.unreachable)("Should not call \`getByName\` method.");const t=this._nameRefMap.get(e);return t?this.getByRef(t):this._imageMap.get(e)||null}getByRef(e){return this._imageCache.get(e)||null}set(e,t,r){(0,n.unreachable)("Abstract method \`set\` called.")}}t.LocalImageCache=class extends s{set(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=arguments.length>2?arguments[2]:void 0;if("string"!=typeof e)throw new Error('LocalImageCache.set - expected "name" argument.');if(t){if(this._imageCache.has(t))return;this._nameRefMap.set(e,t),this._imageCache.put(t,r)}else this._imageMap.has(e)||this._imageMap.set(e,r)}},t.LocalColorSpaceCache=class extends s{set(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=arguments.length>2?arguments[2]:void 0;if("string"!=typeof e&&!t)throw new Error('LocalColorSpaceCache.set - expected "name" and/or "ref" argument.');if(t){if(this._imageCache.has(t))return;null!==e&&this._nameRefMap.set(e,t),this._imageCache.put(t,r)}else this._imageMap.has(e)||this._imageMap.set(e,r)}},t.LocalFunctionCache=class extends s{constructor(e){super({onlyRefs:!0})}set(){let e=arguments.length>1?arguments[1]:void 0,t=arguments.length>2?arguments[2]:void 0;if(!e)throw new Error('LocalFunctionCache.set - expected "ref" argument.');this._imageCache.has(e)||this._imageCache.put(e,t)}},t.LocalGStateCache=class extends s{set(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,r=arguments.length>2?arguments[2]:void 0;if("string"!=typeof e)throw new Error('LocalGStateCache.set - expected "name" argument.');if(t){if(this._imageCache.has(t))return;this._nameRefMap.set(e,t),this._imageCache.put(t,r)}else this._imageMap.has(e)||this._imageMap.set(e,r)}},t.LocalTilingPatternCache=class extends s{constructor(e){super({onlyRefs:!0})}set(){let e=arguments.length>1?arguments[1]:void 0,t=arguments.length>2?arguments[2]:void 0;if(!e)throw new Error('LocalTilingPatternCache.set - expected "ref" argument.');this._imageCache.has(e)||this._imageCache.put(e,t)}},t.RegionalImageCache=class extends s{constructor(e){super({onlyRefs:!0})}set(){let e=arguments.length>1?arguments[1]:void 0,t=arguments.length>2?arguments[2]:void 0;if(!e)throw new Error('RegionalImageCache.set - expected "ref" argument.');this._imageCache.has(e)||this._imageCache.put(e,t)}};class o{constructor(){this._refCache=new a.RefSetCache,this._imageCache=new a.RefSetCache}get _byteSize(){let e=0;for(const t of this._imageCache)e+=t.byteSize;return e}get _cacheLimitReached(){return!(this._imageCache.size0&&void 0!==arguments[0]&&arguments[0]||this._refCache.clear(),this._imageCache.clear()}}i(o,"NUM_PAGES_THRESHOLD",2),i(o,"MIN_IMAGES_TO_CACHE",10),i(o,"MAX_BYTE_SIZE",5*n.MAX_IMAGE_SIZE_TO_CACHE),t.GlobalImageCache=o},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.bidi=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:-1,r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],g=!0;const p=e.length;if(0===p||r)return u(e,g,r);d.length=p,f.length=p;let m,b,y=0;for(m=0;m4?(g=!0,t=0):(g=!1,t=1));const w=[];for(m=0;m=0&&"ET"===f[e];--e)f[e]="EN";for(let e=m+1;e0&&(t=f[m-1]);let r=S;e+1C&&s(C)&&(F=C);for(C=O;C>=F;--C){let e=-1;for(m=0,b=w.length;m=0&&(h(d,e,m),e=-1):e<0&&(e=m);e>=0&&h(d,e,w.length)}for(m=0,b=d.length;m"!==e||(d[m]="")}return u(d.join(""),g)};var n=r(144);const a=["BN","BN","BN","BN","BN","BN","BN","BN","BN","S","B","S","WS","B","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","B","B","B","S","WS","ON","ON","ET","ET","ET","ON","ON","ON","ON","ON","ES","CS","ES","CS","CS","EN","EN","EN","EN","EN","EN","EN","EN","EN","EN","CS","ON","ON","ON","ON","ON","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","ON","ON","ON","ON","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","ON","ON","ON","BN","BN","BN","BN","BN","BN","B","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","BN","CS","ON","ET","ET","ET","ET","ON","ON","ON","ON","L","ON","ON","BN","ON","ON","ET","ET","EN","EN","ON","L","ON","ON","ON","EN","L","ON","ON","ON","ON","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","L","ON","L","L","L","L","L","L","L","L"],i=["AN","AN","AN","AN","AN","AN","ON","ON","AL","ET","ET","AL","CS","AL","ON","ON","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","AL","AL","","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","NSM","AN","AN","AN","AN","AN","AN","AN","AN","AN","AN","ET","AN","AN","AL","AL","AL","NSM","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","AL","NSM","NSM","NSM","NSM","NSM","NSM","NSM","AN","ON","NSM","NSM","NSM","NSM","NSM","NSM","AL","AL","NSM","NSM","ON","NSM","NSM","NSM","NSM","AL","AL","EN","EN","EN","EN","EN","EN","EN","EN","EN","EN","AL","AL","AL","AL","AL","AL"];function s(e){return 0!=(1&e)}function o(e){return 0==(1&e)}function c(e,t,r){let n,a;for(n=t,a=e.length;n2&&void 0!==arguments[2]&&arguments[2]?r="ttb":t||(r="rtl"),{str:e,dir:r}}const d=[],f=[]},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getFontSubstitution=function(e,t,r,d,f){const g=d=(0,n.normalizeFontName)(d);let p=e.get(g);if(p)return p;let m=l.get(d);if(!m)for(const[e,t]of h)if(d.startsWith(e)){d="".concat(t).concat(d.substring(e.length)),m=l.get(d);break}let b=!1;m||(m=l.get(f),b=!0);const y="".concat(t.getDocId(),"_s").concat(t.createFontId());if(!m){if(!(0,a.validateFontName)(d))return e.set(g,null),null;const t=/bold/gi.test(d),r=/oblique|italic/gi.test(d);return p={css:y,guessFallback:!0,loadedName:y,baseFontName:d,src:"local(".concat(d,")"),style:t&&r&&c||t&&s||r&&o||i},e.set(g,p),p}const w=[];b&&(0,a.validateFontName)(d)&&w.push("local(".concat(d,")"));const{style:v,ultimate:x}=u(m,w,r),S=null===x;return p={css:"".concat(y).concat(S?"":",".concat(x)),guessFallback:S,loadedName:y,baseFontName:d,src:w.join(","),style:v},e.set(g,p),p},r(139);var n=r(188),a=r(149);const i={style:"normal",weight:"normal"},s={style:"normal",weight:"bold"},o={style:"italic",weight:"normal"},c={style:"italic",weight:"bold"},l=new Map([["Times-Roman",{local:["Times New Roman","Times-Roman","Times","Liberation Serif","Nimbus Roman","Nimbus Roman L","Tinos","Thorndale","TeX Gyre Termes","FreeSerif","DejaVu Serif","Bitstream Vera Serif","Ubuntu"],style:i,ultimate:"serif"}],["Times-Bold",{alias:"Times-Roman",style:s,ultimate:"serif"}],["Times-Italic",{alias:"Times-Roman",style:o,ultimate:"serif"}],["Times-BoldItalic",{alias:"Times-Roman",style:c,ultimate:"serif"}],["Helvetica",{local:["Helvetica","Helvetica Neue","Arial","Arial Nova","Liberation Sans","Arimo","Nimbus Sans","Nimbus Sans L","A030","TeX Gyre Heros","FreeSans","DejaVu Sans","Albany","Bitstream Vera Sans","Arial Unicode MS","Microsoft Sans Serif","Apple Symbols","Cantarell"],path:"LiberationSans-Regular.ttf",style:i,ultimate:"sans-serif"}],["Helvetica-Bold",{alias:"Helvetica",path:"LiberationSans-Bold.ttf",style:s,ultimate:"sans-serif"}],["Helvetica-Oblique",{alias:"Helvetica",path:"LiberationSans-Italic.ttf",style:o,ultimate:"sans-serif"}],["Helvetica-BoldOblique",{alias:"Helvetica",path:"LiberationSans-BoldItalic.ttf",style:c,ultimate:"sans-serif"}],["Courier",{local:["Courier","Courier New","Liberation Mono","Nimbus Mono","Nimbus Mono L","Cousine","Cumberland","TeX Gyre Cursor","FreeMono"],style:i,ultimate:"monospace"}],["Courier-Bold",{alias:"Courier",style:s,ultimate:"monospace"}],["Courier-Oblique",{alias:"Courier",style:o,ultimate:"monospace"}],["Courier-BoldOblique",{alias:"Courier",style:c,ultimate:"monospace"}],["ArialBlack",{local:["Arial Black"],style:{style:"normal",weight:"900"},fallback:"Helvetica-Bold"}],["ArialBlack-Bold",{alias:"ArialBlack"}],["ArialBlack-Italic",{alias:"ArialBlack",style:{style:"italic",weight:"900"},fallback:"Helvetica-BoldOblique"}],["ArialBlack-BoldItalic",{alias:"ArialBlack-Italic"}],["ArialNarrow",{local:["Arial Narrow","Liberation Sans Narrow","Helvetica Condensed","Nimbus Sans Narrow","TeX Gyre Heros Cn"],style:i,fallback:"Helvetica"}],["ArialNarrow-Bold",{alias:"ArialNarrow",style:s,fallback:"Helvetica-Bold"}],["ArialNarrow-Italic",{alias:"ArialNarrow",style:o,fallback:"Helvetica-Oblique"}],["ArialNarrow-BoldItalic",{alias:"ArialNarrow",style:c,fallback:"Helvetica-BoldOblique"}],["Calibri",{local:["Calibri","Carlito"],style:i,fallback:"Helvetica"}],["Calibri-Bold",{alias:"Calibri",style:s,fallback:"Helvetica-Bold"}],["Calibri-Italic",{alias:"Calibri",style:o,fallback:"Helvetica-Oblique"}],["Calibri-BoldItalic",{alias:"Calibri",style:c,fallback:"Helvetica-BoldOblique"}],["Wingdings",{local:["Wingdings","URW Dingbats"],style:i}],["Wingdings-Regular",{alias:"Wingdings"}],["Wingdings-Bold",{alias:"Wingdings"}]]),h=new Map([["Arial-Black","ArialBlack"]]);function u(e,t,r){let{alias:n,local:a,path:i,fallback:h,style:d,ultimate:f}=e,g=!(arguments.length>3&&void 0!==arguments[3])||arguments[3],p=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],m=arguments.length>5&&void 0!==arguments[5]?arguments[5]:"";const b={style:null,ultimate:null};if(a){const e=m?" ".concat(m):"";for(const r of a)t.push("local(".concat(r).concat(e,")"))}if(n){const e=l.get(n),a=m||function(e){switch(e){case s:return"Bold";case o:return"Italic";case c:return"Bold Italic";default:if("bold"===(null==e?void 0:e.weight))return"Bold";if("italic"===(null==e?void 0:e.style))return"Italic"}return""}(d);Object.assign(b,u(e,t,r,g&&!h,p&&!i,a))}if(d&&(b.style=d),f&&(b.ultimate=f),g&&h){const e=l.get(h),{ultimate:n}=u(e,t,r,g,p&&!i,m);b.ultimate||(b.ultimate=n)}return p&&i&&r&&t.push("url(".concat(r).concat(i,")")),b}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ImageResizer=void 0,r(84),r(93),r(94),r(97),r(99),r(101),r(105),r(108),r(115),r(2);var n=r(144);class a{constructor(e,t){this._imgData=e,this._isMask=t}static needsToBeResized(e,t){if(e<=this._goodSquareLength&&t<=this._goodSquareLength)return!1;const{MAX_DIM:r}=this;if(e>r||t>r)return!0;const n=e*t;return this._hasMaxArea?n>this.MAX_AREA:!(n(this.MAX_AREA=this._goodSquareLength**2)))}static get MAX_DIM(){return(0,n.shadow)(this,"MAX_DIM",this._guessMax(2048,65537,0,1))}static get MAX_AREA(){return this._hasMaxArea=!0,(0,n.shadow)(this,"MAX_AREA",this._guessMax(a._goodSquareLength,this.MAX_DIM,128,0)**2)}static set MAX_AREA(e){e>=0&&(this._hasMaxArea=!0,(0,n.shadow)(this,"MAX_AREA",e))}static setMaxArea(e){this._hasMaxArea||(this.MAX_AREA=e>>2)}static _areGoodDims(e,t){try{const r=new OffscreenCanvas(e,t),n=r.getContext("2d");n.fillRect(0,0,1,1);const a=n.getImageData(0,0,1,1).data[3];return r.width=r.height=1,0!==a}catch(e){return!1}}static _guessMax(e,t,r,n){for(;e+r+11&&void 0!==arguments[1]&&arguments[1])._createImage()}async _createImage(){const e=this._encodeBMP(),t=new Blob([e.buffer],{type:"image/bmp"}),r=createImageBitmap(t),{MAX_AREA:n,MAX_DIM:i}=a,{_imgData:s}=this,{width:o,height:c}=s,l=Math.max(o/i,c/i,Math.sqrt(o*c/n)),h=Math.max(l,2),u=Math.round(10*(l+1.25))/10/h,d=Math.floor(Math.log2(u)),f=new Array(d+2).fill(2);f[0]=h,f.splice(-1,1,u/(1<>3,n=r+3&-4;if(r!==n){const e=new Uint8Array(n*t);let a=0;for(let s=0,o=t*r;s{Object.defineProperty(t,"__esModule",{value:!0}),t.MurmurHash3_64=void 0,r(84),r(93),r(94),r(97),r(99),r(101),r(105),r(108),r(115),r(2);var n=r(144);const a=3285377520,i=4294901760,s=65535;t.MurmurHash3_64=class{constructor(e){this.h1=e?4294967295&e:a,this.h2=e?4294967295&e:a}update(e){let t,r;if("string"==typeof e){t=new Uint8Array(2*e.length),r=0;for(let n=0,a=e.length;n>>8,t[r++]=255&a)}}else{if(!(0,n.isArrayBuffer)(e))throw new Error("Wrong data format in MurmurHash3_64_update. Input must be a string or array.");t=e.slice(),r=t.byteLength}const a=r>>2,o=r-4*a,c=new Uint32Array(t.buffer,0,a);let l=0,h=0,u=this.h1,d=this.h2;const f=3432918353,g=461845907,p=11601,m=13715;for(let e=0;e>>17,l=l*g&i|l*m&s,u^=l,u=u<<13|u>>>19,u=5*u+3864292196):(h=c[e],h=h*f&i|h*p&s,h=h<<15|h>>>17,h=h*g&i|h*m&s,d^=h,d=d<<13|d>>>19,d=5*d+3864292196);switch(l=0,o){case 3:l^=t[4*a+2]<<16;case 2:l^=t[4*a+1]<<8;case 1:l^=t[4*a],l=l*f&i|l*p&s,l=l<<15|l>>>17,l=l*g&i|l*m&s,1&a?u^=l:d^=l}this.h1=u,this.h2=d}hexdigest(){let e=this.h1,t=this.h2;return e^=t>>>1,e=3981806797*e&i|36045*e&s,t=4283543511*t&i|(2950163797*(t<<16|e>>>16)&i)>>>16,e^=t>>>1,e=444984403*e&i|60499*e&s,t=3301882366*t&i|(3120437893*(t<<16|e>>>16)&i)>>>16,e^=t>>>1,(e>>>0).toString(16).padStart(8,"0")+(t>>>0).toString(16).padStart(8,"0")}}},(e,t,r)=>{var n;Object.defineProperty(t,"__esModule",{value:!0}),t.OperatorList=void 0,r(2),r(139),r(84),r(93),r(94),r(97),r(99),r(101),r(105),r(108),r(115),r(116),r(126),r(128),r(131),r(133),r(135),r(137);var a=r(144);function s(e,t,r,n,a){let i=e;for(let e=0,r=t.length-1;e1e3&&(h=Math.max(h,f),g+=d+2,f=0,d=0),u.push({transform:t,x:f,y:g,w:r.width,h:r.height}),f+=r.width+2,d=Math.max(d,r.height)}const p=Math.max(h,f)+1,m=g+d+1,b=new Uint8Array(p*m*4),y=p<<2;for(let e=0;e=0;)t[i-4]=t[i],t[i-3]=t[i+1],t[i-2]=t[i+2],t[i-1]=t[i+3],t[i+r]=t[i+r-4],t[i+r+1]=t[i+r-3],t[i+r+2]=t[i+r-2],t[i+r+3]=t[i+r-1],i-=y}const w={width:p,height:m};if(e.isOffscreenCanvasSupported){const e=new OffscreenCanvas(p,m);e.getContext("2d").putImageData(new ImageData(new Uint8ClampedArray(b.buffer),p,m),0,0),w.bitmap=e.transferToImageBitmap(),w.data=null}else w.kind=a.ImageKind.RGBA_32BPP,w.data=b;return r.splice(s,4*l,a.OPS.paintInlineImageXObjectGroup),n.splice(s,4*l,[w,u]),s+1})),s(o,[a.OPS.save,a.OPS.transform,a.OPS.paintImageMaskXObject,a.OPS.restore],null,(function(e,t){const r=e.fnArray,n=(t-(e.iCurr-3))%4;switch(n){case 0:return r[t]===a.OPS.save;case 1:return r[t]===a.OPS.transform;case 2:return r[t]===a.OPS.paintImageMaskXObject;case 3:return r[t]===a.OPS.restore}throw new Error("iterateImageMaskGroup - invalid pos: ".concat(n))}),(function(e,t){const r=e.fnArray,n=e.argsArray,i=e.iCurr,s=i-3,o=i-2,c=i-1;let l=Math.floor((t-s)/4);if(l<10)return t-(t-s)%4;let h,u,d=!1;const f=n[c][0],g=n[o][0],p=n[o][1],m=n[o][2],b=n[o][3];if(p===m){d=!0,h=o+4;let e=c+4;for(let t=1;t=4&&r[i-4]===r[s]&&r[i-3]===r[o]&&r[i-2]===r[c]&&r[i-1]===r[l]&&n[i-4][0]===h&&n[i-4][1]===u&&(d++,f-=5);let g=f+4;for(let e=1;e=r)break}n=(n||o)[e[t]],n&&!Array.isArray(n)?(i.iCurr=t,t++,!n.checkFn||(0,n.checkFn)(i)?(a=n,n=null):n=null):t++}this.state=n,this.match=a,this.lastProcessed=t}flush(){for(;this.match;){const e=this.queue.fnArray.length;this.lastProcessed=(0,this.match.processFn)(this.context,e),this.match=null,this.state=null,this._optimize()}}reset(){this.state=null,this.match=null,this.lastProcessed=0}}class h{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1?arguments[1]:void 0;this._streamSink=t,this.fnArray=[],this.argsArray=[],this.optimizer=!t||e&a.RenderingIntentFlag.OPLIST?new c(this):new l(this),this.dependencies=new Set,this._totalLength=0,this.weight=0,this._resolved=t?null:Promise.resolve()}set isOffscreenCanvasSupported(e){this.optimizer.isOffscreenCanvasSupported=e}get length(){return this.argsArray.length}get ready(){return this._resolved||this._streamSink.ready}get totalLength(){return this._totalLength+this.length}addOp(e,t){this.optimizer.push(e,t),this.weight++,this._streamSink&&(this.weight>=h.CHUNK_SIZE||this.weight>=h.CHUNK_SIZE_ABOUT&&(e===a.OPS.restore||e===a.OPS.endText))&&this.flush()}addImageOps(e,t,r){void 0!==r&&this.addOp(a.OPS.beginMarkedContentProps,["OC",r]),this.addOp(e,t),void 0!==r&&this.addOp(a.OPS.endMarkedContent,[])}addDependency(e){this.dependencies.has(e)||(this.dependencies.add(e),this.addOp(a.OPS.dependency,[e]))}addDependencies(e){for(const t of e)this.addDependency(t)}addOpList(e){if(e instanceof h){for(const t of e.dependencies)this.dependencies.add(t);for(let t=0,r=e.length;t0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;this.optimizer.flush();const r=this.length;this._totalLength+=r,this._streamSink.enqueue({fnArray:this.fnArray,argsArray:this.argsArray,lastChunk:e,separateAnnots:t,length:r},1,this._transfers),this.dependencies.clear(),this.fnArray.length=0,this.argsArray.length=0,this.weight=0,this.optimizer.reset()}}n=h,i(h,"CHUNK_SIZE",1e3),i(h,"CHUNK_SIZE_ABOUT",n.CHUNK_SIZE-5),t.OperatorList=h},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.PDFImage=void 0,r(84),r(93),r(94),r(97),r(99),r(101),r(105),r(108),r(115),r(2);var n=r(144),a=r(178),i=r(151),s=r(162),o=r(168),c=r(212),l=r(176),h=r(180),u=r(150);function d(e,t,r,n){return(e=t+e*r)<0?e=0:e>n&&(e=n),e}function f(e,t,r,n,a,i){const s=a*i;let o;o=t<=8?new Uint8Array(s):t<=16?new Uint16Array(s):new Uint32Array(s);const c=r/a,l=n/i;let h,u,d,f,g=0;const p=new Uint16Array(a),m=r;for(h=0;h0&&Number.isInteger(a.height)&&a.height>0&&(a.width!==w||a.height!==v)&&((0,n.warn)("PDFImage - using the Width/Height of the image data, rather than the image dictionary."),w=a.width,v=a.height),w<1||v<1)throw new n.FormatError("Invalid image width: ".concat(w," or height: ").concat(v));this.width=w,this.height=v,this.interpolate=m.get("I","Interpolate"),this.imageMask=m.get("IM","ImageMask")||!1,this.matte=m.get("Matte")||!1;let x=a.bitsPerComponent;if(!x&&(x=m.get("BPC","BitsPerComponent"),!x)){if(!this.imageMask)throw new n.FormatError("Bits per component missing in image: ".concat(this.imageMask));x=1}if(this.bpc=x,!this.imageMask){let e=m.getRaw("CS")||m.getRaw("ColorSpace");if(!e)switch((0,n.info)("JPX images (which do not require color spaces)"),a.numComps){case 1:e=u.Name.get("DeviceGray");break;case 3:e=u.Name.get("DeviceRGB");break;case 4:e=u.Name.get("DeviceCMYK");break;default:throw new Error("JPX images with ".concat(a.numComps," color components not supported."))}this.colorSpace=s.ColorSpace.parse({cs:e,xref:t,resources:o?r:null,pdfFunctionFactory:f,localColorSpaceCache:p}),this.numComps=this.colorSpace.numComps}if(this.decode=m.getArray("D","Decode"),this.needsDecode=!1,this.decode&&(this.colorSpace&&!this.colorSpace.isDefaultDecode(this.decode,x)||d&&!s.ColorSpace.isDefaultDecode(this.decode,1))){var S;this.needsDecode=!0;const e=(1<>3)*n,c=t.byteLength;let l,h;if(!a||i&&o!==c?i?(l=new Uint8Array(o),l.set(t),l.fill(255,c)):l=new Uint8Array(t):l=t,i)for(h=0;h>7&1,s[d+1]=u>>6&1,s[d+2]=u>>5&1,s[d+3]=u>>4&1,s[d+4]=u>>3&1,s[d+5]=u>>2&1,s[d+6]=u>>1&1,s[d+7]=1&u,d+=8;if(d>=1}}else{let r=0;for(u=0,d=0,h=i;d>n;a<0?a=0:a>l&&(a=l),s[d]=a,u&=(1<o[n+1]){t=255;break}}c[u]=t}}}if(c)for(u=0,p=3,d=t*a;u0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const r=this.drawWidth,a=this.drawHeight,i={width:r,height:a,interpolate:this.interpolate,kind:0,data:null},s=this.numComps,o=this.width,h=this.height,u=this.bpc,d=o*s*u+7>>3,f=t&&c.ImageResizer.needsToBeResized(r,a);if(!e){let e;if("DeviceGray"===this.colorSpace.name&&1===u?e=n.ImageKind.GRAYSCALE_1BPP:"DeviceRGB"!==this.colorSpace.name||8!==u||this.needsDecode||(e=n.ImageKind.RGB_24BPP),e&&!this.smask&&!this.mask&&r===o&&a===h){const s=this.getImageBytes(h*d,{});if(t)return f?c.ImageResizer.createImage({data:s,kind:e,width:r,height:a,interpolate:this.interpolate},this.needsDecode):this.createBitmap(e,o,h,s);if(i.kind=e,i.data=s,this.needsDecode){(0,n.assert)(e===n.ImageKind.GRAYSCALE_1BPP,"PDFImage.createImageData: The image must be grayscale.");const t=i.data;for(let e=0,r=t.length;e>3,o=this.getImageBytes(a*s,{internal:!0}),c=this.getComponents(o);let l,h;if(1===i){if(h=r*a,this.needsDecode)for(l=0;l{Object.defineProperty(t,"__esModule",{value:!0}),t.incrementalUpdate=async function(e){let{originalData:t,xrefInfo:r,newRefs:o,xref:u=null,hasXfa:d=!1,xfaDatasetsRef:p=null,hasXfaDatasetsEntry:m=!1,needAppearances:b,acroFormRef:y=null,acroForm:w=null,xfaData:v=null}=e;await async function(e){let{xref:t,acroForm:r,acroFormRef:i,hasXfa:s,hasXfaDatasetsEntry:o,xfaDatasetsRef:c,needAppearances:h,newRefs:u}=e;if(!s||o||c||(0,n.warn)("XFA - Cannot save it"),!h&&(!s||!c||o))return;const d=new a.Dict(t);for(const e of r.getKeys())d.set(e,r.getRaw(e));if(s&&!o){const e=r.get("XFA").slice();e.splice(2,0,"datasets"),e.splice(3,0,c),d.set("XFA",e)}h&&d.set("NeedAppearances",!0);const f=t.encrypt;let g=null;f&&(g=f.createCipherTransform(i.num,i.gen));const p=[];await l(i,d,p,g),u.push({ref:i,data:p.join("")})}({xref:u,acroForm:w,acroFormRef:y,hasXfa:d,hasXfaDatasetsEntry:m,xfaDatasetsRef:p,needAppearances:b,newRefs:o}),d&&function(e){let{xfaData:t,xfaDatasetsRef:r,newRefs:a,xref:o}=e;null===t&&(t=function(e,t){const r=new s.SimpleXMLParser({hasAttributes:!0}).parseFromString(e);for(const{xfa:e}of t){if(!e)continue;const{path:t,value:a}=e;if(!t)continue;const o=(0,i.parseXFAPath)(t);let c=r.documentElement.searchNode(o,0);!c&&o.length>1&&(c=r.documentElement.searchNode([o.at(-1)],0)),c?c.childNodes=Array.isArray(a)?a.map((e=>new s.SimpleDOMNode("value",e))):[new s.SimpleDOMNode("#text",a)]:(0,n.warn)("Node not found for path: ".concat(t))}const a=[];return r.documentElement.dump(a),a.join("")}(o.fetchIfRef(r).getString(),a));const c=o.encrypt;c&&(t=c.createCipherTransform(r.num,r.gen).encryptString(t));const l="".concat(r.num," ").concat(r.gen," obj\\n<< /Type /EmbeddedFile /Length ").concat(t.length,">>\\nstream\\n")+t+"\\nendstream\\nendobj\\n";a.push({ref:r,data:l})}({xfaData:v,xfaDatasetsRef:p,newRefs:o,xref:u});const x=new a.Dict(null),S=r.newRef;let A,k;const C=t.at(-1);10===C||13===C?(A=[],k=t.length):(A=["\\n"],k=t.length+1),x.set("Size",S.num+1),x.set("Prev",r.startXRef),x.set("Type",a.Name.get("XRef")),null!==r.rootRef&&x.set("Root",r.rootRef),null!==r.infoRef&&x.set("Info",r.infoRef),null!==r.encryptRef&&x.set("Encrypt",r.encryptRef),o.push({ref:S,data:""}),o=o.sort(((e,t)=>e.ref.num-t.ref.num));const O=[[0,1,65535]],F=[0,1];let I=0;for(const{ref:e,data:t}of o)I=Math.max(I,k),O.push([1,k,Math.min(e.gen,65535)]),k+=t.length,F.push(e.num,1),A.push(t);if(x.set("Index",F),Array.isArray(r.fileIds)&&r.fileIds.length>0){const e=function(e,t){const r=Math.floor(Date.now()/1e3),a=t.filename||"",i=[r.toString(),a,e.toString()];let s=i.reduce(((e,t)=>e+t.length),0);for(const e of Object.values(t.info))i.push(e),s+=e.length;const o=new Uint8Array(s);let l=0;for(const e of i)g(e,l,o),l+=e.length;return(0,n.bytesToString)((0,c.calculateMD5)(o))}(k,r);x.set("ID",[r.fileIds[0],e])}const T=[1,Math.ceil(Math.log2(I)/8),2],M=(T[0]+T[1]+T[2])*O.length;x.set("W",T),x.set("Length",M),A.push("".concat(S.num," ").concat(S.gen," obj\\n")),await h(x,A,null),A.push(" stream\\n");const E=A.reduce(((e,t)=>e+t.length),0),P="\\nendstream\\nendobj\\nstartxref\\n".concat(k,"\\n%%EOF\\n"),R=new Uint8Array(t.length+E+M+P.length);R.set(t);let N=t.length;for(const e of A)g(e,N,R),N+=e.length;for(const[e,t,r]of O)N=f(e,T[0],N,R),N=f(t,T[1],N,R),N=f(r,T[2],N,R);return g(P,N,R),R},t.writeDict=h,t.writeObject=l,r(139),r(84),r(93),r(94),r(97),r(99),r(101),r(105),r(108),r(115);var n=r(144),a=r(150),i=r(149),s=r(217),o=r(151),c=r(218);async function l(e,t,r,n){r.push("".concat(e.num," ").concat(e.gen," obj\\n")),t instanceof a.Dict?await h(t,r,n):t instanceof o.BaseStream&&await u(t,r,n),r.push("\\nendobj\\n")}async function h(e,t,r){t.push("<<");for(const n of e.getKeys())t.push(" /".concat((0,i.escapePDFName)(n)," ")),await d(e.getRaw(n),t,r);t.push(">>")}async function u(e,t,r){let i=e.getString();null!==r&&(i=r.encryptString(i));const{dict:s}=e,[o,c]=await Promise.all([s.getAsync("Filter"),s.getAsync("DecodeParms")]),l=Array.isArray(o)?await s.xref.fetchIfRefAsync(o[0]):o,u=(0,a.isName)(l,"FlateDecode");if("undefined"!=typeof CompressionStream&&(i.length>=256||u))try{const e=(0,n.stringToBytes)(i),t=new CompressionStream("deflate"),r=t.writable.getWriter();r.write(e),r.close();const l=await new Response(t.readable).arrayBuffer();let h,d;i=(0,n.bytesToString)(new Uint8Array(l)),o?u||(h=Array.isArray(o)?[a.Name.get("FlateDecode"),...o]:[a.Name.get("FlateDecode"),o],c&&(d=Array.isArray(c)?[null,...c]:[null,c])):h=a.Name.get("FlateDecode"),h&&s.set("Filter",h),d&&s.set("DecodeParms",d)}catch(e){(0,n.info)('writeStream - cannot compress data: "'.concat(e,'".'))}s.set("Length",i.length),await h(s,t,r),t.push(" stream\\n",i,"\\nendstream")}async function d(e,t,r){e instanceof a.Name?t.push("/".concat((0,i.escapePDFName)(e.name))):e instanceof a.Ref?t.push("".concat(e.num," ").concat(e.gen," R")):Array.isArray(e)?await async function(e,t,r){t.push("[");let n=!0;for(const a of e)n?n=!1:t.push(" "),await d(a,t,r);t.push("]")}(e,t,r):"string"==typeof e?(null!==r&&(e=r.encryptString(e)),t.push("(".concat((0,i.escapeString)(e),")"))):"number"==typeof e?t.push((0,i.numberToString)(e)):"boolean"==typeof e?t.push(e.toString()):e instanceof a.Dict?await h(e,t,r):e instanceof o.BaseStream?await u(e,t,r):null===e?t.push("null"):(0,n.warn)("Unhandled value in writer: ".concat(typeof e,", please file a bug."))}function f(e,t,r,n){for(let a=t+r-1;a>r-1;a--)n[a]=255&e,e>>=8;return r+t}function g(e,t,r){for(let n=0,a=e.length;n{Object.defineProperty(t,"__esModule",{value:!0}),t.XMLParserErrorCode=t.XMLParserBase=t.SimpleXMLParser=t.SimpleDOMNode=void 0,r(139);var n=r(149);const a={NoError:0,EndOfDocument:-1,UnterminatedCdat:-2,UnterminatedXmlDeclaration:-3,UnterminatedDoctypeDeclaration:-4,UnterminatedComment:-5,MalformedElement:-6,OutOfMemory:-7,UnterminatedAttributeValue:-8,UnterminatedElement:-9,ElementNeverBegun:-10};function i(e,t){const r=e[t];return" "===r||"\\n"===r||"\\r"===r||"\\t"===r}t.XMLParserErrorCode=a;class s{_resolveEntities(e){return e.replaceAll(/&([^;]+);/g,((e,t)=>{if("#x"===t.substring(0,2))return String.fromCodePoint(parseInt(t.substring(2),16));if("#"===t.substring(0,1))return String.fromCodePoint(parseInt(t.substring(1),10));switch(t){case"lt":return"<";case"gt":return">";case"amp":return"&";case"quot":return'"';case"apos":return"'"}return this.onResolveEntity(t)}))}_parseContent(e,t){const r=[];let n=t;function a(){for(;n"!==e[n]&&"/"!==e[n];)++n;const s=e.substring(t,n);for(a();n"!==e[n]&&"/"!==e[n]&&"?"!==e[n];){a();let t="",s="";for(;n"!==e[r]&&"?"!==e[r]&&"/"!==e[r];)++r;const n=e.substring(t,r);!function(){for(;r"!==e[r+1]);)++r;return{name:n,value:e.substring(a,r),parsed:r-t}}parseXml(e){let t=0;for(;t",r),t<0)return void this.onError(a.UnterminatedElement);this.onEndElement(e.substring(r,t)),r=t+1;break;case"?":++r;const n=this._parseProcessingInstruction(e,r);if("?>"!==e.substring(r+n.parsed,r+n.parsed+2))return void this.onError(a.UnterminatedXmlDeclaration);this.onPi(n.name,n.value),r+=n.parsed+2;break;case"!":if("--"===e.substring(r+1,r+3)){if(t=e.indexOf("--\\x3e",r+3),t<0)return void this.onError(a.UnterminatedComment);this.onComment(e.substring(r+3,t)),r=t+3}else if("[CDATA["===e.substring(r+1,r+8)){if(t=e.indexOf("]]>",r+8),t<0)return void this.onError(a.UnterminatedCdat);this.onCdata(e.substring(r+8,t)),r=t+3}else{if("DOCTYPE"!==e.substring(r+1,r+8))return void this.onError(a.MalformedElement);{const n=e.indexOf("[",r+8);let i=!1;if(t=e.indexOf(">",r+8),t<0)return void this.onError(a.UnterminatedDoctypeDeclaration);if(n>0&&t>n){if(t=e.indexOf("]>",r+8),t<0)return void this.onError(a.UnterminatedDoctypeDeclaration);i=!0}const s=e.substring(r+8,t+(i?1:0));this.onDoctype(s),r=t+(i?2:1)}}break;default:const i=this._parseContent(e,r);if(null===i)return void this.onError(a.MalformedElement);let s=!1;if("/>"===e.substring(r+i.parsed,r+i.parsed+2))s=!0;else if(">"!==e.substring(r+i.parsed,r+i.parsed+1))return void this.onError(a.UnterminatedElement);this.onBeginElement(i.name,i.attributes,s),r+=i.parsed+(s?2:1)}}else{for(;r0}searchNode(e,t){if(t>=e.length)return this;const r=e[t],n=[];let a=this;for(;;){var i;if(r.name===a.nodeName){if(0!==r.pos){if(0===n.length)return null;{const[i]=n.pop();let s=0;for(const n of i.childNodes)if(r.name===n.nodeName){if(s===r.pos)return n.searchNode(e,t+1);s++}return a.searchNode(e,t+1)}}{const r=a.searchNode(e,t+1);if(null!==r)return r}}if((null===(i=a.childNodes)||void 0===i?void 0:i.length)>0)n.push([a,0]),a=a.childNodes[0];else{if(0===n.length)return null;for(;0!==n.length;){const[e,t]=n.pop(),r=t+1;if(r");for(const t of this.childNodes)t.dump(e);e.push(""))}else this.nodeValue?e.push(">".concat((0,n.encodeToXmlString)(this.nodeValue),"")):e.push("/>")}else e.push((0,n.encodeToXmlString)(this.nodeValue))}}t.SimpleDOMNode=o,t.SimpleXMLParser=class extends s{constructor(e){let{hasAttributes:t=!1,lowerCaseName:r=!1}=e;super(),this._currentFragment=null,this._stack=null,this._errorCode=a.NoError,this._hasAttributes=t,this._lowerCaseName=r}parseFromString(e){if(this._currentFragment=[],this._stack=[],this._errorCode=a.NoError,this.parseXml(e),this._errorCode!==a.NoError)return;const[t]=this._currentFragment;return t?{documentElement:t}:void 0}onText(e){if(function(e){for(let t=0,r=e.length;t{Object.defineProperty(t,"__esModule",{value:!0}),t.calculateSHA256=t.calculateMD5=t.PDF20=t.PDF17=t.CipherTransformFactory=t.ARCFourCipher=t.AES256Cipher=t.AES128Cipher=void 0,t.calculateSHA384=u,t.calculateSHA512=void 0,r(84),r(93),r(94),r(97),r(99),r(101),r(105),r(108),r(115),r(139);var n=r(144),a=r(150),i=r(219);class s{constructor(e){this.a=0,this.b=0;const t=new Uint8Array(256),r=e.length;for(let e=0;e<256;++e)t[e]=e;for(let n=0,a=0;n<256;++n){const i=t[n];a=a+i+e[n%r]&255,t[n]=t[a],t[a]=i}this.s=t}encryptBlock(e){let t=this.a,r=this.b;const n=this.s,a=e.length,i=new Uint8Array(a);for(let s=0;s>5&255,h[u++]=a>>13&255,h[u++]=a>>21&255,h[u++]=a>>>29&255,h[u++]=0,h[u++]=0,h[u++]=0;const g=new Int32Array(16);for(u=0;u>>32-o)|0,a=i}i=i+a|0,s=s+l|0,o=o+f|0,c=c+p|0}return new Uint8Array([255&i,i>>8&255,i>>16&255,i>>>24&255,255&s,s>>8&255,s>>16&255,s>>>24&255,255&o,o>>8&255,o>>16&255,o>>>24&255,255&c,c>>8&255,c>>16&255,c>>>24&255])}}();t.calculateMD5=o;class c{constructor(e,t){this.high=0|e,this.low=0|t}and(e){this.high&=e.high,this.low&=e.low}xor(e){this.high^=e.high,this.low^=e.low}or(e){this.high|=e.high,this.low|=e.low}shiftRight(e){e>=32?(this.low=this.high>>>e-32|0,this.high=0):(this.low=this.low>>>e|this.high<<32-e,this.high=this.high>>>e|0)}shiftLeft(e){e>=32?(this.high=this.low<>>32-e,this.low<<=e)}rotateRight(e){let t,r;32&e?(r=this.low,t=this.high):(t=this.low,r=this.high),e&=31,this.low=t>>>e|r<<32-e,this.high=r>>>e|t<<32-e}not(){this.high=~this.high,this.low=~this.low}add(e){const t=(this.low>>>0)+(e.low>>>0);let r=(this.high>>>0)+(e.high>>>0);t>4294967295&&(r+=1),this.low=0|t,this.high=0|r}copyTo(e,t){e[t]=this.high>>>24&255,e[t+1]=this.high>>16&255,e[t+2]=this.high>>8&255,e[t+3]=255&this.high,e[t+4]=this.low>>>24&255,e[t+5]=this.low>>16&255,e[t+6]=this.low>>8&255,e[t+7]=255&this.low}assign(e){this.high=e.high,this.low=e.low}}const l=function(){function e(e,t){return e>>>t|e<<32-t}function t(e,t,r){return e&t^~e&r}function r(e,t,r){return e&t^e&r^t&r}function n(t){return e(t,2)^e(t,13)^e(t,22)}function a(t){return e(t,6)^e(t,11)^e(t,25)}function i(t){return e(t,7)^e(t,18)^t>>>3}const s=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];return function(o,c,l){let h=1779033703,u=3144134277,d=1013904242,f=2773480762,g=1359893119,p=2600822924,m=528734635,b=1541459225;const y=64*Math.ceil((l+9)/64),w=new Uint8Array(y);let v,x;for(v=0;v>>29&255,w[v++]=l>>21&255,w[v++]=l>>13&255,w[v++]=l>>5&255,w[v++]=l<<3&255;const A=new Uint32Array(64);for(v=0;v>>10)+A[x-7]+i(A[x-15])+A[x-16]|0;let o,c,l=h,y=u,S=d,C=f,O=g,F=p,I=m,T=b;for(x=0;x<64;++x)o=T+a(O)+t(O,F,I)+s[x]+A[x],c=n(l)+r(l,y,S),T=I,I=F,F=O,O=C+o|0,C=S,S=y,y=l,l=o+c|0;h=h+l|0,u=u+y|0,d=d+S|0,f=f+C|0,g=g+O|0,p=p+F|0,m=m+I|0,b=b+T|0}var k;return new Uint8Array([h>>24&255,h>>16&255,h>>8&255,255&h,u>>24&255,u>>16&255,u>>8&255,255&u,d>>24&255,d>>16&255,d>>8&255,255&d,f>>24&255,f>>16&255,f>>8&255,255&f,g>>24&255,g>>16&255,g>>8&255,255&g,p>>24&255,p>>16&255,p>>8&255,255&p,m>>24&255,m>>16&255,m>>8&255,255&m,b>>24&255,b>>16&255,b>>8&255,255&b])}}();t.calculateSHA256=l;const h=function(){function e(e,t,r,n,a){e.assign(t),e.and(r),a.assign(t),a.not(),a.and(n),e.xor(a)}function t(e,t,r,n,a){e.assign(t),e.and(r),a.assign(t),a.and(n),e.xor(a),a.assign(r),a.and(n),e.xor(a)}function r(e,t,r){e.assign(t),e.rotateRight(28),r.assign(t),r.rotateRight(34),e.xor(r),r.assign(t),r.rotateRight(39),e.xor(r)}function n(e,t,r){e.assign(t),e.rotateRight(14),r.assign(t),r.rotateRight(18),e.xor(r),r.assign(t),r.rotateRight(41),e.xor(r)}function a(e,t,r){e.assign(t),e.rotateRight(1),r.assign(t),r.rotateRight(8),e.xor(r),r.assign(t),r.shiftRight(7),e.xor(r)}function i(e,t,r){e.assign(t),e.rotateRight(19),r.assign(t),r.rotateRight(61),e.xor(r),r.assign(t),r.shiftRight(6),e.xor(r)}const s=[new c(1116352408,3609767458),new c(1899447441,602891725),new c(3049323471,3964484399),new c(3921009573,2173295548),new c(961987163,4081628472),new c(1508970993,3053834265),new c(2453635748,2937671579),new c(2870763221,3664609560),new c(3624381080,2734883394),new c(310598401,1164996542),new c(607225278,1323610764),new c(1426881987,3590304994),new c(1925078388,4068182383),new c(2162078206,991336113),new c(2614888103,633803317),new c(3248222580,3479774868),new c(3835390401,2666613458),new c(4022224774,944711139),new c(264347078,2341262773),new c(604807628,2007800933),new c(770255983,1495990901),new c(1249150122,1856431235),new c(1555081692,3175218132),new c(1996064986,2198950837),new c(2554220882,3999719339),new c(2821834349,766784016),new c(2952996808,2566594879),new c(3210313671,3203337956),new c(3336571891,1034457026),new c(3584528711,2466948901),new c(113926993,3758326383),new c(338241895,168717936),new c(666307205,1188179964),new c(773529912,1546045734),new c(1294757372,1522805485),new c(1396182291,2643833823),new c(1695183700,2343527390),new c(1986661051,1014477480),new c(2177026350,1206759142),new c(2456956037,344077627),new c(2730485921,1290863460),new c(2820302411,3158454273),new c(3259730800,3505952657),new c(3345764771,106217008),new c(3516065817,3606008344),new c(3600352804,1432725776),new c(4094571909,1467031594),new c(275423344,851169720),new c(430227734,3100823752),new c(506948616,1363258195),new c(659060556,3750685593),new c(883997877,3785050280),new c(958139571,3318307427),new c(1322822218,3812723403),new c(1537002063,2003034995),new c(1747873779,3602036899),new c(1955562222,1575990012),new c(2024104815,1125592928),new c(2227730452,2716904306),new c(2361852424,442776044),new c(2428436474,593698344),new c(2756734187,3733110249),new c(3204031479,2999351573),new c(3329325298,3815920427),new c(3391569614,3928383900),new c(3515267271,566280711),new c(3940187606,3454069534),new c(4118630271,4000239992),new c(116418474,1914138554),new c(174292421,2731055270),new c(289380356,3203993006),new c(460393269,320620315),new c(685471733,587496836),new c(852142971,1086792851),new c(1017036298,365543100),new c(1126000580,2618297676),new c(1288033470,3409855158),new c(1501505948,4234509866),new c(1607167915,987167468),new c(1816402316,1246189591)];return function(o,l,h){let u,d,f,g,p,m,b,y,w=arguments.length>3&&void 0!==arguments[3]&&arguments[3];w?(u=new c(3418070365,3238371032),d=new c(1654270250,914150663),f=new c(2438529370,812702999),g=new c(355462360,4144912697),p=new c(1731405415,4290775857),m=new c(2394180231,1750603025),b=new c(3675008525,1694076839),y=new c(1203062813,3204075428)):(u=new c(1779033703,4089235720),d=new c(3144134277,2227873595),f=new c(1013904242,4271175723),g=new c(2773480762,1595750129),p=new c(1359893119,2917565137),m=new c(2600822924,725511199),b=new c(528734635,4215389547),y=new c(1541459225,327033209));const v=128*Math.ceil((h+17)/128),x=new Uint8Array(v);let S,A;for(S=0;S>>29&255,x[S++]=h>>21&255,x[S++]=h>>13&255,x[S++]=h>>5&255,x[S++]=h<<3&255;const C=new Array(80);for(S=0;S<80;S++)C[S]=new c(0,0);let O=new c(0,0),F=new c(0,0),I=new c(0,0),T=new c(0,0),M=new c(0,0),E=new c(0,0),P=new c(0,0),R=new c(0,0);const N=new c(0,0),D=new c(0,0),B=new c(0,0),L=new c(0,0);let _,j;for(S=0;S=1;--e){r=i[13],i[13]=i[9],i[9]=i[5],i[5]=i[1],i[1]=r,r=i[14],n=i[10],i[14]=i[6],i[10]=i[2],i[6]=r,i[2]=n,r=i[15],n=i[11],a=i[7],i[15]=i[3],i[11]=r,i[7]=n,i[3]=a;for(let e=0;e<16;++e)i[e]=this._inv_s[i[e]];for(let r=0,n=16*e;r<16;++r,++n)i[r]^=t[n];for(let e=0;e<16;e+=4){const t=this._mix[i[e]],n=this._mix[i[e+1]],a=this._mix[i[e+2]],s=this._mix[i[e+3]];r=t^n>>>8^n<<24^a>>>16^a<<16^s>>>24^s<<8,i[e]=r>>>24&255,i[e+1]=r>>16&255,i[e+2]=r>>8&255,i[e+3]=255&r}}r=i[13],i[13]=i[9],i[9]=i[5],i[5]=i[1],i[1]=r,r=i[14],n=i[10],i[14]=i[6],i[10]=i[2],i[6]=r,i[2]=n,r=i[15],n=i[11],a=i[7],i[15]=i[3],i[11]=r,i[7]=n,i[3]=a;for(let e=0;e<16;++e)i[e]=this._inv_s[i[e]],i[e]^=t[e];return i}_encrypt(e,t){const r=this._s;let n,a,i;const s=new Uint8Array(16);s.set(e);for(let e=0;e<16;++e)s[e]^=t[e];for(let e=1;e=n;--r)if(e[r]!==t){t=0;break}o-=t,i[i.length-1]=e.subarray(0,16-t)}}const c=new Uint8Array(o);for(let e=0,t=0,r=i.length;e2&&void 0!==arguments[2]?arguments[2]:null;const n=e.length,a=this.buffer;let i=this.bufferPosition;if(r)this.iv=r;else{for(let t=0;i<16&&t=256&&(o=255&(27^o)));for(let t=0;t<4;++t)r[e]=n^=r[e-32],e++,r[e]=a^=r[e-32],e++,r[e]=i^=r[e-32],e++,r[e]=s^=r[e-32],e++}return r}}t.AES256Cipher=p;class m{checkOwnerPassword(e,t,r,a){const i=new Uint8Array(e.length+56);i.set(e,0),i.set(t,e.length),i.set(r,e.length+t.length);const s=l(i,0,i.length);return(0,n.isArrayEqual)(s,a)}checkUserPassword(e,t,r){const a=new Uint8Array(e.length+8);a.set(e,0),a.set(t,e.length);const i=l(a,0,a.length);return(0,n.isArrayEqual)(i,r)}getOwnerKey(e,t,r,n){const a=new Uint8Array(e.length+56);a.set(e,0),a.set(t,e.length),a.set(r,e.length+t.length);const i=l(a,0,a.length);return new p(i).decryptBlock(n,!1,new Uint8Array(16))}getUserKey(e,t,r){const n=new Uint8Array(e.length+8);n.set(e,0),n.set(t,e.length);const a=l(n,0,n.length);return new p(a).decryptBlock(r,!1,new Uint8Array(16))}}t.PDF17=m;class b{_hash(e,t,r){let n=l(t,0,t.length).subarray(0,32),a=[0],i=0;for(;i<64||a.at(-1)>i-32;){const t=e.length+n.length+r.length,s=new Uint8Array(t);let o=0;s.set(e,o),o+=e.length,s.set(n,o),o+=n.length,s.set(r,o);const c=new Uint8Array(64*t);for(let e=0,r=0;e<64;e++,r+=t)c.set(s,r);a=new g(n.subarray(0,16)).encrypt(c,n.subarray(16,32));const d=a.slice(0,16).reduce(((e,t)=>e+t),0)%3;0===d?n=l(a,0,a.length):1===d?n=u(a,0,a.length):2===d&&(n=h(a,0,a.length)),i++}return n.subarray(0,32)}checkOwnerPassword(e,t,r,a){const i=new Uint8Array(e.length+56);i.set(e,0),i.set(t,e.length),i.set(r,e.length+t.length);const s=this._hash(e,i,r);return(0,n.isArrayEqual)(s,a)}checkUserPassword(e,t,r){const a=new Uint8Array(e.length+8);a.set(e,0),a.set(t,e.length);const i=this._hash(e,a,[]);return(0,n.isArrayEqual)(i,r)}getOwnerKey(e,t,r,n){const a=new Uint8Array(e.length+56);a.set(e,0),a.set(t,e.length),a.set(r,e.length+t.length);const i=this._hash(e,a,r);return new p(i).decryptBlock(n,!1,new Uint8Array(16))}getUserKey(e,t,r){const n=new Uint8Array(e.length+8);n.set(e,0),n.set(t,e.length);const a=this._hash(e,n,[]);return new p(a).decryptBlock(r,!1,new Uint8Array(16))}}t.PDF20=b;class y{constructor(e,t){this.StringCipherConstructor=e,this.StreamCipherConstructor=t}createStream(e,t){const r=new this.StreamCipherConstructor;return new i.DecryptStream(e,t,(function(e,t){return r.decryptBlock(e,t)}))}decryptString(e){const t=new this.StringCipherConstructor;let r=(0,n.stringToBytes)(e);return r=t.decryptBlock(r,!0),(0,n.bytesToString)(r)}encryptString(e){const t=new this.StringCipherConstructor;if(t instanceof f){const r=16-e.length%16;e+=String.fromCharCode(r).repeat(r);const a=new Uint8Array(16);if("undefined"!=typeof crypto)crypto.getRandomValues(a);else for(let e=0;e<16;e++)a[e]=Math.floor(256*Math.random());let i=(0,n.stringToBytes)(e);i=t.encrypt(i,a);const s=new Uint8Array(16+i.length);return s.set(a),s.set(i,16),(0,n.bytesToString)(s)}let r=(0,n.stringToBytes)(e);return r=t.encrypt(r),(0,n.bytesToString)(r)}}const w=function(){const e=new Uint8Array([40,191,78,94,78,117,138,65,100,0,78,86,255,250,1,8,46,46,0,182,208,104,62,128,47,12,169,254,100,83,105,122]);function t(t,r,n,a,i,c,l,h){const u=40+n.length+t.length,d=new Uint8Array(u);let f,g,p=0;if(r)for(g=Math.min(32,r.length);p>8&255,d[p++]=i>>16&255,d[p++]=i>>>24&255,f=0,g=t.length;f=4&&!h&&(d[p++]=255,d[p++]=255,d[p++]=255,d[p++]=255);let m=o(d,0,p);const b=l>>3;if(c>=3)for(f=0;f<50;++f)m=o(m,0,b);const y=m.subarray(0,b);let w,v;if(c>=3){for(p=0;p<32;++p)d[p]=e[p];for(f=0,g=t.length;f3&&void 0!==arguments[3]&&arguments[3];const a=new Uint8Array(r.length+9),i=r.length;let s;for(s=0;s>8&255,a[s++]=e>>16&255,a[s++]=255&t,a[s++]=t>>8&255,n&&(a[s++]=115,a[s++]=65,a[s++]=108,a[s++]=84),o(a,0,s).subarray(0,Math.min(r.length+5,16))}function c(e,t,r,o,c){if(!(t instanceof a.Name))throw new n.FormatError("Invalid crypt filter name.");const l=e.get(t.name);let h;if(null!=l&&(h=l.get("CFM")),!h||"None"===h.name)return function(){return new d};if("V2"===h.name)return function(){return new s(i(r,o,c,!1))};if("AESV2"===h.name)return function(){return new g(i(r,o,c,!0))};if("AESV3"===h.name)return function(){return new p(c)};throw new n.FormatError("Unknown crypto method")}return class{constructor(i,c,l){const h=i.get("Filter");if(!(0,a.isName)(h,"Standard"))throw new n.FormatError("unknown encryption method");this.filterName=h.name,this.dict=i;const u=i.get("V");if(!Number.isInteger(u)||1!==u&&2!==u&&4!==u&&5!==u)throw new n.FormatError("unsupported encryption algorithm");this.algorithm=u;let d=i.get("Length");if(!d)if(u<=3)d=40;else{const e=i.get("CF"),t=i.get("StmF");if(e instanceof a.Dict&&t instanceof a.Name){e.suppressEncryption=!0;const r=e.get(t.name);d=(null==r?void 0:r.get("Length"))||128,d<40&&(d<<=3)}}if(!Number.isInteger(d)||d<40||d%8!=0)throw new n.FormatError("invalid key length");const f=(0,n.stringToBytes)(i.get("O")),g=(0,n.stringToBytes)(i.get("U")),p=f.subarray(0,32),y=g.subarray(0,32),w=i.get("P"),v=i.get("R"),x=(4===u||5===u)&&!1!==i.get("EncryptMetadata");this.encryptMetadata=x;const S=(0,n.stringToBytes)(c);let A,k;if(l){if(6===v)try{l=(0,n.utf8StringToString)(l)}catch(e){(0,n.warn)("CipherTransformFactory: Unable to convert UTF8 encoded password.")}A=(0,n.stringToBytes)(l)}if(5!==u)k=t(S,A,p,y,w,v,d,x);else{const e=f.subarray(32,40),t=f.subarray(40,48),r=g.subarray(0,48),a=g.subarray(32,40),s=g.subarray(40,48),o=(0,n.stringToBytes)(i.get("OE")),c=(0,n.stringToBytes)(i.get("UE"));(0,n.stringToBytes)(i.get("Perms")),k=function(e,t,r,n,a,i,s,o,c,l,h,u){if(t){const e=Math.min(127,t.length);t=t.subarray(0,e)}else t=[];const d=6===e?new b:new m;return d.checkUserPassword(t,o,s)?d.getUserKey(t,c,h):t.length&&d.checkOwnerPassword(t,n,i,r)?d.getOwnerKey(t,a,i,l):null}(v,A,p,e,t,r,y,a,s,o,c)}if(!k&&!l)throw new n.PasswordException("No password given",n.PasswordResponses.NEED_PASSWORD);if(!k&&l){const r=function(t,r,n,a){const i=new Uint8Array(32);let c=0;const l=Math.min(32,t.length);for(;c>3;if(n>=3)for(h=0;h<50;++h)u=o(u,0,u.length);let f,g;if(n>=3){g=r;const e=new Uint8Array(d);for(h=19;h>=0;h--){for(let t=0;t=4){const e=i.get("CF");e instanceof a.Dict&&(e.suppressEncryption=!0),this.cf=e,this.stmf=i.get("StmF")||r,this.strf=i.get("StrF")||r,this.eff=i.get("EFF")||this.stmf}}createCipherTransform(e,t){if(4===this.algorithm||5===this.algorithm)return new y(c(this.cf,this.strf,e,t,this.encryptionKey),c(this.cf,this.stmf,e,t,this.encryptionKey));const r=i(e,t,this.encryptionKey,!1),n=function(){return new s(r)};return new y(n,n)}}}();t.CipherTransformFactory=w},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.DecryptStream=void 0;var n=r(168);class a extends n.DecodeStream{constructor(e,t,r){super(t),this.str=e,this.dict=e.dict,this.decrypt=r,this.nextChunk=null,this.initialized=!1}readBlock(){var e;let t;if(this.initialized?t=this.nextChunk:(t=this.str.getBytes(512),this.initialized=!0),!t||0===t.length)return void(this.eof=!0);this.nextChunk=this.str.getBytes(512);const r=(null===(e=this.nextChunk)||void 0===e?void 0:e.length)>0;t=(0,this.decrypt)(t,!r);const n=this.bufferLength,a=n+t.length;this.ensureBuffer(a).set(t,n),this.bufferLength=a}}t.DecryptStream=a},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Catalog=void 0,r(84),r(93),r(94),r(97),r(99),r(101),r(105),r(108),r(115),r(139),r(2);var n=r(149),a=r(144),i=r(150),s=r(221),o=r(151),c=r(222),l=r(162),h=r(223),u=r(209),d=r(224),f=r(225);function g(e){return e instanceof i.Dict&&(e=e.get("D")),Array.isArray(e)?e:null}class p{constructor(e,t){if(this.pdfManager=e,this.xref=t,this._catDict=t.getCatalogObj(),!(this._catDict instanceof i.Dict))throw new a.FormatError("Catalog object is not a dictionary.");this.toplevelPagesDict,this._actualNumPages=null,this.fontCache=new i.RefSetCache,this.builtInCMapCache=new Map,this.standardFontDataCache=new Map,this.globalImageCache=new u.GlobalImageCache,this.pageKidsCountCache=new i.RefSetCache,this.pageIndexCache=new i.RefSetCache,this.nonBlendModesSet=new i.RefSet,this.systemFontCache=new Map}get version(){const e=this._catDict.get("Version");if(e instanceof i.Name){if(n.PDF_VERSION_REGEXP.test(e.name))return(0,a.shadow)(this,"version",e.name);(0,a.warn)("Invalid PDF catalog version: ".concat(e.name))}return(0,a.shadow)(this,"version",null)}get lang(){const e=this._catDict.get("Lang");return(0,a.shadow)(this,"lang","string"==typeof e?(0,a.stringToPDFString)(e):null)}get needsRendering(){const e=this._catDict.get("NeedsRendering");return(0,a.shadow)(this,"needsRendering","boolean"==typeof e&&e)}get collection(){let e=null;try{const t=this._catDict.get("Collection");t instanceof i.Dict&&t.size>0&&(e=t)}catch(e){if(e instanceof n.MissingDataException)throw e;(0,a.info)("Cannot fetch Collection entry; assuming no collection is present.")}return(0,a.shadow)(this,"collection",e)}get acroForm(){let e=null;try{const t=this._catDict.get("AcroForm");t instanceof i.Dict&&t.size>0&&(e=t)}catch(e){if(e instanceof n.MissingDataException)throw e;(0,a.info)("Cannot fetch AcroForm entry; assuming no forms are present.")}return(0,a.shadow)(this,"acroForm",e)}get acroFormRef(){const e=this._catDict.getRaw("AcroForm");return(0,a.shadow)(this,"acroFormRef",e instanceof i.Ref?e:null)}get metadata(){const e=this._catDict.getRaw("Metadata");if(!(e instanceof i.Ref))return(0,a.shadow)(this,"metadata",null);let t=null;try{var r;const n=this.xref.fetch(e,!(null!==(r=this.xref.encrypt)&&void 0!==r&&r.encryptMetadata));if(n instanceof o.BaseStream&&n.dict instanceof i.Dict){const e=n.dict.get("Type"),r=n.dict.get("Subtype");if((0,i.isName)(e,"Metadata")&&(0,i.isName)(r,"XML")){const e=(0,a.stringToUTF8String)(n.getString());e&&(t=new d.MetadataParser(e).serializable)}}}catch(e){if(e instanceof n.MissingDataException)throw e;(0,a.info)('Skipping invalid Metadata: "'.concat(e,'".'))}return(0,a.shadow)(this,"metadata",t)}get markInfo(){let e=null;try{e=this._readMarkInfo()}catch(e){if(e instanceof n.MissingDataException)throw e;(0,a.warn)("Unable to read mark info.")}return(0,a.shadow)(this,"markInfo",e)}_readMarkInfo(){const e=this._catDict.get("MarkInfo");if(!(e instanceof i.Dict))return null;const t={Marked:!1,UserProperties:!1,Suspects:!1};for(const r in t){const n=e.get(r);"boolean"==typeof n&&(t[r]=n)}return t}get structTreeRoot(){let e=null;try{e=this._readStructTreeRoot()}catch(e){if(e instanceof n.MissingDataException)throw e;(0,a.warn)("Unable read to structTreeRoot info.")}return(0,a.shadow)(this,"structTreeRoot",e)}_readStructTreeRoot(){const e=this._catDict.get("StructTreeRoot");if(!(e instanceof i.Dict))return null;const t=new f.StructTreeRoot(e);return t.init(),t}get toplevelPagesDict(){const e=this._catDict.get("Pages");if(!(e instanceof i.Dict))throw new a.FormatError("Invalid top-level pages dictionary.");return(0,a.shadow)(this,"toplevelPagesDict",e)}get documentOutline(){let e=null;try{e=this._readDocumentOutline()}catch(e){if(e instanceof n.MissingDataException)throw e;(0,a.warn)("Unable to read document outline.")}return(0,a.shadow)(this,"documentOutline",e)}_readDocumentOutline(){let e=this._catDict.get("Outlines");if(!(e instanceof i.Dict))return null;if(e=e.getRaw("First"),!(e instanceof i.Ref))return null;const t={items:[]},r=[{obj:e,parent:t}],n=new i.RefSet;n.put(e);const s=this.xref,o=new Uint8ClampedArray(3);for(;r.length>0;){const t=r.shift(),c=s.fetchIfRef(t.obj);if(null===c)continue;if(!c.has("Title"))throw new a.FormatError("Invalid outline item encountered.");const h={url:null,dest:null,action:null};p.parseDestDictionary({destDict:c,resultObj:h,docBaseUrl:this.pdfManager.docBaseUrl,docAttachments:this.attachments});const u=c.get("Title"),d=c.get("F")||0,f=c.getArray("C"),g=c.get("Count");let m=o;!Array.isArray(f)||3!==f.length||0===f[0]&&0===f[1]&&0===f[2]||(m=l.ColorSpace.singletons.rgb.getRgb(f,0));const b={action:h.action,attachment:h.attachment,dest:h.dest,url:h.url,unsafeUrl:h.unsafeUrl,newWindow:h.newWindow,setOCGState:h.setOCGState,title:(0,a.stringToPDFString)(u),color:m,count:Number.isInteger(g)?g:void 0,bold:!!(2&d),italic:!!(1&d),items:[]};t.parent.items.push(b),e=c.getRaw("First"),e instanceof i.Ref&&!n.has(e)&&(r.push({obj:e,parent:b}),n.put(e)),e=c.getRaw("Next"),e instanceof i.Ref&&!n.has(e)&&(r.push({obj:e,parent:t.parent}),n.put(e))}return t.items.length>0?t.items:null}get permissions(){let e=null;try{e=this._readPermissions()}catch(e){if(e instanceof n.MissingDataException)throw e;(0,a.warn)("Unable to read permissions.")}return(0,a.shadow)(this,"permissions",e)}_readPermissions(){const e=this.xref.trailer.get("Encrypt");if(!(e instanceof i.Dict))return null;let t=e.get("P");if("number"!=typeof t)return null;t+=2**32;const r=[];for(const e in a.PermissionFlag){const n=a.PermissionFlag[e];t&n&&r.push(n)}return r}get optionalContentConfig(){let e=null;try{const t=this._catDict.get("OCProperties");if(!t)return(0,a.shadow)(this,"optionalContentConfig",null);const r=t.get("D");if(!r)return(0,a.shadow)(this,"optionalContentConfig",null);const n=t.get("OCGs");if(!Array.isArray(n))return(0,a.shadow)(this,"optionalContentConfig",null);const s=[],o=[];for(const e of n){if(!(e instanceof i.Ref))continue;o.push(e);const t=this.xref.fetchIfRef(e);s.push({id:e.toString(),name:"string"==typeof t.get("Name")?(0,a.stringToPDFString)(t.get("Name")):null,intent:"string"==typeof t.get("Intent")?(0,a.stringToPDFString)(t.get("Intent")):null})}e=this._readOptionalContentConfig(r,o),e.groups=s}catch(e){if(e instanceof n.MissingDataException)throw e;(0,a.warn)("Unable to read optional content config: ".concat(e))}return(0,a.shadow)(this,"optionalContentConfig",e)}_readOptionalContentConfig(e,t){function r(e){const r=[];if(Array.isArray(e))for(const n of e)n instanceof i.Ref&&t.includes(n)&&r.push(n.toString());return r}function n(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;if(!Array.isArray(e))return null;const n=[];for(const a of e){if(a instanceof i.Ref&&t.includes(a)){c.put(a),n.push(a.toString());continue}const e=s(a,r);e&&n.push(e)}if(r>0)return n;const a=[];for(const e of t)c.has(e)||a.push(e.toString());return a.length&&n.push({name:null,order:a}),n}function s(e,t){if(++t>l)return(0,a.warn)("parseNestedOrder - reached MAX_NESTED_LEVELS."),null;const r=o.fetchIfRef(e);if(!Array.isArray(r))return null;const i=o.fetchIfRef(r[0]);if("string"!=typeof i)return null;const s=n(r.slice(1),t);return s&&s.length?{name:(0,a.stringToPDFString)(i),order:s}:null}const o=this.xref,c=new i.RefSet,l=10;return{name:"string"==typeof e.get("Name")?(0,a.stringToPDFString)(e.get("Name")):null,creator:"string"==typeof e.get("Creator")?(0,a.stringToPDFString)(e.get("Creator")):null,baseState:e.get("BaseState")instanceof i.Name?e.get("BaseState").name:null,on:r(e.get("ON")),off:r(e.get("OFF")),order:n(e.get("Order")),groups:null}}setActualNumPages(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;this._actualNumPages=e}get hasActualNumPages(){return null!==this._actualNumPages}get _pagesCount(){const e=this.toplevelPagesDict.get("Count");if(!Number.isInteger(e))throw new a.FormatError("Page count in top-level pages dictionary is not an integer.");return(0,a.shadow)(this,"_pagesCount",e)}get numPages(){return this.hasActualNumPages?this._actualNumPages:this._pagesCount}get destinations(){const e=this._readDests(),t=Object.create(null);if(e instanceof s.NameTree)for(const[r,n]of e.getAll()){const e=g(n);e&&(t[(0,a.stringToPDFString)(r)]=e)}else e instanceof i.Dict&&e.forEach((function(e,r){const n=g(r);n&&(t[e]=n)}));return(0,a.shadow)(this,"destinations",t)}getDestination(e){const t=this._readDests();if(t instanceof s.NameTree){const r=g(t.get(e));if(r)return r;const n=this.destinations[e];if(n)return(0,a.warn)('Found "'.concat(e,'" at an incorrect position in the NameTree.')),n}else if(t instanceof i.Dict){const r=g(t.get(e));if(r)return r}return null}_readDests(){const e=this._catDict.get("Names");return null!=e&&e.has("Dests")?new s.NameTree(e.getRaw("Dests"),this.xref):this._catDict.has("Dests")?this._catDict.get("Dests"):void 0}get pageLabels(){let e=null;try{e=this._readPageLabels()}catch(e){if(e instanceof n.MissingDataException)throw e;(0,a.warn)("Unable to read page labels.")}return(0,a.shadow)(this,"pageLabels",e)}_readPageLabels(){const e=this._catDict.getRaw("PageLabels");if(!e)return null;const t=new Array(this.numPages);let r=null,o="";const c=new s.NumberTree(e,this.xref).getAll();let l="",h=1;for(let e=0,s=this.numPages;e=1))throw new a.FormatError("Invalid start in PageLabel dictionary.");h=e}else h=1}switch(r){case"D":l=h;break;case"R":case"r":l=(0,n.toRomanNumerals)(h,"r"===r);break;case"A":case"a":const e=26,t="a"===r?97:65,i=h-1;l=String.fromCharCode(t+i%e).repeat(Math.floor(i/e)+1);break;default:if(r)throw new a.FormatError('Invalid style "'.concat(r,'" in PageLabel dictionary.'));l=""}t[e]=o+l,h++}return t}get pageLayout(){const e=this._catDict.get("PageLayout");let t="";if(e instanceof i.Name)switch(e.name){case"SinglePage":case"OneColumn":case"TwoColumnLeft":case"TwoColumnRight":case"TwoPageLeft":case"TwoPageRight":t=e.name}return(0,a.shadow)(this,"pageLayout",t)}get pageMode(){const e=this._catDict.get("PageMode");let t="UseNone";if(e instanceof i.Name)switch(e.name){case"UseNone":case"UseOutlines":case"UseThumbs":case"FullScreen":case"UseOC":case"UseAttachments":t=e.name}return(0,a.shadow)(this,"pageMode",t)}get viewerPreferences(){const e=this._catDict.get("ViewerPreferences");if(!(e instanceof i.Dict))return(0,a.shadow)(this,"viewerPreferences",null);let t=null;for(const r of e.getKeys()){const n=e.get(r);let s;switch(r){case"HideToolbar":case"HideMenubar":case"HideWindowUI":case"FitWindow":case"CenterWindow":case"DisplayDocTitle":case"PickTrayByPDFSize":"boolean"==typeof n&&(s=n);break;case"NonFullScreenPageMode":if(n instanceof i.Name)switch(n.name){case"UseNone":case"UseOutlines":case"UseThumbs":case"UseOC":s=n.name;break;default:s="UseNone"}break;case"Direction":if(n instanceof i.Name)switch(n.name){case"L2R":case"R2L":s=n.name;break;default:s="L2R"}break;case"ViewArea":case"ViewClip":case"PrintArea":case"PrintClip":if(n instanceof i.Name)switch(n.name){case"MediaBox":case"CropBox":case"BleedBox":case"TrimBox":case"ArtBox":s=n.name;break;default:s="CropBox"}break;case"PrintScaling":if(n instanceof i.Name)switch(n.name){case"None":case"AppDefault":s=n.name;break;default:s="AppDefault"}break;case"Duplex":if(n instanceof i.Name)switch(n.name){case"Simplex":case"DuplexFlipShortEdge":case"DuplexFlipLongEdge":s=n.name;break;default:s="None"}break;case"PrintPageRange":Array.isArray(n)&&n.length%2==0&&n.every(((e,t,r)=>Number.isInteger(e)&&e>0&&(0===t||e>=r[t-1])&&e<=this.numPages))&&(s=n);break;case"NumCopies":Number.isInteger(n)&&n>0&&(s=n);break;default:(0,a.warn)("Ignoring non-standard key in ViewerPreferences: ".concat(r,"."));continue}void 0!==s?(t||(t=Object.create(null)),t[r]=s):(0,a.warn)('Bad value, for key "'.concat(r,'", in ViewerPreferences: ').concat(n,"."))}return(0,a.shadow)(this,"viewerPreferences",t)}get openAction(){const e=this._catDict.get("OpenAction"),t=Object.create(null);if(e instanceof i.Dict){const r=new i.Dict(this.xref);r.set("A",e);const n={url:null,dest:null,action:null};p.parseDestDictionary({destDict:r,resultObj:n}),Array.isArray(n.dest)?t.dest=n.dest:n.action&&(t.action=n.action)}else Array.isArray(e)&&(t.dest=e);return(0,a.shadow)(this,"openAction",(0,a.objectSize)(t)>0?t:null)}get attachments(){const e=this._catDict.get("Names");let t=null;if(e instanceof i.Dict&&e.has("EmbeddedFiles")){const r=new s.NameTree(e.getRaw("EmbeddedFiles"),this.xref);for(const[e,n]of r.getAll()){const r=new h.FileSpec(n,this.xref);t||(t=Object.create(null)),t[(0,a.stringToPDFString)(e)]=r.serializable}}return(0,a.shadow)(this,"attachments",t)}get xfaImages(){const e=this._catDict.get("Names");let t=null;if(e instanceof i.Dict&&e.has("XFAImages")){const r=new s.NameTree(e.getRaw("XFAImages"),this.xref);for(const[e,n]of r.getAll())t||(t=new i.Dict(this.xref)),t.set((0,a.stringToPDFString)(e),n)}return(0,a.shadow)(this,"xfaImages",t)}_collectJavaScript(){const e=this._catDict.get("Names");let t=null;function r(e,r){if(!(r instanceof i.Dict))return;if(!(0,i.isName)(r.get("S"),"JavaScript"))return;let n=r.get("JS");if(n instanceof o.BaseStream)n=n.getString();else if("string"!=typeof n)return;n=(0,a.stringToPDFString)(n).replaceAll("\\0",""),(t||(t=new Map)).set(e,n)}if(e instanceof i.Dict&&e.has("JavaScript")){const t=new s.NameTree(e.getRaw("JavaScript"),this.xref);for(const[e,n]of t.getAll())r((0,a.stringToPDFString)(e),n)}const n=this._catDict.get("OpenAction");return n&&r("OpenAction",n),t}get javaScript(){const e=this._collectJavaScript();return(0,a.shadow)(this,"javaScript",e?[...e.values()]:null)}get jsActions(){const e=this._collectJavaScript();let t=(0,n.collectActions)(this.xref,this._catDict,a.DocumentActionEventType);if(e){t||(t=Object.create(null));for(const[r,n]of e)r in t?t[r].push(n):t[r]=[n]}return(0,a.shadow)(this,"jsActions",t)}async fontFallback(e,t){const r=await Promise.all(this.fontCache);for(const n of r)if(n.loadedName===e)return void n.fallback(t)}async cleanup(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];(0,c.clearGlobalCaches)(),this.globalImageCache.clear(e),this.pageKidsCountCache.clear(),this.pageIndexCache.clear(),this.nonBlendModesSet.clear();const t=await Promise.all(this.fontCache);for(const{dict:e}of t)delete e.cacheKey;this.fontCache.clear(),this.builtInCMapCache.clear(),this.standardFontDataCache.clear(),this.systemFontCache.clear()}async getPageDict(e){const t=[this.toplevelPagesDict],r=new i.RefSet,n=this._catDict.getRaw("Pages");n instanceof i.Ref&&r.put(n);const s=this.xref,o=this.pageKidsCountCache,c=this.pageIndexCache;let l=0;for(;t.length;){const n=t.pop();if(n instanceof i.Ref){const h=o.get(n);if(h>=0&&l+h<=e){l+=h;continue}if(r.has(n))throw new a.FormatError("Pages tree contains circular reference.");r.put(n);const u=await s.fetchAsync(n);if(u instanceof i.Dict){let t=u.getRaw("Type");if(t instanceof i.Ref&&(t=await s.fetchAsync(t)),(0,i.isName)(t,"Page")||!u.has("Kids")){if(o.has(n)||o.put(n,1),c.has(n)||c.put(n,l),l===e)return[u,n];l++;continue}}t.push(u);continue}if(!(n instanceof i.Dict))throw new a.FormatError("Page dictionary kid reference points to wrong type of object.");const{objId:h}=n;let u=n.getRaw("Count");if(u instanceof i.Ref&&(u=await s.fetchAsync(u)),Number.isInteger(u)&&u>=0&&(h&&!o.has(h)&&o.put(h,u),l+u<=e)){l+=u;continue}let d=n.getRaw("Kids");if(d instanceof i.Ref&&(d=await s.fetchAsync(d)),!Array.isArray(d)){let t=n.getRaw("Type");if(t instanceof i.Ref&&(t=await s.fetchAsync(t)),(0,i.isName)(t,"Page")||!n.has("Kids")){if(l===e)return[n,null];l++;continue}throw new a.FormatError("Page dictionary kids object is not an array.")}for(let e=d.length-1;e>=0;e--)t.push(d[e])}throw new Error("Page index ".concat(e," not found."))}async getAllPageDicts(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const{ignoreErrors:t}=this.pdfManager.evaluatorOptions,r=[{currentNode:this.toplevelPagesDict,posInKids:0}],s=new i.RefSet,o=this._catDict.getRaw("Pages");o instanceof i.Ref&&s.put(o);const c=new Map,l=this.xref,h=this.pageIndexCache;let u=0;function d(e,t){t&&!h.has(t)&&h.put(t,u),c.set(u++,[e,t])}function f(r){if(r instanceof n.XRefEntryException&&!e)throw r;e&&t&&0===u&&((0,a.warn)('getAllPageDicts - Skipping invalid first page: "'.concat(r,'".')),r=i.Dict.empty),c.set(u++,[r,null])}for(;r.length>0;){const t=r.at(-1),{currentNode:n,posInKids:o}=t;let c=n.getRaw("Kids");if(c instanceof i.Ref)try{c=await l.fetchAsync(c)}catch(e){f(e);break}if(!Array.isArray(c)){f(new a.FormatError("Page dictionary kids object is not an array."));break}if(o>=c.length){r.pop();continue}const h=c[o];let u;if(h instanceof i.Ref){if(s.has(h)){f(new a.FormatError("Pages tree contains circular reference."));break}s.put(h);try{u=await l.fetchAsync(h)}catch(e){f(e);break}}else u=h;if(!(u instanceof i.Dict)){f(new a.FormatError("Page dictionary kid reference points to wrong type of object."));break}let g=u.getRaw("Type");if(g instanceof i.Ref)try{g=await l.fetchAsync(g)}catch(e){f(e);break}(0,i.isName)(g,"Page")||!u.has("Kids")?d(u,h instanceof i.Ref?h:null):r.push({currentNode:u,posInKids:0}),t.posInKids++}return c}getPageIndex(e){const t=this.pageIndexCache.get(e);if(void 0!==t)return Promise.resolve(t);const r=this.xref;let n=0;const s=t=>function(t){let n,s=0;return r.fetchAsync(t).then((function(r){if((0,i.isRefsEqual)(t,e)&&!(0,i.isDict)(r,"Page")&&!(r instanceof i.Dict&&!r.has("Type")&&r.has("Contents")))throw new a.FormatError("The reference does not point to a /Page dictionary.");if(!r)return null;if(!(r instanceof i.Dict))throw new a.FormatError("Node must be a dictionary.");return n=r.getRaw("Parent"),r.getAsync("Parent")})).then((function(e){if(!e)return null;if(!(e instanceof i.Dict))throw new a.FormatError("Parent must be a dictionary.");return e.getAsync("Kids")})).then((function(e){if(!e)return null;const o=[];let c=!1;for(const n of e){if(!(n instanceof i.Ref))throw new a.FormatError("Kid must be a reference.");if((0,i.isRefsEqual)(n,t)){c=!0;break}o.push(r.fetchAsync(n).then((function(e){if(!(e instanceof i.Dict))throw new a.FormatError("Kid node must be a dictionary.");e.has("Count")?s+=e.get("Count"):s++})))}if(!c)throw new a.FormatError("Kid reference not found in parent's kids.");return Promise.all(o).then((function(){return[s,n]}))}))}(t).then((t=>{if(!t)return this.pageIndexCache.put(e,n),n;const[r,a]=t;return n+=r,s(a)}));return s(e)}get baseUrl(){const e=this._catDict.get("URI");if(e instanceof i.Dict){const t=e.get("Base");if("string"==typeof t){const e=(0,a.createValidAbsoluteUrl)(t,null,{tryConvertEncoding:!0});if(e)return(0,a.shadow)(this,"baseUrl",e.href)}}return(0,a.shadow)(this,"baseUrl",null)}static parseDestDictionary(e){const t=e.destDict;if(!(t instanceof i.Dict))return void(0,a.warn)("parseDestDictionary: \`destDict\` must be a dictionary.");const r=e.resultObj;if("object"!=typeof r)return void(0,a.warn)("parseDestDictionary: \`resultObj\` must be an object.");const s=e.docBaseUrl||null,c=e.docAttachments||null;let l,h,u=t.get("A");if(u instanceof i.Dict||(t.has("Dest")?u=t.get("Dest"):(u=t.get("AA"),u instanceof i.Dict&&(u.has("D")?u=u.get("D"):u.has("U")&&(u=u.get("U"))))),u instanceof i.Dict){const e=u.get("S");if(!(e instanceof i.Name))return void(0,a.warn)("parseDestDictionary: Invalid type in Action dictionary.");const t=e.name;switch(t){case"ResetForm":const e=u.get("Flags"),s=0==(1&("number"==typeof e?e:0)),d=[],f=[];for(const e of u.get("Fields")||[])e instanceof i.Ref?f.push(e.toString()):"string"==typeof e&&d.push((0,a.stringToPDFString)(e));r.resetForm={fields:d,refs:f,include:s};break;case"URI":l=u.get("URI"),l instanceof i.Name&&(l="/"+l.name);break;case"GoTo":h=u.get("D");break;case"Launch":case"GoToR":const g=u.get("F");g instanceof i.Dict?l=g.get("F")||null:"string"==typeof g&&(l=g);let p=u.get("D");if(p&&(p instanceof i.Name&&(p=p.name),"string"==typeof l)){const e=l.split("#")[0];"string"==typeof p?l=e+"#"+p:Array.isArray(p)&&(l=e+"#"+JSON.stringify(p))}const m=u.get("NewWindow");"boolean"==typeof m&&(r.newWindow=m);break;case"GoToE":const b=u.get("T");let y;if(c&&b instanceof i.Dict){const e=b.get("R"),t=b.get("N");(0,i.isName)(e,"C")&&"string"==typeof t&&(y=c[(0,a.stringToPDFString)(t)])}y?r.attachment=y:(0,a.warn)('parseDestDictionary - unimplemented "GoToE" action.');break;case"Named":const w=u.get("N");w instanceof i.Name&&(r.action=w.name);break;case"SetOCGState":const v=u.get("State"),x=u.get("PreserveRB");if(!Array.isArray(v)||0===v.length)break;const S=[];for(const e of v)if(e instanceof i.Name)switch(e.name){case"ON":case"OFF":case"Toggle":S.push(e.name)}else e instanceof i.Ref&&S.push(e.toString());if(S.length!==v.length)break;r.setOCGState={state:S,preserveRB:"boolean"!=typeof x||x};break;case"JavaScript":const A=u.get("JS");let k;A instanceof o.BaseStream?k=A.getString():"string"==typeof A&&(k=A);const C=k&&(0,n.recoverJsURL)((0,a.stringToPDFString)(k));if(C){l=C.url,r.newWindow=C.newWindow;break}default:if("JavaScript"===t||"SubmitForm"===t)break;(0,a.warn)('parseDestDictionary - unsupported action: "'.concat(t,'".'))}}else t.has("Dest")&&(h=t.get("Dest"));if("string"==typeof l){const e=(0,a.createValidAbsoluteUrl)(l,s,{addDefaultProtocol:!0,tryConvertEncoding:!0});e&&(r.url=e.href),r.unsafeUrl=l}h&&(h instanceof i.Name&&(h=h.name),"string"==typeof h?r.dest=(0,a.stringToPDFString)(h):Array.isArray(h)&&(r.dest=h))}}t.Catalog=p},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.NumberTree=t.NameTree=void 0,r(139);var n=r(150),a=r(144);class i{constructor(e,t,r){this.constructor===i&&(0,a.unreachable)("Cannot initialize NameOrNumberTree."),this.root=e,this.xref=t,this._type=r}getAll(){const e=new Map;if(!this.root)return e;const t=this.xref,r=new n.RefSet;r.put(this.root);const i=[this.root];for(;i.length>0;){const s=t.fetchIfRef(i.shift());if(!(s instanceof n.Dict))continue;if(s.has("Kids")){const e=s.get("Kids");if(!Array.isArray(e))continue;for(const t of e){if(r.has(t))throw new a.FormatError('Duplicate entry in "'.concat(this._type,'" tree.'));i.push(t),r.put(t)}continue}const o=s.get(this._type);if(Array.isArray(o))for(let r=0,n=o.length;r10)return(0,a.warn)('Search depth limit reached for "'.concat(this._type,'" tree.')),null;const i=r.get("Kids");if(!Array.isArray(i))return null;let s=0,o=i.length-1;for(;s<=o;){const n=s+o>>1,a=t.fetchIfRef(i[n]),c=a.get("Limits");if(et.fetchIfRef(c[1]))){r=a;break}s=n+1}}if(s>o)return null}const i=r.get(this._type);if(Array.isArray(i)){let r=0,n=i.length-2;for(;r<=n;){const a=r+n>>1,s=a+(1&a),o=t.fetchIfRef(i[s]);if(eo))return t.fetchIfRef(i[s+1]);r=s+2}}}return null}}t.NameTree=class extends i{constructor(e,t){super(e,t,"Names")}},t.NumberTree=class extends i{constructor(e,t){super(e,t,"Nums")}}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.clearGlobalCaches=function(){(0,n.clearPrimitiveCaches)(),(0,a.clearUnicodeCaches)()};var n=r(150),a=r(190)},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.FileSpec=void 0;var n=r(144),a=r(151),i=r(150);function s(e){return e.has("UF")?e.get("UF"):e.has("F")?e.get("F"):e.has("Unix")?e.get("Unix"):e.has("Mac")?e.get("Mac"):e.has("DOS")?e.get("DOS"):null}t.FileSpec=class{constructor(e,t){e instanceof i.Dict&&(this.xref=t,this.root=e,e.has("FS")&&(this.fs=e.get("FS")),this.description=e.has("Desc")?(0,n.stringToPDFString)(e.get("Desc")):"",e.has("RF")&&(0,n.warn)("Related file specifications are not supported"),this.contentAvailable=!0,e.has("EF")||(this.contentAvailable=!1,(0,n.warn)("Non-embedded file specifications are not supported")))}get filename(){if(!this._filename&&this.root){const e=s(this.root)||"unnamed";this._filename=(0,n.stringToPDFString)(e).replaceAll("\\\\\\\\","\\\\").replaceAll("\\\\/","/").replaceAll("\\\\","/")}return this._filename}get content(){if(!this.contentAvailable)return null;!this.contentRef&&this.root&&(this.contentRef=s(this.root.get("EF")));let e=null;if(this.contentRef){const t=this.xref.fetchIfRef(this.contentRef);t instanceof a.BaseStream?e=t.getBytes():(0,n.warn)("Embedded file specification points to non-existing/invalid content")}else(0,n.warn)("Embedded file specification does not have a content");return e}get serializable(){return{filename:this.filename,content:this.content}}}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.MetadataParser=void 0,r(2),r(139);var n=r(217);t.MetadataParser=class{constructor(e){e=this._repair(e);const t=new n.SimpleXMLParser({lowerCaseName:!0}).parseFromString(e);this._metadataMap=new Map,this._data=e,t&&this._parse(t)}_repair(e){return e.replace(/^[^<]+/,"").replaceAll(/>\\\\376\\\\377([^<]+)/g,(function(e,t){const r=t.replaceAll(/\\\\([0-3])([0-7])([0-7])/g,(function(e,t,r,n){return String.fromCharCode(64*t+8*r+1*n)})).replaceAll(/&(amp|apos|gt|lt|quot);/g,(function(e,t){switch(t){case"amp":return"&";case"apos":return"'";case"gt":return">";case"lt":return"<";case"quot":return'"'}throw new Error("_repair: ".concat(t," isn't defined."))})),n=[">"];for(let e=0,t=r.length;e=32&&t<127&&60!==t&&62!==t&&38!==t?n.push(String.fromCharCode(t)):n.push("&#x"+(65536+t).toString(16).substring(1)+";")}return n.join("")}))}_getSequence(e){const t=e.nodeName;return"rdf:bag"!==t&&"rdf:seq"!==t&&"rdf:alt"!==t?null:e.childNodes.filter((e=>"rdf:li"===e.nodeName))}_parseArray(e){if(!e.hasChildNodes())return;const[t]=e.childNodes,r=this._getSequence(t)||[];this._metadataMap.set(e.nodeName,r.map((e=>e.textContent.trim())))}_parse(e){let t=e.documentElement;if("rdf:rdf"!==t.nodeName)for(t=t.firstChild;t&&"rdf:rdf"!==t.nodeName;)t=t.nextSibling;if(t&&"rdf:rdf"===t.nodeName&&t.hasChildNodes())for(const e of t.childNodes)if("rdf:description"===e.nodeName)for(const t of e.childNodes){const e=t.nodeName;switch(e){case"#text":continue;case"dc:creator":case"dc:subject":this._parseArray(t);continue}this._metadataMap.set(e,t.textContent.trim())}}get serializable(){return{parsedData:this._metadataMap,rawData:this._data}}}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.StructTreeRoot=t.StructTreePage=void 0,r(139);var n=r(150),a=r(144),i=r(221);const s="PAGE_CONTENT",o="STREAM_CONTENT",c="OBJECT",l="ELEMENT";t.StructTreeRoot=class{constructor(e){this.dict=e,this.roleMap=new Map}init(){this.readRoleMap()}readRoleMap(){const e=this.dict.get("RoleMap");e instanceof n.Dict&&e.forEach(((e,t)=>{t instanceof n.Name&&this.roleMap.set(e,t.name)}))}};class h{constructor(e,t){this.tree=e,this.dict=t,this.kids=[],this.parseKids()}get role(){const e=this.dict.get("S"),t=e instanceof n.Name?e.name:"",{root:r}=this.tree;return r.roleMap.has(t)?r.roleMap.get(t):t}parseKids(){let e=null;const t=this.dict.getRaw("Pg");t instanceof n.Ref&&(e=t.toString());const r=this.dict.get("K");if(Array.isArray(r))for(const t of r){const r=this.parseKid(e,t);r&&this.kids.push(r)}else{const t=this.parseKid(e,r);t&&this.kids.push(t)}}parseKid(e,t){if(Number.isInteger(t))return this.tree.pageDict.objId!==e?null:new u({type:s,mcid:t,pageObjId:e});let r=null;if(t instanceof n.Ref?r=this.dict.xref.fetch(t):t instanceof n.Dict&&(r=t),!r)return null;const a=r.getRaw("Pg");a instanceof n.Ref&&(e=a.toString());const i=r.get("Type")instanceof n.Name?r.get("Type").name:null;return"MCR"===i?this.tree.pageDict.objId!==e?null:new u({type:o,refObjId:r.getRaw("Stm")instanceof n.Ref?r.getRaw("Stm").toString():null,pageObjId:e,mcid:r.get("MCID")}):"OBJR"===i?this.tree.pageDict.objId!==e?null:new u({type:c,refObjId:r.getRaw("Obj")instanceof n.Ref?r.getRaw("Obj").toString():null,pageObjId:e}):new u({type:l,dict:r})}}class u{constructor(e){let{type:t,dict:r=null,mcid:n=null,pageObjId:a=null,refObjId:i=null}=e;this.type=t,this.dict=r,this.mcid=n,this.pageObjId=a,this.refObjId=i,this.parentNode=null}}t.StructTreePage=class{constructor(e,t){this.root=e,this.rootDict=e?e.dict:null,this.pageDict=t,this.nodes=[]}parse(){if(!this.root||!this.rootDict)return;const e=this.rootDict.get("ParentTree");if(!e)return;const t=this.pageDict.get("StructParents");if(!Number.isInteger(t))return;const r=new i.NumberTree(e,this.rootDict.xref).get(t);if(!Array.isArray(r))return;const a=new Map;for(const e of r)e instanceof n.Ref&&this.addNode(this.rootDict.xref.fetch(e),a)}addNode(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;if(r>40)return(0,a.warn)("StructTree MAX_DEPTH reached."),null;if(t.has(e))return t.get(e);const i=new h(this,e);t.set(e,i);const s=e.get("P");if(!s||(0,n.isName)(s.get("Type"),"StructTreeRoot"))return this.addTopLevelNode(e,i)||t.delete(e),i;const o=this.addNode(s,t,r+1);if(!o)return i;let c=!1;for(const t of o.kids)t.type===l&&t.dict===e&&(t.parentNode=i,c=!0);return c||t.delete(e),i}addTopLevelNode(e,t){const r=this.rootDict.get("K");if(!r)return!1;if(r instanceof n.Dict)return r.objId===e.objId&&(this.nodes[0]=t,!0);if(!Array.isArray(r))return!0;let a=!1;for(let n=0;n2&&void 0!==arguments[2]?arguments[2]:0;if(n>40)return void(0,a.warn)("StructTree too deep to be fully serialized.");const i=Object.create(null);i.role=t.role,i.children=[],r.children.push(i);const h=t.dict.get("Alt");"string"==typeof h&&(i.alt=(0,a.stringToPDFString)(h));const u=t.dict.get("Lang");"string"==typeof u&&(i.lang=(0,a.stringToPDFString)(u));for(const r of t.kids){const t=r.type===l?r.parentNode:null;t?e(t,i,n+1):r.type===s||r.type===o?i.children.push({type:"content",id:"p".concat(r.pageObjId,"_mc").concat(r.mcid)}):r.type===c&&i.children.push({type:"object",id:r.refObjId})}}const t=Object.create(null);t.children=[],t.role="Root";for(const r of this.nodes)r&&e(r,t);return t}}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ObjectLoader=void 0,r(139);var n=r(150),a=r(151),i=r(149),s=r(144);function o(e,t){if(e instanceof n.Dict)e=e.getRawValues();else if(e instanceof a.BaseStream)e=e.dict.getRawValues();else if(!Array.isArray(e))return;for(const i of e)((r=i)instanceof n.Ref||r instanceof n.Dict||r instanceof a.BaseStream||Array.isArray(r))&&t.push(i);var r}t.ObjectLoader=class{constructor(e,t,r){this.dict=e,this.keys=t,this.xref=r,this.refSet=null}async load(){if(this.xref.stream.isDataLoaded)return;const{keys:e,dict:t}=this;this.refSet=new n.RefSet;const r=[];for(const n of e){const e=t.getRaw(n);void 0!==e&&r.push(e)}return this._walk(r)}async _walk(e){const t=[],r=[];for(;e.length;){let c=e.pop();if(c instanceof n.Ref){if(this.refSet.has(c))continue;try{this.refSet.put(c),c=this.xref.fetch(c)}catch(e){if(!(e instanceof i.MissingDataException)){(0,s.warn)('ObjectLoader._walk - requesting all data: "'.concat(e,'".')),this.refSet=null;const{manager:t}=this.xref.stream;return t.requestAllChunks()}t.push(c),r.push({begin:e.begin,end:e.end})}}if(c instanceof a.BaseStream){const e=c.getBaseStreams();if(e){let n=!1;for(const t of e)t.isDataLoaded||(n=!0,r.push({begin:t.start,end:t.end}));n&&t.push(c)}}o(c,e)}if(r.length){await this.xref.stream.manager.requestRanges(r);for(const e of t)e instanceof n.Ref&&this.refSet.remove(e);return this._walk(t)}this.refSet=null}}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.XFAFactory=void 0,r(139);var n=r(228),a=r(229),i=r(242),s=r(238),o=r(237),c=r(144),l=r(243),h=r(253);class u{constructor(e){try{this.root=(new l.XFAParser).parse(u._createDocument(e));const t=new a.Binder(this.root);this.form=t.bind(),this.dataHandler=new i.DataHandler(this.root,t.getData()),this.form[n.$globalData].template=this.form}catch(e){(0,c.warn)("XFA - an error occurred during parsing and binding: ".concat(e))}}isValid(){return this.root&&this.form}_createPagesHelper(){const e=this.form[n.$toPages]();return new Promise(((t,r)=>{const n=()=>{try{const r=e.next();r.done?t(r.value):setTimeout(n,0)}catch(e){r(e)}};setTimeout(n,0)}))}async _createPages(){try{this.pages=await this._createPagesHelper(),this.dims=this.pages.children.map((e=>{const{width:t,height:r}=e.attributes.style;return[0,0,parseInt(t),parseInt(r)]}))}catch(e){(0,c.warn)("XFA - an error occurred during layout: ".concat(e))}}getBoundingBox(e){return this.dims[e]}async getNumPages(){return this.pages||await this._createPages(),this.dims.length}setImages(e){this.form[n.$globalData].images=e}setFonts(e){this.form[n.$globalData].fontFinder=new s.FontFinder(e);const t=[];for(let e of this.form[n.$globalData].usedTypefaces)e=(0,o.stripQuotes)(e),this.form[n.$globalData].fontFinder.find(e)||t.push(e);return t.length>0?t:null}appendFonts(e,t){this.form[n.$globalData].fontFinder.add(e,t)}async getPages(){this.pages||await this._createPages();const e=this.pages;return this.pages=null,e}serializeData(e){return this.dataHandler.serialize(e)}static _createDocument(e){return e["/xdp:xdp"]?Object.values(e).join(""):e["xdp:xdp"]}static getRichTextAsHtml(e){if(!e||"string"!=typeof e)return null;try{let t=new l.XFAParser(h.XhtmlNamespace,!0).parse(e);if(!["body","xhtml"].includes(t[n.$nodeName])){const e=h.XhtmlNamespace.body({});e[n.$appendChild](t),t=e}const r=t[n.$toHTML]();if(!r.success)return null;const{html:a}=r,{attributes:i}=a;return i&&(i.class&&(i.class=i.class.filter((e=>!e.startsWith("xfa")))),i.dir="auto"),{html:a,str:t[n.$text]()}}catch(e){(0,c.warn)("XFA - an error occurred during parsing of rich text: ".concat(e))}return null}}t.XFAFactory=u},(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.$uid=t.$toStyle=t.$toString=t.$toPages=t.$toHTML=t.$text=t.$tabIndex=t.$setValue=t.$setSetAttributes=t.$setId=t.$searchNode=t.$root=t.$resolvePrototypes=t.$removeChild=t.$pushPara=t.$pushGlyphs=t.$popPara=t.$onText=t.$onChildCheck=t.$onChild=t.$nsAttributes=t.$nodeName=t.$namespaceId=t.$lastAttribute=t.$isUsable=t.$isTransparent=t.$isThereMoreWidth=t.$isSplittable=t.$isNsAgnostic=t.$isDescendent=t.$isDataValue=t.$isCDATAXml=t.$isBindable=t.$insertAt=t.$indexOf=t.$ids=t.$hasSettableValue=t.$globalData=t.$getTemplateRoot=t.$getSubformParent=t.$getRealChildrenByNameIt=t.$getParent=t.$getNextPage=t.$getExtra=t.$getDataValue=t.$getContainedChildren=t.$getChildrenByNameIt=t.$getChildrenByName=t.$getChildrenByClass=t.$getChildren=t.$getAvailableSpace=t.$getAttributes=t.$getAttributeIt=t.$flushHTML=t.$finalize=t.$extra=t.$dump=t.$data=t.$content=t.$consumed=t.$clone=t.$cleanup=t.$cleanPage=t.$clean=t.$childrenToHTML=t.$appendChild=t.$addHTML=t.$acceptWhitespace=void 0;const r=Symbol();t.$acceptWhitespace=r;const n=Symbol();t.$addHTML=n;const a=Symbol();t.$appendChild=a;const i=Symbol();t.$childrenToHTML=i;const s=Symbol();t.$clean=s;const o=Symbol();t.$cleanPage=o;const c=Symbol();t.$cleanup=c;const l=Symbol();t.$clone=l;const h=Symbol();t.$consumed=h;const u=Symbol("content");t.$content=u;const d=Symbol("data");t.$data=d;const f=Symbol();t.$dump=f;const g=Symbol("extra");t.$extra=g;const p=Symbol();t.$finalize=p;const m=Symbol();t.$flushHTML=m;const b=Symbol();t.$getAttributeIt=b;const y=Symbol();t.$getAttributes=y;const w=Symbol();t.$getAvailableSpace=w;const v=Symbol();t.$getChildrenByClass=v;const x=Symbol();t.$getChildrenByName=x;const S=Symbol();t.$getChildrenByNameIt=S;const A=Symbol();t.$getDataValue=A;const k=Symbol();t.$getExtra=k;const C=Symbol();t.$getRealChildrenByNameIt=C;const O=Symbol();t.$getChildren=O;const F=Symbol();t.$getContainedChildren=F;const I=Symbol();t.$getNextPage=I;const T=Symbol();t.$getSubformParent=T;const M=Symbol();t.$getParent=M;const E=Symbol();t.$getTemplateRoot=E;const P=Symbol();t.$globalData=P;const R=Symbol();t.$hasSettableValue=R;const N=Symbol();t.$ids=N;const D=Symbol();t.$indexOf=D;const B=Symbol();t.$insertAt=B;const L=Symbol();t.$isCDATAXml=L;const _=Symbol();t.$isBindable=_;const j=Symbol();t.$isDataValue=j;const U=Symbol();t.$isDescendent=U;const $=Symbol();t.$isNsAgnostic=$;const X=Symbol();t.$isSplittable=X;const H=Symbol();t.$isThereMoreWidth=H;const q=Symbol();t.$isTransparent=q;const z=Symbol();t.$isUsable=z;const G=Symbol();t.$lastAttribute=G;const W=Symbol("namespaceId");t.$namespaceId=W;const V=Symbol("nodeName");t.$nodeName=V;const K=Symbol();t.$nsAttributes=K;const Y=Symbol();t.$onChild=Y;const J=Symbol();t.$onChildCheck=J;const Z=Symbol();t.$onText=Z;const Q=Symbol();t.$pushGlyphs=Q;const ee=Symbol();t.$popPara=ee;const te=Symbol();t.$pushPara=te;const re=Symbol();t.$removeChild=re;const ne=Symbol("root");t.$root=ne;const ae=Symbol();t.$resolvePrototypes=ae;const ie=Symbol();t.$searchNode=ie;const se=Symbol();t.$setId=se;const oe=Symbol();t.$setSetAttributes=oe;const ce=Symbol();t.$setValue=ce;const le=Symbol();t.$tabIndex=le;const he=Symbol();t.$text=he;const ue=Symbol();t.$toPages=ue;const de=Symbol();t.$toHTML=de;const fe=Symbol();t.$toString=fe;const ge=Symbol();t.$toStyle=ge;const pe=Symbol("uid");t.$uid=pe},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Binder=void 0,r(139);var n=r(228),a=r(230),i=r(241),s=r(240),o=r(234),c=r(144);const l=o.NamespaceIds.datasets.id;function h(e){const t=new a.Text({});return t[n.$content]=e,t}t.Binder=class{constructor(e){var t;this.root=e,this.datasets=e.datasets,this.data=(null===(t=e.datasets)||void 0===t?void 0:t.data)||new s.XmlObject(o.NamespaceIds.datasets.id,"data"),this.emptyMerge=0===this.data[n.$getChildren]().length,this.root.form=this.form=e.template[n.$clone]()}_isConsumeData(){return!this.emptyMerge&&this._mergeMode}_isMatchTemplate(){return!this._isConsumeData()}bind(){return this._bindElement(this.form,this.data),this.form}getData(){return this.data}_bindValue(e,t,r){var i;if(e[n.$data]=t,e[n.$hasSettableValue]())if(t[n.$isDataValue]()){const r=t[n.$getDataValue]();e[n.$setValue](h(r))}else if(e instanceof a.Field&&"multiSelect"===(null===(i=e.ui)||void 0===i||null===(i=i.choiceList)||void 0===i?void 0:i.open)){const r=t[n.$getChildren]().map((e=>e[n.$content].trim())).join("\\n");e[n.$setValue](h(r))}else this._isConsumeData()&&(0,c.warn)("XFA - Nodes haven't the same type.");else!t[n.$isDataValue]()||this._isMatchTemplate()?this._bindElement(e,t):(0,c.warn)("XFA - Nodes haven't the same type.")}_findDataByNameToConsume(e,t,r,a){var i;if(!e)return null;let s,c;for(let a=0;a<3;a++){for(s=r[n.$getRealChildrenByNameIt](e,!1,!0);c=s.next().value,c;)if(t===c[n.$isDataValue]())return c;if(r[n.$namespaceId]===o.NamespaceIds.datasets.id&&"data"===r[n.$nodeName])break;r=r[n.$getParent]()}return a?(s=this.data[n.$getRealChildrenByNameIt](e,!0,!1),c=s.next().value,c||(s=this.data[n.$getAttributeIt](e,!0),c=s.next().value,null!==(i=c)&&void 0!==i&&i[n.$isDataValue]()?c:null)):null}_setProperties(e,t){if(e.hasOwnProperty("setProperty"))for(const{ref:r,target:o,connection:l}of e.setProperty.children){if(l)continue;if(!r)continue;const h=(0,i.searchNode)(this.root,t,r,!1,!1);if(!h){(0,c.warn)("XFA - Invalid reference: ".concat(r,"."));continue}const[u]=h;if(!u[n.$isDescendent](this.data)){(0,c.warn)("XFA - Invalid node: must be a data node.");continue}const d=(0,i.searchNode)(this.root,e,o,!1,!1);if(!d){(0,c.warn)("XFA - Invalid target: ".concat(o,"."));continue}const[f]=d;if(!f[n.$isDescendent](e)){(0,c.warn)("XFA - Invalid target: must be a property or subproperty.");continue}const g=f[n.$getParent]();if(f instanceof a.SetProperty||g instanceof a.SetProperty){(0,c.warn)("XFA - Invalid target: cannot be a setProperty or one of its properties.");continue}if(f instanceof a.BindItems||g instanceof a.BindItems){(0,c.warn)("XFA - Invalid target: cannot be a bindItems or one of its properties.");continue}const p=u[n.$text](),m=f[n.$nodeName];if(f instanceof s.XFAAttribute){const e=Object.create(null);e[m]=p;const t=Reflect.construct(Object.getPrototypeOf(g).constructor,[e]);g[m]=t[m]}else f.hasOwnProperty(n.$content)?(f[n.$data]=u,f[n.$content]=p,f[n.$finalize]()):(0,c.warn)("XFA - Invalid node to use in setProperty")}}_bindItems(e,t){if(!e.hasOwnProperty("items")||!e.hasOwnProperty("bindItems")||e.bindItems.isEmpty())return;for(const t of e.items.children)e[n.$removeChild](t);e.items.clear();const r=new a.Items({}),s=new a.Items({});e[n.$appendChild](r),e.items.push(r),e[n.$appendChild](s),e.items.push(s);for(const{ref:a,labelRef:o,valueRef:l,connection:u}of e.bindItems.children){if(u)continue;if(!a)continue;const e=(0,i.searchNode)(this.root,t,a,!1,!1);if(e)for(const t of e){if(!t[n.$isDescendent](this.datasets)){(0,c.warn)("XFA - Invalid ref (".concat(a,"): must be a datasets child."));continue}const e=(0,i.searchNode)(this.root,t,o,!0,!1);if(!e){(0,c.warn)("XFA - Invalid label: ".concat(o,"."));continue}const[u]=e;if(!u[n.$isDescendent](this.datasets)){(0,c.warn)("XFA - Invalid label: must be a datasets child.");continue}const d=(0,i.searchNode)(this.root,t,l,!0,!1);if(!d){(0,c.warn)("XFA - Invalid value: ".concat(l,"."));continue}const[f]=d;if(!f[n.$isDescendent](this.datasets)){(0,c.warn)("XFA - Invalid value: must be a datasets child.");continue}const g=h(u[n.$text]()),p=h(f[n.$text]());r[n.$appendChild](g),r.text.push(g),s[n.$appendChild](p),s.text.push(p)}else(0,c.warn)("XFA - Invalid reference: ".concat(a,"."))}}_bindOccurrences(e,t,r){let a;if(t.length>1&&(a=e[n.$clone](),a[n.$removeChild](a.occur),a.occur=null),this._bindValue(e,t[0],r),this._setProperties(e,t[0]),this._bindItems(e,t[0]),1===t.length)return;const i=e[n.$getParent](),s=e[n.$nodeName],o=i[n.$indexOf](e);for(let e=1,c=t.length;et.name===e.name)).length:r[a].children.length;const o=r[n.$indexOf](e)+1,c=t.initial-i;if(c){const t=e[n.$clone]();t[n.$removeChild](t.occur),t.occur=null,r[a].push(t),r[n.$insertAt](o,t);for(let e=1;e0)this._bindOccurrences(a,[e[0]],null);else if(this.emptyMerge){const e=t[n.$namespaceId]===l?-1:t[n.$namespaceId],r=a[n.$data]=new s.XmlObject(e,a.name||"root");t[n.$appendChild](r),this._bindElement(a,r)}continue}if(!a[n.$isBindable]())continue;let e=!1,o=null,h=null,u=null;if(a.bind){switch(a.bind.match){case"none":this._setAndBind(a,t);continue;case"global":e=!0;break;case"dataRef":if(!a.bind.ref){(0,c.warn)("XFA - ref is empty in node ".concat(a[n.$nodeName],".")),this._setAndBind(a,t);continue}h=a.bind.ref}a.bind.picture&&(o=a.bind.picture[n.$content])}const[d,f]=this._getOccurInfo(a);if(h){if(u=(0,i.searchNode)(this.root,t,h,!0,!1),null===u){if(u=(0,i.createDataNode)(this.data,t,h),!u)continue;this._isConsumeData()&&(u[n.$consumed]=!0),this._setAndBind(a,u);continue}this._isConsumeData()&&(u=u.filter((e=>!e[n.$consumed]))),u.length>f?u=u.slice(0,f):0===u.length&&(u=null),u&&this._isConsumeData()&&u.forEach((e=>{e[n.$consumed]=!0}))}else{if(!a.name){this._setAndBind(a,t);continue}if(this._isConsumeData()){const r=[];for(;r.length0?r:null}else{if(u=t[n.$getRealChildrenByNameIt](a.name,!1,this.emptyMerge).next().value,!u){if(0===d){r.push(a);continue}const e=t[n.$namespaceId]===l?-1:t[n.$namespaceId];u=a[n.$data]=new s.XmlObject(e,a.name),this.emptyMerge&&(u[n.$consumed]=!0),t[n.$appendChild](u),this._setAndBind(a,u);continue}this.emptyMerge&&(u[n.$consumed]=!0),u=[u]}}u?this._bindOccurrences(a,u,o):d>0?this._setAndBind(a,t):r.push(a)}r.forEach((e=>e[n.$getParent]()[n.$removeChild](e)))}}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Value=t.Text=t.TemplateNamespace=t.Template=t.SetProperty=t.Items=t.Field=t.BindItems=void 0,r(116),r(126),r(128),r(131),r(133),r(135),r(137),r(139),r(231),r(145),r(147),r(148);var n=r(228),a=r(234),i=r(235),s=r(236),o=r(240),c=r(237),l=r(144),h=r(238),u=r(149),d=r(241);const f=a.NamespaceIds.template.id,g="http://www.w3.org/2000/svg",p=/^H(\\d+)$/,m=new Set(["image/gif","image/jpeg","image/jpg","image/pjpeg","image/png","image/apng","image/x-png","image/bmp","image/x-ms-bmp","image/tiff","image/tif","application/octet-stream"]),b=[[[66,77],"image/bmp"],[[255,216,255],"image/jpeg"],[[73,73,42,0],"image/tiff"],[[77,77,0,42],"image/tiff"],[[71,73,70,56,57,97],"image/gif"],[[137,80,78,71,13,10,26,10],"image/png"]];function y(e){if(!e||!e.border)return{w:0,h:0};const t=e.border[n.$getExtra]();return t?{w:t.widths[0]+t.widths[2]+t.insets[0]+t.insets[2],h:t.widths[1]+t.widths[3]+t.insets[1]+t.insets[3]}:{w:0,h:0}}function w(e){return e.margin&&(e.margin.topInset||e.margin.rightInset||e.margin.bottomInset||e.margin.leftInset)}function v(e,t){if(!e.value){const t=new Nt({});e[n.$appendChild](t),e.value=t}e.value[n.$setValue](t)}function*x(e){for(const t of e[n.$getChildren]())t instanceof vt?yield*t[n.$getContainedChildren]():yield t}function S(e){var t;return"error"===(null===(t=e.validate)||void 0===t?void 0:t.nullTest)}function A(e){for(;e;){if(!e.traversal)return void(e[n.$tabIndex]=e[n.$getParent]()[n.$tabIndex]);if(e[n.$tabIndex])return;let t=null;for(const r of e.traversal[n.$getChildren]())if("next"===r.operation){t=r;break}if(!t||!t.ref)return void(e[n.$tabIndex]=e[n.$getParent]()[n.$tabIndex]);const r=e[n.$getTemplateRoot]();e[n.$tabIndex]=++r[n.$tabIndex];const a=r[n.$searchNode](t.ref,e);if(!a)return;e=a[0]}}function k(e,t){const r=e.assist;if(r){const e=r[n.$toHTML]();e&&(t.title=e);const a=r.role.match(p);if(a){const e="heading",r=a[1];t.role=e,t["aria-level"]=r}}if("table"===e.layout)t.role="table";else if("row"===e.layout)t.role="row";else{var a;const r=e[n.$getParent]();"row"===r.layout&&(t.role="TH"===(null===(a=r.assist)||void 0===a?void 0:a.role)?"columnheader":"cell")}}function C(e){if(!e.assist)return null;const t=e.assist;return t.speak&&""!==t.speak[n.$content]?t.speak[n.$content]:t.toolTip?t.toolTip[n.$content]:null}function O(e){return c.HTMLResult.success({name:"div",attributes:{class:["xfaRich"],style:Object.create(null)},children:[{name:"span",attributes:{style:Object.create(null)},value:e}]})}function F(e){const t=e[n.$getTemplateRoot]();null===t[n.$extra].firstUnsplittable&&(t[n.$extra].firstUnsplittable=e,t[n.$extra].noLayoutFailure=!0)}function I(e){const t=e[n.$getTemplateRoot]();t[n.$extra].firstUnsplittable===e&&(t[n.$extra].noLayoutFailure=!1)}function T(e){if(e[n.$extra])return!1;if(e[n.$extra]=Object.create(null),"auto"===e.targetType)return!1;const t=e[n.$getTemplateRoot]();let r=null;if(e.target){if(r=t[n.$searchNode](e.target,e[n.$getParent]()),!r)return!1;r=r[0]}const{currentPageArea:a,currentContentArea:i}=t[n.$extra];if("pageArea"===e.targetType)return r instanceof Qe||(r=null),e.startNew?(e[n.$extra].target=r||a,!0):!(!r||r===a||(e[n.$extra].target=r,0));r instanceof ee||(r=null);const s=r&&r[n.$getParent]();let o,c=s;if(e.startNew)if(r){const e=s.contentArea.children,t=e.indexOf(i),n=e.indexOf(r);-1!==t&&te,a[n.$extra].noLayoutFailure=!0;const o=t[n.$toHTML](r);e[n.$addHTML](o.html,o.bbox),a[n.$extra].noLayoutFailure=i,t[n.$getSubformParent]=s}class E extends o.StringObject{constructor(e){super(f,"appearanceFilter"),this.id=e.id||"",this.type=(0,c.getStringOption)(e.type,["optional","required"]),this.use=e.use||"",this.usehref=e.usehref||""}}class P extends o.XFAObject{constructor(e){super(f,"arc",!0),this.circular=(0,c.getInteger)({data:e.circular,defaultValue:0,validate:e=>1===e}),this.hand=(0,c.getStringOption)(e.hand,["even","left","right"]),this.id=e.id||"",this.startAngle=(0,c.getFloat)({data:e.startAngle,defaultValue:0,validate:e=>!0}),this.sweepAngle=(0,c.getFloat)({data:e.sweepAngle,defaultValue:360,validate:e=>!0}),this.use=e.use||"",this.usehref=e.usehref||"",this.edge=null,this.fill=null}[n.$toHTML](){var e;const t=this.edge||new ue({}),r=t[n.$toStyle](),a=Object.create(null);let i;"visible"===(null===(e=this.fill)||void 0===e?void 0:e.presence)?Object.assign(a,this.fill[n.$toStyle]()):a.fill="transparent",a.strokeWidth=(0,s.measureToString)("visible"===t.presence?t.thickness:0),a.stroke=r.color;const o={xmlns:g,style:{width:"100%",height:"100%",overflow:"visible"}};if(360===this.sweepAngle)i={name:"ellipse",attributes:{xmlns:g,cx:"50%",cy:"50%",rx:"50%",ry:"50%",style:a}};else{const e=this.startAngle*Math.PI/180,t=this.sweepAngle*Math.PI/180,r=this.sweepAngle>180?1:0,[n,s,c,l]=[50*(1+Math.cos(e)),50*(1-Math.sin(e)),50*(1+Math.cos(e+t)),50*(1-Math.sin(e+t))];i={name:"path",attributes:{xmlns:g,d:"M ".concat(n," ").concat(s," A 50 50 0 ").concat(r," 0 ").concat(c," ").concat(l),vectorEffect:"non-scaling-stroke",style:a}},Object.assign(o,{viewBox:"0 0 100 100",preserveAspectRatio:"none"})}const l={name:"svg",children:[i],attributes:o};return w(this[n.$getParent]()[n.$getParent]())?c.HTMLResult.success({name:"div",attributes:{style:{display:"inline",width:"100%",height:"100%"}},children:[l]}):(l.attributes.style.position="absolute",c.HTMLResult.success(l))}}class R extends o.XFAObject{constructor(e){super(f,"area",!0),this.colSpan=(0,c.getInteger)({data:e.colSpan,defaultValue:1,validate:e=>e>=1||-1===e}),this.id=e.id||"",this.name=e.name||"",this.relevant=(0,c.getRelevant)(e.relevant),this.use=e.use||"",this.usehref=e.usehref||"",this.x=(0,c.getMeasurement)(e.x,"0pt"),this.y=(0,c.getMeasurement)(e.y,"0pt"),this.desc=null,this.extras=null,this.area=new o.XFAObjectArray,this.draw=new o.XFAObjectArray,this.exObject=new o.XFAObjectArray,this.exclGroup=new o.XFAObjectArray,this.field=new o.XFAObjectArray,this.subform=new o.XFAObjectArray,this.subformSet=new o.XFAObjectArray}*[n.$getContainedChildren](){yield*x(this)}[n.$isTransparent](){return!0}[n.$isBindable](){return!0}[n.$addHTML](e,t){const[r,a,i,s]=t;this[n.$extra].width=Math.max(this[n.$extra].width,r+i),this[n.$extra].height=Math.max(this[n.$extra].height,a+s),this[n.$extra].children.push(e)}[n.$getAvailableSpace](){return this[n.$extra].availableSpace}[n.$toHTML](e){const t=(0,s.toStyle)(this,"position"),r={style:t,id:this[n.$uid],class:["xfaArea"]};(0,s.isPrintOnly)(this)&&r.class.push("xfaPrintOnly"),this.name&&(r.xfaName=this.name);const a=[];this[n.$extra]={children:a,width:0,height:0,availableSpace:e};const i=this[n.$childrenToHTML]({filter:new Set(["area","draw","field","exclGroup","subform","subformSet"]),include:!0});if(!i.success)return i.isBreak()?i:(delete this[n.$extra],c.HTMLResult.FAILURE);t.width=(0,s.measureToString)(this[n.$extra].width),t.height=(0,s.measureToString)(this[n.$extra].height);const o={name:"div",attributes:r,children:a},l=[this.x,this.y,this[n.$extra].width,this[n.$extra].height];return delete this[n.$extra],c.HTMLResult.success(o,l)}}class N extends o.XFAObject{constructor(e){super(f,"assist",!0),this.id=e.id||"",this.role=e.role||"",this.use=e.use||"",this.usehref=e.usehref||"",this.speak=null,this.toolTip=null}[n.$toHTML](){var e;return(null===(e=this.toolTip)||void 0===e?void 0:e[n.$content])||null}}class D extends o.XFAObject{constructor(e){super(f,"barcode",!0),this.charEncoding=(0,c.getKeyword)({data:e.charEncoding?e.charEncoding.toLowerCase():"",defaultValue:"",validate:e=>["utf-8","big-five","fontspecific","gbk","gb-18030","gb-2312","ksc-5601","none","shift-jis","ucs-2","utf-16"].includes(e)||e.match(/iso-8859-\\d{2}/)}),this.checksum=(0,c.getStringOption)(e.checksum,["none","1mod10","1mod10_1mod11","2mod10","auto"]),this.dataColumnCount=(0,c.getInteger)({data:e.dataColumnCount,defaultValue:-1,validate:e=>e>=0}),this.dataLength=(0,c.getInteger)({data:e.dataLength,defaultValue:-1,validate:e=>e>=0}),this.dataPrep=(0,c.getStringOption)(e.dataPrep,["none","flateCompress"]),this.dataRowCount=(0,c.getInteger)({data:e.dataRowCount,defaultValue:-1,validate:e=>e>=0}),this.endChar=e.endChar||"",this.errorCorrectionLevel=(0,c.getInteger)({data:e.errorCorrectionLevel,defaultValue:-1,validate:e=>e>=0&&e<=8}),this.id=e.id||"",this.moduleHeight=(0,c.getMeasurement)(e.moduleHeight,"5mm"),this.moduleWidth=(0,c.getMeasurement)(e.moduleWidth,"0.25mm"),this.printCheckDigit=(0,c.getInteger)({data:e.printCheckDigit,defaultValue:0,validate:e=>1===e}),this.rowColumnRatio=(0,c.getRatio)(e.rowColumnRatio),this.startChar=e.startChar||"",this.textLocation=(0,c.getStringOption)(e.textLocation,["below","above","aboveEmbedded","belowEmbedded","none"]),this.truncate=(0,c.getInteger)({data:e.truncate,defaultValue:0,validate:e=>1===e}),this.type=(0,c.getStringOption)(e.type?e.type.toLowerCase():"",["aztec","codabar","code2of5industrial","code2of5interleaved","code2of5matrix","code2of5standard","code3of9","code3of9extended","code11","code49","code93","code128","code128a","code128b","code128c","code128sscc","datamatrix","ean8","ean8add2","ean8add5","ean13","ean13add2","ean13add5","ean13pwcd","fim","logmars","maxicode","msi","pdf417","pdf417macro","plessey","postauscust2","postauscust3","postausreplypaid","postausstandard","postukrm4scc","postusdpbc","postusimb","postusstandard","postus5zip","qrcode","rfid","rss14","rss14expanded","rss14limited","rss14stacked","rss14stackedomni","rss14truncated","telepen","ucc128","ucc128random","ucc128sscc","upca","upcaadd2","upcaadd5","upcapwcd","upce","upceadd2","upceadd5","upcean2","upcean5","upsmaxicode"]),this.upsMode=(0,c.getStringOption)(e.upsMode,["usCarrier","internationalCarrier","secureSymbol","standardSymbol"]),this.use=e.use||"",this.usehref=e.usehref||"",this.wideNarrowRatio=(0,c.getRatio)(e.wideNarrowRatio),this.encrypt=null,this.extras=null}}class B extends o.XFAObject{constructor(e){super(f,"bind",!0),this.match=(0,c.getStringOption)(e.match,["once","dataRef","global","none"]),this.ref=e.ref||"",this.picture=null}}class L extends o.XFAObject{constructor(e){super(f,"bindItems"),this.connection=e.connection||"",this.labelRef=e.labelRef||"",this.ref=e.ref||"",this.valueRef=e.valueRef||""}}t.BindItems=L;class _ extends o.XFAObject{constructor(e){super(f,"bookend"),this.id=e.id||"",this.leader=e.leader||"",this.trailer=e.trailer||"",this.use=e.use||"",this.usehref=e.usehref||""}}class j extends o.Option01{constructor(e){super(f,"boolean"),this.id=e.id||"",this.name=e.name||"",this.use=e.use||"",this.usehref=e.usehref||""}[n.$toHTML](e){return O(1===this[n.$content]?"1":"0")}}class U extends o.XFAObject{constructor(e){super(f,"border",!0),this.break=(0,c.getStringOption)(e.break,["close","open"]),this.hand=(0,c.getStringOption)(e.hand,["even","left","right"]),this.id=e.id||"",this.presence=(0,c.getStringOption)(e.presence,["visible","hidden","inactive","invisible"]),this.relevant=(0,c.getRelevant)(e.relevant),this.use=e.use||"",this.usehref=e.usehref||"",this.corner=new o.XFAObjectArray(4),this.edge=new o.XFAObjectArray(4),this.extras=null,this.fill=null,this.margin=null}[n.$getExtra](){if(!this[n.$extra]){const e=this.edge.children.slice();if(e.length<4){const t=e.at(-1)||new ue({});for(let r=e.length;r<4;r++)e.push(t)}const t=e.map((e=>e.thickness)),r=[0,0,0,0];this.margin&&(r[0]=this.margin.topInset,r[1]=this.margin.rightInset,r[2]=this.margin.bottomInset,r[3]=this.margin.leftInset),this[n.$extra]={widths:t,insets:r,edges:e}}return this[n.$extra]}[n.$toStyle](){var e;const{edges:t}=this[n.$getExtra](),r=t.map((e=>{const t=e[n.$toStyle]();return t.color||(t.color="#000000"),t})),a=Object.create(null);if(this.margin&&Object.assign(a,this.margin[n.$toStyle]()),"visible"===(null===(e=this.fill)||void 0===e?void 0:e.presence)&&Object.assign(a,this.fill[n.$toStyle]()),this.corner.children.some((e=>0!==e.radius))){const e=this.corner.children.map((e=>e[n.$toStyle]()));if(2===e.length||3===e.length){const t=e.at(-1);for(let r=e.length;r<4;r++)e.push(t)}a.borderRadius=e.map((e=>e.radius)).join(" ")}switch(this.presence){case"invisible":case"hidden":a.borderStyle="";break;case"inactive":a.borderStyle="none";break;default:a.borderStyle=r.map((e=>e.style)).join(" ")}return a.borderWidth=r.map((e=>e.width)).join(" "),a.borderColor=r.map((e=>e.color)).join(" "),a}}class $ extends o.XFAObject{constructor(e){super(f,"break",!0),this.after=(0,c.getStringOption)(e.after,["auto","contentArea","pageArea","pageEven","pageOdd"]),this.afterTarget=e.afterTarget||"",this.before=(0,c.getStringOption)(e.before,["auto","contentArea","pageArea","pageEven","pageOdd"]),this.beforeTarget=e.beforeTarget||"",this.bookendLeader=e.bookendLeader||"",this.bookendTrailer=e.bookendTrailer||"",this.id=e.id||"",this.overflowLeader=e.overflowLeader||"",this.overflowTarget=e.overflowTarget||"",this.overflowTrailer=e.overflowTrailer||"",this.startNew=(0,c.getInteger)({data:e.startNew,defaultValue:0,validate:e=>1===e}),this.use=e.use||"",this.usehref=e.usehref||"",this.extras=null}}class X extends o.XFAObject{constructor(e){super(f,"breakAfter",!0),this.id=e.id||"",this.leader=e.leader||"",this.startNew=(0,c.getInteger)({data:e.startNew,defaultValue:0,validate:e=>1===e}),this.target=e.target||"",this.targetType=(0,c.getStringOption)(e.targetType,["auto","contentArea","pageArea"]),this.trailer=e.trailer||"",this.use=e.use||"",this.usehref=e.usehref||"",this.script=null}}class H extends o.XFAObject{constructor(e){super(f,"breakBefore",!0),this.id=e.id||"",this.leader=e.leader||"",this.startNew=(0,c.getInteger)({data:e.startNew,defaultValue:0,validate:e=>1===e}),this.target=e.target||"",this.targetType=(0,c.getStringOption)(e.targetType,["auto","contentArea","pageArea"]),this.trailer=e.trailer||"",this.use=e.use||"",this.usehref=e.usehref||"",this.script=null}[n.$toHTML](e){return this[n.$extra]={},c.HTMLResult.FAILURE}}class q extends o.XFAObject{constructor(e){super(f,"button",!0),this.highlight=(0,c.getStringOption)(e.highlight,["inverted","none","outline","push"]),this.id=e.id||"",this.use=e.use||"",this.usehref=e.usehref||"",this.extras=null}[n.$toHTML](e){const t=this[n.$getParent]()[n.$getParent](),r={name:"button",attributes:{id:this[n.$uid],class:["xfaButton"],style:{}},children:[]};for(const e of t.event.children){if("click"!==e.activity||!e.script)continue;const t=(0,u.recoverJsURL)(e.script[n.$content]);if(!t)continue;const a=(0,s.fixURL)(t.url);a&&r.children.push({name:"a",attributes:{id:"link"+this[n.$uid],href:a,newWindow:t.newWindow,class:["xfaLink"],style:{}},children:[]})}return c.HTMLResult.success(r)}}class z extends o.XFAObject{constructor(e){super(f,"calculate",!0),this.id=e.id||"",this.override=(0,c.getStringOption)(e.override,["disabled","error","ignore","warning"]),this.use=e.use||"",this.usehref=e.usehref||"",this.extras=null,this.message=null,this.script=null}}class G extends o.XFAObject{constructor(e){super(f,"caption",!0),this.id=e.id||"",this.placement=(0,c.getStringOption)(e.placement,["left","bottom","inline","right","top"]),this.presence=(0,c.getStringOption)(e.presence,["visible","hidden","inactive","invisible"]),this.reserve=Math.ceil((0,c.getMeasurement)(e.reserve)),this.use=e.use||"",this.usehref=e.usehref||"",this.extras=null,this.font=null,this.margin=null,this.para=null,this.value=null}[n.$setValue](e){v(this,e)}[n.$getExtra](e){if(!this[n.$extra]){let{width:t,height:r}=e;switch(this.placement){case"left":case"right":case"inline":t=this.reserve<=0?t:this.reserve;break;case"top":case"bottom":r=this.reserve<=0?r:this.reserve}this[n.$extra]=(0,s.layoutNode)(this,{width:t,height:r})}return this[n.$extra]}[n.$toHTML](e){if(!this.value)return c.HTMLResult.EMPTY;this[n.$pushPara]();const t=this.value[n.$toHTML](e).html;if(!t)return this[n.$popPara](),c.HTMLResult.EMPTY;const r=this.reserve;if(this.reserve<=0){const{w:t,h:r}=this[n.$getExtra](e);switch(this.placement){case"left":case"right":case"inline":this.reserve=t;break;case"top":case"bottom":this.reserve=r}}const a=[];"string"==typeof t?a.push({name:"#text",value:t}):a.push(t);const i=(0,s.toStyle)(this,"font","margin","visibility");switch(this.placement){case"left":case"right":this.reserve>0&&(i.width=(0,s.measureToString)(this.reserve));break;case"top":case"bottom":this.reserve>0&&(i.height=(0,s.measureToString)(this.reserve))}return(0,s.setPara)(this,null,t),this[n.$popPara](),this.reserve=r,c.HTMLResult.success({name:"div",attributes:{style:i,class:["xfaCaption"]},children:a})}}class W extends o.StringObject{constructor(e){super(f,"certificate"),this.id=e.id||"",this.name=e.name||"",this.use=e.use||"",this.usehref=e.usehref||""}}class V extends o.XFAObject{constructor(e){super(f,"certificates",!0),this.credentialServerPolicy=(0,c.getStringOption)(e.credentialServerPolicy,["optional","required"]),this.id=e.id||"",this.url=e.url||"",this.urlPolicy=e.urlPolicy||"",this.use=e.use||"",this.usehref=e.usehref||"",this.encryption=null,this.issuers=null,this.keyUsage=null,this.oids=null,this.signing=null,this.subjectDNs=null}}class K extends o.XFAObject{constructor(e){super(f,"checkButton",!0),this.id=e.id||"",this.mark=(0,c.getStringOption)(e.mark,["default","check","circle","cross","diamond","square","star"]),this.shape=(0,c.getStringOption)(e.shape,["square","round"]),this.size=(0,c.getMeasurement)(e.size,"10pt"),this.use=e.use||"",this.usehref=e.usehref||"",this.border=null,this.extras=null,this.margin=null}[n.$toHTML](e){var t;const r=(0,s.toStyle)("margin"),a=(0,s.measureToString)(this.size);let i,o,l;r.width=r.height=a;const h=this[n.$getParent]()[n.$getParent](),u=h.items.children.length&&h.items.children[0][n.$toHTML]().html||[],d={on:(void 0!==u[0]?u[0]:"on").toString(),off:(void 0!==u[1]?u[1]:"off").toString()},f=((null===(t=h.value)||void 0===t?void 0:t[n.$text]())||"off")===d.on||void 0,g=h[n.$getSubformParent](),p=h[n.$uid];let m;var b,y;g instanceof Se?(l=g[n.$uid],i="radio",o="xfaRadio",m=(null===(b=g[n.$data])||void 0===b?void 0:b[n.$uid])||g[n.$uid]):(i="checkbox",o="xfaCheckbox",m=(null===(y=h[n.$data])||void 0===y?void 0:y[n.$uid])||h[n.$uid]);const w={name:"input",attributes:{class:[o],style:r,fieldId:p,dataId:m,type:i,checked:f,xfaOn:d.on,xfaOff:d.off,"aria-label":C(h),"aria-required":!1}};return l&&(w.attributes.name=l),S(h)&&(w.attributes["aria-required"]=!0,w.attributes.required=!0),c.HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[w]})}}class Y extends o.XFAObject{constructor(e){super(f,"choiceList",!0),this.commitOn=(0,c.getStringOption)(e.commitOn,["select","exit"]),this.id=e.id||"",this.open=(0,c.getStringOption)(e.open,["userControl","always","multiSelect","onEntry"]),this.textEntry=(0,c.getInteger)({data:e.textEntry,defaultValue:0,validate:e=>1===e}),this.use=e.use||"",this.usehref=e.usehref||"",this.border=null,this.extras=null,this.margin=null}[n.$toHTML](e){var t,r;const a=(0,s.toStyle)(this,"border","margin"),i=this[n.$getParent]()[n.$getParent](),o={fontSize:"calc(".concat((null===(t=i.font)||void 0===t?void 0:t.size)||10,"px * var(--scale-factor))")},l=[];if(i.items.children.length>0){var h;const e=i.items;let t=0,r=0;2===e.children.length&&(t=e.children[0].save,r=1-t);const a=e.children[t][n.$toHTML]().html,s=e.children[r][n.$toHTML]().html;let c=!1;const u=(null===(h=i.value)||void 0===h?void 0:h[n.$text]())||"";for(let e=0,t=a.length;ee>=0}),this.use=e.use||"",this.usehref=e.usehref||""}}class Q extends o.XFAObject{constructor(e){super(f,"connect",!0),this.connection=e.connection||"",this.id=e.id||"",this.ref=e.ref||"",this.usage=(0,c.getStringOption)(e.usage,["exportAndImport","exportOnly","importOnly"]),this.use=e.use||"",this.usehref=e.usehref||"",this.picture=null}}class ee extends o.XFAObject{constructor(e){super(f,"contentArea",!0),this.h=(0,c.getMeasurement)(e.h),this.id=e.id||"",this.name=e.name||"",this.relevant=(0,c.getRelevant)(e.relevant),this.use=e.use||"",this.usehref=e.usehref||"",this.w=(0,c.getMeasurement)(e.w),this.x=(0,c.getMeasurement)(e.x,"0pt"),this.y=(0,c.getMeasurement)(e.y,"0pt"),this.desc=null,this.extras=null}[n.$toHTML](e){const t={left:(0,s.measureToString)(this.x),top:(0,s.measureToString)(this.y),width:(0,s.measureToString)(this.w),height:(0,s.measureToString)(this.h)},r=["xfaContentarea"];return(0,s.isPrintOnly)(this)&&r.push("xfaPrintOnly"),c.HTMLResult.success({name:"div",children:[],attributes:{style:t,class:r,id:this[n.$uid]}})}}class te extends o.XFAObject{constructor(e){super(f,"corner",!0),this.id=e.id||"",this.inverted=(0,c.getInteger)({data:e.inverted,defaultValue:0,validate:e=>1===e}),this.join=(0,c.getStringOption)(e.join,["square","round"]),this.presence=(0,c.getStringOption)(e.presence,["visible","hidden","inactive","invisible"]),this.radius=(0,c.getMeasurement)(e.radius),this.stroke=(0,c.getStringOption)(e.stroke,["solid","dashDot","dashDotDot","dashed","dotted","embossed","etched","lowered","raised"]),this.thickness=(0,c.getMeasurement)(e.thickness,"0.5pt"),this.use=e.use||"",this.usehref=e.usehref||"",this.color=null,this.extras=null}[n.$toStyle](){const e=(0,s.toStyle)(this,"visibility");return e.radius=(0,s.measureToString)("square"===this.join?0:this.radius),e}}class re extends o.ContentObject{constructor(e){super(f,"date"),this.id=e.id||"",this.name=e.name||"",this.use=e.use||"",this.usehref=e.usehref||""}[n.$finalize](){const e=this[n.$content].trim();this[n.$content]=e?new Date(e):null}[n.$toHTML](e){return O(this[n.$content]?this[n.$content].toString():"")}}class ne extends o.ContentObject{constructor(e){super(f,"dateTime"),this.id=e.id||"",this.name=e.name||"",this.use=e.use||"",this.usehref=e.usehref||""}[n.$finalize](){const e=this[n.$content].trim();this[n.$content]=e?new Date(e):null}[n.$toHTML](e){return O(this[n.$content]?this[n.$content].toString():"")}}class ae extends o.XFAObject{constructor(e){super(f,"dateTimeEdit",!0),this.hScrollPolicy=(0,c.getStringOption)(e.hScrollPolicy,["auto","off","on"]),this.id=e.id||"",this.picker=(0,c.getStringOption)(e.picker,["host","none"]),this.use=e.use||"",this.usehref=e.usehref||"",this.border=null,this.comb=null,this.extras=null,this.margin=null}[n.$toHTML](e){var t;const r=(0,s.toStyle)(this,"border","font","margin"),a=this[n.$getParent]()[n.$getParent](),i={name:"input",attributes:{type:"text",fieldId:a[n.$uid],dataId:(null===(t=a[n.$data])||void 0===t?void 0:t[n.$uid])||a[n.$uid],class:["xfaTextfield"],style:r,"aria-label":C(a),"aria-required":!1}};return S(a)&&(i.attributes["aria-required"]=!0,i.attributes.required=!0),c.HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[i]})}}class ie extends o.ContentObject{constructor(e){super(f,"decimal"),this.fracDigits=(0,c.getInteger)({data:e.fracDigits,defaultValue:2,validate:e=>!0}),this.id=e.id||"",this.leadDigits=(0,c.getInteger)({data:e.leadDigits,defaultValue:-1,validate:e=>!0}),this.name=e.name||"",this.use=e.use||"",this.usehref=e.usehref||""}[n.$finalize](){const e=parseFloat(this[n.$content].trim());this[n.$content]=isNaN(e)?null:e}[n.$toHTML](e){return O(null!==this[n.$content]?this[n.$content].toString():"")}}class se extends o.XFAObject{constructor(e){super(f,"defaultUi",!0),this.id=e.id||"",this.use=e.use||"",this.usehref=e.usehref||"",this.extras=null}}class oe extends o.XFAObject{constructor(e){super(f,"desc",!0),this.id=e.id||"",this.use=e.use||"",this.usehref=e.usehref||"",this.boolean=new o.XFAObjectArray,this.date=new o.XFAObjectArray,this.dateTime=new o.XFAObjectArray,this.decimal=new o.XFAObjectArray,this.exData=new o.XFAObjectArray,this.float=new o.XFAObjectArray,this.image=new o.XFAObjectArray,this.integer=new o.XFAObjectArray,this.text=new o.XFAObjectArray,this.time=new o.XFAObjectArray}}class ce extends o.OptionObject{constructor(e){super(f,"digestMethod",["","SHA1","SHA256","SHA512","RIPEMD160"]),this.id=e.id||"",this.use=e.use||"",this.usehref=e.usehref||""}}class le extends o.XFAObject{constructor(e){super(f,"digestMethods",!0),this.id=e.id||"",this.type=(0,c.getStringOption)(e.type,["optional","required"]),this.use=e.use||"",this.usehref=e.usehref||"",this.digestMethod=new o.XFAObjectArray}}class he extends o.XFAObject{constructor(e){super(f,"draw",!0),this.anchorType=(0,c.getStringOption)(e.anchorType,["topLeft","bottomCenter","bottomLeft","bottomRight","middleCenter","middleLeft","middleRight","topCenter","topRight"]),this.colSpan=(0,c.getInteger)({data:e.colSpan,defaultValue:1,validate:e=>e>=1||-1===e}),this.h=e.h?(0,c.getMeasurement)(e.h):"",this.hAlign=(0,c.getStringOption)(e.hAlign,["left","center","justify","justifyAll","radix","right"]),this.id=e.id||"",this.locale=e.locale||"",this.maxH=(0,c.getMeasurement)(e.maxH,"0pt"),this.maxW=(0,c.getMeasurement)(e.maxW,"0pt"),this.minH=(0,c.getMeasurement)(e.minH,"0pt"),this.minW=(0,c.getMeasurement)(e.minW,"0pt"),this.name=e.name||"",this.presence=(0,c.getStringOption)(e.presence,["visible","hidden","inactive","invisible"]),this.relevant=(0,c.getRelevant)(e.relevant),this.rotate=(0,c.getInteger)({data:e.rotate,defaultValue:0,validate:e=>e%90==0}),this.use=e.use||"",this.usehref=e.usehref||"",this.w=e.w?(0,c.getMeasurement)(e.w):"",this.x=(0,c.getMeasurement)(e.x,"0pt"),this.y=(0,c.getMeasurement)(e.y,"0pt"),this.assist=null,this.border=null,this.caption=null,this.desc=null,this.extras=null,this.font=null,this.keep=null,this.margin=null,this.para=null,this.traversal=null,this.ui=null,this.value=null,this.setProperty=new o.XFAObjectArray}[n.$setValue](e){v(this,e)}[n.$toHTML](e){if(A(this),"hidden"===this.presence||"inactive"===this.presence)return c.HTMLResult.EMPTY;(0,s.fixDimensions)(this),this[n.$pushPara]();const t=this.w,r=this.h,{w:a,h:o,isBroken:l}=(0,s.layoutNode)(this,e);if(a&&""===this.w){if(l&&this[n.$getSubformParent]()[n.$isThereMoreWidth]())return this[n.$popPara](),c.HTMLResult.FAILURE;this.w=a}if(o&&""===this.h&&(this.h=o),F(this),!(0,i.checkDimensions)(this,e))return this.w=t,this.h=r,this[n.$popPara](),c.HTMLResult.FAILURE;I(this);const h=(0,s.toStyle)(this,"font","hAlign","dimensions","position","presence","rotate","anchorType","border","margin");(0,s.setMinMaxDimensions)(this,h),h.margin&&(h.padding=h.margin,delete h.margin);const u=["xfaDraw"];this.font&&u.push("xfaFont"),(0,s.isPrintOnly)(this)&&u.push("xfaPrintOnly");const d={style:h,id:this[n.$uid],class:u};this.name&&(d.xfaName=this.name);const f={name:"div",attributes:d,children:[]};k(this,d);const g=(0,s.computeBbox)(this,f,e),p=this.value?this.value[n.$toHTML](e).html:null;return null===p?(this.w=t,this.h=r,this[n.$popPara](),c.HTMLResult.success((0,s.createWrapper)(this,f),g)):(f.children.push(p),(0,s.setPara)(this,h,p),this.w=t,this.h=r,this[n.$popPara](),c.HTMLResult.success((0,s.createWrapper)(this,f),g))}}class ue extends o.XFAObject{constructor(e){super(f,"edge",!0),this.cap=(0,c.getStringOption)(e.cap,["square","butt","round"]),this.id=e.id||"",this.presence=(0,c.getStringOption)(e.presence,["visible","hidden","inactive","invisible"]),this.stroke=(0,c.getStringOption)(e.stroke,["solid","dashDot","dashDotDot","dashed","dotted","embossed","etched","lowered","raised"]),this.thickness=(0,c.getMeasurement)(e.thickness,"0.5pt"),this.use=e.use||"",this.usehref=e.usehref||"",this.color=null,this.extras=null}[n.$toStyle](){const e=(0,s.toStyle)(this,"visibility");if(Object.assign(e,{linecap:this.cap,width:(0,s.measureToString)(this.thickness),color:this.color?this.color[n.$toStyle]():"#000000",style:""}),"visible"!==this.presence)e.style="none";else switch(this.stroke){case"solid":e.style="solid";break;case"dashDot":case"dashDotDot":case"dashed":e.style="dashed";break;case"dotted":e.style="dotted";break;case"embossed":e.style="ridge";break;case"etched":e.style="groove";break;case"lowered":e.style="inset";break;case"raised":e.style="outset"}return e}}class de extends o.OptionObject{constructor(e){super(f,"encoding",["adbe.x509.rsa_sha1","adbe.pkcs7.detached","adbe.pkcs7.sha1"]),this.id=e.id||"",this.use=e.use||"",this.usehref=e.usehref||""}}class fe extends o.XFAObject{constructor(e){super(f,"encodings",!0),this.id=e.id||"",this.type=(0,c.getStringOption)(e.type,["optional","required"]),this.use=e.use||"",this.usehref=e.usehref||"",this.encoding=new o.XFAObjectArray}}class ge extends o.XFAObject{constructor(e){super(f,"encrypt",!0),this.id=e.id||"",this.use=e.use||"",this.usehref=e.usehref||"",this.certificate=null}}class pe extends o.XFAObject{constructor(e){super(f,"encryptData",!0),this.id=e.id||"",this.operation=(0,c.getStringOption)(e.operation,["encrypt","decrypt"]),this.target=e.target||"",this.use=e.use||"",this.usehref=e.usehref||"",this.filter=null,this.manifest=null}}class me extends o.XFAObject{constructor(e){super(f,"encryption",!0),this.id=e.id||"",this.type=(0,c.getStringOption)(e.type,["optional","required"]),this.use=e.use||"",this.usehref=e.usehref||"",this.certificate=new o.XFAObjectArray}}class be extends o.OptionObject{constructor(e){super(f,"encryptionMethod",["","AES256-CBC","TRIPLEDES-CBC","AES128-CBC","AES192-CBC"]),this.id=e.id||"",this.use=e.use||"",this.usehref=e.usehref||""}}class ye extends o.XFAObject{constructor(e){super(f,"encryptionMethods",!0),this.id=e.id||"",this.type=(0,c.getStringOption)(e.type,["optional","required"]),this.use=e.use||"",this.usehref=e.usehref||"",this.encryptionMethod=new o.XFAObjectArray}}class we extends o.XFAObject{constructor(e){super(f,"event",!0),this.activity=(0,c.getStringOption)(e.activity,["click","change","docClose","docReady","enter","exit","full","indexChange","initialize","mouseDown","mouseEnter","mouseExit","mouseUp","postExecute","postOpen","postPrint","postSave","postSign","postSubmit","preExecute","preOpen","prePrint","preSave","preSign","preSubmit","ready","validationState"]),this.id=e.id||"",this.listen=(0,c.getStringOption)(e.listen,["refOnly","refAndDescendents"]),this.name=e.name||"",this.ref=e.ref||"",this.use=e.use||"",this.usehref=e.usehref||"",this.extras=null,this.encryptData=null,this.execute=null,this.script=null,this.signData=null,this.submit=null}}class ve extends o.ContentObject{constructor(e){super(f,"exData"),this.contentType=e.contentType||"",this.href=e.href||"",this.id=e.id||"",this.maxLength=(0,c.getInteger)({data:e.maxLength,defaultValue:-1,validate:e=>e>=-1}),this.name=e.name||"",this.rid=e.rid||"",this.transferEncoding=(0,c.getStringOption)(e.transferEncoding,["none","base64","package"]),this.use=e.use||"",this.usehref=e.usehref||""}[n.$isCDATAXml](){return"text/html"===this.contentType}[n.$onChild](e){return("text/html"===this.contentType&&e[n.$namespaceId]===a.NamespaceIds.xhtml.id||"text/xml"===this.contentType)&&(this[n.$content]=e,!0)}[n.$toHTML](e){return"text/html"===this.contentType&&this[n.$content]?this[n.$content][n.$toHTML](e):c.HTMLResult.EMPTY}}class xe extends o.XFAObject{constructor(e){super(f,"exObject",!0),this.archive=e.archive||"",this.classId=e.classId||"",this.codeBase=e.codeBase||"",this.codeType=e.codeType||"",this.id=e.id||"",this.name=e.name||"",this.use=e.use||"",this.usehref=e.usehref||"",this.extras=null,this.boolean=new o.XFAObjectArray,this.date=new o.XFAObjectArray,this.dateTime=new o.XFAObjectArray,this.decimal=new o.XFAObjectArray,this.exData=new o.XFAObjectArray,this.exObject=new o.XFAObjectArray,this.float=new o.XFAObjectArray,this.image=new o.XFAObjectArray,this.integer=new o.XFAObjectArray,this.text=new o.XFAObjectArray,this.time=new o.XFAObjectArray}}class Se extends o.XFAObject{constructor(e){super(f,"exclGroup",!0),this.access=(0,c.getStringOption)(e.access,["open","nonInteractive","protected","readOnly"]),this.accessKey=e.accessKey||"",this.anchorType=(0,c.getStringOption)(e.anchorType,["topLeft","bottomCenter","bottomLeft","bottomRight","middleCenter","middleLeft","middleRight","topCenter","topRight"]),this.colSpan=(0,c.getInteger)({data:e.colSpan,defaultValue:1,validate:e=>e>=1||-1===e}),this.h=e.h?(0,c.getMeasurement)(e.h):"",this.hAlign=(0,c.getStringOption)(e.hAlign,["left","center","justify","justifyAll","radix","right"]),this.id=e.id||"",this.layout=(0,c.getStringOption)(e.layout,["position","lr-tb","rl-row","rl-tb","row","table","tb"]),this.maxH=(0,c.getMeasurement)(e.maxH,"0pt"),this.maxW=(0,c.getMeasurement)(e.maxW,"0pt"),this.minH=(0,c.getMeasurement)(e.minH,"0pt"),this.minW=(0,c.getMeasurement)(e.minW,"0pt"),this.name=e.name||"",this.presence=(0,c.getStringOption)(e.presence,["visible","hidden","inactive","invisible"]),this.relevant=(0,c.getRelevant)(e.relevant),this.use=e.use||"",this.usehref=e.usehref||"",this.w=e.w?(0,c.getMeasurement)(e.w):"",this.x=(0,c.getMeasurement)(e.x,"0pt"),this.y=(0,c.getMeasurement)(e.y,"0pt"),this.assist=null,this.bind=null,this.border=null,this.calculate=null,this.caption=null,this.desc=null,this.extras=null,this.margin=null,this.para=null,this.traversal=null,this.validate=null,this.connect=new o.XFAObjectArray,this.event=new o.XFAObjectArray,this.field=new o.XFAObjectArray,this.setProperty=new o.XFAObjectArray}[n.$isBindable](){return!0}[n.$hasSettableValue](){return!0}[n.$setValue](e){for(const t of this.field.children){if(!t.value){const e=new Nt({});t[n.$appendChild](e),t.value=e}t.value[n.$setValue](e)}}[n.$isThereMoreWidth](){return this.layout.endsWith("-tb")&&0===this[n.$extra].attempt&&this[n.$extra].numberInLine>0||this[n.$getParent]()[n.$isThereMoreWidth]()}[n.$isSplittable](){var e;const t=this[n.$getSubformParent]();return!!t[n.$isSplittable]()&&(void 0!==this[n.$extra]._isSplittable?this[n.$extra]._isSplittable:"position"===this.layout||this.layout.includes("row")?(this[n.$extra]._isSplittable=!1,!1):!(null!==(e=t.layout)&&void 0!==e&&e.endsWith("-tb")&&0!==t[n.$extra].numberInLine||(this[n.$extra]._isSplittable=!0,0)))}[n.$flushHTML](){return(0,i.flushHTML)(this)}[n.$addHTML](e,t){(0,i.addHTML)(this,e,t)}[n.$getAvailableSpace](){return(0,i.getAvailableSpace)(this)}[n.$toHTML](e){if(A(this),"hidden"===this.presence||"inactive"===this.presence||0===this.h||0===this.w)return c.HTMLResult.EMPTY;(0,s.fixDimensions)(this);const t=[],r={id:this[n.$uid],class:[]};(0,s.setAccess)(this,r.class),this[n.$extra]||(this[n.$extra]=Object.create(null)),Object.assign(this[n.$extra],{children:t,attributes:r,attempt:0,line:null,numberInLine:0,availableSpace:{width:Math.min(this.w||1/0,e.width),height:Math.min(this.h||1/0,e.height)},width:0,height:0,prevHeight:0,currentWidth:0});const a=this[n.$isSplittable]();if(a||F(this),!(0,i.checkDimensions)(this,e))return c.HTMLResult.FAILURE;const o=new Set(["field"]);if(this.layout.includes("row")){const e=this[n.$getSubformParent]().columnWidths;Array.isArray(e)&&e.length>0&&(this[n.$extra].columnWidths=e,this[n.$extra].currentColumn=0)}const l=(0,s.toStyle)(this,"anchorType","dimensions","position","presence","border","margin","hAlign"),h=["xfaExclgroup"],u=(0,s.layoutClass)(this);u&&h.push(u),(0,s.isPrintOnly)(this)&&h.push("xfaPrintOnly"),r.style=l,r.class=h,this.name&&(r.xfaName=this.name),this[n.$pushPara]();const d="lr-tb"===this.layout||"rl-tb"===this.layout,f=d?2:1;for(;this[n.$extra].attempte>=1||-1===e}),this.h=e.h?(0,c.getMeasurement)(e.h):"",this.hAlign=(0,c.getStringOption)(e.hAlign,["left","center","justify","justifyAll","radix","right"]),this.id=e.id||"",this.locale=e.locale||"",this.maxH=(0,c.getMeasurement)(e.maxH,"0pt"),this.maxW=(0,c.getMeasurement)(e.maxW,"0pt"),this.minH=(0,c.getMeasurement)(e.minH,"0pt"),this.minW=(0,c.getMeasurement)(e.minW,"0pt"),this.name=e.name||"",this.presence=(0,c.getStringOption)(e.presence,["visible","hidden","inactive","invisible"]),this.relevant=(0,c.getRelevant)(e.relevant),this.rotate=(0,c.getInteger)({data:e.rotate,defaultValue:0,validate:e=>e%90==0}),this.use=e.use||"",this.usehref=e.usehref||"",this.w=e.w?(0,c.getMeasurement)(e.w):"",this.x=(0,c.getMeasurement)(e.x,"0pt"),this.y=(0,c.getMeasurement)(e.y,"0pt"),this.assist=null,this.bind=null,this.border=null,this.calculate=null,this.caption=null,this.desc=null,this.extras=null,this.font=null,this.format=null,this.items=new o.XFAObjectArray(2),this.keep=null,this.margin=null,this.para=null,this.traversal=null,this.ui=null,this.validate=null,this.value=null,this.bindItems=new o.XFAObjectArray,this.connect=new o.XFAObjectArray,this.event=new o.XFAObjectArray,this.setProperty=new o.XFAObjectArray}[n.$isBindable](){return!0}[n.$setValue](e){v(this,e)}[n.$toHTML](e){var t,r;if(A(this),!this.ui){let e;switch(this.ui=new Pt({}),this.ui[n.$globalData]=this[n.$globalData],this[n.$appendChild](this.ui),this.items.children.length){case 0:e=new Ot({}),this.ui.textEdit=e;break;case 1:e=new K({}),this.ui.checkButton=e;break;case 2:e=new Y({}),this.ui.choiceList=e}this.ui[n.$appendChild](e)}if(!this.ui||"hidden"===this.presence||"inactive"===this.presence||0===this.h||0===this.w)return c.HTMLResult.EMPTY;this.caption&&delete this.caption[n.$extra],this[n.$pushPara]();const a=this.caption?this.caption[n.$toHTML](e).html:null,o=this.w,l=this.h;let u=0,d=0;this.margin&&(u=this.margin.leftInset+this.margin.rightInset,d=this.margin.topInset+this.margin.bottomInset);let f=null;if(""===this.w||""===this.h){let t=null,r=null,a=0,i=0;if(this.ui.checkButton)a=i=this.ui.checkButton.size;else{const{w:t,h:r}=(0,s.layoutNode)(this,e);null!==t?(a=t,i=r):i=(0,h.getMetrics)(this.font,!0).lineNoGap}if(f=y(this.ui[n.$getExtra]()),a+=f.w,i+=f.h,this.caption){const{w:s,h:o,isBroken:l}=this.caption[n.$getExtra](e);if(l&&this[n.$getSubformParent]()[n.$isThereMoreWidth]())return this[n.$popPara](),c.HTMLResult.FAILURE;switch(t=s,r=o,this.caption.placement){case"left":case"right":case"inline":t+=a;break;case"top":case"bottom":r+=i}}else t=a,r=i;t&&""===this.w&&(t+=u,this.w=Math.min(this.maxW<=0?1/0:this.maxW,this.minW+1e>=1&&e<=5}),this.appearanceFilter=null,this.certificates=null,this.digestMethods=null,this.encodings=null,this.encryptionMethods=null,this.handler=null,this.lockDocument=null,this.mdp=null,this.reasons=null,this.timeStamp=null}}class Ie extends o.ContentObject{constructor(e){super(f,"float"),this.id=e.id||"",this.name=e.name||"",this.use=e.use||"",this.usehref=e.usehref||""}[n.$finalize](){const e=parseFloat(this[n.$content].trim());this[n.$content]=isNaN(e)?null:e}[n.$toHTML](e){return O(null!==this[n.$content]?this[n.$content].toString():"")}}class Te extends o.XFAObject{constructor(e){super(f,"font",!0),this.baselineShift=(0,c.getMeasurement)(e.baselineShift),this.fontHorizontalScale=(0,c.getFloat)({data:e.fontHorizontalScale,defaultValue:100,validate:e=>e>=0}),this.fontVerticalScale=(0,c.getFloat)({data:e.fontVerticalScale,defaultValue:100,validate:e=>e>=0}),this.id=e.id||"",this.kerningMode=(0,c.getStringOption)(e.kerningMode,["none","pair"]),this.letterSpacing=(0,c.getMeasurement)(e.letterSpacing,"0"),this.lineThrough=(0,c.getInteger)({data:e.lineThrough,defaultValue:0,validate:e=>1===e||2===e}),this.lineThroughPeriod=(0,c.getStringOption)(e.lineThroughPeriod,["all","word"]),this.overline=(0,c.getInteger)({data:e.overline,defaultValue:0,validate:e=>1===e||2===e}),this.overlinePeriod=(0,c.getStringOption)(e.overlinePeriod,["all","word"]),this.posture=(0,c.getStringOption)(e.posture,["normal","italic"]),this.size=(0,c.getMeasurement)(e.size,"10pt"),this.typeface=e.typeface||"Courier",this.underline=(0,c.getInteger)({data:e.underline,defaultValue:0,validate:e=>1===e||2===e}),this.underlinePeriod=(0,c.getStringOption)(e.underlinePeriod,["all","word"]),this.use=e.use||"",this.usehref=e.usehref||"",this.weight=(0,c.getStringOption)(e.weight,["normal","bold"]),this.extras=null,this.fill=null}[n.$clean](e){super[n.$clean](e),this[n.$globalData].usedTypefaces.add(this.typeface)}[n.$toStyle](){const e=(0,s.toStyle)(this,"fill"),t=e.color;return t&&("#000000"===t?delete e.color:t.startsWith("#")||(e.background=t,e.backgroundClip="text",e.color="transparent")),this.baselineShift&&(e.verticalAlign=(0,s.measureToString)(this.baselineShift)),e.fontKerning="none"===this.kerningMode?"none":"normal",e.letterSpacing=(0,s.measureToString)(this.letterSpacing),0!==this.lineThrough&&(e.textDecoration="line-through",2===this.lineThrough&&(e.textDecorationStyle="double")),0!==this.overline&&(e.textDecoration="overline",2===this.overline&&(e.textDecorationStyle="double")),e.fontStyle=this.posture,e.fontSize=(0,s.measureToString)(.99*this.size),(0,s.setFontFamily)(this,this,this[n.$globalData].fontFinder,e),0!==this.underline&&(e.textDecoration="underline",2===this.underline&&(e.textDecorationStyle="double")),e.fontWeight=this.weight,e}}class Me extends o.XFAObject{constructor(e){super(f,"format",!0),this.id=e.id||"",this.use=e.use||"",this.usehref=e.usehref||"",this.extras=null,this.picture=null}}class Ee extends o.StringObject{constructor(e){super(f,"handler"),this.id=e.id||"",this.type=(0,c.getStringOption)(e.type,["optional","required"]),this.use=e.use||"",this.usehref=e.usehref||""}}class Pe extends o.XFAObject{constructor(e){super(f,"hyphenation"),this.excludeAllCaps=(0,c.getInteger)({data:e.excludeAllCaps,defaultValue:0,validate:e=>1===e}),this.excludeInitialCap=(0,c.getInteger)({data:e.excludeInitialCap,defaultValue:0,validate:e=>1===e}),this.hyphenate=(0,c.getInteger)({data:e.hyphenate,defaultValue:0,validate:e=>1===e}),this.id=e.id||"",this.pushCharacterCount=(0,c.getInteger)({data:e.pushCharacterCount,defaultValue:3,validate:e=>e>=0}),this.remainCharacterCount=(0,c.getInteger)({data:e.remainCharacterCount,defaultValue:3,validate:e=>e>=0}),this.use=e.use||"",this.usehref=e.usehref||"",this.wordCharacterCount=(0,c.getInteger)({data:e.wordCharacterCount,defaultValue:7,validate:e=>e>=0})}}class Re extends o.StringObject{constructor(e){super(f,"image"),this.aspect=(0,c.getStringOption)(e.aspect,["fit","actual","height","none","width"]),this.contentType=e.contentType||"",this.href=e.href||"",this.id=e.id||"",this.name=e.name||"",this.transferEncoding=(0,c.getStringOption)(e.transferEncoding,["base64","none","package"]),this.use=e.use||"",this.usehref=e.usehref||""}[n.$toHTML](){if(this.contentType&&!m.has(this.contentType.toLowerCase()))return c.HTMLResult.EMPTY;let e=this[n.$globalData].images&&this[n.$globalData].images.get(this.href);if(!e&&(this.href||!this[n.$content]))return c.HTMLResult.EMPTY;if(e||"base64"!==this.transferEncoding||(e=(0,l.stringToBytes)(atob(this[n.$content]))),!e)return c.HTMLResult.EMPTY;if(!this.contentType){for(const[t,r]of b)if(e.length>t.length&&t.every(((t,r)=>t===e[r]))){this.contentType=r;break}if(!this.contentType)return c.HTMLResult.EMPTY}const t=new Blob([e],{type:this.contentType});let r;switch(this.aspect){case"fit":case"actual":break;case"height":r={height:"100%",objectFit:"fill"};break;case"none":r={width:"100%",height:"100%",objectFit:"fill"};break;case"width":r={width:"100%",objectFit:"fill"}}const a=this[n.$getParent]();return c.HTMLResult.success({name:"img",attributes:{class:["xfaImage"],style:r,src:URL.createObjectURL(t),alt:a?C(a[n.$getParent]()):null}})}}class Ne extends o.XFAObject{constructor(e){super(f,"imageEdit",!0),this.data=(0,c.getStringOption)(e.data,["link","embed"]),this.id=e.id||"",this.use=e.use||"",this.usehref=e.usehref||"",this.border=null,this.extras=null,this.margin=null}[n.$toHTML](e){return"embed"===this.data?c.HTMLResult.success({name:"div",children:[],attributes:{}}):c.HTMLResult.EMPTY}}class De extends o.ContentObject{constructor(e){super(f,"integer"),this.id=e.id||"",this.name=e.name||"",this.use=e.use||"",this.usehref=e.usehref||""}[n.$finalize](){const e=parseInt(this[n.$content].trim(),10);this[n.$content]=isNaN(e)?null:e}[n.$toHTML](e){return O(null!==this[n.$content]?this[n.$content].toString():"")}}class Be extends o.XFAObject{constructor(e){super(f,"issuers",!0),this.id=e.id||"",this.type=(0,c.getStringOption)(e.type,["optional","required"]),this.use=e.use||"",this.usehref=e.usehref||"",this.certificate=new o.XFAObjectArray}}class Le extends o.XFAObject{constructor(e){super(f,"items",!0),this.id=e.id||"",this.name=e.name||"",this.presence=(0,c.getStringOption)(e.presence,["visible","hidden","inactive","invisible"]),this.ref=e.ref||"",this.save=(0,c.getInteger)({data:e.save,defaultValue:0,validate:e=>1===e}),this.use=e.use||"",this.usehref=e.usehref||"",this.boolean=new o.XFAObjectArray,this.date=new o.XFAObjectArray,this.dateTime=new o.XFAObjectArray,this.decimal=new o.XFAObjectArray,this.exData=new o.XFAObjectArray,this.float=new o.XFAObjectArray,this.image=new o.XFAObjectArray,this.integer=new o.XFAObjectArray,this.text=new o.XFAObjectArray,this.time=new o.XFAObjectArray}[n.$toHTML](){const e=[];for(const t of this[n.$getChildren]())e.push(t[n.$text]());return c.HTMLResult.success(e)}}t.Items=Le;class _e extends o.XFAObject{constructor(e){super(f,"keep",!0),this.id=e.id||"";const t=["none","contentArea","pageArea"];this.intact=(0,c.getStringOption)(e.intact,t),this.next=(0,c.getStringOption)(e.next,t),this.previous=(0,c.getStringOption)(e.previous,t),this.use=e.use||"",this.usehref=e.usehref||"",this.extras=null}}class je extends o.XFAObject{constructor(e){super(f,"keyUsage");const t=["","yes","no"];this.crlSign=(0,c.getStringOption)(e.crlSign,t),this.dataEncipherment=(0,c.getStringOption)(e.dataEncipherment,t),this.decipherOnly=(0,c.getStringOption)(e.decipherOnly,t),this.digitalSignature=(0,c.getStringOption)(e.digitalSignature,t),this.encipherOnly=(0,c.getStringOption)(e.encipherOnly,t),this.id=e.id||"",this.keyAgreement=(0,c.getStringOption)(e.keyAgreement,t),this.keyCertSign=(0,c.getStringOption)(e.keyCertSign,t),this.keyEncipherment=(0,c.getStringOption)(e.keyEncipherment,t),this.nonRepudiation=(0,c.getStringOption)(e.nonRepudiation,t),this.type=(0,c.getStringOption)(e.type,["optional","required"]),this.use=e.use||"",this.usehref=e.usehref||""}}class Ue extends o.XFAObject{constructor(e){super(f,"line",!0),this.hand=(0,c.getStringOption)(e.hand,["even","left","right"]),this.id=e.id||"",this.slope=(0,c.getStringOption)(e.slope,["\\\\","/"]),this.use=e.use||"",this.usehref=e.usehref||"",this.edge=null}[n.$toHTML](){const e=this[n.$getParent]()[n.$getParent](),t=this.edge||new ue({}),r=t[n.$toStyle](),a=Object.create(null),i="visible"===t.presence?t.thickness:0;a.strokeWidth=(0,s.measureToString)(i),a.stroke=r.color;let o,l,h,u,d="100%",f="100%";e.w<=i?([o,l,h,u]=["50%",0,"50%","100%"],d=a.strokeWidth):e.h<=i?([o,l,h,u]=[0,"50%","100%","50%"],f=a.strokeWidth):"\\\\"===this.slope?[o,l,h,u]=[0,0,"100%","100%"]:[o,l,h,u]=[0,"100%","100%",0];const p={name:"svg",children:[{name:"line",attributes:{xmlns:g,x1:o,y1:l,x2:h,y2:u,style:a}}],attributes:{xmlns:g,width:d,height:f,style:{overflow:"visible"}}};return w(e)?c.HTMLResult.success({name:"div",attributes:{style:{display:"inline",width:"100%",height:"100%"}},children:[p]}):(p.attributes.style.position="absolute",c.HTMLResult.success(p))}}class $e extends o.XFAObject{constructor(e){super(f,"linear",!0),this.id=e.id||"",this.type=(0,c.getStringOption)(e.type,["toRight","toBottom","toLeft","toTop"]),this.use=e.use||"",this.usehref=e.usehref||"",this.color=null,this.extras=null}[n.$toStyle](e){return e=e?e[n.$toStyle]():"#FFFFFF","linear-gradient(".concat(this.type.replace(/([RBLT])/," $1").toLowerCase(),", ").concat(e,", ").concat(this.color?this.color[n.$toStyle]():"#000000",")")}}class Xe extends o.ContentObject{constructor(e){super(f,"lockDocument"),this.id=e.id||"",this.type=(0,c.getStringOption)(e.type,["optional","required"]),this.use=e.use||"",this.usehref=e.usehref||""}[n.$finalize](){this[n.$content]=(0,c.getStringOption)(this[n.$content],["auto","0","1"])}}class He extends o.XFAObject{constructor(e){super(f,"manifest",!0),this.action=(0,c.getStringOption)(e.action,["include","all","exclude"]),this.id=e.id||"",this.name=e.name||"",this.use=e.use||"",this.usehref=e.usehref||"",this.extras=null,this.ref=new o.XFAObjectArray}}class qe extends o.XFAObject{constructor(e){super(f,"margin",!0),this.bottomInset=(0,c.getMeasurement)(e.bottomInset,"0"),this.id=e.id||"",this.leftInset=(0,c.getMeasurement)(e.leftInset,"0"),this.rightInset=(0,c.getMeasurement)(e.rightInset,"0"),this.topInset=(0,c.getMeasurement)(e.topInset,"0"),this.use=e.use||"",this.usehref=e.usehref||"",this.extras=null}[n.$toStyle](){return{margin:(0,s.measureToString)(this.topInset)+" "+(0,s.measureToString)(this.rightInset)+" "+(0,s.measureToString)(this.bottomInset)+" "+(0,s.measureToString)(this.leftInset)}}}class ze extends o.XFAObject{constructor(e){super(f,"mdp"),this.id=e.id||"",this.permissions=(0,c.getInteger)({data:e.permissions,defaultValue:2,validate:e=>1===e||3===e}),this.signatureType=(0,c.getStringOption)(e.signatureType,["filler","author"]),this.use=e.use||"",this.usehref=e.usehref||""}}class Ge extends o.XFAObject{constructor(e){super(f,"medium"),this.id=e.id||"",this.imagingBBox=(0,c.getBBox)(e.imagingBBox),this.long=(0,c.getMeasurement)(e.long),this.orientation=(0,c.getStringOption)(e.orientation,["portrait","landscape"]),this.short=(0,c.getMeasurement)(e.short),this.stock=e.stock||"",this.trayIn=(0,c.getStringOption)(e.trayIn,["auto","delegate","pageFront"]),this.trayOut=(0,c.getStringOption)(e.trayOut,["auto","delegate"]),this.use=e.use||"",this.usehref=e.usehref||""}}class We extends o.XFAObject{constructor(e){super(f,"message",!0),this.id=e.id||"",this.use=e.use||"",this.usehref=e.usehref||"",this.text=new o.XFAObjectArray}}class Ve extends o.XFAObject{constructor(e){super(f,"numericEdit",!0),this.hScrollPolicy=(0,c.getStringOption)(e.hScrollPolicy,["auto","off","on"]),this.id=e.id||"",this.use=e.use||"",this.usehref=e.usehref||"",this.border=null,this.comb=null,this.extras=null,this.margin=null}[n.$toHTML](e){var t;const r=(0,s.toStyle)(this,"border","font","margin"),a=this[n.$getParent]()[n.$getParent](),i={name:"input",attributes:{type:"text",fieldId:a[n.$uid],dataId:(null===(t=a[n.$data])||void 0===t?void 0:t[n.$uid])||a[n.$uid],class:["xfaTextfield"],style:r,"aria-label":C(a),"aria-required":!1}};return S(a)&&(i.attributes["aria-required"]=!0,i.attributes.required=!0),c.HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[i]})}}class Ke extends o.XFAObject{constructor(e){super(f,"occur",!0),this.id=e.id||"",this.initial=""!==e.initial?(0,c.getInteger)({data:e.initial,defaultValue:"",validate:e=>!0}):"",this.max=""!==e.max?(0,c.getInteger)({data:e.max,defaultValue:1,validate:e=>!0}):"",this.min=""!==e.min?(0,c.getInteger)({data:e.min,defaultValue:1,validate:e=>!0}):"",this.use=e.use||"",this.usehref=e.usehref||"",this.extras=null}[n.$clean](){const e=this[n.$getParent](),t=this.min;""===this.min&&(this.min=e instanceof Qe||e instanceof et?0:1),""===this.max&&(this.max=""===t?e instanceof Qe||e instanceof et?-1:1:this.min),-1!==this.max&&this.max!0}),this.name=e.name||"",this.numbered=(0,c.getInteger)({data:e.numbered,defaultValue:1,validate:e=>!0}),this.oddOrEven=(0,c.getStringOption)(e.oddOrEven,["any","even","odd"]),this.pagePosition=(0,c.getStringOption)(e.pagePosition,["any","first","last","only","rest"]),this.relevant=(0,c.getRelevant)(e.relevant),this.use=e.use||"",this.usehref=e.usehref||"",this.desc=null,this.extras=null,this.medium=null,this.occur=null,this.area=new o.XFAObjectArray,this.contentArea=new o.XFAObjectArray,this.draw=new o.XFAObjectArray,this.exclGroup=new o.XFAObjectArray,this.field=new o.XFAObjectArray,this.subform=new o.XFAObjectArray}[n.$isUsable](){return this[n.$extra]?!this.occur||-1===this.occur.max||this[n.$extra].numberOfUsee.oddOrEven===t&&e.pagePosition===r));return a||(a=this.pageArea.children.find((e=>"any"===e.oddOrEven&&e.pagePosition===r)),a||(a=this.pageArea.children.find((e=>"any"===e.oddOrEven&&"any"===e.pagePosition)),a||this.pageArea.children[0]))}}class tt extends o.XFAObject{constructor(e){super(f,"para",!0),this.hAlign=(0,c.getStringOption)(e.hAlign,["left","center","justify","justifyAll","radix","right"]),this.id=e.id||"",this.lineHeight=e.lineHeight?(0,c.getMeasurement)(e.lineHeight,"0pt"):"",this.marginLeft=e.marginLeft?(0,c.getMeasurement)(e.marginLeft,"0pt"):"",this.marginRight=e.marginRight?(0,c.getMeasurement)(e.marginRight,"0pt"):"",this.orphans=(0,c.getInteger)({data:e.orphans,defaultValue:0,validate:e=>e>=0}),this.preserve=e.preserve||"",this.radixOffset=e.radixOffset?(0,c.getMeasurement)(e.radixOffset,"0pt"):"",this.spaceAbove=e.spaceAbove?(0,c.getMeasurement)(e.spaceAbove,"0pt"):"",this.spaceBelow=e.spaceBelow?(0,c.getMeasurement)(e.spaceBelow,"0pt"):"",this.tabDefault=e.tabDefault?(0,c.getMeasurement)(this.tabDefault):"",this.tabStops=(e.tabStops||"").trim().split(/\\s+/).map(((e,t)=>t%2==1?(0,c.getMeasurement)(e):e)),this.textIndent=e.textIndent?(0,c.getMeasurement)(e.textIndent,"0pt"):"",this.use=e.use||"",this.usehref=e.usehref||"",this.vAlign=(0,c.getStringOption)(e.vAlign,["top","bottom","middle"]),this.widows=(0,c.getInteger)({data:e.widows,defaultValue:0,validate:e=>e>=0}),this.hyphenation=null}[n.$toStyle](){const e=(0,s.toStyle)(this,"hAlign");return""!==this.marginLeft&&(e.paddingLeft=(0,s.measureToString)(this.marginLeft)),""!==this.marginRight&&(e.paddingight=(0,s.measureToString)(this.marginRight)),""!==this.spaceAbove&&(e.paddingTop=(0,s.measureToString)(this.spaceAbove)),""!==this.spaceBelow&&(e.paddingBottom=(0,s.measureToString)(this.spaceBelow)),""!==this.textIndent&&(e.textIndent=(0,s.measureToString)(this.textIndent),(0,s.fixTextIndent)(e)),this.lineHeight>0&&(e.lineHeight=(0,s.measureToString)(this.lineHeight)),""!==this.tabDefault&&(e.tabSize=(0,s.measureToString)(this.tabDefault)),this.tabStops.length,this.hyphenatation&&Object.assign(e,this.hyphenatation[n.$toStyle]()),e}}class rt extends o.XFAObject{constructor(e){super(f,"passwordEdit",!0),this.hScrollPolicy=(0,c.getStringOption)(e.hScrollPolicy,["auto","off","on"]),this.id=e.id||"",this.passwordChar=e.passwordChar||"*",this.use=e.use||"",this.usehref=e.usehref||"",this.border=null,this.extras=null,this.margin=null}}class nt extends o.XFAObject{constructor(e){super(f,"pattern",!0),this.id=e.id||"",this.type=(0,c.getStringOption)(e.type,["crossHatch","crossDiagonal","diagonalLeft","diagonalRight","horizontal","vertical"]),this.use=e.use||"",this.usehref=e.usehref||"",this.color=null,this.extras=null}[n.$toStyle](e){e=e?e[n.$toStyle]():"#FFFFFF";const t=this.color?this.color[n.$toStyle]():"#000000",r="repeating-linear-gradient",a="".concat(e,",").concat(e," 5px,").concat(t," 5px,").concat(t," 10px");switch(this.type){case"crossHatch":return"".concat(r,"(to top,").concat(a,") ").concat(r,"(to right,").concat(a,")");case"crossDiagonal":return"".concat(r,"(45deg,").concat(a,") ").concat(r,"(-45deg,").concat(a,")");case"diagonalLeft":return"".concat(r,"(45deg,").concat(a,")");case"diagonalRight":return"".concat(r,"(-45deg,").concat(a,")");case"horizontal":return"".concat(r,"(to top,").concat(a,")");case"vertical":return"".concat(r,"(to right,").concat(a,")")}return""}}class at extends o.StringObject{constructor(e){super(f,"picture"),this.id=e.id||"",this.use=e.use||"",this.usehref=e.usehref||""}}class it extends o.XFAObject{constructor(e){super(f,"proto",!0),this.appearanceFilter=new o.XFAObjectArray,this.arc=new o.XFAObjectArray,this.area=new o.XFAObjectArray,this.assist=new o.XFAObjectArray,this.barcode=new o.XFAObjectArray,this.bindItems=new o.XFAObjectArray,this.bookend=new o.XFAObjectArray,this.boolean=new o.XFAObjectArray,this.border=new o.XFAObjectArray,this.break=new o.XFAObjectArray,this.breakAfter=new o.XFAObjectArray,this.breakBefore=new o.XFAObjectArray,this.button=new o.XFAObjectArray,this.calculate=new o.XFAObjectArray,this.caption=new o.XFAObjectArray,this.certificate=new o.XFAObjectArray,this.certificates=new o.XFAObjectArray,this.checkButton=new o.XFAObjectArray,this.choiceList=new o.XFAObjectArray,this.color=new o.XFAObjectArray,this.comb=new o.XFAObjectArray,this.connect=new o.XFAObjectArray,this.contentArea=new o.XFAObjectArray,this.corner=new o.XFAObjectArray,this.date=new o.XFAObjectArray,this.dateTime=new o.XFAObjectArray,this.dateTimeEdit=new o.XFAObjectArray,this.decimal=new o.XFAObjectArray,this.defaultUi=new o.XFAObjectArray,this.desc=new o.XFAObjectArray,this.digestMethod=new o.XFAObjectArray,this.digestMethods=new o.XFAObjectArray,this.draw=new o.XFAObjectArray,this.edge=new o.XFAObjectArray,this.encoding=new o.XFAObjectArray,this.encodings=new o.XFAObjectArray,this.encrypt=new o.XFAObjectArray,this.encryptData=new o.XFAObjectArray,this.encryption=new o.XFAObjectArray,this.encryptionMethod=new o.XFAObjectArray,this.encryptionMethods=new o.XFAObjectArray,this.event=new o.XFAObjectArray,this.exData=new o.XFAObjectArray,this.exObject=new o.XFAObjectArray,this.exclGroup=new o.XFAObjectArray,this.execute=new o.XFAObjectArray,this.extras=new o.XFAObjectArray,this.field=new o.XFAObjectArray,this.fill=new o.XFAObjectArray,this.filter=new o.XFAObjectArray,this.float=new o.XFAObjectArray,this.font=new o.XFAObjectArray,this.format=new o.XFAObjectArray,this.handler=new o.XFAObjectArray,this.hyphenation=new o.XFAObjectArray,this.image=new o.XFAObjectArray,this.imageEdit=new o.XFAObjectArray,this.integer=new o.XFAObjectArray,this.issuers=new o.XFAObjectArray,this.items=new o.XFAObjectArray,this.keep=new o.XFAObjectArray,this.keyUsage=new o.XFAObjectArray,this.line=new o.XFAObjectArray,this.linear=new o.XFAObjectArray,this.lockDocument=new o.XFAObjectArray,this.manifest=new o.XFAObjectArray,this.margin=new o.XFAObjectArray,this.mdp=new o.XFAObjectArray,this.medium=new o.XFAObjectArray,this.message=new o.XFAObjectArray,this.numericEdit=new o.XFAObjectArray,this.occur=new o.XFAObjectArray,this.oid=new o.XFAObjectArray,this.oids=new o.XFAObjectArray,this.overflow=new o.XFAObjectArray,this.pageArea=new o.XFAObjectArray,this.pageSet=new o.XFAObjectArray,this.para=new o.XFAObjectArray,this.passwordEdit=new o.XFAObjectArray,this.pattern=new o.XFAObjectArray,this.picture=new o.XFAObjectArray,this.radial=new o.XFAObjectArray,this.reason=new o.XFAObjectArray,this.reasons=new o.XFAObjectArray,this.rectangle=new o.XFAObjectArray,this.ref=new o.XFAObjectArray,this.script=new o.XFAObjectArray,this.setProperty=new o.XFAObjectArray,this.signData=new o.XFAObjectArray,this.signature=new o.XFAObjectArray,this.signing=new o.XFAObjectArray,this.solid=new o.XFAObjectArray,this.speak=new o.XFAObjectArray,this.stipple=new o.XFAObjectArray,this.subform=new o.XFAObjectArray,this.subformSet=new o.XFAObjectArray,this.subjectDN=new o.XFAObjectArray,this.subjectDNs=new o.XFAObjectArray,this.submit=new o.XFAObjectArray,this.text=new o.XFAObjectArray,this.textEdit=new o.XFAObjectArray,this.time=new o.XFAObjectArray,this.timeStamp=new o.XFAObjectArray,this.toolTip=new o.XFAObjectArray,this.traversal=new o.XFAObjectArray,this.traverse=new o.XFAObjectArray,this.ui=new o.XFAObjectArray,this.validate=new o.XFAObjectArray,this.value=new o.XFAObjectArray,this.variables=new o.XFAObjectArray}}class st extends o.XFAObject{constructor(e){super(f,"radial",!0),this.id=e.id||"",this.type=(0,c.getStringOption)(e.type,["toEdge","toCenter"]),this.use=e.use||"",this.usehref=e.usehref||"",this.color=null,this.extras=null}[n.$toStyle](e){e=e?e[n.$toStyle]():"#FFFFFF";const t=this.color?this.color[n.$toStyle]():"#000000";return"radial-gradient(circle at center, ".concat("toEdge"===this.type?"".concat(e,",").concat(t):"".concat(t,",").concat(e),")")}}class ot extends o.StringObject{constructor(e){super(f,"reason"),this.id=e.id||"",this.name=e.name||"",this.use=e.use||"",this.usehref=e.usehref||""}}class ct extends o.XFAObject{constructor(e){super(f,"reasons",!0),this.id=e.id||"",this.type=(0,c.getStringOption)(e.type,["optional","required"]),this.use=e.use||"",this.usehref=e.usehref||"",this.reason=new o.XFAObjectArray}}class lt extends o.XFAObject{constructor(e){super(f,"rectangle",!0),this.hand=(0,c.getStringOption)(e.hand,["even","left","right"]),this.id=e.id||"",this.use=e.use||"",this.usehref=e.usehref||"",this.corner=new o.XFAObjectArray(4),this.edge=new o.XFAObjectArray(4),this.fill=null}[n.$toHTML](){var e;const t=this.edge.children.length?this.edge.children[0]:new ue({}),r=t[n.$toStyle](),a=Object.create(null);"visible"===(null===(e=this.fill)||void 0===e?void 0:e.presence)?Object.assign(a,this.fill[n.$toStyle]()):a.fill="transparent",a.strokeWidth=(0,s.measureToString)("visible"===t.presence?t.thickness:0),a.stroke=r.color;const i=(this.corner.children.length?this.corner.children[0]:new te({}))[n.$toStyle](),o={name:"svg",children:[{name:"rect",attributes:{xmlns:g,width:"100%",height:"100%",x:0,y:0,rx:i.radius,ry:i.radius,style:a}}],attributes:{xmlns:g,style:{overflow:"visible"},width:"100%",height:"100%"}};return w(this[n.$getParent]()[n.$getParent]())?c.HTMLResult.success({name:"div",attributes:{style:{display:"inline",width:"100%",height:"100%"}},children:[o]}):(o.attributes.style.position="absolute",c.HTMLResult.success(o))}}class ht extends o.StringObject{constructor(e){super(f,"ref"),this.id=e.id||"",this.use=e.use||"",this.usehref=e.usehref||""}}class ut extends o.StringObject{constructor(e){super(f,"script"),this.binding=e.binding||"",this.contentType=e.contentType||"",this.id=e.id||"",this.name=e.name||"",this.runAt=(0,c.getStringOption)(e.runAt,["client","both","server"]),this.use=e.use||"",this.usehref=e.usehref||""}}class dt extends o.XFAObject{constructor(e){super(f,"setProperty"),this.connection=e.connection||"",this.ref=e.ref||"",this.target=e.target||""}}t.SetProperty=dt;class ft extends o.XFAObject{constructor(e){super(f,"signData",!0),this.id=e.id||"",this.operation=(0,c.getStringOption)(e.operation,["sign","clear","verify"]),this.ref=e.ref||"",this.target=e.target||"",this.use=e.use||"",this.usehref=e.usehref||"",this.filter=null,this.manifest=null}}class gt extends o.XFAObject{constructor(e){super(f,"signature",!0),this.id=e.id||"",this.type=(0,c.getStringOption)(e.type,["PDF1.3","PDF1.6"]),this.use=e.use||"",this.usehref=e.usehref||"",this.border=null,this.extras=null,this.filter=null,this.manifest=null,this.margin=null}}class pt extends o.XFAObject{constructor(e){super(f,"signing",!0),this.id=e.id||"",this.type=(0,c.getStringOption)(e.type,["optional","required"]),this.use=e.use||"",this.usehref=e.usehref||"",this.certificate=new o.XFAObjectArray}}class mt extends o.XFAObject{constructor(e){super(f,"solid",!0),this.id=e.id||"",this.use=e.use||"",this.usehref=e.usehref||"",this.extras=null}[n.$toStyle](e){return e?e[n.$toStyle]():"#FFFFFF"}}class bt extends o.StringObject{constructor(e){super(f,"speak"),this.disable=(0,c.getInteger)({data:e.disable,defaultValue:0,validate:e=>1===e}),this.id=e.id||"",this.priority=(0,c.getStringOption)(e.priority,["custom","caption","name","toolTip"]),this.rid=e.rid||"",this.use=e.use||"",this.usehref=e.usehref||""}}class yt extends o.XFAObject{constructor(e){super(f,"stipple",!0),this.id=e.id||"",this.rate=(0,c.getInteger)({data:e.rate,defaultValue:50,validate:e=>e>=0&&e<=100}),this.use=e.use||"",this.usehref=e.usehref||"",this.color=null,this.extras=null}[n.$toStyle](e){const t=this.rate/100;return l.Util.makeHexColor(Math.round(e.value.r*(1-t)+this.value.r*t),Math.round(e.value.g*(1-t)+this.value.g*t),Math.round(e.value.b*(1-t)+this.value.b*t))}}class wt extends o.XFAObject{constructor(e){super(f,"subform",!0),this.access=(0,c.getStringOption)(e.access,["open","nonInteractive","protected","readOnly"]),this.allowMacro=(0,c.getInteger)({data:e.allowMacro,defaultValue:0,validate:e=>1===e}),this.anchorType=(0,c.getStringOption)(e.anchorType,["topLeft","bottomCenter","bottomLeft","bottomRight","middleCenter","middleLeft","middleRight","topCenter","topRight"]),this.colSpan=(0,c.getInteger)({data:e.colSpan,defaultValue:1,validate:e=>e>=1||-1===e}),this.columnWidths=(e.columnWidths||"").trim().split(/\\s+/).map((e=>"-1"===e?-1:(0,c.getMeasurement)(e))),this.h=e.h?(0,c.getMeasurement)(e.h):"",this.hAlign=(0,c.getStringOption)(e.hAlign,["left","center","justify","justifyAll","radix","right"]),this.id=e.id||"",this.layout=(0,c.getStringOption)(e.layout,["position","lr-tb","rl-row","rl-tb","row","table","tb"]),this.locale=e.locale||"",this.maxH=(0,c.getMeasurement)(e.maxH,"0pt"),this.maxW=(0,c.getMeasurement)(e.maxW,"0pt"),this.mergeMode=(0,c.getStringOption)(e.mergeMode,["consumeData","matchTemplate"]),this.minH=(0,c.getMeasurement)(e.minH,"0pt"),this.minW=(0,c.getMeasurement)(e.minW,"0pt"),this.name=e.name||"",this.presence=(0,c.getStringOption)(e.presence,["visible","hidden","inactive","invisible"]),this.relevant=(0,c.getRelevant)(e.relevant),this.restoreState=(0,c.getStringOption)(e.restoreState,["manual","auto"]),this.scope=(0,c.getStringOption)(e.scope,["name","none"]),this.use=e.use||"",this.usehref=e.usehref||"",this.w=e.w?(0,c.getMeasurement)(e.w):"",this.x=(0,c.getMeasurement)(e.x,"0pt"),this.y=(0,c.getMeasurement)(e.y,"0pt"),this.assist=null,this.bind=null,this.bookend=null,this.border=null,this.break=null,this.calculate=null,this.desc=null,this.extras=null,this.keep=null,this.margin=null,this.occur=null,this.overflow=null,this.pageSet=null,this.para=null,this.traversal=null,this.validate=null,this.variables=null,this.area=new o.XFAObjectArray,this.breakAfter=new o.XFAObjectArray,this.breakBefore=new o.XFAObjectArray,this.connect=new o.XFAObjectArray,this.draw=new o.XFAObjectArray,this.event=new o.XFAObjectArray,this.exObject=new o.XFAObjectArray,this.exclGroup=new o.XFAObjectArray,this.field=new o.XFAObjectArray,this.proto=new o.XFAObjectArray,this.setProperty=new o.XFAObjectArray,this.subform=new o.XFAObjectArray,this.subformSet=new o.XFAObjectArray}[n.$getSubformParent](){const e=this[n.$getParent]();return e instanceof vt?e[n.$getSubformParent]():e}[n.$isBindable](){return!0}[n.$isThereMoreWidth](){return this.layout.endsWith("-tb")&&0===this[n.$extra].attempt&&this[n.$extra].numberInLine>0||this[n.$getParent]()[n.$isThereMoreWidth]()}*[n.$getContainedChildren](){yield*x(this)}[n.$flushHTML](){return(0,i.flushHTML)(this)}[n.$addHTML](e,t){(0,i.addHTML)(this,e,t)}[n.$getAvailableSpace](){return(0,i.getAvailableSpace)(this)}[n.$isSplittable](){var e;const t=this[n.$getSubformParent]();return!!t[n.$isSplittable]()&&(void 0!==this[n.$extra]._isSplittable?this[n.$extra]._isSplittable:"position"===this.layout||this.layout.includes("row")||this.keep&&"none"!==this.keep.intact?(this[n.$extra]._isSplittable=!1,!1):!(null!==(e=t.layout)&&void 0!==e&&e.endsWith("-tb")&&0!==t[n.$extra].numberInLine||(this[n.$extra]._isSplittable=!0,0)))}[n.$toHTML](e){var t;if(A(this),this.break){if("auto"!==this.break.after||""!==this.break.afterTarget){const e=new X({targetType:this.break.after,target:this.break.afterTarget,startNew:this.break.startNew.toString()});e[n.$globalData]=this[n.$globalData],this[n.$appendChild](e),this.breakAfter.push(e)}if("auto"!==this.break.before||""!==this.break.beforeTarget){const e=new H({targetType:this.break.before,target:this.break.beforeTarget,startNew:this.break.startNew.toString()});e[n.$globalData]=this[n.$globalData],this[n.$appendChild](e),this.breakBefore.push(e)}if(""!==this.break.overflowTarget){const e=new Ze({target:this.break.overflowTarget,leader:this.break.overflowLeader,trailer:this.break.overflowTrailer});e[n.$globalData]=this[n.$globalData],this[n.$appendChild](e),this.overflow.push(e)}this[n.$removeChild](this.break),this.break=null}if("hidden"===this.presence||"inactive"===this.presence)return c.HTMLResult.EMPTY;if((this.breakBefore.children.length>1||this.breakAfter.children.length>1)&&(0,l.warn)("XFA - Several breakBefore or breakAfter in subforms: please file a bug."),this.breakBefore.children.length>=1){const e=this.breakBefore.children[0];if(T(e))return c.HTMLResult.breakNode(e)}if(null!==(t=this[n.$extra])&&void 0!==t&&t.afterBreakAfter)return c.HTMLResult.EMPTY;(0,s.fixDimensions)(this);const r=[],a={id:this[n.$uid],class:[]};(0,s.setAccess)(this,a.class),this[n.$extra]||(this[n.$extra]=Object.create(null)),Object.assign(this[n.$extra],{children:r,line:null,attributes:a,attempt:0,numberInLine:0,availableSpace:{width:Math.min(this.w||1/0,e.width),height:Math.min(this.h||1/0,e.height)},width:0,height:0,prevHeight:0,currentWidth:0});const o=this[n.$getTemplateRoot](),h=o[n.$extra].noLayoutFailure,u=this[n.$isSplittable]();if(u||F(this),!(0,i.checkDimensions)(this,e))return c.HTMLResult.FAILURE;const d=new Set(["area","draw","exclGroup","field","subform","subformSet"]);if(this.layout.includes("row")){const e=this[n.$getSubformParent]().columnWidths;Array.isArray(e)&&e.length>0&&(this[n.$extra].columnWidths=e,this[n.$extra].currentColumn=0)}const f=(0,s.toStyle)(this,"anchorType","dimensions","position","presence","border","margin","hAlign"),g=["xfaSubform"],p=(0,s.layoutClass)(this);if(p&&g.push(p),a.style=f,a.class=g,this.name&&(a.xfaName=this.name),this.overflow){const t=this.overflow[n.$getExtra]();t.addLeader&&(t.addLeader=!1,M(this,t.leader,e))}this[n.$pushPara]();const m="lr-tb"===this.layout||"rl-tb"===this.layout,b=m?2:1;for(;this[n.$extra].attempt=1){const e=this.breakAfter.children[0];if(T(e))return this[n.$extra].afterBreakAfter=O,c.HTMLResult.breakNode(e)}return delete this[n.$extra],O}}class vt extends o.XFAObject{constructor(e){super(f,"subformSet",!0),this.id=e.id||"",this.name=e.name||"",this.relation=(0,c.getStringOption)(e.relation,["ordered","choice","unordered"]),this.relevant=(0,c.getRelevant)(e.relevant),this.use=e.use||"",this.usehref=e.usehref||"",this.bookend=null,this.break=null,this.desc=null,this.extras=null,this.occur=null,this.overflow=null,this.breakAfter=new o.XFAObjectArray,this.breakBefore=new o.XFAObjectArray,this.subform=new o.XFAObjectArray,this.subformSet=new o.XFAObjectArray}*[n.$getContainedChildren](){yield*x(this)}[n.$getSubformParent](){let e=this[n.$getParent]();for(;!(e instanceof wt);)e=e[n.$getParent]();return e}[n.$isBindable](){return!0}}class xt extends o.ContentObject{constructor(e){super(f,"subjectDN"),this.delimiter=e.delimiter||",",this.id=e.id||"",this.name=e.name||"",this.use=e.use||"",this.usehref=e.usehref||""}[n.$finalize](){this[n.$content]=new Map(this[n.$content].split(this.delimiter).map((e=>((e=e.split("=",2))[0]=e[0].trim(),e))))}}class St extends o.XFAObject{constructor(e){super(f,"subjectDNs",!0),this.id=e.id||"",this.type=(0,c.getStringOption)(e.type,["optional","required"]),this.use=e.use||"",this.usehref=e.usehref||"",this.subjectDN=new o.XFAObjectArray}}class At extends o.XFAObject{constructor(e){super(f,"submit",!0),this.embedPDF=(0,c.getInteger)({data:e.embedPDF,defaultValue:0,validate:e=>1===e}),this.format=(0,c.getStringOption)(e.format,["xdp","formdata","pdf","urlencoded","xfd","xml"]),this.id=e.id||"",this.target=e.target||"",this.textEncoding=(0,c.getKeyword)({data:e.textEncoding?e.textEncoding.toLowerCase():"",defaultValue:"",validate:e=>["utf-8","big-five","fontspecific","gbk","gb-18030","gb-2312","ksc-5601","none","shift-jis","ucs-2","utf-16"].includes(e)||e.match(/iso-8859-\\d{2}/)}),this.use=e.use||"",this.usehref=e.usehref||"",this.xdpContent=e.xdpContent||"",this.encrypt=null,this.encryptData=new o.XFAObjectArray,this.signData=new o.XFAObjectArray}}class kt extends o.XFAObject{constructor(e){super(f,"template",!0),this.baseProfile=(0,c.getStringOption)(e.baseProfile,["full","interactiveForms"]),this.extras=null,this.subform=new o.XFAObjectArray}[n.$finalize](){0===this.subform.children.length&&(0,l.warn)("XFA - No subforms in template node."),this.subform.children.length>=2&&(0,l.warn)("XFA - Several subforms in template node: please file a bug."),this[n.$tabIndex]=5e3}[n.$isSplittable](){return!0}[n.$searchNode](e,t){return e.startsWith("#")?[this[n.$ids].get(e.slice(1))]:(0,d.searchNode)(this,t,e,!0,!0)}*[n.$toPages](){var e,t;if(!this.subform.children.length)return c.HTMLResult.success({name:"div",children:[]});this[n.$extra]={overflowNode:null,firstUnsplittable:null,currentContentArea:null,currentPageArea:null,noLayoutFailure:!1,pageNumber:1,pagePosition:"first",oddOrEven:"odd",blankOrNotBlank:"nonBlank",paraStack:[]};const r=this.subform.children[0];r.pageSet[n.$cleanPage]();const a=r.pageSet.pageArea.children,i={name:"div",children:[]};let s=null,o=null,h=null;if(r.breakBefore.children.length>=1?(o=r.breakBefore.children[0],h=o.target):r.subform.children.length>=1&&r.subform.children[0].breakBefore.children.length>=1?(o=r.subform.children[0].breakBefore.children[0],h=o.target):null!==(e=r.break)&&void 0!==e&&e.beforeTarget?(o=r.break,h=o.beforeTarget):r.subform.children.length>=1&&null!==(t=r.subform.children[0].break)&&void 0!==t&&t.beforeTarget&&(o=r.subform.children[0].break,h=o.beforeTarget),o){const e=this[n.$searchNode](h,o[n.$getParent]());e instanceof Qe&&(s=e,o[n.$extra]={})}s||(s=a[0]),s[n.$extra]={numberOfUse:1};const u=s[n.$getParent]();u[n.$extra]={numberOfUse:1,pageIndex:u.pageArea.children.indexOf(s),pageSetIndex:0};let d,f=null,g=null,p=!0,m=0,b=0;for(;;){if(p)m=0;else if(i.children.pop(),3==++m)return(0,l.warn)("XFA - Something goes wrong: please file a bug."),i;d=null,this[n.$extra].currentPageArea=s;const e=s[n.$toHTML]().html;i.children.push(e),f&&(this[n.$extra].noLayoutFailure=!0,e.children.push(f[n.$toHTML](s[n.$extra].space).html),f=null),g&&(this[n.$extra].noLayoutFailure=!0,e.children.push(g[n.$toHTML](s[n.$extra].space).html),g=null);const t=s.contentArea.children,a=e.children.filter((e=>e.attributes.class.includes("xfaContentarea")));p=!1,this[n.$extra].firstUnsplittable=null,this[n.$extra].noLayoutFailure=!1;const o=e=>{const t=r[n.$flushHTML]();var i;t&&(p||(p=(null===(i=t.children)||void 0===i?void 0:i.length)>0),a[e].children.push(t))};for(let e=b,s=t.length;e0),a[e].children.push(l.html)):!p&&i.children.length>1&&i.children.pop(),i;if(l.isBreak()){const t=l.breakNode;if(o(e),"auto"===t.targetType)continue;t.leader&&(f=this[n.$searchNode](t.leader,t[n.$getParent]()),f=f?f[0]:null),t.trailer&&(g=this[n.$searchNode](t.trailer,t[n.$getParent]()),g=g?g[0]:null),"pageArea"===t.targetType?(d=t[n.$extra].target,e=1/0):t[n.$extra].target?(d=t[n.$extra].target,b=t[n.$extra].index+1,e=1/0):e=t[n.$extra].index}else if(this[n.$extra].overflowNode){const r=this[n.$extra].overflowNode;this[n.$extra].overflowNode=null;const a=r[n.$getExtra](),i=a.target;a.addLeader=null!==a.leader,a.addTrailer=null!==a.trailer,o(e);const s=e;if(e=1/0,i instanceof Qe)d=i;else if(i instanceof ee){const r=t.indexOf(i);-1!==r?r>s?e=r-1:b=r:(d=i[n.$getParent](),b=d.contentArea.children.indexOf(i))}}else o(e)}this[n.$extra].pageNumber+=1,d&&(d[n.$isUsable]()?d[n.$extra].numberOfUse+=1:d=null),s=d||s[n.$getNextPage](),yield null}}}t.Template=kt;class Ct extends o.ContentObject{constructor(e){super(f,"text"),this.id=e.id||"",this.maxChars=(0,c.getInteger)({data:e.maxChars,defaultValue:0,validate:e=>e>=0}),this.name=e.name||"",this.rid=e.rid||"",this.use=e.use||"",this.usehref=e.usehref||""}[n.$acceptWhitespace](){return!0}[n.$onChild](e){return e[n.$namespaceId]===a.NamespaceIds.xhtml.id?(this[n.$content]=e,!0):((0,l.warn)("XFA - Invalid content in Text: ".concat(e[n.$nodeName],".")),!1)}[n.$onText](e){this[n.$content]instanceof o.XFAObject||super[n.$onText](e)}[n.$finalize](){"string"==typeof this[n.$content]&&(this[n.$content]=this[n.$content].replaceAll("\\r\\n","\\n"))}[n.$getExtra](){return"string"==typeof this[n.$content]?this[n.$content].split(/[\\u2029\\u2028\\n]/).reduce(((e,t)=>(t&&e.push(t),e)),[]).join("\\n"):this[n.$content][n.$text]()}[n.$toHTML](e){if("string"==typeof this[n.$content]){const e=O(this[n.$content]).html;return this[n.$content].includes("\\u2029")?(e.name="div",e.children=[],this[n.$content].split("\\u2029").map((e=>e.split(/[\\u2028\\n]/).reduce(((e,t)=>(e.push({name:"span",value:t},{name:"br"}),e)),[]))).forEach((t=>{e.children.push({name:"p",children:t})}))):/[\\u2028\\n]/.test(this[n.$content])&&(e.name="div",e.children=[],this[n.$content].split(/[\\u2028\\n]/).forEach((t=>{e.children.push({name:"span",value:t},{name:"br"})}))),c.HTMLResult.success(e)}return this[n.$content][n.$toHTML](e)}}t.Text=Ct;class Ot extends o.XFAObject{constructor(e){super(f,"textEdit",!0),this.allowRichText=(0,c.getInteger)({data:e.allowRichText,defaultValue:0,validate:e=>1===e}),this.hScrollPolicy=(0,c.getStringOption)(e.hScrollPolicy,["auto","off","on"]),this.id=e.id||"",this.multiLine=(0,c.getInteger)({data:e.multiLine,defaultValue:"",validate:e=>0===e||1===e}),this.use=e.use||"",this.usehref=e.usehref||"",this.vScrollPolicy=(0,c.getStringOption)(e.vScrollPolicy,["auto","off","on"]),this.border=null,this.comb=null,this.extras=null,this.margin=null}[n.$toHTML](e){var t,r;const a=(0,s.toStyle)(this,"border","font","margin");let i;const o=this[n.$getParent]()[n.$getParent]();return""===this.multiLine&&(this.multiLine=o instanceof he?1:0),i=1===this.multiLine?{name:"textarea",attributes:{dataId:(null===(t=o[n.$data])||void 0===t?void 0:t[n.$uid])||o[n.$uid],fieldId:o[n.$uid],class:["xfaTextfield"],style:a,"aria-label":C(o),"aria-required":!1}}:{name:"input",attributes:{type:"text",dataId:(null===(r=o[n.$data])||void 0===r?void 0:r[n.$uid])||o[n.$uid],fieldId:o[n.$uid],class:["xfaTextfield"],style:a,"aria-label":C(o),"aria-required":!1}},S(o)&&(i.attributes["aria-required"]=!0,i.attributes.required=!0),c.HTMLResult.success({name:"label",attributes:{class:["xfaLabel"]},children:[i]})}}class Ft extends o.StringObject{constructor(e){super(f,"time"),this.id=e.id||"",this.name=e.name||"",this.use=e.use||"",this.usehref=e.usehref||""}[n.$finalize](){const e=this[n.$content].trim();this[n.$content]=e?new Date(e):null}[n.$toHTML](e){return O(this[n.$content]?this[n.$content].toString():"")}}class It extends o.XFAObject{constructor(e){super(f,"timeStamp"),this.id=e.id||"",this.server=e.server||"",this.type=(0,c.getStringOption)(e.type,["optional","required"]),this.use=e.use||"",this.usehref=e.usehref||""}}class Tt extends o.StringObject{constructor(e){super(f,"toolTip"),this.id=e.id||"",this.rid=e.rid||"",this.use=e.use||"",this.usehref=e.usehref||""}}class Mt extends o.XFAObject{constructor(e){super(f,"traversal",!0),this.id=e.id||"",this.use=e.use||"",this.usehref=e.usehref||"",this.extras=null,this.traverse=new o.XFAObjectArray}}class Et extends o.XFAObject{constructor(e){super(f,"traverse",!0),this.id=e.id||"",this.operation=(0,c.getStringOption)(e.operation,["next","back","down","first","left","right","up"]),this.ref=e.ref||"",this.use=e.use||"",this.usehref=e.usehref||"",this.extras=null,this.script=null}get name(){return this.operation}[n.$isTransparent](){return!1}}class Pt extends o.XFAObject{constructor(e){super(f,"ui",!0),this.id=e.id||"",this.use=e.use||"",this.usehref=e.usehref||"",this.extras=null,this.picture=null,this.barcode=null,this.button=null,this.checkButton=null,this.choiceList=null,this.dateTimeEdit=null,this.defaultUi=null,this.imageEdit=null,this.numericEdit=null,this.passwordEdit=null,this.signature=null,this.textEdit=null}[n.$getExtra](){if(void 0===this[n.$extra]){for(const e of Object.getOwnPropertyNames(this)){if("extras"===e||"picture"===e)continue;const t=this[e];if(t instanceof o.XFAObject)return this[n.$extra]=t,t}this[n.$extra]=null}return this[n.$extra]}[n.$toHTML](e){const t=this[n.$getExtra]();return t?t[n.$toHTML](e):c.HTMLResult.EMPTY}}class Rt extends o.XFAObject{constructor(e){super(f,"validate",!0),this.formatTest=(0,c.getStringOption)(e.formatTest,["warning","disabled","error"]),this.id=e.id||"",this.nullTest=(0,c.getStringOption)(e.nullTest,["disabled","error","warning"]),this.scriptTest=(0,c.getStringOption)(e.scriptTest,["error","disabled","warning"]),this.use=e.use||"",this.usehref=e.usehref||"",this.extras=null,this.message=null,this.picture=null,this.script=null}}class Nt extends o.XFAObject{constructor(e){super(f,"value",!0),this.id=e.id||"",this.override=(0,c.getInteger)({data:e.override,defaultValue:0,validate:e=>1===e}),this.relevant=(0,c.getRelevant)(e.relevant),this.use=e.use||"",this.usehref=e.usehref||"",this.arc=null,this.boolean=null,this.date=null,this.dateTime=null,this.decimal=null,this.exData=null,this.float=null,this.image=null,this.integer=null,this.line=null,this.rectangle=null,this.text=null,this.time=null}[n.$setValue](e){var t;const r=this[n.$getParent]();if(r instanceof Ce&&null!==(t=r.ui)&&void 0!==t&&t.imageEdit)return this.image||(this.image=new Re({}),this[n.$appendChild](this.image)),void(this.image[n.$content]=e[n.$content]);const a=e[n.$nodeName];if(null===this[a]){for(const e of Object.getOwnPropertyNames(this)){const t=this[e];t instanceof o.XFAObject&&(this[e]=null,this[n.$removeChild](t))}this[e[n.$nodeName]]=e,this[n.$appendChild](e)}else this[a][n.$content]=e[n.$content]}[n.$text](){if(this.exData)return"string"==typeof this.exData[n.$content]?this.exData[n.$content].trim():this.exData[n.$content][n.$text]().trim();for(const e of Object.getOwnPropertyNames(this)){if("image"===e)continue;const t=this[e];if(t instanceof o.XFAObject)return(t[n.$content]||"").toString().trim()}return null}[n.$toHTML](e){for(const t of Object.getOwnPropertyNames(this)){const r=this[t];if(r instanceof o.XFAObject)return r[n.$toHTML](e)}return c.HTMLResult.EMPTY}}t.Value=Nt;class Dt extends o.XFAObject{constructor(e){super(f,"variables",!0),this.id=e.id||"",this.use=e.use||"",this.usehref=e.usehref||"",this.boolean=new o.XFAObjectArray,this.date=new o.XFAObjectArray,this.dateTime=new o.XFAObjectArray,this.decimal=new o.XFAObjectArray,this.exData=new o.XFAObjectArray,this.float=new o.XFAObjectArray,this.image=new o.XFAObjectArray,this.integer=new o.XFAObjectArray,this.manifest=new o.XFAObjectArray,this.script=new o.XFAObjectArray,this.text=new o.XFAObjectArray,this.time=new o.XFAObjectArray}[n.$isTransparent](){return!0}}class Bt{static[a.$buildXFAObject](e,t){if(Bt.hasOwnProperty(e)){const r=Bt[e](t);return r[n.$setSetAttributes](t),r}}static appearanceFilter(e){return new E(e)}static arc(e){return new P(e)}static area(e){return new R(e)}static assist(e){return new N(e)}static barcode(e){return new D(e)}static bind(e){return new B(e)}static bindItems(e){return new L(e)}static bookend(e){return new _(e)}static boolean(e){return new j(e)}static border(e){return new U(e)}static break(e){return new $(e)}static breakAfter(e){return new X(e)}static breakBefore(e){return new H(e)}static button(e){return new q(e)}static calculate(e){return new z(e)}static caption(e){return new G(e)}static certificate(e){return new W(e)}static certificates(e){return new V(e)}static checkButton(e){return new K(e)}static choiceList(e){return new Y(e)}static color(e){return new J(e)}static comb(e){return new Z(e)}static connect(e){return new Q(e)}static contentArea(e){return new ee(e)}static corner(e){return new te(e)}static date(e){return new re(e)}static dateTime(e){return new ne(e)}static dateTimeEdit(e){return new ae(e)}static decimal(e){return new ie(e)}static defaultUi(e){return new se(e)}static desc(e){return new oe(e)}static digestMethod(e){return new ce(e)}static digestMethods(e){return new le(e)}static draw(e){return new he(e)}static edge(e){return new ue(e)}static encoding(e){return new de(e)}static encodings(e){return new fe(e)}static encrypt(e){return new ge(e)}static encryptData(e){return new pe(e)}static encryption(e){return new me(e)}static encryptionMethod(e){return new be(e)}static encryptionMethods(e){return new ye(e)}static event(e){return new we(e)}static exData(e){return new ve(e)}static exObject(e){return new xe(e)}static exclGroup(e){return new Se(e)}static execute(e){return new Ae(e)}static extras(e){return new ke(e)}static field(e){return new Ce(e)}static fill(e){return new Oe(e)}static filter(e){return new Fe(e)}static float(e){return new Ie(e)}static font(e){return new Te(e)}static format(e){return new Me(e)}static handler(e){return new Ee(e)}static hyphenation(e){return new Pe(e)}static image(e){return new Re(e)}static imageEdit(e){return new Ne(e)}static integer(e){return new De(e)}static issuers(e){return new Be(e)}static items(e){return new Le(e)}static keep(e){return new _e(e)}static keyUsage(e){return new je(e)}static line(e){return new Ue(e)}static linear(e){return new $e(e)}static lockDocument(e){return new Xe(e)}static manifest(e){return new He(e)}static margin(e){return new qe(e)}static mdp(e){return new ze(e)}static medium(e){return new Ge(e)}static message(e){return new We(e)}static numericEdit(e){return new Ve(e)}static occur(e){return new Ke(e)}static oid(e){return new Ye(e)}static oids(e){return new Je(e)}static overflow(e){return new Ze(e)}static pageArea(e){return new Qe(e)}static pageSet(e){return new et(e)}static para(e){return new tt(e)}static passwordEdit(e){return new rt(e)}static pattern(e){return new nt(e)}static picture(e){return new at(e)}static proto(e){return new it(e)}static radial(e){return new st(e)}static reason(e){return new ot(e)}static reasons(e){return new ct(e)}static rectangle(e){return new lt(e)}static ref(e){return new ht(e)}static script(e){return new ut(e)}static setProperty(e){return new dt(e)}static signData(e){return new ft(e)}static signature(e){return new gt(e)}static signing(e){return new pt(e)}static solid(e){return new mt(e)}static speak(e){return new bt(e)}static stipple(e){return new yt(e)}static subform(e){return new wt(e)}static subformSet(e){return new vt(e)}static subjectDN(e){return new xt(e)}static subjectDNs(e){return new St(e)}static submit(e){return new At(e)}static template(e){return new kt(e)}static text(e){return new Ct(e)}static textEdit(e){return new Ot(e)}static time(e){return new Ft(e)}static timeStamp(e){return new It(e)}static toolTip(e){return new Tt(e)}static traversal(e){return new Mt(e)}static traverse(e){return new Et(e)}static ui(e){return new Pt(e)}static validate(e){return new Rt(e)}static value(e){return new Nt(e)}static variables(e){return new Dt(e)}}t.TemplateNamespace=Bt},(e,t,r)=>{var n=r(3),a=r(4),i=r(24),s=r(11),o=r(45).f,c=r(39),l=r(232),h=r(75),u=r(76),d=r(233),f=r(82),g=r(6),p=r(36),m="DOMException",b=i("Error"),y=i(m),w=function(){l(this,v);var e=arguments.length,t=u(e<1?void 0:arguments[0]),r=u(e<2?void 0:arguments[1],"Error"),n=new y(t,r),a=b(t);return a.name=m,o(n,"stack",s(1,f(a.stack,1))),h(n,this,w),n},v=w.prototype=y.prototype,x="stack"in b(m),S="stack"in new y(1,2),A=y&&g&&Object.getOwnPropertyDescriptor(a,m),k=!(!A||A.writable&&A.configurable),C=x&&!k&&!S;n({global:!0,constructor:!0,forced:p||C},{DOMException:C?w:y});var O=i(m),F=O.prototype;if(F.constructor!==O)for(var I in p||o(F,"constructor",s(1,O)),d)if(c(d,I)){var T=d[I],M=T.s;c(O,M)||o(O,M,s(6,T.c))}},(e,t,r)=>{var n=r(25),a=TypeError;e.exports=function(e,t){if(n(t,e))return e;throw a("Incorrect invocation")}},e=>{e.exports={IndexSizeError:{s:"INDEX_SIZE_ERR",c:1,m:1},DOMStringSizeError:{s:"DOMSTRING_SIZE_ERR",c:2,m:0},HierarchyRequestError:{s:"HIERARCHY_REQUEST_ERR",c:3,m:1},WrongDocumentError:{s:"WRONG_DOCUMENT_ERR",c:4,m:1},InvalidCharacterError:{s:"INVALID_CHARACTER_ERR",c:5,m:1},NoDataAllowedError:{s:"NO_DATA_ALLOWED_ERR",c:6,m:0},NoModificationAllowedError:{s:"NO_MODIFICATION_ALLOWED_ERR",c:7,m:1},NotFoundError:{s:"NOT_FOUND_ERR",c:8,m:1},NotSupportedError:{s:"NOT_SUPPORTED_ERR",c:9,m:1},InUseAttributeError:{s:"INUSE_ATTRIBUTE_ERR",c:10,m:1},InvalidStateError:{s:"INVALID_STATE_ERR",c:11,m:1},SyntaxError:{s:"SYNTAX_ERR",c:12,m:1},InvalidModificationError:{s:"INVALID_MODIFICATION_ERR",c:13,m:1},NamespaceError:{s:"NAMESPACE_ERR",c:14,m:1},InvalidAccessError:{s:"INVALID_ACCESS_ERR",c:15,m:1},ValidationError:{s:"VALIDATION_ERR",c:16,m:0},TypeMismatchError:{s:"TYPE_MISMATCH_ERR",c:17,m:1},SecurityError:{s:"SECURITY_ERR",c:18,m:1},NetworkError:{s:"NETWORK_ERR",c:19,m:1},AbortError:{s:"ABORT_ERR",c:20,m:1},URLMismatchError:{s:"URL_MISMATCH_ERR",c:21,m:1},QuotaExceededError:{s:"QUOTA_EXCEEDED_ERR",c:22,m:1},TimeoutError:{s:"TIMEOUT_ERR",c:23,m:1},InvalidNodeTypeError:{s:"INVALID_NODE_TYPE_ERR",c:24,m:1},DataCloneError:{s:"DATA_CLONE_ERR",c:25,m:1}}},(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.NamespaceIds=t.$buildXFAObject=void 0;const r=Symbol();t.$buildXFAObject=r,t.NamespaceIds={config:{id:0,check:e=>e.startsWith("http://www.xfa.org/schema/xci/")},connectionSet:{id:1,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-connection-set/")},datasets:{id:2,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-data/")},form:{id:3,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-form/")},localeSet:{id:4,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-locale-set/")},pdf:{id:5,check:e=>"http://ns.adobe.com/xdp/pdf/"===e},signature:{id:6,check:e=>"http://www.w3.org/2000/09/xmldsig#"===e},sourceSet:{id:7,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-source-set/")},stylesheet:{id:8,check:e=>"http://www.w3.org/1999/XSL/Transform"===e},template:{id:9,check:e=>e.startsWith("http://www.xfa.org/schema/xfa-template/")},xdc:{id:10,check:e=>e.startsWith("http://www.xfa.org/schema/xdc/")},xdp:{id:11,check:e=>"http://ns.adobe.com/xdp/"===e},xfdf:{id:12,check:e=>"http://ns.adobe.com/xfdf/"===e},xhtml:{id:13,check:e=>"http://www.w3.org/1999/xhtml"===e},xmpmeta:{id:14,check:e=>"http://ns.adobe.com/xmpmeta/"===e}}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.addHTML=function(e,t,r){const s=e[n.$extra],o=s.availableSpace,[c,l,h,u]=r;switch(e.layout){case"position":s.width=Math.max(s.width,c+h),s.height=Math.max(s.height,l+u),s.children.push(t);break;case"lr-tb":case"rl-tb":s.line&&1!==s.attempt||(s.line=i(e,[]),s.children.push(s.line),s.numberInLine=0),s.numberInLine+=1,s.line.children.push(t),0===s.attempt?(s.currentWidth+=h,s.height=Math.max(s.height,s.prevHeight+u)):(s.currentWidth=h,s.prevHeight=s.height,s.height+=u,s.attempt=0),s.width=Math.max(s.width,s.currentWidth);break;case"rl-row":case"row":{s.children.push(t),s.width+=h,s.height=Math.max(s.height,u);const e=(0,a.measureToString)(s.height);for(const t of s.children)t.attributes.style.height=e;break}case"table":case"tb":s.width=Math.min(o.width,Math.max(s.width,h)),s.height+=u,s.children.push(t)}},t.checkDimensions=function(e,t){var r;if(null===e[n.$getTemplateRoot]()[n.$extra].firstUnsplittable)return!0;if(0===e.w||0===e.h)return!0;const a=e[n.$getSubformParent](),i=(null===(r=a[n.$extra])||void 0===r?void 0:r.attempt)||0,[,s,o,c]=function(e){let t,r,n=""===e.w?NaN:e.w,a=""===e.h?NaN:e.h,[i,s]=[0,0];switch(e.anchorType||""){case"bottomCenter":[i,s]=[n/2,a];break;case"bottomLeft":[i,s]=[0,a];break;case"bottomRight":[i,s]=[n,a];break;case"middleCenter":[i,s]=[n/2,a/2];break;case"middleLeft":[i,s]=[0,a/2];break;case"middleRight":[i,s]=[n,a/2];break;case"topCenter":[i,s]=[n/2,0];break;case"topRight":[i,s]=[n,0]}switch(e.rotate||0){case 0:[t,r]=[-i,-s];break;case 90:[t,r]=[-s,i],[n,a]=[a,-n];break;case 180:[t,r]=[i,s],[n,a]=[-n,-a];break;case 270:[t,r]=[s,-i],[n,a]=[-a,n]}return[e.x+t+Math.min(0,n),e.y+r+Math.min(0,a),Math.abs(n),Math.abs(a)]}(e);switch(a.layout){case"lr-tb":case"rl-tb":return 0===i?e[n.$getTemplateRoot]()[n.$extra].noLayoutFailure?""!==e.w?Math.round(o-t.width)<=2:t.width>2:!(""!==e.h&&Math.round(c-t.height)>2)&&(""!==e.w?Math.round(o-t.width)<=2||0===a[n.$extra].numberInLine&&t.height>2:t.width>2):!!e[n.$getTemplateRoot]()[n.$extra].noLayoutFailure||!(""!==e.h&&Math.round(c-t.height)>2)&&(""===e.w||Math.round(o-t.width)<=2||!a[n.$isThereMoreWidth]())&&t.height>2;case"table":case"tb":return!!e[n.$getTemplateRoot]()[n.$extra].noLayoutFailure||(""===e.h||e[n.$isSplittable]()?(""===e.w||Math.round(o-t.width)<=2||!a[n.$isThereMoreWidth]())&&t.height>2:Math.round(c-t.height)<=2);case"position":return!!e[n.$getTemplateRoot]()[n.$extra].noLayoutFailure||""===e.h||Math.round(c+s-t.height)<=2||c+s>e[n.$getTemplateRoot]()[n.$extra].currentContentArea.h;case"rl-row":case"row":return!!e[n.$getTemplateRoot]()[n.$extra].noLayoutFailure||""===e.h||Math.round(c-t.height)<=2;default:return!0}},t.flushHTML=function(e){if(!e[n.$extra])return null;const t={name:"div",attributes:e[n.$extra].attributes,children:e[n.$extra].children};if(e[n.$extra].failingNode){const r=e[n.$extra].failingNode[n.$flushHTML]();r&&(e.layout.endsWith("-tb")?t.children.push(i(e,[r])):t.children.push(r))}return 0===t.children.length?null:t},t.getAvailableSpace=function(e){const t=e[n.$extra].availableSpace,r=e.margin?e.margin.topInset+e.margin.bottomInset:0,a=e.margin?e.margin.leftInset+e.margin.rightInset:0;switch(e.layout){case"lr-tb":case"rl-tb":return 0===e[n.$extra].attempt?{width:t.width-a-e[n.$extra].currentWidth,height:t.height-r-e[n.$extra].prevHeight}:{width:t.width-a,height:t.height-r-e[n.$extra].height};case"rl-row":case"row":return{width:e[n.$extra].columnWidths.slice(e[n.$extra].currentColumn).reduce(((e,t)=>e+t)),height:t.height-a};case"table":case"tb":return{width:t.width-a,height:t.height-r-e[n.$extra].height};default:return t}},r(139);var n=r(228),a=r(236);function i(e,t){return{name:"div",attributes:{class:["lr-tb"===e.layout?"xfaLr":"xfaRl"]},children:t}}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.computeBbox=function(e,t,r){let a;if(""!==e.w&&""!==e.h)a=[e.x,e.y,e.w,e.h];else{if(!r)return null;let i=e.w;if(""===i){if(0===e.maxW){const t=e[n.$getSubformParent]();i="position"===t.layout&&""!==t.w?0:e.minW}else i=Math.min(e.maxW,r.width);t.attributes.style.width=l(i)}let s=e.h;if(""===s){if(0===e.maxH){const t=e[n.$getSubformParent]();s="position"===t.layout&&""!==t.h?0:e.minH}else s=Math.min(e.maxH,r.height);t.attributes.style.height=l(s)}a=[e.x,e.y,i,s]}return a},t.createWrapper=function(e,t){const{attributes:r}=t,{style:a}=r,i={name:"div",attributes:{class:["xfaWrapper"],style:Object.create(null)},children:[]};if(r.class.push("xfaWrapped"),e.border){const{widths:r,insets:s}=e.border[n.$extra];let o,c,l=s[0],h=s[3];const u=s[0]+s[2],f=s[1]+s[3];switch(e.border.hand){case"even":l-=r[0]/2,h-=r[3]/2,o="calc(100% + ".concat((r[1]+r[3])/2-f,"px)"),c="calc(100% + ".concat((r[0]+r[2])/2-u,"px)");break;case"left":l-=r[0],h-=r[3],o="calc(100% + ".concat(r[1]+r[3]-f,"px)"),c="calc(100% + ".concat(r[0]+r[2]-u,"px)");break;case"right":o=f?"calc(100% - ".concat(f,"px)"):"100%",c=u?"calc(100% - ".concat(u,"px)"):"100%"}const g=["xfaBorder"];d(e.border)&&g.push("xfaPrintOnly");const p={name:"div",attributes:{class:g,style:{top:"".concat(l,"px"),left:"".concat(h,"px"),width:o,height:c}},children:[]};for(const e of["border","borderWidth","borderColor","borderRadius","borderStyle"])void 0!==a[e]&&(p.attributes.style[e]=a[e],delete a[e]);i.children.push(p,t)}else i.children.push(t);for(const e of["background","backgroundClip","top","left","width","height","minWidth","minHeight","maxWidth","maxHeight","transform","transformOrigin","visibility"])void 0!==a[e]&&(i.attributes.style[e]=a[e],delete a[e]);return i.attributes.style.position="absolute"===a.position?"absolute":"relative",delete a.position,a.alignSelf&&(i.attributes.style.alignSelf=a.alignSelf,delete a.alignSelf),i},t.fixDimensions=function(e){var t;const r=e[n.$getSubformParent]();if(null!==(t=r.layout)&&void 0!==t&&t.includes("row")){const t=r[n.$extra],a=e.colSpan;let i;i=-1===a?t.columnWidths.slice(t.currentColumn).reduce(((e,t)=>e+t),0):t.columnWidths.slice(t.currentColumn,t.currentColumn+a).reduce(((e,t)=>e+t),0),isNaN(i)||(e.w=i)}r.layout&&"position"!==r.layout&&(e.x=e.y=0),"table"===e.layout&&""===e.w&&Array.isArray(e.columnWidths)&&(e.w=e.columnWidths.reduce(((e,t)=>e+t),0))},t.fixTextIndent=function(e){const t=(0,i.getMeasurement)(e.textIndent,"0px");if(t>=0)return;const r="padding"+("left"==("right"===e.textAlign?"right":"left")?"Left":"Right"),n=(0,i.getMeasurement)(e[r],"0px");e[r]=n-t+"px"},t.fixURL=function(e){const t=(0,a.createValidAbsoluteUrl)(e,null,{addDefaultProtocol:!0,tryConvertEncoding:!0});return t?t.href:null},t.isPrintOnly=d,t.layoutClass=function(e){switch(e.layout){case"position":default:return"xfaPosition";case"lr-tb":return"xfaLrTb";case"rl-row":return"xfaRlRow";case"rl-tb":return"xfaRlTb";case"row":return"xfaRow";case"table":return"xfaTable";case"tb":return"xfaTb"}},t.layoutNode=function(e,t){let r=null,a=null,i=!1;if((!e.w||!e.h)&&e.value){let s=0,o=0;e.margin&&(s=e.margin.leftInset+e.margin.rightInset,o=e.margin.topInset+e.margin.bottomInset);let c=null,l=null;e.para&&(l=Object.create(null),c=""===e.para.lineHeight?null:e.para.lineHeight,l.top=""===e.para.spaceAbove?0:e.para.spaceAbove,l.bottom=""===e.para.spaceBelow?0:e.para.spaceBelow,l.left=""===e.para.marginLeft?0:e.para.marginLeft,l.right=""===e.para.marginRight?0:e.para.marginRight);let h=e.font;if(!h){const t=e[n.$getTemplateRoot]();let r=e[n.$getParent]();for(;r&&r!==t;){if(r.font){h=r.font;break}r=r[n.$getParent]()}}const d=(e.w||t.width)-s,f=e[n.$globalData].fontFinder;if(e.value.exData&&e.value.exData[n.$content]&&"text/html"===e.value.exData.contentType){const t=u(e.value.exData[n.$content],h,l,c,f,d);a=t.width,r=t.height,i=t.isBroken}else{const t=e.value[n.$text]();if(t){const e=u(t,h,l,c,f,d);a=e.width,r=e.height,i=e.isBroken}}null===a||e.w||(a+=s),null===r||e.h||(r+=o)}return{w:a,h:r,isBroken:i}},t.measureToString=l,t.setAccess=function(e,t){switch(e.access){case"nonInteractive":t.push("xfaNonInteractive");break;case"readOnly":t.push("xfaReadOnly");break;case"protected":t.push("xfaDisabled")}},t.setFontFamily=function(e,t,r,n){if(!r)return void delete n.fontFamily;const a=(0,i.stripQuotes)(e.typeface);n.fontFamily='"'.concat(a,'"');const o=r.find(a);if(o){const{fontFamily:r}=o.regular.cssFontInfo;r!==a&&(n.fontFamily='"'.concat(r,'"'));const i=f(t);if(i&&""!==i.lineHeight)return;if(n.lineHeight)return;const c=(0,s.selectFont)(e,o);c&&(n.lineHeight=Math.max(1.2,c.lineHeight))}},t.setMinMaxDimensions=function(e,t){"position"===e[n.$getSubformParent]().layout&&(e.minW>0&&(t.minWidth=l(e.minW)),e.maxW>0&&(t.maxWidth=l(e.maxW)),e.minH>0&&(t.minHeight=l(e.minH)),e.maxH>0&&(t.maxHeight=l(e.maxH)))},t.setPara=function(e,t,r){var a;if(null!==(a=r.attributes.class)&&void 0!==a&&a.includes("xfaRich")){t&&(""===e.h&&(t.height="auto"),""===e.w&&(t.width="auto"));const a=f(e);if(a){const e=r.attributes.style;switch(e.display="flex",e.flexDirection="column",a.vAlign){case"top":e.justifyContent="start";break;case"bottom":e.justifyContent="end";break;case"middle":e.justifyContent="center"}const t=a[n.$toStyle]();for(const[r,n]of Object.entries(t))r in e||(e[r]=n)}}},t.toStyle=function(e){const t=Object.create(null);for(var r=arguments.length,i=new Array(r>1?r-1:0),s=1;se+t),0),t.currentColumn=0):(s=t.columnWidths.slice(t.currentColumn,t.currentColumn+r).reduce(((e,t)=>e+t),0),t.currentColumn=(t.currentColumn+e.colSpan)%t.columnWidths.length),isNaN(s)||(i=e.w=s)}t.width=""!==i?l(i):"auto",t.height=""!==s?l(s):"auto"},position(e,t){const r=e[n.$getSubformParent]();null!=r&&r.layout&&"position"!==r.layout||(t.position="absolute",t.left=l(e.x),t.top=l(e.y))},rotate(e,t){e.rotate&&("transform"in t||(t.transform=""),t.transform+="rotate(-".concat(e.rotate,"deg)"),t.transformOrigin="top left")},presence(e,t){switch(e.presence){case"invisible":t.visibility="hidden";break;case"hidden":case"inactive":t.display="none"}},hAlign(e,t){if("para"===e[n.$nodeName])switch(e.hAlign){case"justifyAll":t.textAlign="justify-all";break;case"radix":t.textAlign="left";break;default:t.textAlign=e.hAlign}else switch(e.hAlign){case"left":t.alignSelf="start";break;case"center":t.alignSelf="center";break;case"right":t.alignSelf="end"}},margin(e,t){e.margin&&(t.margin=e.margin[n.$toStyle]().margin)}};function u(e,t,r,a,i,s){const c=new o.TextMeasure(t,r,a,i);return"string"==typeof e?c.addString(e):e[n.$pushGlyphs](c),c.compute(s)}function d(e){return e.relevant.length>0&&!e.relevant[0].excluded&&"print"===e.relevant[0].viewname}function f(e){const t=e[n.$getTemplateRoot]()[n.$extra].paraStack;return t.length?t.at(-1):null}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.HTMLResult=void 0,t.getBBox=function(e){const t=-1;if(!e)return{x:t,y:t,width:t,height:t};const r=e.trim().split(/\\s*,\\s*/).map((e=>o(e,"-1")));if(r.length<4||r[2]<0||r[3]<0)return{x:t,y:t,width:t,height:t};const[n,a,i,s]=r;return{x:n,y:a,width:i,height:s}},t.getColor=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[0,0,0],[r,n,a]=t;if(!e)return{r,g:n,b:a};const i=e.trim().split(/\\s*,\\s*/).map((e=>Math.min(Math.max(0,parseInt(e.trim(),10)),255))).map((e=>isNaN(e)?0:e));return i.length<3||([r,n,a]=i),{r,g:n,b:a}},t.getFloat=function(e){let{data:t,defaultValue:r,validate:n}=e;if(!t)return r;t=t.trim();const a=parseFloat(t);return!isNaN(a)&&n(a)?a:r},t.getInteger=function(e){let{data:t,defaultValue:r,validate:n}=e;if(!t)return r;t=t.trim();const a=parseInt(t,10);return!isNaN(a)&&n(a)?a:r},t.getKeyword=s,t.getMeasurement=o,t.getRatio=function(e){if(!e)return{num:1,den:1};const t=e.trim().split(/\\s*:\\s*/).map((e=>parseFloat(e))).filter((e=>!isNaN(e)));if(1===t.length&&t.push(1),0===t.length)return{num:1,den:1};const[r,n]=t;return{num:r,den:n}},t.getRelevant=function(e){return e?e.trim().split(/\\s+/).map((e=>({excluded:"-"===e[0],viewname:e.substring(1)}))):[]},t.getStringOption=function(e,t){return s({data:e,defaultValue:t[0],validate:e=>t.includes(e)})},t.stripQuotes=function(e){return e.startsWith("'")||e.startsWith('"')?e.slice(1,-1):e},r(139);var n=r(144);const a={pt:e=>e,cm:e=>e/2.54*72,mm:e=>e/25.4*72,in:e=>72*e,px:e=>e},i=/([+-]?\\d+\\.?\\d*)(.*)/;function s(e){let{data:t,defaultValue:r,validate:n}=e;return t?(t=t.trim(),n(t)?t:r):r}function o(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"0";if(t||(t="0"),!e)return o(t);const r=e.trim().match(i);if(!r)return o(t);const[,n,s]=r,c=parseFloat(n);if(isNaN(c))return o(t);if(0===c)return 0;const l=a[s];return l?l(c):c}class c{static get FAILURE(){return(0,n.shadow)(this,"FAILURE",new c(!1,null,null,null))}static get EMPTY(){return(0,n.shadow)(this,"EMPTY",new c(!0,null,null,null))}constructor(e,t,r,n){this.success=e,this.html=t,this.bbox=r,this.breakNode=n}isBreak(){return!!this.breakNode}static breakNode(e){return new c(!1,null,null,e)}static success(e){return new c(!0,e,arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,null)}}t.HTMLResult=c},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.FontFinder=void 0,t.getMetrics=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=null;if(e){const t=(0,a.stripQuotes)(e.typeface),i=e[n.$globalData].fontFinder.find(t);r=s(e,i)}if(!r)return{lineHeight:12,lineGap:2,lineNoGap:10};const i=e.size||10,o=r.lineHeight?Math.max(t?0:1.2,r.lineHeight):1.2,c=void 0===r.lineGap?.2:r.lineGap;return{lineHeight:o*i,lineGap:c*i,lineNoGap:Math.max(1,o-c)*i}},t.selectFont=s,r(116),r(126),r(128),r(131),r(133),r(135),r(137),r(139);var n=r(228),a=r(237),i=r(144);function s(e,t){return"italic"===e.posture?"bold"===e.weight?t.bolditalic:t.italic:"bold"===e.weight?t.bold:t.regular}t.FontFinder=class{constructor(e){this.fonts=new Map,this.cache=new Map,this.warned=new Set,this.defaultFont=null,this.add(e)}add(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;for(const t of e)this.addPdfFont(t);for(const e of this.fonts.values())e.regular||(e.regular=e.italic||e.bold||e.bolditalic);if(!t||0===t.size)return;const r=this.fonts.get("PdfJS-Fallback-PdfJS-XFA");for(const e of t)this.fonts.set(e,r)}addPdfFont(e){const t=e.cssFontInfo,r=t.fontFamily;let n=this.fonts.get(r);n||(n=Object.create(null),this.fonts.set(r,n),this.defaultFont||(this.defaultFont=n));let a="";const i=parseFloat(t.fontWeight);var s,o,c;0!==parseFloat(t.italicAngle)?a=i>=700?"bolditalic":"italic":i>=700&&(a="bold"),a||((e.name.includes("Bold")||(null===(s=e.psName)||void 0===s?void 0:s.includes("Bold")))&&(a="bold"),(e.name.includes("Italic")||e.name.endsWith("It")||(null===(o=e.psName)||void 0===o?void 0:o.includes("Italic"))||(null===(c=e.psName)||void 0===c?void 0:c.endsWith("It")))&&(a+="italic")),a||(a="regular"),n[a]=e}getDefault(){return this.defaultFont}find(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],r=this.fonts.get(e)||this.cache.get(e);if(r)return r;const n=/,|-|_| |bolditalic|bold|italic|regular|it/gi;let a=e.replaceAll(n,"");if(r=this.fonts.get(a),r)return this.cache.set(e,r),r;a=a.toLowerCase();const s=[];for(const[e,t]of this.fonts.entries())e.replaceAll(n,"").toLowerCase().startsWith(a)&&s.push(t);if(0===s.length)for(const[,e]of this.fonts.entries()){var o;(null===(o=e.regular.name)||void 0===o?void 0:o.replaceAll(n,"").toLowerCase().startsWith(a))&&s.push(e)}if(0===s.length){a=a.replaceAll(/psmt|mt/gi,"");for(const[e,t]of this.fonts.entries())e.replaceAll(n,"").toLowerCase().startsWith(a)&&s.push(t)}if(0===s.length)for(const e of this.fonts.values()){var c;(null===(c=e.regular.name)||void 0===c?void 0:c.replaceAll(n,"").toLowerCase().startsWith(a))&&s.push(e)}return s.length>=1?(1!==s.length&&t&&(0,i.warn)("XFA - Too many choices to guess the correct font: ".concat(e)),this.cache.set(e,s[0]),s[0]):(t&&!this.warned.has(e)&&(this.warned.add(e),(0,i.warn)("XFA - Cannot find the font: ".concat(e))),null)}}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.TextMeasure=void 0,r(139);var n=r(238);class a{constructor(e,t,r,a){if(this.lineHeight=r,this.paraMargin=t||{top:0,bottom:0,left:0,right:0},!e)return void([this.pdfFont,this.xfaFont]=this.defaultFont(a));this.xfaFont={typeface:e.typeface,posture:e.posture,weight:e.weight,size:e.size,letterSpacing:e.letterSpacing};const i=a.find(e.typeface);i?(this.pdfFont=(0,n.selectFont)(e,i),this.pdfFont||([this.pdfFont,this.xfaFont]=this.defaultFont(a))):[this.pdfFont,this.xfaFont]=this.defaultFont(a)}defaultFont(e){const t=e.find("Helvetica",!1)||e.find("Myriad Pro",!1)||e.find("Arial",!1)||e.getDefault();if(null!=t&&t.regular){const e=t.regular;return[e,{typeface:e.cssFontInfo.fontFamily,posture:"normal",weight:"normal",size:10,letterSpacing:0}]}return[null,{typeface:"Courier",posture:"normal",weight:"normal",size:10,letterSpacing:0}]}}class i{constructor(e,t,r,n){this.fontFinder=n,this.stack=[new a(e,t,r,n)]}pushData(e,t,r){const n=this.stack.at(-1);for(const t of["typeface","posture","weight","size","letterSpacing"])e[t]||(e[t]=n.xfaFont[t]);for(const e of["top","bottom","left","right"])isNaN(t[e])&&(t[e]=n.paraMargin[e]);const i=new a(e,t,r||n.lineHeight,this.fontFinder);i.pdfFont||(i.pdfFont=n.pdfFont),this.stack.push(i)}popFont(){this.stack.pop()}topFont(){return this.stack.at(-1)}}t.TextMeasure=class{constructor(e,t,r,n){this.glyphs=[],this.fontSelector=new i(e,t,r,n),this.extraHeight=0}pushData(e,t,r){this.fontSelector.pushData(e,t,r)}popFont(e){return this.fontSelector.popFont()}addPara(){const e=this.fontSelector.topFont();this.extraHeight+=e.paraMargin.top+e.paraMargin.bottom}addString(e){if(!e)return;const t=this.fontSelector.topFont(),r=t.xfaFont.size;if(t.pdfFont){const n=t.xfaFont.letterSpacing,a=t.pdfFont,i=a.lineHeight||1.2,s=t.lineHeight||Math.max(1.2,i)*r,o=i-(void 0===a.lineGap?.2:a.lineGap),c=Math.max(1,o)*r,l=r/1e3,h=a.defaultWidth||a.charsToGlyphs(" ")[0].width;for(const t of e.split(/[\\u2029\\n]/)){const e=a.encodeString(t).join(""),r=a.charsToGlyphs(e);for(const e of r){const t=e.width||h;this.glyphs.push([t*l+n,s,c,e.unicode,!1])}this.glyphs.push([0,0,0,"\\n",!0])}this.glyphs.pop()}else{for(const t of e.split(/[\\u2029\\n]/)){for(const e of t.split(""))this.glyphs.push([r,1.2*r,r,e,!1]);this.glyphs.push([0,0,0,"\\n",!0])}this.glyphs.pop()}}compute(e){let t=-1,r=0,n=0,a=0,i=0,s=0,o=!1,c=!0;for(let l=0,h=this.glyphs.length;le?(n=Math.max(n,i),i=0,a+=s,s=m,t=-1,r=0,o=!0,c=!1):(s=Math.max(m,s),r=i,i+=h,t=l):i+h>e?(a+=s,s=m,-1!==t?(l=t,n=Math.max(n,r),i=0,t=-1,r=0):(n=Math.max(n,i),i=h),o=!0,c=!1):(i+=h,s=Math.max(m,s))}return n=Math.max(n,i),a+=s+this.extraHeight,{width:1.02*n,height:a,isBroken:o}}}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.XmlObject=t.XFAObjectArray=t.XFAObject=t.XFAAttribute=t.StringObject=t.OptionObject=t.Option10=t.Option01=t.IntegerObject=t.ContentObject=void 0,r(139),r(116),r(126),r(128),r(131),r(133),r(135),r(137);var n=r(228),a=r(237),i=r(144),s=r(149),o=r(234),c=r(241);const l=Symbol(),h=Symbol(),u=Symbol(),d=Symbol("_children"),f=Symbol(),g=Symbol(),p=Symbol(),m=Symbol(),b=Symbol(),y=Symbol(),w=Symbol(),v=Symbol(),x=Symbol(),S=Symbol("parent"),A=Symbol(),k=Symbol(),C=Symbol();let O=0;const F=o.NamespaceIds.datasets.id;class I{constructor(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];this[n.$namespaceId]=e,this[n.$nodeName]=t,this[w]=r,this[S]=null,this[d]=[],this[n.$uid]="".concat(t).concat(O++),this[n.$globalData]=null}get isXFAObject(){return!0}get isXFAObjectArray(){return!1}createNodes(e){let t=this,r=null;for(const{name:a,index:i}of e){for(let e=0,s=isFinite(i)?i:0;e<=s;e++){const e=t[n.$namespaceId]===F?-1:t[n.$namespaceId];r=new E(e,a),t[n.$appendChild](r)}t=r}return r}[n.$onChild](e){if(!this[w]||!this[n.$onChildCheck](e))return!1;const t=e[n.$nodeName],r=this[t];if(!(r instanceof T))return null!==r&&this[n.$removeChild](r),this[t]=e,this[n.$appendChild](e),!0;if(r.push(e))return this[n.$appendChild](e),!0;let a="";return this.id?a=" (id: ".concat(this.id,")"):this.name&&(a=" (name: ".concat(this.name," ").concat(this.h.value,")")),(0,i.warn)('XFA - node "'.concat(this[n.$nodeName],'"').concat(a,' has already enough "').concat(t,'"!')),!1}[n.$onChildCheck](e){return this.hasOwnProperty(e[n.$nodeName])&&e[n.$namespaceId]===this[n.$namespaceId]}[n.$isNsAgnostic](){return!1}[n.$acceptWhitespace](){return!1}[n.$isCDATAXml](){return!1}[n.$isBindable](){return!1}[n.$popPara](){this.para&&this[n.$getTemplateRoot]()[n.$extra].paraStack.pop()}[n.$pushPara](){this[n.$getTemplateRoot]()[n.$extra].paraStack.push(this.para)}[n.$setId](e){this.id&&this[n.$namespaceId]===o.NamespaceIds.template.id&&e.set(this.id,this)}[n.$getTemplateRoot](){return this[n.$globalData].template}[n.$isSplittable](){return!1}[n.$isThereMoreWidth](){return!1}[n.$appendChild](e){e[S]=this,this[d].push(e),!e[n.$globalData]&&this[n.$globalData]&&(e[n.$globalData]=this[n.$globalData])}[n.$removeChild](e){const t=this[d].indexOf(e);this[d].splice(t,1)}[n.$hasSettableValue](){return this.hasOwnProperty("value")}[n.$setValue](e){}[n.$onText](e){}[n.$finalize](){}[n.$clean](e){delete this[w],this[n.$cleanup]&&(e.clean(this[n.$cleanup]),delete this[n.$cleanup])}[n.$indexOf](e){return this[d].indexOf(e)}[n.$insertAt](e,t){t[S]=this,this[d].splice(e,0,t),!t[n.$globalData]&&this[n.$globalData]&&(t[n.$globalData]=this[n.$globalData])}[n.$isTransparent](){return!this.name}[n.$lastAttribute](){return""}[n.$text](){return 0===this[d].length?this[n.$content]:this[d].map((e=>e[n.$text]())).join("")}get[u](){const e=Object.getPrototypeOf(this);if(!e._attributes){const t=e._attributes=new Set;for(const e of Object.getOwnPropertyNames(this)){if(null===this[e]||this[e]instanceof I||this[e]instanceof T)break;t.add(e)}}return(0,i.shadow)(this,u,e._attributes)}[n.$isDescendent](e){let t=this;for(;t;){if(t===e)return!0;t=t[n.$getParent]()}return!1}[n.$getParent](){return this[S]}[n.$getSubformParent](){return this[n.$getParent]()}[n.$getChildren](){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return e?this[e]:this[d]}[n.$dump](){const e=Object.create(null);this[n.$content]&&(e.$content=this[n.$content]);for(const t of Object.getOwnPropertyNames(this)){const r=this[t];null!==r&&(r instanceof I?e[t]=r[n.$dump]():r instanceof T?r.isEmpty()||(e[t]=r.dump()):e[t]=r)}return e}[n.$toStyle](){return null}[n.$toHTML](){return a.HTMLResult.EMPTY}*[n.$getContainedChildren](){for(const e of this[n.$getChildren]())yield e}*[m](e,t){for(const r of this[n.$getContainedChildren]())if(!e||t===e.has(r[n.$nodeName])){const e=this[n.$getAvailableSpace](),t=r[n.$toHTML](e);t.success||(this[n.$extra].failingNode=r),yield t}}[n.$flushHTML](){return null}[n.$addHTML](e,t){this[n.$extra].children.push(e)}[n.$getAvailableSpace](){}[n.$childrenToHTML](e){let{filter:t=null,include:r=!0}=e;if(this[n.$extra].generator){const e=this[n.$getAvailableSpace](),t=this[n.$extra].failingNode[n.$toHTML](e);if(!t.success)return t;t.html&&this[n.$addHTML](t.html,t.bbox),delete this[n.$extra].failingNode}else this[n.$extra].generator=this[m](t,r);for(;;){const e=this[n.$extra].generator.next();if(e.done)break;const t=e.value;if(!t.success)return t;t.html&&this[n.$addHTML](t.html,t.bbox)}return this[n.$extra].generator=null,a.HTMLResult.EMPTY}[n.$setSetAttributes](e){this[k]=new Set(Object.keys(e))}[y](e){const t=this[u],r=this[k];return[...e].filter((e=>t.has(e)&&!r.has(e)))}[n.$resolvePrototypes](e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new Set;for(const r of this[d])r[A](e,t)}[A](e,t){const r=this[b](e,t);r?this[l](r,e,t):this[n.$resolvePrototypes](e,t)}[b](e,t){const{use:r,usehref:a}=this;if(!r&&!a)return null;let s=null,o=null,h=null,u=r;if(a?(u=a,a.startsWith("#som(")&&a.endsWith(")")?o=a.slice(5,-1):a.startsWith(".#som(")&&a.endsWith(")")?o=a.slice(6,-1):a.startsWith("#")?h=a.slice(1):a.startsWith(".#")&&(h=a.slice(2))):r.startsWith("#")?h=r.slice(1):o=r,this.use=this.usehref="",h?s=e.get(h):(s=(0,c.searchNode)(e.get(n.$root),this,o,!0,!1),s&&(s=s[0])),!s)return(0,i.warn)("XFA - Invalid prototype reference: ".concat(u,".")),null;if(s[n.$nodeName]!==this[n.$nodeName])return(0,i.warn)("XFA - Incompatible prototype: ".concat(s[n.$nodeName]," !== ").concat(this[n.$nodeName],".")),null;if(t.has(s))return(0,i.warn)("XFA - Cycle detected in prototypes use."),null;t.add(s);const d=s[b](e,t);return d&&s[l](d,e,t),s[n.$resolvePrototypes](e,t),t.delete(s),s}[l](e,t,r){if(r.has(e))(0,i.warn)("XFA - Cycle detected in prototypes use.");else{!this[n.$content]&&e[n.$content]&&(this[n.$content]=e[n.$content]),new Set(r).add(e);for(const t of this[y](e[k]))this[t]=e[t],this[k]&&this[k].add(t);for(const a of Object.getOwnPropertyNames(this)){if(this[u].has(a))continue;const i=this[a],s=e[a];if(i instanceof T){for(const e of i[d])e[A](t,r);for(let a=i[d].length,o=s[d].length;aI[f](e))):"object"==typeof e&&null!==e?Object.assign({},e):e}[n.$clone](){const e=Object.create(Object.getPrototypeOf(this));for(const t of Object.getOwnPropertySymbols(this))try{e[t]=this[t]}catch(r){(0,i.shadow)(e,t,this[t])}e[n.$uid]="".concat(e[n.$nodeName]).concat(O++),e[d]=[];for(const t of Object.getOwnPropertyNames(this)){if(this[u].has(t)){e[t]=I[f](this[t]);continue}const r=this[t];e[t]=r instanceof T?new T(r[v]):null}for(const t of this[d]){const r=t[n.$nodeName],a=t[n.$clone]();e[d].push(a),a[S]=e,null===e[r]?e[r]=a:e[r][d].push(a)}return e}[n.$getChildren](){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return e?this[d].filter((t=>t[n.$nodeName]===e)):this[d]}[n.$getChildrenByClass](e){return this[e]}[n.$getChildrenByName](e,t){let r=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return Array.from(this[n.$getChildrenByNameIt](e,t,r))}[n.$getChildrenByNameIt](e,t){var r=this;let a=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return function*(){if("parent"!==e){for(const a of r[d])a[n.$nodeName]===e&&(yield a),a.name===e&&(yield a),(t||a[n.$isTransparent]())&&(yield*a[n.$getChildrenByNameIt](e,t,!1));a&&r[u].has(e)&&(yield new M(r,e,r[e]))}else yield r[S]}()}}t.XFAObject=I;class T{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1/0;this[v]=e,this[d]=[]}get isXFAObject(){return!1}get isXFAObjectArray(){return!0}push(e){return this[d].length<=this[v]?(this[d].push(e),!0):((0,i.warn)('XFA - node "'.concat(e[n.$nodeName],'" accepts no more than ').concat(this[v]," children")),!1)}isEmpty(){return 0===this[d].length}dump(){return 1===this[d].length?this[d][0][n.$dump]():this[d].map((e=>e[n.$dump]()))}[n.$clone](){const e=new T(this[v]);return e[d]=this[d].map((e=>e[n.$clone]())),e}get children(){return this[d]}clear(){this[d].length=0}}t.XFAObjectArray=T;class M{constructor(e,t,r){this[S]=e,this[n.$nodeName]=t,this[n.$content]=r,this[n.$consumed]=!1,this[n.$uid]="attribute"+O++}[n.$getParent](){return this[S]}[n.$isDataValue](){return!0}[n.$getDataValue](){return this[n.$content].trim()}[n.$setValue](e){e=e.value||"",this[n.$content]=e.toString()}[n.$text](){return this[n.$content]}[n.$isDescendent](e){return this[S]===e||this[S][n.$isDescendent](e)}}t.XFAAttribute=M;class E extends I{constructor(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(super(e,t),this[n.$content]="",this[g]=null,"#text"!==t){const e=new Map;this[h]=e;for(const[t,n]of Object.entries(r))e.set(t,new M(this,t,n));if(r.hasOwnProperty(n.$nsAttributes)){const e=r[n.$nsAttributes].xfa.dataNode;void 0!==e&&("dataGroup"===e?this[g]=!1:"dataValue"===e&&(this[g]=!0))}}this[n.$consumed]=!1}[n.$toString](e){const t=this[n.$nodeName];if("#text"===t)return void e.push((0,s.encodeToXmlString)(this[n.$content]));const r=(0,i.utf8StringToString)(t),a=this[n.$namespaceId]===F?"xfa:":"";e.push("<".concat(a).concat(r));for(const[t,r]of this[h].entries()){const a=(0,i.utf8StringToString)(t);e.push(" ".concat(a,'="').concat((0,s.encodeToXmlString)(r[n.$content]),'"'))}if(null!==this[g]&&(this[g]?e.push(' xfa:dataNode="dataValue"'):e.push(' xfa:dataNode="dataGroup"')),this[n.$content]||0!==this[d].length){if(e.push(">"),this[n.$content])"string"==typeof this[n.$content]?e.push((0,s.encodeToXmlString)(this[n.$content])):this[n.$content][n.$toString](e);else for(const t of this[d])t[n.$toString](e);e.push(""))}else e.push("/>")}[n.$onChild](e){if(this[n.$content]){const e=new E(this[n.$namespaceId],"#text");this[n.$appendChild](e),e[n.$content]=this[n.$content],this[n.$content]=""}return this[n.$appendChild](e),!0}[n.$onText](e){this[n.$content]+=e}[n.$finalize](){if(this[n.$content]&&this[d].length>0){const e=new E(this[n.$namespaceId],"#text");this[n.$appendChild](e),e[n.$content]=this[n.$content],delete this[n.$content]}}[n.$toHTML](){return"#text"===this[n.$nodeName]?a.HTMLResult.success({name:"#text",value:this[n.$content]}):a.HTMLResult.EMPTY}[n.$getChildren](){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return e?this[d].filter((t=>t[n.$nodeName]===e)):this[d]}[n.$getAttributes](){return this[h]}[n.$getChildrenByClass](e){const t=this[h].get(e);return void 0!==t?t:this[n.$getChildren](e)}*[n.$getChildrenByNameIt](e,t){const r=this[h].get(e);r&&(yield r);for(const r of this[d])r[n.$nodeName]===e&&(yield r),t&&(yield*r[n.$getChildrenByNameIt](e,t))}*[n.$getAttributeIt](e,t){const r=this[h].get(e);!r||t&&r[n.$consumed]||(yield r);for(const r of this[d])yield*r[n.$getAttributeIt](e,t)}*[n.$getRealChildrenByNameIt](e,t,r){for(const a of this[d])a[n.$nodeName]!==e||r&&a[n.$consumed]||(yield a),t&&(yield*a[n.$getRealChildrenByNameIt](e,t,r))}[n.$isDataValue](){return null===this[g]?0===this[d].length||this[d][0][n.$namespaceId]===o.NamespaceIds.xhtml.id:this[g]}[n.$getDataValue](){return null===this[g]?0===this[d].length?this[n.$content].trim():this[d][0][n.$namespaceId]===o.NamespaceIds.xhtml.id?this[d][0][n.$text]().trim():null:this[n.$content].trim()}[n.$setValue](e){e=e.value||"",this[n.$content]=e.toString()}[n.$dump](){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];const t=Object.create(null);e&&(t.$ns=this[n.$namespaceId]),this[n.$content]&&(t.$content=this[n.$content]),t.$name=this[n.$nodeName],t.children=[];for(const r of this[d])t.children.push(r[n.$dump](e));t.attributes=Object.create(null);for(const[e,r]of this[h])t.attributes[e]=r[n.$content];return t}}t.XmlObject=E;class P extends I{constructor(e,t){super(e,t),this[n.$content]=""}[n.$onText](e){this[n.$content]+=e}[n.$finalize](){}}t.ContentObject=P;class R extends P{constructor(e,t,r){super(e,t),this[x]=r}[n.$finalize](){this[n.$content]=(0,a.getKeyword)({data:this[n.$content],defaultValue:this[x][0],validate:e=>this[x].includes(e)})}[n.$clean](e){super[n.$clean](e),delete this[x]}}t.OptionObject=R;class N extends P{[n.$finalize](){this[n.$content]=this[n.$content].trim()}}t.StringObject=N;class D extends P{constructor(e,t,r,n){super(e,t),this[p]=r,this[C]=n}[n.$finalize](){this[n.$content]=(0,a.getInteger)({data:this[n.$content],defaultValue:this[p],validate:this[C]})}[n.$clean](e){super[n.$clean](e),delete this[p],delete this[C]}}t.IntegerObject=D,t.Option01=class extends D{constructor(e,t){super(e,t,0,(e=>1===e))}},t.Option10=class extends D{constructor(e,t){super(e,t,1,(e=>0===e))}}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.createDataNode=function(e,t,r){const i=h(r);if(!i)return null;if(i.some((e=>e.operator===o.dotDot)))return null;const s=c.get(i[0].name);let l=0;s?(e=s(e,t),l=1):e=t||e;for(let t=i.length;l4&&void 0!==arguments[4])||arguments[4];const i=h(r,!(arguments.length>3&&void 0!==arguments[3])||arguments[3]);if(!i)return null;const s=c.get(i[0].name);let u,d=0;s?(u=!0,e=[s(e,t)],d=1):(u=null===t,e=[t||e]);for(let r=i.length;d0&&f.push(e)}if(0!==f.length||u||0!==d)e=isFinite(h)?f.filter((e=>he[h])):f.flat();else{const r=t[n.$getParent]();if(!(t=r))return null;d=-1,e=[t]}}return 0===e.length?null:e},r(139);var n=r(228),a=r(144);const i=/^[^.[]+/,s=/^[^\\]]+/,o={dot:0,dotDot:1,dotHash:2,dotBracket:3,dotParen:4},c=new Map([["$data",(e,t)=>e.datasets?e.datasets.data:e],["$record",(e,t)=>(e.datasets?e.datasets.data:e)[n.$getChildren]()[0]],["$template",(e,t)=>e.template],["$connectionSet",(e,t)=>e.connectionSet],["$form",(e,t)=>e.form],["$layout",(e,t)=>e.layout],["$host",(e,t)=>e.host],["$dataWindow",(e,t)=>e.dataWindow],["$event",(e,t)=>e.event],["!",(e,t)=>e.datasets],["$xfa",(e,t)=>e],["xfa",(e,t)=>e],["$",(e,t)=>t]]),l=new WeakMap;function h(e,t){let r=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],n=e.match(i);if(!n)return null;let[c]=n;const l=[{name:c,cacheName:"."+c,index:0,js:null,formCalc:null,operator:o.dot}];let h=c.length;for(;h{Object.defineProperty(t,"__esModule",{value:!0}),t.DataHandler=void 0,r(139);var n=r(228);t.DataHandler=class{constructor(e,t){this.data=t,this.dataset=e.datasets||null}serialize(e){const t=[[-1,this.data[n.$getChildren]()]];for(;t.length>0;){const r=t.at(-1),[a,i]=r;if(a+1===i.length){t.pop();continue}const s=i[++r[0]],o=e.get(s[n.$uid]);if(o)s[n.$setValue](o);else{const t=s[n.$getAttributes]();for(const r of t.values()){const t=e.get(r[n.$uid]);if(t){r[n.$setValue](t);break}}}const c=s[n.$getChildren]();c.length>0&&t.push([-1,c])}const r=[''];if(this.dataset)for(const e of this.dataset[n.$getChildren]())"data"!==e[n.$nodeName]&&e[n.$toString](r);return this.data[n.$toString](r),r.push(""),r.join("")}}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.XFAParser=void 0,r(116),r(126),r(128),r(131),r(133),r(135),r(137),r(139);var n=r(228),a=r(217),i=r(244),s=r(144);class o extends a.XMLParserBase{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];super(),this._builder=new i.Builder(e),this._stack=[],this._globalData={usedTypefaces:new Set},this._ids=new Map,this._current=this._builder.buildRoot(this._ids),this._errorCode=a.XMLParserErrorCode.NoError,this._whiteRegex=/^\\s+$/,this._nbsps=/\\xa0+/g,this._richText=t}parse(e){if(this.parseXml(e),this._errorCode===a.XMLParserErrorCode.NoError)return this._current[n.$finalize](),this._current.element}onText(e){e=e.replace(this._nbsps,(e=>e.slice(1)+" ")),this._richText||this._current[n.$acceptWhitespace]()?this._current[n.$onText](e,this._richText):this._whiteRegex.test(e)||this._current[n.$onText](e.trim())}onCdata(e){this._current[n.$onText](e)}_mkAttributes(e,t){let r=null,a=null;const i=Object.create({});for(const{name:c,value:l}of e)if("xmlns"===c)r?(0,s.warn)("XFA - multiple namespace definition in <".concat(t,">")):r=l;else if(c.startsWith("xmlns:")){const e=c.substring(6);a||(a=[]),a.push({prefix:e,value:l})}else{const e=c.indexOf(":");if(-1===e)i[c]=l;else{var o;let t=i[n.$nsAttributes];t||(t=i[n.$nsAttributes]=Object.create(null));const[r,a]=[c.slice(0,e),c.slice(e+1)];((o=t)[r]||(o[r]=Object.create(null)))[a]=l}}return[r,a,i]}_getNameAndPrefix(e,t){const r=e.indexOf(":");return-1===r?[e,null]:[e.substring(r+1),t?"":e.substring(0,r)]}onBeginElement(e,t,r){const[a,i,s]=this._mkAttributes(t,e),[o,c]=this._getNameAndPrefix(e,this._builder.isNsAgnostic()),l=this._builder.build({nsPrefix:c,name:o,attributes:s,namespace:a,prefixes:i});l[n.$globalData]=this._globalData,r?(l[n.$finalize](),this._current[n.$onChild](l)&&l[n.$setId](this._ids),l[n.$clean](this._builder)):(this._stack.push(this._current),this._current=l)}onEndElement(e){const t=this._current;if(t[n.$isCDATAXml]()&&"string"==typeof t[n.$content]){const e=new o;e._globalData=this._globalData;const r=e.parse(t[n.$content]);t[n.$content]=null,t[n.$onChild](r)}t[n.$finalize](),this._current=this._stack.pop(),this._current[n.$onChild](t)&&t[n.$setId](this._ids),t[n.$clean](this._builder)}onError(e){this._errorCode=e}}t.XFAParser=o},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Builder=void 0,r(139);var n=r(234),a=r(228),i=r(245),s=r(230),o=r(254),c=r(144),l=r(240);class h extends l.XFAObject{constructor(e){super(-1,"root",Object.create(null)),this.element=null,this[a.$ids]=e}[a.$onChild](e){return this.element=e,!0}[a.$finalize](){super[a.$finalize](),this.element.template instanceof s.Template&&(this[a.$ids].set(a.$root,this.element),this.element.template[a.$resolvePrototypes](this[a.$ids]),this.element.template[a.$ids]=this[a.$ids])}}class u extends l.XFAObject{constructor(){super(-1,"",Object.create(null))}[a.$onChild](e){return!1}}t.Builder=class{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;this._namespaceStack=[],this._nsAgnosticLevel=0,this._namespacePrefixes=new Map,this._namespaces=new Map,this._nextNsId=Math.max(...Object.values(n.NamespaceIds).map((e=>{let{id:t}=e;return t}))),this._currentNamespace=e||new o.UnknownNamespace(++this._nextNsId)}buildRoot(e){return new h(e)}build(e){let{nsPrefix:t,name:r,attributes:s,namespace:o,prefixes:c}=e;const l=null!==o;if(l&&(this._namespaceStack.push(this._currentNamespace),this._currentNamespace=this._searchNamespace(o)),c&&this._addNamespacePrefix(c),s.hasOwnProperty(a.$nsAttributes)){const e=i.NamespaceSetUp.datasets,t=s[a.$nsAttributes];let r=null;for(const[n,a]of Object.entries(t))if(this._getNamespaceToUse(n)===e){r={xfa:a};break}r?s[a.$nsAttributes]=r:delete s[a.$nsAttributes]}const h=this._getNamespaceToUse(t),d=(null==h?void 0:h[n.$buildXFAObject](r,s))||new u;return d[a.$isNsAgnostic]()&&this._nsAgnosticLevel++,(l||c||d[a.$isNsAgnostic]())&&(d[a.$cleanup]={hasNamespace:l,prefixes:c,nsAgnostic:d[a.$isNsAgnostic]()}),d}isNsAgnostic(){return this._nsAgnosticLevel>0}_searchNamespace(e){let t=this._namespaces.get(e);if(t)return t;for(const[r,{check:a}]of Object.entries(n.NamespaceIds))if(a(e)){if(t=i.NamespaceSetUp[r],t)return this._namespaces.set(e,t),t;break}return t=new o.UnknownNamespace(++this._nextNsId),this._namespaces.set(e,t),t}_addNamespacePrefix(e){for(const{prefix:t,value:r}of e){const e=this._searchNamespace(r);let n=this._namespacePrefixes.get(t);n||(n=[],this._namespacePrefixes.set(t,n)),n.push(e)}}_getNamespaceToUse(e){if(!e)return this._currentNamespace;const t=this._namespacePrefixes.get(e);return(null==t?void 0:t.length)>0?t.at(-1):((0,c.warn)("Unknown namespace prefix: ".concat(e,".")),null)}clean(e){const{hasNamespace:t,prefixes:r,nsAgnostic:n}=e;t&&(this._currentNamespace=this._namespaceStack.pop()),r&&r.forEach((e=>{let{prefix:t}=e;this._namespacePrefixes.get(t).pop()})),n&&this._nsAgnosticLevel--}}},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.NamespaceSetUp=void 0;var n=r(246),a=r(247),i=r(248),s=r(249),o=r(250),c=r(251),l=r(230),h=r(252),u=r(253);const d={config:n.ConfigNamespace,connection:a.ConnectionSetNamespace,datasets:i.DatasetsNamespace,localeSet:s.LocaleSetNamespace,signature:o.SignatureNamespace,stylesheet:c.StylesheetNamespace,template:l.TemplateNamespace,xdp:h.XdpNamespace,xhtml:u.XhtmlNamespace};t.NamespaceSetUp=d},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ConfigNamespace=void 0,r(139);var n=r(234),a=r(228),i=r(240),s=r(237),o=r(144);const c=n.NamespaceIds.config.id;class l extends i.XFAObject{constructor(e){super(c,"acrobat",!0),this.acrobat7=null,this.autoSave=null,this.common=null,this.validate=null,this.validateApprovalSignatures=null,this.submitUrl=new i.XFAObjectArray}}class h extends i.XFAObject{constructor(e){super(c,"acrobat7",!0),this.dynamicRender=null}}class u extends i.OptionObject{constructor(e){super(c,"ADBE_JSConsole",["delegate","Enable","Disable"])}}class d extends i.OptionObject{constructor(e){super(c,"ADBE_JSDebugger",["delegate","Enable","Disable"])}}class f extends i.Option01{constructor(e){super(c,"addSilentPrint")}}class g extends i.Option01{constructor(e){super(c,"addViewerPreferences")}}class p extends i.Option10{constructor(e){super(c,"adjustData")}}class m extends i.IntegerObject{constructor(e){super(c,"adobeExtensionLevel",0,(e=>e>=1&&e<=8))}}class b extends i.XFAObject{constructor(e){super(c,"agent",!0),this.name=e.name?e.name.trim():"",this.common=new i.XFAObjectArray}}class y extends i.ContentObject{constructor(e){super(c,"alwaysEmbed")}}class w extends i.StringObject{constructor(e){super(c,"amd")}}class v extends i.XFAObject{constructor(e){super(c,"area"),this.level=(0,s.getInteger)({data:e.level,defaultValue:0,validate:e=>e>=1&&e<=3}),this.name=(0,s.getStringOption)(e.name,["","barcode","coreinit","deviceDriver","font","general","layout","merge","script","signature","sourceSet","templateCache"])}}class x extends i.OptionObject{constructor(e){super(c,"attributes",["preserve","delegate","ignore"])}}class S extends i.OptionObject{constructor(e){super(c,"autoSave",["disabled","enabled"])}}class A extends i.StringObject{constructor(e){super(c,"base")}}class k extends i.XFAObject{constructor(e){super(c,"batchOutput"),this.format=(0,s.getStringOption)(e.format,["none","concat","zip","zipCompress"])}}class C extends i.ContentObject{constructor(e){super(c,"behaviorOverride")}[a.$finalize](){this[a.$content]=new Map(this[a.$content].trim().split(/\\s+/).filter((e=>e.includes(":"))).map((e=>e.split(":",2))))}}class O extends i.XFAObject{constructor(e){super(c,"cache",!0),this.templateCache=null}}class F extends i.Option01{constructor(e){super(c,"change")}}class I extends i.XFAObject{constructor(e){super(c,"common",!0),this.data=null,this.locale=null,this.localeSet=null,this.messaging=null,this.suppressBanner=null,this.template=null,this.validationMessaging=null,this.versionControl=null,this.log=new i.XFAObjectArray}}class T extends i.XFAObject{constructor(e){super(c,"compress"),this.scope=(0,s.getStringOption)(e.scope,["imageOnly","document"])}}class M extends i.Option01{constructor(e){super(c,"compressLogicalStructure")}}class E extends i.Option10{constructor(e){super(c,"compressObjectStream")}}class P extends i.XFAObject{constructor(e){super(c,"compression",!0),this.compressLogicalStructure=null,this.compressObjectStream=null,this.level=null,this.type=null}}class R extends i.XFAObject{constructor(e){super(c,"config",!0),this.acrobat=null,this.present=null,this.trace=null,this.agent=new i.XFAObjectArray}}class N extends i.OptionObject{constructor(e){super(c,"conformance",["A","B"])}}class D extends i.Option01{constructor(e){super(c,"contentCopy")}}class B extends i.IntegerObject{constructor(e){super(c,"copies",1,(e=>e>=1))}}class L extends i.StringObject{constructor(e){super(c,"creator")}}class _ extends i.IntegerObject{constructor(e){super(c,"currentPage",0,(e=>e>=0))}}class j extends i.XFAObject{constructor(e){super(c,"data",!0),this.adjustData=null,this.attributes=null,this.incrementalLoad=null,this.outputXSL=null,this.range=null,this.record=null,this.startNode=null,this.uri=null,this.window=null,this.xsl=null,this.excludeNS=new i.XFAObjectArray,this.transform=new i.XFAObjectArray}}class U extends i.XFAObject{constructor(e){super(c,"debug",!0),this.uri=null}}class $ extends i.ContentObject{constructor(e){super(c,"defaultTypeface"),this.writingScript=(0,s.getStringOption)(e.writingScript,["*","Arabic","Cyrillic","EastEuropeanRoman","Greek","Hebrew","Japanese","Korean","Roman","SimplifiedChinese","Thai","TraditionalChinese","Vietnamese"])}}class X extends i.OptionObject{constructor(e){super(c,"destination",["pdf","pcl","ps","webClient","zpl"])}}class H extends i.Option01{constructor(e){super(c,"documentAssembly")}}class q extends i.XFAObject{constructor(e){super(c,"driver",!0),this.name=e.name?e.name.trim():"",this.fontInfo=null,this.xdc=null}}class z extends i.OptionObject{constructor(e){super(c,"duplexOption",["simplex","duplexFlipLongEdge","duplexFlipShortEdge"])}}class G extends i.OptionObject{constructor(e){super(c,"dynamicRender",["forbidden","required"])}}class W extends i.Option01{constructor(e){super(c,"embed")}}class V extends i.Option01{constructor(e){super(c,"encrypt")}}class K extends i.XFAObject{constructor(e){super(c,"encryption",!0),this.encrypt=null,this.encryptionLevel=null,this.permissions=null}}class Y extends i.OptionObject{constructor(e){super(c,"encryptionLevel",["40bit","128bit"])}}class J extends i.StringObject{constructor(e){super(c,"enforce")}}class Z extends i.XFAObject{constructor(e){super(c,"equate"),this.force=(0,s.getInteger)({data:e.force,defaultValue:1,validate:e=>0===e}),this.from=e.from||"",this.to=e.to||""}}class Q extends i.XFAObject{constructor(e){super(c,"equateRange"),this.from=e.from||"",this.to=e.to||"",this._unicodeRange=e.unicodeRange||""}get unicodeRange(){const e=[],t=/U\\+([0-9a-fA-F]+)/,r=this._unicodeRange;for(let n of r.split(",").map((e=>e.trim())).filter((e=>!!e)))n=n.split("-",2).map((e=>{const r=e.match(t);return r?parseInt(r[1],16):0})),1===n.length&&n.push(n[0]),e.push(n);return(0,o.shadow)(this,"unicodeRange",e)}}class ee extends i.ContentObject{constructor(e){super(c,"exclude")}[a.$finalize](){this[a.$content]=this[a.$content].trim().split(/\\s+/).filter((e=>e&&["calculate","close","enter","exit","initialize","ready","validate"].includes(e)))}}class te extends i.StringObject{constructor(e){super(c,"excludeNS")}}class re extends i.OptionObject{constructor(e){super(c,"flipLabel",["usePrinterSetting","on","off"])}}class ne extends i.XFAObject{constructor(e){super(c,"fontInfo",!0),this.embed=null,this.map=null,this.subsetBelow=null,this.alwaysEmbed=new i.XFAObjectArray,this.defaultTypeface=new i.XFAObjectArray,this.neverEmbed=new i.XFAObjectArray}}class ae extends i.Option01{constructor(e){super(c,"formFieldFilling")}}class ie extends i.StringObject{constructor(e){super(c,"groupParent")}}class se extends i.OptionObject{constructor(e){super(c,"ifEmpty",["dataValue","dataGroup","ignore","remove"])}}class oe extends i.StringObject{constructor(e){super(c,"includeXDPContent")}}class ce extends i.OptionObject{constructor(e){super(c,"incrementalLoad",["none","forwardOnly"])}}class le extends i.Option01{constructor(e){super(c,"incrementalMerge")}}class he extends i.Option01{constructor(e){super(c,"interactive")}}class ue extends i.OptionObject{constructor(e){super(c,"jog",["usePrinterSetting","none","pageSet"])}}class de extends i.XFAObject{constructor(e){super(c,"labelPrinter",!0),this.name=(0,s.getStringOption)(e.name,["zpl","dpl","ipl","tcpl"]),this.batchOutput=null,this.flipLabel=null,this.fontInfo=null,this.xdc=null}}class fe extends i.OptionObject{constructor(e){super(c,"layout",["paginate","panel"])}}class ge extends i.IntegerObject{constructor(e){super(c,"level",0,(e=>e>0))}}class pe extends i.Option01{constructor(e){super(c,"linearized")}}class me extends i.StringObject{constructor(e){super(c,"locale")}}class be extends i.StringObject{constructor(e){super(c,"localeSet")}}class ye extends i.XFAObject{constructor(e){super(c,"log",!0),this.mode=null,this.threshold=null,this.to=null,this.uri=null}}class we extends i.XFAObject{constructor(e){super(c,"map",!0),this.equate=new i.XFAObjectArray,this.equateRange=new i.XFAObjectArray}}class ve extends i.XFAObject{constructor(e){super(c,"mediumInfo",!0),this.map=null}}class xe extends i.XFAObject{constructor(e){super(c,"message",!0),this.msgId=null,this.severity=null}}class Se extends i.XFAObject{constructor(e){super(c,"messaging",!0),this.message=new i.XFAObjectArray}}class Ae extends i.OptionObject{constructor(e){super(c,"mode",["append","overwrite"])}}class ke extends i.Option01{constructor(e){super(c,"modifyAnnots")}}class Ce extends i.IntegerObject{constructor(e){super(c,"msgId",1,(e=>e>=1))}}class Oe extends i.StringObject{constructor(e){super(c,"nameAttr")}}class Fe extends i.ContentObject{constructor(e){super(c,"neverEmbed")}}class Ie extends i.IntegerObject{constructor(e){super(c,"numberOfCopies",null,(e=>e>=2&&e<=5))}}class Te extends i.XFAObject{constructor(e){super(c,"openAction",!0),this.destination=null}}class Me extends i.XFAObject{constructor(e){super(c,"output",!0),this.to=null,this.type=null,this.uri=null}}class Ee extends i.StringObject{constructor(e){super(c,"outputBin")}}class Pe extends i.XFAObject{constructor(e){super(c,"outputXSL",!0),this.uri=null}}class Re extends i.OptionObject{constructor(e){super(c,"overprint",["none","both","draw","field"])}}class Ne extends i.StringObject{constructor(e){super(c,"packets")}[a.$finalize](){"*"!==this[a.$content]&&(this[a.$content]=this[a.$content].trim().split(/\\s+/).filter((e=>["config","datasets","template","xfdf","xslt"].includes(e))))}}class De extends i.XFAObject{constructor(e){super(c,"pageOffset"),this.x=(0,s.getInteger)({data:e.x,defaultValue:"useXDCSetting",validate:e=>!0}),this.y=(0,s.getInteger)({data:e.y,defaultValue:"useXDCSetting",validate:e=>!0})}}class Be extends i.StringObject{constructor(e){super(c,"pageRange")}[a.$finalize](){const e=this[a.$content].trim().split(/\\s+/).map((e=>parseInt(e,10))),t=[];for(let r=0,n=e.length;r!1))}}class Ue extends i.XFAObject{constructor(e){super(c,"pcl",!0),this.name=e.name||"",this.batchOutput=null,this.fontInfo=null,this.jog=null,this.mediumInfo=null,this.outputBin=null,this.pageOffset=null,this.staple=null,this.xdc=null}}class $e extends i.XFAObject{constructor(e){super(c,"pdf",!0),this.name=e.name||"",this.adobeExtensionLevel=null,this.batchOutput=null,this.compression=null,this.creator=null,this.encryption=null,this.fontInfo=null,this.interactive=null,this.linearized=null,this.openAction=null,this.pdfa=null,this.producer=null,this.renderPolicy=null,this.scriptModel=null,this.silentPrint=null,this.submitFormat=null,this.tagged=null,this.version=null,this.viewerPreferences=null,this.xdc=null}}class Xe extends i.XFAObject{constructor(e){super(c,"pdfa",!0),this.amd=null,this.conformance=null,this.includeXDPContent=null,this.part=null}}class He extends i.XFAObject{constructor(e){super(c,"permissions",!0),this.accessibleContent=null,this.change=null,this.contentCopy=null,this.documentAssembly=null,this.formFieldFilling=null,this.modifyAnnots=null,this.plaintextMetadata=null,this.print=null,this.printHighQuality=null}}class qe extends i.Option01{constructor(e){super(c,"pickTrayByPDFSize")}}class ze extends i.StringObject{constructor(e){super(c,"picture")}}class Ge extends i.Option01{constructor(e){super(c,"plaintextMetadata")}}class We extends i.OptionObject{constructor(e){super(c,"presence",["preserve","dissolve","dissolveStructure","ignore","remove"])}}class Ve extends i.XFAObject{constructor(e){super(c,"present",!0),this.behaviorOverride=null,this.cache=null,this.common=null,this.copies=null,this.destination=null,this.incrementalMerge=null,this.layout=null,this.output=null,this.overprint=null,this.pagination=null,this.paginationOverride=null,this.script=null,this.validate=null,this.xdp=null,this.driver=new i.XFAObjectArray,this.labelPrinter=new i.XFAObjectArray,this.pcl=new i.XFAObjectArray,this.pdf=new i.XFAObjectArray,this.ps=new i.XFAObjectArray,this.submitUrl=new i.XFAObjectArray,this.webClient=new i.XFAObjectArray,this.zpl=new i.XFAObjectArray}}class Ke extends i.Option01{constructor(e){super(c,"print")}}class Ye extends i.Option01{constructor(e){super(c,"printHighQuality")}}class Je extends i.OptionObject{constructor(e){super(c,"printScaling",["appdefault","noScaling"])}}class Ze extends i.StringObject{constructor(e){super(c,"printerName")}}class Qe extends i.StringObject{constructor(e){super(c,"producer")}}class et extends i.XFAObject{constructor(e){super(c,"ps",!0),this.name=e.name||"",this.batchOutput=null,this.fontInfo=null,this.jog=null,this.mediumInfo=null,this.outputBin=null,this.staple=null,this.xdc=null}}class tt extends i.ContentObject{constructor(e){super(c,"range")}[a.$finalize](){this[a.$content]=this[a.$content].trim().split(/\\s*,\\s*/,2).map((e=>e.split("-").map((e=>parseInt(e.trim(),10))))).filter((e=>e.every((e=>!isNaN(e))))).map((e=>(1===e.length&&e.push(e[0]),e)))}}class rt extends i.ContentObject{constructor(e){super(c,"record")}[a.$finalize](){this[a.$content]=this[a.$content].trim();const e=parseInt(this[a.$content],10);!isNaN(e)&&e>=0&&(this[a.$content]=e)}}class nt extends i.ContentObject{constructor(e){super(c,"relevant")}[a.$finalize](){this[a.$content]=this[a.$content].trim().split(/\\s+/)}}class at extends i.ContentObject{constructor(e){super(c,"rename")}[a.$finalize](){this[a.$content]=this[a.$content].trim(),(this[a.$content].toLowerCase().startsWith("xml")||new RegExp("[\\\\p{L}_][\\\\p{L}\\\\d._\\\\p{M}-]*","u").test(this[a.$content]))&&(0,o.warn)("XFA - Rename: invalid XFA name")}}class it extends i.OptionObject{constructor(e){super(c,"renderPolicy",["server","client"])}}class st extends i.OptionObject{constructor(e){super(c,"runScripts",["both","client","none","server"])}}class ot extends i.XFAObject{constructor(e){super(c,"script",!0),this.currentPage=null,this.exclude=null,this.runScripts=null}}class ct extends i.OptionObject{constructor(e){super(c,"scriptModel",["XFA","none"])}}class lt extends i.OptionObject{constructor(e){super(c,"severity",["ignore","error","information","trace","warning"])}}class ht extends i.XFAObject{constructor(e){super(c,"silentPrint",!0),this.addSilentPrint=null,this.printerName=null}}class ut extends i.XFAObject{constructor(e){super(c,"staple"),this.mode=(0,s.getStringOption)(e.mode,["usePrinterSetting","on","off"])}}class dt extends i.StringObject{constructor(e){super(c,"startNode")}}class ft extends i.IntegerObject{constructor(e){super(c,"startPage",0,(e=>!0))}}class gt extends i.OptionObject{constructor(e){super(c,"submitFormat",["html","delegate","fdf","xml","pdf"])}}class pt extends i.StringObject{constructor(e){super(c,"submitUrl")}}class mt extends i.IntegerObject{constructor(e){super(c,"subsetBelow",100,(e=>e>=0&&e<=100))}}class bt extends i.Option01{constructor(e){super(c,"suppressBanner")}}class yt extends i.Option01{constructor(e){super(c,"tagged")}}class wt extends i.XFAObject{constructor(e){super(c,"template",!0),this.base=null,this.relevant=null,this.startPage=null,this.uri=null,this.xsl=null}}class vt extends i.OptionObject{constructor(e){super(c,"threshold",["trace","error","information","warning"])}}class xt extends i.OptionObject{constructor(e){super(c,"to",["null","memory","stderr","stdout","system","uri"])}}class St extends i.XFAObject{constructor(e){super(c,"templateCache"),this.maxEntries=(0,s.getInteger)({data:e.maxEntries,defaultValue:5,validate:e=>e>=0})}}class At extends i.XFAObject{constructor(e){super(c,"trace",!0),this.area=new i.XFAObjectArray}}class kt extends i.XFAObject{constructor(e){super(c,"transform",!0),this.groupParent=null,this.ifEmpty=null,this.nameAttr=null,this.picture=null,this.presence=null,this.rename=null,this.whitespace=null}}class Ct extends i.OptionObject{constructor(e){super(c,"type",["none","ascii85","asciiHex","ccittfax","flate","lzw","runLength","native","xdp","mergedXDP"])}}class Ot extends i.StringObject{constructor(e){super(c,"uri")}}class Ft extends i.OptionObject{constructor(e){super(c,"validate",["preSubmit","prePrint","preExecute","preSave"])}}class It extends i.ContentObject{constructor(e){super(c,"validateApprovalSignatures")}[a.$finalize](){this[a.$content]=this[a.$content].trim().split(/\\s+/).filter((e=>["docReady","postSign"].includes(e)))}}class Tt extends i.OptionObject{constructor(e){super(c,"validationMessaging",["allMessagesIndividually","allMessagesTogether","firstMessageOnly","noMessages"])}}class Mt extends i.OptionObject{constructor(e){super(c,"version",["1.7","1.6","1.5","1.4","1.3","1.2"])}}class Et extends i.XFAObject{constructor(e){super(c,"VersionControl"),this.outputBelow=(0,s.getStringOption)(e.outputBelow,["warn","error","update"]),this.sourceAbove=(0,s.getStringOption)(e.sourceAbove,["warn","error"]),this.sourceBelow=(0,s.getStringOption)(e.sourceBelow,["update","maintain"])}}class Pt extends i.XFAObject{constructor(e){super(c,"viewerPreferences",!0),this.ADBE_JSConsole=null,this.ADBE_JSDebugger=null,this.addViewerPreferences=null,this.duplexOption=null,this.enforce=null,this.numberOfCopies=null,this.pageRange=null,this.pickTrayByPDFSize=null,this.printScaling=null}}class Rt extends i.XFAObject{constructor(e){super(c,"webClient",!0),this.name=e.name?e.name.trim():"",this.fontInfo=null,this.xdc=null}}class Nt extends i.OptionObject{constructor(e){super(c,"whitespace",["preserve","ltrim","normalize","rtrim","trim"])}}class Dt extends i.ContentObject{constructor(e){super(c,"window")}[a.$finalize](){const e=this[a.$content].trim().split(/\\s*,\\s*/,2).map((e=>parseInt(e,10)));e.some((e=>isNaN(e)))?this[a.$content]=[0,0]:(1===e.length&&e.push(e[0]),this[a.$content]=e)}}class Bt extends i.XFAObject{constructor(e){super(c,"xdc",!0),this.uri=new i.XFAObjectArray,this.xsl=new i.XFAObjectArray}}class Lt extends i.XFAObject{constructor(e){super(c,"xdp",!0),this.packets=null}}class _t extends i.XFAObject{constructor(e){super(c,"xsl",!0),this.debug=null,this.uri=null}}class jt extends i.XFAObject{constructor(e){super(c,"zpl",!0),this.name=e.name?e.name.trim():"",this.batchOutput=null,this.flipLabel=null,this.fontInfo=null,this.xdc=null}}class Ut{static[n.$buildXFAObject](e,t){if(Ut.hasOwnProperty(e))return Ut[e](t)}static acrobat(e){return new l(e)}static acrobat7(e){return new h(e)}static ADBE_JSConsole(e){return new u(e)}static ADBE_JSDebugger(e){return new d(e)}static addSilentPrint(e){return new f(e)}static addViewerPreferences(e){return new g(e)}static adjustData(e){return new p(e)}static adobeExtensionLevel(e){return new m(e)}static agent(e){return new b(e)}static alwaysEmbed(e){return new y(e)}static amd(e){return new w(e)}static area(e){return new v(e)}static attributes(e){return new x(e)}static autoSave(e){return new S(e)}static base(e){return new A(e)}static batchOutput(e){return new k(e)}static behaviorOverride(e){return new C(e)}static cache(e){return new O(e)}static change(e){return new F(e)}static common(e){return new I(e)}static compress(e){return new T(e)}static compressLogicalStructure(e){return new M(e)}static compressObjectStream(e){return new E(e)}static compression(e){return new P(e)}static config(e){return new R(e)}static conformance(e){return new N(e)}static contentCopy(e){return new D(e)}static copies(e){return new B(e)}static creator(e){return new L(e)}static currentPage(e){return new _(e)}static data(e){return new j(e)}static debug(e){return new U(e)}static defaultTypeface(e){return new $(e)}static destination(e){return new X(e)}static documentAssembly(e){return new H(e)}static driver(e){return new q(e)}static duplexOption(e){return new z(e)}static dynamicRender(e){return new G(e)}static embed(e){return new W(e)}static encrypt(e){return new V(e)}static encryption(e){return new K(e)}static encryptionLevel(e){return new Y(e)}static enforce(e){return new J(e)}static equate(e){return new Z(e)}static equateRange(e){return new Q(e)}static exclude(e){return new ee(e)}static excludeNS(e){return new te(e)}static flipLabel(e){return new re(e)}static fontInfo(e){return new ne(e)}static formFieldFilling(e){return new ae(e)}static groupParent(e){return new ie(e)}static ifEmpty(e){return new se(e)}static includeXDPContent(e){return new oe(e)}static incrementalLoad(e){return new ce(e)}static incrementalMerge(e){return new le(e)}static interactive(e){return new he(e)}static jog(e){return new ue(e)}static labelPrinter(e){return new de(e)}static layout(e){return new fe(e)}static level(e){return new ge(e)}static linearized(e){return new pe(e)}static locale(e){return new me(e)}static localeSet(e){return new be(e)}static log(e){return new ye(e)}static map(e){return new we(e)}static mediumInfo(e){return new ve(e)}static message(e){return new xe(e)}static messaging(e){return new Se(e)}static mode(e){return new Ae(e)}static modifyAnnots(e){return new ke(e)}static msgId(e){return new Ce(e)}static nameAttr(e){return new Oe(e)}static neverEmbed(e){return new Fe(e)}static numberOfCopies(e){return new Ie(e)}static openAction(e){return new Te(e)}static output(e){return new Me(e)}static outputBin(e){return new Ee(e)}static outputXSL(e){return new Pe(e)}static overprint(e){return new Re(e)}static packets(e){return new Ne(e)}static pageOffset(e){return new De(e)}static pageRange(e){return new Be(e)}static pagination(e){return new Le(e)}static paginationOverride(e){return new _e(e)}static part(e){return new je(e)}static pcl(e){return new Ue(e)}static pdf(e){return new $e(e)}static pdfa(e){return new Xe(e)}static permissions(e){return new He(e)}static pickTrayByPDFSize(e){return new qe(e)}static picture(e){return new ze(e)}static plaintextMetadata(e){return new Ge(e)}static presence(e){return new We(e)}static present(e){return new Ve(e)}static print(e){return new Ke(e)}static printHighQuality(e){return new Ye(e)}static printScaling(e){return new Je(e)}static printerName(e){return new Ze(e)}static producer(e){return new Qe(e)}static ps(e){return new et(e)}static range(e){return new tt(e)}static record(e){return new rt(e)}static relevant(e){return new nt(e)}static rename(e){return new at(e)}static renderPolicy(e){return new it(e)}static runScripts(e){return new st(e)}static script(e){return new ot(e)}static scriptModel(e){return new ct(e)}static severity(e){return new lt(e)}static silentPrint(e){return new ht(e)}static staple(e){return new ut(e)}static startNode(e){return new dt(e)}static startPage(e){return new ft(e)}static submitFormat(e){return new gt(e)}static submitUrl(e){return new pt(e)}static subsetBelow(e){return new mt(e)}static suppressBanner(e){return new bt(e)}static tagged(e){return new yt(e)}static template(e){return new wt(e)}static templateCache(e){return new St(e)}static threshold(e){return new vt(e)}static to(e){return new xt(e)}static trace(e){return new At(e)}static transform(e){return new kt(e)}static type(e){return new Ct(e)}static uri(e){return new Ot(e)}static validate(e){return new Ft(e)}static validateApprovalSignatures(e){return new It(e)}static validationMessaging(e){return new Tt(e)}static version(e){return new Mt(e)}static versionControl(e){return new Et(e)}static viewerPreferences(e){return new Pt(e)}static webClient(e){return new Rt(e)}static whitespace(e){return new Nt(e)}static window(e){return new Dt(e)}static xdc(e){return new Bt(e)}static xdp(e){return new Lt(e)}static xsl(e){return new _t(e)}static zpl(e){return new jt(e)}}t.ConfigNamespace=Ut},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ConnectionSetNamespace=void 0;var n=r(234),a=r(240);const i=n.NamespaceIds.connectionSet.id;class s extends a.XFAObject{constructor(e){super(i,"connectionSet",!0),this.wsdlConnection=new a.XFAObjectArray,this.xmlConnection=new a.XFAObjectArray,this.xsdConnection=new a.XFAObjectArray}}class o extends a.XFAObject{constructor(e){super(i,"effectiveInputPolicy"),this.id=e.id||"",this.name=e.name||"",this.use=e.use||"",this.usehref=e.usehref||""}}class c extends a.XFAObject{constructor(e){super(i,"effectiveOutputPolicy"),this.id=e.id||"",this.name=e.name||"",this.use=e.use||"",this.usehref=e.usehref||""}}class l extends a.StringObject{constructor(e){super(i,"operation"),this.id=e.id||"",this.input=e.input||"",this.name=e.name||"",this.output=e.output||"",this.use=e.use||"",this.usehref=e.usehref||""}}class h extends a.StringObject{constructor(e){super(i,"rootElement"),this.id=e.id||"",this.name=e.name||"",this.use=e.use||"",this.usehref=e.usehref||""}}class u extends a.StringObject{constructor(e){super(i,"soapAction"),this.id=e.id||"",this.name=e.name||"",this.use=e.use||"",this.usehref=e.usehref||""}}class d extends a.StringObject{constructor(e){super(i,"soapAddress"),this.id=e.id||"",this.name=e.name||"",this.use=e.use||"",this.usehref=e.usehref||""}}class f extends a.StringObject{constructor(e){super(i,"uri"),this.id=e.id||"",this.name=e.name||"",this.use=e.use||"",this.usehref=e.usehref||""}}class g extends a.StringObject{constructor(e){super(i,"wsdlAddress"),this.id=e.id||"",this.name=e.name||"",this.use=e.use||"",this.usehref=e.usehref||""}}class p extends a.XFAObject{constructor(e){super(i,"wsdlConnection",!0),this.dataDescription=e.dataDescription||"",this.name=e.name||"",this.effectiveInputPolicy=null,this.effectiveOutputPolicy=null,this.operation=null,this.soapAction=null,this.soapAddress=null,this.wsdlAddress=null}}class m extends a.XFAObject{constructor(e){super(i,"xmlConnection",!0),this.dataDescription=e.dataDescription||"",this.name=e.name||"",this.uri=null}}class b extends a.XFAObject{constructor(e){super(i,"xsdConnection",!0),this.dataDescription=e.dataDescription||"",this.name=e.name||"",this.rootElement=null,this.uri=null}}class y{static[n.$buildXFAObject](e,t){if(y.hasOwnProperty(e))return y[e](t)}static connectionSet(e){return new s(e)}static effectiveInputPolicy(e){return new o(e)}static effectiveOutputPolicy(e){return new c(e)}static operation(e){return new l(e)}static rootElement(e){return new h(e)}static soapAction(e){return new u(e)}static soapAddress(e){return new d(e)}static uri(e){return new f(e)}static wsdlAddress(e){return new g(e)}static wsdlConnection(e){return new p(e)}static xmlConnection(e){return new m(e)}static xsdConnection(e){return new b(e)}}t.ConnectionSetNamespace=y},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.DatasetsNamespace=void 0;var n=r(228),a=r(234),i=r(240);const s=a.NamespaceIds.datasets.id;class o extends i.XmlObject{constructor(e){super(s,"data",e)}[n.$isNsAgnostic](){return!0}}class c extends i.XFAObject{constructor(e){super(s,"datasets",!0),this.data=null,this.Signature=null}[n.$onChild](e){const t=e[n.$nodeName];("data"===t&&e[n.$namespaceId]===s||"Signature"===t&&e[n.$namespaceId]===a.NamespaceIds.signature.id)&&(this[t]=e),this[n.$appendChild](e)}}class l{static[a.$buildXFAObject](e,t){if(l.hasOwnProperty(e))return l[e](t)}static datasets(e){return new c(e)}static data(e){return new o(e)}}t.DatasetsNamespace=l},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.LocaleSetNamespace=void 0;var n=r(234),a=r(240),i=r(237);const s=n.NamespaceIds.localeSet.id;class o extends a.XFAObject{constructor(e){super(s,"calendarSymbols",!0),this.name="gregorian",this.dayNames=new a.XFAObjectArray(2),this.eraNames=null,this.meridiemNames=null,this.monthNames=new a.XFAObjectArray(2)}}class c extends a.StringObject{constructor(e){super(s,"currencySymbol"),this.name=(0,i.getStringOption)(e.name,["symbol","isoname","decimal"])}}class l extends a.XFAObject{constructor(e){super(s,"currencySymbols",!0),this.currencySymbol=new a.XFAObjectArray(3)}}class h extends a.StringObject{constructor(e){super(s,"datePattern"),this.name=(0,i.getStringOption)(e.name,["full","long","med","short"])}}class u extends a.XFAObject{constructor(e){super(s,"datePatterns",!0),this.datePattern=new a.XFAObjectArray(4)}}class d extends a.ContentObject{constructor(e){super(s,"dateTimeSymbols")}}class f extends a.StringObject{constructor(e){super(s,"day")}}class g extends a.XFAObject{constructor(e){super(s,"dayNames",!0),this.abbr=(0,i.getInteger)({data:e.abbr,defaultValue:0,validate:e=>1===e}),this.day=new a.XFAObjectArray(7)}}class p extends a.StringObject{constructor(e){super(s,"era")}}class m extends a.XFAObject{constructor(e){super(s,"eraNames",!0),this.era=new a.XFAObjectArray(2)}}class b extends a.XFAObject{constructor(e){super(s,"locale",!0),this.desc=e.desc||"",this.name="isoname",this.calendarSymbols=null,this.currencySymbols=null,this.datePatterns=null,this.dateTimeSymbols=null,this.numberPatterns=null,this.numberSymbols=null,this.timePatterns=null,this.typeFaces=null}}class y extends a.XFAObject{constructor(e){super(s,"localeSet",!0),this.locale=new a.XFAObjectArray}}class w extends a.StringObject{constructor(e){super(s,"meridiem")}}class v extends a.XFAObject{constructor(e){super(s,"meridiemNames",!0),this.meridiem=new a.XFAObjectArray(2)}}class x extends a.StringObject{constructor(e){super(s,"month")}}class S extends a.XFAObject{constructor(e){super(s,"monthNames",!0),this.abbr=(0,i.getInteger)({data:e.abbr,defaultValue:0,validate:e=>1===e}),this.month=new a.XFAObjectArray(12)}}class A extends a.StringObject{constructor(e){super(s,"numberPattern"),this.name=(0,i.getStringOption)(e.name,["full","long","med","short"])}}class k extends a.XFAObject{constructor(e){super(s,"numberPatterns",!0),this.numberPattern=new a.XFAObjectArray(4)}}class C extends a.StringObject{constructor(e){super(s,"numberSymbol"),this.name=(0,i.getStringOption)(e.name,["decimal","grouping","percent","minus","zero"])}}class O extends a.XFAObject{constructor(e){super(s,"numberSymbols",!0),this.numberSymbol=new a.XFAObjectArray(5)}}class F extends a.StringObject{constructor(e){super(s,"timePattern"),this.name=(0,i.getStringOption)(e.name,["full","long","med","short"])}}class I extends a.XFAObject{constructor(e){super(s,"timePatterns",!0),this.timePattern=new a.XFAObjectArray(4)}}class T extends a.XFAObject{constructor(e){super(s,"typeFace",!0),this.name=""|e.name}}class M extends a.XFAObject{constructor(e){super(s,"typeFaces",!0),this.typeFace=new a.XFAObjectArray}}class E{static[n.$buildXFAObject](e,t){if(E.hasOwnProperty(e))return E[e](t)}static calendarSymbols(e){return new o(e)}static currencySymbol(e){return new c(e)}static currencySymbols(e){return new l(e)}static datePattern(e){return new h(e)}static datePatterns(e){return new u(e)}static dateTimeSymbols(e){return new d(e)}static day(e){return new f(e)}static dayNames(e){return new g(e)}static era(e){return new p(e)}static eraNames(e){return new m(e)}static locale(e){return new b(e)}static localeSet(e){return new y(e)}static meridiem(e){return new w(e)}static meridiemNames(e){return new v(e)}static month(e){return new x(e)}static monthNames(e){return new S(e)}static numberPattern(e){return new A(e)}static numberPatterns(e){return new k(e)}static numberSymbol(e){return new C(e)}static numberSymbols(e){return new O(e)}static timePattern(e){return new F(e)}static timePatterns(e){return new I(e)}static typeFace(e){return new T(e)}static typeFaces(e){return new M(e)}}t.LocaleSetNamespace=E},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.SignatureNamespace=void 0;var n=r(234),a=r(240);const i=n.NamespaceIds.signature.id;class s extends a.XFAObject{constructor(e){super(i,"signature",!0)}}class o{static[n.$buildXFAObject](e,t){if(o.hasOwnProperty(e))return o[e](t)}static signature(e){return new s(e)}}t.SignatureNamespace=o},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.StylesheetNamespace=void 0;var n=r(234),a=r(240);const i=n.NamespaceIds.stylesheet.id;class s extends a.XFAObject{constructor(e){super(i,"stylesheet",!0)}}class o{static[n.$buildXFAObject](e,t){if(o.hasOwnProperty(e))return o[e](t)}static stylesheet(e){return new s(e)}}t.StylesheetNamespace=o},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.XdpNamespace=void 0;var n=r(234),a=r(228),i=r(240);const s=n.NamespaceIds.xdp.id;class o extends i.XFAObject{constructor(e){super(s,"xdp",!0),this.uuid=e.uuid||"",this.timeStamp=e.timeStamp||"",this.config=null,this.connectionSet=null,this.datasets=null,this.localeSet=null,this.stylesheet=new i.XFAObjectArray,this.template=null}[a.$onChildCheck](e){const t=n.NamespaceIds[e[a.$nodeName]];return t&&e[a.$namespaceId]===t.id}}class c{static[n.$buildXFAObject](e,t){if(c.hasOwnProperty(e))return c[e](t)}static xdp(e){return new o(e)}}t.XdpNamespace=c},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.XhtmlNamespace=void 0,r(116),r(126),r(128),r(131),r(133),r(135),r(137);var n=r(228),a=r(234),i=r(236),s=r(237),o=r(240);const c=a.NamespaceIds.xhtml.id,l=Symbol(),h=new Set(["color","font","font-family","font-size","font-stretch","font-style","font-weight","margin","margin-bottom","margin-left","margin-right","margin-top","letter-spacing","line-height","orphans","page-break-after","page-break-before","page-break-inside","tab-interval","tab-stop","text-align","text-decoration","text-indent","vertical-align","widows","kerning-mode","xfa-font-horizontal-scale","xfa-font-vertical-scale","xfa-spacerun","xfa-tab-stops"]),u=new Map([["page-break-after","breakAfter"],["page-break-before","breakBefore"],["page-break-inside","breakInside"],["kerning-mode",e=>"none"===e?"none":"normal"],["xfa-font-horizontal-scale",e=>"scaleX(".concat(Math.max(0,Math.min(parseInt(e)/100)).toFixed(2),")")],["xfa-font-vertical-scale",e=>"scaleY(".concat(Math.max(0,Math.min(parseInt(e)/100)).toFixed(2),")")],["xfa-spacerun",""],["xfa-tab-stops",""],["font-size",(e,t)=>(e=t.fontSize=(0,s.getMeasurement)(e),(0,i.measureToString)(.99*e))],["letter-spacing",e=>(0,i.measureToString)((0,s.getMeasurement)(e))],["line-height",e=>(0,i.measureToString)((0,s.getMeasurement)(e))],["margin",e=>(0,i.measureToString)((0,s.getMeasurement)(e))],["margin-bottom",e=>(0,i.measureToString)((0,s.getMeasurement)(e))],["margin-left",e=>(0,i.measureToString)((0,s.getMeasurement)(e))],["margin-right",e=>(0,i.measureToString)((0,s.getMeasurement)(e))],["margin-top",e=>(0,i.measureToString)((0,s.getMeasurement)(e))],["text-indent",e=>(0,i.measureToString)((0,s.getMeasurement)(e))],["font-family",e=>e],["vertical-align",e=>(0,i.measureToString)((0,s.getMeasurement)(e))]]),d=/\\s+/g,f=/[\\r\\n]+/g,g=/\\r\\n?/g;function p(e,t,r){const a=Object.create(null);if(!e)return a;const o=Object.create(null);for(const[t,r]of e.split(";").map((e=>e.split(":",2)))){const e=u.get(t);if(""===e)continue;let n=r;e&&(n="string"==typeof e?e:e(r,o)),t.endsWith("scale")?a.transform=a.transform?"".concat(a[t]," ").concat(n):n:a[t.replaceAll(/-([a-zA-Z])/g,((e,t)=>t.toUpperCase()))]=n}if(a.fontFamily&&(0,i.setFontFamily)({typeface:a.fontFamily,weight:a.fontWeight||"normal",posture:a.fontStyle||"normal",size:o.fontSize||0},t,t[n.$globalData].fontFinder,a),r&&a.verticalAlign&&"0px"!==a.verticalAlign&&a.fontSize){const e=.583,t=.333,r=(0,s.getMeasurement)(a.fontSize);a.fontSize=(0,i.measureToString)(r*e),a.verticalAlign=(0,i.measureToString)(Math.sign((0,s.getMeasurement)(a.verticalAlign))*r*t)}return r&&a.fontSize&&(a.fontSize="calc(".concat(a.fontSize," * var(--scale-factor))")),(0,i.fixTextIndent)(a),a}const m=new Set(["body","html"]);class b extends o.XmlObject{constructor(e,t){super(c,t),this[l]=!1,this.style=e.style||""}[n.$clean](e){super[n.$clean](e),this.style=function(e){return e.style?e.style.trim().split(/\\s*;\\s*/).filter((e=>!!e)).map((e=>e.split(/\\s*:\\s*/,2))).filter((t=>{let[r,a]=t;return"font-family"===r&&e[n.$globalData].usedTypefaces.add(a),h.has(r)})).map((e=>e.join(":"))).join(";"):""}(this)}[n.$acceptWhitespace](){return!m.has(this[n.$nodeName])}[n.$onText](e){arguments.length>1&&void 0!==arguments[1]&&arguments[1]?this[l]=!0:(e=e.replaceAll(f,""),this.style.includes("xfa-spacerun:yes")||(e=e.replaceAll(d," "))),e&&(this[n.$content]+=e)}[n.$pushGlyphs](e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];const r=Object.create(null),a={top:NaN,bottom:NaN,left:NaN,right:NaN};let i=null;for(const[e,t]of this.style.split(";").map((e=>e.split(":",2))))switch(e){case"font-family":r.typeface=(0,s.stripQuotes)(t);break;case"font-size":r.size=(0,s.getMeasurement)(t);break;case"font-weight":r.weight=t;break;case"font-style":r.posture=t;break;case"letter-spacing":r.letterSpacing=(0,s.getMeasurement)(t);break;case"margin":const e=t.split(/ \\t/).map((e=>(0,s.getMeasurement)(e)));switch(e.length){case 1:a.top=a.bottom=a.left=a.right=e[0];break;case 2:a.top=a.bottom=e[0],a.left=a.right=e[1];break;case 3:a.top=e[0],a.bottom=e[2],a.left=a.right=e[1];break;case 4:a.top=e[0],a.left=e[1],a.bottom=e[2],a.right=e[3]}break;case"margin-top":a.top=(0,s.getMeasurement)(t);break;case"margin-bottom":a.bottom=(0,s.getMeasurement)(t);break;case"margin-left":a.left=(0,s.getMeasurement)(t);break;case"margin-right":a.right=(0,s.getMeasurement)(t);break;case"line-height":i=(0,s.getMeasurement)(t)}if(e.pushData(r,a,i),this[n.$content])e.addString(this[n.$content]);else for(const t of this[n.$getChildren]())"#text"!==t[n.$nodeName]?t[n.$pushGlyphs](e):e.addString(t[n.$content]);t&&e.popFont()}[n.$toHTML](e){const t=[];if(this[n.$extra]={children:t},this[n.$childrenToHTML]({}),0===t.length&&!this[n.$content])return s.HTMLResult.EMPTY;let r;return r=this[l]?this[n.$content]?this[n.$content].replaceAll(g,"\\n"):void 0:this[n.$content]||void 0,s.HTMLResult.success({name:this[n.$nodeName],attributes:{href:this.href,style:p(this.style,this,this[l])},children:t,value:r})}}class y extends b{constructor(e){super(e,"a"),this.href=(0,i.fixURL)(e.href)||""}}class w extends b{constructor(e){super(e,"b")}[n.$pushGlyphs](e){e.pushFont({weight:"bold"}),super[n.$pushGlyphs](e),e.popFont()}}class v extends b{constructor(e){super(e,"body")}[n.$toHTML](e){const t=super[n.$toHTML](e),{html:r}=t;return r?(r.name="div",r.attributes.class=["xfaRich"],t):s.HTMLResult.EMPTY}}class x extends b{constructor(e){super(e,"br")}[n.$text](){return"\\n"}[n.$pushGlyphs](e){e.addString("\\n")}[n.$toHTML](e){return s.HTMLResult.success({name:"br"})}}class S extends b{constructor(e){super(e,"html")}[n.$toHTML](e){const t=[];if(this[n.$extra]={children:t},this[n.$childrenToHTML]({}),0===t.length)return s.HTMLResult.success({name:"div",attributes:{class:["xfaRich"],style:{}},value:this[n.$content]||""});if(1===t.length){var r;const e=t[0];if(null!==(r=e.attributes)&&void 0!==r&&r.class.includes("xfaRich"))return s.HTMLResult.success(e)}return s.HTMLResult.success({name:"div",attributes:{class:["xfaRich"],style:{}},children:t})}}class A extends b{constructor(e){super(e,"i")}[n.$pushGlyphs](e){e.pushFont({posture:"italic"}),super[n.$pushGlyphs](e),e.popFont()}}class k extends b{constructor(e){super(e,"li")}}class C extends b{constructor(e){super(e,"ol")}}class O extends b{constructor(e){super(e,"p")}[n.$pushGlyphs](e){super[n.$pushGlyphs](e,!1),e.addString("\\n"),e.addPara(),e.popFont()}[n.$text](){return this[n.$getParent]()[n.$getChildren]().at(-1)===this?super[n.$text]():super[n.$text]()+"\\n"}}class F extends b{constructor(e){super(e,"span")}}class I extends b{constructor(e){super(e,"sub")}}class T extends b{constructor(e){super(e,"sup")}}class M extends b{constructor(e){super(e,"ul")}}class E{static[a.$buildXFAObject](e,t){if(E.hasOwnProperty(e))return E[e](t)}static a(e){return new y(e)}static b(e){return new w(e)}static body(e){return new v(e)}static br(e){return new x(e)}static html(e){return new S(e)}static i(e){return new A(e)}static li(e){return new k(e)}static ol(e){return new C(e)}static p(e){return new O(e)}static span(e){return new F(e)}static sub(e){return new I(e)}static sup(e){return new T(e)}static ul(e){return new M(e)}}t.XhtmlNamespace=E},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.UnknownNamespace=void 0;var n=r(234),a=r(240);class i{constructor(e){this.namespaceId=e}[n.$buildXFAObject](e,t){return new a.XmlObject(this.namespaceId,e,t)}}t.UnknownNamespace=i},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.DatasetReader=void 0,r(2);var n=r(144),a=r(149),i=r(217);function s(e){try{return(0,n.stringToUTF8String)(e)}catch(t){return(0,n.warn)('UTF-8 decoding failed: "'.concat(t,'".')),e}}class o extends i.SimpleXMLParser{constructor(e){super(e),this.node=null}onEndElement(e){const t=super.onEndElement(e);if(t&&"xfa:datasets"===e)throw this.node=t,new Error("Aborting DatasetXMLParser.")}}t.DatasetReader=class{constructor(e){if(e.datasets)this.node=new i.SimpleXMLParser({hasAttributes:!0}).parseFromString(e.datasets).documentElement;else{const t=new o({hasAttributes:!0});try{t.parseFromString(e["xdp:xdp"])}catch(e){}this.node=t.node}}getValue(e){if(!this.node||!e)return"";const t=this.node.searchNode((0,a.parseXFAPath)(e),0);if(!t)return"";const r=t.firstChild;return"value"===(null==r?void 0:r.nodeName)?t.children.map((e=>s(e.textContent))):s(t.textContent)}}},(e,t,r)=>{var n;Object.defineProperty(t,"__esModule",{value:!0}),t.XRef=void 0,r(116),r(126),r(128),r(131),r(133),r(135),r(137),r(84),r(93),r(94),r(97),r(99),r(101),r(105),r(108),r(115),r(139),r(2);var a=r(144),i=r(150),s=r(166),o=r(149),l=r(151),d=r(218);t.XRef=(n=new WeakMap,class{constructor(e,t){c(this,n,{writable:!0,value:null}),this.stream=e,this.pdfManager=t,this.entries=[],this._xrefStms=new Set,this._cacheMap=new Map,this._pendingRefs=new i.RefSet,this._newPersistentRefNum=null,this._newTemporaryRefNum=null}getNewPersistentRef(e){null===this._newPersistentRefNum&&(this._newPersistentRefNum=this.entries.length||1);const t=this._newPersistentRefNum++;return this._cacheMap.set(t,e),i.Ref.get(t,0)}getNewTemporaryRef(){return null===this._newTemporaryRefNum&&(this._newTemporaryRefNum=this.entries.length||1),i.Ref.get(this._newTemporaryRefNum++,0)}resetNewTemporaryRef(){this._newTemporaryRefNum=null}setStartXRef(e){this.startXRefQueue=[e]}parse(){let e,t,r,n=arguments.length>0&&void 0!==arguments[0]&&arguments[0];n?((0,a.warn)("Indexing all PDF objects"),e=this.indexObjects()):e=this.readXRef(),e.assignXref(this),this.trailer=e;try{t=e.get("Encrypt")}catch(e){if(e instanceof o.MissingDataException)throw e;(0,a.warn)('XRef.parse - Invalid "Encrypt" reference: "'.concat(e,'".'))}if(t instanceof i.Dict){const r=e.get("ID"),n=null!=r&&r.length?r[0]:"";t.suppressEncryption=!0,this.encrypt=new d.CipherTransformFactory(t,n,this.pdfManager.password)}try{r=e.get("Root")}catch(e){if(e instanceof o.MissingDataException)throw e;(0,a.warn)('XRef.parse - Invalid "Root" reference: "'.concat(e,'".'))}if(r instanceof i.Dict)try{if(r.get("Pages")instanceof i.Dict)return void(this.root=r)}catch(e){if(e instanceof o.MissingDataException)throw e;(0,a.warn)('XRef.parse - Invalid "Pages" reference: "'.concat(e,'".'))}if(!n)throw new o.XRefParseException;throw new a.InvalidPDFException("Invalid Root reference.")}processXRefTable(e){"tableState"in this||(this.tableState={entryNum:0,streamPos:e.lexer.stream.pos,parserBuf1:e.buf1,parserBuf2:e.buf2});const t=this.readXRefTable(e);if(!(0,i.isCmd)(t,"trailer"))throw new a.FormatError("Invalid XRef table: could not find trailer dictionary");let r=e.getObj();if(r instanceof i.Dict||!r.dict||(r=r.dict),!(r instanceof i.Dict))throw new a.FormatError("Invalid XRef table: could not parse trailer dictionary");return delete this.tableState,r}readXRefTable(e){const t=e.lexer.stream,r=this.tableState;let n;for(t.pos=r.streamPos,e.buf1=r.parserBuf1,e.buf2=r.parserBuf2;;){if(!("firstEntryNum"in r)||!("entryCount"in r)){if((0,i.isCmd)(n=e.getObj(),"trailer"))break;r.firstEntryNum=n,r.entryCount=e.getObj()}let s=r.firstEntryNum;const o=r.entryCount;if(!Number.isInteger(s)||!Number.isInteger(o))throw new a.FormatError("Invalid XRef table: wrong types in subsection header");for(let n=r.entryNum;n0;){const[o,c]=s;if(!Number.isInteger(o)||!Number.isInteger(c))throw new a.FormatError("Invalid XRef range fields: ".concat(o,", ").concat(c));if(!Number.isInteger(r)||!Number.isInteger(n)||!Number.isInteger(i))throw new a.FormatError("Invalid XRef entry fields length: ".concat(o,", ").concat(c));for(let s=t.entryNum;s=e.length);)r+=String.fromCharCode(n),n=e[t];return r}function t(e,t,r){const n=r.length,a=e.length;let i=0;for(;t=n)break;t++,i++}return i}const r=/\\b(endobj|\\d+\\s+\\d+\\s+obj|xref|trailer\\s*<<)\\b/g,n=/\\b(startxref|\\d+\\s+\\d+\\s+obj)\\b/g,c=/^(\\d+)\\s+(\\d+)\\s+obj\\b/,l=new Uint8Array([116,114,97,105,108,101,114]),h=new Uint8Array([115,116,97,114,116,120,114,101,102]),u=new Uint8Array([47,88,82,101,102]);this.entries.length=0,this._cacheMap.clear();const d=this.stream;d.pos=0;const f=d.getBytes(),g=(0,a.bytesToString)(f),p=f.length;let m=d.start;const b=[],y=[];for(;m=p)break;i=f[m]}while(10!==i&&13!==i);continue}const w=e(f,m);let v;if(w.startsWith("xref")&&(4===w.length||/\\s/.test(w[4])))m+=t(f,m,l),b.push(m),m+=t(f,m,h);else if(v=c.exec(w)){const e=0|v[1],n=0|v[2],i=m+w.length;let c,l=!1;if(this.entries[e]){if(this.entries[e].gen===n)try{new s.Parser({lexer:new s.Lexer(d.makeSubStream(i))}).getObj(),l=!0}catch(r){r instanceof o.ParserEOFException?(0,a.warn)("indexObjects -- checking object (".concat(w,'): "').concat(r,'".')):l=!0}}else l=!0;l&&(this.entries[e]={offset:m-d.start,gen:n,uncompressed:!0}),r.lastIndex=i;const h=r.exec(g);h?(c=r.lastIndex+1-m,"endobj"!==h[1]&&((0,a.warn)('indexObjects: Found "'.concat(h[1],'" inside of another "obj", caused by missing "endobj" -- trying to recover.')),c-=h[1].length+1)):c=p-m;const b=f.subarray(m,m+c),x=t(b,0,u);x0&&void 0!==arguments[0]&&arguments[0];const t=this.stream,r=new Set;for(;this.startXRefQueue.length;){try{const e=this.startXRefQueue[0];if(r.has(e)){(0,a.warn)("readXRef - skipping XRef table since it was already parsed."),this.startXRefQueue.shift();continue}r.add(e),t.pos=e+t.start;const o=new s.Parser({lexer:new s.Lexer(t),xref:this,allowStreams:!0});let d,f=o.getObj();if((0,i.isCmd)(f,"xref")){var c;d=this.processXRefTable(o),this.topDict||(this.topDict=d),f=d.get("XRefStm"),Number.isInteger(f)&&!this._xrefStms.has(f)&&(this._xrefStms.add(f),this.startXRefQueue.push(f),null!==(c=h(this,n))&&void 0!==c||u(this,n,f))}else{if(!Number.isInteger(f))throw new a.FormatError("Invalid XRef stream header");if(!(Number.isInteger(o.getObj())&&(0,i.isCmd)(o.getObj(),"obj")&&(f=o.getObj())instanceof l.BaseStream))throw new a.FormatError("Invalid XRef stream");if(d=this.processXRefStream(f),this.topDict||(this.topDict=d),!d)throw new a.FormatError("Failed to read XRef stream")}f=d.get("Prev"),Number.isInteger(f)?this.startXRefQueue.push(f):f instanceof i.Ref&&this.startXRefQueue.push(f.num)}catch(e){if(e instanceof o.MissingDataException)throw e;(0,a.info)("(while reading XRef): "+e)}this.startXRefQueue.shift()}if(this.topDict)return this.topDict;if(!e)throw new o.XRefParseException}get lastXRefStreamPos(){var e;return null!==(e=h(this,n))&&void 0!==e?e:this._xrefStms.size>0?Math.max(...this._xrefStms):null}getEntry(e){const t=this.entries[e];return t&&!t.free&&t.offset?t:null}fetchIfRef(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return e instanceof i.Ref?this.fetch(e,t):e}fetch(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!(e instanceof i.Ref))throw new Error("ref object is not a reference");const r=e.num,n=this._cacheMap.get(r);if(void 0!==n)return n instanceof i.Dict&&!n.objId&&(n.objId=e.toString()),n;let s=this.getEntry(r);if(null===s)return this._cacheMap.set(r,s),s;if(this._pendingRefs.has(e))return this._pendingRefs.remove(e),(0,a.warn)("Ignoring circular reference: ".concat(e,".")),i.CIRCULAR_REF;this._pendingRefs.put(e);try{s=s.uncompressed?this.fetchUncompressed(e,s,t):this.fetchCompressed(e,s,t),this._pendingRefs.remove(e)}catch(t){throw this._pendingRefs.remove(e),t}return s instanceof i.Dict?s.objId=e.toString():s instanceof l.BaseStream&&(s.dict.objId=e.toString()),s}fetchUncompressed(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];const n=e.gen;let c=e.num;if(t.gen!==n){const s="Inconsistent generation in XRef: ".concat(e);if(this._generationFallback&&t.gen{var n,a,i;Object.defineProperty(t,"__esModule",{value:!0}),t.MessageHandler=void 0,r(2);var c=r(144);function l(e){switch(e instanceof Error||"object"==typeof e&&null!==e||(0,c.unreachable)('wrapReason: Expected "reason" to be a (possibly cloned) Error.'),e.name){case"AbortException":return new c.AbortException(e.message);case"MissingPDFException":return new c.MissingPDFException(e.message);case"PasswordException":return new c.PasswordException(e.message,e.code);case"UnexpectedResponseException":return new c.UnexpectedResponseException(e.message,e.status);case"UnknownErrorException":return new c.UnknownErrorException(e.message,e.details);default:return new c.UnknownErrorException(e.message,e.toString())}}function h(e){const t=e.streamId,r=this.sourceName,n=e.sourceName,a=this.comObj,i=this,s=this.actionHandler[e.action],o={enqueue(e){let i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,s=arguments.length>2?arguments[2]:void 0;if(this.isCancelled)return;const o=this.desiredSize;this.desiredSize-=i,o>0&&this.desiredSize<=0&&(this.sinkCapability=new c.PromiseCapability,this.ready=this.sinkCapability.promise),a.postMessage({sourceName:r,targetName:n,stream:4,streamId:t,chunk:e},s)},close(){this.isCancelled||(this.isCancelled=!0,a.postMessage({sourceName:r,targetName:n,stream:3,streamId:t}),delete i.streamSinks[t])},error(e){(0,c.assert)(e instanceof Error,"error must have a valid reason"),this.isCancelled||(this.isCancelled=!0,a.postMessage({sourceName:r,targetName:n,stream:5,streamId:t,reason:l(e)}))},sinkCapability:new c.PromiseCapability,onPull:null,onCancel:null,isCancelled:!1,desiredSize:e.desiredSize,ready:null};o.sinkCapability.resolve(),o.ready=o.sinkCapability.promise,this.streamSinks[t]=o,new Promise((function(t){t(s(e.data,o))})).then((function(){a.postMessage({sourceName:r,targetName:n,stream:8,streamId:t,success:!0})}),(function(e){a.postMessage({sourceName:r,targetName:n,stream:8,streamId:t,reason:l(e)})}))}function u(e){const t=e.streamId,r=this.sourceName,n=e.sourceName,a=this.comObj,s=this.streamControllers[t],h=this.streamSinks[t];switch(e.stream){case 8:e.success?s.startCall.resolve():s.startCall.reject(l(e.reason));break;case 7:e.success?s.pullCall.resolve():s.pullCall.reject(l(e.reason));break;case 6:if(!h){a.postMessage({sourceName:r,targetName:n,stream:7,streamId:t,success:!0});break}h.desiredSize<=0&&e.desiredSize>0&&h.sinkCapability.resolve(),h.desiredSize=e.desiredSize,new Promise((function(e){var t;e(null===(t=h.onPull)||void 0===t?void 0:t.call(h))})).then((function(){a.postMessage({sourceName:r,targetName:n,stream:7,streamId:t,success:!0})}),(function(e){a.postMessage({sourceName:r,targetName:n,stream:7,streamId:t,reason:l(e)})}));break;case 4:if((0,c.assert)(s,"enqueue should have stream controller"),s.isClosed)break;s.controller.enqueue(e.chunk);break;case 3:if((0,c.assert)(s,"close should have stream controller"),s.isClosed)break;s.isClosed=!0,s.controller.close(),o(this,i,d).call(this,s,t);break;case 5:(0,c.assert)(s,"error should have stream controller"),s.controller.error(l(e.reason)),o(this,i,d).call(this,s,t);break;case 2:e.success?s.cancelCall.resolve():s.cancelCall.reject(l(e.reason)),o(this,i,d).call(this,s,t);break;case 1:if(!h)break;new Promise((function(t){var r;t(null===(r=h.onCancel)||void 0===r?void 0:r.call(h,l(e.reason)))})).then((function(){a.postMessage({sourceName:r,targetName:n,stream:2,streamId:t,success:!0})}),(function(e){a.postMessage({sourceName:r,targetName:n,stream:2,streamId:t,reason:l(e)})})),h.sinkCapability.reject(l(e.reason)),h.isCancelled=!0,delete this.streamSinks[t];break;default:throw new Error("Unexpected stream case")}}async function d(e,t){var r,n,a;await Promise.allSettled([null===(r=e.startCall)||void 0===r?void 0:r.promise,null===(n=e.pullCall)||void 0===n?void 0:n.promise,null===(a=e.cancelCall)||void 0===a?void 0:a.promise]),delete this.streamControllers[t]}t.MessageHandler=(n=new WeakSet,a=new WeakSet,i=new WeakSet,class{constructor(e,t,r){s(this,i),s(this,a),s(this,n),this.sourceName=e,this.targetName=t,this.comObj=r,this.callbackId=1,this.streamId=1,this.streamSinks=Object.create(null),this.streamControllers=Object.create(null),this.callbackCapabilities=Object.create(null),this.actionHandler=Object.create(null),this._onComObjOnMessage=e=>{const t=e.data;if(t.targetName!==this.sourceName)return;if(t.stream)return void o(this,a,u).call(this,t);if(t.callback){const e=t.callbackId,r=this.callbackCapabilities[e];if(!r)throw new Error("Cannot resolve callback ".concat(e));if(delete this.callbackCapabilities[e],1===t.callback)r.resolve(t.data);else{if(2!==t.callback)throw new Error("Unexpected callback case");r.reject(l(t.reason))}return}const i=this.actionHandler[t.action];if(!i)throw new Error("Unknown action from worker: ".concat(t.action));if(t.callbackId){const e=this.sourceName,n=t.sourceName;new Promise((function(e){e(i(t.data))})).then((function(a){r.postMessage({sourceName:e,targetName:n,callback:1,callbackId:t.callbackId,data:a})}),(function(a){r.postMessage({sourceName:e,targetName:n,callback:2,callbackId:t.callbackId,reason:l(a)})}))}else t.streamId?o(this,n,h).call(this,t):i(t.data)},r.addEventListener("message",this._onComObjOnMessage)}on(e,t){const r=this.actionHandler;if(r[e])throw new Error('There is already an actionName called "'.concat(e,'"'));r[e]=t}send(e,t,r){this.comObj.postMessage({sourceName:this.sourceName,targetName:this.targetName,action:e,data:t},r)}sendWithPromise(e,t,r){const n=this.callbackId++,a=new c.PromiseCapability;this.callbackCapabilities[n]=a;try{this.comObj.postMessage({sourceName:this.sourceName,targetName:this.targetName,action:e,callbackId:n,data:t},r)}catch(e){a.reject(e)}return a.promise}sendWithStream(e,t,r,n){const a=this.streamId++,i=this.sourceName,s=this.targetName,o=this.comObj;return new ReadableStream({start:r=>{const l=new c.PromiseCapability;return this.streamControllers[a]={controller:r,startCall:l,pullCall:null,cancelCall:null,isClosed:!1},o.postMessage({sourceName:i,targetName:s,action:e,streamId:a,data:t,desiredSize:r.desiredSize},n),l.promise},pull:e=>{const t=new c.PromiseCapability;return this.streamControllers[a].pullCall=t,o.postMessage({sourceName:i,targetName:s,stream:6,streamId:a,desiredSize:e.desiredSize}),t.promise},cancel:e=>{(0,c.assert)(e instanceof Error,"cancel must have a valid reason");const t=new c.PromiseCapability;return this.streamControllers[a].cancelCall=t,this.streamControllers[a].isClosed=!0,o.postMessage({sourceName:i,targetName:s,stream:1,streamId:a,reason:l(e)}),t.promise}},r)}destroy(){this.comObj.removeEventListener("message",this._onComObjOnMessage)}})},(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.PDFWorkerStream=void 0,r(139);var n=r(144);t.PDFWorkerStream=class{constructor(e){this._msgHandler=e,this._contentLength=null,this._fullRequestReader=null,this._rangeRequestReaders=[]}getFullReader(){return(0,n.assert)(!this._fullRequestReader,"PDFWorkerStream.getFullReader can only be called once."),this._fullRequestReader=new a(this._msgHandler),this._fullRequestReader}getRangeReader(e,t){const r=new i(e,t,this._msgHandler);return this._rangeRequestReaders.push(r),r}cancelAllRequests(e){this._fullRequestReader&&this._fullRequestReader.cancel(e);for(const t of this._rangeRequestReaders.slice(0))t.cancel(e)}};class a{constructor(e){this._msgHandler=e,this.onProgress=null,this._contentLength=null,this._isRangeSupported=!1,this._isStreamingSupported=!1;const t=this._msgHandler.sendWithStream("GetReader");this._reader=t.getReader(),this._headersReady=this._msgHandler.sendWithPromise("ReaderHeadersReady").then((e=>{this._isStreamingSupported=e.isStreamingSupported,this._isRangeSupported=e.isRangeSupported,this._contentLength=e.contentLength}))}get headersReady(){return this._headersReady}get contentLength(){return this._contentLength}get isStreamingSupported(){return this._isStreamingSupported}get isRangeSupported(){return this._isRangeSupported}async read(){const{value:e,done:t}=await this._reader.read();return t?{value:void 0,done:!0}:{value:e.buffer,done:!1}}cancel(e){this._reader.cancel(e)}}class i{constructor(e,t,r){this._msgHandler=r,this.onProgress=null;const n=this._msgHandler.sendWithStream("GetRangeReader",{begin:e,end:t});this._reader=n.getReader()}get isStreamingSupported(){return!1}async read(){const{value:e,done:t}=await this._reader.read();return t?{value:void 0,done:!0}:{value:e.buffer,done:!1}}cancel(e){this._reader.cancel(e)}}}],t={};function n(r){var a=t[r];if(void 0!==a)return a.exports;var i=t[r]={exports:{}};return e[r].call(i.exports,i,i.exports,n),i.exports}n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var a={};return(()=>{var e=a;Object.defineProperty(e,"__esModule",{value:!0}),Object.defineProperty(e,"WorkerMessageHandler",{enumerable:!0,get:function(){return t.WorkerMessageHandler}});var t=n(1)})(),a})(),"object"==typeof exports?e.exports=a():"function"==typeof define&&r.amdO?define("pdfjs-dist/build/pdf.worker",[],a):"object"==typeof exports?exports["pdfjs-dist/build/pdf.worker"]=a():n["pdfjs-dist/build/pdf.worker"]=n.pdfjsWorker=a()},9662:(e,t,r)=>{var n=r(614),a=r(6330),i=TypeError;e.exports=function(e){if(n(e))return e;throw i(a(e)+" is not a function")}},9483:(e,t,r)=>{var n=r(4411),a=r(6330),i=TypeError;e.exports=function(e){if(n(e))return e;throw i(a(e)+" is not a constructor")}},6077:(e,t,r)=>{var n=r(614),a=String,i=TypeError;e.exports=function(e){if("object"==typeof e||n(e))return e;throw i("Can't set "+a(e)+" as a prototype")}},1223:(e,t,r)=>{var n=r(5112),a=r(30),i=r(3070).f,s=n("unscopables"),o=Array.prototype;null==o[s]&&i(o,s,{configurable:!0,value:a(null)}),e.exports=function(e){o[s][e]=!0}},1530:(e,t,r)=>{var n=r(8710).charAt;e.exports=function(e,t,r){return t+(r?n(e,t).length:1)}},5787:(e,t,r)=>{var n=r(7976),a=TypeError;e.exports=function(e,t){if(n(t,e))return e;throw a("Incorrect invocation")}},9670:(e,t,r)=>{var n=r(111),a=String,i=TypeError;e.exports=function(e){if(n(e))return e;throw i(a(e)+" is not an object")}},3013:e=>{e.exports="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView},7556:(e,t,r)=>{var n=r(7293);e.exports=n((function(){if("function"==typeof ArrayBuffer){var e=new ArrayBuffer(8);Object.isExtensible(e)&&Object.defineProperty(e,"a",{value:8})}}))},260:(e,t,r)=>{var n,a,i,s=r(3013),o=r(9781),c=r(7854),l=r(614),h=r(111),u=r(2597),d=r(648),f=r(6330),g=r(8880),p=r(8052),m=r(7045),b=r(7976),y=r(9518),w=r(7674),v=r(5112),x=r(9711),S=r(9909),A=S.enforce,k=S.get,C=c.Int8Array,O=C&&C.prototype,F=c.Uint8ClampedArray,I=F&&F.prototype,T=C&&y(C),M=O&&y(O),E=Object.prototype,P=c.TypeError,R=v("toStringTag"),N=x("TYPED_ARRAY_TAG"),D="TypedArrayConstructor",B=s&&!!w&&"Opera"!==d(c.opera),L=!1,_={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},j={BigInt64Array:8,BigUint64Array:8},U=function(e){var t=y(e);if(h(t)){var r=k(t);return r&&u(r,D)?r[D]:U(t)}},$=function(e){if(!h(e))return!1;var t=d(e);return u(_,t)||u(j,t)};for(n in _)(i=(a=c[n])&&a.prototype)?A(i)[D]=a:B=!1;for(n in j)(i=(a=c[n])&&a.prototype)&&(A(i)[D]=a);if((!B||!l(T)||T===Function.prototype)&&(T=function(){throw P("Incorrect invocation")},B))for(n in _)c[n]&&w(c[n],T);if((!B||!M||M===E)&&(M=T.prototype,B))for(n in _)c[n]&&w(c[n].prototype,M);if(B&&y(I)!==M&&w(I,M),o&&!u(M,R))for(n in L=!0,m(M,R,{configurable:!0,get:function(){return h(this)?this[N]:void 0}}),_)c[n]&&g(c[n],N,n);e.exports={NATIVE_ARRAY_BUFFER_VIEWS:B,TYPED_ARRAY_TAG:L&&N,aTypedArray:function(e){if($(e))return e;throw P("Target is not a typed array")},aTypedArrayConstructor:function(e){if(l(e)&&(!w||b(T,e)))return e;throw P(f(e)+" is not a typed array constructor")},exportTypedArrayMethod:function(e,t,r,n){if(o){if(r)for(var a in _){var i=c[a];if(i&&u(i.prototype,e))try{delete i.prototype[e]}catch(r){try{i.prototype[e]=t}catch(e){}}}M[e]&&!r||p(M,e,r?t:B&&O[e]||t,n)}},exportTypedArrayStaticMethod:function(e,t,r){var n,a;if(o){if(w){if(r)for(n in _)if((a=c[n])&&u(a,e))try{delete a[e]}catch(e){}if(T[e]&&!r)return;try{return p(T,e,r?t:B&&T[e]||t)}catch(e){}}for(n in _)!(a=c[n])||a[e]&&!r||p(a,e,t)}},getTypedArrayConstructor:U,isView:function(e){if(!h(e))return!1;var t=d(e);return"DataView"===t||u(_,t)||u(j,t)},isTypedArray:$,TypedArray:T,TypedArrayPrototype:M}},3331:(e,t,r)=>{var n=r(7854),a=r(1702),i=r(9781),s=r(3013),o=r(6530),c=r(8880),l=r(7045),h=r(9190),u=r(7293),d=r(5787),f=r(9303),g=r(7466),p=r(7067),m=r(1179),b=r(9518),y=r(7674),w=r(8006).f,v=r(1285),x=r(1589),S=r(8003),A=r(9909),k=o.PROPER,C=o.CONFIGURABLE,O="ArrayBuffer",F="DataView",I="prototype",T="Wrong index",M=A.getterFor(O),E=A.getterFor(F),P=A.set,R=n[O],N=R,D=N&&N[I],B=n[F],L=B&&B[I],_=Object.prototype,j=n.Array,U=n.RangeError,$=a(v),X=a([].reverse),H=m.pack,q=m.unpack,z=function(e){return[255&e]},G=function(e){return[255&e,e>>8&255]},W=function(e){return[255&e,e>>8&255,e>>16&255,e>>24&255]},V=function(e){return e[3]<<24|e[2]<<16|e[1]<<8|e[0]},K=function(e){return H(e,23,4)},Y=function(e){return H(e,52,8)},J=function(e,t,r){l(e[I],t,{configurable:!0,get:function(){return r(this)[t]}})},Z=function(e,t,r,n){var a=E(e),i=p(r),s=!!n;if(i+t>a.byteLength)throw U(T);var o=a.bytes,c=i+a.byteOffset,l=x(o,c,c+t);return s?l:X(l)},Q=function(e,t,r,n,a,i){var s=E(e),o=p(r),c=n(+a),l=!!i;if(o+t>s.byteLength)throw U(T);for(var h=s.bytes,u=o+s.byteOffset,d=0;dne;)(te=re[ne++])in N||c(N,te,R[te]);D.constructor=N}y&&b(L)!==_&&y(L,_);var ae=new B(new N(2)),ie=a(L.setInt8);ae.setInt8(0,2147483648),ae.setInt8(1,2147483649),!ae.getInt8(0)&&ae.getInt8(1)||h(L,{setInt8:function(e,t){ie(this,e,t<<24>>24)},setUint8:function(e,t){ie(this,e,t<<24>>24)}},{unsafe:!0})}else D=(N=function(e){d(this,D);var t=p(e);P(this,{type:O,bytes:$(j(t),0),byteLength:t}),i||(this.byteLength=t,this.detached=!1)})[I],L=(B=function(e,t,r){d(this,L),d(e,D);var n=M(e),a=n.byteLength,s=f(t);if(s<0||s>a)throw U("Wrong offset");if(s+(r=void 0===r?a-s:g(r))>a)throw U("Wrong length");P(this,{type:F,buffer:e,byteLength:r,byteOffset:s,bytes:n.bytes}),i||(this.buffer=e,this.byteLength=r,this.byteOffset=s)})[I],i&&(J(N,"byteLength",M),J(B,"buffer",E),J(B,"byteLength",E),J(B,"byteOffset",E)),h(L,{getInt8:function(e){return Z(this,1,e)[0]<<24>>24},getUint8:function(e){return Z(this,1,e)[0]},getInt16:function(e){var t=Z(this,2,e,arguments.length>1&&arguments[1]);return(t[1]<<8|t[0])<<16>>16},getUint16:function(e){var t=Z(this,2,e,arguments.length>1&&arguments[1]);return t[1]<<8|t[0]},getInt32:function(e){return V(Z(this,4,e,arguments.length>1&&arguments[1]))},getUint32:function(e){return V(Z(this,4,e,arguments.length>1&&arguments[1]))>>>0},getFloat32:function(e){return q(Z(this,4,e,arguments.length>1&&arguments[1]),23)},getFloat64:function(e){return q(Z(this,8,e,arguments.length>1&&arguments[1]),52)},setInt8:function(e,t){Q(this,1,e,z,t)},setUint8:function(e,t){Q(this,1,e,z,t)},setInt16:function(e,t){Q(this,2,e,G,t,arguments.length>2&&arguments[2])},setUint16:function(e,t){Q(this,2,e,G,t,arguments.length>2&&arguments[2])},setInt32:function(e,t){Q(this,4,e,W,t,arguments.length>2&&arguments[2])},setUint32:function(e,t){Q(this,4,e,W,t,arguments.length>2&&arguments[2])},setFloat32:function(e,t){Q(this,4,e,K,t,arguments.length>2&&arguments[2])},setFloat64:function(e,t){Q(this,8,e,Y,t,arguments.length>2&&arguments[2])}});S(N,O),S(B,F),e.exports={ArrayBuffer:N,DataView:B}},1285:(e,t,r)=>{var n=r(7908),a=r(1400),i=r(6244);e.exports=function(e){for(var t=n(this),r=i(t),s=arguments.length,o=a(s>1?arguments[1]:void 0,r),c=s>2?arguments[2]:void 0,l=void 0===c?r:a(c,r);l>o;)t[o++]=e;return t}},7745:(e,t,r)=>{var n=r(6244);e.exports=function(e,t){for(var r=0,a=n(t),i=new e(a);a>r;)i[r]=t[r++];return i}},8457:(e,t,r)=>{var n=r(9974),a=r(6916),i=r(7908),s=r(3411),o=r(7659),c=r(4411),l=r(6244),h=r(6135),u=r(4121),d=r(1246),f=Array;e.exports=function(e){var t=i(e),r=c(this),g=arguments.length,p=g>1?arguments[1]:void 0,m=void 0!==p;m&&(p=n(p,g>2?arguments[2]:void 0));var b,y,w,v,x,S,A=d(t),k=0;if(!A||this===f&&o(A))for(b=l(t),y=r?new this(b):f(b);b>k;k++)S=m?p(t[k],k):t[k],h(y,k,S);else for(x=(v=u(t,A)).next,y=r?new this:[];!(w=a(x,v)).done;k++)S=m?s(v,p,[w.value,k],!0):w.value,h(y,k,S);return y.length=k,y}},1318:(e,t,r)=>{var n=r(5656),a=r(1400),i=r(6244),s=function(e){return function(t,r,s){var o,c=n(t),l=i(c),h=a(s,l);if(e&&r!=r){for(;l>h;)if((o=c[h++])!=o)return!0}else for(;l>h;h++)if((e||h in c)&&c[h]===r)return e||h||0;return!e&&-1}};e.exports={includes:s(!0),indexOf:s(!1)}},9671:(e,t,r)=>{var n=r(9974),a=r(8361),i=r(7908),s=r(6244),o=function(e){var t=1==e;return function(r,o,c){for(var l,h=i(r),u=a(h),d=n(o,c),f=s(u);f-- >0;)if(d(l=u[f],f,h))switch(e){case 0:return l;case 1:return f}return t?-1:void 0}};e.exports={findLast:o(0),findLastIndex:o(1)}},2092:(e,t,r)=>{var n=r(9974),a=r(1702),i=r(8361),s=r(7908),o=r(6244),c=r(5417),l=a([].push),h=function(e){var t=1==e,r=2==e,a=3==e,h=4==e,u=6==e,d=7==e,f=5==e||u;return function(g,p,m,b){for(var y,w,v=s(g),x=i(v),S=n(p,m),A=o(x),k=0,C=b||c,O=t?C(g,A):r||d?C(g,0):void 0;A>k;k++)if((f||k in x)&&(w=S(y=x[k],k,v),e))if(t)O[k]=w;else if(w)switch(e){case 3:return!0;case 5:return y;case 6:return k;case 2:l(O,y)}else switch(e){case 4:return!1;case 7:l(O,y)}return u?-1:a||h?h:O}};e.exports={forEach:h(0),map:h(1),filter:h(2),some:h(3),every:h(4),find:h(5),findIndex:h(6),filterReject:h(7)}},9341:(e,t,r)=>{var n=r(7293);e.exports=function(e,t){var r=[][e];return!!r&&n((function(){r.call(null,t||function(){return 1},1)}))}},3671:(e,t,r)=>{var n=r(9662),a=r(7908),i=r(8361),s=r(6244),o=TypeError,c=function(e){return function(t,r,c,l){n(r);var h=a(t),u=i(h),d=s(h),f=e?d-1:0,g=e?-1:1;if(c<2)for(;;){if(f in u){l=u[f],f+=g;break}if(f+=g,e?f<0:d<=f)throw o("Reduce of empty array with no initial value")}for(;e?f>=0:d>f;f+=g)f in u&&(l=r(l,u[f],f,h));return l}};e.exports={left:c(!1),right:c(!0)}},3658:(e,t,r)=>{var n=r(9781),a=r(3157),i=TypeError,s=Object.getOwnPropertyDescriptor,o=n&&!function(){if(void 0!==this)return!0;try{Object.defineProperty([],"length",{writable:!1}).length=1}catch(e){return e instanceof TypeError}}();e.exports=o?function(e,t){if(a(e)&&!s(e,"length").writable)throw i("Cannot set read only .length");return e.length=t}:function(e,t){return e.length=t}},1589:(e,t,r)=>{var n=r(1400),a=r(6244),i=r(6135),s=Array,o=Math.max;e.exports=function(e,t,r){for(var c=a(e),l=n(t,c),h=n(void 0===r?c:r,c),u=s(o(h-l,0)),d=0;l{var n=r(1702);e.exports=n([].slice)},4362:(e,t,r)=>{var n=r(1589),a=Math.floor,i=function(e,t){var r=e.length,c=a(r/2);return r<8?s(e,t):o(e,i(n(e,0,c),t),i(n(e,c),t),t)},s=function(e,t){for(var r,n,a=e.length,i=1;i0;)e[n]=e[--n];n!==i++&&(e[n]=r)}return e},o=function(e,t,r,n){for(var a=t.length,i=r.length,s=0,o=0;s{var n=r(3157),a=r(4411),i=r(111),s=r(5112)("species"),o=Array;e.exports=function(e){var t;return n(e)&&(t=e.constructor,(a(t)&&(t===o||n(t.prototype))||i(t)&&null===(t=t[s]))&&(t=void 0)),void 0===t?o:t}},5417:(e,t,r)=>{var n=r(7475);e.exports=function(e,t){return new(n(e))(0===t?0:t)}},1843:(e,t,r)=>{var n=r(6244);e.exports=function(e,t){for(var r=n(e),a=new t(r),i=0;i{var n=r(6244),a=r(9303),i=RangeError;e.exports=function(e,t,r,s){var o=n(e),c=a(r),l=c<0?o+c:c;if(l>=o||l<0)throw i("Incorrect index");for(var h=new t(o),u=0;u{var n=r(9670),a=r(9212);e.exports=function(e,t,r,i){try{return i?t(n(r)[0],r[1]):t(r)}catch(t){a(e,"throw",t)}}},7072:(e,t,r)=>{var n=r(5112)("iterator"),a=!1;try{var i=0,s={next:function(){return{done:!!i++}},return:function(){a=!0}};s[n]=function(){return this},Array.from(s,(function(){throw 2}))}catch(e){}e.exports=function(e,t){if(!t&&!a)return!1;var r=!1;try{var i={};i[n]=function(){return{next:function(){return{done:r=!0}}}},e(i)}catch(e){}return r}},4326:(e,t,r)=>{var n=r(1702),a=n({}.toString),i=n("".slice);e.exports=function(e){return i(a(e),8,-1)}},648:(e,t,r)=>{var n=r(1694),a=r(614),i=r(4326),s=r(5112)("toStringTag"),o=Object,c="Arguments"==i(function(){return arguments}());e.exports=n?i:function(e){var t,r,n;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(r=function(e,t){try{return e[t]}catch(e){}}(t=o(e),s))?r:c?i(t):"Object"==(n=i(t))&&a(t.callee)?"Arguments":n}},9320:(e,t,r)=>{var n=r(1702),a=r(9190),i=r(2423).getWeakData,s=r(5787),o=r(9670),c=r(8554),l=r(111),h=r(408),u=r(2092),d=r(2597),f=r(9909),g=f.set,p=f.getterFor,m=u.find,b=u.findIndex,y=n([].splice),w=0,v=function(e){return e.frozen||(e.frozen=new x)},x=function(){this.entries=[]},S=function(e,t){return m(e.entries,(function(e){return e[0]===t}))};x.prototype={get:function(e){var t=S(this,e);if(t)return t[1]},has:function(e){return!!S(this,e)},set:function(e,t){var r=S(this,e);r?r[1]=t:this.entries.push([e,t])},delete:function(e){var t=b(this.entries,(function(t){return t[0]===e}));return~t&&y(this.entries,t,1),!!~t}},e.exports={getConstructor:function(e,t,r,n){var u=e((function(e,a){s(e,f),g(e,{type:t,id:w++,frozen:void 0}),c(a)||h(a,e[n],{that:e,AS_ENTRIES:r})})),f=u.prototype,m=p(t),b=function(e,t,r){var n=m(e),a=i(o(t),!0);return!0===a?v(n).set(t,r):a[n.id]=r,e};return a(f,{delete:function(e){var t=m(this);if(!l(e))return!1;var r=i(e);return!0===r?v(t).delete(e):r&&d(r,t.id)&&delete r[t.id]},has:function(e){var t=m(this);if(!l(e))return!1;var r=i(e);return!0===r?v(t).has(e):r&&d(r,t.id)}}),a(f,r?{get:function(e){var t=m(this);if(l(e)){var r=i(e);return!0===r?v(t).get(e):r?r[t.id]:void 0}},set:function(e,t){return b(this,e,t)}}:{add:function(e){return b(this,e,!0)}}),u}}},7710:(e,t,r)=>{var n=r(2109),a=r(7854),i=r(1702),s=r(4705),o=r(8052),c=r(2423),l=r(408),h=r(5787),u=r(614),d=r(8554),f=r(111),g=r(7293),p=r(7072),m=r(8003),b=r(9587);e.exports=function(e,t,r){var y=-1!==e.indexOf("Map"),w=-1!==e.indexOf("Weak"),v=y?"set":"add",x=a[e],S=x&&x.prototype,A=x,k={},C=function(e){var t=i(S[e]);o(S,e,"add"==e?function(e){return t(this,0===e?0:e),this}:"delete"==e?function(e){return!(w&&!f(e))&&t(this,0===e?0:e)}:"get"==e?function(e){return w&&!f(e)?void 0:t(this,0===e?0:e)}:"has"==e?function(e){return!(w&&!f(e))&&t(this,0===e?0:e)}:function(e,r){return t(this,0===e?0:e,r),this})};if(s(e,!u(x)||!(w||S.forEach&&!g((function(){(new x).entries().next()})))))A=r.getConstructor(t,e,y,v),c.enable();else if(s(e,!0)){var O=new A,F=O[v](w?{}:-0,1)!=O,I=g((function(){O.has(1)})),T=p((function(e){new x(e)})),M=!w&&g((function(){for(var e=new x,t=5;t--;)e[v](t,t);return!e.has(-0)}));T||((A=t((function(e,t){h(e,S);var r=b(new x,e,A);return d(t)||l(t,r[v],{that:r,AS_ENTRIES:y}),r}))).prototype=S,S.constructor=A),(I||M)&&(C("delete"),C("has"),y&&C("get")),(M||F)&&C(v),w&&S.clear&&delete S.clear}return k[e]=A,n({global:!0,constructor:!0,forced:A!=x},k),m(A,e),w||r.setStrong(A,e,y),A}},9920:(e,t,r)=>{var n=r(2597),a=r(3887),i=r(1236),s=r(3070);e.exports=function(e,t,r){for(var o=a(t),c=s.f,l=i.f,h=0;h{var n=r(5112)("match");e.exports=function(e){var t=/./;try{"/./"[e](t)}catch(r){try{return t[n]=!1,"/./"[e](t)}catch(e){}}return!1}},8544:(e,t,r)=>{var n=r(7293);e.exports=!n((function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype}))},6178:e=>{e.exports=function(e,t){return{value:e,done:t}}},8880:(e,t,r)=>{var n=r(9781),a=r(3070),i=r(9114);e.exports=n?function(e,t,r){return a.f(e,t,i(1,r))}:function(e,t,r){return e[t]=r,e}},9114:e=>{e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},6135:(e,t,r)=>{var n=r(4948),a=r(3070),i=r(9114);e.exports=function(e,t,r){var s=n(t);s in e?a.f(e,s,i(0,r)):e[s]=r}},7045:(e,t,r)=>{var n=r(6339),a=r(3070);e.exports=function(e,t,r){return r.get&&n(r.get,t,{getter:!0}),r.set&&n(r.set,t,{setter:!0}),a.f(e,t,r)}},8052:(e,t,r)=>{var n=r(614),a=r(3070),i=r(6339),s=r(3072);e.exports=function(e,t,r,o){o||(o={});var c=o.enumerable,l=void 0!==o.name?o.name:t;if(n(r)&&i(r,l,o),o.global)c?e[t]=r:s(t,r);else{try{o.unsafe?e[t]&&(c=!0):delete e[t]}catch(e){}c?e[t]=r:a.f(e,t,{value:r,enumerable:!1,configurable:!o.nonConfigurable,writable:!o.nonWritable})}return e}},9190:(e,t,r)=>{var n=r(8052);e.exports=function(e,t,r){for(var a in t)n(e,a,t[a],r);return e}},3072:(e,t,r)=>{var n=r(7854),a=Object.defineProperty;e.exports=function(e,t){try{a(n,e,{value:t,configurable:!0,writable:!0})}catch(r){n[e]=t}return t}},5117:(e,t,r)=>{var n=r(6330),a=TypeError;e.exports=function(e,t){if(!delete e[t])throw a("Cannot delete property "+n(t)+" of "+n(e))}},9781:(e,t,r)=>{var n=r(7293);e.exports=!n((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},4154:e=>{var t="object"==typeof document&&document.all,r=void 0===t&&void 0!==t;e.exports={all:t,IS_HTMLDDA:r}},317:(e,t,r)=>{var n=r(7854),a=r(111),i=n.document,s=a(i)&&a(i.createElement);e.exports=function(e){return s?i.createElement(e):{}}},7207:e=>{var t=TypeError;e.exports=function(e){if(e>9007199254740991)throw t("Maximum allowed index exceeded");return e}},3678:e=>{e.exports={IndexSizeError:{s:"INDEX_SIZE_ERR",c:1,m:1},DOMStringSizeError:{s:"DOMSTRING_SIZE_ERR",c:2,m:0},HierarchyRequestError:{s:"HIERARCHY_REQUEST_ERR",c:3,m:1},WrongDocumentError:{s:"WRONG_DOCUMENT_ERR",c:4,m:1},InvalidCharacterError:{s:"INVALID_CHARACTER_ERR",c:5,m:1},NoDataAllowedError:{s:"NO_DATA_ALLOWED_ERR",c:6,m:0},NoModificationAllowedError:{s:"NO_MODIFICATION_ALLOWED_ERR",c:7,m:1},NotFoundError:{s:"NOT_FOUND_ERR",c:8,m:1},NotSupportedError:{s:"NOT_SUPPORTED_ERR",c:9,m:1},InUseAttributeError:{s:"INUSE_ATTRIBUTE_ERR",c:10,m:1},InvalidStateError:{s:"INVALID_STATE_ERR",c:11,m:1},SyntaxError:{s:"SYNTAX_ERR",c:12,m:1},InvalidModificationError:{s:"INVALID_MODIFICATION_ERR",c:13,m:1},NamespaceError:{s:"NAMESPACE_ERR",c:14,m:1},InvalidAccessError:{s:"INVALID_ACCESS_ERR",c:15,m:1},ValidationError:{s:"VALIDATION_ERR",c:16,m:0},TypeMismatchError:{s:"TYPE_MISMATCH_ERR",c:17,m:1},SecurityError:{s:"SECURITY_ERR",c:18,m:1},NetworkError:{s:"NETWORK_ERR",c:19,m:1},AbortError:{s:"ABORT_ERR",c:20,m:1},URLMismatchError:{s:"URL_MISMATCH_ERR",c:21,m:1},QuotaExceededError:{s:"QUOTA_EXCEEDED_ERR",c:22,m:1},TimeoutError:{s:"TIMEOUT_ERR",c:23,m:1},InvalidNodeTypeError:{s:"INVALID_NODE_TYPE_ERR",c:24,m:1},DataCloneError:{s:"DATA_CLONE_ERR",c:25,m:1}}},8324:e=>{e.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},8509:(e,t,r)=>{var n=r(317)("span").classList,a=n&&n.constructor&&n.constructor.prototype;e.exports=a===Object.prototype?void 0:a},8886:(e,t,r)=>{var n=r(8113).match(/firefox\\/(\\d+)/i);e.exports=!!n&&+n[1]},7871:(e,t,r)=>{var n=r(3823),a=r(5268);e.exports=!n&&!a&&"object"==typeof window&&"object"==typeof document},3823:e=>{e.exports="object"==typeof Deno&&Deno&&"object"==typeof Deno.version},256:(e,t,r)=>{var n=r(8113);e.exports=/MSIE|Trident/.test(n)},1528:(e,t,r)=>{var n=r(8113);e.exports=/ipad|iphone|ipod/i.test(n)&&"undefined"!=typeof Pebble},6833:(e,t,r)=>{var n=r(8113);e.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(n)},5268:(e,t,r)=>{var n=r(4326);e.exports="undefined"!=typeof process&&"process"==n(process)},1036:(e,t,r)=>{var n=r(8113);e.exports=/web0s(?!.*chrome)/i.test(n)},8113:e=>{e.exports="undefined"!=typeof navigator&&String(navigator.userAgent)||""},7392:(e,t,r)=>{var n,a,i=r(7854),s=r(8113),o=i.process,c=i.Deno,l=o&&o.versions||c&&c.version,h=l&&l.v8;h&&(a=(n=h.split("."))[0]>0&&n[0]<4?1:+(n[0]+n[1])),!a&&s&&(!(n=s.match(/Edge\\/(\\d+)/))||n[1]>=74)&&(n=s.match(/Chrome\\/(\\d+)/))&&(a=+n[1]),e.exports=a},8008:(e,t,r)=>{var n=r(8113).match(/AppleWebKit\\/(\\d+)\\./);e.exports=!!n&&+n[1]},748:e=>{e.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},1060:(e,t,r)=>{var n=r(1702),a=Error,i=n("".replace),s=String(a("zxcasd").stack),o=/\\n\\s*at [^:]*:[^\\n]*/,c=o.test(s);e.exports=function(e,t){if(c&&"string"==typeof e&&!a.prepareStackTrace)for(;t--;)e=i(e,o,"");return e}},5392:(e,t,r)=>{var n=r(8880),a=r(1060),i=r(2914),s=Error.captureStackTrace;e.exports=function(e,t,r,o){i&&(s?s(e,t):n(e,"stack",a(r,o)))}},2914:(e,t,r)=>{var n=r(7293),a=r(9114);e.exports=!n((function(){var e=Error("a");return!("stack"in e)||(Object.defineProperty(e,"stack",a(1,7)),7!==e.stack)}))},7762:(e,t,r)=>{var n=r(9781),a=r(7293),i=r(9670),s=r(30),o=r(6277),c=Error.prototype.toString,l=a((function(){if(n){var e=s(Object.defineProperty({},"name",{get:function(){return this===e}}));if("true"!==c.call(e))return!0}return"2: 1"!==c.call({message:1,name:2})||"Error"!==c.call({})}));e.exports=l?function(){var e=i(this),t=o(e.name,"Error"),r=o(e.message);return t?r?t+": "+r:t:r}:c},2109:(e,t,r)=>{var n=r(7854),a=r(1236).f,i=r(8880),s=r(8052),o=r(3072),c=r(9920),l=r(4705);e.exports=function(e,t){var r,h,u,d,f,g=e.target,p=e.global,m=e.stat;if(r=p?n:m?n[g]||o(g,{}):(n[g]||{}).prototype)for(h in t){if(d=t[h],u=e.dontCallGetSet?(f=a(r,h))&&f.value:r[h],!l(p?h:g+(m?".":"#")+h,e.forced)&&void 0!==u){if(typeof d==typeof u)continue;c(d,u)}(e.sham||u&&u.sham)&&i(d,"sham",!0),s(r,h,d,e)}}},7293:e=>{e.exports=function(e){try{return!!e()}catch(e){return!0}}},7007:(e,t,r)=>{r(4916);var n=r(1470),a=r(8052),i=r(2261),s=r(7293),o=r(5112),c=r(8880),l=o("species"),h=RegExp.prototype;e.exports=function(e,t,r,u){var d=o(e),f=!s((function(){var t={};return t[d]=function(){return 7},7!=""[e](t)})),g=f&&!s((function(){var t=!1,r=/a/;return"split"===e&&((r={}).constructor={},r.constructor[l]=function(){return r},r.flags="",r[d]=/./[d]),r.exec=function(){return t=!0,null},r[d](""),!t}));if(!f||!g||r){var p=n(/./[d]),m=t(d,""[e],(function(e,t,r,a,s){var o=n(e),c=t.exec;return c===i||c===h.exec?f&&!s?{done:!0,value:p(t,r,a)}:{done:!0,value:o(r,t,a)}:{done:!1}}));a(String.prototype,e,m[0]),a(h,d,m[1])}u&&c(h[d],"sham",!0)}},6790:(e,t,r)=>{var n=r(3157),a=r(6244),i=r(7207),s=r(9974),o=function(e,t,r,c,l,h,u,d){for(var f,g,p=l,m=0,b=!!u&&s(u,d);m0&&n(f)?(g=a(f),p=o(e,t,f,g,p,h-1)-1):(i(p+1),e[p]=f),p++),m++;return p};e.exports=o},6677:(e,t,r)=>{var n=r(7293);e.exports=!n((function(){return Object.isExtensible(Object.preventExtensions({}))}))},2104:(e,t,r)=>{var n=r(4374),a=Function.prototype,i=a.apply,s=a.call;e.exports="object"==typeof Reflect&&Reflect.apply||(n?s.bind(i):function(){return s.apply(i,arguments)})},9974:(e,t,r)=>{var n=r(1470),a=r(9662),i=r(4374),s=n(n.bind);e.exports=function(e,t){return a(e),void 0===t?e:i?s(e,t):function(){return e.apply(t,arguments)}}},4374:(e,t,r)=>{var n=r(7293);e.exports=!n((function(){var e=function(){}.bind();return"function"!=typeof e||e.hasOwnProperty("prototype")}))},6916:(e,t,r)=>{var n=r(4374),a=Function.prototype.call;e.exports=n?a.bind(a):function(){return a.apply(a,arguments)}},6530:(e,t,r)=>{var n=r(9781),a=r(2597),i=Function.prototype,s=n&&Object.getOwnPropertyDescriptor,o=a(i,"name"),c=o&&"something"===function(){}.name,l=o&&(!n||n&&s(i,"name").configurable);e.exports={EXISTS:o,PROPER:c,CONFIGURABLE:l}},5668:(e,t,r)=>{var n=r(1702),a=r(9662);e.exports=function(e,t,r){try{return n(a(Object.getOwnPropertyDescriptor(e,t)[r]))}catch(e){}}},1470:(e,t,r)=>{var n=r(4326),a=r(1702);e.exports=function(e){if("Function"===n(e))return a(e)}},1702:(e,t,r)=>{var n=r(4374),a=Function.prototype,i=a.call,s=n&&a.bind.bind(i,i);e.exports=n?s:function(e){return function(){return i.apply(e,arguments)}}},5005:(e,t,r)=>{var n=r(7854),a=r(614);e.exports=function(e,t){return arguments.length<2?(r=n[e],a(r)?r:void 0):n[e]&&n[e][t];var r}},1246:(e,t,r)=>{var n=r(648),a=r(8173),i=r(8554),s=r(7497),o=r(5112)("iterator");e.exports=function(e){if(!i(e))return a(e,o)||a(e,"@@iterator")||s[n(e)]}},4121:(e,t,r)=>{var n=r(6916),a=r(9662),i=r(9670),s=r(6330),o=r(1246),c=TypeError;e.exports=function(e,t){var r=arguments.length<2?o(e):t;if(a(r))return i(n(r,e));throw c(s(e)+" is not iterable")}},8044:(e,t,r)=>{var n=r(1702),a=r(3157),i=r(614),s=r(4326),o=r(1340),c=n([].push);e.exports=function(e){if(i(e))return e;if(a(e)){for(var t=e.length,r=[],n=0;n{var n=r(9662),a=r(8554);e.exports=function(e,t){var r=e[t];return a(r)?void 0:n(r)}},647:(e,t,r)=>{var n=r(1702),a=r(7908),i=Math.floor,s=n("".charAt),o=n("".replace),c=n("".slice),l=/\\$([$&'\`]|\\d{1,2}|<[^>]*>)/g,h=/\\$([$&'\`]|\\d{1,2})/g;e.exports=function(e,t,r,n,u,d){var f=r+e.length,g=n.length,p=h;return void 0!==u&&(u=a(u),p=l),o(d,p,(function(a,o){var l;switch(s(o,0)){case"$":return"$";case"&":return e;case"\`":return c(t,0,r);case"'":return c(t,f);case"<":l=u[c(o,1,-1)];break;default:var h=+o;if(0===h)return a;if(h>g){var d=i(h/10);return 0===d?a:d<=g?void 0===n[d-1]?s(o,1):n[d-1]+s(o,1):a}l=n[h-1]}return void 0===l?"":l}))}},7854:function(e,t,r){var n=function(e){return e&&e.Math==Math&&e};e.exports=n("object"==typeof globalThis&&globalThis)||n("object"==typeof window&&window)||n("object"==typeof self&&self)||n("object"==typeof r.g&&r.g)||function(){return this}()||this||Function("return this")()},2597:(e,t,r)=>{var n=r(1702),a=r(7908),i=n({}.hasOwnProperty);e.exports=Object.hasOwn||function(e,t){return i(a(e),t)}},3501:e=>{e.exports={}},842:e=>{e.exports=function(e,t){try{1==arguments.length?console.error(e):console.error(e,t)}catch(e){}}},490:(e,t,r)=>{var n=r(5005);e.exports=n("document","documentElement")},4664:(e,t,r)=>{var n=r(9781),a=r(7293),i=r(317);e.exports=!n&&!a((function(){return 7!=Object.defineProperty(i("div"),"a",{get:function(){return 7}}).a}))},1179:e=>{var t=Array,r=Math.abs,n=Math.pow,a=Math.floor,i=Math.log,s=Math.LN2;e.exports={pack:function(e,o,c){var l,h,u,d=t(c),f=8*c-o-1,g=(1<>1,m=23===o?n(2,-24)-n(2,-77):0,b=e<0||0===e&&1/e<0?1:0,y=0;for((e=r(e))!=e||e===1/0?(h=e!=e?1:0,l=g):(l=a(i(e)/s),e*(u=n(2,-l))<1&&(l--,u*=2),(e+=l+p>=1?m/u:m*n(2,1-p))*u>=2&&(l++,u/=2),l+p>=g?(h=0,l=g):l+p>=1?(h=(e*u-1)*n(2,o),l+=p):(h=e*n(2,p-1)*n(2,o),l=0));o>=8;)d[y++]=255&h,h/=256,o-=8;for(l=l<0;)d[y++]=255&l,l/=256,f-=8;return d[--y]|=128*b,d},unpack:function(e,t){var r,a=e.length,i=8*a-t-1,s=(1<>1,c=i-7,l=a-1,h=e[l--],u=127&h;for(h>>=7;c>0;)u=256*u+e[l--],c-=8;for(r=u&(1<<-c)-1,u>>=-c,c+=t;c>0;)r=256*r+e[l--],c-=8;if(0===u)u=1-o;else{if(u===s)return r?NaN:h?-1/0:1/0;r+=n(2,t),u-=o}return(h?-1:1)*r*n(2,u-t)}}},8361:(e,t,r)=>{var n=r(1702),a=r(7293),i=r(4326),s=Object,o=n("".split);e.exports=a((function(){return!s("z").propertyIsEnumerable(0)}))?function(e){return"String"==i(e)?o(e,""):s(e)}:s},9587:(e,t,r)=>{var n=r(614),a=r(111),i=r(7674);e.exports=function(e,t,r){var s,o;return i&&n(s=t.constructor)&&s!==r&&a(o=s.prototype)&&o!==r.prototype&&i(e,o),e}},2788:(e,t,r)=>{var n=r(1702),a=r(614),i=r(5465),s=n(Function.toString);a(i.inspectSource)||(i.inspectSource=function(e){return s(e)}),e.exports=i.inspectSource},8340:(e,t,r)=>{var n=r(111),a=r(8880);e.exports=function(e,t){n(t)&&"cause"in t&&a(e,"cause",t.cause)}},2423:(e,t,r)=>{var n=r(2109),a=r(1702),i=r(3501),s=r(111),o=r(2597),c=r(3070).f,l=r(8006),h=r(1156),u=r(2050),d=r(9711),f=r(6677),g=!1,p=d("meta"),m=0,b=function(e){c(e,p,{value:{objectID:"O"+m++,weakData:{}}})},y=e.exports={enable:function(){y.enable=function(){},g=!0;var e=l.f,t=a([].splice),r={};r[p]=1,e(r).length&&(l.f=function(r){for(var n=e(r),a=0,i=n.length;a{var n,a,i,s=r(4811),o=r(7854),c=r(111),l=r(8880),h=r(2597),u=r(5465),d=r(6200),f=r(3501),g="Object already initialized",p=o.TypeError,m=o.WeakMap;if(s||u.state){var b=u.state||(u.state=new m);b.get=b.get,b.has=b.has,b.set=b.set,n=function(e,t){if(b.has(e))throw p(g);return t.facade=e,b.set(e,t),t},a=function(e){return b.get(e)||{}},i=function(e){return b.has(e)}}else{var y=d("state");f[y]=!0,n=function(e,t){if(h(e,y))throw p(g);return t.facade=e,l(e,y,t),t},a=function(e){return h(e,y)?e[y]:{}},i=function(e){return h(e,y)}}e.exports={set:n,get:a,has:i,enforce:function(e){return i(e)?a(e):n(e,{})},getterFor:function(e){return function(t){var r;if(!c(t)||(r=a(t)).type!==e)throw p("Incompatible receiver, "+e+" required");return r}}}},7659:(e,t,r)=>{var n=r(5112),a=r(7497),i=n("iterator"),s=Array.prototype;e.exports=function(e){return void 0!==e&&(a.Array===e||s[i]===e)}},3157:(e,t,r)=>{var n=r(4326);e.exports=Array.isArray||function(e){return"Array"==n(e)}},4067:(e,t,r)=>{var n=r(648);e.exports=function(e){var t=n(e);return"BigInt64Array"==t||"BigUint64Array"==t}},614:(e,t,r)=>{var n=r(4154),a=n.all;e.exports=n.IS_HTMLDDA?function(e){return"function"==typeof e||e===a}:function(e){return"function"==typeof e}},4411:(e,t,r)=>{var n=r(1702),a=r(7293),i=r(614),s=r(648),o=r(5005),c=r(2788),l=function(){},h=[],u=o("Reflect","construct"),d=/^\\s*(?:class|function)\\b/,f=n(d.exec),g=!d.exec(l),p=function(e){if(!i(e))return!1;try{return u(l,h,e),!0}catch(e){return!1}},m=function(e){if(!i(e))return!1;switch(s(e)){case"AsyncFunction":case"GeneratorFunction":case"AsyncGeneratorFunction":return!1}try{return g||!!f(d,c(e))}catch(e){return!0}};m.sham=!0,e.exports=!u||a((function(){var e;return p(p.call)||!p(Object)||!p((function(){e=!0}))||e}))?m:p},4705:(e,t,r)=>{var n=r(7293),a=r(614),i=/#|\\.prototype\\./,s=function(e,t){var r=c[o(e)];return r==h||r!=l&&(a(t)?n(t):!!t)},o=s.normalize=function(e){return String(e).replace(i,".").toLowerCase()},c=s.data={},l=s.NATIVE="N",h=s.POLYFILL="P";e.exports=s},5988:(e,t,r)=>{var n=r(111),a=Math.floor;e.exports=Number.isInteger||function(e){return!n(e)&&isFinite(e)&&a(e)===e}},8554:e=>{e.exports=function(e){return null==e}},111:(e,t,r)=>{var n=r(614),a=r(4154),i=a.all;e.exports=a.IS_HTMLDDA?function(e){return"object"==typeof e?null!==e:n(e)||e===i}:function(e){return"object"==typeof e?null!==e:n(e)}},1913:e=>{e.exports=!1},7850:(e,t,r)=>{var n=r(111),a=r(4326),i=r(5112)("match");e.exports=function(e){var t;return n(e)&&(void 0!==(t=e[i])?!!t:"RegExp"==a(e))}},2190:(e,t,r)=>{var n=r(5005),a=r(614),i=r(7976),s=r(3307),o=Object;e.exports=s?function(e){return"symbol"==typeof e}:function(e){var t=n("Symbol");return a(t)&&i(t.prototype,o(e))}},408:(e,t,r)=>{var n=r(9974),a=r(6916),i=r(9670),s=r(6330),o=r(7659),c=r(6244),l=r(7976),h=r(4121),u=r(1246),d=r(9212),f=TypeError,g=function(e,t){this.stopped=e,this.result=t},p=g.prototype;e.exports=function(e,t,r){var m,b,y,w,v,x,S,A=r&&r.that,k=!(!r||!r.AS_ENTRIES),C=!(!r||!r.IS_RECORD),O=!(!r||!r.IS_ITERATOR),F=!(!r||!r.INTERRUPTED),I=n(t,A),T=function(e){return m&&d(m,"normal",e),new g(!0,e)},M=function(e){return k?(i(e),F?I(e[0],e[1],T):I(e[0],e[1])):F?I(e,T):I(e)};if(C)m=e.iterator;else if(O)m=e;else{if(!(b=u(e)))throw f(s(e)+" is not iterable");if(o(b)){for(y=0,w=c(e);w>y;y++)if((v=M(e[y]))&&l(p,v))return v;return new g(!1)}m=h(e,b)}for(x=C?e.next:m.next;!(S=a(x,m)).done;){try{v=M(S.value)}catch(e){d(m,"throw",e)}if("object"==typeof v&&v&&l(p,v))return v}return new g(!1)}},9212:(e,t,r)=>{var n=r(6916),a=r(9670),i=r(8173);e.exports=function(e,t,r){var s,o;a(e);try{if(!(s=i(e,"return"))){if("throw"===t)throw r;return r}s=n(s,e)}catch(e){o=!0,s=e}if("throw"===t)throw r;if(o)throw s;return a(s),r}},3061:(e,t,r)=>{var n=r(3383).IteratorPrototype,a=r(30),i=r(9114),s=r(8003),o=r(7497),c=function(){return this};e.exports=function(e,t,r,l){var h=t+" Iterator";return e.prototype=a(n,{next:i(+!l,r)}),s(e,h,!1,!0),o[h]=c,e}},1656:(e,t,r)=>{var n=r(2109),a=r(6916),i=r(1913),s=r(6530),o=r(614),c=r(3061),l=r(9518),h=r(7674),u=r(8003),d=r(8880),f=r(8052),g=r(5112),p=r(7497),m=r(3383),b=s.PROPER,y=s.CONFIGURABLE,w=m.IteratorPrototype,v=m.BUGGY_SAFARI_ITERATORS,x=g("iterator"),S="keys",A="values",k="entries",C=function(){return this};e.exports=function(e,t,r,s,g,m,O){c(r,t,s);var F,I,T,M=function(e){if(e===g&&D)return D;if(!v&&e in R)return R[e];switch(e){case S:case A:case k:return function(){return new r(this,e)}}return function(){return new r(this)}},E=t+" Iterator",P=!1,R=e.prototype,N=R[x]||R["@@iterator"]||g&&R[g],D=!v&&N||M(g),B="Array"==t&&R.entries||N;if(B&&(F=l(B.call(new e)))!==Object.prototype&&F.next&&(i||l(F)===w||(h?h(F,w):o(F[x])||f(F,x,C)),u(F,E,!0,!0),i&&(p[E]=C)),b&&g==A&&N&&N.name!==A&&(!i&&y?d(R,"name",A):(P=!0,D=function(){return a(N,this)})),g)if(I={values:M(A),keys:m?D:M(S),entries:M(k)},O)for(T in I)(v||P||!(T in R))&&f(R,T,I[T]);else n({target:t,proto:!0,forced:v||P},I);return i&&!O||R[x]===D||f(R,x,D,{name:g}),p[t]=D,I}},3383:(e,t,r)=>{var n,a,i,s=r(7293),o=r(614),c=r(111),l=r(30),h=r(9518),u=r(8052),d=r(5112),f=r(1913),g=d("iterator"),p=!1;[].keys&&("next"in(i=[].keys())?(a=h(h(i)))!==Object.prototype&&(n=a):p=!0),!c(n)||s((function(){var e={};return n[g].call(e)!==e}))?n={}:f&&(n=l(n)),o(n[g])||u(n,g,(function(){return this})),e.exports={IteratorPrototype:n,BUGGY_SAFARI_ITERATORS:p}},7497:e=>{e.exports={}},6244:(e,t,r)=>{var n=r(7466);e.exports=function(e){return n(e.length)}},6339:(e,t,r)=>{var n=r(1702),a=r(7293),i=r(614),s=r(2597),o=r(9781),c=r(6530).CONFIGURABLE,l=r(2788),h=r(9909),u=h.enforce,d=h.get,f=String,g=Object.defineProperty,p=n("".slice),m=n("".replace),b=n([].join),y=o&&!a((function(){return 8!==g((function(){}),"length",{value:8}).length})),w=String(String).split("String"),v=e.exports=function(e,t,r){"Symbol("===p(f(t),0,7)&&(t="["+m(f(t),/^Symbol\\(([^)]*)\\)/,"$1")+"]"),r&&r.getter&&(t="get "+t),r&&r.setter&&(t="set "+t),(!s(e,"name")||c&&e.name!==t)&&(o?g(e,"name",{value:t,configurable:!0}):e.name=t),y&&r&&s(r,"arity")&&e.length!==r.arity&&g(e,"length",{value:r.arity});try{r&&s(r,"constructor")&&r.constructor?o&&g(e,"prototype",{writable:!1}):e.prototype&&(e.prototype=void 0)}catch(e){}var n=u(e);return s(n,"source")||(n.source=b(w,"string"==typeof t?t:"")),e};Function.prototype.toString=v((function(){return i(this)&&d(this).source||l(this)}),"toString")},4758:e=>{var t=Math.ceil,r=Math.floor;e.exports=Math.trunc||function(e){var n=+e;return(n>0?r:t)(n)}},5948:(e,t,r)=>{var n,a,i,s,o,c=r(7854),l=r(9974),h=r(1236).f,u=r(261).set,d=r(8572),f=r(6833),g=r(1528),p=r(1036),m=r(5268),b=c.MutationObserver||c.WebKitMutationObserver,y=c.document,w=c.process,v=c.Promise,x=h(c,"queueMicrotask"),S=x&&x.value;if(!S){var A=new d,k=function(){var e,t;for(m&&(e=w.domain)&&e.exit();t=A.get();)try{t()}catch(e){throw A.head&&n(),e}e&&e.enter()};f||m||p||!b||!y?!g&&v&&v.resolve?((s=v.resolve(void 0)).constructor=v,o=l(s.then,s),n=function(){o(k)}):m?n=function(){w.nextTick(k)}:(u=l(u,c),n=function(){u(k)}):(a=!0,i=y.createTextNode(""),new b(k).observe(i,{characterData:!0}),n=function(){i.data=a=!a}),S=function(e){A.head||n(),A.add(e)}}e.exports=S},8523:(e,t,r)=>{var n=r(9662),a=TypeError,i=function(e){var t,r;this.promise=new e((function(e,n){if(void 0!==t||void 0!==r)throw a("Bad Promise constructor");t=e,r=n})),this.resolve=n(t),this.reject=n(r)};e.exports.f=function(e){return new i(e)}},6277:(e,t,r)=>{var n=r(1340);e.exports=function(e,t){return void 0===e?arguments.length<2?"":t:n(e)}},3929:(e,t,r)=>{var n=r(7850),a=TypeError;e.exports=function(e){if(n(e))throw a("The method doesn't accept regular expressions");return e}},2814:(e,t,r)=>{var n=r(7854),a=r(7293),i=r(1702),s=r(1340),o=r(3111).trim,c=r(1361),l=i("".charAt),h=n.parseFloat,u=n.Symbol,d=u&&u.iterator,f=1/h(c+"-0")!=-1/0||d&&!a((function(){h(Object(d))}));e.exports=f?function(e){var t=o(s(e)),r=h(t);return 0===r&&"-"==l(t,0)?-0:r}:h},3009:(e,t,r)=>{var n=r(7854),a=r(7293),i=r(1702),s=r(1340),o=r(3111).trim,c=r(1361),l=n.parseInt,h=n.Symbol,u=h&&h.iterator,d=/^[+-]?0x/i,f=i(d.exec),g=8!==l(c+"08")||22!==l(c+"0x16")||u&&!a((function(){l(Object(u))}));e.exports=g?function(e,t){var r=o(s(e));return l(r,t>>>0||(f(d,r)?16:10))}:l},1574:(e,t,r)=>{var n=r(9781),a=r(1702),i=r(6916),s=r(7293),o=r(1956),c=r(5181),l=r(5296),h=r(7908),u=r(8361),d=Object.assign,f=Object.defineProperty,g=a([].concat);e.exports=!d||s((function(){if(n&&1!==d({b:1},d(f({},"a",{enumerable:!0,get:function(){f(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var e={},t={},r=Symbol(),a="abcdefghijklmnopqrst";return e[r]=7,a.split("").forEach((function(e){t[e]=e})),7!=d({},e)[r]||o(d({},t)).join("")!=a}))?function(e,t){for(var r=h(e),a=arguments.length,s=1,d=c.f,f=l.f;a>s;)for(var p,m=u(arguments[s++]),b=d?g(o(m),d(m)):o(m),y=b.length,w=0;y>w;)p=b[w++],n&&!i(f,m,p)||(r[p]=m[p]);return r}:d},30:(e,t,r)=>{var n,a=r(9670),i=r(6048),s=r(748),o=r(3501),c=r(490),l=r(317),h=r(6200),u="prototype",d="script",f=h("IE_PROTO"),g=function(){},p=function(e){return"<"+d+">"+e+""},m=function(e){e.write(p("")),e.close();var t=e.parentWindow.Object;return e=null,t},b=function(){try{n=new ActiveXObject("htmlfile")}catch(e){}var e,t,r;b="undefined"!=typeof document?document.domain&&n?m(n):(t=l("iframe"),r="java"+d+":",t.style.display="none",c.appendChild(t),t.src=String(r),(e=t.contentWindow.document).open(),e.write(p("document.F=Object")),e.close(),e.F):m(n);for(var a=s.length;a--;)delete b[u][s[a]];return b()};o[f]=!0,e.exports=Object.create||function(e,t){var r;return null!==e?(g[u]=a(e),r=new g,g[u]=null,r[f]=e):r=b(),void 0===t?r:i.f(r,t)}},6048:(e,t,r)=>{var n=r(9781),a=r(3353),i=r(3070),s=r(9670),o=r(5656),c=r(1956);t.f=n&&!a?Object.defineProperties:function(e,t){s(e);for(var r,n=o(t),a=c(t),l=a.length,h=0;l>h;)i.f(e,r=a[h++],n[r]);return e}},3070:(e,t,r)=>{var n=r(9781),a=r(4664),i=r(3353),s=r(9670),o=r(4948),c=TypeError,l=Object.defineProperty,h=Object.getOwnPropertyDescriptor,u="enumerable",d="configurable",f="writable";t.f=n?i?function(e,t,r){if(s(e),t=o(t),s(r),"function"==typeof e&&"prototype"===t&&"value"in r&&f in r&&!r[f]){var n=h(e,t);n&&n[f]&&(e[t]=r.value,r={configurable:d in r?r[d]:n[d],enumerable:u in r?r[u]:n[u],writable:!1})}return l(e,t,r)}:l:function(e,t,r){if(s(e),t=o(t),s(r),a)try{return l(e,t,r)}catch(e){}if("get"in r||"set"in r)throw c("Accessors not supported");return"value"in r&&(e[t]=r.value),e}},1236:(e,t,r)=>{var n=r(9781),a=r(6916),i=r(5296),s=r(9114),o=r(5656),c=r(4948),l=r(2597),h=r(4664),u=Object.getOwnPropertyDescriptor;t.f=n?u:function(e,t){if(e=o(e),t=c(t),h)try{return u(e,t)}catch(e){}if(l(e,t))return s(!a(i.f,e,t),e[t])}},1156:(e,t,r)=>{var n=r(4326),a=r(5656),i=r(8006).f,s=r(1589),o="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];e.exports.f=function(e){return o&&"Window"==n(e)?function(e){try{return i(e)}catch(e){return s(o)}}(e):i(a(e))}},8006:(e,t,r)=>{var n=r(6324),a=r(748).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return n(e,a)}},5181:(e,t)=>{t.f=Object.getOwnPropertySymbols},9518:(e,t,r)=>{var n=r(2597),a=r(614),i=r(7908),s=r(6200),o=r(8544),c=s("IE_PROTO"),l=Object,h=l.prototype;e.exports=o?l.getPrototypeOf:function(e){var t=i(e);if(n(t,c))return t[c];var r=t.constructor;return a(r)&&t instanceof r?r.prototype:t instanceof l?h:null}},2050:(e,t,r)=>{var n=r(7293),a=r(111),i=r(4326),s=r(7556),o=Object.isExtensible,c=n((function(){o(1)}));e.exports=c||s?function(e){return!!a(e)&&(!s||"ArrayBuffer"!=i(e))&&(!o||o(e))}:o},7976:(e,t,r)=>{var n=r(1702);e.exports=n({}.isPrototypeOf)},6324:(e,t,r)=>{var n=r(1702),a=r(2597),i=r(5656),s=r(1318).indexOf,o=r(3501),c=n([].push);e.exports=function(e,t){var r,n=i(e),l=0,h=[];for(r in n)!a(o,r)&&a(n,r)&&c(h,r);for(;t.length>l;)a(n,r=t[l++])&&(~s(h,r)||c(h,r));return h}},1956:(e,t,r)=>{var n=r(6324),a=r(748);e.exports=Object.keys||function(e){return n(e,a)}},5296:(e,t)=>{var r={}.propertyIsEnumerable,n=Object.getOwnPropertyDescriptor,a=n&&!r.call({1:2},1);t.f=a?function(e){var t=n(this,e);return!!t&&t.enumerable}:r},7674:(e,t,r)=>{var n=r(5668),a=r(9670),i=r(6077);e.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var e,t=!1,r={};try{(e=n(Object.prototype,"__proto__","set"))(r,[]),t=r instanceof Array}catch(e){}return function(r,n){return a(r),i(n),t?e(r,n):r.__proto__=n,r}}():void 0)},2140:(e,t,r)=>{var n=r(6916),a=r(614),i=r(111),s=TypeError;e.exports=function(e,t){var r,o;if("string"===t&&a(r=e.toString)&&!i(o=n(r,e)))return o;if(a(r=e.valueOf)&&!i(o=n(r,e)))return o;if("string"!==t&&a(r=e.toString)&&!i(o=n(r,e)))return o;throw s("Can't convert object to primitive value")}},3887:(e,t,r)=>{var n=r(5005),a=r(1702),i=r(8006),s=r(5181),o=r(9670),c=a([].concat);e.exports=n("Reflect","ownKeys")||function(e){var t=i.f(o(e)),r=s.f;return r?c(t,r(e)):t}},2534:e=>{e.exports=function(e){try{return{error:!1,value:e()}}catch(e){return{error:!0,value:e}}}},3702:(e,t,r)=>{var n=r(7854),a=r(2492),i=r(614),s=r(4705),o=r(2788),c=r(5112),l=r(7871),h=r(3823),u=r(1913),d=r(7392),f=a&&a.prototype,g=c("species"),p=!1,m=i(n.PromiseRejectionEvent),b=s("Promise",(function(){var e=o(a),t=e!==String(a);if(!t&&66===d)return!0;if(u&&(!f.catch||!f.finally))return!0;if(!d||d<51||!/native code/.test(e)){var r=new a((function(e){e(1)})),n=function(e){e((function(){}),(function(){}))};if((r.constructor={})[g]=n,!(p=r.then((function(){}))instanceof n))return!0}return!t&&(l||h)&&!m}));e.exports={CONSTRUCTOR:b,REJECTION_EVENT:m,SUBCLASSING:p}},2492:(e,t,r)=>{var n=r(7854);e.exports=n.Promise},9478:(e,t,r)=>{var n=r(9670),a=r(111),i=r(8523);e.exports=function(e,t){if(n(e),a(t)&&t.constructor===e)return t;var r=i.f(e);return(0,r.resolve)(t),r.promise}},612:(e,t,r)=>{var n=r(2492),a=r(7072),i=r(3702).CONSTRUCTOR;e.exports=i||!a((function(e){n.all(e).then(void 0,(function(){}))}))},2626:(e,t,r)=>{var n=r(3070).f;e.exports=function(e,t,r){r in e||n(e,r,{configurable:!0,get:function(){return t[r]},set:function(e){t[r]=e}})}},8572:e=>{var t=function(){this.head=null,this.tail=null};t.prototype={add:function(e){var t={item:e,next:null},r=this.tail;r?r.next=t:this.head=t,this.tail=t},get:function(){var e=this.head;if(e)return null===(this.head=e.next)&&(this.tail=null),e.item}},e.exports=t},7651:(e,t,r)=>{var n=r(6916),a=r(9670),i=r(614),s=r(4326),o=r(2261),c=TypeError;e.exports=function(e,t){var r=e.exec;if(i(r)){var l=n(r,e,t);return null!==l&&a(l),l}if("RegExp"===s(e))return n(o,e,t);throw c("RegExp#exec called on incompatible receiver")}},2261:(e,t,r)=>{var n,a,i=r(6916),s=r(1702),o=r(1340),c=r(7066),l=r(2999),h=r(2309),u=r(30),d=r(9909).get,f=r(9441),g=r(7168),p=h("native-string-replace",String.prototype.replace),m=RegExp.prototype.exec,b=m,y=s("".charAt),w=s("".indexOf),v=s("".replace),x=s("".slice),S=(a=/b*/g,i(m,n=/a/,"a"),i(m,a,"a"),0!==n.lastIndex||0!==a.lastIndex),A=l.BROKEN_CARET,k=void 0!==/()??/.exec("")[1];(S||k||A||f||g)&&(b=function(e){var t,r,n,a,s,l,h,f=this,g=d(f),C=o(e),O=g.raw;if(O)return O.lastIndex=f.lastIndex,t=i(b,O,C),f.lastIndex=O.lastIndex,t;var F=g.groups,I=A&&f.sticky,T=i(c,f),M=f.source,E=0,P=C;if(I&&(T=v(T,"y",""),-1===w(T,"g")&&(T+="g"),P=x(C,f.lastIndex),f.lastIndex>0&&(!f.multiline||f.multiline&&"\\n"!==y(C,f.lastIndex-1))&&(M="(?: "+M+")",P=" "+P,E++),r=new RegExp("^(?:"+M+")",T)),k&&(r=new RegExp("^"+M+"$(?!\\\\s)",T)),S&&(n=f.lastIndex),a=i(m,I?r:f,P),I?a?(a.input=x(a.input,E),a[0]=x(a[0],E),a.index=f.lastIndex,f.lastIndex+=a[0].length):f.lastIndex=0:S&&a&&(f.lastIndex=f.global?a.index+a[0].length:n),k&&a&&a.length>1&&i(p,a[0],r,(function(){for(s=1;s{var n=r(9670);e.exports=function(){var e=n(this),t="";return e.hasIndices&&(t+="d"),e.global&&(t+="g"),e.ignoreCase&&(t+="i"),e.multiline&&(t+="m"),e.dotAll&&(t+="s"),e.unicode&&(t+="u"),e.unicodeSets&&(t+="v"),e.sticky&&(t+="y"),t}},4706:(e,t,r)=>{var n=r(6916),a=r(2597),i=r(7976),s=r(7066),o=RegExp.prototype;e.exports=function(e){var t=e.flags;return void 0!==t||"flags"in o||a(e,"flags")||!i(o,e)?t:n(s,e)}},2999:(e,t,r)=>{var n=r(7293),a=r(7854).RegExp,i=n((function(){var e=a("a","y");return e.lastIndex=2,null!=e.exec("abcd")})),s=i||n((function(){return!a("a","y").sticky})),o=i||n((function(){var e=a("^r","gy");return e.lastIndex=2,null!=e.exec("str")}));e.exports={BROKEN_CARET:o,MISSED_STICKY:s,UNSUPPORTED_Y:i}},9441:(e,t,r)=>{var n=r(7293),a=r(7854).RegExp;e.exports=n((function(){var e=a(".","s");return!(e.dotAll&&e.exec("\\n")&&"s"===e.flags)}))},7168:(e,t,r)=>{var n=r(7293),a=r(7854).RegExp;e.exports=n((function(){var e=a("(?b)","g");return"b"!==e.exec("b").groups.a||"bc"!=="b".replace(e,"$c")}))},4488:(e,t,r)=>{var n=r(8554),a=TypeError;e.exports=function(e){if(n(e))throw a("Can't call method on "+e);return e}},6340:(e,t,r)=>{var n=r(5005),a=r(7045),i=r(5112),s=r(9781),o=i("species");e.exports=function(e){var t=n(e);s&&t&&!t[o]&&a(t,o,{configurable:!0,get:function(){return this}})}},8003:(e,t,r)=>{var n=r(3070).f,a=r(2597),i=r(5112)("toStringTag");e.exports=function(e,t,r){e&&!r&&(e=e.prototype),e&&!a(e,i)&&n(e,i,{configurable:!0,value:t})}},6200:(e,t,r)=>{var n=r(2309),a=r(9711),i=n("keys");e.exports=function(e){return i[e]||(i[e]=a(e))}},5465:(e,t,r)=>{var n=r(7854),a=r(3072),i="__core-js_shared__",s=n[i]||a(i,{});e.exports=s},2309:(e,t,r)=>{var n=r(1913),a=r(5465);(e.exports=function(e,t){return a[e]||(a[e]=void 0!==t?t:{})})("versions",[]).push({version:"3.32.0",mode:n?"pure":"global",copyright:"© 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.32.0/LICENSE",source:"https://github.com/zloirock/core-js"})},6707:(e,t,r)=>{var n=r(9670),a=r(9483),i=r(8554),s=r(5112)("species");e.exports=function(e,t){var r,o=n(e).constructor;return void 0===o||i(r=n(o)[s])?t:a(r)}},8710:(e,t,r)=>{var n=r(1702),a=r(9303),i=r(1340),s=r(4488),o=n("".charAt),c=n("".charCodeAt),l=n("".slice),h=function(e){return function(t,r){var n,h,u=i(s(t)),d=a(r),f=u.length;return d<0||d>=f?e?"":void 0:(n=c(u,d))<55296||n>56319||d+1===f||(h=c(u,d+1))<56320||h>57343?e?o(u,d):n:e?l(u,d,d+2):h-56320+(n-55296<<10)+65536}};e.exports={codeAt:h(!1),charAt:h(!0)}},3197:(e,t,r)=>{var n=r(1702),a=2147483647,i=/[^\\0-\\u007E]/,s=/[.\\u3002\\uFF0E\\uFF61]/g,o="Overflow: input needs wider integers to process",c=RangeError,l=n(s.exec),h=Math.floor,u=String.fromCharCode,d=n("".charCodeAt),f=n([].join),g=n([].push),p=n("".replace),m=n("".split),b=n("".toLowerCase),y=function(e){return e+22+75*(e<26)},w=function(e,t,r){var n=0;for(e=r?h(e/700):e>>1,e+=h(e/t);e>455;)e=h(e/35),n+=36;return h(n+36*e/(e+38))},v=function(e){var t=[];e=function(e){for(var t=[],r=0,n=e.length;r=55296&&a<=56319&&r=s&&nh((a-l)/x))throw c(o);for(l+=(v-s)*x,s=v,r=0;ra)throw c(o);if(n==s){for(var S=l,A=36;;){var k=A<=p?1:A>=p+26?26:A-p;if(S{var n=r(9303),a=r(1340),i=r(4488),s=RangeError;e.exports=function(e){var t=a(i(this)),r="",o=n(e);if(o<0||o==1/0)throw s("Wrong number of repetitions");for(;o>0;(o>>>=1)&&(t+=t))1&o&&(r+=t);return r}},6091:(e,t,r)=>{var n=r(6530).PROPER,a=r(7293),i=r(1361);e.exports=function(e){return a((function(){return!!i[e]()||"​…᠎"!=="​…᠎"[e]()||n&&i[e].name!==e}))}},3111:(e,t,r)=>{var n=r(1702),a=r(4488),i=r(1340),s=r(1361),o=n("".replace),c=RegExp("^["+s+"]+"),l=RegExp("(^|[^"+s+"])["+s+"]+$"),h=function(e){return function(t){var r=i(a(t));return 1&e&&(r=o(r,c,"")),2&e&&(r=o(r,l,"$1")),r}};e.exports={start:h(1),end:h(2),trim:h(3)}},6293:(e,t,r)=>{var n=r(7392),a=r(7293),i=r(7854).String;e.exports=!!Object.getOwnPropertySymbols&&!a((function(){var e=Symbol();return!i(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&n&&n<41}))},261:(e,t,r)=>{var n,a,i,s,o=r(7854),c=r(2104),l=r(9974),h=r(614),u=r(2597),d=r(7293),f=r(490),g=r(206),p=r(317),m=r(8053),b=r(6833),y=r(5268),w=o.setImmediate,v=o.clearImmediate,x=o.process,S=o.Dispatch,A=o.Function,k=o.MessageChannel,C=o.String,O=0,F={},I="onreadystatechange";d((function(){n=o.location}));var T=function(e){if(u(F,e)){var t=F[e];delete F[e],t()}},M=function(e){return function(){T(e)}},E=function(e){T(e.data)},P=function(e){o.postMessage(C(e),n.protocol+"//"+n.host)};w&&v||(w=function(e){m(arguments.length,1);var t=h(e)?e:A(e),r=g(arguments,1);return F[++O]=function(){c(t,void 0,r)},a(O),O},v=function(e){delete F[e]},y?a=function(e){x.nextTick(M(e))}:S&&S.now?a=function(e){S.now(M(e))}:k&&!b?(s=(i=new k).port2,i.port1.onmessage=E,a=l(s.postMessage,s)):o.addEventListener&&h(o.postMessage)&&!o.importScripts&&n&&"file:"!==n.protocol&&!d(P)?(a=P,o.addEventListener("message",E,!1)):a=I in p("script")?function(e){f.appendChild(p("script"))[I]=function(){f.removeChild(this),T(e)}}:function(e){setTimeout(M(e),0)}),e.exports={set:w,clear:v}},863:(e,t,r)=>{var n=r(1702);e.exports=n(1..valueOf)},1400:(e,t,r)=>{var n=r(9303),a=Math.max,i=Math.min;e.exports=function(e,t){var r=n(e);return r<0?a(r+t,0):i(r,t)}},4599:(e,t,r)=>{var n=r(7593),a=TypeError;e.exports=function(e){var t=n(e,"number");if("number"==typeof t)throw a("Can't convert number to bigint");return BigInt(t)}},7067:(e,t,r)=>{var n=r(9303),a=r(7466),i=RangeError;e.exports=function(e){if(void 0===e)return 0;var t=n(e),r=a(t);if(t!==r)throw i("Wrong length or index");return r}},5656:(e,t,r)=>{var n=r(8361),a=r(4488);e.exports=function(e){return n(a(e))}},9303:(e,t,r)=>{var n=r(4758);e.exports=function(e){var t=+e;return t!=t||0===t?0:n(t)}},7466:(e,t,r)=>{var n=r(9303),a=Math.min;e.exports=function(e){return e>0?a(n(e),9007199254740991):0}},7908:(e,t,r)=>{var n=r(4488),a=Object;e.exports=function(e){return a(n(e))}},4590:(e,t,r)=>{var n=r(3002),a=RangeError;e.exports=function(e,t){var r=n(e);if(r%t)throw a("Wrong offset");return r}},3002:(e,t,r)=>{var n=r(9303),a=RangeError;e.exports=function(e){var t=n(e);if(t<0)throw a("The argument can't be less than 0");return t}},7593:(e,t,r)=>{var n=r(6916),a=r(111),i=r(2190),s=r(8173),o=r(2140),c=r(5112),l=TypeError,h=c("toPrimitive");e.exports=function(e,t){if(!a(e)||i(e))return e;var r,c=s(e,h);if(c){if(void 0===t&&(t="default"),r=n(c,e,t),!a(r)||i(r))return r;throw l("Can't convert object to primitive value")}return void 0===t&&(t="number"),o(e,t)}},4948:(e,t,r)=>{var n=r(7593),a=r(2190);e.exports=function(e){var t=n(e,"string");return a(t)?t:t+""}},1694:(e,t,r)=>{var n={};n[r(5112)("toStringTag")]="z",e.exports="[object z]"===String(n)},1340:(e,t,r)=>{var n=r(648),a=String;e.exports=function(e){if("Symbol"===n(e))throw TypeError("Cannot convert a Symbol value to a string");return a(e)}},7892:e=>{var t=Math.round;e.exports=function(e){var r=t(e);return r<0?0:r>255?255:255&r}},4038:(e,t,r)=>{var n=r(5268);e.exports=function(e){try{if(n)return Function('return require("'+e+'")')()}catch(e){}}},6330:e=>{var t=String;e.exports=function(e){try{return t(e)}catch(e){return"Object"}}},9843:(e,t,r)=>{var n=r(2109),a=r(7854),i=r(6916),s=r(9781),o=r(3832),c=r(260),l=r(3331),h=r(5787),u=r(9114),d=r(8880),f=r(5988),g=r(7466),p=r(7067),m=r(4590),b=r(7892),y=r(4948),w=r(2597),v=r(648),x=r(111),S=r(2190),A=r(30),k=r(7976),C=r(7674),O=r(8006).f,F=r(7321),I=r(2092).forEach,T=r(6340),M=r(7045),E=r(3070),P=r(1236),R=r(9909),N=r(9587),D=R.get,B=R.set,L=R.enforce,_=E.f,j=P.f,U=a.RangeError,$=l.ArrayBuffer,X=$.prototype,H=l.DataView,q=c.NATIVE_ARRAY_BUFFER_VIEWS,z=c.TYPED_ARRAY_TAG,G=c.TypedArray,W=c.TypedArrayPrototype,V=c.aTypedArrayConstructor,K=c.isTypedArray,Y="BYTES_PER_ELEMENT",J="Wrong length",Z=function(e,t){V(e);for(var r=0,n=t.length,a=new e(n);n>r;)a[r]=t[r++];return a},Q=function(e,t){M(e,t,{configurable:!0,get:function(){return D(this)[t]}})},ee=function(e){var t;return k(X,e)||"ArrayBuffer"==(t=v(e))||"SharedArrayBuffer"==t},te=function(e,t){return K(e)&&!S(t)&&t in e&&f(+t)&&t>=0},re=function(e,t){return t=y(t),te(e,t)?u(2,e[t]):j(e,t)},ne=function(e,t,r){return t=y(t),!(te(e,t)&&x(r)&&w(r,"value"))||w(r,"get")||w(r,"set")||r.configurable||w(r,"writable")&&!r.writable||w(r,"enumerable")&&!r.enumerable?_(e,t,r):(e[t]=r.value,e)};s?(q||(P.f=re,E.f=ne,Q(W,"buffer"),Q(W,"byteOffset"),Q(W,"byteLength"),Q(W,"length")),n({target:"Object",stat:!0,forced:!q},{getOwnPropertyDescriptor:re,defineProperty:ne}),e.exports=function(e,t,r){var s=e.match(/\\d+/)[0]/8,c=e+(r?"Clamped":"")+"Array",l="get"+e,u="set"+e,f=a[c],y=f,w=y&&y.prototype,v={},S=function(e,t){_(e,t,{get:function(){return function(e,t){var r=D(e);return r.view[l](t*s+r.byteOffset,!0)}(this,t)},set:function(e){return function(e,t,n){var a=D(e);a.view[u](t*s+a.byteOffset,r?b(n):n,!0)}(this,t,e)},enumerable:!0})};q?o&&(y=t((function(e,t,r,n){return h(e,w),N(x(t)?ee(t)?void 0!==n?new f(t,m(r,s),n):void 0!==r?new f(t,m(r,s)):new f(t):K(t)?Z(y,t):i(F,y,t):new f(p(t)),e,y)})),C&&C(y,G),I(O(f),(function(e){e in y||d(y,e,f[e])})),y.prototype=w):(y=t((function(e,t,r,n){h(e,w);var a,o,c,l=0,u=0;if(x(t)){if(!ee(t))return K(t)?Z(y,t):i(F,y,t);a=t,u=m(r,s);var d=t.byteLength;if(void 0===n){if(d%s)throw U(J);if((o=d-u)<0)throw U(J)}else if((o=g(n)*s)+u>d)throw U(J);c=o/s}else c=p(t),a=new $(o=c*s);for(B(e,{buffer:a,byteOffset:u,byteLength:o,length:c,view:new H(a)});l{var n=r(7854),a=r(7293),i=r(7072),s=r(260).NATIVE_ARRAY_BUFFER_VIEWS,o=n.ArrayBuffer,c=n.Int8Array;e.exports=!s||!a((function(){c(1)}))||!a((function(){new c(-1)}))||!i((function(e){new c,new c(null),new c(1.5),new c(e)}),!0)||a((function(){return 1!==new c(new o(2),1,void 0).length}))},7321:(e,t,r)=>{var n=r(9974),a=r(6916),i=r(9483),s=r(7908),o=r(6244),c=r(4121),l=r(1246),h=r(7659),u=r(4067),d=r(260).aTypedArrayConstructor,f=r(4599);e.exports=function(e){var t,r,g,p,m,b,y,w,v=i(this),x=s(e),S=arguments.length,A=S>1?arguments[1]:void 0,k=void 0!==A,C=l(x);if(C&&!h(C))for(w=(y=c(x,C)).next,x=[];!(b=a(w,y)).done;)x.push(b.value);for(k&&S>2&&(A=n(A,arguments[2])),r=o(x),g=new(d(v))(r),p=u(g),t=0;r>t;t++)m=k?A(x[t],t):x[t],g[t]=p?f(m):+m;return g}},9711:(e,t,r)=>{var n=r(1702),a=0,i=Math.random(),s=n(1..toString);e.exports=function(e){return"Symbol("+(void 0===e?"":e)+")_"+s(++a+i,36)}},5143:(e,t,r)=>{var n=r(7293),a=r(5112),i=r(9781),s=r(1913),o=a("iterator");e.exports=!n((function(){var e=new URL("b?a=1&b=2&c=3","http://a"),t=e.searchParams,r=new URLSearchParams("a=1&a=2&b=3"),n="";return e.pathname="c%20d",t.forEach((function(e,r){t.delete("b"),n+=r+e})),r.delete("a",2),r.delete("b",void 0),s&&(!e.toJSON||!r.has("a",1)||r.has("a",2)||!r.has("a",void 0)||r.has("b"))||!t.size&&(s||!i)||!t.sort||"http://a/c%20d?a=1&c=3"!==e.href||"3"!==t.get("c")||"a=1"!==String(new URLSearchParams("?a=1"))||!t[o]||"a"!==new URL("https://a@b").username||"b"!==new URLSearchParams(new URLSearchParams("a=b")).get("a")||"xn--e1aybc"!==new URL("http://тест").host||"#%D0%B1"!==new URL("http://a#б").hash||"a1c3"!==n||"x"!==new URL("http://x",void 0).host}))},3307:(e,t,r)=>{var n=r(6293);e.exports=n&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},3353:(e,t,r)=>{var n=r(9781),a=r(7293);e.exports=n&&a((function(){return 42!=Object.defineProperty((function(){}),"prototype",{value:42,writable:!1}).prototype}))},8053:e=>{var t=TypeError;e.exports=function(e,r){if(e{var n=r(7854),a=r(614),i=n.WeakMap;e.exports=a(i)&&/native code/.test(String(i))},5112:(e,t,r)=>{var n=r(7854),a=r(2309),i=r(2597),s=r(9711),o=r(6293),c=r(3307),l=n.Symbol,h=a("wks"),u=c?l.for||l:l&&l.withoutSetter||s;e.exports=function(e){return i(h,e)||(h[e]=o&&i(l,e)?l[e]:u("Symbol."+e)),h[e]}},1361:e=>{e.exports="\\t\\n\\v\\f\\r                 \\u2028\\u2029\\ufeff"},9191:(e,t,r)=>{var n=r(5005),a=r(2597),i=r(8880),s=r(7976),o=r(7674),c=r(9920),l=r(2626),h=r(9587),u=r(6277),d=r(8340),f=r(5392),g=r(9781),p=r(1913);e.exports=function(e,t,r,m){var b="stackTraceLimit",y=m?2:1,w=e.split("."),v=w[w.length-1],x=n.apply(null,w);if(x){var S=x.prototype;if(!p&&a(S,"cause")&&delete S.cause,!r)return x;var A=n("Error"),k=t((function(e,t){var r=u(m?t:e,void 0),n=m?new x(e):new x;return void 0!==r&&i(n,"message",r),f(n,k,n.stack,2),this&&s(S,this)&&h(n,this,k),arguments.length>y&&d(n,arguments[y]),n}));if(k.prototype=S,"Error"!==v?o?o(k,A):c(k,A,{name:!0}):g&&b in x&&(l(k,x,b),l(k,x,"prepareStackTrace")),c(k,x),!p)try{S.name!==v&&i(S,"name",v),S.constructor=k}catch(e){}return k}}},8264:(e,t,r)=>{var n=r(2109),a=r(7854),i=r(3331),s=r(6340),o="ArrayBuffer",c=i[o];n({global:!0,constructor:!0,forced:a[o]!==c},{ArrayBuffer:c}),s(o)},9575:(e,t,r)=>{var n=r(2109),a=r(1470),i=r(7293),s=r(3331),o=r(9670),c=r(1400),l=r(7466),h=r(6707),u=s.ArrayBuffer,d=s.DataView,f=d.prototype,g=a(u.prototype.slice),p=a(f.getUint8),m=a(f.setUint8);n({target:"ArrayBuffer",proto:!0,unsafe:!0,forced:i((function(){return!new u(2).slice(1,void 0).byteLength}))},{slice:function(e,t){if(g&&void 0===t)return g(o(this),e);for(var r=o(this).byteLength,n=c(e,r),a=c(void 0===t?r:t,r),i=new(h(this,u))(l(a-n)),s=new d(this),f=new d(i),b=0;n{var n=r(2109),a=r(7908),i=r(6244),s=r(9303),o=r(1223);n({target:"Array",proto:!0},{at:function(e){var t=a(this),r=i(t),n=s(e),o=n>=0?n:r+n;return o<0||o>=r?void 0:t[o]}}),o("at")},7287:(e,t,r)=>{var n=r(2109),a=r(9671).findLastIndex,i=r(1223);n({target:"Array",proto:!0},{findLastIndex:function(e){return a(this,e,arguments.length>1?arguments[1]:void 0)}}),i("findLastIndex")},7635:(e,t,r)=>{var n=r(2109),a=r(9671).findLast,i=r(1223);n({target:"Array",proto:!0},{findLast:function(e){return a(this,e,arguments.length>1?arguments[1]:void 0)}}),i("findLast")},4944:(e,t,r)=>{var n=r(2109),a=r(6790),i=r(7908),s=r(6244),o=r(9303),c=r(5417);n({target:"Array",proto:!0},{flat:function(){var e=arguments.length?arguments[0]:void 0,t=i(this),r=s(t),n=c(t,0);return n.length=a(n,t,t,r,0,void 0===e?1:o(e)),n}})},6699:(e,t,r)=>{var n=r(2109),a=r(1318).includes,i=r(7293),s=r(1223);n({target:"Array",proto:!0,forced:i((function(){return!Array(1).includes()}))},{includes:function(e){return a(this,e,arguments.length>1?arguments[1]:void 0)}}),s("includes")},6992:(e,t,r)=>{var n=r(5656),a=r(1223),i=r(7497),s=r(9909),o=r(3070).f,c=r(1656),l=r(6178),h=r(1913),u=r(9781),d="Array Iterator",f=s.set,g=s.getterFor(d);e.exports=c(Array,"Array",(function(e,t){f(this,{type:d,target:n(e),index:0,kind:t})}),(function(){var e=g(this),t=e.target,r=e.kind,n=e.index++;return!t||n>=t.length?(e.target=void 0,l(void 0,!0)):l("keys"==r?n:"values"==r?t[n]:[n,t[n]],!1)}),"values");var p=i.Arguments=i.Array;if(a("keys"),a("values"),a("entries"),!h&&u&&"values"!==p.name)try{o(p,"name",{value:"values"})}catch(e){}},7658:(e,t,r)=>{var n=r(2109),a=r(7908),i=r(6244),s=r(3658),o=r(7207);n({target:"Array",proto:!0,arity:1,forced:r(7293)((function(){return 4294967297!==[].push.call({length:4294967296},1)}))||!function(){try{Object.defineProperty([],"length",{writable:!1}).push()}catch(e){return e instanceof TypeError}}()},{push:function(e){var t=a(this),r=i(t),n=arguments.length;o(r+n);for(var c=0;c{var n=r(2109),a=r(3671).left,i=r(9341),s=r(7392);n({target:"Array",proto:!0,forced:!r(5268)&&s>79&&s<83||!i("reduce")},{reduce:function(e){var t=arguments.length;return a(this,e,t,t>1?arguments[1]:void 0)}})},2707:(e,t,r)=>{var n=r(2109),a=r(1702),i=r(9662),s=r(7908),o=r(6244),c=r(5117),l=r(1340),h=r(7293),u=r(4362),d=r(9341),f=r(8886),g=r(256),p=r(7392),m=r(8008),b=[],y=a(b.sort),w=a(b.push),v=h((function(){b.sort(void 0)})),x=h((function(){b.sort(null)})),S=d("sort"),A=!h((function(){if(p)return p<70;if(!(f&&f>3)){if(g)return!0;if(m)return m<603;var e,t,r,n,a="";for(e=65;e<76;e++){switch(t=String.fromCharCode(e),e){case 66:case 69:case 70:case 72:r=3;break;case 68:case 71:r=4;break;default:r=2}for(n=0;n<47;n++)b.push({k:t+n,v:r})}for(b.sort((function(e,t){return t.v-e.v})),n=0;nl(r)?1:-1}}(e)),r=o(a),n=0;n{r(1223)("flat")},541:(e,t,r)=>{var n=r(2109),a=r(7908),i=r(6244),s=r(3658),o=r(5117),c=r(7207);n({target:"Array",proto:!0,arity:1,forced:1!==[].unshift(0)||!function(){try{Object.defineProperty([],"length",{writable:!1}).unshift()}catch(e){return e instanceof TypeError}}()},{unshift:function(e){var t=a(this),r=i(t),n=arguments.length;if(n){c(r+n);for(var l=r;l--;){var h=l+n;l in t?t[h]=t[l]:o(t,h)}for(var u=0;u{var n=r(2109),a=r(1572),i=r(5656),s=Array;n({target:"Array",proto:!0},{with:function(e,t){return a(i(this),s,e,t)}})},1703:(e,t,r)=>{var n=r(2109),a=r(7854),i=r(2104),s=r(9191),o="WebAssembly",c=a[o],l=7!==Error("e",{cause:7}).cause,h=function(e,t){var r={};r[e]=s(e,t,l),n({global:!0,constructor:!0,arity:1,forced:l},r)},u=function(e,t){if(c&&c[e]){var r={};r[e]=s(o+"."+e,t,l),n({target:o,stat:!0,constructor:!0,arity:1,forced:l},r)}};h("Error",(function(e){return function(t){return i(e,this,arguments)}})),h("EvalError",(function(e){return function(t){return i(e,this,arguments)}})),h("RangeError",(function(e){return function(t){return i(e,this,arguments)}})),h("ReferenceError",(function(e){return function(t){return i(e,this,arguments)}})),h("SyntaxError",(function(e){return function(t){return i(e,this,arguments)}})),h("TypeError",(function(e){return function(t){return i(e,this,arguments)}})),h("URIError",(function(e){return function(t){return i(e,this,arguments)}})),u("CompileError",(function(e){return function(t){return i(e,this,arguments)}})),u("LinkError",(function(e){return function(t){return i(e,this,arguments)}})),u("RuntimeError",(function(e){return function(t){return i(e,this,arguments)}}))},5837:(e,t,r)=>{var n=r(2109),a=r(7854);n({global:!0,forced:a.globalThis!==a},{globalThis:a})},8862:(e,t,r)=>{var n=r(2109),a=r(5005),i=r(2104),s=r(6916),o=r(1702),c=r(7293),l=r(614),h=r(2190),u=r(206),d=r(8044),f=r(6293),g=String,p=a("JSON","stringify"),m=o(/./.exec),b=o("".charAt),y=o("".charCodeAt),w=o("".replace),v=o(1..toString),x=/[\\uD800-\\uDFFF]/g,S=/^[\\uD800-\\uDBFF]$/,A=/^[\\uDC00-\\uDFFF]$/,k=!f||c((function(){var e=a("Symbol")();return"[null]"!=p([e])||"{}"!=p({a:e})||"{}"!=p(Object(e))})),C=c((function(){return'"\\\\udf06\\\\ud834"'!==p("\\udf06\\ud834")||'"\\\\udead"'!==p("\\udead")})),O=function(e,t){var r=u(arguments),n=d(t);if(l(n)||void 0!==e&&!h(e))return r[1]=function(e,t){if(l(n)&&(t=s(n,this,g(e),t)),!h(t))return t},i(p,null,r)},F=function(e,t,r){var n=b(r,t-1),a=b(r,t+1);return m(S,e)&&!m(A,a)||m(A,e)&&!m(S,n)?"\\\\u"+v(y(e,0),16):e};p&&n({target:"JSON",stat:!0,arity:3,forced:k||C},{stringify:function(e,t,r){var n=u(arguments),a=i(k?O:p,null,n);return C&&"string"==typeof a?w(a,x,F):a}})},5438:(e,t,r)=>{var n=r(2109),a=Math.hypot,i=Math.abs,s=Math.sqrt;n({target:"Math",stat:!0,arity:2,forced:!!a&&a(1/0,NaN)!==1/0},{hypot:function(e,t){for(var r,n,a=0,o=0,c=arguments.length,l=0;o0?(n=r/l)*n:r;return l===1/0?1/0:l*s(a)}})},6977:(e,t,r)=>{var n=r(2109),a=r(1702),i=r(9303),s=r(863),o=r(8415),c=r(7293),l=RangeError,h=String,u=Math.floor,d=a(o),f=a("".slice),g=a(1..toFixed),p=function(e,t,r){return 0===t?r:t%2==1?p(e,t-1,r*e):p(e*e,t/2,r)},m=function(e,t,r){for(var n=-1,a=r;++n<6;)a+=t*e[n],e[n]=a%1e7,a=u(a/1e7)},b=function(e,t){for(var r=6,n=0;--r>=0;)n+=e[r],e[r]=u(n/t),n=n%t*1e7},y=function(e){for(var t=6,r="";--t>=0;)if(""!==r||0===t||0!==e[t]){var n=h(e[t]);r=""===r?n:r+d("0",7-n.length)+n}return r};n({target:"Number",proto:!0,forced:c((function(){return"0.000"!==g(8e-5,3)||"1"!==g(.9,0)||"1.25"!==g(1.255,2)||"1000000000000000128"!==g(0xde0b6b3a7640080,0)}))||!c((function(){g({})}))},{toFixed:function(e){var t,r,n,a,o=s(this),c=i(e),u=[0,0,0,0,0,0],g="",w="0";if(c<0||c>20)throw l("Incorrect fraction digits");if(o!=o)return"NaN";if(o<=-1e21||o>=1e21)return h(o);if(o<0&&(g="-",o=-o),o>1e-21)if(r=(t=function(e){for(var t=0,r=e;r>=4096;)t+=12,r/=4096;for(;r>=2;)t+=1,r/=2;return t}(o*p(2,69,1))-69)<0?o*p(2,-t,1):o/p(2,t,1),r*=4503599627370496,(t=52-t)>0){for(m(u,0,r),n=c;n>=7;)m(u,1e7,0),n-=7;for(m(u,p(10,n,1),0),n=t-1;n>=23;)b(u,1<<23),n-=23;b(u,1<0?g+((a=w.length)<=c?"0."+d("0",c-a)+w:f(w,0,a-c)+"."+f(w,a-c)):g+w}})},9601:(e,t,r)=>{var n=r(2109),a=r(1574);n({target:"Object",stat:!0,arity:2,forced:Object.assign!==a},{assign:a})},6314:(e,t,r)=>{r(2109)({target:"Object",stat:!0},{hasOwn:r(2597)})},4678:(e,t,r)=>{var n=r(2109),a=r(2814);n({global:!0,forced:parseFloat!=a},{parseFloat:a})},1058:(e,t,r)=>{var n=r(2109),a=r(3009);n({global:!0,forced:parseInt!=a},{parseInt:a})},7922:(e,t,r)=>{var n=r(2109),a=r(6916),i=r(9662),s=r(8523),o=r(2534),c=r(408);n({target:"Promise",stat:!0,forced:r(612)},{allSettled:function(e){var t=this,r=s.f(t),n=r.resolve,l=r.reject,h=o((function(){var r=i(t.resolve),s=[],o=0,l=1;c(e,(function(e){var i=o++,c=!1;l++,a(r,t,e).then((function(e){c||(c=!0,s[i]={status:"fulfilled",value:e},--l||n(s))}),(function(e){c||(c=!0,s[i]={status:"rejected",reason:e},--l||n(s))}))})),--l||n(s)}));return h.error&&l(h.value),r.promise}})},821:(e,t,r)=>{var n=r(2109),a=r(6916),i=r(9662),s=r(8523),o=r(2534),c=r(408);n({target:"Promise",stat:!0,forced:r(612)},{all:function(e){var t=this,r=s.f(t),n=r.resolve,l=r.reject,h=o((function(){var r=i(t.resolve),s=[],o=0,h=1;c(e,(function(e){var i=o++,c=!1;h++,a(r,t,e).then((function(e){c||(c=!0,s[i]=e,--h||n(s))}),l)})),--h||n(s)}));return h.error&&l(h.value),r.promise}})},4164:(e,t,r)=>{var n=r(2109),a=r(1913),i=r(3702).CONSTRUCTOR,s=r(2492),o=r(5005),c=r(614),l=r(8052),h=s&&s.prototype;if(n({target:"Promise",proto:!0,forced:i,real:!0},{catch:function(e){return this.then(void 0,e)}}),!a&&c(s)){var u=o("Promise").prototype.catch;h.catch!==u&&l(h,"catch",u,{unsafe:!0})}},3401:(e,t,r)=>{var n,a,i,s=r(2109),o=r(1913),c=r(5268),l=r(7854),h=r(6916),u=r(8052),d=r(7674),f=r(8003),g=r(6340),p=r(9662),m=r(614),b=r(111),y=r(5787),w=r(6707),v=r(261).set,x=r(5948),S=r(842),A=r(2534),k=r(8572),C=r(9909),O=r(2492),F=r(3702),I=r(8523),T="Promise",M=F.CONSTRUCTOR,E=F.REJECTION_EVENT,P=F.SUBCLASSING,R=C.getterFor(T),N=C.set,D=O&&O.prototype,B=O,L=D,_=l.TypeError,j=l.document,U=l.process,$=I.f,X=$,H=!!(j&&j.createEvent&&l.dispatchEvent),q="unhandledrejection",z=function(e){var t;return!(!b(e)||!m(t=e.then))&&t},G=function(e,t){var r,n,a,i=t.value,s=1==t.state,o=s?e.ok:e.fail,c=e.resolve,l=e.reject,u=e.domain;try{o?(s||(2===t.rejection&&J(t),t.rejection=1),!0===o?r=i:(u&&u.enter(),r=o(i),u&&(u.exit(),a=!0)),r===e.promise?l(_("Promise-chain cycle")):(n=z(r))?h(n,r,c,l):c(r)):l(i)}catch(e){u&&!a&&u.exit(),l(e)}},W=function(e,t){e.notified||(e.notified=!0,x((function(){for(var r,n=e.reactions;r=n.get();)G(r,e);e.notified=!1,t&&!e.rejection&&K(e)})))},V=function(e,t,r){var n,a;H?((n=j.createEvent("Event")).promise=t,n.reason=r,n.initEvent(e,!1,!0),l.dispatchEvent(n)):n={promise:t,reason:r},!E&&(a=l["on"+e])?a(n):e===q&&S("Unhandled promise rejection",r)},K=function(e){h(v,l,(function(){var t,r=e.facade,n=e.value;if(Y(e)&&(t=A((function(){c?U.emit("unhandledRejection",n,r):V(q,r,n)})),e.rejection=c||Y(e)?2:1,t.error))throw t.value}))},Y=function(e){return 1!==e.rejection&&!e.parent},J=function(e){h(v,l,(function(){var t=e.facade;c?U.emit("rejectionHandled",t):V("rejectionhandled",t,e.value)}))},Z=function(e,t,r){return function(n){e(t,n,r)}},Q=function(e,t,r){e.done||(e.done=!0,r&&(e=r),e.value=t,e.state=2,W(e,!0))},ee=function(e,t,r){if(!e.done){e.done=!0,r&&(e=r);try{if(e.facade===t)throw _("Promise can't be resolved itself");var n=z(t);n?x((function(){var r={done:!1};try{h(n,t,Z(ee,r,e),Z(Q,r,e))}catch(t){Q(r,t,e)}})):(e.value=t,e.state=1,W(e,!1))}catch(t){Q({done:!1},t,e)}}};if(M&&(L=(B=function(e){y(this,L),p(e),h(n,this);var t=R(this);try{e(Z(ee,t),Z(Q,t))}catch(e){Q(t,e)}}).prototype,(n=function(e){N(this,{type:T,done:!1,notified:!1,parent:!1,reactions:new k,rejection:!1,state:0,value:void 0})}).prototype=u(L,"then",(function(e,t){var r=R(this),n=$(w(this,B));return r.parent=!0,n.ok=!m(e)||e,n.fail=m(t)&&t,n.domain=c?U.domain:void 0,0==r.state?r.reactions.add(n):x((function(){G(n,r)})),n.promise})),a=function(){var e=new n,t=R(e);this.promise=e,this.resolve=Z(ee,t),this.reject=Z(Q,t)},I.f=$=function(e){return e===B||void 0===e?new a(e):X(e)},!o&&m(O)&&D!==Object.prototype)){i=D.then,P||u(D,"then",(function(e,t){var r=this;return new B((function(e,t){h(i,r,e,t)})).then(e,t)}),{unsafe:!0});try{delete D.constructor}catch(e){}d&&d(D,L)}s({global:!0,constructor:!0,wrap:!0,forced:M},{Promise:B}),f(B,T,!1,!0),g(T)},7727:(e,t,r)=>{var n=r(2109),a=r(1913),i=r(2492),s=r(7293),o=r(5005),c=r(614),l=r(6707),h=r(9478),u=r(8052),d=i&&i.prototype;if(n({target:"Promise",proto:!0,real:!0,forced:!!i&&s((function(){d.finally.call({then:function(){}},(function(){}))}))},{finally:function(e){var t=l(this,o("Promise")),r=c(e);return this.then(r?function(r){return h(t,e()).then((function(){return r}))}:e,r?function(r){return h(t,e()).then((function(){throw r}))}:e)}}),!a&&c(i)){var f=o("Promise").prototype.finally;d.finally!==f&&u(d,"finally",f,{unsafe:!0})}},8674:(e,t,r)=>{r(3401),r(821),r(4164),r(6027),r(683),r(6294)},6027:(e,t,r)=>{var n=r(2109),a=r(6916),i=r(9662),s=r(8523),o=r(2534),c=r(408);n({target:"Promise",stat:!0,forced:r(612)},{race:function(e){var t=this,r=s.f(t),n=r.reject,l=o((function(){var s=i(t.resolve);c(e,(function(e){a(s,t,e).then(r.resolve,n)}))}));return l.error&&n(l.value),r.promise}})},683:(e,t,r)=>{var n=r(2109),a=r(6916),i=r(8523);n({target:"Promise",stat:!0,forced:r(3702).CONSTRUCTOR},{reject:function(e){var t=i.f(this);return a(t.reject,void 0,e),t.promise}})},6294:(e,t,r)=>{var n=r(2109),a=r(5005),i=r(1913),s=r(2492),o=r(3702).CONSTRUCTOR,c=r(9478),l=a("Promise"),h=i&&!o;n({target:"Promise",stat:!0,forced:i||o},{resolve:function(e){return c(h&&this===l?s:this,e)}})},1299:(e,t,r)=>{var n=r(2109),a=r(7854),i=r(8003);n({global:!0},{Reflect:{}}),i(a.Reflect,"Reflect",!0)},4603:(e,t,r)=>{var n=r(9781),a=r(7854),i=r(1702),s=r(4705),o=r(9587),c=r(8880),l=r(8006).f,h=r(7976),u=r(7850),d=r(1340),f=r(4706),g=r(2999),p=r(2626),m=r(8052),b=r(7293),y=r(2597),w=r(9909).enforce,v=r(6340),x=r(5112),S=r(9441),A=r(7168),k=x("match"),C=a.RegExp,O=C.prototype,F=a.SyntaxError,I=i(O.exec),T=i("".charAt),M=i("".replace),E=i("".indexOf),P=i("".slice),R=/^\\?<[^\\s\\d!#%&*+<=>@^][^\\s!#%&*+<=>@^]*>/,N=/a/g,D=/a/g,B=new C(N)!==N,L=g.MISSED_STICKY,_=g.UNSUPPORTED_Y;if(s("RegExp",n&&(!B||L||S||A||b((function(){return D[k]=!1,C(N)!=N||C(D)==D||"/a/i"!=C(N,"i")}))))){for(var j=function(e,t){var r,n,a,i,s,l,g=h(O,this),p=u(e),m=void 0===t,b=[],v=e;if(!g&&p&&m&&e.constructor===j)return e;if((p||h(O,e))&&(e=e.source,m&&(t=f(v))),e=void 0===e?"":d(e),t=void 0===t?"":d(t),v=e,S&&"dotAll"in N&&(n=!!t&&E(t,"s")>-1)&&(t=M(t,/s/g,"")),r=t,L&&"sticky"in N&&(a=!!t&&E(t,"y")>-1)&&_&&(t=M(t,/y/g,"")),A&&(i=function(e){for(var t,r=e.length,n=0,a="",i=[],s={},o=!1,c=!1,l=0,h="";n<=r;n++){if("\\\\"===(t=T(e,n)))t+=T(e,++n);else if("]"===t)o=!1;else if(!o)switch(!0){case"["===t:o=!0;break;case"("===t:I(R,P(e,n+1))&&(n+=2,c=!0),a+=t,l++;continue;case">"===t&&c:if(""===h||y(s,h))throw new F("Invalid capture group name");s[h]=!0,i[i.length]=[h,l],c=!1,h="";continue}c?h+=t:a+=t}return[a,i]}(e),e=i[0],b=i[1]),s=o(C(e,t),g?this:O,j),(n||a||b.length)&&(l=w(s),n&&(l.dotAll=!0,l.raw=j(function(e){for(var t,r=e.length,n=0,a="",i=!1;n<=r;n++)"\\\\"!==(t=T(e,n))?i||"."!==t?("["===t?i=!0:"]"===t&&(i=!1),a+=t):a+="[\\\\s\\\\S]":a+=t+T(e,++n);return a}(e),r)),a&&(l.sticky=!0),b.length&&(l.groups=b)),e!==v)try{c(s,"source",""===v?"(?:)":v)}catch(e){}return s},U=l(C),$=0;U.length>$;)p(j,C,U[$++]);O.constructor=j,j.prototype=O,m(a,"RegExp",j,{constructor:!0})}v("RegExp")},8450:(e,t,r)=>{var n=r(9781),a=r(9441),i=r(4326),s=r(7045),o=r(9909).get,c=RegExp.prototype,l=TypeError;n&&a&&s(c,"dotAll",{configurable:!0,get:function(){if(this!==c){if("RegExp"===i(this))return!!o(this).dotAll;throw l("Incompatible receiver, RegExp required")}}})},4916:(e,t,r)=>{var n=r(2109),a=r(2261);n({target:"RegExp",proto:!0,forced:/./.exec!==a},{exec:a})},2087:(e,t,r)=>{var n=r(7854),a=r(9781),i=r(7045),s=r(7066),o=r(7293),c=n.RegExp,l=c.prototype;a&&o((function(){var e=!0;try{c(".","d")}catch(t){e=!1}var t={},r="",n=e?"dgimsy":"gimsy",a=function(e,n){Object.defineProperty(t,e,{get:function(){return r+=n,!0}})},i={dotAll:"s",global:"g",ignoreCase:"i",multiline:"m",sticky:"y"};for(var s in e&&(i.hasIndices="d"),i)a(s,i[s]);return Object.getOwnPropertyDescriptor(l,"flags").get.call(t)!==n||r!==n}))&&i(l,"flags",{configurable:!0,get:s})},7601:(e,t,r)=>{r(4916);var n,a,i=r(2109),s=r(6916),o=r(614),c=r(9670),l=r(1340),h=(n=!1,(a=/[ac]/).exec=function(){return n=!0,/./.exec.apply(this,arguments)},!0===a.test("abc")&&n),u=/./.test;i({target:"RegExp",proto:!0,forced:!h},{test:function(e){var t=c(this),r=l(e),n=t.exec;if(!o(n))return s(u,t,r);var a=s(n,t,r);return null!==a&&(c(a),!0)}})},9714:(e,t,r)=>{var n=r(6530).PROPER,a=r(8052),i=r(9670),s=r(1340),o=r(7293),c=r(4706),l="toString",h=RegExp.prototype[l],u=o((function(){return"/a/b"!=h.call({source:"a",flags:"b"})})),d=n&&h.name!=l;(u||d)&&a(RegExp.prototype,l,(function(){var e=i(this);return"/"+s(e.source)+"/"+s(c(e))}),{unsafe:!0})},4506:(e,t,r)=>{var n=r(2109),a=r(1702),i=r(4488),s=r(9303),o=r(1340),c=r(7293),l=a("".charAt);n({target:"String",proto:!0,forced:c((function(){return"\\ud842"!=="𠮷".at(-2)}))},{at:function(e){var t=o(i(this)),r=t.length,n=s(e),a=n>=0?n:r+n;return a<0||a>=r?void 0:l(t,a)}})},7852:(e,t,r)=>{var n,a=r(2109),i=r(1470),s=r(1236).f,o=r(7466),c=r(1340),l=r(3929),h=r(4488),u=r(4964),d=r(1913),f=i("".endsWith),g=i("".slice),p=Math.min,m=u("endsWith");a({target:"String",proto:!0,forced:!(!d&&!m&&(n=s(String.prototype,"endsWith"),n&&!n.writable)||m)},{endsWith:function(e){var t=c(h(this));l(e);var r=arguments.length>1?arguments[1]:void 0,n=t.length,a=void 0===r?n:p(o(r),n),i=c(e);return f?f(t,i,a):g(t,a-i.length,a)===i}})},2023:(e,t,r)=>{var n=r(2109),a=r(1702),i=r(3929),s=r(4488),o=r(1340),c=r(4964),l=a("".indexOf);n({target:"String",proto:!0,forced:!c("includes")},{includes:function(e){return!!~l(o(s(this)),o(i(e)),arguments.length>1?arguments[1]:void 0)}})},8783:(e,t,r)=>{var n=r(8710).charAt,a=r(1340),i=r(9909),s=r(1656),o=r(6178),c="String Iterator",l=i.set,h=i.getterFor(c);s(String,"String",(function(e){l(this,{type:c,string:a(e),index:0})}),(function(){var e,t=h(this),r=t.string,a=t.index;return a>=r.length?o(void 0,!0):(e=n(r,a),t.index+=e.length,o(e,!1))}))},4723:(e,t,r)=>{var n=r(6916),a=r(7007),i=r(9670),s=r(8554),o=r(7466),c=r(1340),l=r(4488),h=r(8173),u=r(1530),d=r(7651);a("match",(function(e,t,r){return[function(t){var r=l(this),a=s(t)?void 0:h(t,e);return a?n(a,t,r):new RegExp(t)[e](c(r))},function(e){var n=i(this),a=c(e),s=r(t,n,a);if(s.done)return s.value;if(!n.global)return d(n,a);var l=n.unicode;n.lastIndex=0;for(var h,f=[],g=0;null!==(h=d(n,a));){var p=c(h[0]);f[g]=p,""===p&&(n.lastIndex=u(a,o(n.lastIndex),l)),g++}return 0===g?null:f}]}))},8757:(e,t,r)=>{var n=r(2109),a=r(6916),i=r(1702),s=r(4488),o=r(614),c=r(8554),l=r(7850),h=r(1340),u=r(8173),d=r(4706),f=r(647),g=r(5112),p=r(1913),m=g("replace"),b=TypeError,y=i("".indexOf),w=i("".replace),v=i("".slice),x=Math.max,S=function(e,t,r){return r>e.length?-1:""===t?r:y(e,t,r)};n({target:"String",proto:!0},{replaceAll:function(e,t){var r,n,i,g,A,k,C,O,F,I=s(this),T=0,M=0,E="";if(!c(e)){if((r=l(e))&&(n=h(s(d(e))),!~y(n,"g")))throw b("\`.replaceAll\` does not allow non-global regexes");if(i=u(e,m))return a(i,e,I,t);if(p&&r)return w(h(I),e,t)}for(g=h(I),A=h(e),(k=o(t))||(t=h(t)),C=A.length,O=x(1,C),T=S(g,A,0);-1!==T;)F=k?h(t(A,T,g)):f(A,g,T,[],void 0,t),E+=v(g,M,T)+F,M=T+C,T=S(g,A,T+O);return M{var n=r(2104),a=r(6916),i=r(1702),s=r(7007),o=r(7293),c=r(9670),l=r(614),h=r(8554),u=r(9303),d=r(7466),f=r(1340),g=r(4488),p=r(1530),m=r(8173),b=r(647),y=r(7651),w=r(5112)("replace"),v=Math.max,x=Math.min,S=i([].concat),A=i([].push),k=i("".indexOf),C=i("".slice),O="$0"==="a".replace(/./,"$0"),F=!!/./[w]&&""===/./[w]("a","$0");s("replace",(function(e,t,r){var i=F?"$":"$0";return[function(e,r){var n=g(this),i=h(e)?void 0:m(e,w);return i?a(i,e,n,r):a(t,f(n),e,r)},function(e,a){var s=c(this),o=f(e);if("string"==typeof a&&-1===k(a,i)&&-1===k(a,"$<")){var h=r(t,s,o,a);if(h.done)return h.value}var g=l(a);g||(a=f(a));var m=s.global;if(m){var w=s.unicode;s.lastIndex=0}for(var O=[];;){var F=y(s,o);if(null===F)break;if(A(O,F),!m)break;""===f(F[0])&&(s.lastIndex=p(o,d(s.lastIndex),w))}for(var I,T="",M=0,E=0;E=M&&(T+=C(o,M,R)+_,M=R+P.length)}return T+C(o,M)}]}),!!o((function(){var e=/./;return e.exec=function(){var e=[];return e.groups={a:"7"},e},"7"!=="".replace(e,"$")}))||!O||F)},3123:(e,t,r)=>{var n=r(2104),a=r(6916),i=r(1702),s=r(7007),o=r(9670),c=r(8554),l=r(7850),h=r(4488),u=r(6707),d=r(1530),f=r(7466),g=r(1340),p=r(8173),m=r(1589),b=r(7651),y=r(2261),w=r(2999),v=r(7293),x=w.UNSUPPORTED_Y,S=4294967295,A=Math.min,k=[].push,C=i(/./.exec),O=i(k),F=i("".slice);s("split",(function(e,t,r){var i;return i="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(e,r){var i=g(h(this)),s=void 0===r?S:r>>>0;if(0===s)return[];if(void 0===e)return[i];if(!l(e))return a(t,i,e,s);for(var o,c,u,d=[],f=(e.ignoreCase?"i":"")+(e.multiline?"m":"")+(e.unicode?"u":"")+(e.sticky?"y":""),p=0,b=new RegExp(e.source,f+"g");(o=a(y,b,i))&&!((c=b.lastIndex)>p&&(O(d,F(i,p,o.index)),o.length>1&&o.index=s));)b.lastIndex===o.index&&b.lastIndex++;return p===i.length?!u&&C(b,"")||O(d,""):O(d,F(i,p)),d.length>s?m(d,0,s):d}:"0".split(void 0,0).length?function(e,r){return void 0===e&&0===r?[]:a(t,this,e,r)}:t,[function(t,r){var n=h(this),s=c(t)?void 0:p(t,e);return s?a(s,t,n,r):a(i,g(n),t,r)},function(e,n){var a=o(this),s=g(e),c=r(i,a,s,n,i!==t);if(c.done)return c.value;var l=u(a,RegExp),h=a.unicode,p=(a.ignoreCase?"i":"")+(a.multiline?"m":"")+(a.unicode?"u":"")+(x?"g":"y"),m=new l(x?"^(?:"+a.source+")":a,p),y=void 0===n?S:n>>>0;if(0===y)return[];if(0===s.length)return null===b(m,s)?[s]:[];for(var w=0,v=0,k=[];v{var n,a=r(2109),i=r(1470),s=r(1236).f,o=r(7466),c=r(1340),l=r(3929),h=r(4488),u=r(4964),d=r(1913),f=i("".startsWith),g=i("".slice),p=Math.min,m=u("startsWith");a({target:"String",proto:!0,forced:!(!d&&!m&&(n=s(String.prototype,"startsWith"),n&&!n.writable)||m)},{startsWith:function(e){var t=c(h(this));l(e);var r=o(p(arguments.length>1?arguments[1]:void 0,t.length)),n=c(e);return f?f(t,n,r):g(t,r,r+n.length)===n}})},3210:(e,t,r)=>{var n=r(2109),a=r(3111).trim;n({target:"String",proto:!0,forced:r(6091)("trim")},{trim:function(){return a(this)}})},1817:(e,t,r)=>{var n=r(2109),a=r(9781),i=r(7854),s=r(1702),o=r(2597),c=r(614),l=r(7976),h=r(1340),u=r(7045),d=r(9920),f=i.Symbol,g=f&&f.prototype;if(a&&c(f)&&(!("description"in g)||void 0!==f().description)){var p={},m=function(){var e=arguments.length<1||void 0===arguments[0]?void 0:h(arguments[0]),t=l(g,this)?new f(e):void 0===e?f():f(e);return""===e&&(p[t]=!0),t};d(m,f),m.prototype=g,g.constructor=m;var b="Symbol(test)"==String(f("test")),y=s(g.valueOf),w=s(g.toString),v=/^Symbol\\((.*)\\)[^)]+$/,x=s("".replace),S=s("".slice);u(g,"description",{configurable:!0,get:function(){var e=y(this);if(o(p,e))return"";var t=w(e),r=b?S(t,7,-1):x(t,v,"$1");return""===r?void 0:r}}),n({global:!0,constructor:!0,forced:!0},{Symbol:m})}},8675:(e,t,r)=>{var n=r(260),a=r(6244),i=r(9303),s=n.aTypedArray;(0,n.exportTypedArrayMethod)("at",(function(e){var t=s(this),r=a(t),n=i(e),o=n>=0?n:r+n;return o<0||o>=r?void 0:t[o]}))},3105:(e,t,r)=>{var n=r(260),a=r(1285),i=r(4599),s=r(648),o=r(6916),c=r(1702),l=r(7293),h=n.aTypedArray,u=n.exportTypedArrayMethod,d=c("".slice);u("fill",(function(e){var t=arguments.length;h(this);var r="Big"===d(s(this),0,3)?i(e):+e;return o(a,this,r,t>1?arguments[1]:void 0,t>2?arguments[2]:void 0)}),l((function(){var e=0;return new Int8Array(2).fill({valueOf:function(){return e++}}),1!==e})))},2958:(e,t,r)=>{var n=r(260),a=r(9671).findLastIndex,i=n.aTypedArray;(0,n.exportTypedArrayMethod)("findLastIndex",(function(e){return a(i(this),e,arguments.length>1?arguments[1]:void 0)}))},3408:(e,t,r)=>{var n=r(260),a=r(9671).findLast,i=n.aTypedArray;(0,n.exportTypedArrayMethod)("findLast",(function(e){return a(i(this),e,arguments.length>1?arguments[1]:void 0)}))},4197:(e,t,r)=>{r(9843)("Float32",(function(e){return function(t,r,n){return e(this,t,r,n)}}))},6495:(e,t,r)=>{r(9843)("Float64",(function(e){return function(t,r,n){return e(this,t,r,n)}}))},5109:(e,t,r)=>{r(9843)("Int16",(function(e){return function(t,r,n){return e(this,t,r,n)}}))},5125:(e,t,r)=>{r(9843)("Int32",(function(e){return function(t,r,n){return e(this,t,r,n)}}))},7145:(e,t,r)=>{r(9843)("Int8",(function(e){return function(t,r,n){return e(this,t,r,n)}}))},3462:(e,t,r)=>{var n=r(7854),a=r(6916),i=r(260),s=r(6244),o=r(4590),c=r(7908),l=r(7293),h=n.RangeError,u=n.Int8Array,d=u&&u.prototype,f=d&&d.set,g=i.aTypedArray,p=i.exportTypedArrayMethod,m=!l((function(){var e=new Uint8ClampedArray(2);return a(f,e,{length:1,0:3},1),3!==e[1]})),b=m&&i.NATIVE_ARRAY_BUFFER_VIEWS&&l((function(){var e=new u(2);return e.set(1),e.set("2",1),0!==e[0]||2!==e[1]}));p("set",(function(e){g(this);var t=o(arguments.length>1?arguments[1]:void 0,1),r=c(e);if(m)return a(f,this,r,t);var n=this.length,i=s(r),l=0;if(i+t>n)throw h("Wrong length");for(;l{var n=r(7854),a=r(1470),i=r(7293),s=r(9662),o=r(4362),c=r(260),l=r(8886),h=r(256),u=r(7392),d=r(8008),f=c.aTypedArray,g=c.exportTypedArrayMethod,p=n.Uint16Array,m=p&&a(p.prototype.sort),b=!(!m||i((function(){m(new p(2),null)}))&&i((function(){m(new p(2),{})}))),y=!!m&&!i((function(){if(u)return u<74;if(l)return l<67;if(h)return!0;if(d)return d<602;var e,t,r=new p(516),n=Array(516);for(e=0;e<516;e++)t=e%4,r[e]=515-e,n[e]=e-2*t+3;for(m(r,(function(e,t){return(e/4|0)-(t/4|0)})),e=0;e<516;e++)if(r[e]!==n[e])return!0}));g("sort",(function(e){return void 0!==e&&s(e),y?m(this,e):o(f(this),function(e){return function(t,r){return void 0!==e?+e(t,r)||0:r!=r?-1:t!=t?1:0===t&&0===r?1/t>0&&1/r<0?1:-1:t>r}}(e))}),!y||b)},2974:(e,t,r)=>{var n=r(7854),a=r(2104),i=r(260),s=r(7293),o=r(206),c=n.Int8Array,l=i.aTypedArray,h=i.exportTypedArrayMethod,u=[].toLocaleString,d=!!c&&s((function(){u.call(new c(1))}));h("toLocaleString",(function(){return a(u,d?o(l(this)):l(this),o(arguments))}),s((function(){return[1,2].toLocaleString()!=new c([1,2]).toLocaleString()}))||!s((function(){c.prototype.toLocaleString.call([1,2])})))},1439:(e,t,r)=>{var n=r(1843),a=r(260),i=a.aTypedArray,s=a.exportTypedArrayMethod,o=a.getTypedArrayConstructor;s("toReversed",(function(){return n(i(this),o(this))}))},7585:(e,t,r)=>{var n=r(260),a=r(1702),i=r(9662),s=r(7745),o=n.aTypedArray,c=n.getTypedArrayConstructor,l=n.exportTypedArrayMethod,h=a(n.TypedArrayPrototype.sort);l("toSorted",(function(e){void 0!==e&&i(e);var t=o(this),r=s(c(t),t);return h(r,e)}))},8255:(e,t,r)=>{r(9843)("Uint16",(function(e){return function(t,r,n){return e(this,t,r,n)}}))},9135:(e,t,r)=>{r(9843)("Uint32",(function(e){return function(t,r,n){return e(this,t,r,n)}}))},2472:(e,t,r)=>{r(9843)("Uint8",(function(e){return function(t,r,n){return e(this,t,r,n)}}))},9743:(e,t,r)=>{r(9843)("Uint8",(function(e){return function(t,r,n){return e(this,t,r,n)}}),!0)},5315:(e,t,r)=>{var n=r(1572),a=r(260),i=r(4067),s=r(9303),o=r(4599),c=a.aTypedArray,l=a.getTypedArrayConstructor,h=a.exportTypedArrayMethod,u=!!function(){try{new Int8Array(1).with(2,{valueOf:function(){throw 8}})}catch(e){return 8===e}}();h("with",{with:function(e,t){var r=c(this),a=s(e),h=i(r)?o(t):+t;return n(r,l(r),a,h)}}.with,!u)},1202:(e,t,r)=>{var n,a=r(6677),i=r(7854),s=r(1702),o=r(9190),c=r(2423),l=r(7710),h=r(9320),u=r(111),d=r(9909).enforce,f=r(7293),g=r(4811),p=Object,m=Array.isArray,b=p.isExtensible,y=p.isFrozen,w=p.isSealed,v=p.freeze,x=p.seal,S={},A={},k=!i.ActiveXObject&&"ActiveXObject"in i,C=function(e){return function(){return e(this,arguments.length?arguments[0]:void 0)}},O=l("WeakMap",C,h),F=O.prototype,I=s(F.set);if(g)if(k){n=h.getConstructor(C,"WeakMap",!0),c.enable();var T=s(F.delete),M=s(F.has),E=s(F.get);o(F,{delete:function(e){if(u(e)&&!b(e)){var t=d(this);return t.frozen||(t.frozen=new n),T(this,e)||t.frozen.delete(e)}return T(this,e)},has:function(e){if(u(e)&&!b(e)){var t=d(this);return t.frozen||(t.frozen=new n),M(this,e)||t.frozen.has(e)}return M(this,e)},get:function(e){if(u(e)&&!b(e)){var t=d(this);return t.frozen||(t.frozen=new n),M(this,e)?E(this,e):t.frozen.get(e)}return E(this,e)},set:function(e,t){if(u(e)&&!b(e)){var r=d(this);r.frozen||(r.frozen=new n),M(this,e)?I(this,e,t):r.frozen.set(e,t)}else I(this,e,t);return this}})}else a&&f((function(){var e=v([]);return I(new O,e,1),!y(e)}))&&o(F,{set:function(e,t){var r;return m(e)&&(y(e)?r=S:w(e)&&(r=A)),I(this,e,t),r==S&&v(e),r==A&&x(e),this}})},4129:(e,t,r)=>{r(1202)},3948:(e,t,r)=>{var n=r(7854),a=r(8324),i=r(8509),s=r(6992),o=r(8880),c=r(5112),l=c("iterator"),h=c("toStringTag"),u=s.values,d=function(e,t){if(e){if(e[l]!==u)try{o(e,l,u)}catch(t){e[l]=u}if(e[h]||o(e,h,t),a[t])for(var r in s)if(e[r]!==s[r])try{o(e,r,s[r])}catch(t){e[r]=s[r]}}};for(var f in a)d(n[f]&&n[f].prototype,f);d(i,"DOMTokenList")},7714:(e,t,r)=>{var n=r(2109),a=r(4038),i=r(5005),s=r(7293),o=r(30),c=r(9114),l=r(3070).f,h=r(8052),u=r(7045),d=r(2597),f=r(5787),g=r(9670),p=r(7762),m=r(6277),b=r(3678),y=r(1060),w=r(9909),v=r(9781),x=r(1913),S="DOMException",A="DATA_CLONE_ERR",k=i("Error"),C=i(S)||function(){try{(new(i("MessageChannel")||a("worker_threads").MessageChannel)).port1.postMessage(new WeakMap)}catch(e){if(e.name==A&&25==e.code)return e.constructor}}(),O=C&&C.prototype,F=k.prototype,I=w.set,T=w.getterFor(S),M="stack"in k(S),E=function(e){return d(b,e)&&b[e].m?b[e].c:0},P=function(){f(this,R);var e=arguments.length,t=m(e<1?void 0:arguments[0]),r=m(e<2?void 0:arguments[1],"Error"),n=E(r);if(I(this,{type:S,name:r,message:t,code:n}),v||(this.name=r,this.message=t,this.code=n),M){var a=k(t);a.name=S,l(this,"stack",c(1,y(a.stack,1)))}},R=P.prototype=o(F),N=function(e){return{enumerable:!0,configurable:!0,get:e}},D=function(e){return N((function(){return T(this)[e]}))};v&&(u(R,"code",D("code")),u(R,"message",D("message")),u(R,"name",D("name"))),l(R,"constructor",c(1,P));var B=s((function(){return!(new C instanceof k)})),L=B||s((function(){return F.toString!==p||"2: 1"!==String(new C(1,2))})),_=B||s((function(){return 25!==new C(1,"DataCloneError").code})),j=B||25!==C[A]||25!==O[A],U=x?L||_||j:B;n({global:!0,constructor:!0,forced:U},{DOMException:U?P:C});var $=i(S),X=$.prototype;for(var H in L&&(x||C===$)&&h(X,"toString",p),_&&v&&C===$&&u(X,"code",N((function(){return E(g(this).name)}))),b)if(d(b,H)){var q=b[H],z=q.s,G=c(6,q.c);d($,z)||l($,z,G),d(X,z)||l(X,z,G)}},2801:(e,t,r)=>{var n=r(2109),a=r(7854),i=r(5005),s=r(9114),o=r(3070).f,c=r(2597),l=r(5787),h=r(9587),u=r(6277),d=r(3678),f=r(1060),g=r(9781),p=r(1913),m="DOMException",b=i("Error"),y=i(m),w=function(){l(this,v);var e=arguments.length,t=u(e<1?void 0:arguments[0]),r=u(e<2?void 0:arguments[1],"Error"),n=new y(t,r),a=b(t);return a.name=m,o(n,"stack",s(1,f(a.stack,1))),h(n,this,w),n},v=w.prototype=y.prototype,x="stack"in b(m),S="stack"in new y(1,2),A=y&&g&&Object.getOwnPropertyDescriptor(a,m),k=!(!A||A.writable&&A.configurable),C=x&&!k&&!S;n({global:!0,constructor:!0,forced:p||C},{DOMException:C?w:y});var O=i(m),F=O.prototype;if(F.constructor!==O)for(var I in p||o(F,"constructor",s(1,O)),d)if(c(d,I)){var T=d[I],M=T.s;c(O,M)||o(O,M,s(6,T.c))}},1174:(e,t,r)=>{var n=r(5005),a="DOMException";r(8003)(n(a),a)},1550:(e,t,r)=>{var n=r(2109),a=r(7854),i=r(7045),s=r(9781),o=TypeError,c=Object.defineProperty,l=a.self!==a;try{if(s){var h=Object.getOwnPropertyDescriptor(a,"self");!l&&h&&h.get&&h.enumerable||i(a,"self",{get:function(){return a},set:function(e){if(this!==a)throw o("Illegal invocation");c(a,"self",{value:e,writable:!0,configurable:!0,enumerable:!0})},configurable:!0,enumerable:!0})}else n({global:!0,simple:!0,forced:l},{self:a})}catch(e){}},5556:(e,t,r)=>{r(6992);var n=r(2109),a=r(7854),i=r(6916),s=r(1702),o=r(9781),c=r(5143),l=r(8052),h=r(7045),u=r(9190),d=r(8003),f=r(3061),g=r(9909),p=r(5787),m=r(614),b=r(2597),y=r(9974),w=r(648),v=r(9670),x=r(111),S=r(1340),A=r(30),k=r(9114),C=r(4121),O=r(1246),F=r(8053),I=r(5112),T=r(4362),M=I("iterator"),E="URLSearchParams",P=E+"Iterator",R=g.set,N=g.getterFor(E),D=g.getterFor(P),B=Object.getOwnPropertyDescriptor,L=function(e){if(!o)return a[e];var t=B(a,e);return t&&t.value},_=L("fetch"),j=L("Request"),U=L("Headers"),$=j&&j.prototype,X=U&&U.prototype,H=a.RegExp,q=a.TypeError,z=a.decodeURIComponent,G=a.encodeURIComponent,W=s("".charAt),V=s([].join),K=s([].push),Y=s("".replace),J=s([].shift),Z=s([].splice),Q=s("".split),ee=s("".slice),te=/\\+/g,re=Array(4),ne=function(e){return re[e-1]||(re[e-1]=H("((?:%[\\\\da-f]{2}){"+e+"})","gi"))},ae=function(e){try{return z(e)}catch(t){return e}},ie=function(e){var t=Y(e,te," "),r=4;try{return z(t)}catch(e){for(;r;)t=Y(t,ne(r--),ae);return t}},se=/[!'()~]|%20/g,oe={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+"},ce=function(e){return oe[e]},le=function(e){return Y(G(e),se,ce)},he=f((function(e,t){R(this,{type:P,iterator:C(N(e).entries),kind:t})}),"Iterator",(function(){var e=D(this),t=e.kind,r=e.iterator.next(),n=r.value;return r.done||(r.value="keys"===t?n.key:"values"===t?n.value:[n.key,n.value]),r}),!0),ue=function(e){this.entries=[],this.url=null,void 0!==e&&(x(e)?this.parseObject(e):this.parseQuery("string"==typeof e?"?"===W(e,0)?ee(e,1):e:S(e)))};ue.prototype={type:E,bindURL:function(e){this.url=e,this.update()},parseObject:function(e){var t,r,n,a,s,o,c,l=O(e);if(l)for(r=(t=C(e,l)).next;!(n=i(r,t)).done;){if(s=(a=C(v(n.value))).next,(o=i(s,a)).done||(c=i(s,a)).done||!i(s,a).done)throw q("Expected sequence with length 2");K(this.entries,{key:S(o.value),value:S(c.value)})}else for(var h in e)b(e,h)&&K(this.entries,{key:h,value:S(e[h])})},parseQuery:function(e){if(e)for(var t,r,n=Q(e,"&"),a=0;a0?arguments[0]:void 0));o||(this.size=e.entries.length)},fe=de.prototype;if(u(fe,{append:function(e,t){var r=N(this);F(arguments.length,2),K(r.entries,{key:S(e),value:S(t)}),o||this.length++,r.updateURL()},delete:function(e){for(var t=N(this),r=F(arguments.length,1),n=t.entries,a=S(e),i=r<2?void 0:arguments[1],s=void 0===i?i:S(i),c=0;ct.key?1:-1})),e.updateURL()},forEach:function(e){for(var t,r=N(this).entries,n=y(e,arguments.length>1?arguments[1]:void 0),a=0;a1?me(arguments[1]):{})}}),m(j)){var be=function(e){return p(this,$),new j(e,arguments.length>1?me(arguments[1]):{})};$.constructor=be,be.prototype=$,n({global:!0,constructor:!0,dontCallGetSet:!0,forced:!0},{Request:be})}}e.exports={URLSearchParams:de,getState:N}},6229:(e,t,r)=>{var n=r(8052),a=r(1702),i=r(1340),s=r(8053),o=URLSearchParams,c=o.prototype,l=a(c.append),h=a(c.delete),u=a(c.forEach),d=a([].push),f=new o("a=1&a=2&b=3");f.delete("a",1),f.delete("b",void 0),f+""!="a=2"&&n(c,"delete",(function(e){var t=arguments.length,r=t<2?void 0:arguments[1];if(t&&void 0===r)return h(this,e);var n=[];u(this,(function(e,t){d(n,{key:t,value:e})})),s(t,1);for(var a,o=i(e),c=i(r),f=0,g=0,p=!1,m=n.length;f{var n=r(8052),a=r(1702),i=r(1340),s=r(8053),o=URLSearchParams,c=o.prototype,l=a(c.getAll),h=a(c.has),u=new o("a=1");!u.has("a",2)&&u.has("a",void 0)||n(c,"has",(function(e){var t=arguments.length,r=t<2?void 0:arguments[1];if(t&&void 0===r)return h(this,e);var n=l(this,e);s(t,1);for(var a=i(r),o=0;o{r(5556)},2062:(e,t,r)=>{var n=r(9781),a=r(1702),i=r(7045),s=URLSearchParams.prototype,o=a(s.forEach);n&&!("size"in s)&&i(s,"size",{get:function(){var e=0;return o(this,(function(){e++})),e},configurable:!0,enumerable:!0})},8789:(e,t,r)=>{r(8783);var n,a=r(2109),i=r(9781),s=r(5143),o=r(7854),c=r(9974),l=r(1702),h=r(8052),u=r(7045),d=r(5787),f=r(2597),g=r(1574),p=r(8457),m=r(1589),b=r(8710).codeAt,y=r(3197),w=r(1340),v=r(8003),x=r(8053),S=r(5556),A=r(9909),k=A.set,C=A.getterFor("URL"),O=S.URLSearchParams,F=S.getState,I=o.URL,T=o.TypeError,M=o.parseInt,E=Math.floor,P=Math.pow,R=l("".charAt),N=l(/./.exec),D=l([].join),B=l(1..toString),L=l([].pop),_=l([].push),j=l("".replace),U=l([].shift),$=l("".split),X=l("".slice),H=l("".toLowerCase),q=l([].unshift),z="Invalid scheme",G="Invalid host",W="Invalid port",V=/[a-z]/i,K=/[\\d+-.a-z]/i,Y=/\\d/,J=/^0x/i,Z=/^[0-7]+$/,Q=/^\\d+$/,ee=/^[\\da-f]+$/i,te=/[\\0\\t\\n\\r #%/:<>?@[\\\\\\]^|]/,re=/[\\0\\t\\n\\r #/:<>?@[\\\\\\]^|]/,ne=/^[\\u0000-\\u0020]+/,ae=/(^|[^\\u0000-\\u0020])[\\u0000-\\u0020]+$/,ie=/[\\t\\n\\r]/g,se=function(e){var t,r,n,a;if("number"==typeof e){for(t=[],r=0;r<4;r++)q(t,e%256),e=E(e/256);return D(t,".")}if("object"==typeof e){for(t="",n=function(e){for(var t=null,r=1,n=null,a=0,i=0;i<8;i++)0!==e[i]?(a>r&&(t=n,r=a),n=null,a=0):(null===n&&(n=i),++a);return a>r&&(t=n,r=a),t}(e),r=0;r<8;r++)a&&0===e[r]||(a&&(a=!1),n===r?(t+=r?":":"::",a=!0):(t+=B(e[r],16),r<7&&(t+=":")));return"["+t+"]"}return e},oe={},ce=g({},oe,{" ":1,'"':1,"<":1,">":1,"\`":1}),le=g({},ce,{"#":1,"?":1,"{":1,"}":1}),he=g({},le,{"/":1,":":1,";":1,"=":1,"@":1,"[":1,"\\\\":1,"]":1,"^":1,"|":1}),ue=function(e,t){var r=b(e,0);return r>32&&r<127&&!f(t,e)?e:encodeURIComponent(e)},de={ftp:21,file:null,http:80,https:443,ws:80,wss:443},fe=function(e,t){var r;return 2==e.length&&N(V,R(e,0))&&(":"==(r=R(e,1))||!t&&"|"==r)},ge=function(e){var t;return e.length>1&&fe(X(e,0,2))&&(2==e.length||"/"===(t=R(e,2))||"\\\\"===t||"?"===t||"#"===t)},pe=function(e){return"."===e||"%2e"===H(e)},me={},be={},ye={},we={},ve={},xe={},Se={},Ae={},ke={},Ce={},Oe={},Fe={},Ie={},Te={},Me={},Ee={},Pe={},Re={},Ne={},De={},Be={},Le=function(e,t,r){var n,a,i,s=w(e);if(t){if(a=this.parse(s))throw T(a);this.searchParams=null}else{if(void 0!==r&&(n=new Le(r,!0)),a=this.parse(s,null,n))throw T(a);(i=F(new O)).bindURL(this),this.searchParams=i}};Le.prototype={type:"URL",parse:function(e,t,r){var a,i,s,o,c,l=this,h=t||me,u=0,d="",g=!1,b=!1,y=!1;for(e=w(e),t||(l.scheme="",l.username="",l.password="",l.host=null,l.port=null,l.path=[],l.query=null,l.fragment=null,l.cannotBeABaseURL=!1,e=j(e,ne,""),e=j(e,ae,"$1")),e=j(e,ie,""),a=p(e);u<=a.length;){switch(i=a[u],h){case me:if(!i||!N(V,i)){if(t)return z;h=ye;continue}d+=H(i),h=be;break;case be:if(i&&(N(K,i)||"+"==i||"-"==i||"."==i))d+=H(i);else{if(":"!=i){if(t)return z;d="",h=ye,u=0;continue}if(t&&(l.isSpecial()!=f(de,d)||"file"==d&&(l.includesCredentials()||null!==l.port)||"file"==l.scheme&&!l.host))return;if(l.scheme=d,t)return void(l.isSpecial()&&de[l.scheme]==l.port&&(l.port=null));d="","file"==l.scheme?h=Te:l.isSpecial()&&r&&r.scheme==l.scheme?h=we:l.isSpecial()?h=Ae:"/"==a[u+1]?(h=ve,u++):(l.cannotBeABaseURL=!0,_(l.path,""),h=Ne)}break;case ye:if(!r||r.cannotBeABaseURL&&"#"!=i)return z;if(r.cannotBeABaseURL&&"#"==i){l.scheme=r.scheme,l.path=m(r.path),l.query=r.query,l.fragment="",l.cannotBeABaseURL=!0,h=Be;break}h="file"==r.scheme?Te:xe;continue;case we:if("/"!=i||"/"!=a[u+1]){h=xe;continue}h=ke,u++;break;case ve:if("/"==i){h=Ce;break}h=Re;continue;case xe:if(l.scheme=r.scheme,i==n)l.username=r.username,l.password=r.password,l.host=r.host,l.port=r.port,l.path=m(r.path),l.query=r.query;else if("/"==i||"\\\\"==i&&l.isSpecial())h=Se;else if("?"==i)l.username=r.username,l.password=r.password,l.host=r.host,l.port=r.port,l.path=m(r.path),l.query="",h=De;else{if("#"!=i){l.username=r.username,l.password=r.password,l.host=r.host,l.port=r.port,l.path=m(r.path),l.path.length--,h=Re;continue}l.username=r.username,l.password=r.password,l.host=r.host,l.port=r.port,l.path=m(r.path),l.query=r.query,l.fragment="",h=Be}break;case Se:if(!l.isSpecial()||"/"!=i&&"\\\\"!=i){if("/"!=i){l.username=r.username,l.password=r.password,l.host=r.host,l.port=r.port,h=Re;continue}h=Ce}else h=ke;break;case Ae:if(h=ke,"/"!=i||"/"!=R(d,u+1))continue;u++;break;case ke:if("/"!=i&&"\\\\"!=i){h=Ce;continue}break;case Ce:if("@"==i){g&&(d="%40"+d),g=!0,s=p(d);for(var v=0;v65535)return W;l.port=l.isSpecial()&&A===de[l.scheme]?null:A,d=""}if(t)return;h=Pe;continue}return W}d+=i;break;case Te:if(l.scheme="file","/"==i||"\\\\"==i)h=Me;else{if(!r||"file"!=r.scheme){h=Re;continue}if(i==n)l.host=r.host,l.path=m(r.path),l.query=r.query;else if("?"==i)l.host=r.host,l.path=m(r.path),l.query="",h=De;else{if("#"!=i){ge(D(m(a,u),""))||(l.host=r.host,l.path=m(r.path),l.shortenPath()),h=Re;continue}l.host=r.host,l.path=m(r.path),l.query=r.query,l.fragment="",h=Be}}break;case Me:if("/"==i||"\\\\"==i){h=Ee;break}r&&"file"==r.scheme&&!ge(D(m(a,u),""))&&(fe(r.path[0],!0)?_(l.path,r.path[0]):l.host=r.host),h=Re;continue;case Ee:if(i==n||"/"==i||"\\\\"==i||"?"==i||"#"==i){if(!t&&fe(d))h=Re;else if(""==d){if(l.host="",t)return;h=Pe}else{if(o=l.parseHost(d))return o;if("localhost"==l.host&&(l.host=""),t)return;d="",h=Pe}continue}d+=i;break;case Pe:if(l.isSpecial()){if(h=Re,"/"!=i&&"\\\\"!=i)continue}else if(t||"?"!=i)if(t||"#"!=i){if(i!=n&&(h=Re,"/"!=i))continue}else l.fragment="",h=Be;else l.query="",h=De;break;case Re:if(i==n||"/"==i||"\\\\"==i&&l.isSpecial()||!t&&("?"==i||"#"==i)){if(".."===(c=H(c=d))||"%2e."===c||".%2e"===c||"%2e%2e"===c?(l.shortenPath(),"/"==i||"\\\\"==i&&l.isSpecial()||_(l.path,"")):pe(d)?"/"==i||"\\\\"==i&&l.isSpecial()||_(l.path,""):("file"==l.scheme&&!l.path.length&&fe(d)&&(l.host&&(l.host=""),d=R(d,0)+":"),_(l.path,d)),d="","file"==l.scheme&&(i==n||"?"==i||"#"==i))for(;l.path.length>1&&""===l.path[0];)U(l.path);"?"==i?(l.query="",h=De):"#"==i&&(l.fragment="",h=Be)}else d+=ue(i,le);break;case Ne:"?"==i?(l.query="",h=De):"#"==i?(l.fragment="",h=Be):i!=n&&(l.path[0]+=ue(i,oe));break;case De:t||"#"!=i?i!=n&&("'"==i&&l.isSpecial()?l.query+="%27":l.query+="#"==i?"%23":ue(i,oe)):(l.fragment="",h=Be);break;case Be:i!=n&&(l.fragment+=ue(i,ce))}u++}},parseHost:function(e){var t,r,n;if("["==R(e,0)){if("]"!=R(e,e.length-1))return G;if(t=function(e){var t,r,n,a,i,s,o,c=[0,0,0,0,0,0,0,0],l=0,h=null,u=0,d=function(){return R(e,u)};if(":"==d()){if(":"!=R(e,1))return;u+=2,h=++l}for(;d();){if(8==l)return;if(":"!=d()){for(t=r=0;r<4&&N(ee,d());)t=16*t+M(d(),16),u++,r++;if("."==d()){if(0==r)return;if(u-=r,l>6)return;for(n=0;d();){if(a=null,n>0){if(!("."==d()&&n<4))return;u++}if(!N(Y,d()))return;for(;N(Y,d());){if(i=M(d(),10),null===a)a=i;else{if(0==a)return;a=10*a+i}if(a>255)return;u++}c[l]=256*c[l]+a,2!=++n&&4!=n||l++}if(4!=n)return;break}if(":"==d()){if(u++,!d())return}else if(d())return;c[l++]=t}else{if(null!==h)return;u++,h=++l}}if(null!==h)for(s=l-h,l=7;0!=l&&s>0;)o=c[l],c[l--]=c[h+s-1],c[h+--s]=o;else if(8!=l)return;return c}(X(e,1,-1)),!t)return G;this.host=t}else if(this.isSpecial()){if(e=y(e),N(te,e))return G;if(t=function(e){var t,r,n,a,i,s,o,c=$(e,".");if(c.length&&""==c[c.length-1]&&c.length--,(t=c.length)>4)return e;for(r=[],n=0;n1&&"0"==R(a,0)&&(i=N(J,a)?16:8,a=X(a,8==i?1:2)),""===a)s=0;else{if(!N(10==i?Q:8==i?Z:ee,a))return e;s=M(a,i)}_(r,s)}for(n=0;n=P(256,5-t))return null}else if(s>255)return null;for(o=L(r),n=0;n1?arguments[1]:void 0,n=k(t,new Le(e,!1,r));i||(t.href=n.serialize(),t.origin=n.getOrigin(),t.protocol=n.getProtocol(),t.username=n.getUsername(),t.password=n.getPassword(),t.host=n.getHost(),t.hostname=n.getHostname(),t.port=n.getPort(),t.pathname=n.getPathname(),t.search=n.getSearch(),t.searchParams=n.getSearchParams(),t.hash=n.getHash())},je=_e.prototype,Ue=function(e,t){return{get:function(){return C(this)[e]()},set:t&&function(e){return C(this)[t](e)},configurable:!0,enumerable:!0}};if(i&&(u(je,"href",Ue("serialize","setHref")),u(je,"origin",Ue("getOrigin")),u(je,"protocol",Ue("getProtocol","setProtocol")),u(je,"username",Ue("getUsername","setUsername")),u(je,"password",Ue("getPassword","setPassword")),u(je,"host",Ue("getHost","setHost")),u(je,"hostname",Ue("getHostname","setHostname")),u(je,"port",Ue("getPort","setPort")),u(je,"pathname",Ue("getPathname","setPathname")),u(je,"search",Ue("getSearch","setSearch")),u(je,"searchParams",Ue("getSearchParams")),u(je,"hash",Ue("getHash","setHash"))),h(je,"toJSON",(function(){return C(this).serialize()}),{enumerable:!0}),h(je,"toString",(function(){return C(this).serialize()}),{enumerable:!0}),I){var $e=I.createObjectURL,Xe=I.revokeObjectURL;$e&&h(_e,"createObjectURL",c($e,I)),Xe&&h(_e,"revokeObjectURL",c(Xe,I))}v(_e,"URL"),a({global:!0,constructor:!0,forced:!s,sham:!i},{URL:_e})},285:(e,t,r)=>{r(8789)}},t={};function r(n){var a=t[n];if(void 0!==a)return a.exports;var i=t[n]={id:n,loaded:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.loaded=!0,i.exports}r.amdO={},r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.hmd=e=>((e=Object.create(e)).children||(e.children=[]),Object.defineProperty(e,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+e.id)}}),e),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r(7757)})();`,J=`(()=>{"use strict";var __webpack_modules__=({"./pdf.js":((module,__webpack_exports__,__webpack_require__)=>{eval("__webpack_require__.r(__webpack_exports__);\\n/* harmony import */ var core_js_modules_es_global_this_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.global-this.js */ \\"./node_modules/core-js/modules/es.global-this.js\\");\\n/* harmony import */ var core_js_modules_es_global_this_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_global_this_js__WEBPACK_IMPORTED_MODULE_0__);\\n/* harmony import */ var core_js_modules_es_string_starts_with_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.string.starts-with.js */ \\"./node_modules/core-js/modules/es.string.starts-with.js\\");\\n/* harmony import */ var core_js_modules_es_string_starts_with_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_starts_with_js__WEBPACK_IMPORTED_MODULE_1__);\\n/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.regexp.exec.js */ \\"./node_modules/core-js/modules/es.regexp.exec.js\\");\\n/* harmony import */ var core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_exec_js__WEBPACK_IMPORTED_MODULE_2__);\\n/* harmony import */ var core_js_modules_es_string_match_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.string.match.js */ \\"./node_modules/core-js/modules/es.string.match.js\\");\\n/* harmony import */ var core_js_modules_es_string_match_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_match_js__WEBPACK_IMPORTED_MODULE_3__);\\n/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/web.dom-collections.iterator.js */ \\"./node_modules/core-js/modules/web.dom-collections.iterator.js\\");\\n/* harmony import */ var core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_iterator_js__WEBPACK_IMPORTED_MODULE_4__);\\n/* harmony import */ var core_js_modules_web_url_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/web.url.js */ \\"./node_modules/core-js/modules/web.url.js\\");\\n/* harmony import */ var core_js_modules_web_url_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_url_js__WEBPACK_IMPORTED_MODULE_5__);\\n/* harmony import */ var core_js_modules_web_url_search_params_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/web.url-search-params.js */ \\"./node_modules/core-js/modules/web.url-search-params.js\\");\\n/* harmony import */ var core_js_modules_web_url_search_params_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_url_search_params_js__WEBPACK_IMPORTED_MODULE_6__);\\n/* harmony import */ var core_js_modules_web_url_search_params_delete_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/web.url-search-params.delete.js */ \\"./node_modules/core-js/modules/web.url-search-params.delete.js\\");\\n/* harmony import */ var core_js_modules_web_url_search_params_delete_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_url_search_params_delete_js__WEBPACK_IMPORTED_MODULE_7__);\\n/* harmony import */ var core_js_modules_web_url_search_params_has_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/web.url-search-params.has.js */ \\"./node_modules/core-js/modules/web.url-search-params.has.js\\");\\n/* harmony import */ var core_js_modules_web_url_search_params_has_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_url_search_params_has_js__WEBPACK_IMPORTED_MODULE_8__);\\n/* harmony import */ var core_js_modules_web_url_search_params_size_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! core-js/modules/web.url-search-params.size.js */ \\"./node_modules/core-js/modules/web.url-search-params.size.js\\");\\n/* harmony import */ var core_js_modules_web_url_search_params_size_js__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_url_search_params_size_js__WEBPACK_IMPORTED_MODULE_9__);\\n/* harmony import */ var core_js_modules_es_regexp_to_string_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! core-js/modules/es.regexp.to-string.js */ \\"./node_modules/core-js/modules/es.regexp.to-string.js\\");\\n/* harmony import */ var core_js_modules_es_regexp_to_string_js__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_to_string_js__WEBPACK_IMPORTED_MODULE_10__);\\n/* harmony import */ var core_js_modules_es_array_buffer_slice_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! core-js/modules/es.array-buffer.slice.js */ \\"./node_modules/core-js/modules/es.array-buffer.slice.js\\");\\n/* harmony import */ var core_js_modules_es_array_buffer_slice_js__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_buffer_slice_js__WEBPACK_IMPORTED_MODULE_11__);\\n/* harmony import */ var core_js_modules_es_typed_array_uint8_array_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! core-js/modules/es.typed-array.uint8-array.js */ \\"./node_modules/core-js/modules/es.typed-array.uint8-array.js\\");\\n/* harmony import */ var core_js_modules_es_typed_array_uint8_array_js__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_uint8_array_js__WEBPACK_IMPORTED_MODULE_12__);\\n/* harmony import */ var core_js_modules_es_typed_array_at_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! core-js/modules/es.typed-array.at.js */ \\"./node_modules/core-js/modules/es.typed-array.at.js\\");\\n/* harmony import */ var core_js_modules_es_typed_array_at_js__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_at_js__WEBPACK_IMPORTED_MODULE_13__);\\n/* harmony import */ var core_js_modules_es_typed_array_fill_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! core-js/modules/es.typed-array.fill.js */ \\"./node_modules/core-js/modules/es.typed-array.fill.js\\");\\n/* harmony import */ var core_js_modules_es_typed_array_fill_js__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_fill_js__WEBPACK_IMPORTED_MODULE_14__);\\n/* harmony import */ var core_js_modules_es_typed_array_find_last_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! core-js/modules/es.typed-array.find-last.js */ \\"./node_modules/core-js/modules/es.typed-array.find-last.js\\");\\n/* harmony import */ var core_js_modules_es_typed_array_find_last_js__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_find_last_js__WEBPACK_IMPORTED_MODULE_15__);\\n/* harmony import */ var core_js_modules_es_typed_array_find_last_index_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! core-js/modules/es.typed-array.find-last-index.js */ \\"./node_modules/core-js/modules/es.typed-array.find-last-index.js\\");\\n/* harmony import */ var core_js_modules_es_typed_array_find_last_index_js__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_find_last_index_js__WEBPACK_IMPORTED_MODULE_16__);\\n/* harmony import */ var core_js_modules_es_typed_array_set_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! core-js/modules/es.typed-array.set.js */ \\"./node_modules/core-js/modules/es.typed-array.set.js\\");\\n/* harmony import */ var core_js_modules_es_typed_array_set_js__WEBPACK_IMPORTED_MODULE_17___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_set_js__WEBPACK_IMPORTED_MODULE_17__);\\n/* harmony import */ var core_js_modules_es_typed_array_sort_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! core-js/modules/es.typed-array.sort.js */ \\"./node_modules/core-js/modules/es.typed-array.sort.js\\");\\n/* harmony import */ var core_js_modules_es_typed_array_sort_js__WEBPACK_IMPORTED_MODULE_18___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_sort_js__WEBPACK_IMPORTED_MODULE_18__);\\n/* harmony import */ var core_js_modules_es_typed_array_to_locale_string_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! core-js/modules/es.typed-array.to-locale-string.js */ \\"./node_modules/core-js/modules/es.typed-array.to-locale-string.js\\");\\n/* harmony import */ var core_js_modules_es_typed_array_to_locale_string_js__WEBPACK_IMPORTED_MODULE_19___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_to_locale_string_js__WEBPACK_IMPORTED_MODULE_19__);\\n/* harmony import */ var core_js_modules_es_typed_array_to_reversed_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! core-js/modules/es.typed-array.to-reversed.js */ \\"./node_modules/core-js/modules/es.typed-array.to-reversed.js\\");\\n/* harmony import */ var core_js_modules_es_typed_array_to_reversed_js__WEBPACK_IMPORTED_MODULE_20___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_to_reversed_js__WEBPACK_IMPORTED_MODULE_20__);\\n/* harmony import */ var core_js_modules_es_typed_array_to_sorted_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! core-js/modules/es.typed-array.to-sorted.js */ \\"./node_modules/core-js/modules/es.typed-array.to-sorted.js\\");\\n/* harmony import */ var core_js_modules_es_typed_array_to_sorted_js__WEBPACK_IMPORTED_MODULE_21___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_to_sorted_js__WEBPACK_IMPORTED_MODULE_21__);\\n/* harmony import */ var core_js_modules_es_typed_array_with_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! core-js/modules/es.typed-array.with.js */ \\"./node_modules/core-js/modules/es.typed-array.with.js\\");\\n/* harmony import */ var core_js_modules_es_typed_array_with_js__WEBPACK_IMPORTED_MODULE_22___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_with_js__WEBPACK_IMPORTED_MODULE_22__);\\n/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! core-js/modules/es.string.replace.js */ \\"./node_modules/core-js/modules/es.string.replace.js\\");\\n/* harmony import */ var core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_23___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace_js__WEBPACK_IMPORTED_MODULE_23__);\\n/* harmony import */ var core_js_modules_es_string_replace_all_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! core-js/modules/es.string.replace-all.js */ \\"./node_modules/core-js/modules/es.string.replace-all.js\\");\\n/* harmony import */ var core_js_modules_es_string_replace_all_js__WEBPACK_IMPORTED_MODULE_24___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_replace_all_js__WEBPACK_IMPORTED_MODULE_24__);\\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! core-js/modules/es.array.push.js */ \\"./node_modules/core-js/modules/es.array.push.js\\");\\n/* harmony import */ var core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_25___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_push_js__WEBPACK_IMPORTED_MODULE_25__);\\n/* harmony import */ var core_js_modules_es_error_cause_js__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! core-js/modules/es.error.cause.js */ \\"./node_modules/core-js/modules/es.error.cause.js\\");\\n/* harmony import */ var core_js_modules_es_error_cause_js__WEBPACK_IMPORTED_MODULE_26___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_error_cause_js__WEBPACK_IMPORTED_MODULE_26__);\\n/* harmony import */ var core_js_modules_es_typed_array_uint32_array_js__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! core-js/modules/es.typed-array.uint32-array.js */ \\"./node_modules/core-js/modules/es.typed-array.uint32-array.js\\");\\n/* harmony import */ var core_js_modules_es_typed_array_uint32_array_js__WEBPACK_IMPORTED_MODULE_27___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_uint32_array_js__WEBPACK_IMPORTED_MODULE_27__);\\n/* harmony import */ var core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! core-js/modules/es.array.includes.js */ \\"./node_modules/core-js/modules/es.array.includes.js\\");\\n/* harmony import */ var core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_28___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_28__);\\n/* harmony import */ var core_js_modules_es_string_includes_js__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! core-js/modules/es.string.includes.js */ \\"./node_modules/core-js/modules/es.string.includes.js\\");\\n/* harmony import */ var core_js_modules_es_string_includes_js__WEBPACK_IMPORTED_MODULE_29___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_includes_js__WEBPACK_IMPORTED_MODULE_29__);\\n/* harmony import */ var core_js_modules_es_weak_map_js__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! core-js/modules/es.weak-map.js */ \\"./node_modules/core-js/modules/es.weak-map.js\\");\\n/* harmony import */ var core_js_modules_es_weak_map_js__WEBPACK_IMPORTED_MODULE_30___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_weak_map_js__WEBPACK_IMPORTED_MODULE_30__);\\n/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! core-js/modules/es.promise.js */ \\"./node_modules/core-js/modules/es.promise.js\\");\\n/* harmony import */ var core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_31___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise_js__WEBPACK_IMPORTED_MODULE_31__);\\n/* harmony import */ var core_js_modules_web_self_js__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! core-js/modules/web.self.js */ \\"./node_modules/core-js/modules/web.self.js\\");\\n/* harmony import */ var core_js_modules_web_self_js__WEBPACK_IMPORTED_MODULE_32___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_self_js__WEBPACK_IMPORTED_MODULE_32__);\\n/* harmony import */ var core_js_modules_es_string_split_js__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! core-js/modules/es.string.split.js */ \\"./node_modules/core-js/modules/es.string.split.js\\");\\n/* harmony import */ var core_js_modules_es_string_split_js__WEBPACK_IMPORTED_MODULE_33___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_split_js__WEBPACK_IMPORTED_MODULE_33__);\\n/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! core-js/modules/es.symbol.description.js */ \\"./node_modules/core-js/modules/es.symbol.description.js\\");\\n/* harmony import */ var core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_34___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_symbol_description_js__WEBPACK_IMPORTED_MODULE_34__);\\n/* harmony import */ var core_js_modules_es_object_has_own_js__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! core-js/modules/es.object.has-own.js */ \\"./node_modules/core-js/modules/es.object.has-own.js\\");\\n/* harmony import */ var core_js_modules_es_object_has_own_js__WEBPACK_IMPORTED_MODULE_35___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_has_own_js__WEBPACK_IMPORTED_MODULE_35__);\\n/* harmony import */ var core_js_modules_es_regexp_test_js__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! core-js/modules/es.regexp.test.js */ \\"./node_modules/core-js/modules/es.regexp.test.js\\");\\n/* harmony import */ var core_js_modules_es_regexp_test_js__WEBPACK_IMPORTED_MODULE_36___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_test_js__WEBPACK_IMPORTED_MODULE_36__);\\n/* harmony import */ var core_js_modules_es_reflect_to_string_tag_js__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! core-js/modules/es.reflect.to-string-tag.js */ \\"./node_modules/core-js/modules/es.reflect.to-string-tag.js\\");\\n/* harmony import */ var core_js_modules_es_reflect_to_string_tag_js__WEBPACK_IMPORTED_MODULE_37___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_reflect_to_string_tag_js__WEBPACK_IMPORTED_MODULE_37__);\\n/* harmony import */ var core_js_modules_es_array_find_last_js__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! core-js/modules/es.array.find-last.js */ \\"./node_modules/core-js/modules/es.array.find-last.js\\");\\n/* harmony import */ var core_js_modules_es_array_find_last_js__WEBPACK_IMPORTED_MODULE_38___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_find_last_js__WEBPACK_IMPORTED_MODULE_38__);\\n/* harmony import */ var core_js_modules_es_array_buffer_constructor_js__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! core-js/modules/es.array-buffer.constructor.js */ \\"./node_modules/core-js/modules/es.array-buffer.constructor.js\\");\\n/* harmony import */ var core_js_modules_es_array_buffer_constructor_js__WEBPACK_IMPORTED_MODULE_39___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_buffer_constructor_js__WEBPACK_IMPORTED_MODULE_39__);\\n/* harmony import */ var core_js_modules_es_array_find_last_index_js__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(/*! core-js/modules/es.array.find-last-index.js */ \\"./node_modules/core-js/modules/es.array.find-last-index.js\\");\\n/* harmony import */ var core_js_modules_es_array_find_last_index_js__WEBPACK_IMPORTED_MODULE_40___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_find_last_index_js__WEBPACK_IMPORTED_MODULE_40__);\\n/* harmony import */ var core_js_modules_es_typed_array_uint8_clamped_array_js__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(/*! core-js/modules/es.typed-array.uint8-clamped-array.js */ \\"./node_modules/core-js/modules/es.typed-array.uint8-clamped-array.js\\");\\n/* harmony import */ var core_js_modules_es_typed_array_uint8_clamped_array_js__WEBPACK_IMPORTED_MODULE_41___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_uint8_clamped_array_js__WEBPACK_IMPORTED_MODULE_41__);\\n/* harmony import */ var core_js_modules_es_array_sort_js__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(/*! core-js/modules/es.array.sort.js */ \\"./node_modules/core-js/modules/es.array.sort.js\\");\\n/* harmony import */ var core_js_modules_es_array_sort_js__WEBPACK_IMPORTED_MODULE_42___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_sort_js__WEBPACK_IMPORTED_MODULE_42__);\\n/* harmony import */ var core_js_modules_es_array_with_js__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(/*! core-js/modules/es.array.with.js */ \\"./node_modules/core-js/modules/es.array.with.js\\");\\n/* harmony import */ var core_js_modules_es_array_with_js__WEBPACK_IMPORTED_MODULE_43___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_with_js__WEBPACK_IMPORTED_MODULE_43__);\\n/* harmony import */ var core_js_modules_es_typed_array_int8_array_js__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(/*! core-js/modules/es.typed-array.int8-array.js */ \\"./node_modules/core-js/modules/es.typed-array.int8-array.js\\");\\n/* harmony import */ var core_js_modules_es_typed_array_int8_array_js__WEBPACK_IMPORTED_MODULE_44___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_int8_array_js__WEBPACK_IMPORTED_MODULE_44__);\\n/* harmony import */ var core_js_modules_es_object_assign_js__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(/*! core-js/modules/es.object.assign.js */ \\"./node_modules/core-js/modules/es.object.assign.js\\");\\n/* harmony import */ var core_js_modules_es_object_assign_js__WEBPACK_IMPORTED_MODULE_45___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_assign_js__WEBPACK_IMPORTED_MODULE_45__);\\n/* harmony import */ var core_js_modules_web_dom_exception_constructor_js__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(/*! core-js/modules/web.dom-exception.constructor.js */ \\"./node_modules/core-js/modules/web.dom-exception.constructor.js\\");\\n/* harmony import */ var core_js_modules_web_dom_exception_constructor_js__WEBPACK_IMPORTED_MODULE_46___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_exception_constructor_js__WEBPACK_IMPORTED_MODULE_46__);\\n/* harmony import */ var core_js_modules_web_dom_exception_stack_js__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(/*! core-js/modules/web.dom-exception.stack.js */ \\"./node_modules/core-js/modules/web.dom-exception.stack.js\\");\\n/* harmony import */ var core_js_modules_web_dom_exception_stack_js__WEBPACK_IMPORTED_MODULE_47___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_exception_stack_js__WEBPACK_IMPORTED_MODULE_47__);\\n/* harmony import */ var core_js_modules_web_dom_exception_to_string_tag_js__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(/*! core-js/modules/web.dom-exception.to-string-tag.js */ \\"./node_modules/core-js/modules/web.dom-exception.to-string-tag.js\\");\\n/* harmony import */ var core_js_modules_web_dom_exception_to_string_tag_js__WEBPACK_IMPORTED_MODULE_48___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_exception_to_string_tag_js__WEBPACK_IMPORTED_MODULE_48__);\\n/* harmony import */ var core_js_modules_web_structured_clone_js__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(/*! core-js/modules/web.structured-clone.js */ \\"./node_modules/core-js/modules/web.structured-clone.js\\");\\n/* harmony import */ var core_js_modules_web_structured_clone_js__WEBPACK_IMPORTED_MODULE_49___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_structured_clone_js__WEBPACK_IMPORTED_MODULE_49__);\\n/* harmony import */ var core_js_modules_es_promise_finally_js__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(/*! core-js/modules/es.promise.finally.js */ \\"./node_modules/core-js/modules/es.promise.finally.js\\");\\n/* harmony import */ var core_js_modules_es_promise_finally_js__WEBPACK_IMPORTED_MODULE_50___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise_finally_js__WEBPACK_IMPORTED_MODULE_50__);\\n/* harmony import */ var core_js_modules_es_regexp_constructor_js__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(/*! core-js/modules/es.regexp.constructor.js */ \\"./node_modules/core-js/modules/es.regexp.constructor.js\\");\\n/* harmony import */ var core_js_modules_es_regexp_constructor_js__WEBPACK_IMPORTED_MODULE_51___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_constructor_js__WEBPACK_IMPORTED_MODULE_51__);\\n/* harmony import */ var core_js_modules_es_regexp_dot_all_js__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(/*! core-js/modules/es.regexp.dot-all.js */ \\"./node_modules/core-js/modules/es.regexp.dot-all.js\\");\\n/* harmony import */ var core_js_modules_es_regexp_dot_all_js__WEBPACK_IMPORTED_MODULE_52___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_dot_all_js__WEBPACK_IMPORTED_MODULE_52__);\\n/* harmony import */ var core_js_modules_es_regexp_flags_js__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(/*! core-js/modules/es.regexp.flags.js */ \\"./node_modules/core-js/modules/es.regexp.flags.js\\");\\n/* harmony import */ var core_js_modules_es_regexp_flags_js__WEBPACK_IMPORTED_MODULE_53___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_flags_js__WEBPACK_IMPORTED_MODULE_53__);\\n/* harmony import */ var core_js_modules_es_json_stringify_js__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(/*! core-js/modules/es.json.stringify.js */ \\"./node_modules/core-js/modules/es.json.stringify.js\\");\\n/* harmony import */ var core_js_modules_es_json_stringify_js__WEBPACK_IMPORTED_MODULE_54___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_json_stringify_js__WEBPACK_IMPORTED_MODULE_54__);\\n/* harmony import */ var core_js_modules_es_number_to_fixed_js__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(/*! core-js/modules/es.number.to-fixed.js */ \\"./node_modules/core-js/modules/es.number.to-fixed.js\\");\\n/* harmony import */ var core_js_modules_es_number_to_fixed_js__WEBPACK_IMPORTED_MODULE_55___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_number_to_fixed_js__WEBPACK_IMPORTED_MODULE_55__);\\n/* harmony import */ var core_js_modules_es_string_ends_with_js__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(/*! core-js/modules/es.string.ends-with.js */ \\"./node_modules/core-js/modules/es.string.ends-with.js\\");\\n/* harmony import */ var core_js_modules_es_string_ends_with_js__WEBPACK_IMPORTED_MODULE_56___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_ends_with_js__WEBPACK_IMPORTED_MODULE_56__);\\n/* harmony import */ var core_js_modules_es_parse_float_js__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(/*! core-js/modules/es.parse-float.js */ \\"./node_modules/core-js/modules/es.parse-float.js\\");\\n/* harmony import */ var core_js_modules_es_parse_float_js__WEBPACK_IMPORTED_MODULE_57___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_parse_float_js__WEBPACK_IMPORTED_MODULE_57__);\\n/* harmony import */ var core_js_modules_es_math_hypot_js__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(/*! core-js/modules/es.math.hypot.js */ \\"./node_modules/core-js/modules/es.math.hypot.js\\");\\n/* harmony import */ var core_js_modules_es_math_hypot_js__WEBPACK_IMPORTED_MODULE_58___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_math_hypot_js__WEBPACK_IMPORTED_MODULE_58__);\\n/* harmony import */ var core_js_modules_es_array_at_js__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(/*! core-js/modules/es.array.at.js */ \\"./node_modules/core-js/modules/es.array.at.js\\");\\n/* harmony import */ var core_js_modules_es_array_at_js__WEBPACK_IMPORTED_MODULE_59___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_at_js__WEBPACK_IMPORTED_MODULE_59__);\\n/* harmony import */ var core_js_modules_es_string_at_alternative_js__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(/*! core-js/modules/es.string.at-alternative.js */ \\"./node_modules/core-js/modules/es.string.at-alternative.js\\");\\n/* harmony import */ var core_js_modules_es_string_at_alternative_js__WEBPACK_IMPORTED_MODULE_60___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_at_alternative_js__WEBPACK_IMPORTED_MODULE_60__);\\n/* harmony import */ var core_js_modules_es_parse_int_js__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(/*! core-js/modules/es.parse-int.js */ \\"./node_modules/core-js/modules/es.parse-int.js\\");\\n/* harmony import */ var core_js_modules_es_parse_int_js__WEBPACK_IMPORTED_MODULE_61___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_parse_int_js__WEBPACK_IMPORTED_MODULE_61__);\\n/* harmony import */ var core_js_modules_es_string_trim_js__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(/*! core-js/modules/es.string.trim.js */ \\"./node_modules/core-js/modules/es.string.trim.js\\");\\n/* harmony import */ var core_js_modules_es_string_trim_js__WEBPACK_IMPORTED_MODULE_62___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_trim_js__WEBPACK_IMPORTED_MODULE_62__);\\n/* harmony import */ var core_js_modules_es_typed_array_int32_array_js__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(/*! core-js/modules/es.typed-array.int32-array.js */ \\"./node_modules/core-js/modules/es.typed-array.int32-array.js\\");\\n/* harmony import */ var core_js_modules_es_typed_array_int32_array_js__WEBPACK_IMPORTED_MODULE_63___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_typed_array_int32_array_js__WEBPACK_IMPORTED_MODULE_63__);\\n/* harmony import */ var core_js_modules_es_promise_all_settled_js__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(/*! core-js/modules/es.promise.all-settled.js */ \\"./node_modules/core-js/modules/es.promise.all-settled.js\\");\\n/* harmony import */ var core_js_modules_es_promise_all_settled_js__WEBPACK_IMPORTED_MODULE_64___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_promise_all_settled_js__WEBPACK_IMPORTED_MODULE_64__);\\n/* harmony import */ var core_js_modules_es_string_trim_end_js__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(/*! core-js/modules/es.string.trim-end.js */ \\"./node_modules/core-js/modules/es.string.trim-end.js\\");\\n/* harmony import */ var core_js_modules_es_string_trim_end_js__WEBPACK_IMPORTED_MODULE_65___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_trim_end_js__WEBPACK_IMPORTED_MODULE_65__);\\n/* harmony import */ var core_js_modules_es_array_flat_map_js__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(/*! core-js/modules/es.array.flat-map.js */ \\"./node_modules/core-js/modules/es.array.flat-map.js\\");\\n/* harmony import */ var core_js_modules_es_array_flat_map_js__WEBPACK_IMPORTED_MODULE_66___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_flat_map_js__WEBPACK_IMPORTED_MODULE_66__);\\n/* harmony import */ var core_js_modules_es_array_unscopables_flat_map_js__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(/*! core-js/modules/es.array.unscopables.flat-map.js */ \\"./node_modules/core-js/modules/es.array.unscopables.flat-map.js\\");\\n/* harmony import */ var core_js_modules_es_array_unscopables_flat_map_js__WEBPACK_IMPORTED_MODULE_67___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_unscopables_flat_map_js__WEBPACK_IMPORTED_MODULE_67__);\\n/* module decorator */ module = __webpack_require__.hmd(module);\\nfunction _classPrivateFieldDestructureSet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \\"set\\"); return _classApplyDescriptorDestructureSet(receiver, descriptor); }\\nfunction _classApplyDescriptorDestructureSet(receiver, descriptor) { if (descriptor.set) { if (!(\\"__destrObj\\" in descriptor)) { descriptor.__destrObj = { set value(v) { descriptor.set.call(receiver, v); } }; } return descriptor.__destrObj; } else { if (!descriptor.writable) { throw new TypeError(\\"attempted to set read only private field\\"); } return descriptor; } }\\nfunction _classStaticPrivateMethodGet(receiver, classConstructor, method) { _classCheckPrivateStaticAccess(receiver, classConstructor); return method; }\\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \\"string\\"); return typeof key === \\"symbol\\" ? key : String(key); }\\nfunction _toPrimitive(input, hint) { if (typeof input !== \\"object\\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \\"default\\"); if (typeof res !== \\"object\\") return res; throw new TypeError(\\"@@toPrimitive must return a primitive value.\\"); } return (hint === \\"string\\" ? String : Number)(input); }\\nfunction _classPrivateMethodInitSpec(obj, privateSet) { _checkPrivateRedeclaration(obj, privateSet); privateSet.add(obj); }\\nfunction _classPrivateMethodGet(receiver, privateSet, fn) { if (!privateSet.has(receiver)) { throw new TypeError(\\"attempted to get private field on non-instance\\"); } return fn; }\\nfunction _classStaticPrivateFieldSpecSet(receiver, classConstructor, descriptor, value) { _classCheckPrivateStaticAccess(receiver, classConstructor); _classCheckPrivateStaticFieldDescriptor(descriptor, \\"set\\"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }\\nfunction _classStaticPrivateFieldSpecGet(receiver, classConstructor, descriptor) { _classCheckPrivateStaticAccess(receiver, classConstructor); _classCheckPrivateStaticFieldDescriptor(descriptor, \\"get\\"); return _classApplyDescriptorGet(receiver, descriptor); }\\nfunction _classCheckPrivateStaticFieldDescriptor(descriptor, action) { if (descriptor === undefined) { throw new TypeError(\\"attempted to \\" + action + \\" private static field before its declaration\\"); } }\\nfunction _classCheckPrivateStaticAccess(receiver, classConstructor) { if (receiver !== classConstructor) { throw new TypeError(\\"Private static access of wrong provenance\\"); } }\\nfunction _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }\\nfunction _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError(\\"Cannot initialize the same private elements twice on an object\\"); } }\\nfunction _classPrivateFieldGet(receiver, privateMap) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \\"get\\"); return _classApplyDescriptorGet(receiver, descriptor); }\\nfunction _classApplyDescriptorGet(receiver, descriptor) { if (descriptor.get) { return descriptor.get.call(receiver); } return descriptor.value; }\\nfunction _classPrivateFieldSet(receiver, privateMap, value) { var descriptor = _classExtractFieldDescriptor(receiver, privateMap, \\"set\\"); _classApplyDescriptorSet(receiver, descriptor, value); return value; }\\nfunction _classExtractFieldDescriptor(receiver, privateMap, action) { if (!privateMap.has(receiver)) { throw new TypeError(\\"attempted to \\" + action + \\" private field on non-instance\\"); } return privateMap.get(receiver); }\\nfunction _classApplyDescriptorSet(receiver, descriptor, value) { if (descriptor.set) { descriptor.set.call(receiver, value); } else { if (!descriptor.writable) { throw new TypeError(\\"attempted to set read only private field\\"); } descriptor.value = value; } }\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n!function webpackUniversalModuleDefinition(t, e) {\\n \\"object\\" == typeof exports && \\"object\\" == \\"object\\" ? module.exports = e() : \\"function\\" == typeof define && __webpack_require__.amdO ? define(\\"pdfjs-dist/build/pdf\\", [], e) : \\"object\\" == typeof exports ? exports[\\"pdfjs-dist/build/pdf\\"] = e() : t[\\"pdfjs-dist/build/pdf\\"] = t.pdfjsLib = e();\\n}(globalThis, () => (() => {\\n var __webpack_modules__ = [, (t, e, n) => {\\n \\"use strict\\";\\n\\n var _t;\\n Object.defineProperty(e, \\"__esModule\\", {\\n value: !0\\n });\\n e.VerbosityLevel = e.Util = e.UnknownErrorException = e.UnexpectedResponseException = e.TextRenderingMode = e.RenderingIntentFlag = e.PromiseCapability = e.PermissionFlag = e.PasswordResponses = e.PasswordException = e.PageActionEventType = e.OPS = e.MissingPDFException = e.MAX_IMAGE_SIZE_TO_CACHE = e.LINE_FACTOR = e.LINE_DESCENT_FACTOR = e.InvalidPDFException = e.ImageKind = e.IDENTITY_MATRIX = e.FormatError = e.FeatureTest = e.FONT_IDENTITY_MATRIX = e.DocumentActionEventType = e.CMapCompressionType = e.BaseException = e.BASELINE_FACTOR = e.AnnotationType = e.AnnotationReplyType = e.AnnotationMode = e.AnnotationFlag = e.AnnotationFieldFlag = e.AnnotationEditorType = e.AnnotationEditorPrefix = e.AnnotationEditorParamsType = e.AnnotationBorderStyleType = e.AnnotationActionEventType = e.AbortException = void 0;\\n e.assert = function assert(t, e) {\\n t || unreachable(e);\\n };\\n e.bytesToString = bytesToString;\\n e.createValidAbsoluteUrl = function createValidAbsoluteUrl(t) {\\n let e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null,\\n n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : null;\\n if (!t) return null;\\n try {\\n if (n && \\"string\\" == typeof t) {\\n if (n.addDefaultProtocol && t.startsWith(\\"www.\\")) {\\n const e = t.match(/\\\\./g);\\n (e === null || e === void 0 ? void 0 : e.length) >= 2 && (t = \\"http://\\".concat(t));\\n }\\n if (n.tryConvertEncoding) try {\\n t = stringToUTF8String(t);\\n } catch (_unused) {}\\n }\\n const i = e ? new URL(t, e) : new URL(t);\\n if (function _isValidProtocol(t) {\\n switch (t === null || t === void 0 ? void 0 : t.protocol) {\\n case \\"http:\\":\\n case \\"https:\\":\\n case \\"ftp:\\":\\n case \\"mailto:\\":\\n case \\"tel:\\":\\n return !0;\\n default:\\n return !1;\\n }\\n }(i)) return i;\\n } catch (_unused2) {}\\n return null;\\n };\\n e.getModificationDate = function getModificationDate() {\\n let t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : new Date();\\n return [t.getUTCFullYear().toString(), (t.getUTCMonth() + 1).toString().padStart(2, \\"0\\"), t.getUTCDate().toString().padStart(2, \\"0\\"), t.getUTCHours().toString().padStart(2, \\"0\\"), t.getUTCMinutes().toString().padStart(2, \\"0\\"), t.getUTCSeconds().toString().padStart(2, \\"0\\")].join(\\"\\");\\n };\\n e.getUuid = function getUuid() {\\n var _crypto, _crypto2;\\n if (\\"undefined\\" != typeof crypto && \\"function\\" == typeof ((_crypto = crypto) === null || _crypto === void 0 ? void 0 : _crypto.randomUUID)) return crypto.randomUUID();\\n const t = new Uint8Array(32);\\n if (\\"undefined\\" != typeof crypto && \\"function\\" == typeof ((_crypto2 = crypto) === null || _crypto2 === void 0 ? void 0 : _crypto2.getRandomValues)) crypto.getRandomValues(t);else for (let e = 0; e < 32; e++) t[e] = Math.floor(255 * Math.random());\\n return bytesToString(t);\\n };\\n e.getVerbosityLevel = function getVerbosityLevel() {\\n return s;\\n };\\n e.info = function info(t) {\\n s >= r.INFOS && console.log(\\"Info: \\".concat(t));\\n };\\n e.isArrayBuffer = function isArrayBuffer(t) {\\n return \\"object\\" == typeof t && void 0 !== (t === null || t === void 0 ? void 0 : t.byteLength);\\n };\\n e.isArrayEqual = function isArrayEqual(t, e) {\\n if (t.length !== e.length) return !1;\\n for (let n = 0, i = t.length; n < i; n++) if (t[n] !== e[n]) return !1;\\n return !0;\\n };\\n e.isNodeJS = void 0;\\n e.normalizeUnicode = function normalizeUnicode(t) {\\n if (!c) {\\n c = /([\\\\xA0\\\\xB5\\\\u037E\\\\u0EB3\\\\u2000-\\\\u200A\\\\u202F\\\\u2126\\\\uFB00-\\\\uFB04\\\\uFB06\\\\uFB20-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBA1\\\\uFBA4-\\\\uFBA9\\\\uFBAE-\\\\uFBB1\\\\uFBD3-\\\\uFBDC\\\\uFBDE-\\\\uFBE7\\\\uFBEA-\\\\uFBF8\\\\uFBFC\\\\uFBFD\\\\uFC00-\\\\uFC5D\\\\uFC64-\\\\uFCF1\\\\uFCF5-\\\\uFD3D\\\\uFD88\\\\uFDF4\\\\uFDFA\\\\uFDFB\\\\uFE71\\\\uFE77\\\\uFE79\\\\uFE7B\\\\uFE7D]+)|(\\\\uFB05+)/g;\\n h = new Map([[\\"ſt\\", \\"ſt\\"]]);\\n }\\n return t.replaceAll(c, (t, e, n) => e ? e.normalize(\\"NFKC\\") : h.get(n));\\n };\\n e.objectFromMap = function objectFromMap(t) {\\n const e = Object.create(null);\\n for (const [n, i] of t) e[n] = i;\\n return e;\\n };\\n e.objectSize = function objectSize(t) {\\n return Object.keys(t).length;\\n };\\n e.setVerbosityLevel = function setVerbosityLevel(t) {\\n Number.isInteger(t) && (s = t);\\n };\\n e.shadow = shadow;\\n e.string32 = function string32(t) {\\n return String.fromCharCode(t >> 24 & 255, t >> 16 & 255, t >> 8 & 255, 255 & t);\\n };\\n e.stringToBytes = stringToBytes;\\n e.stringToPDFString = function stringToPDFString(t) {\\n if (t[0] >= \\"ï\\") {\\n let e;\\n \\"þ\\" === t[0] && \\"ÿ\\" === t[1] ? e = \\"utf-16be\\" : \\"ÿ\\" === t[0] && \\"þ\\" === t[1] ? e = \\"utf-16le\\" : \\"ï\\" === t[0] && \\"»\\" === t[1] && \\"¿\\" === t[2] && (e = \\"utf-8\\");\\n if (e) try {\\n const n = new TextDecoder(e, {\\n fatal: !0\\n }),\\n i = stringToBytes(t);\\n return n.decode(i);\\n } catch (t) {\\n warn(\\"stringToPDFString: \\\\\\"\\".concat(t, \\"\\\\\\".\\"));\\n }\\n }\\n const e = [];\\n for (let n = 0, i = t.length; n < i; n++) {\\n const i = l[t.charCodeAt(n)];\\n e.push(i ? String.fromCharCode(i) : t.charAt(n));\\n }\\n return e.join(\\"\\");\\n };\\n e.stringToUTF8String = stringToUTF8String;\\n e.unreachable = unreachable;\\n e.utf8StringToString = function utf8StringToString(t) {\\n return unescape(encodeURIComponent(t));\\n };\\n e.warn = warn;\\n n(2);\\n n(84);\\n n(86);\\n n(87);\\n n(89);\\n n(93);\\n n(101);\\n n(102);\\n n(105);\\n n(107);\\n n(109);\\n n(113);\\n n(116);\\n n(123);\\n const i = !(\\"object\\" != typeof process || process + \\"\\" != \\"[object process]\\" || process.versions.nw || process.versions.electron && process.type && \\"browser\\" !== process.type);\\n e.isNodeJS = i;\\n e.IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];\\n e.FONT_IDENTITY_MATRIX = [.001, 0, 0, .001, 0, 0];\\n e.MAX_IMAGE_SIZE_TO_CACHE = 1e7;\\n e.LINE_FACTOR = 1.35;\\n e.LINE_DESCENT_FACTOR = .35;\\n e.BASELINE_FACTOR = .25925925925925924;\\n e.RenderingIntentFlag = {\\n ANY: 1,\\n DISPLAY: 2,\\n PRINT: 4,\\n SAVE: 8,\\n ANNOTATIONS_FORMS: 16,\\n ANNOTATIONS_STORAGE: 32,\\n ANNOTATIONS_DISABLE: 64,\\n OPLIST: 256\\n };\\n e.AnnotationMode = {\\n DISABLE: 0,\\n ENABLE: 1,\\n ENABLE_FORMS: 2,\\n ENABLE_STORAGE: 3\\n };\\n e.AnnotationEditorPrefix = \\"pdfjs_internal_editor_\\";\\n e.AnnotationEditorType = {\\n DISABLE: -1,\\n NONE: 0,\\n FREETEXT: 3,\\n STAMP: 13,\\n INK: 15\\n };\\n e.AnnotationEditorParamsType = {\\n RESIZE: 1,\\n FREETEXT_SIZE: 11,\\n FREETEXT_COLOR: 12,\\n FREETEXT_OPACITY: 13,\\n INK_COLOR: 21,\\n INK_THICKNESS: 22,\\n INK_OPACITY: 23\\n };\\n e.PermissionFlag = {\\n PRINT: 4,\\n MODIFY_CONTENTS: 8,\\n COPY: 16,\\n MODIFY_ANNOTATIONS: 32,\\n FILL_INTERACTIVE_FORMS: 256,\\n COPY_FOR_ACCESSIBILITY: 512,\\n ASSEMBLE: 1024,\\n PRINT_HIGH_QUALITY: 2048\\n };\\n e.TextRenderingMode = {\\n FILL: 0,\\n STROKE: 1,\\n FILL_STROKE: 2,\\n INVISIBLE: 3,\\n FILL_ADD_TO_PATH: 4,\\n STROKE_ADD_TO_PATH: 5,\\n FILL_STROKE_ADD_TO_PATH: 6,\\n ADD_TO_PATH: 7,\\n FILL_STROKE_MASK: 3,\\n ADD_TO_PATH_FLAG: 4\\n };\\n e.ImageKind = {\\n GRAYSCALE_1BPP: 1,\\n RGB_24BPP: 2,\\n RGBA_32BPP: 3\\n };\\n e.AnnotationType = {\\n TEXT: 1,\\n LINK: 2,\\n FREETEXT: 3,\\n LINE: 4,\\n SQUARE: 5,\\n CIRCLE: 6,\\n POLYGON: 7,\\n POLYLINE: 8,\\n HIGHLIGHT: 9,\\n UNDERLINE: 10,\\n SQUIGGLY: 11,\\n STRIKEOUT: 12,\\n STAMP: 13,\\n CARET: 14,\\n INK: 15,\\n POPUP: 16,\\n FILEATTACHMENT: 17,\\n SOUND: 18,\\n MOVIE: 19,\\n WIDGET: 20,\\n SCREEN: 21,\\n PRINTERMARK: 22,\\n TRAPNET: 23,\\n WATERMARK: 24,\\n THREED: 25,\\n REDACT: 26\\n };\\n e.AnnotationReplyType = {\\n GROUP: \\"Group\\",\\n REPLY: \\"R\\"\\n };\\n e.AnnotationFlag = {\\n INVISIBLE: 1,\\n HIDDEN: 2,\\n PRINT: 4,\\n NOZOOM: 8,\\n NOROTATE: 16,\\n NOVIEW: 32,\\n READONLY: 64,\\n LOCKED: 128,\\n TOGGLENOVIEW: 256,\\n LOCKEDCONTENTS: 512\\n };\\n e.AnnotationFieldFlag = {\\n READONLY: 1,\\n REQUIRED: 2,\\n NOEXPORT: 4,\\n MULTILINE: 4096,\\n PASSWORD: 8192,\\n NOTOGGLETOOFF: 16384,\\n RADIO: 32768,\\n PUSHBUTTON: 65536,\\n COMBO: 131072,\\n EDIT: 262144,\\n SORT: 524288,\\n FILESELECT: 1048576,\\n MULTISELECT: 2097152,\\n DONOTSPELLCHECK: 4194304,\\n DONOTSCROLL: 8388608,\\n COMB: 16777216,\\n RICHTEXT: 33554432,\\n RADIOSINUNISON: 33554432,\\n COMMITONSELCHANGE: 67108864\\n };\\n e.AnnotationBorderStyleType = {\\n SOLID: 1,\\n DASHED: 2,\\n BEVELED: 3,\\n INSET: 4,\\n UNDERLINE: 5\\n };\\n e.AnnotationActionEventType = {\\n E: \\"Mouse Enter\\",\\n X: \\"Mouse Exit\\",\\n D: \\"Mouse Down\\",\\n U: \\"Mouse Up\\",\\n Fo: \\"Focus\\",\\n Bl: \\"Blur\\",\\n PO: \\"PageOpen\\",\\n PC: \\"PageClose\\",\\n PV: \\"PageVisible\\",\\n PI: \\"PageInvisible\\",\\n K: \\"Keystroke\\",\\n F: \\"Format\\",\\n V: \\"Validate\\",\\n C: \\"Calculate\\"\\n };\\n e.DocumentActionEventType = {\\n WC: \\"WillClose\\",\\n WS: \\"WillSave\\",\\n DS: \\"DidSave\\",\\n WP: \\"WillPrint\\",\\n DP: \\"DidPrint\\"\\n };\\n e.PageActionEventType = {\\n O: \\"PageOpen\\",\\n C: \\"PageClose\\"\\n };\\n const r = {\\n ERRORS: 0,\\n WARNINGS: 1,\\n INFOS: 5\\n };\\n e.VerbosityLevel = r;\\n e.CMapCompressionType = {\\n NONE: 0,\\n BINARY: 1\\n };\\n e.OPS = {\\n dependency: 1,\\n setLineWidth: 2,\\n setLineCap: 3,\\n setLineJoin: 4,\\n setMiterLimit: 5,\\n setDash: 6,\\n setRenderingIntent: 7,\\n setFlatness: 8,\\n setGState: 9,\\n save: 10,\\n restore: 11,\\n transform: 12,\\n moveTo: 13,\\n lineTo: 14,\\n curveTo: 15,\\n curveTo2: 16,\\n curveTo3: 17,\\n closePath: 18,\\n rectangle: 19,\\n stroke: 20,\\n closeStroke: 21,\\n fill: 22,\\n eoFill: 23,\\n fillStroke: 24,\\n eoFillStroke: 25,\\n closeFillStroke: 26,\\n closeEOFillStroke: 27,\\n endPath: 28,\\n clip: 29,\\n eoClip: 30,\\n beginText: 31,\\n endText: 32,\\n setCharSpacing: 33,\\n setWordSpacing: 34,\\n setHScale: 35,\\n setLeading: 36,\\n setFont: 37,\\n setTextRenderingMode: 38,\\n setTextRise: 39,\\n moveText: 40,\\n setLeadingMoveText: 41,\\n setTextMatrix: 42,\\n nextLine: 43,\\n showText: 44,\\n showSpacedText: 45,\\n nextLineShowText: 46,\\n nextLineSetSpacingShowText: 47,\\n setCharWidth: 48,\\n setCharWidthAndBounds: 49,\\n setStrokeColorSpace: 50,\\n setFillColorSpace: 51,\\n setStrokeColor: 52,\\n setStrokeColorN: 53,\\n setFillColor: 54,\\n setFillColorN: 55,\\n setStrokeGray: 56,\\n setFillGray: 57,\\n setStrokeRGBColor: 58,\\n setFillRGBColor: 59,\\n setStrokeCMYKColor: 60,\\n setFillCMYKColor: 61,\\n shadingFill: 62,\\n beginInlineImage: 63,\\n beginImageData: 64,\\n endInlineImage: 65,\\n paintXObject: 66,\\n markPoint: 67,\\n markPointProps: 68,\\n beginMarkedContent: 69,\\n beginMarkedContentProps: 70,\\n endMarkedContent: 71,\\n beginCompat: 72,\\n endCompat: 73,\\n paintFormXObjectBegin: 74,\\n paintFormXObjectEnd: 75,\\n beginGroup: 76,\\n endGroup: 77,\\n beginAnnotation: 80,\\n endAnnotation: 81,\\n paintImageMaskXObject: 83,\\n paintImageMaskXObjectGroup: 84,\\n paintImageXObject: 85,\\n paintInlineImageXObject: 86,\\n paintInlineImageXObjectGroup: 87,\\n paintImageXObjectRepeat: 88,\\n paintImageMaskXObjectRepeat: 89,\\n paintSolidColorImageMask: 90,\\n constructPath: 91\\n };\\n e.PasswordResponses = {\\n NEED_PASSWORD: 1,\\n INCORRECT_PASSWORD: 2\\n };\\n let s = r.WARNINGS;\\n function warn(t) {\\n s >= r.WARNINGS && console.log(\\"Warning: \\".concat(t));\\n }\\n function unreachable(t) {\\n throw new Error(t);\\n }\\n function shadow(t, e, n) {\\n let i = arguments.length > 3 && void 0 !== arguments[3] && arguments[3];\\n Object.defineProperty(t, e, {\\n value: n,\\n enumerable: !i,\\n configurable: !0,\\n writable: !1\\n });\\n return n;\\n }\\n const a = function BaseExceptionClosure() {\\n function BaseException(t, e) {\\n this.constructor === BaseException && unreachable(\\"Cannot initialize BaseException.\\");\\n this.message = t;\\n this.name = e;\\n }\\n BaseException.prototype = new Error();\\n BaseException.constructor = BaseException;\\n return BaseException;\\n }();\\n e.BaseException = a;\\n e.PasswordException = class PasswordException extends a {\\n constructor(t, e) {\\n super(t, \\"PasswordException\\");\\n this.code = e;\\n }\\n };\\n e.UnknownErrorException = class UnknownErrorException extends a {\\n constructor(t, e) {\\n super(t, \\"UnknownErrorException\\");\\n this.details = e;\\n }\\n };\\n e.InvalidPDFException = class InvalidPDFException extends a {\\n constructor(t) {\\n super(t, \\"InvalidPDFException\\");\\n }\\n };\\n e.MissingPDFException = class MissingPDFException extends a {\\n constructor(t) {\\n super(t, \\"MissingPDFException\\");\\n }\\n };\\n e.UnexpectedResponseException = class UnexpectedResponseException extends a {\\n constructor(t, e) {\\n super(t, \\"UnexpectedResponseException\\");\\n this.status = e;\\n }\\n };\\n e.FormatError = class FormatError extends a {\\n constructor(t) {\\n super(t, \\"FormatError\\");\\n }\\n };\\n e.AbortException = class AbortException extends a {\\n constructor(t) {\\n super(t, \\"AbortException\\");\\n }\\n };\\n function bytesToString(t) {\\n \\"object\\" == typeof t && void 0 !== (t === null || t === void 0 ? void 0 : t.length) || unreachable(\\"Invalid argument for bytesToString\\");\\n const e = t.length,\\n n = 8192;\\n if (e < n) return String.fromCharCode.apply(null, t);\\n const i = [];\\n for (let r = 0; r < e; r += n) {\\n const s = Math.min(r + n, e),\\n a = t.subarray(r, s);\\n i.push(String.fromCharCode.apply(null, a));\\n }\\n return i.join(\\"\\");\\n }\\n function stringToBytes(t) {\\n \\"string\\" != typeof t && unreachable(\\"Invalid argument for stringToBytes\\");\\n const e = t.length,\\n n = new Uint8Array(e);\\n for (let i = 0; i < e; ++i) n[i] = 255 & t.charCodeAt(i);\\n return n;\\n }\\n e.FeatureTest = class FeatureTest {\\n static get isLittleEndian() {\\n return shadow(this, \\"isLittleEndian\\", function isLittleEndian() {\\n const t = new Uint8Array(4);\\n t[0] = 1;\\n return 1 === new Uint32Array(t.buffer, 0, 1)[0];\\n }());\\n }\\n static get isEvalSupported() {\\n return shadow(this, \\"isEvalSupported\\", function isEvalSupported() {\\n try {\\n new Function(\\"\\");\\n return !0;\\n } catch (_unused3) {\\n return !1;\\n }\\n }());\\n }\\n static get isOffscreenCanvasSupported() {\\n return shadow(this, \\"isOffscreenCanvasSupported\\", \\"undefined\\" != typeof OffscreenCanvas);\\n }\\n static get platform() {\\n return \\"undefined\\" == typeof navigator ? shadow(this, \\"platform\\", {\\n isWin: !1,\\n isMac: !1\\n }) : shadow(this, \\"platform\\", {\\n isWin: navigator.platform.includes(\\"Win\\"),\\n isMac: navigator.platform.includes(\\"Mac\\")\\n });\\n }\\n };\\n const o = [...Array(256).keys()].map(t => t.toString(16).padStart(2, \\"0\\"));\\n e.Util = class Util {\\n static makeHexColor(t, e, n) {\\n return \\"#\\".concat(o[t]).concat(o[e]).concat(o[n]);\\n }\\n static scaleMinMax(t, e) {\\n let n;\\n if (t[0]) {\\n if (t[0] < 0) {\\n n = e[0];\\n e[0] = e[1];\\n e[1] = n;\\n }\\n e[0] *= t[0];\\n e[1] *= t[0];\\n if (t[3] < 0) {\\n n = e[2];\\n e[2] = e[3];\\n e[3] = n;\\n }\\n e[2] *= t[3];\\n e[3] *= t[3];\\n } else {\\n n = e[0];\\n e[0] = e[2];\\n e[2] = n;\\n n = e[1];\\n e[1] = e[3];\\n e[3] = n;\\n if (t[1] < 0) {\\n n = e[2];\\n e[2] = e[3];\\n e[3] = n;\\n }\\n e[2] *= t[1];\\n e[3] *= t[1];\\n if (t[2] < 0) {\\n n = e[0];\\n e[0] = e[1];\\n e[1] = n;\\n }\\n e[0] *= t[2];\\n e[1] *= t[2];\\n }\\n e[0] += t[4];\\n e[1] += t[4];\\n e[2] += t[5];\\n e[3] += t[5];\\n }\\n static transform(t, e) {\\n return [t[0] * e[0] + t[2] * e[1], t[1] * e[0] + t[3] * e[1], t[0] * e[2] + t[2] * e[3], t[1] * e[2] + t[3] * e[3], t[0] * e[4] + t[2] * e[5] + t[4], t[1] * e[4] + t[3] * e[5] + t[5]];\\n }\\n static applyTransform(t, e) {\\n return [t[0] * e[0] + t[1] * e[2] + e[4], t[0] * e[1] + t[1] * e[3] + e[5]];\\n }\\n static applyInverseTransform(t, e) {\\n const n = e[0] * e[3] - e[1] * e[2];\\n return [(t[0] * e[3] - t[1] * e[2] + e[2] * e[5] - e[4] * e[3]) / n, (-t[0] * e[1] + t[1] * e[0] + e[4] * e[1] - e[5] * e[0]) / n];\\n }\\n static getAxialAlignedBoundingBox(t, e) {\\n const n = this.applyTransform(t, e),\\n i = this.applyTransform(t.slice(2, 4), e),\\n r = this.applyTransform([t[0], t[3]], e),\\n s = this.applyTransform([t[2], t[1]], e);\\n return [Math.min(n[0], i[0], r[0], s[0]), Math.min(n[1], i[1], r[1], s[1]), Math.max(n[0], i[0], r[0], s[0]), Math.max(n[1], i[1], r[1], s[1])];\\n }\\n static inverseTransform(t) {\\n const e = t[0] * t[3] - t[1] * t[2];\\n return [t[3] / e, -t[1] / e, -t[2] / e, t[0] / e, (t[2] * t[5] - t[4] * t[3]) / e, (t[4] * t[1] - t[5] * t[0]) / e];\\n }\\n static singularValueDecompose2dScale(t) {\\n const e = [t[0], t[2], t[1], t[3]],\\n n = t[0] * e[0] + t[1] * e[2],\\n i = t[0] * e[1] + t[1] * e[3],\\n r = t[2] * e[0] + t[3] * e[2],\\n s = t[2] * e[1] + t[3] * e[3],\\n a = (n + s) / 2,\\n o = Math.sqrt((n + s) ** 2 - 4 * (n * s - r * i)) / 2,\\n l = a + o || 1,\\n c = a - o || 1;\\n return [Math.sqrt(l), Math.sqrt(c)];\\n }\\n static normalizeRect(t) {\\n const e = t.slice(0);\\n if (t[0] > t[2]) {\\n e[0] = t[2];\\n e[2] = t[0];\\n }\\n if (t[1] > t[3]) {\\n e[1] = t[3];\\n e[3] = t[1];\\n }\\n return e;\\n }\\n static intersect(t, e) {\\n const n = Math.max(Math.min(t[0], t[2]), Math.min(e[0], e[2])),\\n i = Math.min(Math.max(t[0], t[2]), Math.max(e[0], e[2]));\\n if (n > i) return null;\\n const r = Math.max(Math.min(t[1], t[3]), Math.min(e[1], e[3])),\\n s = Math.min(Math.max(t[1], t[3]), Math.max(e[1], e[3]));\\n return r > s ? null : [n, r, i, s];\\n }\\n static bezierBoundingBox(t, e, n, i, r, s, a, o) {\\n const l = [],\\n c = [[], []];\\n let h, d, u, p, f, g, m, b;\\n for (let c = 0; c < 2; ++c) {\\n if (0 === c) {\\n d = 6 * t - 12 * n + 6 * r;\\n h = -3 * t + 9 * n - 9 * r + 3 * a;\\n u = 3 * n - 3 * t;\\n } else {\\n d = 6 * e - 12 * i + 6 * s;\\n h = -3 * e + 9 * i - 9 * s + 3 * o;\\n u = 3 * i - 3 * e;\\n }\\n if (Math.abs(h) < 1e-12) {\\n if (Math.abs(d) < 1e-12) continue;\\n p = -u / d;\\n 0 < p && p < 1 && l.push(p);\\n } else {\\n m = d * d - 4 * u * h;\\n b = Math.sqrt(m);\\n if (!(m < 0)) {\\n f = (-d + b) / (2 * h);\\n 0 < f && f < 1 && l.push(f);\\n g = (-d - b) / (2 * h);\\n 0 < g && g < 1 && l.push(g);\\n }\\n }\\n }\\n let v,\\n y = l.length;\\n const A = y;\\n for (; y--;) {\\n p = l[y];\\n v = 1 - p;\\n c[0][y] = v * v * v * t + 3 * v * v * p * n + 3 * v * p * p * r + p * p * p * a;\\n c[1][y] = v * v * v * e + 3 * v * v * p * i + 3 * v * p * p * s + p * p * p * o;\\n }\\n c[0][A] = t;\\n c[1][A] = e;\\n c[0][A + 1] = a;\\n c[1][A + 1] = o;\\n c[0].length = c[1].length = A + 2;\\n return [Math.min(...c[0]), Math.min(...c[1]), Math.max(...c[0]), Math.max(...c[1])];\\n }\\n };\\n const l = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 728, 711, 710, 729, 733, 731, 730, 732, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8226, 8224, 8225, 8230, 8212, 8211, 402, 8260, 8249, 8250, 8722, 8240, 8222, 8220, 8221, 8216, 8217, 8218, 8482, 64257, 64258, 321, 338, 352, 376, 381, 305, 322, 339, 353, 382, 0, 8364];\\n function stringToUTF8String(t) {\\n return decodeURIComponent(escape(t));\\n }\\n e.PromiseCapability = (_t = /*#__PURE__*/new WeakMap(), class PromiseCapability {\\n constructor() {\\n _classPrivateFieldInitSpec(this, _t, {\\n writable: true,\\n value: !1\\n });\\n this.promise = new Promise((t, e) => {\\n this.resolve = e => {\\n _classPrivateFieldSet(this, _t, !0);\\n t(e);\\n };\\n this.reject = t => {\\n _classPrivateFieldSet(this, _t, !0);\\n e(t);\\n };\\n });\\n }\\n get settled() {\\n return _classPrivateFieldGet(this, _t);\\n }\\n });\\n let c = null,\\n h = null;\\n }, (t, e, n) => {\\n var i = n(3),\\n r = n(4),\\n s = n(69),\\n a = n(70),\\n o = \\"WebAssembly\\",\\n l = r[o],\\n c = 7 !== Error(\\"e\\", {\\n cause: 7\\n }).cause,\\n exportGlobalErrorCauseWrapper = function exportGlobalErrorCauseWrapper(t, e) {\\n var n = {};\\n n[t] = a(t, e, c);\\n i({\\n global: !0,\\n constructor: !0,\\n arity: 1,\\n forced: c\\n }, n);\\n },\\n exportWebAssemblyErrorCauseWrapper = function exportWebAssemblyErrorCauseWrapper(t, e) {\\n if (l && l[t]) {\\n var n = {};\\n n[t] = a(o + \\".\\" + t, e, c);\\n i({\\n target: o,\\n stat: !0,\\n constructor: !0,\\n arity: 1,\\n forced: c\\n }, n);\\n }\\n };\\n exportGlobalErrorCauseWrapper(\\"Error\\", function (t) {\\n return function Error(e) {\\n return s(t, this, arguments);\\n };\\n });\\n exportGlobalErrorCauseWrapper(\\"EvalError\\", function (t) {\\n return function EvalError(e) {\\n return s(t, this, arguments);\\n };\\n });\\n exportGlobalErrorCauseWrapper(\\"RangeError\\", function (t) {\\n return function RangeError(e) {\\n return s(t, this, arguments);\\n };\\n });\\n exportGlobalErrorCauseWrapper(\\"ReferenceError\\", function (t) {\\n return function ReferenceError(e) {\\n return s(t, this, arguments);\\n };\\n });\\n exportGlobalErrorCauseWrapper(\\"SyntaxError\\", function (t) {\\n return function SyntaxError(e) {\\n return s(t, this, arguments);\\n };\\n });\\n exportGlobalErrorCauseWrapper(\\"TypeError\\", function (t) {\\n return function TypeError(e) {\\n return s(t, this, arguments);\\n };\\n });\\n exportGlobalErrorCauseWrapper(\\"URIError\\", function (t) {\\n return function URIError(e) {\\n return s(t, this, arguments);\\n };\\n });\\n exportWebAssemblyErrorCauseWrapper(\\"CompileError\\", function (t) {\\n return function CompileError(e) {\\n return s(t, this, arguments);\\n };\\n });\\n exportWebAssemblyErrorCauseWrapper(\\"LinkError\\", function (t) {\\n return function LinkError(e) {\\n return s(t, this, arguments);\\n };\\n });\\n exportWebAssemblyErrorCauseWrapper(\\"RuntimeError\\", function (t) {\\n return function RuntimeError(e) {\\n return s(t, this, arguments);\\n };\\n });\\n }, (t, e, n) => {\\n var i = n(4),\\n r = n(5).f,\\n s = n(44),\\n a = n(48),\\n o = n(38),\\n l = n(56),\\n c = n(68);\\n t.exports = function (t, e) {\\n var n,\\n h,\\n d,\\n u,\\n p,\\n f = t.target,\\n g = t.global,\\n m = t.stat;\\n if (n = g ? i : m ? i[f] || o(f, {}) : (i[f] || {}).prototype) for (h in e) {\\n u = e[h];\\n d = t.dontCallGetSet ? (p = r(n, h)) && p.value : n[h];\\n if (!c(g ? h : f + (m ? \\".\\" : \\"#\\") + h, t.forced) && void 0 !== d) {\\n if (typeof u == typeof d) continue;\\n l(u, d);\\n }\\n (t.sham || d && d.sham) && s(u, \\"sham\\", !0);\\n a(n, h, u, t);\\n }\\n };\\n }, function (t) {\\n var check = function check(t) {\\n return t && t.Math == Math && t;\\n };\\n t.exports = check(\\"object\\" == typeof globalThis && globalThis) || check(\\"object\\" == typeof window && window) || check(\\"object\\" == typeof self && self) || check(\\"object\\" == typeof __webpack_require__.g && __webpack_require__.g) || function () {\\n return this;\\n }() || this || Function(\\"return this\\")();\\n }, (t, e, n) => {\\n var i = n(6),\\n r = n(8),\\n s = n(10),\\n a = n(11),\\n o = n(12),\\n l = n(18),\\n c = n(39),\\n h = n(42),\\n d = Object.getOwnPropertyDescriptor;\\n e.f = i ? d : function getOwnPropertyDescriptor(t, e) {\\n t = o(t);\\n e = l(e);\\n if (h) try {\\n return d(t, e);\\n } catch (t) {}\\n if (c(t, e)) return a(!r(s.f, t, e), t[e]);\\n };\\n }, (t, e, n) => {\\n var i = n(7);\\n t.exports = !i(function () {\\n return 7 != Object.defineProperty({}, 1, {\\n get: function get() {\\n return 7;\\n }\\n })[1];\\n });\\n }, t => {\\n t.exports = function (t) {\\n try {\\n return !!t();\\n } catch (t) {\\n return !0;\\n }\\n };\\n }, (t, e, n) => {\\n var i = n(9),\\n r = Function.prototype.call;\\n t.exports = i ? r.bind(r) : function () {\\n return r.apply(r, arguments);\\n };\\n }, (t, e, n) => {\\n var i = n(7);\\n t.exports = !i(function () {\\n var t = function () {}.bind();\\n return \\"function\\" != typeof t || t.hasOwnProperty(\\"prototype\\");\\n });\\n }, (t, e) => {\\n \\"use strict\\";\\n\\n var n = {}.propertyIsEnumerable,\\n i = Object.getOwnPropertyDescriptor,\\n r = i && !n.call({\\n 1: 2\\n }, 1);\\n e.f = r ? function propertyIsEnumerable(t) {\\n var e = i(this, t);\\n return !!e && e.enumerable;\\n } : n;\\n }, t => {\\n t.exports = function (t, e) {\\n return {\\n enumerable: !(1 & t),\\n configurable: !(2 & t),\\n writable: !(4 & t),\\n value: e\\n };\\n };\\n }, (t, e, n) => {\\n var i = n(13),\\n r = n(16);\\n t.exports = function (t) {\\n return i(r(t));\\n };\\n }, (t, e, n) => {\\n var i = n(14),\\n r = n(7),\\n s = n(15),\\n a = Object,\\n o = i(\\"\\".split);\\n t.exports = r(function () {\\n return !a(\\"z\\").propertyIsEnumerable(0);\\n }) ? function (t) {\\n return \\"String\\" == s(t) ? o(t, \\"\\") : a(t);\\n } : a;\\n }, (t, e, n) => {\\n var i = n(9),\\n r = Function.prototype,\\n s = r.call,\\n a = i && r.bind.bind(s, s);\\n t.exports = i ? a : function (t) {\\n return function () {\\n return s.apply(t, arguments);\\n };\\n };\\n }, (t, e, n) => {\\n var i = n(14),\\n r = i({}.toString),\\n s = i(\\"\\".slice);\\n t.exports = function (t) {\\n return s(r(t), 8, -1);\\n };\\n }, (t, e, n) => {\\n var i = n(17),\\n r = TypeError;\\n t.exports = function (t) {\\n if (i(t)) throw r(\\"Can't call method on \\" + t);\\n return t;\\n };\\n }, t => {\\n t.exports = function (t) {\\n return null == t;\\n };\\n }, (t, e, n) => {\\n var i = n(19),\\n r = n(23);\\n t.exports = function (t) {\\n var e = i(t, \\"string\\");\\n return r(e) ? e : e + \\"\\";\\n };\\n }, (t, e, n) => {\\n var i = n(8),\\n r = n(20),\\n s = n(23),\\n a = n(30),\\n o = n(33),\\n l = n(34),\\n c = TypeError,\\n h = l(\\"toPrimitive\\");\\n t.exports = function (t, e) {\\n if (!r(t) || s(t)) return t;\\n var n,\\n l = a(t, h);\\n if (l) {\\n void 0 === e && (e = \\"default\\");\\n n = i(l, t, e);\\n if (!r(n) || s(n)) return n;\\n throw c(\\"Can't convert object to primitive value\\");\\n }\\n void 0 === e && (e = \\"number\\");\\n return o(t, e);\\n };\\n }, (t, e, n) => {\\n var i = n(21),\\n r = n(22),\\n s = r.all;\\n t.exports = r.IS_HTMLDDA ? function (t) {\\n return \\"object\\" == typeof t ? null !== t : i(t) || t === s;\\n } : function (t) {\\n return \\"object\\" == typeof t ? null !== t : i(t);\\n };\\n }, (t, e, n) => {\\n var i = n(22),\\n r = i.all;\\n t.exports = i.IS_HTMLDDA ? function (t) {\\n return \\"function\\" == typeof t || t === r;\\n } : function (t) {\\n return \\"function\\" == typeof t;\\n };\\n }, t => {\\n var e = \\"object\\" == typeof document && document.all,\\n n = void 0 === e && void 0 !== e;\\n t.exports = {\\n all: e,\\n IS_HTMLDDA: n\\n };\\n }, (t, e, n) => {\\n var i = n(24),\\n r = n(21),\\n s = n(25),\\n a = n(26),\\n o = Object;\\n t.exports = a ? function (t) {\\n return \\"symbol\\" == typeof t;\\n } : function (t) {\\n var e = i(\\"Symbol\\");\\n return r(e) && s(e.prototype, o(t));\\n };\\n }, (t, e, n) => {\\n var i = n(4),\\n r = n(21);\\n t.exports = function (t, e) {\\n return arguments.length < 2 ? (n = i[t], r(n) ? n : void 0) : i[t] && i[t][e];\\n var n;\\n };\\n }, (t, e, n) => {\\n var i = n(14);\\n t.exports = i({}.isPrototypeOf);\\n }, (t, e, n) => {\\n var i = n(27);\\n t.exports = i && !Symbol.sham && \\"symbol\\" == typeof Symbol.iterator;\\n }, (t, e, n) => {\\n var i = n(28),\\n r = n(7),\\n s = n(4).String;\\n t.exports = !!Object.getOwnPropertySymbols && !r(function () {\\n var t = Symbol();\\n return !s(t) || !(Object(t) instanceof Symbol) || !Symbol.sham && i && i < 41;\\n });\\n }, (t, e, n) => {\\n var i,\\n r,\\n s = n(4),\\n a = n(29),\\n o = s.process,\\n l = s.Deno,\\n c = o && o.versions || l && l.version,\\n h = c && c.v8;\\n h && (r = (i = h.split(\\".\\"))[0] > 0 && i[0] < 4 ? 1 : +(i[0] + i[1]));\\n !r && a && (!(i = a.match(/Edge\\\\/(\\\\d+)/)) || i[1] >= 74) && (i = a.match(/Chrome\\\\/(\\\\d+)/)) && (r = +i[1]);\\n t.exports = r;\\n }, t => {\\n t.exports = \\"undefined\\" != typeof navigator && String(navigator.userAgent) || \\"\\";\\n }, (t, e, n) => {\\n var i = n(31),\\n r = n(17);\\n t.exports = function (t, e) {\\n var n = t[e];\\n return r(n) ? void 0 : i(n);\\n };\\n }, (t, e, n) => {\\n var i = n(21),\\n r = n(32),\\n s = TypeError;\\n t.exports = function (t) {\\n if (i(t)) return t;\\n throw s(r(t) + \\" is not a function\\");\\n };\\n }, t => {\\n var e = String;\\n t.exports = function (t) {\\n try {\\n return e(t);\\n } catch (t) {\\n return \\"Object\\";\\n }\\n };\\n }, (t, e, n) => {\\n var i = n(8),\\n r = n(21),\\n s = n(20),\\n a = TypeError;\\n t.exports = function (t, e) {\\n var n, o;\\n if (\\"string\\" === e && r(n = t.toString) && !s(o = i(n, t))) return o;\\n if (r(n = t.valueOf) && !s(o = i(n, t))) return o;\\n if (\\"string\\" !== e && r(n = t.toString) && !s(o = i(n, t))) return o;\\n throw a(\\"Can't convert object to primitive value\\");\\n };\\n }, (t, e, n) => {\\n var i = n(4),\\n r = n(35),\\n s = n(39),\\n a = n(41),\\n o = n(27),\\n l = n(26),\\n c = i.Symbol,\\n h = r(\\"wks\\"),\\n d = l ? c.for || c : c && c.withoutSetter || a;\\n t.exports = function (t) {\\n s(h, t) || (h[t] = o && s(c, t) ? c[t] : d(\\"Symbol.\\" + t));\\n return h[t];\\n };\\n }, (t, e, n) => {\\n var i = n(36),\\n r = n(37);\\n (t.exports = function (t, e) {\\n return r[t] || (r[t] = void 0 !== e ? e : {});\\n })(\\"versions\\", []).push({\\n version: \\"3.31.1\\",\\n mode: i ? \\"pure\\" : \\"global\\",\\n copyright: \\"© 2014-2023 Denis Pushkarev (zloirock.ru)\\",\\n license: \\"https://github.com/zloirock/core-js/blob/v3.31.1/LICENSE\\",\\n source: \\"https://github.com/zloirock/core-js\\"\\n });\\n }, t => {\\n t.exports = !1;\\n }, (t, e, n) => {\\n var i = n(4),\\n r = n(38),\\n s = \\"__core-js_shared__\\",\\n a = i[s] || r(s, {});\\n t.exports = a;\\n }, (t, e, n) => {\\n var i = n(4),\\n r = Object.defineProperty;\\n t.exports = function (t, e) {\\n try {\\n r(i, t, {\\n value: e,\\n configurable: !0,\\n writable: !0\\n });\\n } catch (n) {\\n i[t] = e;\\n }\\n return e;\\n };\\n }, (t, e, n) => {\\n var i = n(14),\\n r = n(40),\\n s = i({}.hasOwnProperty);\\n t.exports = Object.hasOwn || function hasOwn(t, e) {\\n return s(r(t), e);\\n };\\n }, (t, e, n) => {\\n var i = n(16),\\n r = Object;\\n t.exports = function (t) {\\n return r(i(t));\\n };\\n }, (t, e, n) => {\\n var i = n(14),\\n r = 0,\\n s = Math.random(),\\n a = i(1..toString);\\n t.exports = function (t) {\\n return \\"Symbol(\\" + (void 0 === t ? \\"\\" : t) + \\")_\\" + a(++r + s, 36);\\n };\\n }, (t, e, n) => {\\n var i = n(6),\\n r = n(7),\\n s = n(43);\\n t.exports = !i && !r(function () {\\n return 7 != Object.defineProperty(s(\\"div\\"), \\"a\\", {\\n get: function get() {\\n return 7;\\n }\\n }).a;\\n });\\n }, (t, e, n) => {\\n var i = n(4),\\n r = n(20),\\n s = i.document,\\n a = r(s) && r(s.createElement);\\n t.exports = function (t) {\\n return a ? s.createElement(t) : {};\\n };\\n }, (t, e, n) => {\\n var i = n(6),\\n r = n(45),\\n s = n(11);\\n t.exports = i ? function (t, e, n) {\\n return r.f(t, e, s(1, n));\\n } : function (t, e, n) {\\n t[e] = n;\\n return t;\\n };\\n }, (t, e, n) => {\\n var i = n(6),\\n r = n(42),\\n s = n(46),\\n a = n(47),\\n o = n(18),\\n l = TypeError,\\n c = Object.defineProperty,\\n h = Object.getOwnPropertyDescriptor,\\n d = \\"enumerable\\",\\n u = \\"configurable\\",\\n p = \\"writable\\";\\n e.f = i ? s ? function defineProperty(t, e, n) {\\n a(t);\\n e = o(e);\\n a(n);\\n if (\\"function\\" == typeof t && \\"prototype\\" === e && \\"value\\" in n && p in n && !n[p]) {\\n var i = h(t, e);\\n if (i && i[p]) {\\n t[e] = n.value;\\n n = {\\n configurable: u in n ? n[u] : i[u],\\n enumerable: d in n ? n[d] : i[d],\\n writable: !1\\n };\\n }\\n }\\n return c(t, e, n);\\n } : c : function defineProperty(t, e, n) {\\n a(t);\\n e = o(e);\\n a(n);\\n if (r) try {\\n return c(t, e, n);\\n } catch (t) {}\\n if (\\"get\\" in n || \\"set\\" in n) throw l(\\"Accessors not supported\\");\\n \\"value\\" in n && (t[e] = n.value);\\n return t;\\n };\\n }, (t, e, n) => {\\n var i = n(6),\\n r = n(7);\\n t.exports = i && r(function () {\\n return 42 != Object.defineProperty(function () {}, \\"prototype\\", {\\n value: 42,\\n writable: !1\\n }).prototype;\\n });\\n }, (t, e, n) => {\\n var i = n(20),\\n r = String,\\n s = TypeError;\\n t.exports = function (t) {\\n if (i(t)) return t;\\n throw s(r(t) + \\" is not an object\\");\\n };\\n }, (t, e, n) => {\\n var i = n(21),\\n r = n(45),\\n s = n(49),\\n a = n(38);\\n t.exports = function (t, e, n, o) {\\n o || (o = {});\\n var l = o.enumerable,\\n c = void 0 !== o.name ? o.name : e;\\n i(n) && s(n, c, o);\\n if (o.global) l ? t[e] = n : a(e, n);else {\\n try {\\n o.unsafe ? t[e] && (l = !0) : delete t[e];\\n } catch (t) {}\\n l ? t[e] = n : r.f(t, e, {\\n value: n,\\n enumerable: !1,\\n configurable: !o.nonConfigurable,\\n writable: !o.nonWritable\\n });\\n }\\n return t;\\n };\\n }, (t, e, n) => {\\n var i = n(14),\\n r = n(7),\\n s = n(21),\\n a = n(39),\\n o = n(6),\\n l = n(50).CONFIGURABLE,\\n c = n(51),\\n h = n(52),\\n d = h.enforce,\\n u = h.get,\\n p = String,\\n f = Object.defineProperty,\\n g = i(\\"\\".slice),\\n m = i(\\"\\".replace),\\n b = i([].join),\\n v = o && !r(function () {\\n return 8 !== f(function () {}, \\"length\\", {\\n value: 8\\n }).length;\\n }),\\n y = String(String).split(\\"String\\"),\\n A = t.exports = function (t, e, n) {\\n \\"Symbol(\\" === g(p(e), 0, 7) && (e = \\"[\\" + m(p(e), /^Symbol\\\\(([^)]*)\\\\)/, \\"$1\\") + \\"]\\");\\n n && n.getter && (e = \\"get \\" + e);\\n n && n.setter && (e = \\"set \\" + e);\\n (!a(t, \\"name\\") || l && t.name !== e) && (o ? f(t, \\"name\\", {\\n value: e,\\n configurable: !0\\n }) : t.name = e);\\n v && n && a(n, \\"arity\\") && t.length !== n.arity && f(t, \\"length\\", {\\n value: n.arity\\n });\\n try {\\n n && a(n, \\"constructor\\") && n.constructor ? o && f(t, \\"prototype\\", {\\n writable: !1\\n }) : t.prototype && (t.prototype = void 0);\\n } catch (t) {}\\n var i = d(t);\\n a(i, \\"source\\") || (i.source = b(y, \\"string\\" == typeof e ? e : \\"\\"));\\n return t;\\n };\\n Function.prototype.toString = A(function toString() {\\n return s(this) && u(this).source || c(this);\\n }, \\"toString\\");\\n }, (t, e, n) => {\\n var i = n(6),\\n r = n(39),\\n s = Function.prototype,\\n a = i && Object.getOwnPropertyDescriptor,\\n o = r(s, \\"name\\"),\\n l = o && \\"something\\" === function something() {}.name,\\n c = o && (!i || i && a(s, \\"name\\").configurable);\\n t.exports = {\\n EXISTS: o,\\n PROPER: l,\\n CONFIGURABLE: c\\n };\\n }, (t, e, n) => {\\n var i = n(14),\\n r = n(21),\\n s = n(37),\\n a = i(Function.toString);\\n r(s.inspectSource) || (s.inspectSource = function (t) {\\n return a(t);\\n });\\n t.exports = s.inspectSource;\\n }, (t, e, n) => {\\n var i,\\n r,\\n s,\\n a = n(53),\\n o = n(4),\\n l = n(20),\\n c = n(44),\\n h = n(39),\\n d = n(37),\\n u = n(54),\\n p = n(55),\\n f = \\"Object already initialized\\",\\n g = o.TypeError,\\n m = o.WeakMap;\\n if (a || d.state) {\\n var b = d.state || (d.state = new m());\\n b.get = b.get;\\n b.has = b.has;\\n b.set = b.set;\\n i = function i(t, e) {\\n if (b.has(t)) throw g(f);\\n e.facade = t;\\n b.set(t, e);\\n return e;\\n };\\n r = function r(t) {\\n return b.get(t) || {};\\n };\\n s = function s(t) {\\n return b.has(t);\\n };\\n } else {\\n var v = u(\\"state\\");\\n p[v] = !0;\\n i = function i(t, e) {\\n if (h(t, v)) throw g(f);\\n e.facade = t;\\n c(t, v, e);\\n return e;\\n };\\n r = function r(t) {\\n return h(t, v) ? t[v] : {};\\n };\\n s = function s(t) {\\n return h(t, v);\\n };\\n }\\n t.exports = {\\n set: i,\\n get: r,\\n has: s,\\n enforce: function enforce(t) {\\n return s(t) ? r(t) : i(t, {});\\n },\\n getterFor: function getterFor(t) {\\n return function (e) {\\n var n;\\n if (!l(e) || (n = r(e)).type !== t) throw g(\\"Incompatible receiver, \\" + t + \\" required\\");\\n return n;\\n };\\n }\\n };\\n }, (t, e, n) => {\\n var i = n(4),\\n r = n(21),\\n s = i.WeakMap;\\n t.exports = r(s) && /native code/.test(String(s));\\n }, (t, e, n) => {\\n var i = n(35),\\n r = n(41),\\n s = i(\\"keys\\");\\n t.exports = function (t) {\\n return s[t] || (s[t] = r(t));\\n };\\n }, t => {\\n t.exports = {};\\n }, (t, e, n) => {\\n var i = n(39),\\n r = n(57),\\n s = n(5),\\n a = n(45);\\n t.exports = function (t, e, n) {\\n for (var o = r(e), l = a.f, c = s.f, h = 0; h < o.length; h++) {\\n var d = o[h];\\n i(t, d) || n && i(n, d) || l(t, d, c(e, d));\\n }\\n };\\n }, (t, e, n) => {\\n var i = n(24),\\n r = n(14),\\n s = n(58),\\n a = n(67),\\n o = n(47),\\n l = r([].concat);\\n t.exports = i(\\"Reflect\\", \\"ownKeys\\") || function ownKeys(t) {\\n var e = s.f(o(t)),\\n n = a.f;\\n return n ? l(e, n(t)) : e;\\n };\\n }, (t, e, n) => {\\n var i = n(59),\\n r = n(66).concat(\\"length\\", \\"prototype\\");\\n e.f = Object.getOwnPropertyNames || function getOwnPropertyNames(t) {\\n return i(t, r);\\n };\\n }, (t, e, n) => {\\n var i = n(14),\\n r = n(39),\\n s = n(12),\\n a = n(60).indexOf,\\n o = n(55),\\n l = i([].push);\\n t.exports = function (t, e) {\\n var n,\\n i = s(t),\\n c = 0,\\n h = [];\\n for (n in i) !r(o, n) && r(i, n) && l(h, n);\\n for (; e.length > c;) r(i, n = e[c++]) && (~a(h, n) || l(h, n));\\n return h;\\n };\\n }, (t, e, n) => {\\n var i = n(12),\\n r = n(61),\\n s = n(64),\\n createMethod = function createMethod(t) {\\n return function (e, n, a) {\\n var o,\\n l = i(e),\\n c = s(l),\\n h = r(a, c);\\n if (t && n != n) {\\n for (; c > h;) if ((o = l[h++]) != o) return !0;\\n } else for (; c > h; h++) if ((t || h in l) && l[h] === n) return t || h || 0;\\n return !t && -1;\\n };\\n };\\n t.exports = {\\n includes: createMethod(!0),\\n indexOf: createMethod(!1)\\n };\\n }, (t, e, n) => {\\n var i = n(62),\\n r = Math.max,\\n s = Math.min;\\n t.exports = function (t, e) {\\n var n = i(t);\\n return n < 0 ? r(n + e, 0) : s(n, e);\\n };\\n }, (t, e, n) => {\\n var i = n(63);\\n t.exports = function (t) {\\n var e = +t;\\n return e != e || 0 === e ? 0 : i(e);\\n };\\n }, t => {\\n var e = Math.ceil,\\n n = Math.floor;\\n t.exports = Math.trunc || function trunc(t) {\\n var i = +t;\\n return (i > 0 ? n : e)(i);\\n };\\n }, (t, e, n) => {\\n var i = n(65);\\n t.exports = function (t) {\\n return i(t.length);\\n };\\n }, (t, e, n) => {\\n var i = n(62),\\n r = Math.min;\\n t.exports = function (t) {\\n return t > 0 ? r(i(t), 9007199254740991) : 0;\\n };\\n }, t => {\\n t.exports = [\\"constructor\\", \\"hasOwnProperty\\", \\"isPrototypeOf\\", \\"propertyIsEnumerable\\", \\"toLocaleString\\", \\"toString\\", \\"valueOf\\"];\\n }, (t, e) => {\\n e.f = Object.getOwnPropertySymbols;\\n }, (t, e, n) => {\\n var i = n(7),\\n r = n(21),\\n s = /#|\\\\.prototype\\\\./,\\n isForced = function isForced(t, e) {\\n var n = o[a(t)];\\n return n == c || n != l && (r(e) ? i(e) : !!e);\\n },\\n a = isForced.normalize = function (t) {\\n return String(t).replace(s, \\".\\").toLowerCase();\\n },\\n o = isForced.data = {},\\n l = isForced.NATIVE = \\"N\\",\\n c = isForced.POLYFILL = \\"P\\";\\n t.exports = isForced;\\n }, (t, e, n) => {\\n var i = n(9),\\n r = Function.prototype,\\n s = r.apply,\\n a = r.call;\\n t.exports = \\"object\\" == typeof Reflect && Reflect.apply || (i ? a.bind(s) : function () {\\n return a.apply(s, arguments);\\n });\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n var i = n(24),\\n r = n(39),\\n s = n(44),\\n a = n(25),\\n o = n(71),\\n l = n(56),\\n c = n(74),\\n h = n(75),\\n d = n(76),\\n u = n(80),\\n p = n(81),\\n f = n(6),\\n g = n(36);\\n t.exports = function (t, e, n, m) {\\n var b = \\"stackTraceLimit\\",\\n v = m ? 2 : 1,\\n y = t.split(\\".\\"),\\n A = y[y.length - 1],\\n _ = i.apply(null, y);\\n if (_) {\\n var S = _.prototype;\\n !g && r(S, \\"cause\\") && delete S.cause;\\n if (!n) return _;\\n var E = i(\\"Error\\"),\\n x = e(function (t, e) {\\n var n = d(m ? e : t, void 0),\\n i = m ? new _(t) : new _();\\n void 0 !== n && s(i, \\"message\\", n);\\n p(i, x, i.stack, 2);\\n this && a(S, this) && h(i, this, x);\\n arguments.length > v && u(i, arguments[v]);\\n return i;\\n });\\n x.prototype = S;\\n if (\\"Error\\" !== A) o ? o(x, E) : l(x, E, {\\n name: !0\\n });else if (f && b in _) {\\n c(x, _, b);\\n c(x, _, \\"prepareStackTrace\\");\\n }\\n l(x, _);\\n if (!g) try {\\n S.name !== A && s(S, \\"name\\", A);\\n S.constructor = x;\\n } catch (t) {}\\n return x;\\n }\\n };\\n }, (t, e, n) => {\\n var i = n(72),\\n r = n(47),\\n s = n(73);\\n t.exports = Object.setPrototypeOf || (\\"__proto__\\" in {} ? function () {\\n var t,\\n e = !1,\\n n = {};\\n try {\\n (t = i(Object.prototype, \\"__proto__\\", \\"set\\"))(n, []);\\n e = n instanceof Array;\\n } catch (t) {}\\n return function setPrototypeOf(n, i) {\\n r(n);\\n s(i);\\n e ? t(n, i) : n.__proto__ = i;\\n return n;\\n };\\n }() : void 0);\\n }, (t, e, n) => {\\n var i = n(14),\\n r = n(31);\\n t.exports = function (t, e, n) {\\n try {\\n return i(r(Object.getOwnPropertyDescriptor(t, e)[n]));\\n } catch (t) {}\\n };\\n }, (t, e, n) => {\\n var i = n(21),\\n r = String,\\n s = TypeError;\\n t.exports = function (t) {\\n if (\\"object\\" == typeof t || i(t)) return t;\\n throw s(\\"Can't set \\" + r(t) + \\" as a prototype\\");\\n };\\n }, (t, e, n) => {\\n var i = n(45).f;\\n t.exports = function (t, e, n) {\\n n in t || i(t, n, {\\n configurable: !0,\\n get: function get() {\\n return e[n];\\n },\\n set: function set(t) {\\n e[n] = t;\\n }\\n });\\n };\\n }, (t, e, n) => {\\n var i = n(21),\\n r = n(20),\\n s = n(71);\\n t.exports = function (t, e, n) {\\n var a, o;\\n s && i(a = e.constructor) && a !== n && r(o = a.prototype) && o !== n.prototype && s(t, o);\\n return t;\\n };\\n }, (t, e, n) => {\\n var i = n(77);\\n t.exports = function (t, e) {\\n return void 0 === t ? arguments.length < 2 ? \\"\\" : e : i(t);\\n };\\n }, (t, e, n) => {\\n var i = n(78),\\n r = String;\\n t.exports = function (t) {\\n if (\\"Symbol\\" === i(t)) throw TypeError(\\"Cannot convert a Symbol value to a string\\");\\n return r(t);\\n };\\n }, (t, e, n) => {\\n var i = n(79),\\n r = n(21),\\n s = n(15),\\n a = n(34)(\\"toStringTag\\"),\\n o = Object,\\n l = \\"Arguments\\" == s(function () {\\n return arguments;\\n }());\\n t.exports = i ? s : function (t) {\\n var e, n, i;\\n return void 0 === t ? \\"Undefined\\" : null === t ? \\"Null\\" : \\"string\\" == typeof (n = function (t, e) {\\n try {\\n return t[e];\\n } catch (t) {}\\n }(e = o(t), a)) ? n : l ? s(e) : \\"Object\\" == (i = s(e)) && r(e.callee) ? \\"Arguments\\" : i;\\n };\\n }, (t, e, n) => {\\n var i = {};\\n i[n(34)(\\"toStringTag\\")] = \\"z\\";\\n t.exports = \\"[object z]\\" === String(i);\\n }, (t, e, n) => {\\n var i = n(20),\\n r = n(44);\\n t.exports = function (t, e) {\\n i(e) && \\"cause\\" in e && r(t, \\"cause\\", e.cause);\\n };\\n }, (t, e, n) => {\\n var i = n(44),\\n r = n(82),\\n s = n(83),\\n a = Error.captureStackTrace;\\n t.exports = function (t, e, n, o) {\\n s && (a ? a(t, e) : i(t, \\"stack\\", r(n, o)));\\n };\\n }, (t, e, n) => {\\n var i = n(14),\\n r = Error,\\n s = i(\\"\\".replace),\\n a = String(r(\\"zxcasd\\").stack),\\n o = /\\\\n\\\\s*at [^:]*:[^\\\\n]*/,\\n l = o.test(a);\\n t.exports = function (t, e) {\\n if (l && \\"string\\" == typeof t && !r.prepareStackTrace) for (; e--;) t = s(t, o, \\"\\");\\n return t;\\n };\\n }, (t, e, n) => {\\n var i = n(7),\\n r = n(11);\\n t.exports = !i(function () {\\n var t = Error(\\"a\\");\\n if (!(\\"stack\\" in t)) return !0;\\n Object.defineProperty(t, \\"stack\\", r(1, 7));\\n return 7 !== t.stack;\\n });\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n var i = n(48),\\n r = n(14),\\n s = n(77),\\n a = n(85),\\n o = URLSearchParams,\\n l = o.prototype,\\n c = r(l.append),\\n h = r(l.delete),\\n d = r(l.forEach),\\n u = r([].push),\\n p = new o(\\"a=1&a=2\\");\\n p.delete(\\"a\\", 1);\\n p + \\"\\" != \\"a=2\\" && i(l, \\"delete\\", function (t) {\\n var e = arguments.length,\\n n = e < 2 ? void 0 : arguments[1];\\n if (e && void 0 === n) return h(this, t);\\n var i = [];\\n d(this, function (t, e) {\\n u(i, {\\n key: e,\\n value: t\\n });\\n });\\n a(e, 1);\\n for (var r, o = s(t), l = s(n), p = 0, f = 0, g = !1, m = i.length; p < m;) {\\n r = i[p++];\\n if (g || r.key === o) {\\n g = !0;\\n h(this, r.key);\\n } else f++;\\n }\\n for (; f < m;) (r = i[f++]).key === o && r.value === l || c(this, r.key, r.value);\\n }, {\\n enumerable: !0,\\n unsafe: !0\\n });\\n }, t => {\\n var e = TypeError;\\n t.exports = function (t, n) {\\n if (t < n) throw e(\\"Not enough arguments\\");\\n return t;\\n };\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n var i = n(48),\\n r = n(14),\\n s = n(77),\\n a = n(85),\\n o = URLSearchParams,\\n l = o.prototype,\\n c = r(l.getAll),\\n h = r(l.has);\\n new o(\\"a=1\\").has(\\"a\\", 2) && i(l, \\"has\\", function has(t) {\\n var e = arguments.length,\\n n = e < 2 ? void 0 : arguments[1];\\n if (e && void 0 === n) return h(this, t);\\n var i = c(this, t);\\n a(e, 1);\\n for (var r = s(n), o = 0; o < i.length;) if (i[o++] === r) return !0;\\n return !1;\\n }, {\\n enumerable: !0,\\n unsafe: !0\\n });\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n var i = n(6),\\n r = n(14),\\n s = n(88),\\n a = URLSearchParams.prototype,\\n o = r(a.forEach);\\n i && !(\\"size\\" in a) && s(a, \\"size\\", {\\n get: function size() {\\n var t = 0;\\n o(this, function () {\\n t++;\\n });\\n return t;\\n },\\n configurable: !0,\\n enumerable: !0\\n });\\n }, (t, e, n) => {\\n var i = n(49),\\n r = n(45);\\n t.exports = function (t, e, n) {\\n n.get && i(n.get, e, {\\n getter: !0\\n });\\n n.set && i(n.set, e, {\\n setter: !0\\n });\\n return r.f(t, e, n);\\n };\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n var i = n(3),\\n r = n(40),\\n s = n(64),\\n a = n(90),\\n o = n(92);\\n i({\\n target: \\"Array\\",\\n proto: !0,\\n arity: 1,\\n forced: n(7)(function () {\\n return 4294967297 !== [].push.call({\\n length: 4294967296\\n }, 1);\\n }) || !function () {\\n try {\\n Object.defineProperty([], \\"length\\", {\\n writable: !1\\n }).push();\\n } catch (t) {\\n return t instanceof TypeError;\\n }\\n }()\\n }, {\\n push: function push(t) {\\n var e = r(this),\\n n = s(e),\\n i = arguments.length;\\n o(n + i);\\n for (var l = 0; l < i; l++) {\\n e[n] = arguments[l];\\n n++;\\n }\\n a(e, n);\\n return n;\\n }\\n });\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n var i = n(6),\\n r = n(91),\\n s = TypeError,\\n a = Object.getOwnPropertyDescriptor,\\n o = i && !function () {\\n if (void 0 !== this) return !0;\\n try {\\n Object.defineProperty([], \\"length\\", {\\n writable: !1\\n }).length = 1;\\n } catch (t) {\\n return t instanceof TypeError;\\n }\\n }();\\n t.exports = o ? function (t, e) {\\n if (r(t) && !a(t, \\"length\\").writable) throw s(\\"Cannot set read only .length\\");\\n return t.length = e;\\n } : function (t, e) {\\n return t.length = e;\\n };\\n }, (t, e, n) => {\\n var i = n(15);\\n t.exports = Array.isArray || function isArray(t) {\\n return \\"Array\\" == i(t);\\n };\\n }, t => {\\n var e = TypeError;\\n t.exports = function (t) {\\n if (t > 9007199254740991) throw e(\\"Maximum allowed index exceeded\\");\\n return t;\\n };\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n var i = n(94),\\n r = n(98).findLast,\\n s = i.aTypedArray;\\n (0, i.exportTypedArrayMethod)(\\"findLast\\", function findLast(t) {\\n return r(s(this), t, arguments.length > 1 ? arguments[1] : void 0);\\n });\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n var i,\\n r,\\n s,\\n a = n(95),\\n o = n(6),\\n l = n(4),\\n c = n(21),\\n h = n(20),\\n d = n(39),\\n u = n(78),\\n p = n(32),\\n f = n(44),\\n g = n(48),\\n m = n(88),\\n b = n(25),\\n v = n(96),\\n y = n(71),\\n A = n(34),\\n _ = n(41),\\n S = n(52),\\n E = S.enforce,\\n x = S.get,\\n w = l.Int8Array,\\n C = w && w.prototype,\\n T = l.Uint8ClampedArray,\\n P = T && T.prototype,\\n k = w && v(w),\\n M = C && v(C),\\n R = Object.prototype,\\n I = l.TypeError,\\n D = A(\\"toStringTag\\"),\\n O = _(\\"TYPED_ARRAY_TAG\\"),\\n L = \\"TypedArrayConstructor\\",\\n N = a && !!y && \\"Opera\\" !== u(l.opera),\\n B = !1,\\n j = {\\n Int8Array: 1,\\n Uint8Array: 1,\\n Uint8ClampedArray: 1,\\n Int16Array: 2,\\n Uint16Array: 2,\\n Int32Array: 4,\\n Uint32Array: 4,\\n Float32Array: 4,\\n Float64Array: 8\\n },\\n U = {\\n BigInt64Array: 8,\\n BigUint64Array: 8\\n },\\n getTypedArrayConstructor = function getTypedArrayConstructor(t) {\\n var e = v(t);\\n if (h(e)) {\\n var n = x(e);\\n return n && d(n, L) ? n[L] : getTypedArrayConstructor(e);\\n }\\n },\\n isTypedArray = function isTypedArray(t) {\\n if (!h(t)) return !1;\\n var e = u(t);\\n return d(j, e) || d(U, e);\\n };\\n for (i in j) (s = (r = l[i]) && r.prototype) ? E(s)[L] = r : N = !1;\\n for (i in U) (s = (r = l[i]) && r.prototype) && (E(s)[L] = r);\\n if (!N || !c(k) || k === Function.prototype) {\\n k = function TypedArray() {\\n throw I(\\"Incorrect invocation\\");\\n };\\n if (N) for (i in j) l[i] && y(l[i], k);\\n }\\n if (!N || !M || M === R) {\\n M = k.prototype;\\n if (N) for (i in j) l[i] && y(l[i].prototype, M);\\n }\\n N && v(P) !== M && y(P, M);\\n if (o && !d(M, D)) {\\n B = !0;\\n m(M, D, {\\n configurable: !0,\\n get: function get() {\\n return h(this) ? this[O] : void 0;\\n }\\n });\\n for (i in j) l[i] && f(l[i], O, i);\\n }\\n t.exports = {\\n NATIVE_ARRAY_BUFFER_VIEWS: N,\\n TYPED_ARRAY_TAG: B && O,\\n aTypedArray: function aTypedArray(t) {\\n if (isTypedArray(t)) return t;\\n throw I(\\"Target is not a typed array\\");\\n },\\n aTypedArrayConstructor: function aTypedArrayConstructor(t) {\\n if (c(t) && (!y || b(k, t))) return t;\\n throw I(p(t) + \\" is not a typed array constructor\\");\\n },\\n exportTypedArrayMethod: function exportTypedArrayMethod(t, e, n, i) {\\n if (o) {\\n if (n) for (var r in j) {\\n var s = l[r];\\n if (s && d(s.prototype, t)) try {\\n delete s.prototype[t];\\n } catch (n) {\\n try {\\n s.prototype[t] = e;\\n } catch (t) {}\\n }\\n }\\n M[t] && !n || g(M, t, n ? e : N && C[t] || e, i);\\n }\\n },\\n exportTypedArrayStaticMethod: function exportTypedArrayStaticMethod(t, e, n) {\\n var i, r;\\n if (o) {\\n if (y) {\\n if (n) for (i in j) if ((r = l[i]) && d(r, t)) try {\\n delete r[t];\\n } catch (t) {}\\n if (k[t] && !n) return;\\n try {\\n return g(k, t, n ? e : N && k[t] || e);\\n } catch (t) {}\\n }\\n for (i in j) !(r = l[i]) || r[t] && !n || g(r, t, e);\\n }\\n },\\n getTypedArrayConstructor: getTypedArrayConstructor,\\n isView: function isView(t) {\\n if (!h(t)) return !1;\\n var e = u(t);\\n return \\"DataView\\" === e || d(j, e) || d(U, e);\\n },\\n isTypedArray: isTypedArray,\\n TypedArray: k,\\n TypedArrayPrototype: M\\n };\\n }, t => {\\n t.exports = \\"undefined\\" != typeof ArrayBuffer && \\"undefined\\" != typeof DataView;\\n }, (t, e, n) => {\\n var i = n(39),\\n r = n(21),\\n s = n(40),\\n a = n(54),\\n o = n(97),\\n l = a(\\"IE_PROTO\\"),\\n c = Object,\\n h = c.prototype;\\n t.exports = o ? c.getPrototypeOf : function (t) {\\n var e = s(t);\\n if (i(e, l)) return e[l];\\n var n = e.constructor;\\n return r(n) && e instanceof n ? n.prototype : e instanceof c ? h : null;\\n };\\n }, (t, e, n) => {\\n var i = n(7);\\n t.exports = !i(function () {\\n function F() {}\\n F.prototype.constructor = null;\\n return Object.getPrototypeOf(new F()) !== F.prototype;\\n });\\n }, (t, e, n) => {\\n var i = n(99),\\n r = n(13),\\n s = n(40),\\n a = n(64),\\n createMethod = function createMethod(t) {\\n var e = 1 == t;\\n return function (n, o, l) {\\n for (var c, h = s(n), d = r(h), u = i(o, l), p = a(d); p-- > 0;) if (u(c = d[p], p, h)) switch (t) {\\n case 0:\\n return c;\\n case 1:\\n return p;\\n }\\n return e ? -1 : void 0;\\n };\\n };\\n t.exports = {\\n findLast: createMethod(0),\\n findLastIndex: createMethod(1)\\n };\\n }, (t, e, n) => {\\n var i = n(100),\\n r = n(31),\\n s = n(9),\\n a = i(i.bind);\\n t.exports = function (t, e) {\\n r(t);\\n return void 0 === e ? t : s ? a(t, e) : function () {\\n return t.apply(e, arguments);\\n };\\n };\\n }, (t, e, n) => {\\n var i = n(15),\\n r = n(14);\\n t.exports = function (t) {\\n if (\\"Function\\" === i(t)) return r(t);\\n };\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n var i = n(94),\\n r = n(98).findLastIndex,\\n s = i.aTypedArray;\\n (0, i.exportTypedArrayMethod)(\\"findLastIndex\\", function findLastIndex(t) {\\n return r(s(this), t, arguments.length > 1 ? arguments[1] : void 0);\\n });\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n var i = n(4),\\n r = n(8),\\n s = n(94),\\n a = n(64),\\n o = n(103),\\n l = n(40),\\n c = n(7),\\n h = i.RangeError,\\n d = i.Int8Array,\\n u = d && d.prototype,\\n p = u && u.set,\\n f = s.aTypedArray,\\n g = s.exportTypedArrayMethod,\\n m = !c(function () {\\n var t = new Uint8ClampedArray(2);\\n r(p, t, {\\n length: 1,\\n 0: 3\\n }, 1);\\n return 3 !== t[1];\\n }),\\n b = m && s.NATIVE_ARRAY_BUFFER_VIEWS && c(function () {\\n var t = new d(2);\\n t.set(1);\\n t.set(\\"2\\", 1);\\n return 0 !== t[0] || 2 !== t[1];\\n });\\n g(\\"set\\", function set(t) {\\n f(this);\\n var e = o(arguments.length > 1 ? arguments[1] : void 0, 1),\\n n = l(t);\\n if (m) return r(p, this, n, e);\\n var i = this.length,\\n s = a(n),\\n c = 0;\\n if (s + e > i) throw h(\\"Wrong length\\");\\n for (; c < s;) this[e + c] = n[c++];\\n }, !m || b);\\n }, (t, e, n) => {\\n var i = n(104),\\n r = RangeError;\\n t.exports = function (t, e) {\\n var n = i(t);\\n if (n % e) throw r(\\"Wrong offset\\");\\n return n;\\n };\\n }, (t, e, n) => {\\n var i = n(62),\\n r = RangeError;\\n t.exports = function (t) {\\n var e = i(t);\\n if (e < 0) throw r(\\"The argument can't be less than 0\\");\\n return e;\\n };\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n var i = n(106),\\n r = n(94),\\n s = r.aTypedArray,\\n a = r.exportTypedArrayMethod,\\n o = r.getTypedArrayConstructor;\\n a(\\"toReversed\\", function toReversed() {\\n return i(s(this), o(this));\\n });\\n }, (t, e, n) => {\\n var i = n(64);\\n t.exports = function (t, e) {\\n for (var n = i(t), r = new e(n), s = 0; s < n; s++) r[s] = t[n - s - 1];\\n return r;\\n };\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n var i = n(94),\\n r = n(14),\\n s = n(31),\\n a = n(108),\\n o = i.aTypedArray,\\n l = i.getTypedArrayConstructor,\\n c = i.exportTypedArrayMethod,\\n h = r(i.TypedArrayPrototype.sort);\\n c(\\"toSorted\\", function toSorted(t) {\\n void 0 !== t && s(t);\\n var e = o(this),\\n n = a(l(e), e);\\n return h(n, t);\\n });\\n }, (t, e, n) => {\\n var i = n(64);\\n t.exports = function (t, e) {\\n for (var n = 0, r = i(e), s = new t(r); r > n;) s[n] = e[n++];\\n return s;\\n };\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n var i = n(110),\\n r = n(94),\\n s = n(111),\\n a = n(62),\\n o = n(112),\\n l = r.aTypedArray,\\n c = r.getTypedArrayConstructor,\\n h = r.exportTypedArrayMethod,\\n d = !!function () {\\n try {\\n new Int8Array(1).with(2, {\\n valueOf: function valueOf() {\\n throw 8;\\n }\\n });\\n } catch (t) {\\n return 8 === t;\\n }\\n }();\\n h(\\"with\\", {\\n with: function _with(t, e) {\\n var n = l(this),\\n r = a(t),\\n h = s(n) ? o(e) : +e;\\n return i(n, c(n), r, h);\\n }\\n }.with, !d);\\n }, (t, e, n) => {\\n var i = n(64),\\n r = n(62),\\n s = RangeError;\\n t.exports = function (t, e, n, a) {\\n var o = i(t),\\n l = r(n),\\n c = l < 0 ? o + l : l;\\n if (c >= o || c < 0) throw s(\\"Incorrect index\\");\\n for (var h = new e(o), d = 0; d < o; d++) h[d] = d === c ? a : t[d];\\n return h;\\n };\\n }, (t, e, n) => {\\n var i = n(78);\\n t.exports = function (t) {\\n var e = i(t);\\n return \\"BigInt64Array\\" == e || \\"BigUint64Array\\" == e;\\n };\\n }, (t, e, n) => {\\n var i = n(19),\\n r = TypeError;\\n t.exports = function (t) {\\n var e = i(t, \\"number\\");\\n if (\\"number\\" == typeof e) throw r(\\"Can't convert number to bigint\\");\\n return BigInt(e);\\n };\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n var i = n(6),\\n r = n(88),\\n s = n(114),\\n a = ArrayBuffer.prototype;\\n i && !(\\"detached\\" in a) && r(a, \\"detached\\", {\\n configurable: !0,\\n get: function detached() {\\n return s(this);\\n }\\n });\\n }, (t, e, n) => {\\n var i = n(14),\\n r = n(115),\\n s = i(ArrayBuffer.prototype.slice);\\n t.exports = function (t) {\\n if (0 !== r(t)) return !1;\\n try {\\n s(t, 0, 0);\\n return !1;\\n } catch (t) {\\n return !0;\\n }\\n };\\n }, (t, e, n) => {\\n var i = n(72),\\n r = n(15),\\n s = TypeError;\\n t.exports = i(ArrayBuffer.prototype, \\"byteLength\\", \\"get\\") || function (t) {\\n if (\\"ArrayBuffer\\" != r(t)) throw s(\\"ArrayBuffer expected\\");\\n return t.byteLength;\\n };\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n var i = n(3),\\n r = n(117);\\n r && i({\\n target: \\"ArrayBuffer\\",\\n proto: !0\\n }, {\\n transfer: function transfer() {\\n return r(this, arguments.length ? arguments[0] : void 0, !0);\\n }\\n });\\n }, (t, e, n) => {\\n var i = n(4),\\n r = n(14),\\n s = n(72),\\n a = n(118),\\n o = n(114),\\n l = n(115),\\n c = n(119),\\n h = i.TypeError,\\n d = i.structuredClone,\\n u = i.ArrayBuffer,\\n p = i.DataView,\\n f = Math.min,\\n g = u.prototype,\\n m = p.prototype,\\n b = r(g.slice),\\n v = s(g, \\"resizable\\", \\"get\\"),\\n y = s(g, \\"maxByteLength\\", \\"get\\"),\\n A = r(m.getInt8),\\n _ = r(m.setInt8);\\n t.exports = c && function (t, e, n) {\\n var i = l(t),\\n r = void 0 === e ? i : a(e),\\n s = !v || !v(t);\\n if (o(t)) throw h(\\"ArrayBuffer is detached\\");\\n var c = d(t, {\\n transfer: [t]\\n });\\n if (i == r && (n || s)) return c;\\n if (i >= r && (!n || s)) return b(c, 0, r);\\n for (var g = n && !s && y ? {\\n maxByteLength: y(c)\\n } : void 0, m = new u(r, g), S = new p(c), E = new p(m), x = f(r, i), w = 0; w < x; w++) _(E, w, A(S, w));\\n return m;\\n };\\n }, (t, e, n) => {\\n var i = n(62),\\n r = n(65),\\n s = RangeError;\\n t.exports = function (t) {\\n if (void 0 === t) return 0;\\n var e = i(t),\\n n = r(e);\\n if (e !== n) throw s(\\"Wrong length or index\\");\\n return n;\\n };\\n }, (t, e, n) => {\\n var i = n(4),\\n r = n(7),\\n s = n(28),\\n a = n(120),\\n o = n(121),\\n l = n(122),\\n c = i.structuredClone;\\n t.exports = !!c && !r(function () {\\n if (o && s > 92 || l && s > 94 || a && s > 97) return !1;\\n var t = new ArrayBuffer(8),\\n e = c(t, {\\n transfer: [t]\\n });\\n return 0 != t.byteLength || 8 != e.byteLength;\\n });\\n }, (t, e, n) => {\\n var i = n(121),\\n r = n(122);\\n t.exports = !i && !r && \\"object\\" == typeof window && \\"object\\" == typeof document;\\n }, t => {\\n t.exports = \\"object\\" == typeof Deno && Deno && \\"object\\" == typeof Deno.version;\\n }, (t, e, n) => {\\n var i = n(15);\\n t.exports = \\"undefined\\" != typeof process && \\"process\\" == i(process);\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n var i = n(3),\\n r = n(117);\\n r && i({\\n target: \\"ArrayBuffer\\",\\n proto: !0\\n }, {\\n transferToFixedLength: function transferToFixedLength() {\\n return r(this, arguments.length ? arguments[0] : void 0, !1);\\n }\\n });\\n }, (__unused_webpack_module, exports, __w_pdfjs_require__) => {\\n \\"use strict\\";\\n\\n Object.defineProperty(exports, \\"__esModule\\", {\\n value: !0\\n });\\n exports.RenderTask = exports.PDFWorkerUtil = exports.PDFWorker = exports.PDFPageProxy = exports.PDFDocumentProxy = exports.PDFDocumentLoadingTask = exports.PDFDataRangeTransport = exports.LoopbackPort = exports.DefaultStandardFontDataFactory = exports.DefaultFilterFactory = exports.DefaultCanvasFactory = exports.DefaultCMapReaderFactory = void 0;\\n Object.defineProperty(exports, \\"SVGGraphics\\", {\\n enumerable: !0,\\n get: function get() {\\n return _displaySvg.SVGGraphics;\\n }\\n });\\n exports.build = void 0;\\n exports.getDocument = getDocument;\\n exports.version = void 0;\\n __w_pdfjs_require__(84);\\n __w_pdfjs_require__(86);\\n __w_pdfjs_require__(87);\\n __w_pdfjs_require__(2);\\n __w_pdfjs_require__(93);\\n __w_pdfjs_require__(101);\\n __w_pdfjs_require__(102);\\n __w_pdfjs_require__(105);\\n __w_pdfjs_require__(107);\\n __w_pdfjs_require__(109);\\n __w_pdfjs_require__(113);\\n __w_pdfjs_require__(116);\\n __w_pdfjs_require__(123);\\n __w_pdfjs_require__(89);\\n __w_pdfjs_require__(125);\\n __w_pdfjs_require__(135);\\n __w_pdfjs_require__(137);\\n __w_pdfjs_require__(140);\\n __w_pdfjs_require__(142);\\n __w_pdfjs_require__(144);\\n __w_pdfjs_require__(146);\\n __w_pdfjs_require__(148);\\n __w_pdfjs_require__(151);\\n var _util = __w_pdfjs_require__(1),\\n _annotation_storage = __w_pdfjs_require__(162),\\n _display_utils = __w_pdfjs_require__(167),\\n _font_loader = __w_pdfjs_require__(170),\\n _displayNode_utils = __w_pdfjs_require__(171),\\n _canvas = __w_pdfjs_require__(172),\\n _worker_options = __w_pdfjs_require__(175),\\n _message_handler = __w_pdfjs_require__(176),\\n _metadata = __w_pdfjs_require__(177),\\n _optional_content_config = __w_pdfjs_require__(178),\\n _transport_stream = __w_pdfjs_require__(179),\\n _displayFetch_stream = __w_pdfjs_require__(180),\\n _displayNetwork = __w_pdfjs_require__(183),\\n _displayNode_stream = __w_pdfjs_require__(184),\\n _displaySvg = __w_pdfjs_require__(185),\\n _xfa_text = __w_pdfjs_require__(193);\\n const DEFAULT_RANGE_CHUNK_SIZE = 65536,\\n RENDERING_CANCELLED_TIMEOUT = 100,\\n DELAYED_CLEANUP_TIMEOUT = 5e3,\\n DefaultCanvasFactory = _util.isNodeJS ? _displayNode_utils.NodeCanvasFactory : _display_utils.DOMCanvasFactory;\\n exports.DefaultCanvasFactory = DefaultCanvasFactory;\\n const DefaultCMapReaderFactory = _util.isNodeJS ? _displayNode_utils.NodeCMapReaderFactory : _display_utils.DOMCMapReaderFactory;\\n exports.DefaultCMapReaderFactory = DefaultCMapReaderFactory;\\n const DefaultFilterFactory = _util.isNodeJS ? _displayNode_utils.NodeFilterFactory : _display_utils.DOMFilterFactory;\\n exports.DefaultFilterFactory = DefaultFilterFactory;\\n const DefaultStandardFontDataFactory = _util.isNodeJS ? _displayNode_utils.NodeStandardFontDataFactory : _display_utils.DOMStandardFontDataFactory;\\n exports.DefaultStandardFontDataFactory = DefaultStandardFontDataFactory;\\n function getDocument(t) {\\n var _t$password, _t$length;\\n \\"string\\" == typeof t || t instanceof URL ? t = {\\n url: t\\n } : (0, _util.isArrayBuffer)(t) && (t = {\\n data: t\\n });\\n if (\\"object\\" != typeof t) throw new Error(\\"Invalid parameter in getDocument, need parameter object.\\");\\n if (!t.url && !t.data && !t.range) throw new Error(\\"Invalid parameter object: need either .data, .range or .url\\");\\n const e = new PDFDocumentLoadingTask(),\\n {\\n docId: n\\n } = e,\\n i = t.url ? getUrlProp(t.url) : null,\\n r = t.data ? getDataProp(t.data) : null,\\n s = t.httpHeaders || null,\\n a = !0 === t.withCredentials,\\n o = (_t$password = t.password) !== null && _t$password !== void 0 ? _t$password : null,\\n l = t.range instanceof PDFDataRangeTransport ? t.range : null,\\n c = Number.isInteger(t.rangeChunkSize) && t.rangeChunkSize > 0 ? t.rangeChunkSize : DEFAULT_RANGE_CHUNK_SIZE;\\n let h = t.worker instanceof PDFWorker ? t.worker : null;\\n const d = t.verbosity,\\n u = \\"string\\" != typeof t.docBaseUrl || (0, _display_utils.isDataScheme)(t.docBaseUrl) ? null : t.docBaseUrl,\\n p = \\"string\\" == typeof t.cMapUrl ? t.cMapUrl : null,\\n f = !1 !== t.cMapPacked,\\n g = t.CMapReaderFactory || DefaultCMapReaderFactory,\\n m = \\"string\\" == typeof t.standardFontDataUrl ? t.standardFontDataUrl : null,\\n b = t.StandardFontDataFactory || DefaultStandardFontDataFactory,\\n v = !0 !== t.stopAtErrors,\\n y = Number.isInteger(t.maxImageSize) && t.maxImageSize > -1 ? t.maxImageSize : -1,\\n A = !1 !== t.isEvalSupported,\\n _ = \\"boolean\\" == typeof t.isOffscreenCanvasSupported ? t.isOffscreenCanvasSupported : !_util.isNodeJS,\\n S = Number.isInteger(t.canvasMaxAreaInBytes) ? t.canvasMaxAreaInBytes : -1,\\n E = \\"boolean\\" == typeof t.disableFontFace ? t.disableFontFace : _util.isNodeJS,\\n x = !0 === t.fontExtraProperties,\\n w = !0 === t.enableXfa,\\n C = t.ownerDocument || globalThis.document,\\n T = !0 === t.disableRange,\\n P = !0 === t.disableStream,\\n k = !0 === t.disableAutoFetch,\\n M = !0 === t.pdfBug,\\n R = l ? l.length : (_t$length = t.length) !== null && _t$length !== void 0 ? _t$length : NaN,\\n I = \\"boolean\\" == typeof t.useSystemFonts ? t.useSystemFonts : !_util.isNodeJS && !E,\\n D = \\"boolean\\" == typeof t.useWorkerFetch ? t.useWorkerFetch : g === _display_utils.DOMCMapReaderFactory && b === _display_utils.DOMStandardFontDataFactory && p && m && (0, _display_utils.isValidFetchUrl)(p, document.baseURI) && (0, _display_utils.isValidFetchUrl)(m, document.baseURI),\\n O = t.canvasFactory || new DefaultCanvasFactory({\\n ownerDocument: C\\n }),\\n L = t.filterFactory || new DefaultFilterFactory({\\n docId: n,\\n ownerDocument: C\\n });\\n (0, _util.setVerbosityLevel)(d);\\n const N = {\\n canvasFactory: O,\\n filterFactory: L\\n };\\n if (!D) {\\n N.cMapReaderFactory = new g({\\n baseUrl: p,\\n isCompressed: f\\n });\\n N.standardFontDataFactory = new b({\\n baseUrl: m\\n });\\n }\\n if (!h) {\\n const t = {\\n verbosity: d,\\n port: _worker_options.GlobalWorkerOptions.workerPort\\n };\\n h = t.port ? PDFWorker.fromPort(t) : new PDFWorker(t);\\n e._worker = h;\\n }\\n const B = {\\n docId: n,\\n apiVersion: \\"3.9.179\\",\\n data: r,\\n password: o,\\n disableAutoFetch: k,\\n rangeChunkSize: c,\\n length: R,\\n docBaseUrl: u,\\n enableXfa: w,\\n evaluatorOptions: {\\n maxImageSize: y,\\n disableFontFace: E,\\n ignoreErrors: v,\\n isEvalSupported: A,\\n isOffscreenCanvasSupported: _,\\n canvasMaxAreaInBytes: S,\\n fontExtraProperties: x,\\n useSystemFonts: I,\\n cMapUrl: D ? p : null,\\n standardFontDataUrl: D ? m : null\\n }\\n },\\n j = {\\n ignoreErrors: v,\\n isEvalSupported: A,\\n disableFontFace: E,\\n fontExtraProperties: x,\\n enableXfa: w,\\n ownerDocument: C,\\n disableAutoFetch: k,\\n pdfBug: M,\\n styleElement: null\\n };\\n h.promise.then(function () {\\n if (e.destroyed) throw new Error(\\"Loading aborted\\");\\n const t = _fetchDocument(h, B),\\n o = new Promise(function (t) {\\n let e;\\n if (l) e = new _transport_stream.PDFDataTransportStream({\\n length: R,\\n initialData: l.initialData,\\n progressiveDone: l.progressiveDone,\\n contentDispositionFilename: l.contentDispositionFilename,\\n disableRange: T,\\n disableStream: P\\n }, l);else if (!r) {\\n e = (t => _util.isNodeJS ? new _displayNode_stream.PDFNodeStream(t) : (0, _display_utils.isValidFetchUrl)(t.url) ? new _displayFetch_stream.PDFFetchStream(t) : new _displayNetwork.PDFNetworkStream(t))({\\n url: i,\\n length: R,\\n httpHeaders: s,\\n withCredentials: a,\\n rangeChunkSize: c,\\n disableRange: T,\\n disableStream: P\\n });\\n }\\n t(e);\\n });\\n return Promise.all([t, o]).then(function (t) {\\n let [i, r] = t;\\n if (e.destroyed) throw new Error(\\"Loading aborted\\");\\n const s = new _message_handler.MessageHandler(n, i, h.port),\\n a = new WorkerTransport(s, e, r, j, N);\\n e._transport = a;\\n s.send(\\"Ready\\", null);\\n });\\n }).catch(e._capability.reject);\\n return e;\\n }\\n async function _fetchDocument(t, e) {\\n if (t.destroyed) throw new Error(\\"Worker was destroyed\\");\\n const n = await t.messageHandler.sendWithPromise(\\"GetDocRequest\\", e, e.data ? [e.data.buffer] : null);\\n if (t.destroyed) throw new Error(\\"Worker was destroyed\\");\\n return n;\\n }\\n function getUrlProp(t) {\\n if (t instanceof URL) return t.href;\\n try {\\n return new URL(t, window.location).href;\\n } catch (_unused4) {\\n if (_util.isNodeJS && \\"string\\" == typeof t) return t;\\n }\\n throw new Error(\\"Invalid PDF url data: either string or URL-object is expected in the url property.\\");\\n }\\n function getDataProp(t) {\\n if (_util.isNodeJS && \\"undefined\\" != typeof Buffer && t instanceof Buffer) throw new Error(\\"Please provide binary data as \`Uint8Array\`, rather than \`Buffer\`.\\");\\n if (t instanceof Uint8Array && t.byteLength === t.buffer.byteLength) return t;\\n if (\\"string\\" == typeof t) return (0, _util.stringToBytes)(t);\\n if (\\"object\\" == typeof t && !isNaN(t === null || t === void 0 ? void 0 : t.length) || (0, _util.isArrayBuffer)(t)) return new Uint8Array(t);\\n throw new Error(\\"Invalid PDF binary data: either TypedArray, string, or array-like object is expected in the data property.\\");\\n }\\n class PDFDocumentLoadingTask {\\n constructor() {\\n var _PDFDocumentLoadingTa, _PDFDocumentLoadingTa2;\\n this._capability = new _util.PromiseCapability();\\n this._transport = null;\\n this._worker = null;\\n this.docId = \\"d\\" + (_classStaticPrivateFieldSpecSet(PDFDocumentLoadingTask, PDFDocumentLoadingTask, _e, (_PDFDocumentLoadingTa = _classStaticPrivateFieldSpecGet(PDFDocumentLoadingTask, PDFDocumentLoadingTask, _e), _PDFDocumentLoadingTa2 = _PDFDocumentLoadingTa++, _PDFDocumentLoadingTa)), _PDFDocumentLoadingTa2);\\n this.destroyed = !1;\\n this.onPassword = null;\\n this.onProgress = null;\\n }\\n get promise() {\\n return this._capability.promise;\\n }\\n async destroy() {\\n var _this$_transport;\\n this.destroyed = !0;\\n await ((_this$_transport = this._transport) === null || _this$_transport === void 0 ? void 0 : _this$_transport.destroy());\\n this._transport = null;\\n if (this._worker) {\\n this._worker.destroy();\\n this._worker = null;\\n }\\n }\\n }\\n var _e = {\\n writable: true,\\n value: 0\\n };\\n exports.PDFDocumentLoadingTask = PDFDocumentLoadingTask;\\n class PDFDataRangeTransport {\\n constructor(t, e) {\\n let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2],\\n i = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : null;\\n this.length = t;\\n this.initialData = e;\\n this.progressiveDone = n;\\n this.contentDispositionFilename = i;\\n this._rangeListeners = [];\\n this._progressListeners = [];\\n this._progressiveReadListeners = [];\\n this._progressiveDoneListeners = [];\\n this._readyCapability = new _util.PromiseCapability();\\n }\\n addRangeListener(t) {\\n this._rangeListeners.push(t);\\n }\\n addProgressListener(t) {\\n this._progressListeners.push(t);\\n }\\n addProgressiveReadListener(t) {\\n this._progressiveReadListeners.push(t);\\n }\\n addProgressiveDoneListener(t) {\\n this._progressiveDoneListeners.push(t);\\n }\\n onDataRange(t, e) {\\n for (const n of this._rangeListeners) n(t, e);\\n }\\n onDataProgress(t, e) {\\n this._readyCapability.promise.then(() => {\\n for (const n of this._progressListeners) n(t, e);\\n });\\n }\\n onDataProgressiveRead(t) {\\n this._readyCapability.promise.then(() => {\\n for (const e of this._progressiveReadListeners) e(t);\\n });\\n }\\n onDataProgressiveDone() {\\n this._readyCapability.promise.then(() => {\\n for (const t of this._progressiveDoneListeners) t();\\n });\\n }\\n transportReady() {\\n this._readyCapability.resolve();\\n }\\n requestDataRange(t, e) {\\n (0, _util.unreachable)(\\"Abstract method PDFDataRangeTransport.requestDataRange\\");\\n }\\n abort() {}\\n }\\n exports.PDFDataRangeTransport = PDFDataRangeTransport;\\n class PDFDocumentProxy {\\n constructor(t, e) {\\n this._pdfInfo = t;\\n this._transport = e;\\n }\\n get annotationStorage() {\\n return this._transport.annotationStorage;\\n }\\n get filterFactory() {\\n return this._transport.filterFactory;\\n }\\n get numPages() {\\n return this._pdfInfo.numPages;\\n }\\n get fingerprints() {\\n return this._pdfInfo.fingerprints;\\n }\\n get isPureXfa() {\\n return (0, _util.shadow)(this, \\"isPureXfa\\", !!this._transport._htmlForXfa);\\n }\\n get allXfaHtml() {\\n return this._transport._htmlForXfa;\\n }\\n getPage(t) {\\n return this._transport.getPage(t);\\n }\\n getPageIndex(t) {\\n return this._transport.getPageIndex(t);\\n }\\n getDestinations() {\\n return this._transport.getDestinations();\\n }\\n getDestination(t) {\\n return this._transport.getDestination(t);\\n }\\n getPageLabels() {\\n return this._transport.getPageLabels();\\n }\\n getPageLayout() {\\n return this._transport.getPageLayout();\\n }\\n getPageMode() {\\n return this._transport.getPageMode();\\n }\\n getViewerPreferences() {\\n return this._transport.getViewerPreferences();\\n }\\n getOpenAction() {\\n return this._transport.getOpenAction();\\n }\\n getAttachments() {\\n return this._transport.getAttachments();\\n }\\n getJavaScript() {\\n return this._transport.getJavaScript();\\n }\\n getJSActions() {\\n return this._transport.getDocJSActions();\\n }\\n getOutline() {\\n return this._transport.getOutline();\\n }\\n getOptionalContentConfig() {\\n return this._transport.getOptionalContentConfig();\\n }\\n getPermissions() {\\n return this._transport.getPermissions();\\n }\\n getMetadata() {\\n return this._transport.getMetadata();\\n }\\n getMarkInfo() {\\n return this._transport.getMarkInfo();\\n }\\n getData() {\\n return this._transport.getData();\\n }\\n saveDocument() {\\n return this._transport.saveDocument();\\n }\\n getDownloadInfo() {\\n return this._transport.downloadInfoCapability.promise;\\n }\\n cleanup() {\\n let t = arguments.length > 0 && void 0 !== arguments[0] && arguments[0];\\n return this._transport.startCleanup(t || this.isPureXfa);\\n }\\n destroy() {\\n return this.loadingTask.destroy();\\n }\\n get loadingParams() {\\n return this._transport.loadingParams;\\n }\\n get loadingTask() {\\n return this._transport.loadingTask;\\n }\\n getFieldObjects() {\\n return this._transport.getFieldObjects();\\n }\\n hasJSActions() {\\n return this._transport.hasJSActions();\\n }\\n getCalculationOrderIds() {\\n return this._transport.getCalculationOrderIds();\\n }\\n }\\n exports.PDFDocumentProxy = PDFDocumentProxy;\\n var _n = /*#__PURE__*/new WeakMap();\\n var _i = /*#__PURE__*/new WeakMap();\\n var _s = /*#__PURE__*/new WeakSet();\\n var _r = /*#__PURE__*/new WeakSet();\\n class PDFPageProxy {\\n constructor(_t2, _e2, n) {\\n _classPrivateMethodInitSpec(this, _r);\\n _classPrivateMethodInitSpec(this, _s);\\n _classPrivateFieldInitSpec(this, _n, {\\n writable: true,\\n value: null\\n });\\n _classPrivateFieldInitSpec(this, _i, {\\n writable: true,\\n value: !1\\n });\\n let i = arguments.length > 3 && void 0 !== arguments[3] && arguments[3];\\n this._pageIndex = _t2;\\n this._pageInfo = _e2;\\n this._transport = n;\\n this._stats = i ? new _display_utils.StatTimer() : null;\\n this._pdfBug = i;\\n this.commonObjs = n.commonObjs;\\n this.objs = new PDFObjects();\\n this._maybeCleanupAfterRender = !1;\\n this._intentStates = new Map();\\n this.destroyed = !1;\\n }\\n get pageNumber() {\\n return this._pageIndex + 1;\\n }\\n get rotate() {\\n return this._pageInfo.rotate;\\n }\\n get ref() {\\n return this._pageInfo.ref;\\n }\\n get userUnit() {\\n return this._pageInfo.userUnit;\\n }\\n get view() {\\n return this._pageInfo.view;\\n }\\n getViewport() {\\n let {\\n scale: t,\\n rotation: e = this.rotate,\\n offsetX: n = 0,\\n offsetY: i = 0,\\n dontFlip: r = !1\\n } = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};\\n return new _display_utils.PageViewport({\\n viewBox: this.view,\\n scale: t,\\n rotation: e,\\n offsetX: n,\\n offsetY: i,\\n dontFlip: r\\n });\\n }\\n getAnnotations() {\\n let {\\n intent: t = \\"display\\"\\n } = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};\\n const e = this._transport.getRenderingIntent(t);\\n return this._transport.getAnnotations(this._pageIndex, e.renderingIntent);\\n }\\n getJSActions() {\\n return this._transport.getPageJSActions(this._pageIndex);\\n }\\n get filterFactory() {\\n return this._transport.filterFactory;\\n }\\n get isPureXfa() {\\n return (0, _util.shadow)(this, \\"isPureXfa\\", !!this._transport._htmlForXfa);\\n }\\n async getXfa() {\\n var _this$_transport$_htm;\\n return ((_this$_transport$_htm = this._transport._htmlForXfa) === null || _this$_transport$_htm === void 0 ? void 0 : _this$_transport$_htm.children[this._pageIndex]) || null;\\n }\\n render(t) {\\n var _this$_stats, _u;\\n let {\\n canvasContext: e,\\n viewport: n,\\n intent: i = \\"display\\",\\n annotationMode: r = _util.AnnotationMode.ENABLE,\\n transform: s = null,\\n background: a = null,\\n optionalContentConfigPromise: o = null,\\n annotationCanvasMap: l = null,\\n pageColors: c = null,\\n printAnnotationStorage: h = null\\n } = t;\\n (_this$_stats = this._stats) === null || _this$_stats === void 0 ? void 0 : _this$_stats.time(\\"Overall\\");\\n const d = this._transport.getRenderingIntent(i, r, h);\\n _classPrivateFieldSet(this, _i, !1);\\n _classPrivateMethodGet(this, _r, _r2).call(this);\\n o || (o = this._transport.getOptionalContentConfig());\\n let u = this._intentStates.get(d.cacheKey);\\n if (!u) {\\n u = Object.create(null);\\n this._intentStates.set(d.cacheKey, u);\\n }\\n if (u.streamReaderCancelTimeout) {\\n clearTimeout(u.streamReaderCancelTimeout);\\n u.streamReaderCancelTimeout = null;\\n }\\n const p = !!(d.renderingIntent & _util.RenderingIntentFlag.PRINT);\\n if (!u.displayReadyCapability) {\\n var _this$_stats2;\\n u.displayReadyCapability = new _util.PromiseCapability();\\n u.operatorList = {\\n fnArray: [],\\n argsArray: [],\\n lastChunk: !1,\\n separateAnnots: null\\n };\\n (_this$_stats2 = this._stats) === null || _this$_stats2 === void 0 ? void 0 : _this$_stats2.time(\\"Page Request\\");\\n this._pumpOperatorList(d);\\n }\\n const complete = t => {\\n var _this$_stats3, _this$_stats4;\\n u.renderTasks.delete(f);\\n (this._maybeCleanupAfterRender || p) && _classPrivateFieldSet(this, _i, !0);\\n _classPrivateMethodGet(this, _s, _s2).call(this, !p);\\n if (t) {\\n f.capability.reject(t);\\n this._abortOperatorList({\\n intentState: u,\\n reason: t instanceof Error ? t : new Error(t)\\n });\\n } else f.capability.resolve();\\n (_this$_stats3 = this._stats) === null || _this$_stats3 === void 0 ? void 0 : _this$_stats3.timeEnd(\\"Rendering\\");\\n (_this$_stats4 = this._stats) === null || _this$_stats4 === void 0 ? void 0 : _this$_stats4.timeEnd(\\"Overall\\");\\n },\\n f = new InternalRenderTask({\\n callback: complete,\\n params: {\\n canvasContext: e,\\n viewport: n,\\n transform: s,\\n background: a\\n },\\n objs: this.objs,\\n commonObjs: this.commonObjs,\\n annotationCanvasMap: l,\\n operatorList: u.operatorList,\\n pageIndex: this._pageIndex,\\n canvasFactory: this._transport.canvasFactory,\\n filterFactory: this._transport.filterFactory,\\n useRequestAnimationFrame: !p,\\n pdfBug: this._pdfBug,\\n pageColors: c\\n });\\n ((_u = u).renderTasks || (_u.renderTasks = new Set())).add(f);\\n const g = f.task;\\n Promise.all([u.displayReadyCapability.promise, o]).then(t => {\\n let [e, n] = t;\\n if (this.destroyed) complete();else {\\n var _this$_stats5;\\n (_this$_stats5 = this._stats) === null || _this$_stats5 === void 0 ? void 0 : _this$_stats5.time(\\"Rendering\\");\\n f.initializeGraphics({\\n transparency: e,\\n optionalContentConfig: n\\n });\\n f.operatorListChanged();\\n }\\n }).catch(complete);\\n return g;\\n }\\n getOperatorList() {\\n let {\\n intent: t = \\"display\\",\\n annotationMode: e = _util.AnnotationMode.ENABLE,\\n printAnnotationStorage: n = null\\n } = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};\\n const i = this._transport.getRenderingIntent(t, e, n, !0);\\n let r,\\n s = this._intentStates.get(i.cacheKey);\\n if (!s) {\\n s = Object.create(null);\\n this._intentStates.set(i.cacheKey, s);\\n }\\n if (!s.opListReadCapability) {\\n var _s3, _this$_stats6;\\n r = Object.create(null);\\n r.operatorListChanged = function operatorListChanged() {\\n if (s.operatorList.lastChunk) {\\n s.opListReadCapability.resolve(s.operatorList);\\n s.renderTasks.delete(r);\\n }\\n };\\n s.opListReadCapability = new _util.PromiseCapability();\\n ((_s3 = s).renderTasks || (_s3.renderTasks = new Set())).add(r);\\n s.operatorList = {\\n fnArray: [],\\n argsArray: [],\\n lastChunk: !1,\\n separateAnnots: null\\n };\\n (_this$_stats6 = this._stats) === null || _this$_stats6 === void 0 ? void 0 : _this$_stats6.time(\\"Page Request\\");\\n this._pumpOperatorList(i);\\n }\\n return s.opListReadCapability.promise;\\n }\\n streamTextContent() {\\n let {\\n includeMarkedContent: t = !1,\\n disableNormalization: e = !1\\n } = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};\\n return this._transport.messageHandler.sendWithStream(\\"GetTextContent\\", {\\n pageIndex: this._pageIndex,\\n includeMarkedContent: !0 === t,\\n disableNormalization: !0 === e\\n }, {\\n highWaterMark: 100,\\n size: t => t.items.length\\n });\\n }\\n getTextContent() {\\n let t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};\\n if (this._transport._htmlForXfa) return this.getXfa().then(t => _xfa_text.XfaText.textContent(t));\\n const e = this.streamTextContent(t);\\n return new Promise(function (t, n) {\\n const i = e.getReader(),\\n r = {\\n items: [],\\n styles: Object.create(null)\\n };\\n !function pump() {\\n i.read().then(function (e) {\\n let {\\n value: n,\\n done: i\\n } = e;\\n if (i) t(r);else {\\n Object.assign(r.styles, n.styles);\\n r.items.push(...n.items);\\n pump();\\n }\\n }, n);\\n }();\\n });\\n }\\n getStructTree() {\\n return this._transport.getStructTree(this._pageIndex);\\n }\\n _destroy() {\\n this.destroyed = !0;\\n const t = [];\\n for (const e of this._intentStates.values()) {\\n this._abortOperatorList({\\n intentState: e,\\n reason: new Error(\\"Page was destroyed.\\"),\\n force: !0\\n });\\n if (!e.opListReadCapability) for (const n of e.renderTasks) {\\n t.push(n.completed);\\n n.cancel();\\n }\\n }\\n this.objs.clear();\\n _classPrivateFieldSet(this, _i, !1);\\n _classPrivateMethodGet(this, _r, _r2).call(this);\\n return Promise.all(t);\\n }\\n cleanup() {\\n let t = arguments.length > 0 && void 0 !== arguments[0] && arguments[0];\\n _classPrivateFieldSet(this, _i, !0);\\n const e = _classPrivateMethodGet(this, _s, _s2).call(this, !1);\\n t && e && this._stats && (this._stats = new _display_utils.StatTimer());\\n return e;\\n }\\n _startRenderPage(t, e) {\\n const n = this._intentStates.get(e);\\n if (n) {\\n var _this$_stats7, _n$displayReadyCapabi;\\n (_this$_stats7 = this._stats) === null || _this$_stats7 === void 0 ? void 0 : _this$_stats7.timeEnd(\\"Page Request\\");\\n (_n$displayReadyCapabi = n.displayReadyCapability) === null || _n$displayReadyCapabi === void 0 ? void 0 : _n$displayReadyCapabi.resolve(t);\\n }\\n }\\n _renderPageChunk(t, e) {\\n for (let n = 0, i = t.length; n < i; n++) {\\n e.operatorList.fnArray.push(t.fnArray[n]);\\n e.operatorList.argsArray.push(t.argsArray[n]);\\n }\\n e.operatorList.lastChunk = t.lastChunk;\\n e.operatorList.separateAnnots = t.separateAnnots;\\n for (const t of e.renderTasks) t.operatorListChanged();\\n t.lastChunk && _classPrivateMethodGet(this, _s, _s2).call(this, !0);\\n }\\n _pumpOperatorList(t) {\\n let {\\n renderingIntent: e,\\n cacheKey: n,\\n annotationStorageSerializable: i\\n } = t;\\n const {\\n map: r,\\n transfers: s\\n } = i,\\n a = this._transport.messageHandler.sendWithStream(\\"GetOperatorList\\", {\\n pageIndex: this._pageIndex,\\n intent: e,\\n cacheKey: n,\\n annotationStorage: r\\n }, s).getReader(),\\n o = this._intentStates.get(n);\\n o.streamReader = a;\\n const pump = () => {\\n a.read().then(t => {\\n let {\\n value: e,\\n done: n\\n } = t;\\n if (n) o.streamReader = null;else if (!this._transport.destroyed) {\\n this._renderPageChunk(e, o);\\n pump();\\n }\\n }, t => {\\n o.streamReader = null;\\n if (!this._transport.destroyed) {\\n if (o.operatorList) {\\n o.operatorList.lastChunk = !0;\\n for (const t of o.renderTasks) t.operatorListChanged();\\n _classPrivateMethodGet(this, _s, _s2).call(this, !0);\\n }\\n if (o.displayReadyCapability) o.displayReadyCapability.reject(t);else {\\n if (!o.opListReadCapability) throw t;\\n o.opListReadCapability.reject(t);\\n }\\n }\\n });\\n };\\n pump();\\n }\\n _abortOperatorList(t) {\\n let {\\n intentState: e,\\n reason: n,\\n force: i = !1\\n } = t;\\n if (e.streamReader) {\\n if (e.streamReaderCancelTimeout) {\\n clearTimeout(e.streamReaderCancelTimeout);\\n e.streamReaderCancelTimeout = null;\\n }\\n if (!i) {\\n if (e.renderTasks.size > 0) return;\\n if (n instanceof _display_utils.RenderingCancelledException) {\\n let t = RENDERING_CANCELLED_TIMEOUT;\\n n.extraDelay > 0 && n.extraDelay < 1e3 && (t += n.extraDelay);\\n e.streamReaderCancelTimeout = setTimeout(() => {\\n e.streamReaderCancelTimeout = null;\\n this._abortOperatorList({\\n intentState: e,\\n reason: n,\\n force: !0\\n });\\n }, t);\\n return;\\n }\\n }\\n e.streamReader.cancel(new _util.AbortException(n.message)).catch(() => {});\\n e.streamReader = null;\\n if (!this._transport.destroyed) {\\n for (const [t, n] of this._intentStates) if (n === e) {\\n this._intentStates.delete(t);\\n break;\\n }\\n this.cleanup();\\n }\\n }\\n }\\n get stats() {\\n return this._stats;\\n }\\n }\\n function _s2() {\\n let t = arguments.length > 0 && void 0 !== arguments[0] && arguments[0];\\n _classPrivateMethodGet(this, _r, _r2).call(this);\\n if (!_classPrivateFieldGet(this, _i) || this.destroyed) return !1;\\n if (t) {\\n _classPrivateFieldSet(this, _n, setTimeout(() => {\\n _classPrivateFieldSet(this, _n, null);\\n _classPrivateMethodGet(this, _s, _s2).call(this, !1);\\n }, DELAYED_CLEANUP_TIMEOUT));\\n return !1;\\n }\\n for (const {\\n renderTasks: t,\\n operatorList: e\\n } of this._intentStates.values()) if (t.size > 0 || !e.lastChunk) return !1;\\n this._intentStates.clear();\\n this.objs.clear();\\n _classPrivateFieldSet(this, _i, !1);\\n return !0;\\n }\\n function _r2() {\\n if (_classPrivateFieldGet(this, _n)) {\\n clearTimeout(_classPrivateFieldGet(this, _n));\\n _classPrivateFieldSet(this, _n, null);\\n }\\n }\\n exports.PDFPageProxy = PDFPageProxy;\\n var _a = /*#__PURE__*/new WeakMap();\\n var _o = /*#__PURE__*/new WeakMap();\\n class LoopbackPort {\\n constructor() {\\n _classPrivateFieldInitSpec(this, _a, {\\n writable: true,\\n value: new Set()\\n });\\n _classPrivateFieldInitSpec(this, _o, {\\n writable: true,\\n value: Promise.resolve()\\n });\\n }\\n postMessage(t, e) {\\n const n = {\\n data: structuredClone(t, null)\\n };\\n _classPrivateFieldGet(this, _o).then(() => {\\n for (const t of _classPrivateFieldGet(this, _a)) t.call(this, n);\\n });\\n }\\n addEventListener(t, e) {\\n _classPrivateFieldGet(this, _a).add(e);\\n }\\n removeEventListener(t, e) {\\n _classPrivateFieldGet(this, _a).delete(e);\\n }\\n terminate() {\\n _classPrivateFieldGet(this, _a).clear();\\n }\\n }\\n exports.LoopbackPort = LoopbackPort;\\n const PDFWorkerUtil = {\\n isWorkerDisabled: !1,\\n fallbackWorkerSrc: null,\\n fakeWorkerId: 0\\n };\\n exports.PDFWorkerUtil = PDFWorkerUtil;\\n if (_util.isNodeJS && \\"function\\" == \\"function\\") {\\n PDFWorkerUtil.isWorkerDisabled = !0;\\n PDFWorkerUtil.fallbackWorkerSrc = \\"./pdf.worker.js\\";\\n } else if (\\"object\\" == typeof document) {\\n var _document;\\n const t = (_document = document) === null || _document === void 0 || (_document = _document.currentScript) === null || _document === void 0 ? void 0 : _document.src;\\n t && (PDFWorkerUtil.fallbackWorkerSrc = t.replace(/(\\\\.(?:min\\\\.)?js)(\\\\?.*)?$/i, \\".worker$1$2\\"));\\n }\\n PDFWorkerUtil.isSameOrigin = function (t, e) {\\n let n;\\n try {\\n n = new URL(t);\\n if (!n.origin || \\"null\\" === n.origin) return !1;\\n } catch (_unused5) {\\n return !1;\\n }\\n const i = new URL(e, n);\\n return n.origin === i.origin;\\n };\\n PDFWorkerUtil.createCDNWrapper = function (t) {\\n const e = \\"importScripts(\\\\\\"\\".concat(t, \\"\\\\\\");\\");\\n return URL.createObjectURL(new Blob([e]));\\n };\\n class PDFWorker {\\n constructor() {\\n let {\\n name: t = null,\\n port: e = null,\\n verbosity: n = (0, _util.getVerbosityLevel)()\\n } = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};\\n if (e && _classStaticPrivateFieldSpecGet(PDFWorker, PDFWorker, _l).has(e)) throw new Error(\\"Cannot use more than one PDFWorker per port.\\");\\n this.name = t;\\n this.destroyed = !1;\\n this.verbosity = n;\\n this._readyCapability = new _util.PromiseCapability();\\n this._port = null;\\n this._webWorker = null;\\n this._messageHandler = null;\\n if (e) {\\n _classStaticPrivateFieldSpecGet(PDFWorker, PDFWorker, _l).set(e, this);\\n this._initializeFromPort(e);\\n } else this._initialize();\\n }\\n get promise() {\\n return this._readyCapability.promise;\\n }\\n get port() {\\n return this._port;\\n }\\n get messageHandler() {\\n return this._messageHandler;\\n }\\n _initializeFromPort(t) {\\n this._port = t;\\n this._messageHandler = new _message_handler.MessageHandler(\\"main\\", \\"worker\\", t);\\n this._messageHandler.on(\\"ready\\", function () {});\\n this._readyCapability.resolve();\\n this._messageHandler.send(\\"configure\\", {\\n verbosity: this.verbosity\\n });\\n }\\n _initialize() {\\n if (!PDFWorkerUtil.isWorkerDisabled && !PDFWorker._mainThreadWorkerMessageHandler) {\\n let {\\n workerSrc: t\\n } = PDFWorker;\\n try {\\n PDFWorkerUtil.isSameOrigin(window.location.href, t) || (t = PDFWorkerUtil.createCDNWrapper(new URL(t, window.location).href));\\n const e = new Worker(t),\\n n = new _message_handler.MessageHandler(\\"main\\", \\"worker\\", e),\\n terminateEarly = () => {\\n e.removeEventListener(\\"error\\", onWorkerError);\\n n.destroy();\\n e.terminate();\\n this.destroyed ? this._readyCapability.reject(new Error(\\"Worker was destroyed\\")) : this._setupFakeWorker();\\n },\\n onWorkerError = () => {\\n this._webWorker || terminateEarly();\\n };\\n e.addEventListener(\\"error\\", onWorkerError);\\n n.on(\\"test\\", t => {\\n e.removeEventListener(\\"error\\", onWorkerError);\\n if (this.destroyed) terminateEarly();else if (t) {\\n this._messageHandler = n;\\n this._port = e;\\n this._webWorker = e;\\n this._readyCapability.resolve();\\n n.send(\\"configure\\", {\\n verbosity: this.verbosity\\n });\\n } else {\\n this._setupFakeWorker();\\n n.destroy();\\n e.terminate();\\n }\\n });\\n n.on(\\"ready\\", t => {\\n e.removeEventListener(\\"error\\", onWorkerError);\\n if (this.destroyed) terminateEarly();else try {\\n sendTest();\\n } catch (_unused6) {\\n this._setupFakeWorker();\\n }\\n });\\n const sendTest = () => {\\n const t = new Uint8Array();\\n n.send(\\"test\\", t, [t.buffer]);\\n };\\n sendTest();\\n return;\\n } catch (_unused7) {\\n (0, _util.info)(\\"The worker has been disabled.\\");\\n }\\n }\\n this._setupFakeWorker();\\n }\\n _setupFakeWorker() {\\n if (!PDFWorkerUtil.isWorkerDisabled) {\\n (0, _util.warn)(\\"Setting up fake worker.\\");\\n PDFWorkerUtil.isWorkerDisabled = !0;\\n }\\n PDFWorker._setupFakeWorkerGlobal.then(t => {\\n if (this.destroyed) {\\n this._readyCapability.reject(new Error(\\"Worker was destroyed\\"));\\n return;\\n }\\n const e = new LoopbackPort();\\n this._port = e;\\n const n = \\"fake\\" + PDFWorkerUtil.fakeWorkerId++,\\n i = new _message_handler.MessageHandler(n + \\"_worker\\", n, e);\\n t.setup(i, e);\\n const r = new _message_handler.MessageHandler(n, n + \\"_worker\\", e);\\n this._messageHandler = r;\\n this._readyCapability.resolve();\\n r.send(\\"configure\\", {\\n verbosity: this.verbosity\\n });\\n }).catch(t => {\\n this._readyCapability.reject(new Error(\\"Setting up fake worker failed: \\\\\\"\\".concat(t.message, \\"\\\\\\".\\")));\\n });\\n }\\n destroy() {\\n this.destroyed = !0;\\n if (this._webWorker) {\\n this._webWorker.terminate();\\n this._webWorker = null;\\n }\\n _classStaticPrivateFieldSpecGet(PDFWorker, PDFWorker, _l).delete(this._port);\\n this._port = null;\\n if (this._messageHandler) {\\n this._messageHandler.destroy();\\n this._messageHandler = null;\\n }\\n }\\n static fromPort(t) {\\n if (!(t !== null && t !== void 0 && t.port)) throw new Error(\\"PDFWorker.fromPort - invalid method signature.\\");\\n return _classStaticPrivateFieldSpecGet(this, PDFWorker, _l).has(t.port) ? _classStaticPrivateFieldSpecGet(this, PDFWorker, _l).get(t.port) : new PDFWorker(t);\\n }\\n static get workerSrc() {\\n if (_worker_options.GlobalWorkerOptions.workerSrc) return _worker_options.GlobalWorkerOptions.workerSrc;\\n if (null !== PDFWorkerUtil.fallbackWorkerSrc) {\\n _util.isNodeJS || (0, _display_utils.deprecated)('No \\"GlobalWorkerOptions.workerSrc\\" specified.');\\n return PDFWorkerUtil.fallbackWorkerSrc;\\n }\\n throw new Error('No \\"GlobalWorkerOptions.workerSrc\\" specified.');\\n }\\n static get _mainThreadWorkerMessageHandler() {\\n try {\\n var _globalThis$pdfjsWork;\\n return ((_globalThis$pdfjsWork = globalThis.pdfjsWorker) === null || _globalThis$pdfjsWork === void 0 ? void 0 : _globalThis$pdfjsWork.WorkerMessageHandler) || null;\\n } catch (_unused8) {\\n return null;\\n }\\n }\\n static get _setupFakeWorkerGlobal() {\\n const loader = async () => {\\n const mainWorkerMessageHandler = this._mainThreadWorkerMessageHandler;\\n if (mainWorkerMessageHandler) return mainWorkerMessageHandler;\\n if (_util.isNodeJS && \\"function\\" == \\"function\\") {\\n const worker = eval(\\"require\\")(this.workerSrc);\\n return worker.WorkerMessageHandler;\\n }\\n await (0, _display_utils.loadScript)(this.workerSrc);\\n return window.pdfjsWorker.WorkerMessageHandler;\\n };\\n return (0, _util.shadow)(this, \\"_setupFakeWorkerGlobal\\", loader());\\n }\\n }\\n var _l = {\\n writable: true,\\n value: new WeakMap()\\n };\\n exports.PDFWorker = PDFWorker;\\n var _c = /*#__PURE__*/new WeakMap();\\n var _h = /*#__PURE__*/new WeakMap();\\n var _d = /*#__PURE__*/new WeakMap();\\n var _u2 = /*#__PURE__*/new WeakMap();\\n var _p = /*#__PURE__*/new WeakSet();\\n class WorkerTransport {\\n constructor(_t3, _e3, _n2, _i2, r) {\\n _classPrivateMethodInitSpec(this, _p);\\n _classPrivateFieldInitSpec(this, _c, {\\n writable: true,\\n value: new Map()\\n });\\n _classPrivateFieldInitSpec(this, _h, {\\n writable: true,\\n value: new Map()\\n });\\n _classPrivateFieldInitSpec(this, _d, {\\n writable: true,\\n value: new Map()\\n });\\n _classPrivateFieldInitSpec(this, _u2, {\\n writable: true,\\n value: null\\n });\\n this.messageHandler = _t3;\\n this.loadingTask = _e3;\\n this.commonObjs = new PDFObjects();\\n this.fontLoader = new _font_loader.FontLoader({\\n ownerDocument: _i2.ownerDocument,\\n styleElement: _i2.styleElement\\n });\\n this._params = _i2;\\n this.canvasFactory = r.canvasFactory;\\n this.filterFactory = r.filterFactory;\\n this.cMapReaderFactory = r.cMapReaderFactory;\\n this.standardFontDataFactory = r.standardFontDataFactory;\\n this.destroyed = !1;\\n this.destroyCapability = null;\\n this._networkStream = _n2;\\n this._fullReader = null;\\n this._lastProgress = null;\\n this.downloadInfoCapability = new _util.PromiseCapability();\\n this.setupMessageHandler();\\n }\\n get annotationStorage() {\\n return (0, _util.shadow)(this, \\"annotationStorage\\", new _annotation_storage.AnnotationStorage());\\n }\\n getRenderingIntent(t) {\\n let e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : _util.AnnotationMode.ENABLE,\\n n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : null,\\n i = arguments.length > 3 && void 0 !== arguments[3] && arguments[3],\\n r = _util.RenderingIntentFlag.DISPLAY,\\n s = _annotation_storage.SerializableEmpty;\\n switch (t) {\\n case \\"any\\":\\n r = _util.RenderingIntentFlag.ANY;\\n break;\\n case \\"display\\":\\n break;\\n case \\"print\\":\\n r = _util.RenderingIntentFlag.PRINT;\\n break;\\n default:\\n (0, _util.warn)(\\"getRenderingIntent - invalid intent: \\".concat(t));\\n }\\n switch (e) {\\n case _util.AnnotationMode.DISABLE:\\n r += _util.RenderingIntentFlag.ANNOTATIONS_DISABLE;\\n break;\\n case _util.AnnotationMode.ENABLE:\\n break;\\n case _util.AnnotationMode.ENABLE_FORMS:\\n r += _util.RenderingIntentFlag.ANNOTATIONS_FORMS;\\n break;\\n case _util.AnnotationMode.ENABLE_STORAGE:\\n r += _util.RenderingIntentFlag.ANNOTATIONS_STORAGE;\\n s = (r & _util.RenderingIntentFlag.PRINT && n instanceof _annotation_storage.PrintAnnotationStorage ? n : this.annotationStorage).serializable;\\n break;\\n default:\\n (0, _util.warn)(\\"getRenderingIntent - invalid annotationMode: \\".concat(e));\\n }\\n i && (r += _util.RenderingIntentFlag.OPLIST);\\n return {\\n renderingIntent: r,\\n cacheKey: \\"\\".concat(r, \\"_\\").concat(s.hash),\\n annotationStorageSerializable: s\\n };\\n }\\n destroy() {\\n var _classPrivateFieldGet2;\\n if (this.destroyCapability) return this.destroyCapability.promise;\\n this.destroyed = !0;\\n this.destroyCapability = new _util.PromiseCapability();\\n (_classPrivateFieldGet2 = _classPrivateFieldGet(this, _u2)) === null || _classPrivateFieldGet2 === void 0 ? void 0 : _classPrivateFieldGet2.reject(new Error(\\"Worker was destroyed during onPassword callback\\"));\\n const t = [];\\n for (const e of _classPrivateFieldGet(this, _h).values()) t.push(e._destroy());\\n _classPrivateFieldGet(this, _h).clear();\\n _classPrivateFieldGet(this, _d).clear();\\n this.hasOwnProperty(\\"annotationStorage\\") && this.annotationStorage.resetModified();\\n const e = this.messageHandler.sendWithPromise(\\"Terminate\\", null);\\n t.push(e);\\n Promise.all(t).then(() => {\\n this.commonObjs.clear();\\n this.fontLoader.clear();\\n _classPrivateFieldGet(this, _c).clear();\\n this.filterFactory.destroy();\\n this._networkStream && this._networkStream.cancelAllRequests(new _util.AbortException(\\"Worker was terminated.\\"));\\n if (this.messageHandler) {\\n this.messageHandler.destroy();\\n this.messageHandler = null;\\n }\\n this.destroyCapability.resolve();\\n }, this.destroyCapability.reject);\\n return this.destroyCapability.promise;\\n }\\n setupMessageHandler() {\\n const {\\n messageHandler: t,\\n loadingTask: e\\n } = this;\\n t.on(\\"GetReader\\", (t, e) => {\\n (0, _util.assert)(this._networkStream, \\"GetReader - no \`IPDFStream\` instance available.\\");\\n this._fullReader = this._networkStream.getFullReader();\\n this._fullReader.onProgress = t => {\\n this._lastProgress = {\\n loaded: t.loaded,\\n total: t.total\\n };\\n };\\n e.onPull = () => {\\n this._fullReader.read().then(function (t) {\\n let {\\n value: n,\\n done: i\\n } = t;\\n if (i) e.close();else {\\n (0, _util.assert)(n instanceof ArrayBuffer, \\"GetReader - expected an ArrayBuffer.\\");\\n e.enqueue(new Uint8Array(n), 1, [n]);\\n }\\n }).catch(t => {\\n e.error(t);\\n });\\n };\\n e.onCancel = t => {\\n this._fullReader.cancel(t);\\n e.ready.catch(t => {\\n if (!this.destroyed) throw t;\\n });\\n };\\n });\\n t.on(\\"ReaderHeadersReady\\", t => {\\n const n = new _util.PromiseCapability(),\\n i = this._fullReader;\\n i.headersReady.then(() => {\\n if (!i.isStreamingSupported || !i.isRangeSupported) {\\n var _e$onProgress;\\n this._lastProgress && ((_e$onProgress = e.onProgress) === null || _e$onProgress === void 0 ? void 0 : _e$onProgress.call(e, this._lastProgress));\\n i.onProgress = t => {\\n var _e$onProgress2;\\n (_e$onProgress2 = e.onProgress) === null || _e$onProgress2 === void 0 ? void 0 : _e$onProgress2.call(e, {\\n loaded: t.loaded,\\n total: t.total\\n });\\n };\\n }\\n n.resolve({\\n isStreamingSupported: i.isStreamingSupported,\\n isRangeSupported: i.isRangeSupported,\\n contentLength: i.contentLength\\n });\\n }, n.reject);\\n return n.promise;\\n });\\n t.on(\\"GetRangeReader\\", (t, e) => {\\n (0, _util.assert)(this._networkStream, \\"GetRangeReader - no \`IPDFStream\` instance available.\\");\\n const n = this._networkStream.getRangeReader(t.begin, t.end);\\n if (n) {\\n e.onPull = () => {\\n n.read().then(function (t) {\\n let {\\n value: n,\\n done: i\\n } = t;\\n if (i) e.close();else {\\n (0, _util.assert)(n instanceof ArrayBuffer, \\"GetRangeReader - expected an ArrayBuffer.\\");\\n e.enqueue(new Uint8Array(n), 1, [n]);\\n }\\n }).catch(t => {\\n e.error(t);\\n });\\n };\\n e.onCancel = t => {\\n n.cancel(t);\\n e.ready.catch(t => {\\n if (!this.destroyed) throw t;\\n });\\n };\\n } else e.close();\\n });\\n t.on(\\"GetDoc\\", t => {\\n let {\\n pdfInfo: n\\n } = t;\\n this._numPages = n.numPages;\\n this._htmlForXfa = n.htmlForXfa;\\n delete n.htmlForXfa;\\n e._capability.resolve(new PDFDocumentProxy(n, this));\\n });\\n t.on(\\"DocException\\", function (t) {\\n let n;\\n switch (t.name) {\\n case \\"PasswordException\\":\\n n = new _util.PasswordException(t.message, t.code);\\n break;\\n case \\"InvalidPDFException\\":\\n n = new _util.InvalidPDFException(t.message);\\n break;\\n case \\"MissingPDFException\\":\\n n = new _util.MissingPDFException(t.message);\\n break;\\n case \\"UnexpectedResponseException\\":\\n n = new _util.UnexpectedResponseException(t.message, t.status);\\n break;\\n case \\"UnknownErrorException\\":\\n n = new _util.UnknownErrorException(t.message, t.details);\\n break;\\n default:\\n (0, _util.unreachable)(\\"DocException - expected a valid Error.\\");\\n }\\n e._capability.reject(n);\\n });\\n t.on(\\"PasswordRequest\\", t => {\\n _classPrivateFieldSet(this, _u2, new _util.PromiseCapability());\\n if (e.onPassword) {\\n const updatePassword = t => {\\n t instanceof Error ? _classPrivateFieldGet(this, _u2).reject(t) : _classPrivateFieldGet(this, _u2).resolve({\\n password: t\\n });\\n };\\n try {\\n e.onPassword(updatePassword, t.code);\\n } catch (t) {\\n _classPrivateFieldGet(this, _u2).reject(t);\\n }\\n } else _classPrivateFieldGet(this, _u2).reject(new _util.PasswordException(t.message, t.code));\\n return _classPrivateFieldGet(this, _u2).promise;\\n });\\n t.on(\\"DataLoaded\\", t => {\\n var _e$onProgress3;\\n (_e$onProgress3 = e.onProgress) === null || _e$onProgress3 === void 0 ? void 0 : _e$onProgress3.call(e, {\\n loaded: t.length,\\n total: t.length\\n });\\n this.downloadInfoCapability.resolve(t);\\n });\\n t.on(\\"StartRenderPage\\", t => {\\n if (this.destroyed) return;\\n _classPrivateFieldGet(this, _h).get(t.pageIndex)._startRenderPage(t.transparency, t.cacheKey);\\n });\\n t.on(\\"commonobj\\", e => {\\n var _globalThis$FontInspe;\\n let [n, i, r] = e;\\n if (!this.destroyed && !this.commonObjs.has(n)) switch (i) {\\n case \\"Font\\":\\n const e = this._params;\\n if (\\"error\\" in r) {\\n const t = r.error;\\n (0, _util.warn)(\\"Error during font loading: \\".concat(t));\\n this.commonObjs.resolve(n, t);\\n break;\\n }\\n const s = e.pdfBug && (_globalThis$FontInspe = globalThis.FontInspector) !== null && _globalThis$FontInspe !== void 0 && _globalThis$FontInspe.enabled ? (t, e) => globalThis.FontInspector.fontAdded(t, e) : null,\\n a = new _font_loader.FontFaceObject(r, {\\n isEvalSupported: e.isEvalSupported,\\n disableFontFace: e.disableFontFace,\\n ignoreErrors: e.ignoreErrors,\\n inspectFont: s\\n });\\n this.fontLoader.bind(a).catch(e => t.sendWithPromise(\\"FontFallback\\", {\\n id: n\\n })).finally(() => {\\n !e.fontExtraProperties && a.data && (a.data = null);\\n this.commonObjs.resolve(n, a);\\n });\\n break;\\n case \\"FontPath\\":\\n case \\"Image\\":\\n case \\"Pattern\\":\\n this.commonObjs.resolve(n, r);\\n break;\\n default:\\n throw new Error(\\"Got unknown common object type \\".concat(i));\\n }\\n });\\n t.on(\\"obj\\", t => {\\n let [e, n, i, r] = t;\\n if (this.destroyed) return;\\n const s = _classPrivateFieldGet(this, _h).get(n);\\n if (!s.objs.has(e)) switch (i) {\\n case \\"Image\\":\\n s.objs.resolve(e, r);\\n if (r) {\\n var _r$data;\\n let t;\\n if (r.bitmap) {\\n const {\\n width: e,\\n height: n\\n } = r;\\n t = e * n * 4;\\n } else t = ((_r$data = r.data) === null || _r$data === void 0 ? void 0 : _r$data.length) || 0;\\n t > _util.MAX_IMAGE_SIZE_TO_CACHE && (s._maybeCleanupAfterRender = !0);\\n }\\n break;\\n case \\"Pattern\\":\\n s.objs.resolve(e, r);\\n break;\\n default:\\n throw new Error(\\"Got unknown object type \\".concat(i));\\n }\\n });\\n t.on(\\"DocProgress\\", t => {\\n var _e$onProgress4;\\n this.destroyed || ((_e$onProgress4 = e.onProgress) === null || _e$onProgress4 === void 0 ? void 0 : _e$onProgress4.call(e, {\\n loaded: t.loaded,\\n total: t.total\\n }));\\n });\\n t.on(\\"FetchBuiltInCMap\\", t => this.destroyed ? Promise.reject(new Error(\\"Worker was destroyed.\\")) : this.cMapReaderFactory ? this.cMapReaderFactory.fetch(t) : Promise.reject(new Error(\\"CMapReaderFactory not initialized, see the \`useWorkerFetch\` parameter.\\")));\\n t.on(\\"FetchStandardFontData\\", t => this.destroyed ? Promise.reject(new Error(\\"Worker was destroyed.\\")) : this.standardFontDataFactory ? this.standardFontDataFactory.fetch(t) : Promise.reject(new Error(\\"StandardFontDataFactory not initialized, see the \`useWorkerFetch\` parameter.\\")));\\n }\\n getData() {\\n return this.messageHandler.sendWithPromise(\\"GetData\\", null);\\n }\\n saveDocument() {\\n var _this$_fullReader$fil, _this$_fullReader;\\n this.annotationStorage.size <= 0 && (0, _util.warn)(\\"saveDocument called while \`annotationStorage\` is empty, please use the getData-method instead.\\");\\n const {\\n map: t,\\n transfers: e\\n } = this.annotationStorage.serializable;\\n return this.messageHandler.sendWithPromise(\\"SaveDocument\\", {\\n isPureXfa: !!this._htmlForXfa,\\n numPages: this._numPages,\\n annotationStorage: t,\\n filename: (_this$_fullReader$fil = (_this$_fullReader = this._fullReader) === null || _this$_fullReader === void 0 ? void 0 : _this$_fullReader.filename) !== null && _this$_fullReader$fil !== void 0 ? _this$_fullReader$fil : null\\n }, e).finally(() => {\\n this.annotationStorage.resetModified();\\n });\\n }\\n getPage(t) {\\n if (!Number.isInteger(t) || t <= 0 || t > this._numPages) return Promise.reject(new Error(\\"Invalid page request.\\"));\\n const e = t - 1,\\n n = _classPrivateFieldGet(this, _d).get(e);\\n if (n) return n;\\n const i = this.messageHandler.sendWithPromise(\\"GetPage\\", {\\n pageIndex: e\\n }).then(t => {\\n if (this.destroyed) throw new Error(\\"Transport destroyed\\");\\n const n = new PDFPageProxy(e, t, this, this._params.pdfBug);\\n _classPrivateFieldGet(this, _h).set(e, n);\\n return n;\\n });\\n _classPrivateFieldGet(this, _d).set(e, i);\\n return i;\\n }\\n getPageIndex(t) {\\n return \\"object\\" != typeof t || null === t || !Number.isInteger(t.num) || t.num < 0 || !Number.isInteger(t.gen) || t.gen < 0 ? Promise.reject(new Error(\\"Invalid pageIndex request.\\")) : this.messageHandler.sendWithPromise(\\"GetPageIndex\\", {\\n num: t.num,\\n gen: t.gen\\n });\\n }\\n getAnnotations(t, e) {\\n return this.messageHandler.sendWithPromise(\\"GetAnnotations\\", {\\n pageIndex: t,\\n intent: e\\n });\\n }\\n getFieldObjects() {\\n return _classPrivateMethodGet(this, _p, _p2).call(this, \\"GetFieldObjects\\");\\n }\\n hasJSActions() {\\n return _classPrivateMethodGet(this, _p, _p2).call(this, \\"HasJSActions\\");\\n }\\n getCalculationOrderIds() {\\n return this.messageHandler.sendWithPromise(\\"GetCalculationOrderIds\\", null);\\n }\\n getDestinations() {\\n return this.messageHandler.sendWithPromise(\\"GetDestinations\\", null);\\n }\\n getDestination(t) {\\n return \\"string\\" != typeof t ? Promise.reject(new Error(\\"Invalid destination request.\\")) : this.messageHandler.sendWithPromise(\\"GetDestination\\", {\\n id: t\\n });\\n }\\n getPageLabels() {\\n return this.messageHandler.sendWithPromise(\\"GetPageLabels\\", null);\\n }\\n getPageLayout() {\\n return this.messageHandler.sendWithPromise(\\"GetPageLayout\\", null);\\n }\\n getPageMode() {\\n return this.messageHandler.sendWithPromise(\\"GetPageMode\\", null);\\n }\\n getViewerPreferences() {\\n return this.messageHandler.sendWithPromise(\\"GetViewerPreferences\\", null);\\n }\\n getOpenAction() {\\n return this.messageHandler.sendWithPromise(\\"GetOpenAction\\", null);\\n }\\n getAttachments() {\\n return this.messageHandler.sendWithPromise(\\"GetAttachments\\", null);\\n }\\n getJavaScript() {\\n return this.messageHandler.sendWithPromise(\\"GetJavaScript\\", null);\\n }\\n getDocJSActions() {\\n return this.messageHandler.sendWithPromise(\\"GetDocJSActions\\", null);\\n }\\n getPageJSActions(t) {\\n return this.messageHandler.sendWithPromise(\\"GetPageJSActions\\", {\\n pageIndex: t\\n });\\n }\\n getStructTree(t) {\\n return this.messageHandler.sendWithPromise(\\"GetStructTree\\", {\\n pageIndex: t\\n });\\n }\\n getOutline() {\\n return this.messageHandler.sendWithPromise(\\"GetOutline\\", null);\\n }\\n getOptionalContentConfig() {\\n return this.messageHandler.sendWithPromise(\\"GetOptionalContentConfig\\", null).then(t => new _optional_content_config.OptionalContentConfig(t));\\n }\\n getPermissions() {\\n return this.messageHandler.sendWithPromise(\\"GetPermissions\\", null);\\n }\\n getMetadata() {\\n const t = \\"GetMetadata\\",\\n e = _classPrivateFieldGet(this, _c).get(t);\\n if (e) return e;\\n const n = this.messageHandler.sendWithPromise(t, null).then(t => {\\n var _this$_fullReader$fil2, _this$_fullReader2, _this$_fullReader$con, _this$_fullReader3;\\n return {\\n info: t[0],\\n metadata: t[1] ? new _metadata.Metadata(t[1]) : null,\\n contentDispositionFilename: (_this$_fullReader$fil2 = (_this$_fullReader2 = this._fullReader) === null || _this$_fullReader2 === void 0 ? void 0 : _this$_fullReader2.filename) !== null && _this$_fullReader$fil2 !== void 0 ? _this$_fullReader$fil2 : null,\\n contentLength: (_this$_fullReader$con = (_this$_fullReader3 = this._fullReader) === null || _this$_fullReader3 === void 0 ? void 0 : _this$_fullReader3.contentLength) !== null && _this$_fullReader$con !== void 0 ? _this$_fullReader$con : null\\n };\\n });\\n _classPrivateFieldGet(this, _c).set(t, n);\\n return n;\\n }\\n getMarkInfo() {\\n return this.messageHandler.sendWithPromise(\\"GetMarkInfo\\", null);\\n }\\n async startCleanup() {\\n let t = arguments.length > 0 && void 0 !== arguments[0] && arguments[0];\\n if (!this.destroyed) {\\n await this.messageHandler.sendWithPromise(\\"Cleanup\\", null);\\n for (const t of _classPrivateFieldGet(this, _h).values()) {\\n if (!t.cleanup()) throw new Error(\\"startCleanup: Page \\".concat(t.pageNumber, \\" is currently rendering.\\"));\\n }\\n this.commonObjs.clear();\\n t || this.fontLoader.clear();\\n _classPrivateFieldGet(this, _c).clear();\\n this.filterFactory.destroy(!0);\\n }\\n }\\n get loadingParams() {\\n const {\\n disableAutoFetch: t,\\n enableXfa: e\\n } = this._params;\\n return (0, _util.shadow)(this, \\"loadingParams\\", {\\n disableAutoFetch: t,\\n enableXfa: e\\n });\\n }\\n }\\n function _p2(t) {\\n let e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null;\\n const n = _classPrivateFieldGet(this, _c).get(t);\\n if (n) return n;\\n const i = this.messageHandler.sendWithPromise(t, e);\\n _classPrivateFieldGet(this, _c).set(t, i);\\n return i;\\n }\\n var _f = /*#__PURE__*/new WeakMap();\\n var _g = /*#__PURE__*/new WeakSet();\\n class PDFObjects {\\n constructor() {\\n _classPrivateMethodInitSpec(this, _g);\\n _classPrivateFieldInitSpec(this, _f, {\\n writable: true,\\n value: Object.create(null)\\n });\\n }\\n get(t) {\\n let e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null;\\n if (e) {\\n const n = _classPrivateMethodGet(this, _g, _g2).call(this, t);\\n n.capability.promise.then(() => e(n.data));\\n return null;\\n }\\n const n = _classPrivateFieldGet(this, _f)[t];\\n if (!(n !== null && n !== void 0 && n.capability.settled)) throw new Error(\\"Requesting object that isn't resolved yet \\".concat(t, \\".\\"));\\n return n.data;\\n }\\n has(t) {\\n const e = _classPrivateFieldGet(this, _f)[t];\\n return (e === null || e === void 0 ? void 0 : e.capability.settled) || !1;\\n }\\n resolve(t) {\\n let e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null;\\n const n = _classPrivateMethodGet(this, _g, _g2).call(this, t);\\n n.data = e;\\n n.capability.resolve();\\n }\\n clear() {\\n for (const t in _classPrivateFieldGet(this, _f)) {\\n var _e$bitmap;\\n const {\\n data: e\\n } = _classPrivateFieldGet(this, _f)[t];\\n e === null || e === void 0 || (_e$bitmap = e.bitmap) === null || _e$bitmap === void 0 ? void 0 : _e$bitmap.close();\\n }\\n _classPrivateFieldSet(this, _f, Object.create(null));\\n }\\n }\\n function _g2(t) {\\n const e = _classPrivateFieldGet(this, _f)[t];\\n return e || (_classPrivateFieldGet(this, _f)[t] = {\\n capability: new _util.PromiseCapability(),\\n data: null\\n });\\n }\\n var _m = /*#__PURE__*/new WeakMap();\\n class RenderTask {\\n constructor(t) {\\n _classPrivateFieldInitSpec(this, _m, {\\n writable: true,\\n value: null\\n });\\n _classPrivateFieldSet(this, _m, t);\\n this.onContinue = null;\\n }\\n get promise() {\\n return _classPrivateFieldGet(this, _m).capability.promise;\\n }\\n cancel() {\\n let t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 0;\\n _classPrivateFieldGet(this, _m).cancel(null, t);\\n }\\n get separateAnnots() {\\n const {\\n separateAnnots: t\\n } = _classPrivateFieldGet(this, _m).operatorList;\\n if (!t) return !1;\\n const {\\n annotationCanvasMap: e\\n } = _classPrivateFieldGet(this, _m);\\n return t.form || t.canvas && (e === null || e === void 0 ? void 0 : e.size) > 0;\\n }\\n }\\n exports.RenderTask = RenderTask;\\n class InternalRenderTask {\\n constructor(t) {\\n let {\\n callback: e,\\n params: n,\\n objs: i,\\n commonObjs: r,\\n annotationCanvasMap: s,\\n operatorList: a,\\n pageIndex: o,\\n canvasFactory: l,\\n filterFactory: c,\\n useRequestAnimationFrame: h = !1,\\n pdfBug: d = !1,\\n pageColors: u = null\\n } = t;\\n this.callback = e;\\n this.params = n;\\n this.objs = i;\\n this.commonObjs = r;\\n this.annotationCanvasMap = s;\\n this.operatorListIdx = null;\\n this.operatorList = a;\\n this._pageIndex = o;\\n this.canvasFactory = l;\\n this.filterFactory = c;\\n this._pdfBug = d;\\n this.pageColors = u;\\n this.running = !1;\\n this.graphicsReadyCallback = null;\\n this.graphicsReady = !1;\\n this._useRequestAnimationFrame = !0 === h && \\"undefined\\" != typeof window;\\n this.cancelled = !1;\\n this.capability = new _util.PromiseCapability();\\n this.task = new RenderTask(this);\\n this._cancelBound = this.cancel.bind(this);\\n this._continueBound = this._continue.bind(this);\\n this._scheduleNextBound = this._scheduleNext.bind(this);\\n this._nextBound = this._next.bind(this);\\n this._canvas = n.canvasContext.canvas;\\n }\\n get completed() {\\n return this.capability.promise.catch(function () {});\\n }\\n initializeGraphics(t) {\\n var _globalThis$StepperMa, _this$graphicsReadyCa;\\n let {\\n transparency: e = !1,\\n optionalContentConfig: n\\n } = t;\\n if (this.cancelled) return;\\n if (this._canvas) {\\n if (_classStaticPrivateFieldSpecGet(InternalRenderTask, InternalRenderTask, _b).has(this._canvas)) throw new Error(\\"Cannot use the same canvas during multiple render() operations. Use different canvas or ensure previous operations were cancelled or completed.\\");\\n _classStaticPrivateFieldSpecGet(InternalRenderTask, InternalRenderTask, _b).add(this._canvas);\\n }\\n if (this._pdfBug && (_globalThis$StepperMa = globalThis.StepperManager) !== null && _globalThis$StepperMa !== void 0 && _globalThis$StepperMa.enabled) {\\n this.stepper = globalThis.StepperManager.create(this._pageIndex);\\n this.stepper.init(this.operatorList);\\n this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint();\\n }\\n const {\\n canvasContext: i,\\n viewport: r,\\n transform: s,\\n background: a\\n } = this.params;\\n this.gfx = new _canvas.CanvasGraphics(i, this.commonObjs, this.objs, this.canvasFactory, this.filterFactory, {\\n optionalContentConfig: n\\n }, this.annotationCanvasMap, this.pageColors);\\n this.gfx.beginDrawing({\\n transform: s,\\n viewport: r,\\n transparency: e,\\n background: a\\n });\\n this.operatorListIdx = 0;\\n this.graphicsReady = !0;\\n (_this$graphicsReadyCa = this.graphicsReadyCallback) === null || _this$graphicsReadyCa === void 0 ? void 0 : _this$graphicsReadyCa.call(this);\\n }\\n cancel() {\\n var _this$gfx;\\n let t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : null,\\n e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0;\\n this.running = !1;\\n this.cancelled = !0;\\n (_this$gfx = this.gfx) === null || _this$gfx === void 0 ? void 0 : _this$gfx.endDrawing();\\n this._canvas && _classStaticPrivateFieldSpecGet(InternalRenderTask, InternalRenderTask, _b).delete(this._canvas);\\n this.callback(t || new _display_utils.RenderingCancelledException(\\"Rendering cancelled, page \\".concat(this._pageIndex + 1), e));\\n }\\n operatorListChanged() {\\n if (this.graphicsReady) {\\n var _this$stepper;\\n (_this$stepper = this.stepper) === null || _this$stepper === void 0 ? void 0 : _this$stepper.updateOperatorList(this.operatorList);\\n this.running || this._continue();\\n } else this.graphicsReadyCallback || (this.graphicsReadyCallback = this._continueBound);\\n }\\n _continue() {\\n this.running = !0;\\n this.cancelled || (this.task.onContinue ? this.task.onContinue(this._scheduleNextBound) : this._scheduleNext());\\n }\\n _scheduleNext() {\\n this._useRequestAnimationFrame ? window.requestAnimationFrame(() => {\\n this._nextBound().catch(this._cancelBound);\\n }) : Promise.resolve().then(this._nextBound).catch(this._cancelBound);\\n }\\n async _next() {\\n if (!this.cancelled) {\\n this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList, this.operatorListIdx, this._continueBound, this.stepper);\\n if (this.operatorListIdx === this.operatorList.argsArray.length) {\\n this.running = !1;\\n if (this.operatorList.lastChunk) {\\n this.gfx.endDrawing(this.pageColors);\\n this._canvas && _classStaticPrivateFieldSpecGet(InternalRenderTask, InternalRenderTask, _b).delete(this._canvas);\\n this.callback();\\n }\\n }\\n }\\n }\\n }\\n var _b = {\\n writable: true,\\n value: new WeakSet()\\n };\\n const version = \\"3.9.179\\";\\n exports.version = version;\\n const build = \\"1ef6fbc52\\";\\n exports.build = build;\\n }, (t, e, n) => {\\n var i = n(3),\\n r = n(126);\\n i({\\n target: \\"Set\\",\\n proto: !0,\\n real: !0,\\n forced: !n(134)(\\"difference\\")\\n }, {\\n difference: r\\n });\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n var i = n(127),\\n r = n(128),\\n s = n(129),\\n a = n(132),\\n o = n(133),\\n l = n(130),\\n c = n(131),\\n h = r.has,\\n d = r.remove;\\n t.exports = function difference(t) {\\n var e = i(this),\\n n = o(t),\\n r = s(e);\\n a(e) <= n.size ? l(e, function (t) {\\n n.includes(t) && d(r, t);\\n }) : c(n.getIterator(), function (t) {\\n h(e, t) && d(r, t);\\n });\\n return r;\\n };\\n }, (t, e, n) => {\\n var i = n(128).has;\\n t.exports = function (t) {\\n i(t);\\n return t;\\n };\\n }, (t, e, n) => {\\n var i = n(14),\\n r = Set.prototype;\\n t.exports = {\\n Set: Set,\\n add: i(r.add),\\n has: i(r.has),\\n remove: i(r.delete),\\n proto: r\\n };\\n }, (t, e, n) => {\\n var i = n(128),\\n r = n(130),\\n s = i.Set,\\n a = i.add;\\n t.exports = function (t) {\\n var e = new s();\\n r(t, function (t) {\\n a(e, t);\\n });\\n return e;\\n };\\n }, (t, e, n) => {\\n var i = n(14),\\n r = n(131),\\n s = n(128),\\n a = s.Set,\\n o = s.proto,\\n l = i(o.forEach),\\n c = i(o.keys),\\n h = c(new a()).next;\\n t.exports = function (t, e, n) {\\n return n ? r(c(t), e, h) : l(t, e);\\n };\\n }, (t, e, n) => {\\n var i = n(8);\\n t.exports = function (t, e, n) {\\n for (var r, s, a = n || t.next; !(r = i(a, t)).done;) if (void 0 !== (s = e(r.value))) return s;\\n };\\n }, (t, e, n) => {\\n var i = n(72),\\n r = n(128);\\n t.exports = i(r.proto, \\"size\\", \\"get\\") || function (t) {\\n return t.size;\\n };\\n }, (t, e, n) => {\\n var i = n(31),\\n r = n(47),\\n s = n(8),\\n a = n(62),\\n o = TypeError,\\n l = Math.max,\\n SetRecord = function SetRecord(t, e, n, i) {\\n this.set = t;\\n this.size = e;\\n this.has = n;\\n this.keys = i;\\n };\\n SetRecord.prototype = {\\n getIterator: function getIterator() {\\n return r(s(this.keys, this.set));\\n },\\n includes: function includes(t) {\\n return s(this.has, this.set, t);\\n }\\n };\\n t.exports = function (t) {\\n r(t);\\n var e = +t.size;\\n if (e != e) throw o(\\"Invalid size\\");\\n return new SetRecord(t, l(a(e), 0), i(t.has), i(t.keys));\\n };\\n }, (t, e, n) => {\\n var i = n(24);\\n t.exports = function (t) {\\n try {\\n new (i(\\"Set\\"))()[t]({\\n size: 0,\\n has: function has() {\\n return !1;\\n },\\n keys: function keys() {\\n return {\\n next: function next() {\\n return {\\n done: !0\\n };\\n }\\n };\\n }\\n });\\n return !0;\\n } catch (t) {\\n return !1;\\n }\\n };\\n }, (t, e, n) => {\\n var i = n(3),\\n r = n(7),\\n s = n(136);\\n i({\\n target: \\"Set\\",\\n proto: !0,\\n real: !0,\\n forced: !n(134)(\\"intersection\\") || r(function () {\\n return \\"3,2\\" != Array.from(new Set([1, 2, 3]).intersection(new Set([3, 2])));\\n })\\n }, {\\n intersection: s\\n });\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n var i = n(127),\\n r = n(128),\\n s = n(132),\\n a = n(133),\\n o = n(130),\\n l = n(131),\\n c = r.Set,\\n h = r.add,\\n d = r.has;\\n t.exports = function intersection(t) {\\n var e = i(this),\\n n = a(t),\\n r = new c();\\n s(e) > n.size ? l(n.getIterator(), function (t) {\\n d(e, t) && h(r, t);\\n }) : o(e, function (t) {\\n n.includes(t) && h(r, t);\\n });\\n return r;\\n };\\n }, (t, e, n) => {\\n var i = n(3),\\n r = n(138);\\n i({\\n target: \\"Set\\",\\n proto: !0,\\n real: !0,\\n forced: !n(134)(\\"isDisjointFrom\\")\\n }, {\\n isDisjointFrom: r\\n });\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n var i = n(127),\\n r = n(128).has,\\n s = n(132),\\n a = n(133),\\n o = n(130),\\n l = n(131),\\n c = n(139);\\n t.exports = function isDisjointFrom(t) {\\n var e = i(this),\\n n = a(t);\\n if (s(e) <= n.size) return !1 !== o(e, function (t) {\\n if (n.includes(t)) return !1;\\n }, !0);\\n var h = n.getIterator();\\n return !1 !== l(h, function (t) {\\n if (r(e, t)) return c(h, \\"normal\\", !1);\\n });\\n };\\n }, (t, e, n) => {\\n var i = n(8),\\n r = n(47),\\n s = n(30);\\n t.exports = function (t, e, n) {\\n var a, o;\\n r(t);\\n try {\\n if (!(a = s(t, \\"return\\"))) {\\n if (\\"throw\\" === e) throw n;\\n return n;\\n }\\n a = i(a, t);\\n } catch (t) {\\n o = !0;\\n a = t;\\n }\\n if (\\"throw\\" === e) throw n;\\n if (o) throw a;\\n r(a);\\n return n;\\n };\\n }, (t, e, n) => {\\n var i = n(3),\\n r = n(141);\\n i({\\n target: \\"Set\\",\\n proto: !0,\\n real: !0,\\n forced: !n(134)(\\"isSubsetOf\\")\\n }, {\\n isSubsetOf: r\\n });\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n var i = n(127),\\n r = n(132),\\n s = n(130),\\n a = n(133);\\n t.exports = function isSubsetOf(t) {\\n var e = i(this),\\n n = a(t);\\n return !(r(e) > n.size) && !1 !== s(e, function (t) {\\n if (!n.includes(t)) return !1;\\n }, !0);\\n };\\n }, (t, e, n) => {\\n var i = n(3),\\n r = n(143);\\n i({\\n target: \\"Set\\",\\n proto: !0,\\n real: !0,\\n forced: !n(134)(\\"isSupersetOf\\")\\n }, {\\n isSupersetOf: r\\n });\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n var i = n(127),\\n r = n(128).has,\\n s = n(132),\\n a = n(133),\\n o = n(131),\\n l = n(139);\\n t.exports = function isSupersetOf(t) {\\n var e = i(this),\\n n = a(t);\\n if (s(e) < n.size) return !1;\\n var c = n.getIterator();\\n return !1 !== o(c, function (t) {\\n if (!r(e, t)) return l(c, \\"normal\\", !1);\\n });\\n };\\n }, (t, e, n) => {\\n var i = n(3),\\n r = n(145);\\n i({\\n target: \\"Set\\",\\n proto: !0,\\n real: !0,\\n forced: !n(134)(\\"symmetricDifference\\")\\n }, {\\n symmetricDifference: r\\n });\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n var i = n(127),\\n r = n(128),\\n s = n(129),\\n a = n(133),\\n o = n(131),\\n l = r.add,\\n c = r.has,\\n h = r.remove;\\n t.exports = function symmetricDifference(t) {\\n var e = i(this),\\n n = a(t).getIterator(),\\n r = s(e);\\n o(n, function (t) {\\n c(e, t) ? h(r, t) : l(r, t);\\n });\\n return r;\\n };\\n }, (t, e, n) => {\\n var i = n(3),\\n r = n(147);\\n i({\\n target: \\"Set\\",\\n proto: !0,\\n real: !0,\\n forced: !n(134)(\\"union\\")\\n }, {\\n union: r\\n });\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n var i = n(127),\\n r = n(128).add,\\n s = n(129),\\n a = n(133),\\n o = n(131);\\n t.exports = function union(t) {\\n var e = i(this),\\n n = a(t).getIterator(),\\n l = s(e);\\n o(n, function (t) {\\n r(l, t);\\n });\\n return l;\\n };\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n var i = n(3),\\n r = n(4),\\n s = n(24),\\n a = n(11),\\n o = n(45).f,\\n l = n(39),\\n c = n(149),\\n h = n(75),\\n d = n(76),\\n u = n(150),\\n p = n(82),\\n f = n(6),\\n g = n(36),\\n m = \\"DOMException\\",\\n b = s(\\"Error\\"),\\n v = s(m),\\n y = function DOMException() {\\n c(this, A);\\n var t = arguments.length,\\n e = d(t < 1 ? void 0 : arguments[0]),\\n n = d(t < 2 ? void 0 : arguments[1], \\"Error\\"),\\n i = new v(e, n),\\n r = b(e);\\n r.name = m;\\n o(i, \\"stack\\", a(1, p(r.stack, 1)));\\n h(i, this, y);\\n return i;\\n },\\n A = y.prototype = v.prototype,\\n _ = (\\"stack\\" in b(m)),\\n S = (\\"stack\\" in new v(1, 2)),\\n E = v && f && Object.getOwnPropertyDescriptor(r, m),\\n x = !(!E || E.writable && E.configurable),\\n w = _ && !x && !S;\\n i({\\n global: !0,\\n constructor: !0,\\n forced: g || w\\n }, {\\n DOMException: w ? y : v\\n });\\n var C = s(m),\\n T = C.prototype;\\n if (T.constructor !== C) {\\n g || o(T, \\"constructor\\", a(1, C));\\n for (var P in u) if (l(u, P)) {\\n var k = u[P],\\n M = k.s;\\n l(C, M) || o(C, M, a(6, k.c));\\n }\\n }\\n }, (t, e, n) => {\\n var i = n(25),\\n r = TypeError;\\n t.exports = function (t, e) {\\n if (i(e, t)) return t;\\n throw r(\\"Incorrect invocation\\");\\n };\\n }, t => {\\n t.exports = {\\n IndexSizeError: {\\n s: \\"INDEX_SIZE_ERR\\",\\n c: 1,\\n m: 1\\n },\\n DOMStringSizeError: {\\n s: \\"DOMSTRING_SIZE_ERR\\",\\n c: 2,\\n m: 0\\n },\\n HierarchyRequestError: {\\n s: \\"HIERARCHY_REQUEST_ERR\\",\\n c: 3,\\n m: 1\\n },\\n WrongDocumentError: {\\n s: \\"WRONG_DOCUMENT_ERR\\",\\n c: 4,\\n m: 1\\n },\\n InvalidCharacterError: {\\n s: \\"INVALID_CHARACTER_ERR\\",\\n c: 5,\\n m: 1\\n },\\n NoDataAllowedError: {\\n s: \\"NO_DATA_ALLOWED_ERR\\",\\n c: 6,\\n m: 0\\n },\\n NoModificationAllowedError: {\\n s: \\"NO_MODIFICATION_ALLOWED_ERR\\",\\n c: 7,\\n m: 1\\n },\\n NotFoundError: {\\n s: \\"NOT_FOUND_ERR\\",\\n c: 8,\\n m: 1\\n },\\n NotSupportedError: {\\n s: \\"NOT_SUPPORTED_ERR\\",\\n c: 9,\\n m: 1\\n },\\n InUseAttributeError: {\\n s: \\"INUSE_ATTRIBUTE_ERR\\",\\n c: 10,\\n m: 1\\n },\\n InvalidStateError: {\\n s: \\"INVALID_STATE_ERR\\",\\n c: 11,\\n m: 1\\n },\\n SyntaxError: {\\n s: \\"SYNTAX_ERR\\",\\n c: 12,\\n m: 1\\n },\\n InvalidModificationError: {\\n s: \\"INVALID_MODIFICATION_ERR\\",\\n c: 13,\\n m: 1\\n },\\n NamespaceError: {\\n s: \\"NAMESPACE_ERR\\",\\n c: 14,\\n m: 1\\n },\\n InvalidAccessError: {\\n s: \\"INVALID_ACCESS_ERR\\",\\n c: 15,\\n m: 1\\n },\\n ValidationError: {\\n s: \\"VALIDATION_ERR\\",\\n c: 16,\\n m: 0\\n },\\n TypeMismatchError: {\\n s: \\"TYPE_MISMATCH_ERR\\",\\n c: 17,\\n m: 1\\n },\\n SecurityError: {\\n s: \\"SECURITY_ERR\\",\\n c: 18,\\n m: 1\\n },\\n NetworkError: {\\n s: \\"NETWORK_ERR\\",\\n c: 19,\\n m: 1\\n },\\n AbortError: {\\n s: \\"ABORT_ERR\\",\\n c: 20,\\n m: 1\\n },\\n URLMismatchError: {\\n s: \\"URL_MISMATCH_ERR\\",\\n c: 21,\\n m: 1\\n },\\n QuotaExceededError: {\\n s: \\"QUOTA_EXCEEDED_ERR\\",\\n c: 22,\\n m: 1\\n },\\n TimeoutError: {\\n s: \\"TIMEOUT_ERR\\",\\n c: 23,\\n m: 1\\n },\\n InvalidNodeTypeError: {\\n s: \\"INVALID_NODE_TYPE_ERR\\",\\n c: 24,\\n m: 1\\n },\\n DataCloneError: {\\n s: \\"DATA_CLONE_ERR\\",\\n c: 25,\\n m: 1\\n }\\n };\\n }, (t, e, n) => {\\n var i,\\n r = n(36),\\n s = n(3),\\n a = n(4),\\n o = n(24),\\n l = n(14),\\n c = n(7),\\n h = n(41),\\n d = n(21),\\n u = n(152),\\n p = n(17),\\n f = n(20),\\n g = n(23),\\n m = n(153),\\n b = n(47),\\n v = n(78),\\n y = n(39),\\n A = n(158),\\n _ = n(44),\\n S = n(64),\\n E = n(85),\\n x = n(159),\\n w = n(161),\\n C = n(128),\\n T = n(83),\\n P = n(119),\\n k = a.Object,\\n M = a.Array,\\n R = a.Date,\\n I = a.Error,\\n D = a.EvalError,\\n O = a.RangeError,\\n L = a.ReferenceError,\\n N = a.SyntaxError,\\n B = a.TypeError,\\n j = a.URIError,\\n U = a.PerformanceMark,\\n z = a.WebAssembly,\\n H = z && z.CompileError || I,\\n q = z && z.LinkError || I,\\n W = z && z.RuntimeError || I,\\n G = o(\\"DOMException\\"),\\n V = w.Map,\\n $ = w.has,\\n X = w.get,\\n K = w.set,\\n Y = C.Set,\\n J = C.add,\\n Q = o(\\"Object\\", \\"keys\\"),\\n Z = l([].push),\\n tt = l((!0).valueOf),\\n et = l(1..valueOf),\\n nt = l(\\"\\".valueOf),\\n it = l(R.prototype.getTime),\\n rt = h(\\"structuredClone\\"),\\n st = \\"DataCloneError\\",\\n at = \\"Transferring\\",\\n checkBasicSemantic = function checkBasicSemantic(t) {\\n return !c(function () {\\n var e = new a.Set([7]),\\n n = t(e),\\n i = t(k(7));\\n return n == e || !n.has(7) || \\"object\\" != typeof i || 7 != i;\\n }) && t;\\n },\\n checkErrorsCloning = function checkErrorsCloning(t, e) {\\n return !c(function () {\\n var n = new e(),\\n i = t({\\n a: n,\\n b: n\\n });\\n return !(i && i.a === i.b && i.a instanceof e && i.a.stack === n.stack);\\n });\\n },\\n ot = a.structuredClone,\\n lt = r || !checkErrorsCloning(ot, I) || !checkErrorsCloning(ot, G) || !(i = ot, !c(function () {\\n var t = i(new a.AggregateError([1], rt, {\\n cause: 3\\n }));\\n return \\"AggregateError\\" != t.name || 1 != t.errors[0] || t.message != rt || 3 != t.cause;\\n })),\\n ct = !ot && checkBasicSemantic(function (t) {\\n return new U(rt, {\\n detail: t\\n }).detail;\\n }),\\n ht = checkBasicSemantic(ot) || ct,\\n throwUncloneable = function throwUncloneable(t) {\\n throw new G(\\"Uncloneable type: \\" + t, st);\\n },\\n throwUnpolyfillable = function throwUnpolyfillable(t, e) {\\n throw new G((e || \\"Cloning\\") + \\" of \\" + t + \\" cannot be properly polyfilled in this engine\\", st);\\n },\\n tryNativeRestrictedStructuredClone = function tryNativeRestrictedStructuredClone(t, e) {\\n ht || throwUnpolyfillable(e);\\n return ht(t);\\n },\\n cloneBuffer = function cloneBuffer(t, e, n) {\\n if ($(e, t)) return X(e, t);\\n var i, r, s, o, l, c;\\n if (\\"SharedArrayBuffer\\" === (n || v(t))) i = ht ? ht(t) : t;else {\\n var h = a.DataView;\\n h || \\"function\\" == typeof t.slice || throwUnpolyfillable(\\"ArrayBuffer\\");\\n try {\\n if (\\"function\\" != typeof t.slice || t.resizable) {\\n r = t.byteLength;\\n s = \\"maxByteLength\\" in t ? {\\n maxByteLength: t.maxByteLength\\n } : void 0;\\n i = new ArrayBuffer(r, s);\\n o = new h(t);\\n l = new h(i);\\n for (c = 0; c < r; c++) l.setUint8(c, o.getUint8(c));\\n } else i = t.slice(0);\\n } catch (t) {\\n throw new G(\\"ArrayBuffer is detached\\", st);\\n }\\n }\\n K(e, t, i);\\n return i;\\n },\\n cloneView = function cloneView(t, e, n, i, r) {\\n var s = a[e];\\n f(s) || throwUnpolyfillable(e);\\n return new s(cloneBuffer(t.buffer, r), n, i);\\n },\\n Placeholder = function Placeholder(t, e, n) {\\n this.object = t;\\n this.type = e;\\n this.metadata = n;\\n },\\n structuredCloneInternal = function structuredCloneInternal(t, e, n) {\\n g(t) && throwUncloneable(\\"Symbol\\");\\n if (!f(t)) return t;\\n if (e) {\\n if ($(e, t)) return X(e, t);\\n } else e = new V();\\n var i,\\n r,\\n s,\\n l,\\n c,\\n h,\\n u,\\n p,\\n m = v(t);\\n switch (m) {\\n case \\"Array\\":\\n s = M(S(t));\\n break;\\n case \\"Object\\":\\n s = {};\\n break;\\n case \\"Map\\":\\n s = new V();\\n break;\\n case \\"Set\\":\\n s = new Y();\\n break;\\n case \\"RegExp\\":\\n s = new RegExp(t.source, x(t));\\n break;\\n case \\"Error\\":\\n switch (r = t.name) {\\n case \\"AggregateError\\":\\n s = o(\\"AggregateError\\")([]);\\n break;\\n case \\"EvalError\\":\\n s = D();\\n break;\\n case \\"RangeError\\":\\n s = O();\\n break;\\n case \\"ReferenceError\\":\\n s = L();\\n break;\\n case \\"SyntaxError\\":\\n s = N();\\n break;\\n case \\"TypeError\\":\\n s = B();\\n break;\\n case \\"URIError\\":\\n s = j();\\n break;\\n case \\"CompileError\\":\\n s = H();\\n break;\\n case \\"LinkError\\":\\n s = q();\\n break;\\n case \\"RuntimeError\\":\\n s = W();\\n break;\\n default:\\n s = I();\\n }\\n break;\\n case \\"DOMException\\":\\n s = new G(t.message, t.name);\\n break;\\n case \\"ArrayBuffer\\":\\n case \\"SharedArrayBuffer\\":\\n s = n ? new Placeholder(t, m) : cloneBuffer(t, e, m);\\n break;\\n case \\"DataView\\":\\n case \\"Int8Array\\":\\n case \\"Uint8Array\\":\\n case \\"Uint8ClampedArray\\":\\n case \\"Int16Array\\":\\n case \\"Uint16Array\\":\\n case \\"Int32Array\\":\\n case \\"Uint32Array\\":\\n case \\"Float16Array\\":\\n case \\"Float32Array\\":\\n case \\"Float64Array\\":\\n case \\"BigInt64Array\\":\\n case \\"BigUint64Array\\":\\n h = \\"DataView\\" === m ? t.byteLength : t.length;\\n s = n ? new Placeholder(t, m, {\\n offset: t.byteOffset,\\n length: h\\n }) : cloneView(t, m, t.byteOffset, h, e);\\n break;\\n case \\"DOMQuad\\":\\n try {\\n s = new DOMQuad(structuredCloneInternal(t.p1, e, n), structuredCloneInternal(t.p2, e, n), structuredCloneInternal(t.p3, e, n), structuredCloneInternal(t.p4, e, n));\\n } catch (e) {\\n s = tryNativeRestrictedStructuredClone(t, m);\\n }\\n break;\\n case \\"File\\":\\n if (ht) try {\\n s = ht(t);\\n v(s) !== m && (s = void 0);\\n } catch (t) {}\\n if (!s) try {\\n s = new File([t], t.name, t);\\n } catch (t) {}\\n s || throwUnpolyfillable(m);\\n break;\\n case \\"FileList\\":\\n if (l = function () {\\n var t;\\n try {\\n t = new a.DataTransfer();\\n } catch (e) {\\n try {\\n t = new a.ClipboardEvent(\\"\\").clipboardData;\\n } catch (t) {}\\n }\\n return t && t.items && t.files ? t : null;\\n }()) {\\n for (c = 0, h = S(t); c < h; c++) l.items.add(structuredCloneInternal(t[c], e, n));\\n s = l.files;\\n } else s = tryNativeRestrictedStructuredClone(t, m);\\n break;\\n case \\"ImageData\\":\\n try {\\n s = new ImageData(structuredCloneInternal(t.data, e, n), t.width, t.height, {\\n colorSpace: t.colorSpace\\n });\\n } catch (e) {\\n s = tryNativeRestrictedStructuredClone(t, m);\\n }\\n break;\\n default:\\n if (ht) s = ht(t);else switch (m) {\\n case \\"BigInt\\":\\n s = k(t.valueOf());\\n break;\\n case \\"Boolean\\":\\n s = k(tt(t));\\n break;\\n case \\"Number\\":\\n s = k(et(t));\\n break;\\n case \\"String\\":\\n s = k(nt(t));\\n break;\\n case \\"Date\\":\\n s = new R(it(t));\\n break;\\n case \\"Blob\\":\\n try {\\n s = t.slice(0, t.size, t.type);\\n } catch (t) {\\n throwUnpolyfillable(m);\\n }\\n break;\\n case \\"DOMPoint\\":\\n case \\"DOMPointReadOnly\\":\\n i = a[m];\\n try {\\n s = i.fromPoint ? i.fromPoint(t) : new i(t.x, t.y, t.z, t.w);\\n } catch (t) {\\n throwUnpolyfillable(m);\\n }\\n break;\\n case \\"DOMRect\\":\\n case \\"DOMRectReadOnly\\":\\n i = a[m];\\n try {\\n s = i.fromRect ? i.fromRect(t) : new i(t.x, t.y, t.width, t.height);\\n } catch (t) {\\n throwUnpolyfillable(m);\\n }\\n break;\\n case \\"DOMMatrix\\":\\n case \\"DOMMatrixReadOnly\\":\\n i = a[m];\\n try {\\n s = i.fromMatrix ? i.fromMatrix(t) : new i(t);\\n } catch (t) {\\n throwUnpolyfillable(m);\\n }\\n break;\\n case \\"AudioData\\":\\n case \\"VideoFrame\\":\\n d(t.clone) || throwUnpolyfillable(m);\\n try {\\n s = t.clone();\\n } catch (t) {\\n throwUncloneable(m);\\n }\\n break;\\n case \\"CropTarget\\":\\n case \\"CryptoKey\\":\\n case \\"FileSystemDirectoryHandle\\":\\n case \\"FileSystemFileHandle\\":\\n case \\"FileSystemHandle\\":\\n case \\"GPUCompilationInfo\\":\\n case \\"GPUCompilationMessage\\":\\n case \\"ImageBitmap\\":\\n case \\"RTCCertificate\\":\\n case \\"WebAssembly.Module\\":\\n throwUnpolyfillable(m);\\n default:\\n throwUncloneable(m);\\n }\\n }\\n K(e, t, s);\\n switch (m) {\\n case \\"Array\\":\\n case \\"Object\\":\\n u = Q(t);\\n for (c = 0, h = S(u); c < h; c++) {\\n p = u[c];\\n A(s, p, structuredCloneInternal(t[p], e, n));\\n }\\n break;\\n case \\"Map\\":\\n t.forEach(function (t, i) {\\n K(s, structuredCloneInternal(i, e, n), structuredCloneInternal(t, e, n));\\n });\\n break;\\n case \\"Set\\":\\n t.forEach(function (t) {\\n J(s, structuredCloneInternal(t, e, n));\\n });\\n break;\\n case \\"Error\\":\\n _(s, \\"message\\", structuredCloneInternal(t.message, e, n));\\n y(t, \\"cause\\") && _(s, \\"cause\\", structuredCloneInternal(t.cause, e, n));\\n \\"AggregateError\\" == r && (s.errors = structuredCloneInternal(t.errors, e, n));\\n case \\"DOMException\\":\\n T && _(s, \\"stack\\", structuredCloneInternal(t.stack, e, n));\\n }\\n return s;\\n },\\n replacePlaceholders = function replacePlaceholders(t, e) {\\n if (!f(t)) return t;\\n if ($(e, t)) return X(e, t);\\n var n, i, r, s, a, o, l, c;\\n if (t instanceof Placeholder) {\\n n = t.type;\\n i = t.object;\\n switch (n) {\\n case \\"ArrayBuffer\\":\\n case \\"SharedArrayBuffer\\":\\n c = cloneBuffer(i, e, n);\\n break;\\n case \\"DataView\\":\\n case \\"Int8Array\\":\\n case \\"Uint8Array\\":\\n case \\"Uint8ClampedArray\\":\\n case \\"Int16Array\\":\\n case \\"Uint16Array\\":\\n case \\"Int32Array\\":\\n case \\"Uint32Array\\":\\n case \\"Float16Array\\":\\n case \\"Float32Array\\":\\n case \\"Float64Array\\":\\n case \\"BigInt64Array\\":\\n case \\"BigUint64Array\\":\\n r = t.metadata;\\n c = cloneView(i, n, r.offset, r.length, e);\\n }\\n } else switch (v(t)) {\\n case \\"Array\\":\\n case \\"Object\\":\\n o = Q(t);\\n for (s = 0, a = S(o); s < a; s++) t[l = o[s]] = replacePlaceholders(t[l], e);\\n break;\\n case \\"Map\\":\\n c = new V();\\n t.forEach(function (t, n) {\\n K(c, replacePlaceholders(n, e), replacePlaceholders(t, e));\\n });\\n break;\\n case \\"Set\\":\\n c = new Y();\\n t.forEach(function (t) {\\n J(c, replacePlaceholders(t, e));\\n });\\n break;\\n case \\"Error\\":\\n t.message = replacePlaceholders(t.message, e);\\n y(t, \\"cause\\") && (t.cause = replacePlaceholders(t.cause, e));\\n \\"AggregateError\\" == t.name && (t.errors = replacePlaceholders(t.errors, e));\\n case \\"DOMException\\":\\n T && (t.stack = replacePlaceholders(t.stack, e));\\n }\\n K(e, t, c || t);\\n return c || t;\\n };\\n s({\\n global: !0,\\n enumerable: !0,\\n sham: !P,\\n forced: lt\\n }, {\\n structuredClone: function structuredClone(t) {\\n var e,\\n n,\\n i = E(arguments.length, 1) > 1 && !p(arguments[1]) ? b(arguments[1]) : void 0,\\n r = i ? i.transfer : void 0,\\n s = !1;\\n if (void 0 !== r) {\\n n = function (t, e) {\\n if (!f(t)) throw B(\\"Transfer option cannot be converted to a sequence\\");\\n var n = [];\\n m(t, function (t) {\\n Z(n, b(t));\\n });\\n for (var i, r, s, o, l, c = 0, h = S(n), p = []; c < h;) {\\n i = n[c++];\\n if (\\"ArrayBuffer\\" !== (r = v(i))) {\\n if ($(e, i)) throw new G(\\"Duplicate transferable\\", st);\\n if (P) o = ot(i, {\\n transfer: [i]\\n });else switch (r) {\\n case \\"ImageBitmap\\":\\n s = a.OffscreenCanvas;\\n u(s) || throwUnpolyfillable(r, at);\\n try {\\n (l = new s(i.width, i.height)).getContext(\\"bitmaprenderer\\").transferFromImageBitmap(i);\\n o = l.transferToImageBitmap();\\n } catch (t) {}\\n break;\\n case \\"AudioData\\":\\n case \\"VideoFrame\\":\\n d(i.clone) && d(i.close) || throwUnpolyfillable(r, at);\\n try {\\n o = i.clone();\\n i.close();\\n } catch (t) {}\\n break;\\n case \\"MediaSourceHandle\\":\\n case \\"MessagePort\\":\\n case \\"OffscreenCanvas\\":\\n case \\"ReadableStream\\":\\n case \\"TransformStream\\":\\n case \\"WritableStream\\":\\n throwUnpolyfillable(r, at);\\n }\\n if (void 0 === o) throw new G(\\"This object cannot be transferred: \\" + r, st);\\n K(e, i, o);\\n } else Z(p, i);\\n }\\n return p;\\n }(r, e = new V());\\n s = !!S(n);\\n }\\n var o = structuredCloneInternal(t, e, s);\\n if (s) {\\n !function (t, e) {\\n for (var n, i, r = 0, s = S(t); r < s;) {\\n n = t[r++];\\n if ($(e, n)) throw new G(\\"Duplicate transferable\\", st);\\n if (P) i = ot(n, {\\n transfer: [n]\\n });else {\\n d(n.transfer) || throwUnpolyfillable(\\"ArrayBuffer\\", at);\\n i = n.transfer();\\n }\\n K(e, n, i);\\n }\\n }(r, e = new V());\\n o = replacePlaceholders(o, e);\\n }\\n return o;\\n }\\n });\\n }, (t, e, n) => {\\n var i = n(14),\\n r = n(7),\\n s = n(21),\\n a = n(78),\\n o = n(24),\\n l = n(51),\\n noop = function noop() {},\\n c = [],\\n h = o(\\"Reflect\\", \\"construct\\"),\\n d = /^\\\\s*(?:class|function)\\\\b/,\\n u = i(d.exec),\\n p = !d.exec(noop),\\n f = function isConstructor(t) {\\n if (!s(t)) return !1;\\n try {\\n h(noop, c, t);\\n return !0;\\n } catch (t) {\\n return !1;\\n }\\n },\\n g = function isConstructor(t) {\\n if (!s(t)) return !1;\\n switch (a(t)) {\\n case \\"AsyncFunction\\":\\n case \\"GeneratorFunction\\":\\n case \\"AsyncGeneratorFunction\\":\\n return !1;\\n }\\n try {\\n return p || !!u(d, l(t));\\n } catch (t) {\\n return !0;\\n }\\n };\\n g.sham = !0;\\n t.exports = !h || r(function () {\\n var t;\\n return f(f.call) || !f(Object) || !f(function () {\\n t = !0;\\n }) || t;\\n }) ? g : f;\\n }, (t, e, n) => {\\n var i = n(99),\\n r = n(8),\\n s = n(47),\\n a = n(32),\\n o = n(154),\\n l = n(64),\\n c = n(25),\\n h = n(156),\\n d = n(157),\\n u = n(139),\\n p = TypeError,\\n Result = function Result(t, e) {\\n this.stopped = t;\\n this.result = e;\\n },\\n f = Result.prototype;\\n t.exports = function (t, e, n) {\\n var g,\\n m,\\n b,\\n v,\\n y,\\n A,\\n _,\\n S = n && n.that,\\n E = !(!n || !n.AS_ENTRIES),\\n x = !(!n || !n.IS_RECORD),\\n w = !(!n || !n.IS_ITERATOR),\\n C = !(!n || !n.INTERRUPTED),\\n T = i(e, S),\\n stop = function stop(t) {\\n g && u(g, \\"normal\\", t);\\n return new Result(!0, t);\\n },\\n callFn = function callFn(t) {\\n if (E) {\\n s(t);\\n return C ? T(t[0], t[1], stop) : T(t[0], t[1]);\\n }\\n return C ? T(t, stop) : T(t);\\n };\\n if (x) g = t.iterator;else if (w) g = t;else {\\n if (!(m = d(t))) throw p(a(t) + \\" is not iterable\\");\\n if (o(m)) {\\n for (b = 0, v = l(t); v > b; b++) if ((y = callFn(t[b])) && c(f, y)) return y;\\n return new Result(!1);\\n }\\n g = h(t, m);\\n }\\n A = x ? t.next : g.next;\\n for (; !(_ = r(A, g)).done;) {\\n try {\\n y = callFn(_.value);\\n } catch (t) {\\n u(g, \\"throw\\", t);\\n }\\n if (\\"object\\" == typeof y && y && c(f, y)) return y;\\n }\\n return new Result(!1);\\n };\\n }, (t, e, n) => {\\n var i = n(34),\\n r = n(155),\\n s = i(\\"iterator\\"),\\n a = Array.prototype;\\n t.exports = function (t) {\\n return void 0 !== t && (r.Array === t || a[s] === t);\\n };\\n }, t => {\\n t.exports = {};\\n }, (t, e, n) => {\\n var i = n(8),\\n r = n(31),\\n s = n(47),\\n a = n(32),\\n o = n(157),\\n l = TypeError;\\n t.exports = function (t, e) {\\n var n = arguments.length < 2 ? o(t) : e;\\n if (r(n)) return s(i(n, t));\\n throw l(a(t) + \\" is not iterable\\");\\n };\\n }, (t, e, n) => {\\n var i = n(78),\\n r = n(30),\\n s = n(17),\\n a = n(155),\\n o = n(34)(\\"iterator\\");\\n t.exports = function (t) {\\n if (!s(t)) return r(t, o) || r(t, \\"@@iterator\\") || a[i(t)];\\n };\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n var i = n(18),\\n r = n(45),\\n s = n(11);\\n t.exports = function (t, e, n) {\\n var a = i(e);\\n a in t ? r.f(t, a, s(0, n)) : t[a] = n;\\n };\\n }, (t, e, n) => {\\n var i = n(8),\\n r = n(39),\\n s = n(25),\\n a = n(160),\\n o = RegExp.prototype;\\n t.exports = function (t) {\\n var e = t.flags;\\n return void 0 !== e || \\"flags\\" in o || r(t, \\"flags\\") || !s(o, t) ? e : i(a, t);\\n };\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n var i = n(47);\\n t.exports = function () {\\n var t = i(this),\\n e = \\"\\";\\n t.hasIndices && (e += \\"d\\");\\n t.global && (e += \\"g\\");\\n t.ignoreCase && (e += \\"i\\");\\n t.multiline && (e += \\"m\\");\\n t.dotAll && (e += \\"s\\");\\n t.unicode && (e += \\"u\\");\\n t.unicodeSets && (e += \\"v\\");\\n t.sticky && (e += \\"y\\");\\n return e;\\n };\\n }, (t, e, n) => {\\n var i = n(14),\\n r = Map.prototype;\\n t.exports = {\\n Map: Map,\\n set: i(r.set),\\n get: i(r.get),\\n has: i(r.has),\\n remove: i(r.delete),\\n proto: r\\n };\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n Object.defineProperty(e, \\"__esModule\\", {\\n value: !0\\n });\\n e.SerializableEmpty = e.PrintAnnotationStorage = e.AnnotationStorage = void 0;\\n n(89);\\n n(148);\\n n(151);\\n var i = n(1),\\n r = n(163),\\n s = n(169);\\n const a = Object.freeze({\\n map: null,\\n hash: \\"\\",\\n transfers: void 0\\n });\\n e.SerializableEmpty = a;\\n var _v = /*#__PURE__*/new WeakMap();\\n var _y = /*#__PURE__*/new WeakMap();\\n var _A = /*#__PURE__*/new WeakSet();\\n class AnnotationStorage {\\n constructor() {\\n _classPrivateMethodInitSpec(this, _A);\\n _classPrivateFieldInitSpec(this, _v, {\\n writable: true,\\n value: !1\\n });\\n _classPrivateFieldInitSpec(this, _y, {\\n writable: true,\\n value: new Map()\\n });\\n this.onSetModified = null;\\n this.onResetModified = null;\\n this.onAnnotationEditor = null;\\n }\\n getValue(t, e) {\\n const n = _classPrivateFieldGet(this, _y).get(t);\\n return void 0 === n ? e : Object.assign(e, n);\\n }\\n getRawValue(t) {\\n return _classPrivateFieldGet(this, _y).get(t);\\n }\\n remove(t) {\\n _classPrivateFieldGet(this, _y).delete(t);\\n 0 === _classPrivateFieldGet(this, _y).size && this.resetModified();\\n if (\\"function\\" == typeof this.onAnnotationEditor) {\\n for (const t of _classPrivateFieldGet(this, _y).values()) if (t instanceof r.AnnotationEditor) return;\\n this.onAnnotationEditor(null);\\n }\\n }\\n setValue(t, e) {\\n const n = _classPrivateFieldGet(this, _y).get(t);\\n let i = !1;\\n if (void 0 !== n) {\\n for (const [t, r] of Object.entries(e)) if (n[t] !== r) {\\n i = !0;\\n n[t] = r;\\n }\\n } else {\\n i = !0;\\n _classPrivateFieldGet(this, _y).set(t, e);\\n }\\n i && _classPrivateMethodGet(this, _A, _A2).call(this);\\n e instanceof r.AnnotationEditor && \\"function\\" == typeof this.onAnnotationEditor && this.onAnnotationEditor(e.constructor._type);\\n }\\n has(t) {\\n return _classPrivateFieldGet(this, _y).has(t);\\n }\\n getAll() {\\n return _classPrivateFieldGet(this, _y).size > 0 ? (0, i.objectFromMap)(_classPrivateFieldGet(this, _y)) : null;\\n }\\n setAll(t) {\\n for (const [e, n] of Object.entries(t)) this.setValue(e, n);\\n }\\n get size() {\\n return _classPrivateFieldGet(this, _y).size;\\n }\\n resetModified() {\\n if (_classPrivateFieldGet(this, _v)) {\\n _classPrivateFieldSet(this, _v, !1);\\n \\"function\\" == typeof this.onResetModified && this.onResetModified();\\n }\\n }\\n get print() {\\n return new PrintAnnotationStorage(this);\\n }\\n get serializable() {\\n if (0 === _classPrivateFieldGet(this, _y).size) return a;\\n const t = new Map(),\\n e = new s.MurmurHash3_64(),\\n n = [],\\n i = Object.create(null);\\n let o = !1;\\n for (const [n, s] of _classPrivateFieldGet(this, _y)) {\\n const a = s instanceof r.AnnotationEditor ? s.serialize(!1, i) : s;\\n if (a) {\\n t.set(n, a);\\n e.update(\\"\\".concat(n, \\":\\").concat(JSON.stringify(a)));\\n o || (o = !!a.bitmap);\\n }\\n }\\n if (o) for (const e of t.values()) e.bitmap && n.push(e.bitmap);\\n return t.size > 0 ? {\\n map: t,\\n hash: e.hexdigest(),\\n transfers: n\\n } : a;\\n }\\n }\\n function _A2() {\\n if (!_classPrivateFieldGet(this, _v)) {\\n _classPrivateFieldSet(this, _v, !0);\\n \\"function\\" == typeof this.onSetModified && this.onSetModified();\\n }\\n }\\n e.AnnotationStorage = AnnotationStorage;\\n var _2 = /*#__PURE__*/new WeakMap();\\n class PrintAnnotationStorage extends AnnotationStorage {\\n constructor(t) {\\n super();\\n _classPrivateFieldInitSpec(this, _2, {\\n writable: true,\\n value: void 0\\n });\\n const {\\n map: e,\\n hash: n,\\n transfers: i\\n } = t.serializable,\\n r = structuredClone(e, null);\\n _classPrivateFieldSet(this, _2, {\\n map: r,\\n hash: n,\\n transfers: i\\n });\\n }\\n get print() {\\n (0, i.unreachable)(\\"Should not call PrintAnnotationStorage.print\\");\\n }\\n get serializable() {\\n return _classPrivateFieldGet(this, _2);\\n }\\n }\\n e.PrintAnnotationStorage = PrintAnnotationStorage;\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n var _class12;\\n Object.defineProperty(e, \\"__esModule\\", {\\n value: !0\\n });\\n e.AnnotationEditor = void 0;\\n n(89);\\n n(2);\\n var i = n(1),\\n r = n(164);\\n var _S = /*#__PURE__*/new WeakMap();\\n var _E = /*#__PURE__*/new WeakMap();\\n var _x = /*#__PURE__*/new WeakMap();\\n var _w = /*#__PURE__*/new WeakMap();\\n var _C = /*#__PURE__*/new WeakMap();\\n var _T = /*#__PURE__*/new WeakMap();\\n var _P = /*#__PURE__*/new WeakMap();\\n var _k = /*#__PURE__*/new WeakMap();\\n var _M = /*#__PURE__*/new WeakMap();\\n var _R = /*#__PURE__*/new WeakSet();\\n var _F = /*#__PURE__*/new WeakSet();\\n var _I = /*#__PURE__*/new WeakSet();\\n var _D = /*#__PURE__*/new WeakSet();\\n class AnnotationEditor {\\n constructor(_t4) {\\n _classPrivateMethodInitSpec(this, _D);\\n _classPrivateMethodInitSpec(this, _I);\\n _classPrivateMethodInitSpec(this, _F);\\n _classPrivateMethodInitSpec(this, _R);\\n _classPrivateFieldInitSpec(this, _S, {\\n writable: true,\\n value: !1\\n });\\n _classPrivateFieldInitSpec(this, _E, {\\n writable: true,\\n value: null\\n });\\n _classPrivateFieldInitSpec(this, _x, {\\n writable: true,\\n value: null\\n });\\n _classPrivateFieldInitSpec(this, _w, {\\n writable: true,\\n value: this.focusin.bind(this)\\n });\\n _classPrivateFieldInitSpec(this, _C, {\\n writable: true,\\n value: this.focusout.bind(this)\\n });\\n _classPrivateFieldInitSpec(this, _T, {\\n writable: true,\\n value: !1\\n });\\n _classPrivateFieldInitSpec(this, _P, {\\n writable: true,\\n value: !1\\n });\\n _classPrivateFieldInitSpec(this, _k, {\\n writable: true,\\n value: !1\\n });\\n _defineProperty(this, \\"_uiManager\\", null);\\n _classPrivateFieldInitSpec(this, _M, {\\n writable: true,\\n value: AnnotationEditor._zIndex++\\n });\\n this.constructor === AnnotationEditor && (0, i.unreachable)(\\"Cannot initialize AnnotationEditor.\\");\\n this.parent = _t4.parent;\\n this.id = _t4.id;\\n this.width = this.height = null;\\n this.pageIndex = _t4.parent.pageIndex;\\n this.name = _t4.name;\\n this.div = null;\\n this._uiManager = _t4.uiManager;\\n this.annotationElementId = null;\\n this._willKeepAspectRatio = !1;\\n const {\\n rotation: _e4,\\n rawDims: {\\n pageWidth: _n3,\\n pageHeight: _r3,\\n pageX: _s4,\\n pageY: _a2\\n }\\n } = this.parent.viewport;\\n this.rotation = _e4;\\n this.pageRotation = (360 + _e4 - this._uiManager.viewParameters.rotation) % 360;\\n this.pageDimensions = [_n3, _r3];\\n this.pageTranslation = [_s4, _a2];\\n const [_o2, _l2] = this.parentDimensions;\\n this.x = _t4.x / _o2;\\n this.y = _t4.y / _l2;\\n this.isAttachedToDOM = !1;\\n this.deleted = !1;\\n }\\n static get _defaultLineColor() {\\n return (0, i.shadow)(this, \\"_defaultLineColor\\", this._colorManager.getHexCode(\\"CanvasText\\"));\\n }\\n static deleteAnnotationElement(t) {\\n const e = new FakeEditor({\\n id: t.parent.getNextId(),\\n parent: t.parent,\\n uiManager: t._uiManager\\n });\\n e.annotationElementId = t.annotationElementId;\\n e.deleted = !0;\\n e._uiManager.addToAnnotationStorage(e);\\n }\\n static initialize(t) {}\\n static updateDefaultParams(t, e) {}\\n static get defaultPropertiesToUpdate() {\\n return [];\\n }\\n get propertiesToUpdate() {\\n return [];\\n }\\n addCommands(t) {\\n this._uiManager.addCommands(t);\\n }\\n get currentLayer() {\\n return this._uiManager.currentLayer;\\n }\\n setInBackground() {\\n this.div.style.zIndex = 0;\\n }\\n setInForeground() {\\n this.div.style.zIndex = _classPrivateFieldGet(this, _M);\\n }\\n setParent(t) {\\n if (null !== t) {\\n this.pageIndex = t.pageIndex;\\n this.pageDimensions = t.pageDimensions;\\n }\\n this.parent = t;\\n }\\n focusin(t) {\\n _classPrivateFieldGet(this, _T) ? _classPrivateFieldSet(this, _T, !1) : this.parent.setSelected(this);\\n }\\n focusout(t) {\\n if (!this.isAttachedToDOM) return;\\n const e = t.relatedTarget;\\n if (!(e !== null && e !== void 0 && e.closest(\\"#\\".concat(this.id)))) {\\n var _this$parent;\\n t.preventDefault();\\n ((_this$parent = this.parent) === null || _this$parent === void 0 ? void 0 : _this$parent.isMultipleSelection) || this.commitOrRemove();\\n }\\n }\\n commitOrRemove() {\\n this.isEmpty() ? this.remove() : this.commit();\\n }\\n commit() {\\n this.addToAnnotationStorage();\\n }\\n addToAnnotationStorage() {\\n this._uiManager.addToAnnotationStorage(this);\\n }\\n dragstart(t) {\\n const e = this.parent.div.getBoundingClientRect();\\n this.startX = t.clientX - e.x;\\n this.startY = t.clientY - e.y;\\n t.dataTransfer.setData(\\"text/plain\\", this.id);\\n t.dataTransfer.effectAllowed = \\"move\\";\\n }\\n setAt(t, e, n, i) {\\n const [r, s] = this.parentDimensions;\\n [n, i] = this.screenToPageTranslation(n, i);\\n this.x = (t + n) / r;\\n this.y = (e + i) / s;\\n this.fixAndSetPosition();\\n }\\n translate(t, e) {\\n _classPrivateMethodGet(this, _R, _R2).call(this, this.parentDimensions, t, e);\\n }\\n translateInPage(t, e) {\\n _classPrivateMethodGet(this, _R, _R2).call(this, this.pageDimensions, t, e);\\n this.div.scrollIntoView({\\n block: \\"nearest\\"\\n });\\n }\\n fixAndSetPosition() {\\n const [t, e] = this.pageDimensions;\\n let {\\n x: n,\\n y: i,\\n width: r,\\n height: s\\n } = this;\\n r *= t;\\n s *= e;\\n n *= t;\\n i *= e;\\n switch (this.rotation) {\\n case 0:\\n n = Math.max(0, Math.min(t - r, n));\\n i = Math.max(0, Math.min(e - s, i));\\n break;\\n case 90:\\n n = Math.max(0, Math.min(t - s, n));\\n i = Math.min(e, Math.max(r, i));\\n break;\\n case 180:\\n n = Math.min(t, Math.max(r, n));\\n i = Math.min(e, Math.max(s, i));\\n break;\\n case 270:\\n n = Math.min(t, Math.max(s, n));\\n i = Math.max(0, Math.min(e - r, i));\\n }\\n this.x = n / t;\\n this.y = i / e;\\n this.div.style.left = \\"\\".concat((100 * this.x).toFixed(2), \\"%\\");\\n this.div.style.top = \\"\\".concat((100 * this.y).toFixed(2), \\"%\\");\\n }\\n screenToPageTranslation(t, e) {\\n switch (this.parentRotation) {\\n case 90:\\n return [e, -t];\\n case 180:\\n return [-t, -e];\\n case 270:\\n return [-e, t];\\n default:\\n return [t, e];\\n }\\n }\\n pageTranslationToScreen(t, e) {\\n switch (this.parentRotation) {\\n case 90:\\n return [-e, t];\\n case 180:\\n return [-t, -e];\\n case 270:\\n return [e, -t];\\n default:\\n return [t, e];\\n }\\n }\\n get parentScale() {\\n return this._uiManager.viewParameters.realScale;\\n }\\n get parentRotation() {\\n return (this._uiManager.viewParameters.rotation + this.pageRotation) % 360;\\n }\\n get parentDimensions() {\\n const {\\n realScale: t\\n } = this._uiManager.viewParameters,\\n [e, n] = this.pageDimensions;\\n return [e * t, n * t];\\n }\\n setDims(t, e) {\\n const [n, i] = this.parentDimensions;\\n this.div.style.width = \\"\\".concat((100 * t / n).toFixed(2), \\"%\\");\\n _classPrivateFieldGet(this, _S) || (this.div.style.height = \\"\\".concat((100 * e / i).toFixed(2), \\"%\\"));\\n }\\n fixDims() {\\n const {\\n style: t\\n } = this.div,\\n {\\n height: e,\\n width: n\\n } = t,\\n i = n.endsWith(\\"%\\"),\\n r = !_classPrivateFieldGet(this, _S) && e.endsWith(\\"%\\");\\n if (i && r) return;\\n const [s, a] = this.parentDimensions;\\n i || (t.width = \\"\\".concat((100 * parseFloat(n) / s).toFixed(2), \\"%\\"));\\n _classPrivateFieldGet(this, _S) || r || (t.height = \\"\\".concat((100 * parseFloat(e) / a).toFixed(2), \\"%\\"));\\n }\\n getInitialTranslation() {\\n return [0, 0];\\n }\\n render() {\\n this.div = document.createElement(\\"div\\");\\n this.div.setAttribute(\\"data-editor-rotation\\", (360 - this.rotation) % 360);\\n this.div.className = this.name;\\n this.div.setAttribute(\\"id\\", this.id);\\n this.div.setAttribute(\\"tabIndex\\", 0);\\n this.setInForeground();\\n this.div.addEventListener(\\"focusin\\", _classPrivateFieldGet(this, _w));\\n this.div.addEventListener(\\"focusout\\", _classPrivateFieldGet(this, _C));\\n const [t, e] = this.parentDimensions;\\n if (this.parentRotation % 180 != 0) {\\n this.div.style.maxWidth = \\"\\".concat((100 * e / t).toFixed(2), \\"%\\");\\n this.div.style.maxHeight = \\"\\".concat((100 * t / e).toFixed(2), \\"%\\");\\n }\\n const [n, i] = this.getInitialTranslation();\\n this.translate(n, i);\\n (0, r.bindEvents)(this, this.div, [\\"dragstart\\", \\"pointerdown\\"]);\\n return this.div;\\n }\\n pointerdown(t) {\\n const {\\n isMac: e\\n } = i.FeatureTest.platform;\\n if (0 !== t.button || t.ctrlKey && e) t.preventDefault();else {\\n t.ctrlKey && !e || t.shiftKey || t.metaKey && e ? this.parent.toggleSelected(this) : this.parent.setSelected(this);\\n _classPrivateFieldSet(this, _T, !0);\\n }\\n }\\n getRect(t, e) {\\n const n = this.parentScale,\\n [i, r] = this.pageDimensions,\\n [s, a] = this.pageTranslation,\\n o = t / n,\\n l = e / n,\\n c = this.x * i,\\n h = this.y * r,\\n d = this.width * i,\\n u = this.height * r;\\n switch (this.rotation) {\\n case 0:\\n return [c + o + s, r - h - l - u + a, c + o + d + s, r - h - l + a];\\n case 90:\\n return [c + l + s, r - h + o + a, c + l + u + s, r - h + o + d + a];\\n case 180:\\n return [c - o - d + s, r - h + l + a, c - o + s, r - h + l + u + a];\\n case 270:\\n return [c - l - u + s, r - h - o - d + a, c - l + s, r - h - o + a];\\n default:\\n throw new Error(\\"Invalid rotation\\");\\n }\\n }\\n getRectInCurrentCoords(t, e) {\\n const [n, i, r, s] = t,\\n a = r - n,\\n o = s - i;\\n switch (this.rotation) {\\n case 0:\\n return [n, e - s, a, o];\\n case 90:\\n return [n, e - i, o, a];\\n case 180:\\n return [r, e - i, a, o];\\n case 270:\\n return [r, e - s, o, a];\\n default:\\n throw new Error(\\"Invalid rotation\\");\\n }\\n }\\n onceAdded() {}\\n isEmpty() {\\n return !1;\\n }\\n enableEditMode() {\\n _classPrivateFieldSet(this, _k, !0);\\n }\\n disableEditMode() {\\n _classPrivateFieldSet(this, _k, !1);\\n }\\n isInEditMode() {\\n return _classPrivateFieldGet(this, _k);\\n }\\n shouldGetKeyboardEvents() {\\n return !1;\\n }\\n needsToBeRebuilt() {\\n return this.div && !this.isAttachedToDOM;\\n }\\n rebuild() {\\n var _this$div, _this$div2;\\n (_this$div = this.div) === null || _this$div === void 0 ? void 0 : _this$div.addEventListener(\\"focusin\\", _classPrivateFieldGet(this, _w));\\n (_this$div2 = this.div) === null || _this$div2 === void 0 ? void 0 : _this$div2.addEventListener(\\"focusout\\", _classPrivateFieldGet(this, _C));\\n }\\n serialize() {\\n (0, i.unreachable)(\\"An editor must be serializable\\");\\n }\\n static deserialize(t, e, n) {\\n const i = new this.prototype.constructor({\\n parent: e,\\n id: e.getNextId(),\\n uiManager: n\\n });\\n i.rotation = t.rotation;\\n const [r, s] = i.pageDimensions,\\n [a, o, l, c] = i.getRectInCurrentCoords(t.rect, s);\\n i.x = a / r;\\n i.y = o / s;\\n i.width = l / r;\\n i.height = c / s;\\n return i;\\n }\\n remove() {\\n this.div.removeEventListener(\\"focusin\\", _classPrivateFieldGet(this, _w));\\n this.div.removeEventListener(\\"focusout\\", _classPrivateFieldGet(this, _C));\\n this.isEmpty() || this.commit();\\n this.parent ? this.parent.remove(this) : this._uiManager.removeEditor(this);\\n }\\n get isResizable() {\\n return !1;\\n }\\n makeResizable() {\\n if (this.isResizable) {\\n _classPrivateMethodGet(this, _F, _F2).call(this);\\n _classPrivateFieldGet(this, _E).classList.remove(\\"hidden\\");\\n }\\n }\\n select() {\\n var _this$div3;\\n this.makeResizable();\\n (_this$div3 = this.div) === null || _this$div3 === void 0 ? void 0 : _this$div3.classList.add(\\"selectedEditor\\");\\n }\\n unselect() {\\n var _classPrivateFieldGet3, _this$div4, _this$div5;\\n (_classPrivateFieldGet3 = _classPrivateFieldGet(this, _E)) === null || _classPrivateFieldGet3 === void 0 ? void 0 : _classPrivateFieldGet3.classList.add(\\"hidden\\");\\n (_this$div4 = this.div) === null || _this$div4 === void 0 ? void 0 : _this$div4.classList.remove(\\"selectedEditor\\");\\n ((_this$div5 = this.div) === null || _this$div5 === void 0 ? void 0 : _this$div5.contains(document.activeElement)) && this._uiManager.currentLayer.div.focus();\\n }\\n updateParams(t, e) {}\\n disableEditing() {}\\n enableEditing() {}\\n enterInEditMode() {}\\n get contentDiv() {\\n return this.div;\\n }\\n get isEditing() {\\n return _classPrivateFieldGet(this, _P);\\n }\\n set isEditing(t) {\\n _classPrivateFieldSet(this, _P, t);\\n if (this.parent) if (t) {\\n this.parent.setSelected(this);\\n this.parent.setActiveEditor(this);\\n } else this.parent.setActiveEditor(null);\\n }\\n setAspectRatio(t, e) {\\n _classPrivateFieldSet(this, _S, !0);\\n const n = t / e,\\n {\\n style: i\\n } = this.div;\\n i.aspectRatio = n;\\n i.height = \\"auto\\";\\n }\\n static get MIN_SIZE() {\\n return 16;\\n }\\n }\\n _class12 = AnnotationEditor;\\n function _R2(t, e, n) {\\n let [i, r] = t;\\n [e, n] = this.screenToPageTranslation(e, n);\\n this.x += e / i;\\n this.y += n / r;\\n this.fixAndSetPosition();\\n }\\n function _F2() {\\n if (_classPrivateFieldGet(this, _E)) return;\\n _classPrivateFieldSet(this, _E, document.createElement(\\"div\\"));\\n _classPrivateFieldGet(this, _E).classList.add(\\"resizers\\");\\n const t = [\\"topLeft\\", \\"topRight\\", \\"bottomRight\\", \\"bottomLeft\\"];\\n this._willKeepAspectRatio || t.push(\\"topMiddle\\", \\"middleRight\\", \\"bottomMiddle\\", \\"middleLeft\\");\\n for (const e of t) {\\n const t = document.createElement(\\"div\\");\\n _classPrivateFieldGet(this, _E).append(t);\\n t.classList.add(\\"resizer\\", e);\\n t.addEventListener(\\"pointerdown\\", _classPrivateMethodGet(this, _I, _I2).bind(this, e));\\n }\\n this.div.prepend(_classPrivateFieldGet(this, _E));\\n }\\n function _I2(t, e) {\\n e.preventDefault();\\n _classPrivateFieldSet(this, _x, [e.clientX, e.clientY]);\\n const n = _classPrivateMethodGet(this, _D, _D2).bind(this, t),\\n i = this.div.draggable;\\n this.div.draggable = !1;\\n const r = \\"resizing\\".concat(t.charAt(0).toUpperCase()).concat(t.slice(1));\\n this.parent.div.classList.add(r);\\n const s = {\\n passive: !0,\\n capture: !0\\n };\\n window.addEventListener(\\"pointermove\\", n, s);\\n window.addEventListener(\\"pointerup\\", () => {\\n this._uiManager.stopUndoAccumulation();\\n this.div.draggable = i;\\n this.parent.div.classList.remove(r);\\n window.removeEventListener(\\"pointermove\\", n, s);\\n }, {\\n once: !0\\n });\\n }\\n function _D2(t, e) {\\n const {\\n clientX: n,\\n clientY: r\\n } = e,\\n s = n - _classPrivateFieldGet(this, _x)[0],\\n a = r - _classPrivateFieldGet(this, _x)[1];\\n _classPrivateFieldGet(this, _x)[0] = n;\\n _classPrivateFieldGet(this, _x)[1] = r;\\n const [o, l] = this.parentDimensions,\\n c = this.x,\\n h = this.y,\\n d = this.width,\\n u = this.height,\\n p = _class12.MIN_SIZE / o,\\n f = _class12.MIN_SIZE / l;\\n let g;\\n const round = t => Math.round(1e4 * t) / 1e4,\\n updatePosition = (t, e) => {\\n const [n, i] = this.parentDimensions;\\n this.setDims(n * t, i * e);\\n this.fixAndSetPosition();\\n };\\n switch (t) {\\n case \\"topLeft\\":\\n {\\n if (Math.sign(s) * Math.sign(a) < 0) return;\\n const t = Math.hypot(s, a),\\n e = Math.hypot(d * o, u * l),\\n n = round(c + d),\\n i = round(h + u),\\n r = Math.max(Math.min(1 - Math.sign(s) * (t / e), 1 / d, 1 / u), p / d, f / u),\\n m = round(d * r),\\n b = round(u * r),\\n v = n - m,\\n y = i - b;\\n g = () => {\\n this.width = m;\\n this.height = b;\\n this.x = v;\\n this.y = y;\\n updatePosition(m, b);\\n };\\n break;\\n }\\n case \\"topMiddle\\":\\n {\\n const t = round(this.y + u),\\n e = round(Math.max(f, Math.min(1, u - a / l))),\\n n = t - e;\\n g = () => {\\n this.height = e;\\n this.y = n;\\n updatePosition(d, e);\\n };\\n break;\\n }\\n case \\"topRight\\":\\n {\\n if (Math.sign(s) * Math.sign(a) > 0) return;\\n const t = Math.hypot(s, a),\\n e = Math.hypot(this.width * o, this.height * l),\\n n = round(h + this.height),\\n i = Math.max(Math.min(1 + Math.sign(s) * (t / e), 1 / d, 1 / u), p / d, f / u),\\n r = round(d * i),\\n c = round(u * i),\\n m = n - c;\\n g = () => {\\n this.width = r;\\n this.height = c;\\n this.y = m;\\n updatePosition(r, c);\\n };\\n break;\\n }\\n case \\"middleRight\\":\\n {\\n const t = round(Math.max(p, Math.min(1, d + s / o)));\\n g = () => {\\n this.width = t;\\n updatePosition(t, u);\\n };\\n break;\\n }\\n case \\"bottomRight\\":\\n {\\n if (Math.sign(s) * Math.sign(a) < 0) return;\\n const t = Math.hypot(s, a),\\n e = Math.hypot(this.width * o, this.height * l),\\n n = Math.max(Math.min(1 + Math.sign(s) * (t / e), 1 / d, 1 / u), p / d, f / u),\\n i = round(d * n),\\n r = round(u * n);\\n g = () => {\\n this.width = i;\\n this.height = r;\\n updatePosition(i, r);\\n };\\n break;\\n }\\n case \\"bottomMiddle\\":\\n {\\n const t = round(Math.max(f, Math.min(1, u + a / l)));\\n g = () => {\\n this.height = t;\\n updatePosition(d, t);\\n };\\n break;\\n }\\n case \\"bottomLeft\\":\\n {\\n if (Math.sign(s) * Math.sign(a) > 0) return;\\n const t = Math.hypot(s, a),\\n e = Math.hypot(this.width * o, this.height * l),\\n n = round(c + this.width),\\n i = Math.max(Math.min(1 - Math.sign(s) * (t / e), 1 / d, 1 / u), p / d, f / u),\\n r = round(d * i),\\n h = round(u * i),\\n m = n - r;\\n g = () => {\\n this.width = r;\\n this.height = h;\\n this.x = m;\\n updatePosition(r, h);\\n };\\n break;\\n }\\n case \\"middleLeft\\":\\n {\\n const t = round(c + d),\\n e = round(Math.max(p, Math.min(1, d - s / o))),\\n n = t - e;\\n g = () => {\\n this.width = e;\\n this.x = n;\\n updatePosition(e, u);\\n };\\n break;\\n }\\n }\\n this.addCommands({\\n cmd: g,\\n undo: () => {\\n this.width = d;\\n this.height = u;\\n this.x = c;\\n this.y = h;\\n updatePosition(d, u);\\n },\\n mustExec: !0,\\n type: i.AnnotationEditorParamsType.RESIZE,\\n overwriteIfSameType: !0,\\n keepUndo: !0\\n });\\n }\\n _defineProperty(AnnotationEditor, \\"_colorManager\\", new r.ColorManager());\\n _defineProperty(AnnotationEditor, \\"_zIndex\\", 1);\\n e.AnnotationEditor = AnnotationEditor;\\n class FakeEditor extends AnnotationEditor {\\n constructor(t) {\\n super(t);\\n this.annotationElementId = t.annotationElementId;\\n this.deleted = !0;\\n }\\n serialize() {\\n return {\\n id: this.annotationElementId,\\n deleted: !0,\\n pageIndex: this.pageIndex\\n };\\n }\\n }\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n Object.defineProperty(e, \\"__esModule\\", {\\n value: !0\\n });\\n e.KeyboardManager = e.CommandManager = e.ColorManager = e.AnnotationEditorUIManager = void 0;\\n e.bindEvents = function bindEvents(t, e, n) {\\n for (const i of n) e.addEventListener(i, t[i].bind(t));\\n };\\n e.opacityToHex = function opacityToHex(t) {\\n return Math.round(Math.min(255, Math.max(1, 255 * t))).toString(16).padStart(2, \\"0\\");\\n };\\n n(2);\\n n(89);\\n n(125);\\n n(135);\\n n(137);\\n n(140);\\n n(142);\\n n(144);\\n n(146);\\n n(165);\\n var i = n(1),\\n r = n(167);\\n var _O = /*#__PURE__*/new WeakMap();\\n class IdManager {\\n constructor() {\\n _classPrivateFieldInitSpec(this, _O, {\\n writable: true,\\n value: 0\\n });\\n }\\n getId() {\\n var _this$O, _this$O2;\\n return \\"\\".concat(i.AnnotationEditorPrefix).concat((_classPrivateFieldSet(this, _O, (_this$O = _classPrivateFieldGet(this, _O), _this$O2 = _this$O++, _this$O)), _this$O2));\\n }\\n }\\n var _L = /*#__PURE__*/new WeakMap();\\n var _O2 = /*#__PURE__*/new WeakMap();\\n var _N = /*#__PURE__*/new WeakMap();\\n var _B = /*#__PURE__*/new WeakSet();\\n class ImageManager {\\n constructor() {\\n _classPrivateMethodInitSpec(this, _B);\\n _classPrivateFieldInitSpec(this, _L, {\\n writable: true,\\n value: (0, i.getUuid)()\\n });\\n _classPrivateFieldInitSpec(this, _O2, {\\n writable: true,\\n value: 0\\n });\\n _classPrivateFieldInitSpec(this, _N, {\\n writable: true,\\n value: null\\n });\\n }\\n async getFromFile(t) {\\n const {\\n lastModified: e,\\n name: n,\\n size: i,\\n type: r\\n } = t;\\n return _classPrivateMethodGet(this, _B, _B2).call(this, \\"\\".concat(e, \\"_\\").concat(n, \\"_\\").concat(i, \\"_\\").concat(r), t);\\n }\\n async getFromUrl(t) {\\n return _classPrivateMethodGet(this, _B, _B2).call(this, t, t);\\n }\\n async getFromId(t) {\\n _classPrivateFieldGet(this, _N) || _classPrivateFieldSet(this, _N, new Map());\\n const e = _classPrivateFieldGet(this, _N).get(t);\\n if (!e) return null;\\n if (e.bitmap) {\\n e.refCounter += 1;\\n return e;\\n }\\n return e.file ? this.getFromFile(e.file) : this.getFromUrl(e.url);\\n }\\n getSvgUrl(t) {\\n const e = _classPrivateFieldGet(this, _N).get(t);\\n return e !== null && e !== void 0 && e.isSvg ? e.svgUrl : null;\\n }\\n deleteId(t) {\\n _classPrivateFieldGet(this, _N) || _classPrivateFieldSet(this, _N, new Map());\\n const e = _classPrivateFieldGet(this, _N).get(t);\\n if (e) {\\n e.refCounter -= 1;\\n 0 === e.refCounter && (e.bitmap = null);\\n }\\n }\\n isValidId(t) {\\n return t.startsWith(\\"image_\\".concat(_classPrivateFieldGet(this, _L), \\"_\\"));\\n }\\n }\\n async function _B2(t, e) {\\n var _n5;\\n _classPrivateFieldGet(this, _N) || _classPrivateFieldSet(this, _N, new Map());\\n let n = _classPrivateFieldGet(this, _N).get(t);\\n if (null === n) return null;\\n if ((_n5 = n) !== null && _n5 !== void 0 && _n5.bitmap) {\\n n.refCounter += 1;\\n return n;\\n }\\n try {\\n var _this$O3, _this$O4;\\n n || (n = {\\n bitmap: null,\\n id: \\"image_\\".concat(_classPrivateFieldGet(this, _L), \\"_\\").concat((_classPrivateFieldSet(this, _O2, (_this$O3 = _classPrivateFieldGet(this, _O2), _this$O4 = _this$O3++, _this$O3)), _this$O4)),\\n refCounter: 0,\\n isSvg: !1\\n });\\n let t;\\n if (\\"string\\" == typeof e) {\\n n.url = e;\\n const i = await fetch(e);\\n if (!i.ok) throw new Error(i.statusText);\\n t = await i.blob();\\n } else t = n.file = e;\\n if (\\"image/svg+xml\\" === t.type) {\\n const e = new FileReader(),\\n i = new Image(),\\n r = new Promise((t, r) => {\\n i.onload = () => {\\n n.bitmap = i;\\n n.isSvg = !0;\\n t();\\n };\\n e.onload = () => {\\n i.src = n.svgUrl = e.result;\\n };\\n i.onerror = e.onerror = r;\\n });\\n e.readAsDataURL(t);\\n await r;\\n } else n.bitmap = await createImageBitmap(t);\\n n.refCounter = 1;\\n } catch (t) {\\n console.error(t);\\n n = null;\\n }\\n _classPrivateFieldGet(this, _N).set(t, n);\\n n && _classPrivateFieldGet(this, _N).set(n.id, n);\\n return n;\\n }\\n var _j = /*#__PURE__*/new WeakMap();\\n var _U = /*#__PURE__*/new WeakMap();\\n var _z = /*#__PURE__*/new WeakMap();\\n var _H = /*#__PURE__*/new WeakMap();\\n class CommandManager {\\n constructor() {\\n _classPrivateFieldInitSpec(this, _j, {\\n writable: true,\\n value: []\\n });\\n _classPrivateFieldInitSpec(this, _U, {\\n writable: true,\\n value: !1\\n });\\n _classPrivateFieldInitSpec(this, _z, {\\n writable: true,\\n value: void 0\\n });\\n _classPrivateFieldInitSpec(this, _H, {\\n writable: true,\\n value: -1\\n });\\n let t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 128;\\n _classPrivateFieldSet(this, _z, t);\\n }\\n add(t) {\\n let {\\n cmd: e,\\n undo: n,\\n mustExec: i,\\n type: r = NaN,\\n overwriteIfSameType: s = !1,\\n keepUndo: a = !1\\n } = t;\\n i && e();\\n if (_classPrivateFieldGet(this, _U)) return;\\n const o = {\\n cmd: e,\\n undo: n,\\n type: r\\n };\\n if (-1 === _classPrivateFieldGet(this, _H)) {\\n _classPrivateFieldGet(this, _j).length > 0 && (_classPrivateFieldGet(this, _j).length = 0);\\n _classPrivateFieldSet(this, _H, 0);\\n _classPrivateFieldGet(this, _j).push(o);\\n return;\\n }\\n if (s && _classPrivateFieldGet(this, _j)[_classPrivateFieldGet(this, _H)].type === r) {\\n a && (o.undo = _classPrivateFieldGet(this, _j)[_classPrivateFieldGet(this, _H)].undo);\\n _classPrivateFieldGet(this, _j)[_classPrivateFieldGet(this, _H)] = o;\\n return;\\n }\\n const l = _classPrivateFieldGet(this, _H) + 1;\\n if (l === _classPrivateFieldGet(this, _z)) _classPrivateFieldGet(this, _j).splice(0, 1);else {\\n _classPrivateFieldSet(this, _H, l);\\n l < _classPrivateFieldGet(this, _j).length && _classPrivateFieldGet(this, _j).splice(l);\\n }\\n _classPrivateFieldGet(this, _j).push(o);\\n }\\n stopUndoAccumulation() {\\n -1 !== _classPrivateFieldGet(this, _H) && (_classPrivateFieldGet(this, _j)[_classPrivateFieldGet(this, _H)].type = NaN);\\n }\\n undo() {\\n if (-1 !== _classPrivateFieldGet(this, _H)) {\\n _classPrivateFieldSet(this, _U, !0);\\n _classPrivateFieldGet(this, _j)[_classPrivateFieldGet(this, _H)].undo();\\n _classPrivateFieldSet(this, _U, !1);\\n _classPrivateFieldSet(this, _H, _classPrivateFieldGet(this, _H) - 1);\\n }\\n }\\n redo() {\\n if (_classPrivateFieldGet(this, _H) < _classPrivateFieldGet(this, _j).length - 1) {\\n _classPrivateFieldSet(this, _H, _classPrivateFieldGet(this, _H) + 1);\\n _classPrivateFieldSet(this, _U, !0);\\n _classPrivateFieldGet(this, _j)[_classPrivateFieldGet(this, _H)].cmd();\\n _classPrivateFieldSet(this, _U, !1);\\n }\\n }\\n hasSomethingToUndo() {\\n return -1 !== _classPrivateFieldGet(this, _H);\\n }\\n hasSomethingToRedo() {\\n return _classPrivateFieldGet(this, _H) < _classPrivateFieldGet(this, _j).length - 1;\\n }\\n destroy() {\\n _classPrivateFieldSet(this, _j, null);\\n }\\n }\\n e.CommandManager = CommandManager;\\n var _q = /*#__PURE__*/new WeakSet();\\n class KeyboardManager {\\n constructor(_t5) {\\n _classPrivateMethodInitSpec(this, _q);\\n this.buffer = [];\\n this.callbacks = new Map();\\n this.allKeys = new Set();\\n const {\\n isMac: _e5\\n } = i.FeatureTest.platform;\\n for (const [n, i, r = {}] of _t5) for (const t of n) {\\n const n = t.startsWith(\\"mac+\\");\\n if (_e5 && n) {\\n this.callbacks.set(t.slice(4), {\\n callback: i,\\n options: r\\n });\\n this.allKeys.add(t.split(\\"+\\").at(-1));\\n } else if (!_e5 && !n) {\\n this.callbacks.set(t, {\\n callback: i,\\n options: r\\n });\\n this.allKeys.add(t.split(\\"+\\").at(-1));\\n }\\n }\\n }\\n exec(t, e) {\\n if (!this.allKeys.has(e.key)) return;\\n const n = this.callbacks.get(_classPrivateMethodGet(this, _q, _q2).call(this, e));\\n if (!n) return;\\n const {\\n callback: i,\\n options: {\\n bubbles: r = !1,\\n args: s = [],\\n checker: a = null\\n }\\n } = n;\\n if (!a || a(t, e)) {\\n i.bind(t, ...s)();\\n if (!r) {\\n e.stopPropagation();\\n e.preventDefault();\\n }\\n }\\n }\\n }\\n function _q2(t) {\\n t.altKey && this.buffer.push(\\"alt\\");\\n t.ctrlKey && this.buffer.push(\\"ctrl\\");\\n t.metaKey && this.buffer.push(\\"meta\\");\\n t.shiftKey && this.buffer.push(\\"shift\\");\\n this.buffer.push(t.key);\\n const e = this.buffer.join(\\"+\\");\\n this.buffer.length = 0;\\n return e;\\n }\\n e.KeyboardManager = KeyboardManager;\\n class ColorManager {\\n get _colors() {\\n const t = new Map([[\\"CanvasText\\", null], [\\"Canvas\\", null]]);\\n (0, r.getColorValues)(t);\\n return (0, i.shadow)(this, \\"_colors\\", t);\\n }\\n convert(t) {\\n const e = (0, r.getRGB)(t);\\n if (!window.matchMedia(\\"(forced-colors: active)\\").matches) return e;\\n for (const [t, n] of this._colors) if (n.every((t, n) => t === e[n])) return ColorManager._colorsMapping.get(t);\\n return e;\\n }\\n getHexCode(t) {\\n const e = this._colors.get(t);\\n return e ? i.Util.makeHexColor(...e) : t;\\n }\\n }\\n _defineProperty(ColorManager, \\"_colorsMapping\\", new Map([[\\"CanvasText\\", [0, 0, 0]], [\\"Canvas\\", [255, 255, 255]]]));\\n e.ColorManager = ColorManager;\\n var _W = /*#__PURE__*/new WeakMap();\\n var _G = /*#__PURE__*/new WeakMap();\\n var _V = /*#__PURE__*/new WeakMap();\\n var _$ = /*#__PURE__*/new WeakMap();\\n var _X = /*#__PURE__*/new WeakMap();\\n var _K = /*#__PURE__*/new WeakMap();\\n var _Y = /*#__PURE__*/new WeakMap();\\n var _J = /*#__PURE__*/new WeakMap();\\n var _Q = /*#__PURE__*/new WeakMap();\\n var _Z = /*#__PURE__*/new WeakMap();\\n var _tt = /*#__PURE__*/new WeakMap();\\n var _et = /*#__PURE__*/new WeakMap();\\n var _nt = /*#__PURE__*/new WeakMap();\\n var _it = /*#__PURE__*/new WeakMap();\\n var _rt = /*#__PURE__*/new WeakMap();\\n var _st = /*#__PURE__*/new WeakMap();\\n var _at = /*#__PURE__*/new WeakMap();\\n var _ot = /*#__PURE__*/new WeakMap();\\n var _lt = /*#__PURE__*/new WeakMap();\\n var _ct = /*#__PURE__*/new WeakMap();\\n var _ht = /*#__PURE__*/new WeakMap();\\n var _dt = /*#__PURE__*/new WeakMap();\\n var _ut = /*#__PURE__*/new WeakMap();\\n var _pt = /*#__PURE__*/new WeakMap();\\n var _ft = /*#__PURE__*/new WeakMap();\\n var _gt = /*#__PURE__*/new WeakMap();\\n var _mt = /*#__PURE__*/new WeakMap();\\n var _bt = /*#__PURE__*/new WeakMap();\\n var _yt = /*#__PURE__*/new WeakSet();\\n var _vt = /*#__PURE__*/new WeakSet();\\n var _At = /*#__PURE__*/new WeakSet();\\n var _t6 = /*#__PURE__*/new WeakSet();\\n var _xt = /*#__PURE__*/new WeakSet();\\n var _wt = /*#__PURE__*/new WeakSet();\\n var _Tt = /*#__PURE__*/new WeakSet();\\n var _Pt = /*#__PURE__*/new WeakSet();\\n var _St = /*#__PURE__*/new WeakSet();\\n var _Ct = /*#__PURE__*/new WeakSet();\\n var _Et = /*#__PURE__*/new WeakSet();\\n class AnnotationEditorUIManager {\\n static get _keyboardManager() {\\n const t = AnnotationEditorUIManager.prototype,\\n arrowChecker = t => {\\n const {\\n activeElement: e\\n } = document;\\n return e && _classPrivateFieldGet(t, _bt).contains(e) && t.hasSomethingToControl();\\n },\\n e = this.TRANSLATE_SMALL,\\n n = this.TRANSLATE_BIG;\\n return (0, i.shadow)(this, \\"_keyboardManager\\", new KeyboardManager([[[\\"ctrl+a\\", \\"mac+meta+a\\"], t.selectAll], [[\\"ctrl+z\\", \\"mac+meta+z\\"], t.undo], [[\\"ctrl+y\\", \\"ctrl+shift+z\\", \\"mac+meta+shift+z\\", \\"ctrl+shift+Z\\", \\"mac+meta+shift+Z\\"], t.redo], [[\\"Backspace\\", \\"alt+Backspace\\", \\"ctrl+Backspace\\", \\"shift+Backspace\\", \\"mac+Backspace\\", \\"mac+alt+Backspace\\", \\"mac+ctrl+Backspace\\", \\"Delete\\", \\"ctrl+Delete\\", \\"shift+Delete\\", \\"mac+Delete\\"], t.delete], [[\\"Escape\\", \\"mac+Escape\\"], t.unselectAll], [[\\"ArrowLeft\\", \\"mac+ArrowLeft\\"], t.translateSelectedEditors, {\\n args: [-e, 0],\\n checker: arrowChecker\\n }], [[\\"ctrl+ArrowLeft\\", \\"mac+shift+ArrowLeft\\"], t.translateSelectedEditors, {\\n args: [-n, 0],\\n checker: arrowChecker\\n }], [[\\"ArrowRight\\", \\"mac+ArrowRight\\"], t.translateSelectedEditors, {\\n args: [e, 0],\\n checker: arrowChecker\\n }], [[\\"ctrl+ArrowRight\\", \\"mac+shift+ArrowRight\\"], t.translateSelectedEditors, {\\n args: [n, 0],\\n checker: arrowChecker\\n }], [[\\"ArrowUp\\", \\"mac+ArrowUp\\"], t.translateSelectedEditors, {\\n args: [0, -e],\\n checker: arrowChecker\\n }], [[\\"ctrl+ArrowUp\\", \\"mac+shift+ArrowUp\\"], t.translateSelectedEditors, {\\n args: [0, -n],\\n checker: arrowChecker\\n }], [[\\"ArrowDown\\", \\"mac+ArrowDown\\"], t.translateSelectedEditors, {\\n args: [0, e],\\n checker: arrowChecker\\n }], [[\\"ctrl+ArrowDown\\", \\"mac+shift+ArrowDown\\"], t.translateSelectedEditors, {\\n args: [0, n],\\n checker: arrowChecker\\n }]]));\\n }\\n constructor(_t8, _e6, _n4, _i3) {\\n _classPrivateMethodInitSpec(this, _Et);\\n _classPrivateMethodInitSpec(this, _Ct);\\n _classPrivateMethodInitSpec(this, _St);\\n _classPrivateMethodInitSpec(this, _Pt);\\n _classPrivateMethodInitSpec(this, _Tt);\\n _classPrivateMethodInitSpec(this, _wt);\\n _classPrivateMethodInitSpec(this, _xt);\\n _classPrivateMethodInitSpec(this, _t6);\\n _classPrivateMethodInitSpec(this, _At);\\n _classPrivateMethodInitSpec(this, _vt);\\n _classPrivateMethodInitSpec(this, _yt);\\n _classPrivateFieldInitSpec(this, _W, {\\n writable: true,\\n value: null\\n });\\n _classPrivateFieldInitSpec(this, _G, {\\n writable: true,\\n value: new Map()\\n });\\n _classPrivateFieldInitSpec(this, _V, {\\n writable: true,\\n value: new Map()\\n });\\n _classPrivateFieldInitSpec(this, _$, {\\n writable: true,\\n value: null\\n });\\n _classPrivateFieldInitSpec(this, _X, {\\n writable: true,\\n value: new CommandManager()\\n });\\n _classPrivateFieldInitSpec(this, _K, {\\n writable: true,\\n value: 0\\n });\\n _classPrivateFieldInitSpec(this, _Y, {\\n writable: true,\\n value: new Set()\\n });\\n _classPrivateFieldInitSpec(this, _J, {\\n writable: true,\\n value: null\\n });\\n _classPrivateFieldInitSpec(this, _Q, {\\n writable: true,\\n value: new Set()\\n });\\n _classPrivateFieldInitSpec(this, _Z, {\\n writable: true,\\n value: null\\n });\\n _classPrivateFieldInitSpec(this, _tt, {\\n writable: true,\\n value: null\\n });\\n _classPrivateFieldInitSpec(this, _et, {\\n writable: true,\\n value: new IdManager()\\n });\\n _classPrivateFieldInitSpec(this, _nt, {\\n writable: true,\\n value: !1\\n });\\n _classPrivateFieldInitSpec(this, _it, {\\n writable: true,\\n value: i.AnnotationEditorType.NONE\\n });\\n _classPrivateFieldInitSpec(this, _rt, {\\n writable: true,\\n value: new Set()\\n });\\n _classPrivateFieldInitSpec(this, _st, {\\n writable: true,\\n value: null\\n });\\n _classPrivateFieldInitSpec(this, _at, {\\n writable: true,\\n value: this.copy.bind(this)\\n });\\n _classPrivateFieldInitSpec(this, _ot, {\\n writable: true,\\n value: this.cut.bind(this)\\n });\\n _classPrivateFieldInitSpec(this, _lt, {\\n writable: true,\\n value: this.paste.bind(this)\\n });\\n _classPrivateFieldInitSpec(this, _ct, {\\n writable: true,\\n value: this.keydown.bind(this)\\n });\\n _classPrivateFieldInitSpec(this, _ht, {\\n writable: true,\\n value: this.onEditingAction.bind(this)\\n });\\n _classPrivateFieldInitSpec(this, _dt, {\\n writable: true,\\n value: this.onPageChanging.bind(this)\\n });\\n _classPrivateFieldInitSpec(this, _ut, {\\n writable: true,\\n value: this.onScaleChanging.bind(this)\\n });\\n _classPrivateFieldInitSpec(this, _pt, {\\n writable: true,\\n value: this.onRotationChanging.bind(this)\\n });\\n _classPrivateFieldInitSpec(this, _ft, {\\n writable: true,\\n value: {\\n isEditing: !1,\\n isEmpty: !0,\\n hasSomethingToUndo: !1,\\n hasSomethingToRedo: !1,\\n hasSelectedEditor: !1\\n }\\n });\\n _classPrivateFieldInitSpec(this, _gt, {\\n writable: true,\\n value: [0, 0]\\n });\\n _classPrivateFieldInitSpec(this, _mt, {\\n writable: true,\\n value: null\\n });\\n _classPrivateFieldInitSpec(this, _bt, {\\n writable: true,\\n value: null\\n });\\n _classPrivateFieldSet(this, _bt, _t8);\\n _classPrivateFieldSet(this, _Z, _e6);\\n _classPrivateFieldGet(this, _Z)._on(\\"editingaction\\", _classPrivateFieldGet(this, _ht));\\n _classPrivateFieldGet(this, _Z)._on(\\"pagechanging\\", _classPrivateFieldGet(this, _dt));\\n _classPrivateFieldGet(this, _Z)._on(\\"scalechanging\\", _classPrivateFieldGet(this, _ut));\\n _classPrivateFieldGet(this, _Z)._on(\\"rotationchanging\\", _classPrivateFieldGet(this, _pt));\\n _classPrivateFieldSet(this, _$, _n4.annotationStorage);\\n _classPrivateFieldSet(this, _tt, _n4.filterFactory);\\n _classPrivateFieldSet(this, _st, _i3);\\n this.viewParameters = {\\n realScale: r.PixelsPerInch.PDF_TO_CSS_UNITS,\\n rotation: 0\\n };\\n }\\n destroy() {\\n _classPrivateMethodGet(this, _vt, _vt2).call(this);\\n _classPrivateFieldGet(this, _Z)._off(\\"editingaction\\", _classPrivateFieldGet(this, _ht));\\n _classPrivateFieldGet(this, _Z)._off(\\"pagechanging\\", _classPrivateFieldGet(this, _dt));\\n _classPrivateFieldGet(this, _Z)._off(\\"scalechanging\\", _classPrivateFieldGet(this, _ut));\\n _classPrivateFieldGet(this, _Z)._off(\\"rotationchanging\\", _classPrivateFieldGet(this, _pt));\\n for (const t of _classPrivateFieldGet(this, _V).values()) t.destroy();\\n _classPrivateFieldGet(this, _V).clear();\\n _classPrivateFieldGet(this, _G).clear();\\n _classPrivateFieldGet(this, _Q).clear();\\n _classPrivateFieldSet(this, _W, null);\\n _classPrivateFieldGet(this, _rt).clear();\\n _classPrivateFieldGet(this, _X).destroy();\\n }\\n get hcmFilter() {\\n return (0, i.shadow)(this, \\"hcmFilter\\", _classPrivateFieldGet(this, _st) ? _classPrivateFieldGet(this, _tt).addHCMFilter(_classPrivateFieldGet(this, _st).foreground, _classPrivateFieldGet(this, _st).background) : \\"none\\");\\n }\\n onPageChanging(t) {\\n let {\\n pageNumber: e\\n } = t;\\n _classPrivateFieldSet(this, _K, e - 1);\\n }\\n focusMainContainer() {\\n _classPrivateFieldGet(this, _bt).focus();\\n }\\n addShouldRescale(t) {\\n _classPrivateFieldGet(this, _Q).add(t);\\n }\\n removeShouldRescale(t) {\\n _classPrivateFieldGet(this, _Q).delete(t);\\n }\\n onScaleChanging(t) {\\n let {\\n scale: e\\n } = t;\\n this.commitOrRemove();\\n this.viewParameters.realScale = e * r.PixelsPerInch.PDF_TO_CSS_UNITS;\\n for (const t of _classPrivateFieldGet(this, _Q)) t.onScaleChanging();\\n }\\n onRotationChanging(t) {\\n let {\\n pagesRotation: e\\n } = t;\\n this.commitOrRemove();\\n this.viewParameters.rotation = e;\\n }\\n addToAnnotationStorage(t) {\\n t.isEmpty() || !_classPrivateFieldGet(this, _$) || _classPrivateFieldGet(this, _$).has(t.id) || _classPrivateFieldGet(this, _$).setValue(t.id, t);\\n }\\n copy(t) {\\n t.preventDefault();\\n _classPrivateFieldGet(this, _W) && _classPrivateFieldGet(this, _W).commitOrRemove();\\n if (!this.hasSelection) return;\\n const e = [];\\n for (const t of _classPrivateFieldGet(this, _rt)) {\\n const n = t.serialize(!0);\\n n && e.push(n);\\n }\\n 0 !== e.length && t.clipboardData.setData(\\"application/pdfjs\\", JSON.stringify(e));\\n }\\n cut(t) {\\n this.copy(t);\\n this.delete();\\n }\\n paste(t) {\\n t.preventDefault();\\n let e = t.clipboardData.getData(\\"application/pdfjs\\");\\n if (!e) return;\\n try {\\n e = JSON.parse(e);\\n } catch (t) {\\n (0, i.warn)(\\"paste: \\\\\\"\\".concat(t.message, \\"\\\\\\".\\"));\\n return;\\n }\\n if (!Array.isArray(e)) return;\\n this.unselectAll();\\n const n = this.currentLayer;\\n try {\\n const t = [];\\n for (const i of e) {\\n const e = n.deserialize(i);\\n if (!e) return;\\n t.push(e);\\n }\\n const cmd = () => {\\n for (const e of t) _classPrivateMethodGet(this, _St, _St2).call(this, e);\\n _classPrivateMethodGet(this, _Et, _Et2).call(this, t);\\n },\\n undo = () => {\\n for (const e of t) e.remove();\\n };\\n this.addCommands({\\n cmd: cmd,\\n undo: undo,\\n mustExec: !0\\n });\\n } catch (t) {\\n (0, i.warn)(\\"paste: \\\\\\"\\".concat(t.message, \\"\\\\\\".\\"));\\n }\\n }\\n keydown(t) {\\n var _this$getActive;\\n ((_this$getActive = this.getActive()) === null || _this$getActive === void 0 ? void 0 : _this$getActive.shouldGetKeyboardEvents()) || AnnotationEditorUIManager._keyboardManager.exec(this, t);\\n }\\n onEditingAction(t) {\\n [\\"undo\\", \\"redo\\", \\"delete\\", \\"selectAll\\"].includes(t.name) && this[t.name]();\\n }\\n setEditingState(t) {\\n if (t) {\\n _classPrivateMethodGet(this, _yt, _yt2).call(this);\\n _classPrivateMethodGet(this, _At, _At2).call(this);\\n _classPrivateMethodGet(this, _xt, _xt2).call(this, {\\n isEditing: _classPrivateFieldGet(this, _it) !== i.AnnotationEditorType.NONE,\\n isEmpty: _classPrivateMethodGet(this, _Ct, _Ct2).call(this),\\n hasSomethingToUndo: _classPrivateFieldGet(this, _X).hasSomethingToUndo(),\\n hasSomethingToRedo: _classPrivateFieldGet(this, _X).hasSomethingToRedo(),\\n hasSelectedEditor: !1\\n });\\n } else {\\n _classPrivateMethodGet(this, _vt, _vt2).call(this);\\n _classPrivateMethodGet(this, _t6, _t7).call(this);\\n _classPrivateMethodGet(this, _xt, _xt2).call(this, {\\n isEditing: !1\\n });\\n }\\n }\\n registerEditorTypes(t) {\\n if (!_classPrivateFieldGet(this, _J)) {\\n _classPrivateFieldSet(this, _J, t);\\n for (const t of _classPrivateFieldGet(this, _J)) _classPrivateMethodGet(this, _wt, _wt2).call(this, t.defaultPropertiesToUpdate);\\n }\\n }\\n getId() {\\n return _classPrivateFieldGet(this, _et).getId();\\n }\\n get currentLayer() {\\n return _classPrivateFieldGet(this, _V).get(_classPrivateFieldGet(this, _K));\\n }\\n get currentPageIndex() {\\n return _classPrivateFieldGet(this, _K);\\n }\\n addLayer(t) {\\n _classPrivateFieldGet(this, _V).set(t.pageIndex, t);\\n _classPrivateFieldGet(this, _nt) ? t.enable() : t.disable();\\n }\\n removeLayer(t) {\\n _classPrivateFieldGet(this, _V).delete(t.pageIndex);\\n }\\n updateMode(t) {\\n let e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null;\\n _classPrivateFieldSet(this, _it, t);\\n if (t !== i.AnnotationEditorType.NONE) {\\n this.setEditingState(!0);\\n _classPrivateMethodGet(this, _Tt, _Tt2).call(this);\\n for (const e of _classPrivateFieldGet(this, _V).values()) e.updateMode(t);\\n if (e) for (const t of _classPrivateFieldGet(this, _G).values()) if (t.annotationElementId === e) {\\n this.setSelected(t);\\n t.enterInEditMode();\\n break;\\n }\\n } else {\\n this.setEditingState(!1);\\n _classPrivateMethodGet(this, _Pt, _Pt2).call(this);\\n }\\n }\\n updateToolbar(t) {\\n t !== _classPrivateFieldGet(this, _it) && _classPrivateFieldGet(this, _Z).dispatch(\\"switchannotationeditormode\\", {\\n source: this,\\n mode: t\\n });\\n }\\n updateParams(t, e) {\\n if (_classPrivateFieldGet(this, _J)) {\\n for (const n of _classPrivateFieldGet(this, _rt)) n.updateParams(t, e);\\n for (const n of _classPrivateFieldGet(this, _J)) n.updateDefaultParams(t, e);\\n }\\n }\\n getEditors(t) {\\n const e = [];\\n for (const n of _classPrivateFieldGet(this, _G).values()) n.pageIndex === t && e.push(n);\\n return e;\\n }\\n getEditor(t) {\\n return _classPrivateFieldGet(this, _G).get(t);\\n }\\n addEditor(t) {\\n _classPrivateFieldGet(this, _G).set(t.id, t);\\n }\\n removeEditor(t) {\\n var _classPrivateFieldGet4;\\n _classPrivateFieldGet(this, _G).delete(t.id);\\n this.unselect(t);\\n t.annotationElementId && _classPrivateFieldGet(this, _Y).has(t.annotationElementId) || ((_classPrivateFieldGet4 = _classPrivateFieldGet(this, _$)) === null || _classPrivateFieldGet4 === void 0 ? void 0 : _classPrivateFieldGet4.remove(t.id));\\n }\\n addDeletedAnnotationElement(t) {\\n _classPrivateFieldGet(this, _Y).add(t.annotationElementId);\\n t.deleted = !0;\\n }\\n isDeletedAnnotationElement(t) {\\n return _classPrivateFieldGet(this, _Y).has(t);\\n }\\n removeDeletedAnnotationElement(t) {\\n _classPrivateFieldGet(this, _Y).delete(t.annotationElementId);\\n t.deleted = !1;\\n }\\n setActiveEditor(t) {\\n if (_classPrivateFieldGet(this, _W) !== t) {\\n _classPrivateFieldSet(this, _W, t);\\n t && _classPrivateMethodGet(this, _wt, _wt2).call(this, t.propertiesToUpdate);\\n }\\n }\\n toggleSelected(t) {\\n if (_classPrivateFieldGet(this, _rt).has(t)) {\\n _classPrivateFieldGet(this, _rt).delete(t);\\n t.unselect();\\n _classPrivateMethodGet(this, _xt, _xt2).call(this, {\\n hasSelectedEditor: this.hasSelection\\n });\\n } else {\\n _classPrivateFieldGet(this, _rt).add(t);\\n t.select();\\n _classPrivateMethodGet(this, _wt, _wt2).call(this, t.propertiesToUpdate);\\n _classPrivateMethodGet(this, _xt, _xt2).call(this, {\\n hasSelectedEditor: !0\\n });\\n }\\n }\\n setSelected(t) {\\n for (const e of _classPrivateFieldGet(this, _rt)) e !== t && e.unselect();\\n _classPrivateFieldGet(this, _rt).clear();\\n _classPrivateFieldGet(this, _rt).add(t);\\n t.select();\\n _classPrivateMethodGet(this, _wt, _wt2).call(this, t.propertiesToUpdate);\\n _classPrivateMethodGet(this, _xt, _xt2).call(this, {\\n hasSelectedEditor: !0\\n });\\n }\\n isSelected(t) {\\n return _classPrivateFieldGet(this, _rt).has(t);\\n }\\n unselect(t) {\\n t.unselect();\\n _classPrivateFieldGet(this, _rt).delete(t);\\n _classPrivateMethodGet(this, _xt, _xt2).call(this, {\\n hasSelectedEditor: this.hasSelection\\n });\\n }\\n get hasSelection() {\\n return 0 !== _classPrivateFieldGet(this, _rt).size;\\n }\\n stopUndoAccumulation() {\\n _classPrivateFieldGet(this, _X).stopUndoAccumulation();\\n }\\n undo() {\\n _classPrivateFieldGet(this, _X).undo();\\n _classPrivateMethodGet(this, _xt, _xt2).call(this, {\\n hasSomethingToUndo: _classPrivateFieldGet(this, _X).hasSomethingToUndo(),\\n hasSomethingToRedo: !0,\\n isEmpty: _classPrivateMethodGet(this, _Ct, _Ct2).call(this)\\n });\\n }\\n redo() {\\n _classPrivateFieldGet(this, _X).redo();\\n _classPrivateMethodGet(this, _xt, _xt2).call(this, {\\n hasSomethingToUndo: !0,\\n hasSomethingToRedo: _classPrivateFieldGet(this, _X).hasSomethingToRedo(),\\n isEmpty: _classPrivateMethodGet(this, _Ct, _Ct2).call(this)\\n });\\n }\\n addCommands(t) {\\n _classPrivateFieldGet(this, _X).add(t);\\n _classPrivateMethodGet(this, _xt, _xt2).call(this, {\\n hasSomethingToUndo: !0,\\n hasSomethingToRedo: !1,\\n isEmpty: _classPrivateMethodGet(this, _Ct, _Ct2).call(this)\\n });\\n }\\n delete() {\\n this.commitOrRemove();\\n if (!this.hasSelection) return;\\n const t = [..._classPrivateFieldGet(this, _rt)];\\n this.addCommands({\\n cmd: () => {\\n for (const e of t) e.remove();\\n },\\n undo: () => {\\n for (const e of t) _classPrivateMethodGet(this, _St, _St2).call(this, e);\\n },\\n mustExec: !0\\n });\\n }\\n commitOrRemove() {\\n var _classPrivateFieldGet5;\\n (_classPrivateFieldGet5 = _classPrivateFieldGet(this, _W)) === null || _classPrivateFieldGet5 === void 0 ? void 0 : _classPrivateFieldGet5.commitOrRemove();\\n }\\n hasSomethingToControl() {\\n return _classPrivateFieldGet(this, _W) || this.hasSelection;\\n }\\n selectAll() {\\n for (const t of _classPrivateFieldGet(this, _rt)) t.commit();\\n _classPrivateMethodGet(this, _Et, _Et2).call(this, _classPrivateFieldGet(this, _G).values());\\n }\\n unselectAll() {\\n if (_classPrivateFieldGet(this, _W)) _classPrivateFieldGet(this, _W).commitOrRemove();else if (this.hasSelection) {\\n for (const t of _classPrivateFieldGet(this, _rt)) t.unselect();\\n _classPrivateFieldGet(this, _rt).clear();\\n _classPrivateMethodGet(this, _xt, _xt2).call(this, {\\n hasSelectedEditor: !1\\n });\\n }\\n }\\n translateSelectedEditors(t, e) {\\n arguments.length > 2 && void 0 !== arguments[2] && arguments[2] || this.commitOrRemove();\\n if (!this.hasSelection) return;\\n _classPrivateFieldGet(this, _gt)[0] += t;\\n _classPrivateFieldGet(this, _gt)[1] += e;\\n const [n, i] = _classPrivateFieldGet(this, _gt),\\n r = [..._classPrivateFieldGet(this, _rt)];\\n _classPrivateFieldGet(this, _mt) && clearTimeout(_classPrivateFieldGet(this, _mt));\\n _classPrivateFieldSet(this, _mt, setTimeout(() => {\\n _classPrivateFieldSet(this, _mt, null);\\n _classPrivateFieldGet(this, _gt)[0] = _classPrivateFieldGet(this, _gt)[1] = 0;\\n this.addCommands({\\n cmd: () => {\\n for (const t of r) _classPrivateFieldGet(this, _G).has(t.id) && t.translateInPage(n, i);\\n },\\n undo: () => {\\n for (const t of r) _classPrivateFieldGet(this, _G).has(t.id) && t.translateInPage(-n, -i);\\n },\\n mustExec: !1\\n });\\n }, 1e3));\\n for (const n of r) n.translateInPage(t, e);\\n }\\n isActive(t) {\\n return _classPrivateFieldGet(this, _W) === t;\\n }\\n getActive() {\\n return _classPrivateFieldGet(this, _W);\\n }\\n getMode() {\\n return _classPrivateFieldGet(this, _it);\\n }\\n get imageManager() {\\n return (0, i.shadow)(this, \\"imageManager\\", new ImageManager());\\n }\\n }\\n function _yt2() {\\n window.addEventListener(\\"keydown\\", _classPrivateFieldGet(this, _ct), {\\n capture: !0\\n });\\n }\\n function _vt2() {\\n window.removeEventListener(\\"keydown\\", _classPrivateFieldGet(this, _ct), {\\n capture: !0\\n });\\n }\\n function _At2() {\\n document.addEventListener(\\"copy\\", _classPrivateFieldGet(this, _at));\\n document.addEventListener(\\"cut\\", _classPrivateFieldGet(this, _ot));\\n document.addEventListener(\\"paste\\", _classPrivateFieldGet(this, _lt));\\n }\\n function _t7() {\\n document.removeEventListener(\\"copy\\", _classPrivateFieldGet(this, _at));\\n document.removeEventListener(\\"cut\\", _classPrivateFieldGet(this, _ot));\\n document.removeEventListener(\\"paste\\", _classPrivateFieldGet(this, _lt));\\n }\\n function _xt2(t) {\\n Object.entries(t).some(t => {\\n let [e, n] = t;\\n return _classPrivateFieldGet(this, _ft)[e] !== n;\\n }) && _classPrivateFieldGet(this, _Z).dispatch(\\"annotationeditorstateschanged\\", {\\n source: this,\\n details: Object.assign(_classPrivateFieldGet(this, _ft), t)\\n });\\n }\\n function _wt2(t) {\\n _classPrivateFieldGet(this, _Z).dispatch(\\"annotationeditorparamschanged\\", {\\n source: this,\\n details: t\\n });\\n }\\n function _Tt2() {\\n if (!_classPrivateFieldGet(this, _nt)) {\\n _classPrivateFieldSet(this, _nt, !0);\\n for (const t of _classPrivateFieldGet(this, _V).values()) t.enable();\\n }\\n }\\n function _Pt2() {\\n this.unselectAll();\\n if (_classPrivateFieldGet(this, _nt)) {\\n _classPrivateFieldSet(this, _nt, !1);\\n for (const t of _classPrivateFieldGet(this, _V).values()) t.disable();\\n }\\n }\\n function _St2(t) {\\n const e = _classPrivateFieldGet(this, _V).get(t.pageIndex);\\n e ? e.addOrRebuild(t) : this.addEditor(t);\\n }\\n function _Ct2() {\\n if (0 === _classPrivateFieldGet(this, _G).size) return !0;\\n if (1 === _classPrivateFieldGet(this, _G).size) for (const t of _classPrivateFieldGet(this, _G).values()) return t.isEmpty();\\n return !1;\\n }\\n function _Et2(t) {\\n _classPrivateFieldGet(this, _rt).clear();\\n for (const e of t) if (!e.isEmpty()) {\\n _classPrivateFieldGet(this, _rt).add(e);\\n e.select();\\n }\\n _classPrivateMethodGet(this, _xt, _xt2).call(this, {\\n hasSelectedEditor: !0\\n });\\n }\\n _defineProperty(AnnotationEditorUIManager, \\"TRANSLATE_SMALL\\", 1);\\n _defineProperty(AnnotationEditorUIManager, \\"TRANSLATE_BIG\\", 10);\\n e.AnnotationEditorUIManager = AnnotationEditorUIManager;\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n var i = n(3),\\n r = n(6),\\n s = n(4),\\n a = n(24),\\n o = n(14),\\n l = n(8),\\n c = n(21),\\n h = n(20),\\n d = n(91),\\n u = n(39),\\n p = n(77),\\n f = n(64),\\n g = n(158),\\n m = n(7),\\n b = n(166),\\n v = n(27),\\n y = s.JSON,\\n A = s.Number,\\n _ = s.SyntaxError,\\n S = y && y.parse,\\n E = a(\\"Object\\", \\"keys\\"),\\n x = Object.getOwnPropertyDescriptor,\\n w = o(\\"\\".charAt),\\n C = o(\\"\\".slice),\\n T = o(/./.exec),\\n P = o([].push),\\n k = /^\\\\d$/,\\n M = /^[1-9]$/,\\n R = /^(-|\\\\d)$/,\\n I = /^[\\\\t\\\\n\\\\r ]$/,\\n internalize = function internalize(t, e, n, i) {\\n var r,\\n s,\\n a,\\n o,\\n c,\\n p = t[e],\\n g = i && p === i.value,\\n m = g && \\"string\\" == typeof i.source ? {\\n source: i.source\\n } : {};\\n if (h(p)) {\\n var b = d(p),\\n v = g ? i.nodes : b ? [] : {};\\n if (b) {\\n r = v.length;\\n a = f(p);\\n for (o = 0; o < a; o++) internalizeProperty(p, o, internalize(p, \\"\\" + o, n, o < r ? v[o] : void 0));\\n } else {\\n s = E(p);\\n a = f(s);\\n for (o = 0; o < a; o++) {\\n c = s[o];\\n internalizeProperty(p, c, internalize(p, c, n, u(v, c) ? v[c] : void 0));\\n }\\n }\\n }\\n return l(n, t, e, p, m);\\n },\\n internalizeProperty = function internalizeProperty(t, e, n) {\\n if (r) {\\n var i = x(t, e);\\n if (i && !i.configurable) return;\\n }\\n void 0 === n ? delete t[e] : g(t, e, n);\\n },\\n Node = function Node(t, e, n, i) {\\n this.value = t;\\n this.end = e;\\n this.source = n;\\n this.nodes = i;\\n },\\n Context = function Context(t, e) {\\n this.source = t;\\n this.index = e;\\n };\\n Context.prototype = {\\n fork: function fork(t) {\\n return new Context(this.source, t);\\n },\\n parse: function parse() {\\n var t = this.source,\\n e = this.skip(I, this.index),\\n n = this.fork(e),\\n i = w(t, e);\\n if (T(R, i)) return n.number();\\n switch (i) {\\n case \\"{\\":\\n return n.object();\\n case \\"[\\":\\n return n.array();\\n case '\\"':\\n return n.string();\\n case \\"t\\":\\n return n.keyword(!0);\\n case \\"f\\":\\n return n.keyword(!1);\\n case \\"n\\":\\n return n.keyword(null);\\n }\\n throw _('Unexpected character: \\"' + i + '\\" at: ' + e);\\n },\\n node: function node(t, e, n, i, r) {\\n return new Node(e, i, t ? null : C(this.source, n, i), r);\\n },\\n object: function object() {\\n for (var t = this.source, e = this.index + 1, n = !1, i = {}, r = {}; e < t.length;) {\\n e = this.until(['\\"', \\"}\\"], e);\\n if (\\"}\\" == w(t, e) && !n) {\\n e++;\\n break;\\n }\\n var s = this.fork(e).string(),\\n a = s.value;\\n e = s.end;\\n e = this.until([\\":\\"], e) + 1;\\n e = this.skip(I, e);\\n s = this.fork(e).parse();\\n g(r, a, s);\\n g(i, a, s.value);\\n e = this.until([\\",\\", \\"}\\"], s.end);\\n var o = w(t, e);\\n if (\\",\\" == o) {\\n n = !0;\\n e++;\\n } else if (\\"}\\" == o) {\\n e++;\\n break;\\n }\\n }\\n return this.node(1, i, this.index, e, r);\\n },\\n array: function array() {\\n for (var t = this.source, e = this.index + 1, n = !1, i = [], r = []; e < t.length;) {\\n e = this.skip(I, e);\\n if (\\"]\\" == w(t, e) && !n) {\\n e++;\\n break;\\n }\\n var s = this.fork(e).parse();\\n P(r, s);\\n P(i, s.value);\\n e = this.until([\\",\\", \\"]\\"], s.end);\\n if (\\",\\" == w(t, e)) {\\n n = !0;\\n e++;\\n } else if (\\"]\\" == w(t, e)) {\\n e++;\\n break;\\n }\\n }\\n return this.node(1, i, this.index, e, r);\\n },\\n string: function string() {\\n var t = this.index,\\n e = b(this.source, this.index + 1);\\n return this.node(0, e.value, t, e.end);\\n },\\n number: function number() {\\n var t = this.source,\\n e = this.index,\\n n = e;\\n \\"-\\" == w(t, n) && n++;\\n if (\\"0\\" == w(t, n)) n++;else {\\n if (!T(M, w(t, n))) throw _(\\"Failed to parse number at: \\" + n);\\n n = this.skip(k, ++n);\\n }\\n \\".\\" == w(t, n) && (n = this.skip(k, ++n));\\n if (\\"e\\" == w(t, n) || \\"E\\" == w(t, n)) {\\n n++;\\n \\"+\\" != w(t, n) && \\"-\\" != w(t, n) || n++;\\n if (n == (n = this.skip(k, n))) throw _(\\"Failed to parse number's exponent value at: \\" + n);\\n }\\n return this.node(0, A(C(t, e, n)), e, n);\\n },\\n keyword: function keyword(t) {\\n var e = \\"\\" + t,\\n n = this.index,\\n i = n + e.length;\\n if (C(this.source, n, i) != e) throw _(\\"Failed to parse value at: \\" + n);\\n return this.node(0, t, n, i);\\n },\\n skip: function skip(t, e) {\\n for (var n = this.source; e < n.length && T(t, w(n, e)); e++);\\n return e;\\n },\\n until: function until(t, e) {\\n e = this.skip(I, e);\\n for (var n = w(this.source, e), i = 0; i < t.length; i++) if (t[i] == n) return e;\\n throw _('Unexpected character: \\"' + n + '\\" at: ' + e);\\n }\\n };\\n var D = m(function () {\\n var t,\\n e = \\"9007199254740993\\";\\n S(e, function (e, n, i) {\\n t = i.source;\\n });\\n return t !== e;\\n }),\\n O = v && !m(function () {\\n return 1 / S(\\"-0 \\\\t\\") != -1 / 0;\\n });\\n i({\\n target: \\"JSON\\",\\n stat: !0,\\n forced: D\\n }, {\\n parse: function parse(t, e) {\\n return O && !c(e) ? S(t) : function (t, e) {\\n t = p(t);\\n var n = new Context(t, 0, \\"\\"),\\n i = n.parse(),\\n r = i.value,\\n s = n.skip(I, i.end);\\n if (s < t.length) throw _('Unexpected extra character: \\"' + w(t, s) + '\\" after the parsed data at: ' + s);\\n return c(e) ? internalize({\\n \\"\\": r\\n }, \\"\\", e, i) : r;\\n }(t, e);\\n }\\n });\\n }, (t, e, n) => {\\n var i = n(14),\\n r = n(39),\\n s = SyntaxError,\\n a = parseInt,\\n o = String.fromCharCode,\\n l = i(\\"\\".charAt),\\n c = i(\\"\\".slice),\\n h = i(/./.exec),\\n d = {\\n '\\\\\\\\\\"': '\\"',\\n \\"\\\\\\\\\\\\\\\\\\": \\"\\\\\\\\\\",\\n \\"\\\\\\\\/\\": \\"/\\",\\n \\"\\\\\\\\b\\": \\"\\\\b\\",\\n \\"\\\\\\\\f\\": \\"\\\\f\\",\\n \\"\\\\\\\\n\\": \\"\\\\n\\",\\n \\"\\\\\\\\r\\": \\"\\\\r\\",\\n \\"\\\\\\\\t\\": \\"\\\\t\\"\\n },\\n u = /^[\\\\da-f]{4}$/i,\\n p = /^[\\\\u0000-\\\\u001F]$/;\\n t.exports = function (t, e) {\\n for (var n = !0, i = \\"\\"; e < t.length;) {\\n var f = l(t, e);\\n if (\\"\\\\\\\\\\" == f) {\\n var g = c(t, e, e + 2);\\n if (r(d, g)) {\\n i += d[g];\\n e += 2;\\n } else {\\n if (\\"\\\\\\\\u\\" != g) throw s('Unknown escape sequence: \\"' + g + '\\"');\\n var m = c(t, e += 2, e + 4);\\n if (!h(u, m)) throw s(\\"Bad Unicode escape at: \\" + e);\\n i += o(a(m, 16));\\n e += 4;\\n }\\n } else {\\n if ('\\"' == f) {\\n n = !1;\\n e++;\\n break;\\n }\\n if (h(p, f)) throw s(\\"Bad control character in string literal at: \\" + e);\\n i += f;\\n e++;\\n }\\n }\\n if (n) throw s(\\"Unterminated string at: \\" + e);\\n return {\\n value: i,\\n end: e\\n };\\n };\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n var _class19;\\n Object.defineProperty(e, \\"__esModule\\", {\\n value: !0\\n });\\n e.StatTimer = e.RenderingCancelledException = e.PixelsPerInch = e.PageViewport = e.PDFDateString = e.DOMStandardFontDataFactory = e.DOMSVGFactory = e.DOMFilterFactory = e.DOMCanvasFactory = e.DOMCMapReaderFactory = e.AnnotationPrefix = void 0;\\n e.deprecated = function deprecated(t) {\\n console.log(\\"Deprecated API usage: \\" + t);\\n };\\n e.getColorValues = function getColorValues(t) {\\n const e = document.createElement(\\"span\\");\\n e.style.visibility = \\"hidden\\";\\n document.body.append(e);\\n for (const n of t.keys()) {\\n e.style.color = n;\\n const i = window.getComputedStyle(e).color;\\n t.set(n, getRGB(i));\\n }\\n e.remove();\\n };\\n e.getCurrentTransform = function getCurrentTransform(t) {\\n const {\\n a: e,\\n b: n,\\n c: i,\\n d: r,\\n e: s,\\n f: a\\n } = t.getTransform();\\n return [e, n, i, r, s, a];\\n };\\n e.getCurrentTransformInverse = function getCurrentTransformInverse(t) {\\n const {\\n a: e,\\n b: n,\\n c: i,\\n d: r,\\n e: s,\\n f: a\\n } = t.getTransform().invertSelf();\\n return [e, n, i, r, s, a];\\n };\\n e.getFilenameFromUrl = function getFilenameFromUrl(t) {\\n arguments.length > 1 && void 0 !== arguments[1] && arguments[1] || ([t] = t.split(/[#?]/, 1));\\n return t.substring(t.lastIndexOf(\\"/\\") + 1);\\n };\\n e.getPdfFilenameFromUrl = function getPdfFilenameFromUrl(t) {\\n let e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : \\"document.pdf\\";\\n if (\\"string\\" != typeof t) return e;\\n if (isDataScheme(t)) {\\n (0, r.warn)('getPdfFilenameFromUrl: ignore \\"data:\\"-URL for performance reasons.');\\n return e;\\n }\\n const n = /[^/?#=]+\\\\.pdf\\\\b(?!.*\\\\.pdf\\\\b)/i,\\n i = /^(?:(?:[^:]+:)?\\\\/\\\\/[^/]+)?([^?#]*)(\\\\?[^#]*)?(#.*)?$/.exec(t);\\n let s = n.exec(i[1]) || n.exec(i[2]) || n.exec(i[3]);\\n if (s) {\\n s = s[0];\\n if (s.includes(\\"%\\")) try {\\n s = n.exec(decodeURIComponent(s))[0];\\n } catch (_unused9) {}\\n }\\n return s || e;\\n };\\n e.getRGB = getRGB;\\n e.getXfaPageViewport = function getXfaPageViewport(t, e) {\\n let {\\n scale: n = 1,\\n rotation: i = 0\\n } = e;\\n const {\\n width: r,\\n height: s\\n } = t.attributes.style,\\n a = [0, 0, parseInt(r), parseInt(s)];\\n return new PageViewport({\\n viewBox: a,\\n scale: n,\\n rotation: i\\n });\\n };\\n e.isDataScheme = isDataScheme;\\n e.isPdfFile = function isPdfFile(t) {\\n return \\"string\\" == typeof t && /\\\\.pdf$/i.test(t);\\n };\\n e.isValidFetchUrl = isValidFetchUrl;\\n e.loadScript = function loadScript(t) {\\n let e = arguments.length > 1 && void 0 !== arguments[1] && arguments[1];\\n return new Promise((n, i) => {\\n const r = document.createElement(\\"script\\");\\n r.src = t;\\n r.onload = function (t) {\\n e && r.remove();\\n n(t);\\n };\\n r.onerror = function () {\\n i(new Error(\\"Cannot load script at: \\".concat(r.src)));\\n };\\n (document.head || document.documentElement).append(r);\\n });\\n };\\n e.setLayerDimensions = function setLayerDimensions(t, e) {\\n let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2],\\n i = !(arguments.length > 3 && void 0 !== arguments[3]) || arguments[3];\\n if (e instanceof PageViewport) {\\n const {\\n pageWidth: i,\\n pageHeight: r\\n } = e.rawDims,\\n {\\n style: s\\n } = t,\\n a = \\"calc(var(--scale-factor) * \\".concat(i, \\"px)\\"),\\n o = \\"calc(var(--scale-factor) * \\".concat(r, \\"px)\\");\\n if (n && e.rotation % 180 != 0) {\\n s.width = o;\\n s.height = a;\\n } else {\\n s.width = a;\\n s.height = o;\\n }\\n }\\n i && t.setAttribute(\\"data-main-rotation\\", e.rotation);\\n };\\n n(2);\\n n(93);\\n n(101);\\n n(102);\\n n(105);\\n n(107);\\n n(109);\\n n(113);\\n n(116);\\n n(123);\\n n(89);\\n n(84);\\n n(86);\\n n(87);\\n var i = n(168),\\n r = n(1);\\n const s = \\"http://www.w3.org/2000/svg\\";\\n e.AnnotationPrefix = \\"pdfjs_internal_id_\\";\\n class PixelsPerInch {}\\n _class19 = PixelsPerInch;\\n _defineProperty(PixelsPerInch, \\"CSS\\", 96);\\n _defineProperty(PixelsPerInch, \\"PDF\\", 72);\\n _defineProperty(PixelsPerInch, \\"PDF_TO_CSS_UNITS\\", _class19.CSS / _class19.PDF);\\n e.PixelsPerInch = PixelsPerInch;\\n var _kt = /*#__PURE__*/new WeakMap();\\n var _Mt = /*#__PURE__*/new WeakMap();\\n var _e7 = /*#__PURE__*/new WeakMap();\\n var _Rt = /*#__PURE__*/new WeakMap();\\n var _Ft = /*#__PURE__*/new WeakMap();\\n var _It = /*#__PURE__*/new WeakMap();\\n var _Dt = /*#__PURE__*/new WeakMap();\\n var _Ot = /*#__PURE__*/new WeakMap();\\n var _Lt = /*#__PURE__*/new WeakMap();\\n var _Nt = /*#__PURE__*/new WeakMap();\\n var _O3 = /*#__PURE__*/new WeakMap();\\n var _N2 = /*#__PURE__*/new WeakMap();\\n var _Bt = /*#__PURE__*/new WeakMap();\\n var _Ht = /*#__PURE__*/new WeakSet();\\n var _jt = /*#__PURE__*/new WeakSet();\\n var _qt = /*#__PURE__*/new WeakSet();\\n var _Ut = /*#__PURE__*/new WeakSet();\\n var _zt = /*#__PURE__*/new WeakSet();\\n class DOMFilterFactory extends i.BaseFilterFactory {\\n constructor() {\\n let {\\n docId: _t9,\\n ownerDocument: _e8 = globalThis.document\\n } = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};\\n super();\\n _classPrivateMethodInitSpec(this, _zt);\\n _classPrivateMethodInitSpec(this, _Ut);\\n _classPrivateMethodInitSpec(this, _qt);\\n _classPrivateMethodInitSpec(this, _jt);\\n _classPrivateMethodInitSpec(this, _Ht);\\n _classPrivateFieldInitSpec(this, _Bt, {\\n get: _get_Bt,\\n set: void 0\\n });\\n _classPrivateFieldInitSpec(this, _N2, {\\n get: _get_N,\\n set: void 0\\n });\\n _classPrivateFieldInitSpec(this, _kt, {\\n writable: true,\\n value: void 0\\n });\\n _classPrivateFieldInitSpec(this, _Mt, {\\n writable: true,\\n value: void 0\\n });\\n _classPrivateFieldInitSpec(this, _e7, {\\n writable: true,\\n value: void 0\\n });\\n _classPrivateFieldInitSpec(this, _Rt, {\\n writable: true,\\n value: void 0\\n });\\n _classPrivateFieldInitSpec(this, _Ft, {\\n writable: true,\\n value: void 0\\n });\\n _classPrivateFieldInitSpec(this, _It, {\\n writable: true,\\n value: void 0\\n });\\n _classPrivateFieldInitSpec(this, _Dt, {\\n writable: true,\\n value: void 0\\n });\\n _classPrivateFieldInitSpec(this, _Ot, {\\n writable: true,\\n value: void 0\\n });\\n _classPrivateFieldInitSpec(this, _Lt, {\\n writable: true,\\n value: void 0\\n });\\n _classPrivateFieldInitSpec(this, _Nt, {\\n writable: true,\\n value: void 0\\n });\\n _classPrivateFieldInitSpec(this, _O3, {\\n writable: true,\\n value: 0\\n });\\n _classPrivateFieldSet(this, _e7, _t9);\\n _classPrivateFieldSet(this, _Rt, _e8);\\n }\\n addFilter(t) {\\n var _this$O5, _this$O6;\\n if (!t) return \\"none\\";\\n let e,\\n n,\\n i,\\n r,\\n s = _classPrivateFieldGet(this, _N2).get(t);\\n if (s) return s;\\n if (1 === t.length) {\\n const s = t[0],\\n a = new Array(256);\\n for (let t = 0; t < 256; t++) a[t] = s[t] / 255;\\n r = e = n = i = a.join(\\",\\");\\n } else {\\n const [s, a, o] = t,\\n l = new Array(256),\\n c = new Array(256),\\n h = new Array(256);\\n for (let t = 0; t < 256; t++) {\\n l[t] = s[t] / 255;\\n c[t] = a[t] / 255;\\n h[t] = o[t] / 255;\\n }\\n e = l.join(\\",\\");\\n n = c.join(\\",\\");\\n i = h.join(\\",\\");\\n r = \\"\\".concat(e).concat(n).concat(i);\\n }\\n s = _classPrivateFieldGet(this, _N2).get(r);\\n if (s) {\\n _classPrivateFieldGet(this, _N2).set(t, s);\\n return s;\\n }\\n const a = \\"g_\\".concat(_classPrivateFieldGet(this, _e7), \\"_transfer_map_\\").concat((_classPrivateFieldSet(this, _O3, (_this$O5 = _classPrivateFieldGet(this, _O3), _this$O6 = _this$O5++, _this$O5)), _this$O6)),\\n o = \\"url(#\\".concat(a, \\")\\");\\n _classPrivateFieldGet(this, _N2).set(t, o);\\n _classPrivateFieldGet(this, _N2).set(r, o);\\n const l = _classPrivateMethodGet(this, _jt, _jt2).call(this, a);\\n _classPrivateMethodGet(this, _Ut, _Ut2).call(this, e, n, i, l);\\n return o;\\n }\\n addHCMFilter(t, e) {\\n var _classPrivateFieldGet6;\\n const n = \\"\\".concat(t, \\"-\\").concat(e);\\n if (_classPrivateFieldGet(this, _It) === n) return _classPrivateFieldGet(this, _Dt);\\n _classPrivateFieldSet(this, _It, n);\\n _classPrivateFieldSet(this, _Dt, \\"none\\");\\n (_classPrivateFieldGet6 = _classPrivateFieldGet(this, _Ft)) === null || _classPrivateFieldGet6 === void 0 ? void 0 : _classPrivateFieldGet6.remove();\\n if (!t || !e) return _classPrivateFieldGet(this, _Dt);\\n const i = _classPrivateMethodGet(this, _zt, _zt2).call(this, t);\\n t = r.Util.makeHexColor(...i);\\n const s = _classPrivateMethodGet(this, _zt, _zt2).call(this, e);\\n e = r.Util.makeHexColor(...s);\\n _classPrivateFieldGet(this, _Bt).style.color = \\"\\";\\n if (\\"#000000\\" === t && \\"#ffffff\\" === e || t === e) return _classPrivateFieldGet(this, _Dt);\\n const a = new Array(256);\\n for (let t = 0; t <= 255; t++) {\\n const e = t / 255;\\n a[t] = e <= .03928 ? e / 12.92 : ((e + .055) / 1.055) ** 2.4;\\n }\\n const o = a.join(\\",\\"),\\n l = \\"g_\\".concat(_classPrivateFieldGet(this, _e7), \\"_hcm_filter\\"),\\n c = _classPrivateFieldSet(this, _Ot, _classPrivateMethodGet(this, _jt, _jt2).call(this, l));\\n _classPrivateMethodGet(this, _Ut, _Ut2).call(this, o, o, o, c);\\n _classPrivateMethodGet(this, _Ht, _Ht2).call(this, c);\\n const getSteps = (t, e) => {\\n const n = i[t] / 255,\\n r = s[t] / 255,\\n a = new Array(e + 1);\\n for (let t = 0; t <= e; t++) a[t] = n + t / e * (r - n);\\n return a.join(\\",\\");\\n };\\n _classPrivateMethodGet(this, _Ut, _Ut2).call(this, getSteps(0, 5), getSteps(1, 5), getSteps(2, 5), c);\\n _classPrivateFieldSet(this, _Dt, \\"url(#\\".concat(l, \\")\\"));\\n return _classPrivateFieldGet(this, _Dt);\\n }\\n addHighlightHCMFilter(t, e, n, i) {\\n var _classPrivateFieldGet7;\\n const r = \\"\\".concat(t, \\"-\\").concat(e, \\"-\\").concat(n, \\"-\\").concat(i);\\n if (_classPrivateFieldGet(this, _Lt) === r) return _classPrivateFieldGet(this, _Nt);\\n _classPrivateFieldSet(this, _Lt, r);\\n _classPrivateFieldSet(this, _Nt, \\"none\\");\\n (_classPrivateFieldGet7 = _classPrivateFieldGet(this, _Ot)) === null || _classPrivateFieldGet7 === void 0 ? void 0 : _classPrivateFieldGet7.remove();\\n if (!t || !e) return _classPrivateFieldGet(this, _Nt);\\n const [s, a] = [t, e].map(_classPrivateMethodGet(this, _zt, _zt2).bind(this));\\n let o = Math.round(.2126 * s[0] + .7152 * s[1] + .0722 * s[2]),\\n l = Math.round(.2126 * a[0] + .7152 * a[1] + .0722 * a[2]),\\n [c, h] = [n, i].map(_classPrivateMethodGet(this, _zt, _zt2).bind(this));\\n l < o && ([o, l, c, h] = [l, o, h, c]);\\n _classPrivateFieldGet(this, _Bt).style.color = \\"\\";\\n const getSteps = (t, e, n) => {\\n const i = new Array(256),\\n r = (l - o) / n,\\n s = t / 255,\\n a = (e - t) / (255 * n);\\n let c = 0;\\n for (let t = 0; t <= n; t++) {\\n const e = Math.round(o + t * r),\\n n = s + t * a;\\n for (let t = c; t <= e; t++) i[t] = n;\\n c = e + 1;\\n }\\n for (let t = c; t < 256; t++) i[t] = i[c - 1];\\n return i.join(\\",\\");\\n },\\n d = \\"g_\\".concat(_classPrivateFieldGet(this, _e7), \\"_hcm_highlight_filter\\"),\\n u = _classPrivateFieldSet(this, _Ot, _classPrivateMethodGet(this, _jt, _jt2).call(this, d));\\n _classPrivateMethodGet(this, _Ht, _Ht2).call(this, u);\\n _classPrivateMethodGet(this, _Ut, _Ut2).call(this, getSteps(c[0], h[0], 5), getSteps(c[1], h[1], 5), getSteps(c[2], h[2], 5), u);\\n _classPrivateFieldSet(this, _Nt, \\"url(#\\".concat(d, \\")\\"));\\n return _classPrivateFieldGet(this, _Nt);\\n }\\n destroy() {\\n if (!(arguments.length > 0 && void 0 !== arguments[0] && arguments[0]) || !_classPrivateFieldGet(this, _Dt) && !_classPrivateFieldGet(this, _Nt)) {\\n if (_classPrivateFieldGet(this, _Mt)) {\\n _classPrivateFieldGet(this, _Mt).parentNode.parentNode.remove();\\n _classPrivateFieldSet(this, _Mt, null);\\n }\\n if (_classPrivateFieldGet(this, _kt)) {\\n _classPrivateFieldGet(this, _kt).clear();\\n _classPrivateFieldSet(this, _kt, null);\\n }\\n _classPrivateFieldSet(this, _O3, 0);\\n }\\n }\\n }\\n function _get_N() {\\n return _classPrivateFieldGet(this, _kt) || _classPrivateFieldSet(this, _kt, new Map());\\n }\\n function _get_Bt() {\\n if (!_classPrivateFieldGet(this, _Mt)) {\\n const t = _classPrivateFieldGet(this, _Rt).createElement(\\"div\\"),\\n {\\n style: e\\n } = t;\\n e.visibility = \\"hidden\\";\\n e.contain = \\"strict\\";\\n e.width = e.height = 0;\\n e.position = \\"absolute\\";\\n e.top = e.left = 0;\\n e.zIndex = -1;\\n const n = _classPrivateFieldGet(this, _Rt).createElementNS(s, \\"svg\\");\\n n.setAttribute(\\"width\\", 0);\\n n.setAttribute(\\"height\\", 0);\\n _classPrivateFieldSet(this, _Mt, _classPrivateFieldGet(this, _Rt).createElementNS(s, \\"defs\\"));\\n t.append(n);\\n n.append(_classPrivateFieldGet(this, _Mt));\\n _classPrivateFieldGet(this, _Rt).body.append(t);\\n }\\n return _classPrivateFieldGet(this, _Mt);\\n }\\n function _Ht2(t) {\\n const e = _classPrivateFieldGet(this, _Rt).createElementNS(s, \\"feColorMatrix\\");\\n e.setAttribute(\\"type\\", \\"matrix\\");\\n e.setAttribute(\\"values\\", \\"0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0 0 0 1 0\\");\\n t.append(e);\\n }\\n function _jt2(t) {\\n const e = _classPrivateFieldGet(this, _Rt).createElementNS(s, \\"filter\\");\\n e.setAttribute(\\"color-interpolation-filters\\", \\"sRGB\\");\\n e.setAttribute(\\"id\\", t);\\n _classPrivateFieldGet(this, _Bt).append(e);\\n return e;\\n }\\n function _qt2(t, e, n) {\\n const i = _classPrivateFieldGet(this, _Rt).createElementNS(s, e);\\n i.setAttribute(\\"type\\", \\"discrete\\");\\n i.setAttribute(\\"tableValues\\", n);\\n t.append(i);\\n }\\n function _Ut2(t, e, n, i) {\\n const r = _classPrivateFieldGet(this, _Rt).createElementNS(s, \\"feComponentTransfer\\");\\n i.append(r);\\n _classPrivateMethodGet(this, _qt, _qt2).call(this, r, \\"feFuncR\\", t);\\n _classPrivateMethodGet(this, _qt, _qt2).call(this, r, \\"feFuncG\\", e);\\n _classPrivateMethodGet(this, _qt, _qt2).call(this, r, \\"feFuncB\\", n);\\n }\\n function _zt2(t) {\\n _classPrivateFieldGet(this, _Bt).style.color = t;\\n return getRGB(getComputedStyle(_classPrivateFieldGet(this, _Bt)).getPropertyValue(\\"color\\"));\\n }\\n e.DOMFilterFactory = DOMFilterFactory;\\n class DOMCanvasFactory extends i.BaseCanvasFactory {\\n constructor() {\\n let {\\n ownerDocument: t = globalThis.document\\n } = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};\\n super();\\n this._document = t;\\n }\\n _createCanvas(t, e) {\\n const n = this._document.createElement(\\"canvas\\");\\n n.width = t;\\n n.height = e;\\n return n;\\n }\\n }\\n e.DOMCanvasFactory = DOMCanvasFactory;\\n async function fetchData(t) {\\n let e = arguments.length > 1 && void 0 !== arguments[1] && arguments[1];\\n if (isValidFetchUrl(t, document.baseURI)) {\\n const n = await fetch(t);\\n if (!n.ok) throw new Error(n.statusText);\\n return e ? new Uint8Array(await n.arrayBuffer()) : (0, r.stringToBytes)(await n.text());\\n }\\n return new Promise((n, i) => {\\n const s = new XMLHttpRequest();\\n s.open(\\"GET\\", t, !0);\\n e && (s.responseType = \\"arraybuffer\\");\\n s.onreadystatechange = () => {\\n if (s.readyState === XMLHttpRequest.DONE) {\\n if (200 === s.status || 0 === s.status) {\\n let t;\\n e && s.response ? t = new Uint8Array(s.response) : !e && s.responseText && (t = (0, r.stringToBytes)(s.responseText));\\n if (t) {\\n n(t);\\n return;\\n }\\n }\\n i(new Error(s.statusText));\\n }\\n };\\n s.send(null);\\n });\\n }\\n class DOMCMapReaderFactory extends i.BaseCMapReaderFactory {\\n _fetchData(t, e) {\\n return fetchData(t, this.isCompressed).then(t => ({\\n cMapData: t,\\n compressionType: e\\n }));\\n }\\n }\\n e.DOMCMapReaderFactory = DOMCMapReaderFactory;\\n class DOMStandardFontDataFactory extends i.BaseStandardFontDataFactory {\\n _fetchData(t) {\\n return fetchData(t, !0);\\n }\\n }\\n e.DOMStandardFontDataFactory = DOMStandardFontDataFactory;\\n class DOMSVGFactory extends i.BaseSVGFactory {\\n _createSVG(t) {\\n return document.createElementNS(s, t);\\n }\\n }\\n e.DOMSVGFactory = DOMSVGFactory;\\n class PageViewport {\\n constructor(t) {\\n let {\\n viewBox: e,\\n scale: n,\\n rotation: i,\\n offsetX: r = 0,\\n offsetY: s = 0,\\n dontFlip: a = !1\\n } = t;\\n this.viewBox = e;\\n this.scale = n;\\n this.rotation = i;\\n this.offsetX = r;\\n this.offsetY = s;\\n const o = (e[2] + e[0]) / 2,\\n l = (e[3] + e[1]) / 2;\\n let c, h, d, u, p, f, g, m;\\n i %= 360;\\n i < 0 && (i += 360);\\n switch (i) {\\n case 180:\\n c = -1;\\n h = 0;\\n d = 0;\\n u = 1;\\n break;\\n case 90:\\n c = 0;\\n h = 1;\\n d = 1;\\n u = 0;\\n break;\\n case 270:\\n c = 0;\\n h = -1;\\n d = -1;\\n u = 0;\\n break;\\n case 0:\\n c = 1;\\n h = 0;\\n d = 0;\\n u = -1;\\n break;\\n default:\\n throw new Error(\\"PageViewport: Invalid rotation, must be a multiple of 90 degrees.\\");\\n }\\n if (a) {\\n d = -d;\\n u = -u;\\n }\\n if (0 === c) {\\n p = Math.abs(l - e[1]) * n + r;\\n f = Math.abs(o - e[0]) * n + s;\\n g = (e[3] - e[1]) * n;\\n m = (e[2] - e[0]) * n;\\n } else {\\n p = Math.abs(o - e[0]) * n + r;\\n f = Math.abs(l - e[1]) * n + s;\\n g = (e[2] - e[0]) * n;\\n m = (e[3] - e[1]) * n;\\n }\\n this.transform = [c * n, h * n, d * n, u * n, p - c * n * o - d * n * l, f - h * n * o - u * n * l];\\n this.width = g;\\n this.height = m;\\n }\\n get rawDims() {\\n const {\\n viewBox: t\\n } = this;\\n return (0, r.shadow)(this, \\"rawDims\\", {\\n pageWidth: t[2] - t[0],\\n pageHeight: t[3] - t[1],\\n pageX: t[0],\\n pageY: t[1]\\n });\\n }\\n clone() {\\n let {\\n scale: t = this.scale,\\n rotation: e = this.rotation,\\n offsetX: n = this.offsetX,\\n offsetY: i = this.offsetY,\\n dontFlip: r = !1\\n } = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {};\\n return new PageViewport({\\n viewBox: this.viewBox.slice(),\\n scale: t,\\n rotation: e,\\n offsetX: n,\\n offsetY: i,\\n dontFlip: r\\n });\\n }\\n convertToViewportPoint(t, e) {\\n return r.Util.applyTransform([t, e], this.transform);\\n }\\n convertToViewportRectangle(t) {\\n const e = r.Util.applyTransform([t[0], t[1]], this.transform),\\n n = r.Util.applyTransform([t[2], t[3]], this.transform);\\n return [e[0], e[1], n[0], n[1]];\\n }\\n convertToPdfPoint(t, e) {\\n return r.Util.applyInverseTransform([t, e], this.transform);\\n }\\n }\\n e.PageViewport = PageViewport;\\n class RenderingCancelledException extends r.BaseException {\\n constructor(t) {\\n let e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 0;\\n super(t, \\"RenderingCancelledException\\");\\n this.extraDelay = e;\\n }\\n }\\n e.RenderingCancelledException = RenderingCancelledException;\\n function isDataScheme(t) {\\n const e = t.length;\\n let n = 0;\\n for (; n < e && \\"\\" === t[n].trim();) n++;\\n return \\"data:\\" === t.substring(n, n + 5).toLowerCase();\\n }\\n e.StatTimer = class StatTimer {\\n constructor() {\\n _defineProperty(this, \\"started\\", Object.create(null));\\n _defineProperty(this, \\"times\\", []);\\n }\\n time(t) {\\n t in this.started && (0, r.warn)(\\"Timer is already running for \\".concat(t));\\n this.started[t] = Date.now();\\n }\\n timeEnd(t) {\\n t in this.started || (0, r.warn)(\\"Timer has not been started for \\".concat(t));\\n this.times.push({\\n name: t,\\n start: this.started[t],\\n end: Date.now()\\n });\\n delete this.started[t];\\n }\\n toString() {\\n const t = [];\\n let e = 0;\\n for (const {\\n name: t\\n } of this.times) e = Math.max(t.length, e);\\n for (const {\\n name: n,\\n start: i,\\n end: r\\n } of this.times) t.push(\\"\\".concat(n.padEnd(e), \\" \\").concat(r - i, \\"ms\\\\n\\"));\\n return t.join(\\"\\");\\n }\\n };\\n function isValidFetchUrl(t, e) {\\n try {\\n const {\\n protocol: n\\n } = e ? new URL(t, e) : new URL(t);\\n return \\"http:\\" === n || \\"https:\\" === n;\\n } catch (_unused10) {\\n return !1;\\n }\\n }\\n let a;\\n e.PDFDateString = class PDFDateString {\\n static toDateObject(t) {\\n if (!t || \\"string\\" != typeof t) return null;\\n a || (a = new RegExp(\\"^D:(\\\\\\\\d{4})(\\\\\\\\d{2})?(\\\\\\\\d{2})?(\\\\\\\\d{2})?(\\\\\\\\d{2})?(\\\\\\\\d{2})?([Z|+|-])?(\\\\\\\\d{2})?'?(\\\\\\\\d{2})?'?\\"));\\n const e = a.exec(t);\\n if (!e) return null;\\n const n = parseInt(e[1], 10);\\n let i = parseInt(e[2], 10);\\n i = i >= 1 && i <= 12 ? i - 1 : 0;\\n let r = parseInt(e[3], 10);\\n r = r >= 1 && r <= 31 ? r : 1;\\n let s = parseInt(e[4], 10);\\n s = s >= 0 && s <= 23 ? s : 0;\\n let o = parseInt(e[5], 10);\\n o = o >= 0 && o <= 59 ? o : 0;\\n let l = parseInt(e[6], 10);\\n l = l >= 0 && l <= 59 ? l : 0;\\n const c = e[7] || \\"Z\\";\\n let h = parseInt(e[8], 10);\\n h = h >= 0 && h <= 23 ? h : 0;\\n let d = parseInt(e[9], 10) || 0;\\n d = d >= 0 && d <= 59 ? d : 0;\\n if (\\"-\\" === c) {\\n s += h;\\n o += d;\\n } else if (\\"+\\" === c) {\\n s -= h;\\n o -= d;\\n }\\n return new Date(Date.UTC(n, i, r, s, o, l));\\n }\\n };\\n function getRGB(t) {\\n if (t.startsWith(\\"#\\")) {\\n const e = parseInt(t.slice(1), 16);\\n return [(16711680 & e) >> 16, (65280 & e) >> 8, 255 & e];\\n }\\n if (t.startsWith(\\"rgb(\\")) return t.slice(4, -1).split(\\",\\").map(t => parseInt(t));\\n if (t.startsWith(\\"rgba(\\")) return t.slice(5, -1).split(\\",\\").map(t => parseInt(t)).slice(0, 3);\\n (0, r.warn)(\\"Not a valid color format: \\\\\\"\\".concat(t, \\"\\\\\\"\\"));\\n return [0, 0, 0];\\n }\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n Object.defineProperty(e, \\"__esModule\\", {\\n value: !0\\n });\\n e.BaseStandardFontDataFactory = e.BaseSVGFactory = e.BaseFilterFactory = e.BaseCanvasFactory = e.BaseCMapReaderFactory = void 0;\\n n(2);\\n var i = n(1);\\n class BaseFilterFactory {\\n constructor() {\\n this.constructor === BaseFilterFactory && (0, i.unreachable)(\\"Cannot initialize BaseFilterFactory.\\");\\n }\\n addFilter(t) {\\n return \\"none\\";\\n }\\n addHCMFilter(t, e) {\\n return \\"none\\";\\n }\\n addHighlightHCMFilter(t, e, n, i) {\\n return \\"none\\";\\n }\\n destroy() {}\\n }\\n e.BaseFilterFactory = BaseFilterFactory;\\n class BaseCanvasFactory {\\n constructor() {\\n this.constructor === BaseCanvasFactory && (0, i.unreachable)(\\"Cannot initialize BaseCanvasFactory.\\");\\n }\\n create(t, e) {\\n if (t <= 0 || e <= 0) throw new Error(\\"Invalid canvas size\\");\\n const n = this._createCanvas(t, e);\\n return {\\n canvas: n,\\n context: n.getContext(\\"2d\\")\\n };\\n }\\n reset(t, e, n) {\\n if (!t.canvas) throw new Error(\\"Canvas is not specified\\");\\n if (e <= 0 || n <= 0) throw new Error(\\"Invalid canvas size\\");\\n t.canvas.width = e;\\n t.canvas.height = n;\\n }\\n destroy(t) {\\n if (!t.canvas) throw new Error(\\"Canvas is not specified\\");\\n t.canvas.width = 0;\\n t.canvas.height = 0;\\n t.canvas = null;\\n t.context = null;\\n }\\n _createCanvas(t, e) {\\n (0, i.unreachable)(\\"Abstract method \`_createCanvas\` called.\\");\\n }\\n }\\n e.BaseCanvasFactory = BaseCanvasFactory;\\n class BaseCMapReaderFactory {\\n constructor(t) {\\n let {\\n baseUrl: e = null,\\n isCompressed: n = !0\\n } = t;\\n this.constructor === BaseCMapReaderFactory && (0, i.unreachable)(\\"Cannot initialize BaseCMapReaderFactory.\\");\\n this.baseUrl = e;\\n this.isCompressed = n;\\n }\\n async fetch(t) {\\n let {\\n name: e\\n } = t;\\n if (!this.baseUrl) throw new Error('The CMap \\"baseUrl\\" parameter must be specified, ensure that the \\"cMapUrl\\" and \\"cMapPacked\\" API parameters are provided.');\\n if (!e) throw new Error(\\"CMap name must be specified.\\");\\n const n = this.baseUrl + e + (this.isCompressed ? \\".bcmap\\" : \\"\\"),\\n r = this.isCompressed ? i.CMapCompressionType.BINARY : i.CMapCompressionType.NONE;\\n return this._fetchData(n, r).catch(t => {\\n throw new Error(\\"Unable to load \\".concat(this.isCompressed ? \\"binary \\" : \\"\\", \\"CMap at: \\").concat(n));\\n });\\n }\\n _fetchData(t, e) {\\n (0, i.unreachable)(\\"Abstract method \`_fetchData\` called.\\");\\n }\\n }\\n e.BaseCMapReaderFactory = BaseCMapReaderFactory;\\n class BaseStandardFontDataFactory {\\n constructor(t) {\\n let {\\n baseUrl: e = null\\n } = t;\\n this.constructor === BaseStandardFontDataFactory && (0, i.unreachable)(\\"Cannot initialize BaseStandardFontDataFactory.\\");\\n this.baseUrl = e;\\n }\\n async fetch(t) {\\n let {\\n filename: e\\n } = t;\\n if (!this.baseUrl) throw new Error('The standard font \\"baseUrl\\" parameter must be specified, ensure that the \\"standardFontDataUrl\\" API parameter is provided.');\\n if (!e) throw new Error(\\"Font filename must be specified.\\");\\n const n = \\"\\".concat(this.baseUrl).concat(e);\\n return this._fetchData(n).catch(t => {\\n throw new Error(\\"Unable to load font data at: \\".concat(n));\\n });\\n }\\n _fetchData(t) {\\n (0, i.unreachable)(\\"Abstract method \`_fetchData\` called.\\");\\n }\\n }\\n e.BaseStandardFontDataFactory = BaseStandardFontDataFactory;\\n class BaseSVGFactory {\\n constructor() {\\n this.constructor === BaseSVGFactory && (0, i.unreachable)(\\"Cannot initialize BaseSVGFactory.\\");\\n }\\n create(t, e) {\\n let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2];\\n if (t <= 0 || e <= 0) throw new Error(\\"Invalid SVG dimensions\\");\\n const i = this._createSVG(\\"svg:svg\\");\\n i.setAttribute(\\"version\\", \\"1.1\\");\\n if (!n) {\\n i.setAttribute(\\"width\\", \\"\\".concat(t, \\"px\\"));\\n i.setAttribute(\\"height\\", \\"\\".concat(e, \\"px\\"));\\n }\\n i.setAttribute(\\"preserveAspectRatio\\", \\"none\\");\\n i.setAttribute(\\"viewBox\\", \\"0 0 \\".concat(t, \\" \\").concat(e));\\n return i;\\n }\\n createElement(t) {\\n if (\\"string\\" != typeof t) throw new Error(\\"Invalid SVG element type\\");\\n return this._createSVG(t);\\n }\\n _createSVG(t) {\\n (0, i.unreachable)(\\"Abstract method \`_createSVG\` called.\\");\\n }\\n }\\n e.BaseSVGFactory = BaseSVGFactory;\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n Object.defineProperty(e, \\"__esModule\\", {\\n value: !0\\n });\\n e.MurmurHash3_64 = void 0;\\n n(93);\\n n(101);\\n n(102);\\n n(105);\\n n(107);\\n n(109);\\n n(113);\\n n(116);\\n n(123);\\n n(2);\\n var i = n(1);\\n const r = 3285377520,\\n s = 4294901760,\\n a = 65535;\\n e.MurmurHash3_64 = class MurmurHash3_64 {\\n constructor(t) {\\n this.h1 = t ? 4294967295 & t : r;\\n this.h2 = t ? 4294967295 & t : r;\\n }\\n update(t) {\\n let e, n;\\n if (\\"string\\" == typeof t) {\\n e = new Uint8Array(2 * t.length);\\n n = 0;\\n for (let i = 0, r = t.length; i < r; i++) {\\n const r = t.charCodeAt(i);\\n if (r <= 255) e[n++] = r;else {\\n e[n++] = r >>> 8;\\n e[n++] = 255 & r;\\n }\\n }\\n } else {\\n if (!(0, i.isArrayBuffer)(t)) throw new Error(\\"Wrong data format in MurmurHash3_64_update. Input must be a string or array.\\");\\n e = t.slice();\\n n = e.byteLength;\\n }\\n const r = n >> 2,\\n o = n - 4 * r,\\n l = new Uint32Array(e.buffer, 0, r);\\n let c = 0,\\n h = 0,\\n d = this.h1,\\n u = this.h2;\\n const p = 3432918353,\\n f = 461845907,\\n g = 11601,\\n m = 13715;\\n for (let t = 0; t < r; t++) if (1 & t) {\\n c = l[t];\\n c = c * p & s | c * g & a;\\n c = c << 15 | c >>> 17;\\n c = c * f & s | c * m & a;\\n d ^= c;\\n d = d << 13 | d >>> 19;\\n d = 5 * d + 3864292196;\\n } else {\\n h = l[t];\\n h = h * p & s | h * g & a;\\n h = h << 15 | h >>> 17;\\n h = h * f & s | h * m & a;\\n u ^= h;\\n u = u << 13 | u >>> 19;\\n u = 5 * u + 3864292196;\\n }\\n c = 0;\\n switch (o) {\\n case 3:\\n c ^= e[4 * r + 2] << 16;\\n case 2:\\n c ^= e[4 * r + 1] << 8;\\n case 1:\\n c ^= e[4 * r];\\n c = c * p & s | c * g & a;\\n c = c << 15 | c >>> 17;\\n c = c * f & s | c * m & a;\\n 1 & r ? d ^= c : u ^= c;\\n }\\n this.h1 = d;\\n this.h2 = u;\\n }\\n hexdigest() {\\n let t = this.h1,\\n e = this.h2;\\n t ^= e >>> 1;\\n t = 3981806797 * t & s | 36045 * t & a;\\n e = 4283543511 * e & s | (2950163797 * (e << 16 | t >>> 16) & s) >>> 16;\\n t ^= e >>> 1;\\n t = 444984403 * t & s | 60499 * t & a;\\n e = 3301882366 * e & s | (3120437893 * (e << 16 | t >>> 16) & s) >>> 16;\\n t ^= e >>> 1;\\n return (t >>> 0).toString(16).padStart(8, \\"0\\") + (e >>> 0).toString(16).padStart(8, \\"0\\");\\n }\\n };\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n var _Wt;\\n Object.defineProperty(e, \\"__esModule\\", {\\n value: !0\\n });\\n e.FontLoader = e.FontFaceObject = void 0;\\n n(125);\\n n(135);\\n n(137);\\n n(140);\\n n(142);\\n n(144);\\n n(146);\\n n(89);\\n n(148);\\n var i = n(1);\\n e.FontLoader = (_Wt = /*#__PURE__*/new WeakMap(), class FontLoader {\\n constructor(t) {\\n _classPrivateFieldInitSpec(this, _Wt, {\\n writable: true,\\n value: new Set()\\n });\\n let {\\n ownerDocument: e = globalThis.document,\\n styleElement: n = null\\n } = t;\\n this._document = e;\\n this.nativeFontFaces = new Set();\\n this.styleElement = null;\\n this.loadingRequests = [];\\n this.loadTestFontId = 0;\\n }\\n addNativeFontFace(t) {\\n this.nativeFontFaces.add(t);\\n this._document.fonts.add(t);\\n }\\n removeNativeFontFace(t) {\\n this.nativeFontFaces.delete(t);\\n this._document.fonts.delete(t);\\n }\\n insertRule(t) {\\n if (!this.styleElement) {\\n this.styleElement = this._document.createElement(\\"style\\");\\n this._document.documentElement.getElementsByTagName(\\"head\\")[0].append(this.styleElement);\\n }\\n const e = this.styleElement.sheet;\\n e.insertRule(t, e.cssRules.length);\\n }\\n clear() {\\n for (const t of this.nativeFontFaces) this._document.fonts.delete(t);\\n this.nativeFontFaces.clear();\\n _classPrivateFieldGet(this, _Wt).clear();\\n if (this.styleElement) {\\n this.styleElement.remove();\\n this.styleElement = null;\\n }\\n }\\n async loadSystemFont(t) {\\n if (t && !_classPrivateFieldGet(this, _Wt).has(t.loadedName)) {\\n (0, i.assert)(!this.disableFontFace, \\"loadSystemFont shouldn't be called when \`disableFontFace\` is set.\\");\\n if (this.isFontLoadingAPISupported) {\\n const {\\n loadedName: e,\\n src: n,\\n style: r\\n } = t,\\n s = new FontFace(e, n, r);\\n this.addNativeFontFace(s);\\n try {\\n await s.load();\\n _classPrivateFieldGet(this, _Wt).add(e);\\n } catch (_unused11) {\\n (0, i.warn)(\\"Cannot load system font: \\".concat(t.baseFontName, \\", installing it could help to improve PDF rendering.\\"));\\n this.removeNativeFontFace(s);\\n }\\n } else (0, i.unreachable)(\\"Not implemented: loadSystemFont without the Font Loading API.\\");\\n }\\n }\\n async bind(t) {\\n if (t.attached || t.missingFile && !t.systemFontInfo) return;\\n t.attached = !0;\\n if (t.systemFontInfo) {\\n await this.loadSystemFont(t.systemFontInfo);\\n return;\\n }\\n if (this.isFontLoadingAPISupported) {\\n const e = t.createNativeFontFace();\\n if (e) {\\n this.addNativeFontFace(e);\\n try {\\n await e.loaded;\\n } catch (n) {\\n (0, i.warn)(\\"Failed to load font '\\".concat(e.family, \\"': '\\").concat(n, \\"'.\\"));\\n t.disableFontFace = !0;\\n throw n;\\n }\\n }\\n return;\\n }\\n const e = t.createFontFaceRule();\\n if (e) {\\n this.insertRule(e);\\n if (this.isSyncFontLoadingSupported) return;\\n await new Promise(e => {\\n const n = this._queueLoadingCallback(e);\\n this._prepareFontLoadEvent(t, n);\\n });\\n }\\n }\\n get isFontLoadingAPISupported() {\\n var _this$_document;\\n const t = !!((_this$_document = this._document) !== null && _this$_document !== void 0 && _this$_document.fonts);\\n return (0, i.shadow)(this, \\"isFontLoadingAPISupported\\", t);\\n }\\n get isSyncFontLoadingSupported() {\\n let t = !1;\\n (i.isNodeJS || \\"undefined\\" != typeof navigator && /Mozilla\\\\/5.0.*?rv:\\\\d+.*? Gecko/.test(navigator.userAgent)) && (t = !0);\\n return (0, i.shadow)(this, \\"isSyncFontLoadingSupported\\", t);\\n }\\n _queueLoadingCallback(t) {\\n const {\\n loadingRequests: e\\n } = this,\\n n = {\\n done: !1,\\n complete: function completeRequest() {\\n (0, i.assert)(!n.done, \\"completeRequest() cannot be called twice.\\");\\n n.done = !0;\\n for (; e.length > 0 && e[0].done;) {\\n const t = e.shift();\\n setTimeout(t.callback, 0);\\n }\\n },\\n callback: t\\n };\\n e.push(n);\\n return n;\\n }\\n get _loadTestFont() {\\n const t = atob(\\"T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQAFQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAAALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgAAAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACMAooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4DIP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAAAAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUAAQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgABAAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABYAAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAAAC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAAAAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQACAQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTjFQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA==\\");\\n return (0, i.shadow)(this, \\"_loadTestFont\\", t);\\n }\\n _prepareFontLoadEvent(t, e) {\\n function int32(t, e) {\\n return t.charCodeAt(e) << 24 | t.charCodeAt(e + 1) << 16 | t.charCodeAt(e + 2) << 8 | 255 & t.charCodeAt(e + 3);\\n }\\n function spliceString(t, e, n, i) {\\n return t.substring(0, e) + i + t.substring(e + n);\\n }\\n let n, r;\\n const s = this._document.createElement(\\"canvas\\");\\n s.width = 1;\\n s.height = 1;\\n const a = s.getContext(\\"2d\\");\\n let o = 0;\\n const l = \\"lt\\".concat(Date.now()).concat(this.loadTestFontId++);\\n let c = this._loadTestFont;\\n c = spliceString(c, 976, l.length, l);\\n const h = 1482184792;\\n let d = int32(c, 16);\\n for (n = 0, r = l.length - 3; n < r; n += 4) d = d - h + int32(l, n) | 0;\\n n < l.length && (d = d - h + int32(l + \\"XXX\\", n) | 0);\\n c = spliceString(c, 16, 4, (0, i.string32)(d));\\n const u = \\"@font-face {font-family:\\\\\\"\\".concat(l, \\"\\\\\\";src:\\", \\"url(data:font/opentype;base64,\\".concat(btoa(c), \\");\\"), \\"}\\");\\n this.insertRule(u);\\n const p = this._document.createElement(\\"div\\");\\n p.style.visibility = \\"hidden\\";\\n p.style.width = p.style.height = \\"10px\\";\\n p.style.position = \\"absolute\\";\\n p.style.top = p.style.left = \\"0px\\";\\n for (const e of [t.loadedName, l]) {\\n const t = this._document.createElement(\\"span\\");\\n t.textContent = \\"Hi\\";\\n t.style.fontFamily = e;\\n p.append(t);\\n }\\n this._document.body.append(p);\\n !function isFontReady(t, e) {\\n if (++o > 30) {\\n (0, i.warn)(\\"Load test font never loaded.\\");\\n e();\\n return;\\n }\\n a.font = \\"30px \\" + t;\\n a.fillText(\\".\\", 0, 20);\\n a.getImageData(0, 0, 1, 1).data[3] > 0 ? e() : setTimeout(isFontReady.bind(null, t, e));\\n }(l, () => {\\n p.remove();\\n e.complete();\\n });\\n }\\n });\\n e.FontFaceObject = class FontFaceObject {\\n constructor(t, e) {\\n let {\\n isEvalSupported: n = !0,\\n disableFontFace: i = !1,\\n ignoreErrors: r = !1,\\n inspectFont: s = null\\n } = e;\\n this.compiledGlyphs = Object.create(null);\\n for (const e in t) this[e] = t[e];\\n this.isEvalSupported = !1 !== n;\\n this.disableFontFace = !0 === i;\\n this.ignoreErrors = !0 === r;\\n this._inspectFont = s;\\n }\\n createNativeFontFace() {\\n var _this$_inspectFont;\\n if (!this.data || this.disableFontFace) return null;\\n let t;\\n if (this.cssFontInfo) {\\n const e = {\\n weight: this.cssFontInfo.fontWeight\\n };\\n this.cssFontInfo.italicAngle && (e.style = \\"oblique \\".concat(this.cssFontInfo.italicAngle, \\"deg\\"));\\n t = new FontFace(this.cssFontInfo.fontFamily, this.data, e);\\n } else t = new FontFace(this.loadedName, this.data, {});\\n (_this$_inspectFont = this._inspectFont) === null || _this$_inspectFont === void 0 ? void 0 : _this$_inspectFont.call(this, this);\\n return t;\\n }\\n createFontFaceRule() {\\n var _this$_inspectFont2;\\n if (!this.data || this.disableFontFace) return null;\\n const t = (0, i.bytesToString)(this.data),\\n e = \\"url(data:\\".concat(this.mimetype, \\";base64,\\").concat(btoa(t), \\");\\");\\n let n;\\n if (this.cssFontInfo) {\\n let t = \\"font-weight: \\".concat(this.cssFontInfo.fontWeight, \\";\\");\\n this.cssFontInfo.italicAngle && (t += \\"font-style: oblique \\".concat(this.cssFontInfo.italicAngle, \\"deg;\\"));\\n n = \\"@font-face {font-family:\\\\\\"\\".concat(this.cssFontInfo.fontFamily, \\"\\\\\\";\\").concat(t, \\"src:\\").concat(e, \\"}\\");\\n } else n = \\"@font-face {font-family:\\\\\\"\\".concat(this.loadedName, \\"\\\\\\";src:\\").concat(e, \\"}\\");\\n (_this$_inspectFont2 = this._inspectFont) === null || _this$_inspectFont2 === void 0 ? void 0 : _this$_inspectFont2.call(this, this, e);\\n return n;\\n }\\n getPathGenerator(t, e) {\\n if (void 0 !== this.compiledGlyphs[e]) return this.compiledGlyphs[e];\\n let n;\\n try {\\n n = t.get(this.loadedName + \\"_path_\\" + e);\\n } catch (t) {\\n if (!this.ignoreErrors) throw t;\\n (0, i.warn)(\\"getPathGenerator - ignoring character: \\\\\\"\\".concat(t, \\"\\\\\\".\\"));\\n return this.compiledGlyphs[e] = function (t, e) {};\\n }\\n if (this.isEvalSupported && i.FeatureTest.isEvalSupported) {\\n const t = [];\\n for (const e of n) {\\n const n = void 0 !== e.args ? e.args.join(\\",\\") : \\"\\";\\n t.push(\\"c.\\", e.cmd, \\"(\\", n, \\");\\\\n\\");\\n }\\n return this.compiledGlyphs[e] = new Function(\\"c\\", \\"size\\", t.join(\\"\\"));\\n }\\n return this.compiledGlyphs[e] = function (t, e) {\\n for (const i of n) {\\n \\"scale\\" === i.cmd && (i.args = [e, -e]);\\n t[i.cmd].apply(t, i.args);\\n }\\n };\\n }\\n };\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n Object.defineProperty(e, \\"__esModule\\", {\\n value: !0\\n });\\n e.NodeStandardFontDataFactory = e.NodeFilterFactory = e.NodeCanvasFactory = e.NodeCMapReaderFactory = void 0;\\n n(2);\\n n(93);\\n n(101);\\n n(102);\\n n(105);\\n n(107);\\n n(109);\\n n(113);\\n n(116);\\n n(123);\\n var i = n(168),\\n r = n(1);\\n !function checkDOMMatrix() {\\n if (!globalThis.DOMMatrix && r.isNodeJS) try {\\n globalThis.DOMMatrix = Object(function webpackMissingModule() { var e = new Error(\\"Cannot find module 'canvas'\\"); e.code = 'MODULE_NOT_FOUND'; throw e; }());\\n } catch (t) {\\n (0, r.warn)(\\"Cannot polyfill \`DOMMatrix\`, rendering may be broken: \\\\\\"\\".concat(t, \\"\\\\\\".\\"));\\n }\\n }();\\n !function checkPath2D() {\\n if (!globalThis.Path2D && r.isNodeJS) try {\\n const {\\n CanvasRenderingContext2D: t\\n } = __webpack_require__(Object(function webpackMissingModule() { var e = new Error(\\"Cannot find module 'canvas'\\"); e.code = 'MODULE_NOT_FOUND'; throw e; }())),\\n {\\n polyfillPath2D: e\\n } = __webpack_require__(Object(function webpackMissingModule() { var e = new Error(\\"Cannot find module 'path2d-polyfill'\\"); e.code = 'MODULE_NOT_FOUND'; throw e; }()));\\n globalThis.CanvasRenderingContext2D = t;\\n e(globalThis);\\n } catch (t) {\\n (0, r.warn)(\\"Cannot polyfill \`Path2D\`, rendering may be broken: \\\\\\"\\".concat(t, \\"\\\\\\".\\"));\\n }\\n }();\\n const fetchData = function fetchData(t) {\\n return new Promise((e, n) => {\\n Object(function webpackMissingModule() { var e = new Error(\\"Cannot find module 'fs'\\"); e.code = 'MODULE_NOT_FOUND'; throw e; }())(t, (t, i) => {\\n !t && i ? e(new Uint8Array(i)) : n(new Error(t));\\n });\\n });\\n };\\n class NodeFilterFactory extends i.BaseFilterFactory {}\\n e.NodeFilterFactory = NodeFilterFactory;\\n class NodeCanvasFactory extends i.BaseCanvasFactory {\\n _createCanvas(t, e) {\\n return Object(function webpackMissingModule() { var e = new Error(\\"Cannot find module 'canvas'\\"); e.code = 'MODULE_NOT_FOUND'; throw e; }())(t, e);\\n }\\n }\\n e.NodeCanvasFactory = NodeCanvasFactory;\\n class NodeCMapReaderFactory extends i.BaseCMapReaderFactory {\\n _fetchData(t, e) {\\n return fetchData(t).then(t => ({\\n cMapData: t,\\n compressionType: e\\n }));\\n }\\n }\\n e.NodeCMapReaderFactory = NodeCMapReaderFactory;\\n class NodeStandardFontDataFactory extends i.BaseStandardFontDataFactory {\\n _fetchData(t) {\\n return fetchData(t);\\n }\\n }\\n e.NodeStandardFontDataFactory = NodeStandardFontDataFactory;\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n Object.defineProperty(e, \\"__esModule\\", {\\n value: !0\\n });\\n e.CanvasGraphics = void 0;\\n n(2);\\n n(93);\\n n(101);\\n n(102);\\n n(105);\\n n(107);\\n n(109);\\n n(113);\\n n(116);\\n n(123);\\n n(89);\\n var i = n(1),\\n r = n(167),\\n s = n(173),\\n a = n(174);\\n const o = 4096,\\n l = 16;\\n class CachedCanvases {\\n constructor(t) {\\n this.canvasFactory = t;\\n this.cache = Object.create(null);\\n }\\n getCanvas(t, e, n) {\\n let i;\\n if (void 0 !== this.cache[t]) {\\n i = this.cache[t];\\n this.canvasFactory.reset(i, e, n);\\n } else {\\n i = this.canvasFactory.create(e, n);\\n this.cache[t] = i;\\n }\\n return i;\\n }\\n delete(t) {\\n delete this.cache[t];\\n }\\n clear() {\\n for (const t in this.cache) {\\n const e = this.cache[t];\\n this.canvasFactory.destroy(e);\\n delete this.cache[t];\\n }\\n }\\n }\\n function drawImageAtIntegerCoords(t, e, n, i, s, a, o, l, c, h) {\\n const [d, u, p, f, g, m] = (0, r.getCurrentTransform)(t);\\n if (0 === u && 0 === p) {\\n const r = o * d + g,\\n b = Math.round(r),\\n v = l * f + m,\\n y = Math.round(v),\\n A = (o + c) * d + g,\\n _ = Math.abs(Math.round(A) - b) || 1,\\n S = (l + h) * f + m,\\n E = Math.abs(Math.round(S) - y) || 1;\\n t.setTransform(Math.sign(d), 0, 0, Math.sign(f), b, y);\\n t.drawImage(e, n, i, s, a, 0, 0, _, E);\\n t.setTransform(d, u, p, f, g, m);\\n return [_, E];\\n }\\n if (0 === d && 0 === f) {\\n const r = l * p + g,\\n b = Math.round(r),\\n v = o * u + m,\\n y = Math.round(v),\\n A = (l + h) * p + g,\\n _ = Math.abs(Math.round(A) - b) || 1,\\n S = (o + c) * u + m,\\n E = Math.abs(Math.round(S) - y) || 1;\\n t.setTransform(0, Math.sign(u), Math.sign(p), 0, b, y);\\n t.drawImage(e, n, i, s, a, 0, 0, E, _);\\n t.setTransform(d, u, p, f, g, m);\\n return [E, _];\\n }\\n t.drawImage(e, n, i, s, a, o, l, c, h);\\n return [Math.hypot(d, u) * c, Math.hypot(p, f) * h];\\n }\\n class CanvasExtraState {\\n constructor(t, e) {\\n this.alphaIsShape = !1;\\n this.fontSize = 0;\\n this.fontSizeScale = 1;\\n this.textMatrix = i.IDENTITY_MATRIX;\\n this.textMatrixScale = 1;\\n this.fontMatrix = i.FONT_IDENTITY_MATRIX;\\n this.leading = 0;\\n this.x = 0;\\n this.y = 0;\\n this.lineX = 0;\\n this.lineY = 0;\\n this.charSpacing = 0;\\n this.wordSpacing = 0;\\n this.textHScale = 1;\\n this.textRenderingMode = i.TextRenderingMode.FILL;\\n this.textRise = 0;\\n this.fillColor = \\"#000000\\";\\n this.strokeColor = \\"#000000\\";\\n this.patternFill = !1;\\n this.fillAlpha = 1;\\n this.strokeAlpha = 1;\\n this.lineWidth = 1;\\n this.activeSMask = null;\\n this.transferMaps = \\"none\\";\\n this.startNewPathAndClipBox([0, 0, t, e]);\\n }\\n clone() {\\n const t = Object.create(this);\\n t.clipBox = this.clipBox.slice();\\n return t;\\n }\\n setCurrentPoint(t, e) {\\n this.x = t;\\n this.y = e;\\n }\\n updatePathMinMax(t, e, n) {\\n [e, n] = i.Util.applyTransform([e, n], t);\\n this.minX = Math.min(this.minX, e);\\n this.minY = Math.min(this.minY, n);\\n this.maxX = Math.max(this.maxX, e);\\n this.maxY = Math.max(this.maxY, n);\\n }\\n updateRectMinMax(t, e) {\\n const n = i.Util.applyTransform(e, t),\\n r = i.Util.applyTransform(e.slice(2), t);\\n this.minX = Math.min(this.minX, n[0], r[0]);\\n this.minY = Math.min(this.minY, n[1], r[1]);\\n this.maxX = Math.max(this.maxX, n[0], r[0]);\\n this.maxY = Math.max(this.maxY, n[1], r[1]);\\n }\\n updateScalingPathMinMax(t, e) {\\n i.Util.scaleMinMax(t, e);\\n this.minX = Math.min(this.minX, e[0]);\\n this.maxX = Math.max(this.maxX, e[1]);\\n this.minY = Math.min(this.minY, e[2]);\\n this.maxY = Math.max(this.maxY, e[3]);\\n }\\n updateCurvePathMinMax(t, e, n, r, s, a, o, l, c, h) {\\n const d = i.Util.bezierBoundingBox(e, n, r, s, a, o, l, c);\\n if (h) {\\n h[0] = Math.min(h[0], d[0], d[2]);\\n h[1] = Math.max(h[1], d[0], d[2]);\\n h[2] = Math.min(h[2], d[1], d[3]);\\n h[3] = Math.max(h[3], d[1], d[3]);\\n } else this.updateRectMinMax(t, d);\\n }\\n getPathBoundingBox() {\\n let t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : s.PathType.FILL,\\n e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null;\\n const n = [this.minX, this.minY, this.maxX, this.maxY];\\n if (t === s.PathType.STROKE) {\\n e || (0, i.unreachable)(\\"Stroke bounding box must include transform.\\");\\n const t = i.Util.singularValueDecompose2dScale(e),\\n r = t[0] * this.lineWidth / 2,\\n s = t[1] * this.lineWidth / 2;\\n n[0] -= r;\\n n[1] -= s;\\n n[2] += r;\\n n[3] += s;\\n }\\n return n;\\n }\\n updateClipFromPath() {\\n const t = i.Util.intersect(this.clipBox, this.getPathBoundingBox());\\n this.startNewPathAndClipBox(t || [0, 0, 0, 0]);\\n }\\n isEmptyClip() {\\n return this.minX === 1 / 0;\\n }\\n startNewPathAndClipBox(t) {\\n this.clipBox = t;\\n this.minX = 1 / 0;\\n this.minY = 1 / 0;\\n this.maxX = 0;\\n this.maxY = 0;\\n }\\n getClippedPathBoundingBox() {\\n let t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : s.PathType.FILL,\\n e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null;\\n return i.Util.intersect(this.clipBox, this.getPathBoundingBox(t, e));\\n }\\n }\\n function putBinaryImageData(t, e) {\\n if (\\"undefined\\" != typeof ImageData && e instanceof ImageData) {\\n t.putImageData(e, 0, 0);\\n return;\\n }\\n const n = e.height,\\n r = e.width,\\n s = n % l,\\n a = (n - s) / l,\\n o = 0 === s ? a : a + 1,\\n c = t.createImageData(r, l);\\n let h,\\n d = 0;\\n const u = e.data,\\n p = c.data;\\n let f, g, m, b;\\n if (e.kind === i.ImageKind.GRAYSCALE_1BPP) {\\n const e = u.byteLength,\\n n = new Uint32Array(p.buffer, 0, p.byteLength >> 2),\\n b = n.length,\\n v = r + 7 >> 3,\\n y = 4294967295,\\n A = i.FeatureTest.isLittleEndian ? 4278190080 : 255;\\n for (f = 0; f < o; f++) {\\n m = f < a ? l : s;\\n h = 0;\\n for (g = 0; g < m; g++) {\\n const t = e - d;\\n let i = 0;\\n const s = t > v ? r : 8 * t - 7,\\n a = -8 & s;\\n let o = 0,\\n l = 0;\\n for (; i < a; i += 8) {\\n l = u[d++];\\n n[h++] = 128 & l ? y : A;\\n n[h++] = 64 & l ? y : A;\\n n[h++] = 32 & l ? y : A;\\n n[h++] = 16 & l ? y : A;\\n n[h++] = 8 & l ? y : A;\\n n[h++] = 4 & l ? y : A;\\n n[h++] = 2 & l ? y : A;\\n n[h++] = 1 & l ? y : A;\\n }\\n for (; i < s; i++) {\\n if (0 === o) {\\n l = u[d++];\\n o = 128;\\n }\\n n[h++] = l & o ? y : A;\\n o >>= 1;\\n }\\n }\\n for (; h < b;) n[h++] = 0;\\n t.putImageData(c, 0, f * l);\\n }\\n } else if (e.kind === i.ImageKind.RGBA_32BPP) {\\n g = 0;\\n b = r * l * 4;\\n for (f = 0; f < a; f++) {\\n p.set(u.subarray(d, d + b));\\n d += b;\\n t.putImageData(c, 0, g);\\n g += l;\\n }\\n if (f < o) {\\n b = r * s * 4;\\n p.set(u.subarray(d, d + b));\\n t.putImageData(c, 0, g);\\n }\\n } else {\\n if (e.kind !== i.ImageKind.RGB_24BPP) throw new Error(\\"bad image kind: \\".concat(e.kind));\\n m = l;\\n b = r * m;\\n for (f = 0; f < o; f++) {\\n if (f >= a) {\\n m = s;\\n b = r * m;\\n }\\n h = 0;\\n for (g = b; g--;) {\\n p[h++] = u[d++];\\n p[h++] = u[d++];\\n p[h++] = u[d++];\\n p[h++] = 255;\\n }\\n t.putImageData(c, 0, f * l);\\n }\\n }\\n }\\n function putBinaryImageMask(t, e) {\\n if (e.bitmap) {\\n t.drawImage(e.bitmap, 0, 0);\\n return;\\n }\\n const n = e.height,\\n i = e.width,\\n r = n % l,\\n s = (n - r) / l,\\n o = 0 === r ? s : s + 1,\\n c = t.createImageData(i, l);\\n let h = 0;\\n const d = e.data,\\n u = c.data;\\n for (let e = 0; e < o; e++) {\\n const n = e < s ? l : r;\\n ({\\n srcPos: h\\n } = (0, a.convertBlackAndWhiteToRGBA)({\\n src: d,\\n srcPos: h,\\n dest: u,\\n width: i,\\n height: n,\\n nonBlackColor: 0\\n }));\\n t.putImageData(c, 0, e * l);\\n }\\n }\\n function copyCtxState(t, e) {\\n const n = [\\"strokeStyle\\", \\"fillStyle\\", \\"fillRule\\", \\"globalAlpha\\", \\"lineWidth\\", \\"lineCap\\", \\"lineJoin\\", \\"miterLimit\\", \\"globalCompositeOperation\\", \\"font\\", \\"filter\\"];\\n for (const i of n) void 0 !== t[i] && (e[i] = t[i]);\\n if (void 0 !== t.setLineDash) {\\n e.setLineDash(t.getLineDash());\\n e.lineDashOffset = t.lineDashOffset;\\n }\\n }\\n function resetCtxToDefault(t) {\\n t.strokeStyle = t.fillStyle = \\"#000000\\";\\n t.fillRule = \\"nonzero\\";\\n t.globalAlpha = 1;\\n t.lineWidth = 1;\\n t.lineCap = \\"butt\\";\\n t.lineJoin = \\"miter\\";\\n t.miterLimit = 10;\\n t.globalCompositeOperation = \\"source-over\\";\\n t.font = \\"10px sans-serif\\";\\n if (void 0 !== t.setLineDash) {\\n t.setLineDash([]);\\n t.lineDashOffset = 0;\\n }\\n if (!i.isNodeJS) {\\n const {\\n filter: e\\n } = t;\\n \\"none\\" !== e && \\"\\" !== e && (t.filter = \\"none\\");\\n }\\n }\\n function composeSMaskBackdrop(t, e, n, i) {\\n const r = t.length;\\n for (let s = 3; s < r; s += 4) {\\n const r = t[s];\\n if (0 === r) {\\n t[s - 3] = e;\\n t[s - 2] = n;\\n t[s - 1] = i;\\n } else if (r < 255) {\\n const a = 255 - r;\\n t[s - 3] = t[s - 3] * r + e * a >> 8;\\n t[s - 2] = t[s - 2] * r + n * a >> 8;\\n t[s - 1] = t[s - 1] * r + i * a >> 8;\\n }\\n }\\n }\\n function composeSMaskAlpha(t, e, n) {\\n const i = t.length;\\n for (let r = 3; r < i; r += 4) {\\n const i = n ? n[t[r]] : t[r];\\n e[r] = e[r] * i * .00392156862745098 | 0;\\n }\\n }\\n function composeSMaskLuminosity(t, e, n) {\\n const i = t.length;\\n for (let r = 3; r < i; r += 4) {\\n const i = 77 * t[r - 3] + 152 * t[r - 2] + 28 * t[r - 1];\\n e[r] = n ? e[r] * n[i >> 8] >> 8 : e[r] * i >> 16;\\n }\\n }\\n function composeSMask(t, e, n, i) {\\n const r = i[0],\\n s = i[1],\\n a = i[2] - r,\\n o = i[3] - s;\\n if (0 !== a && 0 !== o) {\\n !function genericComposeSMask(t, e, n, i, r, s, a, o, l, c, h) {\\n const d = !!s,\\n u = d ? s[0] : 0,\\n p = d ? s[1] : 0,\\n f = d ? s[2] : 0,\\n g = \\"Luminosity\\" === r ? composeSMaskLuminosity : composeSMaskAlpha,\\n m = Math.min(i, Math.ceil(1048576 / n));\\n for (let r = 0; r < i; r += m) {\\n const s = Math.min(m, i - r),\\n b = t.getImageData(o - c, r + (l - h), n, s),\\n v = e.getImageData(o, r + l, n, s);\\n d && composeSMaskBackdrop(b.data, u, p, f);\\n g(b.data, v.data, a);\\n e.putImageData(v, o, r + l);\\n }\\n }(e.context, n, a, o, e.subtype, e.backdrop, e.transferMap, r, s, e.offsetX, e.offsetY);\\n t.save();\\n t.globalAlpha = 1;\\n t.globalCompositeOperation = \\"source-over\\";\\n t.setTransform(1, 0, 0, 1, 0, 0);\\n t.drawImage(n.canvas, 0, 0);\\n t.restore();\\n }\\n }\\n function getImageSmoothingEnabled(t, e) {\\n const n = i.Util.singularValueDecompose2dScale(t);\\n n[0] = Math.fround(n[0]);\\n n[1] = Math.fround(n[1]);\\n const s = Math.fround((globalThis.devicePixelRatio || 1) * r.PixelsPerInch.PDF_TO_CSS_UNITS);\\n return void 0 !== e ? e : n[0] <= s || n[1] <= s;\\n }\\n const c = [\\"butt\\", \\"round\\", \\"square\\"],\\n h = [\\"miter\\", \\"round\\", \\"bevel\\"],\\n d = {},\\n u = {};\\n var _Gt = /*#__PURE__*/new WeakSet();\\n var _Vt = /*#__PURE__*/new WeakSet();\\n class CanvasGraphics {\\n constructor(_t10, _e9, n, i, r, s, a, o) {\\n _classPrivateMethodInitSpec(this, _Vt);\\n _classPrivateMethodInitSpec(this, _Gt);\\n let {\\n optionalContentConfig: l,\\n markedContentStack: c = null\\n } = s;\\n this.ctx = _t10;\\n this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height);\\n this.stateStack = [];\\n this.pendingClip = null;\\n this.pendingEOFill = !1;\\n this.res = null;\\n this.xobjs = null;\\n this.commonObjs = _e9;\\n this.objs = n;\\n this.canvasFactory = i;\\n this.filterFactory = r;\\n this.groupStack = [];\\n this.processingType3 = null;\\n this.baseTransform = null;\\n this.baseTransformStack = [];\\n this.groupLevel = 0;\\n this.smaskStack = [];\\n this.smaskCounter = 0;\\n this.tempSMask = null;\\n this.suspendedCtx = null;\\n this.contentVisible = !0;\\n this.markedContentStack = c || [];\\n this.optionalContentConfig = l;\\n this.cachedCanvases = new CachedCanvases(this.canvasFactory);\\n this.cachedPatterns = new Map();\\n this.annotationCanvasMap = a;\\n this.viewportScale = 1;\\n this.outputScaleX = 1;\\n this.outputScaleY = 1;\\n this.pageColors = o;\\n this._cachedScaleForStroking = [-1, 0];\\n this._cachedGetSinglePixelWidth = null;\\n this._cachedBitmapsMap = new Map();\\n }\\n getObject(t) {\\n let e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null;\\n return \\"string\\" == typeof t ? t.startsWith(\\"g_\\") ? this.commonObjs.get(t) : this.objs.get(t) : e;\\n }\\n beginDrawing(t) {\\n let {\\n transform: e,\\n viewport: n,\\n transparency: i = !1,\\n background: s = null\\n } = t;\\n const a = this.ctx.canvas.width,\\n o = this.ctx.canvas.height,\\n l = this.ctx.fillStyle;\\n this.ctx.fillStyle = s || \\"#ffffff\\";\\n this.ctx.fillRect(0, 0, a, o);\\n this.ctx.fillStyle = l;\\n if (i) {\\n const t = this.cachedCanvases.getCanvas(\\"transparent\\", a, o);\\n this.compositeCtx = this.ctx;\\n this.transparentCanvas = t.canvas;\\n this.ctx = t.context;\\n this.ctx.save();\\n this.ctx.transform(...(0, r.getCurrentTransform)(this.compositeCtx));\\n }\\n this.ctx.save();\\n resetCtxToDefault(this.ctx);\\n if (e) {\\n this.ctx.transform(...e);\\n this.outputScaleX = e[0];\\n this.outputScaleY = e[0];\\n }\\n this.ctx.transform(...n.transform);\\n this.viewportScale = n.scale;\\n this.baseTransform = (0, r.getCurrentTransform)(this.ctx);\\n }\\n executeOperatorList(t, e, n, r) {\\n const s = t.argsArray,\\n a = t.fnArray;\\n let o = e || 0;\\n const l = s.length;\\n if (l === o) return o;\\n const c = l - o > 10 && \\"function\\" == typeof n,\\n h = c ? Date.now() + 15 : 0;\\n let d = 0;\\n const u = this.commonObjs,\\n p = this.objs;\\n let f;\\n for (;;) {\\n if (void 0 !== r && o === r.nextBreakPoint) {\\n r.breakIt(o, n);\\n return o;\\n }\\n f = a[o];\\n if (f !== i.OPS.dependency) this[f].apply(this, s[o]);else for (const t of s[o]) {\\n const e = t.startsWith(\\"g_\\") ? u : p;\\n if (!e.has(t)) {\\n e.get(t, n);\\n return o;\\n }\\n }\\n o++;\\n if (o === l) return o;\\n if (c && ++d > 10) {\\n if (Date.now() > h) {\\n n();\\n return o;\\n }\\n d = 0;\\n }\\n }\\n }\\n endDrawing() {\\n _classPrivateMethodGet(this, _Gt, _Gt2).call(this);\\n this.cachedCanvases.clear();\\n this.cachedPatterns.clear();\\n for (const t of this._cachedBitmapsMap.values()) {\\n for (const e of t.values()) \\"undefined\\" != typeof HTMLCanvasElement && e instanceof HTMLCanvasElement && (e.width = e.height = 0);\\n t.clear();\\n }\\n this._cachedBitmapsMap.clear();\\n _classPrivateMethodGet(this, _Vt, _Vt2).call(this);\\n }\\n _scaleImage(t, e) {\\n const n = t.width,\\n i = t.height;\\n let r,\\n s,\\n a = Math.max(Math.hypot(e[0], e[1]), 1),\\n o = Math.max(Math.hypot(e[2], e[3]), 1),\\n l = n,\\n c = i,\\n h = \\"prescale1\\";\\n for (; a > 2 && l > 1 || o > 2 && c > 1;) {\\n let e = l,\\n n = c;\\n if (a > 2 && l > 1) {\\n e = l >= 16384 ? Math.floor(l / 2) - 1 || 1 : Math.ceil(l / 2);\\n a /= l / e;\\n }\\n if (o > 2 && c > 1) {\\n n = c >= 16384 ? Math.floor(c / 2) - 1 || 1 : Math.ceil(c) / 2;\\n o /= c / n;\\n }\\n r = this.cachedCanvases.getCanvas(h, e, n);\\n s = r.context;\\n s.clearRect(0, 0, e, n);\\n s.drawImage(t, 0, 0, l, c, 0, 0, e, n);\\n t = r.canvas;\\n l = e;\\n c = n;\\n h = \\"prescale1\\" === h ? \\"prescale2\\" : \\"prescale1\\";\\n }\\n return {\\n img: t,\\n paintWidth: l,\\n paintHeight: c\\n };\\n }\\n _createMaskCanvas(t) {\\n const e = this.ctx,\\n {\\n width: n,\\n height: a\\n } = t,\\n o = this.current.fillColor,\\n l = this.current.patternFill,\\n c = (0, r.getCurrentTransform)(e);\\n let h, d, u, p;\\n if ((t.bitmap || t.data) && t.count > 1) {\\n const e = t.bitmap || t.data.buffer;\\n d = JSON.stringify(l ? c : [c.slice(0, 4), o]);\\n h = this._cachedBitmapsMap.get(e);\\n if (!h) {\\n h = new Map();\\n this._cachedBitmapsMap.set(e, h);\\n }\\n const n = h.get(d);\\n if (n && !l) {\\n return {\\n canvas: n,\\n offsetX: Math.round(Math.min(c[0], c[2]) + c[4]),\\n offsetY: Math.round(Math.min(c[1], c[3]) + c[5])\\n };\\n }\\n u = n;\\n }\\n if (!u) {\\n p = this.cachedCanvases.getCanvas(\\"maskCanvas\\", n, a);\\n putBinaryImageMask(p.context, t);\\n }\\n let f = i.Util.transform(c, [1 / n, 0, 0, -1 / a, 0, 0]);\\n f = i.Util.transform(f, [1, 0, 0, 1, 0, -a]);\\n const g = i.Util.applyTransform([0, 0], f),\\n m = i.Util.applyTransform([n, a], f),\\n b = i.Util.normalizeRect([g[0], g[1], m[0], m[1]]),\\n v = Math.round(b[2] - b[0]) || 1,\\n y = Math.round(b[3] - b[1]) || 1,\\n A = this.cachedCanvases.getCanvas(\\"fillCanvas\\", v, y),\\n _ = A.context,\\n S = Math.min(g[0], m[0]),\\n E = Math.min(g[1], m[1]);\\n _.translate(-S, -E);\\n _.transform(...f);\\n if (!u) {\\n u = this._scaleImage(p.canvas, (0, r.getCurrentTransformInverse)(_));\\n u = u.img;\\n h && l && h.set(d, u);\\n }\\n _.imageSmoothingEnabled = getImageSmoothingEnabled((0, r.getCurrentTransform)(_), t.interpolate);\\n drawImageAtIntegerCoords(_, u, 0, 0, u.width, u.height, 0, 0, n, a);\\n _.globalCompositeOperation = \\"source-in\\";\\n const x = i.Util.transform((0, r.getCurrentTransformInverse)(_), [1, 0, 0, 1, -S, -E]);\\n _.fillStyle = l ? o.getPattern(e, this, x, s.PathType.FILL) : o;\\n _.fillRect(0, 0, n, a);\\n if (h && !l) {\\n this.cachedCanvases.delete(\\"fillCanvas\\");\\n h.set(d, A.canvas);\\n }\\n return {\\n canvas: A.canvas,\\n offsetX: Math.round(S),\\n offsetY: Math.round(E)\\n };\\n }\\n setLineWidth(t) {\\n t !== this.current.lineWidth && (this._cachedScaleForStroking[0] = -1);\\n this.current.lineWidth = t;\\n this.ctx.lineWidth = t;\\n }\\n setLineCap(t) {\\n this.ctx.lineCap = c[t];\\n }\\n setLineJoin(t) {\\n this.ctx.lineJoin = h[t];\\n }\\n setMiterLimit(t) {\\n this.ctx.miterLimit = t;\\n }\\n setDash(t, e) {\\n const n = this.ctx;\\n if (void 0 !== n.setLineDash) {\\n n.setLineDash(t);\\n n.lineDashOffset = e;\\n }\\n }\\n setRenderingIntent(t) {}\\n setFlatness(t) {}\\n setGState(t) {\\n for (const [e, n] of t) switch (e) {\\n case \\"LW\\":\\n this.setLineWidth(n);\\n break;\\n case \\"LC\\":\\n this.setLineCap(n);\\n break;\\n case \\"LJ\\":\\n this.setLineJoin(n);\\n break;\\n case \\"ML\\":\\n this.setMiterLimit(n);\\n break;\\n case \\"D\\":\\n this.setDash(n[0], n[1]);\\n break;\\n case \\"RI\\":\\n this.setRenderingIntent(n);\\n break;\\n case \\"FL\\":\\n this.setFlatness(n);\\n break;\\n case \\"Font\\":\\n this.setFont(n[0], n[1]);\\n break;\\n case \\"CA\\":\\n this.current.strokeAlpha = n;\\n break;\\n case \\"ca\\":\\n this.current.fillAlpha = n;\\n this.ctx.globalAlpha = n;\\n break;\\n case \\"BM\\":\\n this.ctx.globalCompositeOperation = n;\\n break;\\n case \\"SMask\\":\\n this.current.activeSMask = n ? this.tempSMask : null;\\n this.tempSMask = null;\\n this.checkSMaskState();\\n break;\\n case \\"TR\\":\\n this.ctx.filter = this.current.transferMaps = this.filterFactory.addFilter(n);\\n }\\n }\\n get inSMaskMode() {\\n return !!this.suspendedCtx;\\n }\\n checkSMaskState() {\\n const t = this.inSMaskMode;\\n this.current.activeSMask && !t ? this.beginSMaskMode() : !this.current.activeSMask && t && this.endSMaskMode();\\n }\\n beginSMaskMode() {\\n if (this.inSMaskMode) throw new Error(\\"beginSMaskMode called while already in smask mode\\");\\n const t = this.ctx.canvas.width,\\n e = this.ctx.canvas.height,\\n n = \\"smaskGroupAt\\" + this.groupLevel,\\n i = this.cachedCanvases.getCanvas(n, t, e);\\n this.suspendedCtx = this.ctx;\\n this.ctx = i.context;\\n const s = this.ctx;\\n s.setTransform(...(0, r.getCurrentTransform)(this.suspendedCtx));\\n copyCtxState(this.suspendedCtx, s);\\n !function mirrorContextOperations(t, e) {\\n if (t._removeMirroring) throw new Error(\\"Context is already forwarding operations.\\");\\n t.__originalSave = t.save;\\n t.__originalRestore = t.restore;\\n t.__originalRotate = t.rotate;\\n t.__originalScale = t.scale;\\n t.__originalTranslate = t.translate;\\n t.__originalTransform = t.transform;\\n t.__originalSetTransform = t.setTransform;\\n t.__originalResetTransform = t.resetTransform;\\n t.__originalClip = t.clip;\\n t.__originalMoveTo = t.moveTo;\\n t.__originalLineTo = t.lineTo;\\n t.__originalBezierCurveTo = t.bezierCurveTo;\\n t.__originalRect = t.rect;\\n t.__originalClosePath = t.closePath;\\n t.__originalBeginPath = t.beginPath;\\n t._removeMirroring = () => {\\n t.save = t.__originalSave;\\n t.restore = t.__originalRestore;\\n t.rotate = t.__originalRotate;\\n t.scale = t.__originalScale;\\n t.translate = t.__originalTranslate;\\n t.transform = t.__originalTransform;\\n t.setTransform = t.__originalSetTransform;\\n t.resetTransform = t.__originalResetTransform;\\n t.clip = t.__originalClip;\\n t.moveTo = t.__originalMoveTo;\\n t.lineTo = t.__originalLineTo;\\n t.bezierCurveTo = t.__originalBezierCurveTo;\\n t.rect = t.__originalRect;\\n t.closePath = t.__originalClosePath;\\n t.beginPath = t.__originalBeginPath;\\n delete t._removeMirroring;\\n };\\n t.save = function ctxSave() {\\n e.save();\\n this.__originalSave();\\n };\\n t.restore = function ctxRestore() {\\n e.restore();\\n this.__originalRestore();\\n };\\n t.translate = function ctxTranslate(t, n) {\\n e.translate(t, n);\\n this.__originalTranslate(t, n);\\n };\\n t.scale = function ctxScale(t, n) {\\n e.scale(t, n);\\n this.__originalScale(t, n);\\n };\\n t.transform = function ctxTransform(t, n, i, r, s, a) {\\n e.transform(t, n, i, r, s, a);\\n this.__originalTransform(t, n, i, r, s, a);\\n };\\n t.setTransform = function ctxSetTransform(t, n, i, r, s, a) {\\n e.setTransform(t, n, i, r, s, a);\\n this.__originalSetTransform(t, n, i, r, s, a);\\n };\\n t.resetTransform = function ctxResetTransform() {\\n e.resetTransform();\\n this.__originalResetTransform();\\n };\\n t.rotate = function ctxRotate(t) {\\n e.rotate(t);\\n this.__originalRotate(t);\\n };\\n t.clip = function ctxRotate(t) {\\n e.clip(t);\\n this.__originalClip(t);\\n };\\n t.moveTo = function (t, n) {\\n e.moveTo(t, n);\\n this.__originalMoveTo(t, n);\\n };\\n t.lineTo = function (t, n) {\\n e.lineTo(t, n);\\n this.__originalLineTo(t, n);\\n };\\n t.bezierCurveTo = function (t, n, i, r, s, a) {\\n e.bezierCurveTo(t, n, i, r, s, a);\\n this.__originalBezierCurveTo(t, n, i, r, s, a);\\n };\\n t.rect = function (t, n, i, r) {\\n e.rect(t, n, i, r);\\n this.__originalRect(t, n, i, r);\\n };\\n t.closePath = function () {\\n e.closePath();\\n this.__originalClosePath();\\n };\\n t.beginPath = function () {\\n e.beginPath();\\n this.__originalBeginPath();\\n };\\n }(s, this.suspendedCtx);\\n this.setGState([[\\"BM\\", \\"source-over\\"], [\\"ca\\", 1], [\\"CA\\", 1]]);\\n }\\n endSMaskMode() {\\n if (!this.inSMaskMode) throw new Error(\\"endSMaskMode called while not in smask mode\\");\\n this.ctx._removeMirroring();\\n copyCtxState(this.ctx, this.suspendedCtx);\\n this.ctx = this.suspendedCtx;\\n this.suspendedCtx = null;\\n }\\n compose(t) {\\n if (!this.current.activeSMask) return;\\n if (t) {\\n t[0] = Math.floor(t[0]);\\n t[1] = Math.floor(t[1]);\\n t[2] = Math.ceil(t[2]);\\n t[3] = Math.ceil(t[3]);\\n } else t = [0, 0, this.ctx.canvas.width, this.ctx.canvas.height];\\n const e = this.current.activeSMask;\\n composeSMask(this.suspendedCtx, e, this.ctx, t);\\n this.ctx.save();\\n this.ctx.setTransform(1, 0, 0, 1, 0, 0);\\n this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);\\n this.ctx.restore();\\n }\\n save() {\\n if (this.inSMaskMode) {\\n copyCtxState(this.ctx, this.suspendedCtx);\\n this.suspendedCtx.save();\\n } else this.ctx.save();\\n const t = this.current;\\n this.stateStack.push(t);\\n this.current = t.clone();\\n }\\n restore() {\\n 0 === this.stateStack.length && this.inSMaskMode && this.endSMaskMode();\\n if (0 !== this.stateStack.length) {\\n this.current = this.stateStack.pop();\\n if (this.inSMaskMode) {\\n this.suspendedCtx.restore();\\n copyCtxState(this.suspendedCtx, this.ctx);\\n } else this.ctx.restore();\\n this.checkSMaskState();\\n this.pendingClip = null;\\n this._cachedScaleForStroking[0] = -1;\\n this._cachedGetSinglePixelWidth = null;\\n }\\n }\\n transform(t, e, n, i, r, s) {\\n this.ctx.transform(t, e, n, i, r, s);\\n this._cachedScaleForStroking[0] = -1;\\n this._cachedGetSinglePixelWidth = null;\\n }\\n constructPath(t, e, n) {\\n const s = this.ctx,\\n a = this.current;\\n let o,\\n l,\\n c = a.x,\\n h = a.y;\\n const d = (0, r.getCurrentTransform)(s),\\n u = 0 === d[0] && 0 === d[3] || 0 === d[1] && 0 === d[2],\\n p = u ? n.slice(0) : null;\\n for (let n = 0, r = 0, f = t.length; n < f; n++) switch (0 | t[n]) {\\n case i.OPS.rectangle:\\n c = e[r++];\\n h = e[r++];\\n const t = e[r++],\\n n = e[r++],\\n f = c + t,\\n g = h + n;\\n s.moveTo(c, h);\\n if (0 === t || 0 === n) s.lineTo(f, g);else {\\n s.lineTo(f, h);\\n s.lineTo(f, g);\\n s.lineTo(c, g);\\n }\\n u || a.updateRectMinMax(d, [c, h, f, g]);\\n s.closePath();\\n break;\\n case i.OPS.moveTo:\\n c = e[r++];\\n h = e[r++];\\n s.moveTo(c, h);\\n u || a.updatePathMinMax(d, c, h);\\n break;\\n case i.OPS.lineTo:\\n c = e[r++];\\n h = e[r++];\\n s.lineTo(c, h);\\n u || a.updatePathMinMax(d, c, h);\\n break;\\n case i.OPS.curveTo:\\n o = c;\\n l = h;\\n c = e[r + 4];\\n h = e[r + 5];\\n s.bezierCurveTo(e[r], e[r + 1], e[r + 2], e[r + 3], c, h);\\n a.updateCurvePathMinMax(d, o, l, e[r], e[r + 1], e[r + 2], e[r + 3], c, h, p);\\n r += 6;\\n break;\\n case i.OPS.curveTo2:\\n o = c;\\n l = h;\\n s.bezierCurveTo(c, h, e[r], e[r + 1], e[r + 2], e[r + 3]);\\n a.updateCurvePathMinMax(d, o, l, c, h, e[r], e[r + 1], e[r + 2], e[r + 3], p);\\n c = e[r + 2];\\n h = e[r + 3];\\n r += 4;\\n break;\\n case i.OPS.curveTo3:\\n o = c;\\n l = h;\\n c = e[r + 2];\\n h = e[r + 3];\\n s.bezierCurveTo(e[r], e[r + 1], c, h, c, h);\\n a.updateCurvePathMinMax(d, o, l, e[r], e[r + 1], c, h, c, h, p);\\n r += 4;\\n break;\\n case i.OPS.closePath:\\n s.closePath();\\n }\\n u && a.updateScalingPathMinMax(d, p);\\n a.setCurrentPoint(c, h);\\n }\\n closePath() {\\n this.ctx.closePath();\\n }\\n stroke() {\\n let t = !(arguments.length > 0 && void 0 !== arguments[0]) || arguments[0];\\n const e = this.ctx,\\n n = this.current.strokeColor;\\n e.globalAlpha = this.current.strokeAlpha;\\n if (this.contentVisible) if (\\"object\\" == typeof n && n !== null && n !== void 0 && n.getPattern) {\\n e.save();\\n e.strokeStyle = n.getPattern(e, this, (0, r.getCurrentTransformInverse)(e), s.PathType.STROKE);\\n this.rescaleAndStroke(!1);\\n e.restore();\\n } else this.rescaleAndStroke(!0);\\n t && this.consumePath(this.current.getClippedPathBoundingBox());\\n e.globalAlpha = this.current.fillAlpha;\\n }\\n closeStroke() {\\n this.closePath();\\n this.stroke();\\n }\\n fill() {\\n let t = !(arguments.length > 0 && void 0 !== arguments[0]) || arguments[0];\\n const e = this.ctx,\\n n = this.current.fillColor;\\n let i = !1;\\n if (this.current.patternFill) {\\n e.save();\\n e.fillStyle = n.getPattern(e, this, (0, r.getCurrentTransformInverse)(e), s.PathType.FILL);\\n i = !0;\\n }\\n const a = this.current.getClippedPathBoundingBox();\\n if (this.contentVisible && null !== a) if (this.pendingEOFill) {\\n e.fill(\\"evenodd\\");\\n this.pendingEOFill = !1;\\n } else e.fill();\\n i && e.restore();\\n t && this.consumePath(a);\\n }\\n eoFill() {\\n this.pendingEOFill = !0;\\n this.fill();\\n }\\n fillStroke() {\\n this.fill(!1);\\n this.stroke(!1);\\n this.consumePath();\\n }\\n eoFillStroke() {\\n this.pendingEOFill = !0;\\n this.fillStroke();\\n }\\n closeFillStroke() {\\n this.closePath();\\n this.fillStroke();\\n }\\n closeEOFillStroke() {\\n this.pendingEOFill = !0;\\n this.closePath();\\n this.fillStroke();\\n }\\n endPath() {\\n this.consumePath();\\n }\\n clip() {\\n this.pendingClip = d;\\n }\\n eoClip() {\\n this.pendingClip = u;\\n }\\n beginText() {\\n this.current.textMatrix = i.IDENTITY_MATRIX;\\n this.current.textMatrixScale = 1;\\n this.current.x = this.current.lineX = 0;\\n this.current.y = this.current.lineY = 0;\\n }\\n endText() {\\n const t = this.pendingTextPaths,\\n e = this.ctx;\\n if (void 0 !== t) {\\n e.save();\\n e.beginPath();\\n for (const n of t) {\\n e.setTransform(...n.transform);\\n e.translate(n.x, n.y);\\n n.addToPath(e, n.fontSize);\\n }\\n e.restore();\\n e.clip();\\n e.beginPath();\\n delete this.pendingTextPaths;\\n } else e.beginPath();\\n }\\n setCharSpacing(t) {\\n this.current.charSpacing = t;\\n }\\n setWordSpacing(t) {\\n this.current.wordSpacing = t;\\n }\\n setHScale(t) {\\n this.current.textHScale = t / 100;\\n }\\n setLeading(t) {\\n this.current.leading = -t;\\n }\\n setFont(t, e) {\\n var _n$systemFontInfo;\\n const n = this.commonObjs.get(t),\\n r = this.current;\\n if (!n) throw new Error(\\"Can't find font for \\".concat(t));\\n r.fontMatrix = n.fontMatrix || i.FONT_IDENTITY_MATRIX;\\n 0 !== r.fontMatrix[0] && 0 !== r.fontMatrix[3] || (0, i.warn)(\\"Invalid font matrix for font \\" + t);\\n if (e < 0) {\\n e = -e;\\n r.fontDirection = -1;\\n } else r.fontDirection = 1;\\n this.current.font = n;\\n this.current.fontSize = e;\\n if (n.isType3Font) return;\\n const s = n.loadedName || \\"sans-serif\\",\\n a = ((_n$systemFontInfo = n.systemFontInfo) === null || _n$systemFontInfo === void 0 ? void 0 : _n$systemFontInfo.css) || \\"\\\\\\"\\".concat(s, \\"\\\\\\", \\").concat(n.fallbackName);\\n let o = \\"normal\\";\\n n.black ? o = \\"900\\" : n.bold && (o = \\"bold\\");\\n const l = n.italic ? \\"italic\\" : \\"normal\\";\\n let c = e;\\n e < 16 ? c = 16 : e > 100 && (c = 100);\\n this.current.fontSizeScale = e / c;\\n this.ctx.font = \\"\\".concat(l, \\" \\").concat(o, \\" \\").concat(c, \\"px \\").concat(a);\\n }\\n setTextRenderingMode(t) {\\n this.current.textRenderingMode = t;\\n }\\n setTextRise(t) {\\n this.current.textRise = t;\\n }\\n moveText(t, e) {\\n this.current.x = this.current.lineX += t;\\n this.current.y = this.current.lineY += e;\\n }\\n setLeadingMoveText(t, e) {\\n this.setLeading(-e);\\n this.moveText(t, e);\\n }\\n setTextMatrix(t, e, n, i, r, s) {\\n this.current.textMatrix = [t, e, n, i, r, s];\\n this.current.textMatrixScale = Math.hypot(t, e);\\n this.current.x = this.current.lineX = 0;\\n this.current.y = this.current.lineY = 0;\\n }\\n nextLine() {\\n this.moveText(0, this.current.leading);\\n }\\n paintChar(t, e, n, s) {\\n const a = this.ctx,\\n o = this.current,\\n l = o.font,\\n c = o.textRenderingMode,\\n h = o.fontSize / o.fontSizeScale,\\n d = c & i.TextRenderingMode.FILL_STROKE_MASK,\\n u = !!(c & i.TextRenderingMode.ADD_TO_PATH_FLAG),\\n p = o.patternFill && !l.missingFile;\\n let f;\\n (l.disableFontFace || u || p) && (f = l.getPathGenerator(this.commonObjs, t));\\n if (l.disableFontFace || p) {\\n a.save();\\n a.translate(e, n);\\n a.beginPath();\\n f(a, h);\\n s && a.setTransform(...s);\\n d !== i.TextRenderingMode.FILL && d !== i.TextRenderingMode.FILL_STROKE || a.fill();\\n d !== i.TextRenderingMode.STROKE && d !== i.TextRenderingMode.FILL_STROKE || a.stroke();\\n a.restore();\\n } else {\\n d !== i.TextRenderingMode.FILL && d !== i.TextRenderingMode.FILL_STROKE || a.fillText(t, e, n);\\n d !== i.TextRenderingMode.STROKE && d !== i.TextRenderingMode.FILL_STROKE || a.strokeText(t, e, n);\\n }\\n if (u) {\\n (this.pendingTextPaths || (this.pendingTextPaths = [])).push({\\n transform: (0, r.getCurrentTransform)(a),\\n x: e,\\n y: n,\\n fontSize: h,\\n addToPath: f\\n });\\n }\\n }\\n get isFontSubpixelAAEnabled() {\\n const {\\n context: t\\n } = this.cachedCanvases.getCanvas(\\"isFontSubpixelAAEnabled\\", 10, 10);\\n t.scale(1.5, 1);\\n t.fillText(\\"I\\", 0, 10);\\n const e = t.getImageData(0, 0, 10, 10).data;\\n let n = !1;\\n for (let t = 3; t < e.length; t += 4) if (e[t] > 0 && e[t] < 255) {\\n n = !0;\\n break;\\n }\\n return (0, i.shadow)(this, \\"isFontSubpixelAAEnabled\\", n);\\n }\\n showText(t) {\\n const e = this.current,\\n n = e.font;\\n if (n.isType3Font) return this.showType3Text(t);\\n const a = e.fontSize;\\n if (0 === a) return;\\n const o = this.ctx,\\n l = e.fontSizeScale,\\n c = e.charSpacing,\\n h = e.wordSpacing,\\n d = e.fontDirection,\\n u = e.textHScale * d,\\n p = t.length,\\n f = n.vertical,\\n g = f ? 1 : -1,\\n m = n.defaultVMetrics,\\n b = a * e.fontMatrix[0],\\n v = e.textRenderingMode === i.TextRenderingMode.FILL && !n.disableFontFace && !e.patternFill;\\n o.save();\\n o.transform(...e.textMatrix);\\n o.translate(e.x, e.y + e.textRise);\\n d > 0 ? o.scale(u, -1) : o.scale(u, 1);\\n let y;\\n if (e.patternFill) {\\n o.save();\\n const t = e.fillColor.getPattern(o, this, (0, r.getCurrentTransformInverse)(o), s.PathType.FILL);\\n y = (0, r.getCurrentTransform)(o);\\n o.restore();\\n o.fillStyle = t;\\n }\\n let A = e.lineWidth;\\n const _ = e.textMatrixScale;\\n if (0 === _ || 0 === A) {\\n const t = e.textRenderingMode & i.TextRenderingMode.FILL_STROKE_MASK;\\n t !== i.TextRenderingMode.STROKE && t !== i.TextRenderingMode.FILL_STROKE || (A = this.getSinglePixelWidth());\\n } else A /= _;\\n if (1 !== l) {\\n o.scale(l, l);\\n A /= l;\\n }\\n o.lineWidth = A;\\n if (n.isInvalidPDFjsFont) {\\n const n = [];\\n let i = 0;\\n for (const e of t) {\\n n.push(e.unicode);\\n i += e.width;\\n }\\n o.fillText(n.join(\\"\\"), 0, 0);\\n e.x += i * b * u;\\n o.restore();\\n this.compose();\\n return;\\n }\\n let S,\\n E = 0;\\n for (S = 0; S < p; ++S) {\\n const e = t[S];\\n if (\\"number\\" == typeof e) {\\n E += g * e * a / 1e3;\\n continue;\\n }\\n let i = !1;\\n const r = (e.isSpace ? h : 0) + c,\\n s = e.fontChar,\\n u = e.accent;\\n let p,\\n A,\\n _ = e.width;\\n if (f) {\\n const t = e.vmetric || m,\\n n = -(e.vmetric ? t[1] : .5 * _) * b,\\n i = t[2] * b;\\n _ = t ? -t[0] : _;\\n p = n / l;\\n A = (E + i) / l;\\n } else {\\n p = E / l;\\n A = 0;\\n }\\n if (n.remeasure && _ > 0) {\\n const t = 1e3 * o.measureText(s).width / a * l;\\n if (_ < t && this.isFontSubpixelAAEnabled) {\\n const e = _ / t;\\n i = !0;\\n o.save();\\n o.scale(e, 1);\\n p /= e;\\n } else _ !== t && (p += (_ - t) / 2e3 * a / l);\\n }\\n if (this.contentVisible && (e.isInFont || n.missingFile)) if (v && !u) o.fillText(s, p, A);else {\\n this.paintChar(s, p, A, y);\\n if (u) {\\n const t = p + a * u.offset.x / l,\\n e = A - a * u.offset.y / l;\\n this.paintChar(u.fontChar, t, e, y);\\n }\\n }\\n E += f ? _ * b - r * d : _ * b + r * d;\\n i && o.restore();\\n }\\n f ? e.y -= E : e.x += E * u;\\n o.restore();\\n this.compose();\\n }\\n showType3Text(t) {\\n const e = this.ctx,\\n n = this.current,\\n r = n.font,\\n s = n.fontSize,\\n a = n.fontDirection,\\n o = r.vertical ? 1 : -1,\\n l = n.charSpacing,\\n c = n.wordSpacing,\\n h = n.textHScale * a,\\n d = n.fontMatrix || i.FONT_IDENTITY_MATRIX,\\n u = t.length;\\n let p, f, g, m;\\n if (!(n.textRenderingMode === i.TextRenderingMode.INVISIBLE) && 0 !== s) {\\n this._cachedScaleForStroking[0] = -1;\\n this._cachedGetSinglePixelWidth = null;\\n e.save();\\n e.transform(...n.textMatrix);\\n e.translate(n.x, n.y);\\n e.scale(h, a);\\n for (p = 0; p < u; ++p) {\\n f = t[p];\\n if (\\"number\\" == typeof f) {\\n m = o * f * s / 1e3;\\n this.ctx.translate(m, 0);\\n n.x += m * h;\\n continue;\\n }\\n const a = (f.isSpace ? c : 0) + l,\\n u = r.charProcOperatorList[f.operatorListId];\\n if (!u) {\\n (0, i.warn)(\\"Type3 character \\\\\\"\\".concat(f.operatorListId, \\"\\\\\\" is not available.\\"));\\n continue;\\n }\\n if (this.contentVisible) {\\n this.processingType3 = f;\\n this.save();\\n e.scale(s, s);\\n e.transform(...d);\\n this.executeOperatorList(u);\\n this.restore();\\n }\\n g = i.Util.applyTransform([f.width, 0], d)[0] * s + a;\\n e.translate(g, 0);\\n n.x += g * h;\\n }\\n e.restore();\\n this.processingType3 = null;\\n }\\n }\\n setCharWidth(t, e) {}\\n setCharWidthAndBounds(t, e, n, i, r, s) {\\n this.ctx.rect(n, i, r - n, s - i);\\n this.ctx.clip();\\n this.endPath();\\n }\\n getColorN_Pattern(t) {\\n let e;\\n if (\\"TilingPattern\\" === t[0]) {\\n const n = t[1],\\n i = this.baseTransform || (0, r.getCurrentTransform)(this.ctx),\\n a = {\\n createCanvasGraphics: t => new CanvasGraphics(t, this.commonObjs, this.objs, this.canvasFactory, this.filterFactory, {\\n optionalContentConfig: this.optionalContentConfig,\\n markedContentStack: this.markedContentStack\\n })\\n };\\n e = new s.TilingPattern(t, n, this.ctx, a, i);\\n } else e = this._getPattern(t[1], t[2]);\\n return e;\\n }\\n setStrokeColorN() {\\n this.current.strokeColor = this.getColorN_Pattern(arguments);\\n }\\n setFillColorN() {\\n this.current.fillColor = this.getColorN_Pattern(arguments);\\n this.current.patternFill = !0;\\n }\\n setStrokeRGBColor(t, e, n) {\\n const r = i.Util.makeHexColor(t, e, n);\\n this.ctx.strokeStyle = r;\\n this.current.strokeColor = r;\\n }\\n setFillRGBColor(t, e, n) {\\n const r = i.Util.makeHexColor(t, e, n);\\n this.ctx.fillStyle = r;\\n this.current.fillColor = r;\\n this.current.patternFill = !1;\\n }\\n _getPattern(t) {\\n let e,\\n n = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null;\\n if (this.cachedPatterns.has(t)) e = this.cachedPatterns.get(t);else {\\n e = (0, s.getShadingPattern)(this.getObject(t));\\n this.cachedPatterns.set(t, e);\\n }\\n n && (e.matrix = n);\\n return e;\\n }\\n shadingFill(t) {\\n if (!this.contentVisible) return;\\n const e = this.ctx;\\n this.save();\\n const n = this._getPattern(t);\\n e.fillStyle = n.getPattern(e, this, (0, r.getCurrentTransformInverse)(e), s.PathType.SHADING);\\n const a = (0, r.getCurrentTransformInverse)(e);\\n if (a) {\\n const {\\n width: t,\\n height: n\\n } = e.canvas,\\n [r, s, o, l] = i.Util.getAxialAlignedBoundingBox([0, 0, t, n], a);\\n this.ctx.fillRect(r, s, o - r, l - s);\\n } else this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10);\\n this.compose(this.current.getClippedPathBoundingBox());\\n this.restore();\\n }\\n beginInlineImage() {\\n (0, i.unreachable)(\\"Should not call beginInlineImage\\");\\n }\\n beginImageData() {\\n (0, i.unreachable)(\\"Should not call beginImageData\\");\\n }\\n paintFormXObjectBegin(t, e) {\\n if (this.contentVisible) {\\n this.save();\\n this.baseTransformStack.push(this.baseTransform);\\n Array.isArray(t) && 6 === t.length && this.transform(...t);\\n this.baseTransform = (0, r.getCurrentTransform)(this.ctx);\\n if (e) {\\n const t = e[2] - e[0],\\n n = e[3] - e[1];\\n this.ctx.rect(e[0], e[1], t, n);\\n this.current.updateRectMinMax((0, r.getCurrentTransform)(this.ctx), e);\\n this.clip();\\n this.endPath();\\n }\\n }\\n }\\n paintFormXObjectEnd() {\\n if (this.contentVisible) {\\n this.restore();\\n this.baseTransform = this.baseTransformStack.pop();\\n }\\n }\\n beginGroup(t) {\\n if (!this.contentVisible) return;\\n this.save();\\n if (this.inSMaskMode) {\\n this.endSMaskMode();\\n this.current.activeSMask = null;\\n }\\n const e = this.ctx;\\n t.isolated || (0, i.info)(\\"TODO: Support non-isolated groups.\\");\\n t.knockout && (0, i.warn)(\\"Knockout groups not supported.\\");\\n const n = (0, r.getCurrentTransform)(e);\\n t.matrix && e.transform(...t.matrix);\\n if (!t.bbox) throw new Error(\\"Bounding box is required.\\");\\n let s = i.Util.getAxialAlignedBoundingBox(t.bbox, (0, r.getCurrentTransform)(e));\\n const a = [0, 0, e.canvas.width, e.canvas.height];\\n s = i.Util.intersect(s, a) || [0, 0, 0, 0];\\n const l = Math.floor(s[0]),\\n c = Math.floor(s[1]);\\n let h = Math.max(Math.ceil(s[2]) - l, 1),\\n d = Math.max(Math.ceil(s[3]) - c, 1),\\n u = 1,\\n p = 1;\\n if (h > o) {\\n u = h / o;\\n h = o;\\n }\\n if (d > o) {\\n p = d / o;\\n d = o;\\n }\\n this.current.startNewPathAndClipBox([0, 0, h, d]);\\n let f = \\"groupAt\\" + this.groupLevel;\\n t.smask && (f += \\"_smask_\\" + this.smaskCounter++ % 2);\\n const g = this.cachedCanvases.getCanvas(f, h, d),\\n m = g.context;\\n m.scale(1 / u, 1 / p);\\n m.translate(-l, -c);\\n m.transform(...n);\\n if (t.smask) this.smaskStack.push({\\n canvas: g.canvas,\\n context: m,\\n offsetX: l,\\n offsetY: c,\\n scaleX: u,\\n scaleY: p,\\n subtype: t.smask.subtype,\\n backdrop: t.smask.backdrop,\\n transferMap: t.smask.transferMap || null,\\n startTransformInverse: null\\n });else {\\n e.setTransform(1, 0, 0, 1, 0, 0);\\n e.translate(l, c);\\n e.scale(u, p);\\n e.save();\\n }\\n copyCtxState(e, m);\\n this.ctx = m;\\n this.setGState([[\\"BM\\", \\"source-over\\"], [\\"ca\\", 1], [\\"CA\\", 1]]);\\n this.groupStack.push(e);\\n this.groupLevel++;\\n }\\n endGroup(t) {\\n if (!this.contentVisible) return;\\n this.groupLevel--;\\n const e = this.ctx,\\n n = this.groupStack.pop();\\n this.ctx = n;\\n this.ctx.imageSmoothingEnabled = !1;\\n if (t.smask) {\\n this.tempSMask = this.smaskStack.pop();\\n this.restore();\\n } else {\\n this.ctx.restore();\\n const t = (0, r.getCurrentTransform)(this.ctx);\\n this.restore();\\n this.ctx.save();\\n this.ctx.setTransform(...t);\\n const n = i.Util.getAxialAlignedBoundingBox([0, 0, e.canvas.width, e.canvas.height], t);\\n this.ctx.drawImage(e.canvas, 0, 0);\\n this.ctx.restore();\\n this.compose(n);\\n }\\n }\\n beginAnnotation(t, e, n, s, a) {\\n _classPrivateMethodGet(this, _Gt, _Gt2).call(this);\\n resetCtxToDefault(this.ctx);\\n this.ctx.save();\\n this.save();\\n this.baseTransform && this.ctx.setTransform(...this.baseTransform);\\n if (Array.isArray(e) && 4 === e.length) {\\n const s = e[2] - e[0],\\n o = e[3] - e[1];\\n if (a && this.annotationCanvasMap) {\\n (n = n.slice())[4] -= e[0];\\n n[5] -= e[1];\\n (e = e.slice())[0] = e[1] = 0;\\n e[2] = s;\\n e[3] = o;\\n const [a, l] = i.Util.singularValueDecompose2dScale((0, r.getCurrentTransform)(this.ctx)),\\n {\\n viewportScale: c\\n } = this,\\n h = Math.ceil(s * this.outputScaleX * c),\\n d = Math.ceil(o * this.outputScaleY * c);\\n this.annotationCanvas = this.canvasFactory.create(h, d);\\n const {\\n canvas: u,\\n context: p\\n } = this.annotationCanvas;\\n this.annotationCanvasMap.set(t, u);\\n this.annotationCanvas.savedCtx = this.ctx;\\n this.ctx = p;\\n this.ctx.save();\\n this.ctx.setTransform(a, 0, 0, -l, 0, o * l);\\n resetCtxToDefault(this.ctx);\\n } else {\\n resetCtxToDefault(this.ctx);\\n this.ctx.rect(e[0], e[1], s, o);\\n this.ctx.clip();\\n this.endPath();\\n }\\n }\\n this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height);\\n this.transform(...n);\\n this.transform(...s);\\n }\\n endAnnotation() {\\n if (this.annotationCanvas) {\\n this.ctx.restore();\\n _classPrivateMethodGet(this, _Vt, _Vt2).call(this);\\n this.ctx = this.annotationCanvas.savedCtx;\\n delete this.annotationCanvas.savedCtx;\\n delete this.annotationCanvas;\\n }\\n }\\n paintImageMaskXObject(t) {\\n if (!this.contentVisible) return;\\n const e = t.count;\\n (t = this.getObject(t.data, t)).count = e;\\n const n = this.ctx,\\n i = this.processingType3;\\n if (i) {\\n void 0 === i.compiled && (i.compiled = function compileType3Glyph(t) {\\n const {\\n width: e,\\n height: n\\n } = t;\\n if (e > 1e3 || n > 1e3) return null;\\n const i = new Uint8Array([0, 2, 4, 0, 1, 0, 5, 4, 8, 10, 0, 8, 0, 2, 1, 0]),\\n r = e + 1;\\n let s,\\n a,\\n o,\\n l = new Uint8Array(r * (n + 1));\\n const c = e + 7 & -8;\\n let h = new Uint8Array(c * n),\\n d = 0;\\n for (const e of t.data) {\\n let t = 128;\\n for (; t > 0;) {\\n h[d++] = e & t ? 0 : 255;\\n t >>= 1;\\n }\\n }\\n let u = 0;\\n d = 0;\\n if (0 !== h[d]) {\\n l[0] = 1;\\n ++u;\\n }\\n for (a = 1; a < e; a++) {\\n if (h[d] !== h[d + 1]) {\\n l[a] = h[d] ? 2 : 1;\\n ++u;\\n }\\n d++;\\n }\\n if (0 !== h[d]) {\\n l[a] = 2;\\n ++u;\\n }\\n for (s = 1; s < n; s++) {\\n d = s * c;\\n o = s * r;\\n if (h[d - c] !== h[d]) {\\n l[o] = h[d] ? 1 : 8;\\n ++u;\\n }\\n let t = (h[d] ? 4 : 0) + (h[d - c] ? 8 : 0);\\n for (a = 1; a < e; a++) {\\n t = (t >> 2) + (h[d + 1] ? 4 : 0) + (h[d - c + 1] ? 8 : 0);\\n if (i[t]) {\\n l[o + a] = i[t];\\n ++u;\\n }\\n d++;\\n }\\n if (h[d - c] !== h[d]) {\\n l[o + a] = h[d] ? 2 : 4;\\n ++u;\\n }\\n if (u > 1e3) return null;\\n }\\n d = c * (n - 1);\\n o = s * r;\\n if (0 !== h[d]) {\\n l[o] = 8;\\n ++u;\\n }\\n for (a = 1; a < e; a++) {\\n if (h[d] !== h[d + 1]) {\\n l[o + a] = h[d] ? 4 : 8;\\n ++u;\\n }\\n d++;\\n }\\n if (0 !== h[d]) {\\n l[o + a] = 4;\\n ++u;\\n }\\n if (u > 1e3) return null;\\n const p = new Int32Array([0, r, -1, 0, -r, 0, 0, 0, 1]),\\n f = new Path2D();\\n for (s = 0; u && s <= n; s++) {\\n let t = s * r;\\n const n = t + e;\\n for (; t < n && !l[t];) t++;\\n if (t === n) continue;\\n f.moveTo(t % r, s);\\n const i = t;\\n let a = l[t];\\n do {\\n const e = p[a];\\n do {\\n t += e;\\n } while (!l[t]);\\n const n = l[t];\\n if (5 !== n && 10 !== n) {\\n a = n;\\n l[t] = 0;\\n } else {\\n a = n & 51 * a >> 4;\\n l[t] &= a >> 2 | a << 2;\\n }\\n f.lineTo(t % r, t / r | 0);\\n l[t] || --u;\\n } while (i !== t);\\n --s;\\n }\\n h = null;\\n l = null;\\n return function (t) {\\n t.save();\\n t.scale(1 / e, -1 / n);\\n t.translate(0, -n);\\n t.fill(f);\\n t.beginPath();\\n t.restore();\\n };\\n }(t));\\n if (i.compiled) {\\n i.compiled(n);\\n return;\\n }\\n }\\n const r = this._createMaskCanvas(t),\\n s = r.canvas;\\n n.save();\\n n.setTransform(1, 0, 0, 1, 0, 0);\\n n.drawImage(s, r.offsetX, r.offsetY);\\n n.restore();\\n this.compose();\\n }\\n paintImageMaskXObjectRepeat(t, e) {\\n let n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : 0,\\n s = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : 0,\\n a = arguments.length > 4 ? arguments[4] : void 0,\\n o = arguments.length > 5 ? arguments[5] : void 0;\\n if (!this.contentVisible) return;\\n t = this.getObject(t.data, t);\\n const l = this.ctx;\\n l.save();\\n const c = (0, r.getCurrentTransform)(l);\\n l.transform(e, n, s, a, 0, 0);\\n const h = this._createMaskCanvas(t);\\n l.setTransform(1, 0, 0, 1, h.offsetX - c[4], h.offsetY - c[5]);\\n for (let t = 0, r = o.length; t < r; t += 2) {\\n const r = i.Util.transform(c, [e, n, s, a, o[t], o[t + 1]]),\\n [d, u] = i.Util.applyTransform([0, 0], r);\\n l.drawImage(h.canvas, d, u);\\n }\\n l.restore();\\n this.compose();\\n }\\n paintImageMaskXObjectGroup(t) {\\n if (!this.contentVisible) return;\\n const e = this.ctx,\\n n = this.current.fillColor,\\n i = this.current.patternFill;\\n for (const a of t) {\\n const {\\n data: t,\\n width: o,\\n height: l,\\n transform: c\\n } = a,\\n h = this.cachedCanvases.getCanvas(\\"maskCanvas\\", o, l),\\n d = h.context;\\n d.save();\\n putBinaryImageMask(d, this.getObject(t, a));\\n d.globalCompositeOperation = \\"source-in\\";\\n d.fillStyle = i ? n.getPattern(d, this, (0, r.getCurrentTransformInverse)(e), s.PathType.FILL) : n;\\n d.fillRect(0, 0, o, l);\\n d.restore();\\n e.save();\\n e.transform(...c);\\n e.scale(1, -1);\\n drawImageAtIntegerCoords(e, h.canvas, 0, 0, o, l, 0, -1, 1, 1);\\n e.restore();\\n }\\n this.compose();\\n }\\n paintImageXObject(t) {\\n if (!this.contentVisible) return;\\n const e = this.getObject(t);\\n e ? this.paintInlineImageXObject(e) : (0, i.warn)(\\"Dependent image isn't ready yet\\");\\n }\\n paintImageXObjectRepeat(t, e, n, r) {\\n if (!this.contentVisible) return;\\n const s = this.getObject(t);\\n if (!s) {\\n (0, i.warn)(\\"Dependent image isn't ready yet\\");\\n return;\\n }\\n const a = s.width,\\n o = s.height,\\n l = [];\\n for (let t = 0, i = r.length; t < i; t += 2) l.push({\\n transform: [e, 0, 0, n, r[t], r[t + 1]],\\n x: 0,\\n y: 0,\\n w: a,\\n h: o\\n });\\n this.paintInlineImageXObjectGroup(s, l);\\n }\\n applyTransferMapsToCanvas(t) {\\n if (\\"none\\" !== this.current.transferMaps) {\\n t.filter = this.current.transferMaps;\\n t.drawImage(t.canvas, 0, 0);\\n t.filter = \\"none\\";\\n }\\n return t.canvas;\\n }\\n applyTransferMapsToBitmap(t) {\\n if (\\"none\\" === this.current.transferMaps) return t.bitmap;\\n const {\\n bitmap: e,\\n width: n,\\n height: i\\n } = t,\\n r = this.cachedCanvases.getCanvas(\\"inlineImage\\", n, i),\\n s = r.context;\\n s.filter = this.current.transferMaps;\\n s.drawImage(e, 0, 0);\\n s.filter = \\"none\\";\\n return r.canvas;\\n }\\n paintInlineImageXObject(t) {\\n if (!this.contentVisible) return;\\n const e = t.width,\\n n = t.height,\\n s = this.ctx;\\n this.save();\\n if (!i.isNodeJS) {\\n const {\\n filter: t\\n } = s;\\n \\"none\\" !== t && \\"\\" !== t && (s.filter = \\"none\\");\\n }\\n s.scale(1 / e, -1 / n);\\n let a;\\n if (t.bitmap) a = this.applyTransferMapsToBitmap(t);else if (\\"function\\" == typeof HTMLElement && t instanceof HTMLElement || !t.data) a = t;else {\\n const i = this.cachedCanvases.getCanvas(\\"inlineImage\\", e, n).context;\\n putBinaryImageData(i, t);\\n a = this.applyTransferMapsToCanvas(i);\\n }\\n const o = this._scaleImage(a, (0, r.getCurrentTransformInverse)(s));\\n s.imageSmoothingEnabled = getImageSmoothingEnabled((0, r.getCurrentTransform)(s), t.interpolate);\\n drawImageAtIntegerCoords(s, o.img, 0, 0, o.paintWidth, o.paintHeight, 0, -n, e, n);\\n this.compose();\\n this.restore();\\n }\\n paintInlineImageXObjectGroup(t, e) {\\n if (!this.contentVisible) return;\\n const n = this.ctx;\\n let i;\\n if (t.bitmap) i = t.bitmap;else {\\n const e = t.width,\\n n = t.height,\\n r = this.cachedCanvases.getCanvas(\\"inlineImage\\", e, n).context;\\n putBinaryImageData(r, t);\\n i = this.applyTransferMapsToCanvas(r);\\n }\\n for (const t of e) {\\n n.save();\\n n.transform(...t.transform);\\n n.scale(1, -1);\\n drawImageAtIntegerCoords(n, i, t.x, t.y, t.w, t.h, 0, -1, 1, 1);\\n n.restore();\\n }\\n this.compose();\\n }\\n paintSolidColorImageMask() {\\n if (this.contentVisible) {\\n this.ctx.fillRect(0, 0, 1, 1);\\n this.compose();\\n }\\n }\\n markPoint(t) {}\\n markPointProps(t, e) {}\\n beginMarkedContent(t) {\\n this.markedContentStack.push({\\n visible: !0\\n });\\n }\\n beginMarkedContentProps(t, e) {\\n \\"OC\\" === t ? this.markedContentStack.push({\\n visible: this.optionalContentConfig.isVisible(e)\\n }) : this.markedContentStack.push({\\n visible: !0\\n });\\n this.contentVisible = this.isContentVisible();\\n }\\n endMarkedContent() {\\n this.markedContentStack.pop();\\n this.contentVisible = this.isContentVisible();\\n }\\n beginCompat() {}\\n endCompat() {}\\n consumePath(t) {\\n const e = this.current.isEmptyClip();\\n this.pendingClip && this.current.updateClipFromPath();\\n this.pendingClip || this.compose(t);\\n const n = this.ctx;\\n if (this.pendingClip) {\\n e || (this.pendingClip === u ? n.clip(\\"evenodd\\") : n.clip());\\n this.pendingClip = null;\\n }\\n this.current.startNewPathAndClipBox(this.current.clipBox);\\n n.beginPath();\\n }\\n getSinglePixelWidth() {\\n if (!this._cachedGetSinglePixelWidth) {\\n const t = (0, r.getCurrentTransform)(this.ctx);\\n if (0 === t[1] && 0 === t[2]) this._cachedGetSinglePixelWidth = 1 / Math.min(Math.abs(t[0]), Math.abs(t[3]));else {\\n const e = Math.abs(t[0] * t[3] - t[2] * t[1]),\\n n = Math.hypot(t[0], t[2]),\\n i = Math.hypot(t[1], t[3]);\\n this._cachedGetSinglePixelWidth = Math.max(n, i) / e;\\n }\\n }\\n return this._cachedGetSinglePixelWidth;\\n }\\n getScaleForStroking() {\\n if (-1 === this._cachedScaleForStroking[0]) {\\n const {\\n lineWidth: t\\n } = this.current,\\n {\\n a: e,\\n b: n,\\n c: i,\\n d: r\\n } = this.ctx.getTransform();\\n let s, a;\\n if (0 === n && 0 === i) {\\n const n = Math.abs(e),\\n i = Math.abs(r);\\n if (n === i) {\\n if (0 === t) s = a = 1 / n;else {\\n const e = n * t;\\n s = a = e < 1 ? 1 / e : 1;\\n }\\n } else if (0 === t) {\\n s = 1 / n;\\n a = 1 / i;\\n } else {\\n const e = n * t,\\n r = i * t;\\n s = e < 1 ? 1 / e : 1;\\n a = r < 1 ? 1 / r : 1;\\n }\\n } else {\\n const o = Math.abs(e * r - n * i),\\n l = Math.hypot(e, n),\\n c = Math.hypot(i, r);\\n if (0 === t) {\\n s = c / o;\\n a = l / o;\\n } else {\\n const e = t * o;\\n s = c > e ? c / e : 1;\\n a = l > e ? l / e : 1;\\n }\\n }\\n this._cachedScaleForStroking[0] = s;\\n this._cachedScaleForStroking[1] = a;\\n }\\n return this._cachedScaleForStroking;\\n }\\n rescaleAndStroke(t) {\\n const {\\n ctx: e\\n } = this,\\n {\\n lineWidth: n\\n } = this.current,\\n [i, r] = this.getScaleForStroking();\\n e.lineWidth = n || 1;\\n if (1 === i && 1 === r) {\\n e.stroke();\\n return;\\n }\\n const s = e.getLineDash();\\n t && e.save();\\n e.scale(i, r);\\n if (s.length > 0) {\\n const t = Math.max(i, r);\\n e.setLineDash(s.map(e => e / t));\\n e.lineDashOffset /= t;\\n }\\n e.stroke();\\n t && e.restore();\\n }\\n isContentVisible() {\\n for (let t = this.markedContentStack.length - 1; t >= 0; t--) if (!this.markedContentStack[t].visible) return !1;\\n return !0;\\n }\\n }\\n function _Gt2() {\\n for (; this.stateStack.length || this.inSMaskMode;) this.restore();\\n this.ctx.restore();\\n if (this.transparentCanvas) {\\n this.ctx = this.compositeCtx;\\n this.ctx.save();\\n this.ctx.setTransform(1, 0, 0, 1, 0, 0);\\n this.ctx.drawImage(this.transparentCanvas, 0, 0);\\n this.ctx.restore();\\n this.transparentCanvas = null;\\n }\\n }\\n function _Vt2() {\\n if (this.pageColors) {\\n const t = this.filterFactory.addHCMFilter(this.pageColors.foreground, this.pageColors.background);\\n if (\\"none\\" !== t) {\\n const e = this.ctx.filter;\\n this.ctx.filter = t;\\n this.ctx.drawImage(this.ctx.canvas, 0, 0);\\n this.ctx.filter = e;\\n }\\n }\\n }\\n e.CanvasGraphics = CanvasGraphics;\\n for (const t in i.OPS) void 0 !== CanvasGraphics.prototype[t] && (CanvasGraphics.prototype[i.OPS[t]] = CanvasGraphics.prototype[t]);\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n Object.defineProperty(e, \\"__esModule\\", {\\n value: !0\\n });\\n e.TilingPattern = e.PathType = void 0;\\n e.getShadingPattern = function getShadingPattern(t) {\\n switch (t[0]) {\\n case \\"RadialAxial\\":\\n return new RadialAxialShadingPattern(t);\\n case \\"Mesh\\":\\n return new MeshShadingPattern(t);\\n case \\"Dummy\\":\\n return new DummyShadingPattern();\\n }\\n throw new Error(\\"Unknown IR type: \\".concat(t[0]));\\n };\\n n(2);\\n var i = n(1),\\n r = n(167);\\n const s = {\\n FILL: \\"Fill\\",\\n STROKE: \\"Stroke\\",\\n SHADING: \\"Shading\\"\\n };\\n e.PathType = s;\\n function applyBoundingBox(t, e) {\\n if (!e) return;\\n const n = e[2] - e[0],\\n i = e[3] - e[1],\\n r = new Path2D();\\n r.rect(e[0], e[1], n, i);\\n t.clip(r);\\n }\\n class BaseShadingPattern {\\n constructor() {\\n this.constructor === BaseShadingPattern && (0, i.unreachable)(\\"Cannot initialize BaseShadingPattern.\\");\\n }\\n getPattern() {\\n (0, i.unreachable)(\\"Abstract method \`getPattern\` called.\\");\\n }\\n }\\n class RadialAxialShadingPattern extends BaseShadingPattern {\\n constructor(t) {\\n super();\\n this._type = t[1];\\n this._bbox = t[2];\\n this._colorStops = t[3];\\n this._p0 = t[4];\\n this._p1 = t[5];\\n this._r0 = t[6];\\n this._r1 = t[7];\\n this.matrix = null;\\n }\\n _createGradient(t) {\\n let e;\\n \\"axial\\" === this._type ? e = t.createLinearGradient(this._p0[0], this._p0[1], this._p1[0], this._p1[1]) : \\"radial\\" === this._type && (e = t.createRadialGradient(this._p0[0], this._p0[1], this._r0, this._p1[0], this._p1[1], this._r1));\\n for (const t of this._colorStops) e.addColorStop(t[0], t[1]);\\n return e;\\n }\\n getPattern(t, e, n, a) {\\n let o;\\n if (a === s.STROKE || a === s.FILL) {\\n const s = e.current.getClippedPathBoundingBox(a, (0, r.getCurrentTransform)(t)) || [0, 0, 0, 0],\\n l = Math.ceil(s[2] - s[0]) || 1,\\n c = Math.ceil(s[3] - s[1]) || 1,\\n h = e.cachedCanvases.getCanvas(\\"pattern\\", l, c, !0),\\n d = h.context;\\n d.clearRect(0, 0, d.canvas.width, d.canvas.height);\\n d.beginPath();\\n d.rect(0, 0, d.canvas.width, d.canvas.height);\\n d.translate(-s[0], -s[1]);\\n n = i.Util.transform(n, [1, 0, 0, 1, s[0], s[1]]);\\n d.transform(...e.baseTransform);\\n this.matrix && d.transform(...this.matrix);\\n applyBoundingBox(d, this._bbox);\\n d.fillStyle = this._createGradient(d);\\n d.fill();\\n o = t.createPattern(h.canvas, \\"no-repeat\\");\\n const u = new DOMMatrix(n);\\n o.setTransform(u);\\n } else {\\n applyBoundingBox(t, this._bbox);\\n o = this._createGradient(t);\\n }\\n return o;\\n }\\n }\\n function drawTriangle(t, e, n, i, r, s, a, o) {\\n const l = e.coords,\\n c = e.colors,\\n h = t.data,\\n d = 4 * t.width;\\n let u;\\n if (l[n + 1] > l[i + 1]) {\\n u = n;\\n n = i;\\n i = u;\\n u = s;\\n s = a;\\n a = u;\\n }\\n if (l[i + 1] > l[r + 1]) {\\n u = i;\\n i = r;\\n r = u;\\n u = a;\\n a = o;\\n o = u;\\n }\\n if (l[n + 1] > l[i + 1]) {\\n u = n;\\n n = i;\\n i = u;\\n u = s;\\n s = a;\\n a = u;\\n }\\n const p = (l[n] + e.offsetX) * e.scaleX,\\n f = (l[n + 1] + e.offsetY) * e.scaleY,\\n g = (l[i] + e.offsetX) * e.scaleX,\\n m = (l[i + 1] + e.offsetY) * e.scaleY,\\n b = (l[r] + e.offsetX) * e.scaleX,\\n v = (l[r + 1] + e.offsetY) * e.scaleY;\\n if (f >= v) return;\\n const y = c[s],\\n A = c[s + 1],\\n _ = c[s + 2],\\n S = c[a],\\n E = c[a + 1],\\n x = c[a + 2],\\n w = c[o],\\n C = c[o + 1],\\n T = c[o + 2],\\n P = Math.round(f),\\n k = Math.round(v);\\n let M, R, I, D, O, L, N, B;\\n for (let t = P; t <= k; t++) {\\n if (t < m) {\\n const e = t < f ? 0 : (f - t) / (f - m);\\n M = p - (p - g) * e;\\n R = y - (y - S) * e;\\n I = A - (A - E) * e;\\n D = _ - (_ - x) * e;\\n } else {\\n let e;\\n e = t > v ? 1 : m === v ? 0 : (m - t) / (m - v);\\n M = g - (g - b) * e;\\n R = S - (S - w) * e;\\n I = E - (E - C) * e;\\n D = x - (x - T) * e;\\n }\\n let e;\\n e = t < f ? 0 : t > v ? 1 : (f - t) / (f - v);\\n O = p - (p - b) * e;\\n L = y - (y - w) * e;\\n N = A - (A - C) * e;\\n B = _ - (_ - T) * e;\\n const n = Math.round(Math.min(M, O)),\\n i = Math.round(Math.max(M, O));\\n let r = d * t + 4 * n;\\n for (let t = n; t <= i; t++) {\\n e = (M - t) / (M - O);\\n e < 0 ? e = 0 : e > 1 && (e = 1);\\n h[r++] = R - (R - L) * e | 0;\\n h[r++] = I - (I - N) * e | 0;\\n h[r++] = D - (D - B) * e | 0;\\n h[r++] = 255;\\n }\\n }\\n }\\n function drawFigure(t, e, n) {\\n const i = e.coords,\\n r = e.colors;\\n let s, a;\\n switch (e.type) {\\n case \\"lattice\\":\\n const o = e.verticesPerRow,\\n l = Math.floor(i.length / o) - 1,\\n c = o - 1;\\n for (s = 0; s < l; s++) {\\n let e = s * o;\\n for (let s = 0; s < c; s++, e++) {\\n drawTriangle(t, n, i[e], i[e + 1], i[e + o], r[e], r[e + 1], r[e + o]);\\n drawTriangle(t, n, i[e + o + 1], i[e + 1], i[e + o], r[e + o + 1], r[e + 1], r[e + o]);\\n }\\n }\\n break;\\n case \\"triangles\\":\\n for (s = 0, a = i.length; s < a; s += 3) drawTriangle(t, n, i[s], i[s + 1], i[s + 2], r[s], r[s + 1], r[s + 2]);\\n break;\\n default:\\n throw new Error(\\"illegal figure\\");\\n }\\n }\\n class MeshShadingPattern extends BaseShadingPattern {\\n constructor(t) {\\n super();\\n this._coords = t[2];\\n this._colors = t[3];\\n this._figures = t[4];\\n this._bounds = t[5];\\n this._bbox = t[7];\\n this._background = t[8];\\n this.matrix = null;\\n }\\n _createMeshCanvas(t, e, n) {\\n const i = Math.floor(this._bounds[0]),\\n r = Math.floor(this._bounds[1]),\\n s = Math.ceil(this._bounds[2]) - i,\\n a = Math.ceil(this._bounds[3]) - r,\\n o = Math.min(Math.ceil(Math.abs(s * t[0] * 1.1)), 3e3),\\n l = Math.min(Math.ceil(Math.abs(a * t[1] * 1.1)), 3e3),\\n c = s / o,\\n h = a / l,\\n d = {\\n coords: this._coords,\\n colors: this._colors,\\n offsetX: -i,\\n offsetY: -r,\\n scaleX: 1 / c,\\n scaleY: 1 / h\\n },\\n u = o + 4,\\n p = l + 4,\\n f = n.getCanvas(\\"mesh\\", u, p, !1),\\n g = f.context,\\n m = g.createImageData(o, l);\\n if (e) {\\n const t = m.data;\\n for (let n = 0, i = t.length; n < i; n += 4) {\\n t[n] = e[0];\\n t[n + 1] = e[1];\\n t[n + 2] = e[2];\\n t[n + 3] = 255;\\n }\\n }\\n for (const t of this._figures) drawFigure(m, t, d);\\n g.putImageData(m, 2, 2);\\n return {\\n canvas: f.canvas,\\n offsetX: i - 2 * c,\\n offsetY: r - 2 * h,\\n scaleX: c,\\n scaleY: h\\n };\\n }\\n getPattern(t, e, n, a) {\\n applyBoundingBox(t, this._bbox);\\n let o;\\n if (a === s.SHADING) o = i.Util.singularValueDecompose2dScale((0, r.getCurrentTransform)(t));else {\\n o = i.Util.singularValueDecompose2dScale(e.baseTransform);\\n if (this.matrix) {\\n const t = i.Util.singularValueDecompose2dScale(this.matrix);\\n o = [o[0] * t[0], o[1] * t[1]];\\n }\\n }\\n const l = this._createMeshCanvas(o, a === s.SHADING ? null : this._background, e.cachedCanvases);\\n if (a !== s.SHADING) {\\n t.setTransform(...e.baseTransform);\\n this.matrix && t.transform(...this.matrix);\\n }\\n t.translate(l.offsetX, l.offsetY);\\n t.scale(l.scaleX, l.scaleY);\\n return t.createPattern(l.canvas, \\"no-repeat\\");\\n }\\n }\\n class DummyShadingPattern extends BaseShadingPattern {\\n getPattern() {\\n return \\"hotpink\\";\\n }\\n }\\n const a = 1,\\n o = 2;\\n class TilingPattern {\\n constructor(t, e, n, i, r) {\\n this.operatorList = t[2];\\n this.matrix = t[3] || [1, 0, 0, 1, 0, 0];\\n this.bbox = t[4];\\n this.xstep = t[5];\\n this.ystep = t[6];\\n this.paintType = t[7];\\n this.tilingType = t[8];\\n this.color = e;\\n this.ctx = n;\\n this.canvasGraphicsFactory = i;\\n this.baseTransform = r;\\n }\\n createPatternCanvas(t) {\\n const e = this.operatorList,\\n n = this.bbox,\\n s = this.xstep,\\n a = this.ystep,\\n o = this.paintType,\\n l = this.tilingType,\\n c = this.color,\\n h = this.canvasGraphicsFactory;\\n (0, i.info)(\\"TilingType: \\" + l);\\n const d = n[0],\\n u = n[1],\\n p = n[2],\\n f = n[3],\\n g = i.Util.singularValueDecompose2dScale(this.matrix),\\n m = i.Util.singularValueDecompose2dScale(this.baseTransform),\\n b = [g[0] * m[0], g[1] * m[1]],\\n v = this.getSizeAndScale(s, this.ctx.canvas.width, b[0]),\\n y = this.getSizeAndScale(a, this.ctx.canvas.height, b[1]),\\n A = t.cachedCanvases.getCanvas(\\"pattern\\", v.size, y.size, !0),\\n _ = A.context,\\n S = h.createCanvasGraphics(_);\\n S.groupLevel = t.groupLevel;\\n this.setFillAndStrokeStyleToContext(S, o, c);\\n let E = d,\\n x = u,\\n w = p,\\n C = f;\\n if (d < 0) {\\n E = 0;\\n w += Math.abs(d);\\n }\\n if (u < 0) {\\n x = 0;\\n C += Math.abs(u);\\n }\\n _.translate(-v.scale * E, -y.scale * x);\\n S.transform(v.scale, 0, 0, y.scale, 0, 0);\\n _.save();\\n this.clipBbox(S, E, x, w, C);\\n S.baseTransform = (0, r.getCurrentTransform)(S.ctx);\\n S.executeOperatorList(e);\\n S.endDrawing();\\n return {\\n canvas: A.canvas,\\n scaleX: v.scale,\\n scaleY: y.scale,\\n offsetX: E,\\n offsetY: x\\n };\\n }\\n getSizeAndScale(t, e, n) {\\n t = Math.abs(t);\\n const i = Math.max(TilingPattern.MAX_PATTERN_SIZE, e);\\n let r = Math.ceil(t * n);\\n r >= i ? r = i : n = r / t;\\n return {\\n scale: n,\\n size: r\\n };\\n }\\n clipBbox(t, e, n, i, s) {\\n const a = i - e,\\n o = s - n;\\n t.ctx.rect(e, n, a, o);\\n t.current.updateRectMinMax((0, r.getCurrentTransform)(t.ctx), [e, n, i, s]);\\n t.clip();\\n t.endPath();\\n }\\n setFillAndStrokeStyleToContext(t, e, n) {\\n const r = t.ctx,\\n s = t.current;\\n switch (e) {\\n case a:\\n const t = this.ctx;\\n r.fillStyle = t.fillStyle;\\n r.strokeStyle = t.strokeStyle;\\n s.fillColor = t.fillStyle;\\n s.strokeColor = t.strokeStyle;\\n break;\\n case o:\\n const l = i.Util.makeHexColor(n[0], n[1], n[2]);\\n r.fillStyle = l;\\n r.strokeStyle = l;\\n s.fillColor = l;\\n s.strokeColor = l;\\n break;\\n default:\\n throw new i.FormatError(\\"Unsupported paint type: \\".concat(e));\\n }\\n }\\n getPattern(t, e, n, r) {\\n let a = n;\\n if (r !== s.SHADING) {\\n a = i.Util.transform(a, e.baseTransform);\\n this.matrix && (a = i.Util.transform(a, this.matrix));\\n }\\n const o = this.createPatternCanvas(e);\\n let l = new DOMMatrix(a);\\n l = l.translate(o.offsetX, o.offsetY);\\n l = l.scale(1 / o.scaleX, 1 / o.scaleY);\\n const c = t.createPattern(o.canvas, \\"repeat\\");\\n c.setTransform(l);\\n return c;\\n }\\n }\\n _defineProperty(TilingPattern, \\"MAX_PATTERN_SIZE\\", 3e3);\\n e.TilingPattern = TilingPattern;\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n Object.defineProperty(e, \\"__esModule\\", {\\n value: !0\\n });\\n e.convertBlackAndWhiteToRGBA = convertBlackAndWhiteToRGBA;\\n e.convertToRGBA = function convertToRGBA(t) {\\n switch (t.kind) {\\n case i.ImageKind.GRAYSCALE_1BPP:\\n return convertBlackAndWhiteToRGBA(t);\\n case i.ImageKind.RGB_24BPP:\\n return function convertRGBToRGBA(t) {\\n let {\\n src: e,\\n srcPos: n = 0,\\n dest: r,\\n destPos: s = 0,\\n width: a,\\n height: o\\n } = t,\\n l = 0;\\n const c = e.length >> 2,\\n h = new Uint32Array(e.buffer, n, c);\\n if (i.FeatureTest.isLittleEndian) {\\n for (; l < c - 2; l += 3, s += 4) {\\n const t = h[l],\\n e = h[l + 1],\\n n = h[l + 2];\\n r[s] = 4278190080 | t;\\n r[s + 1] = t >>> 24 | e << 8 | 4278190080;\\n r[s + 2] = e >>> 16 | n << 16 | 4278190080;\\n r[s + 3] = n >>> 8 | 4278190080;\\n }\\n for (let t = 4 * l, n = e.length; t < n; t += 3) r[s++] = e[t] | e[t + 1] << 8 | e[t + 2] << 16 | 4278190080;\\n } else {\\n for (; l < c - 2; l += 3, s += 4) {\\n const t = h[l],\\n e = h[l + 1],\\n n = h[l + 2];\\n r[s] = 255 | t;\\n r[s + 1] = t << 24 | e >>> 8 | 255;\\n r[s + 2] = e << 16 | n >>> 16 | 255;\\n r[s + 3] = n << 8 | 255;\\n }\\n for (let t = 4 * l, n = e.length; t < n; t += 3) r[s++] = e[t] << 24 | e[t + 1] << 16 | e[t + 2] << 8 | 255;\\n }\\n return {\\n srcPos: n,\\n destPos: s\\n };\\n }(t);\\n }\\n return null;\\n };\\n e.grayToRGBA = function grayToRGBA(t, e) {\\n if (i.FeatureTest.isLittleEndian) for (let n = 0, i = t.length; n < i; n++) e[n] = 65793 * t[n] | 4278190080;else for (let n = 0, i = t.length; n < i; n++) e[n] = 16843008 * t[n] | 255;\\n };\\n n(93);\\n n(101);\\n n(102);\\n n(105);\\n n(107);\\n n(109);\\n n(113);\\n n(116);\\n n(123);\\n var i = n(1);\\n function convertBlackAndWhiteToRGBA(t) {\\n let {\\n src: e,\\n srcPos: n = 0,\\n dest: r,\\n width: s,\\n height: a,\\n nonBlackColor: o = 4294967295,\\n inverseDecode: l = !1\\n } = t;\\n const c = i.FeatureTest.isLittleEndian ? 4278190080 : 255,\\n [h, d] = l ? [o, c] : [c, o],\\n u = s >> 3,\\n p = 7 & s,\\n f = e.length;\\n r = new Uint32Array(r.buffer);\\n let g = 0;\\n for (let t = 0; t < a; t++) {\\n for (const t = n + u; n < t; n++) {\\n const t = n < f ? e[n] : 255;\\n r[g++] = 128 & t ? d : h;\\n r[g++] = 64 & t ? d : h;\\n r[g++] = 32 & t ? d : h;\\n r[g++] = 16 & t ? d : h;\\n r[g++] = 8 & t ? d : h;\\n r[g++] = 4 & t ? d : h;\\n r[g++] = 2 & t ? d : h;\\n r[g++] = 1 & t ? d : h;\\n }\\n if (0 === p) continue;\\n const t = n < f ? e[n++] : 255;\\n for (let e = 0; e < p; e++) r[g++] = t & 1 << 7 - e ? d : h;\\n }\\n return {\\n srcPos: n,\\n destPos: g\\n };\\n }\\n }, (t, e) => {\\n \\"use strict\\";\\n\\n Object.defineProperty(e, \\"__esModule\\", {\\n value: !0\\n });\\n e.GlobalWorkerOptions = void 0;\\n const n = Object.create(null);\\n e.GlobalWorkerOptions = n;\\n n.workerPort = null;\\n n.workerSrc = \\"\\";\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n var _Xt, _$t, _Kt;\\n Object.defineProperty(e, \\"__esModule\\", {\\n value: !0\\n });\\n e.MessageHandler = void 0;\\n n(2);\\n var i = n(1);\\n const r = 1,\\n s = 2,\\n a = 1,\\n o = 2,\\n l = 3,\\n c = 4,\\n h = 5,\\n d = 6,\\n u = 7,\\n p = 8;\\n function wrapReason(t) {\\n t instanceof Error || \\"object\\" == typeof t && null !== t || (0, i.unreachable)('wrapReason: Expected \\"reason\\" to be a (possibly cloned) Error.');\\n switch (t.name) {\\n case \\"AbortException\\":\\n return new i.AbortException(t.message);\\n case \\"MissingPDFException\\":\\n return new i.MissingPDFException(t.message);\\n case \\"PasswordException\\":\\n return new i.PasswordException(t.message, t.code);\\n case \\"UnexpectedResponseException\\":\\n return new i.UnexpectedResponseException(t.message, t.status);\\n case \\"UnknownErrorException\\":\\n return new i.UnknownErrorException(t.message, t.details);\\n default:\\n return new i.UnknownErrorException(t.message, t.toString());\\n }\\n }\\n e.MessageHandler = (_Xt = /*#__PURE__*/new WeakSet(), _$t = /*#__PURE__*/new WeakSet(), _Kt = /*#__PURE__*/new WeakSet(), class MessageHandler {\\n constructor(_t11, _e10, _n6) {\\n _classPrivateMethodInitSpec(this, _Kt);\\n _classPrivateMethodInitSpec(this, _$t);\\n _classPrivateMethodInitSpec(this, _Xt);\\n this.sourceName = _t11;\\n this.targetName = _e10;\\n this.comObj = _n6;\\n this.callbackId = 1;\\n this.streamId = 1;\\n this.streamSinks = Object.create(null);\\n this.streamControllers = Object.create(null);\\n this.callbackCapabilities = Object.create(null);\\n this.actionHandler = Object.create(null);\\n this._onComObjOnMessage = t => {\\n const e = t.data;\\n if (e.targetName !== this.sourceName) return;\\n if (e.stream) {\\n _classPrivateMethodGet(this, _$t, _$t2).call(this, e);\\n return;\\n }\\n if (e.callback) {\\n const t = e.callbackId,\\n n = this.callbackCapabilities[t];\\n if (!n) throw new Error(\\"Cannot resolve callback \\".concat(t));\\n delete this.callbackCapabilities[t];\\n if (e.callback === r) n.resolve(e.data);else {\\n if (e.callback !== s) throw new Error(\\"Unexpected callback case\\");\\n n.reject(wrapReason(e.reason));\\n }\\n return;\\n }\\n const i = this.actionHandler[e.action];\\n if (!i) throw new Error(\\"Unknown action from worker: \\".concat(e.action));\\n if (e.callbackId) {\\n const t = this.sourceName,\\n a = e.sourceName;\\n new Promise(function (t) {\\n t(i(e.data));\\n }).then(function (i) {\\n _n6.postMessage({\\n sourceName: t,\\n targetName: a,\\n callback: r,\\n callbackId: e.callbackId,\\n data: i\\n });\\n }, function (i) {\\n _n6.postMessage({\\n sourceName: t,\\n targetName: a,\\n callback: s,\\n callbackId: e.callbackId,\\n reason: wrapReason(i)\\n });\\n });\\n } else e.streamId ? _classPrivateMethodGet(this, _Xt, _Xt2).call(this, e) : i(e.data);\\n };\\n _n6.addEventListener(\\"message\\", this._onComObjOnMessage);\\n }\\n on(t, e) {\\n const n = this.actionHandler;\\n if (n[t]) throw new Error(\\"There is already an actionName called \\\\\\"\\".concat(t, \\"\\\\\\"\\"));\\n n[t] = e;\\n }\\n send(t, e, n) {\\n this.comObj.postMessage({\\n sourceName: this.sourceName,\\n targetName: this.targetName,\\n action: t,\\n data: e\\n }, n);\\n }\\n sendWithPromise(t, e, n) {\\n const r = this.callbackId++,\\n s = new i.PromiseCapability();\\n this.callbackCapabilities[r] = s;\\n try {\\n this.comObj.postMessage({\\n sourceName: this.sourceName,\\n targetName: this.targetName,\\n action: t,\\n callbackId: r,\\n data: e\\n }, n);\\n } catch (t) {\\n s.reject(t);\\n }\\n return s.promise;\\n }\\n sendWithStream(t, e, n, r) {\\n const s = this.streamId++,\\n o = this.sourceName,\\n l = this.targetName,\\n c = this.comObj;\\n return new ReadableStream({\\n start: n => {\\n const a = new i.PromiseCapability();\\n this.streamControllers[s] = {\\n controller: n,\\n startCall: a,\\n pullCall: null,\\n cancelCall: null,\\n isClosed: !1\\n };\\n c.postMessage({\\n sourceName: o,\\n targetName: l,\\n action: t,\\n streamId: s,\\n data: e,\\n desiredSize: n.desiredSize\\n }, r);\\n return a.promise;\\n },\\n pull: t => {\\n const e = new i.PromiseCapability();\\n this.streamControllers[s].pullCall = e;\\n c.postMessage({\\n sourceName: o,\\n targetName: l,\\n stream: d,\\n streamId: s,\\n desiredSize: t.desiredSize\\n });\\n return e.promise;\\n },\\n cancel: t => {\\n (0, i.assert)(t instanceof Error, \\"cancel must have a valid reason\\");\\n const e = new i.PromiseCapability();\\n this.streamControllers[s].cancelCall = e;\\n this.streamControllers[s].isClosed = !0;\\n c.postMessage({\\n sourceName: o,\\n targetName: l,\\n stream: a,\\n streamId: s,\\n reason: wrapReason(t)\\n });\\n return e.promise;\\n }\\n }, n);\\n }\\n destroy() {\\n this.comObj.removeEventListener(\\"message\\", this._onComObjOnMessage);\\n }\\n });\\n function _Xt2(t) {\\n const e = t.streamId,\\n n = this.sourceName,\\n r = t.sourceName,\\n s = this.comObj,\\n a = this,\\n o = this.actionHandler[t.action],\\n d = {\\n enqueue(t) {\\n let a = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 1,\\n o = arguments.length > 2 ? arguments[2] : void 0;\\n if (this.isCancelled) return;\\n const l = this.desiredSize;\\n this.desiredSize -= a;\\n if (l > 0 && this.desiredSize <= 0) {\\n this.sinkCapability = new i.PromiseCapability();\\n this.ready = this.sinkCapability.promise;\\n }\\n s.postMessage({\\n sourceName: n,\\n targetName: r,\\n stream: c,\\n streamId: e,\\n chunk: t\\n }, o);\\n },\\n close() {\\n if (!this.isCancelled) {\\n this.isCancelled = !0;\\n s.postMessage({\\n sourceName: n,\\n targetName: r,\\n stream: l,\\n streamId: e\\n });\\n delete a.streamSinks[e];\\n }\\n },\\n error(t) {\\n (0, i.assert)(t instanceof Error, \\"error must have a valid reason\\");\\n if (!this.isCancelled) {\\n this.isCancelled = !0;\\n s.postMessage({\\n sourceName: n,\\n targetName: r,\\n stream: h,\\n streamId: e,\\n reason: wrapReason(t)\\n });\\n }\\n },\\n sinkCapability: new i.PromiseCapability(),\\n onPull: null,\\n onCancel: null,\\n isCancelled: !1,\\n desiredSize: t.desiredSize,\\n ready: null\\n };\\n d.sinkCapability.resolve();\\n d.ready = d.sinkCapability.promise;\\n this.streamSinks[e] = d;\\n new Promise(function (e) {\\n e(o(t.data, d));\\n }).then(function () {\\n s.postMessage({\\n sourceName: n,\\n targetName: r,\\n stream: p,\\n streamId: e,\\n success: !0\\n });\\n }, function (t) {\\n s.postMessage({\\n sourceName: n,\\n targetName: r,\\n stream: p,\\n streamId: e,\\n reason: wrapReason(t)\\n });\\n });\\n }\\n function _$t2(t) {\\n const e = t.streamId,\\n n = this.sourceName,\\n r = t.sourceName,\\n s = this.comObj,\\n f = this.streamControllers[e],\\n g = this.streamSinks[e];\\n switch (t.stream) {\\n case p:\\n t.success ? f.startCall.resolve() : f.startCall.reject(wrapReason(t.reason));\\n break;\\n case u:\\n t.success ? f.pullCall.resolve() : f.pullCall.reject(wrapReason(t.reason));\\n break;\\n case d:\\n if (!g) {\\n s.postMessage({\\n sourceName: n,\\n targetName: r,\\n stream: u,\\n streamId: e,\\n success: !0\\n });\\n break;\\n }\\n g.desiredSize <= 0 && t.desiredSize > 0 && g.sinkCapability.resolve();\\n g.desiredSize = t.desiredSize;\\n new Promise(function (t) {\\n var _g$onPull;\\n t((_g$onPull = g.onPull) === null || _g$onPull === void 0 ? void 0 : _g$onPull.call(g));\\n }).then(function () {\\n s.postMessage({\\n sourceName: n,\\n targetName: r,\\n stream: u,\\n streamId: e,\\n success: !0\\n });\\n }, function (t) {\\n s.postMessage({\\n sourceName: n,\\n targetName: r,\\n stream: u,\\n streamId: e,\\n reason: wrapReason(t)\\n });\\n });\\n break;\\n case c:\\n (0, i.assert)(f, \\"enqueue should have stream controller\\");\\n if (f.isClosed) break;\\n f.controller.enqueue(t.chunk);\\n break;\\n case l:\\n (0, i.assert)(f, \\"close should have stream controller\\");\\n if (f.isClosed) break;\\n f.isClosed = !0;\\n f.controller.close();\\n _classPrivateMethodGet(this, _Kt, _Kt2).call(this, f, e);\\n break;\\n case h:\\n (0, i.assert)(f, \\"error should have stream controller\\");\\n f.controller.error(wrapReason(t.reason));\\n _classPrivateMethodGet(this, _Kt, _Kt2).call(this, f, e);\\n break;\\n case o:\\n t.success ? f.cancelCall.resolve() : f.cancelCall.reject(wrapReason(t.reason));\\n _classPrivateMethodGet(this, _Kt, _Kt2).call(this, f, e);\\n break;\\n case a:\\n if (!g) break;\\n new Promise(function (e) {\\n var _g$onCancel;\\n e((_g$onCancel = g.onCancel) === null || _g$onCancel === void 0 ? void 0 : _g$onCancel.call(g, wrapReason(t.reason)));\\n }).then(function () {\\n s.postMessage({\\n sourceName: n,\\n targetName: r,\\n stream: o,\\n streamId: e,\\n success: !0\\n });\\n }, function (t) {\\n s.postMessage({\\n sourceName: n,\\n targetName: r,\\n stream: o,\\n streamId: e,\\n reason: wrapReason(t)\\n });\\n });\\n g.sinkCapability.reject(wrapReason(t.reason));\\n g.isCancelled = !0;\\n delete this.streamSinks[e];\\n break;\\n default:\\n throw new Error(\\"Unexpected stream case\\");\\n }\\n }\\n async function _Kt2(t, e) {\\n var _t$startCall, _t$pullCall, _t$cancelCall;\\n await Promise.allSettled([(_t$startCall = t.startCall) === null || _t$startCall === void 0 ? void 0 : _t$startCall.promise, (_t$pullCall = t.pullCall) === null || _t$pullCall === void 0 ? void 0 : _t$pullCall.promise, (_t$cancelCall = t.cancelCall) === null || _t$cancelCall === void 0 ? void 0 : _t$cancelCall.promise]);\\n delete this.streamControllers[e];\\n }\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n var _Yt, _Jt;\\n Object.defineProperty(e, \\"__esModule\\", {\\n value: !0\\n });\\n e.Metadata = void 0;\\n var i = n(1);\\n e.Metadata = (_Yt = /*#__PURE__*/new WeakMap(), _Jt = /*#__PURE__*/new WeakMap(), class Metadata {\\n constructor(t) {\\n _classPrivateFieldInitSpec(this, _Yt, {\\n writable: true,\\n value: void 0\\n });\\n _classPrivateFieldInitSpec(this, _Jt, {\\n writable: true,\\n value: void 0\\n });\\n let {\\n parsedData: e,\\n rawData: n\\n } = t;\\n _classPrivateFieldSet(this, _Yt, e);\\n _classPrivateFieldSet(this, _Jt, n);\\n }\\n getRaw() {\\n return _classPrivateFieldGet(this, _Jt);\\n }\\n get(t) {\\n var _classPrivateFieldGet8;\\n return (_classPrivateFieldGet8 = _classPrivateFieldGet(this, _Yt).get(t)) !== null && _classPrivateFieldGet8 !== void 0 ? _classPrivateFieldGet8 : null;\\n }\\n getAll() {\\n return (0, i.objectFromMap)(_classPrivateFieldGet(this, _Yt));\\n }\\n has(t) {\\n return _classPrivateFieldGet(this, _Yt).has(t);\\n }\\n });\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n var _Zt, _te, _ee, _ne, _ie;\\n Object.defineProperty(e, \\"__esModule\\", {\\n value: !0\\n });\\n e.OptionalContentConfig = void 0;\\n var i = n(1),\\n r = n(169);\\n const s = Symbol(\\"INTERNAL\\");\\n var _Qt = /*#__PURE__*/new WeakMap();\\n class OptionalContentGroup {\\n constructor(t, e) {\\n _classPrivateFieldInitSpec(this, _Qt, {\\n writable: true,\\n value: !0\\n });\\n this.name = t;\\n this.intent = e;\\n }\\n get visible() {\\n return _classPrivateFieldGet(this, _Qt);\\n }\\n _setVisible(t, e) {\\n t !== s && (0, i.unreachable)(\\"Internal method \`_setVisible\` called.\\");\\n _classPrivateFieldSet(this, _Qt, e);\\n }\\n }\\n e.OptionalContentConfig = (_Zt = /*#__PURE__*/new WeakMap(), _te = /*#__PURE__*/new WeakMap(), _ee = /*#__PURE__*/new WeakMap(), _ne = /*#__PURE__*/new WeakMap(), _ie = /*#__PURE__*/new WeakSet(), class OptionalContentConfig {\\n constructor(_t12) {\\n _classPrivateMethodInitSpec(this, _ie);\\n _classPrivateFieldInitSpec(this, _Zt, {\\n writable: true,\\n value: null\\n });\\n _classPrivateFieldInitSpec(this, _te, {\\n writable: true,\\n value: new Map()\\n });\\n _classPrivateFieldInitSpec(this, _ee, {\\n writable: true,\\n value: null\\n });\\n _classPrivateFieldInitSpec(this, _ne, {\\n writable: true,\\n value: null\\n });\\n this.name = null;\\n this.creator = null;\\n if (null !== _t12) {\\n this.name = _t12.name;\\n this.creator = _t12.creator;\\n _classPrivateFieldSet(this, _ne, _t12.order);\\n for (const e of _t12.groups) _classPrivateFieldGet(this, _te).set(e.id, new OptionalContentGroup(e.name, e.intent));\\n if (\\"OFF\\" === _t12.baseState) for (const t of _classPrivateFieldGet(this, _te).values()) t._setVisible(s, !1);\\n for (const e of _t12.on) _classPrivateFieldGet(this, _te).get(e)._setVisible(s, !0);\\n for (const e of _t12.off) _classPrivateFieldGet(this, _te).get(e)._setVisible(s, !1);\\n _classPrivateFieldSet(this, _ee, this.getHash());\\n }\\n }\\n isVisible(t) {\\n if (0 === _classPrivateFieldGet(this, _te).size) return !0;\\n if (!t) {\\n (0, i.warn)(\\"Optional content group not defined.\\");\\n return !0;\\n }\\n if (\\"OCG\\" === t.type) {\\n if (!_classPrivateFieldGet(this, _te).has(t.id)) {\\n (0, i.warn)(\\"Optional content group not found: \\".concat(t.id));\\n return !0;\\n }\\n return _classPrivateFieldGet(this, _te).get(t.id).visible;\\n }\\n if (\\"OCMD\\" === t.type) {\\n if (t.expression) return _classPrivateMethodGet(this, _ie, _ie2).call(this, t.expression);\\n if (!t.policy || \\"AnyOn\\" === t.policy) {\\n for (const e of t.ids) {\\n if (!_classPrivateFieldGet(this, _te).has(e)) {\\n (0, i.warn)(\\"Optional content group not found: \\".concat(e));\\n return !0;\\n }\\n if (_classPrivateFieldGet(this, _te).get(e).visible) return !0;\\n }\\n return !1;\\n }\\n if (\\"AllOn\\" === t.policy) {\\n for (const e of t.ids) {\\n if (!_classPrivateFieldGet(this, _te).has(e)) {\\n (0, i.warn)(\\"Optional content group not found: \\".concat(e));\\n return !0;\\n }\\n if (!_classPrivateFieldGet(this, _te).get(e).visible) return !1;\\n }\\n return !0;\\n }\\n if (\\"AnyOff\\" === t.policy) {\\n for (const e of t.ids) {\\n if (!_classPrivateFieldGet(this, _te).has(e)) {\\n (0, i.warn)(\\"Optional content group not found: \\".concat(e));\\n return !0;\\n }\\n if (!_classPrivateFieldGet(this, _te).get(e).visible) return !0;\\n }\\n return !1;\\n }\\n if (\\"AllOff\\" === t.policy) {\\n for (const e of t.ids) {\\n if (!_classPrivateFieldGet(this, _te).has(e)) {\\n (0, i.warn)(\\"Optional content group not found: \\".concat(e));\\n return !0;\\n }\\n if (_classPrivateFieldGet(this, _te).get(e).visible) return !1;\\n }\\n return !0;\\n }\\n (0, i.warn)(\\"Unknown optional content policy \\".concat(t.policy, \\".\\"));\\n return !0;\\n }\\n (0, i.warn)(\\"Unknown group type \\".concat(t.type, \\".\\"));\\n return !0;\\n }\\n setVisibility(t) {\\n let e = !(arguments.length > 1 && void 0 !== arguments[1]) || arguments[1];\\n if (_classPrivateFieldGet(this, _te).has(t)) {\\n _classPrivateFieldGet(this, _te).get(t)._setVisible(s, !!e);\\n _classPrivateFieldSet(this, _Zt, null);\\n } else (0, i.warn)(\\"Optional content group not found: \\".concat(t));\\n }\\n get hasInitialVisibility() {\\n return this.getHash() === _classPrivateFieldGet(this, _ee);\\n }\\n getOrder() {\\n return _classPrivateFieldGet(this, _te).size ? _classPrivateFieldGet(this, _ne) ? _classPrivateFieldGet(this, _ne).slice() : [..._classPrivateFieldGet(this, _te).keys()] : null;\\n }\\n getGroups() {\\n return _classPrivateFieldGet(this, _te).size > 0 ? (0, i.objectFromMap)(_classPrivateFieldGet(this, _te)) : null;\\n }\\n getGroup(t) {\\n return _classPrivateFieldGet(this, _te).get(t) || null;\\n }\\n getHash() {\\n if (null !== _classPrivateFieldGet(this, _Zt)) return _classPrivateFieldGet(this, _Zt);\\n const t = new r.MurmurHash3_64();\\n for (const [e, n] of _classPrivateFieldGet(this, _te)) t.update(\\"\\".concat(e, \\":\\").concat(n.visible));\\n return _classPrivateFieldSet(this, _Zt, t.hexdigest());\\n }\\n });\\n function _ie2(t) {\\n const e = t.length;\\n if (e < 2) return !0;\\n const n = t[0];\\n for (let r = 1; r < e; r++) {\\n const e = t[r];\\n let s;\\n if (Array.isArray(e)) s = _classPrivateMethodGet(this, _ie, _ie2).call(this, e);else {\\n if (!_classPrivateFieldGet(this, _te).has(e)) {\\n (0, i.warn)(\\"Optional content group not found: \\".concat(e));\\n return !0;\\n }\\n s = _classPrivateFieldGet(this, _te).get(e).visible;\\n }\\n switch (n) {\\n case \\"And\\":\\n if (!s) return !1;\\n break;\\n case \\"Or\\":\\n if (s) return !0;\\n break;\\n case \\"Not\\":\\n return !s;\\n default:\\n return !0;\\n }\\n }\\n return \\"And\\" === n;\\n }\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n Object.defineProperty(e, \\"__esModule\\", {\\n value: !0\\n });\\n e.PDFDataTransportStream = void 0;\\n n(93);\\n n(101);\\n n(102);\\n n(105);\\n n(107);\\n n(109);\\n n(113);\\n n(116);\\n n(123);\\n n(89);\\n var i = n(1),\\n r = n(167);\\n e.PDFDataTransportStream = class PDFDataTransportStream {\\n constructor(t, e) {\\n let {\\n length: n,\\n initialData: r,\\n progressiveDone: s = !1,\\n contentDispositionFilename: a = null,\\n disableRange: o = !1,\\n disableStream: l = !1\\n } = t;\\n (0, i.assert)(e, 'PDFDataTransportStream - missing required \\"pdfDataRangeTransport\\" argument.');\\n this._queuedChunks = [];\\n this._progressiveDone = s;\\n this._contentDispositionFilename = a;\\n if ((r === null || r === void 0 ? void 0 : r.length) > 0) {\\n const t = r instanceof Uint8Array && r.byteLength === r.buffer.byteLength ? r.buffer : new Uint8Array(r).buffer;\\n this._queuedChunks.push(t);\\n }\\n this._pdfDataRangeTransport = e;\\n this._isStreamingSupported = !l;\\n this._isRangeSupported = !o;\\n this._contentLength = n;\\n this._fullRequestReader = null;\\n this._rangeReaders = [];\\n this._pdfDataRangeTransport.addRangeListener((t, e) => {\\n this._onReceiveData({\\n begin: t,\\n chunk: e\\n });\\n });\\n this._pdfDataRangeTransport.addProgressListener((t, e) => {\\n this._onProgress({\\n loaded: t,\\n total: e\\n });\\n });\\n this._pdfDataRangeTransport.addProgressiveReadListener(t => {\\n this._onReceiveData({\\n chunk: t\\n });\\n });\\n this._pdfDataRangeTransport.addProgressiveDoneListener(() => {\\n this._onProgressiveDone();\\n });\\n this._pdfDataRangeTransport.transportReady();\\n }\\n _onReceiveData(t) {\\n let {\\n begin: e,\\n chunk: n\\n } = t;\\n const r = n instanceof Uint8Array && n.byteLength === n.buffer.byteLength ? n.buffer : new Uint8Array(n).buffer;\\n if (void 0 === e) this._fullRequestReader ? this._fullRequestReader._enqueue(r) : this._queuedChunks.push(r);else {\\n const t = this._rangeReaders.some(function (t) {\\n if (t._begin !== e) return !1;\\n t._enqueue(r);\\n return !0;\\n });\\n (0, i.assert)(t, \\"_onReceiveData - no \`PDFDataTransportStreamRangeReader\` instance found.\\");\\n }\\n }\\n get _progressiveDataLength() {\\n var _this$_fullRequestRea, _this$_fullRequestRea2;\\n return (_this$_fullRequestRea = (_this$_fullRequestRea2 = this._fullRequestReader) === null || _this$_fullRequestRea2 === void 0 ? void 0 : _this$_fullRequestRea2._loaded) !== null && _this$_fullRequestRea !== void 0 ? _this$_fullRequestRea : 0;\\n }\\n _onProgress(t) {\\n var _this$_rangeReaders$, _this$_rangeReaders$$, _this$_fullRequestRea3, _this$_fullRequestRea4;\\n void 0 === t.total ? (_this$_rangeReaders$ = this._rangeReaders[0]) === null || _this$_rangeReaders$ === void 0 || (_this$_rangeReaders$$ = _this$_rangeReaders$.onProgress) === null || _this$_rangeReaders$$ === void 0 ? void 0 : _this$_rangeReaders$$.call(_this$_rangeReaders$, {\\n loaded: t.loaded\\n }) : (_this$_fullRequestRea3 = this._fullRequestReader) === null || _this$_fullRequestRea3 === void 0 || (_this$_fullRequestRea4 = _this$_fullRequestRea3.onProgress) === null || _this$_fullRequestRea4 === void 0 ? void 0 : _this$_fullRequestRea4.call(_this$_fullRequestRea3, {\\n loaded: t.loaded,\\n total: t.total\\n });\\n }\\n _onProgressiveDone() {\\n var _this$_fullRequestRea5;\\n (_this$_fullRequestRea5 = this._fullRequestReader) === null || _this$_fullRequestRea5 === void 0 ? void 0 : _this$_fullRequestRea5.progressiveDone();\\n this._progressiveDone = !0;\\n }\\n _removeRangeReader(t) {\\n const e = this._rangeReaders.indexOf(t);\\n e >= 0 && this._rangeReaders.splice(e, 1);\\n }\\n getFullReader() {\\n (0, i.assert)(!this._fullRequestReader, \\"PDFDataTransportStream.getFullReader can only be called once.\\");\\n const t = this._queuedChunks;\\n this._queuedChunks = null;\\n return new PDFDataTransportStreamReader(this, t, this._progressiveDone, this._contentDispositionFilename);\\n }\\n getRangeReader(t, e) {\\n if (e <= this._progressiveDataLength) return null;\\n const n = new PDFDataTransportStreamRangeReader(this, t, e);\\n this._pdfDataRangeTransport.requestDataRange(t, e);\\n this._rangeReaders.push(n);\\n return n;\\n }\\n cancelAllRequests(t) {\\n var _this$_fullRequestRea6;\\n (_this$_fullRequestRea6 = this._fullRequestReader) === null || _this$_fullRequestRea6 === void 0 ? void 0 : _this$_fullRequestRea6.cancel(t);\\n for (const e of this._rangeReaders.slice(0)) e.cancel(t);\\n this._pdfDataRangeTransport.abort();\\n }\\n };\\n class PDFDataTransportStreamReader {\\n constructor(t, e) {\\n let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2],\\n i = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : null;\\n this._stream = t;\\n this._done = n || !1;\\n this._filename = (0, r.isPdfFile)(i) ? i : null;\\n this._queuedChunks = e || [];\\n this._loaded = 0;\\n for (const t of this._queuedChunks) this._loaded += t.byteLength;\\n this._requests = [];\\n this._headersReady = Promise.resolve();\\n t._fullRequestReader = this;\\n this.onProgress = null;\\n }\\n _enqueue(t) {\\n if (!this._done) {\\n if (this._requests.length > 0) {\\n this._requests.shift().resolve({\\n value: t,\\n done: !1\\n });\\n } else this._queuedChunks.push(t);\\n this._loaded += t.byteLength;\\n }\\n }\\n get headersReady() {\\n return this._headersReady;\\n }\\n get filename() {\\n return this._filename;\\n }\\n get isRangeSupported() {\\n return this._stream._isRangeSupported;\\n }\\n get isStreamingSupported() {\\n return this._stream._isStreamingSupported;\\n }\\n get contentLength() {\\n return this._stream._contentLength;\\n }\\n async read() {\\n if (this._queuedChunks.length > 0) {\\n return {\\n value: this._queuedChunks.shift(),\\n done: !1\\n };\\n }\\n if (this._done) return {\\n value: void 0,\\n done: !0\\n };\\n const t = new i.PromiseCapability();\\n this._requests.push(t);\\n return t.promise;\\n }\\n cancel(t) {\\n this._done = !0;\\n for (const t of this._requests) t.resolve({\\n value: void 0,\\n done: !0\\n });\\n this._requests.length = 0;\\n }\\n progressiveDone() {\\n this._done || (this._done = !0);\\n }\\n }\\n class PDFDataTransportStreamRangeReader {\\n constructor(t, e, n) {\\n this._stream = t;\\n this._begin = e;\\n this._end = n;\\n this._queuedChunk = null;\\n this._requests = [];\\n this._done = !1;\\n this.onProgress = null;\\n }\\n _enqueue(t) {\\n if (!this._done) {\\n if (0 === this._requests.length) this._queuedChunk = t;else {\\n this._requests.shift().resolve({\\n value: t,\\n done: !1\\n });\\n for (const t of this._requests) t.resolve({\\n value: void 0,\\n done: !0\\n });\\n this._requests.length = 0;\\n }\\n this._done = !0;\\n this._stream._removeRangeReader(this);\\n }\\n }\\n get isStreamingSupported() {\\n return !1;\\n }\\n async read() {\\n if (this._queuedChunk) {\\n const t = this._queuedChunk;\\n this._queuedChunk = null;\\n return {\\n value: t,\\n done: !1\\n };\\n }\\n if (this._done) return {\\n value: void 0,\\n done: !0\\n };\\n const t = new i.PromiseCapability();\\n this._requests.push(t);\\n return t.promise;\\n }\\n cancel(t) {\\n this._done = !0;\\n for (const t of this._requests) t.resolve({\\n value: void 0,\\n done: !0\\n });\\n this._requests.length = 0;\\n this._stream._removeRangeReader(this);\\n }\\n }\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n Object.defineProperty(e, \\"__esModule\\", {\\n value: !0\\n });\\n e.PDFFetchStream = void 0;\\n n(93);\\n n(101);\\n n(102);\\n n(105);\\n n(107);\\n n(109);\\n n(113);\\n n(116);\\n n(123);\\n n(89);\\n var i = n(1),\\n r = n(181);\\n function createFetchOptions(t, e, n) {\\n return {\\n method: \\"GET\\",\\n headers: t,\\n signal: n.signal,\\n mode: \\"cors\\",\\n credentials: e ? \\"include\\" : \\"same-origin\\",\\n redirect: \\"follow\\"\\n };\\n }\\n function createHeaders(t) {\\n const e = new Headers();\\n for (const n in t) {\\n const i = t[n];\\n void 0 !== i && e.append(n, i);\\n }\\n return e;\\n }\\n function getArrayBuffer(t) {\\n if (t instanceof Uint8Array) return t.buffer;\\n if (t instanceof ArrayBuffer) return t;\\n (0, i.warn)(\\"getArrayBuffer - unexpected data format: \\".concat(t));\\n return new Uint8Array(t).buffer;\\n }\\n e.PDFFetchStream = class PDFFetchStream {\\n constructor(t) {\\n this.source = t;\\n this.isHttp = /^https?:/i.test(t.url);\\n this.httpHeaders = this.isHttp && t.httpHeaders || {};\\n this._fullRequestReader = null;\\n this._rangeRequestReaders = [];\\n }\\n get _progressiveDataLength() {\\n var _this$_fullRequestRea7, _this$_fullRequestRea8;\\n return (_this$_fullRequestRea7 = (_this$_fullRequestRea8 = this._fullRequestReader) === null || _this$_fullRequestRea8 === void 0 ? void 0 : _this$_fullRequestRea8._loaded) !== null && _this$_fullRequestRea7 !== void 0 ? _this$_fullRequestRea7 : 0;\\n }\\n getFullReader() {\\n (0, i.assert)(!this._fullRequestReader, \\"PDFFetchStream.getFullReader can only be called once.\\");\\n this._fullRequestReader = new PDFFetchStreamReader(this);\\n return this._fullRequestReader;\\n }\\n getRangeReader(t, e) {\\n if (e <= this._progressiveDataLength) return null;\\n const n = new PDFFetchStreamRangeReader(this, t, e);\\n this._rangeRequestReaders.push(n);\\n return n;\\n }\\n cancelAllRequests(t) {\\n var _this$_fullRequestRea9;\\n (_this$_fullRequestRea9 = this._fullRequestReader) === null || _this$_fullRequestRea9 === void 0 ? void 0 : _this$_fullRequestRea9.cancel(t);\\n for (const e of this._rangeRequestReaders.slice(0)) e.cancel(t);\\n }\\n };\\n class PDFFetchStreamReader {\\n constructor(t) {\\n this._stream = t;\\n this._reader = null;\\n this._loaded = 0;\\n this._filename = null;\\n const e = t.source;\\n this._withCredentials = e.withCredentials || !1;\\n this._contentLength = e.length;\\n this._headersCapability = new i.PromiseCapability();\\n this._disableRange = e.disableRange || !1;\\n this._rangeChunkSize = e.rangeChunkSize;\\n this._rangeChunkSize || this._disableRange || (this._disableRange = !0);\\n this._abortController = new AbortController();\\n this._isStreamingSupported = !e.disableStream;\\n this._isRangeSupported = !e.disableRange;\\n this._headers = createHeaders(this._stream.httpHeaders);\\n const n = e.url;\\n fetch(n, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(t => {\\n if (!(0, r.validateResponseStatus)(t.status)) throw (0, r.createResponseStatusError)(t.status, n);\\n this._reader = t.body.getReader();\\n this._headersCapability.resolve();\\n const getResponseHeader = e => t.headers.get(e),\\n {\\n allowRangeRequests: e,\\n suggestedLength: s\\n } = (0, r.validateRangeRequestCapabilities)({\\n getResponseHeader: getResponseHeader,\\n isHttp: this._stream.isHttp,\\n rangeChunkSize: this._rangeChunkSize,\\n disableRange: this._disableRange\\n });\\n this._isRangeSupported = e;\\n this._contentLength = s || this._contentLength;\\n this._filename = (0, r.extractFilenameFromHeader)(getResponseHeader);\\n !this._isStreamingSupported && this._isRangeSupported && this.cancel(new i.AbortException(\\"Streaming is disabled.\\"));\\n }).catch(this._headersCapability.reject);\\n this.onProgress = null;\\n }\\n get headersReady() {\\n return this._headersCapability.promise;\\n }\\n get filename() {\\n return this._filename;\\n }\\n get contentLength() {\\n return this._contentLength;\\n }\\n get isRangeSupported() {\\n return this._isRangeSupported;\\n }\\n get isStreamingSupported() {\\n return this._isStreamingSupported;\\n }\\n async read() {\\n var _this$onProgress;\\n await this._headersCapability.promise;\\n const {\\n value: t,\\n done: e\\n } = await this._reader.read();\\n if (e) return {\\n value: t,\\n done: e\\n };\\n this._loaded += t.byteLength;\\n (_this$onProgress = this.onProgress) === null || _this$onProgress === void 0 ? void 0 : _this$onProgress.call(this, {\\n loaded: this._loaded,\\n total: this._contentLength\\n });\\n return {\\n value: getArrayBuffer(t),\\n done: !1\\n };\\n }\\n cancel(t) {\\n var _this$_reader;\\n (_this$_reader = this._reader) === null || _this$_reader === void 0 ? void 0 : _this$_reader.cancel(t);\\n this._abortController.abort();\\n }\\n }\\n class PDFFetchStreamRangeReader {\\n constructor(t, e, n) {\\n this._stream = t;\\n this._reader = null;\\n this._loaded = 0;\\n const s = t.source;\\n this._withCredentials = s.withCredentials || !1;\\n this._readCapability = new i.PromiseCapability();\\n this._isStreamingSupported = !s.disableStream;\\n this._abortController = new AbortController();\\n this._headers = createHeaders(this._stream.httpHeaders);\\n this._headers.append(\\"Range\\", \\"bytes=\\".concat(e, \\"-\\").concat(n - 1));\\n const a = s.url;\\n fetch(a, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(t => {\\n if (!(0, r.validateResponseStatus)(t.status)) throw (0, r.createResponseStatusError)(t.status, a);\\n this._readCapability.resolve();\\n this._reader = t.body.getReader();\\n }).catch(this._readCapability.reject);\\n this.onProgress = null;\\n }\\n get isStreamingSupported() {\\n return this._isStreamingSupported;\\n }\\n async read() {\\n var _this$onProgress2;\\n await this._readCapability.promise;\\n const {\\n value: t,\\n done: e\\n } = await this._reader.read();\\n if (e) return {\\n value: t,\\n done: e\\n };\\n this._loaded += t.byteLength;\\n (_this$onProgress2 = this.onProgress) === null || _this$onProgress2 === void 0 ? void 0 : _this$onProgress2.call(this, {\\n loaded: this._loaded\\n });\\n return {\\n value: getArrayBuffer(t),\\n done: !1\\n };\\n }\\n cancel(t) {\\n var _this$_reader2;\\n (_this$_reader2 = this._reader) === null || _this$_reader2 === void 0 ? void 0 : _this$_reader2.cancel(t);\\n this._abortController.abort();\\n }\\n }\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n Object.defineProperty(e, \\"__esModule\\", {\\n value: !0\\n });\\n e.createResponseStatusError = function createResponseStatusError(t, e) {\\n if (404 === t || 0 === t && e.startsWith(\\"file:\\")) return new i.MissingPDFException('Missing PDF \\"' + e + '\\".');\\n return new i.UnexpectedResponseException(\\"Unexpected server response (\\".concat(t, \\") while retrieving PDF \\\\\\"\\").concat(e, \\"\\\\\\".\\"), t);\\n };\\n e.extractFilenameFromHeader = function extractFilenameFromHeader(t) {\\n const e = t(\\"Content-Disposition\\");\\n if (e) {\\n let t = (0, r.getFilenameFromContentDispositionHeader)(e);\\n if (t.includes(\\"%\\")) try {\\n t = decodeURIComponent(t);\\n } catch (_unused12) {}\\n if ((0, s.isPdfFile)(t)) return t;\\n }\\n return null;\\n };\\n e.validateRangeRequestCapabilities = function validateRangeRequestCapabilities(t) {\\n let {\\n getResponseHeader: e,\\n isHttp: n,\\n rangeChunkSize: i,\\n disableRange: r\\n } = t;\\n const s = {\\n allowRangeRequests: !1,\\n suggestedLength: void 0\\n },\\n a = parseInt(e(\\"Content-Length\\"), 10);\\n if (!Number.isInteger(a)) return s;\\n s.suggestedLength = a;\\n if (a <= 2 * i) return s;\\n if (r || !n) return s;\\n if (\\"bytes\\" !== e(\\"Accept-Ranges\\")) return s;\\n if (\\"identity\\" !== (e(\\"Content-Encoding\\") || \\"identity\\")) return s;\\n s.allowRangeRequests = !0;\\n return s;\\n };\\n e.validateResponseStatus = function validateResponseStatus(t) {\\n return 200 === t || 206 === t;\\n };\\n var i = n(1),\\n r = n(182),\\n s = n(167);\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n Object.defineProperty(e, \\"__esModule\\", {\\n value: !0\\n });\\n e.getFilenameFromContentDispositionHeader = function getFilenameFromContentDispositionHeader(t) {\\n let e = !0,\\n n = toParamRegExp(\\"filename\\\\\\\\*\\", \\"i\\").exec(t);\\n if (n) {\\n n = n[1];\\n let t = rfc2616unquote(n);\\n t = unescape(t);\\n t = rfc5987decode(t);\\n t = rfc2047decode(t);\\n return fixupEncoding(t);\\n }\\n n = function rfc2231getparam(t) {\\n const e = [];\\n let n;\\n const i = toParamRegExp(\\"filename\\\\\\\\*((?!0\\\\\\\\d)\\\\\\\\d+)(\\\\\\\\*?)\\", \\"ig\\");\\n for (; null !== (n = i.exec(t));) {\\n let [, t, i, r] = n;\\n t = parseInt(t, 10);\\n if (t in e) {\\n if (0 === t) break;\\n } else e[t] = [i, r];\\n }\\n const r = [];\\n for (let t = 0; t < e.length && t in e; ++t) {\\n let [n, i] = e[t];\\n i = rfc2616unquote(i);\\n if (n) {\\n i = unescape(i);\\n 0 === t && (i = rfc5987decode(i));\\n }\\n r.push(i);\\n }\\n return r.join(\\"\\");\\n }(t);\\n if (n) {\\n return fixupEncoding(rfc2047decode(n));\\n }\\n n = toParamRegExp(\\"filename\\", \\"i\\").exec(t);\\n if (n) {\\n n = n[1];\\n let t = rfc2616unquote(n);\\n t = rfc2047decode(t);\\n return fixupEncoding(t);\\n }\\n function toParamRegExp(t, e) {\\n return new RegExp(\\"(?:^|;)\\\\\\\\s*\\" + t + '\\\\\\\\s*=\\\\\\\\s*([^\\";\\\\\\\\s][^;\\\\\\\\s]*|\\"(?:[^\\"\\\\\\\\\\\\\\\\]|\\\\\\\\\\\\\\\\\\"?)+\\"?)', e);\\n }\\n function textdecode(t, n) {\\n if (t) {\\n if (!/^[\\\\x00-\\\\xFF]+$/.test(n)) return n;\\n try {\\n const r = new TextDecoder(t, {\\n fatal: !0\\n }),\\n s = (0, i.stringToBytes)(n);\\n n = r.decode(s);\\n e = !1;\\n } catch (_unused13) {}\\n }\\n return n;\\n }\\n function fixupEncoding(t) {\\n if (e && /[\\\\x80-\\\\xff]/.test(t)) {\\n t = textdecode(\\"utf-8\\", t);\\n e && (t = textdecode(\\"iso-8859-1\\", t));\\n }\\n return t;\\n }\\n function rfc2616unquote(t) {\\n if (t.startsWith('\\"')) {\\n const e = t.slice(1).split('\\\\\\\\\\"');\\n for (let t = 0; t < e.length; ++t) {\\n const n = e[t].indexOf('\\"');\\n if (-1 !== n) {\\n e[t] = e[t].slice(0, n);\\n e.length = t + 1;\\n }\\n e[t] = e[t].replaceAll(/\\\\\\\\(.)/g, \\"$1\\");\\n }\\n t = e.join('\\"');\\n }\\n return t;\\n }\\n function rfc5987decode(t) {\\n const e = t.indexOf(\\"'\\");\\n if (-1 === e) return t;\\n return textdecode(t.slice(0, e), t.slice(e + 1).replace(/^[^']*'/, \\"\\"));\\n }\\n function rfc2047decode(t) {\\n return !t.startsWith(\\"=?\\") || /[\\\\x00-\\\\x19\\\\x80-\\\\xff]/.test(t) ? t : t.replaceAll(/=\\\\?([\\\\w-]*)\\\\?([QqBb])\\\\?((?:[^?]|\\\\?(?!=))*)\\\\?=/g, function (t, e, n, i) {\\n if (\\"q\\" === n || \\"Q\\" === n) return textdecode(e, i = (i = i.replaceAll(\\"_\\", \\" \\")).replaceAll(/=([0-9a-fA-F]{2})/g, function (t, e) {\\n return String.fromCharCode(parseInt(e, 16));\\n }));\\n try {\\n i = atob(i);\\n } catch (_unused14) {}\\n return textdecode(e, i);\\n });\\n }\\n return \\"\\";\\n };\\n n(89);\\n n(148);\\n var i = n(1);\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n Object.defineProperty(e, \\"__esModule\\", {\\n value: !0\\n });\\n e.PDFNetworkStream = void 0;\\n n(89);\\n var i = n(1),\\n r = n(181);\\n class NetworkManager {\\n constructor(t) {\\n let e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\\n this.url = t;\\n this.isHttp = /^https?:/i.test(t);\\n this.httpHeaders = this.isHttp && e.httpHeaders || Object.create(null);\\n this.withCredentials = e.withCredentials || !1;\\n this.currXhrId = 0;\\n this.pendingRequests = Object.create(null);\\n }\\n requestRange(t, e, n) {\\n const i = {\\n begin: t,\\n end: e\\n };\\n for (const t in n) i[t] = n[t];\\n return this.request(i);\\n }\\n requestFull(t) {\\n return this.request(t);\\n }\\n request(t) {\\n const e = new XMLHttpRequest(),\\n n = this.currXhrId++,\\n i = this.pendingRequests[n] = {\\n xhr: e\\n };\\n e.open(\\"GET\\", this.url, !0);\\n e.withCredentials = this.withCredentials;\\n for (const t in this.httpHeaders) {\\n const n = this.httpHeaders[t];\\n void 0 !== n && e.setRequestHeader(t, n);\\n }\\n if (this.isHttp && \\"begin\\" in t && \\"end\\" in t) {\\n e.setRequestHeader(\\"Range\\", \\"bytes=\\".concat(t.begin, \\"-\\").concat(t.end - 1));\\n i.expectedStatus = 206;\\n } else i.expectedStatus = 200;\\n e.responseType = \\"arraybuffer\\";\\n t.onError && (e.onerror = function (n) {\\n t.onError(e.status);\\n });\\n e.onreadystatechange = this.onStateChange.bind(this, n);\\n e.onprogress = this.onProgress.bind(this, n);\\n i.onHeadersReceived = t.onHeadersReceived;\\n i.onDone = t.onDone;\\n i.onError = t.onError;\\n i.onProgress = t.onProgress;\\n e.send(null);\\n return n;\\n }\\n onProgress(t, e) {\\n var _n$onProgress;\\n const n = this.pendingRequests[t];\\n n && ((_n$onProgress = n.onProgress) === null || _n$onProgress === void 0 ? void 0 : _n$onProgress.call(n, e));\\n }\\n onStateChange(t, e) {\\n var _n$onError3;\\n const n = this.pendingRequests[t];\\n if (!n) return;\\n const r = n.xhr;\\n if (r.readyState >= 2 && n.onHeadersReceived) {\\n n.onHeadersReceived();\\n delete n.onHeadersReceived;\\n }\\n if (4 !== r.readyState) return;\\n if (!(t in this.pendingRequests)) return;\\n delete this.pendingRequests[t];\\n if (0 === r.status && this.isHttp) {\\n var _n$onError;\\n (_n$onError = n.onError) === null || _n$onError === void 0 ? void 0 : _n$onError.call(n, r.status);\\n return;\\n }\\n const s = r.status || 200;\\n if (!(200 === s && 206 === n.expectedStatus) && s !== n.expectedStatus) {\\n var _n$onError2;\\n (_n$onError2 = n.onError) === null || _n$onError2 === void 0 ? void 0 : _n$onError2.call(n, r.status);\\n return;\\n }\\n const a = function getArrayBuffer(t) {\\n const e = t.response;\\n return \\"string\\" != typeof e ? e : (0, i.stringToBytes)(e).buffer;\\n }(r);\\n if (206 === s) {\\n const t = r.getResponseHeader(\\"Content-Range\\"),\\n e = /bytes (\\\\d+)-(\\\\d+)\\\\/(\\\\d+)/.exec(t);\\n n.onDone({\\n begin: parseInt(e[1], 10),\\n chunk: a\\n });\\n } else a ? n.onDone({\\n begin: 0,\\n chunk: a\\n }) : (_n$onError3 = n.onError) === null || _n$onError3 === void 0 ? void 0 : _n$onError3.call(n, r.status);\\n }\\n getRequestXhr(t) {\\n return this.pendingRequests[t].xhr;\\n }\\n isPendingRequest(t) {\\n return t in this.pendingRequests;\\n }\\n abortRequest(t) {\\n const e = this.pendingRequests[t].xhr;\\n delete this.pendingRequests[t];\\n e.abort();\\n }\\n }\\n e.PDFNetworkStream = class PDFNetworkStream {\\n constructor(t) {\\n this._source = t;\\n this._manager = new NetworkManager(t.url, {\\n httpHeaders: t.httpHeaders,\\n withCredentials: t.withCredentials\\n });\\n this._rangeChunkSize = t.rangeChunkSize;\\n this._fullRequestReader = null;\\n this._rangeRequestReaders = [];\\n }\\n _onRangeRequestReaderClosed(t) {\\n const e = this._rangeRequestReaders.indexOf(t);\\n e >= 0 && this._rangeRequestReaders.splice(e, 1);\\n }\\n getFullReader() {\\n (0, i.assert)(!this._fullRequestReader, \\"PDFNetworkStream.getFullReader can only be called once.\\");\\n this._fullRequestReader = new PDFNetworkStreamFullRequestReader(this._manager, this._source);\\n return this._fullRequestReader;\\n }\\n getRangeReader(t, e) {\\n const n = new PDFNetworkStreamRangeRequestReader(this._manager, t, e);\\n n.onClosed = this._onRangeRequestReaderClosed.bind(this);\\n this._rangeRequestReaders.push(n);\\n return n;\\n }\\n cancelAllRequests(t) {\\n var _this$_fullRequestRea10;\\n (_this$_fullRequestRea10 = this._fullRequestReader) === null || _this$_fullRequestRea10 === void 0 ? void 0 : _this$_fullRequestRea10.cancel(t);\\n for (const e of this._rangeRequestReaders.slice(0)) e.cancel(t);\\n }\\n };\\n class PDFNetworkStreamFullRequestReader {\\n constructor(t, e) {\\n this._manager = t;\\n const n = {\\n onHeadersReceived: this._onHeadersReceived.bind(this),\\n onDone: this._onDone.bind(this),\\n onError: this._onError.bind(this),\\n onProgress: this._onProgress.bind(this)\\n };\\n this._url = e.url;\\n this._fullRequestId = t.requestFull(n);\\n this._headersReceivedCapability = new i.PromiseCapability();\\n this._disableRange = e.disableRange || !1;\\n this._contentLength = e.length;\\n this._rangeChunkSize = e.rangeChunkSize;\\n this._rangeChunkSize || this._disableRange || (this._disableRange = !0);\\n this._isStreamingSupported = !1;\\n this._isRangeSupported = !1;\\n this._cachedChunks = [];\\n this._requests = [];\\n this._done = !1;\\n this._storedError = void 0;\\n this._filename = null;\\n this.onProgress = null;\\n }\\n _onHeadersReceived() {\\n const t = this._fullRequestId,\\n e = this._manager.getRequestXhr(t),\\n getResponseHeader = t => e.getResponseHeader(t),\\n {\\n allowRangeRequests: n,\\n suggestedLength: i\\n } = (0, r.validateRangeRequestCapabilities)({\\n getResponseHeader: getResponseHeader,\\n isHttp: this._manager.isHttp,\\n rangeChunkSize: this._rangeChunkSize,\\n disableRange: this._disableRange\\n });\\n n && (this._isRangeSupported = !0);\\n this._contentLength = i || this._contentLength;\\n this._filename = (0, r.extractFilenameFromHeader)(getResponseHeader);\\n this._isRangeSupported && this._manager.abortRequest(t);\\n this._headersReceivedCapability.resolve();\\n }\\n _onDone(t) {\\n if (t) if (this._requests.length > 0) {\\n this._requests.shift().resolve({\\n value: t.chunk,\\n done: !1\\n });\\n } else this._cachedChunks.push(t.chunk);\\n this._done = !0;\\n if (!(this._cachedChunks.length > 0)) {\\n for (const t of this._requests) t.resolve({\\n value: void 0,\\n done: !0\\n });\\n this._requests.length = 0;\\n }\\n }\\n _onError(t) {\\n this._storedError = (0, r.createResponseStatusError)(t, this._url);\\n this._headersReceivedCapability.reject(this._storedError);\\n for (const t of this._requests) t.reject(this._storedError);\\n this._requests.length = 0;\\n this._cachedChunks.length = 0;\\n }\\n _onProgress(t) {\\n var _this$onProgress3;\\n (_this$onProgress3 = this.onProgress) === null || _this$onProgress3 === void 0 ? void 0 : _this$onProgress3.call(this, {\\n loaded: t.loaded,\\n total: t.lengthComputable ? t.total : this._contentLength\\n });\\n }\\n get filename() {\\n return this._filename;\\n }\\n get isRangeSupported() {\\n return this._isRangeSupported;\\n }\\n get isStreamingSupported() {\\n return this._isStreamingSupported;\\n }\\n get contentLength() {\\n return this._contentLength;\\n }\\n get headersReady() {\\n return this._headersReceivedCapability.promise;\\n }\\n async read() {\\n if (this._storedError) throw this._storedError;\\n if (this._cachedChunks.length > 0) {\\n return {\\n value: this._cachedChunks.shift(),\\n done: !1\\n };\\n }\\n if (this._done) return {\\n value: void 0,\\n done: !0\\n };\\n const t = new i.PromiseCapability();\\n this._requests.push(t);\\n return t.promise;\\n }\\n cancel(t) {\\n this._done = !0;\\n this._headersReceivedCapability.reject(t);\\n for (const t of this._requests) t.resolve({\\n value: void 0,\\n done: !0\\n });\\n this._requests.length = 0;\\n this._manager.isPendingRequest(this._fullRequestId) && this._manager.abortRequest(this._fullRequestId);\\n this._fullRequestReader = null;\\n }\\n }\\n class PDFNetworkStreamRangeRequestReader {\\n constructor(t, e, n) {\\n this._manager = t;\\n const i = {\\n onDone: this._onDone.bind(this),\\n onError: this._onError.bind(this),\\n onProgress: this._onProgress.bind(this)\\n };\\n this._url = t.url;\\n this._requestId = t.requestRange(e, n, i);\\n this._requests = [];\\n this._queuedChunk = null;\\n this._done = !1;\\n this._storedError = void 0;\\n this.onProgress = null;\\n this.onClosed = null;\\n }\\n _close() {\\n var _this$onClosed;\\n (_this$onClosed = this.onClosed) === null || _this$onClosed === void 0 ? void 0 : _this$onClosed.call(this, this);\\n }\\n _onDone(t) {\\n const e = t.chunk;\\n if (this._requests.length > 0) {\\n this._requests.shift().resolve({\\n value: e,\\n done: !1\\n });\\n } else this._queuedChunk = e;\\n this._done = !0;\\n for (const t of this._requests) t.resolve({\\n value: void 0,\\n done: !0\\n });\\n this._requests.length = 0;\\n this._close();\\n }\\n _onError(t) {\\n this._storedError = (0, r.createResponseStatusError)(t, this._url);\\n for (const t of this._requests) t.reject(this._storedError);\\n this._requests.length = 0;\\n this._queuedChunk = null;\\n }\\n _onProgress(t) {\\n var _this$onProgress4;\\n this.isStreamingSupported || ((_this$onProgress4 = this.onProgress) === null || _this$onProgress4 === void 0 ? void 0 : _this$onProgress4.call(this, {\\n loaded: t.loaded\\n }));\\n }\\n get isStreamingSupported() {\\n return !1;\\n }\\n async read() {\\n if (this._storedError) throw this._storedError;\\n if (null !== this._queuedChunk) {\\n const t = this._queuedChunk;\\n this._queuedChunk = null;\\n return {\\n value: t,\\n done: !1\\n };\\n }\\n if (this._done) return {\\n value: void 0,\\n done: !0\\n };\\n const t = new i.PromiseCapability();\\n this._requests.push(t);\\n return t.promise;\\n }\\n cancel(t) {\\n this._done = !0;\\n for (const t of this._requests) t.resolve({\\n value: void 0,\\n done: !0\\n });\\n this._requests.length = 0;\\n this._manager.isPendingRequest(this._requestId) && this._manager.abortRequest(this._requestId);\\n this._close();\\n }\\n }\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n Object.defineProperty(e, \\"__esModule\\", {\\n value: !0\\n });\\n e.PDFNodeStream = void 0;\\n n(89);\\n n(93);\\n n(101);\\n n(102);\\n n(105);\\n n(107);\\n n(109);\\n n(113);\\n n(116);\\n n(123);\\n var i = n(1),\\n r = n(181);\\n const s = /^file:\\\\/\\\\/\\\\/[a-zA-Z]:\\\\//;\\n e.PDFNodeStream = class PDFNodeStream {\\n constructor(t) {\\n this.source = t;\\n this.url = function parseUrl(t) {\\n const e = __webpack_require__(Object(function webpackMissingModule() { var e = new Error(\\"Cannot find module 'url'\\"); e.code = 'MODULE_NOT_FOUND'; throw e; }())),\\n n = e.parse(t);\\n if (\\"file:\\" === n.protocol || n.host) return n;\\n if (/^[a-z]:[/\\\\\\\\]/i.test(t)) return e.parse(\\"file:///\\".concat(t));\\n n.host || (n.protocol = \\"file:\\");\\n return n;\\n }(t.url);\\n this.isHttp = \\"http:\\" === this.url.protocol || \\"https:\\" === this.url.protocol;\\n this.isFsUrl = \\"file:\\" === this.url.protocol;\\n this.httpHeaders = this.isHttp && t.httpHeaders || {};\\n this._fullRequestReader = null;\\n this._rangeRequestReaders = [];\\n }\\n get _progressiveDataLength() {\\n var _this$_fullRequestRea11, _this$_fullRequestRea12;\\n return (_this$_fullRequestRea11 = (_this$_fullRequestRea12 = this._fullRequestReader) === null || _this$_fullRequestRea12 === void 0 ? void 0 : _this$_fullRequestRea12._loaded) !== null && _this$_fullRequestRea11 !== void 0 ? _this$_fullRequestRea11 : 0;\\n }\\n getFullReader() {\\n (0, i.assert)(!this._fullRequestReader, \\"PDFNodeStream.getFullReader can only be called once.\\");\\n this._fullRequestReader = this.isFsUrl ? new PDFNodeStreamFsFullReader(this) : new PDFNodeStreamFullReader(this);\\n return this._fullRequestReader;\\n }\\n getRangeReader(t, e) {\\n if (e <= this._progressiveDataLength) return null;\\n const n = this.isFsUrl ? new PDFNodeStreamFsRangeReader(this, t, e) : new PDFNodeStreamRangeReader(this, t, e);\\n this._rangeRequestReaders.push(n);\\n return n;\\n }\\n cancelAllRequests(t) {\\n var _this$_fullRequestRea13;\\n (_this$_fullRequestRea13 = this._fullRequestReader) === null || _this$_fullRequestRea13 === void 0 ? void 0 : _this$_fullRequestRea13.cancel(t);\\n for (const e of this._rangeRequestReaders.slice(0)) e.cancel(t);\\n }\\n };\\n class BaseFullReader {\\n constructor(t) {\\n this._url = t.url;\\n this._done = !1;\\n this._storedError = null;\\n this.onProgress = null;\\n const e = t.source;\\n this._contentLength = e.length;\\n this._loaded = 0;\\n this._filename = null;\\n this._disableRange = e.disableRange || !1;\\n this._rangeChunkSize = e.rangeChunkSize;\\n this._rangeChunkSize || this._disableRange || (this._disableRange = !0);\\n this._isStreamingSupported = !e.disableStream;\\n this._isRangeSupported = !e.disableRange;\\n this._readableStream = null;\\n this._readCapability = new i.PromiseCapability();\\n this._headersCapability = new i.PromiseCapability();\\n }\\n get headersReady() {\\n return this._headersCapability.promise;\\n }\\n get filename() {\\n return this._filename;\\n }\\n get contentLength() {\\n return this._contentLength;\\n }\\n get isRangeSupported() {\\n return this._isRangeSupported;\\n }\\n get isStreamingSupported() {\\n return this._isStreamingSupported;\\n }\\n async read() {\\n var _this$onProgress5;\\n await this._readCapability.promise;\\n if (this._done) return {\\n value: void 0,\\n done: !0\\n };\\n if (this._storedError) throw this._storedError;\\n const t = this._readableStream.read();\\n if (null === t) {\\n this._readCapability = new i.PromiseCapability();\\n return this.read();\\n }\\n this._loaded += t.length;\\n (_this$onProgress5 = this.onProgress) === null || _this$onProgress5 === void 0 ? void 0 : _this$onProgress5.call(this, {\\n loaded: this._loaded,\\n total: this._contentLength\\n });\\n return {\\n value: new Uint8Array(t).buffer,\\n done: !1\\n };\\n }\\n cancel(t) {\\n this._readableStream ? this._readableStream.destroy(t) : this._error(t);\\n }\\n _error(t) {\\n this._storedError = t;\\n this._readCapability.resolve();\\n }\\n _setReadableStream(t) {\\n this._readableStream = t;\\n t.on(\\"readable\\", () => {\\n this._readCapability.resolve();\\n });\\n t.on(\\"end\\", () => {\\n t.destroy();\\n this._done = !0;\\n this._readCapability.resolve();\\n });\\n t.on(\\"error\\", t => {\\n this._error(t);\\n });\\n !this._isStreamingSupported && this._isRangeSupported && this._error(new i.AbortException(\\"streaming is disabled\\"));\\n this._storedError && this._readableStream.destroy(this._storedError);\\n }\\n }\\n class BaseRangeReader {\\n constructor(t) {\\n this._url = t.url;\\n this._done = !1;\\n this._storedError = null;\\n this.onProgress = null;\\n this._loaded = 0;\\n this._readableStream = null;\\n this._readCapability = new i.PromiseCapability();\\n const e = t.source;\\n this._isStreamingSupported = !e.disableStream;\\n }\\n get isStreamingSupported() {\\n return this._isStreamingSupported;\\n }\\n async read() {\\n var _this$onProgress6;\\n await this._readCapability.promise;\\n if (this._done) return {\\n value: void 0,\\n done: !0\\n };\\n if (this._storedError) throw this._storedError;\\n const t = this._readableStream.read();\\n if (null === t) {\\n this._readCapability = new i.PromiseCapability();\\n return this.read();\\n }\\n this._loaded += t.length;\\n (_this$onProgress6 = this.onProgress) === null || _this$onProgress6 === void 0 ? void 0 : _this$onProgress6.call(this, {\\n loaded: this._loaded\\n });\\n return {\\n value: new Uint8Array(t).buffer,\\n done: !1\\n };\\n }\\n cancel(t) {\\n this._readableStream ? this._readableStream.destroy(t) : this._error(t);\\n }\\n _error(t) {\\n this._storedError = t;\\n this._readCapability.resolve();\\n }\\n _setReadableStream(t) {\\n this._readableStream = t;\\n t.on(\\"readable\\", () => {\\n this._readCapability.resolve();\\n });\\n t.on(\\"end\\", () => {\\n t.destroy();\\n this._done = !0;\\n this._readCapability.resolve();\\n });\\n t.on(\\"error\\", t => {\\n this._error(t);\\n });\\n this._storedError && this._readableStream.destroy(this._storedError);\\n }\\n }\\n function createRequestOptions(t, e) {\\n return {\\n protocol: t.protocol,\\n auth: t.auth,\\n host: t.hostname,\\n port: t.port,\\n path: t.path,\\n method: \\"GET\\",\\n headers: e\\n };\\n }\\n class PDFNodeStreamFullReader extends BaseFullReader {\\n constructor(t) {\\n super(t);\\n const handleResponse = e => {\\n if (404 === e.statusCode) {\\n const t = new i.MissingPDFException(\\"Missing PDF \\\\\\"\\".concat(this._url, \\"\\\\\\".\\"));\\n this._storedError = t;\\n this._headersCapability.reject(t);\\n return;\\n }\\n this._headersCapability.resolve();\\n this._setReadableStream(e);\\n const getResponseHeader = t => this._readableStream.headers[t.toLowerCase()],\\n {\\n allowRangeRequests: n,\\n suggestedLength: s\\n } = (0, r.validateRangeRequestCapabilities)({\\n getResponseHeader: getResponseHeader,\\n isHttp: t.isHttp,\\n rangeChunkSize: this._rangeChunkSize,\\n disableRange: this._disableRange\\n });\\n this._isRangeSupported = n;\\n this._contentLength = s || this._contentLength;\\n this._filename = (0, r.extractFilenameFromHeader)(getResponseHeader);\\n };\\n this._request = null;\\n if (\\"http:\\" === this._url.protocol) {\\n const e = __webpack_require__(Object(function webpackMissingModule() { var e = new Error(\\"Cannot find module 'http'\\"); e.code = 'MODULE_NOT_FOUND'; throw e; }()));\\n this._request = e.request(createRequestOptions(this._url, t.httpHeaders), handleResponse);\\n } else {\\n const e = __webpack_require__(Object(function webpackMissingModule() { var e = new Error(\\"Cannot find module 'https'\\"); e.code = 'MODULE_NOT_FOUND'; throw e; }()));\\n this._request = e.request(createRequestOptions(this._url, t.httpHeaders), handleResponse);\\n }\\n this._request.on(\\"error\\", t => {\\n this._storedError = t;\\n this._headersCapability.reject(t);\\n });\\n this._request.end();\\n }\\n }\\n class PDFNodeStreamRangeReader extends BaseRangeReader {\\n constructor(t, e, n) {\\n super(t);\\n this._httpHeaders = {};\\n for (const e in t.httpHeaders) {\\n const n = t.httpHeaders[e];\\n void 0 !== n && (this._httpHeaders[e] = n);\\n }\\n this._httpHeaders.Range = \\"bytes=\\".concat(e, \\"-\\").concat(n - 1);\\n const handleResponse = t => {\\n if (404 !== t.statusCode) this._setReadableStream(t);else {\\n const t = new i.MissingPDFException(\\"Missing PDF \\\\\\"\\".concat(this._url, \\"\\\\\\".\\"));\\n this._storedError = t;\\n }\\n };\\n this._request = null;\\n if (\\"http:\\" === this._url.protocol) {\\n const t = __webpack_require__(Object(function webpackMissingModule() { var e = new Error(\\"Cannot find module 'http'\\"); e.code = 'MODULE_NOT_FOUND'; throw e; }()));\\n this._request = t.request(createRequestOptions(this._url, this._httpHeaders), handleResponse);\\n } else {\\n const t = __webpack_require__(Object(function webpackMissingModule() { var e = new Error(\\"Cannot find module 'https'\\"); e.code = 'MODULE_NOT_FOUND'; throw e; }()));\\n this._request = t.request(createRequestOptions(this._url, this._httpHeaders), handleResponse);\\n }\\n this._request.on(\\"error\\", t => {\\n this._storedError = t;\\n });\\n this._request.end();\\n }\\n }\\n class PDFNodeStreamFsFullReader extends BaseFullReader {\\n constructor(t) {\\n super(t);\\n let e = decodeURIComponent(this._url.path);\\n s.test(this._url.href) && (e = e.replace(/^\\\\//, \\"\\"));\\n const n = __webpack_require__(Object(function webpackMissingModule() { var e = new Error(\\"Cannot find module 'fs'\\"); e.code = 'MODULE_NOT_FOUND'; throw e; }()));\\n n.lstat(e, (t, r) => {\\n if (t) {\\n \\"ENOENT\\" === t.code && (t = new i.MissingPDFException(\\"Missing PDF \\\\\\"\\".concat(e, \\"\\\\\\".\\")));\\n this._storedError = t;\\n this._headersCapability.reject(t);\\n } else {\\n this._contentLength = r.size;\\n this._setReadableStream(n.createReadStream(e));\\n this._headersCapability.resolve();\\n }\\n });\\n }\\n }\\n class PDFNodeStreamFsRangeReader extends BaseRangeReader {\\n constructor(t, e, n) {\\n super(t);\\n let i = decodeURIComponent(this._url.path);\\n s.test(this._url.href) && (i = i.replace(/^\\\\//, \\"\\"));\\n const r = __webpack_require__(Object(function webpackMissingModule() { var e = new Error(\\"Cannot find module 'fs'\\"); e.code = 'MODULE_NOT_FOUND'; throw e; }()));\\n this._setReadableStream(r.createReadStream(i, {\\n start: e,\\n end: n - 1\\n }));\\n }\\n }\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n Object.defineProperty(e, \\"__esModule\\", {\\n value: !0\\n });\\n e.SVGGraphics = void 0;\\n n(84);\\n n(86);\\n n(87);\\n n(93);\\n n(101);\\n n(102);\\n n(105);\\n n(107);\\n n(109);\\n n(113);\\n n(116);\\n n(123);\\n n(2);\\n n(89);\\n n(186);\\n var i = n(167),\\n r = n(1);\\n const s = \\"normal\\",\\n a = \\"normal\\",\\n o = \\"#000000\\",\\n l = [\\"butt\\", \\"round\\", \\"square\\"],\\n c = [\\"miter\\", \\"round\\", \\"bevel\\"],\\n createObjectURL = function createObjectURL(t) {\\n let e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : \\"\\",\\n n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2];\\n if (URL.createObjectURL && \\"undefined\\" != typeof Blob && !n) return URL.createObjectURL(new Blob([t], {\\n type: e\\n }));\\n const i = \\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\\";\\n let r = \\"data:\\".concat(e, \\";base64,\\");\\n for (let e = 0, n = t.length; e < n; e += 3) {\\n const s = 255 & t[e],\\n a = 255 & t[e + 1],\\n o = 255 & t[e + 2];\\n r += i[s >> 2] + i[(3 & s) << 4 | a >> 4] + i[e + 1 < n ? (15 & a) << 2 | o >> 6 : 64] + i[e + 2 < n ? 63 & o : 64];\\n }\\n return r;\\n },\\n h = function () {\\n const t = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]),\\n e = new Int32Array(256);\\n for (let t = 0; t < 256; t++) {\\n let n = t;\\n for (let t = 0; t < 8; t++) n = 1 & n ? 3988292384 ^ n >> 1 & 2147483647 : n >> 1 & 2147483647;\\n e[t] = n;\\n }\\n function writePngChunk(t, n, i, r) {\\n let s = r;\\n const a = n.length;\\n i[s] = a >> 24 & 255;\\n i[s + 1] = a >> 16 & 255;\\n i[s + 2] = a >> 8 & 255;\\n i[s + 3] = 255 & a;\\n s += 4;\\n i[s] = 255 & t.charCodeAt(0);\\n i[s + 1] = 255 & t.charCodeAt(1);\\n i[s + 2] = 255 & t.charCodeAt(2);\\n i[s + 3] = 255 & t.charCodeAt(3);\\n s += 4;\\n i.set(n, s);\\n s += n.length;\\n const o = function crc32(t, n, i) {\\n let r = -1;\\n for (let s = n; s < i; s++) {\\n const n = 255 & (r ^ t[s]);\\n r = r >>> 8 ^ e[n];\\n }\\n return -1 ^ r;\\n }(i, r + 4, s);\\n i[s] = o >> 24 & 255;\\n i[s + 1] = o >> 16 & 255;\\n i[s + 2] = o >> 8 & 255;\\n i[s + 3] = 255 & o;\\n }\\n function deflateSyncUncompressed(t) {\\n let e = t.length;\\n const n = 65535,\\n i = Math.ceil(e / n),\\n r = new Uint8Array(2 + e + 5 * i + 4);\\n let s = 0;\\n r[s++] = 120;\\n r[s++] = 156;\\n let a = 0;\\n for (; e > n;) {\\n r[s++] = 0;\\n r[s++] = 255;\\n r[s++] = 255;\\n r[s++] = 0;\\n r[s++] = 0;\\n r.set(t.subarray(a, a + n), s);\\n s += n;\\n a += n;\\n e -= n;\\n }\\n r[s++] = 1;\\n r[s++] = 255 & e;\\n r[s++] = e >> 8 & 255;\\n r[s++] = 255 & ~e;\\n r[s++] = (65535 & ~e) >> 8 & 255;\\n r.set(t.subarray(a), s);\\n s += t.length - a;\\n const o = function adler32(t, e, n) {\\n let i = 1,\\n r = 0;\\n for (let s = e; s < n; ++s) {\\n i = (i + (255 & t[s])) % 65521;\\n r = (r + i) % 65521;\\n }\\n return r << 16 | i;\\n }(t, 0, t.length);\\n r[s++] = o >> 24 & 255;\\n r[s++] = o >> 16 & 255;\\n r[s++] = o >> 8 & 255;\\n r[s++] = 255 & o;\\n return r;\\n }\\n function encode(e, n, i, s) {\\n const a = e.width,\\n o = e.height;\\n let l, c, h;\\n const d = e.data;\\n switch (n) {\\n case r.ImageKind.GRAYSCALE_1BPP:\\n c = 0;\\n l = 1;\\n h = a + 7 >> 3;\\n break;\\n case r.ImageKind.RGB_24BPP:\\n c = 2;\\n l = 8;\\n h = 3 * a;\\n break;\\n case r.ImageKind.RGBA_32BPP:\\n c = 6;\\n l = 8;\\n h = 4 * a;\\n break;\\n default:\\n throw new Error(\\"invalid format\\");\\n }\\n const u = new Uint8Array((1 + h) * o);\\n let p = 0,\\n f = 0;\\n for (let t = 0; t < o; ++t) {\\n u[p++] = 0;\\n u.set(d.subarray(f, f + h), p);\\n f += h;\\n p += h;\\n }\\n if (n === r.ImageKind.GRAYSCALE_1BPP && s) {\\n p = 0;\\n for (let t = 0; t < o; t++) {\\n p++;\\n for (let t = 0; t < h; t++) u[p++] ^= 255;\\n }\\n }\\n const g = new Uint8Array([a >> 24 & 255, a >> 16 & 255, a >> 8 & 255, 255 & a, o >> 24 & 255, o >> 16 & 255, o >> 8 & 255, 255 & o, l, c, 0, 0, 0]),\\n m = function deflateSync(t) {\\n if (!r.isNodeJS) return deflateSyncUncompressed(t);\\n try {\\n const e = parseInt(process.versions.node) >= 8 ? t : Buffer.from(t),\\n n = Object(function webpackMissingModule() { var e = new Error(\\"Cannot find module 'zlib'\\"); e.code = 'MODULE_NOT_FOUND'; throw e; }())(e, {\\n level: 9\\n });\\n return n instanceof Uint8Array ? n : new Uint8Array(n);\\n } catch (t) {\\n (0, r.warn)(\\"Not compressing PNG because zlib.deflateSync is unavailable: \\" + t);\\n }\\n return deflateSyncUncompressed(t);\\n }(u),\\n b = t.length + 36 + g.length + m.length,\\n v = new Uint8Array(b);\\n let y = 0;\\n v.set(t, y);\\n y += t.length;\\n writePngChunk(\\"IHDR\\", g, v, y);\\n y += 12 + g.length;\\n writePngChunk(\\"IDATA\\", m, v, y);\\n y += 12 + m.length;\\n writePngChunk(\\"IEND\\", new Uint8Array(0), v, y);\\n return createObjectURL(v, \\"image/png\\", i);\\n }\\n return function convertImgDataToPng(t, e, n) {\\n return encode(t, void 0 === t.kind ? r.ImageKind.GRAYSCALE_1BPP : t.kind, e, n);\\n };\\n }();\\n class SVGExtraState {\\n constructor() {\\n this.fontSizeScale = 1;\\n this.fontWeight = a;\\n this.fontSize = 0;\\n this.textMatrix = r.IDENTITY_MATRIX;\\n this.fontMatrix = r.FONT_IDENTITY_MATRIX;\\n this.leading = 0;\\n this.textRenderingMode = r.TextRenderingMode.FILL;\\n this.textMatrixScale = 1;\\n this.x = 0;\\n this.y = 0;\\n this.lineX = 0;\\n this.lineY = 0;\\n this.charSpacing = 0;\\n this.wordSpacing = 0;\\n this.textHScale = 1;\\n this.textRise = 0;\\n this.fillColor = o;\\n this.strokeColor = \\"#000000\\";\\n this.fillAlpha = 1;\\n this.strokeAlpha = 1;\\n this.lineWidth = 1;\\n this.lineJoin = \\"\\";\\n this.lineCap = \\"\\";\\n this.miterLimit = 0;\\n this.dashArray = [];\\n this.dashPhase = 0;\\n this.dependencies = [];\\n this.activeClipUrl = null;\\n this.clipGroup = null;\\n this.maskId = \\"\\";\\n }\\n clone() {\\n return Object.create(this);\\n }\\n setCurrentPoint(t, e) {\\n this.x = t;\\n this.y = e;\\n }\\n }\\n function pf(t) {\\n if (Number.isInteger(t)) return t.toString();\\n const e = t.toFixed(10);\\n let n = e.length - 1;\\n if (\\"0\\" !== e[n]) return e;\\n do {\\n n--;\\n } while (\\"0\\" === e[n]);\\n return e.substring(0, \\".\\" === e[n] ? n : n + 1);\\n }\\n function pm(t) {\\n if (0 === t[4] && 0 === t[5]) {\\n if (0 === t[1] && 0 === t[2]) return 1 === t[0] && 1 === t[3] ? \\"\\" : \\"scale(\\".concat(pf(t[0]), \\" \\").concat(pf(t[3]), \\")\\");\\n if (t[0] === t[3] && t[1] === -t[2]) {\\n return \\"rotate(\\".concat(pf(180 * Math.acos(t[0]) / Math.PI), \\")\\");\\n }\\n } else if (1 === t[0] && 0 === t[1] && 0 === t[2] && 1 === t[3]) return \\"translate(\\".concat(pf(t[4]), \\" \\").concat(pf(t[5]), \\")\\");\\n return \\"matrix(\\".concat(pf(t[0]), \\" \\").concat(pf(t[1]), \\" \\").concat(pf(t[2]), \\" \\").concat(pf(t[3]), \\" \\").concat(pf(t[4]), \\" \\").concat(pf(t[5]), \\")\\");\\n }\\n let d = 0,\\n u = 0,\\n p = 0;\\n e.SVGGraphics = class SVGGraphics {\\n constructor(t, e) {\\n let n = arguments.length > 2 && void 0 !== arguments[2] && arguments[2];\\n (0, i.deprecated)(\\"The SVG back-end is no longer maintained and *may* be removed in the future.\\");\\n this.svgFactory = new i.DOMSVGFactory();\\n this.current = new SVGExtraState();\\n this.transformMatrix = r.IDENTITY_MATRIX;\\n this.transformStack = [];\\n this.extraStack = [];\\n this.commonObjs = t;\\n this.objs = e;\\n this.pendingClip = null;\\n this.pendingEOFill = !1;\\n this.embedFonts = !1;\\n this.embeddedFonts = Object.create(null);\\n this.cssStyle = null;\\n this.forceDataSchema = !!n;\\n this._operatorIdMapping = [];\\n for (const t in r.OPS) this._operatorIdMapping[r.OPS[t]] = t;\\n }\\n getObject(t) {\\n let e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null;\\n return \\"string\\" == typeof t ? t.startsWith(\\"g_\\") ? this.commonObjs.get(t) : this.objs.get(t) : e;\\n }\\n save() {\\n this.transformStack.push(this.transformMatrix);\\n const t = this.current;\\n this.extraStack.push(t);\\n this.current = t.clone();\\n }\\n restore() {\\n this.transformMatrix = this.transformStack.pop();\\n this.current = this.extraStack.pop();\\n this.pendingClip = null;\\n this.tgrp = null;\\n }\\n group(t) {\\n this.save();\\n this.executeOpTree(t);\\n this.restore();\\n }\\n loadDependencies(t) {\\n const e = t.fnArray,\\n n = t.argsArray;\\n for (let t = 0, i = e.length; t < i; t++) if (e[t] === r.OPS.dependency) for (const e of n[t]) {\\n const t = e.startsWith(\\"g_\\") ? this.commonObjs : this.objs,\\n n = new Promise(n => {\\n t.get(e, n);\\n });\\n this.current.dependencies.push(n);\\n }\\n return Promise.all(this.current.dependencies);\\n }\\n transform(t, e, n, i, s, a) {\\n const o = [t, e, n, i, s, a];\\n this.transformMatrix = r.Util.transform(this.transformMatrix, o);\\n this.tgrp = null;\\n }\\n getSVG(t, e) {\\n this.viewport = e;\\n const n = this._initialize(e);\\n return this.loadDependencies(t).then(() => {\\n this.transformMatrix = r.IDENTITY_MATRIX;\\n this.executeOpTree(this.convertOpList(t));\\n return n;\\n });\\n }\\n convertOpList(t) {\\n const e = this._operatorIdMapping,\\n n = t.argsArray,\\n i = t.fnArray,\\n r = [];\\n for (let t = 0, s = i.length; t < s; t++) {\\n const s = i[t];\\n r.push({\\n fnId: s,\\n fn: e[s],\\n args: n[t]\\n });\\n }\\n return function opListToTree(t) {\\n let e = [];\\n const n = [];\\n for (const i of t) if (\\"save\\" !== i.fn) \\"restore\\" === i.fn ? e = n.pop() : e.push(i);else {\\n e.push({\\n fnId: 92,\\n fn: \\"group\\",\\n items: []\\n });\\n n.push(e);\\n e = e.at(-1).items;\\n }\\n return e;\\n }(r);\\n }\\n executeOpTree(t) {\\n for (const e of t) {\\n const t = e.fn,\\n n = e.fnId,\\n i = e.args;\\n switch (0 | n) {\\n case r.OPS.beginText:\\n this.beginText();\\n break;\\n case r.OPS.dependency:\\n break;\\n case r.OPS.setLeading:\\n this.setLeading(i);\\n break;\\n case r.OPS.setLeadingMoveText:\\n this.setLeadingMoveText(i[0], i[1]);\\n break;\\n case r.OPS.setFont:\\n this.setFont(i);\\n break;\\n case r.OPS.showText:\\n case r.OPS.showSpacedText:\\n this.showText(i[0]);\\n break;\\n case r.OPS.endText:\\n this.endText();\\n break;\\n case r.OPS.moveText:\\n this.moveText(i[0], i[1]);\\n break;\\n case r.OPS.setCharSpacing:\\n this.setCharSpacing(i[0]);\\n break;\\n case r.OPS.setWordSpacing:\\n this.setWordSpacing(i[0]);\\n break;\\n case r.OPS.setHScale:\\n this.setHScale(i[0]);\\n break;\\n case r.OPS.setTextMatrix:\\n this.setTextMatrix(i[0], i[1], i[2], i[3], i[4], i[5]);\\n break;\\n case r.OPS.setTextRise:\\n this.setTextRise(i[0]);\\n break;\\n case r.OPS.setTextRenderingMode:\\n this.setTextRenderingMode(i[0]);\\n break;\\n case r.OPS.setLineWidth:\\n this.setLineWidth(i[0]);\\n break;\\n case r.OPS.setLineJoin:\\n this.setLineJoin(i[0]);\\n break;\\n case r.OPS.setLineCap:\\n this.setLineCap(i[0]);\\n break;\\n case r.OPS.setMiterLimit:\\n this.setMiterLimit(i[0]);\\n break;\\n case r.OPS.setFillRGBColor:\\n this.setFillRGBColor(i[0], i[1], i[2]);\\n break;\\n case r.OPS.setStrokeRGBColor:\\n this.setStrokeRGBColor(i[0], i[1], i[2]);\\n break;\\n case r.OPS.setStrokeColorN:\\n this.setStrokeColorN(i);\\n break;\\n case r.OPS.setFillColorN:\\n this.setFillColorN(i);\\n break;\\n case r.OPS.shadingFill:\\n this.shadingFill(i[0]);\\n break;\\n case r.OPS.setDash:\\n this.setDash(i[0], i[1]);\\n break;\\n case r.OPS.setRenderingIntent:\\n this.setRenderingIntent(i[0]);\\n break;\\n case r.OPS.setFlatness:\\n this.setFlatness(i[0]);\\n break;\\n case r.OPS.setGState:\\n this.setGState(i[0]);\\n break;\\n case r.OPS.fill:\\n this.fill();\\n break;\\n case r.OPS.eoFill:\\n this.eoFill();\\n break;\\n case r.OPS.stroke:\\n this.stroke();\\n break;\\n case r.OPS.fillStroke:\\n this.fillStroke();\\n break;\\n case r.OPS.eoFillStroke:\\n this.eoFillStroke();\\n break;\\n case r.OPS.clip:\\n this.clip(\\"nonzero\\");\\n break;\\n case r.OPS.eoClip:\\n this.clip(\\"evenodd\\");\\n break;\\n case r.OPS.paintSolidColorImageMask:\\n this.paintSolidColorImageMask();\\n break;\\n case r.OPS.paintImageXObject:\\n this.paintImageXObject(i[0]);\\n break;\\n case r.OPS.paintInlineImageXObject:\\n this.paintInlineImageXObject(i[0]);\\n break;\\n case r.OPS.paintImageMaskXObject:\\n this.paintImageMaskXObject(i[0]);\\n break;\\n case r.OPS.paintFormXObjectBegin:\\n this.paintFormXObjectBegin(i[0], i[1]);\\n break;\\n case r.OPS.paintFormXObjectEnd:\\n this.paintFormXObjectEnd();\\n break;\\n case r.OPS.closePath:\\n this.closePath();\\n break;\\n case r.OPS.closeStroke:\\n this.closeStroke();\\n break;\\n case r.OPS.closeFillStroke:\\n this.closeFillStroke();\\n break;\\n case r.OPS.closeEOFillStroke:\\n this.closeEOFillStroke();\\n break;\\n case r.OPS.nextLine:\\n this.nextLine();\\n break;\\n case r.OPS.transform:\\n this.transform(i[0], i[1], i[2], i[3], i[4], i[5]);\\n break;\\n case r.OPS.constructPath:\\n this.constructPath(i[0], i[1]);\\n break;\\n case r.OPS.endPath:\\n this.endPath();\\n break;\\n case 92:\\n this.group(e.items);\\n break;\\n default:\\n (0, r.warn)(\\"Unimplemented operator \\".concat(t));\\n }\\n }\\n }\\n setWordSpacing(t) {\\n this.current.wordSpacing = t;\\n }\\n setCharSpacing(t) {\\n this.current.charSpacing = t;\\n }\\n nextLine() {\\n this.moveText(0, this.current.leading);\\n }\\n setTextMatrix(t, e, n, i, r, s) {\\n const a = this.current;\\n a.textMatrix = a.lineMatrix = [t, e, n, i, r, s];\\n a.textMatrixScale = Math.hypot(t, e);\\n a.x = a.lineX = 0;\\n a.y = a.lineY = 0;\\n a.xcoords = [];\\n a.ycoords = [];\\n a.tspan = this.svgFactory.createElement(\\"svg:tspan\\");\\n a.tspan.setAttributeNS(null, \\"font-family\\", a.fontFamily);\\n a.tspan.setAttributeNS(null, \\"font-size\\", \\"\\".concat(pf(a.fontSize), \\"px\\"));\\n a.tspan.setAttributeNS(null, \\"y\\", pf(-a.y));\\n a.txtElement = this.svgFactory.createElement(\\"svg:text\\");\\n a.txtElement.append(a.tspan);\\n }\\n beginText() {\\n const t = this.current;\\n t.x = t.lineX = 0;\\n t.y = t.lineY = 0;\\n t.textMatrix = r.IDENTITY_MATRIX;\\n t.lineMatrix = r.IDENTITY_MATRIX;\\n t.textMatrixScale = 1;\\n t.tspan = this.svgFactory.createElement(\\"svg:tspan\\");\\n t.txtElement = this.svgFactory.createElement(\\"svg:text\\");\\n t.txtgrp = this.svgFactory.createElement(\\"svg:g\\");\\n t.xcoords = [];\\n t.ycoords = [];\\n }\\n moveText(t, e) {\\n const n = this.current;\\n n.x = n.lineX += t;\\n n.y = n.lineY += e;\\n n.xcoords = [];\\n n.ycoords = [];\\n n.tspan = this.svgFactory.createElement(\\"svg:tspan\\");\\n n.tspan.setAttributeNS(null, \\"font-family\\", n.fontFamily);\\n n.tspan.setAttributeNS(null, \\"font-size\\", \\"\\".concat(pf(n.fontSize), \\"px\\"));\\n n.tspan.setAttributeNS(null, \\"y\\", pf(-n.y));\\n }\\n showText(t) {\\n const e = this.current,\\n n = e.font,\\n i = e.fontSize;\\n if (0 === i) return;\\n const l = e.fontSizeScale,\\n c = e.charSpacing,\\n h = e.wordSpacing,\\n d = e.fontDirection,\\n u = e.textHScale * d,\\n p = n.vertical,\\n f = p ? 1 : -1,\\n g = n.defaultVMetrics,\\n m = i * e.fontMatrix[0];\\n let b = 0;\\n for (const r of t) {\\n if (null === r) {\\n b += d * h;\\n continue;\\n }\\n if (\\"number\\" == typeof r) {\\n b += f * r * i / 1e3;\\n continue;\\n }\\n const t = (r.isSpace ? h : 0) + c,\\n s = r.fontChar;\\n let a,\\n o,\\n u = r.width;\\n if (p) {\\n let t;\\n const e = r.vmetric || g;\\n t = r.vmetric ? e[1] : .5 * u;\\n t = -t * m;\\n const n = e[2] * m;\\n u = e ? -e[0] : u;\\n a = t / l;\\n o = (b + n) / l;\\n } else {\\n a = b / l;\\n o = 0;\\n }\\n if (r.isInFont || n.missingFile) {\\n e.xcoords.push(e.x + a);\\n p && e.ycoords.push(-e.y + o);\\n e.tspan.textContent += s;\\n }\\n b += p ? u * m - t * d : u * m + t * d;\\n }\\n e.tspan.setAttributeNS(null, \\"x\\", e.xcoords.map(pf).join(\\" \\"));\\n p ? e.tspan.setAttributeNS(null, \\"y\\", e.ycoords.map(pf).join(\\" \\")) : e.tspan.setAttributeNS(null, \\"y\\", pf(-e.y));\\n p ? e.y -= b : e.x += b * u;\\n e.tspan.setAttributeNS(null, \\"font-family\\", e.fontFamily);\\n e.tspan.setAttributeNS(null, \\"font-size\\", \\"\\".concat(pf(e.fontSize), \\"px\\"));\\n e.fontStyle !== s && e.tspan.setAttributeNS(null, \\"font-style\\", e.fontStyle);\\n e.fontWeight !== a && e.tspan.setAttributeNS(null, \\"font-weight\\", e.fontWeight);\\n const v = e.textRenderingMode & r.TextRenderingMode.FILL_STROKE_MASK;\\n if (v === r.TextRenderingMode.FILL || v === r.TextRenderingMode.FILL_STROKE) {\\n e.fillColor !== o && e.tspan.setAttributeNS(null, \\"fill\\", e.fillColor);\\n e.fillAlpha < 1 && e.tspan.setAttributeNS(null, \\"fill-opacity\\", e.fillAlpha);\\n } else e.textRenderingMode === r.TextRenderingMode.ADD_TO_PATH ? e.tspan.setAttributeNS(null, \\"fill\\", \\"transparent\\") : e.tspan.setAttributeNS(null, \\"fill\\", \\"none\\");\\n if (v === r.TextRenderingMode.STROKE || v === r.TextRenderingMode.FILL_STROKE) {\\n const t = 1 / (e.textMatrixScale || 1);\\n this._setStrokeAttributes(e.tspan, t);\\n }\\n let y = e.textMatrix;\\n if (0 !== e.textRise) {\\n y = y.slice();\\n y[5] += e.textRise;\\n }\\n e.txtElement.setAttributeNS(null, \\"transform\\", \\"\\".concat(pm(y), \\" scale(\\").concat(pf(u), \\", -1)\\"));\\n e.txtElement.setAttributeNS(\\"http://www.w3.org/XML/1998/namespace\\", \\"xml:space\\", \\"preserve\\");\\n e.txtElement.append(e.tspan);\\n e.txtgrp.append(e.txtElement);\\n this._ensureTransformGroup().append(e.txtElement);\\n }\\n setLeadingMoveText(t, e) {\\n this.setLeading(-e);\\n this.moveText(t, e);\\n }\\n addFontStyle(t) {\\n if (!t.data) throw new Error('addFontStyle: No font data available, ensure that the \\"fontExtraProperties\\" API parameter is set.');\\n if (!this.cssStyle) {\\n this.cssStyle = this.svgFactory.createElement(\\"svg:style\\");\\n this.cssStyle.setAttributeNS(null, \\"type\\", \\"text/css\\");\\n this.defs.append(this.cssStyle);\\n }\\n const e = createObjectURL(t.data, t.mimetype, this.forceDataSchema);\\n this.cssStyle.textContent += \\"@font-face { font-family: \\\\\\"\\".concat(t.loadedName, \\"\\\\\\"; src: url(\\").concat(e, \\"); }\\\\n\\");\\n }\\n setFont(t) {\\n const e = this.current,\\n n = this.commonObjs.get(t[0]);\\n let i = t[1];\\n e.font = n;\\n if (this.embedFonts && !n.missingFile && !this.embeddedFonts[n.loadedName]) {\\n this.addFontStyle(n);\\n this.embeddedFonts[n.loadedName] = n;\\n }\\n e.fontMatrix = n.fontMatrix || r.FONT_IDENTITY_MATRIX;\\n let s = \\"normal\\";\\n n.black ? s = \\"900\\" : n.bold && (s = \\"bold\\");\\n const a = n.italic ? \\"italic\\" : \\"normal\\";\\n if (i < 0) {\\n i = -i;\\n e.fontDirection = -1;\\n } else e.fontDirection = 1;\\n e.fontSize = i;\\n e.fontFamily = n.loadedName;\\n e.fontWeight = s;\\n e.fontStyle = a;\\n e.tspan = this.svgFactory.createElement(\\"svg:tspan\\");\\n e.tspan.setAttributeNS(null, \\"y\\", pf(-e.y));\\n e.xcoords = [];\\n e.ycoords = [];\\n }\\n endText() {\\n var _t$txtElement;\\n const t = this.current;\\n if (t.textRenderingMode & r.TextRenderingMode.ADD_TO_PATH_FLAG && (_t$txtElement = t.txtElement) !== null && _t$txtElement !== void 0 && _t$txtElement.hasChildNodes()) {\\n t.element = t.txtElement;\\n this.clip(\\"nonzero\\");\\n this.endPath();\\n }\\n }\\n setLineWidth(t) {\\n t > 0 && (this.current.lineWidth = t);\\n }\\n setLineCap(t) {\\n this.current.lineCap = l[t];\\n }\\n setLineJoin(t) {\\n this.current.lineJoin = c[t];\\n }\\n setMiterLimit(t) {\\n this.current.miterLimit = t;\\n }\\n setStrokeAlpha(t) {\\n this.current.strokeAlpha = t;\\n }\\n setStrokeRGBColor(t, e, n) {\\n this.current.strokeColor = r.Util.makeHexColor(t, e, n);\\n }\\n setFillAlpha(t) {\\n this.current.fillAlpha = t;\\n }\\n setFillRGBColor(t, e, n) {\\n this.current.fillColor = r.Util.makeHexColor(t, e, n);\\n this.current.tspan = this.svgFactory.createElement(\\"svg:tspan\\");\\n this.current.xcoords = [];\\n this.current.ycoords = [];\\n }\\n setStrokeColorN(t) {\\n this.current.strokeColor = this._makeColorN_Pattern(t);\\n }\\n setFillColorN(t) {\\n this.current.fillColor = this._makeColorN_Pattern(t);\\n }\\n shadingFill(t) {\\n const {\\n width: e,\\n height: n\\n } = this.viewport,\\n i = r.Util.inverseTransform(this.transformMatrix),\\n [s, a, o, l] = r.Util.getAxialAlignedBoundingBox([0, 0, e, n], i),\\n c = this.svgFactory.createElement(\\"svg:rect\\");\\n c.setAttributeNS(null, \\"x\\", s);\\n c.setAttributeNS(null, \\"y\\", a);\\n c.setAttributeNS(null, \\"width\\", o - s);\\n c.setAttributeNS(null, \\"height\\", l - a);\\n c.setAttributeNS(null, \\"fill\\", this._makeShadingPattern(t));\\n this.current.fillAlpha < 1 && c.setAttributeNS(null, \\"fill-opacity\\", this.current.fillAlpha);\\n this._ensureTransformGroup().append(c);\\n }\\n _makeColorN_Pattern(t) {\\n return \\"TilingPattern\\" === t[0] ? this._makeTilingPattern(t) : this._makeShadingPattern(t);\\n }\\n _makeTilingPattern(t) {\\n const e = t[1],\\n n = t[2],\\n i = t[3] || r.IDENTITY_MATRIX,\\n [s, a, o, l] = t[4],\\n c = t[5],\\n h = t[6],\\n d = t[7],\\n u = \\"shading\\" + p++,\\n [f, g, m, b] = r.Util.normalizeRect([...r.Util.applyTransform([s, a], i), ...r.Util.applyTransform([o, l], i)]),\\n [v, y] = r.Util.singularValueDecompose2dScale(i),\\n A = c * v,\\n _ = h * y,\\n S = this.svgFactory.createElement(\\"svg:pattern\\");\\n S.setAttributeNS(null, \\"id\\", u);\\n S.setAttributeNS(null, \\"patternUnits\\", \\"userSpaceOnUse\\");\\n S.setAttributeNS(null, \\"width\\", A);\\n S.setAttributeNS(null, \\"height\\", _);\\n S.setAttributeNS(null, \\"x\\", \\"\\".concat(f));\\n S.setAttributeNS(null, \\"y\\", \\"\\".concat(g));\\n const E = this.svg,\\n x = this.transformMatrix,\\n w = this.current.fillColor,\\n C = this.current.strokeColor,\\n T = this.svgFactory.create(m - f, b - g);\\n this.svg = T;\\n this.transformMatrix = i;\\n if (2 === d) {\\n const t = r.Util.makeHexColor(...e);\\n this.current.fillColor = t;\\n this.current.strokeColor = t;\\n }\\n this.executeOpTree(this.convertOpList(n));\\n this.svg = E;\\n this.transformMatrix = x;\\n this.current.fillColor = w;\\n this.current.strokeColor = C;\\n S.append(T.childNodes[0]);\\n this.defs.append(S);\\n return \\"url(#\\".concat(u, \\")\\");\\n }\\n _makeShadingPattern(t) {\\n \\"string\\" == typeof t && (t = this.objs.get(t));\\n switch (t[0]) {\\n case \\"RadialAxial\\":\\n const e = \\"shading\\" + p++,\\n n = t[3];\\n let i;\\n switch (t[1]) {\\n case \\"axial\\":\\n const n = t[4],\\n r = t[5];\\n i = this.svgFactory.createElement(\\"svg:linearGradient\\");\\n i.setAttributeNS(null, \\"id\\", e);\\n i.setAttributeNS(null, \\"gradientUnits\\", \\"userSpaceOnUse\\");\\n i.setAttributeNS(null, \\"x1\\", n[0]);\\n i.setAttributeNS(null, \\"y1\\", n[1]);\\n i.setAttributeNS(null, \\"x2\\", r[0]);\\n i.setAttributeNS(null, \\"y2\\", r[1]);\\n break;\\n case \\"radial\\":\\n const s = t[4],\\n a = t[5],\\n o = t[6],\\n l = t[7];\\n i = this.svgFactory.createElement(\\"svg:radialGradient\\");\\n i.setAttributeNS(null, \\"id\\", e);\\n i.setAttributeNS(null, \\"gradientUnits\\", \\"userSpaceOnUse\\");\\n i.setAttributeNS(null, \\"cx\\", a[0]);\\n i.setAttributeNS(null, \\"cy\\", a[1]);\\n i.setAttributeNS(null, \\"r\\", l);\\n i.setAttributeNS(null, \\"fx\\", s[0]);\\n i.setAttributeNS(null, \\"fy\\", s[1]);\\n i.setAttributeNS(null, \\"fr\\", o);\\n break;\\n default:\\n throw new Error(\\"Unknown RadialAxial type: \\".concat(t[1]));\\n }\\n for (const t of n) {\\n const e = this.svgFactory.createElement(\\"svg:stop\\");\\n e.setAttributeNS(null, \\"offset\\", t[0]);\\n e.setAttributeNS(null, \\"stop-color\\", t[1]);\\n i.append(e);\\n }\\n this.defs.append(i);\\n return \\"url(#\\".concat(e, \\")\\");\\n case \\"Mesh\\":\\n (0, r.warn)(\\"Unimplemented pattern Mesh\\");\\n return null;\\n case \\"Dummy\\":\\n return \\"hotpink\\";\\n default:\\n throw new Error(\\"Unknown IR type: \\".concat(t[0]));\\n }\\n }\\n setDash(t, e) {\\n this.current.dashArray = t;\\n this.current.dashPhase = e;\\n }\\n constructPath(t, e) {\\n const n = this.current;\\n let i = n.x,\\n s = n.y,\\n a = [],\\n o = 0;\\n for (const n of t) switch (0 | n) {\\n case r.OPS.rectangle:\\n i = e[o++];\\n s = e[o++];\\n const t = i + e[o++],\\n n = s + e[o++];\\n a.push(\\"M\\", pf(i), pf(s), \\"L\\", pf(t), pf(s), \\"L\\", pf(t), pf(n), \\"L\\", pf(i), pf(n), \\"Z\\");\\n break;\\n case r.OPS.moveTo:\\n i = e[o++];\\n s = e[o++];\\n a.push(\\"M\\", pf(i), pf(s));\\n break;\\n case r.OPS.lineTo:\\n i = e[o++];\\n s = e[o++];\\n a.push(\\"L\\", pf(i), pf(s));\\n break;\\n case r.OPS.curveTo:\\n i = e[o + 4];\\n s = e[o + 5];\\n a.push(\\"C\\", pf(e[o]), pf(e[o + 1]), pf(e[o + 2]), pf(e[o + 3]), pf(i), pf(s));\\n o += 6;\\n break;\\n case r.OPS.curveTo2:\\n a.push(\\"C\\", pf(i), pf(s), pf(e[o]), pf(e[o + 1]), pf(e[o + 2]), pf(e[o + 3]));\\n i = e[o + 2];\\n s = e[o + 3];\\n o += 4;\\n break;\\n case r.OPS.curveTo3:\\n i = e[o + 2];\\n s = e[o + 3];\\n a.push(\\"C\\", pf(e[o]), pf(e[o + 1]), pf(i), pf(s), pf(i), pf(s));\\n o += 4;\\n break;\\n case r.OPS.closePath:\\n a.push(\\"Z\\");\\n }\\n a = a.join(\\" \\");\\n if (n.path && t.length > 0 && t[0] !== r.OPS.rectangle && t[0] !== r.OPS.moveTo) a = n.path.getAttributeNS(null, \\"d\\") + a;else {\\n n.path = this.svgFactory.createElement(\\"svg:path\\");\\n this._ensureTransformGroup().append(n.path);\\n }\\n n.path.setAttributeNS(null, \\"d\\", a);\\n n.path.setAttributeNS(null, \\"fill\\", \\"none\\");\\n n.element = n.path;\\n n.setCurrentPoint(i, s);\\n }\\n endPath() {\\n const t = this.current;\\n t.path = null;\\n if (!this.pendingClip) return;\\n if (!t.element) {\\n this.pendingClip = null;\\n return;\\n }\\n const e = \\"clippath\\" + d++,\\n n = this.svgFactory.createElement(\\"svg:clipPath\\");\\n n.setAttributeNS(null, \\"id\\", e);\\n n.setAttributeNS(null, \\"transform\\", pm(this.transformMatrix));\\n const i = t.element.cloneNode(!0);\\n \\"evenodd\\" === this.pendingClip ? i.setAttributeNS(null, \\"clip-rule\\", \\"evenodd\\") : i.setAttributeNS(null, \\"clip-rule\\", \\"nonzero\\");\\n this.pendingClip = null;\\n n.append(i);\\n this.defs.append(n);\\n if (t.activeClipUrl) {\\n t.clipGroup = null;\\n for (const t of this.extraStack) t.clipGroup = null;\\n n.setAttributeNS(null, \\"clip-path\\", t.activeClipUrl);\\n }\\n t.activeClipUrl = \\"url(#\\".concat(e, \\")\\");\\n this.tgrp = null;\\n }\\n clip(t) {\\n this.pendingClip = t;\\n }\\n closePath() {\\n const t = this.current;\\n if (t.path) {\\n const e = \\"\\".concat(t.path.getAttributeNS(null, \\"d\\"), \\"Z\\");\\n t.path.setAttributeNS(null, \\"d\\", e);\\n }\\n }\\n setLeading(t) {\\n this.current.leading = -t;\\n }\\n setTextRise(t) {\\n this.current.textRise = t;\\n }\\n setTextRenderingMode(t) {\\n this.current.textRenderingMode = t;\\n }\\n setHScale(t) {\\n this.current.textHScale = t / 100;\\n }\\n setRenderingIntent(t) {}\\n setFlatness(t) {}\\n setGState(t) {\\n for (const [e, n] of t) switch (e) {\\n case \\"LW\\":\\n this.setLineWidth(n);\\n break;\\n case \\"LC\\":\\n this.setLineCap(n);\\n break;\\n case \\"LJ\\":\\n this.setLineJoin(n);\\n break;\\n case \\"ML\\":\\n this.setMiterLimit(n);\\n break;\\n case \\"D\\":\\n this.setDash(n[0], n[1]);\\n break;\\n case \\"RI\\":\\n this.setRenderingIntent(n);\\n break;\\n case \\"FL\\":\\n this.setFlatness(n);\\n break;\\n case \\"Font\\":\\n this.setFont(n);\\n break;\\n case \\"CA\\":\\n this.setStrokeAlpha(n);\\n break;\\n case \\"ca\\":\\n this.setFillAlpha(n);\\n break;\\n default:\\n (0, r.warn)(\\"Unimplemented graphic state operator \\".concat(e));\\n }\\n }\\n fill() {\\n const t = this.current;\\n if (t.element) {\\n t.element.setAttributeNS(null, \\"fill\\", t.fillColor);\\n t.element.setAttributeNS(null, \\"fill-opacity\\", t.fillAlpha);\\n this.endPath();\\n }\\n }\\n stroke() {\\n const t = this.current;\\n if (t.element) {\\n this._setStrokeAttributes(t.element);\\n t.element.setAttributeNS(null, \\"fill\\", \\"none\\");\\n this.endPath();\\n }\\n }\\n _setStrokeAttributes(t) {\\n let e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : 1;\\n const n = this.current;\\n let i = n.dashArray;\\n 1 !== e && i.length > 0 && (i = i.map(function (t) {\\n return e * t;\\n }));\\n t.setAttributeNS(null, \\"stroke\\", n.strokeColor);\\n t.setAttributeNS(null, \\"stroke-opacity\\", n.strokeAlpha);\\n t.setAttributeNS(null, \\"stroke-miterlimit\\", pf(n.miterLimit));\\n t.setAttributeNS(null, \\"stroke-linecap\\", n.lineCap);\\n t.setAttributeNS(null, \\"stroke-linejoin\\", n.lineJoin);\\n t.setAttributeNS(null, \\"stroke-width\\", pf(e * n.lineWidth) + \\"px\\");\\n t.setAttributeNS(null, \\"stroke-dasharray\\", i.map(pf).join(\\" \\"));\\n t.setAttributeNS(null, \\"stroke-dashoffset\\", pf(e * n.dashPhase) + \\"px\\");\\n }\\n eoFill() {\\n var _this$current$element;\\n (_this$current$element = this.current.element) === null || _this$current$element === void 0 ? void 0 : _this$current$element.setAttributeNS(null, \\"fill-rule\\", \\"evenodd\\");\\n this.fill();\\n }\\n fillStroke() {\\n this.stroke();\\n this.fill();\\n }\\n eoFillStroke() {\\n var _this$current$element2;\\n (_this$current$element2 = this.current.element) === null || _this$current$element2 === void 0 ? void 0 : _this$current$element2.setAttributeNS(null, \\"fill-rule\\", \\"evenodd\\");\\n this.fillStroke();\\n }\\n closeStroke() {\\n this.closePath();\\n this.stroke();\\n }\\n closeFillStroke() {\\n this.closePath();\\n this.fillStroke();\\n }\\n closeEOFillStroke() {\\n this.closePath();\\n this.eoFillStroke();\\n }\\n paintSolidColorImageMask() {\\n const t = this.svgFactory.createElement(\\"svg:rect\\");\\n t.setAttributeNS(null, \\"x\\", \\"0\\");\\n t.setAttributeNS(null, \\"y\\", \\"0\\");\\n t.setAttributeNS(null, \\"width\\", \\"1px\\");\\n t.setAttributeNS(null, \\"height\\", \\"1px\\");\\n t.setAttributeNS(null, \\"fill\\", this.current.fillColor);\\n this._ensureTransformGroup().append(t);\\n }\\n paintImageXObject(t) {\\n const e = this.getObject(t);\\n e ? this.paintInlineImageXObject(e) : (0, r.warn)(\\"Dependent image with object ID \\".concat(t, \\" is not ready yet\\"));\\n }\\n paintInlineImageXObject(t, e) {\\n const n = t.width,\\n i = t.height,\\n r = h(t, this.forceDataSchema, !!e),\\n s = this.svgFactory.createElement(\\"svg:rect\\");\\n s.setAttributeNS(null, \\"x\\", \\"0\\");\\n s.setAttributeNS(null, \\"y\\", \\"0\\");\\n s.setAttributeNS(null, \\"width\\", pf(n));\\n s.setAttributeNS(null, \\"height\\", pf(i));\\n this.current.element = s;\\n this.clip(\\"nonzero\\");\\n const a = this.svgFactory.createElement(\\"svg:image\\");\\n a.setAttributeNS(\\"http://www.w3.org/1999/xlink\\", \\"xlink:href\\", r);\\n a.setAttributeNS(null, \\"x\\", \\"0\\");\\n a.setAttributeNS(null, \\"y\\", pf(-i));\\n a.setAttributeNS(null, \\"width\\", pf(n) + \\"px\\");\\n a.setAttributeNS(null, \\"height\\", pf(i) + \\"px\\");\\n a.setAttributeNS(null, \\"transform\\", \\"scale(\\".concat(pf(1 / n), \\" \\").concat(pf(-1 / i), \\")\\"));\\n e ? e.append(a) : this._ensureTransformGroup().append(a);\\n }\\n paintImageMaskXObject(t) {\\n const e = this.getObject(t.data, t);\\n if (e.bitmap) {\\n (0, r.warn)(\\"paintImageMaskXObject: ImageBitmap support is not implemented, ensure that the \`isOffscreenCanvasSupported\` API parameter is disabled.\\");\\n return;\\n }\\n const n = this.current,\\n i = e.width,\\n s = e.height,\\n a = n.fillColor;\\n n.maskId = \\"mask\\" + u++;\\n const o = this.svgFactory.createElement(\\"svg:mask\\");\\n o.setAttributeNS(null, \\"id\\", n.maskId);\\n const l = this.svgFactory.createElement(\\"svg:rect\\");\\n l.setAttributeNS(null, \\"x\\", \\"0\\");\\n l.setAttributeNS(null, \\"y\\", \\"0\\");\\n l.setAttributeNS(null, \\"width\\", pf(i));\\n l.setAttributeNS(null, \\"height\\", pf(s));\\n l.setAttributeNS(null, \\"fill\\", a);\\n l.setAttributeNS(null, \\"mask\\", \\"url(#\\".concat(n.maskId, \\")\\"));\\n this.defs.append(o);\\n this._ensureTransformGroup().append(l);\\n this.paintInlineImageXObject(e, o);\\n }\\n paintFormXObjectBegin(t, e) {\\n Array.isArray(t) && 6 === t.length && this.transform(t[0], t[1], t[2], t[3], t[4], t[5]);\\n if (e) {\\n const t = e[2] - e[0],\\n n = e[3] - e[1],\\n i = this.svgFactory.createElement(\\"svg:rect\\");\\n i.setAttributeNS(null, \\"x\\", e[0]);\\n i.setAttributeNS(null, \\"y\\", e[1]);\\n i.setAttributeNS(null, \\"width\\", pf(t));\\n i.setAttributeNS(null, \\"height\\", pf(n));\\n this.current.element = i;\\n this.clip(\\"nonzero\\");\\n this.endPath();\\n }\\n }\\n paintFormXObjectEnd() {}\\n _initialize(t) {\\n const e = this.svgFactory.create(t.width, t.height),\\n n = this.svgFactory.createElement(\\"svg:defs\\");\\n e.append(n);\\n this.defs = n;\\n const i = this.svgFactory.createElement(\\"svg:g\\");\\n i.setAttributeNS(null, \\"transform\\", pm(t.transform));\\n e.append(i);\\n this.svg = i;\\n return e;\\n }\\n _ensureClipGroup() {\\n if (!this.current.clipGroup) {\\n const t = this.svgFactory.createElement(\\"svg:g\\");\\n t.setAttributeNS(null, \\"clip-path\\", this.current.activeClipUrl);\\n this.svg.append(t);\\n this.current.clipGroup = t;\\n }\\n return this.current.clipGroup;\\n }\\n _ensureTransformGroup() {\\n if (!this.tgrp) {\\n this.tgrp = this.svgFactory.createElement(\\"svg:g\\");\\n this.tgrp.setAttributeNS(null, \\"transform\\", pm(this.transformMatrix));\\n this.current.activeClipUrl ? this._ensureClipGroup().append(this.tgrp) : this.svg.append(this.tgrp);\\n }\\n return this.tgrp;\\n }\\n };\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n var i = n(3),\\n r = n(187),\\n s = n(192);\\n i({\\n target: \\"Array\\",\\n proto: !0\\n }, {\\n group: function group(t) {\\n return r(this, t, arguments.length > 1 ? arguments[1] : void 0);\\n }\\n });\\n s(\\"group\\");\\n }, (t, e, n) => {\\n var i = n(99),\\n r = n(14),\\n s = n(13),\\n a = n(40),\\n o = n(18),\\n l = n(64),\\n c = n(188),\\n h = n(108),\\n d = Array,\\n u = r([].push);\\n t.exports = function (t, e, n, r) {\\n for (var p, f, g, m = a(t), b = s(m), v = i(e, n), y = c(null), A = l(b), _ = 0; A > _; _++) {\\n g = b[_];\\n (f = o(v(g, _, m))) in y ? u(y[f], g) : y[f] = [g];\\n }\\n if (r && (p = r(m)) !== d) for (f in y) y[f] = h(p, y[f]);\\n return y;\\n };\\n }, (t, e, n) => {\\n var i,\\n r = n(47),\\n s = n(189),\\n a = n(66),\\n o = n(55),\\n l = n(191),\\n c = n(43),\\n h = n(54),\\n d = \\"prototype\\",\\n u = \\"script\\",\\n p = h(\\"IE_PROTO\\"),\\n EmptyConstructor = function EmptyConstructor() {},\\n scriptTag = function scriptTag(t) {\\n return \\"<\\" + u + \\">\\" + t + \\"\\";\\n },\\n NullProtoObjectViaActiveX = function NullProtoObjectViaActiveX(t) {\\n t.write(scriptTag(\\"\\"));\\n t.close();\\n var e = t.parentWindow.Object;\\n t = null;\\n return e;\\n },\\n _NullProtoObject = function NullProtoObject() {\\n try {\\n i = new ActiveXObject(\\"htmlfile\\");\\n } catch (t) {}\\n _NullProtoObject = \\"undefined\\" != typeof document ? document.domain && i ? NullProtoObjectViaActiveX(i) : function () {\\n var t,\\n e = c(\\"iframe\\"),\\n n = \\"java\\" + u + \\":\\";\\n e.style.display = \\"none\\";\\n l.appendChild(e);\\n e.src = String(n);\\n (t = e.contentWindow.document).open();\\n t.write(scriptTag(\\"document.F=Object\\"));\\n t.close();\\n return t.F;\\n }() : NullProtoObjectViaActiveX(i);\\n for (var t = a.length; t--;) delete _NullProtoObject[d][a[t]];\\n return _NullProtoObject();\\n };\\n o[p] = !0;\\n t.exports = Object.create || function create(t, e) {\\n var n;\\n if (null !== t) {\\n EmptyConstructor[d] = r(t);\\n n = new EmptyConstructor();\\n EmptyConstructor[d] = null;\\n n[p] = t;\\n } else n = _NullProtoObject();\\n return void 0 === e ? n : s.f(n, e);\\n };\\n }, (t, e, n) => {\\n var i = n(6),\\n r = n(46),\\n s = n(45),\\n a = n(47),\\n o = n(12),\\n l = n(190);\\n e.f = i && !r ? Object.defineProperties : function defineProperties(t, e) {\\n a(t);\\n for (var n, i = o(e), r = l(e), c = r.length, h = 0; c > h;) s.f(t, n = r[h++], i[n]);\\n return t;\\n };\\n }, (t, e, n) => {\\n var i = n(59),\\n r = n(66);\\n t.exports = Object.keys || function keys(t) {\\n return i(t, r);\\n };\\n }, (t, e, n) => {\\n var i = n(24);\\n t.exports = i(\\"document\\", \\"documentElement\\");\\n }, (t, e, n) => {\\n var i = n(34),\\n r = n(188),\\n s = n(45).f,\\n a = i(\\"unscopables\\"),\\n o = Array.prototype;\\n null == o[a] && s(o, a, {\\n configurable: !0,\\n value: r(null)\\n });\\n t.exports = function (t) {\\n o[a][t] = !0;\\n };\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n Object.defineProperty(e, \\"__esModule\\", {\\n value: !0\\n });\\n e.XfaText = void 0;\\n n(89);\\n class XfaText {\\n static textContent(t) {\\n const e = [],\\n n = {\\n items: e,\\n styles: Object.create(null)\\n };\\n !function walk(t) {\\n if (!t) return;\\n let n = null;\\n const i = t.name;\\n if (\\"#text\\" === i) n = t.value;else {\\n var _t$attributes;\\n if (!XfaText.shouldBuildText(i)) return;\\n t !== null && t !== void 0 && (_t$attributes = t.attributes) !== null && _t$attributes !== void 0 && _t$attributes.textContent ? n = t.attributes.textContent : t.value && (n = t.value);\\n }\\n null !== n && e.push({\\n str: n\\n });\\n if (t.children) for (const e of t.children) walk(e);\\n }(t);\\n return n;\\n }\\n static shouldBuildText(t) {\\n return !(\\"textarea\\" === t || \\"input\\" === t || \\"option\\" === t || \\"select\\" === t);\\n }\\n }\\n e.XfaText = XfaText;\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n Object.defineProperty(e, \\"__esModule\\", {\\n value: !0\\n });\\n e.TextLayerRenderTask = void 0;\\n e.renderTextLayer = function renderTextLayer(t) {\\n if (!t.textContentSource && (t.textContent || t.textContentStream)) {\\n (0, r.deprecated)(\\"The TextLayerRender \`textContent\`/\`textContentStream\` parameters will be removed in the future, please use \`textContentSource\` instead.\\");\\n t.textContentSource = t.textContent || t.textContentStream;\\n }\\n const {\\n container: e,\\n viewport: n\\n } = t,\\n i = getComputedStyle(e),\\n s = i.getPropertyValue(\\"visibility\\"),\\n a = parseFloat(i.getPropertyValue(\\"--scale-factor\\"));\\n \\"visible\\" === s && (!a || Math.abs(a - n.scale) > 1e-5) && console.error(\\"The \`--scale-factor\` CSS-variable must be set, to the same value as \`viewport.scale\`, either on the \`container\`-element itself or higher up in the DOM.\\");\\n const o = new TextLayerRenderTask(t);\\n o._render();\\n return o;\\n };\\n e.updateTextLayer = function updateTextLayer(t) {\\n let {\\n container: e,\\n viewport: n,\\n textDivs: i,\\n textDivProperties: s,\\n isOffscreenCanvasSupported: a,\\n mustRotate: o = !0,\\n mustRescale: l = !0\\n } = t;\\n o && (0, r.setLayerDimensions)(e, {\\n rotation: n.rotation\\n });\\n if (l) {\\n const t = getCtx(0, a),\\n e = {\\n prevFontSize: null,\\n prevFontFamily: null,\\n div: null,\\n scale: n.scale * (globalThis.devicePixelRatio || 1),\\n properties: null,\\n ctx: t\\n };\\n for (const t of i) {\\n e.properties = s.get(t);\\n e.div = t;\\n layout(e);\\n }\\n }\\n };\\n n(89);\\n n(2);\\n var i = n(1),\\n r = n(167);\\n const s = 30,\\n a = .8,\\n o = new Map();\\n function getCtx(t, e) {\\n let n;\\n if (e && i.FeatureTest.isOffscreenCanvasSupported) n = new OffscreenCanvas(t, t).getContext(\\"2d\\", {\\n alpha: !1\\n });else {\\n const e = document.createElement(\\"canvas\\");\\n e.width = e.height = t;\\n n = e.getContext(\\"2d\\", {\\n alpha: !1\\n });\\n }\\n return n;\\n }\\n function appendText(t, e, n) {\\n const r = document.createElement(\\"span\\"),\\n l = {\\n angle: 0,\\n canvasWidth: 0,\\n hasText: \\"\\" !== e.str,\\n hasEOL: e.hasEOL,\\n fontSize: 0\\n };\\n t._textDivs.push(r);\\n const c = i.Util.transform(t._transform, e.transform);\\n let h = Math.atan2(c[1], c[0]);\\n const d = n[e.fontName];\\n d.vertical && (h += Math.PI / 2);\\n const u = Math.hypot(c[2], c[3]),\\n p = u * function getAscent(t, e) {\\n const n = o.get(t);\\n if (n) return n;\\n const i = getCtx(s, e);\\n i.font = \\"\\".concat(s, \\"px \\").concat(t);\\n const r = i.measureText(\\"\\");\\n let l = r.fontBoundingBoxAscent,\\n c = Math.abs(r.fontBoundingBoxDescent);\\n if (l) {\\n const e = l / (l + c);\\n o.set(t, e);\\n i.canvas.width = i.canvas.height = 0;\\n return e;\\n }\\n i.strokeStyle = \\"red\\";\\n i.clearRect(0, 0, s, s);\\n i.strokeText(\\"g\\", 0, 0);\\n let h = i.getImageData(0, 0, s, s).data;\\n c = 0;\\n for (let t = h.length - 1 - 3; t >= 0; t -= 4) if (h[t] > 0) {\\n c = Math.ceil(t / 4 / s);\\n break;\\n }\\n i.clearRect(0, 0, s, s);\\n i.strokeText(\\"A\\", 0, s);\\n h = i.getImageData(0, 0, s, s).data;\\n l = 0;\\n for (let t = 0, e = h.length; t < e; t += 4) if (h[t] > 0) {\\n l = s - Math.floor(t / 4 / s);\\n break;\\n }\\n i.canvas.width = i.canvas.height = 0;\\n if (l) {\\n const e = l / (l + c);\\n o.set(t, e);\\n return e;\\n }\\n o.set(t, a);\\n return a;\\n }(d.fontFamily, t._isOffscreenCanvasSupported);\\n let f, g;\\n if (0 === h) {\\n f = c[4];\\n g = c[5] - p;\\n } else {\\n f = c[4] + p * Math.sin(h);\\n g = c[5] - p * Math.cos(h);\\n }\\n const m = \\"calc(var(--scale-factor)*\\",\\n b = r.style;\\n if (t._container === t._rootContainer) {\\n b.left = \\"\\".concat((100 * f / t._pageWidth).toFixed(2), \\"%\\");\\n b.top = \\"\\".concat((100 * g / t._pageHeight).toFixed(2), \\"%\\");\\n } else {\\n b.left = \\"\\".concat(m).concat(f.toFixed(2), \\"px)\\");\\n b.top = \\"\\".concat(m).concat(g.toFixed(2), \\"px)\\");\\n }\\n b.fontSize = \\"\\".concat(m).concat(u.toFixed(2), \\"px)\\");\\n b.fontFamily = d.fontFamily;\\n l.fontSize = u;\\n r.setAttribute(\\"role\\", \\"presentation\\");\\n r.textContent = e.str;\\n r.dir = e.dir;\\n t._fontInspectorEnabled && (r.dataset.fontName = e.fontName);\\n 0 !== h && (l.angle = h * (180 / Math.PI));\\n let v = !1;\\n if (e.str.length > 1) v = !0;else if (\\" \\" !== e.str && e.transform[0] !== e.transform[3]) {\\n const t = Math.abs(e.transform[0]),\\n n = Math.abs(e.transform[3]);\\n t !== n && Math.max(t, n) / Math.min(t, n) > 1.5 && (v = !0);\\n }\\n v && (l.canvasWidth = d.vertical ? e.height : e.width);\\n t._textDivProperties.set(r, l);\\n t._isReadableStream && t._layoutText(r);\\n }\\n function layout(t) {\\n const {\\n div: e,\\n scale: n,\\n properties: i,\\n ctx: r,\\n prevFontSize: s,\\n prevFontFamily: a\\n } = t,\\n {\\n style: o\\n } = e;\\n let l = \\"\\";\\n if (0 !== i.canvasWidth && i.hasText) {\\n const {\\n fontFamily: c\\n } = o,\\n {\\n canvasWidth: h,\\n fontSize: d\\n } = i;\\n if (s !== d || a !== c) {\\n r.font = \\"\\".concat(d * n, \\"px \\").concat(c);\\n t.prevFontSize = d;\\n t.prevFontFamily = c;\\n }\\n const {\\n width: u\\n } = r.measureText(e.textContent);\\n u > 0 && (l = \\"scaleX(\\".concat(h * n / u, \\")\\"));\\n }\\n 0 !== i.angle && (l = \\"rotate(\\".concat(i.angle, \\"deg) \\").concat(l));\\n l.length > 0 && (o.transform = l);\\n }\\n class TextLayerRenderTask {\\n constructor(t) {\\n var _globalThis$FontInspe2;\\n let {\\n textContentSource: e,\\n container: n,\\n viewport: s,\\n textDivs: a,\\n textDivProperties: o,\\n textContentItemsStr: l,\\n isOffscreenCanvasSupported: c\\n } = t;\\n this._textContentSource = e;\\n this._isReadableStream = e instanceof ReadableStream;\\n this._container = this._rootContainer = n;\\n this._textDivs = a || [];\\n this._textContentItemsStr = l || [];\\n this._isOffscreenCanvasSupported = c;\\n this._fontInspectorEnabled = !!((_globalThis$FontInspe2 = globalThis.FontInspector) !== null && _globalThis$FontInspe2 !== void 0 && _globalThis$FontInspe2.enabled);\\n this._reader = null;\\n this._textDivProperties = o || new WeakMap();\\n this._canceled = !1;\\n this._capability = new i.PromiseCapability();\\n this._layoutTextParams = {\\n prevFontSize: null,\\n prevFontFamily: null,\\n div: null,\\n scale: s.scale * (globalThis.devicePixelRatio || 1),\\n properties: null,\\n ctx: getCtx(0, c)\\n };\\n const {\\n pageWidth: h,\\n pageHeight: d,\\n pageX: u,\\n pageY: p\\n } = s.rawDims;\\n this._transform = [1, 0, 0, -1, -u, p + d];\\n this._pageWidth = h;\\n this._pageHeight = d;\\n (0, r.setLayerDimensions)(n, s);\\n this._capability.promise.finally(() => {\\n this._layoutTextParams = null;\\n }).catch(() => {});\\n }\\n get promise() {\\n return this._capability.promise;\\n }\\n cancel() {\\n this._canceled = !0;\\n if (this._reader) {\\n this._reader.cancel(new i.AbortException(\\"TextLayer task cancelled.\\")).catch(() => {});\\n this._reader = null;\\n }\\n this._capability.reject(new i.AbortException(\\"TextLayer task cancelled.\\"));\\n }\\n _processItems(t, e) {\\n for (const n of t) if (void 0 !== n.str) {\\n this._textContentItemsStr.push(n.str);\\n appendText(this, n, e);\\n } else if (\\"beginMarkedContentProps\\" === n.type || \\"beginMarkedContent\\" === n.type) {\\n const t = this._container;\\n this._container = document.createElement(\\"span\\");\\n this._container.classList.add(\\"markedContent\\");\\n null !== n.id && this._container.setAttribute(\\"id\\", \\"\\".concat(n.id));\\n t.append(this._container);\\n } else \\"endMarkedContent\\" === n.type && (this._container = this._container.parentNode);\\n }\\n _layoutText(t) {\\n const e = this._layoutTextParams.properties = this._textDivProperties.get(t);\\n this._layoutTextParams.div = t;\\n layout(this._layoutTextParams);\\n e.hasText && this._container.append(t);\\n if (e.hasEOL) {\\n const t = document.createElement(\\"br\\");\\n t.setAttribute(\\"role\\", \\"presentation\\");\\n this._container.append(t);\\n }\\n }\\n _render() {\\n const t = new i.PromiseCapability();\\n let e = Object.create(null);\\n if (this._isReadableStream) {\\n const pump = () => {\\n this._reader.read().then(n => {\\n let {\\n value: i,\\n done: r\\n } = n;\\n if (r) t.resolve();else {\\n Object.assign(e, i.styles);\\n this._processItems(i.items, e);\\n pump();\\n }\\n }, t.reject);\\n };\\n this._reader = this._textContentSource.getReader();\\n pump();\\n } else {\\n if (!this._textContentSource) throw new Error('No \\"textContentSource\\" parameter specified.');\\n {\\n const {\\n items: e,\\n styles: n\\n } = this._textContentSource;\\n this._processItems(e, n);\\n t.resolve();\\n }\\n }\\n t.promise.then(() => {\\n e = null;\\n !function render(t) {\\n if (t._canceled) return;\\n const e = t._textDivs,\\n n = t._capability;\\n if (e.length > 1e5) n.resolve();else {\\n if (!t._isReadableStream) for (const n of e) t._layoutText(n);\\n n.resolve();\\n }\\n }(this);\\n }, this._capability.reject);\\n }\\n }\\n e.TextLayerRenderTask = TextLayerRenderTask;\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n Object.defineProperty(e, \\"__esModule\\", {\\n value: !0\\n });\\n e.AnnotationEditorLayer = void 0;\\n n(125);\\n n(135);\\n n(137);\\n n(140);\\n n(142);\\n n(144);\\n n(146);\\n var i = n(1),\\n r = n(163),\\n s = n(164),\\n a = n(196),\\n o = n(201),\\n l = n(167),\\n c = n(202);\\n var _re = /*#__PURE__*/new WeakMap();\\n var _se = /*#__PURE__*/new WeakMap();\\n var _ae = /*#__PURE__*/new WeakMap();\\n var _oe = /*#__PURE__*/new WeakMap();\\n var _le = /*#__PURE__*/new WeakMap();\\n var _ce = /*#__PURE__*/new WeakMap();\\n var _he = /*#__PURE__*/new WeakMap();\\n var _de = /*#__PURE__*/new WeakMap();\\n var _ue = /*#__PURE__*/new WeakMap();\\n var _pe = /*#__PURE__*/new WeakMap();\\n var _me = /*#__PURE__*/new WeakSet();\\n var _be = /*#__PURE__*/new WeakSet();\\n var _ge = /*#__PURE__*/new WeakSet();\\n var _fe = /*#__PURE__*/new WeakSet();\\n class AnnotationEditorLayer {\\n constructor(_t13) {\\n _classPrivateMethodInitSpec(this, _fe);\\n _classPrivateMethodInitSpec(this, _ge);\\n _classPrivateMethodInitSpec(this, _be);\\n _classPrivateMethodInitSpec(this, _me);\\n _classPrivateFieldInitSpec(this, _re, {\\n writable: true,\\n value: void 0\\n });\\n _classPrivateFieldInitSpec(this, _se, {\\n writable: true,\\n value: !1\\n });\\n _classPrivateFieldInitSpec(this, _ae, {\\n writable: true,\\n value: null\\n });\\n _classPrivateFieldInitSpec(this, _oe, {\\n writable: true,\\n value: this.pointerup.bind(this)\\n });\\n _classPrivateFieldInitSpec(this, _le, {\\n writable: true,\\n value: this.pointerdown.bind(this)\\n });\\n _classPrivateFieldInitSpec(this, _ce, {\\n writable: true,\\n value: new Map()\\n });\\n _classPrivateFieldInitSpec(this, _he, {\\n writable: true,\\n value: !1\\n });\\n _classPrivateFieldInitSpec(this, _de, {\\n writable: true,\\n value: !1\\n });\\n _classPrivateFieldInitSpec(this, _ue, {\\n writable: true,\\n value: !1\\n });\\n _classPrivateFieldInitSpec(this, _pe, {\\n writable: true,\\n value: void 0\\n });\\n let {\\n uiManager: _e11,\\n pageIndex: _n7,\\n div: _i4,\\n accessibilityManager: _r4,\\n annotationLayer: s,\\n viewport: l,\\n l10n: h\\n } = _t13;\\n const d = [a.FreeTextEditor, o.InkEditor, c.StampEditor];\\n if (!AnnotationEditorLayer._initialized) {\\n AnnotationEditorLayer._initialized = !0;\\n for (const t of d) t.initialize(h);\\n }\\n _e11.registerEditorTypes(d);\\n _classPrivateFieldSet(this, _pe, _e11);\\n this.pageIndex = _n7;\\n this.div = _i4;\\n _classPrivateFieldSet(this, _re, _r4);\\n _classPrivateFieldSet(this, _ae, s);\\n this.viewport = l;\\n _classPrivateFieldGet(this, _pe).addLayer(this);\\n }\\n get isEmpty() {\\n return 0 === _classPrivateFieldGet(this, _ce).size;\\n }\\n updateToolbar(t) {\\n _classPrivateFieldGet(this, _pe).updateToolbar(t);\\n }\\n updateMode() {\\n let t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : _classPrivateFieldGet(this, _pe).getMode();\\n _classPrivateMethodGet(this, _fe, _fe2).call(this);\\n if (t === i.AnnotationEditorType.INK) {\\n this.addInkEditorIfNeeded(!1);\\n this.disableClick();\\n } else this.enableClick();\\n _classPrivateFieldGet(this, _pe).unselectAll();\\n if (t !== i.AnnotationEditorType.NONE) {\\n this.div.classList.toggle(\\"freeTextEditing\\", t === i.AnnotationEditorType.FREETEXT);\\n this.div.classList.toggle(\\"inkEditing\\", t === i.AnnotationEditorType.INK);\\n this.div.classList.toggle(\\"stampEditing\\", t === i.AnnotationEditorType.STAMP);\\n this.div.hidden = !1;\\n }\\n }\\n addInkEditorIfNeeded(t) {\\n if (!t && _classPrivateFieldGet(this, _pe).getMode() !== i.AnnotationEditorType.INK) return;\\n if (!t) for (const t of _classPrivateFieldGet(this, _ce).values()) if (t.isEmpty()) {\\n t.setInBackground();\\n return;\\n }\\n _classPrivateMethodGet(this, _ge, _ge2).call(this, {\\n offsetX: 0,\\n offsetY: 0\\n }).setInBackground();\\n }\\n setEditingState(t) {\\n _classPrivateFieldGet(this, _pe).setEditingState(t);\\n }\\n addCommands(t) {\\n _classPrivateFieldGet(this, _pe).addCommands(t);\\n }\\n enable() {\\n this.div.style.pointerEvents = \\"auto\\";\\n const t = new Set();\\n for (const e of _classPrivateFieldGet(this, _ce).values()) {\\n e.enableEditing();\\n e.annotationElementId && t.add(e.annotationElementId);\\n }\\n if (!_classPrivateFieldGet(this, _ae)) return;\\n const e = _classPrivateFieldGet(this, _ae).getEditableAnnotations();\\n for (const n of e) {\\n n.hide();\\n if (_classPrivateFieldGet(this, _pe).isDeletedAnnotationElement(n.data.id)) continue;\\n if (t.has(n.data.id)) continue;\\n const e = this.deserialize(n);\\n if (e) {\\n this.addOrRebuild(e);\\n e.enableEditing();\\n }\\n }\\n }\\n disable() {\\n _classPrivateFieldSet(this, _ue, !0);\\n this.div.style.pointerEvents = \\"none\\";\\n const t = new Set();\\n for (const e of _classPrivateFieldGet(this, _ce).values()) {\\n e.disableEditing();\\n if (e.annotationElementId && null === e.serialize()) {\\n var _this$getEditableAnno;\\n (_this$getEditableAnno = this.getEditableAnnotation(e.annotationElementId)) === null || _this$getEditableAnno === void 0 ? void 0 : _this$getEditableAnno.show();\\n e.remove();\\n } else t.add(e.annotationElementId);\\n }\\n if (_classPrivateFieldGet(this, _ae)) {\\n const e = _classPrivateFieldGet(this, _ae).getEditableAnnotations();\\n for (const n of e) {\\n const {\\n id: e\\n } = n.data;\\n t.has(e) || _classPrivateFieldGet(this, _pe).isDeletedAnnotationElement(e) || n.show();\\n }\\n }\\n _classPrivateMethodGet(this, _fe, _fe2).call(this);\\n this.isEmpty && (this.div.hidden = !0);\\n _classPrivateFieldSet(this, _ue, !1);\\n }\\n getEditableAnnotation(t) {\\n var _classPrivateFieldGet9;\\n return ((_classPrivateFieldGet9 = _classPrivateFieldGet(this, _ae)) === null || _classPrivateFieldGet9 === void 0 ? void 0 : _classPrivateFieldGet9.getEditableAnnotation(t)) || null;\\n }\\n setActiveEditor(t) {\\n _classPrivateFieldGet(this, _pe).getActive() !== t && _classPrivateFieldGet(this, _pe).setActiveEditor(t);\\n }\\n enableClick() {\\n this.div.addEventListener(\\"pointerdown\\", _classPrivateFieldGet(this, _le));\\n this.div.addEventListener(\\"pointerup\\", _classPrivateFieldGet(this, _oe));\\n }\\n disableClick() {\\n this.div.removeEventListener(\\"pointerdown\\", _classPrivateFieldGet(this, _le));\\n this.div.removeEventListener(\\"pointerup\\", _classPrivateFieldGet(this, _oe));\\n }\\n attach(t) {\\n _classPrivateFieldGet(this, _ce).set(t.id, t);\\n const {\\n annotationElementId: e\\n } = t;\\n e && _classPrivateFieldGet(this, _pe).isDeletedAnnotationElement(e) && _classPrivateFieldGet(this, _pe).removeDeletedAnnotationElement(t);\\n }\\n detach(t) {\\n var _classPrivateFieldGet10;\\n _classPrivateFieldGet(this, _ce).delete(t.id);\\n (_classPrivateFieldGet10 = _classPrivateFieldGet(this, _re)) === null || _classPrivateFieldGet10 === void 0 ? void 0 : _classPrivateFieldGet10.removePointerInTextLayer(t.contentDiv);\\n !_classPrivateFieldGet(this, _ue) && t.annotationElementId && _classPrivateFieldGet(this, _pe).addDeletedAnnotationElement(t);\\n }\\n remove(t) {\\n this.detach(t);\\n _classPrivateFieldGet(this, _pe).removeEditor(t);\\n t.div.style.display = \\"none\\";\\n setTimeout(() => {\\n t.div.style.display = \\"\\";\\n t.div.remove();\\n t.isAttachedToDOM = !1;\\n document.activeElement === document.body && _classPrivateFieldGet(this, _pe).focusMainContainer();\\n }, 0);\\n _classPrivateFieldGet(this, _de) || this.addInkEditorIfNeeded(!1);\\n }\\n add(t) {\\n _classPrivateMethodGet(this, _me, _me2).call(this, t);\\n _classPrivateFieldGet(this, _pe).addEditor(t);\\n this.attach(t);\\n if (!t.isAttachedToDOM) {\\n const e = t.render();\\n this.div.append(e);\\n t.isAttachedToDOM = !0;\\n }\\n this.moveEditorInDOM(t);\\n t.onceAdded();\\n _classPrivateFieldGet(this, _pe).addToAnnotationStorage(t);\\n }\\n moveEditorInDOM(t) {\\n var _classPrivateFieldGet11;\\n (_classPrivateFieldGet11 = _classPrivateFieldGet(this, _re)) === null || _classPrivateFieldGet11 === void 0 ? void 0 : _classPrivateFieldGet11.moveElementInDOM(this.div, t.div, t.contentDiv, !0);\\n }\\n addOrRebuild(t) {\\n t.needsToBeRebuilt() ? t.rebuild() : this.add(t);\\n }\\n addUndoableEditor(t) {\\n this.addCommands({\\n cmd: () => {\\n this.addOrRebuild(t);\\n },\\n undo: () => {\\n t.remove();\\n },\\n mustExec: !1\\n });\\n }\\n getNextId() {\\n return _classPrivateFieldGet(this, _pe).getId();\\n }\\n deserialize(t) {\\n var _t$annotationType;\\n switch ((_t$annotationType = t.annotationType) !== null && _t$annotationType !== void 0 ? _t$annotationType : t.annotationEditorType) {\\n case i.AnnotationEditorType.FREETEXT:\\n return a.FreeTextEditor.deserialize(t, this, _classPrivateFieldGet(this, _pe));\\n case i.AnnotationEditorType.INK:\\n return o.InkEditor.deserialize(t, this, _classPrivateFieldGet(this, _pe));\\n case i.AnnotationEditorType.STAMP:\\n return c.StampEditor.deserialize(t, this, _classPrivateFieldGet(this, _pe));\\n }\\n return null;\\n }\\n setSelected(t) {\\n _classPrivateFieldGet(this, _pe).setSelected(t);\\n }\\n toggleSelected(t) {\\n _classPrivateFieldGet(this, _pe).toggleSelected(t);\\n }\\n isSelected(t) {\\n return _classPrivateFieldGet(this, _pe).isSelected(t);\\n }\\n unselect(t) {\\n _classPrivateFieldGet(this, _pe).unselect(t);\\n }\\n pointerup(t) {\\n const {\\n isMac: e\\n } = i.FeatureTest.platform;\\n if (!(0 !== t.button || t.ctrlKey && e) && t.target === this.div && _classPrivateFieldGet(this, _he)) {\\n _classPrivateFieldSet(this, _he, !1);\\n _classPrivateFieldGet(this, _se) ? _classPrivateMethodGet(this, _ge, _ge2).call(this, t) : _classPrivateFieldSet(this, _se, !0);\\n }\\n }\\n pointerdown(t) {\\n if (_classPrivateFieldGet(this, _he)) {\\n _classPrivateFieldSet(this, _he, !1);\\n return;\\n }\\n const {\\n isMac: e\\n } = i.FeatureTest.platform;\\n if (0 !== t.button || t.ctrlKey && e) return;\\n if (t.target !== this.div) return;\\n _classPrivateFieldSet(this, _he, !0);\\n const n = _classPrivateFieldGet(this, _pe).getActive();\\n _classPrivateFieldSet(this, _se, !n || n.isEmpty());\\n }\\n drop(t) {\\n const e = t.dataTransfer.getData(\\"text/plain\\"),\\n n = _classPrivateFieldGet(this, _pe).getEditor(e);\\n if (!n) return;\\n t.preventDefault();\\n t.dataTransfer.dropEffect = \\"move\\";\\n _classPrivateMethodGet(this, _me, _me2).call(this, n);\\n const i = this.div.getBoundingClientRect(),\\n r = t.clientX - i.x,\\n s = t.clientY - i.y;\\n n.translate(r - n.startX, s - n.startY);\\n this.moveEditorInDOM(n);\\n n.div.focus();\\n }\\n dragover(t) {\\n t.preventDefault();\\n }\\n destroy() {\\n var _classPrivateFieldGet12;\\n ((_classPrivateFieldGet12 = _classPrivateFieldGet(this, _pe).getActive()) === null || _classPrivateFieldGet12 === void 0 ? void 0 : _classPrivateFieldGet12.parent) === this && _classPrivateFieldGet(this, _pe).setActiveEditor(null);\\n for (const t of _classPrivateFieldGet(this, _ce).values()) {\\n var _classPrivateFieldGet13;\\n (_classPrivateFieldGet13 = _classPrivateFieldGet(this, _re)) === null || _classPrivateFieldGet13 === void 0 ? void 0 : _classPrivateFieldGet13.removePointerInTextLayer(t.contentDiv);\\n t.setParent(null);\\n t.isAttachedToDOM = !1;\\n t.div.remove();\\n }\\n this.div = null;\\n _classPrivateFieldGet(this, _ce).clear();\\n _classPrivateFieldGet(this, _pe).removeLayer(this);\\n }\\n render(t) {\\n let {\\n viewport: e\\n } = t;\\n this.viewport = e;\\n (0, l.setLayerDimensions)(this.div, e);\\n (0, s.bindEvents)(this, this.div, [\\"dragover\\", \\"drop\\"]);\\n for (const t of _classPrivateFieldGet(this, _pe).getEditors(this.pageIndex)) this.add(t);\\n this.updateMode();\\n }\\n update(t) {\\n let {\\n viewport: e\\n } = t;\\n _classPrivateFieldGet(this, _pe).commitOrRemove();\\n this.viewport = e;\\n (0, l.setLayerDimensions)(this.div, {\\n rotation: e.rotation\\n });\\n this.updateMode();\\n }\\n get pageDimensions() {\\n const {\\n pageWidth: t,\\n pageHeight: e\\n } = this.viewport.rawDims;\\n return [t, e];\\n }\\n }\\n function _me2(t) {\\n if (t.parent !== this) {\\n var _t$parent;\\n if (t.annotationElementId) {\\n _classPrivateFieldGet(this, _pe).addDeletedAnnotationElement(t.annotationElementId);\\n r.AnnotationEditor.deleteAnnotationElement(t);\\n t.annotationElementId = null;\\n }\\n this.attach(t);\\n (_t$parent = t.parent) === null || _t$parent === void 0 ? void 0 : _t$parent.detach(t);\\n t.setParent(this);\\n if (t.div && t.isAttachedToDOM) {\\n t.div.remove();\\n this.div.append(t.div);\\n }\\n }\\n }\\n function _be2(t) {\\n switch (_classPrivateFieldGet(this, _pe).getMode()) {\\n case i.AnnotationEditorType.FREETEXT:\\n return new a.FreeTextEditor(t);\\n case i.AnnotationEditorType.INK:\\n return new o.InkEditor(t);\\n case i.AnnotationEditorType.STAMP:\\n return new c.StampEditor(t);\\n }\\n return null;\\n }\\n function _ge2(t) {\\n const e = this.getNextId(),\\n n = _classPrivateMethodGet(this, _be, _be2).call(this, {\\n parent: this,\\n id: e,\\n x: t.offsetX,\\n y: t.offsetY,\\n uiManager: _classPrivateFieldGet(this, _pe)\\n });\\n n && this.add(n);\\n return n;\\n }\\n function _fe2() {\\n _classPrivateFieldSet(this, _de, !0);\\n for (const t of _classPrivateFieldGet(this, _ce).values()) t.isEmpty() && t.remove();\\n _classPrivateFieldSet(this, _de, !1);\\n }\\n _defineProperty(AnnotationEditorLayer, \\"_initialized\\", !1);\\n e.AnnotationEditorLayer = AnnotationEditorLayer;\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n var _class30;\\n Object.defineProperty(e, \\"__esModule\\", {\\n value: !0\\n });\\n e.FreeTextEditor = void 0;\\n n(89);\\n var i = n(1),\\n r = n(164),\\n s = n(163),\\n a = n(197);\\n var _ve = /*#__PURE__*/new WeakMap();\\n var _ye = /*#__PURE__*/new WeakMap();\\n var _Ae = /*#__PURE__*/new WeakMap();\\n var _e12 = /*#__PURE__*/new WeakMap();\\n var _Se = /*#__PURE__*/new WeakMap();\\n var _Ee = /*#__PURE__*/new WeakMap();\\n var _xe = /*#__PURE__*/new WeakMap();\\n var _we = /*#__PURE__*/new WeakMap();\\n var _Ce = /*#__PURE__*/new WeakMap();\\n var _Te = /*#__PURE__*/new WeakSet();\\n var _Pe = /*#__PURE__*/new WeakSet();\\n var _Re = /*#__PURE__*/new WeakSet();\\n var _ke = /*#__PURE__*/new WeakSet();\\n var _Fe = /*#__PURE__*/new WeakSet();\\n var _Ie = /*#__PURE__*/new WeakSet();\\n var _Me = /*#__PURE__*/new WeakSet();\\n class FreeTextEditor extends s.AnnotationEditor {\\n static get _keyboardManager() {\\n const t = FreeTextEditor.prototype,\\n arrowChecker = t => t.isEmpty(),\\n e = r.AnnotationEditorUIManager.TRANSLATE_SMALL,\\n n = r.AnnotationEditorUIManager.TRANSLATE_BIG;\\n return (0, i.shadow)(this, \\"_keyboardManager\\", new r.KeyboardManager([[[\\"ctrl+s\\", \\"mac+meta+s\\", \\"ctrl+p\\", \\"mac+meta+p\\"], t.commitOrRemove, {\\n bubbles: !0\\n }], [[\\"ctrl+Enter\\", \\"mac+meta+Enter\\", \\"Escape\\", \\"mac+Escape\\"], t.commitOrRemove], [[\\"ArrowLeft\\", \\"mac+ArrowLeft\\"], t._translateEmpty, {\\n args: [-e, 0],\\n checker: arrowChecker\\n }], [[\\"ctrl+ArrowLeft\\", \\"mac+shift+ArrowLeft\\"], t._translateEmpty, {\\n args: [-n, 0],\\n checker: arrowChecker\\n }], [[\\"ArrowRight\\", \\"mac+ArrowRight\\"], t._translateEmpty, {\\n args: [e, 0],\\n checker: arrowChecker\\n }], [[\\"ctrl+ArrowRight\\", \\"mac+shift+ArrowRight\\"], t._translateEmpty, {\\n args: [n, 0],\\n checker: arrowChecker\\n }], [[\\"ArrowUp\\", \\"mac+ArrowUp\\"], t._translateEmpty, {\\n args: [0, -e],\\n checker: arrowChecker\\n }], [[\\"ctrl+ArrowUp\\", \\"mac+shift+ArrowUp\\"], t._translateEmpty, {\\n args: [0, -n],\\n checker: arrowChecker\\n }], [[\\"ArrowDown\\", \\"mac+ArrowDown\\"], t._translateEmpty, {\\n args: [0, e],\\n checker: arrowChecker\\n }], [[\\"ctrl+ArrowDown\\", \\"mac+shift+ArrowDown\\"], t._translateEmpty, {\\n args: [0, n],\\n checker: arrowChecker\\n }]]));\\n }\\n constructor(_t14) {\\n super(_objectSpread(_objectSpread({}, _t14), {}, {\\n name: \\"freeTextEditor\\"\\n }));\\n _classPrivateMethodInitSpec(this, _Me);\\n _classPrivateMethodInitSpec(this, _Ie);\\n _classPrivateMethodInitSpec(this, _Fe);\\n _classPrivateMethodInitSpec(this, _ke);\\n _classPrivateMethodInitSpec(this, _Re);\\n _classPrivateMethodInitSpec(this, _Pe);\\n _classPrivateMethodInitSpec(this, _Te);\\n _classPrivateFieldInitSpec(this, _ve, {\\n writable: true,\\n value: this.editorDivBlur.bind(this)\\n });\\n _classPrivateFieldInitSpec(this, _ye, {\\n writable: true,\\n value: this.editorDivFocus.bind(this)\\n });\\n _classPrivateFieldInitSpec(this, _Ae, {\\n writable: true,\\n value: this.editorDivInput.bind(this)\\n });\\n _classPrivateFieldInitSpec(this, _e12, {\\n writable: true,\\n value: this.editorDivKeydown.bind(this)\\n });\\n _classPrivateFieldInitSpec(this, _Se, {\\n writable: true,\\n value: void 0\\n });\\n _classPrivateFieldInitSpec(this, _Ee, {\\n writable: true,\\n value: \\"\\"\\n });\\n _classPrivateFieldInitSpec(this, _xe, {\\n writable: true,\\n value: \\"\\".concat(this.id, \\"-editor\\")\\n });\\n _classPrivateFieldInitSpec(this, _we, {\\n writable: true,\\n value: void 0\\n });\\n _classPrivateFieldInitSpec(this, _Ce, {\\n writable: true,\\n value: null\\n });\\n _classPrivateFieldSet(this, _Se, _t14.color || FreeTextEditor._defaultColor || s.AnnotationEditor._defaultLineColor);\\n _classPrivateFieldSet(this, _we, _t14.fontSize || FreeTextEditor._defaultFontSize);\\n }\\n static initialize(t) {\\n this._l10nPromise = new Map([\\"free_text2_default_content\\", \\"editor_free_text2_aria_label\\"].map(e => [e, t.get(e)]));\\n const e = getComputedStyle(document.documentElement);\\n this._internalPadding = parseFloat(e.getPropertyValue(\\"--freetext-padding\\"));\\n }\\n static updateDefaultParams(t, e) {\\n switch (t) {\\n case i.AnnotationEditorParamsType.FREETEXT_SIZE:\\n FreeTextEditor._defaultFontSize = e;\\n break;\\n case i.AnnotationEditorParamsType.FREETEXT_COLOR:\\n FreeTextEditor._defaultColor = e;\\n }\\n }\\n updateParams(t, e) {\\n switch (t) {\\n case i.AnnotationEditorParamsType.FREETEXT_SIZE:\\n _classPrivateMethodGet(this, _Te, _Te2).call(this, e);\\n break;\\n case i.AnnotationEditorParamsType.FREETEXT_COLOR:\\n _classPrivateMethodGet(this, _Pe, _Pe2).call(this, e);\\n }\\n }\\n static get defaultPropertiesToUpdate() {\\n return [[i.AnnotationEditorParamsType.FREETEXT_SIZE, FreeTextEditor._defaultFontSize], [i.AnnotationEditorParamsType.FREETEXT_COLOR, FreeTextEditor._defaultColor || s.AnnotationEditor._defaultLineColor]];\\n }\\n get propertiesToUpdate() {\\n return [[i.AnnotationEditorParamsType.FREETEXT_SIZE, _classPrivateFieldGet(this, _we)], [i.AnnotationEditorParamsType.FREETEXT_COLOR, _classPrivateFieldGet(this, _Se)]];\\n }\\n _translateEmpty(t, e) {\\n this._uiManager.translateSelectedEditors(t, e, !0);\\n }\\n getInitialTranslation() {\\n const t = this.parentScale;\\n return [-FreeTextEditor._internalPadding * t, -(FreeTextEditor._internalPadding + _classPrivateFieldGet(this, _we)) * t];\\n }\\n rebuild() {\\n super.rebuild();\\n null !== this.div && (this.isAttachedToDOM || this.parent.add(this));\\n }\\n enableEditMode() {\\n if (!this.isInEditMode()) {\\n this.parent.setEditingState(!1);\\n this.parent.updateToolbar(i.AnnotationEditorType.FREETEXT);\\n super.enableEditMode();\\n this.overlayDiv.classList.remove(\\"enabled\\");\\n this.editorDiv.contentEditable = !0;\\n this.div.draggable = !1;\\n this.div.removeAttribute(\\"aria-activedescendant\\");\\n this.editorDiv.addEventListener(\\"keydown\\", _classPrivateFieldGet(this, _e12));\\n this.editorDiv.addEventListener(\\"focus\\", _classPrivateFieldGet(this, _ye));\\n this.editorDiv.addEventListener(\\"blur\\", _classPrivateFieldGet(this, _ve));\\n this.editorDiv.addEventListener(\\"input\\", _classPrivateFieldGet(this, _Ae));\\n }\\n }\\n disableEditMode() {\\n if (this.isInEditMode()) {\\n this.parent.setEditingState(!0);\\n super.disableEditMode();\\n this.overlayDiv.classList.add(\\"enabled\\");\\n this.editorDiv.contentEditable = !1;\\n this.div.setAttribute(\\"aria-activedescendant\\", _classPrivateFieldGet(this, _xe));\\n this.div.draggable = !0;\\n this.editorDiv.removeEventListener(\\"keydown\\", _classPrivateFieldGet(this, _e12));\\n this.editorDiv.removeEventListener(\\"focus\\", _classPrivateFieldGet(this, _ye));\\n this.editorDiv.removeEventListener(\\"blur\\", _classPrivateFieldGet(this, _ve));\\n this.editorDiv.removeEventListener(\\"input\\", _classPrivateFieldGet(this, _Ae));\\n this.div.focus({\\n preventScroll: !0\\n });\\n this.isEditing = !1;\\n this.parent.div.classList.add(\\"freeTextEditing\\");\\n }\\n }\\n focusin(t) {\\n super.focusin(t);\\n t.target !== this.editorDiv && this.editorDiv.focus();\\n }\\n onceAdded() {\\n if (this.width) _classPrivateMethodGet(this, _Me, _Me2).call(this);else {\\n this.enableEditMode();\\n this.editorDiv.focus();\\n }\\n }\\n isEmpty() {\\n return !this.editorDiv || \\"\\" === this.editorDiv.innerText.trim();\\n }\\n remove() {\\n this.isEditing = !1;\\n if (this.parent) {\\n this.parent.setEditingState(!0);\\n this.parent.div.classList.add(\\"freeTextEditing\\");\\n }\\n super.remove();\\n }\\n commit() {\\n if (!this.isInEditMode()) return;\\n super.commit();\\n this.disableEditMode();\\n const t = _classPrivateFieldGet(this, _Ee),\\n e = _classPrivateFieldSet(this, _Ee, _classPrivateMethodGet(this, _Re, _Re2).call(this).trimEnd());\\n if (t === e) return;\\n const setText = t => {\\n _classPrivateFieldSet(this, _Ee, t);\\n if (t) {\\n _classPrivateMethodGet(this, _Fe, _Fe2).call(this);\\n this.rebuild();\\n _classPrivateMethodGet(this, _ke, _ke2).call(this);\\n } else this.remove();\\n };\\n this.addCommands({\\n cmd: () => {\\n setText(e);\\n },\\n undo: () => {\\n setText(t);\\n },\\n mustExec: !1\\n });\\n _classPrivateMethodGet(this, _ke, _ke2).call(this);\\n }\\n shouldGetKeyboardEvents() {\\n return this.isInEditMode();\\n }\\n enterInEditMode() {\\n this.enableEditMode();\\n this.editorDiv.focus();\\n }\\n dblclick(t) {\\n this.enterInEditMode();\\n }\\n keydown(t) {\\n t.target === this.div && \\"Enter\\" === t.key && this.enterInEditMode();\\n }\\n editorDivKeydown(t) {\\n FreeTextEditor._keyboardManager.exec(this, t);\\n }\\n editorDivFocus(t) {\\n this.isEditing = !0;\\n }\\n editorDivBlur(t) {\\n this.isEditing = !1;\\n }\\n editorDivInput(t) {\\n this.parent.div.classList.toggle(\\"freeTextEditing\\", this.isEmpty());\\n }\\n disableEditing() {\\n this.editorDiv.setAttribute(\\"role\\", \\"comment\\");\\n this.editorDiv.removeAttribute(\\"aria-multiline\\");\\n }\\n enableEditing() {\\n this.editorDiv.setAttribute(\\"role\\", \\"textbox\\");\\n this.editorDiv.setAttribute(\\"aria-multiline\\", !0);\\n }\\n render() {\\n if (this.div) return this.div;\\n let t, e;\\n if (this.width) {\\n t = this.x;\\n e = this.y;\\n }\\n super.render();\\n this.editorDiv = document.createElement(\\"div\\");\\n this.editorDiv.className = \\"internal\\";\\n this.editorDiv.setAttribute(\\"id\\", _classPrivateFieldGet(this, _xe));\\n this.enableEditing();\\n FreeTextEditor._l10nPromise.get(\\"editor_free_text2_aria_label\\").then(t => {\\n var _this$editorDiv;\\n return (_this$editorDiv = this.editorDiv) === null || _this$editorDiv === void 0 ? void 0 : _this$editorDiv.setAttribute(\\"aria-label\\", t);\\n });\\n FreeTextEditor._l10nPromise.get(\\"free_text2_default_content\\").then(t => {\\n var _this$editorDiv2;\\n return (_this$editorDiv2 = this.editorDiv) === null || _this$editorDiv2 === void 0 ? void 0 : _this$editorDiv2.setAttribute(\\"default-content\\", t);\\n });\\n this.editorDiv.contentEditable = !0;\\n const {\\n style: n\\n } = this.editorDiv;\\n n.fontSize = \\"calc(\\".concat(_classPrivateFieldGet(this, _we), \\"px * var(--scale-factor))\\");\\n n.color = _classPrivateFieldGet(this, _Se);\\n this.div.append(this.editorDiv);\\n this.overlayDiv = document.createElement(\\"div\\");\\n this.overlayDiv.classList.add(\\"overlay\\", \\"enabled\\");\\n this.div.append(this.overlayDiv);\\n (0, r.bindEvents)(this, this.div, [\\"dblclick\\", \\"keydown\\"]);\\n if (this.width) {\\n const [n, i] = this.parentDimensions;\\n if (this.annotationElementId) {\\n const {\\n position: r\\n } = _classPrivateFieldGet(this, _Ce);\\n let [s, a] = this.getInitialTranslation();\\n [s, a] = this.pageTranslationToScreen(s, a);\\n const [o, l] = this.pageDimensions,\\n [c, h] = this.pageTranslation;\\n let d, u;\\n switch (this.rotation) {\\n case 0:\\n d = t + (r[0] - c) / o;\\n u = e + this.height - (r[1] - h) / l;\\n break;\\n case 90:\\n d = t + (r[0] - c) / o;\\n u = e - (r[1] - h) / l;\\n [s, a] = [a, -s];\\n break;\\n case 180:\\n d = t - this.width + (r[0] - c) / o;\\n u = e - (r[1] - h) / l;\\n [s, a] = [-s, -a];\\n break;\\n case 270:\\n d = t + (r[0] - c - this.height * l) / o;\\n u = e + (r[1] - h - this.width * o) / l;\\n [s, a] = [-a, s];\\n }\\n this.setAt(d * n, u * i, s, a);\\n } else this.setAt(t * n, e * i, this.width * n, this.height * i);\\n _classPrivateMethodGet(this, _Fe, _Fe2).call(this);\\n this.div.draggable = !0;\\n this.editorDiv.contentEditable = !1;\\n } else {\\n this.div.draggable = !1;\\n this.editorDiv.contentEditable = !0;\\n }\\n return this.div;\\n }\\n get contentDiv() {\\n return this.editorDiv;\\n }\\n static deserialize(t, e, n) {\\n let r = null;\\n if (t instanceof a.FreeTextAnnotationElement) {\\n const {\\n data: {\\n defaultAppearanceData: {\\n fontSize: e,\\n fontColor: n\\n },\\n rect: s,\\n rotation: a,\\n id: o\\n },\\n textContent: l,\\n textPosition: c,\\n parent: {\\n page: {\\n pageNumber: h\\n }\\n }\\n } = t;\\n if (!l || 0 === l.length) return null;\\n r = t = {\\n annotationType: i.AnnotationEditorType.FREETEXT,\\n color: Array.from(n),\\n fontSize: e,\\n value: l.join(\\"\\\\n\\"),\\n position: c,\\n pageIndex: h - 1,\\n rect: s,\\n rotation: a,\\n id: o,\\n deleted: !1\\n };\\n }\\n const s = super.deserialize(t, e, n);\\n _classPrivateFieldSet(s, _we, t.fontSize);\\n _classPrivateFieldSet(s, _Se, i.Util.makeHexColor(...t.color));\\n _classPrivateFieldSet(s, _Ee, t.value);\\n s.annotationElementId = t.id || null;\\n _classPrivateFieldSet(s, _Ce, r);\\n return s;\\n }\\n serialize() {\\n let t = arguments.length > 0 && void 0 !== arguments[0] && arguments[0];\\n if (this.isEmpty()) return null;\\n if (this.deleted) return {\\n pageIndex: this.pageIndex,\\n id: this.annotationElementId,\\n deleted: !0\\n };\\n const e = FreeTextEditor._internalPadding * this.parentScale,\\n n = this.getRect(e, e),\\n r = s.AnnotationEditor._colorManager.convert(this.isAttachedToDOM ? getComputedStyle(this.editorDiv).color : _classPrivateFieldGet(this, _Se)),\\n a = {\\n annotationType: i.AnnotationEditorType.FREETEXT,\\n color: r,\\n fontSize: _classPrivateFieldGet(this, _we),\\n value: _classPrivateFieldGet(this, _Ee),\\n pageIndex: this.pageIndex,\\n rect: n,\\n rotation: this.rotation\\n };\\n if (t) return a;\\n if (this.annotationElementId && !_classPrivateMethodGet(this, _Ie, _Ie2).call(this, a)) return null;\\n a.id = this.annotationElementId;\\n return a;\\n }\\n }\\n _class30 = FreeTextEditor;\\n function _Te2(t) {\\n const setFontsize = t => {\\n this.editorDiv.style.fontSize = \\"calc(\\".concat(t, \\"px * var(--scale-factor))\\");\\n this.translate(0, -(t - _classPrivateFieldGet(this, _we)) * this.parentScale);\\n _classPrivateFieldSet(this, _we, t);\\n _classPrivateMethodGet(this, _ke, _ke2).call(this);\\n },\\n e = _classPrivateFieldGet(this, _we);\\n this.addCommands({\\n cmd: () => {\\n setFontsize(t);\\n },\\n undo: () => {\\n setFontsize(e);\\n },\\n mustExec: !0,\\n type: i.AnnotationEditorParamsType.FREETEXT_SIZE,\\n overwriteIfSameType: !0,\\n keepUndo: !0\\n });\\n }\\n function _Pe2(t) {\\n const e = _classPrivateFieldGet(this, _Se);\\n this.addCommands({\\n cmd: () => {\\n _classPrivateFieldSet(this, _Se, this.editorDiv.style.color = t);\\n },\\n undo: () => {\\n _classPrivateFieldSet(this, _Se, this.editorDiv.style.color = e);\\n },\\n mustExec: !0,\\n type: i.AnnotationEditorParamsType.FREETEXT_COLOR,\\n overwriteIfSameType: !0,\\n keepUndo: !0\\n });\\n }\\n function _Re2() {\\n const t = this.editorDiv.getElementsByTagName(\\"div\\");\\n if (0 === t.length) return this.editorDiv.innerText;\\n const e = [];\\n for (const n of t) e.push(n.innerText.replace(/\\\\r\\\\n?|\\\\n/, \\"\\"));\\n return e.join(\\"\\\\n\\");\\n }\\n function _ke2() {\\n const [t, e] = this.parentDimensions;\\n let n;\\n if (this.isAttachedToDOM) n = this.div.getBoundingClientRect();else {\\n const {\\n currentLayer: t,\\n div: e\\n } = this,\\n i = e.style.display;\\n e.style.display = \\"hidden\\";\\n t.div.append(this.div);\\n n = e.getBoundingClientRect();\\n e.remove();\\n e.style.display = i;\\n }\\n if (this.rotation % 180 == this.parentRotation % 180) {\\n this.width = n.width / t;\\n this.height = n.height / e;\\n } else {\\n this.width = n.height / t;\\n this.height = n.width / e;\\n }\\n this.fixAndSetPosition();\\n }\\n function _Fe2() {\\n this.editorDiv.replaceChildren();\\n if (_classPrivateFieldGet(this, _Ee)) for (const t of _classPrivateFieldGet(this, _Ee).split(\\"\\\\n\\")) {\\n const e = document.createElement(\\"div\\");\\n e.append(t ? document.createTextNode(t) : document.createElement(\\"br\\"));\\n this.editorDiv.append(e);\\n }\\n }\\n function _Ie2(t) {\\n const {\\n value: e,\\n fontSize: n,\\n color: i,\\n rect: r,\\n pageIndex: s\\n } = _classPrivateFieldGet(this, _Ce);\\n return t.value !== e || t.fontSize !== n || t.rect.some((t, e) => Math.abs(t - r[e]) >= 1) || t.color.some((t, e) => t !== i[e]) || t.pageIndex !== s;\\n }\\n function _Me2() {\\n let t = arguments.length > 0 && void 0 !== arguments[0] && arguments[0];\\n if (!this.annotationElementId) return;\\n _classPrivateMethodGet(this, _ke, _ke2).call(this);\\n if (!t && (0 === this.width || 0 === this.height)) {\\n setTimeout(() => _classPrivateMethodGet(this, _Me, _Me2).call(this, !0), 0);\\n return;\\n }\\n const e = _class30._internalPadding * this.parentScale;\\n _classPrivateFieldGet(this, _Ce).rect = this.getRect(e, e);\\n }\\n _defineProperty(FreeTextEditor, \\"_freeTextDefaultContent\\", \\"\\");\\n _defineProperty(FreeTextEditor, \\"_l10nPromise\\", void 0);\\n _defineProperty(FreeTextEditor, \\"_internalPadding\\", 0);\\n _defineProperty(FreeTextEditor, \\"_defaultColor\\", null);\\n _defineProperty(FreeTextEditor, \\"_defaultFontSize\\", 10);\\n _defineProperty(FreeTextEditor, \\"_type\\", \\"freetext\\");\\n e.FreeTextEditor = FreeTextEditor;\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n var _re2, _an, _on, _ln, _cn;\\n Object.defineProperty(e, \\"__esModule\\", {\\n value: !0\\n });\\n e.StampAnnotationElement = e.InkAnnotationElement = e.FreeTextAnnotationElement = e.AnnotationLayer = void 0;\\n n(89);\\n n(125);\\n n(135);\\n n(137);\\n n(140);\\n n(142);\\n n(144);\\n n(146);\\n var i = n(1),\\n r = n(167),\\n s = n(162),\\n a = n(198),\\n o = n(199),\\n l = n(200);\\n const c = 1e3,\\n h = new WeakSet();\\n function getRectDims(t) {\\n return {\\n width: t[2] - t[0],\\n height: t[3] - t[1]\\n };\\n }\\n class AnnotationElementFactory {\\n static create(t) {\\n switch (t.data.annotationType) {\\n case i.AnnotationType.LINK:\\n return new LinkAnnotationElement(t);\\n case i.AnnotationType.TEXT:\\n return new TextAnnotationElement(t);\\n case i.AnnotationType.WIDGET:\\n switch (t.data.fieldType) {\\n case \\"Tx\\":\\n return new TextWidgetAnnotationElement(t);\\n case \\"Btn\\":\\n return t.data.radioButton ? new RadioButtonWidgetAnnotationElement(t) : t.data.checkBox ? new CheckboxWidgetAnnotationElement(t) : new PushButtonWidgetAnnotationElement(t);\\n case \\"Ch\\":\\n return new ChoiceWidgetAnnotationElement(t);\\n case \\"Sig\\":\\n return new SignatureWidgetAnnotationElement(t);\\n }\\n return new WidgetAnnotationElement(t);\\n case i.AnnotationType.POPUP:\\n return new PopupAnnotationElement(t);\\n case i.AnnotationType.FREETEXT:\\n return new FreeTextAnnotationElement(t);\\n case i.AnnotationType.LINE:\\n return new LineAnnotationElement(t);\\n case i.AnnotationType.SQUARE:\\n return new SquareAnnotationElement(t);\\n case i.AnnotationType.CIRCLE:\\n return new CircleAnnotationElement(t);\\n case i.AnnotationType.POLYLINE:\\n return new PolylineAnnotationElement(t);\\n case i.AnnotationType.CARET:\\n return new CaretAnnotationElement(t);\\n case i.AnnotationType.INK:\\n return new InkAnnotationElement(t);\\n case i.AnnotationType.POLYGON:\\n return new PolygonAnnotationElement(t);\\n case i.AnnotationType.HIGHLIGHT:\\n return new HighlightAnnotationElement(t);\\n case i.AnnotationType.UNDERLINE:\\n return new UnderlineAnnotationElement(t);\\n case i.AnnotationType.SQUIGGLY:\\n return new SquigglyAnnotationElement(t);\\n case i.AnnotationType.STRIKEOUT:\\n return new StrikeOutAnnotationElement(t);\\n case i.AnnotationType.STAMP:\\n return new StampAnnotationElement(t);\\n case i.AnnotationType.FILEATTACHMENT:\\n return new FileAttachmentAnnotationElement(t);\\n default:\\n return new AnnotationElement(t);\\n }\\n }\\n }\\n var _De = /*#__PURE__*/new WeakMap();\\n class AnnotationElement {\\n constructor(t) {\\n _classPrivateFieldInitSpec(this, _De, {\\n writable: true,\\n value: !1\\n });\\n let {\\n isRenderable: e = !1,\\n ignoreBorder: n = !1,\\n createQuadrilaterals: i = !1\\n } = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};\\n this.isRenderable = e;\\n this.data = t.data;\\n this.layer = t.layer;\\n this.linkService = t.linkService;\\n this.downloadManager = t.downloadManager;\\n this.imageResourcesPath = t.imageResourcesPath;\\n this.renderForms = t.renderForms;\\n this.svgFactory = t.svgFactory;\\n this.annotationStorage = t.annotationStorage;\\n this.enableScripting = t.enableScripting;\\n this.hasJSActions = t.hasJSActions;\\n this._fieldObjects = t.fieldObjects;\\n this.parent = t.parent;\\n e && (this.container = this._createContainer(n));\\n i && this._createQuadrilaterals();\\n }\\n _createContainer(t) {\\n const {\\n data: e,\\n parent: {\\n page: n,\\n viewport: r\\n }\\n } = this,\\n s = document.createElement(\\"section\\");\\n s.setAttribute(\\"data-annotation-id\\", e.id);\\n s.style.zIndex = this.parent.zIndex++;\\n this.data.popupRef && s.setAttribute(\\"aria-haspopup\\", \\"dialog\\");\\n e.noRotate && s.classList.add(\\"norotate\\");\\n const {\\n pageWidth: a,\\n pageHeight: o,\\n pageX: l,\\n pageY: c\\n } = r.rawDims;\\n if (!e.rect || this instanceof PopupAnnotationElement) {\\n const {\\n rotation: t\\n } = e;\\n e.hasOwnCanvas || 0 === t || this.setRotation(t, s);\\n return s;\\n }\\n const {\\n width: h,\\n height: d\\n } = getRectDims(e.rect),\\n u = i.Util.normalizeRect([e.rect[0], n.view[3] - e.rect[1] + n.view[1], e.rect[2], n.view[3] - e.rect[3] + n.view[1]]);\\n if (!t && e.borderStyle.width > 0) {\\n s.style.borderWidth = \\"\\".concat(e.borderStyle.width, \\"px\\");\\n const t = e.borderStyle.horizontalCornerRadius,\\n n = e.borderStyle.verticalCornerRadius;\\n if (t > 0 || n > 0) {\\n const e = \\"calc(\\".concat(t, \\"px * var(--scale-factor)) / calc(\\").concat(n, \\"px * var(--scale-factor))\\");\\n s.style.borderRadius = e;\\n } else if (this instanceof RadioButtonWidgetAnnotationElement) {\\n const t = \\"calc(\\".concat(h, \\"px * var(--scale-factor)) / calc(\\").concat(d, \\"px * var(--scale-factor))\\");\\n s.style.borderRadius = t;\\n }\\n switch (e.borderStyle.style) {\\n case i.AnnotationBorderStyleType.SOLID:\\n s.style.borderStyle = \\"solid\\";\\n break;\\n case i.AnnotationBorderStyleType.DASHED:\\n s.style.borderStyle = \\"dashed\\";\\n break;\\n case i.AnnotationBorderStyleType.BEVELED:\\n (0, i.warn)(\\"Unimplemented border style: beveled\\");\\n break;\\n case i.AnnotationBorderStyleType.INSET:\\n (0, i.warn)(\\"Unimplemented border style: inset\\");\\n break;\\n case i.AnnotationBorderStyleType.UNDERLINE:\\n s.style.borderBottomStyle = \\"solid\\";\\n }\\n const r = e.borderColor || null;\\n if (r) {\\n _classPrivateFieldSet(this, _De, !0);\\n s.style.borderColor = i.Util.makeHexColor(0 | r[0], 0 | r[1], 0 | r[2]);\\n } else s.style.borderWidth = 0;\\n }\\n s.style.left = 100 * (u[0] - l) / a + \\"%\\";\\n s.style.top = 100 * (u[1] - c) / o + \\"%\\";\\n const {\\n rotation: p\\n } = e;\\n if (e.hasOwnCanvas || 0 === p) {\\n s.style.width = 100 * h / a + \\"%\\";\\n s.style.height = 100 * d / o + \\"%\\";\\n } else this.setRotation(p, s);\\n return s;\\n }\\n setRotation(t) {\\n let e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : this.container;\\n if (!this.data.rect) return;\\n const {\\n pageWidth: n,\\n pageHeight: i\\n } = this.parent.viewport.rawDims,\\n {\\n width: r,\\n height: s\\n } = getRectDims(this.data.rect);\\n let a, o;\\n if (t % 180 == 0) {\\n a = 100 * r / n;\\n o = 100 * s / i;\\n } else {\\n a = 100 * s / n;\\n o = 100 * r / i;\\n }\\n e.style.width = \\"\\".concat(a, \\"%\\");\\n e.style.height = \\"\\".concat(o, \\"%\\");\\n e.setAttribute(\\"data-main-rotation\\", (360 - t) % 360);\\n }\\n get _commonActions() {\\n const setColor = (t, e, n) => {\\n const i = n.detail[t];\\n n.target.style[e] = a.ColorConverters[\\"\\".concat(i[0], \\"_HTML\\")](i.slice(1));\\n };\\n return (0, i.shadow)(this, \\"_commonActions\\", {\\n display: t => {\\n const e = t.detail.display % 2 == 1;\\n this.container.style.visibility = e ? \\"hidden\\" : \\"visible\\";\\n this.annotationStorage.setValue(this.data.id, {\\n hidden: e,\\n print: 0 === t.detail.display || 3 === t.detail.display\\n });\\n },\\n print: t => {\\n this.annotationStorage.setValue(this.data.id, {\\n print: t.detail.print\\n });\\n },\\n hidden: t => {\\n this.container.style.visibility = t.detail.hidden ? \\"hidden\\" : \\"visible\\";\\n this.annotationStorage.setValue(this.data.id, {\\n hidden: t.detail.hidden\\n });\\n },\\n focus: t => {\\n setTimeout(() => t.target.focus({\\n preventScroll: !1\\n }), 0);\\n },\\n userName: t => {\\n t.target.title = t.detail.userName;\\n },\\n readonly: t => {\\n t.detail.readonly ? t.target.setAttribute(\\"readonly\\", \\"\\") : t.target.removeAttribute(\\"readonly\\");\\n },\\n required: t => {\\n this._setRequired(t.target, t.detail.required);\\n },\\n bgColor: t => {\\n setColor(\\"bgColor\\", \\"backgroundColor\\", t);\\n },\\n fillColor: t => {\\n setColor(\\"fillColor\\", \\"backgroundColor\\", t);\\n },\\n fgColor: t => {\\n setColor(\\"fgColor\\", \\"color\\", t);\\n },\\n textColor: t => {\\n setColor(\\"textColor\\", \\"color\\", t);\\n },\\n borderColor: t => {\\n setColor(\\"borderColor\\", \\"borderColor\\", t);\\n },\\n strokeColor: t => {\\n setColor(\\"strokeColor\\", \\"borderColor\\", t);\\n },\\n rotation: t => {\\n const e = t.detail.rotation;\\n this.setRotation(e);\\n this.annotationStorage.setValue(this.data.id, {\\n rotation: e\\n });\\n }\\n });\\n }\\n _dispatchEventFromSandbox(t, e) {\\n const n = this._commonActions;\\n for (const i of Object.keys(e.detail)) {\\n const r = t[i] || n[i];\\n r === null || r === void 0 ? void 0 : r(e);\\n }\\n }\\n _setDefaultPropertiesFromJS(t) {\\n if (!this.enableScripting) return;\\n const e = this.annotationStorage.getRawValue(this.data.id);\\n if (!e) return;\\n const n = this._commonActions;\\n for (const [i, r] of Object.entries(e)) {\\n const s = n[i];\\n if (s) {\\n s({\\n detail: {\\n [i]: r\\n },\\n target: t\\n });\\n delete e[i];\\n }\\n }\\n }\\n _createQuadrilaterals() {\\n if (!this.container) return;\\n const {\\n quadPoints: t\\n } = this.data;\\n if (!t) return;\\n const [e, n, i, r] = this.data.rect;\\n if (1 === t.length) {\\n const [, {\\n x: s,\\n y: a\\n }, {\\n x: o,\\n y: l\\n }] = t[0];\\n if (i === s && r === a && e === o && n === l) return;\\n }\\n const {\\n style: s\\n } = this.container;\\n let a;\\n if (_classPrivateFieldGet(this, _De)) {\\n const {\\n borderColor: t,\\n borderWidth: e\\n } = s;\\n s.borderWidth = 0;\\n a = [\\"url('data:image/svg+xml;utf8,\\", '', \\"\\")];\\n this.container.classList.add(\\"hasBorder\\");\\n }\\n const o = i - e,\\n l = r - n,\\n {\\n svgFactory: c\\n } = this,\\n h = c.createElement(\\"svg\\");\\n h.classList.add(\\"quadrilateralsContainer\\");\\n h.setAttribute(\\"width\\", 0);\\n h.setAttribute(\\"height\\", 0);\\n const d = c.createElement(\\"defs\\");\\n h.append(d);\\n const u = c.createElement(\\"clipPath\\"),\\n p = \\"clippath_\\".concat(this.data.id);\\n u.setAttribute(\\"id\\", p);\\n u.setAttribute(\\"clipPathUnits\\", \\"objectBoundingBox\\");\\n d.append(u);\\n for (const [, {\\n x: n,\\n y: i\\n }, {\\n x: s,\\n y: h\\n }] of t) {\\n var _a3;\\n const t = c.createElement(\\"rect\\"),\\n d = (s - e) / o,\\n p = (r - i) / l,\\n f = (n - s) / o,\\n g = (i - h) / l;\\n t.setAttribute(\\"x\\", d);\\n t.setAttribute(\\"y\\", p);\\n t.setAttribute(\\"width\\", f);\\n t.setAttribute(\\"height\\", g);\\n u.append(t);\\n (_a3 = a) === null || _a3 === void 0 ? void 0 : _a3.push(\\"\\"));\\n }\\n if (_classPrivateFieldGet(this, _De)) {\\n a.push(\\"')\\");\\n s.backgroundImage = a.join(\\"\\");\\n }\\n this.container.append(h);\\n this.container.style.clipPath = \\"url(#\\".concat(p, \\")\\");\\n }\\n _createPopup() {\\n const {\\n container: t,\\n data: e\\n } = this;\\n t.setAttribute(\\"aria-haspopup\\", \\"dialog\\");\\n const n = new PopupAnnotationElement({\\n data: {\\n color: e.color,\\n titleObj: e.titleObj,\\n modificationDate: e.modificationDate,\\n contentsObj: e.contentsObj,\\n richText: e.richText,\\n parentRect: e.rect,\\n borderStyle: 0,\\n id: \\"popup_\\".concat(e.id),\\n rotation: e.rotation\\n },\\n parent: this.parent,\\n elements: [this]\\n });\\n this.parent.div.append(n.render());\\n }\\n render() {\\n (0, i.unreachable)(\\"Abstract method \`AnnotationElement.render\` called\\");\\n }\\n _getElementsByName(t) {\\n let e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null;\\n const n = [];\\n if (this._fieldObjects) {\\n const r = this._fieldObjects[t];\\n if (r) for (const {\\n page: t,\\n id: s,\\n exportValues: a\\n } of r) {\\n if (-1 === t) continue;\\n if (s === e) continue;\\n const r = \\"string\\" == typeof a ? a : null,\\n o = document.querySelector(\\"[data-element-id=\\\\\\"\\".concat(s, \\"\\\\\\"]\\"));\\n !o || h.has(o) ? n.push({\\n id: s,\\n exportValue: r,\\n domElement: o\\n }) : (0, i.warn)(\\"_getElementsByName - element not allowed: \\".concat(s));\\n }\\n return n;\\n }\\n for (const i of document.getElementsByName(t)) {\\n const {\\n exportValue: t\\n } = i,\\n r = i.getAttribute(\\"data-element-id\\");\\n r !== e && h.has(i) && n.push({\\n id: r,\\n exportValue: t,\\n domElement: i\\n });\\n }\\n return n;\\n }\\n show() {\\n var _this$popup;\\n this.container && (this.container.hidden = !1);\\n (_this$popup = this.popup) === null || _this$popup === void 0 ? void 0 : _this$popup.maybeShow();\\n }\\n hide() {\\n var _this$popup2;\\n this.container && (this.container.hidden = !0);\\n (_this$popup2 = this.popup) === null || _this$popup2 === void 0 ? void 0 : _this$popup2.forceHide();\\n }\\n getElementsToTriggerPopup() {\\n return this.container;\\n }\\n addHighlightArea() {\\n const t = this.getElementsToTriggerPopup();\\n if (Array.isArray(t)) for (const e of t) e.classList.add(\\"highlightArea\\");else t.classList.add(\\"highlightArea\\");\\n }\\n _editOnDoubleClick() {\\n const {\\n annotationEditorType: t,\\n data: {\\n id: e\\n }\\n } = this;\\n this.container.addEventListener(\\"dblclick\\", () => {\\n var _this$linkService$eve;\\n (_this$linkService$eve = this.linkService.eventBus) === null || _this$linkService$eve === void 0 ? void 0 : _this$linkService$eve.dispatch(\\"switchannotationeditormode\\", {\\n source: this,\\n mode: t,\\n editId: e\\n });\\n });\\n }\\n }\\n var _Le = /*#__PURE__*/new WeakSet();\\n var _Oe = /*#__PURE__*/new WeakSet();\\n class LinkAnnotationElement extends AnnotationElement {\\n constructor(_t15) {\\n let _e13 = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null;\\n super(_t15, {\\n isRenderable: !0,\\n ignoreBorder: !!(_e13 !== null && _e13 !== void 0 && _e13.ignoreBorder),\\n createQuadrilaterals: !0\\n });\\n _classPrivateMethodInitSpec(this, _Oe);\\n _classPrivateMethodInitSpec(this, _Le);\\n this.isTooltipOnly = _t15.data.isTooltipOnly;\\n }\\n render() {\\n const {\\n data: t,\\n linkService: e\\n } = this,\\n n = document.createElement(\\"a\\");\\n n.setAttribute(\\"data-element-id\\", t.id);\\n let i = !1;\\n if (t.url) {\\n e.addLinkAttributes(n, t.url, t.newWindow);\\n i = !0;\\n } else if (t.action) {\\n this._bindNamedAction(n, t.action);\\n i = !0;\\n } else if (t.attachment) {\\n this._bindAttachment(n, t.attachment);\\n i = !0;\\n } else if (t.setOCGState) {\\n _classPrivateMethodGet(this, _Oe, _Oe2).call(this, n, t.setOCGState);\\n i = !0;\\n } else if (t.dest) {\\n this._bindLink(n, t.dest);\\n i = !0;\\n } else {\\n if (t.actions && (t.actions.Action || t.actions[\\"Mouse Up\\"] || t.actions[\\"Mouse Down\\"]) && this.enableScripting && this.hasJSActions) {\\n this._bindJSAction(n, t);\\n i = !0;\\n }\\n if (t.resetForm) {\\n this._bindResetFormAction(n, t.resetForm);\\n i = !0;\\n } else if (this.isTooltipOnly && !i) {\\n this._bindLink(n, \\"\\");\\n i = !0;\\n }\\n }\\n this.container.classList.add(\\"linkAnnotation\\");\\n i && this.container.append(n);\\n return this.container;\\n }\\n _bindLink(t, e) {\\n t.href = this.linkService.getDestinationHash(e);\\n t.onclick = () => {\\n e && this.linkService.goToDestination(e);\\n return !1;\\n };\\n (e || \\"\\" === e) && _classPrivateMethodGet(this, _Le, _Le2).call(this);\\n }\\n _bindNamedAction(t, e) {\\n t.href = this.linkService.getAnchorUrl(\\"\\");\\n t.onclick = () => {\\n this.linkService.executeNamedAction(e);\\n return !1;\\n };\\n _classPrivateMethodGet(this, _Le, _Le2).call(this);\\n }\\n _bindAttachment(t, e) {\\n t.href = this.linkService.getAnchorUrl(\\"\\");\\n t.onclick = () => {\\n var _this$downloadManager;\\n (_this$downloadManager = this.downloadManager) === null || _this$downloadManager === void 0 ? void 0 : _this$downloadManager.openOrDownloadData(this.container, e.content, e.filename);\\n return !1;\\n };\\n _classPrivateMethodGet(this, _Le, _Le2).call(this);\\n }\\n _bindJSAction(t, e) {\\n t.href = this.linkService.getAnchorUrl(\\"\\");\\n const n = new Map([[\\"Action\\", \\"onclick\\"], [\\"Mouse Up\\", \\"onmouseup\\"], [\\"Mouse Down\\", \\"onmousedown\\"]]);\\n for (const i of Object.keys(e.actions)) {\\n const r = n.get(i);\\n r && (t[r] = () => {\\n var _this$linkService$eve2;\\n (_this$linkService$eve2 = this.linkService.eventBus) === null || _this$linkService$eve2 === void 0 ? void 0 : _this$linkService$eve2.dispatch(\\"dispatcheventinsandbox\\", {\\n source: this,\\n detail: {\\n id: e.id,\\n name: i\\n }\\n });\\n return !1;\\n });\\n }\\n t.onclick || (t.onclick = () => !1);\\n _classPrivateMethodGet(this, _Le, _Le2).call(this);\\n }\\n _bindResetFormAction(t, e) {\\n const n = t.onclick;\\n n || (t.href = this.linkService.getAnchorUrl(\\"\\"));\\n _classPrivateMethodGet(this, _Le, _Le2).call(this);\\n if (this._fieldObjects) t.onclick = () => {\\n var _this$linkService$eve3;\\n n === null || n === void 0 ? void 0 : n();\\n const {\\n fields: t,\\n refs: r,\\n include: s\\n } = e,\\n a = [];\\n if (0 !== t.length || 0 !== r.length) {\\n const e = new Set(r);\\n for (const n of t) {\\n const t = this._fieldObjects[n] || [];\\n for (const {\\n id: n\\n } of t) e.add(n);\\n }\\n for (const t of Object.values(this._fieldObjects)) for (const n of t) e.has(n.id) === s && a.push(n);\\n } else for (const t of Object.values(this._fieldObjects)) a.push(...t);\\n const o = this.annotationStorage,\\n l = [];\\n for (const t of a) {\\n const {\\n id: e\\n } = t;\\n l.push(e);\\n switch (t.type) {\\n case \\"text\\":\\n {\\n const n = t.defaultValue || \\"\\";\\n o.setValue(e, {\\n value: n\\n });\\n break;\\n }\\n case \\"checkbox\\":\\n case \\"radiobutton\\":\\n {\\n const n = t.defaultValue === t.exportValues;\\n o.setValue(e, {\\n value: n\\n });\\n break;\\n }\\n case \\"combobox\\":\\n case \\"listbox\\":\\n {\\n const n = t.defaultValue || \\"\\";\\n o.setValue(e, {\\n value: n\\n });\\n break;\\n }\\n default:\\n continue;\\n }\\n const n = document.querySelector(\\"[data-element-id=\\\\\\"\\".concat(e, \\"\\\\\\"]\\"));\\n n && (h.has(n) ? n.dispatchEvent(new Event(\\"resetform\\")) : (0, i.warn)(\\"_bindResetFormAction - element not allowed: \\".concat(e)));\\n }\\n this.enableScripting && ((_this$linkService$eve3 = this.linkService.eventBus) === null || _this$linkService$eve3 === void 0 ? void 0 : _this$linkService$eve3.dispatch(\\"dispatcheventinsandbox\\", {\\n source: this,\\n detail: {\\n id: \\"app\\",\\n ids: l,\\n name: \\"ResetForm\\"\\n }\\n }));\\n return !1;\\n };else {\\n (0, i.warn)('_bindResetFormAction - \\"resetForm\\" action not supported, ensure that the \`fieldObjects\` parameter is provided.');\\n n || (t.onclick = () => !1);\\n }\\n }\\n }\\n function _Le2() {\\n this.container.setAttribute(\\"data-internal-link\\", \\"\\");\\n }\\n function _Oe2(t, e) {\\n t.href = this.linkService.getAnchorUrl(\\"\\");\\n t.onclick = () => {\\n this.linkService.executeSetOCGState(e);\\n return !1;\\n };\\n _classPrivateMethodGet(this, _Le, _Le2).call(this);\\n }\\n class TextAnnotationElement extends AnnotationElement {\\n constructor(t) {\\n var _t$data$titleObj, _t$data$contentsObj, _t$data$richText;\\n super(t, {\\n isRenderable: !!(t.data.popupRef || (_t$data$titleObj = t.data.titleObj) !== null && _t$data$titleObj !== void 0 && _t$data$titleObj.str || (_t$data$contentsObj = t.data.contentsObj) !== null && _t$data$contentsObj !== void 0 && _t$data$contentsObj.str || (_t$data$richText = t.data.richText) !== null && _t$data$richText !== void 0 && _t$data$richText.str)\\n });\\n }\\n render() {\\n this.container.classList.add(\\"textAnnotation\\");\\n const t = document.createElement(\\"img\\");\\n t.src = this.imageResourcesPath + \\"annotation-\\" + this.data.name.toLowerCase() + \\".svg\\";\\n t.alt = \\"[{{type}} Annotation]\\";\\n t.dataset.l10nId = \\"text_annotation_type\\";\\n t.dataset.l10nArgs = JSON.stringify({\\n type: this.data.name\\n });\\n this.data.popupRef || this._createPopup();\\n this.container.append(t);\\n return this.container;\\n }\\n }\\n class WidgetAnnotationElement extends AnnotationElement {\\n render() {\\n this.data.alternativeText && (this.container.title = this.data.alternativeText);\\n return this.container;\\n }\\n showElementAndHideCanvas(t) {\\n if (this.data.hasOwnCanvas) {\\n var _t$previousSibling;\\n \\"CANVAS\\" === ((_t$previousSibling = t.previousSibling) === null || _t$previousSibling === void 0 ? void 0 : _t$previousSibling.nodeName) && (t.previousSibling.hidden = !0);\\n t.hidden = !1;\\n }\\n }\\n _getKeyModifier(t) {\\n const {\\n isWin: e,\\n isMac: n\\n } = i.FeatureTest.platform;\\n return e && t.ctrlKey || n && t.metaKey;\\n }\\n _setEventListener(t, e, n, i) {\\n e.includes(\\"mouse\\") ? t.addEventListener(e, t => {\\n var _this$linkService$eve4;\\n (_this$linkService$eve4 = this.linkService.eventBus) === null || _this$linkService$eve4 === void 0 ? void 0 : _this$linkService$eve4.dispatch(\\"dispatcheventinsandbox\\", {\\n source: this,\\n detail: {\\n id: this.data.id,\\n name: n,\\n value: i(t),\\n shift: t.shiftKey,\\n modifier: this._getKeyModifier(t)\\n }\\n });\\n }) : t.addEventListener(e, t => {\\n var _this$linkService$eve5;\\n (_this$linkService$eve5 = this.linkService.eventBus) === null || _this$linkService$eve5 === void 0 ? void 0 : _this$linkService$eve5.dispatch(\\"dispatcheventinsandbox\\", {\\n source: this,\\n detail: {\\n id: this.data.id,\\n name: n,\\n value: i(t)\\n }\\n });\\n });\\n }\\n _setEventListeners(t, e, n) {\\n for (const [i, r] of e) {\\n var _this$data$actions;\\n (\\"Action\\" === r || ((_this$data$actions = this.data.actions) === null || _this$data$actions === void 0 ? void 0 : _this$data$actions[r])) && this._setEventListener(t, i, r, n);\\n }\\n }\\n _setBackgroundColor(t) {\\n const e = this.data.backgroundColor || null;\\n t.style.backgroundColor = null === e ? \\"transparent\\" : i.Util.makeHexColor(e[0], e[1], e[2]);\\n }\\n _setTextStyle(t) {\\n const e = [\\"left\\", \\"center\\", \\"right\\"],\\n {\\n fontColor: n\\n } = this.data.defaultAppearanceData,\\n r = this.data.defaultAppearanceData.fontSize || 9,\\n s = t.style;\\n let a;\\n const roundToOneDecimal = t => Math.round(10 * t) / 10;\\n if (this.data.multiLine) {\\n const t = Math.abs(this.data.rect[3] - this.data.rect[1] - 2),\\n e = t / (Math.round(t / (i.LINE_FACTOR * r)) || 1);\\n a = Math.min(r, roundToOneDecimal(e / i.LINE_FACTOR));\\n } else {\\n const t = Math.abs(this.data.rect[3] - this.data.rect[1] - 2);\\n a = Math.min(r, roundToOneDecimal(t / i.LINE_FACTOR));\\n }\\n s.fontSize = \\"calc(\\".concat(a, \\"px * var(--scale-factor))\\");\\n s.color = i.Util.makeHexColor(n[0], n[1], n[2]);\\n null !== this.data.textAlignment && (s.textAlign = e[this.data.textAlignment]);\\n }\\n _setRequired(t, e) {\\n e ? t.setAttribute(\\"required\\", !0) : t.removeAttribute(\\"required\\");\\n t.setAttribute(\\"aria-required\\", e);\\n }\\n }\\n class TextWidgetAnnotationElement extends WidgetAnnotationElement {\\n constructor(t) {\\n super(t, {\\n isRenderable: t.renderForms || !t.data.hasAppearance && !!t.data.fieldValue\\n });\\n }\\n setPropertyOnSiblings(t, e, n, i) {\\n const r = this.annotationStorage;\\n for (const s of this._getElementsByName(t.name, t.id)) {\\n s.domElement && (s.domElement[e] = n);\\n r.setValue(s.id, {\\n [i]: n\\n });\\n }\\n }\\n render() {\\n const t = this.annotationStorage,\\n e = this.data.id;\\n this.container.classList.add(\\"textWidgetAnnotation\\");\\n let n = null;\\n if (this.renderForms) {\\n var _this$data$textConten;\\n const i = t.getValue(e, {\\n value: this.data.fieldValue\\n });\\n let r = i.value || \\"\\";\\n const s = t.getValue(e, {\\n charLimit: this.data.maxLen\\n }).charLimit;\\n s && r.length > s && (r = r.slice(0, s));\\n let a = i.formattedValue || ((_this$data$textConten = this.data.textContent) === null || _this$data$textConten === void 0 ? void 0 : _this$data$textConten.join(\\"\\\\n\\")) || null;\\n a && this.data.comb && (a = a.replaceAll(/\\\\s+/g, \\"\\"));\\n const o = {\\n userValue: r,\\n formattedValue: a,\\n lastCommittedValue: null,\\n commitKey: 1\\n };\\n if (this.data.multiLine) {\\n var _a4;\\n n = document.createElement(\\"textarea\\");\\n n.textContent = (_a4 = a) !== null && _a4 !== void 0 ? _a4 : r;\\n this.data.doNotScroll && (n.style.overflowY = \\"hidden\\");\\n } else {\\n var _a5;\\n n = document.createElement(\\"input\\");\\n n.type = \\"text\\";\\n n.setAttribute(\\"value\\", (_a5 = a) !== null && _a5 !== void 0 ? _a5 : r);\\n this.data.doNotScroll && (n.style.overflowX = \\"hidden\\");\\n }\\n this.data.hasOwnCanvas && (n.hidden = !0);\\n h.add(n);\\n n.setAttribute(\\"data-element-id\\", e);\\n n.disabled = this.data.readOnly;\\n n.name = this.data.baseFieldName || this.data.fieldName;\\n n.tabIndex = c;\\n this._setRequired(n, this.data.required);\\n s && (n.maxLength = s);\\n n.addEventListener(\\"input\\", i => {\\n t.setValue(e, {\\n value: i.target.value\\n });\\n this.setPropertyOnSiblings(n, \\"value\\", i.target.value, \\"value\\");\\n o.formattedValue = null;\\n });\\n n.addEventListener(\\"resetform\\", t => {\\n var _this$data$defaultFie;\\n const e = (_this$data$defaultFie = this.data.defaultFieldValue) !== null && _this$data$defaultFie !== void 0 ? _this$data$defaultFie : \\"\\";\\n n.value = o.userValue = e;\\n o.formattedValue = null;\\n });\\n let blurListener = t => {\\n const {\\n formattedValue: e\\n } = o;\\n null != e && (t.target.value = e);\\n t.target.scrollLeft = 0;\\n };\\n if (this.enableScripting && this.hasJSActions) {\\n var _this$data$actions2;\\n n.addEventListener(\\"focus\\", t => {\\n const {\\n target: e\\n } = t;\\n o.userValue && (e.value = o.userValue);\\n o.lastCommittedValue = e.value;\\n o.commitKey = 1;\\n });\\n n.addEventListener(\\"updatefromsandbox\\", n => {\\n this.showElementAndHideCanvas(n.target);\\n const i = {\\n value(n) {\\n var _n$detail$value;\\n o.userValue = (_n$detail$value = n.detail.value) !== null && _n$detail$value !== void 0 ? _n$detail$value : \\"\\";\\n t.setValue(e, {\\n value: o.userValue.toString()\\n });\\n n.target.value = o.userValue;\\n },\\n formattedValue(n) {\\n const {\\n formattedValue: i\\n } = n.detail;\\n o.formattedValue = i;\\n null != i && n.target !== document.activeElement && (n.target.value = i);\\n t.setValue(e, {\\n formattedValue: i\\n });\\n },\\n selRange(t) {\\n t.target.setSelectionRange(...t.detail.selRange);\\n },\\n charLimit: n => {\\n const {\\n charLimit: i\\n } = n.detail,\\n {\\n target: r\\n } = n;\\n if (0 === i) {\\n r.removeAttribute(\\"maxLength\\");\\n return;\\n }\\n r.setAttribute(\\"maxLength\\", i);\\n let s = o.userValue;\\n if (s && !(s.length <= i)) {\\n var _this$linkService$eve6;\\n s = s.slice(0, i);\\n r.value = o.userValue = s;\\n t.setValue(e, {\\n value: s\\n });\\n (_this$linkService$eve6 = this.linkService.eventBus) === null || _this$linkService$eve6 === void 0 ? void 0 : _this$linkService$eve6.dispatch(\\"dispatcheventinsandbox\\", {\\n source: this,\\n detail: {\\n id: e,\\n name: \\"Keystroke\\",\\n value: s,\\n willCommit: !0,\\n commitKey: 1,\\n selStart: r.selectionStart,\\n selEnd: r.selectionEnd\\n }\\n });\\n }\\n }\\n };\\n this._dispatchEventFromSandbox(i, n);\\n });\\n n.addEventListener(\\"keydown\\", t => {\\n o.commitKey = 1;\\n let n = -1;\\n \\"Escape\\" === t.key ? n = 0 : \\"Enter\\" !== t.key || this.data.multiLine ? \\"Tab\\" === t.key && (o.commitKey = 3) : n = 2;\\n if (-1 === n) return;\\n const {\\n value: i\\n } = t.target;\\n if (o.lastCommittedValue !== i) {\\n var _this$linkService$eve7;\\n o.lastCommittedValue = i;\\n o.userValue = i;\\n (_this$linkService$eve7 = this.linkService.eventBus) === null || _this$linkService$eve7 === void 0 ? void 0 : _this$linkService$eve7.dispatch(\\"dispatcheventinsandbox\\", {\\n source: this,\\n detail: {\\n id: e,\\n name: \\"Keystroke\\",\\n value: i,\\n willCommit: !0,\\n commitKey: n,\\n selStart: t.target.selectionStart,\\n selEnd: t.target.selectionEnd\\n }\\n });\\n }\\n });\\n const i = blurListener;\\n blurListener = null;\\n n.addEventListener(\\"blur\\", t => {\\n var _this$linkService$eve8;\\n if (!t.relatedTarget) return;\\n const {\\n value: n\\n } = t.target;\\n o.userValue = n;\\n o.lastCommittedValue !== n && ((_this$linkService$eve8 = this.linkService.eventBus) === null || _this$linkService$eve8 === void 0 ? void 0 : _this$linkService$eve8.dispatch(\\"dispatcheventinsandbox\\", {\\n source: this,\\n detail: {\\n id: e,\\n name: \\"Keystroke\\",\\n value: n,\\n willCommit: !0,\\n commitKey: o.commitKey,\\n selStart: t.target.selectionStart,\\n selEnd: t.target.selectionEnd\\n }\\n }));\\n i(t);\\n });\\n ((_this$data$actions2 = this.data.actions) === null || _this$data$actions2 === void 0 ? void 0 : _this$data$actions2.Keystroke) && n.addEventListener(\\"beforeinput\\", t => {\\n var _this$linkService$eve9;\\n o.lastCommittedValue = null;\\n const {\\n data: n,\\n target: i\\n } = t,\\n {\\n value: r,\\n selectionStart: s,\\n selectionEnd: a\\n } = i;\\n let l = s,\\n c = a;\\n switch (t.inputType) {\\n case \\"deleteWordBackward\\":\\n {\\n const t = r.substring(0, s).match(/\\\\w*[^\\\\w]*$/);\\n t && (l -= t[0].length);\\n break;\\n }\\n case \\"deleteWordForward\\":\\n {\\n const t = r.substring(s).match(/^[^\\\\w]*\\\\w*/);\\n t && (c += t[0].length);\\n break;\\n }\\n case \\"deleteContentBackward\\":\\n s === a && (l -= 1);\\n break;\\n case \\"deleteContentForward\\":\\n s === a && (c += 1);\\n }\\n t.preventDefault();\\n (_this$linkService$eve9 = this.linkService.eventBus) === null || _this$linkService$eve9 === void 0 ? void 0 : _this$linkService$eve9.dispatch(\\"dispatcheventinsandbox\\", {\\n source: this,\\n detail: {\\n id: e,\\n name: \\"Keystroke\\",\\n value: r,\\n change: n || \\"\\",\\n willCommit: !1,\\n selStart: l,\\n selEnd: c\\n }\\n });\\n });\\n this._setEventListeners(n, [[\\"focus\\", \\"Focus\\"], [\\"blur\\", \\"Blur\\"], [\\"mousedown\\", \\"Mouse Down\\"], [\\"mouseenter\\", \\"Mouse Enter\\"], [\\"mouseleave\\", \\"Mouse Exit\\"], [\\"mouseup\\", \\"Mouse Up\\"]], t => t.target.value);\\n }\\n blurListener && n.addEventListener(\\"blur\\", blurListener);\\n if (this.data.comb) {\\n const t = (this.data.rect[2] - this.data.rect[0]) / s;\\n n.classList.add(\\"comb\\");\\n n.style.letterSpacing = \\"calc(\\".concat(t, \\"px * var(--scale-factor) - 1ch)\\");\\n }\\n } else {\\n n = document.createElement(\\"div\\");\\n n.textContent = this.data.fieldValue;\\n n.style.verticalAlign = \\"middle\\";\\n n.style.display = \\"table-cell\\";\\n }\\n this._setTextStyle(n);\\n this._setBackgroundColor(n);\\n this._setDefaultPropertiesFromJS(n);\\n this.container.append(n);\\n return this.container;\\n }\\n }\\n class SignatureWidgetAnnotationElement extends WidgetAnnotationElement {\\n constructor(t) {\\n super(t, {\\n isRenderable: !!t.data.hasOwnCanvas\\n });\\n }\\n }\\n class CheckboxWidgetAnnotationElement extends WidgetAnnotationElement {\\n constructor(t) {\\n super(t, {\\n isRenderable: t.renderForms\\n });\\n }\\n render() {\\n const t = this.annotationStorage,\\n e = this.data,\\n n = e.id;\\n let i = t.getValue(n, {\\n value: e.exportValue === e.fieldValue\\n }).value;\\n if (\\"string\\" == typeof i) {\\n i = \\"Off\\" !== i;\\n t.setValue(n, {\\n value: i\\n });\\n }\\n this.container.classList.add(\\"buttonWidgetAnnotation\\", \\"checkBox\\");\\n const r = document.createElement(\\"input\\");\\n h.add(r);\\n r.setAttribute(\\"data-element-id\\", n);\\n r.disabled = e.readOnly;\\n this._setRequired(r, this.data.required);\\n r.type = \\"checkbox\\";\\n r.name = e.baseFieldName || e.fieldName;\\n i && r.setAttribute(\\"checked\\", !0);\\n r.setAttribute(\\"exportValue\\", e.exportValue);\\n r.tabIndex = c;\\n r.addEventListener(\\"change\\", i => {\\n const {\\n name: r,\\n checked: s\\n } = i.target;\\n for (const i of this._getElementsByName(r, n)) {\\n const n = s && i.exportValue === e.exportValue;\\n i.domElement && (i.domElement.checked = n);\\n t.setValue(i.id, {\\n value: n\\n });\\n }\\n t.setValue(n, {\\n value: s\\n });\\n });\\n r.addEventListener(\\"resetform\\", t => {\\n const n = e.defaultFieldValue || \\"Off\\";\\n t.target.checked = n === e.exportValue;\\n });\\n if (this.enableScripting && this.hasJSActions) {\\n r.addEventListener(\\"updatefromsandbox\\", e => {\\n const i = {\\n value(e) {\\n e.target.checked = \\"Off\\" !== e.detail.value;\\n t.setValue(n, {\\n value: e.target.checked\\n });\\n }\\n };\\n this._dispatchEventFromSandbox(i, e);\\n });\\n this._setEventListeners(r, [[\\"change\\", \\"Validate\\"], [\\"change\\", \\"Action\\"], [\\"focus\\", \\"Focus\\"], [\\"blur\\", \\"Blur\\"], [\\"mousedown\\", \\"Mouse Down\\"], [\\"mouseenter\\", \\"Mouse Enter\\"], [\\"mouseleave\\", \\"Mouse Exit\\"], [\\"mouseup\\", \\"Mouse Up\\"]], t => t.target.checked);\\n }\\n this._setBackgroundColor(r);\\n this._setDefaultPropertiesFromJS(r);\\n this.container.append(r);\\n return this.container;\\n }\\n }\\n class RadioButtonWidgetAnnotationElement extends WidgetAnnotationElement {\\n constructor(t) {\\n super(t, {\\n isRenderable: t.renderForms\\n });\\n }\\n render() {\\n this.container.classList.add(\\"buttonWidgetAnnotation\\", \\"radioButton\\");\\n const t = this.annotationStorage,\\n e = this.data,\\n n = e.id;\\n let i = t.getValue(n, {\\n value: e.fieldValue === e.buttonValue\\n }).value;\\n if (\\"string\\" == typeof i) {\\n i = i !== e.buttonValue;\\n t.setValue(n, {\\n value: i\\n });\\n }\\n const r = document.createElement(\\"input\\");\\n h.add(r);\\n r.setAttribute(\\"data-element-id\\", n);\\n r.disabled = e.readOnly;\\n this._setRequired(r, this.data.required);\\n r.type = \\"radio\\";\\n r.name = e.baseFieldName || e.fieldName;\\n i && r.setAttribute(\\"checked\\", !0);\\n r.tabIndex = c;\\n r.addEventListener(\\"change\\", e => {\\n const {\\n name: i,\\n checked: r\\n } = e.target;\\n for (const e of this._getElementsByName(i, n)) t.setValue(e.id, {\\n value: !1\\n });\\n t.setValue(n, {\\n value: r\\n });\\n });\\n r.addEventListener(\\"resetform\\", t => {\\n const n = e.defaultFieldValue;\\n t.target.checked = null != n && n === e.buttonValue;\\n });\\n if (this.enableScripting && this.hasJSActions) {\\n const i = e.buttonValue;\\n r.addEventListener(\\"updatefromsandbox\\", e => {\\n const r = {\\n value: e => {\\n const r = i === e.detail.value;\\n for (const i of this._getElementsByName(e.target.name)) {\\n const e = r && i.id === n;\\n i.domElement && (i.domElement.checked = e);\\n t.setValue(i.id, {\\n value: e\\n });\\n }\\n }\\n };\\n this._dispatchEventFromSandbox(r, e);\\n });\\n this._setEventListeners(r, [[\\"change\\", \\"Validate\\"], [\\"change\\", \\"Action\\"], [\\"focus\\", \\"Focus\\"], [\\"blur\\", \\"Blur\\"], [\\"mousedown\\", \\"Mouse Down\\"], [\\"mouseenter\\", \\"Mouse Enter\\"], [\\"mouseleave\\", \\"Mouse Exit\\"], [\\"mouseup\\", \\"Mouse Up\\"]], t => t.target.checked);\\n }\\n this._setBackgroundColor(r);\\n this._setDefaultPropertiesFromJS(r);\\n this.container.append(r);\\n return this.container;\\n }\\n }\\n class PushButtonWidgetAnnotationElement extends LinkAnnotationElement {\\n constructor(t) {\\n super(t, {\\n ignoreBorder: t.data.hasAppearance\\n });\\n }\\n render() {\\n const t = super.render();\\n t.classList.add(\\"buttonWidgetAnnotation\\", \\"pushButton\\");\\n this.data.alternativeText && (t.title = this.data.alternativeText);\\n const e = t.lastChild;\\n if (this.enableScripting && this.hasJSActions && e) {\\n this._setDefaultPropertiesFromJS(e);\\n e.addEventListener(\\"updatefromsandbox\\", t => {\\n this._dispatchEventFromSandbox({}, t);\\n });\\n }\\n return t;\\n }\\n }\\n class ChoiceWidgetAnnotationElement extends WidgetAnnotationElement {\\n constructor(t) {\\n super(t, {\\n isRenderable: t.renderForms\\n });\\n }\\n render() {\\n this.container.classList.add(\\"choiceWidgetAnnotation\\");\\n const t = this.annotationStorage,\\n e = this.data.id,\\n n = t.getValue(e, {\\n value: this.data.fieldValue\\n }),\\n i = document.createElement(\\"select\\");\\n h.add(i);\\n i.setAttribute(\\"data-element-id\\", e);\\n i.disabled = this.data.readOnly;\\n this._setRequired(i, this.data.required);\\n i.name = this.data.baseFieldName || this.data.fieldName;\\n i.tabIndex = c;\\n let r = this.data.combo && this.data.options.length > 0;\\n if (!this.data.combo) {\\n i.size = this.data.options.length;\\n this.data.multiSelect && (i.multiple = !0);\\n }\\n i.addEventListener(\\"resetform\\", t => {\\n const e = this.data.defaultFieldValue;\\n for (const t of i.options) t.selected = t.value === e;\\n });\\n for (const t of this.data.options) {\\n const e = document.createElement(\\"option\\");\\n e.textContent = t.displayValue;\\n e.value = t.exportValue;\\n if (n.value.includes(t.exportValue)) {\\n e.setAttribute(\\"selected\\", !0);\\n r = !1;\\n }\\n i.append(e);\\n }\\n let s = null;\\n if (r) {\\n const t = document.createElement(\\"option\\");\\n t.value = \\" \\";\\n t.setAttribute(\\"hidden\\", !0);\\n t.setAttribute(\\"selected\\", !0);\\n i.prepend(t);\\n s = () => {\\n t.remove();\\n i.removeEventListener(\\"input\\", s);\\n s = null;\\n };\\n i.addEventListener(\\"input\\", s);\\n }\\n const getValue = t => {\\n const e = t ? \\"value\\" : \\"textContent\\",\\n {\\n options: n,\\n multiple: r\\n } = i;\\n return r ? Array.prototype.filter.call(n, t => t.selected).map(t => t[e]) : -1 === n.selectedIndex ? null : n[n.selectedIndex][e];\\n };\\n let a = getValue(!1);\\n const getItems = t => {\\n const e = t.target.options;\\n return Array.prototype.map.call(e, t => ({\\n displayValue: t.textContent,\\n exportValue: t.value\\n }));\\n };\\n if (this.enableScripting && this.hasJSActions) {\\n i.addEventListener(\\"updatefromsandbox\\", n => {\\n const r = {\\n value(n) {\\n var _s5;\\n (_s5 = s) === null || _s5 === void 0 ? void 0 : _s5();\\n const r = n.detail.value,\\n o = new Set(Array.isArray(r) ? r : [r]);\\n for (const t of i.options) t.selected = o.has(t.value);\\n t.setValue(e, {\\n value: getValue(!0)\\n });\\n a = getValue(!1);\\n },\\n multipleSelection(t) {\\n i.multiple = !0;\\n },\\n remove(n) {\\n const r = i.options,\\n s = n.detail.remove;\\n r[s].selected = !1;\\n i.remove(s);\\n if (r.length > 0) {\\n -1 === Array.prototype.findIndex.call(r, t => t.selected) && (r[0].selected = !0);\\n }\\n t.setValue(e, {\\n value: getValue(!0),\\n items: getItems(n)\\n });\\n a = getValue(!1);\\n },\\n clear(n) {\\n for (; 0 !== i.length;) i.remove(0);\\n t.setValue(e, {\\n value: null,\\n items: []\\n });\\n a = getValue(!1);\\n },\\n insert(n) {\\n const {\\n index: r,\\n displayValue: s,\\n exportValue: o\\n } = n.detail.insert,\\n l = i.children[r],\\n c = document.createElement(\\"option\\");\\n c.textContent = s;\\n c.value = o;\\n l ? l.before(c) : i.append(c);\\n t.setValue(e, {\\n value: getValue(!0),\\n items: getItems(n)\\n });\\n a = getValue(!1);\\n },\\n items(n) {\\n const {\\n items: r\\n } = n.detail;\\n for (; 0 !== i.length;) i.remove(0);\\n for (const t of r) {\\n const {\\n displayValue: e,\\n exportValue: n\\n } = t,\\n r = document.createElement(\\"option\\");\\n r.textContent = e;\\n r.value = n;\\n i.append(r);\\n }\\n i.options.length > 0 && (i.options[0].selected = !0);\\n t.setValue(e, {\\n value: getValue(!0),\\n items: getItems(n)\\n });\\n a = getValue(!1);\\n },\\n indices(n) {\\n const i = new Set(n.detail.indices);\\n for (const t of n.target.options) t.selected = i.has(t.index);\\n t.setValue(e, {\\n value: getValue(!0)\\n });\\n a = getValue(!1);\\n },\\n editable(t) {\\n t.target.disabled = !t.detail.editable;\\n }\\n };\\n this._dispatchEventFromSandbox(r, n);\\n });\\n i.addEventListener(\\"input\\", n => {\\n var _this$linkService$eve10;\\n const i = getValue(!0);\\n t.setValue(e, {\\n value: i\\n });\\n n.preventDefault();\\n (_this$linkService$eve10 = this.linkService.eventBus) === null || _this$linkService$eve10 === void 0 ? void 0 : _this$linkService$eve10.dispatch(\\"dispatcheventinsandbox\\", {\\n source: this,\\n detail: {\\n id: e,\\n name: \\"Keystroke\\",\\n value: a,\\n changeEx: i,\\n willCommit: !1,\\n commitKey: 1,\\n keyDown: !1\\n }\\n });\\n });\\n this._setEventListeners(i, [[\\"focus\\", \\"Focus\\"], [\\"blur\\", \\"Blur\\"], [\\"mousedown\\", \\"Mouse Down\\"], [\\"mouseenter\\", \\"Mouse Enter\\"], [\\"mouseleave\\", \\"Mouse Exit\\"], [\\"mouseup\\", \\"Mouse Up\\"], [\\"input\\", \\"Action\\"], [\\"input\\", \\"Validate\\"]], t => t.target.value);\\n } else i.addEventListener(\\"input\\", function (n) {\\n t.setValue(e, {\\n value: getValue(!0)\\n });\\n });\\n this.data.combo && this._setTextStyle(i);\\n this._setBackgroundColor(i);\\n this._setDefaultPropertiesFromJS(i);\\n this.container.append(i);\\n return this.container;\\n }\\n }\\n class PopupAnnotationElement extends AnnotationElement {\\n constructor(t) {\\n var _e$titleObj, _e$contentsObj, _e$richText;\\n const {\\n data: e,\\n elements: n\\n } = t;\\n super(t, {\\n isRenderable: !!((_e$titleObj = e.titleObj) !== null && _e$titleObj !== void 0 && _e$titleObj.str || (_e$contentsObj = e.contentsObj) !== null && _e$contentsObj !== void 0 && _e$contentsObj.str || (_e$richText = e.richText) !== null && _e$richText !== void 0 && _e$richText.str)\\n });\\n this.elements = n;\\n }\\n render() {\\n this.container.classList.add(\\"popupAnnotation\\");\\n const t = new PopupElement({\\n container: this.container,\\n color: this.data.color,\\n titleObj: this.data.titleObj,\\n modificationDate: this.data.modificationDate,\\n contentsObj: this.data.contentsObj,\\n richText: this.data.richText,\\n rect: this.data.rect,\\n parentRect: this.data.parentRect || null,\\n parent: this.parent,\\n elements: this.elements,\\n open: this.data.open\\n }),\\n e = [];\\n for (const n of this.elements) {\\n n.popup = t;\\n e.push(n.data.id);\\n n.addHighlightArea();\\n }\\n this.container.setAttribute(\\"aria-controls\\", e.join(\\",\\"));\\n return this.container;\\n }\\n }\\n var _Ne = /*#__PURE__*/new WeakMap();\\n var _Be = /*#__PURE__*/new WeakMap();\\n var _Ue = /*#__PURE__*/new WeakMap();\\n var _He = /*#__PURE__*/new WeakMap();\\n var _Se2 = /*#__PURE__*/new WeakMap();\\n var _bt2 = /*#__PURE__*/new WeakMap();\\n var _We = /*#__PURE__*/new WeakMap();\\n var _Ge = /*#__PURE__*/new WeakMap();\\n var _Ve = /*#__PURE__*/new WeakMap();\\n var _$e = /*#__PURE__*/new WeakMap();\\n var _Xe = /*#__PURE__*/new WeakMap();\\n var _Ke = /*#__PURE__*/new WeakMap();\\n var _Ye = /*#__PURE__*/new WeakMap();\\n var _Je = /*#__PURE__*/new WeakMap();\\n var _Qe = /*#__PURE__*/new WeakMap();\\n var _Ze = /*#__PURE__*/new WeakMap();\\n var _qe = /*#__PURE__*/new WeakSet();\\n var _ze = /*#__PURE__*/new WeakSet();\\n var _je = /*#__PURE__*/new WeakSet();\\n class PopupElement {\\n constructor(t) {\\n _classPrivateMethodInitSpec(this, _je);\\n _classPrivateMethodInitSpec(this, _ze);\\n _classPrivateMethodInitSpec(this, _qe);\\n _classPrivateFieldInitSpec(this, _Ne, {\\n writable: true,\\n value: null\\n });\\n _classPrivateFieldInitSpec(this, _Be, {\\n writable: true,\\n value: _classPrivateMethodGet(this, _je, _je2).bind(this)\\n });\\n _classPrivateFieldInitSpec(this, _Ue, {\\n writable: true,\\n value: _classPrivateMethodGet(this, _ze, _ze2).bind(this)\\n });\\n _classPrivateFieldInitSpec(this, _He, {\\n writable: true,\\n value: _classPrivateMethodGet(this, _qe, _qe2).bind(this)\\n });\\n _classPrivateFieldInitSpec(this, _Se2, {\\n writable: true,\\n value: null\\n });\\n _classPrivateFieldInitSpec(this, _bt2, {\\n writable: true,\\n value: null\\n });\\n _classPrivateFieldInitSpec(this, _We, {\\n writable: true,\\n value: null\\n });\\n _classPrivateFieldInitSpec(this, _Ge, {\\n writable: true,\\n value: null\\n });\\n _classPrivateFieldInitSpec(this, _Ve, {\\n writable: true,\\n value: null\\n });\\n _classPrivateFieldInitSpec(this, _$e, {\\n writable: true,\\n value: null\\n });\\n _classPrivateFieldInitSpec(this, _Xe, {\\n writable: true,\\n value: !1\\n });\\n _classPrivateFieldInitSpec(this, _Ke, {\\n writable: true,\\n value: null\\n });\\n _classPrivateFieldInitSpec(this, _Ye, {\\n writable: true,\\n value: null\\n });\\n _classPrivateFieldInitSpec(this, _Je, {\\n writable: true,\\n value: null\\n });\\n _classPrivateFieldInitSpec(this, _Qe, {\\n writable: true,\\n value: null\\n });\\n _classPrivateFieldInitSpec(this, _Ze, {\\n writable: true,\\n value: !1\\n });\\n let {\\n container: e,\\n color: n,\\n elements: i,\\n titleObj: s,\\n modificationDate: a,\\n contentsObj: o,\\n richText: l,\\n parent: c,\\n rect: h,\\n parentRect: d,\\n open: u\\n } = t;\\n _classPrivateFieldSet(this, _bt2, e);\\n _classPrivateFieldSet(this, _Qe, s);\\n _classPrivateFieldSet(this, _We, o);\\n _classPrivateFieldSet(this, _Je, l);\\n _classPrivateFieldSet(this, _Ve, c);\\n _classPrivateFieldSet(this, _Se2, n);\\n _classPrivateFieldSet(this, _Ye, h);\\n _classPrivateFieldSet(this, _$e, d);\\n _classPrivateFieldSet(this, _Ge, i);\\n const p = r.PDFDateString.toDateObject(a);\\n p && _classPrivateFieldSet(this, _Ne, c.l10n.get(\\"annotation_date_string\\", {\\n date: p.toLocaleDateString(),\\n time: p.toLocaleTimeString()\\n }));\\n this.trigger = i.flatMap(t => t.getElementsToTriggerPopup());\\n for (const t of this.trigger) {\\n t.addEventListener(\\"click\\", _classPrivateFieldGet(this, _He));\\n t.addEventListener(\\"mouseenter\\", _classPrivateFieldGet(this, _Ue));\\n t.addEventListener(\\"mouseleave\\", _classPrivateFieldGet(this, _Be));\\n }\\n _classPrivateFieldGet(this, _bt2).hidden = !0;\\n u && _classPrivateMethodGet(this, _qe, _qe2).call(this);\\n }\\n render() {\\n if (_classPrivateFieldGet(this, _Ke)) return;\\n const {\\n page: {\\n view: t\\n },\\n viewport: {\\n rawDims: {\\n pageWidth: e,\\n pageHeight: n,\\n pageX: r,\\n pageY: s\\n }\\n }\\n } = _classPrivateFieldGet(this, _Ve),\\n a = _classPrivateFieldSet(this, _Ke, document.createElement(\\"div\\"));\\n a.className = \\"popup\\";\\n if (_classPrivateFieldGet(this, _Se2)) {\\n const t = a.style.outlineColor = i.Util.makeHexColor(..._classPrivateFieldGet(this, _Se2));\\n if (CSS.supports(\\"background-color\\", \\"color-mix(in srgb, red 30%, white)\\")) a.style.backgroundColor = \\"color-mix(in srgb, \\".concat(t, \\" 30%, white)\\");else {\\n const t = .7;\\n a.style.backgroundColor = i.Util.makeHexColor(..._classPrivateFieldGet(this, _Se2).map(e => Math.floor(t * (255 - e) + e)));\\n }\\n }\\n const o = document.createElement(\\"span\\");\\n o.className = \\"header\\";\\n const c = document.createElement(\\"h1\\");\\n o.append(c);\\n ({\\n dir: c.dir,\\n str: c.textContent\\n } = _classPrivateFieldGet(this, _Qe));\\n a.append(o);\\n if (_classPrivateFieldGet(this, _Ne)) {\\n const t = document.createElement(\\"span\\");\\n t.classList.add(\\"popupDate\\");\\n _classPrivateFieldGet(this, _Ne).then(e => {\\n t.textContent = e;\\n });\\n o.append(t);\\n }\\n const h = _classPrivateFieldGet(this, _We),\\n d = _classPrivateFieldGet(this, _Je);\\n if (!(d !== null && d !== void 0 && d.str) || h !== null && h !== void 0 && h.str && h.str !== d.str) {\\n const t = this._formatContents(h);\\n a.append(t);\\n } else {\\n l.XfaLayer.render({\\n xfaHtml: d.html,\\n intent: \\"richText\\",\\n div: a\\n });\\n a.lastChild.classList.add(\\"richText\\", \\"popupContent\\");\\n }\\n let u = !!_classPrivateFieldGet(this, _$e),\\n p = u ? _classPrivateFieldGet(this, _$e) : _classPrivateFieldGet(this, _Ye);\\n for (const t of _classPrivateFieldGet(this, _Ge)) if (!p || null !== i.Util.intersect(t.data.rect, p)) {\\n p = t.data.rect;\\n u = !0;\\n break;\\n }\\n const f = i.Util.normalizeRect([p[0], t[3] - p[1] + t[1], p[2], t[3] - p[3] + t[1]]),\\n g = u ? p[2] - p[0] + 5 : 0,\\n m = f[0] + g,\\n b = f[1],\\n {\\n style: v\\n } = _classPrivateFieldGet(this, _bt2);\\n v.left = 100 * (m - r) / e + \\"%\\";\\n v.top = 100 * (b - s) / n + \\"%\\";\\n _classPrivateFieldGet(this, _bt2).append(a);\\n }\\n _formatContents(t) {\\n let {\\n str: e,\\n dir: n\\n } = t;\\n const i = document.createElement(\\"p\\");\\n i.classList.add(\\"popupContent\\");\\n i.dir = n;\\n const r = e.split(/(?:\\\\r\\\\n?|\\\\n)/);\\n for (let t = 0, e = r.length; t < e; ++t) {\\n const n = r[t];\\n i.append(document.createTextNode(n));\\n t < e - 1 && i.append(document.createElement(\\"br\\"));\\n }\\n return i;\\n }\\n forceHide() {\\n _classPrivateFieldSet(this, _Ze, this.isVisible);\\n _classPrivateFieldGet(this, _Ze) && (_classPrivateFieldGet(this, _bt2).hidden = !0);\\n }\\n maybeShow() {\\n if (_classPrivateFieldGet(this, _Ze)) {\\n _classPrivateFieldSet(this, _Ze, !1);\\n _classPrivateFieldGet(this, _bt2).hidden = !1;\\n }\\n }\\n get isVisible() {\\n return !1 === _classPrivateFieldGet(this, _bt2).hidden;\\n }\\n }\\n function _qe2() {\\n _classPrivateFieldSet(this, _Xe, !_classPrivateFieldGet(this, _Xe));\\n if (_classPrivateFieldGet(this, _Xe)) {\\n _classPrivateMethodGet(this, _ze, _ze2).call(this);\\n _classPrivateFieldGet(this, _bt2).addEventListener(\\"click\\", _classPrivateFieldGet(this, _He));\\n } else {\\n _classPrivateMethodGet(this, _je, _je2).call(this);\\n _classPrivateFieldGet(this, _bt2).removeEventListener(\\"click\\", _classPrivateFieldGet(this, _He));\\n }\\n }\\n function _ze2() {\\n _classPrivateFieldGet(this, _Ke) || this.render();\\n if (this.isVisible) _classPrivateFieldGet(this, _Xe) && _classPrivateFieldGet(this, _bt2).classList.add(\\"focused\\");else {\\n _classPrivateFieldGet(this, _bt2).hidden = !1;\\n _classPrivateFieldGet(this, _bt2).style.zIndex = parseInt(_classPrivateFieldGet(this, _bt2).style.zIndex) + 1e3;\\n }\\n }\\n function _je2() {\\n _classPrivateFieldGet(this, _bt2).classList.remove(\\"focused\\");\\n if (!_classPrivateFieldGet(this, _Xe) && this.isVisible) {\\n _classPrivateFieldGet(this, _bt2).hidden = !0;\\n _classPrivateFieldGet(this, _bt2).style.zIndex = parseInt(_classPrivateFieldGet(this, _bt2).style.zIndex) - 1e3;\\n }\\n }\\n class FreeTextAnnotationElement extends AnnotationElement {\\n constructor(t) {\\n var _t$data$titleObj2, _t$data$contentsObj2, _t$data$richText2;\\n super(t, {\\n isRenderable: !!(t.data.popupRef || (_t$data$titleObj2 = t.data.titleObj) !== null && _t$data$titleObj2 !== void 0 && _t$data$titleObj2.str || (_t$data$contentsObj2 = t.data.contentsObj) !== null && _t$data$contentsObj2 !== void 0 && _t$data$contentsObj2.str || (_t$data$richText2 = t.data.richText) !== null && _t$data$richText2 !== void 0 && _t$data$richText2.str),\\n ignoreBorder: !0\\n });\\n this.textContent = t.data.textContent;\\n this.textPosition = t.data.textPosition;\\n this.annotationEditorType = i.AnnotationEditorType.FREETEXT;\\n }\\n render() {\\n this.container.classList.add(\\"freeTextAnnotation\\");\\n if (this.textContent) {\\n const t = document.createElement(\\"div\\");\\n t.classList.add(\\"annotationTextContent\\");\\n t.setAttribute(\\"role\\", \\"comment\\");\\n for (const e of this.textContent) {\\n const n = document.createElement(\\"span\\");\\n n.textContent = e;\\n t.append(n);\\n }\\n this.container.append(t);\\n }\\n this.data.popupRef || this._createPopup();\\n this._editOnDoubleClick();\\n return this.container;\\n }\\n }\\n e.FreeTextAnnotationElement = FreeTextAnnotationElement;\\n var _tn = /*#__PURE__*/new WeakMap();\\n class LineAnnotationElement extends AnnotationElement {\\n constructor(t) {\\n var _t$data$titleObj3, _t$data$contentsObj3, _t$data$richText3;\\n super(t, {\\n isRenderable: !!(t.data.popupRef || (_t$data$titleObj3 = t.data.titleObj) !== null && _t$data$titleObj3 !== void 0 && _t$data$titleObj3.str || (_t$data$contentsObj3 = t.data.contentsObj) !== null && _t$data$contentsObj3 !== void 0 && _t$data$contentsObj3.str || (_t$data$richText3 = t.data.richText) !== null && _t$data$richText3 !== void 0 && _t$data$richText3.str),\\n ignoreBorder: !0\\n });\\n _classPrivateFieldInitSpec(this, _tn, {\\n writable: true,\\n value: null\\n });\\n }\\n render() {\\n this.container.classList.add(\\"lineAnnotation\\");\\n const t = this.data,\\n {\\n width: e,\\n height: n\\n } = getRectDims(t.rect),\\n i = this.svgFactory.create(e, n, !0),\\n r = _classPrivateFieldSet(this, _tn, this.svgFactory.createElement(\\"svg:line\\"));\\n r.setAttribute(\\"x1\\", t.rect[2] - t.lineCoordinates[0]);\\n r.setAttribute(\\"y1\\", t.rect[3] - t.lineCoordinates[1]);\\n r.setAttribute(\\"x2\\", t.rect[2] - t.lineCoordinates[2]);\\n r.setAttribute(\\"y2\\", t.rect[3] - t.lineCoordinates[3]);\\n r.setAttribute(\\"stroke-width\\", t.borderStyle.width || 1);\\n r.setAttribute(\\"stroke\\", \\"transparent\\");\\n r.setAttribute(\\"fill\\", \\"transparent\\");\\n i.append(r);\\n this.container.append(i);\\n t.popupRef || this._createPopup();\\n return this.container;\\n }\\n getElementsToTriggerPopup() {\\n return _classPrivateFieldGet(this, _tn);\\n }\\n addHighlightArea() {\\n this.container.classList.add(\\"highlightArea\\");\\n }\\n }\\n var _en = /*#__PURE__*/new WeakMap();\\n class SquareAnnotationElement extends AnnotationElement {\\n constructor(t) {\\n var _t$data$titleObj4, _t$data$contentsObj4, _t$data$richText4;\\n super(t, {\\n isRenderable: !!(t.data.popupRef || (_t$data$titleObj4 = t.data.titleObj) !== null && _t$data$titleObj4 !== void 0 && _t$data$titleObj4.str || (_t$data$contentsObj4 = t.data.contentsObj) !== null && _t$data$contentsObj4 !== void 0 && _t$data$contentsObj4.str || (_t$data$richText4 = t.data.richText) !== null && _t$data$richText4 !== void 0 && _t$data$richText4.str),\\n ignoreBorder: !0\\n });\\n _classPrivateFieldInitSpec(this, _en, {\\n writable: true,\\n value: null\\n });\\n }\\n render() {\\n this.container.classList.add(\\"squareAnnotation\\");\\n const t = this.data,\\n {\\n width: e,\\n height: n\\n } = getRectDims(t.rect),\\n i = this.svgFactory.create(e, n, !0),\\n r = t.borderStyle.width,\\n s = _classPrivateFieldSet(this, _en, this.svgFactory.createElement(\\"svg:rect\\"));\\n s.setAttribute(\\"x\\", r / 2);\\n s.setAttribute(\\"y\\", r / 2);\\n s.setAttribute(\\"width\\", e - r);\\n s.setAttribute(\\"height\\", n - r);\\n s.setAttribute(\\"stroke-width\\", r || 1);\\n s.setAttribute(\\"stroke\\", \\"transparent\\");\\n s.setAttribute(\\"fill\\", \\"transparent\\");\\n i.append(s);\\n this.container.append(i);\\n t.popupRef || this._createPopup();\\n return this.container;\\n }\\n getElementsToTriggerPopup() {\\n return _classPrivateFieldGet(this, _en);\\n }\\n addHighlightArea() {\\n this.container.classList.add(\\"highlightArea\\");\\n }\\n }\\n var _nn = /*#__PURE__*/new WeakMap();\\n class CircleAnnotationElement extends AnnotationElement {\\n constructor(t) {\\n var _t$data$titleObj5, _t$data$contentsObj5, _t$data$richText5;\\n super(t, {\\n isRenderable: !!(t.data.popupRef || (_t$data$titleObj5 = t.data.titleObj) !== null && _t$data$titleObj5 !== void 0 && _t$data$titleObj5.str || (_t$data$contentsObj5 = t.data.contentsObj) !== null && _t$data$contentsObj5 !== void 0 && _t$data$contentsObj5.str || (_t$data$richText5 = t.data.richText) !== null && _t$data$richText5 !== void 0 && _t$data$richText5.str),\\n ignoreBorder: !0\\n });\\n _classPrivateFieldInitSpec(this, _nn, {\\n writable: true,\\n value: null\\n });\\n }\\n render() {\\n this.container.classList.add(\\"circleAnnotation\\");\\n const t = this.data,\\n {\\n width: e,\\n height: n\\n } = getRectDims(t.rect),\\n i = this.svgFactory.create(e, n, !0),\\n r = t.borderStyle.width,\\n s = _classPrivateFieldSet(this, _nn, this.svgFactory.createElement(\\"svg:ellipse\\"));\\n s.setAttribute(\\"cx\\", e / 2);\\n s.setAttribute(\\"cy\\", n / 2);\\n s.setAttribute(\\"rx\\", e / 2 - r / 2);\\n s.setAttribute(\\"ry\\", n / 2 - r / 2);\\n s.setAttribute(\\"stroke-width\\", r || 1);\\n s.setAttribute(\\"stroke\\", \\"transparent\\");\\n s.setAttribute(\\"fill\\", \\"transparent\\");\\n i.append(s);\\n this.container.append(i);\\n t.popupRef || this._createPopup();\\n return this.container;\\n }\\n getElementsToTriggerPopup() {\\n return _classPrivateFieldGet(this, _nn);\\n }\\n addHighlightArea() {\\n this.container.classList.add(\\"highlightArea\\");\\n }\\n }\\n var _in = /*#__PURE__*/new WeakMap();\\n class PolylineAnnotationElement extends AnnotationElement {\\n constructor(t) {\\n var _t$data$titleObj6, _t$data$contentsObj6, _t$data$richText6;\\n super(t, {\\n isRenderable: !!(t.data.popupRef || (_t$data$titleObj6 = t.data.titleObj) !== null && _t$data$titleObj6 !== void 0 && _t$data$titleObj6.str || (_t$data$contentsObj6 = t.data.contentsObj) !== null && _t$data$contentsObj6 !== void 0 && _t$data$contentsObj6.str || (_t$data$richText6 = t.data.richText) !== null && _t$data$richText6 !== void 0 && _t$data$richText6.str),\\n ignoreBorder: !0\\n });\\n _classPrivateFieldInitSpec(this, _in, {\\n writable: true,\\n value: null\\n });\\n this.containerClassName = \\"polylineAnnotation\\";\\n this.svgElementName = \\"svg:polyline\\";\\n }\\n render() {\\n this.container.classList.add(this.containerClassName);\\n const t = this.data,\\n {\\n width: e,\\n height: n\\n } = getRectDims(t.rect),\\n i = this.svgFactory.create(e, n, !0);\\n let r = [];\\n for (const e of t.vertices) {\\n const n = e.x - t.rect[0],\\n i = t.rect[3] - e.y;\\n r.push(n + \\",\\" + i);\\n }\\n r = r.join(\\" \\");\\n const s = _classPrivateFieldSet(this, _in, this.svgFactory.createElement(this.svgElementName));\\n s.setAttribute(\\"points\\", r);\\n s.setAttribute(\\"stroke-width\\", t.borderStyle.width || 1);\\n s.setAttribute(\\"stroke\\", \\"transparent\\");\\n s.setAttribute(\\"fill\\", \\"transparent\\");\\n i.append(s);\\n this.container.append(i);\\n t.popupRef || this._createPopup(s, t);\\n return this.container;\\n }\\n getElementsToTriggerPopup() {\\n return _classPrivateFieldGet(this, _in);\\n }\\n addHighlightArea() {\\n this.container.classList.add(\\"highlightArea\\");\\n }\\n }\\n class PolygonAnnotationElement extends PolylineAnnotationElement {\\n constructor(t) {\\n super(t);\\n this.containerClassName = \\"polygonAnnotation\\";\\n this.svgElementName = \\"svg:polygon\\";\\n }\\n }\\n class CaretAnnotationElement extends AnnotationElement {\\n constructor(t) {\\n var _t$data$titleObj7, _t$data$contentsObj7, _t$data$richText7;\\n super(t, {\\n isRenderable: !!(t.data.popupRef || (_t$data$titleObj7 = t.data.titleObj) !== null && _t$data$titleObj7 !== void 0 && _t$data$titleObj7.str || (_t$data$contentsObj7 = t.data.contentsObj) !== null && _t$data$contentsObj7 !== void 0 && _t$data$contentsObj7.str || (_t$data$richText7 = t.data.richText) !== null && _t$data$richText7 !== void 0 && _t$data$richText7.str),\\n ignoreBorder: !0\\n });\\n }\\n render() {\\n this.container.classList.add(\\"caretAnnotation\\");\\n this.data.popupRef || this._createPopup();\\n return this.container;\\n }\\n }\\n var _rn = /*#__PURE__*/new WeakMap();\\n class InkAnnotationElement extends AnnotationElement {\\n constructor(t) {\\n var _t$data$titleObj8, _t$data$contentsObj8, _t$data$richText8;\\n super(t, {\\n isRenderable: !!(t.data.popupRef || (_t$data$titleObj8 = t.data.titleObj) !== null && _t$data$titleObj8 !== void 0 && _t$data$titleObj8.str || (_t$data$contentsObj8 = t.data.contentsObj) !== null && _t$data$contentsObj8 !== void 0 && _t$data$contentsObj8.str || (_t$data$richText8 = t.data.richText) !== null && _t$data$richText8 !== void 0 && _t$data$richText8.str),\\n ignoreBorder: !0\\n });\\n _classPrivateFieldInitSpec(this, _rn, {\\n writable: true,\\n value: []\\n });\\n this.containerClassName = \\"inkAnnotation\\";\\n this.svgElementName = \\"svg:polyline\\";\\n this.annotationEditorType = i.AnnotationEditorType.INK;\\n }\\n render() {\\n this.container.classList.add(this.containerClassName);\\n const t = this.data,\\n {\\n width: e,\\n height: n\\n } = getRectDims(t.rect),\\n i = this.svgFactory.create(e, n, !0);\\n for (const e of t.inkLists) {\\n let n = [];\\n for (const i of e) {\\n const e = i.x - t.rect[0],\\n r = t.rect[3] - i.y;\\n n.push(\\"\\".concat(e, \\",\\").concat(r));\\n }\\n n = n.join(\\" \\");\\n const r = this.svgFactory.createElement(this.svgElementName);\\n _classPrivateFieldGet(this, _rn).push(r);\\n r.setAttribute(\\"points\\", n);\\n r.setAttribute(\\"stroke-width\\", t.borderStyle.width || 1);\\n r.setAttribute(\\"stroke\\", \\"transparent\\");\\n r.setAttribute(\\"fill\\", \\"transparent\\");\\n t.popupRef || this._createPopup(r, t);\\n i.append(r);\\n }\\n this.container.append(i);\\n return this.container;\\n }\\n getElementsToTriggerPopup() {\\n return _classPrivateFieldGet(this, _rn);\\n }\\n addHighlightArea() {\\n this.container.classList.add(\\"highlightArea\\");\\n }\\n }\\n e.InkAnnotationElement = InkAnnotationElement;\\n class HighlightAnnotationElement extends AnnotationElement {\\n constructor(t) {\\n var _t$data$titleObj9, _t$data$contentsObj9, _t$data$richText9;\\n super(t, {\\n isRenderable: !!(t.data.popupRef || (_t$data$titleObj9 = t.data.titleObj) !== null && _t$data$titleObj9 !== void 0 && _t$data$titleObj9.str || (_t$data$contentsObj9 = t.data.contentsObj) !== null && _t$data$contentsObj9 !== void 0 && _t$data$contentsObj9.str || (_t$data$richText9 = t.data.richText) !== null && _t$data$richText9 !== void 0 && _t$data$richText9.str),\\n ignoreBorder: !0,\\n createQuadrilaterals: !0\\n });\\n }\\n render() {\\n this.data.popupRef || this._createPopup();\\n this.container.classList.add(\\"highlightAnnotation\\");\\n return this.container;\\n }\\n }\\n class UnderlineAnnotationElement extends AnnotationElement {\\n constructor(t) {\\n var _t$data$titleObj10, _t$data$contentsObj10, _t$data$richText10;\\n super(t, {\\n isRenderable: !!(t.data.popupRef || (_t$data$titleObj10 = t.data.titleObj) !== null && _t$data$titleObj10 !== void 0 && _t$data$titleObj10.str || (_t$data$contentsObj10 = t.data.contentsObj) !== null && _t$data$contentsObj10 !== void 0 && _t$data$contentsObj10.str || (_t$data$richText10 = t.data.richText) !== null && _t$data$richText10 !== void 0 && _t$data$richText10.str),\\n ignoreBorder: !0,\\n createQuadrilaterals: !0\\n });\\n }\\n render() {\\n this.data.popupRef || this._createPopup();\\n this.container.classList.add(\\"underlineAnnotation\\");\\n return this.container;\\n }\\n }\\n class SquigglyAnnotationElement extends AnnotationElement {\\n constructor(t) {\\n var _t$data$titleObj11, _t$data$contentsObj11, _t$data$richText11;\\n super(t, {\\n isRenderable: !!(t.data.popupRef || (_t$data$titleObj11 = t.data.titleObj) !== null && _t$data$titleObj11 !== void 0 && _t$data$titleObj11.str || (_t$data$contentsObj11 = t.data.contentsObj) !== null && _t$data$contentsObj11 !== void 0 && _t$data$contentsObj11.str || (_t$data$richText11 = t.data.richText) !== null && _t$data$richText11 !== void 0 && _t$data$richText11.str),\\n ignoreBorder: !0,\\n createQuadrilaterals: !0\\n });\\n }\\n render() {\\n this.data.popupRef || this._createPopup();\\n this.container.classList.add(\\"squigglyAnnotation\\");\\n return this.container;\\n }\\n }\\n class StrikeOutAnnotationElement extends AnnotationElement {\\n constructor(t) {\\n var _t$data$titleObj12, _t$data$contentsObj12, _t$data$richText12;\\n super(t, {\\n isRenderable: !!(t.data.popupRef || (_t$data$titleObj12 = t.data.titleObj) !== null && _t$data$titleObj12 !== void 0 && _t$data$titleObj12.str || (_t$data$contentsObj12 = t.data.contentsObj) !== null && _t$data$contentsObj12 !== void 0 && _t$data$contentsObj12.str || (_t$data$richText12 = t.data.richText) !== null && _t$data$richText12 !== void 0 && _t$data$richText12.str),\\n ignoreBorder: !0,\\n createQuadrilaterals: !0\\n });\\n }\\n render() {\\n this.data.popupRef || this._createPopup();\\n this.container.classList.add(\\"strikeoutAnnotation\\");\\n return this.container;\\n }\\n }\\n class StampAnnotationElement extends AnnotationElement {\\n constructor(t) {\\n var _t$data$titleObj13, _t$data$contentsObj13, _t$data$richText13;\\n super(t, {\\n isRenderable: !!(t.data.popupRef || (_t$data$titleObj13 = t.data.titleObj) !== null && _t$data$titleObj13 !== void 0 && _t$data$titleObj13.str || (_t$data$contentsObj13 = t.data.contentsObj) !== null && _t$data$contentsObj13 !== void 0 && _t$data$contentsObj13.str || (_t$data$richText13 = t.data.richText) !== null && _t$data$richText13 !== void 0 && _t$data$richText13.str),\\n ignoreBorder: !0\\n });\\n }\\n render() {\\n this.container.classList.add(\\"stampAnnotation\\");\\n this.data.popupRef || this._createPopup();\\n return this.container;\\n }\\n }\\n e.StampAnnotationElement = StampAnnotationElement;\\n var _sn = /*#__PURE__*/new WeakMap();\\n class FileAttachmentAnnotationElement extends AnnotationElement {\\n constructor(t) {\\n var _this$linkService$eve11;\\n super(t, {\\n isRenderable: !0\\n });\\n _classPrivateFieldInitSpec(this, _sn, {\\n writable: true,\\n value: null\\n });\\n const {\\n filename: e,\\n content: n\\n } = this.data.file;\\n this.filename = (0, r.getFilenameFromUrl)(e, !0);\\n this.content = n;\\n (_this$linkService$eve11 = this.linkService.eventBus) === null || _this$linkService$eve11 === void 0 ? void 0 : _this$linkService$eve11.dispatch(\\"fileattachmentannotation\\", {\\n source: this,\\n filename: e,\\n content: n\\n });\\n }\\n render() {\\n var _this$data$titleObj, _this$data$contentsOb;\\n this.container.classList.add(\\"fileAttachmentAnnotation\\");\\n let t;\\n if (this.data.hasAppearance) t = document.createElement(\\"div\\");else {\\n t = document.createElement(\\"img\\");\\n t.src = \\"\\".concat(this.imageResourcesPath, \\"annotation-\\").concat(/paperclip/i.test(this.data.name) ? \\"paperclip\\" : \\"pushpin\\", \\".svg\\");\\n }\\n t.classList.add(\\"popupTriggerArea\\");\\n t.addEventListener(\\"dblclick\\", this._download.bind(this));\\n _classPrivateFieldSet(this, _sn, t);\\n !this.data.popupRef && (((_this$data$titleObj = this.data.titleObj) === null || _this$data$titleObj === void 0 ? void 0 : _this$data$titleObj.str) || ((_this$data$contentsOb = this.data.contentsObj) === null || _this$data$contentsOb === void 0 ? void 0 : _this$data$contentsOb.str) || this.data.richText) && this._createPopup();\\n this.container.append(t);\\n return this.container;\\n }\\n getElementsToTriggerPopup() {\\n return _classPrivateFieldGet(this, _sn);\\n }\\n addHighlightArea() {\\n this.container.classList.add(\\"highlightArea\\");\\n }\\n _download() {\\n var _this$downloadManager2;\\n (_this$downloadManager2 = this.downloadManager) === null || _this$downloadManager2 === void 0 ? void 0 : _this$downloadManager2.openOrDownloadData(this.container, this.content, this.filename);\\n }\\n }\\n e.AnnotationLayer = (_re2 = /*#__PURE__*/new WeakMap(), _an = /*#__PURE__*/new WeakMap(), _on = /*#__PURE__*/new WeakMap(), _ln = /*#__PURE__*/new WeakSet(), _cn = /*#__PURE__*/new WeakSet(), class AnnotationLayer {\\n constructor(_t16) {\\n _classPrivateMethodInitSpec(this, _cn);\\n _classPrivateMethodInitSpec(this, _ln);\\n _classPrivateFieldInitSpec(this, _re2, {\\n writable: true,\\n value: null\\n });\\n _classPrivateFieldInitSpec(this, _an, {\\n writable: true,\\n value: null\\n });\\n _classPrivateFieldInitSpec(this, _on, {\\n writable: true,\\n value: new Map()\\n });\\n let {\\n div: _e14,\\n accessibilityManager: _n8,\\n annotationCanvasMap: _i5,\\n l10n: _r5,\\n page: s,\\n viewport: a\\n } = _t16;\\n this.div = _e14;\\n _classPrivateFieldSet(this, _re2, _n8);\\n _classPrivateFieldSet(this, _an, _i5);\\n this.l10n = _r5;\\n this.page = s;\\n this.viewport = a;\\n this.zIndex = 0;\\n this.l10n || (this.l10n = o.NullL10n);\\n }\\n async render(t) {\\n const {\\n annotations: e\\n } = t,\\n n = this.div;\\n (0, r.setLayerDimensions)(n, this.viewport);\\n const a = new Map(),\\n o = {\\n data: null,\\n layer: n,\\n linkService: t.linkService,\\n downloadManager: t.downloadManager,\\n imageResourcesPath: t.imageResourcesPath || \\"\\",\\n renderForms: !1 !== t.renderForms,\\n svgFactory: new r.DOMSVGFactory(),\\n annotationStorage: t.annotationStorage || new s.AnnotationStorage(),\\n enableScripting: !0 === t.enableScripting,\\n hasJSActions: t.hasJSActions,\\n fieldObjects: t.fieldObjects,\\n parent: this,\\n elements: null\\n };\\n for (const t of e) {\\n if (t.noHTML) continue;\\n const e = t.annotationType === i.AnnotationType.POPUP;\\n if (e) {\\n const e = a.get(t.id);\\n if (!e) continue;\\n o.elements = e;\\n } else {\\n const {\\n width: e,\\n height: n\\n } = getRectDims(t.rect);\\n if (e <= 0 || n <= 0) continue;\\n }\\n o.data = t;\\n const n = AnnotationElementFactory.create(o);\\n if (!n.isRenderable) continue;\\n if (!e && t.popupRef) {\\n const e = a.get(t.popupRef);\\n e ? e.push(n) : a.set(t.popupRef, [n]);\\n }\\n n.annotationEditorType > 0 && _classPrivateFieldGet(this, _on).set(n.data.id, n);\\n const r = n.render();\\n t.hidden && (r.style.visibility = \\"hidden\\");\\n _classPrivateMethodGet(this, _ln, _ln2).call(this, r, t.id);\\n }\\n _classPrivateMethodGet(this, _cn, _cn2).call(this);\\n await this.l10n.translate(n);\\n }\\n update(t) {\\n let {\\n viewport: e\\n } = t;\\n const n = this.div;\\n this.viewport = e;\\n (0, r.setLayerDimensions)(n, {\\n rotation: e.rotation\\n });\\n _classPrivateMethodGet(this, _cn, _cn2).call(this);\\n n.hidden = !1;\\n }\\n getEditableAnnotations() {\\n return Array.from(_classPrivateFieldGet(this, _on).values());\\n }\\n getEditableAnnotation(t) {\\n return _classPrivateFieldGet(this, _on).get(t);\\n }\\n });\\n function _ln2(t, e) {\\n var _classPrivateFieldGet14;\\n const n = t.firstChild || t;\\n n.id = \\"\\".concat(r.AnnotationPrefix).concat(e);\\n this.div.append(t);\\n (_classPrivateFieldGet14 = _classPrivateFieldGet(this, _re2)) === null || _classPrivateFieldGet14 === void 0 ? void 0 : _classPrivateFieldGet14.moveElementInDOM(this.div, t, n, !1);\\n }\\n function _cn2() {\\n if (!_classPrivateFieldGet(this, _an)) return;\\n const t = this.div;\\n for (const [e, n] of _classPrivateFieldGet(this, _an)) {\\n const i = t.querySelector(\\"[data-annotation-id=\\\\\\"\\".concat(e, \\"\\\\\\"]\\"));\\n if (!i) continue;\\n const {\\n firstChild: r\\n } = i;\\n r ? \\"CANVAS\\" === r.nodeName ? r.replaceWith(n) : r.before(n) : i.append(n);\\n }\\n _classPrivateFieldGet(this, _an).clear();\\n }\\n }, (t, e) => {\\n \\"use strict\\";\\n\\n Object.defineProperty(e, \\"__esModule\\", {\\n value: !0\\n });\\n e.ColorConverters = void 0;\\n function makeColorComp(t) {\\n return Math.floor(255 * Math.max(0, Math.min(1, t))).toString(16).padStart(2, \\"0\\");\\n }\\n e.ColorConverters = class ColorConverters {\\n static CMYK_G(t) {\\n let [e, n, i, r] = t;\\n return [\\"G\\", 1 - Math.min(1, .3 * e + .59 * i + .11 * n + r)];\\n }\\n static G_CMYK(t) {\\n let [e] = t;\\n return [\\"CMYK\\", 0, 0, 0, 1 - e];\\n }\\n static G_RGB(t) {\\n let [e] = t;\\n return [\\"RGB\\", e, e, e];\\n }\\n static G_HTML(t) {\\n let [e] = t;\\n const n = makeColorComp(e);\\n return \\"#\\".concat(n).concat(n).concat(n);\\n }\\n static RGB_G(t) {\\n let [e, n, i] = t;\\n return [\\"G\\", .3 * e + .59 * n + .11 * i];\\n }\\n static RGB_HTML(t) {\\n let [e, n, i] = t;\\n return \\"#\\".concat(makeColorComp(e)).concat(makeColorComp(n)).concat(makeColorComp(i));\\n }\\n static T_HTML() {\\n return \\"#00000000\\";\\n }\\n static CMYK_RGB(t) {\\n let [e, n, i, r] = t;\\n return [\\"RGB\\", 1 - Math.min(1, e + r), 1 - Math.min(1, i + r), 1 - Math.min(1, n + r)];\\n }\\n static CMYK_HTML(t) {\\n const e = this.CMYK_RGB(t).slice(1);\\n return this.RGB_HTML(e);\\n }\\n static RGB_CMYK(t) {\\n let [e, n, i] = t;\\n const r = 1 - e,\\n s = 1 - n,\\n a = 1 - i;\\n return [\\"CMYK\\", r, s, a, Math.min(r, s, a)];\\n }\\n };\\n }, (t, e) => {\\n \\"use strict\\";\\n\\n Object.defineProperty(e, \\"__esModule\\", {\\n value: !0\\n });\\n e.NullL10n = void 0;\\n e.getL10nFallback = getL10nFallback;\\n const n = {\\n of_pages: \\"of {{pagesCount}}\\",\\n page_of_pages: \\"({{pageNumber}} of {{pagesCount}})\\",\\n document_properties_kb: \\"{{size_kb}} KB ({{size_b}} bytes)\\",\\n document_properties_mb: \\"{{size_mb}} MB ({{size_b}} bytes)\\",\\n document_properties_date_string: \\"{{date}}, {{time}}\\",\\n document_properties_page_size_unit_inches: \\"in\\",\\n document_properties_page_size_unit_millimeters: \\"mm\\",\\n document_properties_page_size_orientation_portrait: \\"portrait\\",\\n document_properties_page_size_orientation_landscape: \\"landscape\\",\\n document_properties_page_size_name_a3: \\"A3\\",\\n document_properties_page_size_name_a4: \\"A4\\",\\n document_properties_page_size_name_letter: \\"Letter\\",\\n document_properties_page_size_name_legal: \\"Legal\\",\\n document_properties_page_size_dimension_string: \\"{{width}} × {{height}} {{unit}} ({{orientation}})\\",\\n document_properties_page_size_dimension_name_string: \\"{{width}} × {{height}} {{unit}} ({{name}}, {{orientation}})\\",\\n document_properties_linearized_yes: \\"Yes\\",\\n document_properties_linearized_no: \\"No\\",\\n additional_layers: \\"Additional Layers\\",\\n page_landmark: \\"Page {{page}}\\",\\n thumb_page_title: \\"Page {{page}}\\",\\n thumb_page_canvas: \\"Thumbnail of Page {{page}}\\",\\n find_reached_top: \\"Reached top of document, continued from bottom\\",\\n find_reached_bottom: \\"Reached end of document, continued from top\\",\\n \\"find_match_count[one]\\": \\"{{current}} of {{total}} match\\",\\n \\"find_match_count[other]\\": \\"{{current}} of {{total}} matches\\",\\n \\"find_match_count_limit[one]\\": \\"More than {{limit}} match\\",\\n \\"find_match_count_limit[other]\\": \\"More than {{limit}} matches\\",\\n find_not_found: \\"Phrase not found\\",\\n page_scale_width: \\"Page Width\\",\\n page_scale_fit: \\"Page Fit\\",\\n page_scale_auto: \\"Automatic Zoom\\",\\n page_scale_actual: \\"Actual Size\\",\\n page_scale_percent: \\"{{scale}}%\\",\\n loading_error: \\"An error occurred while loading the PDF.\\",\\n invalid_file_error: \\"Invalid or corrupted PDF file.\\",\\n missing_file_error: \\"Missing PDF file.\\",\\n unexpected_response_error: \\"Unexpected server response.\\",\\n rendering_error: \\"An error occurred while rendering the page.\\",\\n annotation_date_string: \\"{{date}}, {{time}}\\",\\n printing_not_supported: \\"Warning: Printing is not fully supported by this browser.\\",\\n printing_not_ready: \\"Warning: The PDF is not fully loaded for printing.\\",\\n web_fonts_disabled: \\"Web fonts are disabled: unable to use embedded PDF fonts.\\",\\n free_text2_default_content: \\"Start typing…\\",\\n editor_free_text2_aria_label: \\"Text Editor\\",\\n editor_ink2_aria_label: \\"Draw Editor\\",\\n editor_ink_canvas_aria_label: \\"User-created image\\",\\n print_progress_percent: \\"{{progress}}%\\"\\n };\\n function getL10nFallback(t, e) {\\n switch (t) {\\n case \\"find_match_count\\":\\n t = \\"find_match_count[\\".concat(1 === e.total ? \\"one\\" : \\"other\\", \\"]\\");\\n break;\\n case \\"find_match_count_limit\\":\\n t = \\"find_match_count_limit[\\".concat(1 === e.limit ? \\"one\\" : \\"other\\", \\"]\\");\\n }\\n return n[t] || \\"\\";\\n }\\n const i = {\\n getLanguage: async () => \\"en-us\\",\\n getDirection: async () => \\"ltr\\",\\n async get(t) {\\n let e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null;\\n return function formatL10nValue(t, e) {\\n return e ? t.replaceAll(/\\\\{\\\\{\\\\s*(\\\\w+)\\\\s*\\\\}\\\\}/g, (t, n) => n in e ? e[n] : \\"{{\\" + n + \\"}}\\") : t;\\n }(arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : getL10nFallback(t, e), e);\\n },\\n async translate(t) {}\\n };\\n e.NullL10n = i;\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n Object.defineProperty(e, \\"__esModule\\", {\\n value: !0\\n });\\n e.XfaLayer = void 0;\\n n(89);\\n var i = n(193);\\n e.XfaLayer = class XfaLayer {\\n static setupStorage(t, e, n, i, r) {\\n const s = i.getValue(e, {\\n value: null\\n });\\n switch (n.name) {\\n case \\"textarea\\":\\n null !== s.value && (t.textContent = s.value);\\n if (\\"print\\" === r) break;\\n t.addEventListener(\\"input\\", t => {\\n i.setValue(e, {\\n value: t.target.value\\n });\\n });\\n break;\\n case \\"input\\":\\n if (\\"radio\\" === n.attributes.type || \\"checkbox\\" === n.attributes.type) {\\n s.value === n.attributes.xfaOn ? t.setAttribute(\\"checked\\", !0) : s.value === n.attributes.xfaOff && t.removeAttribute(\\"checked\\");\\n if (\\"print\\" === r) break;\\n t.addEventListener(\\"change\\", t => {\\n i.setValue(e, {\\n value: t.target.checked ? t.target.getAttribute(\\"xfaOn\\") : t.target.getAttribute(\\"xfaOff\\")\\n });\\n });\\n } else {\\n null !== s.value && t.setAttribute(\\"value\\", s.value);\\n if (\\"print\\" === r) break;\\n t.addEventListener(\\"input\\", t => {\\n i.setValue(e, {\\n value: t.target.value\\n });\\n });\\n }\\n break;\\n case \\"select\\":\\n if (null !== s.value) {\\n t.setAttribute(\\"value\\", s.value);\\n for (const t of n.children) t.attributes.value === s.value ? t.attributes.selected = !0 : t.attributes.hasOwnProperty(\\"selected\\") && delete t.attributes.selected;\\n }\\n t.addEventListener(\\"input\\", t => {\\n const n = t.target.options,\\n r = -1 === n.selectedIndex ? \\"\\" : n[n.selectedIndex].value;\\n i.setValue(e, {\\n value: r\\n });\\n });\\n }\\n }\\n static setAttributes(t) {\\n let {\\n html: e,\\n element: n,\\n storage: i = null,\\n intent: r,\\n linkService: s\\n } = t;\\n const {\\n attributes: a\\n } = n,\\n o = e instanceof HTMLAnchorElement;\\n \\"radio\\" === a.type && (a.name = \\"\\".concat(a.name, \\"-\\").concat(r));\\n for (const [t, n] of Object.entries(a)) if (null != n) switch (t) {\\n case \\"class\\":\\n n.length && e.setAttribute(t, n.join(\\" \\"));\\n break;\\n case \\"dataId\\":\\n break;\\n case \\"id\\":\\n e.setAttribute(\\"data-element-id\\", n);\\n break;\\n case \\"style\\":\\n Object.assign(e.style, n);\\n break;\\n case \\"textContent\\":\\n e.textContent = n;\\n break;\\n default:\\n (!o || \\"href\\" !== t && \\"newWindow\\" !== t) && e.setAttribute(t, n);\\n }\\n o && s.addLinkAttributes(e, a.href, a.newWindow);\\n i && a.dataId && this.setupStorage(e, a.dataId, n, i);\\n }\\n static render(t) {\\n const e = t.annotationStorage,\\n n = t.linkService,\\n r = t.xfaHtml,\\n s = t.intent || \\"display\\",\\n a = document.createElement(r.name);\\n r.attributes && this.setAttributes({\\n html: a,\\n element: r,\\n intent: s,\\n linkService: n\\n });\\n const o = [[r, -1, a]],\\n l = t.div;\\n l.append(a);\\n if (t.viewport) {\\n const e = \\"matrix(\\".concat(t.viewport.transform.join(\\",\\"), \\")\\");\\n l.style.transform = e;\\n }\\n \\"richText\\" !== s && l.setAttribute(\\"class\\", \\"xfaLayer xfaFont\\");\\n const c = [];\\n for (; o.length > 0;) {\\n var _l$attributes;\\n const [t, r, a] = o.at(-1);\\n if (r + 1 === t.children.length) {\\n o.pop();\\n continue;\\n }\\n const l = t.children[++o.at(-1)[1]];\\n if (null === l) continue;\\n const {\\n name: h\\n } = l;\\n if (\\"#text\\" === h) {\\n const t = document.createTextNode(l.value);\\n c.push(t);\\n a.append(t);\\n continue;\\n }\\n const d = l !== null && l !== void 0 && (_l$attributes = l.attributes) !== null && _l$attributes !== void 0 && _l$attributes.xmlns ? document.createElementNS(l.attributes.xmlns, h) : document.createElement(h);\\n a.append(d);\\n l.attributes && this.setAttributes({\\n html: d,\\n element: l,\\n storage: e,\\n intent: s,\\n linkService: n\\n });\\n if (l.children && l.children.length > 0) o.push([l, -1, d]);else if (l.value) {\\n const t = document.createTextNode(l.value);\\n i.XfaText.shouldBuildText(h) && c.push(t);\\n d.append(t);\\n }\\n }\\n for (const t of l.querySelectorAll(\\".xfaNonInteractive input, .xfaNonInteractive textarea\\")) t.setAttribute(\\"readOnly\\", !0);\\n return {\\n textDivs: c\\n };\\n }\\n static update(t) {\\n const e = \\"matrix(\\".concat(t.viewport.transform.join(\\",\\"), \\")\\");\\n t.div.style.transform = e;\\n t.div.hidden = !1;\\n }\\n };\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n var _class41;\\n Object.defineProperty(e, \\"__esModule\\", {\\n value: !0\\n });\\n e.InkEditor = void 0;\\n n(89);\\n n(2);\\n var i = n(1),\\n r = n(163),\\n s = n(197),\\n a = n(164);\\n var _hn = /*#__PURE__*/new WeakMap();\\n var _dn = /*#__PURE__*/new WeakMap();\\n var _un = /*#__PURE__*/new WeakMap();\\n var _pn = /*#__PURE__*/new WeakMap();\\n var _fn = /*#__PURE__*/new WeakMap();\\n var _gn = /*#__PURE__*/new WeakMap();\\n var _mn = /*#__PURE__*/new WeakMap();\\n var _bn = /*#__PURE__*/new WeakMap();\\n var _vn = /*#__PURE__*/new WeakMap();\\n var _yn = /*#__PURE__*/new WeakMap();\\n var _An = /*#__PURE__*/new WeakMap();\\n var _n9 = /*#__PURE__*/new WeakMap();\\n var _Sn = /*#__PURE__*/new WeakMap();\\n var _En = /*#__PURE__*/new WeakMap();\\n var _xn = /*#__PURE__*/new WeakMap();\\n var _wn = /*#__PURE__*/new WeakSet();\\n var _Pe3 = /*#__PURE__*/new WeakSet();\\n var _Cn = /*#__PURE__*/new WeakSet();\\n var _Fn = /*#__PURE__*/new WeakSet();\\n var _In = /*#__PURE__*/new WeakSet();\\n var _Dn = /*#__PURE__*/new WeakSet();\\n var _Ln = /*#__PURE__*/new WeakSet();\\n var _Bn = /*#__PURE__*/new WeakSet();\\n var _jn = /*#__PURE__*/new WeakSet();\\n var _On = /*#__PURE__*/new WeakSet();\\n var _Nn = /*#__PURE__*/new WeakSet();\\n var _Un = /*#__PURE__*/new WeakSet();\\n var _Pn = /*#__PURE__*/new WeakSet();\\n var _Hn = /*#__PURE__*/new WeakSet();\\n var _kn = /*#__PURE__*/new WeakSet();\\n var _Mn = /*#__PURE__*/new WeakSet();\\n var _Rn = /*#__PURE__*/new WeakSet();\\n var _qn = /*#__PURE__*/new WeakSet();\\n var _zn = /*#__PURE__*/new WeakSet();\\n var _Xn = /*#__PURE__*/new WeakSet();\\n var _Kn = /*#__PURE__*/new WeakSet();\\n var _Wn = /*#__PURE__*/new WeakSet();\\n var _Tn = /*#__PURE__*/new WeakSet();\\n class InkEditor extends r.AnnotationEditor {\\n constructor(_t17) {\\n super(_objectSpread(_objectSpread({}, _t17), {}, {\\n name: \\"inkEditor\\"\\n }));\\n _classPrivateMethodInitSpec(this, _Tn);\\n _classPrivateMethodInitSpec(this, _Wn);\\n _classPrivateMethodInitSpec(this, _Kn);\\n _classPrivateMethodInitSpec(this, _Xn);\\n _classPrivateMethodInitSpec(this, _zn);\\n _classPrivateMethodInitSpec(this, _qn);\\n _classPrivateMethodInitSpec(this, _Rn);\\n _classPrivateMethodInitSpec(this, _Mn);\\n _classPrivateMethodInitSpec(this, _kn);\\n _classPrivateMethodInitSpec(this, _Hn);\\n _classPrivateMethodInitSpec(this, _Pn);\\n _classPrivateMethodInitSpec(this, _Un);\\n _classPrivateMethodInitSpec(this, _Nn);\\n _classPrivateMethodInitSpec(this, _On);\\n _classPrivateMethodInitSpec(this, _jn);\\n _classPrivateMethodInitSpec(this, _Bn);\\n _classPrivateMethodInitSpec(this, _Ln);\\n _classPrivateMethodInitSpec(this, _Dn);\\n _classPrivateMethodInitSpec(this, _In);\\n _classPrivateMethodInitSpec(this, _Fn);\\n _classPrivateMethodInitSpec(this, _Cn);\\n _classPrivateMethodInitSpec(this, _Pe3);\\n _classPrivateMethodInitSpec(this, _wn);\\n _classPrivateFieldInitSpec(this, _hn, {\\n writable: true,\\n value: 0\\n });\\n _classPrivateFieldInitSpec(this, _dn, {\\n writable: true,\\n value: 0\\n });\\n _classPrivateFieldInitSpec(this, _un, {\\n writable: true,\\n value: this.canvasContextMenu.bind(this)\\n });\\n _classPrivateFieldInitSpec(this, _pn, {\\n writable: true,\\n value: this.canvasPointermove.bind(this)\\n });\\n _classPrivateFieldInitSpec(this, _fn, {\\n writable: true,\\n value: this.canvasPointerleave.bind(this)\\n });\\n _classPrivateFieldInitSpec(this, _gn, {\\n writable: true,\\n value: this.canvasPointerup.bind(this)\\n });\\n _classPrivateFieldInitSpec(this, _mn, {\\n writable: true,\\n value: this.canvasPointerdown.bind(this)\\n });\\n _classPrivateFieldInitSpec(this, _bn, {\\n writable: true,\\n value: new Path2D()\\n });\\n _classPrivateFieldInitSpec(this, _vn, {\\n writable: true,\\n value: !1\\n });\\n _classPrivateFieldInitSpec(this, _yn, {\\n writable: true,\\n value: !1\\n });\\n _classPrivateFieldInitSpec(this, _An, {\\n writable: true,\\n value: !1\\n });\\n _classPrivateFieldInitSpec(this, _n9, {\\n writable: true,\\n value: null\\n });\\n _classPrivateFieldInitSpec(this, _Sn, {\\n writable: true,\\n value: 0\\n });\\n _classPrivateFieldInitSpec(this, _En, {\\n writable: true,\\n value: 0\\n });\\n _classPrivateFieldInitSpec(this, _xn, {\\n writable: true,\\n value: null\\n });\\n this.color = _t17.color || null;\\n this.thickness = _t17.thickness || null;\\n this.opacity = _t17.opacity || null;\\n this.paths = [];\\n this.bezierPath2D = [];\\n this.allRawPaths = [];\\n this.currentPath = [];\\n this.scaleFactor = 1;\\n this.translationX = this.translationY = 0;\\n this.x = 0;\\n this.y = 0;\\n this._willKeepAspectRatio = !0;\\n }\\n static initialize(t) {\\n this._l10nPromise = new Map([\\"editor_ink_canvas_aria_label\\", \\"editor_ink2_aria_label\\"].map(e => [e, t.get(e)]));\\n }\\n static updateDefaultParams(t, e) {\\n switch (t) {\\n case i.AnnotationEditorParamsType.INK_THICKNESS:\\n InkEditor._defaultThickness = e;\\n break;\\n case i.AnnotationEditorParamsType.INK_COLOR:\\n InkEditor._defaultColor = e;\\n break;\\n case i.AnnotationEditorParamsType.INK_OPACITY:\\n InkEditor._defaultOpacity = e / 100;\\n }\\n }\\n updateParams(t, e) {\\n switch (t) {\\n case i.AnnotationEditorParamsType.INK_THICKNESS:\\n _classPrivateMethodGet(this, _wn, _wn2).call(this, e);\\n break;\\n case i.AnnotationEditorParamsType.INK_COLOR:\\n _classPrivateMethodGet(this, _Pe3, _Pe4).call(this, e);\\n break;\\n case i.AnnotationEditorParamsType.INK_OPACITY:\\n _classPrivateMethodGet(this, _Cn, _Cn2).call(this, e);\\n }\\n }\\n static get defaultPropertiesToUpdate() {\\n return [[i.AnnotationEditorParamsType.INK_THICKNESS, InkEditor._defaultThickness], [i.AnnotationEditorParamsType.INK_COLOR, InkEditor._defaultColor || r.AnnotationEditor._defaultLineColor], [i.AnnotationEditorParamsType.INK_OPACITY, Math.round(100 * InkEditor._defaultOpacity)]];\\n }\\n get propertiesToUpdate() {\\n var _this$opacity;\\n return [[i.AnnotationEditorParamsType.INK_THICKNESS, this.thickness || InkEditor._defaultThickness], [i.AnnotationEditorParamsType.INK_COLOR, this.color || InkEditor._defaultColor || r.AnnotationEditor._defaultLineColor], [i.AnnotationEditorParamsType.INK_OPACITY, Math.round(100 * ((_this$opacity = this.opacity) !== null && _this$opacity !== void 0 ? _this$opacity : InkEditor._defaultOpacity))]];\\n }\\n rebuild() {\\n super.rebuild();\\n if (null !== this.div) {\\n if (!this.canvas) {\\n _classPrivateMethodGet(this, _kn, _kn2).call(this);\\n _classPrivateMethodGet(this, _Mn, _Mn2).call(this);\\n }\\n if (!this.isAttachedToDOM) {\\n this.parent.add(this);\\n _classPrivateMethodGet(this, _Rn, _Rn2).call(this);\\n }\\n _classPrivateMethodGet(this, _Tn, _Tn2).call(this);\\n }\\n }\\n remove() {\\n if (null !== this.canvas) {\\n this.isEmpty() || this.commit();\\n this.canvas.width = this.canvas.height = 0;\\n this.canvas.remove();\\n this.canvas = null;\\n _classPrivateFieldGet(this, _n9).disconnect();\\n _classPrivateFieldSet(this, _n9, null);\\n super.remove();\\n }\\n }\\n setParent(t) {\\n !this.parent && t ? this._uiManager.removeShouldRescale(this) : this.parent && null === t && this._uiManager.addShouldRescale(this);\\n super.setParent(t);\\n }\\n onScaleChanging() {\\n const [t, e] = this.parentDimensions,\\n n = this.width * t,\\n i = this.height * e;\\n this.setDimensions(n, i);\\n }\\n enableEditMode() {\\n if (!_classPrivateFieldGet(this, _vn) && null !== this.canvas) {\\n super.enableEditMode();\\n this.div.draggable = !1;\\n this.canvas.addEventListener(\\"pointerdown\\", _classPrivateFieldGet(this, _mn));\\n }\\n }\\n disableEditMode() {\\n if (this.isInEditMode() && null !== this.canvas) {\\n super.disableEditMode();\\n this.div.draggable = !this.isEmpty();\\n this.div.classList.remove(\\"editing\\");\\n this.canvas.removeEventListener(\\"pointerdown\\", _classPrivateFieldGet(this, _mn));\\n }\\n }\\n onceAdded() {\\n this.div.draggable = !this.isEmpty();\\n }\\n isEmpty() {\\n return 0 === this.paths.length || 1 === this.paths.length && 0 === this.paths[0].length;\\n }\\n commit() {\\n if (!_classPrivateFieldGet(this, _vn)) {\\n super.commit();\\n this.isEditing = !1;\\n this.disableEditMode();\\n this.setInForeground();\\n _classPrivateFieldSet(this, _vn, !0);\\n this.div.classList.add(\\"disabled\\");\\n _classPrivateMethodGet(this, _Tn, _Tn2).call(this, !0);\\n this.makeResizable();\\n this.parent.addInkEditorIfNeeded(!0);\\n this.parent.moveEditorInDOM(this);\\n this.div.focus({\\n preventScroll: !0\\n });\\n }\\n }\\n focusin(t) {\\n super.focusin(t);\\n this.enableEditMode();\\n }\\n canvasPointerdown(t) {\\n if (0 === t.button && this.isInEditMode() && !_classPrivateFieldGet(this, _vn)) {\\n this.setInForeground();\\n t.preventDefault();\\n \\"mouse\\" !== t.type && this.div.focus();\\n _classPrivateMethodGet(this, _Dn, _Dn2).call(this, t.offsetX, t.offsetY);\\n }\\n }\\n canvasContextMenu(t) {\\n t.preventDefault();\\n }\\n canvasPointermove(t) {\\n t.preventDefault();\\n _classPrivateMethodGet(this, _Ln, _Ln2).call(this, t.offsetX, t.offsetY);\\n }\\n canvasPointerup(t) {\\n t.preventDefault();\\n _classPrivateMethodGet(this, _Hn, _Hn2).call(this, t);\\n }\\n canvasPointerleave(t) {\\n _classPrivateMethodGet(this, _Hn, _Hn2).call(this, t);\\n }\\n get isResizable() {\\n return !this.isEmpty() && _classPrivateFieldGet(this, _vn);\\n }\\n render() {\\n if (this.div) return this.div;\\n let t, e;\\n if (this.width) {\\n t = this.x;\\n e = this.y;\\n }\\n super.render();\\n InkEditor._l10nPromise.get(\\"editor_ink2_aria_label\\").then(t => {\\n var _this$div6;\\n return (_this$div6 = this.div) === null || _this$div6 === void 0 ? void 0 : _this$div6.setAttribute(\\"aria-label\\", t);\\n });\\n const [n, i, r, s] = _classPrivateMethodGet(this, _Fn, _Fn2).call(this);\\n this.setAt(n, i, 0, 0);\\n this.setDims(r, s);\\n _classPrivateMethodGet(this, _kn, _kn2).call(this);\\n if (this.width) {\\n const [n, i] = this.parentDimensions;\\n this.setAspectRatio(this.width * n, this.height * i);\\n this.setAt(t * n, e * i, this.width * n, this.height * i);\\n _classPrivateFieldSet(this, _An, !0);\\n _classPrivateMethodGet(this, _Rn, _Rn2).call(this);\\n this.setDims(this.width * n, this.height * i);\\n _classPrivateMethodGet(this, _Pn, _Pn2).call(this);\\n this.div.classList.add(\\"disabled\\");\\n } else {\\n this.div.classList.add(\\"editing\\");\\n this.enableEditMode();\\n }\\n _classPrivateMethodGet(this, _Mn, _Mn2).call(this);\\n return this.div;\\n }\\n setDimensions(t, e) {\\n const n = Math.round(t),\\n i = Math.round(e);\\n if (_classPrivateFieldGet(this, _Sn) === n && _classPrivateFieldGet(this, _En) === i) return;\\n _classPrivateFieldSet(this, _Sn, n);\\n _classPrivateFieldSet(this, _En, i);\\n this.canvas.style.visibility = \\"hidden\\";\\n const [r, s] = this.parentDimensions;\\n this.width = t / r;\\n this.height = e / s;\\n this.fixAndSetPosition();\\n _classPrivateFieldGet(this, _vn) && _classPrivateMethodGet(this, _qn, _qn2).call(this, t, e);\\n _classPrivateMethodGet(this, _Rn, _Rn2).call(this);\\n _classPrivateMethodGet(this, _Pn, _Pn2).call(this);\\n this.canvas.style.visibility = \\"visible\\";\\n this.fixDims();\\n }\\n static deserialize(t, e, n) {\\n if (t instanceof s.InkAnnotationElement) return null;\\n const a = super.deserialize(t, e, n);\\n a.thickness = t.thickness;\\n a.color = i.Util.makeHexColor(...t.color);\\n a.opacity = t.opacity;\\n const [o, l] = a.pageDimensions,\\n c = a.width * o,\\n h = a.height * l,\\n d = a.parentScale,\\n u = t.thickness / 2;\\n _classPrivateFieldSet(a, _vn, !0);\\n _classPrivateFieldSet(a, _Sn, Math.round(c));\\n _classPrivateFieldSet(a, _En, Math.round(h));\\n const {\\n paths: p,\\n rect: f,\\n rotation: g\\n } = t;\\n for (let {\\n bezier: t\\n } of p) {\\n t = _classStaticPrivateMethodGet(InkEditor, InkEditor, _$n).call(InkEditor, t, f, g);\\n const e = [];\\n a.paths.push(e);\\n let n = d * (t[0] - u),\\n i = d * (t[1] - u);\\n for (let r = 2, s = t.length; r < s; r += 6) {\\n const s = d * (t[r] - u),\\n a = d * (t[r + 1] - u),\\n o = d * (t[r + 2] - u),\\n l = d * (t[r + 3] - u),\\n c = d * (t[r + 4] - u),\\n h = d * (t[r + 5] - u);\\n e.push([[n, i], [s, a], [o, l], [c, h]]);\\n n = c;\\n i = h;\\n }\\n const r = _classStaticPrivateMethodGet(this, InkEditor, _Gn).call(this, e);\\n a.bezierPath2D.push(r);\\n }\\n const m = _classPrivateMethodGet(a, _Kn, _Kn2).call(a);\\n _classPrivateFieldSet(a, _dn, Math.max(r.AnnotationEditor.MIN_SIZE, m[2] - m[0]));\\n _classPrivateFieldSet(a, _hn, Math.max(r.AnnotationEditor.MIN_SIZE, m[3] - m[1]));\\n _classPrivateMethodGet(a, _qn, _qn2).call(a, c, h);\\n return a;\\n }\\n serialize() {\\n if (this.isEmpty()) return null;\\n const t = this.getRect(0, 0),\\n e = r.AnnotationEditor._colorManager.convert(this.ctx.strokeStyle);\\n return {\\n annotationType: i.AnnotationEditorType.INK,\\n color: e,\\n thickness: this.thickness,\\n opacity: this.opacity,\\n paths: _classPrivateMethodGet(this, _Xn, _Xn2).call(this, this.scaleFactor / this.parentScale, this.translationX, this.translationY, t),\\n pageIndex: this.pageIndex,\\n rect: t,\\n rotation: this.rotation\\n };\\n }\\n }\\n _class41 = InkEditor;\\n function _wn2(t) {\\n const e = this.thickness;\\n this.addCommands({\\n cmd: () => {\\n this.thickness = t;\\n _classPrivateMethodGet(this, _Tn, _Tn2).call(this);\\n },\\n undo: () => {\\n this.thickness = e;\\n _classPrivateMethodGet(this, _Tn, _Tn2).call(this);\\n },\\n mustExec: !0,\\n type: i.AnnotationEditorParamsType.INK_THICKNESS,\\n overwriteIfSameType: !0,\\n keepUndo: !0\\n });\\n }\\n function _Pe4(t) {\\n const e = this.color;\\n this.addCommands({\\n cmd: () => {\\n this.color = t;\\n _classPrivateMethodGet(this, _Pn, _Pn2).call(this);\\n },\\n undo: () => {\\n this.color = e;\\n _classPrivateMethodGet(this, _Pn, _Pn2).call(this);\\n },\\n mustExec: !0,\\n type: i.AnnotationEditorParamsType.INK_COLOR,\\n overwriteIfSameType: !0,\\n keepUndo: !0\\n });\\n }\\n function _Cn2(t) {\\n t /= 100;\\n const e = this.opacity;\\n this.addCommands({\\n cmd: () => {\\n this.opacity = t;\\n _classPrivateMethodGet(this, _Pn, _Pn2).call(this);\\n },\\n undo: () => {\\n this.opacity = e;\\n _classPrivateMethodGet(this, _Pn, _Pn2).call(this);\\n },\\n mustExec: !0,\\n type: i.AnnotationEditorParamsType.INK_OPACITY,\\n overwriteIfSameType: !0,\\n keepUndo: !0\\n });\\n }\\n function _Fn2() {\\n const {\\n parentRotation: t,\\n parentDimensions: [e, n]\\n } = this;\\n switch (t) {\\n case 90:\\n return [0, n, n, e];\\n case 180:\\n return [e, n, e, n];\\n case 270:\\n return [e, 0, n, e];\\n default:\\n return [0, 0, e, n];\\n }\\n }\\n function _In2() {\\n const {\\n ctx: t,\\n color: e,\\n opacity: n,\\n thickness: i,\\n parentScale: r,\\n scaleFactor: s\\n } = this;\\n t.lineWidth = i * r / s;\\n t.lineCap = \\"round\\";\\n t.lineJoin = \\"round\\";\\n t.miterLimit = 10;\\n t.strokeStyle = \\"\\".concat(e).concat((0, a.opacityToHex)(n));\\n }\\n function _Dn2(t, e) {\\n this.canvas.addEventListener(\\"contextmenu\\", _classPrivateFieldGet(this, _un));\\n this.canvas.addEventListener(\\"pointerleave\\", _classPrivateFieldGet(this, _fn));\\n this.canvas.addEventListener(\\"pointermove\\", _classPrivateFieldGet(this, _pn));\\n this.canvas.addEventListener(\\"pointerup\\", _classPrivateFieldGet(this, _gn));\\n this.canvas.removeEventListener(\\"pointerdown\\", _classPrivateFieldGet(this, _mn));\\n this.isEditing = !0;\\n if (!_classPrivateFieldGet(this, _An)) {\\n var _this$opacity2;\\n _classPrivateFieldSet(this, _An, !0);\\n _classPrivateMethodGet(this, _Rn, _Rn2).call(this);\\n this.thickness || (this.thickness = _class41._defaultThickness);\\n this.color || (this.color = _class41._defaultColor || r.AnnotationEditor._defaultLineColor);\\n (_this$opacity2 = this.opacity) !== null && _this$opacity2 !== void 0 ? _this$opacity2 : this.opacity = _class41._defaultOpacity;\\n }\\n this.currentPath.push([t, e]);\\n _classPrivateFieldSet(this, _yn, !1);\\n _classPrivateMethodGet(this, _In, _In2).call(this);\\n _classPrivateFieldSet(this, _xn, () => {\\n _classPrivateMethodGet(this, _On, _On2).call(this);\\n _classPrivateFieldGet(this, _xn) && window.requestAnimationFrame(_classPrivateFieldGet(this, _xn));\\n });\\n window.requestAnimationFrame(_classPrivateFieldGet(this, _xn));\\n }\\n function _Ln2(t, e) {\\n const [n, i] = this.currentPath.at(-1);\\n if (this.currentPath.length > 1 && t === n && e === i) return;\\n const r = this.currentPath;\\n let s = _classPrivateFieldGet(this, _bn);\\n r.push([t, e]);\\n _classPrivateFieldSet(this, _yn, !0);\\n if (r.length <= 2) {\\n s.moveTo(...r[0]);\\n s.lineTo(t, e);\\n } else {\\n if (3 === r.length) {\\n _classPrivateFieldSet(this, _bn, s = new Path2D());\\n s.moveTo(...r[0]);\\n }\\n _classPrivateMethodGet(this, _Nn, _Nn2).call(this, s, ...r.at(-3), ...r.at(-2), t, e);\\n }\\n }\\n function _Bn2() {\\n if (0 === this.currentPath.length) return;\\n const t = this.currentPath.at(-1);\\n _classPrivateFieldGet(this, _bn).lineTo(...t);\\n }\\n function _jn2(t, e) {\\n _classPrivateFieldSet(this, _xn, null);\\n t = Math.min(Math.max(t, 0), this.canvas.width);\\n e = Math.min(Math.max(e, 0), this.canvas.height);\\n _classPrivateMethodGet(this, _Ln, _Ln2).call(this, t, e);\\n _classPrivateMethodGet(this, _Bn, _Bn2).call(this);\\n let n;\\n if (1 !== this.currentPath.length) n = _classPrivateMethodGet(this, _Un, _Un2).call(this);else {\\n const i = [t, e];\\n n = [[i, i.slice(), i.slice(), i]];\\n }\\n const i = _classPrivateFieldGet(this, _bn),\\n r = this.currentPath;\\n this.currentPath = [];\\n _classPrivateFieldSet(this, _bn, new Path2D());\\n this.addCommands({\\n cmd: () => {\\n this.allRawPaths.push(r);\\n this.paths.push(n);\\n this.bezierPath2D.push(i);\\n this.rebuild();\\n },\\n undo: () => {\\n this.allRawPaths.pop();\\n this.paths.pop();\\n this.bezierPath2D.pop();\\n if (0 === this.paths.length) this.remove();else {\\n if (!this.canvas) {\\n _classPrivateMethodGet(this, _kn, _kn2).call(this);\\n _classPrivateMethodGet(this, _Mn, _Mn2).call(this);\\n }\\n _classPrivateMethodGet(this, _Tn, _Tn2).call(this);\\n }\\n },\\n mustExec: !0\\n });\\n }\\n function _On2() {\\n if (!_classPrivateFieldGet(this, _yn)) return;\\n _classPrivateFieldSet(this, _yn, !1);\\n const t = Math.ceil(this.thickness * this.parentScale),\\n e = this.currentPath.slice(-3),\\n n = e.map(t => t[0]),\\n i = e.map(t => t[1]),\\n {\\n ctx: r\\n } = (Math.min(...n), Math.max(...n), Math.min(...i), Math.max(...i), this);\\n r.save();\\n r.clearRect(0, 0, this.canvas.width, this.canvas.height);\\n for (const t of this.bezierPath2D) r.stroke(t);\\n r.stroke(_classPrivateFieldGet(this, _bn));\\n r.restore();\\n }\\n function _Nn2(t, e, n, i, r, s, a) {\\n const o = (e + i) / 2,\\n l = (n + r) / 2,\\n c = (i + s) / 2,\\n h = (r + a) / 2;\\n t.bezierCurveTo(o + 2 * (i - o) / 3, l + 2 * (r - l) / 3, c + 2 * (i - c) / 3, h + 2 * (r - h) / 3, c, h);\\n }\\n function _Un2() {\\n const t = this.currentPath;\\n if (t.length <= 2) return [[t[0], t[0], t.at(-1), t.at(-1)]];\\n const e = [];\\n let n,\\n [i, r] = t[0];\\n for (n = 1; n < t.length - 2; n++) {\\n const [s, a] = t[n],\\n [o, l] = t[n + 1],\\n c = (s + o) / 2,\\n h = (a + l) / 2,\\n d = [i + 2 * (s - i) / 3, r + 2 * (a - r) / 3],\\n u = [c + 2 * (s - c) / 3, h + 2 * (a - h) / 3];\\n e.push([[i, r], d, u, [c, h]]);\\n [i, r] = [c, h];\\n }\\n const [s, a] = t[n],\\n [o, l] = t[n + 1],\\n c = [i + 2 * (s - i) / 3, r + 2 * (a - r) / 3],\\n h = [o + 2 * (s - o) / 3, l + 2 * (a - l) / 3];\\n e.push([[i, r], c, h, [o, l]]);\\n return e;\\n }\\n function _Pn2() {\\n if (this.isEmpty()) {\\n _classPrivateMethodGet(this, _zn, _zn2).call(this);\\n return;\\n }\\n _classPrivateMethodGet(this, _In, _In2).call(this);\\n const {\\n canvas: t,\\n ctx: e\\n } = this;\\n e.setTransform(1, 0, 0, 1, 0, 0);\\n e.clearRect(0, 0, t.width, t.height);\\n _classPrivateMethodGet(this, _zn, _zn2).call(this);\\n for (const t of this.bezierPath2D) e.stroke(t);\\n }\\n function _Hn2(t) {\\n this.canvas.removeEventListener(\\"pointerleave\\", _classPrivateFieldGet(this, _fn));\\n this.canvas.removeEventListener(\\"pointermove\\", _classPrivateFieldGet(this, _pn));\\n this.canvas.removeEventListener(\\"pointerup\\", _classPrivateFieldGet(this, _gn));\\n this.canvas.addEventListener(\\"pointerdown\\", _classPrivateFieldGet(this, _mn));\\n setTimeout(() => {\\n this.canvas.removeEventListener(\\"contextmenu\\", _classPrivateFieldGet(this, _un));\\n }, 10);\\n _classPrivateMethodGet(this, _jn, _jn2).call(this, t.offsetX, t.offsetY);\\n this.addToAnnotationStorage();\\n this.setInBackground();\\n }\\n function _kn2() {\\n this.canvas = document.createElement(\\"canvas\\");\\n this.canvas.width = this.canvas.height = 0;\\n this.canvas.className = \\"inkEditorCanvas\\";\\n _class41._l10nPromise.get(\\"editor_ink_canvas_aria_label\\").then(t => {\\n var _this$canvas;\\n return (_this$canvas = this.canvas) === null || _this$canvas === void 0 ? void 0 : _this$canvas.setAttribute(\\"aria-label\\", t);\\n });\\n this.div.append(this.canvas);\\n this.ctx = this.canvas.getContext(\\"2d\\");\\n }\\n function _Mn2() {\\n _classPrivateFieldSet(this, _n9, new ResizeObserver(t => {\\n const e = t[0].contentRect;\\n e.width && e.height && this.setDimensions(e.width, e.height);\\n }));\\n _classPrivateFieldGet(this, _n9).observe(this.div);\\n }\\n function _Rn2() {\\n if (!_classPrivateFieldGet(this, _An)) return;\\n const [t, e] = this.parentDimensions;\\n this.canvas.width = Math.ceil(this.width * t);\\n this.canvas.height = Math.ceil(this.height * e);\\n _classPrivateMethodGet(this, _zn, _zn2).call(this);\\n }\\n function _qn2(t, e) {\\n const n = _classPrivateMethodGet(this, _Wn, _Wn2).call(this),\\n i = (t - n) / _classPrivateFieldGet(this, _dn),\\n r = (e - n) / _classPrivateFieldGet(this, _hn);\\n this.scaleFactor = Math.min(i, r);\\n }\\n function _zn2() {\\n const t = _classPrivateMethodGet(this, _Wn, _Wn2).call(this) / 2;\\n this.ctx.setTransform(this.scaleFactor, 0, 0, this.scaleFactor, this.translationX * this.scaleFactor + t, this.translationY * this.scaleFactor + t);\\n }\\n function _Gn(t) {\\n const e = new Path2D();\\n for (let n = 0, i = t.length; n < i; n++) {\\n const [i, r, s, a] = t[n];\\n 0 === n && e.moveTo(...i);\\n e.bezierCurveTo(r[0], r[1], s[0], s[1], a[0], a[1]);\\n }\\n return e;\\n }\\n function _Vn(t, e, n) {\\n const [i, r, s, a] = e;\\n switch (n) {\\n case 0:\\n for (let e = 0, n = t.length; e < n; e += 2) {\\n t[e] += i;\\n t[e + 1] = a - t[e + 1];\\n }\\n break;\\n case 90:\\n for (let e = 0, n = t.length; e < n; e += 2) {\\n const n = t[e];\\n t[e] = t[e + 1] + i;\\n t[e + 1] = n + r;\\n }\\n break;\\n case 180:\\n for (let e = 0, n = t.length; e < n; e += 2) {\\n t[e] = s - t[e];\\n t[e + 1] += r;\\n }\\n break;\\n case 270:\\n for (let e = 0, n = t.length; e < n; e += 2) {\\n const n = t[e];\\n t[e] = s - t[e + 1];\\n t[e + 1] = a - n;\\n }\\n break;\\n default:\\n throw new Error(\\"Invalid rotation\\");\\n }\\n return t;\\n }\\n function _$n(t, e, n) {\\n const [i, r, s, a] = e;\\n switch (n) {\\n case 0:\\n for (let e = 0, n = t.length; e < n; e += 2) {\\n t[e] -= i;\\n t[e + 1] = a - t[e + 1];\\n }\\n break;\\n case 90:\\n for (let e = 0, n = t.length; e < n; e += 2) {\\n const n = t[e];\\n t[e] = t[e + 1] - r;\\n t[e + 1] = n - i;\\n }\\n break;\\n case 180:\\n for (let e = 0, n = t.length; e < n; e += 2) {\\n t[e] = s - t[e];\\n t[e + 1] -= r;\\n }\\n break;\\n case 270:\\n for (let e = 0, n = t.length; e < n; e += 2) {\\n const n = t[e];\\n t[e] = a - t[e + 1];\\n t[e + 1] = s - n;\\n }\\n break;\\n default:\\n throw new Error(\\"Invalid rotation\\");\\n }\\n return t;\\n }\\n function _Xn2(t, e, n, i) {\\n const r = [],\\n s = this.thickness / 2,\\n a = t * e + s,\\n o = t * n + s;\\n for (const e of this.paths) {\\n const n = [],\\n s = [];\\n for (let i = 0, r = e.length; i < r; i++) {\\n const [l, c, h, d] = e[i],\\n u = t * l[0] + a,\\n p = t * l[1] + o,\\n f = t * c[0] + a,\\n g = t * c[1] + o,\\n m = t * h[0] + a,\\n b = t * h[1] + o,\\n v = t * d[0] + a,\\n y = t * d[1] + o;\\n if (0 === i) {\\n n.push(u, p);\\n s.push(u, p);\\n }\\n n.push(f, g, m, b, v, y);\\n s.push(f, g);\\n i === r - 1 && s.push(v, y);\\n }\\n r.push({\\n bezier: _classStaticPrivateMethodGet(_class41, _class41, _Vn).call(_class41, n, i, this.rotation),\\n points: _classStaticPrivateMethodGet(_class41, _class41, _Vn).call(_class41, s, i, this.rotation)\\n });\\n }\\n return r;\\n }\\n function _Kn2() {\\n let t = 1 / 0,\\n e = -1 / 0,\\n n = 1 / 0,\\n r = -1 / 0;\\n for (const s of this.paths) for (const [a, o, l, c] of s) {\\n const s = i.Util.bezierBoundingBox(...a, ...o, ...l, ...c);\\n t = Math.min(t, s[0]);\\n n = Math.min(n, s[1]);\\n e = Math.max(e, s[2]);\\n r = Math.max(r, s[3]);\\n }\\n return [t, n, e, r];\\n }\\n function _Wn2() {\\n return _classPrivateFieldGet(this, _vn) ? Math.ceil(this.thickness * this.parentScale) : 0;\\n }\\n function _Tn2() {\\n let t = arguments.length > 0 && void 0 !== arguments[0] && arguments[0];\\n if (this.isEmpty()) return;\\n if (!_classPrivateFieldGet(this, _vn)) {\\n _classPrivateMethodGet(this, _Pn, _Pn2).call(this);\\n return;\\n }\\n const e = _classPrivateMethodGet(this, _Kn, _Kn2).call(this),\\n n = _classPrivateMethodGet(this, _Wn, _Wn2).call(this);\\n _classPrivateFieldSet(this, _dn, Math.max(r.AnnotationEditor.MIN_SIZE, e[2] - e[0]));\\n _classPrivateFieldSet(this, _hn, Math.max(r.AnnotationEditor.MIN_SIZE, e[3] - e[1]));\\n const i = Math.ceil(n + _classPrivateFieldGet(this, _dn) * this.scaleFactor),\\n s = Math.ceil(n + _classPrivateFieldGet(this, _hn) * this.scaleFactor),\\n [a, o] = this.parentDimensions;\\n this.width = i / a;\\n this.height = s / o;\\n this.setAspectRatio(i, s);\\n const l = this.translationX,\\n c = this.translationY;\\n this.translationX = -e[0];\\n this.translationY = -e[1];\\n _classPrivateMethodGet(this, _Rn, _Rn2).call(this);\\n _classPrivateMethodGet(this, _Pn, _Pn2).call(this);\\n _classPrivateFieldSet(this, _Sn, i);\\n _classPrivateFieldSet(this, _En, s);\\n this.setDims(i, s);\\n const h = t ? n / this.scaleFactor / 2 : 0;\\n this.translate(l - this.translationX - h, c - this.translationY - h);\\n }\\n _defineProperty(InkEditor, \\"_defaultColor\\", null);\\n _defineProperty(InkEditor, \\"_defaultOpacity\\", 1);\\n _defineProperty(InkEditor, \\"_defaultThickness\\", 1);\\n _defineProperty(InkEditor, \\"_l10nPromise\\", void 0);\\n _defineProperty(InkEditor, \\"_type\\", \\"ink\\");\\n e.InkEditor = InkEditor;\\n }, (t, e, n) => {\\n \\"use strict\\";\\n\\n Object.defineProperty(e, \\"__esModule\\", {\\n value: !0\\n });\\n e.StampEditor = void 0;\\n n(148);\\n n(151);\\n var i = n(163),\\n r = n(1),\\n s = n(167),\\n a = n(197);\\n var _Yn = /*#__PURE__*/new WeakMap();\\n var _Jn = /*#__PURE__*/new WeakMap();\\n var _Qn = /*#__PURE__*/new WeakMap();\\n var _Zn = /*#__PURE__*/new WeakMap();\\n var _ti = /*#__PURE__*/new WeakMap();\\n var _n10 = /*#__PURE__*/new WeakMap();\\n var _ei = /*#__PURE__*/new WeakMap();\\n var _ni = /*#__PURE__*/new WeakMap();\\n var _ii = /*#__PURE__*/new WeakSet();\\n var _kn3 = /*#__PURE__*/new WeakSet();\\n var _si = /*#__PURE__*/new WeakSet();\\n var _ai = /*#__PURE__*/new WeakSet();\\n var _ri = /*#__PURE__*/new WeakSet();\\n var _oi = /*#__PURE__*/new WeakSet();\\n var _Mn3 = /*#__PURE__*/new WeakSet();\\n class StampEditor extends i.AnnotationEditor {\\n constructor(_t18) {\\n super(_objectSpread(_objectSpread({}, _t18), {}, {\\n name: \\"stampEditor\\"\\n }));\\n _classPrivateMethodInitSpec(this, _Mn3);\\n _classPrivateMethodInitSpec(this, _oi);\\n _classPrivateMethodInitSpec(this, _ri);\\n _classPrivateMethodInitSpec(this, _ai);\\n _classPrivateMethodInitSpec(this, _si);\\n _classPrivateMethodInitSpec(this, _kn3);\\n _classPrivateMethodInitSpec(this, _ii);\\n _classPrivateFieldInitSpec(this, _Yn, {\\n writable: true,\\n value: null\\n });\\n _classPrivateFieldInitSpec(this, _Jn, {\\n writable: true,\\n value: null\\n });\\n _classPrivateFieldInitSpec(this, _Qn, {\\n writable: true,\\n value: null\\n });\\n _classPrivateFieldInitSpec(this, _Zn, {\\n writable: true,\\n value: null\\n });\\n _classPrivateFieldInitSpec(this, _ti, {\\n writable: true,\\n value: null\\n });\\n _classPrivateFieldInitSpec(this, _n10, {\\n writable: true,\\n value: null\\n });\\n _classPrivateFieldInitSpec(this, _ei, {\\n writable: true,\\n value: null\\n });\\n _classPrivateFieldInitSpec(this, _ni, {\\n writable: true,\\n value: !1\\n });\\n _classPrivateFieldSet(this, _Zn, _t18.bitmapUrl);\\n }\\n remove() {\\n if (_classPrivateFieldGet(this, _Jn)) {\\n var _classPrivateFieldGet15, _classPrivateFieldGet16;\\n _classPrivateFieldSet(this, _Yn, null);\\n this._uiManager.imageManager.deleteId(_classPrivateFieldGet(this, _Jn));\\n (_classPrivateFieldGet15 = _classPrivateFieldGet(this, _ti)) === null || _classPrivateFieldGet15 === void 0 ? void 0 : _classPrivateFieldGet15.remove();\\n _classPrivateFieldSet(this, _ti, null);\\n (_classPrivateFieldGet16 = _classPrivateFieldGet(this, _n10)) === null || _classPrivateFieldGet16 === void 0 ? void 0 : _classPrivateFieldGet16.disconnect();\\n _classPrivateFieldSet(this, _n10, null);\\n }\\n super.remove();\\n }\\n rebuild() {\\n super.rebuild();\\n if (null !== this.div) {\\n _classPrivateFieldGet(this, _Jn) && _classPrivateMethodGet(this, _ii, _ii2).call(this);\\n this.isAttachedToDOM || this.parent.add(this);\\n }\\n }\\n onceAdded() {\\n this.div.draggable = !0;\\n this.parent.addUndoableEditor(this);\\n this.div.focus();\\n }\\n isEmpty() {\\n return null === _classPrivateFieldGet(this, _Qn) && null === _classPrivateFieldGet(this, _Yn) && null === _classPrivateFieldGet(this, _Zn);\\n }\\n get isResizable() {\\n return !0;\\n }\\n render() {\\n if (this.div) return this.div;\\n let t, e;\\n if (this.width) {\\n t = this.x;\\n e = this.y;\\n }\\n super.render();\\n if (_classPrivateFieldGet(this, _Yn)) _classPrivateMethodGet(this, _kn3, _kn4).call(this);else {\\n this.div.classList.add(\\"loading\\");\\n _classPrivateMethodGet(this, _ii, _ii2).call(this);\\n }\\n if (this.width) {\\n const [n, i] = this.parentDimensions;\\n this.setAt(t * n, e * i, this.width * n, this.height * i);\\n }\\n return this.div;\\n }\\n static deserialize(t, e, n) {\\n if (t instanceof a.StampAnnotationElement) return null;\\n const i = super.deserialize(t, e, n),\\n {\\n rect: r,\\n bitmapUrl: s,\\n bitmapId: o,\\n isSvg: l\\n } = t;\\n o && n.imageManager.isValidId(o) ? _classPrivateFieldSet(i, _Jn, o) : _classPrivateFieldSet(i, _Zn, s);\\n _classPrivateFieldSet(i, _ni, l);\\n const [c, h] = i.pageDimensions;\\n i.width = (r[2] - r[0]) / c;\\n i.height = (r[3] - r[1]) / h;\\n return i;\\n }\\n serialize() {\\n let t = arguments.length > 0 && void 0 !== arguments[0] && arguments[0],\\n e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : null;\\n if (this.isEmpty()) return null;\\n const n = {\\n annotationType: r.AnnotationEditorType.STAMP,\\n bitmapId: _classPrivateFieldGet(this, _Jn),\\n pageIndex: this.pageIndex,\\n rect: this.getRect(0, 0),\\n rotation: this.rotation,\\n isSvg: _classPrivateFieldGet(this, _ni)\\n };\\n if (t) {\\n n.bitmapUrl = _classPrivateMethodGet(this, _oi, _oi2).call(this, !0);\\n return n;\\n }\\n if (null === e) return n;\\n e.stamps || (e.stamps = new Map());\\n const i = _classPrivateFieldGet(this, _ni) ? (n.rect[2] - n.rect[0]) * (n.rect[3] - n.rect[1]) : null;\\n if (e.stamps.has(_classPrivateFieldGet(this, _Jn))) {\\n if (_classPrivateFieldGet(this, _ni)) {\\n const t = e.stamps.get(_classPrivateFieldGet(this, _Jn));\\n if (i > t.area) {\\n t.area = i;\\n t.serialized.bitmap.close();\\n t.serialized.bitmap = _classPrivateMethodGet(this, _oi, _oi2).call(this, !1);\\n }\\n }\\n } else {\\n e.stamps.set(_classPrivateFieldGet(this, _Jn), {\\n area: i,\\n serialized: n\\n });\\n n.bitmap = _classPrivateMethodGet(this, _oi, _oi2).call(this, !1);\\n }\\n return n;\\n }\\n }\\n function _ii2() {\\n if (_classPrivateFieldGet(this, _Jn)) {\\n this._uiManager.imageManager.getFromId(_classPrivateFieldGet(this, _Jn)).then(t => {\\n if (t) {\\n _classPrivateFieldSet(this, _Yn, t.bitmap);\\n _classPrivateMethodGet(this, _kn3, _kn4).call(this);\\n } else this.remove();\\n });\\n return;\\n }\\n if (_classPrivateFieldGet(this, _Zn)) {\\n const t = _classPrivateFieldGet(this, _Zn);\\n _classPrivateFieldSet(this, _Zn, null);\\n _classPrivateFieldSet(this, _Qn, this._uiManager.imageManager.getFromUrl(t).then(t => {\\n _classPrivateFieldSet(this, _Qn, null);\\n if (t) {\\n ({\\n bitmap: _classPrivateFieldDestructureSet(this, _Yn).value,\\n id: _classPrivateFieldDestructureSet(this, _Jn).value,\\n isSvg: _classPrivateFieldDestructureSet(this, _ni).value\\n } = t);\\n _classPrivateMethodGet(this, _kn3, _kn4).call(this);\\n } else this.remove();\\n }));\\n return;\\n }\\n const t = document.createElement(\\"input\\");\\n t.type = \\"file\\";\\n t.accept = \\"image/*\\";\\n _classPrivateFieldSet(this, _Qn, new Promise(e => {\\n t.addEventListener(\\"change\\", async () => {\\n _classPrivateFieldSet(this, _Qn, null);\\n if (t.files && 0 !== t.files.length) {\\n const e = await this._uiManager.imageManager.getFromFile(t.files[0]);\\n if (!e) {\\n this.remove();\\n return;\\n }\\n ({\\n bitmap: _classPrivateFieldDestructureSet(this, _Yn).value,\\n id: _classPrivateFieldDestructureSet(this, _Jn).value,\\n isSvg: _classPrivateFieldDestructureSet(this, _ni).value\\n } = e);\\n _classPrivateMethodGet(this, _kn3, _kn4).call(this);\\n } else this.remove();\\n e();\\n });\\n t.addEventListener(\\"cancel\\", () => {\\n _classPrivateFieldSet(this, _Qn, null);\\n this.remove();\\n e();\\n });\\n }));\\n t.click();\\n }\\n function _kn4() {\\n const {\\n div: t\\n } = this;\\n let {\\n width: e,\\n height: n\\n } = _classPrivateFieldGet(this, _Yn);\\n const [i, r] = this.pageDimensions,\\n s = .75;\\n if (this.width) {\\n e = this.width * i;\\n n = this.height * r;\\n } else if (e > s * i || n > s * r) {\\n const t = Math.min(s * i / e, s * r / n);\\n e *= t;\\n n *= t;\\n }\\n const [a, o] = this.parentDimensions;\\n this.setDims(e * a / i, n * o / r);\\n const l = _classPrivateFieldSet(this, _ti, document.createElement(\\"canvas\\"));\\n t.append(l);\\n _classPrivateMethodGet(this, _ri, _ri2).call(this, e, n);\\n _classPrivateMethodGet(this, _Mn3, _Mn4).call(this);\\n t.classList.remove(\\"loading\\");\\n }\\n function _si2(t, e) {\\n const [n, i] = this.parentDimensions;\\n this.width = t / n;\\n this.height = e / i;\\n this.setDims(t, e);\\n this.fixAndSetPosition();\\n null !== _classPrivateFieldGet(this, _ei) && clearTimeout(_classPrivateFieldGet(this, _ei));\\n _classPrivateFieldSet(this, _ei, setTimeout(() => {\\n _classPrivateFieldSet(this, _ei, null);\\n _classPrivateMethodGet(this, _ri, _ri2).call(this, t, e);\\n }, 200));\\n }\\n function _ai2(t, e) {\\n const {\\n width: n,\\n height: i\\n } = _classPrivateFieldGet(this, _Yn);\\n let r = n,\\n s = i,\\n a = _classPrivateFieldGet(this, _Yn);\\n for (; r > 2 * t || s > 2 * e;) {\\n const n = r,\\n i = s;\\n r > 2 * t && (r = r >= 16384 ? Math.floor(r / 2) - 1 : Math.ceil(r / 2));\\n s > 2 * e && (s = s >= 16384 ? Math.floor(s / 2) - 1 : Math.ceil(s / 2));\\n const o = new OffscreenCanvas(r, s);\\n o.getContext(\\"2d\\").drawImage(a, 0, 0, n, i, 0, 0, r, s);\\n a = o.transferToImageBitmap();\\n }\\n return a;\\n }\\n function _ri2(t, e) {\\n const n = _classPrivateFieldGet(this, _ti);\\n if (!n || n.width === t && n.height === e) return;\\n n.width = t;\\n n.height = e;\\n const i = _classPrivateFieldGet(this, _ni) ? _classPrivateFieldGet(this, _Yn) : _classPrivateMethodGet(this, _ai, _ai2).call(this, t, e),\\n r = n.getContext(\\"2d\\");\\n r.filter = this._uiManager.hcmFilter;\\n r.drawImage(i, 0, 0, i.width, i.height, 0, 0, t, e);\\n }\\n function _oi2(t) {\\n if (t) {\\n if (_classPrivateFieldGet(this, _ni)) {\\n const t = this._uiManager.imageManager.getSvgUrl(_classPrivateFieldGet(this, _Jn));\\n if (t) return t;\\n }\\n const t = document.createElement(\\"canvas\\");\\n ({\\n width: t.width,\\n height: t.height\\n } = _classPrivateFieldGet(this, _Yn));\\n t.getContext(\\"2d\\").drawImage(_classPrivateFieldGet(this, _Yn), 0, 0);\\n return t.toDataURL();\\n }\\n if (_classPrivateFieldGet(this, _ni)) {\\n const [t, e] = this.pageDimensions,\\n n = Math.round(this.width * t * s.PixelsPerInch.PDF_TO_CSS_UNITS),\\n i = Math.round(this.height * e * s.PixelsPerInch.PDF_TO_CSS_UNITS),\\n r = new OffscreenCanvas(n, i);\\n r.getContext(\\"2d\\").drawImage(_classPrivateFieldGet(this, _Yn), 0, 0, _classPrivateFieldGet(this, _Yn).width, _classPrivateFieldGet(this, _Yn).height, 0, 0, n, i);\\n return r.transferToImageBitmap();\\n }\\n return structuredClone(_classPrivateFieldGet(this, _Yn));\\n }\\n function _Mn4() {\\n _classPrivateFieldSet(this, _n10, new ResizeObserver(t => {\\n const e = t[0].contentRect;\\n e.width && e.height && _classPrivateMethodGet(this, _si, _si2).call(this, e.width, e.height);\\n }));\\n _classPrivateFieldGet(this, _n10).observe(this.div);\\n }\\n _defineProperty(StampEditor, \\"_type\\", \\"stamp\\");\\n e.StampEditor = StampEditor;\\n }],\\n __webpack_module_cache__ = {};\\n function __w_pdfjs_require__(t) {\\n var e = __webpack_module_cache__[t];\\n if (void 0 !== e) return e.exports;\\n var n = __webpack_module_cache__[t] = {\\n exports: {}\\n };\\n __webpack_modules__[t].call(n.exports, n, n.exports, __w_pdfjs_require__);\\n return n.exports;\\n }\\n var __nested_webpack_exports__ = {};\\n (() => {\\n \\"use strict\\";\\n\\n var t = __nested_webpack_exports__;\\n Object.defineProperty(t, \\"__esModule\\", {\\n value: !0\\n });\\n Object.defineProperty(t, \\"AbortException\\", {\\n enumerable: !0,\\n get: function get() {\\n return e.AbortException;\\n }\\n });\\n Object.defineProperty(t, \\"AnnotationEditorLayer\\", {\\n enumerable: !0,\\n get: function get() {\\n return s.AnnotationEditorLayer;\\n }\\n });\\n Object.defineProperty(t, \\"AnnotationEditorParamsType\\", {\\n enumerable: !0,\\n get: function get() {\\n return e.AnnotationEditorParamsType;\\n }\\n });\\n Object.defineProperty(t, \\"AnnotationEditorType\\", {\\n enumerable: !0,\\n get: function get() {\\n return e.AnnotationEditorType;\\n }\\n });\\n Object.defineProperty(t, \\"AnnotationEditorUIManager\\", {\\n enumerable: !0,\\n get: function get() {\\n return a.AnnotationEditorUIManager;\\n }\\n });\\n Object.defineProperty(t, \\"AnnotationLayer\\", {\\n enumerable: !0,\\n get: function get() {\\n return o.AnnotationLayer;\\n }\\n });\\n Object.defineProperty(t, \\"AnnotationMode\\", {\\n enumerable: !0,\\n get: function get() {\\n return e.AnnotationMode;\\n }\\n });\\n Object.defineProperty(t, \\"CMapCompressionType\\", {\\n enumerable: !0,\\n get: function get() {\\n return e.CMapCompressionType;\\n }\\n });\\n Object.defineProperty(t, \\"FeatureTest\\", {\\n enumerable: !0,\\n get: function get() {\\n return e.FeatureTest;\\n }\\n });\\n Object.defineProperty(t, \\"GlobalWorkerOptions\\", {\\n enumerable: !0,\\n get: function get() {\\n return l.GlobalWorkerOptions;\\n }\\n });\\n Object.defineProperty(t, \\"ImageKind\\", {\\n enumerable: !0,\\n get: function get() {\\n return e.ImageKind;\\n }\\n });\\n Object.defineProperty(t, \\"InvalidPDFException\\", {\\n enumerable: !0,\\n get: function get() {\\n return e.InvalidPDFException;\\n }\\n });\\n Object.defineProperty(t, \\"MissingPDFException\\", {\\n enumerable: !0,\\n get: function get() {\\n return e.MissingPDFException;\\n }\\n });\\n Object.defineProperty(t, \\"OPS\\", {\\n enumerable: !0,\\n get: function get() {\\n return e.OPS;\\n }\\n });\\n Object.defineProperty(t, \\"PDFDataRangeTransport\\", {\\n enumerable: !0,\\n get: function get() {\\n return n.PDFDataRangeTransport;\\n }\\n });\\n Object.defineProperty(t, \\"PDFDateString\\", {\\n enumerable: !0,\\n get: function get() {\\n return i.PDFDateString;\\n }\\n });\\n Object.defineProperty(t, \\"PDFWorker\\", {\\n enumerable: !0,\\n get: function get() {\\n return n.PDFWorker;\\n }\\n });\\n Object.defineProperty(t, \\"PasswordResponses\\", {\\n enumerable: !0,\\n get: function get() {\\n return e.PasswordResponses;\\n }\\n });\\n Object.defineProperty(t, \\"PermissionFlag\\", {\\n enumerable: !0,\\n get: function get() {\\n return e.PermissionFlag;\\n }\\n });\\n Object.defineProperty(t, \\"PixelsPerInch\\", {\\n enumerable: !0,\\n get: function get() {\\n return i.PixelsPerInch;\\n }\\n });\\n Object.defineProperty(t, \\"PromiseCapability\\", {\\n enumerable: !0,\\n get: function get() {\\n return e.PromiseCapability;\\n }\\n });\\n Object.defineProperty(t, \\"RenderingCancelledException\\", {\\n enumerable: !0,\\n get: function get() {\\n return i.RenderingCancelledException;\\n }\\n });\\n Object.defineProperty(t, \\"SVGGraphics\\", {\\n enumerable: !0,\\n get: function get() {\\n return n.SVGGraphics;\\n }\\n });\\n Object.defineProperty(t, \\"UnexpectedResponseException\\", {\\n enumerable: !0,\\n get: function get() {\\n return e.UnexpectedResponseException;\\n }\\n });\\n Object.defineProperty(t, \\"Util\\", {\\n enumerable: !0,\\n get: function get() {\\n return e.Util;\\n }\\n });\\n Object.defineProperty(t, \\"VerbosityLevel\\", {\\n enumerable: !0,\\n get: function get() {\\n return e.VerbosityLevel;\\n }\\n });\\n Object.defineProperty(t, \\"XfaLayer\\", {\\n enumerable: !0,\\n get: function get() {\\n return c.XfaLayer;\\n }\\n });\\n Object.defineProperty(t, \\"build\\", {\\n enumerable: !0,\\n get: function get() {\\n return n.build;\\n }\\n });\\n Object.defineProperty(t, \\"createValidAbsoluteUrl\\", {\\n enumerable: !0,\\n get: function get() {\\n return e.createValidAbsoluteUrl;\\n }\\n });\\n Object.defineProperty(t, \\"getDocument\\", {\\n enumerable: !0,\\n get: function get() {\\n return n.getDocument;\\n }\\n });\\n Object.defineProperty(t, \\"getFilenameFromUrl\\", {\\n enumerable: !0,\\n get: function get() {\\n return i.getFilenameFromUrl;\\n }\\n });\\n Object.defineProperty(t, \\"getPdfFilenameFromUrl\\", {\\n enumerable: !0,\\n get: function get() {\\n return i.getPdfFilenameFromUrl;\\n }\\n });\\n Object.defineProperty(t, \\"getXfaPageViewport\\", {\\n enumerable: !0,\\n get: function get() {\\n return i.getXfaPageViewport;\\n }\\n });\\n Object.defineProperty(t, \\"isDataScheme\\", {\\n enumerable: !0,\\n get: function get() {\\n return i.isDataScheme;\\n }\\n });\\n Object.defineProperty(t, \\"isPdfFile\\", {\\n enumerable: !0,\\n get: function get() {\\n return i.isPdfFile;\\n }\\n });\\n Object.defineProperty(t, \\"loadScript\\", {\\n enumerable: !0,\\n get: function get() {\\n return i.loadScript;\\n }\\n });\\n Object.defineProperty(t, \\"normalizeUnicode\\", {\\n enumerable: !0,\\n get: function get() {\\n return e.normalizeUnicode;\\n }\\n });\\n Object.defineProperty(t, \\"renderTextLayer\\", {\\n enumerable: !0,\\n get: function get() {\\n return r.renderTextLayer;\\n }\\n });\\n Object.defineProperty(t, \\"setLayerDimensions\\", {\\n enumerable: !0,\\n get: function get() {\\n return i.setLayerDimensions;\\n }\\n });\\n Object.defineProperty(t, \\"shadow\\", {\\n enumerable: !0,\\n get: function get() {\\n return e.shadow;\\n }\\n });\\n Object.defineProperty(t, \\"updateTextLayer\\", {\\n enumerable: !0,\\n get: function get() {\\n return r.updateTextLayer;\\n }\\n });\\n Object.defineProperty(t, \\"version\\", {\\n enumerable: !0,\\n get: function get() {\\n return n.version;\\n }\\n });\\n var e = __w_pdfjs_require__(1),\\n n = __w_pdfjs_require__(124),\\n i = __w_pdfjs_require__(167),\\n r = __w_pdfjs_require__(194),\\n s = __w_pdfjs_require__(195),\\n a = __w_pdfjs_require__(164),\\n o = __w_pdfjs_require__(197),\\n l = __w_pdfjs_require__(175),\\n c = __w_pdfjs_require__(200);\\n })();\\n return __nested_webpack_exports__;\\n})());\\n\\n//# sourceURL=webpack://babel/./pdf.js?")}),"./node_modules/core-js/internals/a-callable.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \\"./node_modules/core-js/internals/is-callable.js\\");\\nvar tryToString = __webpack_require__(/*! ../internals/try-to-string */ \\"./node_modules/core-js/internals/try-to-string.js\\");\\n\\nvar $TypeError = TypeError;\\n\\n// \`Assert: IsCallable(argument) is true\`\\nmodule.exports = function (argument) {\\n if (isCallable(argument)) return argument;\\n throw $TypeError(tryToString(argument) + ' is not a function');\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/a-callable.js?")}),"./node_modules/core-js/internals/a-constructor.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar isConstructor = __webpack_require__(/*! ../internals/is-constructor */ \\"./node_modules/core-js/internals/is-constructor.js\\");\\nvar tryToString = __webpack_require__(/*! ../internals/try-to-string */ \\"./node_modules/core-js/internals/try-to-string.js\\");\\n\\nvar $TypeError = TypeError;\\n\\n// \`Assert: IsConstructor(argument) is true\`\\nmodule.exports = function (argument) {\\n if (isConstructor(argument)) return argument;\\n throw $TypeError(tryToString(argument) + ' is not a constructor');\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/a-constructor.js?")}),"./node_modules/core-js/internals/a-possible-prototype.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \\"./node_modules/core-js/internals/is-callable.js\\");\\n\\nvar $String = String;\\nvar $TypeError = TypeError;\\n\\nmodule.exports = function (argument) {\\n if (typeof argument == 'object' || isCallable(argument)) return argument;\\n throw $TypeError(\\"Can't set \\" + $String(argument) + ' as a prototype');\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/a-possible-prototype.js?")}),"./node_modules/core-js/internals/add-to-unscopables.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ \\"./node_modules/core-js/internals/well-known-symbol.js\\");\\nvar create = __webpack_require__(/*! ../internals/object-create */ \\"./node_modules/core-js/internals/object-create.js\\");\\nvar defineProperty = (__webpack_require__(/*! ../internals/object-define-property */ \\"./node_modules/core-js/internals/object-define-property.js\\").f);\\n\\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\\nvar ArrayPrototype = Array.prototype;\\n\\n// Array.prototype[@@unscopables]\\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\\nif (ArrayPrototype[UNSCOPABLES] == undefined) {\\n defineProperty(ArrayPrototype, UNSCOPABLES, {\\n configurable: true,\\n value: create(null)\\n });\\n}\\n\\n// add a key to Array.prototype[@@unscopables]\\nmodule.exports = function (key) {\\n ArrayPrototype[UNSCOPABLES][key] = true;\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/add-to-unscopables.js?")}),"./node_modules/core-js/internals/advance-string-index.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar charAt = (__webpack_require__(/*! ../internals/string-multibyte */ \\"./node_modules/core-js/internals/string-multibyte.js\\").charAt);\\n\\n// \`AdvanceStringIndex\` abstract operation\\n// https://tc39.es/ecma262/#sec-advancestringindex\\nmodule.exports = function (S, index, unicode) {\\n return index + (unicode ? charAt(S, index).length : 1);\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/advance-string-index.js?")}),"./node_modules/core-js/internals/an-instance.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar isPrototypeOf = __webpack_require__(/*! ../internals/object-is-prototype-of */ \\"./node_modules/core-js/internals/object-is-prototype-of.js\\");\\n\\nvar $TypeError = TypeError;\\n\\nmodule.exports = function (it, Prototype) {\\n if (isPrototypeOf(Prototype, it)) return it;\\n throw $TypeError('Incorrect invocation');\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/an-instance.js?")}),"./node_modules/core-js/internals/an-object.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar isObject = __webpack_require__(/*! ../internals/is-object */ \\"./node_modules/core-js/internals/is-object.js\\");\\n\\nvar $String = String;\\nvar $TypeError = TypeError;\\n\\n// \`Assert: Type(argument) is Object\`\\nmodule.exports = function (argument) {\\n if (isObject(argument)) return argument;\\n throw $TypeError($String(argument) + ' is not an object');\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/an-object.js?")}),"./node_modules/core-js/internals/array-buffer-basic-detection.js":((module)=>{eval("\\n// eslint-disable-next-line es/no-typed-arrays -- safe\\nmodule.exports = typeof ArrayBuffer != 'undefined' && typeof DataView != 'undefined';\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/array-buffer-basic-detection.js?")}),"./node_modules/core-js/internals/array-buffer-non-extensible.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\n// FF26- bug: ArrayBuffers are non-extensible, but Object.isExtensible does not report it\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\n\\nmodule.exports = fails(function () {\\n if (typeof ArrayBuffer == 'function') {\\n var buffer = new ArrayBuffer(8);\\n // eslint-disable-next-line es/no-object-isextensible, es/no-object-defineproperty -- safe\\n if (Object.isExtensible(buffer)) Object.defineProperty(buffer, 'a', { value: 8 });\\n }\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/array-buffer-non-extensible.js?")}),"./node_modules/core-js/internals/array-buffer-view-core.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar NATIVE_ARRAY_BUFFER = __webpack_require__(/*! ../internals/array-buffer-basic-detection */ \\"./node_modules/core-js/internals/array-buffer-basic-detection.js\\");\\nvar DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ \\"./node_modules/core-js/internals/descriptors.js\\");\\nvar global = __webpack_require__(/*! ../internals/global */ \\"./node_modules/core-js/internals/global.js\\");\\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \\"./node_modules/core-js/internals/is-callable.js\\");\\nvar isObject = __webpack_require__(/*! ../internals/is-object */ \\"./node_modules/core-js/internals/is-object.js\\");\\nvar hasOwn = __webpack_require__(/*! ../internals/has-own-property */ \\"./node_modules/core-js/internals/has-own-property.js\\");\\nvar classof = __webpack_require__(/*! ../internals/classof */ \\"./node_modules/core-js/internals/classof.js\\");\\nvar tryToString = __webpack_require__(/*! ../internals/try-to-string */ \\"./node_modules/core-js/internals/try-to-string.js\\");\\nvar createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ \\"./node_modules/core-js/internals/create-non-enumerable-property.js\\");\\nvar defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ \\"./node_modules/core-js/internals/define-built-in.js\\");\\nvar defineBuiltInAccessor = __webpack_require__(/*! ../internals/define-built-in-accessor */ \\"./node_modules/core-js/internals/define-built-in-accessor.js\\");\\nvar isPrototypeOf = __webpack_require__(/*! ../internals/object-is-prototype-of */ \\"./node_modules/core-js/internals/object-is-prototype-of.js\\");\\nvar getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ \\"./node_modules/core-js/internals/object-get-prototype-of.js\\");\\nvar setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ \\"./node_modules/core-js/internals/object-set-prototype-of.js\\");\\nvar wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ \\"./node_modules/core-js/internals/well-known-symbol.js\\");\\nvar uid = __webpack_require__(/*! ../internals/uid */ \\"./node_modules/core-js/internals/uid.js\\");\\nvar InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ \\"./node_modules/core-js/internals/internal-state.js\\");\\n\\nvar enforceInternalState = InternalStateModule.enforce;\\nvar getInternalState = InternalStateModule.get;\\nvar Int8Array = global.Int8Array;\\nvar Int8ArrayPrototype = Int8Array && Int8Array.prototype;\\nvar Uint8ClampedArray = global.Uint8ClampedArray;\\nvar Uint8ClampedArrayPrototype = Uint8ClampedArray && Uint8ClampedArray.prototype;\\nvar TypedArray = Int8Array && getPrototypeOf(Int8Array);\\nvar TypedArrayPrototype = Int8ArrayPrototype && getPrototypeOf(Int8ArrayPrototype);\\nvar ObjectPrototype = Object.prototype;\\nvar TypeError = global.TypeError;\\n\\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\\nvar TYPED_ARRAY_TAG = uid('TYPED_ARRAY_TAG');\\nvar TYPED_ARRAY_CONSTRUCTOR = 'TypedArrayConstructor';\\n// Fixing native typed arrays in Opera Presto crashes the browser, see #595\\nvar NATIVE_ARRAY_BUFFER_VIEWS = NATIVE_ARRAY_BUFFER && !!setPrototypeOf && classof(global.opera) !== 'Opera';\\nvar TYPED_ARRAY_TAG_REQUIRED = false;\\nvar NAME, Constructor, Prototype;\\n\\nvar TypedArrayConstructorsList = {\\n Int8Array: 1,\\n Uint8Array: 1,\\n Uint8ClampedArray: 1,\\n Int16Array: 2,\\n Uint16Array: 2,\\n Int32Array: 4,\\n Uint32Array: 4,\\n Float32Array: 4,\\n Float64Array: 8\\n};\\n\\nvar BigIntArrayConstructorsList = {\\n BigInt64Array: 8,\\n BigUint64Array: 8\\n};\\n\\nvar isView = function isView(it) {\\n if (!isObject(it)) return false;\\n var klass = classof(it);\\n return klass === 'DataView'\\n || hasOwn(TypedArrayConstructorsList, klass)\\n || hasOwn(BigIntArrayConstructorsList, klass);\\n};\\n\\nvar getTypedArrayConstructor = function (it) {\\n var proto = getPrototypeOf(it);\\n if (!isObject(proto)) return;\\n var state = getInternalState(proto);\\n return (state && hasOwn(state, TYPED_ARRAY_CONSTRUCTOR)) ? state[TYPED_ARRAY_CONSTRUCTOR] : getTypedArrayConstructor(proto);\\n};\\n\\nvar isTypedArray = function (it) {\\n if (!isObject(it)) return false;\\n var klass = classof(it);\\n return hasOwn(TypedArrayConstructorsList, klass)\\n || hasOwn(BigIntArrayConstructorsList, klass);\\n};\\n\\nvar aTypedArray = function (it) {\\n if (isTypedArray(it)) return it;\\n throw TypeError('Target is not a typed array');\\n};\\n\\nvar aTypedArrayConstructor = function (C) {\\n if (isCallable(C) && (!setPrototypeOf || isPrototypeOf(TypedArray, C))) return C;\\n throw TypeError(tryToString(C) + ' is not a typed array constructor');\\n};\\n\\nvar exportTypedArrayMethod = function (KEY, property, forced, options) {\\n if (!DESCRIPTORS) return;\\n if (forced) for (var ARRAY in TypedArrayConstructorsList) {\\n var TypedArrayConstructor = global[ARRAY];\\n if (TypedArrayConstructor && hasOwn(TypedArrayConstructor.prototype, KEY)) try {\\n delete TypedArrayConstructor.prototype[KEY];\\n } catch (error) {\\n // old WebKit bug - some methods are non-configurable\\n try {\\n TypedArrayConstructor.prototype[KEY] = property;\\n } catch (error2) { /* empty */ }\\n }\\n }\\n if (!TypedArrayPrototype[KEY] || forced) {\\n defineBuiltIn(TypedArrayPrototype, KEY, forced ? property\\n : NATIVE_ARRAY_BUFFER_VIEWS && Int8ArrayPrototype[KEY] || property, options);\\n }\\n};\\n\\nvar exportTypedArrayStaticMethod = function (KEY, property, forced) {\\n var ARRAY, TypedArrayConstructor;\\n if (!DESCRIPTORS) return;\\n if (setPrototypeOf) {\\n if (forced) for (ARRAY in TypedArrayConstructorsList) {\\n TypedArrayConstructor = global[ARRAY];\\n if (TypedArrayConstructor && hasOwn(TypedArrayConstructor, KEY)) try {\\n delete TypedArrayConstructor[KEY];\\n } catch (error) { /* empty */ }\\n }\\n if (!TypedArray[KEY] || forced) {\\n // V8 ~ Chrome 49-50 \`%TypedArray%\` methods are non-writable non-configurable\\n try {\\n return defineBuiltIn(TypedArray, KEY, forced ? property : NATIVE_ARRAY_BUFFER_VIEWS && TypedArray[KEY] || property);\\n } catch (error) { /* empty */ }\\n } else return;\\n }\\n for (ARRAY in TypedArrayConstructorsList) {\\n TypedArrayConstructor = global[ARRAY];\\n if (TypedArrayConstructor && (!TypedArrayConstructor[KEY] || forced)) {\\n defineBuiltIn(TypedArrayConstructor, KEY, property);\\n }\\n }\\n};\\n\\nfor (NAME in TypedArrayConstructorsList) {\\n Constructor = global[NAME];\\n Prototype = Constructor && Constructor.prototype;\\n if (Prototype) enforceInternalState(Prototype)[TYPED_ARRAY_CONSTRUCTOR] = Constructor;\\n else NATIVE_ARRAY_BUFFER_VIEWS = false;\\n}\\n\\nfor (NAME in BigIntArrayConstructorsList) {\\n Constructor = global[NAME];\\n Prototype = Constructor && Constructor.prototype;\\n if (Prototype) enforceInternalState(Prototype)[TYPED_ARRAY_CONSTRUCTOR] = Constructor;\\n}\\n\\n// WebKit bug - typed arrays constructors prototype is Object.prototype\\nif (!NATIVE_ARRAY_BUFFER_VIEWS || !isCallable(TypedArray) || TypedArray === Function.prototype) {\\n // eslint-disable-next-line no-shadow -- safe\\n TypedArray = function TypedArray() {\\n throw TypeError('Incorrect invocation');\\n };\\n if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\\n if (global[NAME]) setPrototypeOf(global[NAME], TypedArray);\\n }\\n}\\n\\nif (!NATIVE_ARRAY_BUFFER_VIEWS || !TypedArrayPrototype || TypedArrayPrototype === ObjectPrototype) {\\n TypedArrayPrototype = TypedArray.prototype;\\n if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\\n if (global[NAME]) setPrototypeOf(global[NAME].prototype, TypedArrayPrototype);\\n }\\n}\\n\\n// WebKit bug - one more object in Uint8ClampedArray prototype chain\\nif (NATIVE_ARRAY_BUFFER_VIEWS && getPrototypeOf(Uint8ClampedArrayPrototype) !== TypedArrayPrototype) {\\n setPrototypeOf(Uint8ClampedArrayPrototype, TypedArrayPrototype);\\n}\\n\\nif (DESCRIPTORS && !hasOwn(TypedArrayPrototype, TO_STRING_TAG)) {\\n TYPED_ARRAY_TAG_REQUIRED = true;\\n defineBuiltInAccessor(TypedArrayPrototype, TO_STRING_TAG, {\\n configurable: true,\\n get: function () {\\n return isObject(this) ? this[TYPED_ARRAY_TAG] : undefined;\\n }\\n });\\n for (NAME in TypedArrayConstructorsList) if (global[NAME]) {\\n createNonEnumerableProperty(global[NAME], TYPED_ARRAY_TAG, NAME);\\n }\\n}\\n\\nmodule.exports = {\\n NATIVE_ARRAY_BUFFER_VIEWS: NATIVE_ARRAY_BUFFER_VIEWS,\\n TYPED_ARRAY_TAG: TYPED_ARRAY_TAG_REQUIRED && TYPED_ARRAY_TAG,\\n aTypedArray: aTypedArray,\\n aTypedArrayConstructor: aTypedArrayConstructor,\\n exportTypedArrayMethod: exportTypedArrayMethod,\\n exportTypedArrayStaticMethod: exportTypedArrayStaticMethod,\\n getTypedArrayConstructor: getTypedArrayConstructor,\\n isView: isView,\\n isTypedArray: isTypedArray,\\n TypedArray: TypedArray,\\n TypedArrayPrototype: TypedArrayPrototype\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/array-buffer-view-core.js?")}),"./node_modules/core-js/internals/array-buffer.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar global = __webpack_require__(/*! ../internals/global */ \\"./node_modules/core-js/internals/global.js\\");\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\nvar DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ \\"./node_modules/core-js/internals/descriptors.js\\");\\nvar NATIVE_ARRAY_BUFFER = __webpack_require__(/*! ../internals/array-buffer-basic-detection */ \\"./node_modules/core-js/internals/array-buffer-basic-detection.js\\");\\nvar FunctionName = __webpack_require__(/*! ../internals/function-name */ \\"./node_modules/core-js/internals/function-name.js\\");\\nvar createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ \\"./node_modules/core-js/internals/create-non-enumerable-property.js\\");\\nvar defineBuiltInAccessor = __webpack_require__(/*! ../internals/define-built-in-accessor */ \\"./node_modules/core-js/internals/define-built-in-accessor.js\\");\\nvar defineBuiltIns = __webpack_require__(/*! ../internals/define-built-ins */ \\"./node_modules/core-js/internals/define-built-ins.js\\");\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\nvar anInstance = __webpack_require__(/*! ../internals/an-instance */ \\"./node_modules/core-js/internals/an-instance.js\\");\\nvar toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ \\"./node_modules/core-js/internals/to-integer-or-infinity.js\\");\\nvar toLength = __webpack_require__(/*! ../internals/to-length */ \\"./node_modules/core-js/internals/to-length.js\\");\\nvar toIndex = __webpack_require__(/*! ../internals/to-index */ \\"./node_modules/core-js/internals/to-index.js\\");\\nvar IEEE754 = __webpack_require__(/*! ../internals/ieee754 */ \\"./node_modules/core-js/internals/ieee754.js\\");\\nvar getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ \\"./node_modules/core-js/internals/object-get-prototype-of.js\\");\\nvar setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ \\"./node_modules/core-js/internals/object-set-prototype-of.js\\");\\nvar getOwnPropertyNames = (__webpack_require__(/*! ../internals/object-get-own-property-names */ \\"./node_modules/core-js/internals/object-get-own-property-names.js\\").f);\\nvar arrayFill = __webpack_require__(/*! ../internals/array-fill */ \\"./node_modules/core-js/internals/array-fill.js\\");\\nvar arraySlice = __webpack_require__(/*! ../internals/array-slice-simple */ \\"./node_modules/core-js/internals/array-slice-simple.js\\");\\nvar setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ \\"./node_modules/core-js/internals/set-to-string-tag.js\\");\\nvar InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ \\"./node_modules/core-js/internals/internal-state.js\\");\\n\\nvar PROPER_FUNCTION_NAME = FunctionName.PROPER;\\nvar CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;\\nvar ARRAY_BUFFER = 'ArrayBuffer';\\nvar DATA_VIEW = 'DataView';\\nvar PROTOTYPE = 'prototype';\\nvar WRONG_LENGTH = 'Wrong length';\\nvar WRONG_INDEX = 'Wrong index';\\nvar getInternalArrayBufferState = InternalStateModule.getterFor(ARRAY_BUFFER);\\nvar getInternalDataViewState = InternalStateModule.getterFor(DATA_VIEW);\\nvar setInternalState = InternalStateModule.set;\\nvar NativeArrayBuffer = global[ARRAY_BUFFER];\\nvar $ArrayBuffer = NativeArrayBuffer;\\nvar ArrayBufferPrototype = $ArrayBuffer && $ArrayBuffer[PROTOTYPE];\\nvar $DataView = global[DATA_VIEW];\\nvar DataViewPrototype = $DataView && $DataView[PROTOTYPE];\\nvar ObjectPrototype = Object.prototype;\\nvar Array = global.Array;\\nvar RangeError = global.RangeError;\\nvar fill = uncurryThis(arrayFill);\\nvar reverse = uncurryThis([].reverse);\\n\\nvar packIEEE754 = IEEE754.pack;\\nvar unpackIEEE754 = IEEE754.unpack;\\n\\nvar packInt8 = function (number) {\\n return [number & 0xFF];\\n};\\n\\nvar packInt16 = function (number) {\\n return [number & 0xFF, number >> 8 & 0xFF];\\n};\\n\\nvar packInt32 = function (number) {\\n return [number & 0xFF, number >> 8 & 0xFF, number >> 16 & 0xFF, number >> 24 & 0xFF];\\n};\\n\\nvar unpackInt32 = function (buffer) {\\n return buffer[3] << 24 | buffer[2] << 16 | buffer[1] << 8 | buffer[0];\\n};\\n\\nvar packFloat32 = function (number) {\\n return packIEEE754(number, 23, 4);\\n};\\n\\nvar packFloat64 = function (number) {\\n return packIEEE754(number, 52, 8);\\n};\\n\\nvar addGetter = function (Constructor, key, getInternalState) {\\n defineBuiltInAccessor(Constructor[PROTOTYPE], key, {\\n configurable: true,\\n get: function () {\\n return getInternalState(this)[key];\\n }\\n });\\n};\\n\\nvar get = function (view, count, index, isLittleEndian) {\\n var store = getInternalDataViewState(view);\\n var intIndex = toIndex(index);\\n var boolIsLittleEndian = !!isLittleEndian;\\n if (intIndex + count > store.byteLength) throw RangeError(WRONG_INDEX);\\n var bytes = store.bytes;\\n var start = intIndex + store.byteOffset;\\n var pack = arraySlice(bytes, start, start + count);\\n return boolIsLittleEndian ? pack : reverse(pack);\\n};\\n\\nvar set = function (view, count, index, conversion, value, isLittleEndian) {\\n var store = getInternalDataViewState(view);\\n var intIndex = toIndex(index);\\n var pack = conversion(+value);\\n var boolIsLittleEndian = !!isLittleEndian;\\n if (intIndex + count > store.byteLength) throw RangeError(WRONG_INDEX);\\n var bytes = store.bytes;\\n var start = intIndex + store.byteOffset;\\n for (var i = 0; i < count; i++) bytes[start + i] = pack[boolIsLittleEndian ? i : count - i - 1];\\n};\\n\\nif (!NATIVE_ARRAY_BUFFER) {\\n $ArrayBuffer = function ArrayBuffer(length) {\\n anInstance(this, ArrayBufferPrototype);\\n var byteLength = toIndex(length);\\n setInternalState(this, {\\n type: ARRAY_BUFFER,\\n bytes: fill(Array(byteLength), 0),\\n byteLength: byteLength\\n });\\n if (!DESCRIPTORS) {\\n this.byteLength = byteLength;\\n this.detached = false;\\n }\\n };\\n\\n ArrayBufferPrototype = $ArrayBuffer[PROTOTYPE];\\n\\n $DataView = function DataView(buffer, byteOffset, byteLength) {\\n anInstance(this, DataViewPrototype);\\n anInstance(buffer, ArrayBufferPrototype);\\n var bufferState = getInternalArrayBufferState(buffer);\\n var bufferLength = bufferState.byteLength;\\n var offset = toIntegerOrInfinity(byteOffset);\\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset');\\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\\n setInternalState(this, {\\n type: DATA_VIEW,\\n buffer: buffer,\\n byteLength: byteLength,\\n byteOffset: offset,\\n bytes: bufferState.bytes\\n });\\n if (!DESCRIPTORS) {\\n this.buffer = buffer;\\n this.byteLength = byteLength;\\n this.byteOffset = offset;\\n }\\n };\\n\\n DataViewPrototype = $DataView[PROTOTYPE];\\n\\n if (DESCRIPTORS) {\\n addGetter($ArrayBuffer, 'byteLength', getInternalArrayBufferState);\\n addGetter($DataView, 'buffer', getInternalDataViewState);\\n addGetter($DataView, 'byteLength', getInternalDataViewState);\\n addGetter($DataView, 'byteOffset', getInternalDataViewState);\\n }\\n\\n defineBuiltIns(DataViewPrototype, {\\n getInt8: function getInt8(byteOffset) {\\n return get(this, 1, byteOffset)[0] << 24 >> 24;\\n },\\n getUint8: function getUint8(byteOffset) {\\n return get(this, 1, byteOffset)[0];\\n },\\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\\n var bytes = get(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : false);\\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\\n },\\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\\n var bytes = get(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : false);\\n return bytes[1] << 8 | bytes[0];\\n },\\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\\n return unpackInt32(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : false));\\n },\\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\\n return unpackInt32(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : false)) >>> 0;\\n },\\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\\n return unpackIEEE754(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : false), 23);\\n },\\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\\n return unpackIEEE754(get(this, 8, byteOffset, arguments.length > 1 ? arguments[1] : false), 52);\\n },\\n setInt8: function setInt8(byteOffset, value) {\\n set(this, 1, byteOffset, packInt8, value);\\n },\\n setUint8: function setUint8(byteOffset, value) {\\n set(this, 1, byteOffset, packInt8, value);\\n },\\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\\n set(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : false);\\n },\\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\\n set(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : false);\\n },\\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\\n set(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : false);\\n },\\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\\n set(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : false);\\n },\\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\\n set(this, 4, byteOffset, packFloat32, value, arguments.length > 2 ? arguments[2] : false);\\n },\\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\\n set(this, 8, byteOffset, packFloat64, value, arguments.length > 2 ? arguments[2] : false);\\n }\\n });\\n} else {\\n var INCORRECT_ARRAY_BUFFER_NAME = PROPER_FUNCTION_NAME && NativeArrayBuffer.name !== ARRAY_BUFFER;\\n /* eslint-disable no-new -- required for testing */\\n if (!fails(function () {\\n NativeArrayBuffer(1);\\n }) || !fails(function () {\\n new NativeArrayBuffer(-1);\\n }) || fails(function () {\\n new NativeArrayBuffer();\\n new NativeArrayBuffer(1.5);\\n new NativeArrayBuffer(NaN);\\n return NativeArrayBuffer.length != 1 || INCORRECT_ARRAY_BUFFER_NAME && !CONFIGURABLE_FUNCTION_NAME;\\n })) {\\n /* eslint-enable no-new -- required for testing */\\n $ArrayBuffer = function ArrayBuffer(length) {\\n anInstance(this, ArrayBufferPrototype);\\n return new NativeArrayBuffer(toIndex(length));\\n };\\n\\n $ArrayBuffer[PROTOTYPE] = ArrayBufferPrototype;\\n\\n for (var keys = getOwnPropertyNames(NativeArrayBuffer), j = 0, key; keys.length > j;) {\\n if (!((key = keys[j++]) in $ArrayBuffer)) {\\n createNonEnumerableProperty($ArrayBuffer, key, NativeArrayBuffer[key]);\\n }\\n }\\n\\n ArrayBufferPrototype.constructor = $ArrayBuffer;\\n } else if (INCORRECT_ARRAY_BUFFER_NAME && CONFIGURABLE_FUNCTION_NAME) {\\n createNonEnumerableProperty(NativeArrayBuffer, 'name', ARRAY_BUFFER);\\n }\\n\\n // WebKit bug - the same parent prototype for typed arrays and data view\\n if (setPrototypeOf && getPrototypeOf(DataViewPrototype) !== ObjectPrototype) {\\n setPrototypeOf(DataViewPrototype, ObjectPrototype);\\n }\\n\\n // iOS Safari 7.x bug\\n var testView = new $DataView(new $ArrayBuffer(2));\\n var $setInt8 = uncurryThis(DataViewPrototype.setInt8);\\n testView.setInt8(0, 2147483648);\\n testView.setInt8(1, 2147483649);\\n if (testView.getInt8(0) || !testView.getInt8(1)) defineBuiltIns(DataViewPrototype, {\\n setInt8: function setInt8(byteOffset, value) {\\n $setInt8(this, byteOffset, value << 24 >> 24);\\n },\\n setUint8: function setUint8(byteOffset, value) {\\n $setInt8(this, byteOffset, value << 24 >> 24);\\n }\\n }, { unsafe: true });\\n}\\n\\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\\nsetToStringTag($DataView, DATA_VIEW);\\n\\nmodule.exports = {\\n ArrayBuffer: $ArrayBuffer,\\n DataView: $DataView\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/array-buffer.js?")}),"./node_modules/core-js/internals/array-fill.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar toObject = __webpack_require__(/*! ../internals/to-object */ \\"./node_modules/core-js/internals/to-object.js\\");\\nvar toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ \\"./node_modules/core-js/internals/to-absolute-index.js\\");\\nvar lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ \\"./node_modules/core-js/internals/length-of-array-like.js\\");\\n\\n// \`Array.prototype.fill\` method implementation\\n// https://tc39.es/ecma262/#sec-array.prototype.fill\\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\\n var O = toObject(this);\\n var length = lengthOfArrayLike(O);\\n var argumentsLength = arguments.length;\\n var index = toAbsoluteIndex(argumentsLength > 1 ? arguments[1] : undefined, length);\\n var end = argumentsLength > 2 ? arguments[2] : undefined;\\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\\n while (endPos > index) O[index++] = value;\\n return O;\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/array-fill.js?")}),"./node_modules/core-js/internals/array-from-constructor-and-list.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ \\"./node_modules/core-js/internals/length-of-array-like.js\\");\\n\\nmodule.exports = function (Constructor, list) {\\n var index = 0;\\n var length = lengthOfArrayLike(list);\\n var result = new Constructor(length);\\n while (length > index) result[index] = list[index++];\\n return result;\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/array-from-constructor-and-list.js?")}),"./node_modules/core-js/internals/array-from.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar bind = __webpack_require__(/*! ../internals/function-bind-context */ \\"./node_modules/core-js/internals/function-bind-context.js\\");\\nvar call = __webpack_require__(/*! ../internals/function-call */ \\"./node_modules/core-js/internals/function-call.js\\");\\nvar toObject = __webpack_require__(/*! ../internals/to-object */ \\"./node_modules/core-js/internals/to-object.js\\");\\nvar callWithSafeIterationClosing = __webpack_require__(/*! ../internals/call-with-safe-iteration-closing */ \\"./node_modules/core-js/internals/call-with-safe-iteration-closing.js\\");\\nvar isArrayIteratorMethod = __webpack_require__(/*! ../internals/is-array-iterator-method */ \\"./node_modules/core-js/internals/is-array-iterator-method.js\\");\\nvar isConstructor = __webpack_require__(/*! ../internals/is-constructor */ \\"./node_modules/core-js/internals/is-constructor.js\\");\\nvar lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ \\"./node_modules/core-js/internals/length-of-array-like.js\\");\\nvar createProperty = __webpack_require__(/*! ../internals/create-property */ \\"./node_modules/core-js/internals/create-property.js\\");\\nvar getIterator = __webpack_require__(/*! ../internals/get-iterator */ \\"./node_modules/core-js/internals/get-iterator.js\\");\\nvar getIteratorMethod = __webpack_require__(/*! ../internals/get-iterator-method */ \\"./node_modules/core-js/internals/get-iterator-method.js\\");\\n\\nvar $Array = Array;\\n\\n// \`Array.from\` method implementation\\n// https://tc39.es/ecma262/#sec-array.from\\nmodule.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\\n var O = toObject(arrayLike);\\n var IS_CONSTRUCTOR = isConstructor(this);\\n var argumentsLength = arguments.length;\\n var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\\n var mapping = mapfn !== undefined;\\n if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined);\\n var iteratorMethod = getIteratorMethod(O);\\n var index = 0;\\n var length, result, step, iterator, next, value;\\n // if the target is not iterable or it's an array with the default iterator - use a simple case\\n if (iteratorMethod && !(this === $Array && isArrayIteratorMethod(iteratorMethod))) {\\n iterator = getIterator(O, iteratorMethod);\\n next = iterator.next;\\n result = IS_CONSTRUCTOR ? new this() : [];\\n for (;!(step = call(next, iterator)).done; index++) {\\n value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;\\n createProperty(result, index, value);\\n }\\n } else {\\n length = lengthOfArrayLike(O);\\n result = IS_CONSTRUCTOR ? new this(length) : $Array(length);\\n for (;length > index; index++) {\\n value = mapping ? mapfn(O[index], index) : O[index];\\n createProperty(result, index, value);\\n }\\n }\\n result.length = index;\\n return result;\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/array-from.js?")}),"./node_modules/core-js/internals/array-includes.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ \\"./node_modules/core-js/internals/to-indexed-object.js\\");\\nvar toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ \\"./node_modules/core-js/internals/to-absolute-index.js\\");\\nvar lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ \\"./node_modules/core-js/internals/length-of-array-like.js\\");\\n\\n// \`Array.prototype.{ indexOf, includes }\` methods implementation\\nvar createMethod = function (IS_INCLUDES) {\\n return function ($this, el, fromIndex) {\\n var O = toIndexedObject($this);\\n var length = lengthOfArrayLike(O);\\n var index = toAbsoluteIndex(fromIndex, length);\\n var value;\\n // Array#includes uses SameValueZero equality algorithm\\n // eslint-disable-next-line no-self-compare -- NaN check\\n if (IS_INCLUDES && el != el) while (length > index) {\\n value = O[index++];\\n // eslint-disable-next-line no-self-compare -- NaN check\\n if (value != value) return true;\\n // Array#indexOf ignores holes, Array#includes - not\\n } else for (;length > index; index++) {\\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\\n } return !IS_INCLUDES && -1;\\n };\\n};\\n\\nmodule.exports = {\\n // \`Array.prototype.includes\` method\\n // https://tc39.es/ecma262/#sec-array.prototype.includes\\n includes: createMethod(true),\\n // \`Array.prototype.indexOf\` method\\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\\n indexOf: createMethod(false)\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/array-includes.js?")}),"./node_modules/core-js/internals/array-iteration-from-last.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar bind = __webpack_require__(/*! ../internals/function-bind-context */ \\"./node_modules/core-js/internals/function-bind-context.js\\");\\nvar IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ \\"./node_modules/core-js/internals/indexed-object.js\\");\\nvar toObject = __webpack_require__(/*! ../internals/to-object */ \\"./node_modules/core-js/internals/to-object.js\\");\\nvar lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ \\"./node_modules/core-js/internals/length-of-array-like.js\\");\\n\\n// \`Array.prototype.{ findLast, findLastIndex }\` methods implementation\\nvar createMethod = function (TYPE) {\\n var IS_FIND_LAST_INDEX = TYPE == 1;\\n return function ($this, callbackfn, that) {\\n var O = toObject($this);\\n var self = IndexedObject(O);\\n var boundFunction = bind(callbackfn, that);\\n var index = lengthOfArrayLike(self);\\n var value, result;\\n while (index-- > 0) {\\n value = self[index];\\n result = boundFunction(value, index, O);\\n if (result) switch (TYPE) {\\n case 0: return value; // findLast\\n case 1: return index; // findLastIndex\\n }\\n }\\n return IS_FIND_LAST_INDEX ? -1 : undefined;\\n };\\n};\\n\\nmodule.exports = {\\n // \`Array.prototype.findLast\` method\\n // https://github.com/tc39/proposal-array-find-from-last\\n findLast: createMethod(0),\\n // \`Array.prototype.findLastIndex\` method\\n // https://github.com/tc39/proposal-array-find-from-last\\n findLastIndex: createMethod(1)\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/array-iteration-from-last.js?")}),"./node_modules/core-js/internals/array-iteration.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar bind = __webpack_require__(/*! ../internals/function-bind-context */ \\"./node_modules/core-js/internals/function-bind-context.js\\");\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\nvar IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ \\"./node_modules/core-js/internals/indexed-object.js\\");\\nvar toObject = __webpack_require__(/*! ../internals/to-object */ \\"./node_modules/core-js/internals/to-object.js\\");\\nvar lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ \\"./node_modules/core-js/internals/length-of-array-like.js\\");\\nvar arraySpeciesCreate = __webpack_require__(/*! ../internals/array-species-create */ \\"./node_modules/core-js/internals/array-species-create.js\\");\\n\\nvar push = uncurryThis([].push);\\n\\n// \`Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }\` methods implementation\\nvar createMethod = function (TYPE) {\\n var IS_MAP = TYPE == 1;\\n var IS_FILTER = TYPE == 2;\\n var IS_SOME = TYPE == 3;\\n var IS_EVERY = TYPE == 4;\\n var IS_FIND_INDEX = TYPE == 6;\\n var IS_FILTER_REJECT = TYPE == 7;\\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\\n return function ($this, callbackfn, that, specificCreate) {\\n var O = toObject($this);\\n var self = IndexedObject(O);\\n var boundFunction = bind(callbackfn, that);\\n var length = lengthOfArrayLike(self);\\n var index = 0;\\n var create = specificCreate || arraySpeciesCreate;\\n var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined;\\n var value, result;\\n for (;length > index; index++) if (NO_HOLES || index in self) {\\n value = self[index];\\n result = boundFunction(value, index, O);\\n if (TYPE) {\\n if (IS_MAP) target[index] = result; // map\\n else if (result) switch (TYPE) {\\n case 3: return true; // some\\n case 5: return value; // find\\n case 6: return index; // findIndex\\n case 2: push(target, value); // filter\\n } else switch (TYPE) {\\n case 4: return false; // every\\n case 7: push(target, value); // filterReject\\n }\\n }\\n }\\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;\\n };\\n};\\n\\nmodule.exports = {\\n // \`Array.prototype.forEach\` method\\n // https://tc39.es/ecma262/#sec-array.prototype.foreach\\n forEach: createMethod(0),\\n // \`Array.prototype.map\` method\\n // https://tc39.es/ecma262/#sec-array.prototype.map\\n map: createMethod(1),\\n // \`Array.prototype.filter\` method\\n // https://tc39.es/ecma262/#sec-array.prototype.filter\\n filter: createMethod(2),\\n // \`Array.prototype.some\` method\\n // https://tc39.es/ecma262/#sec-array.prototype.some\\n some: createMethod(3),\\n // \`Array.prototype.every\` method\\n // https://tc39.es/ecma262/#sec-array.prototype.every\\n every: createMethod(4),\\n // \`Array.prototype.find\` method\\n // https://tc39.es/ecma262/#sec-array.prototype.find\\n find: createMethod(5),\\n // \`Array.prototype.findIndex\` method\\n // https://tc39.es/ecma262/#sec-array.prototype.findIndex\\n findIndex: createMethod(6),\\n // \`Array.prototype.filterReject\` method\\n // https://github.com/tc39/proposal-array-filtering\\n filterReject: createMethod(7)\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/array-iteration.js?")}),"./node_modules/core-js/internals/array-method-is-strict.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\n\\nmodule.exports = function (METHOD_NAME, argument) {\\n var method = [][METHOD_NAME];\\n return !!method && fails(function () {\\n // eslint-disable-next-line no-useless-call -- required for testing\\n method.call(null, argument || function () { return 1; }, 1);\\n });\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/array-method-is-strict.js?")}),"./node_modules/core-js/internals/array-set-length.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ \\"./node_modules/core-js/internals/descriptors.js\\");\\nvar isArray = __webpack_require__(/*! ../internals/is-array */ \\"./node_modules/core-js/internals/is-array.js\\");\\n\\nvar $TypeError = TypeError;\\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\\n\\n// Safari < 13 does not throw an error in this case\\nvar SILENT_ON_NON_WRITABLE_LENGTH_SET = DESCRIPTORS && !function () {\\n // makes no sense without proper strict mode support\\n if (this !== undefined) return true;\\n try {\\n // eslint-disable-next-line es/no-object-defineproperty -- safe\\n Object.defineProperty([], 'length', { writable: false }).length = 1;\\n } catch (error) {\\n return error instanceof TypeError;\\n }\\n}();\\n\\nmodule.exports = SILENT_ON_NON_WRITABLE_LENGTH_SET ? function (O, length) {\\n if (isArray(O) && !getOwnPropertyDescriptor(O, 'length').writable) {\\n throw $TypeError('Cannot set read only .length');\\n } return O.length = length;\\n} : function (O, length) {\\n return O.length = length;\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/array-set-length.js?")}),"./node_modules/core-js/internals/array-slice-simple.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ \\"./node_modules/core-js/internals/to-absolute-index.js\\");\\nvar lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ \\"./node_modules/core-js/internals/length-of-array-like.js\\");\\nvar createProperty = __webpack_require__(/*! ../internals/create-property */ \\"./node_modules/core-js/internals/create-property.js\\");\\n\\nvar $Array = Array;\\nvar max = Math.max;\\n\\nmodule.exports = function (O, start, end) {\\n var length = lengthOfArrayLike(O);\\n var k = toAbsoluteIndex(start, length);\\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\\n var result = $Array(max(fin - k, 0));\\n for (var n = 0; k < fin; k++, n++) createProperty(result, n, O[k]);\\n result.length = n;\\n return result;\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/array-slice-simple.js?")}),"./node_modules/core-js/internals/array-slice.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\n\\nmodule.exports = uncurryThis([].slice);\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/array-slice.js?")}),"./node_modules/core-js/internals/array-sort.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar arraySlice = __webpack_require__(/*! ../internals/array-slice-simple */ \\"./node_modules/core-js/internals/array-slice-simple.js\\");\\n\\nvar floor = Math.floor;\\n\\nvar mergeSort = function (array, comparefn) {\\n var length = array.length;\\n var middle = floor(length / 2);\\n return length < 8 ? insertionSort(array, comparefn) : merge(\\n array,\\n mergeSort(arraySlice(array, 0, middle), comparefn),\\n mergeSort(arraySlice(array, middle), comparefn),\\n comparefn\\n );\\n};\\n\\nvar insertionSort = function (array, comparefn) {\\n var length = array.length;\\n var i = 1;\\n var element, j;\\n\\n while (i < length) {\\n j = i;\\n element = array[i];\\n while (j && comparefn(array[j - 1], element) > 0) {\\n array[j] = array[--j];\\n }\\n if (j !== i++) array[j] = element;\\n } return array;\\n};\\n\\nvar merge = function (array, left, right, comparefn) {\\n var llength = left.length;\\n var rlength = right.length;\\n var lindex = 0;\\n var rindex = 0;\\n\\n while (lindex < llength || rindex < rlength) {\\n array[lindex + rindex] = (lindex < llength && rindex < rlength)\\n ? comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++]\\n : lindex < llength ? left[lindex++] : right[rindex++];\\n } return array;\\n};\\n\\nmodule.exports = mergeSort;\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/array-sort.js?")}),"./node_modules/core-js/internals/array-species-constructor.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar isArray = __webpack_require__(/*! ../internals/is-array */ \\"./node_modules/core-js/internals/is-array.js\\");\\nvar isConstructor = __webpack_require__(/*! ../internals/is-constructor */ \\"./node_modules/core-js/internals/is-constructor.js\\");\\nvar isObject = __webpack_require__(/*! ../internals/is-object */ \\"./node_modules/core-js/internals/is-object.js\\");\\nvar wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ \\"./node_modules/core-js/internals/well-known-symbol.js\\");\\n\\nvar SPECIES = wellKnownSymbol('species');\\nvar $Array = Array;\\n\\n// a part of \`ArraySpeciesCreate\` abstract operation\\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\\nmodule.exports = function (originalArray) {\\n var C;\\n if (isArray(originalArray)) {\\n C = originalArray.constructor;\\n // cross-realm fallback\\n if (isConstructor(C) && (C === $Array || isArray(C.prototype))) C = undefined;\\n else if (isObject(C)) {\\n C = C[SPECIES];\\n if (C === null) C = undefined;\\n }\\n } return C === undefined ? $Array : C;\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/array-species-constructor.js?")}),"./node_modules/core-js/internals/array-species-create.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar arraySpeciesConstructor = __webpack_require__(/*! ../internals/array-species-constructor */ \\"./node_modules/core-js/internals/array-species-constructor.js\\");\\n\\n// \`ArraySpeciesCreate\` abstract operation\\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\\nmodule.exports = function (originalArray, length) {\\n return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length);\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/array-species-create.js?")}),"./node_modules/core-js/internals/array-to-reversed.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ \\"./node_modules/core-js/internals/length-of-array-like.js\\");\\n\\n// https://tc39.es/proposal-change-array-by-copy/#sec-array.prototype.toReversed\\n// https://tc39.es/proposal-change-array-by-copy/#sec-%typedarray%.prototype.toReversed\\nmodule.exports = function (O, C) {\\n var len = lengthOfArrayLike(O);\\n var A = new C(len);\\n var k = 0;\\n for (; k < len; k++) A[k] = O[len - k - 1];\\n return A;\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/array-to-reversed.js?")}),"./node_modules/core-js/internals/array-with.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ \\"./node_modules/core-js/internals/length-of-array-like.js\\");\\nvar toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ \\"./node_modules/core-js/internals/to-integer-or-infinity.js\\");\\n\\nvar $RangeError = RangeError;\\n\\n// https://tc39.es/proposal-change-array-by-copy/#sec-array.prototype.with\\n// https://tc39.es/proposal-change-array-by-copy/#sec-%typedarray%.prototype.with\\nmodule.exports = function (O, C, index, value) {\\n var len = lengthOfArrayLike(O);\\n var relativeIndex = toIntegerOrInfinity(index);\\n var actualIndex = relativeIndex < 0 ? len + relativeIndex : relativeIndex;\\n if (actualIndex >= len || actualIndex < 0) throw $RangeError('Incorrect index');\\n var A = new C(len);\\n var k = 0;\\n for (; k < len; k++) A[k] = k === actualIndex ? value : O[k];\\n return A;\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/array-with.js?")}),"./node_modules/core-js/internals/call-with-safe-iteration-closing.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar anObject = __webpack_require__(/*! ../internals/an-object */ \\"./node_modules/core-js/internals/an-object.js\\");\\nvar iteratorClose = __webpack_require__(/*! ../internals/iterator-close */ \\"./node_modules/core-js/internals/iterator-close.js\\");\\n\\n// call something on iterator step with safe closing on error\\nmodule.exports = function (iterator, fn, value, ENTRIES) {\\n try {\\n return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);\\n } catch (error) {\\n iteratorClose(iterator, 'throw', error);\\n }\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/call-with-safe-iteration-closing.js?")}),"./node_modules/core-js/internals/check-correctness-of-iteration.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ \\"./node_modules/core-js/internals/well-known-symbol.js\\");\\n\\nvar ITERATOR = wellKnownSymbol('iterator');\\nvar SAFE_CLOSING = false;\\n\\ntry {\\n var called = 0;\\n var iteratorWithReturn = {\\n next: function () {\\n return { done: !!called++ };\\n },\\n 'return': function () {\\n SAFE_CLOSING = true;\\n }\\n };\\n iteratorWithReturn[ITERATOR] = function () {\\n return this;\\n };\\n // eslint-disable-next-line es/no-array-from, no-throw-literal -- required for testing\\n Array.from(iteratorWithReturn, function () { throw 2; });\\n} catch (error) { /* empty */ }\\n\\nmodule.exports = function (exec, SKIP_CLOSING) {\\n if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\\n var ITERATION_SUPPORT = false;\\n try {\\n var object = {};\\n object[ITERATOR] = function () {\\n return {\\n next: function () {\\n return { done: ITERATION_SUPPORT = true };\\n }\\n };\\n };\\n exec(object);\\n } catch (error) { /* empty */ }\\n return ITERATION_SUPPORT;\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/check-correctness-of-iteration.js?")}),"./node_modules/core-js/internals/classof-raw.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\n\\nvar toString = uncurryThis({}.toString);\\nvar stringSlice = uncurryThis(''.slice);\\n\\nmodule.exports = function (it) {\\n return stringSlice(toString(it), 8, -1);\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/classof-raw.js?")}),"./node_modules/core-js/internals/classof.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ \\"./node_modules/core-js/internals/to-string-tag-support.js\\");\\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \\"./node_modules/core-js/internals/is-callable.js\\");\\nvar classofRaw = __webpack_require__(/*! ../internals/classof-raw */ \\"./node_modules/core-js/internals/classof-raw.js\\");\\nvar wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ \\"./node_modules/core-js/internals/well-known-symbol.js\\");\\n\\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\\nvar $Object = Object;\\n\\n// ES3 wrong here\\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\\n\\n// fallback for IE11 Script Access Denied error\\nvar tryGet = function (it, key) {\\n try {\\n return it[key];\\n } catch (error) { /* empty */ }\\n};\\n\\n// getting tag from ES6+ \`Object.prototype.toString\`\\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\\n var O, tag, result;\\n return it === undefined ? 'Undefined' : it === null ? 'Null'\\n // @@toStringTag case\\n : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == 'string' ? tag\\n // builtinTag case\\n : CORRECT_ARGUMENTS ? classofRaw(O)\\n // ES3 arguments fallback\\n : (result = classofRaw(O)) == 'Object' && isCallable(O.callee) ? 'Arguments' : result;\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/classof.js?")}),"./node_modules/core-js/internals/collection-weak.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\nvar defineBuiltIns = __webpack_require__(/*! ../internals/define-built-ins */ \\"./node_modules/core-js/internals/define-built-ins.js\\");\\nvar getWeakData = (__webpack_require__(/*! ../internals/internal-metadata */ \\"./node_modules/core-js/internals/internal-metadata.js\\").getWeakData);\\nvar anInstance = __webpack_require__(/*! ../internals/an-instance */ \\"./node_modules/core-js/internals/an-instance.js\\");\\nvar anObject = __webpack_require__(/*! ../internals/an-object */ \\"./node_modules/core-js/internals/an-object.js\\");\\nvar isNullOrUndefined = __webpack_require__(/*! ../internals/is-null-or-undefined */ \\"./node_modules/core-js/internals/is-null-or-undefined.js\\");\\nvar isObject = __webpack_require__(/*! ../internals/is-object */ \\"./node_modules/core-js/internals/is-object.js\\");\\nvar iterate = __webpack_require__(/*! ../internals/iterate */ \\"./node_modules/core-js/internals/iterate.js\\");\\nvar ArrayIterationModule = __webpack_require__(/*! ../internals/array-iteration */ \\"./node_modules/core-js/internals/array-iteration.js\\");\\nvar hasOwn = __webpack_require__(/*! ../internals/has-own-property */ \\"./node_modules/core-js/internals/has-own-property.js\\");\\nvar InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ \\"./node_modules/core-js/internals/internal-state.js\\");\\n\\nvar setInternalState = InternalStateModule.set;\\nvar internalStateGetterFor = InternalStateModule.getterFor;\\nvar find = ArrayIterationModule.find;\\nvar findIndex = ArrayIterationModule.findIndex;\\nvar splice = uncurryThis([].splice);\\nvar id = 0;\\n\\n// fallback for uncaught frozen keys\\nvar uncaughtFrozenStore = function (state) {\\n return state.frozen || (state.frozen = new UncaughtFrozenStore());\\n};\\n\\nvar UncaughtFrozenStore = function () {\\n this.entries = [];\\n};\\n\\nvar findUncaughtFrozen = function (store, key) {\\n return find(store.entries, function (it) {\\n return it[0] === key;\\n });\\n};\\n\\nUncaughtFrozenStore.prototype = {\\n get: function (key) {\\n var entry = findUncaughtFrozen(this, key);\\n if (entry) return entry[1];\\n },\\n has: function (key) {\\n return !!findUncaughtFrozen(this, key);\\n },\\n set: function (key, value) {\\n var entry = findUncaughtFrozen(this, key);\\n if (entry) entry[1] = value;\\n else this.entries.push([key, value]);\\n },\\n 'delete': function (key) {\\n var index = findIndex(this.entries, function (it) {\\n return it[0] === key;\\n });\\n if (~index) splice(this.entries, index, 1);\\n return !!~index;\\n }\\n};\\n\\nmodule.exports = {\\n getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\\n var Constructor = wrapper(function (that, iterable) {\\n anInstance(that, Prototype);\\n setInternalState(that, {\\n type: CONSTRUCTOR_NAME,\\n id: id++,\\n frozen: undefined\\n });\\n if (!isNullOrUndefined(iterable)) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\\n });\\n\\n var Prototype = Constructor.prototype;\\n\\n var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\\n\\n var define = function (that, key, value) {\\n var state = getInternalState(that);\\n var data = getWeakData(anObject(key), true);\\n if (data === true) uncaughtFrozenStore(state).set(key, value);\\n else data[state.id] = value;\\n return that;\\n };\\n\\n defineBuiltIns(Prototype, {\\n // \`{ WeakMap, WeakSet }.prototype.delete(key)\` methods\\n // https://tc39.es/ecma262/#sec-weakmap.prototype.delete\\n // https://tc39.es/ecma262/#sec-weakset.prototype.delete\\n 'delete': function (key) {\\n var state = getInternalState(this);\\n if (!isObject(key)) return false;\\n var data = getWeakData(key);\\n if (data === true) return uncaughtFrozenStore(state)['delete'](key);\\n return data && hasOwn(data, state.id) && delete data[state.id];\\n },\\n // \`{ WeakMap, WeakSet }.prototype.has(key)\` methods\\n // https://tc39.es/ecma262/#sec-weakmap.prototype.has\\n // https://tc39.es/ecma262/#sec-weakset.prototype.has\\n has: function has(key) {\\n var state = getInternalState(this);\\n if (!isObject(key)) return false;\\n var data = getWeakData(key);\\n if (data === true) return uncaughtFrozenStore(state).has(key);\\n return data && hasOwn(data, state.id);\\n }\\n });\\n\\n defineBuiltIns(Prototype, IS_MAP ? {\\n // \`WeakMap.prototype.get(key)\` method\\n // https://tc39.es/ecma262/#sec-weakmap.prototype.get\\n get: function get(key) {\\n var state = getInternalState(this);\\n if (isObject(key)) {\\n var data = getWeakData(key);\\n if (data === true) return uncaughtFrozenStore(state).get(key);\\n return data ? data[state.id] : undefined;\\n }\\n },\\n // \`WeakMap.prototype.set(key, value)\` method\\n // https://tc39.es/ecma262/#sec-weakmap.prototype.set\\n set: function set(key, value) {\\n return define(this, key, value);\\n }\\n } : {\\n // \`WeakSet.prototype.add(value)\` method\\n // https://tc39.es/ecma262/#sec-weakset.prototype.add\\n add: function add(value) {\\n return define(this, value, true);\\n }\\n });\\n\\n return Constructor;\\n }\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/collection-weak.js?")}),"./node_modules/core-js/internals/collection.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar global = __webpack_require__(/*! ../internals/global */ \\"./node_modules/core-js/internals/global.js\\");\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\nvar isForced = __webpack_require__(/*! ../internals/is-forced */ \\"./node_modules/core-js/internals/is-forced.js\\");\\nvar defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ \\"./node_modules/core-js/internals/define-built-in.js\\");\\nvar InternalMetadataModule = __webpack_require__(/*! ../internals/internal-metadata */ \\"./node_modules/core-js/internals/internal-metadata.js\\");\\nvar iterate = __webpack_require__(/*! ../internals/iterate */ \\"./node_modules/core-js/internals/iterate.js\\");\\nvar anInstance = __webpack_require__(/*! ../internals/an-instance */ \\"./node_modules/core-js/internals/an-instance.js\\");\\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \\"./node_modules/core-js/internals/is-callable.js\\");\\nvar isNullOrUndefined = __webpack_require__(/*! ../internals/is-null-or-undefined */ \\"./node_modules/core-js/internals/is-null-or-undefined.js\\");\\nvar isObject = __webpack_require__(/*! ../internals/is-object */ \\"./node_modules/core-js/internals/is-object.js\\");\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\nvar checkCorrectnessOfIteration = __webpack_require__(/*! ../internals/check-correctness-of-iteration */ \\"./node_modules/core-js/internals/check-correctness-of-iteration.js\\");\\nvar setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ \\"./node_modules/core-js/internals/set-to-string-tag.js\\");\\nvar inheritIfRequired = __webpack_require__(/*! ../internals/inherit-if-required */ \\"./node_modules/core-js/internals/inherit-if-required.js\\");\\n\\nmodule.exports = function (CONSTRUCTOR_NAME, wrapper, common) {\\n var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1;\\n var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1;\\n var ADDER = IS_MAP ? 'set' : 'add';\\n var NativeConstructor = global[CONSTRUCTOR_NAME];\\n var NativePrototype = NativeConstructor && NativeConstructor.prototype;\\n var Constructor = NativeConstructor;\\n var exported = {};\\n\\n var fixMethod = function (KEY) {\\n var uncurriedNativeMethod = uncurryThis(NativePrototype[KEY]);\\n defineBuiltIn(NativePrototype, KEY,\\n KEY == 'add' ? function add(value) {\\n uncurriedNativeMethod(this, value === 0 ? 0 : value);\\n return this;\\n } : KEY == 'delete' ? function (key) {\\n return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);\\n } : KEY == 'get' ? function get(key) {\\n return IS_WEAK && !isObject(key) ? undefined : uncurriedNativeMethod(this, key === 0 ? 0 : key);\\n } : KEY == 'has' ? function has(key) {\\n return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);\\n } : function set(key, value) {\\n uncurriedNativeMethod(this, key === 0 ? 0 : key, value);\\n return this;\\n }\\n );\\n };\\n\\n var REPLACE = isForced(\\n CONSTRUCTOR_NAME,\\n !isCallable(NativeConstructor) || !(IS_WEAK || NativePrototype.forEach && !fails(function () {\\n new NativeConstructor().entries().next();\\n }))\\n );\\n\\n if (REPLACE) {\\n // create collection constructor\\n Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);\\n InternalMetadataModule.enable();\\n } else if (isForced(CONSTRUCTOR_NAME, true)) {\\n var instance = new Constructor();\\n // early implementations not supports chaining\\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\\n // most early implementations doesn't supports iterables, most modern - not close it correctly\\n // eslint-disable-next-line no-new -- required for testing\\n var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function (iterable) { new NativeConstructor(iterable); });\\n // for early implementations -0 and +0 not the same\\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\\n // V8 ~ Chromium 42- fails only with 5+ elements\\n var $instance = new NativeConstructor();\\n var index = 5;\\n while (index--) $instance[ADDER](index, index);\\n return !$instance.has(-0);\\n });\\n\\n if (!ACCEPT_ITERABLES) {\\n Constructor = wrapper(function (dummy, iterable) {\\n anInstance(dummy, NativePrototype);\\n var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor);\\n if (!isNullOrUndefined(iterable)) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\\n return that;\\n });\\n Constructor.prototype = NativePrototype;\\n NativePrototype.constructor = Constructor;\\n }\\n\\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\\n fixMethod('delete');\\n fixMethod('has');\\n IS_MAP && fixMethod('get');\\n }\\n\\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\\n\\n // weak collections should not contains .clear method\\n if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear;\\n }\\n\\n exported[CONSTRUCTOR_NAME] = Constructor;\\n $({ global: true, constructor: true, forced: Constructor != NativeConstructor }, exported);\\n\\n setToStringTag(Constructor, CONSTRUCTOR_NAME);\\n\\n if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);\\n\\n return Constructor;\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/collection.js?")}),"./node_modules/core-js/internals/copy-constructor-properties.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar hasOwn = __webpack_require__(/*! ../internals/has-own-property */ \\"./node_modules/core-js/internals/has-own-property.js\\");\\nvar ownKeys = __webpack_require__(/*! ../internals/own-keys */ \\"./node_modules/core-js/internals/own-keys.js\\");\\nvar getOwnPropertyDescriptorModule = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ \\"./node_modules/core-js/internals/object-get-own-property-descriptor.js\\");\\nvar definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ \\"./node_modules/core-js/internals/object-define-property.js\\");\\n\\nmodule.exports = function (target, source, exceptions) {\\n var keys = ownKeys(source);\\n var defineProperty = definePropertyModule.f;\\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\\n for (var i = 0; i < keys.length; i++) {\\n var key = keys[i];\\n if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) {\\n defineProperty(target, key, getOwnPropertyDescriptor(source, key));\\n }\\n }\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/copy-constructor-properties.js?")}),"./node_modules/core-js/internals/correct-is-regexp-logic.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ \\"./node_modules/core-js/internals/well-known-symbol.js\\");\\n\\nvar MATCH = wellKnownSymbol('match');\\n\\nmodule.exports = function (METHOD_NAME) {\\n var regexp = /./;\\n try {\\n '/./'[METHOD_NAME](regexp);\\n } catch (error1) {\\n try {\\n regexp[MATCH] = false;\\n return '/./'[METHOD_NAME](regexp);\\n } catch (error2) { /* empty */ }\\n } return false;\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/correct-is-regexp-logic.js?")}),"./node_modules/core-js/internals/correct-prototype-getter.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\n\\nmodule.exports = !fails(function () {\\n function F() { /* empty */ }\\n F.prototype.constructor = null;\\n // eslint-disable-next-line es/no-object-getprototypeof -- required for testing\\n return Object.getPrototypeOf(new F()) !== F.prototype;\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/correct-prototype-getter.js?")}),"./node_modules/core-js/internals/create-iter-result-object.js":((module)=>{eval("\\n// \`CreateIterResultObject\` abstract operation\\n// https://tc39.es/ecma262/#sec-createiterresultobject\\nmodule.exports = function (value, done) {\\n return { value: value, done: done };\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/create-iter-result-object.js?")}),"./node_modules/core-js/internals/create-non-enumerable-property.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ \\"./node_modules/core-js/internals/descriptors.js\\");\\nvar definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ \\"./node_modules/core-js/internals/object-define-property.js\\");\\nvar createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ \\"./node_modules/core-js/internals/create-property-descriptor.js\\");\\n\\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\\n} : function (object, key, value) {\\n object[key] = value;\\n return object;\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/create-non-enumerable-property.js?")}),"./node_modules/core-js/internals/create-property-descriptor.js":((module)=>{eval("\\nmodule.exports = function (bitmap, value) {\\n return {\\n enumerable: !(bitmap & 1),\\n configurable: !(bitmap & 2),\\n writable: !(bitmap & 4),\\n value: value\\n };\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/create-property-descriptor.js?")}),"./node_modules/core-js/internals/create-property.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar toPropertyKey = __webpack_require__(/*! ../internals/to-property-key */ \\"./node_modules/core-js/internals/to-property-key.js\\");\\nvar definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ \\"./node_modules/core-js/internals/object-define-property.js\\");\\nvar createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ \\"./node_modules/core-js/internals/create-property-descriptor.js\\");\\n\\nmodule.exports = function (object, key, value) {\\n var propertyKey = toPropertyKey(key);\\n if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\\n else object[propertyKey] = value;\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/create-property.js?")}),"./node_modules/core-js/internals/define-built-in-accessor.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar makeBuiltIn = __webpack_require__(/*! ../internals/make-built-in */ \\"./node_modules/core-js/internals/make-built-in.js\\");\\nvar defineProperty = __webpack_require__(/*! ../internals/object-define-property */ \\"./node_modules/core-js/internals/object-define-property.js\\");\\n\\nmodule.exports = function (target, name, descriptor) {\\n if (descriptor.get) makeBuiltIn(descriptor.get, name, { getter: true });\\n if (descriptor.set) makeBuiltIn(descriptor.set, name, { setter: true });\\n return defineProperty.f(target, name, descriptor);\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/define-built-in-accessor.js?")}),"./node_modules/core-js/internals/define-built-in.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \\"./node_modules/core-js/internals/is-callable.js\\");\\nvar definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ \\"./node_modules/core-js/internals/object-define-property.js\\");\\nvar makeBuiltIn = __webpack_require__(/*! ../internals/make-built-in */ \\"./node_modules/core-js/internals/make-built-in.js\\");\\nvar defineGlobalProperty = __webpack_require__(/*! ../internals/define-global-property */ \\"./node_modules/core-js/internals/define-global-property.js\\");\\n\\nmodule.exports = function (O, key, value, options) {\\n if (!options) options = {};\\n var simple = options.enumerable;\\n var name = options.name !== undefined ? options.name : key;\\n if (isCallable(value)) makeBuiltIn(value, name, options);\\n if (options.global) {\\n if (simple) O[key] = value;\\n else defineGlobalProperty(key, value);\\n } else {\\n try {\\n if (!options.unsafe) delete O[key];\\n else if (O[key]) simple = true;\\n } catch (error) { /* empty */ }\\n if (simple) O[key] = value;\\n else definePropertyModule.f(O, key, {\\n value: value,\\n enumerable: false,\\n configurable: !options.nonConfigurable,\\n writable: !options.nonWritable\\n });\\n } return O;\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/define-built-in.js?")}),"./node_modules/core-js/internals/define-built-ins.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ \\"./node_modules/core-js/internals/define-built-in.js\\");\\n\\nmodule.exports = function (target, src, options) {\\n for (var key in src) defineBuiltIn(target, key, src[key], options);\\n return target;\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/define-built-ins.js?")}),"./node_modules/core-js/internals/define-global-property.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar global = __webpack_require__(/*! ../internals/global */ \\"./node_modules/core-js/internals/global.js\\");\\n\\n// eslint-disable-next-line es/no-object-defineproperty -- safe\\nvar defineProperty = Object.defineProperty;\\n\\nmodule.exports = function (key, value) {\\n try {\\n defineProperty(global, key, { value: value, configurable: true, writable: true });\\n } catch (error) {\\n global[key] = value;\\n } return value;\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/define-global-property.js?")}),"./node_modules/core-js/internals/delete-property-or-throw.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar tryToString = __webpack_require__(/*! ../internals/try-to-string */ \\"./node_modules/core-js/internals/try-to-string.js\\");\\n\\nvar $TypeError = TypeError;\\n\\nmodule.exports = function (O, P) {\\n if (!delete O[P]) throw $TypeError('Cannot delete property ' + tryToString(P) + ' of ' + tryToString(O));\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/delete-property-or-throw.js?")}),"./node_modules/core-js/internals/descriptors.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\n\\n// Detect IE8's incomplete defineProperty implementation\\nmodule.exports = !fails(function () {\\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/descriptors.js?")}),"./node_modules/core-js/internals/document-all.js":((module)=>{eval("\\nvar documentAll = typeof document == 'object' && document.all;\\n\\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot\\n// eslint-disable-next-line unicorn/no-typeof-undefined -- required for testing\\nvar IS_HTMLDDA = typeof documentAll == 'undefined' && documentAll !== undefined;\\n\\nmodule.exports = {\\n all: documentAll,\\n IS_HTMLDDA: IS_HTMLDDA\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/document-all.js?")}),"./node_modules/core-js/internals/document-create-element.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar global = __webpack_require__(/*! ../internals/global */ \\"./node_modules/core-js/internals/global.js\\");\\nvar isObject = __webpack_require__(/*! ../internals/is-object */ \\"./node_modules/core-js/internals/is-object.js\\");\\n\\nvar document = global.document;\\n// typeof document.createElement is 'object' in old IE\\nvar EXISTS = isObject(document) && isObject(document.createElement);\\n\\nmodule.exports = function (it) {\\n return EXISTS ? document.createElement(it) : {};\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/document-create-element.js?")}),"./node_modules/core-js/internals/does-not-exceed-safe-integer.js":((module)=>{eval("\\nvar $TypeError = TypeError;\\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; // 2 ** 53 - 1 == 9007199254740991\\n\\nmodule.exports = function (it) {\\n if (it > MAX_SAFE_INTEGER) throw $TypeError('Maximum allowed index exceeded');\\n return it;\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/does-not-exceed-safe-integer.js?")}),"./node_modules/core-js/internals/dom-exception-constants.js":((module)=>{eval("\\nmodule.exports = {\\n IndexSizeError: { s: 'INDEX_SIZE_ERR', c: 1, m: 1 },\\n DOMStringSizeError: { s: 'DOMSTRING_SIZE_ERR', c: 2, m: 0 },\\n HierarchyRequestError: { s: 'HIERARCHY_REQUEST_ERR', c: 3, m: 1 },\\n WrongDocumentError: { s: 'WRONG_DOCUMENT_ERR', c: 4, m: 1 },\\n InvalidCharacterError: { s: 'INVALID_CHARACTER_ERR', c: 5, m: 1 },\\n NoDataAllowedError: { s: 'NO_DATA_ALLOWED_ERR', c: 6, m: 0 },\\n NoModificationAllowedError: { s: 'NO_MODIFICATION_ALLOWED_ERR', c: 7, m: 1 },\\n NotFoundError: { s: 'NOT_FOUND_ERR', c: 8, m: 1 },\\n NotSupportedError: { s: 'NOT_SUPPORTED_ERR', c: 9, m: 1 },\\n InUseAttributeError: { s: 'INUSE_ATTRIBUTE_ERR', c: 10, m: 1 },\\n InvalidStateError: { s: 'INVALID_STATE_ERR', c: 11, m: 1 },\\n SyntaxError: { s: 'SYNTAX_ERR', c: 12, m: 1 },\\n InvalidModificationError: { s: 'INVALID_MODIFICATION_ERR', c: 13, m: 1 },\\n NamespaceError: { s: 'NAMESPACE_ERR', c: 14, m: 1 },\\n InvalidAccessError: { s: 'INVALID_ACCESS_ERR', c: 15, m: 1 },\\n ValidationError: { s: 'VALIDATION_ERR', c: 16, m: 0 },\\n TypeMismatchError: { s: 'TYPE_MISMATCH_ERR', c: 17, m: 1 },\\n SecurityError: { s: 'SECURITY_ERR', c: 18, m: 1 },\\n NetworkError: { s: 'NETWORK_ERR', c: 19, m: 1 },\\n AbortError: { s: 'ABORT_ERR', c: 20, m: 1 },\\n URLMismatchError: { s: 'URL_MISMATCH_ERR', c: 21, m: 1 },\\n QuotaExceededError: { s: 'QUOTA_EXCEEDED_ERR', c: 22, m: 1 },\\n TimeoutError: { s: 'TIMEOUT_ERR', c: 23, m: 1 },\\n InvalidNodeTypeError: { s: 'INVALID_NODE_TYPE_ERR', c: 24, m: 1 },\\n DataCloneError: { s: 'DATA_CLONE_ERR', c: 25, m: 1 }\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/dom-exception-constants.js?")}),"./node_modules/core-js/internals/dom-iterables.js":((module)=>{eval("\\n// iterable DOM collections\\n// flag - \`iterable\` interface - 'entries', 'keys', 'values', 'forEach' methods\\nmodule.exports = {\\n CSSRuleList: 0,\\n CSSStyleDeclaration: 0,\\n CSSValueList: 0,\\n ClientRectList: 0,\\n DOMRectList: 0,\\n DOMStringList: 0,\\n DOMTokenList: 1,\\n DataTransferItemList: 0,\\n FileList: 0,\\n HTMLAllCollection: 0,\\n HTMLCollection: 0,\\n HTMLFormElement: 0,\\n HTMLSelectElement: 0,\\n MediaList: 0,\\n MimeTypeArray: 0,\\n NamedNodeMap: 0,\\n NodeList: 1,\\n PaintRequestList: 0,\\n Plugin: 0,\\n PluginArray: 0,\\n SVGLengthList: 0,\\n SVGNumberList: 0,\\n SVGPathSegList: 0,\\n SVGPointList: 0,\\n SVGStringList: 0,\\n SVGTransformList: 0,\\n SourceBufferList: 0,\\n StyleSheetList: 0,\\n TextTrackCueList: 0,\\n TextTrackList: 0,\\n TouchList: 0\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/dom-iterables.js?")}),"./node_modules/core-js/internals/dom-token-list-prototype.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\n// in old WebKit versions, \`element.classList\` is not an instance of global \`DOMTokenList\`\\nvar documentCreateElement = __webpack_require__(/*! ../internals/document-create-element */ \\"./node_modules/core-js/internals/document-create-element.js\\");\\n\\nvar classList = documentCreateElement('span').classList;\\nvar DOMTokenListPrototype = classList && classList.constructor && classList.constructor.prototype;\\n\\nmodule.exports = DOMTokenListPrototype === Object.prototype ? undefined : DOMTokenListPrototype;\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/dom-token-list-prototype.js?")}),"./node_modules/core-js/internals/engine-ff-version.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ \\"./node_modules/core-js/internals/engine-user-agent.js\\");\\n\\nvar firefox = userAgent.match(/firefox\\\\/(\\\\d+)/i);\\n\\nmodule.exports = !!firefox && +firefox[1];\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/engine-ff-version.js?")}),"./node_modules/core-js/internals/engine-is-browser.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar IS_DENO = __webpack_require__(/*! ../internals/engine-is-deno */ \\"./node_modules/core-js/internals/engine-is-deno.js\\");\\nvar IS_NODE = __webpack_require__(/*! ../internals/engine-is-node */ \\"./node_modules/core-js/internals/engine-is-node.js\\");\\n\\nmodule.exports = !IS_DENO && !IS_NODE\\n && typeof window == 'object'\\n && typeof document == 'object';\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/engine-is-browser.js?")}),"./node_modules/core-js/internals/engine-is-deno.js":((module)=>{eval("\\n/* global Deno -- Deno case */\\nmodule.exports = typeof Deno == 'object' && Deno && typeof Deno.version == 'object';\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/engine-is-deno.js?")}),"./node_modules/core-js/internals/engine-is-ie-or-edge.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar UA = __webpack_require__(/*! ../internals/engine-user-agent */ \\"./node_modules/core-js/internals/engine-user-agent.js\\");\\n\\nmodule.exports = /MSIE|Trident/.test(UA);\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/engine-is-ie-or-edge.js?")}),"./node_modules/core-js/internals/engine-is-ios-pebble.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ \\"./node_modules/core-js/internals/engine-user-agent.js\\");\\n\\nmodule.exports = /ipad|iphone|ipod/i.test(userAgent) && typeof Pebble != 'undefined';\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/engine-is-ios-pebble.js?")}),"./node_modules/core-js/internals/engine-is-ios.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ \\"./node_modules/core-js/internals/engine-user-agent.js\\");\\n\\n// eslint-disable-next-line redos/no-vulnerable -- safe\\nmodule.exports = /(?:ipad|iphone|ipod).*applewebkit/i.test(userAgent);\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/engine-is-ios.js?")}),"./node_modules/core-js/internals/engine-is-node.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar classof = __webpack_require__(/*! ../internals/classof-raw */ \\"./node_modules/core-js/internals/classof-raw.js\\");\\n\\nmodule.exports = typeof process != 'undefined' && classof(process) == 'process';\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/engine-is-node.js?")}),"./node_modules/core-js/internals/engine-is-webos-webkit.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ \\"./node_modules/core-js/internals/engine-user-agent.js\\");\\n\\nmodule.exports = /web0s(?!.*chrome)/i.test(userAgent);\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/engine-is-webos-webkit.js?")}),"./node_modules/core-js/internals/engine-user-agent.js":((module)=>{eval("\\nmodule.exports = typeof navigator != 'undefined' && String(navigator.userAgent) || '';\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/engine-user-agent.js?")}),"./node_modules/core-js/internals/engine-v8-version.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar global = __webpack_require__(/*! ../internals/global */ \\"./node_modules/core-js/internals/global.js\\");\\nvar userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ \\"./node_modules/core-js/internals/engine-user-agent.js\\");\\n\\nvar process = global.process;\\nvar Deno = global.Deno;\\nvar versions = process && process.versions || Deno && Deno.version;\\nvar v8 = versions && versions.v8;\\nvar match, version;\\n\\nif (v8) {\\n match = v8.split('.');\\n // in old Chrome, versions of V8 isn't V8 = Chrome / 10\\n // but their correct versions are not interesting for us\\n version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\\n}\\n\\n// BrowserFS NodeJS \`process\` polyfill incorrectly set \`.v8\` to \`0.0\`\\n// so check \`userAgent\` even if \`.v8\` exists, but 0\\nif (!version && userAgent) {\\n match = userAgent.match(/Edge\\\\/(\\\\d+)/);\\n if (!match || match[1] >= 74) {\\n match = userAgent.match(/Chrome\\\\/(\\\\d+)/);\\n if (match) version = +match[1];\\n }\\n}\\n\\nmodule.exports = version;\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/engine-v8-version.js?")}),"./node_modules/core-js/internals/engine-webkit-version.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar userAgent = __webpack_require__(/*! ../internals/engine-user-agent */ \\"./node_modules/core-js/internals/engine-user-agent.js\\");\\n\\nvar webkit = userAgent.match(/AppleWebKit\\\\/(\\\\d+)\\\\./);\\n\\nmodule.exports = !!webkit && +webkit[1];\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/engine-webkit-version.js?")}),"./node_modules/core-js/internals/enum-bug-keys.js":((module)=>{eval("\\n// IE8- don't enum bug keys\\nmodule.exports = [\\n 'constructor',\\n 'hasOwnProperty',\\n 'isPrototypeOf',\\n 'propertyIsEnumerable',\\n 'toLocaleString',\\n 'toString',\\n 'valueOf'\\n];\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/enum-bug-keys.js?")}),"./node_modules/core-js/internals/error-stack-clear.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\n\\nvar $Error = Error;\\nvar replace = uncurryThis(''.replace);\\n\\nvar TEST = (function (arg) { return String($Error(arg).stack); })('zxcasd');\\n// eslint-disable-next-line redos/no-vulnerable -- safe\\nvar V8_OR_CHAKRA_STACK_ENTRY = /\\\\n\\\\s*at [^:]*:[^\\\\n]*/;\\nvar IS_V8_OR_CHAKRA_STACK = V8_OR_CHAKRA_STACK_ENTRY.test(TEST);\\n\\nmodule.exports = function (stack, dropEntries) {\\n if (IS_V8_OR_CHAKRA_STACK && typeof stack == 'string' && !$Error.prepareStackTrace) {\\n while (dropEntries--) stack = replace(stack, V8_OR_CHAKRA_STACK_ENTRY, '');\\n } return stack;\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/error-stack-clear.js?")}),"./node_modules/core-js/internals/error-stack-install.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ \\"./node_modules/core-js/internals/create-non-enumerable-property.js\\");\\nvar clearErrorStack = __webpack_require__(/*! ../internals/error-stack-clear */ \\"./node_modules/core-js/internals/error-stack-clear.js\\");\\nvar ERROR_STACK_INSTALLABLE = __webpack_require__(/*! ../internals/error-stack-installable */ \\"./node_modules/core-js/internals/error-stack-installable.js\\");\\n\\n// non-standard V8\\nvar captureStackTrace = Error.captureStackTrace;\\n\\nmodule.exports = function (error, C, stack, dropEntries) {\\n if (ERROR_STACK_INSTALLABLE) {\\n if (captureStackTrace) captureStackTrace(error, C);\\n else createNonEnumerableProperty(error, 'stack', clearErrorStack(stack, dropEntries));\\n }\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/error-stack-install.js?")}),"./node_modules/core-js/internals/error-stack-installable.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\nvar createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ \\"./node_modules/core-js/internals/create-property-descriptor.js\\");\\n\\nmodule.exports = !fails(function () {\\n var error = Error('a');\\n if (!('stack' in error)) return true;\\n // eslint-disable-next-line es/no-object-defineproperty -- safe\\n Object.defineProperty(error, 'stack', createPropertyDescriptor(1, 7));\\n return error.stack !== 7;\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/error-stack-installable.js?")}),"./node_modules/core-js/internals/error-to-string.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ \\"./node_modules/core-js/internals/descriptors.js\\");\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\nvar anObject = __webpack_require__(/*! ../internals/an-object */ \\"./node_modules/core-js/internals/an-object.js\\");\\nvar create = __webpack_require__(/*! ../internals/object-create */ \\"./node_modules/core-js/internals/object-create.js\\");\\nvar normalizeStringArgument = __webpack_require__(/*! ../internals/normalize-string-argument */ \\"./node_modules/core-js/internals/normalize-string-argument.js\\");\\n\\nvar nativeErrorToString = Error.prototype.toString;\\n\\nvar INCORRECT_TO_STRING = fails(function () {\\n if (DESCRIPTORS) {\\n // Chrome 32- incorrectly call accessor\\n // eslint-disable-next-line es/no-object-defineproperty -- safe\\n var object = create(Object.defineProperty({}, 'name', { get: function () {\\n return this === object;\\n } }));\\n if (nativeErrorToString.call(object) !== 'true') return true;\\n }\\n // FF10- does not properly handle non-strings\\n return nativeErrorToString.call({ message: 1, name: 2 }) !== '2: 1'\\n // IE8 does not properly handle defaults\\n || nativeErrorToString.call({}) !== 'Error';\\n});\\n\\nmodule.exports = INCORRECT_TO_STRING ? function toString() {\\n var O = anObject(this);\\n var name = normalizeStringArgument(O.name, 'Error');\\n var message = normalizeStringArgument(O.message);\\n return !name ? message : !message ? name : name + ': ' + message;\\n} : nativeErrorToString;\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/error-to-string.js?")}),"./node_modules/core-js/internals/export.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar global = __webpack_require__(/*! ../internals/global */ \\"./node_modules/core-js/internals/global.js\\");\\nvar getOwnPropertyDescriptor = (__webpack_require__(/*! ../internals/object-get-own-property-descriptor */ \\"./node_modules/core-js/internals/object-get-own-property-descriptor.js\\").f);\\nvar createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ \\"./node_modules/core-js/internals/create-non-enumerable-property.js\\");\\nvar defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ \\"./node_modules/core-js/internals/define-built-in.js\\");\\nvar defineGlobalProperty = __webpack_require__(/*! ../internals/define-global-property */ \\"./node_modules/core-js/internals/define-global-property.js\\");\\nvar copyConstructorProperties = __webpack_require__(/*! ../internals/copy-constructor-properties */ \\"./node_modules/core-js/internals/copy-constructor-properties.js\\");\\nvar isForced = __webpack_require__(/*! ../internals/is-forced */ \\"./node_modules/core-js/internals/is-forced.js\\");\\n\\n/*\\n options.target - name of the target object\\n options.global - target is the global object\\n options.stat - export as static methods of target\\n options.proto - export as prototype methods of target\\n options.real - real prototype method for the \`pure\` version\\n options.forced - export even if the native feature is available\\n options.bind - bind methods to the target, required for the \`pure\` version\\n options.wrap - wrap constructors to preventing global pollution, required for the \`pure\` version\\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\\n options.sham - add a flag to not completely full polyfills\\n options.enumerable - export as enumerable property\\n options.dontCallGetSet - prevent calling a getter on target\\n options.name - the .name of the function if it does not match the key\\n*/\\nmodule.exports = function (options, source) {\\n var TARGET = options.target;\\n var GLOBAL = options.global;\\n var STATIC = options.stat;\\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\\n if (GLOBAL) {\\n target = global;\\n } else if (STATIC) {\\n target = global[TARGET] || defineGlobalProperty(TARGET, {});\\n } else {\\n target = (global[TARGET] || {}).prototype;\\n }\\n if (target) for (key in source) {\\n sourceProperty = source[key];\\n if (options.dontCallGetSet) {\\n descriptor = getOwnPropertyDescriptor(target, key);\\n targetProperty = descriptor && descriptor.value;\\n } else targetProperty = target[key];\\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\\n // contained in target\\n if (!FORCED && targetProperty !== undefined) {\\n if (typeof sourceProperty == typeof targetProperty) continue;\\n copyConstructorProperties(sourceProperty, targetProperty);\\n }\\n // add a flag to not completely full polyfills\\n if (options.sham || (targetProperty && targetProperty.sham)) {\\n createNonEnumerableProperty(sourceProperty, 'sham', true);\\n }\\n defineBuiltIn(target, key, sourceProperty, options);\\n }\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/export.js?")}),"./node_modules/core-js/internals/fails.js":((module)=>{eval("\\nmodule.exports = function (exec) {\\n try {\\n return !!exec();\\n } catch (error) {\\n return true;\\n }\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/fails.js?")}),"./node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\n// TODO: Remove from \`core-js@4\` since it's moved to entry points\\n__webpack_require__(/*! ../modules/es.regexp.exec */ \\"./node_modules/core-js/modules/es.regexp.exec.js\\");\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this-clause */ \\"./node_modules/core-js/internals/function-uncurry-this-clause.js\\");\\nvar defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ \\"./node_modules/core-js/internals/define-built-in.js\\");\\nvar regexpExec = __webpack_require__(/*! ../internals/regexp-exec */ \\"./node_modules/core-js/internals/regexp-exec.js\\");\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\nvar wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ \\"./node_modules/core-js/internals/well-known-symbol.js\\");\\nvar createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ \\"./node_modules/core-js/internals/create-non-enumerable-property.js\\");\\n\\nvar SPECIES = wellKnownSymbol('species');\\nvar RegExpPrototype = RegExp.prototype;\\n\\nmodule.exports = function (KEY, exec, FORCED, SHAM) {\\n var SYMBOL = wellKnownSymbol(KEY);\\n\\n var DELEGATES_TO_SYMBOL = !fails(function () {\\n // String methods call symbol-named RegEp methods\\n var O = {};\\n O[SYMBOL] = function () { return 7; };\\n return ''[KEY](O) != 7;\\n });\\n\\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () {\\n // Symbol-named RegExp methods call .exec\\n var execCalled = false;\\n var re = /a/;\\n\\n if (KEY === 'split') {\\n // We can't use real regex here since it causes deoptimization\\n // and serious performance degradation in V8\\n // https://github.com/zloirock/core-js/issues/306\\n re = {};\\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\\n // a new one. We need to return the patched regex when creating the new one.\\n re.constructor = {};\\n re.constructor[SPECIES] = function () { return re; };\\n re.flags = '';\\n re[SYMBOL] = /./[SYMBOL];\\n }\\n\\n re.exec = function () { execCalled = true; return null; };\\n\\n re[SYMBOL]('');\\n return !execCalled;\\n });\\n\\n if (\\n !DELEGATES_TO_SYMBOL ||\\n !DELEGATES_TO_EXEC ||\\n FORCED\\n ) {\\n var uncurriedNativeRegExpMethod = uncurryThis(/./[SYMBOL]);\\n var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) {\\n var uncurriedNativeMethod = uncurryThis(nativeMethod);\\n var $exec = regexp.exec;\\n if ($exec === regexpExec || $exec === RegExpPrototype.exec) {\\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\\n // The native String method already delegates to @@method (this\\n // polyfilled function), leasing to infinite recursion.\\n // We avoid it by directly calling the native @@method method.\\n return { done: true, value: uncurriedNativeRegExpMethod(regexp, str, arg2) };\\n }\\n return { done: true, value: uncurriedNativeMethod(str, regexp, arg2) };\\n }\\n return { done: false };\\n });\\n\\n defineBuiltIn(String.prototype, KEY, methods[0]);\\n defineBuiltIn(RegExpPrototype, SYMBOL, methods[1]);\\n }\\n\\n if (SHAM) createNonEnumerableProperty(RegExpPrototype[SYMBOL], 'sham', true);\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js?")}),"./node_modules/core-js/internals/flatten-into-array.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar isArray = __webpack_require__(/*! ../internals/is-array */ \\"./node_modules/core-js/internals/is-array.js\\");\\nvar lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ \\"./node_modules/core-js/internals/length-of-array-like.js\\");\\nvar doesNotExceedSafeInteger = __webpack_require__(/*! ../internals/does-not-exceed-safe-integer */ \\"./node_modules/core-js/internals/does-not-exceed-safe-integer.js\\");\\nvar bind = __webpack_require__(/*! ../internals/function-bind-context */ \\"./node_modules/core-js/internals/function-bind-context.js\\");\\n\\n// \`FlattenIntoArray\` abstract operation\\n// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray\\nvar flattenIntoArray = function (target, original, source, sourceLen, start, depth, mapper, thisArg) {\\n var targetIndex = start;\\n var sourceIndex = 0;\\n var mapFn = mapper ? bind(mapper, thisArg) : false;\\n var element, elementLen;\\n\\n while (sourceIndex < sourceLen) {\\n if (sourceIndex in source) {\\n element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\\n\\n if (depth > 0 && isArray(element)) {\\n elementLen = lengthOfArrayLike(element);\\n targetIndex = flattenIntoArray(target, original, element, elementLen, targetIndex, depth - 1) - 1;\\n } else {\\n doesNotExceedSafeInteger(targetIndex + 1);\\n target[targetIndex] = element;\\n }\\n\\n targetIndex++;\\n }\\n sourceIndex++;\\n }\\n return targetIndex;\\n};\\n\\nmodule.exports = flattenIntoArray;\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/flatten-into-array.js?")}),"./node_modules/core-js/internals/freezing.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\n\\nmodule.exports = !fails(function () {\\n // eslint-disable-next-line es/no-object-isextensible, es/no-object-preventextensions -- required for testing\\n return Object.isExtensible(Object.preventExtensions({}));\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/freezing.js?")}),"./node_modules/core-js/internals/function-apply.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar NATIVE_BIND = __webpack_require__(/*! ../internals/function-bind-native */ \\"./node_modules/core-js/internals/function-bind-native.js\\");\\n\\nvar FunctionPrototype = Function.prototype;\\nvar apply = FunctionPrototype.apply;\\nvar call = FunctionPrototype.call;\\n\\n// eslint-disable-next-line es/no-reflect -- safe\\nmodule.exports = typeof Reflect == 'object' && Reflect.apply || (NATIVE_BIND ? call.bind(apply) : function () {\\n return call.apply(apply, arguments);\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/function-apply.js?")}),"./node_modules/core-js/internals/function-bind-context.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this-clause */ \\"./node_modules/core-js/internals/function-uncurry-this-clause.js\\");\\nvar aCallable = __webpack_require__(/*! ../internals/a-callable */ \\"./node_modules/core-js/internals/a-callable.js\\");\\nvar NATIVE_BIND = __webpack_require__(/*! ../internals/function-bind-native */ \\"./node_modules/core-js/internals/function-bind-native.js\\");\\n\\nvar bind = uncurryThis(uncurryThis.bind);\\n\\n// optional / simple context binding\\nmodule.exports = function (fn, that) {\\n aCallable(fn);\\n return that === undefined ? fn : NATIVE_BIND ? bind(fn, that) : function (/* ...args */) {\\n return fn.apply(that, arguments);\\n };\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/function-bind-context.js?")}),"./node_modules/core-js/internals/function-bind-native.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\n\\nmodule.exports = !fails(function () {\\n // eslint-disable-next-line es/no-function-prototype-bind -- safe\\n var test = (function () { /* empty */ }).bind();\\n // eslint-disable-next-line no-prototype-builtins -- safe\\n return typeof test != 'function' || test.hasOwnProperty('prototype');\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/function-bind-native.js?")}),"./node_modules/core-js/internals/function-call.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar NATIVE_BIND = __webpack_require__(/*! ../internals/function-bind-native */ \\"./node_modules/core-js/internals/function-bind-native.js\\");\\n\\nvar call = Function.prototype.call;\\n\\nmodule.exports = NATIVE_BIND ? call.bind(call) : function () {\\n return call.apply(call, arguments);\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/function-call.js?")}),"./node_modules/core-js/internals/function-name.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ \\"./node_modules/core-js/internals/descriptors.js\\");\\nvar hasOwn = __webpack_require__(/*! ../internals/has-own-property */ \\"./node_modules/core-js/internals/has-own-property.js\\");\\n\\nvar FunctionPrototype = Function.prototype;\\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\\n\\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\\n// additional protection from minified / mangled / dropped function names\\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\\n\\nmodule.exports = {\\n EXISTS: EXISTS,\\n PROPER: PROPER,\\n CONFIGURABLE: CONFIGURABLE\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/function-name.js?")}),"./node_modules/core-js/internals/function-uncurry-this-accessor.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\nvar aCallable = __webpack_require__(/*! ../internals/a-callable */ \\"./node_modules/core-js/internals/a-callable.js\\");\\n\\nmodule.exports = function (object, key, method) {\\n try {\\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\\n return uncurryThis(aCallable(Object.getOwnPropertyDescriptor(object, key)[method]));\\n } catch (error) { /* empty */ }\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/function-uncurry-this-accessor.js?")}),"./node_modules/core-js/internals/function-uncurry-this-clause.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar classofRaw = __webpack_require__(/*! ../internals/classof-raw */ \\"./node_modules/core-js/internals/classof-raw.js\\");\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\n\\nmodule.exports = function (fn) {\\n // Nashorn bug:\\n // https://github.com/zloirock/core-js/issues/1128\\n // https://github.com/zloirock/core-js/issues/1130\\n if (classofRaw(fn) === 'Function') return uncurryThis(fn);\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/function-uncurry-this-clause.js?")}),"./node_modules/core-js/internals/function-uncurry-this.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar NATIVE_BIND = __webpack_require__(/*! ../internals/function-bind-native */ \\"./node_modules/core-js/internals/function-bind-native.js\\");\\n\\nvar FunctionPrototype = Function.prototype;\\nvar call = FunctionPrototype.call;\\nvar uncurryThisWithBind = NATIVE_BIND && FunctionPrototype.bind.bind(call, call);\\n\\nmodule.exports = NATIVE_BIND ? uncurryThisWithBind : function (fn) {\\n return function () {\\n return call.apply(fn, arguments);\\n };\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/function-uncurry-this.js?")}),"./node_modules/core-js/internals/get-built-in.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar global = __webpack_require__(/*! ../internals/global */ \\"./node_modules/core-js/internals/global.js\\");\\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \\"./node_modules/core-js/internals/is-callable.js\\");\\n\\nvar aFunction = function (argument) {\\n return isCallable(argument) ? argument : undefined;\\n};\\n\\nmodule.exports = function (namespace, method) {\\n return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method];\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/get-built-in.js?")}),"./node_modules/core-js/internals/get-iterator-method.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar classof = __webpack_require__(/*! ../internals/classof */ \\"./node_modules/core-js/internals/classof.js\\");\\nvar getMethod = __webpack_require__(/*! ../internals/get-method */ \\"./node_modules/core-js/internals/get-method.js\\");\\nvar isNullOrUndefined = __webpack_require__(/*! ../internals/is-null-or-undefined */ \\"./node_modules/core-js/internals/is-null-or-undefined.js\\");\\nvar Iterators = __webpack_require__(/*! ../internals/iterators */ \\"./node_modules/core-js/internals/iterators.js\\");\\nvar wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ \\"./node_modules/core-js/internals/well-known-symbol.js\\");\\n\\nvar ITERATOR = wellKnownSymbol('iterator');\\n\\nmodule.exports = function (it) {\\n if (!isNullOrUndefined(it)) return getMethod(it, ITERATOR)\\n || getMethod(it, '@@iterator')\\n || Iterators[classof(it)];\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/get-iterator-method.js?")}),"./node_modules/core-js/internals/get-iterator.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar call = __webpack_require__(/*! ../internals/function-call */ \\"./node_modules/core-js/internals/function-call.js\\");\\nvar aCallable = __webpack_require__(/*! ../internals/a-callable */ \\"./node_modules/core-js/internals/a-callable.js\\");\\nvar anObject = __webpack_require__(/*! ../internals/an-object */ \\"./node_modules/core-js/internals/an-object.js\\");\\nvar tryToString = __webpack_require__(/*! ../internals/try-to-string */ \\"./node_modules/core-js/internals/try-to-string.js\\");\\nvar getIteratorMethod = __webpack_require__(/*! ../internals/get-iterator-method */ \\"./node_modules/core-js/internals/get-iterator-method.js\\");\\n\\nvar $TypeError = TypeError;\\n\\nmodule.exports = function (argument, usingIterator) {\\n var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator;\\n if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument));\\n throw $TypeError(tryToString(argument) + ' is not iterable');\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/get-iterator.js?")}),"./node_modules/core-js/internals/get-json-replacer-function.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\nvar isArray = __webpack_require__(/*! ../internals/is-array */ \\"./node_modules/core-js/internals/is-array.js\\");\\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \\"./node_modules/core-js/internals/is-callable.js\\");\\nvar classof = __webpack_require__(/*! ../internals/classof-raw */ \\"./node_modules/core-js/internals/classof-raw.js\\");\\nvar toString = __webpack_require__(/*! ../internals/to-string */ \\"./node_modules/core-js/internals/to-string.js\\");\\n\\nvar push = uncurryThis([].push);\\n\\nmodule.exports = function (replacer) {\\n if (isCallable(replacer)) return replacer;\\n if (!isArray(replacer)) return;\\n var rawLength = replacer.length;\\n var keys = [];\\n for (var i = 0; i < rawLength; i++) {\\n var element = replacer[i];\\n if (typeof element == 'string') push(keys, element);\\n else if (typeof element == 'number' || classof(element) == 'Number' || classof(element) == 'String') push(keys, toString(element));\\n }\\n var keysLength = keys.length;\\n var root = true;\\n return function (key, value) {\\n if (root) {\\n root = false;\\n return value;\\n }\\n if (isArray(this)) return value;\\n for (var j = 0; j < keysLength; j++) if (keys[j] === key) return value;\\n };\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/get-json-replacer-function.js?")}),"./node_modules/core-js/internals/get-method.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar aCallable = __webpack_require__(/*! ../internals/a-callable */ \\"./node_modules/core-js/internals/a-callable.js\\");\\nvar isNullOrUndefined = __webpack_require__(/*! ../internals/is-null-or-undefined */ \\"./node_modules/core-js/internals/is-null-or-undefined.js\\");\\n\\n// \`GetMethod\` abstract operation\\n// https://tc39.es/ecma262/#sec-getmethod\\nmodule.exports = function (V, P) {\\n var func = V[P];\\n return isNullOrUndefined(func) ? undefined : aCallable(func);\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/get-method.js?")}),"./node_modules/core-js/internals/get-substitution.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\nvar toObject = __webpack_require__(/*! ../internals/to-object */ \\"./node_modules/core-js/internals/to-object.js\\");\\n\\nvar floor = Math.floor;\\nvar charAt = uncurryThis(''.charAt);\\nvar replace = uncurryThis(''.replace);\\nvar stringSlice = uncurryThis(''.slice);\\n// eslint-disable-next-line redos/no-vulnerable -- safe\\nvar SUBSTITUTION_SYMBOLS = /\\\\$([$&'\`]|\\\\d{1,2}|<[^>]*>)/g;\\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\\\$([$&'\`]|\\\\d{1,2})/g;\\n\\n// \`GetSubstitution\` abstract operation\\n// https://tc39.es/ecma262/#sec-getsubstitution\\nmodule.exports = function (matched, str, position, captures, namedCaptures, replacement) {\\n var tailPos = position + matched.length;\\n var m = captures.length;\\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\\n if (namedCaptures !== undefined) {\\n namedCaptures = toObject(namedCaptures);\\n symbols = SUBSTITUTION_SYMBOLS;\\n }\\n return replace(replacement, symbols, function (match, ch) {\\n var capture;\\n switch (charAt(ch, 0)) {\\n case '$': return '$';\\n case '&': return matched;\\n case '\`': return stringSlice(str, 0, position);\\n case \\"'\\": return stringSlice(str, tailPos);\\n case '<':\\n capture = namedCaptures[stringSlice(ch, 1, -1)];\\n break;\\n default: // \\\\d\\\\d?\\n var n = +ch;\\n if (n === 0) return match;\\n if (n > m) {\\n var f = floor(n / 10);\\n if (f === 0) return match;\\n if (f <= m) return captures[f - 1] === undefined ? charAt(ch, 1) : captures[f - 1] + charAt(ch, 1);\\n return match;\\n }\\n capture = captures[n - 1];\\n }\\n return capture === undefined ? '' : capture;\\n });\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/get-substitution.js?")}),"./node_modules/core-js/internals/global.js":(function(module,__unused_webpack_exports,__webpack_require__){eval("\\nvar check = function (it) {\\n return it && it.Math == Math && it;\\n};\\n\\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\\nmodule.exports =\\n // eslint-disable-next-line es/no-global-this -- safe\\n check(typeof globalThis == 'object' && globalThis) ||\\n check(typeof window == 'object' && window) ||\\n // eslint-disable-next-line no-restricted-globals -- safe\\n check(typeof self == 'object' && self) ||\\n check(typeof __webpack_require__.g == 'object' && __webpack_require__.g) ||\\n // eslint-disable-next-line no-new-func -- fallback\\n (function () { return this; })() || this || Function('return this')();\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/global.js?")}),"./node_modules/core-js/internals/has-own-property.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\nvar toObject = __webpack_require__(/*! ../internals/to-object */ \\"./node_modules/core-js/internals/to-object.js\\");\\n\\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\\n\\n// \`HasOwnProperty\` abstract operation\\n// https://tc39.es/ecma262/#sec-hasownproperty\\n// eslint-disable-next-line es/no-object-hasown -- safe\\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\\n return hasOwnProperty(toObject(it), key);\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/has-own-property.js?")}),"./node_modules/core-js/internals/hidden-keys.js":((module)=>{eval("\\nmodule.exports = {};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/hidden-keys.js?")}),"./node_modules/core-js/internals/host-report-errors.js":((module)=>{eval("\\nmodule.exports = function (a, b) {\\n try {\\n // eslint-disable-next-line no-console -- safe\\n arguments.length == 1 ? console.error(a) : console.error(a, b);\\n } catch (error) { /* empty */ }\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/host-report-errors.js?")}),"./node_modules/core-js/internals/html.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ \\"./node_modules/core-js/internals/get-built-in.js\\");\\n\\nmodule.exports = getBuiltIn('document', 'documentElement');\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/html.js?")}),"./node_modules/core-js/internals/ie8-dom-define.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ \\"./node_modules/core-js/internals/descriptors.js\\");\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\nvar createElement = __webpack_require__(/*! ../internals/document-create-element */ \\"./node_modules/core-js/internals/document-create-element.js\\");\\n\\n// Thanks to IE8 for its funny defineProperty\\nmodule.exports = !DESCRIPTORS && !fails(function () {\\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\\n return Object.defineProperty(createElement('div'), 'a', {\\n get: function () { return 7; }\\n }).a != 7;\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/ie8-dom-define.js?")}),"./node_modules/core-js/internals/ieee754.js":((module)=>{eval("\\n// IEEE754 conversions based on https://github.com/feross/ieee754\\nvar $Array = Array;\\nvar abs = Math.abs;\\nvar pow = Math.pow;\\nvar floor = Math.floor;\\nvar log = Math.log;\\nvar LN2 = Math.LN2;\\n\\nvar pack = function (number, mantissaLength, bytes) {\\n var buffer = $Array(bytes);\\n var exponentLength = bytes * 8 - mantissaLength - 1;\\n var eMax = (1 << exponentLength) - 1;\\n var eBias = eMax >> 1;\\n var rt = mantissaLength === 23 ? pow(2, -24) - pow(2, -77) : 0;\\n var sign = number < 0 || number === 0 && 1 / number < 0 ? 1 : 0;\\n var index = 0;\\n var exponent, mantissa, c;\\n number = abs(number);\\n // eslint-disable-next-line no-self-compare -- NaN check\\n if (number != number || number === Infinity) {\\n // eslint-disable-next-line no-self-compare -- NaN check\\n mantissa = number != number ? 1 : 0;\\n exponent = eMax;\\n } else {\\n exponent = floor(log(number) / LN2);\\n c = pow(2, -exponent);\\n if (number * c < 1) {\\n exponent--;\\n c *= 2;\\n }\\n if (exponent + eBias >= 1) {\\n number += rt / c;\\n } else {\\n number += rt * pow(2, 1 - eBias);\\n }\\n if (number * c >= 2) {\\n exponent++;\\n c /= 2;\\n }\\n if (exponent + eBias >= eMax) {\\n mantissa = 0;\\n exponent = eMax;\\n } else if (exponent + eBias >= 1) {\\n mantissa = (number * c - 1) * pow(2, mantissaLength);\\n exponent = exponent + eBias;\\n } else {\\n mantissa = number * pow(2, eBias - 1) * pow(2, mantissaLength);\\n exponent = 0;\\n }\\n }\\n while (mantissaLength >= 8) {\\n buffer[index++] = mantissa & 255;\\n mantissa /= 256;\\n mantissaLength -= 8;\\n }\\n exponent = exponent << mantissaLength | mantissa;\\n exponentLength += mantissaLength;\\n while (exponentLength > 0) {\\n buffer[index++] = exponent & 255;\\n exponent /= 256;\\n exponentLength -= 8;\\n }\\n buffer[--index] |= sign * 128;\\n return buffer;\\n};\\n\\nvar unpack = function (buffer, mantissaLength) {\\n var bytes = buffer.length;\\n var exponentLength = bytes * 8 - mantissaLength - 1;\\n var eMax = (1 << exponentLength) - 1;\\n var eBias = eMax >> 1;\\n var nBits = exponentLength - 7;\\n var index = bytes - 1;\\n var sign = buffer[index--];\\n var exponent = sign & 127;\\n var mantissa;\\n sign >>= 7;\\n while (nBits > 0) {\\n exponent = exponent * 256 + buffer[index--];\\n nBits -= 8;\\n }\\n mantissa = exponent & (1 << -nBits) - 1;\\n exponent >>= -nBits;\\n nBits += mantissaLength;\\n while (nBits > 0) {\\n mantissa = mantissa * 256 + buffer[index--];\\n nBits -= 8;\\n }\\n if (exponent === 0) {\\n exponent = 1 - eBias;\\n } else if (exponent === eMax) {\\n return mantissa ? NaN : sign ? -Infinity : Infinity;\\n } else {\\n mantissa = mantissa + pow(2, mantissaLength);\\n exponent = exponent - eBias;\\n } return (sign ? -1 : 1) * mantissa * pow(2, exponent - mantissaLength);\\n};\\n\\nmodule.exports = {\\n pack: pack,\\n unpack: unpack\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/ieee754.js?")}),"./node_modules/core-js/internals/indexed-object.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\nvar classof = __webpack_require__(/*! ../internals/classof-raw */ \\"./node_modules/core-js/internals/classof-raw.js\\");\\n\\nvar $Object = Object;\\nvar split = uncurryThis(''.split);\\n\\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\\nmodule.exports = fails(function () {\\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\\n // eslint-disable-next-line no-prototype-builtins -- safe\\n return !$Object('z').propertyIsEnumerable(0);\\n}) ? function (it) {\\n return classof(it) == 'String' ? split(it, '') : $Object(it);\\n} : $Object;\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/indexed-object.js?")}),"./node_modules/core-js/internals/inherit-if-required.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \\"./node_modules/core-js/internals/is-callable.js\\");\\nvar isObject = __webpack_require__(/*! ../internals/is-object */ \\"./node_modules/core-js/internals/is-object.js\\");\\nvar setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ \\"./node_modules/core-js/internals/object-set-prototype-of.js\\");\\n\\n// makes subclassing work correct for wrapped built-ins\\nmodule.exports = function ($this, dummy, Wrapper) {\\n var NewTarget, NewTargetPrototype;\\n if (\\n // it can work only with native \`setPrototypeOf\`\\n setPrototypeOf &&\\n // we haven't completely correct pre-ES6 way for getting \`new.target\`, so use this\\n isCallable(NewTarget = dummy.constructor) &&\\n NewTarget !== Wrapper &&\\n isObject(NewTargetPrototype = NewTarget.prototype) &&\\n NewTargetPrototype !== Wrapper.prototype\\n ) setPrototypeOf($this, NewTargetPrototype);\\n return $this;\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/inherit-if-required.js?")}),"./node_modules/core-js/internals/inspect-source.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \\"./node_modules/core-js/internals/is-callable.js\\");\\nvar store = __webpack_require__(/*! ../internals/shared-store */ \\"./node_modules/core-js/internals/shared-store.js\\");\\n\\nvar functionToString = uncurryThis(Function.toString);\\n\\n// this helper broken in \`core-js@3.4.1-3.4.4\`, so we can't use \`shared\` helper\\nif (!isCallable(store.inspectSource)) {\\n store.inspectSource = function (it) {\\n return functionToString(it);\\n };\\n}\\n\\nmodule.exports = store.inspectSource;\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/inspect-source.js?")}),"./node_modules/core-js/internals/install-error-cause.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar isObject = __webpack_require__(/*! ../internals/is-object */ \\"./node_modules/core-js/internals/is-object.js\\");\\nvar createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ \\"./node_modules/core-js/internals/create-non-enumerable-property.js\\");\\n\\n// \`InstallErrorCause\` abstract operation\\n// https://tc39.es/proposal-error-cause/#sec-errorobjects-install-error-cause\\nmodule.exports = function (O, options) {\\n if (isObject(options) && 'cause' in options) {\\n createNonEnumerableProperty(O, 'cause', options.cause);\\n }\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/install-error-cause.js?")}),"./node_modules/core-js/internals/internal-metadata.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\nvar hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ \\"./node_modules/core-js/internals/hidden-keys.js\\");\\nvar isObject = __webpack_require__(/*! ../internals/is-object */ \\"./node_modules/core-js/internals/is-object.js\\");\\nvar hasOwn = __webpack_require__(/*! ../internals/has-own-property */ \\"./node_modules/core-js/internals/has-own-property.js\\");\\nvar defineProperty = (__webpack_require__(/*! ../internals/object-define-property */ \\"./node_modules/core-js/internals/object-define-property.js\\").f);\\nvar getOwnPropertyNamesModule = __webpack_require__(/*! ../internals/object-get-own-property-names */ \\"./node_modules/core-js/internals/object-get-own-property-names.js\\");\\nvar getOwnPropertyNamesExternalModule = __webpack_require__(/*! ../internals/object-get-own-property-names-external */ \\"./node_modules/core-js/internals/object-get-own-property-names-external.js\\");\\nvar isExtensible = __webpack_require__(/*! ../internals/object-is-extensible */ \\"./node_modules/core-js/internals/object-is-extensible.js\\");\\nvar uid = __webpack_require__(/*! ../internals/uid */ \\"./node_modules/core-js/internals/uid.js\\");\\nvar FREEZING = __webpack_require__(/*! ../internals/freezing */ \\"./node_modules/core-js/internals/freezing.js\\");\\n\\nvar REQUIRED = false;\\nvar METADATA = uid('meta');\\nvar id = 0;\\n\\nvar setMetadata = function (it) {\\n defineProperty(it, METADATA, { value: {\\n objectID: 'O' + id++, // object ID\\n weakData: {} // weak collections IDs\\n } });\\n};\\n\\nvar fastKey = function (it, create) {\\n // return a primitive with prefix\\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\\n if (!hasOwn(it, METADATA)) {\\n // can't set metadata to uncaught frozen object\\n if (!isExtensible(it)) return 'F';\\n // not necessary to add metadata\\n if (!create) return 'E';\\n // add missing metadata\\n setMetadata(it);\\n // return object ID\\n } return it[METADATA].objectID;\\n};\\n\\nvar getWeakData = function (it, create) {\\n if (!hasOwn(it, METADATA)) {\\n // can't set metadata to uncaught frozen object\\n if (!isExtensible(it)) return true;\\n // not necessary to add metadata\\n if (!create) return false;\\n // add missing metadata\\n setMetadata(it);\\n // return the store of weak collections IDs\\n } return it[METADATA].weakData;\\n};\\n\\n// add metadata on freeze-family methods calling\\nvar onFreeze = function (it) {\\n if (FREEZING && REQUIRED && isExtensible(it) && !hasOwn(it, METADATA)) setMetadata(it);\\n return it;\\n};\\n\\nvar enable = function () {\\n meta.enable = function () { /* empty */ };\\n REQUIRED = true;\\n var getOwnPropertyNames = getOwnPropertyNamesModule.f;\\n var splice = uncurryThis([].splice);\\n var test = {};\\n test[METADATA] = 1;\\n\\n // prevent exposing of metadata key\\n if (getOwnPropertyNames(test).length) {\\n getOwnPropertyNamesModule.f = function (it) {\\n var result = getOwnPropertyNames(it);\\n for (var i = 0, length = result.length; i < length; i++) {\\n if (result[i] === METADATA) {\\n splice(result, i, 1);\\n break;\\n }\\n } return result;\\n };\\n\\n $({ target: 'Object', stat: true, forced: true }, {\\n getOwnPropertyNames: getOwnPropertyNamesExternalModule.f\\n });\\n }\\n};\\n\\nvar meta = module.exports = {\\n enable: enable,\\n fastKey: fastKey,\\n getWeakData: getWeakData,\\n onFreeze: onFreeze\\n};\\n\\nhiddenKeys[METADATA] = true;\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/internal-metadata.js?")}),"./node_modules/core-js/internals/internal-state.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar NATIVE_WEAK_MAP = __webpack_require__(/*! ../internals/weak-map-basic-detection */ \\"./node_modules/core-js/internals/weak-map-basic-detection.js\\");\\nvar global = __webpack_require__(/*! ../internals/global */ \\"./node_modules/core-js/internals/global.js\\");\\nvar isObject = __webpack_require__(/*! ../internals/is-object */ \\"./node_modules/core-js/internals/is-object.js\\");\\nvar createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ \\"./node_modules/core-js/internals/create-non-enumerable-property.js\\");\\nvar hasOwn = __webpack_require__(/*! ../internals/has-own-property */ \\"./node_modules/core-js/internals/has-own-property.js\\");\\nvar shared = __webpack_require__(/*! ../internals/shared-store */ \\"./node_modules/core-js/internals/shared-store.js\\");\\nvar sharedKey = __webpack_require__(/*! ../internals/shared-key */ \\"./node_modules/core-js/internals/shared-key.js\\");\\nvar hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ \\"./node_modules/core-js/internals/hidden-keys.js\\");\\n\\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\\nvar TypeError = global.TypeError;\\nvar WeakMap = global.WeakMap;\\nvar set, get, has;\\n\\nvar enforce = function (it) {\\n return has(it) ? get(it) : set(it, {});\\n};\\n\\nvar getterFor = function (TYPE) {\\n return function (it) {\\n var state;\\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\\n throw TypeError('Incompatible receiver, ' + TYPE + ' required');\\n } return state;\\n };\\n};\\n\\nif (NATIVE_WEAK_MAP || shared.state) {\\n var store = shared.state || (shared.state = new WeakMap());\\n /* eslint-disable no-self-assign -- prototype methods protection */\\n store.get = store.get;\\n store.has = store.has;\\n store.set = store.set;\\n /* eslint-enable no-self-assign -- prototype methods protection */\\n set = function (it, metadata) {\\n if (store.has(it)) throw TypeError(OBJECT_ALREADY_INITIALIZED);\\n metadata.facade = it;\\n store.set(it, metadata);\\n return metadata;\\n };\\n get = function (it) {\\n return store.get(it) || {};\\n };\\n has = function (it) {\\n return store.has(it);\\n };\\n} else {\\n var STATE = sharedKey('state');\\n hiddenKeys[STATE] = true;\\n set = function (it, metadata) {\\n if (hasOwn(it, STATE)) throw TypeError(OBJECT_ALREADY_INITIALIZED);\\n metadata.facade = it;\\n createNonEnumerableProperty(it, STATE, metadata);\\n return metadata;\\n };\\n get = function (it) {\\n return hasOwn(it, STATE) ? it[STATE] : {};\\n };\\n has = function (it) {\\n return hasOwn(it, STATE);\\n };\\n}\\n\\nmodule.exports = {\\n set: set,\\n get: get,\\n has: has,\\n enforce: enforce,\\n getterFor: getterFor\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/internal-state.js?")}),"./node_modules/core-js/internals/is-array-iterator-method.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ \\"./node_modules/core-js/internals/well-known-symbol.js\\");\\nvar Iterators = __webpack_require__(/*! ../internals/iterators */ \\"./node_modules/core-js/internals/iterators.js\\");\\n\\nvar ITERATOR = wellKnownSymbol('iterator');\\nvar ArrayPrototype = Array.prototype;\\n\\n// check on default Array iterator\\nmodule.exports = function (it) {\\n return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/is-array-iterator-method.js?")}),"./node_modules/core-js/internals/is-array.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar classof = __webpack_require__(/*! ../internals/classof-raw */ \\"./node_modules/core-js/internals/classof-raw.js\\");\\n\\n// \`IsArray\` abstract operation\\n// https://tc39.es/ecma262/#sec-isarray\\n// eslint-disable-next-line es/no-array-isarray -- safe\\nmodule.exports = Array.isArray || function isArray(argument) {\\n return classof(argument) == 'Array';\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/is-array.js?")}),"./node_modules/core-js/internals/is-big-int-array.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar classof = __webpack_require__(/*! ../internals/classof */ \\"./node_modules/core-js/internals/classof.js\\");\\n\\nmodule.exports = function (it) {\\n var klass = classof(it);\\n return klass == 'BigInt64Array' || klass == 'BigUint64Array';\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/is-big-int-array.js?")}),"./node_modules/core-js/internals/is-callable.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar $documentAll = __webpack_require__(/*! ../internals/document-all */ \\"./node_modules/core-js/internals/document-all.js\\");\\n\\nvar documentAll = $documentAll.all;\\n\\n// \`IsCallable\` abstract operation\\n// https://tc39.es/ecma262/#sec-iscallable\\nmodule.exports = $documentAll.IS_HTMLDDA ? function (argument) {\\n return typeof argument == 'function' || argument === documentAll;\\n} : function (argument) {\\n return typeof argument == 'function';\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/is-callable.js?")}),"./node_modules/core-js/internals/is-constructor.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \\"./node_modules/core-js/internals/is-callable.js\\");\\nvar classof = __webpack_require__(/*! ../internals/classof */ \\"./node_modules/core-js/internals/classof.js\\");\\nvar getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ \\"./node_modules/core-js/internals/get-built-in.js\\");\\nvar inspectSource = __webpack_require__(/*! ../internals/inspect-source */ \\"./node_modules/core-js/internals/inspect-source.js\\");\\n\\nvar noop = function () { /* empty */ };\\nvar empty = [];\\nvar construct = getBuiltIn('Reflect', 'construct');\\nvar constructorRegExp = /^\\\\s*(?:class|function)\\\\b/;\\nvar exec = uncurryThis(constructorRegExp.exec);\\nvar INCORRECT_TO_STRING = !constructorRegExp.exec(noop);\\n\\nvar isConstructorModern = function isConstructor(argument) {\\n if (!isCallable(argument)) return false;\\n try {\\n construct(noop, empty, argument);\\n return true;\\n } catch (error) {\\n return false;\\n }\\n};\\n\\nvar isConstructorLegacy = function isConstructor(argument) {\\n if (!isCallable(argument)) return false;\\n switch (classof(argument)) {\\n case 'AsyncFunction':\\n case 'GeneratorFunction':\\n case 'AsyncGeneratorFunction': return false;\\n }\\n try {\\n // we can't check .prototype since constructors produced by .bind haven't it\\n // \`Function#toString\` throws on some built-it function in some legacy engines\\n // (for example, \`DOMQuad\` and similar in FF41-)\\n return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument));\\n } catch (error) {\\n return true;\\n }\\n};\\n\\nisConstructorLegacy.sham = true;\\n\\n// \`IsConstructor\` abstract operation\\n// https://tc39.es/ecma262/#sec-isconstructor\\nmodule.exports = !construct || fails(function () {\\n var called;\\n return isConstructorModern(isConstructorModern.call)\\n || !isConstructorModern(Object)\\n || !isConstructorModern(function () { called = true; })\\n || called;\\n}) ? isConstructorLegacy : isConstructorModern;\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/is-constructor.js?")}),"./node_modules/core-js/internals/is-forced.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \\"./node_modules/core-js/internals/is-callable.js\\");\\n\\nvar replacement = /#|\\\\.prototype\\\\./;\\n\\nvar isForced = function (feature, detection) {\\n var value = data[normalize(feature)];\\n return value == POLYFILL ? true\\n : value == NATIVE ? false\\n : isCallable(detection) ? fails(detection)\\n : !!detection;\\n};\\n\\nvar normalize = isForced.normalize = function (string) {\\n return String(string).replace(replacement, '.').toLowerCase();\\n};\\n\\nvar data = isForced.data = {};\\nvar NATIVE = isForced.NATIVE = 'N';\\nvar POLYFILL = isForced.POLYFILL = 'P';\\n\\nmodule.exports = isForced;\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/is-forced.js?")}),"./node_modules/core-js/internals/is-integral-number.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar isObject = __webpack_require__(/*! ../internals/is-object */ \\"./node_modules/core-js/internals/is-object.js\\");\\n\\nvar floor = Math.floor;\\n\\n// \`IsIntegralNumber\` abstract operation\\n// https://tc39.es/ecma262/#sec-isintegralnumber\\n// eslint-disable-next-line es/no-number-isinteger -- safe\\nmodule.exports = Number.isInteger || function isInteger(it) {\\n return !isObject(it) && isFinite(it) && floor(it) === it;\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/is-integral-number.js?")}),"./node_modules/core-js/internals/is-null-or-undefined.js":((module)=>{eval("\\n// we can't use just \`it == null\` since of \`document.all\` special case\\n// https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-aec\\nmodule.exports = function (it) {\\n return it === null || it === undefined;\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/is-null-or-undefined.js?")}),"./node_modules/core-js/internals/is-object.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \\"./node_modules/core-js/internals/is-callable.js\\");\\nvar $documentAll = __webpack_require__(/*! ../internals/document-all */ \\"./node_modules/core-js/internals/document-all.js\\");\\n\\nvar documentAll = $documentAll.all;\\n\\nmodule.exports = $documentAll.IS_HTMLDDA ? function (it) {\\n return typeof it == 'object' ? it !== null : isCallable(it) || it === documentAll;\\n} : function (it) {\\n return typeof it == 'object' ? it !== null : isCallable(it);\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/is-object.js?")}),"./node_modules/core-js/internals/is-pure.js":((module)=>{eval("\\nmodule.exports = false;\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/is-pure.js?")}),"./node_modules/core-js/internals/is-regexp.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar isObject = __webpack_require__(/*! ../internals/is-object */ \\"./node_modules/core-js/internals/is-object.js\\");\\nvar classof = __webpack_require__(/*! ../internals/classof-raw */ \\"./node_modules/core-js/internals/classof-raw.js\\");\\nvar wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ \\"./node_modules/core-js/internals/well-known-symbol.js\\");\\n\\nvar MATCH = wellKnownSymbol('match');\\n\\n// \`IsRegExp\` abstract operation\\n// https://tc39.es/ecma262/#sec-isregexp\\nmodule.exports = function (it) {\\n var isRegExp;\\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) == 'RegExp');\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/is-regexp.js?")}),"./node_modules/core-js/internals/is-symbol.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ \\"./node_modules/core-js/internals/get-built-in.js\\");\\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \\"./node_modules/core-js/internals/is-callable.js\\");\\nvar isPrototypeOf = __webpack_require__(/*! ../internals/object-is-prototype-of */ \\"./node_modules/core-js/internals/object-is-prototype-of.js\\");\\nvar USE_SYMBOL_AS_UID = __webpack_require__(/*! ../internals/use-symbol-as-uid */ \\"./node_modules/core-js/internals/use-symbol-as-uid.js\\");\\n\\nvar $Object = Object;\\n\\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\\n return typeof it == 'symbol';\\n} : function (it) {\\n var $Symbol = getBuiltIn('Symbol');\\n return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it));\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/is-symbol.js?")}),"./node_modules/core-js/internals/iterate.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar bind = __webpack_require__(/*! ../internals/function-bind-context */ \\"./node_modules/core-js/internals/function-bind-context.js\\");\\nvar call = __webpack_require__(/*! ../internals/function-call */ \\"./node_modules/core-js/internals/function-call.js\\");\\nvar anObject = __webpack_require__(/*! ../internals/an-object */ \\"./node_modules/core-js/internals/an-object.js\\");\\nvar tryToString = __webpack_require__(/*! ../internals/try-to-string */ \\"./node_modules/core-js/internals/try-to-string.js\\");\\nvar isArrayIteratorMethod = __webpack_require__(/*! ../internals/is-array-iterator-method */ \\"./node_modules/core-js/internals/is-array-iterator-method.js\\");\\nvar lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ \\"./node_modules/core-js/internals/length-of-array-like.js\\");\\nvar isPrototypeOf = __webpack_require__(/*! ../internals/object-is-prototype-of */ \\"./node_modules/core-js/internals/object-is-prototype-of.js\\");\\nvar getIterator = __webpack_require__(/*! ../internals/get-iterator */ \\"./node_modules/core-js/internals/get-iterator.js\\");\\nvar getIteratorMethod = __webpack_require__(/*! ../internals/get-iterator-method */ \\"./node_modules/core-js/internals/get-iterator-method.js\\");\\nvar iteratorClose = __webpack_require__(/*! ../internals/iterator-close */ \\"./node_modules/core-js/internals/iterator-close.js\\");\\n\\nvar $TypeError = TypeError;\\n\\nvar Result = function (stopped, result) {\\n this.stopped = stopped;\\n this.result = result;\\n};\\n\\nvar ResultPrototype = Result.prototype;\\n\\nmodule.exports = function (iterable, unboundFunction, options) {\\n var that = options && options.that;\\n var AS_ENTRIES = !!(options && options.AS_ENTRIES);\\n var IS_RECORD = !!(options && options.IS_RECORD);\\n var IS_ITERATOR = !!(options && options.IS_ITERATOR);\\n var INTERRUPTED = !!(options && options.INTERRUPTED);\\n var fn = bind(unboundFunction, that);\\n var iterator, iterFn, index, length, result, next, step;\\n\\n var stop = function (condition) {\\n if (iterator) iteratorClose(iterator, 'normal', condition);\\n return new Result(true, condition);\\n };\\n\\n var callFn = function (value) {\\n if (AS_ENTRIES) {\\n anObject(value);\\n return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);\\n } return INTERRUPTED ? fn(value, stop) : fn(value);\\n };\\n\\n if (IS_RECORD) {\\n iterator = iterable.iterator;\\n } else if (IS_ITERATOR) {\\n iterator = iterable;\\n } else {\\n iterFn = getIteratorMethod(iterable);\\n if (!iterFn) throw $TypeError(tryToString(iterable) + ' is not iterable');\\n // optimisation for array iterators\\n if (isArrayIteratorMethod(iterFn)) {\\n for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) {\\n result = callFn(iterable[index]);\\n if (result && isPrototypeOf(ResultPrototype, result)) return result;\\n } return new Result(false);\\n }\\n iterator = getIterator(iterable, iterFn);\\n }\\n\\n next = IS_RECORD ? iterable.next : iterator.next;\\n while (!(step = call(next, iterator)).done) {\\n try {\\n result = callFn(step.value);\\n } catch (error) {\\n iteratorClose(iterator, 'throw', error);\\n }\\n if (typeof result == 'object' && result && isPrototypeOf(ResultPrototype, result)) return result;\\n } return new Result(false);\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/iterate.js?")}),"./node_modules/core-js/internals/iterator-close.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar call = __webpack_require__(/*! ../internals/function-call */ \\"./node_modules/core-js/internals/function-call.js\\");\\nvar anObject = __webpack_require__(/*! ../internals/an-object */ \\"./node_modules/core-js/internals/an-object.js\\");\\nvar getMethod = __webpack_require__(/*! ../internals/get-method */ \\"./node_modules/core-js/internals/get-method.js\\");\\n\\nmodule.exports = function (iterator, kind, value) {\\n var innerResult, innerError;\\n anObject(iterator);\\n try {\\n innerResult = getMethod(iterator, 'return');\\n if (!innerResult) {\\n if (kind === 'throw') throw value;\\n return value;\\n }\\n innerResult = call(innerResult, iterator);\\n } catch (error) {\\n innerError = true;\\n innerResult = error;\\n }\\n if (kind === 'throw') throw value;\\n if (innerError) throw innerResult;\\n anObject(innerResult);\\n return value;\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/iterator-close.js?")}),"./node_modules/core-js/internals/iterator-create-constructor.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar IteratorPrototype = (__webpack_require__(/*! ../internals/iterators-core */ \\"./node_modules/core-js/internals/iterators-core.js\\").IteratorPrototype);\\nvar create = __webpack_require__(/*! ../internals/object-create */ \\"./node_modules/core-js/internals/object-create.js\\");\\nvar createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ \\"./node_modules/core-js/internals/create-property-descriptor.js\\");\\nvar setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ \\"./node_modules/core-js/internals/set-to-string-tag.js\\");\\nvar Iterators = __webpack_require__(/*! ../internals/iterators */ \\"./node_modules/core-js/internals/iterators.js\\");\\n\\nvar returnThis = function () { return this; };\\n\\nmodule.exports = function (IteratorConstructor, NAME, next, ENUMERABLE_NEXT) {\\n var TO_STRING_TAG = NAME + ' Iterator';\\n IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(+!ENUMERABLE_NEXT, next) });\\n setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\\n Iterators[TO_STRING_TAG] = returnThis;\\n return IteratorConstructor;\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/iterator-create-constructor.js?")}),"./node_modules/core-js/internals/iterator-define.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar call = __webpack_require__(/*! ../internals/function-call */ \\"./node_modules/core-js/internals/function-call.js\\");\\nvar IS_PURE = __webpack_require__(/*! ../internals/is-pure */ \\"./node_modules/core-js/internals/is-pure.js\\");\\nvar FunctionName = __webpack_require__(/*! ../internals/function-name */ \\"./node_modules/core-js/internals/function-name.js\\");\\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \\"./node_modules/core-js/internals/is-callable.js\\");\\nvar createIteratorConstructor = __webpack_require__(/*! ../internals/iterator-create-constructor */ \\"./node_modules/core-js/internals/iterator-create-constructor.js\\");\\nvar getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ \\"./node_modules/core-js/internals/object-get-prototype-of.js\\");\\nvar setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ \\"./node_modules/core-js/internals/object-set-prototype-of.js\\");\\nvar setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ \\"./node_modules/core-js/internals/set-to-string-tag.js\\");\\nvar createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ \\"./node_modules/core-js/internals/create-non-enumerable-property.js\\");\\nvar defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ \\"./node_modules/core-js/internals/define-built-in.js\\");\\nvar wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ \\"./node_modules/core-js/internals/well-known-symbol.js\\");\\nvar Iterators = __webpack_require__(/*! ../internals/iterators */ \\"./node_modules/core-js/internals/iterators.js\\");\\nvar IteratorsCore = __webpack_require__(/*! ../internals/iterators-core */ \\"./node_modules/core-js/internals/iterators-core.js\\");\\n\\nvar PROPER_FUNCTION_NAME = FunctionName.PROPER;\\nvar CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;\\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\\nvar ITERATOR = wellKnownSymbol('iterator');\\nvar KEYS = 'keys';\\nvar VALUES = 'values';\\nvar ENTRIES = 'entries';\\n\\nvar returnThis = function () { return this; };\\n\\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\\n createIteratorConstructor(IteratorConstructor, NAME, next);\\n\\n var getIterationMethod = function (KIND) {\\n if (KIND === DEFAULT && defaultIterator) return defaultIterator;\\n if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];\\n switch (KIND) {\\n case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\\n case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\\n case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\\n } return function () { return new IteratorConstructor(this); };\\n };\\n\\n var TO_STRING_TAG = NAME + ' Iterator';\\n var INCORRECT_VALUES_NAME = false;\\n var IterablePrototype = Iterable.prototype;\\n var nativeIterator = IterablePrototype[ITERATOR]\\n || IterablePrototype['@@iterator']\\n || DEFAULT && IterablePrototype[DEFAULT];\\n var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\\n var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\\n var CurrentIteratorPrototype, methods, KEY;\\n\\n // fix native\\n if (anyNativeIterator) {\\n CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\\n if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\\n if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\\n if (setPrototypeOf) {\\n setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\\n } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) {\\n defineBuiltIn(CurrentIteratorPrototype, ITERATOR, returnThis);\\n }\\n }\\n // Set @@toStringTag to native iterators\\n setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\\n if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\\n }\\n }\\n\\n // fix Array.prototype.{ values, @@iterator }.name in V8 / FF\\n if (PROPER_FUNCTION_NAME && DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\\n if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) {\\n createNonEnumerableProperty(IterablePrototype, 'name', VALUES);\\n } else {\\n INCORRECT_VALUES_NAME = true;\\n defaultIterator = function values() { return call(nativeIterator, this); };\\n }\\n }\\n\\n // export additional methods\\n if (DEFAULT) {\\n methods = {\\n values: getIterationMethod(VALUES),\\n keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\\n entries: getIterationMethod(ENTRIES)\\n };\\n if (FORCED) for (KEY in methods) {\\n if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\\n defineBuiltIn(IterablePrototype, KEY, methods[KEY]);\\n }\\n } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\\n }\\n\\n // define iterator\\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\\n defineBuiltIn(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT });\\n }\\n Iterators[NAME] = defaultIterator;\\n\\n return methods;\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/iterator-define.js?")}),"./node_modules/core-js/internals/iterators-core.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \\"./node_modules/core-js/internals/is-callable.js\\");\\nvar isObject = __webpack_require__(/*! ../internals/is-object */ \\"./node_modules/core-js/internals/is-object.js\\");\\nvar create = __webpack_require__(/*! ../internals/object-create */ \\"./node_modules/core-js/internals/object-create.js\\");\\nvar getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ \\"./node_modules/core-js/internals/object-get-prototype-of.js\\");\\nvar defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ \\"./node_modules/core-js/internals/define-built-in.js\\");\\nvar wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ \\"./node_modules/core-js/internals/well-known-symbol.js\\");\\nvar IS_PURE = __webpack_require__(/*! ../internals/is-pure */ \\"./node_modules/core-js/internals/is-pure.js\\");\\n\\nvar ITERATOR = wellKnownSymbol('iterator');\\nvar BUGGY_SAFARI_ITERATORS = false;\\n\\n// \`%IteratorPrototype%\` object\\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\\n\\n/* eslint-disable es/no-array-prototype-keys -- safe */\\nif ([].keys) {\\n arrayIterator = [].keys();\\n // Safari 8 has buggy iterators w/o \`next\`\\n if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\\n else {\\n PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\\n if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\\n }\\n}\\n\\nvar NEW_ITERATOR_PROTOTYPE = !isObject(IteratorPrototype) || fails(function () {\\n var test = {};\\n // FF44- legacy iterators case\\n return IteratorPrototype[ITERATOR].call(test) !== test;\\n});\\n\\nif (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};\\nelse if (IS_PURE) IteratorPrototype = create(IteratorPrototype);\\n\\n// \`%IteratorPrototype%[@@iterator]()\` method\\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator\\nif (!isCallable(IteratorPrototype[ITERATOR])) {\\n defineBuiltIn(IteratorPrototype, ITERATOR, function () {\\n return this;\\n });\\n}\\n\\nmodule.exports = {\\n IteratorPrototype: IteratorPrototype,\\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/iterators-core.js?")}),"./node_modules/core-js/internals/iterators.js":((module)=>{eval("\\nmodule.exports = {};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/iterators.js?")}),"./node_modules/core-js/internals/length-of-array-like.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar toLength = __webpack_require__(/*! ../internals/to-length */ \\"./node_modules/core-js/internals/to-length.js\\");\\n\\n// \`LengthOfArrayLike\` abstract operation\\n// https://tc39.es/ecma262/#sec-lengthofarraylike\\nmodule.exports = function (obj) {\\n return toLength(obj.length);\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/length-of-array-like.js?")}),"./node_modules/core-js/internals/make-built-in.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \\"./node_modules/core-js/internals/is-callable.js\\");\\nvar hasOwn = __webpack_require__(/*! ../internals/has-own-property */ \\"./node_modules/core-js/internals/has-own-property.js\\");\\nvar DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ \\"./node_modules/core-js/internals/descriptors.js\\");\\nvar CONFIGURABLE_FUNCTION_NAME = (__webpack_require__(/*! ../internals/function-name */ \\"./node_modules/core-js/internals/function-name.js\\").CONFIGURABLE);\\nvar inspectSource = __webpack_require__(/*! ../internals/inspect-source */ \\"./node_modules/core-js/internals/inspect-source.js\\");\\nvar InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ \\"./node_modules/core-js/internals/internal-state.js\\");\\n\\nvar enforceInternalState = InternalStateModule.enforce;\\nvar getInternalState = InternalStateModule.get;\\nvar $String = String;\\n// eslint-disable-next-line es/no-object-defineproperty -- safe\\nvar defineProperty = Object.defineProperty;\\nvar stringSlice = uncurryThis(''.slice);\\nvar replace = uncurryThis(''.replace);\\nvar join = uncurryThis([].join);\\n\\nvar CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function () {\\n return defineProperty(function () { /* empty */ }, 'length', { value: 8 }).length !== 8;\\n});\\n\\nvar TEMPLATE = String(String).split('String');\\n\\nvar makeBuiltIn = module.exports = function (value, name, options) {\\n if (stringSlice($String(name), 0, 7) === 'Symbol(') {\\n name = '[' + replace($String(name), /^Symbol\\\\(([^)]*)\\\\)/, '$1') + ']';\\n }\\n if (options && options.getter) name = 'get ' + name;\\n if (options && options.setter) name = 'set ' + name;\\n if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\\n if (DESCRIPTORS) defineProperty(value, 'name', { value: name, configurable: true });\\n else value.name = name;\\n }\\n if (CONFIGURABLE_LENGTH && options && hasOwn(options, 'arity') && value.length !== options.arity) {\\n defineProperty(value, 'length', { value: options.arity });\\n }\\n try {\\n if (options && hasOwn(options, 'constructor') && options.constructor) {\\n if (DESCRIPTORS) defineProperty(value, 'prototype', { writable: false });\\n // in V8 ~ Chrome 53, prototypes of some methods, like \`Array.prototype.values\`, are non-writable\\n } else if (value.prototype) value.prototype = undefined;\\n } catch (error) { /* empty */ }\\n var state = enforceInternalState(value);\\n if (!hasOwn(state, 'source')) {\\n state.source = join(TEMPLATE, typeof name == 'string' ? name : '');\\n } return value;\\n};\\n\\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\\n// eslint-disable-next-line no-extend-native -- required\\nFunction.prototype.toString = makeBuiltIn(function toString() {\\n return isCallable(this) && getInternalState(this).source || inspectSource(this);\\n}, 'toString');\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/make-built-in.js?")}),"./node_modules/core-js/internals/map-helpers.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\n\\n// eslint-disable-next-line es/no-map -- safe\\nvar MapPrototype = Map.prototype;\\n\\nmodule.exports = {\\n // eslint-disable-next-line es/no-map -- safe\\n Map: Map,\\n set: uncurryThis(MapPrototype.set),\\n get: uncurryThis(MapPrototype.get),\\n has: uncurryThis(MapPrototype.has),\\n remove: uncurryThis(MapPrototype['delete']),\\n proto: MapPrototype\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/map-helpers.js?")}),"./node_modules/core-js/internals/math-trunc.js":((module)=>{eval("\\nvar ceil = Math.ceil;\\nvar floor = Math.floor;\\n\\n// \`Math.trunc\` method\\n// https://tc39.es/ecma262/#sec-math.trunc\\n// eslint-disable-next-line es/no-math-trunc -- safe\\nmodule.exports = Math.trunc || function trunc(x) {\\n var n = +x;\\n return (n > 0 ? floor : ceil)(n);\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/math-trunc.js?")}),"./node_modules/core-js/internals/microtask.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar global = __webpack_require__(/*! ../internals/global */ \\"./node_modules/core-js/internals/global.js\\");\\nvar bind = __webpack_require__(/*! ../internals/function-bind-context */ \\"./node_modules/core-js/internals/function-bind-context.js\\");\\nvar getOwnPropertyDescriptor = (__webpack_require__(/*! ../internals/object-get-own-property-descriptor */ \\"./node_modules/core-js/internals/object-get-own-property-descriptor.js\\").f);\\nvar macrotask = (__webpack_require__(/*! ../internals/task */ \\"./node_modules/core-js/internals/task.js\\").set);\\nvar Queue = __webpack_require__(/*! ../internals/queue */ \\"./node_modules/core-js/internals/queue.js\\");\\nvar IS_IOS = __webpack_require__(/*! ../internals/engine-is-ios */ \\"./node_modules/core-js/internals/engine-is-ios.js\\");\\nvar IS_IOS_PEBBLE = __webpack_require__(/*! ../internals/engine-is-ios-pebble */ \\"./node_modules/core-js/internals/engine-is-ios-pebble.js\\");\\nvar IS_WEBOS_WEBKIT = __webpack_require__(/*! ../internals/engine-is-webos-webkit */ \\"./node_modules/core-js/internals/engine-is-webos-webkit.js\\");\\nvar IS_NODE = __webpack_require__(/*! ../internals/engine-is-node */ \\"./node_modules/core-js/internals/engine-is-node.js\\");\\n\\nvar MutationObserver = global.MutationObserver || global.WebKitMutationObserver;\\nvar document = global.document;\\nvar process = global.process;\\nvar Promise = global.Promise;\\n// Node.js 11 shows ExperimentalWarning on getting \`queueMicrotask\`\\nvar queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask');\\nvar microtask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value;\\nvar notify, toggle, node, promise, then;\\n\\n// modern engines have queueMicrotask method\\nif (!microtask) {\\n var queue = new Queue();\\n\\n var flush = function () {\\n var parent, fn;\\n if (IS_NODE && (parent = process.domain)) parent.exit();\\n while (fn = queue.get()) try {\\n fn();\\n } catch (error) {\\n if (queue.head) notify();\\n throw error;\\n }\\n if (parent) parent.enter();\\n };\\n\\n // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339\\n // also except WebOS Webkit https://github.com/zloirock/core-js/issues/898\\n if (!IS_IOS && !IS_NODE && !IS_WEBOS_WEBKIT && MutationObserver && document) {\\n toggle = true;\\n node = document.createTextNode('');\\n new MutationObserver(flush).observe(node, { characterData: true });\\n notify = function () {\\n node.data = toggle = !toggle;\\n };\\n // environments with maybe non-completely correct, but existent Promise\\n } else if (!IS_IOS_PEBBLE && Promise && Promise.resolve) {\\n // Promise.resolve without an argument throws an error in LG WebOS 2\\n promise = Promise.resolve(undefined);\\n // workaround of WebKit ~ iOS Safari 10.1 bug\\n promise.constructor = Promise;\\n then = bind(promise.then, promise);\\n notify = function () {\\n then(flush);\\n };\\n // Node.js without promises\\n } else if (IS_NODE) {\\n notify = function () {\\n process.nextTick(flush);\\n };\\n // for other environments - macrotask based on:\\n // - setImmediate\\n // - MessageChannel\\n // - window.postMessage\\n // - onreadystatechange\\n // - setTimeout\\n } else {\\n // \`webpack\` dev server bug on IE global methods - use bind(fn, global)\\n macrotask = bind(macrotask, global);\\n notify = function () {\\n macrotask(flush);\\n };\\n }\\n\\n microtask = function (fn) {\\n if (!queue.head) notify();\\n queue.add(fn);\\n };\\n}\\n\\nmodule.exports = microtask;\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/microtask.js?")}),"./node_modules/core-js/internals/new-promise-capability.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar aCallable = __webpack_require__(/*! ../internals/a-callable */ \\"./node_modules/core-js/internals/a-callable.js\\");\\n\\nvar $TypeError = TypeError;\\n\\nvar PromiseCapability = function (C) {\\n var resolve, reject;\\n this.promise = new C(function ($$resolve, $$reject) {\\n if (resolve !== undefined || reject !== undefined) throw $TypeError('Bad Promise constructor');\\n resolve = $$resolve;\\n reject = $$reject;\\n });\\n this.resolve = aCallable(resolve);\\n this.reject = aCallable(reject);\\n};\\n\\n// \`NewPromiseCapability\` abstract operation\\n// https://tc39.es/ecma262/#sec-newpromisecapability\\nmodule.exports.f = function (C) {\\n return new PromiseCapability(C);\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/new-promise-capability.js?")}),"./node_modules/core-js/internals/normalize-string-argument.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar toString = __webpack_require__(/*! ../internals/to-string */ \\"./node_modules/core-js/internals/to-string.js\\");\\n\\nmodule.exports = function (argument, $default) {\\n return argument === undefined ? arguments.length < 2 ? '' : $default : toString(argument);\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/normalize-string-argument.js?")}),"./node_modules/core-js/internals/not-a-regexp.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar isRegExp = __webpack_require__(/*! ../internals/is-regexp */ \\"./node_modules/core-js/internals/is-regexp.js\\");\\n\\nvar $TypeError = TypeError;\\n\\nmodule.exports = function (it) {\\n if (isRegExp(it)) {\\n throw $TypeError(\\"The method doesn't accept regular expressions\\");\\n } return it;\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/not-a-regexp.js?")}),"./node_modules/core-js/internals/number-parse-float.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar global = __webpack_require__(/*! ../internals/global */ \\"./node_modules/core-js/internals/global.js\\");\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\nvar toString = __webpack_require__(/*! ../internals/to-string */ \\"./node_modules/core-js/internals/to-string.js\\");\\nvar trim = (__webpack_require__(/*! ../internals/string-trim */ \\"./node_modules/core-js/internals/string-trim.js\\").trim);\\nvar whitespaces = __webpack_require__(/*! ../internals/whitespaces */ \\"./node_modules/core-js/internals/whitespaces.js\\");\\n\\nvar charAt = uncurryThis(''.charAt);\\nvar $parseFloat = global.parseFloat;\\nvar Symbol = global.Symbol;\\nvar ITERATOR = Symbol && Symbol.iterator;\\nvar FORCED = 1 / $parseFloat(whitespaces + '-0') !== -Infinity\\n // MS Edge 18- broken with boxed symbols\\n || (ITERATOR && !fails(function () { $parseFloat(Object(ITERATOR)); }));\\n\\n// \`parseFloat\` method\\n// https://tc39.es/ecma262/#sec-parsefloat-string\\nmodule.exports = FORCED ? function parseFloat(string) {\\n var trimmedString = trim(toString(string));\\n var result = $parseFloat(trimmedString);\\n return result === 0 && charAt(trimmedString, 0) == '-' ? -0 : result;\\n} : $parseFloat;\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/number-parse-float.js?")}),"./node_modules/core-js/internals/number-parse-int.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar global = __webpack_require__(/*! ../internals/global */ \\"./node_modules/core-js/internals/global.js\\");\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\nvar toString = __webpack_require__(/*! ../internals/to-string */ \\"./node_modules/core-js/internals/to-string.js\\");\\nvar trim = (__webpack_require__(/*! ../internals/string-trim */ \\"./node_modules/core-js/internals/string-trim.js\\").trim);\\nvar whitespaces = __webpack_require__(/*! ../internals/whitespaces */ \\"./node_modules/core-js/internals/whitespaces.js\\");\\n\\nvar $parseInt = global.parseInt;\\nvar Symbol = global.Symbol;\\nvar ITERATOR = Symbol && Symbol.iterator;\\nvar hex = /^[+-]?0x/i;\\nvar exec = uncurryThis(hex.exec);\\nvar FORCED = $parseInt(whitespaces + '08') !== 8 || $parseInt(whitespaces + '0x16') !== 22\\n // MS Edge 18- broken with boxed symbols\\n || (ITERATOR && !fails(function () { $parseInt(Object(ITERATOR)); }));\\n\\n// \`parseInt\` method\\n// https://tc39.es/ecma262/#sec-parseint-string-radix\\nmodule.exports = FORCED ? function parseInt(string, radix) {\\n var S = trim(toString(string));\\n return $parseInt(S, (radix >>> 0) || (exec(hex, S) ? 16 : 10));\\n} : $parseInt;\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/number-parse-int.js?")}),"./node_modules/core-js/internals/object-assign.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ \\"./node_modules/core-js/internals/descriptors.js\\");\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\nvar call = __webpack_require__(/*! ../internals/function-call */ \\"./node_modules/core-js/internals/function-call.js\\");\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\nvar objectKeys = __webpack_require__(/*! ../internals/object-keys */ \\"./node_modules/core-js/internals/object-keys.js\\");\\nvar getOwnPropertySymbolsModule = __webpack_require__(/*! ../internals/object-get-own-property-symbols */ \\"./node_modules/core-js/internals/object-get-own-property-symbols.js\\");\\nvar propertyIsEnumerableModule = __webpack_require__(/*! ../internals/object-property-is-enumerable */ \\"./node_modules/core-js/internals/object-property-is-enumerable.js\\");\\nvar toObject = __webpack_require__(/*! ../internals/to-object */ \\"./node_modules/core-js/internals/to-object.js\\");\\nvar IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ \\"./node_modules/core-js/internals/indexed-object.js\\");\\n\\n// eslint-disable-next-line es/no-object-assign -- safe\\nvar $assign = Object.assign;\\n// eslint-disable-next-line es/no-object-defineproperty -- required for testing\\nvar defineProperty = Object.defineProperty;\\nvar concat = uncurryThis([].concat);\\n\\n// \`Object.assign\` method\\n// https://tc39.es/ecma262/#sec-object.assign\\nmodule.exports = !$assign || fails(function () {\\n // should have correct order of operations (Edge bug)\\n if (DESCRIPTORS && $assign({ b: 1 }, $assign(defineProperty({}, 'a', {\\n enumerable: true,\\n get: function () {\\n defineProperty(this, 'b', {\\n value: 3,\\n enumerable: false\\n });\\n }\\n }), { b: 2 })).b !== 1) return true;\\n // should work with symbols and should have deterministic property order (V8 bug)\\n var A = {};\\n var B = {};\\n // eslint-disable-next-line es/no-symbol -- safe\\n var symbol = Symbol();\\n var alphabet = 'abcdefghijklmnopqrst';\\n A[symbol] = 7;\\n alphabet.split('').forEach(function (chr) { B[chr] = chr; });\\n return $assign({}, A)[symbol] != 7 || objectKeys($assign({}, B)).join('') != alphabet;\\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for \`.length\`\\n var T = toObject(target);\\n var argumentsLength = arguments.length;\\n var index = 1;\\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\\n var propertyIsEnumerable = propertyIsEnumerableModule.f;\\n while (argumentsLength > index) {\\n var S = IndexedObject(arguments[index++]);\\n var keys = getOwnPropertySymbols ? concat(objectKeys(S), getOwnPropertySymbols(S)) : objectKeys(S);\\n var length = keys.length;\\n var j = 0;\\n var key;\\n while (length > j) {\\n key = keys[j++];\\n if (!DESCRIPTORS || call(propertyIsEnumerable, S, key)) T[key] = S[key];\\n }\\n } return T;\\n} : $assign;\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/object-assign.js?")}),"./node_modules/core-js/internals/object-create.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\n/* global ActiveXObject -- old IE, WSH */\\nvar anObject = __webpack_require__(/*! ../internals/an-object */ \\"./node_modules/core-js/internals/an-object.js\\");\\nvar definePropertiesModule = __webpack_require__(/*! ../internals/object-define-properties */ \\"./node_modules/core-js/internals/object-define-properties.js\\");\\nvar enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ \\"./node_modules/core-js/internals/enum-bug-keys.js\\");\\nvar hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ \\"./node_modules/core-js/internals/hidden-keys.js\\");\\nvar html = __webpack_require__(/*! ../internals/html */ \\"./node_modules/core-js/internals/html.js\\");\\nvar documentCreateElement = __webpack_require__(/*! ../internals/document-create-element */ \\"./node_modules/core-js/internals/document-create-element.js\\");\\nvar sharedKey = __webpack_require__(/*! ../internals/shared-key */ \\"./node_modules/core-js/internals/shared-key.js\\");\\n\\nvar GT = '>';\\nvar LT = '<';\\nvar PROTOTYPE = 'prototype';\\nvar SCRIPT = 'script';\\nvar IE_PROTO = sharedKey('IE_PROTO');\\n\\nvar EmptyConstructor = function () { /* empty */ };\\n\\nvar scriptTag = function (content) {\\n return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\\n};\\n\\n// Create object with fake \`null\` prototype: use ActiveX Object with cleared prototype\\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\\n activeXDocument.write(scriptTag(''));\\n activeXDocument.close();\\n var temp = activeXDocument.parentWindow.Object;\\n activeXDocument = null; // avoid memory leak\\n return temp;\\n};\\n\\n// Create object with fake \`null\` prototype: use iframe Object with cleared prototype\\nvar NullProtoObjectViaIFrame = function () {\\n // Thrash, waste and sodomy: IE GC bug\\n var iframe = documentCreateElement('iframe');\\n var JS = 'java' + SCRIPT + ':';\\n var iframeDocument;\\n iframe.style.display = 'none';\\n html.appendChild(iframe);\\n // https://github.com/zloirock/core-js/issues/475\\n iframe.src = String(JS);\\n iframeDocument = iframe.contentWindow.document;\\n iframeDocument.open();\\n iframeDocument.write(scriptTag('document.F=Object'));\\n iframeDocument.close();\\n return iframeDocument.F;\\n};\\n\\n// Check for document.domain and active x support\\n// No need to use active x approach when document.domain is not set\\n// see https://github.com/es-shims/es5-shim/issues/150\\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\\n// avoid IE GC bug\\nvar activeXDocument;\\nvar NullProtoObject = function () {\\n try {\\n activeXDocument = new ActiveXObject('htmlfile');\\n } catch (error) { /* ignore */ }\\n NullProtoObject = typeof document != 'undefined'\\n ? document.domain && activeXDocument\\n ? NullProtoObjectViaActiveX(activeXDocument) // old IE\\n : NullProtoObjectViaIFrame()\\n : NullProtoObjectViaActiveX(activeXDocument); // WSH\\n var length = enumBugKeys.length;\\n while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\\n return NullProtoObject();\\n};\\n\\nhiddenKeys[IE_PROTO] = true;\\n\\n// \`Object.create\` method\\n// https://tc39.es/ecma262/#sec-object.create\\n// eslint-disable-next-line es/no-object-create -- safe\\nmodule.exports = Object.create || function create(O, Properties) {\\n var result;\\n if (O !== null) {\\n EmptyConstructor[PROTOTYPE] = anObject(O);\\n result = new EmptyConstructor();\\n EmptyConstructor[PROTOTYPE] = null;\\n // add \\"__proto__\\" for Object.getPrototypeOf polyfill\\n result[IE_PROTO] = O;\\n } else result = NullProtoObject();\\n return Properties === undefined ? result : definePropertiesModule.f(result, Properties);\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/object-create.js?")}),"./node_modules/core-js/internals/object-define-properties.js":((__unused_webpack_module,exports,__webpack_require__)=>{eval("\\nvar DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ \\"./node_modules/core-js/internals/descriptors.js\\");\\nvar V8_PROTOTYPE_DEFINE_BUG = __webpack_require__(/*! ../internals/v8-prototype-define-bug */ \\"./node_modules/core-js/internals/v8-prototype-define-bug.js\\");\\nvar definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ \\"./node_modules/core-js/internals/object-define-property.js\\");\\nvar anObject = __webpack_require__(/*! ../internals/an-object */ \\"./node_modules/core-js/internals/an-object.js\\");\\nvar toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ \\"./node_modules/core-js/internals/to-indexed-object.js\\");\\nvar objectKeys = __webpack_require__(/*! ../internals/object-keys */ \\"./node_modules/core-js/internals/object-keys.js\\");\\n\\n// \`Object.defineProperties\` method\\n// https://tc39.es/ecma262/#sec-object.defineproperties\\n// eslint-disable-next-line es/no-object-defineproperties -- safe\\nexports.f = DESCRIPTORS && !V8_PROTOTYPE_DEFINE_BUG ? Object.defineProperties : function defineProperties(O, Properties) {\\n anObject(O);\\n var props = toIndexedObject(Properties);\\n var keys = objectKeys(Properties);\\n var length = keys.length;\\n var index = 0;\\n var key;\\n while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]);\\n return O;\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/object-define-properties.js?")}),"./node_modules/core-js/internals/object-define-property.js":((__unused_webpack_module,exports,__webpack_require__)=>{eval("\\nvar DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ \\"./node_modules/core-js/internals/descriptors.js\\");\\nvar IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ \\"./node_modules/core-js/internals/ie8-dom-define.js\\");\\nvar V8_PROTOTYPE_DEFINE_BUG = __webpack_require__(/*! ../internals/v8-prototype-define-bug */ \\"./node_modules/core-js/internals/v8-prototype-define-bug.js\\");\\nvar anObject = __webpack_require__(/*! ../internals/an-object */ \\"./node_modules/core-js/internals/an-object.js\\");\\nvar toPropertyKey = __webpack_require__(/*! ../internals/to-property-key */ \\"./node_modules/core-js/internals/to-property-key.js\\");\\n\\nvar $TypeError = TypeError;\\n// eslint-disable-next-line es/no-object-defineproperty -- safe\\nvar $defineProperty = Object.defineProperty;\\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\\nvar ENUMERABLE = 'enumerable';\\nvar CONFIGURABLE = 'configurable';\\nvar WRITABLE = 'writable';\\n\\n// \`Object.defineProperty\` method\\n// https://tc39.es/ecma262/#sec-object.defineproperty\\nexports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) {\\n anObject(O);\\n P = toPropertyKey(P);\\n anObject(Attributes);\\n if (typeof O === 'function' && P === 'prototype' && 'value' in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) {\\n var current = $getOwnPropertyDescriptor(O, P);\\n if (current && current[WRITABLE]) {\\n O[P] = Attributes.value;\\n Attributes = {\\n configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE],\\n enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE],\\n writable: false\\n };\\n }\\n } return $defineProperty(O, P, Attributes);\\n} : $defineProperty : function defineProperty(O, P, Attributes) {\\n anObject(O);\\n P = toPropertyKey(P);\\n anObject(Attributes);\\n if (IE8_DOM_DEFINE) try {\\n return $defineProperty(O, P, Attributes);\\n } catch (error) { /* empty */ }\\n if ('get' in Attributes || 'set' in Attributes) throw $TypeError('Accessors not supported');\\n if ('value' in Attributes) O[P] = Attributes.value;\\n return O;\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/object-define-property.js?")}),"./node_modules/core-js/internals/object-get-own-property-descriptor.js":((__unused_webpack_module,exports,__webpack_require__)=>{eval("\\nvar DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ \\"./node_modules/core-js/internals/descriptors.js\\");\\nvar call = __webpack_require__(/*! ../internals/function-call */ \\"./node_modules/core-js/internals/function-call.js\\");\\nvar propertyIsEnumerableModule = __webpack_require__(/*! ../internals/object-property-is-enumerable */ \\"./node_modules/core-js/internals/object-property-is-enumerable.js\\");\\nvar createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ \\"./node_modules/core-js/internals/create-property-descriptor.js\\");\\nvar toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ \\"./node_modules/core-js/internals/to-indexed-object.js\\");\\nvar toPropertyKey = __webpack_require__(/*! ../internals/to-property-key */ \\"./node_modules/core-js/internals/to-property-key.js\\");\\nvar hasOwn = __webpack_require__(/*! ../internals/has-own-property */ \\"./node_modules/core-js/internals/has-own-property.js\\");\\nvar IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ \\"./node_modules/core-js/internals/ie8-dom-define.js\\");\\n\\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\\n\\n// \`Object.getOwnPropertyDescriptor\` method\\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\\n O = toIndexedObject(O);\\n P = toPropertyKey(P);\\n if (IE8_DOM_DEFINE) try {\\n return $getOwnPropertyDescriptor(O, P);\\n } catch (error) { /* empty */ }\\n if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/object-get-own-property-descriptor.js?")}),"./node_modules/core-js/internals/object-get-own-property-names-external.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\n/* eslint-disable es/no-object-getownpropertynames -- safe */\\nvar classof = __webpack_require__(/*! ../internals/classof-raw */ \\"./node_modules/core-js/internals/classof-raw.js\\");\\nvar toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ \\"./node_modules/core-js/internals/to-indexed-object.js\\");\\nvar $getOwnPropertyNames = (__webpack_require__(/*! ../internals/object-get-own-property-names */ \\"./node_modules/core-js/internals/object-get-own-property-names.js\\").f);\\nvar arraySlice = __webpack_require__(/*! ../internals/array-slice-simple */ \\"./node_modules/core-js/internals/array-slice-simple.js\\");\\n\\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\\n ? Object.getOwnPropertyNames(window) : [];\\n\\nvar getWindowNames = function (it) {\\n try {\\n return $getOwnPropertyNames(it);\\n } catch (error) {\\n return arraySlice(windowNames);\\n }\\n};\\n\\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\\nmodule.exports.f = function getOwnPropertyNames(it) {\\n return windowNames && classof(it) == 'Window'\\n ? getWindowNames(it)\\n : $getOwnPropertyNames(toIndexedObject(it));\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/object-get-own-property-names-external.js?")}),"./node_modules/core-js/internals/object-get-own-property-names.js":((__unused_webpack_module,exports,__webpack_require__)=>{eval("\\nvar internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ \\"./node_modules/core-js/internals/object-keys-internal.js\\");\\nvar enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ \\"./node_modules/core-js/internals/enum-bug-keys.js\\");\\n\\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\\n\\n// \`Object.getOwnPropertyNames\` method\\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\\n return internalObjectKeys(O, hiddenKeys);\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/object-get-own-property-names.js?")}),"./node_modules/core-js/internals/object-get-own-property-symbols.js":((__unused_webpack_module,exports)=>{eval("\\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\\nexports.f = Object.getOwnPropertySymbols;\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/object-get-own-property-symbols.js?")}),"./node_modules/core-js/internals/object-get-prototype-of.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar hasOwn = __webpack_require__(/*! ../internals/has-own-property */ \\"./node_modules/core-js/internals/has-own-property.js\\");\\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \\"./node_modules/core-js/internals/is-callable.js\\");\\nvar toObject = __webpack_require__(/*! ../internals/to-object */ \\"./node_modules/core-js/internals/to-object.js\\");\\nvar sharedKey = __webpack_require__(/*! ../internals/shared-key */ \\"./node_modules/core-js/internals/shared-key.js\\");\\nvar CORRECT_PROTOTYPE_GETTER = __webpack_require__(/*! ../internals/correct-prototype-getter */ \\"./node_modules/core-js/internals/correct-prototype-getter.js\\");\\n\\nvar IE_PROTO = sharedKey('IE_PROTO');\\nvar $Object = Object;\\nvar ObjectPrototype = $Object.prototype;\\n\\n// \`Object.getPrototypeOf\` method\\n// https://tc39.es/ecma262/#sec-object.getprototypeof\\n// eslint-disable-next-line es/no-object-getprototypeof -- safe\\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? $Object.getPrototypeOf : function (O) {\\n var object = toObject(O);\\n if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];\\n var constructor = object.constructor;\\n if (isCallable(constructor) && object instanceof constructor) {\\n return constructor.prototype;\\n } return object instanceof $Object ? ObjectPrototype : null;\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/object-get-prototype-of.js?")}),"./node_modules/core-js/internals/object-is-extensible.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\nvar isObject = __webpack_require__(/*! ../internals/is-object */ \\"./node_modules/core-js/internals/is-object.js\\");\\nvar classof = __webpack_require__(/*! ../internals/classof-raw */ \\"./node_modules/core-js/internals/classof-raw.js\\");\\nvar ARRAY_BUFFER_NON_EXTENSIBLE = __webpack_require__(/*! ../internals/array-buffer-non-extensible */ \\"./node_modules/core-js/internals/array-buffer-non-extensible.js\\");\\n\\n// eslint-disable-next-line es/no-object-isextensible -- safe\\nvar $isExtensible = Object.isExtensible;\\nvar FAILS_ON_PRIMITIVES = fails(function () { $isExtensible(1); });\\n\\n// \`Object.isExtensible\` method\\n// https://tc39.es/ecma262/#sec-object.isextensible\\nmodule.exports = (FAILS_ON_PRIMITIVES || ARRAY_BUFFER_NON_EXTENSIBLE) ? function isExtensible(it) {\\n if (!isObject(it)) return false;\\n if (ARRAY_BUFFER_NON_EXTENSIBLE && classof(it) == 'ArrayBuffer') return false;\\n return $isExtensible ? $isExtensible(it) : true;\\n} : $isExtensible;\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/object-is-extensible.js?")}),"./node_modules/core-js/internals/object-is-prototype-of.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\n\\nmodule.exports = uncurryThis({}.isPrototypeOf);\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/object-is-prototype-of.js?")}),"./node_modules/core-js/internals/object-keys-internal.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\nvar hasOwn = __webpack_require__(/*! ../internals/has-own-property */ \\"./node_modules/core-js/internals/has-own-property.js\\");\\nvar toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ \\"./node_modules/core-js/internals/to-indexed-object.js\\");\\nvar indexOf = (__webpack_require__(/*! ../internals/array-includes */ \\"./node_modules/core-js/internals/array-includes.js\\").indexOf);\\nvar hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ \\"./node_modules/core-js/internals/hidden-keys.js\\");\\n\\nvar push = uncurryThis([].push);\\n\\nmodule.exports = function (object, names) {\\n var O = toIndexedObject(object);\\n var i = 0;\\n var result = [];\\n var key;\\n for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\\n // Don't enum bug & hidden keys\\n while (names.length > i) if (hasOwn(O, key = names[i++])) {\\n ~indexOf(result, key) || push(result, key);\\n }\\n return result;\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/object-keys-internal.js?")}),"./node_modules/core-js/internals/object-keys.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ \\"./node_modules/core-js/internals/object-keys-internal.js\\");\\nvar enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ \\"./node_modules/core-js/internals/enum-bug-keys.js\\");\\n\\n// \`Object.keys\` method\\n// https://tc39.es/ecma262/#sec-object.keys\\n// eslint-disable-next-line es/no-object-keys -- safe\\nmodule.exports = Object.keys || function keys(O) {\\n return internalObjectKeys(O, enumBugKeys);\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/object-keys.js?")}),"./node_modules/core-js/internals/object-property-is-enumerable.js":((__unused_webpack_module,exports)=>{eval("\\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\\n\\n// Nashorn ~ JDK8 bug\\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\\n\\n// \`Object.prototype.propertyIsEnumerable\` method implementation\\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\\n var descriptor = getOwnPropertyDescriptor(this, V);\\n return !!descriptor && descriptor.enumerable;\\n} : $propertyIsEnumerable;\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/object-property-is-enumerable.js?")}),"./node_modules/core-js/internals/object-set-prototype-of.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\n/* eslint-disable no-proto -- safe */\\nvar uncurryThisAccessor = __webpack_require__(/*! ../internals/function-uncurry-this-accessor */ \\"./node_modules/core-js/internals/function-uncurry-this-accessor.js\\");\\nvar anObject = __webpack_require__(/*! ../internals/an-object */ \\"./node_modules/core-js/internals/an-object.js\\");\\nvar aPossiblePrototype = __webpack_require__(/*! ../internals/a-possible-prototype */ \\"./node_modules/core-js/internals/a-possible-prototype.js\\");\\n\\n// \`Object.setPrototypeOf\` method\\n// https://tc39.es/ecma262/#sec-object.setprototypeof\\n// Works with __proto__ only. Old v8 can't work with null proto objects.\\n// eslint-disable-next-line es/no-object-setprototypeof -- safe\\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\\n var CORRECT_SETTER = false;\\n var test = {};\\n var setter;\\n try {\\n setter = uncurryThisAccessor(Object.prototype, '__proto__', 'set');\\n setter(test, []);\\n CORRECT_SETTER = test instanceof Array;\\n } catch (error) { /* empty */ }\\n return function setPrototypeOf(O, proto) {\\n anObject(O);\\n aPossiblePrototype(proto);\\n if (CORRECT_SETTER) setter(O, proto);\\n else O.__proto__ = proto;\\n return O;\\n };\\n}() : undefined);\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/object-set-prototype-of.js?")}),"./node_modules/core-js/internals/ordinary-to-primitive.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar call = __webpack_require__(/*! ../internals/function-call */ \\"./node_modules/core-js/internals/function-call.js\\");\\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \\"./node_modules/core-js/internals/is-callable.js\\");\\nvar isObject = __webpack_require__(/*! ../internals/is-object */ \\"./node_modules/core-js/internals/is-object.js\\");\\n\\nvar $TypeError = TypeError;\\n\\n// \`OrdinaryToPrimitive\` abstract operation\\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\\nmodule.exports = function (input, pref) {\\n var fn, val;\\n if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\\n if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\\n if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\\n throw $TypeError(\\"Can't convert object to primitive value\\");\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/ordinary-to-primitive.js?")}),"./node_modules/core-js/internals/own-keys.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ \\"./node_modules/core-js/internals/get-built-in.js\\");\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\nvar getOwnPropertyNamesModule = __webpack_require__(/*! ../internals/object-get-own-property-names */ \\"./node_modules/core-js/internals/object-get-own-property-names.js\\");\\nvar getOwnPropertySymbolsModule = __webpack_require__(/*! ../internals/object-get-own-property-symbols */ \\"./node_modules/core-js/internals/object-get-own-property-symbols.js\\");\\nvar anObject = __webpack_require__(/*! ../internals/an-object */ \\"./node_modules/core-js/internals/an-object.js\\");\\n\\nvar concat = uncurryThis([].concat);\\n\\n// all object keys, includes non-enumerable and symbols\\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\\n var keys = getOwnPropertyNamesModule.f(anObject(it));\\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\\n return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/own-keys.js?")}),"./node_modules/core-js/internals/perform.js":((module)=>{eval("\\nmodule.exports = function (exec) {\\n try {\\n return { error: false, value: exec() };\\n } catch (error) {\\n return { error: true, value: error };\\n }\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/perform.js?")}),"./node_modules/core-js/internals/promise-constructor-detection.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar global = __webpack_require__(/*! ../internals/global */ \\"./node_modules/core-js/internals/global.js\\");\\nvar NativePromiseConstructor = __webpack_require__(/*! ../internals/promise-native-constructor */ \\"./node_modules/core-js/internals/promise-native-constructor.js\\");\\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \\"./node_modules/core-js/internals/is-callable.js\\");\\nvar isForced = __webpack_require__(/*! ../internals/is-forced */ \\"./node_modules/core-js/internals/is-forced.js\\");\\nvar inspectSource = __webpack_require__(/*! ../internals/inspect-source */ \\"./node_modules/core-js/internals/inspect-source.js\\");\\nvar wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ \\"./node_modules/core-js/internals/well-known-symbol.js\\");\\nvar IS_BROWSER = __webpack_require__(/*! ../internals/engine-is-browser */ \\"./node_modules/core-js/internals/engine-is-browser.js\\");\\nvar IS_DENO = __webpack_require__(/*! ../internals/engine-is-deno */ \\"./node_modules/core-js/internals/engine-is-deno.js\\");\\nvar IS_PURE = __webpack_require__(/*! ../internals/is-pure */ \\"./node_modules/core-js/internals/is-pure.js\\");\\nvar V8_VERSION = __webpack_require__(/*! ../internals/engine-v8-version */ \\"./node_modules/core-js/internals/engine-v8-version.js\\");\\n\\nvar NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype;\\nvar SPECIES = wellKnownSymbol('species');\\nvar SUBCLASSING = false;\\nvar NATIVE_PROMISE_REJECTION_EVENT = isCallable(global.PromiseRejectionEvent);\\n\\nvar FORCED_PROMISE_CONSTRUCTOR = isForced('Promise', function () {\\n var PROMISE_CONSTRUCTOR_SOURCE = inspectSource(NativePromiseConstructor);\\n var GLOBAL_CORE_JS_PROMISE = PROMISE_CONSTRUCTOR_SOURCE !== String(NativePromiseConstructor);\\n // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\\n // We can't detect it synchronously, so just check versions\\n if (!GLOBAL_CORE_JS_PROMISE && V8_VERSION === 66) return true;\\n // We need Promise#{ catch, finally } in the pure version for preventing prototype pollution\\n if (IS_PURE && !(NativePromisePrototype['catch'] && NativePromisePrototype['finally'])) return true;\\n // We can't use @@species feature detection in V8 since it causes\\n // deoptimization and performance degradation\\n // https://github.com/zloirock/core-js/issues/679\\n if (!V8_VERSION || V8_VERSION < 51 || !/native code/.test(PROMISE_CONSTRUCTOR_SOURCE)) {\\n // Detect correctness of subclassing with @@species support\\n var promise = new NativePromiseConstructor(function (resolve) { resolve(1); });\\n var FakePromise = function (exec) {\\n exec(function () { /* empty */ }, function () { /* empty */ });\\n };\\n var constructor = promise.constructor = {};\\n constructor[SPECIES] = FakePromise;\\n SUBCLASSING = promise.then(function () { /* empty */ }) instanceof FakePromise;\\n if (!SUBCLASSING) return true;\\n // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test\\n } return !GLOBAL_CORE_JS_PROMISE && (IS_BROWSER || IS_DENO) && !NATIVE_PROMISE_REJECTION_EVENT;\\n});\\n\\nmodule.exports = {\\n CONSTRUCTOR: FORCED_PROMISE_CONSTRUCTOR,\\n REJECTION_EVENT: NATIVE_PROMISE_REJECTION_EVENT,\\n SUBCLASSING: SUBCLASSING\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/promise-constructor-detection.js?")}),"./node_modules/core-js/internals/promise-native-constructor.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar global = __webpack_require__(/*! ../internals/global */ \\"./node_modules/core-js/internals/global.js\\");\\n\\nmodule.exports = global.Promise;\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/promise-native-constructor.js?")}),"./node_modules/core-js/internals/promise-resolve.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar anObject = __webpack_require__(/*! ../internals/an-object */ \\"./node_modules/core-js/internals/an-object.js\\");\\nvar isObject = __webpack_require__(/*! ../internals/is-object */ \\"./node_modules/core-js/internals/is-object.js\\");\\nvar newPromiseCapability = __webpack_require__(/*! ../internals/new-promise-capability */ \\"./node_modules/core-js/internals/new-promise-capability.js\\");\\n\\nmodule.exports = function (C, x) {\\n anObject(C);\\n if (isObject(x) && x.constructor === C) return x;\\n var promiseCapability = newPromiseCapability.f(C);\\n var resolve = promiseCapability.resolve;\\n resolve(x);\\n return promiseCapability.promise;\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/promise-resolve.js?")}),"./node_modules/core-js/internals/promise-statics-incorrect-iteration.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar NativePromiseConstructor = __webpack_require__(/*! ../internals/promise-native-constructor */ \\"./node_modules/core-js/internals/promise-native-constructor.js\\");\\nvar checkCorrectnessOfIteration = __webpack_require__(/*! ../internals/check-correctness-of-iteration */ \\"./node_modules/core-js/internals/check-correctness-of-iteration.js\\");\\nvar FORCED_PROMISE_CONSTRUCTOR = (__webpack_require__(/*! ../internals/promise-constructor-detection */ \\"./node_modules/core-js/internals/promise-constructor-detection.js\\").CONSTRUCTOR);\\n\\nmodule.exports = FORCED_PROMISE_CONSTRUCTOR || !checkCorrectnessOfIteration(function (iterable) {\\n NativePromiseConstructor.all(iterable).then(undefined, function () { /* empty */ });\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/promise-statics-incorrect-iteration.js?")}),"./node_modules/core-js/internals/proxy-accessor.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar defineProperty = (__webpack_require__(/*! ../internals/object-define-property */ \\"./node_modules/core-js/internals/object-define-property.js\\").f);\\n\\nmodule.exports = function (Target, Source, key) {\\n key in Target || defineProperty(Target, key, {\\n configurable: true,\\n get: function () { return Source[key]; },\\n set: function (it) { Source[key] = it; }\\n });\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/proxy-accessor.js?")}),"./node_modules/core-js/internals/queue.js":((module)=>{eval("\\nvar Queue = function () {\\n this.head = null;\\n this.tail = null;\\n};\\n\\nQueue.prototype = {\\n add: function (item) {\\n var entry = { item: item, next: null };\\n var tail = this.tail;\\n if (tail) tail.next = entry;\\n else this.head = entry;\\n this.tail = entry;\\n },\\n get: function () {\\n var entry = this.head;\\n if (entry) {\\n var next = this.head = entry.next;\\n if (next === null) this.tail = null;\\n return entry.item;\\n }\\n }\\n};\\n\\nmodule.exports = Queue;\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/queue.js?")}),"./node_modules/core-js/internals/regexp-exec-abstract.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar call = __webpack_require__(/*! ../internals/function-call */ \\"./node_modules/core-js/internals/function-call.js\\");\\nvar anObject = __webpack_require__(/*! ../internals/an-object */ \\"./node_modules/core-js/internals/an-object.js\\");\\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \\"./node_modules/core-js/internals/is-callable.js\\");\\nvar classof = __webpack_require__(/*! ../internals/classof-raw */ \\"./node_modules/core-js/internals/classof-raw.js\\");\\nvar regexpExec = __webpack_require__(/*! ../internals/regexp-exec */ \\"./node_modules/core-js/internals/regexp-exec.js\\");\\n\\nvar $TypeError = TypeError;\\n\\n// \`RegExpExec\` abstract operation\\n// https://tc39.es/ecma262/#sec-regexpexec\\nmodule.exports = function (R, S) {\\n var exec = R.exec;\\n if (isCallable(exec)) {\\n var result = call(exec, R, S);\\n if (result !== null) anObject(result);\\n return result;\\n }\\n if (classof(R) === 'RegExp') return call(regexpExec, R, S);\\n throw $TypeError('RegExp#exec called on incompatible receiver');\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/regexp-exec-abstract.js?")}),"./node_modules/core-js/internals/regexp-exec.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\n/* eslint-disable regexp/no-empty-capturing-group, regexp/no-empty-group, regexp/no-lazy-ends -- testing */\\n/* eslint-disable regexp/no-useless-quantifier -- testing */\\nvar call = __webpack_require__(/*! ../internals/function-call */ \\"./node_modules/core-js/internals/function-call.js\\");\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\nvar toString = __webpack_require__(/*! ../internals/to-string */ \\"./node_modules/core-js/internals/to-string.js\\");\\nvar regexpFlags = __webpack_require__(/*! ../internals/regexp-flags */ \\"./node_modules/core-js/internals/regexp-flags.js\\");\\nvar stickyHelpers = __webpack_require__(/*! ../internals/regexp-sticky-helpers */ \\"./node_modules/core-js/internals/regexp-sticky-helpers.js\\");\\nvar shared = __webpack_require__(/*! ../internals/shared */ \\"./node_modules/core-js/internals/shared.js\\");\\nvar create = __webpack_require__(/*! ../internals/object-create */ \\"./node_modules/core-js/internals/object-create.js\\");\\nvar getInternalState = (__webpack_require__(/*! ../internals/internal-state */ \\"./node_modules/core-js/internals/internal-state.js\\").get);\\nvar UNSUPPORTED_DOT_ALL = __webpack_require__(/*! ../internals/regexp-unsupported-dot-all */ \\"./node_modules/core-js/internals/regexp-unsupported-dot-all.js\\");\\nvar UNSUPPORTED_NCG = __webpack_require__(/*! ../internals/regexp-unsupported-ncg */ \\"./node_modules/core-js/internals/regexp-unsupported-ncg.js\\");\\n\\nvar nativeReplace = shared('native-string-replace', String.prototype.replace);\\nvar nativeExec = RegExp.prototype.exec;\\nvar patchedExec = nativeExec;\\nvar charAt = uncurryThis(''.charAt);\\nvar indexOf = uncurryThis(''.indexOf);\\nvar replace = uncurryThis(''.replace);\\nvar stringSlice = uncurryThis(''.slice);\\n\\nvar UPDATES_LAST_INDEX_WRONG = (function () {\\n var re1 = /a/;\\n var re2 = /b*/g;\\n call(nativeExec, re1, 'a');\\n call(nativeExec, re2, 'a');\\n return re1.lastIndex !== 0 || re2.lastIndex !== 0;\\n})();\\n\\nvar UNSUPPORTED_Y = stickyHelpers.BROKEN_CARET;\\n\\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\\n\\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG;\\n\\nif (PATCH) {\\n patchedExec = function exec(string) {\\n var re = this;\\n var state = getInternalState(re);\\n var str = toString(string);\\n var raw = state.raw;\\n var result, reCopy, lastIndex, match, i, object, group;\\n\\n if (raw) {\\n raw.lastIndex = re.lastIndex;\\n result = call(patchedExec, raw, str);\\n re.lastIndex = raw.lastIndex;\\n return result;\\n }\\n\\n var groups = state.groups;\\n var sticky = UNSUPPORTED_Y && re.sticky;\\n var flags = call(regexpFlags, re);\\n var source = re.source;\\n var charsAdded = 0;\\n var strCopy = str;\\n\\n if (sticky) {\\n flags = replace(flags, 'y', '');\\n if (indexOf(flags, 'g') === -1) {\\n flags += 'g';\\n }\\n\\n strCopy = stringSlice(str, re.lastIndex);\\n // Support anchored sticky behavior.\\n if (re.lastIndex > 0 && (!re.multiline || re.multiline && charAt(str, re.lastIndex - 1) !== '\\\\n')) {\\n source = '(?: ' + source + ')';\\n strCopy = ' ' + strCopy;\\n charsAdded++;\\n }\\n // ^(? + rx + ) is needed, in combination with some str slicing, to\\n // simulate the 'y' flag.\\n reCopy = new RegExp('^(?:' + source + ')', flags);\\n }\\n\\n if (NPCG_INCLUDED) {\\n reCopy = new RegExp('^' + source + '$(?!\\\\\\\\s)', flags);\\n }\\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;\\n\\n match = call(nativeExec, sticky ? reCopy : re, strCopy);\\n\\n if (sticky) {\\n if (match) {\\n match.input = stringSlice(match.input, charsAdded);\\n match[0] = stringSlice(match[0], charsAdded);\\n match.index = re.lastIndex;\\n re.lastIndex += match[0].length;\\n } else re.lastIndex = 0;\\n } else if (UPDATES_LAST_INDEX_WRONG && match) {\\n re.lastIndex = re.global ? match.index + match[0].length : lastIndex;\\n }\\n if (NPCG_INCLUDED && match && match.length > 1) {\\n // Fix browsers whose \`exec\` methods don't consistently return \`undefined\`\\n // for NPCG, like IE8. NOTE: This doesn't work for /(.?)?/\\n call(nativeReplace, match[0], reCopy, function () {\\n for (i = 1; i < arguments.length - 2; i++) {\\n if (arguments[i] === undefined) match[i] = undefined;\\n }\\n });\\n }\\n\\n if (match && groups) {\\n match.groups = object = create(null);\\n for (i = 0; i < groups.length; i++) {\\n group = groups[i];\\n object[group[0]] = match[group[1]];\\n }\\n }\\n\\n return match;\\n };\\n}\\n\\nmodule.exports = patchedExec;\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/regexp-exec.js?")}),"./node_modules/core-js/internals/regexp-flags.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar anObject = __webpack_require__(/*! ../internals/an-object */ \\"./node_modules/core-js/internals/an-object.js\\");\\n\\n// \`RegExp.prototype.flags\` getter implementation\\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\\nmodule.exports = function () {\\n var that = anObject(this);\\n var result = '';\\n if (that.hasIndices) result += 'd';\\n if (that.global) result += 'g';\\n if (that.ignoreCase) result += 'i';\\n if (that.multiline) result += 'm';\\n if (that.dotAll) result += 's';\\n if (that.unicode) result += 'u';\\n if (that.unicodeSets) result += 'v';\\n if (that.sticky) result += 'y';\\n return result;\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/regexp-flags.js?")}),"./node_modules/core-js/internals/regexp-get-flags.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar call = __webpack_require__(/*! ../internals/function-call */ \\"./node_modules/core-js/internals/function-call.js\\");\\nvar hasOwn = __webpack_require__(/*! ../internals/has-own-property */ \\"./node_modules/core-js/internals/has-own-property.js\\");\\nvar isPrototypeOf = __webpack_require__(/*! ../internals/object-is-prototype-of */ \\"./node_modules/core-js/internals/object-is-prototype-of.js\\");\\nvar regExpFlags = __webpack_require__(/*! ../internals/regexp-flags */ \\"./node_modules/core-js/internals/regexp-flags.js\\");\\n\\nvar RegExpPrototype = RegExp.prototype;\\n\\nmodule.exports = function (R) {\\n var flags = R.flags;\\n return flags === undefined && !('flags' in RegExpPrototype) && !hasOwn(R, 'flags') && isPrototypeOf(RegExpPrototype, R)\\n ? call(regExpFlags, R) : flags;\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/regexp-get-flags.js?")}),"./node_modules/core-js/internals/regexp-sticky-helpers.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\nvar global = __webpack_require__(/*! ../internals/global */ \\"./node_modules/core-js/internals/global.js\\");\\n\\n// babel-minify and Closure Compiler transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError\\nvar $RegExp = global.RegExp;\\n\\nvar UNSUPPORTED_Y = fails(function () {\\n var re = $RegExp('a', 'y');\\n re.lastIndex = 2;\\n return re.exec('abcd') != null;\\n});\\n\\n// UC Browser bug\\n// https://github.com/zloirock/core-js/issues/1008\\nvar MISSED_STICKY = UNSUPPORTED_Y || fails(function () {\\n return !$RegExp('a', 'y').sticky;\\n});\\n\\nvar BROKEN_CARET = UNSUPPORTED_Y || fails(function () {\\n // https://bugzilla.mozilla.org/show_bug.cgi?id=773687\\n var re = $RegExp('^r', 'gy');\\n re.lastIndex = 2;\\n return re.exec('str') != null;\\n});\\n\\nmodule.exports = {\\n BROKEN_CARET: BROKEN_CARET,\\n MISSED_STICKY: MISSED_STICKY,\\n UNSUPPORTED_Y: UNSUPPORTED_Y\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/regexp-sticky-helpers.js?")}),"./node_modules/core-js/internals/regexp-unsupported-dot-all.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\nvar global = __webpack_require__(/*! ../internals/global */ \\"./node_modules/core-js/internals/global.js\\");\\n\\n// babel-minify and Closure Compiler transpiles RegExp('.', 's') -> /./s and it causes SyntaxError\\nvar $RegExp = global.RegExp;\\n\\nmodule.exports = fails(function () {\\n var re = $RegExp('.', 's');\\n return !(re.dotAll && re.exec('\\\\n') && re.flags === 's');\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/regexp-unsupported-dot-all.js?")}),"./node_modules/core-js/internals/regexp-unsupported-ncg.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\nvar global = __webpack_require__(/*! ../internals/global */ \\"./node_modules/core-js/internals/global.js\\");\\n\\n// babel-minify and Closure Compiler transpiles RegExp('(?b)', 'g') -> /(?b)/g and it causes SyntaxError\\nvar $RegExp = global.RegExp;\\n\\nmodule.exports = fails(function () {\\n var re = $RegExp('(?b)', 'g');\\n return re.exec('b').groups.a !== 'b' ||\\n 'b'.replace(re, '$c') !== 'bc';\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/regexp-unsupported-ncg.js?")}),"./node_modules/core-js/internals/require-object-coercible.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar isNullOrUndefined = __webpack_require__(/*! ../internals/is-null-or-undefined */ \\"./node_modules/core-js/internals/is-null-or-undefined.js\\");\\n\\nvar $TypeError = TypeError;\\n\\n// \`RequireObjectCoercible\` abstract operation\\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\\nmodule.exports = function (it) {\\n if (isNullOrUndefined(it)) throw $TypeError(\\"Can't call method on \\" + it);\\n return it;\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/require-object-coercible.js?")}),"./node_modules/core-js/internals/set-helpers.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\n\\n// eslint-disable-next-line es/no-set -- safe\\nvar SetPrototype = Set.prototype;\\n\\nmodule.exports = {\\n // eslint-disable-next-line es/no-set -- safe\\n Set: Set,\\n add: uncurryThis(SetPrototype.add),\\n has: uncurryThis(SetPrototype.has),\\n remove: uncurryThis(SetPrototype['delete']),\\n proto: SetPrototype\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/set-helpers.js?")}),"./node_modules/core-js/internals/set-species.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ \\"./node_modules/core-js/internals/get-built-in.js\\");\\nvar defineBuiltInAccessor = __webpack_require__(/*! ../internals/define-built-in-accessor */ \\"./node_modules/core-js/internals/define-built-in-accessor.js\\");\\nvar wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ \\"./node_modules/core-js/internals/well-known-symbol.js\\");\\nvar DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ \\"./node_modules/core-js/internals/descriptors.js\\");\\n\\nvar SPECIES = wellKnownSymbol('species');\\n\\nmodule.exports = function (CONSTRUCTOR_NAME) {\\n var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\\n\\n if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\\n defineBuiltInAccessor(Constructor, SPECIES, {\\n configurable: true,\\n get: function () { return this; }\\n });\\n }\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/set-species.js?")}),"./node_modules/core-js/internals/set-to-string-tag.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar defineProperty = (__webpack_require__(/*! ../internals/object-define-property */ \\"./node_modules/core-js/internals/object-define-property.js\\").f);\\nvar hasOwn = __webpack_require__(/*! ../internals/has-own-property */ \\"./node_modules/core-js/internals/has-own-property.js\\");\\nvar wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ \\"./node_modules/core-js/internals/well-known-symbol.js\\");\\n\\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\\n\\nmodule.exports = function (target, TAG, STATIC) {\\n if (target && !STATIC) target = target.prototype;\\n if (target && !hasOwn(target, TO_STRING_TAG)) {\\n defineProperty(target, TO_STRING_TAG, { configurable: true, value: TAG });\\n }\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/set-to-string-tag.js?")}),"./node_modules/core-js/internals/shared-key.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar shared = __webpack_require__(/*! ../internals/shared */ \\"./node_modules/core-js/internals/shared.js\\");\\nvar uid = __webpack_require__(/*! ../internals/uid */ \\"./node_modules/core-js/internals/uid.js\\");\\n\\nvar keys = shared('keys');\\n\\nmodule.exports = function (key) {\\n return keys[key] || (keys[key] = uid(key));\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/shared-key.js?")}),"./node_modules/core-js/internals/shared-store.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar global = __webpack_require__(/*! ../internals/global */ \\"./node_modules/core-js/internals/global.js\\");\\nvar defineGlobalProperty = __webpack_require__(/*! ../internals/define-global-property */ \\"./node_modules/core-js/internals/define-global-property.js\\");\\n\\nvar SHARED = '__core-js_shared__';\\nvar store = global[SHARED] || defineGlobalProperty(SHARED, {});\\n\\nmodule.exports = store;\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/shared-store.js?")}),"./node_modules/core-js/internals/shared.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar IS_PURE = __webpack_require__(/*! ../internals/is-pure */ \\"./node_modules/core-js/internals/is-pure.js\\");\\nvar store = __webpack_require__(/*! ../internals/shared-store */ \\"./node_modules/core-js/internals/shared-store.js\\");\\n\\n(module.exports = function (key, value) {\\n return store[key] || (store[key] = value !== undefined ? value : {});\\n})('versions', []).push({\\n version: '3.32.0',\\n mode: IS_PURE ? 'pure' : 'global',\\n copyright: '© 2014-2023 Denis Pushkarev (zloirock.ru)',\\n license: 'https://github.com/zloirock/core-js/blob/v3.32.0/LICENSE',\\n source: 'https://github.com/zloirock/core-js'\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/shared.js?")}),"./node_modules/core-js/internals/species-constructor.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar anObject = __webpack_require__(/*! ../internals/an-object */ \\"./node_modules/core-js/internals/an-object.js\\");\\nvar aConstructor = __webpack_require__(/*! ../internals/a-constructor */ \\"./node_modules/core-js/internals/a-constructor.js\\");\\nvar isNullOrUndefined = __webpack_require__(/*! ../internals/is-null-or-undefined */ \\"./node_modules/core-js/internals/is-null-or-undefined.js\\");\\nvar wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ \\"./node_modules/core-js/internals/well-known-symbol.js\\");\\n\\nvar SPECIES = wellKnownSymbol('species');\\n\\n// \`SpeciesConstructor\` abstract operation\\n// https://tc39.es/ecma262/#sec-speciesconstructor\\nmodule.exports = function (O, defaultConstructor) {\\n var C = anObject(O).constructor;\\n var S;\\n return C === undefined || isNullOrUndefined(S = anObject(C)[SPECIES]) ? defaultConstructor : aConstructor(S);\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/species-constructor.js?")}),"./node_modules/core-js/internals/string-multibyte.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\nvar toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ \\"./node_modules/core-js/internals/to-integer-or-infinity.js\\");\\nvar toString = __webpack_require__(/*! ../internals/to-string */ \\"./node_modules/core-js/internals/to-string.js\\");\\nvar requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ \\"./node_modules/core-js/internals/require-object-coercible.js\\");\\n\\nvar charAt = uncurryThis(''.charAt);\\nvar charCodeAt = uncurryThis(''.charCodeAt);\\nvar stringSlice = uncurryThis(''.slice);\\n\\nvar createMethod = function (CONVERT_TO_STRING) {\\n return function ($this, pos) {\\n var S = toString(requireObjectCoercible($this));\\n var position = toIntegerOrInfinity(pos);\\n var size = S.length;\\n var first, second;\\n if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\\n first = charCodeAt(S, position);\\n return first < 0xD800 || first > 0xDBFF || position + 1 === size\\n || (second = charCodeAt(S, position + 1)) < 0xDC00 || second > 0xDFFF\\n ? CONVERT_TO_STRING\\n ? charAt(S, position)\\n : first\\n : CONVERT_TO_STRING\\n ? stringSlice(S, position, position + 2)\\n : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\\n };\\n};\\n\\nmodule.exports = {\\n // \`String.prototype.codePointAt\` method\\n // https://tc39.es/ecma262/#sec-string.prototype.codepointat\\n codeAt: createMethod(false),\\n // \`String.prototype.at\` method\\n // https://github.com/mathiasbynens/String.prototype.at\\n charAt: createMethod(true)\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/string-multibyte.js?")}),"./node_modules/core-js/internals/string-punycode-to-ascii.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\n// based on https://github.com/bestiejs/punycode.js/blob/master/punycode.js\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\n\\nvar maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\\nvar base = 36;\\nvar tMin = 1;\\nvar tMax = 26;\\nvar skew = 38;\\nvar damp = 700;\\nvar initialBias = 72;\\nvar initialN = 128; // 0x80\\nvar delimiter = '-'; // '\\\\x2D'\\nvar regexNonASCII = /[^\\\\0-\\\\u007E]/; // non-ASCII chars\\nvar regexSeparators = /[.\\\\u3002\\\\uFF0E\\\\uFF61]/g; // RFC 3490 separators\\nvar OVERFLOW_ERROR = 'Overflow: input needs wider integers to process';\\nvar baseMinusTMin = base - tMin;\\n\\nvar $RangeError = RangeError;\\nvar exec = uncurryThis(regexSeparators.exec);\\nvar floor = Math.floor;\\nvar fromCharCode = String.fromCharCode;\\nvar charCodeAt = uncurryThis(''.charCodeAt);\\nvar join = uncurryThis([].join);\\nvar push = uncurryThis([].push);\\nvar replace = uncurryThis(''.replace);\\nvar split = uncurryThis(''.split);\\nvar toLowerCase = uncurryThis(''.toLowerCase);\\n\\n/**\\n * Creates an array containing the numeric code points of each Unicode\\n * character in the string. While JavaScript uses UCS-2 internally,\\n * this function will convert a pair of surrogate halves (each of which\\n * UCS-2 exposes as separate characters) into a single code point,\\n * matching UTF-16.\\n */\\nvar ucs2decode = function (string) {\\n var output = [];\\n var counter = 0;\\n var length = string.length;\\n while (counter < length) {\\n var value = charCodeAt(string, counter++);\\n if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\\n // It's a high surrogate, and there is a next character.\\n var extra = charCodeAt(string, counter++);\\n if ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\\n push(output, ((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\\n } else {\\n // It's an unmatched surrogate; only append this code unit, in case the\\n // next code unit is the high surrogate of a surrogate pair.\\n push(output, value);\\n counter--;\\n }\\n } else {\\n push(output, value);\\n }\\n }\\n return output;\\n};\\n\\n/**\\n * Converts a digit/integer into a basic code point.\\n */\\nvar digitToBasic = function (digit) {\\n // 0..25 map to ASCII a..z or A..Z\\n // 26..35 map to ASCII 0..9\\n return digit + 22 + 75 * (digit < 26);\\n};\\n\\n/**\\n * Bias adaptation function as per section 3.4 of RFC 3492.\\n * https://tools.ietf.org/html/rfc3492#section-3.4\\n */\\nvar adapt = function (delta, numPoints, firstTime) {\\n var k = 0;\\n delta = firstTime ? floor(delta / damp) : delta >> 1;\\n delta += floor(delta / numPoints);\\n while (delta > baseMinusTMin * tMax >> 1) {\\n delta = floor(delta / baseMinusTMin);\\n k += base;\\n }\\n return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\\n};\\n\\n/**\\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\\n * Punycode string of ASCII-only symbols.\\n */\\nvar encode = function (input) {\\n var output = [];\\n\\n // Convert the input in UCS-2 to an array of Unicode code points.\\n input = ucs2decode(input);\\n\\n // Cache the length.\\n var inputLength = input.length;\\n\\n // Initialize the state.\\n var n = initialN;\\n var delta = 0;\\n var bias = initialBias;\\n var i, currentValue;\\n\\n // Handle the basic code points.\\n for (i = 0; i < input.length; i++) {\\n currentValue = input[i];\\n if (currentValue < 0x80) {\\n push(output, fromCharCode(currentValue));\\n }\\n }\\n\\n var basicLength = output.length; // number of basic code points.\\n var handledCPCount = basicLength; // number of code points that have been handled;\\n\\n // Finish the basic string with a delimiter unless it's empty.\\n if (basicLength) {\\n push(output, delimiter);\\n }\\n\\n // Main encoding loop:\\n while (handledCPCount < inputLength) {\\n // All non-basic code points < n have been handled already. Find the next larger one:\\n var m = maxInt;\\n for (i = 0; i < input.length; i++) {\\n currentValue = input[i];\\n if (currentValue >= n && currentValue < m) {\\n m = currentValue;\\n }\\n }\\n\\n // Increase \`delta\` enough to advance the decoder's state to , but guard against overflow.\\n var handledCPCountPlusOne = handledCPCount + 1;\\n if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\\n throw $RangeError(OVERFLOW_ERROR);\\n }\\n\\n delta += (m - n) * handledCPCountPlusOne;\\n n = m;\\n\\n for (i = 0; i < input.length; i++) {\\n currentValue = input[i];\\n if (currentValue < n && ++delta > maxInt) {\\n throw $RangeError(OVERFLOW_ERROR);\\n }\\n if (currentValue == n) {\\n // Represent delta as a generalized variable-length integer.\\n var q = delta;\\n var k = base;\\n while (true) {\\n var t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\\n if (q < t) break;\\n var qMinusT = q - t;\\n var baseMinusT = base - t;\\n push(output, fromCharCode(digitToBasic(t + qMinusT % baseMinusT)));\\n q = floor(qMinusT / baseMinusT);\\n k += base;\\n }\\n\\n push(output, fromCharCode(digitToBasic(q)));\\n bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\\n delta = 0;\\n handledCPCount++;\\n }\\n }\\n\\n delta++;\\n n++;\\n }\\n return join(output, '');\\n};\\n\\nmodule.exports = function (input) {\\n var encoded = [];\\n var labels = split(replace(toLowerCase(input), regexSeparators, '\\\\u002E'), '.');\\n var i, label;\\n for (i = 0; i < labels.length; i++) {\\n label = labels[i];\\n push(encoded, exec(regexNonASCII, label) ? 'xn--' + encode(label) : label);\\n }\\n return join(encoded, '.');\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/string-punycode-to-ascii.js?")}),"./node_modules/core-js/internals/string-repeat.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ \\"./node_modules/core-js/internals/to-integer-or-infinity.js\\");\\nvar toString = __webpack_require__(/*! ../internals/to-string */ \\"./node_modules/core-js/internals/to-string.js\\");\\nvar requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ \\"./node_modules/core-js/internals/require-object-coercible.js\\");\\n\\nvar $RangeError = RangeError;\\n\\n// \`String.prototype.repeat\` method implementation\\n// https://tc39.es/ecma262/#sec-string.prototype.repeat\\nmodule.exports = function repeat(count) {\\n var str = toString(requireObjectCoercible(this));\\n var result = '';\\n var n = toIntegerOrInfinity(count);\\n if (n < 0 || n == Infinity) throw $RangeError('Wrong number of repetitions');\\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str;\\n return result;\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/string-repeat.js?")}),"./node_modules/core-js/internals/string-trim-end.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar $trimEnd = (__webpack_require__(/*! ../internals/string-trim */ \\"./node_modules/core-js/internals/string-trim.js\\").end);\\nvar forcedStringTrimMethod = __webpack_require__(/*! ../internals/string-trim-forced */ \\"./node_modules/core-js/internals/string-trim-forced.js\\");\\n\\n// \`String.prototype.{ trimEnd, trimRight }\` method\\n// https://tc39.es/ecma262/#sec-string.prototype.trimend\\n// https://tc39.es/ecma262/#String.prototype.trimright\\nmodule.exports = forcedStringTrimMethod('trimEnd') ? function trimEnd() {\\n return $trimEnd(this);\\n// eslint-disable-next-line es/no-string-prototype-trimstart-trimend -- safe\\n} : ''.trimEnd;\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/string-trim-end.js?")}),"./node_modules/core-js/internals/string-trim-forced.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar PROPER_FUNCTION_NAME = (__webpack_require__(/*! ../internals/function-name */ \\"./node_modules/core-js/internals/function-name.js\\").PROPER);\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\nvar whitespaces = __webpack_require__(/*! ../internals/whitespaces */ \\"./node_modules/core-js/internals/whitespaces.js\\");\\n\\nvar non = '\\\\u200B\\\\u0085\\\\u180E';\\n\\n// check that a method works with the correct list\\n// of whitespaces and has a correct name\\nmodule.exports = function (METHOD_NAME) {\\n return fails(function () {\\n return !!whitespaces[METHOD_NAME]()\\n || non[METHOD_NAME]() !== non\\n || (PROPER_FUNCTION_NAME && whitespaces[METHOD_NAME].name !== METHOD_NAME);\\n });\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/string-trim-forced.js?")}),"./node_modules/core-js/internals/string-trim.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\nvar requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ \\"./node_modules/core-js/internals/require-object-coercible.js\\");\\nvar toString = __webpack_require__(/*! ../internals/to-string */ \\"./node_modules/core-js/internals/to-string.js\\");\\nvar whitespaces = __webpack_require__(/*! ../internals/whitespaces */ \\"./node_modules/core-js/internals/whitespaces.js\\");\\n\\nvar replace = uncurryThis(''.replace);\\nvar ltrim = RegExp('^[' + whitespaces + ']+');\\nvar rtrim = RegExp('(^|[^' + whitespaces + '])[' + whitespaces + ']+$');\\n\\n// \`String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }\` methods implementation\\nvar createMethod = function (TYPE) {\\n return function ($this) {\\n var string = toString(requireObjectCoercible($this));\\n if (TYPE & 1) string = replace(string, ltrim, '');\\n if (TYPE & 2) string = replace(string, rtrim, '$1');\\n return string;\\n };\\n};\\n\\nmodule.exports = {\\n // \`String.prototype.{ trimLeft, trimStart }\` methods\\n // https://tc39.es/ecma262/#sec-string.prototype.trimstart\\n start: createMethod(1),\\n // \`String.prototype.{ trimRight, trimEnd }\` methods\\n // https://tc39.es/ecma262/#sec-string.prototype.trimend\\n end: createMethod(2),\\n // \`String.prototype.trim\` method\\n // https://tc39.es/ecma262/#sec-string.prototype.trim\\n trim: createMethod(3)\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/string-trim.js?")}),"./node_modules/core-js/internals/structured-clone-proper-transfer.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar global = __webpack_require__(/*! ../internals/global */ \\"./node_modules/core-js/internals/global.js\\");\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\nvar V8 = __webpack_require__(/*! ../internals/engine-v8-version */ \\"./node_modules/core-js/internals/engine-v8-version.js\\");\\nvar IS_BROWSER = __webpack_require__(/*! ../internals/engine-is-browser */ \\"./node_modules/core-js/internals/engine-is-browser.js\\");\\nvar IS_DENO = __webpack_require__(/*! ../internals/engine-is-deno */ \\"./node_modules/core-js/internals/engine-is-deno.js\\");\\nvar IS_NODE = __webpack_require__(/*! ../internals/engine-is-node */ \\"./node_modules/core-js/internals/engine-is-node.js\\");\\n\\nvar structuredClone = global.structuredClone;\\n\\nmodule.exports = !!structuredClone && !fails(function () {\\n // prevent V8 ArrayBufferDetaching protector cell invalidation and performance degradation\\n // https://github.com/zloirock/core-js/issues/679\\n if ((IS_DENO && V8 > 92) || (IS_NODE && V8 > 94) || (IS_BROWSER && V8 > 97)) return false;\\n var buffer = new ArrayBuffer(8);\\n var clone = structuredClone(buffer, { transfer: [buffer] });\\n return buffer.byteLength != 0 || clone.byteLength != 8;\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/structured-clone-proper-transfer.js?")}),"./node_modules/core-js/internals/symbol-constructor-detection.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\n/* eslint-disable es/no-symbol -- required for testing */\\nvar V8_VERSION = __webpack_require__(/*! ../internals/engine-v8-version */ \\"./node_modules/core-js/internals/engine-v8-version.js\\");\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\nvar global = __webpack_require__(/*! ../internals/global */ \\"./node_modules/core-js/internals/global.js\\");\\n\\nvar $String = global.String;\\n\\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\\n var symbol = Symbol();\\n // Chrome 38 Symbol has incorrect toString conversion\\n // \`get-own-property-symbols\` polyfill symbols converted to object are not Symbol instances\\n // nb: Do not call \`String\` directly to avoid this being optimized out to \`symbol+''\` which will,\\n // of course, fail.\\n return !$String(symbol) || !(Object(symbol) instanceof Symbol) ||\\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/symbol-constructor-detection.js?")}),"./node_modules/core-js/internals/task.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar global = __webpack_require__(/*! ../internals/global */ \\"./node_modules/core-js/internals/global.js\\");\\nvar apply = __webpack_require__(/*! ../internals/function-apply */ \\"./node_modules/core-js/internals/function-apply.js\\");\\nvar bind = __webpack_require__(/*! ../internals/function-bind-context */ \\"./node_modules/core-js/internals/function-bind-context.js\\");\\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \\"./node_modules/core-js/internals/is-callable.js\\");\\nvar hasOwn = __webpack_require__(/*! ../internals/has-own-property */ \\"./node_modules/core-js/internals/has-own-property.js\\");\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\nvar html = __webpack_require__(/*! ../internals/html */ \\"./node_modules/core-js/internals/html.js\\");\\nvar arraySlice = __webpack_require__(/*! ../internals/array-slice */ \\"./node_modules/core-js/internals/array-slice.js\\");\\nvar createElement = __webpack_require__(/*! ../internals/document-create-element */ \\"./node_modules/core-js/internals/document-create-element.js\\");\\nvar validateArgumentsLength = __webpack_require__(/*! ../internals/validate-arguments-length */ \\"./node_modules/core-js/internals/validate-arguments-length.js\\");\\nvar IS_IOS = __webpack_require__(/*! ../internals/engine-is-ios */ \\"./node_modules/core-js/internals/engine-is-ios.js\\");\\nvar IS_NODE = __webpack_require__(/*! ../internals/engine-is-node */ \\"./node_modules/core-js/internals/engine-is-node.js\\");\\n\\nvar set = global.setImmediate;\\nvar clear = global.clearImmediate;\\nvar process = global.process;\\nvar Dispatch = global.Dispatch;\\nvar Function = global.Function;\\nvar MessageChannel = global.MessageChannel;\\nvar String = global.String;\\nvar counter = 0;\\nvar queue = {};\\nvar ONREADYSTATECHANGE = 'onreadystatechange';\\nvar $location, defer, channel, port;\\n\\nfails(function () {\\n // Deno throws a ReferenceError on \`location\` access without \`--location\` flag\\n $location = global.location;\\n});\\n\\nvar run = function (id) {\\n if (hasOwn(queue, id)) {\\n var fn = queue[id];\\n delete queue[id];\\n fn();\\n }\\n};\\n\\nvar runner = function (id) {\\n return function () {\\n run(id);\\n };\\n};\\n\\nvar eventListener = function (event) {\\n run(event.data);\\n};\\n\\nvar globalPostMessageDefer = function (id) {\\n // old engines have not location.origin\\n global.postMessage(String(id), $location.protocol + '//' + $location.host);\\n};\\n\\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\\nif (!set || !clear) {\\n set = function setImmediate(handler) {\\n validateArgumentsLength(arguments.length, 1);\\n var fn = isCallable(handler) ? handler : Function(handler);\\n var args = arraySlice(arguments, 1);\\n queue[++counter] = function () {\\n apply(fn, undefined, args);\\n };\\n defer(counter);\\n return counter;\\n };\\n clear = function clearImmediate(id) {\\n delete queue[id];\\n };\\n // Node.js 0.8-\\n if (IS_NODE) {\\n defer = function (id) {\\n process.nextTick(runner(id));\\n };\\n // Sphere (JS game engine) Dispatch API\\n } else if (Dispatch && Dispatch.now) {\\n defer = function (id) {\\n Dispatch.now(runner(id));\\n };\\n // Browsers with MessageChannel, includes WebWorkers\\n // except iOS - https://github.com/zloirock/core-js/issues/624\\n } else if (MessageChannel && !IS_IOS) {\\n channel = new MessageChannel();\\n port = channel.port2;\\n channel.port1.onmessage = eventListener;\\n defer = bind(port.postMessage, port);\\n // Browsers with postMessage, skip WebWorkers\\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\\n } else if (\\n global.addEventListener &&\\n isCallable(global.postMessage) &&\\n !global.importScripts &&\\n $location && $location.protocol !== 'file:' &&\\n !fails(globalPostMessageDefer)\\n ) {\\n defer = globalPostMessageDefer;\\n global.addEventListener('message', eventListener, false);\\n // IE8-\\n } else if (ONREADYSTATECHANGE in createElement('script')) {\\n defer = function (id) {\\n html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () {\\n html.removeChild(this);\\n run(id);\\n };\\n };\\n // Rest old browsers\\n } else {\\n defer = function (id) {\\n setTimeout(runner(id), 0);\\n };\\n }\\n}\\n\\nmodule.exports = {\\n set: set,\\n clear: clear\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/task.js?")}),"./node_modules/core-js/internals/this-number-value.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\n\\n// \`thisNumberValue\` abstract operation\\n// https://tc39.es/ecma262/#sec-thisnumbervalue\\nmodule.exports = uncurryThis(1.0.valueOf);\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/this-number-value.js?")}),"./node_modules/core-js/internals/to-absolute-index.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ \\"./node_modules/core-js/internals/to-integer-or-infinity.js\\");\\n\\nvar max = Math.max;\\nvar min = Math.min;\\n\\n// Helper for a popular repeating case of the spec:\\n// Let integer be ? ToInteger(index).\\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\\nmodule.exports = function (index, length) {\\n var integer = toIntegerOrInfinity(index);\\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/to-absolute-index.js?")}),"./node_modules/core-js/internals/to-big-int.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ \\"./node_modules/core-js/internals/to-primitive.js\\");\\n\\nvar $TypeError = TypeError;\\n\\n// \`ToBigInt\` abstract operation\\n// https://tc39.es/ecma262/#sec-tobigint\\nmodule.exports = function (argument) {\\n var prim = toPrimitive(argument, 'number');\\n if (typeof prim == 'number') throw $TypeError(\\"Can't convert number to bigint\\");\\n // eslint-disable-next-line es/no-bigint -- safe\\n return BigInt(prim);\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/to-big-int.js?")}),"./node_modules/core-js/internals/to-index.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ \\"./node_modules/core-js/internals/to-integer-or-infinity.js\\");\\nvar toLength = __webpack_require__(/*! ../internals/to-length */ \\"./node_modules/core-js/internals/to-length.js\\");\\n\\nvar $RangeError = RangeError;\\n\\n// \`ToIndex\` abstract operation\\n// https://tc39.es/ecma262/#sec-toindex\\nmodule.exports = function (it) {\\n if (it === undefined) return 0;\\n var number = toIntegerOrInfinity(it);\\n var length = toLength(number);\\n if (number !== length) throw $RangeError('Wrong length or index');\\n return length;\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/to-index.js?")}),"./node_modules/core-js/internals/to-indexed-object.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\n// toObject with fallback for non-array-like ES3 strings\\nvar IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ \\"./node_modules/core-js/internals/indexed-object.js\\");\\nvar requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ \\"./node_modules/core-js/internals/require-object-coercible.js\\");\\n\\nmodule.exports = function (it) {\\n return IndexedObject(requireObjectCoercible(it));\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/to-indexed-object.js?")}),"./node_modules/core-js/internals/to-integer-or-infinity.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar trunc = __webpack_require__(/*! ../internals/math-trunc */ \\"./node_modules/core-js/internals/math-trunc.js\\");\\n\\n// \`ToIntegerOrInfinity\` abstract operation\\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\\nmodule.exports = function (argument) {\\n var number = +argument;\\n // eslint-disable-next-line no-self-compare -- NaN check\\n return number !== number || number === 0 ? 0 : trunc(number);\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/to-integer-or-infinity.js?")}),"./node_modules/core-js/internals/to-length.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ \\"./node_modules/core-js/internals/to-integer-or-infinity.js\\");\\n\\nvar min = Math.min;\\n\\n// \`ToLength\` abstract operation\\n// https://tc39.es/ecma262/#sec-tolength\\nmodule.exports = function (argument) {\\n return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/to-length.js?")}),"./node_modules/core-js/internals/to-object.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ \\"./node_modules/core-js/internals/require-object-coercible.js\\");\\n\\nvar $Object = Object;\\n\\n// \`ToObject\` abstract operation\\n// https://tc39.es/ecma262/#sec-toobject\\nmodule.exports = function (argument) {\\n return $Object(requireObjectCoercible(argument));\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/to-object.js?")}),"./node_modules/core-js/internals/to-offset.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar toPositiveInteger = __webpack_require__(/*! ../internals/to-positive-integer */ \\"./node_modules/core-js/internals/to-positive-integer.js\\");\\n\\nvar $RangeError = RangeError;\\n\\nmodule.exports = function (it, BYTES) {\\n var offset = toPositiveInteger(it);\\n if (offset % BYTES) throw $RangeError('Wrong offset');\\n return offset;\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/to-offset.js?")}),"./node_modules/core-js/internals/to-positive-integer.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ \\"./node_modules/core-js/internals/to-integer-or-infinity.js\\");\\n\\nvar $RangeError = RangeError;\\n\\nmodule.exports = function (it) {\\n var result = toIntegerOrInfinity(it);\\n if (result < 0) throw $RangeError(\\"The argument can't be less than 0\\");\\n return result;\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/to-positive-integer.js?")}),"./node_modules/core-js/internals/to-primitive.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar call = __webpack_require__(/*! ../internals/function-call */ \\"./node_modules/core-js/internals/function-call.js\\");\\nvar isObject = __webpack_require__(/*! ../internals/is-object */ \\"./node_modules/core-js/internals/is-object.js\\");\\nvar isSymbol = __webpack_require__(/*! ../internals/is-symbol */ \\"./node_modules/core-js/internals/is-symbol.js\\");\\nvar getMethod = __webpack_require__(/*! ../internals/get-method */ \\"./node_modules/core-js/internals/get-method.js\\");\\nvar ordinaryToPrimitive = __webpack_require__(/*! ../internals/ordinary-to-primitive */ \\"./node_modules/core-js/internals/ordinary-to-primitive.js\\");\\nvar wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ \\"./node_modules/core-js/internals/well-known-symbol.js\\");\\n\\nvar $TypeError = TypeError;\\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\\n\\n// \`ToPrimitive\` abstract operation\\n// https://tc39.es/ecma262/#sec-toprimitive\\nmodule.exports = function (input, pref) {\\n if (!isObject(input) || isSymbol(input)) return input;\\n var exoticToPrim = getMethod(input, TO_PRIMITIVE);\\n var result;\\n if (exoticToPrim) {\\n if (pref === undefined) pref = 'default';\\n result = call(exoticToPrim, input, pref);\\n if (!isObject(result) || isSymbol(result)) return result;\\n throw $TypeError(\\"Can't convert object to primitive value\\");\\n }\\n if (pref === undefined) pref = 'number';\\n return ordinaryToPrimitive(input, pref);\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/to-primitive.js?")}),"./node_modules/core-js/internals/to-property-key.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ \\"./node_modules/core-js/internals/to-primitive.js\\");\\nvar isSymbol = __webpack_require__(/*! ../internals/is-symbol */ \\"./node_modules/core-js/internals/is-symbol.js\\");\\n\\n// \`ToPropertyKey\` abstract operation\\n// https://tc39.es/ecma262/#sec-topropertykey\\nmodule.exports = function (argument) {\\n var key = toPrimitive(argument, 'string');\\n return isSymbol(key) ? key : key + '';\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/to-property-key.js?")}),"./node_modules/core-js/internals/to-string-tag-support.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ \\"./node_modules/core-js/internals/well-known-symbol.js\\");\\n\\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\\nvar test = {};\\n\\ntest[TO_STRING_TAG] = 'z';\\n\\nmodule.exports = String(test) === '[object z]';\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/to-string-tag-support.js?")}),"./node_modules/core-js/internals/to-string.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar classof = __webpack_require__(/*! ../internals/classof */ \\"./node_modules/core-js/internals/classof.js\\");\\n\\nvar $String = String;\\n\\nmodule.exports = function (argument) {\\n if (classof(argument) === 'Symbol') throw TypeError('Cannot convert a Symbol value to a string');\\n return $String(argument);\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/to-string.js?")}),"./node_modules/core-js/internals/to-uint8-clamped.js":((module)=>{eval("\\nvar round = Math.round;\\n\\nmodule.exports = function (it) {\\n var value = round(it);\\n return value < 0 ? 0 : value > 0xFF ? 0xFF : value & 0xFF;\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/to-uint8-clamped.js?")}),"./node_modules/core-js/internals/try-node-require.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar IS_NODE = __webpack_require__(/*! ../internals/engine-is-node */ \\"./node_modules/core-js/internals/engine-is-node.js\\");\\n\\nmodule.exports = function (name) {\\n try {\\n // eslint-disable-next-line no-new-func -- safe\\n if (IS_NODE) return Function('return require(\\"' + name + '\\")')();\\n } catch (error) { /* empty */ }\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/try-node-require.js?")}),"./node_modules/core-js/internals/try-to-string.js":((module)=>{eval("\\nvar $String = String;\\n\\nmodule.exports = function (argument) {\\n try {\\n return $String(argument);\\n } catch (error) {\\n return 'Object';\\n }\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/try-to-string.js?")}),"./node_modules/core-js/internals/typed-array-constructor.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar global = __webpack_require__(/*! ../internals/global */ \\"./node_modules/core-js/internals/global.js\\");\\nvar call = __webpack_require__(/*! ../internals/function-call */ \\"./node_modules/core-js/internals/function-call.js\\");\\nvar DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ \\"./node_modules/core-js/internals/descriptors.js\\");\\nvar TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS = __webpack_require__(/*! ../internals/typed-array-constructors-require-wrappers */ \\"./node_modules/core-js/internals/typed-array-constructors-require-wrappers.js\\");\\nvar ArrayBufferViewCore = __webpack_require__(/*! ../internals/array-buffer-view-core */ \\"./node_modules/core-js/internals/array-buffer-view-core.js\\");\\nvar ArrayBufferModule = __webpack_require__(/*! ../internals/array-buffer */ \\"./node_modules/core-js/internals/array-buffer.js\\");\\nvar anInstance = __webpack_require__(/*! ../internals/an-instance */ \\"./node_modules/core-js/internals/an-instance.js\\");\\nvar createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ \\"./node_modules/core-js/internals/create-property-descriptor.js\\");\\nvar createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ \\"./node_modules/core-js/internals/create-non-enumerable-property.js\\");\\nvar isIntegralNumber = __webpack_require__(/*! ../internals/is-integral-number */ \\"./node_modules/core-js/internals/is-integral-number.js\\");\\nvar toLength = __webpack_require__(/*! ../internals/to-length */ \\"./node_modules/core-js/internals/to-length.js\\");\\nvar toIndex = __webpack_require__(/*! ../internals/to-index */ \\"./node_modules/core-js/internals/to-index.js\\");\\nvar toOffset = __webpack_require__(/*! ../internals/to-offset */ \\"./node_modules/core-js/internals/to-offset.js\\");\\nvar toUint8Clamped = __webpack_require__(/*! ../internals/to-uint8-clamped */ \\"./node_modules/core-js/internals/to-uint8-clamped.js\\");\\nvar toPropertyKey = __webpack_require__(/*! ../internals/to-property-key */ \\"./node_modules/core-js/internals/to-property-key.js\\");\\nvar hasOwn = __webpack_require__(/*! ../internals/has-own-property */ \\"./node_modules/core-js/internals/has-own-property.js\\");\\nvar classof = __webpack_require__(/*! ../internals/classof */ \\"./node_modules/core-js/internals/classof.js\\");\\nvar isObject = __webpack_require__(/*! ../internals/is-object */ \\"./node_modules/core-js/internals/is-object.js\\");\\nvar isSymbol = __webpack_require__(/*! ../internals/is-symbol */ \\"./node_modules/core-js/internals/is-symbol.js\\");\\nvar create = __webpack_require__(/*! ../internals/object-create */ \\"./node_modules/core-js/internals/object-create.js\\");\\nvar isPrototypeOf = __webpack_require__(/*! ../internals/object-is-prototype-of */ \\"./node_modules/core-js/internals/object-is-prototype-of.js\\");\\nvar setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ \\"./node_modules/core-js/internals/object-set-prototype-of.js\\");\\nvar getOwnPropertyNames = (__webpack_require__(/*! ../internals/object-get-own-property-names */ \\"./node_modules/core-js/internals/object-get-own-property-names.js\\").f);\\nvar typedArrayFrom = __webpack_require__(/*! ../internals/typed-array-from */ \\"./node_modules/core-js/internals/typed-array-from.js\\");\\nvar forEach = (__webpack_require__(/*! ../internals/array-iteration */ \\"./node_modules/core-js/internals/array-iteration.js\\").forEach);\\nvar setSpecies = __webpack_require__(/*! ../internals/set-species */ \\"./node_modules/core-js/internals/set-species.js\\");\\nvar defineBuiltInAccessor = __webpack_require__(/*! ../internals/define-built-in-accessor */ \\"./node_modules/core-js/internals/define-built-in-accessor.js\\");\\nvar definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ \\"./node_modules/core-js/internals/object-define-property.js\\");\\nvar getOwnPropertyDescriptorModule = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ \\"./node_modules/core-js/internals/object-get-own-property-descriptor.js\\");\\nvar InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ \\"./node_modules/core-js/internals/internal-state.js\\");\\nvar inheritIfRequired = __webpack_require__(/*! ../internals/inherit-if-required */ \\"./node_modules/core-js/internals/inherit-if-required.js\\");\\n\\nvar getInternalState = InternalStateModule.get;\\nvar setInternalState = InternalStateModule.set;\\nvar enforceInternalState = InternalStateModule.enforce;\\nvar nativeDefineProperty = definePropertyModule.f;\\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\\nvar RangeError = global.RangeError;\\nvar ArrayBuffer = ArrayBufferModule.ArrayBuffer;\\nvar ArrayBufferPrototype = ArrayBuffer.prototype;\\nvar DataView = ArrayBufferModule.DataView;\\nvar NATIVE_ARRAY_BUFFER_VIEWS = ArrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS;\\nvar TYPED_ARRAY_TAG = ArrayBufferViewCore.TYPED_ARRAY_TAG;\\nvar TypedArray = ArrayBufferViewCore.TypedArray;\\nvar TypedArrayPrototype = ArrayBufferViewCore.TypedArrayPrototype;\\nvar aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;\\nvar isTypedArray = ArrayBufferViewCore.isTypedArray;\\nvar BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\\nvar WRONG_LENGTH = 'Wrong length';\\n\\nvar fromList = function (C, list) {\\n aTypedArrayConstructor(C);\\n var index = 0;\\n var length = list.length;\\n var result = new C(length);\\n while (length > index) result[index] = list[index++];\\n return result;\\n};\\n\\nvar addGetter = function (it, key) {\\n defineBuiltInAccessor(it, key, {\\n configurable: true,\\n get: function () {\\n return getInternalState(this)[key];\\n }\\n });\\n};\\n\\nvar isArrayBuffer = function (it) {\\n var klass;\\n return isPrototypeOf(ArrayBufferPrototype, it) || (klass = classof(it)) == 'ArrayBuffer' || klass == 'SharedArrayBuffer';\\n};\\n\\nvar isTypedArrayIndex = function (target, key) {\\n return isTypedArray(target)\\n && !isSymbol(key)\\n && key in target\\n && isIntegralNumber(+key)\\n && key >= 0;\\n};\\n\\nvar wrappedGetOwnPropertyDescriptor = function getOwnPropertyDescriptor(target, key) {\\n key = toPropertyKey(key);\\n return isTypedArrayIndex(target, key)\\n ? createPropertyDescriptor(2, target[key])\\n : nativeGetOwnPropertyDescriptor(target, key);\\n};\\n\\nvar wrappedDefineProperty = function defineProperty(target, key, descriptor) {\\n key = toPropertyKey(key);\\n if (isTypedArrayIndex(target, key)\\n && isObject(descriptor)\\n && hasOwn(descriptor, 'value')\\n && !hasOwn(descriptor, 'get')\\n && !hasOwn(descriptor, 'set')\\n // TODO: add validation descriptor w/o calling accessors\\n && !descriptor.configurable\\n && (!hasOwn(descriptor, 'writable') || descriptor.writable)\\n && (!hasOwn(descriptor, 'enumerable') || descriptor.enumerable)\\n ) {\\n target[key] = descriptor.value;\\n return target;\\n } return nativeDefineProperty(target, key, descriptor);\\n};\\n\\nif (DESCRIPTORS) {\\n if (!NATIVE_ARRAY_BUFFER_VIEWS) {\\n getOwnPropertyDescriptorModule.f = wrappedGetOwnPropertyDescriptor;\\n definePropertyModule.f = wrappedDefineProperty;\\n addGetter(TypedArrayPrototype, 'buffer');\\n addGetter(TypedArrayPrototype, 'byteOffset');\\n addGetter(TypedArrayPrototype, 'byteLength');\\n addGetter(TypedArrayPrototype, 'length');\\n }\\n\\n $({ target: 'Object', stat: true, forced: !NATIVE_ARRAY_BUFFER_VIEWS }, {\\n getOwnPropertyDescriptor: wrappedGetOwnPropertyDescriptor,\\n defineProperty: wrappedDefineProperty\\n });\\n\\n module.exports = function (TYPE, wrapper, CLAMPED) {\\n var BYTES = TYPE.match(/\\\\d+/)[0] / 8;\\n var CONSTRUCTOR_NAME = TYPE + (CLAMPED ? 'Clamped' : '') + 'Array';\\n var GETTER = 'get' + TYPE;\\n var SETTER = 'set' + TYPE;\\n var NativeTypedArrayConstructor = global[CONSTRUCTOR_NAME];\\n var TypedArrayConstructor = NativeTypedArrayConstructor;\\n var TypedArrayConstructorPrototype = TypedArrayConstructor && TypedArrayConstructor.prototype;\\n var exported = {};\\n\\n var getter = function (that, index) {\\n var data = getInternalState(that);\\n return data.view[GETTER](index * BYTES + data.byteOffset, true);\\n };\\n\\n var setter = function (that, index, value) {\\n var data = getInternalState(that);\\n data.view[SETTER](index * BYTES + data.byteOffset, CLAMPED ? toUint8Clamped(value) : value, true);\\n };\\n\\n var addElement = function (that, index) {\\n nativeDefineProperty(that, index, {\\n get: function () {\\n return getter(this, index);\\n },\\n set: function (value) {\\n return setter(this, index, value);\\n },\\n enumerable: true\\n });\\n };\\n\\n if (!NATIVE_ARRAY_BUFFER_VIEWS) {\\n TypedArrayConstructor = wrapper(function (that, data, offset, $length) {\\n anInstance(that, TypedArrayConstructorPrototype);\\n var index = 0;\\n var byteOffset = 0;\\n var buffer, byteLength, length;\\n if (!isObject(data)) {\\n length = toIndex(data);\\n byteLength = length * BYTES;\\n buffer = new ArrayBuffer(byteLength);\\n } else if (isArrayBuffer(data)) {\\n buffer = data;\\n byteOffset = toOffset(offset, BYTES);\\n var $len = data.byteLength;\\n if ($length === undefined) {\\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\\n byteLength = $len - byteOffset;\\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\\n } else {\\n byteLength = toLength($length) * BYTES;\\n if (byteLength + byteOffset > $len) throw RangeError(WRONG_LENGTH);\\n }\\n length = byteLength / BYTES;\\n } else if (isTypedArray(data)) {\\n return fromList(TypedArrayConstructor, data);\\n } else {\\n return call(typedArrayFrom, TypedArrayConstructor, data);\\n }\\n setInternalState(that, {\\n buffer: buffer,\\n byteOffset: byteOffset,\\n byteLength: byteLength,\\n length: length,\\n view: new DataView(buffer)\\n });\\n while (index < length) addElement(that, index++);\\n });\\n\\n if (setPrototypeOf) setPrototypeOf(TypedArrayConstructor, TypedArray);\\n TypedArrayConstructorPrototype = TypedArrayConstructor.prototype = create(TypedArrayPrototype);\\n } else if (TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS) {\\n TypedArrayConstructor = wrapper(function (dummy, data, typedArrayOffset, $length) {\\n anInstance(dummy, TypedArrayConstructorPrototype);\\n return inheritIfRequired(function () {\\n if (!isObject(data)) return new NativeTypedArrayConstructor(toIndex(data));\\n if (isArrayBuffer(data)) return $length !== undefined\\n ? new NativeTypedArrayConstructor(data, toOffset(typedArrayOffset, BYTES), $length)\\n : typedArrayOffset !== undefined\\n ? new NativeTypedArrayConstructor(data, toOffset(typedArrayOffset, BYTES))\\n : new NativeTypedArrayConstructor(data);\\n if (isTypedArray(data)) return fromList(TypedArrayConstructor, data);\\n return call(typedArrayFrom, TypedArrayConstructor, data);\\n }(), dummy, TypedArrayConstructor);\\n });\\n\\n if (setPrototypeOf) setPrototypeOf(TypedArrayConstructor, TypedArray);\\n forEach(getOwnPropertyNames(NativeTypedArrayConstructor), function (key) {\\n if (!(key in TypedArrayConstructor)) {\\n createNonEnumerableProperty(TypedArrayConstructor, key, NativeTypedArrayConstructor[key]);\\n }\\n });\\n TypedArrayConstructor.prototype = TypedArrayConstructorPrototype;\\n }\\n\\n if (TypedArrayConstructorPrototype.constructor !== TypedArrayConstructor) {\\n createNonEnumerableProperty(TypedArrayConstructorPrototype, 'constructor', TypedArrayConstructor);\\n }\\n\\n enforceInternalState(TypedArrayConstructorPrototype).TypedArrayConstructor = TypedArrayConstructor;\\n\\n if (TYPED_ARRAY_TAG) {\\n createNonEnumerableProperty(TypedArrayConstructorPrototype, TYPED_ARRAY_TAG, CONSTRUCTOR_NAME);\\n }\\n\\n var FORCED = TypedArrayConstructor != NativeTypedArrayConstructor;\\n\\n exported[CONSTRUCTOR_NAME] = TypedArrayConstructor;\\n\\n $({ global: true, constructor: true, forced: FORCED, sham: !NATIVE_ARRAY_BUFFER_VIEWS }, exported);\\n\\n if (!(BYTES_PER_ELEMENT in TypedArrayConstructor)) {\\n createNonEnumerableProperty(TypedArrayConstructor, BYTES_PER_ELEMENT, BYTES);\\n }\\n\\n if (!(BYTES_PER_ELEMENT in TypedArrayConstructorPrototype)) {\\n createNonEnumerableProperty(TypedArrayConstructorPrototype, BYTES_PER_ELEMENT, BYTES);\\n }\\n\\n setSpecies(CONSTRUCTOR_NAME);\\n };\\n} else module.exports = function () { /* empty */ };\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/typed-array-constructor.js?")}),"./node_modules/core-js/internals/typed-array-constructors-require-wrappers.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\n/* eslint-disable no-new -- required for testing */\\nvar global = __webpack_require__(/*! ../internals/global */ \\"./node_modules/core-js/internals/global.js\\");\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\nvar checkCorrectnessOfIteration = __webpack_require__(/*! ../internals/check-correctness-of-iteration */ \\"./node_modules/core-js/internals/check-correctness-of-iteration.js\\");\\nvar NATIVE_ARRAY_BUFFER_VIEWS = (__webpack_require__(/*! ../internals/array-buffer-view-core */ \\"./node_modules/core-js/internals/array-buffer-view-core.js\\").NATIVE_ARRAY_BUFFER_VIEWS);\\n\\nvar ArrayBuffer = global.ArrayBuffer;\\nvar Int8Array = global.Int8Array;\\n\\nmodule.exports = !NATIVE_ARRAY_BUFFER_VIEWS || !fails(function () {\\n Int8Array(1);\\n}) || !fails(function () {\\n new Int8Array(-1);\\n}) || !checkCorrectnessOfIteration(function (iterable) {\\n new Int8Array();\\n new Int8Array(null);\\n new Int8Array(1.5);\\n new Int8Array(iterable);\\n}, true) || fails(function () {\\n // Safari (11+) bug - a reason why even Safari 13 should load a typed array polyfill\\n return new Int8Array(new ArrayBuffer(2), 1, undefined).length !== 1;\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/typed-array-constructors-require-wrappers.js?")}),"./node_modules/core-js/internals/typed-array-from.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar bind = __webpack_require__(/*! ../internals/function-bind-context */ \\"./node_modules/core-js/internals/function-bind-context.js\\");\\nvar call = __webpack_require__(/*! ../internals/function-call */ \\"./node_modules/core-js/internals/function-call.js\\");\\nvar aConstructor = __webpack_require__(/*! ../internals/a-constructor */ \\"./node_modules/core-js/internals/a-constructor.js\\");\\nvar toObject = __webpack_require__(/*! ../internals/to-object */ \\"./node_modules/core-js/internals/to-object.js\\");\\nvar lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ \\"./node_modules/core-js/internals/length-of-array-like.js\\");\\nvar getIterator = __webpack_require__(/*! ../internals/get-iterator */ \\"./node_modules/core-js/internals/get-iterator.js\\");\\nvar getIteratorMethod = __webpack_require__(/*! ../internals/get-iterator-method */ \\"./node_modules/core-js/internals/get-iterator-method.js\\");\\nvar isArrayIteratorMethod = __webpack_require__(/*! ../internals/is-array-iterator-method */ \\"./node_modules/core-js/internals/is-array-iterator-method.js\\");\\nvar isBigIntArray = __webpack_require__(/*! ../internals/is-big-int-array */ \\"./node_modules/core-js/internals/is-big-int-array.js\\");\\nvar aTypedArrayConstructor = (__webpack_require__(/*! ../internals/array-buffer-view-core */ \\"./node_modules/core-js/internals/array-buffer-view-core.js\\").aTypedArrayConstructor);\\nvar toBigInt = __webpack_require__(/*! ../internals/to-big-int */ \\"./node_modules/core-js/internals/to-big-int.js\\");\\n\\nmodule.exports = function from(source /* , mapfn, thisArg */) {\\n var C = aConstructor(this);\\n var O = toObject(source);\\n var argumentsLength = arguments.length;\\n var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\\n var mapping = mapfn !== undefined;\\n var iteratorMethod = getIteratorMethod(O);\\n var i, length, result, thisIsBigIntArray, value, step, iterator, next;\\n if (iteratorMethod && !isArrayIteratorMethod(iteratorMethod)) {\\n iterator = getIterator(O, iteratorMethod);\\n next = iterator.next;\\n O = [];\\n while (!(step = call(next, iterator)).done) {\\n O.push(step.value);\\n }\\n }\\n if (mapping && argumentsLength > 2) {\\n mapfn = bind(mapfn, arguments[2]);\\n }\\n length = lengthOfArrayLike(O);\\n result = new (aTypedArrayConstructor(C))(length);\\n thisIsBigIntArray = isBigIntArray(result);\\n for (i = 0; length > i; i++) {\\n value = mapping ? mapfn(O[i], i) : O[i];\\n // FF30- typed arrays doesn't properly convert objects to typed array values\\n result[i] = thisIsBigIntArray ? toBigInt(value) : +value;\\n }\\n return result;\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/typed-array-from.js?")}),"./node_modules/core-js/internals/uid.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\n\\nvar id = 0;\\nvar postfix = Math.random();\\nvar toString = uncurryThis(1.0.toString);\\n\\nmodule.exports = function (key) {\\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/uid.js?")}),"./node_modules/core-js/internals/url-constructor-detection.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\nvar wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ \\"./node_modules/core-js/internals/well-known-symbol.js\\");\\nvar DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ \\"./node_modules/core-js/internals/descriptors.js\\");\\nvar IS_PURE = __webpack_require__(/*! ../internals/is-pure */ \\"./node_modules/core-js/internals/is-pure.js\\");\\n\\nvar ITERATOR = wellKnownSymbol('iterator');\\n\\nmodule.exports = !fails(function () {\\n // eslint-disable-next-line unicorn/relative-url-style -- required for testing\\n var url = new URL('b?a=1&b=2&c=3', 'http://a');\\n var params = url.searchParams;\\n var params2 = new URLSearchParams('a=1&a=2&b=3');\\n var result = '';\\n url.pathname = 'c%20d';\\n params.forEach(function (value, key) {\\n params['delete']('b');\\n result += key + value;\\n });\\n params2['delete']('a', 2);\\n // \`undefined\` case is a Chromium 117 bug\\n // https://bugs.chromium.org/p/v8/issues/detail?id=14222\\n params2['delete']('b', undefined);\\n return (IS_PURE && (!url.toJSON || !params2.has('a', 1) || params2.has('a', 2) || !params2.has('a', undefined) || params2.has('b')))\\n || (!params.size && (IS_PURE || !DESCRIPTORS))\\n || !params.sort\\n || url.href !== 'http://a/c%20d?a=1&c=3'\\n || params.get('c') !== '3'\\n || String(new URLSearchParams('?a=1')) !== 'a=1'\\n || !params[ITERATOR]\\n // throws in Edge\\n || new URL('https://a@b').username !== 'a'\\n || new URLSearchParams(new URLSearchParams('a=b')).get('a') !== 'b'\\n // not punycoded in Edge\\n || new URL('http://тест').host !== 'xn--e1aybc'\\n // not escaped in Chrome 62-\\n || new URL('http://a#б').hash !== '#%D0%B1'\\n // fails in Chrome 66-\\n || result !== 'a1c3'\\n // throws in Safari\\n || new URL('http://x', undefined).host !== 'x';\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/url-constructor-detection.js?")}),"./node_modules/core-js/internals/use-symbol-as-uid.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\n/* eslint-disable es/no-symbol -- required for testing */\\nvar NATIVE_SYMBOL = __webpack_require__(/*! ../internals/symbol-constructor-detection */ \\"./node_modules/core-js/internals/symbol-constructor-detection.js\\");\\n\\nmodule.exports = NATIVE_SYMBOL\\n && !Symbol.sham\\n && typeof Symbol.iterator == 'symbol';\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/use-symbol-as-uid.js?")}),"./node_modules/core-js/internals/v8-prototype-define-bug.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ \\"./node_modules/core-js/internals/descriptors.js\\");\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\n\\n// V8 ~ Chrome 36-\\n// https://bugs.chromium.org/p/v8/issues/detail?id=3334\\nmodule.exports = DESCRIPTORS && fails(function () {\\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\\n return Object.defineProperty(function () { /* empty */ }, 'prototype', {\\n value: 42,\\n writable: false\\n }).prototype != 42;\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/v8-prototype-define-bug.js?")}),"./node_modules/core-js/internals/validate-arguments-length.js":((module)=>{eval("\\nvar $TypeError = TypeError;\\n\\nmodule.exports = function (passed, required) {\\n if (passed < required) throw $TypeError('Not enough arguments');\\n return passed;\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/validate-arguments-length.js?")}),"./node_modules/core-js/internals/weak-map-basic-detection.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar global = __webpack_require__(/*! ../internals/global */ \\"./node_modules/core-js/internals/global.js\\");\\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \\"./node_modules/core-js/internals/is-callable.js\\");\\n\\nvar WeakMap = global.WeakMap;\\n\\nmodule.exports = isCallable(WeakMap) && /native code/.test(String(WeakMap));\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/weak-map-basic-detection.js?")}),"./node_modules/core-js/internals/well-known-symbol.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar global = __webpack_require__(/*! ../internals/global */ \\"./node_modules/core-js/internals/global.js\\");\\nvar shared = __webpack_require__(/*! ../internals/shared */ \\"./node_modules/core-js/internals/shared.js\\");\\nvar hasOwn = __webpack_require__(/*! ../internals/has-own-property */ \\"./node_modules/core-js/internals/has-own-property.js\\");\\nvar uid = __webpack_require__(/*! ../internals/uid */ \\"./node_modules/core-js/internals/uid.js\\");\\nvar NATIVE_SYMBOL = __webpack_require__(/*! ../internals/symbol-constructor-detection */ \\"./node_modules/core-js/internals/symbol-constructor-detection.js\\");\\nvar USE_SYMBOL_AS_UID = __webpack_require__(/*! ../internals/use-symbol-as-uid */ \\"./node_modules/core-js/internals/use-symbol-as-uid.js\\");\\n\\nvar Symbol = global.Symbol;\\nvar WellKnownSymbolsStore = shared('wks');\\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol['for'] || Symbol : Symbol && Symbol.withoutSetter || uid;\\n\\nmodule.exports = function (name) {\\n if (!hasOwn(WellKnownSymbolsStore, name)) {\\n WellKnownSymbolsStore[name] = NATIVE_SYMBOL && hasOwn(Symbol, name)\\n ? Symbol[name]\\n : createWellKnownSymbol('Symbol.' + name);\\n } return WellKnownSymbolsStore[name];\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/well-known-symbol.js?")}),"./node_modules/core-js/internals/whitespaces.js":((module)=>{eval("\\n// a string of all valid unicode whitespaces\\nmodule.exports = '\\\\u0009\\\\u000A\\\\u000B\\\\u000C\\\\u000D\\\\u0020\\\\u00A0\\\\u1680\\\\u2000\\\\u2001\\\\u2002' +\\n '\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200A\\\\u202F\\\\u205F\\\\u3000\\\\u2028\\\\u2029\\\\uFEFF';\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/whitespaces.js?")}),"./node_modules/core-js/internals/wrap-error-constructor-with-cause.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ \\"./node_modules/core-js/internals/get-built-in.js\\");\\nvar hasOwn = __webpack_require__(/*! ../internals/has-own-property */ \\"./node_modules/core-js/internals/has-own-property.js\\");\\nvar createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ \\"./node_modules/core-js/internals/create-non-enumerable-property.js\\");\\nvar isPrototypeOf = __webpack_require__(/*! ../internals/object-is-prototype-of */ \\"./node_modules/core-js/internals/object-is-prototype-of.js\\");\\nvar setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ \\"./node_modules/core-js/internals/object-set-prototype-of.js\\");\\nvar copyConstructorProperties = __webpack_require__(/*! ../internals/copy-constructor-properties */ \\"./node_modules/core-js/internals/copy-constructor-properties.js\\");\\nvar proxyAccessor = __webpack_require__(/*! ../internals/proxy-accessor */ \\"./node_modules/core-js/internals/proxy-accessor.js\\");\\nvar inheritIfRequired = __webpack_require__(/*! ../internals/inherit-if-required */ \\"./node_modules/core-js/internals/inherit-if-required.js\\");\\nvar normalizeStringArgument = __webpack_require__(/*! ../internals/normalize-string-argument */ \\"./node_modules/core-js/internals/normalize-string-argument.js\\");\\nvar installErrorCause = __webpack_require__(/*! ../internals/install-error-cause */ \\"./node_modules/core-js/internals/install-error-cause.js\\");\\nvar installErrorStack = __webpack_require__(/*! ../internals/error-stack-install */ \\"./node_modules/core-js/internals/error-stack-install.js\\");\\nvar DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ \\"./node_modules/core-js/internals/descriptors.js\\");\\nvar IS_PURE = __webpack_require__(/*! ../internals/is-pure */ \\"./node_modules/core-js/internals/is-pure.js\\");\\n\\nmodule.exports = function (FULL_NAME, wrapper, FORCED, IS_AGGREGATE_ERROR) {\\n var STACK_TRACE_LIMIT = 'stackTraceLimit';\\n var OPTIONS_POSITION = IS_AGGREGATE_ERROR ? 2 : 1;\\n var path = FULL_NAME.split('.');\\n var ERROR_NAME = path[path.length - 1];\\n var OriginalError = getBuiltIn.apply(null, path);\\n\\n if (!OriginalError) return;\\n\\n var OriginalErrorPrototype = OriginalError.prototype;\\n\\n // V8 9.3- bug https://bugs.chromium.org/p/v8/issues/detail?id=12006\\n if (!IS_PURE && hasOwn(OriginalErrorPrototype, 'cause')) delete OriginalErrorPrototype.cause;\\n\\n if (!FORCED) return OriginalError;\\n\\n var BaseError = getBuiltIn('Error');\\n\\n var WrappedError = wrapper(function (a, b) {\\n var message = normalizeStringArgument(IS_AGGREGATE_ERROR ? b : a, undefined);\\n var result = IS_AGGREGATE_ERROR ? new OriginalError(a) : new OriginalError();\\n if (message !== undefined) createNonEnumerableProperty(result, 'message', message);\\n installErrorStack(result, WrappedError, result.stack, 2);\\n if (this && isPrototypeOf(OriginalErrorPrototype, this)) inheritIfRequired(result, this, WrappedError);\\n if (arguments.length > OPTIONS_POSITION) installErrorCause(result, arguments[OPTIONS_POSITION]);\\n return result;\\n });\\n\\n WrappedError.prototype = OriginalErrorPrototype;\\n\\n if (ERROR_NAME !== 'Error') {\\n if (setPrototypeOf) setPrototypeOf(WrappedError, BaseError);\\n else copyConstructorProperties(WrappedError, BaseError, { name: true });\\n } else if (DESCRIPTORS && STACK_TRACE_LIMIT in OriginalError) {\\n proxyAccessor(WrappedError, OriginalError, STACK_TRACE_LIMIT);\\n proxyAccessor(WrappedError, OriginalError, 'prepareStackTrace');\\n }\\n\\n copyConstructorProperties(WrappedError, OriginalError);\\n\\n if (!IS_PURE) try {\\n // Safari 13- bug: WebAssembly errors does not have a proper \`.name\`\\n if (OriginalErrorPrototype.name !== ERROR_NAME) {\\n createNonEnumerableProperty(OriginalErrorPrototype, 'name', ERROR_NAME);\\n }\\n OriginalErrorPrototype.constructor = WrappedError;\\n } catch (error) { /* empty */ }\\n\\n return WrappedError;\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/internals/wrap-error-constructor-with-cause.js?")}),"./node_modules/core-js/modules/es.array-buffer.constructor.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar global = __webpack_require__(/*! ../internals/global */ \\"./node_modules/core-js/internals/global.js\\");\\nvar arrayBufferModule = __webpack_require__(/*! ../internals/array-buffer */ \\"./node_modules/core-js/internals/array-buffer.js\\");\\nvar setSpecies = __webpack_require__(/*! ../internals/set-species */ \\"./node_modules/core-js/internals/set-species.js\\");\\n\\nvar ARRAY_BUFFER = 'ArrayBuffer';\\nvar ArrayBuffer = arrayBufferModule[ARRAY_BUFFER];\\nvar NativeArrayBuffer = global[ARRAY_BUFFER];\\n\\n// \`ArrayBuffer\` constructor\\n// https://tc39.es/ecma262/#sec-arraybuffer-constructor\\n$({ global: true, constructor: true, forced: NativeArrayBuffer !== ArrayBuffer }, {\\n ArrayBuffer: ArrayBuffer\\n});\\n\\nsetSpecies(ARRAY_BUFFER);\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.array-buffer.constructor.js?")}),"./node_modules/core-js/modules/es.array-buffer.slice.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this-clause */ \\"./node_modules/core-js/internals/function-uncurry-this-clause.js\\");\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\nvar ArrayBufferModule = __webpack_require__(/*! ../internals/array-buffer */ \\"./node_modules/core-js/internals/array-buffer.js\\");\\nvar anObject = __webpack_require__(/*! ../internals/an-object */ \\"./node_modules/core-js/internals/an-object.js\\");\\nvar toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ \\"./node_modules/core-js/internals/to-absolute-index.js\\");\\nvar toLength = __webpack_require__(/*! ../internals/to-length */ \\"./node_modules/core-js/internals/to-length.js\\");\\nvar speciesConstructor = __webpack_require__(/*! ../internals/species-constructor */ \\"./node_modules/core-js/internals/species-constructor.js\\");\\n\\nvar ArrayBuffer = ArrayBufferModule.ArrayBuffer;\\nvar DataView = ArrayBufferModule.DataView;\\nvar DataViewPrototype = DataView.prototype;\\nvar nativeArrayBufferSlice = uncurryThis(ArrayBuffer.prototype.slice);\\nvar getUint8 = uncurryThis(DataViewPrototype.getUint8);\\nvar setUint8 = uncurryThis(DataViewPrototype.setUint8);\\n\\nvar INCORRECT_SLICE = fails(function () {\\n return !new ArrayBuffer(2).slice(1, undefined).byteLength;\\n});\\n\\n// \`ArrayBuffer.prototype.slice\` method\\n// https://tc39.es/ecma262/#sec-arraybuffer.prototype.slice\\n$({ target: 'ArrayBuffer', proto: true, unsafe: true, forced: INCORRECT_SLICE }, {\\n slice: function slice(start, end) {\\n if (nativeArrayBufferSlice && end === undefined) {\\n return nativeArrayBufferSlice(anObject(this), start); // FF fix\\n }\\n var length = anObject(this).byteLength;\\n var first = toAbsoluteIndex(start, length);\\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\\n var result = new (speciesConstructor(this, ArrayBuffer))(toLength(fin - first));\\n var viewSource = new DataView(this);\\n var viewTarget = new DataView(result);\\n var index = 0;\\n while (first < fin) {\\n setUint8(viewTarget, index++, getUint8(viewSource, first++));\\n } return result;\\n }\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.array-buffer.slice.js?")}),"./node_modules/core-js/modules/es.array.at.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar toObject = __webpack_require__(/*! ../internals/to-object */ \\"./node_modules/core-js/internals/to-object.js\\");\\nvar lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ \\"./node_modules/core-js/internals/length-of-array-like.js\\");\\nvar toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ \\"./node_modules/core-js/internals/to-integer-or-infinity.js\\");\\nvar addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ \\"./node_modules/core-js/internals/add-to-unscopables.js\\");\\n\\n// \`Array.prototype.at\` method\\n// https://tc39.es/ecma262/#sec-array.prototype.at\\n$({ target: 'Array', proto: true }, {\\n at: function at(index) {\\n var O = toObject(this);\\n var len = lengthOfArrayLike(O);\\n var relativeIndex = toIntegerOrInfinity(index);\\n var k = relativeIndex >= 0 ? relativeIndex : len + relativeIndex;\\n return (k < 0 || k >= len) ? undefined : O[k];\\n }\\n});\\n\\naddToUnscopables('at');\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.array.at.js?")}),"./node_modules/core-js/modules/es.array.find-last-index.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar $findLastIndex = (__webpack_require__(/*! ../internals/array-iteration-from-last */ \\"./node_modules/core-js/internals/array-iteration-from-last.js\\").findLastIndex);\\nvar addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ \\"./node_modules/core-js/internals/add-to-unscopables.js\\");\\n\\n// \`Array.prototype.findLastIndex\` method\\n// https://tc39.es/ecma262/#sec-array.prototype.findlastindex\\n$({ target: 'Array', proto: true }, {\\n findLastIndex: function findLastIndex(callbackfn /* , that = undefined */) {\\n return $findLastIndex(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\\n }\\n});\\n\\naddToUnscopables('findLastIndex');\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.array.find-last-index.js?")}),"./node_modules/core-js/modules/es.array.find-last.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar $findLast = (__webpack_require__(/*! ../internals/array-iteration-from-last */ \\"./node_modules/core-js/internals/array-iteration-from-last.js\\").findLast);\\nvar addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ \\"./node_modules/core-js/internals/add-to-unscopables.js\\");\\n\\n// \`Array.prototype.findLast\` method\\n// https://tc39.es/ecma262/#sec-array.prototype.findlast\\n$({ target: 'Array', proto: true }, {\\n findLast: function findLast(callbackfn /* , that = undefined */) {\\n return $findLast(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\\n }\\n});\\n\\naddToUnscopables('findLast');\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.array.find-last.js?")}),"./node_modules/core-js/modules/es.array.flat-map.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar flattenIntoArray = __webpack_require__(/*! ../internals/flatten-into-array */ \\"./node_modules/core-js/internals/flatten-into-array.js\\");\\nvar aCallable = __webpack_require__(/*! ../internals/a-callable */ \\"./node_modules/core-js/internals/a-callable.js\\");\\nvar toObject = __webpack_require__(/*! ../internals/to-object */ \\"./node_modules/core-js/internals/to-object.js\\");\\nvar lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ \\"./node_modules/core-js/internals/length-of-array-like.js\\");\\nvar arraySpeciesCreate = __webpack_require__(/*! ../internals/array-species-create */ \\"./node_modules/core-js/internals/array-species-create.js\\");\\n\\n// \`Array.prototype.flatMap\` method\\n// https://tc39.es/ecma262/#sec-array.prototype.flatmap\\n$({ target: 'Array', proto: true }, {\\n flatMap: function flatMap(callbackfn /* , thisArg */) {\\n var O = toObject(this);\\n var sourceLen = lengthOfArrayLike(O);\\n var A;\\n aCallable(callbackfn);\\n A = arraySpeciesCreate(O, 0);\\n A.length = flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\\n return A;\\n }\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.array.flat-map.js?")}),"./node_modules/core-js/modules/es.array.includes.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar $includes = (__webpack_require__(/*! ../internals/array-includes */ \\"./node_modules/core-js/internals/array-includes.js\\").includes);\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\nvar addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ \\"./node_modules/core-js/internals/add-to-unscopables.js\\");\\n\\n// FF99+ bug\\nvar BROKEN_ON_SPARSE = fails(function () {\\n // eslint-disable-next-line es/no-array-prototype-includes -- detection\\n return !Array(1).includes();\\n});\\n\\n// \`Array.prototype.includes\` method\\n// https://tc39.es/ecma262/#sec-array.prototype.includes\\n$({ target: 'Array', proto: true, forced: BROKEN_ON_SPARSE }, {\\n includes: function includes(el /* , fromIndex = 0 */) {\\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\\n }\\n});\\n\\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\\naddToUnscopables('includes');\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.array.includes.js?")}),"./node_modules/core-js/modules/es.array.iterator.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ \\"./node_modules/core-js/internals/to-indexed-object.js\\");\\nvar addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ \\"./node_modules/core-js/internals/add-to-unscopables.js\\");\\nvar Iterators = __webpack_require__(/*! ../internals/iterators */ \\"./node_modules/core-js/internals/iterators.js\\");\\nvar InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ \\"./node_modules/core-js/internals/internal-state.js\\");\\nvar defineProperty = (__webpack_require__(/*! ../internals/object-define-property */ \\"./node_modules/core-js/internals/object-define-property.js\\").f);\\nvar defineIterator = __webpack_require__(/*! ../internals/iterator-define */ \\"./node_modules/core-js/internals/iterator-define.js\\");\\nvar createIterResultObject = __webpack_require__(/*! ../internals/create-iter-result-object */ \\"./node_modules/core-js/internals/create-iter-result-object.js\\");\\nvar IS_PURE = __webpack_require__(/*! ../internals/is-pure */ \\"./node_modules/core-js/internals/is-pure.js\\");\\nvar DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ \\"./node_modules/core-js/internals/descriptors.js\\");\\n\\nvar ARRAY_ITERATOR = 'Array Iterator';\\nvar setInternalState = InternalStateModule.set;\\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\\n\\n// \`Array.prototype.entries\` method\\n// https://tc39.es/ecma262/#sec-array.prototype.entries\\n// \`Array.prototype.keys\` method\\n// https://tc39.es/ecma262/#sec-array.prototype.keys\\n// \`Array.prototype.values\` method\\n// https://tc39.es/ecma262/#sec-array.prototype.values\\n// \`Array.prototype[@@iterator]\` method\\n// https://tc39.es/ecma262/#sec-array.prototype-@@iterator\\n// \`CreateArrayIterator\` internal method\\n// https://tc39.es/ecma262/#sec-createarrayiterator\\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\\n setInternalState(this, {\\n type: ARRAY_ITERATOR,\\n target: toIndexedObject(iterated), // target\\n index: 0, // next index\\n kind: kind // kind\\n });\\n// \`%ArrayIteratorPrototype%.next\` method\\n// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next\\n}, function () {\\n var state = getInternalState(this);\\n var target = state.target;\\n var kind = state.kind;\\n var index = state.index++;\\n if (!target || index >= target.length) {\\n state.target = undefined;\\n return createIterResultObject(undefined, true);\\n }\\n if (kind == 'keys') return createIterResultObject(index, false);\\n if (kind == 'values') return createIterResultObject(target[index], false);\\n return createIterResultObject([index, target[index]], false);\\n}, 'values');\\n\\n// argumentsList[@@iterator] is %ArrayProto_values%\\n// https://tc39.es/ecma262/#sec-createunmappedargumentsobject\\n// https://tc39.es/ecma262/#sec-createmappedargumentsobject\\nvar values = Iterators.Arguments = Iterators.Array;\\n\\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\\naddToUnscopables('keys');\\naddToUnscopables('values');\\naddToUnscopables('entries');\\n\\n// V8 ~ Chrome 45- bug\\nif (!IS_PURE && DESCRIPTORS && values.name !== 'values') try {\\n defineProperty(values, 'name', { value: 'values' });\\n} catch (error) { /* empty */ }\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.array.iterator.js?")}),"./node_modules/core-js/modules/es.array.push.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar toObject = __webpack_require__(/*! ../internals/to-object */ \\"./node_modules/core-js/internals/to-object.js\\");\\nvar lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ \\"./node_modules/core-js/internals/length-of-array-like.js\\");\\nvar setArrayLength = __webpack_require__(/*! ../internals/array-set-length */ \\"./node_modules/core-js/internals/array-set-length.js\\");\\nvar doesNotExceedSafeInteger = __webpack_require__(/*! ../internals/does-not-exceed-safe-integer */ \\"./node_modules/core-js/internals/does-not-exceed-safe-integer.js\\");\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\n\\nvar INCORRECT_TO_LENGTH = fails(function () {\\n return [].push.call({ length: 0x100000000 }, 1) !== 4294967297;\\n});\\n\\n// V8 and Safari <= 15.4, FF < 23 throws InternalError\\n// https://bugs.chromium.org/p/v8/issues/detail?id=12681\\nvar properErrorOnNonWritableLength = function () {\\n try {\\n // eslint-disable-next-line es/no-object-defineproperty -- safe\\n Object.defineProperty([], 'length', { writable: false }).push();\\n } catch (error) {\\n return error instanceof TypeError;\\n }\\n};\\n\\nvar FORCED = INCORRECT_TO_LENGTH || !properErrorOnNonWritableLength();\\n\\n// \`Array.prototype.push\` method\\n// https://tc39.es/ecma262/#sec-array.prototype.push\\n$({ target: 'Array', proto: true, arity: 1, forced: FORCED }, {\\n // eslint-disable-next-line no-unused-vars -- required for \`.length\`\\n push: function push(item) {\\n var O = toObject(this);\\n var len = lengthOfArrayLike(O);\\n var argCount = arguments.length;\\n doesNotExceedSafeInteger(len + argCount);\\n for (var i = 0; i < argCount; i++) {\\n O[len] = arguments[i];\\n len++;\\n }\\n setArrayLength(O, len);\\n return len;\\n }\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.array.push.js?")}),"./node_modules/core-js/modules/es.array.sort.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\nvar aCallable = __webpack_require__(/*! ../internals/a-callable */ \\"./node_modules/core-js/internals/a-callable.js\\");\\nvar toObject = __webpack_require__(/*! ../internals/to-object */ \\"./node_modules/core-js/internals/to-object.js\\");\\nvar lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ \\"./node_modules/core-js/internals/length-of-array-like.js\\");\\nvar deletePropertyOrThrow = __webpack_require__(/*! ../internals/delete-property-or-throw */ \\"./node_modules/core-js/internals/delete-property-or-throw.js\\");\\nvar toString = __webpack_require__(/*! ../internals/to-string */ \\"./node_modules/core-js/internals/to-string.js\\");\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\nvar internalSort = __webpack_require__(/*! ../internals/array-sort */ \\"./node_modules/core-js/internals/array-sort.js\\");\\nvar arrayMethodIsStrict = __webpack_require__(/*! ../internals/array-method-is-strict */ \\"./node_modules/core-js/internals/array-method-is-strict.js\\");\\nvar FF = __webpack_require__(/*! ../internals/engine-ff-version */ \\"./node_modules/core-js/internals/engine-ff-version.js\\");\\nvar IE_OR_EDGE = __webpack_require__(/*! ../internals/engine-is-ie-or-edge */ \\"./node_modules/core-js/internals/engine-is-ie-or-edge.js\\");\\nvar V8 = __webpack_require__(/*! ../internals/engine-v8-version */ \\"./node_modules/core-js/internals/engine-v8-version.js\\");\\nvar WEBKIT = __webpack_require__(/*! ../internals/engine-webkit-version */ \\"./node_modules/core-js/internals/engine-webkit-version.js\\");\\n\\nvar test = [];\\nvar nativeSort = uncurryThis(test.sort);\\nvar push = uncurryThis(test.push);\\n\\n// IE8-\\nvar FAILS_ON_UNDEFINED = fails(function () {\\n test.sort(undefined);\\n});\\n// V8 bug\\nvar FAILS_ON_NULL = fails(function () {\\n test.sort(null);\\n});\\n// Old WebKit\\nvar STRICT_METHOD = arrayMethodIsStrict('sort');\\n\\nvar STABLE_SORT = !fails(function () {\\n // feature detection can be too slow, so check engines versions\\n if (V8) return V8 < 70;\\n if (FF && FF > 3) return;\\n if (IE_OR_EDGE) return true;\\n if (WEBKIT) return WEBKIT < 603;\\n\\n var result = '';\\n var code, chr, value, index;\\n\\n // generate an array with more 512 elements (Chakra and old V8 fails only in this case)\\n for (code = 65; code < 76; code++) {\\n chr = String.fromCharCode(code);\\n\\n switch (code) {\\n case 66: case 69: case 70: case 72: value = 3; break;\\n case 68: case 71: value = 4; break;\\n default: value = 2;\\n }\\n\\n for (index = 0; index < 47; index++) {\\n test.push({ k: chr + index, v: value });\\n }\\n }\\n\\n test.sort(function (a, b) { return b.v - a.v; });\\n\\n for (index = 0; index < test.length; index++) {\\n chr = test[index].k.charAt(0);\\n if (result.charAt(result.length - 1) !== chr) result += chr;\\n }\\n\\n return result !== 'DGBEFHACIJK';\\n});\\n\\nvar FORCED = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD || !STABLE_SORT;\\n\\nvar getSortCompare = function (comparefn) {\\n return function (x, y) {\\n if (y === undefined) return -1;\\n if (x === undefined) return 1;\\n if (comparefn !== undefined) return +comparefn(x, y) || 0;\\n return toString(x) > toString(y) ? 1 : -1;\\n };\\n};\\n\\n// \`Array.prototype.sort\` method\\n// https://tc39.es/ecma262/#sec-array.prototype.sort\\n$({ target: 'Array', proto: true, forced: FORCED }, {\\n sort: function sort(comparefn) {\\n if (comparefn !== undefined) aCallable(comparefn);\\n\\n var array = toObject(this);\\n\\n if (STABLE_SORT) return comparefn === undefined ? nativeSort(array) : nativeSort(array, comparefn);\\n\\n var items = [];\\n var arrayLength = lengthOfArrayLike(array);\\n var itemsLength, index;\\n\\n for (index = 0; index < arrayLength; index++) {\\n if (index in array) push(items, array[index]);\\n }\\n\\n internalSort(items, getSortCompare(comparefn));\\n\\n itemsLength = lengthOfArrayLike(items);\\n index = 0;\\n\\n while (index < itemsLength) array[index] = items[index++];\\n while (index < arrayLength) deletePropertyOrThrow(array, index++);\\n\\n return array;\\n }\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.array.sort.js?")}),"./node_modules/core-js/modules/es.array.unscopables.flat-map.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\n// this method was added to unscopables after implementation\\n// in popular engines, so it's moved to a separate module\\nvar addToUnscopables = __webpack_require__(/*! ../internals/add-to-unscopables */ \\"./node_modules/core-js/internals/add-to-unscopables.js\\");\\n\\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\\naddToUnscopables('flatMap');\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.array.unscopables.flat-map.js?")}),"./node_modules/core-js/modules/es.array.with.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar arrayWith = __webpack_require__(/*! ../internals/array-with */ \\"./node_modules/core-js/internals/array-with.js\\");\\nvar toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ \\"./node_modules/core-js/internals/to-indexed-object.js\\");\\n\\nvar $Array = Array;\\n\\n// \`Array.prototype.with\` method\\n// https://tc39.es/ecma262/#sec-array.prototype.with\\n$({ target: 'Array', proto: true }, {\\n 'with': function (index, value) {\\n return arrayWith(toIndexedObject(this), $Array, index, value);\\n }\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.array.with.js?")}),"./node_modules/core-js/modules/es.error.cause.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\n/* eslint-disable no-unused-vars -- required for functions \`.length\` */\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar global = __webpack_require__(/*! ../internals/global */ \\"./node_modules/core-js/internals/global.js\\");\\nvar apply = __webpack_require__(/*! ../internals/function-apply */ \\"./node_modules/core-js/internals/function-apply.js\\");\\nvar wrapErrorConstructorWithCause = __webpack_require__(/*! ../internals/wrap-error-constructor-with-cause */ \\"./node_modules/core-js/internals/wrap-error-constructor-with-cause.js\\");\\n\\nvar WEB_ASSEMBLY = 'WebAssembly';\\nvar WebAssembly = global[WEB_ASSEMBLY];\\n\\nvar FORCED = Error('e', { cause: 7 }).cause !== 7;\\n\\nvar exportGlobalErrorCauseWrapper = function (ERROR_NAME, wrapper) {\\n var O = {};\\n O[ERROR_NAME] = wrapErrorConstructorWithCause(ERROR_NAME, wrapper, FORCED);\\n $({ global: true, constructor: true, arity: 1, forced: FORCED }, O);\\n};\\n\\nvar exportWebAssemblyErrorCauseWrapper = function (ERROR_NAME, wrapper) {\\n if (WebAssembly && WebAssembly[ERROR_NAME]) {\\n var O = {};\\n O[ERROR_NAME] = wrapErrorConstructorWithCause(WEB_ASSEMBLY + '.' + ERROR_NAME, wrapper, FORCED);\\n $({ target: WEB_ASSEMBLY, stat: true, constructor: true, arity: 1, forced: FORCED }, O);\\n }\\n};\\n\\n// https://tc39.es/ecma262/#sec-nativeerror\\nexportGlobalErrorCauseWrapper('Error', function (init) {\\n return function Error(message) { return apply(init, this, arguments); };\\n});\\nexportGlobalErrorCauseWrapper('EvalError', function (init) {\\n return function EvalError(message) { return apply(init, this, arguments); };\\n});\\nexportGlobalErrorCauseWrapper('RangeError', function (init) {\\n return function RangeError(message) { return apply(init, this, arguments); };\\n});\\nexportGlobalErrorCauseWrapper('ReferenceError', function (init) {\\n return function ReferenceError(message) { return apply(init, this, arguments); };\\n});\\nexportGlobalErrorCauseWrapper('SyntaxError', function (init) {\\n return function SyntaxError(message) { return apply(init, this, arguments); };\\n});\\nexportGlobalErrorCauseWrapper('TypeError', function (init) {\\n return function TypeError(message) { return apply(init, this, arguments); };\\n});\\nexportGlobalErrorCauseWrapper('URIError', function (init) {\\n return function URIError(message) { return apply(init, this, arguments); };\\n});\\nexportWebAssemblyErrorCauseWrapper('CompileError', function (init) {\\n return function CompileError(message) { return apply(init, this, arguments); };\\n});\\nexportWebAssemblyErrorCauseWrapper('LinkError', function (init) {\\n return function LinkError(message) { return apply(init, this, arguments); };\\n});\\nexportWebAssemblyErrorCauseWrapper('RuntimeError', function (init) {\\n return function RuntimeError(message) { return apply(init, this, arguments); };\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.error.cause.js?")}),"./node_modules/core-js/modules/es.global-this.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar global = __webpack_require__(/*! ../internals/global */ \\"./node_modules/core-js/internals/global.js\\");\\n\\n// \`globalThis\` object\\n// https://tc39.es/ecma262/#sec-globalthis\\n$({ global: true, forced: global.globalThis !== global }, {\\n globalThis: global\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.global-this.js?")}),"./node_modules/core-js/modules/es.json.stringify.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ \\"./node_modules/core-js/internals/get-built-in.js\\");\\nvar apply = __webpack_require__(/*! ../internals/function-apply */ \\"./node_modules/core-js/internals/function-apply.js\\");\\nvar call = __webpack_require__(/*! ../internals/function-call */ \\"./node_modules/core-js/internals/function-call.js\\");\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \\"./node_modules/core-js/internals/is-callable.js\\");\\nvar isSymbol = __webpack_require__(/*! ../internals/is-symbol */ \\"./node_modules/core-js/internals/is-symbol.js\\");\\nvar arraySlice = __webpack_require__(/*! ../internals/array-slice */ \\"./node_modules/core-js/internals/array-slice.js\\");\\nvar getReplacerFunction = __webpack_require__(/*! ../internals/get-json-replacer-function */ \\"./node_modules/core-js/internals/get-json-replacer-function.js\\");\\nvar NATIVE_SYMBOL = __webpack_require__(/*! ../internals/symbol-constructor-detection */ \\"./node_modules/core-js/internals/symbol-constructor-detection.js\\");\\n\\nvar $String = String;\\nvar $stringify = getBuiltIn('JSON', 'stringify');\\nvar exec = uncurryThis(/./.exec);\\nvar charAt = uncurryThis(''.charAt);\\nvar charCodeAt = uncurryThis(''.charCodeAt);\\nvar replace = uncurryThis(''.replace);\\nvar numberToString = uncurryThis(1.0.toString);\\n\\nvar tester = /[\\\\uD800-\\\\uDFFF]/g;\\nvar low = /^[\\\\uD800-\\\\uDBFF]$/;\\nvar hi = /^[\\\\uDC00-\\\\uDFFF]$/;\\n\\nvar WRONG_SYMBOLS_CONVERSION = !NATIVE_SYMBOL || fails(function () {\\n var symbol = getBuiltIn('Symbol')();\\n // MS Edge converts symbol values to JSON as {}\\n return $stringify([symbol]) != '[null]'\\n // WebKit converts symbol values to JSON as null\\n || $stringify({ a: symbol }) != '{}'\\n // V8 throws on boxed symbols\\n || $stringify(Object(symbol)) != '{}';\\n});\\n\\n// https://github.com/tc39/proposal-well-formed-stringify\\nvar ILL_FORMED_UNICODE = fails(function () {\\n return $stringify('\\\\uDF06\\\\uD834') !== '\\"\\\\\\\\udf06\\\\\\\\ud834\\"'\\n || $stringify('\\\\uDEAD') !== '\\"\\\\\\\\udead\\"';\\n});\\n\\nvar stringifyWithSymbolsFix = function (it, replacer) {\\n var args = arraySlice(arguments);\\n var $replacer = getReplacerFunction(replacer);\\n if (!isCallable($replacer) && (it === undefined || isSymbol(it))) return; // IE8 returns string on undefined\\n args[1] = function (key, value) {\\n // some old implementations (like WebKit) could pass numbers as keys\\n if (isCallable($replacer)) value = call($replacer, this, $String(key), value);\\n if (!isSymbol(value)) return value;\\n };\\n return apply($stringify, null, args);\\n};\\n\\nvar fixIllFormed = function (match, offset, string) {\\n var prev = charAt(string, offset - 1);\\n var next = charAt(string, offset + 1);\\n if ((exec(low, match) && !exec(hi, next)) || (exec(hi, match) && !exec(low, prev))) {\\n return '\\\\\\\\u' + numberToString(charCodeAt(match, 0), 16);\\n } return match;\\n};\\n\\nif ($stringify) {\\n // \`JSON.stringify\` method\\n // https://tc39.es/ecma262/#sec-json.stringify\\n $({ target: 'JSON', stat: true, arity: 3, forced: WRONG_SYMBOLS_CONVERSION || ILL_FORMED_UNICODE }, {\\n // eslint-disable-next-line no-unused-vars -- required for \`.length\`\\n stringify: function stringify(it, replacer, space) {\\n var args = arraySlice(arguments);\\n var result = apply(WRONG_SYMBOLS_CONVERSION ? stringifyWithSymbolsFix : $stringify, null, args);\\n return ILL_FORMED_UNICODE && typeof result == 'string' ? replace(result, tester, fixIllFormed) : result;\\n }\\n });\\n}\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.json.stringify.js?")}),"./node_modules/core-js/modules/es.math.hypot.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\n\\n// eslint-disable-next-line es/no-math-hypot -- required for testing\\nvar $hypot = Math.hypot;\\nvar abs = Math.abs;\\nvar sqrt = Math.sqrt;\\n\\n// Chrome 77 bug\\n// https://bugs.chromium.org/p/v8/issues/detail?id=9546\\nvar FORCED = !!$hypot && $hypot(Infinity, NaN) !== Infinity;\\n\\n// \`Math.hypot\` method\\n// https://tc39.es/ecma262/#sec-math.hypot\\n$({ target: 'Math', stat: true, arity: 2, forced: FORCED }, {\\n // eslint-disable-next-line no-unused-vars -- required for \`.length\`\\n hypot: function hypot(value1, value2) {\\n var sum = 0;\\n var i = 0;\\n var aLen = arguments.length;\\n var larg = 0;\\n var arg, div;\\n while (i < aLen) {\\n arg = abs(arguments[i++]);\\n if (larg < arg) {\\n div = larg / arg;\\n sum = sum * div * div + 1;\\n larg = arg;\\n } else if (arg > 0) {\\n div = arg / larg;\\n sum += div * div;\\n } else sum += arg;\\n }\\n return larg === Infinity ? Infinity : larg * sqrt(sum);\\n }\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.math.hypot.js?")}),"./node_modules/core-js/modules/es.number.to-fixed.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\nvar toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ \\"./node_modules/core-js/internals/to-integer-or-infinity.js\\");\\nvar thisNumberValue = __webpack_require__(/*! ../internals/this-number-value */ \\"./node_modules/core-js/internals/this-number-value.js\\");\\nvar $repeat = __webpack_require__(/*! ../internals/string-repeat */ \\"./node_modules/core-js/internals/string-repeat.js\\");\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\n\\nvar $RangeError = RangeError;\\nvar $String = String;\\nvar floor = Math.floor;\\nvar repeat = uncurryThis($repeat);\\nvar stringSlice = uncurryThis(''.slice);\\nvar nativeToFixed = uncurryThis(1.0.toFixed);\\n\\nvar pow = function (x, n, acc) {\\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\\n};\\n\\nvar log = function (x) {\\n var n = 0;\\n var x2 = x;\\n while (x2 >= 4096) {\\n n += 12;\\n x2 /= 4096;\\n }\\n while (x2 >= 2) {\\n n += 1;\\n x2 /= 2;\\n } return n;\\n};\\n\\nvar multiply = function (data, n, c) {\\n var index = -1;\\n var c2 = c;\\n while (++index < 6) {\\n c2 += n * data[index];\\n data[index] = c2 % 1e7;\\n c2 = floor(c2 / 1e7);\\n }\\n};\\n\\nvar divide = function (data, n) {\\n var index = 6;\\n var c = 0;\\n while (--index >= 0) {\\n c += data[index];\\n data[index] = floor(c / n);\\n c = (c % n) * 1e7;\\n }\\n};\\n\\nvar dataToString = function (data) {\\n var index = 6;\\n var s = '';\\n while (--index >= 0) {\\n if (s !== '' || index === 0 || data[index] !== 0) {\\n var t = $String(data[index]);\\n s = s === '' ? t : s + repeat('0', 7 - t.length) + t;\\n }\\n } return s;\\n};\\n\\nvar FORCED = fails(function () {\\n return nativeToFixed(0.00008, 3) !== '0.000' ||\\n nativeToFixed(0.9, 0) !== '1' ||\\n nativeToFixed(1.255, 2) !== '1.25' ||\\n nativeToFixed(1000000000000000128.0, 0) !== '1000000000000000128';\\n}) || !fails(function () {\\n // V8 ~ Android 4.3-\\n nativeToFixed({});\\n});\\n\\n// \`Number.prototype.toFixed\` method\\n// https://tc39.es/ecma262/#sec-number.prototype.tofixed\\n$({ target: 'Number', proto: true, forced: FORCED }, {\\n toFixed: function toFixed(fractionDigits) {\\n var number = thisNumberValue(this);\\n var fractDigits = toIntegerOrInfinity(fractionDigits);\\n var data = [0, 0, 0, 0, 0, 0];\\n var sign = '';\\n var result = '0';\\n var e, z, j, k;\\n\\n // TODO: ES2018 increased the maximum number of fraction digits to 100, need to improve the implementation\\n if (fractDigits < 0 || fractDigits > 20) throw $RangeError('Incorrect fraction digits');\\n // eslint-disable-next-line no-self-compare -- NaN check\\n if (number != number) return 'NaN';\\n if (number <= -1e21 || number >= 1e21) return $String(number);\\n if (number < 0) {\\n sign = '-';\\n number = -number;\\n }\\n if (number > 1e-21) {\\n e = log(number * pow(2, 69, 1)) - 69;\\n z = e < 0 ? number * pow(2, -e, 1) : number / pow(2, e, 1);\\n z *= 0x10000000000000;\\n e = 52 - e;\\n if (e > 0) {\\n multiply(data, 0, z);\\n j = fractDigits;\\n while (j >= 7) {\\n multiply(data, 1e7, 0);\\n j -= 7;\\n }\\n multiply(data, pow(10, j, 1), 0);\\n j = e - 1;\\n while (j >= 23) {\\n divide(data, 1 << 23);\\n j -= 23;\\n }\\n divide(data, 1 << j);\\n multiply(data, 1, 1);\\n divide(data, 2);\\n result = dataToString(data);\\n } else {\\n multiply(data, 0, z);\\n multiply(data, 1 << -e, 0);\\n result = dataToString(data) + repeat('0', fractDigits);\\n }\\n }\\n if (fractDigits > 0) {\\n k = result.length;\\n result = sign + (k <= fractDigits\\n ? '0.' + repeat('0', fractDigits - k) + result\\n : stringSlice(result, 0, k - fractDigits) + '.' + stringSlice(result, k - fractDigits));\\n } else {\\n result = sign + result;\\n } return result;\\n }\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.number.to-fixed.js?")}),"./node_modules/core-js/modules/es.object.assign.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar assign = __webpack_require__(/*! ../internals/object-assign */ \\"./node_modules/core-js/internals/object-assign.js\\");\\n\\n// \`Object.assign\` method\\n// https://tc39.es/ecma262/#sec-object.assign\\n// eslint-disable-next-line es/no-object-assign -- required for testing\\n$({ target: 'Object', stat: true, arity: 2, forced: Object.assign !== assign }, {\\n assign: assign\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.object.assign.js?")}),"./node_modules/core-js/modules/es.object.has-own.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar hasOwn = __webpack_require__(/*! ../internals/has-own-property */ \\"./node_modules/core-js/internals/has-own-property.js\\");\\n\\n// \`Object.hasOwn\` method\\n// https://tc39.es/ecma262/#sec-object.hasown\\n$({ target: 'Object', stat: true }, {\\n hasOwn: hasOwn\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.object.has-own.js?")}),"./node_modules/core-js/modules/es.parse-float.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar $parseFloat = __webpack_require__(/*! ../internals/number-parse-float */ \\"./node_modules/core-js/internals/number-parse-float.js\\");\\n\\n// \`parseFloat\` method\\n// https://tc39.es/ecma262/#sec-parsefloat-string\\n$({ global: true, forced: parseFloat != $parseFloat }, {\\n parseFloat: $parseFloat\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.parse-float.js?")}),"./node_modules/core-js/modules/es.parse-int.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar $parseInt = __webpack_require__(/*! ../internals/number-parse-int */ \\"./node_modules/core-js/internals/number-parse-int.js\\");\\n\\n// \`parseInt\` method\\n// https://tc39.es/ecma262/#sec-parseint-string-radix\\n$({ global: true, forced: parseInt != $parseInt }, {\\n parseInt: $parseInt\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.parse-int.js?")}),"./node_modules/core-js/modules/es.promise.all-settled.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar call = __webpack_require__(/*! ../internals/function-call */ \\"./node_modules/core-js/internals/function-call.js\\");\\nvar aCallable = __webpack_require__(/*! ../internals/a-callable */ \\"./node_modules/core-js/internals/a-callable.js\\");\\nvar newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ \\"./node_modules/core-js/internals/new-promise-capability.js\\");\\nvar perform = __webpack_require__(/*! ../internals/perform */ \\"./node_modules/core-js/internals/perform.js\\");\\nvar iterate = __webpack_require__(/*! ../internals/iterate */ \\"./node_modules/core-js/internals/iterate.js\\");\\nvar PROMISE_STATICS_INCORRECT_ITERATION = __webpack_require__(/*! ../internals/promise-statics-incorrect-iteration */ \\"./node_modules/core-js/internals/promise-statics-incorrect-iteration.js\\");\\n\\n// \`Promise.allSettled\` method\\n// https://tc39.es/ecma262/#sec-promise.allsettled\\n$({ target: 'Promise', stat: true, forced: PROMISE_STATICS_INCORRECT_ITERATION }, {\\n allSettled: function allSettled(iterable) {\\n var C = this;\\n var capability = newPromiseCapabilityModule.f(C);\\n var resolve = capability.resolve;\\n var reject = capability.reject;\\n var result = perform(function () {\\n var promiseResolve = aCallable(C.resolve);\\n var values = [];\\n var counter = 0;\\n var remaining = 1;\\n iterate(iterable, function (promise) {\\n var index = counter++;\\n var alreadyCalled = false;\\n remaining++;\\n call(promiseResolve, C, promise).then(function (value) {\\n if (alreadyCalled) return;\\n alreadyCalled = true;\\n values[index] = { status: 'fulfilled', value: value };\\n --remaining || resolve(values);\\n }, function (error) {\\n if (alreadyCalled) return;\\n alreadyCalled = true;\\n values[index] = { status: 'rejected', reason: error };\\n --remaining || resolve(values);\\n });\\n });\\n --remaining || resolve(values);\\n });\\n if (result.error) reject(result.value);\\n return capability.promise;\\n }\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.promise.all-settled.js?")}),"./node_modules/core-js/modules/es.promise.all.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar call = __webpack_require__(/*! ../internals/function-call */ \\"./node_modules/core-js/internals/function-call.js\\");\\nvar aCallable = __webpack_require__(/*! ../internals/a-callable */ \\"./node_modules/core-js/internals/a-callable.js\\");\\nvar newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ \\"./node_modules/core-js/internals/new-promise-capability.js\\");\\nvar perform = __webpack_require__(/*! ../internals/perform */ \\"./node_modules/core-js/internals/perform.js\\");\\nvar iterate = __webpack_require__(/*! ../internals/iterate */ \\"./node_modules/core-js/internals/iterate.js\\");\\nvar PROMISE_STATICS_INCORRECT_ITERATION = __webpack_require__(/*! ../internals/promise-statics-incorrect-iteration */ \\"./node_modules/core-js/internals/promise-statics-incorrect-iteration.js\\");\\n\\n// \`Promise.all\` method\\n// https://tc39.es/ecma262/#sec-promise.all\\n$({ target: 'Promise', stat: true, forced: PROMISE_STATICS_INCORRECT_ITERATION }, {\\n all: function all(iterable) {\\n var C = this;\\n var capability = newPromiseCapabilityModule.f(C);\\n var resolve = capability.resolve;\\n var reject = capability.reject;\\n var result = perform(function () {\\n var $promiseResolve = aCallable(C.resolve);\\n var values = [];\\n var counter = 0;\\n var remaining = 1;\\n iterate(iterable, function (promise) {\\n var index = counter++;\\n var alreadyCalled = false;\\n remaining++;\\n call($promiseResolve, C, promise).then(function (value) {\\n if (alreadyCalled) return;\\n alreadyCalled = true;\\n values[index] = value;\\n --remaining || resolve(values);\\n }, reject);\\n });\\n --remaining || resolve(values);\\n });\\n if (result.error) reject(result.value);\\n return capability.promise;\\n }\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.promise.all.js?")}),"./node_modules/core-js/modules/es.promise.catch.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar IS_PURE = __webpack_require__(/*! ../internals/is-pure */ \\"./node_modules/core-js/internals/is-pure.js\\");\\nvar FORCED_PROMISE_CONSTRUCTOR = (__webpack_require__(/*! ../internals/promise-constructor-detection */ \\"./node_modules/core-js/internals/promise-constructor-detection.js\\").CONSTRUCTOR);\\nvar NativePromiseConstructor = __webpack_require__(/*! ../internals/promise-native-constructor */ \\"./node_modules/core-js/internals/promise-native-constructor.js\\");\\nvar getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ \\"./node_modules/core-js/internals/get-built-in.js\\");\\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \\"./node_modules/core-js/internals/is-callable.js\\");\\nvar defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ \\"./node_modules/core-js/internals/define-built-in.js\\");\\n\\nvar NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype;\\n\\n// \`Promise.prototype.catch\` method\\n// https://tc39.es/ecma262/#sec-promise.prototype.catch\\n$({ target: 'Promise', proto: true, forced: FORCED_PROMISE_CONSTRUCTOR, real: true }, {\\n 'catch': function (onRejected) {\\n return this.then(undefined, onRejected);\\n }\\n});\\n\\n// makes sure that native promise-based APIs \`Promise#catch\` properly works with patched \`Promise#then\`\\nif (!IS_PURE && isCallable(NativePromiseConstructor)) {\\n var method = getBuiltIn('Promise').prototype['catch'];\\n if (NativePromisePrototype['catch'] !== method) {\\n defineBuiltIn(NativePromisePrototype, 'catch', method, { unsafe: true });\\n }\\n}\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.promise.catch.js?")}),"./node_modules/core-js/modules/es.promise.constructor.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar IS_PURE = __webpack_require__(/*! ../internals/is-pure */ \\"./node_modules/core-js/internals/is-pure.js\\");\\nvar IS_NODE = __webpack_require__(/*! ../internals/engine-is-node */ \\"./node_modules/core-js/internals/engine-is-node.js\\");\\nvar global = __webpack_require__(/*! ../internals/global */ \\"./node_modules/core-js/internals/global.js\\");\\nvar call = __webpack_require__(/*! ../internals/function-call */ \\"./node_modules/core-js/internals/function-call.js\\");\\nvar defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ \\"./node_modules/core-js/internals/define-built-in.js\\");\\nvar setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ \\"./node_modules/core-js/internals/object-set-prototype-of.js\\");\\nvar setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ \\"./node_modules/core-js/internals/set-to-string-tag.js\\");\\nvar setSpecies = __webpack_require__(/*! ../internals/set-species */ \\"./node_modules/core-js/internals/set-species.js\\");\\nvar aCallable = __webpack_require__(/*! ../internals/a-callable */ \\"./node_modules/core-js/internals/a-callable.js\\");\\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \\"./node_modules/core-js/internals/is-callable.js\\");\\nvar isObject = __webpack_require__(/*! ../internals/is-object */ \\"./node_modules/core-js/internals/is-object.js\\");\\nvar anInstance = __webpack_require__(/*! ../internals/an-instance */ \\"./node_modules/core-js/internals/an-instance.js\\");\\nvar speciesConstructor = __webpack_require__(/*! ../internals/species-constructor */ \\"./node_modules/core-js/internals/species-constructor.js\\");\\nvar task = (__webpack_require__(/*! ../internals/task */ \\"./node_modules/core-js/internals/task.js\\").set);\\nvar microtask = __webpack_require__(/*! ../internals/microtask */ \\"./node_modules/core-js/internals/microtask.js\\");\\nvar hostReportErrors = __webpack_require__(/*! ../internals/host-report-errors */ \\"./node_modules/core-js/internals/host-report-errors.js\\");\\nvar perform = __webpack_require__(/*! ../internals/perform */ \\"./node_modules/core-js/internals/perform.js\\");\\nvar Queue = __webpack_require__(/*! ../internals/queue */ \\"./node_modules/core-js/internals/queue.js\\");\\nvar InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ \\"./node_modules/core-js/internals/internal-state.js\\");\\nvar NativePromiseConstructor = __webpack_require__(/*! ../internals/promise-native-constructor */ \\"./node_modules/core-js/internals/promise-native-constructor.js\\");\\nvar PromiseConstructorDetection = __webpack_require__(/*! ../internals/promise-constructor-detection */ \\"./node_modules/core-js/internals/promise-constructor-detection.js\\");\\nvar newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ \\"./node_modules/core-js/internals/new-promise-capability.js\\");\\n\\nvar PROMISE = 'Promise';\\nvar FORCED_PROMISE_CONSTRUCTOR = PromiseConstructorDetection.CONSTRUCTOR;\\nvar NATIVE_PROMISE_REJECTION_EVENT = PromiseConstructorDetection.REJECTION_EVENT;\\nvar NATIVE_PROMISE_SUBCLASSING = PromiseConstructorDetection.SUBCLASSING;\\nvar getInternalPromiseState = InternalStateModule.getterFor(PROMISE);\\nvar setInternalState = InternalStateModule.set;\\nvar NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype;\\nvar PromiseConstructor = NativePromiseConstructor;\\nvar PromisePrototype = NativePromisePrototype;\\nvar TypeError = global.TypeError;\\nvar document = global.document;\\nvar process = global.process;\\nvar newPromiseCapability = newPromiseCapabilityModule.f;\\nvar newGenericPromiseCapability = newPromiseCapability;\\n\\nvar DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent);\\nvar UNHANDLED_REJECTION = 'unhandledrejection';\\nvar REJECTION_HANDLED = 'rejectionhandled';\\nvar PENDING = 0;\\nvar FULFILLED = 1;\\nvar REJECTED = 2;\\nvar HANDLED = 1;\\nvar UNHANDLED = 2;\\n\\nvar Internal, OwnPromiseCapability, PromiseWrapper, nativeThen;\\n\\n// helpers\\nvar isThenable = function (it) {\\n var then;\\n return isObject(it) && isCallable(then = it.then) ? then : false;\\n};\\n\\nvar callReaction = function (reaction, state) {\\n var value = state.value;\\n var ok = state.state == FULFILLED;\\n var handler = ok ? reaction.ok : reaction.fail;\\n var resolve = reaction.resolve;\\n var reject = reaction.reject;\\n var domain = reaction.domain;\\n var result, then, exited;\\n try {\\n if (handler) {\\n if (!ok) {\\n if (state.rejection === UNHANDLED) onHandleUnhandled(state);\\n state.rejection = HANDLED;\\n }\\n if (handler === true) result = value;\\n else {\\n if (domain) domain.enter();\\n result = handler(value); // can throw\\n if (domain) {\\n domain.exit();\\n exited = true;\\n }\\n }\\n if (result === reaction.promise) {\\n reject(TypeError('Promise-chain cycle'));\\n } else if (then = isThenable(result)) {\\n call(then, result, resolve, reject);\\n } else resolve(result);\\n } else reject(value);\\n } catch (error) {\\n if (domain && !exited) domain.exit();\\n reject(error);\\n }\\n};\\n\\nvar notify = function (state, isReject) {\\n if (state.notified) return;\\n state.notified = true;\\n microtask(function () {\\n var reactions = state.reactions;\\n var reaction;\\n while (reaction = reactions.get()) {\\n callReaction(reaction, state);\\n }\\n state.notified = false;\\n if (isReject && !state.rejection) onUnhandled(state);\\n });\\n};\\n\\nvar dispatchEvent = function (name, promise, reason) {\\n var event, handler;\\n if (DISPATCH_EVENT) {\\n event = document.createEvent('Event');\\n event.promise = promise;\\n event.reason = reason;\\n event.initEvent(name, false, true);\\n global.dispatchEvent(event);\\n } else event = { promise: promise, reason: reason };\\n if (!NATIVE_PROMISE_REJECTION_EVENT && (handler = global['on' + name])) handler(event);\\n else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason);\\n};\\n\\nvar onUnhandled = function (state) {\\n call(task, global, function () {\\n var promise = state.facade;\\n var value = state.value;\\n var IS_UNHANDLED = isUnhandled(state);\\n var result;\\n if (IS_UNHANDLED) {\\n result = perform(function () {\\n if (IS_NODE) {\\n process.emit('unhandledRejection', value, promise);\\n } else dispatchEvent(UNHANDLED_REJECTION, promise, value);\\n });\\n // Browsers should not trigger \`rejectionHandled\` event if it was handled here, NodeJS - should\\n state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED;\\n if (result.error) throw result.value;\\n }\\n });\\n};\\n\\nvar isUnhandled = function (state) {\\n return state.rejection !== HANDLED && !state.parent;\\n};\\n\\nvar onHandleUnhandled = function (state) {\\n call(task, global, function () {\\n var promise = state.facade;\\n if (IS_NODE) {\\n process.emit('rejectionHandled', promise);\\n } else dispatchEvent(REJECTION_HANDLED, promise, state.value);\\n });\\n};\\n\\nvar bind = function (fn, state, unwrap) {\\n return function (value) {\\n fn(state, value, unwrap);\\n };\\n};\\n\\nvar internalReject = function (state, value, unwrap) {\\n if (state.done) return;\\n state.done = true;\\n if (unwrap) state = unwrap;\\n state.value = value;\\n state.state = REJECTED;\\n notify(state, true);\\n};\\n\\nvar internalResolve = function (state, value, unwrap) {\\n if (state.done) return;\\n state.done = true;\\n if (unwrap) state = unwrap;\\n try {\\n if (state.facade === value) throw TypeError(\\"Promise can't be resolved itself\\");\\n var then = isThenable(value);\\n if (then) {\\n microtask(function () {\\n var wrapper = { done: false };\\n try {\\n call(then, value,\\n bind(internalResolve, wrapper, state),\\n bind(internalReject, wrapper, state)\\n );\\n } catch (error) {\\n internalReject(wrapper, error, state);\\n }\\n });\\n } else {\\n state.value = value;\\n state.state = FULFILLED;\\n notify(state, false);\\n }\\n } catch (error) {\\n internalReject({ done: false }, error, state);\\n }\\n};\\n\\n// constructor polyfill\\nif (FORCED_PROMISE_CONSTRUCTOR) {\\n // 25.4.3.1 Promise(executor)\\n PromiseConstructor = function Promise(executor) {\\n anInstance(this, PromisePrototype);\\n aCallable(executor);\\n call(Internal, this);\\n var state = getInternalPromiseState(this);\\n try {\\n executor(bind(internalResolve, state), bind(internalReject, state));\\n } catch (error) {\\n internalReject(state, error);\\n }\\n };\\n\\n PromisePrototype = PromiseConstructor.prototype;\\n\\n // eslint-disable-next-line no-unused-vars -- required for \`.length\`\\n Internal = function Promise(executor) {\\n setInternalState(this, {\\n type: PROMISE,\\n done: false,\\n notified: false,\\n parent: false,\\n reactions: new Queue(),\\n rejection: false,\\n state: PENDING,\\n value: undefined\\n });\\n };\\n\\n // \`Promise.prototype.then\` method\\n // https://tc39.es/ecma262/#sec-promise.prototype.then\\n Internal.prototype = defineBuiltIn(PromisePrototype, 'then', function then(onFulfilled, onRejected) {\\n var state = getInternalPromiseState(this);\\n var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor));\\n state.parent = true;\\n reaction.ok = isCallable(onFulfilled) ? onFulfilled : true;\\n reaction.fail = isCallable(onRejected) && onRejected;\\n reaction.domain = IS_NODE ? process.domain : undefined;\\n if (state.state == PENDING) state.reactions.add(reaction);\\n else microtask(function () {\\n callReaction(reaction, state);\\n });\\n return reaction.promise;\\n });\\n\\n OwnPromiseCapability = function () {\\n var promise = new Internal();\\n var state = getInternalPromiseState(promise);\\n this.promise = promise;\\n this.resolve = bind(internalResolve, state);\\n this.reject = bind(internalReject, state);\\n };\\n\\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\\n return C === PromiseConstructor || C === PromiseWrapper\\n ? new OwnPromiseCapability(C)\\n : newGenericPromiseCapability(C);\\n };\\n\\n if (!IS_PURE && isCallable(NativePromiseConstructor) && NativePromisePrototype !== Object.prototype) {\\n nativeThen = NativePromisePrototype.then;\\n\\n if (!NATIVE_PROMISE_SUBCLASSING) {\\n // make \`Promise#then\` return a polyfilled \`Promise\` for native promise-based APIs\\n defineBuiltIn(NativePromisePrototype, 'then', function then(onFulfilled, onRejected) {\\n var that = this;\\n return new PromiseConstructor(function (resolve, reject) {\\n call(nativeThen, that, resolve, reject);\\n }).then(onFulfilled, onRejected);\\n // https://github.com/zloirock/core-js/issues/640\\n }, { unsafe: true });\\n }\\n\\n // make \`.constructor === Promise\` work for native promise-based APIs\\n try {\\n delete NativePromisePrototype.constructor;\\n } catch (error) { /* empty */ }\\n\\n // make \`instanceof Promise\` work for native promise-based APIs\\n if (setPrototypeOf) {\\n setPrototypeOf(NativePromisePrototype, PromisePrototype);\\n }\\n }\\n}\\n\\n$({ global: true, constructor: true, wrap: true, forced: FORCED_PROMISE_CONSTRUCTOR }, {\\n Promise: PromiseConstructor\\n});\\n\\nsetToStringTag(PromiseConstructor, PROMISE, false, true);\\nsetSpecies(PROMISE);\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.promise.constructor.js?")}),"./node_modules/core-js/modules/es.promise.finally.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar IS_PURE = __webpack_require__(/*! ../internals/is-pure */ \\"./node_modules/core-js/internals/is-pure.js\\");\\nvar NativePromiseConstructor = __webpack_require__(/*! ../internals/promise-native-constructor */ \\"./node_modules/core-js/internals/promise-native-constructor.js\\");\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\nvar getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ \\"./node_modules/core-js/internals/get-built-in.js\\");\\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \\"./node_modules/core-js/internals/is-callable.js\\");\\nvar speciesConstructor = __webpack_require__(/*! ../internals/species-constructor */ \\"./node_modules/core-js/internals/species-constructor.js\\");\\nvar promiseResolve = __webpack_require__(/*! ../internals/promise-resolve */ \\"./node_modules/core-js/internals/promise-resolve.js\\");\\nvar defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ \\"./node_modules/core-js/internals/define-built-in.js\\");\\n\\nvar NativePromisePrototype = NativePromiseConstructor && NativePromiseConstructor.prototype;\\n\\n// Safari bug https://bugs.webkit.org/show_bug.cgi?id=200829\\nvar NON_GENERIC = !!NativePromiseConstructor && fails(function () {\\n // eslint-disable-next-line unicorn/no-thenable -- required for testing\\n NativePromisePrototype['finally'].call({ then: function () { /* empty */ } }, function () { /* empty */ });\\n});\\n\\n// \`Promise.prototype.finally\` method\\n// https://tc39.es/ecma262/#sec-promise.prototype.finally\\n$({ target: 'Promise', proto: true, real: true, forced: NON_GENERIC }, {\\n 'finally': function (onFinally) {\\n var C = speciesConstructor(this, getBuiltIn('Promise'));\\n var isFunction = isCallable(onFinally);\\n return this.then(\\n isFunction ? function (x) {\\n return promiseResolve(C, onFinally()).then(function () { return x; });\\n } : onFinally,\\n isFunction ? function (e) {\\n return promiseResolve(C, onFinally()).then(function () { throw e; });\\n } : onFinally\\n );\\n }\\n});\\n\\n// makes sure that native promise-based APIs \`Promise#finally\` properly works with patched \`Promise#then\`\\nif (!IS_PURE && isCallable(NativePromiseConstructor)) {\\n var method = getBuiltIn('Promise').prototype['finally'];\\n if (NativePromisePrototype['finally'] !== method) {\\n defineBuiltIn(NativePromisePrototype, 'finally', method, { unsafe: true });\\n }\\n}\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.promise.finally.js?")}),"./node_modules/core-js/modules/es.promise.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\n// TODO: Remove this module from \`core-js@4\` since it's split to modules listed below\\n__webpack_require__(/*! ../modules/es.promise.constructor */ \\"./node_modules/core-js/modules/es.promise.constructor.js\\");\\n__webpack_require__(/*! ../modules/es.promise.all */ \\"./node_modules/core-js/modules/es.promise.all.js\\");\\n__webpack_require__(/*! ../modules/es.promise.catch */ \\"./node_modules/core-js/modules/es.promise.catch.js\\");\\n__webpack_require__(/*! ../modules/es.promise.race */ \\"./node_modules/core-js/modules/es.promise.race.js\\");\\n__webpack_require__(/*! ../modules/es.promise.reject */ \\"./node_modules/core-js/modules/es.promise.reject.js\\");\\n__webpack_require__(/*! ../modules/es.promise.resolve */ \\"./node_modules/core-js/modules/es.promise.resolve.js\\");\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.promise.js?")}),"./node_modules/core-js/modules/es.promise.race.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar call = __webpack_require__(/*! ../internals/function-call */ \\"./node_modules/core-js/internals/function-call.js\\");\\nvar aCallable = __webpack_require__(/*! ../internals/a-callable */ \\"./node_modules/core-js/internals/a-callable.js\\");\\nvar newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ \\"./node_modules/core-js/internals/new-promise-capability.js\\");\\nvar perform = __webpack_require__(/*! ../internals/perform */ \\"./node_modules/core-js/internals/perform.js\\");\\nvar iterate = __webpack_require__(/*! ../internals/iterate */ \\"./node_modules/core-js/internals/iterate.js\\");\\nvar PROMISE_STATICS_INCORRECT_ITERATION = __webpack_require__(/*! ../internals/promise-statics-incorrect-iteration */ \\"./node_modules/core-js/internals/promise-statics-incorrect-iteration.js\\");\\n\\n// \`Promise.race\` method\\n// https://tc39.es/ecma262/#sec-promise.race\\n$({ target: 'Promise', stat: true, forced: PROMISE_STATICS_INCORRECT_ITERATION }, {\\n race: function race(iterable) {\\n var C = this;\\n var capability = newPromiseCapabilityModule.f(C);\\n var reject = capability.reject;\\n var result = perform(function () {\\n var $promiseResolve = aCallable(C.resolve);\\n iterate(iterable, function (promise) {\\n call($promiseResolve, C, promise).then(capability.resolve, reject);\\n });\\n });\\n if (result.error) reject(result.value);\\n return capability.promise;\\n }\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.promise.race.js?")}),"./node_modules/core-js/modules/es.promise.reject.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar call = __webpack_require__(/*! ../internals/function-call */ \\"./node_modules/core-js/internals/function-call.js\\");\\nvar newPromiseCapabilityModule = __webpack_require__(/*! ../internals/new-promise-capability */ \\"./node_modules/core-js/internals/new-promise-capability.js\\");\\nvar FORCED_PROMISE_CONSTRUCTOR = (__webpack_require__(/*! ../internals/promise-constructor-detection */ \\"./node_modules/core-js/internals/promise-constructor-detection.js\\").CONSTRUCTOR);\\n\\n// \`Promise.reject\` method\\n// https://tc39.es/ecma262/#sec-promise.reject\\n$({ target: 'Promise', stat: true, forced: FORCED_PROMISE_CONSTRUCTOR }, {\\n reject: function reject(r) {\\n var capability = newPromiseCapabilityModule.f(this);\\n call(capability.reject, undefined, r);\\n return capability.promise;\\n }\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.promise.reject.js?")}),"./node_modules/core-js/modules/es.promise.resolve.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ \\"./node_modules/core-js/internals/get-built-in.js\\");\\nvar IS_PURE = __webpack_require__(/*! ../internals/is-pure */ \\"./node_modules/core-js/internals/is-pure.js\\");\\nvar NativePromiseConstructor = __webpack_require__(/*! ../internals/promise-native-constructor */ \\"./node_modules/core-js/internals/promise-native-constructor.js\\");\\nvar FORCED_PROMISE_CONSTRUCTOR = (__webpack_require__(/*! ../internals/promise-constructor-detection */ \\"./node_modules/core-js/internals/promise-constructor-detection.js\\").CONSTRUCTOR);\\nvar promiseResolve = __webpack_require__(/*! ../internals/promise-resolve */ \\"./node_modules/core-js/internals/promise-resolve.js\\");\\n\\nvar PromiseConstructorWrapper = getBuiltIn('Promise');\\nvar CHECK_WRAPPER = IS_PURE && !FORCED_PROMISE_CONSTRUCTOR;\\n\\n// \`Promise.resolve\` method\\n// https://tc39.es/ecma262/#sec-promise.resolve\\n$({ target: 'Promise', stat: true, forced: IS_PURE || FORCED_PROMISE_CONSTRUCTOR }, {\\n resolve: function resolve(x) {\\n return promiseResolve(CHECK_WRAPPER && this === PromiseConstructorWrapper ? NativePromiseConstructor : this, x);\\n }\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.promise.resolve.js?")}),"./node_modules/core-js/modules/es.reflect.to-string-tag.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar global = __webpack_require__(/*! ../internals/global */ \\"./node_modules/core-js/internals/global.js\\");\\nvar setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ \\"./node_modules/core-js/internals/set-to-string-tag.js\\");\\n\\n$({ global: true }, { Reflect: {} });\\n\\n// Reflect[@@toStringTag] property\\n// https://tc39.es/ecma262/#sec-reflect-@@tostringtag\\nsetToStringTag(global.Reflect, 'Reflect', true);\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.reflect.to-string-tag.js?")}),"./node_modules/core-js/modules/es.regexp.constructor.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ \\"./node_modules/core-js/internals/descriptors.js\\");\\nvar global = __webpack_require__(/*! ../internals/global */ \\"./node_modules/core-js/internals/global.js\\");\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\nvar isForced = __webpack_require__(/*! ../internals/is-forced */ \\"./node_modules/core-js/internals/is-forced.js\\");\\nvar inheritIfRequired = __webpack_require__(/*! ../internals/inherit-if-required */ \\"./node_modules/core-js/internals/inherit-if-required.js\\");\\nvar createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ \\"./node_modules/core-js/internals/create-non-enumerable-property.js\\");\\nvar getOwnPropertyNames = (__webpack_require__(/*! ../internals/object-get-own-property-names */ \\"./node_modules/core-js/internals/object-get-own-property-names.js\\").f);\\nvar isPrototypeOf = __webpack_require__(/*! ../internals/object-is-prototype-of */ \\"./node_modules/core-js/internals/object-is-prototype-of.js\\");\\nvar isRegExp = __webpack_require__(/*! ../internals/is-regexp */ \\"./node_modules/core-js/internals/is-regexp.js\\");\\nvar toString = __webpack_require__(/*! ../internals/to-string */ \\"./node_modules/core-js/internals/to-string.js\\");\\nvar getRegExpFlags = __webpack_require__(/*! ../internals/regexp-get-flags */ \\"./node_modules/core-js/internals/regexp-get-flags.js\\");\\nvar stickyHelpers = __webpack_require__(/*! ../internals/regexp-sticky-helpers */ \\"./node_modules/core-js/internals/regexp-sticky-helpers.js\\");\\nvar proxyAccessor = __webpack_require__(/*! ../internals/proxy-accessor */ \\"./node_modules/core-js/internals/proxy-accessor.js\\");\\nvar defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ \\"./node_modules/core-js/internals/define-built-in.js\\");\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\nvar hasOwn = __webpack_require__(/*! ../internals/has-own-property */ \\"./node_modules/core-js/internals/has-own-property.js\\");\\nvar enforceInternalState = (__webpack_require__(/*! ../internals/internal-state */ \\"./node_modules/core-js/internals/internal-state.js\\").enforce);\\nvar setSpecies = __webpack_require__(/*! ../internals/set-species */ \\"./node_modules/core-js/internals/set-species.js\\");\\nvar wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ \\"./node_modules/core-js/internals/well-known-symbol.js\\");\\nvar UNSUPPORTED_DOT_ALL = __webpack_require__(/*! ../internals/regexp-unsupported-dot-all */ \\"./node_modules/core-js/internals/regexp-unsupported-dot-all.js\\");\\nvar UNSUPPORTED_NCG = __webpack_require__(/*! ../internals/regexp-unsupported-ncg */ \\"./node_modules/core-js/internals/regexp-unsupported-ncg.js\\");\\n\\nvar MATCH = wellKnownSymbol('match');\\nvar NativeRegExp = global.RegExp;\\nvar RegExpPrototype = NativeRegExp.prototype;\\nvar SyntaxError = global.SyntaxError;\\nvar exec = uncurryThis(RegExpPrototype.exec);\\nvar charAt = uncurryThis(''.charAt);\\nvar replace = uncurryThis(''.replace);\\nvar stringIndexOf = uncurryThis(''.indexOf);\\nvar stringSlice = uncurryThis(''.slice);\\n// TODO: Use only proper RegExpIdentifierName\\nvar IS_NCG = /^\\\\?<[^\\\\s\\\\d!#%&*+<=>@^][^\\\\s!#%&*+<=>@^]*>/;\\nvar re1 = /a/g;\\nvar re2 = /a/g;\\n\\n// \\"new\\" should create a new object, old webkit bug\\nvar CORRECT_NEW = new NativeRegExp(re1) !== re1;\\n\\nvar MISSED_STICKY = stickyHelpers.MISSED_STICKY;\\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;\\n\\nvar BASE_FORCED = DESCRIPTORS &&\\n (!CORRECT_NEW || MISSED_STICKY || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG || fails(function () {\\n re2[MATCH] = false;\\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\\n return NativeRegExp(re1) != re1 || NativeRegExp(re2) == re2 || NativeRegExp(re1, 'i') != '/a/i';\\n }));\\n\\nvar handleDotAll = function (string) {\\n var length = string.length;\\n var index = 0;\\n var result = '';\\n var brackets = false;\\n var chr;\\n for (; index <= length; index++) {\\n chr = charAt(string, index);\\n if (chr === '\\\\\\\\') {\\n result += chr + charAt(string, ++index);\\n continue;\\n }\\n if (!brackets && chr === '.') {\\n result += '[\\\\\\\\s\\\\\\\\S]';\\n } else {\\n if (chr === '[') {\\n brackets = true;\\n } else if (chr === ']') {\\n brackets = false;\\n } result += chr;\\n }\\n } return result;\\n};\\n\\nvar handleNCG = function (string) {\\n var length = string.length;\\n var index = 0;\\n var result = '';\\n var named = [];\\n var names = {};\\n var brackets = false;\\n var ncg = false;\\n var groupid = 0;\\n var groupname = '';\\n var chr;\\n for (; index <= length; index++) {\\n chr = charAt(string, index);\\n if (chr === '\\\\\\\\') {\\n chr = chr + charAt(string, ++index);\\n } else if (chr === ']') {\\n brackets = false;\\n } else if (!brackets) switch (true) {\\n case chr === '[':\\n brackets = true;\\n break;\\n case chr === '(':\\n if (exec(IS_NCG, stringSlice(string, index + 1))) {\\n index += 2;\\n ncg = true;\\n }\\n result += chr;\\n groupid++;\\n continue;\\n case chr === '>' && ncg:\\n if (groupname === '' || hasOwn(names, groupname)) {\\n throw new SyntaxError('Invalid capture group name');\\n }\\n names[groupname] = true;\\n named[named.length] = [groupname, groupid];\\n ncg = false;\\n groupname = '';\\n continue;\\n }\\n if (ncg) groupname += chr;\\n else result += chr;\\n } return [result, named];\\n};\\n\\n// \`RegExp\` constructor\\n// https://tc39.es/ecma262/#sec-regexp-constructor\\nif (isForced('RegExp', BASE_FORCED)) {\\n var RegExpWrapper = function RegExp(pattern, flags) {\\n var thisIsRegExp = isPrototypeOf(RegExpPrototype, this);\\n var patternIsRegExp = isRegExp(pattern);\\n var flagsAreUndefined = flags === undefined;\\n var groups = [];\\n var rawPattern = pattern;\\n var rawFlags, dotAll, sticky, handled, result, state;\\n\\n if (!thisIsRegExp && patternIsRegExp && flagsAreUndefined && pattern.constructor === RegExpWrapper) {\\n return pattern;\\n }\\n\\n if (patternIsRegExp || isPrototypeOf(RegExpPrototype, pattern)) {\\n pattern = pattern.source;\\n if (flagsAreUndefined) flags = getRegExpFlags(rawPattern);\\n }\\n\\n pattern = pattern === undefined ? '' : toString(pattern);\\n flags = flags === undefined ? '' : toString(flags);\\n rawPattern = pattern;\\n\\n if (UNSUPPORTED_DOT_ALL && 'dotAll' in re1) {\\n dotAll = !!flags && stringIndexOf(flags, 's') > -1;\\n if (dotAll) flags = replace(flags, /s/g, '');\\n }\\n\\n rawFlags = flags;\\n\\n if (MISSED_STICKY && 'sticky' in re1) {\\n sticky = !!flags && stringIndexOf(flags, 'y') > -1;\\n if (sticky && UNSUPPORTED_Y) flags = replace(flags, /y/g, '');\\n }\\n\\n if (UNSUPPORTED_NCG) {\\n handled = handleNCG(pattern);\\n pattern = handled[0];\\n groups = handled[1];\\n }\\n\\n result = inheritIfRequired(NativeRegExp(pattern, flags), thisIsRegExp ? this : RegExpPrototype, RegExpWrapper);\\n\\n if (dotAll || sticky || groups.length) {\\n state = enforceInternalState(result);\\n if (dotAll) {\\n state.dotAll = true;\\n state.raw = RegExpWrapper(handleDotAll(pattern), rawFlags);\\n }\\n if (sticky) state.sticky = true;\\n if (groups.length) state.groups = groups;\\n }\\n\\n if (pattern !== rawPattern) try {\\n // fails in old engines, but we have no alternatives for unsupported regex syntax\\n createNonEnumerableProperty(result, 'source', rawPattern === '' ? '(?:)' : rawPattern);\\n } catch (error) { /* empty */ }\\n\\n return result;\\n };\\n\\n for (var keys = getOwnPropertyNames(NativeRegExp), index = 0; keys.length > index;) {\\n proxyAccessor(RegExpWrapper, NativeRegExp, keys[index++]);\\n }\\n\\n RegExpPrototype.constructor = RegExpWrapper;\\n RegExpWrapper.prototype = RegExpPrototype;\\n defineBuiltIn(global, 'RegExp', RegExpWrapper, { constructor: true });\\n}\\n\\n// https://tc39.es/ecma262/#sec-get-regexp-@@species\\nsetSpecies('RegExp');\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.regexp.constructor.js?")}),"./node_modules/core-js/modules/es.regexp.dot-all.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ \\"./node_modules/core-js/internals/descriptors.js\\");\\nvar UNSUPPORTED_DOT_ALL = __webpack_require__(/*! ../internals/regexp-unsupported-dot-all */ \\"./node_modules/core-js/internals/regexp-unsupported-dot-all.js\\");\\nvar classof = __webpack_require__(/*! ../internals/classof-raw */ \\"./node_modules/core-js/internals/classof-raw.js\\");\\nvar defineBuiltInAccessor = __webpack_require__(/*! ../internals/define-built-in-accessor */ \\"./node_modules/core-js/internals/define-built-in-accessor.js\\");\\nvar getInternalState = (__webpack_require__(/*! ../internals/internal-state */ \\"./node_modules/core-js/internals/internal-state.js\\").get);\\n\\nvar RegExpPrototype = RegExp.prototype;\\nvar $TypeError = TypeError;\\n\\n// \`RegExp.prototype.dotAll\` getter\\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.dotall\\nif (DESCRIPTORS && UNSUPPORTED_DOT_ALL) {\\n defineBuiltInAccessor(RegExpPrototype, 'dotAll', {\\n configurable: true,\\n get: function dotAll() {\\n if (this === RegExpPrototype) return undefined;\\n // We can't use InternalStateModule.getterFor because\\n // we don't add metadata for regexps created by a literal.\\n if (classof(this) === 'RegExp') {\\n return !!getInternalState(this).dotAll;\\n }\\n throw $TypeError('Incompatible receiver, RegExp required');\\n }\\n });\\n}\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.regexp.dot-all.js?")}),"./node_modules/core-js/modules/es.regexp.exec.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar exec = __webpack_require__(/*! ../internals/regexp-exec */ \\"./node_modules/core-js/internals/regexp-exec.js\\");\\n\\n// \`RegExp.prototype.exec\` method\\n// https://tc39.es/ecma262/#sec-regexp.prototype.exec\\n$({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, {\\n exec: exec\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.regexp.exec.js?")}),"./node_modules/core-js/modules/es.regexp.flags.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar global = __webpack_require__(/*! ../internals/global */ \\"./node_modules/core-js/internals/global.js\\");\\nvar DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ \\"./node_modules/core-js/internals/descriptors.js\\");\\nvar defineBuiltInAccessor = __webpack_require__(/*! ../internals/define-built-in-accessor */ \\"./node_modules/core-js/internals/define-built-in-accessor.js\\");\\nvar regExpFlags = __webpack_require__(/*! ../internals/regexp-flags */ \\"./node_modules/core-js/internals/regexp-flags.js\\");\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\n\\n// babel-minify and Closure Compiler transpiles RegExp('.', 'd') -> /./d and it causes SyntaxError\\nvar RegExp = global.RegExp;\\nvar RegExpPrototype = RegExp.prototype;\\n\\nvar FORCED = DESCRIPTORS && fails(function () {\\n var INDICES_SUPPORT = true;\\n try {\\n RegExp('.', 'd');\\n } catch (error) {\\n INDICES_SUPPORT = false;\\n }\\n\\n var O = {};\\n // modern V8 bug\\n var calls = '';\\n var expected = INDICES_SUPPORT ? 'dgimsy' : 'gimsy';\\n\\n var addGetter = function (key, chr) {\\n // eslint-disable-next-line es/no-object-defineproperty -- safe\\n Object.defineProperty(O, key, { get: function () {\\n calls += chr;\\n return true;\\n } });\\n };\\n\\n var pairs = {\\n dotAll: 's',\\n global: 'g',\\n ignoreCase: 'i',\\n multiline: 'm',\\n sticky: 'y'\\n };\\n\\n if (INDICES_SUPPORT) pairs.hasIndices = 'd';\\n\\n for (var key in pairs) addGetter(key, pairs[key]);\\n\\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\\n var result = Object.getOwnPropertyDescriptor(RegExpPrototype, 'flags').get.call(O);\\n\\n return result !== expected || calls !== expected;\\n});\\n\\n// \`RegExp.prototype.flags\` getter\\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\\nif (FORCED) defineBuiltInAccessor(RegExpPrototype, 'flags', {\\n configurable: true,\\n get: regExpFlags\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.regexp.flags.js?")}),"./node_modules/core-js/modules/es.regexp.test.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\n// TODO: Remove from \`core-js@4\` since it's moved to entry points\\n__webpack_require__(/*! ../modules/es.regexp.exec */ \\"./node_modules/core-js/modules/es.regexp.exec.js\\");\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar call = __webpack_require__(/*! ../internals/function-call */ \\"./node_modules/core-js/internals/function-call.js\\");\\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \\"./node_modules/core-js/internals/is-callable.js\\");\\nvar anObject = __webpack_require__(/*! ../internals/an-object */ \\"./node_modules/core-js/internals/an-object.js\\");\\nvar toString = __webpack_require__(/*! ../internals/to-string */ \\"./node_modules/core-js/internals/to-string.js\\");\\n\\nvar DELEGATES_TO_EXEC = function () {\\n var execCalled = false;\\n var re = /[ac]/;\\n re.exec = function () {\\n execCalled = true;\\n return /./.exec.apply(this, arguments);\\n };\\n return re.test('abc') === true && execCalled;\\n}();\\n\\nvar nativeTest = /./.test;\\n\\n// \`RegExp.prototype.test\` method\\n// https://tc39.es/ecma262/#sec-regexp.prototype.test\\n$({ target: 'RegExp', proto: true, forced: !DELEGATES_TO_EXEC }, {\\n test: function (S) {\\n var R = anObject(this);\\n var string = toString(S);\\n var exec = R.exec;\\n if (!isCallable(exec)) return call(nativeTest, R, string);\\n var result = call(exec, R, string);\\n if (result === null) return false;\\n anObject(result);\\n return true;\\n }\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.regexp.test.js?")}),"./node_modules/core-js/modules/es.regexp.to-string.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar PROPER_FUNCTION_NAME = (__webpack_require__(/*! ../internals/function-name */ \\"./node_modules/core-js/internals/function-name.js\\").PROPER);\\nvar defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ \\"./node_modules/core-js/internals/define-built-in.js\\");\\nvar anObject = __webpack_require__(/*! ../internals/an-object */ \\"./node_modules/core-js/internals/an-object.js\\");\\nvar $toString = __webpack_require__(/*! ../internals/to-string */ \\"./node_modules/core-js/internals/to-string.js\\");\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\nvar getRegExpFlags = __webpack_require__(/*! ../internals/regexp-get-flags */ \\"./node_modules/core-js/internals/regexp-get-flags.js\\");\\n\\nvar TO_STRING = 'toString';\\nvar RegExpPrototype = RegExp.prototype;\\nvar nativeToString = RegExpPrototype[TO_STRING];\\n\\nvar NOT_GENERIC = fails(function () { return nativeToString.call({ source: 'a', flags: 'b' }) != '/a/b'; });\\n// FF44- RegExp#toString has a wrong name\\nvar INCORRECT_NAME = PROPER_FUNCTION_NAME && nativeToString.name != TO_STRING;\\n\\n// \`RegExp.prototype.toString\` method\\n// https://tc39.es/ecma262/#sec-regexp.prototype.tostring\\nif (NOT_GENERIC || INCORRECT_NAME) {\\n defineBuiltIn(RegExp.prototype, TO_STRING, function toString() {\\n var R = anObject(this);\\n var pattern = $toString(R.source);\\n var flags = $toString(getRegExpFlags(R));\\n return '/' + pattern + '/' + flags;\\n }, { unsafe: true });\\n}\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.regexp.to-string.js?")}),"./node_modules/core-js/modules/es.string.at-alternative.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\nvar requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ \\"./node_modules/core-js/internals/require-object-coercible.js\\");\\nvar toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ \\"./node_modules/core-js/internals/to-integer-or-infinity.js\\");\\nvar toString = __webpack_require__(/*! ../internals/to-string */ \\"./node_modules/core-js/internals/to-string.js\\");\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\n\\nvar charAt = uncurryThis(''.charAt);\\n\\nvar FORCED = fails(function () {\\n // eslint-disable-next-line es/no-array-string-prototype-at -- safe\\n return '𠮷'.at(-2) !== '\\\\uD842';\\n});\\n\\n// \`String.prototype.at\` method\\n// https://tc39.es/ecma262/#sec-string.prototype.at\\n$({ target: 'String', proto: true, forced: FORCED }, {\\n at: function at(index) {\\n var S = toString(requireObjectCoercible(this));\\n var len = S.length;\\n var relativeIndex = toIntegerOrInfinity(index);\\n var k = relativeIndex >= 0 ? relativeIndex : len + relativeIndex;\\n return (k < 0 || k >= len) ? undefined : charAt(S, k);\\n }\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.string.at-alternative.js?")}),"./node_modules/core-js/modules/es.string.ends-with.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this-clause */ \\"./node_modules/core-js/internals/function-uncurry-this-clause.js\\");\\nvar getOwnPropertyDescriptor = (__webpack_require__(/*! ../internals/object-get-own-property-descriptor */ \\"./node_modules/core-js/internals/object-get-own-property-descriptor.js\\").f);\\nvar toLength = __webpack_require__(/*! ../internals/to-length */ \\"./node_modules/core-js/internals/to-length.js\\");\\nvar toString = __webpack_require__(/*! ../internals/to-string */ \\"./node_modules/core-js/internals/to-string.js\\");\\nvar notARegExp = __webpack_require__(/*! ../internals/not-a-regexp */ \\"./node_modules/core-js/internals/not-a-regexp.js\\");\\nvar requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ \\"./node_modules/core-js/internals/require-object-coercible.js\\");\\nvar correctIsRegExpLogic = __webpack_require__(/*! ../internals/correct-is-regexp-logic */ \\"./node_modules/core-js/internals/correct-is-regexp-logic.js\\");\\nvar IS_PURE = __webpack_require__(/*! ../internals/is-pure */ \\"./node_modules/core-js/internals/is-pure.js\\");\\n\\n// eslint-disable-next-line es/no-string-prototype-endswith -- safe\\nvar nativeEndsWith = uncurryThis(''.endsWith);\\nvar slice = uncurryThis(''.slice);\\nvar min = Math.min;\\n\\nvar CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic('endsWith');\\n// https://github.com/zloirock/core-js/pull/702\\nvar MDN_POLYFILL_BUG = !IS_PURE && !CORRECT_IS_REGEXP_LOGIC && !!function () {\\n var descriptor = getOwnPropertyDescriptor(String.prototype, 'endsWith');\\n return descriptor && !descriptor.writable;\\n}();\\n\\n// \`String.prototype.endsWith\` method\\n// https://tc39.es/ecma262/#sec-string.prototype.endswith\\n$({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, {\\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\\n var that = toString(requireObjectCoercible(this));\\n notARegExp(searchString);\\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\\n var len = that.length;\\n var end = endPosition === undefined ? len : min(toLength(endPosition), len);\\n var search = toString(searchString);\\n return nativeEndsWith\\n ? nativeEndsWith(that, search, end)\\n : slice(that, end - search.length, end) === search;\\n }\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.string.ends-with.js?")}),"./node_modules/core-js/modules/es.string.includes.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\nvar notARegExp = __webpack_require__(/*! ../internals/not-a-regexp */ \\"./node_modules/core-js/internals/not-a-regexp.js\\");\\nvar requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ \\"./node_modules/core-js/internals/require-object-coercible.js\\");\\nvar toString = __webpack_require__(/*! ../internals/to-string */ \\"./node_modules/core-js/internals/to-string.js\\");\\nvar correctIsRegExpLogic = __webpack_require__(/*! ../internals/correct-is-regexp-logic */ \\"./node_modules/core-js/internals/correct-is-regexp-logic.js\\");\\n\\nvar stringIndexOf = uncurryThis(''.indexOf);\\n\\n// \`String.prototype.includes\` method\\n// https://tc39.es/ecma262/#sec-string.prototype.includes\\n$({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, {\\n includes: function includes(searchString /* , position = 0 */) {\\n return !!~stringIndexOf(\\n toString(requireObjectCoercible(this)),\\n toString(notARegExp(searchString)),\\n arguments.length > 1 ? arguments[1] : undefined\\n );\\n }\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.string.includes.js?")}),"./node_modules/core-js/modules/es.string.iterator.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar charAt = (__webpack_require__(/*! ../internals/string-multibyte */ \\"./node_modules/core-js/internals/string-multibyte.js\\").charAt);\\nvar toString = __webpack_require__(/*! ../internals/to-string */ \\"./node_modules/core-js/internals/to-string.js\\");\\nvar InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ \\"./node_modules/core-js/internals/internal-state.js\\");\\nvar defineIterator = __webpack_require__(/*! ../internals/iterator-define */ \\"./node_modules/core-js/internals/iterator-define.js\\");\\nvar createIterResultObject = __webpack_require__(/*! ../internals/create-iter-result-object */ \\"./node_modules/core-js/internals/create-iter-result-object.js\\");\\n\\nvar STRING_ITERATOR = 'String Iterator';\\nvar setInternalState = InternalStateModule.set;\\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\\n\\n// \`String.prototype[@@iterator]\` method\\n// https://tc39.es/ecma262/#sec-string.prototype-@@iterator\\ndefineIterator(String, 'String', function (iterated) {\\n setInternalState(this, {\\n type: STRING_ITERATOR,\\n string: toString(iterated),\\n index: 0\\n });\\n// \`%StringIteratorPrototype%.next\` method\\n// https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next\\n}, function next() {\\n var state = getInternalState(this);\\n var string = state.string;\\n var index = state.index;\\n var point;\\n if (index >= string.length) return createIterResultObject(undefined, true);\\n point = charAt(string, index);\\n state.index += point.length;\\n return createIterResultObject(point, false);\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.string.iterator.js?")}),"./node_modules/core-js/modules/es.string.match.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar call = __webpack_require__(/*! ../internals/function-call */ \\"./node_modules/core-js/internals/function-call.js\\");\\nvar fixRegExpWellKnownSymbolLogic = __webpack_require__(/*! ../internals/fix-regexp-well-known-symbol-logic */ \\"./node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js\\");\\nvar anObject = __webpack_require__(/*! ../internals/an-object */ \\"./node_modules/core-js/internals/an-object.js\\");\\nvar isNullOrUndefined = __webpack_require__(/*! ../internals/is-null-or-undefined */ \\"./node_modules/core-js/internals/is-null-or-undefined.js\\");\\nvar toLength = __webpack_require__(/*! ../internals/to-length */ \\"./node_modules/core-js/internals/to-length.js\\");\\nvar toString = __webpack_require__(/*! ../internals/to-string */ \\"./node_modules/core-js/internals/to-string.js\\");\\nvar requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ \\"./node_modules/core-js/internals/require-object-coercible.js\\");\\nvar getMethod = __webpack_require__(/*! ../internals/get-method */ \\"./node_modules/core-js/internals/get-method.js\\");\\nvar advanceStringIndex = __webpack_require__(/*! ../internals/advance-string-index */ \\"./node_modules/core-js/internals/advance-string-index.js\\");\\nvar regExpExec = __webpack_require__(/*! ../internals/regexp-exec-abstract */ \\"./node_modules/core-js/internals/regexp-exec-abstract.js\\");\\n\\n// @@match logic\\nfixRegExpWellKnownSymbolLogic('match', function (MATCH, nativeMatch, maybeCallNative) {\\n return [\\n // \`String.prototype.match\` method\\n // https://tc39.es/ecma262/#sec-string.prototype.match\\n function match(regexp) {\\n var O = requireObjectCoercible(this);\\n var matcher = isNullOrUndefined(regexp) ? undefined : getMethod(regexp, MATCH);\\n return matcher ? call(matcher, regexp, O) : new RegExp(regexp)[MATCH](toString(O));\\n },\\n // \`RegExp.prototype[@@match]\` method\\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@match\\n function (string) {\\n var rx = anObject(this);\\n var S = toString(string);\\n var res = maybeCallNative(nativeMatch, rx, S);\\n\\n if (res.done) return res.value;\\n\\n if (!rx.global) return regExpExec(rx, S);\\n\\n var fullUnicode = rx.unicode;\\n rx.lastIndex = 0;\\n var A = [];\\n var n = 0;\\n var result;\\n while ((result = regExpExec(rx, S)) !== null) {\\n var matchStr = toString(result[0]);\\n A[n] = matchStr;\\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\\n n++;\\n }\\n return n === 0 ? null : A;\\n }\\n ];\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.string.match.js?")}),"./node_modules/core-js/modules/es.string.replace-all.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar call = __webpack_require__(/*! ../internals/function-call */ \\"./node_modules/core-js/internals/function-call.js\\");\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\nvar requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ \\"./node_modules/core-js/internals/require-object-coercible.js\\");\\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \\"./node_modules/core-js/internals/is-callable.js\\");\\nvar isNullOrUndefined = __webpack_require__(/*! ../internals/is-null-or-undefined */ \\"./node_modules/core-js/internals/is-null-or-undefined.js\\");\\nvar isRegExp = __webpack_require__(/*! ../internals/is-regexp */ \\"./node_modules/core-js/internals/is-regexp.js\\");\\nvar toString = __webpack_require__(/*! ../internals/to-string */ \\"./node_modules/core-js/internals/to-string.js\\");\\nvar getMethod = __webpack_require__(/*! ../internals/get-method */ \\"./node_modules/core-js/internals/get-method.js\\");\\nvar getRegExpFlags = __webpack_require__(/*! ../internals/regexp-get-flags */ \\"./node_modules/core-js/internals/regexp-get-flags.js\\");\\nvar getSubstitution = __webpack_require__(/*! ../internals/get-substitution */ \\"./node_modules/core-js/internals/get-substitution.js\\");\\nvar wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ \\"./node_modules/core-js/internals/well-known-symbol.js\\");\\nvar IS_PURE = __webpack_require__(/*! ../internals/is-pure */ \\"./node_modules/core-js/internals/is-pure.js\\");\\n\\nvar REPLACE = wellKnownSymbol('replace');\\nvar $TypeError = TypeError;\\nvar indexOf = uncurryThis(''.indexOf);\\nvar replace = uncurryThis(''.replace);\\nvar stringSlice = uncurryThis(''.slice);\\nvar max = Math.max;\\n\\nvar stringIndexOf = function (string, searchValue, fromIndex) {\\n if (fromIndex > string.length) return -1;\\n if (searchValue === '') return fromIndex;\\n return indexOf(string, searchValue, fromIndex);\\n};\\n\\n// \`String.prototype.replaceAll\` method\\n// https://tc39.es/ecma262/#sec-string.prototype.replaceall\\n$({ target: 'String', proto: true }, {\\n replaceAll: function replaceAll(searchValue, replaceValue) {\\n var O = requireObjectCoercible(this);\\n var IS_REG_EXP, flags, replacer, string, searchString, functionalReplace, searchLength, advanceBy, replacement;\\n var position = 0;\\n var endOfLastMatch = 0;\\n var result = '';\\n if (!isNullOrUndefined(searchValue)) {\\n IS_REG_EXP = isRegExp(searchValue);\\n if (IS_REG_EXP) {\\n flags = toString(requireObjectCoercible(getRegExpFlags(searchValue)));\\n if (!~indexOf(flags, 'g')) throw $TypeError('\`.replaceAll\` does not allow non-global regexes');\\n }\\n replacer = getMethod(searchValue, REPLACE);\\n if (replacer) {\\n return call(replacer, searchValue, O, replaceValue);\\n } else if (IS_PURE && IS_REG_EXP) {\\n return replace(toString(O), searchValue, replaceValue);\\n }\\n }\\n string = toString(O);\\n searchString = toString(searchValue);\\n functionalReplace = isCallable(replaceValue);\\n if (!functionalReplace) replaceValue = toString(replaceValue);\\n searchLength = searchString.length;\\n advanceBy = max(1, searchLength);\\n position = stringIndexOf(string, searchString, 0);\\n while (position !== -1) {\\n replacement = functionalReplace\\n ? toString(replaceValue(searchString, position, string))\\n : getSubstitution(searchString, string, position, [], undefined, replaceValue);\\n result += stringSlice(string, endOfLastMatch, position) + replacement;\\n endOfLastMatch = position + searchLength;\\n position = stringIndexOf(string, searchString, position + advanceBy);\\n }\\n if (endOfLastMatch < string.length) {\\n result += stringSlice(string, endOfLastMatch);\\n }\\n return result;\\n }\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.string.replace-all.js?")}),"./node_modules/core-js/modules/es.string.replace.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar apply = __webpack_require__(/*! ../internals/function-apply */ \\"./node_modules/core-js/internals/function-apply.js\\");\\nvar call = __webpack_require__(/*! ../internals/function-call */ \\"./node_modules/core-js/internals/function-call.js\\");\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\nvar fixRegExpWellKnownSymbolLogic = __webpack_require__(/*! ../internals/fix-regexp-well-known-symbol-logic */ \\"./node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js\\");\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\nvar anObject = __webpack_require__(/*! ../internals/an-object */ \\"./node_modules/core-js/internals/an-object.js\\");\\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \\"./node_modules/core-js/internals/is-callable.js\\");\\nvar isNullOrUndefined = __webpack_require__(/*! ../internals/is-null-or-undefined */ \\"./node_modules/core-js/internals/is-null-or-undefined.js\\");\\nvar toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ \\"./node_modules/core-js/internals/to-integer-or-infinity.js\\");\\nvar toLength = __webpack_require__(/*! ../internals/to-length */ \\"./node_modules/core-js/internals/to-length.js\\");\\nvar toString = __webpack_require__(/*! ../internals/to-string */ \\"./node_modules/core-js/internals/to-string.js\\");\\nvar requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ \\"./node_modules/core-js/internals/require-object-coercible.js\\");\\nvar advanceStringIndex = __webpack_require__(/*! ../internals/advance-string-index */ \\"./node_modules/core-js/internals/advance-string-index.js\\");\\nvar getMethod = __webpack_require__(/*! ../internals/get-method */ \\"./node_modules/core-js/internals/get-method.js\\");\\nvar getSubstitution = __webpack_require__(/*! ../internals/get-substitution */ \\"./node_modules/core-js/internals/get-substitution.js\\");\\nvar regExpExec = __webpack_require__(/*! ../internals/regexp-exec-abstract */ \\"./node_modules/core-js/internals/regexp-exec-abstract.js\\");\\nvar wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ \\"./node_modules/core-js/internals/well-known-symbol.js\\");\\n\\nvar REPLACE = wellKnownSymbol('replace');\\nvar max = Math.max;\\nvar min = Math.min;\\nvar concat = uncurryThis([].concat);\\nvar push = uncurryThis([].push);\\nvar stringIndexOf = uncurryThis(''.indexOf);\\nvar stringSlice = uncurryThis(''.slice);\\n\\nvar maybeToString = function (it) {\\n return it === undefined ? it : String(it);\\n};\\n\\n// IE <= 11 replaces $0 with the whole match, as if it was $&\\n// https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0\\nvar REPLACE_KEEPS_$0 = (function () {\\n // eslint-disable-next-line regexp/prefer-escape-replacement-dollar-char -- required for testing\\n return 'a'.replace(/./, '$0') === '$0';\\n})();\\n\\n// Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string\\nvar REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () {\\n if (/./[REPLACE]) {\\n return /./[REPLACE]('a', '$0') === '';\\n }\\n return false;\\n})();\\n\\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\\n var re = /./;\\n re.exec = function () {\\n var result = [];\\n result.groups = { a: '7' };\\n return result;\\n };\\n // eslint-disable-next-line regexp/no-useless-dollar-replacements -- false positive\\n return ''.replace(re, '$') !== '7';\\n});\\n\\n// @@replace logic\\nfixRegExpWellKnownSymbolLogic('replace', function (_, nativeReplace, maybeCallNative) {\\n var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0';\\n\\n return [\\n // \`String.prototype.replace\` method\\n // https://tc39.es/ecma262/#sec-string.prototype.replace\\n function replace(searchValue, replaceValue) {\\n var O = requireObjectCoercible(this);\\n var replacer = isNullOrUndefined(searchValue) ? undefined : getMethod(searchValue, REPLACE);\\n return replacer\\n ? call(replacer, searchValue, O, replaceValue)\\n : call(nativeReplace, toString(O), searchValue, replaceValue);\\n },\\n // \`RegExp.prototype[@@replace]\` method\\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace\\n function (string, replaceValue) {\\n var rx = anObject(this);\\n var S = toString(string);\\n\\n if (\\n typeof replaceValue == 'string' &&\\n stringIndexOf(replaceValue, UNSAFE_SUBSTITUTE) === -1 &&\\n stringIndexOf(replaceValue, '$<') === -1\\n ) {\\n var res = maybeCallNative(nativeReplace, rx, S, replaceValue);\\n if (res.done) return res.value;\\n }\\n\\n var functionalReplace = isCallable(replaceValue);\\n if (!functionalReplace) replaceValue = toString(replaceValue);\\n\\n var global = rx.global;\\n if (global) {\\n var fullUnicode = rx.unicode;\\n rx.lastIndex = 0;\\n }\\n var results = [];\\n while (true) {\\n var result = regExpExec(rx, S);\\n if (result === null) break;\\n\\n push(results, result);\\n if (!global) break;\\n\\n var matchStr = toString(result[0]);\\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\\n }\\n\\n var accumulatedResult = '';\\n var nextSourcePosition = 0;\\n for (var i = 0; i < results.length; i++) {\\n result = results[i];\\n\\n var matched = toString(result[0]);\\n var position = max(min(toIntegerOrInfinity(result.index), S.length), 0);\\n var captures = [];\\n // NOTE: This is equivalent to\\n // captures = result.slice(1).map(maybeToString)\\n // but for some reason \`nativeSlice.call(result, 1, result.length)\` (called in\\n // the slice polyfill when slicing native arrays) \\"doesn't work\\" in safari 9 and\\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\\n for (var j = 1; j < result.length; j++) push(captures, maybeToString(result[j]));\\n var namedCaptures = result.groups;\\n if (functionalReplace) {\\n var replacerArgs = concat([matched], captures, position, S);\\n if (namedCaptures !== undefined) push(replacerArgs, namedCaptures);\\n var replacement = toString(apply(replaceValue, undefined, replacerArgs));\\n } else {\\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\\n }\\n if (position >= nextSourcePosition) {\\n accumulatedResult += stringSlice(S, nextSourcePosition, position) + replacement;\\n nextSourcePosition = position + matched.length;\\n }\\n }\\n return accumulatedResult + stringSlice(S, nextSourcePosition);\\n }\\n ];\\n}, !REPLACE_SUPPORTS_NAMED_GROUPS || !REPLACE_KEEPS_$0 || REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE);\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.string.replace.js?")}),"./node_modules/core-js/modules/es.string.split.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar apply = __webpack_require__(/*! ../internals/function-apply */ \\"./node_modules/core-js/internals/function-apply.js\\");\\nvar call = __webpack_require__(/*! ../internals/function-call */ \\"./node_modules/core-js/internals/function-call.js\\");\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\nvar fixRegExpWellKnownSymbolLogic = __webpack_require__(/*! ../internals/fix-regexp-well-known-symbol-logic */ \\"./node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js\\");\\nvar anObject = __webpack_require__(/*! ../internals/an-object */ \\"./node_modules/core-js/internals/an-object.js\\");\\nvar isNullOrUndefined = __webpack_require__(/*! ../internals/is-null-or-undefined */ \\"./node_modules/core-js/internals/is-null-or-undefined.js\\");\\nvar isRegExp = __webpack_require__(/*! ../internals/is-regexp */ \\"./node_modules/core-js/internals/is-regexp.js\\");\\nvar requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ \\"./node_modules/core-js/internals/require-object-coercible.js\\");\\nvar speciesConstructor = __webpack_require__(/*! ../internals/species-constructor */ \\"./node_modules/core-js/internals/species-constructor.js\\");\\nvar advanceStringIndex = __webpack_require__(/*! ../internals/advance-string-index */ \\"./node_modules/core-js/internals/advance-string-index.js\\");\\nvar toLength = __webpack_require__(/*! ../internals/to-length */ \\"./node_modules/core-js/internals/to-length.js\\");\\nvar toString = __webpack_require__(/*! ../internals/to-string */ \\"./node_modules/core-js/internals/to-string.js\\");\\nvar getMethod = __webpack_require__(/*! ../internals/get-method */ \\"./node_modules/core-js/internals/get-method.js\\");\\nvar arraySlice = __webpack_require__(/*! ../internals/array-slice-simple */ \\"./node_modules/core-js/internals/array-slice-simple.js\\");\\nvar callRegExpExec = __webpack_require__(/*! ../internals/regexp-exec-abstract */ \\"./node_modules/core-js/internals/regexp-exec-abstract.js\\");\\nvar regexpExec = __webpack_require__(/*! ../internals/regexp-exec */ \\"./node_modules/core-js/internals/regexp-exec.js\\");\\nvar stickyHelpers = __webpack_require__(/*! ../internals/regexp-sticky-helpers */ \\"./node_modules/core-js/internals/regexp-sticky-helpers.js\\");\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\n\\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;\\nvar MAX_UINT32 = 0xFFFFFFFF;\\nvar min = Math.min;\\nvar $push = [].push;\\nvar exec = uncurryThis(/./.exec);\\nvar push = uncurryThis($push);\\nvar stringSlice = uncurryThis(''.slice);\\n\\n// Chrome 51 has a buggy \\"split\\" implementation when RegExp#exec !== nativeExec\\n// Weex JS has frozen built-in prototypes, so use try / catch wrapper\\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () {\\n // eslint-disable-next-line regexp/no-empty-group -- required for testing\\n var re = /(?:)/;\\n var originalExec = re.exec;\\n re.exec = function () { return originalExec.apply(this, arguments); };\\n var result = 'ab'.split(re);\\n return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b';\\n});\\n\\n// @@split logic\\nfixRegExpWellKnownSymbolLogic('split', function (SPLIT, nativeSplit, maybeCallNative) {\\n var internalSplit;\\n if (\\n 'abbc'.split(/(b)*/)[1] == 'c' ||\\n // eslint-disable-next-line regexp/no-empty-group -- required for testing\\n 'test'.split(/(?:)/, -1).length != 4 ||\\n 'ab'.split(/(?:ab)*/).length != 2 ||\\n '.'.split(/(.?)(.?)/).length != 4 ||\\n // eslint-disable-next-line regexp/no-empty-capturing-group, regexp/no-empty-group -- required for testing\\n '.'.split(/()()/).length > 1 ||\\n ''.split(/.?/).length\\n ) {\\n // based on es5-shim implementation, need to rework it\\n internalSplit = function (separator, limit) {\\n var string = toString(requireObjectCoercible(this));\\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\\n if (lim === 0) return [];\\n if (separator === undefined) return [string];\\n // If \`separator\` is not a regex, use native split\\n if (!isRegExp(separator)) {\\n return call(nativeSplit, string, separator, lim);\\n }\\n var output = [];\\n var flags = (separator.ignoreCase ? 'i' : '') +\\n (separator.multiline ? 'm' : '') +\\n (separator.unicode ? 'u' : '') +\\n (separator.sticky ? 'y' : '');\\n var lastLastIndex = 0;\\n // Make \`global\` and avoid \`lastIndex\` issues by working with a copy\\n var separatorCopy = new RegExp(separator.source, flags + 'g');\\n var match, lastIndex, lastLength;\\n while (match = call(regexpExec, separatorCopy, string)) {\\n lastIndex = separatorCopy.lastIndex;\\n if (lastIndex > lastLastIndex) {\\n push(output, stringSlice(string, lastLastIndex, match.index));\\n if (match.length > 1 && match.index < string.length) apply($push, output, arraySlice(match, 1));\\n lastLength = match[0].length;\\n lastLastIndex = lastIndex;\\n if (output.length >= lim) break;\\n }\\n if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop\\n }\\n if (lastLastIndex === string.length) {\\n if (lastLength || !exec(separatorCopy, '')) push(output, '');\\n } else push(output, stringSlice(string, lastLastIndex));\\n return output.length > lim ? arraySlice(output, 0, lim) : output;\\n };\\n // Chakra, V8\\n } else if ('0'.split(undefined, 0).length) {\\n internalSplit = function (separator, limit) {\\n return separator === undefined && limit === 0 ? [] : call(nativeSplit, this, separator, limit);\\n };\\n } else internalSplit = nativeSplit;\\n\\n return [\\n // \`String.prototype.split\` method\\n // https://tc39.es/ecma262/#sec-string.prototype.split\\n function split(separator, limit) {\\n var O = requireObjectCoercible(this);\\n var splitter = isNullOrUndefined(separator) ? undefined : getMethod(separator, SPLIT);\\n return splitter\\n ? call(splitter, separator, O, limit)\\n : call(internalSplit, toString(O), separator, limit);\\n },\\n // \`RegExp.prototype[@@split]\` method\\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@split\\n //\\n // NOTE: This cannot be properly polyfilled in engines that don't support\\n // the 'y' flag.\\n function (string, limit) {\\n var rx = anObject(this);\\n var S = toString(string);\\n var res = maybeCallNative(internalSplit, rx, S, limit, internalSplit !== nativeSplit);\\n\\n if (res.done) return res.value;\\n\\n var C = speciesConstructor(rx, RegExp);\\n\\n var unicodeMatching = rx.unicode;\\n var flags = (rx.ignoreCase ? 'i' : '') +\\n (rx.multiline ? 'm' : '') +\\n (rx.unicode ? 'u' : '') +\\n (UNSUPPORTED_Y ? 'g' : 'y');\\n\\n // ^(? + rx + ) is needed, in combination with some S slicing, to\\n // simulate the 'y' flag.\\n var splitter = new C(UNSUPPORTED_Y ? '^(?:' + rx.source + ')' : rx, flags);\\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\\n if (lim === 0) return [];\\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\\n var p = 0;\\n var q = 0;\\n var A = [];\\n while (q < S.length) {\\n splitter.lastIndex = UNSUPPORTED_Y ? 0 : q;\\n var z = callRegExpExec(splitter, UNSUPPORTED_Y ? stringSlice(S, q) : S);\\n var e;\\n if (\\n z === null ||\\n (e = min(toLength(splitter.lastIndex + (UNSUPPORTED_Y ? q : 0)), S.length)) === p\\n ) {\\n q = advanceStringIndex(S, q, unicodeMatching);\\n } else {\\n push(A, stringSlice(S, p, q));\\n if (A.length === lim) return A;\\n for (var i = 1; i <= z.length - 1; i++) {\\n push(A, z[i]);\\n if (A.length === lim) return A;\\n }\\n q = p = e;\\n }\\n }\\n push(A, stringSlice(S, p));\\n return A;\\n }\\n ];\\n}, !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC, UNSUPPORTED_Y);\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.string.split.js?")}),"./node_modules/core-js/modules/es.string.starts-with.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this-clause */ \\"./node_modules/core-js/internals/function-uncurry-this-clause.js\\");\\nvar getOwnPropertyDescriptor = (__webpack_require__(/*! ../internals/object-get-own-property-descriptor */ \\"./node_modules/core-js/internals/object-get-own-property-descriptor.js\\").f);\\nvar toLength = __webpack_require__(/*! ../internals/to-length */ \\"./node_modules/core-js/internals/to-length.js\\");\\nvar toString = __webpack_require__(/*! ../internals/to-string */ \\"./node_modules/core-js/internals/to-string.js\\");\\nvar notARegExp = __webpack_require__(/*! ../internals/not-a-regexp */ \\"./node_modules/core-js/internals/not-a-regexp.js\\");\\nvar requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ \\"./node_modules/core-js/internals/require-object-coercible.js\\");\\nvar correctIsRegExpLogic = __webpack_require__(/*! ../internals/correct-is-regexp-logic */ \\"./node_modules/core-js/internals/correct-is-regexp-logic.js\\");\\nvar IS_PURE = __webpack_require__(/*! ../internals/is-pure */ \\"./node_modules/core-js/internals/is-pure.js\\");\\n\\n// eslint-disable-next-line es/no-string-prototype-startswith -- safe\\nvar nativeStartsWith = uncurryThis(''.startsWith);\\nvar stringSlice = uncurryThis(''.slice);\\nvar min = Math.min;\\n\\nvar CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic('startsWith');\\n// https://github.com/zloirock/core-js/pull/702\\nvar MDN_POLYFILL_BUG = !IS_PURE && !CORRECT_IS_REGEXP_LOGIC && !!function () {\\n var descriptor = getOwnPropertyDescriptor(String.prototype, 'startsWith');\\n return descriptor && !descriptor.writable;\\n}();\\n\\n// \`String.prototype.startsWith\` method\\n// https://tc39.es/ecma262/#sec-string.prototype.startswith\\n$({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, {\\n startsWith: function startsWith(searchString /* , position = 0 */) {\\n var that = toString(requireObjectCoercible(this));\\n notARegExp(searchString);\\n var index = toLength(min(arguments.length > 1 ? arguments[1] : undefined, that.length));\\n var search = toString(searchString);\\n return nativeStartsWith\\n ? nativeStartsWith(that, search, index)\\n : stringSlice(that, index, index + search.length) === search;\\n }\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.string.starts-with.js?")}),"./node_modules/core-js/modules/es.string.trim-end.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\n// TODO: Remove this line from \`core-js@4\`\\n__webpack_require__(/*! ../modules/es.string.trim-right */ \\"./node_modules/core-js/modules/es.string.trim-right.js\\");\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar trimEnd = __webpack_require__(/*! ../internals/string-trim-end */ \\"./node_modules/core-js/internals/string-trim-end.js\\");\\n\\n// \`String.prototype.trimEnd\` method\\n// https://tc39.es/ecma262/#sec-string.prototype.trimend\\n// eslint-disable-next-line es/no-string-prototype-trimstart-trimend -- safe\\n$({ target: 'String', proto: true, name: 'trimEnd', forced: ''.trimEnd !== trimEnd }, {\\n trimEnd: trimEnd\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.string.trim-end.js?")}),"./node_modules/core-js/modules/es.string.trim-right.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar trimEnd = __webpack_require__(/*! ../internals/string-trim-end */ \\"./node_modules/core-js/internals/string-trim-end.js\\");\\n\\n// \`String.prototype.trimRight\` method\\n// https://tc39.es/ecma262/#sec-string.prototype.trimend\\n// eslint-disable-next-line es/no-string-prototype-trimleft-trimright -- safe\\n$({ target: 'String', proto: true, name: 'trimEnd', forced: ''.trimRight !== trimEnd }, {\\n trimRight: trimEnd\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.string.trim-right.js?")}),"./node_modules/core-js/modules/es.string.trim.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar $trim = (__webpack_require__(/*! ../internals/string-trim */ \\"./node_modules/core-js/internals/string-trim.js\\").trim);\\nvar forcedStringTrimMethod = __webpack_require__(/*! ../internals/string-trim-forced */ \\"./node_modules/core-js/internals/string-trim-forced.js\\");\\n\\n// \`String.prototype.trim\` method\\n// https://tc39.es/ecma262/#sec-string.prototype.trim\\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\\n trim: function trim() {\\n return $trim(this);\\n }\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.string.trim.js?")}),"./node_modules/core-js/modules/es.symbol.description.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("// \`Symbol.prototype.description\` getter\\n// https://tc39.es/ecma262/#sec-symbol.prototype.description\\n\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ \\"./node_modules/core-js/internals/descriptors.js\\");\\nvar global = __webpack_require__(/*! ../internals/global */ \\"./node_modules/core-js/internals/global.js\\");\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\nvar hasOwn = __webpack_require__(/*! ../internals/has-own-property */ \\"./node_modules/core-js/internals/has-own-property.js\\");\\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \\"./node_modules/core-js/internals/is-callable.js\\");\\nvar isPrototypeOf = __webpack_require__(/*! ../internals/object-is-prototype-of */ \\"./node_modules/core-js/internals/object-is-prototype-of.js\\");\\nvar toString = __webpack_require__(/*! ../internals/to-string */ \\"./node_modules/core-js/internals/to-string.js\\");\\nvar defineBuiltInAccessor = __webpack_require__(/*! ../internals/define-built-in-accessor */ \\"./node_modules/core-js/internals/define-built-in-accessor.js\\");\\nvar copyConstructorProperties = __webpack_require__(/*! ../internals/copy-constructor-properties */ \\"./node_modules/core-js/internals/copy-constructor-properties.js\\");\\n\\nvar NativeSymbol = global.Symbol;\\nvar SymbolPrototype = NativeSymbol && NativeSymbol.prototype;\\n\\nif (DESCRIPTORS && isCallable(NativeSymbol) && (!('description' in SymbolPrototype) ||\\n // Safari 12 bug\\n NativeSymbol().description !== undefined\\n)) {\\n var EmptyStringDescriptionStore = {};\\n // wrap Symbol constructor for correct work with undefined description\\n var SymbolWrapper = function Symbol() {\\n var description = arguments.length < 1 || arguments[0] === undefined ? undefined : toString(arguments[0]);\\n var result = isPrototypeOf(SymbolPrototype, this)\\n ? new NativeSymbol(description)\\n // in Edge 13, String(Symbol(undefined)) === 'Symbol(undefined)'\\n : description === undefined ? NativeSymbol() : NativeSymbol(description);\\n if (description === '') EmptyStringDescriptionStore[result] = true;\\n return result;\\n };\\n\\n copyConstructorProperties(SymbolWrapper, NativeSymbol);\\n SymbolWrapper.prototype = SymbolPrototype;\\n SymbolPrototype.constructor = SymbolWrapper;\\n\\n var NATIVE_SYMBOL = String(NativeSymbol('test')) == 'Symbol(test)';\\n var thisSymbolValue = uncurryThis(SymbolPrototype.valueOf);\\n var symbolDescriptiveString = uncurryThis(SymbolPrototype.toString);\\n var regexp = /^Symbol\\\\((.*)\\\\)[^)]+$/;\\n var replace = uncurryThis(''.replace);\\n var stringSlice = uncurryThis(''.slice);\\n\\n defineBuiltInAccessor(SymbolPrototype, 'description', {\\n configurable: true,\\n get: function description() {\\n var symbol = thisSymbolValue(this);\\n if (hasOwn(EmptyStringDescriptionStore, symbol)) return '';\\n var string = symbolDescriptiveString(symbol);\\n var desc = NATIVE_SYMBOL ? stringSlice(string, 7, -1) : replace(string, regexp, '$1');\\n return desc === '' ? undefined : desc;\\n }\\n });\\n\\n $({ global: true, constructor: true, forced: true }, {\\n Symbol: SymbolWrapper\\n });\\n}\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.symbol.description.js?")}),"./node_modules/core-js/modules/es.typed-array.at.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar ArrayBufferViewCore = __webpack_require__(/*! ../internals/array-buffer-view-core */ \\"./node_modules/core-js/internals/array-buffer-view-core.js\\");\\nvar lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ \\"./node_modules/core-js/internals/length-of-array-like.js\\");\\nvar toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ \\"./node_modules/core-js/internals/to-integer-or-infinity.js\\");\\n\\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\\n\\n// \`%TypedArray%.prototype.at\` method\\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.at\\nexportTypedArrayMethod('at', function at(index) {\\n var O = aTypedArray(this);\\n var len = lengthOfArrayLike(O);\\n var relativeIndex = toIntegerOrInfinity(index);\\n var k = relativeIndex >= 0 ? relativeIndex : len + relativeIndex;\\n return (k < 0 || k >= len) ? undefined : O[k];\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.typed-array.at.js?")}),"./node_modules/core-js/modules/es.typed-array.fill.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar ArrayBufferViewCore = __webpack_require__(/*! ../internals/array-buffer-view-core */ \\"./node_modules/core-js/internals/array-buffer-view-core.js\\");\\nvar $fill = __webpack_require__(/*! ../internals/array-fill */ \\"./node_modules/core-js/internals/array-fill.js\\");\\nvar toBigInt = __webpack_require__(/*! ../internals/to-big-int */ \\"./node_modules/core-js/internals/to-big-int.js\\");\\nvar classof = __webpack_require__(/*! ../internals/classof */ \\"./node_modules/core-js/internals/classof.js\\");\\nvar call = __webpack_require__(/*! ../internals/function-call */ \\"./node_modules/core-js/internals/function-call.js\\");\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\n\\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\\nvar slice = uncurryThis(''.slice);\\n\\n// V8 ~ Chrome < 59, Safari < 14.1, FF < 55, Edge <=18\\nvar CONVERSION_BUG = fails(function () {\\n var count = 0;\\n // eslint-disable-next-line es/no-typed-arrays -- safe\\n new Int8Array(2).fill({ valueOf: function () { return count++; } });\\n return count !== 1;\\n});\\n\\n// \`%TypedArray%.prototype.fill\` method\\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.fill\\nexportTypedArrayMethod('fill', function fill(value /* , start, end */) {\\n var length = arguments.length;\\n aTypedArray(this);\\n var actualValue = slice(classof(this), 0, 3) === 'Big' ? toBigInt(value) : +value;\\n return call($fill, this, actualValue, length > 1 ? arguments[1] : undefined, length > 2 ? arguments[2] : undefined);\\n}, CONVERSION_BUG);\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.typed-array.fill.js?")}),"./node_modules/core-js/modules/es.typed-array.find-last-index.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar ArrayBufferViewCore = __webpack_require__(/*! ../internals/array-buffer-view-core */ \\"./node_modules/core-js/internals/array-buffer-view-core.js\\");\\nvar $findLastIndex = (__webpack_require__(/*! ../internals/array-iteration-from-last */ \\"./node_modules/core-js/internals/array-iteration-from-last.js\\").findLastIndex);\\n\\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\\n\\n// \`%TypedArray%.prototype.findLastIndex\` method\\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.findlastindex\\nexportTypedArrayMethod('findLastIndex', function findLastIndex(predicate /* , thisArg */) {\\n return $findLastIndex(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.typed-array.find-last-index.js?")}),"./node_modules/core-js/modules/es.typed-array.find-last.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar ArrayBufferViewCore = __webpack_require__(/*! ../internals/array-buffer-view-core */ \\"./node_modules/core-js/internals/array-buffer-view-core.js\\");\\nvar $findLast = (__webpack_require__(/*! ../internals/array-iteration-from-last */ \\"./node_modules/core-js/internals/array-iteration-from-last.js\\").findLast);\\n\\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\\n\\n// \`%TypedArray%.prototype.findLast\` method\\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.findlast\\nexportTypedArrayMethod('findLast', function findLast(predicate /* , thisArg */) {\\n return $findLast(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.typed-array.find-last.js?")}),"./node_modules/core-js/modules/es.typed-array.int32-array.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar createTypedArrayConstructor = __webpack_require__(/*! ../internals/typed-array-constructor */ \\"./node_modules/core-js/internals/typed-array-constructor.js\\");\\n\\n// \`Int32Array\` constructor\\n// https://tc39.es/ecma262/#sec-typedarray-objects\\ncreateTypedArrayConstructor('Int32', function (init) {\\n return function Int32Array(data, byteOffset, length) {\\n return init(this, data, byteOffset, length);\\n };\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.typed-array.int32-array.js?")}),"./node_modules/core-js/modules/es.typed-array.int8-array.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar createTypedArrayConstructor = __webpack_require__(/*! ../internals/typed-array-constructor */ \\"./node_modules/core-js/internals/typed-array-constructor.js\\");\\n\\n// \`Int8Array\` constructor\\n// https://tc39.es/ecma262/#sec-typedarray-objects\\ncreateTypedArrayConstructor('Int8', function (init) {\\n return function Int8Array(data, byteOffset, length) {\\n return init(this, data, byteOffset, length);\\n };\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.typed-array.int8-array.js?")}),"./node_modules/core-js/modules/es.typed-array.set.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar global = __webpack_require__(/*! ../internals/global */ \\"./node_modules/core-js/internals/global.js\\");\\nvar call = __webpack_require__(/*! ../internals/function-call */ \\"./node_modules/core-js/internals/function-call.js\\");\\nvar ArrayBufferViewCore = __webpack_require__(/*! ../internals/array-buffer-view-core */ \\"./node_modules/core-js/internals/array-buffer-view-core.js\\");\\nvar lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ \\"./node_modules/core-js/internals/length-of-array-like.js\\");\\nvar toOffset = __webpack_require__(/*! ../internals/to-offset */ \\"./node_modules/core-js/internals/to-offset.js\\");\\nvar toIndexedObject = __webpack_require__(/*! ../internals/to-object */ \\"./node_modules/core-js/internals/to-object.js\\");\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\n\\nvar RangeError = global.RangeError;\\nvar Int8Array = global.Int8Array;\\nvar Int8ArrayPrototype = Int8Array && Int8Array.prototype;\\nvar $set = Int8ArrayPrototype && Int8ArrayPrototype.set;\\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\\n\\nvar WORKS_WITH_OBJECTS_AND_GENERIC_ON_TYPED_ARRAYS = !fails(function () {\\n // eslint-disable-next-line es/no-typed-arrays -- required for testing\\n var array = new Uint8ClampedArray(2);\\n call($set, array, { length: 1, 0: 3 }, 1);\\n return array[1] !== 3;\\n});\\n\\n// https://bugs.chromium.org/p/v8/issues/detail?id=11294 and other\\nvar TO_OBJECT_BUG = WORKS_WITH_OBJECTS_AND_GENERIC_ON_TYPED_ARRAYS && ArrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS && fails(function () {\\n var array = new Int8Array(2);\\n array.set(1);\\n array.set('2', 1);\\n return array[0] !== 0 || array[1] !== 2;\\n});\\n\\n// \`%TypedArray%.prototype.set\` method\\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.set\\nexportTypedArrayMethod('set', function set(arrayLike /* , offset */) {\\n aTypedArray(this);\\n var offset = toOffset(arguments.length > 1 ? arguments[1] : undefined, 1);\\n var src = toIndexedObject(arrayLike);\\n if (WORKS_WITH_OBJECTS_AND_GENERIC_ON_TYPED_ARRAYS) return call($set, this, src, offset);\\n var length = this.length;\\n var len = lengthOfArrayLike(src);\\n var index = 0;\\n if (len + offset > length) throw RangeError('Wrong length');\\n while (index < len) this[offset + index] = src[index++];\\n}, !WORKS_WITH_OBJECTS_AND_GENERIC_ON_TYPED_ARRAYS || TO_OBJECT_BUG);\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.typed-array.set.js?")}),"./node_modules/core-js/modules/es.typed-array.sort.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar global = __webpack_require__(/*! ../internals/global */ \\"./node_modules/core-js/internals/global.js\\");\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this-clause */ \\"./node_modules/core-js/internals/function-uncurry-this-clause.js\\");\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\nvar aCallable = __webpack_require__(/*! ../internals/a-callable */ \\"./node_modules/core-js/internals/a-callable.js\\");\\nvar internalSort = __webpack_require__(/*! ../internals/array-sort */ \\"./node_modules/core-js/internals/array-sort.js\\");\\nvar ArrayBufferViewCore = __webpack_require__(/*! ../internals/array-buffer-view-core */ \\"./node_modules/core-js/internals/array-buffer-view-core.js\\");\\nvar FF = __webpack_require__(/*! ../internals/engine-ff-version */ \\"./node_modules/core-js/internals/engine-ff-version.js\\");\\nvar IE_OR_EDGE = __webpack_require__(/*! ../internals/engine-is-ie-or-edge */ \\"./node_modules/core-js/internals/engine-is-ie-or-edge.js\\");\\nvar V8 = __webpack_require__(/*! ../internals/engine-v8-version */ \\"./node_modules/core-js/internals/engine-v8-version.js\\");\\nvar WEBKIT = __webpack_require__(/*! ../internals/engine-webkit-version */ \\"./node_modules/core-js/internals/engine-webkit-version.js\\");\\n\\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\\nvar Uint16Array = global.Uint16Array;\\nvar nativeSort = Uint16Array && uncurryThis(Uint16Array.prototype.sort);\\n\\n// WebKit\\nvar ACCEPT_INCORRECT_ARGUMENTS = !!nativeSort && !(fails(function () {\\n nativeSort(new Uint16Array(2), null);\\n}) && fails(function () {\\n nativeSort(new Uint16Array(2), {});\\n}));\\n\\nvar STABLE_SORT = !!nativeSort && !fails(function () {\\n // feature detection can be too slow, so check engines versions\\n if (V8) return V8 < 74;\\n if (FF) return FF < 67;\\n if (IE_OR_EDGE) return true;\\n if (WEBKIT) return WEBKIT < 602;\\n\\n var array = new Uint16Array(516);\\n var expected = Array(516);\\n var index, mod;\\n\\n for (index = 0; index < 516; index++) {\\n mod = index % 4;\\n array[index] = 515 - index;\\n expected[index] = index - 2 * mod + 3;\\n }\\n\\n nativeSort(array, function (a, b) {\\n return (a / 4 | 0) - (b / 4 | 0);\\n });\\n\\n for (index = 0; index < 516; index++) {\\n if (array[index] !== expected[index]) return true;\\n }\\n});\\n\\nvar getSortCompare = function (comparefn) {\\n return function (x, y) {\\n if (comparefn !== undefined) return +comparefn(x, y) || 0;\\n // eslint-disable-next-line no-self-compare -- NaN check\\n if (y !== y) return -1;\\n // eslint-disable-next-line no-self-compare -- NaN check\\n if (x !== x) return 1;\\n if (x === 0 && y === 0) return 1 / x > 0 && 1 / y < 0 ? 1 : -1;\\n return x > y;\\n };\\n};\\n\\n// \`%TypedArray%.prototype.sort\` method\\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.sort\\nexportTypedArrayMethod('sort', function sort(comparefn) {\\n if (comparefn !== undefined) aCallable(comparefn);\\n if (STABLE_SORT) return nativeSort(this, comparefn);\\n\\n return internalSort(aTypedArray(this), getSortCompare(comparefn));\\n}, !STABLE_SORT || ACCEPT_INCORRECT_ARGUMENTS);\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.typed-array.sort.js?")}),"./node_modules/core-js/modules/es.typed-array.to-locale-string.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar global = __webpack_require__(/*! ../internals/global */ \\"./node_modules/core-js/internals/global.js\\");\\nvar apply = __webpack_require__(/*! ../internals/function-apply */ \\"./node_modules/core-js/internals/function-apply.js\\");\\nvar ArrayBufferViewCore = __webpack_require__(/*! ../internals/array-buffer-view-core */ \\"./node_modules/core-js/internals/array-buffer-view-core.js\\");\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\nvar arraySlice = __webpack_require__(/*! ../internals/array-slice */ \\"./node_modules/core-js/internals/array-slice.js\\");\\n\\nvar Int8Array = global.Int8Array;\\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\\nvar $toLocaleString = [].toLocaleString;\\n\\n// iOS Safari 6.x fails here\\nvar TO_LOCALE_STRING_BUG = !!Int8Array && fails(function () {\\n $toLocaleString.call(new Int8Array(1));\\n});\\n\\nvar FORCED = fails(function () {\\n return [1, 2].toLocaleString() != new Int8Array([1, 2]).toLocaleString();\\n}) || !fails(function () {\\n Int8Array.prototype.toLocaleString.call([1, 2]);\\n});\\n\\n// \`%TypedArray%.prototype.toLocaleString\` method\\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.tolocalestring\\nexportTypedArrayMethod('toLocaleString', function toLocaleString() {\\n return apply(\\n $toLocaleString,\\n TO_LOCALE_STRING_BUG ? arraySlice(aTypedArray(this)) : aTypedArray(this),\\n arraySlice(arguments)\\n );\\n}, FORCED);\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.typed-array.to-locale-string.js?")}),"./node_modules/core-js/modules/es.typed-array.to-reversed.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar arrayToReversed = __webpack_require__(/*! ../internals/array-to-reversed */ \\"./node_modules/core-js/internals/array-to-reversed.js\\");\\nvar ArrayBufferViewCore = __webpack_require__(/*! ../internals/array-buffer-view-core */ \\"./node_modules/core-js/internals/array-buffer-view-core.js\\");\\n\\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\\nvar getTypedArrayConstructor = ArrayBufferViewCore.getTypedArrayConstructor;\\n\\n// \`%TypedArray%.prototype.toReversed\` method\\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.toreversed\\nexportTypedArrayMethod('toReversed', function toReversed() {\\n return arrayToReversed(aTypedArray(this), getTypedArrayConstructor(this));\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.typed-array.to-reversed.js?")}),"./node_modules/core-js/modules/es.typed-array.to-sorted.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar ArrayBufferViewCore = __webpack_require__(/*! ../internals/array-buffer-view-core */ \\"./node_modules/core-js/internals/array-buffer-view-core.js\\");\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\nvar aCallable = __webpack_require__(/*! ../internals/a-callable */ \\"./node_modules/core-js/internals/a-callable.js\\");\\nvar arrayFromConstructorAndList = __webpack_require__(/*! ../internals/array-from-constructor-and-list */ \\"./node_modules/core-js/internals/array-from-constructor-and-list.js\\");\\n\\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\\nvar getTypedArrayConstructor = ArrayBufferViewCore.getTypedArrayConstructor;\\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\\nvar sort = uncurryThis(ArrayBufferViewCore.TypedArrayPrototype.sort);\\n\\n// \`%TypedArray%.prototype.toSorted\` method\\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.tosorted\\nexportTypedArrayMethod('toSorted', function toSorted(compareFn) {\\n if (compareFn !== undefined) aCallable(compareFn);\\n var O = aTypedArray(this);\\n var A = arrayFromConstructorAndList(getTypedArrayConstructor(O), O);\\n return sort(A, compareFn);\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.typed-array.to-sorted.js?")}),"./node_modules/core-js/modules/es.typed-array.uint32-array.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar createTypedArrayConstructor = __webpack_require__(/*! ../internals/typed-array-constructor */ \\"./node_modules/core-js/internals/typed-array-constructor.js\\");\\n\\n// \`Uint32Array\` constructor\\n// https://tc39.es/ecma262/#sec-typedarray-objects\\ncreateTypedArrayConstructor('Uint32', function (init) {\\n return function Uint32Array(data, byteOffset, length) {\\n return init(this, data, byteOffset, length);\\n };\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.typed-array.uint32-array.js?")}),"./node_modules/core-js/modules/es.typed-array.uint8-array.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar createTypedArrayConstructor = __webpack_require__(/*! ../internals/typed-array-constructor */ \\"./node_modules/core-js/internals/typed-array-constructor.js\\");\\n\\n// \`Uint8Array\` constructor\\n// https://tc39.es/ecma262/#sec-typedarray-objects\\ncreateTypedArrayConstructor('Uint8', function (init) {\\n return function Uint8Array(data, byteOffset, length) {\\n return init(this, data, byteOffset, length);\\n };\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.typed-array.uint8-array.js?")}),"./node_modules/core-js/modules/es.typed-array.uint8-clamped-array.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar createTypedArrayConstructor = __webpack_require__(/*! ../internals/typed-array-constructor */ \\"./node_modules/core-js/internals/typed-array-constructor.js\\");\\n\\n// \`Uint8ClampedArray\` constructor\\n// https://tc39.es/ecma262/#sec-typedarray-objects\\ncreateTypedArrayConstructor('Uint8', function (init) {\\n return function Uint8ClampedArray(data, byteOffset, length) {\\n return init(this, data, byteOffset, length);\\n };\\n}, true);\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.typed-array.uint8-clamped-array.js?")}),"./node_modules/core-js/modules/es.typed-array.with.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar arrayWith = __webpack_require__(/*! ../internals/array-with */ \\"./node_modules/core-js/internals/array-with.js\\");\\nvar ArrayBufferViewCore = __webpack_require__(/*! ../internals/array-buffer-view-core */ \\"./node_modules/core-js/internals/array-buffer-view-core.js\\");\\nvar isBigIntArray = __webpack_require__(/*! ../internals/is-big-int-array */ \\"./node_modules/core-js/internals/is-big-int-array.js\\");\\nvar toIntegerOrInfinity = __webpack_require__(/*! ../internals/to-integer-or-infinity */ \\"./node_modules/core-js/internals/to-integer-or-infinity.js\\");\\nvar toBigInt = __webpack_require__(/*! ../internals/to-big-int */ \\"./node_modules/core-js/internals/to-big-int.js\\");\\n\\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\\nvar getTypedArrayConstructor = ArrayBufferViewCore.getTypedArrayConstructor;\\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\\n\\nvar PROPER_ORDER = !!function () {\\n try {\\n // eslint-disable-next-line no-throw-literal, es/no-typed-arrays, es/no-array-prototype-with -- required for testing\\n new Int8Array(1)['with'](2, { valueOf: function () { throw 8; } });\\n } catch (error) {\\n // some early implementations, like WebKit, does not follow the final semantic\\n // https://github.com/tc39/proposal-change-array-by-copy/pull/86\\n return error === 8;\\n }\\n}();\\n\\n// \`%TypedArray%.prototype.with\` method\\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.with\\nexportTypedArrayMethod('with', { 'with': function (index, value) {\\n var O = aTypedArray(this);\\n var relativeIndex = toIntegerOrInfinity(index);\\n var actualValue = isBigIntArray(O) ? toBigInt(value) : +value;\\n return arrayWith(O, getTypedArrayConstructor(O), relativeIndex, actualValue);\\n} }['with'], !PROPER_ORDER);\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.typed-array.with.js?")}),"./node_modules/core-js/modules/es.weak-map.constructor.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar FREEZING = __webpack_require__(/*! ../internals/freezing */ \\"./node_modules/core-js/internals/freezing.js\\");\\nvar global = __webpack_require__(/*! ../internals/global */ \\"./node_modules/core-js/internals/global.js\\");\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\nvar defineBuiltIns = __webpack_require__(/*! ../internals/define-built-ins */ \\"./node_modules/core-js/internals/define-built-ins.js\\");\\nvar InternalMetadataModule = __webpack_require__(/*! ../internals/internal-metadata */ \\"./node_modules/core-js/internals/internal-metadata.js\\");\\nvar collection = __webpack_require__(/*! ../internals/collection */ \\"./node_modules/core-js/internals/collection.js\\");\\nvar collectionWeak = __webpack_require__(/*! ../internals/collection-weak */ \\"./node_modules/core-js/internals/collection-weak.js\\");\\nvar isObject = __webpack_require__(/*! ../internals/is-object */ \\"./node_modules/core-js/internals/is-object.js\\");\\nvar enforceInternalState = (__webpack_require__(/*! ../internals/internal-state */ \\"./node_modules/core-js/internals/internal-state.js\\").enforce);\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\nvar NATIVE_WEAK_MAP = __webpack_require__(/*! ../internals/weak-map-basic-detection */ \\"./node_modules/core-js/internals/weak-map-basic-detection.js\\");\\n\\nvar $Object = Object;\\n// eslint-disable-next-line es/no-array-isarray -- safe\\nvar isArray = Array.isArray;\\n// eslint-disable-next-line es/no-object-isextensible -- safe\\nvar isExtensible = $Object.isExtensible;\\n// eslint-disable-next-line es/no-object-isfrozen -- safe\\nvar isFrozen = $Object.isFrozen;\\n// eslint-disable-next-line es/no-object-issealed -- safe\\nvar isSealed = $Object.isSealed;\\n// eslint-disable-next-line es/no-object-freeze -- safe\\nvar freeze = $Object.freeze;\\n// eslint-disable-next-line es/no-object-seal -- safe\\nvar seal = $Object.seal;\\n\\nvar FROZEN = {};\\nvar SEALED = {};\\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\\nvar InternalWeakMap;\\n\\nvar wrapper = function (init) {\\n return function WeakMap() {\\n return init(this, arguments.length ? arguments[0] : undefined);\\n };\\n};\\n\\n// \`WeakMap\` constructor\\n// https://tc39.es/ecma262/#sec-weakmap-constructor\\nvar $WeakMap = collection('WeakMap', wrapper, collectionWeak);\\nvar WeakMapPrototype = $WeakMap.prototype;\\nvar nativeSet = uncurryThis(WeakMapPrototype.set);\\n\\n// Chakra Edge bug: adding frozen arrays to WeakMap unfreeze them\\nvar hasMSEdgeFreezingBug = function () {\\n return FREEZING && fails(function () {\\n var frozenArray = freeze([]);\\n nativeSet(new $WeakMap(), frozenArray, 1);\\n return !isFrozen(frozenArray);\\n });\\n};\\n\\n// IE11 WeakMap frozen keys fix\\n// We can't use feature detection because it crash some old IE builds\\n// https://github.com/zloirock/core-js/issues/485\\nif (NATIVE_WEAK_MAP) if (IS_IE11) {\\n InternalWeakMap = collectionWeak.getConstructor(wrapper, 'WeakMap', true);\\n InternalMetadataModule.enable();\\n var nativeDelete = uncurryThis(WeakMapPrototype['delete']);\\n var nativeHas = uncurryThis(WeakMapPrototype.has);\\n var nativeGet = uncurryThis(WeakMapPrototype.get);\\n defineBuiltIns(WeakMapPrototype, {\\n 'delete': function (key) {\\n if (isObject(key) && !isExtensible(key)) {\\n var state = enforceInternalState(this);\\n if (!state.frozen) state.frozen = new InternalWeakMap();\\n return nativeDelete(this, key) || state.frozen['delete'](key);\\n } return nativeDelete(this, key);\\n },\\n has: function has(key) {\\n if (isObject(key) && !isExtensible(key)) {\\n var state = enforceInternalState(this);\\n if (!state.frozen) state.frozen = new InternalWeakMap();\\n return nativeHas(this, key) || state.frozen.has(key);\\n } return nativeHas(this, key);\\n },\\n get: function get(key) {\\n if (isObject(key) && !isExtensible(key)) {\\n var state = enforceInternalState(this);\\n if (!state.frozen) state.frozen = new InternalWeakMap();\\n return nativeHas(this, key) ? nativeGet(this, key) : state.frozen.get(key);\\n } return nativeGet(this, key);\\n },\\n set: function set(key, value) {\\n if (isObject(key) && !isExtensible(key)) {\\n var state = enforceInternalState(this);\\n if (!state.frozen) state.frozen = new InternalWeakMap();\\n nativeHas(this, key) ? nativeSet(this, key, value) : state.frozen.set(key, value);\\n } else nativeSet(this, key, value);\\n return this;\\n }\\n });\\n// Chakra Edge frozen keys fix\\n} else if (hasMSEdgeFreezingBug()) {\\n defineBuiltIns(WeakMapPrototype, {\\n set: function set(key, value) {\\n var arrayIntegrityLevel;\\n if (isArray(key)) {\\n if (isFrozen(key)) arrayIntegrityLevel = FROZEN;\\n else if (isSealed(key)) arrayIntegrityLevel = SEALED;\\n }\\n nativeSet(this, key, value);\\n if (arrayIntegrityLevel == FROZEN) freeze(key);\\n if (arrayIntegrityLevel == SEALED) seal(key);\\n return this;\\n }\\n });\\n}\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.weak-map.constructor.js?")}),"./node_modules/core-js/modules/es.weak-map.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\n// TODO: Remove this module from \`core-js@4\` since it's replaced to module below\\n__webpack_require__(/*! ../modules/es.weak-map.constructor */ \\"./node_modules/core-js/modules/es.weak-map.constructor.js\\");\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/es.weak-map.js?")}),"./node_modules/core-js/modules/web.dom-collections.iterator.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar global = __webpack_require__(/*! ../internals/global */ \\"./node_modules/core-js/internals/global.js\\");\\nvar DOMIterables = __webpack_require__(/*! ../internals/dom-iterables */ \\"./node_modules/core-js/internals/dom-iterables.js\\");\\nvar DOMTokenListPrototype = __webpack_require__(/*! ../internals/dom-token-list-prototype */ \\"./node_modules/core-js/internals/dom-token-list-prototype.js\\");\\nvar ArrayIteratorMethods = __webpack_require__(/*! ../modules/es.array.iterator */ \\"./node_modules/core-js/modules/es.array.iterator.js\\");\\nvar createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ \\"./node_modules/core-js/internals/create-non-enumerable-property.js\\");\\nvar wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ \\"./node_modules/core-js/internals/well-known-symbol.js\\");\\n\\nvar ITERATOR = wellKnownSymbol('iterator');\\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\\nvar ArrayValues = ArrayIteratorMethods.values;\\n\\nvar handlePrototype = function (CollectionPrototype, COLLECTION_NAME) {\\n if (CollectionPrototype) {\\n // some Chrome versions have non-configurable methods on DOMTokenList\\n if (CollectionPrototype[ITERATOR] !== ArrayValues) try {\\n createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues);\\n } catch (error) {\\n CollectionPrototype[ITERATOR] = ArrayValues;\\n }\\n if (!CollectionPrototype[TO_STRING_TAG]) {\\n createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);\\n }\\n if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) {\\n // some Chrome versions have non-configurable methods on DOMTokenList\\n if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try {\\n createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]);\\n } catch (error) {\\n CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];\\n }\\n }\\n }\\n};\\n\\nfor (var COLLECTION_NAME in DOMIterables) {\\n handlePrototype(global[COLLECTION_NAME] && global[COLLECTION_NAME].prototype, COLLECTION_NAME);\\n}\\n\\nhandlePrototype(DOMTokenListPrototype, 'DOMTokenList');\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/web.dom-collections.iterator.js?")}),"./node_modules/core-js/modules/web.dom-exception.constructor.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar tryNodeRequire = __webpack_require__(/*! ../internals/try-node-require */ \\"./node_modules/core-js/internals/try-node-require.js\\");\\nvar getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ \\"./node_modules/core-js/internals/get-built-in.js\\");\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\nvar create = __webpack_require__(/*! ../internals/object-create */ \\"./node_modules/core-js/internals/object-create.js\\");\\nvar createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ \\"./node_modules/core-js/internals/create-property-descriptor.js\\");\\nvar defineProperty = (__webpack_require__(/*! ../internals/object-define-property */ \\"./node_modules/core-js/internals/object-define-property.js\\").f);\\nvar defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ \\"./node_modules/core-js/internals/define-built-in.js\\");\\nvar defineBuiltInAccessor = __webpack_require__(/*! ../internals/define-built-in-accessor */ \\"./node_modules/core-js/internals/define-built-in-accessor.js\\");\\nvar hasOwn = __webpack_require__(/*! ../internals/has-own-property */ \\"./node_modules/core-js/internals/has-own-property.js\\");\\nvar anInstance = __webpack_require__(/*! ../internals/an-instance */ \\"./node_modules/core-js/internals/an-instance.js\\");\\nvar anObject = __webpack_require__(/*! ../internals/an-object */ \\"./node_modules/core-js/internals/an-object.js\\");\\nvar errorToString = __webpack_require__(/*! ../internals/error-to-string */ \\"./node_modules/core-js/internals/error-to-string.js\\");\\nvar normalizeStringArgument = __webpack_require__(/*! ../internals/normalize-string-argument */ \\"./node_modules/core-js/internals/normalize-string-argument.js\\");\\nvar DOMExceptionConstants = __webpack_require__(/*! ../internals/dom-exception-constants */ \\"./node_modules/core-js/internals/dom-exception-constants.js\\");\\nvar clearErrorStack = __webpack_require__(/*! ../internals/error-stack-clear */ \\"./node_modules/core-js/internals/error-stack-clear.js\\");\\nvar InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ \\"./node_modules/core-js/internals/internal-state.js\\");\\nvar DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ \\"./node_modules/core-js/internals/descriptors.js\\");\\nvar IS_PURE = __webpack_require__(/*! ../internals/is-pure */ \\"./node_modules/core-js/internals/is-pure.js\\");\\n\\nvar DOM_EXCEPTION = 'DOMException';\\nvar DATA_CLONE_ERR = 'DATA_CLONE_ERR';\\nvar Error = getBuiltIn('Error');\\n// NodeJS < 17.0 does not expose \`DOMException\` to global\\nvar NativeDOMException = getBuiltIn(DOM_EXCEPTION) || (function () {\\n try {\\n // NodeJS < 15.0 does not expose \`MessageChannel\` to global\\n var MessageChannel = getBuiltIn('MessageChannel') || tryNodeRequire('worker_threads').MessageChannel;\\n // eslint-disable-next-line es/no-weak-map, unicorn/require-post-message-target-origin -- safe\\n new MessageChannel().port1.postMessage(new WeakMap());\\n } catch (error) {\\n if (error.name == DATA_CLONE_ERR && error.code == 25) return error.constructor;\\n }\\n})();\\nvar NativeDOMExceptionPrototype = NativeDOMException && NativeDOMException.prototype;\\nvar ErrorPrototype = Error.prototype;\\nvar setInternalState = InternalStateModule.set;\\nvar getInternalState = InternalStateModule.getterFor(DOM_EXCEPTION);\\nvar HAS_STACK = 'stack' in Error(DOM_EXCEPTION);\\n\\nvar codeFor = function (name) {\\n return hasOwn(DOMExceptionConstants, name) && DOMExceptionConstants[name].m ? DOMExceptionConstants[name].c : 0;\\n};\\n\\nvar $DOMException = function DOMException() {\\n anInstance(this, DOMExceptionPrototype);\\n var argumentsLength = arguments.length;\\n var message = normalizeStringArgument(argumentsLength < 1 ? undefined : arguments[0]);\\n var name = normalizeStringArgument(argumentsLength < 2 ? undefined : arguments[1], 'Error');\\n var code = codeFor(name);\\n setInternalState(this, {\\n type: DOM_EXCEPTION,\\n name: name,\\n message: message,\\n code: code\\n });\\n if (!DESCRIPTORS) {\\n this.name = name;\\n this.message = message;\\n this.code = code;\\n }\\n if (HAS_STACK) {\\n var error = Error(message);\\n error.name = DOM_EXCEPTION;\\n defineProperty(this, 'stack', createPropertyDescriptor(1, clearErrorStack(error.stack, 1)));\\n }\\n};\\n\\nvar DOMExceptionPrototype = $DOMException.prototype = create(ErrorPrototype);\\n\\nvar createGetterDescriptor = function (get) {\\n return { enumerable: true, configurable: true, get: get };\\n};\\n\\nvar getterFor = function (key) {\\n return createGetterDescriptor(function () {\\n return getInternalState(this)[key];\\n });\\n};\\n\\nif (DESCRIPTORS) {\\n // \`DOMException.prototype.code\` getter\\n defineBuiltInAccessor(DOMExceptionPrototype, 'code', getterFor('code'));\\n // \`DOMException.prototype.message\` getter\\n defineBuiltInAccessor(DOMExceptionPrototype, 'message', getterFor('message'));\\n // \`DOMException.prototype.name\` getter\\n defineBuiltInAccessor(DOMExceptionPrototype, 'name', getterFor('name'));\\n}\\n\\ndefineProperty(DOMExceptionPrototype, 'constructor', createPropertyDescriptor(1, $DOMException));\\n\\n// FF36- DOMException is a function, but can't be constructed\\nvar INCORRECT_CONSTRUCTOR = fails(function () {\\n return !(new NativeDOMException() instanceof Error);\\n});\\n\\n// Safari 10.1 / Chrome 32- / IE8- DOMException.prototype.toString bugs\\nvar INCORRECT_TO_STRING = INCORRECT_CONSTRUCTOR || fails(function () {\\n return ErrorPrototype.toString !== errorToString || String(new NativeDOMException(1, 2)) !== '2: 1';\\n});\\n\\n// Deno 1.6.3- DOMException.prototype.code just missed\\nvar INCORRECT_CODE = INCORRECT_CONSTRUCTOR || fails(function () {\\n return new NativeDOMException(1, 'DataCloneError').code !== 25;\\n});\\n\\n// Deno 1.6.3- DOMException constants just missed\\nvar MISSED_CONSTANTS = INCORRECT_CONSTRUCTOR\\n || NativeDOMException[DATA_CLONE_ERR] !== 25\\n || NativeDOMExceptionPrototype[DATA_CLONE_ERR] !== 25;\\n\\nvar FORCED_CONSTRUCTOR = IS_PURE ? INCORRECT_TO_STRING || INCORRECT_CODE || MISSED_CONSTANTS : INCORRECT_CONSTRUCTOR;\\n\\n// \`DOMException\` constructor\\n// https://webidl.spec.whatwg.org/#idl-DOMException\\n$({ global: true, constructor: true, forced: FORCED_CONSTRUCTOR }, {\\n DOMException: FORCED_CONSTRUCTOR ? $DOMException : NativeDOMException\\n});\\n\\nvar PolyfilledDOMException = getBuiltIn(DOM_EXCEPTION);\\nvar PolyfilledDOMExceptionPrototype = PolyfilledDOMException.prototype;\\n\\nif (INCORRECT_TO_STRING && (IS_PURE || NativeDOMException === PolyfilledDOMException)) {\\n defineBuiltIn(PolyfilledDOMExceptionPrototype, 'toString', errorToString);\\n}\\n\\nif (INCORRECT_CODE && DESCRIPTORS && NativeDOMException === PolyfilledDOMException) {\\n defineBuiltInAccessor(PolyfilledDOMExceptionPrototype, 'code', createGetterDescriptor(function () {\\n return codeFor(anObject(this).name);\\n }));\\n}\\n\\n// \`DOMException\` constants\\nfor (var key in DOMExceptionConstants) if (hasOwn(DOMExceptionConstants, key)) {\\n var constant = DOMExceptionConstants[key];\\n var constantName = constant.s;\\n var descriptor = createPropertyDescriptor(6, constant.c);\\n if (!hasOwn(PolyfilledDOMException, constantName)) {\\n defineProperty(PolyfilledDOMException, constantName, descriptor);\\n }\\n if (!hasOwn(PolyfilledDOMExceptionPrototype, constantName)) {\\n defineProperty(PolyfilledDOMExceptionPrototype, constantName, descriptor);\\n }\\n}\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/web.dom-exception.constructor.js?")}),"./node_modules/core-js/modules/web.dom-exception.stack.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar global = __webpack_require__(/*! ../internals/global */ \\"./node_modules/core-js/internals/global.js\\");\\nvar getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ \\"./node_modules/core-js/internals/get-built-in.js\\");\\nvar createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ \\"./node_modules/core-js/internals/create-property-descriptor.js\\");\\nvar defineProperty = (__webpack_require__(/*! ../internals/object-define-property */ \\"./node_modules/core-js/internals/object-define-property.js\\").f);\\nvar hasOwn = __webpack_require__(/*! ../internals/has-own-property */ \\"./node_modules/core-js/internals/has-own-property.js\\");\\nvar anInstance = __webpack_require__(/*! ../internals/an-instance */ \\"./node_modules/core-js/internals/an-instance.js\\");\\nvar inheritIfRequired = __webpack_require__(/*! ../internals/inherit-if-required */ \\"./node_modules/core-js/internals/inherit-if-required.js\\");\\nvar normalizeStringArgument = __webpack_require__(/*! ../internals/normalize-string-argument */ \\"./node_modules/core-js/internals/normalize-string-argument.js\\");\\nvar DOMExceptionConstants = __webpack_require__(/*! ../internals/dom-exception-constants */ \\"./node_modules/core-js/internals/dom-exception-constants.js\\");\\nvar clearErrorStack = __webpack_require__(/*! ../internals/error-stack-clear */ \\"./node_modules/core-js/internals/error-stack-clear.js\\");\\nvar DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ \\"./node_modules/core-js/internals/descriptors.js\\");\\nvar IS_PURE = __webpack_require__(/*! ../internals/is-pure */ \\"./node_modules/core-js/internals/is-pure.js\\");\\n\\nvar DOM_EXCEPTION = 'DOMException';\\nvar Error = getBuiltIn('Error');\\nvar NativeDOMException = getBuiltIn(DOM_EXCEPTION);\\n\\nvar $DOMException = function DOMException() {\\n anInstance(this, DOMExceptionPrototype);\\n var argumentsLength = arguments.length;\\n var message = normalizeStringArgument(argumentsLength < 1 ? undefined : arguments[0]);\\n var name = normalizeStringArgument(argumentsLength < 2 ? undefined : arguments[1], 'Error');\\n var that = new NativeDOMException(message, name);\\n var error = Error(message);\\n error.name = DOM_EXCEPTION;\\n defineProperty(that, 'stack', createPropertyDescriptor(1, clearErrorStack(error.stack, 1)));\\n inheritIfRequired(that, this, $DOMException);\\n return that;\\n};\\n\\nvar DOMExceptionPrototype = $DOMException.prototype = NativeDOMException.prototype;\\n\\nvar ERROR_HAS_STACK = 'stack' in Error(DOM_EXCEPTION);\\nvar DOM_EXCEPTION_HAS_STACK = 'stack' in new NativeDOMException(1, 2);\\n\\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\\nvar descriptor = NativeDOMException && DESCRIPTORS && Object.getOwnPropertyDescriptor(global, DOM_EXCEPTION);\\n\\n// Bun ~ 0.1.1 DOMException have incorrect descriptor and we can't redefine it\\n// https://github.com/Jarred-Sumner/bun/issues/399\\nvar BUGGY_DESCRIPTOR = !!descriptor && !(descriptor.writable && descriptor.configurable);\\n\\nvar FORCED_CONSTRUCTOR = ERROR_HAS_STACK && !BUGGY_DESCRIPTOR && !DOM_EXCEPTION_HAS_STACK;\\n\\n// \`DOMException\` constructor patch for \`.stack\` where it's required\\n// https://webidl.spec.whatwg.org/#es-DOMException-specialness\\n$({ global: true, constructor: true, forced: IS_PURE || FORCED_CONSTRUCTOR }, { // TODO: fix export logic\\n DOMException: FORCED_CONSTRUCTOR ? $DOMException : NativeDOMException\\n});\\n\\nvar PolyfilledDOMException = getBuiltIn(DOM_EXCEPTION);\\nvar PolyfilledDOMExceptionPrototype = PolyfilledDOMException.prototype;\\n\\nif (PolyfilledDOMExceptionPrototype.constructor !== PolyfilledDOMException) {\\n if (!IS_PURE) {\\n defineProperty(PolyfilledDOMExceptionPrototype, 'constructor', createPropertyDescriptor(1, PolyfilledDOMException));\\n }\\n\\n for (var key in DOMExceptionConstants) if (hasOwn(DOMExceptionConstants, key)) {\\n var constant = DOMExceptionConstants[key];\\n var constantName = constant.s;\\n if (!hasOwn(PolyfilledDOMException, constantName)) {\\n defineProperty(PolyfilledDOMException, constantName, createPropertyDescriptor(6, constant.c));\\n }\\n }\\n}\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/web.dom-exception.stack.js?")}),"./node_modules/core-js/modules/web.dom-exception.to-string-tag.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ \\"./node_modules/core-js/internals/get-built-in.js\\");\\nvar setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ \\"./node_modules/core-js/internals/set-to-string-tag.js\\");\\n\\nvar DOM_EXCEPTION = 'DOMException';\\n\\n// \`DOMException.prototype[@@toStringTag]\` property\\nsetToStringTag(getBuiltIn(DOM_EXCEPTION), DOM_EXCEPTION);\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/web.dom-exception.to-string-tag.js?")}),"./node_modules/core-js/modules/web.self.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar global = __webpack_require__(/*! ../internals/global */ \\"./node_modules/core-js/internals/global.js\\");\\nvar defineBuiltInAccessor = __webpack_require__(/*! ../internals/define-built-in-accessor */ \\"./node_modules/core-js/internals/define-built-in-accessor.js\\");\\nvar DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ \\"./node_modules/core-js/internals/descriptors.js\\");\\n\\nvar $TypeError = TypeError;\\n// eslint-disable-next-line es/no-object-defineproperty -- safe\\nvar defineProperty = Object.defineProperty;\\nvar INCORRECT_VALUE = global.self !== global;\\n\\n// \`self\` getter\\n// https://html.spec.whatwg.org/multipage/window-object.html#dom-self\\ntry {\\n if (DESCRIPTORS) {\\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\\n var descriptor = Object.getOwnPropertyDescriptor(global, 'self');\\n // some engines have \`self\`, but with incorrect descriptor\\n // https://github.com/denoland/deno/issues/15765\\n if (INCORRECT_VALUE || !descriptor || !descriptor.get || !descriptor.enumerable) {\\n defineBuiltInAccessor(global, 'self', {\\n get: function self() {\\n return global;\\n },\\n set: function self(value) {\\n if (this !== global) throw $TypeError('Illegal invocation');\\n defineProperty(global, 'self', {\\n value: value,\\n writable: true,\\n configurable: true,\\n enumerable: true\\n });\\n },\\n configurable: true,\\n enumerable: true\\n });\\n }\\n } else $({ global: true, simple: true, forced: INCORRECT_VALUE }, {\\n self: global\\n });\\n} catch (error) { /* empty */ }\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/web.self.js?")}),"./node_modules/core-js/modules/web.structured-clone.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar IS_PURE = __webpack_require__(/*! ../internals/is-pure */ \\"./node_modules/core-js/internals/is-pure.js\\");\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar global = __webpack_require__(/*! ../internals/global */ \\"./node_modules/core-js/internals/global.js\\");\\nvar getBuiltin = __webpack_require__(/*! ../internals/get-built-in */ \\"./node_modules/core-js/internals/get-built-in.js\\");\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\nvar fails = __webpack_require__(/*! ../internals/fails */ \\"./node_modules/core-js/internals/fails.js\\");\\nvar uid = __webpack_require__(/*! ../internals/uid */ \\"./node_modules/core-js/internals/uid.js\\");\\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \\"./node_modules/core-js/internals/is-callable.js\\");\\nvar isConstructor = __webpack_require__(/*! ../internals/is-constructor */ \\"./node_modules/core-js/internals/is-constructor.js\\");\\nvar isNullOrUndefined = __webpack_require__(/*! ../internals/is-null-or-undefined */ \\"./node_modules/core-js/internals/is-null-or-undefined.js\\");\\nvar isObject = __webpack_require__(/*! ../internals/is-object */ \\"./node_modules/core-js/internals/is-object.js\\");\\nvar isSymbol = __webpack_require__(/*! ../internals/is-symbol */ \\"./node_modules/core-js/internals/is-symbol.js\\");\\nvar iterate = __webpack_require__(/*! ../internals/iterate */ \\"./node_modules/core-js/internals/iterate.js\\");\\nvar anObject = __webpack_require__(/*! ../internals/an-object */ \\"./node_modules/core-js/internals/an-object.js\\");\\nvar classof = __webpack_require__(/*! ../internals/classof */ \\"./node_modules/core-js/internals/classof.js\\");\\nvar hasOwn = __webpack_require__(/*! ../internals/has-own-property */ \\"./node_modules/core-js/internals/has-own-property.js\\");\\nvar createProperty = __webpack_require__(/*! ../internals/create-property */ \\"./node_modules/core-js/internals/create-property.js\\");\\nvar createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ \\"./node_modules/core-js/internals/create-non-enumerable-property.js\\");\\nvar lengthOfArrayLike = __webpack_require__(/*! ../internals/length-of-array-like */ \\"./node_modules/core-js/internals/length-of-array-like.js\\");\\nvar validateArgumentsLength = __webpack_require__(/*! ../internals/validate-arguments-length */ \\"./node_modules/core-js/internals/validate-arguments-length.js\\");\\nvar getRegExpFlags = __webpack_require__(/*! ../internals/regexp-get-flags */ \\"./node_modules/core-js/internals/regexp-get-flags.js\\");\\nvar MapHelpers = __webpack_require__(/*! ../internals/map-helpers */ \\"./node_modules/core-js/internals/map-helpers.js\\");\\nvar SetHelpers = __webpack_require__(/*! ../internals/set-helpers */ \\"./node_modules/core-js/internals/set-helpers.js\\");\\nvar ERROR_STACK_INSTALLABLE = __webpack_require__(/*! ../internals/error-stack-installable */ \\"./node_modules/core-js/internals/error-stack-installable.js\\");\\nvar PROPER_TRANSFER = __webpack_require__(/*! ../internals/structured-clone-proper-transfer */ \\"./node_modules/core-js/internals/structured-clone-proper-transfer.js\\");\\n\\nvar Object = global.Object;\\nvar Array = global.Array;\\nvar Date = global.Date;\\nvar Error = global.Error;\\nvar EvalError = global.EvalError;\\nvar RangeError = global.RangeError;\\nvar ReferenceError = global.ReferenceError;\\nvar SyntaxError = global.SyntaxError;\\nvar TypeError = global.TypeError;\\nvar URIError = global.URIError;\\nvar PerformanceMark = global.PerformanceMark;\\nvar WebAssembly = global.WebAssembly;\\nvar CompileError = WebAssembly && WebAssembly.CompileError || Error;\\nvar LinkError = WebAssembly && WebAssembly.LinkError || Error;\\nvar RuntimeError = WebAssembly && WebAssembly.RuntimeError || Error;\\nvar DOMException = getBuiltin('DOMException');\\nvar Map = MapHelpers.Map;\\nvar mapHas = MapHelpers.has;\\nvar mapGet = MapHelpers.get;\\nvar mapSet = MapHelpers.set;\\nvar Set = SetHelpers.Set;\\nvar setAdd = SetHelpers.add;\\nvar objectKeys = getBuiltin('Object', 'keys');\\nvar push = uncurryThis([].push);\\nvar thisBooleanValue = uncurryThis(true.valueOf);\\nvar thisNumberValue = uncurryThis(1.0.valueOf);\\nvar thisStringValue = uncurryThis(''.valueOf);\\nvar thisTimeValue = uncurryThis(Date.prototype.getTime);\\nvar PERFORMANCE_MARK = uid('structuredClone');\\nvar DATA_CLONE_ERROR = 'DataCloneError';\\nvar TRANSFERRING = 'Transferring';\\n\\nvar checkBasicSemantic = function (structuredCloneImplementation) {\\n return !fails(function () {\\n var set1 = new global.Set([7]);\\n var set2 = structuredCloneImplementation(set1);\\n var number = structuredCloneImplementation(Object(7));\\n return set2 == set1 || !set2.has(7) || typeof number != 'object' || number != 7;\\n }) && structuredCloneImplementation;\\n};\\n\\nvar checkErrorsCloning = function (structuredCloneImplementation, $Error) {\\n return !fails(function () {\\n var error = new $Error();\\n var test = structuredCloneImplementation({ a: error, b: error });\\n return !(test && test.a === test.b && test.a instanceof $Error && test.a.stack === error.stack);\\n });\\n};\\n\\n// https://github.com/whatwg/html/pull/5749\\nvar checkNewErrorsCloningSemantic = function (structuredCloneImplementation) {\\n return !fails(function () {\\n var test = structuredCloneImplementation(new global.AggregateError([1], PERFORMANCE_MARK, { cause: 3 }));\\n return test.name != 'AggregateError' || test.errors[0] != 1 || test.message != PERFORMANCE_MARK || test.cause != 3;\\n });\\n};\\n\\n// FF94+, Safari 15.4+, Chrome 98+, NodeJS 17.0+, Deno 1.13+\\n// FF<103 and Safari implementations can't clone errors\\n// https://bugzilla.mozilla.org/show_bug.cgi?id=1556604\\n// FF103 can clone errors, but \`.stack\` of clone is an empty string\\n// https://bugzilla.mozilla.org/show_bug.cgi?id=1778762\\n// FF104+ fixed it on usual errors, but not on DOMExceptions\\n// https://bugzilla.mozilla.org/show_bug.cgi?id=1777321\\n// Chrome <102 returns \`null\` if cloned object contains multiple references to one error\\n// https://bugs.chromium.org/p/v8/issues/detail?id=12542\\n// NodeJS implementation can't clone DOMExceptions\\n// https://github.com/nodejs/node/issues/41038\\n// only FF103+ supports new (html/5749) error cloning semantic\\nvar nativeStructuredClone = global.structuredClone;\\n\\nvar FORCED_REPLACEMENT = IS_PURE\\n || !checkErrorsCloning(nativeStructuredClone, Error)\\n || !checkErrorsCloning(nativeStructuredClone, DOMException)\\n || !checkNewErrorsCloningSemantic(nativeStructuredClone);\\n\\n// Chrome 82+, Safari 14.1+, Deno 1.11+\\n// Chrome 78-81 implementation swaps \`.name\` and \`.message\` of cloned \`DOMException\`\\n// Chrome returns \`null\` if cloned object contains multiple references to one error\\n// Safari 14.1 implementation doesn't clone some \`RegExp\` flags, so requires a workaround\\n// Safari implementation can't clone errors\\n// Deno 1.2-1.10 implementations too naive\\n// NodeJS 16.0+ does not have \`PerformanceMark\` constructor\\n// NodeJS <17.2 structured cloning implementation from \`performance.mark\` is too naive\\n// and can't clone, for example, \`RegExp\` or some boxed primitives\\n// https://github.com/nodejs/node/issues/40840\\n// no one of those implementations supports new (html/5749) error cloning semantic\\nvar structuredCloneFromMark = !nativeStructuredClone && checkBasicSemantic(function (value) {\\n return new PerformanceMark(PERFORMANCE_MARK, { detail: value }).detail;\\n});\\n\\nvar nativeRestrictedStructuredClone = checkBasicSemantic(nativeStructuredClone) || structuredCloneFromMark;\\n\\nvar throwUncloneable = function (type) {\\n throw new DOMException('Uncloneable type: ' + type, DATA_CLONE_ERROR);\\n};\\n\\nvar throwUnpolyfillable = function (type, action) {\\n throw new DOMException((action || 'Cloning') + ' of ' + type + ' cannot be properly polyfilled in this engine', DATA_CLONE_ERROR);\\n};\\n\\nvar tryNativeRestrictedStructuredClone = function (value, type) {\\n if (!nativeRestrictedStructuredClone) throwUnpolyfillable(type);\\n return nativeRestrictedStructuredClone(value);\\n};\\n\\nvar createDataTransfer = function () {\\n var dataTransfer;\\n try {\\n dataTransfer = new global.DataTransfer();\\n } catch (error) {\\n try {\\n dataTransfer = new global.ClipboardEvent('').clipboardData;\\n } catch (error2) { /* empty */ }\\n }\\n return dataTransfer && dataTransfer.items && dataTransfer.files ? dataTransfer : null;\\n};\\n\\nvar cloneBuffer = function (value, map, $type) {\\n if (mapHas(map, value)) return mapGet(map, value);\\n\\n var type = $type || classof(value);\\n var clone, length, options, source, target, i;\\n\\n if (type === 'SharedArrayBuffer') {\\n if (nativeRestrictedStructuredClone) clone = nativeRestrictedStructuredClone(value);\\n // SharedArrayBuffer should use shared memory, we can't polyfill it, so return the original\\n else clone = value;\\n } else {\\n var DataView = global.DataView;\\n\\n // \`ArrayBuffer#slice\` is not available in IE10\\n // \`ArrayBuffer#slice\` and \`DataView\` are not available in old FF\\n if (!DataView && typeof value.slice != 'function') throwUnpolyfillable('ArrayBuffer');\\n // detached buffers throws in \`DataView\` and \`.slice\`\\n try {\\n if (typeof value.slice == 'function' && !value.resizable) {\\n clone = value.slice(0);\\n } else {\\n length = value.byteLength;\\n options = 'maxByteLength' in value ? { maxByteLength: value.maxByteLength } : undefined;\\n clone = new ArrayBuffer(length, options);\\n source = new DataView(value);\\n target = new DataView(clone);\\n for (i = 0; i < length; i++) {\\n target.setUint8(i, source.getUint8(i));\\n }\\n }\\n } catch (error) {\\n throw new DOMException('ArrayBuffer is detached', DATA_CLONE_ERROR);\\n }\\n }\\n\\n mapSet(map, value, clone);\\n\\n return clone;\\n};\\n\\nvar cloneView = function (value, type, offset, length, map) {\\n var C = global[type];\\n // in some old engines like Safari 9, typeof C is 'object'\\n // on Uint8ClampedArray or some other constructors\\n if (!isObject(C)) throwUnpolyfillable(type);\\n return new C(cloneBuffer(value.buffer, map), offset, length);\\n};\\n\\nvar Placeholder = function (object, type, metadata) {\\n this.object = object;\\n this.type = type;\\n this.metadata = metadata;\\n};\\n\\nvar structuredCloneInternal = function (value, map, transferredBuffers) {\\n if (isSymbol(value)) throwUncloneable('Symbol');\\n if (!isObject(value)) return value;\\n // effectively preserves circular references\\n if (map) {\\n if (mapHas(map, value)) return mapGet(map, value);\\n } else map = new Map();\\n\\n var type = classof(value);\\n var C, name, cloned, dataTransfer, i, length, keys, key;\\n\\n switch (type) {\\n case 'Array':\\n cloned = Array(lengthOfArrayLike(value));\\n break;\\n case 'Object':\\n cloned = {};\\n break;\\n case 'Map':\\n cloned = new Map();\\n break;\\n case 'Set':\\n cloned = new Set();\\n break;\\n case 'RegExp':\\n // in this block because of a Safari 14.1 bug\\n // old FF does not clone regexes passed to the constructor, so get the source and flags directly\\n cloned = new RegExp(value.source, getRegExpFlags(value));\\n break;\\n case 'Error':\\n name = value.name;\\n switch (name) {\\n case 'AggregateError':\\n cloned = getBuiltin('AggregateError')([]);\\n break;\\n case 'EvalError':\\n cloned = EvalError();\\n break;\\n case 'RangeError':\\n cloned = RangeError();\\n break;\\n case 'ReferenceError':\\n cloned = ReferenceError();\\n break;\\n case 'SyntaxError':\\n cloned = SyntaxError();\\n break;\\n case 'TypeError':\\n cloned = TypeError();\\n break;\\n case 'URIError':\\n cloned = URIError();\\n break;\\n case 'CompileError':\\n cloned = CompileError();\\n break;\\n case 'LinkError':\\n cloned = LinkError();\\n break;\\n case 'RuntimeError':\\n cloned = RuntimeError();\\n break;\\n default:\\n cloned = Error();\\n }\\n break;\\n case 'DOMException':\\n cloned = new DOMException(value.message, value.name);\\n break;\\n case 'ArrayBuffer':\\n case 'SharedArrayBuffer':\\n cloned = transferredBuffers\\n ? new Placeholder(value, type)\\n : cloneBuffer(value, map, type);\\n break;\\n case 'DataView':\\n case 'Int8Array':\\n case 'Uint8Array':\\n case 'Uint8ClampedArray':\\n case 'Int16Array':\\n case 'Uint16Array':\\n case 'Int32Array':\\n case 'Uint32Array':\\n case 'Float16Array':\\n case 'Float32Array':\\n case 'Float64Array':\\n case 'BigInt64Array':\\n case 'BigUint64Array':\\n length = type === 'DataView' ? value.byteLength : value.length;\\n cloned = transferredBuffers\\n ? new Placeholder(value, type, { offset: value.byteOffset, length: length })\\n : cloneView(value, type, value.byteOffset, length, map);\\n break;\\n case 'DOMQuad':\\n try {\\n cloned = new DOMQuad(\\n structuredCloneInternal(value.p1, map, transferredBuffers),\\n structuredCloneInternal(value.p2, map, transferredBuffers),\\n structuredCloneInternal(value.p3, map, transferredBuffers),\\n structuredCloneInternal(value.p4, map, transferredBuffers)\\n );\\n } catch (error) {\\n cloned = tryNativeRestrictedStructuredClone(value, type);\\n }\\n break;\\n case 'File':\\n if (nativeRestrictedStructuredClone) try {\\n cloned = nativeRestrictedStructuredClone(value);\\n // NodeJS 20.0.0 bug, https://github.com/nodejs/node/issues/47612\\n if (classof(cloned) !== type) cloned = undefined;\\n } catch (error) { /* empty */ }\\n if (!cloned) try {\\n cloned = new File([value], value.name, value);\\n } catch (error) { /* empty */ }\\n if (!cloned) throwUnpolyfillable(type);\\n break;\\n case 'FileList':\\n dataTransfer = createDataTransfer();\\n if (dataTransfer) {\\n for (i = 0, length = lengthOfArrayLike(value); i < length; i++) {\\n dataTransfer.items.add(structuredCloneInternal(value[i], map, transferredBuffers));\\n }\\n cloned = dataTransfer.files;\\n } else cloned = tryNativeRestrictedStructuredClone(value, type);\\n break;\\n case 'ImageData':\\n // Safari 9 ImageData is a constructor, but typeof ImageData is 'object'\\n try {\\n cloned = new ImageData(\\n structuredCloneInternal(value.data, map, transferredBuffers),\\n value.width,\\n value.height,\\n { colorSpace: value.colorSpace }\\n );\\n } catch (error) {\\n cloned = tryNativeRestrictedStructuredClone(value, type);\\n } break;\\n default:\\n if (nativeRestrictedStructuredClone) {\\n cloned = nativeRestrictedStructuredClone(value);\\n } else switch (type) {\\n case 'BigInt':\\n // can be a 3rd party polyfill\\n cloned = Object(value.valueOf());\\n break;\\n case 'Boolean':\\n cloned = Object(thisBooleanValue(value));\\n break;\\n case 'Number':\\n cloned = Object(thisNumberValue(value));\\n break;\\n case 'String':\\n cloned = Object(thisStringValue(value));\\n break;\\n case 'Date':\\n cloned = new Date(thisTimeValue(value));\\n break;\\n case 'Blob':\\n try {\\n cloned = value.slice(0, value.size, value.type);\\n } catch (error) {\\n throwUnpolyfillable(type);\\n } break;\\n case 'DOMPoint':\\n case 'DOMPointReadOnly':\\n C = global[type];\\n try {\\n cloned = C.fromPoint\\n ? C.fromPoint(value)\\n : new C(value.x, value.y, value.z, value.w);\\n } catch (error) {\\n throwUnpolyfillable(type);\\n } break;\\n case 'DOMRect':\\n case 'DOMRectReadOnly':\\n C = global[type];\\n try {\\n cloned = C.fromRect\\n ? C.fromRect(value)\\n : new C(value.x, value.y, value.width, value.height);\\n } catch (error) {\\n throwUnpolyfillable(type);\\n } break;\\n case 'DOMMatrix':\\n case 'DOMMatrixReadOnly':\\n C = global[type];\\n try {\\n cloned = C.fromMatrix\\n ? C.fromMatrix(value)\\n : new C(value);\\n } catch (error) {\\n throwUnpolyfillable(type);\\n } break;\\n case 'AudioData':\\n case 'VideoFrame':\\n if (!isCallable(value.clone)) throwUnpolyfillable(type);\\n try {\\n cloned = value.clone();\\n } catch (error) {\\n throwUncloneable(type);\\n } break;\\n case 'CropTarget':\\n case 'CryptoKey':\\n case 'FileSystemDirectoryHandle':\\n case 'FileSystemFileHandle':\\n case 'FileSystemHandle':\\n case 'GPUCompilationInfo':\\n case 'GPUCompilationMessage':\\n case 'ImageBitmap':\\n case 'RTCCertificate':\\n case 'WebAssembly.Module':\\n throwUnpolyfillable(type);\\n // break omitted\\n default:\\n throwUncloneable(type);\\n }\\n }\\n\\n mapSet(map, value, cloned);\\n\\n switch (type) {\\n case 'Array':\\n case 'Object':\\n keys = objectKeys(value);\\n for (i = 0, length = lengthOfArrayLike(keys); i < length; i++) {\\n key = keys[i];\\n createProperty(cloned, key, structuredCloneInternal(value[key], map, transferredBuffers));\\n } break;\\n case 'Map':\\n value.forEach(function (v, k) {\\n mapSet(cloned, structuredCloneInternal(k, map, transferredBuffers), structuredCloneInternal(v, map, transferredBuffers));\\n });\\n break;\\n case 'Set':\\n value.forEach(function (v) {\\n setAdd(cloned, structuredCloneInternal(v, map, transferredBuffers));\\n });\\n break;\\n case 'Error':\\n createNonEnumerableProperty(cloned, 'message', structuredCloneInternal(value.message, map, transferredBuffers));\\n if (hasOwn(value, 'cause')) {\\n createNonEnumerableProperty(cloned, 'cause', structuredCloneInternal(value.cause, map, transferredBuffers));\\n }\\n if (name == 'AggregateError') {\\n cloned.errors = structuredCloneInternal(value.errors, map, transferredBuffers);\\n } // break omitted\\n case 'DOMException':\\n if (ERROR_STACK_INSTALLABLE) {\\n createNonEnumerableProperty(cloned, 'stack', structuredCloneInternal(value.stack, map, transferredBuffers));\\n }\\n }\\n\\n return cloned;\\n};\\n\\nvar replacePlaceholders = function (value, map) {\\n if (!isObject(value)) return value;\\n if (mapHas(map, value)) return mapGet(map, value);\\n\\n var type, object, metadata, i, length, keys, key, replacement;\\n\\n if (value instanceof Placeholder) {\\n type = value.type;\\n object = value.object;\\n\\n switch (type) {\\n case 'ArrayBuffer':\\n case 'SharedArrayBuffer':\\n replacement = cloneBuffer(object, map, type);\\n break;\\n case 'DataView':\\n case 'Int8Array':\\n case 'Uint8Array':\\n case 'Uint8ClampedArray':\\n case 'Int16Array':\\n case 'Uint16Array':\\n case 'Int32Array':\\n case 'Uint32Array':\\n case 'Float16Array':\\n case 'Float32Array':\\n case 'Float64Array':\\n case 'BigInt64Array':\\n case 'BigUint64Array':\\n metadata = value.metadata;\\n replacement = cloneView(object, type, metadata.offset, metadata.length, map);\\n }\\n } else switch (classof(value)) {\\n case 'Array':\\n case 'Object':\\n keys = objectKeys(value);\\n for (i = 0, length = lengthOfArrayLike(keys); i < length; i++) {\\n key = keys[i];\\n value[key] = replacePlaceholders(value[key], map);\\n } break;\\n case 'Map':\\n replacement = new Map();\\n value.forEach(function (v, k) {\\n mapSet(replacement, replacePlaceholders(k, map), replacePlaceholders(v, map));\\n });\\n break;\\n case 'Set':\\n replacement = new Set();\\n value.forEach(function (v) {\\n setAdd(replacement, replacePlaceholders(v, map));\\n });\\n break;\\n case 'Error':\\n value.message = replacePlaceholders(value.message, map);\\n if (hasOwn(value, 'cause')) {\\n value.cause = replacePlaceholders(value.cause, map);\\n }\\n if (value.name == 'AggregateError') {\\n value.errors = replacePlaceholders(value.errors, map);\\n } // break omitted\\n case 'DOMException':\\n if (ERROR_STACK_INSTALLABLE) {\\n value.stack = replacePlaceholders(value.stack, map);\\n }\\n }\\n\\n mapSet(map, value, replacement || value);\\n\\n return replacement || value;\\n};\\n\\nvar tryToTransfer = function (rawTransfer, map) {\\n if (!isObject(rawTransfer)) throw TypeError('Transfer option cannot be converted to a sequence');\\n\\n var transfer = [];\\n\\n iterate(rawTransfer, function (value) {\\n push(transfer, anObject(value));\\n });\\n\\n var i = 0;\\n var length = lengthOfArrayLike(transfer);\\n var buffers = [];\\n var value, type, C, transferred, canvas, context;\\n\\n while (i < length) {\\n value = transfer[i++];\\n\\n type = classof(value);\\n\\n if (type === 'ArrayBuffer') {\\n push(buffers, value);\\n continue;\\n }\\n\\n if (mapHas(map, value)) throw new DOMException('Duplicate transferable', DATA_CLONE_ERROR);\\n\\n if (PROPER_TRANSFER) {\\n transferred = nativeStructuredClone(value, { transfer: [value] });\\n } else switch (type) {\\n case 'ImageBitmap':\\n C = global.OffscreenCanvas;\\n if (!isConstructor(C)) throwUnpolyfillable(type, TRANSFERRING);\\n try {\\n canvas = new C(value.width, value.height);\\n context = canvas.getContext('bitmaprenderer');\\n context.transferFromImageBitmap(value);\\n transferred = canvas.transferToImageBitmap();\\n } catch (error) { /* empty */ }\\n break;\\n case 'AudioData':\\n case 'VideoFrame':\\n if (!isCallable(value.clone) || !isCallable(value.close)) throwUnpolyfillable(type, TRANSFERRING);\\n try {\\n transferred = value.clone();\\n value.close();\\n } catch (error) { /* empty */ }\\n break;\\n case 'MediaSourceHandle':\\n case 'MessagePort':\\n case 'OffscreenCanvas':\\n case 'ReadableStream':\\n case 'TransformStream':\\n case 'WritableStream':\\n throwUnpolyfillable(type, TRANSFERRING);\\n }\\n\\n if (transferred === undefined) throw new DOMException('This object cannot be transferred: ' + type, DATA_CLONE_ERROR);\\n\\n mapSet(map, value, transferred);\\n }\\n\\n return buffers;\\n};\\n\\nvar tryToTransferBuffers = function (transfer, map) {\\n var i = 0;\\n var length = lengthOfArrayLike(transfer);\\n var value, transferred;\\n\\n while (i < length) {\\n value = transfer[i++];\\n\\n if (mapHas(map, value)) throw new DOMException('Duplicate transferable', DATA_CLONE_ERROR);\\n\\n if (PROPER_TRANSFER) {\\n transferred = nativeStructuredClone(value, { transfer: [value] });\\n } else {\\n if (!isCallable(value.transfer)) throwUnpolyfillable('ArrayBuffer', TRANSFERRING);\\n transferred = value.transfer();\\n }\\n\\n mapSet(map, value, transferred);\\n }\\n};\\n\\n// \`structuredClone\` method\\n// https://html.spec.whatwg.org/multipage/structured-data.html#dom-structuredclone\\n$({ global: true, enumerable: true, sham: !PROPER_TRANSFER, forced: FORCED_REPLACEMENT }, {\\n structuredClone: function structuredClone(value /* , { transfer } */) {\\n var options = validateArgumentsLength(arguments.length, 1) > 1 && !isNullOrUndefined(arguments[1]) ? anObject(arguments[1]) : undefined;\\n var transfer = options ? options.transfer : undefined;\\n var transferredBuffers = false;\\n var map, buffers;\\n\\n if (transfer !== undefined) {\\n map = new Map();\\n buffers = tryToTransfer(transfer, map);\\n transferredBuffers = !!lengthOfArrayLike(buffers);\\n }\\n\\n var clone = structuredCloneInternal(value, map, transferredBuffers);\\n\\n // since of an issue with cloning views of transferred buffers, we a forced to transfer / clone them in 2 steps\\n // https://github.com/zloirock/core-js/issues/1265\\n if (transferredBuffers) {\\n map = new Map();\\n tryToTransferBuffers(transfer, map);\\n clone = replacePlaceholders(clone, map);\\n }\\n\\n return clone;\\n }\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/web.structured-clone.js?")}),"./node_modules/core-js/modules/web.url-search-params.constructor.js":((module,__unused_webpack_exports,__webpack_require__)=>{eval("\\n// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like \`preset-env\`\\n__webpack_require__(/*! ../modules/es.array.iterator */ \\"./node_modules/core-js/modules/es.array.iterator.js\\");\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar global = __webpack_require__(/*! ../internals/global */ \\"./node_modules/core-js/internals/global.js\\");\\nvar call = __webpack_require__(/*! ../internals/function-call */ \\"./node_modules/core-js/internals/function-call.js\\");\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\nvar DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ \\"./node_modules/core-js/internals/descriptors.js\\");\\nvar USE_NATIVE_URL = __webpack_require__(/*! ../internals/url-constructor-detection */ \\"./node_modules/core-js/internals/url-constructor-detection.js\\");\\nvar defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ \\"./node_modules/core-js/internals/define-built-in.js\\");\\nvar defineBuiltInAccessor = __webpack_require__(/*! ../internals/define-built-in-accessor */ \\"./node_modules/core-js/internals/define-built-in-accessor.js\\");\\nvar defineBuiltIns = __webpack_require__(/*! ../internals/define-built-ins */ \\"./node_modules/core-js/internals/define-built-ins.js\\");\\nvar setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ \\"./node_modules/core-js/internals/set-to-string-tag.js\\");\\nvar createIteratorConstructor = __webpack_require__(/*! ../internals/iterator-create-constructor */ \\"./node_modules/core-js/internals/iterator-create-constructor.js\\");\\nvar InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ \\"./node_modules/core-js/internals/internal-state.js\\");\\nvar anInstance = __webpack_require__(/*! ../internals/an-instance */ \\"./node_modules/core-js/internals/an-instance.js\\");\\nvar isCallable = __webpack_require__(/*! ../internals/is-callable */ \\"./node_modules/core-js/internals/is-callable.js\\");\\nvar hasOwn = __webpack_require__(/*! ../internals/has-own-property */ \\"./node_modules/core-js/internals/has-own-property.js\\");\\nvar bind = __webpack_require__(/*! ../internals/function-bind-context */ \\"./node_modules/core-js/internals/function-bind-context.js\\");\\nvar classof = __webpack_require__(/*! ../internals/classof */ \\"./node_modules/core-js/internals/classof.js\\");\\nvar anObject = __webpack_require__(/*! ../internals/an-object */ \\"./node_modules/core-js/internals/an-object.js\\");\\nvar isObject = __webpack_require__(/*! ../internals/is-object */ \\"./node_modules/core-js/internals/is-object.js\\");\\nvar $toString = __webpack_require__(/*! ../internals/to-string */ \\"./node_modules/core-js/internals/to-string.js\\");\\nvar create = __webpack_require__(/*! ../internals/object-create */ \\"./node_modules/core-js/internals/object-create.js\\");\\nvar createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ \\"./node_modules/core-js/internals/create-property-descriptor.js\\");\\nvar getIterator = __webpack_require__(/*! ../internals/get-iterator */ \\"./node_modules/core-js/internals/get-iterator.js\\");\\nvar getIteratorMethod = __webpack_require__(/*! ../internals/get-iterator-method */ \\"./node_modules/core-js/internals/get-iterator-method.js\\");\\nvar validateArgumentsLength = __webpack_require__(/*! ../internals/validate-arguments-length */ \\"./node_modules/core-js/internals/validate-arguments-length.js\\");\\nvar wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ \\"./node_modules/core-js/internals/well-known-symbol.js\\");\\nvar arraySort = __webpack_require__(/*! ../internals/array-sort */ \\"./node_modules/core-js/internals/array-sort.js\\");\\n\\nvar ITERATOR = wellKnownSymbol('iterator');\\nvar URL_SEARCH_PARAMS = 'URLSearchParams';\\nvar URL_SEARCH_PARAMS_ITERATOR = URL_SEARCH_PARAMS + 'Iterator';\\nvar setInternalState = InternalStateModule.set;\\nvar getInternalParamsState = InternalStateModule.getterFor(URL_SEARCH_PARAMS);\\nvar getInternalIteratorState = InternalStateModule.getterFor(URL_SEARCH_PARAMS_ITERATOR);\\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\\n\\n// Avoid NodeJS experimental warning\\nvar safeGetBuiltIn = function (name) {\\n if (!DESCRIPTORS) return global[name];\\n var descriptor = getOwnPropertyDescriptor(global, name);\\n return descriptor && descriptor.value;\\n};\\n\\nvar nativeFetch = safeGetBuiltIn('fetch');\\nvar NativeRequest = safeGetBuiltIn('Request');\\nvar Headers = safeGetBuiltIn('Headers');\\nvar RequestPrototype = NativeRequest && NativeRequest.prototype;\\nvar HeadersPrototype = Headers && Headers.prototype;\\nvar RegExp = global.RegExp;\\nvar TypeError = global.TypeError;\\nvar decodeURIComponent = global.decodeURIComponent;\\nvar encodeURIComponent = global.encodeURIComponent;\\nvar charAt = uncurryThis(''.charAt);\\nvar join = uncurryThis([].join);\\nvar push = uncurryThis([].push);\\nvar replace = uncurryThis(''.replace);\\nvar shift = uncurryThis([].shift);\\nvar splice = uncurryThis([].splice);\\nvar split = uncurryThis(''.split);\\nvar stringSlice = uncurryThis(''.slice);\\n\\nvar plus = /\\\\+/g;\\nvar sequences = Array(4);\\n\\nvar percentSequence = function (bytes) {\\n return sequences[bytes - 1] || (sequences[bytes - 1] = RegExp('((?:%[\\\\\\\\da-f]{2}){' + bytes + '})', 'gi'));\\n};\\n\\nvar percentDecode = function (sequence) {\\n try {\\n return decodeURIComponent(sequence);\\n } catch (error) {\\n return sequence;\\n }\\n};\\n\\nvar deserialize = function (it) {\\n var result = replace(it, plus, ' ');\\n var bytes = 4;\\n try {\\n return decodeURIComponent(result);\\n } catch (error) {\\n while (bytes) {\\n result = replace(result, percentSequence(bytes--), percentDecode);\\n }\\n return result;\\n }\\n};\\n\\nvar find = /[!'()~]|%20/g;\\n\\nvar replacements = {\\n '!': '%21',\\n \\"'\\": '%27',\\n '(': '%28',\\n ')': '%29',\\n '~': '%7E',\\n '%20': '+'\\n};\\n\\nvar replacer = function (match) {\\n return replacements[match];\\n};\\n\\nvar serialize = function (it) {\\n return replace(encodeURIComponent(it), find, replacer);\\n};\\n\\nvar URLSearchParamsIterator = createIteratorConstructor(function Iterator(params, kind) {\\n setInternalState(this, {\\n type: URL_SEARCH_PARAMS_ITERATOR,\\n iterator: getIterator(getInternalParamsState(params).entries),\\n kind: kind\\n });\\n}, 'Iterator', function next() {\\n var state = getInternalIteratorState(this);\\n var kind = state.kind;\\n var step = state.iterator.next();\\n var entry = step.value;\\n if (!step.done) {\\n step.value = kind === 'keys' ? entry.key : kind === 'values' ? entry.value : [entry.key, entry.value];\\n } return step;\\n}, true);\\n\\nvar URLSearchParamsState = function (init) {\\n this.entries = [];\\n this.url = null;\\n\\n if (init !== undefined) {\\n if (isObject(init)) this.parseObject(init);\\n else this.parseQuery(typeof init == 'string' ? charAt(init, 0) === '?' ? stringSlice(init, 1) : init : $toString(init));\\n }\\n};\\n\\nURLSearchParamsState.prototype = {\\n type: URL_SEARCH_PARAMS,\\n bindURL: function (url) {\\n this.url = url;\\n this.update();\\n },\\n parseObject: function (object) {\\n var iteratorMethod = getIteratorMethod(object);\\n var iterator, next, step, entryIterator, entryNext, first, second;\\n\\n if (iteratorMethod) {\\n iterator = getIterator(object, iteratorMethod);\\n next = iterator.next;\\n while (!(step = call(next, iterator)).done) {\\n entryIterator = getIterator(anObject(step.value));\\n entryNext = entryIterator.next;\\n if (\\n (first = call(entryNext, entryIterator)).done ||\\n (second = call(entryNext, entryIterator)).done ||\\n !call(entryNext, entryIterator).done\\n ) throw TypeError('Expected sequence with length 2');\\n push(this.entries, { key: $toString(first.value), value: $toString(second.value) });\\n }\\n } else for (var key in object) if (hasOwn(object, key)) {\\n push(this.entries, { key: key, value: $toString(object[key]) });\\n }\\n },\\n parseQuery: function (query) {\\n if (query) {\\n var attributes = split(query, '&');\\n var index = 0;\\n var attribute, entry;\\n while (index < attributes.length) {\\n attribute = attributes[index++];\\n if (attribute.length) {\\n entry = split(attribute, '=');\\n push(this.entries, {\\n key: deserialize(shift(entry)),\\n value: deserialize(join(entry, '='))\\n });\\n }\\n }\\n }\\n },\\n serialize: function () {\\n var entries = this.entries;\\n var result = [];\\n var index = 0;\\n var entry;\\n while (index < entries.length) {\\n entry = entries[index++];\\n push(result, serialize(entry.key) + '=' + serialize(entry.value));\\n } return join(result, '&');\\n },\\n update: function () {\\n this.entries.length = 0;\\n this.parseQuery(this.url.query);\\n },\\n updateURL: function () {\\n if (this.url) this.url.update();\\n }\\n};\\n\\n// \`URLSearchParams\` constructor\\n// https://url.spec.whatwg.org/#interface-urlsearchparams\\nvar URLSearchParamsConstructor = function URLSearchParams(/* init */) {\\n anInstance(this, URLSearchParamsPrototype);\\n var init = arguments.length > 0 ? arguments[0] : undefined;\\n var state = setInternalState(this, new URLSearchParamsState(init));\\n if (!DESCRIPTORS) this.size = state.entries.length;\\n};\\n\\nvar URLSearchParamsPrototype = URLSearchParamsConstructor.prototype;\\n\\ndefineBuiltIns(URLSearchParamsPrototype, {\\n // \`URLSearchParams.prototype.append\` method\\n // https://url.spec.whatwg.org/#dom-urlsearchparams-append\\n append: function append(name, value) {\\n var state = getInternalParamsState(this);\\n validateArgumentsLength(arguments.length, 2);\\n push(state.entries, { key: $toString(name), value: $toString(value) });\\n if (!DESCRIPTORS) this.length++;\\n state.updateURL();\\n },\\n // \`URLSearchParams.prototype.delete\` method\\n // https://url.spec.whatwg.org/#dom-urlsearchparams-delete\\n 'delete': function (name /* , value */) {\\n var state = getInternalParamsState(this);\\n var length = validateArgumentsLength(arguments.length, 1);\\n var entries = state.entries;\\n var key = $toString(name);\\n var $value = length < 2 ? undefined : arguments[1];\\n var value = $value === undefined ? $value : $toString($value);\\n var index = 0;\\n while (index < entries.length) {\\n var entry = entries[index];\\n if (entry.key === key && (value === undefined || entry.value === value)) {\\n splice(entries, index, 1);\\n if (value !== undefined) break;\\n } else index++;\\n }\\n if (!DESCRIPTORS) this.size = entries.length;\\n state.updateURL();\\n },\\n // \`URLSearchParams.prototype.get\` method\\n // https://url.spec.whatwg.org/#dom-urlsearchparams-get\\n get: function get(name) {\\n var entries = getInternalParamsState(this).entries;\\n validateArgumentsLength(arguments.length, 1);\\n var key = $toString(name);\\n var index = 0;\\n for (; index < entries.length; index++) {\\n if (entries[index].key === key) return entries[index].value;\\n }\\n return null;\\n },\\n // \`URLSearchParams.prototype.getAll\` method\\n // https://url.spec.whatwg.org/#dom-urlsearchparams-getall\\n getAll: function getAll(name) {\\n var entries = getInternalParamsState(this).entries;\\n validateArgumentsLength(arguments.length, 1);\\n var key = $toString(name);\\n var result = [];\\n var index = 0;\\n for (; index < entries.length; index++) {\\n if (entries[index].key === key) push(result, entries[index].value);\\n }\\n return result;\\n },\\n // \`URLSearchParams.prototype.has\` method\\n // https://url.spec.whatwg.org/#dom-urlsearchparams-has\\n has: function has(name /* , value */) {\\n var entries = getInternalParamsState(this).entries;\\n var length = validateArgumentsLength(arguments.length, 1);\\n var key = $toString(name);\\n var $value = length < 2 ? undefined : arguments[1];\\n var value = $value === undefined ? $value : $toString($value);\\n var index = 0;\\n while (index < entries.length) {\\n var entry = entries[index++];\\n if (entry.key === key && (value === undefined || entry.value === value)) return true;\\n }\\n return false;\\n },\\n // \`URLSearchParams.prototype.set\` method\\n // https://url.spec.whatwg.org/#dom-urlsearchparams-set\\n set: function set(name, value) {\\n var state = getInternalParamsState(this);\\n validateArgumentsLength(arguments.length, 1);\\n var entries = state.entries;\\n var found = false;\\n var key = $toString(name);\\n var val = $toString(value);\\n var index = 0;\\n var entry;\\n for (; index < entries.length; index++) {\\n entry = entries[index];\\n if (entry.key === key) {\\n if (found) splice(entries, index--, 1);\\n else {\\n found = true;\\n entry.value = val;\\n }\\n }\\n }\\n if (!found) push(entries, { key: key, value: val });\\n if (!DESCRIPTORS) this.size = entries.length;\\n state.updateURL();\\n },\\n // \`URLSearchParams.prototype.sort\` method\\n // https://url.spec.whatwg.org/#dom-urlsearchparams-sort\\n sort: function sort() {\\n var state = getInternalParamsState(this);\\n arraySort(state.entries, function (a, b) {\\n return a.key > b.key ? 1 : -1;\\n });\\n state.updateURL();\\n },\\n // \`URLSearchParams.prototype.forEach\` method\\n forEach: function forEach(callback /* , thisArg */) {\\n var entries = getInternalParamsState(this).entries;\\n var boundFunction = bind(callback, arguments.length > 1 ? arguments[1] : undefined);\\n var index = 0;\\n var entry;\\n while (index < entries.length) {\\n entry = entries[index++];\\n boundFunction(entry.value, entry.key, this);\\n }\\n },\\n // \`URLSearchParams.prototype.keys\` method\\n keys: function keys() {\\n return new URLSearchParamsIterator(this, 'keys');\\n },\\n // \`URLSearchParams.prototype.values\` method\\n values: function values() {\\n return new URLSearchParamsIterator(this, 'values');\\n },\\n // \`URLSearchParams.prototype.entries\` method\\n entries: function entries() {\\n return new URLSearchParamsIterator(this, 'entries');\\n }\\n}, { enumerable: true });\\n\\n// \`URLSearchParams.prototype[@@iterator]\` method\\ndefineBuiltIn(URLSearchParamsPrototype, ITERATOR, URLSearchParamsPrototype.entries, { name: 'entries' });\\n\\n// \`URLSearchParams.prototype.toString\` method\\n// https://url.spec.whatwg.org/#urlsearchparams-stringification-behavior\\ndefineBuiltIn(URLSearchParamsPrototype, 'toString', function toString() {\\n return getInternalParamsState(this).serialize();\\n}, { enumerable: true });\\n\\n// \`URLSearchParams.prototype.size\` getter\\n// https://github.com/whatwg/url/pull/734\\nif (DESCRIPTORS) defineBuiltInAccessor(URLSearchParamsPrototype, 'size', {\\n get: function size() {\\n return getInternalParamsState(this).entries.length;\\n },\\n configurable: true,\\n enumerable: true\\n});\\n\\nsetToStringTag(URLSearchParamsConstructor, URL_SEARCH_PARAMS);\\n\\n$({ global: true, constructor: true, forced: !USE_NATIVE_URL }, {\\n URLSearchParams: URLSearchParamsConstructor\\n});\\n\\n// Wrap \`fetch\` and \`Request\` for correct work with polyfilled \`URLSearchParams\`\\nif (!USE_NATIVE_URL && isCallable(Headers)) {\\n var headersHas = uncurryThis(HeadersPrototype.has);\\n var headersSet = uncurryThis(HeadersPrototype.set);\\n\\n var wrapRequestOptions = function (init) {\\n if (isObject(init)) {\\n var body = init.body;\\n var headers;\\n if (classof(body) === URL_SEARCH_PARAMS) {\\n headers = init.headers ? new Headers(init.headers) : new Headers();\\n if (!headersHas(headers, 'content-type')) {\\n headersSet(headers, 'content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\\n }\\n return create(init, {\\n body: createPropertyDescriptor(0, $toString(body)),\\n headers: createPropertyDescriptor(0, headers)\\n });\\n }\\n } return init;\\n };\\n\\n if (isCallable(nativeFetch)) {\\n $({ global: true, enumerable: true, dontCallGetSet: true, forced: true }, {\\n fetch: function fetch(input /* , init */) {\\n return nativeFetch(input, arguments.length > 1 ? wrapRequestOptions(arguments[1]) : {});\\n }\\n });\\n }\\n\\n if (isCallable(NativeRequest)) {\\n var RequestConstructor = function Request(input /* , init */) {\\n anInstance(this, RequestPrototype);\\n return new NativeRequest(input, arguments.length > 1 ? wrapRequestOptions(arguments[1]) : {});\\n };\\n\\n RequestPrototype.constructor = RequestConstructor;\\n RequestConstructor.prototype = RequestPrototype;\\n\\n $({ global: true, constructor: true, dontCallGetSet: true, forced: true }, {\\n Request: RequestConstructor\\n });\\n }\\n}\\n\\nmodule.exports = {\\n URLSearchParams: URLSearchParamsConstructor,\\n getState: getInternalParamsState\\n};\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/web.url-search-params.constructor.js?")}),"./node_modules/core-js/modules/web.url-search-params.delete.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ \\"./node_modules/core-js/internals/define-built-in.js\\");\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\nvar toString = __webpack_require__(/*! ../internals/to-string */ \\"./node_modules/core-js/internals/to-string.js\\");\\nvar validateArgumentsLength = __webpack_require__(/*! ../internals/validate-arguments-length */ \\"./node_modules/core-js/internals/validate-arguments-length.js\\");\\n\\nvar $URLSearchParams = URLSearchParams;\\nvar URLSearchParamsPrototype = $URLSearchParams.prototype;\\nvar append = uncurryThis(URLSearchParamsPrototype.append);\\nvar $delete = uncurryThis(URLSearchParamsPrototype['delete']);\\nvar forEach = uncurryThis(URLSearchParamsPrototype.forEach);\\nvar push = uncurryThis([].push);\\nvar params = new $URLSearchParams('a=1&a=2&b=3');\\n\\nparams['delete']('a', 1);\\n// \`undefined\` case is a Chromium 117 bug\\n// https://bugs.chromium.org/p/v8/issues/detail?id=14222\\nparams['delete']('b', undefined);\\n\\nif (params + '' !== 'a=2') {\\n defineBuiltIn(URLSearchParamsPrototype, 'delete', function (name /* , value */) {\\n var length = arguments.length;\\n var $value = length < 2 ? undefined : arguments[1];\\n if (length && $value === undefined) return $delete(this, name);\\n var entries = [];\\n forEach(this, function (v, k) { // also validates \`this\`\\n push(entries, { key: k, value: v });\\n });\\n validateArgumentsLength(length, 1);\\n var key = toString(name);\\n var value = toString($value);\\n var index = 0;\\n var dindex = 0;\\n var found = false;\\n var entriesLength = entries.length;\\n var entry;\\n while (index < entriesLength) {\\n entry = entries[index++];\\n if (found || entry.key === key) {\\n found = true;\\n $delete(this, entry.key);\\n } else dindex++;\\n }\\n while (dindex < entriesLength) {\\n entry = entries[dindex++];\\n if (!(entry.key === key && entry.value === value)) append(this, entry.key, entry.value);\\n }\\n }, { enumerable: true, unsafe: true });\\n}\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/web.url-search-params.delete.js?")}),"./node_modules/core-js/modules/web.url-search-params.has.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ \\"./node_modules/core-js/internals/define-built-in.js\\");\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\nvar toString = __webpack_require__(/*! ../internals/to-string */ \\"./node_modules/core-js/internals/to-string.js\\");\\nvar validateArgumentsLength = __webpack_require__(/*! ../internals/validate-arguments-length */ \\"./node_modules/core-js/internals/validate-arguments-length.js\\");\\n\\nvar $URLSearchParams = URLSearchParams;\\nvar URLSearchParamsPrototype = $URLSearchParams.prototype;\\nvar getAll = uncurryThis(URLSearchParamsPrototype.getAll);\\nvar $has = uncurryThis(URLSearchParamsPrototype.has);\\nvar params = new $URLSearchParams('a=1');\\n\\n// \`undefined\` case is a Chromium 117 bug\\n// https://bugs.chromium.org/p/v8/issues/detail?id=14222\\nif (params.has('a', 2) || !params.has('a', undefined)) {\\n defineBuiltIn(URLSearchParamsPrototype, 'has', function has(name /* , value */) {\\n var length = arguments.length;\\n var $value = length < 2 ? undefined : arguments[1];\\n if (length && $value === undefined) return $has(this, name);\\n var values = getAll(this, name); // also validates \`this\`\\n validateArgumentsLength(length, 1);\\n var value = toString($value);\\n var index = 0;\\n while (index < values.length) {\\n if (values[index++] === value) return true;\\n } return false;\\n }, { enumerable: true, unsafe: true });\\n}\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/web.url-search-params.has.js?")}),"./node_modules/core-js/modules/web.url-search-params.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\n// TODO: Remove this module from \`core-js@4\` since it's replaced to module below\\n__webpack_require__(/*! ../modules/web.url-search-params.constructor */ \\"./node_modules/core-js/modules/web.url-search-params.constructor.js\\");\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/web.url-search-params.js?")}),"./node_modules/core-js/modules/web.url-search-params.size.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\nvar DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ \\"./node_modules/core-js/internals/descriptors.js\\");\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\nvar defineBuiltInAccessor = __webpack_require__(/*! ../internals/define-built-in-accessor */ \\"./node_modules/core-js/internals/define-built-in-accessor.js\\");\\n\\nvar URLSearchParamsPrototype = URLSearchParams.prototype;\\nvar forEach = uncurryThis(URLSearchParamsPrototype.forEach);\\n\\n// \`URLSearchParams.prototype.size\` getter\\n// https://github.com/whatwg/url/pull/734\\nif (DESCRIPTORS && !('size' in URLSearchParamsPrototype)) {\\n defineBuiltInAccessor(URLSearchParamsPrototype, 'size', {\\n get: function size() {\\n var count = 0;\\n forEach(this, function () { count++; });\\n return count;\\n },\\n configurable: true,\\n enumerable: true\\n });\\n}\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/web.url-search-params.size.js?")}),"./node_modules/core-js/modules/web.url.constructor.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\n// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like \`preset-env\`\\n__webpack_require__(/*! ../modules/es.string.iterator */ \\"./node_modules/core-js/modules/es.string.iterator.js\\");\\nvar $ = __webpack_require__(/*! ../internals/export */ \\"./node_modules/core-js/internals/export.js\\");\\nvar DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ \\"./node_modules/core-js/internals/descriptors.js\\");\\nvar USE_NATIVE_URL = __webpack_require__(/*! ../internals/url-constructor-detection */ \\"./node_modules/core-js/internals/url-constructor-detection.js\\");\\nvar global = __webpack_require__(/*! ../internals/global */ \\"./node_modules/core-js/internals/global.js\\");\\nvar bind = __webpack_require__(/*! ../internals/function-bind-context */ \\"./node_modules/core-js/internals/function-bind-context.js\\");\\nvar uncurryThis = __webpack_require__(/*! ../internals/function-uncurry-this */ \\"./node_modules/core-js/internals/function-uncurry-this.js\\");\\nvar defineBuiltIn = __webpack_require__(/*! ../internals/define-built-in */ \\"./node_modules/core-js/internals/define-built-in.js\\");\\nvar defineBuiltInAccessor = __webpack_require__(/*! ../internals/define-built-in-accessor */ \\"./node_modules/core-js/internals/define-built-in-accessor.js\\");\\nvar anInstance = __webpack_require__(/*! ../internals/an-instance */ \\"./node_modules/core-js/internals/an-instance.js\\");\\nvar hasOwn = __webpack_require__(/*! ../internals/has-own-property */ \\"./node_modules/core-js/internals/has-own-property.js\\");\\nvar assign = __webpack_require__(/*! ../internals/object-assign */ \\"./node_modules/core-js/internals/object-assign.js\\");\\nvar arrayFrom = __webpack_require__(/*! ../internals/array-from */ \\"./node_modules/core-js/internals/array-from.js\\");\\nvar arraySlice = __webpack_require__(/*! ../internals/array-slice-simple */ \\"./node_modules/core-js/internals/array-slice-simple.js\\");\\nvar codeAt = (__webpack_require__(/*! ../internals/string-multibyte */ \\"./node_modules/core-js/internals/string-multibyte.js\\").codeAt);\\nvar toASCII = __webpack_require__(/*! ../internals/string-punycode-to-ascii */ \\"./node_modules/core-js/internals/string-punycode-to-ascii.js\\");\\nvar $toString = __webpack_require__(/*! ../internals/to-string */ \\"./node_modules/core-js/internals/to-string.js\\");\\nvar setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ \\"./node_modules/core-js/internals/set-to-string-tag.js\\");\\nvar validateArgumentsLength = __webpack_require__(/*! ../internals/validate-arguments-length */ \\"./node_modules/core-js/internals/validate-arguments-length.js\\");\\nvar URLSearchParamsModule = __webpack_require__(/*! ../modules/web.url-search-params.constructor */ \\"./node_modules/core-js/modules/web.url-search-params.constructor.js\\");\\nvar InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ \\"./node_modules/core-js/internals/internal-state.js\\");\\n\\nvar setInternalState = InternalStateModule.set;\\nvar getInternalURLState = InternalStateModule.getterFor('URL');\\nvar URLSearchParams = URLSearchParamsModule.URLSearchParams;\\nvar getInternalSearchParamsState = URLSearchParamsModule.getState;\\n\\nvar NativeURL = global.URL;\\nvar TypeError = global.TypeError;\\nvar parseInt = global.parseInt;\\nvar floor = Math.floor;\\nvar pow = Math.pow;\\nvar charAt = uncurryThis(''.charAt);\\nvar exec = uncurryThis(/./.exec);\\nvar join = uncurryThis([].join);\\nvar numberToString = uncurryThis(1.0.toString);\\nvar pop = uncurryThis([].pop);\\nvar push = uncurryThis([].push);\\nvar replace = uncurryThis(''.replace);\\nvar shift = uncurryThis([].shift);\\nvar split = uncurryThis(''.split);\\nvar stringSlice = uncurryThis(''.slice);\\nvar toLowerCase = uncurryThis(''.toLowerCase);\\nvar unshift = uncurryThis([].unshift);\\n\\nvar INVALID_AUTHORITY = 'Invalid authority';\\nvar INVALID_SCHEME = 'Invalid scheme';\\nvar INVALID_HOST = 'Invalid host';\\nvar INVALID_PORT = 'Invalid port';\\n\\nvar ALPHA = /[a-z]/i;\\n// eslint-disable-next-line regexp/no-obscure-range -- safe\\nvar ALPHANUMERIC = /[\\\\d+-.a-z]/i;\\nvar DIGIT = /\\\\d/;\\nvar HEX_START = /^0x/i;\\nvar OCT = /^[0-7]+$/;\\nvar DEC = /^\\\\d+$/;\\nvar HEX = /^[\\\\da-f]+$/i;\\n/* eslint-disable regexp/no-control-character -- safe */\\nvar FORBIDDEN_HOST_CODE_POINT = /[\\\\0\\\\t\\\\n\\\\r #%/:<>?@[\\\\\\\\\\\\]^|]/;\\nvar FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT = /[\\\\0\\\\t\\\\n\\\\r #/:<>?@[\\\\\\\\\\\\]^|]/;\\nvar LEADING_C0_CONTROL_OR_SPACE = /^[\\\\u0000-\\\\u0020]+/;\\nvar TRAILING_C0_CONTROL_OR_SPACE = /(^|[^\\\\u0000-\\\\u0020])[\\\\u0000-\\\\u0020]+$/;\\nvar TAB_AND_NEW_LINE = /[\\\\t\\\\n\\\\r]/g;\\n/* eslint-enable regexp/no-control-character -- safe */\\nvar EOF;\\n\\n// https://url.spec.whatwg.org/#ipv4-number-parser\\nvar parseIPv4 = function (input) {\\n var parts = split(input, '.');\\n var partsLength, numbers, index, part, radix, number, ipv4;\\n if (parts.length && parts[parts.length - 1] == '') {\\n parts.length--;\\n }\\n partsLength = parts.length;\\n if (partsLength > 4) return input;\\n numbers = [];\\n for (index = 0; index < partsLength; index++) {\\n part = parts[index];\\n if (part == '') return input;\\n radix = 10;\\n if (part.length > 1 && charAt(part, 0) == '0') {\\n radix = exec(HEX_START, part) ? 16 : 8;\\n part = stringSlice(part, radix == 8 ? 1 : 2);\\n }\\n if (part === '') {\\n number = 0;\\n } else {\\n if (!exec(radix == 10 ? DEC : radix == 8 ? OCT : HEX, part)) return input;\\n number = parseInt(part, radix);\\n }\\n push(numbers, number);\\n }\\n for (index = 0; index < partsLength; index++) {\\n number = numbers[index];\\n if (index == partsLength - 1) {\\n if (number >= pow(256, 5 - partsLength)) return null;\\n } else if (number > 255) return null;\\n }\\n ipv4 = pop(numbers);\\n for (index = 0; index < numbers.length; index++) {\\n ipv4 += numbers[index] * pow(256, 3 - index);\\n }\\n return ipv4;\\n};\\n\\n// https://url.spec.whatwg.org/#concept-ipv6-parser\\n// eslint-disable-next-line max-statements -- TODO\\nvar parseIPv6 = function (input) {\\n var address = [0, 0, 0, 0, 0, 0, 0, 0];\\n var pieceIndex = 0;\\n var compress = null;\\n var pointer = 0;\\n var value, length, numbersSeen, ipv4Piece, number, swaps, swap;\\n\\n var chr = function () {\\n return charAt(input, pointer);\\n };\\n\\n if (chr() == ':') {\\n if (charAt(input, 1) != ':') return;\\n pointer += 2;\\n pieceIndex++;\\n compress = pieceIndex;\\n }\\n while (chr()) {\\n if (pieceIndex == 8) return;\\n if (chr() == ':') {\\n if (compress !== null) return;\\n pointer++;\\n pieceIndex++;\\n compress = pieceIndex;\\n continue;\\n }\\n value = length = 0;\\n while (length < 4 && exec(HEX, chr())) {\\n value = value * 16 + parseInt(chr(), 16);\\n pointer++;\\n length++;\\n }\\n if (chr() == '.') {\\n if (length == 0) return;\\n pointer -= length;\\n if (pieceIndex > 6) return;\\n numbersSeen = 0;\\n while (chr()) {\\n ipv4Piece = null;\\n if (numbersSeen > 0) {\\n if (chr() == '.' && numbersSeen < 4) pointer++;\\n else return;\\n }\\n if (!exec(DIGIT, chr())) return;\\n while (exec(DIGIT, chr())) {\\n number = parseInt(chr(), 10);\\n if (ipv4Piece === null) ipv4Piece = number;\\n else if (ipv4Piece == 0) return;\\n else ipv4Piece = ipv4Piece * 10 + number;\\n if (ipv4Piece > 255) return;\\n pointer++;\\n }\\n address[pieceIndex] = address[pieceIndex] * 256 + ipv4Piece;\\n numbersSeen++;\\n if (numbersSeen == 2 || numbersSeen == 4) pieceIndex++;\\n }\\n if (numbersSeen != 4) return;\\n break;\\n } else if (chr() == ':') {\\n pointer++;\\n if (!chr()) return;\\n } else if (chr()) return;\\n address[pieceIndex++] = value;\\n }\\n if (compress !== null) {\\n swaps = pieceIndex - compress;\\n pieceIndex = 7;\\n while (pieceIndex != 0 && swaps > 0) {\\n swap = address[pieceIndex];\\n address[pieceIndex--] = address[compress + swaps - 1];\\n address[compress + --swaps] = swap;\\n }\\n } else if (pieceIndex != 8) return;\\n return address;\\n};\\n\\nvar findLongestZeroSequence = function (ipv6) {\\n var maxIndex = null;\\n var maxLength = 1;\\n var currStart = null;\\n var currLength = 0;\\n var index = 0;\\n for (; index < 8; index++) {\\n if (ipv6[index] !== 0) {\\n if (currLength > maxLength) {\\n maxIndex = currStart;\\n maxLength = currLength;\\n }\\n currStart = null;\\n currLength = 0;\\n } else {\\n if (currStart === null) currStart = index;\\n ++currLength;\\n }\\n }\\n if (currLength > maxLength) {\\n maxIndex = currStart;\\n maxLength = currLength;\\n }\\n return maxIndex;\\n};\\n\\n// https://url.spec.whatwg.org/#host-serializing\\nvar serializeHost = function (host) {\\n var result, index, compress, ignore0;\\n // ipv4\\n if (typeof host == 'number') {\\n result = [];\\n for (index = 0; index < 4; index++) {\\n unshift(result, host % 256);\\n host = floor(host / 256);\\n } return join(result, '.');\\n // ipv6\\n } else if (typeof host == 'object') {\\n result = '';\\n compress = findLongestZeroSequence(host);\\n for (index = 0; index < 8; index++) {\\n if (ignore0 && host[index] === 0) continue;\\n if (ignore0) ignore0 = false;\\n if (compress === index) {\\n result += index ? ':' : '::';\\n ignore0 = true;\\n } else {\\n result += numberToString(host[index], 16);\\n if (index < 7) result += ':';\\n }\\n }\\n return '[' + result + ']';\\n } return host;\\n};\\n\\nvar C0ControlPercentEncodeSet = {};\\nvar fragmentPercentEncodeSet = assign({}, C0ControlPercentEncodeSet, {\\n ' ': 1, '\\"': 1, '<': 1, '>': 1, '\`': 1\\n});\\nvar pathPercentEncodeSet = assign({}, fragmentPercentEncodeSet, {\\n '#': 1, '?': 1, '{': 1, '}': 1\\n});\\nvar userinfoPercentEncodeSet = assign({}, pathPercentEncodeSet, {\\n '/': 1, ':': 1, ';': 1, '=': 1, '@': 1, '[': 1, '\\\\\\\\': 1, ']': 1, '^': 1, '|': 1\\n});\\n\\nvar percentEncode = function (chr, set) {\\n var code = codeAt(chr, 0);\\n return code > 0x20 && code < 0x7F && !hasOwn(set, chr) ? chr : encodeURIComponent(chr);\\n};\\n\\n// https://url.spec.whatwg.org/#special-scheme\\nvar specialSchemes = {\\n ftp: 21,\\n file: null,\\n http: 80,\\n https: 443,\\n ws: 80,\\n wss: 443\\n};\\n\\n// https://url.spec.whatwg.org/#windows-drive-letter\\nvar isWindowsDriveLetter = function (string, normalized) {\\n var second;\\n return string.length == 2 && exec(ALPHA, charAt(string, 0))\\n && ((second = charAt(string, 1)) == ':' || (!normalized && second == '|'));\\n};\\n\\n// https://url.spec.whatwg.org/#start-with-a-windows-drive-letter\\nvar startsWithWindowsDriveLetter = function (string) {\\n var third;\\n return string.length > 1 && isWindowsDriveLetter(stringSlice(string, 0, 2)) && (\\n string.length == 2 ||\\n ((third = charAt(string, 2)) === '/' || third === '\\\\\\\\' || third === '?' || third === '#')\\n );\\n};\\n\\n// https://url.spec.whatwg.org/#single-dot-path-segment\\nvar isSingleDot = function (segment) {\\n return segment === '.' || toLowerCase(segment) === '%2e';\\n};\\n\\n// https://url.spec.whatwg.org/#double-dot-path-segment\\nvar isDoubleDot = function (segment) {\\n segment = toLowerCase(segment);\\n return segment === '..' || segment === '%2e.' || segment === '.%2e' || segment === '%2e%2e';\\n};\\n\\n// States:\\nvar SCHEME_START = {};\\nvar SCHEME = {};\\nvar NO_SCHEME = {};\\nvar SPECIAL_RELATIVE_OR_AUTHORITY = {};\\nvar PATH_OR_AUTHORITY = {};\\nvar RELATIVE = {};\\nvar RELATIVE_SLASH = {};\\nvar SPECIAL_AUTHORITY_SLASHES = {};\\nvar SPECIAL_AUTHORITY_IGNORE_SLASHES = {};\\nvar AUTHORITY = {};\\nvar HOST = {};\\nvar HOSTNAME = {};\\nvar PORT = {};\\nvar FILE = {};\\nvar FILE_SLASH = {};\\nvar FILE_HOST = {};\\nvar PATH_START = {};\\nvar PATH = {};\\nvar CANNOT_BE_A_BASE_URL_PATH = {};\\nvar QUERY = {};\\nvar FRAGMENT = {};\\n\\nvar URLState = function (url, isBase, base) {\\n var urlString = $toString(url);\\n var baseState, failure, searchParams;\\n if (isBase) {\\n failure = this.parse(urlString);\\n if (failure) throw TypeError(failure);\\n this.searchParams = null;\\n } else {\\n if (base !== undefined) baseState = new URLState(base, true);\\n failure = this.parse(urlString, null, baseState);\\n if (failure) throw TypeError(failure);\\n searchParams = getInternalSearchParamsState(new URLSearchParams());\\n searchParams.bindURL(this);\\n this.searchParams = searchParams;\\n }\\n};\\n\\nURLState.prototype = {\\n type: 'URL',\\n // https://url.spec.whatwg.org/#url-parsing\\n // eslint-disable-next-line max-statements -- TODO\\n parse: function (input, stateOverride, base) {\\n var url = this;\\n var state = stateOverride || SCHEME_START;\\n var pointer = 0;\\n var buffer = '';\\n var seenAt = false;\\n var seenBracket = false;\\n var seenPasswordToken = false;\\n var codePoints, chr, bufferCodePoints, failure;\\n\\n input = $toString(input);\\n\\n if (!stateOverride) {\\n url.scheme = '';\\n url.username = '';\\n url.password = '';\\n url.host = null;\\n url.port = null;\\n url.path = [];\\n url.query = null;\\n url.fragment = null;\\n url.cannotBeABaseURL = false;\\n input = replace(input, LEADING_C0_CONTROL_OR_SPACE, '');\\n input = replace(input, TRAILING_C0_CONTROL_OR_SPACE, '$1');\\n }\\n\\n input = replace(input, TAB_AND_NEW_LINE, '');\\n\\n codePoints = arrayFrom(input);\\n\\n while (pointer <= codePoints.length) {\\n chr = codePoints[pointer];\\n switch (state) {\\n case SCHEME_START:\\n if (chr && exec(ALPHA, chr)) {\\n buffer += toLowerCase(chr);\\n state = SCHEME;\\n } else if (!stateOverride) {\\n state = NO_SCHEME;\\n continue;\\n } else return INVALID_SCHEME;\\n break;\\n\\n case SCHEME:\\n if (chr && (exec(ALPHANUMERIC, chr) || chr == '+' || chr == '-' || chr == '.')) {\\n buffer += toLowerCase(chr);\\n } else if (chr == ':') {\\n if (stateOverride && (\\n (url.isSpecial() != hasOwn(specialSchemes, buffer)) ||\\n (buffer == 'file' && (url.includesCredentials() || url.port !== null)) ||\\n (url.scheme == 'file' && !url.host)\\n )) return;\\n url.scheme = buffer;\\n if (stateOverride) {\\n if (url.isSpecial() && specialSchemes[url.scheme] == url.port) url.port = null;\\n return;\\n }\\n buffer = '';\\n if (url.scheme == 'file') {\\n state = FILE;\\n } else if (url.isSpecial() && base && base.scheme == url.scheme) {\\n state = SPECIAL_RELATIVE_OR_AUTHORITY;\\n } else if (url.isSpecial()) {\\n state = SPECIAL_AUTHORITY_SLASHES;\\n } else if (codePoints[pointer + 1] == '/') {\\n state = PATH_OR_AUTHORITY;\\n pointer++;\\n } else {\\n url.cannotBeABaseURL = true;\\n push(url.path, '');\\n state = CANNOT_BE_A_BASE_URL_PATH;\\n }\\n } else if (!stateOverride) {\\n buffer = '';\\n state = NO_SCHEME;\\n pointer = 0;\\n continue;\\n } else return INVALID_SCHEME;\\n break;\\n\\n case NO_SCHEME:\\n if (!base || (base.cannotBeABaseURL && chr != '#')) return INVALID_SCHEME;\\n if (base.cannotBeABaseURL && chr == '#') {\\n url.scheme = base.scheme;\\n url.path = arraySlice(base.path);\\n url.query = base.query;\\n url.fragment = '';\\n url.cannotBeABaseURL = true;\\n state = FRAGMENT;\\n break;\\n }\\n state = base.scheme == 'file' ? FILE : RELATIVE;\\n continue;\\n\\n case SPECIAL_RELATIVE_OR_AUTHORITY:\\n if (chr == '/' && codePoints[pointer + 1] == '/') {\\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\\n pointer++;\\n } else {\\n state = RELATIVE;\\n continue;\\n } break;\\n\\n case PATH_OR_AUTHORITY:\\n if (chr == '/') {\\n state = AUTHORITY;\\n break;\\n } else {\\n state = PATH;\\n continue;\\n }\\n\\n case RELATIVE:\\n url.scheme = base.scheme;\\n if (chr == EOF) {\\n url.username = base.username;\\n url.password = base.password;\\n url.host = base.host;\\n url.port = base.port;\\n url.path = arraySlice(base.path);\\n url.query = base.query;\\n } else if (chr == '/' || (chr == '\\\\\\\\' && url.isSpecial())) {\\n state = RELATIVE_SLASH;\\n } else if (chr == '?') {\\n url.username = base.username;\\n url.password = base.password;\\n url.host = base.host;\\n url.port = base.port;\\n url.path = arraySlice(base.path);\\n url.query = '';\\n state = QUERY;\\n } else if (chr == '#') {\\n url.username = base.username;\\n url.password = base.password;\\n url.host = base.host;\\n url.port = base.port;\\n url.path = arraySlice(base.path);\\n url.query = base.query;\\n url.fragment = '';\\n state = FRAGMENT;\\n } else {\\n url.username = base.username;\\n url.password = base.password;\\n url.host = base.host;\\n url.port = base.port;\\n url.path = arraySlice(base.path);\\n url.path.length--;\\n state = PATH;\\n continue;\\n } break;\\n\\n case RELATIVE_SLASH:\\n if (url.isSpecial() && (chr == '/' || chr == '\\\\\\\\')) {\\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\\n } else if (chr == '/') {\\n state = AUTHORITY;\\n } else {\\n url.username = base.username;\\n url.password = base.password;\\n url.host = base.host;\\n url.port = base.port;\\n state = PATH;\\n continue;\\n } break;\\n\\n case SPECIAL_AUTHORITY_SLASHES:\\n state = SPECIAL_AUTHORITY_IGNORE_SLASHES;\\n if (chr != '/' || charAt(buffer, pointer + 1) != '/') continue;\\n pointer++;\\n break;\\n\\n case SPECIAL_AUTHORITY_IGNORE_SLASHES:\\n if (chr != '/' && chr != '\\\\\\\\') {\\n state = AUTHORITY;\\n continue;\\n } break;\\n\\n case AUTHORITY:\\n if (chr == '@') {\\n if (seenAt) buffer = '%40' + buffer;\\n seenAt = true;\\n bufferCodePoints = arrayFrom(buffer);\\n for (var i = 0; i < bufferCodePoints.length; i++) {\\n var codePoint = bufferCodePoints[i];\\n if (codePoint == ':' && !seenPasswordToken) {\\n seenPasswordToken = true;\\n continue;\\n }\\n var encodedCodePoints = percentEncode(codePoint, userinfoPercentEncodeSet);\\n if (seenPasswordToken) url.password += encodedCodePoints;\\n else url.username += encodedCodePoints;\\n }\\n buffer = '';\\n } else if (\\n chr == EOF || chr == '/' || chr == '?' || chr == '#' ||\\n (chr == '\\\\\\\\' && url.isSpecial())\\n ) {\\n if (seenAt && buffer == '') return INVALID_AUTHORITY;\\n pointer -= arrayFrom(buffer).length + 1;\\n buffer = '';\\n state = HOST;\\n } else buffer += chr;\\n break;\\n\\n case HOST:\\n case HOSTNAME:\\n if (stateOverride && url.scheme == 'file') {\\n state = FILE_HOST;\\n continue;\\n } else if (chr == ':' && !seenBracket) {\\n if (buffer == '') return INVALID_HOST;\\n failure = url.parseHost(buffer);\\n if (failure) return failure;\\n buffer = '';\\n state = PORT;\\n if (stateOverride == HOSTNAME) return;\\n } else if (\\n chr == EOF || chr == '/' || chr == '?' || chr == '#' ||\\n (chr == '\\\\\\\\' && url.isSpecial())\\n ) {\\n if (url.isSpecial() && buffer == '') return INVALID_HOST;\\n if (stateOverride && buffer == '' && (url.includesCredentials() || url.port !== null)) return;\\n failure = url.parseHost(buffer);\\n if (failure) return failure;\\n buffer = '';\\n state = PATH_START;\\n if (stateOverride) return;\\n continue;\\n } else {\\n if (chr == '[') seenBracket = true;\\n else if (chr == ']') seenBracket = false;\\n buffer += chr;\\n } break;\\n\\n case PORT:\\n if (exec(DIGIT, chr)) {\\n buffer += chr;\\n } else if (\\n chr == EOF || chr == '/' || chr == '?' || chr == '#' ||\\n (chr == '\\\\\\\\' && url.isSpecial()) ||\\n stateOverride\\n ) {\\n if (buffer != '') {\\n var port = parseInt(buffer, 10);\\n if (port > 0xFFFF) return INVALID_PORT;\\n url.port = (url.isSpecial() && port === specialSchemes[url.scheme]) ? null : port;\\n buffer = '';\\n }\\n if (stateOverride) return;\\n state = PATH_START;\\n continue;\\n } else return INVALID_PORT;\\n break;\\n\\n case FILE:\\n url.scheme = 'file';\\n if (chr == '/' || chr == '\\\\\\\\') state = FILE_SLASH;\\n else if (base && base.scheme == 'file') {\\n if (chr == EOF) {\\n url.host = base.host;\\n url.path = arraySlice(base.path);\\n url.query = base.query;\\n } else if (chr == '?') {\\n url.host = base.host;\\n url.path = arraySlice(base.path);\\n url.query = '';\\n state = QUERY;\\n } else if (chr == '#') {\\n url.host = base.host;\\n url.path = arraySlice(base.path);\\n url.query = base.query;\\n url.fragment = '';\\n state = FRAGMENT;\\n } else {\\n if (!startsWithWindowsDriveLetter(join(arraySlice(codePoints, pointer), ''))) {\\n url.host = base.host;\\n url.path = arraySlice(base.path);\\n url.shortenPath();\\n }\\n state = PATH;\\n continue;\\n }\\n } else {\\n state = PATH;\\n continue;\\n } break;\\n\\n case FILE_SLASH:\\n if (chr == '/' || chr == '\\\\\\\\') {\\n state = FILE_HOST;\\n break;\\n }\\n if (base && base.scheme == 'file' && !startsWithWindowsDriveLetter(join(arraySlice(codePoints, pointer), ''))) {\\n if (isWindowsDriveLetter(base.path[0], true)) push(url.path, base.path[0]);\\n else url.host = base.host;\\n }\\n state = PATH;\\n continue;\\n\\n case FILE_HOST:\\n if (chr == EOF || chr == '/' || chr == '\\\\\\\\' || chr == '?' || chr == '#') {\\n if (!stateOverride && isWindowsDriveLetter(buffer)) {\\n state = PATH;\\n } else if (buffer == '') {\\n url.host = '';\\n if (stateOverride) return;\\n state = PATH_START;\\n } else {\\n failure = url.parseHost(buffer);\\n if (failure) return failure;\\n if (url.host == 'localhost') url.host = '';\\n if (stateOverride) return;\\n buffer = '';\\n state = PATH_START;\\n } continue;\\n } else buffer += chr;\\n break;\\n\\n case PATH_START:\\n if (url.isSpecial()) {\\n state = PATH;\\n if (chr != '/' && chr != '\\\\\\\\') continue;\\n } else if (!stateOverride && chr == '?') {\\n url.query = '';\\n state = QUERY;\\n } else if (!stateOverride && chr == '#') {\\n url.fragment = '';\\n state = FRAGMENT;\\n } else if (chr != EOF) {\\n state = PATH;\\n if (chr != '/') continue;\\n } break;\\n\\n case PATH:\\n if (\\n chr == EOF || chr == '/' ||\\n (chr == '\\\\\\\\' && url.isSpecial()) ||\\n (!stateOverride && (chr == '?' || chr == '#'))\\n ) {\\n if (isDoubleDot(buffer)) {\\n url.shortenPath();\\n if (chr != '/' && !(chr == '\\\\\\\\' && url.isSpecial())) {\\n push(url.path, '');\\n }\\n } else if (isSingleDot(buffer)) {\\n if (chr != '/' && !(chr == '\\\\\\\\' && url.isSpecial())) {\\n push(url.path, '');\\n }\\n } else {\\n if (url.scheme == 'file' && !url.path.length && isWindowsDriveLetter(buffer)) {\\n if (url.host) url.host = '';\\n buffer = charAt(buffer, 0) + ':'; // normalize windows drive letter\\n }\\n push(url.path, buffer);\\n }\\n buffer = '';\\n if (url.scheme == 'file' && (chr == EOF || chr == '?' || chr == '#')) {\\n while (url.path.length > 1 && url.path[0] === '') {\\n shift(url.path);\\n }\\n }\\n if (chr == '?') {\\n url.query = '';\\n state = QUERY;\\n } else if (chr == '#') {\\n url.fragment = '';\\n state = FRAGMENT;\\n }\\n } else {\\n buffer += percentEncode(chr, pathPercentEncodeSet);\\n } break;\\n\\n case CANNOT_BE_A_BASE_URL_PATH:\\n if (chr == '?') {\\n url.query = '';\\n state = QUERY;\\n } else if (chr == '#') {\\n url.fragment = '';\\n state = FRAGMENT;\\n } else if (chr != EOF) {\\n url.path[0] += percentEncode(chr, C0ControlPercentEncodeSet);\\n } break;\\n\\n case QUERY:\\n if (!stateOverride && chr == '#') {\\n url.fragment = '';\\n state = FRAGMENT;\\n } else if (chr != EOF) {\\n if (chr == \\"'\\" && url.isSpecial()) url.query += '%27';\\n else if (chr == '#') url.query += '%23';\\n else url.query += percentEncode(chr, C0ControlPercentEncodeSet);\\n } break;\\n\\n case FRAGMENT:\\n if (chr != EOF) url.fragment += percentEncode(chr, fragmentPercentEncodeSet);\\n break;\\n }\\n\\n pointer++;\\n }\\n },\\n // https://url.spec.whatwg.org/#host-parsing\\n parseHost: function (input) {\\n var result, codePoints, index;\\n if (charAt(input, 0) == '[') {\\n if (charAt(input, input.length - 1) != ']') return INVALID_HOST;\\n result = parseIPv6(stringSlice(input, 1, -1));\\n if (!result) return INVALID_HOST;\\n this.host = result;\\n // opaque host\\n } else if (!this.isSpecial()) {\\n if (exec(FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT, input)) return INVALID_HOST;\\n result = '';\\n codePoints = arrayFrom(input);\\n for (index = 0; index < codePoints.length; index++) {\\n result += percentEncode(codePoints[index], C0ControlPercentEncodeSet);\\n }\\n this.host = result;\\n } else {\\n input = toASCII(input);\\n if (exec(FORBIDDEN_HOST_CODE_POINT, input)) return INVALID_HOST;\\n result = parseIPv4(input);\\n if (result === null) return INVALID_HOST;\\n this.host = result;\\n }\\n },\\n // https://url.spec.whatwg.org/#cannot-have-a-username-password-port\\n cannotHaveUsernamePasswordPort: function () {\\n return !this.host || this.cannotBeABaseURL || this.scheme == 'file';\\n },\\n // https://url.spec.whatwg.org/#include-credentials\\n includesCredentials: function () {\\n return this.username != '' || this.password != '';\\n },\\n // https://url.spec.whatwg.org/#is-special\\n isSpecial: function () {\\n return hasOwn(specialSchemes, this.scheme);\\n },\\n // https://url.spec.whatwg.org/#shorten-a-urls-path\\n shortenPath: function () {\\n var path = this.path;\\n var pathSize = path.length;\\n if (pathSize && (this.scheme != 'file' || pathSize != 1 || !isWindowsDriveLetter(path[0], true))) {\\n path.length--;\\n }\\n },\\n // https://url.spec.whatwg.org/#concept-url-serializer\\n serialize: function () {\\n var url = this;\\n var scheme = url.scheme;\\n var username = url.username;\\n var password = url.password;\\n var host = url.host;\\n var port = url.port;\\n var path = url.path;\\n var query = url.query;\\n var fragment = url.fragment;\\n var output = scheme + ':';\\n if (host !== null) {\\n output += '//';\\n if (url.includesCredentials()) {\\n output += username + (password ? ':' + password : '') + '@';\\n }\\n output += serializeHost(host);\\n if (port !== null) output += ':' + port;\\n } else if (scheme == 'file') output += '//';\\n output += url.cannotBeABaseURL ? path[0] : path.length ? '/' + join(path, '/') : '';\\n if (query !== null) output += '?' + query;\\n if (fragment !== null) output += '#' + fragment;\\n return output;\\n },\\n // https://url.spec.whatwg.org/#dom-url-href\\n setHref: function (href) {\\n var failure = this.parse(href);\\n if (failure) throw TypeError(failure);\\n this.searchParams.update();\\n },\\n // https://url.spec.whatwg.org/#dom-url-origin\\n getOrigin: function () {\\n var scheme = this.scheme;\\n var port = this.port;\\n if (scheme == 'blob') try {\\n return new URLConstructor(scheme.path[0]).origin;\\n } catch (error) {\\n return 'null';\\n }\\n if (scheme == 'file' || !this.isSpecial()) return 'null';\\n return scheme + '://' + serializeHost(this.host) + (port !== null ? ':' + port : '');\\n },\\n // https://url.spec.whatwg.org/#dom-url-protocol\\n getProtocol: function () {\\n return this.scheme + ':';\\n },\\n setProtocol: function (protocol) {\\n this.parse($toString(protocol) + ':', SCHEME_START);\\n },\\n // https://url.spec.whatwg.org/#dom-url-username\\n getUsername: function () {\\n return this.username;\\n },\\n setUsername: function (username) {\\n var codePoints = arrayFrom($toString(username));\\n if (this.cannotHaveUsernamePasswordPort()) return;\\n this.username = '';\\n for (var i = 0; i < codePoints.length; i++) {\\n this.username += percentEncode(codePoints[i], userinfoPercentEncodeSet);\\n }\\n },\\n // https://url.spec.whatwg.org/#dom-url-password\\n getPassword: function () {\\n return this.password;\\n },\\n setPassword: function (password) {\\n var codePoints = arrayFrom($toString(password));\\n if (this.cannotHaveUsernamePasswordPort()) return;\\n this.password = '';\\n for (var i = 0; i < codePoints.length; i++) {\\n this.password += percentEncode(codePoints[i], userinfoPercentEncodeSet);\\n }\\n },\\n // https://url.spec.whatwg.org/#dom-url-host\\n getHost: function () {\\n var host = this.host;\\n var port = this.port;\\n return host === null ? ''\\n : port === null ? serializeHost(host)\\n : serializeHost(host) + ':' + port;\\n },\\n setHost: function (host) {\\n if (this.cannotBeABaseURL) return;\\n this.parse(host, HOST);\\n },\\n // https://url.spec.whatwg.org/#dom-url-hostname\\n getHostname: function () {\\n var host = this.host;\\n return host === null ? '' : serializeHost(host);\\n },\\n setHostname: function (hostname) {\\n if (this.cannotBeABaseURL) return;\\n this.parse(hostname, HOSTNAME);\\n },\\n // https://url.spec.whatwg.org/#dom-url-port\\n getPort: function () {\\n var port = this.port;\\n return port === null ? '' : $toString(port);\\n },\\n setPort: function (port) {\\n if (this.cannotHaveUsernamePasswordPort()) return;\\n port = $toString(port);\\n if (port == '') this.port = null;\\n else this.parse(port, PORT);\\n },\\n // https://url.spec.whatwg.org/#dom-url-pathname\\n getPathname: function () {\\n var path = this.path;\\n return this.cannotBeABaseURL ? path[0] : path.length ? '/' + join(path, '/') : '';\\n },\\n setPathname: function (pathname) {\\n if (this.cannotBeABaseURL) return;\\n this.path = [];\\n this.parse(pathname, PATH_START);\\n },\\n // https://url.spec.whatwg.org/#dom-url-search\\n getSearch: function () {\\n var query = this.query;\\n return query ? '?' + query : '';\\n },\\n setSearch: function (search) {\\n search = $toString(search);\\n if (search == '') {\\n this.query = null;\\n } else {\\n if ('?' == charAt(search, 0)) search = stringSlice(search, 1);\\n this.query = '';\\n this.parse(search, QUERY);\\n }\\n this.searchParams.update();\\n },\\n // https://url.spec.whatwg.org/#dom-url-searchparams\\n getSearchParams: function () {\\n return this.searchParams.facade;\\n },\\n // https://url.spec.whatwg.org/#dom-url-hash\\n getHash: function () {\\n var fragment = this.fragment;\\n return fragment ? '#' + fragment : '';\\n },\\n setHash: function (hash) {\\n hash = $toString(hash);\\n if (hash == '') {\\n this.fragment = null;\\n return;\\n }\\n if ('#' == charAt(hash, 0)) hash = stringSlice(hash, 1);\\n this.fragment = '';\\n this.parse(hash, FRAGMENT);\\n },\\n update: function () {\\n this.query = this.searchParams.serialize() || null;\\n }\\n};\\n\\n// \`URL\` constructor\\n// https://url.spec.whatwg.org/#url-class\\nvar URLConstructor = function URL(url /* , base */) {\\n var that = anInstance(this, URLPrototype);\\n var base = validateArgumentsLength(arguments.length, 1) > 1 ? arguments[1] : undefined;\\n var state = setInternalState(that, new URLState(url, false, base));\\n if (!DESCRIPTORS) {\\n that.href = state.serialize();\\n that.origin = state.getOrigin();\\n that.protocol = state.getProtocol();\\n that.username = state.getUsername();\\n that.password = state.getPassword();\\n that.host = state.getHost();\\n that.hostname = state.getHostname();\\n that.port = state.getPort();\\n that.pathname = state.getPathname();\\n that.search = state.getSearch();\\n that.searchParams = state.getSearchParams();\\n that.hash = state.getHash();\\n }\\n};\\n\\nvar URLPrototype = URLConstructor.prototype;\\n\\nvar accessorDescriptor = function (getter, setter) {\\n return {\\n get: function () {\\n return getInternalURLState(this)[getter]();\\n },\\n set: setter && function (value) {\\n return getInternalURLState(this)[setter](value);\\n },\\n configurable: true,\\n enumerable: true\\n };\\n};\\n\\nif (DESCRIPTORS) {\\n // \`URL.prototype.href\` accessors pair\\n // https://url.spec.whatwg.org/#dom-url-href\\n defineBuiltInAccessor(URLPrototype, 'href', accessorDescriptor('serialize', 'setHref'));\\n // \`URL.prototype.origin\` getter\\n // https://url.spec.whatwg.org/#dom-url-origin\\n defineBuiltInAccessor(URLPrototype, 'origin', accessorDescriptor('getOrigin'));\\n // \`URL.prototype.protocol\` accessors pair\\n // https://url.spec.whatwg.org/#dom-url-protocol\\n defineBuiltInAccessor(URLPrototype, 'protocol', accessorDescriptor('getProtocol', 'setProtocol'));\\n // \`URL.prototype.username\` accessors pair\\n // https://url.spec.whatwg.org/#dom-url-username\\n defineBuiltInAccessor(URLPrototype, 'username', accessorDescriptor('getUsername', 'setUsername'));\\n // \`URL.prototype.password\` accessors pair\\n // https://url.spec.whatwg.org/#dom-url-password\\n defineBuiltInAccessor(URLPrototype, 'password', accessorDescriptor('getPassword', 'setPassword'));\\n // \`URL.prototype.host\` accessors pair\\n // https://url.spec.whatwg.org/#dom-url-host\\n defineBuiltInAccessor(URLPrototype, 'host', accessorDescriptor('getHost', 'setHost'));\\n // \`URL.prototype.hostname\` accessors pair\\n // https://url.spec.whatwg.org/#dom-url-hostname\\n defineBuiltInAccessor(URLPrototype, 'hostname', accessorDescriptor('getHostname', 'setHostname'));\\n // \`URL.prototype.port\` accessors pair\\n // https://url.spec.whatwg.org/#dom-url-port\\n defineBuiltInAccessor(URLPrototype, 'port', accessorDescriptor('getPort', 'setPort'));\\n // \`URL.prototype.pathname\` accessors pair\\n // https://url.spec.whatwg.org/#dom-url-pathname\\n defineBuiltInAccessor(URLPrototype, 'pathname', accessorDescriptor('getPathname', 'setPathname'));\\n // \`URL.prototype.search\` accessors pair\\n // https://url.spec.whatwg.org/#dom-url-search\\n defineBuiltInAccessor(URLPrototype, 'search', accessorDescriptor('getSearch', 'setSearch'));\\n // \`URL.prototype.searchParams\` getter\\n // https://url.spec.whatwg.org/#dom-url-searchparams\\n defineBuiltInAccessor(URLPrototype, 'searchParams', accessorDescriptor('getSearchParams'));\\n // \`URL.prototype.hash\` accessors pair\\n // https://url.spec.whatwg.org/#dom-url-hash\\n defineBuiltInAccessor(URLPrototype, 'hash', accessorDescriptor('getHash', 'setHash'));\\n}\\n\\n// \`URL.prototype.toJSON\` method\\n// https://url.spec.whatwg.org/#dom-url-tojson\\ndefineBuiltIn(URLPrototype, 'toJSON', function toJSON() {\\n return getInternalURLState(this).serialize();\\n}, { enumerable: true });\\n\\n// \`URL.prototype.toString\` method\\n// https://url.spec.whatwg.org/#URL-stringification-behavior\\ndefineBuiltIn(URLPrototype, 'toString', function toString() {\\n return getInternalURLState(this).serialize();\\n}, { enumerable: true });\\n\\nif (NativeURL) {\\n var nativeCreateObjectURL = NativeURL.createObjectURL;\\n var nativeRevokeObjectURL = NativeURL.revokeObjectURL;\\n // \`URL.createObjectURL\` method\\n // https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL\\n if (nativeCreateObjectURL) defineBuiltIn(URLConstructor, 'createObjectURL', bind(nativeCreateObjectURL, NativeURL));\\n // \`URL.revokeObjectURL\` method\\n // https://developer.mozilla.org/en-US/docs/Web/API/URL/revokeObjectURL\\n if (nativeRevokeObjectURL) defineBuiltIn(URLConstructor, 'revokeObjectURL', bind(nativeRevokeObjectURL, NativeURL));\\n}\\n\\nsetToStringTag(URLConstructor, 'URL');\\n\\n$({ global: true, constructor: true, forced: !USE_NATIVE_URL, sham: !DESCRIPTORS }, {\\n URL: URLConstructor\\n});\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/web.url.constructor.js?")}),"./node_modules/core-js/modules/web.url.js":((__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{eval("\\n// TODO: Remove this module from \`core-js@4\` since it's replaced to module below\\n__webpack_require__(/*! ../modules/web.url.constructor */ \\"./node_modules/core-js/modules/web.url.constructor.js\\");\\n\\n\\n//# sourceURL=webpack://babel/./node_modules/core-js/modules/web.url.js?")})});var __webpack_module_cache__={};function __webpack_require__(moduleId){var cachedModule=__webpack_module_cache__[moduleId];if(cachedModule!==undefined){return cachedModule.exports}var module=__webpack_module_cache__[moduleId]={id:moduleId,loaded:false,exports:{}};__webpack_modules__[moduleId].call(module.exports,module,module.exports,__webpack_require__);module.loaded=true;return module.exports}(()=>{__webpack_require__.amdO={}})();(()=>{__webpack_require__.n=(module)=>{var getter=module&&module.__esModule?()=>(module['default']):()=>(module);__webpack_require__.d(getter,{a:getter});return getter}})();(()=>{__webpack_require__.d=(exports,definition)=>{for(var key in definition){if(__webpack_require__.o(definition,key)&&!__webpack_require__.o(exports,key)){Object.defineProperty(exports,key,{enumerable:true,get:definition[key]})}}}})();(()=>{__webpack_require__.g=(function(){if(typeof globalThis==='object')return globalThis;try{return this||new Function('return this')()}catch(e){if(typeof window==='object')return window}})()})();(()=>{__webpack_require__.hmd=(module)=>{module=Object.create(module);if(!module.children)module.children=[];Object.defineProperty(module,'exports',{enumerable:true,set:()=>{throw new Error('ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: '+module.id);}});return module}})();(()=>{__webpack_require__.o=(obj,prop)=>(Object.prototype.hasOwnProperty.call(obj,prop))})();(()=>{__webpack_require__.r=(exports)=>{if(typeof Symbol!=='undefined'&&Symbol.toStringTag){Object.defineProperty(exports,Symbol.toStringTag,{value:'Module'})}Object.defineProperty(exports,'__esModule',{value:true})}})();var __webpack_exports__=__webpack_require__("./pdf.js")})();`;function Z(e){var t,n,o,r,a;for(t="",o=e.length,n=0;n=1&&r<=127?t+=e.charAt(n):r>2047?(a=224|r>>12&15,t+=String.fromCharCode(a),a=128|r>>6&63,t+=String.fromCharCode(a),a=128|r>>0&63,t+=String.fromCharCode(a)):(a=192|r>>6&31,t+=String.fromCharCode(a),a=128|r>>0&63,t+=String.fromCharCode(a));return t}var c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function Q(e){var t,n,o,r,a,s;for(o=e.length,n=0,t="";n>2),t+=c.charAt((r&3)<<4),t+="==";break}if(a=e.charCodeAt(n++),n==o){t+=c.charAt(r>>2),t+=c.charAt((r&3)<<4|(a&240)>>4),t+=c.charAt((a&15)<<2),t+="=";break}s=e.charCodeAt(n++),t+=c.charAt(r>>2),t+=c.charAt((r&3)<<4|(a&240)>>4),t+=c.charAt((a&15)<<2|(s&192)>>6),t+=c.charAt(s&63)}return t}function E(e){return Q(Z(e))}const ee=`data:text/javascript;base64,${E(J)}`,te=`data:text/javascript;base64,${E(Y)}`,ne=L({name:"VueOfficePdf",props:{src:[String,ArrayBuffer,Blob],requestOptions:{type:Object,default:()=>({})},staticFileUrl:{type:String,default:"https://unpkg.com/pdfjs-dist@3.1.81/"},options:{type:Object,default:()=>({})}},emits:["rendered","error"],setup(e,{emit:t}){let n=null,o=null;const r=v(null),a=v([]),s=v(0),m=5;function j(){return M(ee).then(()=>{if(window.pdfjsLib)window.pdfjsLib.GlobalWorkerOptions.workerSrc=te;else return Promise.reject("window.pdfjsLib未找到")})}function x(){return window.pdfjsLib?Promise.resolve():j()}function A(){if(!e.src){s.value=0;return}o=window.pdfjsLib.getDocument({url:I(e.src),cMapUrl:`${e.staticFileUrl.endsWith("/")?e.staticFileUrl:e.staticFileUrl+"/"}cmaps/`,cMapPacked:!0,enableXfa:!0,...D(e.options,["width"])}),o.promise.then(i=>{n=i,s.value=e.options.lazy?Math.min(n.numPages,m):n.numPages,setTimeout(()=>{b(1)})}).catch(i=>{t("error",i)})}function P(i){if(!e.options.lazy)return;const{scrollTop:u,scrollHeight:d,clientHeight:h}=i.target;if(u+h>=d){if(s.value>=n.numPages)return;let l=s.value;s.value=Math.min(n.numPages,l+m),s.value>l&&b(l+1)}}function b(i){n.getPage(i).then(u=>{const d=u.getViewport({scale:2}),h=window.devicePixelRatio||1,l=a.value[i-1],T=l.getContext("2d");l.width=Math.floor(d.width*h),l.height=Math.floor(d.height*h);let p=Math.floor(d.width),f=Math.floor(d.height);if(e.options.width){let _=e.options.width/p;p=Math.floor(e.options.width),f=Math.floor(f*_)}let S=r.value.getBoundingClientRect().width-20;if(p>S){let _=S/p;p=Math.floor(S),f=Math.floor(f*_)}l.style.width=p+"px",l.style.height=f+"px";const R=h!==1?[h,0,0,h,0,0]:null;u.render({canvasContext:T,transform:R,viewport:d}).promise.then(()=>{s.value>i?b(i+1):t("rendered")}).catch(_=>{t("error",_)})}).catch(u=>{t("error",u)})}function O(){b(1)}U(()=>{e.src&&x().then(A).catch(i=>{console.warn(i)})}),B(()=>e.src,()=>{x().then(A).catch(i=>{console.warn(i)})});function C(i){n&&n._transport&&n._transport.getData().then(u=>{F(i||`vue-office-pdf-${new Date().getTime()}.pdf`,u.buffer)})}return{wrapperRef:r,rootRef:a,numPages:s,save:C,onScrollPdf:P,rerender:O}}}),re={key:0,ref:"wrapperRef",class:"vue-office-pdf-wrapper",style:{background:"gray",padding:"30px 0",position:"relative"}};function ae(e,t,n,o,r,a){return g(),y("div",{class:"vue-office-pdf",ref:"vue-office-pdf",style:{"text-align":"center","overflow-y":"auto"},onScroll:t[0]||(t[0]=(...s)=>e.onScrollPdf&&e.onScrollPdf(...s))},[e.numPages?(g(),y("div",re,[(g(!0),y(q,null,$(e.numPages,s=>(g(),y("canvas",{ref_for:!0,ref:"rootRef",key:s,style:{width:"100%"}}))),128)),G(e.$slots,"default")],512)):W("",!0)],544)}const w=N(ne,[["render",ae]]);w.install=function(e){e.component(w.name,w)};const ue={__name:"PdfDemo",setup(e){function t(){k.hideLoading()}function n(a){console.log("出差",a),k.hideLoading()}const o=location.origin+(location.pathname+"/").replace("//","/")+"static/test-files/test.pdf",r=v();return window.docxRef=r,(a,s)=>(g(),H(K,{accept:".pdf",placeholder:"请输入pdf文件地址","default-src":o},{default:X(m=>[z(V(w),{ref_key:"docxRef",ref:r,src:m.src,style:{flex:"1",height:"0"},options:{lazy:!0},onRendered:t,onError:n},null,8,["src"])]),_:1}))}};export{ue as default}; diff --git a/examples/dist/assets/PreviewWrapper-a72046cf.js b/examples/dist/assets/PreviewWrapper-a72046cf.js new file mode 100644 index 0000000..17ce9b8 --- /dev/null +++ b/examples/dist/assets/PreviewWrapper-a72046cf.js @@ -0,0 +1 @@ +import{r as d,p as C,_ as I,w as N,q as l,a as p,c as x,u as t,g as i,f as n,s as v,t as S,e as y,m,l as V,v as W,x as A,b as R}from"./index-846e3dd9.js";function T(e){const s=d("url"),a=d(e),r=d(e),u=d([]);function b(w){let c=new FileReader;return c.onload=o=>{let _=o.target.result;r.value=_},c.readAsArrayBuffer(w),!1}return{type:s,inputSrc:a,src:r,fileList:u,beforeUpload:b}}let g=d(!1),k;function $(e){k=C.loading(e,0),g.value=!0}function q(){g.value===!0&&(k(),g.value=!1)}const E={loading:g,showLoading:$,hideLoading:q};function F(){return location.href.includes("test")}const j=e=>(W("data-v-6e0b6946"),e=e(),A(),e),z={class:"preview-wrapper"},D={key:0,class:"operate-area"},G=j(()=>R("div",{class:"preview-wrapper-main"},null,-1)),H={__name:"PreviewWrapper",props:{accept:String,placeholder:String,defaultSrc:String},setup(e){const s=e,{type:a,inputSrc:r,src:u,fileList:b,beforeUpload:w}=T(s.defaultSrc);return N(u,()=>{E.showLoading()},{immediate:!0}),(c,o)=>{const _=l("a-radio-button"),B=l("a-radio-group"),L=l("a-input"),h=l("a-button"),U=l("upload-outlined"),P=l("a-upload");return p(),x("div",z,[t(F)()?m("",!0):(p(),x("div",D,[i(B,{value:t(a),"onUpdate:value":o[0]||(o[0]=f=>S(a)?a.value=f:null),"button-style":"solid"},{default:n(()=>[i(_,{value:"url"},{default:n(()=>[v("远程文件地址")]),_:1}),i(_,{value:"upload"},{default:n(()=>[v("上传本地文件")]),_:1})]),_:1},8,["value"]),t(a)==="url"?(p(),y(L,{key:0,value:t(r),"onUpdate:value":o[1]||(o[1]=f=>S(r)?r.value=f:null),placeholder:s.placeholder,style:{width:"600px","margin-left":"10px"}},null,8,["value","placeholder"])):m("",!0),t(a)==="url"?(p(),y(h,{key:1,type:"primary",style:{"margin-left":"10px"},onClick:o[2]||(o[2]=f=>u.value=t(r))},{default:n(()=>[v(" 预览 ")]),_:1})):m("",!0),t(a)!=="url"?(p(),y(P,{key:2,accept:s.accept,action:"",beforeUpload:t(w),"file-list":[]},{default:n(()=>[i(h,{style:{"margin-left":"10px"}},{default:n(()=>[i(U),v(" 选择文件 ")]),_:1})]),_:1},8,["accept","beforeUpload"])):m("",!0)])),V(c.$slots,"default",{src:t(u)},void 0,!0),G])}}},K=I(H,[["__scopeId","data-v-6e0b6946"]]);export{K as P,E as u}; diff --git a/examples/dist/assets/docx-346cfa6b.js b/examples/dist/assets/docx-346cfa6b.js new file mode 100644 index 0000000..a4876b0 --- /dev/null +++ b/examples/dist/assets/docx-346cfa6b.js @@ -0,0 +1,97 @@ +import{y as _e}from"./index-846e3dd9.js";import{c as ke}from"./_commonjs-dynamic-modules-302442b1.js";var Ce={exports:{}},xe={exports:{}};/*! + +JSZip v3.10.1 - A JavaScript class for generating and reading zip files + + +(c) 2009-2016 Stuart Knightley +Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown. + +JSZip uses the library pako released under the MIT license : +https://github.com/nodeca/pako/blob/main/LICENSE +*/var Pe;function Be(){return Pe||(Pe=1,function(ne,ce){(function(T){ne.exports=T()})(function(){return function T(L,B,S){function v(r,m){if(!B[r]){if(!L[r]){var f=typeof ke=="function"&&ke;if(!m&&f)return f(r,!0);if(e)return e(r,!0);var a=new Error("Cannot find module '"+r+"'");throw a.code="MODULE_NOT_FOUND",a}var i=B[r]={exports:{}};L[r][0].call(i.exports,function(y){var h=L[r][1][y];return v(h||y)},i,i.exports,T,L,B,S)}return B[r].exports}for(var e=typeof ke=="function"&&ke,u=0;u>2,i=(3&r)<<4|m>>4,y=1>6:64,h=2>4,m=(15&a)<<4|(i=e.indexOf(u.charAt(h++)))>>2,f=(3&i)<<6|(y=e.indexOf(u.charAt(h++))),g[d++]=r,i!==64&&(g[d++]=m),y!==64&&(g[d++]=f);return g}},{"./support":30,"./utils":32}],2:[function(T,L,B){var S=T("./external"),v=T("./stream/DataWorker"),e=T("./stream/Crc32Probe"),u=T("./stream/DataLengthProbe");function r(m,f,a,i,y){this.compressedSize=m,this.uncompressedSize=f,this.crc32=a,this.compression=i,this.compressedContent=y}r.prototype={getContentWorker:function(){var m=new v(S.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new u("data_length")),f=this;return m.on("end",function(){if(this.streamInfo.data_length!==f.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")}),m},getCompressedWorker:function(){return new v(S.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},r.createWorkerFrom=function(m,f,a){return m.pipe(new e).pipe(new u("uncompressedSize")).pipe(f.compressWorker(a)).pipe(new u("compressedSize")).withStreamInfo("compression",f)},L.exports=r},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(T,L,B){var S=T("./stream/GenericWorker");B.STORE={magic:"\0\0",compressWorker:function(){return new S("STORE compression")},uncompressWorker:function(){return new S("STORE decompression")}},B.DEFLATE=T("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(T,L,B){var S=T("./utils"),v=function(){for(var e,u=[],r=0;r<256;r++){e=r;for(var m=0;m<8;m++)e=1&e?3988292384^e>>>1:e>>>1;u[r]=e}return u}();L.exports=function(e,u){return e!==void 0&&e.length?S.getTypeOf(e)!=="string"?function(r,m,f,a){var i=v,y=a+f;r^=-1;for(var h=a;h>>8^i[255&(r^m[h])];return-1^r}(0|u,e,e.length,0):function(r,m,f,a){var i=v,y=a+f;r^=-1;for(var h=a;h>>8^i[255&(r^m.charCodeAt(h))];return-1^r}(0|u,e,e.length,0):0}},{"./utils":32}],5:[function(T,L,B){B.base64=!1,B.binary=!1,B.dir=!1,B.createFolders=!0,B.date=null,B.compression=null,B.compressionOptions=null,B.comment=null,B.unixPermissions=null,B.dosPermissions=null},{}],6:[function(T,L,B){var S=null;S=typeof Promise<"u"?Promise:T("lie"),L.exports={Promise:S}},{lie:37}],7:[function(T,L,B){var S=typeof Uint8Array<"u"&&typeof Uint16Array<"u"&&typeof Uint32Array<"u",v=T("pako"),e=T("./utils"),u=T("./stream/GenericWorker"),r=S?"uint8array":"array";function m(f,a){u.call(this,"FlateWorker/"+f),this._pako=null,this._pakoAction=f,this._pakoOptions=a,this.meta={}}B.magic="\b\0",e.inherits(m,u),m.prototype.processChunk=function(f){this.meta=f.meta,this._pako===null&&this._createPako(),this._pako.push(e.transformTo(r,f.data),!1)},m.prototype.flush=function(){u.prototype.flush.call(this),this._pako===null&&this._createPako(),this._pako.push([],!0)},m.prototype.cleanUp=function(){u.prototype.cleanUp.call(this),this._pako=null},m.prototype._createPako=function(){this._pako=new v[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var f=this;this._pako.onData=function(a){f.push({data:a,meta:f.meta})}},B.compressWorker=function(f){return new m("Deflate",f)},B.uncompressWorker=function(){return new m("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(T,L,B){function S(i,y){var h,d="";for(h=0;h>>=8;return d}function v(i,y,h,d,p,g){var w,P,n=i.file,s=i.compression,t=g!==r.utf8encode,l=e.transformTo("string",g(n.name)),b=e.transformTo("string",r.utf8encode(n.name)),k=n.comment,E=e.transformTo("string",g(k)),_=e.transformTo("string",r.utf8encode(k)),C=b.length!==n.name.length,o=_.length!==k.length,R="",V="",F="",q=n.dir,W=n.date,Y={crc32:0,compressedSize:0,uncompressedSize:0};y&&!h||(Y.crc32=i.crc32,Y.compressedSize=i.compressedSize,Y.uncompressedSize=i.uncompressedSize);var z=0;y&&(z|=8),t||!C&&!o||(z|=2048);var O=0,J=0;q&&(O|=16),p==="UNIX"?(J=798,O|=function(Z,ae){var le=Z;return Z||(le=ae?16893:33204),(65535&le)<<16}(n.unixPermissions,q)):(J=20,O|=function(Z){return 63&(Z||0)}(n.dosPermissions)),w=W.getUTCHours(),w<<=6,w|=W.getUTCMinutes(),w<<=5,w|=W.getUTCSeconds()/2,P=W.getUTCFullYear()-1980,P<<=4,P|=W.getUTCMonth()+1,P<<=5,P|=W.getUTCDate(),C&&(V=S(1,1)+S(m(l),4)+b,R+="up"+S(V.length,2)+V),o&&(F=S(1,1)+S(m(E),4)+_,R+="uc"+S(F.length,2)+F);var X="";return X+=` +\0`,X+=S(z,2),X+=s.magic,X+=S(w,2),X+=S(P,2),X+=S(Y.crc32,4),X+=S(Y.compressedSize,4),X+=S(Y.uncompressedSize,4),X+=S(l.length,2),X+=S(R.length,2),{fileRecord:f.LOCAL_FILE_HEADER+X+l+R,dirRecord:f.CENTRAL_FILE_HEADER+S(J,2)+X+S(E.length,2)+"\0\0\0\0"+S(O,4)+S(d,4)+l+R+E}}var e=T("../utils"),u=T("../stream/GenericWorker"),r=T("../utf8"),m=T("../crc32"),f=T("../signature");function a(i,y,h,d){u.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=y,this.zipPlatform=h,this.encodeFileName=d,this.streamFiles=i,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}e.inherits(a,u),a.prototype.push=function(i){var y=i.meta.percent||0,h=this.entriesCount,d=this._sources.length;this.accumulate?this.contentBuffer.push(i):(this.bytesWritten+=i.data.length,u.prototype.push.call(this,{data:i.data,meta:{currentFile:this.currentFile,percent:h?(y+100*(h-d-1))/h:100}}))},a.prototype.openedSource=function(i){this.currentSourceOffset=this.bytesWritten,this.currentFile=i.file.name;var y=this.streamFiles&&!i.file.dir;if(y){var h=v(i,y,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:h.fileRecord,meta:{percent:0}})}else this.accumulate=!0},a.prototype.closedSource=function(i){this.accumulate=!1;var y=this.streamFiles&&!i.file.dir,h=v(i,y,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(h.dirRecord),y)this.push({data:function(d){return f.DATA_DESCRIPTOR+S(d.crc32,4)+S(d.compressedSize,4)+S(d.uncompressedSize,4)}(i),meta:{percent:100}});else for(this.push({data:h.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},a.prototype.flush=function(){for(var i=this.bytesWritten,y=0;y=this.index;u--)r=(r<<8)+this.byteAt(u);return this.index+=e,r},readString:function(e){return S.transformTo("string",this.readData(e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},L.exports=v},{"../utils":32}],19:[function(T,L,B){var S=T("./Uint8ArrayReader");function v(e){S.call(this,e)}T("../utils").inherits(v,S),v.prototype.readData=function(e){this.checkOffset(e);var u=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,u},L.exports=v},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(T,L,B){var S=T("./DataReader");function v(e){S.call(this,e)}T("../utils").inherits(v,S),v.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},v.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},v.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},v.prototype.readData=function(e){this.checkOffset(e);var u=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,u},L.exports=v},{"../utils":32,"./DataReader":18}],21:[function(T,L,B){var S=T("./ArrayReader");function v(e){S.call(this,e)}T("../utils").inherits(v,S),v.prototype.readData=function(e){if(this.checkOffset(e),e===0)return new Uint8Array(0);var u=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,u},L.exports=v},{"../utils":32,"./ArrayReader":17}],22:[function(T,L,B){var S=T("../utils"),v=T("../support"),e=T("./ArrayReader"),u=T("./StringReader"),r=T("./NodeBufferReader"),m=T("./Uint8ArrayReader");L.exports=function(f){var a=S.getTypeOf(f);return S.checkSupport(a),a!=="string"||v.uint8array?a==="nodebuffer"?new r(f):v.uint8array?new m(S.transformTo("uint8array",f)):new e(S.transformTo("array",f)):new u(f)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(T,L,B){B.LOCAL_FILE_HEADER="PK",B.CENTRAL_FILE_HEADER="PK",B.CENTRAL_DIRECTORY_END="PK",B.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK\x07",B.ZIP64_CENTRAL_DIRECTORY_END="PK",B.DATA_DESCRIPTOR="PK\x07\b"},{}],24:[function(T,L,B){var S=T("./GenericWorker"),v=T("../utils");function e(u){S.call(this,"ConvertWorker to "+u),this.destType=u}v.inherits(e,S),e.prototype.processChunk=function(u){this.push({data:v.transformTo(this.destType,u.data),meta:u.meta})},L.exports=e},{"../utils":32,"./GenericWorker":28}],25:[function(T,L,B){var S=T("./GenericWorker"),v=T("../crc32");function e(){S.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}T("../utils").inherits(e,S),e.prototype.processChunk=function(u){this.streamInfo.crc32=v(u.data,this.streamInfo.crc32||0),this.push(u)},L.exports=e},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(T,L,B){var S=T("../utils"),v=T("./GenericWorker");function e(u){v.call(this,"DataLengthProbe for "+u),this.propName=u,this.withStreamInfo(u,0)}S.inherits(e,v),e.prototype.processChunk=function(u){if(u){var r=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=r+u.data.length}v.prototype.processChunk.call(this,u)},L.exports=e},{"../utils":32,"./GenericWorker":28}],27:[function(T,L,B){var S=T("../utils"),v=T("./GenericWorker");function e(u){v.call(this,"DataWorker");var r=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,u.then(function(m){r.dataIsReady=!0,r.data=m,r.max=m&&m.length||0,r.type=S.getTypeOf(m),r.isPaused||r._tickAndRepeat()},function(m){r.error(m)})}S.inherits(e,v),e.prototype.cleanUp=function(){v.prototype.cleanUp.call(this),this.data=null},e.prototype.resume=function(){return!!v.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,S.delay(this._tickAndRepeat,[],this)),!0)},e.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(S.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},e.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var u=null,r=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":u=this.data.substring(this.index,r);break;case"uint8array":u=this.data.subarray(this.index,r);break;case"array":case"nodebuffer":u=this.data.slice(this.index,r)}return this.index=r,this.push({data:u,meta:{percent:this.max?this.index/this.max*100:0}})},L.exports=e},{"../utils":32,"./GenericWorker":28}],28:[function(T,L,B){function S(v){this.name=v||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}S.prototype={push:function(v){this.emit("data",v)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(v){this.emit("error",v)}return!0},error:function(v){return!this.isFinished&&(this.isPaused?this.generatedError=v:(this.isFinished=!0,this.emit("error",v),this.previous&&this.previous.error(v),this.cleanUp()),!0)},on:function(v,e){return this._listeners[v].push(e),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(v,e){if(this._listeners[v])for(var u=0;u "+v:v}},L.exports=S},{}],29:[function(T,L,B){var S=T("../utils"),v=T("./ConvertWorker"),e=T("./GenericWorker"),u=T("../base64"),r=T("../support"),m=T("../external"),f=null;if(r.nodestream)try{f=T("../nodejs/NodejsStreamOutputAdapter")}catch{}function a(y,h){return new m.Promise(function(d,p){var g=[],w=y._internalType,P=y._outputType,n=y._mimeType;y.on("data",function(s,t){g.push(s),h&&h(t)}).on("error",function(s){g=[],p(s)}).on("end",function(){try{var s=function(t,l,b){switch(t){case"blob":return S.newBlob(S.transformTo("arraybuffer",l),b);case"base64":return u.encode(l);default:return S.transformTo(t,l)}}(P,function(t,l){var b,k=0,E=null,_=0;for(b=0;b"u")B.blob=!1;else{var S=new ArrayBuffer(0);try{B.blob=new Blob([S],{type:"application/zip"}).size===0}catch{try{var v=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);v.append(S),B.blob=v.getBlob("application/zip").size===0}catch{B.blob=!1}}}try{B.nodestream=!!T("readable-stream").Readable}catch{B.nodestream=!1}},{"readable-stream":16}],31:[function(T,L,B){for(var S=T("./utils"),v=T("./support"),e=T("./nodejsUtils"),u=T("./stream/GenericWorker"),r=new Array(256),m=0;m<256;m++)r[m]=252<=m?6:248<=m?5:240<=m?4:224<=m?3:192<=m?2:1;r[254]=r[254]=1;function f(){u.call(this,"utf-8 decode"),this.leftOver=null}function a(){u.call(this,"utf-8 encode")}B.utf8encode=function(i){return v.nodebuffer?e.newBufferFrom(i,"utf-8"):function(y){var h,d,p,g,w,P=y.length,n=0;for(g=0;g>>6:(d<65536?h[w++]=224|d>>>12:(h[w++]=240|d>>>18,h[w++]=128|d>>>12&63),h[w++]=128|d>>>6&63),h[w++]=128|63&d);return h}(i)},B.utf8decode=function(i){return v.nodebuffer?S.transformTo("nodebuffer",i).toString("utf-8"):function(y){var h,d,p,g,w=y.length,P=new Array(2*w);for(h=d=0;h>10&1023,P[d++]=56320|1023&p)}return P.length!==d&&(P.subarray?P=P.subarray(0,d):P.length=d),S.applyFromCharCode(P)}(i=S.transformTo(v.uint8array?"uint8array":"array",i))},S.inherits(f,u),f.prototype.processChunk=function(i){var y=S.transformTo(v.uint8array?"uint8array":"array",i.data);if(this.leftOver&&this.leftOver.length){if(v.uint8array){var h=y;(y=new Uint8Array(h.length+this.leftOver.length)).set(this.leftOver,0),y.set(h,this.leftOver.length)}else y=this.leftOver.concat(y);this.leftOver=null}var d=function(g,w){var P;for((w=w||g.length)>g.length&&(w=g.length),P=w-1;0<=P&&(192&g[P])==128;)P--;return P<0||P===0?w:P+r[g[P]]>w?P:w}(y),p=y;d!==y.length&&(v.uint8array?(p=y.subarray(0,d),this.leftOver=y.subarray(d,y.length)):(p=y.slice(0,d),this.leftOver=y.slice(d,y.length))),this.push({data:B.utf8decode(p),meta:i.meta})},f.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:B.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},B.Utf8DecodeWorker=f,S.inherits(a,u),a.prototype.processChunk=function(i){this.push({data:B.utf8encode(i.data),meta:i.meta})},B.Utf8EncodeWorker=a},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(T,L,B){var S=T("./support"),v=T("./base64"),e=T("./nodejsUtils"),u=T("./external");function r(h){return h}function m(h,d){for(var p=0;p>8;this.dir=!!(16&this.externalFileAttributes),i==0&&(this.dosPermissions=63&this.externalFileAttributes),i==3&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||this.fileNameStr.slice(-1)!=="/"||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var i=S(this.extraFields[1].value);this.uncompressedSize===v.MAX_VALUE_32BITS&&(this.uncompressedSize=i.readInt(8)),this.compressedSize===v.MAX_VALUE_32BITS&&(this.compressedSize=i.readInt(8)),this.localHeaderOffset===v.MAX_VALUE_32BITS&&(this.localHeaderOffset=i.readInt(8)),this.diskNumberStart===v.MAX_VALUE_32BITS&&(this.diskNumberStart=i.readInt(4))}},readExtraFields:function(i){var y,h,d,p=i.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});i.index+4>>6:(i<65536?a[d++]=224|i>>>12:(a[d++]=240|i>>>18,a[d++]=128|i>>>12&63),a[d++]=128|i>>>6&63),a[d++]=128|63&i);return a},B.buf2binstring=function(f){return m(f,f.length)},B.binstring2buf=function(f){for(var a=new S.Buf8(f.length),i=0,y=a.length;i>10&1023,g[y++]=56320|1023&h)}return m(g,y)},B.utf8border=function(f,a){var i;for((a=a||f.length)>f.length&&(a=f.length),i=a-1;0<=i&&(192&f[i])==128;)i--;return i<0||i===0?a:i+u[f[i]]>a?i:a}},{"./common":41}],43:[function(T,L,B){L.exports=function(S,v,e,u){for(var r=65535&S|0,m=S>>>16&65535|0,f=0;e!==0;){for(e-=f=2e3>>1:v>>>1;e[u]=v}return e}();L.exports=function(v,e,u,r){var m=S,f=r+u;v^=-1;for(var a=r;a>>8^m[255&(v^e[a])];return-1^v}},{}],46:[function(T,L,B){var S,v=T("../utils/common"),e=T("./trees"),u=T("./adler32"),r=T("./crc32"),m=T("./messages"),f=0,a=4,i=0,y=-2,h=-1,d=4,p=2,g=8,w=9,P=286,n=30,s=19,t=2*P+1,l=15,b=3,k=258,E=k+b+1,_=42,C=113,o=1,R=2,V=3,F=4;function q(c,I){return c.msg=m[I],I}function W(c){return(c<<1)-(4c.avail_out&&(M=c.avail_out),M!==0&&(v.arraySet(c.output,I.pending_buf,I.pending_out,M,c.next_out),c.next_out+=M,I.pending_out+=M,c.total_out+=M,c.avail_out-=M,I.pending-=M,I.pending===0&&(I.pending_out=0))}function O(c,I){e._tr_flush_block(c,0<=c.block_start?c.block_start:-1,c.strstart-c.block_start,I),c.block_start=c.strstart,z(c.strm)}function J(c,I){c.pending_buf[c.pending++]=I}function X(c,I){c.pending_buf[c.pending++]=I>>>8&255,c.pending_buf[c.pending++]=255&I}function Z(c,I){var M,A,x=c.max_chain_length,D=c.strstart,j=c.prev_length,U=c.nice_match,N=c.strstart>c.w_size-E?c.strstart-(c.w_size-E):0,H=c.window,G=c.w_mask,$=c.prev,K=c.strstart+k,re=H[D+j-1],ee=H[D+j];c.prev_length>=c.good_match&&(x>>=2),U>c.lookahead&&(U=c.lookahead);do if(H[(M=I)+j]===ee&&H[M+j-1]===re&&H[M]===H[D]&&H[++M]===H[D+1]){D+=2,M++;do;while(H[++D]===H[++M]&&H[++D]===H[++M]&&H[++D]===H[++M]&&H[++D]===H[++M]&&H[++D]===H[++M]&&H[++D]===H[++M]&&H[++D]===H[++M]&&H[++D]===H[++M]&&DN&&--x!=0);return j<=c.lookahead?j:c.lookahead}function ae(c){var I,M,A,x,D,j,U,N,H,G,$=c.w_size;do{if(x=c.window_size-c.lookahead-c.strstart,c.strstart>=$+($-E)){for(v.arraySet(c.window,c.window,$,$,0),c.match_start-=$,c.strstart-=$,c.block_start-=$,I=M=c.hash_size;A=c.head[--I],c.head[I]=$<=A?A-$:0,--M;);for(I=M=$;A=c.prev[--I],c.prev[I]=$<=A?A-$:0,--M;);x+=$}if(c.strm.avail_in===0)break;if(j=c.strm,U=c.window,N=c.strstart+c.lookahead,H=x,G=void 0,G=j.avail_in,H=b)for(D=c.strstart-c.insert,c.ins_h=c.window[D],c.ins_h=(c.ins_h<=b&&(c.ins_h=(c.ins_h<=b)if(A=e._tr_tally(c,c.strstart-c.match_start,c.match_length-b),c.lookahead-=c.match_length,c.match_length<=c.max_lazy_match&&c.lookahead>=b){for(c.match_length--;c.strstart++,c.ins_h=(c.ins_h<=b&&(c.ins_h=(c.ins_h<=b&&c.match_length<=c.prev_length){for(x=c.strstart+c.lookahead-b,A=e._tr_tally(c,c.strstart-1-c.prev_match,c.prev_length-b),c.lookahead-=c.prev_length-1,c.prev_length-=2;++c.strstart<=x&&(c.ins_h=(c.ins_h<c.pending_buf_size-5&&(M=c.pending_buf_size-5);;){if(c.lookahead<=1){if(ae(c),c.lookahead===0&&I===f)return o;if(c.lookahead===0)break}c.strstart+=c.lookahead,c.lookahead=0;var A=c.block_start+M;if((c.strstart===0||c.strstart>=A)&&(c.lookahead=c.strstart-A,c.strstart=A,O(c,!1),c.strm.avail_out===0)||c.strstart-c.block_start>=c.w_size-E&&(O(c,!1),c.strm.avail_out===0))return o}return c.insert=0,I===a?(O(c,!0),c.strm.avail_out===0?V:F):(c.strstart>c.block_start&&(O(c,!1),c.strm.avail_out),o)}),new te(4,4,8,4,le),new te(4,5,16,8,le),new te(4,6,32,32,le),new te(4,4,16,16,Q),new te(8,16,32,32,Q),new te(8,16,128,128,Q),new te(8,32,128,256,Q),new te(32,128,258,1024,Q),new te(32,258,258,4096,Q)],B.deflateInit=function(c,I){return he(c,I,g,15,8,0)},B.deflateInit2=he,B.deflateReset=de,B.deflateResetKeep=se,B.deflateSetHeader=function(c,I){return c&&c.state?c.state.wrap!==2?y:(c.state.gzhead=I,i):y},B.deflate=function(c,I){var M,A,x,D;if(!c||!c.state||5>8&255),J(A,A.gzhead.time>>16&255),J(A,A.gzhead.time>>24&255),J(A,A.level===9?2:2<=A.strategy||A.level<2?4:0),J(A,255&A.gzhead.os),A.gzhead.extra&&A.gzhead.extra.length&&(J(A,255&A.gzhead.extra.length),J(A,A.gzhead.extra.length>>8&255)),A.gzhead.hcrc&&(c.adler=r(c.adler,A.pending_buf,A.pending,0)),A.gzindex=0,A.status=69):(J(A,0),J(A,0),J(A,0),J(A,0),J(A,0),J(A,A.level===9?2:2<=A.strategy||A.level<2?4:0),J(A,3),A.status=C);else{var j=g+(A.w_bits-8<<4)<<8;j|=(2<=A.strategy||A.level<2?0:A.level<6?1:A.level===6?2:3)<<6,A.strstart!==0&&(j|=32),j+=31-j%31,A.status=C,X(A,j),A.strstart!==0&&(X(A,c.adler>>>16),X(A,65535&c.adler)),c.adler=1}if(A.status===69)if(A.gzhead.extra){for(x=A.pending;A.gzindex<(65535&A.gzhead.extra.length)&&(A.pending!==A.pending_buf_size||(A.gzhead.hcrc&&A.pending>x&&(c.adler=r(c.adler,A.pending_buf,A.pending-x,x)),z(c),x=A.pending,A.pending!==A.pending_buf_size));)J(A,255&A.gzhead.extra[A.gzindex]),A.gzindex++;A.gzhead.hcrc&&A.pending>x&&(c.adler=r(c.adler,A.pending_buf,A.pending-x,x)),A.gzindex===A.gzhead.extra.length&&(A.gzindex=0,A.status=73)}else A.status=73;if(A.status===73)if(A.gzhead.name){x=A.pending;do{if(A.pending===A.pending_buf_size&&(A.gzhead.hcrc&&A.pending>x&&(c.adler=r(c.adler,A.pending_buf,A.pending-x,x)),z(c),x=A.pending,A.pending===A.pending_buf_size)){D=1;break}D=A.gzindexx&&(c.adler=r(c.adler,A.pending_buf,A.pending-x,x)),D===0&&(A.gzindex=0,A.status=91)}else A.status=91;if(A.status===91)if(A.gzhead.comment){x=A.pending;do{if(A.pending===A.pending_buf_size&&(A.gzhead.hcrc&&A.pending>x&&(c.adler=r(c.adler,A.pending_buf,A.pending-x,x)),z(c),x=A.pending,A.pending===A.pending_buf_size)){D=1;break}D=A.gzindexx&&(c.adler=r(c.adler,A.pending_buf,A.pending-x,x)),D===0&&(A.status=103)}else A.status=103;if(A.status===103&&(A.gzhead.hcrc?(A.pending+2>A.pending_buf_size&&z(c),A.pending+2<=A.pending_buf_size&&(J(A,255&c.adler),J(A,c.adler>>8&255),c.adler=0,A.status=C)):A.status=C),A.pending!==0){if(z(c),c.avail_out===0)return A.last_flush=-1,i}else if(c.avail_in===0&&W(I)<=W(M)&&I!==a)return q(c,-5);if(A.status===666&&c.avail_in!==0)return q(c,-5);if(c.avail_in!==0||A.lookahead!==0||I!==f&&A.status!==666){var U=A.strategy===2?function(N,H){for(var G;;){if(N.lookahead===0&&(ae(N),N.lookahead===0)){if(H===f)return o;break}if(N.match_length=0,G=e._tr_tally(N,0,N.window[N.strstart]),N.lookahead--,N.strstart++,G&&(O(N,!1),N.strm.avail_out===0))return o}return N.insert=0,H===a?(O(N,!0),N.strm.avail_out===0?V:F):N.last_lit&&(O(N,!1),N.strm.avail_out===0)?o:R}(A,I):A.strategy===3?function(N,H){for(var G,$,K,re,ee=N.window;;){if(N.lookahead<=k){if(ae(N),N.lookahead<=k&&H===f)return o;if(N.lookahead===0)break}if(N.match_length=0,N.lookahead>=b&&0N.lookahead&&(N.match_length=N.lookahead)}if(N.match_length>=b?(G=e._tr_tally(N,1,N.match_length-b),N.lookahead-=N.match_length,N.strstart+=N.match_length,N.match_length=0):(G=e._tr_tally(N,0,N.window[N.strstart]),N.lookahead--,N.strstart++),G&&(O(N,!1),N.strm.avail_out===0))return o}return N.insert=0,H===a?(O(N,!0),N.strm.avail_out===0?V:F):N.last_lit&&(O(N,!1),N.strm.avail_out===0)?o:R}(A,I):S[A.level].func(A,I);if(U!==V&&U!==F||(A.status=666),U===o||U===V)return c.avail_out===0&&(A.last_flush=-1),i;if(U===R&&(I===1?e._tr_align(A):I!==5&&(e._tr_stored_block(A,0,0,!1),I===3&&(Y(A.head),A.lookahead===0&&(A.strstart=0,A.block_start=0,A.insert=0))),z(c),c.avail_out===0))return A.last_flush=-1,i}return I!==a?i:A.wrap<=0?1:(A.wrap===2?(J(A,255&c.adler),J(A,c.adler>>8&255),J(A,c.adler>>16&255),J(A,c.adler>>24&255),J(A,255&c.total_in),J(A,c.total_in>>8&255),J(A,c.total_in>>16&255),J(A,c.total_in>>24&255)):(X(A,c.adler>>>16),X(A,65535&c.adler)),z(c),0=M.w_size&&(D===0&&(Y(M.head),M.strstart=0,M.block_start=0,M.insert=0),H=new v.Buf8(M.w_size),v.arraySet(H,I,G-M.w_size,M.w_size,0),I=H,G=M.w_size),j=c.avail_in,U=c.next_in,N=c.input,c.avail_in=G,c.next_in=0,c.input=I,ae(M);M.lookahead>=b;){for(A=M.strstart,x=M.lookahead-(b-1);M.ins_h=(M.ins_h<>>=b=l>>>24,w-=b,(b=l>>>16&255)===0)R[m++]=65535&l;else{if(!(16&b)){if(!(64&b)){l=P[(65535&l)+(g&(1<>>=b,w-=b),w<15&&(g+=o[u++]<>>=b=l>>>24,w-=b,!(16&(b=l>>>16&255))){if(!(64&b)){l=n[(65535&l)+(g&(1<>>=b,w-=b,(b=m-f)>3,g&=(1<<(w-=k<<3))-1,S.next_in=u,S.next_out=m,S.avail_in=u>>24&255)+(_>>>8&65280)+((65280&_)<<8)+((255&_)<<24)}function g(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new S.Buf16(320),this.work=new S.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function w(_){var C;return _&&_.state?(C=_.state,_.total_in=_.total_out=C.total=0,_.msg="",C.wrap&&(_.adler=1&C.wrap),C.mode=y,C.last=0,C.havedict=0,C.dmax=32768,C.head=null,C.hold=0,C.bits=0,C.lencode=C.lendyn=new S.Buf32(h),C.distcode=C.distdyn=new S.Buf32(d),C.sane=1,C.back=-1,a):i}function P(_){var C;return _&&_.state?((C=_.state).wsize=0,C.whave=0,C.wnext=0,w(_)):i}function n(_,C){var o,R;return _&&_.state?(R=_.state,C<0?(o=0,C=-C):(o=1+(C>>4),C<48&&(C&=15)),C&&(C<8||15=F.wsize?(S.arraySet(F.window,C,o-F.wsize,F.wsize,0),F.wnext=0,F.whave=F.wsize):(R<(V=F.wsize-F.wnext)&&(V=R),S.arraySet(F.window,C,o-R,V,F.wnext),(R-=V)?(S.arraySet(F.window,C,o-R,R,0),F.wnext=R,F.whave=F.wsize):(F.wnext+=V,F.wnext===F.wsize&&(F.wnext=0),F.whave>>8&255,o.check=e(o.check,D,2,0),O=z=0,o.mode=2;break}if(o.flags=0,o.head&&(o.head.done=!1),!(1&o.wrap)||(((255&z)<<8)+(z>>8))%31){_.msg="incorrect header check",o.mode=30;break}if((15&z)!=8){_.msg="unknown compression method",o.mode=30;break}if(O-=4,c=8+(15&(z>>>=4)),o.wbits===0)o.wbits=c;else if(c>o.wbits){_.msg="invalid window size",o.mode=30;break}o.dmax=1<>8&1),512&o.flags&&(D[0]=255&z,D[1]=z>>>8&255,o.check=e(o.check,D,2,0)),O=z=0,o.mode=3;case 3:for(;O<32;){if(W===0)break e;W--,z+=R[F++]<>>8&255,D[2]=z>>>16&255,D[3]=z>>>24&255,o.check=e(o.check,D,4,0)),O=z=0,o.mode=4;case 4:for(;O<16;){if(W===0)break e;W--,z+=R[F++]<>8),512&o.flags&&(D[0]=255&z,D[1]=z>>>8&255,o.check=e(o.check,D,2,0)),O=z=0,o.mode=5;case 5:if(1024&o.flags){for(;O<16;){if(W===0)break e;W--,z+=R[F++]<>>8&255,o.check=e(o.check,D,2,0)),O=z=0}else o.head&&(o.head.extra=null);o.mode=6;case 6:if(1024&o.flags&&(W<(Z=o.length)&&(Z=W),Z&&(o.head&&(c=o.head.extra_len-o.length,o.head.extra||(o.head.extra=new Array(o.head.extra_len)),S.arraySet(o.head.extra,R,F,Z,c)),512&o.flags&&(o.check=e(o.check,R,Z,F)),W-=Z,F+=Z,o.length-=Z),o.length))break e;o.length=0,o.mode=7;case 7:if(2048&o.flags){if(W===0)break e;for(Z=0;c=R[F+Z++],o.head&&c&&o.length<65536&&(o.head.name+=String.fromCharCode(c)),c&&Z>9&1,o.head.done=!0),_.adler=o.check=0,o.mode=12;break;case 10:for(;O<32;){if(W===0)break e;W--,z+=R[F++]<>>=7&O,O-=7&O,o.mode=27;break}for(;O<3;){if(W===0)break e;W--,z+=R[F++]<>>=1)){case 0:o.mode=14;break;case 1:if(k(o),o.mode=20,C!==6)break;z>>>=2,O-=2;break e;case 2:o.mode=17;break;case 3:_.msg="invalid block type",o.mode=30}z>>>=2,O-=2;break;case 14:for(z>>>=7&O,O-=7&O;O<32;){if(W===0)break e;W--,z+=R[F++]<>>16^65535)){_.msg="invalid stored block lengths",o.mode=30;break}if(o.length=65535&z,O=z=0,o.mode=15,C===6)break e;case 15:o.mode=16;case 16:if(Z=o.length){if(W>>=5,O-=5,o.ndist=1+(31&z),z>>>=5,O-=5,o.ncode=4+(15&z),z>>>=4,O-=4,286>>=3,O-=3}for(;o.have<19;)o.lens[j[o.have++]]=0;if(o.lencode=o.lendyn,o.lenbits=7,M={bits:o.lenbits},I=r(0,o.lens,0,19,o.lencode,0,o.work,M),o.lenbits=M.bits,I){_.msg="invalid code lengths set",o.mode=30;break}o.have=0,o.mode=19;case 19:for(;o.have>>16&255,oe=65535&x,!((Q=x>>>24)<=O);){if(W===0)break e;W--,z+=R[F++]<>>=Q,O-=Q,o.lens[o.have++]=oe;else{if(oe===16){for(A=Q+2;O>>=Q,O-=Q,o.have===0){_.msg="invalid bit length repeat",o.mode=30;break}c=o.lens[o.have-1],Z=3+(3&z),z>>>=2,O-=2}else if(oe===17){for(A=Q+3;O>>=Q)),z>>>=3,O-=3}else{for(A=Q+7;O>>=Q)),z>>>=7,O-=7}if(o.have+Z>o.nlen+o.ndist){_.msg="invalid bit length repeat",o.mode=30;break}for(;Z--;)o.lens[o.have++]=c}}if(o.mode===30)break;if(o.lens[256]===0){_.msg="invalid code -- missing end-of-block",o.mode=30;break}if(o.lenbits=9,M={bits:o.lenbits},I=r(m,o.lens,0,o.nlen,o.lencode,0,o.work,M),o.lenbits=M.bits,I){_.msg="invalid literal/lengths set",o.mode=30;break}if(o.distbits=6,o.distcode=o.distdyn,M={bits:o.distbits},I=r(f,o.lens,o.nlen,o.ndist,o.distcode,0,o.work,M),o.distbits=M.bits,I){_.msg="invalid distances set",o.mode=30;break}if(o.mode=20,C===6)break e;case 20:o.mode=21;case 21:if(6<=W&&258<=Y){_.next_out=q,_.avail_out=Y,_.next_in=F,_.avail_in=W,o.hold=z,o.bits=O,u(_,X),q=_.next_out,V=_.output,Y=_.avail_out,F=_.next_in,R=_.input,W=_.avail_in,z=o.hold,O=o.bits,o.mode===12&&(o.back=-1);break}for(o.back=0;te=(x=o.lencode[z&(1<>>16&255,oe=65535&x,!((Q=x>>>24)<=O);){if(W===0)break e;W--,z+=R[F++]<>se)])>>>16&255,oe=65535&x,!(se+(Q=x>>>24)<=O);){if(W===0)break e;W--,z+=R[F++]<>>=se,O-=se,o.back+=se}if(z>>>=Q,O-=Q,o.back+=Q,o.length=oe,te===0){o.mode=26;break}if(32&te){o.back=-1,o.mode=12;break}if(64&te){_.msg="invalid literal/length code",o.mode=30;break}o.extra=15&te,o.mode=22;case 22:if(o.extra){for(A=o.extra;O>>=o.extra,O-=o.extra,o.back+=o.extra}o.was=o.length,o.mode=23;case 23:for(;te=(x=o.distcode[z&(1<>>16&255,oe=65535&x,!((Q=x>>>24)<=O);){if(W===0)break e;W--,z+=R[F++]<>se)])>>>16&255,oe=65535&x,!(se+(Q=x>>>24)<=O);){if(W===0)break e;W--,z+=R[F++]<>>=se,O-=se,o.back+=se}if(z>>>=Q,O-=Q,o.back+=Q,64&te){_.msg="invalid distance code",o.mode=30;break}o.offset=oe,o.extra=15&te,o.mode=24;case 24:if(o.extra){for(A=o.extra;O>>=o.extra,O-=o.extra,o.back+=o.extra}if(o.offset>o.dmax){_.msg="invalid distance too far back",o.mode=30;break}o.mode=25;case 25:if(Y===0)break e;if(Z=X-Y,o.offset>Z){if((Z=o.offset-Z)>o.whave&&o.sane){_.msg="invalid distance too far back",o.mode=30;break}ae=Z>o.wnext?(Z-=o.wnext,o.wsize-Z):o.wnext-Z,Z>o.length&&(Z=o.length),le=o.window}else le=V,ae=q-o.offset,Z=o.length;for(Yt?(b=ae[le+d[C]],O[J+d[C]]):(b=96,0),g=1<<_-q,o=w=1<>q)+(w-=g)]=l<<24|b<<16|k|0,w!==0;);for(g=1<<_-1;z&g;)g>>=1;if(g!==0?(z&=g-1,z+=g):z=0,C++,--X[_]==0){if(_===R)break;_=f[a+d[C]]}if(V<_&&(z&n)!==P){for(q===0&&(q=V),s+=o,W=1<<(F=_-q);F+q>>7)]}function J(x,D){x.pending_buf[x.pending++]=255&D,x.pending_buf[x.pending++]=D>>>8&255}function X(x,D,j){x.bi_valid>p-j?(x.bi_buf|=D<>p-x.bi_valid,x.bi_valid+=j-p):(x.bi_buf|=D<>>=1,j<<=1,0<--D;);return j>>>1}function le(x,D,j){var U,N,H=new Array(d+1),G=0;for(U=1;U<=d;U++)H[U]=G=G+j[U-1]<<1;for(N=0;N<=D;N++){var $=x[2*N+1];$!==0&&(x[2*N]=ae(H[$]++,$))}}function Q(x){var D;for(D=0;D>1;1<=j;j--)se(x,H,j);for(N=K;j=x.heap[1],x.heap[1]=x.heap[x.heap_len--],se(x,H,1),U=x.heap[1],x.heap[--x.heap_max]=j,x.heap[--x.heap_max]=U,H[2*N]=H[2*j]+H[2*U],x.depth[N]=(x.depth[j]>=x.depth[U]?x.depth[j]:x.depth[U])+1,H[2*j+1]=H[2*U+1]=N,x.heap[1]=N++,se(x,H,1),2<=x.heap_len;);x.heap[--x.heap_max]=x.heap[1],function(ee,ue){var me,pe,ge,ie,ye,we,fe=ue.dyn_tree,Se=ue.max_code,Te=ue.stat_desc.static_tree,Ee=ue.stat_desc.has_stree,De=ue.stat_desc.extra_bits,Ae=ue.stat_desc.extra_base,be=ue.stat_desc.max_length,ve=0;for(ie=0;ie<=d;ie++)ee.bl_count[ie]=0;for(fe[2*ee.heap[ee.heap_max]+1]=0,me=ee.heap_max+1;me>=7;N>>=1)if(1&re&&$.dyn_ltree[2*K]!==0)return v;if($.dyn_ltree[18]!==0||$.dyn_ltree[20]!==0||$.dyn_ltree[26]!==0)return e;for(K=32;K>>3,(H=x.static_len+3+7>>>3)<=N&&(N=H)):N=H=j+5,j+4<=N&&D!==-1?A(x,D,j,U):x.strategy===4||H===N?(X(x,2+(U?1:0),3),de(x,E,_)):(X(x,4+(U?1:0),3),function($,K,re,ee){var ue;for(X($,K-257,5),X($,re-1,5),X($,ee-4,4),ue=0;ue>>8&255,x.pending_buf[x.d_buf+2*x.last_lit+1]=255&D,x.pending_buf[x.l_buf+x.last_lit]=255&j,x.last_lit++,D===0?x.dyn_ltree[2*j]++:(x.matches++,D--,x.dyn_ltree[2*(o[j]+f+1)]++,x.dyn_dtree[2*O(D)]++),x.last_lit===x.lit_bufsize-1},B._tr_align=function(x){X(x,2,3),Z(x,w,E),function(D){D.bi_valid===16?(J(D,D.bi_buf),D.bi_buf=0,D.bi_valid=0):8<=D.bi_valid&&(D.pending_buf[D.pending++]=255&D.bi_buf,D.bi_buf>>=8,D.bi_valid-=8)}(x)}},{"../utils/common":41}],53:[function(T,L,B){L.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(T,L,B){(function(S){(function(v,e){if(!v.setImmediate){var u,r,m,f,a=1,i={},y=!1,h=v.document,d=Object.getPrototypeOf&&Object.getPrototypeOf(v);d=d&&d.setTimeout?d:v,u={}.toString.call(v.process)==="[object process]"?function(P){process.nextTick(function(){g(P)})}:function(){if(v.postMessage&&!v.importScripts){var P=!0,n=v.onmessage;return v.onmessage=function(){P=!1},v.postMessage("","*"),v.onmessage=n,P}}()?(f="setImmediate$"+Math.random()+"$",v.addEventListener?v.addEventListener("message",w,!1):v.attachEvent("onmessage",w),function(P){v.postMessage(f+P,"*")}):v.MessageChannel?((m=new MessageChannel).port1.onmessage=function(P){g(P.data)},function(P){m.port2.postMessage(P)}):h&&"onreadystatechange"in h.createElement("script")?(r=h.documentElement,function(P){var n=h.createElement("script");n.onreadystatechange=function(){g(P),n.onreadystatechange=null,r.removeChild(n),n=null},r.appendChild(n)}):function(P){setTimeout(g,0,P)},d.setImmediate=function(P){typeof P!="function"&&(P=new Function(""+P));for(var n=new Array(arguments.length-1),s=0;s"u"?S===void 0?this:S:self)}).call(this,typeof _e<"u"?_e:typeof self<"u"?self:typeof window<"u"?window:{})},{}]},{},[10])(10)})}(xe)),xe.exports}(function(ne,ce){(function(T,L){ne.exports=L(Be())})(globalThis,T=>(()=>{var L={438:(v,e,u)=>{u.r(e),u.d(e,{default:()=>g});var r=u(537),m=u.n(r),f=u(645),a=u.n(f),i=u(806),y=u.n(i),h=new URL(u(583),u.b),d=a()(m()),p=y()(h);d.push([v.id,`@namespace "http://www.w3.org/1998/Math/MathML";math{display:inline-block;line-height:initial}mfrac{display:inline-block;vertical-align:-50%;text-align:center}mfrac>:first-child{border-bottom:solid thin currentColor}mfrac>*{display:block}msub>:nth-child(2){font-size:smaller;vertical-align:sub}msup>:nth-child(2){font-size:smaller;vertical-align:super}munder,mover,munderover{display:inline-flex;flex-flow:column nowrap;vertical-align:middle;text-align:center}munder>:not(:first-child),mover>:not(:first-child),munderover>:not(:first-child){font-size:smaller}munderover>:last-child{order:-1}mroot,msqrt{position:relative;display:inline-block;border-top:solid thin currentColor;margin-top:.5px;vertical-align:middle;margin-left:1ch}mroot:before,msqrt:before{content:"";display:inline-block;position:absolute;width:1ch;left:-1ch;top:-1px;bottom:0;background-image:url(${p})}`,"",{version:3,sources:["webpack://./src/mathml.scss"],names:[],mappings:"AAAA,+CAAA,CAEA,KACI,oBAAA,CACA,mBAAA,CAGJ,MACI,oBAAA,CACA,mBAAA,CACA,iBAAA,CAEA,mBACI,qCAAA,CAGJ,QACI,aAAA,CAKJ,mBACI,iBAAA,CACA,kBAAA,CAKJ,mBACI,iBAAA,CACA,oBAAA,CAIR,wBACI,mBAAA,CACA,uBAAA,CACA,qBAAA,CACA,iBAAA,CAEA,iFACI,iBAAA,CAKJ,uBAAA,QAAA,CAGJ,YACI,iBAAA,CACA,oBAAA,CACA,kCAAA,CACA,eAAA,CACA,qBAAA,CACA,eAAA,CAEA,0BACI,UAAA,CACA,oBAAA,CACA,iBAAA,CACA,SAAA,CACA,SAAA,CACA,QAAA,CACA,QAAA,CACA,wDAAA",sourcesContent:[`@namespace "http://www.w3.org/1998/Math/MathML";\r +\r +math {\r + display: inline-block;\r + line-height: initial;\r +}\r +\r +mfrac {\r + display: inline-block;\r + vertical-align: -50%;\r + text-align: center;\r +\r + &>:first-child {\r + border-bottom: solid thin currentColor;\r + }\r +\r + &>* {\r + display: block;\r + }\r +}\r +\r +msub {\r + &>:nth-child(2) {\r + font-size: smaller;\r + vertical-align: sub;\r + }\r +}\r +\r +msup {\r + &>:nth-child(2) {\r + font-size: smaller;\r + vertical-align: super;\r + }\r +}\r +\r +munder, mover, munderover {\r + display: inline-flex;\r + flex-flow: column nowrap;\r + vertical-align: middle;\r + text-align: center;\r +\r + &>:not(:first-child) {\r + font-size: smaller;\r + }\r +}\r +\r +munderover {\r + &>:last-child { order: -1; }\r +}\r +\r +mroot, msqrt {\r + position: relative;\r + display: inline-block;\r + border-top: solid thin currentColor; \r + margin-top: 0.5px;\r + vertical-align: middle; \r + margin-left: 1ch; \r +\r + &:before {\r + content: "";\r + display: inline-block;\r + position: absolute;\r + width: 1ch;\r + left: -1ch;\r + top: -1px;\r + bottom: 0;\r + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 100' preserveAspectRatio='none'%3E%3Cpath d='m0,75 l5,0 l5,25 l10,-100' stroke='black' fill='none' vector-effect='non-scaling-stroke'/%3E%3C/svg%3E");\r + }\r +}`],sourceRoot:""}]);const g=d.toString()},645:v=>{v.exports=function(e){var u=[];return u.toString=function(){return this.map(function(r){var m="",f=r[5]!==void 0;return r[4]&&(m+="@supports (".concat(r[4],") {")),r[2]&&(m+="@media ".concat(r[2]," {")),f&&(m+="@layer".concat(r[5].length>0?" ".concat(r[5]):""," {")),m+=e(r),f&&(m+="}"),r[2]&&(m+="}"),r[4]&&(m+="}"),m}).join("")},u.i=function(r,m,f,a,i){typeof r=="string"&&(r=[[null,r,void 0]]);var y={};if(f)for(var h=0;h0?" ".concat(g[5]):""," {").concat(g[1],"}")),g[5]=i),m&&(g[2]&&(g[1]="@media ".concat(g[2]," {").concat(g[1],"}")),g[2]=m),a&&(g[4]?(g[1]="@supports (".concat(g[4],") {").concat(g[1],"}"),g[4]=a):g[4]="".concat(a)),u.push(g))}},u}},806:v=>{v.exports=function(e,u){return u||(u={}),e&&(e=String(e.__esModule?e.default:e),/^['"].*['"]$/.test(e)&&(e=e.slice(1,-1)),u.hash&&(e+=u.hash),/["'() \t\n]|(%20)/.test(e)||u.needQuotes?'"'.concat(e.replace(/"/g,'\\"').replace(/\n/g,"\\n"),'"'):e)}},537:v=>{v.exports=function(e){var u=e[1],r=e[3];if(!r)return u;if(typeof btoa=="function"){var m=btoa(unescape(encodeURIComponent(JSON.stringify(r)))),f="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(m),a="/*# ".concat(f," */");return[u].concat([a]).join(` +`)}return[u].join(` +`)}},522:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.OpenXmlPackage=void 0;const r=u(626),m=u(472),f=u(593),a=u(461);class i{constructor(h,d){this._zip=h,this.options=d,this.xmlParser=new m.XmlParser}get(h){return this._zip.files[function(d){return d.startsWith("/")?d.substr(1):d}(h)]}update(h,d){this._zip.file(h,d)}static async load(h,d){const p=await r.loadAsync(h);return new i(p,d)}save(h="blob"){return this._zip.generateAsync({type:h})}load(h,d="string"){var p,g;return(g=(p=this.get(h))===null||p===void 0?void 0:p.async(d))!==null&&g!==void 0?g:Promise.resolve(null)}async loadRelationships(h=null){let d="_rels/.rels";if(h!=null){const[g,w]=(0,f.splitPath)(h);d=`${g}_rels/${w}.rels`}const p=await this.load(d);return p?(0,a.parseRelationships)(this.parseXmlDocument(p).firstElementChild,this.xmlParser):null}parseXmlDocument(h){return(0,m.parseXmlString)(h,this.options.trimXmlDeclaration)}}e.OpenXmlPackage=i},530:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.Part=void 0;const r=u(472);e.Part=class{constructor(m,f){this._package=m,this.path=f}async load(){this.rels=await this._package.loadRelationships(this.path);const m=await this._package.load(this.path),f=this._package.parseXmlDocument(m);this._package.options.keepOrigin&&(this._xmlDocument=f),this.parseXml(f.firstElementChild)}save(){this._package.update(this.path,(0,r.serializeXmlString)(this._xmlDocument))}parseXml(m){}}},461:(v,e)=>{var u;Object.defineProperty(e,"__esModule",{value:!0}),e.parseRelationships=e.RelationshipTypes=void 0,function(r){r.OfficeDocument="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",r.FontTable="http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable",r.Image="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",r.Numbering="http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering",r.Styles="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles",r.StylesWithEffects="http://schemas.microsoft.com/office/2007/relationships/stylesWithEffects",r.Theme="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme",r.Settings="http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings",r.WebSettings="http://schemas.openxmlformats.org/officeDocument/2006/relationships/webSettings",r.Hyperlink="http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink",r.Footnotes="http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes",r.Endnotes="http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes",r.Footer="http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer",r.Header="http://schemas.openxmlformats.org/officeDocument/2006/relationships/header",r.ExtendedProperties="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties",r.CoreProperties="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties",r.CustomProperties="http://schemas.openxmlformats.org/package/2006/relationships/metadata/custom-properties"}(u||(e.RelationshipTypes=u={})),e.parseRelationships=function(r,m){return m.elements(r).map(f=>({id:m.attr(f,"Id"),type:m.attr(f,"Type"),target:m.attr(f,"Target"),targetMode:m.attr(f,"TargetMode")}))}},168:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.DocumentParser=e.autos=void 0;const r=u(120),m=u(109),f=u(59),a=u(472),i=u(488),y=u(172),h=u(149),d=u(320);e.autos={shd:"inherit",color:"black",borderColor:"black",highlight:"transparent"};const p=[],g={oMath:r.DomType.MmlMath,oMathPara:r.DomType.MmlMathParagraph,f:r.DomType.MmlFraction,func:r.DomType.MmlFunction,fName:r.DomType.MmlFunctionName,num:r.DomType.MmlNumerator,den:r.DomType.MmlDenominator,rad:r.DomType.MmlRadical,deg:r.DomType.MmlDegree,e:r.DomType.MmlBase,sSup:r.DomType.MmlSuperscript,sSub:r.DomType.MmlSubscript,sPre:r.DomType.MmlPreSubSuper,sup:r.DomType.MmlSuperArgument,sub:r.DomType.MmlSubArgument,d:r.DomType.MmlDelimiter,nary:r.DomType.MmlNary,eqArr:r.DomType.MmlEquationArray,lim:r.DomType.MmlLimit,limLow:r.DomType.MmlLimitLower,m:r.DomType.MmlMatrix,mr:r.DomType.MmlMatrixRow,box:r.DomType.MmlBox,bar:r.DomType.MmlBar,groupChr:r.DomType.MmlGroupChar};e.DocumentParser=class{constructor(s){this.options=Object.assign({ignoreWidth:!1,debug:!1},s)}parseNotes(s,t,l){var b=[];for(let k of a.default.elements(s,t)){const E=new l;E.id=a.default.attr(k,"id"),E.noteType=a.default.attr(k,"type"),E.children=this.parseBodyElements(k),b.push(E)}return b}parseDocumentFile(s){var t=a.default.element(s,"body"),l=a.default.element(s,"background"),b=a.default.element(t,"sectPr");return{type:r.DomType.Document,children:this.parseBodyElements(t),props:b?(0,f.parseSectionProperties)(b,a.default):{},cssStyle:l?this.parseBackground(l):{}}}parseBackground(s){var t={},l=P.colorAttr(s,"color");return l&&(t["background-color"]=l),t}parseBodyElements(s){var t=[];for(let l of a.default.elements(s))switch(l.localName){case"p":t.push(this.parseParagraph(l));break;case"tbl":t.push(this.parseTable(l));break;case"sdt":t.push(...this.parseSdt(l,b=>this.parseBodyElements(b)))}return t}parseStylesFile(s){var t=[];return P.foreach(s,l=>{switch(l.localName){case"style":t.push(this.parseStyle(l));break;case"docDefaults":t.push(this.parseDefaultStyles(l))}}),t}parseDefaultStyles(s){var t={id:null,name:null,target:null,basedOn:null,styles:[]};return P.foreach(s,l=>{switch(l.localName){case"rPrDefault":var b=a.default.element(l,"rPr");b&&t.styles.push({target:"span",values:this.parseDefaultProperties(b,{})});break;case"pPrDefault":var k=a.default.element(l,"pPr");k&&t.styles.push({target:"p",values:this.parseDefaultProperties(k,{})})}}),t}parseStyle(s){var t={id:a.default.attr(s,"styleId"),isDefault:a.default.boolAttr(s,"default"),name:null,target:null,basedOn:null,styles:[],linked:null};switch(a.default.attr(s,"type")){case"paragraph":t.target="p";break;case"table":t.target="table";break;case"character":t.target="span"}return P.foreach(s,l=>{switch(l.localName){case"basedOn":t.basedOn=a.default.attr(l,"val");break;case"name":t.name=a.default.attr(l,"val");break;case"link":t.linked=a.default.attr(l,"val");break;case"next":t.next=a.default.attr(l,"val");break;case"aliases":t.aliases=a.default.attr(l,"val").split(",");break;case"pPr":t.styles.push({target:"p",values:this.parseDefaultProperties(l,{})}),t.paragraphProps=(0,m.parseParagraphProperties)(l,a.default);break;case"rPr":t.styles.push({target:"span",values:this.parseDefaultProperties(l,{})}),t.runProps=(0,i.parseRunProperties)(l,a.default);break;case"tblPr":case"tcPr":t.styles.push({target:"td",values:this.parseDefaultProperties(l,{})});break;case"tblStylePr":for(let b of this.parseTableStyle(l))t.styles.push(b);break;case"rsid":case"qFormat":case"hidden":case"semiHidden":case"unhideWhenUsed":case"autoRedefine":case"uiPriority":break;default:this.options.debug&&console.warn(`DOCX: Unknown style element: ${l.localName}`)}}),t}parseTableStyle(s){var t=[],l=a.default.attr(s,"type"),b="",k="";switch(l){case"firstRow":k=".first-row",b="tr.first-row td";break;case"lastRow":k=".last-row",b="tr.last-row td";break;case"firstCol":k=".first-col",b="td.first-col";break;case"lastCol":k=".last-col",b="td.last-col";break;case"band1Vert":k=":not(.no-vband)",b="td.odd-col";break;case"band2Vert":k=":not(.no-vband)",b="td.even-col";break;case"band1Horz":k=":not(.no-hband)",b="tr.odd-row";break;case"band2Horz":k=":not(.no-hband)",b="tr.even-row";break;default:return[]}return P.foreach(s,E=>{switch(E.localName){case"pPr":t.push({target:`${b} p`,mod:k,values:this.parseDefaultProperties(E,{})});break;case"rPr":t.push({target:`${b} span`,mod:k,values:this.parseDefaultProperties(E,{})});break;case"tblPr":case"tcPr":t.push({target:b,mod:k,values:this.parseDefaultProperties(E,{})})}}),t}parseNumberingFile(s){var t=[],l={},b=[];return P.foreach(s,k=>{switch(k.localName){case"abstractNum":this.parseAbstractNumbering(k,b).forEach(C=>t.push(C));break;case"numPicBullet":b.push(this.parseNumberingPicBullet(k));break;case"num":var E=a.default.attr(k,"numId"),_=a.default.elementAttr(k,"abstractNumId","val");l[_]=E}}),t.forEach(k=>k.id=l[k.id]),t}parseNumberingPicBullet(s){var t=a.default.element(s,"pict"),l=t&&a.default.element(t,"shape"),b=l&&a.default.element(l,"imagedata");return b?{id:a.default.intAttr(s,"numPicBulletId"),src:a.default.attr(b,"id"),style:a.default.attr(l,"style")}:null}parseAbstractNumbering(s,t){var l=[],b=a.default.attr(s,"abstractNumId");return P.foreach(s,k=>{k.localName==="lvl"&&l.push(this.parseNumberingLevel(b,k,t))}),l}parseNumberingLevel(s,t,l){var b={id:s,level:a.default.intAttr(t,"ilvl"),start:1,pStyleName:void 0,pStyle:{},rStyle:{},suff:"tab"};return P.foreach(t,k=>{switch(k.localName){case"start":b.start=a.default.intAttr(k,"val");break;case"pPr":this.parseDefaultProperties(k,b.pStyle);break;case"rPr":this.parseDefaultProperties(k,b.rStyle);break;case"lvlPicBulletId":var E=a.default.intAttr(k,"val");b.bullet=l.find(_=>_.id==E);break;case"lvlText":b.levelText=a.default.attr(k,"val");break;case"pStyle":b.pStyleName=a.default.attr(k,"val");break;case"numFmt":b.format=a.default.attr(k,"val");break;case"suff":b.suff=a.default.attr(k,"val")}}),b}parseSdt(s,t){const l=a.default.element(s,"sdtContent");return l?t(l):[]}parseInserted(s,t){var l,b;return{type:r.DomType.Inserted,children:(b=(l=t(s))===null||l===void 0?void 0:l.children)!==null&&b!==void 0?b:[]}}parseDeleted(s,t){var l,b;return{type:r.DomType.Deleted,children:(b=(l=t(s))===null||l===void 0?void 0:l.children)!==null&&b!==void 0?b:[]}}parseParagraph(s){var t={type:r.DomType.Paragraph,children:[]};for(let l of a.default.elements(s))switch(l.localName){case"pPr":this.parseParagraphProperties(l,t);break;case"r":t.children.push(this.parseRun(l,t));break;case"hyperlink":t.children.push(this.parseHyperlink(l,t));break;case"bookmarkStart":t.children.push((0,y.parseBookmarkStart)(l,a.default));break;case"bookmarkEnd":t.children.push((0,y.parseBookmarkEnd)(l,a.default));break;case"oMath":case"oMathPara":t.children.push(this.parseMathElement(l));break;case"sdt":t.children.push(...this.parseSdt(l,b=>this.parseParagraph(b).children));break;case"ins":t.children.push(this.parseInserted(l,b=>this.parseParagraph(b)));break;case"del":t.children.push(this.parseDeleted(l,b=>this.parseParagraph(b)))}return t}parseParagraphProperties(s,t){this.parseDefaultProperties(s,t.cssStyle={},null,l=>{if((0,m.parseParagraphProperty)(l,t,a.default))return!0;switch(l.localName){case"pStyle":t.styleName=a.default.attr(l,"val");break;case"cnfStyle":t.className=n.classNameOfCnfStyle(l);break;case"framePr":this.parseFrame(l,t);break;case"rPr":break;default:return!1}return!0})}parseFrame(s,t){a.default.attr(s,"dropCap")=="drop"&&(t.cssStyle.float="left")}parseHyperlink(s,t){var l={type:r.DomType.Hyperlink,parent:t,children:[]},b=a.default.attr(s,"anchor"),k=a.default.attr(s,"id");return b&&(l.href="#"+b),k&&(l.id=k),P.foreach(s,E=>{E.localName==="r"&&l.children.push(this.parseRun(E,l))}),l}parseRun(s,t){var l={type:r.DomType.Run,parent:t,children:[]};return P.foreach(s,b=>{switch((b=this.checkAlternateContent(b)).localName){case"t":l.children.push({type:r.DomType.Text,text:b.textContent});break;case"delText":l.children.push({type:r.DomType.DeletedText,text:b.textContent});break;case"fldSimple":l.children.push({type:r.DomType.SimpleField,instruction:a.default.attr(b,"instr"),lock:a.default.boolAttr(b,"lock",!1),dirty:a.default.boolAttr(b,"dirty",!1)});break;case"instrText":l.fieldRun=!0,l.children.push({type:r.DomType.Instruction,text:b.textContent});break;case"fldChar":l.fieldRun=!0,l.children.push({type:r.DomType.ComplexField,charType:a.default.attr(b,"fldCharType"),lock:a.default.boolAttr(b,"lock",!1),dirty:a.default.boolAttr(b,"dirty",!1)});break;case"noBreakHyphen":l.children.push({type:r.DomType.NoBreakHyphen});break;case"br":l.children.push({type:r.DomType.Break,break:a.default.attr(b,"type")||"textWrapping"});break;case"lastRenderedPageBreak":l.children.push({type:r.DomType.Break,break:"lastRenderedPageBreak"});break;case"sym":l.children.push({type:r.DomType.Symbol,font:a.default.attr(b,"font"),char:a.default.attr(b,"char")});break;case"tab":l.children.push({type:r.DomType.Tab});break;case"footnoteReference":l.children.push({type:r.DomType.FootnoteReference,id:a.default.attr(b,"id")});break;case"endnoteReference":l.children.push({type:r.DomType.EndnoteReference,id:a.default.attr(b,"id")});break;case"drawing":let k=this.parseDrawing(b);k&&(l.children=[k]);break;case"pict":l.children.push(this.parseVmlPicture(b));break;case"rPr":this.parseRunProperties(b,l)}}),l}parseMathElement(s){const t=`${s.localName}Pr`,l={type:g[s.localName],children:[]};for(const k of a.default.elements(s))if(g[k.localName])l.children.push(this.parseMathElement(k));else if(k.localName=="r"){var b=this.parseRun(k);b.type=r.DomType.MmlRun,l.children.push(b)}else k.localName==t&&(l.props=this.parseMathProperies(k));return l}parseMathProperies(s){const t={};for(const l of a.default.elements(s))switch(l.localName){case"chr":t.char=a.default.attr(l,"val");break;case"vertJc":t.verticalJustification=a.default.attr(l,"val");break;case"pos":t.position=a.default.attr(l,"val");break;case"degHide":t.hideDegree=a.default.boolAttr(l,"val");break;case"begChr":t.beginChar=a.default.attr(l,"val");break;case"endChr":t.endChar=a.default.attr(l,"val")}return t}parseRunProperties(s,t){this.parseDefaultProperties(s,t.cssStyle={},null,l=>{switch(l.localName){case"rStyle":t.styleName=a.default.attr(l,"val");break;case"vertAlign":t.verticalAlign=n.valueOfVertAlign(l,!0);break;default:return!1}return!0})}parseVmlPicture(s){const t={type:r.DomType.VmlPicture,children:[]};for(const l of a.default.elements(s)){const b=(0,d.parseVmlElement)(l,this);b&&t.children.push(b)}return t}checkAlternateContent(s){var t;if(s.localName!="AlternateContent")return s;var l=a.default.element(s,"Choice");if(l){var b=a.default.attr(l,"Requires"),k=s.lookupNamespaceURI(b);if(p.includes(k))return l.firstElementChild}return(t=a.default.element(s,"Fallback"))===null||t===void 0?void 0:t.firstElementChild}parseDrawing(s){for(var t of a.default.elements(s))switch(t.localName){case"inline":case"anchor":return this.parseDrawingWrapper(t)}}parseDrawingWrapper(s){var t,l={type:r.DomType.Drawing,children:[],cssStyle:{}},b=s.localName=="anchor";let k=null,E=a.default.boolAttr(s,"simplePos"),_={relative:"page",align:"left",offset:"0"},C={relative:"page",align:"top",offset:"0"};for(var o of a.default.elements(s))switch(o.localName){case"simplePos":E&&(_.offset=a.default.lengthAttr(o,"x",h.LengthUsage.Emu),C.offset=a.default.lengthAttr(o,"y",h.LengthUsage.Emu));break;case"extent":l.cssStyle.width=a.default.lengthAttr(o,"cx",h.LengthUsage.Emu),l.cssStyle.height=a.default.lengthAttr(o,"cy",h.LengthUsage.Emu);break;case"positionH":case"positionV":if(!E){let q=o.localName=="positionH"?_:C;var R=a.default.element(o,"align"),V=a.default.element(o,"posOffset");q.relative=(t=a.default.attr(o,"relativeFrom"))!==null&&t!==void 0?t:q.relative,R&&(q.align=R.textContent),V&&(q.offset=P.sizeValue(V,h.LengthUsage.Emu))}break;case"wrapTopAndBottom":k="wrapTopAndBottom";break;case"wrapNone":k="wrapNone";break;case"graphic":var F=this.parseGraphic(o);F&&l.children.push(F)}return k=="wrapTopAndBottom"?(l.cssStyle.display="block",_.align&&(l.cssStyle["text-align"]=_.align,l.cssStyle.width="100%")):k=="wrapNone"?(l.cssStyle.display="block",l.cssStyle.position="relative",l.cssStyle.width="0px",l.cssStyle.height="0px",_.offset&&(l.cssStyle.left=_.offset),C.offset&&(l.cssStyle.top=C.offset)):!b||_.align!="left"&&_.align!="right"||(l.cssStyle.float=_.align),l}parseGraphic(s){var t=a.default.element(s,"graphicData");for(let l of a.default.elements(t))if(l.localName==="pic")return this.parsePicture(l);return null}parsePicture(s){var t={type:r.DomType.Image,src:"",cssStyle:{}},l=a.default.element(s,"blipFill"),b=a.default.element(l,"blip");t.src=a.default.attr(b,"embed");var k=a.default.element(s,"spPr"),E=a.default.element(k,"xfrm");for(var _ of(t.cssStyle.position="relative",a.default.elements(E)))switch(_.localName){case"ext":t.cssStyle.width=a.default.lengthAttr(_,"cx",h.LengthUsage.Emu),t.cssStyle.height=a.default.lengthAttr(_,"cy",h.LengthUsage.Emu);break;case"off":t.cssStyle.left=a.default.lengthAttr(_,"x",h.LengthUsage.Emu),t.cssStyle.top=a.default.lengthAttr(_,"y",h.LengthUsage.Emu)}return t}parseTable(s){var t={type:r.DomType.Table,children:[]};return P.foreach(s,l=>{switch(l.localName){case"tr":t.children.push(this.parseTableRow(l));break;case"tblGrid":t.columns=this.parseTableColumns(l);break;case"tblPr":this.parseTableProperties(l,t)}}),t}parseTableColumns(s){var t=[];return P.foreach(s,l=>{l.localName==="gridCol"&&t.push({width:a.default.lengthAttr(l,"w")})}),t}parseTableProperties(s,t){switch(t.cssStyle={},t.cellStyle={},this.parseDefaultProperties(s,t.cssStyle,t.cellStyle,l=>{switch(l.localName){case"tblStyle":t.styleName=a.default.attr(l,"val");break;case"tblLook":t.className=n.classNameOftblLook(l);break;case"tblpPr":this.parseTablePosition(l,t);break;case"tblStyleColBandSize":t.colBandSize=a.default.intAttr(l,"val");break;case"tblStyleRowBandSize":t.rowBandSize=a.default.intAttr(l,"val");break;default:return!1}return!0}),t.cssStyle["text-align"]){case"center":delete t.cssStyle["text-align"],t.cssStyle["margin-left"]="auto",t.cssStyle["margin-right"]="auto";break;case"right":delete t.cssStyle["text-align"],t.cssStyle["margin-left"]="auto"}}parseTablePosition(s,t){var l=a.default.lengthAttr(s,"topFromText"),b=a.default.lengthAttr(s,"bottomFromText"),k=a.default.lengthAttr(s,"rightFromText"),E=a.default.lengthAttr(s,"leftFromText");t.cssStyle.float="left",t.cssStyle["margin-bottom"]=n.addSize(t.cssStyle["margin-bottom"],b),t.cssStyle["margin-left"]=n.addSize(t.cssStyle["margin-left"],E),t.cssStyle["margin-right"]=n.addSize(t.cssStyle["margin-right"],k),t.cssStyle["margin-top"]=n.addSize(t.cssStyle["margin-top"],l)}parseTableRow(s){var t={type:r.DomType.Row,children:[]};return P.foreach(s,l=>{switch(l.localName){case"tc":t.children.push(this.parseTableCell(l));break;case"trPr":this.parseTableRowProperties(l,t)}}),t}parseTableRowProperties(s,t){t.cssStyle=this.parseDefaultProperties(s,{},null,l=>{switch(l.localName){case"cnfStyle":t.className=n.classNameOfCnfStyle(l);break;case"tblHeader":t.isHeader=a.default.boolAttr(l,"val");break;default:return!1}return!0})}parseTableCell(s){var t={type:r.DomType.Cell,children:[]};return P.foreach(s,l=>{switch(l.localName){case"tbl":t.children.push(this.parseTable(l));break;case"p":t.children.push(this.parseParagraph(l));break;case"tcPr":this.parseTableCellProperties(l,t)}}),t}parseTableCellProperties(s,t){t.cssStyle=this.parseDefaultProperties(s,{},null,l=>{var b;switch(l.localName){case"gridSpan":t.span=a.default.intAttr(l,"val",null);break;case"vMerge":t.verticalMerge=(b=a.default.attr(l,"val"))!==null&&b!==void 0?b:"continue";break;case"cnfStyle":t.className=n.classNameOfCnfStyle(l);break;default:return!1}return!0})}parseDefaultProperties(s,t=null,l=null,b=null){return t=t||{},P.foreach(s,k=>{if(!(b!=null&&b(k)))switch(k.localName){case"jc":t["text-align"]=n.valueOfJc(k);break;case"textAlignment":t["vertical-align"]=n.valueOfTextAlignment(k);break;case"color":t.color=P.colorAttr(k,"val",null,e.autos.color);break;case"sz":t["font-size"]=t["min-height"]=a.default.lengthAttr(k,"val",h.LengthUsage.FontSize);break;case"shd":t["background-color"]=P.colorAttr(k,"fill",null,e.autos.shd);break;case"highlight":t["background-color"]=P.colorAttr(k,"val",null,e.autos.highlight);break;case"vertAlign":break;case"position":t.verticalAlign=a.default.lengthAttr(k,"val",h.LengthUsage.FontSize);break;case"tcW":if(this.options.ignoreWidth)break;case"tblW":t.width=n.valueOfSize(k,"w");break;case"trHeight":this.parseTrHeight(k,t);break;case"strike":t["text-decoration"]=a.default.boolAttr(k,"val",!0)?"line-through":"none";break;case"b":t["font-weight"]=a.default.boolAttr(k,"val",!0)?"bold":"normal";break;case"i":t["font-style"]=a.default.boolAttr(k,"val",!0)?"italic":"normal";break;case"caps":t["text-transform"]=a.default.boolAttr(k,"val",!0)?"uppercase":"none";break;case"smallCaps":t["text-transform"]=a.default.boolAttr(k,"val",!0)?"lowercase":"none";break;case"u":this.parseUnderline(k,t);break;case"ind":case"tblInd":this.parseIndentation(k,t);break;case"rFonts":this.parseFont(k,t);break;case"tblBorders":this.parseBorderProperties(k,l||t);break;case"tblCellSpacing":t["border-spacing"]=n.valueOfMargin(k),t["border-collapse"]="separate";break;case"pBdr":this.parseBorderProperties(k,t);break;case"bdr":t.border=n.valueOfBorder(k);break;case"tcBorders":this.parseBorderProperties(k,t);break;case"vanish":a.default.boolAttr(k,"val",!0)&&(t.display="none");break;case"kern":case"noWrap":break;case"tblCellMar":case"tcMar":this.parseMarginProperties(k,l||t);break;case"tblLayout":t["table-layout"]=n.valueOfTblLayout(k);break;case"vAlign":t["vertical-align"]=n.valueOfTextAlignment(k);break;case"spacing":s.localName=="pPr"&&this.parseSpacing(k,t);break;case"wordWrap":a.default.boolAttr(k,"val")&&(t["overflow-wrap"]="break-word");break;case"suppressAutoHyphens":t.hyphens=a.default.boolAttr(k,"val",!0)?"none":"auto";break;case"lang":t.$lang=a.default.attr(k,"val");break;case"bCs":case"iCs":case"szCs":case"tabs":case"outlineLvl":case"contextualSpacing":case"tblStyleColBandSize":case"tblStyleRowBandSize":case"webHidden":case"pageBreakBefore":case"suppressLineNumbers":case"keepLines":case"keepNext":case"widowControl":case"bidi":case"rtl":case"noProof":break;default:this.options.debug&&console.warn(`DOCX: Unknown document element: ${s.localName}.${k.localName}`)}}),t}parseUnderline(s,t){var l=a.default.attr(s,"val");if(l!=null){switch(l){case"dash":case"dashDotDotHeavy":case"dashDotHeavy":case"dashedHeavy":case"dashLong":case"dashLongHeavy":case"dotDash":case"dotDotDash":t["text-decoration-style"]="dashed";break;case"dotted":case"dottedHeavy":t["text-decoration-style"]="dotted";break;case"double":t["text-decoration-style"]="double";break;case"single":case"thick":case"words":t["text-decoration"]="underline";break;case"wave":case"wavyDouble":case"wavyHeavy":t["text-decoration-style"]="wavy";break;case"none":t["text-decoration"]="none"}var b=P.colorAttr(s,"color");b&&(t["text-decoration-color"]=b)}}parseFont(s,t){var l=[a.default.attr(s,"ascii"),n.themeValue(s,"asciiTheme")].filter(b=>b).join(", ");l.length>0&&(t["font-family"]=l)}parseIndentation(s,t){var l=a.default.lengthAttr(s,"firstLine"),b=a.default.lengthAttr(s,"hanging"),k=a.default.lengthAttr(s,"left"),E=a.default.lengthAttr(s,"start"),_=a.default.lengthAttr(s,"right"),C=a.default.lengthAttr(s,"end");l&&(t["text-indent"]=l),b&&(t["text-indent"]=`-${b}`),(k||E)&&(t["margin-left"]=k||E),(_||C)&&(t["margin-right"]=_||C)}parseSpacing(s,t){var l=a.default.lengthAttr(s,"before"),b=a.default.lengthAttr(s,"after"),k=a.default.intAttr(s,"line",null),E=a.default.attr(s,"lineRule");if(l&&(t["margin-top"]=l),b&&(t["margin-bottom"]=b),k!==null)switch(E){case"auto":t["line-height"]=`${(k/240).toFixed(2)}`;break;case"atLeast":t["line-height"]=`calc(100% + ${k/20}pt)`;break;default:t["line-height"]=t["min-height"]=k/20+"pt"}}parseMarginProperties(s,t){P.foreach(s,l=>{switch(l.localName){case"left":t["padding-left"]=n.valueOfMargin(l);break;case"right":t["padding-right"]=n.valueOfMargin(l);break;case"top":t["padding-top"]=n.valueOfMargin(l);break;case"bottom":t["padding-bottom"]=n.valueOfMargin(l)}})}parseTrHeight(s,t){a.default.attr(s,"hRule"),t.height=a.default.lengthAttr(s,"val")}parseBorderProperties(s,t){P.foreach(s,l=>{switch(l.localName){case"start":case"left":t["border-left"]=n.valueOfBorder(l);break;case"end":case"right":t["border-right"]=n.valueOfBorder(l);break;case"top":t["border-top"]=n.valueOfBorder(l);break;case"bottom":t["border-bottom"]=n.valueOfBorder(l)}})}};const w=["black","blue","cyan","darkBlue","darkCyan","darkGray","darkGreen","darkMagenta","darkRed","darkYellow","green","lightGray","magenta","none","red","white","yellow"];class P{static foreach(t,l){for(var b=0;bl[k]=="1").join(" ")}static valueOfJc(t){var l=a.default.attr(t,"val");switch(l){case"start":case"left":return"left";case"center":return"center";case"end":case"right":return"right";case"both":return"justify"}return l}static valueOfVertAlign(t,l=!1){var b=a.default.attr(t,"val");switch(b){case"subscript":return"sub";case"superscript":return l?"sup":"super"}return l?null:b}static valueOfTextAlignment(t){var l=a.default.attr(t,"val");switch(l){case"auto":case"baseline":return"baseline";case"top":return"top";case"center":return"middle";case"bottom":return"bottom"}return l}static addSize(t,l){return t==null?l:l==null?t:`calc(${t} + ${l})`}static classNameOftblLook(t){const l=a.default.hexAttr(t,"val",0);let b="";return(a.default.boolAttr(t,"firstRow")||32&l)&&(b+=" first-row"),(a.default.boolAttr(t,"lastRow")||64&l)&&(b+=" last-row"),(a.default.boolAttr(t,"firstColumn")||128&l)&&(b+=" first-col"),(a.default.boolAttr(t,"lastColumn")||256&l)&&(b+=" last-col"),(a.default.boolAttr(t,"noHBand")||512&l)&&(b+=" no-hband"),(a.default.boolAttr(t,"noVBand")||1024&l)&&(b+=" no-vband"),b.trim()}}},162:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.CorePropsPart=void 0;const r=u(530),m=u(614);class f extends r.Part{parseXml(i){this.props=(0,m.parseCoreProps)(i,this._package.xmlParser)}}e.CorePropsPart=f},614:(v,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseCoreProps=void 0,e.parseCoreProps=function(u,r){const m={};for(let f of r.elements(u))switch(f.localName){case"title":m.title=f.textContent;break;case"description":m.description=f.textContent;break;case"subject":m.subject=f.textContent;break;case"creator":m.creator=f.textContent;break;case"keywords":m.keywords=f.textContent;break;case"language":m.language=f.textContent;break;case"lastModifiedBy":m.lastModifiedBy=f.textContent;break;case"revision":f.textContent&&(m.revision=parseInt(f.textContent))}return m}},177:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.CustomPropsPart=void 0;const r=u(530),m=u(821);class f extends r.Part{parseXml(i){this.props=(0,m.parseCustomProps)(i,this._package.xmlParser)}}e.CustomPropsPart=f},821:(v,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseCustomProps=void 0,e.parseCustomProps=function(u,r){return r.elements(u,"property").map(m=>{const f=m.firstChild;return{formatId:r.attr(m,"fmtid"),name:r.attr(m,"name"),type:f.nodeName,value:f.textContent}})}},665:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.ExtendedPropsPart=void 0;const r=u(530),m=u(668);class f extends r.Part{parseXml(i){this.props=(0,m.parseExtendedProps)(i,this._package.xmlParser)}}e.ExtendedPropsPart=f},668:(v,e)=>{function u(r){if(r!==void 0)return parseInt(r)}Object.defineProperty(e,"__esModule",{value:!0}),e.parseExtendedProps=void 0,e.parseExtendedProps=function(r,m){const f={};for(let a of m.elements(r))switch(a.localName){case"Template":f.template=a.textContent;break;case"Pages":f.pages=u(a.textContent);break;case"Words":f.words=u(a.textContent);break;case"Characters":f.characters=u(a.textContent);break;case"Application":f.application=a.textContent;break;case"Lines":f.lines=u(a.textContent);break;case"Paragraphs":f.paragraphs=u(a.textContent);break;case"Company":f.company=a.textContent;break;case"AppVersion":f.appVersion=a.textContent}return f}},172:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseBookmarkEnd=e.parseBookmarkStart=void 0;const r=u(120);e.parseBookmarkStart=function(m,f){return{type:r.DomType.BookmarkStart,id:f.attr(m,"id"),name:f.attr(m,"name"),colFirst:f.intAttr(m,"colFirst"),colLast:f.intAttr(m,"colLast")}},e.parseBookmarkEnd=function(m,f){return{type:r.DomType.BookmarkEnd,id:f.attr(m,"id")}}},191:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseBorders=e.parseBorder=void 0;const r=u(149);function m(f,a){return{type:a.attr(f,"val"),color:a.attr(f,"color"),size:a.lengthAttr(f,"sz",r.LengthUsage.Border),offset:a.lengthAttr(f,"space",r.LengthUsage.Point),frame:a.boolAttr(f,"frame"),shadow:a.boolAttr(f,"shadow")}}e.parseBorder=m,e.parseBorders=function(f,a){var i={};for(let y of a.elements(f))switch(y.localName){case"left":i.left=m(y,a);break;case"top":i.top=m(y,a);break;case"right":i.right=m(y,a);break;case"bottom":i.bottom=m(y,a)}return i}},149:(v,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseCommonProperty=e.convertPercentage=e.convertBoolean=e.convertLength=e.LengthUsage=e.ns=void 0,e.ns={wordml:"http://schemas.openxmlformats.org/wordprocessingml/2006/main",drawingml:"http://schemas.openxmlformats.org/drawingml/2006/main",picture:"http://schemas.openxmlformats.org/drawingml/2006/picture",compatibility:"http://schemas.openxmlformats.org/markup-compatibility/2006",math:"http://schemas.openxmlformats.org/officeDocument/2006/math"},e.LengthUsage={Dxa:{mul:.05,unit:"pt"},Emu:{mul:7874015748031496e-20,unit:"pt"},FontSize:{mul:.5,unit:"pt"},Border:{mul:.125,unit:"pt"},Point:{mul:1,unit:"pt"},Percent:{mul:.02,unit:"%"},LineHeight:{mul:.004166666666666667,unit:""},VmlEmu:{mul:7874015748031496e-20,unit:""}},e.convertLength=function(u,r=e.LengthUsage.Dxa){return u==null||/.+(p[xt]|[%])$/.test(u)?u:`${(parseInt(u)*r.mul).toFixed(2)}${r.unit}`},e.convertBoolean=function(u,r=!1){switch(u){case"1":case"on":case"true":return!0;case"0":case"off":case"false":return!1;default:return r}},e.convertPercentage=function(u){return u?parseInt(u)/100:null},e.parseCommonProperty=function(u,r,m){if(u.namespaceURI!=e.ns.wordml)return!1;switch(u.localName){case"color":r.color=m.attr(u,"val");break;case"sz":r.fontSize=m.lengthAttr(u,"val",e.LengthUsage.FontSize);break;default:return!1}return!0}},448:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.DocumentPart=void 0;const r=u(530);class m extends r.Part{constructor(a,i,y){super(a,i),this._documentParser=y}parseXml(a){this.body=this._documentParser.parseDocumentFile(a)}}e.DocumentPart=m},120:(v,e)=>{var u;Object.defineProperty(e,"__esModule",{value:!0}),e.OpenXmlElementBase=e.DomType=void 0,function(r){r.Document="document",r.Paragraph="paragraph",r.Run="run",r.Break="break",r.NoBreakHyphen="noBreakHyphen",r.Table="table",r.Row="row",r.Cell="cell",r.Hyperlink="hyperlink",r.Drawing="drawing",r.Image="image",r.Text="text",r.Tab="tab",r.Symbol="symbol",r.BookmarkStart="bookmarkStart",r.BookmarkEnd="bookmarkEnd",r.Footer="footer",r.Header="header",r.FootnoteReference="footnoteReference",r.EndnoteReference="endnoteReference",r.Footnote="footnote",r.Endnote="endnote",r.SimpleField="simpleField",r.ComplexField="complexField",r.Instruction="instruction",r.VmlPicture="vmlPicture",r.MmlMath="mmlMath",r.MmlMathParagraph="mmlMathParagraph",r.MmlFraction="mmlFraction",r.MmlFunction="mmlFunction",r.MmlFunctionName="mmlFunctionName",r.MmlNumerator="mmlNumerator",r.MmlDenominator="mmlDenominator",r.MmlRadical="mmlRadical",r.MmlBase="mmlBase",r.MmlDegree="mmlDegree",r.MmlSuperscript="mmlSuperscript",r.MmlSubscript="mmlSubscript",r.MmlPreSubSuper="mmlPreSubSuper",r.MmlSubArgument="mmlSubArgument",r.MmlSuperArgument="mmlSuperArgument",r.MmlNary="mmlNary",r.MmlDelimiter="mmlDelimiter",r.MmlRun="mmlRun",r.MmlEquationArray="mmlEquationArray",r.MmlLimit="mmlLimit",r.MmlLimitLower="mmlLimitLower",r.MmlMatrix="mmlMatrix",r.MmlMatrixRow="mmlMatrixRow",r.MmlBox="mmlBox",r.MmlBar="mmlBar",r.MmlGroupChar="mmlGroupChar",r.VmlElement="vmlElement",r.Inserted="inserted",r.Deleted="deleted",r.DeletedText="deletedText"}(u||(e.DomType=u={})),e.OpenXmlElementBase=class{constructor(){this.children=[],this.cssStyle={}}}},931:(v,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseLineSpacing=void 0,e.parseLineSpacing=function(u,r){return{before:r.lengthAttr(u,"before"),after:r.lengthAttr(u,"after"),line:r.intAttr(u,"line"),lineRule:r.attr(u,"lineRule")}}},109:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseNumbering=e.parseTabs=e.parseParagraphProperty=e.parseParagraphProperties=void 0;const r=u(149),m=u(59),f=u(931),a=u(488);function i(d,p,g){if(d.namespaceURI!=r.ns.wordml)return!1;if((0,r.parseCommonProperty)(d,p,g))return!0;switch(d.localName){case"tabs":p.tabs=y(d,g);break;case"sectPr":p.sectionProps=(0,m.parseSectionProperties)(d,g);break;case"numPr":p.numbering=h(d,g);break;case"spacing":return p.lineSpacing=(0,f.parseLineSpacing)(d,g),!1;case"textAlignment":return p.textAlignment=g.attr(d,"val"),!1;case"keepNext":p.keepLines=g.boolAttr(d,"val",!0);break;case"keepNext":p.keepNext=g.boolAttr(d,"val",!0);break;case"pageBreakBefore":p.pageBreakBefore=g.boolAttr(d,"val",!0);break;case"outlineLvl":p.outlineLevel=g.intAttr(d,"val");break;case"pStyle":p.styleName=g.attr(d,"val");break;case"rPr":p.runProps=(0,a.parseRunProperties)(d,g);break;default:return!1}return!0}function y(d,p){return p.elements(d,"tab").map(g=>({position:p.lengthAttr(g,"pos"),leader:p.attr(g,"leader"),style:p.attr(g,"val")}))}function h(d,p){var g={};for(let w of p.elements(d))switch(w.localName){case"numId":g.id=p.attr(w,"val");break;case"ilvl":g.level=p.intAttr(w,"val")}return g}e.parseParagraphProperties=function(d,p){let g={};for(let w of p.elements(d))i(w,g,p);return g},e.parseParagraphProperty=i,e.parseTabs=y,e.parseNumbering=h},488:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseRunProperty=e.parseRunProperties=void 0;const r=u(149);function m(f,a,i){return!!(0,r.parseCommonProperty)(f,a,i)}e.parseRunProperties=function(f,a){let i={};for(let y of a.elements(f))m(y,i,a);return i},e.parseRunProperty=m},59:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseSectionProperties=e.SectionType=void 0;const r=u(472),m=u(191);var f;function a(h,d){return{numberOfColumns:d.intAttr(h,"num"),space:d.lengthAttr(h,"space"),separator:d.boolAttr(h,"sep"),equalWidth:d.boolAttr(h,"equalWidth",!0),columns:d.elements(h,"col").map(p=>({width:d.lengthAttr(p,"w"),space:d.lengthAttr(p,"space")}))}}function i(h,d){return{chapSep:d.attr(h,"chapSep"),chapStyle:d.attr(h,"chapStyle"),format:d.attr(h,"fmt"),start:d.intAttr(h,"start")}}function y(h,d){return{id:d.attr(h,"id"),type:d.attr(h,"type")}}(function(h){h.Continuous="continuous",h.NextPage="nextPage",h.NextColumn="nextColumn",h.EvenPage="evenPage",h.OddPage="oddPage"})(f||(e.SectionType=f={})),e.parseSectionProperties=function(h,d=r.default){var p,g,w={};for(let P of d.elements(h))switch(P.localName){case"pgSz":w.pageSize={width:d.lengthAttr(P,"w"),height:d.lengthAttr(P,"h"),orientation:d.attr(P,"orient")};break;case"type":w.type=d.attr(P,"val");break;case"pgMar":w.pageMargins={left:d.lengthAttr(P,"left"),right:d.lengthAttr(P,"right"),top:d.lengthAttr(P,"top"),bottom:d.lengthAttr(P,"bottom"),header:d.lengthAttr(P,"header"),footer:d.lengthAttr(P,"footer"),gutter:d.lengthAttr(P,"gutter")};break;case"cols":w.columns=a(P,d);break;case"headerReference":((p=w.headerRefs)!==null&&p!==void 0?p:w.headerRefs=[]).push(y(P,d));break;case"footerReference":((g=w.footerRefs)!==null&&g!==void 0?g:w.footerRefs=[]).push(y(P,d));break;case"titlePg":w.titlePage=d.boolAttr(P,"val",!0);break;case"pgBorders":w.pageBorders=(0,m.parseBorders)(P,d);break;case"pgNumType":w.pageNumber=i(P,d)}return w}},667:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.renderAsync=e.praseAsync=e.defaultOptions=void 0;const r=u(213),m=u(168),f=u(932);e.defaultOptions={ignoreHeight:!1,ignoreWidth:!1,ignoreFonts:!1,breakPages:!0,debug:!1,experimental:!1,className:"docx",inWrapper:!0,trimXmlDeclaration:!0,ignoreLastRenderedPageBreak:!0,renderHeaders:!0,renderFooters:!0,renderFootnotes:!0,renderEndnotes:!0,useBase64URL:!1,useMathMLPolyfill:!1,renderChanges:!1},e.praseAsync=function(a,i=null){const y=Object.assign(Object.assign({},e.defaultOptions),i);return r.WordDocument.load(a,new m.DocumentParser(y),y)},e.renderAsync=async function(a,i,y=null,h=null){const d=Object.assign(Object.assign({},e.defaultOptions),h),p=new f.HtmlRenderer(window.document),g=await r.WordDocument.load(a,new m.DocumentParser(d),d);return p.render(g,i,y,d),g}},380:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.FontTablePart=void 0;const r=u(530),m=u(512);class f extends r.Part{parseXml(i){this.fonts=(0,m.parseFonts)(i,this._package.xmlParser)}}e.FontTablePart=f},512:(v,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseEmbedFontRef=e.parseFont=e.parseFonts=void 0;const u={embedRegular:"regular",embedBold:"bold",embedItalic:"italic",embedBoldItalic:"boldItalic"};function r(f,a){let i={name:a.attr(f,"name"),embedFontRefs:[]};for(let y of a.elements(f))switch(y.localName){case"family":i.family=a.attr(y,"val");break;case"altName":i.altName=a.attr(y,"val");break;case"embedRegular":case"embedBold":case"embedItalic":case"embedBoldItalic":i.embedFontRefs.push(m(y,a))}return i}function m(f,a){return{id:a.attr(f,"id"),key:a.attr(f,"fontKey"),type:u[f.localName]}}e.parseFonts=function(f,a){return a.elements(f).map(i=>r(i,a))},e.parseFont=r,e.parseEmbedFontRef=m},984:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.WmlFooter=e.WmlHeader=void 0;const r=u(120);class m extends r.OpenXmlElementBase{constructor(){super(...arguments),this.type=r.DomType.Header}}e.WmlHeader=m;class f extends r.OpenXmlElementBase{constructor(){super(...arguments),this.type=r.DomType.Footer}}e.WmlFooter=f},985:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.FooterPart=e.HeaderPart=e.BaseHeaderFooterPart=void 0;const r=u(530),m=u(984);class f extends r.Part{constructor(i,y,h){super(i,y),this._documentParser=h}parseXml(i){this.rootElement=this.createRootElement(),this.rootElement.children=this._documentParser.parseBodyElements(i)}}e.BaseHeaderFooterPart=f,e.HeaderPart=class extends f{createRootElement(){return new m.WmlHeader}},e.FooterPart=class extends f{createRootElement(){return new m.WmlFooter}}},932:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.HtmlRenderer=void 0;const r=u(120),m=u(593),f=u(630),a=u(438),i="http://www.w3.org/1998/Math/MathML";function y(n,s,t){return d(void 0,n,s,t)}function h(n,s,t){return d("http://www.w3.org/2000/svg",n,s,t)}function d(n,s,t,l){var b=n?document.createElementNS(n,s):document.createElement(s);return Object.assign(b,t),l&&g(b,l),b}function p(n){n.innerHTML=""}function g(n,s){s.forEach(t=>n.appendChild((0,m.isString)(t)?document.createTextNode(t):t))}function w(n){return y("style",{innerHTML:n})}function P(n,s){n.appendChild(document.createComment(s))}e.HtmlRenderer=class{constructor(n){this.htmlDocument=n,this.className="docx",this.styleMap={},this.currentPart=null,this.tableVerticalMerges=[],this.currentVerticalMerge=null,this.tableCellPositions=[],this.currentCellPosition=null,this.footnoteMap={},this.endnoteMap={},this.currentEndnoteIds=[],this.usedHederFooterParts=[],this.currentTabs=[],this.tabsTimeout=0,this.createElement=y}render(n,s,t=null,l){var b;this.document=n,this.options=l,this.className=l.className,this.rootSelector=l.inWrapper?`.${this.className}-wrapper`:":root",this.styleMap=null,p(t=t||s),p(s),P(t,"docxjs library predefined styles"),t.appendChild(this.renderDefaultStyle()),!window.MathMLElement&&l.useMathMLPolyfill&&(P(t,"docxjs mathml polyfill styles"),t.appendChild(w(a.default))),n.themePart&&(P(t,"docxjs document theme values"),this.renderTheme(n.themePart,t)),n.stylesPart!=null&&(this.styleMap=this.processStyles(n.stylesPart.styles),P(t,"docxjs document styles"),t.appendChild(this.renderStyles(n.stylesPart.styles))),n.numberingPart&&(this.prodessNumberings(n.numberingPart.domNumberings),P(t,"docxjs document numbering styles"),t.appendChild(this.renderNumbering(n.numberingPart.domNumberings,t))),n.footnotesPart&&(this.footnoteMap=(0,m.keyBy)(n.footnotesPart.notes,E=>E.id)),n.endnotesPart&&(this.endnoteMap=(0,m.keyBy)(n.endnotesPart.notes,E=>E.id)),n.settingsPart&&(this.defaultTabSize=(b=n.settingsPart.settings)===null||b===void 0?void 0:b.defaultTabStop),!l.ignoreFonts&&n.fontTablePart&&this.renderFontTable(n.fontTablePart,t);var k=this.renderSections(n.documentPart.body);this.options.inWrapper?s.appendChild(this.renderWrapper(k)):g(s,k),this.refreshTabStops()}renderTheme(n,s){var t,l;const b={},k=(t=n.theme)===null||t===void 0?void 0:t.fontScheme;k&&(k.majorFont&&(b["--docx-majorHAnsi-font"]=k.majorFont.latinTypeface),k.minorFont&&(b["--docx-minorHAnsi-font"]=k.minorFont.latinTypeface));const E=(l=n.theme)===null||l===void 0?void 0:l.colorScheme;if(E)for(let[C,o]of Object.entries(E.colors))b[`--docx-${C}-color`]=`#${o}`;const _=this.styleToString(`.${this.className}`,b);s.appendChild(w(_))}renderFontTable(n,s){for(let t of n.fonts)for(let l of t.embedFontRefs)this.document.loadFont(l.id,l.key).then(b=>{const k={"font-family":t.name,src:`url(${b})`};l.type!="bold"&&l.type!="boldItalic"||(k["font-weight"]="bold"),l.type!="italic"&&l.type!="boldItalic"||(k["font-style"]="italic"),P(s,`docxjs ${t.name} font`);const E=this.styleToString("@font-face",k);s.appendChild(w(E)),this.refreshTabStops()})}processStyleName(n){return n?`${this.className}_${(0,m.escapeClassName)(n)}`:this.className}processStyles(n){const s=(0,m.keyBy)(n.filter(l=>l.id!=null),l=>l.id);for(const l of n.filter(b=>b.basedOn)){var t=s[l.basedOn];if(t){l.paragraphProps=(0,m.mergeDeep)(l.paragraphProps,t.paragraphProps),l.runProps=(0,m.mergeDeep)(l.runProps,t.runProps);for(const b of t.styles){const k=l.styles.find(E=>E.target==b.target);k?this.copyStyleProperties(b.values,k.values):l.styles.push(Object.assign(Object.assign({},b),{values:Object.assign({},b.values)}))}}else this.options.debug&&console.warn(`Can't find base style ${l.basedOn}`)}for(let l of n)l.cssName=this.processStyleName(l.id);return s}prodessNumberings(n){var s;for(let t of n.filter(l=>l.pStyleName)){const l=this.findStyle(t.pStyleName);!((s=l==null?void 0:l.paragraphProps)===null||s===void 0)&&s.numbering&&(l.paragraphProps.numbering.level=t.level)}}processElement(n){if(n.children)for(var s of n.children)s.parent=n,s.type==r.DomType.Table?this.processTable(s):this.processElement(s)}processTable(n){for(var s of n.children)for(var t of s.children)t.cssStyle=this.copyStyleProperties(n.cellStyle,t.cssStyle,["border-left","border-right","border-top","border-bottom","padding-left","padding-right","padding-top","padding-bottom"]),this.processElement(t)}copyStyleProperties(n,s,t=null){if(!n)return s;for(var l of(s==null&&(s={}),t==null&&(t=Object.getOwnPropertyNames(n)),t))n.hasOwnProperty(l)&&!s.hasOwnProperty(l)&&(s[l]=n[l]);return s}createSection(n,s){var t=this.createElement("section",{className:n});return s&&(s.pageMargins&&(t.style.paddingLeft=s.pageMargins.left,t.style.paddingRight=s.pageMargins.right,t.style.paddingTop=s.pageMargins.top,t.style.paddingBottom=s.pageMargins.bottom),s.pageSize&&(this.options.ignoreWidth||(t.style.width=s.pageSize.width),this.options.ignoreHeight||(t.style.minHeight=s.pageSize.height)),s.columns&&s.columns.numberOfColumns&&(t.style.columnCount=`${s.columns.numberOfColumns}`,t.style.columnGap=s.columns.space,s.columns.separator&&(t.style.columnRule="1px solid black"))),t}renderSections(n){const s=[];this.processElement(n);const t=this.splitBySection(n.children);let l=null;for(let k=0,E=t.length;ko.type=="first"):null)!==null&&k!==void 0?k:t%2==1?n.find(o=>o.type=="even"):null)!==null&&E!==void 0?E:n.find(o=>o.type=="default"),C=_&&this.document.findPartByRelId(_.id,this.document.documentPart);C&&(this.currentPart=C,this.usedHederFooterParts.includes(C.path)||(this.processElement(C.rootElement),this.usedHederFooterParts.push(C.path)),this.renderElements([C.rootElement],b),this.currentPart=null)}}isPageBreakElement(n){return n.type==r.DomType.Break&&(n.break=="lastRenderedPageBreak"?!this.options.ignoreLastRenderedPageBreak:n.break=="page")}splitBySection(n){var s,t={sectProps:null,elements:[]},l=[t];for(let R of n){if(R.type==r.DomType.Paragraph){const V=this.findStyle(R.styleName);!((s=V==null?void 0:V.paragraphProps)===null||s===void 0)&&s.pageBreakBefore&&(t.sectProps=b,t={sectProps:null,elements:[]},l.push(t))}if(t.elements.push(R),R.type==r.DomType.Paragraph){const V=R;var b=V.sectionProps,k=-1,E=-1;if(this.options.breakPages&&V.children&&(k=V.children.findIndex(F=>{var q,W;return(E=(W=(q=F.children)===null||q===void 0?void 0:q.findIndex(this.isPageBreakElement.bind(this)))!==null&&W!==void 0?W:-1)!=-1})),(b||k!=-1)&&(t.sectProps=b,t={sectProps:null,elements:[]},l.push(t)),k!=-1){let F=V.children[k],q=E=0;R--)l[R].sectProps==null?l[R].sectProps=o:o=l[R].sectProps;return l}renderWrapper(n){return this.createElement("div",{className:`${this.className}-wrapper`},n)}renderDefaultStyle(){var n=this.className;return w(` +.${n}-wrapper { background: gray; padding: 30px; padding-bottom: 0px; display: flex; flex-flow: column; align-items: center; } +.${n}-wrapper>section.${n} { background: white; box-shadow: 0 0 10px rgba(0, 0, 0, 0.5); margin-bottom: 30px; } +.${n} { color: black; hyphens: auto; } +section.${n} { box-sizing: border-box; display: flex; flex-flow: column nowrap; position: relative; overflow: hidden; } +section.${n}>article { margin-bottom: auto; z-index: 1; } +section.${n}>footer { z-index: 1; } +.${n} table { border-collapse: collapse; } +.${n} table td, .${n} table th { vertical-align: top; } +.${n} p { margin: 0pt; min-height: 1em; } +.${n} span { white-space: pre-wrap; overflow-wrap: break-word; } +.${n} a { color: inherit; text-decoration: inherit; } +`)}renderNumbering(n,s){var t="",l=[];for(var b of n){var k=`p.${this.numberingClass(b.id,b.level)}`,E="none";if(b.bullet){let _=`--${this.className}-${b.bullet.src}`.toLowerCase();t+=this.styleToString(`${k}:before`,{content:"' '",display:"inline-block",background:`var(${_})`},b.bullet.style),this.document.loadNumberingImage(b.bullet.src).then(C=>{var o=`${this.rootSelector} { ${_}: url(${C}) }`;s.appendChild(w(o))})}else if(b.levelText){let _=this.numberingCounter(b.id,b.level);const C=_+" "+(b.start-1);b.level>0&&(t+=this.styleToString(`p.${this.numberingClass(b.id,b.level-1)}`,{"counter-reset":C})),l.push(C),t+=this.styleToString(`${k}:before`,Object.assign({content:this.levelTextToContent(b.levelText,b.suff,b.id,this.numFormatToCssValue(b.format)),"counter-increment":_},b.rStyle))}else E=this.numFormatToCssValue(b.format);t+=this.styleToString(k,Object.assign({display:"list-item","list-style-position":"inside","list-style-type":E},b.pStyle))}return l.length>0&&(t+=this.styleToString(this.rootSelector,{"counter-reset":l.join(" ")})),w(t)}renderStyles(n){var s,t="";const l=this.styleMap,b=(0,m.keyBy)(n.filter(C=>C.isDefault),C=>C.target);for(const C of n){var k=C.styles;if(C.linked){var E=C.linked&&l[C.linked];E?k=k.concat(E.styles):this.options.debug&&console.warn(`Can't find linked style ${C.linked}`)}for(const o of k){var _=`${(s=C.target)!==null&&s!==void 0?s:""}.${C.cssName}`;C.target!=o.target&&(_+=` ${o.target}`),b[C.target]==C&&(_=`.${this.className} ${C.target}, `+_),t+=this.styleToString(_,o.values)}}return w(t)}renderNotes(n,s,t){var l=n.map(k=>s[k]).filter(k=>k);if(l.length>0){var b=this.createElement("ol",null,this.renderElements(l));t.appendChild(b)}}renderElement(n){switch(n.type){case r.DomType.Paragraph:return this.renderParagraph(n);case r.DomType.BookmarkStart:return this.renderBookmarkStart(n);case r.DomType.BookmarkEnd:return null;case r.DomType.Run:return this.renderRun(n);case r.DomType.Table:return this.renderTable(n);case r.DomType.Row:return this.renderTableRow(n);case r.DomType.Cell:return this.renderTableCell(n);case r.DomType.Hyperlink:return this.renderHyperlink(n);case r.DomType.Drawing:return this.renderDrawing(n);case r.DomType.Image:return this.renderImage(n);case r.DomType.Text:case r.DomType.Text:return this.renderText(n);case r.DomType.DeletedText:return this.renderDeletedText(n);case r.DomType.Tab:return this.renderTab(n);case r.DomType.Symbol:return this.renderSymbol(n);case r.DomType.Break:return this.renderBreak(n);case r.DomType.Footer:return this.renderContainer(n,"footer");case r.DomType.Header:return this.renderContainer(n,"header");case r.DomType.Footnote:case r.DomType.Endnote:return this.renderContainer(n,"li");case r.DomType.FootnoteReference:return this.renderFootnoteReference(n);case r.DomType.EndnoteReference:return this.renderEndnoteReference(n);case r.DomType.NoBreakHyphen:return this.createElement("wbr");case r.DomType.VmlPicture:return this.renderVmlPicture(n);case r.DomType.VmlElement:return this.renderVmlElement(n);case r.DomType.MmlMath:return this.renderContainerNS(n,i,"math",{xmlns:i});case r.DomType.MmlMathParagraph:return this.renderContainer(n,"span");case r.DomType.MmlFraction:return this.renderContainerNS(n,i,"mfrac");case r.DomType.MmlBase:return this.renderContainerNS(n,i,n.parent.type==r.DomType.MmlMatrixRow?"mtd":"mrow");case r.DomType.MmlNumerator:case r.DomType.MmlDenominator:case r.DomType.MmlFunction:case r.DomType.MmlLimit:case r.DomType.MmlBox:return this.renderContainerNS(n,i,"mrow");case r.DomType.MmlGroupChar:return this.renderMmlGroupChar(n);case r.DomType.MmlLimitLower:return this.renderContainerNS(n,i,"munder");case r.DomType.MmlMatrix:return this.renderContainerNS(n,i,"mtable");case r.DomType.MmlMatrixRow:return this.renderContainerNS(n,i,"mtr");case r.DomType.MmlRadical:return this.renderMmlRadical(n);case r.DomType.MmlSuperscript:return this.renderContainerNS(n,i,"msup");case r.DomType.MmlSubscript:return this.renderContainerNS(n,i,"msub");case r.DomType.MmlDegree:case r.DomType.MmlSuperArgument:case r.DomType.MmlSubArgument:return this.renderContainerNS(n,i,"mn");case r.DomType.MmlFunctionName:return this.renderContainerNS(n,i,"ms");case r.DomType.MmlDelimiter:return this.renderMmlDelimiter(n);case r.DomType.MmlRun:return this.renderMmlRun(n);case r.DomType.MmlNary:return this.renderMmlNary(n);case r.DomType.MmlPreSubSuper:return this.renderMmlPreSubSuper(n);case r.DomType.MmlBar:return this.renderMmlBar(n);case r.DomType.MmlEquationArray:return this.renderMllList(n);case r.DomType.Inserted:return this.renderInserted(n);case r.DomType.Deleted:return this.renderDeleted(n)}return null}renderChildren(n,s){return this.renderElements(n.children,s)}renderElements(n,s){if(n==null)return null;var t=n.flatMap(l=>this.renderElement(l)).filter(l=>l!=null);return s&&g(s,t),t}renderContainer(n,s,t){return this.createElement(s,t,this.renderChildren(n))}renderContainerNS(n,s,t,l){return d(s,t,l,this.renderChildren(n))}renderParagraph(n){var s,t,l,b,k=this.createElement("p");const E=this.findStyle(n.styleName);(s=n.tabs)!==null&&s!==void 0||(n.tabs=(t=E==null?void 0:E.paragraphProps)===null||t===void 0?void 0:t.tabs),this.renderClass(n,k),this.renderChildren(n,k),this.renderStyleValues(n.cssStyle,k),this.renderCommonProperties(k.style,n);const _=(l=n.numbering)!==null&&l!==void 0?l:(b=E==null?void 0:E.paragraphProps)===null||b===void 0?void 0:b.numbering;return _&&k.classList.add(this.numberingClass(_.id,_.level)),k}renderRunProperties(n,s){this.renderCommonProperties(n,s)}renderCommonProperties(n,s){s!=null&&(s.color&&(n.color=s.color),s.fontSize&&(n["font-size"]=s.fontSize))}renderHyperlink(n){var s=this.createElement("a");if(this.renderChildren(n,s),this.renderStyleValues(n.cssStyle,s),n.href)s.href=n.href;else if(n.id){const t=this.document.documentPart.rels.find(l=>l.id==n.id&&l.targetMode==="External");s.href=t==null?void 0:t.target}return s}renderDrawing(n){var s=this.createElement("div");return s.style.display="inline-block",s.style.position="relative",s.style.textIndent="0px",this.renderChildren(n,s),this.renderStyleValues(n.cssStyle,s),s}renderImage(n){let s=this.createElement("img");return this.renderStyleValues(n.cssStyle,s),this.document&&this.document.loadDocumentImage(n.src,this.currentPart).then(t=>{s.src=t}),s}renderText(n){return this.htmlDocument.createTextNode(n.text)}renderDeletedText(n){return this.options.renderEndnotes?this.htmlDocument.createTextNode(n.text):null}renderBreak(n){return n.break=="textWrapping"?this.createElement("br"):null}renderInserted(n){return this.options.renderChanges?this.renderContainer(n,"ins"):this.renderChildren(n)}renderDeleted(n){return this.options.renderChanges?this.renderContainer(n,"del"):null}renderSymbol(n){var s=this.createElement("span");return s.style.fontFamily=n.font,s.innerHTML=`&#x${n.char};`,s}renderFootnoteReference(n){var s=this.createElement("sup");return this.currentFootnoteIds.push(n.id),s.textContent=`${this.currentFootnoteIds.length}`,s}renderEndnoteReference(n){var s=this.createElement("sup");return this.currentEndnoteIds.push(n.id),s.textContent=`${this.currentEndnoteIds.length}`,s}renderTab(n){var s,t=this.createElement("span");if(t.innerHTML=" ",this.options.experimental){t.className=this.tabStopClass();var l=(s=function(b,k){for(var E=b.parent;E!=null&&E.type!=k;)E=E.parent;return E}(n,r.DomType.Paragraph))===null||s===void 0?void 0:s.tabs;this.currentTabs.push({stops:l,span:t})}return t}renderBookmarkStart(n){var s=this.createElement("span");return s.id=n.name,s}renderRun(n){if(n.fieldRun)return null;const s=this.createElement("span");if(n.id&&(s.id=n.id),this.renderClass(n,s),this.renderStyleValues(n.cssStyle,s),n.verticalAlign){const t=this.createElement(n.verticalAlign);this.renderChildren(n,t),s.appendChild(t)}else this.renderChildren(n,s);return s}renderTable(n){let s=this.createElement("table");return this.tableCellPositions.push(this.currentCellPosition),this.tableVerticalMerges.push(this.currentVerticalMerge),this.currentVerticalMerge={},this.currentCellPosition={col:0,row:0},n.columns&&s.appendChild(this.renderTableColumns(n.columns)),this.renderClass(n,s),this.renderChildren(n,s),this.renderStyleValues(n.cssStyle,s),this.currentVerticalMerge=this.tableVerticalMerges.pop(),this.currentCellPosition=this.tableCellPositions.pop(),s}renderTableColumns(n){let s=this.createElement("colgroup");for(let t of n){let l=this.createElement("col");t.width&&(l.style.width=t.width),s.appendChild(l)}return s}renderTableRow(n){let s=this.createElement("tr");return this.currentCellPosition.col=0,this.renderClass(n,s),this.renderChildren(n,s),this.renderStyleValues(n.cssStyle,s),this.currentCellPosition.row++,s}renderTableCell(n){let s=this.createElement("td");const t=this.currentCellPosition.col;return n.verticalMerge?n.verticalMerge=="restart"?(this.currentVerticalMerge[t]=s,s.rowSpan=1):this.currentVerticalMerge[t]&&(this.currentVerticalMerge[t].rowSpan+=1,s.style.display="none"):this.currentVerticalMerge[t]=null,this.renderClass(n,s),this.renderChildren(n,s),this.renderStyleValues(n.cssStyle,s),n.span&&(s.colSpan=n.span),this.currentCellPosition.col+=s.colSpan,s}renderVmlPicture(n){var s=y("div");return this.renderChildren(n,s),s}renderVmlElement(n){var s,t,l=h("svg");l.setAttribute("style",n.cssStyleText);const b=this.renderVmlChildElement(n);return!((s=n.imageHref)===null||s===void 0)&&s.id&&((t=this.document)===null||t===void 0||t.loadDocumentImage(n.imageHref.id,this.currentPart).then(k=>b.setAttribute("href",k))),l.appendChild(b),requestAnimationFrame(()=>{const k=l.firstElementChild.getBBox();l.setAttribute("width",`${Math.ceil(k.x+k.width)}`),l.setAttribute("height",`${Math.ceil(k.y+k.height)}`)}),l}renderVmlChildElement(n){const s=h(n.tagName);Object.entries(n.attrs).forEach(([t,l])=>s.setAttribute(t,l));for(let t of n.children)t.type==r.DomType.VmlElement?s.appendChild(this.renderVmlChildElement(t)):s.appendChild(...(0,m.asArray)(this.renderElement(t)));return s}renderMmlRadical(n){var s;const t=n.children.find(b=>b.type==r.DomType.MmlBase);if(!((s=n.props)===null||s===void 0)&&s.hideDegree)return d(i,"msqrt",null,this.renderElements([t]));const l=n.children.find(b=>b.type==r.DomType.MmlDegree);return d(i,"mroot",null,this.renderElements([t,l]))}renderMmlDelimiter(n){var s,t;const l=[];return l.push(d(i,"mo",null,[(s=n.props.beginChar)!==null&&s!==void 0?s:"("])),l.push(...this.renderElements(n.children)),l.push(d(i,"mo",null,[(t=n.props.endChar)!==null&&t!==void 0?t:")"])),d(i,"mrow",null,l)}renderMmlNary(n){var s,t;const l=[],b=(0,m.keyBy)(n.children,R=>R.type),k=b[r.DomType.MmlSuperArgument],E=b[r.DomType.MmlSubArgument],_=k?d(i,"mo",null,(0,m.asArray)(this.renderElement(k))):null,C=E?d(i,"mo",null,(0,m.asArray)(this.renderElement(E))):null,o=d(i,"mo",null,[(t=(s=n.props)===null||s===void 0?void 0:s.char)!==null&&t!==void 0?t:"∫"]);return _||C?l.push(d(i,"munderover",null,[o,C,_])):_?l.push(d(i,"mover",null,[o,_])):C?l.push(d(i,"munder",null,[o,C])):l.push(o),l.push(...this.renderElements(b[r.DomType.MmlBase].children)),d(i,"mrow",null,l)}renderMmlPreSubSuper(n){const s=[],t=(0,m.keyBy)(n.children,C=>C.type),l=t[r.DomType.MmlSuperArgument],b=t[r.DomType.MmlSubArgument],k=l?d(i,"mo",null,(0,m.asArray)(this.renderElement(l))):null,E=b?d(i,"mo",null,(0,m.asArray)(this.renderElement(b))):null,_=d(i,"mo",null);return s.push(d(i,"msubsup",null,[_,E,k])),s.push(...this.renderElements(t[r.DomType.MmlBase].children)),d(i,"mrow",null,s)}renderMmlGroupChar(n){const s=n.props.verticalJustification==="bot"?"mover":"munder",t=this.renderContainerNS(n,i,s);return n.props.char&&t.appendChild(d(i,"mo",null,[n.props.char])),t}renderMmlBar(n){const s=this.renderContainerNS(n,i,"mrow");switch(n.props.position){case"top":s.style.textDecoration="overline";break;case"bottom":s.style.textDecoration="underline"}return s}renderMmlRun(n){const s=d(i,"ms");return this.renderClass(n,s),this.renderStyleValues(n.cssStyle,s),this.renderChildren(n,s),s}renderMllList(n){const s=d(i,"mtable");this.renderClass(n,s),this.renderStyleValues(n.cssStyle,s),this.renderChildren(n);for(let t of this.renderChildren(n))s.appendChild(d(i,"mtr",null,[d(i,"mtd",null,[t])]));return s}renderStyleValues(n,s){for(let t in n)t.startsWith("$")?s.setAttribute(t.slice(1),n[t]):s.style[t]=n[t]}renderClass(n,s){n.className&&(s.className=n.className),n.styleName&&s.classList.add(this.processStyleName(n.styleName))}findStyle(n){var s;return n&&((s=this.styleMap)===null||s===void 0?void 0:s[n])}numberingClass(n,s){return`${this.className}-num-${n}-${s}`}tabStopClass(){return`${this.className}-tab-stop`}styleToString(n,s,t=null){let l=`${n} {\r +`;for(const b in s)b.startsWith("$")||(l+=` ${b}: ${s[b]};\r +`);return t&&(l+=t),l+`}\r +`}numberingCounter(n,s){return`${this.className}-num-${n}-${s}`}levelTextToContent(n,s,t,l){var b;return`"${n.replace(/%\d*/g,k=>{let E=parseInt(k.substring(1),10)-1;return`"counter(${this.numberingCounter(t,E)}, ${l})"`})}${(b={tab:"\\9",space:"\\a0"}[s])!==null&&b!==void 0?b:""}"`}numFormatToCssValue(n){var s;return(s={none:"none",bullet:"disc",decimal:"decimal",lowerLetter:"lower-alpha",upperLetter:"upper-alpha",lowerRoman:"lower-roman",upperRoman:"upper-roman",decimalZero:"decimal-leading-zero",aiueo:"katakana",aiueoFullWidth:"katakana",chineseCounting:"simp-chinese-informal",chineseCountingThousand:"simp-chinese-informal",chineseLegalSimplified:"simp-chinese-formal",chosung:"hangul-consonant",ideographDigital:"cjk-ideographic",ideographTraditional:"cjk-heavenly-stem",ideographLegalTraditional:"trad-chinese-formal",ideographZodiac:"cjk-earthly-branch",iroha:"katakana-iroha",irohaFullWidth:"katakana-iroha",japaneseCounting:"japanese-informal",japaneseDigitalTenThousand:"cjk-decimal",japaneseLegal:"japanese-formal",thaiNumbers:"thai",koreanCounting:"korean-hangul-formal",koreanDigital:"korean-hangul-formal",koreanDigital2:"korean-hanja-informal",hebrew1:"hebrew",hebrew2:"hebrew",hindiNumbers:"devanagari",ganada:"hangul",taiwaneseCounting:"cjk-ideographic",taiwaneseCountingThousand:"cjk-ideographic",taiwaneseDigital:"cjk-decimal"}[n])!==null&&s!==void 0?s:n}refreshTabStops(){this.options.experimental&&(clearTimeout(this.tabsTimeout),this.tabsTimeout=setTimeout(()=>{const n=(0,f.computePixelToPoint)();for(let s of this.currentTabs)(0,f.updateTabStop)(s.span,s.stops,this.defaultTabSize,n)},500))}}},630:(v,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.updateTabStop=e.computePixelToPoint=void 0;const u={pos:0,leader:"none",style:"left"};function r(m){return parseFloat(m)}e.computePixelToPoint=function(m=document.body){const f=document.createElement("div");f.style.width="100pt",m.appendChild(f);const a=100/f.offsetWidth;return m.removeChild(f),a},e.updateTabStop=function(m,f,a,i=.75){const y=m.closest("p"),h=m.getBoundingClientRect(),d=y.getBoundingClientRect(),p=getComputedStyle(y),g=(f==null?void 0:f.length)>0?f.map(_=>({pos:r(_.position),leader:_.leader,style:_.style})).sort((_,C)=>_.pos-C.pos):[u],w=g[g.length-1],P=d.width*i,n=r(a);let s=w.pos+n;if(s_.style!="clear"&&_.pos>b);if(k==null)return;let E=1;if(k.style=="right"||k.style=="center"){const _=Array.from(y.querySelectorAll(`.${m.className}`)),C=_.indexOf(m)+1,o=document.createRange();o.setStart(m,1),C<_.length?o.setEndBefore(_[C]):o.setEndAfter(y);const R=k.style=="center"?.5:1,V=o.getBoundingClientRect(),F=V.left+R*V.width-(d.left-t);E=k.pos-F*i}else E=k.pos-b;switch(m.innerHTML=" ",m.style.textDecoration="inherit",m.style.wordSpacing=`${E.toFixed(0)}pt`,k.leader){case"dot":case"middleDot":m.style.textDecoration="underline",m.style.textDecorationStyle="dotted";break;case"hyphen":case"heavy":case"underscore":m.style.textDecoration="underline"}}},881:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.WmlEndnote=e.WmlFootnote=e.WmlBaseNote=void 0;const r=u(120);class m{}e.WmlBaseNote=m,e.WmlFootnote=class extends m{constructor(){super(...arguments),this.type=r.DomType.Footnote}},e.WmlEndnote=class extends m{constructor(){super(...arguments),this.type=r.DomType.Endnote}}},735:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.EndnotesPart=e.FootnotesPart=e.BaseNotePart=void 0;const r=u(530),m=u(881);class f extends r.Part{constructor(i,y,h){super(i,y),this._documentParser=h}}e.BaseNotePart=f,e.FootnotesPart=class extends f{constructor(a,i,y){super(a,i,y)}parseXml(a){this.notes=this._documentParser.parseNotes(a,"footnote",m.WmlFootnote)}},e.EndnotesPart=class extends f{constructor(a,i,y){super(a,i,y)}parseXml(a){this.notes=this._documentParser.parseNotes(a,"endnote",m.WmlEndnote)}}},527:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.NumberingPart=void 0;const r=u(530),m=u(682);class f extends r.Part{constructor(i,y,h){super(i,y),this._documentParser=h}parseXml(i){Object.assign(this,(0,m.parseNumberingPart)(i,this._package.xmlParser)),this.domNumberings=this._documentParser.parseNumberingFile(i)}}e.NumberingPart=f},682:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseNumberingBulletPicture=e.parseNumberingLevelOverrride=e.parseNumberingLevel=e.parseAbstractNumbering=e.parseNumbering=e.parseNumberingPart=void 0;const r=u(109),m=u(488);function f(d,p){let g={id:p.attr(d,"numId"),overrides:[]};for(let w of p.elements(d))switch(w.localName){case"abstractNumId":g.abstractId=p.attr(w,"val");break;case"lvlOverride":g.overrides.push(y(w,p))}return g}function a(d,p){let g={id:p.attr(d,"abstractNumId"),levels:[]};for(let w of p.elements(d))switch(w.localName){case"name":g.name=p.attr(w,"val");break;case"multiLevelType":g.multiLevelType=p.attr(w,"val");break;case"numStyleLink":g.numberingStyleLink=p.attr(w,"val");break;case"styleLink":g.styleLink=p.attr(w,"val");break;case"lvl":g.levels.push(i(w,p))}return g}function i(d,p){let g={level:p.intAttr(d,"ilvl")};for(let w of p.elements(d))switch(w.localName){case"start":g.start=p.attr(w,"val");break;case"lvlRestart":g.restart=p.intAttr(w,"val");break;case"numFmt":g.format=p.attr(w,"val");break;case"lvlText":g.text=p.attr(w,"val");break;case"lvlJc":g.justification=p.attr(w,"val");break;case"lvlPicBulletId":g.bulletPictureId=p.attr(w,"val");break;case"pStyle":g.paragraphStyle=p.attr(w,"val");break;case"pPr":g.paragraphProps=(0,r.parseParagraphProperties)(w,p);break;case"rPr":g.runProps=(0,m.parseRunProperties)(w,p)}return g}function y(d,p){let g={level:p.intAttr(d,"ilvl")};for(let w of p.elements(d))switch(w.localName){case"startOverride":g.start=p.intAttr(w,"val");break;case"lvl":g.numberingLevel=i(w,p)}return g}function h(d,p){var g=p.element(d,"pict"),w=g&&p.element(g,"shape"),P=w&&p.element(w,"imagedata");return P?{id:p.attr(d,"numPicBulletId"),referenceId:p.attr(P,"id"),style:p.attr(w,"style")}:null}e.parseNumberingPart=function(d,p){let g={numberings:[],abstractNumberings:[],bulletPictures:[]};for(let w of p.elements(d))switch(w.localName){case"num":g.numberings.push(f(w,p));break;case"abstractNum":g.abstractNumberings.push(a(w,p));break;case"numPicBullet":g.bulletPictures.push(h(w,p))}return g},e.parseNumbering=f,e.parseAbstractNumbering=a,e.parseNumberingLevel=i,e.parseNumberingLevelOverrride=y,e.parseNumberingBulletPicture=h},472:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.XmlParser=e.serializeXmlString=e.parseXmlString=void 0;const r=u(149);e.parseXmlString=function(a,i=!1){var y;i&&(a=a.replace(/<[?].*[?]>/,"")),a=(y=a).charCodeAt(0)===65279?y.substring(1):y;const h=new DOMParser().parseFromString(a,"application/xml"),d=(p=h.getElementsByTagName("parsererror")[0])===null||p===void 0?void 0:p.textContent;var p;if(d)throw new Error(d);return h},e.serializeXmlString=function(a){return new XMLSerializer().serializeToString(a)};class m{elements(i,y=null){const h=[];for(let d=0,p=i.childNodes.length;d{Object.defineProperty(e,"__esModule",{value:!0}),e.SettingsPart=void 0;const r=u(530),m=u(846);class f extends r.Part{constructor(i,y){super(i,y)}parseXml(i){this.settings=(0,m.parseSettings)(i,this._package.xmlParser)}}e.SettingsPart=f},846:(v,e)=>{function u(r,m){var f={defaultNoteIds:[]};for(let a of m.elements(r))switch(a.localName){case"numFmt":f.nummeringFormat=m.attr(a,"val");break;case"footnote":case"endnote":f.defaultNoteIds.push(m.attr(a,"id"))}return f}Object.defineProperty(e,"__esModule",{value:!0}),e.parseNoteProperties=e.parseSettings=void 0,e.parseSettings=function(r,m){var f={};for(let a of m.elements(r))switch(a.localName){case"defaultTabStop":f.defaultTabStop=m.lengthAttr(a,"val");break;case"footnotePr":f.footnoteProps=u(a,m);break;case"endnotePr":f.endnoteProps=u(a,m);break;case"autoHyphenation":f.autoHyphenation=m.boolAttr(a,"val")}return f},e.parseNoteProperties=u},240:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.StylesPart=void 0;const r=u(530);class m extends r.Part{constructor(a,i,y){super(a,i),this._documentParser=y}parseXml(a){this.styles=this._documentParser.parseStylesFile(a)}}e.StylesPart=m},893:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.ThemePart=void 0;const r=u(530),m=u(55);class f extends r.Part{constructor(i,y){super(i,y)}parseXml(i){this.theme=(0,m.parseTheme)(i,this._package.xmlParser)}}e.ThemePart=f},55:(v,e)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseFontInfo=e.parseFontScheme=e.parseColorScheme=e.parseTheme=e.DmlTheme=void 0;class u{}function r(a,i){var y={name:i.attr(a,"name"),colors:{}};for(let p of i.elements(a)){var h=i.element(p,"srgbClr"),d=i.element(p,"sysClr");h?y.colors[p.localName]=i.attr(h,"val"):d&&(y.colors[p.localName]=i.attr(d,"lastClr"))}return y}function m(a,i){var y={name:i.attr(a,"name")};for(let h of i.elements(a))switch(h.localName){case"majorFont":y.majorFont=f(h,i);break;case"minorFont":y.minorFont=f(h,i)}return y}function f(a,i){return{latinTypeface:i.elementAttr(a,"latin","typeface"),eaTypeface:i.elementAttr(a,"ea","typeface"),csTypeface:i.elementAttr(a,"cs","typeface")}}e.DmlTheme=u,e.parseTheme=function(a,i){var y=new u,h=i.element(a,"themeElements");for(let d of i.elements(h))switch(d.localName){case"clrScheme":y.colorScheme=r(d,i);break;case"fontScheme":y.fontScheme=m(d,i)}return y},e.parseColorScheme=r,e.parseFontScheme=m,e.parseFontInfo=f},593:(v,e)=>{function u(r){return r&&typeof r=="object"&&!Array.isArray(r)}Object.defineProperty(e,"__esModule",{value:!0}),e.asArray=e.formatCssRules=e.parseCssRules=e.mergeDeep=e.isString=e.isObject=e.blobToBase64=e.keyBy=e.resolvePath=e.splitPath=e.escapeClassName=void 0,e.escapeClassName=function(r){return r==null?void 0:r.replace(/[ .]+/g,"-").replace(/[&]+/g,"and").toLowerCase()},e.splitPath=function(r){let m=r.lastIndexOf("/")+1;return[m==0?"":r.substring(0,m),m==0?r:r.substring(m)]},e.resolvePath=function(r,m){try{const f="http://docx/";return new URL(r,f+m).toString().substring(f.length)}catch{return`${m}${r}`}},e.keyBy=function(r,m){return r.reduce((f,a)=>(f[m(a)]=a,f),{})},e.blobToBase64=function(r){return new Promise((m,f)=>{const a=new FileReader;a.onloadend=()=>m(a.result),a.onerror=()=>f(),a.readAsDataURL(r)})},e.isObject=u,e.isString=function(r){return typeof r=="string"||r instanceof String},e.mergeDeep=function r(m,...f){var a;if(!f.length)return m;const i=f.shift();if(u(m)&&u(i))for(const y in i)u(i[y])?r((a=m[y])!==null&&a!==void 0?a:m[y]={},i[y]):m[y]=i[y];return r(m,...f)},e.parseCssRules=function(r){const m={};for(const f of r.split(";")){const[a,i]=f.split(":");m[a]=i}return m},e.formatCssRules=function(r){return Object.entries(r).map((m,f)=>`${m}: ${f}`).join(";")},e.asArray=function(r){return Array.isArray(r)?r:[r]}},320:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.parseVmlElement=e.VmlElement=void 0;const r=u(149),m=u(120),f=u(472);class a extends m.OpenXmlElementBase{constructor(){super(...arguments),this.type=m.DomType.VmlElement,this.attrs={}}}function i(h){var d;return{stroke:f.default.attr(h,"color"),"stroke-width":(d=f.default.lengthAttr(h,"weight",r.LengthUsage.Emu))!==null&&d!==void 0?d:"1px"}}function y(h){return h.split(",")}e.VmlElement=a,e.parseVmlElement=function h(d,p){var g=new a;switch(d.localName){case"rect":g.tagName="rect",Object.assign(g.attrs,{width:"100%",height:"100%"});break;case"oval":g.tagName="ellipse",Object.assign(g.attrs,{cx:"50%",cy:"50%",rx:"50%",ry:"50%"});break;case"line":g.tagName="line";break;case"shape":g.tagName="g";break;case"textbox":g.tagName="foreignObject",Object.assign(g.attrs,{width:"100%",height:"100%"});break;default:return null}for(const w of f.default.attrs(d))switch(w.localName){case"style":g.cssStyleText=w.value;break;case"fillcolor":g.attrs.fill=w.value;break;case"from":const[P,n]=y(w.value);Object.assign(g.attrs,{x1:P,y1:n});break;case"to":const[s,t]=y(w.value);Object.assign(g.attrs,{x2:s,y2:t})}for(const w of f.default.elements(d))switch(w.localName){case"stroke":Object.assign(g.attrs,i(w));break;case"fill":Object.assign(g.attrs,{});break;case"imagedata":g.tagName="image",Object.assign(g.attrs,{width:"100%",height:"100%"}),g.imageHref={id:f.default.attr(w,"id"),title:f.default.attr(w,"title")};break;case"txbxContent":g.children.push(...p.parseBodyElements(w));break;default:const P=h(w,p);P&&g.children.push(P)}return g}},213:(v,e,u)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.deobfuscate=e.WordDocument=void 0;const r=u(461),m=u(380),f=u(522),a=u(448),i=u(593),y=u(527),h=u(240),d=u(985),p=u(665),g=u(162),w=u(893),P=u(735),n=u(287),s=u(177),t=[{type:r.RelationshipTypes.OfficeDocument,target:"word/document.xml"},{type:r.RelationshipTypes.ExtendedProperties,target:"docProps/app.xml"},{type:r.RelationshipTypes.CoreProperties,target:"docProps/core.xml"},{type:r.RelationshipTypes.CustomProperties,target:"docProps/custom.xml"}];class l{constructor(){this.parts=[],this.partsMap={}}static async load(E,_,C){var o=new l;return o._options=C,o._parser=_,o._package=await f.OpenXmlPackage.load(E,C),o.rels=await o._package.loadRelationships(),await Promise.all(t.map(R=>{var V;const F=(V=o.rels.find(q=>q.type===R.type))!==null&&V!==void 0?V:R;return o.loadRelationshipPart(F.target,F.type)})),o}save(E="blob"){return this._package.save(E)}async loadRelationshipPart(E,_){var C;if(this.partsMap[E])return this.partsMap[E];if(!this._package.get(E))return null;let o=null;switch(_){case r.RelationshipTypes.OfficeDocument:this.documentPart=o=new a.DocumentPart(this._package,E,this._parser);break;case r.RelationshipTypes.FontTable:this.fontTablePart=o=new m.FontTablePart(this._package,E);break;case r.RelationshipTypes.Numbering:this.numberingPart=o=new y.NumberingPart(this._package,E,this._parser);break;case r.RelationshipTypes.Styles:this.stylesPart=o=new h.StylesPart(this._package,E,this._parser);break;case r.RelationshipTypes.Theme:this.themePart=o=new w.ThemePart(this._package,E);break;case r.RelationshipTypes.Footnotes:this.footnotesPart=o=new P.FootnotesPart(this._package,E,this._parser);break;case r.RelationshipTypes.Endnotes:this.endnotesPart=o=new P.EndnotesPart(this._package,E,this._parser);break;case r.RelationshipTypes.Footer:o=new d.FooterPart(this._package,E,this._parser);break;case r.RelationshipTypes.Header:o=new d.HeaderPart(this._package,E,this._parser);break;case r.RelationshipTypes.CoreProperties:this.corePropsPart=o=new g.CorePropsPart(this._package,E);break;case r.RelationshipTypes.ExtendedProperties:this.extendedPropsPart=o=new p.ExtendedPropsPart(this._package,E);break;case r.RelationshipTypes.CustomProperties:o=new s.CustomPropsPart(this._package,E);break;case r.RelationshipTypes.Settings:this.settingsPart=o=new n.SettingsPart(this._package,E)}if(o==null)return Promise.resolve(null);if(this.partsMap[E]=o,this.parts.push(o),await o.load(),((C=o.rels)===null||C===void 0?void 0:C.length)>0){const[R]=(0,i.splitPath)(o.path);await Promise.all(o.rels.map(V=>this.loadRelationshipPart((0,i.resolvePath)(V.target,R),V.type)))}return o}async loadDocumentImage(E,_){const C=await this.loadResource(_??this.documentPart,E,"blob");return this.blobToURL(C)}async loadNumberingImage(E){const _=await this.loadResource(this.numberingPart,E,"blob");return this.blobToURL(_)}async loadFont(E,_){const C=await this.loadResource(this.fontTablePart,E,"uint8array");return C&&this.blobToURL(new Blob([b(C,_)]))}blobToURL(E){return E?this._options.useBase64URL?(0,i.blobToBase64)(E):URL.createObjectURL(E):null}findPartByRelId(E,_=null){var C,o=((C=_.rels)!==null&&C!==void 0?C:this.rels).find(V=>V.id==E);const R=_?(0,i.splitPath)(_.path)[0]:"";return o?this.partsMap[(0,i.resolvePath)(o.target,R)]:null}getPathById(E,_){const C=E.rels.find(R=>R.id==_),[o]=(0,i.splitPath)(E.path);return C?(0,i.resolvePath)(C.target,o):null}loadResource(E,_,C){const o=this.getPathById(E,_);return o?this._package.load(o,C):Promise.resolve(null)}}function b(k,E){const _=E.replace(/{|}|-/g,""),C=new Array(16);for(let o=0;o<16;o++)C[16-o-1]=parseInt(_.substr(2*o,2),16);for(let o=0;o<32;o++)k[o]=k[o]^C[o%16];return k}e.WordDocument=l,e.deobfuscate=b},583:v=>{v.exports="data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 20 100%27 preserveAspectRatio=%27none%27%3E%3Cpath d=%27m0,75 l5,0 l5,25 l10,-100%27 stroke=%27black%27 fill=%27none%27 vector-effect=%27non-scaling-stroke%27/%3E%3C/svg%3E"},626:v=>{v.exports=T}},B={};function S(v){var e=B[v];if(e!==void 0)return e.exports;var u=B[v]={id:v,exports:{}};return L[v](u,u.exports,S),u.exports}return S.m=L,S.n=v=>{var e=v&&v.__esModule?()=>v.default:()=>v;return S.d(e,{a:e}),e},S.d=(v,e)=>{for(var u in e)S.o(e,u)&&!S.o(v,u)&&Object.defineProperty(v,u,{enumerable:!0,get:e[u]})},S.o=(v,e)=>Object.prototype.hasOwnProperty.call(v,e),S.r=v=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(v,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(v,"__esModule",{value:!0})},S.b=document.baseURI||self.location.href,S(667)})())})(Ce);var Ne=Ce.exports;const Oe={ignoreLastRenderedPageBreak:!1};function Re(ne,ce={}){return typeof ne=="string"?ze(ne,ce):Promise.resolve(ne)}function ze(ne,ce){return fetch(ne,ce).then(T=>T.status!==200?Promise.reject(T):T)}async function Me(ne){let ce;return ne instanceof Blob?ce=ne:ne instanceof Response?ce=await ne.blob():ne instanceof ArrayBuffer&&(ce=new Blob([ne])),ce}function Ie(ne,ce,T={}){if(!ne)return ce.innerHTML="",Promise.resolve();let L;return ne instanceof Blob?L=ne:ne instanceof Response?L=ne.blob():ne instanceof ArrayBuffer&&(L=new Blob([ne])),Ne.renderAsync(L,ce,ce,{...Oe,...T})}const je={getData:Re,render:Ie,getBlob:Me};export{je as d}; diff --git a/examples/dist/assets/hack-84c8901e.css b/examples/dist/assets/hack-84c8901e.css new file mode 100644 index 0000000..cf34929 --- /dev/null +++ b/examples/dist/assets/hack-84c8901e.css @@ -0,0 +1 @@ +body{margin:0}.x-spreadsheet{font-size:13px;line-height:normal;-webkit-user-select:none;user-select:none;-moz-user-select:none;font-family:Lato,Source Sans Pro,Roboto,Helvetica,Arial,sans-serif;box-sizing:content-box;background:#fff;-webkit-font-smoothing:antialiased}.x-spreadsheet textarea{font:400 13px Arial,Lato,Source Sans Pro,Roboto,Helvetica,sans-serif}.x-spreadsheet-sheet{position:relative;overflow:hidden}.x-spreadsheet-table{vertical-align:bottom}.x-spreadsheet-tooltip{font-family:inherit;position:absolute;padding:5px 10px;color:#fff;border-radius:1px;background:#000000;font-size:12px;z-index:201}.x-spreadsheet-tooltip:before{pointer-events:none;position:absolute;left:calc(50% - 4px);top:-4px;content:"";width:8px;height:8px;background:inherit;-webkit-transform:rotate(45deg);transform:rotate(45deg);z-index:1;box-shadow:1px 1px 3px -1px #0000004d}.x-spreadsheet-color-palette{padding:5px}.x-spreadsheet-color-palette table{margin:0;padding:0;border-collapse:separate;border-spacing:2;background:#fff}.x-spreadsheet-color-palette table td{margin:0;cursor:pointer;border:1px solid transparent}.x-spreadsheet-color-palette table td:hover{border-color:#ddd}.x-spreadsheet-color-palette table td .x-spreadsheet-color-palette-cell{width:16px;height:16px}.x-spreadsheet-border-palette{padding:6px}.x-spreadsheet-border-palette table{margin:0;padding:0;border-collapse:separate;border-spacing:0;background:#fff;table-layout:fixed}.x-spreadsheet-border-palette table td{margin:0}.x-spreadsheet-border-palette .x-spreadsheet-border-palette-left{border-right:1px solid #eee;padding-right:6px}.x-spreadsheet-border-palette .x-spreadsheet-border-palette-left .x-spreadsheet-border-palette-cell{width:30px;height:30px;cursor:pointer;text-align:center}.x-spreadsheet-border-palette .x-spreadsheet-border-palette-left .x-spreadsheet-border-palette-cell .x-spreadsheet-icon-img{opacity:.8}.x-spreadsheet-border-palette .x-spreadsheet-border-palette-left .x-spreadsheet-border-palette-cell:hover{background-color:#eee}.x-spreadsheet-border-palette .x-spreadsheet-border-palette-right{padding-left:6px}.x-spreadsheet-border-palette .x-spreadsheet-border-palette-right .x-spreadsheet-toolbar-btn{margin-top:0;margin-bottom:3px}.x-spreadsheet-border-palette .x-spreadsheet-border-palette-right .x-spreadsheet-line-type{position:relative;left:0;top:-3px}.x-spreadsheet-dropdown{position:relative}.x-spreadsheet-dropdown .x-spreadsheet-dropdown-content{position:absolute;z-index:200;background:#fff;box-shadow:1px 2px 5px 2px #33333326}.x-spreadsheet-dropdown.bottom-left .x-spreadsheet-dropdown-content{top:calc(100% + 5px);left:0}.x-spreadsheet-dropdown.bottom-right .x-spreadsheet-dropdown-content{top:calc(100% + 5px);right:0}.x-spreadsheet-dropdown.top-left .x-spreadsheet-dropdown-content{bottom:calc(100% + 5px);left:0}.x-spreadsheet-dropdown.top-right .x-spreadsheet-dropdown-content{bottom:calc(100% + 5px);right:0}.x-spreadsheet-dropdown .x-spreadsheet-dropdown-title{padding:0 5px;display:inline-block}.x-spreadsheet-dropdown .x-spreadsheet-dropdown-header .x-spreadsheet-icon.arrow-left{margin-left:4px}.x-spreadsheet-dropdown .x-spreadsheet-dropdown-header .x-spreadsheet-icon.arrow-right{width:10px;margin-right:4px}.x-spreadsheet-dropdown .x-spreadsheet-dropdown-header .x-spreadsheet-icon.arrow-right .arrow-down{left:-130px}.x-spreadsheet-resizer{position:absolute;z-index:11}.x-spreadsheet-resizer .x-spreadsheet-resizer-hover{background-color:#4b89ff40}.x-spreadsheet-resizer .x-spreadsheet-resizer-line{position:absolute}.x-spreadsheet-resizer.horizontal{cursor:row-resize}.x-spreadsheet-resizer.horizontal .x-spreadsheet-resizer-line{border-bottom:2px dashed #4b89ff;left:0;bottom:0}.x-spreadsheet-resizer.vertical{cursor:col-resize}.x-spreadsheet-resizer.vertical .x-spreadsheet-resizer-line{border-right:2px dashed #4b89ff;top:0;right:0}.x-spreadsheet-scrollbar{position:absolute;bottom:0;right:0;background-color:#f4f5f8;opacity:.9;z-index:12}.x-spreadsheet-scrollbar.horizontal{right:15px;overflow-x:scroll;overflow-y:hidden}.x-spreadsheet-scrollbar.horizontal>div{height:1px;background:#ddd}.x-spreadsheet-scrollbar.vertical{bottom:15px;overflow-x:hidden;overflow-y:scroll}.x-spreadsheet-scrollbar.vertical>div{width:1px;background:#ddd}.x-spreadsheet-overlayer{position:absolute;left:0;top:0;z-index:10}.x-spreadsheet-overlayer .x-spreadsheet-overlayer-content{position:absolute;overflow:hidden;pointer-events:none;width:100%;height:100%}.x-spreadsheet-editor,.x-spreadsheet-selector{box-sizing:content-box;position:absolute;overflow:hidden;pointer-events:none;top:0;left:0;width:100%;height:100%}.x-spreadsheet-selector .hide-input{position:absolute;z-index:0}.x-spreadsheet-selector .hide-input input{padding:0;width:0;border:none!important}.x-spreadsheet-selector .x-spreadsheet-selector-area{position:absolute;border:2px solid #4b89ff;background:rgba(75,137,255,.1);z-index:5}.x-spreadsheet-selector .x-spreadsheet-selector-clipboard,.x-spreadsheet-selector .x-spreadsheet-selector-autofill{position:absolute;background:transparent;z-index:100}.x-spreadsheet-selector .x-spreadsheet-selector-clipboard{border:2px dashed #4b89ff}.x-spreadsheet-selector .x-spreadsheet-selector-autofill{border:1px dashed rgba(0,0,0,.45)}.x-spreadsheet-selector .x-spreadsheet-selector-corner{pointer-events:auto;position:absolute;cursor:crosshair;font-size:0;height:5px;width:5px;right:-5px;bottom:-5px;border:2px solid #ffffff;background:#4b89ff}.x-spreadsheet-editor{z-index:20}.x-spreadsheet-editor .x-spreadsheet-editor-area{position:absolute;text-align:left;border:2px solid #4b89ff;line-height:0;z-index:100;pointer-events:auto}.x-spreadsheet-editor .x-spreadsheet-editor-area textarea{box-sizing:content-box;border:none;padding:0 3px;outline:none;resize:none;text-align:start;overflow-y:hidden;font:400 13px Arial,Lato,Source Sans Pro,Roboto,Helvetica,sans-serif;color:inherit;white-space:normal;word-wrap:break-word;line-height:22px;margin:0}.x-spreadsheet-editor .x-spreadsheet-editor-area .textline{overflow:hidden;visibility:hidden;position:fixed;top:0;left:0}.x-spreadsheet-item{-webkit-user-select:none;user-select:none;background:0;border:1px solid transparent;outline:none;height:26px;color:#000000e6;line-height:26px;list-style:none;padding:2px 10px;cursor:default;text-align:left;overflow:hidden}.x-spreadsheet-item.disabled{pointer-events:none;opacity:.5}.x-spreadsheet-item:hover,.x-spreadsheet-item.active{background:rgba(0,0,0,.05)}.x-spreadsheet-item.divider{height:0;padding:0;margin:5px 0;border:none;border-bottom:1px solid rgba(0,0,0,.1)}.x-spreadsheet-item .label{float:right;opacity:.65;font-size:1em}.x-spreadsheet-item.state,.x-spreadsheet-header.state{padding-left:35px!important;position:relative}.x-spreadsheet-item.state:before,.x-spreadsheet-header.state:before{content:"";position:absolute;width:10px;height:10px;left:12px;top:calc(50% - 5px);background:rgba(0,0,0,.08);border-radius:2px}.x-spreadsheet-item.state.checked:before,.x-spreadsheet-header.state.checked:before{background:#4b89ff}.x-spreadsheet-checkbox{position:relative;display:inline-block;backface-visibility:hidden;outline:0;vertical-align:baseline;font-style:normal;font-size:1rem;line-height:1em}.x-spreadsheet-checkbox>input{position:absolute;top:0;left:0;opacity:0!important;outline:0;z-index:-1}.x-spreadsheet-suggest,.x-spreadsheet-contextmenu,.x-spreadsheet-sort-filter{position:absolute;box-shadow:1px 2px 5px 2px #33333326;background:#fff;z-index:100;width:260px;pointer-events:auto;overflow:auto}.x-spreadsheet-suggest{width:200px}.x-spreadsheet-filter{border:1px solid #e9e9e9;font-size:12px;margin:10px}.x-spreadsheet-filter .x-spreadsheet-header{padding:.5em .75em;background:#f8f8f9;border-bottom:1px solid #e9e9e9;border-left:1px solid transparent}.x-spreadsheet-filter .x-spreadsheet-body{height:200px;overflow-y:auto}.x-spreadsheet-filter .x-spreadsheet-body .x-spreadsheet-item{height:20px;line-height:20px}.x-spreadsheet-sort-filter .x-spreadsheet-buttons{margin:10px}.x-spreadsheet-toolbar,.x-spreadsheet-bottombar{height:40px;padding:0 30px;text-align:left;background:#f5f6f7;display:flex}.x-spreadsheet-bottombar{position:relative;border-top:1px solid #e0e2e4}.x-spreadsheet-bottombar .x-spreadsheet-menu>li{line-height:40px;height:40px;padding-top:0;padding-bottom:0;vertical-align:middle;border-right:1px solid #e8eaed}.x-spreadsheet-menu{list-style:none;margin:0;padding:0;-webkit-user-select:none;user-select:none}.x-spreadsheet-menu>li{float:left;line-height:1.25em;padding:.785em 1em;margin:0;vertical-align:middle;text-align:left;font-weight:400;color:#80868b;white-space:nowrap;cursor:pointer;transition:all .3s;font-weight:700}.x-spreadsheet-menu>li.active{background-color:#fff;color:#000000a6}.x-spreadsheet-menu>li .x-spreadsheet-icon{margin:0 6px}.x-spreadsheet-menu>li .x-spreadsheet-icon .x-spreadsheet-icon-img:hover{opacity:.85}.x-spreadsheet-menu>li .x-spreadsheet-dropdown{display:inline-block}.x-spreadsheet-toolbar{border-bottom:1px solid #e0e2e4}.x-spreadsheet-toolbar .x-spreadsheet-toolbar-btns{display:inline-flex}.x-spreadsheet-toolbar .x-spreadsheet-toolbar-more{padding:0 6px 6px;text-align:left}.x-spreadsheet-toolbar .x-spreadsheet-toolbar-more .x-spreadsheet-toolbar-divider{margin-top:0}.x-spreadsheet-toolbar .x-spreadsheet-toolbar-btn{flex:0 0 auto;display:inline-block;border:1px solid transparent;height:26px;line-height:26px;min-width:26px;margin:6px 1px 0;padding:0;text-align:center;border-radius:2px}.x-spreadsheet-toolbar .x-spreadsheet-toolbar-btn.disabled{pointer-events:none;opacity:.5}.x-spreadsheet-toolbar .x-spreadsheet-toolbar-btn:hover,.x-spreadsheet-toolbar .x-spreadsheet-toolbar-btn.active{background:rgba(0,0,0,.08)}.x-spreadsheet-toolbar-divider{display:inline-block;border-right:1px solid #e0e2e4;width:0;vertical-align:middle;height:18px;margin:12px 3px 0}.x-spreadsheet-print{position:absolute;left:0;top:0;z-index:100;width:100%;height:100%;display:flex;flex-direction:column}.x-spreadsheet-print-bar{background:#424242;height:60px;line-height:60px;padding:0 30px}.x-spreadsheet-print-bar .-title{color:#fff;font-weight:700;font-size:1.2em;float:left}.x-spreadsheet-print-bar .-right{float:right;margin-top:12px}.x-spreadsheet-print-content{display:flex;flex:auto;flex-direction:row;background:#d0d0d0;height:calc(100% - 60px)}.x-spreadsheet-print-content .-sider{flex:0 0 300px;width:300px;border-left:2px solid #ccc;background:#fff}.x-spreadsheet-print-content .-content{flex:auto;overflow-x:auto;overflow-y:scroll;height:100%}.x-spreadsheet-canvas-card-wraper{margin:40px 20px}.x-spreadsheet-canvas-card{background:#fff;margin:auto;page-break-before:auto;page-break-after:always;box-shadow:0 8px 10px 1px #00000024,0 3px 14px 3px #0000001f,0 4px 5px #0003}.x-spreadsheet-calendar{color:#000000a6;background:#ffffff;-webkit-user-select:none;user-select:none}.x-spreadsheet-calendar .calendar-header{font-weight:700;line-height:30px;text-align:center;width:100%;float:left;background:#f9fafb}.x-spreadsheet-calendar .calendar-header .calendar-header-left{padding-left:5px;float:left}.x-spreadsheet-calendar .calendar-header .calendar-header-right{float:right}.x-spreadsheet-calendar .calendar-header .calendar-header-right a{padding:3px 0;margin-right:2px;border-radius:2px}.x-spreadsheet-calendar .calendar-header .calendar-header-right a:hover{background:rgba(0,0,0,.08)}.x-spreadsheet-calendar .calendar-body{border-collapse:collapse;border-spacing:0}.x-spreadsheet-calendar .calendar-body th,.x-spreadsheet-calendar .calendar-body td{width:100%/7;min-width:32px;text-align:center;font-weight:700;line-height:30px;padding:0}.x-spreadsheet-calendar .calendar-body td>.cell:hover{background:#ecf6fd}.x-spreadsheet-calendar .calendar-body td>.cell.active,.x-spreadsheet-calendar .calendar-body td>.cell.active:hover{background:#ecf6fd;color:#2185d0}.x-spreadsheet-calendar .calendar-body td>.cell.disabled{pointer-events:none;opacity:.5}.x-spreadsheet-datepicker{box-shadow:2px 2px 5px #0003;position:absolute;left:0;top:calc(100% + 5px);z-index:10;width:auto}.x-spreadsheet-buttons{display:flex;justify-content:flex-end}.x-spreadsheet-buttons .x-spreadsheet-button{margin-left:8px}.x-spreadsheet-button{display:inline-block;border-radius:3px;line-height:1em;min-height:1em;white-space:nowrap;text-align:center;cursor:pointer;font-size:1em;font-weight:700;padding:.75em 1em;color:#0009;background:#E0E1E2;text-decoration:none;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;outline:none;vertical-align:baseline;zoom:1;-webkit-user-select:none;user-select:none;transition:all .1s linear}.x-spreadsheet-button.active,.x-spreadsheet-button:hover{background-color:#c0c1c2;color:#000c}.x-spreadsheet-button.primary{color:#fff;background-color:#2185d0}.x-spreadsheet-button.primary:hover,.x-spreadsheet-button.primary.active{color:#fff;background-color:#1678c2}.x-spreadsheet-form-input{font-size:1em;position:relative;font-weight:400;display:inline-flex;color:#000000de}.x-spreadsheet-form-input input{z-index:1;margin:0;max-width:100%;flex:1 0 auto;outline:0;-webkit-tap-highlight-color:rgba(255,255,255,0);text-align:left;line-height:30px;height:30px;padding:0 8px;background:#fff;border:1px solid #e9e9e9;border-radius:3px;transition:box-shadow .1s ease,border-color .1s ease;box-shadow:inset 0 1px 2px #0a0a0a0f}.x-spreadsheet-form-input input:focus{border-color:#4b89ff;box-shadow:inset 0 1px 2px #4b89ff33}.x-spreadsheet-form-select{position:relative;display:inline-block;background:#fff;border:1px solid #e9e9e9;border-radius:2px;cursor:pointer;color:#000000de;-webkit-user-select:none;user-select:none;box-shadow:inset 0 1px 2px #0a0a0a0f}.x-spreadsheet-form-select .input-text{text-overflow:ellipsis;white-space:nowrap;min-width:60px;width:auto;height:30px;line-height:30px;padding:0 8px}.x-spreadsheet-form-fields{display:flex;flex-direction:row;flex-wrap:wrap}.x-spreadsheet-form-fields .x-spreadsheet-form-field{flex:0 1 auto}.x-spreadsheet-form-fields .x-spreadsheet-form-field .label{display:inline-block;margin:0 10px 0 0}.x-spreadsheet-form-field{display:block;vertical-align:middle;margin-left:10px;margin-bottom:10px}.x-spreadsheet-form-field:first-child{margin-left:0}.x-spreadsheet-form-field.error .x-spreadsheet-form-select,.x-spreadsheet-form-field.error input{border-color:#f04134}.x-spreadsheet-form-field .tip{color:#f04134;font-size:.9em}.x-spreadsheet-dimmer{display:none;position:absolute;top:0!important;left:0!important;width:100%;height:100%;text-align:center;vertical-align:middle;background-color:#0009;opacity:0;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.5s;animation-duration:.5s;transition:background-color .5s linear;-webkit-user-select:none;user-select:none;z-index:1000}.x-spreadsheet-dimmer.active{display:block;opacity:1}form fieldset{border:none}form fieldset label{display:block;margin-bottom:.5em;font-size:1em;color:#666}form fieldset select{font-size:1.1em;width:100%;background-color:#fff;border:none;border-bottom:2px solid #ddd;padding:.5em .85em;border-radius:2px}.x-spreadsheet-modal,.x-spreadsheet-toast{font-size:13px;position:fixed;z-index:1001;text-align:left;line-height:1.25em;min-width:360px;color:#000000de;font-family:Lato,Source Sans Pro,Roboto,Helvetica,Arial,sans-serif;border-radius:4px;border:1px solid rgba(0,0,0,.1);background-color:#fff;background-clip:padding-box;box-shadow:#0003 0 2px 8px}.x-spreadsheet-toast{background-color:#ffffffd9}.x-spreadsheet-modal-header,.x-spreadsheet-toast-header{font-weight:600;background-clip:padding-box;background-color:#ffffffd9;border-bottom:1px solid rgba(0,0,0,.05);border-radius:4px 4px 0 0}.x-spreadsheet-modal-header .x-spreadsheet-icon,.x-spreadsheet-toast-header .x-spreadsheet-icon{position:absolute;right:.8em;top:.65em;border-radius:18px}.x-spreadsheet-modal-header .x-spreadsheet-icon:hover,.x-spreadsheet-toast-header .x-spreadsheet-icon:hover{opacity:1;background:rgba(0,0,0,.08)}.x-spreadsheet-toast-header{color:#f2711c}.x-spreadsheet-modal-header{border-bottom:1px solid #e0e2e4;background:rgba(0,0,0,.08);font-size:1.0785em}.x-spreadsheet-modal-header,.x-spreadsheet-modal-content,.x-spreadsheet-toast-header,.x-spreadsheet-toast-content{padding:.75em 1em}@media screen and (min-width: 320px) and (max-width: 480px){.x-spreadsheet-toolbar{display:none}}.x-spreadsheet-icon{width:18px;height:18px;margin:1px 1px 2px;text-align:center;vertical-align:middle;-webkit-user-select:none;user-select:none;overflow:hidden;position:relative;display:inline-block}.x-spreadsheet-icon .x-spreadsheet-icon-img{background-image:url(/vue-office/examples/dist/assets/sprite-adc9b140.svg);position:absolute;width:262px;height:444px;opacity:.56}.x-spreadsheet-icon .x-spreadsheet-icon-img.undo{left:0;top:0}.x-spreadsheet-icon .x-spreadsheet-icon-img.redo{left:-18px;top:0}.x-spreadsheet-icon .x-spreadsheet-icon-img.print{left:-36px;top:0}.x-spreadsheet-icon .x-spreadsheet-icon-img.paintformat{left:-54px;top:0}.x-spreadsheet-icon .x-spreadsheet-icon-img.clearformat{left:-72px;top:0}.x-spreadsheet-icon .x-spreadsheet-icon-img.font-bold{left:-90px;top:0}.x-spreadsheet-icon .x-spreadsheet-icon-img.font-italic{left:-108px;top:0}.x-spreadsheet-icon .x-spreadsheet-icon-img.underline{left:-126px;top:0}.x-spreadsheet-icon .x-spreadsheet-icon-img.strike{left:-144px;top:0}.x-spreadsheet-icon .x-spreadsheet-icon-img.color{left:-162px;top:0}.x-spreadsheet-icon .x-spreadsheet-icon-img.bgcolor{left:-180px;top:0}.x-spreadsheet-icon .x-spreadsheet-icon-img.merge{left:-198px;top:0}.x-spreadsheet-icon .x-spreadsheet-icon-img.align-left{left:-216px;top:0}.x-spreadsheet-icon .x-spreadsheet-icon-img.align-center{left:-234px;top:0}.x-spreadsheet-icon .x-spreadsheet-icon-img.align-right{left:0;top:-18px}.x-spreadsheet-icon .x-spreadsheet-icon-img.align-top{left:-18px;top:-18px}.x-spreadsheet-icon .x-spreadsheet-icon-img.align-middle{left:-36px;top:-18px}.x-spreadsheet-icon .x-spreadsheet-icon-img.align-bottom{left:-54px;top:-18px}.x-spreadsheet-icon .x-spreadsheet-icon-img.textwrap{left:-72px;top:-18px}.x-spreadsheet-icon .x-spreadsheet-icon-img.autofilter{left:-90px;top:-18px}.x-spreadsheet-icon .x-spreadsheet-icon-img.formula{left:-108px;top:-18px}.x-spreadsheet-icon .x-spreadsheet-icon-img.arrow-down{left:-126px;top:-18px}.x-spreadsheet-icon .x-spreadsheet-icon-img.arrow-right{left:-144px;top:-18px}.x-spreadsheet-icon .x-spreadsheet-icon-img.link{left:-162px;top:-18px}.x-spreadsheet-icon .x-spreadsheet-icon-img.chart{left:-180px;top:-18px}.x-spreadsheet-icon .x-spreadsheet-icon-img.freeze{left:-198px;top:-18px}.x-spreadsheet-icon .x-spreadsheet-icon-img.ellipsis{left:-216px;top:-18px}.x-spreadsheet-icon .x-spreadsheet-icon-img.add{left:-234px;top:-18px}.x-spreadsheet-icon .x-spreadsheet-icon-img.border-all{left:0;top:-36px}.x-spreadsheet-icon .x-spreadsheet-icon-img.border-inside{left:-18px;top:-36px}.x-spreadsheet-icon .x-spreadsheet-icon-img.border-horizontal{left:-36px;top:-36px}.x-spreadsheet-icon .x-spreadsheet-icon-img.border-vertical{left:-54px;top:-36px}.x-spreadsheet-icon .x-spreadsheet-icon-img.border-outside{left:-72px;top:-36px}.x-spreadsheet-icon .x-spreadsheet-icon-img.border-left{left:-90px;top:-36px}.x-spreadsheet-icon .x-spreadsheet-icon-img.border-top{left:-108px;top:-36px}.x-spreadsheet-icon .x-spreadsheet-icon-img.border-right{left:-126px;top:-36px}.x-spreadsheet-icon .x-spreadsheet-icon-img.border-bottom{left:-144px;top:-36px}.x-spreadsheet-icon .x-spreadsheet-icon-img.border-none{left:-162px;top:-36px}.x-spreadsheet-icon .x-spreadsheet-icon-img.line-color{left:-180px;top:-36px}.x-spreadsheet-icon .x-spreadsheet-icon-img.line-type{left:-198px;top:-36px}.x-spreadsheet-icon .x-spreadsheet-icon-img.close{left:-234px;top:-36px}.x-spreadsheet-icon .x-spreadsheet-icon-img.chevron-down{left:0;top:-54px}.x-spreadsheet-icon .x-spreadsheet-icon-img.chevron-up{left:-18px;top:-54px}.x-spreadsheet-icon .x-spreadsheet-icon-img.chevron-left{left:-36px;top:-54px}.x-spreadsheet-icon .x-spreadsheet-icon-img.chevron-right{left:-54px;top:-54px} diff --git a/examples/dist/assets/hack-a38f8b6f.js b/examples/dist/assets/hack-a38f8b6f.js new file mode 100644 index 0000000..9dacfd6 --- /dev/null +++ b/examples/dist/assets/hack-a38f8b6f.js @@ -0,0 +1,96 @@ +import{y as Nt,z as Pi}from"./index-846e3dd9.js";import{c as Ia}from"./_commonjs-dynamic-modules-302442b1.js";import{g as Z1}from"./url-de9b02cf.js";class Li{constructor(b,e=""){typeof b=="string"?(this.el=document.createElement(b),this.el.className=e):this.el=b,this.data={}}data(b,e){return e!==void 0?(this.data[b]=e,this):this.data[b]}on(b,e){const[d,...m]=b.split(".");let f=d;return f==="mousewheel"&&/Firefox/i.test(window.navigator.userAgent)&&(f="DOMMouseScroll"),this.el.addEventListener(f,c=>{e(c);for(let u=0;u{this.css(c,`${b[c]}px`)}),this;const{offsetTop:e,offsetLeft:d,offsetHeight:m,offsetWidth:f}=this.el;return{top:e,left:d,height:m,width:f}}scroll(b){const{el:e}=this;return b!==void 0&&(b.left!==void 0&&(e.scrollLeft=b.left),b.top!==void 0&&(e.scrollTop=b.top)),{left:e.scrollLeft,top:e.scrollTop}}box(){return this.el.getBoundingClientRect()}parent(){return new Li(this.el.parentNode)}children(...b){return arguments.length===0?this.el.childNodes:(b.forEach(e=>this.child(e)),this)}removeChild(b){this.el.removeChild(b)}child(b){let e=b;return typeof b=="string"?e=document.createTextNode(b):b instanceof Li&&(e=b.el),this.el.appendChild(e),this}contains(b){return this.el.contains(b)}className(b){return b!==void 0?(this.el.className=b,this):this.el.className}addClass(b){return this.el.classList.add(b),this}hasClass(b){return this.el.classList.contains(b)}removeClass(b){return this.el.classList.remove(b),this}toggle(b="active"){return this.toggleClass(b)}toggleClass(b){return this.el.classList.toggle(b)}active(b=!0,e="active"){return b?this.addClass(e):this.removeClass(e),this}checked(b=!0){return this.active(b,"checked"),this}disabled(b=!0){return b?this.addClass("disabled"):this.removeClass("disabled"),this}attr(b,e){if(e!==void 0)this.el.setAttribute(b,e);else{if(typeof b=="string")return this.el.getAttribute(b);Object.keys(b).forEach(d=>{this.el.setAttribute(d,b[d])})}return this}removeAttr(b){return this.el.removeAttribute(b),this}html(b){return b!==void 0?(this.el.innerHTML=b,this):this.el.innerHTML}val(b){return b!==void 0?(this.el.value=b,this):this.el.value}focus(){this.el.focus()}cssRemoveKeys(...b){return b.forEach(e=>this.el.style.removeProperty(e)),this}css(b,e){return e===void 0&&typeof b!="string"?(Object.keys(b).forEach(d=>{this.el.style[d]=b[d]}),this):e!==void 0?(this.el.style[b]=e,this):this.el.style[b]}computedStyle(){return window.getComputedStyle(this.el,null)}show(){return this.css("display","block"),this}hide(){return this.css("display","none"),this}}const $e=(N,b="")=>new Li(N,b),wi=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"];function rh(N){let b="",e=N;for(;e>=wi.length;)e/=wi.length,e-=1,b+=wi[parseInt(e,10)%wi.length];const d=N%wi.length;return b+=wi[d],b}function J1(N){let b=0;for(let e=0;e="0"&&N.charAt(d)<="9"?e+=N.charAt(d):b+=N.charAt(d);return[J1(b),parseInt(e,10)-1]}function ai(N,b){return`${rh(N)}${b+1}`}function $s(N,b,e,d=()=>!0){if(b===0&&e===0)return N;const[m,f]=xi(N);return d(m,f)?ai(m+b,f+e):N}class _r{constructor(b,e,d,m,f=0,c=0){this.sri=b,this.sci=e,this.eri=d,this.eci=m,this.w=f,this.h=c}set(b,e,d,m){this.sri=b,this.sci=e,this.eri=d,this.eci=m}multiple(){return this.eri-this.sri>0||this.eci-this.sci>0}includes(...b){let[e,d]=[0,0];b.length===1?[d,e]=xi(b[0]):b.length===2&&([e,d]=b);const{sri:m,sci:f,eri:c,eci:u}=this;return m<=e&&e<=c&&f<=d&&d<=u}each(b,e=()=>!0){const{sri:d,sci:m,eri:f,eci:c}=this;for(let u=d;u<=f;u+=1)if(e(u))for(let s=m;s<=c;s+=1)b(u,s)}contains(b){return this.sri<=b.sri&&this.sci<=b.sci&&this.eri>=b.eri&&this.eci>=b.eci}within(b){return this.sri>=b.sri&&this.sci>=b.sci&&this.eri<=b.eri&&this.eci<=b.eci}disjoint(b){return this.sri>b.eri||this.sci>b.eci||b.sri>this.eri||b.sci>this.eci}intersects(b){return this.sri<=b.eri&&this.sci<=b.eci&&b.sri<=this.eri&&b.sci<=this.eci}union(b){const{sri:e,sci:d,eri:m,eci:f}=this;return new _r(b.srim?b.eri:m,b.eci>f?b.eci:f)}difference(b){const e=[],d=(i,o,l,a)=>{e.push(new _r(i,o,l,a))},{sri:m,sci:f,eri:c,eci:u}=this,s=b.sri-m,t=b.sci-f,n=c-b.eri,r=u-b.eci;return s>0?(d(m,f,b.sri-1,u),n>0?(d(b.eri+1,f,c,u),t>0&&d(b.sri,f,b.eri,b.sci-1),r>0&&d(b.sri,b.eci+1,b.eri,u)):(t>0&&d(b.sri,f,c,b.sci-1),r>0&&d(b.sri,b.eci+1,c,u))):n>0&&(d(b.eri+1,f,c,u),t>0&&d(m,f,b.eri,b.sci-1),r>0&&d(m,b.eci+1,b.eri,u)),t>0?(d(m,f,c,b.sci-1),r>0?(d(m,b.eri+1,c,u),s>0&&d(m,b.sci,b.sri-1,b.eci),n>0&&d(b.sri+1,b.sci,c,b.eci)):(s>0&&d(m,b.sci,b.sri-1,u),n>0&&d(b.sri+1,b.sci,c,u))):r>0&&(d(c,b.eci+1,c,u),s>0&&d(m,f,b.sri-1,b.eci),n>0&&d(b.eri+1,f,c,b.eci)),e}size(){return[this.eri-this.sri+1,this.eci-this.sci+1]}toString(){const{sri:b,sci:e,eri:d,eci:m}=this;let f=ai(e,b);return this.multiple()&&(f=`${f}:${ai(m,d)}`),f}clone(){const{sri:b,sci:e,eri:d,eci:m,w:f,h:c}=this;return new _r(b,e,d,m,f,c)}equals(b){return this.eri===b.eri&&this.eci===b.eci&&this.sri===b.sri&&this.sci===b.sci}static valueOf(b){const e=b.split(":"),[d,m]=xi(e[0]);let[f,c]=[m,d];return e.length>1&&([c,f]=xi(e[1])),new _r(m,d,f,c)}}let Q1=class{constructor(){this.range=new _r(0,0,0,0),this.ri=0,this.ci=0}multiple(){return this.range.multiple()}setIndexes(b,e){this.ri=b,this.ci=e}size(){return this.range.size()}};class q1{constructor(){this.x=0,this.y=0,this.ri=0,this.ci=0}}class eg{constructor(){this.undoItems=[],this.redoItems=[]}add(b){this.undoItems.push(JSON.stringify(b)),this.redoItems=[]}canUndo(){return this.undoItems.length>0}canRedo(){return this.redoItems.length>0}undo(b,e){const{undoItems:d,redoItems:m}=this;this.canUndo()&&(m.push(JSON.stringify(b)),e(JSON.parse(d.pop())))}redo(b,e){const{undoItems:d,redoItems:m}=this;this.canRedo()&&(d.push(JSON.stringify(b)),e(JSON.parse(m.pop())))}}class tg{constructor(){this.range=null,this.state="clear"}copy(b){return this.range=b,this.state="copy",this}cut(b){return this.range=b,this.state="cut",this}isCopy(){return this.state==="copy"}isCut(){return this.state==="cut"}isClear(){return this.state==="clear"}clear(){this.range=null,this.state="clear"}}class Sc{constructor(b,e,d){this.ci=b,this.operator=e,this.value=d}set(b,e){this.operator=b,this.value=e}includes(b){const{operator:e,value:d}=this;return e==="all"?!0:e==="in"?d.includes(b):!1}vlength(){const{operator:b,value:e}=this;return b==="in"?e.length:0}getData(){const{ci:b,operator:e,value:d}=this;return{ci:b,operator:e,value:d}}}class Ec{constructor(b,e){this.ci=b,this.order=e}asc(){return this.order==="asc"}desc(){return this.order==="desc"}}class rg{constructor(){this.ref=null,this.filters=[],this.sort=null}setData({ref:b,filters:e,sort:d}){b!=null&&(this.ref=b,this.filters=e.map(m=>new Sc(m.ci,m.operator,m.value)),d&&(this.sort=new Ec(d.ci,d.order)))}getData(){if(this.active()){const{ref:b,filters:e,sort:d}=this;return{ref:b,filters:e.map(m=>m.getData()),sort:d}}return{}}addFilter(b,e,d){const m=this.getFilter(b);m==null?this.filters.push(new Sc(b,e,d)):m.set(e,d)}setSort(b,e){this.sort=e?new Ec(b,e):null}includes(b,e){return this.active()?this.hrange().includes(b,e):!1}getSort(b){const{sort:e}=this;return e&&e.ci===b?e:null}getFilter(b){const{filters:e}=this;for(let d=0;d!e.within(b))}getFirstIncludes(b,e){for(let d=0;de.intersects(b)))}intersects(b){for(let e=0;e{d.intersects(e)&&(e=d.union(e))}),e}add(b){this.deleteWithin(b),this._.push(b)}shift(b,e,d,m){this._.forEach(f=>{const{sri:c,sci:u,eri:s,eci:t}=f,n=f;b==="row"?c>=e?(n.sri+=d,n.eri+=d):c=e?(n.sci+=d,n.eci+=d):u{const f=m;f.within(b)&&(f.eri+=e,f.sri+=e,f.sci+=d,f.eci+=d)})}setData(b){return this._=b.map(e=>_r.valueOf(e)),this}getData(){return this._.map(b=>b.toString())}}function ng(N){return JSON.parse(JSON.stringify(N))}const nh=(N={},...b)=>(b.forEach(e=>{Object.keys(e).forEach(d=>{const m=e[d];typeof m=="string"||typeof m=="number"||typeof m=="boolean"?N[d]=m:typeof m!="function"&&!Array.isArray(m)&&m instanceof Object?(N[d]=N[d]||{},nh(N[d],m)):N[d]=m})}),N);function lf(N,b){const e=Object.keys(N);if(e.length!==Object.keys(b).length)return!1;for(let d=0;de)=>{let e=0,d=0;return Object.keys(N).forEach(m=>{e+=b(N[m],m),d+=1}),[e,d]};function sg(N,b){const e=N[`${b}`];return delete N[`${b}`],e}function ag(N,b,e,d,m,f){let c=e,u=d,s=N;for(;sm);s+=1)u=f(s),c+=u;return[s,c-u,u]}function og(N,b,e){let d=0;for(let m=N;m5?u.toFixed(2):u;return u.toFixed(Math.max(d,m))}const qr={cloneDeep:ng,merge:(...N)=>nh({},...N),equals:lf,arrayEquals:lg,sum:ig,rangeEach:fg,rangeSum:og,rangeReduceIf:ag,deleteProperty:sg,numberCalc:Ni};class cg{constructor({len:b,height:e}){this._={},this.len=b,this.height=e}getHeight(b){if(this.isHide(b))return 0;const e=this.get(b);return e&&e.height?e.height:this.height}setHeight(b,e){const d=this.getOrNew(b);d.height=e}unhide(b){let e=b;for(;e>0&&(e-=1,this.isHide(e));)this.setHide(e,!1)}isHide(b){const e=this.get(b);return e&&e.hide}setHide(b,e){const d=this.getOrNew(b);e===!0?d.hide=!0:delete d.hide}setStyle(b,e){const d=this.getOrNew(b);d.style=e}sumHeight(b,e,d){return qr.rangeSum(b,e,m=>d&&d.has(m)?0:this.getHeight(m))}totalHeight(){return this.sumHeight(0,this.len)}get(b){return this._[b]}getOrNew(b){return this._[b]=this._[b]||{cells:{}},this._[b]}getCell(b,e){const d=this.get(b);return d!==void 0&&d.cells!==void 0&&d.cells[e]!==void 0?d.cells[e]:null}getCellMerge(b,e){const d=this.getCell(b,e);return d&&d.merge?d.merge:[0,0]}getCellOrNew(b,e){const d=this.getOrNew(b);return d.cells[e]=d.cells[e]||{},d.cells[e]}setCell(b,e,d,m="all"){const f=this.getOrNew(b);m==="all"?f.cells[e]=d:m==="text"?(f.cells[e]=f.cells[e]||{},f.cells[e].text=d.text):m==="format"&&(f.cells[e]=f.cells[e]||{},f.cells[e].style=d.style,d.merge&&(f.cells[e].merge=d.merge))}setCellText(b,e,d){const m=this.getCellOrNew(b,e);m.editable!==!1&&(m.text=d)}copyPaste(b,e,d,m=!1,f=()=>{}){const{sri:c,sci:u,eri:s,eci:t}=b,n=e.sri,r=e.sci,i=e.eri,o=e.eci,[l,a]=b.size(),[g,v]=e.size();let h=!0,w=0;(i0){const{text:X}=j;let G=I-r+(E-n)+2;if(h||(G-=w+1),X[0]==="=")j.text=X.replace(/[a-zA-Z]{1,3}\d+/g,V=>{let[J,H]=[0,0];return c===n?J=G-1:H=G-1,/^\d+$/.test(V)?V:$s(V,J,H)});else if(l<=1&&a>1&&(n>s||i1&&(r>t||o{this.eachCells(m,f=>{let c=parseInt(m,10),u=parseInt(f,10);b.includes(m,f)&&(c=e.sri+(c-b.sri),u=e.sci+(u-b.sci)),d[c]=d[c]||{cells:{}},d[c].cells[u]=this._[m].cells[f]})}),this._=d}paste(b,e){if(b.length<=0)return;const{sri:d,sci:m}=e;b.forEach((f,c)=>{const u=d+c;f.forEach((s,t)=>{const n=m+t;this.setCellText(u,n,s)})})}insert(b,e=1){const d={};this.each((m,f)=>{let c=parseInt(m,10);c>=b&&(c+=e,this.eachCells(m,(u,s)=>{s.text&&s.text[0]==="="&&(s.text=s.text.replace(/[a-zA-Z]{1,3}\d+/g,t=>$s(t,0,e,(n,r)=>r>=b)))})),d[c]=f}),this._=d,this.len+=e}delete(b,e){const d=e-b+1,m={};this.each((f,c)=>{const u=parseInt(f,10);ue&&(m[u-d]=c,this.eachCells(f,(s,t)=>{t.text&&t.text[0]==="="&&(t.text=t.text.replace(/[a-zA-Z]{1,3}\d+/g,n=>$s(n,0,-d,(r,i)=>i>e)))}))}),this._=m,this.len-=d}insertColumn(b,e=1){this.each((d,m)=>{const f={};this.eachCells(d,(c,u)=>{let s=parseInt(c,10);s>=b&&(s+=e,u.text&&u.text[0]==="="&&(u.text=u.text.replace(/[a-zA-Z]{1,3}\d+/g,t=>$s(t,e,0,n=>n>=b)))),f[s]=u}),m.cells=f})}deleteColumn(b,e){const d=e-b+1;this.each((m,f)=>{const c={};this.eachCells(m,(u,s)=>{const t=parseInt(u,10);te&&(c[t-d]=s,s.text&&s.text[0]==="="&&(s.text=s.text.replace(/[a-zA-Z]{1,3}\d+/g,n=>$s(n,-d,0,r=>r>e))))}),f.cells=c})}deleteCells(b,e="all"){b.each((d,m)=>{this.deleteCell(d,m,e)})}deleteCell(b,e,d="all"){const m=this.get(b);if(m!==null){const f=this.getCell(b,e);f!==null&&f.editable!==!1&&(d==="all"?delete m.cells[e]:d==="text"?(f.text&&delete f.text,f.value&&delete f.value):d==="format"?(f.style!==void 0&&delete f.style,f.merge&&delete f.merge):d==="merge"&&f.merge&&delete f.merge)}}maxCell(){const b=Object.keys(this._),e=b[b.length-1],d=this._[e];if(d){const{cells:m}=d,f=Object.keys(m),c=f[f.length-1];return[parseInt(e,10),parseInt(c,10)]}return[0,0]}each(b){Object.entries(this._).forEach(([e,d])=>{b(e,d)})}eachCells(b,e){this._[b]&&this._[b].cells&&Object.entries(this._[b].cells).forEach(([d,m])=>{e(d,m)})}setData(b){b.len&&(this.len=b.len,delete b.len),this._=b}getData(){const{len:b}=this;return Object.assign({len:b},this._)}}class hg{constructor({len:b,width:e,indexWidth:d,minWidth:m}){this._={},this.len=b,this.width=e,this.indexWidth=d,this.minWidth=m}setData(b){b.len&&(this.len=b.len,delete b.len),this._=b}getData(){const{len:b}=this;return Object.assign({len:b},this._)}getWidth(b){if(this.isHide(b))return 0;const e=this._[b];return e&&e.width?e.width:this.width}getOrNew(b){return this._[b]=this._[b]||{},this._[b]}setWidth(b,e){const d=this.getOrNew(b);d.width=e}unhide(b){let e=b;for(;e>0&&(e-=1,this.isHide(e));)this.setHide(e,!1)}isHide(b){const e=this._[b];return e&&e.hide}setHide(b,e){const d=this.getOrNew(b);e===!0?d.hide=!0:delete d.hide}setStyle(b,e){const d=this.getOrNew(b);d.style=e}sumWidth(b,e){return qr.rangeSum(b,e,d=>this.getWidth(d))}totalWidth(){return this.sumWidth(0,this.len)}}const ug={toolbar:{undo:"Undo",redo:"Redo",print:"Print",paintformat:"Paint format",clearformat:"Clear format",format:"Format",fontName:"Font",fontSize:"Font size",fontBold:"Font bold",fontItalic:"Font italic",underline:"Underline",strike:"Strike",color:"Text color",bgcolor:"Fill color",border:"Borders",merge:"Merge cells",align:"Horizontal align",valign:"Vertical align",textwrap:"Text wrapping",freeze:"Freeze cell",autofilter:"Filter",formula:"Functions",more:"More"},contextmenu:{copy:"Copy",cut:"Cut",paste:"Paste",pasteValue:"Paste values only",pasteFormat:"Paste format only",hide:"Hide",insertRow:"Insert row",insertColumn:"Insert column",deleteSheet:"Delete",deleteRow:"Delete row",deleteColumn:"Delete column",deleteCell:"Delete cell",deleteCellText:"Delete cell text",validation:"Data validations",cellprintable:"Enable export",cellnonprintable:"Disable export",celleditable:"Enable editing",cellnoneditable:"Disable editing"},print:{size:"Paper size",orientation:"Page orientation",orientations:["Landscape","Portrait"]},format:{normal:"Normal",text:"Plain Text",number:"Number",percent:"Percent",rmb:"RMB",usd:"USD",eur:"EUR",date:"Date",time:"Time",datetime:"Date time",duration:"Duration"},formula:{sum:"Sum",average:"Average",max:"Max",min:"Min",_if:"IF",and:"AND",or:"OR",concat:"Concat"},validation:{required:"it must be required",notMatch:"it not match its validation rule",between:"it is between {} and {}",notBetween:"it is not between {} and {}",notIn:"it is not in list",equal:"it equal to {}",notEqual:"it not equal to {}",lessThan:"it less than {}",lessThanEqual:"it less than or equal to {}",greaterThan:"it greater than {}",greaterThanEqual:"it greater than or equal to {}"},error:{pasteForMergedCell:"Unable to do this for merged cells"},calendar:{weeks:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"]},button:{next:"Next",cancel:"Cancel",remove:"Remove",save:"Save",ok:"OK"},sort:{desc:"Sort Z -> A",asc:"Sort A -> Z"},filter:{empty:"empty"},dataValidation:{mode:"Mode",range:"Cell Range",criteria:"Criteria",modeType:{cell:"Cell",column:"Colun",row:"Row"},type:{list:"List",number:"Number",date:"Date",phone:"Phone",email:"Email"},operator:{be:"between",nbe:"not betwwen",lt:"less than",lte:"less than or equal to",gt:"greater than",gte:"greater than or equal to",eq:"equal to",neq:"not equal to"}}};let cf=["en"];const ih={en:ug};function Cc(N,b){if(b)for(const e of cf){if(!b[e])break;let d=b[e];const m=N.match(/(?:\\.|[^.])+/g);for(let f=0;fCr(N)}function sh(N,b,e=!1){e?cf=[N]:cf.unshift(N),b&&(ih[N]=b)}const Tc={phone:/^[1-9]\d{10}$/,email:/w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*/};function Pn(N,b,...e){let d="";return N||(d=Cr(`validation.${b}`,...e)),[N,d]}class ah{constructor(b,e,d,m){this.required=e,this.value=d,this.type=b,this.operator=m,this.message=""}parseValue(b){const{type:e}=this;return e==="date"?new Date(b):e==="number"?Number(b):b}equals(b){let e=this.type===b.type&&this.required===b.required&&this.operator===b.operator;return e&&(Array.isArray(this.value)?e=qr.arrayEquals(this.value,b.value):e=this.value===b.value),e}values(){return this.value.split(",")}validate(b){const{required:e,operator:d,value:m,type:f}=this;if(e&&/^\s*$/.test(b))return Pn(!1,"required");if(/^\s*$/.test(b))return[!0];if(Tc[f]&&!Tc[f].test(b))return Pn(!1,"notMatch");if(f==="list")return Pn(this.values().includes(b),"notIn");if(d){const c=this.parseValue(b);if(d==="be"){const[u,s]=m;return Pn(c>=this.parseValue(u)&&c<=this.parseValue(s),"between",u,s)}if(d==="nbe"){const[u,s]=m;return Pn(cthis.parseValue(s),"notBetween",u,s)}if(d==="eq")return Pn(c===this.parseValue(m),"equal",m);if(d==="neq")return Pn(c!==this.parseValue(m),"notEqual",m);if(d==="lt")return Pn(cthis.parseValue(m),"greaterThan",m);if(d==="gte")return Pn(c>=this.parseValue(m),"greaterThanEqual",m)}return[!0]}}class Ua{constructor(b,e,d){this.refs=e,this.mode=b,this.validator=d}includes(b,e){const{refs:d}=this;for(let m=0;m{const m=_r.valueOf(d);m.intersects(b)?m.difference(b).forEach(c=>e.push(c.toString())):e.push(d)}),this.refs=e}getData(){const{refs:b,mode:e,validator:d}=this,{type:m,required:f,operator:c,value:u}=d;return{refs:b,mode:e,type:m,required:f,operator:c,value:u}}static valueOf({refs:b,mode:e,type:d,required:m,operator:f,value:c}){return new Ua(e,b,new ah(d,m,c,f))}}class dg{constructor(){this._=[],this.errors=new Map}getError(b,e){return this.errors.get(`${b}_${e}`)}validate(b,e,d){const m=this.get(b,e),f=`${b}_${e}`,{errors:c}=this;if(m!==null){const[u,s]=m.validator.validate(d);u?c.delete(f):c.set(f,s)}else c.delete(f);return!0}add(b,e,{type:d,required:m,value:f,operator:c}){const u=new ah(d,m,f,c),s=this.getByValidator(u);s!==null?s.addRef(e):this._.push(new Ua(b,[e],u))}getByValidator(b){for(let e=0;e{e.remove(b)})}each(b){this._.forEach(e=>b(e))}getData(){return this._.filter(b=>b.refs.length>0).map(b=>b.getData())}setData(b){this._=b.map(e=>Ua.valueOf(e))}}const pg={mode:"edit",view:{height:()=>document.documentElement.clientHeight,width:()=>document.documentElement.clientWidth},showGrid:!0,showToolbar:!0,showContextmenu:!0,showBottomBar:!0,row:{len:100,height:25},col:{len:26,width:100,indexWidth:60,minWidth:60},style:{bgcolor:"#ffffff",align:"left",valign:"middle",textwrap:!1,strike:!1,underline:!1,color:"#0a0a0a",font:{name:"Arial",size:10,bold:!1,italic:!1},format:"normal"}},mg=41,gg=41,Ac=(N,b)=>Object.prototype.hasOwnProperty.call(N,b);function kc(N,b,e=()=>{}){const{merges:d}=this,m=b.clone(),[f,c]=N.size(),[u,s]=b.size();return f>u&&(m.eri=b.sri+f-1),c>s&&(m.eci=b.sci+c-1),d.intersects(m)?(e(Cr("error.pasteForMergedCell")),!1):!0}function Mc(N,b,e,d=!1){const{rows:m,merges:f}=this;(e==="all"||e==="format")&&(m.deleteCells(b,e),f.deleteWithin(b)),m.copyPaste(N,b,e,d,(c,u,s)=>{if(s&&s.merge){const[t,n]=s.merge;if(t<=0&&n<=0)return;f.add(new _r(c,u,c+t,u+n))}})}function bg(N,b){const{clipboard:e,rows:d,merges:m}=this;d.cutPaste(N,b),m.move(N,b.sri-N.sri,b.sci-N.sci),e.clear()}function hs(N,b,e){const{styles:d,rows:m}=this,f=m.getCellOrNew(N,b);let c={};f.style!==void 0&&(c=qr.cloneDeep(d[f.style])),c=qr.merge(c,{border:e}),f.style=this.addStyle(c)}function vg({mode:N,style:b,color:e}){const{styles:d,selector:m,rows:f}=this,{sri:c,sci:u,eri:s,eci:t}=m.range,n=!this.isSignleSelected();if(!(!n&&(N==="inside"||N==="horizontal"||N==="vertical"))){if(N==="outside"&&!n)hs.call(this,c,u,{top:[b,e],bottom:[b,e],left:[b,e],right:[b,e]});else if(N==="none")m.range.each((r,i)=>{const o=f.getCell(r,i);if(o&&o.style!==void 0){const l=qr.cloneDeep(d[o.style]);delete l.border,o.style=this.addStyle(l)}});else if(N==="all"||N==="inside"||N==="outside"||N==="horizontal"||N==="vertical"){const r=[];for(let i=c;i<=s;i+=1)for(let o=u;o<=t;o+=1){const l=[];for(let S=0;Sr.splice(S,1)),o>t)break;const a=f.getCell(i,o);let[g,v]=[0,0];a&&a.merge&&([g,v]=a.merge,r.push([i,o,g,v]));const h=g>0&&i+g===s,w=v>0&&o+v===t;let y={};N==="all"?y={bottom:[b,e],top:[b,e],left:[b,e],right:[b,e]}:N==="inside"?(!w&&o0&&hs.call(this,i,o,y),o+=v}}else if(N==="top"||N==="bottom")for(let r=u;r<=t;r+=1)N==="top"&&(hs.call(this,c,r,{top:[b,e]}),r+=f.getCellMerge(c,r)[1]),N==="bottom"&&(hs.call(this,s,r,{bottom:[b,e]}),r+=f.getCellMerge(s,r)[1]);else if(N==="left"||N==="right")for(let r=c;r<=s;r+=1)N==="left"&&(hs.call(this,r,u,{left:[b,e]}),r+=f.getCellMerge(r,u)[0]),N==="right"&&(hs.call(this,r,t,{right:[b,e]}),r+=f.getCellMerge(r,t)[0])}}function yg(N,b){const{rows:e}=this,d=this.freezeTotalHeight();let m=e.height;d+e.heightN);c+=1)f.has(c)||(s=e.getHeight(c),u+=s);return u-=s,u<=0?{ri:-1,top:0,height:s}:{ri:c-1,top:u,height:s}}function wg(N,b){const{cols:e}=this,d=this.freezeTotalWidth();let m=e.indexWidth;d+e.indexWidthe.getWidth(s));return c<=0?{ci:-1,left:0,width:e.indexWidth}:{ci:f-1,left:c,width:u}}class xg{constructor(b,e){this.settings=qr.merge(pg,e||{}),this.name=b||"sheet",this.freeze=[0,0],this.styles=[],this.merges=new vf,this.rows=new cg(this.settings.row),this.cols=new hg(this.settings.col),this.validations=new dg,this.hyperlinks={},this.comments={},this.selector=new Q1,this.scroll=new q1,this.history=new eg,this.clipboard=new tg,this.autoFilter=new rg,this.change=()=>{},this.exceptRowSet=new Set,this.sortedRowMap=new Map,this.unsortedRowMap=new Map}addValidation(b,e,d){this.changeData(()=>{this.validations.add(b,e,d)})}removeValidation(){const{range:b}=this.selector;this.changeData(()=>{this.validations.remove(b)})}getSelectedValidator(){const{ri:b,ci:e}=this.selector,d=this.validations.get(b,e);return d?d.validator:null}getSelectedValidation(){const{ri:b,ci:e,range:d}=this.selector,m=this.validations.get(b,e),f={ref:d.toString()};return m!==null&&(f.mode=m.mode,f.validator=m.validator),f}canUndo(){return this.history.canUndo()}canRedo(){return this.history.canRedo()}undo(){this.history.undo(this.getData(),b=>{this.setData(b)})}redo(){this.history.redo(this.getData(),b=>{this.setData(b)})}copy(){this.clipboard.copy(this.selector.range)}copyToSystemClipboard(){if(navigator.clipboard===void 0)return;let b="";const e=this.rows.getData();for(let d=this.selector.range.sri;d<=this.selector.range.eri;d+=1){if(Ac(e,d)){for(let m=this.selector.range.sci;m<=this.selector.range.eci;m+=1)if(m>this.selector.range.sci&&(b+=" "),Ac(e[d].cells,m)){const f=String(e[d].cells[m].text);f.indexOf(` +`)===-1&&f.indexOf(" ")===-1&&f.indexOf('"')===-1?b+=f:b+=`"${f}"`}}else for(let m=this.selector.range.sci;m<=this.selector.range.eci;m+=1)b+=" ";b+=` +`}navigator.clipboard.writeText(b).then(()=>{},d=>{console.log("text copy to the system clipboard error ",b,d)})}cut(){this.clipboard.cut(this.selector.range)}paste(b="all",e=()=>{}){const{clipboard:d,selector:m}=this;return d.isClear()||!kc.call(this,d.range,m.range,e)?!1:(this.changeData(()=>{d.isCopy()?Mc.call(this,d.range,m.range,b):d.isCut()&&bg.call(this,d.range,m.range)}),!0)}pasteFromText(b){const e=b.split(`\r +`).map(f=>f.replace(/"/g,"").split(" "));e.length>0&&(e.length-=1);const{rows:d,selector:m}=this;this.changeData(()=>{d.paste(e,m.range)})}autofill(b,e,d=()=>{}){const m=this.selector.range;return kc.call(this,m,b,d)?(this.changeData(()=>{Mc.call(this,m,b,e,!0)}),!0):!1}clearClipboard(){this.clipboard.clear()}calSelectedRangeByEnd(b,e){const{selector:d,rows:m,cols:f,merges:c}=this;let{sri:u,sci:s,eri:t,eci:n}=d.range;const r=d.ri,i=d.ci;let[o,l]=[b,e];return b<0&&(o=m.len-1),e<0&&(l=f.len-1),o>r?[u,t]=[r,o]:[u,t]=[o,r],l>i?[s,n]=[i,l]:[s,n]=[l,i],d.range=c.union(new _r(u,s,t,n)),d.range=c.union(d.range),d.range}calSelectedRangeByStart(b,e){const{selector:d,rows:m,cols:f,merges:c}=this;let u=c.getFirstIncludes(b,e);return u===null&&(u=new _r(b,e,b,e),b===-1&&(u.sri=0,u.eri=m.len-1),e===-1&&(u.sci=0,u.eci=f.len-1)),d.range=u,u}setSelectedCellAttr(b,e){this.changeData(()=>{const{selector:d,styles:m,rows:f}=this;if(b==="merge")e?this.merge():this.unmerge();else if(b==="border")vg.call(this,e);else if(b==="formula"){const{ri:c,ci:u,range:s}=d;if(d.multiple()){const[t,n]=d.size(),{sri:r,sci:i,eri:o,eci:l}=s;if(t>1)for(let a=i;a<=l;a+=1){const g=f.getCellOrNew(o+1,a);g.text=`=${e}(${ai(a,r)}:${ai(a,o)})`}else if(n>1){const a=f.getCellOrNew(c,l+1);a.text=`=${e}(${ai(i,c)}:${ai(l,c)})`}}else{const t=f.getCellOrNew(c,u);t.text=`=${e}()`}}else d.range.each((c,u)=>{const s=f.getCellOrNew(c,u);let t={};if(s.style!==void 0&&(t=qr.cloneDeep(m[s.style])),b==="format")t.format=e,s.style=this.addStyle(t);else if(b==="font-bold"||b==="font-italic"||b==="font-name"||b==="font-size"){const n={};n[b.split("-")[1]]=e,t.font=Object.assign(t.font||{},n),s.style=this.addStyle(t)}else b==="strike"||b==="textwrap"||b==="underline"||b==="align"||b==="valign"||b==="color"||b==="bgcolor"?(t[b]=e,s.style=this.addStyle(t)):s[b]=e})})}setSelectedCellText(b,e="input"){const{autoFilter:d,selector:m,rows:f}=this,{ri:c,ci:u}=m;let s=c;this.unsortedRowMap.has(c)&&(s=this.unsortedRowMap.get(c));const t=f.getCell(s,u),n=t?t.text:"";if(this.setCellText(s,u,b,e),d.active()){const r=d.getFilter(u);if(r){const i=r.value.findIndex(o=>o===n);i>=0&&r.value.splice(i,1,b)}}}getSelectedCell(){const{ri:b,ci:e}=this.selector;let d=b;return this.unsortedRowMap.has(b)&&(d=this.unsortedRowMap.get(b)),this.rows.getCell(d,e)}xyInSelectedRect(b,e){const{left:d,top:m,width:f,height:c}=this.getSelectedRect(),u=b-this.cols.indexWidth,s=e-this.rows.height;return u>d&&um&&s0&&v>n&&(l=n),g>0&&g>r&&(a=r),{l:n,t:r,left:l,top:a,height:i,width:o,scroll:e}}getCellRectByXY(b,e){const{scroll:d,merges:m,rows:f,cols:c}=this;let{ri:u,top:s,height:t}=yg.call(this,e,d.y),{ci:n,left:r,width:i}=wg.call(this,b,d.x);if(n===-1&&(i=c.totalWidth()),u===-1&&(t=f.totalHeight()),u>=0||n>=0){const o=m.getFirstIncludes(u,n);o&&(u=o.sri,n=o.sci,{left:r,top:s,width:i,height:t}=this.cellRect(u,n))}return{ri:u,ci:n,left:r,top:s,width:i,height:t}}isSignleSelected(){const{sri:b,sci:e,eri:d,eci:m}=this.selector.range,f=this.getCell(b,e);if(f&&f.merge){const[c,u]=f.merge;if(b+c===d&&e+u===m)return!0}return!this.selector.multiple()}canUnmerge(){const{sri:b,sci:e,eri:d,eci:m}=this.selector.range,f=this.getCell(b,e);if(f&&f.merge){const[c,u]=f.merge;if(b+c===d&&e+u===m)return!0}return!1}merge(){const{selector:b,rows:e}=this;if(this.isSignleSelected())return;const[d,m]=b.size();if(d>1||m>1){const{sri:f,sci:c}=b.range;this.changeData(()=>{const u=e.getCellOrNew(f,c);u.merge=[d-1,m-1],this.merges.add(b.range),this.rows.deleteCells(b.range),this.rows.setCell(f,c,u)})}}unmerge(){const{selector:b}=this;if(!this.isSignleSelected())return;const{sri:e,sci:d}=b.range;this.changeData(()=>{this.rows.deleteCell(e,d,"merge"),this.merges.deleteWithin(b.range)})}canAutofilter(){return!this.autoFilter.active()}autofilter(){const{autoFilter:b,selector:e}=this;this.changeData(()=>{b.active()?(b.clear(),this.exceptRowSet=new Set,this.sortedRowMap=new Map,this.unsortedRowMap=new Map):b.ref=e.range.toString()})}setAutoFilter(b,e,d,m){const{autoFilter:f}=this;f.addFilter(b,d,m),f.setSort(b,e),this.resetAutoFilter()}resetAutoFilter(){const{autoFilter:b,rows:e}=this;if(!b.active())return;const{sort:d}=b,{rset:m,fset:f}=b.filteredRows((s,t)=>e.getCell(s,t)),c=Array.from(f),u=Array.from(f);d&&c.sort((s,t)=>d.order==="asc"?s-t:d.order==="desc"?t-s:0),this.exceptRowSet=m,this.sortedRowMap=new Map,this.unsortedRowMap=new Map,c.forEach((s,t)=>{this.sortedRowMap.set(u[t],s),this.unsortedRowMap.set(s,u[t])})}deleteCell(b="all"){const{selector:e}=this;this.changeData(()=>{this.rows.deleteCells(e.range,b),(b==="all"||b==="format")&&this.merges.deleteWithin(e.range)})}insert(b,e=1){this.changeData(()=>{const{sri:d,sci:m}=this.selector.range,{rows:f,merges:c,cols:u}=this;let s=d;b==="row"?f.insert(d,e):b==="column"&&(f.insertColumn(m,e),s=m,u.len+=1),c.shift(b,s,e,(t,n,r,i)=>{const o=f.getCell(t,n);o.merge[0]+=r,o.merge[1]+=i})})}delete(b){this.changeData(()=>{const{rows:e,merges:d,selector:m,cols:f}=this,{range:c}=m,{sri:u,sci:s,eri:t,eci:n}=m.range,[r,i]=m.range.size();let o=u,l=r;b==="row"?e.delete(u,t):b==="column"&&(e.deleteColumn(s,n),o=c.sci,l=i,f.len-=1),d.shift(b,o,-l,(a,g,v,h)=>{const w=e.getCell(a,g);w.merge[0]+=v,w.merge[1]+=h,w.merge[0]===0&&w.merge[1]===0&&delete w.merge})})}scrollx(b,e){const{scroll:d,freeze:m,cols:f}=this,[,c]=m,[u,s,t]=qr.rangeReduceIf(c,f.len,0,0,b,r=>f.getWidth(r));let n=s;b>0&&(n+=t),d.x!==n&&(d.ci=b>0?u:0,d.x=n,e())}scrolly(b,e){const{scroll:d,freeze:m,rows:f}=this,[c]=m,[u,s,t]=qr.rangeReduceIf(c,f.len,0,0,b,r=>f.getHeight(r));let n=s;b>0&&(n+=t),d.y!==n&&(d.ri=b>0?u:0,d.y=n,e())}cellRect(b,e){const{rows:d,cols:m}=this,f=m.sumWidth(0,e),c=d.sumHeight(0,b),u=d.getCell(b,e);let s=m.getWidth(e),t=d.getHeight(b);if(u!==null&&u.merge){const[n,r]=u.merge;if(n>0)for(let i=1;i<=n;i+=1)t+=d.getHeight(b+i);if(r>0)for(let i=1;i<=r;i+=1)s+=m.getWidth(e+i)}return{left:f,top:c,width:s,height:t,cell:u}}getCell(b,e){return this.rows.getCell(b,e)}getCellTextOrDefault(b,e){const d=this.getCell(b,e);return d&&d.text?d.text:""}getCellStyle(b,e){const d=this.getCell(b,e);return d&&d.style!==void 0?this.styles[d.style]:null}getCellStyleOrDefault(b,e){const{styles:d,rows:m}=this,f=m.getCell(b,e),c=f&&f.style!==void 0?d[f.style]:{};return qr.merge(this.defaultStyle(),c)}getSelectedCellStyle(){const{ri:b,ci:e}=this.selector;return this.getCellStyleOrDefault(b,e)}setCellText(b,e,d,m){const{rows:f,history:c,validations:u}=this;m==="finished"?(f.setCellText(b,e,""),c.add(this.getData()),f.setCellText(b,e,d)):(f.setCellText(b,e,d),this.change(this.getData())),u.validate(b,e,d)}freezeIsActive(){const[b,e]=this.freeze;return b>0||e>0}setFreeze(b,e){this.changeData(()=>{this.freeze=[b,e]})}freezeTotalWidth(){return this.cols.sumWidth(0,this.freeze[1])}freezeTotalHeight(){return this.rows.sumHeight(0,this.freeze[0])}setRowHeight(b,e){this.changeData(()=>{this.rows.setHeight(b,e)})}setColWidth(b,e){this.changeData(()=>{this.cols.setWidth(b,e)})}viewHeight(){const{view:b,showToolbar:e,showBottomBar:d}=this.settings;let m=b.height();return d&&(m-=gg),e&&(m-=mg),m}viewWidth(){return this.settings.view.width()}freezeViewRange(){const[b,e]=this.freeze;return new _r(0,0,b-1,e-1,this.freezeTotalWidth(),this.freezeTotalHeight())}contentRange(){const{rows:b,cols:e}=this,[d,m]=b.maxCell(),f=b.sumHeight(0,d+1),c=e.sumWidth(0,m+1);return new _r(0,0,d,m,c,f)}exceptRowTotalHeight(b,e){const{exceptRowSet:d,rows:m}=this,f=Array.from(d);let c=0;return f.forEach(u=>{if(ue){const s=m.getHeight(u);c+=s}}),c}viewRange(){const{scroll:b,rows:e,cols:d,freeze:m,exceptRowSet:f}=this;let{ri:c,ci:u}=b;c<=0&&([c]=m),u<=0&&([,u]=m);let[s,t]=[0,0],[n,r]=[e.len,d.len];for(let i=c;ithis.viewHeight()));i+=1);for(let i=u;ithis.viewWidth()));i+=1);return new _r(c,u,n,r,s,t)}eachMergesInView(b,e){this.merges.filterIntersects(b).forEach(d=>e(d))}hideRowsOrCols(){const{rows:b,cols:e,selector:d}=this,[m,f]=d.size(),{sri:c,sci:u,eri:s,eci:t}=d.range;if(m===b.len)for(let n=u;n<=t;n+=1)e.setHide(n,!0);else if(f===e.len)for(let n=c;n<=s;n+=1)b.setHide(n,!0)}unhideRowsOrCols(b,e){this[`${b}s`].unhide(e)}rowEach(b,e,d){let m=0;const{rows:f}=this,c=this.exceptRowSet,u=[...c];let s=0;for(let t=0;t0&&(d(t,m,n),m+=n,m>this.viewHeight()))break}}colEach(b,e,d){let m=0;const{cols:f}=this;for(let c=b;c<=e;c+=1){const u=f.getWidth(c);if(u>0&&(d(c,m,u),m+=u,m>this.viewWidth()))break}}defaultStyle(){return this.settings.style}addStyle(b){const{styles:e}=this;for(let d=0;d{if(e==="merges"||e==="rows"||e==="cols"||e==="validations")this[e].setData(b[e]);else if(e==="freeze"){const[d,m]=xi(b[e]);this.freeze=[m,d]}else e==="autofilter"?this.autoFilter.setData(b[e]):b[e]!==void 0&&(this[e]=b[e])}),this}getData(){const{name:b,freeze:e,styles:d,merges:m,rows:f,cols:c,validations:u,autoFilter:s}=this;return{name:b,freeze:ai(e[1],e[0]),styles:d,merges:m.getData(),rows:f.getData(),cols:c.getData(),validations:u.getData(),autofilter:s.getData()}}}function tn(N,b,e){N.addEventListener(b,e)}function Xa(N,b,e){N.removeEventListener(b,e)}function gs(N){N.xclickoutside&&(Xa(window.document.body,"click",N.xclickoutside),delete N.xclickoutside)}function Ws(N,b){N.xclickoutside=e=>{e.detail===2||N.contains(e.target)||(b?b(N):(N.hide(),gs(N)))},tn(window.document.body,"click",N.xclickoutside)}function oh(N,b,e){tn(N,"mousemove",b);const d=N;d.xEvtUp=m=>{Xa(N,"mousemove",b),Xa(N,"mouseup",N.xEvtUp),e(m)},tn(N,"mouseup",N.xEvtUp)}function Rc(N,b,e,d){let m="";Math.abs(N)>Math.abs(b)?(m=N>0?"right":"left",d(m,N,e)):(m=b>0?"down":"up",d(m,b,e))}function _g(N,{move:b,end:e}){let d=0,m=0;tn(N,"touchstart",f=>{const{pageX:c,pageY:u}=f.touches[0];d=c,m=u}),tn(N,"touchmove",f=>{if(!b)return;const{pageX:c,pageY:u}=f.changedTouches[0],s=c-d,t=u-m;(Math.abs(s)>10||Math.abs(t)>10)&&(Rc(s,t,f,b),d=c,m=u),f.preventDefault()}),tn(N,"touchend",f=>{if(!e)return;const{pageX:c,pageY:u}=f.changedTouches[0],s=c-d,t=u-m;Rc(s,t,f,e)})}function Sg(){const N=new Map;function b(c,u){const s=()=>{const n=N.get(c);return Array.isArray(n)&&n.push(u)||!1},t=()=>N.set(c,[].concat(u));return N.has(c)&&s()||t()}function e(c,u){const s=()=>{const t=N.get(c);for(const n of t)n.call(null,...u)};return N.has(c)&&s()}function d(c,u){const s=()=>{const t=N.get(c),n=t.indexOf(u);return n>=0&&t.splice(n,1)&&N.get(c).length===0&&N.delete(c)};return N.has(c)&&s()}function m(c,u){const s=(...t)=>{u.call(null,...t),d(c,s)};return b(c,s)}function f(){N.clear()}return{get current(){return N},on:b,once:m,fire:e,removeListener:d,removeAllListeners:f}}const Ze="x-spreadsheet";class Ic{constructor(b=!1,e){this.moving=!1,this.vertical=b,this.el=$e("div",`${Ze}-resizer ${b?"vertical":"horizontal"}`).children(this.unhideHoverEl=$e("div",`${Ze}-resizer-hover`).on("dblclick.stop",d=>this.mousedblclickHandler(d)).css("position","absolute").hide(),this.hoverEl=$e("div",`${Ze}-resizer-hover`).on("mousedown.stop",d=>this.mousedownHandler(d)),this.lineEl=$e("div",`${Ze}-resizer-line`).hide()).hide(),this.cRect=null,this.finishedFn=null,this.minDistance=e,this.unhideFn=()=>{}}showUnhide(b){this.unhideIndex=b,this.unhideHoverEl.show()}hideUnhide(){this.unhideHoverEl.hide()}show(b,e){const{moving:d,vertical:m,hoverEl:f,lineEl:c,el:u,unhideHoverEl:s}=this;if(d)return;this.cRect=b;const{left:t,top:n,width:r,height:i}=b;u.offset({left:m?t+r-5:t,top:m?n:n+i-5}).show(),f.offset({width:m?5:r,height:m?i:5}),c.offset({width:m?0:e.width,height:m?e.height:0}),s.offset({left:m?5-r:t,top:m?n:5-i,width:m?5:r,height:m?i:5})}hide(){this.el.offset({left:0,top:0}).hide(),this.hideUnhide()}mousedblclickHandler(){this.unhideIndex&&this.unhideFn(this.unhideIndex)}mousedownHandler(b){let e=b;const{el:d,lineEl:m,cRect:f,vertical:c,minDistance:u}=this;let s=c?f.width:f.height;m.show(),oh(window,t=>{this.moving=!0,e!==null&&t.buttons===1&&(c?(s+=t.movementX,s>u&&d.css("left",`${f.left+s}px`)):(s+=t.movementY,s>u&&d.css("top",`${f.top+s}px`)),e=t)},()=>{e=null,m.hide(),this.moving=!1,this.hide(),this.finishedFn&&(s{}).on("scroll.stop",e=>{const{scrollTop:d,scrollLeft:m}=e.target;this.moveFn&&this.moveFn(this.vertical?d:m,e)})}move(b){return this.el.scroll(b),this}scroll(){return this.el.scroll()}set(b,e){const d=b-1;if(e>d){const m=this.vertical?"height":"width";this.el.css(m,`${d-15}px`).show(),this.contentEl.css(this.vertical?"width":"height","1px").css(m,`${e}px`)}else this.el.hide();return this}}const Oa=2*2-1;let hf=10;class Fa{constructor(b=!1){this.useHideInput=b,this.inputChange=()=>{},this.cornerEl=$e("div",`${Ze}-selector-corner`),this.areaEl=$e("div",`${Ze}-selector-area`).child(this.cornerEl).hide(),this.clipboardEl=$e("div",`${Ze}-selector-clipboard`).hide(),this.autofillEl=$e("div",`${Ze}-selector-autofill`).hide(),this.el=$e("div",`${Ze}-selector`).css("z-index",`${hf}`).children(this.areaEl,this.clipboardEl,this.autofillEl).hide(),b&&(this.hideInput=$e("input","").on("compositionend",e=>{this.inputChange(e.target.value)}),this.el.child(this.hideInputDiv=$e("div","hide-input").child(this.hideInput)),this.el.child(this.hideInputDiv=$e("div","hide-input").child(this.hideInput))),hf+=1}setOffset(b){return this.el.offset(b).show(),this}hide(){return this.el.hide(),this}setAreaOffset(b){const{left:e,top:d,width:m,height:f}=b,c={width:m-Oa+.8,height:f-Oa+.8,left:e-.8,top:d-.8};this.areaEl.offset(c).show(),this.useHideInput&&(this.hideInputDiv.offset(c),this.hideInput.val("").focus())}setClipboardOffset(b){const{left:e,top:d,width:m,height:f}=b;this.clipboardEl.offset({left:e,top:d,width:m-5,height:f-5})}showAutofill(b){const{left:e,top:d,width:m,height:f}=b;this.autofillEl.offset({width:m-Oa,height:f-Oa,left:e,top:d}).show()}hideAutofill(){this.autofillEl.hide()}showClipboard(){this.clipboardEl.show()}hideClipboard(){this.clipboardEl.hide()}}function yf(N){const{data:b}=this,{left:e,top:d,width:m,height:f,scroll:c,l:u,t:s}=N,t=b.freezeTotalWidth(),n=b.freezeTotalHeight();let r=e-t;t>u&&(r-=c.x);let i=d-n;return n>s&&(i-=c.y),{left:r,top:i,width:m,height:f}}function wf(N){const{data:b}=this,{left:e,width:d,height:m,l:f,t:c,scroll:u}=N,s=b.freezeTotalWidth();let t=e-s;return s>f&&(t-=u.x),{left:t,top:c,width:d,height:m}}function xf(N){const{data:b}=this,{top:e,width:d,height:m,l:f,t:c,scroll:u}=N,s=b.freezeTotalHeight();let t=e-s;return s>c&&(t-=u.y),{left:f,top:t,width:d,height:m}}function uf(N){const{br:b}=this;b.setAreaOffset(yf.call(this,N))}function Eg(N){const{tl:b}=this;b.setAreaOffset(N)}function fh(N){const{t:b}=this;b.setAreaOffset(wf.call(this,N))}function lh(N){const{l:b}=this;b.setAreaOffset(xf.call(this,N))}function ch(N){const{l:b}=this;b.setClipboardOffset(xf.call(this,N))}function df(N){const{br:b}=this;b.setClipboardOffset(yf.call(this,N))}function Cg(N){const{tl:b}=this;b.setClipboardOffset(N)}function hh(N){const{t:b}=this;b.setClipboardOffset(wf.call(this,N))}function Fc(N){uf.call(this,N),Eg.call(this,N),fh.call(this,N),lh.call(this,N)}function Pc(N){df.call(this,N),Cg.call(this,N),hh.call(this,N),ch.call(this,N)}class Tg{constructor(b){this.inputChange=()=>{},this.data=b,this.br=new Fa(!0),this.t=new Fa,this.l=new Fa,this.tl=new Fa,this.br.inputChange=e=>{this.inputChange(e)},this.br.el.show(),this.offset=null,this.areaOffset=null,this.indexes=null,this.range=null,this.arange=null,this.el=$e("div",`${Ze}-selectors`).children(this.tl.el,this.t.el,this.l.el,this.br.el).hide(),this.lastri=-1,this.lastci=-1,hf+=1}resetData(b){this.data=b,this.range=b.selector.range,this.resetAreaOffset()}hide(){this.el.hide()}resetOffset(){const{data:b,tl:e,t:d,l:m,br:f}=this,c=b.freezeTotalHeight(),u=b.freezeTotalWidth();c>0||u>0?(e.setOffset({width:u,height:c}),d.setOffset({left:u,height:c}),m.setOffset({top:c,width:u}),f.setOffset({left:u,top:c})):(e.hide(),d.hide(),m.hide(),f.setOffset({left:0,top:0}))}resetAreaOffset(){const b=this.data.getSelectedRect(),e=this.data.getClipboardRect();Fc.call(this,b),Pc.call(this,e),this.resetOffset()}resetBRTAreaOffset(){const b=this.data.getSelectedRect(),e=this.data.getClipboardRect();uf.call(this,b),fh.call(this,b),df.call(this,e),hh.call(this,e),this.resetOffset()}resetBRLAreaOffset(){const b=this.data.getSelectedRect(),e=this.data.getClipboardRect();uf.call(this,b),lh.call(this,b),df.call(this,e),ch.call(this,e),this.resetOffset()}set(b,e,d=!0){const{data:m}=this,f=m.calSelectedRangeByStart(b,e),{sri:c,sci:u}=f;if(d){let[s,t]=[b,e];b<0&&(s=0),e<0&&(t=0),m.selector.setIndexes(s,t),this.indexes=[s,t]}this.moveIndexes=[c,u],this.range=f,this.resetAreaOffset(),this.el.show()}setEnd(b,e,d=!0){const{data:m,lastri:f,lastci:c}=this;if(d){if(b===f&&e===c)return;this.lastri=b,this.lastci=e}this.range=m.calSelectedRangeByEnd(b,e),Fc.call(this,this.data.getSelectedRect())}reset(){const{eri:b,eci:e}=this.data.selector.range;this.setEnd(b,e)}showAutofill(b,e){if(b===-1&&e===-1)return;const{sri:d,sci:m,eri:f,eci:c}=this.range,[u,s]=[b,e],t=d-b,n=m-e,r=f-b,i=c-e;if(n>0)this.arange=new _r(d,s,f,m-1);else if(t>0)this.arange=new _r(u,m,d-1,c);else if(i<0)this.arange=new _r(d,c+1,f,s);else if(r<0)this.arange=new _r(f+1,m,u,c);else{this.arange=null;return}if(this.arange!==null){const o=this.data.getRect(this.arange);o.width+=2,o.height+=2;const{br:l,l:a,t:g,tl:v}=this;l.showAutofill(yf.call(this,o)),a.showAutofill(xf.call(this,o)),g.showAutofill(wf.call(this,o)),v.showAutofill(o)}}hideAutofill(){["br","l","t","tl"].forEach(b=>{this[b].hideAutofill()})}showClipboard(){const b=this.data.getClipboardRect();Pc.call(this,b),["br","l","t","tl"].forEach(e=>{this[e].showClipboard()})}hideClipboard(){["br","l","t","tl"].forEach(b=>{this[b].hideClipboard()})}}function Ag(N){N.preventDefault(),N.stopPropagation();const{filterItems:b}=this;b.length<=0||(this.itemIndex>=0&&b[this.itemIndex].toggle(),this.itemIndex-=1,this.itemIndex<0&&(this.itemIndex=b.length-1),b[this.itemIndex].toggle())}function kg(N){N.stopPropagation();const{filterItems:b}=this;b.length<=0||(this.itemIndex>=0&&b[this.itemIndex].toggle(),this.itemIndex+=1,this.itemIndex>b.length-1&&(this.itemIndex=0),b[this.itemIndex].toggle())}function Nc(N){N.preventDefault();const{filterItems:b}=this;b.length<=0||(N.stopPropagation(),this.itemIndex<0&&(this.itemIndex=0),b[this.itemIndex].el.click(),this.hide())}function Mg(N){const{keyCode:b}=N;switch(N.ctrlKey&&N.stopPropagation(),b){case 37:N.stopPropagation();break;case 38:Ag.call(this,N);break;case 39:N.stopPropagation();break;case 40:kg.call(this,N);break;case 13:Nc.call(this,N);break;case 9:Nc.call(this,N);break;default:N.stopPropagation();break}}class uh{constructor(b,e,d="200px"){this.filterItems=[],this.items=b,this.el=$e("div",`${Ze}-suggest`).css("width",d).hide(),this.itemClick=e,this.itemIndex=-1}setOffset(b){this.el.cssRemoveKeys("top","bottom").offset(b)}hide(){const{el:b}=this;this.filterItems=[],this.itemIndex=-1,b.hide(),gs(this.el.parent())}setItems(b){this.items=b}search(b){let{items:e}=this;if(/^\s*$/.test(b)||(e=e.filter(m=>(m.key||m).startsWith(b.toUpperCase()))),e=e.map(m=>{let{title:f}=m;f?typeof f=="function"&&(f=f()):f=m;const c=$e("div",`${Ze}-item`).child(f).on("click.stop",()=>{this.itemClick(m),this.hide()});return m.label&&c.child($e("div","label").html(m.label)),c}),this.filterItems=e,e.length<=0)return;const{el:d}=this;d.html("").children(...e).show(),Ws(d.parent(),()=>{this.hide()})}bindInputEvents(b){b.on("keydown",e=>Mg.call(this,e))}}class jr extends Li{constructor(b){super("div",`${Ze}-icon`),this.iconNameEl=$e("div",`${Ze}-icon-img ${b}`),this.child(this.iconNameEl)}setName(b){this.iconNameEl.className(`${Ze}-icon-img ${b}`)}}function Dc(N,b){N.setMonth(N.getMonth()+b)}function Rg(N,b){const e=new Date(N);return e.setDate(b-N.getDay()+1),e}function Ig(N,b,e){const d=new Date(N,b,1,23,59,59),m=[[],[],[],[],[],[]];for(let f=0;f<6;f+=1)for(let c=0;c<7;c+=1){const u=f*7+c,s=Rg(d,u),t=s.getMonth()!==b,n=s.getMonth()===e.getMonth()&&s.getDate()===e.getDate();m[f][c]={d:s,disabled:t,active:n}}return m}class Og{constructor(b){this.value=b,this.cvalue=new Date(b),this.headerLeftEl=$e("div","calendar-header-left"),this.bodyEl=$e("tbody",""),this.buildAll(),this.el=$e("div","x-spreadsheet-calendar").children($e("div","calendar-header").children(this.headerLeftEl,$e("div","calendar-header-right").children($e("a","calendar-prev").on("click.stop",()=>this.prev()).child(new jr("chevron-left")),$e("a","calendar-next").on("click.stop",()=>this.next()).child(new jr("chevron-right")))),$e("table","calendar-body").children($e("thead","").child($e("tr","").children(...Cr("calendar.weeks").map(e=>$e("th","cell").child(e)))),this.bodyEl)),this.selectChange=()=>{}}setValue(b){this.value=b,this.cvalue=new Date(b),this.buildAll()}prev(){const{value:b}=this;Dc(b,-1),this.buildAll()}next(){const{value:b}=this;Dc(b,1),this.buildAll()}buildAll(){this.buildHeaderLeft(),this.buildBody()}buildHeaderLeft(){const{value:b}=this;this.headerLeftEl.html(`${Cr("calendar.months")[b.getMonth()]} ${b.getFullYear()}`)}buildBody(){const{value:b,cvalue:e,bodyEl:d}=this,f=Ig(b.getFullYear(),b.getMonth(),e).map(c=>{const u=c.map(s=>{let t="cell";return s.disabled&&(t+=" disabled"),s.active&&(t+=" active"),$e("td","").child($e("div",t).on("click.stop",()=>{this.selectChange(s.d)}).child(s.d.getDate().toString()))});return $e("tr","").children(...u)});d.html("").children(...f)}}class Fg{constructor(){this.calendar=new Og(new Date),this.el=$e("div",`${Ze}-datepicker`).child(this.calendar.el).hide()}setValue(b){const{calendar:e}=this;return typeof b=="string"?/^\d{4}-\d{1,2}-\d{1,2}$/.test(b)&&e.setValue(new Date(b.replace(new RegExp("-","g"),"/"))):b instanceof Date&&e.setValue(b),this}change(b){this.calendar.selectChange=e=>{b(e),this.hide()}}show(){this.el.show()}hide(){this.el.hide()}}function Wa(){const{inputText:N}=this;if(!/^\s*$/.test(N)){const{textlineEl:b,textEl:e,areaOffset:d}=this,m=N.split(` +`),f=Math.max(...m.map(r=>r.length)),u=b.offset().width/N.length,s=(f+1)*u+5,t=this.viewFn().width-d.left-u;let n=m.length;if(s>d.width){let r=s;s>t&&(r=t,n+=parseInt(s/t,10),n+=s%t>0?1:0),e.css("width",`${r}px`)}n*=this.rowHeight,n>d.height&&e.css("height",`${n}px`)}}function Pg({target:N},b){const{value:e,selectionEnd:d}=N,m=`${e.slice(0,d)}${b}${e.slice(d)}`;N.value=m,N.setSelectionRange(d+1,d+1),this.inputText=m,this.textlineEl.html(m),Wa.call(this)}function Ng(N){const{keyCode:b,altKey:e}=N;b!==13&&b!==9&&N.stopPropagation(),b===13&&e&&(Pg.call(this,N,` +`),N.stopPropagation()),b===13&&!e&&N.preventDefault()}function Dg(N){const b=N.target.value,{suggest:e,textlineEl:d,validator:m}=this,{cell:f}=this;if(f!==null)if("editable"in f&&f.editable===!0||f.editable===void 0){if(this.inputText=b,m)m.type==="list"?e.search(b):e.hide();else{const c=b.lastIndexOf("=");c!==-1?e.search(b.substring(c+1)):e.hide()}d.html(b),Wa.call(this),this.change("input",b)}else N.target.value=f.text;else{if(this.inputText=b,m)m.type==="list"?e.search(b):e.hide();else{const c=b.lastIndexOf("=");c!==-1?e.search(b.substring(c+1)):e.hide()}d.html(b),Wa.call(this),this.change("input",b)}}function Bg(N){const{el:b}=this.textEl;setTimeout(()=>{b.focus(),b.setSelectionRange(N,N)},0)}function dh(N,b){const{textEl:e,textlineEl:d}=this;e.el.blur(),e.val(N),d.html(N),Bg.call(this,b)}function Lg(N){const{inputText:b,validator:e}=this;let d=0;if(e&&e.type==="list")this.inputText=N,d=this.inputText.length;else{const m=b.lastIndexOf("="),f=b.substring(0,m+1);let c=b.substring(m+1);c.indexOf(")")!==-1?c=c.substring(c.indexOf(")")):c="",this.inputText=`${f+N.key}(`,d=this.inputText.length,this.inputText+=`)${c}`}dh.call(this,this.inputText,d)}function jg(){this.suggest.setItems(this.formulas)}function $g(N){let b=N.getMonth()+1,e=N.getDate();return b<10&&(b=`0${b}`),e<10&&(e=`0${e}`),`${N.getFullYear()}-${b}-${e}`}class Hg{constructor(b,e,d){this.viewFn=e,this.rowHeight=d,this.formulas=b,this.suggest=new uh(b,m=>{Lg.call(this,m)}),this.datepicker=new Fg,this.datepicker.change(m=>{this.setText($g(m)),this.clear()}),this.areaEl=$e("div",`${Ze}-editor-area`).children(this.textEl=$e("textarea","").on("input",m=>Dg.call(this,m)).on("paste.stop",()=>{}).on("keydown",m=>Ng.call(this,m)),this.textlineEl=$e("div","textline"),this.suggest.el,this.datepicker.el).on("mousemove.stop",()=>{}).on("mousedown.stop",()=>{}),this.el=$e("div",`${Ze}-editor`).child(this.areaEl).hide(),this.suggest.bindInputEvents(this.textEl),this.areaOffset=null,this.freeze={w:0,h:0},this.cell=null,this.inputText="",this.change=()=>{}}setFreezeLengths(b,e){this.freeze.w=b,this.freeze.h=e}clear(){this.inputText!==""&&this.change("finished",this.inputText),this.cell=null,this.areaOffset=null,this.inputText="",this.el.hide(),this.textEl.val(""),this.textlineEl.html(""),jg.call(this),this.datepicker.hide()}setOffset(b,e="top"){const{textEl:d,areaEl:m,suggest:f,freeze:c,el:u}=this;if(b){this.areaOffset=b;const{left:s,top:t,width:n,height:r,l:i,t:o}=b,l={left:0,top:0};c.w>i&&c.h>o||(c.wi?l.top=c.h:c.h>o&&(l.left=c.w)),u.offset(l),m.offset({left:s-l.left-.8,top:t-l.top-.8}),d.offset({width:n-9+.8,height:r-3+.8});const a={left:0};a[e]=r,f.setOffset(a),f.hide()}}setCell(b,e){const{el:d,datepicker:m,suggest:f}=this;d.show(),this.cell=b;const c=b&&b.text||"";if(this.setText(c),this.validator=e,e){const{type:u}=e;u==="date"&&(m.show(),/^\s*$/.test(c)||m.setValue(c)),u==="list"&&(f.setItems(e.values()),f.search(""))}}setText(b){this.inputText=b,dh.call(this,b,b.length),Wa.call(this)}}class Di extends Li{constructor(b,e=""){super("div",`${Ze}-button ${e}`),this.child(Cr(`button.${b}`))}}function Va(){return window.devicePixelRatio||1}function _f(){return Va()-.5}function Ft(N){return parseInt(N*Va(),10)}function us(N){const b=Ft(N);return b>0?b-.5:.5}class zg{constructor(b,e,d,m,f=0){this.x=b,this.y=e,this.width=d,this.height=m,this.padding=f,this.bgcolor="#ffffff",this.borderTop=null,this.borderRight=null,this.borderBottom=null,this.borderLeft=null}setBorders({top:b,bottom:e,left:d,right:m}){b&&(this.borderTop=b),m&&(this.borderRight=m),e&&(this.borderBottom=e),d&&(this.borderLeft=d)}innerWidth(){return this.width-this.padding*2-2}innerHeight(){return this.height-this.padding*2-2}textx(b){const{width:e,padding:d}=this;let{x:m}=this;return b==="left"?m+=d:b==="center"?m+=e/2:b==="right"&&(m+=e-d),m}texty(b,e){const{height:d,padding:m}=this;let{y:f}=this;return b==="top"?f+=m:b==="middle"?f+=d/2-e/2:b==="bottom"&&(f+=d-m-e),f}topxys(){const{x:b,y:e,width:d}=this;return[[b,e],[b+d,e]]}rightxys(){const{x:b,y:e,width:d,height:m}=this;return[[b+d,e],[b+d,e+m]]}bottomxys(){const{x:b,y:e,width:d,height:m}=this;return[[b,e+m],[b+d,e+m]]}leftxys(){const{x:b,y:e,height:d}=this;return[[b,e],[b,e+d]]}}function Bc(N,b,e,d,m,f,c){const u={x:0,y:0};N==="underline"?m==="bottom"?u.y=0:m==="top"?u.y=-(f+2):u.y=-f/2:N==="strike"&&(m==="bottom"?u.y=f/2:m==="top"&&(u.y=-(f/2+2))),d==="center"?u.x=c/2:d==="right"&&(u.x=c),this.line([b-u.x,e-u.y],[b-u.x+c,e-u.y])}class ph{constructor(b,e,d){this.el=b,this.ctx=b.getContext("2d"),this.resize(e,d),this.ctx.scale(Va(),Va())}resize(b,e){this.el.style.width=`${b}px`,this.el.style.height=`${e}px`,this.el.width=Ft(b),this.el.height=Ft(e)}clear(){const{width:b,height:e}=this.el;return this.ctx.clearRect(0,0,b,e),this}attr(b){return Object.assign(this.ctx,b),this}save(){return this.ctx.save(),this.ctx.beginPath(),this}restore(){return this.ctx.restore(),this}beginPath(){return this.ctx.beginPath(),this}translate(b,e){return this.ctx.translate(Ft(b),Ft(e)),this}scale(b,e){return this.ctx.scale(b,e),this}clearRect(b,e,d,m){return this.ctx.clearRect(b,e,d,m),this}fillRect(b,e,d,m){return this.ctx.fillRect(Ft(b)-.5,Ft(e)-.5,Ft(d),Ft(m)),this}fillText(b,e,d){return this.ctx.fillText(b,Ft(e),Ft(d)),this}text(b,e,d={},m=!0){const{ctx:f}=this,{align:c,valign:u,font:s,color:t,strike:n,underline:r}=d,i=e.textx(c);f.save(),f.beginPath(),this.attr({textAlign:c,textBaseline:u,font:`${s.italic?"italic":""} ${s.bold?"bold":""} ${Ft(s.size)}px ${s.name}`,fillStyle:t,strokeStyle:t});const o=`${b}`.split(` +`),l=e.innerWidth(),a=[];o.forEach(h=>{const w=f.measureText(h).width;if(m&&w>Ft(l)){let y={w:0,len:0,start:0};for(let S=0;S=Ft(l)&&(a.push(h.substr(y.start,y.len)),y={w:0,len:0,start:S}),y.len+=1,y.w+=f.measureText(h[S]).width+1;y.len>0&&a.push(h.substr(y.start,y.len))}else a.push(h)});const g=(a.length-1)*(s.size+2);let v=e.texty(u,g);return a.forEach(h=>{const w=f.measureText(h).width;this.fillText(h,i,v),n&&Bc.call(this,"strike",i,v,c,u,s.size,w),r&&Bc.call(this,"underline",i,v,c,u,s.size,w),v+=s.size+2}),f.restore(),this}border(b,e){const{ctx:d}=this;return d.lineWidth=_f,d.strokeStyle=e,b==="medium"?d.lineWidth=Ft(2)-.5:b==="thick"?d.lineWidth=Ft(3):b==="dashed"?d.setLineDash([Ft(3),Ft(2)]):b==="dotted"?d.setLineDash([Ft(1),Ft(1)]):b==="double"&&d.setLineDash([Ft(2),0]),this}line(...b){const{ctx:e}=this;if(b.length>1){e.beginPath();const[d,m]=b[0];e.moveTo(us(d),us(m));for(let f=1;f{const b=[],e=[];let d=[],m=0,f="",c=1,u="";for(let s=0;s="a"&&t<="z")d.push(t.toUpperCase());else if(t>="0"&&t<="9"||t>="A"&&t<="Z"||t===".")d.push(t);else if(t==='"'){for(s+=1;N.charAt(s)!=='"';)d.push(N.charAt(s)),s+=1;e.push(`"${d.join("")}`),d=[]}else if(t==="-"&&/[+\-*/,(]/.test(u))d.push(t);else{if(t!=="("&&d.length>0&&e.push(d.join("")),t===")"){let n=b.pop();if(m===2)try{const[r,i]=xi(e.pop()),[o,l]=xi(e.pop());let a=0;for(let g=o;g<=r;g+=1)for(let v=l;v<=i;v+=1)e.push(ai(g,v)),a+=1;e.push([n,a])}catch{}else if(m===1||m===3)m===3&&e.push(f),e.push([n,c]),c=1;else for(;n!=="("&&(e.push(n),!(b.length<=0));)n=b.pop();m=0}else if(t==="="||t===">"||t==="<"){const n=N.charAt(s+1);f=t,(n==="="||n==="-")&&(f+=n,s+=1),m=3}else if(t===":")m=2;else if(t===",")m===3&&e.push(f),m=1,c+=1;else if(t==="("&&d.length>0)b.push(d.join(""));else{if(b.length>0&&(t==="+"||t==="-")){let n=b[b.length-1];if(n!=="("&&e.push(b.pop()),n==="*"||n==="/")for(;b.length>0&&(n=b[b.length-1],n!=="(");)e.push(b.pop())}else if(b.length>0){const n=b[b.length-1];(n==="*"||n==="/")&&e.push(b.pop())}b.push(t)}d=[]}u=t}}for(d.length>0&&e.push(d.join(""));b.length>0;)e.push(b.pop());return e},Wg=(N,b)=>{const[e]=N;let d=N;if(e==='"')return N.substring(1);let m=1;if(e==="-"&&(d=N.substring(1),m=-1),d[0]>="0"&&d[0]<="9")return m*Number(d);const[f,c]=xi(d);return m*b(f,c)},Vg=(N,b,e,d)=>{const m=[];for(let f=0;f"||u==="<"){let s=m.pop();Number.isNaN(s)||(s=Number(s));let t=m.pop();Number.isNaN(t)||(t=Number(t));let n=!1;u==="="?n=t===s:c===">"?n=t>s:c===">="?n=t>=s:c==="<"?n=t="a"&&u<="z"||u>="A"&&u<="Z")&&d.push(c),m.push(Wg(c,e)),d.pop()}}return m[0]},mh=(N,b,e,d=[])=>{if(N[0]==="="){const m=Xg(N.substring(1));return m.length<=0?N:Vg(m,b,(f,c)=>mh(e(f,c),b,e,d),d)}return N},Kg={render:mh},Sf=[{key:"SUM",title:Wt("formula.sum"),render:N=>N.reduce((b,e)=>Ni("+",b,e),0)},{key:"AVERAGE",title:Wt("formula.average"),render:N=>N.reduce((b,e)=>Number(b)+Number(e),0)/N.length},{key:"MAX",title:Wt("formula.max"),render:N=>Math.max(...N.map(b=>Number(b)))},{key:"MIN",title:Wt("formula.min"),render:N=>Math.min(...N.map(b=>Number(b)))},{key:"IF",title:Wt("formula._if"),render:([N,b,e])=>N?b:e},{key:"AND",title:Wt("formula.and"),render:N=>N.every(b=>b)},{key:"OR",title:Wt("formula.or"),render:N=>N.some(b=>b)},{key:"CONCAT",title:Wt("formula.concat"),render:N=>N.join("")}],Gg=Sf,gh={};Sf.forEach(N=>{gh[N.key]=N});const ds=N=>N,Pa=N=>{if(/^(-?\d*.?\d*)$/.test(N)){const b=Number(N).toFixed(2).toString(),[e,...d]=b.split("\\.");return[e.replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,"),...d]}return N},Hs=[{key:"normal",title:Wt("format.normal"),type:"string",render:ds},{key:"text",title:Wt("format.text"),type:"string",render:ds},{key:"number",title:Wt("format.number"),type:"number",label:"1,000.12",render:Pa},{key:"percent",title:Wt("format.percent"),type:"number",label:"10.12%",render:N=>`${N}%`},{key:"rmb",title:Wt("format.rmb"),type:"number",label:"¥10.00",render:N=>`¥${Pa(N)}`},{key:"usd",title:Wt("format.usd"),type:"number",label:"$10.00",render:N=>`$${Pa(N)}`},{key:"eur",title:Wt("format.eur"),type:"number",label:"€10.00",render:N=>`€${Pa(N)}`},{key:"date",title:Wt("format.date"),type:"date",label:"26/09/2008",render:ds},{key:"time",title:Wt("format.time"),type:"date",label:"15:59:00",render:ds},{key:"datetime",title:Wt("format.datetime"),type:"date",label:"26/09/2008 15:59:00",render:ds},{key:"duration",title:Wt("format.duration"),type:"date",label:"24:01:00",render:ds}],bh={};Hs.forEach(N=>{bh[N.key]=N});const Yg=5,Zg={fillStyle:"#f4f5f8"},Jg={fillStyle:"#fff",lineWidth:_f,strokeStyle:"#e6e6e6"};function Qg(){return{textAlign:"center",textBaseline:"middle",font:`500 ${Ft(12)}px Source Sans Pro`,fillStyle:"#585757",lineWidth:_f(),strokeStyle:"#e6e6e6"}}function vh(N,b,e,d=0){const{left:m,top:f,width:c,height:u}=N.cellRect(b,e);return new zg(m,f+d,c,u,Yg)}function Ka(N,b,e,d,m=0){const{sortedRowMap:f,rows:c,cols:u}=b;if(c.isHide(e)||u.isHide(d))return;let s=e;f.has(e)&&(s=f.get(e));const t=b.getCell(s,d);if(t===null)return;let n=!1;"editable"in t&&t.editable===!1&&(n=!0);const r=b.getCellStyleOrDefault(s,d),i=vh(b,e,d,m);i.bgcolor=r.bgcolor,r.border!==void 0&&(i.setBorders(r.border),N.strokeBorders(i)),N.rect(i,()=>{let o="";b.settings.evalPaused?o=t.text||"":o=Kg.render(t.text||"",gh,(g,v)=>b.getCellTextOrDefault(v,g)),r.format&&(o=bh[r.format].render(o));const l=Object.assign({},r.font);l.size=Ug(l.size),N.text(o,i,{align:r.align,valign:r.valign,font:l,color:r.color,strike:r.strike,underline:r.underline},r.textwrap),b.validations.getError(e,d)&&N.error(i),n&&N.frozen(i)})}function qg(N){const{data:b,draw:e}=this;if(N){const{autoFilter:d}=b;if(!d.active())return;const m=d.hrange();N.intersects(m)&&m.each((f,c)=>{const u=vh(b,f,c);e.dropdown(u)})}}function Na(N,b,e,d,m){const{draw:f,data:c}=this;f.save(),f.translate(b,e).translate(d,m);const{exceptRowSet:u}=c,s=r=>{const i=u.has(r);if(i){const o=c.rows.getHeight(r);f.translate(0,-o)}return!i},t=c.exceptRowTotalHeight(N.sri,N.eri);f.save(),f.translate(0,-t),N.each((r,i)=>{Ka(f,c,r,i)},r=>s(r)),f.restore();const n=new Set;f.save(),f.translate(0,-t),c.eachMergesInView(N,({sri:r,sci:i,eri:o})=>{if(!u.has(r))Ka(f,c,r,i);else if(!n.has(r)){n.add(r);const l=c.rows.sumHeight(r,o+1);f.translate(0,-l)}}),f.restore(),qg.call(this,N),f.restore()}function jc(N,b,e,d){const{draw:m}=this;m.save(),m.attr({fillStyle:"rgba(75, 137, 255, 0.08)"}).fillRect(N,b,e,d),m.restore()}function Da(N,b,e,d,m,f){const{draw:c,data:u}=this,s=b.h,t=b.w,n=f+d,r=m+e;c.save(),c.attr(Zg),(N==="all"||N==="left")&&c.fillRect(0,n,e,s),(N==="all"||N==="top")&&c.fillRect(r,0,t,d);const{sri:i,sci:o,eri:l,eci:a}=u.selector.range;c.attr(Qg()),(N==="all"||N==="left")&&(u.rowEach(b.sri,b.eri,(g,v,h)=>{const w=n+v,y=g;c.line([0,w],[e,w]),i<=y&&y0&&u.rows.isHide(g-1)&&(c.save(),c.attr({strokeStyle:"#c6c6c6"}),c.line([5,w+5],[e-5,w+5]),c.restore())}),c.line([0,s+n],[e,s+n]),c.line([e,n],[e,s+n])),(N==="all"||N==="top")&&(u.colEach(b.sci,b.eci,(g,v,h)=>{const w=r+v,y=g;c.line([w,0],[w,d]),o<=y&&y0&&u.cols.isHide(g-1)&&(c.save(),c.attr({strokeStyle:"#c6c6c6"}),c.line([w+5,5],[w+5,d-5]),c.restore())}),c.line([t+r,0],[t+r,d]),c.line([0,d],[t+r,d])),c.restore()}function eb(N,b){const{draw:e}=this;e.save(),e.attr({fillStyle:"#f4f5f8"}).fillRect(0,0,N,b),e.restore()}function Ba({sri:N,sci:b,eri:e,eci:d,w:m,h:f},c,u,s,t){const{draw:n,data:r}=this,{settings:i}=r;if(n.save(),n.attr(Jg).translate(c+s,u+t),!i.showGrid){n.restore();return}r.rowEach(N,e,(o,l,a)=>{o!==N&&n.line([0,l],[m,l]),o===e&&n.line([0,l+a],[m,l+a])}),r.colEach(b,d,(o,l,a)=>{o!==b&&n.line([l,0],[l,f]),o===d&&n.line([l+a,0],[l+a,f])}),n.restore()}function tb(N,b,e,d){const{draw:m,data:f}=this,c=f.viewWidth()-N,u=f.viewHeight()-b;m.save().translate(N,b).attr({strokeStyle:"rgba(75, 137, 255, .6)"}),m.line([0,d],[c,d]),m.line([e,0],[e,u]),m.restore()}class rb{constructor(b,e){this.el=b,this.draw=new ph(b,e.viewWidth(),e.viewHeight()),this.data=e}resetData(b){this.data=b,this.render()}render(){const{data:b}=this,{rows:e,cols:d}=b,m=d.indexWidth,f=e.height;this.draw.resize(b.viewWidth(),b.viewHeight()),this.clear();const c=b.viewRange(),u=b.freezeTotalWidth(),s=b.freezeTotalHeight(),{x:t,y:n}=b.scroll;Ba.call(this,c,m,f,u,s),Na.call(this,c,m,f,-t,-n),Da.call(this,"all",c,m,f,u,s),eb.call(this,m,f);const[r,i]=b.freeze;if(r>0||i>0){if(r>0){const l=c.clone();l.sri=0,l.eri=r-1,l.h=s,Ba.call(this,l,m,f,u,0),Na.call(this,l,m,f,-t,0),Da.call(this,"top",l,m,f,u,0)}if(i>0){const l=c.clone();l.sci=0,l.eci=i-1,l.w=u,Ba.call(this,l,m,f,0,s),Da.call(this,"left",l,m,f,0,s),Na.call(this,l,m,f,0,-n)}const o=b.freezeViewRange();Ba.call(this,o,m,f,0,0),Da.call(this,"all",o,m,f,0,0),Na.call(this,o,m,f,0,0),tb.call(this,m,f,u,s)}}clear(){this.draw.clear()}}const La=[["A3",11.69,16.54],["A4",8.27,11.69],["A5",5.83,8.27],["B4",9.84,13.9],["B5",6.93,9.84]],mf=["landscape","portrait"];function Ga(N){return parseInt(96*N,10)}function $c(N){N==="cancel"?this.el.hide():this.toPrint()}function nb(N){const{paper:b}=this,{value:e}=N.target,d=La[e];b.w=Ga(d[1]),b.h=Ga(d[2]),this.preview()}function ib(N){const{paper:b}=this,{value:e}=N.target,d=mf[e];b.orientation=d,this.preview()}let sb=class{constructor(b){this.paper={w:Ga(La[0][1]),h:Ga(La[0][2]),padding:50,orientation:mf[0],get width(){return this.orientation==="landscape"?this.h:this.w},get height(){return this.orientation==="landscape"?this.w:this.h}},this.data=b,this.el=$e("div",`${Ze}-print`).children($e("div",`${Ze}-print-bar`).children($e("div","-title").child("Print settings"),$e("div","-right").children($e("div",`${Ze}-buttons`).children(new Di("cancel").on("click",$c.bind(this,"cancel")),new Di("next","primary").on("click",$c.bind(this,"next"))))),$e("div",`${Ze}-print-content`).children(this.contentEl=$e("div","-content"),$e("div","-sider").child($e("form","").children($e("fieldset","").children($e("label","").child(`${Cr("print.size")}`),$e("select","").children(...La.map((e,d)=>$e("option","").attr("value",d).child(`${e[0]} ( ${e[1]}''x${e[2]}'' )`))).on("change",nb.bind(this))),$e("fieldset","").children($e("label","").child(`${Cr("print.orientation")}`),$e("select","").children(...mf.map((e,d)=>$e("option","").attr("value",d).child(`${Cr("print.orientations")[d]}`))).on("change",ib.bind(this))))))).hide()}resetData(b){this.data=b}preview(){const{data:b,paper:e}=this,{width:d,height:m,padding:f}=e,c=d-f*2,u=m-f*2,s=b.contentRange(),t=parseInt(s.h/u,10)+1,n=c/s.w;let r=f;const i=f;n>1&&(r+=(c-s.w)/2);let o=0,l=0;this.contentEl.html(""),this.canvases=[];const a={sri:0,sci:0,eri:0,eci:0};for(let g=0;g{Ka(S,b,I,F,E)}),S.restore(),a.sri=a.eri,a.sci=a.eci,l+=h,this.contentEl.child($e("div",`${Ze}-canvas-card-wraper`).child(w.child(y)))}this.el.show()}toPrint(){this.el.hide();const{paper:b}=this,e=$e("iframe","").hide(),{el:d}=e;window.document.body.appendChild(d);const{contentWindow:m}=d,f=m.document,c=document.createElement("style");c.innerHTML=` + @page { size: ${b.width}px ${b.height}px; }; + canvas { + page-break-before: auto; + page-break-after: always; + image-rendering: pixelated; + }; + `,f.head.appendChild(c),this.canvases.forEach(u=>{const s=u.cloneNode(!1);s.getContext("2d").drawImage(u,0,0),f.body.appendChild(s)}),m.print()}};const ab=[{key:"copy",title:Wt("contextmenu.copy"),label:"Ctrl+C"},{key:"cut",title:Wt("contextmenu.cut"),label:"Ctrl+X"},{key:"paste",title:Wt("contextmenu.paste"),label:"Ctrl+V"},{key:"paste-value",title:Wt("contextmenu.pasteValue"),label:"Ctrl+Shift+V"},{key:"paste-format",title:Wt("contextmenu.pasteFormat"),label:"Ctrl+Alt+V"},{key:"divider"},{key:"insert-row",title:Wt("contextmenu.insertRow")},{key:"insert-column",title:Wt("contextmenu.insertColumn")},{key:"divider"},{key:"delete-row",title:Wt("contextmenu.deleteRow")},{key:"delete-column",title:Wt("contextmenu.deleteColumn")},{key:"delete-cell-text",title:Wt("contextmenu.deleteCellText")},{key:"hide",title:Wt("contextmenu.hide")},{key:"divider"},{key:"validation",title:Wt("contextmenu.validation")},{key:"divider"},{key:"cell-printable",title:Wt("contextmenu.cellprintable")},{key:"cell-non-printable",title:Wt("contextmenu.cellnonprintable")},{key:"divider"},{key:"cell-editable",title:Wt("contextmenu.celleditable")},{key:"cell-non-editable",title:Wt("contextmenu.cellnoneditable")}];function ob(N){return N.key==="divider"?$e("div",`${Ze}-item divider`):$e("div",`${Ze}-item`).on("click",()=>{this.itemClick(N.key),this.hide()}).children(N.title(),$e("div","label").child(N.label||""))}function fb(){return ab.map(N=>ob.call(this,N))}let lb=class{constructor(b,e=!1){this.menuItems=fb.call(this),this.el=$e("div",`${Ze}-contextmenu`).children(...this.menuItems).hide(),this.viewFn=b,this.itemClick=()=>{},this.isHide=e,this.setMode("range")}setMode(b){const e=this.menuItems[12];b==="row-col"?e.show():e.hide()}hide(){const{el:b}=this;b.hide(),gs(b)}setPosition(b,e){if(this.isHide)return;const{el:d}=this,{width:m}=d.show().offset(),f=this.viewFn(),c=f.height/2;let u=b;f.width-b<=m&&(u-=m),d.css("left",`${u}px`),e>c?d.css("bottom",`${f.height-e}px`).css("max-height",`${e}px`).css("top","auto"):d.css("top",`${e}px`).css("max-height",`${f.height-e}px`).css("bottom","auto"),Ws(d)}};function cb(N,b){if(b.classList.contains("active"))return;const{left:e,top:d,width:m,height:f}=b.getBoundingClientRect(),c=$e("div",`${Ze}-tooltip`).html(N).show();document.body.appendChild(c.el);const u=c.box();c.css("left",`${e+m/2-u.width/2}px`).css("top",`${d+f+2}px`),tn(b,"mouseleave",()=>{document.body.contains(c.el)&&document.body.removeChild(c.el)}),tn(b,"click",()=>{document.body.contains(c.el)&&document.body.removeChild(c.el)})}class Ef{constructor(b,e,d){this.tip=Cr(`toolbar.${b.replace(/-[a-z]/g,m=>m[1].toUpperCase())}`),e&&(this.tip+=` (${e})`),this.tag=b,this.shortcut=e,this.value=d,this.el=this.element(),this.change=()=>{}}element(){const{tip:b}=this;return $e("div",`${Ze}-toolbar-btn`).on("mouseenter",e=>{cb(b,e.target)}).attr("data-tooltip",b)}setState(){}}class Xn extends Ef{dropdown(){}getValue(b){return b}element(){const{tag:b}=this;return this.dd=this.dropdown(),this.dd.change=e=>this.change(b,this.getValue(e)),super.element().child(this.dd)}setState(b){b&&(this.value=b,this.dd.setTitle(b))}}class Wn extends Li{constructor(b,e,d,m,...f){super("div",`${Ze}-dropdown ${m}`),this.title=b,this.change=()=>{},this.headerClick=()=>{},typeof b=="string"?this.title=$e("div",`${Ze}-dropdown-title`).child(b):d&&this.title.addClass("arrow-left"),this.contentEl=$e("div",`${Ze}-dropdown-content`).css("width",e).hide(),this.setContentChildren(...f),this.headerEl=$e("div",`${Ze}-dropdown-header`),this.headerEl.on("click",()=>{this.contentEl.css("display")!=="block"?this.show():this.hide()}).children(this.title,d?$e("div",`${Ze}-icon arrow-right`).child($e("div",`${Ze}-icon-img arrow-down`)):""),this.children(this.headerEl,this.contentEl)}setContentChildren(...b){this.contentEl.html(""),b.length>0&&this.contentEl.children(...b)}setTitle(b){this.title.html(b),this.hide()}show(){const{contentEl:b}=this;b.show(),this.parent().active(),Ws(this.parent(),()=>{this.hide()})}hide(){this.parent().active(!1),this.contentEl.hide(),gs(this.parent())}}function hb(N){return $e("div",`${Ze}-item`).child(new jr(N))}class yh extends Wn{constructor(b,e){const d=new jr(`align-${e}`),m=b.map(f=>hb(`align-${f}`).on("click",()=>{this.setTitle(f),this.change(f)}));super(d,"auto",!0,"bottom-left",...m)}setTitle(b){this.title.setName(`align-${b}`),this.hide()}}class ub extends Xn{constructor(b){super("align","",b)}dropdown(){const{value:b}=this;return new yh(["left","center","right"],b)}}class db extends Xn{constructor(b){super("valign","",b)}dropdown(){const{value:b}=this;return new yh(["top","middle","bottom"],b)}}class oi extends Ef{element(){const{tag:b}=this;return super.element().child(new jr(b)).on("click",()=>this.click())}click(){this.change(this.tag,this.toggle())}setState(b){this.el.active(b)}toggle(){return this.el.toggle()}active(){return this.el.hasClass("active")}}class pb extends oi{constructor(){super("autofilter")}setState(){}}class mb extends oi{constructor(){super("font-bold","Ctrl+B")}}class gb extends oi{constructor(){super("font-italic","Ctrl+I")}}class bb extends oi{constructor(){super("strike","Ctrl+U")}}class vb extends oi{constructor(){super("underline","Ctrl+U")}}const yb=["#ffffff","#000100","#e7e5e6","#445569","#5b9cd6","#ed7d31","#a5a5a5","#ffc001","#4371c6","#71ae47"],wb=[["#f2f2f2","#7f7f7f","#d0cecf","#d5dce4","#deeaf6","#fce5d5","#ededed","#fff2cd","#d9e2f3","#e3efd9"],["#d8d8d8","#595959","#afabac","#adb8ca","#bdd7ee","#f7ccac","#dbdbdb","#ffe59a","#b3c6e7","#c5e0b3"],["#bfbfbf","#3f3f3f","#756f6f","#8596b0","#9cc2e6","#f4b184","#c9c9c9","#fed964","#8eaada","#a7d08c"],["#a5a5a5","#262626","#3a3839","#333f4f","#2e75b5","#c45a10","#7b7b7b","#bf8e01","#2f5596","#538136"],["#7f7f7f","#0c0c0c","#171516","#222a35","#1f4e7a","#843c0a","#525252","#7e6000","#203864","#365624"]],xb=["#c00000","#fe0000","#fdc101","#ffff01","#93d051","#00b04e","#01b0f1","#0170c1","#012060","#7030a0"];function Qo(N){return $e("td","").child($e("div",`${Ze}-color-palette-cell`).on("click.stop",()=>this.change(N)).css("background-color",N))}class _b{constructor(){this.el=$e("div",`${Ze}-color-palette`),this.change=()=>{};const b=$e("table","").children($e("tbody","").children($e("tr",`${Ze}-theme-color-placeholders`).children(...yb.map(e=>Qo.call(this,e))),...wb.map(e=>$e("tr",`${Ze}-theme-colors`).children(...e.map(d=>Qo.call(this,d)))),$e("tr",`${Ze}-standard-colors`).children(...xb.map(e=>Qo.call(this,e)))));this.el.child(b)}}class Cf extends Wn{constructor(b,e){const d=new jr(b).css("height","16px").css("border-bottom",`3px solid ${e}`),m=new _b;m.change=f=>{this.setTitle(f),this.change(f)},super(d,"auto",!1,"bottom-left",m.el)}setTitle(b){this.title.css("border-color",b),this.hide()}}const Sb=[["thin",''],["medium",''],["thick",''],["dashed",''],["dotted",'']];class Eb extends Wn{constructor(b){const e=new jr("line-type");let d=0;const m=Sb.map((f,c)=>$e("div",`${Ze}-item state ${b===f[0]?"checked":""}`).on("click",()=>{m[d].toggle("checked"),m[c].toggle("checked"),d=c,this.hide(),this.change(f)}).child($e("div",`${Ze}-line-type`).html(f[1])));super(e,"auto",!1,"bottom-left",...m)}}function Hc(...N){return $e("table","").child($e("tbody","").children(...N))}function zc(N){return $e("td","").child($e("div",`${Ze}-border-palette-cell`).child(new jr(`border-${N}`)).on("click",()=>{this.mode=N;const{mode:b,style:e,color:d}=this;this.change({mode:b,style:e,color:d})}))}class Cb{constructor(){this.color="#000",this.style="thin",this.mode="all",this.change=()=>{},this.ddColor=new Cf("line-color",this.color),this.ddColor.change=e=>{this.color=e},this.ddType=new Eb(this.style),this.ddType.change=([e])=>{this.style=e},this.el=$e("div",`${Ze}-border-palette`);const b=Hc($e("tr","").children($e("td",`${Ze}-border-palette-left`).child(Hc($e("tr","").children(...["all","inside","horizontal","vertical","outside"].map(e=>zc.call(this,e))),$e("tr","").children(...["left","top","right","bottom","none"].map(e=>zc.call(this,e))))),$e("td",`${Ze}-border-palette-right`).children($e("div",`${Ze}-toolbar-btn`).child(this.ddColor.el),$e("div",`${Ze}-toolbar-btn`).child(this.ddType.el))));this.el.child(b)}}class Tb extends Wn{constructor(){const b=new jr("border-all"),e=new Cb;e.change=d=>{this.change(d),this.hide()},super(b,"auto",!1,"bottom-left",e.el)}}class Ab extends Xn{constructor(){super("border")}dropdown(){return new Tb}}class Ja extends Ef{element(){return super.element().child(new jr(this.tag)).on("click",()=>this.change(this.tag))}setState(b){this.el.disabled(b)}}class kb extends Ja{constructor(){super("clearformat")}}class Mb extends oi{constructor(){super("paintformat")}setState(){}}class Rb extends Xn{constructor(b){super("color",void 0,b)}dropdown(){const{tag:b,value:e}=this;return new Cf(b,e)}}class Ib extends Xn{constructor(b){super("bgcolor",void 0,b)}dropdown(){const{tag:b,value:e}=this;return new Cf(b,e)}}class Ob extends Wn{constructor(){const b=pf.map(e=>$e("div",`${Ze}-item`).on("click",()=>{this.setTitle(`${e.pt}`),this.change(e)}).child(`${e.pt}`));super("10","60px",!0,"bottom-left",...b)}}let Fb=class extends Xn{constructor(){super("font-size")}getValue(b){return b.pt}dropdown(){return new Ob}};class Pb extends Wn{constructor(){const b=Lc.map(e=>$e("div",`${Ze}-item`).on("click",()=>{this.setTitle(e.title),this.change(e)}).child(e.title));super(Lc[0].title,"160px",!0,"bottom-left",...b)}}class Nb extends Xn{constructor(){super("font-name")}getValue(b){return b.key}dropdown(){return new Pb}}class Db extends Wn{constructor(){let b=Hs.slice(0);b.splice(2,0,{key:"divider"}),b.splice(8,0,{key:"divider"}),b=b.map(e=>{const d=$e("div",`${Ze}-item`);return e.key==="divider"?d.addClass("divider"):(d.child(e.title()).on("click",()=>{this.setTitle(e.title()),this.change(e)}),e.label&&d.child($e("div","label").html(e.label))),d}),super("Normal","220px",!0,"bottom-left",...b)}setTitle(b){for(let e=0;e$e("div",`${Ze}-item`).on("click",()=>{this.hide(),this.change(e)}).child(e.key));super(new jr("formula"),"180px",!0,"bottom-left",...b)}}class jb extends Xn{constructor(){super("formula")}getValue(b){return b.key}dropdown(){return new Lb}}class $b extends oi{constructor(){super("freeze")}}class Hb extends oi{constructor(){super("merge")}setState(b,e){this.el.active(b).disabled(e)}}class zb extends Ja{constructor(){super("redo","Ctrl+Y")}}class Ub extends Ja{constructor(){super("undo","Ctrl+Z")}}class Xb extends Ja{constructor(){super("print","Ctrl+P")}}class Wb extends oi{constructor(){super("textwrap")}}let Vb=class extends Wn{constructor(){const b=new jr("ellipsis"),e=$e("div",`${Ze}-toolbar-more`);super(b,"auto",!1,"bottom-right",e),this.moreBtns=e,this.contentEl.css("max-width","420px")}};class Kb extends Xn{constructor(){super("more"),this.el.hide()}dropdown(){return new Vb}show(){this.el.show()}hide(){this.el.hide()}}function ps(){return $e("div",`${Ze}-toolbar-divider`)}function Gb(){this.btns2=[],this.items.forEach(N=>{if(Array.isArray(N))N.forEach(({el:b})=>{const e=b.box(),{marginLeft:d,marginRight:m}=b.computedStyle();this.btns2.push([b,e.width+parseInt(d,10)+parseInt(m,10)])});else{const b=N.box(),{marginLeft:e,marginRight:d}=N.computedStyle();this.btns2.push([N,b.width+parseInt(e,10)+parseInt(d,10)])}})}function Uc(){const{el:N,btns:b,moreEl:e,btns2:d}=this,{moreBtns:m,contentEl:f}=e.dd;N.css("width",`${this.widthFn()-60}px`);const c=N.box();let u=160,s=12;const t=[],n=[];d.forEach(([r,i],o)=>{u+=i,o===d.length-1||u0?e.show():e.hide()}class Yb{constructor(b,e,d=!1){this.data=b,this.change=()=>{},this.widthFn=e,this.isHide=d;const m=b.defaultStyle();this.items=[[this.undoEl=new Ub,this.redoEl=new zb,new Xb,this.paintformatEl=new Mb,this.clearformatEl=new kb],ps(),[this.formatEl=new Bb],ps(),[this.fontEl=new Nb,this.fontSizeEl=new Fb],ps(),[this.boldEl=new mb,this.italicEl=new gb,this.underlineEl=new vb,this.strikeEl=new bb,this.textColorEl=new Rb(m.color)],ps(),[this.fillColorEl=new Ib(m.bgcolor),this.borderEl=new Ab,this.mergeEl=new Hb],ps(),[this.alignEl=new ub(m.align),this.valignEl=new db(m.valign),this.textwrapEl=new Wb],ps(),[this.freezeEl=new $b,this.autofilterEl=new pb,this.formulaEl=new jb,this.moreEl=new Kb]],this.el=$e("div",`${Ze}-toolbar`),this.btns=$e("div",`${Ze}-toolbar-btns`),this.items.forEach(f=>{Array.isArray(f)?f.forEach(c=>{this.btns.child(c.el),c.change=(...u)=>{this.change(...u)}}):this.btns.child(f.el)}),this.el.child(this.btns),d?this.el.hide():(this.reset(),setTimeout(()=>{Gb.call(this),Uc.call(this)},0),tn(window,"resize",()=>{Uc.call(this)}))}paintformatActive(){return this.paintformatEl.active()}paintformatToggle(){this.paintformatEl.toggle()}trigger(b){this[`${b}El`].click()}resetData(b){this.data=b,this.reset()}reset(){if(this.isHide)return;const{data:b}=this,e=b.getSelectedCellStyle();this.undoEl.setState(!b.canUndo()),this.redoEl.setState(!b.canRedo()),this.mergeEl.setState(b.canUnmerge(),!b.selector.multiple()),this.autofilterEl.setState(!b.canAutofilter());const{font:d,format:m}=e;this.formatEl.setState(m),this.fontEl.setState(d.name),this.fontSizeEl.setState(d.size),this.boldEl.setState(d.bold),this.italicEl.setState(d.italic),this.underlineEl.setState(e.underline),this.strikeEl.setState(e.strike),this.textColorEl.setState(e.color),this.fillColorEl.setState(e.bgcolor),this.alignEl.setState(e.align),this.valignEl.setState(e.valign),this.textwrapEl.setState(e.textwrap),this.freezeEl.setState(b.freezeIsActive())}}class Zb{constructor(b,e,d="600px"){this.title=b,this.el=$e("div",`${Ze}-modal`).css("width",d).children($e("div",`${Ze}-modal-header`).children(new jr("close").on("click.stop",()=>this.hide()),this.title),$e("div",`${Ze}-modal-content`).children(...e)).hide()}show(){this.dimmer=$e("div",`${Ze}-dimmer active`),document.body.appendChild(this.dimmer.el);const{width:b,height:e}=this.el.show().box(),{clientHeight:d,clientWidth:m}=document.documentElement;this.el.offset({left:(m-b)/2,top:(d-e)/3}),window.xkeydownEsc=f=>{f.keyCode===27&&this.hide()},tn(window,"keydown",window.xkeydownEsc)}hide(){this.el.hide(),document.body.removeChild(this.dimmer.el),Xa(window,"keydown",window.xkeydownEsc),delete window.xkeydownEsc}}class ms{constructor(b,e){this.vchange=()=>{},this.el=$e("div",`${Ze}-form-input`),this.input=$e("input","").css("width",b).on("input",d=>this.vchange(d)).attr("placeholder",e),this.el.child(this.input)}focus(){setTimeout(()=>{this.input.el.focus()},10)}hint(b){this.input.attr("placeholder",b)}val(b){return this.input.val(b)}}class qo{constructor(b,e,d,m=c=>c,f=()=>{}){this.key=b,this.getTitle=m,this.vchange=()=>{},this.el=$e("div",`${Ze}-form-select`),this.suggest=new uh(e.map(c=>({key:c,title:this.getTitle(c)})),c=>{this.itemClick(c.key),f(c.key),this.vchange(c.key)},d,this.el),this.el.children(this.itemEl=$e("div","input-text").html(this.getTitle(b)),this.suggest.el).on("click",()=>this.show())}show(){this.suggest.search("")}itemClick(b){this.key=b,this.itemEl.html(this.getTitle(b))}val(b){return b!==void 0?(this.key=b,this.itemEl.html(this.getTitle(b)),this):this.key}}const Jb={number:/(^\d+$)|(^\d+(\.\d{0,4})?$)/,date:/^\d{4}-\d{1,2}-\d{1,2}$/};class yi{constructor(b,e,d,m){this.label="",this.rule=e,d&&(this.label=$e("label","label").css("width",`${m}px`).html(d)),this.tip=$e("div","tip").child("tip").hide(),this.input=b,this.input.vchange=()=>this.validate(),this.el=$e("div",`${Ze}-form-field`).children(this.label,b.el,this.tip)}isShow(){return this.el.css("display")!=="none"}show(){this.el.show()}hide(){return this.el.hide(),this}val(b){return this.input.val(b)}hint(b){this.input.hint(b)}validate(){const{input:b,rule:e,tip:d,el:m}=this,f=b.val();return e.required&&/^\s*$/.test(f)?(d.html(Cr("validation.required")),m.addClass("error"),!1):(e.type||e.pattern)&&!(e.pattern||Jb[e.type]).test(f)?(d.html(Cr("validation.notMatch")),m.addClass("error"),!1):(m.removeClass("error"),!0)}}const Xc=100;class Qb extends Zb{constructor(){const b=new yi(new qo("cell",["cell"],"100%",t=>Cr(`dataValidation.modeType.${t}`)),{required:!0},`${Cr("dataValidation.range")}:`,Xc),e=new yi(new ms("120px","E3 or E3:F12"),{required:!0,pattern:/^([A-Z]{1,2}[1-9]\d*)(:[A-Z]{1,2}[1-9]\d*)?$/}),d=new yi(new qo("list",["list","number","date","phone","email"],"100%",t=>Cr(`dataValidation.type.${t}`),t=>this.criteriaSelected(t)),{required:!0},`${Cr("dataValidation.criteria")}:`,Xc),m=new yi(new qo("be",["be","nbe","eq","neq","lt","lte","gt","gte"],"160px",t=>Cr(`dataValidation.operator.${t}`),t=>this.criteriaOperatorSelected(t)),{required:!0}).hide(),f=new yi(new ms("70px","10"),{required:!0}).hide(),c=new yi(new ms("70px","100"),{required:!0,type:"number"}).hide(),u=new yi(new ms("120px","a,b,c"),{required:!0}),s=new yi(new ms("70px","10"),{required:!0,type:"number"}).hide();super(Cr("contextmenu.validation"),[$e("div",`${Ze}-form-fields`).children(b.el,e.el),$e("div",`${Ze}-form-fields`).children(d.el,m.el,f.el,c.el,s.el,u.el),$e("div",`${Ze}-buttons`).children(new Di("cancel").on("click",()=>this.btnClick("cancel")),new Di("remove").on("click",()=>this.btnClick("remove")),new Di("save","primary").on("click",()=>this.btnClick("save")))]),this.mf=b,this.rf=e,this.cf=d,this.of=m,this.minvf=f,this.maxvf=c,this.vf=s,this.svf=u,this.change=()=>{}}showVf(b){const e=b==="date"?"2018-11-12":"10",{vf:d}=this;d.input.hint(e),d.show()}criteriaSelected(b){const{of:e,minvf:d,maxvf:m,vf:f,svf:c}=this;b==="date"||b==="number"?(e.show(),d.rule.type=b,m.rule.type=b,b==="date"?(d.hint("2018-11-12"),m.hint("2019-11-12")):(d.hint("10"),m.hint("100")),d.show(),m.show(),f.hide(),c.hide()):(b==="list"?c.show():c.hide(),f.hide(),e.hide(),d.hide(),m.hide())}criteriaOperatorSelected(b){if(!b)return;const{minvf:e,maxvf:d,vf:m}=this;if(b==="be"||b==="nbe")e.show(),d.show(),m.hide();else{const f=this.cf.val();m.rule.type=f,f==="date"?m.hint("2018-11-12"):m.hint("10"),m.show(),e.hide(),d.hide()}}btnClick(b){if(b==="cancel")this.hide();else if(b==="remove")this.change("remove"),this.hide();else if(b==="save"){const e=["mf","rf","cf","of","svf","vf","minvf","maxvf"];for(let s=0;sthis.itemClick(N))}function qb(N){const{filterbEl:b,filterValues:e}=this;b.html(""),Object.keys(N).forEach((m,f)=>{const c=N[m],u=e.includes(m)?"checked":"";b.child($e("div",`${Ze}-item state ${u}`).on("click.stop",()=>this.filterClick(f,m)).children(m===""?Cr("filter.empty"):m,$e("div","label").html(`(${c})`)))})}function Vc(){const{filterhEl:N,filterValues:b,values:e}=this;N.html(`${b.length} / ${e.length}`),N.checked(b.length===e.length)}class ev{constructor(){this.filterbEl=$e("div",`${Ze}-body`),this.filterhEl=$e("div",`${Ze}-header state`).on("click.stop",()=>this.filterClick(0,"all")),this.el=$e("div",`${Ze}-sort-filter`).children(this.sortAscEl=Wc.call(this,"asc"),this.sortDescEl=Wc.call(this,"desc"),wh("divider"),$e("div",`${Ze}-filter`).children(this.filterhEl,this.filterbEl),$e("div",`${Ze}-buttons`).children(new Di("cancel").on("click",()=>this.btnClick("cancel")),new Di("ok","primary").on("click",()=>this.btnClick("ok")))).hide(),this.ci=null,this.sortDesc=null,this.values=null,this.filterValues=[]}btnClick(b){if(b==="ok"){const{ci:e,sort:d,filterValues:m}=this;this.ok&&this.ok(e,d,"in",m)}this.hide()}itemClick(b){this.sort=b;const{sortAscEl:e,sortDescEl:d}=this;e.checked(b==="asc"),d.checked(b==="desc")}filterClick(b,e){const{filterbEl:d,filterValues:m,values:f}=this,c=d.children();e==="all"?c.length===m.length?(this.filterValues=[],c.forEach(u=>$e(u).checked(!1))):(this.filterValues=Array.from(f),c.forEach(u=>$e(u).checked(!0))):$e(c[b]).toggle("checked")?m.push(e):m.splice(m.findIndex(s=>s===e),1),Vc.call(this)}set(b,e,d,m){this.ci=b;const{sortAscEl:f,sortDescEl:c}=this;m!==null?(this.sort=m.order,f.checked(m.asc()),c.checked(m.desc())):(this.sortDesc=null,f.checked(!1),c.checked(!1)),this.values=Object.keys(e),this.filterValues=d?Array.from(d.value):Object.keys(e),qb.call(this,e,d),Vc.call(this)}setOffset(b){this.el.offset(b).show();let e=1;Ws(this.el,()=>{e<=0&&this.hide(),e-=1})}show(){this.el.show()}hide(){this.el.hide(),gs(this.el)}}function xh(N,b){const e=$e("div",`${Ze}-toast`),d=$e("div",`${Ze}-dimmer active`),m=()=>{document.body.removeChild(e.el),document.body.removeChild(d.el)};e.children($e("div",`${Ze}-toast-header`).children(new jr("close").on("click.stop",()=>m()),N),$e("div",`${Ze}-toast-content`).html(b)),document.body.appendChild(e.el),document.body.appendChild(d.el);const{width:f,height:c}=e.box(),{clientHeight:u,clientWidth:s}=document.documentElement;e.offset({left:(s-f)/2,top:(u-c)/3})}function ef(N,b){let e;return(...d)=>{const m=this,f=d;e||(e=setTimeout(()=>{e=null,N.apply(m,f)},b))}}function tv(){const{data:N,verticalScrollbar:b,horizontalScrollbar:e}=this,{l:d,t:m,left:f,top:c,width:u,height:s}=N.getSelectedRect(),t=this.getTableOffset();if(Math.abs(f)+u>t.width)e.move({left:d+u-t.width});else{const n=N.freezeTotalWidth();ft.height)b.move({top:m+s-t.height-1});else{const n=N.freezeTotalHeight();c0&&(u-=1):b==="right"?(t!==u&&(u=t),u0&&(c-=1):b==="down"?(s!==c&&(c=s),cs.indexWidth&&e>u.height){d.hide(),m.hide();return}const t=f.box(),n=c.getCellRectByXY(N.offsetX,N.offsetY);n.ri>=0&&n.ci===-1?(n.width=s.indexWidth,d.show(n,{width:t.width}),u.isHide(n.ri-1)?d.showUnhide(n.ri):d.hideUnhide()):d.hide(),n.ri===-1&&n.ci>=0?(n.height=u.height,m.show(n,{height:t.height}),s.isHide(n.ci-1)?m.showUnhide(n.ci):m.hideUnhide()):m.hide()}function nv(N){const{verticalScrollbar:b,horizontalScrollbar:e,data:d}=this,{top:m}=b.scroll(),{left:f}=e.scroll(),{rows:c,cols:u}=d,{deltaY:s,deltaX:t}=N,n=(g,v)=>{let h=g,w=0;do w=v(h),h+=1;while(w<=0);return w},r=g=>{if(g>0){const v=d.scroll.ri+1;if(vc.getHeight(w));b.move({top:m+h-1})}}else{const v=d.scroll.ri-1;if(v>=0){const h=n(v,w=>c.getHeight(w));b.move({top:v===0?0:m-h})}}},i=g=>{if(g>0){const v=d.scroll.ci+1;if(vu.getWidth(w));e.move({left:f+h-1})}}else{const v=d.scroll.ci-1;if(v>=0){const h=n(v,w=>u.getWidth(w));e.move({left:v===0?0:f-h})}}},o=Math.abs(s),l=Math.abs(t),a=Math.max(o,l);/Firefox/i.test(window.navigator.userAgent)&&ef(r(N.detail),50),a===l&&ef(i(t),50),a===o&&ef(r(s),50)}function iv(N,b){const{verticalScrollbar:e,horizontalScrollbar:d}=this,{top:m}=e.scroll(),{left:f}=d.scroll();N==="left"||N==="right"?d.move({left:f-b}):(N==="up"||N==="down")&&e.move({top:m-b})}function Tf(){const{data:N,verticalScrollbar:b}=this,{height:e}=this.getTableOffset(),d=N.exceptRowTotalHeight(0,-1);b.set(e,N.rows.totalHeight()-d)}function Af(){const{data:N,horizontalScrollbar:b}=this,{width:e}=this.getTableOffset();N&&b.set(e,N.cols.totalWidth())}function sv(){const{selector:N,data:b,editor:e}=this,[d,m]=b.freeze;if(d>0||m>0){const f=b.freezeTotalWidth(),c=b.freezeTotalHeight();e.setFreezeLengths(f,c)}N.resetAreaOffset()}function en(){const{tableEl:N,overlayerEl:b,overlayerCEl:e,table:d,toolbar:m,selector:f,el:c}=this,u=this.getTableOffset(),s=this.getRect();N.attr(s),b.offset(s),e.offset(u),c.css("width",`${s.width}px`),Tf.call(this),Af.call(this),sv.call(this),d.render(),m.reset(),f.reset()}function Vs(){const{data:N,selector:b}=this;N.clearClipboard(),b.hideClipboard()}function gf(){const{data:N,selector:b}=this;N.copy(),N.copyToSystemClipboard(),b.showClipboard()}function Kc(){const{data:N,selector:b}=this;N.cut(),b.showClipboard()}function zs(N,b){const{data:e}=this;if(e.settings.mode!=="read"){if(e.paste(N,d=>xh("Tip",d)))en.call(this);else if(b){const d=b.clipboardData.getData("text/plain");this.data.pasteFromText(d),en.call(this)}}}function av(){this.data.hideRowsOrCols(),en.call(this)}function Gc(N,b){this.data.unhideRowsOrCols(N,b),en.call(this)}function ov(){const{data:N}=this;N.autofilter(),en.call(this)}function fv(){const{toolbar:N}=this;N.paintformatActive()&&(zs.call(this,"format"),Vs.call(this),N.paintformatToggle())}function Yc(N){const{selector:b,data:e,table:d,sortFilter:m}=this,{offsetX:f,offsetY:c}=N,u=N.target.className===`${Ze}-selector-corner`,s=e.getCellRectByXY(f,c),{left:t,top:n,width:r,height:i}=s;let{ri:o,ci:l}=s;const{autoFilter:a}=e;if(a.includes(o,l)&&t+r-20e.rows.getCell(v,h));m.hide(),m.set(l,g,a.getFilter(l),a.getSort(l)),m.setOffset({left:t,top:n+i+2});return}N.shiftKey||(u?b.showAutofill(o,l):Bi.call(this,!1,o,l),oh(window,g=>{({ri:o,ci:l}=e.getCellRectByXY(g.offsetX,g.offsetY)),u?b.showAutofill(o,l):g.buttons===1&&!g.shiftKey&&Bi.call(this,!0,o,l,!0,!0)},()=>{u&&b.arange&&e.settings.mode!=="read"&&e.autofill(b.arange,"all",g=>xh("Tip",g))&&d.render(),b.hideAutofill(),fv.call(this)})),!u&&N.buttons===1&&N.shiftKey&&Bi.call(this,!0,o,l)}function Ks(){const{editor:N,data:b}=this,e=b.getSelectedRect(),d=this.getTableOffset();let m="top";e.top>d.height/2&&(m="bottom"),N.setOffset(e,m)}function Us(){const{editor:N,data:b}=this;b.settings.mode!=="read"&&(Ks.call(this),N.setCell(b.getSelectedCell(),b.getSelectedValidator()),Vs.call(this))}function lv(N){const{data:b,table:e,selector:d}=this;b.scrolly(N,()=>{d.resetBRLAreaOffset(),Ks.call(this),e.render()})}function cv(N){const{data:b,table:e,selector:d}=this;b.scrollx(N,()=>{d.resetBRTAreaOffset(),Ks.call(this),e.render()})}function hv(N,b){const{ri:e}=N,{table:d,selector:m,data:f}=this;f.rows.setHeight(e,b),d.render(),m.resetAreaOffset(),Tf.call(this),Ks.call(this)}function uv(N,b){const{ci:e}=N,{table:d,selector:m,data:f}=this;f.cols.setWidth(e,b),d.render(),m.resetAreaOffset(),Af.call(this),Ks.call(this)}function tf(N,b="finished"){const{data:e,table:d}=this;if(e.settings.mode==="read")return;e.setSelectedCellText(N,b);const{ri:m,ci:f}=e.selector;b==="finished"?d.render():this.trigger("cell-edited",N,m,f)}function ja(N){const{data:b}=this;b.settings.mode!=="read"&&(N==="insert-row"?b.insert("row"):N==="delete-row"?b.delete("row"):N==="insert-column"?b.insert("column"):N==="delete-column"?b.delete("column"):N==="delete-cell"?b.deleteCell():N==="delete-cell-format"?b.deleteCell("format"):N==="delete-cell-text"?b.deleteCell("text"):N==="cell-printable"?b.setSelectedCellAttr("printable",!0):N==="cell-non-printable"?b.setSelectedCellAttr("printable",!1):N==="cell-editable"?b.setSelectedCellAttr("editable",!0):N==="cell-non-editable"&&b.setSelectedCellAttr("editable",!1),Vs.call(this),en.call(this))}function dv(N,b){const{data:e}=this;if(N==="undo")this.undo();else if(N==="redo")this.redo();else if(N==="print")this.print.preview();else if(N==="paintformat")b===!0?gf.call(this):Vs.call(this);else if(N==="clearformat")ja.call(this,"delete-cell-format");else if(N!=="link"){if(N!=="chart")if(N==="autofilter")ov.call(this);else if(N==="freeze")if(b){const{ri:d,ci:m}=e.selector;this.freeze(d,m)}else this.freeze(0,0);else e.setSelectedCellAttr(N,b),N==="formula"&&!e.selector.multiple()&&Us.call(this),en.call(this)}}function pv(N,b,e,d){this.data.setAutoFilter(N,b,e,d),en.call(this)}function mv(){const{selector:N,overlayerEl:b,rowResizer:e,colResizer:d,verticalScrollbar:m,horizontalScrollbar:f,editor:c,contextMenu:u,toolbar:s,modalValidation:t,sortFilter:n}=this;b.on("mousemove",r=>{rv.call(this,r)}).on("mousedown",r=>{c.clear(),u.hide(),r.buttons===2?(this.data.xyInSelectedRect(r.offsetX,r.offsetY)||Yc.call(this,r),u.setPosition(r.offsetX,r.offsetY),r.stopPropagation()):r.detail===2?Us.call(this):Yc.call(this,r)}).on("mousewheel.stop",r=>{nv.call(this,r)}).on("mouseout",r=>{const{offsetX:i,offsetY:o}=r;o<=0&&d.hide(),i<=0&&e.hide()}),N.inputChange=r=>{tf.call(this,r,"input"),Us.call(this)},_g(b.el,{move:(r,i)=>{iv.call(this,r,i)}}),s.change=(r,i)=>dv.call(this,r,i),n.ok=(r,i,o,l)=>pv.call(this,r,i,o,l),e.finishedFn=(r,i)=>{hv.call(this,r,i)},d.finishedFn=(r,i)=>{uv.call(this,r,i)},e.unhideFn=r=>{Gc.call(this,"row",r)},d.unhideFn=r=>{Gc.call(this,"col",r)},m.moveFn=(r,i)=>{lv.call(this,r,i)},f.moveFn=(r,i)=>{cv.call(this,r,i)},c.change=(r,i)=>{tf.call(this,i,r)},t.change=(r,...i)=>{r==="save"?this.data.addValidation(...i):this.data.removeValidation()},u.itemClick=r=>{r==="validation"?t.setValue(this.data.getSelectedValidation()):r==="copy"?gf.call(this):r==="cut"?Kc.call(this):r==="paste"?zs.call(this,"all"):r==="paste-value"?zs.call(this,"text"):r==="paste-format"?zs.call(this,"format"):r==="hide"?av.call(this):ja.call(this,r)},tn(window,"resize",()=>{this.reload()}),tn(window,"click",r=>{this.focusing=b.contains(r.target)}),tn(window,"paste",r=>{this.focusing&&(zs.call(this,"all",r),r.preventDefault())}),tn(window,"keydown",r=>{if(!this.focusing)return;const i=r.keyCode||r.which,{key:o,ctrlKey:l,shiftKey:a,metaKey:g}=r;if(l||g)switch(i){case 90:this.undo(),r.preventDefault();break;case 89:this.redo(),r.preventDefault();break;case 67:gf.call(this),r.preventDefault();break;case 88:Kc.call(this),r.preventDefault();break;case 85:s.trigger("underline"),r.preventDefault();break;case 86:break;case 37:zn.call(this,a,"row-first"),r.preventDefault();break;case 38:zn.call(this,a,"col-first"),r.preventDefault();break;case 39:zn.call(this,a,"row-last"),r.preventDefault();break;case 40:zn.call(this,a,"col-last"),r.preventDefault();break;case 32:Bi.call(this,!1,-1,this.data.selector.ci,!1),r.preventDefault();break;case 66:s.trigger("bold");break;case 73:s.trigger("italic");break}else{switch(i){case 32:a&&Bi.call(this,!1,this.data.selector.ri,-1,!1);break;case 27:u.hide(),Vs.call(this);break;case 37:zn.call(this,a,"left"),r.preventDefault();break;case 38:zn.call(this,a,"up"),r.preventDefault();break;case 39:zn.call(this,a,"right"),r.preventDefault();break;case 40:zn.call(this,a,"down"),r.preventDefault();break;case 9:c.clear(),zn.call(this,!1,a?"left":"right"),r.preventDefault();break;case 13:c.clear(),zn.call(this,!1,a?"up":"down"),r.preventDefault();break;case 8:ja.call(this,"delete-cell-text"),r.preventDefault();break}o==="Delete"?(ja.call(this,"delete-cell-text"),r.preventDefault()):i>=65&&i<=90||i>=48&&i<=57||i>=96&&i<=105||r.key==="="?(tf.call(this,r.key,"input"),Us.call(this)):i===113&&Us.call(this)}})}class gv{constructor(b,e){this.eventMap=Sg();const{view:d,showToolbar:m,showContextmenu:f}=e.settings;this.el=$e("div",`${Ze}-sheet`),this.toolbar=new Yb(e,d.width,!m),this.print=new sb(e),b.children(this.toolbar.el,this.el,this.print.el),this.data=e,this.tableEl=$e("canvas",`${Ze}-table`),this.rowResizer=new Ic(!1,e.rows.height),this.colResizer=new Ic(!0,e.cols.minWidth),this.verticalScrollbar=new Oc(!0),this.horizontalScrollbar=new Oc(!1),this.editor=new Hg(Gg,()=>this.getTableOffset(),e.rows.height),this.modalValidation=new Qb,this.contextMenu=new lb(()=>this.getRect(),!f),this.selector=new Tg(e),this.overlayerCEl=$e("div",`${Ze}-overlayer-content`).children(this.editor.el,this.selector.el),this.overlayerEl=$e("div",`${Ze}-overlayer`).child(this.overlayerCEl),this.sortFilter=new ev,this.el.children(this.tableEl,this.overlayerEl.el,this.rowResizer.el,this.colResizer.el,this.verticalScrollbar.el,this.horizontalScrollbar.el,this.contextMenu.el,this.modalValidation.el,this.sortFilter.el),this.table=new rb(this.tableEl.el,e),mv.call(this),en.call(this),Bi.call(this,!1,0,0)}on(b,e){return this.eventMap.on(b,e),this}trigger(b,...e){const{eventMap:d}=this;d.fire(b,e)}resetData(b){this.editor.clear(),this.data=b,Tf.call(this),Af.call(this),this.toolbar.resetData(b),this.print.resetData(b),this.selector.resetData(b),this.table.resetData(b)}loadData(b){return this.data.setData(b),en.call(this),this}freeze(b,e){const{data:d}=this;return d.setFreeze(b,e),en.call(this),this}undo(){this.data.undo(),en.call(this)}redo(){this.data.redo(),en.call(this)}reload(){return en.call(this),this}getRect(){const{data:b}=this;return{width:b.viewWidth(),height:b.viewHeight()}}getTableOffset(){const{rows:b,cols:e}=this.data,{width:d,height:m}=this.getRect();return{width:d-e.indexWidth,height:m-b.height,left:e.indexWidth,top:b.height}}}class bv extends Wn{constructor(b){const e=new jr("ellipsis");super(e,"auto",!1,"top-left"),this.contentClick=b}reset(b){const e=b.map((d,m)=>$e("div",`${Ze}-item`).css("width","150px").css("font-weight","normal").on("click",()=>{this.contentClick(m),this.hide()}).child(d));this.setContentChildren(...e)}setTitle(){}}const vv=[{key:"delete",title:Wt("contextmenu.deleteSheet")}];function yv(N){return $e("div",`${Ze}-item`).child(N.title()).on("click",()=>{this.itemClick(N.key),this.hide()})}function wv(){return vv.map(N=>yv.call(this,N))}class xv{constructor(){this.el=$e("div",`${Ze}-contextmenu`).css("width","160px").children(...wv.call(this)).hide(),this.itemClick=()=>{}}hide(){const{el:b}=this;b.hide(),gs(b)}setOffset(b){const{el:e}=this;e.offset(b),e.show(),Ws(e)}}class _v{constructor(b=()=>{},e=()=>{},d=()=>{},m=()=>{}){this.swapFunc=e,this.updateFunc=m,this.dataNames=[],this.activeEl=null,this.deleteEl=null,this.items=[],this.moreEl=new bv(f=>{this.clickSwap2(this.items[f])}),this.contextMenu=new xv,this.contextMenu.itemClick=d,this.el=$e("div",`${Ze}-bottombar`).children(this.contextMenu.el,this.menuEl=$e("ul",`${Ze}-menu`).child($e("li","").children(new jr("add").on("click",()=>{b()}),$e("span","").child(this.moreEl))))}addItem(b,e){this.dataNames.push(b);const d=$e("li",e?"active":"").child(b);d.on("click",()=>{this.clickSwap2(d)}).on("contextmenu",m=>{const{offsetLeft:f,offsetHeight:c}=m.target;this.contextMenu.setOffset({left:f,bottom:c+1}),this.deleteEl=d}).on("dblclick",()=>{const m=d.html(),f=new ms("auto","");f.val(m),f.input.on("blur",({target:c})=>{const{value:u}=c,s=this.dataNames.findIndex(t=>t===m);this.renameItem(s,u)}),d.html("").child(f.el),f.focus()}),e&&this.clickSwap(d),this.items.push(d),this.menuEl.child(d),this.moreEl.reset(this.dataNames)}renameItem(b,e){this.dataNames.splice(b,1,e),this.moreEl.reset(this.dataNames),this.items[b].html("").child(e),this.updateFunc(b,e)}clear(){this.items.forEach(b=>{this.menuEl.removeChild(b.el)}),this.items=[],this.dataNames=[],this.moreEl.reset(this.dataNames)}deleteItem(){const{activeEl:b,deleteEl:e}=this;if(this.items.length>1){const d=this.items.findIndex(m=>m===e);if(this.items.splice(d,1),this.dataNames.splice(d,1),this.menuEl.removeChild(e.el),this.moreEl.reset(this.dataNames),b===e){const[m]=this.items;return this.activeEl=m,this.activeEl.toggle(),[d,0]}return[d,-1]}return[-1]}clickSwap2(b){const e=this.items.findIndex(d=>d===b);this.clickSwap(b),this.activeEl.toggle(),this.swapFunc(e)}clickSwap(b){this.activeEl!==null&&this.activeEl.toggle(),this.activeEl=b}}class Sv{constructor(b,e={}){let d=b;this.options={showBottomBar:!0,...e},this.sheetIndex=1,this.datas=[],typeof b=="string"&&(d=document.querySelector(b)),this.bottombar=this.options.showBottomBar?new _v(()=>{const f=this.addSheet();this.sheet.resetData(f)},f=>{const c=this.datas[f];this.sheet.resetData(c)},()=>{this.deleteSheet()},(f,c)=>{this.datas[f].name=c}):null,this.data=this.addSheet();const m=$e("div",`${Ze}`).on("contextmenu",f=>f.preventDefault());d.appendChild(m.el),this.sheet=new gv(m,this.data),this.bottombar!==null&&m.child(this.bottombar.el)}addSheet(b,e=!0){const d=b||`sheet${this.sheetIndex}`,m=new xg(d,this.options);return m.change=(...f)=>{this.sheet.trigger("change",...f)},this.datas.push(m),this.bottombar!==null&&this.bottombar.addItem(d,e),this.sheetIndex+=1,m}deleteSheet(){if(this.bottombar===null)return;const[b,e]=this.bottombar.deleteItem();b>=0&&(this.datas.splice(b,1),e>=0&&this.sheet.resetData(this.datas[e]))}loadData(b){const e=Array.isArray(b)?b:[b];if(this.bottombar!==null&&this.bottombar.clear(),this.datas=[],e.length>0)for(let d=0;db.getData())}cellText(b,e,d,m=0){return this.datas[m].setCellText(b,e,d,"finished"),this}cell(b,e,d=0){return this.datas[d].getCell(b,e)}cellStyle(b,e,d=0){return this.datas[d].getCellStyle(b,e)}reRender(){return this.sheet.table.render(),this}on(b,e){return this.sheet.on(b,e),this}validate(){const{validations:b}=this.data;return b.errors.size<=0}change(b){return this.sheet.on("change",b),this}static locale(b,e){sh(b,e)}}const Ev=(N,b={})=>new Sv(N,b);window&&(window.x_spreadsheet=Ev,window.x_spreadsheet.locale=(N,b)=>sh(N,b));var _h={exports:{}};(function(N,b){(function(e){N.exports=e()})(function(){return function(){function e(d,m,f){function c(t,n){if(!m[t]){if(!d[t]){var r=typeof Ia=="function"&&Ia;if(!n&&r)return r(t,!0);if(u)return u(t,!0);var i=new Error("Cannot find module '"+t+"'");throw i.code="MODULE_NOT_FOUND",i}var o=m[t]={exports:{}};d[t][0].call(o.exports,function(l){var a=d[t][1][l];return c(a||l)},o,o.exports,e,d,m,f)}return m[t].exports}for(var u=typeof Ia=="function"&&Ia,s=0;s{const w=this.workbook.addWorksheet(g.sheetName),y=g.dateFormats||["YYYY-MM-DD[T]HH:mm:ssZ","YYYY-MM-DD[T]HH:mm:ss","MM-DD-YYYY","YYYY-MM-DD"],S=g.map||function(I){if(I==="")return null;const F=Number(I);if(!Number.isNaN(F)&&F!==1/0)return F;const B=y.reduce((X,G)=>{if(X)return X;const V=t(I,G,!0);return V.isValid()?V:null},null);if(B)return new Date(B.valueOf());const j=i[I];return j!==void 0?j:I},E=c.parse(g.parserOptions).on("data",I=>{w.addRow(I.map(S))}).on("end",()=>{E.emit("worksheet",w)});E.on("worksheet",v).on("error",h),a.pipe(E)})}createInputStream(){throw new Error("`CSV#createInputStream` is deprecated. You should use `CSV#read` instead. This method will be removed in version 5.0. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md")}write(a,g){return new Promise((v,h)=>{g=g||{};const w=this.workbook.getWorksheet(g.sheetName||g.sheetId),y=c.format(g.formatterOptions);a.on("finish",()=>{v()}),y.on("error",h),y.pipe(a);const{dateFormat:S,dateUTC:E}=g,I=g.map||(j=>{if(j){if(j.text||j.hyperlink)return j.hyperlink||j.text||"";if(j.formula||j.result)return j.result||"";if(j instanceof Date)return S?E?t.utc(j).format(S):t(j).format(S):E?t.utc(j).format():t(j).format();if(j.error)return j.error;if(typeof j=="object")return JSON.stringify(j)}return j}),F=g.includeEmptyRows===void 0||g.includeEmptyRows;let B=1;w&&w.eachRow((j,X)=>{if(F)for(;B++2&&arguments[2]!==void 0?arguments[2]:0;if(this.worksheet=s,!t)this.nativeCol=0,this.nativeColOff=0,this.nativeRow=0,this.nativeRowOff=0;else if(typeof t=="string"){const r=f.decodeAddress(t);this.nativeCol=r.col+n,this.nativeColOff=0,this.nativeRow=r.row+n,this.nativeRowOff=0}else t.nativeCol!==void 0?(this.nativeCol=t.nativeCol||0,this.nativeColOff=t.nativeColOff||0,this.nativeRow=t.nativeRow||0,this.nativeRowOff=t.nativeRowOff||0):t.col!==void 0?(this.col=t.col+n,this.row=t.row+n):(this.nativeCol=0,this.nativeColOff=0,this.nativeRow=0,this.nativeRowOff=0)}static asInstance(s){return s instanceof c||s==null?s:new c(s)}get col(){return this.nativeCol+Math.min(this.colWidth-1,this.nativeColOff)/this.colWidth}set col(s){this.nativeCol=Math.floor(s),this.nativeColOff=Math.floor((s-this.nativeCol)*this.colWidth)}get row(){return this.nativeRow+Math.min(this.rowHeight-1,this.nativeRowOff)/this.rowHeight}set row(s){this.nativeRow=Math.floor(s),this.nativeRowOff=Math.floor((s-this.nativeRow)*this.rowHeight)}get colWidth(){return this.worksheet&&this.worksheet.getColumn(this.nativeCol+1)&&this.worksheet.getColumn(this.nativeCol+1).isCustomWidth?Math.floor(this.worksheet.getColumn(this.nativeCol+1).width*1e4):64e4}get rowHeight(){return this.worksheet&&this.worksheet.getRow(this.nativeRow+1)&&this.worksheet.getRow(this.nativeRow+1).height?Math.floor(this.worksheet.getRow(this.nativeRow+1).height*1e4):18e4}get model(){return{nativeCol:this.nativeCol,nativeColOff:this.nativeColOff,nativeRow:this.nativeRow,nativeRowOff:this.nativeRowOff}}set model(s){this.nativeCol=s.nativeCol,this.nativeColOff=s.nativeColOff,this.nativeRow=s.nativeRow,this.nativeRowOff=s.nativeRowOff}}d.exports=c},{"../utils/col-cache":19}],3:[function(e,d,m){const f=e("../utils/col-cache"),c=e("../utils/under-dash"),u=e("./enums"),{slideFormula:s}=e("../utils/shared-formula"),t=e("./note");class n{constructor(B,j,X){if(!B||!j)throw new Error("A Cell needs a Row");this._row=B,this._column=j,f.validateAddress(X),this._address=X,this._value=I.create(n.Types.Null,this),this.style=this._mergeStyle(B.style,j.style,{}),this._mergeCount=0}get worksheet(){return this._row.worksheet}get workbook(){return this._row.worksheet.workbook}destroy(){delete this.style,delete this._value,delete this._row,delete this._column,delete this._address}get numFmt(){return this.style.numFmt}set numFmt(B){this.style.numFmt=B}get font(){return this.style.font}set font(B){this.style.font=B}get alignment(){return this.style.alignment}set alignment(B){this.style.alignment=B}get border(){return this.style.border}set border(B){this.style.border=B}get fill(){return this.style.fill}set fill(B){this.style.fill=B}get protection(){return this.style.protection}set protection(B){this.style.protection=B}_mergeStyle(B,j,X){const G=B&&B.numFmt||j&&j.numFmt;G&&(X.numFmt=G);const V=B&&B.font||j&&j.font;V&&(X.font=V);const J=B&&B.alignment||j&&j.alignment;J&&(X.alignment=J);const H=B&&B.border||j&&j.border;H&&(X.border=H);const M=B&&B.fill||j&&j.fill;M&&(X.fill=M);const T=B&&B.protection||j&&j.protection;return T&&(X.protection=T),X}get address(){return this._address}get row(){return this._row.number}get col(){return this._column.number}get $col$row(){return`$${this._column.letter}$${this.row}`}get type(){return this._value.type}get effectiveType(){return this._value.effectiveType}toCsvString(){return this._value.toCsvString()}addMergeRef(){this._mergeCount++}releaseMergeRef(){this._mergeCount--}get isMerged(){return this._mergeCount>0||this.type===n.Types.Merge}merge(B,j){this._value.release(),this._value=I.create(n.Types.Merge,this,B),j||(this.style=B.style)}unmerge(){this.type===n.Types.Merge&&(this._value.release(),this._value=I.create(n.Types.Null,this),this.style=this._mergeStyle(this._row.style,this._column.style,{}))}isMergedTo(B){return this._value.type!==n.Types.Merge?!1:this._value.isMergedTo(B)}get master(){return this.type===n.Types.Merge?this._value.master:this}get isHyperlink(){return this._value.type===n.Types.Hyperlink}get hyperlink(){return this._value.hyperlink}get value(){return this._value.value}set value(B){if(this.type===n.Types.Merge){this._value.master.value=B;return}this._value.release(),this._value=I.create(I.getType(B),this,B)}get note(){return this._comment&&this._comment.note}set note(B){this._comment=new t(B)}get text(){return this._value.toString()}get html(){return c.escapeHtml(this.text)}toString(){return this.text}_upgradeToHyperlink(B){this.type===n.Types.String&&(this._value=I.create(n.Types.Hyperlink,this,{text:this._value.value,hyperlink:B}))}get formula(){return this._value.formula}get result(){return this._value.result}get formulaType(){return this._value.formulaType}get fullAddress(){const{worksheet:B}=this._row;return{sheetName:B.name,address:this.address,row:this.row,col:this.col}}get name(){return this.names[0]}set name(B){this.names=[B]}get names(){return this.workbook.definedNames.getNamesEx(this.fullAddress)}set names(B){const{definedNames:j}=this.workbook;j.removeAllNames(this.fullAddress),B.forEach(X=>{j.addEx(this.fullAddress,X)})}addName(B){this.workbook.definedNames.addEx(this.fullAddress,B)}removeName(B){this.workbook.definedNames.removeEx(this.fullAddress,B)}removeAllNames(){this.workbook.definedNames.removeAllNames(this.fullAddress)}get _dataValidations(){return this.worksheet.dataValidations}get dataValidation(){return this._dataValidations.find(this.address)}set dataValidation(B){this._dataValidations.add(this.address,B)}get model(){const{model:B}=this._value;return B.style=this.style,this._comment&&(B.comment=this._comment.model),B}set model(B){if(this._value.release(),this._value=I.create(B.type,this),this._value.model=B,B.comment)switch(B.comment.type){case"note":this._comment=t.fromModel(B.comment);break}B.style?this.style=B.style:this.style={}}}n.Types=u.ValueType;class r{constructor(B){this.model={address:B.address,type:n.Types.Null}}get value(){return null}set value(B){}get type(){return n.Types.Null}get effectiveType(){return n.Types.Null}get address(){return this.model.address}set address(B){this.model.address=B}toCsvString(){return""}release(){}toString(){return""}}class i{constructor(B,j){this.model={address:B.address,type:n.Types.Number,value:j}}get value(){return this.model.value}set value(B){this.model.value=B}get type(){return n.Types.Number}get effectiveType(){return n.Types.Number}get address(){return this.model.address}set address(B){this.model.address=B}toCsvString(){return this.model.value.toString()}release(){}toString(){return this.model.value.toString()}}class o{constructor(B,j){this.model={address:B.address,type:n.Types.String,value:j}}get value(){return this.model.value}set value(B){this.model.value=B}get type(){return n.Types.String}get effectiveType(){return n.Types.String}get address(){return this.model.address}set address(B){this.model.address=B}toCsvString(){return`"${this.model.value.replace(/"/g,'""')}"`}release(){}toString(){return this.model.value}}class l{constructor(B,j){this.model={address:B.address,type:n.Types.String,value:j}}get value(){return this.model.value}set value(B){this.model.value=B}toString(){return this.model.value.richText.map(B=>B.text).join("")}get type(){return n.Types.RichText}get effectiveType(){return n.Types.RichText}get address(){return this.model.address}set address(B){this.model.address=B}toCsvString(){return`"${this.text.replace(/"/g,'""')}"`}release(){}}class a{constructor(B,j){this.model={address:B.address,type:n.Types.Date,value:j}}get value(){return this.model.value}set value(B){this.model.value=B}get type(){return n.Types.Date}get effectiveType(){return n.Types.Date}get address(){return this.model.address}set address(B){this.model.address=B}toCsvString(){return this.model.value.toISOString()}release(){}toString(){return this.model.value.toString()}}class g{constructor(B,j){this.model={address:B.address,type:n.Types.Hyperlink,text:j?j.text:void 0,hyperlink:j?j.hyperlink:void 0},j&&j.tooltip&&(this.model.tooltip=j.tooltip)}get value(){const B={text:this.model.text,hyperlink:this.model.hyperlink};return this.model.tooltip&&(B.tooltip=this.model.tooltip),B}set value(B){this.model={text:B.text,hyperlink:B.hyperlink},B.tooltip&&(this.model.tooltip=B.tooltip)}get text(){return this.model.text}set text(B){this.model.text=B}get hyperlink(){return this.model.hyperlink}set hyperlink(B){this.model.hyperlink=B}get type(){return n.Types.Hyperlink}get effectiveType(){return n.Types.Hyperlink}get address(){return this.model.address}set address(B){this.model.address=B}toCsvString(){return this.model.hyperlink}release(){}toString(){return this.model.text}}class v{constructor(B,j){this.model={address:B.address,type:n.Types.Merge,master:j?j.address:void 0},this._master=j,j&&j.addMergeRef()}get value(){return this._master.value}set value(B){B instanceof n?(this._master&&this._master.releaseMergeRef(),B.addMergeRef(),this._master=B):this._master.value=B}isMergedTo(B){return B===this._master}get master(){return this._master}get type(){return n.Types.Merge}get effectiveType(){return this._master.effectiveType}get address(){return this.model.address}set address(B){this.model.address=B}toCsvString(){return""}release(){this._master.releaseMergeRef()}toString(){return this.value.toString()}}class h{constructor(B,j){this.cell=B,this.model={address:B.address,type:n.Types.Formula,shareType:j?j.shareType:void 0,ref:j?j.ref:void 0,formula:j?j.formula:void 0,sharedFormula:j?j.sharedFormula:void 0,result:j?j.result:void 0}}_copyModel(B){const j={},X=G=>{const V=B[G];V&&(j[G]=V)};return X("formula"),X("result"),X("ref"),X("shareType"),X("sharedFormula"),j}get value(){return this._copyModel(this.model)}set value(B){this.model=this._copyModel(B)}validate(B){switch(I.getType(B)){case n.Types.Null:case n.Types.String:case n.Types.Number:case n.Types.Date:break;case n.Types.Hyperlink:case n.Types.Formula:default:throw new Error("Cannot process that type of result value")}}get dependencies(){const B=this.formula.match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\d{1,4}:[A-Z]{1,3}\d{1,4}/g),j=this.formula.replace(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\d{1,4}:[A-Z]{1,3}\d{1,4}/g,"").match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\d{1,4}/g);return{ranges:B,cells:j}}get formula(){return this.model.formula||this._getTranslatedFormula()}set formula(B){this.model.formula=B}get formulaType(){return this.model.formula?u.FormulaType.Master:this.model.sharedFormula?u.FormulaType.Shared:u.FormulaType.None}get result(){return this.model.result}set result(B){this.model.result=B}get type(){return n.Types.Formula}get effectiveType(){const B=this.model.result;return B==null?u.ValueType.Null:B instanceof String||typeof B=="string"?u.ValueType.String:typeof B=="number"?u.ValueType.Number:B instanceof Date?u.ValueType.Date:B.text&&B.hyperlink?u.ValueType.Hyperlink:B.formula?u.ValueType.Formula:u.ValueType.Null}get address(){return this.model.address}set address(B){this.model.address=B}_getTranslatedFormula(){if(!this._translatedFormula&&this.model.sharedFormula){const{worksheet:B}=this.cell,j=B.findCell(this.model.sharedFormula);this._translatedFormula=j&&s(j.formula,j.address,this.model.address)}return this._translatedFormula}toCsvString(){return`${this.model.result||""}`}release(){}toString(){return this.model.result?this.model.result.toString():""}}class w{constructor(B,j){this.model={address:B.address,type:n.Types.SharedString,value:j}}get value(){return this.model.value}set value(B){this.model.value=B}get type(){return n.Types.SharedString}get effectiveType(){return n.Types.SharedString}get address(){return this.model.address}set address(B){this.model.address=B}toCsvString(){return this.model.value.toString()}release(){}toString(){return this.model.value.toString()}}class y{constructor(B,j){this.model={address:B.address,type:n.Types.Boolean,value:j}}get value(){return this.model.value}set value(B){this.model.value=B}get type(){return n.Types.Boolean}get effectiveType(){return n.Types.Boolean}get address(){return this.model.address}set address(B){this.model.address=B}toCsvString(){return this.model.value?1:0}release(){}toString(){return this.model.value.toString()}}class S{constructor(B,j){this.model={address:B.address,type:n.Types.Error,value:j}}get value(){return this.model.value}set value(B){this.model.value=B}get type(){return n.Types.Error}get effectiveType(){return n.Types.Error}get address(){return this.model.address}set address(B){this.model.address=B}toCsvString(){return this.toString()}release(){}toString(){return this.model.value.error.toString()}}class E{constructor(B,j){this.model={address:B.address,type:n.Types.String,value:JSON.stringify(j),rawValue:j}}get value(){return this.model.rawValue}set value(B){this.model.rawValue=B,this.model.value=JSON.stringify(B)}get type(){return n.Types.String}get effectiveType(){return n.Types.String}get address(){return this.model.address}set address(B){this.model.address=B}toCsvString(){return this.model.value}release(){}toString(){return this.model.value}}const I={getType(F){return F==null?n.Types.Null:F instanceof String||typeof F=="string"?n.Types.String:typeof F=="number"?n.Types.Number:typeof F=="boolean"?n.Types.Boolean:F instanceof Date?n.Types.Date:F.text&&F.hyperlink?n.Types.Hyperlink:F.formula||F.sharedFormula?n.Types.Formula:F.richText?n.Types.RichText:F.sharedString?n.Types.SharedString:F.error?n.Types.Error:n.Types.JSON},types:[{t:n.Types.Null,f:r},{t:n.Types.Number,f:i},{t:n.Types.String,f:o},{t:n.Types.Date,f:a},{t:n.Types.Hyperlink,f:g},{t:n.Types.Formula,f:h},{t:n.Types.Merge,f:v},{t:n.Types.JSON,f:E},{t:n.Types.SharedString,f:w},{t:n.Types.RichText,f:l},{t:n.Types.Boolean,f:y},{t:n.Types.Error,f:S}].reduce((F,B)=>(F[B.t]=B.f,F),[]),create(F,B,j){const X=this.types[F];if(!X)throw new Error(`Could not create Value of type ${F}`);return new X(B,j)}};d.exports=n},{"../utils/col-cache":19,"../utils/shared-formula":23,"../utils/under-dash":26,"./enums":7,"./note":9}],4:[function(e,d,m){const f=e("../utils/under-dash"),c=e("./enums"),u=e("../utils/col-cache"),s=9;class t{constructor(r,i,o){this._worksheet=r,this._number=i,o!==!1&&(this.defn=o)}get number(){return this._number}get worksheet(){return this._worksheet}get letter(){return u.n2l(this._number)}get isCustomWidth(){return this.width!==void 0&&this.width!==s}get defn(){return{header:this._header,key:this.key,width:this.width,style:this.style,hidden:this.hidden,outlineLevel:this.outlineLevel}}set defn(r){r?(this.key=r.key,this.width=r.width!==void 0?r.width:s,this.outlineLevel=r.outlineLevel,r.style?this.style=r.style:this.style={},this.header=r.header,this._hidden=!!r.hidden):(delete this._header,delete this._key,delete this.width,this.style={},this.outlineLevel=0)}get headers(){return this._header&&this._header instanceof Array?this._header:[this._header]}get header(){return this._header}set header(r){r!==void 0?(this._header=r,this.headers.forEach((i,o)=>{this._worksheet.getCell(o+1,this.number).value=i})):this._header=void 0}get key(){return this._key}set key(r){(this._key&&this._worksheet.getColumnKey(this._key))===this&&this._worksheet.deleteColumnKey(this._key),this._key=r,r&&this._worksheet.setColumnKey(this._key,this)}get hidden(){return!!this._hidden}set hidden(r){this._hidden=r}get outlineLevel(){return this._outlineLevel||0}set outlineLevel(r){this._outlineLevel=r}get collapsed(){return!!(this._outlineLevel&&this._outlineLevel>=this._worksheet.properties.outlineLevelCol)}toString(){return JSON.stringify({key:this.key,width:this.width,headers:this.headers.length?this.headers:void 0})}equivalentTo(r){return this.width===r.width&&this.hidden===r.hidden&&this.outlineLevel===r.outlineLevel&&f.isEqual(this.style,r.style)}get isDefault(){if(this.isCustomWidth||this.hidden||this.outlineLevel)return!1;const r=this.style;return!(r&&(r.font||r.numFmt||r.alignment||r.border||r.fill||r.protection))}get headerCount(){return this.headers.length}eachCell(r,i){const o=this.number;i||(i=r,r=null),this._worksheet.eachRow(r,(l,a)=>{i(l.getCell(o),a)})}get values(){const r=[];return this.eachCell((i,o)=>{i&&i.type!==c.ValueType.Null&&(r[o]=i.value)}),r}set values(r){if(!r)return;const i=this.number;let o=0;r.hasOwnProperty("0")&&(o=1),r.forEach((l,a)=>{this._worksheet.getCell(a+o,i).value=l})}_applyStyle(r,i){return this.style[r]=i,this.eachCell(o=>{o[r]=i}),i}get numFmt(){return this.style.numFmt}set numFmt(r){this._applyStyle("numFmt",r)}get font(){return this.style.font}set font(r){this._applyStyle("font",r)}get alignment(){return this.style.alignment}set alignment(r){this._applyStyle("alignment",r)}get protection(){return this.style.protection}set protection(r){this._applyStyle("protection",r)}get border(){return this.style.border}set border(r){this._applyStyle("border",r)}get fill(){return this.style.fill}set fill(r){this._applyStyle("fill",r)}static toModel(r){const i=[];let o=null;return r&&r.forEach((l,a)=>{l.isDefault?o&&(o=null):!o||!l.equivalentTo(o)?(o={min:a+1,max:a+1,width:l.width!==void 0?l.width:s,style:l.style,isCustomWidth:l.isCustomWidth,hidden:l.hidden,outlineLevel:l.outlineLevel,collapsed:l.collapsed},i.push(o)):o.max=a+1}),i.length?i:void 0}static fromModel(r,i){i=i||[];const o=[];let l=1,a=0;for(i=i.sort(function(g,v){return g.min-v.min});a{o.removeCellEx(i)})}forEach(i){f.each(this.matrixMap,(o,l)=>{o.forEach(a=>{i(l,a)})})}getNames(i){return this.getNamesEx(c.decodeEx(i))}getNamesEx(i){return f.map(this.matrixMap,(o,l)=>o.findCellEx(i)&&l).filter(Boolean)}_explore(i,o){o.mark=!1;const{sheetName:l}=o,a=new s(o.row,o.col,o.row,o.col,l);let g,v;function h(y,S){const E=i.findCellAt(l,y,o.col);return!E||!E.mark?!1:(a[S]=y,E.mark=!1,!0)}for(v=o.row-1;h(v,"top");v--);for(v=o.row+1;h(v,"bottom");v++);function w(y,S){const E=[];for(v=a.top;v<=a.bottom;v++){const I=i.findCellAt(l,v,y);if(I&&I.mark)E.push(I);else return!1}a[S]=y;for(let I=0;I{a.mark=!0});const l=o.map(a=>a.mark&&this._explore(o,a)).filter(Boolean).map(a=>a.$shortRange);return{name:i,ranges:l}}normaliseMatrix(i,o){i.forEachInSheet(o,(l,a,g)=>{l&&(l.row!==a||l.col!==g)&&(l.row=a,l.col=g,l.address=c.n2l(g)+a)})}spliceRows(i,o,l,a){f.each(this.matrixMap,g=>{g.spliceRows(i,o,l,a),this.normaliseMatrix(g,i)})}spliceColumns(i,o,l,a){f.each(this.matrixMap,g=>{g.spliceColumns(i,o,l,a),this.normaliseMatrix(g,i)})}get model(){return f.map(this.matrixMap,(i,o)=>this.getRanges(o,i)).filter(i=>i.ranges.length)}set model(i){const o=this.matrixMap={};i.forEach(l=>{const a=o[l.name]=new u;l.ranges.forEach(g=>{t.test(g.split("!").pop()||"")&&a.addCell(g)})})}}d.exports=n},{"../utils/cell-matrix":18,"../utils/col-cache":19,"../utils/under-dash":26,"./range":10}],7:[function(e,d,m){d.exports={ValueType:{Null:0,Merge:1,Number:2,String:3,Date:4,Hyperlink:5,Formula:6,SharedString:7,RichText:8,Boolean:9,Error:10},FormulaType:{None:0,Master:1,Shared:2},RelationshipType:{None:0,OfficeDocument:1,Worksheet:2,CalcChain:3,SharedStrings:4,Styles:5,Theme:6,Hyperlink:7},DocumentType:{Xlsx:1},ReadingOrder:{LeftToRight:1,RightToLeft:2},ErrorValue:{NotApplicable:"#N/A",Ref:"#REF!",Name:"#NAME?",DivZero:"#DIV/0!",Null:"#NULL!",Value:"#VALUE!",Num:"#NUM!"}}},{}],8:[function(e,d,m){const f=e("../utils/col-cache"),c=e("./anchor");class u{constructor(t,n){this.worksheet=t,this.model=n}get model(){switch(this.type){case"background":return{type:this.type,imageId:this.imageId};case"image":return{type:this.type,imageId:this.imageId,hyperlinks:this.range.hyperlinks,range:{tl:this.range.tl.model,br:this.range.br&&this.range.br.model,ext:this.range.ext,editAs:this.range.editAs}};default:throw new Error("Invalid Image Type")}}set model(t){let{type:n,imageId:r,range:i,hyperlinks:o}=t;if(this.type=n,this.imageId=r,n==="image")if(typeof i=="string"){const l=f.decode(i);this.range={tl:new c(this.worksheet,{col:l.left,row:l.top},-1),br:new c(this.worksheet,{col:l.right,row:l.bottom},0),editAs:"oneCell"}}else this.range={tl:new c(this.worksheet,i.tl,0),br:i.br&&new c(this.worksheet,i.br,0),ext:i.ext,editAs:i.editAs,hyperlinks:o||i.hyperlinks}}}d.exports=u},{"../utils/col-cache":19,"./anchor":2}],9:[function(e,d,m){const f=e("../utils/under-dash");class c{constructor(s){this.note=s}get model(){let s=null;switch(typeof this.note){case"string":s={type:"note",note:{texts:[{text:this.note}]}};break;default:s={type:"note",note:this.note};break}return f.deepMerge({},c.DEFAULT_CONFIGS,s)}set model(s){const{note:t}=s,{texts:n}=t;n.length===1&&Object.keys(n[0]).length===1?this.note=n[0].text:this.note=t}static fromModel(s){const t=new c;return t.model=s,t}}c.DEFAULT_CONFIGS={note:{margins:{insetmode:"auto",inset:[.13,.13,.25,.25]},protection:{locked:"True",lockText:"True"},editAs:"absolute"}},d.exports=c},{"../utils/under-dash":26}],10:[function(e,d,m){const f=e("../utils/col-cache");class c{constructor(){this.decode(arguments)}setTLBR(s,t,n,r,i){if(arguments.length<4){const o=f.decodeAddress(s),l=f.decodeAddress(t);this.model={top:Math.min(o.row,l.row),left:Math.min(o.col,l.col),bottom:Math.max(o.row,l.row),right:Math.max(o.col,l.col),sheetName:n},this.setTLBR(o.row,o.col,l.row,l.col,i)}else this.model={top:Math.min(s,n),left:Math.min(t,r),bottom:Math.max(s,n),right:Math.max(t,r),sheetName:i}}decode(s){switch(s.length){case 5:this.setTLBR(s[0],s[1],s[2],s[3],s[4]);break;case 4:this.setTLBR(s[0],s[1],s[2],s[3]);break;case 3:this.setTLBR(s[0],s[1],s[2]);break;case 2:this.setTLBR(s[0],s[1]);break;case 1:{const t=s[0];if(t instanceof c)this.model={top:t.model.top,left:t.model.left,bottom:t.model.bottom,right:t.model.right,sheetName:t.sheetName};else if(t instanceof Array)this.decode(t);else if(t.top&&t.left&&t.bottom&&t.right)this.model={top:t.top,left:t.left,bottom:t.bottom,right:t.right,sheetName:t.sheetName};else{const n=f.decodeEx(t);n.top?this.model={top:n.top,left:n.left,bottom:n.bottom,right:n.right,sheetName:n.sheetName}:this.model={top:n.row,left:n.col,bottom:n.row,right:n.col,sheetName:n.sheetName}}break}case 0:this.model={top:0,left:0,bottom:0,right:0};break;default:throw new Error(`Invalid number of arguments to _getDimensions() - ${s.length}`)}}get top(){return this.model.top||1}set top(s){this.model.top=s}get left(){return this.model.left||1}set left(s){this.model.left=s}get bottom(){return this.model.bottom||1}set bottom(s){this.model.bottom=s}get right(){return this.model.right||1}set right(s){this.model.right=s}get sheetName(){return this.model.sheetName}set sheetName(s){this.model.sheetName=s}get _serialisedSheetName(){const{sheetName:s}=this.model;return s?/^[a-zA-Z0-9]*$/.test(s)?`${s}!`:`'${s}'!`:""}expand(s,t,n,r){(!this.model.top||sthis.bottom)&&(this.bottom=n),(!this.model.right||r>this.right)&&(this.right=r)}expandRow(s){if(s){const{dimensions:t,number:n}=s;t&&this.expand(n,t.min,n,t.max)}}expandToAddress(s){const t=f.decodeEx(s);this.expand(t.row,t.col,t.row,t.col)}get tl(){return f.n2l(this.left)+this.top}get $t$l(){return`$${f.n2l(this.left)}$${this.top}`}get br(){return f.n2l(this.right)+this.bottom}get $b$r(){return`$${f.n2l(this.right)}$${this.bottom}`}get range(){return`${this._serialisedSheetName+this.tl}:${this.br}`}get $range(){return`${this._serialisedSheetName+this.$t$l}:${this.$b$r}`}get shortRange(){return this.count>1?this.range:this._serialisedSheetName+this.tl}get $shortRange(){return this.count>1?this.$range:this._serialisedSheetName+this.$t$l}get count(){return(1+this.bottom-this.top)*(1+this.right-this.left)}toString(){return this.range}intersects(s){return!(s.sheetName&&this.sheetName&&s.sheetName!==this.sheetName||s.bottomthis.bottom||s.rightthis.right)}contains(s){const t=f.decodeEx(s);return this.containsEx(t)}containsEx(s){return s.sheetName&&this.sheetName&&s.sheetName!==this.sheetName?!1:s.row>=this.top&&s.row<=this.bottom&&s.col>=this.left&&s.col<=this.right}forEachAddress(s){for(let t=this.left;t<=this.right;t++)for(let n=this.top;n<=this.bottom;n++)s(f.encodeAddress(n,t),n,t)}}d.exports=c},{"../utils/col-cache":19}],11:[function(e,d,m){const f=e("../utils/under-dash"),c=e("./enums"),u=e("../utils/col-cache"),s=e("./cell");class t{constructor(r,i){this._worksheet=r,this._number=i,this._cells=[],this.style={},this.outlineLevel=0}get number(){return this._number}get worksheet(){return this._worksheet}commit(){this._worksheet._commitRow(this)}destroy(){delete this._worksheet,delete this._cells,delete this.style}findCell(r){return this._cells[r-1]}getCellEx(r){let i=this._cells[r.col-1];if(!i){const o=this._worksheet.getColumn(r.col);i=new s(this,o,r.address),this._cells[r.col-1]=i}return i}getCell(r){if(typeof r=="string"){const i=this._worksheet.getColumnKey(r);i?r=i.number:r=u.l2n(r)}return this._cells[r-1]||this.getCellEx({address:u.encodeAddress(this._number,r),row:this._number,col:r})}splice(r,i){const o=r+i;for(var l=arguments.length,a=new Array(l>2?l-2:0),g=2;g0)for(w=h;w>=o;w--)y=this._cells[w-1],y?(S=this.getCell(w+v),S.value=y.value,S.style=y.style,S._comment=y._comment):this._cells[w+v-1]=void 0;for(w=0;w{o&&o.type!==c.ValueType.Null&&i(o,l+1)})}addPageBreak(r,i){const o=this._worksheet,l=Math.max(0,r-1)||0,a=Math.max(0,i-1)||16838,g={id:this._number,max:a,man:1};l&&(g.min=l),o.rowBreaks.push(g)}get values(){const r=[];return this._cells.forEach(i=>{i&&i.type!==c.ValueType.Null&&(r[i.col]=i.value)}),r}set values(r){if(this._cells=[],r)if(r instanceof Array){let i=0;r.hasOwnProperty("0")&&(i=1),r.forEach((o,l)=>{o!==void 0&&(this.getCellEx({address:u.encodeAddress(this._number,l+i),row:this._number,col:l+i}).value=o)})}else this._worksheet.eachColumnKey((i,o)=>{r[o]!==void 0&&(this.getCellEx({address:u.encodeAddress(this._number,i.number),row:this._number,col:i.number}).value=r[o])})}get hasValues(){return f.some(this._cells,r=>r&&r.type!==c.ValueType.Null)}get cellCount(){return this._cells.length}get actualCellCount(){let r=0;return this.eachCell(()=>{r++}),r}get dimensions(){let r=0,i=0;return this._cells.forEach(o=>{o&&o.type!==c.ValueType.Null&&((!r||r>o.col)&&(r=o.col),i0?{min:r,max:i}:null}_applyStyle(r,i){return this.style[r]=i,this._cells.forEach(o=>{o&&(o[r]=i)}),i}get numFmt(){return this.style.numFmt}set numFmt(r){this._applyStyle("numFmt",r)}get font(){return this.style.font}set font(r){this._applyStyle("font",r)}get alignment(){return this.style.alignment}set alignment(r){this._applyStyle("alignment",r)}get protection(){return this.style.protection}set protection(r){this._applyStyle("protection",r)}get border(){return this.style.border}set border(r){this._applyStyle("border",r)}get fill(){return this.style.fill}set fill(r){this._applyStyle("fill",r)}get hidden(){return!!this._hidden}set hidden(r){this._hidden=r}get outlineLevel(){return this._outlineLevel||0}set outlineLevel(r){this._outlineLevel=r}get collapsed(){return!!(this._outlineLevel&&this._outlineLevel>=this._worksheet.properties.outlineLevelRow)}get model(){const r=[];let i=0,o=0;return this._cells.forEach(l=>{if(l){const a=l.model;a&&((!i||i>l.col)&&(i=l.col),o{switch(o.type){case s.Types.Merge:break;default:{let l;if(o.address)l=u.decodeAddress(o.address);else if(i){const{row:g}=i,v=i.col+1;l={row:g,col:v,address:u.encodeAddress(g,v),$col$row:`$${u.n2l(v)}$${g}`}}i=l;const a=this.getCellEx(l);a.model=o;break}}}),r.height?this.height=r.height:delete this.height,this.hidden=r.hidden,this.outlineLevel=r.outlineLevel||0,this.style=r.style&&JSON.parse(JSON.stringify(r.style))||{}}}d.exports=t},{"../utils/col-cache":19,"../utils/under-dash":26,"./cell":3,"./enums":7}],12:[function(e,d,m){const f=e("../utils/col-cache");class c{constructor(t,n,r){this.table=t,this.column=n,this.index=r}_set(t,n){this.table.cacheState(),this.column[t]=n}get name(){return this.column.name}set name(t){this._set("name",t)}get filterButton(){return this.column.filterButton}set filterButton(t){this.column.filterButton=t}get style(){return this.column.style}set style(t){this.column.style=t}get totalsRowLabel(){return this.column.totalsRowLabel}set totalsRowLabel(t){this._set("totalsRowLabel",t)}get totalsRowFunction(){return this.column.totalsRowFunction}set totalsRowFunction(t){this._set("totalsRowFunction",t)}get totalsRowResult(){return this.column.totalsRowResult}set totalsRowResult(t){this._set("totalsRowResult",t)}get totalsRowFormula(){return this.column.totalsRowFormula}set totalsRowFormula(t){this._set("totalsRowFormula",t)}}class u{constructor(t,n){this.worksheet=t,n&&(this.table=n,this.validate(),this.store())}getFormula(t){switch(t.totalsRowFunction){case"none":return null;case"average":return`SUBTOTAL(101,${this.table.name}[${t.name}])`;case"countNums":return`SUBTOTAL(102,${this.table.name}[${t.name}])`;case"count":return`SUBTOTAL(103,${this.table.name}[${t.name}])`;case"max":return`SUBTOTAL(104,${this.table.name}[${t.name}])`;case"min":return`SUBTOTAL(105,${this.table.name}[${t.name}])`;case"stdDev":return`SUBTOTAL(106,${this.table.name}[${t.name}])`;case"var":return`SUBTOTAL(107,${this.table.name}[${t.name}])`;case"sum":return`SUBTOTAL(109,${this.table.name}[${t.name}])`;case"custom":return t.totalsRowFormula;default:throw new Error(`Invalid Totals Row Function: ${t.totalsRowFunction}`)}}get width(){return this.table.columns.length}get height(){return this.table.rows.length}get filterHeight(){return this.height+(this.table.headerRow?1:0)}get tableHeight(){return this.filterHeight+(this.table.totalsRow?1:0)}validate(){const{table:t}=this,n=(v,h,w)=>{v[h]===void 0&&(v[h]=w)};n(t,"headerRow",!0),n(t,"totalsRow",!1),n(t,"style",{}),n(t.style,"theme","TableStyleMedium2"),n(t.style,"showFirstColumn",!1),n(t.style,"showLastColumn",!1),n(t.style,"showRowStripes",!1),n(t.style,"showColumnStripes",!1);const r=(v,h)=>{if(!v)throw new Error(h)};r(t.ref,"Table must have ref"),r(t.columns,"Table must have column definitions"),r(t.rows,"Table must have row definitions"),t.tl=f.decodeAddress(t.ref);const{row:i,col:o}=t.tl;r(i>0,"Table must be on valid row"),r(o>0,"Table must be on valid col");const{width:l,filterHeight:a,tableHeight:g}=this;t.autoFilterRef=f.encode(i,o,i+a-1,o+l-1),t.tableRef=f.encode(i,o,i+g-1,o+l-1),t.columns.forEach((v,h)=>{r(v.name,`Column ${h} must have a name`),h===0?n(v,"totalsRowLabel","Total"):(n(v,"totalsRowFunction","none"),v.totalsRowFormula=this.getFormula(v))})}store(){const t=(a,g)=>{g&&Object.keys(g).forEach(v=>{a[v]=g[v]})},{worksheet:n,table:r}=this,{row:i,col:o}=r.tl;let l=0;if(r.headerRow){const a=n.getRow(i+l++);r.columns.forEach((g,v)=>{const{style:h,name:w}=g,y=a.getCell(o+v);y.value=w,t(y,h)})}if(r.rows.forEach(a=>{const g=n.getRow(i+l++);a.forEach((v,h)=>{const w=g.getCell(o+h);w.value=v,t(w,r.columns[h].style)})}),r.totalsRow){const a=n.getRow(i+l++);r.columns.forEach((g,v)=>{const h=a.getCell(o+v);v===0?h.value=g.totalsRowLabel:this.getFormula(g)?h.value={formula:g.totalsRowFormula,result:g.totalsRowResult}:h.value=null,t(h,g.style)})}}load(t){const{table:n}=this,{row:r,col:i}=n.tl;let o=0;if(n.headerRow){const l=t.getRow(r+o++);n.columns.forEach((a,g)=>{const v=l.getCell(i+g);v.value=a.name})}if(n.rows.forEach(l=>{const a=t.getRow(r+o++);l.forEach((g,v)=>{const h=a.getCell(i+v);h.value=g})}),n.totalsRow){const l=t.getRow(r+o++);n.columns.forEach((a,g)=>{const v=l.getCell(i+g);g===0?v.value=a.totalsRowLabel:this.getFormula(a)&&(v.value={formula:a.totalsRowFormula,result:a.totalsRowResult})})}}get model(){return this.table}set model(t){this.table=t}cacheState(){this._cache||(this._cache={ref:this.ref,width:this.width,tableHeight:this.tableHeight})}commit(){if(!this._cache)return;this.validate();const t=f.decodeAddress(this._cache.ref);if(this.ref!==this._cache.ref)for(let n=0;n1&&arguments[1]!==void 0?arguments[1]:1;this.cacheState(),this.table.rows.splice(t,n)}getColumn(t){const n=this.table.columns[t];return new c(this,n,t)}addColumn(t,n,r){this.cacheState(),r===void 0?(this.table.columns.push(t),this.table.rows.forEach((i,o)=>{i.push(n[o])})):(this.table.columns.splice(r,0,t),this.table.rows.forEach((i,o)=>{i.splice(r,0,n[o])}))}removeColumns(t){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1;this.cacheState(),this.table.columns.splice(t,n),this.table.rows.forEach(r=>{r.splice(t,n)})}_assign(t,n,r){this.cacheState(),t[n]=r}get ref(){return this.table.ref}set ref(t){this._assign(this.table,"ref",t)}get name(){return this.table.name}set name(t){this.table.name=t}get displayName(){return this.table.displyName||this.table.name}set displayNamename(t){this.table.displayName=t}get headerRow(){return this.table.headerRow}set headerRow(t){this._assign(this.table,"headerRow",t)}get totalsRow(){return this.table.totalsRow}set totalsRow(t){this._assign(this.table,"totalsRow",t)}get theme(){return this.table.style.name}set theme(t){this.table.style.name=t}get showFirstColumn(){return this.table.style.showFirstColumn}set showFirstColumn(t){this.table.style.showFirstColumn=t}get showLastColumn(){return this.table.style.showLastColumn}set showLastColumn(t){this.table.style.showLastColumn=t}get showRowStripes(){return this.table.style.showRowStripes}set showRowStripes(t){this.table.style.showRowStripes=t}get showColumnStripes(){return this.table.style.showColumnStripes}set showColumnStripes(t){this.table.style.showColumnStripes=t}}d.exports=u},{"../utils/col-cache":19}],13:[function(e,d,m){const f=e("./worksheet"),c=e("./defined-names"),u=e("../xlsx/xlsx"),s=e("../csv/csv");class t{constructor(){this.category="",this.company="",this.created=new Date,this.description="",this.keywords="",this.manager="",this.modified=this.created,this.properties={},this.calcProperties={},this._worksheets=[],this.subject="",this.title="",this.views=[],this.media=[],this._definedNames=new c}get xlsx(){return this._xlsx||(this._xlsx=new u(this)),this._xlsx}get csv(){return this._csv||(this._csv=new s(this)),this._csv}get nextId(){for(let r=1;r(h&&h.orderNo)>v?h.orderNo:v,0),a=Object.assign({},i,{id:o,name:r,orderNo:l+1,workbook:this}),g=new f(a);return this._worksheets[o]=g,g}removeWorksheetEx(r){delete this._worksheets[r.id]}removeWorksheet(r){const i=this.getWorksheet(r);i&&i.destroy()}getWorksheet(r){if(r===void 0)return this._worksheets.find(Boolean);if(typeof r=="number")return this._worksheets[r];if(typeof r=="string")return this._worksheets.find(i=>i&&i.name===r)}get worksheets(){return this._worksheets.slice(1).sort((r,i)=>r.orderNo-i.orderNo).filter(Boolean)}eachSheet(r){this.worksheets.forEach(i=>{r(i,i.id)})}get definedNames(){return this._definedNames}clearThemes(){this._themes=void 0}addImage(r){const i=this.media.length;return this.media.push(Object.assign({},r,{type:"image"})),i}getImage(r){return this.media[r]}get model(){return{creator:this.creator||"Unknown",lastModifiedBy:this.lastModifiedBy||"Unknown",lastPrinted:this.lastPrinted,created:this.created,modified:this.modified,properties:this.properties,worksheets:this.worksheets.map(r=>r.model),sheets:this.worksheets.map(r=>r.model).filter(Boolean),definedNames:this._definedNames.model,views:this.views,company:this.company,manager:this.manager,title:this.title,subject:this.subject,keywords:this.keywords,category:this.category,description:this.description,language:this.language,revision:this.revision,contentStatus:this.contentStatus,themes:this._themes,media:this.media,calcProperties:this.calcProperties}}set model(r){this.creator=r.creator,this.lastModifiedBy=r.lastModifiedBy,this.lastPrinted=r.lastPrinted,this.created=r.created,this.modified=r.modified,this.company=r.company,this.manager=r.manager,this.title=r.title,this.subject=r.subject,this.keywords=r.keywords,this.category=r.category,this.description=r.description,this.language=r.language,this.revision=r.revision,this.contentStatus=r.contentStatus,this.properties=r.properties,this.calcProperties=r.calcProperties,this._worksheets=[],r.worksheets.forEach(i=>{const{id:o,name:l,state:a}=i,g=r.sheets&&r.sheets.findIndex(h=>h.id===o),v=this._worksheets[o]=new f({id:o,name:l,orderNo:g,state:a,workbook:this});v.model=i}),this._definedNames.model=r.definedNames,this.views=r.views,this._themes=r.themes,this.media=r.media||[]}}d.exports=t},{"../csv/csv":1,"../xlsx/xlsx":144,"./defined-names":6,"./worksheet":14}],14:[function(e,d,m){const f=e("../utils/under-dash"),c=e("../utils/col-cache"),u=e("./range"),s=e("./row"),t=e("./column"),n=e("./enums"),r=e("./image"),i=e("./table"),o=e("./data-validations"),l=e("../utils/encryptor"),{copyStyle:a}=e("../utils/copy-style");class g{constructor(h){h=h||{},this._workbook=h.workbook,this.id=h.id,this.orderNo=h.orderNo,this.name=h.name,this.state=h.state||"visible",this._rows=[],this._columns=null,this._keys={},this._merges={},this.rowBreaks=[],this.properties=Object.assign({},{defaultRowHeight:15,dyDescent:55,outlineLevelCol:0,outlineLevelRow:0},h.properties),this.pageSetup=Object.assign({},{margins:{left:.7,right:.7,top:.75,bottom:.75,header:.3,footer:.3},orientation:"portrait",horizontalDpi:4294967295,verticalDpi:4294967295,fitToPage:!!(h.pageSetup&&(h.pageSetup.fitToWidth||h.pageSetup.fitToHeight)&&!h.pageSetup.scale),pageOrder:"downThenOver",blackAndWhite:!1,draft:!1,cellComments:"None",errors:"displayed",scale:100,fitToWidth:1,fitToHeight:1,paperSize:void 0,showRowColHeaders:!1,showGridLines:!1,firstPageNumber:void 0,horizontalCentered:!1,verticalCentered:!1,rowBreaks:null,colBreaks:null},h.pageSetup),this.headerFooter=Object.assign({},{differentFirst:!1,differentOddEven:!1,oddHeader:null,oddFooter:null,evenHeader:null,evenFooter:null,firstHeader:null,firstFooter:null},h.headerFooter),this.dataValidations=new o,this.views=h.views||[],this.autoFilter=h.autoFilter||null,this._media=[],this.sheetProtection=null,this.tables={},this.conditionalFormattings=[]}get name(){return this._name}set name(h){if(h===void 0&&(h=`sheet${this.id}`),this._name!==h){if(typeof h!="string")throw new Error("The name has to be a string.");if(h==="")throw new Error("The name can't be empty.");if(h==="History")throw new Error('The name "History" is protected. Please use a different name.');if(/[*?:/\\[\]]/.test(h))throw new Error(`Worksheet name ${h} cannot include any of the following characters: * ? : \\ / [ ]`);if(/(^')|('$)/.test(h))throw new Error(`The first or last character of worksheet name cannot be a single quotation mark: ${h}`);if(h&&h.length>31&&(console.warn(`Worksheet name ${h} exceeds 31 chars. This will be truncated`),h=h.substring(0,31)),this._workbook._worksheets.find(w=>w&&w.name.toLowerCase()===h.toLowerCase()))throw new Error(`Worksheet name already exists: ${h}`);this._name=h}}get workbook(){return this._workbook}destroy(){this._workbook.removeWorksheetEx(this)}get dimensions(){const h=new u;return this._rows.forEach(w=>{if(w){const y=w.dimensions;y&&h.expand(w.number,y.min,w.number,y.max)}}),h}get columns(){return this._columns}set columns(h){this._headerRowCount=h.reduce((S,E)=>{const I=E.header&&1||E.headers&&E.headers.length||0;return Math.max(S,I)},0);let w=1;const y=this._columns=[];h.forEach(S=>{const E=new t(this,w++,!1);y.push(E),E.defn=S})}getColumnKey(h){return this._keys[h]}setColumnKey(h,w){this._keys[h]=w}deleteColumnKey(h){delete this._keys[h]}eachColumnKey(h){f.each(this._keys,h)}getColumn(h){if(typeof h=="string"){const w=this._keys[h];if(w)return w;h=c.l2n(h)}if(this._columns||(this._columns=[]),h>this._columns.length){let w=this._columns.length+1;for(;w<=h;)this._columns.push(new t(this,w++))}return this._columns[h-1]}spliceColumns(h,w){const S=this._rows.length;for(var E=arguments.length,I=new Array(E>2?E-2:0),F=2;F0)for(let G=0;G{V.push(H[G]||null)});const J=this.getRow(G+1);J.splice.apply(J,V)}else this._rows.forEach(G=>{G&&G.splice(h,w)});const B=I.length-w,j=h+w,X=this._columns.length;if(B<0)for(let G=h+I.length;G<=X;G++)this.getColumn(G).defn=this.getColumn(G-B).defn;else if(B>0)for(let G=X;G>=j;G--)this.getColumn(G+B).defn=this.getColumn(G).defn;for(let G=h;G{h=Math.max(h,w.cellCount)}),h}get actualColumnCount(){const h=[];let w=0;return this.eachRow(y=>{y.eachCell(S=>{let{col:E}=S;h[E]||(h[E]=!0,w++)})}),w}_commitRow(){}get _lastRowNumber(){const h=this._rows;let w=h.length;for(;w>0&&h[w-1]===void 0;)w--;return w}get _nextRow(){return this._lastRowNumber+1}get lastRow(){if(this._rows.length)return this._rows[this._rows.length-1]}findRow(h){return this._rows[h-1]}findRows(h,w){return this._rows.slice(h-1,h-1+w)}get rowCount(){return this._lastRowNumber}get actualRowCount(){let h=0;return this.eachRow(()=>{h++}),h}getRow(h){let w=this._rows[h-1];return w||(w=this._rows[h-1]=new s(this,h)),w}getRows(h,w){if(w<1)return;const y=[];for(let S=h;S1&&arguments[1]!==void 0?arguments[1]:"n";const y=this._nextRow,S=this.getRow(y);return S.values=h,this._setStyleOption(y,w[0]==="i"?w:"n"),S}addRows(h){let w=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"n";const y=[];return h.forEach(S=>{y.push(this.addRow(S,w))}),y}insertRow(h,w){let y=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"n";return this.spliceRows(h,0,w),this._setStyleOption(h,y),this.getRow(h)}insertRows(h,w){let y=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"n";if(this.spliceRows(h,0,...w),y!=="n")for(let S=0;S1&&arguments[1]!==void 0?arguments[1]:"n";w[0]==="o"&&this.findRow(h+1)!==void 0?this._copyStyle(h+1,h,w[1]==="+"):w[0]==="i"&&this.findRow(h-1)!==void 0&&this._copyStyle(h-1,h,w[1]==="+")}_copyStyle(h,w){let y=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;const S=this.getRow(h),E=this.getRow(w);E.style=a(S.style),S.eachCell({includeEmpty:y},(I,F)=>{E.getCell(F).style=a(I.style)}),E.height=S.height}duplicateRow(h,w){let y=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;const S=this._rows[h-1],E=new Array(w).fill(S.values);this.spliceRows(h+1,y?0:w,...E);for(let I=0;I{F.getCell(j).style=B.style})}}spliceRows(h,w){const y=h+w;for(var S=arguments.length,E=new Array(S>2?S-2:0),I=2;I{V.getCell(H).style=J.style}),this._rows[X-1]=void 0}else this._rows[X+B-1]=void 0;else if(B>0)for(X=j;X>=y;X--)if(G=this._rows[X-1],G){const V=this.getRow(X+B);V.values=G.values,V.style=G.style,V.height=G.height,G.eachCell({includeEmpty:!0},(J,H)=>{if(V.getCell(H).style=J.style,J._value.constructor.name==="MergeValue"){const M=this.getRow(J._row._number+F).getCell(H),T=J._value._master,_=this.getRow(T._row._number+F).getCell(T._column._number);M.merge(_)}})}else this._rows[X+B-1]=void 0;for(X=0;X{y&&y.hasValues&&w(y,y.number)})}getSheetValues(){const h=[];return this._rows.forEach(w=>{w&&(h[w.number]=w.values)}),h}findCell(h,w){const y=c.getAddress(h,w),S=this._rows[y.row-1];return S?S.findCell(y.col):void 0}getCell(h,w){const y=c.getAddress(h,w);return this.getRow(y.row).getCellEx(y)}mergeCells(){for(var h=arguments.length,w=new Array(h),y=0;y{if(S.intersects(h))throw new Error("Cannot merge already merged cells")});const y=this.getCell(h.top,h.left);for(let S=h.top;S<=h.bottom;S++)for(let E=h.left;E<=h.right;E++)(S>h.top||E>h.left)&&this.getCell(S,E).merge(y,w);this._merges[y.address]=h}_unMergeMaster(h){const w=this._merges[h.address];if(w){for(let y=w.top;y<=w.bottom;y++)for(let S=w.left;S<=w.right;S++)this.getCell(y,S).unmerge();delete this._merges[h.address]}}get hasMerges(){return f.some(this._merges,Boolean)}unMergeCells(){for(var h=arguments.length,w=new Array(h),y=0;y3&&arguments[3]!==void 0?arguments[3]:"shared";const E=c.decode(h),{top:I,left:F,bottom:B,right:j}=E,X=j-F+1,G=c.encodeAddress(I,F),V=S==="shared";let J;typeof y=="function"?J=y:Array.isArray(y)?Array.isArray(y[0])?J=(M,T)=>y[M-I][T-F]:J=(M,T)=>y[(M-I)*X+(T-F)]:J=()=>{};let H=!0;for(let M=I;M<=B;M++)for(let T=F;T<=j;T++)H?(this.getCell(M,T).value={shareType:S,formula:w,ref:h,result:J(M,T)},H=!1):this.getCell(M,T).value=V?{sharedFormula:G,result:J(M,T)}:J(M,T)}addImage(h,w){const y={type:"image",imageId:h,range:w};this._media.push(new r(this,y))}getImages(){return this._media.filter(h=>h.type==="image")}addBackgroundImage(h){const w={type:"background",imageId:h};this._media.push(new r(this,w))}getBackgroundImageId(){const h=this._media.find(w=>w.type==="background");return h&&h.imageId}protect(h,w){return new Promise(y=>{this.sheetProtection={sheet:!0},w&&"spinCount"in w&&(w.spinCount=Number.isFinite(w.spinCount)?Math.round(Math.max(0,w.spinCount)):1e5),h&&(this.sheetProtection.algorithmName="SHA-512",this.sheetProtection.saltValue=l.randomBytes(16).toString("base64"),this.sheetProtection.spinCount=w&&"spinCount"in w?w.spinCount:1e5,this.sheetProtection.hashValue=l.convertPasswordToHash(h,"SHA512",this.sheetProtection.saltValue,this.sheetProtection.spinCount)),w&&(this.sheetProtection=Object.assign(this.sheetProtection,w),!h&&"spinCount"in w&&delete this.sheetProtection.spinCount),y()})}unprotect(){this.sheetProtection=null}addTable(h){const w=new i(this,h);return this.tables[h.name]=w,w}getTable(h){return this.tables[h]}removeTable(h){delete this.tables[h]}getTables(){return Object.values(this.tables)}addConditionalFormatting(h){this.conditionalFormattings.push(h)}removeConditionalFormatting(h){typeof h=="number"?this.conditionalFormattings.splice(h,1):h instanceof Function?this.conditionalFormattings=this.conditionalFormattings.filter(h):this.conditionalFormattings=[]}get tabColor(){return console.trace("worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor"),this.properties.tabColor}set tabColor(h){console.trace("worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor"),this.properties.tabColor=h}get model(){const h={id:this.id,name:this.name,dataValidations:this.dataValidations.model,properties:this.properties,state:this.state,pageSetup:this.pageSetup,headerFooter:this.headerFooter,rowBreaks:this.rowBreaks,views:this.views,autoFilter:this.autoFilter,media:this._media.map(S=>S.model),sheetProtection:this.sheetProtection,tables:Object.values(this.tables).map(S=>S.model),conditionalFormattings:this.conditionalFormattings};h.cols=t.toModel(this.columns);const w=h.rows=[],y=h.dimensions=new u;return this._rows.forEach(S=>{const E=S&&S.model;E&&(y.expand(E.number,E.min,E.number,E.max),w.push(E))}),h.merges=[],f.each(this._merges,S=>{h.merges.push(S.range)}),h}_parseRows(h){this._rows=[],h.rows.forEach(w=>{const y=new s(this,w.number);this._rows[y.number-1]=y,y.model=w})}_parseMergeCells(h){f.each(h.mergeCells,w=>{this.mergeCellsWithoutStyle(w)})}set model(h){this.name=h.name,this._columns=t.fromModel(this,h.cols),this._parseRows(h),this._parseMergeCells(h),this.dataValidations=new o(h.dataValidations),this.properties=h.properties,this.pageSetup=h.pageSetup,this.headerFooter=h.headerFooter,this.views=h.views,this.autoFilter=h.autoFilter,this._media=h.media.map(w=>new r(this,w)),this.sheetProtection=h.sheetProtection,this.tables=h.tables.reduce((w,y)=>{const S=new i;return S.model=y,w[y.name]=S,w},{}),this.conditionalFormattings=h.conditionalFormattings}}d.exports=g},{"../utils/col-cache":19,"../utils/copy-style":20,"../utils/encryptor":21,"../utils/under-dash":26,"./column":4,"./data-validations":5,"./enums":7,"./image":8,"./range":10,"./row":11,"./table":12}],15:[function(e,d,m){e("core-js/modules/es.promise"),e("core-js/modules/es.promise.finally"),e("core-js/modules/es.object.assign"),e("core-js/modules/es.object.keys"),e("core-js/modules/es.object.values"),e("core-js/modules/es.symbol"),e("core-js/modules/es.symbol.async-iterator"),e("core-js/modules/es.array.iterator"),e("core-js/modules/es.array.includes"),e("core-js/modules/es.array.find-index"),e("core-js/modules/es.array.find"),e("core-js/modules/es.string.from-code-point"),e("core-js/modules/es.string.includes"),e("core-js/modules/es.number.is-nan"),e("regenerator-runtime/runtime");const f={Workbook:e("./doc/workbook")},c=e("./doc/enums");Object.keys(c).forEach(u=>{f[u]=c[u]}),d.exports=f},{"./doc/enums":7,"./doc/workbook":13,"core-js/modules/es.array.find":359,"core-js/modules/es.array.find-index":358,"core-js/modules/es.array.includes":360,"core-js/modules/es.array.iterator":361,"core-js/modules/es.number.is-nan":363,"core-js/modules/es.object.assign":364,"core-js/modules/es.object.keys":366,"core-js/modules/es.object.values":367,"core-js/modules/es.promise":372,"core-js/modules/es.promise.finally":371,"core-js/modules/es.string.from-code-point":376,"core-js/modules/es.string.includes":377,"core-js/modules/es.symbol":381,"core-js/modules/es.symbol.async-iterator":378,"regenerator-runtime/runtime":492}],16:[function(e,d,m){const f=typeof TextDecoder>"u"?null:new TextDecoder("utf-8");function c(u){return typeof u=="string"?u:f?f.decode(u):u.toString()}m.bufferToString=c},{}],17:[function(e,d,m){const f=typeof TextEncoder>"u"?null:new TextEncoder("utf-8"),{Buffer:c}=e("buffer");function u(s){return typeof s!="string"?s:f?c.from(f.encode(s).buffer):c.from(s)}m.stringToBuffer=u},{buffer:220}],18:[function(e,d,m){const f=e("./under-dash"),c=e("./col-cache");class u{constructor(t){this.template=t,this.sheets={}}addCell(t){this.addCellEx(c.decodeEx(t))}getCell(t){return this.findCellEx(c.decodeEx(t),!0)}findCell(t){return this.findCellEx(c.decodeEx(t),!1)}findCellAt(t,n,r){const i=this.sheets[t],o=i&&i[n];return o&&o[r]}addCellEx(t){if(t.top)for(let n=t.top;n<=t.bottom;n++)for(let r=t.left;r<=t.right;r++)this.getCellAt(t.sheetName,n,r);else this.findCellEx(t,!0)}getCellEx(t){return this.findCellEx(t,!0)}findCellEx(t,n){const r=this.findSheet(t,n),i=this.findSheetRow(r,t,n);return this.findRowCell(i,t,n)}getCellAt(t,n,r){const i=this.sheets[t]||(this.sheets[t]=[]),o=i[n]||(i[n]=[]);return o[r]||(o[r]={sheetName:t,address:c.n2l(r)+n,row:n,col:r})}removeCellEx(t){const n=this.findSheet(t);if(!n)return;const r=this.findSheetRow(n,t);r&&delete r[t.col]}forEachInSheet(t,n){const r=this.sheets[t];r&&r.forEach((i,o)=>{i&&i.forEach((l,a)=>{l&&n(l,o,a)})})}forEach(t){f.each(this.sheets,(n,r)=>{this.forEachInSheet(r,t)})}map(t){const n=[];return this.forEach(r=>{n.push(t(r))}),n}findSheet(t,n){const r=t.sheetName;if(this.sheets[r])return this.sheets[r];if(n)return this.sheets[r]=[]}findSheetRow(t,n,r){const{row:i}=n;if(t&&t[i])return t[i];if(r)return t[i]=[]}findRowCell(t,n,r){const{col:i}=n;if(t&&t[i])return t[i];if(r)return t[i]=this.template?Object.assign(n,JSON.parse(JSON.stringify(this.template))):n}spliceRows(t,n,r,i){const o=this.sheets[t];if(o){const l=[];for(let a=0;a{a.splice(n,r,...l)})}}}d.exports=u},{"./col-cache":19,"./under-dash":26}],19:[function(e,d,m){const f=/^[A-Z]+\d+$/,c={_dictionary:["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"],_l2nFill:0,_l2n:{},_n2l:[],_level(u){return u<=26?1:u<=676?2:3},_fill(u){let s,t,n,r,i,o=1;if(u>=4)throw new Error("Out of bounds. Excel supports columns from 1 to 16384");if(this._l2nFill<1&&u>=1){for(;o<=26;)s=this._dictionary[o-1],this._n2l[o]=s,this._l2n[s]=o,o++;this._l2nFill=1}if(this._l2nFill<2&&u>=2){for(o=27;o<=702;)t=o-27,n=t%26,r=Math.floor(t/26),s=this._dictionary[r]+this._dictionary[n],this._n2l[o]=s,this._l2n[s]=o,o++;this._l2nFill=2}if(this._l2nFill<3&&u>=3){for(o=703;o<=16384;)t=o-703,n=t%26,r=Math.floor(t/26)%26,i=Math.floor(t/676),s=this._dictionary[i]+this._dictionary[r]+this._dictionary[n],this._n2l[o]=s,this._l2n[s]=o,o++;this._l2nFill=3}},l2n(u){if(this._l2n[u]||this._fill(u.length),!this._l2n[u])throw new Error(`Out of bounds. Invalid column letter: ${u}`);return this._l2n[u]},n2l(u){if(u<1||u>16384)throw new Error(`${u} is out of bounds. Excel supports columns from 1 to 16384`);return this._n2l[u]||this._fill(this._level(u)),this._n2l[u]},_hash:{},validateAddress(u){if(!f.test(u))throw new Error(`Invalid Address: ${u}`);return!0},decodeAddress(u){const s=u.length<5&&this._hash[u];if(s)return s;let t=!1,n="",r=0,i=!1,o="",l=0;for(let g=0,v;g=65&&v<=90)t=!0,n+=u[g],r=r*26+v-64;else if(v>=48&&v<=57)i=!0,o+=u[g],l=l*10+v-48;else if(i&&t&&v!==36)break;if(!t)r=void 0;else if(r>16384)throw new Error(`Out of bounds. Invalid column letter: ${n}`);i||(l=void 0),u=n+o;const a={address:u,col:r,row:l,$col$row:`$${n}$${o}`};return r<=100&&l<=100&&(this._hash[u]=a,this._hash[a.$col$row]=a),a},getAddress(u,s){if(s){const t=this.n2l(s)+u;return this.decodeAddress(t)}return this.decodeAddress(u)},decode(u){const s=u.split(":");if(s.length===2){const t=this.decodeAddress(s[0]),n=this.decodeAddress(s[1]),r={top:Math.min(t.row,n.row),left:Math.min(t.col,n.col),bottom:Math.max(t.row,n.row),right:Math.max(t.col,n.col)};return r.tl=this.n2l(r.left)+r.top,r.br=this.n2l(r.right)+r.bottom,r.dimensions=`${r.tl}:${r.br}`,r}return this.decodeAddress(u)},decodeEx(u){const s=u.match(/(?:(?:(?:'((?:[^']|'')*)')|([^'^ !]*))!)?(.*)/),t=s[1]||s[2],n=s[3],r=n.split(":");if(r.length>1){let o=this.decodeAddress(r[0]),l=this.decodeAddress(r[1]);const a=Math.min(o.row,l.row),g=Math.min(o.col,l.col),v=Math.max(o.row,l.row),h=Math.max(o.col,l.col);return o=this.n2l(g)+a,l=this.n2l(h)+v,{top:a,left:g,bottom:v,right:h,sheetName:t,tl:{address:o,col:g,row:a,$col$row:`$${this.n2l(g)}$${a}`,sheetName:t},br:{address:l,col:h,row:v,$col$row:`$${this.n2l(h)}$${v}`,sheetName:t},dimensions:`${o}:${l}`}}if(n.startsWith("#"))return t?{sheetName:t,error:n}:{error:n};const i=this.decodeAddress(n);return t?{sheetName:t,...i}:i},encodeAddress(u,s){return c.n2l(s)+u},encode(){switch(arguments.length){case 2:return c.encodeAddress(arguments[0],arguments[1]);case 4:return`${c.encodeAddress(arguments[0],arguments[1])}:${c.encodeAddress(arguments[2],arguments[3])}`;default:throw new Error("Can only encode with 2 or 4 arguments")}},inRange(u,s){const[t,n,,r,i]=u,[o,l]=s;return o>=t&&o<=r&&l>=n&&l<=i}};d.exports=c},{}],20:[function(e,d,m){const f=(t,n)=>({...t,...n.reduce((r,i)=>(t[i]&&(r[i]={...t[i]}),r),{})}),c=function(t,n,r){let i=arguments.length>3&&arguments[3]!==void 0?arguments[3]:[];t[r]&&(n[r]=f(t[r],i))},u=t=>Object.keys(t).length===0,s=t=>{if(!t)return t;if(u(t))return{};const n={...t};return c(t,n,"font",["color"]),c(t,n,"alignment"),c(t,n,"protection"),t.border&&(c(t,n,"border"),c(t.border,n.border,"top",["color"]),c(t.border,n.border,"left",["color"]),c(t.border,n.border,"bottom",["color"]),c(t.border,n.border,"right",["color"]),c(t.border,n.border,"diagonal",["color"])),t.fill&&(c(t,n,"fill",["fgColor","bgColor","center"]),t.fill.stops&&(n.fill.stops=t.fill.stops.map(r=>f(r,["color"])))),n};m.copyStyle=s},{}],21:[function(e,d,m){(function(f){(function(){const c=e("crypto"),u={hash(s){const t=c.createHash(s);for(var n=arguments.length,r=new Array(n>1?n-1:0),i=1;i{n=i});let r=[];t.on("opentag",i=>r.push({eventType:"opentag",value:i})),t.on("text",i=>r.push({eventType:"text",value:i})),t.on("closetag",i=>r.push({eventType:"closetag",value:i}));for await(const i of s){if(t.write(u(i)),n)throw n;yield r,r=[]}}},{"./browser-buffer-decode":16,"readable-stream":491,saxes:496}],23:[function(e,d,m){const f=e("./col-cache"),c=/(([a-z_\-0-9]*)!)?([a-z0-9_$]{2,})([(])?/gi,u=/^([$])?([a-z]+)([$])?([1-9][0-9]*)$/i;function s(t,n,r){const i=f.decode(n),o=f.decode(r);return t.replace(c,(l,a,g,v,h)=>{if(h)return l;const w=u.exec(v);if(w){const y=w[1],S=w[2].toUpperCase(),E=w[3],I=w[4];if(S.length>3||S.length===3&&S>"XFD")return l;let F=f.l2n(S),B=parseInt(I,10);return y||(F+=o.col-i.col),E||(B+=o.row-i.row),(a||"")+(y||"")+f.n2l(F)+(E||"")+B}return l})}d.exports={slideFormula:s}},{"./col-cache":19}],24:[function(e,d,m){(function(f,c){(function(){const u=e("readable-stream"),s=e("./utils"),t=e("./string-buf");class n{constructor(g,v){this._data=g,this._encoding=v}get length(){return this.toBuffer().length}copy(g,v,h,w){return this.toBuffer().copy(g,v,h,w)}toBuffer(){return this._buffer||(this._buffer=c.from(this._data,this._encoding)),this._buffer}}class r{constructor(g){this._data=g}get length(){return this._data.length}copy(g,v,h,w){return this._data._buf.copy(g,v,h,w)}toBuffer(){return this._data.toBuffer()}}class i{constructor(g){this._data=g}get length(){return this._data.length}copy(g,v,h,w){this._data.copy(g,v,h,w)}toBuffer(){return this._data}}class o{constructor(g){this.size=g,this.buffer=c.alloc(g),this.iRead=0,this.iWrite=0}toBuffer(){if(this.iRead===0&&this.iWrite===this.size)return this.buffer;const g=c.alloc(this.iWrite-this.iRead);return this.buffer.copy(g,0,this.iRead,this.iWrite),g}get length(){return this.iWrite-this.iRead}get eod(){return this.iRead===this.iWrite}get full(){return this.iWrite===this.size}read(g){let v;return g===0?null:g===void 0||g>=this.length?(v=this.toBuffer(),this.iRead=this.iWrite,v):(v=c.alloc(g),this.buffer.copy(v,0,this.iRead,g),this.iRead+=g,v)}write(g,v,h){const w=Math.min(h,this.size-this.iWrite);return g.copy(this.buffer,this.iWrite,v,v+w),this.iWrite+=w,w}}const l=function(a){a=a||{},this.bufSize=a.bufSize||1024*1024,this.buffers=[],this.batch=a.batch||!1,this.corked=!1,this.inPos=0,this.outPos=0,this.pipes=[],this.paused=!1,this.encoding=null};s.inherits(l,u.Duplex,{toBuffer(){switch(this.buffers.length){case 0:return null;case 1:return this.buffers[0].toBuffer();default:return c.concat(this.buffers.map(a=>a.toBuffer()))}},_getWritableBuffer(){if(this.buffers.length){const g=this.buffers[this.buffers.length-1];if(!g.full)return g}const a=new o(this.bufSize);return this.buffers.push(a),a},async _pipe(a){const g=function(v){return new Promise(h=>{v.write(a.toBuffer(),()=>{h()})})};await Promise.all(this.pipes.map(g))},_writeToBuffers(a){let g=0;const v=a.length;for(;g1;)this._pipe(this.buffers.shift());else this.corked?(this._writeToBuffers(h),f.nextTick(v)):(await this._pipe(h),v());else this.paused||this.emit("data",h.toBuffer()),this._writeToBuffers(h),this.emit("readable");return!0},cork(){this.corked=!0},_flush(){if(this.pipes.length)for(;this.buffers.length;)this._pipe(this.buffers.shift())},uncork(){this.corked=!1,this._flush()},end(a,g,v){const h=w=>{w?v(w):(this._flush(),this.pipes.forEach(y=>{y.end()}),this.emit("finish"))};a?this.write(a,g,h):h()},read(a){let g;if(a){for(g=[];a&&this.buffers.length&&!this.buffers[0].eod;){const v=this.buffers[0],h=v.read(a);a-=h.length,g.push(h),v.eod&&v.full&&this.buffers.shift()}return c.concat(g)}return g=this.buffers.map(v=>v.toBuffer()).filter(Boolean),this.buffers=[],c.concat(g)},setEncoding(a){this.encoding=a},pause(){this.paused=!0},resume(){this.paused=!1},isPaused(){return!!this.paused},pipe(a){this.pipes.push(a),!this.paused&&this.buffers.length&&this.end()},unpipe(a){this.pipes=this.pipes.filter(g=>g!==a)},unshift(){throw new Error("Not Implemented")},wrap(){throw new Error("Not Implemented")}}),d.exports=l}).call(this)}).call(this,e("_process"),e("buffer").Buffer)},{"./string-buf":25,"./utils":27,_process:467,buffer:220,"readable-stream":491}],25:[function(e,d,m){(function(f){(function(){class c{constructor(s){this._buf=f.alloc(s&&s.size||16384),this._encoding=s&&s.encoding||"utf8",this._inPos=0,this._buffer=void 0}get length(){return this._inPos}get capacity(){return this._buf.length}get buffer(){return this._buf}toBuffer(){return this._buffer||(this._buffer=f.alloc(this.length),this._buf.copy(this._buffer,0,0,this.length)),this._buffer}reset(s){s=s||0,this._buffer=void 0,this._inPos=s}_grow(s){let t=this._buf.length*2;for(;t=this._buf.length-4;)this._grow(this._inPos+s.length),t=this._inPos+this._buf.write(s,this._inPos,this._encoding);this._inPos=t}addStringBuf(s){s.length&&(this._buffer=void 0,this.length+s.length>this.capacity&&this._grow(this.length+s.length),s._buf.copy(this._buf,this._inPos,0,s.length),this._inPos+=s.length)}}d.exports=c}).call(this)}).call(this,e("buffer").Buffer)},{buffer:220}],26:[function(e,d,m){const{toString:f}=Object.prototype,c=/["&<>]/,u={each:function(t,n){t&&(Array.isArray(t)?t.forEach(n):Object.keys(t).forEach(r=>{n(t[r],r)}))},some:function(t,n){return t?Array.isArray(t)?t.some(n):Object.keys(t).some(r=>n(t[r],r)):!1},every:function(t,n){return t?Array.isArray(t)?t.every(n):Object.keys(t).every(r=>n(t[r],r)):!0},map:function(t,n){return t?Array.isArray(t)?t.map(n):Object.keys(t).map(r=>n(t[r],r)):[]},keyBy(s,t){return s.reduce((n,r)=>(n[r[t]]=r,n),{})},isEqual:function(t,n){const r=typeof t,i=typeof n,o=Array.isArray(t),l=Array.isArray(n);let a;if(r!==i)return!1;switch(typeof t){case"object":if(o||l)return o&&l?t.length===n.length&&t.every((g,v)=>{const h=n[v];return u.isEqual(g,h)}):!1;if(t===null||n===null)return t===n;if(a=Object.keys(t),Object.keys(n).length!==a.length)return!1;for(const g of a)if(!n.hasOwnProperty(g))return!1;return u.every(t,(g,v)=>{const h=n[v];return u.isEqual(g,h)});default:return t===n}},escapeHtml(s){const t=c.exec(s);if(!t)return s;let n="",r="",i=0,o=t.index;for(;o":r=">";break;default:continue}i!==o&&(n+=s.substring(i,o)),i=o+1,n+=r}return i!==o?n+s.substring(i,o):n},strcmp(s,t){return st?1:0},isUndefined(s){return f.call(s)==="[object Undefined]"},isObject(s){return f.call(s)==="[object Object]"},deepMerge(){const s=arguments[0]||{},{length:t}=arguments;let n,r,i;function o(l,a){n=s[a],i=Array.isArray(l),u.isObject(l)||i?(i?(i=!1,r=n&&Array.isArray(n)?n:[]):r=n&&u.isObject(n)?n:{},s[a]=u.deepMerge(r,l)):u.isUndefined(l)||(s[a]=l)}for(let l=0;l{Object.defineProperty(r,g,Object.getOwnPropertyDescriptor(o,g))});const a={constructor:{value:r,enumerable:!1,writable:!1,configurable:!0}};l&&Object.keys(l).forEach(g=>{a[g]=Object.getOwnPropertyDescriptor(l,g)}),r.prototype=Object.create(i.prototype,a)},t=/[<>&'"\x7F\x00-\x08\x0B-\x0C\x0E-\x1F]/,n={nop(){},promiseImmediate(r){return new Promise(i=>{f.setImmediate?c(()=>{i(r)}):setTimeout(()=>{i(r)},1)})},inherits:s,dateToExcel(r,i){return 25569+r.getTime()/(24*3600*1e3)-(i?1462:0)},excelToDate(r,i){const o=Math.round((r-25569+(i?1462:0))*24*3600*1e3);return new Date(o)},parsePath(r){const i=r.lastIndexOf("/");return{path:r.substring(0,i),name:r.substring(i+1)}},getRelsPath(r){const i=n.parsePath(r);return`${i.path}/_rels/${i.name}.rels`},xmlEncode(r){const i=t.exec(r);if(!i)return r;let o="",l="",a=0,g=i.index;for(;g=11&&v!==13)){l="";break}continue}}a!==g&&(o+=r.substring(a,g)),a=g+1,l&&(o+=l)}return a!==g?o+r.substring(a,g):o},xmlDecode(r){return r.replace(/&([a-z]*);/g,i=>{switch(i){case"<":return"<";case">":return">";case"&":return"&";case"'":return"'";case""":return'"';default:return i}})},validInt(r){const i=parseInt(r,10);return Number.isNaN(i)?0:i},isDateFmt(r){return r?(r=r.replace(/\[[^\]]*]/g,""),r=r.replace(/"[^"]*"/g,""),r.match(/[ymdhMsb]+/)!==null):!1},fs:{exists(r){return new Promise(i=>{u.access(r,u.constants.F_OK,o=>{i(!o)})})}},toIsoDateString(r){return r.toIsoString().subsstr(0,10)},parseBoolean(r){return r===!0||r==="true"||r===1||r==="1"}};d.exports=n}).call(this)}).call(this,typeof Nt<"u"?Nt:typeof self<"u"?self:typeof window<"u"?window:{},e("timers").setImmediate)},{fs:216,timers:523}],28:[function(e,d,m){const f=e("./under-dash"),c=e("./utils"),u="<",s=">",t="";function r(l,a,g){l.push(` ${a}="${c.xmlEncode(g.toString())}"`)}function i(l,a){if(a){const g=[];f.each(a,(v,h)=>{v!==void 0&&r(g,h,v)}),l.push(g.join(""))}}class o{constructor(){this._xml=[],this._stack=[],this._rollbacks=[]}get tos(){return this._stack.length?this._stack[this._stack.length-1]:void 0}get cursor(){return this._xml.length}openXml(a){const g=this._xml;g.push(" +`)}openNode(a,g){const v=this.tos,h=this._xml;v&&this.open&&h.push(s),this._stack.push(a),h.push(u),h.push(a),i(h,g),this.leaf=!0,this.open=!0}addAttribute(a,g){if(!this.open)throw new Error("Cannot write attributes to node if it is not open");g!==void 0&&r(this._xml,a,g)}addAttributes(a){if(!this.open)throw new Error("Cannot write attributes to node if it is not open");i(this._xml,a)}writeText(a){const g=this._xml;this.open&&(g.push(s),this.open=!1),this.leaf=!1,g.push(c.xmlEncode(a.toString()))}writeXml(a){this.open&&(this._xml.push(s),this.open=!1),this.leaf=!1,this._xml.push(a)}closeNode(){const a=this._stack.pop(),g=this._xml;this.leaf?g.push(n):(g.push(t),g.push(a),g.push(s)),this.open=!1,this.leaf=!1}leafNode(a,g,v){this.openNode(a,g),v!==void 0&&this.writeText(v),this.closeNode()}closeAll(){for(;this._stack.length;)this.closeNode()}addRollback(){return this._rollbacks.push({xml:this._xml.length,stack:this._stack.length,leaf:this.leaf,open:this.open}),this.cursor}commit(){this._rollbacks.pop()}rollback(){const a=this._rollbacks.pop();this._xml.length>a.xml&&this._xml.splice(a.xml,this._xml.length-a.xml),this._stack.length>a.stack&&this._stack.splice(a.stack,this._stack.length-a.stack),this.leaf=a.leaf,this.open=a.open}get xml(){return this.closeAll(),this._xml.join("")}}o.StdDocAttributes={version:"1.0",encoding:"UTF-8",standalone:"yes"},d.exports=o},{"./under-dash":26,"./utils":27}],29:[function(e,d,m){(function(f){(function(){const c=e("events"),u=e("jszip"),s=e("./stream-buf"),{stringToBuffer:t}=e("./browser-buffer-encode");class n extends c.EventEmitter{constructor(i){super(),this.options=Object.assign({type:"nodebuffer",compression:"DEFLATE"},i),this.zip=new u,this.stream=new s}append(i,o){o.hasOwnProperty("base64")&&o.base64?this.zip.file(o.name,i,{base64:!0}):(f.browser&&typeof i=="string"&&(i=t(i)),this.zip.file(o.name,i))}async finalize(){const i=await this.zip.generateAsync(this.options);this.stream.end(i),this.emit("finish")}read(i){return this.stream.read(i)}setEncoding(i){return this.stream.setEncoding(i)}pause(){return this.stream.pause()}resume(){return this.stream.resume()}isPaused(){return this.stream.isPaused()}pipe(i,o){return this.stream.pipe(i,o)}unpipe(i){return this.stream.unpipe(i)}unshift(i){return this.stream.unshift(i)}wrap(i){return this.stream.wrap(i)}}d.exports={ZipWriter:n}}).call(this)}).call(this,e("_process"))},{"./browser-buffer-encode":17,"./stream-buf":24,_process:467,events:422,jszip:441}],30:[function(e,d,m){d.exports={0:{f:"General"},1:{f:"0"},2:{f:"0.00"},3:{f:"#,##0"},4:{f:"#,##0.00"},9:{f:"0%"},10:{f:"0.00%"},11:{f:"0.00E+00"},12:{f:"# ?/?"},13:{f:"# ??/??"},14:{f:"mm-dd-yy"},15:{f:"d-mmm-yy"},16:{f:"d-mmm"},17:{f:"mmm-yy"},18:{f:"h:mm AM/PM"},19:{f:"h:mm:ss AM/PM"},20:{f:"h:mm"},21:{f:"h:mm:ss"},22:{f:'m/d/yy "h":mm'},27:{"zh-tw":"[$-404]e/m/d","zh-cn":'yyyy"年"m"月"',"ja-jp":"[$-411]ge.m.d","ko-kr":'yyyy"年" mm"月" dd"日"'},28:{"zh-tw":'[$-404]e"年"m"月"d"日"',"zh-cn":'m"月"d"日"',"ja-jp":'[$-411]ggge"年"m"月"d"日"',"ko-kr":"mm-dd"},29:{"zh-tw":'[$-404]e"年"m"月"d"日"',"zh-cn":'m"月"d"日"',"ja-jp":'[$-411]ggge"年"m"月"d"日"',"ko-kr":"mm-dd"},30:{"zh-tw":"m/d/yy ","zh-cn":"m-d-yy","ja-jp":"m/d/yy","ko-kr":"mm-dd-yy"},31:{"zh-tw":'yyyy"年"m"月"d"日"',"zh-cn":'yyyy"年"m"月"d"日"',"ja-jp":'yyyy"年"m"月"d"日"',"ko-kr":'yyyy"년" mm"월" dd"일"'},32:{"zh-tw":'hh"時"mm"分"',"zh-cn":'h"时"mm"分"',"ja-jp":'h"時"mm"分"',"ko-kr":'h"시" mm"분"'},33:{"zh-tw":'hh"時"mm"分"ss"秒"',"zh-cn":'h"时"mm"分"ss"秒"',"ja-jp":'h"時"mm"分"ss"秒"',"ko-kr":'h"시" mm"분" ss"초"'},34:{"zh-tw":'上午/下午 hh"時"mm"分"',"zh-cn":'上午/下午 h"时"mm"分"',"ja-jp":'yyyy"年"m"月"',"ko-kr":"yyyy-mm-dd"},35:{"zh-tw":'上午/下午 hh"時"mm"分"ss"秒"',"zh-cn":'上午/下午 h"时"mm"分"ss"秒"',"ja-jp":'m"月"d"日"',"ko-kr":"yyyy-mm-dd"},36:{"zh-tw":"[$-404]e/m/d","zh-cn":'yyyy"年"m"月"',"ja-jp":"[$-411]ge.m.d","ko-kr":'yyyy"年" mm"月" dd"日"'},37:{f:"#,##0 ;(#,##0)"},38:{f:"#,##0 ;[Red](#,##0)"},39:{f:"#,##0.00 ;(#,##0.00)"},40:{f:"#,##0.00 ;[Red](#,##0.00)"},45:{f:"mm:ss"},46:{f:"[h]:mm:ss"},47:{f:"mmss.0"},48:{f:"##0.0E+0"},49:{f:"@"},50:{"zh-tw":"[$-404]e/m/d","zh-cn":'yyyy"年"m"月"',"ja-jp":"[$-411]ge.m.d","ko-kr":'yyyy"年" mm"月" dd"日"'},51:{"zh-tw":'[$-404]e"年"m"月"d"日"',"zh-cn":'m"月"d"日"',"ja-jp":'[$-411]ggge"年"m"月"d"日"',"ko-kr":"mm-dd"},52:{"zh-tw":'上午/下午 hh"時"mm"分"',"zh-cn":'yyyy"年"m"月"',"ja-jp":'yyyy"年"m"月"',"ko-kr":"yyyy-mm-dd"},53:{"zh-tw":'上午/下午 hh"時"mm"分"ss"秒"',"zh-cn":'m"月"d"日"',"ja-jp":'m"月"d"日"',"ko-kr":"yyyy-mm-dd"},54:{"zh-tw":'[$-404]e"年"m"月"d"日"',"zh-cn":'m"月"d"日"',"ja-jp":'[$-411]ggge"年"m"月"d"日"',"ko-kr":"mm-dd"},55:{"zh-tw":'上午/下午 hh"時"mm"分"',"zh-cn":'上午/下午 h"时"mm"分"',"ja-jp":'yyyy"年"m"月"',"ko-kr":"yyyy-mm-dd"},56:{"zh-tw":'上午/下午 hh"時"mm"分"ss"秒"',"zh-cn":'上午/下午 h"时"mm"分"ss"秒"',"ja-jp":'m"月"d"日"',"ko-kr":"yyyy-mm-dd"},57:{"zh-tw":"[$-404]e/m/d","zh-cn":'yyyy"年"m"月"',"ja-jp":"[$-411]ge.m.d","ko-kr":'yyyy"年" mm"月" dd"日"'},58:{"zh-tw":'[$-404]e"年"m"月"d"日"',"zh-cn":'m"月"d"日"',"ja-jp":'[$-411]ggge"年"m"月"d"日"',"ko-kr":"mm-dd"},59:{"th-th":"t0"},60:{"th-th":"t0.00"},61:{"th-th":"t#,##0"},62:{"th-th":"t#,##0.00"},67:{"th-th":"t0%"},68:{"th-th":"t0.00%"},69:{"th-th":"t# ?/?"},70:{"th-th":"t# ??/??"},81:{"th-th":"d/m/bb"}}},{}],31:[function(e,d,m){d.exports={OfficeDocument:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",Worksheet:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet",CalcChain:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/calcChain",SharedStrings:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings",Styles:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles",Theme:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme",Hyperlink:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink",Image:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",CoreProperties:"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties",ExtenderProperties:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties",Comments:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments",VmlDrawing:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing",Table:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/table"}},{}],32:[function(e,d,m){const f=e("../../utils/parse-sax"),c=e("../../utils/xml-stream");class u{prepare(){}render(){}parseOpen(t){}parseText(t){}parseClose(t){}reconcile(t,n){}reset(){this.model=null,this.map&&Object.values(this.map).forEach(t=>{t instanceof u?t.reset():t.xform&&t.xform.reset()})}mergeModel(t){this.model=Object.assign(this.model||{},t)}async parse(t){for await(const n of t)for(const{eventType:r,value:i}of n)if(r==="opentag")this.parseOpen(i);else if(r==="text")this.parseText(i);else if(r==="closetag"&&!this.parseClose(i.name))return this.model;return this.model}async parseStream(t){return this.parse(f(t))}get xml(){return this.toXml(this.model)}toXml(t){const n=new c;return this.render(n,t),n.xml}static toAttribute(t,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;if(t===void 0){if(r)return n}else if(r||t!==n)return t.toString()}static toStringAttribute(t,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;return u.toAttribute(t,n,r)}static toStringValue(t,n){return t===void 0?n:t}static toBoolAttribute(t,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;if(t===void 0){if(r)return n}else if(r||t!==n)return t?"1":"0"}static toBoolValue(t,n){return t===void 0?n:t==="1"}static toIntAttribute(t,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;return u.toAttribute(t,n,r)}static toIntValue(t,n){return t===void 0?n:parseInt(t,10)}static toFloatAttribute(t,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;return u.toAttribute(t,n,r)}static toFloatValue(t,n){return t===void 0?n:parseFloat(t)}}d.exports=u},{"../../utils/parse-sax":22,"../../utils/xml-stream":28}],33:[function(e,d,m){const f=e("../base-xform"),c=e("../../../utils/col-cache");class u extends f{render(r,i){r.openNode("definedName",{name:i.name,localSheetId:i.localSheetId}),r.writeText(i.ranges.join(",")),r.closeNode()}parseOpen(r){switch(r.name){case"definedName":return this._parsedName=r.attributes.name,this._parsedLocalSheetId=r.attributes.localSheetId,this._parsedText=[],!0;default:return!1}}parseText(r){this._parsedText.push(r)}parseClose(){return this.model={name:this._parsedName,ranges:t(this._parsedText.join(""))},this._parsedLocalSheetId!==void 0&&(this.model.localSheetId=parseInt(this._parsedLocalSheetId,10)),!1}}function s(n){try{return c.decodeEx(n),!0}catch{return!1}}function t(n){const r=[];let i=!1,o="";return n.split(",").forEach(l=>{if(!l)return;const a=(l.match(/'/g)||[]).length;if(!a){i?o+=`${l},`:s(l)&&r.push(l);return}const g=a%2===0;!i&&g&&s(l)?r.push(l):i&&!g?(i=!1,s(o+l)&&r.push(o+l),o=""):(i=!0,o+=`${l},`)}),r}d.exports=u},{"../../../utils/col-cache":19,"../base-xform":32}],34:[function(e,d,m){const f=e("../../../utils/utils"),c=e("../base-xform");class u extends c{render(t,n){t.leafNode("sheet",{sheetId:n.id,name:n.name,state:n.state,"r:id":n.rId})}parseOpen(t){return t.name==="sheet"?(this.model={name:f.xmlDecode(t.attributes.name),id:parseInt(t.attributes.sheetId,10),state:t.attributes.state,rId:t.attributes["r:id"]},!0):!1}parseText(){}parseClose(){return!1}}d.exports=u},{"../../../utils/utils":27,"../base-xform":32}],35:[function(e,d,m){const f=e("../base-xform");class c extends f{render(s,t){s.leafNode("calcPr",{calcId:171027,fullCalcOnLoad:t.fullCalcOnLoad?1:void 0})}parseOpen(s){return s.name==="calcPr"?(this.model={},!0):!1}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],36:[function(e,d,m){const f=e("../base-xform");class c extends f{render(s,t){s.leafNode("workbookPr",{date1904:t.date1904?1:void 0,defaultThemeVersion:164011,filterPrivacy:1})}parseOpen(s){return s.name==="workbookPr"?(this.model={date1904:s.attributes.date1904==="1"},!0):!1}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],37:[function(e,d,m){const f=e("../base-xform");class c extends f{render(s,t){const n={xWindow:t.x||0,yWindow:t.y||0,windowWidth:t.width||12e3,windowHeight:t.height||24e3,firstSheet:t.firstSheet,activeTab:t.activeTab};t.visibility&&t.visibility!=="visible"&&(n.visibility=t.visibility),s.leafNode("workbookView",n)}parseOpen(s){if(s.name==="workbookView"){const t=this.model={},n=function(i,o,l){const a=o!==void 0?t[i]=o:l;a!==void 0&&(t[i]=a)},r=function(i,o,l){const a=o!==void 0?t[i]=parseInt(o,10):l;a!==void 0&&(t[i]=a)};return r("x",s.attributes.xWindow,0),r("y",s.attributes.yWindow,0),r("width",s.attributes.windowWidth,25e3),r("height",s.attributes.windowHeight,1e4),n("visibility",s.attributes.visibility,"visible"),r("activeTab",s.attributes.activeTab,void 0),r("firstSheet",s.attributes.firstSheet,void 0),!0}return!1}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],38:[function(e,d,m){const f=e("../../../utils/under-dash"),c=e("../../../utils/col-cache"),u=e("../../../utils/xml-stream"),s=e("../base-xform"),t=e("../static-xform"),n=e("../list-xform"),r=e("./defined-name-xform"),i=e("./sheet-xform"),o=e("./workbook-view-xform"),l=e("./workbook-properties-xform"),a=e("./workbook-calc-properties-xform");class g extends s{constructor(){super(),this.map={fileVersion:g.STATIC_XFORMS.fileVersion,workbookPr:new l,bookViews:new n({tag:"bookViews",count:!1,childXform:new o}),sheets:new n({tag:"sheets",count:!1,childXform:new i}),definedNames:new n({tag:"definedNames",count:!1,childXform:new r}),calcPr:new a}}prepare(h){h.sheets=h.worksheets;const w=[];let y=0;h.sheets.forEach(S=>{if(S.pageSetup&&S.pageSetup.printArea&&S.pageSetup.printArea.split("&&").forEach(E=>{const I=E.split(":"),F={name:"_xlnm.Print_Area",ranges:[`'${S.name}'!$${I[0]}:$${I[1]}`],localSheetId:y};w.push(F)}),S.pageSetup&&(S.pageSetup.printTitlesRow||S.pageSetup.printTitlesColumn)){const E=[];if(S.pageSetup.printTitlesColumn){const F=S.pageSetup.printTitlesColumn.split(":");E.push(`'${S.name}'!$${F[0]}:$${F[1]}`)}if(S.pageSetup.printTitlesRow){const F=S.pageSetup.printTitlesRow.split(":");E.push(`'${S.name}'!$${F[0]}:$${F[1]}`)}const I={name:"_xlnm.Print_Titles",ranges:E,localSheetId:y};w.push(I)}y++}),w.length&&(h.definedNames=h.definedNames.concat(w)),(h.media||[]).forEach((S,E)=>{S.name=S.type+(E+1)})}render(h,w){h.openXml(u.StdDocAttributes),h.openNode("workbook",g.WORKBOOK_ATTRIBUTES),this.map.fileVersion.render(h),this.map.workbookPr.render(h,w.properties),this.map.bookViews.render(h,w.views),this.map.sheets.render(h,w.sheets),this.map.definedNames.render(h,w.definedNames),this.map.calcPr.render(h,w.calcProperties),h.closeNode()}parseOpen(h){if(this.parser)return this.parser.parseOpen(h),!0;switch(h.name){case"workbook":return!0;default:return this.parser=this.map[h.name],this.parser&&this.parser.parseOpen(h),!0}}parseText(h){this.parser&&this.parser.parseText(h)}parseClose(h){if(this.parser)return this.parser.parseClose(h)||(this.parser=void 0),!0;switch(h){case"workbook":return this.model={sheets:this.map.sheets.model,properties:this.map.workbookPr.model||{},views:this.map.bookViews.model,calcProperties:{}},this.map.definedNames.model&&(this.model.definedNames=this.map.definedNames.model),!1;default:return!0}}reconcile(h){const w=(h.workbookRels||[]).reduce((F,B)=>(F[B.Id]=B,F),{}),y=[];let S,E=0;(h.sheets||[]).forEach(F=>{const B=w[F.rId];B&&(S=h.worksheetHash[`xl/${B.Target.replace(/^(\s|\/xl\/)+/,"")}`],S&&(S.name=F.name,S.id=F.id,S.state=F.state,y[E++]=S))});const I=[];f.each(h.definedNames,F=>{if(F.name==="_xlnm.Print_Area"){if(S=y[F.localSheetId],S){S.pageSetup||(S.pageSetup={});const B=c.decodeEx(F.ranges[0]);S.pageSetup.printArea=S.pageSetup.printArea?`${S.pageSetup.printArea}&&${B.dimensions}`:B.dimensions}}else if(F.name==="_xlnm.Print_Titles"){if(S=y[F.localSheetId],S){S.pageSetup||(S.pageSetup={});const B=F.ranges.join(","),j=/\$/g,X=/\$\d+:\$\d+/,G=B.match(X);if(G&&G.length){const H=G[0];S.pageSetup.printTitlesRow=H.replace(j,"")}const V=/\$[A-Z]+:\$[A-Z]+/,J=B.match(V);if(J&&J.length){const H=J[0];S.pageSetup.printTitlesColumn=H.replace(j,"")}}}else I.push(F)}),h.definedNames=I,h.media.forEach((F,B)=>{F.index=B})}}g.WORKBOOK_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main","xmlns:r":"http://schemas.openxmlformats.org/officeDocument/2006/relationships","xmlns:mc":"http://schemas.openxmlformats.org/markup-compatibility/2006","mc:Ignorable":"x15","xmlns:x15":"http://schemas.microsoft.com/office/spreadsheetml/2010/11/main"},g.STATIC_XFORMS={fileVersion:new t({tag:"fileVersion",$:{appName:"xl",lastEdited:5,lowestEdited:5,rupBuild:9303}})},d.exports=g},{"../../../utils/col-cache":19,"../../../utils/under-dash":26,"../../../utils/xml-stream":28,"../base-xform":32,"../list-xform":71,"../static-xform":120,"./defined-name-xform":33,"./sheet-xform":34,"./workbook-calc-properties-xform":35,"./workbook-properties-xform":36,"./workbook-view-xform":37}],39:[function(e,d,m){const f=e("../strings/rich-text-xform"),c=e("../../../utils/utils"),u=e("../base-xform"),s=d.exports=function(t){this.model=t};c.inherits(s,u,{get tag(){return"r"},get richTextXform(){return this._richTextXform||(this._richTextXform=new f),this._richTextXform},render(t,n){n=n||this.model,t.openNode("comment",{ref:n.ref,authorId:0}),t.openNode("text"),n&&n.note&&n.note.texts&&n.note.texts.forEach(r=>{this.richTextXform.render(t,r)}),t.closeNode(),t.closeNode()},parseOpen(t){if(this.parser)return this.parser.parseOpen(t),!0;switch(t.name){case"comment":return this.model={type:"note",note:{texts:[]},...t.attributes},!0;case"r":return this.parser=this.richTextXform,this.parser.parseOpen(t),!0;default:return!1}},parseText(t){this.parser&&this.parser.parseText(t)},parseClose(t){switch(t){case"comment":return!1;case"r":return this.model.note.texts.push(this.parser.model),this.parser=void 0,!0;default:return this.parser&&this.parser.parseClose(t),!0}}})},{"../../../utils/utils":27,"../base-xform":32,"../strings/rich-text-xform":122}],40:[function(e,d,m){const f=e("../../../utils/xml-stream"),c=e("../../../utils/utils"),u=e("../base-xform"),s=e("./comment-xform"),t=d.exports=function(){this.map={comment:new s}};c.inherits(t,u,{COMMENTS_ATTRIBUTES:{xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main"}},{render(n,r){r=r||this.model,n.openXml(f.StdDocAttributes),n.openNode("comments",t.COMMENTS_ATTRIBUTES),n.openNode("authors"),n.leafNode("author",null,"Author"),n.closeNode(),n.openNode("commentList"),r.comments.forEach(i=>{this.map.comment.render(n,i)}),n.closeNode(),n.closeNode()},parseOpen(n){if(this.parser)return this.parser.parseOpen(n),!0;switch(n.name){case"commentList":return this.model={comments:[]},!0;case"comment":return this.parser=this.map.comment,this.parser.parseOpen(n),!0;default:return!1}},parseText(n){this.parser&&this.parser.parseText(n)},parseClose(n){switch(n){case"commentList":return!1;case"comment":return this.model.comments.push(this.parser.model),this.parser=void 0,!0;default:return this.parser&&this.parser.parseClose(n),!0}}})},{"../../../utils/utils":27,"../../../utils/xml-stream":28,"../base-xform":32,"./comment-xform":39}],41:[function(e,d,m){const f=e("../../base-xform");class c extends f{constructor(s){super(),this._model=s}get tag(){return this._model&&this._model.tag}render(s,t,n){t===n[2]?s.leafNode(this.tag):this.tag==="x:SizeWithCells"&&t===n[1]&&s.leafNode(this.tag)}parseOpen(s){switch(s.name){case this.tag:return this.model={},this.model[this.tag]=!0,!0;default:return!1}}parseText(){}parseClose(){return!1}}d.exports=c},{"../../base-xform":32}],42:[function(e,d,m){const f=e("../../base-xform");class c extends f{constructor(s){super(),this._model=s}get tag(){return this._model&&this._model.tag}render(s,t){s.leafNode(this.tag,null,t)}parseOpen(s){switch(s.name){case this.tag:return this.text="",!0;default:return!1}}parseText(s){this.text=s}parseClose(){return!1}}d.exports=c},{"../../base-xform":32}],43:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"x:Anchor"}getAnchorRect(s){const t=Math.floor(s.left),n=Math.floor((s.left-t)*68),r=Math.floor(s.top),i=Math.floor((s.top-r)*18),o=Math.floor(s.right),l=Math.floor((s.right-o)*68),a=Math.floor(s.bottom),g=Math.floor((s.bottom-a)*18);return[t,n,r,i,o,l,a,g]}getDefaultRect(s){const t=s.col,n=6,r=Math.max(s.row-2,0),i=14,o=t+2,l=2,a=r+4;return[t,n,r,i,o,l,a,16]}render(s,t){const n=t.anchor?this.getAnchorRect(t.anchor):this.getDefaultRect(t.refAddress);s.leafNode("x:Anchor",null,n.join(", "))}parseOpen(s){switch(s.name){case this.tag:return this.text="",!0;default:return!1}}parseText(s){this.text=s}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],44:[function(e,d,m){const f=e("../base-xform"),c=e("./vml-anchor-xform"),u=e("./style/vml-protection-xform"),s=e("./style/vml-position-xform"),t=["twoCells","oneCells","absolute"];class n extends f{constructor(){super(),this.map={"x:Anchor":new c,"x:Locked":new u({tag:"x:Locked"}),"x:LockText":new u({tag:"x:LockText"}),"x:SizeWithCells":new s({tag:"x:SizeWithCells"}),"x:MoveWithCells":new s({tag:"x:MoveWithCells"})}}get tag(){return"x:ClientData"}render(i,o){const{protection:l,editAs:a}=o.note;i.openNode(this.tag,{ObjectType:"Note"}),this.map["x:MoveWithCells"].render(i,a,t),this.map["x:SizeWithCells"].render(i,a,t),this.map["x:Anchor"].render(i,o),this.map["x:Locked"].render(i,l.locked),i.leafNode("x:AutoFill",null,"False"),this.map["x:LockText"].render(i,l.lockText),i.leafNode("x:Row",null,o.refAddress.row-1),i.leafNode("x:Column",null,o.refAddress.col-1),i.closeNode()}parseOpen(i){switch(i.name){case this.tag:this.reset(),this.model={anchor:[],protection:{},editAs:""};break;default:this.parser=this.map[i.name],this.parser&&this.parser.parseOpen(i);break}return!0}parseText(i){this.parser&&this.parser.parseText(i)}parseClose(i){if(this.parser)return this.parser.parseClose(i)||(this.parser=void 0),!0;switch(i){case this.tag:return this.normalizeModel(),!1;default:return!0}}normalizeModel(){const i=Object.assign({},this.map["x:MoveWithCells"].model,this.map["x:SizeWithCells"].model),o=Object.keys(i).length;this.model.editAs=t[o],this.model.anchor=this.map["x:Anchor"].text,this.model.protection.locked=this.map["x:Locked"].text,this.model.protection.lockText=this.map["x:LockText"].text}}d.exports=n},{"../base-xform":32,"./style/vml-position-xform":41,"./style/vml-protection-xform":42,"./vml-anchor-xform":43}],45:[function(e,d,m){const f=e("../../../utils/xml-stream"),c=e("../base-xform"),u=e("./vml-shape-xform");class s extends c{constructor(){super(),this.map={"v:shape":new u}}get tag(){return"xml"}render(n,r){n.openXml(f.StdDocAttributes),n.openNode(this.tag,s.DRAWING_ATTRIBUTES),n.openNode("o:shapelayout",{"v:ext":"edit"}),n.leafNode("o:idmap",{"v:ext":"edit",data:1}),n.closeNode(),n.openNode("v:shapetype",{id:"_x0000_t202",coordsize:"21600,21600","o:spt":202,path:"m,l,21600r21600,l21600,xe"}),n.leafNode("v:stroke",{joinstyle:"miter"}),n.leafNode("v:path",{gradientshapeok:"t","o:connecttype":"rect"}),n.closeNode(),r.comments.forEach((i,o)=>{this.map["v:shape"].render(n,i,o)}),n.closeNode()}parseOpen(n){if(this.parser)return this.parser.parseOpen(n),!0;switch(n.name){case this.tag:this.reset(),this.model={comments:[]};break;default:this.parser=this.map[n.name],this.parser&&this.parser.parseOpen(n);break}return!0}parseText(n){this.parser&&this.parser.parseText(n)}parseClose(n){if(this.parser)return this.parser.parseClose(n)||(this.model.comments.push(this.parser.model),this.parser=void 0),!0;switch(n){case this.tag:return!1;default:return!0}}reconcile(n,r){n.anchors.forEach(i=>{i.br?this.map["xdr:twoCellAnchor"].reconcile(i,r):this.map["xdr:oneCellAnchor"].reconcile(i,r)})}}s.DRAWING_ATTRIBUTES={"xmlns:v":"urn:schemas-microsoft-com:vml","xmlns:o":"urn:schemas-microsoft-com:office:office","xmlns:x":"urn:schemas-microsoft-com:office:excel"},d.exports=s},{"../../../utils/xml-stream":28,"../base-xform":32,"./vml-shape-xform":46}],46:[function(e,d,m){const f=e("../base-xform"),c=e("./vml-textbox-xform"),u=e("./vml-client-data-xform");class s extends f{constructor(){super(),this.map={"v:textbox":new c,"x:ClientData":new u}}get tag(){return"v:shape"}render(n,r,i){n.openNode("v:shape",s.V_SHAPE_ATTRIBUTES(r,i)),n.leafNode("v:fill",{color2:"infoBackground [80]"}),n.leafNode("v:shadow",{color:"none [81]",obscured:"t"}),n.leafNode("v:path",{"o:connecttype":"none"}),this.map["v:textbox"].render(n,r),this.map["x:ClientData"].render(n,r),n.closeNode()}parseOpen(n){if(this.parser)return this.parser.parseOpen(n),!0;switch(n.name){case this.tag:this.reset(),this.model={margins:{insetmode:n.attributes["o:insetmode"]},anchor:"",editAs:"",protection:{}};break;default:this.parser=this.map[n.name],this.parser&&this.parser.parseOpen(n);break}return!0}parseText(n){this.parser&&this.parser.parseText(n)}parseClose(n){if(this.parser)return this.parser.parseClose(n)||(this.parser=void 0),!0;switch(n){case this.tag:return this.model.margins.inset=this.map["v:textbox"].model&&this.map["v:textbox"].model.inset,this.model.protection=this.map["x:ClientData"].model&&this.map["x:ClientData"].model.protection,this.model.anchor=this.map["x:ClientData"].model&&this.map["x:ClientData"].model.anchor,this.model.editAs=this.map["x:ClientData"].model&&this.map["x:ClientData"].model.editAs,!1;default:return!0}}}s.V_SHAPE_ATTRIBUTES=(t,n)=>({id:`_x0000_s${1025+n}`,type:"#_x0000_t202",style:"position:absolute; margin-left:105.3pt;margin-top:10.5pt;width:97.8pt;height:59.1pt;z-index:1;visibility:hidden",fillcolor:"infoBackground [80]",strokecolor:"none [81]","o:insetmode":t.note.margins&&t.note.margins.insetmode}),d.exports=s},{"../base-xform":32,"./vml-client-data-xform":44,"./vml-textbox-xform":47}],47:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"v:textbox"}conversionUnit(s,t,n){return`${parseFloat(s)*t.toFixed(2)}${n}`}reverseConversionUnit(s){return(s||"").split(",").map(t=>Number(parseFloat(this.conversionUnit(parseFloat(t),.1,"")).toFixed(2)))}render(s,t){const n={style:"mso-direction-alt:auto"};if(t&&t.note){let{inset:r}=t.note&&t.note.margins;Array.isArray(r)&&(r=r.map(i=>this.conversionUnit(i,10,"mm")).join(",")),r&&(n.inset=r)}s.openNode("v:textbox",n),s.leafNode("div",{style:"text-align:left"}),s.closeNode()}parseOpen(s){switch(s.name){case this.tag:return this.model={inset:this.reverseConversionUnit(s.attributes.inset)},!0;default:return!0}}parseText(){}parseClose(s){switch(s){case this.tag:return!1;default:return!0}}}d.exports=c},{"../base-xform":32}],48:[function(e,d,m){const f=e("./base-xform");class c extends f{createNewModel(s){return{}}parseOpen(s){return this.parser=this.parser||this.map[s.name],this.parser?(this.parser.parseOpen(s),!0):s.name===this.tag?(this.model=this.createNewModel(s),!0):!1}parseText(s){this.parser&&this.parser.parseText(s)}onParserClose(s,t){this.model[s]=t.model}parseClose(s){return this.parser?(this.parser.parseClose(s)||(this.onParserClose(s,this.parser),this.parser=void 0),!0):s!==this.tag}}d.exports=c},{"./base-xform":32}],49:[function(e,d,m){const f=e("../base-xform");class c extends f{render(s,t){s.openNode("HeadingPairs"),s.openNode("vt:vector",{size:2,baseType:"variant"}),s.openNode("vt:variant"),s.leafNode("vt:lpstr",void 0,"Worksheets"),s.closeNode(),s.openNode("vt:variant"),s.leafNode("vt:i4",void 0,t.length),s.closeNode(),s.closeNode(),s.closeNode()}parseOpen(s){return s.name==="HeadingPairs"}parseText(){}parseClose(s){return s!=="HeadingPairs"}}d.exports=c},{"../base-xform":32}],50:[function(e,d,m){const f=e("../base-xform");class c extends f{render(s,t){s.openNode("TitlesOfParts"),s.openNode("vt:vector",{size:t.length,baseType:"lpstr"}),t.forEach(n=>{s.leafNode("vt:lpstr",void 0,n.name)}),s.closeNode(),s.closeNode()}parseOpen(s){return s.name==="TitlesOfParts"}parseText(){}parseClose(s){return s!=="TitlesOfParts"}}d.exports=c},{"../base-xform":32}],51:[function(e,d,m){const f=e("../../../utils/xml-stream"),c=e("../base-xform"),u=e("../simple/string-xform"),s=e("./app-heading-pairs-xform"),t=e("./app-titles-of-parts-xform");class n extends c{constructor(){super(),this.map={Company:new u({tag:"Company"}),Manager:new u({tag:"Manager"}),HeadingPairs:new s,TitleOfParts:new t}}render(i,o){i.openXml(f.StdDocAttributes),i.openNode("Properties",n.PROPERTY_ATTRIBUTES),i.leafNode("Application",void 0,"Microsoft Excel"),i.leafNode("DocSecurity",void 0,"0"),i.leafNode("ScaleCrop",void 0,"false"),this.map.HeadingPairs.render(i,o.worksheets),this.map.TitleOfParts.render(i,o.worksheets),this.map.Company.render(i,o.company||""),this.map.Manager.render(i,o.manager),i.leafNode("LinksUpToDate",void 0,"false"),i.leafNode("SharedDoc",void 0,"false"),i.leafNode("HyperlinksChanged",void 0,"false"),i.leafNode("AppVersion",void 0,"16.0300"),i.closeNode()}parseOpen(i){if(this.parser)return this.parser.parseOpen(i),!0;switch(i.name){case"Properties":return!0;default:return this.parser=this.map[i.name],this.parser?(this.parser.parseOpen(i),!0):!1}}parseText(i){this.parser&&this.parser.parseText(i)}parseClose(i){if(this.parser)return this.parser.parseClose(i)||(this.parser=void 0),!0;switch(i){case"Properties":return this.model={worksheets:this.map.TitleOfParts.model,company:this.map.Company.model,manager:this.map.Manager.model},!1;default:return!0}}}n.DateFormat=function(r){return r.toISOString().replace(/[.]\d{3,6}/,"")},n.DateAttrs={"xsi:type":"dcterms:W3CDTF"},n.PROPERTY_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties","xmlns:vt":"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes"},d.exports=n},{"../../../utils/xml-stream":28,"../base-xform":32,"../simple/string-xform":119,"./app-heading-pairs-xform":49,"./app-titles-of-parts-xform":50}],52:[function(e,d,m){const f=e("../../../utils/xml-stream"),c=e("../base-xform");class u extends c{render(t,n){t.openXml(f.StdDocAttributes),t.openNode("Types",u.PROPERTY_ATTRIBUTES);const r={};(n.media||[]).forEach(o=>{if(o.type==="image"){const l=o.extension;r[l]||(r[l]=!0,t.leafNode("Default",{Extension:l,ContentType:`image/${l}`}))}}),t.leafNode("Default",{Extension:"rels",ContentType:"application/vnd.openxmlformats-package.relationships+xml"}),t.leafNode("Default",{Extension:"xml",ContentType:"application/xml"}),t.leafNode("Override",{PartName:"/xl/workbook.xml",ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"}),n.worksheets.forEach(o=>{const l=`/xl/worksheets/sheet${o.id}.xml`;t.leafNode("Override",{PartName:l,ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"})}),t.leafNode("Override",{PartName:"/xl/theme/theme1.xml",ContentType:"application/vnd.openxmlformats-officedocument.theme+xml"}),t.leafNode("Override",{PartName:"/xl/styles.xml",ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"}),n.sharedStrings&&n.sharedStrings.count&&t.leafNode("Override",{PartName:"/xl/sharedStrings.xml",ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml"}),n.tables&&n.tables.forEach(o=>{t.leafNode("Override",{PartName:`/xl/tables/${o.target}`,ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml"})}),n.drawings&&n.drawings.forEach(o=>{t.leafNode("Override",{PartName:`/xl/drawings/${o.name}.xml`,ContentType:"application/vnd.openxmlformats-officedocument.drawing+xml"})}),n.commentRefs&&(t.leafNode("Default",{Extension:"vml",ContentType:"application/vnd.openxmlformats-officedocument.vmlDrawing"}),n.commentRefs.forEach(o=>{let{commentName:l}=o;t.leafNode("Override",{PartName:`/xl/${l}.xml`,ContentType:"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml"})})),t.leafNode("Override",{PartName:"/docProps/core.xml",ContentType:"application/vnd.openxmlformats-package.core-properties+xml"}),t.leafNode("Override",{PartName:"/docProps/app.xml",ContentType:"application/vnd.openxmlformats-officedocument.extended-properties+xml"}),t.closeNode()}parseOpen(){return!1}parseText(){}parseClose(){return!1}}u.PROPERTY_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/package/2006/content-types"},d.exports=u},{"../../../utils/xml-stream":28,"../base-xform":32}],53:[function(e,d,m){const f=e("../../../utils/xml-stream"),c=e("../base-xform"),u=e("../simple/date-xform"),s=e("../simple/string-xform"),t=e("../simple/integer-xform");class n extends c{constructor(){super(),this.map={"dc:creator":new s({tag:"dc:creator"}),"dc:title":new s({tag:"dc:title"}),"dc:subject":new s({tag:"dc:subject"}),"dc:description":new s({tag:"dc:description"}),"dc:identifier":new s({tag:"dc:identifier"}),"dc:language":new s({tag:"dc:language"}),"cp:keywords":new s({tag:"cp:keywords"}),"cp:category":new s({tag:"cp:category"}),"cp:lastModifiedBy":new s({tag:"cp:lastModifiedBy"}),"cp:lastPrinted":new u({tag:"cp:lastPrinted",format:n.DateFormat}),"cp:revision":new t({tag:"cp:revision"}),"cp:version":new s({tag:"cp:version"}),"cp:contentStatus":new s({tag:"cp:contentStatus"}),"cp:contentType":new s({tag:"cp:contentType"}),"dcterms:created":new u({tag:"dcterms:created",attrs:n.DateAttrs,format:n.DateFormat}),"dcterms:modified":new u({tag:"dcterms:modified",attrs:n.DateAttrs,format:n.DateFormat})}}render(i,o){i.openXml(f.StdDocAttributes),i.openNode("cp:coreProperties",n.CORE_PROPERTY_ATTRIBUTES),this.map["dc:creator"].render(i,o.creator),this.map["dc:title"].render(i,o.title),this.map["dc:subject"].render(i,o.subject),this.map["dc:description"].render(i,o.description),this.map["dc:identifier"].render(i,o.identifier),this.map["dc:language"].render(i,o.language),this.map["cp:keywords"].render(i,o.keywords),this.map["cp:category"].render(i,o.category),this.map["cp:lastModifiedBy"].render(i,o.lastModifiedBy),this.map["cp:lastPrinted"].render(i,o.lastPrinted),this.map["cp:revision"].render(i,o.revision),this.map["cp:version"].render(i,o.version),this.map["cp:contentStatus"].render(i,o.contentStatus),this.map["cp:contentType"].render(i,o.contentType),this.map["dcterms:created"].render(i,o.created),this.map["dcterms:modified"].render(i,o.modified),i.closeNode()}parseOpen(i){if(this.parser)return this.parser.parseOpen(i),!0;switch(i.name){case"cp:coreProperties":case"coreProperties":return!0;default:if(this.parser=this.map[i.name],this.parser)return this.parser.parseOpen(i),!0;throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(i)}`)}}parseText(i){this.parser&&this.parser.parseText(i)}parseClose(i){if(this.parser)return this.parser.parseClose(i)||(this.parser=void 0),!0;switch(i){case"cp:coreProperties":case"coreProperties":return this.model={creator:this.map["dc:creator"].model,title:this.map["dc:title"].model,subject:this.map["dc:subject"].model,description:this.map["dc:description"].model,identifier:this.map["dc:identifier"].model,language:this.map["dc:language"].model,keywords:this.map["cp:keywords"].model,category:this.map["cp:category"].model,lastModifiedBy:this.map["cp:lastModifiedBy"].model,lastPrinted:this.map["cp:lastPrinted"].model,revision:this.map["cp:revision"].model,contentStatus:this.map["cp:contentStatus"].model,contentType:this.map["cp:contentType"].model,created:this.map["dcterms:created"].model,modified:this.map["dcterms:modified"].model},!1;default:throw new Error(`Unexpected xml node in parseClose: ${i}`)}}}n.DateFormat=function(r){return r.toISOString().replace(/[.]\d{3}/,"")},n.DateAttrs={"xsi:type":"dcterms:W3CDTF"},n.CORE_PROPERTY_ATTRIBUTES={"xmlns:cp":"http://schemas.openxmlformats.org/package/2006/metadata/core-properties","xmlns:dc":"http://purl.org/dc/elements/1.1/","xmlns:dcterms":"http://purl.org/dc/terms/","xmlns:dcmitype":"http://purl.org/dc/dcmitype/","xmlns:xsi":"http://www.w3.org/2001/XMLSchema-instance"},d.exports=n},{"../../../utils/xml-stream":28,"../base-xform":32,"../simple/date-xform":117,"../simple/integer-xform":118,"../simple/string-xform":119}],54:[function(e,d,m){const f=e("../base-xform");class c extends f{render(s,t){s.leafNode("Relationship",t)}parseOpen(s){switch(s.name){case"Relationship":return this.model=s.attributes,!0;default:return!1}}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],55:[function(e,d,m){const f=e("../../../utils/xml-stream"),c=e("../base-xform"),u=e("./relationship-xform");class s extends c{constructor(){super(),this.map={Relationship:new u}}render(n,r){r=r||this._values,n.openXml(f.StdDocAttributes),n.openNode("Relationships",s.RELATIONSHIPS_ATTRIBUTES),r.forEach(i=>{this.map.Relationship.render(n,i)}),n.closeNode()}parseOpen(n){if(this.parser)return this.parser.parseOpen(n),!0;switch(n.name){case"Relationships":return this.model=[],!0;default:if(this.parser=this.map[n.name],this.parser)return this.parser.parseOpen(n),!0;throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(n)}`)}}parseText(n){this.parser&&this.parser.parseText(n)}parseClose(n){if(this.parser)return this.parser.parseClose(n)||(this.model.push(this.parser.model),this.parser=void 0),!0;switch(n){case"Relationships":return!1;default:throw new Error(`Unexpected xml node in parseClose: ${n}`)}}}s.RELATIONSHIPS_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/package/2006/relationships"},d.exports=s},{"../../../utils/xml-stream":28,"../base-xform":32,"./relationship-xform":54}],56:[function(e,d,m){const f=e("../base-xform");class c extends f{parseOpen(s){if(this.parser)return this.parser.parseOpen(s),!0;switch(s.name){case this.tag:this.reset(),this.model={range:{editAs:s.attributes.editAs||"oneCell"}};break;default:this.parser=this.map[s.name],this.parser&&this.parser.parseOpen(s);break}return!0}parseText(s){this.parser&&this.parser.parseText(s)}reconcilePicture(s,t){if(s&&s.rId){const r=t.rels[s.rId].Target.match(/.*\/media\/(.+[.][a-zA-Z]{3,4})/);if(r){const i=r[1],o=t.mediaIndex[i];return t.media[o]}}}}d.exports=c},{"../base-xform":32}],57:[function(e,d,m){const f=e("../base-xform"),c=e("./blip-xform");class u extends f{constructor(){super(),this.map={"a:blip":new c}}get tag(){return"xdr:blipFill"}render(t,n){t.openNode(this.tag),this.map["a:blip"].render(t,n),t.openNode("a:stretch"),t.leafNode("a:fillRect"),t.closeNode(),t.closeNode()}parseOpen(t){if(this.parser)return this.parser.parseOpen(t),!0;switch(t.name){case this.tag:this.reset();break;default:this.parser=this.map[t.name],this.parser&&this.parser.parseOpen(t);break}return!0}parseText(){}parseClose(t){if(this.parser)return this.parser.parseClose(t)||(this.parser=void 0),!0;switch(t){case this.tag:return this.model=this.map["a:blip"].model,!1;default:return!0}}}d.exports=u},{"../base-xform":32,"./blip-xform":58}],58:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"a:blip"}render(s,t){s.leafNode(this.tag,{"xmlns:r":"http://schemas.openxmlformats.org/officeDocument/2006/relationships","r:embed":t.rId,cstate:"print"})}parseOpen(s){switch(s.name){case this.tag:return this.model={rId:s.attributes["r:embed"]},!0;default:return!0}}parseText(){}parseClose(s){switch(s){case this.tag:return!1;default:return!0}}}d.exports=c},{"../base-xform":32}],59:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"xdr:cNvPicPr"}render(s){s.openNode(this.tag),s.leafNode("a:picLocks",{noChangeAspect:"1"}),s.closeNode()}parseOpen(s){switch(s.name){case this.tag:return!0;default:return!0}}parseText(){}parseClose(s){switch(s){case this.tag:return!1;default:return!0}}}d.exports=c},{"../base-xform":32}],60:[function(e,d,m){const f=e("../base-xform"),c=e("./hlink-click-xform"),u=e("./ext-lst-xform");class s extends f{constructor(){super(),this.map={"a:hlinkClick":new c,"a:extLst":new u}}get tag(){return"xdr:cNvPr"}render(n,r){n.openNode(this.tag,{id:r.index,name:`Picture ${r.index}`}),this.map["a:hlinkClick"].render(n,r),this.map["a:extLst"].render(n,r),n.closeNode()}parseOpen(n){if(this.parser)return this.parser.parseOpen(n),!0;switch(n.name){case this.tag:this.reset();break;default:this.parser=this.map[n.name],this.parser&&this.parser.parseOpen(n);break}return!0}parseText(){}parseClose(n){if(this.parser)return this.parser.parseClose(n)||(this.parser=void 0),!0;switch(n){case this.tag:return this.model=this.map["a:hlinkClick"].model,!1;default:return!0}}}d.exports=s},{"../base-xform":32,"./ext-lst-xform":63,"./hlink-click-xform":65}],61:[function(e,d,m){const f=e("../base-xform"),c=e("../simple/integer-xform");class u extends f{constructor(t){super(),this.tag=t.tag,this.map={"xdr:col":new c({tag:"xdr:col",zero:!0}),"xdr:colOff":new c({tag:"xdr:colOff",zero:!0}),"xdr:row":new c({tag:"xdr:row",zero:!0}),"xdr:rowOff":new c({tag:"xdr:rowOff",zero:!0})}}render(t,n){t.openNode(this.tag),this.map["xdr:col"].render(t,n.nativeCol),this.map["xdr:colOff"].render(t,n.nativeColOff),this.map["xdr:row"].render(t,n.nativeRow),this.map["xdr:rowOff"].render(t,n.nativeRowOff),t.closeNode()}parseOpen(t){if(this.parser)return this.parser.parseOpen(t),!0;switch(t.name){case this.tag:this.reset();break;default:this.parser=this.map[t.name],this.parser&&this.parser.parseOpen(t);break}return!0}parseText(t){this.parser&&this.parser.parseText(t)}parseClose(t){if(this.parser)return this.parser.parseClose(t)||(this.parser=void 0),!0;switch(t){case this.tag:return this.model={nativeCol:this.map["xdr:col"].model,nativeColOff:this.map["xdr:colOff"].model,nativeRow:this.map["xdr:row"].model,nativeRowOff:this.map["xdr:rowOff"].model},!1;default:return!0}}}d.exports=u},{"../base-xform":32,"../simple/integer-xform":118}],62:[function(e,d,m){const f=e("../../../utils/col-cache"),c=e("../../../utils/xml-stream"),u=e("../base-xform"),s=e("./two-cell-anchor-xform"),t=e("./one-cell-anchor-xform");function n(i){return(typeof i.range=="string"?f.decode(i.range):i.range).br?"xdr:twoCellAnchor":"xdr:oneCellAnchor"}class r extends u{constructor(){super(),this.map={"xdr:twoCellAnchor":new s,"xdr:oneCellAnchor":new t}}prepare(o){o.anchors.forEach((l,a)=>{l.anchorType=n(l),this.map[l.anchorType].prepare(l,{index:a})})}get tag(){return"xdr:wsDr"}render(o,l){o.openXml(c.StdDocAttributes),o.openNode(this.tag,r.DRAWING_ATTRIBUTES),l.anchors.forEach(a=>{this.map[a.anchorType].render(o,a)}),o.closeNode()}parseOpen(o){if(this.parser)return this.parser.parseOpen(o),!0;switch(o.name){case this.tag:this.reset(),this.model={anchors:[]};break;default:this.parser=this.map[o.name],this.parser&&this.parser.parseOpen(o);break}return!0}parseText(o){this.parser&&this.parser.parseText(o)}parseClose(o){if(this.parser)return this.parser.parseClose(o)||(this.model.anchors.push(this.parser.model),this.parser=void 0),!0;switch(o){case this.tag:return!1;default:return!0}}reconcile(o,l){o.anchors.forEach(a=>{a.br?this.map["xdr:twoCellAnchor"].reconcile(a,l):this.map["xdr:oneCellAnchor"].reconcile(a,l)})}}r.DRAWING_ATTRIBUTES={"xmlns:xdr":"http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing","xmlns:a":"http://schemas.openxmlformats.org/drawingml/2006/main"},d.exports=r},{"../../../utils/col-cache":19,"../../../utils/xml-stream":28,"../base-xform":32,"./one-cell-anchor-xform":67,"./two-cell-anchor-xform":70}],63:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"a:extLst"}render(s){s.openNode(this.tag),s.openNode("a:ext",{uri:"{FF2B5EF4-FFF2-40B4-BE49-F238E27FC236}"}),s.leafNode("a16:creationId",{"xmlns:a16":"http://schemas.microsoft.com/office/drawing/2014/main",id:"{00000000-0008-0000-0000-000002000000}"}),s.closeNode(),s.closeNode()}parseOpen(s){switch(s.name){case this.tag:return!0;default:return!0}}parseText(){}parseClose(s){switch(s){case this.tag:return!1;default:return!0}}}d.exports=c},{"../base-xform":32}],64:[function(e,d,m){const f=e("../base-xform"),c=9525;class u extends f{constructor(t){super(),this.tag=t.tag,this.map={}}render(t,n){t.openNode(this.tag);const r=Math.floor(n.width*c),i=Math.floor(n.height*c);t.addAttribute("cx",r),t.addAttribute("cy",i),t.closeNode()}parseOpen(t){return t.name===this.tag?(this.model={width:parseInt(t.attributes.cx||"0",10)/c,height:parseInt(t.attributes.cy||"0",10)/c},!0):!1}parseText(){}parseClose(){return!1}}d.exports=u},{"../base-xform":32}],65:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"a:hlinkClick"}render(s,t){t.hyperlinks&&t.hyperlinks.rId&&s.leafNode(this.tag,{"xmlns:r":"http://schemas.openxmlformats.org/officeDocument/2006/relationships","r:id":t.hyperlinks.rId,tooltip:t.hyperlinks.tooltip})}parseOpen(s){switch(s.name){case this.tag:return this.model={hyperlinks:{rId:s.attributes["r:id"],tooltip:s.attributes.tooltip}},!0;default:return!0}}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],66:[function(e,d,m){const f=e("../base-xform"),c=e("./c-nv-pr-xform"),u=e("./c-nv-pic-pr-xform");class s extends f{constructor(){super(),this.map={"xdr:cNvPr":new c,"xdr:cNvPicPr":new u}}get tag(){return"xdr:nvPicPr"}render(n,r){n.openNode(this.tag),this.map["xdr:cNvPr"].render(n,r),this.map["xdr:cNvPicPr"].render(n,r),n.closeNode()}parseOpen(n){if(this.parser)return this.parser.parseOpen(n),!0;switch(n.name){case this.tag:this.reset();break;default:this.parser=this.map[n.name],this.parser&&this.parser.parseOpen(n);break}return!0}parseText(){}parseClose(n){if(this.parser)return this.parser.parseClose(n)||(this.parser=void 0),!0;switch(n){case this.tag:return this.model=this.map["xdr:cNvPr"].model,!1;default:return!0}}}d.exports=s},{"../base-xform":32,"./c-nv-pic-pr-xform":59,"./c-nv-pr-xform":60}],67:[function(e,d,m){const f=e("./base-cell-anchor-xform"),c=e("../static-xform"),u=e("./cell-position-xform"),s=e("./ext-xform"),t=e("./pic-xform");class n extends f{constructor(){super(),this.map={"xdr:from":new u({tag:"xdr:from"}),"xdr:ext":new s({tag:"xdr:ext"}),"xdr:pic":new t,"xdr:clientData":new c({tag:"xdr:clientData"})}}get tag(){return"xdr:oneCellAnchor"}prepare(i,o){this.map["xdr:pic"].prepare(i.picture,o)}render(i,o){i.openNode(this.tag,{editAs:o.range.editAs||"oneCell"}),this.map["xdr:from"].render(i,o.range.tl),this.map["xdr:ext"].render(i,o.range.ext),this.map["xdr:pic"].render(i,o.picture),this.map["xdr:clientData"].render(i,{}),i.closeNode()}parseClose(i){if(this.parser)return this.parser.parseClose(i)||(this.parser=void 0),!0;switch(i){case this.tag:return this.model.range.tl=this.map["xdr:from"].model,this.model.range.ext=this.map["xdr:ext"].model,this.model.picture=this.map["xdr:pic"].model,!1;default:return!0}}reconcile(i,o){i.medium=this.reconcilePicture(i.picture,o)}}d.exports=n},{"../static-xform":120,"./base-cell-anchor-xform":56,"./cell-position-xform":61,"./ext-xform":64,"./pic-xform":68}],68:[function(e,d,m){const f=e("../base-xform"),c=e("../static-xform"),u=e("./blip-fill-xform"),s=e("./nv-pic-pr-xform"),t=e("./sp-pr");class n extends f{constructor(){super(),this.map={"xdr:nvPicPr":new s,"xdr:blipFill":new u,"xdr:spPr":new c(t)}}get tag(){return"xdr:pic"}prepare(i,o){i.index=o.index+1}render(i,o){i.openNode(this.tag),this.map["xdr:nvPicPr"].render(i,o),this.map["xdr:blipFill"].render(i,o),this.map["xdr:spPr"].render(i,o),i.closeNode()}parseOpen(i){if(this.parser)return this.parser.parseOpen(i),!0;switch(i.name){case this.tag:this.reset();break;default:this.parser=this.map[i.name],this.parser&&this.parser.parseOpen(i);break}return!0}parseText(){}parseClose(i){if(this.parser)return this.parser.parseClose(i)||(this.mergeModel(this.parser.model),this.parser=void 0),!0;switch(i){case this.tag:return!1;default:return!0}}}d.exports=n},{"../base-xform":32,"../static-xform":120,"./blip-fill-xform":57,"./nv-pic-pr-xform":66,"./sp-pr":69}],69:[function(e,d,m){d.exports={tag:"xdr:spPr",c:[{tag:"a:xfrm",c:[{tag:"a:off",$:{x:"0",y:"0"}},{tag:"a:ext",$:{cx:"0",cy:"0"}}]},{tag:"a:prstGeom",$:{prst:"rect"},c:[{tag:"a:avLst"}]}]}},{}],70:[function(e,d,m){const f=e("./base-cell-anchor-xform"),c=e("../static-xform"),u=e("./cell-position-xform"),s=e("./pic-xform");class t extends f{constructor(){super(),this.map={"xdr:from":new u({tag:"xdr:from"}),"xdr:to":new u({tag:"xdr:to"}),"xdr:pic":new s,"xdr:clientData":new c({tag:"xdr:clientData"})}}get tag(){return"xdr:twoCellAnchor"}prepare(r,i){this.map["xdr:pic"].prepare(r.picture,i)}render(r,i){r.openNode(this.tag,{editAs:i.range.editAs||"oneCell"}),this.map["xdr:from"].render(r,i.range.tl),this.map["xdr:to"].render(r,i.range.br),this.map["xdr:pic"].render(r,i.picture),this.map["xdr:clientData"].render(r,{}),r.closeNode()}parseClose(r){if(this.parser)return this.parser.parseClose(r)||(this.parser=void 0),!0;switch(r){case this.tag:return this.model.range.tl=this.map["xdr:from"].model,this.model.range.br=this.map["xdr:to"].model,this.model.picture=this.map["xdr:pic"].model,!1;default:return!0}}reconcile(r,i){r.medium=this.reconcilePicture(r.picture,i)}}d.exports=t},{"../static-xform":120,"./base-cell-anchor-xform":56,"./cell-position-xform":61,"./pic-xform":68}],71:[function(e,d,m){const f=e("./base-xform");class c extends f{constructor(s){super(),this.tag=s.tag,this.always=!!s.always,this.count=s.count,this.empty=s.empty,this.$count=s.$count||"count",this.$=s.$,this.childXform=s.childXform,this.maxItems=s.maxItems}prepare(s,t){const{childXform:n}=this;s&&s.forEach((r,i)=>{t.index=i,n.prepare(r,t)})}render(s,t){if(this.always||t&&t.length){s.openNode(this.tag,this.$),this.count&&s.addAttribute(this.$count,t&&t.length||0);const{childXform:n}=this;(t||[]).forEach((r,i)=>{n.render(s,r,i)}),s.closeNode()}else this.empty&&s.leafNode(this.tag)}parseOpen(s){if(this.parser)return this.parser.parseOpen(s),!0;switch(s.name){case this.tag:return this.model=[],!0;default:return this.childXform.parseOpen(s)?(this.parser=this.childXform,!0):!1}}parseText(s){this.parser&&this.parser.parseText(s)}parseClose(s){if(this.parser){if(!this.parser.parseClose(s)&&(this.model.push(this.parser.model),this.parser=void 0,this.maxItems&&this.model.length>this.maxItems))throw new Error(`Max ${this.childXform.tag} count (${this.maxItems}) exceeded`);return!0}return!1}reconcile(s,t){if(s){const{childXform:n}=this;s.forEach(r=>{n.reconcile(r,t)})}}}d.exports=c},{"./base-xform":32}],72:[function(e,d,m){const f=e("../../../utils/col-cache"),c=e("../base-xform");class u extends c{get tag(){return"autoFilter"}render(t,n){if(n)if(typeof n=="string")t.leafNode("autoFilter",{ref:n});else{const r=function(l){return typeof l=="string"?l:f.getAddress(l.row,l.column).address},i=r(n.from),o=r(n.to);i&&o&&t.leafNode("autoFilter",{ref:`${i}:${o}`})}}parseOpen(t){t.name==="autoFilter"&&(this.model=t.attributes.ref)}}d.exports=u},{"../../../utils/col-cache":19,"../base-xform":32}],73:[function(e,d,m){const f=e("../../../utils/utils"),c=e("../base-xform"),u=e("../../../doc/range"),s=e("../../../doc/enums"),t=e("../strings/rich-text-xform");function n(o){if(o==null)return s.ValueType.Null;if(o instanceof String||typeof o=="string")return s.ValueType.String;if(typeof o=="number")return s.ValueType.Number;if(typeof o=="boolean")return s.ValueType.Boolean;if(o instanceof Date)return s.ValueType.Date;if(o.text&&o.hyperlink)return s.ValueType.Hyperlink;if(o.formula)return s.ValueType.Formula;if(o.error)return s.ValueType.Error;throw new Error("I could not understand type of value")}function r(o){switch(o.type){case s.ValueType.Formula:return n(o.result);default:return o.type}}class i extends c{constructor(){super(),this.richTextXForm=new t}get tag(){return"c"}prepare(l,a){const g=a.styles.addStyleModel(l.style||{},r(l));switch(g&&(l.styleId=g),l.comment&&a.comments.push({...l.comment,ref:l.address}),l.type){case s.ValueType.String:case s.ValueType.RichText:a.sharedStrings&&(l.ssId=a.sharedStrings.add(l.value));break;case s.ValueType.Date:a.date1904&&(l.date1904=!0);break;case s.ValueType.Hyperlink:a.sharedStrings&&l.text!==void 0&&l.text!==null&&(l.ssId=a.sharedStrings.add(l.text)),a.hyperlinks.push({address:l.address,target:l.hyperlink,tooltip:l.tooltip});break;case s.ValueType.Merge:a.merges.add(l);break;case s.ValueType.Formula:if(a.date1904&&(l.date1904=!0),l.shareType==="shared"&&(l.si=a.siFormulae++),l.formula)a.formulae[l.address]=l;else if(l.sharedFormula){const v=a.formulae[l.sharedFormula];if(!v)throw new Error(`Shared Formula master must exist above and or left of clone for cell ${l.address}`);v.si===void 0?(v.shareType="shared",v.si=a.siFormulae++,v.range=new u(v.address,l.address)):v.range&&v.range.expandToAddress(l.address),l.si=v.si}break}}renderFormula(l,a){let g=null;switch(a.shareType){case"shared":g={t:"shared",ref:a.ref||a.range.range,si:a.si};break;case"array":g={t:"array",ref:a.ref};break;default:a.si!==void 0&&(g={t:"shared",si:a.si});break}switch(n(a.result)){case s.ValueType.Null:l.leafNode("f",g,a.formula);break;case s.ValueType.String:l.addAttribute("t","str"),l.leafNode("f",g,a.formula),l.leafNode("v",null,a.result);break;case s.ValueType.Number:l.leafNode("f",g,a.formula),l.leafNode("v",null,a.result);break;case s.ValueType.Boolean:l.addAttribute("t","b"),l.leafNode("f",g,a.formula),l.leafNode("v",null,a.result?1:0);break;case s.ValueType.Error:l.addAttribute("t","e"),l.leafNode("f",g,a.formula),l.leafNode("v",null,a.result.error);break;case s.ValueType.Date:l.leafNode("f",g,a.formula),l.leafNode("v",null,f.dateToExcel(a.result,a.date1904));break;default:throw new Error("I could not understand type of value")}}render(l,a){if(!(a.type===s.ValueType.Null&&!a.styleId)){switch(l.openNode("c"),l.addAttribute("r",a.address),a.styleId&&l.addAttribute("s",a.styleId),a.type){case s.ValueType.Null:break;case s.ValueType.Number:l.leafNode("v",null,a.value);break;case s.ValueType.Boolean:l.addAttribute("t","b"),l.leafNode("v",null,a.value?"1":"0");break;case s.ValueType.Error:l.addAttribute("t","e"),l.leafNode("v",null,a.value.error);break;case s.ValueType.String:case s.ValueType.RichText:a.ssId!==void 0?(l.addAttribute("t","s"),l.leafNode("v",null,a.ssId)):a.value&&a.value.richText?(l.addAttribute("t","inlineStr"),l.openNode("is"),a.value.richText.forEach(g=>{this.richTextXForm.render(l,g)}),l.closeNode("is")):(l.addAttribute("t","str"),l.leafNode("v",null,a.value));break;case s.ValueType.Date:l.leafNode("v",null,f.dateToExcel(a.value,a.date1904));break;case s.ValueType.Hyperlink:a.ssId!==void 0?(l.addAttribute("t","s"),l.leafNode("v",null,a.ssId)):(l.addAttribute("t","str"),l.leafNode("v",null,a.text));break;case s.ValueType.Formula:this.renderFormula(l,a);break;case s.ValueType.Merge:break}l.closeNode()}}parseOpen(l){if(this.parser)return this.parser.parseOpen(l),!0;switch(l.name){case"c":return this.model={address:l.attributes.r},this.t=l.attributes.t,l.attributes.s&&(this.model.styleId=parseInt(l.attributes.s,10)),!0;case"f":return this.currentNode="f",this.model.si=l.attributes.si,this.model.shareType=l.attributes.t,this.model.ref=l.attributes.ref,!0;case"v":return this.currentNode="v",!0;case"t":return this.currentNode="t",!0;case"r":return this.parser=this.richTextXForm,this.parser.parseOpen(l),!0;default:return!1}}parseText(l){if(this.parser){this.parser.parseText(l);return}switch(this.currentNode){case"f":this.model.formula=this.model.formula?this.model.formula+l:l;break;case"v":case"t":this.model.value&&this.model.value.richText?this.model.value.richText.text=this.model.value.richText.text?this.model.value.richText.text+l:l:this.model.value=this.model.value?this.model.value+l:l;break}}parseClose(l){switch(l){case"c":{const{model:a}=this;if(a.formula||a.shareType)a.type=s.ValueType.Formula,a.value&&(this.t==="str"?a.result=f.xmlDecode(a.value):this.t==="b"?a.result=parseInt(a.value,10)!==0:this.t==="e"?a.result={error:a.value}:a.result=parseFloat(a.value),a.value=void 0);else if(a.value!==void 0)switch(this.t){case"s":a.type=s.ValueType.String,a.value=parseInt(a.value,10);break;case"str":a.type=s.ValueType.String,a.value=f.xmlDecode(a.value);break;case"inlineStr":a.type=s.ValueType.String;break;case"b":a.type=s.ValueType.Boolean,a.value=parseInt(a.value,10)!==0;break;case"e":a.type=s.ValueType.Error,a.value={error:a.value};break;default:a.type=s.ValueType.Number,a.value=parseFloat(a.value);break}else a.styleId?a.type=s.ValueType.Null:a.type=s.ValueType.Merge;return!1}case"f":case"v":case"is":return this.currentNode=void 0,!0;case"t":return this.parser?(this.parser.parseClose(l),!0):(this.currentNode=void 0,!0);case"r":return this.model.value=this.model.value||{},this.model.value.richText=this.model.value.richText||[],this.model.value.richText.push(this.parser.model),this.parser=void 0,this.currentNode=void 0,!0;default:return this.parser?(this.parser.parseClose(l),!0):!1}}reconcile(l,a){const g=l.styleId&&a.styles&&a.styles.getStyleModel(l.styleId);switch(g&&(l.style=g),l.styleId!==void 0&&(l.styleId=void 0),l.type){case s.ValueType.String:typeof l.value=="number"&&a.sharedStrings&&(l.value=a.sharedStrings.getString(l.value)),l.value.richText&&(l.type=s.ValueType.RichText);break;case s.ValueType.Number:g&&f.isDateFmt(g.numFmt)&&(l.type=s.ValueType.Date,l.value=f.excelToDate(l.value,a.date1904));break;case s.ValueType.Formula:l.result!==void 0&&g&&f.isDateFmt(g.numFmt)&&(l.result=f.excelToDate(l.result,a.date1904)),l.shareType==="shared"&&(l.ref?a.formulae[l.si]=l.address:(l.sharedFormula=a.formulae[l.si],delete l.shareType),delete l.si);break}const v=a.hyperlinkMap[l.address];v&&(l.type===s.ValueType.Formula?(l.text=l.result,l.result=void 0):(l.text=l.value,l.value=void 0),l.type=s.ValueType.Hyperlink,l.hyperlink=v);const h=a.commentsMap&&a.commentsMap[l.address];h&&(l.comment=h)}}d.exports=i},{"../../../doc/enums":7,"../../../doc/range":10,"../../../utils/utils":27,"../base-xform":32,"../strings/rich-text-xform":122}],74:[function(e,d,m){const f=e("../../base-xform");class c extends f{get tag(){return"x14:cfIcon"}render(s,t){s.leafNode(this.tag,{iconSet:t.iconSet,iconId:t.iconId})}parseOpen(s){let{attributes:t}=s;this.model={iconSet:t.iconSet,iconId:f.toIntValue(t.iconId)}}parseClose(s){return s!==this.tag}}d.exports=c},{"../../base-xform":32}],75:[function(e,d,m){const{v4:f}=e("uuid"),c=e("../../base-xform"),u=e("../../composite-xform"),s=e("./databar-ext-xform"),t=e("./icon-set-ext-xform"),n={"3Triangles":!0,"3Stars":!0,"5Boxes":!0};class r extends u{constructor(){super(),this.map={"x14:dataBar":this.databarXform=new s,"x14:iconSet":this.iconSetXform=new t}}get tag(){return"x14:cfRule"}static isExt(o){return o.type==="dataBar"?s.isExt(o):!!(o.type==="iconSet"&&(o.custom||n[o.iconSet]))}prepare(o){r.isExt(o)&&(o.x14Id=`{${f()}}`.toUpperCase())}render(o,l){if(r.isExt(l))switch(l.type){case"dataBar":this.renderDataBar(o,l);break;case"iconSet":this.renderIconSet(o,l);break}}renderDataBar(o,l){o.openNode(this.tag,{type:"dataBar",id:l.x14Id}),this.databarXform.render(o,l),o.closeNode()}renderIconSet(o,l){o.openNode(this.tag,{type:"iconSet",priority:l.priority,id:l.x14Id||`{${f()}}`}),this.iconSetXform.render(o,l),o.closeNode()}createNewModel(o){let{attributes:l}=o;return{type:l.type,x14Id:l.id,priority:c.toIntValue(l.priority)}}onParserClose(o,l){Object.assign(this.model,l.model)}}d.exports=r},{"../../base-xform":32,"../../composite-xform":48,"./databar-ext-xform":79,"./icon-set-ext-xform":81,uuid:528}],76:[function(e,d,m){const f=e("../../composite-xform"),c=e("./f-ext-xform");class u extends f{constructor(){super(),this.map={"xm:f":this.fExtXform=new c}}get tag(){return"x14:cfvo"}render(t,n){t.openNode(this.tag,{type:n.type}),n.value!==void 0&&this.fExtXform.render(t,n.value),t.closeNode()}createNewModel(t){return{type:t.attributes.type}}onParserClose(t,n){switch(t){case"xm:f":this.model.value=n.model?parseFloat(n.model):0;break}}}d.exports=u},{"../../composite-xform":48,"./f-ext-xform":80}],77:[function(e,d,m){const f=e("../../composite-xform"),c=e("./sqref-ext-xform"),u=e("./cf-rule-ext-xform");class s extends f{constructor(){super(),this.map={"xm:sqref":this.sqRef=new c,"x14:cfRule":this.cfRule=new u}}get tag(){return"x14:conditionalFormatting"}prepare(n,r){n.rules.forEach(i=>{this.cfRule.prepare(i,r)})}render(n,r){r.rules.some(u.isExt)&&(n.openNode(this.tag,{"xmlns:xm":"http://schemas.microsoft.com/office/excel/2006/main"}),r.rules.filter(u.isExt).forEach(i=>this.cfRule.render(n,i)),this.sqRef.render(n,r.ref),n.closeNode())}createNewModel(){return{rules:[]}}onParserClose(n,r){switch(n){case"xm:sqref":this.model.ref=r.model;break;case"x14:cfRule":this.model.rules.push(r.model);break}}}d.exports=s},{"../../composite-xform":48,"./cf-rule-ext-xform":75,"./sqref-ext-xform":82}],78:[function(e,d,m){const f=e("../../composite-xform"),c=e("./cf-rule-ext-xform"),u=e("./conditional-formatting-ext-xform");class s extends f{constructor(){super(),this.map={"x14:conditionalFormatting":this.cfXform=new u}}get tag(){return"x14:conditionalFormattings"}hasContent(n){return n.hasExtContent===void 0&&(n.hasExtContent=n.some(r=>r.rules.some(c.isExt))),n.hasExtContent}prepare(n,r){n.forEach(i=>{this.cfXform.prepare(i,r)})}render(n,r){this.hasContent(r)&&(n.openNode(this.tag),r.forEach(i=>this.cfXform.render(n,i)),n.closeNode())}createNewModel(){return[]}onParserClose(n,r){this.model.push(r.model)}}d.exports=s},{"../../composite-xform":48,"./cf-rule-ext-xform":75,"./conditional-formatting-ext-xform":77}],79:[function(e,d,m){const f=e("../../base-xform"),c=e("../../composite-xform"),u=e("../../style/color-xform"),s=e("./cfvo-ext-xform");class t extends c{constructor(){super(),this.map={"x14:cfvo":this.cfvoXform=new s,"x14:borderColor":this.borderColorXform=new u("x14:borderColor"),"x14:negativeBorderColor":this.negativeBorderColorXform=new u("x14:negativeBorderColor"),"x14:negativeFillColor":this.negativeFillColorXform=new u("x14:negativeFillColor"),"x14:axisColor":this.axisColorXform=new u("x14:axisColor")}}static isExt(r){return!r.gradient}get tag(){return"x14:dataBar"}render(r,i){r.openNode(this.tag,{minLength:f.toIntAttribute(i.minLength,0,!0),maxLength:f.toIntAttribute(i.maxLength,100,!0),border:f.toBoolAttribute(i.border,!1),gradient:f.toBoolAttribute(i.gradient,!0),negativeBarColorSameAsPositive:f.toBoolAttribute(i.negativeBarColorSameAsPositive,!0),negativeBarBorderColorSameAsPositive:f.toBoolAttribute(i.negativeBarBorderColorSameAsPositive,!0),axisPosition:f.toAttribute(i.axisPosition,"auto"),direction:f.toAttribute(i.direction,"leftToRight")}),i.cfvo.forEach(o=>{this.cfvoXform.render(r,o)}),this.borderColorXform.render(r,i.borderColor),this.negativeBorderColorXform.render(r,i.negativeBorderColor),this.negativeFillColorXform.render(r,i.negativeFillColor),this.axisColorXform.render(r,i.axisColor),r.closeNode()}createNewModel(r){let{attributes:i}=r;return{cfvo:[],minLength:f.toIntValue(i.minLength,0),maxLength:f.toIntValue(i.maxLength,100),border:f.toBoolValue(i.border,!1),gradient:f.toBoolValue(i.gradient,!0),negativeBarColorSameAsPositive:f.toBoolValue(i.negativeBarColorSameAsPositive,!0),negativeBarBorderColorSameAsPositive:f.toBoolValue(i.negativeBarBorderColorSameAsPositive,!0),axisPosition:f.toStringValue(i.axisPosition,"auto"),direction:f.toStringValue(i.direction,"leftToRight")}}onParserClose(r,i){const[,o]=r.split(":");switch(o){case"cfvo":this.model.cfvo.push(i.model);break;default:this.model[o]=i.model;break}}}d.exports=t},{"../../base-xform":32,"../../composite-xform":48,"../../style/color-xform":128,"./cfvo-ext-xform":76}],80:[function(e,d,m){const f=e("../../base-xform");class c extends f{get tag(){return"xm:f"}render(s,t){s.leafNode(this.tag,null,t)}parseOpen(){this.model=""}parseText(s){this.model+=s}parseClose(s){return s!==this.tag}}d.exports=c},{"../../base-xform":32}],81:[function(e,d,m){const f=e("../../base-xform"),c=e("../../composite-xform"),u=e("./cfvo-ext-xform"),s=e("./cf-icon-ext-xform");class t extends c{constructor(){super(),this.map={"x14:cfvo":this.cfvoXform=new u,"x14:cfIcon":this.cfIconXform=new s}}get tag(){return"x14:iconSet"}render(r,i){r.openNode(this.tag,{iconSet:f.toStringAttribute(i.iconSet),reverse:f.toBoolAttribute(i.reverse,!1),showValue:f.toBoolAttribute(i.showValue,!0),custom:f.toBoolAttribute(i.icons,!1)}),i.cfvo.forEach(o=>{this.cfvoXform.render(r,o)}),i.icons&&i.icons.forEach((o,l)=>{o.iconId=l,this.cfIconXform.render(r,o)}),r.closeNode()}createNewModel(r){let{attributes:i}=r;return{cfvo:[],iconSet:f.toStringValue(i.iconSet,"3TrafficLights"),reverse:f.toBoolValue(i.reverse,!1),showValue:f.toBoolValue(i.showValue,!0)}}onParserClose(r,i){const[,o]=r.split(":");switch(o){case"cfvo":this.model.cfvo.push(i.model);break;case"cfIcon":this.model.icons||(this.model.icons=[]),this.model.icons.push(i.model);break;default:this.model[o]=i.model;break}}}d.exports=t},{"../../base-xform":32,"../../composite-xform":48,"./cf-icon-ext-xform":74,"./cfvo-ext-xform":76}],82:[function(e,d,m){const f=e("../../base-xform");class c extends f{get tag(){return"xm:sqref"}render(s,t){s.leafNode(this.tag,null,t)}parseOpen(){this.model=""}parseText(s){this.model+=s}parseClose(s){return s!==this.tag}}d.exports=c},{"../../base-xform":32}],83:[function(e,d,m){const f=e("../../base-xform"),c=e("../../composite-xform"),u=e("../../../../doc/range"),s=e("./databar-xform"),t=e("./ext-lst-ref-xform"),n=e("./formula-xform"),r=e("./color-scale-xform"),i=e("./icon-set-xform"),o={"3Triangles":!0,"3Stars":!0,"5Boxes":!0},l=h=>{if(h.formulae&&h.formulae[0])return h.formulae[0];const w=new u(h.ref),{tl:y}=w;switch(h.operator){case"containsText":return`NOT(ISERROR(SEARCH("${h.text}",${y})))`;case"containsBlanks":return`LEN(TRIM(${y}))=0`;case"notContainsBlanks":return`LEN(TRIM(${y}))>0`;case"containsErrors":return`ISERROR(${y})`;case"notContainsErrors":return`NOT(ISERROR(${y}))`;default:return}},a=h=>{if(h.formulae&&h.formulae[0])return h.formulae[0];const w=new u(h.ref),{tl:y}=w;switch(h.timePeriod){case"thisWeek":return`AND(TODAY()-ROUNDDOWN(${y},0)<=WEEKDAY(TODAY())-1,ROUNDDOWN(${y},0)-TODAY()<=7-WEEKDAY(TODAY()))`;case"lastWeek":return`AND(TODAY()-ROUNDDOWN(${y},0)>=(WEEKDAY(TODAY())),TODAY()-ROUNDDOWN(${y},0)<(WEEKDAY(TODAY())+7))`;case"nextWeek":return`AND(ROUNDDOWN(${y},0)-TODAY()>(7-WEEKDAY(TODAY())),ROUNDDOWN(${y},0)-TODAY()<(15-WEEKDAY(TODAY())))`;case"yesterday":return`FLOOR(${y},1)=TODAY()-1`;case"today":return`FLOOR(${y},1)=TODAY()`;case"tomorrow":return`FLOOR(${y},1)=TODAY()+1`;case"last7Days":return`AND(TODAY()-FLOOR(${y},1)<=6,FLOOR(${y},1)<=TODAY())`;case"lastMonth":return`AND(MONTH(${y})=MONTH(EDATE(TODAY(),0-1)),YEAR(${y})=YEAR(EDATE(TODAY(),0-1)))`;case"thisMonth":return`AND(MONTH(${y})=MONTH(TODAY()),YEAR(${y})=YEAR(TODAY()))`;case"nextMonth":return`AND(MONTH(${y})=MONTH(EDATE(TODAY(),0+1)),YEAR(${y})=YEAR(EDATE(TODAY(),0+1)))`;default:return}},g=h=>{const{type:w,operator:y}=h;switch(w){case"containsText":case"containsBlanks":case"notContainsBlanks":case"containsErrors":case"notContainsErrors":return{type:"containsText",operator:w};default:return{type:w,operator:y}}};class v extends c{constructor(){super(),this.map={dataBar:this.databarXform=new s,extLst:this.extLstRefXform=new t,formula:this.formulaXform=new n,colorScale:this.colorScaleXform=new r,iconSet:this.iconSetXform=new i}}get tag(){return"cfRule"}static isPrimitive(w){return!(w.type==="iconSet"&&(w.custom||o[w.iconSet]))}render(w,y){switch(y.type){case"expression":this.renderExpression(w,y);break;case"cellIs":this.renderCellIs(w,y);break;case"top10":this.renderTop10(w,y);break;case"aboveAverage":this.renderAboveAverage(w,y);break;case"dataBar":this.renderDataBar(w,y);break;case"colorScale":this.renderColorScale(w,y);break;case"iconSet":this.renderIconSet(w,y);break;case"containsText":this.renderText(w,y);break;case"timePeriod":this.renderTimePeriod(w,y);break}}renderExpression(w,y){w.openNode(this.tag,{type:"expression",dxfId:y.dxfId,priority:y.priority}),this.formulaXform.render(w,y.formulae[0]),w.closeNode()}renderCellIs(w,y){w.openNode(this.tag,{type:"cellIs",dxfId:y.dxfId,priority:y.priority,operator:y.operator}),y.formulae.forEach(S=>{this.formulaXform.render(w,S)}),w.closeNode()}renderTop10(w,y){w.leafNode(this.tag,{type:"top10",dxfId:y.dxfId,priority:y.priority,percent:f.toBoolAttribute(y.percent,!1),bottom:f.toBoolAttribute(y.bottom,!1),rank:f.toIntValue(y.rank,10,!0)})}renderAboveAverage(w,y){w.leafNode(this.tag,{type:"aboveAverage",dxfId:y.dxfId,priority:y.priority,aboveAverage:f.toBoolAttribute(y.aboveAverage,!0)})}renderDataBar(w,y){w.openNode(this.tag,{type:"dataBar",priority:y.priority}),this.databarXform.render(w,y),this.extLstRefXform.render(w,y),w.closeNode()}renderColorScale(w,y){w.openNode(this.tag,{type:"colorScale",priority:y.priority}),this.colorScaleXform.render(w,y),w.closeNode()}renderIconSet(w,y){v.isPrimitive(y)&&(w.openNode(this.tag,{type:"iconSet",priority:y.priority}),this.iconSetXform.render(w,y),w.closeNode())}renderText(w,y){w.openNode(this.tag,{type:y.operator,dxfId:y.dxfId,priority:y.priority,operator:f.toStringAttribute(y.operator,"containsText")});const S=l(y);S&&this.formulaXform.render(w,S),w.closeNode()}renderTimePeriod(w,y){w.openNode(this.tag,{type:"timePeriod",dxfId:y.dxfId,priority:y.priority,timePeriod:y.timePeriod});const S=a(y);S&&this.formulaXform.render(w,S),w.closeNode()}createNewModel(w){let{attributes:y}=w;return{...g(y),dxfId:f.toIntValue(y.dxfId),priority:f.toIntValue(y.priority),timePeriod:y.timePeriod,percent:f.toBoolValue(y.percent),bottom:f.toBoolValue(y.bottom),rank:f.toIntValue(y.rank),aboveAverage:f.toBoolValue(y.aboveAverage)}}onParserClose(w,y){switch(w){case"dataBar":case"extLst":case"colorScale":case"iconSet":Object.assign(this.model,y.model);break;case"formula":this.model.formulae=this.model.formulae||[],this.model.formulae.push(y.model);break}}}d.exports=v},{"../../../../doc/range":10,"../../base-xform":32,"../../composite-xform":48,"./color-scale-xform":85,"./databar-xform":88,"./ext-lst-ref-xform":89,"./formula-xform":90,"./icon-set-xform":91}],84:[function(e,d,m){const f=e("../../base-xform");class c extends f{get tag(){return"cfvo"}render(s,t){s.leafNode(this.tag,{type:t.type,val:t.value})}parseOpen(s){this.model={type:s.attributes.type,value:f.toFloatValue(s.attributes.val)}}parseClose(s){return s!==this.tag}}d.exports=c},{"../../base-xform":32}],85:[function(e,d,m){const f=e("../../composite-xform"),c=e("../../style/color-xform"),u=e("./cfvo-xform");class s extends f{constructor(){super(),this.map={cfvo:this.cfvoXform=new u,color:this.colorXform=new c}}get tag(){return"colorScale"}render(n,r){n.openNode(this.tag),r.cfvo.forEach(i=>{this.cfvoXform.render(n,i)}),r.color.forEach(i=>{this.colorXform.render(n,i)}),n.closeNode()}createNewModel(n){return{cfvo:[],color:[]}}onParserClose(n,r){this.model[n].push(r.model)}}d.exports=s},{"../../composite-xform":48,"../../style/color-xform":128,"./cfvo-xform":84}],86:[function(e,d,m){const f=e("../../composite-xform"),c=e("./cf-rule-xform");class u extends f{constructor(){super(),this.map={cfRule:new c}}get tag(){return"conditionalFormatting"}render(t,n){n.rules.some(c.isPrimitive)&&(t.openNode(this.tag,{sqref:n.ref}),n.rules.forEach(r=>{c.isPrimitive(r)&&(r.ref=n.ref,this.map.cfRule.render(t,r))}),t.closeNode())}createNewModel(t){let{attributes:n}=t;return{ref:n.sqref,rules:[]}}onParserClose(t,n){this.model.rules.push(n.model)}}d.exports=u},{"../../composite-xform":48,"./cf-rule-xform":83}],87:[function(e,d,m){const f=e("../../base-xform"),c=e("./conditional-formatting-xform");class u extends f{constructor(){super(),this.cfXform=new c}get tag(){return"conditionalFormatting"}reset(){this.model=[]}prepare(t,n){let r=t.reduce((i,o)=>Math.max(i,...o.rules.map(l=>l.priority||0)),1);t.forEach(i=>{i.rules.forEach(o=>{o.priority||(o.priority=r++),o.style&&(o.dxfId=n.styles.addDxfStyle(o.style))})})}render(t,n){n.forEach(r=>{this.cfXform.render(t,r)})}parseOpen(t){if(this.parser)return this.parser.parseOpen(t),!0;switch(t.name){case"conditionalFormatting":return this.parser=this.cfXform,this.parser.parseOpen(t),!0;default:return!1}}parseText(t){this.parser&&this.parser.parseText(t)}parseClose(t){return this.parser?this.parser.parseClose(t)?!0:(this.model.push(this.parser.model),this.parser=void 0,!1):!1}reconcile(t,n){t.forEach(r=>{r.rules.forEach(i=>{i.dxfId!==void 0&&(i.style=n.styles.getDxfStyle(i.dxfId),delete i.dxfId)})})}}d.exports=u},{"../../base-xform":32,"./conditional-formatting-xform":86}],88:[function(e,d,m){const f=e("../../composite-xform"),c=e("../../style/color-xform"),u=e("./cfvo-xform");class s extends f{constructor(){super(),this.map={cfvo:this.cfvoXform=new u,color:this.colorXform=new c}}get tag(){return"dataBar"}render(n,r){n.openNode(this.tag),r.cfvo.forEach(i=>{this.cfvoXform.render(n,i)}),this.colorXform.render(n,r.color),n.closeNode()}createNewModel(){return{cfvo:[]}}onParserClose(n,r){switch(n){case"cfvo":this.model.cfvo.push(r.model);break;case"color":this.model.color=r.model;break}}}d.exports=s},{"../../composite-xform":48,"../../style/color-xform":128,"./cfvo-xform":84}],89:[function(e,d,m){const f=e("../../base-xform"),c=e("../../composite-xform");class u extends f{get tag(){return"x14:id"}render(r,i){r.leafNode(this.tag,null,i)}parseOpen(){this.model=""}parseText(r){this.model+=r}parseClose(r){return r!==this.tag}}class s extends c{constructor(){super(),this.map={"x14:id":this.idXform=new u}}get tag(){return"ext"}render(r,i){r.openNode(this.tag,{uri:"{B025F937-C7B1-47D3-B67F-A62EFF666E3E}","xmlns:x14":"http://schemas.microsoft.com/office/spreadsheetml/2009/9/main"}),this.idXform.render(r,i.x14Id),r.closeNode()}createNewModel(){return{}}onParserClose(r,i){this.model.x14Id=i.model}}class t extends c{constructor(){super(),this.map={ext:new s}}get tag(){return"extLst"}render(r,i){r.openNode(this.tag),this.map.ext.render(r,i),r.closeNode()}createNewModel(){return{}}onParserClose(r,i){Object.assign(this.model,i.model)}}d.exports=t},{"../../base-xform":32,"../../composite-xform":48}],90:[function(e,d,m){const f=e("../../base-xform");class c extends f{get tag(){return"formula"}render(s,t){s.leafNode(this.tag,null,t)}parseOpen(){this.model=""}parseText(s){this.model+=s}parseClose(s){return s!==this.tag}}d.exports=c},{"../../base-xform":32}],91:[function(e,d,m){const f=e("../../base-xform"),c=e("../../composite-xform"),u=e("./cfvo-xform");class s extends c{constructor(){super(),this.map={cfvo:this.cfvoXform=new u}}get tag(){return"iconSet"}render(n,r){n.openNode(this.tag,{iconSet:f.toStringAttribute(r.iconSet,"3TrafficLights"),reverse:f.toBoolAttribute(r.reverse,!1),showValue:f.toBoolAttribute(r.showValue,!0)}),r.cfvo.forEach(i=>{this.cfvoXform.render(n,i)}),n.closeNode()}createNewModel(n){let{attributes:r}=n;return{iconSet:f.toStringValue(r.iconSet,"3TrafficLights"),reverse:f.toBoolValue(r.reverse),showValue:f.toBoolValue(r.showValue),cfvo:[]}}onParserClose(n,r){this.model[n].push(r.model)}}d.exports=s},{"../../base-xform":32,"../../composite-xform":48,"./cfvo-xform":84}],92:[function(e,d,m){const f=e("../../../utils/utils"),c=e("../base-xform");class u extends c{get tag(){return"col"}prepare(t,n){const r=n.styles.addStyleModel(t.style||{});r&&(t.styleId=r)}render(t,n){t.openNode("col"),t.addAttribute("min",n.min),t.addAttribute("max",n.max),n.width&&t.addAttribute("width",n.width),n.styleId&&t.addAttribute("style",n.styleId),n.hidden&&t.addAttribute("hidden","1"),n.bestFit&&t.addAttribute("bestFit","1"),n.outlineLevel&&t.addAttribute("outlineLevel",n.outlineLevel),n.collapsed&&t.addAttribute("collapsed","1"),t.addAttribute("customWidth","1"),t.closeNode()}parseOpen(t){if(t.name==="col"){const n=this.model={min:parseInt(t.attributes.min||"0",10),max:parseInt(t.attributes.max||"0",10),width:t.attributes.width===void 0?void 0:parseFloat(t.attributes.width||"0")};return t.attributes.style&&(n.styleId=parseInt(t.attributes.style,10)),f.parseBoolean(t.attributes.hidden)&&(n.hidden=!0),f.parseBoolean(t.attributes.bestFit)&&(n.bestFit=!0),t.attributes.outlineLevel&&(n.outlineLevel=parseInt(t.attributes.outlineLevel,10)),f.parseBoolean(t.attributes.collapsed)&&(n.collapsed=!0),!0}return!1}parseText(){}parseClose(){return!1}reconcile(t,n){t.styleId&&(t.style=n.styles.getStyleModel(t.styleId))}}d.exports=u},{"../../../utils/utils":27,"../base-xform":32}],93:[function(e,d,m){const f=e("../../../utils/under-dash"),c=e("../../../utils/utils"),u=e("../../../utils/col-cache"),s=e("../base-xform"),t=e("../../../doc/range");function n(l,a,g,v){const h=a[g];h!==void 0?l[g]=h:v!==void 0&&(l[g]=v)}function r(l,a,g,v){const h=a[g];h!==void 0?l[g]=c.parseBoolean(h):v!==void 0&&(l[g]=v)}function i(l){const a=f.map(l,(h,w)=>({address:w,dataValidation:h,marked:!1})).sort((h,w)=>f.strcmp(h.address,w.address)),g=f.keyBy(a,"address"),v=(h,w,y)=>{for(let S=0;S{if(!h.marked){const w=u.decodeEx(h.address);if(w.dimensions)return g[w.dimensions].marked=!0,{...h.dataValidation,sqref:h.address};let y=1,S=u.encodeAddress(w.row+y,w.col);for(;l[S]&&f.isEqual(h.dataValidation,l[S]);)y++,S=u.encodeAddress(w.row+y,w.col);let E=1;for(;v(w,y,w.col+E);)E++;for(let I=0;I1||E>1){const I=w.row+(y-1),F=w.col+(E-1);return{...h.dataValidation,sqref:`${h.address}:${u.encodeAddress(I,F)}`}}return{...h.dataValidation,sqref:h.address}}return null}).filter(Boolean)}class o extends s{get tag(){return"dataValidations"}render(a,g){const v=i(g);v.length&&(a.openNode("dataValidations",{count:v.length}),v.forEach(h=>{a.openNode("dataValidation"),h.type!=="any"&&(a.addAttribute("type",h.type),h.operator&&h.type!=="list"&&h.operator!=="between"&&a.addAttribute("operator",h.operator),h.allowBlank&&a.addAttribute("allowBlank","1")),h.showInputMessage&&a.addAttribute("showInputMessage","1"),h.promptTitle&&a.addAttribute("promptTitle",h.promptTitle),h.prompt&&a.addAttribute("prompt",h.prompt),h.showErrorMessage&&a.addAttribute("showErrorMessage","1"),h.errorStyle&&a.addAttribute("errorStyle",h.errorStyle),h.errorTitle&&a.addAttribute("errorTitle",h.errorTitle),h.error&&a.addAttribute("error",h.error),a.addAttribute("sqref",h.sqref),(h.formulae||[]).forEach((w,y)=>{a.openNode(`formula${y+1}`),h.type==="date"?a.writeText(c.dateToExcel(new Date(w))):a.writeText(w),a.closeNode()}),a.closeNode()}),a.closeNode())}parseOpen(a){switch(a.name){case"dataValidations":return this.model={},!0;case"dataValidation":{this._address=a.attributes.sqref;const g={type:a.attributes.type||"any",formulae:[]};switch(a.attributes.type&&r(g,a.attributes,"allowBlank"),r(g,a.attributes,"showInputMessage"),r(g,a.attributes,"showErrorMessage"),g.type){case"any":case"list":case"custom":break;default:n(g,a.attributes,"operator","between");break}return n(g,a.attributes,"promptTitle"),n(g,a.attributes,"prompt"),n(g,a.attributes,"errorStyle"),n(g,a.attributes,"errorTitle"),n(g,a.attributes,"error"),this._dataValidation=g,!0}case"formula1":case"formula2":return this._formula=[],!0;default:return!1}}parseText(a){this._formula&&this._formula.push(a)}parseClose(a){switch(a){case"dataValidations":return!1;case"dataValidation":return(!this._dataValidation.formulae||!this._dataValidation.formulae.length)&&(delete this._dataValidation.formulae,delete this._dataValidation.operator),(this._address.split(/\s+/g)||[]).forEach(v=>{v.includes(":")?new t(v).forEachAddress(w=>{this.model[w]=this._dataValidation}):this.model[v]=this._dataValidation}),!0;case"formula1":case"formula2":{let g=this._formula.join("");switch(this._dataValidation.type){case"whole":case"textLength":g=parseInt(g,10);break;case"decimal":g=parseFloat(g);break;case"date":g=c.excelToDate(parseFloat(g));break}return this._dataValidation.formulae.push(g),this._formula=void 0,!0}default:return!0}}}d.exports=o},{"../../../doc/range":10,"../../../utils/col-cache":19,"../../../utils/under-dash":26,"../../../utils/utils":27,"../base-xform":32}],94:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"dimension"}render(s,t){t&&s.leafNode("dimension",{ref:t})}parseOpen(s){return s.name==="dimension"?(this.model=s.attributes.ref,!0):!1}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],95:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"drawing"}render(s,t){t&&s.leafNode(this.tag,{"r:id":t.rId})}parseOpen(s){switch(s.name){case this.tag:return this.model={rId:s.attributes["r:id"]},!0;default:return!1}}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],96:[function(e,d,m){const f=e("../composite-xform"),c=e("./cf-ext/conditional-formattings-ext-xform");class u extends f{constructor(){super(),this.map={"x14:conditionalFormattings":this.conditionalFormattings=new c}}get tag(){return"ext"}hasContent(n){return this.conditionalFormattings.hasContent(n.conditionalFormattings)}prepare(n,r){this.conditionalFormattings.prepare(n.conditionalFormattings,r)}render(n,r){n.openNode("ext",{uri:"{78C0D931-6437-407d-A8EE-F0AAD7539E65}","xmlns:x14":"http://schemas.microsoft.com/office/spreadsheetml/2009/9/main"}),this.conditionalFormattings.render(n,r.conditionalFormattings),n.closeNode()}createNewModel(){return{}}onParserClose(n,r){this.model[n]=r.model}}class s extends f{constructor(){super(),this.map={ext:this.ext=new u}}get tag(){return"extLst"}prepare(n,r){this.ext.prepare(n,r)}hasContent(n){return this.ext.hasContent(n)}render(n,r){this.hasContent(r)&&(n.openNode("extLst"),this.ext.render(n,r),n.closeNode())}createNewModel(){return{}}onParserClose(n,r){Object.assign(this.model,r.model)}}d.exports=s},{"../composite-xform":48,"./cf-ext/conditional-formattings-ext-xform":78}],97:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"headerFooter"}render(s,t){if(t){s.addRollback();let n=!1;s.openNode("headerFooter"),t.differentFirst&&(s.addAttribute("differentFirst","1"),n=!0),t.differentOddEven&&(s.addAttribute("differentOddEven","1"),n=!0),t.oddHeader&&typeof t.oddHeader=="string"&&(s.leafNode("oddHeader",null,t.oddHeader),n=!0),t.oddFooter&&typeof t.oddFooter=="string"&&(s.leafNode("oddFooter",null,t.oddFooter),n=!0),t.evenHeader&&typeof t.evenHeader=="string"&&(s.leafNode("evenHeader",null,t.evenHeader),n=!0),t.evenFooter&&typeof t.evenFooter=="string"&&(s.leafNode("evenFooter",null,t.evenFooter),n=!0),t.firstHeader&&typeof t.firstHeader=="string"&&(s.leafNode("firstHeader",null,t.firstHeader),n=!0),t.firstFooter&&typeof t.firstFooter=="string"&&(s.leafNode("firstFooter",null,t.firstFooter),n=!0),n?(s.closeNode(),s.commit()):s.rollback()}}parseOpen(s){switch(s.name){case"headerFooter":return this.model={},s.attributes.differentFirst&&(this.model.differentFirst=parseInt(s.attributes.differentFirst,0)===1),s.attributes.differentOddEven&&(this.model.differentOddEven=parseInt(s.attributes.differentOddEven,0)===1),!0;case"oddHeader":return this.currentNode="oddHeader",!0;case"oddFooter":return this.currentNode="oddFooter",!0;case"evenHeader":return this.currentNode="evenHeader",!0;case"evenFooter":return this.currentNode="evenFooter",!0;case"firstHeader":return this.currentNode="firstHeader",!0;case"firstFooter":return this.currentNode="firstFooter",!0;default:return!1}}parseText(s){switch(this.currentNode){case"oddHeader":this.model.oddHeader=s;break;case"oddFooter":this.model.oddFooter=s;break;case"evenHeader":this.model.evenHeader=s;break;case"evenFooter":this.model.evenFooter=s;break;case"firstHeader":this.model.firstHeader=s;break;case"firstFooter":this.model.firstFooter=s;break}}parseClose(){switch(this.currentNode){case"oddHeader":case"oddFooter":case"evenHeader":case"evenFooter":case"firstHeader":case"firstFooter":return this.currentNode=void 0,!0;default:return!1}}}d.exports=c},{"../base-xform":32}],98:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"hyperlink"}render(s,t){this.isInternalLink(t)?s.leafNode("hyperlink",{ref:t.address,"r:id":t.rId,tooltip:t.tooltip,location:t.target}):s.leafNode("hyperlink",{ref:t.address,"r:id":t.rId,tooltip:t.tooltip})}parseOpen(s){return s.name==="hyperlink"?(this.model={address:s.attributes.ref,rId:s.attributes["r:id"],tooltip:s.attributes.tooltip},s.attributes.location&&(this.model.target=s.attributes.location),!0):!1}parseText(){}parseClose(){return!1}isInternalLink(s){return s.target&&/^[^!]+![a-zA-Z]+[\d]+$/.test(s.target)}}d.exports=c},{"../base-xform":32}],99:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"mergeCell"}render(s,t){s.leafNode("mergeCell",{ref:t})}parseOpen(s){return s.name==="mergeCell"?(this.model=s.attributes.ref,!0):!1}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],100:[function(e,d,m){const f=e("../../../utils/under-dash"),c=e("../../../doc/range"),u=e("../../../utils/col-cache"),s=e("../../../doc/enums");class t{constructor(){this.merges={}}add(r){if(this.merges[r.master])this.merges[r.master].expandToAddress(r.address);else{const i=`${r.master}:${r.address}`;this.merges[r.master]=new c(i)}}get mergeCells(){return f.map(this.merges,r=>r.range)}reconcile(r,i){f.each(r,o=>{const l=u.decode(o);for(let a=l.top;a<=l.bottom;a++){const g=i[a-1];for(let v=l.left;v<=l.right;v++){const h=g.cells[v-1];h?h.type===s.ValueType.Merge&&(h.master=l.tl):g.cells[v]={type:s.ValueType.Null,address:u.encodeAddress(a,v)}}}})}getMasterAddress(r){const i=this.hash[r];return i&&i.tl}}d.exports=t},{"../../../doc/enums":7,"../../../doc/range":10,"../../../utils/col-cache":19,"../../../utils/under-dash":26}],101:[function(e,d,m){const f=e("../base-xform"),c=s=>typeof s<"u";class u extends f{get tag(){return"outlinePr"}render(t,n){return n&&(c(n.summaryBelow)||c(n.summaryRight))?(t.leafNode(this.tag,{summaryBelow:c(n.summaryBelow)?Number(n.summaryBelow):void 0,summaryRight:c(n.summaryRight)?Number(n.summaryRight):void 0}),!0):!1}parseOpen(t){return t.name===this.tag?(this.model={summaryBelow:c(t.attributes.summaryBelow)?!!Number(t.attributes.summaryBelow):void 0,summaryRight:c(t.attributes.summaryRight)?!!Number(t.attributes.summaryRight):void 0},!0):!1}parseText(){}parseClose(){return!1}}d.exports=u},{"../base-xform":32}],102:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"brk"}render(s,t){s.leafNode("brk",t)}parseOpen(s){return s.name==="brk"?(this.model=s.attributes.ref,!0):!1}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],103:[function(e,d,m){const f=e("../../../utils/under-dash"),c=e("../base-xform");class u extends c{get tag(){return"pageMargins"}render(t,n){if(n){const r={left:n.left,right:n.right,top:n.top,bottom:n.bottom,header:n.header,footer:n.footer};f.some(r,i=>i!==void 0)&&t.leafNode(this.tag,r)}}parseOpen(t){switch(t.name){case this.tag:return this.model={left:parseFloat(t.attributes.left||.7),right:parseFloat(t.attributes.right||.7),top:parseFloat(t.attributes.top||.75),bottom:parseFloat(t.attributes.bottom||.75),header:parseFloat(t.attributes.header||.3),footer:parseFloat(t.attributes.footer||.3)},!0;default:return!1}}parseText(){}parseClose(){return!1}}d.exports=u},{"../../../utils/under-dash":26,"../base-xform":32}],104:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"pageSetUpPr"}render(s,t){return t&&t.fitToPage?(s.leafNode(this.tag,{fitToPage:t.fitToPage?"1":void 0}),!0):!1}parseOpen(s){return s.name===this.tag?(this.model={fitToPage:s.attributes.fitToPage==="1"},!0):!1}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],105:[function(e,d,m){const f=e("../../../utils/under-dash"),c=e("../base-xform");function u(o){return o?"1":void 0}function s(o){switch(o){case"overThenDown":return o;default:return}}function t(o){switch(o){case"atEnd":case"asDisplyed":return o;default:return}}function n(o){switch(o){case"dash":case"blank":case"NA":return o;default:return}}function r(o){return o!==void 0?parseInt(o,10):void 0}class i extends c{get tag(){return"pageSetup"}render(l,a){if(a){const g={paperSize:a.paperSize,orientation:a.orientation,horizontalDpi:a.horizontalDpi,verticalDpi:a.verticalDpi,pageOrder:s(a.pageOrder),blackAndWhite:u(a.blackAndWhite),draft:u(a.draft),cellComments:t(a.cellComments),errors:n(a.errors),scale:a.scale,fitToWidth:a.fitToWidth,fitToHeight:a.fitToHeight,firstPageNumber:a.firstPageNumber,useFirstPageNumber:u(a.firstPageNumber),usePrinterDefaults:u(a.usePrinterDefaults),copies:a.copies};f.some(g,v=>v!==void 0)&&l.leafNode(this.tag,g)}}parseOpen(l){switch(l.name){case this.tag:return this.model={paperSize:r(l.attributes.paperSize),orientation:l.attributes.orientation||"portrait",horizontalDpi:parseInt(l.attributes.horizontalDpi||"4294967295",10),verticalDpi:parseInt(l.attributes.verticalDpi||"4294967295",10),pageOrder:l.attributes.pageOrder||"downThenOver",blackAndWhite:l.attributes.blackAndWhite==="1",draft:l.attributes.draft==="1",cellComments:l.attributes.cellComments||"None",errors:l.attributes.errors||"displayed",scale:parseInt(l.attributes.scale||"100",10),fitToWidth:parseInt(l.attributes.fitToWidth||"1",10),fitToHeight:parseInt(l.attributes.fitToHeight||"1",10),firstPageNumber:parseInt(l.attributes.firstPageNumber||"1",10),useFirstPageNumber:l.attributes.useFirstPageNumber==="1",usePrinterDefaults:l.attributes.usePrinterDefaults==="1",copies:parseInt(l.attributes.copies||"1",10)},!0;default:return!1}}parseText(){}parseClose(){return!1}}d.exports=i},{"../../../utils/under-dash":26,"../base-xform":32}],106:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"picture"}render(s,t){t&&s.leafNode(this.tag,{"r:id":t.rId})}parseOpen(s){switch(s.name){case this.tag:return this.model={rId:s.attributes["r:id"]},!0;default:return!1}}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],107:[function(e,d,m){const f=e("../../../utils/under-dash"),c=e("../base-xform");function u(t){return t?"1":void 0}class s extends c{get tag(){return"printOptions"}render(n,r){if(r){const i={headings:u(r.showRowColHeaders),gridLines:u(r.showGridLines),horizontalCentered:u(r.horizontalCentered),verticalCentered:u(r.verticalCentered)};f.some(i,o=>o!==void 0)&&n.leafNode(this.tag,i)}}parseOpen(n){switch(n.name){case this.tag:return this.model={showRowColHeaders:n.attributes.headings==="1",showGridLines:n.attributes.gridLines==="1",horizontalCentered:n.attributes.horizontalCentered==="1",verticalCentered:n.attributes.verticalCentered==="1"},!0;default:return!1}}parseText(){}parseClose(){return!1}}d.exports=s},{"../../../utils/under-dash":26,"../base-xform":32}],108:[function(e,d,m){const f=e("./page-breaks-xform"),c=e("../list-xform");class u extends c{constructor(){const t={tag:"rowBreaks",count:!0,childXform:new f};super(t)}render(t,n){if(n&&n.length){t.openNode(this.tag,this.$),this.count&&(t.addAttribute(this.$count,n.length),t.addAttribute("manualBreakCount",n.length));const{childXform:r}=this;n.forEach(i=>{r.render(t,i)}),t.closeNode()}else this.empty&&t.leafNode(this.tag)}}d.exports=u},{"../list-xform":71,"./page-breaks-xform":102}],109:[function(e,d,m){const f=e("../base-xform"),c=e("../../../utils/utils"),u=e("./cell-xform");class s extends f{constructor(n){super(),this.maxItems=n&&n.maxItems,this.map={c:new u}}get tag(){return"row"}prepare(n,r){const i=r.styles.addStyleModel(n.style);i&&(n.styleId=i);const o=this.map.c;n.cells.forEach(l=>{o.prepare(l,r)})}render(n,r,i){n.openNode("row"),n.addAttribute("r",r.number),r.height&&(n.addAttribute("ht",r.height),n.addAttribute("customHeight","1")),r.hidden&&n.addAttribute("hidden","1"),r.min>0&&r.max>0&&r.min<=r.max&&n.addAttribute("spans",`${r.min}:${r.max}`),r.styleId&&(n.addAttribute("s",r.styleId),n.addAttribute("customFormat","1")),n.addAttribute("x14ac:dyDescent","0.25"),r.outlineLevel&&n.addAttribute("outlineLevel",r.outlineLevel),r.collapsed&&n.addAttribute("collapsed","1");const o=this.map.c;r.cells.forEach(l=>{o.render(n,l,i)}),n.closeNode()}parseOpen(n){if(this.parser)return this.parser.parseOpen(n),!0;if(n.name==="row"){this.numRowsSeen+=1;const r=n.attributes.spans?n.attributes.spans.split(":").map(o=>parseInt(o,10)):[void 0,void 0],i=this.model={number:parseInt(n.attributes.r,10),min:r[0],max:r[1],cells:[]};return n.attributes.s&&(i.styleId=parseInt(n.attributes.s,10)),c.parseBoolean(n.attributes.hidden)&&(i.hidden=!0),c.parseBoolean(n.attributes.bestFit)&&(i.bestFit=!0),n.attributes.ht&&(i.height=parseFloat(n.attributes.ht)),n.attributes.outlineLevel&&(i.outlineLevel=parseInt(n.attributes.outlineLevel,10)),c.parseBoolean(n.attributes.collapsed)&&(i.collapsed=!0),!0}return this.parser=this.map[n.name],this.parser?(this.parser.parseOpen(n),!0):!1}parseText(n){this.parser&&this.parser.parseText(n)}parseClose(n){if(this.parser){if(!this.parser.parseClose(n)){if(this.model.cells.push(this.parser.model),this.maxItems&&this.model.cells.length>this.maxItems)throw new Error(`Max column count (${this.maxItems}) exceeded`);this.parser=void 0}return!0}return!1}reconcile(n,r){n.style=n.styleId?r.styles.getStyleModel(n.styleId):{},n.styleId!==void 0&&(n.styleId=void 0);const i=this.map.c;n.cells.forEach(o=>{i.reconcile(o,r)})}}d.exports=s},{"../../../utils/utils":27,"../base-xform":32,"./cell-xform":73}],110:[function(e,d,m){const f=e("../../../utils/under-dash"),c=e("../base-xform");class u extends c{get tag(){return"sheetFormatPr"}render(t,n){if(n){const r={defaultRowHeight:n.defaultRowHeight,outlineLevelRow:n.outlineLevelRow,outlineLevelCol:n.outlineLevelCol,"x14ac:dyDescent":n.dyDescent};n.defaultColWidth&&(r.defaultColWidth=n.defaultColWidth),(!n.defaultRowHeight||n.defaultRowHeight!==15)&&(r.customHeight="1"),f.some(r,i=>i!==void 0)&&t.leafNode("sheetFormatPr",r)}}parseOpen(t){return t.name==="sheetFormatPr"?(this.model={defaultRowHeight:parseFloat(t.attributes.defaultRowHeight||"0"),dyDescent:parseFloat(t.attributes["x14ac:dyDescent"]||"0"),outlineLevelRow:parseInt(t.attributes.outlineLevelRow||"0",10),outlineLevelCol:parseInt(t.attributes.outlineLevelCol||"0",10)},t.attributes.defaultColWidth&&(this.model.defaultColWidth=parseFloat(t.attributes.defaultColWidth)),!0):!1}parseText(){}parseClose(){return!1}}d.exports=u},{"../../../utils/under-dash":26,"../base-xform":32}],111:[function(e,d,m){const f=e("../base-xform"),c=e("../style/color-xform"),u=e("./page-setup-properties-xform"),s=e("./outline-properties-xform");class t extends f{constructor(){super(),this.map={tabColor:new c("tabColor"),pageSetUpPr:new u,outlinePr:new s}}get tag(){return"sheetPr"}render(r,i){if(i){r.addRollback(),r.openNode("sheetPr");let o=!1;o=this.map.tabColor.render(r,i.tabColor)||o,o=this.map.pageSetUpPr.render(r,i.pageSetup)||o,o=this.map.outlinePr.render(r,i.outlineProperties)||o,o?(r.closeNode(),r.commit()):r.rollback()}}parseOpen(r){return this.parser?(this.parser.parseOpen(r),!0):r.name===this.tag?(this.reset(),!0):this.map[r.name]?(this.parser=this.map[r.name],this.parser.parseOpen(r),!0):!1}parseText(r){return this.parser?(this.parser.parseText(r),!0):!1}parseClose(r){return this.parser?(this.parser.parseClose(r)||(this.parser=void 0),!0):(this.map.tabColor.model||this.map.pageSetUpPr.model||this.map.outlinePr.model?(this.model={},this.map.tabColor.model&&(this.model.tabColor=this.map.tabColor.model),this.map.pageSetUpPr.model&&(this.model.pageSetup=this.map.pageSetUpPr.model),this.map.outlinePr.model&&(this.model.outlineProperties=this.map.outlinePr.model)):this.model=null,!1)}}d.exports=t},{"../base-xform":32,"../style/color-xform":128,"./outline-properties-xform":101,"./page-setup-properties-xform":104}],112:[function(e,d,m){const f=e("../../../utils/under-dash"),c=e("../base-xform");function u(n,r){return n?r:void 0}function s(n,r){return n===r?!0:void 0}class t extends c{get tag(){return"sheetProtection"}render(r,i){if(i){const o={sheet:u(i.sheet,"1"),selectLockedCells:i.selectLockedCells===!1?"1":void 0,selectUnlockedCells:i.selectUnlockedCells===!1?"1":void 0,formatCells:u(i.formatCells,"0"),formatColumns:u(i.formatColumns,"0"),formatRows:u(i.formatRows,"0"),insertColumns:u(i.insertColumns,"0"),insertRows:u(i.insertRows,"0"),insertHyperlinks:u(i.insertHyperlinks,"0"),deleteColumns:u(i.deleteColumns,"0"),deleteRows:u(i.deleteRows,"0"),sort:u(i.sort,"0"),autoFilter:u(i.autoFilter,"0"),pivotTables:u(i.pivotTables,"0")};i.sheet&&(o.algorithmName=i.algorithmName,o.hashValue=i.hashValue,o.saltValue=i.saltValue,o.spinCount=i.spinCount,o.objects=u(i.objects===!1,"1"),o.scenarios=u(i.scenarios===!1,"1")),f.some(o,l=>l!==void 0)&&r.leafNode(this.tag,o)}}parseOpen(r){switch(r.name){case this.tag:return this.model={sheet:s(r.attributes.sheet,"1"),objects:r.attributes.objects==="1"?!1:void 0,scenarios:r.attributes.scenarios==="1"?!1:void 0,selectLockedCells:r.attributes.selectLockedCells==="1"?!1:void 0,selectUnlockedCells:r.attributes.selectUnlockedCells==="1"?!1:void 0,formatCells:s(r.attributes.formatCells,"0"),formatColumns:s(r.attributes.formatColumns,"0"),formatRows:s(r.attributes.formatRows,"0"),insertColumns:s(r.attributes.insertColumns,"0"),insertRows:s(r.attributes.insertRows,"0"),insertHyperlinks:s(r.attributes.insertHyperlinks,"0"),deleteColumns:s(r.attributes.deleteColumns,"0"),deleteRows:s(r.attributes.deleteRows,"0"),sort:s(r.attributes.sort,"0"),autoFilter:s(r.attributes.autoFilter,"0"),pivotTables:s(r.attributes.pivotTables,"0")},r.attributes.algorithmName&&(this.model.algorithmName=r.attributes.algorithmName,this.model.hashValue=r.attributes.hashValue,this.model.saltValue=r.attributes.saltValue,this.model.spinCount=parseInt(r.attributes.spinCount,10)),!0;default:return!1}}parseText(){}parseClose(){return!1}}d.exports=t},{"../../../utils/under-dash":26,"../base-xform":32}],113:[function(e,d,m){const f=e("../../../utils/col-cache"),c=e("../base-xform"),u={frozen:"frozen",frozenSplit:"frozen",split:"split"};class s extends c{get tag(){return"sheetView"}prepare(n){switch(n.state){case"frozen":case"split":break;default:n.state="normal";break}}render(n,r){n.openNode("sheetView",{workbookViewId:r.workbookViewId||0});const i=function(v,h,w){w&&n.addAttribute(v,h)};i("rightToLeft","1",r.rightToLeft===!0),i("tabSelected","1",r.tabSelected),i("showRuler","0",r.showRuler===!1),i("showRowColHeaders","0",r.showRowColHeaders===!1),i("showGridLines","0",r.showGridLines===!1),i("zoomScale",r.zoomScale,r.zoomScale),i("zoomScaleNormal",r.zoomScaleNormal,r.zoomScaleNormal),i("view",r.style,r.style);let o,l,a,g;switch(r.state){case"frozen":l=r.xSplit||0,a=r.ySplit||0,o=r.topLeftCell||f.getAddress(a+1,l+1).address,g=r.xSplit&&r.ySplit&&"bottomRight"||r.xSplit&&"topRight"||"bottomLeft",n.leafNode("pane",{xSplit:r.xSplit||void 0,ySplit:r.ySplit||void 0,topLeftCell:o,activePane:g,state:"frozen"}),n.leafNode("selection",{pane:g,activeCell:r.activeCell,sqref:r.activeCell});break;case"split":r.activePane==="topLeft"&&(r.activePane=void 0),n.leafNode("pane",{xSplit:r.xSplit||void 0,ySplit:r.ySplit||void 0,topLeftCell:r.topLeftCell,activePane:r.activePane}),n.leafNode("selection",{pane:r.activePane,activeCell:r.activeCell,sqref:r.activeCell});break;case"normal":r.activeCell&&n.leafNode("selection",{activeCell:r.activeCell,sqref:r.activeCell});break}n.closeNode()}parseOpen(n){switch(n.name){case"sheetView":return this.sheetView={workbookViewId:parseInt(n.attributes.workbookViewId,10),rightToLeft:n.attributes.rightToLeft==="1",tabSelected:n.attributes.tabSelected==="1",showRuler:n.attributes.showRuler!=="0",showRowColHeaders:n.attributes.showRowColHeaders!=="0",showGridLines:n.attributes.showGridLines!=="0",zoomScale:parseInt(n.attributes.zoomScale||"100",10),zoomScaleNormal:parseInt(n.attributes.zoomScaleNormal||"100",10),style:n.attributes.view},this.pane=void 0,this.selections={},!0;case"pane":return this.pane={xSplit:parseInt(n.attributes.xSplit||"0",10),ySplit:parseInt(n.attributes.ySplit||"0",10),topLeftCell:n.attributes.topLeftCell,activePane:n.attributes.activePane||"topLeft",state:n.attributes.state},!0;case"selection":{const r=n.attributes.pane||"topLeft";return this.selections[r]={pane:r,activeCell:n.attributes.activeCell},!0}default:return!1}}parseText(){}parseClose(n){let r,i;switch(n){case"sheetView":return this.sheetView&&this.pane?(r=this.model={workbookViewId:this.sheetView.workbookViewId,rightToLeft:this.sheetView.rightToLeft,state:u[this.pane.state]||"split",xSplit:this.pane.xSplit,ySplit:this.pane.ySplit,topLeftCell:this.pane.topLeftCell,showRuler:this.sheetView.showRuler,showRowColHeaders:this.sheetView.showRowColHeaders,showGridLines:this.sheetView.showGridLines,zoomScale:this.sheetView.zoomScale,zoomScaleNormal:this.sheetView.zoomScaleNormal},this.model.state==="split"&&(r.activePane=this.pane.activePane),i=this.selections[this.pane.activePane],i&&i.activeCell&&(r.activeCell=i.activeCell),this.sheetView.style&&(r.style=this.sheetView.style)):(r=this.model={workbookViewId:this.sheetView.workbookViewId,rightToLeft:this.sheetView.rightToLeft,state:"normal",showRuler:this.sheetView.showRuler,showRowColHeaders:this.sheetView.showRowColHeaders,showGridLines:this.sheetView.showGridLines,zoomScale:this.sheetView.zoomScale,zoomScaleNormal:this.sheetView.zoomScaleNormal},i=this.selections.topLeft,i&&i.activeCell&&(r.activeCell=i.activeCell),this.sheetView.style&&(r.style=this.sheetView.style)),!1;default:return!0}}reconcile(){}}d.exports=s},{"../../../utils/col-cache":19,"../base-xform":32}],114:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"tablePart"}render(s,t){t&&s.leafNode(this.tag,{"r:id":t.rId})}parseOpen(s){switch(s.name){case this.tag:return this.model={rId:s.attributes["r:id"]},!0;default:return!1}}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],115:[function(e,d,m){const f=e("../../../utils/under-dash"),c=e("../../../utils/col-cache"),u=e("../../../utils/xml-stream"),s=e("../../rel-type"),t=e("./merges"),n=e("../base-xform"),r=e("../list-xform"),i=e("./row-xform"),o=e("./col-xform"),l=e("./dimension-xform"),a=e("./hyperlink-xform"),g=e("./merge-cell-xform"),v=e("./data-validations-xform"),h=e("./sheet-properties-xform"),w=e("./sheet-format-properties-xform"),y=e("./sheet-view-xform"),S=e("./sheet-protection-xform"),E=e("./page-margins-xform"),I=e("./page-setup-xform"),F=e("./print-options-xform"),B=e("./auto-filter-xform"),j=e("./picture-xform"),X=e("./drawing-xform"),G=e("./table-part-xform"),V=e("./row-breaks-xform"),J=e("./header-footer-xform"),H=e("./cf/conditional-formattings-xform"),M=e("./ext-lst-xform"),T=(P,L)=>{Object.keys(L).forEach($=>{const R=P[$],k=L[$];R===void 0&&k!==void 0&&(P[$]=k)})},_=(P,L)=>{if(!L||!L.length)return P;if(!P||!P.length)return L;const $={},R={};return P.forEach(k=>{$[k.ref]=k,k.rules.forEach(C=>{const{x14Id:O}=C;O&&(R[O]=C)})}),L.forEach(k=>{k.rules.forEach(C=>{const O=R[C.x14Id];O?T(O,C):$[k.ref]?$[k.ref].rules.push(C):P.push({ref:k.ref,rules:[C]})})}),P};class A extends n{constructor(L){super();const{maxRows:$,maxCols:R,ignoreNodes:k}=L||{};this.ignoreNodes=k||[],this.map={sheetPr:new h,dimension:new l,sheetViews:new r({tag:"sheetViews",count:!1,childXform:new y}),sheetFormatPr:new w,cols:new r({tag:"cols",count:!1,childXform:new o}),sheetData:new r({tag:"sheetData",count:!1,empty:!0,childXform:new i({maxItems:R}),maxItems:$}),autoFilter:new B,mergeCells:new r({tag:"mergeCells",count:!0,childXform:new g}),rowBreaks:new V,hyperlinks:new r({tag:"hyperlinks",count:!1,childXform:new a}),pageMargins:new E,dataValidations:new v,pageSetup:new I,headerFooter:new J,printOptions:new F,picture:new j,drawing:new X,sheetProtection:new S,tableParts:new r({tag:"tableParts",count:!0,childXform:new G}),conditionalFormatting:new H,extLst:new M}}prepare(L,$){$.merges=new t,L.hyperlinks=$.hyperlinks=[],L.comments=$.comments=[],$.formulae={},$.siFormulae=0,this.map.cols.prepare(L.cols,$),this.map.sheetData.prepare(L.rows,$),this.map.conditionalFormatting.prepare(L.conditionalFormattings,$),L.mergeCells=$.merges.mergeCells;const R=L.rels=[];function k(W){return`rId${W.length+1}`}if(L.hyperlinks.forEach(W=>{const ne=k(R);W.rId=ne,R.push({Id:ne,Type:s.Hyperlink,Target:W.target,TargetMode:"External"})}),L.comments.length>0){const W={Id:k(R),Type:s.Comments,Target:`../comments${L.id}.xml`};R.push(W);const ne={Id:k(R),Type:s.VmlDrawing,Target:`../drawings/vmlDrawing${L.id}.vml`};R.push(ne),L.comments.forEach(he=>{he.refAddress=c.decodeAddress(he.ref)}),$.commentRefs.push({commentName:`comments${L.id}`,vmlDrawing:`vmlDrawing${L.id}`})}const C=[];let O;L.media.forEach(W=>{if(W.type==="background"){const ne=k(R);O=$.media[W.imageId],R.push({Id:ne,Type:s.Image,Target:`../media/${O.name}.${O.extension}`}),L.background={rId:ne},L.image=$.media[W.imageId]}else if(W.type==="image"){let{drawing:ne}=L;O=$.media[W.imageId],ne||(ne=L.drawing={rId:k(R),name:`drawing${++$.drawingsCount}`,anchors:[],rels:[]},$.drawings.push(ne),R.push({Id:ne.rId,Type:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing",Target:`../drawings/${ne.name}.xml`}));let he=this.preImageId===W.imageId?C[W.imageId]:C[ne.rels.length];he||(he=k(ne.rels),C[ne.rels.length]=he,ne.rels.push({Id:he,Type:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",Target:`../media/${O.name}.${O.extension}`}));const ue={picture:{rId:he},range:W.range};if(W.hyperlinks&&W.hyperlinks.hyperlink){const Ae=k(ne.rels);C[ne.rels.length]=Ae,ue.picture.hyperlinks={tooltip:W.hyperlinks.tooltip,rId:Ae},ne.rels.push({Id:Ae,Type:s.Hyperlink,Target:W.hyperlinks.hyperlink,TargetMode:"External"})}this.preImageId=W.imageId,ne.anchors.push(ue)}}),L.tables.forEach(W=>{const ne=k(R);W.rId=ne,R.push({Id:ne,Type:s.Table,Target:`../tables/${W.target}`}),W.columns.forEach(he=>{const{style:ue}=he;ue&&(he.dxfId=$.styles.addDxfStyle(ue))})}),this.map.extLst.prepare(L,$)}render(L,$){L.openXml(u.StdDocAttributes),L.openNode("worksheet",A.WORKSHEET_ATTRIBUTES);const R=$.properties?{defaultRowHeight:$.properties.defaultRowHeight,dyDescent:$.properties.dyDescent,outlineLevelCol:$.properties.outlineLevelCol,outlineLevelRow:$.properties.outlineLevelRow}:void 0;$.properties&&$.properties.defaultColWidth&&(R.defaultColWidth=$.properties.defaultColWidth);const k={outlineProperties:$.properties&&$.properties.outlineProperties,tabColor:$.properties&&$.properties.tabColor,pageSetup:$.pageSetup&&$.pageSetup.fitToPage?{fitToPage:$.pageSetup.fitToPage}:void 0},C=$.pageSetup&&$.pageSetup.margins,O={showRowColHeaders:$.pageSetup&&$.pageSetup.showRowColHeaders,showGridLines:$.pageSetup&&$.pageSetup.showGridLines,horizontalCentered:$.pageSetup&&$.pageSetup.horizontalCentered,verticalCentered:$.pageSetup&&$.pageSetup.verticalCentered},W=$.sheetProtection;this.map.sheetPr.render(L,k),this.map.dimension.render(L,$.dimensions),this.map.sheetViews.render(L,$.views),this.map.sheetFormatPr.render(L,R),this.map.cols.render(L,$.cols),this.map.sheetData.render(L,$.rows),this.map.sheetProtection.render(L,W),this.map.autoFilter.render(L,$.autoFilter),this.map.mergeCells.render(L,$.mergeCells),this.map.conditionalFormatting.render(L,$.conditionalFormattings),this.map.dataValidations.render(L,$.dataValidations),this.map.hyperlinks.render(L,$.hyperlinks),this.map.printOptions.render(L,O),this.map.pageMargins.render(L,C),this.map.pageSetup.render(L,$.pageSetup),this.map.headerFooter.render(L,$.headerFooter),this.map.rowBreaks.render(L,$.rowBreaks),this.map.drawing.render(L,$.drawing),this.map.picture.render(L,$.background),this.map.tableParts.render(L,$.tables),this.map.extLst.render(L,$),$.rels&&$.rels.forEach(ne=>{ne.Type===s.VmlDrawing&&L.leafNode("legacyDrawing",{"r:id":ne.Id})}),L.closeNode()}parseOpen(L){return this.parser?(this.parser.parseOpen(L),!0):L.name==="worksheet"?(f.each(this.map,$=>{$.reset()}),!0):(this.map[L.name]&&!this.ignoreNodes.includes(L.name)&&(this.parser=this.map[L.name],this.parser.parseOpen(L)),!0)}parseText(L){this.parser&&this.parser.parseText(L)}parseClose(L){if(this.parser)return this.parser.parseClose(L)||(this.parser=void 0),!0;switch(L){case"worksheet":{const $=this.map.sheetFormatPr.model||{};this.map.sheetPr.model&&this.map.sheetPr.model.tabColor&&($.tabColor=this.map.sheetPr.model.tabColor),this.map.sheetPr.model&&this.map.sheetPr.model.outlineProperties&&($.outlineProperties=this.map.sheetPr.model.outlineProperties);const R={fitToPage:this.map.sheetPr.model&&this.map.sheetPr.model.pageSetup&&this.map.sheetPr.model.pageSetup.fitToPage||!1,margins:this.map.pageMargins.model},k=Object.assign(R,this.map.pageSetup.model,this.map.printOptions.model),C=_(this.map.conditionalFormatting.model,this.map.extLst.model&&this.map.extLst.model["x14:conditionalFormattings"]);return this.model={dimensions:this.map.dimension.model,cols:this.map.cols.model,rows:this.map.sheetData.model,mergeCells:this.map.mergeCells.model,hyperlinks:this.map.hyperlinks.model,dataValidations:this.map.dataValidations.model,properties:$,views:this.map.sheetViews.model,pageSetup:k,headerFooter:this.map.headerFooter.model,background:this.map.picture.model,drawing:this.map.drawing.model,tables:this.map.tableParts.model,conditionalFormattings:C},this.map.autoFilter.model&&(this.model.autoFilter=this.map.autoFilter.model),this.map.sheetProtection.model&&(this.model.sheetProtection=this.map.sheetProtection.model),!1}default:return!0}}reconcile(L,$){const R=(L.relationships||[]).reduce((C,O)=>{if(C[O.Id]=O,O.Type===s.Comments&&(L.comments=$.comments[O.Target].comments),O.Type===s.VmlDrawing&&L.comments&&L.comments.length){const W=$.vmlDrawings[O.Target].comments;L.comments.forEach((ne,he)=>{ne.note=Object.assign({},ne.note,W[he])})}return C},{});if($.commentsMap=(L.comments||[]).reduce((C,O)=>(O.ref&&(C[O.ref]=O),C),{}),$.hyperlinkMap=(L.hyperlinks||[]).reduce((C,O)=>(O.rId&&(C[O.address]=R[O.rId].Target),C),{}),$.formulae={},L.rows=L.rows&&L.rows.filter(Boolean)||[],L.rows.forEach(C=>{C.cells=C.cells&&C.cells.filter(Boolean)||[]}),this.map.cols.reconcile(L.cols,$),this.map.sheetData.reconcile(L.rows,$),this.map.conditionalFormatting.reconcile(L.conditionalFormattings,$),L.media=[],L.drawing){const O=R[L.drawing.rId].Target.match(/\/drawings\/([a-zA-Z0-9]+)[.][a-zA-Z]{3,4}$/);if(O){const W=O[1];$.drawings[W].anchors.forEach(he=>{if(he.medium){const ue={type:"image",imageId:he.medium.index,range:he.range,hyperlinks:he.picture.hyperlinks};L.media.push(ue)}})}}const k=L.background&&R[L.background.rId];if(k){const C=k.Target.split("/media/")[1],O=$.mediaIndex&&$.mediaIndex[C];O!==void 0&&L.media.push({type:"background",imageId:O})}L.tables=(L.tables||[]).map(C=>{const O=R[C.rId];return $.tables[O.Target]}),delete L.relationships,delete L.hyperlinks,delete L.comments}}A.WORKSHEET_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main","xmlns:r":"http://schemas.openxmlformats.org/officeDocument/2006/relationships","xmlns:mc":"http://schemas.openxmlformats.org/markup-compatibility/2006","mc:Ignorable":"x14ac","xmlns:x14ac":"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac"},d.exports=A},{"../../../utils/col-cache":19,"../../../utils/under-dash":26,"../../../utils/xml-stream":28,"../../rel-type":31,"../base-xform":32,"../list-xform":71,"./auto-filter-xform":72,"./cf/conditional-formattings-xform":87,"./col-xform":92,"./data-validations-xform":93,"./dimension-xform":94,"./drawing-xform":95,"./ext-lst-xform":96,"./header-footer-xform":97,"./hyperlink-xform":98,"./merge-cell-xform":99,"./merges":100,"./page-margins-xform":103,"./page-setup-xform":105,"./picture-xform":106,"./print-options-xform":107,"./row-breaks-xform":108,"./row-xform":109,"./sheet-format-properties-xform":110,"./sheet-properties-xform":111,"./sheet-protection-xform":112,"./sheet-view-xform":113,"./table-part-xform":114}],116:[function(e,d,m){const f=e("../base-xform");class c extends f{constructor(s){super(),this.tag=s.tag,this.attr=s.attr}render(s,t){t&&(s.openNode(this.tag),s.closeNode())}parseOpen(s){s.name===this.tag&&(this.model=!0)}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],117:[function(e,d,m){const f=e("../base-xform");class c extends f{constructor(s){super(),this.tag=s.tag,this.attr=s.attr,this.attrs=s.attrs,this._format=s.format||function(t){try{return Number.isNaN(t.getTime())?"":t.toISOString()}catch{return""}},this._parse=s.parse||function(t){return new Date(t)}}render(s,t){t&&(s.openNode(this.tag),this.attrs&&s.addAttributes(this.attrs),this.attr?s.addAttribute(this.attr,this._format(t)):s.writeText(this._format(t)),s.closeNode())}parseOpen(s){s.name===this.tag&&(this.attr?this.model=this._parse(s.attributes[this.attr]):this.text=[])}parseText(s){this.attr||this.text.push(s)}parseClose(){return this.attr||(this.model=this._parse(this.text.join(""))),!1}}d.exports=c},{"../base-xform":32}],118:[function(e,d,m){const f=e("../base-xform");class c extends f{constructor(s){super(),this.tag=s.tag,this.attr=s.attr,this.attrs=s.attrs,this.zero=s.zero}render(s,t){(t||this.zero)&&(s.openNode(this.tag),this.attrs&&s.addAttributes(this.attrs),this.attr?s.addAttribute(this.attr,t):s.writeText(t),s.closeNode())}parseOpen(s){return s.name===this.tag?(this.attr?this.model=parseInt(s.attributes[this.attr],10):this.text=[],!0):!1}parseText(s){this.attr||this.text.push(s)}parseClose(){return this.attr||(this.model=parseInt(this.text.join("")||0,10)),!1}}d.exports=c},{"../base-xform":32}],119:[function(e,d,m){const f=e("../base-xform");class c extends f{constructor(s){super(),this.tag=s.tag,this.attr=s.attr,this.attrs=s.attrs}render(s,t){t!==void 0&&(s.openNode(this.tag),this.attrs&&s.addAttributes(this.attrs),this.attr?s.addAttribute(this.attr,t):s.writeText(t),s.closeNode())}parseOpen(s){s.name===this.tag&&(this.attr?this.model=s.attributes[this.attr]:this.text=[])}parseText(s){this.attr||this.text.push(s)}parseClose(){return this.attr||(this.model=this.text.join("")),!1}}d.exports=c},{"../base-xform":32}],120:[function(e,d,m){const f=e("./base-xform"),c=e("../../utils/xml-stream");function u(t,n){t.openNode(n.tag,n.$),n.c&&n.c.forEach(r=>{u(t,r)}),n.t&&t.writeText(n.t),t.closeNode()}class s extends f{constructor(n){super(),this._model=n}render(n){if(!this._xml){const r=new c;u(r,this._model),this._xml=r.xml}n.writeXml(this._xml)}parseOpen(){return!0}parseText(){}parseClose(n){switch(n){case this._model.tag:return!1;default:return!0}}}d.exports=s},{"../../utils/xml-stream":28,"./base-xform":32}],121:[function(e,d,m){const f=e("./text-xform"),c=e("./rich-text-xform"),u=e("../base-xform");class s extends u{constructor(){super(),this.map={r:new c,t:new f}}get tag(){return"rPh"}render(n,r){if(n.openNode(this.tag,{sb:r.sb||0,eb:r.eb||0}),r&&r.hasOwnProperty("richText")&&r.richText){const{r:i}=this.map;r.richText.forEach(o=>{i.render(n,o)})}else r&&this.map.t.render(n,r.text);n.closeNode()}parseOpen(n){const{name:r}=n;return this.parser?(this.parser.parseOpen(n),!0):r===this.tag?(this.model={sb:parseInt(n.attributes.sb,10),eb:parseInt(n.attributes.eb,10)},!0):(this.parser=this.map[r],this.parser?(this.parser.parseOpen(n),!0):!1)}parseText(n){this.parser&&this.parser.parseText(n)}parseClose(n){if(this.parser){if(!this.parser.parseClose(n)){switch(n){case"r":{let r=this.model.richText;r||(r=this.model.richText=[]),r.push(this.parser.model);break}case"t":this.model.text=this.parser.model;break}this.parser=void 0}return!0}switch(n){case this.tag:return!1;default:return!0}}}d.exports=s},{"../base-xform":32,"./rich-text-xform":122,"./text-xform":125}],122:[function(e,d,m){const f=e("./text-xform"),c=e("../style/font-xform"),u=e("../base-xform");class s extends u{constructor(n){super(),this.model=n}get tag(){return"r"}get textXform(){return this._textXform||(this._textXform=new f)}get fontXform(){return this._fontXform||(this._fontXform=new c(s.FONT_OPTIONS))}render(n,r){r=r||this.model,n.openNode("r"),r.font&&this.fontXform.render(n,r.font),this.textXform.render(n,r.text),n.closeNode()}parseOpen(n){if(this.parser)return this.parser.parseOpen(n),!0;switch(n.name){case"r":return this.model={},!0;case"t":return this.parser=this.textXform,this.parser.parseOpen(n),!0;case"rPr":return this.parser=this.fontXform,this.parser.parseOpen(n),!0;default:return!1}}parseText(n){this.parser&&this.parser.parseText(n)}parseClose(n){switch(n){case"r":return!1;case"t":return this.model.text=this.parser.model,this.parser=void 0,!0;case"rPr":return this.model.font=this.parser.model,this.parser=void 0,!0;default:return this.parser&&this.parser.parseClose(n),!0}}}s.FONT_OPTIONS={tagName:"rPr",fontNameTag:"rFont"},d.exports=s},{"../base-xform":32,"../style/font-xform":131,"./text-xform":125}],123:[function(e,d,m){const f=e("./text-xform"),c=e("./rich-text-xform"),u=e("./phonetic-text-xform"),s=e("../base-xform");class t extends s{constructor(r){super(),this.model=r,this.map={r:new c,t:new f,rPh:new u}}get tag(){return"si"}render(r,i){r.openNode(this.tag),i&&i.hasOwnProperty("richText")&&i.richText?i.richText.length?i.richText.forEach(o=>{this.map.r.render(r,o)}):this.map.t.render(r,""):i!=null&&this.map.t.render(r,i),r.closeNode()}parseOpen(r){const{name:i}=r;return this.parser?(this.parser.parseOpen(r),!0):i===this.tag?(this.model={},!0):(this.parser=this.map[i],this.parser?(this.parser.parseOpen(r),!0):!1)}parseText(r){this.parser&&this.parser.parseText(r)}parseClose(r){if(this.parser){if(!this.parser.parseClose(r)){switch(r){case"r":{let i=this.model.richText;i||(i=this.model.richText=[]),i.push(this.parser.model);break}case"t":this.model=this.parser.model;break}this.parser=void 0}return!0}switch(r){case this.tag:return!1;default:return!0}}}d.exports=t},{"../base-xform":32,"./phonetic-text-xform":121,"./rich-text-xform":122,"./text-xform":125}],124:[function(e,d,m){const f=e("../../../utils/xml-stream"),c=e("../base-xform"),u=e("./shared-string-xform");class s extends c{constructor(n){super(),this.model=n||{values:[],count:0},this.hash=Object.create(null),this.rich=Object.create(null)}get sharedStringXform(){return this._sharedStringXform||(this._sharedStringXform=new u)}get values(){return this.model.values}get uniqueCount(){return this.model.values.length}get count(){return this.model.count}getString(n){return this.model.values[n]}add(n){return n.richText?this.addRichText(n):this.addText(n)}addText(n){let r=this.hash[n];return r===void 0&&(r=this.hash[n]=this.model.values.length,this.model.values.push(n)),this.model.count++,r}addRichText(n){const r=this.sharedStringXform.toXml(n);let i=this.rich[r];return i===void 0&&(i=this.rich[r]=this.model.values.length,this.model.values.push(n)),this.model.count++,i}render(n,r){r=r||this._values,n.openXml(f.StdDocAttributes),n.openNode("sst",{xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main",count:r.count,uniqueCount:r.values.length});const i=this.sharedStringXform;r.values.forEach(o=>{i.render(n,o)}),n.closeNode()}parseOpen(n){if(this.parser)return this.parser.parseOpen(n),!0;switch(n.name){case"sst":return!0;case"si":return this.parser=this.sharedStringXform,this.parser.parseOpen(n),!0;default:throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(n)}`)}}parseText(n){this.parser&&this.parser.parseText(n)}parseClose(n){if(this.parser)return this.parser.parseClose(n)||(this.model.values.push(this.parser.model),this.model.count++,this.parser=void 0),!0;switch(n){case"sst":return!1;default:throw new Error(`Unexpected xml node in parseClose: ${n}`)}}}d.exports=s},{"../../../utils/xml-stream":28,"../base-xform":32,"./shared-string-xform":123}],125:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"t"}render(s,t){s.openNode("t"),/^\s|\n|\s$/.test(t)&&s.addAttribute("xml:space","preserve"),s.writeText(t),s.closeNode()}get model(){return this._text.join("").replace(/_x([0-9A-F]{4})_/g,(s,t)=>String.fromCharCode(parseInt(t,16)))}parseOpen(s){switch(s.name){case"t":return this._text=[],!0;default:return!1}}parseText(s){this._text.push(s)}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],126:[function(e,d,m){const f=e("../../../doc/enums"),c=e("../../../utils/utils"),u=e("../base-xform"),s={horizontalValues:["left","center","right","fill","centerContinuous","distributed","justify"].reduce((r,i)=>(r[i]=!0,r),{}),horizontal(r){return this.horizontalValues[r]?r:void 0},verticalValues:["top","middle","bottom","distributed","justify"].reduce((r,i)=>(r[i]=!0,r),{}),vertical(r){return r==="middle"?"center":this.verticalValues[r]?r:void 0},wrapText(r){return r?!0:void 0},shrinkToFit(r){return r?!0:void 0},textRotation(r){switch(r){case"vertical":return r;default:return r=c.validInt(r),r>=-90&&r<=90?r:void 0}},indent(r){return r=c.validInt(r),Math.max(0,r)},readingOrder(r){switch(r){case"ltr":return f.ReadingOrder.LeftToRight;case"rtl":return f.ReadingOrder.RightToLeft;default:return}}},t={toXml(r){if(r=s.textRotation(r),r){if(r==="vertical")return 255;const i=Math.round(r);if(i>=0&&i<=90)return i;if(i<0&&i>=-90)return 90-i}},toModel(r){const i=c.validInt(r);if(i!==void 0){if(i===255)return"vertical";if(i>=0&&i<=90)return i;if(i>90&&i<=180)return 90-i}}};class n extends u{get tag(){return"alignment"}render(i,o){i.addRollback(),i.openNode("alignment");let l=!1;function a(g,v){v&&(i.addAttribute(g,v),l=!0)}a("horizontal",s.horizontal(o.horizontal)),a("vertical",s.vertical(o.vertical)),a("wrapText",s.wrapText(o.wrapText)?"1":!1),a("shrinkToFit",s.shrinkToFit(o.shrinkToFit)?"1":!1),a("indent",s.indent(o.indent)),a("textRotation",t.toXml(o.textRotation)),a("readingOrder",s.readingOrder(o.readingOrder)),i.closeNode(),l?i.commit():i.rollback()}parseOpen(i){const o={};let l=!1;function a(g,v,h){g&&(o[v]=h,l=!0)}a(i.attributes.horizontal,"horizontal",i.attributes.horizontal),a(i.attributes.vertical,"vertical",i.attributes.vertical==="center"?"middle":i.attributes.vertical),a(i.attributes.wrapText,"wrapText",c.parseBoolean(i.attributes.wrapText)),a(i.attributes.shrinkToFit,"shrinkToFit",c.parseBoolean(i.attributes.shrinkToFit)),a(i.attributes.indent,"indent",parseInt(i.attributes.indent,10)),a(i.attributes.textRotation,"textRotation",t.toModel(i.attributes.textRotation)),a(i.attributes.readingOrder,"readingOrder",i.attributes.readingOrder==="2"?"rtl":"ltr"),this.model=l?o:null}parseText(){}parseClose(){return!1}}d.exports=n},{"../../../doc/enums":7,"../../../utils/utils":27,"../base-xform":32}],127:[function(e,d,m){const f=e("../base-xform"),c=e("../../../utils/utils"),u=e("./color-xform");class s extends f{constructor(r){super(),this.name=r,this.map={color:new u}}get tag(){return this.name}render(r,i,o){const l=i&&i.color||o||this.defaultColor;r.openNode(this.name),i&&i.style&&(r.addAttribute("style",i.style),l&&this.map.color.render(r,l)),r.closeNode()}parseOpen(r){if(this.parser)return this.parser.parseOpen(r),!0;switch(r.name){case this.name:{const{style:i}=r.attributes;return i?this.model={style:i}:this.model=void 0,!0}case"color":return this.parser=this.map.color,this.parser.parseOpen(r),!0;default:return!1}}parseText(r){this.parser&&this.parser.parseText(r)}parseClose(r){return this.parser?(this.parser.parseClose(r)||(this.parser=void 0),!0):(r===this.name&&this.map.color.model&&(this.model||(this.model={}),this.model.color=this.map.color.model),!1)}validStyle(r){return s.validStyleValues[r]}}s.validStyleValues=["thin","dashed","dotted","dashDot","hair","dashDotDot","slantDashDot","mediumDashed","mediumDashDotDot","mediumDashDot","medium","double","thick"].reduce((n,r)=>(n[r]=!0,n),{});class t extends f{constructor(){super(),this.map={top:new s("top"),left:new s("left"),bottom:new s("bottom"),right:new s("right"),diagonal:new s("diagonal")}}render(r,i){const{color:o}=i;r.openNode("border"),i.diagonal&&i.diagonal.style&&(i.diagonal.up&&r.addAttribute("diagonalUp","1"),i.diagonal.down&&r.addAttribute("diagonalDown","1"));function l(a,g){a&&!a.color&&i.color&&(a={...a,color:i.color}),g.render(r,a,o)}l(i.left,this.map.left),l(i.right,this.map.right),l(i.top,this.map.top),l(i.bottom,this.map.bottom),l(i.diagonal,this.map.diagonal),r.closeNode()}parseOpen(r){if(this.parser)return this.parser.parseOpen(r),!0;switch(r.name){case"border":return this.reset(),this.diagonalUp=c.parseBoolean(r.attributes.diagonalUp),this.diagonalDown=c.parseBoolean(r.attributes.diagonalDown),!0;default:return this.parser=this.map[r.name],this.parser?(this.parser.parseOpen(r),!0):!1}}parseText(r){this.parser&&this.parser.parseText(r)}parseClose(r){if(this.parser)return this.parser.parseClose(r)||(this.parser=void 0),!0;if(r==="border"){const i=this.model={},o=function(l,a,g){a&&(g&&Object.assign(a,g),i[l]=a)};o("left",this.map.left.model),o("right",this.map.right.model),o("top",this.map.top.model),o("bottom",this.map.bottom.model),o("diagonal",this.map.diagonal.model,{up:this.diagonalUp,down:this.diagonalDown})}return!1}}d.exports=t},{"../../../utils/utils":27,"../base-xform":32,"./color-xform":128}],128:[function(e,d,m){const f=e("../base-xform");class c extends f{constructor(s){super(),this.name=s||"color"}get tag(){return this.name}render(s,t){return t?(s.openNode(this.name),t.argb?s.addAttribute("rgb",t.argb):t.theme!==void 0?(s.addAttribute("theme",t.theme),t.tint!==void 0&&s.addAttribute("tint",t.tint)):t.indexed!==void 0?s.addAttribute("indexed",t.indexed):s.addAttribute("auto","1"),s.closeNode(),!0):!1}parseOpen(s){return s.name===this.name?(s.attributes.rgb?this.model={argb:s.attributes.rgb}:s.attributes.theme?(this.model={theme:parseInt(s.attributes.theme,10)},s.attributes.tint&&(this.model.tint=parseFloat(s.attributes.tint))):s.attributes.indexed?this.model={indexed:parseInt(s.attributes.indexed,10)}:this.model=void 0,!0):!1}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],129:[function(e,d,m){const f=e("../base-xform"),c=e("./alignment-xform"),u=e("./border-xform"),s=e("./fill-xform"),t=e("./font-xform"),n=e("./numfmt-xform"),r=e("./protection-xform");class i extends f{constructor(){super(),this.map={alignment:new c,border:new u,fill:new s,font:new t,numFmt:new n,protection:new r}}get tag(){return"dxf"}render(l,a){if(l.openNode(this.tag),a.font&&this.map.font.render(l,a.font),a.numFmt&&a.numFmtId){const g={id:a.numFmtId,formatCode:a.numFmt};this.map.numFmt.render(l,g)}a.fill&&this.map.fill.render(l,a.fill),a.alignment&&this.map.alignment.render(l,a.alignment),a.border&&this.map.border.render(l,a.border),a.protection&&this.map.protection.render(l,a.protection),l.closeNode()}parseOpen(l){if(this.parser)return this.parser.parseOpen(l),!0;switch(l.name){case this.tag:return this.reset(),!0;default:return this.parser=this.map[l.name],this.parser&&this.parser.parseOpen(l),!0}}parseText(l){this.parser&&this.parser.parseText(l)}parseClose(l){return this.parser?(this.parser.parseClose(l)||(this.parser=void 0),!0):l===this.tag?(this.model={alignment:this.map.alignment.model,border:this.map.border.model,fill:this.map.fill.model,font:this.map.font.model,numFmt:this.map.numFmt.model,protection:this.map.protection.model},!1):!0}}d.exports=i},{"../base-xform":32,"./alignment-xform":126,"./border-xform":127,"./fill-xform":130,"./font-xform":131,"./numfmt-xform":132,"./protection-xform":133}],130:[function(e,d,m){const f=e("../base-xform"),c=e("./color-xform");class u extends f{constructor(){super(),this.map={color:new c}}get tag(){return"stop"}render(i,o){i.openNode("stop"),i.addAttribute("position",o.position),this.map.color.render(i,o.color),i.closeNode()}parseOpen(i){if(this.parser)return this.parser.parseOpen(i),!0;switch(i.name){case"stop":return this.model={position:parseFloat(i.attributes.position)},!0;case"color":return this.parser=this.map.color,this.parser.parseOpen(i),!0;default:return!1}}parseText(){}parseClose(i){return this.parser?(this.parser.parseClose(i)||(this.model.color=this.parser.model,this.parser=void 0),!0):!1}}class s extends f{constructor(){super(),this.map={fgColor:new c("fgColor"),bgColor:new c("bgColor")}}get name(){return"pattern"}get tag(){return"patternFill"}render(i,o){i.openNode("patternFill"),i.addAttribute("patternType",o.pattern),o.fgColor&&this.map.fgColor.render(i,o.fgColor),o.bgColor&&this.map.bgColor.render(i,o.bgColor),i.closeNode()}parseOpen(i){if(this.parser)return this.parser.parseOpen(i),!0;switch(i.name){case"patternFill":return this.model={type:"pattern",pattern:i.attributes.patternType},!0;default:return this.parser=this.map[i.name],this.parser?(this.parser.parseOpen(i),!0):!1}}parseText(i){this.parser&&this.parser.parseText(i)}parseClose(i){return this.parser?(this.parser.parseClose(i)||(this.parser.model&&(this.model[i]=this.parser.model),this.parser=void 0),!0):!1}}class t extends f{constructor(){super(),this.map={stop:new u}}get name(){return"gradient"}get tag(){return"gradientFill"}render(i,o){switch(i.openNode("gradientFill"),o.gradient){case"angle":i.addAttribute("degree",o.degree);break;case"path":i.addAttribute("type","path"),o.center.left&&(i.addAttribute("left",o.center.left),o.center.right===void 0&&i.addAttribute("right",o.center.left)),o.center.right&&i.addAttribute("right",o.center.right),o.center.top&&(i.addAttribute("top",o.center.top),o.center.bottom===void 0&&i.addAttribute("bottom",o.center.top)),o.center.bottom&&i.addAttribute("bottom",o.center.bottom);break}const l=this.map.stop;o.stops.forEach(a=>{l.render(i,a)}),i.closeNode()}parseOpen(i){if(this.parser)return this.parser.parseOpen(i),!0;switch(i.name){case"gradientFill":{const o=this.model={stops:[]};return i.attributes.degree?(o.gradient="angle",o.degree=parseInt(i.attributes.degree,10)):i.attributes.type==="path"&&(o.gradient="path",o.center={left:i.attributes.left?parseFloat(i.attributes.left):0,top:i.attributes.top?parseFloat(i.attributes.top):0},i.attributes.right!==i.attributes.left&&(o.center.right=i.attributes.right?parseFloat(i.attributes.right):0),i.attributes.bottom!==i.attributes.top&&(o.center.bottom=i.attributes.bottom?parseFloat(i.attributes.bottom):0)),!0}case"stop":return this.parser=this.map.stop,this.parser.parseOpen(i),!0;default:return!1}}parseText(i){this.parser&&this.parser.parseText(i)}parseClose(i){return this.parser?(this.parser.parseClose(i)||(this.model.stops.push(this.parser.model),this.parser=void 0),!0):!1}}class n extends f{constructor(){super(),this.map={patternFill:new s,gradientFill:new t}}get tag(){return"fill"}render(i,o){switch(i.addRollback(),i.openNode("fill"),o.type){case"pattern":this.map.patternFill.render(i,o);break;case"gradient":this.map.gradientFill.render(i,o);break;default:i.rollback();return}i.closeNode(),i.commit()}parseOpen(i){if(this.parser)return this.parser.parseOpen(i),!0;switch(i.name){case"fill":return this.model={},!0;default:return this.parser=this.map[i.name],this.parser?(this.parser.parseOpen(i),!0):!1}}parseText(i){this.parser&&this.parser.parseText(i)}parseClose(i){return this.parser?(this.parser.parseClose(i)||(this.model=this.parser.model,this.model.type=this.parser.name,this.parser=void 0),!0):!1}validStyle(i){return n.validPatternValues[i]}}n.validPatternValues=["none","solid","darkVertical","darkGray","mediumGray","lightGray","gray125","gray0625","darkHorizontal","darkVertical","darkDown","darkUp","darkGrid","darkTrellis","lightHorizontal","lightVertical","lightDown","lightUp","lightGrid","lightTrellis","lightGrid"].reduce((r,i)=>(r[i]=!0,r),{}),n.StopXform=u,n.PatternFillXform=s,n.GradientFillXform=t,d.exports=n},{"../base-xform":32,"./color-xform":128}],131:[function(e,d,m){const f=e("./color-xform"),c=e("../simple/boolean-xform"),u=e("../simple/integer-xform"),s=e("../simple/string-xform"),t=e("./underline-xform"),n=e("../../../utils/under-dash"),r=e("../base-xform");class i extends r{constructor(l){super(),this.options=l||i.OPTIONS,this.map={b:{prop:"bold",xform:new c({tag:"b",attr:"val"})},i:{prop:"italic",xform:new c({tag:"i",attr:"val"})},u:{prop:"underline",xform:new t},charset:{prop:"charset",xform:new u({tag:"charset",attr:"val"})},color:{prop:"color",xform:new f},condense:{prop:"condense",xform:new c({tag:"condense",attr:"val"})},extend:{prop:"extend",xform:new c({tag:"extend",attr:"val"})},family:{prop:"family",xform:new u({tag:"family",attr:"val"})},outline:{prop:"outline",xform:new c({tag:"outline",attr:"val"})},vertAlign:{prop:"vertAlign",xform:new s({tag:"vertAlign",attr:"val"})},scheme:{prop:"scheme",xform:new s({tag:"scheme",attr:"val"})},shadow:{prop:"shadow",xform:new c({tag:"shadow",attr:"val"})},strike:{prop:"strike",xform:new c({tag:"strike",attr:"val"})},sz:{prop:"size",xform:new u({tag:"sz",attr:"val"})}},this.map[this.options.fontNameTag]={prop:"name",xform:new s({tag:this.options.fontNameTag,attr:"val"})}}get tag(){return this.options.tagName}render(l,a){const{map:g}=this;l.openNode(this.options.tagName),n.each(this.map,(v,h)=>{g[h].xform.render(l,a[v.prop])}),l.closeNode()}parseOpen(l){if(this.parser)return this.parser.parseOpen(l),!0;if(this.map[l.name])return this.parser=this.map[l.name].xform,this.parser.parseOpen(l);switch(l.name){case this.options.tagName:return this.model={},!0;default:return!1}}parseText(l){this.parser&&this.parser.parseText(l)}parseClose(l){if(this.parser&&!this.parser.parseClose(l)){const a=this.map[l];return this.parser.model&&(this.model[a.prop]=this.parser.model),this.parser=void 0,!0}switch(l){case this.options.tagName:return!1;default:return!0}}}i.OPTIONS={tagName:"font",fontNameTag:"name"},d.exports=i},{"../../../utils/under-dash":26,"../base-xform":32,"../simple/boolean-xform":116,"../simple/integer-xform":118,"../simple/string-xform":119,"./color-xform":128,"./underline-xform":136}],132:[function(e,d,m){const f=e("../../../utils/under-dash"),c=e("../../defaultnumformats"),u=e("../base-xform");function s(){const r={};return f.each(c,(i,o)=>{i.f&&(r[i.f]=parseInt(o,10))}),r}const t=s();class n extends u{constructor(i,o){super(),this.id=i,this.formatCode=o}get tag(){return"numFmt"}render(i,o){i.leafNode("numFmt",{numFmtId:o.id,formatCode:o.formatCode})}parseOpen(i){switch(i.name){case"numFmt":return this.model={id:parseInt(i.attributes.numFmtId,10),formatCode:i.attributes.formatCode.replace(/[\\](.)/g,"$1")},!0;default:return!1}}parseText(){}parseClose(){return!1}}n.getDefaultFmtId=function(i){return t[i]},n.getDefaultFmtCode=function(i){return c[i]&&c[i].f},d.exports=n},{"../../../utils/under-dash":26,"../../defaultnumformats":30,"../base-xform":32}],133:[function(e,d,m){const f=e("../base-xform"),c={boolean(s,t){return s===void 0?t:s}};class u extends f{get tag(){return"protection"}render(t,n){t.addRollback(),t.openNode("protection");let r=!1;function i(o,l){l!==void 0&&(t.addAttribute(o,l),r=!0)}i("locked",c.boolean(n.locked,!0)?void 0:"0"),i("hidden",c.boolean(n.hidden,!1)?"1":void 0),t.closeNode(),r?t.commit():t.rollback()}parseOpen(t){const n={locked:t.attributes.locked!=="0",hidden:t.attributes.hidden==="1"},r=!n.locked||n.hidden;this.model=r?n:null}parseText(){}parseClose(){return!1}}d.exports=u},{"../base-xform":32}],134:[function(e,d,m){const f=e("../base-xform"),c=e("./alignment-xform"),u=e("./protection-xform");class s extends f{constructor(n){super(),this.xfId=!!(n&&n.xfId),this.map={alignment:new c,protection:new u}}get tag(){return"xf"}render(n,r){n.openNode("xf",{numFmtId:r.numFmtId||0,fontId:r.fontId||0,fillId:r.fillId||0,borderId:r.borderId||0}),this.xfId&&n.addAttribute("xfId",r.xfId||0),r.numFmtId&&n.addAttribute("applyNumberFormat","1"),r.fontId&&n.addAttribute("applyFont","1"),r.fillId&&n.addAttribute("applyFill","1"),r.borderId&&n.addAttribute("applyBorder","1"),r.alignment&&n.addAttribute("applyAlignment","1"),r.protection&&n.addAttribute("applyProtection","1"),r.alignment&&this.map.alignment.render(n,r.alignment),r.protection&&this.map.protection.render(n,r.protection),n.closeNode()}parseOpen(n){if(this.parser)return this.parser.parseOpen(n),!0;switch(n.name){case"xf":return this.model={numFmtId:parseInt(n.attributes.numFmtId,10),fontId:parseInt(n.attributes.fontId,10),fillId:parseInt(n.attributes.fillId,10),borderId:parseInt(n.attributes.borderId,10)},this.xfId&&(this.model.xfId=parseInt(n.attributes.xfId,10)),!0;case"alignment":return this.parser=this.map.alignment,this.parser.parseOpen(n),!0;case"protection":return this.parser=this.map.protection,this.parser.parseOpen(n),!0;default:return!1}}parseText(n){this.parser&&this.parser.parseText(n)}parseClose(n){return this.parser?(this.parser.parseClose(n)||(this.map.protection===this.parser?this.model.protection=this.parser.model:this.model.alignment=this.parser.model,this.parser=void 0),!0):n!=="xf"}}d.exports=s},{"../base-xform":32,"./alignment-xform":126,"./protection-xform":133}],135:[function(e,d,m){const f=e("../../../doc/enums"),c=e("../../../utils/xml-stream"),u=e("../base-xform"),s=e("../static-xform"),t=e("../list-xform"),n=e("./font-xform"),r=e("./fill-xform"),i=e("./border-xform"),o=e("./numfmt-xform"),l=e("./style-xform"),a=e("./dxf-xform"),g=164;class v extends u{constructor(y){super(),this.map={numFmts:new t({tag:"numFmts",count:!0,childXform:new o}),fonts:new t({tag:"fonts",count:!0,childXform:new n,$:{"x14ac:knownFonts":1}}),fills:new t({tag:"fills",count:!0,childXform:new r}),borders:new t({tag:"borders",count:!0,childXform:new i}),cellStyleXfs:new t({tag:"cellStyleXfs",count:!0,childXform:new l}),cellXfs:new t({tag:"cellXfs",count:!0,childXform:new l({xfId:!0})}),dxfs:new t({tag:"dxfs",always:!0,count:!0,childXform:new a}),numFmt:new o,font:new n,fill:new r,border:new i,style:new l({xfId:!0}),cellStyles:v.STATIC_XFORMS.cellStyles,tableStyles:v.STATIC_XFORMS.tableStyles,extLst:v.STATIC_XFORMS.extLst},y&&this.init()}initIndex(){this.index={style:{},numFmt:{},numFmtNextId:164,font:{},border:{},fill:{}}}init(){this.model={styles:[],numFmts:[],fonts:[],borders:[],fills:[],dxfs:[]},this.initIndex(),this._addBorder({}),this._addStyle({numFmtId:0,fontId:0,fillId:0,borderId:0,xfId:0}),this._addFill({type:"pattern",pattern:"none"}),this._addFill({type:"pattern",pattern:"gray125"}),this.weakMap=new WeakMap}render(y,S){S=S||this.model,y.openXml(c.StdDocAttributes),y.openNode("styleSheet",v.STYLESHEET_ATTRIBUTES),this.index?(S.numFmts&&S.numFmts.length&&(y.openNode("numFmts",{count:S.numFmts.length}),S.numFmts.forEach(E=>{y.writeXml(E)}),y.closeNode()),S.fonts.length||this._addFont({size:11,color:{theme:1},name:"Calibri",family:2,scheme:"minor"}),y.openNode("fonts",{count:S.fonts.length,"x14ac:knownFonts":1}),S.fonts.forEach(E=>{y.writeXml(E)}),y.closeNode(),y.openNode("fills",{count:S.fills.length}),S.fills.forEach(E=>{y.writeXml(E)}),y.closeNode(),y.openNode("borders",{count:S.borders.length}),S.borders.forEach(E=>{y.writeXml(E)}),y.closeNode(),this.map.cellStyleXfs.render(y,[{numFmtId:0,fontId:0,fillId:0,borderId:0,xfId:0}]),y.openNode("cellXfs",{count:S.styles.length}),S.styles.forEach(E=>{y.writeXml(E)}),y.closeNode()):(this.map.numFmts.render(y,S.numFmts),this.map.fonts.render(y,S.fonts),this.map.fills.render(y,S.fills),this.map.borders.render(y,S.borders),this.map.cellStyleXfs.render(y,[{numFmtId:0,fontId:0,fillId:0,borderId:0,xfId:0}]),this.map.cellXfs.render(y,S.styles)),v.STATIC_XFORMS.cellStyles.render(y),this.map.dxfs.render(y,S.dxfs),v.STATIC_XFORMS.tableStyles.render(y),v.STATIC_XFORMS.extLst.render(y),y.closeNode()}parseOpen(y){if(this.parser)return this.parser.parseOpen(y),!0;switch(y.name){case"styleSheet":return this.initIndex(),!0;default:return this.parser=this.map[y.name],this.parser&&this.parser.parseOpen(y),!0}}parseText(y){this.parser&&this.parser.parseText(y)}parseClose(y){if(this.parser)return this.parser.parseClose(y)||(this.parser=void 0),!0;switch(y){case"styleSheet":{this.model={};const S=(E,I)=>{I.model&&I.model.length&&(this.model[E]=I.model)};if(S("numFmts",this.map.numFmts),S("fonts",this.map.fonts),S("fills",this.map.fills),S("borders",this.map.borders),S("styles",this.map.cellXfs),S("dxfs",this.map.dxfs),this.index={model:[],numFmt:[]},this.model.numFmts){const E=this.index.numFmt;this.model.numFmts.forEach(I=>{E[I.id]=I.formatCode})}return!1}default:return!0}}addStyleModel(y,S){if(!y)return 0;if(this.model.fonts.length||this._addFont({size:11,color:{theme:1},name:"Calibri",family:2,scheme:"minor"}),this.weakMap&&this.weakMap.has(y))return this.weakMap.get(y);const E={};if(S=S||f.ValueType.Number,y.numFmt)E.numFmtId=this._addNumFmtStr(y.numFmt);else switch(S){case f.ValueType.Number:E.numFmtId=this._addNumFmtStr("General");break;case f.ValueType.Date:E.numFmtId=this._addNumFmtStr("mm-dd-yy");break}y.font&&(E.fontId=this._addFont(y.font)),y.border&&(E.borderId=this._addBorder(y.border)),y.fill&&(E.fillId=this._addFill(y.fill)),y.alignment&&(E.alignment=y.alignment),y.protection&&(E.protection=y.protection);const I=this._addStyle(E);return this.weakMap&&this.weakMap.set(y,I),I}getStyleModel(y){const S=this.model.styles[y];if(!S)return null;let E=this.index.model[y];if(E)return E;if(E=this.index.model[y]={},S.numFmtId){const F=this.index.numFmt[S.numFmtId]||o.getDefaultFmtCode(S.numFmtId);F&&(E.numFmt=F)}function I(F,B,j){if(j||j===0){const X=B[j];X&&(E[F]=X)}}return I("font",this.model.fonts,S.fontId),I("border",this.model.borders,S.borderId),I("fill",this.model.fills,S.fillId),S.alignment&&(E.alignment=S.alignment),S.protection&&(E.protection=S.protection),E}addDxfStyle(y){return y.numFmt&&(y.numFmtId=this._addNumFmtStr(y.numFmt)),this.model.dxfs.push(y),this.model.dxfs.length-1}getDxfStyle(y){return this.model.dxfs[y]}_addStyle(y){const S=this.map.style.toXml(y);let E=this.index.style[S];return E===void 0&&(E=this.index.style[S]=this.model.styles.length,this.model.styles.push(S)),E}_addNumFmtStr(y){let S=o.getDefaultFmtId(y);if(S!==void 0||(S=this.index.numFmt[y],S!==void 0))return S;S=this.index.numFmt[y]=g+this.model.numFmts.length;const E=this.map.numFmt.toXml({id:S,formatCode:y});return this.model.numFmts.push(E),S}_addFont(y){const S=this.map.font.toXml(y);let E=this.index.font[S];return E===void 0&&(E=this.index.font[S]=this.model.fonts.length,this.model.fonts.push(S)),E}_addBorder(y){const S=this.map.border.toXml(y);let E=this.index.border[S];return E===void 0&&(E=this.index.border[S]=this.model.borders.length,this.model.borders.push(S)),E}_addFill(y){const S=this.map.fill.toXml(y);let E=this.index.fill[S];return E===void 0&&(E=this.index.fill[S]=this.model.fills.length,this.model.fills.push(S)),E}}v.STYLESHEET_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main","xmlns:mc":"http://schemas.openxmlformats.org/markup-compatibility/2006","mc:Ignorable":"x14ac x16r2","xmlns:x14ac":"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac","xmlns:x16r2":"http://schemas.microsoft.com/office/spreadsheetml/2015/02/main"},v.STATIC_XFORMS={cellStyles:new s({tag:"cellStyles",$:{count:1},c:[{tag:"cellStyle",$:{name:"Normal",xfId:0,builtinId:0}}]}),dxfs:new s({tag:"dxfs",$:{count:0}}),tableStyles:new s({tag:"tableStyles",$:{count:0,defaultTableStyle:"TableStyleMedium2",defaultPivotStyle:"PivotStyleLight16"}}),extLst:new s({tag:"extLst",c:[{tag:"ext",$:{uri:"{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}","xmlns:x14":"http://schemas.microsoft.com/office/spreadsheetml/2009/9/main"},c:[{tag:"x14:slicerStyles",$:{defaultSlicerStyle:"SlicerStyleLight1"}}]},{tag:"ext",$:{uri:"{9260A510-F301-46a8-8635-F512D64BE5F5}","xmlns:x15":"http://schemas.microsoft.com/office/spreadsheetml/2010/11/main"},c:[{tag:"x15:timelineStyles",$:{defaultTimelineStyle:"TimeSlicerStyleLight1"}}]}]})};class h extends v{constructor(){super(),this.model={styles:[{numFmtId:0,fontId:0,fillId:0,borderId:0,xfId:0}],numFmts:[],fonts:[{size:11,color:{theme:1},name:"Calibri",family:2,scheme:"minor"}],borders:[{}],fills:[{type:"pattern",pattern:"none"},{type:"pattern",pattern:"gray125"}]}}parseStream(y){return y.autodrain(),Promise.resolve()}addStyleModel(y,S){switch(S){case f.ValueType.Date:return this.dateStyleId;default:return 0}}get dateStyleId(){if(!this._dateStyleId){const y={numFmtId:o.getDefaultFmtId("mm-dd-yy")};this._dateStyleId=this.model.styles.length,this.model.styles.push(y)}return this._dateStyleId}getStyleModel(){return{}}}v.Mock=h,d.exports=v},{"../../../doc/enums":7,"../../../utils/xml-stream":28,"../base-xform":32,"../list-xform":71,"../static-xform":120,"./border-xform":127,"./dxf-xform":129,"./fill-xform":130,"./font-xform":131,"./numfmt-xform":132,"./style-xform":134}],136:[function(e,d,m){const f=e("../base-xform");class c extends f{constructor(s){super(),this.model=s}get tag(){return"u"}render(s,t){if(t=t||this.model,t===!0)s.leafNode("u");else{const n=c.Attributes[t];n&&s.leafNode("u",n)}}parseOpen(s){s.name==="u"&&(this.model=s.attributes.val||!0)}parseText(){}parseClose(){return!1}}c.Attributes={single:{},double:{val:"double"},singleAccounting:{val:"singleAccounting"},doubleAccounting:{val:"doubleAccounting"}},d.exports=c},{"../base-xform":32}],137:[function(e,d,m){const f=e("../base-xform"),c=e("./filter-column-xform");class u extends f{constructor(){super(),this.map={filterColumn:new c}}get tag(){return"autoFilter"}prepare(t){t.columns.forEach((n,r)=>{this.map.filterColumn.prepare(n,{index:r})})}render(t,n){return t.openNode(this.tag,{ref:n.autoFilterRef}),n.columns.forEach(r=>{this.map.filterColumn.render(t,r)}),t.closeNode(),!0}parseOpen(t){if(this.parser)return this.parser.parseOpen(t),!0;switch(t.name){case this.tag:return this.model={autoFilterRef:t.attributes.ref,columns:[]},!0;default:if(this.parser=this.map[t.name],this.parser)return this.parseOpen(t),!0;throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(t)}`)}}parseText(t){this.parser&&this.parser.parseText(t)}parseClose(t){if(this.parser)return this.parser.parseClose(t)||(this.model.columns.push(this.parser.model),this.parser=void 0),!0;switch(t){case this.tag:return!1;default:throw new Error(`Unexpected xml node in parseClose: ${t}`)}}}d.exports=u},{"../base-xform":32,"./filter-column-xform":139}],138:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"customFilter"}render(s,t){s.leafNode(this.tag,{val:t.val,operator:t.operator})}parseOpen(s){return s.name===this.tag?(this.model={val:s.attributes.val,operator:s.attributes.operator},!0):!1}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],139:[function(e,d,m){const f=e("../base-xform"),c=e("../list-xform"),u=e("./custom-filter-xform"),s=e("./filter-xform");class t extends f{constructor(){super(),this.map={customFilters:new c({tag:"customFilters",count:!1,empty:!0,childXform:new u}),filters:new c({tag:"filters",count:!1,empty:!0,childXform:new s})}}get tag(){return"filterColumn"}prepare(r,i){r.colId=i.index.toString()}render(r,i){return i.customFilters?(r.openNode(this.tag,{colId:i.colId,hiddenButton:i.filterButton?"0":"1"}),this.map.customFilters.render(r,i.customFilters),r.closeNode(),!0):(r.leafNode(this.tag,{colId:i.colId,hiddenButton:i.filterButton?"0":"1"}),!0)}parseOpen(r){if(this.parser)return this.parser.parseOpen(r),!0;const{attributes:i}=r;switch(r.name){case this.tag:return this.model={filterButton:i.hiddenButton==="0"},!0;default:if(this.parser=this.map[r.name],this.parser)return this.parseOpen(r),!0;throw new Error(`Unexpected xml node in parseOpen: ${JSON.stringify(r)}`)}}parseText(){}parseClose(r){if(this.parser)return this.parser.parseClose(r)||(this.parser=void 0),!0;switch(r){case this.tag:return this.model.customFilters=this.map.customFilters.model,!1;default:return!0}}}d.exports=t},{"../base-xform":32,"../list-xform":71,"./custom-filter-xform":138,"./filter-xform":140}],140:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"filter"}render(s,t){s.leafNode(this.tag,{val:t.val})}parseOpen(s){return s.name===this.tag?(this.model={val:s.attributes.val},!0):!1}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],141:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"tableColumn"}prepare(s,t){s.id=t.index+1}render(s,t){return s.leafNode(this.tag,{id:t.id.toString(),name:t.name,totalsRowLabel:t.totalsRowLabel,totalsRowFunction:t.totalsRowFunction,dxfId:t.dxfId}),!0}parseOpen(s){if(s.name===this.tag){const{attributes:t}=s;return this.model={name:t.name,totalsRowLabel:t.totalsRowLabel,totalsRowFunction:t.totalsRowFunction,dxfId:t.dxfId},!0}return!1}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],142:[function(e,d,m){const f=e("../base-xform");class c extends f{get tag(){return"tableStyleInfo"}render(s,t){return s.leafNode(this.tag,{name:t.theme?t.theme:void 0,showFirstColumn:t.showFirstColumn?"1":"0",showLastColumn:t.showLastColumn?"1":"0",showRowStripes:t.showRowStripes?"1":"0",showColumnStripes:t.showColumnStripes?"1":"0"}),!0}parseOpen(s){if(s.name===this.tag){const{attributes:t}=s;return this.model={theme:t.name?t.name:null,showFirstColumn:t.showFirstColumn==="1",showLastColumn:t.showLastColumn==="1",showRowStripes:t.showRowStripes==="1",showColumnStripes:t.showColumnStripes==="1"},!0}return!1}parseText(){}parseClose(){return!1}}d.exports=c},{"../base-xform":32}],143:[function(e,d,m){const f=e("../../../utils/xml-stream"),c=e("../base-xform"),u=e("../list-xform"),s=e("./auto-filter-xform"),t=e("./table-column-xform"),n=e("./table-style-info-xform");class r extends c{constructor(){super(),this.map={autoFilter:new s,tableColumns:new u({tag:"tableColumns",count:!0,empty:!0,childXform:new t}),tableStyleInfo:new n}}prepare(o,l){this.map.autoFilter.prepare(o),this.map.tableColumns.prepare(o.columns,l)}get tag(){return"table"}render(o,l){o.openXml(f.StdDocAttributes),o.openNode(this.tag,{...r.TABLE_ATTRIBUTES,id:l.id,name:l.name,displayName:l.displayName||l.name,ref:l.tableRef,totalsRowCount:l.totalsRow?"1":void 0,totalsRowShown:l.totalsRow?void 0:"1",headerRowCount:l.headerRow?"1":"0"}),this.map.autoFilter.render(o,l),this.map.tableColumns.render(o,l.columns),this.map.tableStyleInfo.render(o,l.style),o.closeNode()}parseOpen(o){if(this.parser)return this.parser.parseOpen(o),!0;const{name:l,attributes:a}=o;switch(l){case this.tag:this.reset(),this.model={name:a.name,displayName:a.displayName||a.name,tableRef:a.ref,totalsRow:a.totalsRowCount==="1",headerRow:a.headerRowCount==="1"};break;default:this.parser=this.map[o.name],this.parser&&this.parser.parseOpen(o);break}return!0}parseText(o){this.parser&&this.parser.parseText(o)}parseClose(o){if(this.parser)return this.parser.parseClose(o)||(this.parser=void 0),!0;switch(o){case this.tag:return this.model.columns=this.map.tableColumns.model,this.map.autoFilter.model&&(this.model.autoFilterRef=this.map.autoFilter.model.autoFilterRef,this.map.autoFilter.model.columns.forEach((l,a)=>{this.model.columns[a].filterButton=l.filterButton})),this.model.style=this.map.tableStyleInfo.model,!1;default:return!0}}reconcile(o,l){o.columns.forEach(a=>{a.dxfId!==void 0&&(a.style=l.styles.getDxfStyle(a.dxfId))})}}r.TABLE_ATTRIBUTES={xmlns:"http://schemas.openxmlformats.org/spreadsheetml/2006/main","xmlns:mc":"http://schemas.openxmlformats.org/markup-compatibility/2006","mc:Ignorable":"xr xr3","xmlns:xr":"http://schemas.microsoft.com/office/spreadsheetml/2014/revision","xmlns:xr3":"http://schemas.microsoft.com/office/spreadsheetml/2016/revision3"},d.exports=r},{"../../../utils/xml-stream":28,"../base-xform":32,"../list-xform":71,"./auto-filter-xform":137,"./table-column-xform":141,"./table-style-info-xform":142}],144:[function(e,d,m){(function(f,c){(function(){const u=e("fs"),s=e("jszip"),{PassThrough:t}=e("readable-stream"),n=e("../utils/zip-stream"),r=e("../utils/stream-buf"),i=e("../utils/utils"),o=e("../utils/xml-stream"),{bufferToString:l}=e("../utils/browser-buffer-decode"),a=e("./xform/style/styles-xform"),g=e("./xform/core/core-xform"),v=e("./xform/strings/shared-strings-xform"),h=e("./xform/core/relationships-xform"),w=e("./xform/core/content-types-xform"),y=e("./xform/core/app-xform"),S=e("./xform/book/workbook-xform"),E=e("./xform/sheet/worksheet-xform"),I=e("./xform/drawing/drawing-xform"),F=e("./xform/table/table-xform"),B=e("./xform/comment/comments-xform"),j=e("./xform/comment/vml-notes-xform"),X=e("./xml/theme1");function G(J,H){return new Promise((M,T)=>{u.readFile(J,H,(_,A)=>{_?T(_):M(A)})})}class V{constructor(H){this.workbook=H}async readFile(H,M){if(!await i.fs.exists(H))throw new Error(`File not found: ${H}`);const T=u.createReadStream(H);try{const _=await this.read(T,M);return T.close(),_}catch(_){throw T.close(),_}}parseRels(H){return new h().parseStream(H)}parseWorkbook(H){return new S().parseStream(H)}parseSharedStrings(H){return new v().parseStream(H)}reconcile(H,M){const T=new S,_=new E(M),A=new I,P=new F;T.reconcile(H);const L={media:H.media,mediaIndex:H.mediaIndex};Object.keys(H.drawings).forEach(k=>{const C=H.drawings[k],O=H.drawingRels[k];O&&(L.rels=O.reduce((W,ne)=>(W[ne.Id]=ne,W),{}),(C.anchors||[]).forEach(W=>{const ne=W.picture&&W.picture.hyperlinks;ne&&L.rels[ne.rId]&&(ne.hyperlink=L.rels[ne.rId].Target,delete ne.rId)}),A.reconcile(C,L))});const $={styles:H.styles};Object.values(H.tables).forEach(k=>{P.reconcile(k,$)});const R={styles:H.styles,sharedStrings:H.sharedStrings,media:H.media,mediaIndex:H.mediaIndex,date1904:H.properties&&H.properties.date1904,drawings:H.drawings,comments:H.comments,tables:H.tables,vmlDrawings:H.vmlDrawings};H.worksheets.forEach(k=>{k.relationships=H.worksheetRels[k.sheetNo],_.reconcile(k,R)}),delete H.worksheetHash,delete H.worksheetRels,delete H.globalRels,delete H.sharedStrings,delete H.workbookRels,delete H.sheetDefs,delete H.styles,delete H.mediaIndex,delete H.drawings,delete H.drawingRels,delete H.vmlDrawings}async _processWorksheetEntry(H,M,T,_,A){const L=await new E(_).parseStream(H);L.sheetNo=T,M.worksheetHash[A]=L,M.worksheets.push(L)}async _processCommentEntry(H,M,T){const A=await new B().parseStream(H);M.comments[`../${T}.xml`]=A}async _processTableEntry(H,M,T){const A=await new F().parseStream(H);M.tables[`../tables/${T}.xml`]=A}async _processWorksheetRelsEntry(H,M,T){const A=await new h().parseStream(H);M.worksheetRels[T]=A}async _processMediaEntry(H,M,T){const _=T.lastIndexOf(".");if(_>=1){const A=T.substr(_+1),P=T.substr(0,_);await new Promise((L,$)=>{const R=new r;R.on("finish",()=>{M.mediaIndex[T]=M.media.length,M.mediaIndex[P]=M.media.length;const k={type:"image",name:P,extension:A,buffer:R.toBuffer()};M.media.push(k),L()}),H.on("error",k=>{$(k)}),H.pipe(R)})}}async _processDrawingEntry(H,M,T){const A=await new I().parseStream(H);M.drawings[T]=A}async _processDrawingRelsEntry(H,M,T){const A=await new h().parseStream(H);M.drawingRels[T]=A}async _processVmlDrawingEntry(H,M,T){const A=await new j().parseStream(H);M.vmlDrawings[`../drawings/${T}.vml`]=A}async _processThemeEntry(H,M,T){await new Promise((_,A)=>{const P=new r;H.on("error",A),P.on("error",A),P.on("finish",()=>{M.themes[T]=P.read().toString(),_()}),H.pipe(P)})}createInputStream(){throw new Error("`XLSX#createInputStream` is deprecated. You should use `XLSX#read` instead. This method will be removed in version 5.0. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md")}async read(H,M){!H[Symbol.asyncIterator]&&H.pipe&&(H=H.pipe(new t));const T=[];for await(const _ of H)T.push(_);return this.load(c.concat(T),M)}async load(H,M){let T;M&&M.base64?T=c.from(H.toString(),"base64"):T=H;const _={worksheets:[],worksheetHash:{},worksheetRels:[],themes:{},media:[],mediaIndex:{},drawings:{},drawingRels:{},comments:{},tables:{},vmlDrawings:{}},A=await s.loadAsync(T);for(const P of Object.values(A.files))if(!P.dir){let L=P.name;L[0]==="/"&&(L=L.substr(1));let $;if(L.match(/xl\/media\//)||L.match(/xl\/theme\/([a-zA-Z0-9]+)[.]xml/))$=new t,$.write(await P.async("nodebuffer"));else{$=new t({writableObjectMode:!0,readableObjectMode:!0});let R;f.browser?R=l(await P.async("nodebuffer")):R=await P.async("string");const k=16*1024;for(let C=0;C{if(T.type==="image"){const _=`xl/media/${T.name}.${T.extension}`;if(T.filename){const A=await G(T.filename);return H.append(A,{name:_})}if(T.buffer)return H.append(T.buffer,{name:_});if(T.base64){const A=T.base64,P=A.substring(A.indexOf(",")+1);return H.append(P,{name:_,base64:!0})}}throw new Error("Unsupported media")}))}addDrawings(H,M){const T=new I,_=new h;M.worksheets.forEach(A=>{const{drawing:P}=A;if(P){T.prepare(P,{});let L=T.toXml(P);H.append(L,{name:`xl/drawings/${P.name}.xml`}),L=_.toXml(P.rels),H.append(L,{name:`xl/drawings/_rels/${P.name}.xml.rels`})}})}addTables(H,M){const T=new F;M.worksheets.forEach(_=>{const{tables:A}=_;A.forEach(P=>{T.prepare(P,{});const L=T.toXml(P);H.append(L,{name:`xl/tables/${P.target}`})})})}async addContentTypes(H,M){const _=new w().toXml(M);H.append(_,{name:"[Content_Types].xml"})}async addApp(H,M){const _=new y().toXml(M);H.append(_,{name:"docProps/app.xml"})}async addCore(H,M){const T=new g;H.append(T.toXml(M),{name:"docProps/core.xml"})}async addThemes(H,M){const T=M.themes||{theme1:X};Object.keys(T).forEach(_=>{const A=T[_],P=`xl/theme/${_}.xml`;H.append(A,{name:P})})}async addOfficeRels(H){const T=new h().toXml([{Id:"rId1",Type:V.RelType.OfficeDocument,Target:"xl/workbook.xml"},{Id:"rId2",Type:V.RelType.CoreProperties,Target:"docProps/core.xml"},{Id:"rId3",Type:V.RelType.ExtenderProperties,Target:"docProps/app.xml"}]);H.append(T,{name:"_rels/.rels"})}async addWorkbookRels(H,M){let T=1;const _=[{Id:`rId${T++}`,Type:V.RelType.Styles,Target:"styles.xml"},{Id:`rId${T++}`,Type:V.RelType.Theme,Target:"theme/theme1.xml"}];M.sharedStrings.count&&_.push({Id:`rId${T++}`,Type:V.RelType.SharedStrings,Target:"sharedStrings.xml"}),M.worksheets.forEach(L=>{L.rId=`rId${T++}`,_.push({Id:L.rId,Type:V.RelType.Worksheet,Target:`worksheets/sheet${L.id}.xml`})});const P=new h().toXml(_);H.append(P,{name:"xl/_rels/workbook.xml.rels"})}async addSharedStrings(H,M){M.sharedStrings&&M.sharedStrings.count&&H.append(M.sharedStrings.xml,{name:"xl/sharedStrings.xml"})}async addStyles(H,M){const{xml:T}=M.styles;T&&H.append(T,{name:"xl/styles.xml"})}async addWorkbook(H,M){const T=new S;H.append(T.toXml(M),{name:"xl/workbook.xml"})}async addWorksheets(H,M){const T=new E,_=new h,A=new B,P=new j;M.worksheets.forEach(L=>{let $=new o;T.render($,L),H.append($.xml,{name:`xl/worksheets/sheet${L.id}.xml`}),L.rels&&L.rels.length&&($=new o,_.render($,L.rels),H.append($.xml,{name:`xl/worksheets/_rels/sheet${L.id}.xml.rels`})),L.comments.length>0&&($=new o,A.render($,L),H.append($.xml,{name:`xl/comments${L.id}.xml`}),$=new o,P.render($,L),H.append($.xml,{name:`xl/drawings/vmlDrawing${L.id}.vml`}))})}_finalize(H){return new Promise((M,T)=>{H.on("finish",()=>{M(this)}),H.on("error",T),H.finalize()})}prepareModel(H,M){H.creator=H.creator||"ExcelJS",H.lastModifiedBy=H.lastModifiedBy||"ExcelJS",H.created=H.created||new Date,H.modified=H.modified||new Date,H.useSharedStrings=M.useSharedStrings!==void 0?M.useSharedStrings:!0,H.useStyles=M.useStyles!==void 0?M.useStyles:!0,H.sharedStrings=new v,H.styles=H.useStyles?new a(!0):new a.Mock;const T=new S,_=new E;T.prepare(H);const A={sharedStrings:H.sharedStrings,styles:H.styles,date1904:H.properties.date1904,drawingsCount:0,media:H.media};A.drawings=H.drawings=[],A.commentRefs=H.commentRefs=[];let P=0;H.tables=[],H.worksheets.forEach(L=>{L.tables.forEach($=>{P++,$.target=`table${P}.xml`,$.id=P,H.tables.push($)}),_.prepare(L,A)})}async write(H,M){M=M||{};const{model:T}=this.workbook,_=new n.ZipWriter(M.zip);return _.pipe(H),this.prepareModel(T,M),await this.addContentTypes(_,T),await this.addOfficeRels(_,T),await this.addWorkbookRels(_,T),await this.addWorksheets(_,T),await this.addSharedStrings(_,T),await this.addDrawings(_,T),await this.addTables(_,T),await Promise.all([this.addThemes(_,T),this.addStyles(_,T)]),await this.addMedia(_,T),await Promise.all([this.addApp(_,T),this.addCore(_,T)]),await this.addWorkbook(_,T),this._finalize(_)}writeFile(H,M){const T=u.createWriteStream(H);return new Promise((_,A)=>{T.on("finish",()=>{_()}),T.on("error",P=>{A(P)}),this.write(T,M).then(()=>{T.end()}).catch(P=>{A(P)})})}async writeBuffer(H){const M=new r;return await this.write(M,H),M.read()}}V.RelType=e("./rel-type"),d.exports=V}).call(this)}).call(this,e("_process"),e("buffer").Buffer)},{"../utils/browser-buffer-decode":16,"../utils/stream-buf":24,"../utils/utils":27,"../utils/xml-stream":28,"../utils/zip-stream":29,"./rel-type":31,"./xform/book/workbook-xform":38,"./xform/comment/comments-xform":40,"./xform/comment/vml-notes-xform":45,"./xform/core/app-xform":51,"./xform/core/content-types-xform":52,"./xform/core/core-xform":53,"./xform/core/relationships-xform":55,"./xform/drawing/drawing-xform":62,"./xform/sheet/worksheet-xform":115,"./xform/strings/shared-strings-xform":124,"./xform/style/styles-xform":135,"./xform/table/table-xform":143,"./xml/theme1":145,_process:467,buffer:220,fs:216,jszip:441,"readable-stream":491}],145:[function(e,d,m){d.exports=` + `},{}],146:[function(e,d,m){(function(f){(function(){Object.defineProperty(m,"__esModule",{value:!0}),m.CsvFormatterStream=void 0;const c=e("stream"),u=e("./formatter");class s extends c.Transform{constructor(n){super({writableObjectMode:n.objectMode}),this.hasWrittenBOM=!1,this.formatterOptions=n,this.rowFormatter=new u.RowFormatter(n),this.hasWrittenBOM=!n.writeBOM}transform(n){return this.rowFormatter.rowTransform=n,this}_transform(n,r,i){let o=!1;try{this.hasWrittenBOM||(this.push(this.formatterOptions.BOM),this.hasWrittenBOM=!0),this.rowFormatter.format(n,(l,a)=>l?(o=!0,i(l)):(a&&a.forEach(g=>{this.push(f.from(g,"utf8"))}),o=!0,i()))}catch(l){if(o)throw l;i(l)}}_flush(n){this.rowFormatter.finish((r,i)=>r?n(r):(i&&i.forEach(o=>{this.push(f.from(o,"utf8"))}),n()))}}m.CsvFormatterStream=s}).call(this)}).call(this,e("buffer").Buffer)},{"./formatter":150,buffer:220,stream:505}],147:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.FormatterOptions=void 0;class f{constructor(){let u=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};var s;this.objectMode=!0,this.delimiter=",",this.rowDelimiter=` +`,this.quote='"',this.escape=this.quote,this.quoteColumns=!1,this.quoteHeaders=this.quoteColumns,this.headers=null,this.includeEndRowDelimiter=!1,this.writeBOM=!1,this.BOM="\uFEFF",this.alwaysWriteHeaders=!1,Object.assign(this,u||{}),typeof(u==null?void 0:u.quoteHeaders)>"u"&&(this.quoteHeaders=this.quoteColumns),(u==null?void 0:u.quote)===!0?this.quote='"':(u==null?void 0:u.quote)===!1&&(this.quote=""),typeof(u==null?void 0:u.escape)!="string"&&(this.escape=this.quote),this.shouldWriteHeaders=!!this.headers&&((s=u.writeHeaders)!==null&&s!==void 0?s:!0),this.headers=Array.isArray(this.headers)?this.headers:null,this.escapedQuote=`${this.escape}${this.quote}`}}m.FormatterOptions=f},{}],148:[function(e,d,m){var f=function(n){return n&&n.__esModule?n:{default:n}};Object.defineProperty(m,"__esModule",{value:!0}),m.FieldFormatter=void 0;const c=f(e("lodash.isboolean")),u=f(e("lodash.isnil")),s=f(e("lodash.escaperegexp"));class t{constructor(r){this._headers=null,this.formatterOptions=r,r.headers!==null&&(this.headers=r.headers),this.REPLACE_REGEXP=new RegExp(r.quote,"g");const i=`[${r.delimiter}${s.default(r.rowDelimiter)}|\r| +]`;this.ESCAPE_REGEXP=new RegExp(i)}set headers(r){this._headers=r}shouldQuote(r,i){const o=i?this.formatterOptions.quoteHeaders:this.formatterOptions.quoteColumns;return c.default(o)?o:Array.isArray(o)?o[r]:this._headers!==null?o[this._headers[r]]:!1}format(r,i,o){const l=`${u.default(r)?"":r}`.replace(/\0/g,""),{formatterOptions:a}=this;return a.quote!==""&&l.indexOf(a.quote)!==-1?this.quoteField(l.replace(this.REPLACE_REGEXP,a.escapedQuote)):l.search(this.ESCAPE_REGEXP)!==-1||this.shouldQuote(i,o)?this.quoteField(l):l}quoteField(r){const{quote:i}=this.formatterOptions;return`${i}${r}${i}`}}m.FieldFormatter=t},{"lodash.escaperegexp":442,"lodash.isboolean":444,"lodash.isnil":447}],149:[function(e,d,m){var f=function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(m,"__esModule",{value:!0}),m.RowFormatter=void 0;const c=f(e("lodash.isfunction")),u=f(e("lodash.isequal")),s=e("./FieldFormatter"),t=e("../types");class n{constructor(i){this.rowCount=0,this.formatterOptions=i,this.fieldFormatter=new s.FieldFormatter(i),this.headers=i.headers,this.shouldWriteHeaders=i.shouldWriteHeaders,this.hasWrittenHeaders=!1,this.headers!==null&&(this.fieldFormatter.headers=this.headers),i.transform&&(this.rowTransform=i.transform)}static isRowHashArray(i){return Array.isArray(i)?Array.isArray(i[0])&&i[0].length===2:!1}static isRowArray(i){return Array.isArray(i)&&!this.isRowHashArray(i)}static gatherHeaders(i){return n.isRowHashArray(i)?i.map(o=>o[0]):Array.isArray(i)?i:Object.keys(i)}static createTransform(i){return t.isSyncTransform(i)?(o,l)=>{let a=null;try{a=i(o)}catch(g){return l(g)}return l(null,a)}:(o,l)=>{i(o,l)}}set rowTransform(i){if(!c.default(i))throw new TypeError("The transform should be a function");this._rowTransform=n.createTransform(i)}format(i,o){this.callTransformer(i,(l,a)=>{if(l)return o(l);if(!i)return o(null);const g=[];if(a){const{shouldFormatColumns:v,headers:h}=this.checkHeaders(a);if(this.shouldWriteHeaders&&h&&!this.hasWrittenHeaders&&(g.push(this.formatColumns(h,!0)),this.hasWrittenHeaders=!0),v){const w=this.gatherColumns(a);g.push(this.formatColumns(w,!1))}}return o(null,g)})}finish(i){const o=[];if(this.formatterOptions.alwaysWriteHeaders&&this.rowCount===0){if(!this.headers)return i(new Error("`alwaysWriteHeaders` option is set to true but `headers` option not provided."));o.push(this.formatColumns(this.headers,!0))}return this.formatterOptions.includeEndRowDelimiter&&o.push(this.formatterOptions.rowDelimiter),i(null,o)}checkHeaders(i){if(this.headers)return{shouldFormatColumns:!0,headers:this.headers};const o=n.gatherHeaders(i);return this.headers=o,this.fieldFormatter.headers=o,this.shouldWriteHeaders?{shouldFormatColumns:!u.default(o,i),headers:o}:{shouldFormatColumns:!0,headers:null}}gatherColumns(i){if(this.headers===null)throw new Error("Headers is currently null");return Array.isArray(i)?n.isRowHashArray(i)?this.headers.map((o,l)=>{const a=i[l];return a?a[1]:""}):n.isRowArray(i)&&!this.shouldWriteHeaders?i:this.headers.map((o,l)=>i[l]):this.headers.map(o=>i[o])}callTransformer(i,o){return this._rowTransform?this._rowTransform(i,o):o(null,i)}formatColumns(i,o){const l=i.map((g,v)=>this.fieldFormatter.format(g,v,o)).join(this.formatterOptions.delimiter),{rowCount:a}=this;return this.rowCount+=1,a?[this.formatterOptions.rowDelimiter,l].join(""):l}}m.RowFormatter=n},{"../types":152,"./FieldFormatter":148,"lodash.isequal":445,"lodash.isfunction":446}],150:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.FieldFormatter=m.RowFormatter=void 0;var f=e("./RowFormatter");Object.defineProperty(m,"RowFormatter",{enumerable:!0,get:function(){return f.RowFormatter}});var c=e("./FieldFormatter");Object.defineProperty(m,"FieldFormatter",{enumerable:!0,get:function(){return c.FieldFormatter}})},{"./FieldFormatter":148,"./RowFormatter":149}],151:[function(e,d,m){(function(f){(function(){var c=Object.create?function(v,h,w,y){y===void 0&&(y=w),Object.defineProperty(v,y,{enumerable:!0,get:function(){return h[w]}})}:function(v,h,w,y){y===void 0&&(y=w),v[y]=h[w]},u=Object.create?function(v,h){Object.defineProperty(v,"default",{enumerable:!0,value:h})}:function(v,h){v.default=h},s=function(v){if(v&&v.__esModule)return v;var h={};if(v!=null)for(var w in v)w!=="default"&&Object.prototype.hasOwnProperty.call(v,w)&&c(h,v,w);return u(h,v),h},t=function(v,h){for(var w in v)w!=="default"&&!Object.prototype.hasOwnProperty.call(h,w)&&c(h,v,w)};Object.defineProperty(m,"__esModule",{value:!0}),m.writeToPath=m.writeToString=m.writeToBuffer=m.writeToStream=m.write=m.format=m.FormatterOptions=m.CsvFormatterStream=void 0;const n=e("util"),r=e("stream"),i=s(e("fs")),o=e("./FormatterOptions"),l=e("./CsvFormatterStream");t(e("./types"),m);var a=e("./CsvFormatterStream");Object.defineProperty(m,"CsvFormatterStream",{enumerable:!0,get:function(){return a.CsvFormatterStream}});var g=e("./FormatterOptions");Object.defineProperty(m,"FormatterOptions",{enumerable:!0,get:function(){return g.FormatterOptions}}),m.format=v=>new l.CsvFormatterStream(new o.FormatterOptions(v)),m.write=(v,h)=>{const w=m.format(h),y=n.promisify((S,E)=>{w.write(S,void 0,E)});return v.reduce((S,E)=>S.then(()=>y(E)),Promise.resolve()).then(()=>w.end()).catch(S=>{w.emit("error",S)}),w},m.writeToStream=(v,h,w)=>m.write(h,w).pipe(v),m.writeToBuffer=function(v){let h=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};const w=[],y=new r.Writable({write(S,E,I){w.push(S),I()}});return new Promise((S,E)=>{y.on("error",E).on("finish",()=>S(f.concat(w))),m.write(v,h).pipe(y)})},m.writeToString=(v,h)=>m.writeToBuffer(v,h).then(w=>w.toString()),m.writeToPath=(v,h,w)=>{const y=i.createWriteStream(v,{encoding:"utf8"});return m.write(h,w).pipe(y)}}).call(this)}).call(this,e("buffer").Buffer)},{"./CsvFormatterStream":146,"./FormatterOptions":147,"./types":152,buffer:220,fs:216,stream:505,util:527}],152:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.isSyncTransform=void 0,m.isSyncTransform=f=>f.length===1},{}],153:[function(e,d,m){(function(f){(function(){Object.defineProperty(m,"__esModule",{value:!0}),m.CsvParserStream=void 0;const c=e("string_decoder"),u=e("stream"),s=e("./transforms"),t=e("./parser");class n extends u.Transform{constructor(i){super({objectMode:i.objectMode}),this.lines="",this.rowCount=0,this.parsedRowCount=0,this.parsedLineCount=0,this.endEmitted=!1,this.headersEmitted=!1,this.parserOptions=i,this.parser=new t.Parser(i),this.headerTransformer=new s.HeaderTransformer(i),this.decoder=new c.StringDecoder(i.encoding),this.rowTransformerValidator=new s.RowTransformerValidator}get hasHitRowLimit(){return this.parserOptions.limitRows&&this.rowCount>=this.parserOptions.maxRows}get shouldEmitRows(){return this.parsedRowCount>this.parserOptions.skipRows}get shouldSkipLine(){return this.parsedLineCount<=this.parserOptions.skipLines}transform(i){return this.rowTransformerValidator.rowTransform=i,this}validate(i){return this.rowTransformerValidator.rowValidator=i,this}emit(i){if(i==="end")return this.endEmitted||(this.endEmitted=!0,super.emit("end",this.rowCount)),!1;for(var o=arguments.length,l=new Array(o>1?o-1:0),a=1;a{const v=y=>{if(y)return o(y);if(g%100===0){f(()=>a(g+1));return}return a(g+1)};if(this.checkAndEmitHeaders(),g>=l||this.hasHitRowLimit)return o();if(this.parsedLineCount+=1,this.shouldSkipLine)return v();const h=i[g];this.rowCount+=1,this.parsedRowCount+=1;const w=this.rowCount;return this.transformRow(h,(y,S)=>{if(y)return this.rowCount-=1,v(y);if(!S)return v(new Error("expected transform result"));if(!S.isValid)this.emit("data-invalid",S.row,w,S.reason);else if(S.row)return this.pushRow(S.row,v);return v()})};a(0)}transformRow(i,o){try{this.headerTransformer.transform(i,(l,a)=>l?o(l):a?a.isValid?a.row?this.shouldEmitRows?this.rowTransformerValidator.transformAndValidate(a.row,o):this.skipRow(o):(this.rowCount-=1,this.parsedRowCount-=1,o(null,{row:null,isValid:!0})):this.shouldEmitRows?o(null,{isValid:!1,row:i}):this.skipRow(o):o(new Error("Expected result from header transform")))}catch(l){o(l)}}checkAndEmitHeaders(){!this.headersEmitted&&this.headerTransformer.headers&&(this.headersEmitted=!0,this.emit("headers",this.headerTransformer.headers))}skipRow(i){return this.rowCount-=1,i(null,{row:null,isValid:!0})}pushRow(i,o){try{this.parserOptions.objectMode?this.push(i):this.push(JSON.stringify(i)),o()}catch(l){o(l)}}static wrapDoneCallback(i){let o=!1;return function(l){if(l){if(o)throw l;o=!0,i(l);return}for(var a=arguments.length,g=new Array(a>1?a-1:0),v=1;v1)throw new Error("delimiter option must be one character long");this.escapedDelimiter=c.default(this.delimiter),this.escapeChar=(r=this.escape)!==null&&r!==void 0?r:this.quote,this.supportsComments=!u.default(this.comment),this.NEXT_TOKEN_REGEXP=new RegExp(`([^\\s]|\\r\\n|\\n|\\r|${this.escapedDelimiter})`),this.maxRows>0&&(this.limitRows=!0)}}m.ParserOptions=s},{"lodash.escaperegexp":442,"lodash.isnil":447}],155:[function(e,d,m){var f=Object.create?function(a,g,v,h){h===void 0&&(h=v),Object.defineProperty(a,h,{enumerable:!0,get:function(){return g[v]}})}:function(a,g,v,h){h===void 0&&(h=v),a[h]=g[v]},c=Object.create?function(a,g){Object.defineProperty(a,"default",{enumerable:!0,value:g})}:function(a,g){a.default=g},u=function(a){if(a&&a.__esModule)return a;var g={};if(a!=null)for(var v in a)v!=="default"&&Object.prototype.hasOwnProperty.call(a,v)&&f(g,a,v);return c(g,a),g},s=function(a,g){for(var v in a)v!=="default"&&!Object.prototype.hasOwnProperty.call(g,v)&&f(g,a,v)};Object.defineProperty(m,"__esModule",{value:!0}),m.parseString=m.parseFile=m.parseStream=m.parse=m.ParserOptions=m.CsvParserStream=void 0;const t=u(e("fs")),n=e("stream"),r=e("./ParserOptions"),i=e("./CsvParserStream");s(e("./types"),m);var o=e("./CsvParserStream");Object.defineProperty(m,"CsvParserStream",{enumerable:!0,get:function(){return o.CsvParserStream}});var l=e("./ParserOptions");Object.defineProperty(m,"ParserOptions",{enumerable:!0,get:function(){return l.ParserOptions}}),m.parse=a=>new i.CsvParserStream(new r.ParserOptions(a)),m.parseStream=(a,g)=>a.pipe(new i.CsvParserStream(new r.ParserOptions(g))),m.parseFile=function(a){let g=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};return t.createReadStream(a).pipe(new i.CsvParserStream(new r.ParserOptions(g)))},m.parseString=(a,g)=>{const v=new n.Readable;return v.push(a),v.push(null),v.pipe(new i.CsvParserStream(new r.ParserOptions(g)))}},{"./CsvParserStream":153,"./ParserOptions":154,"./types":169,fs:216,stream:505}],156:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.Parser=void 0;const f=e("./Scanner"),c=e("./RowParser"),u=e("./Token");class s{constructor(n){this.parserOptions=n,this.rowParser=new c.RowParser(this.parserOptions)}static removeBOM(n){return n&&n.charCodeAt(0)===65279?n.slice(1):n}parse(n,r){const i=new f.Scanner({line:s.removeBOM(n),parserOptions:this.parserOptions,hasMoreData:r});return this.parserOptions.supportsComments?this.parseWithComments(i):this.parseWithoutComments(i)}parseWithoutComments(n){const r=[];let i=!0;for(;i;)i=this.parseRow(n,r);return{line:n.line,rows:r}}parseWithComments(n){const{parserOptions:r}=this,i=[];for(let o=n.nextCharacterToken;o!==null;o=n.nextCharacterToken)if(u.Token.isTokenComment(o,r)){if(n.advancePastLine()===null)return{line:n.lineFromCursor,rows:i};if(!n.hasMoreCharacters)return{line:n.lineFromCursor,rows:i};n.truncateToCursor()}else if(!this.parseRow(n,i))break;return{line:n.line,rows:i}}parseRow(n,r){if(!n.nextNonSpaceToken)return!1;const o=this.rowParser.parse(n);return o===null?!1:(this.parserOptions.ignoreEmpty&&c.RowParser.isEmptyRow(o)||r.push(o),!0)}}m.Parser=s},{"./RowParser":157,"./Scanner":158,"./Token":159}],157:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.RowParser=void 0;const f=e("./column"),c=e("./Token"),u="";class s{constructor(n){this.parserOptions=n,this.columnParser=new f.ColumnParser(n)}static isEmptyRow(n){return n.join(u).replace(/\s+/g,u)===u}parse(n){const{parserOptions:r}=this,{hasMoreData:i}=n,o=n,l=[];let a=this.getStartToken(o,l);for(;a;){if(c.Token.isTokenRowDelimiter(a))return o.advancePastToken(a),!o.hasMoreCharacters&&c.Token.isTokenCarriageReturn(a,r)&&i?null:(o.truncateToCursor(),l);if(!this.shouldSkipColumnParse(o,a,l)){const g=this.columnParser.parse(o);if(g===null)return null;l.push(g)}a=o.nextNonSpaceToken}return i?null:(o.truncateToCursor(),l)}getStartToken(n,r){const i=n.nextNonSpaceToken;return i!==null&&c.Token.isTokenDelimiter(i,this.parserOptions)?(r.push(""),n.nextNonSpaceToken):i}shouldSkipColumnParse(n,r,i){const{parserOptions:o}=this;if(c.Token.isTokenDelimiter(r,o)){n.advancePastToken(r);const l=n.nextCharacterToken;if(!n.hasMoreCharacters||l!==null&&c.Token.isTokenRowDelimiter(l)||l!==null&&c.Token.isTokenDelimiter(l,o))return i.push(""),!0}return!1}}m.RowParser=s},{"./Token":159,"./column":164}],158:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.Scanner=void 0;const f=e("./Token"),c=/((?:\r\n)|\n|\r)/;class u{constructor(t){this.cursor=0,this.line=t.line,this.lineLength=this.line.length,this.parserOptions=t.parserOptions,this.hasMoreData=t.hasMoreData,this.cursor=t.cursor||0}get hasMoreCharacters(){return this.lineLength>this.cursor}get nextNonSpaceToken(){const{lineFromCursor:t}=this,n=this.parserOptions.NEXT_TOKEN_REGEXP;if(t.search(n)===-1)return null;const r=n.exec(t);if(r==null)return null;const i=r[1],o=this.cursor+(r.index||0);return new f.Token({token:i,startCursor:o,endCursor:o+i.length-1})}get nextCharacterToken(){const{cursor:t,lineLength:n}=this;return n<=t?null:new f.Token({token:this.line[t],startCursor:t,endCursor:t})}get lineFromCursor(){return this.line.substr(this.cursor)}advancePastLine(){const t=c.exec(this.lineFromCursor);return t?(this.cursor+=(t.index||0)+t[0].length,this):this.hasMoreData?null:(this.cursor=this.lineLength,this)}advanceTo(t){return this.cursor=t,this}advanceToToken(t){return this.cursor=t.startCursor,this}advancePastToken(t){return this.cursor=t.endCursor+1,this}truncateToCursor(){return this.line=this.lineFromCursor,this.lineLength=this.line.length,this.cursor=0,this}}m.Scanner=u},{"./Token":159}],159:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.Token=void 0;class f{constructor(u){this.token=u.token,this.startCursor=u.startCursor,this.endCursor=u.endCursor}static isTokenRowDelimiter(u){const s=u.token;return s==="\r"||s===` +`||s===`\r +`}static isTokenCarriageReturn(u,s){return u.token===s.carriageReturn}static isTokenComment(u,s){return s.supportsComments&&!!u&&u.token===s.comment}static isTokenEscapeCharacter(u,s){return u.token===s.escapeChar}static isTokenQuote(u,s){return u.token===s.quote}static isTokenDelimiter(u,s){return u.token===s.delimiter}}m.Token=f},{}],160:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.ColumnFormatter=void 0;class f{constructor(u){u.trim?this.format=s=>s.trim():u.ltrim?this.format=s=>s.trimLeft():u.rtrim?this.format=s=>s.trimRight():this.format=s=>s}}m.ColumnFormatter=f},{}],161:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.ColumnParser=void 0;const f=e("./NonQuotedColumnParser"),c=e("./QuotedColumnParser"),u=e("../Token");class s{constructor(n){this.parserOptions=n,this.quotedColumnParser=new c.QuotedColumnParser(n),this.nonQuotedColumnParser=new f.NonQuotedColumnParser(n)}parse(n){const{nextNonSpaceToken:r}=n;return r!==null&&u.Token.isTokenQuote(r,this.parserOptions)?(n.advanceToToken(r),this.quotedColumnParser.parse(n)):this.nonQuotedColumnParser.parse(n)}}m.ColumnParser=s},{"../Token":159,"./NonQuotedColumnParser":162,"./QuotedColumnParser":163}],162:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.NonQuotedColumnParser=void 0;const f=e("./ColumnFormatter"),c=e("../Token");class u{constructor(t){this.parserOptions=t,this.columnFormatter=new f.ColumnFormatter(t)}parse(t){if(!t.hasMoreCharacters)return null;const{parserOptions:n}=this,r=[];let i=t.nextCharacterToken;for(;i&&!(c.Token.isTokenDelimiter(i,n)||c.Token.isTokenRowDelimiter(i));i=t.nextCharacterToken)r.push(i.token),t.advancePastToken(i);return this.columnFormatter.format(r.join(""))}}m.NonQuotedColumnParser=u},{"../Token":159,"./ColumnFormatter":160}],163:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.QuotedColumnParser=void 0;const f=e("./ColumnFormatter"),c=e("../Token");class u{constructor(t){this.parserOptions=t,this.columnFormatter=new f.ColumnFormatter(t)}parse(t){if(!t.hasMoreCharacters)return null;const n=t.cursor,{foundClosingQuote:r,col:i}=this.gatherDataBetweenQuotes(t);if(!r){if(t.advanceTo(n),!t.hasMoreData)throw new Error(`Parse Error: missing closing: '${this.parserOptions.quote||""}' in line: at '${t.lineFromCursor.replace(/[\r\n]/g,"\\n'")}'`);return null}return this.checkForMalformedColumn(t),i}gatherDataBetweenQuotes(t){const{parserOptions:n}=this;let r=!1,i=!1;const o=[];let l=t.nextCharacterToken;for(;!i&&l!==null;l=t.nextCharacterToken){const a=c.Token.isTokenQuote(l,n);if(!r&&a)r=!0;else if(r)if(c.Token.isTokenEscapeCharacter(l,n)){t.advancePastToken(l);const g=t.nextCharacterToken;g!==null&&(c.Token.isTokenQuote(g,n)||c.Token.isTokenEscapeCharacter(g,n))?(o.push(g.token),l=g):a?i=!0:o.push(l.token)}else a?i=!0:o.push(l.token);t.advancePastToken(l)}return{col:this.columnFormatter.format(o.join("")),foundClosingQuote:i}}checkForMalformedColumn(t){const{parserOptions:n}=this,{nextNonSpaceToken:r}=t;if(r){const i=c.Token.isTokenDelimiter(r,n),o=c.Token.isTokenRowDelimiter(r);if(!(i||o)){const l=t.lineFromCursor.substr(0,10).replace(/[\r\n]/g,"\\n'");throw new Error(`Parse Error: expected: '${n.escapedDelimiter}' OR new line got: '${r.token}'. at '${l}`)}t.advanceToToken(r)}else t.hasMoreData||t.advancePastLine()}}m.QuotedColumnParser=u},{"../Token":159,"./ColumnFormatter":160}],164:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.ColumnFormatter=m.QuotedColumnParser=m.NonQuotedColumnParser=m.ColumnParser=void 0;var f=e("./ColumnParser");Object.defineProperty(m,"ColumnParser",{enumerable:!0,get:function(){return f.ColumnParser}});var c=e("./NonQuotedColumnParser");Object.defineProperty(m,"NonQuotedColumnParser",{enumerable:!0,get:function(){return c.NonQuotedColumnParser}});var u=e("./QuotedColumnParser");Object.defineProperty(m,"QuotedColumnParser",{enumerable:!0,get:function(){return u.QuotedColumnParser}});var s=e("./ColumnFormatter");Object.defineProperty(m,"ColumnFormatter",{enumerable:!0,get:function(){return s.ColumnFormatter}})},{"./ColumnFormatter":160,"./ColumnParser":161,"./NonQuotedColumnParser":162,"./QuotedColumnParser":163}],165:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.QuotedColumnParser=m.NonQuotedColumnParser=m.ColumnParser=m.Token=m.Scanner=m.RowParser=m.Parser=void 0;var f=e("./Parser");Object.defineProperty(m,"Parser",{enumerable:!0,get:function(){return f.Parser}});var c=e("./RowParser");Object.defineProperty(m,"RowParser",{enumerable:!0,get:function(){return c.RowParser}});var u=e("./Scanner");Object.defineProperty(m,"Scanner",{enumerable:!0,get:function(){return u.Scanner}});var s=e("./Token");Object.defineProperty(m,"Token",{enumerable:!0,get:function(){return s.Token}});var t=e("./column");Object.defineProperty(m,"ColumnParser",{enumerable:!0,get:function(){return t.ColumnParser}}),Object.defineProperty(m,"NonQuotedColumnParser",{enumerable:!0,get:function(){return t.NonQuotedColumnParser}}),Object.defineProperty(m,"QuotedColumnParser",{enumerable:!0,get:function(){return t.QuotedColumnParser}})},{"./Parser":156,"./RowParser":157,"./Scanner":158,"./Token":159,"./column":164}],166:[function(e,d,m){var f=function(r){return r&&r.__esModule?r:{default:r}};Object.defineProperty(m,"__esModule",{value:!0}),m.HeaderTransformer=void 0;const c=f(e("lodash.isundefined")),u=f(e("lodash.isfunction")),s=f(e("lodash.uniq")),t=f(e("lodash.groupby"));class n{constructor(i){this.headers=null,this.receivedHeaders=!1,this.shouldUseFirstRow=!1,this.processedFirstRow=!1,this.headersLength=0,this.parserOptions=i,i.headers===!0?this.shouldUseFirstRow=!0:Array.isArray(i.headers)?this.setHeaders(i.headers):u.default(i.headers)&&(this.headersTransform=i.headers)}transform(i,o){return this.shouldMapRow(i)?o(null,this.processRow(i)):o(null,{row:null,isValid:!0})}shouldMapRow(i){const{parserOptions:o}=this;if(!this.headersTransform&&o.renameHeaders&&!this.processedFirstRow){if(!this.receivedHeaders)throw new Error("Error renaming headers: new headers must be provided in an array");return this.processedFirstRow=!0,!1}if(!this.receivedHeaders&&Array.isArray(i)){if(this.headersTransform)this.setHeaders(this.headersTransform(i));else if(this.shouldUseFirstRow)this.setHeaders(i);else return!0;return!1}return!0}processRow(i){if(!this.headers)return{row:i,isValid:!0};const{parserOptions:o}=this;if(!o.discardUnmappedColumns&&i.length>this.headersLength){if(!o.strictColumnHandling)throw new Error(`Unexpected Error: column header mismatch expected: ${this.headersLength} columns got: ${i.length}`);return{row:i,isValid:!1,reason:`Column header mismatch expected: ${this.headersLength} columns got: ${i.length}`}}return o.strictColumnHandling&&i.length!!a);if(s.default(l).length!==l.length){const a=t.default(l),g=Object.keys(a).filter(v=>a[v].length>1);throw new Error(`Duplicate headers found ${JSON.stringify(g)}`)}this.headers=i,this.receivedHeaders=!0,this.headersLength=((o=this.headers)===null||o===void 0?void 0:o.length)||0}}m.HeaderTransformer=n},{"lodash.groupby":443,"lodash.isfunction":446,"lodash.isundefined":448,"lodash.uniq":449}],167:[function(e,d,m){var f=function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(m,"__esModule",{value:!0}),m.RowTransformerValidator=void 0;const c=f(e("lodash.isfunction")),u=e("../types");class s{constructor(){this._rowTransform=null,this._rowValidator=null}static createTransform(n){return u.isSyncTransform(n)?(r,i)=>{let o=null;try{o=n(r)}catch(l){return i(l)}return i(null,o)}:n}static createValidator(n){return u.isSyncValidate(n)?(r,i)=>{i(null,{row:r,isValid:n(r)})}:(r,i)=>{n(r,(o,l,a)=>o?i(o):l?i(null,{row:r,isValid:l,reason:a}):i(null,{row:r,isValid:!1,reason:a}))}}set rowTransform(n){if(!c.default(n))throw new TypeError("The transform should be a function");this._rowTransform=s.createTransform(n)}set rowValidator(n){if(!c.default(n))throw new TypeError("The validate should be a function");this._rowValidator=s.createValidator(n)}transformAndValidate(n,r){return this.callTransformer(n,(i,o)=>i?r(i):o?this.callValidator(o,(l,a)=>l?r(l):a&&!a.isValid?r(null,{row:o,isValid:!1,reason:a.reason}):r(null,{row:o,isValid:!0})):r(null,{row:null,isValid:!0}))}callTransformer(n,r){return this._rowTransform?this._rowTransform(n,r):r(null,n)}callValidator(n,r){return this._rowValidator?this._rowValidator(n,r):r(null,{row:n,isValid:!0})}}m.RowTransformerValidator=s},{"../types":169,"lodash.isfunction":446}],168:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.HeaderTransformer=m.RowTransformerValidator=void 0;var f=e("./RowTransformerValidator");Object.defineProperty(m,"RowTransformerValidator",{enumerable:!0,get:function(){return f.RowTransformerValidator}});var c=e("./HeaderTransformer");Object.defineProperty(m,"HeaderTransformer",{enumerable:!0,get:function(){return c.HeaderTransformer}})},{"./HeaderTransformer":166,"./RowTransformerValidator":167}],169:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.isSyncValidate=m.isSyncTransform=void 0,m.isSyncTransform=f=>f.length===1,m.isSyncValidate=f=>f.length===1},{}],170:[function(e,d,m){const f=m;f.bignum=e("bn.js"),f.define=e("./asn1/api").define,f.base=e("./asn1/base"),f.constants=e("./asn1/constants"),f.decoders=e("./asn1/decoders"),f.encoders=e("./asn1/encoders")},{"./asn1/api":171,"./asn1/base":173,"./asn1/constants":177,"./asn1/decoders":179,"./asn1/encoders":182,"bn.js":184}],171:[function(e,d,m){const f=e("./encoders"),c=e("./decoders"),u=e("inherits"),s=m;s.define=function(r,i){return new t(r,i)};function t(n,r){this.name=n,this.body=r,this.decoders={},this.encoders={}}t.prototype._createNamed=function(r){const i=this.name;function o(l){this._initNamed(l,i)}return u(o,r),o.prototype._initNamed=function(a,g){r.call(this,a,g)},new o(this)},t.prototype._getDecoder=function(r){return r=r||"der",this.decoders.hasOwnProperty(r)||(this.decoders[r]=this._createNamed(c[r])),this.decoders[r]},t.prototype.decode=function(r,i,o){return this._getDecoder(i).decode(r,o)},t.prototype._getEncoder=function(r){return r=r||"der",this.encoders.hasOwnProperty(r)||(this.encoders[r]=this._createNamed(f[r])),this.encoders[r]},t.prototype.encode=function(r,i,o){return this._getEncoder(i).encode(r,o)}},{"./decoders":179,"./encoders":182,inherits:440}],172:[function(e,d,m){const f=e("inherits"),c=e("../base/reporter").Reporter,u=e("safer-buffer").Buffer;function s(n,r){if(c.call(this,r),!u.isBuffer(n)){this.error("Input not Buffer");return}this.base=n,this.offset=0,this.length=n.length}f(s,c),m.DecoderBuffer=s,s.isDecoderBuffer=function(r){return r instanceof s?!0:typeof r=="object"&&u.isBuffer(r.base)&&r.constructor.name==="DecoderBuffer"&&typeof r.offset=="number"&&typeof r.length=="number"&&typeof r.save=="function"&&typeof r.restore=="function"&&typeof r.isEmpty=="function"&&typeof r.readUInt8=="function"&&typeof r.skip=="function"&&typeof r.raw=="function"},s.prototype.save=function(){return{offset:this.offset,reporter:c.prototype.save.call(this)}},s.prototype.restore=function(r){const i=new s(this.base);return i.offset=r.offset,i.length=this.offset,this.offset=r.offset,c.prototype.restore.call(this,r.reporter),i},s.prototype.isEmpty=function(){return this.offset===this.length},s.prototype.readUInt8=function(r){return this.offset+1<=this.length?this.base.readUInt8(this.offset++,!0):this.error(r||"DecoderBuffer overrun")},s.prototype.skip=function(r,i){if(!(this.offset+r<=this.length))return this.error(i||"DecoderBuffer overrun");const o=new s(this.base);return o._reporterState=this._reporterState,o.offset=this.offset,o.length=this.offset+r,this.offset+=r,o},s.prototype.raw=function(r){return this.base.slice(r?r.offset:this.offset,this.length)};function t(n,r){if(Array.isArray(n))this.length=0,this.value=n.map(function(i){return t.isEncoderBuffer(i)||(i=new t(i,r)),this.length+=i.length,i},this);else if(typeof n=="number"){if(!(0<=n&&n<=255))return r.error("non-byte EncoderBuffer value");this.value=n,this.length=1}else if(typeof n=="string")this.value=n,this.length=u.byteLength(n);else if(u.isBuffer(n))this.value=n,this.length=n.length;else return r.error("Unsupported type: "+typeof n)}m.EncoderBuffer=t,t.isEncoderBuffer=function(r){return r instanceof t?!0:typeof r=="object"&&r.constructor.name==="EncoderBuffer"&&typeof r.length=="number"&&typeof r.join=="function"},t.prototype.join=function(r,i){return r||(r=u.alloc(this.length)),i||(i=0),this.length===0||(Array.isArray(this.value)?this.value.forEach(function(o){o.join(r,i),i+=o.length}):(typeof this.value=="number"?r[i]=this.value:typeof this.value=="string"?r.write(this.value,i):u.isBuffer(this.value)&&this.value.copy(r,i),i+=this.length)),r}},{"../base/reporter":175,inherits:440,"safer-buffer":495}],173:[function(e,d,m){const f=m;f.Reporter=e("./reporter").Reporter,f.DecoderBuffer=e("./buffer").DecoderBuffer,f.EncoderBuffer=e("./buffer").EncoderBuffer,f.Node=e("./node")},{"./buffer":172,"./node":174,"./reporter":175}],174:[function(e,d,m){const f=e("../base/reporter").Reporter,c=e("../base/buffer").EncoderBuffer,u=e("../base/buffer").DecoderBuffer,s=e("minimalistic-assert"),t=["seq","seqof","set","setof","objid","bool","gentime","utctime","null_","enum","int","objDesc","bitstr","bmpstr","charstr","genstr","graphstr","ia5str","iso646str","numstr","octstr","printstr","t61str","unistr","utf8str","videostr"],n=["key","obj","use","optional","explicit","implicit","def","choice","any","contains"].concat(t),r=["_peekTag","_decodeTag","_use","_decodeStr","_decodeObjid","_decodeTime","_decodeNull","_decodeInt","_decodeBool","_decodeList","_encodeComposite","_encodeStr","_encodeObjid","_encodeTime","_encodeNull","_encodeInt","_encodeBool"];function i(l,a,g){const v={};this._baseState=v,v.name=g,v.enc=l,v.parent=a||null,v.children=null,v.tag=null,v.args=null,v.reverseArgs=null,v.choice=null,v.optional=!1,v.any=!1,v.obj=!1,v.use=null,v.useDecoder=null,v.key=null,v.default=null,v.explicit=null,v.implicit=null,v.contains=null,v.parent||(v.children=[],this._wrap())}d.exports=i;const o=["enc","parent","children","tag","args","reverseArgs","choice","optional","any","obj","use","alteredUse","key","default","explicit","implicit","contains"];i.prototype.clone=function(){const a=this._baseState,g={};o.forEach(function(h){g[h]=a[h]});const v=new this.constructor(g.parent);return v._baseState=g,v},i.prototype._wrap=function(){const a=this._baseState;n.forEach(function(g){this[g]=function(){const h=new this.constructor(this);return a.children.push(h),h[g].apply(h,arguments)}},this)},i.prototype._init=function(a){const g=this._baseState;s(g.parent===null),a.call(this),g.children=g.children.filter(function(v){return v._baseState.parent===this},this),s.equal(g.children.length,1,"Root node can have only one child")},i.prototype._useArgs=function(a){const g=this._baseState,v=a.filter(function(h){return h instanceof this.constructor},this);a=a.filter(function(h){return!(h instanceof this.constructor)},this),v.length!==0&&(s(g.children===null),g.children=v,v.forEach(function(h){h._baseState.parent=this},this)),a.length!==0&&(s(g.args===null),g.args=a,g.reverseArgs=a.map(function(h){if(typeof h!="object"||h.constructor!==Object)return h;const w={};return Object.keys(h).forEach(function(y){y==(y|0)&&(y|=0);const S=h[y];w[S]=y}),w}))},r.forEach(function(l){i.prototype[l]=function(){const g=this._baseState;throw new Error(l+" not implemented for encoding: "+g.enc)}}),t.forEach(function(l){i.prototype[l]=function(){const g=this._baseState,v=Array.prototype.slice.call(arguments);return s(g.tag===null),g.tag=l,this._useArgs(v),this}}),i.prototype.use=function(a){s(a);const g=this._baseState;return s(g.use===null),g.use=a,this},i.prototype.optional=function(){const a=this._baseState;return a.optional=!0,this},i.prototype.def=function(a){const g=this._baseState;return s(g.default===null),g.default=a,g.optional=!0,this},i.prototype.explicit=function(a){const g=this._baseState;return s(g.explicit===null&&g.implicit===null),g.explicit=a,this},i.prototype.implicit=function(a){const g=this._baseState;return s(g.explicit===null&&g.implicit===null),g.implicit=a,this},i.prototype.obj=function(){const a=this._baseState,g=Array.prototype.slice.call(arguments);return a.obj=!0,g.length!==0&&this._useArgs(g),this},i.prototype.key=function(a){const g=this._baseState;return s(g.key===null),g.key=a,this},i.prototype.any=function(){const a=this._baseState;return a.any=!0,this},i.prototype.choice=function(a){const g=this._baseState;return s(g.choice===null),g.choice=a,this._useArgs(Object.keys(a).map(function(v){return a[v]})),this},i.prototype.contains=function(a){const g=this._baseState;return s(g.use===null),g.contains=a,this},i.prototype._decode=function(a,g){const v=this._baseState;if(v.parent===null)return a.wrapResult(v.children[0]._decode(a,g));let h=v.default,w=!0,y=null;if(v.key!==null&&(y=a.enterKey(v.key)),v.optional){let E=null;if(v.explicit!==null?E=v.explicit:v.implicit!==null?E=v.implicit:v.tag!==null&&(E=v.tag),E===null&&!v.any){const I=a.save();try{v.choice===null?this._decodeGeneric(v.tag,a,g):this._decodeChoice(a,g),w=!0}catch{w=!1}a.restore(I)}else if(w=this._peekTag(a,E,v.any),a.isError(w))return w}let S;if(v.obj&&w&&(S=a.enterObject()),w){if(v.explicit!==null){const I=this._decodeTag(a,v.explicit);if(a.isError(I))return I;a=I}const E=a.offset;if(v.use===null&&v.choice===null){let I;v.any&&(I=a.save());const F=this._decodeTag(a,v.implicit!==null?v.implicit:v.tag,v.any);if(a.isError(F))return F;v.any?h=a.raw(I):a=F}if(g&&g.track&&v.tag!==null&&g.track(a.path(),E,a.length,"tagged"),g&&g.track&&v.tag!==null&&g.track(a.path(),a.offset,a.length,"content"),v.any||(v.choice===null?h=this._decodeGeneric(v.tag,a,g):h=this._decodeChoice(a,g)),a.isError(h))return h;if(!v.any&&v.choice===null&&v.children!==null&&v.children.forEach(function(F){F._decode(a,g)}),v.contains&&(v.tag==="octstr"||v.tag==="bitstr")){const I=new u(h);h=this._getUse(v.contains,a._reporterState.obj)._decode(I,g)}}return v.obj&&w&&(h=a.leaveObject(S)),v.key!==null&&(h!==null||w===!0)?a.leaveKey(y,v.key,h):y!==null&&a.exitKey(y),h},i.prototype._decodeGeneric=function(a,g,v){const h=this._baseState;return a==="seq"||a==="set"?null:a==="seqof"||a==="setof"?this._decodeList(g,a,h.args[0],v):/str$/.test(a)?this._decodeStr(g,a,v):a==="objid"&&h.args?this._decodeObjid(g,h.args[0],h.args[1],v):a==="objid"?this._decodeObjid(g,null,null,v):a==="gentime"||a==="utctime"?this._decodeTime(g,a,v):a==="null_"?this._decodeNull(g,v):a==="bool"?this._decodeBool(g,v):a==="objDesc"?this._decodeStr(g,a,v):a==="int"||a==="enum"?this._decodeInt(g,h.args&&h.args[0],v):h.use!==null?this._getUse(h.use,g._reporterState.obj)._decode(g,v):g.error("unknown tag: "+a)},i.prototype._getUse=function(a,g){const v=this._baseState;return v.useDecoder=this._use(a,g),s(v.useDecoder._baseState.parent===null),v.useDecoder=v.useDecoder._baseState.children[0],v.implicit!==v.useDecoder._baseState.implicit&&(v.useDecoder=v.useDecoder.clone(),v.useDecoder._baseState.implicit=v.implicit),v.useDecoder},i.prototype._decodeChoice=function(a,g){const v=this._baseState;let h=null,w=!1;return Object.keys(v.choice).some(function(y){const S=a.save(),E=v.choice[y];try{const I=E._decode(a,g);if(a.isError(I))return!1;h={type:y,value:I},w=!0}catch{return a.restore(S),!1}return!0},this),w?h:a.error("Choice not matched")},i.prototype._createEncoderBuffer=function(a){return new c(a,this.reporter)},i.prototype._encode=function(a,g,v){const h=this._baseState;if(h.default!==null&&h.default===a)return;const w=this._encodeValue(a,g,v);if(w!==void 0&&!this._skipDefault(w,g,v))return w},i.prototype._encodeValue=function(a,g,v){const h=this._baseState;if(h.parent===null)return h.children[0]._encode(a,g||new f);let w=null;if(this.reporter=g,h.optional&&a===void 0)if(h.default!==null)a=h.default;else return;let y=null,S=!1;if(h.any)w=this._createEncoderBuffer(a);else if(h.choice)w=this._encodeChoice(a,g);else if(h.contains)y=this._getUse(h.contains,v)._encode(a,g),S=!0;else if(h.children)y=h.children.map(function(E){if(E._baseState.tag==="null_")return E._encode(null,g,a);if(E._baseState.key===null)return g.error("Child should have a key");const I=g.enterKey(E._baseState.key);if(typeof a!="object")return g.error("Child expected, but input is not object");const F=E._encode(a[E._baseState.key],g,a);return g.leaveKey(I),F},this).filter(function(E){return E}),y=this._createEncoderBuffer(y);else if(h.tag==="seqof"||h.tag==="setof"){if(!(h.args&&h.args.length===1))return g.error("Too many args for : "+h.tag);if(!Array.isArray(a))return g.error("seqof/setof, but data is not Array");const E=this.clone();E._baseState.implicit=null,y=this._createEncoderBuffer(a.map(function(I){const F=this._baseState;return this._getUse(F.args[0],a)._encode(I,g)},E))}else h.use!==null?w=this._getUse(h.use,v)._encode(a,g):(y=this._encodePrimitive(h.tag,a),S=!0);if(!h.any&&h.choice===null){const E=h.implicit!==null?h.implicit:h.tag,I=h.implicit===null?"universal":"context";E===null?h.use===null&&g.error("Tag could be omitted only for .use()"):h.use===null&&(w=this._encodeComposite(E,S,I,y))}return h.explicit!==null&&(w=this._encodeComposite(h.explicit,!1,"context",w)),w},i.prototype._encodeChoice=function(a,g){const v=this._baseState,h=v.choice[a.type];return h||s(!1,a.type+" not found in "+JSON.stringify(Object.keys(v.choice))),h._encode(a.value,g)},i.prototype._encodePrimitive=function(a,g){const v=this._baseState;if(/str$/.test(a))return this._encodeStr(g,a);if(a==="objid"&&v.args)return this._encodeObjid(g,v.reverseArgs[0],v.args[1]);if(a==="objid")return this._encodeObjid(g,null,null);if(a==="gentime"||a==="utctime")return this._encodeTime(g,a);if(a==="null_")return this._encodeNull();if(a==="int"||a==="enum")return this._encodeInt(g,v.args&&v.reverseArgs[0]);if(a==="bool")return this._encodeBool(g);if(a==="objDesc")return this._encodeStr(g,a);throw new Error("Unsupported tag: "+a)},i.prototype._isNumstr=function(a){return/^[0-9 ]*$/.test(a)},i.prototype._isPrintstr=function(a){return/^[A-Za-z0-9 '()+,-./:=?]*$/.test(a)}},{"../base/buffer":172,"../base/reporter":175,"minimalistic-assert":453}],175:[function(e,d,m){const f=e("inherits");function c(s){this._reporterState={obj:null,path:[],options:s||{},errors:[]}}m.Reporter=c,c.prototype.isError=function(t){return t instanceof u},c.prototype.save=function(){const t=this._reporterState;return{obj:t.obj,pathLen:t.path.length}},c.prototype.restore=function(t){const n=this._reporterState;n.obj=t.obj,n.path=n.path.slice(0,t.pathLen)},c.prototype.enterKey=function(t){return this._reporterState.path.push(t)},c.prototype.exitKey=function(t){const n=this._reporterState;n.path=n.path.slice(0,t-1)},c.prototype.leaveKey=function(t,n,r){const i=this._reporterState;this.exitKey(t),i.obj!==null&&(i.obj[n]=r)},c.prototype.path=function(){return this._reporterState.path.join("/")},c.prototype.enterObject=function(){const t=this._reporterState,n=t.obj;return t.obj={},n},c.prototype.leaveObject=function(t){const n=this._reporterState,r=n.obj;return n.obj=t,r},c.prototype.error=function(t){let n;const r=this._reporterState,i=t instanceof u;if(i?n=t:n=new u(r.path.map(function(o){return"["+JSON.stringify(o)+"]"}).join(""),t.message||t,t.stack),!r.options.partial)throw n;return i||r.errors.push(n),n},c.prototype.wrapResult=function(t){const n=this._reporterState;return n.options.partial?{result:this.isError(t)?null:t,errors:n.errors}:t};function u(s,t){this.path=s,this.rethrow(t)}f(u,Error),u.prototype.rethrow=function(t){if(this.message=t+" at: "+(this.path||"(shallow)"),Error.captureStackTrace&&Error.captureStackTrace(this,u),!this.stack)try{throw new Error(this.message)}catch(n){this.stack=n.stack}return this}},{inherits:440}],176:[function(e,d,m){function f(c){const u={};return Object.keys(c).forEach(function(s){(s|0)==s&&(s=s|0);const t=c[s];u[t]=s}),u}m.tagClass={0:"universal",1:"application",2:"context",3:"private"},m.tagClassByName=f(m.tagClass),m.tag={0:"end",1:"bool",2:"int",3:"bitstr",4:"octstr",5:"null_",6:"objid",7:"objDesc",8:"external",9:"real",10:"enum",11:"embed",12:"utf8str",13:"relativeOid",16:"seq",17:"set",18:"numstr",19:"printstr",20:"t61str",21:"videostr",22:"ia5str",23:"utctime",24:"gentime",25:"graphstr",26:"iso646str",27:"genstr",28:"unistr",29:"charstr",30:"bmpstr"},m.tagByName=f(m.tag)},{}],177:[function(e,d,m){const f=m;f._reverse=function(u){const s={};return Object.keys(u).forEach(function(t){(t|0)==t&&(t=t|0);const n=u[t];s[n]=t}),s},f.der=e("./der")},{"./der":176}],178:[function(e,d,m){const f=e("inherits"),c=e("bn.js"),u=e("../base/buffer").DecoderBuffer,s=e("../base/node"),t=e("../constants/der");function n(l){this.enc="der",this.name=l.name,this.entity=l,this.tree=new r,this.tree._init(l.body)}d.exports=n,n.prototype.decode=function(a,g){return u.isDecoderBuffer(a)||(a=new u(a,g)),this.tree._decode(a,g)};function r(l){s.call(this,"der",l)}f(r,s),r.prototype._peekTag=function(a,g,v){if(a.isEmpty())return!1;const h=a.save(),w=i(a,'Failed to peek tag: "'+g+'"');return a.isError(w)?w:(a.restore(h),w.tag===g||w.tagStr===g||w.tagStr+"of"===g||v)},r.prototype._decodeTag=function(a,g,v){const h=i(a,'Failed to decode tag of "'+g+'"');if(a.isError(h))return h;let w=o(a,h.primitive,'Failed to get length of "'+g+'"');if(a.isError(w))return w;if(!v&&h.tag!==g&&h.tagStr!==g&&h.tagStr+"of"!==g)return a.error('Failed to match tag: "'+g+'"');if(h.primitive||w!==null)return a.skip(w,'Failed to match body of: "'+g+'"');const y=a.save(),S=this._skipUntilEnd(a,'Failed to skip indefinite length body: "'+this.tag+'"');return a.isError(S)?S:(w=a.offset-y.offset,a.restore(y),a.skip(w,'Failed to match body of: "'+g+'"'))},r.prototype._skipUntilEnd=function(a,g){for(;;){const v=i(a,g);if(a.isError(v))return v;const h=o(a,v.primitive,g);if(a.isError(h))return h;let w;if(v.primitive||h!==null?w=a.skip(h):w=this._skipUntilEnd(a,g),a.isError(w))return w;if(v.tagStr==="end")break}},r.prototype._decodeList=function(a,g,v,h){const w=[];for(;!a.isEmpty();){const y=this._peekTag(a,"end");if(a.isError(y))return y;const S=v.decode(a,"der",h);if(a.isError(S)&&y)break;w.push(S)}return w},r.prototype._decodeStr=function(a,g){if(g==="bitstr"){const v=a.readUInt8();return a.isError(v)?v:{unused:v,data:a.raw()}}else if(g==="bmpstr"){const v=a.raw();if(v.length%2===1)return a.error("Decoding of string type: bmpstr length mismatch");let h="";for(let w=0;w>6],h=(g&32)===0;if((g&31)===31){let y=g;for(g=0;(y&128)===128;){if(y=l.readUInt8(a),l.isError(y))return y;g<<=7,g|=y&127}}else g&=31;const w=t.tag[g];return{cls:v,primitive:h,tag:g,tagStr:w}}function o(l,a,g){let v=l.readUInt8(g);if(l.isError(v))return v;if(!a&&v===128)return null;if(!(v&128))return v;const h=v&127;if(h>4)return l.error("length octect is too long");v=0;for(let w=0;w=256;S>>=8)w++;const y=c.alloc(1+1+w);y[0]=h,y[1]=128|w;for(let S=1+w,E=v.length;E>0;S--,E>>=8)y[S]=E&255;return this._createEncoderBuffer([y,v])},n.prototype._encodeStr=function(l,a){if(a==="bitstr")return this._createEncoderBuffer([l.unused|0,l.data]);if(a==="bmpstr"){const g=c.alloc(l.length*2);for(let v=0;v=40)return this.reporter.error("Second objid identifier OOB");l.splice(0,2,l[0]*40+l[1])}let v=0;for(let y=0;y=128;S>>=7)v++}const h=c.alloc(v);let w=h.length-1;for(let y=l.length-1;y>=0;y--){let S=l[y];for(h[w--]=S&127;(S>>=7)>0;)h[w--]=128|S&127}return this._createEncoderBuffer(h)};function r(o){return o<10?"0"+o:o}n.prototype._encodeTime=function(l,a){let g;const v=new Date(l);return a==="gentime"?g=[r(v.getUTCFullYear()),r(v.getUTCMonth()+1),r(v.getUTCDate()),r(v.getUTCHours()),r(v.getUTCMinutes()),r(v.getUTCSeconds()),"Z"].join(""):a==="utctime"?g=[r(v.getUTCFullYear()%100),r(v.getUTCMonth()+1),r(v.getUTCDate()),r(v.getUTCHours()),r(v.getUTCMinutes()),r(v.getUTCSeconds()),"Z"].join(""):this.reporter.error("Encoding "+a+" time is not supported yet"),this._encodeStr(g,"octstr")},n.prototype._encodeNull=function(){return this._createEncoderBuffer("")},n.prototype._encodeInt=function(l,a){if(typeof l=="string"){if(!a)return this.reporter.error("String int or enum given, but no values map");if(!a.hasOwnProperty(l))return this.reporter.error("Values map doesn't contain: "+JSON.stringify(l));l=a[l]}if(typeof l!="number"&&!c.isBuffer(l)){const h=l.toArray();!l.sign&&h[0]&128&&h.unshift(0),l=c.from(h)}if(c.isBuffer(l)){let h=l.length;l.length===0&&h++;const w=c.alloc(h);return l.copy(w),l.length===0&&(w[0]=0),this._createEncoderBuffer(w)}if(l<128)return this._createEncoderBuffer(l);if(l<256)return this._createEncoderBuffer([0,l]);let g=1;for(let h=l;h>=256;h>>=8)g++;const v=new Array(g);for(let h=v.length-1;h>=0;h--)v[h]=l&255,l>>=8;return v[0]&128&&v.unshift(0),this._createEncoderBuffer(c.from(v))},n.prototype._encodeBool=function(l){return this._createEncoderBuffer(l?255:0)},n.prototype._use=function(l,a){return typeof l=="function"&&(l=l(a)),l._getEncoder("der").tree},n.prototype._skipDefault=function(l,a,g){const v=this._baseState;let h;if(v.default===null)return!1;const w=l.join();if(v.defaultBuffer===void 0&&(v.defaultBuffer=this._encodeValue(v.default,a,g).join()),w.length!==v.defaultBuffer.length)return!1;for(h=0;h=31?g.error("Multi-octet tag encoding unsupported"):(l||(v|=32),v|=s.tagClassByName[a||"universal"]<<6,v)}},{"../base/node":174,"../constants/der":176,inherits:440,"safer-buffer":495}],182:[function(e,d,m){const f=m;f.der=e("./der"),f.pem=e("./pem")},{"./der":181,"./pem":183}],183:[function(e,d,m){const f=e("inherits"),c=e("./der");function u(s){c.call(this,s),this.enc="pem"}f(u,c),d.exports=u,u.prototype.encode=function(t,n){const i=c.prototype.encode.call(this,t).toString("base64"),o=["-----BEGIN "+n.label+"-----"];for(let l=0;l0?M:T},t.min=function(M,T){return M.cmp(T)<0?M:T},t.prototype._init=function(M,T,_){if(typeof M=="number")return this._initNumber(M,T,_);if(typeof M=="object")return this._initArray(M,T,_);T==="hex"&&(T=16),u(T===(T|0)&&T>=2&&T<=36),M=M.toString().replace(/\s+/g,"");var A=0;M[0]==="-"&&(A++,this.negative=1),A=0;A-=3)L=M[A]|M[A-1]<<8|M[A-2]<<16,this.words[P]|=L<<$&67108863,this.words[P+1]=L>>>26-$&67108863,$+=24,$>=26&&($-=26,P++);else if(_==="le")for(A=0,P=0;A>>26-$&67108863,$+=24,$>=26&&($-=26,P++);return this.strip()};function r(H,M){var T=H.charCodeAt(M);return T>=65&&T<=70?T-55:T>=97&&T<=102?T-87:T-48&15}function i(H,M,T){var _=r(H,T);return T-1>=M&&(_|=r(H,T-1)<<4),_}t.prototype._parseHex=function(M,T,_){this.length=Math.ceil((M.length-T)/6),this.words=new Array(this.length);for(var A=0;A=T;A-=2)$=i(M,T,A)<=18?(P-=18,L+=1,this.words[L]|=$>>>26):P+=8;else{var R=M.length-T;for(A=R%2===0?T+1:T;A=18?(P-=18,L+=1,this.words[L]|=$>>>26):P+=8}this.strip()};function o(H,M,T,_){for(var A=0,P=Math.min(H.length,T),L=M;L=49?A+=$-49+10:$>=17?A+=$-17+10:A+=$}return A}t.prototype._parseBase=function(M,T,_){this.words=[0],this.length=1;for(var A=0,P=1;P<=67108863;P*=T)A++;A--,P=P/T|0;for(var L=M.length-_,$=L%A,R=Math.min(L,L-$)+_,k=0,C=_;C1&&this.words[this.length-1]===0;)this.length--;return this._normSign()},t.prototype._normSign=function(){return this.length===1&&this.words[0]===0&&(this.negative=0),this},t.prototype.inspect=function(){return(this.red?""};var l=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],a=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],g=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];t.prototype.toString=function(M,T){M=M||10,T=T|0||1;var _;if(M===16||M==="hex"){_="";for(var A=0,P=0,L=0;L>>24-A&16777215,P!==0||L!==this.length-1?_=l[6-R.length]+R+_:_=R+_,A+=2,A>=26&&(A-=26,L--)}for(P!==0&&(_=P.toString(16)+_);_.length%T!==0;)_="0"+_;return this.negative!==0&&(_="-"+_),_}if(M===(M|0)&&M>=2&&M<=36){var k=a[M],C=g[M];_="";var O=this.clone();for(O.negative=0;!O.isZero();){var W=O.modn(C).toString(M);O=O.idivn(C),O.isZero()?_=W+_:_=l[k-W.length]+W+_}for(this.isZero()&&(_="0"+_);_.length%T!==0;)_="0"+_;return this.negative!==0&&(_="-"+_),_}u(!1,"Base should be between 2 and 36")},t.prototype.toNumber=function(){var M=this.words[0];return this.length===2?M+=this.words[1]*67108864:this.length===3&&this.words[2]===1?M+=4503599627370496+this.words[1]*67108864:this.length>2&&u(!1,"Number can only safely store up to 53 bits"),this.negative!==0?-M:M},t.prototype.toJSON=function(){return this.toString(16)},t.prototype.toBuffer=function(M,T){return u(typeof n<"u"),this.toArrayLike(n,M,T)},t.prototype.toArray=function(M,T){return this.toArrayLike(Array,M,T)},t.prototype.toArrayLike=function(M,T,_){var A=this.byteLength(),P=_||Math.max(1,A);u(A<=P,"byte array longer than desired length"),u(P>0,"Requested array length <= 0"),this.strip();var L=T==="le",$=new M(P),R,k,C=this.clone();if(L){for(k=0;!C.isZero();k++)R=C.andln(255),C.iushrn(8),$[k]=R;for(;k=4096&&(_+=13,T>>>=13),T>=64&&(_+=7,T>>>=7),T>=8&&(_+=4,T>>>=4),T>=2&&(_+=2,T>>>=2),_+T},t.prototype._zeroBits=function(M){if(M===0)return 26;var T=M,_=0;return T&8191||(_+=13,T>>>=13),T&127||(_+=7,T>>>=7),T&15||(_+=4,T>>>=4),T&3||(_+=2,T>>>=2),T&1||_++,_},t.prototype.bitLength=function(){var M=this.words[this.length-1],T=this._countBits(M);return(this.length-1)*26+T};function v(H){for(var M=new Array(H.bitLength()),T=0;T>>A}return M}t.prototype.zeroBits=function(){if(this.isZero())return 0;for(var M=0,T=0;TM.length?this.clone().ior(M):M.clone().ior(this)},t.prototype.uor=function(M){return this.length>M.length?this.clone().iuor(M):M.clone().iuor(this)},t.prototype.iuand=function(M){var T;this.length>M.length?T=M:T=this;for(var _=0;_M.length?this.clone().iand(M):M.clone().iand(this)},t.prototype.uand=function(M){return this.length>M.length?this.clone().iuand(M):M.clone().iuand(this)},t.prototype.iuxor=function(M){var T,_;this.length>M.length?(T=this,_=M):(T=M,_=this);for(var A=0;A<_.length;A++)this.words[A]=T.words[A]^_.words[A];if(this!==T)for(;AM.length?this.clone().ixor(M):M.clone().ixor(this)},t.prototype.uxor=function(M){return this.length>M.length?this.clone().iuxor(M):M.clone().iuxor(this)},t.prototype.inotn=function(M){u(typeof M=="number"&&M>=0);var T=Math.ceil(M/26)|0,_=M%26;this._expand(T),_>0&&T--;for(var A=0;A0&&(this.words[A]=~this.words[A]&67108863>>26-_),this.strip()},t.prototype.notn=function(M){return this.clone().inotn(M)},t.prototype.setn=function(M,T){u(typeof M=="number"&&M>=0);var _=M/26|0,A=M%26;return this._expand(_+1),T?this.words[_]=this.words[_]|1<M.length?(_=this,A=M):(_=M,A=this);for(var P=0,L=0;L>>26;for(;P!==0&&L<_.length;L++)T=(_.words[L]|0)+P,this.words[L]=T&67108863,P=T>>>26;if(this.length=_.length,P!==0)this.words[this.length]=P,this.length++;else if(_!==this)for(;L<_.length;L++)this.words[L]=_.words[L];return this},t.prototype.add=function(M){var T;return M.negative!==0&&this.negative===0?(M.negative=0,T=this.sub(M),M.negative^=1,T):M.negative===0&&this.negative!==0?(this.negative=0,T=M.sub(this),this.negative=1,T):this.length>M.length?this.clone().iadd(M):M.clone().iadd(this)},t.prototype.isub=function(M){if(M.negative!==0){M.negative=0;var T=this.iadd(M);return M.negative=1,T._normSign()}else if(this.negative!==0)return this.negative=0,this.iadd(M),this.negative=1,this._normSign();var _=this.cmp(M);if(_===0)return this.negative=0,this.length=1,this.words[0]=0,this;var A,P;_>0?(A=this,P=M):(A=M,P=this);for(var L=0,$=0;$>26,this.words[$]=T&67108863;for(;L!==0&&$>26,this.words[$]=T&67108863;if(L===0&&$>>26,O=R&67108863,W=Math.min(k,M.length-1),ne=Math.max(0,k-H.length+1);ne<=W;ne++){var he=k-ne|0;A=H.words[he]|0,P=M.words[ne]|0,L=A*P+O,C+=L/67108864|0,O=L&67108863}T.words[k]=O|0,R=C|0}return R!==0?T.words[k]=R|0:T.length--,T.strip()}var w=function(M,T,_){var A=M.words,P=T.words,L=_.words,$=0,R,k,C,O=A[0]|0,W=O&8191,ne=O>>>13,he=A[1]|0,ue=he&8191,Ae=he>>>13,pe=A[2]|0,te=pe&8191,Z=pe>>>13,q=A[3]|0,de=q&8191,ke=q>>>13,oe=A[4]|0,ie=oe&8191,Q=oe>>>13,z=A[5]|0,Y=z&8191,fe=z>>>13,we=A[6]|0,U=we&8191,ve=we>>>13,Se=A[7]|0,ee=Se&8191,se=Se>>>13,me=A[8]|0,Ee=me&8191,Ie=me>>>13,Ce=A[9]|0,Fe=Ce&8191,ze=Ce>>>13,je=P[0]|0,ge=je&8191,Me=je>>>13,Be=P[1]|0,Xe=Be&8191,ot=Be>>>13,ct=P[2]|0,st=ct&8191,rt=ct>>>13,bt=P[3]|0,Qe=bt&8191,et=bt>>>13,_t=P[4]|0,ft=_t&8191,jt=_t>>>13,It=P[5]|0,ht=It&8191,Dt=It>>>13,Ut=P[6]|0,wt=Ut&8191,er=Ut>>>13,Kt=P[7]|0,pt=Kt&8191,Gt=Kt>>>13,kt=P[8]|0,xt=kt&8191,$t=kt>>>13,Qt=P[9]|0,mt=Qt&8191,qt=Qt>>>13;_.negative=M.negative^T.negative,_.length=19,R=Math.imul(W,ge),k=Math.imul(W,Me),k=k+Math.imul(ne,ge)|0,C=Math.imul(ne,Me);var St=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(St>>>26)|0,St&=67108863,R=Math.imul(ue,ge),k=Math.imul(ue,Me),k=k+Math.imul(Ae,ge)|0,C=Math.imul(Ae,Me),R=R+Math.imul(W,Xe)|0,k=k+Math.imul(W,ot)|0,k=k+Math.imul(ne,Xe)|0,C=C+Math.imul(ne,ot)|0;var Tt=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(Tt>>>26)|0,Tt&=67108863,R=Math.imul(te,ge),k=Math.imul(te,Me),k=k+Math.imul(Z,ge)|0,C=Math.imul(Z,Me),R=R+Math.imul(ue,Xe)|0,k=k+Math.imul(ue,ot)|0,k=k+Math.imul(Ae,Xe)|0,C=C+Math.imul(Ae,ot)|0,R=R+Math.imul(W,st)|0,k=k+Math.imul(W,rt)|0,k=k+Math.imul(ne,st)|0,C=C+Math.imul(ne,rt)|0;var be=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(be>>>26)|0,be&=67108863,R=Math.imul(de,ge),k=Math.imul(de,Me),k=k+Math.imul(ke,ge)|0,C=Math.imul(ke,Me),R=R+Math.imul(te,Xe)|0,k=k+Math.imul(te,ot)|0,k=k+Math.imul(Z,Xe)|0,C=C+Math.imul(Z,ot)|0,R=R+Math.imul(ue,st)|0,k=k+Math.imul(ue,rt)|0,k=k+Math.imul(Ae,st)|0,C=C+Math.imul(Ae,rt)|0,R=R+Math.imul(W,Qe)|0,k=k+Math.imul(W,et)|0,k=k+Math.imul(ne,Qe)|0,C=C+Math.imul(ne,et)|0;var Ne=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(Ne>>>26)|0,Ne&=67108863,R=Math.imul(ie,ge),k=Math.imul(ie,Me),k=k+Math.imul(Q,ge)|0,C=Math.imul(Q,Me),R=R+Math.imul(de,Xe)|0,k=k+Math.imul(de,ot)|0,k=k+Math.imul(ke,Xe)|0,C=C+Math.imul(ke,ot)|0,R=R+Math.imul(te,st)|0,k=k+Math.imul(te,rt)|0,k=k+Math.imul(Z,st)|0,C=C+Math.imul(Z,rt)|0,R=R+Math.imul(ue,Qe)|0,k=k+Math.imul(ue,et)|0,k=k+Math.imul(Ae,Qe)|0,C=C+Math.imul(Ae,et)|0,R=R+Math.imul(W,ft)|0,k=k+Math.imul(W,jt)|0,k=k+Math.imul(ne,ft)|0,C=C+Math.imul(ne,jt)|0;var Le=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(Le>>>26)|0,Le&=67108863,R=Math.imul(Y,ge),k=Math.imul(Y,Me),k=k+Math.imul(fe,ge)|0,C=Math.imul(fe,Me),R=R+Math.imul(ie,Xe)|0,k=k+Math.imul(ie,ot)|0,k=k+Math.imul(Q,Xe)|0,C=C+Math.imul(Q,ot)|0,R=R+Math.imul(de,st)|0,k=k+Math.imul(de,rt)|0,k=k+Math.imul(ke,st)|0,C=C+Math.imul(ke,rt)|0,R=R+Math.imul(te,Qe)|0,k=k+Math.imul(te,et)|0,k=k+Math.imul(Z,Qe)|0,C=C+Math.imul(Z,et)|0,R=R+Math.imul(ue,ft)|0,k=k+Math.imul(ue,jt)|0,k=k+Math.imul(Ae,ft)|0,C=C+Math.imul(Ae,jt)|0,R=R+Math.imul(W,ht)|0,k=k+Math.imul(W,Dt)|0,k=k+Math.imul(ne,ht)|0,C=C+Math.imul(ne,Dt)|0;var Je=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(Je>>>26)|0,Je&=67108863,R=Math.imul(U,ge),k=Math.imul(U,Me),k=k+Math.imul(ve,ge)|0,C=Math.imul(ve,Me),R=R+Math.imul(Y,Xe)|0,k=k+Math.imul(Y,ot)|0,k=k+Math.imul(fe,Xe)|0,C=C+Math.imul(fe,ot)|0,R=R+Math.imul(ie,st)|0,k=k+Math.imul(ie,rt)|0,k=k+Math.imul(Q,st)|0,C=C+Math.imul(Q,rt)|0,R=R+Math.imul(de,Qe)|0,k=k+Math.imul(de,et)|0,k=k+Math.imul(ke,Qe)|0,C=C+Math.imul(ke,et)|0,R=R+Math.imul(te,ft)|0,k=k+Math.imul(te,jt)|0,k=k+Math.imul(Z,ft)|0,C=C+Math.imul(Z,jt)|0,R=R+Math.imul(ue,ht)|0,k=k+Math.imul(ue,Dt)|0,k=k+Math.imul(Ae,ht)|0,C=C+Math.imul(Ae,Dt)|0,R=R+Math.imul(W,wt)|0,k=k+Math.imul(W,er)|0,k=k+Math.imul(ne,wt)|0,C=C+Math.imul(ne,er)|0;var at=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(at>>>26)|0,at&=67108863,R=Math.imul(ee,ge),k=Math.imul(ee,Me),k=k+Math.imul(se,ge)|0,C=Math.imul(se,Me),R=R+Math.imul(U,Xe)|0,k=k+Math.imul(U,ot)|0,k=k+Math.imul(ve,Xe)|0,C=C+Math.imul(ve,ot)|0,R=R+Math.imul(Y,st)|0,k=k+Math.imul(Y,rt)|0,k=k+Math.imul(fe,st)|0,C=C+Math.imul(fe,rt)|0,R=R+Math.imul(ie,Qe)|0,k=k+Math.imul(ie,et)|0,k=k+Math.imul(Q,Qe)|0,C=C+Math.imul(Q,et)|0,R=R+Math.imul(de,ft)|0,k=k+Math.imul(de,jt)|0,k=k+Math.imul(ke,ft)|0,C=C+Math.imul(ke,jt)|0,R=R+Math.imul(te,ht)|0,k=k+Math.imul(te,Dt)|0,k=k+Math.imul(Z,ht)|0,C=C+Math.imul(Z,Dt)|0,R=R+Math.imul(ue,wt)|0,k=k+Math.imul(ue,er)|0,k=k+Math.imul(Ae,wt)|0,C=C+Math.imul(Ae,er)|0,R=R+Math.imul(W,pt)|0,k=k+Math.imul(W,Gt)|0,k=k+Math.imul(ne,pt)|0,C=C+Math.imul(ne,Gt)|0;var Mt=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,R=Math.imul(Ee,ge),k=Math.imul(Ee,Me),k=k+Math.imul(Ie,ge)|0,C=Math.imul(Ie,Me),R=R+Math.imul(ee,Xe)|0,k=k+Math.imul(ee,ot)|0,k=k+Math.imul(se,Xe)|0,C=C+Math.imul(se,ot)|0,R=R+Math.imul(U,st)|0,k=k+Math.imul(U,rt)|0,k=k+Math.imul(ve,st)|0,C=C+Math.imul(ve,rt)|0,R=R+Math.imul(Y,Qe)|0,k=k+Math.imul(Y,et)|0,k=k+Math.imul(fe,Qe)|0,C=C+Math.imul(fe,et)|0,R=R+Math.imul(ie,ft)|0,k=k+Math.imul(ie,jt)|0,k=k+Math.imul(Q,ft)|0,C=C+Math.imul(Q,jt)|0,R=R+Math.imul(de,ht)|0,k=k+Math.imul(de,Dt)|0,k=k+Math.imul(ke,ht)|0,C=C+Math.imul(ke,Dt)|0,R=R+Math.imul(te,wt)|0,k=k+Math.imul(te,er)|0,k=k+Math.imul(Z,wt)|0,C=C+Math.imul(Z,er)|0,R=R+Math.imul(ue,pt)|0,k=k+Math.imul(ue,Gt)|0,k=k+Math.imul(Ae,pt)|0,C=C+Math.imul(Ae,Gt)|0,R=R+Math.imul(W,xt)|0,k=k+Math.imul(W,$t)|0,k=k+Math.imul(ne,xt)|0,C=C+Math.imul(ne,$t)|0;var rr=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(rr>>>26)|0,rr&=67108863,R=Math.imul(Fe,ge),k=Math.imul(Fe,Me),k=k+Math.imul(ze,ge)|0,C=Math.imul(ze,Me),R=R+Math.imul(Ee,Xe)|0,k=k+Math.imul(Ee,ot)|0,k=k+Math.imul(Ie,Xe)|0,C=C+Math.imul(Ie,ot)|0,R=R+Math.imul(ee,st)|0,k=k+Math.imul(ee,rt)|0,k=k+Math.imul(se,st)|0,C=C+Math.imul(se,rt)|0,R=R+Math.imul(U,Qe)|0,k=k+Math.imul(U,et)|0,k=k+Math.imul(ve,Qe)|0,C=C+Math.imul(ve,et)|0,R=R+Math.imul(Y,ft)|0,k=k+Math.imul(Y,jt)|0,k=k+Math.imul(fe,ft)|0,C=C+Math.imul(fe,jt)|0,R=R+Math.imul(ie,ht)|0,k=k+Math.imul(ie,Dt)|0,k=k+Math.imul(Q,ht)|0,C=C+Math.imul(Q,Dt)|0,R=R+Math.imul(de,wt)|0,k=k+Math.imul(de,er)|0,k=k+Math.imul(ke,wt)|0,C=C+Math.imul(ke,er)|0,R=R+Math.imul(te,pt)|0,k=k+Math.imul(te,Gt)|0,k=k+Math.imul(Z,pt)|0,C=C+Math.imul(Z,Gt)|0,R=R+Math.imul(ue,xt)|0,k=k+Math.imul(ue,$t)|0,k=k+Math.imul(Ae,xt)|0,C=C+Math.imul(Ae,$t)|0,R=R+Math.imul(W,mt)|0,k=k+Math.imul(W,qt)|0,k=k+Math.imul(ne,mt)|0,C=C+Math.imul(ne,qt)|0;var vr=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(vr>>>26)|0,vr&=67108863,R=Math.imul(Fe,Xe),k=Math.imul(Fe,ot),k=k+Math.imul(ze,Xe)|0,C=Math.imul(ze,ot),R=R+Math.imul(Ee,st)|0,k=k+Math.imul(Ee,rt)|0,k=k+Math.imul(Ie,st)|0,C=C+Math.imul(Ie,rt)|0,R=R+Math.imul(ee,Qe)|0,k=k+Math.imul(ee,et)|0,k=k+Math.imul(se,Qe)|0,C=C+Math.imul(se,et)|0,R=R+Math.imul(U,ft)|0,k=k+Math.imul(U,jt)|0,k=k+Math.imul(ve,ft)|0,C=C+Math.imul(ve,jt)|0,R=R+Math.imul(Y,ht)|0,k=k+Math.imul(Y,Dt)|0,k=k+Math.imul(fe,ht)|0,C=C+Math.imul(fe,Dt)|0,R=R+Math.imul(ie,wt)|0,k=k+Math.imul(ie,er)|0,k=k+Math.imul(Q,wt)|0,C=C+Math.imul(Q,er)|0,R=R+Math.imul(de,pt)|0,k=k+Math.imul(de,Gt)|0,k=k+Math.imul(ke,pt)|0,C=C+Math.imul(ke,Gt)|0,R=R+Math.imul(te,xt)|0,k=k+Math.imul(te,$t)|0,k=k+Math.imul(Z,xt)|0,C=C+Math.imul(Z,$t)|0,R=R+Math.imul(ue,mt)|0,k=k+Math.imul(ue,qt)|0,k=k+Math.imul(Ae,mt)|0,C=C+Math.imul(Ae,qt)|0;var Dr=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(Dr>>>26)|0,Dr&=67108863,R=Math.imul(Fe,st),k=Math.imul(Fe,rt),k=k+Math.imul(ze,st)|0,C=Math.imul(ze,rt),R=R+Math.imul(Ee,Qe)|0,k=k+Math.imul(Ee,et)|0,k=k+Math.imul(Ie,Qe)|0,C=C+Math.imul(Ie,et)|0,R=R+Math.imul(ee,ft)|0,k=k+Math.imul(ee,jt)|0,k=k+Math.imul(se,ft)|0,C=C+Math.imul(se,jt)|0,R=R+Math.imul(U,ht)|0,k=k+Math.imul(U,Dt)|0,k=k+Math.imul(ve,ht)|0,C=C+Math.imul(ve,Dt)|0,R=R+Math.imul(Y,wt)|0,k=k+Math.imul(Y,er)|0,k=k+Math.imul(fe,wt)|0,C=C+Math.imul(fe,er)|0,R=R+Math.imul(ie,pt)|0,k=k+Math.imul(ie,Gt)|0,k=k+Math.imul(Q,pt)|0,C=C+Math.imul(Q,Gt)|0,R=R+Math.imul(de,xt)|0,k=k+Math.imul(de,$t)|0,k=k+Math.imul(ke,xt)|0,C=C+Math.imul(ke,$t)|0,R=R+Math.imul(te,mt)|0,k=k+Math.imul(te,qt)|0,k=k+Math.imul(Z,mt)|0,C=C+Math.imul(Z,qt)|0;var yr=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(yr>>>26)|0,yr&=67108863,R=Math.imul(Fe,Qe),k=Math.imul(Fe,et),k=k+Math.imul(ze,Qe)|0,C=Math.imul(ze,et),R=R+Math.imul(Ee,ft)|0,k=k+Math.imul(Ee,jt)|0,k=k+Math.imul(Ie,ft)|0,C=C+Math.imul(Ie,jt)|0,R=R+Math.imul(ee,ht)|0,k=k+Math.imul(ee,Dt)|0,k=k+Math.imul(se,ht)|0,C=C+Math.imul(se,Dt)|0,R=R+Math.imul(U,wt)|0,k=k+Math.imul(U,er)|0,k=k+Math.imul(ve,wt)|0,C=C+Math.imul(ve,er)|0,R=R+Math.imul(Y,pt)|0,k=k+Math.imul(Y,Gt)|0,k=k+Math.imul(fe,pt)|0,C=C+Math.imul(fe,Gt)|0,R=R+Math.imul(ie,xt)|0,k=k+Math.imul(ie,$t)|0,k=k+Math.imul(Q,xt)|0,C=C+Math.imul(Q,$t)|0,R=R+Math.imul(de,mt)|0,k=k+Math.imul(de,qt)|0,k=k+Math.imul(ke,mt)|0,C=C+Math.imul(ke,qt)|0;var lr=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(lr>>>26)|0,lr&=67108863,R=Math.imul(Fe,ft),k=Math.imul(Fe,jt),k=k+Math.imul(ze,ft)|0,C=Math.imul(ze,jt),R=R+Math.imul(Ee,ht)|0,k=k+Math.imul(Ee,Dt)|0,k=k+Math.imul(Ie,ht)|0,C=C+Math.imul(Ie,Dt)|0,R=R+Math.imul(ee,wt)|0,k=k+Math.imul(ee,er)|0,k=k+Math.imul(se,wt)|0,C=C+Math.imul(se,er)|0,R=R+Math.imul(U,pt)|0,k=k+Math.imul(U,Gt)|0,k=k+Math.imul(ve,pt)|0,C=C+Math.imul(ve,Gt)|0,R=R+Math.imul(Y,xt)|0,k=k+Math.imul(Y,$t)|0,k=k+Math.imul(fe,xt)|0,C=C+Math.imul(fe,$t)|0,R=R+Math.imul(ie,mt)|0,k=k+Math.imul(ie,qt)|0,k=k+Math.imul(Q,mt)|0,C=C+Math.imul(Q,qt)|0;var rn=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(rn>>>26)|0,rn&=67108863,R=Math.imul(Fe,ht),k=Math.imul(Fe,Dt),k=k+Math.imul(ze,ht)|0,C=Math.imul(ze,Dt),R=R+Math.imul(Ee,wt)|0,k=k+Math.imul(Ee,er)|0,k=k+Math.imul(Ie,wt)|0,C=C+Math.imul(Ie,er)|0,R=R+Math.imul(ee,pt)|0,k=k+Math.imul(ee,Gt)|0,k=k+Math.imul(se,pt)|0,C=C+Math.imul(se,Gt)|0,R=R+Math.imul(U,xt)|0,k=k+Math.imul(U,$t)|0,k=k+Math.imul(ve,xt)|0,C=C+Math.imul(ve,$t)|0,R=R+Math.imul(Y,mt)|0,k=k+Math.imul(Y,qt)|0,k=k+Math.imul(fe,mt)|0,C=C+Math.imul(fe,qt)|0;var nn=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(nn>>>26)|0,nn&=67108863,R=Math.imul(Fe,wt),k=Math.imul(Fe,er),k=k+Math.imul(ze,wt)|0,C=Math.imul(ze,er),R=R+Math.imul(Ee,pt)|0,k=k+Math.imul(Ee,Gt)|0,k=k+Math.imul(Ie,pt)|0,C=C+Math.imul(Ie,Gt)|0,R=R+Math.imul(ee,xt)|0,k=k+Math.imul(ee,$t)|0,k=k+Math.imul(se,xt)|0,C=C+Math.imul(se,$t)|0,R=R+Math.imul(U,mt)|0,k=k+Math.imul(U,qt)|0,k=k+Math.imul(ve,mt)|0,C=C+Math.imul(ve,qt)|0;var ar=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(ar>>>26)|0,ar&=67108863,R=Math.imul(Fe,pt),k=Math.imul(Fe,Gt),k=k+Math.imul(ze,pt)|0,C=Math.imul(ze,Gt),R=R+Math.imul(Ee,xt)|0,k=k+Math.imul(Ee,$t)|0,k=k+Math.imul(Ie,xt)|0,C=C+Math.imul(Ie,$t)|0,R=R+Math.imul(ee,mt)|0,k=k+Math.imul(ee,qt)|0,k=k+Math.imul(se,mt)|0,C=C+Math.imul(se,qt)|0;var Xr=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(Xr>>>26)|0,Xr&=67108863,R=Math.imul(Fe,xt),k=Math.imul(Fe,$t),k=k+Math.imul(ze,xt)|0,C=Math.imul(ze,$t),R=R+Math.imul(Ee,mt)|0,k=k+Math.imul(Ee,qt)|0,k=k+Math.imul(Ie,mt)|0,C=C+Math.imul(Ie,qt)|0;var Wr=($+R|0)+((k&8191)<<13)|0;$=(C+(k>>>13)|0)+(Wr>>>26)|0,Wr&=67108863,R=Math.imul(Fe,mt),k=Math.imul(Fe,qt),k=k+Math.imul(ze,mt)|0,C=Math.imul(ze,qt);var Vr=($+R|0)+((k&8191)<<13)|0;return $=(C+(k>>>13)|0)+(Vr>>>26)|0,Vr&=67108863,L[0]=St,L[1]=Tt,L[2]=be,L[3]=Ne,L[4]=Le,L[5]=Je,L[6]=at,L[7]=Mt,L[8]=rr,L[9]=vr,L[10]=Dr,L[11]=yr,L[12]=lr,L[13]=rn,L[14]=nn,L[15]=ar,L[16]=Xr,L[17]=Wr,L[18]=Vr,$!==0&&(L[19]=$,_.length++),_};Math.imul||(w=h);function y(H,M,T){T.negative=M.negative^H.negative,T.length=H.length+M.length;for(var _=0,A=0,P=0;P>>26)|0,A+=L>>>26,L&=67108863}T.words[P]=$,_=L,L=A}return _!==0?T.words[P]=_:T.length--,T.strip()}function S(H,M,T){var _=new E;return _.mulp(H,M,T)}t.prototype.mulTo=function(M,T){var _,A=this.length+M.length;return this.length===10&&M.length===10?_=w(this,M,T):A<63?_=h(this,M,T):A<1024?_=y(this,M,T):_=S(this,M,T),_};function E(H,M){this.x=H,this.y=M}E.prototype.makeRBT=function(M){for(var T=new Array(M),_=t.prototype._countBits(M)-1,A=0;A>=1;return A},E.prototype.permute=function(M,T,_,A,P,L){for(var $=0;$>>1)P++;return 1<>>13,_[2*L+1]=P&8191,P=P>>>13;for(L=2*T;L>=26,T+=A/67108864|0,T+=P>>>26,this.words[_]=P&67108863}return T!==0&&(this.words[_]=T,this.length++),this},t.prototype.muln=function(M){return this.clone().imuln(M)},t.prototype.sqr=function(){return this.mul(this)},t.prototype.isqr=function(){return this.imul(this.clone())},t.prototype.pow=function(M){var T=v(M);if(T.length===0)return new t(1);for(var _=this,A=0;A=0);var T=M%26,_=(M-T)/26,A=67108863>>>26-T<<26-T,P;if(T!==0){var L=0;for(P=0;P>>26-T}L&&(this.words[P]=L,this.length++)}if(_!==0){for(P=this.length-1;P>=0;P--)this.words[P+_]=this.words[P];for(P=0;P<_;P++)this.words[P]=0;this.length+=_}return this.strip()},t.prototype.ishln=function(M){return u(this.negative===0),this.iushln(M)},t.prototype.iushrn=function(M,T,_){u(typeof M=="number"&&M>=0);var A;T?A=(T-T%26)/26:A=0;var P=M%26,L=Math.min((M-P)/26,this.length),$=67108863^67108863>>>P<L)for(this.length-=L,k=0;k=0&&(C!==0||k>=A);k--){var O=this.words[k]|0;this.words[k]=C<<26-P|O>>>P,C=O&$}return R&&C!==0&&(R.words[R.length++]=C),this.length===0&&(this.words[0]=0,this.length=1),this.strip()},t.prototype.ishrn=function(M,T,_){return u(this.negative===0),this.iushrn(M,T,_)},t.prototype.shln=function(M){return this.clone().ishln(M)},t.prototype.ushln=function(M){return this.clone().iushln(M)},t.prototype.shrn=function(M){return this.clone().ishrn(M)},t.prototype.ushrn=function(M){return this.clone().iushrn(M)},t.prototype.testn=function(M){u(typeof M=="number"&&M>=0);var T=M%26,_=(M-T)/26,A=1<=0);var T=M%26,_=(M-T)/26;if(u(this.negative===0,"imaskn works only with positive numbers"),this.length<=_)return this;if(T!==0&&_++,this.length=Math.min(_,this.length),T!==0){var A=67108863^67108863>>>T<=67108864;T++)this.words[T]-=67108864,T===this.length-1?this.words[T+1]=1:this.words[T+1]++;return this.length=Math.max(this.length,T+1),this},t.prototype.isubn=function(M){if(u(typeof M=="number"),u(M<67108864),M<0)return this.iaddn(-M);if(this.negative!==0)return this.negative=0,this.iaddn(M),this.negative=1,this;if(this.words[0]-=M,this.length===1&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var T=0;T>26)-(R/67108864|0),this.words[P+_]=L&67108863}for(;P>26,this.words[P+_]=L&67108863;if($===0)return this.strip();for(u($===-1),$=0,P=0;P>26,this.words[P]=L&67108863;return this.negative=1,this.strip()},t.prototype._wordDiv=function(M,T){var _=this.length-M.length,A=this.clone(),P=M,L=P.words[P.length-1]|0,$=this._countBits(L);_=26-$,_!==0&&(P=P.ushln(_),A.iushln(_),L=P.words[P.length-1]|0);var R=A.length-P.length,k;if(T!=="mod"){k=new t(null),k.length=R+1,k.words=new Array(k.length);for(var C=0;C=0;W--){var ne=(A.words[P.length+W]|0)*67108864+(A.words[P.length+W-1]|0);for(ne=Math.min(ne/L|0,67108863),A._ishlnsubmul(P,ne,W);A.negative!==0;)ne--,A.negative=0,A._ishlnsubmul(P,1,W),A.isZero()||(A.negative^=1);k&&(k.words[W]=ne)}return k&&k.strip(),A.strip(),T!=="div"&&_!==0&&A.iushrn(_),{div:k||null,mod:A}},t.prototype.divmod=function(M,T,_){if(u(!M.isZero()),this.isZero())return{div:new t(0),mod:new t(0)};var A,P,L;return this.negative!==0&&M.negative===0?(L=this.neg().divmod(M,T),T!=="mod"&&(A=L.div.neg()),T!=="div"&&(P=L.mod.neg(),_&&P.negative!==0&&P.iadd(M)),{div:A,mod:P}):this.negative===0&&M.negative!==0?(L=this.divmod(M.neg(),T),T!=="mod"&&(A=L.div.neg()),{div:A,mod:L.mod}):this.negative&M.negative?(L=this.neg().divmod(M.neg(),T),T!=="div"&&(P=L.mod.neg(),_&&P.negative!==0&&P.isub(M)),{div:L.div,mod:P}):M.length>this.length||this.cmp(M)<0?{div:new t(0),mod:this}:M.length===1?T==="div"?{div:this.divn(M.words[0]),mod:null}:T==="mod"?{div:null,mod:new t(this.modn(M.words[0]))}:{div:this.divn(M.words[0]),mod:new t(this.modn(M.words[0]))}:this._wordDiv(M,T)},t.prototype.div=function(M){return this.divmod(M,"div",!1).div},t.prototype.mod=function(M){return this.divmod(M,"mod",!1).mod},t.prototype.umod=function(M){return this.divmod(M,"mod",!0).mod},t.prototype.divRound=function(M){var T=this.divmod(M);if(T.mod.isZero())return T.div;var _=T.div.negative!==0?T.mod.isub(M):T.mod,A=M.ushrn(1),P=M.andln(1),L=_.cmp(A);return L<0||P===1&&L===0?T.div:T.div.negative!==0?T.div.isubn(1):T.div.iaddn(1)},t.prototype.modn=function(M){u(M<=67108863);for(var T=(1<<26)%M,_=0,A=this.length-1;A>=0;A--)_=(T*_+(this.words[A]|0))%M;return _},t.prototype.idivn=function(M){u(M<=67108863);for(var T=0,_=this.length-1;_>=0;_--){var A=(this.words[_]|0)+T*67108864;this.words[_]=A/M|0,T=A%M}return this.strip()},t.prototype.divn=function(M){return this.clone().idivn(M)},t.prototype.egcd=function(M){u(M.negative===0),u(!M.isZero());var T=this,_=M.clone();T.negative!==0?T=T.umod(M):T=T.clone();for(var A=new t(1),P=new t(0),L=new t(0),$=new t(1),R=0;T.isEven()&&_.isEven();)T.iushrn(1),_.iushrn(1),++R;for(var k=_.clone(),C=T.clone();!T.isZero();){for(var O=0,W=1;!(T.words[0]&W)&&O<26;++O,W<<=1);if(O>0)for(T.iushrn(O);O-- >0;)(A.isOdd()||P.isOdd())&&(A.iadd(k),P.isub(C)),A.iushrn(1),P.iushrn(1);for(var ne=0,he=1;!(_.words[0]&he)&&ne<26;++ne,he<<=1);if(ne>0)for(_.iushrn(ne);ne-- >0;)(L.isOdd()||$.isOdd())&&(L.iadd(k),$.isub(C)),L.iushrn(1),$.iushrn(1);T.cmp(_)>=0?(T.isub(_),A.isub(L),P.isub($)):(_.isub(T),L.isub(A),$.isub(P))}return{a:L,b:$,gcd:_.iushln(R)}},t.prototype._invmp=function(M){u(M.negative===0),u(!M.isZero());var T=this,_=M.clone();T.negative!==0?T=T.umod(M):T=T.clone();for(var A=new t(1),P=new t(0),L=_.clone();T.cmpn(1)>0&&_.cmpn(1)>0;){for(var $=0,R=1;!(T.words[0]&R)&&$<26;++$,R<<=1);if($>0)for(T.iushrn($);$-- >0;)A.isOdd()&&A.iadd(L),A.iushrn(1);for(var k=0,C=1;!(_.words[0]&C)&&k<26;++k,C<<=1);if(k>0)for(_.iushrn(k);k-- >0;)P.isOdd()&&P.iadd(L),P.iushrn(1);T.cmp(_)>=0?(T.isub(_),A.isub(P)):(_.isub(T),P.isub(A))}var O;return T.cmpn(1)===0?O=A:O=P,O.cmpn(0)<0&&O.iadd(M),O},t.prototype.gcd=function(M){if(this.isZero())return M.abs();if(M.isZero())return this.abs();var T=this.clone(),_=M.clone();T.negative=0,_.negative=0;for(var A=0;T.isEven()&&_.isEven();A++)T.iushrn(1),_.iushrn(1);do{for(;T.isEven();)T.iushrn(1);for(;_.isEven();)_.iushrn(1);var P=T.cmp(_);if(P<0){var L=T;T=_,_=L}else if(P===0||_.cmpn(1)===0)break;T.isub(_)}while(!0);return _.iushln(A)},t.prototype.invm=function(M){return this.egcd(M).a.umod(M)},t.prototype.isEven=function(){return(this.words[0]&1)===0},t.prototype.isOdd=function(){return(this.words[0]&1)===1},t.prototype.andln=function(M){return this.words[0]&M},t.prototype.bincn=function(M){u(typeof M=="number");var T=M%26,_=(M-T)/26,A=1<>>26,$&=67108863,this.words[L]=$}return P!==0&&(this.words[L]=P,this.length++),this},t.prototype.isZero=function(){return this.length===1&&this.words[0]===0},t.prototype.cmpn=function(M){var T=M<0;if(this.negative!==0&&!T)return-1;if(this.negative===0&&T)return 1;this.strip();var _;if(this.length>1)_=1;else{T&&(M=-M),u(M<=67108863,"Number is too big");var A=this.words[0]|0;_=A===M?0:AM.length)return 1;if(this.length=0;_--){var A=this.words[_]|0,P=M.words[_]|0;if(A!==P){AP&&(T=1);break}}return T},t.prototype.gtn=function(M){return this.cmpn(M)===1},t.prototype.gt=function(M){return this.cmp(M)===1},t.prototype.gten=function(M){return this.cmpn(M)>=0},t.prototype.gte=function(M){return this.cmp(M)>=0},t.prototype.ltn=function(M){return this.cmpn(M)===-1},t.prototype.lt=function(M){return this.cmp(M)===-1},t.prototype.lten=function(M){return this.cmpn(M)<=0},t.prototype.lte=function(M){return this.cmp(M)<=0},t.prototype.eqn=function(M){return this.cmpn(M)===0},t.prototype.eq=function(M){return this.cmp(M)===0},t.red=function(M){return new V(M)},t.prototype.toRed=function(M){return u(!this.red,"Already a number in reduction context"),u(this.negative===0,"red works only with positives"),M.convertTo(this)._forceRed(M)},t.prototype.fromRed=function(){return u(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},t.prototype._forceRed=function(M){return this.red=M,this},t.prototype.forceRed=function(M){return u(!this.red,"Already a number in reduction context"),this._forceRed(M)},t.prototype.redAdd=function(M){return u(this.red,"redAdd works only with red numbers"),this.red.add(this,M)},t.prototype.redIAdd=function(M){return u(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,M)},t.prototype.redSub=function(M){return u(this.red,"redSub works only with red numbers"),this.red.sub(this,M)},t.prototype.redISub=function(M){return u(this.red,"redISub works only with red numbers"),this.red.isub(this,M)},t.prototype.redShl=function(M){return u(this.red,"redShl works only with red numbers"),this.red.shl(this,M)},t.prototype.redMul=function(M){return u(this.red,"redMul works only with red numbers"),this.red._verify2(this,M),this.red.mul(this,M)},t.prototype.redIMul=function(M){return u(this.red,"redMul works only with red numbers"),this.red._verify2(this,M),this.red.imul(this,M)},t.prototype.redSqr=function(){return u(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},t.prototype.redISqr=function(){return u(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},t.prototype.redSqrt=function(){return u(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},t.prototype.redInvm=function(){return u(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},t.prototype.redNeg=function(){return u(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},t.prototype.redPow=function(M){return u(this.red&&!M.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,M)};var I={k256:null,p224:null,p192:null,p25519:null};function F(H,M){this.name=H,this.p=new t(M,16),this.n=this.p.bitLength(),this.k=new t(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}F.prototype._tmp=function(){var M=new t(null);return M.words=new Array(Math.ceil(this.n/13)),M},F.prototype.ireduce=function(M){var T=M,_;do this.split(T,this.tmp),T=this.imulK(T),T=T.iadd(this.tmp),_=T.bitLength();while(_>this.n);var A=_0?T.isub(this.p):T.strip!==void 0?T.strip():T._strip(),T},F.prototype.split=function(M,T){M.iushrn(this.n,0,T)},F.prototype.imulK=function(M){return M.imul(this.k)};function B(){F.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}s(B,F),B.prototype.split=function(M,T){for(var _=4194303,A=Math.min(M.length,9),P=0;P>>22,L=$}L>>>=22,M.words[P-10]=L,L===0&&M.length>10?M.length-=10:M.length-=9},B.prototype.imulK=function(M){M.words[M.length]=0,M.words[M.length+1]=0,M.length+=2;for(var T=0,_=0;_>>=26,M.words[_]=P,T=A}return T!==0&&(M.words[M.length++]=T),M},t._prime=function(M){if(I[M])return I[M];var T;if(M==="k256")T=new B;else if(M==="p224")T=new j;else if(M==="p192")T=new X;else if(M==="p25519")T=new G;else throw new Error("Unknown prime "+M);return I[M]=T,T};function V(H){if(typeof H=="string"){var M=t._prime(H);this.m=M.p,this.prime=M}else u(H.gtn(1),"modulus must be greater than 1"),this.m=H,this.prime=null}V.prototype._verify1=function(M){u(M.negative===0,"red works only with positives"),u(M.red,"red works only with red numbers")},V.prototype._verify2=function(M,T){u((M.negative|T.negative)===0,"red works only with positives"),u(M.red&&M.red===T.red,"red works only with red numbers")},V.prototype.imod=function(M){return this.prime?this.prime.ireduce(M)._forceRed(this):M.umod(this.m)._forceRed(this)},V.prototype.neg=function(M){return M.isZero()?M.clone():this.m.sub(M)._forceRed(this)},V.prototype.add=function(M,T){this._verify2(M,T);var _=M.add(T);return _.cmp(this.m)>=0&&_.isub(this.m),_._forceRed(this)},V.prototype.iadd=function(M,T){this._verify2(M,T);var _=M.iadd(T);return _.cmp(this.m)>=0&&_.isub(this.m),_},V.prototype.sub=function(M,T){this._verify2(M,T);var _=M.sub(T);return _.cmpn(0)<0&&_.iadd(this.m),_._forceRed(this)},V.prototype.isub=function(M,T){this._verify2(M,T);var _=M.isub(T);return _.cmpn(0)<0&&_.iadd(this.m),_},V.prototype.shl=function(M,T){return this._verify1(M),this.imod(M.ushln(T))},V.prototype.imul=function(M,T){return this._verify2(M,T),this.imod(M.imul(T))},V.prototype.mul=function(M,T){return this._verify2(M,T),this.imod(M.mul(T))},V.prototype.isqr=function(M){return this.imul(M,M.clone())},V.prototype.sqr=function(M){return this.mul(M,M)},V.prototype.sqrt=function(M){if(M.isZero())return M.clone();var T=this.m.andln(3);if(u(T%2===1),T===3){var _=this.m.add(new t(1)).iushrn(2);return this.pow(M,_)}for(var A=this.m.subn(1),P=0;!A.isZero()&&A.andln(1)===0;)P++,A.iushrn(1);u(!A.isZero());var L=new t(1).toRed(this),$=L.redNeg(),R=this.m.subn(1).iushrn(1),k=this.m.bitLength();for(k=new t(2*k*k).toRed(this);this.pow(k,R).cmp($)!==0;)k.redIAdd($);for(var C=this.pow(k,A),O=this.pow(M,A.addn(1).iushrn(1)),W=this.pow(M,A),ne=P;W.cmp(L)!==0;){for(var he=W,ue=0;he.cmp(L)!==0;ue++)he=he.redSqr();u(ue=0;P--){for(var C=T.words[P],O=k-1;O>=0;O--){var W=C>>O&1;if(L!==A[0]&&(L=this.sqr(L)),W===0&&$===0){R=0;continue}$<<=1,$|=W,R++,!(R!==_&&(P!==0||O!==0))&&(L=this.mul(L,A[$]),R=0,$=0)}k=26}return L},V.prototype.convertTo=function(M){var T=M.umod(this.m);return T===M?T.clone():T},V.prototype.convertFrom=function(M){var T=M.clone();return T.red=null,T},t.mont=function(M){return new J(M)};function J(H){V.call(this,H),this.shift=this.m.bitLength(),this.shift%26!==0&&(this.shift+=26-this.shift%26),this.r=new t(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}s(J,V),J.prototype.convertTo=function(M){return this.imod(M.ushln(this.shift))},J.prototype.convertFrom=function(M){var T=this.imod(M.mul(this.rinv));return T.red=null,T},J.prototype.imul=function(M,T){if(M.isZero()||T.isZero())return M.words[0]=0,M.length=1,M;var _=M.imul(T),A=_.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),P=_.isub(A).iushrn(this.shift),L=P;return P.cmp(this.m)>=0?L=P.isub(this.m):P.cmpn(0)<0&&(L=P.iadd(this.m)),L._forceRed(this)},J.prototype.mul=function(M,T){if(M.isZero()||T.isZero())return new t(0)._forceRed(this);var _=M.mul(T),A=_.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),P=_.isub(A).iushrn(this.shift),L=P;return P.cmp(this.m)>=0?L=P.isub(this.m):P.cmpn(0)<0&&(L=P.iadd(this.m)),L._forceRed(this)},J.prototype.invm=function(M){var T=this.imod(M._invmp(this.m).mul(this.r2));return T._forceRed(this)}})(typeof d>"u"||d,void 0)},{buffer:188}],185:[function(e,d,m){m.byteLength=i,m.toByteArray=l,m.fromByteArray=v;for(var f=[],c=[],u=typeof Uint8Array<"u"?Uint8Array:Array,s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",t=0,n=s.length;t0)throw new Error("Invalid string. Length must be a multiple of 4");var y=h.indexOf("=");y===-1&&(y=w);var S=y===w?0:4-y%4;return[y,S]}function i(h){var w=r(h),y=w[0],S=w[1];return(y+S)*3/4-S}function o(h,w,y){return(w+y)*3/4-y}function l(h){var w,y=r(h),S=y[0],E=y[1],I=new u(o(h,S,E)),F=0,B=E>0?S-4:S,j;for(j=0;j>16&255,I[F++]=w>>8&255,I[F++]=w&255;return E===2&&(w=c[h.charCodeAt(j)]<<2|c[h.charCodeAt(j+1)]>>4,I[F++]=w&255),E===1&&(w=c[h.charCodeAt(j)]<<10|c[h.charCodeAt(j+1)]<<4|c[h.charCodeAt(j+2)]>>2,I[F++]=w>>8&255,I[F++]=w&255),I}function a(h){return f[h>>18&63]+f[h>>12&63]+f[h>>6&63]+f[h&63]}function g(h,w,y){for(var S,E=[],I=w;IB?B:F+I));return S===1?(w=h[y-1],E.push(f[w>>2]+f[w<<4&63]+"==")):S===2&&(w=(h[y-2]<<8)+h[y-1],E.push(f[w>>10]+f[w>>4&63]+f[w<<2&63]+"=")),E.join("")}},{}],186:[function(e,d,m){(function(f,c){function u(T,_){if(!T)throw new Error(_||"Assertion failed")}function s(T,_){T.super_=_;var A=function(){};A.prototype=_.prototype,T.prototype=new A,T.prototype.constructor=T}function t(T,_,A){if(t.isBN(T))return T;this.negative=0,this.words=null,this.length=0,this.red=null,T!==null&&((_==="le"||_==="be")&&(A=_,_=10),this._init(T||0,_||10,A||"be"))}typeof f=="object"?f.exports=t:c.BN=t,t.BN=t,t.wordSize=26;var n;try{typeof window<"u"&&typeof window.Buffer<"u"?n=window.Buffer:n=e("buffer").Buffer}catch{}t.isBN=function(_){return _ instanceof t?!0:_!==null&&typeof _=="object"&&_.constructor.wordSize===t.wordSize&&Array.isArray(_.words)},t.max=function(_,A){return _.cmp(A)>0?_:A},t.min=function(_,A){return _.cmp(A)<0?_:A},t.prototype._init=function(_,A,P){if(typeof _=="number")return this._initNumber(_,A,P);if(typeof _=="object")return this._initArray(_,A,P);A==="hex"&&(A=16),u(A===(A|0)&&A>=2&&A<=36),_=_.toString().replace(/\s+/g,"");var L=0;_[0]==="-"&&(L++,this.negative=1),L<_.length&&(A===16?this._parseHex(_,L,P):(this._parseBase(_,A,L),P==="le"&&this._initArray(this.toArray(),A,P)))},t.prototype._initNumber=function(_,A,P){_<0&&(this.negative=1,_=-_),_<67108864?(this.words=[_&67108863],this.length=1):_<4503599627370496?(this.words=[_&67108863,_/67108864&67108863],this.length=2):(u(_<9007199254740992),this.words=[_&67108863,_/67108864&67108863,1],this.length=3),P==="le"&&this._initArray(this.toArray(),A,P)},t.prototype._initArray=function(_,A,P){if(u(typeof _.length=="number"),_.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(_.length/3),this.words=new Array(this.length);for(var L=0;L=0;L-=3)R=_[L]|_[L-1]<<8|_[L-2]<<16,this.words[$]|=R<>>26-k&67108863,k+=24,k>=26&&(k-=26,$++);else if(P==="le")for(L=0,$=0;L<_.length;L+=3)R=_[L]|_[L+1]<<8|_[L+2]<<16,this.words[$]|=R<>>26-k&67108863,k+=24,k>=26&&(k-=26,$++);return this._strip()};function r(T,_){var A=T.charCodeAt(_);if(A>=48&&A<=57)return A-48;if(A>=65&&A<=70)return A-55;if(A>=97&&A<=102)return A-87;u(!1,"Invalid character in "+T)}function i(T,_,A){var P=r(T,A);return A-1>=_&&(P|=r(T,A-1)<<4),P}t.prototype._parseHex=function(_,A,P){this.length=Math.ceil((_.length-A)/6),this.words=new Array(this.length);for(var L=0;L=A;L-=2)k=i(_,A,L)<<$,this.words[R]|=k&67108863,$>=18?($-=18,R+=1,this.words[R]|=k>>>26):$+=8;else{var C=_.length-A;for(L=C%2===0?A+1:A;L<_.length;L+=2)k=i(_,A,L)<<$,this.words[R]|=k&67108863,$>=18?($-=18,R+=1,this.words[R]|=k>>>26):$+=8}this._strip()};function o(T,_,A,P){for(var L=0,$=0,R=Math.min(T.length,A),k=_;k=49?$=C-49+10:C>=17?$=C-17+10:$=C,u(C>=0&&$1&&this.words[this.length-1]===0;)this.length--;return this._normSign()},t.prototype._normSign=function(){return this.length===1&&this.words[0]===0&&(this.negative=0),this},typeof Symbol<"u"&&typeof Symbol.for=="function")try{t.prototype[Symbol.for("nodejs.util.inspect.custom")]=a}catch{t.prototype.inspect=a}else t.prototype.inspect=a;function a(){return(this.red?""}var g=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],v=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],h=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];t.prototype.toString=function(_,A){_=_||10,A=A|0||1;var P;if(_===16||_==="hex"){P="";for(var L=0,$=0,R=0;R>>24-L&16777215,L+=2,L>=26&&(L-=26,R--),$!==0||R!==this.length-1?P=g[6-C.length]+C+P:P=C+P}for($!==0&&(P=$.toString(16)+P);P.length%A!==0;)P="0"+P;return this.negative!==0&&(P="-"+P),P}if(_===(_|0)&&_>=2&&_<=36){var O=v[_],W=h[_];P="";var ne=this.clone();for(ne.negative=0;!ne.isZero();){var he=ne.modrn(W).toString(_);ne=ne.idivn(W),ne.isZero()?P=he+P:P=g[O-he.length]+he+P}for(this.isZero()&&(P="0"+P);P.length%A!==0;)P="0"+P;return this.negative!==0&&(P="-"+P),P}u(!1,"Base should be between 2 and 36")},t.prototype.toNumber=function(){var _=this.words[0];return this.length===2?_+=this.words[1]*67108864:this.length===3&&this.words[2]===1?_+=4503599627370496+this.words[1]*67108864:this.length>2&&u(!1,"Number can only safely store up to 53 bits"),this.negative!==0?-_:_},t.prototype.toJSON=function(){return this.toString(16,2)},n&&(t.prototype.toBuffer=function(_,A){return this.toArrayLike(n,_,A)}),t.prototype.toArray=function(_,A){return this.toArrayLike(Array,_,A)};var w=function(_,A){return _.allocUnsafe?_.allocUnsafe(A):new _(A)};t.prototype.toArrayLike=function(_,A,P){this._strip();var L=this.byteLength(),$=P||Math.max(1,L);u(L<=$,"byte array longer than desired length"),u($>0,"Requested array length <= 0");var R=w(_,$),k=A==="le"?"LE":"BE";return this["_toArrayLike"+k](R,L),R},t.prototype._toArrayLikeLE=function(_,A){for(var P=0,L=0,$=0,R=0;$>8&255),P<_.length&&(_[P++]=k>>16&255),R===6?(P<_.length&&(_[P++]=k>>24&255),L=0,R=0):(L=k>>>24,R+=2)}if(P<_.length)for(_[P++]=L;P<_.length;)_[P++]=0},t.prototype._toArrayLikeBE=function(_,A){for(var P=_.length-1,L=0,$=0,R=0;$=0&&(_[P--]=k>>8&255),P>=0&&(_[P--]=k>>16&255),R===6?(P>=0&&(_[P--]=k>>24&255),L=0,R=0):(L=k>>>24,R+=2)}if(P>=0)for(_[P--]=L;P>=0;)_[P--]=0},Math.clz32?t.prototype._countBits=function(_){return 32-Math.clz32(_)}:t.prototype._countBits=function(_){var A=_,P=0;return A>=4096&&(P+=13,A>>>=13),A>=64&&(P+=7,A>>>=7),A>=8&&(P+=4,A>>>=4),A>=2&&(P+=2,A>>>=2),P+A},t.prototype._zeroBits=function(_){if(_===0)return 26;var A=_,P=0;return A&8191||(P+=13,A>>>=13),A&127||(P+=7,A>>>=7),A&15||(P+=4,A>>>=4),A&3||(P+=2,A>>>=2),A&1||P++,P},t.prototype.bitLength=function(){var _=this.words[this.length-1],A=this._countBits(_);return(this.length-1)*26+A};function y(T){for(var _=new Array(T.bitLength()),A=0;A<_.length;A++){var P=A/26|0,L=A%26;_[A]=T.words[P]>>>L&1}return _}t.prototype.zeroBits=function(){if(this.isZero())return 0;for(var _=0,A=0;A_.length?this.clone().ior(_):_.clone().ior(this)},t.prototype.uor=function(_){return this.length>_.length?this.clone().iuor(_):_.clone().iuor(this)},t.prototype.iuand=function(_){var A;this.length>_.length?A=_:A=this;for(var P=0;P_.length?this.clone().iand(_):_.clone().iand(this)},t.prototype.uand=function(_){return this.length>_.length?this.clone().iuand(_):_.clone().iuand(this)},t.prototype.iuxor=function(_){var A,P;this.length>_.length?(A=this,P=_):(A=_,P=this);for(var L=0;L_.length?this.clone().ixor(_):_.clone().ixor(this)},t.prototype.uxor=function(_){return this.length>_.length?this.clone().iuxor(_):_.clone().iuxor(this)},t.prototype.inotn=function(_){u(typeof _=="number"&&_>=0);var A=Math.ceil(_/26)|0,P=_%26;this._expand(A),P>0&&A--;for(var L=0;L0&&(this.words[L]=~this.words[L]&67108863>>26-P),this._strip()},t.prototype.notn=function(_){return this.clone().inotn(_)},t.prototype.setn=function(_,A){u(typeof _=="number"&&_>=0);var P=_/26|0,L=_%26;return this._expand(P+1),A?this.words[P]=this.words[P]|1<_.length?(P=this,L=_):(P=_,L=this);for(var $=0,R=0;R>>26;for(;$!==0&&R>>26;if(this.length=P.length,$!==0)this.words[this.length]=$,this.length++;else if(P!==this)for(;R_.length?this.clone().iadd(_):_.clone().iadd(this)},t.prototype.isub=function(_){if(_.negative!==0){_.negative=0;var A=this.iadd(_);return _.negative=1,A._normSign()}else if(this.negative!==0)return this.negative=0,this.iadd(_),this.negative=1,this._normSign();var P=this.cmp(_);if(P===0)return this.negative=0,this.length=1,this.words[0]=0,this;var L,$;P>0?(L=this,$=_):(L=_,$=this);for(var R=0,k=0;k<$.length;k++)A=(L.words[k]|0)-($.words[k]|0)+R,R=A>>26,this.words[k]=A&67108863;for(;R!==0&&k>26,this.words[k]=A&67108863;if(R===0&&k>>26,ne=C&67108863,he=Math.min(O,_.length-1),ue=Math.max(0,O-T.length+1);ue<=he;ue++){var Ae=O-ue|0;L=T.words[Ae]|0,$=_.words[ue]|0,R=L*$+ne,W+=R/67108864|0,ne=R&67108863}A.words[O]=ne|0,C=W|0}return C!==0?A.words[O]=C|0:A.length--,A._strip()}var E=function(_,A,P){var L=_.words,$=A.words,R=P.words,k=0,C,O,W,ne=L[0]|0,he=ne&8191,ue=ne>>>13,Ae=L[1]|0,pe=Ae&8191,te=Ae>>>13,Z=L[2]|0,q=Z&8191,de=Z>>>13,ke=L[3]|0,oe=ke&8191,ie=ke>>>13,Q=L[4]|0,z=Q&8191,Y=Q>>>13,fe=L[5]|0,we=fe&8191,U=fe>>>13,ve=L[6]|0,Se=ve&8191,ee=ve>>>13,se=L[7]|0,me=se&8191,Ee=se>>>13,Ie=L[8]|0,Ce=Ie&8191,Fe=Ie>>>13,ze=L[9]|0,je=ze&8191,ge=ze>>>13,Me=$[0]|0,Be=Me&8191,Xe=Me>>>13,ot=$[1]|0,ct=ot&8191,st=ot>>>13,rt=$[2]|0,bt=rt&8191,Qe=rt>>>13,et=$[3]|0,_t=et&8191,ft=et>>>13,jt=$[4]|0,It=jt&8191,ht=jt>>>13,Dt=$[5]|0,Ut=Dt&8191,wt=Dt>>>13,er=$[6]|0,Kt=er&8191,pt=er>>>13,Gt=$[7]|0,kt=Gt&8191,xt=Gt>>>13,$t=$[8]|0,Qt=$t&8191,mt=$t>>>13,qt=$[9]|0,St=qt&8191,Tt=qt>>>13;P.negative=_.negative^A.negative,P.length=19,C=Math.imul(he,Be),O=Math.imul(he,Xe),O=O+Math.imul(ue,Be)|0,W=Math.imul(ue,Xe);var be=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(be>>>26)|0,be&=67108863,C=Math.imul(pe,Be),O=Math.imul(pe,Xe),O=O+Math.imul(te,Be)|0,W=Math.imul(te,Xe),C=C+Math.imul(he,ct)|0,O=O+Math.imul(he,st)|0,O=O+Math.imul(ue,ct)|0,W=W+Math.imul(ue,st)|0;var Ne=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(Ne>>>26)|0,Ne&=67108863,C=Math.imul(q,Be),O=Math.imul(q,Xe),O=O+Math.imul(de,Be)|0,W=Math.imul(de,Xe),C=C+Math.imul(pe,ct)|0,O=O+Math.imul(pe,st)|0,O=O+Math.imul(te,ct)|0,W=W+Math.imul(te,st)|0,C=C+Math.imul(he,bt)|0,O=O+Math.imul(he,Qe)|0,O=O+Math.imul(ue,bt)|0,W=W+Math.imul(ue,Qe)|0;var Le=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(Le>>>26)|0,Le&=67108863,C=Math.imul(oe,Be),O=Math.imul(oe,Xe),O=O+Math.imul(ie,Be)|0,W=Math.imul(ie,Xe),C=C+Math.imul(q,ct)|0,O=O+Math.imul(q,st)|0,O=O+Math.imul(de,ct)|0,W=W+Math.imul(de,st)|0,C=C+Math.imul(pe,bt)|0,O=O+Math.imul(pe,Qe)|0,O=O+Math.imul(te,bt)|0,W=W+Math.imul(te,Qe)|0,C=C+Math.imul(he,_t)|0,O=O+Math.imul(he,ft)|0,O=O+Math.imul(ue,_t)|0,W=W+Math.imul(ue,ft)|0;var Je=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(Je>>>26)|0,Je&=67108863,C=Math.imul(z,Be),O=Math.imul(z,Xe),O=O+Math.imul(Y,Be)|0,W=Math.imul(Y,Xe),C=C+Math.imul(oe,ct)|0,O=O+Math.imul(oe,st)|0,O=O+Math.imul(ie,ct)|0,W=W+Math.imul(ie,st)|0,C=C+Math.imul(q,bt)|0,O=O+Math.imul(q,Qe)|0,O=O+Math.imul(de,bt)|0,W=W+Math.imul(de,Qe)|0,C=C+Math.imul(pe,_t)|0,O=O+Math.imul(pe,ft)|0,O=O+Math.imul(te,_t)|0,W=W+Math.imul(te,ft)|0,C=C+Math.imul(he,It)|0,O=O+Math.imul(he,ht)|0,O=O+Math.imul(ue,It)|0,W=W+Math.imul(ue,ht)|0;var at=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(at>>>26)|0,at&=67108863,C=Math.imul(we,Be),O=Math.imul(we,Xe),O=O+Math.imul(U,Be)|0,W=Math.imul(U,Xe),C=C+Math.imul(z,ct)|0,O=O+Math.imul(z,st)|0,O=O+Math.imul(Y,ct)|0,W=W+Math.imul(Y,st)|0,C=C+Math.imul(oe,bt)|0,O=O+Math.imul(oe,Qe)|0,O=O+Math.imul(ie,bt)|0,W=W+Math.imul(ie,Qe)|0,C=C+Math.imul(q,_t)|0,O=O+Math.imul(q,ft)|0,O=O+Math.imul(de,_t)|0,W=W+Math.imul(de,ft)|0,C=C+Math.imul(pe,It)|0,O=O+Math.imul(pe,ht)|0,O=O+Math.imul(te,It)|0,W=W+Math.imul(te,ht)|0,C=C+Math.imul(he,Ut)|0,O=O+Math.imul(he,wt)|0,O=O+Math.imul(ue,Ut)|0,W=W+Math.imul(ue,wt)|0;var Mt=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,C=Math.imul(Se,Be),O=Math.imul(Se,Xe),O=O+Math.imul(ee,Be)|0,W=Math.imul(ee,Xe),C=C+Math.imul(we,ct)|0,O=O+Math.imul(we,st)|0,O=O+Math.imul(U,ct)|0,W=W+Math.imul(U,st)|0,C=C+Math.imul(z,bt)|0,O=O+Math.imul(z,Qe)|0,O=O+Math.imul(Y,bt)|0,W=W+Math.imul(Y,Qe)|0,C=C+Math.imul(oe,_t)|0,O=O+Math.imul(oe,ft)|0,O=O+Math.imul(ie,_t)|0,W=W+Math.imul(ie,ft)|0,C=C+Math.imul(q,It)|0,O=O+Math.imul(q,ht)|0,O=O+Math.imul(de,It)|0,W=W+Math.imul(de,ht)|0,C=C+Math.imul(pe,Ut)|0,O=O+Math.imul(pe,wt)|0,O=O+Math.imul(te,Ut)|0,W=W+Math.imul(te,wt)|0,C=C+Math.imul(he,Kt)|0,O=O+Math.imul(he,pt)|0,O=O+Math.imul(ue,Kt)|0,W=W+Math.imul(ue,pt)|0;var rr=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(rr>>>26)|0,rr&=67108863,C=Math.imul(me,Be),O=Math.imul(me,Xe),O=O+Math.imul(Ee,Be)|0,W=Math.imul(Ee,Xe),C=C+Math.imul(Se,ct)|0,O=O+Math.imul(Se,st)|0,O=O+Math.imul(ee,ct)|0,W=W+Math.imul(ee,st)|0,C=C+Math.imul(we,bt)|0,O=O+Math.imul(we,Qe)|0,O=O+Math.imul(U,bt)|0,W=W+Math.imul(U,Qe)|0,C=C+Math.imul(z,_t)|0,O=O+Math.imul(z,ft)|0,O=O+Math.imul(Y,_t)|0,W=W+Math.imul(Y,ft)|0,C=C+Math.imul(oe,It)|0,O=O+Math.imul(oe,ht)|0,O=O+Math.imul(ie,It)|0,W=W+Math.imul(ie,ht)|0,C=C+Math.imul(q,Ut)|0,O=O+Math.imul(q,wt)|0,O=O+Math.imul(de,Ut)|0,W=W+Math.imul(de,wt)|0,C=C+Math.imul(pe,Kt)|0,O=O+Math.imul(pe,pt)|0,O=O+Math.imul(te,Kt)|0,W=W+Math.imul(te,pt)|0,C=C+Math.imul(he,kt)|0,O=O+Math.imul(he,xt)|0,O=O+Math.imul(ue,kt)|0,W=W+Math.imul(ue,xt)|0;var vr=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(vr>>>26)|0,vr&=67108863,C=Math.imul(Ce,Be),O=Math.imul(Ce,Xe),O=O+Math.imul(Fe,Be)|0,W=Math.imul(Fe,Xe),C=C+Math.imul(me,ct)|0,O=O+Math.imul(me,st)|0,O=O+Math.imul(Ee,ct)|0,W=W+Math.imul(Ee,st)|0,C=C+Math.imul(Se,bt)|0,O=O+Math.imul(Se,Qe)|0,O=O+Math.imul(ee,bt)|0,W=W+Math.imul(ee,Qe)|0,C=C+Math.imul(we,_t)|0,O=O+Math.imul(we,ft)|0,O=O+Math.imul(U,_t)|0,W=W+Math.imul(U,ft)|0,C=C+Math.imul(z,It)|0,O=O+Math.imul(z,ht)|0,O=O+Math.imul(Y,It)|0,W=W+Math.imul(Y,ht)|0,C=C+Math.imul(oe,Ut)|0,O=O+Math.imul(oe,wt)|0,O=O+Math.imul(ie,Ut)|0,W=W+Math.imul(ie,wt)|0,C=C+Math.imul(q,Kt)|0,O=O+Math.imul(q,pt)|0,O=O+Math.imul(de,Kt)|0,W=W+Math.imul(de,pt)|0,C=C+Math.imul(pe,kt)|0,O=O+Math.imul(pe,xt)|0,O=O+Math.imul(te,kt)|0,W=W+Math.imul(te,xt)|0,C=C+Math.imul(he,Qt)|0,O=O+Math.imul(he,mt)|0,O=O+Math.imul(ue,Qt)|0,W=W+Math.imul(ue,mt)|0;var Dr=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(Dr>>>26)|0,Dr&=67108863,C=Math.imul(je,Be),O=Math.imul(je,Xe),O=O+Math.imul(ge,Be)|0,W=Math.imul(ge,Xe),C=C+Math.imul(Ce,ct)|0,O=O+Math.imul(Ce,st)|0,O=O+Math.imul(Fe,ct)|0,W=W+Math.imul(Fe,st)|0,C=C+Math.imul(me,bt)|0,O=O+Math.imul(me,Qe)|0,O=O+Math.imul(Ee,bt)|0,W=W+Math.imul(Ee,Qe)|0,C=C+Math.imul(Se,_t)|0,O=O+Math.imul(Se,ft)|0,O=O+Math.imul(ee,_t)|0,W=W+Math.imul(ee,ft)|0,C=C+Math.imul(we,It)|0,O=O+Math.imul(we,ht)|0,O=O+Math.imul(U,It)|0,W=W+Math.imul(U,ht)|0,C=C+Math.imul(z,Ut)|0,O=O+Math.imul(z,wt)|0,O=O+Math.imul(Y,Ut)|0,W=W+Math.imul(Y,wt)|0,C=C+Math.imul(oe,Kt)|0,O=O+Math.imul(oe,pt)|0,O=O+Math.imul(ie,Kt)|0,W=W+Math.imul(ie,pt)|0,C=C+Math.imul(q,kt)|0,O=O+Math.imul(q,xt)|0,O=O+Math.imul(de,kt)|0,W=W+Math.imul(de,xt)|0,C=C+Math.imul(pe,Qt)|0,O=O+Math.imul(pe,mt)|0,O=O+Math.imul(te,Qt)|0,W=W+Math.imul(te,mt)|0,C=C+Math.imul(he,St)|0,O=O+Math.imul(he,Tt)|0,O=O+Math.imul(ue,St)|0,W=W+Math.imul(ue,Tt)|0;var yr=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(yr>>>26)|0,yr&=67108863,C=Math.imul(je,ct),O=Math.imul(je,st),O=O+Math.imul(ge,ct)|0,W=Math.imul(ge,st),C=C+Math.imul(Ce,bt)|0,O=O+Math.imul(Ce,Qe)|0,O=O+Math.imul(Fe,bt)|0,W=W+Math.imul(Fe,Qe)|0,C=C+Math.imul(me,_t)|0,O=O+Math.imul(me,ft)|0,O=O+Math.imul(Ee,_t)|0,W=W+Math.imul(Ee,ft)|0,C=C+Math.imul(Se,It)|0,O=O+Math.imul(Se,ht)|0,O=O+Math.imul(ee,It)|0,W=W+Math.imul(ee,ht)|0,C=C+Math.imul(we,Ut)|0,O=O+Math.imul(we,wt)|0,O=O+Math.imul(U,Ut)|0,W=W+Math.imul(U,wt)|0,C=C+Math.imul(z,Kt)|0,O=O+Math.imul(z,pt)|0,O=O+Math.imul(Y,Kt)|0,W=W+Math.imul(Y,pt)|0,C=C+Math.imul(oe,kt)|0,O=O+Math.imul(oe,xt)|0,O=O+Math.imul(ie,kt)|0,W=W+Math.imul(ie,xt)|0,C=C+Math.imul(q,Qt)|0,O=O+Math.imul(q,mt)|0,O=O+Math.imul(de,Qt)|0,W=W+Math.imul(de,mt)|0,C=C+Math.imul(pe,St)|0,O=O+Math.imul(pe,Tt)|0,O=O+Math.imul(te,St)|0,W=W+Math.imul(te,Tt)|0;var lr=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(lr>>>26)|0,lr&=67108863,C=Math.imul(je,bt),O=Math.imul(je,Qe),O=O+Math.imul(ge,bt)|0,W=Math.imul(ge,Qe),C=C+Math.imul(Ce,_t)|0,O=O+Math.imul(Ce,ft)|0,O=O+Math.imul(Fe,_t)|0,W=W+Math.imul(Fe,ft)|0,C=C+Math.imul(me,It)|0,O=O+Math.imul(me,ht)|0,O=O+Math.imul(Ee,It)|0,W=W+Math.imul(Ee,ht)|0,C=C+Math.imul(Se,Ut)|0,O=O+Math.imul(Se,wt)|0,O=O+Math.imul(ee,Ut)|0,W=W+Math.imul(ee,wt)|0,C=C+Math.imul(we,Kt)|0,O=O+Math.imul(we,pt)|0,O=O+Math.imul(U,Kt)|0,W=W+Math.imul(U,pt)|0,C=C+Math.imul(z,kt)|0,O=O+Math.imul(z,xt)|0,O=O+Math.imul(Y,kt)|0,W=W+Math.imul(Y,xt)|0,C=C+Math.imul(oe,Qt)|0,O=O+Math.imul(oe,mt)|0,O=O+Math.imul(ie,Qt)|0,W=W+Math.imul(ie,mt)|0,C=C+Math.imul(q,St)|0,O=O+Math.imul(q,Tt)|0,O=O+Math.imul(de,St)|0,W=W+Math.imul(de,Tt)|0;var rn=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(rn>>>26)|0,rn&=67108863,C=Math.imul(je,_t),O=Math.imul(je,ft),O=O+Math.imul(ge,_t)|0,W=Math.imul(ge,ft),C=C+Math.imul(Ce,It)|0,O=O+Math.imul(Ce,ht)|0,O=O+Math.imul(Fe,It)|0,W=W+Math.imul(Fe,ht)|0,C=C+Math.imul(me,Ut)|0,O=O+Math.imul(me,wt)|0,O=O+Math.imul(Ee,Ut)|0,W=W+Math.imul(Ee,wt)|0,C=C+Math.imul(Se,Kt)|0,O=O+Math.imul(Se,pt)|0,O=O+Math.imul(ee,Kt)|0,W=W+Math.imul(ee,pt)|0,C=C+Math.imul(we,kt)|0,O=O+Math.imul(we,xt)|0,O=O+Math.imul(U,kt)|0,W=W+Math.imul(U,xt)|0,C=C+Math.imul(z,Qt)|0,O=O+Math.imul(z,mt)|0,O=O+Math.imul(Y,Qt)|0,W=W+Math.imul(Y,mt)|0,C=C+Math.imul(oe,St)|0,O=O+Math.imul(oe,Tt)|0,O=O+Math.imul(ie,St)|0,W=W+Math.imul(ie,Tt)|0;var nn=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(nn>>>26)|0,nn&=67108863,C=Math.imul(je,It),O=Math.imul(je,ht),O=O+Math.imul(ge,It)|0,W=Math.imul(ge,ht),C=C+Math.imul(Ce,Ut)|0,O=O+Math.imul(Ce,wt)|0,O=O+Math.imul(Fe,Ut)|0,W=W+Math.imul(Fe,wt)|0,C=C+Math.imul(me,Kt)|0,O=O+Math.imul(me,pt)|0,O=O+Math.imul(Ee,Kt)|0,W=W+Math.imul(Ee,pt)|0,C=C+Math.imul(Se,kt)|0,O=O+Math.imul(Se,xt)|0,O=O+Math.imul(ee,kt)|0,W=W+Math.imul(ee,xt)|0,C=C+Math.imul(we,Qt)|0,O=O+Math.imul(we,mt)|0,O=O+Math.imul(U,Qt)|0,W=W+Math.imul(U,mt)|0,C=C+Math.imul(z,St)|0,O=O+Math.imul(z,Tt)|0,O=O+Math.imul(Y,St)|0,W=W+Math.imul(Y,Tt)|0;var ar=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(ar>>>26)|0,ar&=67108863,C=Math.imul(je,Ut),O=Math.imul(je,wt),O=O+Math.imul(ge,Ut)|0,W=Math.imul(ge,wt),C=C+Math.imul(Ce,Kt)|0,O=O+Math.imul(Ce,pt)|0,O=O+Math.imul(Fe,Kt)|0,W=W+Math.imul(Fe,pt)|0,C=C+Math.imul(me,kt)|0,O=O+Math.imul(me,xt)|0,O=O+Math.imul(Ee,kt)|0,W=W+Math.imul(Ee,xt)|0,C=C+Math.imul(Se,Qt)|0,O=O+Math.imul(Se,mt)|0,O=O+Math.imul(ee,Qt)|0,W=W+Math.imul(ee,mt)|0,C=C+Math.imul(we,St)|0,O=O+Math.imul(we,Tt)|0,O=O+Math.imul(U,St)|0,W=W+Math.imul(U,Tt)|0;var Xr=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(Xr>>>26)|0,Xr&=67108863,C=Math.imul(je,Kt),O=Math.imul(je,pt),O=O+Math.imul(ge,Kt)|0,W=Math.imul(ge,pt),C=C+Math.imul(Ce,kt)|0,O=O+Math.imul(Ce,xt)|0,O=O+Math.imul(Fe,kt)|0,W=W+Math.imul(Fe,xt)|0,C=C+Math.imul(me,Qt)|0,O=O+Math.imul(me,mt)|0,O=O+Math.imul(Ee,Qt)|0,W=W+Math.imul(Ee,mt)|0,C=C+Math.imul(Se,St)|0,O=O+Math.imul(Se,Tt)|0,O=O+Math.imul(ee,St)|0,W=W+Math.imul(ee,Tt)|0;var Wr=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(Wr>>>26)|0,Wr&=67108863,C=Math.imul(je,kt),O=Math.imul(je,xt),O=O+Math.imul(ge,kt)|0,W=Math.imul(ge,xt),C=C+Math.imul(Ce,Qt)|0,O=O+Math.imul(Ce,mt)|0,O=O+Math.imul(Fe,Qt)|0,W=W+Math.imul(Fe,mt)|0,C=C+Math.imul(me,St)|0,O=O+Math.imul(me,Tt)|0,O=O+Math.imul(Ee,St)|0,W=W+Math.imul(Ee,Tt)|0;var Vr=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(Vr>>>26)|0,Vr&=67108863,C=Math.imul(je,Qt),O=Math.imul(je,mt),O=O+Math.imul(ge,Qt)|0,W=Math.imul(ge,mt),C=C+Math.imul(Ce,St)|0,O=O+Math.imul(Ce,Tt)|0,O=O+Math.imul(Fe,St)|0,W=W+Math.imul(Fe,Tt)|0;var En=(k+C|0)+((O&8191)<<13)|0;k=(W+(O>>>13)|0)+(En>>>26)|0,En&=67108863,C=Math.imul(je,St),O=Math.imul(je,Tt),O=O+Math.imul(ge,St)|0,W=Math.imul(ge,Tt);var Vn=(k+C|0)+((O&8191)<<13)|0;return k=(W+(O>>>13)|0)+(Vn>>>26)|0,Vn&=67108863,R[0]=be,R[1]=Ne,R[2]=Le,R[3]=Je,R[4]=at,R[5]=Mt,R[6]=rr,R[7]=vr,R[8]=Dr,R[9]=yr,R[10]=lr,R[11]=rn,R[12]=nn,R[13]=ar,R[14]=Xr,R[15]=Wr,R[16]=Vr,R[17]=En,R[18]=Vn,k!==0&&(R[19]=k,P.length++),P};Math.imul||(E=S);function I(T,_,A){A.negative=_.negative^T.negative,A.length=T.length+_.length;for(var P=0,L=0,$=0;$>>26)|0,L+=R>>>26,R&=67108863}A.words[$]=k,P=R,R=L}return P!==0?A.words[$]=P:A.length--,A._strip()}function F(T,_,A){return I(T,_,A)}t.prototype.mulTo=function(_,A){var P,L=this.length+_.length;return this.length===10&&_.length===10?P=E(this,_,A):L<63?P=S(this,_,A):L<1024?P=I(this,_,A):P=F(this,_,A),P},t.prototype.mul=function(_){var A=new t(null);return A.words=new Array(this.length+_.length),this.mulTo(_,A)},t.prototype.mulf=function(_){var A=new t(null);return A.words=new Array(this.length+_.length),F(this,_,A)},t.prototype.imul=function(_){return this.clone().mulTo(_,this)},t.prototype.imuln=function(_){var A=_<0;A&&(_=-_),u(typeof _=="number"),u(_<67108864);for(var P=0,L=0;L>=26,P+=$/67108864|0,P+=R>>>26,this.words[L]=R&67108863}return P!==0&&(this.words[L]=P,this.length++),A?this.ineg():this},t.prototype.muln=function(_){return this.clone().imuln(_)},t.prototype.sqr=function(){return this.mul(this)},t.prototype.isqr=function(){return this.imul(this.clone())},t.prototype.pow=function(_){var A=y(_);if(A.length===0)return new t(1);for(var P=this,L=0;L=0);var A=_%26,P=(_-A)/26,L=67108863>>>26-A<<26-A,$;if(A!==0){var R=0;for($=0;$>>26-A}R&&(this.words[$]=R,this.length++)}if(P!==0){for($=this.length-1;$>=0;$--)this.words[$+P]=this.words[$];for($=0;$=0);var L;A?L=(A-A%26)/26:L=0;var $=_%26,R=Math.min((_-$)/26,this.length),k=67108863^67108863>>>$<<$,C=P;if(L-=R,L=Math.max(0,L),C){for(var O=0;OR)for(this.length-=R,O=0;O=0&&(W!==0||O>=L);O--){var ne=this.words[O]|0;this.words[O]=W<<26-$|ne>>>$,W=ne&k}return C&&W!==0&&(C.words[C.length++]=W),this.length===0&&(this.words[0]=0,this.length=1),this._strip()},t.prototype.ishrn=function(_,A,P){return u(this.negative===0),this.iushrn(_,A,P)},t.prototype.shln=function(_){return this.clone().ishln(_)},t.prototype.ushln=function(_){return this.clone().iushln(_)},t.prototype.shrn=function(_){return this.clone().ishrn(_)},t.prototype.ushrn=function(_){return this.clone().iushrn(_)},t.prototype.testn=function(_){u(typeof _=="number"&&_>=0);var A=_%26,P=(_-A)/26,L=1<=0);var A=_%26,P=(_-A)/26;if(u(this.negative===0,"imaskn works only with positive numbers"),this.length<=P)return this;if(A!==0&&P++,this.length=Math.min(P,this.length),A!==0){var L=67108863^67108863>>>A<=67108864;A++)this.words[A]-=67108864,A===this.length-1?this.words[A+1]=1:this.words[A+1]++;return this.length=Math.max(this.length,A+1),this},t.prototype.isubn=function(_){if(u(typeof _=="number"),u(_<67108864),_<0)return this.iaddn(-_);if(this.negative!==0)return this.negative=0,this.iaddn(_),this.negative=1,this;if(this.words[0]-=_,this.length===1&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var A=0;A>26)-(C/67108864|0),this.words[$+P]=R&67108863}for(;$>26,this.words[$+P]=R&67108863;if(k===0)return this._strip();for(u(k===-1),k=0,$=0;$>26,this.words[$]=R&67108863;return this.negative=1,this._strip()},t.prototype._wordDiv=function(_,A){var P=this.length-_.length,L=this.clone(),$=_,R=$.words[$.length-1]|0,k=this._countBits(R);P=26-k,P!==0&&($=$.ushln(P),L.iushln(P),R=$.words[$.length-1]|0);var C=L.length-$.length,O;if(A!=="mod"){O=new t(null),O.length=C+1,O.words=new Array(O.length);for(var W=0;W=0;he--){var ue=(L.words[$.length+he]|0)*67108864+(L.words[$.length+he-1]|0);for(ue=Math.min(ue/R|0,67108863),L._ishlnsubmul($,ue,he);L.negative!==0;)ue--,L.negative=0,L._ishlnsubmul($,1,he),L.isZero()||(L.negative^=1);O&&(O.words[he]=ue)}return O&&O._strip(),L._strip(),A!=="div"&&P!==0&&L.iushrn(P),{div:O||null,mod:L}},t.prototype.divmod=function(_,A,P){if(u(!_.isZero()),this.isZero())return{div:new t(0),mod:new t(0)};var L,$,R;return this.negative!==0&&_.negative===0?(R=this.neg().divmod(_,A),A!=="mod"&&(L=R.div.neg()),A!=="div"&&($=R.mod.neg(),P&&$.negative!==0&&$.iadd(_)),{div:L,mod:$}):this.negative===0&&_.negative!==0?(R=this.divmod(_.neg(),A),A!=="mod"&&(L=R.div.neg()),{div:L,mod:R.mod}):this.negative&_.negative?(R=this.neg().divmod(_.neg(),A),A!=="div"&&($=R.mod.neg(),P&&$.negative!==0&&$.isub(_)),{div:R.div,mod:$}):_.length>this.length||this.cmp(_)<0?{div:new t(0),mod:this}:_.length===1?A==="div"?{div:this.divn(_.words[0]),mod:null}:A==="mod"?{div:null,mod:new t(this.modrn(_.words[0]))}:{div:this.divn(_.words[0]),mod:new t(this.modrn(_.words[0]))}:this._wordDiv(_,A)},t.prototype.div=function(_){return this.divmod(_,"div",!1).div},t.prototype.mod=function(_){return this.divmod(_,"mod",!1).mod},t.prototype.umod=function(_){return this.divmod(_,"mod",!0).mod},t.prototype.divRound=function(_){var A=this.divmod(_);if(A.mod.isZero())return A.div;var P=A.div.negative!==0?A.mod.isub(_):A.mod,L=_.ushrn(1),$=_.andln(1),R=P.cmp(L);return R<0||$===1&&R===0?A.div:A.div.negative!==0?A.div.isubn(1):A.div.iaddn(1)},t.prototype.modrn=function(_){var A=_<0;A&&(_=-_),u(_<=67108863);for(var P=(1<<26)%_,L=0,$=this.length-1;$>=0;$--)L=(P*L+(this.words[$]|0))%_;return A?-L:L},t.prototype.modn=function(_){return this.modrn(_)},t.prototype.idivn=function(_){var A=_<0;A&&(_=-_),u(_<=67108863);for(var P=0,L=this.length-1;L>=0;L--){var $=(this.words[L]|0)+P*67108864;this.words[L]=$/_|0,P=$%_}return this._strip(),A?this.ineg():this},t.prototype.divn=function(_){return this.clone().idivn(_)},t.prototype.egcd=function(_){u(_.negative===0),u(!_.isZero());var A=this,P=_.clone();A.negative!==0?A=A.umod(_):A=A.clone();for(var L=new t(1),$=new t(0),R=new t(0),k=new t(1),C=0;A.isEven()&&P.isEven();)A.iushrn(1),P.iushrn(1),++C;for(var O=P.clone(),W=A.clone();!A.isZero();){for(var ne=0,he=1;!(A.words[0]&he)&&ne<26;++ne,he<<=1);if(ne>0)for(A.iushrn(ne);ne-- >0;)(L.isOdd()||$.isOdd())&&(L.iadd(O),$.isub(W)),L.iushrn(1),$.iushrn(1);for(var ue=0,Ae=1;!(P.words[0]&Ae)&&ue<26;++ue,Ae<<=1);if(ue>0)for(P.iushrn(ue);ue-- >0;)(R.isOdd()||k.isOdd())&&(R.iadd(O),k.isub(W)),R.iushrn(1),k.iushrn(1);A.cmp(P)>=0?(A.isub(P),L.isub(R),$.isub(k)):(P.isub(A),R.isub(L),k.isub($))}return{a:R,b:k,gcd:P.iushln(C)}},t.prototype._invmp=function(_){u(_.negative===0),u(!_.isZero());var A=this,P=_.clone();A.negative!==0?A=A.umod(_):A=A.clone();for(var L=new t(1),$=new t(0),R=P.clone();A.cmpn(1)>0&&P.cmpn(1)>0;){for(var k=0,C=1;!(A.words[0]&C)&&k<26;++k,C<<=1);if(k>0)for(A.iushrn(k);k-- >0;)L.isOdd()&&L.iadd(R),L.iushrn(1);for(var O=0,W=1;!(P.words[0]&W)&&O<26;++O,W<<=1);if(O>0)for(P.iushrn(O);O-- >0;)$.isOdd()&&$.iadd(R),$.iushrn(1);A.cmp(P)>=0?(A.isub(P),L.isub($)):(P.isub(A),$.isub(L))}var ne;return A.cmpn(1)===0?ne=L:ne=$,ne.cmpn(0)<0&&ne.iadd(_),ne},t.prototype.gcd=function(_){if(this.isZero())return _.abs();if(_.isZero())return this.abs();var A=this.clone(),P=_.clone();A.negative=0,P.negative=0;for(var L=0;A.isEven()&&P.isEven();L++)A.iushrn(1),P.iushrn(1);do{for(;A.isEven();)A.iushrn(1);for(;P.isEven();)P.iushrn(1);var $=A.cmp(P);if($<0){var R=A;A=P,P=R}else if($===0||P.cmpn(1)===0)break;A.isub(P)}while(!0);return P.iushln(L)},t.prototype.invm=function(_){return this.egcd(_).a.umod(_)},t.prototype.isEven=function(){return(this.words[0]&1)===0},t.prototype.isOdd=function(){return(this.words[0]&1)===1},t.prototype.andln=function(_){return this.words[0]&_},t.prototype.bincn=function(_){u(typeof _=="number");var A=_%26,P=(_-A)/26,L=1<>>26,k&=67108863,this.words[R]=k}return $!==0&&(this.words[R]=$,this.length++),this},t.prototype.isZero=function(){return this.length===1&&this.words[0]===0},t.prototype.cmpn=function(_){var A=_<0;if(this.negative!==0&&!A)return-1;if(this.negative===0&&A)return 1;this._strip();var P;if(this.length>1)P=1;else{A&&(_=-_),u(_<=67108863,"Number is too big");var L=this.words[0]|0;P=L===_?0:L<_?-1:1}return this.negative!==0?-P|0:P},t.prototype.cmp=function(_){if(this.negative!==0&&_.negative===0)return-1;if(this.negative===0&&_.negative!==0)return 1;var A=this.ucmp(_);return this.negative!==0?-A|0:A},t.prototype.ucmp=function(_){if(this.length>_.length)return 1;if(this.length<_.length)return-1;for(var A=0,P=this.length-1;P>=0;P--){var L=this.words[P]|0,$=_.words[P]|0;if(L!==$){L<$?A=-1:L>$&&(A=1);break}}return A},t.prototype.gtn=function(_){return this.cmpn(_)===1},t.prototype.gt=function(_){return this.cmp(_)===1},t.prototype.gten=function(_){return this.cmpn(_)>=0},t.prototype.gte=function(_){return this.cmp(_)>=0},t.prototype.ltn=function(_){return this.cmpn(_)===-1},t.prototype.lt=function(_){return this.cmp(_)===-1},t.prototype.lten=function(_){return this.cmpn(_)<=0},t.prototype.lte=function(_){return this.cmp(_)<=0},t.prototype.eqn=function(_){return this.cmpn(_)===0},t.prototype.eq=function(_){return this.cmp(_)===0},t.red=function(_){return new H(_)},t.prototype.toRed=function(_){return u(!this.red,"Already a number in reduction context"),u(this.negative===0,"red works only with positives"),_.convertTo(this)._forceRed(_)},t.prototype.fromRed=function(){return u(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},t.prototype._forceRed=function(_){return this.red=_,this},t.prototype.forceRed=function(_){return u(!this.red,"Already a number in reduction context"),this._forceRed(_)},t.prototype.redAdd=function(_){return u(this.red,"redAdd works only with red numbers"),this.red.add(this,_)},t.prototype.redIAdd=function(_){return u(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,_)},t.prototype.redSub=function(_){return u(this.red,"redSub works only with red numbers"),this.red.sub(this,_)},t.prototype.redISub=function(_){return u(this.red,"redISub works only with red numbers"),this.red.isub(this,_)},t.prototype.redShl=function(_){return u(this.red,"redShl works only with red numbers"),this.red.shl(this,_)},t.prototype.redMul=function(_){return u(this.red,"redMul works only with red numbers"),this.red._verify2(this,_),this.red.mul(this,_)},t.prototype.redIMul=function(_){return u(this.red,"redMul works only with red numbers"),this.red._verify2(this,_),this.red.imul(this,_)},t.prototype.redSqr=function(){return u(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},t.prototype.redISqr=function(){return u(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},t.prototype.redSqrt=function(){return u(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},t.prototype.redInvm=function(){return u(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},t.prototype.redNeg=function(){return u(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},t.prototype.redPow=function(_){return u(this.red&&!_.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,_)};var B={k256:null,p224:null,p192:null,p25519:null};function j(T,_){this.name=T,this.p=new t(_,16),this.n=this.p.bitLength(),this.k=new t(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}j.prototype._tmp=function(){var _=new t(null);return _.words=new Array(Math.ceil(this.n/13)),_},j.prototype.ireduce=function(_){var A=_,P;do this.split(A,this.tmp),A=this.imulK(A),A=A.iadd(this.tmp),P=A.bitLength();while(P>this.n);var L=P0?A.isub(this.p):A.strip!==void 0?A.strip():A._strip(),A},j.prototype.split=function(_,A){_.iushrn(this.n,0,A)},j.prototype.imulK=function(_){return _.imul(this.k)};function X(){j.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}s(X,j),X.prototype.split=function(_,A){for(var P=4194303,L=Math.min(_.length,9),$=0;$>>22,R=k}R>>>=22,_.words[$-10]=R,R===0&&_.length>10?_.length-=10:_.length-=9},X.prototype.imulK=function(_){_.words[_.length]=0,_.words[_.length+1]=0,_.length+=2;for(var A=0,P=0;P<_.length;P++){var L=_.words[P]|0;A+=L*977,_.words[P]=A&67108863,A=L*64+(A/67108864|0)}return _.words[_.length-1]===0&&(_.length--,_.words[_.length-1]===0&&_.length--),_};function G(){j.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}s(G,j);function V(){j.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}s(V,j);function J(){j.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}s(J,j),J.prototype.imulK=function(_){for(var A=0,P=0;P<_.length;P++){var L=(_.words[P]|0)*19+A,$=L&67108863;L>>>=26,_.words[P]=$,A=L}return A!==0&&(_.words[_.length++]=A),_},t._prime=function(_){if(B[_])return B[_];var A;if(_==="k256")A=new X;else if(_==="p224")A=new G;else if(_==="p192")A=new V;else if(_==="p25519")A=new J;else throw new Error("Unknown prime "+_);return B[_]=A,A};function H(T){if(typeof T=="string"){var _=t._prime(T);this.m=_.p,this.prime=_}else u(T.gtn(1),"modulus must be greater than 1"),this.m=T,this.prime=null}H.prototype._verify1=function(_){u(_.negative===0,"red works only with positives"),u(_.red,"red works only with red numbers")},H.prototype._verify2=function(_,A){u((_.negative|A.negative)===0,"red works only with positives"),u(_.red&&_.red===A.red,"red works only with red numbers")},H.prototype.imod=function(_){return this.prime?this.prime.ireduce(_)._forceRed(this):(l(_,_.umod(this.m)._forceRed(this)),_)},H.prototype.neg=function(_){return _.isZero()?_.clone():this.m.sub(_)._forceRed(this)},H.prototype.add=function(_,A){this._verify2(_,A);var P=_.add(A);return P.cmp(this.m)>=0&&P.isub(this.m),P._forceRed(this)},H.prototype.iadd=function(_,A){this._verify2(_,A);var P=_.iadd(A);return P.cmp(this.m)>=0&&P.isub(this.m),P},H.prototype.sub=function(_,A){this._verify2(_,A);var P=_.sub(A);return P.cmpn(0)<0&&P.iadd(this.m),P._forceRed(this)},H.prototype.isub=function(_,A){this._verify2(_,A);var P=_.isub(A);return P.cmpn(0)<0&&P.iadd(this.m),P},H.prototype.shl=function(_,A){return this._verify1(_),this.imod(_.ushln(A))},H.prototype.imul=function(_,A){return this._verify2(_,A),this.imod(_.imul(A))},H.prototype.mul=function(_,A){return this._verify2(_,A),this.imod(_.mul(A))},H.prototype.isqr=function(_){return this.imul(_,_.clone())},H.prototype.sqr=function(_){return this.mul(_,_)},H.prototype.sqrt=function(_){if(_.isZero())return _.clone();var A=this.m.andln(3);if(u(A%2===1),A===3){var P=this.m.add(new t(1)).iushrn(2);return this.pow(_,P)}for(var L=this.m.subn(1),$=0;!L.isZero()&&L.andln(1)===0;)$++,L.iushrn(1);u(!L.isZero());var R=new t(1).toRed(this),k=R.redNeg(),C=this.m.subn(1).iushrn(1),O=this.m.bitLength();for(O=new t(2*O*O).toRed(this);this.pow(O,C).cmp(k)!==0;)O.redIAdd(k);for(var W=this.pow(O,L),ne=this.pow(_,L.addn(1).iushrn(1)),he=this.pow(_,L),ue=$;he.cmp(R)!==0;){for(var Ae=he,pe=0;Ae.cmp(R)!==0;pe++)Ae=Ae.redSqr();u(pe=0;$--){for(var W=A.words[$],ne=O-1;ne>=0;ne--){var he=W>>ne&1;if(R!==L[0]&&(R=this.sqr(R)),he===0&&k===0){C=0;continue}k<<=1,k|=he,C++,!(C!==P&&($!==0||ne!==0))&&(R=this.mul(R,L[k]),C=0,k=0)}O=26}return R},H.prototype.convertTo=function(_){var A=_.umod(this.m);return A===_?A.clone():A},H.prototype.convertFrom=function(_){var A=_.clone();return A.red=null,A},t.mont=function(_){return new M(_)};function M(T){H.call(this,T),this.shift=this.m.bitLength(),this.shift%26!==0&&(this.shift+=26-this.shift%26),this.r=new t(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}s(M,H),M.prototype.convertTo=function(_){return this.imod(_.ushln(this.shift))},M.prototype.convertFrom=function(_){var A=this.imod(_.mul(this.rinv));return A.red=null,A},M.prototype.imul=function(_,A){if(_.isZero()||A.isZero())return _.words[0]=0,_.length=1,_;var P=_.imul(A),L=P.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),$=P.isub(L).iushrn(this.shift),R=$;return $.cmp(this.m)>=0?R=$.isub(this.m):$.cmpn(0)<0&&(R=$.iadd(this.m)),R._forceRed(this)},M.prototype.mul=function(_,A){if(_.isZero()||A.isZero())return new t(0)._forceRed(this);var P=_.mul(A),L=P.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),$=P.isub(L).iushrn(this.shift),R=$;return $.cmp(this.m)>=0?R=$.isub(this.m):$.cmpn(0)<0&&(R=$.iadd(this.m)),R._forceRed(this)},M.prototype.invm=function(_){var A=this.imod(_._invmp(this.m).mul(this.r2));return A._forceRed(this)}})(typeof d>"u"||d,void 0)},{buffer:188}],187:[function(e,d,m){var f;d.exports=function(t){return f||(f=new c(null)),f.generate(t)};function c(s){this.rand=s}if(d.exports.Rand=c,c.prototype.generate=function(t){return this._rand(t)},c.prototype._rand=function(t){if(this.rand.getBytes)return this.rand.getBytes(t);for(var n=new Uint8Array(t),r=0;r>>24]^h[E>>>16&255]^w[I>>>8&255]^y[F&255]^o[V++],j=v[E>>>24]^h[I>>>16&255]^w[F>>>8&255]^y[S&255]^o[V++],X=v[I>>>24]^h[F>>>16&255]^w[S>>>8&255]^y[E&255]^o[V++],G=v[F>>>24]^h[S>>>16&255]^w[E>>>8&255]^y[I&255]^o[V++],S=B,E=j,I=X,F=G;return B=(a[S>>>24]<<24|a[E>>>16&255]<<16|a[I>>>8&255]<<8|a[F&255])^o[V++],j=(a[E>>>24]<<24|a[I>>>16&255]<<16|a[F>>>8&255]<<8|a[S&255])^o[V++],X=(a[I>>>24]<<24|a[F>>>16&255]<<16|a[S>>>8&255]<<8|a[E&255])^o[V++],G=(a[F>>>24]<<24|a[S>>>16&255]<<16|a[E>>>8&255]<<8|a[I&255])^o[V++],B=B>>>0,j=j>>>0,X=X>>>0,G=G>>>0,[B,j,X,G]}var t=[0,1,2,4,8,16,32,64,128,27,54],n=function(){for(var i=new Array(256),o=0;o<256;o++)o<128?i[o]=o<<1:i[o]=o<<1^283;for(var l=[],a=[],g=[[],[],[],[]],v=[[],[],[],[]],h=0,w=0,y=0;y<256;++y){var S=w^w<<1^w<<2^w<<3^w<<4;S=S>>>8^S&255^99,l[h]=S,a[S]=h;var E=i[h],I=i[E],F=i[I],B=i[S]*257^S*16843008;g[0][h]=B<<24|B>>>8,g[1][h]=B<<16|B>>>16,g[2][h]=B<<8|B>>>24,g[3][h]=B,B=F*16843009^I*65537^E*257^h*16843008,v[0][S]=B<<24|B>>>8,v[1][S]=B<<16|B>>>16,v[2][S]=B<<8|B>>>24,v[3][S]=B,h===0?h=w=1:(h=E^i[i[i[F^E]]],w^=i[i[w]])}return{SBOX:l,INV_SBOX:a,SUB_MIX:g,INV_SUB_MIX:v}}();function r(i){this._key=c(i),this._reset()}r.blockSize=4*4,r.keySize=256/8,r.prototype.blockSize=r.blockSize,r.prototype.keySize=r.keySize,r.prototype._reset=function(){for(var i=this._key,o=i.length,l=o+6,a=(l+1)*4,g=[],v=0;v>>24,h=n.SBOX[h>>>24]<<24|n.SBOX[h>>>16&255]<<16|n.SBOX[h>>>8&255]<<8|n.SBOX[h&255],h^=t[v/o|0]<<24):o>6&&v%o===4&&(h=n.SBOX[h>>>24]<<24|n.SBOX[h>>>16&255]<<16|n.SBOX[h>>>8&255]<<8|n.SBOX[h&255]),g[v]=g[v-o]^h}for(var w=[],y=0;y>>24]]^n.INV_SUB_MIX[1][n.SBOX[E>>>16&255]]^n.INV_SUB_MIX[2][n.SBOX[E>>>8&255]]^n.INV_SUB_MIX[3][n.SBOX[E&255]]}this._nRounds=l,this._keySchedule=g,this._invKeySchedule=w},r.prototype.encryptBlockRaw=function(i){return i=c(i),s(i,this._keySchedule,n.SUB_MIX,n.SBOX,this._nRounds)},r.prototype.encryptBlock=function(i){var o=this.encryptBlockRaw(i),l=f.allocUnsafe(16);return l.writeUInt32BE(o[0],0),l.writeUInt32BE(o[1],4),l.writeUInt32BE(o[2],8),l.writeUInt32BE(o[3],12),l},r.prototype.decryptBlock=function(i){i=c(i);var o=i[1];i[1]=i[3],i[3]=o;var l=s(i,this._invKeySchedule,n.INV_SUB_MIX,n.INV_SBOX,this._nRounds),a=f.allocUnsafe(16);return a.writeUInt32BE(l[0],0),a.writeUInt32BE(l[3],4),a.writeUInt32BE(l[2],8),a.writeUInt32BE(l[1],12),a},r.prototype.scrub=function(){u(this._keySchedule),u(this._invKeySchedule),u(this._key)},d.exports.AES=r},{"safe-buffer":494}],190:[function(e,d,m){var f=e("./aes"),c=e("safe-buffer").Buffer,u=e("cipher-base"),s=e("inherits"),t=e("./ghash"),n=e("buffer-xor"),r=e("./incr32");function i(a,g){var v=0;a.length!==g.length&&v++;for(var h=Math.min(a.length,g.length),w=0;w16)return w=this.cache.slice(0,16),this.cache=this.cache.slice(16),w}else if(this.cache.length>=16)return w=this.cache.slice(0,16),this.cache=this.cache.slice(16),w;return null},l.prototype.flush=function(){if(this.cache.length)return this.cache};function a(h){var w=h[15];if(w<1||w>16)throw new Error("unable to decrypt data");for(var y=-1;++y15){var h=this.cache.slice(0,16);return this.cache=this.cache.slice(16),h}return null},a.prototype.flush=function(){for(var h=16-this.cache.length,w=u.allocUnsafe(h),y=-1;++y>>0,0),r.writeUInt32BE(n[1]>>>0,4),r.writeUInt32BE(n[2]>>>0,8),r.writeUInt32BE(n[3]>>>0,12),r}function t(n){this.h=n,this.state=f.alloc(16,0),this.cache=f.allocUnsafe(0)}t.prototype.ghash=function(n){for(var r=-1;++r0;i--)n[i]=n[i]>>>1|(n[i-1]&1)<<31;n[0]=n[0]>>>1,l&&(n[0]=n[0]^225<<24)}this.state=s(r)},t.prototype.update=function(n){this.cache=f.concat([this.cache,n]);for(var r;this.cache.length>=16;)r=this.cache.slice(0,16),this.cache=this.cache.slice(16),this.ghash(r)},t.prototype.final=function(n,r){return this.cache.length&&this.ghash(f.concat([this.cache,c],16)),this.ghash(s([0,n,0,r])),this.state},d.exports=t},{"safe-buffer":494}],195:[function(e,d,m){function f(c){for(var u=c.length,s;u--;)if(s=c.readUInt8(u),s===255)c.writeUInt8(0,u);else{s++,c.writeUInt8(s,u);break}}d.exports=f},{}],196:[function(e,d,m){var f=e("buffer-xor");m.encrypt=function(c,u){var s=f(u,c._prev);return c._prev=c._cipher.encryptBlock(s),c._prev},m.decrypt=function(c,u){var s=c._prev;c._prev=u;var t=c._cipher.decryptBlock(u);return f(t,s)}},{"buffer-xor":219}],197:[function(e,d,m){var f=e("safe-buffer").Buffer,c=e("buffer-xor");function u(s,t,n){var r=t.length,i=c(t,s._cache);return s._cache=s._cache.slice(r),s._prev=f.concat([s._prev,n?t:i]),i}m.encrypt=function(s,t,n){for(var r=f.allocUnsafe(0),i;t.length;)if(s._cache.length===0&&(s._cache=s._cipher.encryptBlock(s._prev),s._prev=f.allocUnsafe(0)),s._cache.length<=t.length)i=s._cache.length,r=f.concat([r,u(s,t.slice(0,i),n)]),t=t.slice(i);else{r=f.concat([r,u(s,t,n)]);break}return r}},{"buffer-xor":219,"safe-buffer":494}],198:[function(e,d,m){var f=e("safe-buffer").Buffer;function c(s,t,n){for(var r,i=-1,o=8,l=0,a,g;++i>i%8,s._prev=u(s._prev,n?a:g);return l}function u(s,t){var n=s.length,r=-1,i=f.allocUnsafe(s.length);for(s=f.concat([s,f.from([t])]);++r>7;return i}m.encrypt=function(s,t,n){for(var r=t.length,i=f.allocUnsafe(r),o=-1;++o=0||!o.umod(r.prime1)||!o.umod(r.prime2));return o}function n(r,i){var o=s(i),l=i.modulus.byteLength(),a=new c(r).mul(o.blinder).umod(i.modulus),g=a.toRed(c.mont(i.prime1)),v=a.toRed(c.mont(i.prime2)),h=i.coefficient,w=i.prime1,y=i.prime2,S=g.redPow(i.exponent1).fromRed(),E=v.redPow(i.exponent2).fromRed(),I=S.isub(E).imul(h).umod(w).imul(y);return E.iadd(I).imul(o.unblinder).umod(i.modulus).toArrayLike(f,"be",l)}n.getr=t,d.exports=n}).call(this)}).call(this,e("buffer").Buffer)},{"bn.js":186,buffer:220,randombytes:475}],210:[function(e,d,m){d.exports=e("./browser/algorithms.json")},{"./browser/algorithms.json":211}],211:[function(e,d,m){d.exports={sha224WithRSAEncryption:{sign:"rsa",hash:"sha224",id:"302d300d06096086480165030402040500041c"},"RSA-SHA224":{sign:"ecdsa/rsa",hash:"sha224",id:"302d300d06096086480165030402040500041c"},sha256WithRSAEncryption:{sign:"rsa",hash:"sha256",id:"3031300d060960864801650304020105000420"},"RSA-SHA256":{sign:"ecdsa/rsa",hash:"sha256",id:"3031300d060960864801650304020105000420"},sha384WithRSAEncryption:{sign:"rsa",hash:"sha384",id:"3041300d060960864801650304020205000430"},"RSA-SHA384":{sign:"ecdsa/rsa",hash:"sha384",id:"3041300d060960864801650304020205000430"},sha512WithRSAEncryption:{sign:"rsa",hash:"sha512",id:"3051300d060960864801650304020305000440"},"RSA-SHA512":{sign:"ecdsa/rsa",hash:"sha512",id:"3051300d060960864801650304020305000440"},"RSA-SHA1":{sign:"rsa",hash:"sha1",id:"3021300906052b0e03021a05000414"},"ecdsa-with-SHA1":{sign:"ecdsa",hash:"sha1",id:""},sha256:{sign:"ecdsa",hash:"sha256",id:""},sha224:{sign:"ecdsa",hash:"sha224",id:""},sha384:{sign:"ecdsa",hash:"sha384",id:""},sha512:{sign:"ecdsa",hash:"sha512",id:""},"DSA-SHA":{sign:"dsa",hash:"sha1",id:""},"DSA-SHA1":{sign:"dsa",hash:"sha1",id:""},DSA:{sign:"dsa",hash:"sha1",id:""},"DSA-WITH-SHA224":{sign:"dsa",hash:"sha224",id:""},"DSA-SHA224":{sign:"dsa",hash:"sha224",id:""},"DSA-WITH-SHA256":{sign:"dsa",hash:"sha256",id:""},"DSA-SHA256":{sign:"dsa",hash:"sha256",id:""},"DSA-WITH-SHA384":{sign:"dsa",hash:"sha384",id:""},"DSA-SHA384":{sign:"dsa",hash:"sha384",id:""},"DSA-WITH-SHA512":{sign:"dsa",hash:"sha512",id:""},"DSA-SHA512":{sign:"dsa",hash:"sha512",id:""},"DSA-RIPEMD160":{sign:"dsa",hash:"rmd160",id:""},ripemd160WithRSA:{sign:"rsa",hash:"rmd160",id:"3021300906052b2403020105000414"},"RSA-RIPEMD160":{sign:"rsa",hash:"rmd160",id:"3021300906052b2403020105000414"},md5WithRSAEncryption:{sign:"rsa",hash:"md5",id:"3020300c06082a864886f70d020505000410"},"RSA-MD5":{sign:"rsa",hash:"md5",id:"3020300c06082a864886f70d020505000410"}}},{}],212:[function(e,d,m){d.exports={"1.3.132.0.10":"secp256k1","1.3.132.0.33":"p224","1.2.840.10045.3.1.1":"p192","1.2.840.10045.3.1.7":"p256","1.3.132.0.34":"p384","1.3.132.0.35":"p521"}},{}],213:[function(e,d,m){var f=e("safe-buffer").Buffer,c=e("create-hash"),u=e("readable-stream"),s=e("inherits"),t=e("./sign"),n=e("./verify"),r=e("./algorithms.json");Object.keys(r).forEach(function(g){r[g].id=f.from(r[g].id,"hex"),r[g.toLowerCase()]=r[g]});function i(g){u.Writable.call(this);var v=r[g];if(!v)throw new Error("Unknown message digest");this._hashType=v.hash,this._hash=c(v.hash),this._tag=v.id,this._signType=v.sign}s(i,u.Writable),i.prototype._write=function(v,h,w){this._hash.update(v),w()},i.prototype.update=function(v,h){return typeof v=="string"&&(v=f.from(v,h)),this._hash.update(v),this},i.prototype.sign=function(v,h){this.end();var w=this._hash.digest(),y=t(w,v,this._hashType,this._signType,this._tag);return h?y.toString(h):y};function o(g){u.Writable.call(this);var v=r[g];if(!v)throw new Error("Unknown message digest");this._hash=c(v.hash),this._tag=v.id,this._signType=v.sign}s(o,u.Writable),o.prototype._write=function(v,h,w){this._hash.update(v),w()},o.prototype.update=function(v,h){return typeof v=="string"&&(v=f.from(v,h)),this._hash.update(v),this},o.prototype.verify=function(v,h,w){typeof h=="string"&&(h=f.from(h,w)),this.end();var y=this._hash.digest();return n(h,y,v,this._signType,this._tag)};function l(g){return new i(g)}function a(g){return new o(g)}d.exports={Sign:l,Verify:a,createSign:l,createVerify:a}},{"./algorithms.json":211,"./sign":214,"./verify":215,"create-hash":386,inherits:440,"readable-stream":491,"safe-buffer":494}],214:[function(e,d,m){var f=e("safe-buffer").Buffer,c=e("create-hmac"),u=e("browserify-rsa"),s=e("elliptic").ec,t=e("bn.js"),n=e("parse-asn1"),r=e("./curves.json");function i(S,E,I,F,B){var j=n(E);if(j.curve){if(F!=="ecdsa"&&F!=="ecdsa/rsa")throw new Error("wrong private key type");return o(S,j)}else if(j.type==="dsa"){if(F!=="dsa")throw new Error("wrong private key type");return l(S,j,I)}else if(F!=="rsa"&&F!=="ecdsa/rsa")throw new Error("wrong private key type");S=f.concat([B,S]);for(var X=j.modulus.byteLength(),G=[0,1];S.length+G.length+10&&I.ishrn(F),I}function h(S,E){S=v(S,E),S=S.mod(E);var I=f.from(S.toArray());if(I.length=a)throw new Error("invalid sig")}d.exports=n},{"./curves.json":212,"bn.js":186,elliptic:405,"parse-asn1":459,"safe-buffer":494}],216:[function(e,d,m){},{}],217:[function(e,d,m){var f=e("buffer"),c=f.Buffer;function u(t,n){for(var r in t)n[r]=t[r]}c.from&&c.alloc&&c.allocUnsafe&&c.allocUnsafeSlow?d.exports=f:(u(f,m),m.Buffer=s);function s(t,n,r){return c(t,n,r)}u(c,s),s.from=function(t,n,r){if(typeof t=="number")throw new TypeError("Argument must not be a number");return c(t,n,r)},s.alloc=function(t,n,r){if(typeof t!="number")throw new TypeError("Argument must be a number");var i=c(t);return n!==void 0?typeof r=="string"?i.fill(n,r):i.fill(n):i.fill(0),i},s.allocUnsafe=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return c(t)},s.allocUnsafeSlow=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return f.SlowBuffer(t)}},{buffer:220}],218:[function(e,d,m){var f=e("safe-buffer").Buffer,c=f.isEncoding||function(E){switch(E=""+E,E&&E.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function u(E){if(!E)return"utf8";for(var I;;)switch(E){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return E;default:if(I)return;E=(""+E).toLowerCase(),I=!0}}function s(E){var I=u(E);if(typeof I!="string"&&(f.isEncoding===c||!c(E)))throw new Error("Unknown encoding: "+E);return I||E}m.StringDecoder=t;function t(E){this.encoding=s(E);var I;switch(this.encoding){case"utf16le":this.text=g,this.end=v,I=4;break;case"utf8":this.fillLast=o,I=4;break;case"base64":this.text=h,this.end=w,I=3;break;default:this.write=y,this.end=S;return}this.lastNeed=0,this.lastTotal=0,this.lastChar=f.allocUnsafe(I)}t.prototype.write=function(E){if(E.length===0)return"";var I,F;if(this.lastNeed){if(I=this.fillLast(E),I===void 0)return"";F=this.lastNeed,this.lastNeed=0}else F=0;return F>5===6?2:E>>4===14?3:E>>3===30?4:E>>6===2?-1:-2}function r(E,I,F){var B=I.length-1;if(B=0?(j>0&&(E.lastNeed=j-1),j):--B=0?(j>0&&(E.lastNeed=j-2),j):--B=0?(j>0&&(j===2?j=0:E.lastNeed=j-3),j):0))}function i(E,I,F){if((I[0]&192)!==128)return E.lastNeed=0,"�";if(E.lastNeed>1&&I.length>1){if((I[1]&192)!==128)return E.lastNeed=1,"�";if(E.lastNeed>2&&I.length>2&&(I[2]&192)!==128)return E.lastNeed=2,"�"}}function o(E){var I=this.lastTotal-this.lastNeed,F=i(this,E);if(F!==void 0)return F;if(this.lastNeed<=E.length)return E.copy(this.lastChar,I,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);E.copy(this.lastChar,I,0,E.length),this.lastNeed-=E.length}function l(E,I){var F=r(this,E,I);if(!this.lastNeed)return E.toString("utf8",I);this.lastTotal=F;var B=E.length-(F-this.lastNeed);return E.copy(this.lastChar,0,B),E.toString("utf8",I,B)}function a(E){var I=E&&E.length?this.write(E):"";return this.lastNeed?I+"�":I}function g(E,I){if((E.length-I)%2===0){var F=E.toString("utf16le",I);if(F){var B=F.charCodeAt(F.length-1);if(B>=55296&&B<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=E[E.length-2],this.lastChar[1]=E[E.length-1],F.slice(0,-1)}return F}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=E[E.length-1],E.toString("utf16le",I,E.length-1)}function v(E){var I=E&&E.length?this.write(E):"";if(this.lastNeed){var F=this.lastTotal-this.lastNeed;return I+this.lastChar.toString("utf16le",0,F)}return I}function h(E,I){var F=(E.length-I)%3;return F===0?E.toString("base64",I):(this.lastNeed=3-F,this.lastTotal=3,F===1?this.lastChar[0]=E[E.length-1]:(this.lastChar[0]=E[E.length-2],this.lastChar[1]=E[E.length-1]),E.toString("base64",I,E.length-F))}function w(E){var I=E&&E.length?this.write(E):"";return this.lastNeed?I+this.lastChar.toString("base64",0,3-this.lastNeed):I}function y(E){return E.toString(this.encoding)}function S(E){return E&&E.length?this.write(E):""}},{"safe-buffer":217}],219:[function(e,d,m){(function(f){(function(){d.exports=function(u,s){for(var t=Math.min(u.length,s.length),n=new f(t),r=0;rs)throw new RangeError('The value "'+Q+'" is invalid for option "size"');var z=new Uint8Array(Q);return z.__proto__=r.prototype,z}function r(Q,z,Y){if(typeof Q=="number"){if(typeof z=="string")throw new TypeError('The "string" argument must be of type string. Received type number');return a(Q)}return i(Q,z,Y)}typeof Symbol<"u"&&Symbol.species!=null&&r[Symbol.species]===r&&Object.defineProperty(r,Symbol.species,{value:null,configurable:!0,enumerable:!1,writable:!1}),r.poolSize=8192;function i(Q,z,Y){if(typeof Q=="string")return g(Q,z);if(ArrayBuffer.isView(Q))return v(Q);if(Q==null)throw TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof Q);if(oe(Q,ArrayBuffer)||Q&&oe(Q.buffer,ArrayBuffer))return h(Q,z,Y);if(typeof Q=="number")throw new TypeError('The "value" argument must not be of type number. Received type number');var fe=Q.valueOf&&Q.valueOf();if(fe!=null&&fe!==Q)return r.from(fe,z,Y);var we=w(Q);if(we)return we;if(typeof Symbol<"u"&&Symbol.toPrimitive!=null&&typeof Q[Symbol.toPrimitive]=="function")return r.from(Q[Symbol.toPrimitive]("string"),z,Y);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof Q)}r.from=function(Q,z,Y){return i(Q,z,Y)},r.prototype.__proto__=Uint8Array.prototype,r.__proto__=Uint8Array;function o(Q){if(typeof Q!="number")throw new TypeError('"size" argument must be of type number');if(Q<0)throw new RangeError('The value "'+Q+'" is invalid for option "size"')}function l(Q,z,Y){return o(Q),Q<=0?n(Q):z!==void 0?typeof Y=="string"?n(Q).fill(z,Y):n(Q).fill(z):n(Q)}r.alloc=function(Q,z,Y){return l(Q,z,Y)};function a(Q){return o(Q),n(Q<0?0:y(Q)|0)}r.allocUnsafe=function(Q){return a(Q)},r.allocUnsafeSlow=function(Q){return a(Q)};function g(Q,z){if((typeof z!="string"||z==="")&&(z="utf8"),!r.isEncoding(z))throw new TypeError("Unknown encoding: "+z);var Y=E(Q,z)|0,fe=n(Y),we=fe.write(Q,z);return we!==Y&&(fe=fe.slice(0,we)),fe}function v(Q){for(var z=Q.length<0?0:y(Q.length)|0,Y=n(z),fe=0;fe=s)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+s.toString(16)+" bytes");return Q|0}function S(Q){return+Q!=Q&&(Q=0),r.alloc(+Q)}r.isBuffer=function(z){return z!=null&&z._isBuffer===!0&&z!==r.prototype},r.compare=function(z,Y){if(oe(z,Uint8Array)&&(z=r.from(z,z.offset,z.byteLength)),oe(Y,Uint8Array)&&(Y=r.from(Y,Y.offset,Y.byteLength)),!r.isBuffer(z)||!r.isBuffer(Y))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(z===Y)return 0;for(var fe=z.length,we=Y.length,U=0,ve=Math.min(fe,we);U2&&arguments[2]===!0;if(!fe&&Y===0)return 0;for(var we=!1;;)switch(z){case"ascii":case"latin1":case"binary":return Y;case"utf8":case"utf-8":return te(Q).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Y*2;case"hex":return Y>>>1;case"base64":return de(Q).length;default:if(we)return fe?-1:te(Q).length;z=(""+z).toLowerCase(),we=!0}}r.byteLength=E;function I(Q,z,Y){var fe=!1;if((z===void 0||z<0)&&(z=0),z>this.length||((Y===void 0||Y>this.length)&&(Y=this.length),Y<=0)||(Y>>>=0,z>>>=0,Y<=z))return"";for(Q||(Q="utf8");;)switch(Q){case"hex":return R(this,z,Y);case"utf8":case"utf-8":return _(this,z,Y);case"ascii":return L(this,z,Y);case"latin1":case"binary":return $(this,z,Y);case"base64":return T(this,z,Y);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return k(this,z,Y);default:if(fe)throw new TypeError("Unknown encoding: "+Q);Q=(Q+"").toLowerCase(),fe=!0}}r.prototype._isBuffer=!0;function F(Q,z,Y){var fe=Q[z];Q[z]=Q[Y],Q[Y]=fe}r.prototype.swap16=function(){var z=this.length;if(z%2!==0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var Y=0;YY&&(z+=" ... "),""},r.prototype.compare=function(z,Y,fe,we,U){if(oe(z,Uint8Array)&&(z=r.from(z,z.offset,z.byteLength)),!r.isBuffer(z))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof z);if(Y===void 0&&(Y=0),fe===void 0&&(fe=z?z.length:0),we===void 0&&(we=0),U===void 0&&(U=this.length),Y<0||fe>z.length||we<0||U>this.length)throw new RangeError("out of range index");if(we>=U&&Y>=fe)return 0;if(we>=U)return-1;if(Y>=fe)return 1;if(Y>>>=0,fe>>>=0,we>>>=0,U>>>=0,this===z)return 0;for(var ve=U-we,Se=fe-Y,ee=Math.min(ve,Se),se=this.slice(we,U),me=z.slice(Y,fe),Ee=0;Ee2147483647?Y=2147483647:Y<-2147483648&&(Y=-2147483648),Y=+Y,ie(Y)&&(Y=we?0:Q.length-1),Y<0&&(Y=Q.length+Y),Y>=Q.length){if(we)return-1;Y=Q.length-1}else if(Y<0)if(we)Y=0;else return-1;if(typeof z=="string"&&(z=r.from(z,fe)),r.isBuffer(z))return z.length===0?-1:j(Q,z,Y,fe,we);if(typeof z=="number")return z=z&255,typeof Uint8Array.prototype.indexOf=="function"?we?Uint8Array.prototype.indexOf.call(Q,z,Y):Uint8Array.prototype.lastIndexOf.call(Q,z,Y):j(Q,[z],Y,fe,we);throw new TypeError("val must be string, number or Buffer")}function j(Q,z,Y,fe,we){var U=1,ve=Q.length,Se=z.length;if(fe!==void 0&&(fe=String(fe).toLowerCase(),fe==="ucs2"||fe==="ucs-2"||fe==="utf16le"||fe==="utf-16le")){if(Q.length<2||z.length<2)return-1;U=2,ve/=2,Se/=2,Y/=2}function ee(Ce,Fe){return U===1?Ce[Fe]:Ce.readUInt16BE(Fe*U)}var se;if(we){var me=-1;for(se=Y;seve&&(Y=ve-Se),se=Y;se>=0;se--){for(var Ee=!0,Ie=0;Iewe&&(fe=we)):fe=we;var U=z.length;fe>U/2&&(fe=U/2);for(var ve=0;ve>>0,isFinite(fe)?(fe=fe>>>0,we===void 0&&(we="utf8")):(we=fe,fe=void 0);else throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");var U=this.length-Y;if((fe===void 0||fe>U)&&(fe=U),z.length>0&&(fe<0||Y<0)||Y>this.length)throw new RangeError("Attempt to write outside buffer bounds");we||(we="utf8");for(var ve=!1;;)switch(we){case"hex":return X(this,z,Y,fe);case"utf8":case"utf-8":return G(this,z,Y,fe);case"ascii":return V(this,z,Y,fe);case"latin1":case"binary":return J(this,z,Y,fe);case"base64":return H(this,z,Y,fe);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return M(this,z,Y,fe);default:if(ve)throw new TypeError("Unknown encoding: "+we);we=(""+we).toLowerCase(),ve=!0}},r.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};function T(Q,z,Y){return z===0&&Y===Q.length?c.fromByteArray(Q):c.fromByteArray(Q.slice(z,Y))}function _(Q,z,Y){Y=Math.min(Q.length,Y);for(var fe=[],we=z;we239?4:U>223?3:U>191?2:1;if(we+Se<=Y){var ee,se,me,Ee;switch(Se){case 1:U<128&&(ve=U);break;case 2:ee=Q[we+1],(ee&192)===128&&(Ee=(U&31)<<6|ee&63,Ee>127&&(ve=Ee));break;case 3:ee=Q[we+1],se=Q[we+2],(ee&192)===128&&(se&192)===128&&(Ee=(U&15)<<12|(ee&63)<<6|se&63,Ee>2047&&(Ee<55296||Ee>57343)&&(ve=Ee));break;case 4:ee=Q[we+1],se=Q[we+2],me=Q[we+3],(ee&192)===128&&(se&192)===128&&(me&192)===128&&(Ee=(U&15)<<18|(ee&63)<<12|(se&63)<<6|me&63,Ee>65535&&Ee<1114112&&(ve=Ee))}}ve===null?(ve=65533,Se=1):ve>65535&&(ve-=65536,fe.push(ve>>>10&1023|55296),ve=56320|ve&1023),fe.push(ve),we+=Se}return P(fe)}var A=4096;function P(Q){var z=Q.length;if(z<=A)return String.fromCharCode.apply(String,Q);for(var Y="",fe=0;fefe)&&(Y=fe);for(var we="",U=z;Ufe&&(z=fe),Y<0?(Y+=fe,Y<0&&(Y=0)):Y>fe&&(Y=fe),YY)throw new RangeError("Trying to access beyond buffer length")}r.prototype.readUIntLE=function(z,Y,fe){z=z>>>0,Y=Y>>>0,fe||C(z,Y,this.length);for(var we=this[z],U=1,ve=0;++ve>>0,Y=Y>>>0,fe||C(z,Y,this.length);for(var we=this[z+--Y],U=1;Y>0&&(U*=256);)we+=this[z+--Y]*U;return we},r.prototype.readUInt8=function(z,Y){return z=z>>>0,Y||C(z,1,this.length),this[z]},r.prototype.readUInt16LE=function(z,Y){return z=z>>>0,Y||C(z,2,this.length),this[z]|this[z+1]<<8},r.prototype.readUInt16BE=function(z,Y){return z=z>>>0,Y||C(z,2,this.length),this[z]<<8|this[z+1]},r.prototype.readUInt32LE=function(z,Y){return z=z>>>0,Y||C(z,4,this.length),(this[z]|this[z+1]<<8|this[z+2]<<16)+this[z+3]*16777216},r.prototype.readUInt32BE=function(z,Y){return z=z>>>0,Y||C(z,4,this.length),this[z]*16777216+(this[z+1]<<16|this[z+2]<<8|this[z+3])},r.prototype.readIntLE=function(z,Y,fe){z=z>>>0,Y=Y>>>0,fe||C(z,Y,this.length);for(var we=this[z],U=1,ve=0;++ve=U&&(we-=Math.pow(2,8*Y)),we},r.prototype.readIntBE=function(z,Y,fe){z=z>>>0,Y=Y>>>0,fe||C(z,Y,this.length);for(var we=Y,U=1,ve=this[z+--we];we>0&&(U*=256);)ve+=this[z+--we]*U;return U*=128,ve>=U&&(ve-=Math.pow(2,8*Y)),ve},r.prototype.readInt8=function(z,Y){return z=z>>>0,Y||C(z,1,this.length),this[z]&128?(255-this[z]+1)*-1:this[z]},r.prototype.readInt16LE=function(z,Y){z=z>>>0,Y||C(z,2,this.length);var fe=this[z]|this[z+1]<<8;return fe&32768?fe|4294901760:fe},r.prototype.readInt16BE=function(z,Y){z=z>>>0,Y||C(z,2,this.length);var fe=this[z+1]|this[z]<<8;return fe&32768?fe|4294901760:fe},r.prototype.readInt32LE=function(z,Y){return z=z>>>0,Y||C(z,4,this.length),this[z]|this[z+1]<<8|this[z+2]<<16|this[z+3]<<24},r.prototype.readInt32BE=function(z,Y){return z=z>>>0,Y||C(z,4,this.length),this[z]<<24|this[z+1]<<16|this[z+2]<<8|this[z+3]},r.prototype.readFloatLE=function(z,Y){return z=z>>>0,Y||C(z,4,this.length),u.read(this,z,!0,23,4)},r.prototype.readFloatBE=function(z,Y){return z=z>>>0,Y||C(z,4,this.length),u.read(this,z,!1,23,4)},r.prototype.readDoubleLE=function(z,Y){return z=z>>>0,Y||C(z,8,this.length),u.read(this,z,!0,52,8)},r.prototype.readDoubleBE=function(z,Y){return z=z>>>0,Y||C(z,8,this.length),u.read(this,z,!1,52,8)};function O(Q,z,Y,fe,we,U){if(!r.isBuffer(Q))throw new TypeError('"buffer" argument must be a Buffer instance');if(z>we||zQ.length)throw new RangeError("Index out of range")}r.prototype.writeUIntLE=function(z,Y,fe,we){if(z=+z,Y=Y>>>0,fe=fe>>>0,!we){var U=Math.pow(2,8*fe)-1;O(this,z,Y,fe,U,0)}var ve=1,Se=0;for(this[Y]=z&255;++Se>>0,fe=fe>>>0,!we){var U=Math.pow(2,8*fe)-1;O(this,z,Y,fe,U,0)}var ve=fe-1,Se=1;for(this[Y+ve]=z&255;--ve>=0&&(Se*=256);)this[Y+ve]=z/Se&255;return Y+fe},r.prototype.writeUInt8=function(z,Y,fe){return z=+z,Y=Y>>>0,fe||O(this,z,Y,1,255,0),this[Y]=z&255,Y+1},r.prototype.writeUInt16LE=function(z,Y,fe){return z=+z,Y=Y>>>0,fe||O(this,z,Y,2,65535,0),this[Y]=z&255,this[Y+1]=z>>>8,Y+2},r.prototype.writeUInt16BE=function(z,Y,fe){return z=+z,Y=Y>>>0,fe||O(this,z,Y,2,65535,0),this[Y]=z>>>8,this[Y+1]=z&255,Y+2},r.prototype.writeUInt32LE=function(z,Y,fe){return z=+z,Y=Y>>>0,fe||O(this,z,Y,4,4294967295,0),this[Y+3]=z>>>24,this[Y+2]=z>>>16,this[Y+1]=z>>>8,this[Y]=z&255,Y+4},r.prototype.writeUInt32BE=function(z,Y,fe){return z=+z,Y=Y>>>0,fe||O(this,z,Y,4,4294967295,0),this[Y]=z>>>24,this[Y+1]=z>>>16,this[Y+2]=z>>>8,this[Y+3]=z&255,Y+4},r.prototype.writeIntLE=function(z,Y,fe,we){if(z=+z,Y=Y>>>0,!we){var U=Math.pow(2,8*fe-1);O(this,z,Y,fe,U-1,-U)}var ve=0,Se=1,ee=0;for(this[Y]=z&255;++ve>0)-ee&255;return Y+fe},r.prototype.writeIntBE=function(z,Y,fe,we){if(z=+z,Y=Y>>>0,!we){var U=Math.pow(2,8*fe-1);O(this,z,Y,fe,U-1,-U)}var ve=fe-1,Se=1,ee=0;for(this[Y+ve]=z&255;--ve>=0&&(Se*=256);)z<0&&ee===0&&this[Y+ve+1]!==0&&(ee=1),this[Y+ve]=(z/Se>>0)-ee&255;return Y+fe},r.prototype.writeInt8=function(z,Y,fe){return z=+z,Y=Y>>>0,fe||O(this,z,Y,1,127,-128),z<0&&(z=255+z+1),this[Y]=z&255,Y+1},r.prototype.writeInt16LE=function(z,Y,fe){return z=+z,Y=Y>>>0,fe||O(this,z,Y,2,32767,-32768),this[Y]=z&255,this[Y+1]=z>>>8,Y+2},r.prototype.writeInt16BE=function(z,Y,fe){return z=+z,Y=Y>>>0,fe||O(this,z,Y,2,32767,-32768),this[Y]=z>>>8,this[Y+1]=z&255,Y+2},r.prototype.writeInt32LE=function(z,Y,fe){return z=+z,Y=Y>>>0,fe||O(this,z,Y,4,2147483647,-2147483648),this[Y]=z&255,this[Y+1]=z>>>8,this[Y+2]=z>>>16,this[Y+3]=z>>>24,Y+4},r.prototype.writeInt32BE=function(z,Y,fe){return z=+z,Y=Y>>>0,fe||O(this,z,Y,4,2147483647,-2147483648),z<0&&(z=4294967295+z+1),this[Y]=z>>>24,this[Y+1]=z>>>16,this[Y+2]=z>>>8,this[Y+3]=z&255,Y+4};function W(Q,z,Y,fe,we,U){if(Y+fe>Q.length)throw new RangeError("Index out of range");if(Y<0)throw new RangeError("Index out of range")}function ne(Q,z,Y,fe,we){return z=+z,Y=Y>>>0,we||W(Q,z,Y,4),u.write(Q,z,Y,fe,23,4),Y+4}r.prototype.writeFloatLE=function(z,Y,fe){return ne(this,z,Y,!0,fe)},r.prototype.writeFloatBE=function(z,Y,fe){return ne(this,z,Y,!1,fe)};function he(Q,z,Y,fe,we){return z=+z,Y=Y>>>0,we||W(Q,z,Y,8),u.write(Q,z,Y,fe,52,8),Y+8}r.prototype.writeDoubleLE=function(z,Y,fe){return he(this,z,Y,!0,fe)},r.prototype.writeDoubleBE=function(z,Y,fe){return he(this,z,Y,!1,fe)},r.prototype.copy=function(z,Y,fe,we){if(!r.isBuffer(z))throw new TypeError("argument should be a Buffer");if(fe||(fe=0),!we&&we!==0&&(we=this.length),Y>=z.length&&(Y=z.length),Y||(Y=0),we>0&&we=this.length)throw new RangeError("Index out of range");if(we<0)throw new RangeError("sourceEnd out of bounds");we>this.length&&(we=this.length),z.length-Y=0;--ve)z[ve+Y]=this[ve+fe];else Uint8Array.prototype.set.call(z,this.subarray(fe,we),Y);return U},r.prototype.fill=function(z,Y,fe,we){if(typeof z=="string"){if(typeof Y=="string"?(we=Y,Y=0,fe=this.length):typeof fe=="string"&&(we=fe,fe=this.length),we!==void 0&&typeof we!="string")throw new TypeError("encoding must be a string");if(typeof we=="string"&&!r.isEncoding(we))throw new TypeError("Unknown encoding: "+we);if(z.length===1){var U=z.charCodeAt(0);(we==="utf8"&&U<128||we==="latin1")&&(z=U)}}else typeof z=="number"&&(z=z&255);if(Y<0||this.length>>0,fe=fe===void 0?this.length:fe>>>0,z||(z=0);var ve;if(typeof z=="number")for(ve=Y;ve55295&&Y<57344){if(!we){if(Y>56319){(z-=3)>-1&&U.push(239,191,189);continue}else if(ve+1===fe){(z-=3)>-1&&U.push(239,191,189);continue}we=Y;continue}if(Y<56320){(z-=3)>-1&&U.push(239,191,189),we=Y;continue}Y=(we-55296<<10|Y-56320)+65536}else we&&(z-=3)>-1&&U.push(239,191,189);if(we=null,Y<128){if((z-=1)<0)break;U.push(Y)}else if(Y<2048){if((z-=2)<0)break;U.push(Y>>6|192,Y&63|128)}else if(Y<65536){if((z-=3)<0)break;U.push(Y>>12|224,Y>>6&63|128,Y&63|128)}else if(Y<1114112){if((z-=4)<0)break;U.push(Y>>18|240,Y>>12&63|128,Y>>6&63|128,Y&63|128)}else throw new Error("Invalid code point")}return U}function Z(Q){for(var z=[],Y=0;Y>8,we=Y%256,U.push(we),U.push(fe);return U}function de(Q){return c.toByteArray(Ae(Q))}function ke(Q,z,Y,fe){for(var we=0;we=z.length||we>=Q.length);++we)z[we+Y]=Q[we];return we}function oe(Q,z){return Q instanceof z||Q!=null&&Q.constructor!=null&&Q.constructor.name!=null&&Q.constructor.name===z.name}function ie(Q){return Q!==Q}}).call(this)}).call(this,e("buffer").Buffer)},{"base64-js":185,buffer:220,ieee754:439}],221:[function(e,d,m){var f=e("safe-buffer").Buffer,c=e("stream").Transform,u=e("string_decoder").StringDecoder,s=e("inherits");function t(n){c.call(this),this.hashMode=typeof n=="string",this.hashMode?this[n]=this._finalOrDigest:this.final=this._finalOrDigest,this._final&&(this.__final=this._final,this._final=null),this._decoder=null,this._encoding=null}s(t,c),t.prototype.update=function(n,r,i){typeof n=="string"&&(n=f.from(n,r));var o=this._update(n);return this.hashMode?this:(i&&(o=this._toString(o,i)),o)},t.prototype.setAutoPadding=function(){},t.prototype.getAuthTag=function(){throw new Error("trying to get auth tag in unsupported state")},t.prototype.setAuthTag=function(){throw new Error("trying to set auth tag in unsupported state")},t.prototype.setAAD=function(){throw new Error("trying to set aad in unsupported state")},t.prototype._transform=function(n,r,i){var o;try{this.hashMode?this._update(n):this.push(this._update(n))}catch(l){o=l}finally{i(o)}},t.prototype._flush=function(n){var r;try{this.push(this.__final())}catch(i){r=i}n(r)},t.prototype._finalOrDigest=function(n){var r=this.__final()||f.alloc(0);return n&&(r=this._toString(r,n,!0)),r},t.prototype._toString=function(n,r,i){if(this._decoder||(this._decoder=new u(r),this._encoding=r),this._encoding!==r)throw new Error("can't switch encodings");var o=this._decoder.write(n);return i&&(o+=this._decoder.end()),o},d.exports=t},{inherits:440,"safe-buffer":494,stream:505,string_decoder:218}],222:[function(e,d,m){var f=e("../internals/is-callable"),c=e("../internals/try-to-string"),u=TypeError;d.exports=function(s){if(f(s))return s;throw new u(c(s)+" is not a function")}},{"../internals/is-callable":285,"../internals/try-to-string":349}],223:[function(e,d,m){var f=e("../internals/is-constructor"),c=e("../internals/try-to-string"),u=TypeError;d.exports=function(s){if(f(s))return s;throw new u(c(s)+" is not a constructor")}},{"../internals/is-constructor":286,"../internals/try-to-string":349}],224:[function(e,d,m){var f=e("../internals/is-callable"),c=String,u=TypeError;d.exports=function(s){if(typeof s=="object"||f(s))return s;throw new u("Can't set "+c(s)+" as a prototype")}},{"../internals/is-callable":285}],225:[function(e,d,m){var f=e("../internals/well-known-symbol"),c=e("../internals/object-create"),u=e("../internals/object-define-property").f,s=f("unscopables"),t=Array.prototype;t[s]===void 0&&u(t,s,{configurable:!0,value:c(null)}),d.exports=function(n){t[s][n]=!0}},{"../internals/object-create":306,"../internals/object-define-property":308,"../internals/well-known-symbol":357}],226:[function(e,d,m){var f=e("../internals/object-is-prototype-of"),c=TypeError;d.exports=function(u,s){if(f(s,u))return u;throw new c("Incorrect invocation")}},{"../internals/object-is-prototype-of":314}],227:[function(e,d,m){var f=e("../internals/is-object"),c=String,u=TypeError;d.exports=function(s){if(f(s))return s;throw new u(c(s)+" is not an object")}},{"../internals/is-object":289}],228:[function(e,d,m){var f=e("../internals/to-indexed-object"),c=e("../internals/to-absolute-index"),u=e("../internals/length-of-array-like"),s=function(t){return function(n,r,i){var o=f(n),l=u(o),a=c(i,l),g;if(t&&r!==r){for(;l>a;)if(g=o[a++],g!==g)return!0}else for(;l>a;a++)if((t||a in o)&&o[a]===r)return t||a||0;return!t&&-1}};d.exports={includes:s(!0),indexOf:s(!1)}},{"../internals/length-of-array-like":299,"../internals/to-absolute-index":340,"../internals/to-indexed-object":341}],229:[function(e,d,m){var f=e("../internals/function-bind-context"),c=e("../internals/function-uncurry-this"),u=e("../internals/indexed-object"),s=e("../internals/to-object"),t=e("../internals/length-of-array-like"),n=e("../internals/array-species-create"),r=c([].push),i=function(o){var l=o===1,a=o===2,g=o===3,v=o===4,h=o===6,w=o===7,y=o===5||h;return function(S,E,I,F){for(var B=s(S),j=u(B),X=f(E,I),G=t(j),V=0,J=F||n,H=l?J(S,G):a||w?J(S,0):void 0,M,T;G>V;V++)if((y||V in j)&&(M=j[V],T=X(M,V,B),o))if(l)H[V]=T;else if(T)switch(o){case 3:return!0;case 5:return M;case 6:return V;case 2:r(H,M)}else switch(o){case 4:return!1;case 7:r(H,M)}return h?-1:g||v?v:H}};d.exports={forEach:i(0),map:i(1),filter:i(2),some:i(3),every:i(4),find:i(5),findIndex:i(6),filterReject:i(7)}},{"../internals/array-species-create":233,"../internals/function-bind-context":262,"../internals/function-uncurry-this":268,"../internals/indexed-object":280,"../internals/length-of-array-like":299,"../internals/to-object":344}],230:[function(e,d,m){var f=e("../internals/to-absolute-index"),c=e("../internals/length-of-array-like"),u=e("../internals/create-property"),s=Array,t=Math.max;d.exports=function(n,r,i){for(var o=c(n),l=f(r,o),a=f(i===void 0?o:i,o),g=s(t(a-l,0)),v=0;l"u"&&f!==void 0;d.exports={all:f,IS_HTMLDDA:c}},{}],249:[function(e,d,m){var f=e("../internals/global"),c=e("../internals/is-object"),u=f.document,s=c(u)&&c(u.createElement);d.exports=function(t){return s?u.createElement(t):{}}},{"../internals/global":274,"../internals/is-object":289}],250:[function(e,d,m){var f=e("../internals/engine-is-deno"),c=e("../internals/engine-is-node");d.exports=!f&&!c&&typeof window=="object"&&typeof document=="object"},{"../internals/engine-is-deno":251,"../internals/engine-is-node":254}],251:[function(e,d,m){d.exports=typeof Deno=="object"&&Deno&&typeof Deno.version=="object"},{}],252:[function(e,d,m){var f=e("../internals/engine-user-agent");d.exports=/ipad|iphone|ipod/i.test(f)&&typeof Pebble<"u"},{"../internals/engine-user-agent":256}],253:[function(e,d,m){var f=e("../internals/engine-user-agent");d.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(f)},{"../internals/engine-user-agent":256}],254:[function(e,d,m){var f=e("../internals/global"),c=e("../internals/classof-raw");d.exports=c(f.process)==="process"},{"../internals/classof-raw":235,"../internals/global":274}],255:[function(e,d,m){var f=e("../internals/engine-user-agent");d.exports=/web0s(?!.*chrome)/i.test(f)},{"../internals/engine-user-agent":256}],256:[function(e,d,m){d.exports=typeof navigator<"u"&&String(navigator.userAgent)||""},{}],257:[function(e,d,m){var f=e("../internals/global"),c=e("../internals/engine-user-agent"),u=f.process,s=f.Deno,t=u&&u.versions||s&&s.version,n=t&&t.v8,r,i;n&&(r=n.split("."),i=r[0]>0&&r[0]<4?1:+(r[0]+r[1])),!i&&c&&(r=c.match(/Edge\/(\d+)/),(!r||r[1]>=74)&&(r=c.match(/Chrome\/(\d+)/),r&&(i=+r[1]))),d.exports=i},{"../internals/engine-user-agent":256,"../internals/global":274}],258:[function(e,d,m){d.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},{}],259:[function(e,d,m){var f=e("../internals/global"),c=e("../internals/object-get-own-property-descriptor").f,u=e("../internals/create-non-enumerable-property"),s=e("../internals/define-built-in"),t=e("../internals/define-global-property"),n=e("../internals/copy-constructor-properties"),r=e("../internals/is-forced");d.exports=function(i,o){var l=i.target,a=i.global,g=i.stat,v,h,w,y,S,E;if(a?h=f:g?h=f[l]||t(l,{}):h=(f[l]||{}).prototype,h)for(w in o){if(S=o[w],i.dontCallGetSet?(E=c(h,w),y=E&&E.value):y=h[w],v=r(a?w:l+(g?".":"#")+w,i.forced),!v&&y!==void 0){if(typeof S==typeof y)continue;n(S,y)}(i.sham||y&&y.sham)&&u(S,"sham",!0),s(h,w,S,i)}}},{"../internals/copy-constructor-properties":237,"../internals/create-non-enumerable-property":241,"../internals/define-built-in":245,"../internals/define-global-property":246,"../internals/global":274,"../internals/is-forced":287,"../internals/object-get-own-property-descriptor":309}],260:[function(e,d,m){d.exports=function(f){try{return!!f()}catch{return!0}}},{}],261:[function(e,d,m){var f=e("../internals/function-bind-native"),c=Function.prototype,u=c.apply,s=c.call;d.exports=typeof Reflect=="object"&&Reflect.apply||(f?s.bind(u):function(){return s.apply(u,arguments)})},{"../internals/function-bind-native":263}],262:[function(e,d,m){var f=e("../internals/function-uncurry-this-clause"),c=e("../internals/a-callable"),u=e("../internals/function-bind-native"),s=f(f.bind);d.exports=function(t,n){return c(t),n===void 0?t:u?s(t,n):function(){return t.apply(n,arguments)}}},{"../internals/a-callable":222,"../internals/function-bind-native":263,"../internals/function-uncurry-this-clause":267}],263:[function(e,d,m){var f=e("../internals/fails");d.exports=!f(function(){var c=(function(){}).bind();return typeof c!="function"||c.hasOwnProperty("prototype")})},{"../internals/fails":260}],264:[function(e,d,m){var f=e("../internals/function-bind-native"),c=Function.prototype.call;d.exports=f?c.bind(c):function(){return c.apply(c,arguments)}},{"../internals/function-bind-native":263}],265:[function(e,d,m){var f=e("../internals/descriptors"),c=e("../internals/has-own-property"),u=Function.prototype,s=f&&Object.getOwnPropertyDescriptor,t=c(u,"name"),n=t&&(function(){}).name==="something",r=t&&(!f||f&&s(u,"name").configurable);d.exports={EXISTS:t,PROPER:n,CONFIGURABLE:r}},{"../internals/descriptors":247,"../internals/has-own-property":275}],266:[function(e,d,m){var f=e("../internals/function-uncurry-this"),c=e("../internals/a-callable");d.exports=function(u,s,t){try{return f(c(Object.getOwnPropertyDescriptor(u,s)[t]))}catch{}}},{"../internals/a-callable":222,"../internals/function-uncurry-this":268}],267:[function(e,d,m){var f=e("../internals/classof-raw"),c=e("../internals/function-uncurry-this");d.exports=function(u){if(f(u)==="Function")return c(u)}},{"../internals/classof-raw":235,"../internals/function-uncurry-this":268}],268:[function(e,d,m){var f=e("../internals/function-bind-native"),c=Function.prototype,u=c.call,s=f&&c.bind.bind(u,u);d.exports=f?s:function(t){return function(){return u.apply(t,arguments)}}},{"../internals/function-bind-native":263}],269:[function(e,d,m){var f=e("../internals/global"),c=e("../internals/is-callable"),u=function(s){return c(s)?s:void 0};d.exports=function(s,t){return arguments.length<2?u(f[s]):f[s]&&f[s][t]}},{"../internals/global":274,"../internals/is-callable":285}],270:[function(e,d,m){var f=e("../internals/classof"),c=e("../internals/get-method"),u=e("../internals/is-null-or-undefined"),s=e("../internals/iterators"),t=e("../internals/well-known-symbol"),n=t("iterator");d.exports=function(r){if(!u(r))return c(r,n)||c(r,"@@iterator")||s[f(r)]}},{"../internals/classof":236,"../internals/get-method":273,"../internals/is-null-or-undefined":288,"../internals/iterators":298,"../internals/well-known-symbol":357}],271:[function(e,d,m){var f=e("../internals/function-call"),c=e("../internals/a-callable"),u=e("../internals/an-object"),s=e("../internals/try-to-string"),t=e("../internals/get-iterator-method"),n=TypeError;d.exports=function(r,i){var o=arguments.length<2?t(r):i;if(c(o))return u(f(o,r));throw new n(s(r)+" is not iterable")}},{"../internals/a-callable":222,"../internals/an-object":227,"../internals/function-call":264,"../internals/get-iterator-method":270,"../internals/try-to-string":349}],272:[function(e,d,m){var f=e("../internals/function-uncurry-this"),c=e("../internals/is-array"),u=e("../internals/is-callable"),s=e("../internals/classof-raw"),t=e("../internals/to-string"),n=f([].push);d.exports=function(r){if(u(r))return r;if(c(r)){for(var i=r.length,o=[],l=0;lV;V++)if(H=A(h[V]),H&&r(v,H))return H;return new g(!1)}X=i(h,G)}for(M=I?h.next:X.next;!(T=c(M,X)).done;){try{H=A(T.value)}catch(P){l(X,"throw",P)}if(typeof H=="object"&&H&&r(v,H))return H}return new g(!1)}},{"../internals/an-object":227,"../internals/function-bind-context":262,"../internals/function-call":264,"../internals/get-iterator":271,"../internals/get-iterator-method":270,"../internals/is-array-iterator-method":283,"../internals/iterator-close":294,"../internals/length-of-array-like":299,"../internals/object-is-prototype-of":314,"../internals/try-to-string":349}],294:[function(e,d,m){var f=e("../internals/function-call"),c=e("../internals/an-object"),u=e("../internals/get-method");d.exports=function(s,t,n){var r,i;c(s);try{if(r=u(s,"return"),!r){if(t==="throw")throw n;return n}r=f(r,s)}catch(o){i=!0,r=o}if(t==="throw")throw n;if(i)throw r;return c(r),n}},{"../internals/an-object":227,"../internals/function-call":264,"../internals/get-method":273}],295:[function(e,d,m){var f=e("../internals/iterators-core").IteratorPrototype,c=e("../internals/object-create"),u=e("../internals/create-property-descriptor"),s=e("../internals/set-to-string-tag"),t=e("../internals/iterators"),n=function(){return this};d.exports=function(r,i,o,l){var a=i+" Iterator";return r.prototype=c(f,{next:u(+!l,o)}),s(r,a,!1,!0),t[a]=n,r}},{"../internals/create-property-descriptor":242,"../internals/iterators":298,"../internals/iterators-core":297,"../internals/object-create":306,"../internals/set-to-string-tag":331}],296:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/function-call"),u=e("../internals/is-pure"),s=e("../internals/function-name"),t=e("../internals/is-callable"),n=e("../internals/iterator-create-constructor"),r=e("../internals/object-get-prototype-of"),i=e("../internals/object-set-prototype-of"),o=e("../internals/set-to-string-tag"),l=e("../internals/create-non-enumerable-property"),a=e("../internals/define-built-in"),g=e("../internals/well-known-symbol"),v=e("../internals/iterators"),h=e("../internals/iterators-core"),w=s.PROPER,y=s.CONFIGURABLE,S=h.IteratorPrototype,E=h.BUGGY_SAFARI_ITERATORS,I=g("iterator"),F="keys",B="values",j="entries",X=function(){return this};d.exports=function(G,V,J,H,M,T,_){n(J,V,H);var A=function(he){if(he===M&&k)return k;if(!E&&he&&he in $)return $[he];switch(he){case F:return function(){return new J(this,he)};case B:return function(){return new J(this,he)};case j:return function(){return new J(this,he)}}return function(){return new J(this)}},P=V+" Iterator",L=!1,$=G.prototype,R=$[I]||$["@@iterator"]||M&&$[M],k=!E&&R||A(M),C=V==="Array"&&$.entries||R,O,W,ne;if(C&&(O=r(C.call(new G)),O!==Object.prototype&&O.next&&(!u&&r(O)!==S&&(i?i(O,S):t(O[I])||a(O,I,X)),o(O,P,!0,!0),u&&(v[P]=X))),w&&M===B&&R&&R.name!==B&&(!u&&y?l($,"name",B):(L=!0,k=function(){return c(R,this)})),M)if(W={values:A(B),keys:T?k:A(F),entries:A(j)},_)for(ne in W)(E||L||!(ne in $))&&a($,ne,W[ne]);else f({target:V,proto:!0,forced:E||L},W);return(!u||_)&&$[I]!==k&&a($,I,k,{name:M}),v[V]=k,W}},{"../internals/create-non-enumerable-property":241,"../internals/define-built-in":245,"../internals/export":259,"../internals/function-call":264,"../internals/function-name":265,"../internals/is-callable":285,"../internals/is-pure":290,"../internals/iterator-create-constructor":295,"../internals/iterators":298,"../internals/iterators-core":297,"../internals/object-get-prototype-of":313,"../internals/object-set-prototype-of":318,"../internals/set-to-string-tag":331,"../internals/well-known-symbol":357}],297:[function(e,d,m){var f=e("../internals/fails"),c=e("../internals/is-callable"),u=e("../internals/is-object"),s=e("../internals/object-create"),t=e("../internals/object-get-prototype-of"),n=e("../internals/define-built-in"),r=e("../internals/well-known-symbol"),i=e("../internals/is-pure"),o=r("iterator"),l=!1,a,g,v;[].keys&&(v=[].keys(),"next"in v?(g=t(t(v)),g!==Object.prototype&&(a=g)):l=!0);var h=!u(a)||f(function(){var w={};return a[o].call(w)!==w});h?a={}:i&&(a=s(a)),c(a[o])||n(a,o,function(){return this}),d.exports={IteratorPrototype:a,BUGGY_SAFARI_ITERATORS:l}},{"../internals/define-built-in":245,"../internals/fails":260,"../internals/is-callable":285,"../internals/is-object":289,"../internals/is-pure":290,"../internals/object-create":306,"../internals/object-get-prototype-of":313,"../internals/well-known-symbol":357}],298:[function(e,d,m){arguments[4][276][0].apply(m,arguments)},{dup:276}],299:[function(e,d,m){var f=e("../internals/to-length");d.exports=function(c){return f(c.length)}},{"../internals/to-length":343}],300:[function(e,d,m){var f=e("../internals/function-uncurry-this"),c=e("../internals/fails"),u=e("../internals/is-callable"),s=e("../internals/has-own-property"),t=e("../internals/descriptors"),n=e("../internals/function-name").CONFIGURABLE,r=e("../internals/inspect-source"),i=e("../internals/internal-state"),o=i.enforce,l=i.get,a=String,g=Object.defineProperty,v=f("".slice),h=f("".replace),w=f([].join),y=t&&!c(function(){return g(function(){},"length",{value:8}).length!==8}),S=String(String).split("String"),E=d.exports=function(I,F,B){v(a(F),0,7)==="Symbol("&&(F="["+h(a(F),/^Symbol\(([^)]*)\)/,"$1")+"]"),B&&B.getter&&(F="get "+F),B&&B.setter&&(F="set "+F),(!s(I,"name")||n&&I.name!==F)&&(t?g(I,"name",{value:F,configurable:!0}):I.name=F),y&&B&&s(B,"arity")&&I.length!==B.arity&&g(I,"length",{value:B.arity});try{B&&s(B,"constructor")&&B.constructor?t&&g(I,"prototype",{writable:!1}):I.prototype&&(I.prototype=void 0)}catch{}var j=o(I);return s(j,"source")||(j.source=w(S,typeof F=="string"?F:"")),I};Function.prototype.toString=E(function(){return u(this)&&l(this).source||r(this)},"toString")},{"../internals/descriptors":247,"../internals/fails":260,"../internals/function-name":265,"../internals/function-uncurry-this":268,"../internals/has-own-property":275,"../internals/inspect-source":281,"../internals/internal-state":282,"../internals/is-callable":285}],301:[function(e,d,m){var f=Math.ceil,c=Math.floor;d.exports=Math.trunc||function(s){var t=+s;return(t>0?c:f)(t)}},{}],302:[function(e,d,m){var f=e("../internals/global"),c=e("../internals/function-bind-context"),u=e("../internals/object-get-own-property-descriptor").f,s=e("../internals/task").set,t=e("../internals/queue"),n=e("../internals/engine-is-ios"),r=e("../internals/engine-is-ios-pebble"),i=e("../internals/engine-is-webos-webkit"),o=e("../internals/engine-is-node"),l=f.MutationObserver||f.WebKitMutationObserver,a=f.document,g=f.process,v=f.Promise,h=u(f,"queueMicrotask"),w=h&&h.value,y,S,E,I,F;if(!w){var B=new t,j=function(){var X,G;for(o&&(X=g.domain)&&X.exit();G=B.get();)try{G()}catch(V){throw B.head&&y(),V}X&&X.enter()};!n&&!o&&!i&&l&&a?(S=!0,E=a.createTextNode(""),new l(j).observe(E,{characterData:!0}),y=function(){E.data=S=!S}):!r&&v&&v.resolve?(I=v.resolve(void 0),I.constructor=v,F=c(I.then,I),y=function(){F(j)}):o?y=function(){g.nextTick(j)}:(s=c(s,f),y=function(){s(j)}),w=function(X){B.head||y(),B.add(X)}}d.exports=w},{"../internals/engine-is-ios":253,"../internals/engine-is-ios-pebble":252,"../internals/engine-is-node":254,"../internals/engine-is-webos-webkit":255,"../internals/function-bind-context":262,"../internals/global":274,"../internals/object-get-own-property-descriptor":309,"../internals/queue":328,"../internals/task":339}],303:[function(e,d,m){var f=e("../internals/a-callable"),c=TypeError,u=function(s){var t,n;this.promise=new s(function(r,i){if(t!==void 0||n!==void 0)throw new c("Bad Promise constructor");t=r,n=i}),this.resolve=f(t),this.reject=f(n)};d.exports.f=function(s){return new u(s)}},{"../internals/a-callable":222}],304:[function(e,d,m){var f=e("../internals/is-regexp"),c=TypeError;d.exports=function(u){if(f(u))throw new c("The method doesn't accept regular expressions");return u}},{"../internals/is-regexp":291}],305:[function(e,d,m){var f=e("../internals/descriptors"),c=e("../internals/function-uncurry-this"),u=e("../internals/function-call"),s=e("../internals/fails"),t=e("../internals/object-keys"),n=e("../internals/object-get-own-property-symbols"),r=e("../internals/object-property-is-enumerable"),i=e("../internals/to-object"),o=e("../internals/indexed-object"),l=Object.assign,a=Object.defineProperty,g=c([].concat);d.exports=!l||s(function(){if(f&&l({b:1},l(a({},"a",{enumerable:!0,get:function(){a(this,"b",{value:3,enumerable:!1})}}),{b:2})).b!==1)return!0;var v={},h={},w=Symbol("assign detection"),y="abcdefghijklmnopqrst";return v[w]=7,y.split("").forEach(function(S){h[S]=S}),l({},v)[w]!==7||t(l({},h)).join("")!==y})?function(h,w){for(var y=i(h),S=arguments.length,E=1,I=n.f,F=r.f;S>E;)for(var B=o(arguments[E++]),j=I?g(t(B),I(B)):t(B),X=j.length,G=0,V;X>G;)V=j[G++],(!f||u(F,B,V))&&(y[V]=B[V]);return y}:l},{"../internals/descriptors":247,"../internals/fails":260,"../internals/function-call":264,"../internals/function-uncurry-this":268,"../internals/indexed-object":280,"../internals/object-get-own-property-symbols":312,"../internals/object-keys":316,"../internals/object-property-is-enumerable":317,"../internals/to-object":344}],306:[function(e,d,m){var f=e("../internals/an-object"),c=e("../internals/object-define-properties"),u=e("../internals/enum-bug-keys"),s=e("../internals/hidden-keys"),t=e("../internals/html"),n=e("../internals/document-create-element"),r=e("../internals/shared-key"),i=">",o="<",l="prototype",a="script",g=r("IE_PROTO"),v=function(){},h=function(I){return o+a+i+I+o+"/"+a+i},w=function(I){I.write(h("")),I.close();var F=I.parentWindow.Object;return I=null,F},y=function(){var I=n("iframe"),F="java"+a+":",B;return I.style.display="none",t.appendChild(I),I.src=String(F),B=I.contentWindow.document,B.open(),B.write(h("document.F=Object")),B.close(),B.F},S,E=function(){try{S=new ActiveXObject("htmlfile")}catch{}E=typeof document<"u"?document.domain&&S?w(S):y():w(S);for(var I=u.length;I--;)delete E[l][u[I]];return E()};s[g]=!0,d.exports=Object.create||function(F,B){var j;return F!==null?(v[l]=f(F),j=new v,v[l]=null,j[g]=F):j=E(),B===void 0?j:c.f(j,B)}},{"../internals/an-object":227,"../internals/document-create-element":249,"../internals/enum-bug-keys":258,"../internals/hidden-keys":276,"../internals/html":278,"../internals/object-define-properties":307,"../internals/shared-key":332}],307:[function(e,d,m){var f=e("../internals/descriptors"),c=e("../internals/v8-prototype-define-bug"),u=e("../internals/object-define-property"),s=e("../internals/an-object"),t=e("../internals/to-indexed-object"),n=e("../internals/object-keys");m.f=f&&!c?Object.defineProperties:function(i,o){s(i);for(var l=t(o),a=n(o),g=a.length,v=0,h;g>v;)u.f(i,h=a[v++],l[h]);return i}},{"../internals/an-object":227,"../internals/descriptors":247,"../internals/object-define-property":308,"../internals/object-keys":316,"../internals/to-indexed-object":341,"../internals/v8-prototype-define-bug":352}],308:[function(e,d,m){var f=e("../internals/descriptors"),c=e("../internals/ie8-dom-define"),u=e("../internals/v8-prototype-define-bug"),s=e("../internals/an-object"),t=e("../internals/to-property-key"),n=TypeError,r=Object.defineProperty,i=Object.getOwnPropertyDescriptor,o="enumerable",l="configurable",a="writable";m.f=f?u?function(v,h,w){if(s(v),h=t(h),s(w),typeof v=="function"&&h==="prototype"&&"value"in w&&a in w&&!w[a]){var y=i(v,h);y&&y[a]&&(v[h]=w.value,w={configurable:l in w?w[l]:y[l],enumerable:o in w?w[o]:y[o],writable:!1})}return r(v,h,w)}:r:function(v,h,w){if(s(v),h=t(h),s(w),c)try{return r(v,h,w)}catch{}if("get"in w||"set"in w)throw new n("Accessors not supported");return"value"in w&&(v[h]=w.value),v}},{"../internals/an-object":227,"../internals/descriptors":247,"../internals/ie8-dom-define":279,"../internals/to-property-key":346,"../internals/v8-prototype-define-bug":352}],309:[function(e,d,m){var f=e("../internals/descriptors"),c=e("../internals/function-call"),u=e("../internals/object-property-is-enumerable"),s=e("../internals/create-property-descriptor"),t=e("../internals/to-indexed-object"),n=e("../internals/to-property-key"),r=e("../internals/has-own-property"),i=e("../internals/ie8-dom-define"),o=Object.getOwnPropertyDescriptor;m.f=f?o:function(a,g){if(a=t(a),g=n(g),i)try{return o(a,g)}catch{}if(r(a,g))return s(!c(u.f,a,g),a[g])}},{"../internals/create-property-descriptor":242,"../internals/descriptors":247,"../internals/function-call":264,"../internals/has-own-property":275,"../internals/ie8-dom-define":279,"../internals/object-property-is-enumerable":317,"../internals/to-indexed-object":341,"../internals/to-property-key":346}],310:[function(e,d,m){var f=e("../internals/classof-raw"),c=e("../internals/to-indexed-object"),u=e("../internals/object-get-own-property-names").f,s=e("../internals/array-slice-simple"),t=typeof window=="object"&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],n=function(r){try{return u(r)}catch{return s(t)}};d.exports.f=function(i){return t&&f(i)==="Window"?n(i):u(c(i))}},{"../internals/array-slice-simple":230,"../internals/classof-raw":235,"../internals/object-get-own-property-names":311,"../internals/to-indexed-object":341}],311:[function(e,d,m){var f=e("../internals/object-keys-internal"),c=e("../internals/enum-bug-keys"),u=c.concat("length","prototype");m.f=Object.getOwnPropertyNames||function(t){return f(t,u)}},{"../internals/enum-bug-keys":258,"../internals/object-keys-internal":315}],312:[function(e,d,m){m.f=Object.getOwnPropertySymbols},{}],313:[function(e,d,m){var f=e("../internals/has-own-property"),c=e("../internals/is-callable"),u=e("../internals/to-object"),s=e("../internals/shared-key"),t=e("../internals/correct-prototype-getter"),n=s("IE_PROTO"),r=Object,i=r.prototype;d.exports=t?r.getPrototypeOf:function(o){var l=u(o);if(f(l,n))return l[n];var a=l.constructor;return c(a)&&l instanceof a?a.prototype:l instanceof r?i:null}},{"../internals/correct-prototype-getter":239,"../internals/has-own-property":275,"../internals/is-callable":285,"../internals/shared-key":332,"../internals/to-object":344}],314:[function(e,d,m){var f=e("../internals/function-uncurry-this");d.exports=f({}.isPrototypeOf)},{"../internals/function-uncurry-this":268}],315:[function(e,d,m){var f=e("../internals/function-uncurry-this"),c=e("../internals/has-own-property"),u=e("../internals/to-indexed-object"),s=e("../internals/array-includes").indexOf,t=e("../internals/hidden-keys"),n=f([].push);d.exports=function(r,i){var o=u(r),l=0,a=[],g;for(g in o)!c(t,g)&&c(o,g)&&n(a,g);for(;i.length>l;)c(o,g=i[l++])&&(~s(a,g)||n(a,g));return a}},{"../internals/array-includes":228,"../internals/function-uncurry-this":268,"../internals/has-own-property":275,"../internals/hidden-keys":276,"../internals/to-indexed-object":341}],316:[function(e,d,m){var f=e("../internals/object-keys-internal"),c=e("../internals/enum-bug-keys");d.exports=Object.keys||function(s){return f(s,c)}},{"../internals/enum-bug-keys":258,"../internals/object-keys-internal":315}],317:[function(e,d,m){var f={}.propertyIsEnumerable,c=Object.getOwnPropertyDescriptor,u=c&&!f.call({1:2},1);m.f=u?function(t){var n=c(this,t);return!!n&&n.enumerable}:f},{}],318:[function(e,d,m){var f=e("../internals/function-uncurry-this-accessor"),c=e("../internals/an-object"),u=e("../internals/a-possible-prototype");d.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var s=!1,t={},n;try{n=f(Object.prototype,"__proto__","set"),n(t,[]),s=t instanceof Array}catch{}return function(i,o){return c(i),u(o),s?n(i,o):i.__proto__=o,i}}():void 0)},{"../internals/a-possible-prototype":224,"../internals/an-object":227,"../internals/function-uncurry-this-accessor":266}],319:[function(e,d,m){var f=e("../internals/descriptors"),c=e("../internals/fails"),u=e("../internals/function-uncurry-this"),s=e("../internals/object-get-prototype-of"),t=e("../internals/object-keys"),n=e("../internals/to-indexed-object"),r=e("../internals/object-property-is-enumerable").f,i=u(r),o=u([].push),l=f&&c(function(){var g=Object.create(null);return g[2]=2,!i(g,2)}),a=function(g){return function(v){for(var h=n(v),w=t(h),y=l&&s(h)===null,S=w.length,E=0,I=[],F;S>E;)F=w[E++],(!f||(y?F in h:i(h,F)))&&o(I,g?[F,h[F]]:h[F]);return I}};d.exports={entries:a(!0),values:a(!1)}},{"../internals/descriptors":247,"../internals/fails":260,"../internals/function-uncurry-this":268,"../internals/object-get-prototype-of":313,"../internals/object-keys":316,"../internals/object-property-is-enumerable":317,"../internals/to-indexed-object":341}],320:[function(e,d,m){var f=e("../internals/function-call"),c=e("../internals/is-callable"),u=e("../internals/is-object"),s=TypeError;d.exports=function(t,n){var r,i;if(n==="string"&&c(r=t.toString)&&!u(i=f(r,t))||c(r=t.valueOf)&&!u(i=f(r,t))||n!=="string"&&c(r=t.toString)&&!u(i=f(r,t)))return i;throw new s("Can't convert object to primitive value")}},{"../internals/function-call":264,"../internals/is-callable":285,"../internals/is-object":289}],321:[function(e,d,m){var f=e("../internals/get-built-in"),c=e("../internals/function-uncurry-this"),u=e("../internals/object-get-own-property-names"),s=e("../internals/object-get-own-property-symbols"),t=e("../internals/an-object"),n=c([].concat);d.exports=f("Reflect","ownKeys")||function(i){var o=u.f(t(i)),l=s.f;return l?n(o,l(i)):o}},{"../internals/an-object":227,"../internals/function-uncurry-this":268,"../internals/get-built-in":269,"../internals/object-get-own-property-names":311,"../internals/object-get-own-property-symbols":312}],322:[function(e,d,m){var f=e("../internals/global");d.exports=f},{"../internals/global":274}],323:[function(e,d,m){d.exports=function(f){try{return{error:!1,value:f()}}catch(c){return{error:!0,value:c}}}},{}],324:[function(e,d,m){var f=e("../internals/global"),c=e("../internals/promise-native-constructor"),u=e("../internals/is-callable"),s=e("../internals/is-forced"),t=e("../internals/inspect-source"),n=e("../internals/well-known-symbol"),r=e("../internals/engine-is-browser"),i=e("../internals/engine-is-deno"),o=e("../internals/is-pure"),l=e("../internals/engine-v8-version"),a=c&&c.prototype,g=n("species"),v=!1,h=u(f.PromiseRejectionEvent),w=s("Promise",function(){var y=t(c),S=y!==String(c);if(!S&&l===66||o&&!(a.catch&&a.finally))return!0;if(!l||l<51||!/native code/.test(y)){var E=new c(function(B){B(1)}),I=function(B){B(function(){},function(){})},F=E.constructor={};if(F[g]=I,v=E.then(function(){})instanceof I,!v)return!0}return!S&&(r||i)&&!h});d.exports={CONSTRUCTOR:w,REJECTION_EVENT:h,SUBCLASSING:v}},{"../internals/engine-is-browser":250,"../internals/engine-is-deno":251,"../internals/engine-v8-version":257,"../internals/global":274,"../internals/inspect-source":281,"../internals/is-callable":285,"../internals/is-forced":287,"../internals/is-pure":290,"../internals/promise-native-constructor":325,"../internals/well-known-symbol":357}],325:[function(e,d,m){var f=e("../internals/global");d.exports=f.Promise},{"../internals/global":274}],326:[function(e,d,m){var f=e("../internals/an-object"),c=e("../internals/is-object"),u=e("../internals/new-promise-capability");d.exports=function(s,t){if(f(s),c(t)&&t.constructor===s)return t;var n=u.f(s),r=n.resolve;return r(t),n.promise}},{"../internals/an-object":227,"../internals/is-object":289,"../internals/new-promise-capability":303}],327:[function(e,d,m){var f=e("../internals/promise-native-constructor"),c=e("../internals/check-correctness-of-iteration"),u=e("../internals/promise-constructor-detection").CONSTRUCTOR;d.exports=u||!c(function(s){f.all(s).then(void 0,function(){})})},{"../internals/check-correctness-of-iteration":234,"../internals/promise-constructor-detection":324,"../internals/promise-native-constructor":325}],328:[function(e,d,m){var f=function(){this.head=null,this.tail=null};f.prototype={add:function(c){var u={item:c,next:null},s=this.tail;s?s.next=u:this.head=u,this.tail=u},get:function(){var c=this.head;if(c){var u=this.head=c.next;return u===null&&(this.tail=null),c.item}}},d.exports=f},{}],329:[function(e,d,m){var f=e("../internals/is-null-or-undefined"),c=TypeError;d.exports=function(u){if(f(u))throw new c("Can't call method on "+u);return u}},{"../internals/is-null-or-undefined":288}],330:[function(e,d,m){var f=e("../internals/get-built-in"),c=e("../internals/define-built-in-accessor"),u=e("../internals/well-known-symbol"),s=e("../internals/descriptors"),t=u("species");d.exports=function(n){var r=f(n);s&&r&&!r[t]&&c(r,t,{configurable:!0,get:function(){return this}})}},{"../internals/define-built-in-accessor":244,"../internals/descriptors":247,"../internals/get-built-in":269,"../internals/well-known-symbol":357}],331:[function(e,d,m){var f=e("../internals/object-define-property").f,c=e("../internals/has-own-property"),u=e("../internals/well-known-symbol"),s=u("toStringTag");d.exports=function(t,n,r){t&&!r&&(t=t.prototype),t&&!c(t,s)&&f(t,s,{configurable:!0,value:n})}},{"../internals/has-own-property":275,"../internals/object-define-property":308,"../internals/well-known-symbol":357}],332:[function(e,d,m){var f=e("../internals/shared"),c=e("../internals/uid"),u=f("keys");d.exports=function(s){return u[s]||(u[s]=c(s))}},{"../internals/shared":334,"../internals/uid":350}],333:[function(e,d,m){var f=e("../internals/global"),c=e("../internals/define-global-property"),u="__core-js_shared__",s=f[u]||c(u,{});d.exports=s},{"../internals/define-global-property":246,"../internals/global":274}],334:[function(e,d,m){var f=e("../internals/is-pure"),c=e("../internals/shared-store");(d.exports=function(u,s){return c[u]||(c[u]=s!==void 0?s:{})})("versions",[]).push({version:"3.33.0",mode:f?"pure":"global",copyright:"© 2014-2023 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.33.0/LICENSE",source:"https://github.com/zloirock/core-js"})},{"../internals/is-pure":290,"../internals/shared-store":333}],335:[function(e,d,m){var f=e("../internals/an-object"),c=e("../internals/a-constructor"),u=e("../internals/is-null-or-undefined"),s=e("../internals/well-known-symbol"),t=s("species");d.exports=function(n,r){var i=f(n).constructor,o;return i===void 0||u(o=f(i)[t])?r:c(o)}},{"../internals/a-constructor":223,"../internals/an-object":227,"../internals/is-null-or-undefined":288,"../internals/well-known-symbol":357}],336:[function(e,d,m){var f=e("../internals/engine-v8-version"),c=e("../internals/fails"),u=e("../internals/global"),s=u.String;d.exports=!!Object.getOwnPropertySymbols&&!c(function(){var t=Symbol("symbol detection");return!s(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&f&&f<41})},{"../internals/engine-v8-version":257,"../internals/fails":260,"../internals/global":274}],337:[function(e,d,m){var f=e("../internals/function-call"),c=e("../internals/get-built-in"),u=e("../internals/well-known-symbol"),s=e("../internals/define-built-in");d.exports=function(){var t=c("Symbol"),n=t&&t.prototype,r=n&&n.valueOf,i=u("toPrimitive");n&&!n[i]&&s(n,i,function(o){return f(r,this)},{arity:1})}},{"../internals/define-built-in":245,"../internals/function-call":264,"../internals/get-built-in":269,"../internals/well-known-symbol":357}],338:[function(e,d,m){var f=e("../internals/symbol-constructor-detection");d.exports=f&&!!Symbol.for&&!!Symbol.keyFor},{"../internals/symbol-constructor-detection":336}],339:[function(e,d,m){var f=e("../internals/global"),c=e("../internals/function-apply"),u=e("../internals/function-bind-context"),s=e("../internals/is-callable"),t=e("../internals/has-own-property"),n=e("../internals/fails"),r=e("../internals/html"),i=e("../internals/array-slice"),o=e("../internals/document-create-element"),l=e("../internals/validate-arguments-length"),a=e("../internals/engine-is-ios"),g=e("../internals/engine-is-node"),v=f.setImmediate,h=f.clearImmediate,w=f.process,y=f.Dispatch,S=f.Function,E=f.MessageChannel,I=f.String,F=0,B={},j="onreadystatechange",X,G,V,J;n(function(){X=f.location});var H=function(A){if(t(B,A)){var P=B[A];delete B[A],P()}},M=function(A){return function(){H(A)}},T=function(A){H(A.data)},_=function(A){f.postMessage(I(A),X.protocol+"//"+X.host)};(!v||!h)&&(v=function(P){l(arguments.length,1);var L=s(P)?P:S(P),$=i(arguments,1);return B[++F]=function(){c(L,void 0,$)},G(F),F},h=function(P){delete B[P]},g?G=function(A){w.nextTick(M(A))}:y&&y.now?G=function(A){y.now(M(A))}:E&&!a?(V=new E,J=V.port2,V.port1.onmessage=T,G=u(J.postMessage,J)):f.addEventListener&&s(f.postMessage)&&!f.importScripts&&X&&X.protocol!=="file:"&&!n(_)?(G=_,f.addEventListener("message",T,!1)):j in o("script")?G=function(A){r.appendChild(o("script"))[j]=function(){r.removeChild(this),H(A)}}:G=function(A){setTimeout(M(A),0)}),d.exports={set:v,clear:h}},{"../internals/array-slice":231,"../internals/document-create-element":249,"../internals/engine-is-ios":253,"../internals/engine-is-node":254,"../internals/fails":260,"../internals/function-apply":261,"../internals/function-bind-context":262,"../internals/global":274,"../internals/has-own-property":275,"../internals/html":278,"../internals/is-callable":285,"../internals/validate-arguments-length":353}],340:[function(e,d,m){var f=e("../internals/to-integer-or-infinity"),c=Math.max,u=Math.min;d.exports=function(s,t){var n=f(s);return n<0?c(n+t,0):u(n,t)}},{"../internals/to-integer-or-infinity":342}],341:[function(e,d,m){var f=e("../internals/indexed-object"),c=e("../internals/require-object-coercible");d.exports=function(u){return f(c(u))}},{"../internals/indexed-object":280,"../internals/require-object-coercible":329}],342:[function(e,d,m){var f=e("../internals/math-trunc");d.exports=function(c){var u=+c;return u!==u||u===0?0:f(u)}},{"../internals/math-trunc":301}],343:[function(e,d,m){var f=e("../internals/to-integer-or-infinity"),c=Math.min;d.exports=function(u){return u>0?c(f(u),9007199254740991):0}},{"../internals/to-integer-or-infinity":342}],344:[function(e,d,m){var f=e("../internals/require-object-coercible"),c=Object;d.exports=function(u){return c(f(u))}},{"../internals/require-object-coercible":329}],345:[function(e,d,m){var f=e("../internals/function-call"),c=e("../internals/is-object"),u=e("../internals/is-symbol"),s=e("../internals/get-method"),t=e("../internals/ordinary-to-primitive"),n=e("../internals/well-known-symbol"),r=TypeError,i=n("toPrimitive");d.exports=function(o,l){if(!c(o)||u(o))return o;var a=s(o,i),g;if(a){if(l===void 0&&(l="default"),g=f(a,o,l),!c(g)||u(g))return g;throw new r("Can't convert object to primitive value")}return l===void 0&&(l="number"),t(o,l)}},{"../internals/function-call":264,"../internals/get-method":273,"../internals/is-object":289,"../internals/is-symbol":292,"../internals/ordinary-to-primitive":320,"../internals/well-known-symbol":357}],346:[function(e,d,m){var f=e("../internals/to-primitive"),c=e("../internals/is-symbol");d.exports=function(u){var s=f(u,"string");return c(s)?s:s+""}},{"../internals/is-symbol":292,"../internals/to-primitive":345}],347:[function(e,d,m){var f=e("../internals/well-known-symbol"),c=f("toStringTag"),u={};u[c]="z",d.exports=String(u)==="[object z]"},{"../internals/well-known-symbol":357}],348:[function(e,d,m){var f=e("../internals/classof"),c=String;d.exports=function(u){if(f(u)==="Symbol")throw new TypeError("Cannot convert a Symbol value to a string");return c(u)}},{"../internals/classof":236}],349:[function(e,d,m){var f=String;d.exports=function(c){try{return f(c)}catch{return"Object"}}},{}],350:[function(e,d,m){var f=e("../internals/function-uncurry-this"),c=0,u=Math.random(),s=f(1 .toString);d.exports=function(t){return"Symbol("+(t===void 0?"":t)+")_"+s(++c+u,36)}},{"../internals/function-uncurry-this":268}],351:[function(e,d,m){var f=e("../internals/symbol-constructor-detection");d.exports=f&&!Symbol.sham&&typeof Symbol.iterator=="symbol"},{"../internals/symbol-constructor-detection":336}],352:[function(e,d,m){var f=e("../internals/descriptors"),c=e("../internals/fails");d.exports=f&&c(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!==42})},{"../internals/descriptors":247,"../internals/fails":260}],353:[function(e,d,m){var f=TypeError;d.exports=function(c,u){if(c1?arguments[1]:void 0)}}),u(s)},{"../internals/add-to-unscopables":225,"../internals/array-iteration":229,"../internals/export":259}],359:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/array-iteration").find,u=e("../internals/add-to-unscopables"),s="find",t=!0;s in[]&&Array(1)[s](function(){t=!1}),f({target:"Array",proto:!0,forced:t},{find:function(r){return c(this,r,arguments.length>1?arguments[1]:void 0)}}),u(s)},{"../internals/add-to-unscopables":225,"../internals/array-iteration":229,"../internals/export":259}],360:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/array-includes").includes,u=e("../internals/fails"),s=e("../internals/add-to-unscopables"),t=u(function(){return!Array(1).includes()});f({target:"Array",proto:!0,forced:t},{includes:function(r){return c(this,r,arguments.length>1?arguments[1]:void 0)}}),s("includes")},{"../internals/add-to-unscopables":225,"../internals/array-includes":228,"../internals/export":259,"../internals/fails":260}],361:[function(e,d,m){var f=e("../internals/to-indexed-object"),c=e("../internals/add-to-unscopables"),u=e("../internals/iterators"),s=e("../internals/internal-state"),t=e("../internals/object-define-property").f,n=e("../internals/iterator-define"),r=e("../internals/create-iter-result-object"),i=e("../internals/is-pure"),o=e("../internals/descriptors"),l="Array Iterator",a=s.set,g=s.getterFor(l);d.exports=n(Array,"Array",function(h,w){a(this,{type:l,target:f(h),index:0,kind:w})},function(){var h=g(this),w=h.target,y=h.kind,S=h.index++;if(!w||S>=w.length)return h.target=void 0,r(void 0,!0);switch(y){case"keys":return r(S,!1);case"values":return r(w[S],!1)}return r([S,w[S]],!1)},"values");var v=u.Arguments=u.Array;if(c("keys"),c("values"),c("entries"),!i&&o&&v.name!=="values")try{t(v,"name",{value:"values"})}catch{}},{"../internals/add-to-unscopables":225,"../internals/create-iter-result-object":240,"../internals/descriptors":247,"../internals/internal-state":282,"../internals/is-pure":290,"../internals/iterator-define":296,"../internals/iterators":298,"../internals/object-define-property":308,"../internals/to-indexed-object":341}],362:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/get-built-in"),u=e("../internals/function-apply"),s=e("../internals/function-call"),t=e("../internals/function-uncurry-this"),n=e("../internals/fails"),r=e("../internals/is-callable"),i=e("../internals/is-symbol"),o=e("../internals/array-slice"),l=e("../internals/get-json-replacer-function"),a=e("../internals/symbol-constructor-detection"),g=String,v=c("JSON","stringify"),h=t(/./.exec),w=t("".charAt),y=t("".charCodeAt),S=t("".replace),E=t(1 .toString),I=/[\uD800-\uDFFF]/g,F=/^[\uD800-\uDBFF]$/,B=/^[\uDC00-\uDFFF]$/,j=!a||n(function(){var J=c("Symbol")("stringify detection");return v([J])!=="[null]"||v({a:J})!=="{}"||v(Object(J))!=="{}"}),X=n(function(){return v("\uDF06\uD834")!=='"\\udf06\\ud834"'||v("\uDEAD")!=='"\\udead"'}),G=function(J,H){var M=o(arguments),T=l(H);if(!(!r(T)&&(J===void 0||i(J))))return M[1]=function(_,A){if(r(T)&&(A=s(T,this,g(_),A)),!i(A))return A},u(v,null,M)},V=function(J,H,M){var T=w(M,H-1),_=w(M,H+1);return h(F,J)&&!h(B,_)||h(B,J)&&!h(F,T)?"\\u"+E(y(J,0),16):J};v&&f({target:"JSON",stat:!0,arity:3,forced:j||X},{stringify:function(H,M,T){var _=o(arguments),A=u(j?G:v,null,_);return X&&typeof A=="string"?S(A,I,V):A}})},{"../internals/array-slice":231,"../internals/export":259,"../internals/fails":260,"../internals/function-apply":261,"../internals/function-call":264,"../internals/function-uncurry-this":268,"../internals/get-built-in":269,"../internals/get-json-replacer-function":272,"../internals/is-callable":285,"../internals/is-symbol":292,"../internals/symbol-constructor-detection":336}],363:[function(e,d,m){var f=e("../internals/export");f({target:"Number",stat:!0},{isNaN:function(u){return u!==u}})},{"../internals/export":259}],364:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/object-assign");f({target:"Object",stat:!0,arity:2,forced:Object.assign!==c},{assign:c})},{"../internals/export":259,"../internals/object-assign":305}],365:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/symbol-constructor-detection"),u=e("../internals/fails"),s=e("../internals/object-get-own-property-symbols"),t=e("../internals/to-object"),n=!c||u(function(){s.f(1)});f({target:"Object",stat:!0,forced:n},{getOwnPropertySymbols:function(i){var o=s.f;return o?o(t(i)):[]}})},{"../internals/export":259,"../internals/fails":260,"../internals/object-get-own-property-symbols":312,"../internals/symbol-constructor-detection":336,"../internals/to-object":344}],366:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/to-object"),u=e("../internals/object-keys"),s=e("../internals/fails"),t=s(function(){u(1)});f({target:"Object",stat:!0,forced:t},{keys:function(r){return u(c(r))}})},{"../internals/export":259,"../internals/fails":260,"../internals/object-keys":316,"../internals/to-object":344}],367:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/object-to-array").values;f({target:"Object",stat:!0},{values:function(s){return c(s)}})},{"../internals/export":259,"../internals/object-to-array":319}],368:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/function-call"),u=e("../internals/a-callable"),s=e("../internals/new-promise-capability"),t=e("../internals/perform"),n=e("../internals/iterate"),r=e("../internals/promise-statics-incorrect-iteration");f({target:"Promise",stat:!0,forced:r},{all:function(o){var l=this,a=s.f(l),g=a.resolve,v=a.reject,h=t(function(){var w=u(l.resolve),y=[],S=0,E=1;n(o,function(I){var F=S++,B=!1;E++,c(w,l,I).then(function(j){B||(B=!0,y[F]=j,--E||g(y))},v)}),--E||g(y)});return h.error&&v(h.value),a.promise}})},{"../internals/a-callable":222,"../internals/export":259,"../internals/function-call":264,"../internals/iterate":293,"../internals/new-promise-capability":303,"../internals/perform":323,"../internals/promise-statics-incorrect-iteration":327}],369:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/is-pure"),u=e("../internals/promise-constructor-detection").CONSTRUCTOR,s=e("../internals/promise-native-constructor"),t=e("../internals/get-built-in"),n=e("../internals/is-callable"),r=e("../internals/define-built-in"),i=s&&s.prototype;if(f({target:"Promise",proto:!0,forced:u,real:!0},{catch:function(l){return this.then(void 0,l)}}),!c&&n(s)){var o=t("Promise").prototype.catch;i.catch!==o&&r(i,"catch",o,{unsafe:!0})}},{"../internals/define-built-in":245,"../internals/export":259,"../internals/get-built-in":269,"../internals/is-callable":285,"../internals/is-pure":290,"../internals/promise-constructor-detection":324,"../internals/promise-native-constructor":325}],370:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/is-pure"),u=e("../internals/engine-is-node"),s=e("../internals/global"),t=e("../internals/function-call"),n=e("../internals/define-built-in"),r=e("../internals/object-set-prototype-of"),i=e("../internals/set-to-string-tag"),o=e("../internals/set-species"),l=e("../internals/a-callable"),a=e("../internals/is-callable"),g=e("../internals/is-object"),v=e("../internals/an-instance"),h=e("../internals/species-constructor"),w=e("../internals/task").set,y=e("../internals/microtask"),S=e("../internals/host-report-errors"),E=e("../internals/perform"),I=e("../internals/queue"),F=e("../internals/internal-state"),B=e("../internals/promise-native-constructor"),j=e("../internals/promise-constructor-detection"),X=e("../internals/new-promise-capability"),G="Promise",V=j.CONSTRUCTOR,J=j.REJECTION_EVENT,H=j.SUBCLASSING,M=F.getterFor(G),T=F.set,_=B&&B.prototype,A=B,P=_,L=s.TypeError,$=s.document,R=s.process,k=X.f,C=k,O=!!($&&$.createEvent&&s.dispatchEvent),W="unhandledrejection",ne="rejectionhandled",he=0,ue=1,Ae=2,pe=1,te=2,Z,q,de,ke,oe=function(ee){var se;return g(ee)&&a(se=ee.then)?se:!1},ie=function(ee,se){var me=se.value,Ee=se.state===ue,Ie=Ee?ee.ok:ee.fail,Ce=ee.resolve,Fe=ee.reject,ze=ee.domain,je,ge,Me;try{Ie?(Ee||(se.rejection===te&&we(se),se.rejection=pe),Ie===!0?je=me:(ze&&ze.enter(),je=Ie(me),ze&&(ze.exit(),Me=!0)),je===ee.promise?Fe(new L("Promise-chain cycle")):(ge=oe(je))?t(ge,je,Ce,Fe):Ce(je)):Fe(me)}catch(Be){ze&&!Me&&ze.exit(),Fe(Be)}},Q=function(ee,se){ee.notified||(ee.notified=!0,y(function(){for(var me=ee.reactions,Ee;Ee=me.get();)ie(Ee,ee);ee.notified=!1,se&&!ee.rejection&&Y(ee)}))},z=function(ee,se,me){var Ee,Ie;O?(Ee=$.createEvent("Event"),Ee.promise=se,Ee.reason=me,Ee.initEvent(ee,!1,!0),s.dispatchEvent(Ee)):Ee={promise:se,reason:me},!J&&(Ie=s["on"+ee])?Ie(Ee):ee===W&&S("Unhandled promise rejection",me)},Y=function(ee){t(w,s,function(){var se=ee.facade,me=ee.value,Ee=fe(ee),Ie;if(Ee&&(Ie=E(function(){u?R.emit("unhandledRejection",me,se):z(W,se,me)}),ee.rejection=u||fe(ee)?te:pe,Ie.error))throw Ie.value})},fe=function(ee){return ee.rejection!==pe&&!ee.parent},we=function(ee){t(w,s,function(){var se=ee.facade;u?R.emit("rejectionHandled",se):z(ne,se,ee.value)})},U=function(ee,se,me){return function(Ee){ee(se,Ee,me)}},ve=function(ee,se,me){ee.done||(ee.done=!0,me&&(ee=me),ee.value=se,ee.state=Ae,Q(ee,!0))},Se=function(ee,se,me){if(!ee.done){ee.done=!0,me&&(ee=me);try{if(ee.facade===se)throw new L("Promise can't be resolved itself");var Ee=oe(se);Ee?y(function(){var Ie={done:!1};try{t(Ee,se,U(Se,Ie,ee),U(ve,Ie,ee))}catch(Ce){ve(Ie,Ce,ee)}}):(ee.value=se,ee.state=ue,Q(ee,!1))}catch(Ie){ve({done:!1},Ie,ee)}}};if(V&&(A=function(se){v(this,P),l(se),t(Z,this);var me=M(this);try{se(U(Se,me),U(ve,me))}catch(Ee){ve(me,Ee)}},P=A.prototype,Z=function(se){T(this,{type:G,done:!1,notified:!1,parent:!1,reactions:new I,rejection:!1,state:he,value:void 0})},Z.prototype=n(P,"then",function(se,me){var Ee=M(this),Ie=k(h(this,A));return Ee.parent=!0,Ie.ok=a(se)?se:!0,Ie.fail=a(me)&&me,Ie.domain=u?R.domain:void 0,Ee.state===he?Ee.reactions.add(Ie):y(function(){ie(Ie,Ee)}),Ie.promise}),q=function(){var ee=new Z,se=M(ee);this.promise=ee,this.resolve=U(Se,se),this.reject=U(ve,se)},X.f=k=function(ee){return ee===A||ee===de?new q(ee):C(ee)},!c&&a(B)&&_!==Object.prototype)){ke=_.then,H||n(_,"then",function(se,me){var Ee=this;return new A(function(Ie,Ce){t(ke,Ee,Ie,Ce)}).then(se,me)},{unsafe:!0});try{delete _.constructor}catch{}r&&r(_,P)}f({global:!0,constructor:!0,wrap:!0,forced:V},{Promise:A}),i(A,G,!1,!0),o(G)},{"../internals/a-callable":222,"../internals/an-instance":226,"../internals/define-built-in":245,"../internals/engine-is-node":254,"../internals/export":259,"../internals/function-call":264,"../internals/global":274,"../internals/host-report-errors":277,"../internals/internal-state":282,"../internals/is-callable":285,"../internals/is-object":289,"../internals/is-pure":290,"../internals/microtask":302,"../internals/new-promise-capability":303,"../internals/object-set-prototype-of":318,"../internals/perform":323,"../internals/promise-constructor-detection":324,"../internals/promise-native-constructor":325,"../internals/queue":328,"../internals/set-species":330,"../internals/set-to-string-tag":331,"../internals/species-constructor":335,"../internals/task":339}],371:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/is-pure"),u=e("../internals/promise-native-constructor"),s=e("../internals/fails"),t=e("../internals/get-built-in"),n=e("../internals/is-callable"),r=e("../internals/species-constructor"),i=e("../internals/promise-resolve"),o=e("../internals/define-built-in"),l=u&&u.prototype,a=!!u&&s(function(){l.finally.call({then:function(){}},function(){})});if(f({target:"Promise",proto:!0,real:!0,forced:a},{finally:function(v){var h=r(this,t("Promise")),w=n(v);return this.then(w?function(y){return i(h,v()).then(function(){return y})}:v,w?function(y){return i(h,v()).then(function(){throw y})}:v)}}),!c&&n(u)){var g=t("Promise").prototype.finally;l.finally!==g&&o(l,"finally",g,{unsafe:!0})}},{"../internals/define-built-in":245,"../internals/export":259,"../internals/fails":260,"../internals/get-built-in":269,"../internals/is-callable":285,"../internals/is-pure":290,"../internals/promise-native-constructor":325,"../internals/promise-resolve":326,"../internals/species-constructor":335}],372:[function(e,d,m){e("../modules/es.promise.constructor"),e("../modules/es.promise.all"),e("../modules/es.promise.catch"),e("../modules/es.promise.race"),e("../modules/es.promise.reject"),e("../modules/es.promise.resolve")},{"../modules/es.promise.all":368,"../modules/es.promise.catch":369,"../modules/es.promise.constructor":370,"../modules/es.promise.race":373,"../modules/es.promise.reject":374,"../modules/es.promise.resolve":375}],373:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/function-call"),u=e("../internals/a-callable"),s=e("../internals/new-promise-capability"),t=e("../internals/perform"),n=e("../internals/iterate"),r=e("../internals/promise-statics-incorrect-iteration");f({target:"Promise",stat:!0,forced:r},{race:function(o){var l=this,a=s.f(l),g=a.reject,v=t(function(){var h=u(l.resolve);n(o,function(w){c(h,l,w).then(a.resolve,g)})});return v.error&&g(v.value),a.promise}})},{"../internals/a-callable":222,"../internals/export":259,"../internals/function-call":264,"../internals/iterate":293,"../internals/new-promise-capability":303,"../internals/perform":323,"../internals/promise-statics-incorrect-iteration":327}],374:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/function-call"),u=e("../internals/new-promise-capability"),s=e("../internals/promise-constructor-detection").CONSTRUCTOR;f({target:"Promise",stat:!0,forced:s},{reject:function(n){var r=u.f(this);return c(r.reject,void 0,n),r.promise}})},{"../internals/export":259,"../internals/function-call":264,"../internals/new-promise-capability":303,"../internals/promise-constructor-detection":324}],375:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/get-built-in"),u=e("../internals/is-pure"),s=e("../internals/promise-native-constructor"),t=e("../internals/promise-constructor-detection").CONSTRUCTOR,n=e("../internals/promise-resolve"),r=c("Promise"),i=u&&!t;f({target:"Promise",stat:!0,forced:u||t},{resolve:function(l){return n(i&&this===r?s:this,l)}})},{"../internals/export":259,"../internals/get-built-in":269,"../internals/is-pure":290,"../internals/promise-constructor-detection":324,"../internals/promise-native-constructor":325,"../internals/promise-resolve":326}],376:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/function-uncurry-this"),u=e("../internals/to-absolute-index"),s=RangeError,t=String.fromCharCode,n=String.fromCodePoint,r=c([].join),i=!!n&&n.length!==1;f({target:"String",stat:!0,arity:1,forced:i},{fromCodePoint:function(l){for(var a=[],g=arguments.length,v=0,h;g>v;){if(h=+arguments[v++],u(h,1114111)!==h)throw new s(h+" is not a valid code point");a[v]=h<65536?t(h):t(((h-=65536)>>10)+55296,h%1024+56320)}return r(a,"")}})},{"../internals/export":259,"../internals/function-uncurry-this":268,"../internals/to-absolute-index":340}],377:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/function-uncurry-this"),u=e("../internals/not-a-regexp"),s=e("../internals/require-object-coercible"),t=e("../internals/to-string"),n=e("../internals/correct-is-regexp-logic"),r=c("".indexOf);f({target:"String",proto:!0,forced:!n("includes")},{includes:function(o){return!!~r(t(s(this)),t(u(o)),arguments.length>1?arguments[1]:void 0)}})},{"../internals/correct-is-regexp-logic":238,"../internals/export":259,"../internals/function-uncurry-this":268,"../internals/not-a-regexp":304,"../internals/require-object-coercible":329,"../internals/to-string":348}],378:[function(e,d,m){var f=e("../internals/well-known-symbol-define");f("asyncIterator")},{"../internals/well-known-symbol-define":355}],379:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/global"),u=e("../internals/function-call"),s=e("../internals/function-uncurry-this"),t=e("../internals/is-pure"),n=e("../internals/descriptors"),r=e("../internals/symbol-constructor-detection"),i=e("../internals/fails"),o=e("../internals/has-own-property"),l=e("../internals/object-is-prototype-of"),a=e("../internals/an-object"),g=e("../internals/to-indexed-object"),v=e("../internals/to-property-key"),h=e("../internals/to-string"),w=e("../internals/create-property-descriptor"),y=e("../internals/object-create"),S=e("../internals/object-keys"),E=e("../internals/object-get-own-property-names"),I=e("../internals/object-get-own-property-names-external"),F=e("../internals/object-get-own-property-symbols"),B=e("../internals/object-get-own-property-descriptor"),j=e("../internals/object-define-property"),X=e("../internals/object-define-properties"),G=e("../internals/object-property-is-enumerable"),V=e("../internals/define-built-in"),J=e("../internals/define-built-in-accessor"),H=e("../internals/shared"),M=e("../internals/shared-key"),T=e("../internals/hidden-keys"),_=e("../internals/uid"),A=e("../internals/well-known-symbol"),P=e("../internals/well-known-symbol-wrapped"),L=e("../internals/well-known-symbol-define"),$=e("../internals/symbol-define-to-primitive"),R=e("../internals/set-to-string-tag"),k=e("../internals/internal-state"),C=e("../internals/array-iteration").forEach,O=M("hidden"),W="Symbol",ne="prototype",he=k.set,ue=k.getterFor(W),Ae=Object[ne],pe=c.Symbol,te=pe&&pe[ne],Z=c.RangeError,q=c.TypeError,de=c.QObject,ke=B.f,oe=j.f,ie=I.f,Q=G.f,z=s([].push),Y=H("symbols"),fe=H("op-symbols"),we=H("wks"),U=!de||!de[ne]||!de[ne].findChild,ve=function(je,ge,Me){var Be=ke(Ae,ge);Be&&delete Ae[ge],oe(je,ge,Me),Be&&je!==Ae&&oe(Ae,ge,Be)},Se=n&&i(function(){return y(oe({},"a",{get:function(){return oe(this,"a",{value:7}).a}})).a!==7})?ve:oe,ee=function(je,ge){var Me=Y[je]=y(te);return he(Me,{type:W,tag:je,description:ge}),n||(Me.description=ge),Me},se=function(ge,Me,Be){ge===Ae&&se(fe,Me,Be),a(ge);var Xe=v(Me);return a(Be),o(Y,Xe)?(Be.enumerable?(o(ge,O)&&ge[O][Xe]&&(ge[O][Xe]=!1),Be=y(Be,{enumerable:w(0,!1)})):(o(ge,O)||oe(ge,O,w(1,{})),ge[O][Xe]=!0),Se(ge,Xe,Be)):oe(ge,Xe,Be)},me=function(ge,Me){a(ge);var Be=g(Me),Xe=S(Be).concat(ze(Be));return C(Xe,function(ot){(!n||u(Ie,Be,ot))&&se(ge,ot,Be[ot])}),ge},Ee=function(ge,Me){return Me===void 0?y(ge):me(y(ge),Me)},Ie=function(ge){var Me=v(ge),Be=u(Q,this,Me);return this===Ae&&o(Y,Me)&&!o(fe,Me)?!1:Be||!o(this,Me)||!o(Y,Me)||o(this,O)&&this[O][Me]?Be:!0},Ce=function(ge,Me){var Be=g(ge),Xe=v(Me);if(!(Be===Ae&&o(Y,Xe)&&!o(fe,Xe))){var ot=ke(Be,Xe);return ot&&o(Y,Xe)&&!(o(Be,O)&&Be[O][Xe])&&(ot.enumerable=!0),ot}},Fe=function(ge){var Me=ie(g(ge)),Be=[];return C(Me,function(Xe){!o(Y,Xe)&&!o(T,Xe)&&z(Be,Xe)}),Be},ze=function(je){var ge=je===Ae,Me=ie(ge?fe:g(je)),Be=[];return C(Me,function(Xe){o(Y,Xe)&&(!ge||o(Ae,Xe))&&z(Be,Y[Xe])}),Be};r||(pe=function(){if(l(te,this))throw new q("Symbol is not a constructor");var ge=!arguments.length||arguments[0]===void 0?void 0:h(arguments[0]),Me=_(ge),Be=function(Xe){this===Ae&&u(Be,fe,Xe),o(this,O)&&o(this[O],Me)&&(this[O][Me]=!1);var ot=w(1,Xe);try{Se(this,Me,ot)}catch(ct){if(!(ct instanceof Z))throw ct;ve(this,Me,ot)}};return n&&U&&Se(Ae,Me,{configurable:!0,set:Be}),ee(Me,ge)},te=pe[ne],V(te,"toString",function(){return ue(this).tag}),V(pe,"withoutSetter",function(je){return ee(_(je),je)}),G.f=Ie,j.f=se,X.f=me,B.f=Ce,E.f=I.f=Fe,F.f=ze,P.f=function(je){return ee(A(je),je)},n&&(J(te,"description",{configurable:!0,get:function(){return ue(this).description}}),t||V(Ae,"propertyIsEnumerable",Ie,{unsafe:!0}))),f({global:!0,constructor:!0,wrap:!0,forced:!r,sham:!r},{Symbol:pe}),C(S(we),function(je){L(je)}),f({target:W,stat:!0,forced:!r},{useSetter:function(){U=!0},useSimple:function(){U=!1}}),f({target:"Object",stat:!0,forced:!r,sham:!n},{create:Ee,defineProperty:se,defineProperties:me,getOwnPropertyDescriptor:Ce}),f({target:"Object",stat:!0,forced:!r},{getOwnPropertyNames:Fe}),$(),R(pe,W),T[O]=!0},{"../internals/an-object":227,"../internals/array-iteration":229,"../internals/create-property-descriptor":242,"../internals/define-built-in":245,"../internals/define-built-in-accessor":244,"../internals/descriptors":247,"../internals/export":259,"../internals/fails":260,"../internals/function-call":264,"../internals/function-uncurry-this":268,"../internals/global":274,"../internals/has-own-property":275,"../internals/hidden-keys":276,"../internals/internal-state":282,"../internals/is-pure":290,"../internals/object-create":306,"../internals/object-define-properties":307,"../internals/object-define-property":308,"../internals/object-get-own-property-descriptor":309,"../internals/object-get-own-property-names":311,"../internals/object-get-own-property-names-external":310,"../internals/object-get-own-property-symbols":312,"../internals/object-is-prototype-of":314,"../internals/object-keys":316,"../internals/object-property-is-enumerable":317,"../internals/set-to-string-tag":331,"../internals/shared":334,"../internals/shared-key":332,"../internals/symbol-constructor-detection":336,"../internals/symbol-define-to-primitive":337,"../internals/to-indexed-object":341,"../internals/to-property-key":346,"../internals/to-string":348,"../internals/uid":350,"../internals/well-known-symbol":357,"../internals/well-known-symbol-define":355,"../internals/well-known-symbol-wrapped":356}],380:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/get-built-in"),u=e("../internals/has-own-property"),s=e("../internals/to-string"),t=e("../internals/shared"),n=e("../internals/symbol-registry-detection"),r=t("string-to-symbol-registry"),i=t("symbol-to-string-registry");f({target:"Symbol",stat:!0,forced:!n},{for:function(o){var l=s(o);if(u(r,l))return r[l];var a=c("Symbol")(l);return r[l]=a,i[a]=l,a}})},{"../internals/export":259,"../internals/get-built-in":269,"../internals/has-own-property":275,"../internals/shared":334,"../internals/symbol-registry-detection":338,"../internals/to-string":348}],381:[function(e,d,m){e("../modules/es.symbol.constructor"),e("../modules/es.symbol.for"),e("../modules/es.symbol.key-for"),e("../modules/es.json.stringify"),e("../modules/es.object.get-own-property-symbols")},{"../modules/es.json.stringify":362,"../modules/es.object.get-own-property-symbols":365,"../modules/es.symbol.constructor":379,"../modules/es.symbol.for":380,"../modules/es.symbol.key-for":382}],382:[function(e,d,m){var f=e("../internals/export"),c=e("../internals/has-own-property"),u=e("../internals/is-symbol"),s=e("../internals/try-to-string"),t=e("../internals/shared"),n=e("../internals/symbol-registry-detection"),r=t("symbol-to-string-registry");f({target:"Symbol",stat:!0,forced:!n},{keyFor:function(o){if(!u(o))throw new TypeError(s(o)+" is not a symbol");if(c(r,o))return r[o]}})},{"../internals/export":259,"../internals/has-own-property":275,"../internals/is-symbol":292,"../internals/shared":334,"../internals/symbol-registry-detection":338,"../internals/try-to-string":349}],383:[function(e,d,m){function f(y){return Array.isArray?Array.isArray(y):w(y)==="[object Array]"}m.isArray=f;function c(y){return typeof y=="boolean"}m.isBoolean=c;function u(y){return y===null}m.isNull=u;function s(y){return y==null}m.isNullOrUndefined=s;function t(y){return typeof y=="number"}m.isNumber=t;function n(y){return typeof y=="string"}m.isString=n;function r(y){return typeof y=="symbol"}m.isSymbol=r;function i(y){return y===void 0}m.isUndefined=i;function o(y){return w(y)==="[object RegExp]"}m.isRegExp=o;function l(y){return typeof y=="object"&&y!==null}m.isObject=l;function a(y){return w(y)==="[object Date]"}m.isDate=a;function g(y){return w(y)==="[object Error]"||y instanceof Error}m.isError=g;function v(y){return typeof y=="function"}m.isFunction=v;function h(y){return y===null||typeof y=="boolean"||typeof y=="number"||typeof y=="string"||typeof y=="symbol"||typeof y>"u"}m.isPrimitive=h,m.isBuffer=e("buffer").Buffer.isBuffer;function w(y){return Object.prototype.toString.call(y)}},{buffer:220}],384:[function(e,d,m){(function(f){(function(){var c=e("elliptic"),u=e("bn.js");d.exports=function(i){return new t(i)};var s={secp256k1:{name:"secp256k1",byteLength:32},secp224r1:{name:"p224",byteLength:28},prime256v1:{name:"p256",byteLength:32},prime192v1:{name:"p192",byteLength:24},ed25519:{name:"ed25519",byteLength:32},secp384r1:{name:"p384",byteLength:48},secp521r1:{name:"p521",byteLength:66}};s.p224=s.secp224r1,s.p256=s.secp256r1=s.prime256v1,s.p192=s.secp192r1=s.prime192v1,s.p384=s.secp384r1,s.p521=s.secp521r1;function t(r){this.curveType=s[r],this.curveType||(this.curveType={name:r}),this.curve=new c.ec(this.curveType.name),this.keys=void 0}t.prototype.generateKeys=function(r,i){return this.keys=this.curve.genKeyPair(),this.getPublicKey(r,i)},t.prototype.computeSecret=function(r,i,o){i=i||"utf8",f.isBuffer(r)||(r=new f(r,i));var l=this.curve.keyFromPublic(r).getPublic(),a=l.mul(this.keys.getPrivate()).getX();return n(a,o,this.curveType.byteLength)},t.prototype.getPublicKey=function(r,i){var o=this.keys.getPublic(i==="compressed",!0);return i==="hybrid"&&(o[o.length-1]%2?o[0]=7:o[0]=6),n(o,r)},t.prototype.getPrivateKey=function(r){return n(this.keys.getPrivate(),r)},t.prototype.setPublicKey=function(r,i){return i=i||"utf8",f.isBuffer(r)||(r=new f(r,i)),this.keys._importPublic(r),this},t.prototype.setPrivateKey=function(r,i){i=i||"utf8",f.isBuffer(r)||(r=new f(r,i));var o=new u(r);return o=o.toString(16),this.keys=this.curve.genKeyPair(),this.keys._importPrivate(o),this};function n(r,i,o){Array.isArray(r)||(r=r.toArray());var l=new f(r);if(o&&l.lengthg){var v=l==="rmd160"?new n:r(l);a=v.update(a).digest()}else a.lengtht?i=r(i):i.length=_?T:""+Array(_+1-P.length).join(A)+T},I={s:E,z:function(T){var _=-T.utcOffset(),A=Math.abs(_),P=Math.floor(A/60),L=A%60;return(_<=0?"+":"-")+E(P,2,"0")+":"+E(L,2,"0")},m:function T(_,A){if(_.date()1)return T(R[0])}else{var k=_.name;B[k]=_,L=k}return!P&&L&&(F=L),L||!P&&F},V=function(T,_){if(X(T))return T.clone();var A=typeof _=="object"?_:{};return A.date=T,A.args=arguments,new H(A)},J=I;J.l=G,J.i=X,J.w=function(T,_){return V(T,{locale:_.$L,utc:_.$u,x:_.$x,$offset:_.$offset})};var H=function(){function T(A){this.$L=G(A.locale,null,!0),this.parse(A),this.$x=this.$x||A.x||{},this[j]=!0}var _=T.prototype;return _.parse=function(A){this.$d=function(P){var L=P.date,$=P.utc;if(L===null)return new Date(NaN);if(J.u(L))return new Date;if(L instanceof Date)return new Date(L);if(typeof L=="string"&&!/Z$/i.test(L)){var R=L.match(w);if(R){var k=R[2]-1||0,C=(R[7]||"0").substring(0,3);return $?new Date(Date.UTC(R[1],k,R[3]||1,R[4]||0,R[5]||0,R[6]||0,C)):new Date(R[1],k,R[3]||1,R[4]||0,R[5]||0,R[6]||0,C)}}return new Date(L)}(A),this.init()},_.init=function(){var A=this.$d;this.$y=A.getFullYear(),this.$M=A.getMonth(),this.$D=A.getDate(),this.$W=A.getDay(),this.$H=A.getHours(),this.$m=A.getMinutes(),this.$s=A.getSeconds(),this.$ms=A.getMilliseconds()},_.$utils=function(){return J},_.isValid=function(){return this.$d.toString()!==h},_.isSame=function(A,P){var L=V(A);return this.startOf(P)<=L&&L<=this.endOf(P)},_.isAfter=function(A,P){return V(A)68?1900:2e3)},i=function(h){return function(w){this[h]=+w}},o=[/[+-]\d\d:?(\d\d)?|Z/,function(h){(this.zone||(this.zone={})).offset=function(w){if(!w||w==="Z")return 0;var y=w.match(/([+-]|\d\d)/g),S=60*y[1]+(+y[2]||0);return S===0?0:y[0]==="+"?-S:S}(h)}],l=function(h){var w=n[h];return w&&(w.indexOf?w:w.s.concat(w.f))},a=function(h,w){var y,S=n.meridiem;if(S){for(var E=1;E<=24;E+=1)if(h.indexOf(S(E,0,w))>-1){y=E>12;break}}else y=h===(w?"pm":"PM");return y},g={A:[t,function(h){this.afternoon=a(h,!1)}],a:[t,function(h){this.afternoon=a(h,!0)}],S:[/\d/,function(h){this.milliseconds=100*+h}],SS:[u,function(h){this.milliseconds=10*+h}],SSS:[/\d{3}/,function(h){this.milliseconds=+h}],s:[s,i("seconds")],ss:[s,i("seconds")],m:[s,i("minutes")],mm:[s,i("minutes")],H:[s,i("hours")],h:[s,i("hours")],HH:[s,i("hours")],hh:[s,i("hours")],D:[s,i("day")],DD:[u,i("day")],Do:[t,function(h){var w=n.ordinal,y=h.match(/\d+/);if(this.day=y[0],w)for(var S=1;S<=31;S+=1)w(S).replace(/\[|\]/g,"")===h&&(this.day=S)}],M:[s,i("month")],MM:[u,i("month")],MMM:[t,function(h){var w=l("months"),y=(l("monthsShort")||w.map(function(S){return S.slice(0,3)})).indexOf(h)+1;if(y<1)throw new Error;this.month=y%12||y}],MMMM:[t,function(h){var w=l("months").indexOf(h)+1;if(w<1)throw new Error;this.month=w%12||w}],Y:[/[+-]?\d+/,i("year")],YY:[u,function(h){this.year=r(h)}],YYYY:[/\d{4}/,i("year")],Z:o,ZZ:o};function v(h){var w,y;w=h,y=n&&n.formats;for(var S=(h=w.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,function(G,V,J){var H=J&&J.toUpperCase();return V||y[J]||f[J]||y[H].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,function(M,T,_){return T||_.slice(1)})})).match(c),E=S.length,I=0;I-1)return new Date((P==="X"?1e3:1)*A);var $=v(P)(A),R=$.year,k=$.month,C=$.day,O=$.hours,W=$.minutes,ne=$.seconds,he=$.milliseconds,ue=$.zone,Ae=new Date,pe=C||(R||k?1:Ae.getDate()),te=R||Ae.getFullYear(),Z=0;R&&!k||(Z=k>0?k-1:Ae.getMonth());var q=O||0,de=W||0,ke=ne||0,oe=he||0;return ue?new Date(Date.UTC(te,Z,pe,q,de,ke,oe+60*ue.offset*1e3)):L?new Date(Date.UTC(te,Z,pe,q,de,ke,oe)):new Date(te,Z,pe,q,de,ke,oe)}catch{return new Date("")}}(F,X,B),this.init(),H&&H!==!0&&(this.$L=this.locale(H).$L),J&&F!=this.format(X)&&(this.$d=new Date("")),n={}}else if(X instanceof Array)for(var M=X.length,T=1;T<=M;T+=1){j[1]=X[T-1];var _=y.apply(this,j);if(_.isValid()){this.$d=_.$d,this.$L=_.$L,this.init();break}T===M&&(this.$d=new Date(""))}else E.call(this,I)}}})},{}],393:[function(e,d,m){(function(f,c){typeof m=="object"&&typeof d<"u"?d.exports=c():(f=typeof globalThis<"u"?globalThis:f||self).dayjs_plugin_utc=c()})(void 0,function(){var f="minute",c=/[+-]\d\d(?::?\d\d)?/g,u=/([+-]|\d\d)/g;return function(s,t,n){var r=t.prototype;n.utc=function(h){var w={date:h,utc:!0,args:arguments};return new t(w)},r.utc=function(h){var w=n(this.toDate(),{locale:this.$L,utc:!0});return h?w.add(this.utcOffset(),f):w},r.local=function(){return n(this.toDate(),{locale:this.$L,utc:!1})};var i=r.parse;r.parse=function(h){h.utc&&(this.$u=!0),this.$utils().u(h.$offset)||(this.$offset=h.$offset),i.call(this,h)};var o=r.init;r.init=function(){if(this.$u){var h=this.$d;this.$y=h.getUTCFullYear(),this.$M=h.getUTCMonth(),this.$D=h.getUTCDate(),this.$W=h.getUTCDay(),this.$H=h.getUTCHours(),this.$m=h.getUTCMinutes(),this.$s=h.getUTCSeconds(),this.$ms=h.getUTCMilliseconds()}else o.call(this)};var l=r.utcOffset;r.utcOffset=function(h,w){var y=this.$utils().u;if(y(h))return this.$u?0:y(this.$offset)?l.call(this):this.$offset;if(typeof h=="string"&&(h=function(F){F===void 0&&(F="");var B=F.match(c);if(!B)return null;var j=(""+B[0]).match(u)||["-",0,0],X=j[0],G=60*+j[1]+ +j[2];return G===0?0:X==="+"?G:-G}(h),h===null))return this;var S=Math.abs(h)<=16?60*h:h,E=this;if(w)return E.$offset=S,E.$u=h===0,E;if(h!==0){var I=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(E=this.local().add(S+I,f)).$offset=S,E.$x.$localOffset=I}else E=this.utc();return E};var a=r.format;r.format=function(h){var w=h||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return a.call(this,w)},r.valueOf=function(){var h=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*h},r.isUTC=function(){return!!this.$u},r.toISOString=function(){return this.toDate().toISOString()},r.toString=function(){return this.toDate().toUTCString()};var g=r.toDate;r.toDate=function(h){return h==="s"&&this.$offset?n(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():g.call(this)};var v=r.diff;r.diff=function(h,w,y){if(h&&this.$u===h.$u)return v.call(this,h,w,y);var S=this.local(),E=n(h).local();return v.call(S,E,w,y)}}})},{}],394:[function(e,d,m){m.utils=e("./des/utils"),m.Cipher=e("./des/cipher"),m.DES=e("./des/des"),m.CBC=e("./des/cbc"),m.EDE=e("./des/ede")},{"./des/cbc":395,"./des/cipher":396,"./des/des":397,"./des/ede":398,"./des/utils":399}],395:[function(e,d,m){var f=e("minimalistic-assert"),c=e("inherits"),u={};function s(n){f.equal(n.length,8,"Invalid IV length"),this.iv=new Array(8);for(var r=0;r0;r--)t+=this._buffer(s,t),n+=this._flushBuffer(i,n);return t+=this._buffer(s,t),i},c.prototype.final=function(s){var t;s&&(t=this.update(s));var n;return this.type==="encrypt"?n=this._finalEncrypt():n=this._finalDecrypt(),t?t.concat(n):n},c.prototype._pad=function(s,t){if(t===0)return!1;for(;t>>1];a=u.r28shl(a,h),g=u.r28shl(g,h),u.pc2(a,g,o.keys,v)}},n.prototype._update=function(o,l,a,g){var v=this._desState,h=u.readUInt32BE(o,l),w=u.readUInt32BE(o,l+4);u.ip(h,w,v.tmp,0),h=v.tmp[0],w=v.tmp[1],this.type==="encrypt"?this._encrypt(v,h,w,v.tmp,0):this._decrypt(v,h,w,v.tmp,0),h=v.tmp[0],w=v.tmp[1],u.writeUInt32BE(a,h,g),u.writeUInt32BE(a,w,g+4)},n.prototype._pad=function(o,l){if(this.padding===!1)return!1;for(var a=o.length-l,g=l;g>>0,h=B}u.rip(w,h,g,v)},n.prototype._decrypt=function(o,l,a,g,v){for(var h=a,w=l,y=o.keys.length-2;y>=0;y-=2){var S=o.keys[y],E=o.keys[y+1];u.expand(h,o.tmp,0),S^=o.tmp[0],E^=o.tmp[1];var I=u.substitute(S,E),F=u.permute(I),B=h;h=(w^F)>>>0,w=B}u.rip(h,w,g,v)}},{"./cipher":396,"./utils":399,inherits:440,"minimalistic-assert":453}],398:[function(e,d,m){var f=e("minimalistic-assert"),c=e("inherits"),u=e("./cipher"),s=e("./des");function t(r,i){f.equal(i.length,24,"Invalid key length");var o=i.slice(0,8),l=i.slice(8,16),a=i.slice(16,24);r==="encrypt"?this.ciphers=[s.create({type:"encrypt",key:o}),s.create({type:"decrypt",key:l}),s.create({type:"encrypt",key:a})]:this.ciphers=[s.create({type:"decrypt",key:a}),s.create({type:"encrypt",key:l}),s.create({type:"decrypt",key:o})]}function n(r){u.call(this,r);var i=new t(this.type,this.options.key);this._edeState=i}c(n,u),d.exports=n,n.create=function(i){return new n(i)},n.prototype._update=function(i,o,l,a){var g=this._edeState;g.ciphers[0]._update(i,o,l,a),g.ciphers[1]._update(l,a,l,a),g.ciphers[2]._update(l,a,l,a)},n.prototype._pad=s.prototype._pad,n.prototype._unpad=s.prototype._unpad},{"./cipher":396,"./des":397,inherits:440,"minimalistic-assert":453}],399:[function(e,d,m){m.readUInt32BE=function(t,n){var r=t[0+n]<<24|t[1+n]<<16|t[2+n]<<8|t[3+n];return r>>>0},m.writeUInt32BE=function(t,n,r){t[0+r]=n>>>24,t[1+r]=n>>>16&255,t[2+r]=n>>>8&255,t[3+r]=n&255},m.ip=function(t,n,r,i){for(var o=0,l=0,a=6;a>=0;a-=2){for(var g=0;g<=24;g+=8)o<<=1,o|=n>>>g+a&1;for(var g=0;g<=24;g+=8)o<<=1,o|=t>>>g+a&1}for(var a=6;a>=0;a-=2){for(var g=1;g<=25;g+=8)l<<=1,l|=n>>>g+a&1;for(var g=1;g<=25;g+=8)l<<=1,l|=t>>>g+a&1}r[i+0]=o>>>0,r[i+1]=l>>>0},m.rip=function(t,n,r,i){for(var o=0,l=0,a=0;a<4;a++)for(var g=24;g>=0;g-=8)o<<=1,o|=n>>>g+a&1,o<<=1,o|=t>>>g+a&1;for(var a=4;a<8;a++)for(var g=24;g>=0;g-=8)l<<=1,l|=n>>>g+a&1,l<<=1,l|=t>>>g+a&1;r[i+0]=o>>>0,r[i+1]=l>>>0},m.pc1=function(t,n,r,i){for(var o=0,l=0,a=7;a>=5;a--){for(var g=0;g<=24;g+=8)o<<=1,o|=n>>g+a&1;for(var g=0;g<=24;g+=8)o<<=1,o|=t>>g+a&1}for(var g=0;g<=24;g+=8)o<<=1,o|=n>>g+a&1;for(var a=1;a<=3;a++){for(var g=0;g<=24;g+=8)l<<=1,l|=n>>g+a&1;for(var g=0;g<=24;g+=8)l<<=1,l|=t>>g+a&1}for(var g=0;g<=24;g+=8)l<<=1,l|=t>>g+a&1;r[i+0]=o>>>0,r[i+1]=l>>>0},m.r28shl=function(t,n){return t<>>28-n};var f=[14,11,17,4,27,23,25,0,13,22,7,18,5,9,16,24,2,20,12,21,1,8,15,26,15,4,25,19,9,1,26,16,5,11,23,8,12,7,17,0,22,3,10,14,6,20,27,24];m.pc2=function(t,n,r,i){for(var o=0,l=0,a=f.length>>>1,g=0;g>>f[g]&1;for(var g=a;g>>f[g]&1;r[i+0]=o>>>0,r[i+1]=l>>>0},m.expand=function(t,n,r){var i=0,o=0;i=(t&1)<<5|t>>>27;for(var l=23;l>=15;l-=4)i<<=6,i|=t>>>l&63;for(var l=11;l>=3;l-=4)o|=t>>>l&63,o<<=6;o|=(t&31)<<1|t>>>31,n[r+0]=i>>>0,n[r+1]=o>>>0};var c=[14,0,4,15,13,7,1,4,2,14,15,2,11,13,8,1,3,10,10,6,6,12,12,11,5,9,9,5,0,3,7,8,4,15,1,12,14,8,8,2,13,4,6,9,2,1,11,7,15,5,12,11,9,3,7,14,3,10,10,0,5,6,0,13,15,3,1,13,8,4,14,7,6,15,11,2,3,8,4,14,9,12,7,0,2,1,13,10,12,6,0,9,5,11,10,5,0,13,14,8,7,10,11,1,10,3,4,15,13,4,1,2,5,11,8,6,12,7,6,12,9,0,3,5,2,14,15,9,10,13,0,7,9,0,14,9,6,3,3,4,15,6,5,10,1,2,13,8,12,5,7,14,11,12,4,11,2,15,8,1,13,1,6,10,4,13,9,0,8,6,15,9,3,8,0,7,11,4,1,15,2,14,12,3,5,11,10,5,14,2,7,12,7,13,13,8,14,11,3,5,0,6,6,15,9,0,10,3,1,4,2,7,8,2,5,12,11,1,12,10,4,14,15,9,10,3,6,15,9,0,0,6,12,10,11,1,7,13,13,8,15,9,1,4,3,5,14,11,5,12,2,7,8,2,4,14,2,14,12,11,4,2,1,12,7,4,10,7,11,13,6,1,8,5,5,0,3,15,15,10,13,3,0,9,14,8,9,6,4,11,2,8,1,12,11,7,10,1,13,14,7,2,8,13,15,6,9,15,12,0,5,9,6,10,3,4,0,5,14,3,12,10,1,15,10,4,15,2,9,7,2,12,6,9,8,5,0,6,13,1,3,13,4,14,14,0,7,11,5,3,11,8,9,4,14,3,15,2,5,12,2,9,8,5,12,15,3,10,7,11,0,14,4,1,10,7,1,6,13,0,11,8,6,13,4,13,11,0,2,11,14,7,15,4,0,9,8,1,13,10,3,14,12,3,9,5,7,12,5,2,10,15,6,8,1,6,1,6,4,11,11,13,13,8,12,1,3,4,7,10,14,7,10,9,15,5,6,0,8,15,0,14,5,2,9,3,2,12,13,1,2,15,8,13,4,8,6,10,15,3,11,7,1,4,10,12,9,5,3,6,14,11,5,0,0,14,12,9,7,2,7,2,11,1,4,14,1,7,9,4,12,10,14,8,2,13,0,15,6,12,10,9,13,0,15,3,3,5,5,6,8,11];m.substitute=function(t,n){for(var r=0,i=0;i<4;i++){var o=t>>>18-i*6&63,l=c[i*64+o];r<<=4,r|=l}for(var i=0;i<4;i++){var o=n>>>18-i*6&63,l=c[4*64+i*64+o];r<<=4,r|=l}return r>>>0};var u=[16,25,12,11,3,20,4,15,31,17,9,6,27,14,1,22,30,24,8,18,0,5,29,23,13,19,2,26,10,21,28,7];m.permute=function(t){for(var n=0,r=0;r>>u[r]&1;return n>>>0},m.padSplit=function(t,n,r){for(var i=t.toString(2);i.lengthE;)F.ishrn(1);if(F.isEven()&&F.iadd(n),F.testn(1)||F.iadd(r),I.cmp(r)){if(!I.cmp(i))for(;F.mod(o).cmp(l);)F.iadd(g)}else for(;F.mod(u).cmp(a);)F.iadd(g);if(B=F.shrn(1),w(B)&&w(F)&&y(B)&&y(F)&&t.test(B)&&t.test(F))return F}}},{"bn.js":404,"miller-rabin":451,randombytes:475}],403:[function(e,d,m){d.exports={modp1:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff"},modp2:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff"},modp5:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff"},modp14:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff"},modp15:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff"},modp16:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff"},modp17:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff"},modp18:{gen:"02",prime:"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff"}}},{}],404:[function(e,d,m){arguments[4][184][0].apply(m,arguments)},{buffer:188,dup:184}],405:[function(e,d,m){var f=m;f.version=e("../package.json").version,f.utils=e("./elliptic/utils"),f.rand=e("brorand"),f.curve=e("./elliptic/curve"),f.curves=e("./elliptic/curves"),f.ec=e("./elliptic/ec"),f.eddsa=e("./elliptic/eddsa")},{"../package.json":421,"./elliptic/curve":408,"./elliptic/curves":411,"./elliptic/ec":412,"./elliptic/eddsa":415,"./elliptic/utils":419,brorand:187}],406:[function(e,d,m){var f=e("bn.js"),c=e("../utils"),u=c.getNAF,s=c.getJSF,t=c.assert;function n(i,o){this.type=i,this.p=new f(o.p,16),this.red=o.prime?f.red(o.prime):f.mont(this.p),this.zero=new f(0).toRed(this.red),this.one=new f(1).toRed(this.red),this.two=new f(2).toRed(this.red),this.n=o.n&&new f(o.n,16),this.g=o.g&&this.pointFromJSON(o.g,o.gRed),this._wnafT1=new Array(4),this._wnafT2=new Array(4),this._wnafT3=new Array(4),this._wnafT4=new Array(4),this._bitLength=this.n?this.n.bitLength():0;var l=this.n&&this.p.div(this.n);!l||l.cmpn(100)>0?this.redN=null:(this._maxwellTrick=!0,this.redN=this.n.toRed(this.red))}d.exports=n,n.prototype.point=function(){throw new Error("Not implemented")},n.prototype.validate=function(){throw new Error("Not implemented")},n.prototype._fixedNafMul=function(o,l){t(o.precomputed);var a=o._getDoubles(),g=u(l,1,this._bitLength),v=(1<=w;S--)y=(y<<1)+g[S];h.push(y)}for(var E=this.jpoint(null,null,null),I=this.jpoint(null,null,null),F=v;F>0;F--){for(w=0;w=0;y--){for(var S=0;y>=0&&h[y]===0;y--)S++;if(y>=0&&S++,w=w.dblp(S),y<0)break;var E=h[y];t(E!==0),o.type==="affine"?E>0?w=w.mixedAdd(v[E-1>>1]):w=w.mixedAdd(v[-E-1>>1].neg()):E>0?w=w.add(v[E-1>>1]):w=w.add(v[-E-1>>1].neg())}return o.type==="affine"?w.toP():w},n.prototype._wnafMulAdd=function(o,l,a,g,v){var h=this._wnafT1,w=this._wnafT2,y=this._wnafT3,S=0,E,I,F;for(E=0;E=1;E-=2){var j=E-1,X=E;if(h[j]!==1||h[X]!==1){y[j]=u(a[j],h[j],this._bitLength),y[X]=u(a[X],h[X],this._bitLength),S=Math.max(y[j].length,S),S=Math.max(y[X].length,S);continue}var G=[l[j],null,null,l[X]];l[j].y.cmp(l[X].y)===0?(G[1]=l[j].add(l[X]),G[2]=l[j].toJ().mixedAdd(l[X].neg())):l[j].y.cmp(l[X].y.redNeg())===0?(G[1]=l[j].toJ().mixedAdd(l[X]),G[2]=l[j].add(l[X].neg())):(G[1]=l[j].toJ().mixedAdd(l[X]),G[2]=l[j].toJ().mixedAdd(l[X].neg()));var V=[-3,-1,-5,-7,0,7,5,1,3],J=s(a[j],a[X]);for(S=Math.max(J[0].length,S),y[j]=new Array(S),y[X]=new Array(S),I=0;I=0;E--){for(var A=0;E>=0;){var P=!0;for(I=0;I=0&&A++,T=T.dblp(A),E<0)break;for(I=0;I0?F=w[I][L-1>>1]:L<0&&(F=w[I][-L-1>>1].neg()),F.type==="affine"?T=T.mixedAdd(F):T=T.add(F))}}for(E=0;E=Math.ceil((o.bitLength()+1)/l.step):!1},r.prototype._getDoubles=function(o,l){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var a=[this],g=this,v=0;v":""},r.prototype.isInfinity=function(){return this.x.cmpn(0)===0&&(this.y.cmp(this.z)===0||this.zOne&&this.y.cmp(this.curve.c)===0)},r.prototype._extDbl=function(){var o=this.x.redSqr(),l=this.y.redSqr(),a=this.z.redSqr();a=a.redIAdd(a);var g=this.curve._mulA(o),v=this.x.redAdd(this.y).redSqr().redISub(o).redISub(l),h=g.redAdd(l),w=h.redSub(a),y=g.redSub(l),S=v.redMul(w),E=h.redMul(y),I=v.redMul(y),F=w.redMul(h);return this.curve.point(S,E,F,I)},r.prototype._projDbl=function(){var o=this.x.redAdd(this.y).redSqr(),l=this.x.redSqr(),a=this.y.redSqr(),g,v,h,w,y,S;if(this.curve.twisted){w=this.curve._mulA(l);var E=w.redAdd(a);this.zOne?(g=o.redSub(l).redSub(a).redMul(E.redSub(this.curve.two)),v=E.redMul(w.redSub(a)),h=E.redSqr().redSub(E).redSub(E)):(y=this.z.redSqr(),S=E.redSub(y).redISub(y),g=o.redSub(l).redISub(a).redMul(S),v=E.redMul(w.redSub(a)),h=E.redMul(S))}else w=l.redAdd(a),y=this.curve._mulC(this.z).redSqr(),S=w.redSub(y).redSub(y),g=this.curve._mulC(o.redISub(w)).redMul(S),v=this.curve._mulC(w).redMul(l.redISub(a)),h=w.redMul(S);return this.curve.point(g,v,h)},r.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},r.prototype._extAdd=function(o){var l=this.y.redSub(this.x).redMul(o.y.redSub(o.x)),a=this.y.redAdd(this.x).redMul(o.y.redAdd(o.x)),g=this.t.redMul(this.curve.dd).redMul(o.t),v=this.z.redMul(o.z.redAdd(o.z)),h=a.redSub(l),w=v.redSub(g),y=v.redAdd(g),S=a.redAdd(l),E=h.redMul(w),I=y.redMul(S),F=h.redMul(S),B=w.redMul(y);return this.curve.point(E,I,B,F)},r.prototype._projAdd=function(o){var l=this.z.redMul(o.z),a=l.redSqr(),g=this.x.redMul(o.x),v=this.y.redMul(o.y),h=this.curve.d.redMul(g).redMul(v),w=a.redSub(h),y=a.redAdd(h),S=this.x.redAdd(this.y).redMul(o.x.redAdd(o.y)).redISub(g).redISub(v),E=l.redMul(w).redMul(S),I,F;return this.curve.twisted?(I=l.redMul(y).redMul(v.redSub(this.curve._mulA(g))),F=w.redMul(y)):(I=l.redMul(y).redMul(v.redSub(g)),F=this.curve._mulC(w).redMul(y)),this.curve.point(E,I,F)},r.prototype.add=function(o){return this.isInfinity()?o:o.isInfinity()?this:this.curve.extended?this._extAdd(o):this._projAdd(o)},r.prototype.mul=function(o){return this._hasDoubles(o)?this.curve._fixedNafMul(this,o):this.curve._wnafMul(this,o)},r.prototype.mulAdd=function(o,l,a){return this.curve._wnafMulAdd(1,[this,l],[o,a],2,!1)},r.prototype.jmulAdd=function(o,l,a){return this.curve._wnafMulAdd(1,[this,l],[o,a],2,!0)},r.prototype.normalize=function(){if(this.zOne)return this;var o=this.z.redInvm();return this.x=this.x.redMul(o),this.y=this.y.redMul(o),this.t&&(this.t=this.t.redMul(o)),this.z=this.curve.one,this.zOne=!0,this},r.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},r.prototype.getX=function(){return this.normalize(),this.x.fromRed()},r.prototype.getY=function(){return this.normalize(),this.y.fromRed()},r.prototype.eq=function(o){return this===o||this.getX().cmp(o.getX())===0&&this.getY().cmp(o.getY())===0},r.prototype.eqXToP=function(o){var l=o.toRed(this.curve.red).redMul(this.z);if(this.x.cmp(l)===0)return!0;for(var a=o.clone(),g=this.curve.redN.redMul(this.z);;){if(a.iadd(this.curve.n),a.cmp(this.curve.p)>=0)return!1;if(l.redIAdd(g),this.x.cmp(l)===0)return!0}},r.prototype.toP=r.prototype.normalize,r.prototype.mixedAdd=r.prototype.add},{"../utils":419,"./base":406,"bn.js":420,inherits:440}],408:[function(e,d,m){var f=m;f.base=e("./base"),f.short=e("./short"),f.mont=e("./mont"),f.edwards=e("./edwards")},{"./base":406,"./edwards":407,"./mont":409,"./short":410}],409:[function(e,d,m){var f=e("bn.js"),c=e("inherits"),u=e("./base"),s=e("../utils");function t(r){u.call(this,"mont",r),this.a=new f(r.a,16).toRed(this.red),this.b=new f(r.b,16).toRed(this.red),this.i4=new f(4).toRed(this.red).redInvm(),this.two=new f(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}c(t,u),d.exports=t,t.prototype.validate=function(i){var o=i.normalize().x,l=o.redSqr(),a=l.redMul(o).redAdd(l.redMul(this.a)).redAdd(o),g=a.redSqrt();return g.redSqr().cmp(a)===0};function n(r,i,o){u.BasePoint.call(this,r,"projective"),i===null&&o===null?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new f(i,16),this.z=new f(o,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}c(n,u.BasePoint),t.prototype.decodePoint=function(i,o){return this.point(s.toArray(i,o),1)},t.prototype.point=function(i,o){return new n(this,i,o)},t.prototype.pointFromJSON=function(i){return n.fromJSON(this,i)},n.prototype.precompute=function(){},n.prototype._encode=function(){return this.getX().toArray("be",this.curve.p.byteLength())},n.fromJSON=function(i,o){return new n(i,o[0],o[1]||i.one)},n.prototype.inspect=function(){return this.isInfinity()?"":""},n.prototype.isInfinity=function(){return this.z.cmpn(0)===0},n.prototype.dbl=function(){var i=this.x.redAdd(this.z),o=i.redSqr(),l=this.x.redSub(this.z),a=l.redSqr(),g=o.redSub(a),v=o.redMul(a),h=g.redMul(a.redAdd(this.curve.a24.redMul(g)));return this.curve.point(v,h)},n.prototype.add=function(){throw new Error("Not supported on Montgomery curve")},n.prototype.diffAdd=function(i,o){var l=this.x.redAdd(this.z),a=this.x.redSub(this.z),g=i.x.redAdd(i.z),v=i.x.redSub(i.z),h=v.redMul(l),w=g.redMul(a),y=o.z.redMul(h.redAdd(w).redSqr()),S=o.x.redMul(h.redISub(w).redSqr());return this.curve.point(y,S)},n.prototype.mul=function(i){for(var o=i.clone(),l=this,a=this.curve.point(null,null),g=this,v=[];o.cmpn(0)!==0;o.iushrn(1))v.push(o.andln(1));for(var h=v.length-1;h>=0;h--)v[h]===0?(l=l.diffAdd(a,g),a=a.dbl()):(a=l.diffAdd(a,g),l=l.dbl());return a},n.prototype.mulAdd=function(){throw new Error("Not supported on Montgomery curve")},n.prototype.jumlAdd=function(){throw new Error("Not supported on Montgomery curve")},n.prototype.eq=function(i){return this.getX().cmp(i.getX())===0},n.prototype.normalize=function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},n.prototype.getX=function(){return this.normalize(),this.x.fromRed()}},{"../utils":419,"./base":406,"bn.js":420,inherits:440}],410:[function(e,d,m){var f=e("../utils"),c=e("bn.js"),u=e("inherits"),s=e("./base"),t=f.assert;function n(o){s.call(this,"short",o),this.a=new c(o.a,16).toRed(this.red),this.b=new c(o.b,16).toRed(this.red),this.tinv=this.two.redInvm(),this.zeroA=this.a.fromRed().cmpn(0)===0,this.threeA=this.a.fromRed().sub(this.p).cmpn(-3)===0,this.endo=this._getEndomorphism(o),this._endoWnafT1=new Array(4),this._endoWnafT2=new Array(4)}u(n,s),d.exports=n,n.prototype._getEndomorphism=function(l){if(!(!this.zeroA||!this.g||!this.n||this.p.modn(3)!==1)){var a,g;if(l.beta)a=new c(l.beta,16).toRed(this.red);else{var v=this._getEndoRoots(this.p);a=v[0].cmp(v[1])<0?v[0]:v[1],a=a.toRed(this.red)}if(l.lambda)g=new c(l.lambda,16);else{var h=this._getEndoRoots(this.n);this.g.mul(h[0]).x.cmp(this.g.x.redMul(a))===0?g=h[0]:(g=h[1],t(this.g.mul(g).x.cmp(this.g.x.redMul(a))===0))}var w;return l.basis?w=l.basis.map(function(y){return{a:new c(y.a,16),b:new c(y.b,16)}}):w=this._getEndoBasis(g),{beta:a,lambda:g,basis:w}}},n.prototype._getEndoRoots=function(l){var a=l===this.p?this.red:c.mont(l),g=new c(2).toRed(a).redInvm(),v=g.redNeg(),h=new c(3).toRed(a).redNeg().redSqrt().redMul(g),w=v.redAdd(h).fromRed(),y=v.redSub(h).fromRed();return[w,y]},n.prototype._getEndoBasis=function(l){for(var a=this.n.ushrn(Math.floor(this.n.bitLength()/2)),g=l,v=this.n.clone(),h=new c(1),w=new c(0),y=new c(0),S=new c(1),E,I,F,B,j,X,G,V=0,J,H;g.cmpn(0)!==0;){var M=v.div(g);J=v.sub(M.mul(g)),H=y.sub(M.mul(h));var T=S.sub(M.mul(w));if(!F&&J.cmp(a)<0)E=G.neg(),I=h,F=J.neg(),B=H;else if(F&&++V===2)break;G=J,v=g,g=J,y=h,h=H,S=w,w=T}j=J.neg(),X=H;var _=F.sqr().add(B.sqr()),A=j.sqr().add(X.sqr());return A.cmp(_)>=0&&(j=E,X=I),F.negative&&(F=F.neg(),B=B.neg()),j.negative&&(j=j.neg(),X=X.neg()),[{a:F,b:B},{a:j,b:X}]},n.prototype._endoSplit=function(l){var a=this.endo.basis,g=a[0],v=a[1],h=v.b.mul(l).divRound(this.n),w=g.b.neg().mul(l).divRound(this.n),y=h.mul(g.a),S=w.mul(v.a),E=h.mul(g.b),I=w.mul(v.b),F=l.sub(y).sub(S),B=E.add(I).neg();return{k1:F,k2:B}},n.prototype.pointFromX=function(l,a){l=new c(l,16),l.red||(l=l.toRed(this.red));var g=l.redSqr().redMul(l).redIAdd(l.redMul(this.a)).redIAdd(this.b),v=g.redSqrt();if(v.redSqr().redSub(g).cmp(this.zero)!==0)throw new Error("invalid point");var h=v.fromRed().isOdd();return(a&&!h||!a&&h)&&(v=v.redNeg()),this.point(l,v)},n.prototype.validate=function(l){if(l.inf)return!0;var a=l.x,g=l.y,v=this.a.redMul(a),h=a.redSqr().redMul(a).redIAdd(v).redIAdd(this.b);return g.redSqr().redISub(h).cmpn(0)===0},n.prototype._endoWnafMulAdd=function(l,a,g){for(var v=this._endoWnafT1,h=this._endoWnafT2,w=0;w":""},r.prototype.isInfinity=function(){return this.inf},r.prototype.add=function(l){if(this.inf)return l;if(l.inf)return this;if(this.eq(l))return this.dbl();if(this.neg().eq(l))return this.curve.point(null,null);if(this.x.cmp(l.x)===0)return this.curve.point(null,null);var a=this.y.redSub(l.y);a.cmpn(0)!==0&&(a=a.redMul(this.x.redSub(l.x).redInvm()));var g=a.redSqr().redISub(this.x).redISub(l.x),v=a.redMul(this.x.redSub(g)).redISub(this.y);return this.curve.point(g,v)},r.prototype.dbl=function(){if(this.inf)return this;var l=this.y.redAdd(this.y);if(l.cmpn(0)===0)return this.curve.point(null,null);var a=this.curve.a,g=this.x.redSqr(),v=l.redInvm(),h=g.redAdd(g).redIAdd(g).redIAdd(a).redMul(v),w=h.redSqr().redISub(this.x.redAdd(this.x)),y=h.redMul(this.x.redSub(w)).redISub(this.y);return this.curve.point(w,y)},r.prototype.getX=function(){return this.x.fromRed()},r.prototype.getY=function(){return this.y.fromRed()},r.prototype.mul=function(l){return l=new c(l,16),this.isInfinity()?this:this._hasDoubles(l)?this.curve._fixedNafMul(this,l):this.curve.endo?this.curve._endoWnafMulAdd([this],[l]):this.curve._wnafMul(this,l)},r.prototype.mulAdd=function(l,a,g){var v=[this,a],h=[l,g];return this.curve.endo?this.curve._endoWnafMulAdd(v,h):this.curve._wnafMulAdd(1,v,h,2)},r.prototype.jmulAdd=function(l,a,g){var v=[this,a],h=[l,g];return this.curve.endo?this.curve._endoWnafMulAdd(v,h,!0):this.curve._wnafMulAdd(1,v,h,2,!0)},r.prototype.eq=function(l){return this===l||this.inf===l.inf&&(this.inf||this.x.cmp(l.x)===0&&this.y.cmp(l.y)===0)},r.prototype.neg=function(l){if(this.inf)return this;var a=this.curve.point(this.x,this.y.redNeg());if(l&&this.precomputed){var g=this.precomputed,v=function(h){return h.neg()};a.precomputed={naf:g.naf&&{wnd:g.naf.wnd,points:g.naf.points.map(v)},doubles:g.doubles&&{step:g.doubles.step,points:g.doubles.points.map(v)}}}return a},r.prototype.toJ=function(){if(this.inf)return this.curve.jpoint(null,null,null);var l=this.curve.jpoint(this.x,this.y,this.curve.one);return l};function i(o,l,a,g){s.BasePoint.call(this,o,"jacobian"),l===null&&a===null&&g===null?(this.x=this.curve.one,this.y=this.curve.one,this.z=new c(0)):(this.x=new c(l,16),this.y=new c(a,16),this.z=new c(g,16)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.zOne=this.z===this.curve.one}u(i,s.BasePoint),n.prototype.jpoint=function(l,a,g){return new i(this,l,a,g)},i.prototype.toP=function(){if(this.isInfinity())return this.curve.point(null,null);var l=this.z.redInvm(),a=l.redSqr(),g=this.x.redMul(a),v=this.y.redMul(a).redMul(l);return this.curve.point(g,v)},i.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},i.prototype.add=function(l){if(this.isInfinity())return l;if(l.isInfinity())return this;var a=l.z.redSqr(),g=this.z.redSqr(),v=this.x.redMul(a),h=l.x.redMul(g),w=this.y.redMul(a.redMul(l.z)),y=l.y.redMul(g.redMul(this.z)),S=v.redSub(h),E=w.redSub(y);if(S.cmpn(0)===0)return E.cmpn(0)!==0?this.curve.jpoint(null,null,null):this.dbl();var I=S.redSqr(),F=I.redMul(S),B=v.redMul(I),j=E.redSqr().redIAdd(F).redISub(B).redISub(B),X=E.redMul(B.redISub(j)).redISub(w.redMul(F)),G=this.z.redMul(l.z).redMul(S);return this.curve.jpoint(j,X,G)},i.prototype.mixedAdd=function(l){if(this.isInfinity())return l.toJ();if(l.isInfinity())return this;var a=this.z.redSqr(),g=this.x,v=l.x.redMul(a),h=this.y,w=l.y.redMul(a).redMul(this.z),y=g.redSub(v),S=h.redSub(w);if(y.cmpn(0)===0)return S.cmpn(0)!==0?this.curve.jpoint(null,null,null):this.dbl();var E=y.redSqr(),I=E.redMul(y),F=g.redMul(E),B=S.redSqr().redIAdd(I).redISub(F).redISub(F),j=S.redMul(F.redISub(B)).redISub(h.redMul(I)),X=this.z.redMul(y);return this.curve.jpoint(B,j,X)},i.prototype.dblp=function(l){if(l===0)return this;if(this.isInfinity())return this;if(!l)return this.dbl();var a;if(this.curve.zeroA||this.curve.threeA){var g=this;for(a=0;a=0)return!1;if(g.redIAdd(h),this.x.cmp(g)===0)return!0}},i.prototype.inspect=function(){return this.isInfinity()?"":""},i.prototype.isInfinity=function(){return this.z.cmpn(0)===0}},{"../utils":419,"./base":406,"bn.js":420,inherits:440}],411:[function(e,d,m){var f=m,c=e("hash.js"),u=e("./curve"),s=e("./utils"),t=s.assert;function n(o){o.type==="short"?this.curve=new u.short(o):o.type==="edwards"?this.curve=new u.edwards(o):this.curve=new u.mont(o),this.g=this.curve.g,this.n=this.curve.n,this.hash=o.hash,t(this.g.validate(),"Invalid curve"),t(this.g.mul(this.n).isInfinity(),"Invalid curve, G*N != O")}f.PresetCurve=n;function r(o,l){Object.defineProperty(f,o,{configurable:!0,enumerable:!0,get:function(){var a=new n(l);return Object.defineProperty(f,o,{configurable:!0,enumerable:!0,value:a}),a}})}r("p192",{type:"short",prime:"p192",p:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff",a:"ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc",b:"64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1",n:"ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831",hash:c.sha256,gRed:!1,g:["188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012","07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811"]}),r("p224",{type:"short",prime:"p224",p:"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001",a:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe",b:"b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4",n:"ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d",hash:c.sha256,gRed:!1,g:["b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21","bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34"]}),r("p256",{type:"short",prime:null,p:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff",a:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc",b:"5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b",n:"ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551",hash:c.sha256,gRed:!1,g:["6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296","4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5"]}),r("p384",{type:"short",prime:null,p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 ffffffff",a:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 fffffffc",b:"b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f 5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef",n:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 f4372ddf 581a0db2 48b0a77a ecec196a ccc52973",hash:c.sha384,gRed:!1,g:["aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 5502f25d bf55296c 3a545e38 72760ab7","3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 0a60b1ce 1d7e819d 7a431d7c 90ea0e5f"]}),r("p521",{type:"short",prime:null,p:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff",a:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffc",b:"00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b 99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd 3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00",n:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409",hash:c.sha512,gRed:!1,g:["000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66","00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 3fad0761 353c7086 a272c240 88be9476 9fd16650"]}),r("curve25519",{type:"mont",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"76d06",b:"1",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:c.sha256,gRed:!1,g:["9"]}),r("ed25519",{type:"edwards",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"-1",c:"1",d:"52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:c.sha256,gRed:!1,g:["216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a","6666666666666666666666666666666666666666666666666666666666666658"]});var i;try{i=e("./precomputed/secp256k1")}catch{i=void 0}r("secp256k1",{type:"short",prime:"k256",p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f",a:"0",b:"7",n:"ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141",h:"1",hash:c.sha256,beta:"7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee",lambda:"5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72",basis:[{a:"3086d221a7d46bcde86c90e49284eb15",b:"-e4437ed6010e88286f547fa90abfe4c3"},{a:"114ca50f7a8e2f3f657c1108d9d44cfd8",b:"3086d221a7d46bcde86c90e49284eb15"}],gRed:!1,g:["79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",i]})},{"./curve":408,"./precomputed/secp256k1":418,"./utils":419,"hash.js":426}],412:[function(e,d,m){var f=e("bn.js"),c=e("hmac-drbg"),u=e("../utils"),s=e("../curves"),t=e("brorand"),n=u.assert,r=e("./key"),i=e("./signature");function o(l){if(!(this instanceof o))return new o(l);typeof l=="string"&&(n(Object.prototype.hasOwnProperty.call(s,l),"Unknown curve "+l),l=s[l]),l instanceof s.PresetCurve&&(l={curve:l}),this.curve=l.curve.curve,this.n=this.curve.n,this.nh=this.n.ushrn(1),this.g=this.curve.g,this.g=l.curve.g,this.g.precompute(l.curve.n.bitLength()+1),this.hash=l.hash||l.curve.hash}d.exports=o,o.prototype.keyPair=function(a){return new r(this,a)},o.prototype.keyFromPrivate=function(a,g){return r.fromPrivate(this,a,g)},o.prototype.keyFromPublic=function(a,g){return r.fromPublic(this,a,g)},o.prototype.genKeyPair=function(a){a||(a={});for(var g=new c({hash:this.hash,pers:a.pers,persEnc:a.persEnc||"utf8",entropy:a.entropy||t(this.hash.hmacStrength),entropyEnc:a.entropy&&a.entropyEnc||"utf8",nonce:this.n.toArray()}),v=this.n.byteLength(),h=this.n.sub(new f(2));;){var w=new f(g.generate(v));if(!(w.cmp(h)>0))return w.iaddn(1),this.keyFromPrivate(w)}},o.prototype._truncateToN=function(a,g){var v=a.byteLength()*8-this.n.bitLength();return v>0&&(a=a.ushrn(v)),!g&&a.cmp(this.n)>=0?a.sub(this.n):a},o.prototype.sign=function(a,g,v,h){typeof v=="object"&&(h=v,v=null),h||(h={}),g=this.keyFromPrivate(g,v),a=this._truncateToN(new f(a,16));for(var w=this.n.byteLength(),y=g.getPrivate().toArray("be",w),S=a.toArray("be",w),E=new c({hash:this.hash,entropy:y,nonce:S,pers:h.pers,persEnc:h.persEnc||"utf8"}),I=this.n.sub(new f(1)),F=0;;F++){var B=h.k?h.k(F):new f(E.generate(this.n.byteLength()));if(B=this._truncateToN(B,!0),!(B.cmpn(1)<=0||B.cmp(I)>=0)){var j=this.g.mul(B);if(!j.isInfinity()){var X=j.getX(),G=X.umod(this.n);if(G.cmpn(0)!==0){var V=B.invm(this.n).mul(G.mul(g.getPrivate()).iadd(a));if(V=V.umod(this.n),V.cmpn(0)!==0){var J=(j.getY().isOdd()?1:0)|(X.cmp(G)!==0?2:0);return h.canonical&&V.cmp(this.nh)>0&&(V=this.n.sub(V),J^=1),new i({r:G,s:V,recoveryParam:J})}}}}}},o.prototype.verify=function(a,g,v,h){a=this._truncateToN(new f(a,16)),v=this.keyFromPublic(v,h),g=new i(g,"hex");var w=g.r,y=g.s;if(w.cmpn(1)<0||w.cmp(this.n)>=0||y.cmpn(1)<0||y.cmp(this.n)>=0)return!1;var S=y.invm(this.n),E=S.mul(a).umod(this.n),I=S.mul(w).umod(this.n),F;return this.curve._maxwellTrick?(F=this.g.jmulAdd(E,v.getPublic(),I),F.isInfinity()?!1:F.eqXToP(w)):(F=this.g.mulAdd(E,v.getPublic(),I),F.isInfinity()?!1:F.getX().umod(this.n).cmp(w)===0)},o.prototype.recoverPubKey=function(l,a,g,v){n((3&g)===g,"The recovery param is more than two bits"),a=new i(a,v);var h=this.n,w=new f(l),y=a.r,S=a.s,E=g&1,I=g>>1;if(y.cmp(this.curve.p.umod(this.curve.n))>=0&&I)throw new Error("Unable to find sencond key candinate");I?y=this.curve.pointFromX(y.add(this.curve.n),E):y=this.curve.pointFromX(y,E);var F=a.r.invm(h),B=h.sub(w).mul(F).umod(h),j=S.mul(F).umod(h);return this.g.mulAdd(B,y,j)},o.prototype.getKeyRecoveryParam=function(l,a,g,v){if(a=new i(a,v),a.recoveryParam!==null)return a.recoveryParam;for(var h=0;h<4;h++){var w;try{w=this.recoverPubKey(l,a,h)}catch{continue}if(w.eq(g))return h}throw new Error("Unable to find valid recovery factor")}},{"../curves":411,"../utils":419,"./key":413,"./signature":414,"bn.js":420,brorand:187,"hmac-drbg":438}],413:[function(e,d,m){var f=e("bn.js"),c=e("../utils"),u=c.assert;function s(t,n){this.ec=t,this.priv=null,this.pub=null,n.priv&&this._importPrivate(n.priv,n.privEnc),n.pub&&this._importPublic(n.pub,n.pubEnc)}d.exports=s,s.fromPublic=function(n,r,i){return r instanceof s?r:new s(n,{pub:r,pubEnc:i})},s.fromPrivate=function(n,r,i){return r instanceof s?r:new s(n,{priv:r,privEnc:i})},s.prototype.validate=function(){var n=this.getPublic();return n.isInfinity()?{result:!1,reason:"Invalid public key"}:n.validate()?n.mul(this.ec.curve.n).isInfinity()?{result:!0,reason:null}:{result:!1,reason:"Public key * N != O"}:{result:!1,reason:"Public key is not a point"}},s.prototype.getPublic=function(n,r){return typeof n=="string"&&(r=n,n=null),this.pub||(this.pub=this.ec.g.mul(this.priv)),r?this.pub.encode(r,n):this.pub},s.prototype.getPrivate=function(n){return n==="hex"?this.priv.toString(16,2):this.priv},s.prototype._importPrivate=function(n,r){this.priv=new f(n,r||16),this.priv=this.priv.umod(this.ec.curve.n)},s.prototype._importPublic=function(n,r){if(n.x||n.y){this.ec.curve.type==="mont"?u(n.x,"Need x coordinate"):(this.ec.curve.type==="short"||this.ec.curve.type==="edwards")&&u(n.x&&n.y,"Need both x and y coordinate"),this.pub=this.ec.curve.point(n.x,n.y);return}this.pub=this.ec.curve.decodePoint(n,r)},s.prototype.derive=function(n){return n.validate()||u(n.validate(),"public point not validated"),n.mul(this.priv).getX()},s.prototype.sign=function(n,r,i){return this.ec.sign(n,this,r,i)},s.prototype.verify=function(n,r){return this.ec.verify(n,r,this)},s.prototype.inspect=function(){return""}},{"../utils":419,"bn.js":420}],414:[function(e,d,m){var f=e("bn.js"),c=e("../utils"),u=c.assert;function s(o,l){if(o instanceof s)return o;this._importDER(o,l)||(u(o.r&&o.s,"Signature without r or s"),this.r=new f(o.r,16),this.s=new f(o.s,16),o.recoveryParam===void 0?this.recoveryParam=null:this.recoveryParam=o.recoveryParam)}d.exports=s;function t(){this.place=0}function n(o,l){var a=o[l.place++];if(!(a&128))return a;var g=a&15;if(g===0||g>4)return!1;for(var v=0,h=0,w=l.place;h>>=0;return v<=127?!1:(l.place=w,v)}function r(o){for(var l=0,a=o.length-1;!o[l]&&!(o[l+1]&128)&&l>>3);for(o.push(a|128);--a;)o.push(l>>>(a<<3)&255);o.push(l)}s.prototype.toDER=function(l){var a=this.r.toArray(),g=this.s.toArray();for(a[0]&128&&(a=[0].concat(a)),g[0]&128&&(g=[0].concat(g)),a=r(a),g=r(g);!g[0]&&!(g[1]&128);)g=g.slice(1);var v=[2];i(v,a.length),v=v.concat(a),v.push(2),i(v,g.length);var h=v.concat(g),w=[48];return i(w,h.length),w=w.concat(h),c.encode(w,l)}},{"../utils":419,"bn.js":420}],415:[function(e,d,m){var f=e("hash.js"),c=e("../curves"),u=e("../utils"),s=u.assert,t=u.parseBytes,n=e("./key"),r=e("./signature");function i(o){if(s(o==="ed25519","only tested with ed25519 so far"),!(this instanceof i))return new i(o);o=c[o].curve,this.curve=o,this.g=o.g,this.g.precompute(o.n.bitLength()+1),this.pointClass=o.point().constructor,this.encodingLength=Math.ceil(o.n.bitLength()/8),this.hash=f.sha512}d.exports=i,i.prototype.sign=function(l,a){l=t(l);var g=this.keyFromSecret(a),v=this.hashInt(g.messagePrefix(),l),h=this.g.mul(v),w=this.encodePoint(h),y=this.hashInt(w,g.pubBytes(),l).mul(g.priv()),S=v.add(y).umod(this.curve.n);return this.makeSignature({R:h,S,Rencoded:w})},i.prototype.verify=function(l,a,g){l=t(l),a=this.makeSignature(a);var v=this.keyFromPublic(g),h=this.hashInt(a.Rencoded(),v.pubBytes(),l),w=this.g.mul(a.S()),y=a.R().add(v.pub().mul(h));return y.eq(w)},i.prototype.hashInt=function(){for(var l=this.hash(),a=0;a(h>>1)-1?S=(h>>1)-E:S=E,w.isubn(S)):S=0,v[y]=S,w.iushrn(1)}return v}f.getNAF=t;function n(l,a){var g=[[],[]];l=l.clone(),a=a.clone();for(var v=0,h=0,w;l.cmpn(-v)>0||a.cmpn(-h)>0;){var y=l.andln(3)+v&3,S=a.andln(3)+h&3;y===3&&(y=-1),S===3&&(S=-1);var E;y&1?(w=l.andln(7)+v&7,(w===3||w===5)&&S===2?E=-y:E=y):E=0,g[0].push(E);var I;S&1?(w=a.andln(7)+h&7,(w===3||w===5)&&y===2?I=-S:I=S):I=0,g[1].push(I),2*v===E+1&&(v=1-v),2*h===I+1&&(h=1-h),l.iushrn(1),a.iushrn(1)}return g}f.getJSF=n;function r(l,a,g){var v="_"+a;l.prototype[a]=function(){return this[v]!==void 0?this[v]:this[v]=g.call(this)}}f.cachedProperty=r;function i(l){return typeof l=="string"?f.toArray(l,"hex"):l}f.parseBytes=i;function o(l){return new c(l,"hex","le")}f.intFromLE=o},{"bn.js":420,"minimalistic-assert":453,"minimalistic-crypto-utils":454}],420:[function(e,d,m){arguments[4][184][0].apply(m,arguments)},{buffer:188,dup:184}],421:[function(e,d,m){d.exports={name:"elliptic",version:"6.5.4",description:"EC cryptography",main:"lib/elliptic.js",files:["lib"],scripts:{lint:"eslint lib test","lint:fix":"npm run lint -- --fix",unit:"istanbul test _mocha --reporter=spec test/index.js",test:"npm run lint && npm run unit",version:"grunt dist && git add dist/"},repository:{type:"git",url:"git@github.com:indutny/elliptic"},keywords:["EC","Elliptic","curve","Cryptography"],author:"Fedor Indutny ",license:"MIT",bugs:{url:"https://github.com/indutny/elliptic/issues"},homepage:"https://github.com/indutny/elliptic",devDependencies:{brfs:"^2.0.2",coveralls:"^3.1.0",eslint:"^7.6.0",grunt:"^1.2.1","grunt-browserify":"^5.3.0","grunt-cli":"^1.3.2","grunt-contrib-connect":"^3.0.0","grunt-contrib-copy":"^1.0.0","grunt-contrib-uglify":"^5.0.0","grunt-mocha-istanbul":"^5.0.2","grunt-saucelabs":"^9.0.1",istanbul:"^0.4.5",mocha:"^8.0.1"},dependencies:{"bn.js":"^4.11.9",brorand:"^1.1.0","hash.js":"^1.0.0","hmac-drbg":"^1.0.1",inherits:"^2.0.4","minimalistic-assert":"^1.0.1","minimalistic-crypto-utils":"^1.0.1"}}},{}],422:[function(e,d,m){var f=Object.create||j,c=Object.keys||X,u=Function.prototype.bind||G;function s(){(!this._events||!Object.prototype.hasOwnProperty.call(this,"_events"))&&(this._events=f(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0}d.exports=s,s.EventEmitter=s,s.prototype._events=void 0,s.prototype._maxListeners=void 0;var t=10,n;try{var r={};Object.defineProperty&&Object.defineProperty(r,"x",{value:0}),n=r.x===0}catch{n=!1}n?Object.defineProperty(s,"defaultMaxListeners",{enumerable:!0,get:function(){return t},set:function(V){if(typeof V!="number"||V<0||V!==V)throw new TypeError('"defaultMaxListeners" must be a positive number');t=V}}):s.defaultMaxListeners=t,s.prototype.setMaxListeners=function(J){if(typeof J!="number"||J<0||isNaN(J))throw new TypeError('"n" argument must be a positive number');return this._maxListeners=J,this};function i(V){return V._maxListeners===void 0?s.defaultMaxListeners:V._maxListeners}s.prototype.getMaxListeners=function(){return i(this)};function o(V,J,H){if(J)V.call(H);else for(var M=V.length,T=F(V,M),_=0;_1&&(H=arguments[1]),H instanceof Error)throw H;var $=new Error('Unhandled "error" event. ('+H+")");throw $.context=H,$}if(M=P[J],!M)return!1;var R=typeof M=="function";switch(T=arguments.length,T){case 1:o(M,R,this);break;case 2:l(M,R,this,arguments[1]);break;case 3:a(M,R,this,arguments[1],arguments[2]);break;case 4:g(M,R,this,arguments[1],arguments[2],arguments[3]);break;default:for(_=new Array(T-1),A=1;A0&&A.length>T)){A.warned=!0;var P=new Error("Possible EventEmitter memory leak detected. "+A.length+' "'+String(J)+'" listeners added. Use emitter.setMaxListeners() to increase limit.');P.name="MaxListenersExceededWarning",P.emitter=V,P.type=J,P.count=A.length,typeof console=="object"&&console.warn&&console.warn("%s: %s",P.name,P.message)}return V}s.prototype.addListener=function(J,H){return h(this,J,H,!1)},s.prototype.on=s.prototype.addListener,s.prototype.prependListener=function(J,H){return h(this,J,H,!0)};function w(){if(!this.fired)switch(this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length){case 0:return this.listener.call(this.target);case 1:return this.listener.call(this.target,arguments[0]);case 2:return this.listener.call(this.target,arguments[0],arguments[1]);case 3:return this.listener.call(this.target,arguments[0],arguments[1],arguments[2]);default:for(var V=new Array(arguments.length),J=0;J=0;A--)if(M[A]===H||M[A].listener===H){P=M[A].listener,_=A;break}if(_<0)return this;_===0?M.shift():I(M,_),M.length===1&&(T[J]=M[0]),T.removeListener&&this.emit("removeListener",J,P||H)}return this},s.prototype.removeAllListeners=function(J){var H,M,T;if(M=this._events,!M)return this;if(!M.removeListener)return arguments.length===0?(this._events=f(null),this._eventsCount=0):M[J]&&(--this._eventsCount===0?this._events=f(null):delete M[J]),this;if(arguments.length===0){var _=c(M),A;for(T=0;T<_.length;++T)A=_[T],A!=="removeListener"&&this.removeAllListeners(A);return this.removeAllListeners("removeListener"),this._events=f(null),this._eventsCount=0,this}if(H=M[J],typeof H=="function")this.removeListener(J,H);else if(H)for(T=H.length-1;T>=0;T--)this.removeListener(J,H[T]);return this};function S(V,J,H){var M=V._events;if(!M)return[];var T=M[J];return T?typeof T=="function"?H?[T.listener||T]:[T]:H?B(T):F(T,T.length):[]}s.prototype.listeners=function(J){return S(this,J,!0)},s.prototype.rawListeners=function(J){return S(this,J,!1)},s.listenerCount=function(V,J){return typeof V.listenerCount=="function"?V.listenerCount(J):E.call(V,J)},s.prototype.listenerCount=E;function E(V){var J=this._events;if(J){var H=J[V];if(typeof H=="function")return 1;if(H)return H.length}return 0}s.prototype.eventNames=function(){return this._eventsCount>0?Reflect.ownKeys(this._events):[]};function I(V,J){for(var H=J,M=H+1,T=V.length;M0||r>0;){var g=new c;g.update(a),g.update(s),t&&g.update(t),a=g.digest();var v=0;if(i>0){var h=o.length-i;v=Math.min(i,a.length),a.copy(o,h,0,v),i-=v}if(v0){var w=l.length-r,y=Math.min(r,a.length-v);a.copy(l,w,v,v+y),r-=y}}return a.fill(0),{key:o,iv:l}}d.exports=u},{"md5.js":450,"safe-buffer":494}],424:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.CsvParserStream=m.ParserOptions=m.parseFile=m.parseStream=m.parseString=m.parse=m.FormatterOptions=m.CsvFormatterStream=m.writeToPath=m.writeToString=m.writeToBuffer=m.writeToStream=m.write=m.format=void 0;var f=e("@fast-csv/format");Object.defineProperty(m,"format",{enumerable:!0,get:function(){return f.format}}),Object.defineProperty(m,"write",{enumerable:!0,get:function(){return f.write}}),Object.defineProperty(m,"writeToStream",{enumerable:!0,get:function(){return f.writeToStream}}),Object.defineProperty(m,"writeToBuffer",{enumerable:!0,get:function(){return f.writeToBuffer}}),Object.defineProperty(m,"writeToString",{enumerable:!0,get:function(){return f.writeToString}}),Object.defineProperty(m,"writeToPath",{enumerable:!0,get:function(){return f.writeToPath}}),Object.defineProperty(m,"CsvFormatterStream",{enumerable:!0,get:function(){return f.CsvFormatterStream}}),Object.defineProperty(m,"FormatterOptions",{enumerable:!0,get:function(){return f.FormatterOptions}});var c=e("@fast-csv/parse");Object.defineProperty(m,"parse",{enumerable:!0,get:function(){return c.parse}}),Object.defineProperty(m,"parseString",{enumerable:!0,get:function(){return c.parseString}}),Object.defineProperty(m,"parseStream",{enumerable:!0,get:function(){return c.parseStream}}),Object.defineProperty(m,"parseFile",{enumerable:!0,get:function(){return c.parseFile}}),Object.defineProperty(m,"ParserOptions",{enumerable:!0,get:function(){return c.ParserOptions}}),Object.defineProperty(m,"CsvParserStream",{enumerable:!0,get:function(){return c.CsvParserStream}})},{"@fast-csv/format":151,"@fast-csv/parse":155}],425:[function(e,d,m){var f=e("safe-buffer").Buffer,c=e("readable-stream").Transform,u=e("inherits");function s(n,r){if(!f.isBuffer(n)&&typeof n!="string")throw new TypeError(r+" must be a string or a buffer")}function t(n){c.call(this),this._block=f.allocUnsafe(n),this._blockSize=n,this._blockOffset=0,this._length=[0,0,0,0],this._finalized=!1}u(t,c),t.prototype._transform=function(n,r,i){var o=null;try{this.update(n,r)}catch(l){o=l}i(o)},t.prototype._flush=function(n){var r=null;try{this.push(this.digest())}catch(i){r=i}n(r)},t.prototype.update=function(n,r){if(s(n,"Data"),this._finalized)throw new Error("Digest already called");f.isBuffer(n)||(n=f.from(n,r));for(var i=this._block,o=0;this._blockOffset+n.length-o>=this._blockSize;){for(var l=this._blockOffset;l0;++a)this._length[a]+=g,g=this._length[a]/4294967296|0,g>0&&(this._length[a]-=4294967296*g);return this},t.prototype._update=function(){throw new Error("_update is not implemented")},t.prototype.digest=function(n){if(this._finalized)throw new Error("Digest already called");this._finalized=!0;var r=this._digest();n!==void 0&&(r=r.toString(n)),this._block.fill(0),this._blockOffset=0;for(var i=0;i<4;++i)this._length[i]=0;return r},t.prototype._digest=function(){throw new Error("_digest is not implemented")},d.exports=t},{inherits:440,"readable-stream":491,"safe-buffer":494}],426:[function(e,d,m){var f=m;f.utils=e("./hash/utils"),f.common=e("./hash/common"),f.sha=e("./hash/sha"),f.ripemd=e("./hash/ripemd"),f.hmac=e("./hash/hmac"),f.sha1=f.sha.sha1,f.sha256=f.sha.sha256,f.sha224=f.sha.sha224,f.sha384=f.sha.sha384,f.sha512=f.sha.sha512,f.ripemd160=f.ripemd.ripemd160},{"./hash/common":427,"./hash/hmac":428,"./hash/ripemd":429,"./hash/sha":430,"./hash/utils":437}],427:[function(e,d,m){var f=e("./utils"),c=e("minimalistic-assert");function u(){this.pending=null,this.pendingTotal=0,this.blockSize=this.constructor.blockSize,this.outSize=this.constructor.outSize,this.hmacStrength=this.constructor.hmacStrength,this.padLength=this.constructor.padLength/8,this.endian="big",this._delta8=this.blockSize/8,this._delta32=this.blockSize/32}m.BlockHash=u,u.prototype.update=function(t,n){if(t=f.toArray(t,n),this.pending?this.pending=this.pending.concat(t):this.pending=t,this.pendingTotal+=t.length,this.pending.length>=this._delta8){t=this.pending;var r=t.length%this._delta8;this.pending=t.slice(t.length-r,t.length),this.pending.length===0&&(this.pending=null),t=f.join32(t,0,t.length-r,this.endian);for(var i=0;i>>24&255,i[o++]=t>>>16&255,i[o++]=t>>>8&255,i[o++]=t&255}else for(i[o++]=t&255,i[o++]=t>>>8&255,i[o++]=t>>>16&255,i[o++]=t>>>24&255,i[o++]=0,i[o++]=0,i[o++]=0,i[o++]=0,l=8;lthis.blockSize&&(t=new this.Hash().update(t).digest()),c(t.length<=this.blockSize);for(var n=t.length;n>>3}m.g0_256=o;function l(a){return c(a,17)^c(a,19)^a>>>10}m.g1_256=l},{"../utils":437}],437:[function(e,d,m){var f=e("minimalistic-assert"),c=e("inherits");m.inherits=c;function u(T,_){return(T.charCodeAt(_)&64512)!==55296||_<0||_+1>=T.length?!1:(T.charCodeAt(_+1)&64512)===56320}function s(T,_){if(Array.isArray(T))return T.slice();if(!T)return[];var A=[];if(typeof T=="string")if(_){if(_==="hex")for(T=T.replace(/[^a-z0-9]+/ig,""),T.length%2!==0&&(T="0"+T),L=0;L>6|192,A[P++]=$&63|128):u(T,L)?($=65536+(($&1023)<<10)+(T.charCodeAt(++L)&1023),A[P++]=$>>18|240,A[P++]=$>>12&63|128,A[P++]=$>>6&63|128,A[P++]=$&63|128):(A[P++]=$>>12|224,A[P++]=$>>6&63|128,A[P++]=$&63|128)}else for(L=0;L>>24|T>>>8&65280|T<<8&16711680|(T&255)<<24;return _>>>0}m.htonl=n;function r(T,_){for(var A="",P=0;P>>0}return $}m.join32=l;function a(T,_){for(var A=new Array(T.length*4),P=0,L=0;P>>24,A[L+1]=$>>>16&255,A[L+2]=$>>>8&255,A[L+3]=$&255):(A[L+3]=$>>>24,A[L+2]=$>>>16&255,A[L+1]=$>>>8&255,A[L]=$&255)}return A}m.split32=a;function g(T,_){return T>>>_|T<<32-_}m.rotr32=g;function v(T,_){return T<<_|T>>>32-_}m.rotl32=v;function h(T,_){return T+_>>>0}m.sum32=h;function w(T,_,A){return T+_+A>>>0}m.sum32_3=w;function y(T,_,A,P){return T+_+A+P>>>0}m.sum32_4=y;function S(T,_,A,P,L){return T+_+A+P+L>>>0}m.sum32_5=S;function E(T,_,A,P){var L=T[_],$=T[_+1],R=P+$>>>0,k=(R>>0,T[_+1]=R}m.sum64=E;function I(T,_,A,P){var L=_+P>>>0,$=(L<_?1:0)+T+A;return $>>>0}m.sum64_hi=I;function F(T,_,A,P){var L=_+P;return L>>>0}m.sum64_lo=F;function B(T,_,A,P,L,$,R,k){var C=0,O=_;O=O+P>>>0,C+=O<_?1:0,O=O+$>>>0,C+=O<$?1:0,O=O+k>>>0,C+=O>>0}m.sum64_4_hi=B;function j(T,_,A,P,L,$,R,k){var C=_+P+$+k;return C>>>0}m.sum64_4_lo=j;function X(T,_,A,P,L,$,R,k,C,O){var W=0,ne=_;ne=ne+P>>>0,W+=ne<_?1:0,ne=ne+$>>>0,W+=ne<$?1:0,ne=ne+k>>>0,W+=ne>>0,W+=ne>>0}m.sum64_5_hi=X;function G(T,_,A,P,L,$,R,k,C,O){var W=_+P+$+k+O;return W>>>0}m.sum64_5_lo=G;function V(T,_,A){var P=_<<32-A|T>>>A;return P>>>0}m.rotr64_hi=V;function J(T,_,A){var P=T<<32-A|_>>>A;return P>>>0}m.rotr64_lo=J;function H(T,_,A){return T>>>A}m.shr64_hi=H;function M(T,_,A){var P=T<<32-A|_>>>A;return P>>>0}m.shr64_lo=M},{inherits:440,"minimalistic-assert":453}],438:[function(e,d,m){var f=e("hash.js"),c=e("minimalistic-crypto-utils"),u=e("minimalistic-assert");function s(t){if(!(this instanceof s))return new s(t);this.hash=t.hash,this.predResist=!!t.predResist,this.outLen=this.hash.outSize,this.minEntropy=t.minEntropy||this.hash.hmacStrength,this._reseed=null,this.reseedInterval=null,this.K=null,this.V=null;var n=c.toArray(t.entropy,t.entropyEnc||"hex"),r=c.toArray(t.nonce,t.nonceEnc||"hex"),i=c.toArray(t.pers,t.persEnc||"hex");u(n.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._init(n,r,i)}d.exports=s,s.prototype._init=function(n,r,i){var o=n.concat(r).concat(i);this.K=new Array(this.outLen/8),this.V=new Array(this.outLen/8);for(var l=0;l=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._update(n.concat(i||[])),this._reseed=1},s.prototype.generate=function(n,r,i,o){if(this._reseed>this.reseedInterval)throw new Error("Reseed is required");typeof r!="string"&&(o=i,i=r,r=null),i&&(i=c.toArray(i,o||"hex"),this._update(i));for(var l=[];l.length */m.read=function(f,c,u,s,t){var n,r,i=t*8-s-1,o=(1<>1,a=-7,g=u?t-1:0,v=u?-1:1,h=f[c+g];for(g+=v,n=h&(1<<-a)-1,h>>=-a,a+=i;a>0;n=n*256+f[c+g],g+=v,a-=8);for(r=n&(1<<-a)-1,n>>=-a,a+=s;a>0;r=r*256+f[c+g],g+=v,a-=8);if(n===0)n=1-l;else{if(n===o)return r?NaN:(h?-1:1)*(1/0);r=r+Math.pow(2,s),n=n-l}return(h?-1:1)*r*Math.pow(2,n-s)},m.write=function(f,c,u,s,t,n){var r,i,o,l=n*8-t-1,a=(1<>1,v=t===23?Math.pow(2,-24)-Math.pow(2,-77):0,h=s?0:n-1,w=s?1:-1,y=c<0||c===0&&1/c<0?1:0;for(c=Math.abs(c),isNaN(c)||c===1/0?(i=isNaN(c)?1:0,r=a):(r=Math.floor(Math.log(c)/Math.LN2),c*(o=Math.pow(2,-r))<1&&(r--,o*=2),r+g>=1?c+=v/o:c+=v*Math.pow(2,1-g),c*o>=2&&(r++,o/=2),r+g>=a?(i=0,r=a):r+g>=1?(i=(c*o-1)*Math.pow(2,t),r=r+g):(i=c*Math.pow(2,g-1)*Math.pow(2,t),r=0));t>=8;f[u+h]=i&255,h+=w,i/=256,t-=8);for(r=r<0;f[u+h]=r&255,h+=w,r/=256,l-=8);f[u+h-w]|=y*128}},{}],440:[function(e,d,m){typeof Object.create=="function"?d.exports=function(c,u){u&&(c.super_=u,c.prototype=Object.create(u.prototype,{constructor:{value:c,enumerable:!1,writable:!0,configurable:!0}}))}:d.exports=function(c,u){if(u){c.super_=u;var s=function(){};s.prototype=u.prototype,c.prototype=new s,c.prototype.constructor=c}}},{}],441:[function(e,d,m){(function(f,c,u,s,t,n,r,i){(function(){/*! + + JSZip v3.10.1 - A JavaScript class for generating and reading zip files + + + (c) 2009-2016 Stuart Knightley + Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown. + + JSZip uses the library pako released under the MIT license : + https://github.com/nodeca/pako/blob/main/LICENSE + */(function(o){typeof m=="object"&&typeof d<"u"?d.exports=o():(typeof window<"u"?window:typeof c<"u"?c:typeof self<"u"?self:this).JSZip=o()})(function(){return function o(l,a,g){function v(y,S){if(!a[y]){if(!l[y]){var E=typeof e=="function"&&e;if(!S&&E)return E(y,!0);if(h)return h(y,!0);var I=new Error("Cannot find module '"+y+"'");throw I.code="MODULE_NOT_FOUND",I}var F=a[y]={exports:{}};l[y][0].call(F.exports,function(B){var j=l[y][1][B];return v(j||B)},F,F.exports,o,l,a,g)}return a[y].exports}for(var h=typeof e=="function"&&e,w=0;w>2,F=(3&y)<<4|S>>4,B=1>6:64,j=2>4,S=(15&I)<<4|(F=h.indexOf(w.charAt(j++)))>>2,E=(3&F)<<6|(B=h.indexOf(w.charAt(j++))),V[X++]=y,F!==64&&(V[X++]=S),B!==64&&(V[X++]=E);return V}},{"./support":30,"./utils":32}],2:[function(o,l,a){var g=o("./external"),v=o("./stream/DataWorker"),h=o("./stream/Crc32Probe"),w=o("./stream/DataLengthProbe");function y(S,E,I,F,B){this.compressedSize=S,this.uncompressedSize=E,this.crc32=I,this.compression=F,this.compressedContent=B}y.prototype={getContentWorker:function(){var S=new v(g.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new w("data_length")),E=this;return S.on("end",function(){if(this.streamInfo.data_length!==E.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")}),S},getCompressedWorker:function(){return new v(g.Promise.resolve(this.compressedContent)).withStreamInfo("compressedSize",this.compressedSize).withStreamInfo("uncompressedSize",this.uncompressedSize).withStreamInfo("crc32",this.crc32).withStreamInfo("compression",this.compression)}},y.createWorkerFrom=function(S,E,I){return S.pipe(new h).pipe(new w("uncompressedSize")).pipe(E.compressWorker(I)).pipe(new w("compressedSize")).withStreamInfo("compression",E)},l.exports=y},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(o,l,a){var g=o("./stream/GenericWorker");a.STORE={magic:"\0\0",compressWorker:function(){return new g("STORE compression")},uncompressWorker:function(){return new g("STORE decompression")}},a.DEFLATE=o("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(o,l,a){var g=o("./utils"),v=function(){for(var h,w=[],y=0;y<256;y++){h=y;for(var S=0;S<8;S++)h=1&h?3988292384^h>>>1:h>>>1;w[y]=h}return w}();l.exports=function(h,w){return h!==void 0&&h.length?g.getTypeOf(h)!=="string"?function(y,S,E,I){var F=v,B=I+E;y^=-1;for(var j=I;j>>8^F[255&(y^S[j])];return-1^y}(0|w,h,h.length,0):function(y,S,E,I){var F=v,B=I+E;y^=-1;for(var j=I;j>>8^F[255&(y^S.charCodeAt(j))];return-1^y}(0|w,h,h.length,0):0}},{"./utils":32}],5:[function(o,l,a){a.base64=!1,a.binary=!1,a.dir=!1,a.createFolders=!0,a.date=null,a.compression=null,a.compressionOptions=null,a.comment=null,a.unixPermissions=null,a.dosPermissions=null},{}],6:[function(o,l,a){var g=null;g=typeof Promise<"u"?Promise:o("lie"),l.exports={Promise:g}},{lie:37}],7:[function(o,l,a){var g=typeof Uint8Array<"u"&&typeof Uint16Array<"u"&&typeof Uint32Array<"u",v=o("pako"),h=o("./utils"),w=o("./stream/GenericWorker"),y=g?"uint8array":"array";function S(E,I){w.call(this,"FlateWorker/"+E),this._pako=null,this._pakoAction=E,this._pakoOptions=I,this.meta={}}a.magic="\b\0",h.inherits(S,w),S.prototype.processChunk=function(E){this.meta=E.meta,this._pako===null&&this._createPako(),this._pako.push(h.transformTo(y,E.data),!1)},S.prototype.flush=function(){w.prototype.flush.call(this),this._pako===null&&this._createPako(),this._pako.push([],!0)},S.prototype.cleanUp=function(){w.prototype.cleanUp.call(this),this._pako=null},S.prototype._createPako=function(){this._pako=new v[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var E=this;this._pako.onData=function(I){E.push({data:I,meta:E.meta})}},a.compressWorker=function(E){return new S("Deflate",E)},a.uncompressWorker=function(){return new S("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(o,l,a){function g(F,B){var j,X="";for(j=0;j>>=8;return X}function v(F,B,j,X,G,V){var J,H,M=F.file,T=F.compression,_=V!==y.utf8encode,A=h.transformTo("string",V(M.name)),P=h.transformTo("string",y.utf8encode(M.name)),L=M.comment,$=h.transformTo("string",V(L)),R=h.transformTo("string",y.utf8encode(L)),k=P.length!==M.name.length,C=R.length!==L.length,O="",W="",ne="",he=M.dir,ue=M.date,Ae={crc32:0,compressedSize:0,uncompressedSize:0};B&&!j||(Ae.crc32=F.crc32,Ae.compressedSize=F.compressedSize,Ae.uncompressedSize=F.uncompressedSize);var pe=0;B&&(pe|=8),_||!k&&!C||(pe|=2048);var te=0,Z=0;he&&(te|=16),G==="UNIX"?(Z=798,te|=function(de,ke){var oe=de;return de||(oe=ke?16893:33204),(65535&oe)<<16}(M.unixPermissions,he)):(Z=20,te|=function(de){return 63&(de||0)}(M.dosPermissions)),J=ue.getUTCHours(),J<<=6,J|=ue.getUTCMinutes(),J<<=5,J|=ue.getUTCSeconds()/2,H=ue.getUTCFullYear()-1980,H<<=4,H|=ue.getUTCMonth()+1,H<<=5,H|=ue.getUTCDate(),k&&(W=g(1,1)+g(S(A),4)+P,O+="up"+g(W.length,2)+W),C&&(ne=g(1,1)+g(S($),4)+R,O+="uc"+g(ne.length,2)+ne);var q="";return q+=` +\0`,q+=g(pe,2),q+=T.magic,q+=g(J,2),q+=g(H,2),q+=g(Ae.crc32,4),q+=g(Ae.compressedSize,4),q+=g(Ae.uncompressedSize,4),q+=g(A.length,2),q+=g(O.length,2),{fileRecord:E.LOCAL_FILE_HEADER+q+A+O,dirRecord:E.CENTRAL_FILE_HEADER+g(Z,2)+q+g($.length,2)+"\0\0\0\0"+g(te,4)+g(X,4)+A+O+$}}var h=o("../utils"),w=o("../stream/GenericWorker"),y=o("../utf8"),S=o("../crc32"),E=o("../signature");function I(F,B,j,X){w.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=B,this.zipPlatform=j,this.encodeFileName=X,this.streamFiles=F,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}h.inherits(I,w),I.prototype.push=function(F){var B=F.meta.percent||0,j=this.entriesCount,X=this._sources.length;this.accumulate?this.contentBuffer.push(F):(this.bytesWritten+=F.data.length,w.prototype.push.call(this,{data:F.data,meta:{currentFile:this.currentFile,percent:j?(B+100*(j-X-1))/j:100}}))},I.prototype.openedSource=function(F){this.currentSourceOffset=this.bytesWritten,this.currentFile=F.file.name;var B=this.streamFiles&&!F.file.dir;if(B){var j=v(F,B,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:j.fileRecord,meta:{percent:0}})}else this.accumulate=!0},I.prototype.closedSource=function(F){this.accumulate=!1;var B=this.streamFiles&&!F.file.dir,j=v(F,B,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(j.dirRecord),B)this.push({data:function(X){return E.DATA_DESCRIPTOR+g(X.crc32,4)+g(X.compressedSize,4)+g(X.uncompressedSize,4)}(F),meta:{percent:100}});else for(this.push({data:j.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},I.prototype.flush=function(){for(var F=this.bytesWritten,B=0;B=this.index;w--)y=(y<<8)+this.byteAt(w);return this.index+=h,y},readString:function(h){return g.transformTo("string",this.readData(h))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var h=this.readInt(4);return new Date(Date.UTC(1980+(h>>25&127),(h>>21&15)-1,h>>16&31,h>>11&31,h>>5&63,(31&h)<<1))}},l.exports=v},{"../utils":32}],19:[function(o,l,a){var g=o("./Uint8ArrayReader");function v(h){g.call(this,h)}o("../utils").inherits(v,g),v.prototype.readData=function(h){this.checkOffset(h);var w=this.data.slice(this.zero+this.index,this.zero+this.index+h);return this.index+=h,w},l.exports=v},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(o,l,a){var g=o("./DataReader");function v(h){g.call(this,h)}o("../utils").inherits(v,g),v.prototype.byteAt=function(h){return this.data.charCodeAt(this.zero+h)},v.prototype.lastIndexOfSignature=function(h){return this.data.lastIndexOf(h)-this.zero},v.prototype.readAndCheckSignature=function(h){return h===this.readData(4)},v.prototype.readData=function(h){this.checkOffset(h);var w=this.data.slice(this.zero+this.index,this.zero+this.index+h);return this.index+=h,w},l.exports=v},{"../utils":32,"./DataReader":18}],21:[function(o,l,a){var g=o("./ArrayReader");function v(h){g.call(this,h)}o("../utils").inherits(v,g),v.prototype.readData=function(h){if(this.checkOffset(h),h===0)return new Uint8Array(0);var w=this.data.subarray(this.zero+this.index,this.zero+this.index+h);return this.index+=h,w},l.exports=v},{"../utils":32,"./ArrayReader":17}],22:[function(o,l,a){var g=o("../utils"),v=o("../support"),h=o("./ArrayReader"),w=o("./StringReader"),y=o("./NodeBufferReader"),S=o("./Uint8ArrayReader");l.exports=function(E){var I=g.getTypeOf(E);return g.checkSupport(I),I!=="string"||v.uint8array?I==="nodebuffer"?new y(E):v.uint8array?new S(g.transformTo("uint8array",E)):new h(g.transformTo("array",E)):new w(E)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(o,l,a){a.LOCAL_FILE_HEADER="PK",a.CENTRAL_FILE_HEADER="PK",a.CENTRAL_DIRECTORY_END="PK",a.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK\x07",a.ZIP64_CENTRAL_DIRECTORY_END="PK",a.DATA_DESCRIPTOR="PK\x07\b"},{}],24:[function(o,l,a){var g=o("./GenericWorker"),v=o("../utils");function h(w){g.call(this,"ConvertWorker to "+w),this.destType=w}v.inherits(h,g),h.prototype.processChunk=function(w){this.push({data:v.transformTo(this.destType,w.data),meta:w.meta})},l.exports=h},{"../utils":32,"./GenericWorker":28}],25:[function(o,l,a){var g=o("./GenericWorker"),v=o("../crc32");function h(){g.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}o("../utils").inherits(h,g),h.prototype.processChunk=function(w){this.streamInfo.crc32=v(w.data,this.streamInfo.crc32||0),this.push(w)},l.exports=h},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(o,l,a){var g=o("../utils"),v=o("./GenericWorker");function h(w){v.call(this,"DataLengthProbe for "+w),this.propName=w,this.withStreamInfo(w,0)}g.inherits(h,v),h.prototype.processChunk=function(w){if(w){var y=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=y+w.data.length}v.prototype.processChunk.call(this,w)},l.exports=h},{"../utils":32,"./GenericWorker":28}],27:[function(o,l,a){var g=o("../utils"),v=o("./GenericWorker");function h(w){v.call(this,"DataWorker");var y=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,w.then(function(S){y.dataIsReady=!0,y.data=S,y.max=S&&S.length||0,y.type=g.getTypeOf(S),y.isPaused||y._tickAndRepeat()},function(S){y.error(S)})}g.inherits(h,v),h.prototype.cleanUp=function(){v.prototype.cleanUp.call(this),this.data=null},h.prototype.resume=function(){return!!v.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,g.delay(this._tickAndRepeat,[],this)),!0)},h.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(g.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},h.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var w=null,y=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":w=this.data.substring(this.index,y);break;case"uint8array":w=this.data.subarray(this.index,y);break;case"array":case"nodebuffer":w=this.data.slice(this.index,y)}return this.index=y,this.push({data:w,meta:{percent:this.max?this.index/this.max*100:0}})},l.exports=h},{"../utils":32,"./GenericWorker":28}],28:[function(o,l,a){function g(v){this.name=v||"default",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}g.prototype={push:function(v){this.emit("data",v)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(v){this.emit("error",v)}return!0},error:function(v){return!this.isFinished&&(this.isPaused?this.generatedError=v:(this.isFinished=!0,this.emit("error",v),this.previous&&this.previous.error(v),this.cleanUp()),!0)},on:function(v,h){return this._listeners[v].push(h),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(v,h){if(this._listeners[v])for(var w=0;w "+v:v}},l.exports=g},{}],29:[function(o,l,a){var g=o("../utils"),v=o("./ConvertWorker"),h=o("./GenericWorker"),w=o("../base64"),y=o("../support"),S=o("../external"),E=null;if(y.nodestream)try{E=o("../nodejs/NodejsStreamOutputAdapter")}catch{}function I(B,j){return new S.Promise(function(X,G){var V=[],J=B._internalType,H=B._outputType,M=B._mimeType;B.on("data",function(T,_){V.push(T),j&&j(_)}).on("error",function(T){V=[],G(T)}).on("end",function(){try{var T=function(_,A,P){switch(_){case"blob":return g.newBlob(g.transformTo("arraybuffer",A),P);case"base64":return w.encode(A);default:return g.transformTo(_,A)}}(H,function(_,A){var P,L=0,$=null,R=0;for(P=0;P"u")a.blob=!1;else{var g=new ArrayBuffer(0);try{a.blob=new Blob([g],{type:"application/zip"}).size===0}catch{try{var v=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);v.append(g),a.blob=v.getBlob("application/zip").size===0}catch{a.blob=!1}}}try{a.nodestream=!!o("readable-stream").Readable}catch{a.nodestream=!1}},{"readable-stream":16}],31:[function(o,l,a){for(var g=o("./utils"),v=o("./support"),h=o("./nodejsUtils"),w=o("./stream/GenericWorker"),y=new Array(256),S=0;S<256;S++)y[S]=252<=S?6:248<=S?5:240<=S?4:224<=S?3:192<=S?2:1;y[254]=y[254]=1;function E(){w.call(this,"utf-8 decode"),this.leftOver=null}function I(){w.call(this,"utf-8 encode")}a.utf8encode=function(F){return v.nodebuffer?h.newBufferFrom(F,"utf-8"):function(B){var j,X,G,V,J,H=B.length,M=0;for(V=0;V>>6:(X<65536?j[J++]=224|X>>>12:(j[J++]=240|X>>>18,j[J++]=128|X>>>12&63),j[J++]=128|X>>>6&63),j[J++]=128|63&X);return j}(F)},a.utf8decode=function(F){return v.nodebuffer?g.transformTo("nodebuffer",F).toString("utf-8"):function(B){var j,X,G,V,J=B.length,H=new Array(2*J);for(j=X=0;j>10&1023,H[X++]=56320|1023&G)}return H.length!==X&&(H.subarray?H=H.subarray(0,X):H.length=X),g.applyFromCharCode(H)}(F=g.transformTo(v.uint8array?"uint8array":"array",F))},g.inherits(E,w),E.prototype.processChunk=function(F){var B=g.transformTo(v.uint8array?"uint8array":"array",F.data);if(this.leftOver&&this.leftOver.length){if(v.uint8array){var j=B;(B=new Uint8Array(j.length+this.leftOver.length)).set(this.leftOver,0),B.set(j,this.leftOver.length)}else B=this.leftOver.concat(B);this.leftOver=null}var X=function(V,J){var H;for((J=J||V.length)>V.length&&(J=V.length),H=J-1;0<=H&&(192&V[H])==128;)H--;return H<0||H===0?J:H+y[V[H]]>J?H:J}(B),G=B;X!==B.length&&(v.uint8array?(G=B.subarray(0,X),this.leftOver=B.subarray(X,B.length)):(G=B.slice(0,X),this.leftOver=B.slice(X,B.length))),this.push({data:a.utf8decode(G),meta:F.meta})},E.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:a.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},a.Utf8DecodeWorker=E,g.inherits(I,w),I.prototype.processChunk=function(F){this.push({data:a.utf8encode(F.data),meta:F.meta})},a.Utf8EncodeWorker=I},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(o,l,a){var g=o("./support"),v=o("./base64"),h=o("./nodejsUtils"),w=o("./external");function y(j){return j}function S(j,X){for(var G=0;G>8;this.dir=!!(16&this.externalFileAttributes),F==0&&(this.dosPermissions=63&this.externalFileAttributes),F==3&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||this.fileNameStr.slice(-1)!=="/"||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var F=g(this.extraFields[1].value);this.uncompressedSize===v.MAX_VALUE_32BITS&&(this.uncompressedSize=F.readInt(8)),this.compressedSize===v.MAX_VALUE_32BITS&&(this.compressedSize=F.readInt(8)),this.localHeaderOffset===v.MAX_VALUE_32BITS&&(this.localHeaderOffset=F.readInt(8)),this.diskNumberStart===v.MAX_VALUE_32BITS&&(this.diskNumberStart=F.readInt(4))}},readExtraFields:function(F){var B,j,X,G=F.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});F.index+4>>6:(F<65536?I[X++]=224|F>>>12:(I[X++]=240|F>>>18,I[X++]=128|F>>>12&63),I[X++]=128|F>>>6&63),I[X++]=128|63&F);return I},a.buf2binstring=function(E){return S(E,E.length)},a.binstring2buf=function(E){for(var I=new g.Buf8(E.length),F=0,B=I.length;F>10&1023,V[B++]=56320|1023&j)}return S(V,B)},a.utf8border=function(E,I){var F;for((I=I||E.length)>E.length&&(I=E.length),F=I-1;0<=F&&(192&E[F])==128;)F--;return F<0||F===0?I:F+w[E[F]]>I?F:I}},{"./common":41}],43:[function(o,l,a){l.exports=function(g,v,h,w){for(var y=65535&g|0,S=g>>>16&65535|0,E=0;h!==0;){for(h-=E=2e3>>1:v>>>1;h[w]=v}return h}();l.exports=function(v,h,w,y){var S=g,E=y+w;v^=-1;for(var I=y;I>>8^S[255&(v^h[I])];return-1^v}},{}],46:[function(o,l,a){var g,v=o("../utils/common"),h=o("./trees"),w=o("./adler32"),y=o("./crc32"),S=o("./messages"),E=0,I=4,F=0,B=-2,j=-1,X=4,G=2,V=8,J=9,H=286,M=30,T=19,_=2*H+1,A=15,P=3,L=258,$=L+P+1,R=42,k=113,C=1,O=2,W=3,ne=4;function he(U,ve){return U.msg=S[ve],ve}function ue(U){return(U<<1)-(4U.avail_out&&(Se=U.avail_out),Se!==0&&(v.arraySet(U.output,ve.pending_buf,ve.pending_out,Se,U.next_out),U.next_out+=Se,ve.pending_out+=Se,U.total_out+=Se,U.avail_out-=Se,ve.pending-=Se,ve.pending===0&&(ve.pending_out=0))}function te(U,ve){h._tr_flush_block(U,0<=U.block_start?U.block_start:-1,U.strstart-U.block_start,ve),U.block_start=U.strstart,pe(U.strm)}function Z(U,ve){U.pending_buf[U.pending++]=ve}function q(U,ve){U.pending_buf[U.pending++]=ve>>>8&255,U.pending_buf[U.pending++]=255&ve}function de(U,ve){var Se,ee,se=U.max_chain_length,me=U.strstart,Ee=U.prev_length,Ie=U.nice_match,Ce=U.strstart>U.w_size-$?U.strstart-(U.w_size-$):0,Fe=U.window,ze=U.w_mask,je=U.prev,ge=U.strstart+L,Me=Fe[me+Ee-1],Be=Fe[me+Ee];U.prev_length>=U.good_match&&(se>>=2),Ie>U.lookahead&&(Ie=U.lookahead);do if(Fe[(Se=ve)+Ee]===Be&&Fe[Se+Ee-1]===Me&&Fe[Se]===Fe[me]&&Fe[++Se]===Fe[me+1]){me+=2,Se++;do;while(Fe[++me]===Fe[++Se]&&Fe[++me]===Fe[++Se]&&Fe[++me]===Fe[++Se]&&Fe[++me]===Fe[++Se]&&Fe[++me]===Fe[++Se]&&Fe[++me]===Fe[++Se]&&Fe[++me]===Fe[++Se]&&Fe[++me]===Fe[++Se]&&meCe&&--se!=0);return Ee<=U.lookahead?Ee:U.lookahead}function ke(U){var ve,Se,ee,se,me,Ee,Ie,Ce,Fe,ze,je=U.w_size;do{if(se=U.window_size-U.lookahead-U.strstart,U.strstart>=je+(je-$)){for(v.arraySet(U.window,U.window,je,je,0),U.match_start-=je,U.strstart-=je,U.block_start-=je,ve=Se=U.hash_size;ee=U.head[--ve],U.head[ve]=je<=ee?ee-je:0,--Se;);for(ve=Se=je;ee=U.prev[--ve],U.prev[ve]=je<=ee?ee-je:0,--Se;);se+=je}if(U.strm.avail_in===0)break;if(Ee=U.strm,Ie=U.window,Ce=U.strstart+U.lookahead,Fe=se,ze=void 0,ze=Ee.avail_in,Fe=P)for(me=U.strstart-U.insert,U.ins_h=U.window[me],U.ins_h=(U.ins_h<=P&&(U.ins_h=(U.ins_h<=P)if(ee=h._tr_tally(U,U.strstart-U.match_start,U.match_length-P),U.lookahead-=U.match_length,U.match_length<=U.max_lazy_match&&U.lookahead>=P){for(U.match_length--;U.strstart++,U.ins_h=(U.ins_h<=P&&(U.ins_h=(U.ins_h<=P&&U.match_length<=U.prev_length){for(se=U.strstart+U.lookahead-P,ee=h._tr_tally(U,U.strstart-1-U.prev_match,U.prev_length-P),U.lookahead-=U.prev_length-1,U.prev_length-=2;++U.strstart<=se&&(U.ins_h=(U.ins_h<U.pending_buf_size-5&&(Se=U.pending_buf_size-5);;){if(U.lookahead<=1){if(ke(U),U.lookahead===0&&ve===E)return C;if(U.lookahead===0)break}U.strstart+=U.lookahead,U.lookahead=0;var ee=U.block_start+Se;if((U.strstart===0||U.strstart>=ee)&&(U.lookahead=U.strstart-ee,U.strstart=ee,te(U,!1),U.strm.avail_out===0)||U.strstart-U.block_start>=U.w_size-$&&(te(U,!1),U.strm.avail_out===0))return C}return U.insert=0,ve===I?(te(U,!0),U.strm.avail_out===0?W:ne):(U.strstart>U.block_start&&(te(U,!1),U.strm.avail_out),C)}),new Q(4,4,8,4,oe),new Q(4,5,16,8,oe),new Q(4,6,32,32,oe),new Q(4,4,16,16,ie),new Q(8,16,32,32,ie),new Q(8,16,128,128,ie),new Q(8,32,128,256,ie),new Q(32,128,258,1024,ie),new Q(32,258,258,4096,ie)],a.deflateInit=function(U,ve){return we(U,ve,V,15,8,0)},a.deflateInit2=we,a.deflateReset=fe,a.deflateResetKeep=Y,a.deflateSetHeader=function(U,ve){return U&&U.state?U.state.wrap!==2?B:(U.state.gzhead=ve,F):B},a.deflate=function(U,ve){var Se,ee,se,me;if(!U||!U.state||5>8&255),Z(ee,ee.gzhead.time>>16&255),Z(ee,ee.gzhead.time>>24&255),Z(ee,ee.level===9?2:2<=ee.strategy||ee.level<2?4:0),Z(ee,255&ee.gzhead.os),ee.gzhead.extra&&ee.gzhead.extra.length&&(Z(ee,255&ee.gzhead.extra.length),Z(ee,ee.gzhead.extra.length>>8&255)),ee.gzhead.hcrc&&(U.adler=y(U.adler,ee.pending_buf,ee.pending,0)),ee.gzindex=0,ee.status=69):(Z(ee,0),Z(ee,0),Z(ee,0),Z(ee,0),Z(ee,0),Z(ee,ee.level===9?2:2<=ee.strategy||ee.level<2?4:0),Z(ee,3),ee.status=k);else{var Ee=V+(ee.w_bits-8<<4)<<8;Ee|=(2<=ee.strategy||ee.level<2?0:ee.level<6?1:ee.level===6?2:3)<<6,ee.strstart!==0&&(Ee|=32),Ee+=31-Ee%31,ee.status=k,q(ee,Ee),ee.strstart!==0&&(q(ee,U.adler>>>16),q(ee,65535&U.adler)),U.adler=1}if(ee.status===69)if(ee.gzhead.extra){for(se=ee.pending;ee.gzindex<(65535&ee.gzhead.extra.length)&&(ee.pending!==ee.pending_buf_size||(ee.gzhead.hcrc&&ee.pending>se&&(U.adler=y(U.adler,ee.pending_buf,ee.pending-se,se)),pe(U),se=ee.pending,ee.pending!==ee.pending_buf_size));)Z(ee,255&ee.gzhead.extra[ee.gzindex]),ee.gzindex++;ee.gzhead.hcrc&&ee.pending>se&&(U.adler=y(U.adler,ee.pending_buf,ee.pending-se,se)),ee.gzindex===ee.gzhead.extra.length&&(ee.gzindex=0,ee.status=73)}else ee.status=73;if(ee.status===73)if(ee.gzhead.name){se=ee.pending;do{if(ee.pending===ee.pending_buf_size&&(ee.gzhead.hcrc&&ee.pending>se&&(U.adler=y(U.adler,ee.pending_buf,ee.pending-se,se)),pe(U),se=ee.pending,ee.pending===ee.pending_buf_size)){me=1;break}me=ee.gzindexse&&(U.adler=y(U.adler,ee.pending_buf,ee.pending-se,se)),me===0&&(ee.gzindex=0,ee.status=91)}else ee.status=91;if(ee.status===91)if(ee.gzhead.comment){se=ee.pending;do{if(ee.pending===ee.pending_buf_size&&(ee.gzhead.hcrc&&ee.pending>se&&(U.adler=y(U.adler,ee.pending_buf,ee.pending-se,se)),pe(U),se=ee.pending,ee.pending===ee.pending_buf_size)){me=1;break}me=ee.gzindexse&&(U.adler=y(U.adler,ee.pending_buf,ee.pending-se,se)),me===0&&(ee.status=103)}else ee.status=103;if(ee.status===103&&(ee.gzhead.hcrc?(ee.pending+2>ee.pending_buf_size&&pe(U),ee.pending+2<=ee.pending_buf_size&&(Z(ee,255&U.adler),Z(ee,U.adler>>8&255),U.adler=0,ee.status=k)):ee.status=k),ee.pending!==0){if(pe(U),U.avail_out===0)return ee.last_flush=-1,F}else if(U.avail_in===0&&ue(ve)<=ue(Se)&&ve!==I)return he(U,-5);if(ee.status===666&&U.avail_in!==0)return he(U,-5);if(U.avail_in!==0||ee.lookahead!==0||ve!==E&&ee.status!==666){var Ie=ee.strategy===2?function(Ce,Fe){for(var ze;;){if(Ce.lookahead===0&&(ke(Ce),Ce.lookahead===0)){if(Fe===E)return C;break}if(Ce.match_length=0,ze=h._tr_tally(Ce,0,Ce.window[Ce.strstart]),Ce.lookahead--,Ce.strstart++,ze&&(te(Ce,!1),Ce.strm.avail_out===0))return C}return Ce.insert=0,Fe===I?(te(Ce,!0),Ce.strm.avail_out===0?W:ne):Ce.last_lit&&(te(Ce,!1),Ce.strm.avail_out===0)?C:O}(ee,ve):ee.strategy===3?function(Ce,Fe){for(var ze,je,ge,Me,Be=Ce.window;;){if(Ce.lookahead<=L){if(ke(Ce),Ce.lookahead<=L&&Fe===E)return C;if(Ce.lookahead===0)break}if(Ce.match_length=0,Ce.lookahead>=P&&0Ce.lookahead&&(Ce.match_length=Ce.lookahead)}if(Ce.match_length>=P?(ze=h._tr_tally(Ce,1,Ce.match_length-P),Ce.lookahead-=Ce.match_length,Ce.strstart+=Ce.match_length,Ce.match_length=0):(ze=h._tr_tally(Ce,0,Ce.window[Ce.strstart]),Ce.lookahead--,Ce.strstart++),ze&&(te(Ce,!1),Ce.strm.avail_out===0))return C}return Ce.insert=0,Fe===I?(te(Ce,!0),Ce.strm.avail_out===0?W:ne):Ce.last_lit&&(te(Ce,!1),Ce.strm.avail_out===0)?C:O}(ee,ve):g[ee.level].func(ee,ve);if(Ie!==W&&Ie!==ne||(ee.status=666),Ie===C||Ie===W)return U.avail_out===0&&(ee.last_flush=-1),F;if(Ie===O&&(ve===1?h._tr_align(ee):ve!==5&&(h._tr_stored_block(ee,0,0,!1),ve===3&&(Ae(ee.head),ee.lookahead===0&&(ee.strstart=0,ee.block_start=0,ee.insert=0))),pe(U),U.avail_out===0))return ee.last_flush=-1,F}return ve!==I?F:ee.wrap<=0?1:(ee.wrap===2?(Z(ee,255&U.adler),Z(ee,U.adler>>8&255),Z(ee,U.adler>>16&255),Z(ee,U.adler>>24&255),Z(ee,255&U.total_in),Z(ee,U.total_in>>8&255),Z(ee,U.total_in>>16&255),Z(ee,U.total_in>>24&255)):(q(ee,U.adler>>>16),q(ee,65535&U.adler)),pe(U),0=Se.w_size&&(me===0&&(Ae(Se.head),Se.strstart=0,Se.block_start=0,Se.insert=0),Fe=new v.Buf8(Se.w_size),v.arraySet(Fe,ve,ze-Se.w_size,Se.w_size,0),ve=Fe,ze=Se.w_size),Ee=U.avail_in,Ie=U.next_in,Ce=U.input,U.avail_in=ze,U.next_in=0,U.input=ve,ke(Se);Se.lookahead>=P;){for(ee=Se.strstart,se=Se.lookahead-(P-1);Se.ins_h=(Se.ins_h<>>=P=A>>>24,J-=P,(P=A>>>16&255)===0)O[S++]=65535&A;else{if(!(16&P)){if(!(64&P)){A=H[(65535&A)+(V&(1<>>=P,J-=P),J<15&&(V+=C[w++]<>>=P=A>>>24,J-=P,!(16&(P=A>>>16&255))){if(!(64&P)){A=M[(65535&A)+(V&(1<>>=P,J-=P,(P=S-E)<$){if(j<(P=$-P)&&h.sane){g.msg="invalid distance too far back",h.mode=30;break e}if(k=G,(R=0)===X){if(R+=B-P,P>3,V&=(1<<(J-=L<<3))-1,g.next_in=w,g.next_out=S,g.avail_in=w>>24&255)+(R>>>8&65280)+((65280&R)<<8)+((255&R)<<24)}function V(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new g.Buf16(320),this.work=new g.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function J(R){var k;return R&&R.state?(k=R.state,R.total_in=R.total_out=k.total=0,R.msg="",k.wrap&&(R.adler=1&k.wrap),k.mode=B,k.last=0,k.havedict=0,k.dmax=32768,k.head=null,k.hold=0,k.bits=0,k.lencode=k.lendyn=new g.Buf32(j),k.distcode=k.distdyn=new g.Buf32(X),k.sane=1,k.back=-1,I):F}function H(R){var k;return R&&R.state?((k=R.state).wsize=0,k.whave=0,k.wnext=0,J(R)):F}function M(R,k){var C,O;return R&&R.state?(O=R.state,k<0?(C=0,k=-k):(C=1+(k>>4),k<48&&(k&=15)),k&&(k<8||15=ne.wsize?(g.arraySet(ne.window,k,C-ne.wsize,ne.wsize,0),ne.wnext=0,ne.whave=ne.wsize):(O<(W=ne.wsize-ne.wnext)&&(W=O),g.arraySet(ne.window,k,C-O,W,ne.wnext),(O-=W)?(g.arraySet(ne.window,k,C-O,O,0),ne.wnext=O,ne.whave=ne.wsize):(ne.wnext+=W,ne.wnext===ne.wsize&&(ne.wnext=0),ne.whave>>8&255,C.check=h(C.check,me,2,0),te=pe=0,C.mode=2;break}if(C.flags=0,C.head&&(C.head.done=!1),!(1&C.wrap)||(((255&pe)<<8)+(pe>>8))%31){R.msg="incorrect header check",C.mode=30;break}if((15&pe)!=8){R.msg="unknown compression method",C.mode=30;break}if(te-=4,U=8+(15&(pe>>>=4)),C.wbits===0)C.wbits=U;else if(U>C.wbits){R.msg="invalid window size",C.mode=30;break}C.dmax=1<>8&1),512&C.flags&&(me[0]=255&pe,me[1]=pe>>>8&255,C.check=h(C.check,me,2,0)),te=pe=0,C.mode=3;case 3:for(;te<32;){if(ue===0)break e;ue--,pe+=O[ne++]<>>8&255,me[2]=pe>>>16&255,me[3]=pe>>>24&255,C.check=h(C.check,me,4,0)),te=pe=0,C.mode=4;case 4:for(;te<16;){if(ue===0)break e;ue--,pe+=O[ne++]<>8),512&C.flags&&(me[0]=255&pe,me[1]=pe>>>8&255,C.check=h(C.check,me,2,0)),te=pe=0,C.mode=5;case 5:if(1024&C.flags){for(;te<16;){if(ue===0)break e;ue--,pe+=O[ne++]<>>8&255,C.check=h(C.check,me,2,0)),te=pe=0}else C.head&&(C.head.extra=null);C.mode=6;case 6:if(1024&C.flags&&(ue<(de=C.length)&&(de=ue),de&&(C.head&&(U=C.head.extra_len-C.length,C.head.extra||(C.head.extra=new Array(C.head.extra_len)),g.arraySet(C.head.extra,O,ne,de,U)),512&C.flags&&(C.check=h(C.check,O,de,ne)),ue-=de,ne+=de,C.length-=de),C.length))break e;C.length=0,C.mode=7;case 7:if(2048&C.flags){if(ue===0)break e;for(de=0;U=O[ne+de++],C.head&&U&&C.length<65536&&(C.head.name+=String.fromCharCode(U)),U&&de>9&1,C.head.done=!0),R.adler=C.check=0,C.mode=12;break;case 10:for(;te<32;){if(ue===0)break e;ue--,pe+=O[ne++]<>>=7&te,te-=7&te,C.mode=27;break}for(;te<3;){if(ue===0)break e;ue--,pe+=O[ne++]<>>=1)){case 0:C.mode=14;break;case 1:if(L(C),C.mode=20,k!==6)break;pe>>>=2,te-=2;break e;case 2:C.mode=17;break;case 3:R.msg="invalid block type",C.mode=30}pe>>>=2,te-=2;break;case 14:for(pe>>>=7&te,te-=7&te;te<32;){if(ue===0)break e;ue--,pe+=O[ne++]<>>16^65535)){R.msg="invalid stored block lengths",C.mode=30;break}if(C.length=65535&pe,te=pe=0,C.mode=15,k===6)break e;case 15:C.mode=16;case 16:if(de=C.length){if(ue>>=5,te-=5,C.ndist=1+(31&pe),pe>>>=5,te-=5,C.ncode=4+(15&pe),pe>>>=4,te-=4,286>>=3,te-=3}for(;C.have<19;)C.lens[Ee[C.have++]]=0;if(C.lencode=C.lendyn,C.lenbits=7,Se={bits:C.lenbits},ve=y(0,C.lens,0,19,C.lencode,0,C.work,Se),C.lenbits=Se.bits,ve){R.msg="invalid code lengths set",C.mode=30;break}C.have=0,C.mode=19;case 19:for(;C.have>>16&255,z=65535&se,!((ie=se>>>24)<=te);){if(ue===0)break e;ue--,pe+=O[ne++]<>>=ie,te-=ie,C.lens[C.have++]=z;else{if(z===16){for(ee=ie+2;te>>=ie,te-=ie,C.have===0){R.msg="invalid bit length repeat",C.mode=30;break}U=C.lens[C.have-1],de=3+(3&pe),pe>>>=2,te-=2}else if(z===17){for(ee=ie+3;te>>=ie)),pe>>>=3,te-=3}else{for(ee=ie+7;te>>=ie)),pe>>>=7,te-=7}if(C.have+de>C.nlen+C.ndist){R.msg="invalid bit length repeat",C.mode=30;break}for(;de--;)C.lens[C.have++]=U}}if(C.mode===30)break;if(C.lens[256]===0){R.msg="invalid code -- missing end-of-block",C.mode=30;break}if(C.lenbits=9,Se={bits:C.lenbits},ve=y(S,C.lens,0,C.nlen,C.lencode,0,C.work,Se),C.lenbits=Se.bits,ve){R.msg="invalid literal/lengths set",C.mode=30;break}if(C.distbits=6,C.distcode=C.distdyn,Se={bits:C.distbits},ve=y(E,C.lens,C.nlen,C.ndist,C.distcode,0,C.work,Se),C.distbits=Se.bits,ve){R.msg="invalid distances set",C.mode=30;break}if(C.mode=20,k===6)break e;case 20:C.mode=21;case 21:if(6<=ue&&258<=Ae){R.next_out=he,R.avail_out=Ae,R.next_in=ne,R.avail_in=ue,C.hold=pe,C.bits=te,w(R,q),he=R.next_out,W=R.output,Ae=R.avail_out,ne=R.next_in,O=R.input,ue=R.avail_in,pe=C.hold,te=C.bits,C.mode===12&&(C.back=-1);break}for(C.back=0;Q=(se=C.lencode[pe&(1<>>16&255,z=65535&se,!((ie=se>>>24)<=te);){if(ue===0)break e;ue--,pe+=O[ne++]<>Y)])>>>16&255,z=65535&se,!(Y+(ie=se>>>24)<=te);){if(ue===0)break e;ue--,pe+=O[ne++]<>>=Y,te-=Y,C.back+=Y}if(pe>>>=ie,te-=ie,C.back+=ie,C.length=z,Q===0){C.mode=26;break}if(32&Q){C.back=-1,C.mode=12;break}if(64&Q){R.msg="invalid literal/length code",C.mode=30;break}C.extra=15&Q,C.mode=22;case 22:if(C.extra){for(ee=C.extra;te>>=C.extra,te-=C.extra,C.back+=C.extra}C.was=C.length,C.mode=23;case 23:for(;Q=(se=C.distcode[pe&(1<>>16&255,z=65535&se,!((ie=se>>>24)<=te);){if(ue===0)break e;ue--,pe+=O[ne++]<>Y)])>>>16&255,z=65535&se,!(Y+(ie=se>>>24)<=te);){if(ue===0)break e;ue--,pe+=O[ne++]<>>=Y,te-=Y,C.back+=Y}if(pe>>>=ie,te-=ie,C.back+=ie,64&Q){R.msg="invalid distance code",C.mode=30;break}C.offset=z,C.extra=15&Q,C.mode=24;case 24:if(C.extra){for(ee=C.extra;te>>=C.extra,te-=C.extra,C.back+=C.extra}if(C.offset>C.dmax){R.msg="invalid distance too far back",C.mode=30;break}C.mode=25;case 25:if(Ae===0)break e;if(de=q-Ae,C.offset>de){if((de=C.offset-de)>C.whave&&C.sane){R.msg="invalid distance too far back",C.mode=30;break}ke=de>C.wnext?(de-=C.wnext,C.wsize-de):C.wnext-de,de>C.length&&(de=C.length),oe=C.window}else oe=W,ke=he-C.offset,de=C.length;for(Ae_?(P=ke[oe+X[k]],te[Z+X[k]]):(P=96,0),V=1<>he)+(J-=V)]=A<<24|P<<16|L|0,J!==0;);for(V=1<>=1;if(V!==0?(pe&=V-1,pe+=V):pe=0,k++,--q[R]==0){if(R===O)break;R=E[I+X[k]]}if(W>>7)]}function Z(se,me){se.pending_buf[se.pending++]=255&me,se.pending_buf[se.pending++]=me>>>8&255}function q(se,me,Ee){se.bi_valid>G-Ee?(se.bi_buf|=me<>G-se.bi_valid,se.bi_valid+=Ee-G):(se.bi_buf|=me<>>=1,Ee<<=1,0<--me;);return Ee>>>1}function oe(se,me,Ee){var Ie,Ce,Fe=new Array(X+1),ze=0;for(Ie=1;Ie<=X;Ie++)Fe[Ie]=ze=ze+Ee[Ie-1]<<1;for(Ce=0;Ce<=me;Ce++){var je=se[2*Ce+1];je!==0&&(se[2*Ce]=ke(Fe[je]++,je))}}function ie(se){var me;for(me=0;me>1;1<=Ee;Ee--)Y(se,Fe,Ee);for(Ce=ge;Ee=se.heap[1],se.heap[1]=se.heap[se.heap_len--],Y(se,Fe,1),Ie=se.heap[1],se.heap[--se.heap_max]=Ee,se.heap[--se.heap_max]=Ie,Fe[2*Ce]=Fe[2*Ee]+Fe[2*Ie],se.depth[Ce]=(se.depth[Ee]>=se.depth[Ie]?se.depth[Ee]:se.depth[Ie])+1,Fe[2*Ee+1]=Fe[2*Ie+1]=Ce,se.heap[1]=Ce++,Y(se,Fe,1),2<=se.heap_len;);se.heap[--se.heap_max]=se.heap[1],function(Be,Xe){var ot,ct,st,rt,bt,Qe,et=Xe.dyn_tree,_t=Xe.max_code,ft=Xe.stat_desc.static_tree,jt=Xe.stat_desc.has_stree,It=Xe.stat_desc.extra_bits,ht=Xe.stat_desc.extra_base,Dt=Xe.stat_desc.max_length,Ut=0;for(rt=0;rt<=X;rt++)Be.bl_count[rt]=0;for(et[2*Be.heap[Be.heap_max]+1]=0,ot=Be.heap_max+1;ot>=7;Ce>>=1)if(1&Me&&je.dyn_ltree[2*ge]!==0)return v;if(je.dyn_ltree[18]!==0||je.dyn_ltree[20]!==0||je.dyn_ltree[26]!==0)return h;for(ge=32;ge>>3,(Fe=se.static_len+3+7>>>3)<=Ce&&(Ce=Fe)):Ce=Fe=Ee+5,Ee+4<=Ce&&me!==-1?ee(se,me,Ee,Ie):se.strategy===4||Fe===Ce?(q(se,2+(Ie?1:0),3),fe(se,$,R)):(q(se,4+(Ie?1:0),3),function(je,ge,Me,Be){var Xe;for(q(je,ge-257,5),q(je,Me-1,5),q(je,Be-4,4),Xe=0;Xe>>8&255,se.pending_buf[se.d_buf+2*se.last_lit+1]=255&me,se.pending_buf[se.l_buf+se.last_lit]=255&Ee,se.last_lit++,me===0?se.dyn_ltree[2*Ee]++:(se.matches++,me--,se.dyn_ltree[2*(C[Ee]+E+1)]++,se.dyn_dtree[2*te(me)]++),se.last_lit===se.lit_bufsize-1},a._tr_align=function(se){q(se,2,3),de(se,J,$),function(me){me.bi_valid===16?(Z(me,me.bi_buf),me.bi_buf=0,me.bi_valid=0):8<=me.bi_valid&&(me.pending_buf[me.pending++]=255&me.bi_buf,me.bi_buf>>=8,me.bi_valid-=8)}(se)}},{"../utils/common":41}],53:[function(o,l,a){l.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}],54:[function(o,l,a){(function(g){(function(v,h){if(!v.setImmediate){var w,y,S,E,I=1,F={},B=!1,j=v.document,X=Object.getPrototypeOf&&Object.getPrototypeOf(v);X=X&&X.setTimeout?X:v,w={}.toString.call(v.process)==="[object process]"?function(H){f.nextTick(function(){V(H)})}:function(){if(v.postMessage&&!v.importScripts){var H=!0,M=v.onmessage;return v.onmessage=function(){H=!1},v.postMessage("","*"),v.onmessage=M,H}}()?(E="setImmediate$"+Math.random()+"$",v.addEventListener?v.addEventListener("message",J,!1):v.attachEvent("onmessage",J),function(H){v.postMessage(E+H,"*")}):v.MessageChannel?((S=new MessageChannel).port1.onmessage=function(H){V(H.data)},function(H){S.port2.postMessage(H)}):j&&"onreadystatechange"in j.createElement("script")?(y=j.documentElement,function(H){var M=j.createElement("script");M.onreadystatechange=function(){V(H),M.onreadystatechange=null,y.removeChild(M),M=null},y.appendChild(M)}):function(H){setTimeout(V,0,H)},X.setImmediate=function(H){typeof H!="function"&&(H=new Function(""+H));for(var M=new Array(arguments.length-1),T=0;T"u"?g===void 0?this:g:self)}).call(this,typeof c<"u"?c:typeof self<"u"?self:typeof window<"u"?window:{})},{}]},{},[10])(10)})}).call(this)}).call(this,e("_process"),typeof Nt<"u"?Nt:typeof self<"u"?self:typeof window<"u"?window:{},e("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],e("timers").setImmediate)},{_process:467,buffer:220,timers:523}],442:[function(e,d,m){(function(f){(function(){var c=1/0,u="[object Symbol]",s=/[\\^$.*+?()[\]{}|]/g,t=RegExp(s.source),n=typeof f=="object"&&f&&f.Object===Object&&f,r=typeof self=="object"&&self&&self.Object===Object&&self,i=n||r||Function("return this")(),o=Object.prototype,l=o.toString,a=i.Symbol,g=a?a.prototype:void 0,v=g?g.toString:void 0;function h(I){if(typeof I=="string")return I;if(y(I))return v?v.call(I):"";var F=I+"";return F=="0"&&1/I==-c?"-0":F}function w(I){return!!I&&typeof I=="object"}function y(I){return typeof I=="symbol"||w(I)&&l.call(I)==u}function S(I){return I==null?"":h(I)}function E(I){return I=S(I),I&&t.test(I)?I.replace(s,"\\$&"):I}d.exports=E}).call(this)}).call(this,typeof Nt<"u"?Nt:typeof self<"u"?self:typeof window<"u"?window:{})},{}],443:[function(e,d,m){(function(f){(function(){var c=200,u="Expected a function",s="__lodash_hash_undefined__",t=1,n=2,r=1/0,i=9007199254740991,o="[object Arguments]",l="[object Array]",a="[object Boolean]",g="[object Date]",v="[object Error]",h="[object Function]",w="[object GeneratorFunction]",y="[object Map]",S="[object Number]",E="[object Object]",I="[object Promise]",F="[object RegExp]",B="[object Set]",j="[object String]",X="[object Symbol]",G="[object WeakMap]",V="[object ArrayBuffer]",J="[object DataView]",H="[object Float32Array]",M="[object Float64Array]",T="[object Int8Array]",_="[object Int16Array]",A="[object Int32Array]",P="[object Uint8Array]",L="[object Uint8ClampedArray]",$="[object Uint16Array]",R="[object Uint32Array]",k=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,C=/^\w*$/,O=/^\./,W=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,ne=/[\\^$.*+?()[\]{}|]/g,he=/\\(\\)?/g,ue=/^\[object .+?Constructor\]$/,Ae=/^(?:0|[1-9]\d*)$/,pe={};pe[H]=pe[M]=pe[T]=pe[_]=pe[A]=pe[P]=pe[L]=pe[$]=pe[R]=!0,pe[o]=pe[l]=pe[V]=pe[a]=pe[J]=pe[g]=pe[v]=pe[h]=pe[y]=pe[S]=pe[E]=pe[F]=pe[B]=pe[j]=pe[G]=!1;var te=typeof f=="object"&&f&&f.Object===Object&&f,Z=typeof self=="object"&&self&&self.Object===Object&&self,q=te||Z||Function("return this")(),de=typeof m=="object"&&m&&!m.nodeType&&m,ke=de&&typeof d=="object"&&d&&!d.nodeType&&d,oe=ke&&ke.exports===de,ie=oe&&te.process,Q=function(){try{return ie&&ie.binding("util")}catch{}}(),z=Q&&Q.isTypedArray;function Y(ae,xe,De,Ge){for(var dt=-1,nt=ae?ae.length:0;++dt-1}function Je(ae,xe){var De=this.__data__,Ge=Kr(De,ae);return Ge<0?De.push([ae,xe]):De[Ge][1]=xe,this}St.prototype.clear=Tt,St.prototype.delete=be,St.prototype.get=Ne,St.prototype.has=Le,St.prototype.set=Je;function at(ae){var xe=-1,De=ae?ae.length:0;for(this.clear();++xeor))return!1;var Er=nt.get(ae);if(Er&&nt.get(xe))return Er==xe;var Or=-1,kr=!0,dr=dt&t?new lr:void 0;for(nt.set(ae,xe),nt.set(xe,ae);++Or-1&&ae%1==0&&ae-1&&ae%1==0&&ae<=i}function pr(ae){var xe=typeof ae;return!!ae&&(xe=="object"||xe=="function")}function Sr(ae){return!!ae&&typeof ae=="object"}function Ar(ae){return typeof ae=="symbol"||Sr(ae)&&Be.call(ae)==X}var on=z?ve(z):Ei;function hr(ae){return ae==null?"":vs(ae)}function Tn(ae,xe,De){var Ge=ae==null?void 0:fi(ae,xe);return Ge===void 0?De:Ge}function Pr(ae,xe){return ae!=null&&Gi(ae,xe,Hi)}function An(ae){return cr(ae)?ji(ae):Cn(ae)}function Yn(ae){return ae}function Ln(ae){return Zt(ae)?we(Re(ae)):sn(ae)}d.exports=tt}).call(this)}).call(this,typeof Nt<"u"?Nt:typeof self<"u"?self:typeof window<"u"?window:{})},{}],444:[function(e,d,m){var f="[object Boolean]",c=Object.prototype,u=c.toString;function s(n){return n===!0||n===!1||t(n)&&u.call(n)==f}function t(n){return!!n&&typeof n=="object"}d.exports=s},{}],445:[function(e,d,m){(function(f){(function(){var c=200,u="__lodash_hash_undefined__",s=1,t=2,n=9007199254740991,r="[object Arguments]",i="[object Array]",o="[object AsyncFunction]",l="[object Boolean]",a="[object Date]",g="[object Error]",v="[object Function]",h="[object GeneratorFunction]",w="[object Map]",y="[object Number]",S="[object Null]",E="[object Object]",I="[object Promise]",F="[object Proxy]",B="[object RegExp]",j="[object Set]",X="[object String]",G="[object Symbol]",V="[object Undefined]",J="[object WeakMap]",H="[object ArrayBuffer]",M="[object DataView]",T="[object Float32Array]",_="[object Float64Array]",A="[object Int8Array]",P="[object Int16Array]",L="[object Int32Array]",$="[object Uint8Array]",R="[object Uint8ClampedArray]",k="[object Uint16Array]",C="[object Uint32Array]",O=/[\\^$.*+?()[\]{}|]/g,W=/^\[object .+?Constructor\]$/,ne=/^(?:0|[1-9]\d*)$/,he={};he[T]=he[_]=he[A]=he[P]=he[L]=he[$]=he[R]=he[k]=he[C]=!0,he[r]=he[i]=he[H]=he[l]=he[M]=he[a]=he[g]=he[v]=he[w]=he[y]=he[E]=he[B]=he[j]=he[X]=he[J]=!1;var ue=typeof f=="object"&&f&&f.Object===Object&&f,Ae=typeof self=="object"&&self&&self.Object===Object&&self,pe=ue||Ae||Function("return this")(),te=typeof m=="object"&&m&&!m.nodeType&&m,Z=te&&typeof d=="object"&&d&&!d.nodeType&&d,q=Z&&Z.exports===te,de=q&&ue.process,ke=function(){try{return de&&de.binding&&de.binding("util")}catch{}}(),oe=ke&&ke.isTypedArray;function ie(ye,Re){for(var We=-1,tt=ye==null?0:ye.length,Ct=0,Et=[];++We-1}function Je(ye,Re){var We=this.__data__,tt=Kr(We,ye);return tt<0?(++this.size,We.push([ye,Re])):We[tt][1]=Re,this}St.prototype.clear=Tt,St.prototype.delete=be,St.prototype.get=Ne,St.prototype.has=Le,St.prototype.set=Je;function at(ye){var Re=-1,We=ye==null?0:ye.length;for(this.clear();++Renr))return!1;var Ht=Et.get(ye);if(Ht&&Et.get(Re))return Ht==Re;var Tr=-1,Ir=!0,pr=We&t?new lr:void 0;for(Et.set(ye,Re),Et.set(Re,ye);++Tr-1&&ye%1==0&&ye-1&&ye%1==0&&ye<=n}function Zt(ye){var Re=typeof ye;return ye!=null&&(Re=="object"||Re=="function")}function Yt(ye){return ye!=null&&typeof ye=="object"}var Yi=oe?fe(oe):Hi;function Ss(ye){return _s(ye)?ji(ye):Gn(ye)}function Zi(){return[]}function Ji(){return!1}d.exports=bn}).call(this)}).call(this,typeof Nt<"u"?Nt:typeof self<"u"?self:typeof window<"u"?window:{})},{}],446:[function(e,d,m){(function(f){(function(){var c="[object AsyncFunction]",u="[object Function]",s="[object GeneratorFunction]",t="[object Null]",n="[object Proxy]",r="[object Undefined]",i=typeof f=="object"&&f&&f.Object===Object&&f,o=typeof self=="object"&&self&&self.Object===Object&&self,l=i||o||Function("return this")(),a=Object.prototype,g=a.hasOwnProperty,v=a.toString,h=l.Symbol,w=h?h.toStringTag:void 0;function y(B){return B==null?B===void 0?r:t:w&&w in Object(B)?S(B):E(B)}function S(B){var j=g.call(B,w),X=B[w];try{B[w]=void 0;var G=!0}catch{}var V=v.call(B);return G&&(j?B[w]=X:delete B[w]),V}function E(B){return v.call(B)}function I(B){if(!F(B))return!1;var j=y(B);return j==u||j==s||j==c||j==n}function F(B){var j=typeof B;return B!=null&&(j=="object"||j=="function")}d.exports=I}).call(this)}).call(this,typeof Nt<"u"?Nt:typeof self<"u"?self:typeof window<"u"?window:{})},{}],447:[function(e,d,m){function f(c){return c==null}d.exports=f},{}],448:[function(e,d,m){function f(c){return c===void 0}d.exports=f},{}],449:[function(e,d,m){(function(f){(function(){var c=200,u="__lodash_hash_undefined__",s=1/0,t="[object Function]",n="[object GeneratorFunction]",r=/[\\^$.*+?()[\]{}|]/g,i=/^\[object .+?Constructor\]$/,o=typeof f=="object"&&f&&f.Object===Object&&f,l=typeof self=="object"&&self&&self.Object===Object&&self,a=o||l||Function("return this")();function g(ge,Me){var Be=ge?ge.length:0;return!!Be&&w(ge,Me,0)>-1}function v(ge,Me,Be){for(var Xe=-1,ot=ge?ge.length:0;++Xe-1}function te(ge,Me){var Be=this.__data__,Xe=fe(Be,ge);return Xe<0?Be.push([ge,Me]):Be[Xe][1]=Me,this}ne.prototype.clear=he,ne.prototype.delete=ue,ne.prototype.get=Ae,ne.prototype.has=pe,ne.prototype.set=te;function Z(ge){var Me=-1,Be=ge?ge.length:0;for(this.clear();++Me=c){var Qe=Me?null:ve(ge);if(Qe)return F(Qe);st=!1,ot=S,bt=new Q}else bt=Me?[]:rt;e:for(;++Xe56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var a=u.allocUnsafe(16);return a.writeInt32LE(this._a,0),a.writeInt32LE(this._b,4),a.writeInt32LE(this._c,8),a.writeInt32LE(this._d,12),a};function n(a,g){return a<>>32-g}function r(a,g,v,h,w,y,S){return n(a+(g&v|~g&h)+w+y|0,S)+g|0}function i(a,g,v,h,w,y,S){return n(a+(g&h|v&~h)+w+y|0,S)+g|0}function o(a,g,v,h,w,y,S){return n(a+(g^v^h)+w+y|0,S)+g|0}function l(a,g,v,h,w,y,S){return n(a+(v^(g|~h))+w+y|0,S)+g|0}d.exports=t},{"hash-base":425,inherits:440,"safe-buffer":494}],451:[function(e,d,m){var f=e("bn.js"),c=e("brorand");function u(s){this.rand=s||new c.Rand}d.exports=u,u.create=function(t){return new u(t)},u.prototype._randbelow=function(t){var n=t.bitLength(),r=Math.ceil(n/8);do var i=new f(this.rand.generate(r));while(i.cmp(t)>=0);return i},u.prototype._randrange=function(t,n){var r=n.sub(t);return t.add(this._randbelow(r))},u.prototype.test=function(t,n,r){var i=t.bitLength(),o=f.mont(t),l=new f(1).toRed(o);n||(n=Math.max(1,i/48|0));for(var a=t.subn(1),g=0;!a.testn(g);g++);for(var v=t.shrn(g),h=a.toRed(o),w=!0;n>0;n--){var y=this._randrange(new f(2),a);r&&r(y);var S=y.toRed(o).redPow(v);if(!(S.cmp(l)===0||S.cmp(h)===0)){for(var E=1;E0;n--){var h=this._randrange(new f(2),l),w=t.gcd(h);if(w.cmpn(1)!==0)return w;var y=h.toRed(i).redPow(g);if(!(y.cmp(o)===0||y.cmp(v)===0)){for(var S=1;S>8,a=o&255;l?r.push(l,a):r.push(a)}return r}f.toArray=c;function u(t){return t.length===1?"0"+t:t}f.zero2=u;function s(t){for(var n="",r=0;r=6?"utf-8":"binary"}else u="utf-8";d.exports=u}).call(this)}).call(this,e("_process"),typeof Nt<"u"?Nt:typeof self<"u"?self:typeof window<"u"?window:{})},{_process:467}],463:[function(e,d,m){var f=Math.pow(2,30)-1;d.exports=function(c,u){if(typeof c!="number")throw new TypeError("Iterations not a number");if(c<0)throw new TypeError("Bad iterations");if(typeof u!="number")throw new TypeError("Key length not a number");if(u<0||u>f||u!==u)throw new TypeError("Bad key length")}},{}],464:[function(e,d,m){var f=e("create-hash/md5"),c=e("ripemd160"),u=e("sha.js"),s=e("safe-buffer").Buffer,t=e("./precondition"),n=e("./default-encoding"),r=e("./to-buffer"),i=s.alloc(128),o={md5:16,sha1:20,sha224:28,sha256:32,sha384:48,sha512:64,rmd160:20,ripemd160:20};function l(v,h,w){var y=a(v),S=v==="sha512"||v==="sha384"?128:64;h.length>S?h=y(h):h.length"u"||!f.version||f.version.indexOf("v0.")===0||f.version.indexOf("v1.")===0&&f.version.indexOf("v1.8.")!==0?d.exports={nextTick:c}:d.exports=f;function c(u,s,t,n){if(typeof u!="function")throw new TypeError('"callback" argument must be a function');var r=arguments.length,i,o;switch(r){case 0:case 1:return f.nextTick(u);case 2:return f.nextTick(function(){u.call(null,s)});case 3:return f.nextTick(function(){u.call(null,s,t)});case 4:return f.nextTick(function(){u.call(null,s,t,n)});default:for(i=new Array(r-1),o=0;o1)for(var E=1;EE||new s(h).cmp(S.modulus)>=0)throw new Error("decryption error");var I;w?I=r(new s(h),S):I=t(h,S);var F=i.alloc(E-I.length);if(I=i.concat([F,I],E),y===4)return o(S,I);if(y===1)return l(S,I,w);if(y===3)return I;throw new Error("unknown padding")};function o(g,v){var h=g.modulus.byteLength(),w=n("sha1").update(i.alloc(0)).digest(),y=w.length;if(v[0]!==0)throw new Error("decryption error");var S=v.slice(1,y+1),E=v.slice(y+1),I=u(S,c(E,y)),F=u(E,c(I,h-y-1));if(a(w,F.slice(0,y)))throw new Error("decryption error");for(var B=y;F[B]===0;)B++;if(F[B++]!==1)throw new Error("decryption error");return F.slice(B)}function l(g,v,h){for(var w=v.slice(0,2),y=2,S=0;v[y++]!==0;)if(y>=v.length){S++;break}var E=v.slice(2,y-1);if((w.toString("hex")!=="0002"&&!h||w.toString("hex")!=="0001"&&h)&&S++,E.length<8&&S++,S)throw new Error("decryption error");return v.slice(y)}function a(g,v){g=i.from(g),v=i.from(v);var h=0,w=g.length;g.length!==v.length&&(h++,w=Math.min(g.length,v.length));for(var y=-1;++y=0)throw new Error("data too long for modulus")}else throw new Error("unknown padding");return y?i(I,E):r(I,E)};function l(v,h){var w=v.modulus.byteLength(),y=h.length,S=u("sha1").update(o.alloc(0)).digest(),E=S.length,I=2*E;if(y>w-I-2)throw new Error("message too long");var F=o.alloc(w-y-I-2),B=w-E-1,j=c(E),X=t(o.concat([S,F,o.alloc(1,1),h],B),s(j,B)),G=t(j,s(X,E));return new n(o.concat([o.alloc(1),G,X],w))}function a(v,h,w){var y=h.length,S=v.modulus.byteLength();if(y>S-11)throw new Error("message too long");var E;return w?E=o.alloc(S-y-3,255):E=g(S-y-3),new n(o.concat([o.from([0,w?1:2]),E,o.alloc(1),h],S))}function g(v){for(var h=o.allocUnsafe(v),w=0,y=c(v*2),S=0,E;ws)throw new RangeError("requested too many random bytes");var a=n.allocUnsafe(o);if(o>0)if(o>u)for(var g=0;go||w<0)throw new TypeError("offset must be a uint32");if(w>r||w>y)throw new RangeError("offset out of range")}function a(w,y,S){if(typeof w!="number"||w!==w)throw new TypeError("size must be a number");if(w>o||w<0)throw new TypeError("size must be a uint32");if(w+y>S||w>r)throw new RangeError("buffer too small")}i&&i.getRandomValues||!f.browser?(m.randomFill=g,m.randomFillSync=h):(m.randomFill=u,m.randomFillSync=u);function g(w,y,S,E){if(!n.isBuffer(w)&&!(w instanceof c.Uint8Array))throw new TypeError('"buf" argument must be a Buffer or Uint8Array');if(typeof y=="function")E=y,y=0,S=w.length;else if(typeof S=="function")E=S,S=w.length-y;else if(typeof E!="function")throw new TypeError('"cb" argument must be a function');return l(y,w.length),a(S,y,w.length),v(w,y,S,E)}function v(w,y,S,E){if(f.browser){var I=w.buffer,F=new Uint8Array(I,y,S);if(i.getRandomValues(F),E){f.nextTick(function(){E(null,w)});return}return w}if(E){t(S,function(j,X){if(j)return E(j);X.copy(w,y),E(null,w)});return}var B=t(S);return B.copy(w,y),w}function h(w,y,S){if(typeof y>"u"&&(y=0),!n.isBuffer(w)&&!(w instanceof c.Uint8Array))throw new TypeError('"buf" argument must be a Buffer or Uint8Array');return l(y,w.length),S===void 0&&(S=w.length-y),a(S,y,w.length),v(w,y,S)}}).call(this)}).call(this,e("_process"),typeof Nt<"u"?Nt:typeof self<"u"?self:typeof window<"u"?window:{})},{_process:467,randombytes:475,"safe-buffer":494}],477:[function(e,d,m){function f(i,o){i.prototype=Object.create(o.prototype),i.prototype.constructor=i,i.__proto__=o}var c={};function u(i,o,l){l||(l=Error);function a(v,h,w){return typeof o=="string"?o:o(v,h,w)}var g=function(v){f(h,v);function h(w,y,S){return v.call(this,a(w,y,S))||this}return h}(l);g.prototype.name=l.name,g.prototype.code=i,c[i]=g}function s(i,o){if(Array.isArray(i)){var l=i.length;return i=i.map(function(a){return String(a)}),l>2?"one of ".concat(o," ").concat(i.slice(0,l-1).join(", "),", or ")+i[l-1]:l===2?"one of ".concat(o," ").concat(i[0]," or ").concat(i[1]):"of ".concat(o," ").concat(i[0])}else return"of ".concat(o," ").concat(String(i))}function t(i,o,l){return i.substr(!l||l<0?0:+l,o.length)===o}function n(i,o,l){return(l===void 0||l>i.length)&&(l=i.length),i.substring(l-o.length,l)===o}function r(i,o,l){return typeof l!="number"&&(l=0),l+o.length>i.length?!1:i.indexOf(o,l)!==-1}u("ERR_INVALID_OPT_VALUE",function(i,o){return'The value "'+o+'" is invalid for option "'+i+'"'},TypeError),u("ERR_INVALID_ARG_TYPE",function(i,o,l){var a;typeof o=="string"&&t(o,"not ")?(a="must not be",o=o.replace(/^not /,"")):a="must be";var g;if(n(i," argument"))g="The ".concat(i," ").concat(a," ").concat(s(o,"type"));else{var v=r(i,".")?"property":"argument";g='The "'.concat(i,'" ').concat(v," ").concat(a," ").concat(s(o,"type"))}return g+=". Received type ".concat(typeof l),g},TypeError),u("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF"),u("ERR_METHOD_NOT_IMPLEMENTED",function(i){return"The "+i+" method is not implemented"}),u("ERR_STREAM_PREMATURE_CLOSE","Premature close"),u("ERR_STREAM_DESTROYED",function(i){return"Cannot call "+i+" after a stream was destroyed"}),u("ERR_MULTIPLE_CALLBACK","Callback called multiple times"),u("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable"),u("ERR_STREAM_WRITE_AFTER_END","write after end"),u("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError),u("ERR_UNKNOWN_ENCODING",function(i){return"Unknown encoding: "+i},TypeError),u("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event"),d.exports.codes=c},{}],478:[function(e,d,m){(function(f){(function(){var c=Object.keys||function(a){var g=[];for(var v in a)g.push(v);return g};d.exports=i;var u=e("./_stream_readable"),s=e("./_stream_writable");e("inherits")(i,u);for(var t=c(s.prototype),n=0;n0)if(typeof ie!="string"&&!fe.objectMode&&Object.getPrototypeOf(ie)!==n.prototype&&(ie=i(ie)),z)fe.endEmitted?G(oe,new F):_(oe,fe,ie,!0);else if(fe.ended)G(oe,new E);else{if(fe.destroyed)return!1;fe.reading=!1,fe.decoder&&!Q?(ie=fe.decoder.write(ie),fe.objectMode||ie.length!==0?_(oe,fe,ie,!1):O(oe,fe)):_(oe,fe,ie,!1)}else z||(fe.reading=!1,O(oe,fe))}return!fe.ended&&(fe.length=P?oe=P:(oe--,oe|=oe>>>1,oe|=oe>>>2,oe|=oe>>>4,oe|=oe>>>8,oe|=oe>>>16,oe++),oe}function $(oe,ie){return oe<=0||ie.length===0&&ie.ended?0:ie.objectMode?1:oe!==oe?ie.flowing&&ie.length?ie.buffer.head.data.length:ie.length:(oe>ie.highWaterMark&&(ie.highWaterMark=L(oe)),oe<=ie.length?oe:ie.ended?ie.length:(ie.needReadable=!0,0))}M.prototype.read=function(oe){a("read",oe),oe=parseInt(oe,10);var ie=this._readableState,Q=oe;if(oe!==0&&(ie.emittedReadable=!1),oe===0&&ie.needReadable&&((ie.highWaterMark!==0?ie.length>=ie.highWaterMark:ie.length>0)||ie.ended))return a("read: emitReadable",ie.length,ie.ended),ie.length===0&&ie.ended?q(this):k(this),null;if(oe=$(oe,ie),oe===0&&ie.ended)return ie.length===0&&q(this),null;var z=ie.needReadable;a("need readable",z),(ie.length===0||ie.length-oe0?Y=Z(oe,ie):Y=null,Y===null?(ie.needReadable=ie.length<=ie.highWaterMark,oe=0):(ie.length-=oe,ie.awaitDrain=0),ie.length===0&&(ie.ended||(ie.needReadable=!0),Q!==oe&&ie.ended&&q(this)),Y!==null&&this.emit("data",Y),Y};function R(oe,ie){if(a("onEofChunk"),!ie.ended){if(ie.decoder){var Q=ie.decoder.end();Q&&Q.length&&(ie.buffer.push(Q),ie.length+=ie.objectMode?1:Q.length)}ie.ended=!0,ie.sync?k(oe):(ie.needReadable=!1,ie.emittedReadable||(ie.emittedReadable=!0,C(oe)))}}function k(oe){var ie=oe._readableState;a("emitReadable",ie.needReadable,ie.emittedReadable),ie.needReadable=!1,ie.emittedReadable||(a("emitReadable",ie.flowing),ie.emittedReadable=!0,f.nextTick(C,oe))}function C(oe){var ie=oe._readableState;a("emitReadable_",ie.destroyed,ie.length,ie.ended),!ie.destroyed&&(ie.length||ie.ended)&&(oe.emit("readable"),ie.emittedReadable=!1),ie.needReadable=!ie.flowing&&!ie.ended&&ie.length<=ie.highWaterMark,te(oe)}function O(oe,ie){ie.readingMore||(ie.readingMore=!0,f.nextTick(W,oe,ie))}function W(oe,ie){for(;!ie.reading&&!ie.ended&&(ie.length1&&ke(z.pipes,oe)!==-1)&&!Se&&(a("false write response, pause",z.awaitDrain),z.awaitDrain++),Q.pause())}function me(Fe){a("onerror",Fe),Ce(),oe.removeListener("error",me),s(oe,"error")===0&&G(oe,Fe)}J(oe,"error",me);function Ee(){oe.removeListener("finish",Ie),Ce()}oe.once("close",Ee);function Ie(){a("onfinish"),oe.removeListener("close",Ee),Ce()}oe.once("finish",Ie);function Ce(){a("unpipe"),Q.unpipe(oe)}return oe.emit("pipe",Q),z.flowing||(a("pipe resume"),Q.resume()),oe};function ne(oe){return function(){var Q=oe._readableState;a("pipeOnDrain",Q.awaitDrain),Q.awaitDrain&&Q.awaitDrain--,Q.awaitDrain===0&&s(oe,"data")&&(Q.flowing=!0,te(oe))}}M.prototype.unpipe=function(oe){var ie=this._readableState,Q={hasUnpiped:!1};if(ie.pipesCount===0)return this;if(ie.pipesCount===1)return oe&&oe!==ie.pipes?this:(oe||(oe=ie.pipes),ie.pipes=null,ie.pipesCount=0,ie.flowing=!1,oe&&oe.emit("unpipe",this,Q),this);if(!oe){var z=ie.pipes,Y=ie.pipesCount;ie.pipes=null,ie.pipesCount=0,ie.flowing=!1;for(var fe=0;fe0,z.flowing!==!1&&this.resume()):oe==="readable"&&!z.endEmitted&&!z.readableListening&&(z.readableListening=z.needReadable=!0,z.flowing=!1,z.emittedReadable=!1,a("on readable",z.length,z.reading),z.length?k(this):z.reading||f.nextTick(ue,this)),Q},M.prototype.addListener=M.prototype.on,M.prototype.removeListener=function(oe,ie){var Q=t.prototype.removeListener.call(this,oe,ie);return oe==="readable"&&f.nextTick(he,this),Q},M.prototype.removeAllListeners=function(oe){var ie=t.prototype.removeAllListeners.apply(this,arguments);return(oe==="readable"||oe===void 0)&&f.nextTick(he,this),ie};function he(oe){var ie=oe._readableState;ie.readableListening=oe.listenerCount("readable")>0,ie.resumeScheduled&&!ie.paused?ie.flowing=!0:oe.listenerCount("data")>0&&oe.resume()}function ue(oe){a("readable nexttick read 0"),oe.read(0)}M.prototype.resume=function(){var oe=this._readableState;return oe.flowing||(a("resume"),oe.flowing=!oe.readableListening,Ae(this,oe)),oe.paused=!1,this};function Ae(oe,ie){ie.resumeScheduled||(ie.resumeScheduled=!0,f.nextTick(pe,oe,ie))}function pe(oe,ie){a("resume",ie.reading),ie.reading||oe.read(0),ie.resumeScheduled=!1,oe.emit("resume"),te(oe),ie.flowing&&!ie.reading&&oe.read(0)}M.prototype.pause=function(){return a("call pause flowing=%j",this._readableState.flowing),this._readableState.flowing!==!1&&(a("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this};function te(oe){var ie=oe._readableState;for(a("flow",ie.flowing);ie.flowing&&oe.read()!==null;);}M.prototype.wrap=function(oe){var ie=this,Q=this._readableState,z=!1;oe.on("end",function(){if(a("wrapped end"),Q.decoder&&!Q.ended){var we=Q.decoder.end();we&&we.length&&ie.push(we)}ie.push(null)}),oe.on("data",function(we){if(a("wrapped data"),Q.decoder&&(we=Q.decoder.write(we)),!(Q.objectMode&&we==null)&&!(!Q.objectMode&&(!we||!we.length))){var U=ie.push(we);U||(z=!0,oe.pause())}});for(var Y in oe)this[Y]===void 0&&typeof oe[Y]=="function"&&(this[Y]=function(U){return function(){return oe[U].apply(oe,arguments)}}(Y));for(var fe=0;fe=ie.length?(ie.decoder?Q=ie.buffer.join(""):ie.buffer.length===1?Q=ie.buffer.first():Q=ie.buffer.concat(ie.length),ie.buffer.clear()):Q=ie.buffer.consume(oe,ie.decoder),Q}function q(oe){var ie=oe._readableState;a("endReadable",ie.endEmitted),ie.endEmitted||(ie.ended=!0,f.nextTick(de,ie,oe))}function de(oe,ie){if(a("endReadableNT",oe.endEmitted,oe.length),!oe.endEmitted&&oe.length===0&&(oe.endEmitted=!0,ie.readable=!1,ie.emit("end"),oe.autoDestroy)){var Q=ie._writableState;(!Q||Q.autoDestroy&&Q.finished)&&ie.destroy()}}typeof Symbol=="function"&&(M.from=function(oe,ie){return X===void 0&&(X=e("./internal/streams/from")),X(M,oe,ie)});function ke(oe,ie){for(var Q=0,z=oe.length;Q-1))throw new j(Z);return this._writableState.defaultEncoding=Z,this},Object.defineProperty(H.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}});function _(te,Z,q){return!te.objectMode&&te.decodeStrings!==!1&&typeof Z=="string"&&(Z=r.from(Z,q)),Z}Object.defineProperty(H.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function A(te,Z,q,de,ke,oe){if(!q){var ie=_(Z,de,ke);de!==ie&&(q=!0,ke="buffer",de=ie)}var Q=Z.objectMode?1:de.length;Z.length+=Q;var z=Z.length0?this.tail.next=E:this.head=E,this.tail=E,++this.length}},{key:"unshift",value:function(S){var E={data:S,next:this.head};this.length===0&&(this.tail=E),this.head=E,++this.length}},{key:"shift",value:function(){if(this.length!==0){var S=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,S}}},{key:"clear",value:function(){this.head=this.tail=null,this.length=0}},{key:"join",value:function(S){if(this.length===0)return"";for(var E=this.head,I=""+E.data;E=E.next;)I+=S+E.data;return I}},{key:"concat",value:function(S){if(this.length===0)return l.alloc(0);for(var E=l.allocUnsafe(S>>>0),I=this.head,F=0;I;)h(I.data,E,F),F+=I.data.length,I=I.next;return E}},{key:"consume",value:function(S,E){var I;return SB.length?B.length:S;if(j===B.length?F+=B:F+=B.slice(0,S),S-=j,S===0){j===B.length?(++I,E.next?this.head=E.next:this.head=this.tail=null):(this.head=E,E.data=B.slice(j));break}++I}return this.length-=I,F}},{key:"_getBuffer",value:function(S){var E=l.allocUnsafe(S),I=this.head,F=1;for(I.data.copy(E),S-=I.data.length;I=I.next;){var B=I.data,j=S>B.length?B.length:S;if(B.copy(E,E.length-S,0,j),S-=j,S===0){j===B.length?(++F,I.next?this.head=I.next:this.head=this.tail=null):(this.head=I,I.data=B.slice(j));break}++F}return this.length-=F,E}},{key:v,value:function(S,E){return g(this,c(c({},E),{},{depth:0,customInspect:!1}))}}]),w}()},{buffer:220,util:188}],485:[function(e,d,m){(function(f){(function(){function c(i,o){var l=this,a=this._readableState&&this._readableState.destroyed,g=this._writableState&&this._writableState.destroyed;return a||g?(o?o(i):i&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,f.nextTick(n,this,i)):f.nextTick(n,this,i)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(i||null,function(v){!o&&v?l._writableState?l._writableState.errorEmitted?f.nextTick(s,l):(l._writableState.errorEmitted=!0,f.nextTick(u,l,v)):f.nextTick(u,l,v):o?(f.nextTick(s,l),o(v)):f.nextTick(s,l)}),this)}function u(i,o){n(i,o),s(i)}function s(i){i._writableState&&!i._writableState.emitClose||i._readableState&&!i._readableState.emitClose||i.emit("close")}function t(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function n(i,o){i.emit("error",o)}function r(i,o){var l=i._readableState,a=i._writableState;l&&l.autoDestroy||a&&a.autoDestroy?i.destroy(o):i.emit("error",o)}d.exports={destroy:c,undestroy:t,errorOrDestroy:r}}).call(this)}).call(this,e("_process"))},{_process:467}],486:[function(e,d,m){var f=e("../../../errors").codes.ERR_STREAM_PREMATURE_CLOSE;function c(n){var r=!1;return function(){if(!r){r=!0;for(var i=arguments.length,o=new Array(i),l=0;l0;return i(I,B,j,function(X){S||(S=X),X&&E.forEach(o),!B&&(E.forEach(o),y(S))})});return h.reduce(l)}d.exports=g},{"../../../errors":477,"./end-of-stream":486}],489:[function(e,d,m){var f=e("../../../errors").codes.ERR_INVALID_OPT_VALUE;function c(s,t,n){return s.highWaterMark!=null?s.highWaterMark:t?s[n]:null}function u(s,t,n,r){var i=c(t,r,n);if(i!=null){if(!(isFinite(i)&&Math.floor(i)===i)||i<0){var o=r?n:"highWaterMark";throw new f(o,i)}return Math.floor(i)}return s.objectMode?16:16*1024}d.exports={getHighWaterMark:u}},{"../../../errors":477}],490:[function(e,d,m){d.exports=e("events").EventEmitter},{events:422}],491:[function(e,d,m){m=d.exports=e("./lib/_stream_readable.js"),m.Stream=m,m.Readable=m,m.Writable=e("./lib/_stream_writable.js"),m.Duplex=e("./lib/_stream_duplex.js"),m.Transform=e("./lib/_stream_transform.js"),m.PassThrough=e("./lib/_stream_passthrough.js"),m.finished=e("./lib/internal/streams/end-of-stream.js"),m.pipeline=e("./lib/internal/streams/pipeline.js")},{"./lib/_stream_duplex.js":478,"./lib/_stream_passthrough.js":479,"./lib/_stream_readable.js":480,"./lib/_stream_transform.js":481,"./lib/_stream_writable.js":482,"./lib/internal/streams/end-of-stream.js":486,"./lib/internal/streams/pipeline.js":488}],492:[function(e,d,m){var f=function(c){var u=Object.prototype,s=u.hasOwnProperty,t=Object.defineProperty||function(R,k,C){R[k]=C.value},n,r=typeof Symbol=="function"?Symbol:{},i=r.iterator||"@@iterator",o=r.asyncIterator||"@@asyncIterator",l=r.toStringTag||"@@toStringTag";function a(R,k,C){return Object.defineProperty(R,k,{value:C,enumerable:!0,configurable:!0,writable:!0}),R[k]}try{a({},"")}catch{a=function(k,C,O){return k[C]=O}}function g(R,k,C,O){var W=k&&k.prototype instanceof I?k:I,ne=Object.create(W.prototype),he=new P(O||[]);return t(ne,"_invoke",{value:M(R,C,he)}),ne}c.wrap=g;function v(R,k,C){try{return{type:"normal",arg:R.call(k,C)}}catch(O){return{type:"throw",arg:O}}}var h="suspendedStart",w="suspendedYield",y="executing",S="completed",E={};function I(){}function F(){}function B(){}var j={};a(j,i,function(){return this});var X=Object.getPrototypeOf,G=X&&X(X(L([])));G&&G!==u&&s.call(G,i)&&(j=G);var V=B.prototype=I.prototype=Object.create(j);F.prototype=B,t(V,"constructor",{value:B,configurable:!0}),t(B,"constructor",{value:F,configurable:!0}),F.displayName=a(B,l,"GeneratorFunction");function J(R){["next","throw","return"].forEach(function(k){a(R,k,function(C){return this._invoke(k,C)})})}c.isGeneratorFunction=function(R){var k=typeof R=="function"&&R.constructor;return k?k===F||(k.displayName||k.name)==="GeneratorFunction":!1},c.mark=function(R){return Object.setPrototypeOf?Object.setPrototypeOf(R,B):(R.__proto__=B,a(R,l,"GeneratorFunction")),R.prototype=Object.create(V),R},c.awrap=function(R){return{__await:R}};function H(R,k){function C(ne,he,ue,Ae){var pe=v(R[ne],R,he);if(pe.type==="throw")Ae(pe.arg);else{var te=pe.arg,Z=te.value;return Z&&typeof Z=="object"&&s.call(Z,"__await")?k.resolve(Z.__await).then(function(q){C("next",q,ue,Ae)},function(q){C("throw",q,ue,Ae)}):k.resolve(Z).then(function(q){te.value=q,ue(te)},function(q){return C("throw",q,ue,Ae)})}}var O;function W(ne,he){function ue(){return new k(function(Ae,pe){C(ne,he,Ae,pe)})}return O=O?O.then(ue,ue):ue()}t(this,"_invoke",{value:W})}J(H.prototype),a(H.prototype,o,function(){return this}),c.AsyncIterator=H,c.async=function(R,k,C,O,W){W===void 0&&(W=Promise);var ne=new H(g(R,k,C,O),W);return c.isGeneratorFunction(k)?ne:ne.next().then(function(he){return he.done?he.value:ne.next()})};function M(R,k,C){var O=h;return function(ne,he){if(O===y)throw new Error("Generator is already running");if(O===S){if(ne==="throw")throw he;return $()}for(C.method=ne,C.arg=he;;){var ue=C.delegate;if(ue){var Ae=T(ue,C);if(Ae){if(Ae===E)continue;return Ae}}if(C.method==="next")C.sent=C._sent=C.arg;else if(C.method==="throw"){if(O===h)throw O=S,C.arg;C.dispatchException(C.arg)}else C.method==="return"&&C.abrupt("return",C.arg);O=y;var pe=v(R,k,C);if(pe.type==="normal"){if(O=C.done?S:w,pe.arg===E)continue;return{value:pe.arg,done:C.done}}else pe.type==="throw"&&(O=S,C.method="throw",C.arg=pe.arg)}}}function T(R,k){var C=k.method,O=R.iterator[C];if(O===n)return k.delegate=null,C==="throw"&&R.iterator.return&&(k.method="return",k.arg=n,T(R,k),k.method==="throw")||C!=="return"&&(k.method="throw",k.arg=new TypeError("The iterator does not provide a '"+C+"' method")),E;var W=v(O,R.iterator,k.arg);if(W.type==="throw")return k.method="throw",k.arg=W.arg,k.delegate=null,E;var ne=W.arg;if(!ne)return k.method="throw",k.arg=new TypeError("iterator result is not an object"),k.delegate=null,E;if(ne.done)k[R.resultName]=ne.value,k.next=R.nextLoc,k.method!=="return"&&(k.method="next",k.arg=n);else return ne;return k.delegate=null,E}J(V),a(V,l,"Generator"),a(V,i,function(){return this}),a(V,"toString",function(){return"[object Generator]"});function _(R){var k={tryLoc:R[0]};1 in R&&(k.catchLoc=R[1]),2 in R&&(k.finallyLoc=R[2],k.afterLoc=R[3]),this.tryEntries.push(k)}function A(R){var k=R.completion||{};k.type="normal",delete k.arg,R.completion=k}function P(R){this.tryEntries=[{tryLoc:"root"}],R.forEach(_,this),this.reset(!0)}c.keys=function(R){var k=Object(R),C=[];for(var O in k)C.push(O);return C.reverse(),function W(){for(;C.length;){var ne=C.pop();if(ne in k)return W.value=ne,W.done=!1,W}return W.done=!0,W}};function L(R){if(R){var k=R[i];if(k)return k.call(R);if(typeof R.next=="function")return R;if(!isNaN(R.length)){var C=-1,O=function W(){for(;++C=0;--O){var W=this.tryEntries[O],ne=W.completion;if(W.tryLoc==="root")return C("end");if(W.tryLoc<=this.prev){var he=s.call(W,"catchLoc"),ue=s.call(W,"finallyLoc");if(he&&ue){if(this.prev=0;--C){var O=this.tryEntries[C];if(O.tryLoc<=this.prev&&s.call(O,"finallyLoc")&&this.prev=0;--k){var C=this.tryEntries[k];if(C.finallyLoc===R)return this.complete(C.completion,C.afterLoc),A(C),E}},catch:function(R){for(var k=this.tryEntries.length-1;k>=0;--k){var C=this.tryEntries[k];if(C.tryLoc===R){var O=C.completion;if(O.type==="throw"){var W=O.arg;A(C)}return W}}throw new Error("illegal catch attempt")},delegateYield:function(R,k,C){return this.delegate={iterator:L(R),resultName:k,nextLoc:C},this.method==="next"&&(this.arg=n),E}},c}(typeof d=="object"?d.exports:{});try{regeneratorRuntime=f}catch{typeof globalThis=="object"?globalThis.regeneratorRuntime=f:Function("r","regeneratorRuntime = r")(f)}},{}],493:[function(e,d,m){var f=e("buffer").Buffer,c=e("inherits"),u=e("hash-base"),s=new Array(16),t=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],n=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],r=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],i=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11],o=[0,1518500249,1859775393,2400959708,2840853838],l=[1352829926,1548603684,1836072691,2053994217,0];function a(){u.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520}c(a,u),a.prototype._update=function(){for(var E=s,I=0;I<16;++I)E[I]=this._block.readInt32LE(I*4);for(var F=this._a|0,B=this._b|0,j=this._c|0,X=this._d|0,G=this._e|0,V=this._a|0,J=this._b|0,H=this._c|0,M=this._d|0,T=this._e|0,_=0;_<80;_+=1){var A,P;_<16?(A=v(F,B,j,X,G,E[t[_]],o[0],r[_]),P=S(V,J,H,M,T,E[n[_]],l[0],i[_])):_<32?(A=h(F,B,j,X,G,E[t[_]],o[1],r[_]),P=y(V,J,H,M,T,E[n[_]],l[1],i[_])):_<48?(A=w(F,B,j,X,G,E[t[_]],o[2],r[_]),P=w(V,J,H,M,T,E[n[_]],l[2],i[_])):_<64?(A=y(F,B,j,X,G,E[t[_]],o[3],r[_]),P=h(V,J,H,M,T,E[n[_]],l[3],i[_])):(A=S(F,B,j,X,G,E[t[_]],o[4],r[_]),P=v(V,J,H,M,T,E[n[_]],l[4],i[_])),F=G,G=X,X=g(j,10),j=B,B=A,V=T,T=M,M=g(H,10),H=J,J=P}var L=this._b+j+M|0;this._b=this._c+X+T|0,this._c=this._d+G+V|0,this._d=this._e+F+J|0,this._e=this._a+B+H|0,this._a=L},a.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var E=f.alloc?f.alloc(20):new f(20);return E.writeInt32LE(this._a,0),E.writeInt32LE(this._b,4),E.writeInt32LE(this._c,8),E.writeInt32LE(this._d,12),E.writeInt32LE(this._e,16),E};function g(E,I){return E<>>32-I}function v(E,I,F,B,j,X,G,V){return g(E+(I^F^B)+X+G|0,V)+j|0}function h(E,I,F,B,j,X,G,V){return g(E+(I&F|~I&B)+X+G|0,V)+j|0}function w(E,I,F,B,j,X,G,V){return g(E+((I|~F)^B)+X+G|0,V)+j|0}function y(E,I,F,B,j,X,G,V){return g(E+(I&B|F&~B)+X+G|0,V)+j|0}function S(E,I,F,B,j,X,G,V){return g(E+(I^(F|~B))+X+G|0,V)+j|0}d.exports=a},{buffer:220,"hash-base":425,inherits:440}],494:[function(e,d,m){/*! safe-buffer. MIT License. Feross Aboukhadijeh */var f=e("buffer"),c=f.Buffer;function u(t,n){for(var r in t)n[r]=t[r]}c.from&&c.alloc&&c.allocUnsafe&&c.allocUnsafeSlow?d.exports=f:(u(f,m),m.Buffer=s);function s(t,n,r){return c(t,n,r)}s.prototype=Object.create(c.prototype),u(c,s),s.from=function(t,n,r){if(typeof t=="number")throw new TypeError("Argument must not be a number");return c(t,n,r)},s.alloc=function(t,n,r){if(typeof t!="number")throw new TypeError("Argument must be a number");var i=c(t);return n!==void 0?typeof r=="string"?i.fill(n,r):i.fill(n):i.fill(0),i},s.allocUnsafe=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return c(t)},s.allocUnsafeSlow=function(t){if(typeof t!="number")throw new TypeError("Argument must be a number");return f.SlowBuffer(t)}},{buffer:220}],495:[function(e,d,m){(function(f){(function(){var c=e("buffer"),u=c.Buffer,s={},t;for(t in c)c.hasOwnProperty(t)&&(t==="SlowBuffer"||t==="Buffer"||(s[t]=c[t]));var n=s.Buffer={};for(t in u)u.hasOwnProperty(t)&&(t==="allocUnsafe"||t==="allocUnsafeSlow"||(n[t]=u[t]));if(s.Buffer.prototype=u.prototype,(!n.from||n.from===Uint8Array.from)&&(n.from=function(r,i,o){if(typeof r=="number")throw new TypeError('The "value" argument must not be of type number. Received type '+typeof r);if(r&&typeof r.length>"u")throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof r);return u(r,i,o)}),n.alloc||(n.alloc=function(r,i,o){if(typeof r!="number")throw new TypeError('The "size" argument must be of type number. Received type '+typeof r);if(r<0||r>=2*(1<<30))throw new RangeError('The value "'+r+'" is invalid for option "size"');var l=u(r);return!i||i.length===0?l.fill(0):typeof o=="string"?l.fill(i,o):l.fill(i),l}),!s.kStringMaxLength)try{s.kStringMaxLength=f.binding("buffer").kStringMaxLength}catch{}s.constants||(s.constants={MAX_LENGTH:s.kMaxLength},s.kStringMaxLength&&(s.constants.MAX_STRING_LENGTH=s.kStringMaxLength)),d.exports=s}).call(this)}).call(this,e("_process"))},{_process:467,buffer:220}],496:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0});const f=e("xmlchars/xml/1.0/ed5"),c=e("xmlchars/xml/1.1/ed2"),u=e("xmlchars/xmlns/1.0/ed3");var s=f.isS,t=f.isChar,n=f.isNameStartChar,r=f.isNameChar,i=f.S_LIST,o=f.NAME_RE,l=c.isChar,a=u.isNCNameStartChar,g=u.isNCNameChar,v=u.NC_NAME_RE;const h="http://www.w3.org/XML/1998/namespace",w="http://www.w3.org/2000/xmlns/",y={__proto__:null,xml:h,xmlns:w},S={__proto__:null,amp:"&",gt:">",lt:"<",quot:'"',apos:"'"},E=-1,I=-2,F=0,B=1,j=2,X=3,G=4,V=5,J=6,H=7,M=8,T=9,_=10,A=11,P=12,L=13,$=14,R=15,k=16,C=17,O=18,W=19,ne=20,he=21,ue=22,Ae=23,pe=24,te=25,Z=26,q=27,de=28,ke=29,oe=30,ie=31,Q=32,z=33,Y=34,fe=35,we=36,U=37,ve=38,Se=39,ee=40,se=41,me=42,Ee=43,Ie=44,Ce=9,Fe=10,ze=13,je=32,ge=33,Me=34,Be=38,Xe=39,ot=45,ct=47,st=59,rt=60,bt=61,Qe=62,et=63,_t=91,ft=93,jt=133,It=8232,ht=Tt=>Tt===Me||Tt===Xe,Dt=[Me,Xe],Ut=[...Dt,_t,Qe],wt=[...Dt,rt,ft],er=[bt,et,...i],Kt=[...i,Qe,Be,rt];function pt(Tt,be,Ne){switch(be){case"xml":Ne!==h&&Tt.fail(`xml prefix must be bound to ${h}.`);break;case"xmlns":Ne!==w&&Tt.fail(`xmlns prefix must be bound to ${w}.`);break}switch(Ne){case w:Tt.fail(be===""?`the default namespace may not be set to ${Ne}.`:`may not assign a prefix (even "xmlns") to the URI ${w}.`);break;case h:switch(be){case"xml":break;case"":Tt.fail(`the default namespace may not be set to ${Ne}.`);break;default:Tt.fail("may not assign the xml namespace to another prefix.")}break}}function Gt(Tt,be){for(const Ne of Object.keys(be))pt(Tt,Ne,be[Ne])}const kt=Tt=>v.test(Tt),xt=Tt=>o.test(Tt),$t=0,Qt=1,mt=2;m.EVENTS=["xmldecl","text","processinginstruction","doctype","comment","opentagstart","attribute","opentag","closetag","cdata","error","end","ready"];const qt={xmldecl:"xmldeclHandler",text:"textHandler",processinginstruction:"piHandler",doctype:"doctypeHandler",comment:"commentHandler",opentagstart:"openTagStartHandler",attribute:"attributeHandler",opentag:"openTagHandler",closetag:"closeTagHandler",cdata:"cdataHandler",error:"errorHandler",end:"endHandler",ready:"readyHandler"};class St{constructor(be){this.opt=be??{},this.fragmentOpt=!!this.opt.fragment;const Ne=this.xmlnsOpt=!!this.opt.xmlns;if(this.trackPosition=this.opt.position!==!1,this.fileName=this.opt.fileName,Ne){this.nameStartCheck=a,this.nameCheck=g,this.isName=kt,this.processAttribs=this.processAttribsNS,this.pushAttrib=this.pushAttribNS,this.ns=Object.assign({__proto__:null},y);const Le=this.opt.additionalNamespaces;Le!=null&&(Gt(this,Le),Object.assign(this.ns,Le))}else this.nameStartCheck=n,this.nameCheck=r,this.isName=xt,this.processAttribs=this.processAttribsPlain,this.pushAttrib=this.pushAttribPlain;this.stateTable=[this.sBegin,this.sBeginWhitespace,this.sDoctype,this.sDoctypeQuote,this.sDTD,this.sDTDQuoted,this.sDTDOpenWaka,this.sDTDOpenWakaBang,this.sDTDComment,this.sDTDCommentEnding,this.sDTDCommentEnded,this.sDTDPI,this.sDTDPIEnding,this.sText,this.sEntity,this.sOpenWaka,this.sOpenWakaBang,this.sComment,this.sCommentEnding,this.sCommentEnded,this.sCData,this.sCDataEnding,this.sCDataEnding2,this.sPIFirstChar,this.sPIRest,this.sPIBody,this.sPIEnding,this.sXMLDeclNameStart,this.sXMLDeclName,this.sXMLDeclEq,this.sXMLDeclValueStart,this.sXMLDeclValue,this.sXMLDeclSeparator,this.sXMLDeclEnding,this.sOpenTag,this.sOpenTagSlash,this.sAttrib,this.sAttribName,this.sAttribNameSawWhite,this.sAttribValue,this.sAttribValueQuoted,this.sAttribValueClosed,this.sAttribValueUnquoted,this.sCloseTag,this.sCloseTagSawWhite],this._init()}get closed(){return this._closed}_init(){var be;this.openWakaBang="",this.text="",this.name="",this.piTarget="",this.entity="",this.q=null,this.tags=[],this.tag=null,this.topNS=null,this.chunk="",this.chunkPosition=0,this.i=0,this.prevI=0,this.carriedFromPrevious=void 0,this.forbiddenState=$t,this.attribList=[];const{fragmentOpt:Ne}=this;this.state=Ne?L:F,this.reportedTextBeforeRoot=this.reportedTextAfterRoot=this.closedRoot=this.sawRoot=Ne,this.xmlDeclPossible=!Ne,this.xmlDeclExpects=["version"],this.entityReturnState=void 0;let{defaultXMLVersion:Le}=this.opt;if(Le===void 0){if(this.opt.forceXMLVersion===!0)throw new Error("forceXMLVersion set but defaultXMLVersion is not set");Le="1.0"}this.setXMLVersion(Le),this.positionAtNewLine=0,this.doctype=!1,this._closed=!1,this.xmlDecl={version:void 0,encoding:void 0,standalone:void 0},this.line=1,this.column=0,this.ENTITIES=Object.create(S),(be=this.readyHandler)===null||be===void 0||be.call(this)}get position(){return this.chunkPosition+this.i}get columnIndex(){return this.position-this.positionAtNewLine}on(be,Ne){this[qt[be]]=Ne}off(be){this[qt[be]]=void 0}makeError(be){var Ne;let Le=(Ne=this.fileName)!==null&&Ne!==void 0?Ne:"";return this.trackPosition&&(Le.length>0&&(Le+=":"),Le+=`${this.line}:${this.column}`),Le.length>0&&(Le+=": "),new Error(Le+be)}fail(be){const Ne=this.makeError(be),Le=this.errorHandler;if(Le===void 0)throw Ne;return Le(Ne),this}write(be){if(this.closed)return this.fail("cannot write after close; assign an onready handler.");let Ne=!1;be===null?(Ne=!0,be=""):typeof be=="object"&&(be=be.toString()),this.carriedFromPrevious!==void 0&&(be=`${this.carriedFromPrevious}${be}`,this.carriedFromPrevious=void 0);let Le=be.length;const Je=be.charCodeAt(Le-1);!Ne&&(Je===ze||Je>=55296&&Je<=56319)&&(this.carriedFromPrevious=be[Le-1],Le--,be=be.slice(0,Le));const{stateTable:at}=this;for(this.chunk=be,this.i=0;this.i=be.length)return E;const Le=be.charCodeAt(Ne);if(this.column++,Le<55296){if(Le>=je||Le===Ce)return Le;switch(Le){case Fe:return this.line++,this.column=0,this.positionAtNewLine=this.position,Fe;case ze:return be.charCodeAt(Ne+1)===Fe&&(this.i=Ne+2),this.line++,this.column=0,this.positionAtNewLine=this.position,I;default:return this.fail("disallowed character."),Le}}if(Le>56319)return Le>=57344&&Le<=65533||this.fail("disallowed character."),Le;const Je=65536+(Le-55296)*1024+(be.charCodeAt(Ne+1)-56320);return this.i=Ne+2,Je>1114111&&this.fail("disallowed character."),Je}getCode11(){const{chunk:be,i:Ne}=this;if(this.prevI=Ne,this.i=Ne+1,Ne>=be.length)return E;const Le=be.charCodeAt(Ne);if(this.column++,Le<55296){if(Le>31&&Le<127||Le>159&&Le!==It||Le===Ce)return Le;switch(Le){case Fe:return this.line++,this.column=0,this.positionAtNewLine=this.position,Fe;case ze:{const at=be.charCodeAt(Ne+1);(at===Fe||at===jt)&&(this.i=Ne+2)}case jt:case It:return this.line++,this.column=0,this.positionAtNewLine=this.position,I;default:return this.fail("disallowed character."),Le}}if(Le>56319)return Le>=57344&&Le<=65533||this.fail("disallowed character."),Le;const Je=65536+(Le-55296)*1024+(be.charCodeAt(Ne+1)-56320);return this.i=Ne+2,Je>1114111&&this.fail("disallowed character."),Je}getCodeNorm(){const be=this.getCode();return be===I?Fe:be}unget(){this.i=this.prevI,this.column--}captureTo(be){let{i:Ne}=this;const{chunk:Le}=this;for(;;){const Je=this.getCode(),at=Je===I,Mt=at?Fe:Je;if(Mt===E||be.includes(Mt))return this.text+=Le.slice(Ne,this.prevI),Mt;at&&(this.text+=`${Le.slice(Ne,this.prevI)} +`,Ne=this.i)}}captureToChar(be){let{i:Ne}=this;const{chunk:Le}=this;for(;;){let Je=this.getCode();switch(Je){case I:this.text+=`${Le.slice(Ne,this.prevI)} +`,Ne=this.i,Je=Fe;break;case E:return this.text+=Le.slice(Ne),!1}if(Je===be)return this.text+=Le.slice(Ne,this.prevI),!0}}captureNameChars(){const{chunk:be,i:Ne}=this;for(;;){const Le=this.getCode();if(Le===E)return this.name+=be.slice(Ne),E;if(!r(Le))return this.name+=be.slice(Ne,this.prevI),Le===I?Fe:Le}}skipSpaces(){for(;;){const be=this.getCodeNorm();if(be===E||!s(be))return be}}setXMLVersion(be){this.currentXMLVersion=be,be==="1.0"?(this.isChar=t,this.getCode=this.getCode10):(this.isChar=l,this.getCode=this.getCode11)}sBegin(){this.chunk.charCodeAt(0)===65279&&(this.i++,this.column++),this.state=B}sBeginWhitespace(){const be=this.i,Ne=this.skipSpaces();switch(this.prevI!==be&&(this.xmlDeclPossible=!1),Ne){case rt:if(this.state=R,this.text.length!==0)throw new Error("no-empty text at start");break;case E:break;default:this.unget(),this.state=L,this.xmlDeclPossible=!1}}sDoctype(){var be;const Ne=this.captureTo(Ut);switch(Ne){case Qe:{(be=this.doctypeHandler)===null||be===void 0||be.call(this,this.text),this.text="",this.state=L,this.doctype=!0;break}case E:break;default:this.text+=String.fromCodePoint(Ne),Ne===_t?this.state=G:ht(Ne)&&(this.state=X,this.q=Ne)}}sDoctypeQuote(){const be=this.q;this.captureToChar(be)&&(this.text+=String.fromCodePoint(be),this.q=null,this.state=j)}sDTD(){const be=this.captureTo(wt);be!==E&&(this.text+=String.fromCodePoint(be),be===ft?this.state=j:be===rt?this.state=J:ht(be)&&(this.state=V,this.q=be))}sDTDQuoted(){const be=this.q;this.captureToChar(be)&&(this.text+=String.fromCodePoint(be),this.state=G,this.q=null)}sDTDOpenWaka(){const be=this.getCodeNorm();switch(this.text+=String.fromCodePoint(be),be){case ge:this.state=H,this.openWakaBang="";break;case et:this.state=A;break;default:this.state=G}}sDTDOpenWakaBang(){const be=String.fromCodePoint(this.getCodeNorm()),Ne=this.openWakaBang+=be;this.text+=be,Ne!=="-"&&(this.state=Ne==="--"?M:G,this.openWakaBang="")}sDTDComment(){this.captureToChar(ot)&&(this.text+="-",this.state=T)}sDTDCommentEnding(){const be=this.getCodeNorm();this.text+=String.fromCodePoint(be),this.state=be===ot?_:M}sDTDCommentEnded(){const be=this.getCodeNorm();this.text+=String.fromCodePoint(be),be===Qe?this.state=G:(this.fail("malformed comment."),this.state=M)}sDTDPI(){this.captureToChar(et)&&(this.text+="?",this.state=P)}sDTDPIEnding(){const be=this.getCodeNorm();this.text+=String.fromCodePoint(be),be===Qe&&(this.state=G)}sText(){this.tags.length!==0?this.handleTextInRoot():this.handleTextOutsideRoot()}sEntity(){let{i:be}=this;const{chunk:Ne}=this;e:for(;;)switch(this.getCode()){case I:this.entity+=`${Ne.slice(be,this.prevI)} +`,be=this.i;break;case st:{const{entityReturnState:Le}=this,Je=this.entity+Ne.slice(be,this.prevI);this.state=Le;let at;Je===""?(this.fail("empty entity name."),at="&;"):(at=this.parseEntity(Je),this.entity=""),(Le!==L||this.textHandler!==void 0)&&(this.text+=at);break e}case E:this.entity+=Ne.slice(be);break e}}sOpenWaka(){const be=this.getCode();if(n(be))this.state=Y,this.unget(),this.xmlDeclPossible=!1;else switch(be){case ct:this.state=Ee,this.xmlDeclPossible=!1;break;case ge:this.state=k,this.openWakaBang="",this.xmlDeclPossible=!1;break;case et:this.state=Ae;break;default:this.fail("disallowed character in tag name"),this.state=L,this.xmlDeclPossible=!1}}sOpenWakaBang(){switch(this.openWakaBang+=String.fromCodePoint(this.getCodeNorm()),this.openWakaBang){case"[CDATA[":!this.sawRoot&&!this.reportedTextBeforeRoot&&(this.fail("text data outside of root node."),this.reportedTextBeforeRoot=!0),this.closedRoot&&!this.reportedTextAfterRoot&&(this.fail("text data outside of root node."),this.reportedTextAfterRoot=!0),this.state=ne,this.openWakaBang="";break;case"--":this.state=C,this.openWakaBang="";break;case"DOCTYPE":this.state=j,(this.doctype||this.sawRoot)&&this.fail("inappropriately located doctype declaration."),this.openWakaBang="";break;default:this.openWakaBang.length>=7&&this.fail("incorrect syntax.")}}sComment(){this.captureToChar(ot)&&(this.state=O)}sCommentEnding(){var be;const Ne=this.getCodeNorm();Ne===ot?(this.state=W,(be=this.commentHandler)===null||be===void 0||be.call(this,this.text),this.text=""):(this.text+=`-${String.fromCodePoint(Ne)}`,this.state=C)}sCommentEnded(){const be=this.getCodeNorm();be!==Qe?(this.fail("malformed comment."),this.text+=`--${String.fromCodePoint(be)}`,this.state=C):this.state=L}sCData(){this.captureToChar(ft)&&(this.state=he)}sCDataEnding(){const be=this.getCodeNorm();be===ft?this.state=ue:(this.text+=`]${String.fromCodePoint(be)}`,this.state=ne)}sCDataEnding2(){var be;const Ne=this.getCodeNorm();switch(Ne){case Qe:{(be=this.cdataHandler)===null||be===void 0||be.call(this,this.text),this.text="",this.state=L;break}case ft:this.text+="]";break;default:this.text+=`]]${String.fromCodePoint(Ne)}`,this.state=ne}}sPIFirstChar(){const be=this.getCodeNorm();this.nameStartCheck(be)?(this.piTarget+=String.fromCodePoint(be),this.state=pe):be===et||s(be)?(this.fail("processing instruction without a target."),this.state=be===et?Z:te):(this.fail("disallowed character in processing instruction name."),this.piTarget+=String.fromCodePoint(be),this.state=pe)}sPIRest(){const{chunk:be,i:Ne}=this;for(;;){const Le=this.getCodeNorm();if(Le===E){this.piTarget+=be.slice(Ne);return}if(!this.nameCheck(Le)){this.piTarget+=be.slice(Ne,this.prevI);const Je=Le===et;Je||s(Le)?this.piTarget==="xml"?(this.xmlDeclPossible||this.fail("an XML declaration must be at the start of the document."),this.state=Je?z:q):this.state=Je?Z:te:(this.fail("disallowed character in processing instruction name."),this.piTarget+=String.fromCodePoint(Le));break}}}sPIBody(){if(this.text.length===0){const be=this.getCodeNorm();be===et?this.state=Z:s(be)||(this.text=String.fromCodePoint(be))}else this.captureToChar(et)&&(this.state=Z)}sPIEnding(){var be;const Ne=this.getCodeNorm();if(Ne===Qe){const{piTarget:Le}=this;Le.toLowerCase()==="xml"&&this.fail("the XML declaration must appear at the start of the document."),(be=this.piHandler)===null||be===void 0||be.call(this,{target:Le,body:this.text}),this.piTarget=this.text="",this.state=L}else Ne===et?this.text+="?":(this.text+=`?${String.fromCodePoint(Ne)}`,this.state=te);this.xmlDeclPossible=!1}sXMLDeclNameStart(){const be=this.skipSpaces();if(be===et){this.state=z;return}be!==E&&(this.state=de,this.name=String.fromCodePoint(be))}sXMLDeclName(){const be=this.captureTo(er);if(be===et){this.state=z,this.name+=this.text,this.text="",this.fail("XML declaration is incomplete.");return}if(s(be)||be===bt){if(this.name+=this.text,this.text="",!this.xmlDeclExpects.includes(this.name))switch(this.name.length){case 0:this.fail("did not expect any more name/value pairs.");break;case 1:this.fail(`expected the name ${this.xmlDeclExpects[0]}.`);break;default:this.fail(`expected one of ${this.xmlDeclExpects.join(", ")}`)}this.state=be===bt?oe:ke}}sXMLDeclEq(){const be=this.getCodeNorm();if(be===et){this.state=z,this.fail("XML declaration is incomplete.");return}s(be)||(be!==bt&&this.fail("value required."),this.state=oe)}sXMLDeclValueStart(){const be=this.getCodeNorm();if(be===et){this.state=z,this.fail("XML declaration is incomplete.");return}s(be)||(ht(be)?this.q=be:(this.fail("value must be quoted."),this.q=je),this.state=ie)}sXMLDeclValue(){const be=this.captureTo([this.q,et]);if(be===et){this.state=z,this.text="",this.fail("XML declaration is incomplete.");return}if(be===E)return;const Ne=this.text;switch(this.text="",this.name){case"version":{this.xmlDeclExpects=["encoding","standalone"];const Le=Ne;this.xmlDecl.version=Le,/^1\.[0-9]+$/.test(Le)?this.opt.forceXMLVersion||this.setXMLVersion(Le):this.fail("version number must match /^1\\.[0-9]+$/.");break}case"encoding":/^[A-Za-z][A-Za-z0-9._-]*$/.test(Ne)||this.fail("encoding value must match /^[A-Za-z0-9][A-Za-z0-9._-]*$/."),this.xmlDeclExpects=["standalone"],this.xmlDecl.encoding=Ne;break;case"standalone":Ne!=="yes"&&Ne!=="no"&&this.fail('standalone value must match "yes" or "no".'),this.xmlDeclExpects=[],this.xmlDecl.standalone=Ne;break}this.name="",this.state=Q}sXMLDeclSeparator(){const be=this.getCodeNorm();if(be===et){this.state=z;return}s(be)||(this.fail("whitespace required."),this.unget()),this.state=q}sXMLDeclEnding(){var be;this.getCodeNorm()===Qe?(this.piTarget!=="xml"?this.fail("processing instructions are not allowed before root."):this.name!=="version"&&this.xmlDeclExpects.includes("version")&&this.fail("XML declaration must contain a version."),(be=this.xmldeclHandler)===null||be===void 0||be.call(this,this.xmlDecl),this.name="",this.piTarget=this.text="",this.state=L):this.fail("The character ? is disallowed anywhere in XML declarations."),this.xmlDeclPossible=!1}sOpenTag(){var be;const Ne=this.captureNameChars();if(Ne===E)return;const Le=this.tag={name:this.name,attributes:Object.create(null)};switch(this.name="",this.xmlnsOpt&&(this.topNS=Le.ns=Object.create(null)),(be=this.openTagStartHandler)===null||be===void 0||be.call(this,Le),this.sawRoot=!0,!this.fragmentOpt&&this.closedRoot&&this.fail("documents may contain only one root."),Ne){case Qe:this.openTag();break;case ct:this.state=fe;break;default:s(Ne)||this.fail("disallowed character in tag name."),this.state=we}}sOpenTagSlash(){this.getCode()===Qe?this.openSelfClosingTag():(this.fail("forward-slash in opening tag not followed by >."),this.state=we)}sAttrib(){const be=this.skipSpaces();be!==E&&(n(be)?(this.unget(),this.state=U):be===Qe?this.openTag():be===ct?this.state=fe:this.fail("disallowed character in attribute name."))}sAttribName(){const be=this.captureNameChars();be===bt?this.state=Se:s(be)?this.state=ve:be===Qe?(this.fail("attribute without value."),this.pushAttrib(this.name,this.name),this.name=this.text="",this.openTag()):be!==E&&this.fail("disallowed character in attribute name.")}sAttribNameSawWhite(){const be=this.skipSpaces();switch(be){case E:return;case bt:this.state=Se;break;default:this.fail("attribute without value."),this.text="",this.name="",be===Qe?this.openTag():n(be)?(this.unget(),this.state=U):(this.fail("disallowed character in attribute name."),this.state=we)}}sAttribValue(){const be=this.getCodeNorm();ht(be)?(this.q=be,this.state=ee):s(be)||(this.fail("unquoted attribute value."),this.state=me,this.unget())}sAttribValueQuoted(){const{q:be,chunk:Ne}=this;let{i:Le}=this;for(;;)switch(this.getCode()){case be:this.pushAttrib(this.name,this.text+Ne.slice(Le,this.prevI)),this.name=this.text="",this.q=null,this.state=se;return;case Be:this.text+=Ne.slice(Le,this.prevI),this.state=$,this.entityReturnState=ee;return;case Fe:case I:case Ce:this.text+=`${Ne.slice(Le,this.prevI)} `,Le=this.i;break;case rt:this.text+=Ne.slice(Le,this.prevI),this.fail("disallowed character.");return;case E:this.text+=Ne.slice(Le);return}}sAttribValueClosed(){const be=this.getCodeNorm();s(be)?this.state=we:be===Qe?this.openTag():be===ct?this.state=fe:n(be)?(this.fail("no whitespace between attributes."),this.unget(),this.state=U):this.fail("disallowed character in attribute name.")}sAttribValueUnquoted(){const be=this.captureTo(Kt);switch(be){case Be:this.state=$,this.entityReturnState=me;break;case rt:this.fail("disallowed character.");break;case E:break;default:this.text.includes("]]>")&&this.fail('the string "]]>" is disallowed in char data.'),this.pushAttrib(this.name,this.text),this.name=this.text="",be===Qe?this.openTag():this.state=we}}sCloseTag(){const be=this.captureNameChars();be===Qe?this.closeTag():s(be)?this.state=Ie:be!==E&&this.fail("disallowed character in closing tag.")}sCloseTagSawWhite(){switch(this.skipSpaces()){case Qe:this.closeTag();break;case E:break;default:this.fail("disallowed character in closing tag.")}}handleTextInRoot(){let{i:be,forbiddenState:Ne}=this;const{chunk:Le,textHandler:Je}=this;e:for(;;)switch(this.getCode()){case rt:{if(this.state=R,Je!==void 0){const{text:at}=this,Mt=Le.slice(be,this.prevI);at.length!==0?(Je(at+Mt),this.text=""):Mt.length!==0&&Je(Mt)}Ne=$t;break e}case Be:this.state=$,this.entityReturnState=L,Je!==void 0&&(this.text+=Le.slice(be,this.prevI)),Ne=$t;break e;case ft:switch(Ne){case $t:Ne=Qt;break;case Qt:Ne=mt;break;case mt:break;default:throw new Error("impossible state")}break;case Qe:Ne===mt&&this.fail('the string "]]>" is disallowed in char data.'),Ne=$t;break;case I:Je!==void 0&&(this.text+=`${Le.slice(be,this.prevI)} +`),be=this.i,Ne=$t;break;case E:Je!==void 0&&(this.text+=Le.slice(be));break e;default:Ne=$t}this.forbiddenState=Ne}handleTextOutsideRoot(){let{i:be}=this;const{chunk:Ne,textHandler:Le}=this;let Je=!1;e:for(;;){const at=this.getCode();switch(at){case rt:{if(this.state=R,Le!==void 0){const{text:Mt}=this,rr=Ne.slice(be,this.prevI);Mt.length!==0?(Le(Mt+rr),this.text=""):rr.length!==0&&Le(rr)}break e}case Be:this.state=$,this.entityReturnState=L,Le!==void 0&&(this.text+=Ne.slice(be,this.prevI)),Je=!0;break e;case I:Le!==void 0&&(this.text+=`${Ne.slice(be,this.prevI)} +`),be=this.i;break;case E:Le!==void 0&&(this.text+=Ne.slice(be));break e;default:s(at)||(Je=!0)}}Je&&(!this.sawRoot&&!this.reportedTextBeforeRoot&&(this.fail("text data outside of root node."),this.reportedTextBeforeRoot=!0),this.closedRoot&&!this.reportedTextAfterRoot&&(this.fail("text data outside of root node."),this.reportedTextAfterRoot=!0))}pushAttribNS(be,Ne){var Le;const{prefix:Je,local:at}=this.qname(be),Mt={name:be,prefix:Je,local:at,value:Ne};if(this.attribList.push(Mt),(Le=this.attributeHandler)===null||Le===void 0||Le.call(this,Mt),Je==="xmlns"){const rr=Ne.trim();this.currentXMLVersion==="1.0"&&rr===""&&this.fail("invalid attempt to undefine prefix in XML 1.0"),this.topNS[at]=rr,pt(this,at,rr)}else if(be==="xmlns"){const rr=Ne.trim();this.topNS[""]=rr,pt(this,"",rr)}}pushAttribPlain(be,Ne){var Le;const Je={name:be,value:Ne};this.attribList.push(Je),(Le=this.attributeHandler)===null||Le===void 0||Le.call(this,Je)}end(){var be,Ne;this.sawRoot||this.fail("document must contain a root element.");const{tags:Le}=this;for(;Le.length>0;){const at=Le.pop();this.fail(`unclosed tag: ${at.name}`)}this.state!==F&&this.state!==L&&this.fail("unexpected end.");const{text:Je}=this;return Je.length!==0&&((be=this.textHandler)===null||be===void 0||be.call(this,Je),this.text=""),this._closed=!0,(Ne=this.endHandler)===null||Ne===void 0||Ne.call(this),this._init(),this}resolve(be){var Ne,Le;let Je=this.topNS[be];if(Je!==void 0)return Je;const{tags:at}=this;for(let Mt=at.length-1;Mt>=0;Mt--)if(Je=at[Mt].ns[be],Je!==void 0)return Je;return Je=this.ns[be],Je!==void 0?Je:(Le=(Ne=this.opt).resolvePrefix)===null||Le===void 0?void 0:Le.call(Ne,be)}qname(be){const Ne=be.indexOf(":");if(Ne===-1)return{prefix:"",local:be};const Le=be.slice(Ne+1),Je=be.slice(0,Ne);return(Je===""||Le===""||Le.includes(":"))&&this.fail(`malformed name: ${be}.`),{prefix:Je,local:Le}}processAttribsNS(){var be;const{attribList:Ne}=this,Le=this.tag;{const{prefix:Mt,local:rr}=this.qname(Le.name);Le.prefix=Mt,Le.local=rr;const vr=Le.uri=(be=this.resolve(Mt))!==null&&be!==void 0?be:"";Mt!==""&&(Mt==="xmlns"&&this.fail('tags may not have "xmlns" as prefix.'),vr===""&&(this.fail(`unbound namespace prefix: ${JSON.stringify(Mt)}.`),Le.uri=Mt))}if(Ne.length===0)return;const{attributes:Je}=Le,at=new Set;for(const Mt of Ne){const{name:rr,prefix:vr,local:Dr}=Mt;let yr,lr;vr===""?(yr=rr==="xmlns"?w:"",lr=rr):(yr=this.resolve(vr),yr===void 0&&(this.fail(`unbound namespace prefix: ${JSON.stringify(vr)}.`),yr=vr),lr=`{${yr}}${Dr}`),at.has(lr)&&this.fail(`duplicate attribute: ${lr}.`),at.add(lr),Mt.uri=yr,Je[rr]=Mt}this.attribList=[]}processAttribsPlain(){const{attribList:be}=this,Ne=this.tag.attributes;for(const{name:Le,value:Je}of be)Ne[Le]!==void 0&&this.fail(`duplicate attribute: ${Le}.`),Ne[Le]=Je;this.attribList=[]}openTag(){var be;this.processAttribs();const{tags:Ne}=this,Le=this.tag;Le.isSelfClosing=!1,(be=this.openTagHandler)===null||be===void 0||be.call(this,Le),Ne.push(Le),this.state=L,this.name=""}openSelfClosingTag(){var be,Ne,Le;this.processAttribs();const{tags:Je}=this,at=this.tag;at.isSelfClosing=!0,(be=this.openTagHandler)===null||be===void 0||be.call(this,at),(Ne=this.closeTagHandler)===null||Ne===void 0||Ne.call(this,at),(this.tag=(Le=Je[Je.length-1])!==null&&Le!==void 0?Le:null)===null&&(this.closedRoot=!0),this.state=L,this.name=""}closeTag(){const{tags:be,name:Ne}=this;if(this.state=L,this.name="",Ne===""){this.fail("weird empty close tag."),this.text+="";return}const Le=this.closeTagHandler;let Je=be.length;for(;Je-- >0;){const at=this.tag=be.pop();if(this.topNS=at.ns,Le==null||Le(at),at.name===Ne)break;this.fail("unexpected close tag.")}Je===0?this.closedRoot=!0:Je<0&&(this.fail(`unmatched closing tag: ${Ne}.`),this.text+=``)}parseEntity(be){if(be[0]!=="#"){const Le=this.ENTITIES[be];return Le!==void 0?Le:(this.fail(this.isName(be)?"undefined entity.":"disallowed character in entity name."),`&${be};`)}let Ne=NaN;return be[1]==="x"&&/^#x[0-9a-f]+$/i.test(be)?Ne=parseInt(be.slice(2),16):/^#[0-9]+$/.test(be)&&(Ne=parseInt(be.slice(1),10)),this.isChar(Ne)?String.fromCodePoint(Ne):(this.fail("malformed character entity."),`&${be};`)}}m.SaxesParser=St},{"xmlchars/xml/1.0/ed5":543,"xmlchars/xml/1.1/ed2":544,"xmlchars/xmlns/1.0/ed3":545}],497:[function(e,d,m){var f=e("safe-buffer").Buffer;function c(u,s){this._block=f.alloc(u),this._finalSize=s,this._blockSize=u,this._len=0}c.prototype.update=function(u,s){typeof u=="string"&&(s=s||"utf8",u=f.from(u,s));for(var t=this._block,n=this._blockSize,r=u.length,i=this._len,o=0;o=this._finalSize&&(this._update(this._block),this._block.fill(0));var t=this._len*8;if(t<=4294967295)this._block.writeUInt32BE(t,this._blockSize-4);else{var n=(t&4294967295)>>>0,r=(t-n)/4294967296;this._block.writeUInt32BE(r,this._blockSize-8),this._block.writeUInt32BE(n,this._blockSize-4)}this._update(this._block);var i=this._hash();return u?i.toString(u):i},c.prototype._update=function(){throw new Error("_update must be implemented by subclass")},d.exports=c},{"safe-buffer":494}],498:[function(e,d,m){var f=d.exports=function(u){u=u.toLowerCase();var s=f[u];if(!s)throw new Error(u+" is not supported (we accept pull requests)");return new s};f.sha=e("./sha"),f.sha1=e("./sha1"),f.sha224=e("./sha224"),f.sha256=e("./sha256"),f.sha384=e("./sha384"),f.sha512=e("./sha512")},{"./sha":499,"./sha1":500,"./sha224":501,"./sha256":502,"./sha384":503,"./sha512":504}],499:[function(e,d,m){var f=e("inherits"),c=e("./hash"),u=e("safe-buffer").Buffer,s=[1518500249,1859775393,-1894007588,-899497514],t=new Array(80);function n(){this.init(),this._w=t,c.call(this,64,56)}f(n,c),n.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this};function r(l){return l<<5|l>>>27}function i(l){return l<<30|l>>>2}function o(l,a,g,v){return l===0?a&g|~a&v:l===2?a&g|a&v|g&v:a^g^v}n.prototype._update=function(l){for(var a=this._w,g=this._a|0,v=this._b|0,h=this._c|0,w=this._d|0,y=this._e|0,S=0;S<16;++S)a[S]=l.readInt32BE(S*4);for(;S<80;++S)a[S]=a[S-3]^a[S-8]^a[S-14]^a[S-16];for(var E=0;E<80;++E){var I=~~(E/20),F=r(g)+o(I,v,h,w)+y+a[E]+s[I]|0;y=w,w=h,h=i(v),v=g,g=F}this._a=g+this._a|0,this._b=v+this._b|0,this._c=h+this._c|0,this._d=w+this._d|0,this._e=y+this._e|0},n.prototype._hash=function(){var l=u.allocUnsafe(20);return l.writeInt32BE(this._a|0,0),l.writeInt32BE(this._b|0,4),l.writeInt32BE(this._c|0,8),l.writeInt32BE(this._d|0,12),l.writeInt32BE(this._e|0,16),l},d.exports=n},{"./hash":497,inherits:440,"safe-buffer":494}],500:[function(e,d,m){var f=e("inherits"),c=e("./hash"),u=e("safe-buffer").Buffer,s=[1518500249,1859775393,-1894007588,-899497514],t=new Array(80);function n(){this.init(),this._w=t,c.call(this,64,56)}f(n,c),n.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this};function r(a){return a<<1|a>>>31}function i(a){return a<<5|a>>>27}function o(a){return a<<30|a>>>2}function l(a,g,v,h){return a===0?g&v|~g&h:a===2?g&v|g&h|v&h:g^v^h}n.prototype._update=function(a){for(var g=this._w,v=this._a|0,h=this._b|0,w=this._c|0,y=this._d|0,S=this._e|0,E=0;E<16;++E)g[E]=a.readInt32BE(E*4);for(;E<80;++E)g[E]=r(g[E-3]^g[E-8]^g[E-14]^g[E-16]);for(var I=0;I<80;++I){var F=~~(I/20),B=i(v)+l(F,h,w,y)+S+g[I]+s[F]|0;S=y,y=w,w=o(h),h=v,v=B}this._a=v+this._a|0,this._b=h+this._b|0,this._c=w+this._c|0,this._d=y+this._d|0,this._e=S+this._e|0},n.prototype._hash=function(){var a=u.allocUnsafe(20);return a.writeInt32BE(this._a|0,0),a.writeInt32BE(this._b|0,4),a.writeInt32BE(this._c|0,8),a.writeInt32BE(this._d|0,12),a.writeInt32BE(this._e|0,16),a},d.exports=n},{"./hash":497,inherits:440,"safe-buffer":494}],501:[function(e,d,m){var f=e("inherits"),c=e("./sha256"),u=e("./hash"),s=e("safe-buffer").Buffer,t=new Array(64);function n(){this.init(),this._w=t,u.call(this,64,56)}f(n,c),n.prototype.init=function(){return this._a=3238371032,this._b=914150663,this._c=812702999,this._d=4144912697,this._e=4290775857,this._f=1750603025,this._g=1694076839,this._h=3204075428,this},n.prototype._hash=function(){var r=s.allocUnsafe(28);return r.writeInt32BE(this._a,0),r.writeInt32BE(this._b,4),r.writeInt32BE(this._c,8),r.writeInt32BE(this._d,12),r.writeInt32BE(this._e,16),r.writeInt32BE(this._f,20),r.writeInt32BE(this._g,24),r},d.exports=n},{"./hash":497,"./sha256":502,inherits:440,"safe-buffer":494}],502:[function(e,d,m){var f=e("inherits"),c=e("./hash"),u=e("safe-buffer").Buffer,s=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],t=new Array(64);function n(){this.init(),this._w=t,c.call(this,64,56)}f(n,c),n.prototype.init=function(){return this._a=1779033703,this._b=3144134277,this._c=1013904242,this._d=2773480762,this._e=1359893119,this._f=2600822924,this._g=528734635,this._h=1541459225,this};function r(v,h,w){return w^v&(h^w)}function i(v,h,w){return v&h|w&(v|h)}function o(v){return(v>>>2|v<<30)^(v>>>13|v<<19)^(v>>>22|v<<10)}function l(v){return(v>>>6|v<<26)^(v>>>11|v<<21)^(v>>>25|v<<7)}function a(v){return(v>>>7|v<<25)^(v>>>18|v<<14)^v>>>3}function g(v){return(v>>>17|v<<15)^(v>>>19|v<<13)^v>>>10}n.prototype._update=function(v){for(var h=this._w,w=this._a|0,y=this._b|0,S=this._c|0,E=this._d|0,I=this._e|0,F=this._f|0,B=this._g|0,j=this._h|0,X=0;X<16;++X)h[X]=v.readInt32BE(X*4);for(;X<64;++X)h[X]=g(h[X-2])+h[X-7]+a(h[X-15])+h[X-16]|0;for(var G=0;G<64;++G){var V=j+l(I)+r(I,F,B)+s[G]+h[G]|0,J=o(w)+i(w,y,S)|0;j=B,B=F,F=I,I=E+V|0,E=S,S=y,y=w,w=V+J|0}this._a=w+this._a|0,this._b=y+this._b|0,this._c=S+this._c|0,this._d=E+this._d|0,this._e=I+this._e|0,this._f=F+this._f|0,this._g=B+this._g|0,this._h=j+this._h|0},n.prototype._hash=function(){var v=u.allocUnsafe(32);return v.writeInt32BE(this._a,0),v.writeInt32BE(this._b,4),v.writeInt32BE(this._c,8),v.writeInt32BE(this._d,12),v.writeInt32BE(this._e,16),v.writeInt32BE(this._f,20),v.writeInt32BE(this._g,24),v.writeInt32BE(this._h,28),v},d.exports=n},{"./hash":497,inherits:440,"safe-buffer":494}],503:[function(e,d,m){var f=e("inherits"),c=e("./sha512"),u=e("./hash"),s=e("safe-buffer").Buffer,t=new Array(160);function n(){this.init(),this._w=t,u.call(this,128,112)}f(n,c),n.prototype.init=function(){return this._ah=3418070365,this._bh=1654270250,this._ch=2438529370,this._dh=355462360,this._eh=1731405415,this._fh=2394180231,this._gh=3675008525,this._hh=1203062813,this._al=3238371032,this._bl=914150663,this._cl=812702999,this._dl=4144912697,this._el=4290775857,this._fl=1750603025,this._gl=1694076839,this._hl=3204075428,this},n.prototype._hash=function(){var r=s.allocUnsafe(48);function i(o,l,a){r.writeInt32BE(o,a),r.writeInt32BE(l,a+4)}return i(this._ah,this._al,0),i(this._bh,this._bl,8),i(this._ch,this._cl,16),i(this._dh,this._dl,24),i(this._eh,this._el,32),i(this._fh,this._fl,40),r},d.exports=n},{"./hash":497,"./sha512":504,inherits:440,"safe-buffer":494}],504:[function(e,d,m){var f=e("inherits"),c=e("./hash"),u=e("safe-buffer").Buffer,s=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],t=new Array(160);function n(){this.init(),this._w=t,c.call(this,128,112)}f(n,c),n.prototype.init=function(){return this._ah=1779033703,this._bh=3144134277,this._ch=1013904242,this._dh=2773480762,this._eh=1359893119,this._fh=2600822924,this._gh=528734635,this._hh=1541459225,this._al=4089235720,this._bl=2227873595,this._cl=4271175723,this._dl=1595750129,this._el=2917565137,this._fl=725511199,this._gl=4215389547,this._hl=327033209,this};function r(y,S,E){return E^y&(S^E)}function i(y,S,E){return y&S|E&(y|S)}function o(y,S){return(y>>>28|S<<4)^(S>>>2|y<<30)^(S>>>7|y<<25)}function l(y,S){return(y>>>14|S<<18)^(y>>>18|S<<14)^(S>>>9|y<<23)}function a(y,S){return(y>>>1|S<<31)^(y>>>8|S<<24)^y>>>7}function g(y,S){return(y>>>1|S<<31)^(y>>>8|S<<24)^(y>>>7|S<<25)}function v(y,S){return(y>>>19|S<<13)^(S>>>29|y<<3)^y>>>6}function h(y,S){return(y>>>19|S<<13)^(S>>>29|y<<3)^(y>>>6|S<<26)}function w(y,S){return y>>>0>>0?1:0}n.prototype._update=function(y){for(var S=this._w,E=this._ah|0,I=this._bh|0,F=this._ch|0,B=this._dh|0,j=this._eh|0,X=this._fh|0,G=this._gh|0,V=this._hh|0,J=this._al|0,H=this._bl|0,M=this._cl|0,T=this._dl|0,_=this._el|0,A=this._fl|0,P=this._gl|0,L=this._hl|0,$=0;$<32;$+=2)S[$]=y.readInt32BE($*4),S[$+1]=y.readInt32BE($*4+4);for(;$<160;$+=2){var R=S[$-30],k=S[$-15*2+1],C=a(R,k),O=g(k,R);R=S[$-2*2],k=S[$-2*2+1];var W=v(R,k),ne=h(k,R),he=S[$-7*2],ue=S[$-7*2+1],Ae=S[$-16*2],pe=S[$-16*2+1],te=O+ue|0,Z=C+he+w(te,O)|0;te=te+ne|0,Z=Z+W+w(te,ne)|0,te=te+pe|0,Z=Z+Ae+w(te,pe)|0,S[$]=Z,S[$+1]=te}for(var q=0;q<160;q+=2){Z=S[q],te=S[q+1];var de=i(E,I,F),ke=i(J,H,M),oe=o(E,J),ie=o(J,E),Q=l(j,_),z=l(_,j),Y=s[q],fe=s[q+1],we=r(j,X,G),U=r(_,A,P),ve=L+z|0,Se=V+Q+w(ve,L)|0;ve=ve+U|0,Se=Se+we+w(ve,U)|0,ve=ve+fe|0,Se=Se+Y+w(ve,fe)|0,ve=ve+te|0,Se=Se+Z+w(ve,te)|0;var ee=ie+ke|0,se=oe+de+w(ee,ie)|0;V=G,L=P,G=X,P=A,X=j,A=_,_=T+ve|0,j=B+Se+w(_,T)|0,B=F,T=M,F=I,M=H,I=E,H=J,J=ve+ee|0,E=Se+se+w(J,ve)|0}this._al=this._al+J|0,this._bl=this._bl+H|0,this._cl=this._cl+M|0,this._dl=this._dl+T|0,this._el=this._el+_|0,this._fl=this._fl+A|0,this._gl=this._gl+P|0,this._hl=this._hl+L|0,this._ah=this._ah+E+w(this._al,J)|0,this._bh=this._bh+I+w(this._bl,H)|0,this._ch=this._ch+F+w(this._cl,M)|0,this._dh=this._dh+B+w(this._dl,T)|0,this._eh=this._eh+j+w(this._el,_)|0,this._fh=this._fh+X+w(this._fl,A)|0,this._gh=this._gh+G+w(this._gl,P)|0,this._hh=this._hh+V+w(this._hl,L)|0},n.prototype._hash=function(){var y=u.allocUnsafe(64);function S(E,I,F){y.writeInt32BE(E,F),y.writeInt32BE(I,F+4)}return S(this._ah,this._al,0),S(this._bh,this._bl,8),S(this._ch,this._cl,16),S(this._dh,this._dl,24),S(this._eh,this._el,32),S(this._fh,this._fl,40),S(this._gh,this._gl,48),S(this._hh,this._hl,56),y},d.exports=n},{"./hash":497,inherits:440,"safe-buffer":494}],505:[function(e,d,m){d.exports=u;var f=e("events").EventEmitter,c=e("inherits");c(u,f),u.Readable=e("readable-stream/readable.js"),u.Writable=e("readable-stream/writable.js"),u.Duplex=e("readable-stream/duplex.js"),u.Transform=e("readable-stream/transform.js"),u.PassThrough=e("readable-stream/passthrough.js"),u.Stream=u;function u(){f.call(this)}u.prototype.pipe=function(s,t){var n=this;function r(h){s.writable&&s.write(h)===!1&&n.pause&&n.pause()}n.on("data",r);function i(){n.readable&&n.resume&&n.resume()}s.on("drain",i),!s._isStdio&&(!t||t.end!==!1)&&(n.on("end",l),n.on("close",a));var o=!1;function l(){o||(o=!0,s.end())}function a(){o||(o=!0,typeof s.destroy=="function"&&s.destroy())}function g(h){if(v(),f.listenerCount(this,"error")===0)throw h}n.on("error",g),s.on("error",g);function v(){n.removeListener("data",r),s.removeListener("drain",i),n.removeListener("end",l),n.removeListener("close",a),n.removeListener("error",g),s.removeListener("error",g),n.removeListener("end",v),n.removeListener("close",v),s.removeListener("close",v)}return n.on("end",v),n.on("close",v),s.on("close",v),s.emit("pipe",n),s}},{events:422,inherits:440,"readable-stream/duplex.js":507,"readable-stream/passthrough.js":516,"readable-stream/readable.js":517,"readable-stream/transform.js":518,"readable-stream/writable.js":519}],506:[function(e,d,m){var f={}.toString;d.exports=Array.isArray||function(c){return f.call(c)=="[object Array]"}},{}],507:[function(e,d,m){d.exports=e("./lib/_stream_duplex.js")},{"./lib/_stream_duplex.js":508}],508:[function(e,d,m){var f=e("process-nextick-args"),c=Object.keys||function(g){var v=[];for(var h in g)v.push(h);return v};d.exports=o;var u=Object.create(e("core-util-is"));u.inherits=e("inherits");var s=e("./_stream_readable"),t=e("./_stream_writable");u.inherits(o,s);for(var n=c(t.prototype),r=0;r0?(typeof q!="string"&&!ie.objectMode&&Object.getPrototypeOf(q)!==i.prototype&&(q=l(q)),ke?ie.endEmitted?Z.emit("error",new Error("stream.unshift() after end event")):X(Z,ie,q,!0):ie.ended?Z.emit("error",new Error("stream.push() after EOF")):(ie.reading=!1,ie.decoder&&!de?(q=ie.decoder.write(q),ie.objectMode||q.length!==0?X(Z,ie,q,!1):P(Z,ie)):X(Z,ie,q,!1))):ke||(ie.reading=!1)}return V(ie)}function X(Z,q,de,ke){q.flowing&&q.length===0&&!q.sync?(Z.emit("data",de),Z.read(0)):(q.length+=q.objectMode?1:de.length,ke?q.buffer.unshift(de):q.buffer.push(de),q.needReadable&&_(Z)),P(Z,q)}function G(Z,q){var de;return!a(q)&&typeof q!="string"&&q!==void 0&&!Z.objectMode&&(de=new TypeError("Invalid non-string/buffer chunk")),de}function V(Z){return!Z.ended&&(Z.needReadable||Z.length=J?Z=J:(Z--,Z|=Z>>>1,Z|=Z>>>2,Z|=Z>>>4,Z|=Z>>>8,Z|=Z>>>16,Z++),Z}function M(Z,q){return Z<=0||q.length===0&&q.ended?0:q.objectMode?1:Z!==Z?q.flowing&&q.length?q.buffer.head.data.length:q.length:(Z>q.highWaterMark&&(q.highWaterMark=H(Z)),Z<=q.length?Z:q.ended?q.length:(q.needReadable=!0,0))}B.prototype.read=function(Z){h("read",Z),Z=parseInt(Z,10);var q=this._readableState,de=Z;if(Z!==0&&(q.emittedReadable=!1),Z===0&&q.needReadable&&(q.length>=q.highWaterMark||q.ended))return h("read: emitReadable",q.length,q.ended),q.length===0&&q.ended?Ae(this):_(this),null;if(Z=M(Z,q),Z===0&&q.ended)return q.length===0&&Ae(this),null;var ke=q.needReadable;h("need readable",ke),(q.length===0||q.length-Z0?oe=W(Z,q):oe=null,oe===null?(q.needReadable=!0,Z=0):q.length-=Z,q.length===0&&(q.ended||(q.needReadable=!0),de!==Z&&q.ended&&Ae(this)),oe!==null&&this.emit("data",oe),oe};function T(Z,q){if(!q.ended){if(q.decoder){var de=q.decoder.end();de&&de.length&&(q.buffer.push(de),q.length+=q.objectMode?1:de.length)}q.ended=!0,_(Z)}}function _(Z){var q=Z._readableState;q.needReadable=!1,q.emittedReadable||(h("emitReadable",q.flowing),q.emittedReadable=!0,q.sync?u.nextTick(A,Z):A(Z))}function A(Z){h("emit readable"),Z.emit("readable"),O(Z)}function P(Z,q){q.readingMore||(q.readingMore=!0,u.nextTick(L,Z,q))}function L(Z,q){for(var de=q.length;!q.reading&&!q.flowing&&!q.ended&&q.length1&&te(ke.pipes,Z)!==-1)&&!fe&&(h("false write response, pause",ke.awaitDrain),ke.awaitDrain++,U=!0),de.pause())}function Se(Ee){h("onerror",Ee),me(),Z.removeListener("error",Se),n(Z,"error")===0&&Z.emit("error",Ee)}I(Z,"error",Se);function ee(){Z.removeListener("finish",se),me()}Z.once("close",ee);function se(){h("onfinish"),Z.removeListener("close",ee),me()}Z.once("finish",se);function me(){h("unpipe"),de.unpipe(Z)}return Z.emit("pipe",de),ke.flowing||(h("pipe resume"),de.resume()),Z};function $(Z){return function(){var q=Z._readableState;h("pipeOnDrain",q.awaitDrain),q.awaitDrain&&q.awaitDrain--,q.awaitDrain===0&&n(Z,"data")&&(q.flowing=!0,O(Z))}}B.prototype.unpipe=function(Z){var q=this._readableState,de={hasUnpiped:!1};if(q.pipesCount===0)return this;if(q.pipesCount===1)return Z&&Z!==q.pipes?this:(Z||(Z=q.pipes),q.pipes=null,q.pipesCount=0,q.flowing=!1,Z&&Z.emit("unpipe",this,de),this);if(!Z){var ke=q.pipes,oe=q.pipesCount;q.pipes=null,q.pipesCount=0,q.flowing=!1;for(var ie=0;ie=q.length?(q.decoder?de=q.buffer.join(""):q.buffer.length===1?de=q.buffer.head.data:de=q.buffer.concat(q.length),q.buffer.clear()):de=ne(Z,q.buffer,q.decoder),de}function ne(Z,q,de){var ke;return Zie.length?ie.length:Z;if(Q===ie.length?oe+=ie:oe+=ie.slice(0,Z),Z-=Q,Z===0){Q===ie.length?(++ke,de.next?q.head=de.next:q.head=q.tail=null):(q.head=de,de.data=ie.slice(Q));break}++ke}return q.length-=ke,oe}function ue(Z,q){var de=i.allocUnsafe(Z),ke=q.head,oe=1;for(ke.data.copy(de),Z-=ke.data.length;ke=ke.next;){var ie=ke.data,Q=Z>ie.length?ie.length:Z;if(ie.copy(de,de.length-Z,0,Q),Z-=Q,Z===0){Q===ie.length?(++oe,ke.next?q.head=ke.next:q.head=q.tail=null):(q.head=ke,ke.data=ie.slice(Q));break}++oe}return q.length-=oe,de}function Ae(Z){var q=Z._readableState;if(q.length>0)throw new Error('"endReadable()" called on non-empty stream');q.endEmitted||(q.ended=!0,u.nextTick(pe,q,Z))}function pe(Z,q){!Z.endEmitted&&Z.length===0&&(Z.endEmitted=!0,q.readable=!1,q.emit("end"))}function te(Z,q){for(var de=0,ke=Z.length;de-1?u:s.nextTick,r;I.WritableState=S;var i=Object.create(e("core-util-is"));i.inherits=e("inherits");var o={deprecate:e("util-deprecate")},l=e("./internal/streams/stream"),a=e("safe-buffer").Buffer,g=(typeof c<"u"?c:typeof window<"u"?window:typeof self<"u"?self:{}).Uint8Array||function(){};function v(C){return a.from(C)}function h(C){return a.isBuffer(C)||C instanceof g}var w=e("./internal/streams/destroy");i.inherits(I,l);function y(){}function S(C,O){r=r||e("./_stream_duplex"),C=C||{};var W=O instanceof r;this.objectMode=!!C.objectMode,W&&(this.objectMode=this.objectMode||!!C.writableObjectMode);var ne=C.highWaterMark,he=C.writableHighWaterMark,ue=this.objectMode?16:16*1024;ne||ne===0?this.highWaterMark=ne:W&&(he||he===0)?this.highWaterMark=he:this.highWaterMark=ue,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var Ae=C.decodeStrings===!1;this.decodeStrings=!Ae,this.defaultEncoding=C.defaultEncoding||"utf8",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(pe){H(O,pe)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new t(this)}S.prototype.getBuffer=function(){for(var O=this.bufferedRequest,W=[];O;)W.push(O),O=O.next;return W},function(){try{Object.defineProperty(S.prototype,"buffer",{get:o.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch{}}();var E;typeof Symbol=="function"&&Symbol.hasInstance&&typeof Function.prototype[Symbol.hasInstance]=="function"?(E=Function.prototype[Symbol.hasInstance],Object.defineProperty(I,Symbol.hasInstance,{value:function(C){return E.call(this,C)?!0:this!==I?!1:C&&C._writableState instanceof S}})):E=function(C){return C instanceof this};function I(C){if(r=r||e("./_stream_duplex"),!E.call(I,this)&&!(this instanceof r))return new I(C);this._writableState=new S(C,this),this.writable=!0,C&&(typeof C.write=="function"&&(this._write=C.write),typeof C.writev=="function"&&(this._writev=C.writev),typeof C.destroy=="function"&&(this._destroy=C.destroy),typeof C.final=="function"&&(this._final=C.final)),l.call(this)}I.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))};function F(C,O){var W=new Error("write after end");C.emit("error",W),s.nextTick(O,W)}function B(C,O,W,ne){var he=!0,ue=!1;return W===null?ue=new TypeError("May not write null values to stream"):typeof W!="string"&&W!==void 0&&!O.objectMode&&(ue=new TypeError("Invalid non-string/buffer chunk")),ue&&(C.emit("error",ue),s.nextTick(ne,ue),he=!1),he}I.prototype.write=function(C,O,W){var ne=this._writableState,he=!1,ue=!ne.objectMode&&h(C);return ue&&!a.isBuffer(C)&&(C=v(C)),typeof O=="function"&&(W=O,O=null),ue?O="buffer":O||(O=ne.defaultEncoding),typeof W!="function"&&(W=y),ne.ended?F(this,W):(ue||B(this,ne,C,W))&&(ne.pendingcb++,he=X(this,ne,ue,C,O,W)),he},I.prototype.cork=function(){var C=this._writableState;C.corked++},I.prototype.uncork=function(){var C=this._writableState;C.corked&&(C.corked--,!C.writing&&!C.corked&&!C.bufferProcessing&&C.bufferedRequest&&_(this,C))},I.prototype.setDefaultEncoding=function(O){if(typeof O=="string"&&(O=O.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((O+"").toLowerCase())>-1))throw new TypeError("Unknown encoding: "+O);return this._writableState.defaultEncoding=O,this};function j(C,O,W){return!C.objectMode&&C.decodeStrings!==!1&&typeof O=="string"&&(O=a.from(O,W)),O}Object.defineProperty(I.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}});function X(C,O,W,ne,he,ue){if(!W){var Ae=j(O,ne,he);ne!==Ae&&(W=!0,he="buffer",ne=Ae)}var pe=O.objectMode?1:ne.length;O.length+=pe;var te=O.length0?this.tail.next=i:this.head=i,this.tail=i,++this.length},t.prototype.unshift=function(r){var i={data:r,next:this.head};this.length===0&&(this.tail=i),this.head=i,++this.length},t.prototype.shift=function(){if(this.length!==0){var r=this.head.data;return this.length===1?this.head=this.tail=null:this.head=this.head.next,--this.length,r}},t.prototype.clear=function(){this.head=this.tail=null,this.length=0},t.prototype.join=function(r){if(this.length===0)return"";for(var i=this.head,o=""+i.data;i=i.next;)o+=r+i.data;return o},t.prototype.concat=function(r){if(this.length===0)return c.alloc(0);for(var i=c.allocUnsafe(r>>>0),o=this.head,l=0;o;)s(o.data,i,l),l+=o.data.length,o=o.next;return i},t}(),u&&u.inspect&&u.inspect.custom&&(d.exports.prototype[u.inspect.custom]=function(){var t=u.inspect({length:this.length});return this.constructor.name+" "+t})},{"safe-buffer":520,util:188}],514:[function(e,d,m){var f=e("process-nextick-args");function c(t,n){var r=this,i=this._readableState&&this._readableState.destroyed,o=this._writableState&&this._writableState.destroyed;return i||o?(n?n(t):t&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,f.nextTick(s,this,t)):f.nextTick(s,this,t)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(t||null,function(l){!n&&l?r._writableState?r._writableState.errorEmitted||(r._writableState.errorEmitted=!0,f.nextTick(s,r,l)):f.nextTick(s,r,l):n&&n(l)}),this)}function u(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function s(t,n){t.emit("error",n)}d.exports={destroy:c,undestroy:u}},{"process-nextick-args":466}],515:[function(e,d,m){arguments[4][490][0].apply(m,arguments)},{dup:490,events:422}],516:[function(e,d,m){d.exports=e("./readable").PassThrough},{"./readable":517}],517:[function(e,d,m){m=d.exports=e("./lib/_stream_readable.js"),m.Stream=m,m.Readable=m,m.Writable=e("./lib/_stream_writable.js"),m.Duplex=e("./lib/_stream_duplex.js"),m.Transform=e("./lib/_stream_transform.js"),m.PassThrough=e("./lib/_stream_passthrough.js")},{"./lib/_stream_duplex.js":508,"./lib/_stream_passthrough.js":509,"./lib/_stream_readable.js":510,"./lib/_stream_transform.js":511,"./lib/_stream_writable.js":512}],518:[function(e,d,m){d.exports=e("./readable").Transform},{"./readable":517}],519:[function(e,d,m){d.exports=e("./lib/_stream_writable.js")},{"./lib/_stream_writable.js":512}],520:[function(e,d,m){arguments[4][217][0].apply(m,arguments)},{buffer:220,dup:217}],521:[function(e,d,m){arguments[4][218][0].apply(m,arguments)},{dup:218,"safe-buffer":520}],522:[function(e,d,m){arguments[4][218][0].apply(m,arguments)},{dup:218,"safe-buffer":494}],523:[function(e,d,m){(function(f,c){(function(){var u=e("process/browser.js").nextTick,s=Function.prototype.apply,t=Array.prototype.slice,n={},r=0;m.setTimeout=function(){return new i(s.call(setTimeout,window,arguments),clearTimeout)},m.setInterval=function(){return new i(s.call(setInterval,window,arguments),clearInterval)},m.clearTimeout=m.clearInterval=function(o){o.close()};function i(o,l){this._id=o,this._clearFn=l}i.prototype.unref=i.prototype.ref=function(){},i.prototype.close=function(){this._clearFn.call(window,this._id)},m.enroll=function(o,l){clearTimeout(o._idleTimeoutId),o._idleTimeout=l},m.unenroll=function(o){clearTimeout(o._idleTimeoutId),o._idleTimeout=-1},m._unrefActive=m.active=function(o){clearTimeout(o._idleTimeoutId);var l=o._idleTimeout;l>=0&&(o._idleTimeoutId=setTimeout(function(){o._onTimeout&&o._onTimeout()},l))},m.setImmediate=typeof f=="function"?f:function(o){var l=r++,a=arguments.length<2?!1:t.call(arguments,1);return n[l]=!0,u(function(){n[l]&&(a?o.apply(null,a):o.call(null),m.clearImmediate(l))}),l},m.clearImmediate=typeof c=="function"?c:function(o){delete n[o]}}).call(this)}).call(this,e("timers").setImmediate,e("timers").clearImmediate)},{"process/browser.js":467,timers:523}],524:[function(e,d,m){(function(f){(function(){d.exports=c;function c(s,t){if(u("noDeprecation"))return s;var n=!1;function r(){if(!n){if(u("throwDeprecation"))throw new Error(t);u("traceDeprecation")?console.trace(t):console.warn(t),n=!0}return s.apply(this,arguments)}return r}function u(s){try{if(!f.localStorage)return!1}catch{return!1}var t=f.localStorage[s];return t==null?!1:String(t).toLowerCase()==="true"}}).call(this)}).call(this,typeof Nt<"u"?Nt:typeof self<"u"?self:typeof window<"u"?window:{})},{}],525:[function(e,d,m){typeof Object.create=="function"?d.exports=function(c,u){c.super_=u,c.prototype=Object.create(u.prototype,{constructor:{value:c,enumerable:!1,writable:!0,configurable:!0}})}:d.exports=function(c,u){c.super_=u;var s=function(){};s.prototype=u.prototype,c.prototype=new s,c.prototype.constructor=c}},{}],526:[function(e,d,m){d.exports=function(c){return c&&typeof c=="object"&&typeof c.copy=="function"&&typeof c.fill=="function"&&typeof c.readUInt8=="function"}},{}],527:[function(e,d,m){(function(f,c){(function(){var u=/%[sdj%]/g;m.format=function(R){if(!B(R)){for(var k=[],C=0;C=W)return ue;switch(ue){case"%s":return String(O[C++]);case"%d":return Number(O[C++]);case"%j":try{return JSON.stringify(O[C++])}catch{return"[Circular]"}default:return ue}}),he=O[C];C=3&&(C.depth=arguments[2]),arguments.length>=4&&(C.colors=arguments[3]),S(k)?C.showHidden=k:k&&m._extend(C,k),X(C.showHidden)&&(C.showHidden=!1),X(C.depth)&&(C.depth=2),X(C.colors)&&(C.colors=!1),X(C.customInspect)&&(C.customInspect=!0),C.colors&&(C.stylize=r),l(C,R,C.depth)}m.inspect=n,n.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},n.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"};function r(R,k){var C=n.styles[k];return C?"\x1B["+n.colors[C][0]+"m"+R+"\x1B["+n.colors[C][1]+"m":R}function i(R,k){return R}function o(R){var k={};return R.forEach(function(C,O){k[C]=!0}),k}function l(R,k,C){if(R.customInspect&&k&&M(k.inspect)&&k.inspect!==m.inspect&&!(k.constructor&&k.constructor.prototype===k)){var O=k.inspect(C,R);return B(O)||(O=l(R,O,C)),O}var W=a(R,k);if(W)return W;var ne=Object.keys(k),he=o(ne);if(R.showHidden&&(ne=Object.getOwnPropertyNames(k)),H(k)&&(ne.indexOf("message")>=0||ne.indexOf("description")>=0))return g(k);if(ne.length===0){if(M(k)){var ue=k.name?": "+k.name:"";return R.stylize("[Function"+ue+"]","special")}if(G(k))return R.stylize(RegExp.prototype.toString.call(k),"regexp");if(J(k))return R.stylize(Date.prototype.toString.call(k),"date");if(H(k))return g(k)}var Ae="",pe=!1,te=["{","}"];if(y(k)&&(pe=!0,te=["[","]"]),M(k)){var Z=k.name?": "+k.name:"";Ae=" [Function"+Z+"]"}if(G(k)&&(Ae=" "+RegExp.prototype.toString.call(k)),J(k)&&(Ae=" "+Date.prototype.toUTCString.call(k)),H(k)&&(Ae=" "+g(k)),ne.length===0&&(!pe||k.length==0))return te[0]+Ae+te[1];if(C<0)return G(k)?R.stylize(RegExp.prototype.toString.call(k),"regexp"):R.stylize("[Object]","special");R.seen.push(k);var q;return pe?q=v(R,k,C,he,ne):q=ne.map(function(de){return h(R,k,C,he,de,pe)}),R.seen.pop(),w(q,Ae,te)}function a(R,k){if(X(k))return R.stylize("undefined","undefined");if(B(k)){var C="'"+JSON.stringify(k).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return R.stylize(C,"string")}if(F(k))return R.stylize(""+k,"number");if(S(k))return R.stylize(""+k,"boolean");if(E(k))return R.stylize("null","null")}function g(R){return"["+Error.prototype.toString.call(R)+"]"}function v(R,k,C,O,W){for(var ne=[],he=0,ue=k.length;he-1&&(ne?ue=ue.split(` +`).map(function(pe){return" "+pe}).join(` +`).substr(2):ue=` +`+ue.split(` +`).map(function(pe){return" "+pe}).join(` +`))):ue=R.stylize("[Circular]","special")),X(he)){if(ne&&W.match(/^\d+$/))return ue;he=JSON.stringify(""+W),he.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(he=he.substr(1,he.length-2),he=R.stylize(he,"name")):(he=he.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),he=R.stylize(he,"string"))}return he+": "+ue}function w(R,k,C){var O=R.reduce(function(W,ne){return ne.indexOf(` +`)>=0,W+ne.replace(/\u001b\[\d\d?m/g,"").length+1},0);return O>60?C[0]+(k===""?"":k+` + `)+" "+R.join(`, + `)+" "+C[1]:C[0]+k+" "+R.join(", ")+" "+C[1]}function y(R){return Array.isArray(R)}m.isArray=y;function S(R){return typeof R=="boolean"}m.isBoolean=S;function E(R){return R===null}m.isNull=E;function I(R){return R==null}m.isNullOrUndefined=I;function F(R){return typeof R=="number"}m.isNumber=F;function B(R){return typeof R=="string"}m.isString=B;function j(R){return typeof R=="symbol"}m.isSymbol=j;function X(R){return R===void 0}m.isUndefined=X;function G(R){return V(R)&&_(R)==="[object RegExp]"}m.isRegExp=G;function V(R){return typeof R=="object"&&R!==null}m.isObject=V;function J(R){return V(R)&&_(R)==="[object Date]"}m.isDate=J;function H(R){return V(R)&&(_(R)==="[object Error]"||R instanceof Error)}m.isError=H;function M(R){return typeof R=="function"}m.isFunction=M;function T(R){return R===null||typeof R=="boolean"||typeof R=="number"||typeof R=="string"||typeof R=="symbol"||typeof R>"u"}m.isPrimitive=T,m.isBuffer=e("./support/isBuffer");function _(R){return Object.prototype.toString.call(R)}function A(R){return R<10?"0"+R.toString(10):R.toString(10)}var P=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function L(){var R=new Date,k=[A(R.getHours()),A(R.getMinutes()),A(R.getSeconds())].join(":");return[R.getDate(),P[R.getMonth()],k].join(" ")}m.log=function(){console.log("%s - %s",L(),m.format.apply(m,arguments))},m.inherits=e("inherits"),m._extend=function(R,k){if(!k||!V(k))return R;for(var C=Object.keys(k),O=C.length;O--;)R[C[O]]=k[C[O]];return R};function $(R,k){return Object.prototype.hasOwnProperty.call(R,k)}}).call(this)}).call(this,e("_process"),typeof Nt<"u"?Nt:typeof self<"u"?self:typeof window<"u"?window:{})},{"./support/isBuffer":526,_process:467,inherits:525}],528:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),Object.defineProperty(m,"v1",{enumerable:!0,get:function(){return f.default}}),Object.defineProperty(m,"v3",{enumerable:!0,get:function(){return c.default}}),Object.defineProperty(m,"v4",{enumerable:!0,get:function(){return u.default}}),Object.defineProperty(m,"v5",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(m,"NIL",{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(m,"version",{enumerable:!0,get:function(){return n.default}}),Object.defineProperty(m,"validate",{enumerable:!0,get:function(){return r.default}}),Object.defineProperty(m,"stringify",{enumerable:!0,get:function(){return i.default}}),Object.defineProperty(m,"parse",{enumerable:!0,get:function(){return o.default}});var f=l(e("./v1.js")),c=l(e("./v3.js")),u=l(e("./v4.js")),s=l(e("./v5.js")),t=l(e("./nil.js")),n=l(e("./version.js")),r=l(e("./validate.js")),i=l(e("./stringify.js")),o=l(e("./parse.js"));function l(a){return a&&a.__esModule?a:{default:a}}},{"./nil.js":530,"./parse.js":531,"./stringify.js":535,"./v1.js":536,"./v3.js":537,"./v4.js":539,"./v5.js":540,"./validate.js":541,"./version.js":542}],529:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.default=void 0;function f(h){if(typeof h=="string"){const w=unescape(encodeURIComponent(h));h=new Uint8Array(w.length);for(let y=0;y>5]>>>E%32&255,F=parseInt(S.charAt(I>>>4&15)+S.charAt(I&15),16);w.push(F)}return w}function u(h){return(h+64>>>9<<4)+14+1}function s(h,w){h[w>>5]|=128<>5]|=(h[S/8]&255)<>16)+(w>>16)+(y>>16)<<16|y&65535}function r(h,w){return h<>>32-w}function i(h,w,y,S,E,I){return n(r(n(n(w,h),n(S,I)),E),y)}function o(h,w,y,S,E,I,F){return i(w&y|~w&S,h,w,E,I,F)}function l(h,w,y,S,E,I,F){return i(w&S|y&~S,h,w,E,I,F)}function a(h,w,y,S,E,I,F){return i(w^y^S,h,w,E,I,F)}function g(h,w,y,S,E,I,F){return i(y^(w|~S),h,w,E,I,F)}var v=f;m.default=v},{}],530:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.default=void 0;var f="00000000-0000-0000-0000-000000000000";m.default=f},{}],531:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.default=void 0;var f=c(e("./validate.js"));function c(t){return t&&t.__esModule?t:{default:t}}function u(t){if(!(0,f.default)(t))throw TypeError("Invalid UUID");let n;const r=new Uint8Array(16);return r[0]=(n=parseInt(t.slice(0,8),16))>>>24,r[1]=n>>>16&255,r[2]=n>>>8&255,r[3]=n&255,r[4]=(n=parseInt(t.slice(9,13),16))>>>8,r[5]=n&255,r[6]=(n=parseInt(t.slice(14,18),16))>>>8,r[7]=n&255,r[8]=(n=parseInt(t.slice(19,23),16))>>>8,r[9]=n&255,r[10]=(n=parseInt(t.slice(24,36),16))/1099511627776&255,r[11]=n/4294967296&255,r[12]=n>>>24&255,r[13]=n>>>16&255,r[14]=n>>>8&255,r[15]=n&255,r}var s=u;m.default=s},{"./validate.js":541}],532:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.default=void 0;var f=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;m.default=f},{}],533:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.default=u;let f;const c=new Uint8Array(16);function u(){if(!f&&(f=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||typeof msCrypto<"u"&&typeof msCrypto.getRandomValues=="function"&&msCrypto.getRandomValues.bind(msCrypto),!f))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return f(c)}},{}],534:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.default=void 0;function f(t,n,r,i){switch(t){case 0:return n&r^~n&i;case 1:return n^r^i;case 2:return n&r^n&i^r&i;case 3:return n^r^i}}function c(t,n){return t<>>32-n}function u(t){const n=[1518500249,1859775393,2400959708,3395469782],r=[1732584193,4023233417,2562383102,271733878,3285377520];if(typeof t=="string"){const a=unescape(encodeURIComponent(t));t=[];for(let g=0;g>>0;S=y,y=w,w=c(h,30)>>>0,h=v,v=F}r[0]=r[0]+v>>>0,r[1]=r[1]+h>>>0,r[2]=r[2]+w>>>0,r[3]=r[3]+y>>>0,r[4]=r[4]+S>>>0}return[r[0]>>24&255,r[0]>>16&255,r[0]>>8&255,r[0]&255,r[1]>>24&255,r[1]>>16&255,r[1]>>8&255,r[1]&255,r[2]>>24&255,r[2]>>16&255,r[2]>>8&255,r[2]&255,r[3]>>24&255,r[3]>>16&255,r[3]>>8&255,r[3]&255,r[4]>>24&255,r[4]>>16&255,r[4]>>8&255,r[4]&255]}var s=u;m.default=s},{}],535:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.default=void 0;var f=c(e("./validate.js"));function c(n){return n&&n.__esModule?n:{default:n}}const u=[];for(let n=0;n<256;++n)u.push((n+256).toString(16).substr(1));function s(n){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;const i=(u[n[r+0]]+u[n[r+1]]+u[n[r+2]]+u[n[r+3]]+"-"+u[n[r+4]]+u[n[r+5]]+"-"+u[n[r+6]]+u[n[r+7]]+"-"+u[n[r+8]]+u[n[r+9]]+"-"+u[n[r+10]]+u[n[r+11]]+u[n[r+12]]+u[n[r+13]]+u[n[r+14]]+u[n[r+15]]).toLowerCase();if(!(0,f.default)(i))throw TypeError("Stringified UUID is invalid");return i}var t=s;m.default=t},{"./validate.js":541}],536:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.default=void 0;var f=u(e("./rng.js")),c=u(e("./stringify.js"));function u(l){return l&&l.__esModule?l:{default:l}}let s,t,n=0,r=0;function i(l,a,g){let v=a&&g||0;const h=a||new Array(16);l=l||{};let w=l.node||s,y=l.clockseq!==void 0?l.clockseq:t;if(w==null||y==null){const j=l.random||(l.rng||f.default)();w==null&&(w=s=[j[0]|1,j[1],j[2],j[3],j[4],j[5]]),y==null&&(y=t=(j[6]<<8|j[7])&16383)}let S=l.msecs!==void 0?l.msecs:Date.now(),E=l.nsecs!==void 0?l.nsecs:r+1;const I=S-n+(E-r)/1e4;if(I<0&&l.clockseq===void 0&&(y=y+1&16383),(I<0||S>n)&&l.nsecs===void 0&&(E=0),E>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");n=S,r=E,t=y,S+=122192928e5;const F=((S&268435455)*1e4+E)%4294967296;h[v++]=F>>>24&255,h[v++]=F>>>16&255,h[v++]=F>>>8&255,h[v++]=F&255;const B=S/4294967296*1e4&268435455;h[v++]=B>>>8&255,h[v++]=B&255,h[v++]=B>>>24&15|16,h[v++]=B>>>16&255,h[v++]=y>>>8|128,h[v++]=y&255;for(let j=0;j<6;++j)h[v+j]=w[j];return a||(0,c.default)(h)}var o=i;m.default=o},{"./rng.js":533,"./stringify.js":535}],537:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.default=void 0;var f=u(e("./v35.js")),c=u(e("./md5.js"));function u(n){return n&&n.__esModule?n:{default:n}}var t=(0,f.default)("v3",48,c.default);m.default=t},{"./md5.js":529,"./v35.js":538}],538:[function(e,d,m){Object.defineProperty(m,"__esModule",{value:!0}),m.default=r,m.URL=m.DNS=void 0;var f=u(e("./stringify.js")),c=u(e("./parse.js"));function u(i){return i&&i.__esModule?i:{default:i}}function s(i){i=unescape(encodeURIComponent(i));const o=[];for(let l=0;l=s&&o<=55295||o===c||o===u||o===f||o>=57344&&o<=65533||o>=65536&&o<=1114111}m.isChar=t;function n(o){return o===s||o===c||o===u||o===f}m.isS=n;function r(o){return o>=65&&o<=90||o>=97&&o<=122||o===58||o===95||o===8204||o===8205||o>=192&&o<=214||o>=216&&o<=246||o>=248&&o<=767||o>=880&&o<=893||o>=895&&o<=8191||o>=8304&&o<=8591||o>=11264&&o<=12271||o>=12289&&o<=55295||o>=63744&&o<=64975||o>=65008&&o<=65533||o>=65536&&o<=983039}m.isNameStartChar=r;function i(o){return r(o)||o>=48&&o<=57||o===45||o===46||o===183||o>=768&&o<=879||o>=8255&&o<=8256}m.isNameChar=i},{}],544:[function(e,d,m){/** + * Character classes and associated utilities for the 2nd edition of XML 1.1. + * + * @author Louis-Dominique Dubeau + * @license MIT + * @copyright Louis-Dominique Dubeau + */Object.defineProperty(m,"__esModule",{value:!0}),m.CHAR="-퟿-�𐀀-􏿿",m.RESTRICTED_CHAR="-\b\v\f--„†-Ÿ",m.S=` \r +`,m.NAME_START_CHAR=":A-Z_a-zÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�𐀀-󯿿",m.NAME_CHAR="-"+m.NAME_START_CHAR+".0-9·̀-ͯ‿-⁀",m.CHAR_RE=new RegExp("^["+m.CHAR+"]$","u"),m.RESTRICTED_CHAR_RE=new RegExp("^["+m.RESTRICTED_CHAR+"]$","u"),m.S_RE=new RegExp("^["+m.S+"]+$","u"),m.NAME_START_CHAR_RE=new RegExp("^["+m.NAME_START_CHAR+"]$","u"),m.NAME_CHAR_RE=new RegExp("^["+m.NAME_CHAR+"]$","u"),m.NAME_RE=new RegExp("^["+m.NAME_START_CHAR+"]["+m.NAME_CHAR+"]*$","u"),m.NMTOKEN_RE=new RegExp("^["+m.NAME_CHAR+"]+$","u");var f=9,c=10,u=13,s=32;m.S_LIST=[s,c,u,f];function t(a){return a>=1&&a<=55295||a>=57344&&a<=65533||a>=65536&&a<=1114111}m.isChar=t;function n(a){return a>=1&&a<=8||a===11||a===12||a>=14&&a<=31||a>=127&&a<=132||a>=134&&a<=159}m.isRestrictedChar=n;function r(a){return a===9||a===10||a===13||a>31&&a<127||a===133||a>159&&a<=55295||a>=57344&&a<=65533||a>=65536&&a<=1114111}m.isCharAndNotRestricted=r;function i(a){return a===s||a===c||a===u||a===f}m.isS=i;function o(a){return a>=65&&a<=90||a>=97&&a<=122||a===58||a===95||a===8204||a===8205||a>=192&&a<=214||a>=216&&a<=246||a>=248&&a<=767||a>=880&&a<=893||a>=895&&a<=8191||a>=8304&&a<=8591||a>=11264&&a<=12271||a>=12289&&a<=55295||a>=63744&&a<=64975||a>=65008&&a<=65533||a>=65536&&a<=983039}m.isNameStartChar=o;function l(a){return o(a)||a>=48&&a<=57||a===45||a===46||a===183||a>=768&&a<=879||a>=8255&&a<=8256}m.isNameChar=l},{}],545:[function(e,d,m){/** + * Character class utilities for XML NS 1.0 edition 3. + * + * @author Louis-Dominique Dubeau + * @license MIT + * @copyright Louis-Dominique Dubeau + */Object.defineProperty(m,"__esModule",{value:!0}),m.NC_NAME_START_CHAR="A-Z_a-zÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌-‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�𐀀-󯿿",m.NC_NAME_CHAR="-"+m.NC_NAME_START_CHAR+".0-9·̀-ͯ‿-⁀",m.NC_NAME_START_CHAR_RE=new RegExp("^["+m.NC_NAME_START_CHAR+"]$","u"),m.NC_NAME_CHAR_RE=new RegExp("^["+m.NC_NAME_CHAR+"]$","u"),m.NC_NAME_RE=new RegExp("^["+m.NC_NAME_START_CHAR+"]["+m.NC_NAME_CHAR+"]*$","u");function f(u){return u>=65&&u<=90||u===95||u>=97&&u<=122||u>=192&&u<=214||u>=216&&u<=246||u>=248&&u<=767||u>=880&&u<=893||u>=895&&u<=8191||u>=8204&&u<=8205||u>=8304&&u<=8591||u>=11264&&u<=12271||u>=12289&&u<=55295||u>=63744&&u<=64975||u>=65008&&u<=65533||u>=65536&&u<=983039}m.isNCNameStartChar=f;function c(u){return f(u)||u===45||u===46||u>=48&&u<=57||u===183||u>=768&&u<=879||u>=8255&&u<=8256}m.isNCNameChar=c},{}]},{},[15])(15)})})(_h);var Cv=_h.exports;function Ya(N){"@babel/helpers - typeof";return Ya=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(b){return typeof b}:function(b){return b&&typeof Symbol=="function"&&b.constructor===Symbol&&b!==Symbol.prototype?"symbol":typeof b},Ya(N)}var Tv=/^\s+/,Av=/\s+$/;function ut(N,b){if(N=N||"",b=b||{},N instanceof ut)return N;if(!(this instanceof ut))return new ut(N,b);var e=kv(N);this._originalInput=N,this._r=e.r,this._g=e.g,this._b=e.b,this._a=e.a,this._roundA=Math.round(100*this._a)/100,this._format=b.format||e.format,this._gradientType=b.gradientType,this._r<1&&(this._r=Math.round(this._r)),this._g<1&&(this._g=Math.round(this._g)),this._b<1&&(this._b=Math.round(this._b)),this._ok=e.ok}ut.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var b=this.toRgb();return(b.r*299+b.g*587+b.b*114)/1e3},getLuminance:function(){var b=this.toRgb(),e,d,m,f,c,u;return e=b.r/255,d=b.g/255,m=b.b/255,e<=.03928?f=e/12.92:f=Math.pow((e+.055)/1.055,2.4),d<=.03928?c=d/12.92:c=Math.pow((d+.055)/1.055,2.4),m<=.03928?u=m/12.92:u=Math.pow((m+.055)/1.055,2.4),.2126*f+.7152*c+.0722*u},setAlpha:function(b){return this._a=Sh(b),this._roundA=Math.round(100*this._a)/100,this},toHsv:function(){var b=Jc(this._r,this._g,this._b);return{h:b.h*360,s:b.s,v:b.v,a:this._a}},toHsvString:function(){var b=Jc(this._r,this._g,this._b),e=Math.round(b.h*360),d=Math.round(b.s*100),m=Math.round(b.v*100);return this._a==1?"hsv("+e+", "+d+"%, "+m+"%)":"hsva("+e+", "+d+"%, "+m+"%, "+this._roundA+")"},toHsl:function(){var b=Zc(this._r,this._g,this._b);return{h:b.h*360,s:b.s,l:b.l,a:this._a}},toHslString:function(){var b=Zc(this._r,this._g,this._b),e=Math.round(b.h*360),d=Math.round(b.s*100),m=Math.round(b.l*100);return this._a==1?"hsl("+e+", "+d+"%, "+m+"%)":"hsla("+e+", "+d+"%, "+m+"%, "+this._roundA+")"},toHex:function(b){return Qc(this._r,this._g,this._b,b)},toHexString:function(b){return"#"+this.toHex(b)},toHex8:function(b){return Ov(this._r,this._g,this._b,this._a,b)},toHex8String:function(b){return"#"+this.toHex8(b)},toRgb:function(){return{r:Math.round(this._r),g:Math.round(this._g),b:Math.round(this._b),a:this._a}},toRgbString:function(){return this._a==1?"rgb("+Math.round(this._r)+", "+Math.round(this._g)+", "+Math.round(this._b)+")":"rgba("+Math.round(this._r)+", "+Math.round(this._g)+", "+Math.round(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:Math.round(mr(this._r,255)*100)+"%",g:Math.round(mr(this._g,255)*100)+"%",b:Math.round(mr(this._b,255)*100)+"%",a:this._a}},toPercentageRgbString:function(){return this._a==1?"rgb("+Math.round(mr(this._r,255)*100)+"%, "+Math.round(mr(this._g,255)*100)+"%, "+Math.round(mr(this._b,255)*100)+"%)":"rgba("+Math.round(mr(this._r,255)*100)+"%, "+Math.round(mr(this._g,255)*100)+"%, "+Math.round(mr(this._b,255)*100)+"%, "+this._roundA+")"},toName:function(){return this._a===0?"transparent":this._a<1?!1:Xv[Qc(this._r,this._g,this._b,!0)]||!1},toFilter:function(b){var e="#"+qc(this._r,this._g,this._b,this._a),d=e,m=this._gradientType?"GradientType = 1, ":"";if(b){var f=ut(b);d="#"+qc(f._r,f._g,f._b,f._a)}return"progid:DXImageTransform.Microsoft.gradient("+m+"startColorstr="+e+",endColorstr="+d+")"},toString:function(b){var e=!!b;b=b||this._format;var d=!1,m=this._a<1&&this._a>=0,f=!e&&m&&(b==="hex"||b==="hex6"||b==="hex3"||b==="hex4"||b==="hex8"||b==="name");return f?b==="name"&&this._a===0?this.toName():this.toRgbString():(b==="rgb"&&(d=this.toRgbString()),b==="prgb"&&(d=this.toPercentageRgbString()),(b==="hex"||b==="hex6")&&(d=this.toHexString()),b==="hex3"&&(d=this.toHexString(!0)),b==="hex4"&&(d=this.toHex8String(!0)),b==="hex8"&&(d=this.toHex8String()),b==="name"&&(d=this.toName()),b==="hsl"&&(d=this.toHslString()),b==="hsv"&&(d=this.toHsvString()),d||this.toHexString())},clone:function(){return ut(this.toString())},_applyModification:function(b,e){var d=b.apply(null,[this].concat([].slice.call(e)));return this._r=d._r,this._g=d._g,this._b=d._b,this.setAlpha(d._a),this},lighten:function(){return this._applyModification(Dv,arguments)},brighten:function(){return this._applyModification(Bv,arguments)},darken:function(){return this._applyModification(Lv,arguments)},desaturate:function(){return this._applyModification(Fv,arguments)},saturate:function(){return this._applyModification(Pv,arguments)},greyscale:function(){return this._applyModification(Nv,arguments)},spin:function(){return this._applyModification(jv,arguments)},_applyCombination:function(b,e){return b.apply(null,[this].concat([].slice.call(e)))},analogous:function(){return this._applyCombination(zv,arguments)},complement:function(){return this._applyCombination($v,arguments)},monochromatic:function(){return this._applyCombination(Uv,arguments)},splitcomplement:function(){return this._applyCombination(Hv,arguments)},triad:function(){return this._applyCombination(eh,[3])},tetrad:function(){return this._applyCombination(eh,[4])}};ut.fromRatio=function(N,b){if(Ya(N)=="object"){var e={};for(var d in N)N.hasOwnProperty(d)&&(d==="a"?e[d]=N[d]:e[d]=Xs(N[d]));N=e}return ut(N,b)};function kv(N){var b={r:0,g:0,b:0},e=1,d=null,m=null,f=null,c=!1,u=!1;return typeof N=="string"&&(N=Gv(N)),Ya(N)=="object"&&(si(N.r)&&si(N.g)&&si(N.b)?(b=Mv(N.r,N.g,N.b),c=!0,u=String(N.r).substr(-1)==="%"?"prgb":"rgb"):si(N.h)&&si(N.s)&&si(N.v)?(d=Xs(N.s),m=Xs(N.v),b=Iv(N.h,d,m),c=!0,u="hsv"):si(N.h)&&si(N.s)&&si(N.l)&&(d=Xs(N.s),f=Xs(N.l),b=Rv(N.h,d,f),c=!0,u="hsl"),N.hasOwnProperty("a")&&(e=N.a)),e=Sh(e),{ok:c,format:N.format||u,r:Math.min(255,Math.max(b.r,0)),g:Math.min(255,Math.max(b.g,0)),b:Math.min(255,Math.max(b.b,0)),a:e}}function Mv(N,b,e){return{r:mr(N,255)*255,g:mr(b,255)*255,b:mr(e,255)*255}}function Zc(N,b,e){N=mr(N,255),b=mr(b,255),e=mr(e,255);var d=Math.max(N,b,e),m=Math.min(N,b,e),f,c,u=(d+m)/2;if(d==m)f=c=0;else{var s=d-m;switch(c=u>.5?s/(2-d-m):s/(d+m),d){case N:f=(b-e)/s+(b1&&(r-=1),r<1/6?t+(n-t)*6*r:r<1/2?n:r<2/3?t+(n-t)*(2/3-r)*6:t}if(b===0)d=m=f=e;else{var u=e<.5?e*(1+b):e+b-e*b,s=2*e-u;d=c(s,u,N+1/3),m=c(s,u,N),f=c(s,u,N-1/3)}return{r:d*255,g:m*255,b:f*255}}function Jc(N,b,e){N=mr(N,255),b=mr(b,255),e=mr(e,255);var d=Math.max(N,b,e),m=Math.min(N,b,e),f,c,u=d,s=d-m;if(c=d===0?0:s/d,d==m)f=0;else{switch(d){case N:f=(b-e)/s+(b>1)+720)%360;--b;)d.h=(d.h+m)%360,f.push(ut(d));return f}function Uv(N,b){b=b||6;for(var e=ut(N).toHsv(),d=e.h,m=e.s,f=e.v,c=[],u=1/b;b--;)c.push(ut({h:d,s:m,v:f})),f=(f+u)%1;return c}ut.mix=function(N,b,e){e=e===0?0:e||50;var d=ut(N).toRgb(),m=ut(b).toRgb(),f=e/100,c={r:(m.r-d.r)*f+d.r,g:(m.g-d.g)*f+d.g,b:(m.b-d.b)*f+d.b,a:(m.a-d.a)*f+d.a};return ut(c)};ut.readability=function(N,b){var e=ut(N),d=ut(b);return(Math.max(e.getLuminance(),d.getLuminance())+.05)/(Math.min(e.getLuminance(),d.getLuminance())+.05)};ut.isReadable=function(N,b,e){var d=ut.readability(N,b),m,f;switch(f=!1,m=Yv(e),m.level+m.size){case"AAsmall":case"AAAlarge":f=d>=4.5;break;case"AAlarge":f=d>=3;break;case"AAAsmall":f=d>=7;break}return f};ut.mostReadable=function(N,b,e){var d=null,m=0,f,c,u,s;e=e||{},c=e.includeFallbackColors,u=e.level,s=e.size;for(var t=0;tm&&(m=f,d=ut(b[t]));return ut.isReadable(N,d,{level:u,size:s})||!c?d:(e.includeFallbackColors=!1,ut.mostReadable(N,["#fff","#000"],e))};var bf=ut.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},Xv=ut.hexNames=Wv(bf);function Wv(N){var b={};for(var e in N)N.hasOwnProperty(e)&&(b[N[e]]=e);return b}function Sh(N){return N=parseFloat(N),(isNaN(N)||N<0||N>1)&&(N=1),N}function mr(N,b){Vv(N)&&(N="100%");var e=Kv(N);return N=Math.min(b,Math.max(0,parseFloat(N))),e&&(N=parseInt(N*b,10)/100),Math.abs(N-b)<1e-6?1:N%b/parseFloat(b)}function Qa(N){return Math.min(1,Math.max(0,N))}function pn(N){return parseInt(N,16)}function Vv(N){return typeof N=="string"&&N.indexOf(".")!=-1&&parseFloat(N)===1}function Kv(N){return typeof N=="string"&&N.indexOf("%")!=-1}function Dn(N){return N.length==1?"0"+N:""+N}function Xs(N){return N<=1&&(N=N*100+"%"),N}function Eh(N){return Math.round(parseFloat(N)*255).toString(16)}function th(N){return pn(N)/255}var Nn=function(){var N="[-\\+]?\\d+%?",b="[-\\+]?\\d*\\.\\d+%?",e="(?:"+b+")|(?:"+N+")",d="[\\s|\\(]+("+e+")[,|\\s]+("+e+")[,|\\s]+("+e+")\\s*\\)?",m="[\\s|\\(]+("+e+")[,|\\s]+("+e+")[,|\\s]+("+e+")[,|\\s]+("+e+")\\s*\\)?";return{CSS_UNIT:new RegExp(e),rgb:new RegExp("rgb"+d),rgba:new RegExp("rgba"+m),hsl:new RegExp("hsl"+d),hsla:new RegExp("hsla"+m),hsv:new RegExp("hsv"+d),hsva:new RegExp("hsva"+m),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}}();function si(N){return!!Nn.CSS_UNIT.exec(N)}function Gv(N){N=N.replace(Tv,"").replace(Av,"").toLowerCase();var b=!1;if(bf[N])N=bf[N],b=!0;else if(N=="transparent")return{r:0,g:0,b:0,a:0,format:"name"};var e;return(e=Nn.rgb.exec(N))?{r:e[1],g:e[2],b:e[3]}:(e=Nn.rgba.exec(N))?{r:e[1],g:e[2],b:e[3],a:e[4]}:(e=Nn.hsl.exec(N))?{h:e[1],s:e[2],l:e[3]}:(e=Nn.hsla.exec(N))?{h:e[1],s:e[2],l:e[3],a:e[4]}:(e=Nn.hsv.exec(N))?{h:e[1],s:e[2],v:e[3]}:(e=Nn.hsva.exec(N))?{h:e[1],s:e[2],v:e[3],a:e[4]}:(e=Nn.hex8.exec(N))?{r:pn(e[1]),g:pn(e[2]),b:pn(e[3]),a:th(e[4]),format:b?"name":"hex8"}:(e=Nn.hex6.exec(N))?{r:pn(e[1]),g:pn(e[2]),b:pn(e[3]),format:b?"name":"hex"}:(e=Nn.hex4.exec(N))?{r:pn(e[1]+""+e[1]),g:pn(e[2]+""+e[2]),b:pn(e[3]+""+e[3]),a:th(e[4]+""+e[4]),format:b?"name":"hex8"}:(e=Nn.hex3.exec(N))?{r:pn(e[1]+""+e[1]),g:pn(e[2]+""+e[2]),b:pn(e[3]+""+e[3]),format:b?"name":"hex"}:!1}function Yv(N){var b,e;return N=N||{level:"AA",size:"small"},b=(N.level||"AA").toUpperCase(),e=(N.size||"small").toLowerCase(),b!=="AA"&&b!=="AAA"&&(b="AA"),e!=="small"&&e!=="large"&&(e="small"),{level:b,size:e}}var Za={exports:{}};/** + * @license + * Lodash + * Copyright OpenJS Foundation and other contributors + * Released under MIT license + * Based on Underscore.js 1.8.3 + * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors + */Za.exports;(function(N,b){(function(){var e,d="4.17.21",m=200,f="Unsupported core-js use. Try https://npms.io/search?q=ponyfill.",c="Expected a function",u="Invalid `variable` option passed into `_.template`",s="__lodash_hash_undefined__",t=500,n="__lodash_placeholder__",r=1,i=2,o=4,l=1,a=2,g=1,v=2,h=4,w=8,y=16,S=32,E=64,I=128,F=256,B=512,j=30,X="...",G=800,V=16,J=1,H=2,M=3,T=1/0,_=9007199254740991,A=17976931348623157e292,P=0/0,L=4294967295,$=L-1,R=L>>>1,k=[["ary",I],["bind",g],["bindKey",v],["curry",w],["curryRight",y],["flip",B],["partial",S],["partialRight",E],["rearg",F]],C="[object Arguments]",O="[object Array]",W="[object AsyncFunction]",ne="[object Boolean]",he="[object Date]",ue="[object DOMException]",Ae="[object Error]",pe="[object Function]",te="[object GeneratorFunction]",Z="[object Map]",q="[object Number]",de="[object Null]",ke="[object Object]",oe="[object Promise]",ie="[object Proxy]",Q="[object RegExp]",z="[object Set]",Y="[object String]",fe="[object Symbol]",we="[object Undefined]",U="[object WeakMap]",ve="[object WeakSet]",Se="[object ArrayBuffer]",ee="[object DataView]",se="[object Float32Array]",me="[object Float64Array]",Ee="[object Int8Array]",Ie="[object Int16Array]",Ce="[object Int32Array]",Fe="[object Uint8Array]",ze="[object Uint8ClampedArray]",je="[object Uint16Array]",ge="[object Uint32Array]",Me=/\b__p \+= '';/g,Be=/\b(__p \+=) '' \+/g,Xe=/(__e\(.*?\)|\b__t\)) \+\n'';/g,ot=/&(?:amp|lt|gt|quot|#39);/g,ct=/[&<>"']/g,st=RegExp(ot.source),rt=RegExp(ct.source),bt=/<%-([\s\S]+?)%>/g,Qe=/<%([\s\S]+?)%>/g,et=/<%=([\s\S]+?)%>/g,_t=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,ft=/^\w*$/,jt=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,It=/[\\^$.*+?()[\]{}|]/g,ht=RegExp(It.source),Dt=/^\s+/,Ut=/\s/,wt=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,er=/\{\n\/\* \[wrapped with (.+)\] \*/,Kt=/,? & /,pt=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,Gt=/[()=,{}\[\]\/\s]/,kt=/\\(\\)?/g,xt=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,$t=/\w*$/,Qt=/^[-+]0x[0-9a-f]+$/i,mt=/^0b[01]+$/i,qt=/^\[object .+?Constructor\]$/,St=/^0o[0-7]+$/i,Tt=/^(?:0|[1-9]\d*)$/,be=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,Ne=/($^)/,Le=/['\n\r\u2028\u2029\\]/g,Je="\\ud800-\\udfff",at="\\u0300-\\u036f",Mt="\\ufe20-\\ufe2f",rr="\\u20d0-\\u20ff",vr=at+Mt+rr,Dr="\\u2700-\\u27bf",yr="a-z\\xdf-\\xf6\\xf8-\\xff",lr="\\xac\\xb1\\xd7\\xf7",rn="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",nn="\\u2000-\\u206f",ar=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",Xr="A-Z\\xc0-\\xd6\\xd8-\\xde",Wr="\\ufe0e\\ufe0f",Vr=lr+rn+nn+ar,En="['’]",Vn="["+Je+"]",ji="["+Vr+"]",Kr="["+vr+"]",$i="\\d+",Kn="["+Dr+"]",_i="["+yr+"]",Si="[^"+Je+Vr+$i+Dr+yr+Xr+"]",fi="\\ud83c[\\udffb-\\udfff]",bs="(?:"+Kr+"|"+fi+")",Hi="[^"+Je+"]",Gn="(?:\\ud83c[\\udde6-\\uddff]){2}",li="[\\ud800-\\udbff][\\udc00-\\udfff]",Bn="["+Xr+"]",zi="\\u200d",Ei="(?:"+_i+"|"+Si+")",ci="(?:"+Bn+"|"+Si+")",Cn="(?:"+En+"(?:d|ll|m|re|s|t|ve))?",Ui="(?:"+En+"(?:D|LL|M|RE|S|T|VE))?",Xi=bs+"?",sn="["+Wr+"]?",vs="(?:"+zi+"(?:"+[Hi,Gn,li].join("|")+")"+sn+Xi+")*",Wi="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",ys="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",Vi=sn+Xi+vs,ws="(?:"+[Kn,Gn,li].join("|")+")"+Vi,mn="(?:"+[Hi+Kr+"?",Kr,Gn,li,Vn].join("|")+")",Ki=RegExp(En,"g"),xs=RegExp(Kr,"g"),an=RegExp(fi+"(?="+fi+")|"+mn+Vi,"g"),_s=RegExp([Bn+"?"+_i+"+"+Cn+"(?="+[ji,Bn,"$"].join("|")+")",ci+"+"+Ui+"(?="+[ji,Bn+Ei,"$"].join("|")+")",Bn+"?"+Ei+"+"+Cn,Bn+"+"+Ui,ys,Wi,$i,ws].join("|"),"g"),gn=RegExp("["+zi+Je+vr+Wr+"]"),bn=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Gi=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Ci=-1,Zt={};Zt[se]=Zt[me]=Zt[Ee]=Zt[Ie]=Zt[Ce]=Zt[Fe]=Zt[ze]=Zt[je]=Zt[ge]=!0,Zt[C]=Zt[O]=Zt[Se]=Zt[ne]=Zt[ee]=Zt[he]=Zt[Ae]=Zt[pe]=Zt[Z]=Zt[q]=Zt[ke]=Zt[Q]=Zt[z]=Zt[Y]=Zt[U]=!1;var Yt={};Yt[C]=Yt[O]=Yt[Se]=Yt[ee]=Yt[ne]=Yt[he]=Yt[se]=Yt[me]=Yt[Ee]=Yt[Ie]=Yt[Ce]=Yt[Z]=Yt[q]=Yt[ke]=Yt[Q]=Yt[z]=Yt[Y]=Yt[fe]=Yt[Fe]=Yt[ze]=Yt[je]=Yt[ge]=!0,Yt[Ae]=Yt[pe]=Yt[U]=!1;var Yi={À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",Ç:"C",ç:"c",Ð:"D",ð:"d",È:"E",É:"E",Ê:"E",Ë:"E",è:"e",é:"e",ê:"e",ë:"e",Ì:"I",Í:"I",Î:"I",Ï:"I",ì:"i",í:"i",î:"i",ï:"i",Ñ:"N",ñ:"n",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",Ù:"U",Ú:"U",Û:"U",Ü:"U",ù:"u",ú:"u",û:"u",ü:"u",Ý:"Y",ý:"y",ÿ:"y",Æ:"Ae",æ:"ae",Þ:"Th",þ:"th",ß:"ss",Ā:"A",Ă:"A",Ą:"A",ā:"a",ă:"a",ą:"a",Ć:"C",Ĉ:"C",Ċ:"C",Č:"C",ć:"c",ĉ:"c",ċ:"c",č:"c",Ď:"D",Đ:"D",ď:"d",đ:"d",Ē:"E",Ĕ:"E",Ė:"E",Ę:"E",Ě:"E",ē:"e",ĕ:"e",ė:"e",ę:"e",ě:"e",Ĝ:"G",Ğ:"G",Ġ:"G",Ģ:"G",ĝ:"g",ğ:"g",ġ:"g",ģ:"g",Ĥ:"H",Ħ:"H",ĥ:"h",ħ:"h",Ĩ:"I",Ī:"I",Ĭ:"I",Į:"I",İ:"I",ĩ:"i",ī:"i",ĭ:"i",į:"i",ı:"i",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",ĸ:"k",Ĺ:"L",Ļ:"L",Ľ:"L",Ŀ:"L",Ł:"L",ĺ:"l",ļ:"l",ľ:"l",ŀ:"l",ł:"l",Ń:"N",Ņ:"N",Ň:"N",Ŋ:"N",ń:"n",ņ:"n",ň:"n",ŋ:"n",Ō:"O",Ŏ:"O",Ő:"O",ō:"o",ŏ:"o",ő:"o",Ŕ:"R",Ŗ:"R",Ř:"R",ŕ:"r",ŗ:"r",ř:"r",Ś:"S",Ŝ:"S",Ş:"S",Š:"S",ś:"s",ŝ:"s",ş:"s",š:"s",Ţ:"T",Ť:"T",Ŧ:"T",ţ:"t",ť:"t",ŧ:"t",Ũ:"U",Ū:"U",Ŭ:"U",Ů:"U",Ű:"U",Ų:"U",ũ:"u",ū:"u",ŭ:"u",ů:"u",ű:"u",ų:"u",Ŵ:"W",ŵ:"w",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Ź:"Z",Ż:"Z",Ž:"Z",ź:"z",ż:"z",ž:"z",IJ:"IJ",ij:"ij",Œ:"Oe",œ:"oe",ʼn:"'n",ſ:"s"},Ss={"&":"&","<":"<",">":">",'"':""","'":"'"},Zi={"&":"&","<":"<",">":">",""":'"',"'":"'"},Ji={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},ye=parseFloat,Re=parseInt,We=typeof Nt=="object"&&Nt&&Nt.Object===Object&&Nt,tt=typeof self=="object"&&self&&self.Object===Object&&self,Ct=We||tt||Function("return this")(),Et=b&&!b.nodeType&&b,Jt=Et&&!0&&N&&!N.nodeType&&N,nr=Jt&&Jt.exports===Et,cr=nr&&We.process,Ht=function(){try{var Oe=Jt&&Jt.require&&Jt.require("util").types;return Oe||cr&&cr.binding&&cr.binding("util")}catch{}}(),Tr=Ht&&Ht.isArrayBuffer,Ir=Ht&&Ht.isDate,pr=Ht&&Ht.isMap,Sr=Ht&&Ht.isRegExp,Ar=Ht&&Ht.isSet,on=Ht&&Ht.isTypedArray;function hr(Oe,Ue,He){switch(He.length){case 0:return Oe.call(Ue);case 1:return Oe.call(Ue,He[0]);case 2:return Oe.call(Ue,He[0],He[1]);case 3:return Oe.call(Ue,He[0],He[1],He[2])}return Oe.apply(Ue,He)}function Tn(Oe,Ue,He,it){for(var At=-1,tr=Oe==null?0:Oe.length;++At-1}function xe(Oe,Ue,He){for(var it=-1,At=Oe==null?0:Oe.length;++it-1;);return He}function If(Oe,Ue){for(var He=Oe.length;He--&&dr(Ue,Oe[He],0)>-1;);return He}function kh(Oe,Ue){for(var He=Oe.length,it=0;He--;)Oe[He]===Ue&&++it;return it}var Mh=Mn(Yi),Rh=Mn(Ss);function Ih(Oe){return"\\"+Ji[Oe]}function Oh(Oe,Ue){return Oe==null?e:Oe[Ue]}function qi(Oe){return gn.test(Oe)}function Fh(Oe){return bn.test(Oe)}function Ph(Oe){for(var Ue,He=[];!(Ue=Oe.next()).done;)He.push(Ue.value);return He}function to(Oe){var Ue=-1,He=Array(Oe.size);return Oe.forEach(function(it,At){He[++Ue]=[At,it]}),He}function Of(Oe,Ue){return function(He){return Oe(Ue(He))}}function ui(Oe,Ue){for(var He=-1,it=Oe.length,At=0,tr=[];++He-1}function xu(p,x){var D=this.__data__,K=la(D,p);return K<0?(++this.size,D.push([p,x])):D[K][1]=x,this}Zn.prototype.clear=bu,Zn.prototype.delete=vu,Zn.prototype.get=yu,Zn.prototype.has=wu,Zn.prototype.set=xu;function Jn(p){var x=-1,D=p==null?0:p.length;for(this.clear();++x=x?p:x)),p}function wn(p,x,D,K,re,ce){var _e,Te=x&r,Pe=x&i,Ve=x&o;if(D&&(_e=re?D(p,K,re,ce):D(p)),_e!==e)return _e;if(!gr(p))return p;var Ke=Rt(p);if(Ke){if(_e=Cd(p),!Te)return Yr(p,_e)}else{var Ye=Lr(p),qe=Ye==pe||Ye==te;if(vi(p))return pl(p,Te);if(Ye==ke||Ye==C||qe&&!re){if(_e=Pe||qe?{}:Fl(p),!Te)return Pe?pd(p,Bu(_e,p)):dd(p,Xf(_e,p))}else{if(!Yt[Ye])return re?p:{};_e=Td(p,Ye,Te)}}ce||(ce=new In);var lt=ce.get(p);if(lt)return lt;ce.set(p,_e),fc(p)?p.forEach(function(yt){_e.add(wn(yt,x,D,yt,p,ce))}):ac(p)&&p.forEach(function(yt,zt){_e.set(zt,wn(yt,x,D,zt,p,ce))});var vt=Ve?Pe?ko:Ao:Pe?Jr:Fr,Bt=Ke?e:vt(p);return Pr(Bt||p,function(yt,zt){Bt&&(zt=yt,yt=p[zt]),Is(_e,zt,wn(yt,x,D,zt,p,ce))}),_e}function Lu(p){var x=Fr(p);return function(D){return Wf(D,p,x)}}function Wf(p,x,D){var K=D.length;if(p==null)return!K;for(p=fr(p);K--;){var re=D[K],ce=x[re],_e=p[re];if(_e===e&&!(re in p)||!ce(_e))return!1}return!0}function Vf(p,x,D){if(typeof p!="function")throw new vn(c);return Ls(function(){p.apply(e,D)},x)}function Os(p,x,D,K){var re=-1,ce=ae,_e=!0,Te=p.length,Pe=[],Ve=x.length;if(!Te)return Pe;D&&(x=De(x,ln(D))),K?(ce=xe,_e=!1):x.length>=m&&(ce=Cs,_e=!1,x=new ki(x));e:for(;++rere?0:re+D),K=K===e||K>re?re:Pt(K),K<0&&(K+=re),K=D>K?0:cc(K);D0&&D(Te)?x>1?Nr(Te,x-1,D,K,re):Ge(re,Te):K||(re[re.length]=Te)}return re}var fo=wl(),Yf=wl(!0);function jn(p,x){return p&&fo(p,x,Fr)}function lo(p,x){return p&&Yf(p,x,Fr)}function ha(p,x){return Ln(x,function(D){return ri(p[D])})}function Ri(p,x){x=gi(x,p);for(var D=0,K=x.length;p!=null&&Dx}function Hu(p,x){return p!=null&&sr.call(p,x)}function zu(p,x){return p!=null&&x in fr(p)}function Uu(p,x,D){return p>=Br(x,D)&&p=120&&Ke.length>=120)?new ki(_e&&Ke):e}Ke=p[0];var Ye=-1,qe=Te[0];e:for(;++Ye-1;)Te!==p&&ra.call(Te,Pe,1),ra.call(p,Pe,1);return p}function al(p,x){for(var D=p?x.length:0,K=D-1;D--;){var re=x[D];if(D==K||re!==ce){var ce=re;ti(re)?ra.call(p,re,1):wo(p,re)}}return p}function bo(p,x){return p+sa($f()*(x-p+1))}function rd(p,x,D,K){for(var re=-1,ce=Rr(ia((x-p)/(D||1)),0),_e=He(ce);ce--;)_e[K?ce:++re]=p,p+=D;return _e}function vo(p,x){var D="";if(!p||x<1||x>_)return D;do x%2&&(D+=p),x=sa(x/2),x&&(p+=p);while(x);return D}function Lt(p,x){return No(Dl(p,x,Qr),p+"")}function nd(p){return Uf(cs(p))}function id(p,x){var D=cs(p);return _a(D,Mi(x,0,D.length))}function Ns(p,x,D,K){if(!gr(p))return p;x=gi(x,p);for(var re=-1,ce=x.length,_e=ce-1,Te=p;Te!=null&&++rere?0:re+x),D=D>re?re:D,D<0&&(D+=re),re=x>D?0:D-x>>>0,x>>>=0;for(var ce=He(re);++K>>1,_e=p[ce];_e!==null&&!hn(_e)&&(D?_e<=x:_e=m){var Ve=x?null:vd(p);if(Ve)return Gs(Ve);_e=!1,re=Cs,Pe=new ki}else Pe=x?[]:Te;e:for(;++K=K?p:xn(p,x,D)}var dl=Yh||function(p){return Ct.clearTimeout(p)};function pl(p,x){if(x)return p.slice();var D=p.length,K=Nf?Nf(D):new p.constructor(D);return p.copy(K),K}function Eo(p){var x=new p.constructor(p.byteLength);return new ea(x).set(new ea(p)),x}function ld(p,x){var D=x?Eo(p.buffer):p.buffer;return new p.constructor(D,p.byteOffset,p.byteLength)}function cd(p){var x=new p.constructor(p.source,$t.exec(p));return x.lastIndex=p.lastIndex,x}function hd(p){return Rs?fr(Rs.call(p)):{}}function ml(p,x){var D=x?Eo(p.buffer):p.buffer;return new p.constructor(D,p.byteOffset,p.length)}function gl(p,x){if(p!==x){var D=p!==e,K=p===null,re=p===p,ce=hn(p),_e=x!==e,Te=x===null,Pe=x===x,Ve=hn(x);if(!Te&&!Ve&&!ce&&p>x||ce&&_e&&Pe&&!Te&&!Ve||K&&_e&&Pe||!D&&Pe||!re)return 1;if(!K&&!ce&&!Ve&&p=Te)return Pe;var Ve=D[K];return Pe*(Ve=="desc"?-1:1)}}return p.index-x.index}function bl(p,x,D,K){for(var re=-1,ce=p.length,_e=D.length,Te=-1,Pe=x.length,Ve=Rr(ce-_e,0),Ke=He(Pe+Ve),Ye=!K;++Te1?D[re-1]:e,_e=re>2?D[2]:e;for(ce=p.length>3&&typeof ce=="function"?(re--,ce):e,_e&&zr(D[0],D[1],_e)&&(ce=re<3?e:ce,re=1),x=fr(x);++K-1?re[ce?x[_e]:_e]:e}}function Sl(p){return ei(function(x){var D=x.length,K=D,re=yn.prototype.thru;for(p&&x.reverse();K--;){var ce=x[K];if(typeof ce!="function")throw new vn(c);if(re&&!_e&&wa(ce)=="wrapper")var _e=new yn([],!0)}for(K=_e?K:D;++K1&&Vt.reverse(),Ke&&PeTe))return!1;var Ve=ce.get(p),Ke=ce.get(x);if(Ve&&Ke)return Ve==x&&Ke==p;var Ye=-1,qe=!0,lt=D&a?new ki:e;for(ce.set(p,x),ce.set(x,p);++Ye1?"& ":"")+x[K],x=x.join(D>2?", ":" "),p.replace(wt,`{ +/* [wrapped with `+x+`] */ +`)}function kd(p){return Rt(p)||Fi(p)||!!(Lf&&p&&p[Lf])}function ti(p,x){var D=typeof p;return x=x??_,!!x&&(D=="number"||D!="symbol"&&Tt.test(p))&&p>-1&&p%1==0&&p0){if(++x>=G)return arguments[0]}else x=0;return p.apply(e,arguments)}}function _a(p,x){var D=-1,K=p.length,re=K-1;for(x=x===e?K:x;++D1?p[x-1]:e;return D=typeof D=="function"?(p.pop(),D):e,Gl(p,D)});function Yl(p){var x=le(p);return x.__chain__=!0,x}function j0(p,x){return x(p),p}function Sa(p,x){return x(p)}var $0=ei(function(p){var x=p.length,D=x?p[0]:0,K=this.__wrapped__,re=function(ce){return oo(ce,p)};return x>1||this.__actions__.length||!(K instanceof Xt)||!ti(D)?this.thru(re):(K=K.slice(D,+D+(x?1:0)),K.__actions__.push({func:Sa,args:[re],thisArg:e}),new yn(K,this.__chain__).thru(function(ce){return x&&!ce.length&&ce.push(e),ce}))});function H0(){return Yl(this)}function z0(){return new yn(this.value(),this.__chain__)}function U0(){this.__values__===e&&(this.__values__=lc(this.value()));var p=this.__index__>=this.__values__.length,x=p?e:this.__values__[this.__index__++];return{done:p,value:x}}function X0(){return this}function W0(p){for(var x,D=this;D instanceof fa;){var K=zl(D);K.__index__=0,K.__values__=e,x?re.__wrapped__=K:x=K;var re=K;D=D.__wrapped__}return re.__wrapped__=p,x}function V0(){var p=this.__wrapped__;if(p instanceof Xt){var x=p;return this.__actions__.length&&(x=new Xt(this)),x=x.reverse(),x.__actions__.push({func:Sa,args:[Do],thisArg:e}),new yn(x,this.__chain__)}return this.thru(Do)}function K0(){return hl(this.__wrapped__,this.__actions__)}var G0=ma(function(p,x,D){sr.call(p,D)?++p[D]:Qn(p,D,1)});function Y0(p,x,D){var K=Rt(p)?Yn:ju;return D&&zr(p,x,D)&&(x=e),K(p,gt(x,3))}function Z0(p,x){var D=Rt(p)?Ln:Gf;return D(p,gt(x,3))}var J0=_l(Ul),Q0=_l(Xl);function q0(p,x){return Nr(Ea(p,x),1)}function ep(p,x){return Nr(Ea(p,x),T)}function tp(p,x,D){return D=D===e?1:Pt(D),Nr(Ea(p,x),D)}function Zl(p,x){var D=Rt(p)?Pr:pi;return D(p,gt(x,3))}function Jl(p,x){var D=Rt(p)?An:Kf;return D(p,gt(x,3))}var rp=ma(function(p,x,D){sr.call(p,D)?p[D].push(x):Qn(p,D,[x])});function np(p,x,D,K){p=Zr(p)?p:cs(p),D=D&&!K?Pt(D):0;var re=p.length;return D<0&&(D=Rr(re+D,0)),Ma(p)?D<=re&&p.indexOf(x,D)>-1:!!re&&dr(p,x,D)>-1}var ip=Lt(function(p,x,D){var K=-1,re=typeof x=="function",ce=Zr(p)?He(p.length):[];return pi(p,function(_e){ce[++K]=re?hr(x,_e,D):Fs(_e,x,D)}),ce}),sp=ma(function(p,x,D){Qn(p,D,x)});function Ea(p,x){var D=Rt(p)?De:el;return D(p,gt(x,3))}function ap(p,x,D,K){return p==null?[]:(Rt(x)||(x=x==null?[]:[x]),D=K?e:D,Rt(D)||(D=D==null?[]:[D]),il(p,x,D))}var op=ma(function(p,x,D){p[D?0:1].push(x)},function(){return[[],[]]});function fp(p,x,D){var K=Rt(p)?dt:Es,re=arguments.length<3;return K(p,gt(x,4),D,re,pi)}function lp(p,x,D){var K=Rt(p)?nt:Es,re=arguments.length<3;return K(p,gt(x,4),D,re,Kf)}function cp(p,x){var D=Rt(p)?Ln:Gf;return D(p,Aa(gt(x,3)))}function hp(p){var x=Rt(p)?Uf:nd;return x(p)}function up(p,x,D){(D?zr(p,x,D):x===e)?x=1:x=Pt(x);var K=Rt(p)?Pu:id;return K(p,x)}function dp(p){var x=Rt(p)?Nu:ad;return x(p)}function pp(p){if(p==null)return 0;if(Zr(p))return Ma(p)?es(p):p.length;var x=Lr(p);return x==Z||x==z?p.size:po(p).length}function mp(p,x,D){var K=Rt(p)?Ot:od;return D&&zr(p,x,D)&&(x=e),K(p,gt(x,3))}var gp=Lt(function(p,x){if(p==null)return[];var D=x.length;return D>1&&zr(p,x[0],x[1])?x=[]:D>2&&zr(x[0],x[1],x[2])&&(x=[x[0]]),il(p,Nr(x,1),[])}),Ca=Zh||function(){return Ct.Date.now()};function bp(p,x){if(typeof x!="function")throw new vn(c);return p=Pt(p),function(){if(--p<1)return x.apply(this,arguments)}}function Ql(p,x,D){return x=D?e:x,x=p&&x==null?p.length:x,qn(p,I,e,e,e,e,x)}function ql(p,x){var D;if(typeof x!="function")throw new vn(c);return p=Pt(p),function(){return--p>0&&(D=x.apply(this,arguments)),p<=1&&(x=e),D}}var Lo=Lt(function(p,x,D){var K=g;if(D.length){var re=ui(D,fs(Lo));K|=S}return qn(p,K,x,D,re)}),ec=Lt(function(p,x,D){var K=g|v;if(D.length){var re=ui(D,fs(ec));K|=S}return qn(x,K,p,D,re)});function tc(p,x,D){x=D?e:x;var K=qn(p,w,e,e,e,e,e,x);return K.placeholder=tc.placeholder,K}function rc(p,x,D){x=D?e:x;var K=qn(p,y,e,e,e,e,e,x);return K.placeholder=rc.placeholder,K}function nc(p,x,D){var K,re,ce,_e,Te,Pe,Ve=0,Ke=!1,Ye=!1,qe=!0;if(typeof p!="function")throw new vn(c);x=Sn(x)||0,gr(D)&&(Ke=!!D.leading,Ye="maxWait"in D,ce=Ye?Rr(Sn(D.maxWait)||0,x):ce,qe="trailing"in D?!!D.trailing:qe);function lt(xr){var Fn=K,ii=re;return K=re=e,Ve=xr,_e=p.apply(ii,Fn),_e}function vt(xr){return Ve=xr,Te=Ls(zt,x),Ke?lt(xr):_e}function Bt(xr){var Fn=xr-Pe,ii=xr-Ve,_c=x-Fn;return Ye?Br(_c,ce-ii):_c}function yt(xr){var Fn=xr-Pe,ii=xr-Ve;return Pe===e||Fn>=x||Fn<0||Ye&&ii>=ce}function zt(){var xr=Ca();if(yt(xr))return Vt(xr);Te=Ls(zt,Bt(xr))}function Vt(xr){return Te=e,qe&&K?lt(xr):(K=re=e,_e)}function un(){Te!==e&&dl(Te),Ve=0,K=Pe=re=Te=e}function Ur(){return Te===e?_e:Vt(Ca())}function dn(){var xr=Ca(),Fn=yt(xr);if(K=arguments,re=this,Pe=xr,Fn){if(Te===e)return vt(Pe);if(Ye)return dl(Te),Te=Ls(zt,x),lt(Pe)}return Te===e&&(Te=Ls(zt,x)),_e}return dn.cancel=un,dn.flush=Ur,dn}var vp=Lt(function(p,x){return Vf(p,1,x)}),yp=Lt(function(p,x,D){return Vf(p,Sn(x)||0,D)});function wp(p){return qn(p,B)}function Ta(p,x){if(typeof p!="function"||x!=null&&typeof x!="function")throw new vn(c);var D=function(){var K=arguments,re=x?x.apply(this,K):K[0],ce=D.cache;if(ce.has(re))return ce.get(re);var _e=p.apply(this,K);return D.cache=ce.set(re,_e)||ce,_e};return D.cache=new(Ta.Cache||Jn),D}Ta.Cache=Jn;function Aa(p){if(typeof p!="function")throw new vn(c);return function(){var x=arguments;switch(x.length){case 0:return!p.call(this);case 1:return!p.call(this,x[0]);case 2:return!p.call(this,x[0],x[1]);case 3:return!p.call(this,x[0],x[1],x[2])}return!p.apply(this,x)}}function xp(p){return ql(2,p)}var _p=fd(function(p,x){x=x.length==1&&Rt(x[0])?De(x[0],ln(gt())):De(Nr(x,1),ln(gt()));var D=x.length;return Lt(function(K){for(var re=-1,ce=Br(K.length,D);++re=x}),Fi=Jf(function(){return arguments}())?Jf:function(p){return br(p)&&sr.call(p,"callee")&&!Bf.call(p,"callee")},Rt=He.isArray,Bp=Tr?ln(Tr):Wu;function Zr(p){return p!=null&&ka(p.length)&&!ri(p)}function wr(p){return br(p)&&Zr(p)}function Lp(p){return p===!0||p===!1||br(p)&&Hr(p)==ne}var vi=Qh||Zo,jp=Ir?ln(Ir):Vu;function $p(p){return br(p)&&p.nodeType===1&&!js(p)}function Hp(p){if(p==null)return!0;if(Zr(p)&&(Rt(p)||typeof p=="string"||typeof p.splice=="function"||vi(p)||ls(p)||Fi(p)))return!p.length;var x=Lr(p);if(x==Z||x==z)return!p.size;if(Bs(p))return!po(p).length;for(var D in p)if(sr.call(p,D))return!1;return!0}function zp(p,x){return Ps(p,x)}function Up(p,x,D){D=typeof D=="function"?D:e;var K=D?D(p,x):e;return K===e?Ps(p,x,e,D):!!K}function $o(p){if(!br(p))return!1;var x=Hr(p);return x==Ae||x==ue||typeof p.message=="string"&&typeof p.name=="string"&&!js(p)}function Xp(p){return typeof p=="number"&&jf(p)}function ri(p){if(!gr(p))return!1;var x=Hr(p);return x==pe||x==te||x==W||x==ie}function sc(p){return typeof p=="number"&&p==Pt(p)}function ka(p){return typeof p=="number"&&p>-1&&p%1==0&&p<=_}function gr(p){var x=typeof p;return p!=null&&(x=="object"||x=="function")}function br(p){return p!=null&&typeof p=="object"}var ac=pr?ln(pr):Gu;function Wp(p,x){return p===x||uo(p,x,Ro(x))}function Vp(p,x,D){return D=typeof D=="function"?D:e,uo(p,x,Ro(x),D)}function Kp(p){return oc(p)&&p!=+p}function Gp(p){if(Id(p))throw new At(f);return Qf(p)}function Yp(p){return p===null}function Zp(p){return p==null}function oc(p){return typeof p=="number"||br(p)&&Hr(p)==q}function js(p){if(!br(p)||Hr(p)!=ke)return!1;var x=ta(p);if(x===null)return!0;var D=sr.call(x,"constructor")&&x.constructor;return typeof D=="function"&&D instanceof D&&Js.call(D)==Vh}var Ho=Sr?ln(Sr):Yu;function Jp(p){return sc(p)&&p>=-_&&p<=_}var fc=Ar?ln(Ar):Zu;function Ma(p){return typeof p=="string"||!Rt(p)&&br(p)&&Hr(p)==Y}function hn(p){return typeof p=="symbol"||br(p)&&Hr(p)==fe}var ls=on?ln(on):Ju;function Qp(p){return p===e}function qp(p){return br(p)&&Lr(p)==U}function em(p){return br(p)&&Hr(p)==ve}var tm=ya(mo),rm=ya(function(p,x){return p<=x});function lc(p){if(!p)return[];if(Zr(p))return Ma(p)?Rn(p):Yr(p);if(Ts&&p[Ts])return Ph(p[Ts]());var x=Lr(p),D=x==Z?to:x==z?Gs:cs;return D(p)}function ni(p){if(!p)return p===0?p:0;if(p=Sn(p),p===T||p===-T){var x=p<0?-1:1;return x*A}return p===p?p:0}function Pt(p){var x=ni(p),D=x%1;return x===x?D?x-D:x:0}function cc(p){return p?Mi(Pt(p),0,L):0}function Sn(p){if(typeof p=="number")return p;if(hn(p))return P;if(gr(p)){var x=typeof p.valueOf=="function"?p.valueOf():p;p=gr(x)?x+"":x}if(typeof p!="string")return p===0?p:+p;p=Mf(p);var D=mt.test(p);return D||St.test(p)?Re(p.slice(2),D?2:8):Qt.test(p)?P:+p}function hc(p){return $n(p,Jr(p))}function nm(p){return p?Mi(Pt(p),-_,_):p===0?p:0}function ir(p){return p==null?"":cn(p)}var im=as(function(p,x){if(Bs(x)||Zr(x)){$n(x,Fr(x),p);return}for(var D in x)sr.call(x,D)&&Is(p,D,x[D])}),uc=as(function(p,x){$n(x,Jr(x),p)}),Ra=as(function(p,x,D,K){$n(x,Jr(x),p,K)}),sm=as(function(p,x,D,K){$n(x,Fr(x),p,K)}),am=ei(oo);function om(p,x){var D=ss(p);return x==null?D:Xf(D,x)}var fm=Lt(function(p,x){p=fr(p);var D=-1,K=x.length,re=K>2?x[2]:e;for(re&&zr(x[0],x[1],re)&&(K=1);++D1),ce}),$n(p,ko(p),D),K&&(D=wn(D,r|i|o,yd));for(var re=x.length;re--;)wo(D,x[re]);return D});function Tm(p,x){return pc(p,Aa(gt(x)))}var Am=ei(function(p,x){return p==null?{}:ed(p,x)});function pc(p,x){if(p==null)return{};var D=De(ko(p),function(K){return[K]});return x=gt(x),sl(p,D,function(K,re){return x(K,re[0])})}function km(p,x,D){x=gi(x,p);var K=-1,re=x.length;for(re||(re=1,p=e);++Kx){var K=p;p=x,x=K}if(D||p%1||x%1){var re=$f();return Br(p+re*(x-p+ye("1e-"+((re+"").length-1))),x)}return bo(p,x)}var jm=os(function(p,x,D){return x=x.toLowerCase(),p+(D?bc(x):x)});function bc(p){return Xo(ir(p).toLowerCase())}function vc(p){return p=ir(p),p&&p.replace(be,Mh).replace(xs,"")}function $m(p,x,D){p=ir(p),x=cn(x);var K=p.length;D=D===e?K:Mi(Pt(D),0,K);var re=D;return D-=x.length,D>=0&&p.slice(D,re)==x}function Hm(p){return p=ir(p),p&&rt.test(p)?p.replace(ct,Rh):p}function zm(p){return p=ir(p),p&&ht.test(p)?p.replace(It,"\\$&"):p}var Um=os(function(p,x,D){return p+(D?"-":"")+x.toLowerCase()}),Xm=os(function(p,x,D){return p+(D?" ":"")+x.toLowerCase()}),Wm=xl("toLowerCase");function Vm(p,x,D){p=ir(p),x=Pt(x);var K=x?es(p):0;if(!x||K>=x)return p;var re=(x-K)/2;return va(sa(re),D)+p+va(ia(re),D)}function Km(p,x,D){p=ir(p),x=Pt(x);var K=x?es(p):0;return x&&K>>0,D?(p=ir(p),p&&(typeof x=="string"||x!=null&&!Ho(x))&&(x=cn(x),!x&&qi(p))?bi(Rn(p),0,D):p.split(x,D)):[]}var e1=os(function(p,x,D){return p+(D?" ":"")+Xo(x)});function t1(p,x,D){return p=ir(p),D=D==null?0:Mi(Pt(D),0,p.length),x=cn(x),p.slice(D,D+x.length)==x}function r1(p,x,D){var K=le.templateSettings;D&&zr(p,x,D)&&(x=e),p=ir(p),x=Ra({},x,K,kl);var re=Ra({},x.imports,K.imports,kl),ce=Fr(re),_e=eo(re,ce),Te,Pe,Ve=0,Ke=x.interpolate||Ne,Ye="__p += '",qe=ro((x.escape||Ne).source+"|"+Ke.source+"|"+(Ke===et?xt:Ne).source+"|"+(x.evaluate||Ne).source+"|$","g"),lt="//# sourceURL="+(sr.call(x,"sourceURL")?(x.sourceURL+"").replace(/\s/g," "):"lodash.templateSources["+ ++Ci+"]")+` +`;p.replace(qe,function(yt,zt,Vt,un,Ur,dn){return Vt||(Vt=un),Ye+=p.slice(Ve,dn).replace(Le,Ih),zt&&(Te=!0,Ye+=`' + +__e(`+zt+`) + +'`),Ur&&(Pe=!0,Ye+=`'; +`+Ur+`; +__p += '`),Vt&&(Ye+=`' + +((__t = (`+Vt+`)) == null ? '' : __t) + +'`),Ve=dn+yt.length,yt}),Ye+=`'; +`;var vt=sr.call(x,"variable")&&x.variable;if(!vt)Ye=`with (obj) { +`+Ye+` +} +`;else if(Gt.test(vt))throw new At(u);Ye=(Pe?Ye.replace(Me,""):Ye).replace(Be,"$1").replace(Xe,"$1;"),Ye="function("+(vt||"obj")+`) { +`+(vt?"":`obj || (obj = {}); +`)+"var __t, __p = ''"+(Te?", __e = _.escape":"")+(Pe?`, __j = Array.prototype.join; +function print() { __p += __j.call(arguments, '') } +`:`; +`)+Ye+`return __p +}`;var Bt=wc(function(){return tr(ce,lt+"return "+Ye).apply(e,_e)});if(Bt.source=Ye,$o(Bt))throw Bt;return Bt}function n1(p){return ir(p).toLowerCase()}function i1(p){return ir(p).toUpperCase()}function s1(p,x,D){if(p=ir(p),p&&(D||x===e))return Mf(p);if(!p||!(x=cn(x)))return p;var K=Rn(p),re=Rn(x),ce=Rf(K,re),_e=If(K,re)+1;return bi(K,ce,_e).join("")}function a1(p,x,D){if(p=ir(p),p&&(D||x===e))return p.slice(0,Ff(p)+1);if(!p||!(x=cn(x)))return p;var K=Rn(p),re=If(K,Rn(x))+1;return bi(K,0,re).join("")}function o1(p,x,D){if(p=ir(p),p&&(D||x===e))return p.replace(Dt,"");if(!p||!(x=cn(x)))return p;var K=Rn(p),re=Rf(K,Rn(x));return bi(K,re).join("")}function f1(p,x){var D=j,K=X;if(gr(x)){var re="separator"in x?x.separator:re;D="length"in x?Pt(x.length):D,K="omission"in x?cn(x.omission):K}p=ir(p);var ce=p.length;if(qi(p)){var _e=Rn(p);ce=_e.length}if(D>=ce)return p;var Te=D-es(K);if(Te<1)return K;var Pe=_e?bi(_e,0,Te).join(""):p.slice(0,Te);if(re===e)return Pe+K;if(_e&&(Te+=Pe.length-Te),Ho(re)){if(p.slice(Te).search(re)){var Ve,Ke=Pe;for(re.global||(re=ro(re.source,ir($t.exec(re))+"g")),re.lastIndex=0;Ve=re.exec(Ke);)var Ye=Ve.index;Pe=Pe.slice(0,Ye===e?Te:Ye)}}else if(p.indexOf(cn(re),Te)!=Te){var qe=Pe.lastIndexOf(re);qe>-1&&(Pe=Pe.slice(0,qe))}return Pe+K}function l1(p){return p=ir(p),p&&st.test(p)?p.replace(ot,Lh):p}var c1=os(function(p,x,D){return p+(D?" ":"")+x.toUpperCase()}),Xo=xl("toUpperCase");function yc(p,x,D){return p=ir(p),x=D?e:x,x===e?Fh(p)?Hh(p):Er(p):p.match(x)||[]}var wc=Lt(function(p,x){try{return hr(p,e,x)}catch(D){return $o(D)?D:new At(D)}}),h1=ei(function(p,x){return Pr(x,function(D){D=Hn(D),Qn(p,D,Lo(p[D],p))}),p});function u1(p){var x=p==null?0:p.length,D=gt();return p=x?De(p,function(K){if(typeof K[1]!="function")throw new vn(c);return[D(K[0]),K[1]]}):[],Lt(function(K){for(var re=-1;++re_)return[];var D=L,K=Br(p,L);x=gt(x),p-=L;for(var re=qa(K,x);++D0||x<0)?new Xt(D):(p<0?D=D.takeRight(-p):p&&(D=D.drop(p)),x!==e&&(x=Pt(x),D=x<0?D.dropRight(-x):D.take(x-p)),D)},Xt.prototype.takeRightWhile=function(p){return this.reverse().takeWhile(p).reverse()},Xt.prototype.toArray=function(){return this.take(L)},jn(Xt.prototype,function(p,x){var D=/^(?:filter|find|map|reject)|While$/.test(x),K=/^(?:head|last)$/.test(x),re=le[K?"take"+(x=="last"?"Right":""):x],ce=K||/^find/.test(x);re&&(le.prototype[x]=function(){var _e=this.__wrapped__,Te=K?[1]:arguments,Pe=_e instanceof Xt,Ve=Te[0],Ke=Pe||Rt(_e),Ye=function(zt){var Vt=re.apply(le,Ge([zt],Te));return K&&qe?Vt[0]:Vt};Ke&&D&&typeof Ve=="function"&&Ve.length!=1&&(Pe=Ke=!1);var qe=this.__chain__,lt=!!this.__actions__.length,vt=ce&&!qe,Bt=Pe&&!lt;if(!ce&&Ke){_e=Bt?_e:new Xt(this);var yt=p.apply(_e,Te);return yt.__actions__.push({func:Sa,args:[Ye],thisArg:e}),new yn(yt,qe)}return vt&&Bt?p.apply(this,Te):(yt=this.thru(Ye),vt?K?yt.value()[0]:yt.value():yt)})}),Pr(["pop","push","shift","sort","splice","unshift"],function(p){var x=Ys[p],D=/^(?:push|sort|unshift)$/.test(p)?"tap":"thru",K=/^(?:pop|shift)$/.test(p);le.prototype[p]=function(){var re=arguments;if(K&&!this.__chain__){var ce=this.value();return x.apply(Rt(ce)?ce:[],re)}return this[D](function(_e){return x.apply(Rt(_e)?_e:[],re)})}}),jn(Xt.prototype,function(p,x){var D=le[x];if(D){var K=D.name+"";sr.call(is,K)||(is[K]=[]),is[K].push({name:x,func:D})}}),is[ga(e,v).name]=[{name:"wrapper",func:e}],Xt.prototype.clone=lu,Xt.prototype.reverse=cu,Xt.prototype.value=hu,le.prototype.at=$0,le.prototype.chain=H0,le.prototype.commit=z0,le.prototype.next=U0,le.prototype.plant=W0,le.prototype.reverse=V0,le.prototype.toJSON=le.prototype.valueOf=le.prototype.value=K0,le.prototype.first=le.prototype.head,Ts&&(le.prototype[Ts]=X0),le},ts=zh();Jt?((Jt.exports=ts)._=ts,Et._=ts):Ct._=ts}).call(Nt)})(Za,Za.exports);var kf=Za.exports;function Ch(N){N=N.replace("#","");for(var b=N.match(/../g),e=0;e<3;e++)b[e]=parseInt(b[e],16);return b}function Th(N,b,e){for(var d=[N.toString(16),b.toString(16),e.toString(16)],m=0;m<3;m++)d[m].length==1&&(d[m]="0"+d[m]);return"#"+d.join("")}function Zv(N,b){for(var e=Ch(N),d=0;d<3;d++)e[d]=Math.floor(e[d]*(1-b));return Th(e[0],e[1],e[2])}function Jv(N,b){for(var e=Ch(N),d=0;d<3;d++)e[d]=Math.floor((255-e[d])*b+e[d]);return Th(e[0],e[1],e[2])}const rf=["#FFFFFF","#000000","#BFBFBF","#323232","#4472C4","#ED7D31","#A5A5A5","#FFC000","#5B9BD5","#71AD47"],nf=["#000000","#FFFFFF","#FF0000","#00FF00","#0000FF","#FFFF00","#FF00FF","#00FFFF","#000000","#FFFFFF","#FF0000","#00FF00","#0000FF","#FFFF00","#FF00FF","#00FFFF","#800000","#008000","#000080","#808000","#800080","#008080","#C0C0C0","#808080","#9999FF","#993366","#FFFFCC","#CCFFFF","#660066","#FF8080","#0066CC","#CCCCFF","#000080","#FF00FF","#FFFF00","#00FFFF","#800080","#800000","#008080","#0000FF","#00CCFF","#CCFFFF","#CCFFCC","#FFFF99","#99CCFF","#FF99CC","#CC99FF","#FFCC99","#3366FF","#33CCCC","#99CC00","#FFCC00","#FF9900","#FF6600","#666699","#969696","#003366","#339966","#003300","#333300","#993300","#993366","#333399","#333333","#FFFFFF"];let Qv=80,qv=24;function gy(N,b={}){return ey(Z1(N),b)}function ey(N,b){return new Promise(function(e,d){const m=new XMLHttpRequest;m.open(b.method||"GET",N,!0),m.responseType=b.responseType||"arraybuffer",m.onload=function(){m.status===200?e(m.response):d(m.status)},m.onerror=function(){d(m.status)},m.withCredentials=b.withCredentials||!1,b.headers&&Object.keys(b.headers).forEach(function(f){m.setRequestHeader(f,b.headers[f])}),m.send(b.body)})}function by(N){try{return new Cv.Workbook().xlsx.load(N)}catch(b){return console.warn(b),Promise.reject(b)}}function ty(N,b,e){for(let d=0;d<(N.columns||[]).length;d++)b.cols[d.toString()]={},N.columns[d].width?b.cols[d.toString()].width=N.columns[d].width*6+(e.widthOffset||0):b.cols[d.toString()].width=Qv+(e.widthOffset||0);b.cols.len=Math.max(Object.keys(b.cols).length,e.minColLength||0)}function ry(N){let{numFmt:b,value:e,type:d}=N;switch(d){case 2:try{if(N.style.numFmt){if(N.style.numFmt.endsWith("%")){let m=N.style.numFmt.match(/\.(\d+)%/);return m?(e*100).toFixed(m[1].length)+"%":e*100+"%"}else if(/0(\.0+)?/.test(N.style.numFmt)){let m="";if(N.style.numFmt.startsWith("$")?m="$":N.style.numFmt.startsWith('"¥')&&(m="¥"),e===0&&N.style.numFmt.startsWith("_"))return"-";let f=N.style.numFmt.match(/0\.(0+)(_|;|$)/);f?f=f[1].length:f=0;let c=e.toFixed(f)+"";if(N.style.numFmt.includes("#,##")){c=c.split(".");let u=c[0].split("").reverse(),s=[];for(let t=0;t9?"#C7C9CC":typeof b>"u"?rf[N]:b>0?Jv(rf[N],b):Zv(rf[N],Math.abs(b))}function ny(N){N.style=kf.cloneDeep(N.style);let b=null;N.style.fill&&N.style.fill.fgColor&&(N.style.fill.fgColor.argb?b=sf(N.style.fill.fgColor.argb):N.style.fill.fgColor.hasOwnProperty("theme")?b=af(N.style.fill.fgColor.theme,N.style.fill.fgColor.tint):N.style.fill.fgColor.indexed?b=nf[N.style.fill.fgColor.indexed]||"#C7C9CC":b="#C7C9CC"),b&&(N.style.bgcolor=b);let e=null;if(N.style.font&&N.style.font.color&&(N.style.font.color.argb?e=sf(N.style.font.color.argb):N.style.font.color.hasOwnProperty("theme")?e=af(N.style.font.color.theme,N.style.font.color.tint):N.style.font.color.indexed?e=nf[N.style.font.color.indexed]||"#000000":e="#000000"),e&&(N.style.color=e),N.style.alignment&&(N.style.alignment.horizontal&&(N.style.align=N.style.alignment.horizontal),N.style.alignment.vertical&&(N.style.valign=N.style.alignment.vertical)),N.style.alignment&&N.style.alignment.wrapText&&(N.style.textwrap=!0),N.style.border){let d={};Object.keys(N.style.border).forEach(m=>{let f=N.style.border[m],c="#000000";typeof f.color=="string"?c=f.color:f.color&&(f.color.argb?c=sf(f.color.argb):f.color.hasOwnProperty("theme")?c=af(f.color.theme,f.color.tint):f.color.indexed&&(c=nf[f.color.indexed])),d[m]=[f.style||"thin",c]}),N.style.border2={...N.style.border},N.style.border=d}return N.style}function vy(N,b){let e=[],d=[];return N.eachSheet(m=>{d.push(m);let f={name:m.name,styles:[],rows:{},cols:{},merges:[],media:[]},c=[];for(let s in m._merges){f.merges.push(m._merges[s].shortRange);let t={};t.startAddress=m._merges[s].tl,t.endAddress=m._merges[s].br,t.YRange=m._merges[s].model.bottom-m._merges[s].model.top,t.XRange=m._merges[s].model.right-m._merges[s].model.left,c.push(t)}ty(m,f,b),(m._rows||[]).forEach((s,t)=>{f.rows[t]={cells:{}},s.height?f.rows[t].height=s.height+(b.heightOffset||0):f.rows[t].height=qv+(b.heightOffset||0),(s._cells||[]).forEach((n,r)=>{f.rows[t].cells[r]={};let i=kf.find(c,function(o){return o.startAddress==n._address});i&&n.master.address!=i.startAddress||(i&&(f.rows[t].cells[r].merge=[i.YRange,i.XRange]),f.rows[t].cells[r].text=ry(n),f.styles.push(ny(n)),f.rows[t].cells[r].style=f.styles.length-1)})}),f._media&&(f.media=f._media);let u=Object.keys(f.rows);f.rows.len=Math.max(+u[u.length-1]+1,b.hasOwnProperty("minRowLength")?b.minRowLength:100),e.push(f)}),N._worksheets=d,{workbookData:e,workbookSource:N,medias:N.media||[]}}let $a=[];function yy(N,b,e,d){e&&e._media.length&&e._media.forEach(m=>{let{imageId:f,range:c,type:u}=m;if(u==="image"){let s=iy(e,c,d);sy(N,f,b[f],s)}})}let Ha=60,za=25,of=80,ff=24,Un=window.devicePixelRatio;function iy(N,b,e){var w,y,S,E,I,F,B,j,X,G,V,J,H,M;let{tl:d={},br:m={}}=b,{nativeCol:f,nativeColOff:c,nativeRow:u,nativeRowOff:s}=d,t=Ha,n=za;for(let T=0;T{let f=0,c=0,u=m.width,s=m.height,t=d.x,n=d.y,r=d.width,i=d.height,o=r/u,l=i/s;if(t{console.error(m)})}function ay(N,b){return new Promise((e,d)=>{if($a[N])return e($a[N]);const{buffer:m}=b.buffer;let f=new Blob([m],{type:"image/"+b.extension}),c=URL.createObjectURL(f),u=new Image;u.src=c,u.onload=function(){e(u),$a[N]=u},u.onerror=function(s){d(s)}})}function xy(N){if(N){let b=N.querySelectorAll("input");for(let e of b)e&&!e.readOnly&&(e.readOnly=!0);document.activeElement&&document.activeElement.blur()}}export{Sv as S,yy as a,by as b,wy as c,gy as g,kf as l,xy as r,vy as t}; diff --git a/examples/dist/assets/index-37fb8ca9.css b/examples/dist/assets/index-37fb8ca9.css new file mode 100644 index 0000000..cf0a11f --- /dev/null +++ b/examples/dist/assets/index-37fb8ca9.css @@ -0,0 +1,138 @@ +a{font-weight:500;color:#646cff;text-decoration:inherit}a:hover{color:#535bf2}body{margin:0;display:flex;min-width:320px;min-height:100vh}h1{font-size:3.2em;line-height:1.1}button{border-radius:8px;border:1px solid transparent;padding:.6em 1.2em;font-size:1em;font-weight:500;font-family:inherit;background-color:#1a1a1a;cursor:pointer;transition:border-color .25s}button:hover{border-color:#646cff}button:focus,button:focus-visible{outline:4px auto -webkit-focus-ring-color}.card{padding:2em}#app{width:100%;margin:0;text-align:center;overflow:scroll;background:white}@media (prefers-color-scheme: light){:root{color:#213547;background-color:#fff}a:hover{color:#747bff}button{background-color:#f9f9f9}}[data-v-03c1d315] .ant-tabs-nav-wrap{padding-left:20px!important}/*! + * + * ant-design-vue v3.2.20 + * + * Copyright 2017-present, ant-design-vue. + * All rights reserved. + * + *//*!****************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/style/index.less ***! + \****************************************************************************************************************************************************************************************************************************************************/[class^=ant-]::-ms-clear,[class*=ant-]::-ms-clear,[class^=ant-] input::-ms-clear,[class*=ant-] input::-ms-clear,[class^=ant-] input::-ms-reveal,[class*=ant-] input::-ms-reveal{display:none}html,body{width:100%;height:100%}input::-ms-clear,input::-ms-reveal{display:none}*,*:before,*:after{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{margin:0;color:#000000d9;font-size:14px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-variant:tabular-nums;line-height:1.5715;background-color:#fff;font-feature-settings:"tnum"}[tabindex="-1"]:focus{outline:none!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5em;color:#000000d9;font-weight:500}p{margin-top:0;margin-bottom:1em}abbr[title],abbr[data-original-title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;border-bottom:0;cursor:help}address{margin-bottom:1em;font-style:normal;line-height:inherit}input[type=text],input[type=password],input[type=number],textarea{-webkit-appearance:none}ol,ul,dl{margin-top:0;margin-bottom:1em}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:500}dd{margin-bottom:.5em;margin-left:0}blockquote{margin:0 0 1em}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#1890ff;text-decoration:none;background-color:transparent;outline:none;cursor:pointer;transition:color .3s;-webkit-text-decoration-skip:objects}a:hover{color:#40a9ff}a:active{color:#096dd9}a:active,a:hover{text-decoration:none;outline:0}a:focus{text-decoration:none;outline:0}a[disabled]{color:#00000040;cursor:not-allowed}pre,code,kbd,samp{font-size:1em;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,Courier,monospace}pre{margin-top:0;margin-bottom:1em;overflow:auto}figure{margin:0 0 1em}img{vertical-align:middle;border-style:none}a,area,button,[role=button],input:not([type=range]),label,select,summary,textarea{touch-action:manipulation}table{border-collapse:collapse}caption{padding-top:.75em;padding-bottom:.3em;color:#00000073;text-align:left;caption-side:bottom}input,button,select,optgroup,textarea{margin:0;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}button,html [type=button],[type=reset],[type=submit]{-webkit-appearance:button}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{padding:0;border-style:none}input[type=radio],input[type=checkbox]{box-sizing:border-box;padding:0}input[type=date],input[type=time],input[type=datetime-local],input[type=month]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;margin:0;padding:0;border:0}legend{display:block;width:100%;max-width:100%;margin-bottom:.5em;padding:0;color:inherit;font-size:1.5em;line-height:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item}template{display:none}[hidden]{display:none!important}mark{padding:.2em;background-color:#feffe6}::-moz-selection{color:#fff;background:#1890ff}::selection{color:#fff;background:#1890ff}.clearfix:before{display:table;content:""}.clearfix:after{display:table;clear:both;content:""}.anticon{display:inline-block;color:inherit;font-style:normal;line-height:0;text-align:center;text-transform:none;vertical-align:-.125em;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.anticon>*{line-height:1}.anticon svg{display:inline-block}.anticon:before{display:none}.anticon .anticon-icon{display:block}.anticon>.anticon{line-height:0;vertical-align:0}.anticon[tabindex]{cursor:pointer}.anticon-spin:before{display:inline-block;animation:loadingCircle 1s infinite linear}.anticon-spin{display:inline-block;animation:loadingCircle 1s infinite linear}.ant-fade-enter,.ant-fade-appear,.ant-fade-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.ant-fade-enter.ant-fade-enter-active,.ant-fade-appear.ant-fade-appear-active{animation-name:antFadeIn;animation-play-state:running}.ant-fade-leave.ant-fade-leave-active{animation-name:antFadeOut;animation-play-state:running;pointer-events:none}.ant-fade-enter,.ant-fade-appear{opacity:0;animation-timing-function:linear}.ant-fade-leave{animation-timing-function:linear}.fade-enter,.fade-appear,.fade-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.fade-enter.fade-enter-active,.fade-appear.fade-appear-active{animation-name:antFadeIn;animation-play-state:running}.fade-leave.fade-leave-active{animation-name:antFadeOut;animation-play-state:running;pointer-events:none}.fade-enter,.fade-appear{opacity:0;animation-timing-function:linear}.fade-leave{animation-timing-function:linear}@keyframes antFadeIn{0%{opacity:0}to{opacity:1}}@keyframes antFadeOut{0%{opacity:1}to{opacity:0}}.ant-move-up-enter,.ant-move-up-appear,.ant-move-up-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.ant-move-up-enter.ant-move-up-enter-active,.ant-move-up-appear.ant-move-up-appear-active{animation-name:antMoveUpIn;animation-play-state:running}.ant-move-up-leave.ant-move-up-leave-active{animation-name:antMoveUpOut;animation-play-state:running;pointer-events:none}.ant-move-up-enter,.ant-move-up-appear{opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.ant-move-up-leave{animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.move-up-enter,.move-up-appear,.move-up-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.move-up-enter.move-up-enter-active,.move-up-appear.move-up-appear-active{animation-name:antMoveUpIn;animation-play-state:running}.move-up-leave.move-up-leave-active{animation-name:antMoveUpOut;animation-play-state:running;pointer-events:none}.move-up-enter,.move-up-appear{opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.move-up-leave{animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.ant-move-down-enter,.ant-move-down-appear,.ant-move-down-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.ant-move-down-enter.ant-move-down-enter-active,.ant-move-down-appear.ant-move-down-appear-active{animation-name:antMoveDownIn;animation-play-state:running}.ant-move-down-leave.ant-move-down-leave-active{animation-name:antMoveDownOut;animation-play-state:running;pointer-events:none}.ant-move-down-enter,.ant-move-down-appear{opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.ant-move-down-leave{animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.move-down-enter,.move-down-appear,.move-down-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.move-down-enter.move-down-enter-active,.move-down-appear.move-down-appear-active{animation-name:antMoveDownIn;animation-play-state:running}.move-down-leave.move-down-leave-active{animation-name:antMoveDownOut;animation-play-state:running;pointer-events:none}.move-down-enter,.move-down-appear{opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.move-down-leave{animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.ant-move-left-enter,.ant-move-left-appear,.ant-move-left-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.ant-move-left-enter.ant-move-left-enter-active,.ant-move-left-appear.ant-move-left-appear-active{animation-name:antMoveLeftIn;animation-play-state:running}.ant-move-left-leave.ant-move-left-leave-active{animation-name:antMoveLeftOut;animation-play-state:running;pointer-events:none}.ant-move-left-enter,.ant-move-left-appear{opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.ant-move-left-leave{animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.move-left-enter,.move-left-appear,.move-left-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.move-left-enter.move-left-enter-active,.move-left-appear.move-left-appear-active{animation-name:antMoveLeftIn;animation-play-state:running}.move-left-leave.move-left-leave-active{animation-name:antMoveLeftOut;animation-play-state:running;pointer-events:none}.move-left-enter,.move-left-appear{opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.move-left-leave{animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.ant-move-right-enter,.ant-move-right-appear,.ant-move-right-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.ant-move-right-enter.ant-move-right-enter-active,.ant-move-right-appear.ant-move-right-appear-active{animation-name:antMoveRightIn;animation-play-state:running}.ant-move-right-leave.ant-move-right-leave-active{animation-name:antMoveRightOut;animation-play-state:running;pointer-events:none}.ant-move-right-enter,.ant-move-right-appear{opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.ant-move-right-leave{animation-timing-function:cubic-bezier(.6,.04,.98,.34)}.move-right-enter,.move-right-appear,.move-right-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.move-right-enter.move-right-enter-active,.move-right-appear.move-right-appear-active{animation-name:antMoveRightIn;animation-play-state:running}.move-right-leave.move-right-leave-active{animation-name:antMoveRightOut;animation-play-state:running;pointer-events:none}.move-right-enter,.move-right-appear{opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.move-right-leave{animation-timing-function:cubic-bezier(.6,.04,.98,.34)}@keyframes antMoveDownIn{0%{transform:translateY(100%);transform-origin:0 0;opacity:0}to{transform:translateY(0);transform-origin:0 0;opacity:1}}@keyframes antMoveDownOut{0%{transform:translateY(0);transform-origin:0 0;opacity:1}to{transform:translateY(100%);transform-origin:0 0;opacity:0}}@keyframes antMoveLeftIn{0%{transform:translate(-100%);transform-origin:0 0;opacity:0}to{transform:translate(0);transform-origin:0 0;opacity:1}}@keyframes antMoveLeftOut{0%{transform:translate(0);transform-origin:0 0;opacity:1}to{transform:translate(-100%);transform-origin:0 0;opacity:0}}@keyframes antMoveRightIn{0%{transform:translate(100%);transform-origin:0 0;opacity:0}to{transform:translate(0);transform-origin:0 0;opacity:1}}@keyframes antMoveRightOut{0%{transform:translate(0);transform-origin:0 0;opacity:1}to{transform:translate(100%);transform-origin:0 0;opacity:0}}@keyframes antMoveUpIn{0%{transform:translateY(-100%);transform-origin:0 0;opacity:0}to{transform:translateY(0);transform-origin:0 0;opacity:1}}@keyframes antMoveUpOut{0%{transform:translateY(0);transform-origin:0 0;opacity:1}to{transform:translateY(-100%);transform-origin:0 0;opacity:0}}@keyframes loadingCircle{to{transform:rotate(360deg)}}[ant-click-animating=true],[ant-click-animating-without-extra-node=true]{position:relative}html{--antd-wave-shadow-color: #1890ff;--scroll-bar: 0}[ant-click-animating-without-extra-node=true]:after,.ant-click-animating-node{position:absolute;top:0;right:0;bottom:0;left:0;display:block;border-radius:inherit;box-shadow:0 0 #1890ff;box-shadow:0 0 0 0 var(--antd-wave-shadow-color);opacity:.2;animation:fadeEffect 2s cubic-bezier(.08,.82,.17,1),waveEffect .4s cubic-bezier(.08,.82,.17,1);animation-fill-mode:forwards;content:"";pointer-events:none}@keyframes waveEffect{to{box-shadow:0 0 #1890ff;box-shadow:0 0 0 6px var(--antd-wave-shadow-color)}}@keyframes fadeEffect{to{opacity:0}}.slide-up-enter,.slide-up-appear,.slide-up-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.slide-up-enter.slide-up-enter-active,.slide-up-appear.slide-up-appear-active{animation-name:antSlideUpIn;animation-play-state:running}.slide-up-leave.slide-up-leave-active{animation-name:antSlideUpOut;animation-play-state:running;pointer-events:none}.slide-up-enter,.slide-up-appear{opacity:0;animation-timing-function:cubic-bezier(.23,1,.32,1)}.slide-up-leave{animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.slide-down-enter,.slide-down-appear,.slide-down-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.slide-down-enter.slide-down-enter-active,.slide-down-appear.slide-down-appear-active{animation-name:antSlideDownIn;animation-play-state:running}.slide-down-leave.slide-down-leave-active{animation-name:antSlideDownOut;animation-play-state:running;pointer-events:none}.slide-down-enter,.slide-down-appear{opacity:0;animation-timing-function:cubic-bezier(.23,1,.32,1)}.slide-down-leave{animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.slide-left-enter,.slide-left-appear,.slide-left-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.slide-left-enter.slide-left-enter-active,.slide-left-appear.slide-left-appear-active{animation-name:antSlideLeftIn;animation-play-state:running}.slide-left-leave.slide-left-leave-active{animation-name:antSlideLeftOut;animation-play-state:running;pointer-events:none}.slide-left-enter,.slide-left-appear{opacity:0;animation-timing-function:cubic-bezier(.23,1,.32,1)}.slide-left-leave{animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.slide-right-enter,.slide-right-appear,.slide-right-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.slide-right-enter.slide-right-enter-active,.slide-right-appear.slide-right-appear-active{animation-name:antSlideRightIn;animation-play-state:running}.slide-right-leave.slide-right-leave-active{animation-name:antSlideRightOut;animation-play-state:running;pointer-events:none}.slide-right-enter,.slide-right-appear{opacity:0;animation-timing-function:cubic-bezier(.23,1,.32,1)}.slide-right-leave{animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.ant-slide-up-enter,.ant-slide-up-appear,.ant-slide-up-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.ant-slide-up-enter.ant-slide-up-enter-active,.ant-slide-up-appear.ant-slide-up-appear-active{animation-name:antSlideUpIn;animation-play-state:running}.ant-slide-up-leave.ant-slide-up-leave-active{animation-name:antSlideUpOut;animation-play-state:running;pointer-events:none}.ant-slide-up-enter,.ant-slide-up-appear{opacity:0;animation-timing-function:cubic-bezier(.23,1,.32,1)}.ant-slide-up-leave{animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.ant-slide-down-enter,.ant-slide-down-appear,.ant-slide-down-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.ant-slide-down-enter.ant-slide-down-enter-active,.ant-slide-down-appear.ant-slide-down-appear-active{animation-name:antSlideDownIn;animation-play-state:running}.ant-slide-down-leave.ant-slide-down-leave-active{animation-name:antSlideDownOut;animation-play-state:running;pointer-events:none}.ant-slide-down-enter,.ant-slide-down-appear{opacity:0;animation-timing-function:cubic-bezier(.23,1,.32,1)}.ant-slide-down-leave{animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.ant-slide-left-enter,.ant-slide-left-appear,.ant-slide-left-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.ant-slide-left-enter.ant-slide-left-enter-active,.ant-slide-left-appear.ant-slide-left-appear-active{animation-name:antSlideLeftIn;animation-play-state:running}.ant-slide-left-leave.ant-slide-left-leave-active{animation-name:antSlideLeftOut;animation-play-state:running;pointer-events:none}.ant-slide-left-enter,.ant-slide-left-appear{opacity:0;animation-timing-function:cubic-bezier(.23,1,.32,1)}.ant-slide-left-leave{animation-timing-function:cubic-bezier(.755,.05,.855,.06)}.ant-slide-right-enter,.ant-slide-right-appear,.ant-slide-right-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.ant-slide-right-enter.ant-slide-right-enter-active,.ant-slide-right-appear.ant-slide-right-appear-active{animation-name:antSlideRightIn;animation-play-state:running}.ant-slide-right-leave.ant-slide-right-leave-active{animation-name:antSlideRightOut;animation-play-state:running;pointer-events:none}.ant-slide-right-enter,.ant-slide-right-appear{opacity:0;animation-timing-function:cubic-bezier(.23,1,.32,1)}.ant-slide-right-leave{animation-timing-function:cubic-bezier(.755,.05,.855,.06)}@keyframes antSlideUpIn{0%{transform:scaleY(.8);transform-origin:0% 0%;opacity:0}to{transform:scaleY(1);transform-origin:0% 0%;opacity:1}}@keyframes antSlideUpOut{0%{transform:scaleY(1);transform-origin:0% 0%;opacity:1}to{transform:scaleY(.8);transform-origin:0% 0%;opacity:0}}@keyframes antSlideDownIn{0%{transform:scaleY(.8);transform-origin:100% 100%;opacity:0}to{transform:scaleY(1);transform-origin:100% 100%;opacity:1}}@keyframes antSlideDownOut{0%{transform:scaleY(1);transform-origin:100% 100%;opacity:1}to{transform:scaleY(.8);transform-origin:100% 100%;opacity:0}}@keyframes antSlideLeftIn{0%{transform:scaleX(.8);transform-origin:0% 0%;opacity:0}to{transform:scaleX(1);transform-origin:0% 0%;opacity:1}}@keyframes antSlideLeftOut{0%{transform:scaleX(1);transform-origin:0% 0%;opacity:1}to{transform:scaleX(.8);transform-origin:0% 0%;opacity:0}}@keyframes antSlideRightIn{0%{transform:scaleX(.8);transform-origin:100% 0%;opacity:0}to{transform:scaleX(1);transform-origin:100% 0%;opacity:1}}@keyframes antSlideRightOut{0%{transform:scaleX(1);transform-origin:100% 0%;opacity:1}to{transform:scaleX(.8);transform-origin:100% 0%;opacity:0}}.ant-zoom-enter,.ant-zoom-appear,.ant-zoom-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.ant-zoom-enter.ant-zoom-enter-active,.ant-zoom-appear.ant-zoom-appear-active{animation-name:antZoomIn;animation-play-state:running}.ant-zoom-leave.ant-zoom-leave-active{animation-name:antZoomOut;animation-play-state:running;pointer-events:none}.ant-zoom-enter,.ant-zoom-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.ant-zoom-enter-prepare,.ant-zoom-appear-prepare{transform:none}.ant-zoom-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-enter,.zoom-appear,.zoom-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-enter.zoom-enter-active,.zoom-appear.zoom-appear-active{animation-name:antZoomIn;animation-play-state:running}.zoom-leave.zoom-leave-active{animation-name:antZoomOut;animation-play-state:running;pointer-events:none}.zoom-enter,.zoom-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-enter-prepare,.zoom-appear-prepare{transform:none}.zoom-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.ant-zoom-big-enter,.ant-zoom-big-appear,.ant-zoom-big-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.ant-zoom-big-enter.ant-zoom-big-enter-active,.ant-zoom-big-appear.ant-zoom-big-appear-active{animation-name:antZoomBigIn;animation-play-state:running}.ant-zoom-big-leave.ant-zoom-big-leave-active{animation-name:antZoomBigOut;animation-play-state:running;pointer-events:none}.ant-zoom-big-enter,.ant-zoom-big-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.ant-zoom-big-enter-prepare,.ant-zoom-big-appear-prepare{transform:none}.ant-zoom-big-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-big-enter,.zoom-big-appear,.zoom-big-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-big-enter.zoom-big-enter-active,.zoom-big-appear.zoom-big-appear-active{animation-name:antZoomBigIn;animation-play-state:running}.zoom-big-leave.zoom-big-leave-active{animation-name:antZoomBigOut;animation-play-state:running;pointer-events:none}.zoom-big-enter,.zoom-big-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-big-enter-prepare,.zoom-big-appear-prepare{transform:none}.zoom-big-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.ant-zoom-big-fast-enter,.ant-zoom-big-fast-appear,.ant-zoom-big-fast-leave{animation-duration:.1s;animation-fill-mode:both;animation-play-state:paused}.ant-zoom-big-fast-enter.ant-zoom-big-fast-enter-active,.ant-zoom-big-fast-appear.ant-zoom-big-fast-appear-active{animation-name:antZoomBigIn;animation-play-state:running}.ant-zoom-big-fast-leave.ant-zoom-big-fast-leave-active{animation-name:antZoomBigOut;animation-play-state:running;pointer-events:none}.ant-zoom-big-fast-enter,.ant-zoom-big-fast-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.ant-zoom-big-fast-enter-prepare,.ant-zoom-big-fast-appear-prepare{transform:none}.ant-zoom-big-fast-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-big-fast-enter,.zoom-big-fast-appear,.zoom-big-fast-leave{animation-duration:.1s;animation-fill-mode:both;animation-play-state:paused}.zoom-big-fast-enter.zoom-big-fast-enter-active,.zoom-big-fast-appear.zoom-big-fast-appear-active{animation-name:antZoomBigIn;animation-play-state:running}.zoom-big-fast-leave.zoom-big-fast-leave-active{animation-name:antZoomBigOut;animation-play-state:running;pointer-events:none}.zoom-big-fast-enter,.zoom-big-fast-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-big-fast-enter-prepare,.zoom-big-fast-appear-prepare{transform:none}.zoom-big-fast-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.ant-zoom-up-enter,.ant-zoom-up-appear,.ant-zoom-up-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.ant-zoom-up-enter.ant-zoom-up-enter-active,.ant-zoom-up-appear.ant-zoom-up-appear-active{animation-name:antZoomUpIn;animation-play-state:running}.ant-zoom-up-leave.ant-zoom-up-leave-active{animation-name:antZoomUpOut;animation-play-state:running;pointer-events:none}.ant-zoom-up-enter,.ant-zoom-up-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.ant-zoom-up-enter-prepare,.ant-zoom-up-appear-prepare{transform:none}.ant-zoom-up-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-up-enter,.zoom-up-appear,.zoom-up-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-up-enter.zoom-up-enter-active,.zoom-up-appear.zoom-up-appear-active{animation-name:antZoomUpIn;animation-play-state:running}.zoom-up-leave.zoom-up-leave-active{animation-name:antZoomUpOut;animation-play-state:running;pointer-events:none}.zoom-up-enter,.zoom-up-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-up-enter-prepare,.zoom-up-appear-prepare{transform:none}.zoom-up-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.ant-zoom-down-enter,.ant-zoom-down-appear,.ant-zoom-down-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.ant-zoom-down-enter.ant-zoom-down-enter-active,.ant-zoom-down-appear.ant-zoom-down-appear-active{animation-name:antZoomDownIn;animation-play-state:running}.ant-zoom-down-leave.ant-zoom-down-leave-active{animation-name:antZoomDownOut;animation-play-state:running;pointer-events:none}.ant-zoom-down-enter,.ant-zoom-down-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.ant-zoom-down-enter-prepare,.ant-zoom-down-appear-prepare{transform:none}.ant-zoom-down-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-down-enter,.zoom-down-appear,.zoom-down-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-down-enter.zoom-down-enter-active,.zoom-down-appear.zoom-down-appear-active{animation-name:antZoomDownIn;animation-play-state:running}.zoom-down-leave.zoom-down-leave-active{animation-name:antZoomDownOut;animation-play-state:running;pointer-events:none}.zoom-down-enter,.zoom-down-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-down-enter-prepare,.zoom-down-appear-prepare{transform:none}.zoom-down-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.ant-zoom-left-enter,.ant-zoom-left-appear,.ant-zoom-left-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.ant-zoom-left-enter.ant-zoom-left-enter-active,.ant-zoom-left-appear.ant-zoom-left-appear-active{animation-name:antZoomLeftIn;animation-play-state:running}.ant-zoom-left-leave.ant-zoom-left-leave-active{animation-name:antZoomLeftOut;animation-play-state:running;pointer-events:none}.ant-zoom-left-enter,.ant-zoom-left-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.ant-zoom-left-enter-prepare,.ant-zoom-left-appear-prepare{transform:none}.ant-zoom-left-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-left-enter,.zoom-left-appear,.zoom-left-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-left-enter.zoom-left-enter-active,.zoom-left-appear.zoom-left-appear-active{animation-name:antZoomLeftIn;animation-play-state:running}.zoom-left-leave.zoom-left-leave-active{animation-name:antZoomLeftOut;animation-play-state:running;pointer-events:none}.zoom-left-enter,.zoom-left-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-left-enter-prepare,.zoom-left-appear-prepare{transform:none}.zoom-left-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.ant-zoom-right-enter,.ant-zoom-right-appear,.ant-zoom-right-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.ant-zoom-right-enter.ant-zoom-right-enter-active,.ant-zoom-right-appear.ant-zoom-right-appear-active{animation-name:antZoomRightIn;animation-play-state:running}.ant-zoom-right-leave.ant-zoom-right-leave-active{animation-name:antZoomRightOut;animation-play-state:running;pointer-events:none}.ant-zoom-right-enter,.ant-zoom-right-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.ant-zoom-right-enter-prepare,.ant-zoom-right-appear-prepare{transform:none}.ant-zoom-right-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}.zoom-right-enter,.zoom-right-appear,.zoom-right-leave{animation-duration:.2s;animation-fill-mode:both;animation-play-state:paused}.zoom-right-enter.zoom-right-enter-active,.zoom-right-appear.zoom-right-appear-active{animation-name:antZoomRightIn;animation-play-state:running}.zoom-right-leave.zoom-right-leave-active{animation-name:antZoomRightOut;animation-play-state:running;pointer-events:none}.zoom-right-enter,.zoom-right-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(.08,.82,.17,1)}.zoom-right-enter-prepare,.zoom-right-appear-prepare{transform:none}.zoom-right-leave{animation-timing-function:cubic-bezier(.78,.14,.15,.86)}@keyframes antZoomIn{0%{transform:scale(.2);opacity:0}to{transform:scale(1);opacity:1}}@keyframes antZoomOut{0%{transform:scale(1)}to{transform:scale(.2);opacity:0}}@keyframes antZoomBigIn{0%{transform:scale(.8);opacity:0}to{transform:scale(1);opacity:1}}@keyframes antZoomBigOut{0%{transform:scale(1)}to{transform:scale(.8);opacity:0}}@keyframes antZoomUpIn{0%{transform:scale(.8);transform-origin:50% 0%;opacity:0}to{transform:scale(1);transform-origin:50% 0%}}@keyframes antZoomUpOut{0%{transform:scale(1);transform-origin:50% 0%}to{transform:scale(.8);transform-origin:50% 0%;opacity:0}}@keyframes antZoomLeftIn{0%{transform:scale(.8);transform-origin:0% 50%;opacity:0}to{transform:scale(1);transform-origin:0% 50%}}@keyframes antZoomLeftOut{0%{transform:scale(1);transform-origin:0% 50%}to{transform:scale(.8);transform-origin:0% 50%;opacity:0}}@keyframes antZoomRightIn{0%{transform:scale(.8);transform-origin:100% 50%;opacity:0}to{transform:scale(1);transform-origin:100% 50%}}@keyframes antZoomRightOut{0%{transform:scale(1);transform-origin:100% 50%}to{transform:scale(.8);transform-origin:100% 50%;opacity:0}}@keyframes antZoomDownIn{0%{transform:scale(.8);transform-origin:50% 100%;opacity:0}to{transform:scale(1);transform-origin:50% 100%}}@keyframes antZoomDownOut{0%{transform:scale(1);transform-origin:50% 100%}to{transform:scale(.8);transform-origin:50% 100%;opacity:0}}.ant-motion-collapse-legacy{overflow:hidden}.ant-motion-collapse-legacy-active{transition:height .2s cubic-bezier(.645,.045,.355,1),opacity .2s cubic-bezier(.645,.045,.355,1)!important}.ant-motion-collapse{overflow:hidden;transition:height .2s cubic-bezier(.645,.045,.355,1),opacity .2s cubic-bezier(.645,.045,.355,1)!important}/*!**********************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/affix/style/index.less ***! + \**********************************************************************************************************************************************************************************************************************************************************/.ant-affix{position:fixed;z-index:10}/*!**********************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/alert/style/index.less ***! + \**********************************************************************************************************************************************************************************************************************************************************/.ant-alert{box-sizing:border-box;margin:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;display:flex;align-items:center;padding:8px 15px;word-wrap:break-word;border-radius:2px}.ant-alert-content{flex:1;min-width:0}.ant-alert-icon{margin-right:8px}.ant-alert-description{display:none;font-size:14px;line-height:22px}.ant-alert-success{background-color:#f6ffed;border:1px solid #b7eb8f}.ant-alert-success .ant-alert-icon{color:#52c41a}.ant-alert-info{background-color:#e6f7ff;border:1px solid #91d5ff}.ant-alert-info .ant-alert-icon{color:#1890ff}.ant-alert-warning{background-color:#fffbe6;border:1px solid #ffe58f}.ant-alert-warning .ant-alert-icon{color:#faad14}.ant-alert-error{background-color:#fff2f0;border:1px solid #ffccc7}.ant-alert-error .ant-alert-icon{color:#ff4d4f}.ant-alert-error .ant-alert-description>pre{margin:0;padding:0}.ant-alert-action{margin-left:8px}.ant-alert-close-icon{margin-left:8px;padding:0;overflow:hidden;font-size:12px;line-height:12px;background-color:transparent;border:none;outline:none;cursor:pointer}.ant-alert-close-icon .anticon-close{color:#00000073;transition:color .3s}.ant-alert-close-icon .anticon-close:hover{color:#000000bf}.ant-alert-close-text{color:#00000073;transition:color .3s}.ant-alert-close-text:hover{color:#000000bf}.ant-alert-with-description{align-items:flex-start;padding:15px 15px 15px 24px}.ant-alert-with-description.ant-alert-no-icon{padding:15px}.ant-alert-with-description .ant-alert-icon{margin-right:15px;font-size:24px}.ant-alert-with-description .ant-alert-message{display:block;margin-bottom:4px;color:#000000d9;font-size:16px}.ant-alert-message{color:#000000d9}.ant-alert-with-description .ant-alert-description{display:block}.ant-alert.ant-alert-motion-leave{overflow:hidden;opacity:1;transition:max-height .3s cubic-bezier(.78,.14,.15,.86),opacity .3s cubic-bezier(.78,.14,.15,.86),padding-top .3s cubic-bezier(.78,.14,.15,.86),padding-bottom .3s cubic-bezier(.78,.14,.15,.86),margin-bottom .3s cubic-bezier(.78,.14,.15,.86)}.ant-alert.ant-alert-motion-leave-active{max-height:0;margin-bottom:0!important;padding-top:0;padding-bottom:0;opacity:0}.ant-alert-banner{margin-bottom:0;border:0;border-radius:0}.ant-alert.ant-alert-rtl{direction:rtl}.ant-alert-rtl .ant-alert-icon{margin-right:auto;margin-left:8px}.ant-alert-rtl .ant-alert-action,.ant-alert-rtl .ant-alert-close-icon{margin-right:8px;margin-left:auto}.ant-alert-rtl.ant-alert-with-description{padding-right:24px;padding-left:15px}.ant-alert-rtl.ant-alert-with-description .ant-alert-icon{margin-right:auto;margin-left:15px}/*!***********************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/anchor/style/index.less ***! + \***********************************************************************************************************************************************************************************************************************************************************/.ant-anchor{box-sizing:border-box;margin:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;padding:0 0 0 2px}.ant-anchor-wrapper{margin-left:-4px;padding-left:4px;overflow:auto;background-color:transparent}.ant-anchor-ink{position:absolute;top:0;left:0;height:100%}.ant-anchor-ink:before{position:relative;display:block;width:2px;height:100%;margin:0 auto;background-color:#f0f0f0;content:" "}.ant-anchor-ink-ball{position:absolute;left:50%;display:none;width:8px;height:8px;background-color:#fff;border:2px solid #1890ff;border-radius:8px;transform:translate(-50%);transition:top .3s ease-in-out}.ant-anchor-ink-ball.visible{display:inline-block}.ant-anchor-fixed .ant-anchor-ink .ant-anchor-ink-ball{display:none}.ant-anchor-link{padding:7px 0 7px 16px;line-height:1.143}.ant-anchor-link-title{position:relative;display:block;margin-bottom:6px;overflow:hidden;color:#000000d9;white-space:nowrap;text-overflow:ellipsis;transition:all .3s}.ant-anchor-link-title:only-child{margin-bottom:0}.ant-anchor-link-active>.ant-anchor-link-title{color:#1890ff}.ant-anchor-link .ant-anchor-link{padding-top:5px;padding-bottom:5px}.ant-anchor-rtl{direction:rtl}.ant-anchor-rtl.ant-anchor-wrapper{margin-right:-4px;margin-left:0;padding-right:4px;padding-left:0}.ant-anchor-rtl .ant-anchor-ink{right:0;left:auto}.ant-anchor-rtl .ant-anchor-ink-ball{right:50%;left:0;transform:translate(50%)}.ant-anchor-rtl .ant-anchor-link{padding:7px 16px 7px 0}/*!******************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/auto-complete/style/index.less ***! + \******************************************************************************************************************************************************************************************************************************************************************/.ant-select-auto-complete{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum"}.ant-select-auto-complete .ant-select-clear{right:13px}/*!***********************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/select/style/index.less ***! + \***********************************************************************************************************************************************************************************************************************************************************/.ant-select-single .ant-select-selector{display:flex}.ant-select-single .ant-select-selector .ant-select-selection-search{position:absolute;top:0;right:11px;bottom:0;left:11px}.ant-select-single .ant-select-selector .ant-select-selection-search-input{width:100%}.ant-select-single .ant-select-selector .ant-select-selection-item,.ant-select-single .ant-select-selector .ant-select-selection-placeholder{padding:0;line-height:30px;transition:all .3s}@supports (-moz-appearance: meterbar){.ant-select-single .ant-select-selector .ant-select-selection-item,.ant-select-single .ant-select-selector .ant-select-selection-placeholder{line-height:30px}}.ant-select-single .ant-select-selector .ant-select-selection-item{position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-select-single .ant-select-selector .ant-select-selection-placeholder{transition:none;pointer-events:none}.ant-select-single .ant-select-selector:after,.ant-select-single .ant-select-selector .ant-select-selection-item:after,.ant-select-single .ant-select-selector .ant-select-selection-placeholder:after{display:inline-block;width:0;visibility:hidden;content:" "}.ant-select-single.ant-select-show-arrow .ant-select-selection-search{right:25px}.ant-select-single.ant-select-show-arrow .ant-select-selection-item,.ant-select-single.ant-select-show-arrow .ant-select-selection-placeholder{padding-right:18px}.ant-select-single.ant-select-open .ant-select-selection-item{color:#bfbfbf}.ant-select-single:not(.ant-select-customize-input) .ant-select-selector{width:100%;height:32px;padding:0 11px}.ant-select-single:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-search-input{height:30px}.ant-select-single:not(.ant-select-customize-input) .ant-select-selector:after{line-height:30px}.ant-select-single.ant-select-customize-input .ant-select-selector:after{display:none}.ant-select-single.ant-select-customize-input .ant-select-selector .ant-select-selection-search{position:static;width:100%}.ant-select-single.ant-select-customize-input .ant-select-selector .ant-select-selection-placeholder{position:absolute;right:0;left:0;padding:0 11px}.ant-select-single.ant-select-customize-input .ant-select-selector .ant-select-selection-placeholder:after{display:none}.ant-select-single.ant-select-lg:not(.ant-select-customize-input) .ant-select-selector{height:40px}.ant-select-single.ant-select-lg:not(.ant-select-customize-input) .ant-select-selector:after,.ant-select-single.ant-select-lg:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-item,.ant-select-single.ant-select-lg:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-placeholder{line-height:38px}.ant-select-single.ant-select-lg:not(.ant-select-customize-input):not(.ant-select-customize-input) .ant-select-selection-search-input{height:38px}.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selector{height:24px}.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selector:after,.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-item,.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-placeholder{line-height:22px}.ant-select-single.ant-select-sm:not(.ant-select-customize-input):not(.ant-select-customize-input) .ant-select-selection-search-input{height:22px}.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selection-search{right:7px;left:7px}.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selector{padding:0 7px}.ant-select-single.ant-select-sm:not(.ant-select-customize-input).ant-select-show-arrow .ant-select-selection-search{right:28px}.ant-select-single.ant-select-sm:not(.ant-select-customize-input).ant-select-show-arrow .ant-select-selection-item,.ant-select-single.ant-select-sm:not(.ant-select-customize-input).ant-select-show-arrow .ant-select-selection-placeholder{padding-right:21px}.ant-select-single.ant-select-lg:not(.ant-select-customize-input) .ant-select-selector{padding:0 11px}.ant-select-selection-overflow{position:relative;display:flex;flex:auto;flex-wrap:wrap;max-width:100%}.ant-select-selection-overflow-item{flex:none;align-self:center;max-width:100%}.ant-select-multiple .ant-select-selector{display:flex;flex-wrap:wrap;align-items:center;padding:1px 4px}.ant-select-show-search.ant-select-multiple .ant-select-selector{cursor:text}.ant-select-disabled.ant-select-multiple .ant-select-selector{background:#f5f5f5;cursor:not-allowed}.ant-select-multiple .ant-select-selector:after{display:inline-block;width:0;margin:2px 0;line-height:24px;content:" "}.ant-select-multiple.ant-select-show-arrow .ant-select-selector,.ant-select-multiple.ant-select-allow-clear .ant-select-selector{padding-right:24px}.ant-select-multiple .ant-select-selection-item{position:relative;display:flex;flex:none;box-sizing:border-box;max-width:100%;height:24px;margin-top:2px;margin-bottom:2px;line-height:22px;background:#f5f5f5;border:1px solid #f0f0f0;border-radius:2px;cursor:default;transition:font-size .3s,line-height .3s,height .3s;-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-margin-end:4px;margin-inline-end:4px;-webkit-padding-start:8px;padding-inline-start:8px;-webkit-padding-end:4px;padding-inline-end:4px}.ant-select-disabled.ant-select-multiple .ant-select-selection-item{color:#bfbfbf;border-color:#d9d9d9;cursor:not-allowed}.ant-select-multiple .ant-select-selection-item-content{display:inline-block;margin-right:4px;overflow:hidden;white-space:pre;text-overflow:ellipsis}.ant-select-multiple .ant-select-selection-item-remove{color:inherit;font-style:normal;line-height:0;text-align:center;text-transform:none;vertical-align:-.125em;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;color:#00000073;font-weight:700;font-size:10px;line-height:inherit;cursor:pointer}.ant-select-multiple .ant-select-selection-item-remove>*{line-height:1}.ant-select-multiple .ant-select-selection-item-remove svg{display:inline-block}.ant-select-multiple .ant-select-selection-item-remove:before{display:none}.ant-select-multiple .ant-select-selection-item-remove .ant-select-multiple .ant-select-selection-item-remove-icon{display:block}.ant-select-multiple .ant-select-selection-item-remove>.anticon{vertical-align:-.2em}.ant-select-multiple .ant-select-selection-item-remove:hover{color:#000000bf}.ant-select-multiple .ant-select-selection-overflow-item+.ant-select-selection-overflow-item .ant-select-selection-search{-webkit-margin-start:0;margin-inline-start:0}.ant-select-multiple .ant-select-selection-search{position:relative;max-width:100%;-webkit-margin-start:7px;margin-inline-start:7px}.ant-select-multiple .ant-select-selection-search-input,.ant-select-multiple .ant-select-selection-search-mirror{height:24px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";line-height:24px;transition:all .3s}.ant-select-multiple .ant-select-selection-search-input{width:100%;min-width:4.1px}.ant-select-multiple .ant-select-selection-search-mirror{position:absolute;top:0;left:0;z-index:999;white-space:pre;visibility:hidden}.ant-select-multiple .ant-select-selection-placeholder{position:absolute;top:50%;right:11px;left:11px;transform:translateY(-50%);transition:all .3s}.ant-select-multiple.ant-select-lg .ant-select-selector:after{line-height:32px}.ant-select-multiple.ant-select-lg .ant-select-selection-item{height:32px;line-height:30px}.ant-select-multiple.ant-select-lg .ant-select-selection-search{height:32px;line-height:32px}.ant-select-multiple.ant-select-lg .ant-select-selection-search-input,.ant-select-multiple.ant-select-lg .ant-select-selection-search-mirror{height:32px;line-height:30px}.ant-select-multiple.ant-select-sm .ant-select-selector:after{line-height:16px}.ant-select-multiple.ant-select-sm .ant-select-selection-item{height:16px;line-height:14px}.ant-select-multiple.ant-select-sm .ant-select-selection-search{height:16px;line-height:16px}.ant-select-multiple.ant-select-sm .ant-select-selection-search-input,.ant-select-multiple.ant-select-sm .ant-select-selection-search-mirror{height:16px;line-height:14px}.ant-select-multiple.ant-select-sm .ant-select-selection-placeholder{left:7px}.ant-select-multiple.ant-select-sm .ant-select-selection-search{-webkit-margin-start:3px;margin-inline-start:3px}.ant-select-multiple.ant-select-lg .ant-select-selection-item{height:32px;line-height:32px}.ant-select-disabled .ant-select-selection-item-remove{display:none}.ant-select{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;display:inline-block;cursor:pointer}.ant-select:not(.ant-select-customize-input) .ant-select-selector{position:relative;background-color:#fff;border:1px solid #d9d9d9;border-radius:2px;transition:all .3s cubic-bezier(.645,.045,.355,1)}.ant-select:not(.ant-select-customize-input) .ant-select-selector input{cursor:pointer}.ant-select-show-search.ant-select:not(.ant-select-customize-input) .ant-select-selector{cursor:text}.ant-select-show-search.ant-select:not(.ant-select-customize-input) .ant-select-selector input{cursor:auto}.ant-select-focused:not(.ant-select-disabled).ant-select:not(.ant-select-customize-input) .ant-select-selector{border-color:#40a9ff;box-shadow:0 0 0 2px #1890ff33;border-right-width:1px!important;outline:0}.ant-select-disabled.ant-select:not(.ant-select-customize-input) .ant-select-selector{color:#00000040;background:#f5f5f5;cursor:not-allowed}.ant-select-multiple.ant-select-disabled.ant-select:not(.ant-select-customize-input) .ant-select-selector{background:#f5f5f5}.ant-select-disabled.ant-select:not(.ant-select-customize-input) .ant-select-selector input{cursor:not-allowed}.ant-select:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-search-input{margin:0;padding:0;background:transparent;border:none;outline:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.ant-select:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-search-input::-webkit-search-cancel-button{display:none;-webkit-appearance:none}.ant-select:not(.ant-select-disabled):hover .ant-select-selector{border-color:#40a9ff;border-right-width:1px!important}.ant-select-selection-item{flex:1;overflow:hidden;font-weight:400;white-space:nowrap;text-overflow:ellipsis}@media all and (-ms-high-contrast: none){.ant-select-selection-item *::-ms-backdrop,.ant-select-selection-item{flex:auto}}.ant-select-selection-placeholder{flex:1;overflow:hidden;color:#bfbfbf;white-space:nowrap;text-overflow:ellipsis;pointer-events:none}@media all and (-ms-high-contrast: none){.ant-select-selection-placeholder *::-ms-backdrop,.ant-select-selection-placeholder{flex:auto}}.ant-select-arrow{display:inline-block;color:inherit;font-style:normal;line-height:0;text-transform:none;vertical-align:-.125em;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:absolute;top:50%;right:11px;width:12px;height:12px;margin-top:-6px;color:#00000040;font-size:12px;line-height:1;text-align:center;pointer-events:none}.ant-select-arrow>*{line-height:1}.ant-select-arrow svg{display:inline-block}.ant-select-arrow:before{display:none}.ant-select-arrow .ant-select-arrow-icon{display:block}.ant-select-arrow .anticon{vertical-align:top;transition:transform .3s}.ant-select-arrow .anticon>svg{vertical-align:top}.ant-select-arrow .anticon:not(.ant-select-suffix){pointer-events:auto}.ant-select-disabled .ant-select-arrow{cursor:not-allowed}.ant-select-clear{position:absolute;top:50%;right:11px;z-index:1;display:inline-block;width:12px;height:12px;margin-top:-6px;color:#00000040;font-size:12px;font-style:normal;line-height:1;text-align:center;text-transform:none;background:#fff;cursor:pointer;opacity:0;transition:color .3s ease,opacity .15s ease;text-rendering:auto}.ant-select-clear:before{display:block}.ant-select-clear:hover{color:#00000073}.ant-select:hover .ant-select-clear{opacity:1}.ant-select-dropdown{margin:0;color:#000000d9;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:absolute;top:-9999px;left:-9999px;z-index:1050;box-sizing:border-box;padding:4px 0;overflow:hidden;font-size:14px;font-variant:initial;background-color:#fff;border-radius:2px;outline:none;box-shadow:0 3px 6px -4px #0000001f,0 6px 16px #00000014,0 9px 28px 8px #0000000d}.ant-select-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-select-dropdown-placement-bottomLeft,.ant-select-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-select-dropdown-placement-bottomLeft{animation-name:antSlideUpIn}.ant-select-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-select-dropdown-placement-topLeft,.ant-select-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-select-dropdown-placement-topLeft{animation-name:antSlideDownIn}.ant-select-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-select-dropdown-placement-bottomLeft{animation-name:antSlideUpOut}.ant-select-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-select-dropdown-placement-topLeft{animation-name:antSlideDownOut}.ant-select-dropdown-hidden{display:none}.ant-select-dropdown-empty{color:#00000040}.ant-select-item-empty{position:relative;display:block;min-height:32px;padding:5px 12px;color:#000000d9;font-weight:400;font-size:14px;line-height:22px;color:#00000040}.ant-select-item{position:relative;display:block;min-height:32px;padding:5px 12px;color:#000000d9;font-weight:400;font-size:14px;line-height:22px;cursor:pointer;transition:background .3s ease}.ant-select-item-group{color:#00000073;font-size:12px;cursor:default}.ant-select-item-option{display:flex}.ant-select-item-option-content{flex:auto;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ant-select-item-option-state{flex:none}.ant-select-item-option-active:not(.ant-select-item-option-disabled){background-color:#f5f5f5}.ant-select-item-option-selected:not(.ant-select-item-option-disabled){color:#000000d9;font-weight:600;background-color:#e6f7ff}.ant-select-item-option-selected:not(.ant-select-item-option-disabled) .ant-select-item-option-state{color:#1890ff}.ant-select-item-option-disabled{color:#00000040;cursor:not-allowed}.ant-select-item-option-disabled.ant-select-item-option-selected{background-color:#f5f5f5}.ant-select-item-option-grouped{padding-left:24px}.ant-select-lg{font-size:16px}.ant-select-borderless .ant-select-selector{background-color:transparent!important;border-color:transparent!important;box-shadow:none!important}.ant-select-rtl{direction:rtl}.ant-select-rtl .ant-select-arrow,.ant-select-rtl .ant-select-clear{right:initial;left:11px}.ant-select-dropdown-rtl{direction:rtl}.ant-select-dropdown-rtl .ant-select-item-option-grouped{padding-right:24px;padding-left:12px}.ant-select-rtl.ant-select-multiple.ant-select-show-arrow .ant-select-selector,.ant-select-rtl.ant-select-multiple.ant-select-allow-clear .ant-select-selector{padding-right:4px;padding-left:24px}.ant-select-rtl.ant-select-multiple .ant-select-selection-item{text-align:right}.ant-select-rtl.ant-select-multiple .ant-select-selection-item-content{margin-right:0;margin-left:4px;text-align:right}.ant-select-rtl.ant-select-multiple .ant-select-selection-search-mirror{right:0;left:auto}.ant-select-rtl.ant-select-multiple .ant-select-selection-placeholder{right:11px;left:auto}.ant-select-rtl.ant-select-multiple.ant-select-sm .ant-select-selection-placeholder{right:7px}.ant-select-rtl.ant-select-single .ant-select-selector .ant-select-selection-item,.ant-select-rtl.ant-select-single .ant-select-selector .ant-select-selection-placeholder{right:0;left:9px;text-align:right}.ant-select-rtl.ant-select-single.ant-select-show-arrow .ant-select-selection-search{right:11px;left:25px}.ant-select-rtl.ant-select-single.ant-select-show-arrow .ant-select-selection-item,.ant-select-rtl.ant-select-single.ant-select-show-arrow .ant-select-selection-placeholder{padding-right:0;padding-left:18px}.ant-select-rtl.ant-select-single.ant-select-sm:not(.ant-select-customize-input).ant-select-show-arrow .ant-select-selection-search{right:6px}.ant-select-rtl.ant-select-single.ant-select-sm:not(.ant-select-customize-input).ant-select-show-arrow .ant-select-selection-item,.ant-select-rtl.ant-select-single.ant-select-sm:not(.ant-select-customize-input).ant-select-show-arrow .ant-select-selection-placeholder{padding-right:0;padding-left:21px}/*!**********************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/empty/style/index.less ***! + \**********************************************************************************************************************************************************************************************************************************************************/.ant-empty{margin:0 8px;font-size:14px;line-height:1.5715;text-align:center}.ant-empty-image{height:100px;margin-bottom:8px}.ant-empty-image img{height:100%}.ant-empty-image svg{height:100%;margin:auto}.ant-empty-footer{margin-top:16px}.ant-empty-normal{margin:32px 0;color:#00000040}.ant-empty-normal .ant-empty-image{height:40px}.ant-empty-small{margin:8px 0;color:#00000040}.ant-empty-small .ant-empty-image{height:35px}.ant-empty-img-default-ellipse{fill:#f5f5f5;fill-opacity:.8}.ant-empty-img-default-path-1{fill:#aeb8c2}.ant-empty-img-default-path-2{fill:url(#linearGradient-1)}.ant-empty-img-default-path-3{fill:#f5f5f7}.ant-empty-img-default-path-4,.ant-empty-img-default-path-5{fill:#dce0e6}.ant-empty-img-default-g{fill:#fff}.ant-empty-img-simple-ellipse{fill:#f5f5f5}.ant-empty-img-simple-g{stroke:#d9d9d9}.ant-empty-img-simple-path{fill:#fafafa}.ant-empty-rtl{direction:rtl}/*!***********************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/avatar/style/index.less ***! + \***********************************************************************************************************************************************************************************************************************************************************/.ant-avatar{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;display:inline-block;overflow:hidden;color:#fff;white-space:nowrap;text-align:center;vertical-align:middle;background:#ccc;width:32px;height:32px;line-height:32px;border-radius:50%}.ant-avatar-image{background:transparent}.ant-avatar .ant-image-img{display:block}.ant-avatar-string{position:absolute;left:50%;transform-origin:0 center}.ant-avatar.ant-avatar-icon{font-size:18px}.ant-avatar.ant-avatar-icon>.anticon{margin:0}.ant-avatar-lg{width:40px;height:40px;line-height:40px;border-radius:50%}.ant-avatar-lg-string{position:absolute;left:50%;transform-origin:0 center}.ant-avatar-lg.ant-avatar-icon{font-size:24px}.ant-avatar-lg.ant-avatar-icon>.anticon{margin:0}.ant-avatar-sm{width:24px;height:24px;line-height:24px;border-radius:50%}.ant-avatar-sm-string{position:absolute;left:50%;transform-origin:0 center}.ant-avatar-sm.ant-avatar-icon{font-size:14px}.ant-avatar-sm.ant-avatar-icon>.anticon{margin:0}.ant-avatar-square{border-radius:2px}.ant-avatar>img{display:block;width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.ant-avatar-group{display:inline-flex}.ant-avatar-group .ant-avatar{border:1px solid #fff}.ant-avatar-group .ant-avatar:not(:first-child){margin-left:-8px}.ant-avatar-group-popover .ant-avatar+.ant-avatar{margin-left:3px}.ant-avatar-group-rtl .ant-avatar:not(:first-child){margin-right:-8px;margin-left:0}.ant-avatar-group-popover.ant-popover-rtl .ant-avatar+.ant-avatar{margin-right:3px;margin-left:0}/*!*************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/back-top/style/index.less ***! + \*************************************************************************************************************************************************************************************************************************************************************/.ant-back-top{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:fixed;right:100px;bottom:50px;z-index:10;width:40px;height:40px;cursor:pointer}.ant-back-top:empty{display:none}.ant-back-top-rtl{right:auto;left:100px;direction:rtl}.ant-back-top-content{width:40px;height:40px;overflow:hidden;color:#fff;text-align:center;background-color:#00000073;border-radius:20px;transition:all .3s}.ant-back-top-content:hover{background-color:#000000d9;transition:all .3s}.ant-back-top-icon{font-size:24px;line-height:40px}@media screen and (max-width: 768px){.ant-back-top{right:60px}}@media screen and (max-width: 480px){.ant-back-top{right:20px}}/*!**********************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/badge/style/index.less ***! + \**********************************************************************************************************************************************************************************************************************************************************/.ant-badge{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;display:inline-block;line-height:1}.ant-badge-count{z-index:auto;min-width:20px;height:20px;padding:0 6px;color:#fff;font-weight:400;font-size:12px;line-height:20px;white-space:nowrap;text-align:center;background:#ff4d4f;border-radius:10px;box-shadow:0 0 0 1px #fff}.ant-badge-count a,.ant-badge-count a:hover{color:#fff}.ant-badge-count-sm{min-width:14px;height:14px;padding:0;font-size:12px;line-height:14px;border-radius:7px}.ant-badge-multiple-words{padding:0 8px}.ant-badge-dot{z-index:auto;width:6px;min-width:6px;height:6px;background:#ff4d4f;border-radius:100%;box-shadow:0 0 0 1px #fff}.ant-badge-dot.ant-scroll-number{transition:background 1.5s}.ant-badge-count,.ant-badge-dot,.ant-badge .ant-scroll-number-custom-component{position:absolute;top:0;right:0;transform:translate(50%,-50%);transform-origin:100% 0%}.ant-badge-count.anticon-spin,.ant-badge-dot.anticon-spin,.ant-badge .ant-scroll-number-custom-component.anticon-spin{animation:antBadgeLoadingCircle 1s infinite linear}.ant-badge-status{line-height:inherit;vertical-align:baseline}.ant-badge-status-dot{position:relative;top:-1px;display:inline-block;width:6px;height:6px;vertical-align:middle;border-radius:50%}.ant-badge-status-success{background-color:#52c41a}.ant-badge-status-processing{position:relative;background-color:#1890ff}.ant-badge-status-processing:after{position:absolute;top:0;left:0;width:100%;height:100%;border:1px solid #1890ff;border-radius:50%;animation:antStatusProcessing 1.2s infinite ease-in-out;content:""}.ant-badge-status-default{background-color:#d9d9d9}.ant-badge-status-error{background-color:#ff4d4f}.ant-badge-status-warning{background-color:#faad14}.ant-badge-status-pink,.ant-badge-status-magenta{background:#eb2f96}.ant-badge-status-red{background:#f5222d}.ant-badge-status-volcano{background:#fa541c}.ant-badge-status-orange{background:#fa8c16}.ant-badge-status-yellow{background:#fadb14}.ant-badge-status-gold{background:#faad14}.ant-badge-status-cyan{background:#13c2c2}.ant-badge-status-lime{background:#a0d911}.ant-badge-status-green{background:#52c41a}.ant-badge-status-blue{background:#1890ff}.ant-badge-status-geekblue{background:#2f54eb}.ant-badge-status-purple{background:#722ed1}.ant-badge-status-text{margin-left:8px;color:#000000d9;font-size:14px}.ant-badge-zoom-appear,.ant-badge-zoom-enter{animation:antZoomBadgeIn .3s cubic-bezier(.12,.4,.29,1.46);animation-fill-mode:both}.ant-badge-zoom-leave{animation:antZoomBadgeOut .3s cubic-bezier(.71,-.46,.88,.6);animation-fill-mode:both}.ant-badge-not-a-wrapper .ant-badge-zoom-appear,.ant-badge-not-a-wrapper .ant-badge-zoom-enter{animation:antNoWrapperZoomBadgeIn .3s cubic-bezier(.12,.4,.29,1.46)}.ant-badge-not-a-wrapper .ant-badge-zoom-leave{animation:antNoWrapperZoomBadgeOut .3s cubic-bezier(.71,-.46,.88,.6)}.ant-badge-not-a-wrapper:not(.ant-badge-status){vertical-align:middle}.ant-badge-not-a-wrapper .ant-scroll-number-custom-component,.ant-badge-not-a-wrapper .ant-badge-count{transform:none}.ant-badge-not-a-wrapper .ant-scroll-number-custom-component,.ant-badge-not-a-wrapper .ant-scroll-number{position:relative;top:auto;display:block;transform-origin:50% 50%}@keyframes antStatusProcessing{0%{transform:scale(.8);opacity:.5}to{transform:scale(2.4);opacity:0}}.ant-scroll-number{overflow:hidden;direction:ltr}.ant-scroll-number-only{position:relative;display:inline-block;height:20px;transition:all .3s cubic-bezier(.645,.045,.355,1);-webkit-transform-style:preserve-3d;-webkit-backface-visibility:hidden}.ant-scroll-number-only>p.ant-scroll-number-only-unit{height:20px;margin:0;-webkit-transform-style:preserve-3d;-webkit-backface-visibility:hidden}.ant-scroll-number-symbol{vertical-align:top}@keyframes antZoomBadgeIn{0%{transform:scale(0) translate(50%,-50%);opacity:0}to{transform:scale(1) translate(50%,-50%)}}@keyframes antZoomBadgeOut{0%{transform:scale(1) translate(50%,-50%)}to{transform:scale(0) translate(50%,-50%);opacity:0}}@keyframes antNoWrapperZoomBadgeIn{0%{transform:scale(0);opacity:0}to{transform:scale(1)}}@keyframes antNoWrapperZoomBadgeOut{0%{transform:scale(1)}to{transform:scale(0);opacity:0}}@keyframes antBadgeLoadingCircle{0%{transform-origin:50%}to{transform:translate(50%,-50%) rotate(360deg);transform-origin:50%}}.ant-ribbon-wrapper{position:relative}.ant-ribbon{box-sizing:border-box;margin:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:absolute;top:8px;height:22px;padding:0 8px;color:#fff;line-height:22px;white-space:nowrap;background-color:#1890ff;border-radius:2px}.ant-ribbon-text{color:#fff}.ant-ribbon-corner{position:absolute;top:100%;width:8px;height:8px;color:currentcolor;border:4px solid;transform:scaleY(.75);transform-origin:top}.ant-ribbon-corner:after{position:absolute;top:-4px;left:-4px;width:inherit;height:inherit;color:#00000040;border:inherit;content:""}.ant-ribbon-color-pink,.ant-ribbon-color-magenta{color:#eb2f96;background:#eb2f96}.ant-ribbon-color-red{color:#f5222d;background:#f5222d}.ant-ribbon-color-volcano{color:#fa541c;background:#fa541c}.ant-ribbon-color-orange{color:#fa8c16;background:#fa8c16}.ant-ribbon-color-yellow{color:#fadb14;background:#fadb14}.ant-ribbon-color-gold{color:#faad14;background:#faad14}.ant-ribbon-color-cyan{color:#13c2c2;background:#13c2c2}.ant-ribbon-color-lime{color:#a0d911;background:#a0d911}.ant-ribbon-color-green{color:#52c41a;background:#52c41a}.ant-ribbon-color-blue{color:#1890ff;background:#1890ff}.ant-ribbon-color-geekblue{color:#2f54eb;background:#2f54eb}.ant-ribbon-color-purple{color:#722ed1;background:#722ed1}.ant-ribbon.ant-ribbon-placement-end{right:-8px;border-bottom-right-radius:0}.ant-ribbon.ant-ribbon-placement-end .ant-ribbon-corner{right:0;border-color:currentcolor transparent transparent currentcolor}.ant-ribbon.ant-ribbon-placement-start{left:-8px;border-bottom-left-radius:0}.ant-ribbon.ant-ribbon-placement-start .ant-ribbon-corner{left:0;border-color:currentcolor currentcolor transparent transparent}.ant-badge-rtl{direction:rtl}.ant-badge-rtl .ant-badge:not(.ant-badge-not-a-wrapper) .ant-badge-count,.ant-badge-rtl .ant-badge:not(.ant-badge-not-a-wrapper) .ant-badge-dot,.ant-badge-rtl .ant-badge:not(.ant-badge-not-a-wrapper) .ant-scroll-number-custom-component{right:auto;left:0;direction:ltr;transform:translate(-50%,-50%);transform-origin:0% 0%}.ant-badge-rtl.ant-badge:not(.ant-badge-not-a-wrapper) .ant-scroll-number-custom-component{right:auto;left:0;transform:translate(-50%,-50%);transform-origin:0% 0%}.ant-badge-rtl .ant-badge-status-text{margin-right:8px;margin-left:0}.ant-ribbon-rtl{direction:rtl}.ant-ribbon-rtl.ant-ribbon-placement-end{right:unset;left:-8px;border-bottom-right-radius:2px;border-bottom-left-radius:0}.ant-ribbon-rtl.ant-ribbon-placement-end .ant-ribbon-corner{right:unset;left:0;border-color:currentcolor currentcolor transparent transparent}.ant-ribbon-rtl.ant-ribbon-placement-end .ant-ribbon-corner:after{border-color:currentcolor currentcolor transparent transparent}.ant-ribbon-rtl.ant-ribbon-placement-start{right:-8px;left:unset;border-bottom-right-radius:0;border-bottom-left-radius:2px}.ant-ribbon-rtl.ant-ribbon-placement-start .ant-ribbon-corner{right:0;left:unset;border-color:currentcolor transparent transparent currentcolor}.ant-ribbon-rtl.ant-ribbon-placement-start .ant-ribbon-corner:after{border-color:currentcolor transparent transparent currentcolor}/*!***************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/breadcrumb/style/index.less ***! + \***************************************************************************************************************************************************************************************************************************************************************/.ant-breadcrumb{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";color:#00000073;font-size:14px}.ant-breadcrumb .anticon{font-size:14px}.ant-breadcrumb a{color:#00000073;transition:color .3s}.ant-breadcrumb a:hover{color:#40a9ff}.ant-breadcrumb>span:last-child{color:#000000d9}.ant-breadcrumb>span:last-child a{color:#000000d9}.ant-breadcrumb>span:last-child .ant-breadcrumb-separator{display:none}.ant-breadcrumb-separator{margin:0 8px;color:#00000073}.ant-breadcrumb-link>.anticon+span,.ant-breadcrumb-link>.anticon+a{margin-left:4px}.ant-breadcrumb-overlay-link>.anticon{margin-left:4px}.ant-breadcrumb-rtl{direction:rtl}.ant-breadcrumb-rtl:before{display:table;content:""}.ant-breadcrumb-rtl:after{display:table;clear:both;content:""}.ant-breadcrumb-rtl>span{float:right}.ant-breadcrumb-rtl .ant-breadcrumb-link>.anticon+span,.ant-breadcrumb-rtl .ant-breadcrumb-link>.anticon+a{margin-right:4px;margin-left:0}.ant-breadcrumb-rtl .ant-breadcrumb-overlay-link>.anticon{margin-right:4px;margin-left:0}/*!*********************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/menu/style/index.less ***! + \*********************************************************************************************************************************************************************************************************************************************************/.ant-menu-item-danger.ant-menu-item,.ant-menu-item-danger.ant-menu-item:hover,.ant-menu-item-danger.ant-menu-item-active{color:#ff4d4f}.ant-menu-item-danger.ant-menu-item:active{background:#fff1f0}.ant-menu-item-danger.ant-menu-item-selected{color:#ff4d4f}.ant-menu-item-danger.ant-menu-item-selected>a,.ant-menu-item-danger.ant-menu-item-selected>a:hover{color:#ff4d4f}.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-danger.ant-menu-item-selected{background-color:#fff1f0}.ant-menu-inline .ant-menu-item-danger.ant-menu-item:after{border-right-color:#ff4d4f}.ant-menu-dark .ant-menu-item-danger.ant-menu-item,.ant-menu-dark .ant-menu-item-danger.ant-menu-item:hover,.ant-menu-dark .ant-menu-item-danger.ant-menu-item>a{color:#ff4d4f}.ant-menu-dark.ant-menu-dark:not(.ant-menu-horizontal) .ant-menu-item-danger.ant-menu-item-selected{color:#fff;background-color:#ff4d4f}.ant-menu{box-sizing:border-box;margin:0;font-variant:tabular-nums;line-height:1.5715;font-feature-settings:"tnum";padding:0;color:#000000d9;font-size:14px;line-height:0;text-align:left;list-style:none;background:#fff;outline:none;box-shadow:0 3px 6px -4px #0000001f,0 6px 16px #00000014,0 9px 28px 8px #0000000d;transition:background .3s,width .3s cubic-bezier(.2,0,0,1) 0s}.ant-menu:before{display:table;content:""}.ant-menu:after{display:table;clear:both;content:""}.ant-menu.ant-menu-root:focus-visible{box-shadow:0 0 0 2px #bae7ff}.ant-menu ul,.ant-menu ol{margin:0;padding:0;list-style:none}.ant-menu-overflow{display:flex}.ant-menu-overflow-item{flex:none}.ant-menu-hidden,.ant-menu-submenu-hidden{display:none}.ant-menu-item-group-title{height:1.5715;padding:8px 16px;color:#00000073;font-size:14px;line-height:1.5715;transition:all .3s}.ant-menu-horizontal .ant-menu-submenu{transition:border-color .3s cubic-bezier(.645,.045,.355,1),background .3s cubic-bezier(.645,.045,.355,1)}.ant-menu-submenu,.ant-menu-submenu-inline{transition:border-color .3s cubic-bezier(.645,.045,.355,1),background .3s cubic-bezier(.645,.045,.355,1),padding .15s cubic-bezier(.645,.045,.355,1)}.ant-menu-submenu-selected{color:#1890ff}.ant-menu-item:active,.ant-menu-submenu-title:active{background:#e6f7ff}.ant-menu-submenu .ant-menu-sub{cursor:initial;transition:background .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1)}.ant-menu-title-content{transition:color .3s}.ant-menu-item a{color:#000000d9}.ant-menu-item a:hover{color:#1890ff}.ant-menu-item a:before{position:absolute;top:0;right:0;bottom:0;left:0;background-color:transparent;content:""}.ant-menu-item>.ant-badge a{color:#000000d9}.ant-menu-item>.ant-badge a:hover{color:#1890ff}.ant-menu-item-divider{overflow:hidden;line-height:0;border-color:#f0f0f0;border-style:solid;border-width:1px 0 0}.ant-menu-item-divider-dashed{border-style:dashed}.ant-menu-horizontal .ant-menu-item,.ant-menu-horizontal .ant-menu-submenu{margin-top:-1px}.ant-menu-horizontal>.ant-menu-item:hover,.ant-menu-horizontal>.ant-menu-item-active,.ant-menu-horizontal>.ant-menu-submenu .ant-menu-submenu-title:hover{background-color:transparent}.ant-menu-item-selected,.ant-menu-item-selected a,.ant-menu-item-selected a:hover{color:#1890ff}.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected{background-color:#e6f7ff}.ant-menu-inline,.ant-menu-vertical,.ant-menu-vertical-left{border-right:1px solid #f0f0f0}.ant-menu-vertical-right{border-left:1px solid #f0f0f0}.ant-menu-vertical.ant-menu-sub,.ant-menu-vertical-left.ant-menu-sub,.ant-menu-vertical-right.ant-menu-sub{min-width:160px;max-height:calc(100vh - 100px);padding:0;overflow:hidden;border-right:0}.ant-menu-vertical.ant-menu-sub:not([class*=-active]),.ant-menu-vertical-left.ant-menu-sub:not([class*=-active]),.ant-menu-vertical-right.ant-menu-sub:not([class*=-active]){overflow-x:hidden;overflow-y:auto}.ant-menu-vertical.ant-menu-sub .ant-menu-item,.ant-menu-vertical-left.ant-menu-sub .ant-menu-item,.ant-menu-vertical-right.ant-menu-sub .ant-menu-item{left:0;margin-left:0;border-right:0}.ant-menu-vertical.ant-menu-sub .ant-menu-item:after,.ant-menu-vertical-left.ant-menu-sub .ant-menu-item:after,.ant-menu-vertical-right.ant-menu-sub .ant-menu-item:after{border-right:0}.ant-menu-vertical.ant-menu-sub>.ant-menu-item,.ant-menu-vertical-left.ant-menu-sub>.ant-menu-item,.ant-menu-vertical-right.ant-menu-sub>.ant-menu-item,.ant-menu-vertical.ant-menu-sub>.ant-menu-submenu,.ant-menu-vertical-left.ant-menu-sub>.ant-menu-submenu,.ant-menu-vertical-right.ant-menu-sub>.ant-menu-submenu{transform-origin:0 0}.ant-menu-horizontal.ant-menu-sub{min-width:114px}.ant-menu-horizontal .ant-menu-item,.ant-menu-horizontal .ant-menu-submenu-title{transition:border-color .3s,background .3s}.ant-menu-item,.ant-menu-submenu-title{position:relative;display:block;margin:0;padding:0 20px;white-space:nowrap;cursor:pointer;transition:border-color .3s,background .3s,padding .3s cubic-bezier(.645,.045,.355,1)}.ant-menu-item .ant-menu-item-icon,.ant-menu-submenu-title .ant-menu-item-icon,.ant-menu-item .anticon,.ant-menu-submenu-title .anticon{min-width:14px;font-size:14px;transition:font-size .15s cubic-bezier(.215,.61,.355,1),margin .3s cubic-bezier(.645,.045,.355,1),color .3s}.ant-menu-item .ant-menu-item-icon+span,.ant-menu-submenu-title .ant-menu-item-icon+span,.ant-menu-item .anticon+span,.ant-menu-submenu-title .anticon+span{margin-left:10px;opacity:1;transition:opacity .3s cubic-bezier(.645,.045,.355,1),margin .3s,color .3s}.ant-menu-item .ant-menu-item-icon.svg,.ant-menu-submenu-title .ant-menu-item-icon.svg{vertical-align:-.125em}.ant-menu-item.ant-menu-item-only-child>.anticon,.ant-menu-submenu-title.ant-menu-item-only-child>.anticon,.ant-menu-item.ant-menu-item-only-child>.ant-menu-item-icon,.ant-menu-submenu-title.ant-menu-item-only-child>.ant-menu-item-icon{margin-right:0}.ant-menu-item:focus-visible,.ant-menu-submenu-title:focus-visible{box-shadow:0 0 0 2px #bae7ff}.ant-menu>.ant-menu-item-divider{margin:1px 0;padding:0}.ant-menu-submenu-popup{position:absolute;z-index:1050;background:transparent;border-radius:2px;box-shadow:none;transform-origin:0 0}.ant-menu-submenu-popup:before{position:absolute;top:-7px;right:0;bottom:0;left:0;z-index:-1;width:100%;height:100%;opacity:.0001;content:" "}.ant-menu-submenu-placement-rightTop:before{top:0;left:-7px}.ant-menu-submenu>.ant-menu{background-color:#fff;border-radius:2px}.ant-menu-submenu>.ant-menu-submenu-title:after{transition:transform .3s cubic-bezier(.645,.045,.355,1)}.ant-menu-submenu-popup>.ant-menu{background-color:#fff}.ant-menu-submenu-expand-icon,.ant-menu-submenu-arrow{position:absolute;top:50%;right:16px;width:10px;color:#000000d9;transform:translateY(-50%);transition:transform .3s cubic-bezier(.645,.045,.355,1)}.ant-menu-submenu-arrow:before,.ant-menu-submenu-arrow:after{position:absolute;width:6px;height:1.5px;background-color:currentcolor;border-radius:2px;transition:background .3s cubic-bezier(.645,.045,.355,1),transform .3s cubic-bezier(.645,.045,.355,1),top .3s cubic-bezier(.645,.045,.355,1),color .3s cubic-bezier(.645,.045,.355,1);content:""}.ant-menu-submenu-arrow:before{transform:rotate(45deg) translateY(-2.5px)}.ant-menu-submenu-arrow:after{transform:rotate(-45deg) translateY(2.5px)}.ant-menu-submenu:hover>.ant-menu-submenu-title>.ant-menu-submenu-expand-icon,.ant-menu-submenu:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow{color:#1890ff}.ant-menu-inline-collapsed .ant-menu-submenu-arrow:before,.ant-menu-submenu-inline .ant-menu-submenu-arrow:before{transform:rotate(-45deg) translate(2.5px)}.ant-menu-inline-collapsed .ant-menu-submenu-arrow:after,.ant-menu-submenu-inline .ant-menu-submenu-arrow:after{transform:rotate(45deg) translate(-2.5px)}.ant-menu-submenu-horizontal .ant-menu-submenu-arrow{display:none}.ant-menu-submenu-open.ant-menu-submenu-inline>.ant-menu-submenu-title>.ant-menu-submenu-arrow{transform:translateY(-2px)}.ant-menu-submenu-open.ant-menu-submenu-inline>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after{transform:rotate(-45deg) translate(-2.5px)}.ant-menu-submenu-open.ant-menu-submenu-inline>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before{transform:rotate(45deg) translate(2.5px)}.ant-menu-vertical .ant-menu-submenu-selected,.ant-menu-vertical-left .ant-menu-submenu-selected,.ant-menu-vertical-right .ant-menu-submenu-selected{color:#1890ff}.ant-menu-horizontal{line-height:46px;border:0;border-bottom:1px solid #f0f0f0;box-shadow:none}.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-item,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-submenu{margin-top:-1px;margin-bottom:0;padding:0 20px}.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-item:hover,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-submenu:hover,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-item-active,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-submenu-active,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-item-open,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-submenu-open,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-item-selected,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-submenu-selected{color:#1890ff}.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-item:hover:after,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-submenu:hover:after,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-item-active:after,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-submenu-active:after,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-item-open:after,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-submenu-open:after,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-item-selected:after,.ant-menu-horizontal:not(.ant-menu-dark)>.ant-menu-submenu-selected:after{border-bottom:2px solid #1890ff}.ant-menu-horizontal>.ant-menu-item,.ant-menu-horizontal>.ant-menu-submenu{position:relative;top:1px;display:inline-block;vertical-align:bottom}.ant-menu-horizontal>.ant-menu-item:after,.ant-menu-horizontal>.ant-menu-submenu:after{position:absolute;right:20px;bottom:0;left:20px;border-bottom:2px solid transparent;transition:border-color .3s cubic-bezier(.645,.045,.355,1);content:""}.ant-menu-horizontal>.ant-menu-submenu>.ant-menu-submenu-title{padding:0}.ant-menu-horizontal>.ant-menu-item a{color:#000000d9}.ant-menu-horizontal>.ant-menu-item a:hover{color:#1890ff}.ant-menu-horizontal>.ant-menu-item a:before{bottom:-2px}.ant-menu-horizontal>.ant-menu-item-selected a{color:#1890ff}.ant-menu-horizontal:after{display:block;clear:both;height:0;content:" "}.ant-menu-vertical .ant-menu-item,.ant-menu-vertical-left .ant-menu-item,.ant-menu-vertical-right .ant-menu-item,.ant-menu-inline .ant-menu-item{position:relative}.ant-menu-vertical .ant-menu-item:after,.ant-menu-vertical-left .ant-menu-item:after,.ant-menu-vertical-right .ant-menu-item:after,.ant-menu-inline .ant-menu-item:after{position:absolute;top:0;right:0;bottom:0;border-right:3px solid #1890ff;transform:scaleY(.0001);opacity:0;transition:transform .15s cubic-bezier(.215,.61,.355,1),opacity .15s cubic-bezier(.215,.61,.355,1);content:""}.ant-menu-vertical .ant-menu-item,.ant-menu-vertical-left .ant-menu-item,.ant-menu-vertical-right .ant-menu-item,.ant-menu-inline .ant-menu-item,.ant-menu-vertical .ant-menu-submenu-title,.ant-menu-vertical-left .ant-menu-submenu-title,.ant-menu-vertical-right .ant-menu-submenu-title,.ant-menu-inline .ant-menu-submenu-title{height:40px;margin-top:4px;margin-bottom:4px;padding:0 16px;overflow:hidden;line-height:40px;text-overflow:ellipsis}.ant-menu-vertical .ant-menu-submenu,.ant-menu-vertical-left .ant-menu-submenu,.ant-menu-vertical-right .ant-menu-submenu,.ant-menu-inline .ant-menu-submenu{padding-bottom:.02px}.ant-menu-vertical .ant-menu-item:not(:last-child),.ant-menu-vertical-left .ant-menu-item:not(:last-child),.ant-menu-vertical-right .ant-menu-item:not(:last-child),.ant-menu-inline .ant-menu-item:not(:last-child){margin-bottom:8px}.ant-menu-vertical>.ant-menu-item,.ant-menu-vertical-left>.ant-menu-item,.ant-menu-vertical-right>.ant-menu-item,.ant-menu-inline>.ant-menu-item,.ant-menu-vertical>.ant-menu-submenu>.ant-menu-submenu-title,.ant-menu-vertical-left>.ant-menu-submenu>.ant-menu-submenu-title,.ant-menu-vertical-right>.ant-menu-submenu>.ant-menu-submenu-title,.ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title{height:40px;line-height:40px}.ant-menu-vertical .ant-menu-item-group-list .ant-menu-submenu-title,.ant-menu-vertical .ant-menu-submenu-title{padding-right:34px}.ant-menu-inline{width:100%}.ant-menu-inline .ant-menu-selected:after,.ant-menu-inline .ant-menu-item-selected:after{transform:scaleY(1);opacity:1;transition:transform .15s cubic-bezier(.645,.045,.355,1),opacity .15s cubic-bezier(.645,.045,.355,1)}.ant-menu-inline .ant-menu-item,.ant-menu-inline .ant-menu-submenu-title{width:calc(100% + 1px)}.ant-menu-inline .ant-menu-item-group-list .ant-menu-submenu-title,.ant-menu-inline .ant-menu-submenu-title{padding-right:34px}.ant-menu-inline.ant-menu-root .ant-menu-item,.ant-menu-inline.ant-menu-root .ant-menu-submenu-title{display:flex;align-items:center;transition:border-color .3s,background .3s,padding .1s cubic-bezier(.215,.61,.355,1)}.ant-menu-inline.ant-menu-root .ant-menu-item>.ant-menu-title-content,.ant-menu-inline.ant-menu-root .ant-menu-submenu-title>.ant-menu-title-content{flex:auto;min-width:0;overflow:hidden;text-overflow:ellipsis}.ant-menu-inline.ant-menu-root .ant-menu-item>*,.ant-menu-inline.ant-menu-root .ant-menu-submenu-title>*{flex:none}.ant-menu.ant-menu-inline-collapsed{width:80px}.ant-menu.ant-menu-inline-collapsed>.ant-menu-item,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title,.ant-menu.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title{left:0;padding:0 calc(50% - 8px);text-overflow:clip}.ant-menu.ant-menu-inline-collapsed>.ant-menu-item .ant-menu-submenu-arrow,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item .ant-menu-submenu-arrow,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title .ant-menu-submenu-arrow{opacity:0}.ant-menu.ant-menu-inline-collapsed>.ant-menu-item .ant-menu-item-icon,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item .ant-menu-item-icon,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title .ant-menu-item-icon,.ant-menu.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title .ant-menu-item-icon,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item .anticon,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item .anticon,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title .anticon,.ant-menu.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title .anticon{margin:0;font-size:16px;line-height:40px}.ant-menu.ant-menu-inline-collapsed>.ant-menu-item .ant-menu-item-icon+span,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item .ant-menu-item-icon+span,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title .ant-menu-item-icon+span,.ant-menu.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title .ant-menu-item-icon+span,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item .anticon+span,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item .anticon+span,.ant-menu.ant-menu-inline-collapsed>.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title .anticon+span,.ant-menu.ant-menu-inline-collapsed>.ant-menu-submenu>.ant-menu-submenu-title .anticon+span{display:inline-block;opacity:0}.ant-menu.ant-menu-inline-collapsed .ant-menu-item-icon,.ant-menu.ant-menu-inline-collapsed .anticon{display:inline-block}.ant-menu.ant-menu-inline-collapsed-tooltip{pointer-events:none}.ant-menu.ant-menu-inline-collapsed-tooltip .ant-menu-item-icon,.ant-menu.ant-menu-inline-collapsed-tooltip .anticon{display:none}.ant-menu.ant-menu-inline-collapsed-tooltip a{color:#ffffffd9}.ant-menu.ant-menu-inline-collapsed .ant-menu-item-group-title{padding-right:4px;padding-left:4px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ant-menu-item-group-list{margin:0;padding:0}.ant-menu-item-group-list .ant-menu-item,.ant-menu-item-group-list .ant-menu-submenu-title{padding:0 16px 0 28px}.ant-menu-root.ant-menu-vertical,.ant-menu-root.ant-menu-vertical-left,.ant-menu-root.ant-menu-vertical-right,.ant-menu-root.ant-menu-inline{box-shadow:none}.ant-menu-root.ant-menu-inline-collapsed .ant-menu-item>.ant-menu-inline-collapsed-noicon,.ant-menu-root.ant-menu-inline-collapsed .ant-menu-submenu .ant-menu-submenu-title>.ant-menu-inline-collapsed-noicon{font-size:16px;text-align:center}.ant-menu-sub.ant-menu-inline{padding:0;background:#fafafa;border:0;border-radius:0;box-shadow:none}.ant-menu-sub.ant-menu-inline>.ant-menu-item,.ant-menu-sub.ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title{height:40px;line-height:40px;list-style-position:inside;list-style-type:disc}.ant-menu-sub.ant-menu-inline .ant-menu-item-group-title{padding-left:32px}.ant-menu-item-disabled,.ant-menu-submenu-disabled{color:#00000040!important;background:none;cursor:not-allowed}.ant-menu-item-disabled:after,.ant-menu-submenu-disabled:after{border-color:transparent!important}.ant-menu-item-disabled a,.ant-menu-submenu-disabled a{color:#00000040!important;pointer-events:none}.ant-menu-item-disabled>.ant-menu-submenu-title,.ant-menu-submenu-disabled>.ant-menu-submenu-title{color:#00000040!important;cursor:not-allowed}.ant-menu-item-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-submenu-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-item-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-submenu-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after{background:rgba(0,0,0,.25)!important}.ant-layout-header .ant-menu{line-height:inherit}.ant-menu-inline-collapsed-tooltip a,.ant-menu-inline-collapsed-tooltip a:hover{color:#fff}.ant-menu-light .ant-menu-item:hover,.ant-menu-light .ant-menu-item-active,.ant-menu-light .ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open,.ant-menu-light .ant-menu-submenu-active,.ant-menu-light .ant-menu-submenu-title:hover{color:#1890ff}.ant-menu.ant-menu-root:focus-visible{box-shadow:0 0 0 2px #096dd9}.ant-menu-dark .ant-menu-item:focus-visible,.ant-menu-dark .ant-menu-submenu-title:focus-visible{box-shadow:0 0 0 2px #096dd9}.ant-menu.ant-menu-dark,.ant-menu-dark .ant-menu-sub,.ant-menu.ant-menu-dark .ant-menu-sub{color:#ffffffa6;background:#001529}.ant-menu.ant-menu-dark .ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow{opacity:.45;transition:all .3s}.ant-menu.ant-menu-dark .ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu.ant-menu-dark .ant-menu-submenu-title .ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow:before,.ant-menu.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow:before{background:#fff}.ant-menu-dark.ant-menu-submenu-popup{background:transparent}.ant-menu-dark .ant-menu-inline.ant-menu-sub{background:#000c17}.ant-menu-dark.ant-menu-horizontal{border-bottom:0}.ant-menu-dark.ant-menu-horizontal>.ant-menu-item,.ant-menu-dark.ant-menu-horizontal>.ant-menu-submenu{top:0;margin-top:0;padding:0 20px;border-color:#001529;border-bottom:0}.ant-menu-dark.ant-menu-horizontal>.ant-menu-item:hover{background-color:#1890ff}.ant-menu-dark.ant-menu-horizontal>.ant-menu-item>a:before{bottom:0}.ant-menu-dark .ant-menu-item,.ant-menu-dark .ant-menu-item-group-title,.ant-menu-dark .ant-menu-item>a,.ant-menu-dark .ant-menu-item>span>a{color:#ffffffa6}.ant-menu-dark.ant-menu-inline,.ant-menu-dark.ant-menu-vertical,.ant-menu-dark.ant-menu-vertical-left,.ant-menu-dark.ant-menu-vertical-right{border-right:0}.ant-menu-dark.ant-menu-inline .ant-menu-item,.ant-menu-dark.ant-menu-vertical .ant-menu-item,.ant-menu-dark.ant-menu-vertical-left .ant-menu-item,.ant-menu-dark.ant-menu-vertical-right .ant-menu-item{left:0;margin-left:0;border-right:0}.ant-menu-dark.ant-menu-inline .ant-menu-item:after,.ant-menu-dark.ant-menu-vertical .ant-menu-item:after,.ant-menu-dark.ant-menu-vertical-left .ant-menu-item:after,.ant-menu-dark.ant-menu-vertical-right .ant-menu-item:after{border-right:0}.ant-menu-dark.ant-menu-inline .ant-menu-item,.ant-menu-dark.ant-menu-inline .ant-menu-submenu-title{width:100%}.ant-menu-dark .ant-menu-item:hover,.ant-menu-dark .ant-menu-item-active,.ant-menu-dark .ant-menu-submenu-active,.ant-menu-dark .ant-menu-submenu-open,.ant-menu-dark .ant-menu-submenu-selected,.ant-menu-dark .ant-menu-submenu-title:hover{color:#fff;background-color:transparent}.ant-menu-dark .ant-menu-item:hover>a,.ant-menu-dark .ant-menu-item-active>a,.ant-menu-dark .ant-menu-submenu-active>a,.ant-menu-dark .ant-menu-submenu-open>a,.ant-menu-dark .ant-menu-submenu-selected>a,.ant-menu-dark .ant-menu-submenu-title:hover>a,.ant-menu-dark .ant-menu-item:hover>span>a,.ant-menu-dark .ant-menu-item-active>span>a,.ant-menu-dark .ant-menu-submenu-active>span>a,.ant-menu-dark .ant-menu-submenu-open>span>a,.ant-menu-dark .ant-menu-submenu-selected>span>a,.ant-menu-dark .ant-menu-submenu-title:hover>span>a{color:#fff}.ant-menu-dark .ant-menu-item:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-item-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-open>.ant-menu-submenu-title>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-selected>.ant-menu-submenu-title>.ant-menu-submenu-arrow,.ant-menu-dark .ant-menu-submenu-title:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow{opacity:1}.ant-menu-dark .ant-menu-item:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-item-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-open>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-selected>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-title:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-item:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-item-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-active>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-open>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-selected>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-title:hover>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before{background:#fff}.ant-menu-dark .ant-menu-item:hover{background-color:transparent}.ant-menu-dark.ant-menu-dark:not(.ant-menu-horizontal) .ant-menu-item-selected{background-color:#1890ff}.ant-menu-dark .ant-menu-item-selected{color:#fff;border-right:0}.ant-menu-dark .ant-menu-item-selected:after{border-right:0}.ant-menu-dark .ant-menu-item-selected>a,.ant-menu-dark .ant-menu-item-selected>span>a,.ant-menu-dark .ant-menu-item-selected>a:hover,.ant-menu-dark .ant-menu-item-selected>span>a:hover{color:#fff}.ant-menu-dark .ant-menu-item-selected .ant-menu-item-icon,.ant-menu-dark .ant-menu-item-selected .anticon{color:#fff}.ant-menu-dark .ant-menu-item-selected .ant-menu-item-icon+span,.ant-menu-dark .ant-menu-item-selected .anticon+span{color:#fff}.ant-menu.ant-menu-dark .ant-menu-item-selected,.ant-menu-submenu-popup.ant-menu-dark .ant-menu-item-selected{background-color:#1890ff}.ant-menu-dark .ant-menu-item-disabled,.ant-menu-dark .ant-menu-submenu-disabled,.ant-menu-dark .ant-menu-item-disabled>a,.ant-menu-dark .ant-menu-submenu-disabled>a,.ant-menu-dark .ant-menu-item-disabled>span>a,.ant-menu-dark .ant-menu-submenu-disabled>span>a{color:#ffffff59!important;opacity:.8}.ant-menu-dark .ant-menu-item-disabled>.ant-menu-submenu-title,.ant-menu-dark .ant-menu-submenu-disabled>.ant-menu-submenu-title{color:#ffffff59!important}.ant-menu-dark .ant-menu-item-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-submenu-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:before,.ant-menu-dark .ant-menu-item-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after,.ant-menu-dark .ant-menu-submenu-disabled>.ant-menu-submenu-title>.ant-menu-submenu-arrow:after{background:rgba(255,255,255,.35)!important}.ant-menu.ant-menu-rtl{direction:rtl;text-align:right}.ant-menu-rtl .ant-menu-item-group-title{text-align:right}.ant-menu-rtl.ant-menu-inline,.ant-menu-rtl.ant-menu-vertical{border-right:none;border-left:1px solid #f0f0f0}.ant-menu-rtl.ant-menu-dark.ant-menu-inline,.ant-menu-rtl.ant-menu-dark.ant-menu-vertical{border-left:none}.ant-menu-rtl.ant-menu-vertical.ant-menu-sub>.ant-menu-item,.ant-menu-rtl.ant-menu-vertical-left.ant-menu-sub>.ant-menu-item,.ant-menu-rtl.ant-menu-vertical-right.ant-menu-sub>.ant-menu-item,.ant-menu-rtl.ant-menu-vertical.ant-menu-sub>.ant-menu-submenu,.ant-menu-rtl.ant-menu-vertical-left.ant-menu-sub>.ant-menu-submenu,.ant-menu-rtl.ant-menu-vertical-right.ant-menu-sub>.ant-menu-submenu{transform-origin:top right}.ant-menu-rtl .ant-menu-item .ant-menu-item-icon,.ant-menu-rtl .ant-menu-submenu-title .ant-menu-item-icon,.ant-menu-rtl .ant-menu-item .anticon,.ant-menu-rtl .ant-menu-submenu-title .anticon{margin-right:auto;margin-left:10px}.ant-menu-rtl .ant-menu-item.ant-menu-item-only-child>.ant-menu-item-icon,.ant-menu-rtl .ant-menu-submenu-title.ant-menu-item-only-child>.ant-menu-item-icon,.ant-menu-rtl .ant-menu-item.ant-menu-item-only-child>.anticon,.ant-menu-rtl .ant-menu-submenu-title.ant-menu-item-only-child>.anticon{margin-left:0}.ant-menu-submenu-rtl.ant-menu-submenu-popup{transform-origin:100% 0}.ant-menu-rtl .ant-menu-submenu-vertical>.ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu-rtl .ant-menu-submenu-vertical-left>.ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu-rtl .ant-menu-submenu-vertical-right>.ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu-rtl .ant-menu-submenu-inline>.ant-menu-submenu-title .ant-menu-submenu-arrow{right:auto;left:16px}.ant-menu-rtl .ant-menu-submenu-vertical>.ant-menu-submenu-title .ant-menu-submenu-arrow:before,.ant-menu-rtl .ant-menu-submenu-vertical-left>.ant-menu-submenu-title .ant-menu-submenu-arrow:before,.ant-menu-rtl .ant-menu-submenu-vertical-right>.ant-menu-submenu-title .ant-menu-submenu-arrow:before{transform:rotate(-45deg) translateY(-2px)}.ant-menu-rtl .ant-menu-submenu-vertical>.ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu-rtl .ant-menu-submenu-vertical-left>.ant-menu-submenu-title .ant-menu-submenu-arrow:after,.ant-menu-rtl .ant-menu-submenu-vertical-right>.ant-menu-submenu-title .ant-menu-submenu-arrow:after{transform:rotate(45deg) translateY(2px)}.ant-menu-rtl.ant-menu-vertical .ant-menu-item:after,.ant-menu-rtl.ant-menu-vertical-left .ant-menu-item:after,.ant-menu-rtl.ant-menu-vertical-right .ant-menu-item:after,.ant-menu-rtl.ant-menu-inline .ant-menu-item:after{right:auto;left:0}.ant-menu-rtl.ant-menu-vertical .ant-menu-item,.ant-menu-rtl.ant-menu-vertical-left .ant-menu-item,.ant-menu-rtl.ant-menu-vertical-right .ant-menu-item,.ant-menu-rtl.ant-menu-inline .ant-menu-item,.ant-menu-rtl.ant-menu-vertical .ant-menu-submenu-title,.ant-menu-rtl.ant-menu-vertical-left .ant-menu-submenu-title,.ant-menu-rtl.ant-menu-vertical-right .ant-menu-submenu-title,.ant-menu-rtl.ant-menu-inline .ant-menu-submenu-title{text-align:right}.ant-menu-rtl.ant-menu-inline .ant-menu-submenu-title{padding-right:0;padding-left:34px}.ant-menu-rtl.ant-menu-vertical .ant-menu-submenu-title{padding-right:16px;padding-left:34px}.ant-menu-rtl.ant-menu-inline-collapsed.ant-menu-vertical .ant-menu-submenu-title{padding:0 calc(50% - 8px)}.ant-menu-rtl .ant-menu-item-group-list .ant-menu-item,.ant-menu-rtl .ant-menu-item-group-list .ant-menu-submenu-title{padding:0 28px 0 16px}.ant-menu-sub.ant-menu-inline{border:0}.ant-menu-rtl.ant-menu-sub.ant-menu-inline .ant-menu-item-group-title{padding-right:32px;padding-left:0}/*!************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/tooltip/style/index.less ***! + \************************************************************************************************************************************************************************************************************************************************************/.ant-tooltip{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:absolute;z-index:1070;display:block;width:-moz-max-content;width:max-content;max-width:250px;visibility:visible}.ant-tooltip-hidden{display:none}.ant-tooltip-placement-top,.ant-tooltip-placement-topLeft,.ant-tooltip-placement-topRight{padding-bottom:8px}.ant-tooltip-placement-right,.ant-tooltip-placement-rightTop,.ant-tooltip-placement-rightBottom{padding-left:8px}.ant-tooltip-placement-bottom,.ant-tooltip-placement-bottomLeft,.ant-tooltip-placement-bottomRight{padding-top:8px}.ant-tooltip-placement-left,.ant-tooltip-placement-leftTop,.ant-tooltip-placement-leftBottom{padding-right:8px}.ant-tooltip-inner{min-width:30px;min-height:32px;padding:6px 8px;color:#fff;text-align:left;text-decoration:none;word-wrap:break-word;background-color:#000000bf;border-radius:2px;box-shadow:0 3px 6px -4px #0000001f,0 6px 16px #00000014,0 9px 28px 8px #0000000d}.ant-tooltip-arrow{position:absolute;display:block;width:13.07106781px;height:13.07106781px;overflow:hidden;background:transparent;pointer-events:none}.ant-tooltip-arrow-content{position:absolute;top:0;right:0;bottom:0;left:0;display:block;width:5px;height:5px;margin:auto;background-color:#000000bf;content:"";pointer-events:auto}.ant-tooltip-placement-top .ant-tooltip-arrow,.ant-tooltip-placement-topLeft .ant-tooltip-arrow,.ant-tooltip-placement-topRight .ant-tooltip-arrow{bottom:-5.07106781px}.ant-tooltip-placement-top .ant-tooltip-arrow-content,.ant-tooltip-placement-topLeft .ant-tooltip-arrow-content,.ant-tooltip-placement-topRight .ant-tooltip-arrow-content{box-shadow:3px 3px 7px #00000012;transform:translateY(-6.53553391px) rotate(45deg)}.ant-tooltip-placement-top .ant-tooltip-arrow{left:50%;transform:translate(-50%)}.ant-tooltip-placement-topLeft .ant-tooltip-arrow{left:13px}.ant-tooltip-placement-topRight .ant-tooltip-arrow{right:13px}.ant-tooltip-placement-right .ant-tooltip-arrow,.ant-tooltip-placement-rightTop .ant-tooltip-arrow,.ant-tooltip-placement-rightBottom .ant-tooltip-arrow{left:-5.07106781px}.ant-tooltip-placement-right .ant-tooltip-arrow-content,.ant-tooltip-placement-rightTop .ant-tooltip-arrow-content,.ant-tooltip-placement-rightBottom .ant-tooltip-arrow-content{box-shadow:-3px 3px 7px #00000012;transform:translate(6.53553391px) rotate(45deg)}.ant-tooltip-placement-right .ant-tooltip-arrow{top:50%;transform:translateY(-50%)}.ant-tooltip-placement-rightTop .ant-tooltip-arrow{top:5px}.ant-tooltip-placement-rightBottom .ant-tooltip-arrow{bottom:5px}.ant-tooltip-placement-left .ant-tooltip-arrow,.ant-tooltip-placement-leftTop .ant-tooltip-arrow,.ant-tooltip-placement-leftBottom .ant-tooltip-arrow{right:-5.07106781px}.ant-tooltip-placement-left .ant-tooltip-arrow-content,.ant-tooltip-placement-leftTop .ant-tooltip-arrow-content,.ant-tooltip-placement-leftBottom .ant-tooltip-arrow-content{box-shadow:3px -3px 7px #00000012;transform:translate(-6.53553391px) rotate(45deg)}.ant-tooltip-placement-left .ant-tooltip-arrow{top:50%;transform:translateY(-50%)}.ant-tooltip-placement-leftTop .ant-tooltip-arrow{top:5px}.ant-tooltip-placement-leftBottom .ant-tooltip-arrow{bottom:5px}.ant-tooltip-placement-bottom .ant-tooltip-arrow,.ant-tooltip-placement-bottomLeft .ant-tooltip-arrow,.ant-tooltip-placement-bottomRight .ant-tooltip-arrow{top:-5.07106781px}.ant-tooltip-placement-bottom .ant-tooltip-arrow-content,.ant-tooltip-placement-bottomLeft .ant-tooltip-arrow-content,.ant-tooltip-placement-bottomRight .ant-tooltip-arrow-content{box-shadow:-3px -3px 7px #00000012;transform:translateY(6.53553391px) rotate(45deg)}.ant-tooltip-placement-bottom .ant-tooltip-arrow{left:50%;transform:translate(-50%)}.ant-tooltip-placement-bottomLeft .ant-tooltip-arrow{left:13px}.ant-tooltip-placement-bottomRight .ant-tooltip-arrow{right:13px}.ant-tooltip-pink .ant-tooltip-inner,.ant-tooltip-pink .ant-tooltip-arrow-content,.ant-tooltip-magenta .ant-tooltip-inner,.ant-tooltip-magenta .ant-tooltip-arrow-content{background-color:#eb2f96}.ant-tooltip-red .ant-tooltip-inner,.ant-tooltip-red .ant-tooltip-arrow-content{background-color:#f5222d}.ant-tooltip-volcano .ant-tooltip-inner,.ant-tooltip-volcano .ant-tooltip-arrow-content{background-color:#fa541c}.ant-tooltip-orange .ant-tooltip-inner,.ant-tooltip-orange .ant-tooltip-arrow-content{background-color:#fa8c16}.ant-tooltip-yellow .ant-tooltip-inner,.ant-tooltip-yellow .ant-tooltip-arrow-content{background-color:#fadb14}.ant-tooltip-gold .ant-tooltip-inner,.ant-tooltip-gold .ant-tooltip-arrow-content{background-color:#faad14}.ant-tooltip-cyan .ant-tooltip-inner,.ant-tooltip-cyan .ant-tooltip-arrow-content{background-color:#13c2c2}.ant-tooltip-lime .ant-tooltip-inner,.ant-tooltip-lime .ant-tooltip-arrow-content{background-color:#a0d911}.ant-tooltip-green .ant-tooltip-inner,.ant-tooltip-green .ant-tooltip-arrow-content{background-color:#52c41a}.ant-tooltip-blue .ant-tooltip-inner,.ant-tooltip-blue .ant-tooltip-arrow-content{background-color:#1890ff}.ant-tooltip-geekblue .ant-tooltip-inner,.ant-tooltip-geekblue .ant-tooltip-arrow-content{background-color:#2f54eb}.ant-tooltip-purple .ant-tooltip-inner,.ant-tooltip-purple .ant-tooltip-arrow-content{background-color:#722ed1}.ant-tooltip-rtl{direction:rtl}.ant-tooltip-rtl .ant-tooltip-inner{text-align:right}/*!*************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/dropdown/style/index.less ***! + \*************************************************************************************************************************************************************************************************************************************************************/.ant-dropdown-menu-item.ant-dropdown-menu-item-danger{color:#ff4d4f}.ant-dropdown-menu-item.ant-dropdown-menu-item-danger:hover{color:#fff;background-color:#ff4d4f}.ant-dropdown{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:absolute;top:-9999px;left:-9999px;z-index:1050;display:block}.ant-dropdown:before{position:absolute;top:-4px;right:0;bottom:-4px;left:-7px;z-index:-9999;opacity:.0001;content:" "}.ant-dropdown-wrap{position:relative}.ant-dropdown-wrap .ant-btn>.anticon-down{font-size:10px}.ant-dropdown-wrap .anticon-down:before{transition:transform .2s}.ant-dropdown-wrap-open .anticon-down:before{transform:rotate(180deg)}.ant-dropdown-hidden,.ant-dropdown-menu-hidden,.ant-dropdown-menu-submenu-hidden{display:none}.ant-dropdown-show-arrow.ant-dropdown-placement-topCenter,.ant-dropdown-show-arrow.ant-dropdown-placement-topLeft,.ant-dropdown-show-arrow.ant-dropdown-placement-topRight{padding-bottom:10px}.ant-dropdown-show-arrow.ant-dropdown-placement-bottomCenter,.ant-dropdown-show-arrow.ant-dropdown-placement-bottomLeft,.ant-dropdown-show-arrow.ant-dropdown-placement-bottomRight{padding-top:10px}.ant-dropdown-arrow{position:absolute;z-index:1;display:block;width:8.48528137px;height:8.48528137px;background:transparent;border-style:solid;border-width:4.24264069px;transform:rotate(45deg)}.ant-dropdown-placement-topCenter>.ant-dropdown-arrow,.ant-dropdown-placement-topLeft>.ant-dropdown-arrow,.ant-dropdown-placement-topRight>.ant-dropdown-arrow{bottom:6.2px;border-color:transparent #fff #fff transparent;box-shadow:3px 3px 7px #00000012}.ant-dropdown-placement-topCenter>.ant-dropdown-arrow{left:50%;transform:translate(-50%) rotate(45deg)}.ant-dropdown-placement-topLeft>.ant-dropdown-arrow{left:16px}.ant-dropdown-placement-topRight>.ant-dropdown-arrow{right:16px}.ant-dropdown-placement-bottomCenter>.ant-dropdown-arrow,.ant-dropdown-placement-bottomLeft>.ant-dropdown-arrow,.ant-dropdown-placement-bottomRight>.ant-dropdown-arrow{top:6px;border-color:#fff transparent transparent #fff;box-shadow:-2px -2px 5px #0000000f}.ant-dropdown-placement-bottomCenter>.ant-dropdown-arrow{left:50%;transform:translate(-50%) rotate(45deg)}.ant-dropdown-placement-bottomLeft>.ant-dropdown-arrow{left:16px}.ant-dropdown-placement-bottomRight>.ant-dropdown-arrow{right:16px}.ant-dropdown-menu{position:relative;margin:0;padding:4px 0;text-align:left;list-style-type:none;background-color:#fff;background-clip:padding-box;border-radius:2px;outline:none;box-shadow:0 3px 6px -4px #0000001f,0 6px 16px #00000014,0 9px 28px 8px #0000000d}.ant-dropdown-menu-item-group-title{padding:5px 12px;color:#00000073;transition:all .3s}.ant-dropdown-menu-submenu-popup{position:absolute;z-index:1050;background:transparent;box-shadow:none;transform-origin:0 0}.ant-dropdown-menu-submenu-popup ul,.ant-dropdown-menu-submenu-popup li{list-style:none}.ant-dropdown-menu-submenu-popup ul{margin-right:.3em;margin-left:.3em}.ant-dropdown-menu-item{position:relative;display:flex;align-items:center}.ant-dropdown-menu-item-icon{min-width:12px;margin-right:8px;font-size:12px}.ant-dropdown-menu-title-content{flex:auto;white-space:nowrap}.ant-dropdown-menu-title-content>a{color:inherit;transition:all .3s}.ant-dropdown-menu-title-content>a:hover{color:inherit}.ant-dropdown-menu-title-content>a:after{position:absolute;top:0;right:0;bottom:0;left:0;content:""}.ant-dropdown-menu-item,.ant-dropdown-menu-submenu-title{clear:both;margin:0;padding:5px 12px;color:#000000d9;font-weight:400;font-size:14px;line-height:22px;cursor:pointer;transition:all .3s}.ant-dropdown-menu-item-selected,.ant-dropdown-menu-submenu-title-selected{color:#1890ff;background-color:#e6f7ff}.ant-dropdown-menu-item:hover,.ant-dropdown-menu-submenu-title:hover{background-color:#f5f5f5}.ant-dropdown-menu-item-disabled,.ant-dropdown-menu-submenu-title-disabled{color:#00000040;cursor:not-allowed}.ant-dropdown-menu-item-disabled:hover,.ant-dropdown-menu-submenu-title-disabled:hover{color:#00000040;background-color:#fff;cursor:not-allowed}.ant-dropdown-menu-item-disabled a,.ant-dropdown-menu-submenu-title-disabled a{pointer-events:none}.ant-dropdown-menu-item-divider,.ant-dropdown-menu-submenu-title-divider{height:1px;margin:4px 0;overflow:hidden;line-height:0;background-color:#f0f0f0}.ant-dropdown-menu-item .ant-dropdown-menu-submenu-expand-icon,.ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-expand-icon{position:absolute;right:8px}.ant-dropdown-menu-item .ant-dropdown-menu-submenu-expand-icon .ant-dropdown-menu-submenu-arrow-icon,.ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-expand-icon .ant-dropdown-menu-submenu-arrow-icon{margin-right:0!important;color:#00000073;font-size:10px;font-style:normal}.ant-dropdown-menu-item-group-list{margin:0 8px;padding:0;list-style:none}.ant-dropdown-menu-submenu-title{padding-right:24px}.ant-dropdown-menu-submenu-vertical{position:relative}.ant-dropdown-menu-submenu-vertical>.ant-dropdown-menu{position:absolute;top:0;left:100%;min-width:100%;margin-left:4px;transform-origin:0 0}.ant-dropdown-menu-submenu.ant-dropdown-menu-submenu-disabled .ant-dropdown-menu-submenu-title,.ant-dropdown-menu-submenu.ant-dropdown-menu-submenu-disabled .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow-icon{color:#00000040;background-color:#fff;cursor:not-allowed}.ant-dropdown-menu-submenu-selected .ant-dropdown-menu-submenu-title{color:#1890ff}.ant-dropdown.ant-slide-down-enter.ant-slide-down-enter-active.ant-dropdown-placement-bottomLeft,.ant-dropdown.ant-slide-down-appear.ant-slide-down-appear-active.ant-dropdown-placement-bottomLeft,.ant-dropdown.ant-slide-down-enter.ant-slide-down-enter-active.ant-dropdown-placement-bottomCenter,.ant-dropdown.ant-slide-down-appear.ant-slide-down-appear-active.ant-dropdown-placement-bottomCenter,.ant-dropdown.ant-slide-down-enter.ant-slide-down-enter-active.ant-dropdown-placement-bottomRight,.ant-dropdown.ant-slide-down-appear.ant-slide-down-appear-active.ant-dropdown-placement-bottomRight{animation-name:antSlideUpIn}.ant-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-dropdown-placement-topLeft,.ant-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-dropdown-placement-topLeft,.ant-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-dropdown-placement-topCenter,.ant-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-dropdown-placement-topCenter,.ant-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-dropdown-placement-topRight,.ant-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-dropdown-placement-topRight{animation-name:antSlideDownIn}.ant-dropdown.ant-slide-down-leave.ant-slide-down-leave-active.ant-dropdown-placement-bottomLeft,.ant-dropdown.ant-slide-down-leave.ant-slide-down-leave-active.ant-dropdown-placement-bottomCenter,.ant-dropdown.ant-slide-down-leave.ant-slide-down-leave-active.ant-dropdown-placement-bottomRight{animation-name:antSlideUpOut}.ant-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-dropdown-placement-topLeft,.ant-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-dropdown-placement-topCenter,.ant-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-dropdown-placement-topRight{animation-name:antSlideDownOut}.ant-dropdown-trigger>.anticon.anticon-down,.ant-dropdown-link>.anticon.anticon-down,.ant-dropdown-button>.anticon.anticon-down{font-size:10px;vertical-align:baseline}.ant-dropdown-button{white-space:nowrap}.ant-dropdown-button.ant-btn-group>.ant-btn-loading,.ant-dropdown-button.ant-btn-group>.ant-btn-loading+.ant-btn{cursor:default;pointer-events:none}.ant-dropdown-button.ant-btn-group>.ant-btn-loading+.ant-btn:before{display:block}.ant-dropdown-button.ant-btn-group>.ant-btn:last-child:not(:first-child):not(.ant-btn-icon-only){padding-right:8px;padding-left:8px}.ant-dropdown-menu-dark,.ant-dropdown-menu-dark .ant-dropdown-menu{background:#001529}.ant-dropdown-menu-dark .ant-dropdown-menu-item,.ant-dropdown-menu-dark .ant-dropdown-menu-submenu-title,.ant-dropdown-menu-dark .ant-dropdown-menu-item>a,.ant-dropdown-menu-dark .ant-dropdown-menu-item>.anticon+span>a{color:#ffffffa6}.ant-dropdown-menu-dark .ant-dropdown-menu-item .ant-dropdown-menu-submenu-arrow:after,.ant-dropdown-menu-dark .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow:after,.ant-dropdown-menu-dark .ant-dropdown-menu-item>a .ant-dropdown-menu-submenu-arrow:after,.ant-dropdown-menu-dark .ant-dropdown-menu-item>.anticon+span>a .ant-dropdown-menu-submenu-arrow:after{color:#ffffffa6}.ant-dropdown-menu-dark .ant-dropdown-menu-item:hover,.ant-dropdown-menu-dark .ant-dropdown-menu-submenu-title:hover,.ant-dropdown-menu-dark .ant-dropdown-menu-item>a:hover,.ant-dropdown-menu-dark .ant-dropdown-menu-item>.anticon+span>a:hover{color:#fff;background:transparent}.ant-dropdown-menu-dark .ant-dropdown-menu-item-selected,.ant-dropdown-menu-dark .ant-dropdown-menu-item-selected:hover,.ant-dropdown-menu-dark .ant-dropdown-menu-item-selected>a{color:#fff;background:#1890ff}.ant-dropdown-rtl{direction:rtl}.ant-dropdown-rtl.ant-dropdown:before{right:-7px;left:0}.ant-dropdown-menu.ant-dropdown-menu-rtl,.ant-dropdown-rtl .ant-dropdown-menu-item-group-title,.ant-dropdown-menu-submenu-rtl .ant-dropdown-menu-item-group-title{direction:rtl;text-align:right}.ant-dropdown-menu-submenu-popup.ant-dropdown-menu-submenu-rtl{transform-origin:100% 0}.ant-dropdown-rtl .ant-dropdown-menu-submenu-popup ul,.ant-dropdown-rtl .ant-dropdown-menu-submenu-popup li,.ant-dropdown-rtl .ant-dropdown-menu-item,.ant-dropdown-rtl .ant-dropdown-menu-submenu-title{text-align:right}.ant-dropdown-rtl .ant-dropdown-menu-item>.anticon:first-child,.ant-dropdown-rtl .ant-dropdown-menu-submenu-title>.anticon:first-child,.ant-dropdown-rtl .ant-dropdown-menu-item>span>.anticon:first-child,.ant-dropdown-rtl .ant-dropdown-menu-submenu-title>span>.anticon:first-child{margin-right:0;margin-left:8px}.ant-dropdown-rtl .ant-dropdown-menu-item .ant-dropdown-menu-submenu-expand-icon,.ant-dropdown-rtl .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-expand-icon{right:auto;left:8px}.ant-dropdown-rtl .ant-dropdown-menu-item .ant-dropdown-menu-submenu-expand-icon .ant-dropdown-menu-submenu-arrow-icon,.ant-dropdown-rtl .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-expand-icon .ant-dropdown-menu-submenu-arrow-icon{margin-left:0!important;transform:scaleX(-1)}.ant-dropdown-rtl .ant-dropdown-menu-submenu-title{padding-right:12px;padding-left:24px}.ant-dropdown-rtl .ant-dropdown-menu-submenu-vertical>.ant-dropdown-menu{right:100%;left:0;margin-right:4px;margin-left:0}/*!***********************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/button/style/index.less ***! + \***********************************************************************************************************************************************************************************************************************************************************/.ant-btn{line-height:1.5715;position:relative;display:inline-block;font-weight:400;white-space:nowrap;text-align:center;background-image:none;border:1px solid transparent;box-shadow:0 2px #00000004;cursor:pointer;transition:all .3s cubic-bezier(.645,.045,.355,1);-webkit-user-select:none;-moz-user-select:none;user-select:none;touch-action:manipulation;height:32px;padding:4px 15px;font-size:14px;border-radius:2px;color:#000000d9;border-color:#d9d9d9;background:#fff}.ant-btn>.anticon{line-height:1}.ant-btn,.ant-btn:active,.ant-btn:focus{outline:0}.ant-btn:not([disabled]):hover{text-decoration:none}.ant-btn:not([disabled]):active{outline:0;box-shadow:none}.ant-btn[disabled]{cursor:not-allowed}.ant-btn[disabled]>*{pointer-events:none}.ant-btn-lg{height:40px;padding:6.4px 15px;font-size:16px;border-radius:2px}.ant-btn-sm{height:24px;padding:0 7px;font-size:14px;border-radius:2px}.ant-btn>a:only-child{color:currentcolor}.ant-btn>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn:hover,.ant-btn:focus{color:#40a9ff;border-color:#40a9ff;background:#fff}.ant-btn:hover>a:only-child,.ant-btn:focus>a:only-child{color:currentcolor}.ant-btn:hover>a:only-child:after,.ant-btn:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn:active{color:#096dd9;border-color:#096dd9;background:#fff}.ant-btn:active>a:only-child{color:currentcolor}.ant-btn:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn[disabled],.ant-btn[disabled]:hover,.ant-btn[disabled]:focus,.ant-btn[disabled]:active{color:#00000040;border-color:#d9d9d9;background:#f5f5f5;text-shadow:none;box-shadow:none}.ant-btn[disabled]>a:only-child,.ant-btn[disabled]:hover>a:only-child,.ant-btn[disabled]:focus>a:only-child,.ant-btn[disabled]:active>a:only-child{color:currentcolor}.ant-btn[disabled]>a:only-child:after,.ant-btn[disabled]:hover>a:only-child:after,.ant-btn[disabled]:focus>a:only-child:after,.ant-btn[disabled]:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn:hover,.ant-btn:focus,.ant-btn:active{text-decoration:none;background:#fff}.ant-btn>span{display:inline-block}.ant-btn-primary{color:#fff;border-color:#1890ff;background:#1890ff;text-shadow:0 -1px 0 rgba(0,0,0,.12);box-shadow:0 2px #0000000b}.ant-btn-primary>a:only-child{color:currentcolor}.ant-btn-primary>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-primary:hover,.ant-btn-primary:focus{color:#fff;border-color:#40a9ff;background:#40a9ff}.ant-btn-primary:hover>a:only-child,.ant-btn-primary:focus>a:only-child{color:currentcolor}.ant-btn-primary:hover>a:only-child:after,.ant-btn-primary:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-primary:active{color:#fff;border-color:#096dd9;background:#096dd9}.ant-btn-primary:active>a:only-child{color:currentcolor}.ant-btn-primary:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-primary[disabled],.ant-btn-primary[disabled]:hover,.ant-btn-primary[disabled]:focus,.ant-btn-primary[disabled]:active{color:#00000040;border-color:#d9d9d9;background:#f5f5f5;text-shadow:none;box-shadow:none}.ant-btn-primary[disabled]>a:only-child,.ant-btn-primary[disabled]:hover>a:only-child,.ant-btn-primary[disabled]:focus>a:only-child,.ant-btn-primary[disabled]:active>a:only-child{color:currentcolor}.ant-btn-primary[disabled]>a:only-child:after,.ant-btn-primary[disabled]:hover>a:only-child:after,.ant-btn-primary[disabled]:focus>a:only-child:after,.ant-btn-primary[disabled]:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-group .ant-btn-primary:not(:first-child):not(:last-child){border-right-color:#40a9ff;border-left-color:#40a9ff}.ant-btn-group .ant-btn-primary:not(:first-child):not(:last-child):disabled{border-color:#d9d9d9}.ant-btn-group .ant-btn-primary:first-child:not(:last-child){border-right-color:#40a9ff}.ant-btn-group .ant-btn-primary:first-child:not(:last-child)[disabled]{border-right-color:#d9d9d9}.ant-btn-group .ant-btn-primary:last-child:not(:first-child),.ant-btn-group .ant-btn-primary+.ant-btn-primary{border-left-color:#40a9ff}.ant-btn-group .ant-btn-primary:last-child:not(:first-child)[disabled],.ant-btn-group .ant-btn-primary+.ant-btn-primary[disabled]{border-left-color:#d9d9d9}.ant-btn-ghost{color:#000000d9;border-color:#d9d9d9;background:transparent}.ant-btn-ghost>a:only-child{color:currentcolor}.ant-btn-ghost>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-ghost:hover,.ant-btn-ghost:focus{color:#40a9ff;border-color:#40a9ff;background:transparent}.ant-btn-ghost:hover>a:only-child,.ant-btn-ghost:focus>a:only-child{color:currentcolor}.ant-btn-ghost:hover>a:only-child:after,.ant-btn-ghost:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-ghost:active{color:#096dd9;border-color:#096dd9;background:transparent}.ant-btn-ghost:active>a:only-child{color:currentcolor}.ant-btn-ghost:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-ghost[disabled],.ant-btn-ghost[disabled]:hover,.ant-btn-ghost[disabled]:focus,.ant-btn-ghost[disabled]:active{color:#00000040;border-color:#d9d9d9;background:#f5f5f5;text-shadow:none;box-shadow:none}.ant-btn-ghost[disabled]>a:only-child,.ant-btn-ghost[disabled]:hover>a:only-child,.ant-btn-ghost[disabled]:focus>a:only-child,.ant-btn-ghost[disabled]:active>a:only-child{color:currentcolor}.ant-btn-ghost[disabled]>a:only-child:after,.ant-btn-ghost[disabled]:hover>a:only-child:after,.ant-btn-ghost[disabled]:focus>a:only-child:after,.ant-btn-ghost[disabled]:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dashed{color:#000000d9;border-color:#d9d9d9;background:#fff;border-style:dashed}.ant-btn-dashed>a:only-child{color:currentcolor}.ant-btn-dashed>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dashed:hover,.ant-btn-dashed:focus{color:#40a9ff;border-color:#40a9ff;background:#fff}.ant-btn-dashed:hover>a:only-child,.ant-btn-dashed:focus>a:only-child{color:currentcolor}.ant-btn-dashed:hover>a:only-child:after,.ant-btn-dashed:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dashed:active{color:#096dd9;border-color:#096dd9;background:#fff}.ant-btn-dashed:active>a:only-child{color:currentcolor}.ant-btn-dashed:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dashed[disabled],.ant-btn-dashed[disabled]:hover,.ant-btn-dashed[disabled]:focus,.ant-btn-dashed[disabled]:active{color:#00000040;border-color:#d9d9d9;background:#f5f5f5;text-shadow:none;box-shadow:none}.ant-btn-dashed[disabled]>a:only-child,.ant-btn-dashed[disabled]:hover>a:only-child,.ant-btn-dashed[disabled]:focus>a:only-child,.ant-btn-dashed[disabled]:active>a:only-child{color:currentcolor}.ant-btn-dashed[disabled]>a:only-child:after,.ant-btn-dashed[disabled]:hover>a:only-child:after,.ant-btn-dashed[disabled]:focus>a:only-child:after,.ant-btn-dashed[disabled]:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-danger{color:#fff;border-color:#ff4d4f;background:#ff4d4f;text-shadow:0 -1px 0 rgba(0,0,0,.12);box-shadow:0 2px #0000000b}.ant-btn-danger>a:only-child{color:currentcolor}.ant-btn-danger>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-danger:hover,.ant-btn-danger:focus{color:#fff;border-color:#ff7875;background:#ff7875}.ant-btn-danger:hover>a:only-child,.ant-btn-danger:focus>a:only-child{color:currentcolor}.ant-btn-danger:hover>a:only-child:after,.ant-btn-danger:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-danger:active{color:#fff;border-color:#d9363e;background:#d9363e}.ant-btn-danger:active>a:only-child{color:currentcolor}.ant-btn-danger:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-danger[disabled],.ant-btn-danger[disabled]:hover,.ant-btn-danger[disabled]:focus,.ant-btn-danger[disabled]:active{color:#00000040;border-color:#d9d9d9;background:#f5f5f5;text-shadow:none;box-shadow:none}.ant-btn-danger[disabled]>a:only-child,.ant-btn-danger[disabled]:hover>a:only-child,.ant-btn-danger[disabled]:focus>a:only-child,.ant-btn-danger[disabled]:active>a:only-child{color:currentcolor}.ant-btn-danger[disabled]>a:only-child:after,.ant-btn-danger[disabled]:hover>a:only-child:after,.ant-btn-danger[disabled]:focus>a:only-child:after,.ant-btn-danger[disabled]:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-link{color:#1890ff;border-color:transparent;background:transparent;box-shadow:none}.ant-btn-link>a:only-child{color:currentcolor}.ant-btn-link>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-link:hover,.ant-btn-link:focus{color:#40a9ff;border-color:#40a9ff;background:transparent}.ant-btn-link:hover>a:only-child,.ant-btn-link:focus>a:only-child{color:currentcolor}.ant-btn-link:hover>a:only-child:after,.ant-btn-link:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-link:active{color:#096dd9;border-color:#096dd9;background:transparent}.ant-btn-link:active>a:only-child{color:currentcolor}.ant-btn-link:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-link[disabled],.ant-btn-link[disabled]:hover,.ant-btn-link[disabled]:focus,.ant-btn-link[disabled]:active{color:#00000040;border-color:#d9d9d9;background:#f5f5f5;text-shadow:none;box-shadow:none}.ant-btn-link:hover{background:transparent}.ant-btn-link:hover,.ant-btn-link:focus,.ant-btn-link:active{border-color:transparent}.ant-btn-link[disabled],.ant-btn-link[disabled]:hover,.ant-btn-link[disabled]:focus,.ant-btn-link[disabled]:active{color:#00000040;border-color:transparent;background:transparent;text-shadow:none;box-shadow:none}.ant-btn-link[disabled]>a:only-child,.ant-btn-link[disabled]:hover>a:only-child,.ant-btn-link[disabled]:focus>a:only-child,.ant-btn-link[disabled]:active>a:only-child{color:currentcolor}.ant-btn-link[disabled]>a:only-child:after,.ant-btn-link[disabled]:hover>a:only-child:after,.ant-btn-link[disabled]:focus>a:only-child:after,.ant-btn-link[disabled]:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-text{color:#000000d9;border-color:transparent;background:transparent;box-shadow:none}.ant-btn-text>a:only-child{color:currentcolor}.ant-btn-text>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-text:hover,.ant-btn-text:focus{color:#40a9ff;border-color:#40a9ff;background:transparent}.ant-btn-text:hover>a:only-child,.ant-btn-text:focus>a:only-child{color:currentcolor}.ant-btn-text:hover>a:only-child:after,.ant-btn-text:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-text:active{color:#096dd9;border-color:#096dd9;background:transparent}.ant-btn-text:active>a:only-child{color:currentcolor}.ant-btn-text:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-text[disabled],.ant-btn-text[disabled]:hover,.ant-btn-text[disabled]:focus,.ant-btn-text[disabled]:active{color:#00000040;border-color:#d9d9d9;background:#f5f5f5;text-shadow:none;box-shadow:none}.ant-btn-text:hover,.ant-btn-text:focus{color:#000000d9;background:rgba(0,0,0,.018);border-color:transparent}.ant-btn-text:active{color:#000000d9;background:rgba(0,0,0,.028);border-color:transparent}.ant-btn-text[disabled],.ant-btn-text[disabled]:hover,.ant-btn-text[disabled]:focus,.ant-btn-text[disabled]:active{color:#00000040;border-color:transparent;background:transparent;text-shadow:none;box-shadow:none}.ant-btn-text[disabled]>a:only-child,.ant-btn-text[disabled]:hover>a:only-child,.ant-btn-text[disabled]:focus>a:only-child,.ant-btn-text[disabled]:active>a:only-child{color:currentcolor}.ant-btn-text[disabled]>a:only-child:after,.ant-btn-text[disabled]:hover>a:only-child:after,.ant-btn-text[disabled]:focus>a:only-child:after,.ant-btn-text[disabled]:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous{color:#ff4d4f;border-color:#ff4d4f;background:#fff}.ant-btn-dangerous>a:only-child{color:currentcolor}.ant-btn-dangerous>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous:hover,.ant-btn-dangerous:focus{color:#ff7875;border-color:#ff7875;background:#fff}.ant-btn-dangerous:hover>a:only-child,.ant-btn-dangerous:focus>a:only-child{color:currentcolor}.ant-btn-dangerous:hover>a:only-child:after,.ant-btn-dangerous:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous:active{color:#d9363e;border-color:#d9363e;background:#fff}.ant-btn-dangerous:active>a:only-child{color:currentcolor}.ant-btn-dangerous:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous[disabled],.ant-btn-dangerous[disabled]:hover,.ant-btn-dangerous[disabled]:focus,.ant-btn-dangerous[disabled]:active{color:#00000040;border-color:#d9d9d9;background:#f5f5f5;text-shadow:none;box-shadow:none}.ant-btn-dangerous[disabled]>a:only-child,.ant-btn-dangerous[disabled]:hover>a:only-child,.ant-btn-dangerous[disabled]:focus>a:only-child,.ant-btn-dangerous[disabled]:active>a:only-child{color:currentcolor}.ant-btn-dangerous[disabled]>a:only-child:after,.ant-btn-dangerous[disabled]:hover>a:only-child:after,.ant-btn-dangerous[disabled]:focus>a:only-child:after,.ant-btn-dangerous[disabled]:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-primary{color:#fff;border-color:#ff4d4f;background:#ff4d4f;text-shadow:0 -1px 0 rgba(0,0,0,.12);box-shadow:0 2px #0000000b}.ant-btn-dangerous.ant-btn-primary>a:only-child{color:currentcolor}.ant-btn-dangerous.ant-btn-primary>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-primary:hover,.ant-btn-dangerous.ant-btn-primary:focus{color:#fff;border-color:#ff7875;background:#ff7875}.ant-btn-dangerous.ant-btn-primary:hover>a:only-child,.ant-btn-dangerous.ant-btn-primary:focus>a:only-child{color:currentcolor}.ant-btn-dangerous.ant-btn-primary:hover>a:only-child:after,.ant-btn-dangerous.ant-btn-primary:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-primary:active{color:#fff;border-color:#d9363e;background:#d9363e}.ant-btn-dangerous.ant-btn-primary:active>a:only-child{color:currentcolor}.ant-btn-dangerous.ant-btn-primary:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-primary[disabled],.ant-btn-dangerous.ant-btn-primary[disabled]:hover,.ant-btn-dangerous.ant-btn-primary[disabled]:focus,.ant-btn-dangerous.ant-btn-primary[disabled]:active{color:#00000040;border-color:#d9d9d9;background:#f5f5f5;text-shadow:none;box-shadow:none}.ant-btn-dangerous.ant-btn-primary[disabled]>a:only-child,.ant-btn-dangerous.ant-btn-primary[disabled]:hover>a:only-child,.ant-btn-dangerous.ant-btn-primary[disabled]:focus>a:only-child,.ant-btn-dangerous.ant-btn-primary[disabled]:active>a:only-child{color:currentcolor}.ant-btn-dangerous.ant-btn-primary[disabled]>a:only-child:after,.ant-btn-dangerous.ant-btn-primary[disabled]:hover>a:only-child:after,.ant-btn-dangerous.ant-btn-primary[disabled]:focus>a:only-child:after,.ant-btn-dangerous.ant-btn-primary[disabled]:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-link{color:#ff4d4f;border-color:transparent;background:transparent;box-shadow:none}.ant-btn-dangerous.ant-btn-link>a:only-child{color:currentcolor}.ant-btn-dangerous.ant-btn-link>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-link:hover,.ant-btn-dangerous.ant-btn-link:focus{color:#40a9ff;border-color:#40a9ff;background:transparent}.ant-btn-dangerous.ant-btn-link:active{color:#096dd9;border-color:#096dd9;background:transparent}.ant-btn-dangerous.ant-btn-link[disabled],.ant-btn-dangerous.ant-btn-link[disabled]:hover,.ant-btn-dangerous.ant-btn-link[disabled]:focus,.ant-btn-dangerous.ant-btn-link[disabled]:active{color:#00000040;border-color:#d9d9d9;background:#f5f5f5;text-shadow:none;box-shadow:none}.ant-btn-dangerous.ant-btn-link:hover,.ant-btn-dangerous.ant-btn-link:focus{color:#ff7875;border-color:transparent;background:transparent}.ant-btn-dangerous.ant-btn-link:hover>a:only-child,.ant-btn-dangerous.ant-btn-link:focus>a:only-child{color:currentcolor}.ant-btn-dangerous.ant-btn-link:hover>a:only-child:after,.ant-btn-dangerous.ant-btn-link:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-link:active{color:#d9363e;border-color:transparent;background:transparent}.ant-btn-dangerous.ant-btn-link:active>a:only-child{color:currentcolor}.ant-btn-dangerous.ant-btn-link:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-link[disabled],.ant-btn-dangerous.ant-btn-link[disabled]:hover,.ant-btn-dangerous.ant-btn-link[disabled]:focus,.ant-btn-dangerous.ant-btn-link[disabled]:active{color:#00000040;border-color:transparent;background:transparent;text-shadow:none;box-shadow:none}.ant-btn-dangerous.ant-btn-link[disabled]>a:only-child,.ant-btn-dangerous.ant-btn-link[disabled]:hover>a:only-child,.ant-btn-dangerous.ant-btn-link[disabled]:focus>a:only-child,.ant-btn-dangerous.ant-btn-link[disabled]:active>a:only-child{color:currentcolor}.ant-btn-dangerous.ant-btn-link[disabled]>a:only-child:after,.ant-btn-dangerous.ant-btn-link[disabled]:hover>a:only-child:after,.ant-btn-dangerous.ant-btn-link[disabled]:focus>a:only-child:after,.ant-btn-dangerous.ant-btn-link[disabled]:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-text{color:#ff4d4f;border-color:transparent;background:transparent;box-shadow:none}.ant-btn-dangerous.ant-btn-text>a:only-child{color:currentcolor}.ant-btn-dangerous.ant-btn-text>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-text:hover,.ant-btn-dangerous.ant-btn-text:focus{color:#40a9ff;border-color:#40a9ff;background:transparent}.ant-btn-dangerous.ant-btn-text:active{color:#096dd9;border-color:#096dd9;background:transparent}.ant-btn-dangerous.ant-btn-text[disabled],.ant-btn-dangerous.ant-btn-text[disabled]:hover,.ant-btn-dangerous.ant-btn-text[disabled]:focus,.ant-btn-dangerous.ant-btn-text[disabled]:active{color:#00000040;border-color:#d9d9d9;background:#f5f5f5;text-shadow:none;box-shadow:none}.ant-btn-dangerous.ant-btn-text:hover,.ant-btn-dangerous.ant-btn-text:focus{color:#ff7875;border-color:transparent;background:rgba(0,0,0,.018)}.ant-btn-dangerous.ant-btn-text:hover>a:only-child,.ant-btn-dangerous.ant-btn-text:focus>a:only-child{color:currentcolor}.ant-btn-dangerous.ant-btn-text:hover>a:only-child:after,.ant-btn-dangerous.ant-btn-text:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-text:active{color:#d9363e;border-color:transparent;background:rgba(0,0,0,.028)}.ant-btn-dangerous.ant-btn-text:active>a:only-child{color:currentcolor}.ant-btn-dangerous.ant-btn-text:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-dangerous.ant-btn-text[disabled],.ant-btn-dangerous.ant-btn-text[disabled]:hover,.ant-btn-dangerous.ant-btn-text[disabled]:focus,.ant-btn-dangerous.ant-btn-text[disabled]:active{color:#00000040;border-color:transparent;background:transparent;text-shadow:none;box-shadow:none}.ant-btn-dangerous.ant-btn-text[disabled]>a:only-child,.ant-btn-dangerous.ant-btn-text[disabled]:hover>a:only-child,.ant-btn-dangerous.ant-btn-text[disabled]:focus>a:only-child,.ant-btn-dangerous.ant-btn-text[disabled]:active>a:only-child{color:currentcolor}.ant-btn-dangerous.ant-btn-text[disabled]>a:only-child:after,.ant-btn-dangerous.ant-btn-text[disabled]:hover>a:only-child:after,.ant-btn-dangerous.ant-btn-text[disabled]:focus>a:only-child:after,.ant-btn-dangerous.ant-btn-text[disabled]:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-icon-only{width:32px;height:32px;padding:2.4px 0;font-size:16px;border-radius:2px;vertical-align:-3px}.ant-btn-icon-only>*{font-size:16px}.ant-btn-icon-only.ant-btn-lg{width:40px;height:40px;padding:4.9px 0;font-size:18px;border-radius:2px}.ant-btn-icon-only.ant-btn-lg>*{font-size:18px}.ant-btn-icon-only.ant-btn-sm{width:24px;height:24px;padding:0;font-size:14px;border-radius:2px}.ant-btn-icon-only.ant-btn-sm>*{font-size:14px}.ant-btn-icon-only>.anticon{display:flex;justify-content:center}a.ant-btn-icon-only{vertical-align:-1px}a.ant-btn-icon-only>.anticon{display:inline}.ant-btn-round{height:32px;padding:4px 16px;font-size:14px;border-radius:32px}.ant-btn-round.ant-btn-lg{height:40px;padding:6.4px 20px;font-size:16px;border-radius:40px}.ant-btn-round.ant-btn-sm{height:24px;padding:0 12px;font-size:14px;border-radius:24px}.ant-btn-round.ant-btn-icon-only{width:auto}.ant-btn-circle{min-width:32px;padding-right:0;padding-left:0;text-align:center;border-radius:50%}.ant-btn-circle.ant-btn-lg{min-width:40px;border-radius:50%}.ant-btn-circle.ant-btn-sm{min-width:24px;border-radius:50%}.ant-btn:before{position:absolute;top:-1px;right:-1px;bottom:-1px;left:-1px;z-index:1;display:none;background:#fff;border-radius:inherit;opacity:.35;transition:opacity .2s;content:"";pointer-events:none}.ant-btn .anticon{transition:margin-left .3s cubic-bezier(.645,.045,.355,1)}.ant-btn .anticon.anticon-plus>svg,.ant-btn .anticon.anticon-minus>svg{shape-rendering:optimizespeed}.ant-btn.ant-btn-loading{position:relative;cursor:default}.ant-btn.ant-btn-loading:before{display:block}.ant-btn>.ant-btn-loading-icon{transition:width .3s cubic-bezier(.645,.045,.355,1),opacity .3s cubic-bezier(.645,.045,.355,1)}.ant-btn>.ant-btn-loading-icon .anticon{padding-right:8px;animation:none}.ant-btn>.ant-btn-loading-icon .anticon svg{animation:loadingCircle 1s infinite linear}.ant-btn>.ant-btn-loading-icon:only-child .anticon{padding-right:0}.ant-btn-group{position:relative;display:inline-flex}.ant-btn-group>.ant-btn,.ant-btn-group>span>.ant-btn{position:relative}.ant-btn-group>.ant-btn:hover,.ant-btn-group>span>.ant-btn:hover,.ant-btn-group>.ant-btn:focus,.ant-btn-group>span>.ant-btn:focus,.ant-btn-group>.ant-btn:active,.ant-btn-group>span>.ant-btn:active{z-index:2}.ant-btn-group>.ant-btn[disabled],.ant-btn-group>span>.ant-btn[disabled]{z-index:0}.ant-btn-group .ant-btn-icon-only{font-size:14px}.ant-btn-group-lg>.ant-btn,.ant-btn-group-lg>span>.ant-btn{height:40px;padding:6.4px 15px;font-size:16px;border-radius:0}.ant-btn-group-lg .ant-btn.ant-btn-icon-only{width:40px;height:40px;padding-right:0;padding-left:0}.ant-btn-group-sm>.ant-btn,.ant-btn-group-sm>span>.ant-btn{height:24px;padding:0 7px;font-size:14px;border-radius:0}.ant-btn-group-sm>.ant-btn>.anticon,.ant-btn-group-sm>span>.ant-btn>.anticon{font-size:14px}.ant-btn-group-sm .ant-btn.ant-btn-icon-only{width:24px;height:24px;padding-right:0;padding-left:0}.ant-btn-group .ant-btn+.ant-btn,.ant-btn+.ant-btn-group,.ant-btn-group span+.ant-btn,.ant-btn-group .ant-btn+span,.ant-btn-group>span+span,.ant-btn-group+.ant-btn,.ant-btn-group+.ant-btn-group{margin-left:-1px}.ant-btn-group .ant-btn-primary+.ant-btn:not(.ant-btn-primary):not([disabled]){border-left-color:transparent}.ant-btn-group .ant-btn{border-radius:0}.ant-btn-group>.ant-btn:first-child,.ant-btn-group>span:first-child>.ant-btn{margin-left:0}.ant-btn-group>.ant-btn:only-child{border-radius:2px}.ant-btn-group>span:only-child>.ant-btn{border-radius:2px}.ant-btn-group>.ant-btn:first-child:not(:last-child),.ant-btn-group>span:first-child:not(:last-child)>.ant-btn{border-top-left-radius:2px;border-bottom-left-radius:2px}.ant-btn-group>.ant-btn:last-child:not(:first-child),.ant-btn-group>span:last-child:not(:first-child)>.ant-btn{border-top-right-radius:2px;border-bottom-right-radius:2px}.ant-btn-group-sm>.ant-btn:only-child{border-radius:2px}.ant-btn-group-sm>span:only-child>.ant-btn{border-radius:2px}.ant-btn-group-sm>.ant-btn:first-child:not(:last-child),.ant-btn-group-sm>span:first-child:not(:last-child)>.ant-btn{border-top-left-radius:2px;border-bottom-left-radius:2px}.ant-btn-group-sm>.ant-btn:last-child:not(:first-child),.ant-btn-group-sm>span:last-child:not(:first-child)>.ant-btn{border-top-right-radius:2px;border-bottom-right-radius:2px}.ant-btn-group>.ant-btn-group{float:left}.ant-btn-group>.ant-btn-group:not(:first-child):not(:last-child)>.ant-btn{border-radius:0}.ant-btn-group>.ant-btn-group:first-child:not(:last-child)>.ant-btn:last-child{padding-right:8px;border-top-right-radius:0;border-bottom-right-radius:0}.ant-btn-group>.ant-btn-group:last-child:not(:first-child)>.ant-btn:first-child{padding-left:8px;border-top-left-radius:0;border-bottom-left-radius:0}.ant-btn-rtl.ant-btn-group .ant-btn+.ant-btn,.ant-btn-rtl.ant-btn+.ant-btn-group,.ant-btn-rtl.ant-btn-group span+.ant-btn,.ant-btn-rtl.ant-btn-group .ant-btn+span,.ant-btn-rtl.ant-btn-group>span+span,.ant-btn-rtl.ant-btn-group+.ant-btn,.ant-btn-rtl.ant-btn-group+.ant-btn-group,.ant-btn-group-rtl.ant-btn-group .ant-btn+.ant-btn,.ant-btn-group-rtl.ant-btn+.ant-btn-group,.ant-btn-group-rtl.ant-btn-group span+.ant-btn,.ant-btn-group-rtl.ant-btn-group .ant-btn+span,.ant-btn-group-rtl.ant-btn-group>span+span,.ant-btn-group-rtl.ant-btn-group+.ant-btn,.ant-btn-group-rtl.ant-btn-group+.ant-btn-group{margin-right:-1px;margin-left:auto}.ant-btn-group.ant-btn-group-rtl{direction:rtl}.ant-btn-group-rtl.ant-btn-group>.ant-btn:first-child:not(:last-child),.ant-btn-group-rtl.ant-btn-group>span:first-child:not(:last-child)>.ant-btn{border-radius:0 2px 2px 0}.ant-btn-group-rtl.ant-btn-group>.ant-btn:last-child:not(:first-child),.ant-btn-group-rtl.ant-btn-group>span:last-child:not(:first-child)>.ant-btn{border-radius:2px 0 0 2px}.ant-btn-group-rtl.ant-btn-group-sm>.ant-btn:first-child:not(:last-child),.ant-btn-group-rtl.ant-btn-group-sm>span:first-child:not(:last-child)>.ant-btn{border-radius:0 2px 2px 0}.ant-btn-group-rtl.ant-btn-group-sm>.ant-btn:last-child:not(:first-child),.ant-btn-group-rtl.ant-btn-group-sm>span:last-child:not(:first-child)>.ant-btn{border-radius:2px 0 0 2px}.ant-btn:focus>span,.ant-btn:active>span{position:relative}.ant-btn>.anticon+span,.ant-btn>span+.anticon{margin-left:8px}.ant-btn.ant-btn-background-ghost{color:#fff;border-color:#fff}.ant-btn.ant-btn-background-ghost,.ant-btn.ant-btn-background-ghost:hover,.ant-btn.ant-btn-background-ghost:active,.ant-btn.ant-btn-background-ghost:focus{background:transparent}.ant-btn.ant-btn-background-ghost:hover,.ant-btn.ant-btn-background-ghost:focus{color:#40a9ff;border-color:#40a9ff}.ant-btn.ant-btn-background-ghost:active{color:#096dd9;border-color:#096dd9}.ant-btn.ant-btn-background-ghost[disabled]{color:#00000040;background:transparent;border-color:#d9d9d9}.ant-btn-background-ghost.ant-btn-primary{color:#1890ff;border-color:#1890ff;text-shadow:none}.ant-btn-background-ghost.ant-btn-primary>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-primary>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-primary:hover,.ant-btn-background-ghost.ant-btn-primary:focus{color:#40a9ff;border-color:#40a9ff}.ant-btn-background-ghost.ant-btn-primary:hover>a:only-child,.ant-btn-background-ghost.ant-btn-primary:focus>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-primary:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-primary:active{color:#096dd9;border-color:#096dd9}.ant-btn-background-ghost.ant-btn-primary:active>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-primary:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-primary[disabled],.ant-btn-background-ghost.ant-btn-primary[disabled]:hover,.ant-btn-background-ghost.ant-btn-primary[disabled]:focus,.ant-btn-background-ghost.ant-btn-primary[disabled]:active{color:#00000040;border-color:#d9d9d9;background:#f5f5f5;text-shadow:none;box-shadow:none}.ant-btn-background-ghost.ant-btn-primary[disabled]>a:only-child,.ant-btn-background-ghost.ant-btn-primary[disabled]:hover>a:only-child,.ant-btn-background-ghost.ant-btn-primary[disabled]:focus>a:only-child,.ant-btn-background-ghost.ant-btn-primary[disabled]:active>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-primary[disabled]>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary[disabled]:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary[disabled]:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-primary[disabled]:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-danger{color:#ff4d4f;border-color:#ff4d4f;text-shadow:none}.ant-btn-background-ghost.ant-btn-danger>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-danger>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-danger:hover,.ant-btn-background-ghost.ant-btn-danger:focus{color:#ff7875;border-color:#ff7875}.ant-btn-background-ghost.ant-btn-danger:hover>a:only-child,.ant-btn-background-ghost.ant-btn-danger:focus>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-danger:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-danger:active{color:#d9363e;border-color:#d9363e}.ant-btn-background-ghost.ant-btn-danger:active>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-danger:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-danger[disabled],.ant-btn-background-ghost.ant-btn-danger[disabled]:hover,.ant-btn-background-ghost.ant-btn-danger[disabled]:focus,.ant-btn-background-ghost.ant-btn-danger[disabled]:active{color:#00000040;border-color:#d9d9d9;background:#f5f5f5;text-shadow:none;box-shadow:none}.ant-btn-background-ghost.ant-btn-danger[disabled]>a:only-child,.ant-btn-background-ghost.ant-btn-danger[disabled]:hover>a:only-child,.ant-btn-background-ghost.ant-btn-danger[disabled]:focus>a:only-child,.ant-btn-background-ghost.ant-btn-danger[disabled]:active>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-danger[disabled]>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger[disabled]:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger[disabled]:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-danger[disabled]:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-dangerous{color:#ff4d4f;border-color:#ff4d4f;text-shadow:none}.ant-btn-background-ghost.ant-btn-dangerous>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-dangerous>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-dangerous:hover,.ant-btn-background-ghost.ant-btn-dangerous:focus{color:#ff7875;border-color:#ff7875}.ant-btn-background-ghost.ant-btn-dangerous:hover>a:only-child,.ant-btn-background-ghost.ant-btn-dangerous:focus>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-dangerous:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-dangerous:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-dangerous:active{color:#d9363e;border-color:#d9363e}.ant-btn-background-ghost.ant-btn-dangerous:active>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-dangerous:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-dangerous[disabled],.ant-btn-background-ghost.ant-btn-dangerous[disabled]:hover,.ant-btn-background-ghost.ant-btn-dangerous[disabled]:focus,.ant-btn-background-ghost.ant-btn-dangerous[disabled]:active{color:#00000040;border-color:#d9d9d9;background:#f5f5f5;text-shadow:none;box-shadow:none}.ant-btn-background-ghost.ant-btn-dangerous[disabled]>a:only-child,.ant-btn-background-ghost.ant-btn-dangerous[disabled]:hover>a:only-child,.ant-btn-background-ghost.ant-btn-dangerous[disabled]:focus>a:only-child,.ant-btn-background-ghost.ant-btn-dangerous[disabled]:active>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-dangerous[disabled]>a:only-child:after,.ant-btn-background-ghost.ant-btn-dangerous[disabled]:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-dangerous[disabled]:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-dangerous[disabled]:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link{color:#ff4d4f;border-color:transparent;text-shadow:none}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:hover,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:focus{color:#ff7875;border-color:transparent}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:hover>a:only-child,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:focus>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:focus>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:active{color:#d9363e;border-color:transparent}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:active>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled],.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:hover,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:focus,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:active{color:#00000040;border-color:#d9d9d9;background:#f5f5f5;text-shadow:none;box-shadow:none}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]>a:only-child,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:hover>a:only-child,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:focus>a:only-child,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:active>a:only-child{color:currentcolor}.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]>a:only-child:after,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:hover>a:only-child:after,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:focus>a:only-child:after,.ant-btn-background-ghost.ant-btn-dangerous.ant-btn-link[disabled]:active>a:only-child:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;content:""}.ant-btn-two-chinese-chars:first-letter{letter-spacing:.34em}.ant-btn-two-chinese-chars>*:not(.anticon){margin-right:-.34em;letter-spacing:.34em}.ant-btn.ant-btn-block{width:100%}.ant-btn:empty{display:inline-block;width:0;visibility:hidden;content:" "}a.ant-btn{padding-top:.01px!important;line-height:30px}a.ant-btn-lg{line-height:38px}a.ant-btn-sm{line-height:22px}.ant-btn-rtl{direction:rtl}.ant-btn-group-rtl.ant-btn-group .ant-btn-primary:last-child:not(:first-child),.ant-btn-group-rtl.ant-btn-group .ant-btn-primary+.ant-btn-primary{border-right-color:#40a9ff;border-left-color:#d9d9d9}.ant-btn-group-rtl.ant-btn-group .ant-btn-primary:last-child:not(:first-child)[disabled],.ant-btn-group-rtl.ant-btn-group .ant-btn-primary+.ant-btn-primary[disabled]{border-right-color:#d9d9d9;border-left-color:#40a9ff}.ant-btn-rtl.ant-btn>.ant-btn-loading-icon .anticon{padding-right:0;padding-left:8px}.ant-btn>.ant-btn-loading-icon:only-child .anticon{padding-right:0;padding-left:0}.ant-btn-rtl.ant-btn>.anticon+span,.ant-btn-rtl.ant-btn>span+.anticon{margin-right:8px;margin-left:0}/*!*************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/calendar/style/index.less ***! + \*************************************************************************************************************************************************************************************************************************************************************/.ant-picker-calendar{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";background:#fff}.ant-picker-calendar-header{display:flex;justify-content:flex-end;padding:12px 0}.ant-picker-calendar-header .ant-picker-calendar-year-select{min-width:80px}.ant-picker-calendar-header .ant-picker-calendar-month-select{min-width:70px;margin-left:8px}.ant-picker-calendar-header .ant-picker-calendar-mode-switch{margin-left:8px}.ant-picker-calendar .ant-picker-panel{background:#fff;border:0;border-top:1px solid #f0f0f0;border-radius:0}.ant-picker-calendar .ant-picker-panel .ant-picker-month-panel,.ant-picker-calendar .ant-picker-panel .ant-picker-date-panel{width:auto}.ant-picker-calendar .ant-picker-panel .ant-picker-body{padding:8px 0}.ant-picker-calendar .ant-picker-panel .ant-picker-content{width:100%}.ant-picker-calendar-mini{border-radius:2px}.ant-picker-calendar-mini .ant-picker-calendar-header{padding-right:8px;padding-left:8px}.ant-picker-calendar-mini .ant-picker-panel{border-radius:0 0 2px 2px}.ant-picker-calendar-mini .ant-picker-content{height:256px}.ant-picker-calendar-mini .ant-picker-content th{height:auto;padding:0;line-height:18px}.ant-picker-calendar-full .ant-picker-panel{display:block;width:100%;text-align:right;background:#fff;border:0}.ant-picker-calendar-full .ant-picker-panel .ant-picker-body th,.ant-picker-calendar-full .ant-picker-panel .ant-picker-body td{padding:0}.ant-picker-calendar-full .ant-picker-panel .ant-picker-body th{height:auto;padding:0 12px 5px 0;line-height:18px}.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell:before{display:none}.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell:hover .ant-picker-calendar-date{background:#f5f5f5}.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell .ant-picker-calendar-date-today:before{display:none}.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected .ant-picker-calendar-date,.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected:hover .ant-picker-calendar-date,.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected .ant-picker-calendar-date-today,.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected:hover .ant-picker-calendar-date-today{background:#e6f7ff}.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected .ant-picker-calendar-date .ant-picker-calendar-date-value,.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected:hover .ant-picker-calendar-date .ant-picker-calendar-date-value,.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected .ant-picker-calendar-date-today .ant-picker-calendar-date-value,.ant-picker-calendar-full .ant-picker-panel .ant-picker-cell-selected:hover .ant-picker-calendar-date-today .ant-picker-calendar-date-value{color:#1890ff}.ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date{display:block;width:auto;height:auto;margin:0 4px;padding:4px 8px 0;border:0;border-top:2px solid #f0f0f0;border-radius:0;transition:background .3s}.ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date-value{line-height:24px;transition:color .3s}.ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date-content{position:static;width:auto;height:86px;overflow-y:auto;color:#000000d9;line-height:1.5715;text-align:left}.ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date-today{border-color:#1890ff}.ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date-today .ant-picker-calendar-date-value{color:#000000d9}@media only screen and (max-width: 480px){.ant-picker-calendar-header{display:block}.ant-picker-calendar-header .ant-picker-calendar-year-select{width:50%}.ant-picker-calendar-header .ant-picker-calendar-month-select{width:calc(50% - 8px)}.ant-picker-calendar-header .ant-picker-calendar-mode-switch{width:100%;margin-top:8px;margin-left:0}.ant-picker-calendar-header .ant-picker-calendar-mode-switch>label{width:50%;text-align:center}}.ant-picker-calendar-rtl{direction:rtl}.ant-picker-calendar-rtl .ant-picker-calendar-header .ant-picker-calendar-month-select,.ant-picker-calendar-rtl .ant-picker-calendar-header .ant-picker-calendar-mode-switch{margin-right:8px;margin-left:0}.ant-picker-calendar-rtl.ant-picker-calendar-full .ant-picker-panel{text-align:left}.ant-picker-calendar-rtl.ant-picker-calendar-full .ant-picker-panel .ant-picker-body th{padding:0 0 5px 12px}.ant-picker-calendar-rtl.ant-picker-calendar-full .ant-picker-panel .ant-picker-calendar-date-content{text-align:right}/*!**********************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/radio/style/index.less ***! + \**********************************************************************************************************************************************************************************************************************************************************/.ant-radio-group{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";display:inline-block;font-size:0}.ant-radio-group .ant-badge-count{z-index:1}.ant-radio-group>.ant-badge:not(:first-child)>.ant-radio-button-wrapper{border-left:none}.ant-radio-wrapper{box-sizing:border-box;margin:0 8px 0 0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;display:inline-flex;align-items:baseline;cursor:pointer}.ant-radio-wrapper-disabled{cursor:not-allowed}.ant-radio-wrapper:after{display:inline-block;width:0;overflow:hidden;content:" "}.ant-radio{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;top:.2em;display:inline-block;outline:none;cursor:pointer}.ant-radio-wrapper:hover .ant-radio,.ant-radio:hover .ant-radio-inner,.ant-radio-input:focus+.ant-radio-inner{border-color:#1890ff}.ant-radio-input:focus+.ant-radio-inner{box-shadow:0 0 0 3px #e6f7ff}.ant-radio-checked:after{position:absolute;top:0;left:0;width:100%;height:100%;border:1px solid #1890ff;border-radius:50%;visibility:hidden;animation:antRadioEffect .36s ease-in-out;animation-fill-mode:both;content:""}.ant-radio:hover:after,.ant-radio-wrapper:hover .ant-radio:after{visibility:visible}.ant-radio-inner{position:relative;top:0;left:0;display:block;width:16px;height:16px;background-color:#fff;border-color:#d9d9d9;border-style:solid;border-width:1px;border-radius:50%;transition:all .3s}.ant-radio-inner:after{position:absolute;top:50%;left:50%;display:block;width:16px;height:16px;margin-top:-8px;margin-left:-8px;background-color:#1890ff;border-top:0;border-left:0;border-radius:16px;transform:scale(0);opacity:0;transition:all .3s cubic-bezier(.78,.14,.15,.86);content:" "}.ant-radio-input{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;cursor:pointer;opacity:0}.ant-radio-checked .ant-radio-inner{border-color:#1890ff}.ant-radio-checked .ant-radio-inner:after{transform:scale(.5);opacity:1;transition:all .3s cubic-bezier(.78,.14,.15,.86)}.ant-radio-disabled{cursor:not-allowed}.ant-radio-disabled .ant-radio-inner{background-color:#f5f5f5;border-color:#d9d9d9!important;cursor:not-allowed}.ant-radio-disabled .ant-radio-inner:after{background-color:#0003}.ant-radio-disabled .ant-radio-input{cursor:not-allowed}.ant-radio-disabled+span{color:#00000040;cursor:not-allowed}span.ant-radio+*{padding-right:8px;padding-left:8px}.ant-radio-button-wrapper{position:relative;display:inline-block;height:32px;margin:0;padding:0 15px;color:#000000d9;font-size:14px;line-height:30px;background:#fff;border:1px solid #d9d9d9;border-top-width:1.02px;border-left-width:0;cursor:pointer;transition:color .3s,background .3s,border-color .3s,box-shadow .3s}.ant-radio-button-wrapper a{color:#000000d9}.ant-radio-button-wrapper>.ant-radio-button{position:absolute;top:0;left:0;z-index:-1;width:100%;height:100%}.ant-radio-group-large .ant-radio-button-wrapper{height:40px;font-size:16px;line-height:38px}.ant-radio-group-small .ant-radio-button-wrapper{height:24px;padding:0 7px;line-height:22px}.ant-radio-button-wrapper:not(:first-child):before{position:absolute;top:-1px;left:-1px;display:block;box-sizing:content-box;width:1px;height:100%;padding:1px 0;background-color:#d9d9d9;transition:background-color .3s;content:""}.ant-radio-button-wrapper:first-child{border-left:1px solid #d9d9d9;border-radius:2px 0 0 2px}.ant-radio-button-wrapper:last-child{border-radius:0 2px 2px 0}.ant-radio-button-wrapper:first-child:last-child{border-radius:2px}.ant-radio-button-wrapper:hover{position:relative;color:#1890ff}.ant-radio-button-wrapper:focus-within{box-shadow:0 0 0 3px #e6f7ff}.ant-radio-button-wrapper .ant-radio-inner,.ant-radio-button-wrapper input[type=checkbox],.ant-radio-button-wrapper input[type=radio]{width:0;height:0;opacity:0;pointer-events:none}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled){z-index:1;color:#1890ff;background:#fff;border-color:#1890ff}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):before{background-color:#1890ff}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):first-child{border-color:#1890ff}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover{color:#40a9ff;border-color:#40a9ff}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover:before{background-color:#40a9ff}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active{color:#096dd9;border-color:#096dd9}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active:before{background-color:#096dd9}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):focus-within{box-shadow:0 0 0 3px #e6f7ff}.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled){color:#fff;background:#1890ff;border-color:#1890ff}.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover{color:#fff;background:#40a9ff;border-color:#40a9ff}.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active{color:#fff;background:#096dd9;border-color:#096dd9}.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):focus-within{box-shadow:0 0 0 3px #e6f7ff}.ant-radio-button-wrapper-disabled{color:#00000040;background-color:#f5f5f5;border-color:#d9d9d9;cursor:not-allowed}.ant-radio-button-wrapper-disabled:first-child,.ant-radio-button-wrapper-disabled:hover{color:#00000040;background-color:#f5f5f5;border-color:#d9d9d9}.ant-radio-button-wrapper-disabled:first-child{border-left-color:#d9d9d9}.ant-radio-button-wrapper-disabled.ant-radio-button-wrapper-checked{color:#00000040;background-color:#e6e6e6;border-color:#d9d9d9;box-shadow:none}@keyframes antRadioEffect{0%{transform:scale(1);opacity:.5}to{transform:scale(1.6);opacity:0}}.ant-radio-group.ant-radio-group-rtl{direction:rtl}.ant-radio-wrapper.ant-radio-wrapper-rtl{margin-right:0;margin-left:8px;direction:rtl}.ant-radio-button-wrapper.ant-radio-button-wrapper-rtl{border-right-width:0;border-left-width:1px}.ant-radio-button-wrapper.ant-radio-button-wrapper-rtl.ant-radio-button-wrapper:not(:first-child):before{right:-1px;left:0}.ant-radio-button-wrapper.ant-radio-button-wrapper-rtl.ant-radio-button-wrapper:first-child{border-right:1px solid #d9d9d9;border-radius:0 2px 2px 0}.ant-radio-button-wrapper-checked:not([class*=" ant-radio-button-wrapper-disabled"]).ant-radio-button-wrapper:first-child{border-right-color:#40a9ff}.ant-radio-button-wrapper.ant-radio-button-wrapper-rtl.ant-radio-button-wrapper:last-child{border-radius:2px 0 0 2px}.ant-radio-button-wrapper.ant-radio-button-wrapper-rtl.ant-radio-button-wrapper-disabled:first-child{border-right-color:#d9d9d9}/*!****************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/date-picker/style/index.less ***! + \****************************************************************************************************************************************************************************************************************************************************************/.ant-picker{box-sizing:border-box;margin:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";padding:4px 11px;position:relative;display:inline-flex;align-items:center;background:#fff;border:1px solid #d9d9d9;border-radius:2px;transition:border .3s,box-shadow .3s}.ant-picker:hover,.ant-picker-focused{border-color:#40a9ff;border-right-width:1px!important}.ant-picker-focused{border-color:#40a9ff;box-shadow:0 0 0 2px #1890ff33;border-right-width:1px!important;outline:0}.ant-picker.ant-picker-disabled{background:#f5f5f5;border-color:#d9d9d9;cursor:not-allowed}.ant-picker.ant-picker-disabled .ant-picker-suffix{color:#00000040}.ant-picker.ant-picker-borderless{background-color:transparent!important;border-color:transparent!important;box-shadow:none!important}.ant-picker-input{position:relative;display:inline-flex;align-items:center;width:100%}.ant-picker-input>input{position:relative;display:inline-block;width:100%;min-width:0;color:#000000d9;font-size:14px;line-height:1.5715;background-color:#fff;background-image:none;border:1px solid #d9d9d9;border-radius:2px;transition:all .3s;flex:auto;min-width:1px;height:auto;padding:0;background:transparent;border:0}.ant-picker-input>input::-moz-placeholder{opacity:1}.ant-picker-input>input::placeholder{color:#bfbfbf;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-picker-input>input:-moz-placeholder-shown{text-overflow:ellipsis}.ant-picker-input>input:placeholder-shown{text-overflow:ellipsis}.ant-picker-input>input:hover{border-color:#40a9ff;border-right-width:1px!important}.ant-picker-input>input:focus,.ant-picker-input>input-focused{border-color:#40a9ff;box-shadow:0 0 0 2px #1890ff33;border-right-width:1px!important;outline:0}.ant-picker-input>input-disabled{color:#00000040;background-color:#f5f5f5;border-color:#d9d9d9;box-shadow:none;cursor:not-allowed;opacity:1}.ant-picker-input>input-disabled:hover{border-color:#d9d9d9;border-right-width:1px!important}.ant-picker-input>input[disabled]{color:#00000040;background-color:#f5f5f5;border-color:#d9d9d9;box-shadow:none;cursor:not-allowed;opacity:1}.ant-picker-input>input[disabled]:hover{border-color:#d9d9d9;border-right-width:1px!important}.ant-picker-input>input-borderless,.ant-picker-input>input-borderless:hover,.ant-picker-input>input-borderless:focus,.ant-picker-input>input-borderless-focused,.ant-picker-input>input-borderless-disabled,.ant-picker-input>input-borderless[disabled]{background-color:transparent;border:none;box-shadow:none}textarea.ant-picker-input>input{max-width:100%;height:auto;min-height:32px;line-height:1.5715;vertical-align:bottom;transition:all .3s,height 0s}.ant-picker-input>input-lg{padding:6.5px 11px;font-size:16px}.ant-picker-input>input-sm{padding:0 7px}.ant-picker-input>input:focus{box-shadow:none}.ant-picker-input>input[disabled]{background:transparent}.ant-picker-input:hover .ant-picker-clear{opacity:1}.ant-picker-input-placeholder>input{color:#bfbfbf}.ant-picker-large{padding:6.5px 11px}.ant-picker-large .ant-picker-input>input{font-size:16px}.ant-picker-small{padding:0 7px}.ant-picker-suffix{align-self:center;margin-left:4px;color:#00000040;line-height:1;pointer-events:none}.ant-picker-suffix>*{vertical-align:top}.ant-picker-clear{position:absolute;top:50%;right:0;color:#00000040;line-height:1;background:#fff;transform:translateY(-50%);cursor:pointer;opacity:0;transition:opacity .3s,color .3s}.ant-picker-clear>*{vertical-align:top}.ant-picker-clear:hover{color:#00000073}.ant-picker-separator{position:relative;display:inline-block;width:1em;height:16px;color:#00000040;font-size:16px;vertical-align:top;cursor:default}.ant-picker-focused .ant-picker-separator{color:#00000073}.ant-picker-disabled .ant-picker-range-separator .ant-picker-separator{cursor:not-allowed}.ant-picker-range{position:relative;display:inline-flex}.ant-picker-range .ant-picker-clear{right:11px}.ant-picker-range:hover .ant-picker-clear{opacity:1}.ant-picker-range .ant-picker-active-bar{bottom:-1px;height:2px;margin-left:11px;background:#1890ff;opacity:0;transition:all .3s ease-out;pointer-events:none}.ant-picker-range.ant-picker-focused .ant-picker-active-bar{opacity:1}.ant-picker-range-separator{align-items:center;padding:0 8px;line-height:1}.ant-picker-range.ant-picker-small .ant-picker-clear{right:7px}.ant-picker-range.ant-picker-small .ant-picker-active-bar{margin-left:7px}.ant-picker-dropdown{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:absolute;z-index:1050}.ant-picker-dropdown-hidden{display:none}.ant-picker-dropdown-placement-bottomLeft .ant-picker-range-arrow{top:1.66666667px;display:block;transform:rotate(-45deg)}.ant-picker-dropdown-placement-topLeft .ant-picker-range-arrow{bottom:1.66666667px;display:block;transform:rotate(135deg)}.ant-picker-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-picker-dropdown-placement-topLeft,.ant-picker-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-picker-dropdown-placement-topRight,.ant-picker-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-picker-dropdown-placement-topLeft,.ant-picker-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-picker-dropdown-placement-topRight{animation-name:antSlideDownIn}.ant-picker-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-picker-dropdown-placement-bottomLeft,.ant-picker-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-picker-dropdown-placement-bottomRight,.ant-picker-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-picker-dropdown-placement-bottomLeft,.ant-picker-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-picker-dropdown-placement-bottomRight{animation-name:antSlideUpIn}.ant-picker-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-picker-dropdown-placement-topLeft,.ant-picker-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-picker-dropdown-placement-topRight{animation-name:antSlideDownOut}.ant-picker-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-picker-dropdown-placement-bottomLeft,.ant-picker-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-picker-dropdown-placement-bottomRight{animation-name:antSlideUpOut}.ant-picker-dropdown-range{padding:6.66666667px 0}.ant-picker-dropdown-range-hidden{display:none}.ant-picker-dropdown .ant-picker-panel>.ant-picker-time-panel{padding-top:4px}.ant-picker-ranges{margin-bottom:0;padding:4px 12px;overflow:hidden;line-height:34px;text-align:left;list-style:none}.ant-picker-ranges>li{display:inline-block}.ant-picker-ranges .ant-picker-preset>.ant-tag-blue{color:#1890ff;background:#e6f7ff;border-color:#91d5ff;cursor:pointer}.ant-picker-ranges .ant-picker-ok{float:right;margin-left:8px}.ant-picker-range-wrapper{display:flex}.ant-picker-range-arrow{position:absolute;z-index:1;display:none;width:10px;height:10px;margin-left:16.5px;box-shadow:2px -2px 6px #0000000f;transition:left .3s ease-out}.ant-picker-range-arrow:after{position:absolute;top:1px;right:1px;width:10px;height:10px;border:5px solid #f0f0f0;border-color:#fff #fff transparent transparent;content:""}.ant-picker-panel-container{overflow:hidden;vertical-align:top;background:#fff;border-radius:2px;box-shadow:0 3px 6px -4px #0000001f,0 6px 16px #00000014,0 9px 28px 8px #0000000d;transition:margin .3s}.ant-picker-panel-container .ant-picker-panels{display:inline-flex;flex-wrap:nowrap;direction:ltr}.ant-picker-panel-container .ant-picker-panel{vertical-align:top;background:transparent;border-width:0 0 1px 0;border-radius:0}.ant-picker-panel-container .ant-picker-panel .ant-picker-content,.ant-picker-panel-container .ant-picker-panel table{text-align:center}.ant-picker-panel-container .ant-picker-panel-focused{border-color:#f0f0f0}.ant-picker-panel{display:inline-flex;flex-direction:column;text-align:center;background:#fff;border:1px solid #f0f0f0;border-radius:2px;outline:none}.ant-picker-panel-focused{border-color:#1890ff}.ant-picker-decade-panel,.ant-picker-year-panel,.ant-picker-quarter-panel,.ant-picker-month-panel,.ant-picker-week-panel,.ant-picker-date-panel,.ant-picker-time-panel{display:flex;flex-direction:column;width:280px}.ant-picker-header{display:flex;padding:0 8px;color:#000000d9;border-bottom:1px solid #f0f0f0}.ant-picker-header>*{flex:none}.ant-picker-header button{padding:0;color:#00000040;line-height:40px;background:transparent;border:0;cursor:pointer;transition:color .3s}.ant-picker-header>button{min-width:1.6em;font-size:14px}.ant-picker-header>button:hover{color:#000000d9}.ant-picker-header-view{flex:auto;font-weight:500;line-height:40px}.ant-picker-header-view button{color:inherit;font-weight:inherit}.ant-picker-header-view button:not(:first-child){margin-left:8px}.ant-picker-header-view button:hover{color:#1890ff}.ant-picker-prev-icon,.ant-picker-next-icon,.ant-picker-super-prev-icon,.ant-picker-super-next-icon{position:relative;display:inline-block;width:7px;height:7px}.ant-picker-prev-icon:before,.ant-picker-next-icon:before,.ant-picker-super-prev-icon:before,.ant-picker-super-next-icon:before{position:absolute;top:0;left:0;display:inline-block;width:7px;height:7px;border:0 solid currentcolor;border-width:1.5px 0 0 1.5px;content:""}.ant-picker-super-prev-icon:after,.ant-picker-super-next-icon:after{position:absolute;top:4px;left:4px;display:inline-block;width:7px;height:7px;border:0 solid currentcolor;border-width:1.5px 0 0 1.5px;content:""}.ant-picker-prev-icon,.ant-picker-super-prev-icon{transform:rotate(-45deg)}.ant-picker-next-icon,.ant-picker-super-next-icon{transform:rotate(135deg)}.ant-picker-content{width:100%;table-layout:fixed;border-collapse:collapse}.ant-picker-content th,.ant-picker-content td{position:relative;min-width:24px;font-weight:400}.ant-picker-content th{height:30px;color:#000000d9;line-height:30px}.ant-picker-cell{padding:3px 0;color:#00000040;cursor:pointer}.ant-picker-cell-in-view{color:#000000d9}.ant-picker-cell:before{position:absolute;top:50%;right:0;left:0;z-index:1;height:24px;transform:translateY(-50%);transition:all .3s;content:""}.ant-picker-cell:hover:not(.ant-picker-cell-in-view) .ant-picker-cell-inner,.ant-picker-cell:hover:not(.ant-picker-cell-selected):not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end):not(.ant-picker-cell-range-hover-start):not(.ant-picker-cell-range-hover-end) .ant-picker-cell-inner{background:#f5f5f5}.ant-picker-cell-in-view.ant-picker-cell-today .ant-picker-cell-inner:before{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;border:1px solid #1890ff;border-radius:2px;content:""}.ant-picker-cell-in-view.ant-picker-cell-in-range{position:relative}.ant-picker-cell-in-view.ant-picker-cell-in-range:before{background:#e6f7ff}.ant-picker-cell-in-view.ant-picker-cell-selected .ant-picker-cell-inner,.ant-picker-cell-in-view.ant-picker-cell-range-start .ant-picker-cell-inner,.ant-picker-cell-in-view.ant-picker-cell-range-end .ant-picker-cell-inner{color:#fff;background:#1890ff}.ant-picker-cell-in-view.ant-picker-cell-range-start:not(.ant-picker-cell-range-start-single):before,.ant-picker-cell-in-view.ant-picker-cell-range-end:not(.ant-picker-cell-range-end-single):before{background:#e6f7ff}.ant-picker-cell-in-view.ant-picker-cell-range-start:before{left:50%}.ant-picker-cell-in-view.ant-picker-cell-range-end:before{right:50%}.ant-picker-cell-in-view.ant-picker-cell-range-hover-start:not(.ant-picker-cell-in-range):not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end):after,.ant-picker-cell-in-view.ant-picker-cell-range-hover-end:not(.ant-picker-cell-in-range):not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end):after,.ant-picker-cell-in-view.ant-picker-cell-range-hover-start.ant-picker-cell-range-start-single:after,.ant-picker-cell-in-view.ant-picker-cell-range-hover-start.ant-picker-cell-range-start.ant-picker-cell-range-end.ant-picker-cell-range-end-near-hover:after,.ant-picker-cell-in-view.ant-picker-cell-range-hover-end.ant-picker-cell-range-start.ant-picker-cell-range-end.ant-picker-cell-range-start-near-hover:after,.ant-picker-cell-in-view.ant-picker-cell-range-hover-end.ant-picker-cell-range-end-single:after,.ant-picker-cell-in-view.ant-picker-cell-range-hover:not(.ant-picker-cell-in-range):after{position:absolute;top:50%;z-index:0;height:24px;border-top:1px dashed #7ec1ff;border-bottom:1px dashed #7ec1ff;transform:translateY(-50%);transition:all .3s;content:""}.ant-picker-cell-range-hover-start:after,.ant-picker-cell-range-hover-end:after,.ant-picker-cell-range-hover:after{right:0;left:2px}.ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover:before,.ant-picker-cell-in-view.ant-picker-cell-range-start.ant-picker-cell-range-hover:before,.ant-picker-cell-in-view.ant-picker-cell-range-end.ant-picker-cell-range-hover:before,.ant-picker-cell-in-view.ant-picker-cell-range-start:not(.ant-picker-cell-range-start-single).ant-picker-cell-range-hover-start:before,.ant-picker-cell-in-view.ant-picker-cell-range-end:not(.ant-picker-cell-range-end-single).ant-picker-cell-range-hover-end:before,.ant-picker-panel>:not(.ant-picker-date-panel) .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-start:before,.ant-picker-panel>:not(.ant-picker-date-panel) .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-end:before{background:#cbe6ff}.ant-picker-cell-in-view.ant-picker-cell-range-start:not(.ant-picker-cell-range-start-single):not(.ant-picker-cell-range-end) .ant-picker-cell-inner{border-radius:2px 0 0 2px}.ant-picker-cell-in-view.ant-picker-cell-range-end:not(.ant-picker-cell-range-end-single):not(.ant-picker-cell-range-start) .ant-picker-cell-inner{border-radius:0 2px 2px 0}.ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-start .ant-picker-cell-inner:after,.ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-end .ant-picker-cell-inner:after{position:absolute;top:0;bottom:0;z-index:-1;background:#cbe6ff;transition:all .3s;content:""}.ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-start .ant-picker-cell-inner:after{right:-6px;left:0}.ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-end .ant-picker-cell-inner:after{right:0;left:-6px}.ant-picker-cell-range-hover.ant-picker-cell-range-start:after{right:50%}.ant-picker-cell-range-hover.ant-picker-cell-range-end:after{left:50%}tr>.ant-picker-cell-in-view.ant-picker-cell-range-hover:first-child:after,tr>.ant-picker-cell-in-view.ant-picker-cell-range-hover-end:first-child:after,.ant-picker-cell-in-view.ant-picker-cell-start.ant-picker-cell-range-hover-edge-start.ant-picker-cell-range-hover-edge-start-near-range:after,.ant-picker-cell-in-view.ant-picker-cell-range-hover-edge-start:not(.ant-picker-cell-range-hover-edge-start-near-range):after,.ant-picker-cell-in-view.ant-picker-cell-range-hover-start:after{left:6px;border-left:1px dashed #7ec1ff;border-top-left-radius:2px;border-bottom-left-radius:2px}tr>.ant-picker-cell-in-view.ant-picker-cell-range-hover:last-child:after,tr>.ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child:after,.ant-picker-cell-in-view.ant-picker-cell-end.ant-picker-cell-range-hover-edge-end.ant-picker-cell-range-hover-edge-end-near-range:after,.ant-picker-cell-in-view.ant-picker-cell-range-hover-edge-end:not(.ant-picker-cell-range-hover-edge-end-near-range):after,.ant-picker-cell-in-view.ant-picker-cell-range-hover-end:after{right:6px;border-right:1px dashed #7ec1ff;border-top-right-radius:2px;border-bottom-right-radius:2px}.ant-picker-cell-disabled{color:#00000040;pointer-events:none}.ant-picker-cell-disabled .ant-picker-cell-inner{background:transparent}.ant-picker-cell-disabled:before{background:rgba(0,0,0,.04)}.ant-picker-cell-disabled.ant-picker-cell-today .ant-picker-cell-inner:before{border-color:#00000040}.ant-picker-decade-panel .ant-picker-content,.ant-picker-year-panel .ant-picker-content,.ant-picker-quarter-panel .ant-picker-content,.ant-picker-month-panel .ant-picker-content{height:264px}.ant-picker-decade-panel .ant-picker-cell-inner,.ant-picker-year-panel .ant-picker-cell-inner,.ant-picker-quarter-panel .ant-picker-cell-inner,.ant-picker-month-panel .ant-picker-cell-inner{padding:0 8px}.ant-picker-quarter-panel .ant-picker-content{height:56px}.ant-picker-footer{width:-moz-min-content;width:min-content;min-width:100%;line-height:38px;text-align:center;border-bottom:1px solid transparent}.ant-picker-panel .ant-picker-footer{border-top:1px solid #f0f0f0}.ant-picker-footer-extra{padding:0 12px;line-height:38px;text-align:left}.ant-picker-footer-extra:not(:last-child){border-bottom:1px solid #f0f0f0}.ant-picker-now{text-align:left}.ant-picker-today-btn{color:#1890ff}.ant-picker-today-btn:hover{color:#40a9ff}.ant-picker-today-btn:active{color:#096dd9}.ant-picker-today-btn.ant-picker-today-btn-disabled{color:#00000040;cursor:not-allowed}.ant-picker-decade-panel .ant-picker-cell-inner{padding:0 4px}.ant-picker-decade-panel .ant-picker-cell:before{display:none}.ant-picker-year-panel .ant-picker-body,.ant-picker-quarter-panel .ant-picker-body,.ant-picker-month-panel .ant-picker-body{padding:0 8px}.ant-picker-year-panel .ant-picker-cell-inner,.ant-picker-quarter-panel .ant-picker-cell-inner,.ant-picker-month-panel .ant-picker-cell-inner{width:60px}.ant-picker-year-panel .ant-picker-cell-range-hover-start:after,.ant-picker-quarter-panel .ant-picker-cell-range-hover-start:after,.ant-picker-month-panel .ant-picker-cell-range-hover-start:after{left:14px;border-left:1px dashed #7ec1ff;border-radius:2px 0 0 2px}.ant-picker-panel-rtl .ant-picker-year-panel .ant-picker-cell-range-hover-start:after,.ant-picker-panel-rtl .ant-picker-quarter-panel .ant-picker-cell-range-hover-start:after,.ant-picker-panel-rtl .ant-picker-month-panel .ant-picker-cell-range-hover-start:after{right:14px;border-right:1px dashed #7ec1ff;border-radius:0 2px 2px 0}.ant-picker-year-panel .ant-picker-cell-range-hover-end:after,.ant-picker-quarter-panel .ant-picker-cell-range-hover-end:after,.ant-picker-month-panel .ant-picker-cell-range-hover-end:after{right:14px;border-right:1px dashed #7ec1ff;border-radius:0 2px 2px 0}.ant-picker-panel-rtl .ant-picker-year-panel .ant-picker-cell-range-hover-end:after,.ant-picker-panel-rtl .ant-picker-quarter-panel .ant-picker-cell-range-hover-end:after,.ant-picker-panel-rtl .ant-picker-month-panel .ant-picker-cell-range-hover-end:after{left:14px;border-left:1px dashed #7ec1ff;border-radius:2px 0 0 2px}.ant-picker-week-panel .ant-picker-body{padding:8px 12px}.ant-picker-week-panel .ant-picker-cell:hover .ant-picker-cell-inner,.ant-picker-week-panel .ant-picker-cell-selected .ant-picker-cell-inner,.ant-picker-week-panel .ant-picker-cell .ant-picker-cell-inner{background:transparent!important}.ant-picker-week-panel-row td{transition:background .3s}.ant-picker-week-panel-row:hover td{background:#f5f5f5}.ant-picker-week-panel-row-selected td,.ant-picker-week-panel-row-selected:hover td{background:#1890ff}.ant-picker-week-panel-row-selected td.ant-picker-cell-week,.ant-picker-week-panel-row-selected:hover td.ant-picker-cell-week{color:#ffffff80}.ant-picker-week-panel-row-selected td.ant-picker-cell-today .ant-picker-cell-inner:before,.ant-picker-week-panel-row-selected:hover td.ant-picker-cell-today .ant-picker-cell-inner:before{border-color:#fff}.ant-picker-week-panel-row-selected td .ant-picker-cell-inner,.ant-picker-week-panel-row-selected:hover td .ant-picker-cell-inner{color:#fff}.ant-picker-date-panel .ant-picker-body{padding:8px 12px}.ant-picker-date-panel .ant-picker-content{width:252px}.ant-picker-date-panel .ant-picker-content th{width:36px}.ant-picker-datetime-panel{display:flex}.ant-picker-datetime-panel .ant-picker-time-panel{border-left:1px solid #f0f0f0}.ant-picker-datetime-panel .ant-picker-date-panel,.ant-picker-datetime-panel .ant-picker-time-panel{transition:opacity .3s}.ant-picker-datetime-panel-active .ant-picker-date-panel,.ant-picker-datetime-panel-active .ant-picker-time-panel{opacity:.3}.ant-picker-datetime-panel-active .ant-picker-date-panel-active,.ant-picker-datetime-panel-active .ant-picker-time-panel-active{opacity:1}.ant-picker-time-panel{width:auto;min-width:auto}.ant-picker-time-panel .ant-picker-content{display:flex;flex:auto;height:224px}.ant-picker-time-panel-column{flex:1 0 auto;width:56px;margin:0;padding:0;overflow-y:hidden;text-align:left;list-style:none;transition:background .3s}.ant-picker-time-panel-column:after{display:block;height:196px;content:""}.ant-picker-datetime-panel .ant-picker-time-panel-column:after{height:198px}.ant-picker-time-panel-column:not(:first-child){border-left:1px solid #f0f0f0}.ant-picker-time-panel-column-active{background:rgba(230,247,255,.2)}.ant-picker-time-panel-column:hover{overflow-y:auto}.ant-picker-time-panel-column>li{margin:0;padding:0}.ant-picker-time-panel-column>li.ant-picker-time-panel-cell .ant-picker-time-panel-cell-inner{display:block;width:100%;height:28px;margin:0;padding:0 0 0 14px;color:#000000d9;line-height:28px;border-radius:0;cursor:pointer;transition:background .3s}.ant-picker-time-panel-column>li.ant-picker-time-panel-cell .ant-picker-time-panel-cell-inner:hover{background:#f5f5f5}.ant-picker-time-panel-column>li.ant-picker-time-panel-cell-selected .ant-picker-time-panel-cell-inner{background:#e6f7ff}.ant-picker-time-panel-column>li.ant-picker-time-panel-cell-disabled .ant-picker-time-panel-cell-inner{color:#00000040;background:transparent;cursor:not-allowed}_:-ms-fullscreen .ant-picker-range-wrapper .ant-picker-month-panel .ant-picker-cell,:root .ant-picker-range-wrapper .ant-picker-month-panel .ant-picker-cell,_:-ms-fullscreen .ant-picker-range-wrapper .ant-picker-year-panel .ant-picker-cell,:root .ant-picker-range-wrapper .ant-picker-year-panel .ant-picker-cell{padding:21px 0}.ant-picker-rtl{direction:rtl}.ant-picker-rtl .ant-picker-suffix{margin-right:4px;margin-left:0}.ant-picker-rtl .ant-picker-clear{right:auto;left:0}.ant-picker-rtl .ant-picker-separator{transform:rotate(180deg)}.ant-picker-panel-rtl .ant-picker-header-view button:not(:first-child){margin-right:8px;margin-left:0}.ant-picker-rtl.ant-picker-range .ant-picker-clear{right:auto;left:11px}.ant-picker-rtl.ant-picker-range .ant-picker-active-bar{margin-right:11px;margin-left:0}.ant-picker-rtl.ant-picker-range.ant-picker-small .ant-picker-active-bar{margin-right:7px}.ant-picker-dropdown-rtl .ant-picker-ranges{text-align:right}.ant-picker-dropdown-rtl .ant-picker-ranges .ant-picker-ok{float:left;margin-right:8px;margin-left:0}.ant-picker-panel-rtl{direction:rtl}.ant-picker-panel-rtl .ant-picker-prev-icon,.ant-picker-panel-rtl .ant-picker-super-prev-icon{transform:rotate(135deg)}.ant-picker-panel-rtl .ant-picker-next-icon,.ant-picker-panel-rtl .ant-picker-super-next-icon{transform:rotate(-45deg)}.ant-picker-cell .ant-picker-cell-inner{position:relative;z-index:2;display:inline-block;min-width:24px;height:24px;line-height:24px;border-radius:2px;transition:background .3s,border .3s}.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-start:before{right:50%;left:0}.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-end:before{right:0;left:50%}.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-start.ant-picker-cell-range-end:before{right:50%;left:50%}.ant-picker-panel-rtl .ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-start .ant-picker-cell-inner:after{right:0;left:-6px}.ant-picker-panel-rtl .ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-end .ant-picker-cell-inner:after{right:-6px;left:0}.ant-picker-panel-rtl .ant-picker-cell-range-hover.ant-picker-cell-range-start:after{right:0;left:50%}.ant-picker-panel-rtl .ant-picker-cell-range-hover.ant-picker-cell-range-end:after{right:50%;left:0}.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-start:not(.ant-picker-cell-range-start-single):not(.ant-picker-cell-range-end) .ant-picker-cell-inner{border-radius:0 2px 2px 0}.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-end:not(.ant-picker-cell-range-end-single):not(.ant-picker-cell-range-start) .ant-picker-cell-inner{border-radius:2px 0 0 2px}.ant-picker-panel-rtl tr>.ant-picker-cell-in-view.ant-picker-cell-range-hover:not(.ant-picker-cell-selected):first-child:after,.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-start.ant-picker-cell-range-hover-edge-start.ant-picker-cell-range-hover-edge-start-near-range:after,.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-hover-edge-start:not(.ant-picker-cell-range-hover-edge-start-near-range):after,.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:after{right:6px;left:0;border-right:1px dashed #7ec1ff;border-left:none;border-radius:0 2px 2px 0}.ant-picker-panel-rtl tr>.ant-picker-cell-in-view.ant-picker-cell-range-hover:not(.ant-picker-cell-selected):last-child:after,.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-end.ant-picker-cell-range-hover-edge-end.ant-picker-cell-range-hover-edge-end-near-range:after,.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-hover-edge-end:not(.ant-picker-cell-range-hover-edge-end-near-range):after,.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-range-hover-end:after{right:0;left:6px;border-right:none;border-left:1px dashed #7ec1ff;border-radius:2px 0 0 2px}.ant-picker-panel-rtl tr>.ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child:after,.ant-picker-panel-rtl tr>.ant-picker-cell-in-view.ant-picker-cell-range-hover-end:first-child:after,.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-start.ant-picker-cell-range-hover-edge-start:not(.ant-picker-cell-range-hover):after,.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-start.ant-picker-cell-range-hover-end.ant-picker-cell-range-hover-edge-start:not(.ant-picker-cell-range-hover):after,.ant-picker-panel-rtl .ant-picker-cell-in-view.ant-picker-cell-end.ant-picker-cell-range-hover-start.ant-picker-cell-range-hover-edge-end:not(.ant-picker-cell-range-hover):after,.ant-picker-panel-rtl tr>.ant-picker-cell-in-view.ant-picker-cell-start.ant-picker-cell-range-hover.ant-picker-cell-range-hover-edge-start:last-child:after,.ant-picker-panel-rtl tr>.ant-picker-cell-in-view.ant-picker-cell-end.ant-picker-cell-range-hover.ant-picker-cell-range-hover-edge-end:first-child:after{right:6px;left:6px;border-right:1px dashed #7ec1ff;border-left:1px dashed #7ec1ff;border-radius:2px}.ant-picker-dropdown-rtl .ant-picker-footer-extra{direction:rtl;text-align:right}.ant-picker-panel-rtl .ant-picker-time-panel{direction:ltr}/*!********************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/tag/style/index.less ***! + \********************************************************************************************************************************************************************************************************************************************************/.ant-tag{box-sizing:border-box;margin:0 8px 0 0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";display:inline-block;height:auto;padding:0 7px;font-size:12px;line-height:20px;white-space:nowrap;background:#fafafa;border:1px solid #d9d9d9;border-radius:2px;opacity:1;transition:all .3s}.ant-tag,.ant-tag a,.ant-tag a:hover{color:#000000d9}.ant-tag>a:first-child:last-child{display:inline-block;margin:0 -8px;padding:0 8px}.ant-tag-close-icon{margin-left:3px;color:#00000073;font-size:10px;cursor:pointer;transition:all .3s}.ant-tag-close-icon:hover{color:#000000d9}.ant-tag-has-color{border-color:transparent}.ant-tag-has-color,.ant-tag-has-color a,.ant-tag-has-color a:hover,.ant-tag-has-color .anticon-close,.ant-tag-has-color .anticon-close:hover{color:#fff}.ant-tag-checkable{background-color:transparent;border-color:transparent;cursor:pointer}.ant-tag-checkable:not(.ant-tag-checkable-checked):hover{color:#1890ff}.ant-tag-checkable:active,.ant-tag-checkable-checked{color:#fff}.ant-tag-checkable-checked{background-color:#1890ff}.ant-tag-checkable:active{background-color:#096dd9}.ant-tag-hidden{display:none}.ant-tag-pink{color:#c41d7f;background:#fff0f6;border-color:#ffadd2}.ant-tag-pink-inverse{color:#fff;background:#eb2f96;border-color:#eb2f96}.ant-tag-magenta{color:#c41d7f;background:#fff0f6;border-color:#ffadd2}.ant-tag-magenta-inverse{color:#fff;background:#eb2f96;border-color:#eb2f96}.ant-tag-red{color:#cf1322;background:#fff1f0;border-color:#ffa39e}.ant-tag-red-inverse{color:#fff;background:#f5222d;border-color:#f5222d}.ant-tag-volcano{color:#d4380d;background:#fff2e8;border-color:#ffbb96}.ant-tag-volcano-inverse{color:#fff;background:#fa541c;border-color:#fa541c}.ant-tag-orange{color:#d46b08;background:#fff7e6;border-color:#ffd591}.ant-tag-orange-inverse{color:#fff;background:#fa8c16;border-color:#fa8c16}.ant-tag-yellow{color:#d4b106;background:#feffe6;border-color:#fffb8f}.ant-tag-yellow-inverse{color:#fff;background:#fadb14;border-color:#fadb14}.ant-tag-gold{color:#d48806;background:#fffbe6;border-color:#ffe58f}.ant-tag-gold-inverse{color:#fff;background:#faad14;border-color:#faad14}.ant-tag-cyan{color:#08979c;background:#e6fffb;border-color:#87e8de}.ant-tag-cyan-inverse{color:#fff;background:#13c2c2;border-color:#13c2c2}.ant-tag-lime{color:#7cb305;background:#fcffe6;border-color:#eaff8f}.ant-tag-lime-inverse{color:#fff;background:#a0d911;border-color:#a0d911}.ant-tag-green{color:#389e0d;background:#f6ffed;border-color:#b7eb8f}.ant-tag-green-inverse{color:#fff;background:#52c41a;border-color:#52c41a}.ant-tag-blue{color:#096dd9;background:#e6f7ff;border-color:#91d5ff}.ant-tag-blue-inverse{color:#fff;background:#1890ff;border-color:#1890ff}.ant-tag-geekblue{color:#1d39c4;background:#f0f5ff;border-color:#adc6ff}.ant-tag-geekblue-inverse{color:#fff;background:#2f54eb;border-color:#2f54eb}.ant-tag-purple{color:#531dab;background:#f9f0ff;border-color:#d3adf7}.ant-tag-purple-inverse{color:#fff;background:#722ed1;border-color:#722ed1}.ant-tag-success{color:#52c41a;background:#f6ffed;border-color:#b7eb8f}.ant-tag-processing{color:#1890ff;background:#e6f7ff;border-color:#91d5ff}.ant-tag-error{color:#ff4d4f;background:#fff2f0;border-color:#ffccc7}.ant-tag-warning{color:#faad14;background:#fffbe6;border-color:#ffe58f}.ant-tag>.anticon+span,.ant-tag>span+.anticon{margin-left:7px}.ant-tag.ant-tag-rtl{margin-right:0;margin-left:8px;direction:rtl;text-align:right}.ant-tag-rtl .ant-tag-close-icon{margin-right:3px;margin-left:0}.ant-tag-rtl.ant-tag>.anticon+span,.ant-tag-rtl.ant-tag>span+.anticon{margin-right:7px;margin-left:0}/*!*********************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/card/style/index.less ***! + \*********************************************************************************************************************************************************************************************************************************************************/.ant-card{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;background:#fff;border-radius:2px}.ant-card-rtl{direction:rtl}.ant-card-hoverable{cursor:pointer;transition:box-shadow .3s,border-color .3s}.ant-card-hoverable:hover{border-color:transparent;box-shadow:0 1px 2px -2px #00000029,0 3px 6px #0000001f,0 5px 12px 4px #00000017}.ant-card-bordered{border:1px solid #f0f0f0}.ant-card-head{min-height:48px;margin-bottom:-1px;padding:0 24px;color:#000000d9;font-weight:500;font-size:16px;background:transparent;border-bottom:1px solid #f0f0f0;border-radius:2px 2px 0 0}.ant-card-head:before{display:table;content:""}.ant-card-head:after{display:table;clear:both;content:""}.ant-card-head-wrapper{display:flex;align-items:center}.ant-card-head-title{display:inline-block;flex:1;padding:16px 0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ant-card-head-title>.ant-typography,.ant-card-head-title>.ant-typography-edit-content{left:0;margin-top:0;margin-bottom:0}.ant-card-head .ant-tabs-top{clear:both;margin-bottom:-17px;color:#000000d9;font-weight:400;font-size:14px}.ant-card-head .ant-tabs-top-bar{border-bottom:1px solid #f0f0f0}.ant-card-extra{float:right;margin-left:auto;padding:16px 0;color:#000000d9;font-weight:400;font-size:14px}.ant-card-rtl .ant-card-extra{margin-right:auto;margin-left:0}.ant-card-body{padding:24px}.ant-card-body:before{display:table;content:""}.ant-card-body:after{display:table;clear:both;content:""}.ant-card-contain-grid:not(.ant-card-loading) .ant-card-body{margin:-1px 0 0 -1px;padding:0}.ant-card-grid{float:left;width:33.33%;padding:24px;border:0;border-radius:0;box-shadow:1px 0 #f0f0f0,0 1px #f0f0f0,1px 1px #f0f0f0,1px 0 #f0f0f0 inset,0 1px #f0f0f0 inset;transition:all .3s}.ant-card-rtl .ant-card-grid{float:right}.ant-card-grid-hoverable:hover{position:relative;z-index:1;box-shadow:0 1px 2px -2px #00000029,0 3px 6px #0000001f,0 5px 12px 4px #00000017}.ant-card-contain-tabs>.ant-card-head .ant-card-head-title{min-height:32px;padding-bottom:0}.ant-card-contain-tabs>.ant-card-head .ant-card-extra{padding-bottom:0}.ant-card-bordered .ant-card-cover{margin-top:-1px;margin-right:-1px;margin-left:-1px}.ant-card-cover>*{display:block;width:100%}.ant-card-cover img{border-radius:2px 2px 0 0}.ant-card-actions{margin:0;padding:0;list-style:none;background:#fff;border-top:1px solid #f0f0f0}.ant-card-actions:before{display:table;content:""}.ant-card-actions:after{display:table;clear:both;content:""}.ant-card-actions>li{float:left;margin:12px 0;color:#00000073;text-align:center}.ant-card-rtl .ant-card-actions>li{float:right}.ant-card-actions>li>span{position:relative;display:block;min-width:32px;font-size:14px;line-height:1.5715;cursor:pointer}.ant-card-actions>li>span:hover{color:#1890ff;transition:color .3s}.ant-card-actions>li>span a:not(.ant-btn),.ant-card-actions>li>span>.anticon{display:inline-block;width:100%;color:#00000073;line-height:22px;transition:color .3s}.ant-card-actions>li>span a:not(.ant-btn):hover,.ant-card-actions>li>span>.anticon:hover{color:#1890ff}.ant-card-actions>li>span>.anticon{font-size:16px;line-height:22px}.ant-card-actions>li:not(:last-child){border-right:1px solid #f0f0f0}.ant-card-rtl .ant-card-actions>li:not(:last-child){border-right:none;border-left:1px solid #f0f0f0}.ant-card-type-inner .ant-card-head{padding:0 24px;background:#fafafa}.ant-card-type-inner .ant-card-head-title{padding:12px 0;font-size:14px}.ant-card-type-inner .ant-card-body{padding:16px 24px}.ant-card-type-inner .ant-card-extra{padding:13.5px 0}.ant-card-meta{margin:-4px 0}.ant-card-meta:before{display:table;content:""}.ant-card-meta:after{display:table;clear:both;content:""}.ant-card-meta-avatar{float:left;padding-right:16px}.ant-card-rtl .ant-card-meta-avatar{float:right;padding-right:0;padding-left:16px}.ant-card-meta-detail{overflow:hidden}.ant-card-meta-detail>div:not(:last-child){margin-bottom:8px}.ant-card-meta-title{overflow:hidden;color:#000000d9;font-weight:500;font-size:16px;white-space:nowrap;text-overflow:ellipsis}.ant-card-meta-description{color:#00000073}.ant-card-loading{overflow:hidden}.ant-card-loading .ant-card-body{-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-card-loading-content p{margin:0}.ant-card-loading-block{height:14px;margin:4px 0;background:linear-gradient(90deg,rgba(207,216,220,.2),rgba(207,216,220,.4),rgba(207,216,220,.2));background-size:600% 600%;border-radius:2px;animation:card-loading 1.4s ease infinite}@keyframes card-loading{0%,to{background-position:0 50%}50%{background-position:100% 50%}}.ant-card-small>.ant-card-head{min-height:36px;padding:0 12px;font-size:14px}.ant-card-small>.ant-card-head>.ant-card-head-wrapper>.ant-card-head-title{padding:8px 0}.ant-card-small>.ant-card-head>.ant-card-head-wrapper>.ant-card-extra{padding:8px 0;font-size:14px}.ant-card-small>.ant-card-body{padding:12px}/*!*********************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/tabs/style/index.less ***! + \*********************************************************************************************************************************************************************************************************************************************************/.ant-tabs-small>.ant-tabs-nav .ant-tabs-tab{padding:8px 0;font-size:14px}.ant-tabs-large>.ant-tabs-nav .ant-tabs-tab{padding:16px 0;font-size:16px}.ant-tabs-card.ant-tabs-small>.ant-tabs-nav .ant-tabs-tab{padding:6px 16px}.ant-tabs-card.ant-tabs-large>.ant-tabs-nav .ant-tabs-tab{padding:7px 16px 6px}.ant-tabs-rtl{direction:rtl}.ant-tabs-rtl .ant-tabs-nav .ant-tabs-tab{margin:0 0 0 32px}.ant-tabs-rtl .ant-tabs-nav .ant-tabs-tab:last-of-type{margin-left:0}.ant-tabs-rtl .ant-tabs-nav .ant-tabs-tab .anticon{margin-right:0;margin-left:12px}.ant-tabs-rtl .ant-tabs-nav .ant-tabs-tab .ant-tabs-tab-remove{margin-right:8px;margin-left:-4px}.ant-tabs-rtl .ant-tabs-nav .ant-tabs-tab .ant-tabs-tab-remove .anticon{margin:0}.ant-tabs-rtl.ant-tabs-left>.ant-tabs-nav{order:1}.ant-tabs-rtl.ant-tabs-left>.ant-tabs-content-holder{order:0}.ant-tabs-rtl.ant-tabs-right>.ant-tabs-nav{order:0}.ant-tabs-rtl.ant-tabs-right>.ant-tabs-content-holder{order:1}.ant-tabs-rtl.ant-tabs-card.ant-tabs-top>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-rtl.ant-tabs-card.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-rtl.ant-tabs-card.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-rtl.ant-tabs-card.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab{margin-right:2px;margin-left:0}.ant-tabs-rtl.ant-tabs-card.ant-tabs-top>.ant-tabs-nav .ant-tabs-nav-add,.ant-tabs-rtl.ant-tabs-card.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-nav-add,.ant-tabs-rtl.ant-tabs-card.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-nav-add,.ant-tabs-rtl.ant-tabs-card.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-nav-add{margin-right:2px;margin-left:0}.ant-tabs-dropdown-rtl{direction:rtl}.ant-tabs-dropdown-rtl .ant-tabs-dropdown-menu-item{text-align:right}.ant-tabs-top,.ant-tabs-bottom{flex-direction:column}.ant-tabs-top>.ant-tabs-nav,.ant-tabs-bottom>.ant-tabs-nav,.ant-tabs-top>div>.ant-tabs-nav,.ant-tabs-bottom>div>.ant-tabs-nav{margin:0 0 16px}.ant-tabs-top>.ant-tabs-nav:before,.ant-tabs-bottom>.ant-tabs-nav:before,.ant-tabs-top>div>.ant-tabs-nav:before,.ant-tabs-bottom>div>.ant-tabs-nav:before{position:absolute;right:0;left:0;border-bottom:1px solid #f0f0f0;content:""}.ant-tabs-top>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-ink-bar{height:2px}.ant-tabs-top>.ant-tabs-nav .ant-tabs-ink-bar-animated,.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-ink-bar-animated,.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-ink-bar-animated,.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-ink-bar-animated{transition:width .3s,left .3s,right .3s}.ant-tabs-top>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-top>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-nav-wrap:after{top:0;bottom:0;width:30px}.ant-tabs-top>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-nav-wrap:before{left:0;box-shadow:inset 10px 0 8px -8px #00000014}.ant-tabs-top>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-nav-wrap:after{right:0;box-shadow:inset -10px 0 8px -8px #00000014}.ant-tabs-top>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-left:before,.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-left:before,.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-left:before,.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-left:before{opacity:1}.ant-tabs-top>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-right:after,.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-right:after,.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-right:after,.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-right:after{opacity:1}.ant-tabs-top>.ant-tabs-nav:before,.ant-tabs-top>div>.ant-tabs-nav:before{bottom:0}.ant-tabs-top>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-ink-bar{bottom:0}.ant-tabs-bottom>.ant-tabs-nav,.ant-tabs-bottom>div>.ant-tabs-nav{order:1;margin-top:16px;margin-bottom:0}.ant-tabs-bottom>.ant-tabs-nav:before,.ant-tabs-bottom>div>.ant-tabs-nav:before{top:0}.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-ink-bar{top:0}.ant-tabs-bottom>.ant-tabs-content-holder,.ant-tabs-bottom>div>.ant-tabs-content-holder{order:0}.ant-tabs-left>.ant-tabs-nav,.ant-tabs-right>.ant-tabs-nav,.ant-tabs-left>div>.ant-tabs-nav,.ant-tabs-right>div>.ant-tabs-nav{flex-direction:column;min-width:50px}.ant-tabs-left>.ant-tabs-nav .ant-tabs-tab,.ant-tabs-right>.ant-tabs-nav .ant-tabs-tab,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-tab,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-tab{padding:8px 24px;text-align:center}.ant-tabs-left>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-right>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab{margin:16px 0 0}.ant-tabs-left>.ant-tabs-nav .ant-tabs-nav-wrap,.ant-tabs-right>.ant-tabs-nav .ant-tabs-nav-wrap,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-nav-wrap,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-nav-wrap{flex-direction:column}.ant-tabs-left>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-right>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-left>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-right>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-nav-wrap:after{right:0;left:0;height:30px}.ant-tabs-left>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-right>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-nav-wrap:before{top:0;box-shadow:inset 0 10px 8px -8px #00000014}.ant-tabs-left>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-right>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-nav-wrap:after{bottom:0;box-shadow:inset 0 -10px 8px -8px #00000014}.ant-tabs-left>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-top:before,.ant-tabs-right>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-top:before,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-top:before,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-top:before{opacity:1}.ant-tabs-left>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-bottom:after,.ant-tabs-right>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-bottom:after,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-bottom:after,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-bottom:after{opacity:1}.ant-tabs-left>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-right>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-ink-bar{width:2px}.ant-tabs-left>.ant-tabs-nav .ant-tabs-ink-bar-animated,.ant-tabs-right>.ant-tabs-nav .ant-tabs-ink-bar-animated,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-ink-bar-animated,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-ink-bar-animated{transition:height .3s,top .3s}.ant-tabs-left>.ant-tabs-nav .ant-tabs-nav-list,.ant-tabs-right>.ant-tabs-nav .ant-tabs-nav-list,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-nav-list,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-nav-list,.ant-tabs-left>.ant-tabs-nav .ant-tabs-nav-operations,.ant-tabs-right>.ant-tabs-nav .ant-tabs-nav-operations,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-nav-operations,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-nav-operations{flex:1 0 auto;flex-direction:column}.ant-tabs-left>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-ink-bar{right:0}.ant-tabs-left>.ant-tabs-content-holder,.ant-tabs-left>div>.ant-tabs-content-holder{margin-left:-1px;border-left:1px solid #f0f0f0}.ant-tabs-left>.ant-tabs-content-holder>.ant-tabs-content>.ant-tabs-tabpane,.ant-tabs-left>div>.ant-tabs-content-holder>.ant-tabs-content>.ant-tabs-tabpane{padding-left:24px}.ant-tabs-right>.ant-tabs-nav,.ant-tabs-right>div>.ant-tabs-nav{order:1}.ant-tabs-right>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-ink-bar{left:0}.ant-tabs-right>.ant-tabs-content-holder,.ant-tabs-right>div>.ant-tabs-content-holder{order:0;margin-right:-1px;border-right:1px solid #f0f0f0}.ant-tabs-right>.ant-tabs-content-holder>.ant-tabs-content>.ant-tabs-tabpane,.ant-tabs-right>div>.ant-tabs-content-holder>.ant-tabs-content>.ant-tabs-tabpane{padding-right:24px}.ant-tabs-dropdown{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:absolute;top:-9999px;left:-9999px;z-index:1050;display:block}.ant-tabs-dropdown-hidden{display:none}.ant-tabs-dropdown-menu{max-height:200px;margin:0;padding:4px 0;overflow-x:hidden;overflow-y:auto;text-align:left;list-style-type:none;background-color:#fff;background-clip:padding-box;border-radius:2px;outline:none;box-shadow:0 3px 6px -4px #0000001f,0 6px 16px #00000014,0 9px 28px 8px #0000000d}.ant-tabs-dropdown-menu-item{display:flex;align-items:center;min-width:120px;margin:0;padding:5px 12px;overflow:hidden;color:#000000d9;font-weight:400;font-size:14px;line-height:22px;white-space:nowrap;text-overflow:ellipsis;cursor:pointer;transition:all .3s}.ant-tabs-dropdown-menu-item>span{flex:1;white-space:nowrap}.ant-tabs-dropdown-menu-item-remove{flex:none;margin-left:12px;color:#00000073;font-size:12px;background:transparent;border:0;cursor:pointer}.ant-tabs-dropdown-menu-item-remove:hover{color:#40a9ff}.ant-tabs-dropdown-menu-item:hover{background:#f5f5f5}.ant-tabs-dropdown-menu-item-disabled,.ant-tabs-dropdown-menu-item-disabled:hover{color:#00000040;background:transparent;cursor:not-allowed}.ant-tabs-card>.ant-tabs-nav .ant-tabs-tab,.ant-tabs-card>div>.ant-tabs-nav .ant-tabs-tab{margin:0;padding:8px 16px;background:#fafafa;border:1px solid #f0f0f0;transition:all .3s cubic-bezier(.645,.045,.355,1)}.ant-tabs-card>.ant-tabs-nav .ant-tabs-tab-active,.ant-tabs-card>div>.ant-tabs-nav .ant-tabs-tab-active{color:#1890ff;background:#fff}.ant-tabs-card>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-card>div>.ant-tabs-nav .ant-tabs-ink-bar{visibility:hidden}.ant-tabs-card.ant-tabs-top>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-card.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-card.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-card.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab{margin-left:2px}.ant-tabs-card.ant-tabs-top>.ant-tabs-nav .ant-tabs-tab,.ant-tabs-card.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-tab{border-radius:2px 2px 0 0}.ant-tabs-card.ant-tabs-top>.ant-tabs-nav .ant-tabs-tab-active,.ant-tabs-card.ant-tabs-top>div>.ant-tabs-nav .ant-tabs-tab-active{border-bottom-color:#fff}.ant-tabs-card.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-tab,.ant-tabs-card.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-tab{border-radius:0 0 2px 2px}.ant-tabs-card.ant-tabs-bottom>.ant-tabs-nav .ant-tabs-tab-active,.ant-tabs-card.ant-tabs-bottom>div>.ant-tabs-nav .ant-tabs-tab-active{border-top-color:#fff}.ant-tabs-card.ant-tabs-left>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-card.ant-tabs-right>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-card.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-card.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab{margin-top:2px}.ant-tabs-card.ant-tabs-left>.ant-tabs-nav .ant-tabs-tab,.ant-tabs-card.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-tab{border-radius:2px 0 0 2px}.ant-tabs-card.ant-tabs-left>.ant-tabs-nav .ant-tabs-tab-active,.ant-tabs-card.ant-tabs-left>div>.ant-tabs-nav .ant-tabs-tab-active{border-right-color:#fff}.ant-tabs-card.ant-tabs-right>.ant-tabs-nav .ant-tabs-tab,.ant-tabs-card.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-tab{border-radius:0 2px 2px 0}.ant-tabs-card.ant-tabs-right>.ant-tabs-nav .ant-tabs-tab-active,.ant-tabs-card.ant-tabs-right>div>.ant-tabs-nav .ant-tabs-tab-active{border-left-color:#fff}.ant-tabs{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";display:flex;overflow:hidden}.ant-tabs>.ant-tabs-nav,.ant-tabs>div>.ant-tabs-nav{position:relative;display:flex;flex:none;align-items:center}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-wrap,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-wrap{position:relative;display:inline-block;display:flex;flex:auto;align-self:stretch;overflow:hidden;white-space:nowrap;transform:translate(0)}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-wrap:before,.ant-tabs>.ant-tabs-nav .ant-tabs-nav-wrap:after,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-wrap:after{position:absolute;z-index:1;opacity:0;transition:opacity .3s;content:"";pointer-events:none}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-list,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-list{position:relative;display:flex;transition:transform .3s}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-operations,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-operations{display:flex;align-self:stretch}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-operations-hidden,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-operations-hidden{position:absolute;visibility:hidden;pointer-events:none}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-more,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-more{position:relative;padding:8px 16px;background:transparent;border:0}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-more:after,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-more:after{position:absolute;right:0;bottom:0;left:0;height:5px;transform:translateY(100%);content:""}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-add,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-add{min-width:40px;margin-left:2px;padding:0 8px;background:#fafafa;border:1px solid #f0f0f0;border-radius:2px 2px 0 0;outline:none;cursor:pointer;transition:all .3s cubic-bezier(.645,.045,.355,1)}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-add:hover,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-add:hover{color:#40a9ff}.ant-tabs>.ant-tabs-nav .ant-tabs-nav-add:active,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-add:active,.ant-tabs>.ant-tabs-nav .ant-tabs-nav-add:focus,.ant-tabs>div>.ant-tabs-nav .ant-tabs-nav-add:focus{color:#096dd9}.ant-tabs-extra-content{flex:none}.ant-tabs-centered>.ant-tabs-nav .ant-tabs-nav-wrap:not([class*=ant-tabs-nav-wrap-ping]),.ant-tabs-centered>div>.ant-tabs-nav .ant-tabs-nav-wrap:not([class*=ant-tabs-nav-wrap-ping]){justify-content:center}.ant-tabs-ink-bar{position:absolute;background:#1890ff;pointer-events:none}.ant-tabs-tab{position:relative;display:inline-flex;align-items:center;padding:12px 0;font-size:14px;background:transparent;border:0;outline:none;cursor:pointer}.ant-tabs-tab-btn:focus,.ant-tabs-tab-remove:focus,.ant-tabs-tab-btn:active,.ant-tabs-tab-remove:active{color:#096dd9}.ant-tabs-tab-btn{outline:none;transition:all .3s}.ant-tabs-tab-remove{flex:none;margin-right:-4px;margin-left:8px;color:#00000073;font-size:12px;background:transparent;border:none;outline:none;cursor:pointer;transition:all .3s}.ant-tabs-tab-remove:hover{color:#000000d9}.ant-tabs-tab:hover{color:#40a9ff}.ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn{color:#1890ff;text-shadow:0 0 .25px currentcolor}.ant-tabs-tab.ant-tabs-tab-disabled{color:#00000040;cursor:not-allowed}.ant-tabs-tab.ant-tabs-tab-disabled .ant-tabs-tab-btn:focus,.ant-tabs-tab.ant-tabs-tab-disabled .ant-tabs-tab-remove:focus,.ant-tabs-tab.ant-tabs-tab-disabled .ant-tabs-tab-btn:active,.ant-tabs-tab.ant-tabs-tab-disabled .ant-tabs-tab-remove:active{color:#00000040}.ant-tabs-tab .ant-tabs-tab-remove .anticon{margin:0}.ant-tabs-tab .anticon{margin-right:12px}.ant-tabs-tab+.ant-tabs-tab{margin:0 0 0 32px}.ant-tabs-content{display:flex;width:100%}.ant-tabs-content-holder{flex:auto;min-width:0;min-height:0}.ant-tabs-content-animated{transition:margin .3s}.ant-tabs-tabpane{flex:none;width:100%;outline:none}/*!*********************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/grid/style/index.less ***! + \*********************************************************************************************************************************************************************************************************************************************************/.ant-row{display:flex;flex-flow:row wrap}.ant-row:before,.ant-row:after{display:flex}.ant-row-no-wrap{flex-wrap:nowrap}.ant-row-start{justify-content:flex-start}.ant-row-center{justify-content:center}.ant-row-end{justify-content:flex-end}.ant-row-space-between{justify-content:space-between}.ant-row-space-around{justify-content:space-around}.ant-row-top{align-items:flex-start}.ant-row-middle{align-items:center}.ant-row-bottom{align-items:flex-end}.ant-col{position:relative;max-width:100%;min-height:1px}.ant-col-24{display:block;flex:0 0 100%;max-width:100%}.ant-col-push-24{left:100%}.ant-col-pull-24{right:100%}.ant-col-offset-24{margin-left:100%}.ant-col-order-24{order:24}.ant-col-23{display:block;flex:0 0 95.83333333%;max-width:95.83333333%}.ant-col-push-23{left:95.83333333%}.ant-col-pull-23{right:95.83333333%}.ant-col-offset-23{margin-left:95.83333333%}.ant-col-order-23{order:23}.ant-col-22{display:block;flex:0 0 91.66666667%;max-width:91.66666667%}.ant-col-push-22{left:91.66666667%}.ant-col-pull-22{right:91.66666667%}.ant-col-offset-22{margin-left:91.66666667%}.ant-col-order-22{order:22}.ant-col-21{display:block;flex:0 0 87.5%;max-width:87.5%}.ant-col-push-21{left:87.5%}.ant-col-pull-21{right:87.5%}.ant-col-offset-21{margin-left:87.5%}.ant-col-order-21{order:21}.ant-col-20{display:block;flex:0 0 83.33333333%;max-width:83.33333333%}.ant-col-push-20{left:83.33333333%}.ant-col-pull-20{right:83.33333333%}.ant-col-offset-20{margin-left:83.33333333%}.ant-col-order-20{order:20}.ant-col-19{display:block;flex:0 0 79.16666667%;max-width:79.16666667%}.ant-col-push-19{left:79.16666667%}.ant-col-pull-19{right:79.16666667%}.ant-col-offset-19{margin-left:79.16666667%}.ant-col-order-19{order:19}.ant-col-18{display:block;flex:0 0 75%;max-width:75%}.ant-col-push-18{left:75%}.ant-col-pull-18{right:75%}.ant-col-offset-18{margin-left:75%}.ant-col-order-18{order:18}.ant-col-17{display:block;flex:0 0 70.83333333%;max-width:70.83333333%}.ant-col-push-17{left:70.83333333%}.ant-col-pull-17{right:70.83333333%}.ant-col-offset-17{margin-left:70.83333333%}.ant-col-order-17{order:17}.ant-col-16{display:block;flex:0 0 66.66666667%;max-width:66.66666667%}.ant-col-push-16{left:66.66666667%}.ant-col-pull-16{right:66.66666667%}.ant-col-offset-16{margin-left:66.66666667%}.ant-col-order-16{order:16}.ant-col-15{display:block;flex:0 0 62.5%;max-width:62.5%}.ant-col-push-15{left:62.5%}.ant-col-pull-15{right:62.5%}.ant-col-offset-15{margin-left:62.5%}.ant-col-order-15{order:15}.ant-col-14{display:block;flex:0 0 58.33333333%;max-width:58.33333333%}.ant-col-push-14{left:58.33333333%}.ant-col-pull-14{right:58.33333333%}.ant-col-offset-14{margin-left:58.33333333%}.ant-col-order-14{order:14}.ant-col-13{display:block;flex:0 0 54.16666667%;max-width:54.16666667%}.ant-col-push-13{left:54.16666667%}.ant-col-pull-13{right:54.16666667%}.ant-col-offset-13{margin-left:54.16666667%}.ant-col-order-13{order:13}.ant-col-12{display:block;flex:0 0 50%;max-width:50%}.ant-col-push-12{left:50%}.ant-col-pull-12{right:50%}.ant-col-offset-12{margin-left:50%}.ant-col-order-12{order:12}.ant-col-11{display:block;flex:0 0 45.83333333%;max-width:45.83333333%}.ant-col-push-11{left:45.83333333%}.ant-col-pull-11{right:45.83333333%}.ant-col-offset-11{margin-left:45.83333333%}.ant-col-order-11{order:11}.ant-col-10{display:block;flex:0 0 41.66666667%;max-width:41.66666667%}.ant-col-push-10{left:41.66666667%}.ant-col-pull-10{right:41.66666667%}.ant-col-offset-10{margin-left:41.66666667%}.ant-col-order-10{order:10}.ant-col-9{display:block;flex:0 0 37.5%;max-width:37.5%}.ant-col-push-9{left:37.5%}.ant-col-pull-9{right:37.5%}.ant-col-offset-9{margin-left:37.5%}.ant-col-order-9{order:9}.ant-col-8{display:block;flex:0 0 33.33333333%;max-width:33.33333333%}.ant-col-push-8{left:33.33333333%}.ant-col-pull-8{right:33.33333333%}.ant-col-offset-8{margin-left:33.33333333%}.ant-col-order-8{order:8}.ant-col-7{display:block;flex:0 0 29.16666667%;max-width:29.16666667%}.ant-col-push-7{left:29.16666667%}.ant-col-pull-7{right:29.16666667%}.ant-col-offset-7{margin-left:29.16666667%}.ant-col-order-7{order:7}.ant-col-6{display:block;flex:0 0 25%;max-width:25%}.ant-col-push-6{left:25%}.ant-col-pull-6{right:25%}.ant-col-offset-6{margin-left:25%}.ant-col-order-6{order:6}.ant-col-5{display:block;flex:0 0 20.83333333%;max-width:20.83333333%}.ant-col-push-5{left:20.83333333%}.ant-col-pull-5{right:20.83333333%}.ant-col-offset-5{margin-left:20.83333333%}.ant-col-order-5{order:5}.ant-col-4{display:block;flex:0 0 16.66666667%;max-width:16.66666667%}.ant-col-push-4{left:16.66666667%}.ant-col-pull-4{right:16.66666667%}.ant-col-offset-4{margin-left:16.66666667%}.ant-col-order-4{order:4}.ant-col-3{display:block;flex:0 0 12.5%;max-width:12.5%}.ant-col-push-3{left:12.5%}.ant-col-pull-3{right:12.5%}.ant-col-offset-3{margin-left:12.5%}.ant-col-order-3{order:3}.ant-col-2{display:block;flex:0 0 8.33333333%;max-width:8.33333333%}.ant-col-push-2{left:8.33333333%}.ant-col-pull-2{right:8.33333333%}.ant-col-offset-2{margin-left:8.33333333%}.ant-col-order-2{order:2}.ant-col-1{display:block;flex:0 0 4.16666667%;max-width:4.16666667%}.ant-col-push-1{left:4.16666667%}.ant-col-pull-1{right:4.16666667%}.ant-col-offset-1{margin-left:4.16666667%}.ant-col-order-1{order:1}.ant-col-0{display:none}.ant-col-offset-0{margin-left:0}.ant-col-order-0{order:0}.ant-col-offset-0.ant-col-rtl{margin-right:0}.ant-col-push-1.ant-col-rtl{right:4.16666667%;left:auto}.ant-col-pull-1.ant-col-rtl{right:auto;left:4.16666667%}.ant-col-offset-1.ant-col-rtl{margin-right:4.16666667%;margin-left:0}.ant-col-push-2.ant-col-rtl{right:8.33333333%;left:auto}.ant-col-pull-2.ant-col-rtl{right:auto;left:8.33333333%}.ant-col-offset-2.ant-col-rtl{margin-right:8.33333333%;margin-left:0}.ant-col-push-3.ant-col-rtl{right:12.5%;left:auto}.ant-col-pull-3.ant-col-rtl{right:auto;left:12.5%}.ant-col-offset-3.ant-col-rtl{margin-right:12.5%;margin-left:0}.ant-col-push-4.ant-col-rtl{right:16.66666667%;left:auto}.ant-col-pull-4.ant-col-rtl{right:auto;left:16.66666667%}.ant-col-offset-4.ant-col-rtl{margin-right:16.66666667%;margin-left:0}.ant-col-push-5.ant-col-rtl{right:20.83333333%;left:auto}.ant-col-pull-5.ant-col-rtl{right:auto;left:20.83333333%}.ant-col-offset-5.ant-col-rtl{margin-right:20.83333333%;margin-left:0}.ant-col-push-6.ant-col-rtl{right:25%;left:auto}.ant-col-pull-6.ant-col-rtl{right:auto;left:25%}.ant-col-offset-6.ant-col-rtl{margin-right:25%;margin-left:0}.ant-col-push-7.ant-col-rtl{right:29.16666667%;left:auto}.ant-col-pull-7.ant-col-rtl{right:auto;left:29.16666667%}.ant-col-offset-7.ant-col-rtl{margin-right:29.16666667%;margin-left:0}.ant-col-push-8.ant-col-rtl{right:33.33333333%;left:auto}.ant-col-pull-8.ant-col-rtl{right:auto;left:33.33333333%}.ant-col-offset-8.ant-col-rtl{margin-right:33.33333333%;margin-left:0}.ant-col-push-9.ant-col-rtl{right:37.5%;left:auto}.ant-col-pull-9.ant-col-rtl{right:auto;left:37.5%}.ant-col-offset-9.ant-col-rtl{margin-right:37.5%;margin-left:0}.ant-col-push-10.ant-col-rtl{right:41.66666667%;left:auto}.ant-col-pull-10.ant-col-rtl{right:auto;left:41.66666667%}.ant-col-offset-10.ant-col-rtl{margin-right:41.66666667%;margin-left:0}.ant-col-push-11.ant-col-rtl{right:45.83333333%;left:auto}.ant-col-pull-11.ant-col-rtl{right:auto;left:45.83333333%}.ant-col-offset-11.ant-col-rtl{margin-right:45.83333333%;margin-left:0}.ant-col-push-12.ant-col-rtl{right:50%;left:auto}.ant-col-pull-12.ant-col-rtl{right:auto;left:50%}.ant-col-offset-12.ant-col-rtl{margin-right:50%;margin-left:0}.ant-col-push-13.ant-col-rtl{right:54.16666667%;left:auto}.ant-col-pull-13.ant-col-rtl{right:auto;left:54.16666667%}.ant-col-offset-13.ant-col-rtl{margin-right:54.16666667%;margin-left:0}.ant-col-push-14.ant-col-rtl{right:58.33333333%;left:auto}.ant-col-pull-14.ant-col-rtl{right:auto;left:58.33333333%}.ant-col-offset-14.ant-col-rtl{margin-right:58.33333333%;margin-left:0}.ant-col-push-15.ant-col-rtl{right:62.5%;left:auto}.ant-col-pull-15.ant-col-rtl{right:auto;left:62.5%}.ant-col-offset-15.ant-col-rtl{margin-right:62.5%;margin-left:0}.ant-col-push-16.ant-col-rtl{right:66.66666667%;left:auto}.ant-col-pull-16.ant-col-rtl{right:auto;left:66.66666667%}.ant-col-offset-16.ant-col-rtl{margin-right:66.66666667%;margin-left:0}.ant-col-push-17.ant-col-rtl{right:70.83333333%;left:auto}.ant-col-pull-17.ant-col-rtl{right:auto;left:70.83333333%}.ant-col-offset-17.ant-col-rtl{margin-right:70.83333333%;margin-left:0}.ant-col-push-18.ant-col-rtl{right:75%;left:auto}.ant-col-pull-18.ant-col-rtl{right:auto;left:75%}.ant-col-offset-18.ant-col-rtl{margin-right:75%;margin-left:0}.ant-col-push-19.ant-col-rtl{right:79.16666667%;left:auto}.ant-col-pull-19.ant-col-rtl{right:auto;left:79.16666667%}.ant-col-offset-19.ant-col-rtl{margin-right:79.16666667%;margin-left:0}.ant-col-push-20.ant-col-rtl{right:83.33333333%;left:auto}.ant-col-pull-20.ant-col-rtl{right:auto;left:83.33333333%}.ant-col-offset-20.ant-col-rtl{margin-right:83.33333333%;margin-left:0}.ant-col-push-21.ant-col-rtl{right:87.5%;left:auto}.ant-col-pull-21.ant-col-rtl{right:auto;left:87.5%}.ant-col-offset-21.ant-col-rtl{margin-right:87.5%;margin-left:0}.ant-col-push-22.ant-col-rtl{right:91.66666667%;left:auto}.ant-col-pull-22.ant-col-rtl{right:auto;left:91.66666667%}.ant-col-offset-22.ant-col-rtl{margin-right:91.66666667%;margin-left:0}.ant-col-push-23.ant-col-rtl{right:95.83333333%;left:auto}.ant-col-pull-23.ant-col-rtl{right:auto;left:95.83333333%}.ant-col-offset-23.ant-col-rtl{margin-right:95.83333333%;margin-left:0}.ant-col-push-24.ant-col-rtl{right:100%;left:auto}.ant-col-pull-24.ant-col-rtl{right:auto;left:100%}.ant-col-offset-24.ant-col-rtl{margin-right:100%;margin-left:0}.ant-col-xs-24{display:block;flex:0 0 100%;max-width:100%}.ant-col-xs-push-24{left:100%}.ant-col-xs-pull-24{right:100%}.ant-col-xs-offset-24{margin-left:100%}.ant-col-xs-order-24{order:24}.ant-col-xs-23{display:block;flex:0 0 95.83333333%;max-width:95.83333333%}.ant-col-xs-push-23{left:95.83333333%}.ant-col-xs-pull-23{right:95.83333333%}.ant-col-xs-offset-23{margin-left:95.83333333%}.ant-col-xs-order-23{order:23}.ant-col-xs-22{display:block;flex:0 0 91.66666667%;max-width:91.66666667%}.ant-col-xs-push-22{left:91.66666667%}.ant-col-xs-pull-22{right:91.66666667%}.ant-col-xs-offset-22{margin-left:91.66666667%}.ant-col-xs-order-22{order:22}.ant-col-xs-21{display:block;flex:0 0 87.5%;max-width:87.5%}.ant-col-xs-push-21{left:87.5%}.ant-col-xs-pull-21{right:87.5%}.ant-col-xs-offset-21{margin-left:87.5%}.ant-col-xs-order-21{order:21}.ant-col-xs-20{display:block;flex:0 0 83.33333333%;max-width:83.33333333%}.ant-col-xs-push-20{left:83.33333333%}.ant-col-xs-pull-20{right:83.33333333%}.ant-col-xs-offset-20{margin-left:83.33333333%}.ant-col-xs-order-20{order:20}.ant-col-xs-19{display:block;flex:0 0 79.16666667%;max-width:79.16666667%}.ant-col-xs-push-19{left:79.16666667%}.ant-col-xs-pull-19{right:79.16666667%}.ant-col-xs-offset-19{margin-left:79.16666667%}.ant-col-xs-order-19{order:19}.ant-col-xs-18{display:block;flex:0 0 75%;max-width:75%}.ant-col-xs-push-18{left:75%}.ant-col-xs-pull-18{right:75%}.ant-col-xs-offset-18{margin-left:75%}.ant-col-xs-order-18{order:18}.ant-col-xs-17{display:block;flex:0 0 70.83333333%;max-width:70.83333333%}.ant-col-xs-push-17{left:70.83333333%}.ant-col-xs-pull-17{right:70.83333333%}.ant-col-xs-offset-17{margin-left:70.83333333%}.ant-col-xs-order-17{order:17}.ant-col-xs-16{display:block;flex:0 0 66.66666667%;max-width:66.66666667%}.ant-col-xs-push-16{left:66.66666667%}.ant-col-xs-pull-16{right:66.66666667%}.ant-col-xs-offset-16{margin-left:66.66666667%}.ant-col-xs-order-16{order:16}.ant-col-xs-15{display:block;flex:0 0 62.5%;max-width:62.5%}.ant-col-xs-push-15{left:62.5%}.ant-col-xs-pull-15{right:62.5%}.ant-col-xs-offset-15{margin-left:62.5%}.ant-col-xs-order-15{order:15}.ant-col-xs-14{display:block;flex:0 0 58.33333333%;max-width:58.33333333%}.ant-col-xs-push-14{left:58.33333333%}.ant-col-xs-pull-14{right:58.33333333%}.ant-col-xs-offset-14{margin-left:58.33333333%}.ant-col-xs-order-14{order:14}.ant-col-xs-13{display:block;flex:0 0 54.16666667%;max-width:54.16666667%}.ant-col-xs-push-13{left:54.16666667%}.ant-col-xs-pull-13{right:54.16666667%}.ant-col-xs-offset-13{margin-left:54.16666667%}.ant-col-xs-order-13{order:13}.ant-col-xs-12{display:block;flex:0 0 50%;max-width:50%}.ant-col-xs-push-12{left:50%}.ant-col-xs-pull-12{right:50%}.ant-col-xs-offset-12{margin-left:50%}.ant-col-xs-order-12{order:12}.ant-col-xs-11{display:block;flex:0 0 45.83333333%;max-width:45.83333333%}.ant-col-xs-push-11{left:45.83333333%}.ant-col-xs-pull-11{right:45.83333333%}.ant-col-xs-offset-11{margin-left:45.83333333%}.ant-col-xs-order-11{order:11}.ant-col-xs-10{display:block;flex:0 0 41.66666667%;max-width:41.66666667%}.ant-col-xs-push-10{left:41.66666667%}.ant-col-xs-pull-10{right:41.66666667%}.ant-col-xs-offset-10{margin-left:41.66666667%}.ant-col-xs-order-10{order:10}.ant-col-xs-9{display:block;flex:0 0 37.5%;max-width:37.5%}.ant-col-xs-push-9{left:37.5%}.ant-col-xs-pull-9{right:37.5%}.ant-col-xs-offset-9{margin-left:37.5%}.ant-col-xs-order-9{order:9}.ant-col-xs-8{display:block;flex:0 0 33.33333333%;max-width:33.33333333%}.ant-col-xs-push-8{left:33.33333333%}.ant-col-xs-pull-8{right:33.33333333%}.ant-col-xs-offset-8{margin-left:33.33333333%}.ant-col-xs-order-8{order:8}.ant-col-xs-7{display:block;flex:0 0 29.16666667%;max-width:29.16666667%}.ant-col-xs-push-7{left:29.16666667%}.ant-col-xs-pull-7{right:29.16666667%}.ant-col-xs-offset-7{margin-left:29.16666667%}.ant-col-xs-order-7{order:7}.ant-col-xs-6{display:block;flex:0 0 25%;max-width:25%}.ant-col-xs-push-6{left:25%}.ant-col-xs-pull-6{right:25%}.ant-col-xs-offset-6{margin-left:25%}.ant-col-xs-order-6{order:6}.ant-col-xs-5{display:block;flex:0 0 20.83333333%;max-width:20.83333333%}.ant-col-xs-push-5{left:20.83333333%}.ant-col-xs-pull-5{right:20.83333333%}.ant-col-xs-offset-5{margin-left:20.83333333%}.ant-col-xs-order-5{order:5}.ant-col-xs-4{display:block;flex:0 0 16.66666667%;max-width:16.66666667%}.ant-col-xs-push-4{left:16.66666667%}.ant-col-xs-pull-4{right:16.66666667%}.ant-col-xs-offset-4{margin-left:16.66666667%}.ant-col-xs-order-4{order:4}.ant-col-xs-3{display:block;flex:0 0 12.5%;max-width:12.5%}.ant-col-xs-push-3{left:12.5%}.ant-col-xs-pull-3{right:12.5%}.ant-col-xs-offset-3{margin-left:12.5%}.ant-col-xs-order-3{order:3}.ant-col-xs-2{display:block;flex:0 0 8.33333333%;max-width:8.33333333%}.ant-col-xs-push-2{left:8.33333333%}.ant-col-xs-pull-2{right:8.33333333%}.ant-col-xs-offset-2{margin-left:8.33333333%}.ant-col-xs-order-2{order:2}.ant-col-xs-1{display:block;flex:0 0 4.16666667%;max-width:4.16666667%}.ant-col-xs-push-1{left:4.16666667%}.ant-col-xs-pull-1{right:4.16666667%}.ant-col-xs-offset-1{margin-left:4.16666667%}.ant-col-xs-order-1{order:1}.ant-col-xs-0{display:none}.ant-col-push-0{left:auto}.ant-col-pull-0{right:auto}.ant-col-xs-push-0{left:auto}.ant-col-xs-pull-0{right:auto}.ant-col-xs-offset-0{margin-left:0}.ant-col-xs-order-0{order:0}.ant-col-push-0.ant-col-rtl{right:auto}.ant-col-pull-0.ant-col-rtl{left:auto}.ant-col-xs-push-0.ant-col-rtl{right:auto}.ant-col-xs-pull-0.ant-col-rtl{left:auto}.ant-col-xs-offset-0.ant-col-rtl{margin-right:0}.ant-col-xs-push-1.ant-col-rtl{right:4.16666667%;left:auto}.ant-col-xs-pull-1.ant-col-rtl{right:auto;left:4.16666667%}.ant-col-xs-offset-1.ant-col-rtl{margin-right:4.16666667%;margin-left:0}.ant-col-xs-push-2.ant-col-rtl{right:8.33333333%;left:auto}.ant-col-xs-pull-2.ant-col-rtl{right:auto;left:8.33333333%}.ant-col-xs-offset-2.ant-col-rtl{margin-right:8.33333333%;margin-left:0}.ant-col-xs-push-3.ant-col-rtl{right:12.5%;left:auto}.ant-col-xs-pull-3.ant-col-rtl{right:auto;left:12.5%}.ant-col-xs-offset-3.ant-col-rtl{margin-right:12.5%;margin-left:0}.ant-col-xs-push-4.ant-col-rtl{right:16.66666667%;left:auto}.ant-col-xs-pull-4.ant-col-rtl{right:auto;left:16.66666667%}.ant-col-xs-offset-4.ant-col-rtl{margin-right:16.66666667%;margin-left:0}.ant-col-xs-push-5.ant-col-rtl{right:20.83333333%;left:auto}.ant-col-xs-pull-5.ant-col-rtl{right:auto;left:20.83333333%}.ant-col-xs-offset-5.ant-col-rtl{margin-right:20.83333333%;margin-left:0}.ant-col-xs-push-6.ant-col-rtl{right:25%;left:auto}.ant-col-xs-pull-6.ant-col-rtl{right:auto;left:25%}.ant-col-xs-offset-6.ant-col-rtl{margin-right:25%;margin-left:0}.ant-col-xs-push-7.ant-col-rtl{right:29.16666667%;left:auto}.ant-col-xs-pull-7.ant-col-rtl{right:auto;left:29.16666667%}.ant-col-xs-offset-7.ant-col-rtl{margin-right:29.16666667%;margin-left:0}.ant-col-xs-push-8.ant-col-rtl{right:33.33333333%;left:auto}.ant-col-xs-pull-8.ant-col-rtl{right:auto;left:33.33333333%}.ant-col-xs-offset-8.ant-col-rtl{margin-right:33.33333333%;margin-left:0}.ant-col-xs-push-9.ant-col-rtl{right:37.5%;left:auto}.ant-col-xs-pull-9.ant-col-rtl{right:auto;left:37.5%}.ant-col-xs-offset-9.ant-col-rtl{margin-right:37.5%;margin-left:0}.ant-col-xs-push-10.ant-col-rtl{right:41.66666667%;left:auto}.ant-col-xs-pull-10.ant-col-rtl{right:auto;left:41.66666667%}.ant-col-xs-offset-10.ant-col-rtl{margin-right:41.66666667%;margin-left:0}.ant-col-xs-push-11.ant-col-rtl{right:45.83333333%;left:auto}.ant-col-xs-pull-11.ant-col-rtl{right:auto;left:45.83333333%}.ant-col-xs-offset-11.ant-col-rtl{margin-right:45.83333333%;margin-left:0}.ant-col-xs-push-12.ant-col-rtl{right:50%;left:auto}.ant-col-xs-pull-12.ant-col-rtl{right:auto;left:50%}.ant-col-xs-offset-12.ant-col-rtl{margin-right:50%;margin-left:0}.ant-col-xs-push-13.ant-col-rtl{right:54.16666667%;left:auto}.ant-col-xs-pull-13.ant-col-rtl{right:auto;left:54.16666667%}.ant-col-xs-offset-13.ant-col-rtl{margin-right:54.16666667%;margin-left:0}.ant-col-xs-push-14.ant-col-rtl{right:58.33333333%;left:auto}.ant-col-xs-pull-14.ant-col-rtl{right:auto;left:58.33333333%}.ant-col-xs-offset-14.ant-col-rtl{margin-right:58.33333333%;margin-left:0}.ant-col-xs-push-15.ant-col-rtl{right:62.5%;left:auto}.ant-col-xs-pull-15.ant-col-rtl{right:auto;left:62.5%}.ant-col-xs-offset-15.ant-col-rtl{margin-right:62.5%;margin-left:0}.ant-col-xs-push-16.ant-col-rtl{right:66.66666667%;left:auto}.ant-col-xs-pull-16.ant-col-rtl{right:auto;left:66.66666667%}.ant-col-xs-offset-16.ant-col-rtl{margin-right:66.66666667%;margin-left:0}.ant-col-xs-push-17.ant-col-rtl{right:70.83333333%;left:auto}.ant-col-xs-pull-17.ant-col-rtl{right:auto;left:70.83333333%}.ant-col-xs-offset-17.ant-col-rtl{margin-right:70.83333333%;margin-left:0}.ant-col-xs-push-18.ant-col-rtl{right:75%;left:auto}.ant-col-xs-pull-18.ant-col-rtl{right:auto;left:75%}.ant-col-xs-offset-18.ant-col-rtl{margin-right:75%;margin-left:0}.ant-col-xs-push-19.ant-col-rtl{right:79.16666667%;left:auto}.ant-col-xs-pull-19.ant-col-rtl{right:auto;left:79.16666667%}.ant-col-xs-offset-19.ant-col-rtl{margin-right:79.16666667%;margin-left:0}.ant-col-xs-push-20.ant-col-rtl{right:83.33333333%;left:auto}.ant-col-xs-pull-20.ant-col-rtl{right:auto;left:83.33333333%}.ant-col-xs-offset-20.ant-col-rtl{margin-right:83.33333333%;margin-left:0}.ant-col-xs-push-21.ant-col-rtl{right:87.5%;left:auto}.ant-col-xs-pull-21.ant-col-rtl{right:auto;left:87.5%}.ant-col-xs-offset-21.ant-col-rtl{margin-right:87.5%;margin-left:0}.ant-col-xs-push-22.ant-col-rtl{right:91.66666667%;left:auto}.ant-col-xs-pull-22.ant-col-rtl{right:auto;left:91.66666667%}.ant-col-xs-offset-22.ant-col-rtl{margin-right:91.66666667%;margin-left:0}.ant-col-xs-push-23.ant-col-rtl{right:95.83333333%;left:auto}.ant-col-xs-pull-23.ant-col-rtl{right:auto;left:95.83333333%}.ant-col-xs-offset-23.ant-col-rtl{margin-right:95.83333333%;margin-left:0}.ant-col-xs-push-24.ant-col-rtl{right:100%;left:auto}.ant-col-xs-pull-24.ant-col-rtl{right:auto;left:100%}.ant-col-xs-offset-24.ant-col-rtl{margin-right:100%;margin-left:0}@media (min-width: 576px){.ant-col-sm-24{display:block;flex:0 0 100%;max-width:100%}.ant-col-sm-push-24{left:100%}.ant-col-sm-pull-24{right:100%}.ant-col-sm-offset-24{margin-left:100%}.ant-col-sm-order-24{order:24}.ant-col-sm-23{display:block;flex:0 0 95.83333333%;max-width:95.83333333%}.ant-col-sm-push-23{left:95.83333333%}.ant-col-sm-pull-23{right:95.83333333%}.ant-col-sm-offset-23{margin-left:95.83333333%}.ant-col-sm-order-23{order:23}.ant-col-sm-22{display:block;flex:0 0 91.66666667%;max-width:91.66666667%}.ant-col-sm-push-22{left:91.66666667%}.ant-col-sm-pull-22{right:91.66666667%}.ant-col-sm-offset-22{margin-left:91.66666667%}.ant-col-sm-order-22{order:22}.ant-col-sm-21{display:block;flex:0 0 87.5%;max-width:87.5%}.ant-col-sm-push-21{left:87.5%}.ant-col-sm-pull-21{right:87.5%}.ant-col-sm-offset-21{margin-left:87.5%}.ant-col-sm-order-21{order:21}.ant-col-sm-20{display:block;flex:0 0 83.33333333%;max-width:83.33333333%}.ant-col-sm-push-20{left:83.33333333%}.ant-col-sm-pull-20{right:83.33333333%}.ant-col-sm-offset-20{margin-left:83.33333333%}.ant-col-sm-order-20{order:20}.ant-col-sm-19{display:block;flex:0 0 79.16666667%;max-width:79.16666667%}.ant-col-sm-push-19{left:79.16666667%}.ant-col-sm-pull-19{right:79.16666667%}.ant-col-sm-offset-19{margin-left:79.16666667%}.ant-col-sm-order-19{order:19}.ant-col-sm-18{display:block;flex:0 0 75%;max-width:75%}.ant-col-sm-push-18{left:75%}.ant-col-sm-pull-18{right:75%}.ant-col-sm-offset-18{margin-left:75%}.ant-col-sm-order-18{order:18}.ant-col-sm-17{display:block;flex:0 0 70.83333333%;max-width:70.83333333%}.ant-col-sm-push-17{left:70.83333333%}.ant-col-sm-pull-17{right:70.83333333%}.ant-col-sm-offset-17{margin-left:70.83333333%}.ant-col-sm-order-17{order:17}.ant-col-sm-16{display:block;flex:0 0 66.66666667%;max-width:66.66666667%}.ant-col-sm-push-16{left:66.66666667%}.ant-col-sm-pull-16{right:66.66666667%}.ant-col-sm-offset-16{margin-left:66.66666667%}.ant-col-sm-order-16{order:16}.ant-col-sm-15{display:block;flex:0 0 62.5%;max-width:62.5%}.ant-col-sm-push-15{left:62.5%}.ant-col-sm-pull-15{right:62.5%}.ant-col-sm-offset-15{margin-left:62.5%}.ant-col-sm-order-15{order:15}.ant-col-sm-14{display:block;flex:0 0 58.33333333%;max-width:58.33333333%}.ant-col-sm-push-14{left:58.33333333%}.ant-col-sm-pull-14{right:58.33333333%}.ant-col-sm-offset-14{margin-left:58.33333333%}.ant-col-sm-order-14{order:14}.ant-col-sm-13{display:block;flex:0 0 54.16666667%;max-width:54.16666667%}.ant-col-sm-push-13{left:54.16666667%}.ant-col-sm-pull-13{right:54.16666667%}.ant-col-sm-offset-13{margin-left:54.16666667%}.ant-col-sm-order-13{order:13}.ant-col-sm-12{display:block;flex:0 0 50%;max-width:50%}.ant-col-sm-push-12{left:50%}.ant-col-sm-pull-12{right:50%}.ant-col-sm-offset-12{margin-left:50%}.ant-col-sm-order-12{order:12}.ant-col-sm-11{display:block;flex:0 0 45.83333333%;max-width:45.83333333%}.ant-col-sm-push-11{left:45.83333333%}.ant-col-sm-pull-11{right:45.83333333%}.ant-col-sm-offset-11{margin-left:45.83333333%}.ant-col-sm-order-11{order:11}.ant-col-sm-10{display:block;flex:0 0 41.66666667%;max-width:41.66666667%}.ant-col-sm-push-10{left:41.66666667%}.ant-col-sm-pull-10{right:41.66666667%}.ant-col-sm-offset-10{margin-left:41.66666667%}.ant-col-sm-order-10{order:10}.ant-col-sm-9{display:block;flex:0 0 37.5%;max-width:37.5%}.ant-col-sm-push-9{left:37.5%}.ant-col-sm-pull-9{right:37.5%}.ant-col-sm-offset-9{margin-left:37.5%}.ant-col-sm-order-9{order:9}.ant-col-sm-8{display:block;flex:0 0 33.33333333%;max-width:33.33333333%}.ant-col-sm-push-8{left:33.33333333%}.ant-col-sm-pull-8{right:33.33333333%}.ant-col-sm-offset-8{margin-left:33.33333333%}.ant-col-sm-order-8{order:8}.ant-col-sm-7{display:block;flex:0 0 29.16666667%;max-width:29.16666667%}.ant-col-sm-push-7{left:29.16666667%}.ant-col-sm-pull-7{right:29.16666667%}.ant-col-sm-offset-7{margin-left:29.16666667%}.ant-col-sm-order-7{order:7}.ant-col-sm-6{display:block;flex:0 0 25%;max-width:25%}.ant-col-sm-push-6{left:25%}.ant-col-sm-pull-6{right:25%}.ant-col-sm-offset-6{margin-left:25%}.ant-col-sm-order-6{order:6}.ant-col-sm-5{display:block;flex:0 0 20.83333333%;max-width:20.83333333%}.ant-col-sm-push-5{left:20.83333333%}.ant-col-sm-pull-5{right:20.83333333%}.ant-col-sm-offset-5{margin-left:20.83333333%}.ant-col-sm-order-5{order:5}.ant-col-sm-4{display:block;flex:0 0 16.66666667%;max-width:16.66666667%}.ant-col-sm-push-4{left:16.66666667%}.ant-col-sm-pull-4{right:16.66666667%}.ant-col-sm-offset-4{margin-left:16.66666667%}.ant-col-sm-order-4{order:4}.ant-col-sm-3{display:block;flex:0 0 12.5%;max-width:12.5%}.ant-col-sm-push-3{left:12.5%}.ant-col-sm-pull-3{right:12.5%}.ant-col-sm-offset-3{margin-left:12.5%}.ant-col-sm-order-3{order:3}.ant-col-sm-2{display:block;flex:0 0 8.33333333%;max-width:8.33333333%}.ant-col-sm-push-2{left:8.33333333%}.ant-col-sm-pull-2{right:8.33333333%}.ant-col-sm-offset-2{margin-left:8.33333333%}.ant-col-sm-order-2{order:2}.ant-col-sm-1{display:block;flex:0 0 4.16666667%;max-width:4.16666667%}.ant-col-sm-push-1{left:4.16666667%}.ant-col-sm-pull-1{right:4.16666667%}.ant-col-sm-offset-1{margin-left:4.16666667%}.ant-col-sm-order-1{order:1}.ant-col-sm-0{display:none}.ant-col-push-0{left:auto}.ant-col-pull-0{right:auto}.ant-col-sm-push-0{left:auto}.ant-col-sm-pull-0{right:auto}.ant-col-sm-offset-0{margin-left:0}.ant-col-sm-order-0{order:0}.ant-col-push-0.ant-col-rtl{right:auto}.ant-col-pull-0.ant-col-rtl{left:auto}.ant-col-sm-push-0.ant-col-rtl{right:auto}.ant-col-sm-pull-0.ant-col-rtl{left:auto}.ant-col-sm-offset-0.ant-col-rtl{margin-right:0}.ant-col-sm-push-1.ant-col-rtl{right:4.16666667%;left:auto}.ant-col-sm-pull-1.ant-col-rtl{right:auto;left:4.16666667%}.ant-col-sm-offset-1.ant-col-rtl{margin-right:4.16666667%;margin-left:0}.ant-col-sm-push-2.ant-col-rtl{right:8.33333333%;left:auto}.ant-col-sm-pull-2.ant-col-rtl{right:auto;left:8.33333333%}.ant-col-sm-offset-2.ant-col-rtl{margin-right:8.33333333%;margin-left:0}.ant-col-sm-push-3.ant-col-rtl{right:12.5%;left:auto}.ant-col-sm-pull-3.ant-col-rtl{right:auto;left:12.5%}.ant-col-sm-offset-3.ant-col-rtl{margin-right:12.5%;margin-left:0}.ant-col-sm-push-4.ant-col-rtl{right:16.66666667%;left:auto}.ant-col-sm-pull-4.ant-col-rtl{right:auto;left:16.66666667%}.ant-col-sm-offset-4.ant-col-rtl{margin-right:16.66666667%;margin-left:0}.ant-col-sm-push-5.ant-col-rtl{right:20.83333333%;left:auto}.ant-col-sm-pull-5.ant-col-rtl{right:auto;left:20.83333333%}.ant-col-sm-offset-5.ant-col-rtl{margin-right:20.83333333%;margin-left:0}.ant-col-sm-push-6.ant-col-rtl{right:25%;left:auto}.ant-col-sm-pull-6.ant-col-rtl{right:auto;left:25%}.ant-col-sm-offset-6.ant-col-rtl{margin-right:25%;margin-left:0}.ant-col-sm-push-7.ant-col-rtl{right:29.16666667%;left:auto}.ant-col-sm-pull-7.ant-col-rtl{right:auto;left:29.16666667%}.ant-col-sm-offset-7.ant-col-rtl{margin-right:29.16666667%;margin-left:0}.ant-col-sm-push-8.ant-col-rtl{right:33.33333333%;left:auto}.ant-col-sm-pull-8.ant-col-rtl{right:auto;left:33.33333333%}.ant-col-sm-offset-8.ant-col-rtl{margin-right:33.33333333%;margin-left:0}.ant-col-sm-push-9.ant-col-rtl{right:37.5%;left:auto}.ant-col-sm-pull-9.ant-col-rtl{right:auto;left:37.5%}.ant-col-sm-offset-9.ant-col-rtl{margin-right:37.5%;margin-left:0}.ant-col-sm-push-10.ant-col-rtl{right:41.66666667%;left:auto}.ant-col-sm-pull-10.ant-col-rtl{right:auto;left:41.66666667%}.ant-col-sm-offset-10.ant-col-rtl{margin-right:41.66666667%;margin-left:0}.ant-col-sm-push-11.ant-col-rtl{right:45.83333333%;left:auto}.ant-col-sm-pull-11.ant-col-rtl{right:auto;left:45.83333333%}.ant-col-sm-offset-11.ant-col-rtl{margin-right:45.83333333%;margin-left:0}.ant-col-sm-push-12.ant-col-rtl{right:50%;left:auto}.ant-col-sm-pull-12.ant-col-rtl{right:auto;left:50%}.ant-col-sm-offset-12.ant-col-rtl{margin-right:50%;margin-left:0}.ant-col-sm-push-13.ant-col-rtl{right:54.16666667%;left:auto}.ant-col-sm-pull-13.ant-col-rtl{right:auto;left:54.16666667%}.ant-col-sm-offset-13.ant-col-rtl{margin-right:54.16666667%;margin-left:0}.ant-col-sm-push-14.ant-col-rtl{right:58.33333333%;left:auto}.ant-col-sm-pull-14.ant-col-rtl{right:auto;left:58.33333333%}.ant-col-sm-offset-14.ant-col-rtl{margin-right:58.33333333%;margin-left:0}.ant-col-sm-push-15.ant-col-rtl{right:62.5%;left:auto}.ant-col-sm-pull-15.ant-col-rtl{right:auto;left:62.5%}.ant-col-sm-offset-15.ant-col-rtl{margin-right:62.5%;margin-left:0}.ant-col-sm-push-16.ant-col-rtl{right:66.66666667%;left:auto}.ant-col-sm-pull-16.ant-col-rtl{right:auto;left:66.66666667%}.ant-col-sm-offset-16.ant-col-rtl{margin-right:66.66666667%;margin-left:0}.ant-col-sm-push-17.ant-col-rtl{right:70.83333333%;left:auto}.ant-col-sm-pull-17.ant-col-rtl{right:auto;left:70.83333333%}.ant-col-sm-offset-17.ant-col-rtl{margin-right:70.83333333%;margin-left:0}.ant-col-sm-push-18.ant-col-rtl{right:75%;left:auto}.ant-col-sm-pull-18.ant-col-rtl{right:auto;left:75%}.ant-col-sm-offset-18.ant-col-rtl{margin-right:75%;margin-left:0}.ant-col-sm-push-19.ant-col-rtl{right:79.16666667%;left:auto}.ant-col-sm-pull-19.ant-col-rtl{right:auto;left:79.16666667%}.ant-col-sm-offset-19.ant-col-rtl{margin-right:79.16666667%;margin-left:0}.ant-col-sm-push-20.ant-col-rtl{right:83.33333333%;left:auto}.ant-col-sm-pull-20.ant-col-rtl{right:auto;left:83.33333333%}.ant-col-sm-offset-20.ant-col-rtl{margin-right:83.33333333%;margin-left:0}.ant-col-sm-push-21.ant-col-rtl{right:87.5%;left:auto}.ant-col-sm-pull-21.ant-col-rtl{right:auto;left:87.5%}.ant-col-sm-offset-21.ant-col-rtl{margin-right:87.5%;margin-left:0}.ant-col-sm-push-22.ant-col-rtl{right:91.66666667%;left:auto}.ant-col-sm-pull-22.ant-col-rtl{right:auto;left:91.66666667%}.ant-col-sm-offset-22.ant-col-rtl{margin-right:91.66666667%;margin-left:0}.ant-col-sm-push-23.ant-col-rtl{right:95.83333333%;left:auto}.ant-col-sm-pull-23.ant-col-rtl{right:auto;left:95.83333333%}.ant-col-sm-offset-23.ant-col-rtl{margin-right:95.83333333%;margin-left:0}.ant-col-sm-push-24.ant-col-rtl{right:100%;left:auto}.ant-col-sm-pull-24.ant-col-rtl{right:auto;left:100%}.ant-col-sm-offset-24.ant-col-rtl{margin-right:100%;margin-left:0}}@media (min-width: 768px){.ant-col-md-24{display:block;flex:0 0 100%;max-width:100%}.ant-col-md-push-24{left:100%}.ant-col-md-pull-24{right:100%}.ant-col-md-offset-24{margin-left:100%}.ant-col-md-order-24{order:24}.ant-col-md-23{display:block;flex:0 0 95.83333333%;max-width:95.83333333%}.ant-col-md-push-23{left:95.83333333%}.ant-col-md-pull-23{right:95.83333333%}.ant-col-md-offset-23{margin-left:95.83333333%}.ant-col-md-order-23{order:23}.ant-col-md-22{display:block;flex:0 0 91.66666667%;max-width:91.66666667%}.ant-col-md-push-22{left:91.66666667%}.ant-col-md-pull-22{right:91.66666667%}.ant-col-md-offset-22{margin-left:91.66666667%}.ant-col-md-order-22{order:22}.ant-col-md-21{display:block;flex:0 0 87.5%;max-width:87.5%}.ant-col-md-push-21{left:87.5%}.ant-col-md-pull-21{right:87.5%}.ant-col-md-offset-21{margin-left:87.5%}.ant-col-md-order-21{order:21}.ant-col-md-20{display:block;flex:0 0 83.33333333%;max-width:83.33333333%}.ant-col-md-push-20{left:83.33333333%}.ant-col-md-pull-20{right:83.33333333%}.ant-col-md-offset-20{margin-left:83.33333333%}.ant-col-md-order-20{order:20}.ant-col-md-19{display:block;flex:0 0 79.16666667%;max-width:79.16666667%}.ant-col-md-push-19{left:79.16666667%}.ant-col-md-pull-19{right:79.16666667%}.ant-col-md-offset-19{margin-left:79.16666667%}.ant-col-md-order-19{order:19}.ant-col-md-18{display:block;flex:0 0 75%;max-width:75%}.ant-col-md-push-18{left:75%}.ant-col-md-pull-18{right:75%}.ant-col-md-offset-18{margin-left:75%}.ant-col-md-order-18{order:18}.ant-col-md-17{display:block;flex:0 0 70.83333333%;max-width:70.83333333%}.ant-col-md-push-17{left:70.83333333%}.ant-col-md-pull-17{right:70.83333333%}.ant-col-md-offset-17{margin-left:70.83333333%}.ant-col-md-order-17{order:17}.ant-col-md-16{display:block;flex:0 0 66.66666667%;max-width:66.66666667%}.ant-col-md-push-16{left:66.66666667%}.ant-col-md-pull-16{right:66.66666667%}.ant-col-md-offset-16{margin-left:66.66666667%}.ant-col-md-order-16{order:16}.ant-col-md-15{display:block;flex:0 0 62.5%;max-width:62.5%}.ant-col-md-push-15{left:62.5%}.ant-col-md-pull-15{right:62.5%}.ant-col-md-offset-15{margin-left:62.5%}.ant-col-md-order-15{order:15}.ant-col-md-14{display:block;flex:0 0 58.33333333%;max-width:58.33333333%}.ant-col-md-push-14{left:58.33333333%}.ant-col-md-pull-14{right:58.33333333%}.ant-col-md-offset-14{margin-left:58.33333333%}.ant-col-md-order-14{order:14}.ant-col-md-13{display:block;flex:0 0 54.16666667%;max-width:54.16666667%}.ant-col-md-push-13{left:54.16666667%}.ant-col-md-pull-13{right:54.16666667%}.ant-col-md-offset-13{margin-left:54.16666667%}.ant-col-md-order-13{order:13}.ant-col-md-12{display:block;flex:0 0 50%;max-width:50%}.ant-col-md-push-12{left:50%}.ant-col-md-pull-12{right:50%}.ant-col-md-offset-12{margin-left:50%}.ant-col-md-order-12{order:12}.ant-col-md-11{display:block;flex:0 0 45.83333333%;max-width:45.83333333%}.ant-col-md-push-11{left:45.83333333%}.ant-col-md-pull-11{right:45.83333333%}.ant-col-md-offset-11{margin-left:45.83333333%}.ant-col-md-order-11{order:11}.ant-col-md-10{display:block;flex:0 0 41.66666667%;max-width:41.66666667%}.ant-col-md-push-10{left:41.66666667%}.ant-col-md-pull-10{right:41.66666667%}.ant-col-md-offset-10{margin-left:41.66666667%}.ant-col-md-order-10{order:10}.ant-col-md-9{display:block;flex:0 0 37.5%;max-width:37.5%}.ant-col-md-push-9{left:37.5%}.ant-col-md-pull-9{right:37.5%}.ant-col-md-offset-9{margin-left:37.5%}.ant-col-md-order-9{order:9}.ant-col-md-8{display:block;flex:0 0 33.33333333%;max-width:33.33333333%}.ant-col-md-push-8{left:33.33333333%}.ant-col-md-pull-8{right:33.33333333%}.ant-col-md-offset-8{margin-left:33.33333333%}.ant-col-md-order-8{order:8}.ant-col-md-7{display:block;flex:0 0 29.16666667%;max-width:29.16666667%}.ant-col-md-push-7{left:29.16666667%}.ant-col-md-pull-7{right:29.16666667%}.ant-col-md-offset-7{margin-left:29.16666667%}.ant-col-md-order-7{order:7}.ant-col-md-6{display:block;flex:0 0 25%;max-width:25%}.ant-col-md-push-6{left:25%}.ant-col-md-pull-6{right:25%}.ant-col-md-offset-6{margin-left:25%}.ant-col-md-order-6{order:6}.ant-col-md-5{display:block;flex:0 0 20.83333333%;max-width:20.83333333%}.ant-col-md-push-5{left:20.83333333%}.ant-col-md-pull-5{right:20.83333333%}.ant-col-md-offset-5{margin-left:20.83333333%}.ant-col-md-order-5{order:5}.ant-col-md-4{display:block;flex:0 0 16.66666667%;max-width:16.66666667%}.ant-col-md-push-4{left:16.66666667%}.ant-col-md-pull-4{right:16.66666667%}.ant-col-md-offset-4{margin-left:16.66666667%}.ant-col-md-order-4{order:4}.ant-col-md-3{display:block;flex:0 0 12.5%;max-width:12.5%}.ant-col-md-push-3{left:12.5%}.ant-col-md-pull-3{right:12.5%}.ant-col-md-offset-3{margin-left:12.5%}.ant-col-md-order-3{order:3}.ant-col-md-2{display:block;flex:0 0 8.33333333%;max-width:8.33333333%}.ant-col-md-push-2{left:8.33333333%}.ant-col-md-pull-2{right:8.33333333%}.ant-col-md-offset-2{margin-left:8.33333333%}.ant-col-md-order-2{order:2}.ant-col-md-1{display:block;flex:0 0 4.16666667%;max-width:4.16666667%}.ant-col-md-push-1{left:4.16666667%}.ant-col-md-pull-1{right:4.16666667%}.ant-col-md-offset-1{margin-left:4.16666667%}.ant-col-md-order-1{order:1}.ant-col-md-0{display:none}.ant-col-push-0{left:auto}.ant-col-pull-0{right:auto}.ant-col-md-push-0{left:auto}.ant-col-md-pull-0{right:auto}.ant-col-md-offset-0{margin-left:0}.ant-col-md-order-0{order:0}.ant-col-push-0.ant-col-rtl{right:auto}.ant-col-pull-0.ant-col-rtl{left:auto}.ant-col-md-push-0.ant-col-rtl{right:auto}.ant-col-md-pull-0.ant-col-rtl{left:auto}.ant-col-md-offset-0.ant-col-rtl{margin-right:0}.ant-col-md-push-1.ant-col-rtl{right:4.16666667%;left:auto}.ant-col-md-pull-1.ant-col-rtl{right:auto;left:4.16666667%}.ant-col-md-offset-1.ant-col-rtl{margin-right:4.16666667%;margin-left:0}.ant-col-md-push-2.ant-col-rtl{right:8.33333333%;left:auto}.ant-col-md-pull-2.ant-col-rtl{right:auto;left:8.33333333%}.ant-col-md-offset-2.ant-col-rtl{margin-right:8.33333333%;margin-left:0}.ant-col-md-push-3.ant-col-rtl{right:12.5%;left:auto}.ant-col-md-pull-3.ant-col-rtl{right:auto;left:12.5%}.ant-col-md-offset-3.ant-col-rtl{margin-right:12.5%;margin-left:0}.ant-col-md-push-4.ant-col-rtl{right:16.66666667%;left:auto}.ant-col-md-pull-4.ant-col-rtl{right:auto;left:16.66666667%}.ant-col-md-offset-4.ant-col-rtl{margin-right:16.66666667%;margin-left:0}.ant-col-md-push-5.ant-col-rtl{right:20.83333333%;left:auto}.ant-col-md-pull-5.ant-col-rtl{right:auto;left:20.83333333%}.ant-col-md-offset-5.ant-col-rtl{margin-right:20.83333333%;margin-left:0}.ant-col-md-push-6.ant-col-rtl{right:25%;left:auto}.ant-col-md-pull-6.ant-col-rtl{right:auto;left:25%}.ant-col-md-offset-6.ant-col-rtl{margin-right:25%;margin-left:0}.ant-col-md-push-7.ant-col-rtl{right:29.16666667%;left:auto}.ant-col-md-pull-7.ant-col-rtl{right:auto;left:29.16666667%}.ant-col-md-offset-7.ant-col-rtl{margin-right:29.16666667%;margin-left:0}.ant-col-md-push-8.ant-col-rtl{right:33.33333333%;left:auto}.ant-col-md-pull-8.ant-col-rtl{right:auto;left:33.33333333%}.ant-col-md-offset-8.ant-col-rtl{margin-right:33.33333333%;margin-left:0}.ant-col-md-push-9.ant-col-rtl{right:37.5%;left:auto}.ant-col-md-pull-9.ant-col-rtl{right:auto;left:37.5%}.ant-col-md-offset-9.ant-col-rtl{margin-right:37.5%;margin-left:0}.ant-col-md-push-10.ant-col-rtl{right:41.66666667%;left:auto}.ant-col-md-pull-10.ant-col-rtl{right:auto;left:41.66666667%}.ant-col-md-offset-10.ant-col-rtl{margin-right:41.66666667%;margin-left:0}.ant-col-md-push-11.ant-col-rtl{right:45.83333333%;left:auto}.ant-col-md-pull-11.ant-col-rtl{right:auto;left:45.83333333%}.ant-col-md-offset-11.ant-col-rtl{margin-right:45.83333333%;margin-left:0}.ant-col-md-push-12.ant-col-rtl{right:50%;left:auto}.ant-col-md-pull-12.ant-col-rtl{right:auto;left:50%}.ant-col-md-offset-12.ant-col-rtl{margin-right:50%;margin-left:0}.ant-col-md-push-13.ant-col-rtl{right:54.16666667%;left:auto}.ant-col-md-pull-13.ant-col-rtl{right:auto;left:54.16666667%}.ant-col-md-offset-13.ant-col-rtl{margin-right:54.16666667%;margin-left:0}.ant-col-md-push-14.ant-col-rtl{right:58.33333333%;left:auto}.ant-col-md-pull-14.ant-col-rtl{right:auto;left:58.33333333%}.ant-col-md-offset-14.ant-col-rtl{margin-right:58.33333333%;margin-left:0}.ant-col-md-push-15.ant-col-rtl{right:62.5%;left:auto}.ant-col-md-pull-15.ant-col-rtl{right:auto;left:62.5%}.ant-col-md-offset-15.ant-col-rtl{margin-right:62.5%;margin-left:0}.ant-col-md-push-16.ant-col-rtl{right:66.66666667%;left:auto}.ant-col-md-pull-16.ant-col-rtl{right:auto;left:66.66666667%}.ant-col-md-offset-16.ant-col-rtl{margin-right:66.66666667%;margin-left:0}.ant-col-md-push-17.ant-col-rtl{right:70.83333333%;left:auto}.ant-col-md-pull-17.ant-col-rtl{right:auto;left:70.83333333%}.ant-col-md-offset-17.ant-col-rtl{margin-right:70.83333333%;margin-left:0}.ant-col-md-push-18.ant-col-rtl{right:75%;left:auto}.ant-col-md-pull-18.ant-col-rtl{right:auto;left:75%}.ant-col-md-offset-18.ant-col-rtl{margin-right:75%;margin-left:0}.ant-col-md-push-19.ant-col-rtl{right:79.16666667%;left:auto}.ant-col-md-pull-19.ant-col-rtl{right:auto;left:79.16666667%}.ant-col-md-offset-19.ant-col-rtl{margin-right:79.16666667%;margin-left:0}.ant-col-md-push-20.ant-col-rtl{right:83.33333333%;left:auto}.ant-col-md-pull-20.ant-col-rtl{right:auto;left:83.33333333%}.ant-col-md-offset-20.ant-col-rtl{margin-right:83.33333333%;margin-left:0}.ant-col-md-push-21.ant-col-rtl{right:87.5%;left:auto}.ant-col-md-pull-21.ant-col-rtl{right:auto;left:87.5%}.ant-col-md-offset-21.ant-col-rtl{margin-right:87.5%;margin-left:0}.ant-col-md-push-22.ant-col-rtl{right:91.66666667%;left:auto}.ant-col-md-pull-22.ant-col-rtl{right:auto;left:91.66666667%}.ant-col-md-offset-22.ant-col-rtl{margin-right:91.66666667%;margin-left:0}.ant-col-md-push-23.ant-col-rtl{right:95.83333333%;left:auto}.ant-col-md-pull-23.ant-col-rtl{right:auto;left:95.83333333%}.ant-col-md-offset-23.ant-col-rtl{margin-right:95.83333333%;margin-left:0}.ant-col-md-push-24.ant-col-rtl{right:100%;left:auto}.ant-col-md-pull-24.ant-col-rtl{right:auto;left:100%}.ant-col-md-offset-24.ant-col-rtl{margin-right:100%;margin-left:0}}@media (min-width: 992px){.ant-col-lg-24{display:block;flex:0 0 100%;max-width:100%}.ant-col-lg-push-24{left:100%}.ant-col-lg-pull-24{right:100%}.ant-col-lg-offset-24{margin-left:100%}.ant-col-lg-order-24{order:24}.ant-col-lg-23{display:block;flex:0 0 95.83333333%;max-width:95.83333333%}.ant-col-lg-push-23{left:95.83333333%}.ant-col-lg-pull-23{right:95.83333333%}.ant-col-lg-offset-23{margin-left:95.83333333%}.ant-col-lg-order-23{order:23}.ant-col-lg-22{display:block;flex:0 0 91.66666667%;max-width:91.66666667%}.ant-col-lg-push-22{left:91.66666667%}.ant-col-lg-pull-22{right:91.66666667%}.ant-col-lg-offset-22{margin-left:91.66666667%}.ant-col-lg-order-22{order:22}.ant-col-lg-21{display:block;flex:0 0 87.5%;max-width:87.5%}.ant-col-lg-push-21{left:87.5%}.ant-col-lg-pull-21{right:87.5%}.ant-col-lg-offset-21{margin-left:87.5%}.ant-col-lg-order-21{order:21}.ant-col-lg-20{display:block;flex:0 0 83.33333333%;max-width:83.33333333%}.ant-col-lg-push-20{left:83.33333333%}.ant-col-lg-pull-20{right:83.33333333%}.ant-col-lg-offset-20{margin-left:83.33333333%}.ant-col-lg-order-20{order:20}.ant-col-lg-19{display:block;flex:0 0 79.16666667%;max-width:79.16666667%}.ant-col-lg-push-19{left:79.16666667%}.ant-col-lg-pull-19{right:79.16666667%}.ant-col-lg-offset-19{margin-left:79.16666667%}.ant-col-lg-order-19{order:19}.ant-col-lg-18{display:block;flex:0 0 75%;max-width:75%}.ant-col-lg-push-18{left:75%}.ant-col-lg-pull-18{right:75%}.ant-col-lg-offset-18{margin-left:75%}.ant-col-lg-order-18{order:18}.ant-col-lg-17{display:block;flex:0 0 70.83333333%;max-width:70.83333333%}.ant-col-lg-push-17{left:70.83333333%}.ant-col-lg-pull-17{right:70.83333333%}.ant-col-lg-offset-17{margin-left:70.83333333%}.ant-col-lg-order-17{order:17}.ant-col-lg-16{display:block;flex:0 0 66.66666667%;max-width:66.66666667%}.ant-col-lg-push-16{left:66.66666667%}.ant-col-lg-pull-16{right:66.66666667%}.ant-col-lg-offset-16{margin-left:66.66666667%}.ant-col-lg-order-16{order:16}.ant-col-lg-15{display:block;flex:0 0 62.5%;max-width:62.5%}.ant-col-lg-push-15{left:62.5%}.ant-col-lg-pull-15{right:62.5%}.ant-col-lg-offset-15{margin-left:62.5%}.ant-col-lg-order-15{order:15}.ant-col-lg-14{display:block;flex:0 0 58.33333333%;max-width:58.33333333%}.ant-col-lg-push-14{left:58.33333333%}.ant-col-lg-pull-14{right:58.33333333%}.ant-col-lg-offset-14{margin-left:58.33333333%}.ant-col-lg-order-14{order:14}.ant-col-lg-13{display:block;flex:0 0 54.16666667%;max-width:54.16666667%}.ant-col-lg-push-13{left:54.16666667%}.ant-col-lg-pull-13{right:54.16666667%}.ant-col-lg-offset-13{margin-left:54.16666667%}.ant-col-lg-order-13{order:13}.ant-col-lg-12{display:block;flex:0 0 50%;max-width:50%}.ant-col-lg-push-12{left:50%}.ant-col-lg-pull-12{right:50%}.ant-col-lg-offset-12{margin-left:50%}.ant-col-lg-order-12{order:12}.ant-col-lg-11{display:block;flex:0 0 45.83333333%;max-width:45.83333333%}.ant-col-lg-push-11{left:45.83333333%}.ant-col-lg-pull-11{right:45.83333333%}.ant-col-lg-offset-11{margin-left:45.83333333%}.ant-col-lg-order-11{order:11}.ant-col-lg-10{display:block;flex:0 0 41.66666667%;max-width:41.66666667%}.ant-col-lg-push-10{left:41.66666667%}.ant-col-lg-pull-10{right:41.66666667%}.ant-col-lg-offset-10{margin-left:41.66666667%}.ant-col-lg-order-10{order:10}.ant-col-lg-9{display:block;flex:0 0 37.5%;max-width:37.5%}.ant-col-lg-push-9{left:37.5%}.ant-col-lg-pull-9{right:37.5%}.ant-col-lg-offset-9{margin-left:37.5%}.ant-col-lg-order-9{order:9}.ant-col-lg-8{display:block;flex:0 0 33.33333333%;max-width:33.33333333%}.ant-col-lg-push-8{left:33.33333333%}.ant-col-lg-pull-8{right:33.33333333%}.ant-col-lg-offset-8{margin-left:33.33333333%}.ant-col-lg-order-8{order:8}.ant-col-lg-7{display:block;flex:0 0 29.16666667%;max-width:29.16666667%}.ant-col-lg-push-7{left:29.16666667%}.ant-col-lg-pull-7{right:29.16666667%}.ant-col-lg-offset-7{margin-left:29.16666667%}.ant-col-lg-order-7{order:7}.ant-col-lg-6{display:block;flex:0 0 25%;max-width:25%}.ant-col-lg-push-6{left:25%}.ant-col-lg-pull-6{right:25%}.ant-col-lg-offset-6{margin-left:25%}.ant-col-lg-order-6{order:6}.ant-col-lg-5{display:block;flex:0 0 20.83333333%;max-width:20.83333333%}.ant-col-lg-push-5{left:20.83333333%}.ant-col-lg-pull-5{right:20.83333333%}.ant-col-lg-offset-5{margin-left:20.83333333%}.ant-col-lg-order-5{order:5}.ant-col-lg-4{display:block;flex:0 0 16.66666667%;max-width:16.66666667%}.ant-col-lg-push-4{left:16.66666667%}.ant-col-lg-pull-4{right:16.66666667%}.ant-col-lg-offset-4{margin-left:16.66666667%}.ant-col-lg-order-4{order:4}.ant-col-lg-3{display:block;flex:0 0 12.5%;max-width:12.5%}.ant-col-lg-push-3{left:12.5%}.ant-col-lg-pull-3{right:12.5%}.ant-col-lg-offset-3{margin-left:12.5%}.ant-col-lg-order-3{order:3}.ant-col-lg-2{display:block;flex:0 0 8.33333333%;max-width:8.33333333%}.ant-col-lg-push-2{left:8.33333333%}.ant-col-lg-pull-2{right:8.33333333%}.ant-col-lg-offset-2{margin-left:8.33333333%}.ant-col-lg-order-2{order:2}.ant-col-lg-1{display:block;flex:0 0 4.16666667%;max-width:4.16666667%}.ant-col-lg-push-1{left:4.16666667%}.ant-col-lg-pull-1{right:4.16666667%}.ant-col-lg-offset-1{margin-left:4.16666667%}.ant-col-lg-order-1{order:1}.ant-col-lg-0{display:none}.ant-col-push-0{left:auto}.ant-col-pull-0{right:auto}.ant-col-lg-push-0{left:auto}.ant-col-lg-pull-0{right:auto}.ant-col-lg-offset-0{margin-left:0}.ant-col-lg-order-0{order:0}.ant-col-push-0.ant-col-rtl{right:auto}.ant-col-pull-0.ant-col-rtl{left:auto}.ant-col-lg-push-0.ant-col-rtl{right:auto}.ant-col-lg-pull-0.ant-col-rtl{left:auto}.ant-col-lg-offset-0.ant-col-rtl{margin-right:0}.ant-col-lg-push-1.ant-col-rtl{right:4.16666667%;left:auto}.ant-col-lg-pull-1.ant-col-rtl{right:auto;left:4.16666667%}.ant-col-lg-offset-1.ant-col-rtl{margin-right:4.16666667%;margin-left:0}.ant-col-lg-push-2.ant-col-rtl{right:8.33333333%;left:auto}.ant-col-lg-pull-2.ant-col-rtl{right:auto;left:8.33333333%}.ant-col-lg-offset-2.ant-col-rtl{margin-right:8.33333333%;margin-left:0}.ant-col-lg-push-3.ant-col-rtl{right:12.5%;left:auto}.ant-col-lg-pull-3.ant-col-rtl{right:auto;left:12.5%}.ant-col-lg-offset-3.ant-col-rtl{margin-right:12.5%;margin-left:0}.ant-col-lg-push-4.ant-col-rtl{right:16.66666667%;left:auto}.ant-col-lg-pull-4.ant-col-rtl{right:auto;left:16.66666667%}.ant-col-lg-offset-4.ant-col-rtl{margin-right:16.66666667%;margin-left:0}.ant-col-lg-push-5.ant-col-rtl{right:20.83333333%;left:auto}.ant-col-lg-pull-5.ant-col-rtl{right:auto;left:20.83333333%}.ant-col-lg-offset-5.ant-col-rtl{margin-right:20.83333333%;margin-left:0}.ant-col-lg-push-6.ant-col-rtl{right:25%;left:auto}.ant-col-lg-pull-6.ant-col-rtl{right:auto;left:25%}.ant-col-lg-offset-6.ant-col-rtl{margin-right:25%;margin-left:0}.ant-col-lg-push-7.ant-col-rtl{right:29.16666667%;left:auto}.ant-col-lg-pull-7.ant-col-rtl{right:auto;left:29.16666667%}.ant-col-lg-offset-7.ant-col-rtl{margin-right:29.16666667%;margin-left:0}.ant-col-lg-push-8.ant-col-rtl{right:33.33333333%;left:auto}.ant-col-lg-pull-8.ant-col-rtl{right:auto;left:33.33333333%}.ant-col-lg-offset-8.ant-col-rtl{margin-right:33.33333333%;margin-left:0}.ant-col-lg-push-9.ant-col-rtl{right:37.5%;left:auto}.ant-col-lg-pull-9.ant-col-rtl{right:auto;left:37.5%}.ant-col-lg-offset-9.ant-col-rtl{margin-right:37.5%;margin-left:0}.ant-col-lg-push-10.ant-col-rtl{right:41.66666667%;left:auto}.ant-col-lg-pull-10.ant-col-rtl{right:auto;left:41.66666667%}.ant-col-lg-offset-10.ant-col-rtl{margin-right:41.66666667%;margin-left:0}.ant-col-lg-push-11.ant-col-rtl{right:45.83333333%;left:auto}.ant-col-lg-pull-11.ant-col-rtl{right:auto;left:45.83333333%}.ant-col-lg-offset-11.ant-col-rtl{margin-right:45.83333333%;margin-left:0}.ant-col-lg-push-12.ant-col-rtl{right:50%;left:auto}.ant-col-lg-pull-12.ant-col-rtl{right:auto;left:50%}.ant-col-lg-offset-12.ant-col-rtl{margin-right:50%;margin-left:0}.ant-col-lg-push-13.ant-col-rtl{right:54.16666667%;left:auto}.ant-col-lg-pull-13.ant-col-rtl{right:auto;left:54.16666667%}.ant-col-lg-offset-13.ant-col-rtl{margin-right:54.16666667%;margin-left:0}.ant-col-lg-push-14.ant-col-rtl{right:58.33333333%;left:auto}.ant-col-lg-pull-14.ant-col-rtl{right:auto;left:58.33333333%}.ant-col-lg-offset-14.ant-col-rtl{margin-right:58.33333333%;margin-left:0}.ant-col-lg-push-15.ant-col-rtl{right:62.5%;left:auto}.ant-col-lg-pull-15.ant-col-rtl{right:auto;left:62.5%}.ant-col-lg-offset-15.ant-col-rtl{margin-right:62.5%;margin-left:0}.ant-col-lg-push-16.ant-col-rtl{right:66.66666667%;left:auto}.ant-col-lg-pull-16.ant-col-rtl{right:auto;left:66.66666667%}.ant-col-lg-offset-16.ant-col-rtl{margin-right:66.66666667%;margin-left:0}.ant-col-lg-push-17.ant-col-rtl{right:70.83333333%;left:auto}.ant-col-lg-pull-17.ant-col-rtl{right:auto;left:70.83333333%}.ant-col-lg-offset-17.ant-col-rtl{margin-right:70.83333333%;margin-left:0}.ant-col-lg-push-18.ant-col-rtl{right:75%;left:auto}.ant-col-lg-pull-18.ant-col-rtl{right:auto;left:75%}.ant-col-lg-offset-18.ant-col-rtl{margin-right:75%;margin-left:0}.ant-col-lg-push-19.ant-col-rtl{right:79.16666667%;left:auto}.ant-col-lg-pull-19.ant-col-rtl{right:auto;left:79.16666667%}.ant-col-lg-offset-19.ant-col-rtl{margin-right:79.16666667%;margin-left:0}.ant-col-lg-push-20.ant-col-rtl{right:83.33333333%;left:auto}.ant-col-lg-pull-20.ant-col-rtl{right:auto;left:83.33333333%}.ant-col-lg-offset-20.ant-col-rtl{margin-right:83.33333333%;margin-left:0}.ant-col-lg-push-21.ant-col-rtl{right:87.5%;left:auto}.ant-col-lg-pull-21.ant-col-rtl{right:auto;left:87.5%}.ant-col-lg-offset-21.ant-col-rtl{margin-right:87.5%;margin-left:0}.ant-col-lg-push-22.ant-col-rtl{right:91.66666667%;left:auto}.ant-col-lg-pull-22.ant-col-rtl{right:auto;left:91.66666667%}.ant-col-lg-offset-22.ant-col-rtl{margin-right:91.66666667%;margin-left:0}.ant-col-lg-push-23.ant-col-rtl{right:95.83333333%;left:auto}.ant-col-lg-pull-23.ant-col-rtl{right:auto;left:95.83333333%}.ant-col-lg-offset-23.ant-col-rtl{margin-right:95.83333333%;margin-left:0}.ant-col-lg-push-24.ant-col-rtl{right:100%;left:auto}.ant-col-lg-pull-24.ant-col-rtl{right:auto;left:100%}.ant-col-lg-offset-24.ant-col-rtl{margin-right:100%;margin-left:0}}@media (min-width: 1200px){.ant-col-xl-24{display:block;flex:0 0 100%;max-width:100%}.ant-col-xl-push-24{left:100%}.ant-col-xl-pull-24{right:100%}.ant-col-xl-offset-24{margin-left:100%}.ant-col-xl-order-24{order:24}.ant-col-xl-23{display:block;flex:0 0 95.83333333%;max-width:95.83333333%}.ant-col-xl-push-23{left:95.83333333%}.ant-col-xl-pull-23{right:95.83333333%}.ant-col-xl-offset-23{margin-left:95.83333333%}.ant-col-xl-order-23{order:23}.ant-col-xl-22{display:block;flex:0 0 91.66666667%;max-width:91.66666667%}.ant-col-xl-push-22{left:91.66666667%}.ant-col-xl-pull-22{right:91.66666667%}.ant-col-xl-offset-22{margin-left:91.66666667%}.ant-col-xl-order-22{order:22}.ant-col-xl-21{display:block;flex:0 0 87.5%;max-width:87.5%}.ant-col-xl-push-21{left:87.5%}.ant-col-xl-pull-21{right:87.5%}.ant-col-xl-offset-21{margin-left:87.5%}.ant-col-xl-order-21{order:21}.ant-col-xl-20{display:block;flex:0 0 83.33333333%;max-width:83.33333333%}.ant-col-xl-push-20{left:83.33333333%}.ant-col-xl-pull-20{right:83.33333333%}.ant-col-xl-offset-20{margin-left:83.33333333%}.ant-col-xl-order-20{order:20}.ant-col-xl-19{display:block;flex:0 0 79.16666667%;max-width:79.16666667%}.ant-col-xl-push-19{left:79.16666667%}.ant-col-xl-pull-19{right:79.16666667%}.ant-col-xl-offset-19{margin-left:79.16666667%}.ant-col-xl-order-19{order:19}.ant-col-xl-18{display:block;flex:0 0 75%;max-width:75%}.ant-col-xl-push-18{left:75%}.ant-col-xl-pull-18{right:75%}.ant-col-xl-offset-18{margin-left:75%}.ant-col-xl-order-18{order:18}.ant-col-xl-17{display:block;flex:0 0 70.83333333%;max-width:70.83333333%}.ant-col-xl-push-17{left:70.83333333%}.ant-col-xl-pull-17{right:70.83333333%}.ant-col-xl-offset-17{margin-left:70.83333333%}.ant-col-xl-order-17{order:17}.ant-col-xl-16{display:block;flex:0 0 66.66666667%;max-width:66.66666667%}.ant-col-xl-push-16{left:66.66666667%}.ant-col-xl-pull-16{right:66.66666667%}.ant-col-xl-offset-16{margin-left:66.66666667%}.ant-col-xl-order-16{order:16}.ant-col-xl-15{display:block;flex:0 0 62.5%;max-width:62.5%}.ant-col-xl-push-15{left:62.5%}.ant-col-xl-pull-15{right:62.5%}.ant-col-xl-offset-15{margin-left:62.5%}.ant-col-xl-order-15{order:15}.ant-col-xl-14{display:block;flex:0 0 58.33333333%;max-width:58.33333333%}.ant-col-xl-push-14{left:58.33333333%}.ant-col-xl-pull-14{right:58.33333333%}.ant-col-xl-offset-14{margin-left:58.33333333%}.ant-col-xl-order-14{order:14}.ant-col-xl-13{display:block;flex:0 0 54.16666667%;max-width:54.16666667%}.ant-col-xl-push-13{left:54.16666667%}.ant-col-xl-pull-13{right:54.16666667%}.ant-col-xl-offset-13{margin-left:54.16666667%}.ant-col-xl-order-13{order:13}.ant-col-xl-12{display:block;flex:0 0 50%;max-width:50%}.ant-col-xl-push-12{left:50%}.ant-col-xl-pull-12{right:50%}.ant-col-xl-offset-12{margin-left:50%}.ant-col-xl-order-12{order:12}.ant-col-xl-11{display:block;flex:0 0 45.83333333%;max-width:45.83333333%}.ant-col-xl-push-11{left:45.83333333%}.ant-col-xl-pull-11{right:45.83333333%}.ant-col-xl-offset-11{margin-left:45.83333333%}.ant-col-xl-order-11{order:11}.ant-col-xl-10{display:block;flex:0 0 41.66666667%;max-width:41.66666667%}.ant-col-xl-push-10{left:41.66666667%}.ant-col-xl-pull-10{right:41.66666667%}.ant-col-xl-offset-10{margin-left:41.66666667%}.ant-col-xl-order-10{order:10}.ant-col-xl-9{display:block;flex:0 0 37.5%;max-width:37.5%}.ant-col-xl-push-9{left:37.5%}.ant-col-xl-pull-9{right:37.5%}.ant-col-xl-offset-9{margin-left:37.5%}.ant-col-xl-order-9{order:9}.ant-col-xl-8{display:block;flex:0 0 33.33333333%;max-width:33.33333333%}.ant-col-xl-push-8{left:33.33333333%}.ant-col-xl-pull-8{right:33.33333333%}.ant-col-xl-offset-8{margin-left:33.33333333%}.ant-col-xl-order-8{order:8}.ant-col-xl-7{display:block;flex:0 0 29.16666667%;max-width:29.16666667%}.ant-col-xl-push-7{left:29.16666667%}.ant-col-xl-pull-7{right:29.16666667%}.ant-col-xl-offset-7{margin-left:29.16666667%}.ant-col-xl-order-7{order:7}.ant-col-xl-6{display:block;flex:0 0 25%;max-width:25%}.ant-col-xl-push-6{left:25%}.ant-col-xl-pull-6{right:25%}.ant-col-xl-offset-6{margin-left:25%}.ant-col-xl-order-6{order:6}.ant-col-xl-5{display:block;flex:0 0 20.83333333%;max-width:20.83333333%}.ant-col-xl-push-5{left:20.83333333%}.ant-col-xl-pull-5{right:20.83333333%}.ant-col-xl-offset-5{margin-left:20.83333333%}.ant-col-xl-order-5{order:5}.ant-col-xl-4{display:block;flex:0 0 16.66666667%;max-width:16.66666667%}.ant-col-xl-push-4{left:16.66666667%}.ant-col-xl-pull-4{right:16.66666667%}.ant-col-xl-offset-4{margin-left:16.66666667%}.ant-col-xl-order-4{order:4}.ant-col-xl-3{display:block;flex:0 0 12.5%;max-width:12.5%}.ant-col-xl-push-3{left:12.5%}.ant-col-xl-pull-3{right:12.5%}.ant-col-xl-offset-3{margin-left:12.5%}.ant-col-xl-order-3{order:3}.ant-col-xl-2{display:block;flex:0 0 8.33333333%;max-width:8.33333333%}.ant-col-xl-push-2{left:8.33333333%}.ant-col-xl-pull-2{right:8.33333333%}.ant-col-xl-offset-2{margin-left:8.33333333%}.ant-col-xl-order-2{order:2}.ant-col-xl-1{display:block;flex:0 0 4.16666667%;max-width:4.16666667%}.ant-col-xl-push-1{left:4.16666667%}.ant-col-xl-pull-1{right:4.16666667%}.ant-col-xl-offset-1{margin-left:4.16666667%}.ant-col-xl-order-1{order:1}.ant-col-xl-0{display:none}.ant-col-push-0{left:auto}.ant-col-pull-0{right:auto}.ant-col-xl-push-0{left:auto}.ant-col-xl-pull-0{right:auto}.ant-col-xl-offset-0{margin-left:0}.ant-col-xl-order-0{order:0}.ant-col-push-0.ant-col-rtl{right:auto}.ant-col-pull-0.ant-col-rtl{left:auto}.ant-col-xl-push-0.ant-col-rtl{right:auto}.ant-col-xl-pull-0.ant-col-rtl{left:auto}.ant-col-xl-offset-0.ant-col-rtl{margin-right:0}.ant-col-xl-push-1.ant-col-rtl{right:4.16666667%;left:auto}.ant-col-xl-pull-1.ant-col-rtl{right:auto;left:4.16666667%}.ant-col-xl-offset-1.ant-col-rtl{margin-right:4.16666667%;margin-left:0}.ant-col-xl-push-2.ant-col-rtl{right:8.33333333%;left:auto}.ant-col-xl-pull-2.ant-col-rtl{right:auto;left:8.33333333%}.ant-col-xl-offset-2.ant-col-rtl{margin-right:8.33333333%;margin-left:0}.ant-col-xl-push-3.ant-col-rtl{right:12.5%;left:auto}.ant-col-xl-pull-3.ant-col-rtl{right:auto;left:12.5%}.ant-col-xl-offset-3.ant-col-rtl{margin-right:12.5%;margin-left:0}.ant-col-xl-push-4.ant-col-rtl{right:16.66666667%;left:auto}.ant-col-xl-pull-4.ant-col-rtl{right:auto;left:16.66666667%}.ant-col-xl-offset-4.ant-col-rtl{margin-right:16.66666667%;margin-left:0}.ant-col-xl-push-5.ant-col-rtl{right:20.83333333%;left:auto}.ant-col-xl-pull-5.ant-col-rtl{right:auto;left:20.83333333%}.ant-col-xl-offset-5.ant-col-rtl{margin-right:20.83333333%;margin-left:0}.ant-col-xl-push-6.ant-col-rtl{right:25%;left:auto}.ant-col-xl-pull-6.ant-col-rtl{right:auto;left:25%}.ant-col-xl-offset-6.ant-col-rtl{margin-right:25%;margin-left:0}.ant-col-xl-push-7.ant-col-rtl{right:29.16666667%;left:auto}.ant-col-xl-pull-7.ant-col-rtl{right:auto;left:29.16666667%}.ant-col-xl-offset-7.ant-col-rtl{margin-right:29.16666667%;margin-left:0}.ant-col-xl-push-8.ant-col-rtl{right:33.33333333%;left:auto}.ant-col-xl-pull-8.ant-col-rtl{right:auto;left:33.33333333%}.ant-col-xl-offset-8.ant-col-rtl{margin-right:33.33333333%;margin-left:0}.ant-col-xl-push-9.ant-col-rtl{right:37.5%;left:auto}.ant-col-xl-pull-9.ant-col-rtl{right:auto;left:37.5%}.ant-col-xl-offset-9.ant-col-rtl{margin-right:37.5%;margin-left:0}.ant-col-xl-push-10.ant-col-rtl{right:41.66666667%;left:auto}.ant-col-xl-pull-10.ant-col-rtl{right:auto;left:41.66666667%}.ant-col-xl-offset-10.ant-col-rtl{margin-right:41.66666667%;margin-left:0}.ant-col-xl-push-11.ant-col-rtl{right:45.83333333%;left:auto}.ant-col-xl-pull-11.ant-col-rtl{right:auto;left:45.83333333%}.ant-col-xl-offset-11.ant-col-rtl{margin-right:45.83333333%;margin-left:0}.ant-col-xl-push-12.ant-col-rtl{right:50%;left:auto}.ant-col-xl-pull-12.ant-col-rtl{right:auto;left:50%}.ant-col-xl-offset-12.ant-col-rtl{margin-right:50%;margin-left:0}.ant-col-xl-push-13.ant-col-rtl{right:54.16666667%;left:auto}.ant-col-xl-pull-13.ant-col-rtl{right:auto;left:54.16666667%}.ant-col-xl-offset-13.ant-col-rtl{margin-right:54.16666667%;margin-left:0}.ant-col-xl-push-14.ant-col-rtl{right:58.33333333%;left:auto}.ant-col-xl-pull-14.ant-col-rtl{right:auto;left:58.33333333%}.ant-col-xl-offset-14.ant-col-rtl{margin-right:58.33333333%;margin-left:0}.ant-col-xl-push-15.ant-col-rtl{right:62.5%;left:auto}.ant-col-xl-pull-15.ant-col-rtl{right:auto;left:62.5%}.ant-col-xl-offset-15.ant-col-rtl{margin-right:62.5%;margin-left:0}.ant-col-xl-push-16.ant-col-rtl{right:66.66666667%;left:auto}.ant-col-xl-pull-16.ant-col-rtl{right:auto;left:66.66666667%}.ant-col-xl-offset-16.ant-col-rtl{margin-right:66.66666667%;margin-left:0}.ant-col-xl-push-17.ant-col-rtl{right:70.83333333%;left:auto}.ant-col-xl-pull-17.ant-col-rtl{right:auto;left:70.83333333%}.ant-col-xl-offset-17.ant-col-rtl{margin-right:70.83333333%;margin-left:0}.ant-col-xl-push-18.ant-col-rtl{right:75%;left:auto}.ant-col-xl-pull-18.ant-col-rtl{right:auto;left:75%}.ant-col-xl-offset-18.ant-col-rtl{margin-right:75%;margin-left:0}.ant-col-xl-push-19.ant-col-rtl{right:79.16666667%;left:auto}.ant-col-xl-pull-19.ant-col-rtl{right:auto;left:79.16666667%}.ant-col-xl-offset-19.ant-col-rtl{margin-right:79.16666667%;margin-left:0}.ant-col-xl-push-20.ant-col-rtl{right:83.33333333%;left:auto}.ant-col-xl-pull-20.ant-col-rtl{right:auto;left:83.33333333%}.ant-col-xl-offset-20.ant-col-rtl{margin-right:83.33333333%;margin-left:0}.ant-col-xl-push-21.ant-col-rtl{right:87.5%;left:auto}.ant-col-xl-pull-21.ant-col-rtl{right:auto;left:87.5%}.ant-col-xl-offset-21.ant-col-rtl{margin-right:87.5%;margin-left:0}.ant-col-xl-push-22.ant-col-rtl{right:91.66666667%;left:auto}.ant-col-xl-pull-22.ant-col-rtl{right:auto;left:91.66666667%}.ant-col-xl-offset-22.ant-col-rtl{margin-right:91.66666667%;margin-left:0}.ant-col-xl-push-23.ant-col-rtl{right:95.83333333%;left:auto}.ant-col-xl-pull-23.ant-col-rtl{right:auto;left:95.83333333%}.ant-col-xl-offset-23.ant-col-rtl{margin-right:95.83333333%;margin-left:0}.ant-col-xl-push-24.ant-col-rtl{right:100%;left:auto}.ant-col-xl-pull-24.ant-col-rtl{right:auto;left:100%}.ant-col-xl-offset-24.ant-col-rtl{margin-right:100%;margin-left:0}}@media (min-width: 1600px){.ant-col-xxl-24{display:block;flex:0 0 100%;max-width:100%}.ant-col-xxl-push-24{left:100%}.ant-col-xxl-pull-24{right:100%}.ant-col-xxl-offset-24{margin-left:100%}.ant-col-xxl-order-24{order:24}.ant-col-xxl-23{display:block;flex:0 0 95.83333333%;max-width:95.83333333%}.ant-col-xxl-push-23{left:95.83333333%}.ant-col-xxl-pull-23{right:95.83333333%}.ant-col-xxl-offset-23{margin-left:95.83333333%}.ant-col-xxl-order-23{order:23}.ant-col-xxl-22{display:block;flex:0 0 91.66666667%;max-width:91.66666667%}.ant-col-xxl-push-22{left:91.66666667%}.ant-col-xxl-pull-22{right:91.66666667%}.ant-col-xxl-offset-22{margin-left:91.66666667%}.ant-col-xxl-order-22{order:22}.ant-col-xxl-21{display:block;flex:0 0 87.5%;max-width:87.5%}.ant-col-xxl-push-21{left:87.5%}.ant-col-xxl-pull-21{right:87.5%}.ant-col-xxl-offset-21{margin-left:87.5%}.ant-col-xxl-order-21{order:21}.ant-col-xxl-20{display:block;flex:0 0 83.33333333%;max-width:83.33333333%}.ant-col-xxl-push-20{left:83.33333333%}.ant-col-xxl-pull-20{right:83.33333333%}.ant-col-xxl-offset-20{margin-left:83.33333333%}.ant-col-xxl-order-20{order:20}.ant-col-xxl-19{display:block;flex:0 0 79.16666667%;max-width:79.16666667%}.ant-col-xxl-push-19{left:79.16666667%}.ant-col-xxl-pull-19{right:79.16666667%}.ant-col-xxl-offset-19{margin-left:79.16666667%}.ant-col-xxl-order-19{order:19}.ant-col-xxl-18{display:block;flex:0 0 75%;max-width:75%}.ant-col-xxl-push-18{left:75%}.ant-col-xxl-pull-18{right:75%}.ant-col-xxl-offset-18{margin-left:75%}.ant-col-xxl-order-18{order:18}.ant-col-xxl-17{display:block;flex:0 0 70.83333333%;max-width:70.83333333%}.ant-col-xxl-push-17{left:70.83333333%}.ant-col-xxl-pull-17{right:70.83333333%}.ant-col-xxl-offset-17{margin-left:70.83333333%}.ant-col-xxl-order-17{order:17}.ant-col-xxl-16{display:block;flex:0 0 66.66666667%;max-width:66.66666667%}.ant-col-xxl-push-16{left:66.66666667%}.ant-col-xxl-pull-16{right:66.66666667%}.ant-col-xxl-offset-16{margin-left:66.66666667%}.ant-col-xxl-order-16{order:16}.ant-col-xxl-15{display:block;flex:0 0 62.5%;max-width:62.5%}.ant-col-xxl-push-15{left:62.5%}.ant-col-xxl-pull-15{right:62.5%}.ant-col-xxl-offset-15{margin-left:62.5%}.ant-col-xxl-order-15{order:15}.ant-col-xxl-14{display:block;flex:0 0 58.33333333%;max-width:58.33333333%}.ant-col-xxl-push-14{left:58.33333333%}.ant-col-xxl-pull-14{right:58.33333333%}.ant-col-xxl-offset-14{margin-left:58.33333333%}.ant-col-xxl-order-14{order:14}.ant-col-xxl-13{display:block;flex:0 0 54.16666667%;max-width:54.16666667%}.ant-col-xxl-push-13{left:54.16666667%}.ant-col-xxl-pull-13{right:54.16666667%}.ant-col-xxl-offset-13{margin-left:54.16666667%}.ant-col-xxl-order-13{order:13}.ant-col-xxl-12{display:block;flex:0 0 50%;max-width:50%}.ant-col-xxl-push-12{left:50%}.ant-col-xxl-pull-12{right:50%}.ant-col-xxl-offset-12{margin-left:50%}.ant-col-xxl-order-12{order:12}.ant-col-xxl-11{display:block;flex:0 0 45.83333333%;max-width:45.83333333%}.ant-col-xxl-push-11{left:45.83333333%}.ant-col-xxl-pull-11{right:45.83333333%}.ant-col-xxl-offset-11{margin-left:45.83333333%}.ant-col-xxl-order-11{order:11}.ant-col-xxl-10{display:block;flex:0 0 41.66666667%;max-width:41.66666667%}.ant-col-xxl-push-10{left:41.66666667%}.ant-col-xxl-pull-10{right:41.66666667%}.ant-col-xxl-offset-10{margin-left:41.66666667%}.ant-col-xxl-order-10{order:10}.ant-col-xxl-9{display:block;flex:0 0 37.5%;max-width:37.5%}.ant-col-xxl-push-9{left:37.5%}.ant-col-xxl-pull-9{right:37.5%}.ant-col-xxl-offset-9{margin-left:37.5%}.ant-col-xxl-order-9{order:9}.ant-col-xxl-8{display:block;flex:0 0 33.33333333%;max-width:33.33333333%}.ant-col-xxl-push-8{left:33.33333333%}.ant-col-xxl-pull-8{right:33.33333333%}.ant-col-xxl-offset-8{margin-left:33.33333333%}.ant-col-xxl-order-8{order:8}.ant-col-xxl-7{display:block;flex:0 0 29.16666667%;max-width:29.16666667%}.ant-col-xxl-push-7{left:29.16666667%}.ant-col-xxl-pull-7{right:29.16666667%}.ant-col-xxl-offset-7{margin-left:29.16666667%}.ant-col-xxl-order-7{order:7}.ant-col-xxl-6{display:block;flex:0 0 25%;max-width:25%}.ant-col-xxl-push-6{left:25%}.ant-col-xxl-pull-6{right:25%}.ant-col-xxl-offset-6{margin-left:25%}.ant-col-xxl-order-6{order:6}.ant-col-xxl-5{display:block;flex:0 0 20.83333333%;max-width:20.83333333%}.ant-col-xxl-push-5{left:20.83333333%}.ant-col-xxl-pull-5{right:20.83333333%}.ant-col-xxl-offset-5{margin-left:20.83333333%}.ant-col-xxl-order-5{order:5}.ant-col-xxl-4{display:block;flex:0 0 16.66666667%;max-width:16.66666667%}.ant-col-xxl-push-4{left:16.66666667%}.ant-col-xxl-pull-4{right:16.66666667%}.ant-col-xxl-offset-4{margin-left:16.66666667%}.ant-col-xxl-order-4{order:4}.ant-col-xxl-3{display:block;flex:0 0 12.5%;max-width:12.5%}.ant-col-xxl-push-3{left:12.5%}.ant-col-xxl-pull-3{right:12.5%}.ant-col-xxl-offset-3{margin-left:12.5%}.ant-col-xxl-order-3{order:3}.ant-col-xxl-2{display:block;flex:0 0 8.33333333%;max-width:8.33333333%}.ant-col-xxl-push-2{left:8.33333333%}.ant-col-xxl-pull-2{right:8.33333333%}.ant-col-xxl-offset-2{margin-left:8.33333333%}.ant-col-xxl-order-2{order:2}.ant-col-xxl-1{display:block;flex:0 0 4.16666667%;max-width:4.16666667%}.ant-col-xxl-push-1{left:4.16666667%}.ant-col-xxl-pull-1{right:4.16666667%}.ant-col-xxl-offset-1{margin-left:4.16666667%}.ant-col-xxl-order-1{order:1}.ant-col-xxl-0{display:none}.ant-col-push-0{left:auto}.ant-col-pull-0{right:auto}.ant-col-xxl-push-0{left:auto}.ant-col-xxl-pull-0{right:auto}.ant-col-xxl-offset-0{margin-left:0}.ant-col-xxl-order-0{order:0}.ant-col-push-0.ant-col-rtl{right:auto}.ant-col-pull-0.ant-col-rtl{left:auto}.ant-col-xxl-push-0.ant-col-rtl{right:auto}.ant-col-xxl-pull-0.ant-col-rtl{left:auto}.ant-col-xxl-offset-0.ant-col-rtl{margin-right:0}.ant-col-xxl-push-1.ant-col-rtl{right:4.16666667%;left:auto}.ant-col-xxl-pull-1.ant-col-rtl{right:auto;left:4.16666667%}.ant-col-xxl-offset-1.ant-col-rtl{margin-right:4.16666667%;margin-left:0}.ant-col-xxl-push-2.ant-col-rtl{right:8.33333333%;left:auto}.ant-col-xxl-pull-2.ant-col-rtl{right:auto;left:8.33333333%}.ant-col-xxl-offset-2.ant-col-rtl{margin-right:8.33333333%;margin-left:0}.ant-col-xxl-push-3.ant-col-rtl{right:12.5%;left:auto}.ant-col-xxl-pull-3.ant-col-rtl{right:auto;left:12.5%}.ant-col-xxl-offset-3.ant-col-rtl{margin-right:12.5%;margin-left:0}.ant-col-xxl-push-4.ant-col-rtl{right:16.66666667%;left:auto}.ant-col-xxl-pull-4.ant-col-rtl{right:auto;left:16.66666667%}.ant-col-xxl-offset-4.ant-col-rtl{margin-right:16.66666667%;margin-left:0}.ant-col-xxl-push-5.ant-col-rtl{right:20.83333333%;left:auto}.ant-col-xxl-pull-5.ant-col-rtl{right:auto;left:20.83333333%}.ant-col-xxl-offset-5.ant-col-rtl{margin-right:20.83333333%;margin-left:0}.ant-col-xxl-push-6.ant-col-rtl{right:25%;left:auto}.ant-col-xxl-pull-6.ant-col-rtl{right:auto;left:25%}.ant-col-xxl-offset-6.ant-col-rtl{margin-right:25%;margin-left:0}.ant-col-xxl-push-7.ant-col-rtl{right:29.16666667%;left:auto}.ant-col-xxl-pull-7.ant-col-rtl{right:auto;left:29.16666667%}.ant-col-xxl-offset-7.ant-col-rtl{margin-right:29.16666667%;margin-left:0}.ant-col-xxl-push-8.ant-col-rtl{right:33.33333333%;left:auto}.ant-col-xxl-pull-8.ant-col-rtl{right:auto;left:33.33333333%}.ant-col-xxl-offset-8.ant-col-rtl{margin-right:33.33333333%;margin-left:0}.ant-col-xxl-push-9.ant-col-rtl{right:37.5%;left:auto}.ant-col-xxl-pull-9.ant-col-rtl{right:auto;left:37.5%}.ant-col-xxl-offset-9.ant-col-rtl{margin-right:37.5%;margin-left:0}.ant-col-xxl-push-10.ant-col-rtl{right:41.66666667%;left:auto}.ant-col-xxl-pull-10.ant-col-rtl{right:auto;left:41.66666667%}.ant-col-xxl-offset-10.ant-col-rtl{margin-right:41.66666667%;margin-left:0}.ant-col-xxl-push-11.ant-col-rtl{right:45.83333333%;left:auto}.ant-col-xxl-pull-11.ant-col-rtl{right:auto;left:45.83333333%}.ant-col-xxl-offset-11.ant-col-rtl{margin-right:45.83333333%;margin-left:0}.ant-col-xxl-push-12.ant-col-rtl{right:50%;left:auto}.ant-col-xxl-pull-12.ant-col-rtl{right:auto;left:50%}.ant-col-xxl-offset-12.ant-col-rtl{margin-right:50%;margin-left:0}.ant-col-xxl-push-13.ant-col-rtl{right:54.16666667%;left:auto}.ant-col-xxl-pull-13.ant-col-rtl{right:auto;left:54.16666667%}.ant-col-xxl-offset-13.ant-col-rtl{margin-right:54.16666667%;margin-left:0}.ant-col-xxl-push-14.ant-col-rtl{right:58.33333333%;left:auto}.ant-col-xxl-pull-14.ant-col-rtl{right:auto;left:58.33333333%}.ant-col-xxl-offset-14.ant-col-rtl{margin-right:58.33333333%;margin-left:0}.ant-col-xxl-push-15.ant-col-rtl{right:62.5%;left:auto}.ant-col-xxl-pull-15.ant-col-rtl{right:auto;left:62.5%}.ant-col-xxl-offset-15.ant-col-rtl{margin-right:62.5%;margin-left:0}.ant-col-xxl-push-16.ant-col-rtl{right:66.66666667%;left:auto}.ant-col-xxl-pull-16.ant-col-rtl{right:auto;left:66.66666667%}.ant-col-xxl-offset-16.ant-col-rtl{margin-right:66.66666667%;margin-left:0}.ant-col-xxl-push-17.ant-col-rtl{right:70.83333333%;left:auto}.ant-col-xxl-pull-17.ant-col-rtl{right:auto;left:70.83333333%}.ant-col-xxl-offset-17.ant-col-rtl{margin-right:70.83333333%;margin-left:0}.ant-col-xxl-push-18.ant-col-rtl{right:75%;left:auto}.ant-col-xxl-pull-18.ant-col-rtl{right:auto;left:75%}.ant-col-xxl-offset-18.ant-col-rtl{margin-right:75%;margin-left:0}.ant-col-xxl-push-19.ant-col-rtl{right:79.16666667%;left:auto}.ant-col-xxl-pull-19.ant-col-rtl{right:auto;left:79.16666667%}.ant-col-xxl-offset-19.ant-col-rtl{margin-right:79.16666667%;margin-left:0}.ant-col-xxl-push-20.ant-col-rtl{right:83.33333333%;left:auto}.ant-col-xxl-pull-20.ant-col-rtl{right:auto;left:83.33333333%}.ant-col-xxl-offset-20.ant-col-rtl{margin-right:83.33333333%;margin-left:0}.ant-col-xxl-push-21.ant-col-rtl{right:87.5%;left:auto}.ant-col-xxl-pull-21.ant-col-rtl{right:auto;left:87.5%}.ant-col-xxl-offset-21.ant-col-rtl{margin-right:87.5%;margin-left:0}.ant-col-xxl-push-22.ant-col-rtl{right:91.66666667%;left:auto}.ant-col-xxl-pull-22.ant-col-rtl{right:auto;left:91.66666667%}.ant-col-xxl-offset-22.ant-col-rtl{margin-right:91.66666667%;margin-left:0}.ant-col-xxl-push-23.ant-col-rtl{right:95.83333333%;left:auto}.ant-col-xxl-pull-23.ant-col-rtl{right:auto;left:95.83333333%}.ant-col-xxl-offset-23.ant-col-rtl{margin-right:95.83333333%;margin-left:0}.ant-col-xxl-push-24.ant-col-rtl{right:100%;left:auto}.ant-col-xxl-pull-24.ant-col-rtl{right:auto;left:100%}.ant-col-xxl-offset-24.ant-col-rtl{margin-right:100%;margin-left:0}}@media (min-width: 2000px){.ant-col-xxxl-24{display:block;flex:0 0 100%;max-width:100%}.ant-col-xxxl-push-24{left:100%}.ant-col-xxxl-pull-24{right:100%}.ant-col-xxxl-offset-24{margin-left:100%}.ant-col-xxxl-order-24{order:24}.ant-col-xxxl-23{display:block;flex:0 0 95.83333333%;max-width:95.83333333%}.ant-col-xxxl-push-23{left:95.83333333%}.ant-col-xxxl-pull-23{right:95.83333333%}.ant-col-xxxl-offset-23{margin-left:95.83333333%}.ant-col-xxxl-order-23{order:23}.ant-col-xxxl-22{display:block;flex:0 0 91.66666667%;max-width:91.66666667%}.ant-col-xxxl-push-22{left:91.66666667%}.ant-col-xxxl-pull-22{right:91.66666667%}.ant-col-xxxl-offset-22{margin-left:91.66666667%}.ant-col-xxxl-order-22{order:22}.ant-col-xxxl-21{display:block;flex:0 0 87.5%;max-width:87.5%}.ant-col-xxxl-push-21{left:87.5%}.ant-col-xxxl-pull-21{right:87.5%}.ant-col-xxxl-offset-21{margin-left:87.5%}.ant-col-xxxl-order-21{order:21}.ant-col-xxxl-20{display:block;flex:0 0 83.33333333%;max-width:83.33333333%}.ant-col-xxxl-push-20{left:83.33333333%}.ant-col-xxxl-pull-20{right:83.33333333%}.ant-col-xxxl-offset-20{margin-left:83.33333333%}.ant-col-xxxl-order-20{order:20}.ant-col-xxxl-19{display:block;flex:0 0 79.16666667%;max-width:79.16666667%}.ant-col-xxxl-push-19{left:79.16666667%}.ant-col-xxxl-pull-19{right:79.16666667%}.ant-col-xxxl-offset-19{margin-left:79.16666667%}.ant-col-xxxl-order-19{order:19}.ant-col-xxxl-18{display:block;flex:0 0 75%;max-width:75%}.ant-col-xxxl-push-18{left:75%}.ant-col-xxxl-pull-18{right:75%}.ant-col-xxxl-offset-18{margin-left:75%}.ant-col-xxxl-order-18{order:18}.ant-col-xxxl-17{display:block;flex:0 0 70.83333333%;max-width:70.83333333%}.ant-col-xxxl-push-17{left:70.83333333%}.ant-col-xxxl-pull-17{right:70.83333333%}.ant-col-xxxl-offset-17{margin-left:70.83333333%}.ant-col-xxxl-order-17{order:17}.ant-col-xxxl-16{display:block;flex:0 0 66.66666667%;max-width:66.66666667%}.ant-col-xxxl-push-16{left:66.66666667%}.ant-col-xxxl-pull-16{right:66.66666667%}.ant-col-xxxl-offset-16{margin-left:66.66666667%}.ant-col-xxxl-order-16{order:16}.ant-col-xxxl-15{display:block;flex:0 0 62.5%;max-width:62.5%}.ant-col-xxxl-push-15{left:62.5%}.ant-col-xxxl-pull-15{right:62.5%}.ant-col-xxxl-offset-15{margin-left:62.5%}.ant-col-xxxl-order-15{order:15}.ant-col-xxxl-14{display:block;flex:0 0 58.33333333%;max-width:58.33333333%}.ant-col-xxxl-push-14{left:58.33333333%}.ant-col-xxxl-pull-14{right:58.33333333%}.ant-col-xxxl-offset-14{margin-left:58.33333333%}.ant-col-xxxl-order-14{order:14}.ant-col-xxxl-13{display:block;flex:0 0 54.16666667%;max-width:54.16666667%}.ant-col-xxxl-push-13{left:54.16666667%}.ant-col-xxxl-pull-13{right:54.16666667%}.ant-col-xxxl-offset-13{margin-left:54.16666667%}.ant-col-xxxl-order-13{order:13}.ant-col-xxxl-12{display:block;flex:0 0 50%;max-width:50%}.ant-col-xxxl-push-12{left:50%}.ant-col-xxxl-pull-12{right:50%}.ant-col-xxxl-offset-12{margin-left:50%}.ant-col-xxxl-order-12{order:12}.ant-col-xxxl-11{display:block;flex:0 0 45.83333333%;max-width:45.83333333%}.ant-col-xxxl-push-11{left:45.83333333%}.ant-col-xxxl-pull-11{right:45.83333333%}.ant-col-xxxl-offset-11{margin-left:45.83333333%}.ant-col-xxxl-order-11{order:11}.ant-col-xxxl-10{display:block;flex:0 0 41.66666667%;max-width:41.66666667%}.ant-col-xxxl-push-10{left:41.66666667%}.ant-col-xxxl-pull-10{right:41.66666667%}.ant-col-xxxl-offset-10{margin-left:41.66666667%}.ant-col-xxxl-order-10{order:10}.ant-col-xxxl-9{display:block;flex:0 0 37.5%;max-width:37.5%}.ant-col-xxxl-push-9{left:37.5%}.ant-col-xxxl-pull-9{right:37.5%}.ant-col-xxxl-offset-9{margin-left:37.5%}.ant-col-xxxl-order-9{order:9}.ant-col-xxxl-8{display:block;flex:0 0 33.33333333%;max-width:33.33333333%}.ant-col-xxxl-push-8{left:33.33333333%}.ant-col-xxxl-pull-8{right:33.33333333%}.ant-col-xxxl-offset-8{margin-left:33.33333333%}.ant-col-xxxl-order-8{order:8}.ant-col-xxxl-7{display:block;flex:0 0 29.16666667%;max-width:29.16666667%}.ant-col-xxxl-push-7{left:29.16666667%}.ant-col-xxxl-pull-7{right:29.16666667%}.ant-col-xxxl-offset-7{margin-left:29.16666667%}.ant-col-xxxl-order-7{order:7}.ant-col-xxxl-6{display:block;flex:0 0 25%;max-width:25%}.ant-col-xxxl-push-6{left:25%}.ant-col-xxxl-pull-6{right:25%}.ant-col-xxxl-offset-6{margin-left:25%}.ant-col-xxxl-order-6{order:6}.ant-col-xxxl-5{display:block;flex:0 0 20.83333333%;max-width:20.83333333%}.ant-col-xxxl-push-5{left:20.83333333%}.ant-col-xxxl-pull-5{right:20.83333333%}.ant-col-xxxl-offset-5{margin-left:20.83333333%}.ant-col-xxxl-order-5{order:5}.ant-col-xxxl-4{display:block;flex:0 0 16.66666667%;max-width:16.66666667%}.ant-col-xxxl-push-4{left:16.66666667%}.ant-col-xxxl-pull-4{right:16.66666667%}.ant-col-xxxl-offset-4{margin-left:16.66666667%}.ant-col-xxxl-order-4{order:4}.ant-col-xxxl-3{display:block;flex:0 0 12.5%;max-width:12.5%}.ant-col-xxxl-push-3{left:12.5%}.ant-col-xxxl-pull-3{right:12.5%}.ant-col-xxxl-offset-3{margin-left:12.5%}.ant-col-xxxl-order-3{order:3}.ant-col-xxxl-2{display:block;flex:0 0 8.33333333%;max-width:8.33333333%}.ant-col-xxxl-push-2{left:8.33333333%}.ant-col-xxxl-pull-2{right:8.33333333%}.ant-col-xxxl-offset-2{margin-left:8.33333333%}.ant-col-xxxl-order-2{order:2}.ant-col-xxxl-1{display:block;flex:0 0 4.16666667%;max-width:4.16666667%}.ant-col-xxxl-push-1{left:4.16666667%}.ant-col-xxxl-pull-1{right:4.16666667%}.ant-col-xxxl-offset-1{margin-left:4.16666667%}.ant-col-xxxl-order-1{order:1}.ant-col-xxxl-0{display:none}.ant-col-push-0{left:auto}.ant-col-pull-0{right:auto}.ant-col-xxxl-push-0{left:auto}.ant-col-xxxl-pull-0{right:auto}.ant-col-xxxl-offset-0{margin-left:0}.ant-col-xxxl-order-0{order:0}.ant-col-push-0.ant-col-rtl{right:auto}.ant-col-pull-0.ant-col-rtl{left:auto}.ant-col-xxxl-push-0.ant-col-rtl{right:auto}.ant-col-xxxl-pull-0.ant-col-rtl{left:auto}.ant-col-xxxl-offset-0.ant-col-rtl{margin-right:0}.ant-col-xxxl-push-1.ant-col-rtl{right:4.16666667%;left:auto}.ant-col-xxxl-pull-1.ant-col-rtl{right:auto;left:4.16666667%}.ant-col-xxxl-offset-1.ant-col-rtl{margin-right:4.16666667%;margin-left:0}.ant-col-xxxl-push-2.ant-col-rtl{right:8.33333333%;left:auto}.ant-col-xxxl-pull-2.ant-col-rtl{right:auto;left:8.33333333%}.ant-col-xxxl-offset-2.ant-col-rtl{margin-right:8.33333333%;margin-left:0}.ant-col-xxxl-push-3.ant-col-rtl{right:12.5%;left:auto}.ant-col-xxxl-pull-3.ant-col-rtl{right:auto;left:12.5%}.ant-col-xxxl-offset-3.ant-col-rtl{margin-right:12.5%;margin-left:0}.ant-col-xxxl-push-4.ant-col-rtl{right:16.66666667%;left:auto}.ant-col-xxxl-pull-4.ant-col-rtl{right:auto;left:16.66666667%}.ant-col-xxxl-offset-4.ant-col-rtl{margin-right:16.66666667%;margin-left:0}.ant-col-xxxl-push-5.ant-col-rtl{right:20.83333333%;left:auto}.ant-col-xxxl-pull-5.ant-col-rtl{right:auto;left:20.83333333%}.ant-col-xxxl-offset-5.ant-col-rtl{margin-right:20.83333333%;margin-left:0}.ant-col-xxxl-push-6.ant-col-rtl{right:25%;left:auto}.ant-col-xxxl-pull-6.ant-col-rtl{right:auto;left:25%}.ant-col-xxxl-offset-6.ant-col-rtl{margin-right:25%;margin-left:0}.ant-col-xxxl-push-7.ant-col-rtl{right:29.16666667%;left:auto}.ant-col-xxxl-pull-7.ant-col-rtl{right:auto;left:29.16666667%}.ant-col-xxxl-offset-7.ant-col-rtl{margin-right:29.16666667%;margin-left:0}.ant-col-xxxl-push-8.ant-col-rtl{right:33.33333333%;left:auto}.ant-col-xxxl-pull-8.ant-col-rtl{right:auto;left:33.33333333%}.ant-col-xxxl-offset-8.ant-col-rtl{margin-right:33.33333333%;margin-left:0}.ant-col-xxxl-push-9.ant-col-rtl{right:37.5%;left:auto}.ant-col-xxxl-pull-9.ant-col-rtl{right:auto;left:37.5%}.ant-col-xxxl-offset-9.ant-col-rtl{margin-right:37.5%;margin-left:0}.ant-col-xxxl-push-10.ant-col-rtl{right:41.66666667%;left:auto}.ant-col-xxxl-pull-10.ant-col-rtl{right:auto;left:41.66666667%}.ant-col-xxxl-offset-10.ant-col-rtl{margin-right:41.66666667%;margin-left:0}.ant-col-xxxl-push-11.ant-col-rtl{right:45.83333333%;left:auto}.ant-col-xxxl-pull-11.ant-col-rtl{right:auto;left:45.83333333%}.ant-col-xxxl-offset-11.ant-col-rtl{margin-right:45.83333333%;margin-left:0}.ant-col-xxxl-push-12.ant-col-rtl{right:50%;left:auto}.ant-col-xxxl-pull-12.ant-col-rtl{right:auto;left:50%}.ant-col-xxxl-offset-12.ant-col-rtl{margin-right:50%;margin-left:0}.ant-col-xxxl-push-13.ant-col-rtl{right:54.16666667%;left:auto}.ant-col-xxxl-pull-13.ant-col-rtl{right:auto;left:54.16666667%}.ant-col-xxxl-offset-13.ant-col-rtl{margin-right:54.16666667%;margin-left:0}.ant-col-xxxl-push-14.ant-col-rtl{right:58.33333333%;left:auto}.ant-col-xxxl-pull-14.ant-col-rtl{right:auto;left:58.33333333%}.ant-col-xxxl-offset-14.ant-col-rtl{margin-right:58.33333333%;margin-left:0}.ant-col-xxxl-push-15.ant-col-rtl{right:62.5%;left:auto}.ant-col-xxxl-pull-15.ant-col-rtl{right:auto;left:62.5%}.ant-col-xxxl-offset-15.ant-col-rtl{margin-right:62.5%;margin-left:0}.ant-col-xxxl-push-16.ant-col-rtl{right:66.66666667%;left:auto}.ant-col-xxxl-pull-16.ant-col-rtl{right:auto;left:66.66666667%}.ant-col-xxxl-offset-16.ant-col-rtl{margin-right:66.66666667%;margin-left:0}.ant-col-xxxl-push-17.ant-col-rtl{right:70.83333333%;left:auto}.ant-col-xxxl-pull-17.ant-col-rtl{right:auto;left:70.83333333%}.ant-col-xxxl-offset-17.ant-col-rtl{margin-right:70.83333333%;margin-left:0}.ant-col-xxxl-push-18.ant-col-rtl{right:75%;left:auto}.ant-col-xxxl-pull-18.ant-col-rtl{right:auto;left:75%}.ant-col-xxxl-offset-18.ant-col-rtl{margin-right:75%;margin-left:0}.ant-col-xxxl-push-19.ant-col-rtl{right:79.16666667%;left:auto}.ant-col-xxxl-pull-19.ant-col-rtl{right:auto;left:79.16666667%}.ant-col-xxxl-offset-19.ant-col-rtl{margin-right:79.16666667%;margin-left:0}.ant-col-xxxl-push-20.ant-col-rtl{right:83.33333333%;left:auto}.ant-col-xxxl-pull-20.ant-col-rtl{right:auto;left:83.33333333%}.ant-col-xxxl-offset-20.ant-col-rtl{margin-right:83.33333333%;margin-left:0}.ant-col-xxxl-push-21.ant-col-rtl{right:87.5%;left:auto}.ant-col-xxxl-pull-21.ant-col-rtl{right:auto;left:87.5%}.ant-col-xxxl-offset-21.ant-col-rtl{margin-right:87.5%;margin-left:0}.ant-col-xxxl-push-22.ant-col-rtl{right:91.66666667%;left:auto}.ant-col-xxxl-pull-22.ant-col-rtl{right:auto;left:91.66666667%}.ant-col-xxxl-offset-22.ant-col-rtl{margin-right:91.66666667%;margin-left:0}.ant-col-xxxl-push-23.ant-col-rtl{right:95.83333333%;left:auto}.ant-col-xxxl-pull-23.ant-col-rtl{right:auto;left:95.83333333%}.ant-col-xxxl-offset-23.ant-col-rtl{margin-right:95.83333333%;margin-left:0}.ant-col-xxxl-push-24.ant-col-rtl{right:100%;left:auto}.ant-col-xxxl-pull-24.ant-col-rtl{right:auto;left:100%}.ant-col-xxxl-offset-24.ant-col-rtl{margin-right:100%;margin-left:0}}.ant-row-rtl{direction:rtl}/*!*************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/carousel/style/index.less ***! + \*************************************************************************************************************************************************************************************************************************************************************/.ant-carousel{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum"}.ant-carousel .slick-slider{position:relative;display:block;box-sizing:border-box;touch-action:pan-y;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent}.ant-carousel .slick-list{position:relative;display:block;margin:0;padding:0;overflow:hidden}.ant-carousel .slick-list:focus{outline:none}.ant-carousel .slick-list.dragging{cursor:pointer}.ant-carousel .slick-list .slick-slide{pointer-events:none}.ant-carousel .slick-list .slick-slide input.ant-radio-input,.ant-carousel .slick-list .slick-slide input.ant-checkbox-input{visibility:hidden}.ant-carousel .slick-list .slick-slide.slick-active{pointer-events:auto}.ant-carousel .slick-list .slick-slide.slick-active input.ant-radio-input,.ant-carousel .slick-list .slick-slide.slick-active input.ant-checkbox-input{visibility:visible}.ant-carousel .slick-list .slick-slide>div>div{vertical-align:bottom}.ant-carousel .slick-slider .slick-track,.ant-carousel .slick-slider .slick-list{transform:translateZ(0);touch-action:pan-y}.ant-carousel .slick-track{position:relative;top:0;left:0;display:block}.ant-carousel .slick-track:before,.ant-carousel .slick-track:after{display:table;content:""}.ant-carousel .slick-track:after{clear:both}.slick-loading .ant-carousel .slick-track{visibility:hidden}.ant-carousel .slick-slide{display:none;float:left;height:100%;min-height:1px}.ant-carousel .slick-slide img{display:block}.ant-carousel .slick-slide.slick-loading img{display:none}.ant-carousel .slick-slide.dragging img{pointer-events:none}.ant-carousel .slick-initialized .slick-slide{display:block}.ant-carousel .slick-loading .slick-slide{visibility:hidden}.ant-carousel .slick-vertical .slick-slide{display:block;height:auto}.ant-carousel .slick-arrow.slick-hidden{display:none}.ant-carousel .slick-prev,.ant-carousel .slick-next{position:absolute;top:50%;display:block;width:20px;height:20px;margin-top:-10px;padding:0;color:transparent;font-size:0;line-height:0;background:transparent;border:0;outline:none;cursor:pointer}.ant-carousel .slick-prev:hover,.ant-carousel .slick-next:hover,.ant-carousel .slick-prev:focus,.ant-carousel .slick-next:focus{color:transparent;background:transparent;outline:none}.ant-carousel .slick-prev:hover:before,.ant-carousel .slick-next:hover:before,.ant-carousel .slick-prev:focus:before,.ant-carousel .slick-next:focus:before{opacity:1}.ant-carousel .slick-prev.slick-disabled:before,.ant-carousel .slick-next.slick-disabled:before{opacity:.25}.ant-carousel .slick-prev{left:-25px}.ant-carousel .slick-prev:before{content:"←"}.ant-carousel .slick-next{right:-25px}.ant-carousel .slick-next:before{content:"→"}.ant-carousel .slick-dots{position:absolute;right:0;bottom:0;left:0;z-index:15;display:flex!important;justify-content:center;margin-right:15%;margin-left:15%;padding-left:0;list-style:none}.ant-carousel .slick-dots-bottom{bottom:12px}.ant-carousel .slick-dots-top{top:12px;bottom:auto}.ant-carousel .slick-dots li{position:relative;display:inline-block;flex:0 1 auto;box-sizing:content-box;width:16px;height:3px;margin:0 3px;padding:0;text-align:center;text-indent:-999px;vertical-align:top;transition:all .5s}.ant-carousel .slick-dots li button{display:block;width:100%;height:3px;padding:0;color:transparent;font-size:0;background:#fff;border:0;border-radius:1px;outline:none;cursor:pointer;opacity:.3;transition:all .5s}.ant-carousel .slick-dots li button:hover,.ant-carousel .slick-dots li button:focus{opacity:.75}.ant-carousel .slick-dots li.slick-active{width:24px}.ant-carousel .slick-dots li.slick-active button{background:#fff;opacity:1}.ant-carousel .slick-dots li.slick-active:hover,.ant-carousel .slick-dots li.slick-active:focus{opacity:1}.ant-carousel-vertical .slick-dots{top:50%;bottom:auto;flex-direction:column;width:3px;height:auto;margin:0;transform:translateY(-50%)}.ant-carousel-vertical .slick-dots-left{right:auto;left:12px}.ant-carousel-vertical .slick-dots-right{right:12px;left:auto}.ant-carousel-vertical .slick-dots li{width:3px;height:16px;margin:4px 2px;vertical-align:baseline}.ant-carousel-vertical .slick-dots li button{width:3px;height:16px}.ant-carousel-vertical .slick-dots li.slick-active,.ant-carousel-vertical .slick-dots li.slick-active button{width:3px;height:24px}.ant-carousel-rtl{direction:rtl}.ant-carousel-rtl .ant-carousel .slick-track{right:0;left:auto}.ant-carousel-rtl .ant-carousel .slick-prev{right:-25px;left:auto}.ant-carousel-rtl .ant-carousel .slick-prev:before{content:"→"}.ant-carousel-rtl .ant-carousel .slick-next{right:auto;left:-25px}.ant-carousel-rtl .ant-carousel .slick-next:before{content:"←"}.ant-carousel-rtl.ant-carousel .slick-dots{flex-direction:row-reverse}.ant-carousel-rtl.ant-carousel-vertical .slick-dots{flex-direction:column}/*!*************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/cascader/style/index.less ***! + \*************************************************************************************************************************************************************************************************************************************************************/.ant-cascader-checkbox{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;top:.2em;line-height:1;white-space:nowrap;outline:none;cursor:pointer}.ant-cascader-checkbox-wrapper:hover .ant-cascader-checkbox-inner,.ant-cascader-checkbox:hover .ant-cascader-checkbox-inner,.ant-cascader-checkbox-input:focus+.ant-cascader-checkbox-inner{border-color:#1890ff}.ant-cascader-checkbox-checked:after{position:absolute;top:0;left:0;width:100%;height:100%;border:1px solid #1890ff;border-radius:2px;visibility:hidden;animation:antCheckboxEffect .36s ease-in-out;animation-fill-mode:backwards;content:""}.ant-cascader-checkbox:hover:after,.ant-cascader-checkbox-wrapper:hover .ant-cascader-checkbox:after{visibility:visible}.ant-cascader-checkbox-inner{position:relative;top:0;left:0;display:block;width:16px;height:16px;direction:ltr;background-color:#fff;border:1px solid #d9d9d9;border-radius:2px;border-collapse:separate;transition:all .3s}.ant-cascader-checkbox-inner:after{position:absolute;top:50%;left:21.5%;display:table;width:5.71428571px;height:9.14285714px;border:2px solid #fff;border-top:0;border-left:0;transform:rotate(45deg) scale(0) translate(-50%,-50%);opacity:0;transition:all .1s cubic-bezier(.71,-.46,.88,.6),opacity .1s;content:" "}.ant-cascader-checkbox-input{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;width:100%;height:100%;cursor:pointer;opacity:0}.ant-cascader-checkbox-checked .ant-cascader-checkbox-inner:after{position:absolute;display:table;border:2px solid #fff;border-top:0;border-left:0;transform:rotate(45deg) scale(1) translate(-50%,-50%);opacity:1;transition:all .2s cubic-bezier(.12,.4,.29,1.46) .1s;content:" "}.ant-cascader-checkbox-checked .ant-cascader-checkbox-inner{background-color:#1890ff;border-color:#1890ff}.ant-cascader-checkbox-disabled{cursor:not-allowed}.ant-cascader-checkbox-disabled.ant-cascader-checkbox-checked .ant-cascader-checkbox-inner:after{border-color:#00000040;animation-name:none}.ant-cascader-checkbox-disabled .ant-cascader-checkbox-input{cursor:not-allowed;pointer-events:none}.ant-cascader-checkbox-disabled .ant-cascader-checkbox-inner{background-color:#f5f5f5;border-color:#d9d9d9!important}.ant-cascader-checkbox-disabled .ant-cascader-checkbox-inner:after{border-color:#f5f5f5;border-collapse:separate;animation-name:none}.ant-cascader-checkbox-disabled+span{color:#00000040;cursor:not-allowed}.ant-cascader-checkbox-disabled:hover:after,.ant-cascader-checkbox-wrapper:hover .ant-cascader-checkbox-disabled:after{visibility:hidden}.ant-cascader-checkbox-wrapper{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";display:inline-flex;align-items:baseline;line-height:unset;cursor:pointer}.ant-cascader-checkbox-wrapper:after{display:inline-block;width:0;overflow:hidden;content:" "}.ant-cascader-checkbox-wrapper.ant-cascader-checkbox-wrapper-disabled{cursor:not-allowed}.ant-cascader-checkbox-wrapper+.ant-cascader-checkbox-wrapper{margin-left:8px}.ant-cascader-checkbox+span{padding-right:8px;padding-left:8px}.ant-cascader-checkbox-group{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";display:inline-block}.ant-cascader-checkbox-group-item{margin-right:8px}.ant-cascader-checkbox-group-item:last-child{margin-right:0}.ant-cascader-checkbox-group-item+.ant-cascader-checkbox-group-item{margin-left:0}.ant-cascader-checkbox-indeterminate .ant-cascader-checkbox-inner{background-color:#fff;border-color:#d9d9d9}.ant-cascader-checkbox-indeterminate .ant-cascader-checkbox-inner:after{top:50%;left:50%;width:8px;height:8px;background-color:#1890ff;border:0;transform:translate(-50%,-50%) scale(1);opacity:1;content:" "}.ant-cascader-checkbox-indeterminate.ant-cascader-checkbox-disabled .ant-cascader-checkbox-inner:after{background-color:#00000040;border-color:#00000040}.ant-cascader{width:184px}.ant-cascader-checkbox{top:0;margin-right:8px}.ant-cascader-menus{display:flex;flex-wrap:nowrap;align-items:flex-start}.ant-cascader-menus.ant-cascader-menu-empty .ant-cascader-menu{width:100%;height:auto}.ant-cascader-menu{min-width:111px;height:180px;margin:-4px 0;padding:4px 0;overflow:auto;vertical-align:top;list-style:none;border-right:1px solid #f0f0f0;-ms-overflow-style:-ms-autohiding-scrollbar}.ant-cascader-menu-item{display:flex;flex-wrap:nowrap;align-items:center;padding:5px 12px;overflow:hidden;line-height:22px;white-space:nowrap;text-overflow:ellipsis;cursor:pointer;transition:all .3s}.ant-cascader-menu-item:hover{background:#f5f5f5}.ant-cascader-menu-item-disabled{color:#00000040;cursor:not-allowed}.ant-cascader-menu-item-disabled:hover{background:transparent}.ant-cascader-menu-empty .ant-cascader-menu-item{color:#00000040;cursor:default;pointer-events:none}.ant-cascader-menu-item-active:not(.ant-cascader-menu-item-disabled),.ant-cascader-menu-item-active:not(.ant-cascader-menu-item-disabled):hover{font-weight:600;background-color:#e6f7ff}.ant-cascader-menu-item-content{flex:auto}.ant-cascader-menu-item-expand .ant-cascader-menu-item-expand-icon,.ant-cascader-menu-item-loading-icon{margin-left:4px;color:#00000073;font-size:10px}.ant-cascader-menu-item-disabled.ant-cascader-menu-item-expand .ant-cascader-menu-item-expand-icon,.ant-cascader-menu-item-disabled.ant-cascader-menu-item-loading-icon{color:#00000040}.ant-cascader-menu-item-keyword{color:#ff4d4f}.ant-cascader-rtl .ant-cascader-menu-item-expand-icon,.ant-cascader-rtl .ant-cascader-menu-item-loading-icon{margin-right:4px;margin-left:0}.ant-cascader-rtl .ant-cascader-checkbox{top:0;margin-right:0;margin-left:8px}/*!*************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/checkbox/style/index.less ***! + \*************************************************************************************************************************************************************************************************************************************************************/.ant-checkbox{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;top:.2em;line-height:1;white-space:nowrap;outline:none;cursor:pointer}.ant-checkbox-wrapper:hover .ant-checkbox-inner,.ant-checkbox:hover .ant-checkbox-inner,.ant-checkbox-input:focus+.ant-checkbox-inner{border-color:#1890ff}.ant-checkbox-checked:after{position:absolute;top:0;left:0;width:100%;height:100%;border:1px solid #1890ff;border-radius:2px;visibility:hidden;animation:antCheckboxEffect .36s ease-in-out;animation-fill-mode:backwards;content:""}.ant-checkbox:hover:after,.ant-checkbox-wrapper:hover .ant-checkbox:after{visibility:visible}.ant-checkbox-inner{position:relative;top:0;left:0;display:block;width:16px;height:16px;direction:ltr;background-color:#fff;border:1px solid #d9d9d9;border-radius:2px;border-collapse:separate;transition:all .3s}.ant-checkbox-inner:after{position:absolute;top:50%;left:21.5%;display:table;width:5.71428571px;height:9.14285714px;border:2px solid #fff;border-top:0;border-left:0;transform:rotate(45deg) scale(0) translate(-50%,-50%);opacity:0;transition:all .1s cubic-bezier(.71,-.46,.88,.6),opacity .1s;content:" "}.ant-checkbox-input{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;width:100%;height:100%;cursor:pointer;opacity:0}.ant-checkbox-checked .ant-checkbox-inner:after{position:absolute;display:table;border:2px solid #fff;border-top:0;border-left:0;transform:rotate(45deg) scale(1) translate(-50%,-50%);opacity:1;transition:all .2s cubic-bezier(.12,.4,.29,1.46) .1s;content:" "}.ant-checkbox-checked .ant-checkbox-inner{background-color:#1890ff;border-color:#1890ff}.ant-checkbox-disabled{cursor:not-allowed}.ant-checkbox-disabled.ant-checkbox-checked .ant-checkbox-inner:after{border-color:#00000040;animation-name:none}.ant-checkbox-disabled .ant-checkbox-input{cursor:not-allowed;pointer-events:none}.ant-checkbox-disabled .ant-checkbox-inner{background-color:#f5f5f5;border-color:#d9d9d9!important}.ant-checkbox-disabled .ant-checkbox-inner:after{border-color:#f5f5f5;border-collapse:separate;animation-name:none}.ant-checkbox-disabled+span{color:#00000040;cursor:not-allowed}.ant-checkbox-disabled:hover:after,.ant-checkbox-wrapper:hover .ant-checkbox-disabled:after{visibility:hidden}.ant-checkbox-wrapper{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";display:inline-flex;align-items:baseline;line-height:unset;cursor:pointer}.ant-checkbox-wrapper:after{display:inline-block;width:0;overflow:hidden;content:" "}.ant-checkbox-wrapper.ant-checkbox-wrapper-disabled{cursor:not-allowed}.ant-checkbox-wrapper+.ant-checkbox-wrapper{margin-left:8px}.ant-checkbox+span{padding-right:8px;padding-left:8px}.ant-checkbox-group{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";display:inline-block}.ant-checkbox-group-item{margin-right:8px}.ant-checkbox-group-item:last-child{margin-right:0}.ant-checkbox-group-item+.ant-checkbox-group-item{margin-left:0}.ant-checkbox-indeterminate .ant-checkbox-inner{background-color:#fff;border-color:#d9d9d9}.ant-checkbox-indeterminate .ant-checkbox-inner:after{top:50%;left:50%;width:8px;height:8px;background-color:#1890ff;border:0;transform:translate(-50%,-50%) scale(1);opacity:1;content:" "}.ant-checkbox-indeterminate.ant-checkbox-disabled .ant-checkbox-inner:after{background-color:#00000040;border-color:#00000040}.ant-checkbox-rtl{direction:rtl}.ant-checkbox-group-rtl .ant-checkbox-group-item{margin-right:0;margin-left:8px}.ant-checkbox-group-rtl .ant-checkbox-group-item:last-child{margin-left:0!important}.ant-checkbox-group-rtl .ant-checkbox-group-item+.ant-checkbox-group-item{margin-left:8px}/*!*************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/collapse/style/index.less ***! + \*************************************************************************************************************************************************************************************************************************************************************/.ant-collapse{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";background-color:#fafafa;border:1px solid #d9d9d9;border-bottom:0;border-radius:2px}.ant-collapse>.ant-collapse-item{border-bottom:1px solid #d9d9d9}.ant-collapse>.ant-collapse-item:last-child,.ant-collapse>.ant-collapse-item:last-child>.ant-collapse-header{border-radius:0 0 2px 2px}.ant-collapse>.ant-collapse-item>.ant-collapse-header{position:relative;display:flex;flex-wrap:nowrap;align-items:flex-start;padding:12px 16px;color:#000000d9;line-height:1.5715;cursor:pointer;transition:all .3s,visibility 0s}.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow{display:inline-block;margin-right:12px;font-size:12px;vertical-align:-1px}.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow svg{transition:transform .24s}.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-extra{margin-left:auto}.ant-collapse>.ant-collapse-item>.ant-collapse-header:focus{outline:none}.ant-collapse>.ant-collapse-item .ant-collapse-header-collapsible-only{cursor:default}.ant-collapse>.ant-collapse-item .ant-collapse-header-collapsible-only .ant-collapse-header-text{cursor:pointer}.ant-collapse>.ant-collapse-item.ant-collapse-no-arrow>.ant-collapse-header{padding-left:12px}.ant-collapse-icon-position-right>.ant-collapse-item>.ant-collapse-header{position:relative;padding:12px 40px 12px 16px}.ant-collapse-icon-position-right>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow{position:absolute;top:50%;right:16px;left:auto;margin:0;transform:translateY(-50%)}.ant-collapse-content{color:#000000d9;background-color:#fff;border-top:1px solid #d9d9d9}.ant-collapse-content>.ant-collapse-content-box{padding:16px}.ant-collapse-content-hidden{display:none}.ant-collapse-item:last-child>.ant-collapse-content{border-radius:0 0 2px 2px}.ant-collapse-borderless{background-color:#fafafa;border:0}.ant-collapse-borderless>.ant-collapse-item{border-bottom:1px solid #d9d9d9}.ant-collapse-borderless>.ant-collapse-item:last-child,.ant-collapse-borderless>.ant-collapse-item:last-child .ant-collapse-header{border-radius:0}.ant-collapse-borderless>.ant-collapse-item>.ant-collapse-content{background-color:transparent;border-top:0}.ant-collapse-borderless>.ant-collapse-item>.ant-collapse-content>.ant-collapse-content-box{padding-top:4px}.ant-collapse-ghost{background-color:transparent;border:0}.ant-collapse-ghost>.ant-collapse-item{border-bottom:0}.ant-collapse-ghost>.ant-collapse-item>.ant-collapse-content{background-color:transparent;border-top:0}.ant-collapse-ghost>.ant-collapse-item>.ant-collapse-content>.ant-collapse-content-box{padding-top:12px;padding-bottom:12px}.ant-collapse .ant-collapse-item-disabled>.ant-collapse-header,.ant-collapse .ant-collapse-item-disabled>.ant-collapse-header>.arrow{color:#00000040;cursor:not-allowed}.ant-collapse-rtl{direction:rtl}.ant-collapse-rtl .ant-collapse>.ant-collapse-item>.ant-collapse-header{padding:12px 40px 12px 16px}.ant-collapse-rtl.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow{margin-right:0;margin-left:12px}.ant-collapse-rtl.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow svg{transform:rotate(180deg)}.ant-collapse-rtl.ant-collapse>.ant-collapse-item>.ant-collapse-header .ant-collapse-extra{margin-right:auto;margin-left:0}.ant-collapse-rtl.ant-collapse>.ant-collapse-item.ant-collapse-no-arrow>.ant-collapse-header{padding-right:12px;padding-left:0}/*!************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/comment/style/index.less ***! + \************************************************************************************************************************************************************************************************************************************************************/.ant-comment{position:relative;background-color:inherit}.ant-comment-inner{display:flex;padding:16px 0}.ant-comment-avatar{position:relative;flex-shrink:0;margin-right:12px;cursor:pointer}.ant-comment-avatar img{width:32px;height:32px;border-radius:50%}.ant-comment-content{position:relative;flex:1 1 auto;min-width:1px;font-size:14px;word-wrap:break-word}.ant-comment-content-author{display:flex;flex-wrap:wrap;justify-content:flex-start;margin-bottom:4px;font-size:14px}.ant-comment-content-author>a,.ant-comment-content-author>span{padding-right:8px;font-size:12px;line-height:18px}.ant-comment-content-author-name{color:#00000073;font-size:14px;transition:color .3s}.ant-comment-content-author-name>*{color:#00000073}.ant-comment-content-author-name>*:hover{color:#00000073}.ant-comment-content-author-time{color:#ccc;white-space:nowrap;cursor:auto}.ant-comment-content-detail p{margin-bottom:inherit;white-space:pre-wrap}.ant-comment-actions{margin-top:12px;margin-bottom:inherit;padding-left:0}.ant-comment-actions>li{display:inline-block;color:#00000073}.ant-comment-actions>li>span{margin-right:10px;color:#00000073;font-size:12px;cursor:pointer;transition:color .3s;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-comment-actions>li>span:hover{color:#595959}.ant-comment-nested{margin-left:44px}.ant-comment-rtl{direction:rtl}.ant-comment-rtl .ant-comment-avatar{margin-right:0;margin-left:12px}.ant-comment-rtl .ant-comment-content-author>a,.ant-comment-rtl .ant-comment-content-author>span{padding-right:0;padding-left:8px}.ant-comment-rtl .ant-comment-actions{padding-right:0}.ant-comment-rtl .ant-comment-actions>li>span{margin-right:0;margin-left:10px}.ant-comment-rtl .ant-comment-nested{margin-right:44px;margin-left:0}/*!********************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/config-provider/style/index.less ***! + \********************************************************************************************************************************************************************************************************************************************************************//*!*****************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/descriptions/style/index.less ***! + \*****************************************************************************************************************************************************************************************************************************************************************/.ant-descriptions-header{display:flex;align-items:center;margin-bottom:20px}.ant-descriptions-title{flex:auto;overflow:hidden;color:#000000d9;font-weight:700;font-size:16px;line-height:1.5715;white-space:nowrap;text-overflow:ellipsis}.ant-descriptions-extra{margin-left:auto;color:#000000d9;font-size:14px}.ant-descriptions-view{width:100%;border-radius:2px}.ant-descriptions-view table{width:100%;table-layout:fixed}.ant-descriptions-row>th,.ant-descriptions-row>td{padding-bottom:16px}.ant-descriptions-row:last-child{border-bottom:none}.ant-descriptions-item-label{color:#000000d9;font-weight:400;font-size:14px;line-height:1.5715;text-align:start}.ant-descriptions-item-label:after{content:":";position:relative;top:-.5px;margin:0 8px 0 2px}.ant-descriptions-item-label.ant-descriptions-item-no-colon:after{content:" "}.ant-descriptions-item-no-label:after{margin:0;content:""}.ant-descriptions-item-content{display:table-cell;flex:1;color:#000000d9;font-size:14px;line-height:1.5715;word-break:break-word;overflow-wrap:break-word}.ant-descriptions-item{padding-bottom:0;vertical-align:top}.ant-descriptions-item-container{display:flex}.ant-descriptions-item-container .ant-descriptions-item-label,.ant-descriptions-item-container .ant-descriptions-item-content{display:inline-flex;align-items:baseline}.ant-descriptions-middle .ant-descriptions-row>th,.ant-descriptions-middle .ant-descriptions-row>td{padding-bottom:12px}.ant-descriptions-small .ant-descriptions-row>th,.ant-descriptions-small .ant-descriptions-row>td{padding-bottom:8px}.ant-descriptions-bordered .ant-descriptions-view{border:1px solid #f0f0f0}.ant-descriptions-bordered .ant-descriptions-view>table{table-layout:auto;border-collapse:collapse}.ant-descriptions-bordered .ant-descriptions-item-label,.ant-descriptions-bordered .ant-descriptions-item-content{padding:16px 24px;border-right:1px solid #f0f0f0}.ant-descriptions-bordered .ant-descriptions-item-label:last-child,.ant-descriptions-bordered .ant-descriptions-item-content:last-child{border-right:none}.ant-descriptions-bordered .ant-descriptions-item-label{background-color:#fafafa}.ant-descriptions-bordered .ant-descriptions-item-label:after{display:none}.ant-descriptions-bordered .ant-descriptions-row{border-bottom:1px solid #f0f0f0}.ant-descriptions-bordered .ant-descriptions-row:last-child{border-bottom:none}.ant-descriptions-bordered.ant-descriptions-middle .ant-descriptions-item-label,.ant-descriptions-bordered.ant-descriptions-middle .ant-descriptions-item-content{padding:12px 24px}.ant-descriptions-bordered.ant-descriptions-small .ant-descriptions-item-label,.ant-descriptions-bordered.ant-descriptions-small .ant-descriptions-item-content{padding:8px 16px}.ant-descriptions-rtl{direction:rtl}.ant-descriptions-rtl .ant-descriptions-item-label:after{margin:0 2px 0 8px}.ant-descriptions-rtl.ant-descriptions-bordered .ant-descriptions-item-label,.ant-descriptions-rtl.ant-descriptions-bordered .ant-descriptions-item-content{border-right:none;border-left:1px solid #f0f0f0}.ant-descriptions-rtl.ant-descriptions-bordered .ant-descriptions-item-label:last-child,.ant-descriptions-rtl.ant-descriptions-bordered .ant-descriptions-item-content:last-child{border-left:none}/*!************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/divider/style/index.less ***! + \************************************************************************************************************************************************************************************************************************************************************/.ant-divider{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";border-top:1px solid rgba(0,0,0,.06)}.ant-divider-vertical{position:relative;top:-.06em;display:inline-block;height:.9em;margin:0 8px;vertical-align:middle;border-top:0;border-left:1px solid rgba(0,0,0,.06)}.ant-divider-horizontal{display:flex;clear:both;width:100%;min-width:100%;margin:24px 0}.ant-divider-horizontal.ant-divider-with-text{display:flex;margin:16px 0;color:#000000d9;font-weight:500;font-size:16px;white-space:nowrap;text-align:center;border-top:0;border-top-color:#0000000f}.ant-divider-horizontal.ant-divider-with-text:before,.ant-divider-horizontal.ant-divider-with-text:after{position:relative;top:50%;width:50%;border-top:1px solid transparent;border-top-color:inherit;border-bottom:0;transform:translateY(50%);content:""}.ant-divider-horizontal.ant-divider-with-text-left:before{top:50%;width:5%}.ant-divider-horizontal.ant-divider-with-text-left:after{top:50%;width:95%}.ant-divider-horizontal.ant-divider-with-text-right:before{top:50%;width:95%}.ant-divider-horizontal.ant-divider-with-text-right:after{top:50%;width:5%}.ant-divider-inner-text{display:inline-block;padding:0 1em}.ant-divider-dashed{background:none;border-color:#0000000f;border-style:dashed;border-width:1px 0 0}.ant-divider-horizontal.ant-divider-with-text.ant-divider-dashed:before,.ant-divider-horizontal.ant-divider-with-text.ant-divider-dashed:after{border-style:dashed none none}.ant-divider-vertical.ant-divider-dashed{border-width:0 0 0 1px}.ant-divider-plain.ant-divider-with-text{color:#000000d9;font-weight:400;font-size:14px}.ant-divider-horizontal.ant-divider-with-text-left.ant-divider-no-default-orientation-margin-left:before{width:0}.ant-divider-horizontal.ant-divider-with-text-left.ant-divider-no-default-orientation-margin-left:after{width:100%}.ant-divider-horizontal.ant-divider-with-text-left.ant-divider-no-default-orientation-margin-left .ant-divider-inner-text{padding-left:0}.ant-divider-horizontal.ant-divider-with-text-right.ant-divider-no-default-orientation-margin-right:before{width:100%}.ant-divider-horizontal.ant-divider-with-text-right.ant-divider-no-default-orientation-margin-right:after{width:0}.ant-divider-horizontal.ant-divider-with-text-right.ant-divider-no-default-orientation-margin-right .ant-divider-inner-text{padding-right:0}.ant-divider-rtl{direction:rtl}.ant-divider-rtl.ant-divider-horizontal.ant-divider-with-text-left:before{width:95%}.ant-divider-rtl.ant-divider-horizontal.ant-divider-with-text-left:after{width:5%}.ant-divider-rtl.ant-divider-horizontal.ant-divider-with-text-right:before{width:5%}.ant-divider-rtl.ant-divider-horizontal.ant-divider-with-text-right:after{width:95%}/*!***********************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/drawer/style/index.less ***! + \***********************************************************************************************************************************************************************************************************************************************************/.ant-drawer{position:fixed;z-index:1000;width:0%;height:100%;transition:width 0s ease .3s,height 0s ease .3s}.ant-drawer-content-wrapper{position:absolute;width:100%;height:100%;transition:transform .3s cubic-bezier(.23,1,.32,1),box-shadow .3s cubic-bezier(.23,1,.32,1)}.ant-drawer .ant-drawer-content{width:100%;height:100%}.ant-drawer-left,.ant-drawer-right{top:0;width:0%;height:100%}.ant-drawer-left .ant-drawer-content-wrapper,.ant-drawer-right .ant-drawer-content-wrapper{height:100%}.ant-drawer-left.ant-drawer-open,.ant-drawer-right.ant-drawer-open{width:100%;transition:transform .3s cubic-bezier(.23,1,.32,1)}.ant-drawer-left,.ant-drawer-left .ant-drawer-content-wrapper{left:0}.ant-drawer-left.ant-drawer-open .ant-drawer-content-wrapper{box-shadow:6px 0 16px -8px #00000014,9px 0 28px #0000000d,12px 0 48px 16px #00000008}.ant-drawer-right,.ant-drawer-right .ant-drawer-content-wrapper{right:0}.ant-drawer-right.ant-drawer-open .ant-drawer-content-wrapper{box-shadow:-6px 0 16px -8px #00000014,-9px 0 28px #0000000d,-12px 0 48px 16px #00000008}.ant-drawer-right.ant-drawer-open.no-mask{right:1px;transform:translate(1px)}.ant-drawer-top,.ant-drawer-bottom{left:0;width:100%;height:0%}.ant-drawer-top .ant-drawer-content-wrapper,.ant-drawer-bottom .ant-drawer-content-wrapper{width:100%}.ant-drawer-top.ant-drawer-open,.ant-drawer-bottom.ant-drawer-open{height:100%;transition:transform .3s cubic-bezier(.23,1,.32,1)}.ant-drawer-top{top:0}.ant-drawer-top.ant-drawer-open .ant-drawer-content-wrapper{box-shadow:0 6px 16px -8px #00000014,0 9px 28px #0000000d,0 12px 48px 16px #00000008}.ant-drawer-bottom,.ant-drawer-bottom .ant-drawer-content-wrapper{bottom:0}.ant-drawer-bottom.ant-drawer-open .ant-drawer-content-wrapper{box-shadow:0 -6px 16px -8px #00000014,0 -9px 28px #0000000d,0 -12px 48px 16px #00000008}.ant-drawer-bottom.ant-drawer-open.no-mask{bottom:1px;transform:translateY(1px)}.ant-drawer.ant-drawer-open .ant-drawer-mask{height:100%;opacity:1;transition:none;animation:antdDrawerFadeIn .3s cubic-bezier(.23,1,.32,1);pointer-events:auto}.ant-drawer-title{flex:1;margin:0;color:#000000d9;font-weight:500;font-size:16px;line-height:22px}.ant-drawer-content{position:relative;z-index:1;overflow:auto;background-color:#fff;background-clip:padding-box;border:0}.ant-drawer-close{display:inline-block;margin-right:12px;color:#00000073;font-weight:700;font-size:16px;font-style:normal;line-height:1;text-align:center;text-transform:none;text-decoration:none;background:transparent;border:0;outline:0;cursor:pointer;transition:color .3s;text-rendering:auto}.ant-drawer-close:focus,.ant-drawer-close:hover{color:#000000bf;text-decoration:none}.ant-drawer-header{position:relative;display:flex;align-items:center;justify-content:space-between;padding:16px 24px;color:#000000d9;background:#fff;border-bottom:1px solid #f0f0f0;border-radius:2px 2px 0 0}.ant-drawer-header-title{display:flex;flex:1;align-items:center;justify-content:space-between}.ant-drawer-header-close-only{padding-bottom:0;border:none}.ant-drawer-wrapper-body{display:flex;flex-flow:column nowrap;width:100%;height:100%}.ant-drawer-body{flex-grow:1;padding:24px;overflow:auto;font-size:14px;line-height:1.5715;word-wrap:break-word}.ant-drawer-footer{flex-shrink:0;padding:10px 16px;border-top:1px solid #f0f0f0}.ant-drawer-mask{position:absolute;top:0;left:0;width:100%;height:0;background-color:#00000073;opacity:0;transition:opacity .3s linear,height 0s ease .3s;pointer-events:none}.ant-drawer .ant-picker-clear{background:#fff}@keyframes antdDrawerFadeIn{0%{opacity:0}to{opacity:1}}.ant-drawer-rtl{direction:rtl}.ant-drawer-rtl .ant-drawer-close{margin-right:0;margin-left:12px}/*!*********************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/form/style/index.less ***! + \*********************************************************************************************************************************************************************************************************************************************************/.ant-form-item .ant-upload{background:transparent}.ant-form-item .ant-upload.ant-upload-drag{background:#fafafa}.ant-form-item input[type=radio],.ant-form-item input[type=checkbox]{width:14px;height:14px}.ant-form-item .ant-radio-inline,.ant-form-item .ant-checkbox-inline{display:inline-block;margin-left:8px;font-weight:400;vertical-align:middle;cursor:pointer}.ant-form-item .ant-radio-inline:first-child,.ant-form-item .ant-checkbox-inline:first-child{margin-left:0}.ant-form-item .ant-checkbox-vertical,.ant-form-item .ant-radio-vertical{display:block}.ant-form-item .ant-checkbox-vertical+.ant-checkbox-vertical,.ant-form-item .ant-radio-vertical+.ant-radio-vertical{margin-left:0}.ant-form-item .ant-input-number+.ant-form-text{margin-left:8px}.ant-form-item .ant-input-number-handler-wrap{z-index:2}.ant-form-item .ant-select,.ant-form-item .ant-cascader-picker{width:100%}.ant-form-item .ant-picker-calendar-year-select,.ant-form-item .ant-picker-calendar-month-select,.ant-form-item .ant-input-group .ant-select,.ant-form-item .ant-input-group .ant-cascader-picker,.ant-form-item .ant-input-number-group .ant-select,.ant-form-item .ant-input-number-group .ant-cascader-picker{width:auto}.ant-form-inline{display:flex;flex-wrap:wrap}.ant-form-inline .ant-form-item{flex:none;flex-wrap:nowrap;margin-right:16px;margin-bottom:0}.ant-form-inline .ant-form-item-with-help{margin-bottom:24px}.ant-form-inline .ant-form-item>.ant-form-item-label,.ant-form-inline .ant-form-item>.ant-form-item-control{display:inline-block;vertical-align:top}.ant-form-inline .ant-form-item>.ant-form-item-label{flex:none}.ant-form-inline .ant-form-item .ant-form-text,.ant-form-inline .ant-form-item .ant-form-item-has-feedback{display:inline-block}.ant-form-horizontal .ant-form-item-label{flex-grow:0}.ant-form-horizontal .ant-form-item-control{flex:1 1 0;min-width:0}.ant-form-horizontal .ant-form-item-label.ant-col-24+.ant-form-item-control{min-width:unset}.ant-form-vertical .ant-form-item{flex-direction:column}.ant-form-vertical .ant-form-item-label>label{height:auto}.ant-form-vertical .ant-form-item-label,.ant-col-24.ant-form-item-label,.ant-col-xl-24.ant-form-item-label{padding:0 0 8px;line-height:1.5715;white-space:initial;text-align:left}.ant-form-vertical .ant-form-item-label>label,.ant-col-24.ant-form-item-label>label,.ant-col-xl-24.ant-form-item-label>label{margin:0}.ant-form-vertical .ant-form-item-label>label:after,.ant-col-24.ant-form-item-label>label:after,.ant-col-xl-24.ant-form-item-label>label:after{display:none}.ant-form-rtl.ant-form-vertical .ant-form-item-label,.ant-form-rtl.ant-col-24.ant-form-item-label,.ant-form-rtl.ant-col-xl-24.ant-form-item-label{text-align:right}@media (max-width: 575px){.ant-form-item .ant-form-item-label{padding:0 0 8px;line-height:1.5715;white-space:initial;text-align:left}.ant-form-item .ant-form-item-label>label{margin:0}.ant-form-item .ant-form-item-label>label:after{display:none}.ant-form-rtl.ant-form-item .ant-form-item-label{text-align:right}.ant-form .ant-form-item{flex-wrap:wrap}.ant-form .ant-form-item .ant-form-item-label,.ant-form .ant-form-item .ant-form-item-control{flex:0 0 100%;max-width:100%}.ant-col-xs-24.ant-form-item-label{padding:0 0 8px;line-height:1.5715;white-space:initial;text-align:left}.ant-col-xs-24.ant-form-item-label>label{margin:0}.ant-col-xs-24.ant-form-item-label>label:after{display:none}.ant-form-rtl.ant-col-xs-24.ant-form-item-label{text-align:right}}@media (max-width: 767px){.ant-col-sm-24.ant-form-item-label{padding:0 0 8px;line-height:1.5715;white-space:initial;text-align:left}.ant-col-sm-24.ant-form-item-label>label{margin:0}.ant-col-sm-24.ant-form-item-label>label:after{display:none}.ant-form-rtl.ant-col-sm-24.ant-form-item-label{text-align:right}}@media (max-width: 991px){.ant-col-md-24.ant-form-item-label{padding:0 0 8px;line-height:1.5715;white-space:initial;text-align:left}.ant-col-md-24.ant-form-item-label>label{margin:0}.ant-col-md-24.ant-form-item-label>label:after{display:none}.ant-form-rtl.ant-col-md-24.ant-form-item-label{text-align:right}}@media (max-width: 1199px){.ant-col-lg-24.ant-form-item-label{padding:0 0 8px;line-height:1.5715;white-space:initial;text-align:left}.ant-col-lg-24.ant-form-item-label>label{margin:0}.ant-col-lg-24.ant-form-item-label>label:after{display:none}.ant-form-rtl.ant-col-lg-24.ant-form-item-label{text-align:right}}@media (max-width: 1599px){.ant-col-xl-24.ant-form-item-label{padding:0 0 8px;line-height:1.5715;white-space:initial;text-align:left}.ant-col-xl-24.ant-form-item-label>label{margin:0}.ant-col-xl-24.ant-form-item-label>label:after{display:none}.ant-form-rtl.ant-col-xl-24.ant-form-item-label{text-align:right}}.ant-form-item-explain-error{color:#ff4d4f}.ant-form-item-explain-warning{color:#faad14}.ant-form-item-has-feedback .ant-input{padding-right:24px}.ant-form-item-has-feedback .ant-input-affix-wrapper .ant-input-suffix{padding-right:18px}.ant-form-item-has-feedback .ant-input-search:not(.ant-input-search-enter-button) .ant-input-suffix{right:28px}.ant-form-item-has-feedback .ant-switch{margin:2px 0 4px}.ant-form-item-has-feedback>.ant-select .ant-select-arrow,.ant-form-item-has-feedback>.ant-select .ant-select-clear,.ant-form-item-has-feedback :not(.ant-input-group-addon)>.ant-select .ant-select-arrow,.ant-form-item-has-feedback :not(.ant-input-group-addon)>.ant-select .ant-select-clear,.ant-form-item-has-feedback :not(.ant-input-number-group-addon)>.ant-select .ant-select-arrow,.ant-form-item-has-feedback :not(.ant-input-number-group-addon)>.ant-select .ant-select-clear{right:32px}.ant-form-item-has-feedback>.ant-select .ant-select-selection-selected-value,.ant-form-item-has-feedback :not(.ant-input-group-addon)>.ant-select .ant-select-selection-selected-value,.ant-form-item-has-feedback :not(.ant-input-number-group-addon)>.ant-select .ant-select-selection-selected-value{padding-right:42px}.ant-form-item-has-feedback .ant-cascader-picker-arrow{margin-right:19px}.ant-form-item-has-feedback .ant-cascader-picker-clear{right:32px}.ant-form-item-has-feedback .ant-picker,.ant-form-item-has-feedback .ant-picker-large{padding-right:29.2px}.ant-form-item-has-feedback .ant-picker-small{padding-right:25.2px}.ant-form-item-has-feedback.ant-form-item-has-success .ant-form-item-children-icon,.ant-form-item-has-feedback.ant-form-item-has-warning .ant-form-item-children-icon,.ant-form-item-has-feedback.ant-form-item-has-error .ant-form-item-children-icon,.ant-form-item-has-feedback.ant-form-item-is-validating .ant-form-item-children-icon{position:absolute;top:50%;right:0;z-index:1;width:32px;height:20px;margin-top:-10px;font-size:14px;line-height:20px;text-align:center;visibility:visible;animation:zoomIn .3s cubic-bezier(.12,.4,.29,1.46);pointer-events:none}.ant-form-item-has-success.ant-form-item-has-feedback .ant-form-item-children-icon{color:#52c41a;animation-name:diffZoomIn1!important}.ant-form-item-has-warning .ant-form-item-split{color:#faad14}.ant-form-item-has-warning :not(.ant-input-disabled):not(.ant-input-borderless).ant-input,.ant-form-item-has-warning :not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper,.ant-form-item-has-warning :not(.ant-input-number-affix-wrapper-disabled):not(.ant-input-number-affix-wrapper-borderless).ant-input-number-affix-wrapper,.ant-form-item-has-warning :not(.ant-input-disabled):not(.ant-input-borderless).ant-input:hover,.ant-form-item-has-warning :not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper:hover,.ant-form-item-has-warning :not(.ant-input-number-affix-wrapper-disabled):not(.ant-input-number-affix-wrapper-borderless).ant-input-number-affix-wrapper:hover{background-color:#fff;border-color:#faad14}.ant-form-item-has-warning :not(.ant-input-disabled):not(.ant-input-borderless).ant-input:focus,.ant-form-item-has-warning :not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper:focus,.ant-form-item-has-warning :not(.ant-input-number-affix-wrapper-disabled):not(.ant-input-number-affix-wrapper-borderless).ant-input-number-affix-wrapper:focus,.ant-form-item-has-warning :not(.ant-input-disabled):not(.ant-input-borderless).ant-input-focused,.ant-form-item-has-warning :not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper-focused,.ant-form-item-has-warning :not(.ant-input-number-affix-wrapper-disabled):not(.ant-input-number-affix-wrapper-borderless).ant-input-number-affix-wrapper-focused{border-color:#ffc53d;box-shadow:0 0 0 2px #faad1433;border-right-width:1px!important;outline:0}.ant-form-item-has-warning .ant-calendar-picker-open .ant-calendar-picker-input{border-color:#ffc53d;box-shadow:0 0 0 2px #faad1433;border-right-width:1px!important;outline:0}.ant-form-item-has-warning .ant-input-prefix,.ant-form-item-has-warning .ant-input-number-prefix{color:#faad14}.ant-form-item-has-warning :not(.ant-input-group-addon-disabled).ant-input-group-addon,.ant-form-item-has-warning :not(.ant-input-number-group-addon-disabled).ant-input-number-group-addon{color:#faad14;border-color:#faad14}.ant-form-item-has-warning .has-feedback{color:#faad14}.ant-form-item-has-warning.ant-form-item-has-feedback .ant-form-item-children-icon{color:#faad14;animation-name:diffZoomIn3!important}.ant-form-item-has-warning .ant-select:not(.ant-select-disabled):not(.ant-select-customize-input) .ant-select-selector{background-color:#fff;border-color:#faad14!important}.ant-form-item-has-warning .ant-select:not(.ant-select-disabled):not(.ant-select-customize-input).ant-select-open .ant-select-selector,.ant-form-item-has-warning .ant-select:not(.ant-select-disabled):not(.ant-select-customize-input).ant-select-focused .ant-select-selector{border-color:#ffc53d;box-shadow:0 0 0 2px #faad1433;border-right-width:1px!important;outline:0}.ant-form-item-has-warning .ant-input-number,.ant-form-item-has-warning .ant-picker{background-color:#fff;border-color:#faad14}.ant-form-item-has-warning .ant-input-number-focused,.ant-form-item-has-warning .ant-picker-focused,.ant-form-item-has-warning .ant-input-number:focus,.ant-form-item-has-warning .ant-picker:focus{border-color:#ffc53d;box-shadow:0 0 0 2px #faad1433;border-right-width:1px!important;outline:0}.ant-form-item-has-warning .ant-input-number:not([disabled]):hover,.ant-form-item-has-warning .ant-picker:not([disabled]):hover{background-color:#fff;border-color:#faad14}.ant-form-item-has-warning .ant-cascader-picker:focus .ant-cascader-input{border-color:#ffc53d;box-shadow:0 0 0 2px #faad1433;border-right-width:1px!important;outline:0}.ant-form-item-has-error .ant-form-item-split{color:#ff4d4f}.ant-form-item-has-error :not(.ant-input-disabled):not(.ant-input-borderless).ant-input,.ant-form-item-has-error :not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper,.ant-form-item-has-error :not(.ant-input-number-affix-wrapper-disabled):not(.ant-input-number-affix-wrapper-borderless).ant-input-number-affix-wrapper,.ant-form-item-has-error :not(.ant-input-disabled):not(.ant-input-borderless).ant-input:hover,.ant-form-item-has-error :not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper:hover,.ant-form-item-has-error :not(.ant-input-number-affix-wrapper-disabled):not(.ant-input-number-affix-wrapper-borderless).ant-input-number-affix-wrapper:hover{background-color:#fff;border-color:#ff4d4f}.ant-form-item-has-error :not(.ant-input-disabled):not(.ant-input-borderless).ant-input:focus,.ant-form-item-has-error :not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper:focus,.ant-form-item-has-error :not(.ant-input-number-affix-wrapper-disabled):not(.ant-input-number-affix-wrapper-borderless).ant-input-number-affix-wrapper:focus,.ant-form-item-has-error :not(.ant-input-disabled):not(.ant-input-borderless).ant-input-focused,.ant-form-item-has-error :not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper-focused,.ant-form-item-has-error :not(.ant-input-number-affix-wrapper-disabled):not(.ant-input-number-affix-wrapper-borderless).ant-input-number-affix-wrapper-focused{border-color:#ff7875;box-shadow:0 0 0 2px #ff4d4f33;border-right-width:1px!important;outline:0}.ant-form-item-has-error .ant-calendar-picker-open .ant-calendar-picker-input{border-color:#ff7875;box-shadow:0 0 0 2px #ff4d4f33;border-right-width:1px!important;outline:0}.ant-form-item-has-error .ant-input-prefix,.ant-form-item-has-error .ant-input-number-prefix{color:#ff4d4f}.ant-form-item-has-error :not(.ant-input-group-addon-disabled).ant-input-group-addon,.ant-form-item-has-error :not(.ant-input-number-group-addon-disabled).ant-input-number-group-addon{color:#ff4d4f;border-color:#ff4d4f}.ant-form-item-has-error .has-feedback{color:#ff4d4f}.ant-form-item-has-error.ant-form-item-has-feedback .ant-form-item-children-icon{color:#ff4d4f;animation-name:diffZoomIn2!important}.ant-form-item-has-error .ant-select:not(.ant-select-disabled):not(.ant-select-customize-input) .ant-select-selector{background-color:#fff;border-color:#ff4d4f!important}.ant-form-item-has-error .ant-select:not(.ant-select-disabled):not(.ant-select-customize-input).ant-select-open .ant-select-selector,.ant-form-item-has-error .ant-select:not(.ant-select-disabled):not(.ant-select-customize-input).ant-select-focused .ant-select-selector{border-color:#ff7875;box-shadow:0 0 0 2px #ff4d4f33;border-right-width:1px!important;outline:0}.ant-form-item-has-error .ant-input-group-addon .ant-select.ant-select-single:not(.ant-select-customize-input) .ant-select-selector,.ant-form-item-has-error .ant-input-number-group-addon .ant-select.ant-select-single:not(.ant-select-customize-input) .ant-select-selector{background-color:inherit;border:0;box-shadow:none}.ant-form-item-has-error .ant-select.ant-select-auto-complete .ant-input:focus{border-color:#ff4d4f}.ant-form-item-has-error .ant-input-number,.ant-form-item-has-error .ant-picker{background-color:#fff;border-color:#ff4d4f}.ant-form-item-has-error .ant-input-number-focused,.ant-form-item-has-error .ant-picker-focused,.ant-form-item-has-error .ant-input-number:focus,.ant-form-item-has-error .ant-picker:focus{border-color:#ff7875;box-shadow:0 0 0 2px #ff4d4f33;border-right-width:1px!important;outline:0}.ant-form-item-has-error .ant-input-number:not([disabled]):hover,.ant-form-item-has-error .ant-picker:not([disabled]):hover{background-color:#fff;border-color:#ff4d4f}.ant-form-item-has-error .ant-mention-wrapper .ant-mention-editor,.ant-form-item-has-error .ant-mention-wrapper .ant-mention-editor:not([disabled]):hover{background-color:#fff;border-color:#ff4d4f}.ant-form-item-has-error .ant-mention-wrapper.ant-mention-active:not([disabled]) .ant-mention-editor,.ant-form-item-has-error .ant-mention-wrapper .ant-mention-editor:not([disabled]):focus{border-color:#ff7875;box-shadow:0 0 0 2px #ff4d4f33;border-right-width:1px!important;outline:0}.ant-form-item-has-error .ant-cascader-picker:hover .ant-cascader-picker-label:hover+.ant-cascader-input.ant-input{border-color:#ff4d4f}.ant-form-item-has-error .ant-cascader-picker:focus .ant-cascader-input{background-color:#fff;border-color:#ff7875;box-shadow:0 0 0 2px #ff4d4f33;border-right-width:1px!important;outline:0}.ant-form-item-has-error .ant-transfer-list{border-color:#ff4d4f}.ant-form-item-has-error .ant-transfer-list-search:not([disabled]){border-color:#d9d9d9}.ant-form-item-has-error .ant-transfer-list-search:not([disabled]):hover{border-color:#40a9ff;border-right-width:1px!important}.ant-form-item-has-error .ant-transfer-list-search:not([disabled]):focus{border-color:#40a9ff;box-shadow:0 0 0 2px #1890ff33;border-right-width:1px!important;outline:0}.ant-form-item-has-error .ant-radio-button-wrapper{border-color:#ff4d4f!important}.ant-form-item-has-error .ant-radio-button-wrapper:not(:first-child):before{background-color:#ff4d4f}.ant-form-item-has-error .ant-mentions{border-color:#ff4d4f!important}.ant-form-item-has-error .ant-mentions-focused,.ant-form-item-has-error .ant-mentions:focus{border-color:#ff7875;box-shadow:0 0 0 2px #ff4d4f33;border-right-width:1px!important;outline:0}.ant-form-item-is-validating.ant-form-item-has-feedback .ant-form-item-children-icon{display:inline-block;color:#1890ff}.ant-form{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum"}.ant-form legend{display:block;width:100%;margin-bottom:20px;padding:0;color:#00000073;font-size:16px;line-height:inherit;border:0;border-bottom:1px solid #d9d9d9}.ant-form label{font-size:14px}.ant-form input[type=search]{box-sizing:border-box}.ant-form input[type=radio],.ant-form input[type=checkbox]{line-height:normal}.ant-form input[type=file]{display:block}.ant-form input[type=range]{display:block;width:100%}.ant-form select[multiple],.ant-form select[size]{height:auto}.ant-form input[type=file]:focus,.ant-form input[type=radio]:focus,.ant-form input[type=checkbox]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.ant-form output{display:block;padding-top:15px;color:#000000d9;font-size:14px;line-height:1.5715}.ant-form .ant-form-text{display:inline-block;padding-right:8px}.ant-form-small .ant-form-item-label>label{height:24px}.ant-form-small .ant-form-item-control-input{min-height:24px}.ant-form-large .ant-form-item-label>label{height:40px}.ant-form-large .ant-form-item-control-input{min-height:40px}.ant-form-item{box-sizing:border-box;margin:0 0 24px;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";vertical-align:top}.ant-form-item-with-help{margin-bottom:0;transition:none}.ant-form-item-hidden,.ant-form-item-hidden.ant-row{display:none}.ant-form-item-label{display:inline-block;flex-grow:0;overflow:hidden;white-space:nowrap;text-align:right;vertical-align:middle}.ant-form-item-label-left{text-align:left}.ant-form-item-label-wrap{overflow:unset;line-height:1.3215em;white-space:unset}.ant-form-item-label>label{position:relative;display:inline-flex;align-items:center;max-width:100%;height:32px;color:#000000d9;font-size:14px}.ant-form-item-label>label>.anticon{font-size:14px;vertical-align:top}.ant-form-item-label>label.ant-form-item-required:not(.ant-form-item-required-mark-optional):before{display:inline-block;margin-right:4px;color:#ff4d4f;font-size:14px;font-family:SimSun,sans-serif;line-height:1;content:"*"}.ant-form-hide-required-mark .ant-form-item-label>label.ant-form-item-required:not(.ant-form-item-required-mark-optional):before{display:none}.ant-form-item-label>label .ant-form-item-optional{display:inline-block;margin-left:4px;color:#00000073}.ant-form-hide-required-mark .ant-form-item-label>label .ant-form-item-optional{display:none}.ant-form-item-label>label .ant-form-item-tooltip{color:#00000073;cursor:help;writing-mode:horizontal-tb;-webkit-margin-start:4px;margin-inline-start:4px}.ant-form-item-label>label:after{content:":";position:relative;top:-.5px;margin:0 8px 0 2px}.ant-form-item-label>label.ant-form-item-no-colon:after{content:" "}.ant-form-item-control{display:flex;flex-direction:column;flex-grow:1}.ant-form-item-control:first-child:not([class^=ant-col-]):not([class*=" ant-col-"]){width:100%}.ant-form-item-control-input{position:relative;display:flex;align-items:center;min-height:32px}.ant-form-item-control-input-content{flex:auto;max-width:100%}.ant-form-item-explain,.ant-form-item-extra{clear:both;color:#00000073;font-size:14px;line-height:1.5715;transition:color .3s cubic-bezier(.215,.61,.355,1)}.ant-form-item-explain-connected{height:0;min-height:0;opacity:0}.ant-form-item-extra{min-height:24px}.ant-form-item .ant-input-textarea-show-count:after{margin-bottom:-22px}.ant-form-item-with-help .ant-form-item-explain{height:auto;min-height:24px;opacity:1}.ant-show-help{transition:height .3s linear,min-height .3s linear,margin-bottom .3s cubic-bezier(.645,.045,.355,1),opacity .3s cubic-bezier(.645,.045,.355,1)}.ant-show-help-leave{min-height:24px}.ant-show-help-leave-active{min-height:0}.ant-show-help-item{overflow:hidden;transition:height .3s cubic-bezier(.645,.045,.355,1),opacity .3s cubic-bezier(.645,.045,.355,1),transform .3s cubic-bezier(.645,.045,.355,1)!important}.ant-show-help-item-appear,.ant-show-help-item-enter{transform:translateY(-5px);opacity:0}.ant-show-help-item-appear-active,.ant-show-help-item-enter-active{transform:translateY(0);opacity:1}.ant-show-help-item-leave-active{transform:translateY(-5px)}@keyframes diffZoomIn1{0%{transform:scale(0);opacity:0}to{transform:scale(1);opacity:1}}@keyframes diffZoomIn2{0%{transform:scale(0);opacity:0}to{transform:scale(1);opacity:1}}@keyframes diffZoomIn3{0%{transform:scale(0);opacity:0}to{transform:scale(1);opacity:1}}.ant-form-rtl{direction:rtl}.ant-form-rtl .ant-form-item-label{text-align:left}.ant-form-rtl .ant-form-item-label>label.ant-form-item-required:before{margin-right:0;margin-left:4px}.ant-form-rtl .ant-form-item-label>label:after{margin:0 2px 0 8px}.ant-form-rtl .ant-form-item-label>label .ant-form-item-optional{margin-right:4px;margin-left:0}.ant-col-rtl .ant-form-item-control:first-child{width:100%}.ant-form-rtl .ant-form-item-has-feedback .ant-input{padding-right:11px;padding-left:24px}.ant-form-rtl .ant-form-item-has-feedback .ant-input-affix-wrapper .ant-input-suffix{padding-right:11px;padding-left:18px}.ant-form-rtl .ant-form-item-has-feedback .ant-input-affix-wrapper .ant-input,.ant-form-rtl .ant-form-item-has-feedback .ant-input-number-affix-wrapper .ant-input-number{padding:0}.ant-form-rtl .ant-form-item-has-feedback .ant-input-search:not(.ant-input-search-enter-button) .ant-input-suffix{right:auto;left:28px}.ant-form-rtl .ant-form-item-has-feedback .ant-input-number{padding-left:18px}.ant-form-rtl .ant-form-item-has-feedback>.ant-select .ant-select-arrow,.ant-form-rtl .ant-form-item-has-feedback>.ant-select .ant-select-clear,.ant-form-rtl .ant-form-item-has-feedback :not(.ant-input-group-addon)>.ant-select .ant-select-arrow,.ant-form-rtl .ant-form-item-has-feedback :not(.ant-input-group-addon)>.ant-select .ant-select-clear,.ant-form-rtl .ant-form-item-has-feedback :not(.ant-input-number-group-addon)>.ant-select .ant-select-arrow,.ant-form-rtl .ant-form-item-has-feedback :not(.ant-input-number-group-addon)>.ant-select .ant-select-clear{right:auto;left:32px}.ant-form-rtl .ant-form-item-has-feedback>.ant-select .ant-select-selection-selected-value,.ant-form-rtl .ant-form-item-has-feedback :not(.ant-input-group-addon)>.ant-select .ant-select-selection-selected-value,.ant-form-rtl .ant-form-item-has-feedback :not(.ant-input-number-group-addon)>.ant-select .ant-select-selection-selected-value{padding-right:0;padding-left:42px}.ant-form-rtl .ant-form-item-has-feedback .ant-cascader-picker-arrow{margin-right:0;margin-left:19px}.ant-form-rtl .ant-form-item-has-feedback .ant-cascader-picker-clear{right:auto;left:32px}.ant-form-rtl .ant-form-item-has-feedback .ant-picker,.ant-form-rtl .ant-form-item-has-feedback .ant-picker-large{padding-right:11px;padding-left:29.2px}.ant-form-rtl .ant-form-item-has-feedback .ant-picker-small{padding-right:7px;padding-left:25.2px}.ant-form-rtl .ant-form-item-has-feedback.ant-form-item-has-success .ant-form-item-children-icon,.ant-form-rtl .ant-form-item-has-feedback.ant-form-item-has-warning .ant-form-item-children-icon,.ant-form-rtl .ant-form-item-has-feedback.ant-form-item-has-error .ant-form-item-children-icon,.ant-form-rtl .ant-form-item-has-feedback.ant-form-item-is-validating .ant-form-item-children-icon{right:auto;left:0}.ant-form-rtl.ant-form-inline .ant-form-item{margin-right:0;margin-left:16px}/*!*********************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/icon/style/index.less ***! + \*********************************************************************************************************************************************************************************************************************************************************//*!**********************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/image/style/index.less ***! + \**********************************************************************************************************************************************************************************************************************************************************/.ant-image{position:relative;display:inline-block}.ant-image-img{width:100%;height:auto;vertical-align:middle}.ant-image-img-placeholder{background-color:#f5f5f5;background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTQuNSAyLjVoLTEzQS41LjUgMCAwIDAgMSAzdjEwYS41LjUgMCAwIDAgLjUuNWgxM2EuNS41IDAgMCAwIC41LS41VjNhLjUuNSAwIDAgMC0uNS0uNXpNNS4yODEgNC43NWExIDEgMCAwIDEgMCAyIDEgMSAwIDAgMSAwLTJ6bTguMDMgNi44M2EuMTI3LjEyNyAwIDAgMS0uMDgxLjAzSDIuNzY5YS4xMjUuMTI1IDAgMCAxLS4wOTYtLjIwN2wyLjY2MS0zLjE1NmEuMTI2LjEyNiAwIDAgMSAuMTc3LS4wMTZsLjAxNi4wMTZMNy4wOCAxMC4wOWwyLjQ3LTIuOTNhLjEyNi4xMjYgMCAwIDEgLjE3Ny0uMDE2bC4wMTUuMDE2IDMuNTg4IDQuMjQ0YS4xMjcuMTI3IDAgMCAxLS4wMi4xNzV6IiBmaWxsPSIjOEM4QzhDIiBmaWxsLXJ1bGU9Im5vbnplcm8iLz48L3N2Zz4=);background-repeat:no-repeat;background-position:center center;background-size:30%}.ant-image-mask{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;color:#fff;background:rgba(0,0,0,.5);cursor:pointer;opacity:0;transition:opacity .3s}.ant-image-mask-info{padding:0 4px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ant-image-mask-info .anticon{-webkit-margin-end:4px;margin-inline-end:4px}.ant-image-mask:hover{opacity:1}.ant-image-placeholder{position:absolute;top:0;right:0;bottom:0;left:0}.ant-image-preview{pointer-events:none;height:100%;text-align:center}.ant-image-preview.ant-zoom-enter,.ant-image-preview.antzoom-appear{transform:none;opacity:0;animation-duration:.3s;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-image-preview-mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;height:100%;background-color:#00000073}.ant-image-preview-mask-hidden{display:none}.ant-image-preview-wrap{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto;outline:0;-webkit-overflow-scrolling:touch}.ant-image-preview-body{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden}.ant-image-preview-img{max-width:100%;max-height:100%;vertical-align:middle;transform:scaleZ(1);cursor:grab;transition:transform .3s cubic-bezier(.215,.61,.355,1) 0s;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:auto}.ant-image-preview-img-wrapper{position:absolute;top:0;right:0;bottom:0;left:0;transition:transform .3s cubic-bezier(.215,.61,.355,1) 0s}.ant-image-preview-img-wrapper:before{display:inline-block;width:1px;height:50%;margin-right:-1px;content:""}.ant-image-preview-moving .ant-image-preview-img{cursor:grabbing}.ant-image-preview-moving .ant-image-preview-img-wrapper{transition-duration:0s}.ant-image-preview-wrap{z-index:1080}.ant-image-preview-operations{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;font-feature-settings:"tnum";position:absolute;top:0;right:0;z-index:1;display:flex;flex-direction:row-reverse;align-items:center;width:100%;color:#ffffffd9;list-style:none;background:rgba(0,0,0,.1);pointer-events:auto}.ant-image-preview-operations-operation{margin-left:12px;padding:12px;cursor:pointer}.ant-image-preview-operations-operation-disabled{color:#ffffff40;pointer-events:none}.ant-image-preview-operations-operation:last-of-type{margin-left:0}.ant-image-preview-operations-icon{font-size:18px}.ant-image-preview-switch-left,.ant-image-preview-switch-right{position:absolute;top:50%;right:10px;z-index:1;display:flex;align-items:center;justify-content:center;width:44px;height:44px;margin-top:-22px;color:#ffffffd9;background:rgba(0,0,0,.1);border-radius:50%;cursor:pointer;pointer-events:auto}.ant-image-preview-switch-left-disabled,.ant-image-preview-switch-right-disabled{color:#ffffff40;cursor:not-allowed}.ant-image-preview-switch-left-disabled>.anticon,.ant-image-preview-switch-right-disabled>.anticon{cursor:not-allowed}.ant-image-preview-switch-left>.anticon,.ant-image-preview-switch-right>.anticon{font-size:18px}.ant-image-preview-switch-left{left:10px}.ant-image-preview-switch-right{right:10px}/*!*****************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/input-number/style/index.less ***! + \*****************************************************************************************************************************************************************************************************************************************************************/.ant-input-number-affix-wrapper{position:relative;display:inline-block;width:100%;min-width:0;color:#000000d9;font-size:14px;line-height:1.5715;background-color:#fff;background-image:none;border:1px solid #d9d9d9;border-radius:2px;transition:all .3s;position:static;display:inline-flex;width:90px;padding:0;-webkit-padding-start:11px;padding-inline-start:11px}.ant-input-number-affix-wrapper::-moz-placeholder{opacity:1}.ant-input-number-affix-wrapper::placeholder{color:#bfbfbf;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-input-number-affix-wrapper:-moz-placeholder-shown{text-overflow:ellipsis}.ant-input-number-affix-wrapper:placeholder-shown{text-overflow:ellipsis}.ant-input-number-affix-wrapper:hover{border-color:#40a9ff;border-right-width:1px!important}.ant-input-number-affix-wrapper:focus,.ant-input-number-affix-wrapper-focused{border-color:#40a9ff;box-shadow:0 0 0 2px #1890ff33;border-right-width:1px!important;outline:0}.ant-input-number-affix-wrapper-disabled{color:#00000040;background-color:#f5f5f5;border-color:#d9d9d9;box-shadow:none;cursor:not-allowed;opacity:1}.ant-input-number-affix-wrapper-disabled:hover{border-color:#d9d9d9;border-right-width:1px!important}.ant-input-number-affix-wrapper[disabled]{color:#00000040;background-color:#f5f5f5;border-color:#d9d9d9;box-shadow:none;cursor:not-allowed;opacity:1}.ant-input-number-affix-wrapper[disabled]:hover{border-color:#d9d9d9;border-right-width:1px!important}.ant-input-number-affix-wrapper-borderless,.ant-input-number-affix-wrapper-borderless:hover,.ant-input-number-affix-wrapper-borderless:focus,.ant-input-number-affix-wrapper-borderless-focused,.ant-input-number-affix-wrapper-borderless-disabled,.ant-input-number-affix-wrapper-borderless[disabled]{background-color:transparent;border:none;box-shadow:none}textarea.ant-input-number-affix-wrapper{max-width:100%;height:auto;min-height:32px;line-height:1.5715;vertical-align:bottom;transition:all .3s,height 0s}.ant-input-number-affix-wrapper-lg{padding:6.5px 11px;font-size:16px}.ant-input-number-affix-wrapper-sm{padding:0 7px}.ant-input-number-affix-wrapper:not(.ant-input-number-affix-wrapper-disabled):hover{border-color:#40a9ff;border-right-width:1px!important;z-index:1}.ant-input-number-affix-wrapper-focused,.ant-input-number-affix-wrapper:focus{z-index:1}.ant-input-number-affix-wrapper-disabled .ant-input-number[disabled]{background:transparent}.ant-input-number-affix-wrapper>div.ant-input-number{width:100%;border:none;outline:none}.ant-input-number-affix-wrapper>div.ant-input-number.ant-input-number-focused{box-shadow:none!important}.ant-input-number-affix-wrapper input.ant-input-number-input{padding:0}.ant-input-number-affix-wrapper:before{width:0;visibility:hidden;content:" "}.ant-input-number-prefix{display:flex;flex:none;align-items:center;-webkit-margin-end:4px;margin-inline-end:4px}.ant-input-number-group-wrapper .ant-input-number-affix-wrapper{width:100%}.ant-input-number{box-sizing:border-box;font-variant:tabular-nums;list-style:none;font-feature-settings:"tnum";position:relative;width:100%;min-width:0;color:#000000d9;font-size:14px;line-height:1.5715;background-color:#fff;background-image:none;transition:all .3s;display:inline-block;width:90px;margin:0;padding:0;border:1px solid #d9d9d9;border-radius:2px}.ant-input-number::-moz-placeholder{opacity:1}.ant-input-number::placeholder{color:#bfbfbf;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-input-number:-moz-placeholder-shown{text-overflow:ellipsis}.ant-input-number:placeholder-shown{text-overflow:ellipsis}.ant-input-number:focus,.ant-input-number-focused{border-color:#40a9ff;box-shadow:0 0 0 2px #1890ff33;border-right-width:1px!important;outline:0}.ant-input-number[disabled]{color:#00000040;background-color:#f5f5f5;border-color:#d9d9d9;box-shadow:none;cursor:not-allowed;opacity:1}.ant-input-number[disabled]:hover{border-color:#d9d9d9;border-right-width:1px!important}.ant-input-number-borderless,.ant-input-number-borderless:hover,.ant-input-number-borderless:focus,.ant-input-number-borderless-focused,.ant-input-number-borderless-disabled,.ant-input-number-borderless[disabled]{background-color:transparent;border:none;box-shadow:none}textarea.ant-input-number{max-width:100%;height:auto;min-height:32px;line-height:1.5715;vertical-align:bottom;transition:all .3s,height 0s}.ant-input-number-lg{padding:6.5px 11px;font-size:16px}.ant-input-number-sm{padding:0 7px}.ant-input-number-group{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;display:table;width:100%;border-collapse:separate;border-spacing:0}.ant-input-number-group[class*=col-]{float:none;padding-right:0;padding-left:0}.ant-input-number-group>[class*=col-]{padding-right:8px}.ant-input-number-group>[class*=col-]:last-child{padding-right:0}.ant-input-number-group-addon,.ant-input-number-group-wrap,.ant-input-number-group>.ant-input-number{display:table-cell}.ant-input-number-group-addon:not(:first-child):not(:last-child),.ant-input-number-group-wrap:not(:first-child):not(:last-child),.ant-input-number-group>.ant-input-number:not(:first-child):not(:last-child){border-radius:0}.ant-input-number-group-addon,.ant-input-number-group-wrap{width:1px;white-space:nowrap;vertical-align:middle}.ant-input-number-group-wrap>*{display:block!important}.ant-input-number-group .ant-input-number{float:left;width:100%;margin-bottom:0;text-align:inherit}.ant-input-number-group .ant-input-number:focus{z-index:1;border-right-width:1px}.ant-input-number-group .ant-input-number:hover{z-index:1;border-right-width:1px}.ant-input-search-with-button .ant-input-number-group .ant-input-number:hover{z-index:0}.ant-input-number-group-addon{position:relative;padding:0 11px;color:#000000d9;font-weight:400;font-size:14px;text-align:center;background-color:#fafafa;border:1px solid #d9d9d9;border-radius:2px;transition:all .3s}.ant-input-number-group-addon .ant-select{margin:-5px -11px}.ant-input-number-group-addon .ant-select.ant-select-single:not(.ant-select-customize-input) .ant-select-selector{background-color:inherit;border:1px solid transparent;box-shadow:none}.ant-input-number-group-addon .ant-select-open .ant-select-selector,.ant-input-number-group-addon .ant-select-focused .ant-select-selector{color:#1890ff}.ant-input-number-group-addon .ant-cascader-picker{margin:-9px -12px;background-color:transparent}.ant-input-number-group-addon .ant-cascader-picker .ant-cascader-input{text-align:left;border:0;box-shadow:none}.ant-input-number-group>.ant-input-number:first-child,.ant-input-number-group-addon:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.ant-input-number-group>.ant-input-number:first-child .ant-select .ant-select-selector,.ant-input-number-group-addon:first-child .ant-select .ant-select-selector{border-top-right-radius:0;border-bottom-right-radius:0}.ant-input-number-group>.ant-input-number-affix-wrapper:not(:first-child) .ant-input-number{border-top-left-radius:0;border-bottom-left-radius:0}.ant-input-number-group>.ant-input-number-affix-wrapper:not(:last-child) .ant-input-number{border-top-right-radius:0;border-bottom-right-radius:0}.ant-input-number-group-addon:first-child{border-right:0}.ant-input-number-group-addon:last-child{border-left:0}.ant-input-number-group>.ant-input-number:last-child,.ant-input-number-group-addon:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.ant-input-number-group>.ant-input-number:last-child .ant-select .ant-select-selector,.ant-input-number-group-addon:last-child .ant-select .ant-select-selector{border-top-left-radius:0;border-bottom-left-radius:0}.ant-input-number-group-lg .ant-input-number,.ant-input-number-group-lg>.ant-input-number-group-addon{padding:6.5px 11px;font-size:16px}.ant-input-number-group-sm .ant-input-number,.ant-input-number-group-sm>.ant-input-number-group-addon{padding:0 7px}.ant-input-number-group-lg .ant-select-single .ant-select-selector{height:40px}.ant-input-number-group-sm .ant-select-single .ant-select-selector{height:24px}.ant-input-number-group .ant-input-number-affix-wrapper:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.ant-input-search .ant-input-number-group .ant-input-number-affix-wrapper:not(:last-child){border-top-left-radius:2px;border-bottom-left-radius:2px}.ant-input-number-group .ant-input-number-affix-wrapper:not(:first-child),.ant-input-search .ant-input-number-group .ant-input-number-affix-wrapper:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.ant-input-number-group.ant-input-number-group-compact{display:block}.ant-input-number-group.ant-input-number-group-compact:before{display:table;content:""}.ant-input-number-group.ant-input-number-group-compact:after{display:table;clear:both;content:""}.ant-input-number-group.ant-input-number-group-compact-addon:not(:first-child):not(:last-child),.ant-input-number-group.ant-input-number-group-compact-wrap:not(:first-child):not(:last-child),.ant-input-number-group.ant-input-number-group-compact>.ant-input-number:not(:first-child):not(:last-child){border-right-width:1px}.ant-input-number-group.ant-input-number-group-compact-addon:not(:first-child):not(:last-child):hover,.ant-input-number-group.ant-input-number-group-compact-wrap:not(:first-child):not(:last-child):hover,.ant-input-number-group.ant-input-number-group-compact>.ant-input-number:not(:first-child):not(:last-child):hover{z-index:1}.ant-input-number-group.ant-input-number-group-compact-addon:not(:first-child):not(:last-child):focus,.ant-input-number-group.ant-input-number-group-compact-wrap:not(:first-child):not(:last-child):focus,.ant-input-number-group.ant-input-number-group-compact>.ant-input-number:not(:first-child):not(:last-child):focus{z-index:1}.ant-input-number-group.ant-input-number-group-compact>*{display:inline-block;float:none;vertical-align:top;border-radius:0}.ant-input-number-group.ant-input-number-group-compact>.ant-input-number-affix-wrapper{display:inline-flex}.ant-input-number-group.ant-input-number-group-compact>.ant-picker-range{display:inline-flex}.ant-input-number-group.ant-input-number-group-compact>*:not(:last-child){margin-right:-1px;border-right-width:1px}.ant-input-number-group.ant-input-number-group-compact .ant-input-number{float:none}.ant-input-number-group.ant-input-number-group-compact>.ant-select>.ant-select-selector,.ant-input-number-group.ant-input-number-group-compact>.ant-select-auto-complete .ant-input,.ant-input-number-group.ant-input-number-group-compact>.ant-cascader-picker .ant-input,.ant-input-number-group.ant-input-number-group-compact>.ant-input-group-wrapper .ant-input{border-right-width:1px;border-radius:0}.ant-input-number-group.ant-input-number-group-compact>.ant-select>.ant-select-selector:hover,.ant-input-number-group.ant-input-number-group-compact>.ant-select-auto-complete .ant-input:hover,.ant-input-number-group.ant-input-number-group-compact>.ant-cascader-picker .ant-input:hover,.ant-input-number-group.ant-input-number-group-compact>.ant-input-group-wrapper .ant-input:hover{z-index:1}.ant-input-number-group.ant-input-number-group-compact>.ant-select>.ant-select-selector:focus,.ant-input-number-group.ant-input-number-group-compact>.ant-select-auto-complete .ant-input:focus,.ant-input-number-group.ant-input-number-group-compact>.ant-cascader-picker .ant-input:focus,.ant-input-number-group.ant-input-number-group-compact>.ant-input-group-wrapper .ant-input:focus{z-index:1}.ant-input-number-group.ant-input-number-group-compact>.ant-select-focused{z-index:1}.ant-input-number-group.ant-input-number-group-compact>.ant-select>.ant-select-arrow{z-index:1}.ant-input-number-group.ant-input-number-group-compact>*:first-child,.ant-input-number-group.ant-input-number-group-compact>.ant-select:first-child>.ant-select-selector,.ant-input-number-group.ant-input-number-group-compact>.ant-select-auto-complete:first-child .ant-input,.ant-input-number-group.ant-input-number-group-compact>.ant-cascader-picker:first-child .ant-input{border-top-left-radius:2px;border-bottom-left-radius:2px}.ant-input-number-group.ant-input-number-group-compact>*:last-child,.ant-input-number-group.ant-input-number-group-compact>.ant-select:last-child>.ant-select-selector,.ant-input-number-group.ant-input-number-group-compact>.ant-cascader-picker:last-child .ant-input,.ant-input-number-group.ant-input-number-group-compact>.ant-cascader-picker-focused:last-child .ant-input{border-right-width:1px;border-top-right-radius:2px;border-bottom-right-radius:2px}.ant-input-number-group.ant-input-number-group-compact>.ant-select-auto-complete .ant-input{vertical-align:top}.ant-input-number-group.ant-input-number-group-compact .ant-input-group-wrapper+.ant-input-group-wrapper{margin-left:-1px}.ant-input-number-group.ant-input-number-group-compact .ant-input-group-wrapper+.ant-input-group-wrapper .ant-input-affix-wrapper{border-radius:0}.ant-input-number-group.ant-input-number-group-compact .ant-input-group-wrapper:not(:last-child).ant-input-search>.ant-input-group>.ant-input-group-addon>.ant-input-search-button{border-radius:0}.ant-input-number-group.ant-input-number-group-compact .ant-input-group-wrapper:not(:last-child).ant-input-search>.ant-input-group>.ant-input{border-radius:2px 0 0 2px}.ant-input-number-group-wrapper{display:inline-block;text-align:start;vertical-align:top}.ant-input-number-handler{position:relative;display:block;width:100%;height:50%;overflow:hidden;color:#00000073;font-weight:700;line-height:0;text-align:center;border-left:1px solid #d9d9d9;transition:all .1s linear}.ant-input-number-handler:active{background:#f4f4f4}.ant-input-number-handler:hover .ant-input-number-handler-up-inner,.ant-input-number-handler:hover .ant-input-number-handler-down-inner{color:#40a9ff}.ant-input-number-handler-up-inner,.ant-input-number-handler-down-inner{display:inline-block;color:inherit;font-style:normal;line-height:0;text-align:center;text-transform:none;vertical-align:-.125em;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:absolute;right:4px;width:12px;height:12px;color:#00000073;line-height:12px;transition:all .1s linear;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-input-number-handler-up-inner>*,.ant-input-number-handler-down-inner>*{line-height:1}.ant-input-number-handler-up-inner svg,.ant-input-number-handler-down-inner svg{display:inline-block}.ant-input-number-handler-up-inner:before,.ant-input-number-handler-down-inner:before{display:none}.ant-input-number-handler-up-inner .ant-input-number-handler-up-inner-icon,.ant-input-number-handler-up-inner .ant-input-number-handler-down-inner-icon,.ant-input-number-handler-down-inner .ant-input-number-handler-up-inner-icon,.ant-input-number-handler-down-inner .ant-input-number-handler-down-inner-icon{display:block}.ant-input-number:hover{border-color:#40a9ff;border-right-width:1px!important}.ant-input-number:hover+.ant-form-item-children-icon{opacity:0;transition:opacity .24s linear .24s}.ant-input-number-focused{border-color:#40a9ff;box-shadow:0 0 0 2px #1890ff33;border-right-width:1px!important;outline:0}.ant-input-number-disabled{color:#00000040;background-color:#f5f5f5;border-color:#d9d9d9;box-shadow:none;cursor:not-allowed;opacity:1}.ant-input-number-disabled:hover{border-color:#d9d9d9;border-right-width:1px!important}.ant-input-number-disabled .ant-input-number-input{cursor:not-allowed}.ant-input-number-disabled .ant-input-number-handler-wrap,.ant-input-number-readonly .ant-input-number-handler-wrap{display:none}.ant-input-number-input{width:100%;height:30px;padding:0 11px;text-align:left;background-color:transparent;border:0;border-radius:2px;outline:0;transition:all .3s linear;-webkit-appearance:textfield!important;-moz-appearance:textfield!important;appearance:textfield!important}.ant-input-number-input::-moz-placeholder{opacity:1}.ant-input-number-input::placeholder{color:#bfbfbf;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-input-number-input:-moz-placeholder-shown{text-overflow:ellipsis}.ant-input-number-input:placeholder-shown{text-overflow:ellipsis}.ant-input-number-input[type=number]::-webkit-inner-spin-button,.ant-input-number-input[type=number]::-webkit-outer-spin-button{margin:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.ant-input-number-lg{padding:0;font-size:16px}.ant-input-number-lg input{height:38px}.ant-input-number-sm{padding:0}.ant-input-number-sm input{height:22px;padding:0 7px}.ant-input-number-handler-wrap{position:absolute;top:0;right:0;width:22px;height:100%;background:#fff;border-radius:0 2px 2px 0;opacity:0;transition:opacity .24s linear .1s}.ant-input-number-handler-wrap .ant-input-number-handler .ant-input-number-handler-up-inner,.ant-input-number-handler-wrap .ant-input-number-handler .ant-input-number-handler-down-inner{display:flex;align-items:center;justify-content:center;min-width:auto;margin-right:0;font-size:7px}.ant-input-number-borderless .ant-input-number-handler-wrap{border-left-width:0}.ant-input-number-handler-wrap:hover .ant-input-number-handler{height:40%}.ant-input-number:hover .ant-input-number-handler-wrap,.ant-input-number-focused .ant-input-number-handler-wrap{opacity:1}.ant-input-number-handler-up{border-top-right-radius:2px;cursor:pointer}.ant-input-number-handler-up-inner{top:50%;margin-top:-5px;text-align:center}.ant-input-number-handler-up:hover{height:60%!important}.ant-input-number-handler-down{top:0;border-top:1px solid #d9d9d9;border-bottom-right-radius:2px;cursor:pointer}.ant-input-number-handler-down-inner{top:50%;text-align:center;transform:translateY(-50%)}.ant-input-number-handler-down:hover{height:60%!important}.ant-input-number-borderless .ant-input-number-handler-down{border-top-width:0}.ant-input-number-handler-up-disabled,.ant-input-number-handler-down-disabled{cursor:not-allowed}.ant-input-number-handler-up-disabled:hover .ant-input-number-handler-up-inner,.ant-input-number-handler-down-disabled:hover .ant-input-number-handler-down-inner{color:#00000040}.ant-input-number-borderless{box-shadow:none}.ant-input-number-out-of-range input{color:#ff4d4f}.ant-input-number-rtl{direction:rtl}.ant-input-number-rtl .ant-input-number-handler{border-right:1px solid #d9d9d9;border-left:0}.ant-input-number-rtl .ant-input-number-handler-wrap{right:auto;left:0}.ant-input-number-rtl.ant-input-number-borderless .ant-input-number-handler-wrap{border-right-width:0}.ant-input-number-rtl .ant-input-number-handler-up{border-top-right-radius:0}.ant-input-number-rtl .ant-input-number-handler-down{border-bottom-right-radius:0}.ant-input-number-rtl .ant-input-number-input{direction:ltr;text-align:right}/*!**********************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/input/style/index.less ***! + \**********************************************************************************************************************************************************************************************************************************************************/.ant-input-affix-wrapper{position:relative;display:inline-block;width:100%;min-width:0;padding:4px 11px;color:#000000d9;font-size:14px;line-height:1.5715;background-color:#fff;background-image:none;border:1px solid #d9d9d9;border-radius:2px;transition:all .3s;display:inline-flex}.ant-input-affix-wrapper::-moz-placeholder{opacity:1}.ant-input-affix-wrapper::placeholder{color:#bfbfbf;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-input-affix-wrapper:-moz-placeholder-shown{text-overflow:ellipsis}.ant-input-affix-wrapper:placeholder-shown{text-overflow:ellipsis}.ant-input-affix-wrapper:hover{border-color:#40a9ff;border-right-width:1px!important}.ant-input-rtl .ant-input-affix-wrapper:hover{border-right-width:0;border-left-width:1px!important}.ant-input-affix-wrapper:focus,.ant-input-affix-wrapper-focused{border-color:#40a9ff;box-shadow:0 0 0 2px #1890ff33;border-right-width:1px!important;outline:0}.ant-input-rtl .ant-input-affix-wrapper:focus,.ant-input-rtl .ant-input-affix-wrapper-focused{border-right-width:0;border-left-width:1px!important}.ant-input-affix-wrapper-disabled{color:#00000040;background-color:#f5f5f5;border-color:#d9d9d9;box-shadow:none;cursor:not-allowed;opacity:1}.ant-input-affix-wrapper-disabled:hover{border-color:#d9d9d9;border-right-width:1px!important}.ant-input-affix-wrapper[disabled]{color:#00000040;background-color:#f5f5f5;border-color:#d9d9d9;box-shadow:none;cursor:not-allowed;opacity:1}.ant-input-affix-wrapper[disabled]:hover{border-color:#d9d9d9;border-right-width:1px!important}.ant-input-affix-wrapper-borderless,.ant-input-affix-wrapper-borderless:hover,.ant-input-affix-wrapper-borderless:focus,.ant-input-affix-wrapper-borderless-focused,.ant-input-affix-wrapper-borderless-disabled,.ant-input-affix-wrapper-borderless[disabled]{background-color:transparent;border:none;box-shadow:none}textarea.ant-input-affix-wrapper{max-width:100%;height:auto;min-height:32px;line-height:1.5715;vertical-align:bottom;transition:all .3s,height 0s}.ant-input-affix-wrapper-lg{padding:6.5px 11px;font-size:16px}.ant-input-affix-wrapper-sm{padding:0 7px}.ant-input-affix-wrapper-rtl{direction:rtl}.ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled):hover{border-color:#40a9ff;border-right-width:1px!important;z-index:1}.ant-input-rtl .ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled):hover{border-right-width:0;border-left-width:1px!important}.ant-input-search-with-button .ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled):hover{z-index:0}.ant-input-affix-wrapper-focused,.ant-input-affix-wrapper:focus{z-index:1}.ant-input-affix-wrapper-disabled .ant-input[disabled]{background:transparent}.ant-input-affix-wrapper>input.ant-input{padding:0;border:none;outline:none}.ant-input-affix-wrapper>input.ant-input:focus{box-shadow:none!important}.ant-input-affix-wrapper:before{width:0;visibility:hidden;content:" "}.ant-input-prefix,.ant-input-suffix{display:flex;flex:none;align-items:center}.ant-input-show-count-suffix{color:#00000073}.ant-input-show-count-has-suffix{margin-right:2px}.ant-input-prefix{margin-right:4px}.ant-input-suffix{margin-left:4px}.anticon.ant-input-clear-icon{margin:0;color:#00000040;font-size:12px;vertical-align:-1px;cursor:pointer;transition:color .3s}.anticon.ant-input-clear-icon:hover{color:#00000073}.anticon.ant-input-clear-icon:active{color:#000000d9}.anticon.ant-input-clear-icon-hidden{visibility:hidden}.anticon.ant-input-clear-icon-has-suffix{margin:0 4px}.ant-input-affix-wrapper-textarea-with-clear-btn{padding:0!important;border:0!important}.ant-input-affix-wrapper-textarea-with-clear-btn .ant-input-clear-icon{position:absolute;top:8px;right:8px;z-index:1}.ant-input{box-sizing:border-box;margin:0;font-variant:tabular-nums;list-style:none;font-feature-settings:"tnum";position:relative;display:inline-block;width:100%;min-width:0;padding:4px 11px;color:#000000d9;font-size:14px;line-height:1.5715;background-color:#fff;background-image:none;border:1px solid #d9d9d9;border-radius:2px;transition:all .3s}.ant-input::-moz-placeholder{opacity:1}.ant-input::placeholder{color:#bfbfbf;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-input:-moz-placeholder-shown{text-overflow:ellipsis}.ant-input:placeholder-shown{text-overflow:ellipsis}.ant-input:hover{border-color:#40a9ff;border-right-width:1px!important}.ant-input-rtl .ant-input:hover{border-right-width:0;border-left-width:1px!important}.ant-input:focus,.ant-input-focused{border-color:#40a9ff;box-shadow:0 0 0 2px #1890ff33;border-right-width:1px!important;outline:0}.ant-input-rtl .ant-input:focus,.ant-input-rtl .ant-input-focused{border-right-width:0;border-left-width:1px!important}.ant-input-disabled{color:#00000040;background-color:#f5f5f5;border-color:#d9d9d9;box-shadow:none;cursor:not-allowed;opacity:1}.ant-input-disabled:hover{border-color:#d9d9d9;border-right-width:1px!important}.ant-input[disabled]{color:#00000040;background-color:#f5f5f5;border-color:#d9d9d9;box-shadow:none;cursor:not-allowed;opacity:1}.ant-input[disabled]:hover{border-color:#d9d9d9;border-right-width:1px!important}.ant-input-borderless,.ant-input-borderless:hover,.ant-input-borderless:focus,.ant-input-borderless-focused,.ant-input-borderless-disabled,.ant-input-borderless[disabled]{background-color:transparent;border:none;box-shadow:none}textarea.ant-input{max-width:100%;height:auto;min-height:32px;line-height:1.5715;vertical-align:bottom;transition:all .3s,height 0s}.ant-input-lg{padding:6.5px 11px;font-size:16px}.ant-input-sm{padding:0 7px}.ant-input-rtl{direction:rtl}.ant-input-group{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;display:table;width:100%;border-collapse:separate;border-spacing:0}.ant-input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.ant-input-group>[class*=col-]{padding-right:8px}.ant-input-group>[class*=col-]:last-child{padding-right:0}.ant-input-group-addon,.ant-input-group-wrap,.ant-input-group>.ant-input{display:table-cell}.ant-input-group-addon:not(:first-child):not(:last-child),.ant-input-group-wrap:not(:first-child):not(:last-child),.ant-input-group>.ant-input:not(:first-child):not(:last-child){border-radius:0}.ant-input-group-addon,.ant-input-group-wrap{width:1px;white-space:nowrap;vertical-align:middle}.ant-input-group-wrap>*{display:block!important}.ant-input-group .ant-input{float:left;width:100%;margin-bottom:0;text-align:inherit}.ant-input-group .ant-input:focus{z-index:1;border-right-width:1px}.ant-input-group .ant-input:hover{z-index:1;border-right-width:1px}.ant-input-search-with-button .ant-input-group .ant-input:hover{z-index:0}.ant-input-group-addon{position:relative;padding:0 11px;color:#000000d9;font-weight:400;font-size:14px;text-align:center;background-color:#fafafa;border:1px solid #d9d9d9;border-radius:2px;transition:all .3s}.ant-input-group-addon .ant-select{margin:-5px -11px}.ant-input-group-addon .ant-select.ant-select-single:not(.ant-select-customize-input) .ant-select-selector{background-color:inherit;border:1px solid transparent;box-shadow:none}.ant-input-group-addon .ant-select-open .ant-select-selector,.ant-input-group-addon .ant-select-focused .ant-select-selector{color:#1890ff}.ant-input-group-addon .ant-cascader-picker{margin:-9px -12px;background-color:transparent}.ant-input-group-addon .ant-cascader-picker .ant-cascader-input{text-align:left;border:0;box-shadow:none}.ant-input-group>.ant-input:first-child,.ant-input-group-addon:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.ant-input-group>.ant-input:first-child .ant-select .ant-select-selector,.ant-input-group-addon:first-child .ant-select .ant-select-selector{border-top-right-radius:0;border-bottom-right-radius:0}.ant-input-group>.ant-input-affix-wrapper:not(:first-child) .ant-input{border-top-left-radius:0;border-bottom-left-radius:0}.ant-input-group>.ant-input-affix-wrapper:not(:last-child) .ant-input{border-top-right-radius:0;border-bottom-right-radius:0}.ant-input-group-addon:first-child{border-right:0}.ant-input-group-addon:last-child{border-left:0}.ant-input-group>.ant-input:last-child,.ant-input-group-addon:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.ant-input-group>.ant-input:last-child .ant-select .ant-select-selector,.ant-input-group-addon:last-child .ant-select .ant-select-selector{border-top-left-radius:0;border-bottom-left-radius:0}.ant-input-group-lg .ant-input,.ant-input-group-lg>.ant-input-group-addon{padding:6.5px 11px;font-size:16px}.ant-input-group-sm .ant-input,.ant-input-group-sm>.ant-input-group-addon{padding:0 7px}.ant-input-group-lg .ant-select-single .ant-select-selector{height:40px}.ant-input-group-sm .ant-select-single .ant-select-selector{height:24px}.ant-input-group .ant-input-affix-wrapper:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.ant-input-search .ant-input-group .ant-input-affix-wrapper:not(:last-child){border-top-left-radius:2px;border-bottom-left-radius:2px}.ant-input-group .ant-input-affix-wrapper:not(:first-child),.ant-input-search .ant-input-group .ant-input-affix-wrapper:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.ant-input-group.ant-input-group-compact{display:block}.ant-input-group.ant-input-group-compact:before{display:table;content:""}.ant-input-group.ant-input-group-compact:after{display:table;clear:both;content:""}.ant-input-group.ant-input-group-compact-addon:not(:first-child):not(:last-child),.ant-input-group.ant-input-group-compact-wrap:not(:first-child):not(:last-child),.ant-input-group.ant-input-group-compact>.ant-input:not(:first-child):not(:last-child){border-right-width:1px}.ant-input-group.ant-input-group-compact-addon:not(:first-child):not(:last-child):hover,.ant-input-group.ant-input-group-compact-wrap:not(:first-child):not(:last-child):hover,.ant-input-group.ant-input-group-compact>.ant-input:not(:first-child):not(:last-child):hover{z-index:1}.ant-input-group.ant-input-group-compact-addon:not(:first-child):not(:last-child):focus,.ant-input-group.ant-input-group-compact-wrap:not(:first-child):not(:last-child):focus,.ant-input-group.ant-input-group-compact>.ant-input:not(:first-child):not(:last-child):focus{z-index:1}.ant-input-group.ant-input-group-compact>*{display:inline-block;float:none;vertical-align:top;border-radius:0}.ant-input-group.ant-input-group-compact>.ant-input-affix-wrapper{display:inline-flex}.ant-input-group.ant-input-group-compact>.ant-picker-range{display:inline-flex}.ant-input-group.ant-input-group-compact>*:not(:last-child){margin-right:-1px;border-right-width:1px}.ant-input-group.ant-input-group-compact .ant-input{float:none}.ant-input-group.ant-input-group-compact>.ant-select>.ant-select-selector,.ant-input-group.ant-input-group-compact>.ant-select-auto-complete .ant-input,.ant-input-group.ant-input-group-compact>.ant-cascader-picker .ant-input,.ant-input-group.ant-input-group-compact>.ant-input-group-wrapper .ant-input{border-right-width:1px;border-radius:0}.ant-input-group.ant-input-group-compact>.ant-select>.ant-select-selector:hover,.ant-input-group.ant-input-group-compact>.ant-select-auto-complete .ant-input:hover,.ant-input-group.ant-input-group-compact>.ant-cascader-picker .ant-input:hover,.ant-input-group.ant-input-group-compact>.ant-input-group-wrapper .ant-input:hover{z-index:1}.ant-input-group.ant-input-group-compact>.ant-select>.ant-select-selector:focus,.ant-input-group.ant-input-group-compact>.ant-select-auto-complete .ant-input:focus,.ant-input-group.ant-input-group-compact>.ant-cascader-picker .ant-input:focus,.ant-input-group.ant-input-group-compact>.ant-input-group-wrapper .ant-input:focus{z-index:1}.ant-input-group.ant-input-group-compact>.ant-select-focused{z-index:1}.ant-input-group.ant-input-group-compact>.ant-select>.ant-select-arrow{z-index:1}.ant-input-group.ant-input-group-compact>*:first-child,.ant-input-group.ant-input-group-compact>.ant-select:first-child>.ant-select-selector,.ant-input-group.ant-input-group-compact>.ant-select-auto-complete:first-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-cascader-picker:first-child .ant-input{border-top-left-radius:2px;border-bottom-left-radius:2px}.ant-input-group.ant-input-group-compact>*:last-child,.ant-input-group.ant-input-group-compact>.ant-select:last-child>.ant-select-selector,.ant-input-group.ant-input-group-compact>.ant-cascader-picker:last-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-cascader-picker-focused:last-child .ant-input{border-right-width:1px;border-top-right-radius:2px;border-bottom-right-radius:2px}.ant-input-group.ant-input-group-compact>.ant-select-auto-complete .ant-input{vertical-align:top}.ant-input-group.ant-input-group-compact .ant-input-group-wrapper+.ant-input-group-wrapper{margin-left:-1px}.ant-input-group.ant-input-group-compact .ant-input-group-wrapper+.ant-input-group-wrapper .ant-input-affix-wrapper{border-radius:0}.ant-input-group.ant-input-group-compact .ant-input-group-wrapper:not(:last-child).ant-input-search>.ant-input-group>.ant-input-group-addon>.ant-input-search-button{border-radius:0}.ant-input-group.ant-input-group-compact .ant-input-group-wrapper:not(:last-child).ant-input-search>.ant-input-group>.ant-input{border-radius:2px 0 0 2px}.ant-input-group>.ant-input-rtl:first-child,.ant-input-group-rtl .ant-input-group-addon:first-child{border-radius:0 2px 2px 0}.ant-input-group-rtl .ant-input-group-addon:first-child{border-right:1px solid #d9d9d9;border-left:0}.ant-input-group-rtl .ant-input-group-addon:last-child{border-right:0;border-left:1px solid #d9d9d9}.ant-input-group-rtl.ant-input-group>.ant-input:last-child,.ant-input-group-rtl.ant-input-group-addon:last-child{border-radius:2px 0 0 2px}.ant-input-group-rtl.ant-input-group .ant-input-affix-wrapper:not(:first-child){border-radius:2px 0 0 2px}.ant-input-group-rtl.ant-input-group .ant-input-affix-wrapper:not(:last-child){border-radius:0 2px 2px 0}.ant-input-group-rtl.ant-input-group.ant-input-group-compact>*:not(:last-child){margin-right:0;margin-left:-1px;border-left-width:1px}.ant-input-group-rtl.ant-input-group.ant-input-group-compact>*:first-child,.ant-input-group-rtl.ant-input-group.ant-input-group-compact>.ant-select:first-child>.ant-select-selector,.ant-input-group-rtl.ant-input-group.ant-input-group-compact>.ant-select-auto-complete:first-child .ant-input,.ant-input-group-rtl.ant-input-group.ant-input-group-compact>.ant-cascader-picker:first-child .ant-input{border-radius:0 2px 2px 0}.ant-input-group-rtl.ant-input-group.ant-input-group-compact>*:last-child,.ant-input-group-rtl.ant-input-group.ant-input-group-compact>.ant-select:last-child>.ant-select-selector,.ant-input-group-rtl.ant-input-group.ant-input-group-compact>.ant-select-auto-complete:last-child .ant-input,.ant-input-group-rtl.ant-input-group.ant-input-group-compact>.ant-cascader-picker:last-child .ant-input,.ant-input-group-rtl.ant-input-group.ant-input-group-compact>.ant-cascader-picker-focused:last-child .ant-input{border-left-width:1px;border-radius:2px 0 0 2px}.ant-input-group.ant-input-group-compact .ant-input-group-wrapper-rtl+.ant-input-group-wrapper-rtl{margin-right:-1px;margin-left:0}.ant-input-group.ant-input-group-compact .ant-input-group-wrapper-rtl:not(:last-child).ant-input-search>.ant-input-group>.ant-input{border-radius:0 2px 2px 0}.ant-input-group-wrapper{display:inline-block;width:100%;text-align:start;vertical-align:top}.ant-input-password-icon{color:#00000073;cursor:pointer;transition:all .3s}.ant-input-password-icon:hover{color:#000000d9}.ant-input[type=color]{height:32px}.ant-input[type=color].ant-input-lg{height:40px}.ant-input[type=color].ant-input-sm{height:24px;padding-top:3px;padding-bottom:3px}.ant-input-textarea-show-count>.ant-input{height:100%}.ant-input-textarea-show-count:after{float:right;color:#00000073;white-space:nowrap;content:attr(data-count);pointer-events:none}.ant-input-search .ant-input:hover,.ant-input-search .ant-input:focus{border-color:#40a9ff}.ant-input-search .ant-input:hover+.ant-input-group-addon .ant-input-search-button:not(.ant-btn-primary),.ant-input-search .ant-input:focus+.ant-input-group-addon .ant-input-search-button:not(.ant-btn-primary){border-left-color:#40a9ff}.ant-input-search .ant-input-affix-wrapper{border-radius:0}.ant-input-search .ant-input-lg{line-height:1.5713}.ant-input-search>.ant-input-group>.ant-input-group-addon:last-child{left:-1px;padding:0;border:0}.ant-input-search>.ant-input-group>.ant-input-group-addon:last-child .ant-input-search-button{padding-top:0;padding-bottom:0;border-radius:0 2px 2px 0}.ant-input-search>.ant-input-group>.ant-input-group-addon:last-child .ant-input-search-button:not(.ant-btn-primary){color:#00000073}.ant-input-search>.ant-input-group>.ant-input-group-addon:last-child .ant-input-search-button:not(.ant-btn-primary).ant-btn-loading:before{top:0;right:0;bottom:0;left:0}.ant-input-search-button{height:32px}.ant-input-search-button:hover,.ant-input-search-button:focus{z-index:1}.ant-input-search-large .ant-input-search-button{height:40px}.ant-input-search-small .ant-input-search-button{height:24px}.ant-input-group-wrapper-rtl,.ant-input-group-rtl{direction:rtl}.ant-input-affix-wrapper.ant-input-affix-wrapper-rtl>input.ant-input{border:none;outline:none}.ant-input-affix-wrapper-rtl .ant-input-prefix{margin:0 0 0 4px}.ant-input-affix-wrapper-rtl .ant-input-suffix{margin:0 4px 0 0}.ant-input-textarea-rtl{direction:rtl}.ant-input-textarea-rtl.ant-input-textarea-show-count:after{text-align:left}.ant-input-affix-wrapper-rtl .ant-input-clear-icon-has-suffix{margin-right:0;margin-left:4px}.ant-input-affix-wrapper-rtl .ant-input-clear-icon{right:auto;left:8px}.ant-input-search-rtl{direction:rtl}.ant-input-search-rtl .ant-input:hover+.ant-input-group-addon .ant-input-search-button:not(.ant-btn-primary),.ant-input-search-rtl .ant-input:focus+.ant-input-group-addon .ant-input-search-button:not(.ant-btn-primary){border-right-color:#40a9ff;border-left-color:#d9d9d9}.ant-input-search-rtl>.ant-input-group>.ant-input-affix-wrapper:hover,.ant-input-search-rtl>.ant-input-group>.ant-input-affix-wrapper-focused{border-right-color:#40a9ff}.ant-input-search-rtl>.ant-input-group>.ant-input-group-addon{right:-1px;left:auto}.ant-input-search-rtl>.ant-input-group>.ant-input-group-addon .ant-input-search-button{border-radius:2px 0 0 2px}@media screen and (-ms-high-contrast: active),(-ms-high-contrast: none){.ant-input{height:32px}.ant-input-lg{height:40px}.ant-input-sm{height:24px}.ant-input-affix-wrapper>input.ant-input{height:auto}}/*!***********************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/layout/style/index.less ***! + \***********************************************************************************************************************************************************************************************************************************************************/.ant-layout{display:flex;flex:auto;flex-direction:column;min-height:0;background:#f0f2f5}.ant-layout,.ant-layout *{box-sizing:border-box}.ant-layout.ant-layout-has-sider{flex-direction:row}.ant-layout.ant-layout-has-sider>.ant-layout,.ant-layout.ant-layout-has-sider>.ant-layout-content{width:0}.ant-layout-header,.ant-layout-footer{flex:0 0 auto}.ant-layout-header{height:64px;padding:0 50px;color:#000000d9;line-height:64px;background:#001529}.ant-layout-footer{padding:24px 50px;color:#000000d9;font-size:14px;background:#f0f2f5}.ant-layout-content{flex:auto;min-height:0}.ant-layout-sider{position:relative;min-width:0;background:#001529;transition:all .2s}.ant-layout-sider-children{height:100%;margin-top:-.1px;padding-top:.1px}.ant-layout-sider-children .ant-menu.ant-menu-inline-collapsed{width:auto}.ant-layout-sider-has-trigger{padding-bottom:48px}.ant-layout-sider-right{order:1}.ant-layout-sider-trigger{position:fixed;bottom:0;z-index:1;height:48px;color:#fff;line-height:48px;text-align:center;background:#002140;cursor:pointer;transition:all .2s}.ant-layout-sider-zero-width>*{overflow:hidden}.ant-layout-sider-zero-width-trigger{position:absolute;top:64px;right:-36px;z-index:1;width:36px;height:42px;color:#fff;font-size:18px;line-height:42px;text-align:center;background:#001529;border-radius:0 2px 2px 0;cursor:pointer;transition:background .3s ease}.ant-layout-sider-zero-width-trigger:after{position:absolute;top:0;right:0;bottom:0;left:0;background:transparent;transition:all .3s;content:""}.ant-layout-sider-zero-width-trigger:hover:after{background:rgba(255,255,255,.1)}.ant-layout-sider-zero-width-trigger-right{left:-36px;border-radius:2px 0 0 2px}.ant-layout-sider-light{background:#fff}.ant-layout-sider-light .ant-layout-sider-trigger,.ant-layout-sider-light .ant-layout-sider-zero-width-trigger{color:#000000d9;background:#fff}.ant-layout-rtl{direction:rtl}/*!*********************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/list/style/index.less ***! + \*********************************************************************************************************************************************************************************************************************************************************/.ant-list{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative}.ant-list *{outline:none}.ant-list-pagination{margin-top:24px;text-align:right}.ant-list-pagination .ant-pagination-options{text-align:left}.ant-list-more{margin-top:12px;text-align:center}.ant-list-more button{padding-right:32px;padding-left:32px}.ant-list-spin{min-height:40px;text-align:center}.ant-list-empty-text{padding:16px;color:#00000040;font-size:14px;text-align:center}.ant-list-items{margin:0;padding:0;list-style:none}.ant-list-item{display:flex;align-items:center;justify-content:space-between;padding:12px 0;color:#000000d9}.ant-list-item-meta{display:flex;flex:1;align-items:flex-start;max-width:100%}.ant-list-item-meta-avatar{margin-right:16px}.ant-list-item-meta-content{flex:1 0;width:0;color:#000000d9}.ant-list-item-meta-title{margin-bottom:4px;color:#000000d9;font-size:14px;line-height:1.5715}.ant-list-item-meta-title>a{color:#000000d9;transition:all .3s}.ant-list-item-meta-title>a:hover{color:#1890ff}.ant-list-item-meta-description{color:#00000073;font-size:14px;line-height:1.5715}.ant-list-item-action{flex:0 0 auto;margin-left:48px;padding:0;font-size:0;list-style:none}.ant-list-item-action>li{position:relative;display:inline-block;padding:0 8px;color:#00000073;font-size:14px;line-height:1.5715;text-align:center}.ant-list-item-action>li:first-child{padding-left:0}.ant-list-item-action-split{position:absolute;top:50%;right:0;width:1px;height:14px;margin-top:-7px;background-color:#f0f0f0}.ant-list-header,.ant-list-footer{background:transparent}.ant-list-header,.ant-list-footer{padding-top:12px;padding-bottom:12px}.ant-list-empty{padding:16px 0;color:#00000073;font-size:12px;text-align:center}.ant-list-split .ant-list-item{border-bottom:1px solid #f0f0f0}.ant-list-split .ant-list-item:last-child{border-bottom:none}.ant-list-split .ant-list-header{border-bottom:1px solid #f0f0f0}.ant-list-split.ant-list-empty .ant-list-footer{border-top:1px solid #f0f0f0}.ant-list-loading .ant-list-spin-nested-loading{min-height:32px}.ant-list-split.ant-list-something-after-last-item .ant-spin-container>.ant-list-items>.ant-list-item:last-child{border-bottom:1px solid #f0f0f0}.ant-list-lg .ant-list-item{padding:16px 24px}.ant-list-sm .ant-list-item{padding:8px 16px}.ant-list-vertical .ant-list-item{align-items:initial}.ant-list-vertical .ant-list-item-main{display:block;flex:1}.ant-list-vertical .ant-list-item-extra{margin-left:40px}.ant-list-vertical .ant-list-item-meta{margin-bottom:16px}.ant-list-vertical .ant-list-item-meta-title{margin-bottom:12px;color:#000000d9;font-size:16px;line-height:24px}.ant-list-vertical .ant-list-item-action{margin-top:16px;margin-left:auto}.ant-list-vertical .ant-list-item-action>li{padding:0 16px}.ant-list-vertical .ant-list-item-action>li:first-child{padding-left:0}.ant-list-grid .ant-col>.ant-list-item{display:block;max-width:100%;margin-bottom:16px;padding-top:0;padding-bottom:0;border-bottom:none}.ant-list-item-no-flex{display:block}.ant-list:not(.ant-list-vertical) .ant-list-item-no-flex .ant-list-item-action{float:right}.ant-list-bordered{border:1px solid #d9d9d9;border-radius:2px}.ant-list-bordered .ant-list-header,.ant-list-bordered .ant-list-footer,.ant-list-bordered .ant-list-item{padding-right:24px;padding-left:24px}.ant-list-bordered .ant-list-pagination{margin:16px 24px}.ant-list-bordered.ant-list-sm .ant-list-item,.ant-list-bordered.ant-list-sm .ant-list-header,.ant-list-bordered.ant-list-sm .ant-list-footer{padding:8px 16px}.ant-list-bordered.ant-list-lg .ant-list-item,.ant-list-bordered.ant-list-lg .ant-list-header,.ant-list-bordered.ant-list-lg .ant-list-footer{padding:16px 24px}@media screen and (max-width: 768px){.ant-list-item-action,.ant-list-vertical .ant-list-item-extra{margin-left:24px}}@media screen and (max-width: 576px){.ant-list-item{flex-wrap:wrap}.ant-list-item-action{margin-left:12px}.ant-list-vertical .ant-list-item{flex-wrap:wrap-reverse}.ant-list-vertical .ant-list-item-main{min-width:220px}.ant-list-vertical .ant-list-item-extra{margin:auto auto 16px}}.ant-list-rtl{direction:rtl;text-align:right}.ant-list-rtl .ReactVirtualized__List .ant-list-item{direction:rtl}.ant-list-rtl .ant-list-pagination{text-align:left}.ant-list-rtl .ant-list-item-meta-avatar{margin-right:0;margin-left:16px}.ant-list-rtl .ant-list-item-action{margin-right:48px;margin-left:0}.ant-list.ant-list-rtl .ant-list-item-action>li:first-child{padding-right:0;padding-left:16px}.ant-list-rtl .ant-list-item-action-split{right:auto;left:0}.ant-list-rtl.ant-list-vertical .ant-list-item-extra{margin-right:40px;margin-left:0}.ant-list-rtl.ant-list-vertical .ant-list-item-action{margin-right:auto}.ant-list-rtl .ant-list-vertical .ant-list-item-action>li:first-child{padding-right:0;padding-left:16px}.ant-list-rtl .ant-list:not(.ant-list-vertical) .ant-list-item-no-flex .ant-list-item-action{float:left}@media screen and (max-width: 768px){.ant-list-rtl .ant-list-item-action,.ant-list-rtl .ant-list-vertical .ant-list-item-extra{margin-right:24px;margin-left:0}}@media screen and (max-width: 576px){.ant-list-rtl .ant-list-item-action{margin-right:22px;margin-left:0}.ant-list-rtl.ant-list-vertical .ant-list-item-extra{margin:auto auto 16px}}/*!*********************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/spin/style/index.less ***! + \*********************************************************************************************************************************************************************************************************************************************************/.ant-spin{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:absolute;display:none;color:#1890ff;text-align:center;vertical-align:middle;opacity:0;transition:transform .3s cubic-bezier(.78,.14,.15,.86)}.ant-spin-spinning{position:static;display:inline-block;opacity:1}.ant-spin-nested-loading{position:relative}.ant-spin-nested-loading>div>.ant-spin{position:absolute;top:0;left:0;z-index:4;display:block;width:100%;height:100%;max-height:400px}.ant-spin-nested-loading>div>.ant-spin .ant-spin-dot{position:absolute;top:50%;left:50%;margin:-10px}.ant-spin-nested-loading>div>.ant-spin .ant-spin-text{position:absolute;top:50%;width:100%;padding-top:5px;text-shadow:0 1px 2px #fff}.ant-spin-nested-loading>div>.ant-spin.ant-spin-show-text .ant-spin-dot{margin-top:-20px}.ant-spin-nested-loading>div>.ant-spin-sm .ant-spin-dot{margin:-7px}.ant-spin-nested-loading>div>.ant-spin-sm .ant-spin-text{padding-top:2px}.ant-spin-nested-loading>div>.ant-spin-sm.ant-spin-show-text .ant-spin-dot{margin-top:-17px}.ant-spin-nested-loading>div>.ant-spin-lg .ant-spin-dot{margin:-16px}.ant-spin-nested-loading>div>.ant-spin-lg .ant-spin-text{padding-top:11px}.ant-spin-nested-loading>div>.ant-spin-lg.ant-spin-show-text .ant-spin-dot{margin-top:-26px}.ant-spin-container{position:relative;transition:opacity .3s}.ant-spin-container:after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:10;display:none \ ;width:100%;height:100%;background:#fff;opacity:0;transition:all .3s;content:"";pointer-events:none}.ant-spin-blur{clear:both;opacity:.5;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:none}.ant-spin-blur:after{opacity:.4;pointer-events:auto}.ant-spin-tip{color:#00000073}.ant-spin-dot{position:relative;display:inline-block;font-size:20px;width:1em;height:1em}.ant-spin-dot-item{position:absolute;display:block;width:9px;height:9px;background-color:#1890ff;border-radius:100%;transform:scale(.75);transform-origin:50% 50%;opacity:.3;animation:antSpinMove 1s infinite linear alternate}.ant-spin-dot-item:nth-child(1){top:0;left:0}.ant-spin-dot-item:nth-child(2){top:0;right:0;animation-delay:.4s}.ant-spin-dot-item:nth-child(3){right:0;bottom:0;animation-delay:.8s}.ant-spin-dot-item:nth-child(4){bottom:0;left:0;animation-delay:1.2s}.ant-spin-dot-spin{transform:rotate(45deg);animation:antRotate 1.2s infinite linear}.ant-spin-sm .ant-spin-dot{font-size:14px}.ant-spin-sm .ant-spin-dot i{width:6px;height:6px}.ant-spin-lg .ant-spin-dot{font-size:32px}.ant-spin-lg .ant-spin-dot i{width:14px;height:14px}.ant-spin.ant-spin-show-text .ant-spin-text{display:block}@media all and (-ms-high-contrast: none),(-ms-high-contrast: active){.ant-spin-blur{background:#fff;opacity:.5}}@keyframes antSpinMove{to{opacity:1}}@keyframes antRotate{to{transform:rotate(405deg)}}.ant-spin-rtl{direction:rtl}.ant-spin-rtl .ant-spin-dot-spin{transform:rotate(-45deg);animation-name:antRotateRtl}@keyframes antRotateRtl{to{transform:rotate(-405deg)}}/*!***************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/pagination/style/index.less ***! + \***************************************************************************************************************************************************************************************************************************************************************/.ant-pagination{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum"}.ant-pagination ul,.ant-pagination ol{margin:0;padding:0;list-style:none}.ant-pagination:after{display:block;clear:both;height:0;overflow:hidden;visibility:hidden;content:" "}.ant-pagination-total-text{display:inline-block;height:32px;margin-right:8px;line-height:30px;vertical-align:middle}.ant-pagination-item{display:inline-block;min-width:32px;height:32px;margin-right:8px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";line-height:30px;text-align:center;vertical-align:middle;list-style:none;background-color:#fff;border:1px solid #d9d9d9;border-radius:2px;outline:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-pagination-item a{display:block;padding:0 6px;color:#000000d9;transition:none}.ant-pagination-item a:hover{text-decoration:none}.ant-pagination-item:hover{border-color:#1890ff;transition:all .3s}.ant-pagination-item:hover a{color:#1890ff}.ant-pagination-item:focus-visible{border-color:#1890ff;transition:all .3s}.ant-pagination-item:focus-visible a{color:#1890ff}.ant-pagination-item-active{font-weight:500;background:#fff;border-color:#1890ff}.ant-pagination-item-active a{color:#1890ff}.ant-pagination-item-active:hover{border-color:#40a9ff}.ant-pagination-item-active:focus-visible{border-color:#40a9ff}.ant-pagination-item-active:hover a{color:#40a9ff}.ant-pagination-item-active:focus-visible a{color:#40a9ff}.ant-pagination-jump-prev,.ant-pagination-jump-next{outline:0}.ant-pagination-jump-prev .ant-pagination-item-container,.ant-pagination-jump-next .ant-pagination-item-container{position:relative}.ant-pagination-jump-prev .ant-pagination-item-container .ant-pagination-item-link-icon,.ant-pagination-jump-next .ant-pagination-item-container .ant-pagination-item-link-icon{color:#1890ff;font-size:12px;letter-spacing:-1px;opacity:0;transition:all .2s}.ant-pagination-jump-prev .ant-pagination-item-container .ant-pagination-item-link-icon-svg,.ant-pagination-jump-next .ant-pagination-item-container .ant-pagination-item-link-icon-svg{top:0;right:0;bottom:0;left:0;margin:auto}.ant-pagination-jump-prev .ant-pagination-item-container .ant-pagination-item-ellipsis,.ant-pagination-jump-next .ant-pagination-item-container .ant-pagination-item-ellipsis{position:absolute;top:0;right:0;bottom:0;left:0;display:block;margin:auto;color:#00000040;font-family:Arial,Helvetica,sans-serif;letter-spacing:2px;text-align:center;text-indent:.13em;opacity:1;transition:all .2s}.ant-pagination-jump-prev:hover .ant-pagination-item-link-icon,.ant-pagination-jump-next:hover .ant-pagination-item-link-icon{opacity:1}.ant-pagination-jump-prev:hover .ant-pagination-item-ellipsis,.ant-pagination-jump-next:hover .ant-pagination-item-ellipsis{opacity:0}.ant-pagination-jump-prev:focus-visible .ant-pagination-item-link-icon,.ant-pagination-jump-next:focus-visible .ant-pagination-item-link-icon{opacity:1}.ant-pagination-jump-prev:focus-visible .ant-pagination-item-ellipsis,.ant-pagination-jump-next:focus-visible .ant-pagination-item-ellipsis{opacity:0}.ant-pagination-prev,.ant-pagination-jump-prev,.ant-pagination-jump-next{margin-right:8px}.ant-pagination-prev,.ant-pagination-next,.ant-pagination-jump-prev,.ant-pagination-jump-next{display:inline-block;min-width:32px;height:32px;color:#000000d9;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";line-height:32px;text-align:center;vertical-align:middle;list-style:none;border-radius:2px;cursor:pointer;transition:all .3s}.ant-pagination-prev,.ant-pagination-next{font-family:Arial,Helvetica,sans-serif;outline:0}.ant-pagination-prev button,.ant-pagination-next button{color:#000000d9;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-pagination-prev:hover button,.ant-pagination-next:hover button{border-color:#40a9ff}.ant-pagination-prev .ant-pagination-item-link,.ant-pagination-next .ant-pagination-item-link{display:block;width:100%;height:100%;padding:0;font-size:12px;text-align:center;background-color:#fff;border:1px solid #d9d9d9;border-radius:2px;outline:none;transition:all .3s}.ant-pagination-prev:focus-visible .ant-pagination-item-link,.ant-pagination-next:focus-visible .ant-pagination-item-link{color:#1890ff;border-color:#1890ff}.ant-pagination-prev:hover .ant-pagination-item-link,.ant-pagination-next:hover .ant-pagination-item-link{color:#1890ff;border-color:#1890ff}.ant-pagination-disabled,.ant-pagination-disabled:hover{cursor:not-allowed}.ant-pagination-disabled .ant-pagination-item-link,.ant-pagination-disabled:hover .ant-pagination-item-link{color:#00000040;border-color:#d9d9d9;cursor:not-allowed}.ant-pagination-disabled:focus-visible{cursor:not-allowed}.ant-pagination-disabled:focus-visible .ant-pagination-item-link{color:#00000040;border-color:#d9d9d9;cursor:not-allowed}.ant-pagination-slash{margin:0 10px 0 5px}.ant-pagination-options{display:inline-block;margin-left:16px;vertical-align:middle}@media all and (-ms-high-contrast: none){.ant-pagination-options *::-ms-backdrop,.ant-pagination-options{vertical-align:top}}.ant-pagination-options-size-changer.ant-select{display:inline-block;width:auto}.ant-pagination-options-quick-jumper{display:inline-block;height:32px;margin-left:8px;line-height:32px;vertical-align:top}.ant-pagination-options-quick-jumper input{position:relative;display:inline-block;width:100%;min-width:0;padding:4px 11px;color:#000000d9;font-size:14px;line-height:1.5715;background-color:#fff;background-image:none;border:1px solid #d9d9d9;border-radius:2px;transition:all .3s;width:50px;height:32px;margin:0 8px}.ant-pagination-options-quick-jumper input::-moz-placeholder{opacity:1}.ant-pagination-options-quick-jumper input::placeholder{color:#bfbfbf;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-pagination-options-quick-jumper input:-moz-placeholder-shown{text-overflow:ellipsis}.ant-pagination-options-quick-jumper input:placeholder-shown{text-overflow:ellipsis}.ant-pagination-options-quick-jumper input:hover{border-color:#40a9ff;border-right-width:1px!important}.ant-pagination-options-quick-jumper input:focus,.ant-pagination-options-quick-jumper input-focused{border-color:#40a9ff;box-shadow:0 0 0 2px #1890ff33;border-right-width:1px!important;outline:0}.ant-pagination-options-quick-jumper input-disabled{color:#00000040;background-color:#f5f5f5;border-color:#d9d9d9;box-shadow:none;cursor:not-allowed;opacity:1}.ant-pagination-options-quick-jumper input-disabled:hover{border-color:#d9d9d9;border-right-width:1px!important}.ant-pagination-options-quick-jumper input[disabled]{color:#00000040;background-color:#f5f5f5;border-color:#d9d9d9;box-shadow:none;cursor:not-allowed;opacity:1}.ant-pagination-options-quick-jumper input[disabled]:hover{border-color:#d9d9d9;border-right-width:1px!important}.ant-pagination-options-quick-jumper input-borderless,.ant-pagination-options-quick-jumper input-borderless:hover,.ant-pagination-options-quick-jumper input-borderless:focus,.ant-pagination-options-quick-jumper input-borderless-focused,.ant-pagination-options-quick-jumper input-borderless-disabled,.ant-pagination-options-quick-jumper input-borderless[disabled]{background-color:transparent;border:none;box-shadow:none}textarea.ant-pagination-options-quick-jumper input{max-width:100%;height:auto;min-height:32px;line-height:1.5715;vertical-align:bottom;transition:all .3s,height 0s}.ant-pagination-options-quick-jumper input-lg{padding:6.5px 11px;font-size:16px}.ant-pagination-options-quick-jumper input-sm{padding:0 7px}.ant-pagination-simple .ant-pagination-prev,.ant-pagination-simple .ant-pagination-next{height:24px;line-height:24px;vertical-align:top}.ant-pagination-simple .ant-pagination-prev .ant-pagination-item-link,.ant-pagination-simple .ant-pagination-next .ant-pagination-item-link{height:24px;background-color:transparent;border:0}.ant-pagination-simple .ant-pagination-prev .ant-pagination-item-link:after,.ant-pagination-simple .ant-pagination-next .ant-pagination-item-link:after{height:24px;line-height:24px}.ant-pagination-simple .ant-pagination-simple-pager{display:inline-block;height:24px;margin-right:8px}.ant-pagination-simple .ant-pagination-simple-pager input{box-sizing:border-box;height:100%;margin-right:8px;padding:0 6px;text-align:center;background-color:#fff;border:1px solid #d9d9d9;border-radius:2px;outline:none;transition:border-color .3s}.ant-pagination-simple .ant-pagination-simple-pager input:hover{border-color:#1890ff}.ant-pagination-simple .ant-pagination-simple-pager input:focus{border-color:#40a9ff;box-shadow:0 0 0 2px #1890ff33}.ant-pagination-simple .ant-pagination-simple-pager input[disabled]{color:#00000040;background:#f5f5f5;border-color:#d9d9d9;cursor:not-allowed}.ant-pagination.mini .ant-pagination-total-text,.ant-pagination.mini .ant-pagination-simple-pager{height:24px;line-height:24px}.ant-pagination.mini .ant-pagination-item{min-width:24px;height:24px;margin:0;line-height:22px}.ant-pagination.mini .ant-pagination-item:not(.ant-pagination-item-active){background:transparent;border-color:transparent}.ant-pagination.mini .ant-pagination-prev,.ant-pagination.mini .ant-pagination-next{min-width:24px;height:24px;margin:0;line-height:24px}.ant-pagination.mini .ant-pagination-prev .ant-pagination-item-link,.ant-pagination.mini .ant-pagination-next .ant-pagination-item-link{background:transparent;border-color:transparent}.ant-pagination.mini .ant-pagination-prev .ant-pagination-item-link:after,.ant-pagination.mini .ant-pagination-next .ant-pagination-item-link:after{height:24px;line-height:24px}.ant-pagination.mini .ant-pagination-jump-prev,.ant-pagination.mini .ant-pagination-jump-next{height:24px;margin-right:0;line-height:24px}.ant-pagination.mini .ant-pagination-options{margin-left:2px}.ant-pagination.mini .ant-pagination-options-size-changer{top:0}.ant-pagination.mini .ant-pagination-options-quick-jumper{height:24px;line-height:24px}.ant-pagination.mini .ant-pagination-options-quick-jumper input{padding:0 7px;width:44px;height:24px}.ant-pagination.ant-pagination-disabled{cursor:not-allowed}.ant-pagination.ant-pagination-disabled .ant-pagination-item{background:#f5f5f5;border-color:#d9d9d9;cursor:not-allowed}.ant-pagination.ant-pagination-disabled .ant-pagination-item a{color:#00000040;background:transparent;border:none;cursor:not-allowed}.ant-pagination.ant-pagination-disabled .ant-pagination-item-active{background:#e6e6e6}.ant-pagination.ant-pagination-disabled .ant-pagination-item-active a{color:#00000040}.ant-pagination.ant-pagination-disabled .ant-pagination-item-link{color:#00000040;background:#f5f5f5;border-color:#d9d9d9;cursor:not-allowed}.ant-pagination-simple.ant-pagination.ant-pagination-disabled .ant-pagination-item-link{background:transparent}.ant-pagination.ant-pagination-disabled .ant-pagination-item-link-icon{opacity:0}.ant-pagination.ant-pagination-disabled .ant-pagination-item-ellipsis{opacity:1}.ant-pagination.ant-pagination-disabled .ant-pagination-simple-pager{color:#00000040}@media only screen and (max-width: 992px){.ant-pagination-item-after-jump-prev,.ant-pagination-item-before-jump-next{display:none}}@media only screen and (max-width: 576px){.ant-pagination-options{display:none}}.ant-pagination-rtl .ant-pagination-total-text,.ant-pagination-rtl .ant-pagination-item,.ant-pagination-rtl .ant-pagination-prev,.ant-pagination-rtl .ant-pagination-jump-prev,.ant-pagination-rtl .ant-pagination-jump-next{margin-right:0;margin-left:8px}.ant-pagination-rtl .ant-pagination-slash{margin:0 5px 0 10px}.ant-pagination-rtl .ant-pagination-options{margin-right:16px;margin-left:0}.ant-pagination-rtl .ant-pagination-options .ant-pagination-options-size-changer.ant-select{margin-right:0;margin-left:8px}.ant-pagination-rtl .ant-pagination-options .ant-pagination-options-quick-jumper{margin-left:0}.ant-pagination-rtl.ant-pagination-simple .ant-pagination-simple-pager,.ant-pagination-rtl.ant-pagination-simple .ant-pagination-simple-pager input{margin-right:0;margin-left:8px}.ant-pagination-rtl.ant-pagination.mini .ant-pagination-options{margin-right:2px;margin-left:0}/*!********************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/locale-provider/style/index.less ***! + \********************************************************************************************************************************************************************************************************************************************************************//*!*************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/mentions/style/index.less ***! + \*************************************************************************************************************************************************************************************************************************************************************/.ant-mentions{box-sizing:border-box;margin:0;font-variant:tabular-nums;list-style:none;font-feature-settings:"tnum";width:100%;min-width:0;color:#000000d9;font-size:14px;background-color:#fff;background-image:none;border:1px solid #d9d9d9;border-radius:2px;transition:all .3s;position:relative;display:inline-block;height:auto;padding:0;overflow:hidden;line-height:1.5715;white-space:pre-wrap;vertical-align:bottom}.ant-mentions::-moz-placeholder{opacity:1}.ant-mentions::placeholder{color:#bfbfbf;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-mentions:-moz-placeholder-shown{text-overflow:ellipsis}.ant-mentions:placeholder-shown{text-overflow:ellipsis}.ant-mentions:hover{border-color:#40a9ff;border-right-width:1px!important}.ant-mentions:focus,.ant-mentions-focused{border-color:#40a9ff;box-shadow:0 0 0 2px #1890ff33;border-right-width:1px!important;outline:0}.ant-mentions-disabled{color:#00000040;background-color:#f5f5f5;border-color:#d9d9d9;box-shadow:none;cursor:not-allowed;opacity:1}.ant-mentions-disabled:hover{border-color:#d9d9d9;border-right-width:1px!important}.ant-mentions[disabled]{color:#00000040;background-color:#f5f5f5;border-color:#d9d9d9;box-shadow:none;cursor:not-allowed;opacity:1}.ant-mentions[disabled]:hover{border-color:#d9d9d9;border-right-width:1px!important}.ant-mentions-borderless,.ant-mentions-borderless:hover,.ant-mentions-borderless:focus,.ant-mentions-borderless-focused,.ant-mentions-borderless-disabled,.ant-mentions-borderless[disabled]{background-color:transparent;border:none;box-shadow:none}textarea.ant-mentions{max-width:100%;height:auto;min-height:32px;line-height:1.5715;vertical-align:bottom;transition:all .3s,height 0s}.ant-mentions-lg{padding:6.5px 11px;font-size:16px}.ant-mentions-sm{padding:0 7px}.ant-mentions-disabled>textarea{color:#00000040;background-color:#f5f5f5;border-color:#d9d9d9;box-shadow:none;cursor:not-allowed;opacity:1}.ant-mentions-disabled>textarea:hover{border-color:#d9d9d9;border-right-width:1px!important}.ant-mentions-focused{border-color:#40a9ff;box-shadow:0 0 0 2px #1890ff33;border-right-width:1px!important;outline:0}.ant-mentions>textarea,.ant-mentions-measure{min-height:30px;margin:0;padding:4px 11px;overflow:inherit;overflow-x:hidden;overflow-y:auto;font-weight:inherit;font-size:inherit;font-family:inherit;font-style:inherit;font-variant:inherit;font-size-adjust:inherit;font-stretch:inherit;line-height:inherit;direction:inherit;letter-spacing:inherit;white-space:inherit;text-align:inherit;vertical-align:top;word-wrap:break-word;word-break:inherit;-moz-tab-size:inherit;-o-tab-size:inherit;tab-size:inherit}.ant-mentions>textarea{width:100%;border:none;outline:none;resize:none}.ant-mentions>textarea::-moz-placeholder{opacity:1}.ant-mentions>textarea::placeholder{color:#bfbfbf;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-mentions>textarea:-moz-placeholder-shown{text-overflow:ellipsis}.ant-mentions>textarea:placeholder-shown{text-overflow:ellipsis}.ant-mentions-measure{position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1;color:transparent;pointer-events:none}.ant-mentions-measure>span{display:inline-block;min-height:1em}.ant-mentions-dropdown{margin:0;padding:0;color:#000000d9;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:absolute;top:-9999px;left:-9999px;z-index:1050;box-sizing:border-box;font-size:14px;font-variant:initial;background-color:#fff;border-radius:2px;outline:none;box-shadow:0 3px 6px -4px #0000001f,0 6px 16px #00000014,0 9px 28px 8px #0000000d}.ant-mentions-dropdown-hidden{display:none}.ant-mentions-dropdown-menu{max-height:250px;margin-bottom:0;padding-left:0;overflow:auto;list-style:none;outline:none}.ant-mentions-dropdown-menu-item{position:relative;display:block;min-width:100px;padding:5px 12px;overflow:hidden;color:#000000d9;font-weight:400;line-height:1.5715;white-space:nowrap;text-overflow:ellipsis;cursor:pointer;transition:background .3s ease}.ant-mentions-dropdown-menu-item:hover{background-color:#f5f5f5}.ant-mentions-dropdown-menu-item:first-child{border-radius:2px 2px 0 0}.ant-mentions-dropdown-menu-item:last-child{border-radius:0 0 2px 2px}.ant-mentions-dropdown-menu-item-disabled{color:#00000040;cursor:not-allowed}.ant-mentions-dropdown-menu-item-disabled:hover{color:#00000040;background-color:#fff;cursor:not-allowed}.ant-mentions-dropdown-menu-item-selected{color:#000000d9;font-weight:600;background-color:#fafafa}.ant-mentions-dropdown-menu-item-active{background-color:#f5f5f5}.ant-mentions-rtl{direction:rtl}/*!************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/message/style/index.less ***! + \************************************************************************************************************************************************************************************************************************************************************/.ant-message{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:fixed;top:8px;left:0;z-index:1010;width:100%;pointer-events:none}.ant-message-notice{padding:8px;text-align:center}.ant-message-notice-content{display:inline-block;padding:10px 16px;background:#fff;border-radius:2px;box-shadow:0 3px 6px -4px #0000001f,0 6px 16px #00000014,0 9px 28px 8px #0000000d;pointer-events:all}.ant-message-success .anticon{color:#52c41a}.ant-message-error .anticon{color:#ff4d4f}.ant-message-warning .anticon{color:#faad14}.ant-message-info .anticon,.ant-message-loading .anticon{color:#1890ff}.ant-message .anticon{position:relative;top:1px;margin-right:8px;font-size:16px}.ant-message-notice.ant-move-up-leave.ant-move-up-leave-active{animation-name:MessageMoveOut;animation-duration:.3s}@keyframes MessageMoveOut{0%{max-height:150px;padding:8px;opacity:1}to{max-height:0;padding:0;opacity:0}}.ant-message-rtl,.ant-message-rtl span{direction:rtl}.ant-message-rtl .anticon{margin-right:0;margin-left:8px}/*!**********************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/modal/style/index.less ***! + \**********************************************************************************************************************************************************************************************************************************************************/.ant-modal{box-sizing:border-box;padding:0 0 24px;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";pointer-events:none;position:relative;top:100px;width:auto;max-width:calc(100vw - 32px);margin:0 auto}.ant-modal.ant-zoom-enter,.ant-modal.antzoom-appear{transform:none;opacity:0;animation-duration:.3s;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;height:100%;background-color:#00000073}.ant-modal-mask-hidden{display:none}.ant-modal-wrap{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto;outline:0;-webkit-overflow-scrolling:touch}.ant-modal-wrap{z-index:1000}.ant-modal-title{margin:0;color:#000000d9;font-weight:500;font-size:16px;line-height:22px;word-wrap:break-word}.ant-modal-content{position:relative;background-color:#fff;background-clip:padding-box;border:0;border-radius:2px;box-shadow:0 3px 6px -4px #0000001f,0 6px 16px #00000014,0 9px 28px 8px #0000000d;pointer-events:auto}.ant-modal-close{position:absolute;top:0;right:0;z-index:10;padding:0;color:#00000073;font-weight:700;line-height:1;text-decoration:none;background:transparent;border:0;outline:0;cursor:pointer;transition:color .3s}.ant-modal-close-x{display:block;width:56px;height:56px;font-size:16px;font-style:normal;line-height:56px;text-align:center;text-transform:none;text-rendering:auto}.ant-modal-close:focus,.ant-modal-close:hover{color:#000000bf;text-decoration:none}.ant-modal-header{padding:16px 24px;color:#000000d9;background:#fff;border-bottom:1px solid #f0f0f0;border-radius:2px 2px 0 0}.ant-modal-body{padding:24px;font-size:14px;line-height:1.5715;word-wrap:break-word}.ant-modal-footer{padding:10px 16px;text-align:right;background:transparent;border-top:1px solid #f0f0f0;border-radius:0 0 2px 2px}.ant-modal-footer .ant-btn+.ant-btn:not(.ant-dropdown-trigger){margin-bottom:0;margin-left:8px}.ant-modal-open{overflow:hidden}.ant-modal-centered{text-align:center}.ant-modal-centered:before{display:inline-block;width:0;height:100%;vertical-align:middle;content:""}.ant-modal-centered .ant-modal{top:0;display:inline-block;padding-bottom:0;text-align:left;vertical-align:middle}@media (max-width: 767px){.ant-modal{max-width:calc(100vw - 16px);margin:8px auto}.ant-modal-centered .ant-modal{flex:1}}.ant-modal-confirm .ant-modal-header{display:none}.ant-modal-confirm .ant-modal-body{padding:32px 32px 24px}.ant-modal-confirm-body-wrapper:before{display:table;content:""}.ant-modal-confirm-body-wrapper:after{display:table;clear:both;content:""}.ant-modal-confirm-body .ant-modal-confirm-title{display:block;overflow:hidden;color:#000000d9;font-weight:500;font-size:16px;line-height:1.4}.ant-modal-confirm-body .ant-modal-confirm-content{margin-top:8px;color:#000000d9;font-size:14px}.ant-modal-confirm-body>.anticon{float:left;margin-right:16px;font-size:22px}.ant-modal-confirm-body>.anticon+.ant-modal-confirm-title+.ant-modal-confirm-content{margin-left:38px}.ant-modal-confirm .ant-modal-confirm-btns{float:right;margin-top:24px}.ant-modal-confirm .ant-modal-confirm-btns .ant-btn+.ant-btn{margin-bottom:0;margin-left:8px}.ant-modal-confirm-error .ant-modal-confirm-body>.anticon{color:#ff4d4f}.ant-modal-confirm-warning .ant-modal-confirm-body>.anticon,.ant-modal-confirm-confirm .ant-modal-confirm-body>.anticon{color:#faad14}.ant-modal-confirm-info .ant-modal-confirm-body>.anticon{color:#1890ff}.ant-modal-confirm-success .ant-modal-confirm-body>.anticon{color:#52c41a}.ant-modal-wrap-rtl{direction:rtl}.ant-modal-wrap-rtl .ant-modal-close{right:initial;left:0}.ant-modal-wrap-rtl .ant-modal-footer{text-align:left}.ant-modal-wrap-rtl .ant-modal-footer .ant-btn+.ant-btn{margin-right:8px;margin-left:0}.ant-modal-wrap-rtl .ant-modal-confirm-body{direction:rtl}.ant-modal-wrap-rtl .ant-modal-confirm-body>.anticon{float:right;margin-right:0;margin-left:16px}.ant-modal-wrap-rtl .ant-modal-confirm-body>.anticon+.ant-modal-confirm-title+.ant-modal-confirm-content{margin-right:38px;margin-left:0}.ant-modal-wrap-rtl .ant-modal-confirm-btns{float:left}.ant-modal-wrap-rtl .ant-modal-confirm-btns .ant-btn+.ant-btn{margin-right:8px;margin-left:0}.ant-modal-wrap-rtl.ant-modal-centered .ant-modal{text-align:right}/*!*****************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/notification/style/index.less ***! + \*****************************************************************************************************************************************************************************************************************************************************************/.ant-notification{box-sizing:border-box;margin:0 24px 0 0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:fixed;z-index:1010}.ant-notification-topLeft,.ant-notification-bottomLeft{margin-right:0;margin-left:24px}.ant-notification-topLeft .ant-notification-fade-enter.ant-notification-fade-enter-active,.ant-notification-bottomLeft .ant-notification-fade-enter.ant-notification-fade-enter-active,.ant-notification-topLeft .ant-notification-fade-appear.ant-notification-fade-appear-active,.ant-notification-bottomLeft .ant-notification-fade-appear.ant-notification-fade-appear-active{animation-name:NotificationLeftFadeIn}.ant-notification-close-icon{font-size:14px;cursor:pointer}.ant-notification-hook-holder{position:relative}.ant-notification-notice{position:relative;width:384px;max-width:calc(100vw - 48px);margin-bottom:16px;margin-left:auto;padding:16px 24px;overflow:hidden;line-height:1.5715;word-wrap:break-word;background:#fff;border-radius:2px;box-shadow:0 3px 6px -4px #0000001f,0 6px 16px #00000014,0 9px 28px 8px #0000000d}.ant-notification-topLeft .ant-notification-notice,.ant-notification-bottomLeft .ant-notification-notice{margin-right:auto;margin-left:0}.ant-notification-notice-message{margin-bottom:8px;color:#000000d9;font-size:16px;line-height:24px}.ant-notification-notice-message-single-line-auto-margin{display:block;width:calc(264px - 100%);max-width:4px;background-color:transparent;pointer-events:none}.ant-notification-notice-message-single-line-auto-margin:before{display:block;content:""}.ant-notification-notice-description{font-size:14px}.ant-notification-notice-closable .ant-notification-notice-message{padding-right:24px}.ant-notification-notice-with-icon .ant-notification-notice-message{margin-bottom:4px;margin-left:48px;font-size:16px}.ant-notification-notice-with-icon .ant-notification-notice-description{margin-left:48px;font-size:14px}.ant-notification-notice-icon{position:absolute;margin-left:4px;font-size:24px;line-height:24px}.anticon.ant-notification-notice-icon-success{color:#52c41a}.anticon.ant-notification-notice-icon-info{color:#1890ff}.anticon.ant-notification-notice-icon-warning{color:#faad14}.anticon.ant-notification-notice-icon-error{color:#ff4d4f}.ant-notification-notice-close{position:absolute;top:16px;right:22px;color:#00000073;outline:none}.ant-notification-notice-close:hover{color:#000000ab}.ant-notification-notice-btn{float:right;margin-top:16px}.ant-notification .notification-fade-effect{animation-duration:.24s;animation-timing-function:cubic-bezier(.645,.045,.355,1);animation-fill-mode:both}.ant-notification-fade-enter,.ant-notification-fade-appear{animation-duration:.24s;animation-timing-function:cubic-bezier(.645,.045,.355,1);animation-fill-mode:both;opacity:0;animation-play-state:paused}.ant-notification-fade-leave{animation-duration:.24s;animation-timing-function:cubic-bezier(.645,.045,.355,1);animation-fill-mode:both;animation-duration:.2s;animation-play-state:paused}.ant-notification-fade-enter.ant-notification-fade-enter-active,.ant-notification-fade-appear.ant-notification-fade-appear-active{animation-name:NotificationFadeIn;animation-play-state:running}.ant-notification-fade-leave.ant-notification-fade-leave-active{animation-name:NotificationFadeOut;animation-play-state:running}@keyframes NotificationFadeIn{0%{left:384px;opacity:0}to{left:0;opacity:1}}@keyframes NotificationLeftFadeIn{0%{right:384px;opacity:0}to{right:0;opacity:1}}@keyframes NotificationFadeOut{0%{max-height:150px;margin-bottom:16px;opacity:1}to{max-height:0;margin-bottom:0;padding-top:0;padding-bottom:0;opacity:0}}.ant-notification-rtl{direction:rtl}.ant-notification-rtl .ant-notification-notice-closable .ant-notification-notice-message{padding-right:0;padding-left:24px}.ant-notification-rtl .ant-notification-notice-with-icon .ant-notification-notice-message,.ant-notification-rtl .ant-notification-notice-with-icon .ant-notification-notice-description{margin-right:48px;margin-left:0}.ant-notification-rtl .ant-notification-notice-icon{margin-right:4px;margin-left:0}.ant-notification-rtl .ant-notification-notice-close{right:auto;left:22px}.ant-notification-rtl .ant-notification-notice-btn{float:left}/*!****************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/page-header/style/index.less ***! + \****************************************************************************************************************************************************************************************************************************************************************/.ant-page-header{box-sizing:border-box;margin:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;padding:16px 24px;background-color:#fff}.ant-page-header-ghost{background-color:inherit}.ant-page-header.has-breadcrumb{padding-top:12px}.ant-page-header.has-footer{padding-bottom:0}.ant-page-header-back{margin-right:16px;font-size:16px;line-height:1}.ant-page-header-back-button{color:#1890ff;text-decoration:none;outline:none;transition:color .3s;color:#000;cursor:pointer}.ant-page-header-back-button:focus,.ant-page-header-back-button:hover{color:#40a9ff}.ant-page-header-back-button:active{color:#096dd9}.ant-page-header .ant-divider-vertical{height:14px;margin:0 12px;vertical-align:middle}.ant-breadcrumb+.ant-page-header-heading{margin-top:8px}.ant-page-header-heading{display:flex;justify-content:space-between}.ant-page-header-heading-left{display:flex;align-items:center;margin:4px 0;overflow:hidden}.ant-page-header-heading-title{margin-right:12px;margin-bottom:0;color:#000000d9;font-weight:600;font-size:20px;line-height:32px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ant-page-header-heading .ant-avatar{margin-right:12px}.ant-page-header-heading-sub-title{margin-right:12px;color:#00000073;font-size:14px;line-height:1.5715;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ant-page-header-heading-extra{margin:4px 0;white-space:nowrap}.ant-page-header-heading-extra>*{margin-left:12px;white-space:unset}.ant-page-header-heading-extra>*:first-child{margin-left:0}.ant-page-header-content{padding-top:12px}.ant-page-header-footer{margin-top:16px}.ant-page-header-footer .ant-tabs>.ant-tabs-nav{margin:0}.ant-page-header-footer .ant-tabs>.ant-tabs-nav:before{border:none}.ant-page-header-footer .ant-tabs .ant-tabs-tab{padding-top:8px;padding-bottom:8px;font-size:16px}.ant-page-header-compact .ant-page-header-heading{flex-wrap:wrap}.ant-page-header-rtl{direction:rtl}.ant-page-header-rtl .ant-page-header-back{float:right;margin-right:0;margin-left:16px}.ant-page-header-rtl .ant-page-header-heading-title,.ant-page-header-rtl .ant-page-header-heading .ant-avatar{margin-right:0;margin-left:12px}.ant-page-header-rtl .ant-page-header-heading-sub-title{float:right;margin-right:0;margin-left:12px}.ant-page-header-rtl .ant-page-header-heading-tags{float:right}.ant-page-header-rtl .ant-page-header-heading-extra{float:left}.ant-page-header-rtl .ant-page-header-heading-extra>*{margin-right:12px;margin-left:0}.ant-page-header-rtl .ant-page-header-heading-extra>*:first-child{margin-right:0}.ant-page-header-rtl .ant-page-header-footer .ant-tabs-bar .ant-tabs-nav{float:right}/*!************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/popover/style/index.less ***! + \************************************************************************************************************************************************************************************************************************************************************/.ant-popover{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:absolute;top:0;left:0;z-index:1030;font-weight:400;white-space:normal;text-align:left;cursor:auto;-webkit-user-select:text;-moz-user-select:text;user-select:text}.ant-popover:after{position:absolute;background:rgba(255,255,255,.01);content:""}.ant-popover-hidden{display:none}.ant-popover-placement-top,.ant-popover-placement-topLeft,.ant-popover-placement-topRight{padding-bottom:10px}.ant-popover-placement-right,.ant-popover-placement-rightTop,.ant-popover-placement-rightBottom{padding-left:10px}.ant-popover-placement-bottom,.ant-popover-placement-bottomLeft,.ant-popover-placement-bottomRight{padding-top:10px}.ant-popover-placement-left,.ant-popover-placement-leftTop,.ant-popover-placement-leftBottom{padding-right:10px}.ant-popover-inner{background-color:#fff;background-clip:padding-box;border-radius:2px;box-shadow:0 3px 6px -4px #0000001f,0 6px 16px #00000014,0 9px 28px 8px #0000000d;box-shadow:0 0 8px #00000026 \ }@media screen and (-ms-high-contrast: active),(-ms-high-contrast: none){.ant-popover-inner{box-shadow:0 3px 6px -4px #0000001f,0 6px 16px #00000014,0 9px 28px 8px #0000000d}}.ant-popover-title{min-width:177px;min-height:32px;margin:0;padding:5px 16px 4px;color:#000000d9;font-weight:500;border-bottom:1px solid #f0f0f0}.ant-popover-inner-content{padding:12px 16px;color:#000000d9}.ant-popover-message{position:relative;padding:4px 0 12px;color:#000000d9;font-size:14px}.ant-popover-message>.anticon{position:absolute;top:8.0005px;color:#faad14;font-size:14px}.ant-popover-message-title{padding-left:22px}.ant-popover-buttons{margin-bottom:4px;text-align:right}.ant-popover-buttons button{margin-left:8px}.ant-popover-arrow{position:absolute;display:block;width:8.48528137px;height:8.48528137px;overflow:hidden;background:transparent;pointer-events:none}.ant-popover-arrow-content{position:absolute;top:0;right:0;bottom:0;left:0;display:block;width:6px;height:6px;margin:auto;background-color:#fff;content:"";pointer-events:auto}.ant-popover-placement-top .ant-popover-arrow,.ant-popover-placement-topLeft .ant-popover-arrow,.ant-popover-placement-topRight .ant-popover-arrow{bottom:1.51471863px}.ant-popover-placement-top .ant-popover-arrow-content,.ant-popover-placement-topLeft .ant-popover-arrow-content,.ant-popover-placement-topRight .ant-popover-arrow-content{box-shadow:3px 3px 7px #00000012;transform:translateY(-4.24264069px) rotate(45deg)}.ant-popover-placement-top .ant-popover-arrow{left:50%;transform:translate(-50%)}.ant-popover-placement-topLeft .ant-popover-arrow{left:16px}.ant-popover-placement-topRight .ant-popover-arrow{right:16px}.ant-popover-placement-right .ant-popover-arrow,.ant-popover-placement-rightTop .ant-popover-arrow,.ant-popover-placement-rightBottom .ant-popover-arrow{left:1.51471863px}.ant-popover-placement-right .ant-popover-arrow-content,.ant-popover-placement-rightTop .ant-popover-arrow-content,.ant-popover-placement-rightBottom .ant-popover-arrow-content{box-shadow:-3px 3px 7px #00000012;transform:translate(4.24264069px) rotate(45deg)}.ant-popover-placement-right .ant-popover-arrow{top:50%;transform:translateY(-50%)}.ant-popover-placement-rightTop .ant-popover-arrow{top:12px}.ant-popover-placement-rightBottom .ant-popover-arrow{bottom:12px}.ant-popover-placement-bottom .ant-popover-arrow,.ant-popover-placement-bottomLeft .ant-popover-arrow,.ant-popover-placement-bottomRight .ant-popover-arrow{top:1.51471863px}.ant-popover-placement-bottom .ant-popover-arrow-content,.ant-popover-placement-bottomLeft .ant-popover-arrow-content,.ant-popover-placement-bottomRight .ant-popover-arrow-content{box-shadow:-2px -2px 5px #0000000f;transform:translateY(4.24264069px) rotate(45deg)}.ant-popover-placement-bottom .ant-popover-arrow{left:50%;transform:translate(-50%)}.ant-popover-placement-bottomLeft .ant-popover-arrow{left:16px}.ant-popover-placement-bottomRight .ant-popover-arrow{right:16px}.ant-popover-placement-left .ant-popover-arrow,.ant-popover-placement-leftTop .ant-popover-arrow,.ant-popover-placement-leftBottom .ant-popover-arrow{right:1.51471863px}.ant-popover-placement-left .ant-popover-arrow-content,.ant-popover-placement-leftTop .ant-popover-arrow-content,.ant-popover-placement-leftBottom .ant-popover-arrow-content{box-shadow:3px -3px 7px #00000012;transform:translate(-4.24264069px) rotate(45deg)}.ant-popover-placement-left .ant-popover-arrow{top:50%;transform:translateY(-50%)}.ant-popover-placement-leftTop .ant-popover-arrow{top:12px}.ant-popover-placement-leftBottom .ant-popover-arrow{bottom:12px}.ant-popover-pink .ant-popover-inner,.ant-popover-pink .ant-popover-arrow-content,.ant-popover-magenta .ant-popover-inner,.ant-popover-magenta .ant-popover-arrow-content{background-color:#eb2f96}.ant-popover-red .ant-popover-inner,.ant-popover-red .ant-popover-arrow-content{background-color:#f5222d}.ant-popover-volcano .ant-popover-inner,.ant-popover-volcano .ant-popover-arrow-content{background-color:#fa541c}.ant-popover-orange .ant-popover-inner,.ant-popover-orange .ant-popover-arrow-content{background-color:#fa8c16}.ant-popover-yellow .ant-popover-inner,.ant-popover-yellow .ant-popover-arrow-content{background-color:#fadb14}.ant-popover-gold .ant-popover-inner,.ant-popover-gold .ant-popover-arrow-content{background-color:#faad14}.ant-popover-cyan .ant-popover-inner,.ant-popover-cyan .ant-popover-arrow-content{background-color:#13c2c2}.ant-popover-lime .ant-popover-inner,.ant-popover-lime .ant-popover-arrow-content{background-color:#a0d911}.ant-popover-green .ant-popover-inner,.ant-popover-green .ant-popover-arrow-content{background-color:#52c41a}.ant-popover-blue .ant-popover-inner,.ant-popover-blue .ant-popover-arrow-content{background-color:#1890ff}.ant-popover-geekblue .ant-popover-inner,.ant-popover-geekblue .ant-popover-arrow-content{background-color:#2f54eb}.ant-popover-purple .ant-popover-inner,.ant-popover-purple .ant-popover-arrow-content{background-color:#722ed1}.ant-popover-rtl{direction:rtl;text-align:right}.ant-popover-rtl .ant-popover-message-title{padding-right:22px;padding-left:16px}.ant-popover-rtl .ant-popover-buttons{text-align:left}.ant-popover-rtl .ant-popover-buttons button{margin-right:8px;margin-left:0}/*!***************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/popconfirm/style/index.less ***! + \***************************************************************************************************************************************************************************************************************************************************************/.ant-popconfirm{z-index:1060}/*!*************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/progress/style/index.less ***! + \*************************************************************************************************************************************************************************************************************************************************************/.ant-progress{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";display:inline-block}.ant-progress-line{position:relative;width:100%;font-size:14px}.ant-progress-steps{display:inline-block}.ant-progress-steps-outer{display:flex;flex-direction:row;align-items:center}.ant-progress-steps-item{flex-shrink:0;min-width:2px;margin-right:2px;background:#f3f3f3;transition:all .3s}.ant-progress-steps-item-active{background:#1890ff}.ant-progress-small.ant-progress-line,.ant-progress-small.ant-progress-line .ant-progress-text .anticon{font-size:12px}.ant-progress-outer{display:inline-block;width:100%;margin-right:0;padding-right:0}.ant-progress-show-info .ant-progress-outer{margin-right:calc(-2em - 8px);padding-right:calc(2em + 8px)}.ant-progress-inner{position:relative;display:inline-block;width:100%;overflow:hidden;vertical-align:middle;background-color:#f5f5f5;border-radius:100px}.ant-progress-circle-trail{stroke:#f5f5f5}.ant-progress-circle-path{animation:ant-progress-appear .3s}.ant-progress-inner:not(.ant-progress-circle-gradient) .ant-progress-circle-path{stroke:#1890ff}.ant-progress-success-bg,.ant-progress-bg{position:relative;background-color:#1890ff;border-radius:100px;transition:all .4s cubic-bezier(.08,.82,.17,1) 0s}.ant-progress-success-bg{position:absolute;top:0;left:0;background-color:#52c41a}.ant-progress-text{display:inline-block;width:2em;margin-left:8px;color:#000000d9;font-size:1em;line-height:1;white-space:nowrap;text-align:left;vertical-align:middle;word-break:normal}.ant-progress-text .anticon{font-size:14px}.ant-progress-status-active .ant-progress-bg:before{position:absolute;top:0;right:0;bottom:0;left:0;background:#fff;border-radius:10px;opacity:0;animation:ant-progress-active 2.4s cubic-bezier(.23,1,.32,1) infinite;content:""}.ant-progress-status-exception .ant-progress-bg{background-color:#ff4d4f}.ant-progress-status-exception .ant-progress-text{color:#ff4d4f}.ant-progress-status-exception .ant-progress-inner:not(.ant-progress-circle-gradient) .ant-progress-circle-path{stroke:#ff4d4f}.ant-progress-status-success .ant-progress-bg{background-color:#52c41a}.ant-progress-status-success .ant-progress-text{color:#52c41a}.ant-progress-status-success .ant-progress-inner:not(.ant-progress-circle-gradient) .ant-progress-circle-path{stroke:#52c41a}.ant-progress-circle .ant-progress-inner{position:relative;line-height:1;background-color:transparent}.ant-progress-circle .ant-progress-text{position:absolute;top:50%;left:50%;width:100%;margin:0;padding:0;color:#000000d9;font-size:1em;line-height:1;white-space:normal;text-align:center;transform:translate(-50%,-50%)}.ant-progress-circle .ant-progress-text .anticon{font-size:1.16666667em}.ant-progress-circle.ant-progress-status-exception .ant-progress-text{color:#ff4d4f}.ant-progress-circle.ant-progress-status-success .ant-progress-text{color:#52c41a}@keyframes ant-progress-active{0%{transform:translate(-100%) scaleX(0);opacity:.1}20%{transform:translate(-100%) scaleX(0);opacity:.5}to{transform:translate(0) scaleX(1);opacity:0}}.ant-progress-rtl{direction:rtl}.ant-progress-rtl.ant-progress-show-info .ant-progress-outer{margin-right:0;margin-left:calc(-2em - 8px);padding-right:0;padding-left:calc(2em + 8px)}.ant-progress-rtl .ant-progress-success-bg{right:0;left:auto}.ant-progress-rtl.ant-progress-line .ant-progress-text,.ant-progress-rtl.ant-progress-steps .ant-progress-text{margin-right:8px;margin-left:0;text-align:right}/*!*********************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/rate/style/index.less ***! + \*********************************************************************************************************************************************************************************************************************************************************/.ant-rate{box-sizing:border-box;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;font-feature-settings:"tnum";display:inline-block;margin:0;padding:0;color:#fadb14;font-size:20px;line-height:unset;list-style:none;outline:none}.ant-rate-disabled .ant-rate-star{cursor:default}.ant-rate-disabled .ant-rate-star:hover{transform:scale(1)}.ant-rate-star{position:relative;display:inline-block;color:inherit;cursor:pointer}.ant-rate-star:not(:last-child){margin-right:8px}.ant-rate-star>div{transition:all .3s,outline 0s}.ant-rate-star>div:hover{transform:scale(1.1)}.ant-rate-star>div:focus{outline:0}.ant-rate-star>div:focus-visible{outline:1px dashed #fadb14;transform:scale(1.1)}.ant-rate-star-first,.ant-rate-star-second{color:#f0f0f0;transition:all .3s;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-rate-star-first .anticon,.ant-rate-star-second .anticon{vertical-align:middle}.ant-rate-star-first{position:absolute;top:0;left:0;width:50%;height:100%;overflow:hidden;opacity:0}.ant-rate-star-half .ant-rate-star-first,.ant-rate-star-half .ant-rate-star-second{opacity:1}.ant-rate-star-half .ant-rate-star-first,.ant-rate-star-full .ant-rate-star-second{color:inherit}.ant-rate-text{display:inline-block;margin:0 8px;font-size:14px}.ant-rate-rtl{direction:rtl}.ant-rate-rtl .ant-rate-star:not(:last-child){margin-right:0;margin-left:8px}.ant-rate-rtl .ant-rate-star-first{right:0;left:auto}/*!***********************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/result/style/index.less ***! + \***********************************************************************************************************************************************************************************************************************************************************/.ant-result{padding:48px 32px}.ant-result-success .ant-result-icon>.anticon{color:#52c41a}.ant-result-error .ant-result-icon>.anticon{color:#ff4d4f}.ant-result-info .ant-result-icon>.anticon{color:#1890ff}.ant-result-warning .ant-result-icon>.anticon{color:#faad14}.ant-result-image{width:250px;height:295px;margin:auto}.ant-result-icon{margin-bottom:24px;text-align:center}.ant-result-icon>.anticon{font-size:72px}.ant-result-title{color:#000000d9;font-size:24px;line-height:1.8;text-align:center}.ant-result-subtitle{color:#00000073;font-size:14px;line-height:1.6;text-align:center}.ant-result-extra{margin:24px 0 0;text-align:center}.ant-result-extra>*{margin-right:8px}.ant-result-extra>*:last-child{margin-right:0}.ant-result-content{margin-top:24px;padding:24px 40px;background-color:#fafafa}.ant-result-rtl{direction:rtl}.ant-result-rtl .ant-result-extra>*{margin-right:0;margin-left:8px}.ant-result-rtl .ant-result-extra>*:last-child{margin-left:0}/*!*************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/skeleton/style/index.less ***! + \*************************************************************************************************************************************************************************************************************************************************************/.ant-skeleton{display:table;width:100%}.ant-skeleton-header{display:table-cell;padding-right:16px;vertical-align:top}.ant-skeleton-header .ant-skeleton-avatar{display:inline-block;vertical-align:top;background:rgba(190,190,190,.2);width:32px;height:32px;line-height:32px}.ant-skeleton-header .ant-skeleton-avatar.ant-skeleton-avatar-circle{border-radius:50%}.ant-skeleton-header .ant-skeleton-avatar-lg{width:40px;height:40px;line-height:40px}.ant-skeleton-header .ant-skeleton-avatar-lg.ant-skeleton-avatar-circle{border-radius:50%}.ant-skeleton-header .ant-skeleton-avatar-sm{width:24px;height:24px;line-height:24px}.ant-skeleton-header .ant-skeleton-avatar-sm.ant-skeleton-avatar-circle{border-radius:50%}.ant-skeleton-content{display:table-cell;width:100%;vertical-align:top}.ant-skeleton-content .ant-skeleton-title{width:100%;height:16px;margin-top:16px;background:rgba(190,190,190,.2);border-radius:4px}.ant-skeleton-content .ant-skeleton-title+.ant-skeleton-paragraph{margin-top:24px}.ant-skeleton-content .ant-skeleton-paragraph{padding:0}.ant-skeleton-content .ant-skeleton-paragraph>li{width:100%;height:16px;list-style:none;background:rgba(190,190,190,.2);border-radius:4px}.ant-skeleton-content .ant-skeleton-paragraph>li:last-child:not(:first-child):not(:nth-child(2)){width:61%}.ant-skeleton-content .ant-skeleton-paragraph>li+li{margin-top:16px}.ant-skeleton-with-avatar .ant-skeleton-content .ant-skeleton-title{margin-top:12px}.ant-skeleton-with-avatar .ant-skeleton-content .ant-skeleton-title+.ant-skeleton-paragraph{margin-top:28px}.ant-skeleton-round .ant-skeleton-content .ant-skeleton-title,.ant-skeleton-round .ant-skeleton-content .ant-skeleton-paragraph>li{border-radius:100px}.ant-skeleton.ant-skeleton-active .ant-skeleton-content .ant-skeleton-title,.ant-skeleton.ant-skeleton-active .ant-skeleton-content .ant-skeleton-paragraph>li{background:linear-gradient(90deg,rgba(190,190,190,.2) 25%,rgba(129,129,129,.24) 37%,rgba(190,190,190,.2) 63%);background-size:400% 100%;animation:ant-skeleton-loading 1.4s ease infinite}.ant-skeleton.ant-skeleton-active .ant-skeleton-avatar,.ant-skeleton.ant-skeleton-active .ant-skeleton-button,.ant-skeleton.ant-skeleton-active .ant-skeleton-input,.ant-skeleton.ant-skeleton-active .ant-skeleton-image{background:linear-gradient(90deg,rgba(190,190,190,.2) 25%,rgba(129,129,129,.24) 37%,rgba(190,190,190,.2) 63%);background-size:400% 100%;animation:ant-skeleton-loading 1.4s ease infinite}.ant-skeleton.ant-skeleton-block,.ant-skeleton.ant-skeleton-block .ant-skeleton-button{width:100%}.ant-skeleton-element{display:inline-block;width:auto}.ant-skeleton-element .ant-skeleton-button{display:inline-block;vertical-align:top;background:rgba(190,190,190,.2);border-radius:2px;width:64px;min-width:64px;height:32px;line-height:32px}.ant-skeleton-element .ant-skeleton-button.ant-skeleton-button-circle{width:32px;min-width:32px;border-radius:50%}.ant-skeleton-element .ant-skeleton-button.ant-skeleton-button-round{border-radius:32px}.ant-skeleton-element .ant-skeleton-button-lg{width:80px;min-width:80px;height:40px;line-height:40px}.ant-skeleton-element .ant-skeleton-button-lg.ant-skeleton-button-circle{width:40px;min-width:40px;border-radius:50%}.ant-skeleton-element .ant-skeleton-button-lg.ant-skeleton-button-round{border-radius:40px}.ant-skeleton-element .ant-skeleton-button-sm{width:48px;min-width:48px;height:24px;line-height:24px}.ant-skeleton-element .ant-skeleton-button-sm.ant-skeleton-button-circle{width:24px;min-width:24px;border-radius:50%}.ant-skeleton-element .ant-skeleton-button-sm.ant-skeleton-button-round{border-radius:24px}.ant-skeleton-element .ant-skeleton-avatar{display:inline-block;vertical-align:top;background:rgba(190,190,190,.2);width:32px;height:32px;line-height:32px}.ant-skeleton-element .ant-skeleton-avatar.ant-skeleton-avatar-circle{border-radius:50%}.ant-skeleton-element .ant-skeleton-avatar-lg{width:40px;height:40px;line-height:40px}.ant-skeleton-element .ant-skeleton-avatar-lg.ant-skeleton-avatar-circle{border-radius:50%}.ant-skeleton-element .ant-skeleton-avatar-sm{width:24px;height:24px;line-height:24px}.ant-skeleton-element .ant-skeleton-avatar-sm.ant-skeleton-avatar-circle{border-radius:50%}.ant-skeleton-element .ant-skeleton-input{display:inline-block;vertical-align:top;background:rgba(190,190,190,.2);width:100%;height:32px;line-height:32px}.ant-skeleton-element .ant-skeleton-input-lg{width:100%;height:40px;line-height:40px}.ant-skeleton-element .ant-skeleton-input-sm{width:100%;height:24px;line-height:24px}.ant-skeleton-element .ant-skeleton-image{display:flex;align-items:center;justify-content:center;vertical-align:top;background:rgba(190,190,190,.2);width:96px;height:96px;line-height:96px}.ant-skeleton-element .ant-skeleton-image.ant-skeleton-image-circle{border-radius:50%}.ant-skeleton-element .ant-skeleton-image-path{fill:#bfbfbf}.ant-skeleton-element .ant-skeleton-image-svg{width:48px;height:48px;line-height:48px;max-width:192px;max-height:192px}.ant-skeleton-element .ant-skeleton-image-svg.ant-skeleton-image-circle{border-radius:50%}@keyframes ant-skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}.ant-skeleton-rtl{direction:rtl}.ant-skeleton-rtl .ant-skeleton-header{padding-right:0;padding-left:16px}.ant-skeleton-rtl.ant-skeleton.ant-skeleton-active .ant-skeleton-content .ant-skeleton-title,.ant-skeleton-rtl.ant-skeleton.ant-skeleton-active .ant-skeleton-content .ant-skeleton-paragraph>li{animation-name:ant-skeleton-loading-rtl}.ant-skeleton-rtl.ant-skeleton.ant-skeleton-active .ant-skeleton-avatar{animation-name:ant-skeleton-loading-rtl}@keyframes ant-skeleton-loading-rtl{0%{background-position:0% 50%}to{background-position:100% 50%}}/*!***********************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/slider/style/index.less ***! + \***********************************************************************************************************************************************************************************************************************************************************/.ant-slider{box-sizing:border-box;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;height:12px;margin:10px 6px;padding:4px 0;cursor:pointer;touch-action:none}.ant-slider-vertical{width:12px;height:100%;margin:6px 10px;padding:0 4px}.ant-slider-vertical .ant-slider-rail{width:4px;height:100%}.ant-slider-vertical .ant-slider-track{width:4px}.ant-slider-vertical .ant-slider-handle{margin-top:-6px;margin-left:-5px}.ant-slider-vertical .ant-slider-mark{top:0;left:12px;width:18px;height:100%}.ant-slider-vertical .ant-slider-mark-text{left:4px;white-space:nowrap}.ant-slider-vertical .ant-slider-step{width:4px;height:100%}.ant-slider-vertical .ant-slider-dot{top:auto;left:2px;margin-bottom:-4px}.ant-slider-tooltip .ant-tooltip-inner{min-width:unset}.ant-slider-rtl.ant-slider-vertical .ant-slider-handle{margin-right:-5px;margin-left:0}.ant-slider-rtl.ant-slider-vertical .ant-slider-mark{right:12px;left:auto}.ant-slider-rtl.ant-slider-vertical .ant-slider-mark-text{right:4px;left:auto}.ant-slider-rtl.ant-slider-vertical .ant-slider-dot{right:2px;left:auto}.ant-slider-with-marks{margin-bottom:28px}.ant-slider-rail{position:absolute;width:100%;height:4px;background-color:#f5f5f5;border-radius:2px;transition:background-color .3s}.ant-slider-track{position:absolute;height:4px;background-color:#91d5ff;border-radius:2px;transition:background-color .3s}.ant-slider-handle{position:absolute;width:14px;height:14px;margin-top:-5px;background-color:#fff;border:solid 2px #91d5ff;border-radius:50%;box-shadow:0;cursor:pointer;transition:border-color .3s,box-shadow .6s,transform .3s cubic-bezier(.18,.89,.32,1.28)}.ant-slider-handle-dragging.ant-slider-handle-dragging.ant-slider-handle-dragging{border-color:#46a6ff;box-shadow:0 0 0 5px #1890ff1f}.ant-slider-handle:focus{border-color:#46a6ff;outline:none;box-shadow:0 0 0 5px #1890ff1f}.ant-slider-handle.ant-tooltip-open{border-color:#1890ff}.ant-slider:hover .ant-slider-rail{background-color:#e1e1e1}.ant-slider:hover .ant-slider-track{background-color:#69c0ff}.ant-slider:hover .ant-slider-handle:not(.ant-tooltip-open){border-color:#69c0ff}.ant-slider-mark{position:absolute;top:14px;left:0;width:100%;font-size:14px}.ant-slider-mark-text{position:absolute;display:inline-block;color:#00000073;text-align:center;word-break:keep-all;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-slider-mark-text-active{color:#000000d9}.ant-slider-step{position:absolute;width:100%;height:4px;background:transparent}.ant-slider-dot{position:absolute;top:-2px;width:8px;height:8px;margin-left:-4px;background-color:#fff;border:2px solid #f0f0f0;border-radius:50%;cursor:pointer}.ant-slider-dot:first-child{margin-left:-4px}.ant-slider-dot:last-child{margin-left:-4px}.ant-slider-dot-active{border-color:#8cc8ff}.ant-slider-disabled{cursor:not-allowed}.ant-slider-disabled .ant-slider-rail{background-color:#f5f5f5!important}.ant-slider-disabled .ant-slider-track{background-color:#00000040!important}.ant-slider-disabled .ant-slider-handle,.ant-slider-disabled .ant-slider-dot{background-color:#fff;border-color:#00000040!important;box-shadow:none;cursor:not-allowed}.ant-slider-disabled .ant-slider-mark-text,.ant-slider-disabled .ant-slider-dot{cursor:not-allowed!important}.ant-slider-rtl{direction:rtl}.ant-slider-rtl .ant-slider-mark{right:0;left:auto}.ant-slider-rtl .ant-slider-dot,.ant-slider-rtl .ant-slider-dot:first-child{margin-right:-4px;margin-left:0}.ant-slider-rtl .ant-slider-dot:last-child{margin-right:-4px;margin-left:0}/*!**********************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/space/style/index.less ***! + \**********************************************************************************************************************************************************************************************************************************************************/.ant-space{display:inline-flex}.ant-space-vertical{flex-direction:column}.ant-space-align-center{align-items:center}.ant-space-align-start{align-items:flex-start}.ant-space-align-end{align-items:flex-end}.ant-space-align-baseline{align-items:baseline}.ant-space-item:empty{display:none}.ant-space-rtl{direction:rtl}/*!**************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/statistic/style/index.less ***! + \**************************************************************************************************************************************************************************************************************************************************************/.ant-statistic{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum"}.ant-statistic-title{margin-bottom:4px;color:#00000073;font-size:14px}.ant-statistic-content{color:#000000d9;font-size:24px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}.ant-statistic-content-value{display:inline-block;direction:ltr}.ant-statistic-content-prefix,.ant-statistic-content-suffix{display:inline-block}.ant-statistic-content-prefix{margin-right:4px}.ant-statistic-content-suffix{margin-left:4px}.ant-statistic-rtl{direction:rtl}.ant-statistic-rtl .ant-statistic-content-prefix{margin-right:0;margin-left:4px}.ant-statistic-rtl .ant-statistic-content-suffix{margin-right:4px;margin-left:0}/*!**********************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/steps/style/index.less ***! + \**********************************************************************************************************************************************************************************************************************************************************/.ant-steps{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";display:flex;width:100%;font-size:0;text-align:initial}.ant-steps-item{position:relative;display:inline-block;flex:1;overflow:hidden;vertical-align:top}.ant-steps-item-container{outline:none}.ant-steps-item:last-child{flex:none}.ant-steps-item:last-child>.ant-steps-item-container>.ant-steps-item-tail,.ant-steps-item:last-child>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title:after{display:none}.ant-steps-item-icon,.ant-steps-item-content{display:inline-block;vertical-align:top}.ant-steps-item-icon{width:32px;height:32px;margin:0 8px 0 0;font-size:16px;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";line-height:32px;text-align:center;border:1px solid rgba(0,0,0,.25);border-radius:32px;transition:background-color .3s,border-color .3s}.ant-steps-item-icon .ant-steps-icon{position:relative;top:-.5px;color:#1890ff;line-height:1}.ant-steps-item-tail{position:absolute;top:12px;left:0;width:100%;padding:0 10px}.ant-steps-item-tail:after{display:inline-block;width:100%;height:1px;background:#f0f0f0;border-radius:1px;transition:background .3s;content:""}.ant-steps-item-title{position:relative;display:inline-block;padding-right:16px;color:#000000d9;font-size:16px;line-height:32px}.ant-steps-item-title:after{position:absolute;top:16px;left:100%;display:block;width:9999px;height:1px;background:#f0f0f0;content:""}.ant-steps-item-subtitle{display:inline;margin-left:8px;color:#00000073;font-weight:400;font-size:14px}.ant-steps-item-description{color:#00000073;font-size:14px}.ant-steps-item-wait .ant-steps-item-icon{background-color:#fff;border-color:#00000040}.ant-steps-item-wait .ant-steps-item-icon>.ant-steps-icon{color:#00000040}.ant-steps-item-wait .ant-steps-item-icon>.ant-steps-icon .ant-steps-icon-dot{background:rgba(0,0,0,.25)}.ant-steps-item-wait>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title{color:#00000073}.ant-steps-item-wait>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title:after{background-color:#f0f0f0}.ant-steps-item-wait>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-description{color:#00000073}.ant-steps-item-wait>.ant-steps-item-container>.ant-steps-item-tail:after{background-color:#f0f0f0}.ant-steps-item-process .ant-steps-item-icon{background-color:#fff;border-color:#1890ff}.ant-steps-item-process .ant-steps-item-icon>.ant-steps-icon{color:#1890ff}.ant-steps-item-process .ant-steps-item-icon>.ant-steps-icon .ant-steps-icon-dot{background:#1890ff}.ant-steps-item-process>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title{color:#000000d9}.ant-steps-item-process>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title:after{background-color:#f0f0f0}.ant-steps-item-process>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-description{color:#000000d9}.ant-steps-item-process>.ant-steps-item-container>.ant-steps-item-tail:after{background-color:#f0f0f0}.ant-steps-item-process>.ant-steps-item-container>.ant-steps-item-icon{background:#1890ff}.ant-steps-item-process>.ant-steps-item-container>.ant-steps-item-icon .ant-steps-icon{color:#fff}.ant-steps-item-process>.ant-steps-item-container>.ant-steps-item-title{font-weight:500}.ant-steps-item-finish .ant-steps-item-icon{background-color:#fff;border-color:#1890ff}.ant-steps-item-finish .ant-steps-item-icon>.ant-steps-icon{color:#1890ff}.ant-steps-item-finish .ant-steps-item-icon>.ant-steps-icon .ant-steps-icon-dot{background:#1890ff}.ant-steps-item-finish>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title{color:#000000d9}.ant-steps-item-finish>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title:after{background-color:#1890ff}.ant-steps-item-finish>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-description{color:#00000073}.ant-steps-item-finish>.ant-steps-item-container>.ant-steps-item-tail:after{background-color:#1890ff}.ant-steps-item-error .ant-steps-item-icon{background-color:#fff;border-color:#ff4d4f}.ant-steps-item-error .ant-steps-item-icon>.ant-steps-icon{color:#ff4d4f}.ant-steps-item-error .ant-steps-item-icon>.ant-steps-icon .ant-steps-icon-dot{background:#ff4d4f}.ant-steps-item-error>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title{color:#ff4d4f}.ant-steps-item-error>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title:after{background-color:#f0f0f0}.ant-steps-item-error>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-description{color:#ff4d4f}.ant-steps-item-error>.ant-steps-item-container>.ant-steps-item-tail:after{background-color:#f0f0f0}.ant-steps-item.ant-steps-next-error .ant-steps-item-title:after{background:#ff4d4f}.ant-steps-item-disabled{cursor:not-allowed}.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role=button]{cursor:pointer}.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role=button] .ant-steps-item-title,.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role=button] .ant-steps-item-subtitle,.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role=button] .ant-steps-item-description,.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role=button] .ant-steps-item-icon .ant-steps-icon{transition:color .3s}.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role=button]:hover .ant-steps-item-title,.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role=button]:hover .ant-steps-item-subtitle,.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role=button]:hover .ant-steps-item-description{color:#1890ff}.ant-steps .ant-steps-item:not(.ant-steps-item-active):not(.ant-steps-item-process)>.ant-steps-item-container[role=button]:hover .ant-steps-item-icon{border-color:#1890ff}.ant-steps .ant-steps-item:not(.ant-steps-item-active):not(.ant-steps-item-process)>.ant-steps-item-container[role=button]:hover .ant-steps-item-icon .ant-steps-icon{color:#1890ff}.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item{padding-left:16px;white-space:nowrap}.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:first-child{padding-left:0}.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:last-child .ant-steps-item-title{padding-right:0}.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item-tail{display:none}.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item-description{max-width:140px;white-space:normal}.ant-steps-item-custom>.ant-steps-item-container>.ant-steps-item-icon{height:auto;background:none;border:0}.ant-steps-item-custom>.ant-steps-item-container>.ant-steps-item-icon>.ant-steps-icon{top:0;left:.5px;width:32px;height:32px;font-size:24px;line-height:32px}.ant-steps-item-custom.ant-steps-item-process .ant-steps-item-icon>.ant-steps-icon{color:#1890ff}.ant-steps:not(.ant-steps-vertical) .ant-steps-item-custom .ant-steps-item-icon{width:auto;background:none}.ant-steps-small.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item{padding-left:12px}.ant-steps-small.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:first-child{padding-left:0}.ant-steps-small .ant-steps-item-icon{width:24px;height:24px;margin:0 8px 0 0;font-size:12px;line-height:24px;text-align:center;border-radius:24px}.ant-steps-small .ant-steps-item-title{padding-right:12px;font-size:14px;line-height:24px}.ant-steps-small .ant-steps-item-title:after{top:12px}.ant-steps-small .ant-steps-item-description{color:#00000073;font-size:14px}.ant-steps-small .ant-steps-item-tail{top:8px}.ant-steps-small .ant-steps-item-custom .ant-steps-item-icon{width:inherit;height:inherit;line-height:inherit;background:none;border:0;border-radius:0}.ant-steps-small .ant-steps-item-custom .ant-steps-item-icon>.ant-steps-icon{font-size:24px;line-height:24px;transform:none}.ant-steps-vertical{display:flex;flex-direction:column}.ant-steps-vertical>.ant-steps-item{display:block;flex:1 0 auto;padding-left:0;overflow:visible}.ant-steps-vertical>.ant-steps-item .ant-steps-item-icon{float:left;margin-right:16px}.ant-steps-vertical>.ant-steps-item .ant-steps-item-content{display:block;min-height:48px;overflow:hidden}.ant-steps-vertical>.ant-steps-item .ant-steps-item-title{line-height:32px}.ant-steps-vertical>.ant-steps-item .ant-steps-item-description{padding-bottom:12px}.ant-steps-vertical>.ant-steps-item>.ant-steps-item-container>.ant-steps-item-tail{position:absolute;top:0;left:16px;width:1px;height:100%;padding:38px 0 6px}.ant-steps-vertical>.ant-steps-item>.ant-steps-item-container>.ant-steps-item-tail:after{width:1px;height:100%}.ant-steps-vertical>.ant-steps-item:not(:last-child)>.ant-steps-item-container>.ant-steps-item-tail{display:block}.ant-steps-vertical>.ant-steps-item>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title:after{display:none}.ant-steps-vertical.ant-steps-small .ant-steps-item-container .ant-steps-item-tail{position:absolute;top:0;left:12px;padding:30px 0 6px}.ant-steps-vertical.ant-steps-small .ant-steps-item-container .ant-steps-item-title{line-height:24px}.ant-steps-label-vertical .ant-steps-item{overflow:visible}.ant-steps-label-vertical .ant-steps-item-tail{margin-left:58px;padding:3.5px 24px}.ant-steps-label-vertical .ant-steps-item-content{display:block;width:116px;margin-top:8px;text-align:center}.ant-steps-label-vertical .ant-steps-item-icon{display:inline-block;margin-left:42px}.ant-steps-label-vertical .ant-steps-item-title{padding-right:0;padding-left:0}.ant-steps-label-vertical .ant-steps-item-title:after{display:none}.ant-steps-label-vertical .ant-steps-item-subtitle{display:block;margin-bottom:4px;margin-left:0;line-height:1.5715}.ant-steps-label-vertical.ant-steps-small:not(.ant-steps-dot) .ant-steps-item-icon{margin-left:46px}.ant-steps-dot .ant-steps-item-title,.ant-steps-dot.ant-steps-small .ant-steps-item-title{line-height:1.5715}.ant-steps-dot .ant-steps-item-tail,.ant-steps-dot.ant-steps-small .ant-steps-item-tail{top:2px;width:100%;margin:0 0 0 70px;padding:0}.ant-steps-dot .ant-steps-item-tail:after,.ant-steps-dot.ant-steps-small .ant-steps-item-tail:after{width:calc(100% - 20px);height:3px;margin-left:12px}.ant-steps-dot .ant-steps-item:first-child .ant-steps-icon-dot,.ant-steps-dot.ant-steps-small .ant-steps-item:first-child .ant-steps-icon-dot{left:2px}.ant-steps-dot .ant-steps-item-icon,.ant-steps-dot.ant-steps-small .ant-steps-item-icon{width:8px;height:8px;margin-left:67px;padding-right:0;line-height:8px;background:transparent;border:0}.ant-steps-dot .ant-steps-item-icon .ant-steps-icon-dot,.ant-steps-dot.ant-steps-small .ant-steps-item-icon .ant-steps-icon-dot{position:relative;float:left;width:100%;height:100%;border-radius:100px;transition:all .3s}.ant-steps-dot .ant-steps-item-icon .ant-steps-icon-dot:after,.ant-steps-dot.ant-steps-small .ant-steps-item-icon .ant-steps-icon-dot:after{position:absolute;top:-12px;left:-26px;width:60px;height:32px;background:rgba(0,0,0,.001);content:""}.ant-steps-dot .ant-steps-item-content,.ant-steps-dot.ant-steps-small .ant-steps-item-content{width:140px}.ant-steps-dot .ant-steps-item-process .ant-steps-item-icon,.ant-steps-dot.ant-steps-small .ant-steps-item-process .ant-steps-item-icon{position:relative;top:-1px;width:10px;height:10px;line-height:10px;background:none}.ant-steps-dot .ant-steps-item-process .ant-steps-icon:first-child .ant-steps-icon-dot,.ant-steps-dot.ant-steps-small .ant-steps-item-process .ant-steps-icon:first-child .ant-steps-icon-dot{left:0}.ant-steps-vertical.ant-steps-dot .ant-steps-item-icon{margin-top:13px;margin-left:0;background:none}.ant-steps-vertical.ant-steps-dot .ant-steps-item>.ant-steps-item-container>.ant-steps-item-tail{top:6.5px;left:-9px;margin:0;padding:22px 0 4px}.ant-steps-vertical.ant-steps-dot .ant-steps-item:first-child .ant-steps-icon-dot{left:0}.ant-steps-vertical.ant-steps-dot .ant-steps-item-content{width:inherit}.ant-steps-vertical.ant-steps-dot .ant-steps-item-process .ant-steps-item-container .ant-steps-item-icon .ant-steps-icon-dot{top:-1px;left:-1px}.ant-steps-navigation{padding-top:12px}.ant-steps-navigation.ant-steps-small .ant-steps-item-container{margin-left:-12px}.ant-steps-navigation .ant-steps-item{overflow:visible;text-align:center}.ant-steps-navigation .ant-steps-item-container{display:inline-block;height:100%;margin-left:-16px;padding-bottom:12px;text-align:left;transition:opacity .3s}.ant-steps-navigation .ant-steps-item-container .ant-steps-item-content{max-width:auto}.ant-steps-navigation .ant-steps-item-container .ant-steps-item-title{max-width:100%;padding-right:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ant-steps-navigation .ant-steps-item-container .ant-steps-item-title:after{display:none}.ant-steps-navigation .ant-steps-item:not(.ant-steps-item-active) .ant-steps-item-container[role=button]{cursor:pointer}.ant-steps-navigation .ant-steps-item:not(.ant-steps-item-active) .ant-steps-item-container[role=button]:hover{opacity:.85}.ant-steps-navigation .ant-steps-item:last-child{flex:1}.ant-steps-navigation .ant-steps-item:last-child:after{display:none}.ant-steps-navigation .ant-steps-item:after{position:absolute;top:50%;left:100%;display:inline-block;width:12px;height:12px;margin-top:-14px;margin-left:-2px;border:1px solid rgba(0,0,0,.25);border-bottom:none;border-left:none;transform:rotate(45deg);content:""}.ant-steps-navigation .ant-steps-item:before{position:absolute;bottom:0;left:50%;display:inline-block;width:0;height:2px;background-color:#1890ff;transition:width .3s,left .3s;transition-timing-function:ease-out;content:""}.ant-steps-navigation .ant-steps-item.ant-steps-item-active:before{left:0;width:100%}.ant-steps-navigation.ant-steps-vertical>.ant-steps-item{margin-right:0!important}.ant-steps-navigation.ant-steps-vertical>.ant-steps-item:before{display:none}.ant-steps-navigation.ant-steps-vertical>.ant-steps-item.ant-steps-item-active:before{top:0;right:0;left:unset;display:block;width:3px;height:calc(100% - 24px)}.ant-steps-navigation.ant-steps-vertical>.ant-steps-item:after{position:relative;top:-2px;left:50%;display:block;width:8px;height:8px;margin-bottom:8px;text-align:center;transform:rotate(135deg)}.ant-steps-navigation.ant-steps-vertical>.ant-steps-item>.ant-steps-item-container>.ant-steps-item-tail{visibility:hidden}.ant-steps-navigation.ant-steps-horizontal>.ant-steps-item>.ant-steps-item-container>.ant-steps-item-tail{visibility:hidden}.ant-steps-rtl{direction:rtl}.ant-steps.ant-steps-rtl .ant-steps-item-icon{margin-right:0;margin-left:8px}.ant-steps-rtl .ant-steps-item-tail{right:0;left:auto}.ant-steps-rtl .ant-steps-item-title{padding-right:0;padding-left:16px}.ant-steps-rtl .ant-steps-item-title:after{right:100%;left:auto}.ant-steps-rtl.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item{padding-right:16px;padding-left:0}.ant-steps-rtl.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:first-child{padding-right:0}.ant-steps-rtl.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:last-child .ant-steps-item-title{padding-left:0}.ant-steps-rtl .ant-steps-item-custom .ant-steps-item-icon>.ant-steps-icon{right:.5px;left:auto}.ant-steps-rtl.ant-steps-navigation.ant-steps-small .ant-steps-item-container{margin-right:-12px;margin-left:0}.ant-steps-rtl.ant-steps-navigation .ant-steps-item-container{margin-right:-16px;margin-left:0;text-align:right}.ant-steps-rtl.ant-steps-navigation .ant-steps-item-container .ant-steps-item-title{padding-left:0}.ant-steps-rtl.ant-steps-navigation .ant-steps-item:after{right:100%;left:auto;margin-right:-2px;margin-left:0;transform:rotate(225deg)}.ant-steps-rtl.ant-steps-small.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item{padding-right:12px;padding-left:0}.ant-steps-rtl.ant-steps-small.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:first-child{padding-right:0}.ant-steps-rtl.ant-steps-small .ant-steps-item-title{padding-right:0;padding-left:12px}.ant-steps-rtl.ant-steps-vertical>.ant-steps-item .ant-steps-item-icon{float:right;margin-right:0;margin-left:16px}.ant-steps-rtl.ant-steps-vertical>.ant-steps-item>.ant-steps-item-container>.ant-steps-item-tail{right:16px;left:auto}.ant-steps-rtl.ant-steps-vertical.ant-steps-small .ant-steps-item-container .ant-steps-item-tail{right:12px;left:auto}.ant-steps-rtl.ant-steps-label-vertical .ant-steps-item-title{padding-left:0}.ant-steps-rtl.ant-steps-dot .ant-steps-item-tail,.ant-steps-rtl.ant-steps-dot.ant-steps-small .ant-steps-item-tail{margin:0 70px 0 0}.ant-steps-rtl.ant-steps-dot .ant-steps-item-tail:after,.ant-steps-rtl.ant-steps-dot.ant-steps-small .ant-steps-item-tail:after{margin-right:12px;margin-left:0}.ant-steps-rtl.ant-steps-dot .ant-steps-item:first-child .ant-steps-icon-dot,.ant-steps-rtl.ant-steps-dot.ant-steps-small .ant-steps-item:first-child .ant-steps-icon-dot{right:2px;left:auto}.ant-steps-rtl.ant-steps-dot .ant-steps-item-icon,.ant-steps-rtl.ant-steps-dot.ant-steps-small .ant-steps-item-icon{margin-right:67px;margin-left:0}.ant-steps-rtl.ant-steps-dot .ant-steps-item-icon .ant-steps-icon-dot,.ant-steps-rtl.ant-steps-dot.ant-steps-small .ant-steps-item-icon .ant-steps-icon-dot{float:right}.ant-steps-rtl.ant-steps-dot .ant-steps-item-icon .ant-steps-icon-dot:after,.ant-steps-rtl.ant-steps-dot.ant-steps-small .ant-steps-item-icon .ant-steps-icon-dot:after{right:-26px;left:auto}.ant-steps-rtl.ant-steps-vertical.ant-steps-dot .ant-steps-item-icon{margin-right:0;margin-left:16px}.ant-steps-rtl.ant-steps-vertical.ant-steps-dot .ant-steps-item>.ant-steps-item-container>.ant-steps-item-tail{right:-9px;left:auto}.ant-steps-rtl.ant-steps-vertical.ant-steps-dot .ant-steps-item:first-child .ant-steps-icon-dot{right:0;left:auto}.ant-steps-rtl.ant-steps-vertical.ant-steps-dot .ant-steps-item-process .ant-steps-icon-dot{right:-2px;left:auto}.ant-steps-rtl.ant-steps-with-progress.ant-steps-horizontal.ant-steps-label-horizontal .ant-steps-item:first-child.ant-steps-item-active{padding-right:4px}.ant-steps-with-progress .ant-steps-item{padding-top:4px}.ant-steps-with-progress .ant-steps-item .ant-steps-item-tail{top:4px!important}.ant-steps-with-progress.ant-steps-horizontal .ant-steps-item:first-child{padding-bottom:4px;padding-left:4px}.ant-steps-with-progress .ant-steps-item-icon{position:relative}.ant-steps-with-progress .ant-steps-item-icon .ant-progress{position:absolute;top:-5px;right:-5px;bottom:-5px;left:-5px}/*!***********************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/switch/style/index.less ***! + \***********************************************************************************************************************************************************************************************************************************************************/.ant-switch{margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;display:inline-block;box-sizing:border-box;min-width:44px;height:22px;line-height:22px;vertical-align:middle;background-color:#00000040;border:0;border-radius:100px;cursor:pointer;transition:all .2s;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-switch:focus{outline:0;box-shadow:0 0 0 2px #0000001a}.ant-switch-checked:focus{box-shadow:0 0 0 2px #e6f7ff}.ant-switch:focus:hover{box-shadow:none}.ant-switch-checked{background-color:#1890ff}.ant-switch-loading,.ant-switch-disabled{cursor:not-allowed;opacity:.4}.ant-switch-loading *,.ant-switch-disabled *{box-shadow:none;cursor:not-allowed}.ant-switch-inner{display:block;margin:0 7px 0 25px;color:#fff;font-size:12px;transition:margin .2s}.ant-switch-checked .ant-switch-inner{margin:0 25px 0 7px}.ant-switch-handle{position:absolute;top:2px;left:2px;width:18px;height:18px;transition:all .2s ease-in-out}.ant-switch-handle:before{position:absolute;top:0;right:0;bottom:0;left:0;background-color:#fff;border-radius:9px;box-shadow:0 2px 4px #00230b33;transition:all .2s ease-in-out;content:""}.ant-switch-checked .ant-switch-handle{left:calc(100% - 20px)}.ant-switch:not(.ant-switch-disabled):active .ant-switch-handle:before{right:-30%;left:0}.ant-switch:not(.ant-switch-disabled):active.ant-switch-checked .ant-switch-handle:before{right:0;left:-30%}.ant-switch-loading-icon.anticon{position:relative;top:2px;color:#000000a6;vertical-align:top}.ant-switch-checked .ant-switch-loading-icon{color:#1890ff}.ant-switch-small{min-width:28px;height:16px;line-height:16px}.ant-switch-small .ant-switch-inner{margin:0 5px 0 18px;font-size:12px}.ant-switch-small .ant-switch-handle{width:12px;height:12px}.ant-switch-small .ant-switch-loading-icon{top:1.5px;font-size:9px}.ant-switch-small.ant-switch-checked .ant-switch-inner{margin:0 18px 0 5px}.ant-switch-small.ant-switch-checked .ant-switch-handle{left:calc(100% - 14px)}.ant-switch-rtl{direction:rtl}.ant-switch-rtl .ant-switch-inner{margin:0 25px 0 7px}.ant-switch-rtl .ant-switch-handle{right:2px;left:auto}.ant-switch-rtl:not(.ant-switch-rtl-disabled):active .ant-switch-handle:before{right:0;left:-30%}.ant-switch-rtl:not(.ant-switch-rtl-disabled):active.ant-switch-checked .ant-switch-handle:before{right:-30%;left:0}.ant-switch-rtl.ant-switch-checked .ant-switch-inner{margin:0 7px 0 25px}.ant-switch-rtl.ant-switch-checked .ant-switch-handle{right:calc(100% - 20px)}.ant-switch-rtl.ant-switch-small.ant-switch-checked .ant-switch-handle{right:calc(100% - 14px)}/*!**********************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/table/style/index.less ***! + \**********************************************************************************************************************************************************************************************************************************************************/.ant-table.ant-table-middle{font-size:14px}.ant-table.ant-table-middle .ant-table-title,.ant-table.ant-table-middle .ant-table-footer,.ant-table.ant-table-middle .ant-table-thead>tr>th,.ant-table.ant-table-middle .ant-table-tbody>tr>td,.ant-table.ant-table-middle tfoot>tr>th,.ant-table.ant-table-middle tfoot>tr>td{padding:12px 8px}.ant-table.ant-table-middle .ant-table-filter-trigger{margin-right:-4px}.ant-table.ant-table-middle .ant-table-expanded-row-fixed{margin:-12px -8px}.ant-table.ant-table-middle .ant-table-tbody .ant-table-wrapper:only-child .ant-table{margin:-12px -8px -12px 25px}.ant-table.ant-table-small{font-size:14px}.ant-table.ant-table-small .ant-table-title,.ant-table.ant-table-small .ant-table-footer,.ant-table.ant-table-small .ant-table-thead>tr>th,.ant-table.ant-table-small .ant-table-tbody>tr>td,.ant-table.ant-table-small tfoot>tr>th,.ant-table.ant-table-small tfoot>tr>td{padding:8px}.ant-table.ant-table-small .ant-table-filter-trigger{margin-right:-4px}.ant-table.ant-table-small .ant-table-expanded-row-fixed{margin:-8px}.ant-table.ant-table-small .ant-table-tbody .ant-table-wrapper:only-child .ant-table{margin:-8px -8px -8px 25px}.ant-table-small .ant-table-thead>tr>th{background-color:#fafafa}.ant-table-small .ant-table-selection-column{width:46px;min-width:46px}.ant-table.ant-table-bordered>.ant-table-title{border:1px solid #f0f0f0;border-bottom:0}.ant-table.ant-table-bordered>.ant-table-container{border-left:1px solid #f0f0f0}.ant-table.ant-table-bordered>.ant-table-container>.ant-table-content>table>thead>tr>th,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-header>table>thead>tr>th,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-body>table>thead>tr>th,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-summary>table>thead>tr>th,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-content>table>tbody>tr>td,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-header>table>tbody>tr>td,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-body>table>tbody>tr>td,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-summary>table>tbody>tr>td,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-content>table>tfoot>tr>th,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-header>table>tfoot>tr>th,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-body>table>tfoot>tr>th,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-summary>table>tfoot>tr>th,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-content>table>tfoot>tr>td,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-header>table>tfoot>tr>td,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-body>table>tfoot>tr>td,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-summary>table>tfoot>tr>td{border-right:1px solid #f0f0f0}.ant-table.ant-table-bordered>.ant-table-container>.ant-table-content>table>thead>tr:not(:last-child)>th,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-header>table>thead>tr:not(:last-child)>th,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-body>table>thead>tr:not(:last-child)>th,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-summary>table>thead>tr:not(:last-child)>th{border-bottom:1px solid #f0f0f0}.ant-table.ant-table-bordered>.ant-table-container>.ant-table-content>table>thead>tr>th:before,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-header>table>thead>tr>th:before,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-body>table>thead>tr>th:before,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-summary>table>thead>tr>th:before{background-color:transparent!important}.ant-table.ant-table-bordered>.ant-table-container>.ant-table-content>table>thead>tr>.ant-table-cell-fix-right-first:after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-header>table>thead>tr>.ant-table-cell-fix-right-first:after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-body>table>thead>tr>.ant-table-cell-fix-right-first:after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-summary>table>thead>tr>.ant-table-cell-fix-right-first:after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-content>table>tbody>tr>.ant-table-cell-fix-right-first:after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-header>table>tbody>tr>.ant-table-cell-fix-right-first:after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-body>table>tbody>tr>.ant-table-cell-fix-right-first:after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-summary>table>tbody>tr>.ant-table-cell-fix-right-first:after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-content>table>tfoot>tr>.ant-table-cell-fix-right-first:after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-header>table>tfoot>tr>.ant-table-cell-fix-right-first:after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-body>table>tfoot>tr>.ant-table-cell-fix-right-first:after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-summary>table>tfoot>tr>.ant-table-cell-fix-right-first:after{border-right:1px solid #f0f0f0}.ant-table.ant-table-bordered>.ant-table-container>.ant-table-content>table>tbody>tr>td>.ant-table-expanded-row-fixed,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-header>table>tbody>tr>td>.ant-table-expanded-row-fixed,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-body>table>tbody>tr>td>.ant-table-expanded-row-fixed,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-summary>table>tbody>tr>td>.ant-table-expanded-row-fixed{margin:-16px -17px}.ant-table.ant-table-bordered>.ant-table-container>.ant-table-content>table>tbody>tr>td>.ant-table-expanded-row-fixed:after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-header>table>tbody>tr>td>.ant-table-expanded-row-fixed:after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-body>table>tbody>tr>td>.ant-table-expanded-row-fixed:after,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-summary>table>tbody>tr>td>.ant-table-expanded-row-fixed:after{position:absolute;top:0;right:1px;bottom:0;border-right:1px solid #f0f0f0;content:""}.ant-table.ant-table-bordered>.ant-table-container>.ant-table-content>table,.ant-table.ant-table-bordered>.ant-table-container>.ant-table-header>table{border-top:1px solid #f0f0f0}.ant-table.ant-table-bordered.ant-table-scroll-horizontal>.ant-table-container>.ant-table-body>table>tbody>tr.ant-table-expanded-row>td,.ant-table.ant-table-bordered.ant-table-scroll-horizontal>.ant-table-container>.ant-table-body>table>tbody>tr.ant-table-placeholder>td{border-right:0}.ant-table.ant-table-bordered.ant-table-middle>.ant-table-container>.ant-table-content>table>tbody>tr>td>.ant-table-expanded-row-fixed,.ant-table.ant-table-bordered.ant-table-middle>.ant-table-container>.ant-table-body>table>tbody>tr>td>.ant-table-expanded-row-fixed{margin:-12px -9px}.ant-table.ant-table-bordered.ant-table-small>.ant-table-container>.ant-table-content>table>tbody>tr>td>.ant-table-expanded-row-fixed,.ant-table.ant-table-bordered.ant-table-small>.ant-table-container>.ant-table-body>table>tbody>tr>td>.ant-table-expanded-row-fixed{margin:-8px -9px}.ant-table.ant-table-bordered>.ant-table-footer{border:1px solid #f0f0f0;border-top:0}.ant-table-cell .ant-table-container:first-child{border-top:0}.ant-table-cell-scrollbar{box-shadow:0 1px 0 1px #fafafa}.ant-table-resize-handle{position:absolute;top:0;height:100%!important;bottom:0;left:auto!important;right:-8px;cursor:col-resize;touch-action:none;-webkit-user-select:auto;-moz-user-select:auto;user-select:auto;width:16px;z-index:1}.ant-table-resize-handle-line{display:block;width:1px;margin-left:7px;height:100%!important;background-color:#1890ff;opacity:0}.ant-table-resize-handle:hover .ant-table-resize-handle-line{opacity:1}.ant-table-resize-handle.dragging{overflow:hidden}.ant-table-resize-handle.dragging .ant-table-resize-handle-line{opacity:1}.ant-table-resize-handle.dragging:before{position:absolute;top:0;bottom:0;width:100%;content:" ";width:200vw;transform:translate(-50%);opacity:0}.ant-table-wrapper{clear:both;max-width:100%}.ant-table-wrapper:before{display:table;content:""}.ant-table-wrapper:after{display:table;clear:both;content:""}.ant-table{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;font-size:14px;background:#fff;border-radius:2px}.ant-table table{width:100%;text-align:left;border-radius:2px 2px 0 0;border-collapse:separate;border-spacing:0}.ant-table-thead>tr>th,.ant-table-tbody>tr>td,.ant-table tfoot>tr>th,.ant-table tfoot>tr>td{position:relative;padding:16px;overflow-wrap:break-word}.ant-table-cell-ellipsis{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;word-break:keep-all}.ant-table-cell-ellipsis.ant-table-cell-fix-left-last,.ant-table-cell-ellipsis.ant-table-cell-fix-right-first{overflow:visible}.ant-table-cell-ellipsis.ant-table-cell-fix-left-last .ant-table-cell-content,.ant-table-cell-ellipsis.ant-table-cell-fix-right-first .ant-table-cell-content{display:block;overflow:hidden;text-overflow:ellipsis}.ant-table-cell-ellipsis .ant-table-column-title{overflow:hidden;text-overflow:ellipsis;word-break:keep-all}.ant-table-title{padding:16px}.ant-table-footer{padding:16px;color:#000000d9;background:#fafafa}.ant-table-thead>tr>th{position:relative;color:#000000d9;font-weight:500;text-align:left;background:#fafafa;border-bottom:1px solid #f0f0f0;transition:background .3s ease}.ant-table-thead>tr>th[colspan]:not([colspan="1"]){text-align:center}.ant-table-thead>tr>th:not(:last-child):not(.ant-table-selection-column):not(.ant-table-row-expand-icon-cell):not([colspan]):before{position:absolute;top:50%;right:0;width:1px;height:1.6em;background-color:#0000000f;transform:translateY(-50%);transition:background-color .3s;content:""}.ant-table-thead>tr:not(:last-child)>th[colspan]{border-bottom:0}.ant-table-tbody>tr>td{border-bottom:1px solid #f0f0f0;transition:background .3s}.ant-table-tbody>tr>td>.ant-table-wrapper:only-child .ant-table,.ant-table-tbody>tr>td>.ant-table-expanded-row-fixed>.ant-table-wrapper:only-child .ant-table{margin:-16px -16px -16px 33px}.ant-table-tbody>tr>td>.ant-table-wrapper:only-child .ant-table-tbody>tr:last-child>td,.ant-table-tbody>tr>td>.ant-table-expanded-row-fixed>.ant-table-wrapper:only-child .ant-table-tbody>tr:last-child>td{border-bottom:0}.ant-table-tbody>tr>td>.ant-table-wrapper:only-child .ant-table-tbody>tr:last-child>td:first-child,.ant-table-tbody>tr>td>.ant-table-expanded-row-fixed>.ant-table-wrapper:only-child .ant-table-tbody>tr:last-child>td:first-child,.ant-table-tbody>tr>td>.ant-table-wrapper:only-child .ant-table-tbody>tr:last-child>td:last-child,.ant-table-tbody>tr>td>.ant-table-expanded-row-fixed>.ant-table-wrapper:only-child .ant-table-tbody>tr:last-child>td:last-child{border-radius:0}.ant-table-tbody>tr.ant-table-row:hover>td,.ant-table-tbody>tr>td.ant-table-cell-row-hover{background:#fafafa}.ant-table-tbody>tr.ant-table-row-selected>td{background:#e6f7ff;border-color:#00000008}.ant-table-tbody>tr.ant-table-row-selected:hover>td{background:#dcf4ff}.ant-table-summary{position:relative;z-index:2;background:#fff}div.ant-table-summary{box-shadow:0 -1px #f0f0f0}.ant-table-summary>tr>th,.ant-table-summary>tr>td{border-bottom:1px solid #f0f0f0}.ant-table-pagination.ant-pagination{margin:16px 0}.ant-table-pagination{display:flex;flex-wrap:wrap;row-gap:8px}.ant-table-pagination>*{flex:none}.ant-table-pagination-left{justify-content:flex-start}.ant-table-pagination-center{justify-content:center}.ant-table-pagination-right{justify-content:flex-end}.ant-table-thead th.ant-table-column-has-sorters{cursor:pointer;transition:all .3s}.ant-table-thead th.ant-table-column-has-sorters:hover{background:rgba(0,0,0,.04)}.ant-table-thead th.ant-table-column-has-sorters:hover:before{background-color:transparent!important}.ant-table-thead th.ant-table-column-has-sorters.ant-table-cell-fix-left:hover,.ant-table-thead th.ant-table-column-has-sorters.ant-table-cell-fix-right:hover,.ant-table-thead th.ant-table-column-sort{background:#f5f5f5}.ant-table-thead th.ant-table-column-sort:before{background-color:transparent!important}td.ant-table-column-sort{background:#fafafa}.ant-table-column-title{position:relative;z-index:1;flex:1}.ant-table-column-sorters{display:flex;flex:auto;align-items:center;justify-content:space-between}.ant-table-column-sorters:after{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;content:""}.ant-table-column-sorter{margin-left:4px;color:#bfbfbf;font-size:0;transition:color .3s}.ant-table-column-sorter-inner{display:inline-flex;flex-direction:column;align-items:center}.ant-table-column-sorter-up,.ant-table-column-sorter-down{font-size:11px}.ant-table-column-sorter-up.active,.ant-table-column-sorter-down.active{color:#1890ff}.ant-table-column-sorter-up+.ant-table-column-sorter-down{margin-top:-.3em}.ant-table-column-sorters:hover .ant-table-column-sorter{color:#a6a6a6}.ant-table-filter-column{display:flex;justify-content:space-between}.ant-table-filter-trigger{position:relative;display:flex;align-items:center;margin:-4px -8px -4px 4px;padding:0 4px;color:#bfbfbf;font-size:12px;border-radius:2px;cursor:pointer;transition:all .3s}.ant-table-filter-trigger:hover{color:#00000073;background:rgba(0,0,0,.04)}.ant-table-filter-trigger.active{color:#1890ff}.ant-table-filter-dropdown{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";min-width:120px;background-color:#fff;border-radius:2px;box-shadow:0 3px 6px -4px #0000001f,0 6px 16px #00000014,0 9px 28px 8px #0000000d}.ant-table-filter-dropdown .ant-dropdown-menu{max-height:264px;overflow-x:hidden;border:0;box-shadow:none}.ant-table-filter-dropdown .ant-dropdown-menu:empty:after{display:block;padding:8px 0;color:#00000040;font-size:12px;text-align:center;content:"Not Found"}.ant-table-filter-dropdown-tree{padding:8px 8px 0}.ant-table-filter-dropdown-tree .ant-tree-treenode .ant-tree-node-content-wrapper:hover{background-color:#f5f5f5}.ant-table-filter-dropdown-tree .ant-tree-treenode-checkbox-checked .ant-tree-node-content-wrapper,.ant-table-filter-dropdown-tree .ant-tree-treenode-checkbox-checked .ant-tree-node-content-wrapper:hover{background-color:#bae7ff}.ant-table-filter-dropdown-search{padding:8px;border-bottom:1px #f0f0f0 solid}.ant-table-filter-dropdown-search-input input{min-width:140px}.ant-table-filter-dropdown-search-input .anticon{color:#00000040}.ant-table-filter-dropdown-checkall{width:100%;margin-bottom:4px;margin-left:4px}.ant-table-filter-dropdown-submenu>ul{max-height:calc(100vh - 130px);overflow-x:hidden;overflow-y:auto}.ant-table-filter-dropdown .ant-checkbox-wrapper+span,.ant-table-filter-dropdown-submenu .ant-checkbox-wrapper+span{padding-left:8px}.ant-table-filter-dropdown-btns{display:flex;justify-content:space-between;padding:7px 8px;overflow:hidden;background-color:inherit;border-top:1px solid #f0f0f0}.ant-table-selection-col{width:32px}.ant-table-bordered .ant-table-selection-col{width:50px}table tr th.ant-table-selection-column,table tr td.ant-table-selection-column{padding-right:8px;padding-left:8px;text-align:center}table tr th.ant-table-selection-column .ant-radio-wrapper,table tr td.ant-table-selection-column .ant-radio-wrapper{margin-right:0}table tr th.ant-table-selection-column.ant-table-cell-fix-left{z-index:3}table tr th.ant-table-selection-column:after{background-color:transparent!important}.ant-table-selection{position:relative;display:inline-flex;flex-direction:column}.ant-table-selection-extra{position:absolute;top:0;z-index:1;cursor:pointer;transition:all .3s;-webkit-margin-start:100%;margin-inline-start:100%;-webkit-padding-start:4px;padding-inline-start:4px}.ant-table-selection-extra .anticon{color:#bfbfbf;font-size:10px}.ant-table-selection-extra .anticon:hover{color:#a6a6a6}.ant-table-expand-icon-col{width:48px}.ant-table-row-expand-icon-cell{text-align:center}.ant-table-row-indent{float:left;height:1px}.ant-table-row-expand-icon{color:#1890ff;text-decoration:none;cursor:pointer;transition:color .3s;position:relative;display:inline-flex;float:left;box-sizing:border-box;width:17px;height:17px;padding:0;color:inherit;line-height:17px;background:#fff;border:1px solid #f0f0f0;border-radius:2px;outline:none;transform:scale(.94117647);transition:all .3s;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-table-row-expand-icon:focus,.ant-table-row-expand-icon:hover{color:#40a9ff}.ant-table-row-expand-icon:active{color:#096dd9}.ant-table-row-expand-icon:focus,.ant-table-row-expand-icon:hover,.ant-table-row-expand-icon:active{border-color:currentcolor}.ant-table-row-expand-icon:before,.ant-table-row-expand-icon:after{position:absolute;background:currentcolor;transition:transform .3s ease-out;content:""}.ant-table-row-expand-icon:before{top:7px;right:3px;left:3px;height:1px}.ant-table-row-expand-icon:after{top:3px;bottom:3px;left:7px;width:1px;transform:rotate(90deg)}.ant-table-row-expand-icon-collapsed:before{transform:rotate(-180deg)}.ant-table-row-expand-icon-collapsed:after{transform:rotate(0)}.ant-table-row-expand-icon-spaced{background:transparent;border:0;visibility:hidden}.ant-table-row-expand-icon-spaced:before,.ant-table-row-expand-icon-spaced:after{display:none;content:none}.ant-table-row-indent+.ant-table-row-expand-icon{margin-top:2.5005px;margin-right:8px}tr.ant-table-expanded-row>td,tr.ant-table-expanded-row:hover>td{background:#fbfbfb}tr.ant-table-expanded-row .ant-descriptions-view{display:flex}tr.ant-table-expanded-row .ant-descriptions-view table{flex:auto;width:auto}.ant-table .ant-table-expanded-row-fixed{position:relative;margin:-16px;padding:16px}.ant-table-tbody>tr.ant-table-placeholder{text-align:center}.ant-table-empty .ant-table-tbody>tr.ant-table-placeholder{color:#00000040}.ant-table-tbody>tr.ant-table-placeholder:hover>td{background:#fff}.ant-table-cell-fix-left,.ant-table-cell-fix-right{position:sticky!important;z-index:2;background:#fff}.ant-table-cell-fix-left-first:after,.ant-table-cell-fix-left-last:after{position:absolute;top:0;right:0;bottom:-1px;width:30px;transform:translate(100%);transition:box-shadow .3s;content:"";pointer-events:none}.ant-table-cell-fix-right-first:after,.ant-table-cell-fix-right-last:after{position:absolute;top:0;bottom:-1px;left:0;width:30px;transform:translate(-100%);transition:box-shadow .3s;content:"";pointer-events:none}.ant-table .ant-table-container:before,.ant-table .ant-table-container:after{position:absolute;top:0;bottom:0;z-index:2;width:30px;transition:box-shadow .3s;content:"";pointer-events:none}.ant-table .ant-table-container:before{left:0}.ant-table .ant-table-container:after{right:0}.ant-table-ping-left:not(.ant-table-has-fix-left) .ant-table-container{position:relative}.ant-table-ping-left:not(.ant-table-has-fix-left) .ant-table-container:before{box-shadow:inset 10px 0 8px -8px #00000026}.ant-table-ping-left .ant-table-cell-fix-left-first:after,.ant-table-ping-left .ant-table-cell-fix-left-last:after{box-shadow:inset 10px 0 8px -8px #00000026}.ant-table-ping-left .ant-table-cell-fix-left-last:before{background-color:transparent!important}.ant-table-ping-right:not(.ant-table-has-fix-right) .ant-table-container{position:relative}.ant-table-ping-right:not(.ant-table-has-fix-right) .ant-table-container:after{box-shadow:inset -10px 0 8px -8px #00000026}.ant-table-ping-right .ant-table-cell-fix-right-first:after,.ant-table-ping-right .ant-table-cell-fix-right-last:after{box-shadow:inset -10px 0 8px -8px #00000026}.ant-table-sticky-holder{position:sticky;z-index:3;background:#fff}.ant-table-sticky-scroll{position:sticky;bottom:0;z-index:3;display:flex;align-items:center;background:#ffffff;border-top:1px solid #f0f0f0;opacity:.6}.ant-table-sticky-scroll:hover{transform-origin:center bottom}.ant-table-sticky-scroll-bar{height:8px;background-color:#00000059;border-radius:4px}.ant-table-sticky-scroll-bar:hover,.ant-table-sticky-scroll-bar-active{background-color:#000c}@media all and (-ms-high-contrast: none){.ant-table-ping-left .ant-table-cell-fix-left-last:after{box-shadow:none!important}.ant-table-ping-right .ant-table-cell-fix-right-first:after{box-shadow:none!important}}.ant-table-title{border-radius:2px 2px 0 0}.ant-table-title+.ant-table-container{border-top-left-radius:0;border-top-right-radius:0}.ant-table-title+.ant-table-container table>thead>tr:first-child th:first-child{border-radius:0}.ant-table-title+.ant-table-container table>thead>tr:first-child th:last-child{border-radius:0}.ant-table-container{border-top-left-radius:2px;border-top-right-radius:2px}.ant-table-container table>thead>tr:first-child th:first-child{border-top-left-radius:2px}.ant-table-container table>thead>tr:first-child th:last-child{border-top-right-radius:2px}.ant-table-footer{border-radius:0 0 2px 2px}.ant-table-wrapper-rtl,.ant-table-rtl{direction:rtl}.ant-table-wrapper-rtl .ant-table table{text-align:right}.ant-table-wrapper-rtl .ant-table-thead>tr>th[colspan]:not([colspan="1"]){text-align:center}.ant-table-wrapper-rtl .ant-table-thead>tr>th:not(:last-child):not(.ant-table-selection-column):not(.ant-table-row-expand-icon-cell):not([colspan]):before{right:auto;left:0}.ant-table-wrapper-rtl .ant-table-thead>tr>th{text-align:right}.ant-table-tbody>tr .ant-table-wrapper:only-child .ant-table.ant-table-rtl{margin:-16px 33px -16px -16px}.ant-table-wrapper.ant-table-wrapper-rtl .ant-table-pagination-left{justify-content:flex-end}.ant-table-wrapper.ant-table-wrapper-rtl .ant-table-pagination-right{justify-content:flex-start}.ant-table-wrapper-rtl .ant-table-column-sorter{margin-right:4px;margin-left:0}.ant-table-wrapper-rtl .ant-table-filter-column-title{padding:16px 16px 16px 2.3em}.ant-table-rtl .ant-table-thead tr th.ant-table-column-has-sorters .ant-table-filter-column-title{padding:0 0 0 2.3em}.ant-table-wrapper-rtl .ant-table-filter-trigger{margin:-4px 4px -4px -8px}.ant-dropdown-rtl .ant-table-filter-dropdown .ant-checkbox-wrapper+span,.ant-dropdown-rtl .ant-table-filter-dropdown-submenu .ant-checkbox-wrapper+span,.ant-dropdown-menu-submenu-rtl.ant-table-filter-dropdown .ant-checkbox-wrapper+span,.ant-dropdown-menu-submenu-rtl.ant-table-filter-dropdown-submenu .ant-checkbox-wrapper+span{padding-right:8px;padding-left:0}.ant-table-wrapper-rtl .ant-table-selection{text-align:center}.ant-table-wrapper-rtl .ant-table-row-indent,.ant-table-wrapper-rtl .ant-table-row-expand-icon{float:right}.ant-table-wrapper-rtl .ant-table-row-indent+.ant-table-row-expand-icon{margin-right:0;margin-left:8px}.ant-table-wrapper-rtl .ant-table-row-expand-icon:after{transform:rotate(-90deg)}.ant-table-wrapper-rtl .ant-table-row-expand-icon-collapsed:before{transform:rotate(180deg)}.ant-table-wrapper-rtl .ant-table-row-expand-icon-collapsed:after{transform:rotate(0)}/*!*********************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/tree/style/index.less ***! + \*********************************************************************************************************************************************************************************************************************************************************/.ant-tree.ant-tree-directory .ant-tree-treenode{position:relative}.ant-tree.ant-tree-directory .ant-tree-treenode:before{position:absolute;top:0;right:0;bottom:4px;left:0;transition:background-color .3s;content:"";pointer-events:none}.ant-tree.ant-tree-directory .ant-tree-treenode:hover:before{background:#f5f5f5}.ant-tree.ant-tree-directory .ant-tree-treenode>*{z-index:1}.ant-tree.ant-tree-directory .ant-tree-treenode .ant-tree-switcher{transition:color .3s}.ant-tree.ant-tree-directory .ant-tree-treenode .ant-tree-node-content-wrapper{border-radius:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-tree.ant-tree-directory .ant-tree-treenode .ant-tree-node-content-wrapper:hover{background:transparent}.ant-tree.ant-tree-directory .ant-tree-treenode .ant-tree-node-content-wrapper.ant-tree-node-selected{color:#fff;background:transparent}.ant-tree.ant-tree-directory .ant-tree-treenode-selected:hover:before,.ant-tree.ant-tree-directory .ant-tree-treenode-selected:before{background:#1890ff}.ant-tree.ant-tree-directory .ant-tree-treenode-selected .ant-tree-switcher{color:#fff}.ant-tree.ant-tree-directory .ant-tree-treenode-selected .ant-tree-node-content-wrapper{color:#fff;background:transparent}.ant-tree-checkbox{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;top:.2em;line-height:1;white-space:nowrap;outline:none;cursor:pointer}.ant-tree-checkbox-wrapper:hover .ant-tree-checkbox-inner,.ant-tree-checkbox:hover .ant-tree-checkbox-inner,.ant-tree-checkbox-input:focus+.ant-tree-checkbox-inner{border-color:#1890ff}.ant-tree-checkbox-checked:after{position:absolute;top:0;left:0;width:100%;height:100%;border:1px solid #1890ff;border-radius:2px;visibility:hidden;animation:antCheckboxEffect .36s ease-in-out;animation-fill-mode:backwards;content:""}.ant-tree-checkbox:hover:after,.ant-tree-checkbox-wrapper:hover .ant-tree-checkbox:after{visibility:visible}.ant-tree-checkbox-inner{position:relative;top:0;left:0;display:block;width:16px;height:16px;direction:ltr;background-color:#fff;border:1px solid #d9d9d9;border-radius:2px;border-collapse:separate;transition:all .3s}.ant-tree-checkbox-inner:after{position:absolute;top:50%;left:21.5%;display:table;width:5.71428571px;height:9.14285714px;border:2px solid #fff;border-top:0;border-left:0;transform:rotate(45deg) scale(0) translate(-50%,-50%);opacity:0;transition:all .1s cubic-bezier(.71,-.46,.88,.6),opacity .1s;content:" "}.ant-tree-checkbox-input{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;width:100%;height:100%;cursor:pointer;opacity:0}.ant-tree-checkbox-checked .ant-tree-checkbox-inner:after{position:absolute;display:table;border:2px solid #fff;border-top:0;border-left:0;transform:rotate(45deg) scale(1) translate(-50%,-50%);opacity:1;transition:all .2s cubic-bezier(.12,.4,.29,1.46) .1s;content:" "}.ant-tree-checkbox-checked .ant-tree-checkbox-inner{background-color:#1890ff;border-color:#1890ff}.ant-tree-checkbox-disabled{cursor:not-allowed}.ant-tree-checkbox-disabled.ant-tree-checkbox-checked .ant-tree-checkbox-inner:after{border-color:#00000040;animation-name:none}.ant-tree-checkbox-disabled .ant-tree-checkbox-input{cursor:not-allowed;pointer-events:none}.ant-tree-checkbox-disabled .ant-tree-checkbox-inner{background-color:#f5f5f5;border-color:#d9d9d9!important}.ant-tree-checkbox-disabled .ant-tree-checkbox-inner:after{border-color:#f5f5f5;border-collapse:separate;animation-name:none}.ant-tree-checkbox-disabled+span{color:#00000040;cursor:not-allowed}.ant-tree-checkbox-disabled:hover:after,.ant-tree-checkbox-wrapper:hover .ant-tree-checkbox-disabled:after{visibility:hidden}.ant-tree-checkbox-wrapper{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";display:inline-flex;align-items:baseline;line-height:unset;cursor:pointer}.ant-tree-checkbox-wrapper:after{display:inline-block;width:0;overflow:hidden;content:" "}.ant-tree-checkbox-wrapper.ant-tree-checkbox-wrapper-disabled{cursor:not-allowed}.ant-tree-checkbox-wrapper+.ant-tree-checkbox-wrapper{margin-left:8px}.ant-tree-checkbox+span{padding-right:8px;padding-left:8px}.ant-tree-checkbox-group{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";display:inline-block}.ant-tree-checkbox-group-item{margin-right:8px}.ant-tree-checkbox-group-item:last-child{margin-right:0}.ant-tree-checkbox-group-item+.ant-tree-checkbox-group-item{margin-left:0}.ant-tree-checkbox-indeterminate .ant-tree-checkbox-inner{background-color:#fff;border-color:#d9d9d9}.ant-tree-checkbox-indeterminate .ant-tree-checkbox-inner:after{top:50%;left:50%;width:8px;height:8px;background-color:#1890ff;border:0;transform:translate(-50%,-50%) scale(1);opacity:1;content:" "}.ant-tree-checkbox-indeterminate.ant-tree-checkbox-disabled .ant-tree-checkbox-inner:after{background-color:#00000040;border-color:#00000040}.ant-tree{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";background:#fff;border-radius:2px;transition:background-color .3s}.ant-tree-focused:not(:hover):not(.ant-tree-active-focused){background:#e6f7ff}.ant-tree-list-holder-inner{align-items:flex-start}.ant-tree.ant-tree-block-node .ant-tree-list-holder-inner{align-items:stretch}.ant-tree.ant-tree-block-node .ant-tree-list-holder-inner .ant-tree-node-content-wrapper{flex:auto}.ant-tree.ant-tree-block-node .ant-tree-list-holder-inner .ant-tree-treenode.dragging{position:relative}.ant-tree.ant-tree-block-node .ant-tree-list-holder-inner .ant-tree-treenode.dragging:after{position:absolute;top:0;right:0;bottom:4px;left:0;border:1px solid #1890ff;opacity:0;animation:ant-tree-node-fx-do-not-use .3s;animation-play-state:running;animation-fill-mode:forwards;content:"";pointer-events:none}.ant-tree .ant-tree-treenode{display:flex;align-items:flex-start;padding:0 0 4px;outline:none}.ant-tree .ant-tree-treenode-disabled .ant-tree-node-content-wrapper{color:#00000040;cursor:not-allowed}.ant-tree .ant-tree-treenode-disabled .ant-tree-node-content-wrapper:hover{background:transparent}.ant-tree .ant-tree-treenode-active .ant-tree-node-content-wrapper{background:#f5f5f5}.ant-tree .ant-tree-treenode:not(.ant-tree .ant-tree-treenode-disabled).filter-node .ant-tree-title{color:inherit;font-weight:500}.ant-tree-indent{align-self:stretch;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-tree-indent-unit{display:inline-block;width:24px}.ant-tree-draggable-icon{width:24px;line-height:24px;text-align:center;opacity:.2;transition:opacity .3s}.ant-tree-treenode:hover .ant-tree-draggable-icon{opacity:.45}.ant-tree-switcher{position:relative;flex:none;align-self:stretch;width:24px;margin:0;line-height:24px;text-align:center;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-tree-switcher .ant-tree-switcher-icon,.ant-tree-switcher .ant-select-tree-switcher-icon{display:inline-block;font-size:10px;vertical-align:baseline}.ant-tree-switcher .ant-tree-switcher-icon svg,.ant-tree-switcher .ant-select-tree-switcher-icon svg{transition:transform .3s}.ant-tree-switcher-noop{cursor:default}.ant-tree-switcher_close .ant-tree-switcher-icon svg{transform:rotate(-90deg)}.ant-tree-switcher-loading-icon{color:#1890ff}.ant-tree-switcher-leaf-line{position:relative;z-index:1;display:inline-block;width:100%;height:100%}.ant-tree-switcher-leaf-line:before{position:absolute;top:0;right:12px;bottom:-4px;margin-left:-1px;border-right:1px solid #d9d9d9;content:" "}.ant-tree-switcher-leaf-line:after{position:absolute;width:10px;height:14px;border-bottom:1px solid #d9d9d9;content:" "}.ant-tree-checkbox{top:initial;margin:4px 8px 0 0}.ant-tree .ant-tree-node-content-wrapper{position:relative;z-index:auto;min-height:24px;margin:0;padding:0 4px;color:inherit;line-height:24px;background:transparent;border-radius:2px;cursor:pointer;transition:all .3s,border 0s,line-height 0s,box-shadow 0s}.ant-tree .ant-tree-node-content-wrapper:hover{background-color:#f5f5f5}.ant-tree .ant-tree-node-content-wrapper.ant-tree-node-selected{background-color:#bae7ff}.ant-tree .ant-tree-node-content-wrapper .ant-tree-iconEle{display:inline-block;width:24px;height:24px;line-height:24px;text-align:center;vertical-align:top}.ant-tree .ant-tree-node-content-wrapper .ant-tree-iconEle:empty{display:none}.ant-tree-unselectable .ant-tree-node-content-wrapper:hover{background-color:transparent}.ant-tree-node-content-wrapper{line-height:24px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-tree-node-content-wrapper .ant-tree-drop-indicator{position:absolute;z-index:1;height:2px;background-color:#1890ff;border-radius:1px;pointer-events:none}.ant-tree-node-content-wrapper .ant-tree-drop-indicator:after{position:absolute;top:-3px;left:-6px;width:8px;height:8px;background-color:transparent;border:2px solid #1890ff;border-radius:50%;content:""}.ant-tree .ant-tree-treenode.drop-container>[draggable]{box-shadow:0 0 0 2px #1890ff}.ant-tree-show-line .ant-tree-indent-unit{position:relative;height:100%}.ant-tree-show-line .ant-tree-indent-unit:before{position:absolute;top:0;right:12px;bottom:-4px;border-right:1px solid #d9d9d9;content:""}.ant-tree-show-line .ant-tree-indent-unit-end:before{display:none}.ant-tree-show-line .ant-tree-switcher{background:#fff}.ant-tree-show-line .ant-tree-switcher-line-icon{vertical-align:-.15em}.ant-tree .ant-tree-treenode-leaf-last .ant-tree-switcher-leaf-line:before{top:auto!important;bottom:auto!important;height:14px!important}.ant-tree-rtl{direction:rtl}.ant-tree-rtl .ant-tree-node-content-wrapper[draggable=true] .ant-tree-drop-indicator:after{right:-6px;left:unset}.ant-tree .ant-tree-treenode-rtl{direction:rtl}.ant-tree-rtl .ant-tree-switcher_close .ant-tree-switcher-icon svg{transform:rotate(90deg)}.ant-tree-rtl.ant-tree-show-line .ant-tree-indent-unit:before{right:auto;left:-13px;border-right:none;border-left:1px solid #d9d9d9}.ant-tree-rtl.ant-tree-checkbox,.ant-tree-select-dropdown-rtl .ant-select-tree-checkbox{margin:4px 0 0 8px}/*!****************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/time-picker/style/index.less ***! + \****************************************************************************************************************************************************************************************************************************************************************//*!*************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/timeline/style/index.less ***! + \*************************************************************************************************************************************************************************************************************************************************************/.ant-timeline{box-sizing:border-box;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;font-feature-settings:"tnum";margin:0;padding:0;list-style:none}.ant-timeline-item{position:relative;margin:0;padding-bottom:20px;font-size:14px;list-style:none}.ant-timeline-item-tail{position:absolute;top:10px;left:4px;height:calc(100% - 10px);border-left:2px solid #f0f0f0}.ant-timeline-item-pending .ant-timeline-item-head{font-size:12px;background-color:transparent}.ant-timeline-item-pending .ant-timeline-item-tail{display:none}.ant-timeline-item-head{position:absolute;width:10px;height:10px;background-color:#fff;border:2px solid transparent;border-radius:100px}.ant-timeline-item-head-blue{color:#1890ff;border-color:#1890ff}.ant-timeline-item-head-red{color:#ff4d4f;border-color:#ff4d4f}.ant-timeline-item-head-green{color:#52c41a;border-color:#52c41a}.ant-timeline-item-head-gray{color:#00000040;border-color:#00000040}.ant-timeline-item-head-custom{position:absolute;top:5.5px;left:5px;width:auto;height:auto;margin-top:0;padding:3px 1px;line-height:1;text-align:center;border:0;border-radius:0;transform:translate(-50%,-50%)}.ant-timeline-item-content{position:relative;top:-7.001px;margin:0 0 0 26px;word-break:break-word}.ant-timeline-item-last>.ant-timeline-item-tail{display:none}.ant-timeline-item-last>.ant-timeline-item-content{min-height:48px}.ant-timeline.ant-timeline-alternate .ant-timeline-item-tail,.ant-timeline.ant-timeline-right .ant-timeline-item-tail,.ant-timeline.ant-timeline-label .ant-timeline-item-tail,.ant-timeline.ant-timeline-alternate .ant-timeline-item-head,.ant-timeline.ant-timeline-right .ant-timeline-item-head,.ant-timeline.ant-timeline-label .ant-timeline-item-head,.ant-timeline.ant-timeline-alternate .ant-timeline-item-head-custom,.ant-timeline.ant-timeline-right .ant-timeline-item-head-custom,.ant-timeline.ant-timeline-label .ant-timeline-item-head-custom{left:50%}.ant-timeline.ant-timeline-alternate .ant-timeline-item-head,.ant-timeline.ant-timeline-right .ant-timeline-item-head,.ant-timeline.ant-timeline-label .ant-timeline-item-head{margin-left:-4px}.ant-timeline.ant-timeline-alternate .ant-timeline-item-head-custom,.ant-timeline.ant-timeline-right .ant-timeline-item-head-custom,.ant-timeline.ant-timeline-label .ant-timeline-item-head-custom{margin-left:1px}.ant-timeline.ant-timeline-alternate .ant-timeline-item-left .ant-timeline-item-content,.ant-timeline.ant-timeline-right .ant-timeline-item-left .ant-timeline-item-content,.ant-timeline.ant-timeline-label .ant-timeline-item-left .ant-timeline-item-content{left:calc(50% - 4px);width:calc(50% - 14px);text-align:left}.ant-timeline.ant-timeline-alternate .ant-timeline-item-right .ant-timeline-item-content,.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-content,.ant-timeline.ant-timeline-label .ant-timeline-item-right .ant-timeline-item-content{width:calc(50% - 12px);margin:0;text-align:right}.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-tail,.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-head,.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-head-custom{left:calc(100% - 6px)}.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-content{width:calc(100% - 18px)}.ant-timeline.ant-timeline-pending .ant-timeline-item-last .ant-timeline-item-tail{display:block;height:calc(100% - 14px);border-left:2px dotted #f0f0f0}.ant-timeline.ant-timeline-reverse .ant-timeline-item-last .ant-timeline-item-tail{display:none}.ant-timeline.ant-timeline-reverse .ant-timeline-item-pending .ant-timeline-item-tail{top:15px;display:block;height:calc(100% - 15px);border-left:2px dotted #f0f0f0}.ant-timeline.ant-timeline-reverse .ant-timeline-item-pending .ant-timeline-item-content{min-height:48px}.ant-timeline.ant-timeline-label .ant-timeline-item-label{position:absolute;top:-7.001px;width:calc(50% - 12px);text-align:right}.ant-timeline.ant-timeline-label .ant-timeline-item-right .ant-timeline-item-label{left:calc(50% + 14px);width:calc(50% - 14px);text-align:left}.ant-timeline-rtl{direction:rtl}.ant-timeline-rtl .ant-timeline-item-tail{right:4px;left:auto;border-right:2px solid #f0f0f0;border-left:none}.ant-timeline-rtl .ant-timeline-item-head-custom{right:5px;left:auto;transform:translate(50%,-50%)}.ant-timeline-rtl .ant-timeline-item-content{margin:0 18px 0 0}.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-tail,.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-tail,.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-tail,.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-head,.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-head,.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-head,.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-head-custom,.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-head-custom,.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-head-custom{right:50%;left:auto}.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-head,.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-head,.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-head{margin-right:-4px;margin-left:0}.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-head-custom,.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-head-custom,.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-head-custom{margin-right:1px;margin-left:0}.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-left .ant-timeline-item-content,.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-left .ant-timeline-item-content,.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-left .ant-timeline-item-content{right:calc(50% - 4px);left:auto;text-align:right}.ant-timeline-rtl.ant-timeline.ant-timeline-alternate .ant-timeline-item-right .ant-timeline-item-content,.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-content,.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-right .ant-timeline-item-content{text-align:left}.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-tail,.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-head,.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-head-custom{right:0;left:auto}.ant-timeline-rtl.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-content{width:100%;margin-right:18px;text-align:right}.ant-timeline-rtl.ant-timeline.ant-timeline-pending .ant-timeline-item-last .ant-timeline-item-tail,.ant-timeline-rtl.ant-timeline.ant-timeline-reverse .ant-timeline-item-pending .ant-timeline-item-tail{border-right:2px dotted #f0f0f0;border-left:none}.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-label{text-align:left}.ant-timeline-rtl.ant-timeline.ant-timeline-label .ant-timeline-item-right .ant-timeline-item-label{right:calc(50% + 14px);text-align:right}/*!*************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/transfer/style/index.less ***! + \*************************************************************************************************************************************************************************************************************************************************************/.ant-transfer-customize-list .ant-transfer-list{flex:1 1 50%;width:auto;height:auto;min-height:200px}.ant-transfer-customize-list .ant-table-wrapper .ant-table-small{border:0;border-radius:0}.ant-transfer-customize-list .ant-table-wrapper .ant-table-small .ant-table-selection-column{width:40px;min-width:40px}.ant-transfer-customize-list .ant-table-wrapper .ant-table-small>.ant-table-content>.ant-table-body>table>.ant-table-thead>tr>th{background:#fafafa}.ant-transfer-customize-list .ant-table-wrapper .ant-table-small>.ant-table-content .ant-table-row:last-child td{border-bottom:1px solid #f0f0f0}.ant-transfer-customize-list .ant-table-wrapper .ant-table-small .ant-table-body{margin:0}.ant-transfer-customize-list .ant-table-wrapper .ant-table-pagination.ant-pagination{margin:16px 0 4px}.ant-transfer-customize-list .ant-input[disabled]{background-color:transparent}.ant-transfer{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;display:flex;align-items:stretch}.ant-transfer-disabled .ant-transfer-list{background:#f5f5f5}.ant-transfer-list{display:flex;flex-direction:column;width:180px;height:200px;border:1px solid #d9d9d9;border-radius:2px}.ant-transfer-list-with-pagination{width:250px;height:auto}.ant-transfer-list-search .anticon-search{color:#00000040}.ant-transfer-list-header{display:flex;flex:none;align-items:center;height:40px;padding:8px 12px 9px;color:#000000d9;background:#fff;border-bottom:1px solid #f0f0f0;border-radius:2px 2px 0 0}.ant-transfer-list-header>*:not(:last-child){margin-right:4px}.ant-transfer-list-header>*{flex:none}.ant-transfer-list-header-title{flex:auto;overflow:hidden;white-space:nowrap;text-align:right;text-overflow:ellipsis}.ant-transfer-list-header-dropdown{font-size:10px;transform:translateY(10%);cursor:pointer}.ant-transfer-list-header-dropdown[disabled]{cursor:not-allowed}.ant-transfer-list-body{display:flex;flex:auto;flex-direction:column;overflow:hidden;font-size:14px}.ant-transfer-list-body-search-wrapper{position:relative;flex:none;padding:12px}.ant-transfer-list-content{flex:auto;margin:0;padding:0;overflow:auto;list-style:none}.ant-transfer-list-content-item{display:flex;align-items:center;min-height:32px;padding:6px 12px;line-height:20px;transition:all .3s}.ant-transfer-list-content-item>*:not(:last-child){margin-right:8px}.ant-transfer-list-content-item>*{flex:none}.ant-transfer-list-content-item-text{flex:auto;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.ant-transfer-list-content-item-remove{color:#1890ff;text-decoration:none;outline:none;cursor:pointer;transition:color .3s;position:relative;color:#d9d9d9}.ant-transfer-list-content-item-remove:focus,.ant-transfer-list-content-item-remove:hover{color:#40a9ff}.ant-transfer-list-content-item-remove:active{color:#096dd9}.ant-transfer-list-content-item-remove:after{position:absolute;top:-6px;right:-50%;bottom:-6px;left:-50%;content:""}.ant-transfer-list-content-item-remove:hover{color:#40a9ff}.ant-transfer-list-content-item:not(.ant-transfer-list-content-item-disabled):hover{background-color:#f5f5f5;cursor:pointer}.ant-transfer-list-content-item:not(.ant-transfer-list-content-item-disabled).ant-transfer-list-content-item-checked:hover{background-color:#dcf4ff}.ant-transfer-list-content-show-remove .ant-transfer-list-content-item:not(.ant-transfer-list-content-item-disabled):hover{background:transparent;cursor:default}.ant-transfer-list-content-item-checked{background-color:#e6f7ff}.ant-transfer-list-content-item-disabled{color:#00000040;cursor:not-allowed}.ant-transfer-list-pagination{padding:8px 0;text-align:right;border-top:1px solid #f0f0f0}.ant-transfer-list-body-not-found{flex:none;width:100%;margin:auto 0;color:#00000040;text-align:center}.ant-transfer-list-footer{border-top:1px solid #f0f0f0}.ant-transfer-operation{display:flex;flex:none;flex-direction:column;align-self:center;margin:0 8px;vertical-align:middle}.ant-transfer-operation .ant-btn{display:block}.ant-transfer-operation .ant-btn:first-child{margin-bottom:4px}.ant-transfer-operation .ant-btn .anticon{font-size:12px}.ant-transfer .ant-empty-image{max-height:-2px}.ant-transfer-rtl{direction:rtl}.ant-transfer-rtl .ant-transfer-list-search{padding-right:8px;padding-left:24px}.ant-transfer-rtl .ant-transfer-list-search-action{right:auto;left:12px}.ant-transfer-rtl .ant-transfer-list-header>*:not(:last-child){margin-right:0;margin-left:4px}.ant-transfer-rtl .ant-transfer-list-header{right:0;left:auto}.ant-transfer-rtl .ant-transfer-list-header-title{text-align:left}.ant-transfer-rtl .ant-transfer-list-content-item>*:not(:last-child){margin-right:0;margin-left:8px}.ant-transfer-rtl .ant-transfer-list-pagination{text-align:left}.ant-transfer-rtl .ant-transfer-list-footer{right:0;left:auto}/*!****************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/tree-select/style/index.less ***! + \****************************************************************************************************************************************************************************************************************************************************************/@keyframes ant-tree-node-fx-do-not-use{0%{opacity:0}to{opacity:1}}@keyframes antCheckboxEffect{0%{transform:scale(1);opacity:.5}to{transform:scale(1.6);opacity:0}}.ant-select-tree-checkbox{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";position:relative;top:.2em;line-height:1;white-space:nowrap;outline:none;cursor:pointer}.ant-select-tree-checkbox-wrapper:hover .ant-select-tree-checkbox-inner,.ant-select-tree-checkbox:hover .ant-select-tree-checkbox-inner,.ant-select-tree-checkbox-input:focus+.ant-select-tree-checkbox-inner{border-color:#1890ff}.ant-select-tree-checkbox-checked:after{position:absolute;top:0;left:0;width:100%;height:100%;border:1px solid #1890ff;border-radius:2px;visibility:hidden;animation:antCheckboxEffect .36s ease-in-out;animation-fill-mode:backwards;content:""}.ant-select-tree-checkbox:hover:after,.ant-select-tree-checkbox-wrapper:hover .ant-select-tree-checkbox:after{visibility:visible}.ant-select-tree-checkbox-inner{position:relative;top:0;left:0;display:block;width:16px;height:16px;direction:ltr;background-color:#fff;border:1px solid #d9d9d9;border-radius:2px;border-collapse:separate;transition:all .3s}.ant-select-tree-checkbox-inner:after{position:absolute;top:50%;left:21.5%;display:table;width:5.71428571px;height:9.14285714px;border:2px solid #fff;border-top:0;border-left:0;transform:rotate(45deg) scale(0) translate(-50%,-50%);opacity:0;transition:all .1s cubic-bezier(.71,-.46,.88,.6),opacity .1s;content:" "}.ant-select-tree-checkbox-input{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;width:100%;height:100%;cursor:pointer;opacity:0}.ant-select-tree-checkbox-checked .ant-select-tree-checkbox-inner:after{position:absolute;display:table;border:2px solid #fff;border-top:0;border-left:0;transform:rotate(45deg) scale(1) translate(-50%,-50%);opacity:1;transition:all .2s cubic-bezier(.12,.4,.29,1.46) .1s;content:" "}.ant-select-tree-checkbox-checked .ant-select-tree-checkbox-inner{background-color:#1890ff;border-color:#1890ff}.ant-select-tree-checkbox-disabled{cursor:not-allowed}.ant-select-tree-checkbox-disabled.ant-select-tree-checkbox-checked .ant-select-tree-checkbox-inner:after{border-color:#00000040;animation-name:none}.ant-select-tree-checkbox-disabled .ant-select-tree-checkbox-input{cursor:not-allowed;pointer-events:none}.ant-select-tree-checkbox-disabled .ant-select-tree-checkbox-inner{background-color:#f5f5f5;border-color:#d9d9d9!important}.ant-select-tree-checkbox-disabled .ant-select-tree-checkbox-inner:after{border-color:#f5f5f5;border-collapse:separate;animation-name:none}.ant-select-tree-checkbox-disabled+span{color:#00000040;cursor:not-allowed}.ant-select-tree-checkbox-disabled:hover:after,.ant-select-tree-checkbox-wrapper:hover .ant-select-tree-checkbox-disabled:after{visibility:hidden}.ant-select-tree-checkbox-wrapper{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";display:inline-flex;align-items:baseline;line-height:unset;cursor:pointer}.ant-select-tree-checkbox-wrapper:after{display:inline-block;width:0;overflow:hidden;content:" "}.ant-select-tree-checkbox-wrapper.ant-select-tree-checkbox-wrapper-disabled{cursor:not-allowed}.ant-select-tree-checkbox-wrapper+.ant-select-tree-checkbox-wrapper{margin-left:8px}.ant-select-tree-checkbox+span{padding-right:8px;padding-left:8px}.ant-select-tree-checkbox-group{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";display:inline-block}.ant-select-tree-checkbox-group-item{margin-right:8px}.ant-select-tree-checkbox-group-item:last-child{margin-right:0}.ant-select-tree-checkbox-group-item+.ant-select-tree-checkbox-group-item{margin-left:0}.ant-select-tree-checkbox-indeterminate .ant-select-tree-checkbox-inner{background-color:#fff;border-color:#d9d9d9}.ant-select-tree-checkbox-indeterminate .ant-select-tree-checkbox-inner:after{top:50%;left:50%;width:8px;height:8px;background-color:#1890ff;border:0;transform:translate(-50%,-50%) scale(1);opacity:1;content:" "}.ant-select-tree-checkbox-indeterminate.ant-select-tree-checkbox-disabled .ant-select-tree-checkbox-inner:after{background-color:#00000040;border-color:#00000040}.ant-tree-select-dropdown{padding:8px 4px}.ant-tree-select-dropdown-rtl{direction:rtl}.ant-tree-select-dropdown .ant-select-tree{border-radius:0}.ant-tree-select-dropdown .ant-select-tree-list-holder-inner{align-items:stretch}.ant-tree-select-dropdown .ant-select-tree-list-holder-inner .ant-select-tree-treenode .ant-select-tree-node-content-wrapper{flex:auto}.ant-select-tree{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";background:#fff;border-radius:2px;transition:background-color .3s}.ant-select-tree-focused:not(:hover):not(.ant-select-tree-active-focused){background:#e6f7ff}.ant-select-tree-list-holder-inner{align-items:flex-start}.ant-select-tree.ant-select-tree-block-node .ant-select-tree-list-holder-inner{align-items:stretch}.ant-select-tree.ant-select-tree-block-node .ant-select-tree-list-holder-inner .ant-select-tree-node-content-wrapper{flex:auto}.ant-select-tree.ant-select-tree-block-node .ant-select-tree-list-holder-inner .ant-select-tree-treenode.dragging{position:relative}.ant-select-tree.ant-select-tree-block-node .ant-select-tree-list-holder-inner .ant-select-tree-treenode.dragging:after{position:absolute;top:0;right:0;bottom:4px;left:0;border:1px solid #1890ff;opacity:0;animation:ant-tree-node-fx-do-not-use .3s;animation-play-state:running;animation-fill-mode:forwards;content:"";pointer-events:none}.ant-select-tree .ant-select-tree-treenode{display:flex;align-items:flex-start;padding:0 0 4px;outline:none}.ant-select-tree .ant-select-tree-treenode-disabled .ant-select-tree-node-content-wrapper{color:#00000040;cursor:not-allowed}.ant-select-tree .ant-select-tree-treenode-disabled .ant-select-tree-node-content-wrapper:hover{background:transparent}.ant-select-tree .ant-select-tree-treenode-active .ant-select-tree-node-content-wrapper{background:#f5f5f5}.ant-select-tree .ant-select-tree-treenode:not(.ant-select-tree .ant-select-tree-treenode-disabled).filter-node .ant-select-tree-title{color:inherit;font-weight:500}.ant-select-tree-indent{align-self:stretch;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-select-tree-indent-unit{display:inline-block;width:24px}.ant-select-tree-draggable-icon{width:24px;line-height:24px;text-align:center;opacity:.2;transition:opacity .3s}.ant-select-tree-treenode:hover .ant-select-tree-draggable-icon{opacity:.45}.ant-select-tree-switcher{position:relative;flex:none;align-self:stretch;width:24px;margin:0;line-height:24px;text-align:center;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-select-tree-switcher .ant-tree-switcher-icon,.ant-select-tree-switcher .ant-select-tree-switcher-icon{display:inline-block;font-size:10px;vertical-align:baseline}.ant-select-tree-switcher .ant-tree-switcher-icon svg,.ant-select-tree-switcher .ant-select-tree-switcher-icon svg{transition:transform .3s}.ant-select-tree-switcher-noop{cursor:default}.ant-select-tree-switcher_close .ant-select-tree-switcher-icon svg{transform:rotate(-90deg)}.ant-select-tree-switcher-loading-icon{color:#1890ff}.ant-select-tree-switcher-leaf-line{position:relative;z-index:1;display:inline-block;width:100%;height:100%}.ant-select-tree-switcher-leaf-line:before{position:absolute;top:0;right:12px;bottom:-4px;margin-left:-1px;border-right:1px solid #d9d9d9;content:" "}.ant-select-tree-switcher-leaf-line:after{position:absolute;width:10px;height:14px;border-bottom:1px solid #d9d9d9;content:" "}.ant-select-tree-checkbox{top:initial;margin:4px 8px 0 0}.ant-select-tree .ant-select-tree-node-content-wrapper{position:relative;z-index:auto;min-height:24px;margin:0;padding:0 4px;color:inherit;line-height:24px;background:transparent;border-radius:2px;cursor:pointer;transition:all .3s,border 0s,line-height 0s,box-shadow 0s}.ant-select-tree .ant-select-tree-node-content-wrapper:hover{background-color:#f5f5f5}.ant-select-tree .ant-select-tree-node-content-wrapper.ant-select-tree-node-selected{background-color:#bae7ff}.ant-select-tree .ant-select-tree-node-content-wrapper .ant-select-tree-iconEle{display:inline-block;width:24px;height:24px;line-height:24px;text-align:center;vertical-align:top}.ant-select-tree .ant-select-tree-node-content-wrapper .ant-select-tree-iconEle:empty{display:none}.ant-select-tree-unselectable .ant-select-tree-node-content-wrapper:hover{background-color:transparent}.ant-select-tree-node-content-wrapper{line-height:24px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.ant-select-tree-node-content-wrapper .ant-tree-drop-indicator{position:absolute;z-index:1;height:2px;background-color:#1890ff;border-radius:1px;pointer-events:none}.ant-select-tree-node-content-wrapper .ant-tree-drop-indicator:after{position:absolute;top:-3px;left:-6px;width:8px;height:8px;background-color:transparent;border:2px solid #1890ff;border-radius:50%;content:""}.ant-select-tree .ant-select-tree-treenode.drop-container>[draggable]{box-shadow:0 0 0 2px #1890ff}.ant-select-tree-show-line .ant-select-tree-indent-unit{position:relative;height:100%}.ant-select-tree-show-line .ant-select-tree-indent-unit:before{position:absolute;top:0;right:12px;bottom:-4px;border-right:1px solid #d9d9d9;content:""}.ant-select-tree-show-line .ant-select-tree-indent-unit-end:before{display:none}.ant-select-tree-show-line .ant-select-tree-switcher{background:#fff}.ant-select-tree-show-line .ant-select-tree-switcher-line-icon{vertical-align:-.15em}.ant-select-tree .ant-select-tree-treenode-leaf-last .ant-select-tree-switcher-leaf-line:before{top:auto!important;bottom:auto!important;height:14px!important}.ant-tree-select-dropdown-rtl .ant-select-tree .ant-select-tree-switcher_close .ant-select-tree-switcher-icon svg{transform:rotate(90deg)}.ant-tree-select-dropdown-rtl .ant-select-tree .ant-select-tree-switcher-loading-icon{transform:scaleY(-1)}/*!***************************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/typography/style/index.less ***! + \***************************************************************************************************************************************************************************************************************************************************************/.ant-typography{color:#000000d9;overflow-wrap:break-word}.ant-typography.ant-typography-secondary{color:#00000073}.ant-typography.ant-typography-success{color:#52c41a}.ant-typography.ant-typography-warning{color:#faad14}.ant-typography.ant-typography-danger{color:#ff4d4f}a.ant-typography.ant-typography-danger:active,a.ant-typography.ant-typography-danger:focus,a.ant-typography.ant-typography-danger:hover{color:#ff7875}.ant-typography.ant-typography-disabled{color:#00000040;cursor:not-allowed;-webkit-user-select:none;-moz-user-select:none;user-select:none}div.ant-typography,.ant-typography p{margin-bottom:1em}h1.ant-typography,.ant-typography h1{margin-bottom:.5em;color:#000000d9;font-weight:600;font-size:38px;line-height:1.23}h2.ant-typography,.ant-typography h2{margin-bottom:.5em;color:#000000d9;font-weight:600;font-size:30px;line-height:1.35}h3.ant-typography,.ant-typography h3{margin-bottom:.5em;color:#000000d9;font-weight:600;font-size:24px;line-height:1.35}h4.ant-typography,.ant-typography h4{margin-bottom:.5em;color:#000000d9;font-weight:600;font-size:20px;line-height:1.4}h5.ant-typography,.ant-typography h5{margin-bottom:.5em;color:#000000d9;font-weight:600;font-size:16px;line-height:1.5}.ant-typography+h1.ant-typography,.ant-typography+h2.ant-typography,.ant-typography+h3.ant-typography,.ant-typography+h4.ant-typography,.ant-typography+h5.ant-typography{margin-top:1.2em}.ant-typography div+h1,.ant-typography ul+h1,.ant-typography li+h1,.ant-typography p+h1,.ant-typography h1+h1,.ant-typography h2+h1,.ant-typography h3+h1,.ant-typography h4+h1,.ant-typography h5+h1,.ant-typography div+h2,.ant-typography ul+h2,.ant-typography li+h2,.ant-typography p+h2,.ant-typography h1+h2,.ant-typography h2+h2,.ant-typography h3+h2,.ant-typography h4+h2,.ant-typography h5+h2,.ant-typography div+h3,.ant-typography ul+h3,.ant-typography li+h3,.ant-typography p+h3,.ant-typography h1+h3,.ant-typography h2+h3,.ant-typography h3+h3,.ant-typography h4+h3,.ant-typography h5+h3,.ant-typography div+h4,.ant-typography ul+h4,.ant-typography li+h4,.ant-typography p+h4,.ant-typography h1+h4,.ant-typography h2+h4,.ant-typography h3+h4,.ant-typography h4+h4,.ant-typography h5+h4,.ant-typography div+h5,.ant-typography ul+h5,.ant-typography li+h5,.ant-typography p+h5,.ant-typography h1+h5,.ant-typography h2+h5,.ant-typography h3+h5,.ant-typography h4+h5,.ant-typography h5+h5{margin-top:1.2em}a.ant-typography-ellipsis,span.ant-typography-ellipsis{display:inline-block;max-width:100%}a.ant-typography,.ant-typography a{color:#1890ff;outline:none;cursor:pointer;transition:color .3s;text-decoration:none}a.ant-typography:focus,.ant-typography a:focus,a.ant-typography:hover,.ant-typography a:hover{color:#40a9ff}a.ant-typography:active,.ant-typography a:active{color:#096dd9}a.ant-typography:active,.ant-typography a:active,a.ant-typography:hover,.ant-typography a:hover{text-decoration:none}a.ant-typography[disabled],.ant-typography a[disabled],a.ant-typography.ant-typography-disabled,.ant-typography a.ant-typography-disabled{color:#00000040;cursor:not-allowed}a.ant-typography[disabled]:active,.ant-typography a[disabled]:active,a.ant-typography.ant-typography-disabled:active,.ant-typography a.ant-typography-disabled:active,a.ant-typography[disabled]:hover,.ant-typography a[disabled]:hover,a.ant-typography.ant-typography-disabled:hover,.ant-typography a.ant-typography-disabled:hover{color:#00000040}a.ant-typography[disabled]:active,.ant-typography a[disabled]:active,a.ant-typography.ant-typography-disabled:active,.ant-typography a.ant-typography-disabled:active{pointer-events:none}.ant-typography code{margin:0 .2em;padding:.2em .4em .1em;font-size:85%;background:rgba(150,150,150,.1);border:1px solid rgba(100,100,100,.2);border-radius:3px}.ant-typography kbd{margin:0 .2em;padding:.15em .4em .1em;font-size:90%;background:rgba(150,150,150,.06);border:1px solid rgba(100,100,100,.2);border-bottom-width:2px;border-radius:3px}.ant-typography mark{padding:0;background-color:#ffe58f}.ant-typography u,.ant-typography ins{text-decoration:underline;-webkit-text-decoration-skip:ink;text-decoration-skip-ink:auto}.ant-typography s,.ant-typography del{text-decoration:line-through}.ant-typography strong{font-weight:600}.ant-typography-expand,.ant-typography-edit,.ant-typography-copy{color:#1890ff;text-decoration:none;outline:none;cursor:pointer;transition:color .3s;margin-left:4px}.ant-typography-expand:focus,.ant-typography-edit:focus,.ant-typography-copy:focus,.ant-typography-expand:hover,.ant-typography-edit:hover,.ant-typography-copy:hover{color:#40a9ff}.ant-typography-expand:active,.ant-typography-edit:active,.ant-typography-copy:active{color:#096dd9}.ant-typography-copy-success,.ant-typography-copy-success:hover,.ant-typography-copy-success:focus{color:#52c41a}.ant-typography-edit-content{position:relative}div.ant-typography-edit-content{left:-12px;margin-top:-5px;margin-bottom:calc(1em - 5px)}.ant-typography-edit-content-confirm{position:absolute;right:10px;bottom:8px;color:#00000073;pointer-events:none}.ant-typography-edit-content textarea{-moz-transition:none}.ant-typography ul,.ant-typography ol{margin:0 0 1em;padding:0}.ant-typography ul li,.ant-typography ol li{margin:0 0 0 20px;padding:0 0 0 4px}.ant-typography ul{list-style-type:circle}.ant-typography ul ul{list-style-type:disc}.ant-typography ol{list-style-type:decimal}.ant-typography pre,.ant-typography blockquote{margin:1em 0}.ant-typography pre{padding:.4em .6em;white-space:pre-wrap;word-wrap:break-word;background:rgba(150,150,150,.1);border:1px solid rgba(100,100,100,.2);border-radius:3px}.ant-typography pre code{display:inline;margin:0;padding:0;font-size:inherit;font-family:inherit;background:transparent;border:0}.ant-typography blockquote{padding:0 0 0 .6em;border-left:4px solid rgba(100,100,100,.2);opacity:.85}.ant-typography-single-line{white-space:nowrap}.ant-typography-ellipsis-single-line{overflow:hidden;text-overflow:ellipsis}a.ant-typography-ellipsis-single-line,span.ant-typography-ellipsis-single-line{vertical-align:bottom}.ant-typography-ellipsis-multiple-line{display:-webkit-box;overflow:hidden;-webkit-line-clamp:3;-webkit-box-orient:vertical}.ant-typography-rtl{direction:rtl}.ant-typography-rtl .ant-typography-expand,.ant-typography-rtl .ant-typography-edit,.ant-typography-rtl .ant-typography-copy{margin-right:4px;margin-left:0}.ant-typography-rtl .ant-typography-expand{float:left}div.ant-typography-edit-content.ant-typography-rtl{right:-12px;left:auto}.ant-typography-rtl .ant-typography-edit-content-confirm{right:auto;left:10px}.ant-typography-rtl.ant-typography ul li,.ant-typography-rtl.ant-typography ol li{margin:0 20px 0 0;padding:0 4px 0 0}/*!***********************************************************************************************************************************************************************************************************************************************************!*\ + !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[4].use[1]!./node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[4].use[2]!./node_modules/less-loader/dist/cjs.js??ruleSet[1].rules[4].use[3]!./components/upload/style/index.less ***! + \***********************************************************************************************************************************************************************************************************************************************************/.ant-upload{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;line-height:1.5715;list-style:none;font-feature-settings:"tnum";outline:0}.ant-upload p{margin:0}.ant-upload-btn{display:block;width:100%;outline:none}.ant-upload input[type=file]{cursor:pointer}.ant-upload.ant-upload-select{display:inline-block}.ant-upload.ant-upload-disabled{cursor:not-allowed}.ant-upload.ant-upload-select-picture-card{width:104px;height:104px;margin-right:8px;margin-bottom:8px;text-align:center;vertical-align:top;background-color:#fafafa;border:1px dashed #d9d9d9;border-radius:2px;cursor:pointer;transition:border-color .3s}.ant-upload.ant-upload-select-picture-card>.ant-upload{display:flex;align-items:center;justify-content:center;height:100%;text-align:center}.ant-upload.ant-upload-select-picture-card:hover{border-color:#1890ff}.ant-upload-disabled.ant-upload.ant-upload-select-picture-card:hover{border-color:#d9d9d9}.ant-upload.ant-upload-drag{position:relative;width:100%;height:100%;text-align:center;background:#fafafa;border:1px dashed #d9d9d9;border-radius:2px;cursor:pointer;transition:border-color .3s}.ant-upload.ant-upload-drag .ant-upload{padding:16px 0}.ant-upload.ant-upload-drag.ant-upload-drag-hover:not(.ant-upload-disabled){border-color:#096dd9}.ant-upload.ant-upload-drag.ant-upload-disabled{cursor:not-allowed}.ant-upload.ant-upload-drag .ant-upload-btn{display:table;height:100%}.ant-upload.ant-upload-drag .ant-upload-drag-container{display:table-cell;vertical-align:middle}.ant-upload.ant-upload-drag:not(.ant-upload-disabled):hover{border-color:#40a9ff}.ant-upload.ant-upload-drag p.ant-upload-drag-icon{margin-bottom:20px}.ant-upload.ant-upload-drag p.ant-upload-drag-icon .anticon{color:#40a9ff;font-size:48px}.ant-upload.ant-upload-drag p.ant-upload-text{margin:0 0 4px;color:#000000d9;font-size:16px}.ant-upload.ant-upload-drag p.ant-upload-hint{color:#00000073;font-size:14px}.ant-upload.ant-upload-drag .anticon-plus{color:#00000040;font-size:30px;transition:all .3s}.ant-upload.ant-upload-drag .anticon-plus:hover,.ant-upload.ant-upload-drag:hover .anticon-plus{color:#00000073}.ant-upload-picture-card-wrapper{display:inline-block;width:100%}.ant-upload-picture-card-wrapper:before{display:table;content:""}.ant-upload-picture-card-wrapper:after{display:table;clear:both;content:""}.ant-upload-list{box-sizing:border-box;margin:0;padding:0;color:#000000d9;font-size:14px;font-variant:tabular-nums;list-style:none;font-feature-settings:"tnum";line-height:1.5715}.ant-upload-list:before{display:table;content:""}.ant-upload-list:after{display:table;clear:both;content:""}.ant-upload-list-item{position:relative;height:22.001px;margin-top:8px;font-size:14px}.ant-upload-list-item-name{display:inline-block;width:100%;padding-left:22px;overflow:hidden;line-height:1.5715;white-space:nowrap;text-overflow:ellipsis}.ant-upload-list-item-card-actions{position:absolute;right:0}.ant-upload-list-item-card-actions-btn{opacity:0}.ant-upload-list-item-card-actions-btn.ant-btn-sm{height:20px;line-height:1}.ant-upload-list-item-card-actions.picture{top:22px;line-height:0}.ant-upload-list-item-card-actions-btn:focus,.ant-upload-list-item-card-actions.picture .ant-upload-list-item-card-actions-btn{opacity:1}.ant-upload-list-item-card-actions .anticon{color:#00000073}.ant-upload-list-item-info{height:100%;padding:0 4px;transition:background-color .3s}.ant-upload-list-item-info>span{display:block;width:100%;height:100%}.ant-upload-list-item-info .anticon-loading .anticon,.ant-upload-list-item-info .ant-upload-text-icon .anticon{position:absolute;top:5px;color:#00000073;font-size:14px}.ant-upload-list-item .anticon-close{position:absolute;top:6px;right:4px;color:#00000073;font-size:10px;line-height:0;cursor:pointer;opacity:0;transition:all .3s}.ant-upload-list-item .anticon-close:hover{color:#000000d9}.ant-upload-list-item:hover .ant-upload-list-item-info{background-color:#f5f5f5}.ant-upload-list-item:hover .anticon-close,.ant-upload-list-item:hover .ant-upload-list-item-card-actions-btn{opacity:1}.ant-upload-list-item-error,.ant-upload-list-item-error .ant-upload-text-icon>.anticon,.ant-upload-list-item-error .ant-upload-list-item-name{color:#ff4d4f}.ant-upload-list-item-error .ant-upload-list-item-card-actions .anticon{color:#ff4d4f}.ant-upload-list-item-error .ant-upload-list-item-card-actions-btn{opacity:1}.ant-upload-list-item-progress{position:absolute;bottom:-12px;width:100%;padding-left:26px;font-size:14px;line-height:0}.ant-upload-list-picture .ant-upload-list-item,.ant-upload-list-picture-card .ant-upload-list-item{position:relative;height:66px;padding:8px;border:1px solid #d9d9d9;border-radius:2px}.ant-upload-list-picture .ant-upload-list-item:hover,.ant-upload-list-picture-card .ant-upload-list-item:hover{background:transparent}.ant-upload-list-picture .ant-upload-list-item-error,.ant-upload-list-picture-card .ant-upload-list-item-error{border-color:#ff4d4f}.ant-upload-list-picture .ant-upload-list-item:hover .ant-upload-list-item-info,.ant-upload-list-picture-card .ant-upload-list-item:hover .ant-upload-list-item-info{background:transparent}.ant-upload-list-picture .ant-upload-list-item-uploading,.ant-upload-list-picture-card .ant-upload-list-item-uploading{border-style:dashed}.ant-upload-list-picture .ant-upload-list-item-thumbnail,.ant-upload-list-picture-card .ant-upload-list-item-thumbnail{width:48px;height:48px;line-height:60px;text-align:center;opacity:.8}.ant-upload-list-picture .ant-upload-list-item-thumbnail .anticon,.ant-upload-list-picture-card .ant-upload-list-item-thumbnail .anticon{font-size:26px}.ant-upload-list-picture .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill="#e6f7ff"],.ant-upload-list-picture-card .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill="#e6f7ff"]{fill:#fff2f0}.ant-upload-list-picture .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill="#1890ff"],.ant-upload-list-picture-card .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill="#1890ff"]{fill:#ff4d4f}.ant-upload-list-picture .ant-upload-list-item-icon,.ant-upload-list-picture-card .ant-upload-list-item-icon{position:absolute;top:50%;left:50%;font-size:26px;transform:translate(-50%,-50%)}.ant-upload-list-picture .ant-upload-list-item-icon .anticon,.ant-upload-list-picture-card .ant-upload-list-item-icon .anticon{font-size:26px}.ant-upload-list-picture .ant-upload-list-item-image,.ant-upload-list-picture-card .ant-upload-list-item-image{max-width:100%}.ant-upload-list-picture .ant-upload-list-item-thumbnail img,.ant-upload-list-picture-card .ant-upload-list-item-thumbnail img{display:block;width:48px;height:48px;overflow:hidden}.ant-upload-list-picture .ant-upload-list-item-name,.ant-upload-list-picture-card .ant-upload-list-item-name{display:inline-block;box-sizing:border-box;max-width:100%;margin:0 0 0 8px;padding-right:8px;padding-left:48px;overflow:hidden;line-height:44px;white-space:nowrap;text-overflow:ellipsis;transition:all .3s}.ant-upload-list-picture .ant-upload-list-item-uploading .ant-upload-list-item-name,.ant-upload-list-picture-card .ant-upload-list-item-uploading .ant-upload-list-item-name{margin-bottom:12px}.ant-upload-list-picture .ant-upload-list-item-progress,.ant-upload-list-picture-card .ant-upload-list-item-progress{bottom:14px;width:calc(100% - 24px);margin-top:0;padding-left:56px}.ant-upload-list-picture .anticon-close,.ant-upload-list-picture-card .anticon-close{position:absolute;top:8px;right:8px;line-height:1;opacity:1}.ant-upload-list-picture-card-container{display:inline-block;width:104px;height:104px;margin:0 8px 8px 0;vertical-align:top}.ant-upload-list-picture-card.ant-upload-list:after{display:none}.ant-upload-list-picture-card .ant-upload-list-item{height:100%;margin:0}.ant-upload-list-picture-card .ant-upload-list-item-info{position:relative;height:100%;overflow:hidden}.ant-upload-list-picture-card .ant-upload-list-item-info:before{position:absolute;z-index:1;width:100%;height:100%;background-color:#00000080;opacity:0;transition:all .3s;content:" "}.ant-upload-list-picture-card .ant-upload-list-item:hover .ant-upload-list-item-info:before{opacity:1}.ant-upload-list-picture-card .ant-upload-list-item-actions{position:absolute;top:50%;left:50%;z-index:10;white-space:nowrap;transform:translate(-50%,-50%);opacity:0;transition:all .3s}.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-eye,.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-download,.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-delete{z-index:10;width:16px;margin:0 4px;color:#ffffffd9;font-size:16px;cursor:pointer;transition:all .3s}.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-eye:hover,.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-download:hover,.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-delete:hover{color:#fff}.ant-upload-list-picture-card .ant-upload-list-item-info:hover+.ant-upload-list-item-actions,.ant-upload-list-picture-card .ant-upload-list-item-actions:hover{opacity:1}.ant-upload-list-picture-card .ant-upload-list-item-thumbnail,.ant-upload-list-picture-card .ant-upload-list-item-thumbnail img{position:static;display:block;width:100%;height:100%;-o-object-fit:contain;object-fit:contain}.ant-upload-list-picture-card .ant-upload-list-item-name{display:none;margin:8px 0 0;padding:0;line-height:1.5715;text-align:center}.ant-upload-list-picture-card .ant-upload-list-item-file+.ant-upload-list-item-name{position:absolute;bottom:10px;display:block}.ant-upload-list-picture-card .ant-upload-list-item-uploading.ant-upload-list-item{background-color:#fafafa}.ant-upload-list-picture-card .ant-upload-list-item-uploading .ant-upload-list-item-info{height:auto}.ant-upload-list-picture-card .ant-upload-list-item-uploading .ant-upload-list-item-info:before,.ant-upload-list-picture-card .ant-upload-list-item-uploading .ant-upload-list-item-info .anticon-eye,.ant-upload-list-picture-card .ant-upload-list-item-uploading .ant-upload-list-item-info .anticon-delete{display:none}.ant-upload-list-picture-card .ant-upload-list-item-progress{bottom:32px;width:calc(100% - 14px);padding-left:0}.ant-upload-list-text-container,.ant-upload-list-picture-container{transition:opacity .3s,height .3s}.ant-upload-list-text-container:before,.ant-upload-list-picture-container:before{display:table;width:0;height:0;content:""}.ant-upload-list-text-container .ant-upload-span,.ant-upload-list-picture-container .ant-upload-span{display:block;flex:auto}.ant-upload-list-text .ant-upload-span,.ant-upload-list-picture .ant-upload-span{display:flex;align-items:center}.ant-upload-list-text .ant-upload-span>*,.ant-upload-list-picture .ant-upload-span>*{flex:none}.ant-upload-list-text .ant-upload-list-item-name,.ant-upload-list-picture .ant-upload-list-item-name{flex:auto;margin:0;padding:0 8px}.ant-upload-list-text .ant-upload-list-item-card-actions,.ant-upload-list-picture .ant-upload-list-item-card-actions,.ant-upload-list-text .ant-upload-text-icon .anticon{position:static}.ant-upload-list .ant-upload-animate-inline-appear,.ant-upload-list .ant-upload-animate-inline-enter,.ant-upload-list .ant-upload-animate-inline-leave{animation-duration:.3s;animation-fill-mode:cubic-bezier(.78,.14,.15,.86)}.ant-upload-list .ant-upload-animate-inline-appear,.ant-upload-list .ant-upload-animate-inline-enter{animation-name:uploadAnimateInlineIn}.ant-upload-list .ant-upload-animate-inline-leave{animation-name:uploadAnimateInlineOut}@keyframes uploadAnimateInlineIn{0%{width:0;height:0;margin:0;padding:0;opacity:0}}@keyframes uploadAnimateInlineOut{to{width:0;height:0;margin:0;padding:0;opacity:0}}.ant-upload-rtl{direction:rtl}.ant-upload-rtl.ant-upload.ant-upload-select-picture-card{margin-right:auto;margin-left:8px}.ant-upload-list-rtl{direction:rtl}.ant-upload-list-rtl .ant-upload-list-item-list-type-text:hover .ant-upload-list-item-name-icon-count-1{padding-right:22px;padding-left:14px}.ant-upload-list-rtl .ant-upload-list-item-list-type-text:hover .ant-upload-list-item-name-icon-count-2{padding-right:22px;padding-left:28px}.ant-upload-list-rtl .ant-upload-list-item-name{padding-right:22px;padding-left:0}.ant-upload-list-rtl .ant-upload-list-item-name-icon-count-1{padding-left:14px}.ant-upload-list-rtl .ant-upload-list-item-card-actions{right:auto;left:0}.ant-upload-list-rtl .ant-upload-list-item-card-actions .anticon{padding-right:0;padding-left:5px}.ant-upload-list-rtl .ant-upload-list-item-info{padding:0 4px 0 12px}.ant-upload-list-rtl .ant-upload-list-item .anticon-close{right:auto;left:4px}.ant-upload-list-rtl .ant-upload-list-item-error .ant-upload-list-item-card-actions .anticon{padding-right:0;padding-left:5px}.ant-upload-list-rtl .ant-upload-list-item-progress{padding-right:26px;padding-left:0}.ant-upload-list-picture .ant-upload-list-item-info,.ant-upload-list-picture-card .ant-upload-list-item-info{padding:0}.ant-upload-list-rtl.ant-upload-list-picture .ant-upload-list-item-thumbnail,.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-thumbnail{right:8px;left:auto}.ant-upload-list-rtl.ant-upload-list-picture .ant-upload-list-item-icon,.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-icon{right:50%;left:auto;transform:translate(50%,-50%)}.ant-upload-list-rtl.ant-upload-list-picture .ant-upload-list-item-name,.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-name{margin:0 8px 0 0;padding-right:48px;padding-left:8px}.ant-upload-list-rtl.ant-upload-list-picture .ant-upload-list-item-name-icon-count-1,.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-name-icon-count-1{padding-right:48px;padding-left:18px}.ant-upload-list-rtl.ant-upload-list-picture .ant-upload-list-item-name-icon-count-2,.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-name-icon-count-2{padding-right:48px;padding-left:36px}.ant-upload-list-rtl.ant-upload-list-picture .ant-upload-list-item-progress,.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-progress{padding-right:0;padding-left:0}.ant-upload-list-rtl.ant-upload-list-picture .anticon-close,.ant-upload-list-rtl.ant-upload-list-picture-card .anticon-close{right:auto;left:8px}.ant-upload-list-rtl .ant-upload-list-picture-card-container{margin:0 0 8px 8px}.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-actions{right:50%;left:auto;transform:translate(50%,-50%)}.ant-upload-list-rtl.ant-upload-list-picture-card .ant-upload-list-item-file+.ant-upload-list-item-name{margin:8px 0 0;padding:0} diff --git a/examples/dist/assets/index-846e3dd9.js b/examples/dist/assets/index-846e3dd9.js new file mode 100644 index 0000000..4705705 --- /dev/null +++ b/examples/dist/assets/index-846e3dd9.js @@ -0,0 +1,121 @@ +(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const a of document.querySelectorAll('link[rel="modulepreload"]'))r(a);new MutationObserver(a=>{for(const o of a)if(o.type==="childList")for(const i of o.addedNodes)i.tagName==="LINK"&&i.rel==="modulepreload"&&r(i)}).observe(document,{childList:!0,subtree:!0});function n(a){const o={};return a.integrity&&(o.integrity=a.integrity),a.referrerPolicy&&(o.referrerPolicy=a.referrerPolicy),a.crossOrigin==="use-credentials"?o.credentials="include":a.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function r(a){if(a.ep)return;a.ep=!0;const o=n(a);fetch(a.href,o)}})();function Ip(t,e){const n=Object.create(null),r=t.split(",");for(let a=0;a!!n[a.toLowerCase()]:a=>!!n[a]}function _p(t){if(bt(t)){const e={};for(let n=0;n{if(n){const r=n.split(a5);r.length>1&&(e[r[0].trim()]=r[1].trim())}}),e}function Np(t){let e="";if(un(t))e=t;else if(bt(t))for(let n=0;n{},s5=()=>!1,c5=/^on[^a-z]/,Xc=t=>c5.test(t),$p=t=>t.startsWith("onUpdate:"),pn=Object.assign,Ap=(t,e)=>{const n=t.indexOf(e);n>-1&&t.splice(n,1)},d5=Object.prototype.hasOwnProperty,Tt=(t,e)=>d5.call(t,e),bt=Array.isArray,Sl=t=>Qc(t)==="[object Map]",f5=t=>Qc(t)==="[object Set]",St=t=>typeof t=="function",un=t=>typeof t=="string",Rp=t=>typeof t=="symbol",Gt=t=>t!==null&&typeof t=="object",Zw=t=>Gt(t)&&St(t.then)&&St(t.catch),v5=Object.prototype.toString,Qc=t=>v5.call(t),h5=t=>Qc(t).slice(8,-1),p5=t=>Qc(t)==="[object Object]",Dp=t=>un(t)&&t!=="NaN"&&t[0]!=="-"&&""+parseInt(t,10)===t,Ss=Ip(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),Zc=t=>{const e=Object.create(null);return n=>e[n]||(e[n]=t(n))},g5=/-(\w)/g,Ln=Zc(t=>t.replace(g5,(e,n)=>n?n.toUpperCase():"")),m5=/\B([A-Z])/g,Li=Zc(t=>t.replace(m5,"-$1").toLowerCase()),Jc=Zc(t=>t.charAt(0).toUpperCase()+t.slice(1)),yf=Zc(t=>t?`on${Jc(t)}`:""),Wl=(t,e)=>!Object.is(t,e),bf=(t,e)=>{for(let n=0;n{Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value:n})},Fp=t=>{const e=parseFloat(t);return isNaN(e)?t:e};let K0;const y5=()=>K0||(K0=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});let Yn;class b5{constructor(e=!1){this.detached=e,this.active=!0,this.effects=[],this.cleanups=[],this.parent=Yn,!e&&Yn&&(this.index=(Yn.scopes||(Yn.scopes=[])).push(this)-1)}run(e){if(this.active){const n=Yn;try{return Yn=this,e()}finally{Yn=n}}}on(){Yn=this}off(){Yn=this.parent}stop(e){if(this.active){let n,r;for(n=0,r=this.effects.length;n{const e=new Set(t);return e.w=0,e.n=0,e},Jw=t=>(t.w&za)>0,eS=t=>(t.n&za)>0,S5=({deps:t})=>{if(t.length)for(let e=0;e{const{deps:e}=t;if(e.length){let n=0;for(let r=0;r{(d==="length"||d>=u)&&l.push(s)})}else switch(n!==void 0&&l.push(i.get(n)),e){case"add":bt(t)?Dp(n)&&l.push(i.get("length")):(l.push(i.get(Po)),Sl(t)&&l.push(i.get(zv)));break;case"delete":bt(t)||(l.push(i.get(Po)),Sl(t)&&l.push(i.get(zv)));break;case"set":Sl(t)&&l.push(i.get(Po));break}if(l.length===1)l[0]&&Wv(l[0]);else{const u=[];for(const s of l)s&&u.push(...s);Wv(Lp(u))}}function Wv(t,e){const n=bt(t)?t:[...t];for(const r of n)r.computed&&z0(r);for(const r of n)r.computed||z0(r)}function z0(t,e){(t!==gr||t.allowRecurse)&&(t.scheduler?t.scheduler():t.run())}const k5=Ip("__proto__,__v_isRef,__isVue"),rS=new Set(Object.getOwnPropertyNames(Symbol).filter(t=>t!=="arguments"&&t!=="caller").map(t=>Symbol[t]).filter(Rp)),O5=jp(),T5=jp(!1,!0),E5=jp(!0),W0=M5();function M5(){const t={};return["includes","indexOf","lastIndexOf"].forEach(e=>{t[e]=function(...n){const r=rt(this);for(let o=0,i=this.length;o{t[e]=function(...n){Bi();const r=rt(this)[e].apply(this,n);return ji(),r}}),t}function jp(t=!1,e=!1){return function(r,a,o){if(a==="__v_isReactive")return!t;if(a==="__v_isReadonly")return t;if(a==="__v_isShallow")return e;if(a==="__v_raw"&&o===(t?e?W5:uS:e?lS:iS).get(r))return r;const i=bt(r);if(!t&&i&&Tt(W0,a))return Reflect.get(W0,a,o);const l=Reflect.get(r,a,o);return(Rp(a)?rS.has(a):k5(a))||(t||Xn(r,"get",a),e)?l:vn(l)?i&&Dp(a)?l:l.value:Gt(l)?t?cS(l):xt(l):l}}const I5=aS(),_5=aS(!0);function aS(t=!1){return function(n,r,a,o){let i=n[r];if(Si(i)&&vn(i)&&!vn(a))return!1;if(!t&&(!ic(a)&&!Si(a)&&(i=rt(i),a=rt(a)),!bt(n)&&vn(i)&&!vn(a)))return i.value=a,!0;const l=bt(n)&&Dp(r)?Number(r)t,ed=t=>Reflect.getPrototypeOf(t);function Lu(t,e,n=!1,r=!1){t=t.__v_raw;const a=rt(t),o=rt(e);n||(e!==o&&Xn(a,"get",e),Xn(a,"get",o));const{has:i}=ed(a),l=r?Vp:n?zp:Ul;if(i.call(a,e))return l(t.get(e));if(i.call(a,o))return l(t.get(o));t!==a&&t.get(e)}function Bu(t,e=!1){const n=this.__v_raw,r=rt(n),a=rt(t);return e||(t!==a&&Xn(r,"has",t),Xn(r,"has",a)),t===a?n.has(t):n.has(t)||n.has(a)}function ju(t,e=!1){return t=t.__v_raw,!e&&Xn(rt(t),"iterate",Po),Reflect.get(t,"size",t)}function U0(t){t=rt(t);const e=rt(this);return ed(e).has.call(e,t)||(e.add(t),va(e,"add",t,t)),this}function Y0(t,e){e=rt(e);const n=rt(this),{has:r,get:a}=ed(n);let o=r.call(n,t);o||(t=rt(t),o=r.call(n,t));const i=a.call(n,t);return n.set(t,e),o?Wl(e,i)&&va(n,"set",t,e):va(n,"add",t,e),this}function G0(t){const e=rt(this),{has:n,get:r}=ed(e);let a=n.call(e,t);a||(t=rt(t),a=n.call(e,t)),r&&r.call(e,t);const o=e.delete(t);return a&&va(e,"delete",t,void 0),o}function q0(){const t=rt(this),e=t.size!==0,n=t.clear();return e&&va(t,"clear",void 0,void 0),n}function Vu(t,e){return function(r,a){const o=this,i=o.__v_raw,l=rt(i),u=e?Vp:t?zp:Ul;return!t&&Xn(l,"iterate",Po),i.forEach((s,d)=>r.call(a,u(s),u(d),o))}}function Ku(t,e,n){return function(...r){const a=this.__v_raw,o=rt(a),i=Sl(o),l=t==="entries"||t===Symbol.iterator&&i,u=t==="keys"&&i,s=a[t](...r),d=n?Vp:e?zp:Ul;return!e&&Xn(o,"iterate",u?zv:Po),{next(){const{value:c,done:f}=s.next();return f?{value:c,done:f}:{value:l?[d(c[0]),d(c[1])]:d(c),done:f}},[Symbol.iterator](){return this}}}}function wa(t){return function(...e){return t==="delete"?!1:this}}function F5(){const t={get(o){return Lu(this,o)},get size(){return ju(this)},has:Bu,add:U0,set:Y0,delete:G0,clear:q0,forEach:Vu(!1,!1)},e={get(o){return Lu(this,o,!1,!0)},get size(){return ju(this)},has:Bu,add:U0,set:Y0,delete:G0,clear:q0,forEach:Vu(!1,!0)},n={get(o){return Lu(this,o,!0)},get size(){return ju(this,!0)},has(o){return Bu.call(this,o,!0)},add:wa("add"),set:wa("set"),delete:wa("delete"),clear:wa("clear"),forEach:Vu(!0,!1)},r={get(o){return Lu(this,o,!0,!0)},get size(){return ju(this,!0)},has(o){return Bu.call(this,o,!0)},add:wa("add"),set:wa("set"),delete:wa("delete"),clear:wa("clear"),forEach:Vu(!0,!0)};return["keys","values","entries",Symbol.iterator].forEach(o=>{t[o]=Ku(o,!1,!1),n[o]=Ku(o,!0,!1),e[o]=Ku(o,!1,!0),r[o]=Ku(o,!0,!0)}),[t,n,e,r]}const[L5,B5,j5,V5]=F5();function Kp(t,e){const n=e?t?V5:j5:t?B5:L5;return(r,a,o)=>a==="__v_isReactive"?!t:a==="__v_isReadonly"?t:a==="__v_raw"?r:Reflect.get(Tt(n,a)&&a in r?n:r,a,o)}const K5={get:Kp(!1,!1)},H5={get:Kp(!1,!0)},z5={get:Kp(!0,!1)},iS=new WeakMap,lS=new WeakMap,uS=new WeakMap,W5=new WeakMap;function U5(t){switch(t){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Y5(t){return t.__v_skip||!Object.isExtensible(t)?0:U5(h5(t))}function xt(t){return Si(t)?t:Hp(t,!1,oS,K5,iS)}function sS(t){return Hp(t,!1,D5,H5,lS)}function cS(t){return Hp(t,!0,R5,z5,uS)}function Hp(t,e,n,r,a){if(!Gt(t)||t.__v_raw&&!(e&&t.__v_isReactive))return t;const o=a.get(t);if(o)return o;const i=Y5(t);if(i===0)return t;const l=new Proxy(t,i===2?r:n);return a.set(t,l),l}function di(t){return Si(t)?di(t.__v_raw):!!(t&&t.__v_isReactive)}function Si(t){return!!(t&&t.__v_isReadonly)}function ic(t){return!!(t&&t.__v_isShallow)}function dS(t){return di(t)||Si(t)}function rt(t){const e=t&&t.__v_raw;return e?rt(e):t}function fS(t){return oc(t,"__v_skip",!0),t}const Ul=t=>Gt(t)?xt(t):t,zp=t=>Gt(t)?cS(t):t;function vS(t){Ba&&gr&&(t=rt(t),nS(t.dep||(t.dep=Lp())))}function hS(t,e){t=rt(t),t.dep&&Wv(t.dep)}function vn(t){return!!(t&&t.__v_isRef===!0)}function Q(t){return pS(t,!1)}function dt(t){return pS(t,!0)}function pS(t,e){return vn(t)?t:new G5(t,e)}class G5{constructor(e,n){this.__v_isShallow=n,this.dep=void 0,this.__v_isRef=!0,this._rawValue=n?e:rt(e),this._value=n?e:Ul(e)}get value(){return vS(this),this._value}set value(e){const n=this.__v_isShallow||ic(e)||Si(e);e=n?e:rt(e),Wl(e,this._rawValue)&&(this._rawValue=e,this._value=n?e:Ul(e),hS(this))}}function tn(t){return vn(t)?t.value:t}const q5={get:(t,e,n)=>tn(Reflect.get(t,e,n)),set:(t,e,n,r)=>{const a=t[e];return vn(a)&&!vn(n)?(a.value=n,!0):Reflect.set(t,e,n,r)}};function gS(t){return di(t)?t:new Proxy(t,q5)}function ko(t){const e=bt(t)?new Array(t.length):{};for(const n in t)e[n]=Ke(t,n);return e}class X5{constructor(e,n,r){this._object=e,this._key=n,this._defaultValue=r,this.__v_isRef=!0}get value(){const e=this._object[this._key];return e===void 0?this._defaultValue:e}set value(e){this._object[this._key]=e}}function Ke(t,e,n){const r=t[e];return vn(r)?r:new X5(t,e,n)}var mS;class Q5{constructor(e,n,r,a){this._setter=n,this.dep=void 0,this.__v_isRef=!0,this[mS]=!1,this._dirty=!0,this.effect=new Bp(e,()=>{this._dirty||(this._dirty=!0,hS(this))}),this.effect.computed=this,this.effect.active=this._cacheable=!a,this.__v_isReadonly=r}get value(){const e=rt(this);return vS(e),(e._dirty||!e._cacheable)&&(e._dirty=!1,e._value=e.effect.run()),e._value}set value(e){this._setter(e)}}mS="__v_isReadonly";function Z5(t,e,n=!1){let r,a;const o=St(t);return o?(r=t,a=br):(r=t.get,a=t.set),new Q5(r,a,o||!a,n)}function ja(t,e,n,r){let a;try{a=r?t(...r):t()}catch(o){td(o,e,n)}return a}function lr(t,e,n,r){if(St(t)){const o=ja(t,e,n,r);return o&&Zw(o)&&o.catch(i=>{td(i,e,n)}),o}const a=[];for(let o=0;o>>1;Gl(xn[r])Br&&xn.splice(e,1)}function nT(t){bt(t)?fi.push(...t):(!aa||!aa.includes(t,t.allowRecurse?vo+1:vo))&&fi.push(t),bS()}function X0(t,e=Yl?Br+1:0){for(;eGl(n)-Gl(r)),vo=0;vot.id==null?1/0:t.id,rT=(t,e)=>{const n=Gl(t)-Gl(e);if(n===0){if(t.pre&&!e.pre)return-1;if(e.pre&&!t.pre)return 1}return n};function xS(t){Uv=!1,Yl=!0,xn.sort(rT);const e=br;try{for(Br=0;Brun(v)?v.trim():v)),c&&(a=n.map(Fp))}let l,u=r[l=yf(e)]||r[l=yf(Ln(e))];!u&&o&&(u=r[l=yf(Li(e))]),u&&lr(u,t,6,a);const s=r[l+"Once"];if(s){if(!t.emitted)t.emitted={};else if(t.emitted[l])return;t.emitted[l]=!0,lr(s,t,6,a)}}function wS(t,e,n=!1){const r=e.emitsCache,a=r.get(t);if(a!==void 0)return a;const o=t.emits;let i={},l=!1;if(!St(t)){const u=s=>{const d=wS(s,e,!0);d&&(l=!0,pn(i,d))};!n&&e.mixins.length&&e.mixins.forEach(u),t.extends&&u(t.extends),t.mixins&&t.mixins.forEach(u)}return!o&&!l?(Gt(t)&&r.set(t,null),null):(bt(o)?o.forEach(u=>i[u]=null):pn(i,o),Gt(t)&&r.set(t,i),i)}function nd(t,e){return!t||!Xc(e)?!1:(e=e.slice(2).replace(/Once$/,""),Tt(t,e[0].toLowerCase()+e.slice(1))||Tt(t,Li(e))||Tt(t,e))}let mn=null,rd=null;function lc(t){const e=mn;return mn=t,rd=t&&t.type.__scopeId||null,e}function Kre(t){rd=t}function Hre(){rd=null}function pl(t,e=mn,n){if(!e||t._n)return t;const r=(...a)=>{r._d&&l1(-1);const o=lc(e);let i;try{i=t(...a)}finally{lc(o),r._d&&l1(1)}return i};return r._n=!0,r._c=!0,r._d=!0,r}function Cf(t){const{type:e,vnode:n,proxy:r,withProxy:a,props:o,propsOptions:[i],slots:l,attrs:u,emit:s,render:d,renderCache:c,data:f,setupState:v,ctx:g,inheritAttrs:p}=t;let m,b;const C=lc(t);try{if(n.shapeFlag&4){const w=a||r;m=Lr(d.call(w,w,c,o,v,f,g)),b=u}else{const w=e;m=Lr(w.length>1?w(o,{attrs:u,slots:l,emit:s}):w(o,null)),b=e.props?u:oT(u)}}catch(w){Tl.length=0,td(w,t,1),m=h(qn)}let x=m;if(b&&p!==!1){const w=Object.keys(b),{shapeFlag:P}=x;w.length&&P&7&&(i&&w.some($p)&&(b=iT(b,i)),x=Cn(x,b))}return n.dirs&&(x=Cn(x),x.dirs=x.dirs?x.dirs.concat(n.dirs):n.dirs),n.transition&&(x.transition=n.transition),m=x,lc(C),m}const oT=t=>{let e;for(const n in t)(n==="class"||n==="style"||Xc(n))&&((e||(e={}))[n]=t[n]);return e},iT=(t,e)=>{const n={};for(const r in t)(!$p(r)||!(r.slice(9)in e))&&(n[r]=t[r]);return n};function lT(t,e,n){const{props:r,children:a,component:o}=t,{props:i,children:l,patchFlag:u}=e,s=o.emitsOptions;if(e.dirs||e.transition)return!0;if(n&&u>=0){if(u&1024)return!0;if(u&16)return r?Q0(r,i,s):!!i;if(u&8){const d=e.dynamicProps;for(let c=0;ct.__isSuspense;function cT(t,e){e&&e.pendingBranch?bt(t)?e.effects.push(...t):e.effects.push(t):nT(t)}function at(t,e){if(fn){let n=fn.provides;const r=fn.parent&&fn.parent.provides;r===n&&(n=fn.provides=Object.create(r)),n[t]=e}}function Ze(t,e,n=!1){const r=fn||mn;if(r){const a=r.parent==null?r.vnode.appContext&&r.vnode.appContext.provides:r.parent.provides;if(a&&t in a)return a[t];if(arguments.length>1)return n&&St(e)?e.call(r.proxy):e}}function Je(t,e){return Yp(t,null,e)}const Hu={};function Se(t,e,n){return Yp(t,e,n)}function Yp(t,e,{immediate:n,deep:r,flush:a,onTrack:o,onTrigger:i}=Ht){const l=fn;let u,s=!1,d=!1;if(vn(t)?(u=()=>t.value,s=ic(t)):di(t)?(u=()=>t,r=!0):bt(t)?(d=!0,s=t.some(x=>di(x)||ic(x)),u=()=>t.map(x=>{if(vn(x))return x.value;if(di(x))return xo(x);if(St(x))return ja(x,l,2)})):St(t)?e?u=()=>ja(t,l,2):u=()=>{if(!(l&&l.isUnmounted))return c&&c(),lr(t,l,3,[f])}:u=br,e&&r){const x=u;u=()=>xo(x())}let c,f=x=>{c=b.onStop=()=>{ja(x,l,4)}},v;if(Zl)if(f=br,e?n&&lr(e,l,3,[u(),d?[]:void 0,f]):u(),a==="sync"){const x=n7();v=x.__watcherHandles||(x.__watcherHandles=[])}else return br;let g=d?new Array(t.length).fill(Hu):Hu;const p=()=>{if(b.active)if(e){const x=b.run();(r||s||(d?x.some((w,P)=>Wl(w,g[P])):Wl(x,g)))&&(c&&c(),lr(e,l,3,[x,g===Hu?void 0:d&&g[0]===Hu?[]:g,f]),g=x)}else b.run()};p.allowRecurse=!!e;let m;a==="sync"?m=p:a==="post"?m=()=>Rn(p,l&&l.suspense):(p.pre=!0,l&&(p.id=l.uid),m=()=>Up(p));const b=new Bp(u,m);e?n?p():g=b.run():a==="post"?Rn(b.run.bind(b),l&&l.suspense):b.run();const C=()=>{b.stop(),l&&l.scope&&Ap(l.scope.effects,b)};return v&&v.push(C),C}function dT(t,e,n){const r=this.proxy,a=un(t)?t.includes(".")?SS(r,t):()=>r[t]:t.bind(r,r);let o;St(e)?o=e:(o=e.handler,n=e);const i=fn;Pi(this);const l=Yp(a,o.bind(r),n);return i?Pi(i):Oo(),l}function SS(t,e){const n=e.split(".");return()=>{let r=t;for(let a=0;a{xo(n,e)});else if(p5(t))for(const n in t)xo(t[n],e);return t}function PS(){const t={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return Ge(()=>{t.isMounted=!0}),ut(()=>{t.isUnmounting=!0}),t}const tr=[Function,Array],fT={name:"BaseTransition",props:{mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:tr,onEnter:tr,onAfterEnter:tr,onEnterCancelled:tr,onBeforeLeave:tr,onLeave:tr,onAfterLeave:tr,onLeaveCancelled:tr,onBeforeAppear:tr,onAppear:tr,onAfterAppear:tr,onAppearCancelled:tr},setup(t,{slots:e}){const n=cn(),r=PS();let a;return()=>{const o=e.default&&Gp(e.default(),!0);if(!o||!o.length)return;let i=o[0];if(o.length>1){for(const p of o)if(p.type!==qn){i=p;break}}const l=rt(t),{mode:u}=l;if(r.isLeaving)return xf(i);const s=Z0(i);if(!s)return xf(i);const d=ql(s,l,r,n);Xl(s,d);const c=n.subTree,f=c&&Z0(c);let v=!1;const{getTransitionKey:g}=s.type;if(g){const p=g();a===void 0?a=p:p!==a&&(a=p,v=!0)}if(f&&f.type!==qn&&(!ho(s,f)||v)){const p=ql(f,l,r,n);if(Xl(f,p),u==="out-in")return r.isLeaving=!0,p.afterLeave=()=>{r.isLeaving=!1,n.update.active!==!1&&n.update()},xf(i);u==="in-out"&&s.type!==qn&&(p.delayLeave=(m,b,C)=>{const x=OS(r,f);x[String(f.key)]=f,m._leaveCb=()=>{b(),m._leaveCb=void 0,delete d.delayedLeave},d.delayedLeave=C})}return i}}},kS=fT;function OS(t,e){const{leavingVNodes:n}=t;let r=n.get(e.type);return r||(r=Object.create(null),n.set(e.type,r)),r}function ql(t,e,n,r){const{appear:a,mode:o,persisted:i=!1,onBeforeEnter:l,onEnter:u,onAfterEnter:s,onEnterCancelled:d,onBeforeLeave:c,onLeave:f,onAfterLeave:v,onLeaveCancelled:g,onBeforeAppear:p,onAppear:m,onAfterAppear:b,onAppearCancelled:C}=e,x=String(t.key),w=OS(n,t),P=(T,O)=>{T&&lr(T,r,9,O)},S=(T,O)=>{const N=O[1];P(T,O),bt(T)?T.every($=>$.length<=1)&&N():T.length<=1&&N()},k={mode:o,persisted:i,beforeEnter(T){let O=l;if(!n.isMounted)if(a)O=p||l;else return;T._leaveCb&&T._leaveCb(!0);const N=w[x];N&&ho(t,N)&&N.el._leaveCb&&N.el._leaveCb(),P(O,[T])},enter(T){let O=u,N=s,$=d;if(!n.isMounted)if(a)O=m||u,N=b||s,$=C||d;else return;let I=!1;const E=T._enterCb=F=>{I||(I=!0,F?P($,[T]):P(N,[T]),k.delayedLeave&&k.delayedLeave(),T._enterCb=void 0)};O?S(O,[T,E]):E()},leave(T,O){const N=String(t.key);if(T._enterCb&&T._enterCb(!0),n.isUnmounting)return O();P(c,[T]);let $=!1;const I=T._leaveCb=E=>{$||($=!0,O(),E?P(g,[T]):P(v,[T]),T._leaveCb=void 0,w[N]===t&&delete w[N])};w[N]=t,f?S(f,[T,I]):I()},clone(T){return ql(T,e,n,r)}};return k}function xf(t){if(ad(t))return t=Cn(t),t.children=null,t}function Z0(t){return ad(t)?t.children?t.children[0]:void 0:t}function Xl(t,e){t.shapeFlag&6&&t.component?Xl(t.component.subTree,e):t.shapeFlag&128?(t.ssContent.transition=e.clone(t.ssContent),t.ssFallback.transition=e.clone(t.ssFallback)):t.transition=e}function Gp(t,e=!1,n){let r=[],a=0;for(let o=0;o1)for(let o=0;o!!t.type.__asyncLoader,ad=t=>t.type.__isKeepAlive;function od(t,e){ES(t,"a",e)}function TS(t,e){ES(t,"da",e)}function ES(t,e,n=fn){const r=t.__wdc||(t.__wdc=()=>{let a=n;for(;a;){if(a.isDeactivated)return;a=a.parent}return t()});if(id(e,r,n),n){let a=n.parent;for(;a&&a.parent;)ad(a.parent.vnode)&&vT(r,e,n,a),a=a.parent}}function vT(t,e,n,r){const a=id(e,t,r,!0);Sn(()=>{Ap(r[e],a)},n)}function id(t,e,n=fn,r=!1){if(n){const a=n[t]||(n[t]=[]),o=e.__weh||(e.__weh=(...i)=>{if(n.isUnmounted)return;Bi(),Pi(n);const l=lr(e,n,t,i);return Oo(),ji(),l});return r?a.unshift(o):a.push(o),o}}const pa=t=>(e,n=fn)=>(!Zl||t==="sp")&&id(t,(...r)=>e(...r),n),ld=pa("bm"),Ge=pa("m"),qp=pa("bu"),wn=pa("u"),ut=pa("bum"),Sn=pa("um"),hT=pa("sp"),pT=pa("rtg"),gT=pa("rtc");function mT(t,e=fn){id("ec",t,e)}function gn(t,e){const n=mn;if(n===null)return t;const r=sd(n)||n.proxy,a=t.dirs||(t.dirs=[]);for(let o=0;oe(i,l,void 0,o&&o[l]));else{const i=Object.keys(t);a=new Array(i.length);for(let l=0,u=i.length;lhn(e)?!(e.type===qn||e.type===et&&!_S(e.children)):!0)?t:null}const Yv=t=>t?zS(t)?sd(t)||t.proxy:Yv(t.parent):null,kl=pn(Object.create(null),{$:t=>t,$el:t=>t.vnode.el,$data:t=>t.data,$props:t=>t.props,$attrs:t=>t.attrs,$slots:t=>t.slots,$refs:t=>t.refs,$parent:t=>Yv(t.parent),$root:t=>Yv(t.root),$emit:t=>t.emit,$options:t=>Qp(t),$forceUpdate:t=>t.f||(t.f=()=>Up(t.update)),$nextTick:t=>t.n||(t.n=nt.bind(t.proxy)),$watch:t=>dT.bind(t)}),Sf=(t,e)=>t!==Ht&&!t.__isScriptSetup&&Tt(t,e),xT={get({_:t},e){const{ctx:n,setupState:r,data:a,props:o,accessCache:i,type:l,appContext:u}=t;let s;if(e[0]!=="$"){const v=i[e];if(v!==void 0)switch(v){case 1:return r[e];case 2:return a[e];case 4:return n[e];case 3:return o[e]}else{if(Sf(r,e))return i[e]=1,r[e];if(a!==Ht&&Tt(a,e))return i[e]=2,a[e];if((s=t.propsOptions[0])&&Tt(s,e))return i[e]=3,o[e];if(n!==Ht&&Tt(n,e))return i[e]=4,n[e];Gv&&(i[e]=0)}}const d=kl[e];let c,f;if(d)return e==="$attrs"&&Xn(t,"get",e),d(t);if((c=l.__cssModules)&&(c=c[e]))return c;if(n!==Ht&&Tt(n,e))return i[e]=4,n[e];if(f=u.config.globalProperties,Tt(f,e))return f[e]},set({_:t},e,n){const{data:r,setupState:a,ctx:o}=t;return Sf(a,e)?(a[e]=n,!0):r!==Ht&&Tt(r,e)?(r[e]=n,!0):Tt(t.props,e)||e[0]==="$"&&e.slice(1)in t?!1:(o[e]=n,!0)},has({_:{data:t,setupState:e,accessCache:n,ctx:r,appContext:a,propsOptions:o}},i){let l;return!!n[i]||t!==Ht&&Tt(t,i)||Sf(e,i)||(l=o[0])&&Tt(l,i)||Tt(r,i)||Tt(kl,i)||Tt(a.config.globalProperties,i)},defineProperty(t,e,n){return n.get!=null?t._.accessCache[e]=0:Tt(n,"value")&&this.set(t,e,n.value,null),Reflect.defineProperty(t,e,n)}};let Gv=!0;function wT(t){const e=Qp(t),n=t.proxy,r=t.ctx;Gv=!1,e.beforeCreate&&e1(e.beforeCreate,t,"bc");const{data:a,computed:o,methods:i,watch:l,provide:u,inject:s,created:d,beforeMount:c,mounted:f,beforeUpdate:v,updated:g,activated:p,deactivated:m,beforeDestroy:b,beforeUnmount:C,destroyed:x,unmounted:w,render:P,renderTracked:S,renderTriggered:k,errorCaptured:T,serverPrefetch:O,expose:N,inheritAttrs:$,components:I,directives:E,filters:F}=e;if(s&&ST(s,r,null,t.appContext.config.unwrapInjectedRef),i)for(const R in i){const _=i[R];St(_)&&(r[R]=_.bind(n))}if(a){const R=a.call(n,n);Gt(R)&&(t.data=xt(R))}if(Gv=!0,o)for(const R in o){const _=o[R],M=St(_)?_.bind(n,n):St(_.get)?_.get.bind(n,n):br,V=!St(_)&&St(_.set)?_.set.bind(n):br,B=L({get:M,set:V});Object.defineProperty(r,R,{enumerable:!0,configurable:!0,get:()=>B.value,set:U=>B.value=U})}if(l)for(const R in l)NS(l[R],r,n,R);if(u){const R=St(u)?u.call(n):u;Reflect.ownKeys(R).forEach(_=>{at(_,R[_])})}d&&e1(d,t,"c");function D(R,_){bt(_)?_.forEach(M=>R(M.bind(n))):_&&R(_.bind(n))}if(D(ld,c),D(Ge,f),D(qp,v),D(wn,g),D(od,p),D(TS,m),D(mT,T),D(gT,S),D(pT,k),D(ut,C),D(Sn,w),D(hT,O),bt(N))if(N.length){const R=t.exposed||(t.exposed={});N.forEach(_=>{Object.defineProperty(R,_,{get:()=>n[_],set:M=>n[_]=M})})}else t.exposed||(t.exposed={});P&&t.render===br&&(t.render=P),$!=null&&(t.inheritAttrs=$),I&&(t.components=I),E&&(t.directives=E)}function ST(t,e,n=br,r=!1){bt(t)&&(t=qv(t));for(const a in t){const o=t[a];let i;Gt(o)?"default"in o?i=Ze(o.from||a,o.default,!0):i=Ze(o.from||a):i=Ze(o),vn(i)&&r?Object.defineProperty(e,a,{enumerable:!0,configurable:!0,get:()=>i.value,set:l=>i.value=l}):e[a]=i}}function e1(t,e,n){lr(bt(t)?t.map(r=>r.bind(e.proxy)):t.bind(e.proxy),e,n)}function NS(t,e,n,r){const a=r.includes(".")?SS(n,r):()=>n[r];if(un(t)){const o=e[t];St(o)&&Se(a,o)}else if(St(t))Se(a,t.bind(n));else if(Gt(t))if(bt(t))t.forEach(o=>NS(o,e,n,r));else{const o=St(t.handler)?t.handler.bind(n):e[t.handler];St(o)&&Se(a,o,t)}}function Qp(t){const e=t.type,{mixins:n,extends:r}=e,{mixins:a,optionsCache:o,config:{optionMergeStrategies:i}}=t.appContext,l=o.get(e);let u;return l?u=l:!a.length&&!n&&!r?u=e:(u={},a.length&&a.forEach(s=>uc(u,s,i,!0)),uc(u,e,i)),Gt(e)&&o.set(e,u),u}function uc(t,e,n,r=!1){const{mixins:a,extends:o}=e;o&&uc(t,o,n,!0),a&&a.forEach(i=>uc(t,i,n,!0));for(const i in e)if(!(r&&i==="expose")){const l=PT[i]||n&&n[i];t[i]=l?l(t[i],e[i]):e[i]}return t}const PT={data:t1,props:so,emits:so,methods:so,computed:so,beforeCreate:On,created:On,beforeMount:On,mounted:On,beforeUpdate:On,updated:On,beforeDestroy:On,beforeUnmount:On,destroyed:On,unmounted:On,activated:On,deactivated:On,errorCaptured:On,serverPrefetch:On,components:so,directives:so,watch:OT,provide:t1,inject:kT};function t1(t,e){return e?t?function(){return pn(St(t)?t.call(this,this):t,St(e)?e.call(this,this):e)}:e:t}function kT(t,e){return so(qv(t),qv(e))}function qv(t){if(bt(t)){const e={};for(let n=0;n0)&&!(i&16)){if(i&8){const d=t.vnode.dynamicProps;for(let c=0;c{u=!0;const[f,v]=AS(c,e,!0);pn(i,f),v&&l.push(...v)};!n&&e.mixins.length&&e.mixins.forEach(d),t.extends&&d(t.extends),t.mixins&&t.mixins.forEach(d)}if(!o&&!u)return Gt(t)&&r.set(t,ci),ci;if(bt(o))for(let d=0;d-1,v[1]=p<0||g-1||Tt(v,"default"))&&l.push(c)}}}const s=[i,l];return Gt(t)&&r.set(t,s),s}function n1(t){return t[0]!=="$"}function r1(t){const e=t&&t.toString().match(/^\s*function (\w+)/);return e?e[1]:t===null?"null":""}function a1(t,e){return r1(t)===r1(e)}function o1(t,e){return bt(e)?e.findIndex(n=>a1(n,t)):St(e)&&a1(e,t)?0:-1}const RS=t=>t[0]==="_"||t==="$stable",Zp=t=>bt(t)?t.map(Lr):[Lr(t)],MT=(t,e,n)=>{if(e._n)return e;const r=pl((...a)=>Zp(e(...a)),n);return r._c=!1,r},DS=(t,e,n)=>{const r=t._ctx;for(const a in t){if(RS(a))continue;const o=t[a];if(St(o))e[a]=MT(a,o,r);else if(o!=null){const i=Zp(o);e[a]=()=>i}}},FS=(t,e)=>{const n=Zp(e);t.slots.default=()=>n},IT=(t,e)=>{if(t.vnode.shapeFlag&32){const n=e._;n?(t.slots=rt(e),oc(e,"_",n)):DS(e,t.slots={})}else t.slots={},e&&FS(t,e);oc(t.slots,ud,1)},_T=(t,e,n)=>{const{vnode:r,slots:a}=t;let o=!0,i=Ht;if(r.shapeFlag&32){const l=e._;l?n&&l===1?o=!1:(pn(a,e),!n&&l===1&&delete a._):(o=!e.$stable,DS(e,a)),i=e}else e&&(FS(t,e),i={default:1});if(o)for(const l in a)!RS(l)&&!(l in i)&&delete a[l]};function LS(){return{app:null,config:{isNativeTag:s5,performance:!1,globalProperties:{},optionMergeStrategies:{},errorHandler:void 0,warnHandler:void 0,compilerOptions:{}},mixins:[],components:{},directives:{},provides:Object.create(null),optionsCache:new WeakMap,propsCache:new WeakMap,emitsCache:new WeakMap}}let NT=0;function $T(t,e){return function(r,a=null){St(r)||(r=Object.assign({},r)),a!=null&&!Gt(a)&&(a=null);const o=LS(),i=new Set;let l=!1;const u=o.app={_uid:NT++,_component:r,_props:a,_container:null,_context:o,_instance:null,version:r7,get config(){return o.config},set config(s){},use(s,...d){return i.has(s)||(s&&St(s.install)?(i.add(s),s.install(u,...d)):St(s)&&(i.add(s),s(u,...d))),u},mixin(s){return o.mixins.includes(s)||o.mixins.push(s),u},component(s,d){return d?(o.components[s]=d,u):o.components[s]},directive(s,d){return d?(o.directives[s]=d,u):o.directives[s]},mount(s,d,c){if(!l){const f=h(r,a);return f.appContext=o,d&&e?e(f,s):t(f,s,c),l=!0,u._container=s,s.__vue_app__=u,sd(f.component)||f.component.proxy}},unmount(){l&&(t(null,u._container),delete u._container.__vue_app__)},provide(s,d){return o.provides[s]=d,u}};return u}}function Qv(t,e,n,r,a=!1){if(bt(t)){t.forEach((f,v)=>Qv(f,e&&(bt(e)?e[v]:e),n,r,a));return}if(Pl(r)&&!a)return;const o=r.shapeFlag&4?sd(r.component)||r.component.proxy:r.el,i=a?null:o,{i:l,r:u}=t,s=e&&e.r,d=l.refs===Ht?l.refs={}:l.refs,c=l.setupState;if(s!=null&&s!==u&&(un(s)?(d[s]=null,Tt(c,s)&&(c[s]=null)):vn(s)&&(s.value=null)),St(u))ja(u,l,12,[i,d]);else{const f=un(u),v=vn(u);if(f||v){const g=()=>{if(t.f){const p=f?Tt(c,u)?c[u]:d[u]:u.value;a?bt(p)&&Ap(p,o):bt(p)?p.includes(o)||p.push(o):f?(d[u]=[o],Tt(c,u)&&(c[u]=d[u])):(u.value=[o],t.k&&(d[t.k]=u.value))}else f?(d[u]=i,Tt(c,u)&&(c[u]=i)):v&&(u.value=i,t.k&&(d[t.k]=i))};i?(g.id=-1,Rn(g,n)):g()}}}const Rn=cT;function AT(t){return RT(t)}function RT(t,e){const n=y5();n.__VUE__=!0;const{insert:r,remove:a,patchProp:o,createElement:i,createText:l,createComment:u,setText:s,setElementText:d,parentNode:c,nextSibling:f,setScopeId:v=br,insertStaticContent:g}=t,p=(q,H,Z,ae=null,oe=null,ue=null,me=!1,se=null,ie=!!H.dynamicChildren)=>{if(q===H)return;q&&!ho(q,H)&&(ae=z(q),U(q,oe,ue,!0),q=null),H.patchFlag===-2&&(ie=!1,H.dynamicChildren=null);const{type:ne,ref:de,shapeFlag:ve}=H;switch(ne){case Ua:m(q,H,Z,ae);break;case qn:b(q,H,Z,ae);break;case Pf:q==null&&C(H,Z,ae,me);break;case et:I(q,H,Z,ae,oe,ue,me,se,ie);break;default:ve&1?P(q,H,Z,ae,oe,ue,me,se,ie):ve&6?E(q,H,Z,ae,oe,ue,me,se,ie):(ve&64||ve&128)&&ne.process(q,H,Z,ae,oe,ue,me,se,ie,J)}de!=null&&oe&&Qv(de,q&&q.ref,ue,H||q,!H)},m=(q,H,Z,ae)=>{if(q==null)r(H.el=l(H.children),Z,ae);else{const oe=H.el=q.el;H.children!==q.children&&s(oe,H.children)}},b=(q,H,Z,ae)=>{q==null?r(H.el=u(H.children||""),Z,ae):H.el=q.el},C=(q,H,Z,ae)=>{[q.el,q.anchor]=g(q.children,H,Z,ae,q.el,q.anchor)},x=({el:q,anchor:H},Z,ae)=>{let oe;for(;q&&q!==H;)oe=f(q),r(q,Z,ae),q=oe;r(H,Z,ae)},w=({el:q,anchor:H})=>{let Z;for(;q&&q!==H;)Z=f(q),a(q),q=Z;a(H)},P=(q,H,Z,ae,oe,ue,me,se,ie)=>{me=me||H.type==="svg",q==null?S(H,Z,ae,oe,ue,me,se,ie):O(q,H,oe,ue,me,se,ie)},S=(q,H,Z,ae,oe,ue,me,se)=>{let ie,ne;const{type:de,props:ve,shapeFlag:be,transition:Pe,dirs:$e}=q;if(ie=q.el=i(q.type,ue,ve&&ve.is,ve),be&8?d(ie,q.children):be&16&&T(q.children,ie,null,ae,oe,ue&&de!=="foreignObject",me,se),$e&&eo(q,null,ae,"created"),ve){for(const we in ve)we!=="value"&&!Ss(we)&&o(ie,we,null,ve[we],ue,q.children,ae,oe,X);"value"in ve&&o(ie,"value",null,ve.value),(ne=ve.onVnodeBeforeMount)&&Ar(ne,ae,q)}k(ie,q,q.scopeId,me,ae),$e&&eo(q,null,ae,"beforeMount");const De=(!oe||oe&&!oe.pendingBranch)&&Pe&&!Pe.persisted;De&&Pe.beforeEnter(ie),r(ie,H,Z),((ne=ve&&ve.onVnodeMounted)||De||$e)&&Rn(()=>{ne&&Ar(ne,ae,q),De&&Pe.enter(ie),$e&&eo(q,null,ae,"mounted")},oe)},k=(q,H,Z,ae,oe)=>{if(Z&&v(q,Z),ae)for(let ue=0;ue{for(let ne=ie;ne{const se=H.el=q.el;let{patchFlag:ie,dynamicChildren:ne,dirs:de}=H;ie|=q.patchFlag&16;const ve=q.props||Ht,be=H.props||Ht;let Pe;Z&&to(Z,!1),(Pe=be.onVnodeBeforeUpdate)&&Ar(Pe,Z,H,q),de&&eo(H,q,Z,"beforeUpdate"),Z&&to(Z,!0);const $e=oe&&H.type!=="foreignObject";if(ne?N(q.dynamicChildren,ne,se,Z,ae,$e,ue):me||_(q,H,se,null,Z,ae,$e,ue,!1),ie>0){if(ie&16)$(se,H,ve,be,Z,ae,oe);else if(ie&2&&ve.class!==be.class&&o(se,"class",null,be.class,oe),ie&4&&o(se,"style",ve.style,be.style,oe),ie&8){const De=H.dynamicProps;for(let we=0;we{Pe&&Ar(Pe,Z,H,q),de&&eo(H,q,Z,"updated")},ae)},N=(q,H,Z,ae,oe,ue,me)=>{for(let se=0;se{if(Z!==ae){if(Z!==Ht)for(const se in Z)!Ss(se)&&!(se in ae)&&o(q,se,Z[se],null,me,H.children,oe,ue,X);for(const se in ae){if(Ss(se))continue;const ie=ae[se],ne=Z[se];ie!==ne&&se!=="value"&&o(q,se,ne,ie,me,H.children,oe,ue,X)}"value"in ae&&o(q,"value",Z.value,ae.value)}},I=(q,H,Z,ae,oe,ue,me,se,ie)=>{const ne=H.el=q?q.el:l(""),de=H.anchor=q?q.anchor:l("");let{patchFlag:ve,dynamicChildren:be,slotScopeIds:Pe}=H;Pe&&(se=se?se.concat(Pe):Pe),q==null?(r(ne,Z,ae),r(de,Z,ae),T(H.children,Z,de,oe,ue,me,se,ie)):ve>0&&ve&64&&be&&q.dynamicChildren?(N(q.dynamicChildren,be,Z,oe,ue,me,se),(H.key!=null||oe&&H===oe.subTree)&&Jp(q,H,!0)):_(q,H,Z,de,oe,ue,me,se,ie)},E=(q,H,Z,ae,oe,ue,me,se,ie)=>{H.slotScopeIds=se,q==null?H.shapeFlag&512?oe.ctx.activate(H,Z,ae,me,ie):F(H,Z,ae,oe,ue,me,ie):j(q,H,ie)},F=(q,H,Z,ae,oe,ue,me)=>{const se=q.component=YT(q,ae,oe);if(ad(q)&&(se.ctx.renderer=J),GT(se),se.asyncDep){if(oe&&oe.registerDep(se,D),!q.el){const ie=se.subTree=h(qn);b(null,ie,H,Z)}return}D(se,q,H,Z,oe,ue,me)},j=(q,H,Z)=>{const ae=H.component=q.component;if(lT(q,H,Z))if(ae.asyncDep&&!ae.asyncResolved){R(ae,H,Z);return}else ae.next=H,tT(ae.update),ae.update();else H.el=q.el,ae.vnode=H},D=(q,H,Z,ae,oe,ue,me)=>{const se=()=>{if(q.isMounted){let{next:de,bu:ve,u:be,parent:Pe,vnode:$e}=q,De=de,we;to(q,!1),de?(de.el=$e.el,R(q,de,me)):de=$e,ve&&bf(ve),(we=de.props&&de.props.onVnodeBeforeUpdate)&&Ar(we,Pe,de,$e),to(q,!0);const he=Cf(q),Oe=q.subTree;q.subTree=he,p(Oe,he,c(Oe.el),z(Oe),q,oe,ue),de.el=he.el,De===null&&uT(q,he.el),be&&Rn(be,oe),(we=de.props&&de.props.onVnodeUpdated)&&Rn(()=>Ar(we,Pe,de,$e),oe)}else{let de;const{el:ve,props:be}=H,{bm:Pe,m:$e,parent:De}=q,we=Pl(H);if(to(q,!1),Pe&&bf(Pe),!we&&(de=be&&be.onVnodeBeforeMount)&&Ar(de,De,H),to(q,!0),ve&&re){const he=()=>{q.subTree=Cf(q),re(ve,q.subTree,q,oe,null)};we?H.type.__asyncLoader().then(()=>!q.isUnmounted&&he()):he()}else{const he=q.subTree=Cf(q);p(null,he,Z,ae,q,oe,ue),H.el=he.el}if($e&&Rn($e,oe),!we&&(de=be&&be.onVnodeMounted)){const he=H;Rn(()=>Ar(de,De,he),oe)}(H.shapeFlag&256||De&&Pl(De.vnode)&&De.vnode.shapeFlag&256)&&q.a&&Rn(q.a,oe),q.isMounted=!0,H=Z=ae=null}},ie=q.effect=new Bp(se,()=>Up(ne),q.scope),ne=q.update=()=>ie.run();ne.id=q.uid,to(q,!0),ne()},R=(q,H,Z)=>{H.component=q;const ae=q.vnode.props;q.vnode=H,q.next=null,ET(q,H.props,ae,Z),_T(q,H.children,Z),Bi(),X0(),ji()},_=(q,H,Z,ae,oe,ue,me,se,ie=!1)=>{const ne=q&&q.children,de=q?q.shapeFlag:0,ve=H.children,{patchFlag:be,shapeFlag:Pe}=H;if(be>0){if(be&128){V(ne,ve,Z,ae,oe,ue,me,se,ie);return}else if(be&256){M(ne,ve,Z,ae,oe,ue,me,se,ie);return}}Pe&8?(de&16&&X(ne,oe,ue),ve!==ne&&d(Z,ve)):de&16?Pe&16?V(ne,ve,Z,ae,oe,ue,me,se,ie):X(ne,oe,ue,!0):(de&8&&d(Z,""),Pe&16&&T(ve,Z,ae,oe,ue,me,se,ie))},M=(q,H,Z,ae,oe,ue,me,se,ie)=>{q=q||ci,H=H||ci;const ne=q.length,de=H.length,ve=Math.min(ne,de);let be;for(be=0;bede?X(q,oe,ue,!0,!1,ve):T(H,Z,ae,oe,ue,me,se,ie,ve)},V=(q,H,Z,ae,oe,ue,me,se,ie)=>{let ne=0;const de=H.length;let ve=q.length-1,be=de-1;for(;ne<=ve&&ne<=be;){const Pe=q[ne],$e=H[ne]=ie?Ia(H[ne]):Lr(H[ne]);if(ho(Pe,$e))p(Pe,$e,Z,null,oe,ue,me,se,ie);else break;ne++}for(;ne<=ve&&ne<=be;){const Pe=q[ve],$e=H[be]=ie?Ia(H[be]):Lr(H[be]);if(ho(Pe,$e))p(Pe,$e,Z,null,oe,ue,me,se,ie);else break;ve--,be--}if(ne>ve){if(ne<=be){const Pe=be+1,$e=Pebe)for(;ne<=ve;)U(q[ne],oe,ue,!0),ne++;else{const Pe=ne,$e=ne,De=new Map;for(ne=$e;ne<=be;ne++){const ge=H[ne]=ie?Ia(H[ne]):Lr(H[ne]);ge.key!=null&&De.set(ge.key,ne)}let we,he=0;const Oe=be-$e+1;let Me=!1,Ce=0;const fe=new Array(Oe);for(ne=0;ne=Oe){U(ge,oe,ue,!0);continue}let ke;if(ge.key!=null)ke=De.get(ge.key);else for(we=$e;we<=be;we++)if(fe[we-$e]===0&&ho(ge,H[we])){ke=we;break}ke===void 0?U(ge,oe,ue,!0):(fe[ke-$e]=ne+1,ke>=Ce?Ce=ke:Me=!0,p(ge,H[ke],Z,null,oe,ue,me,se,ie),he++)}const pe=Me?DT(fe):ci;for(we=pe.length-1,ne=Oe-1;ne>=0;ne--){const ge=$e+ne,ke=H[ge],_e=ge+1{const{el:ue,type:me,transition:se,children:ie,shapeFlag:ne}=q;if(ne&6){B(q.component.subTree,H,Z,ae);return}if(ne&128){q.suspense.move(H,Z,ae);return}if(ne&64){me.move(q,H,Z,J);return}if(me===et){r(ue,H,Z);for(let ve=0;vese.enter(ue),oe);else{const{leave:ve,delayLeave:be,afterLeave:Pe}=se,$e=()=>r(ue,H,Z),De=()=>{ve(ue,()=>{$e(),Pe&&Pe()})};be?be(ue,$e,De):De()}else r(ue,H,Z)},U=(q,H,Z,ae=!1,oe=!1)=>{const{type:ue,props:me,ref:se,children:ie,dynamicChildren:ne,shapeFlag:de,patchFlag:ve,dirs:be}=q;if(se!=null&&Qv(se,null,Z,q,!0),de&256){H.ctx.deactivate(q);return}const Pe=de&1&&be,$e=!Pl(q);let De;if($e&&(De=me&&me.onVnodeBeforeUnmount)&&Ar(De,H,q),de&6)W(q.component,Z,ae);else{if(de&128){q.suspense.unmount(Z,ae);return}Pe&&eo(q,null,H,"beforeUnmount"),de&64?q.type.remove(q,H,Z,oe,J,ae):ne&&(ue!==et||ve>0&&ve&64)?X(ne,H,Z,!1,!0):(ue===et&&ve&384||!oe&&de&16)&&X(ie,H,Z),ae&&Y(q)}($e&&(De=me&&me.onVnodeUnmounted)||Pe)&&Rn(()=>{De&&Ar(De,H,q),Pe&&eo(q,null,H,"unmounted")},Z)},Y=q=>{const{type:H,el:Z,anchor:ae,transition:oe}=q;if(H===et){K(Z,ae);return}if(H===Pf){w(q);return}const ue=()=>{a(Z),oe&&!oe.persisted&&oe.afterLeave&&oe.afterLeave()};if(q.shapeFlag&1&&oe&&!oe.persisted){const{leave:me,delayLeave:se}=oe,ie=()=>me(Z,ue);se?se(q.el,ue,ie):ie()}else ue()},K=(q,H)=>{let Z;for(;q!==H;)Z=f(q),a(q),q=Z;a(H)},W=(q,H,Z)=>{const{bum:ae,scope:oe,update:ue,subTree:me,um:se}=q;ae&&bf(ae),oe.stop(),ue&&(ue.active=!1,U(me,q,H,Z)),se&&Rn(se,H),Rn(()=>{q.isUnmounted=!0},H),H&&H.pendingBranch&&!H.isUnmounted&&q.asyncDep&&!q.asyncResolved&&q.suspenseId===H.pendingId&&(H.deps--,H.deps===0&&H.resolve())},X=(q,H,Z,ae=!1,oe=!1,ue=0)=>{for(let me=ue;meq.shapeFlag&6?z(q.component.subTree):q.shapeFlag&128?q.suspense.next():f(q.anchor||q.el),ee=(q,H,Z)=>{q==null?H._vnode&&U(H._vnode,null,null,!0):p(H._vnode||null,q,H,null,null,null,Z),X0(),CS(),H._vnode=q},J={p,um:U,m:B,r:Y,mt:F,mc:T,pc:_,pbc:N,n:z,o:t};let te,re;return e&&([te,re]=e(J)),{render:ee,hydrate:te,createApp:$T(ee,te)}}function to({effect:t,update:e},n){t.allowRecurse=e.allowRecurse=n}function Jp(t,e,n=!1){const r=t.children,a=e.children;if(bt(r)&&bt(a))for(let o=0;o>1,t[n[l]]0&&(e[r]=n[o-1]),n[o]=r)}}for(o=n.length,i=n[o-1];o-- >0;)n[o]=i,i=e[i];return n}const FT=t=>t.__isTeleport,Ol=t=>t&&(t.disabled||t.disabled===""),i1=t=>typeof SVGElement<"u"&&t instanceof SVGElement,Zv=(t,e)=>{const n=t&&t.to;return un(n)?e?e(n):null:n},LT={__isTeleport:!0,process(t,e,n,r,a,o,i,l,u,s){const{mc:d,pc:c,pbc:f,o:{insert:v,querySelector:g,createText:p,createComment:m}}=s,b=Ol(e.props);let{shapeFlag:C,children:x,dynamicChildren:w}=e;if(t==null){const P=e.el=p(""),S=e.anchor=p("");v(P,n,r),v(S,n,r);const k=e.target=Zv(e.props,g),T=e.targetAnchor=p("");k&&(v(T,k),i=i||i1(k));const O=(N,$)=>{C&16&&d(x,N,$,a,o,i,l,u)};b?O(n,S):k&&O(k,T)}else{e.el=t.el;const P=e.anchor=t.anchor,S=e.target=t.target,k=e.targetAnchor=t.targetAnchor,T=Ol(t.props),O=T?n:S,N=T?P:k;if(i=i||i1(S),w?(f(t.dynamicChildren,w,O,a,o,i,l),Jp(t,e,!0)):u||c(t,e,O,N,a,o,i,l,!1),b)T||zu(e,n,P,s,1);else if((e.props&&e.props.to)!==(t.props&&t.props.to)){const $=e.target=Zv(e.props,g);$&&zu(e,$,null,s,0)}else T&&zu(e,S,k,s,1)}BS(e)},remove(t,e,n,r,{um:a,o:{remove:o}},i){const{shapeFlag:l,children:u,anchor:s,targetAnchor:d,target:c,props:f}=t;if(c&&o(d),(i||!Ol(f))&&(o(s),l&16))for(let v=0;v0?yr||ci:null,jT(),Ql>0&&yr&&yr.push(t),t}function VT(t,e,n,r,a,o){return jS(HS(t,e,n,r,a,o,!0))}function VS(t,e,n,r,a){return jS(h(t,e,n,r,a,!0))}function hn(t){return t?t.__v_isVNode===!0:!1}function ho(t,e){return t.type===e.type&&t.key===e.key}const ud="__vInternal",KS=({key:t})=>t??null,Ps=({ref:t,ref_key:e,ref_for:n})=>t!=null?un(t)||vn(t)||St(t)?{i:mn,r:t,k:e,f:!!n}:t:null;function HS(t,e=null,n=null,r=0,a=null,o=t===et?0:1,i=!1,l=!1){const u={__v_isVNode:!0,__v_skip:!0,type:t,props:e,key:e&&KS(e),ref:e&&Ps(e),scopeId:rd,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetAnchor:null,staticCount:0,shapeFlag:o,patchFlag:r,dynamicProps:a,dynamicChildren:null,appContext:null,ctx:mn};return l?(ng(u,n),o&128&&t.normalize(u)):n&&(u.shapeFlag|=un(n)?8:16),Ql>0&&!i&&yr&&(u.patchFlag>0||o&6)&&u.patchFlag!==32&&yr.push(u),u}const h=KT;function KT(t,e=null,n=null,r=0,a=null,o=!1){if((!t||t===bT)&&(t=qn),hn(t)){const l=Cn(t,e,!0);return n&&ng(l,n),Ql>0&&!o&&yr&&(l.shapeFlag&6?yr[yr.indexOf(t)]=l:yr.push(l)),l.patchFlag|=-2,l}if(ZT(t)&&(t=t.__vccOpts),e){e=HT(e);let{class:l,style:u}=e;l&&!un(l)&&(e.class=Np(l)),Gt(u)&&(dS(u)&&!bt(u)&&(u=pn({},u)),e.style=_p(u))}const i=un(t)?1:sT(t)?128:FT(t)?64:Gt(t)?4:St(t)?2:0;return HS(t,e,n,r,a,i,o,!0)}function HT(t){return t?dS(t)||ud in t?pn({},t):t:null}function Cn(t,e,n=!1){const{props:r,ref:a,patchFlag:o,children:i}=t,l=e?zT(r||{},e):r;return{__v_isVNode:!0,__v_skip:!0,type:t.type,props:l,key:l&&KS(l),ref:e&&e.ref?n&&a?bt(a)?a.concat(Ps(e)):[a,Ps(e)]:Ps(e):a,scopeId:t.scopeId,slotScopeIds:t.slotScopeIds,children:i,target:t.target,targetAnchor:t.targetAnchor,staticCount:t.staticCount,shapeFlag:t.shapeFlag,patchFlag:e&&t.type!==et?o===-1?16:o|16:o,dynamicProps:t.dynamicProps,dynamicChildren:t.dynamicChildren,appContext:t.appContext,dirs:t.dirs,transition:t.transition,component:t.component,suspense:t.suspense,ssContent:t.ssContent&&Cn(t.ssContent),ssFallback:t.ssFallback&&Cn(t.ssFallback),el:t.el,anchor:t.anchor,ctx:t.ctx}}function _n(t=" ",e=0){return h(Ua,null,t,e)}function Wre(t="",e=!1){return e?(tg(),VS(qn,null,t)):h(qn,null,t)}function Lr(t){return t==null||typeof t=="boolean"?h(qn):bt(t)?h(et,null,t.slice()):typeof t=="object"?Ia(t):h(Ua,null,String(t))}function Ia(t){return t.el===null&&t.patchFlag!==-1||t.memo?t:Cn(t)}function ng(t,e){let n=0;const{shapeFlag:r}=t;if(e==null)e=null;else if(bt(e))n=16;else if(typeof e=="object")if(r&65){const a=e.default;a&&(a._c&&(a._d=!1),ng(t,a()),a._c&&(a._d=!0));return}else{n=32;const a=e._;!a&&!(ud in e)?e._ctx=mn:a===3&&mn&&(mn.slots._===1?e._=1:(e._=2,t.patchFlag|=1024))}else St(e)?(e={default:e,_ctx:mn},n=32):(e=String(e),r&64?(n=16,e=[_n(e)]):n=8);t.children=e,t.shapeFlag|=n}function zT(...t){const e={};for(let n=0;nfn||mn,Pi=t=>{fn=t,t.scope.on()},Oo=()=>{fn&&fn.scope.off(),fn=null};function zS(t){return t.vnode.shapeFlag&4}let Zl=!1;function GT(t,e=!1){Zl=e;const{props:n,children:r}=t.vnode,a=zS(t);TT(t,n,a,e),IT(t,r);const o=a?qT(t,e):void 0;return Zl=!1,o}function qT(t,e){const n=t.type;t.accessCache=Object.create(null),t.proxy=fS(new Proxy(t.ctx,xT));const{setup:r}=n;if(r){const a=t.setupContext=r.length>1?US(t):null;Pi(t),Bi();const o=ja(r,t,0,[t.props,a]);if(ji(),Oo(),Zw(o)){if(o.then(Oo,Oo),e)return o.then(i=>{u1(t,i,e)}).catch(i=>{td(i,t,0)});t.asyncDep=o}else u1(t,o,e)}else WS(t,e)}function u1(t,e,n){St(e)?t.type.__ssrInlineRender?t.ssrRender=e:t.render=e:Gt(e)&&(t.setupState=gS(e)),WS(t,n)}let s1;function WS(t,e,n){const r=t.type;if(!t.render){if(!e&&s1&&!r.render){const a=r.template||Qp(t).template;if(a){const{isCustomElement:o,compilerOptions:i}=t.appContext.config,{delimiters:l,compilerOptions:u}=r,s=pn(pn({isCustomElement:o,delimiters:l},i),u);r.render=s1(a,s)}}t.render=r.render||br}Pi(t),Bi(),wT(t),ji(),Oo()}function XT(t){return new Proxy(t.attrs,{get(e,n){return Xn(t,"get","$attrs"),e[n]}})}function US(t){const e=r=>{t.exposed=r||{}};let n;return{get attrs(){return n||(n=XT(t))},slots:t.slots,emit:t.emit,expose:e}}function sd(t){if(t.exposed)return t.exposeProxy||(t.exposeProxy=new Proxy(gS(fS(t.exposed)),{get(e,n){if(n in e)return e[n];if(n in kl)return kl[n](t)},has(e,n){return n in e||n in kl}}))}function QT(t,e=!0){return St(t)?t.displayName||t.name:t.name||e&&t.__name}function ZT(t){return St(t)&&"__vccOpts"in t}const L=(t,e)=>Z5(t,e,Zl);function JT(){return e7().attrs}function e7(){const t=cn();return t.setupContext||(t.setupContext=US(t))}function Jl(t,e,n){const r=arguments.length;return r===2?Gt(e)&&!bt(e)?hn(e)?h(t,null,[e]):h(t,e):h(t,null,e):(r>3?n=Array.prototype.slice.call(arguments,2):r===3&&hn(n)&&(n=[n]),h(t,e,n))}const t7=Symbol(""),n7=()=>Ze(t7),r7="3.2.45",a7="http://www.w3.org/2000/svg",po=typeof document<"u"?document:null,c1=po&&po.createElement("template"),o7={insert:(t,e,n)=>{e.insertBefore(t,n||null)},remove:t=>{const e=t.parentNode;e&&e.removeChild(t)},createElement:(t,e,n,r)=>{const a=e?po.createElementNS(a7,t):po.createElement(t,n?{is:n}:void 0);return t==="select"&&r&&r.multiple!=null&&a.setAttribute("multiple",r.multiple),a},createText:t=>po.createTextNode(t),createComment:t=>po.createComment(t),setText:(t,e)=>{t.nodeValue=e},setElementText:(t,e)=>{t.textContent=e},parentNode:t=>t.parentNode,nextSibling:t=>t.nextSibling,querySelector:t=>po.querySelector(t),setScopeId(t,e){t.setAttribute(e,"")},insertStaticContent(t,e,n,r,a,o){const i=n?n.previousSibling:e.lastChild;if(a&&(a===o||a.nextSibling))for(;e.insertBefore(a.cloneNode(!0),n),!(a===o||!(a=a.nextSibling)););else{c1.innerHTML=r?`${t}`:t;const l=c1.content;if(r){const u=l.firstChild;for(;u.firstChild;)l.appendChild(u.firstChild);l.removeChild(u)}e.insertBefore(l,n)}return[i?i.nextSibling:e.firstChild,n?n.previousSibling:e.lastChild]}};function i7(t,e,n){const r=t._vtc;r&&(e=(e?[e,...r]:[...r]).join(" ")),e==null?t.removeAttribute("class"):n?t.setAttribute("class",e):t.className=e}function l7(t,e,n){const r=t.style,a=un(n);if(n&&!a){for(const o in n)Jv(r,o,n[o]);if(e&&!un(e))for(const o in e)n[o]==null&&Jv(r,o,"")}else{const o=r.display;a?e!==n&&(r.cssText=n):e&&t.removeAttribute("style"),"_vod"in t&&(r.display=o)}}const d1=/\s*!important$/;function Jv(t,e,n){if(bt(n))n.forEach(r=>Jv(t,e,r));else if(n==null&&(n=""),e.startsWith("--"))t.setProperty(e,n);else{const r=u7(t,e);d1.test(n)?t.setProperty(Li(r),n.replace(d1,""),"important"):t[r]=n}}const f1=["Webkit","Moz","ms"],kf={};function u7(t,e){const n=kf[e];if(n)return n;let r=Ln(e);if(r!=="filter"&&r in t)return kf[e]=r;r=Jc(r);for(let a=0;aOf||(p7.then(()=>Of=0),Of=Date.now());function m7(t,e){const n=r=>{if(!r._vts)r._vts=Date.now();else if(r._vts<=n.attached)return;lr(y7(r,n.value),e,5,[r])};return n.value=t,n.attached=g7(),n}function y7(t,e){if(bt(e)){const n=t.stopImmediatePropagation;return t.stopImmediatePropagation=()=>{n.call(t),t._stopped=!0},e.map(r=>a=>!a._stopped&&r&&r(a))}else return e}const p1=/^on[a-z]/,b7=(t,e,n,r,a=!1,o,i,l,u)=>{e==="class"?i7(t,r,a):e==="style"?l7(t,n,r):Xc(e)?$p(e)||v7(t,e,n,r,i):(e[0]==="."?(e=e.slice(1),!0):e[0]==="^"?(e=e.slice(1),!1):C7(t,e,r,a))?c7(t,e,r,o,i,l,u):(e==="true-value"?t._trueValue=r:e==="false-value"&&(t._falseValue=r),s7(t,e,r,a))};function C7(t,e,n,r){return r?!!(e==="innerHTML"||e==="textContent"||e in t&&p1.test(e)&&St(n)):e==="spellcheck"||e==="draggable"||e==="translate"||e==="form"||e==="list"&&t.tagName==="INPUT"||e==="type"&&t.tagName==="TEXTAREA"||p1.test(e)&&un(n)?!1:e in t}const Sa="transition",nl="animation",Nn=(t,{slots:e})=>Jl(kS,GS(t),e);Nn.displayName="Transition";const YS={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},x7=Nn.props=pn({},kS.props,YS),no=(t,e=[])=>{bt(t)?t.forEach(n=>n(...e)):t&&t(...e)},g1=t=>t?bt(t)?t.some(e=>e.length>1):t.length>1:!1;function GS(t){const e={};for(const I in t)I in YS||(e[I]=t[I]);if(t.css===!1)return e;const{name:n="v",type:r,duration:a,enterFromClass:o=`${n}-enter-from`,enterActiveClass:i=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:u=o,appearActiveClass:s=i,appearToClass:d=l,leaveFromClass:c=`${n}-leave-from`,leaveActiveClass:f=`${n}-leave-active`,leaveToClass:v=`${n}-leave-to`}=t,g=w7(a),p=g&&g[0],m=g&&g[1],{onBeforeEnter:b,onEnter:C,onEnterCancelled:x,onLeave:w,onLeaveCancelled:P,onBeforeAppear:S=b,onAppear:k=C,onAppearCancelled:T=x}=e,O=(I,E,F)=>{Ta(I,E?d:l),Ta(I,E?s:i),F&&F()},N=(I,E)=>{I._isLeaving=!1,Ta(I,c),Ta(I,v),Ta(I,f),E&&E()},$=I=>(E,F)=>{const j=I?k:C,D=()=>O(E,I,F);no(j,[E,D]),m1(()=>{Ta(E,I?u:o),na(E,I?d:l),g1(j)||y1(E,r,p,D)})};return pn(e,{onBeforeEnter(I){no(b,[I]),na(I,o),na(I,i)},onBeforeAppear(I){no(S,[I]),na(I,u),na(I,s)},onEnter:$(!1),onAppear:$(!0),onLeave(I,E){I._isLeaving=!0;const F=()=>N(I,E);na(I,c),XS(),na(I,f),m1(()=>{I._isLeaving&&(Ta(I,c),na(I,v),g1(w)||y1(I,r,m,F))}),no(w,[I,F])},onEnterCancelled(I){O(I,!1),no(x,[I])},onAppearCancelled(I){O(I,!0),no(T,[I])},onLeaveCancelled(I){N(I),no(P,[I])}})}function w7(t){if(t==null)return null;if(Gt(t))return[Tf(t.enter),Tf(t.leave)];{const e=Tf(t);return[e,e]}}function Tf(t){return Fp(t)}function na(t,e){e.split(/\s+/).forEach(n=>n&&t.classList.add(n)),(t._vtc||(t._vtc=new Set)).add(e)}function Ta(t,e){e.split(/\s+/).forEach(r=>r&&t.classList.remove(r));const{_vtc:n}=t;n&&(n.delete(e),n.size||(t._vtc=void 0))}function m1(t){requestAnimationFrame(()=>{requestAnimationFrame(t)})}let S7=0;function y1(t,e,n,r){const a=t._endId=++S7,o=()=>{a===t._endId&&r()};if(n)return setTimeout(o,n);const{type:i,timeout:l,propCount:u}=qS(t,e);if(!i)return r();const s=i+"end";let d=0;const c=()=>{t.removeEventListener(s,f),o()},f=v=>{v.target===t&&++d>=u&&c()};setTimeout(()=>{d(n[g]||"").split(", "),a=r(`${Sa}Delay`),o=r(`${Sa}Duration`),i=b1(a,o),l=r(`${nl}Delay`),u=r(`${nl}Duration`),s=b1(l,u);let d=null,c=0,f=0;e===Sa?i>0&&(d=Sa,c=i,f=o.length):e===nl?s>0&&(d=nl,c=s,f=u.length):(c=Math.max(i,s),d=c>0?i>s?Sa:nl:null,f=d?d===Sa?o.length:u.length:0);const v=d===Sa&&/\b(transform|all)(,|$)/.test(r(`${Sa}Property`).toString());return{type:d,timeout:c,propCount:f,hasTransform:v}}function b1(t,e){for(;t.lengthC1(n)+C1(t[r])))}function C1(t){return Number(t.slice(0,-1).replace(",","."))*1e3}function XS(){return document.body.offsetHeight}const QS=new WeakMap,ZS=new WeakMap,P7={name:"TransitionGroup",props:pn({},x7,{tag:String,moveClass:String}),setup(t,{slots:e}){const n=cn(),r=PS();let a,o;return wn(()=>{if(!a.length)return;const i=t.moveClass||`${t.name||"v"}-move`;if(!E7(a[0].el,n.vnode.el,i))return;a.forEach(k7),a.forEach(O7);const l=a.filter(T7);XS(),l.forEach(u=>{const s=u.el,d=s.style;na(s,i),d.transform=d.webkitTransform=d.transitionDuration="";const c=s._moveCb=f=>{f&&f.target!==s||(!f||/transform$/.test(f.propertyName))&&(s.removeEventListener("transitionend",c),s._moveCb=null,Ta(s,i))};s.addEventListener("transitionend",c)})}),()=>{const i=rt(t),l=GS(i);let u=i.tag||et;a=o,o=e.default?Gp(e.default()):[];for(let s=0;s{i.split(/\s+/).forEach(l=>l&&r.classList.remove(l))}),n.split(/\s+/).forEach(i=>i&&r.classList.add(i)),r.style.display="none";const a=e.nodeType===1?e:e.parentNode;a.appendChild(r);const{hasTransform:o}=qS(r);return a.removeChild(r),o}const M7=["ctrl","shift","alt","meta"],I7={stop:t=>t.stopPropagation(),prevent:t=>t.preventDefault(),self:t=>t.target!==t.currentTarget,ctrl:t=>!t.ctrlKey,shift:t=>!t.shiftKey,alt:t=>!t.altKey,meta:t=>!t.metaKey,left:t=>"button"in t&&t.button!==0,middle:t=>"button"in t&&t.button!==1,right:t=>"button"in t&&t.button!==2,exact:(t,e)=>M7.some(n=>t[`${n}Key`]&&!e.includes(n))},x1=(t,e)=>(n,...r)=>{for(let a=0;a{rl(t,!1)}):rl(t,e))},beforeUnmount(t,{value:e}){rl(t,e)}};function rl(t,e){t.style.display=e?t._vod:"none"}const _7=pn({patchProp:b7},o7);let w1;function JS(){return w1||(w1=AT(_7))}const sc=(...t)=>{JS().render(...t)},e4=(...t)=>{const e=JS().createApp(...t),{mount:n}=e;return e.mount=r=>{const a=N7(r);if(!a)return;const o=e._component;!St(o)&&!o.render&&!o.template&&(o.template=a.innerHTML),a.innerHTML="";const i=n(a,!1,a instanceof SVGElement);return a instanceof Element&&(a.removeAttribute("v-cloak"),a.setAttribute("data-v-app","")),i},e};function N7(t){return un(t)?document.querySelector(t):t}function Fe(t){"@babel/helpers - typeof";return Fe=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Fe(t)}function $7(t,e){if(Fe(t)!=="object"||t===null)return t;var n=t[Symbol.toPrimitive];if(n!==void 0){var r=n.call(t,e||"default");if(Fe(r)!=="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(t)}function t4(t){var e=$7(t,"string");return Fe(e)==="symbol"?e:String(e)}function A(t,e,n){return e=t4(e),e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function S1(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),n.push.apply(n,r)}return n}function y(t){for(var e=1;e1&&arguments[1]!==void 0?arguments[1]:{},n=arguments.length>2?arguments[2]:void 0;return typeof t=="function"?t(e):t??n}function ce(){for(var t=[],e=0;e0},t.prototype.connect_=function(){!eh||this.connected_||(document.addEventListener("transitionend",this.onTransitionEnd_),window.addEventListener("resize",this.refresh),Q7?(this.mutationsObserver_=new MutationObserver(this.refresh),this.mutationsObserver_.observe(document,{attributes:!0,childList:!0,characterData:!0,subtree:!0})):(document.addEventListener("DOMSubtreeModified",this.refresh),this.mutationEventsAdded_=!0),this.connected_=!0)},t.prototype.disconnect_=function(){!eh||!this.connected_||(document.removeEventListener("transitionend",this.onTransitionEnd_),window.removeEventListener("resize",this.refresh),this.mutationsObserver_&&this.mutationsObserver_.disconnect(),this.mutationEventsAdded_&&document.removeEventListener("DOMSubtreeModified",this.refresh),this.mutationsObserver_=null,this.mutationEventsAdded_=!1,this.connected_=!1)},t.prototype.onTransitionEnd_=function(e){var n=e.propertyName,r=n===void 0?"":n,a=X7.some(function(o){return!!~r.indexOf(o)});a&&this.refresh()},t.getInstance=function(){return this.instance_||(this.instance_=new t),this.instance_},t.instance_=null,t}(),a4=function(t,e){for(var n=0,r=Object.keys(e);n"u"||!(Element instanceof Object))){if(!(e instanceof ki(e).Element))throw new TypeError('parameter 1 is not of type "Element".');var n=this.observations_;n.has(e)||(n.set(e,new iE(e)),this.controller_.addObserver(this),this.controller_.refresh())}},t.prototype.unobserve=function(e){if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");if(!(typeof Element>"u"||!(Element instanceof Object))){if(!(e instanceof ki(e).Element))throw new TypeError('parameter 1 is not of type "Element".');var n=this.observations_;n.has(e)&&(n.delete(e),n.size||this.controller_.removeObserver(this))}},t.prototype.disconnect=function(){this.clearActive(),this.observations_.clear(),this.controller_.removeObserver(this)},t.prototype.gatherActive=function(){var e=this;this.clearActive(),this.observations_.forEach(function(n){n.isActive()&&e.activeObservations_.push(n)})},t.prototype.broadcastActive=function(){if(this.hasActive()){var e=this.callbackCtx_,n=this.activeObservations_.map(function(r){return new lE(r.target,r.broadcastRect())});this.callback_.call(e,n,e),this.clearActive()}},t.prototype.clearActive=function(){this.activeObservations_.splice(0)},t.prototype.hasActive=function(){return this.activeObservations_.length>0},t}(),i4=typeof WeakMap<"u"?new WeakMap:new r4,l4=function(){function t(e){if(!(this instanceof t))throw new TypeError("Cannot call a class as a function.");if(!arguments.length)throw new TypeError("1 argument required, but only 0 present.");var n=Z7.getInstance(),r=new uE(e,n,this);i4.set(this,r)}return t}();["observe","unobserve","disconnect"].forEach(function(t){l4.prototype[t]=function(){var e;return(e=i4.get(this))[t].apply(e,arguments)}});var sE=function(){return typeof cc.ResizeObserver<"u"?cc.ResizeObserver:l4}();const og=sE;function u4(t){if(Array.isArray(t))return t}function cE(t,e){var n=t==null?null:typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(n!=null){var r,a,o,i,l=[],u=!0,s=!1;try{if(o=(n=n.call(t)).next,e===0){if(Object(n)!==n)return;u=!1}else for(;!(u=(r=o.call(n)).done)&&(l.push(r.value),l.length!==e);u=!0);}catch(d){s=!0,a=d}finally{try{if(!u&&n.return!=null&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw a}}return l}}function th(t,e){(e==null||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n0&&arguments[0]!==void 0?arguments[0]:"",n=arguments.length>1?arguments[1]:void 0,r={},a=/;(?![^(]*\))/g,o=/:(.+)/;return Fe(e)==="object"?e:(e.split(a).forEach(function(i){if(i){var l=i.split(o);if(l.length>1){var u=n?ag(l[0].trim()):l[0].trim();r[u]=l[1].trim()}}}),r)},la=function(e,n){return e[n]!==void 0},Et=function t(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,r=Array.isArray(e)?e:[e],a=[];return r.forEach(function(o){Array.isArray(o)?a.push.apply(a,Ie(t(o,n))):o&&o.type===et?a.push.apply(a,Ie(t(o.children,n))):o&&hn(o)?n&&!bu(o)?a.push(o):n||a.push(o):nh(o)&&a.push(o)}),a},yu=function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"default",r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};if(hn(e))return e.type===et?n==="default"?Et(e.children):[]:e.children&&e.children[n]?Et(e.children[n](r)):[];var a=e.$slots[n]&&e.$slots[n](r);return Et(a)},Ra=function(e){for(var n,r=(e==null||(n=e.vnode)===null||n===void 0?void 0:n.el)||e&&(e.$el||e);r&&!r.tagName;)r=r.nextSibling;return r},p4=function(e){var n={};if(e.$&&e.$.vnode){var r=e.$.vnode.props||{};Object.keys(e.$props).forEach(function(l){var u=e.$props[l],s=K7(l);(u!==void 0||s in r)&&(n[l]=u)})}else if(hn(e)&&Fe(e.type)==="object"){var a=e.props||{},o={};Object.keys(a).forEach(function(l){o[ag(l)]=a[l]});var i=e.type.props||{};Object.keys(i).forEach(function(l){var u=z7(i,o,l,o[l]);(u!==void 0||l in o)&&(n[l]=u)})}return n},cg=function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"default",r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:e,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!0,o=void 0;if(e.$){var i=e[n];if(i!==void 0)return typeof i=="function"&&a?i(r):i;o=e.$slots[n],o=a&&o?o(r):o}else if(hn(e)){var l=e.props&&e.props[n];if(l!==void 0&&e.props!==null)return typeof l=="function"&&a?l(r):l;e.type===et?o=e.children:e.children&&e.children[n]&&(o=e.children[n],o=a&&o?o(r):o)}return Array.isArray(o)&&(o=Et(o),o=o.length===1?o[0]:o,o=o.length===0?void 0:o),o};function T1(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!0,n={};return t.$?n=y(y({},n),t.$attrs):n=y(y({},n),t.props),ug(n)[e?"onEvents":"events"]}function $E(t){var e=(hn(t)?t.props:t.$attrs)||{},n=e.class||{},r={};return typeof n=="string"?n.split(" ").forEach(function(a){r[a.trim()]=!0}):Array.isArray(n)?ce(n).split(" ").forEach(function(a){r[a.trim()]=!0}):r=y(y({},r),n),r}function g4(t,e){var n=(hn(t)?t.props:t.$attrs)||{},r=n.style||{};if(typeof r=="string")r=sg(r,e);else if(e&&r){var a={};return Object.keys(r).forEach(function(o){return a[ag(o)]=r[o]}),a}return r}function AE(t){return t==null||t===""||Array.isArray(t)&&t.length===0}function bu(t){return t&&(t.type===qn||t.type===et&&t.children.length===0||t.type===Ua&&t.children.trim()==="")}function RE(t){return t&&t.type===Ua}function qt(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],e=[];return t.forEach(function(n){Array.isArray(n)?e.push.apply(e,Ie(n)):(n==null?void 0:n.type)===et?e.push.apply(e,Ie(qt(n.children))):e.push(n)}),e.filter(function(n){return!bu(n)})}function ol(t){if(t){var e=qt(t);return e.length?e:void 0}else return t}function Jt(t){return Array.isArray(t)&&t.length===1&&(t=t[0]),t&&t.__v_isVNode&&Fe(t.type)!=="symbol"}function $t(t,e){var n,r,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"default";return(n=e[a])!==null&&n!==void 0?n:(r=t[a])===null||r===void 0?void 0:r.call(t)}const dr=le({compatConfig:{MODE:3},name:"ResizeObserver",props:{disabled:Boolean,onResize:Function},emits:["resize"],setup:function(e,n){var r=n.slots,a=xt({width:0,height:0,offsetHeight:0,offsetWidth:0}),o=null,i=null,l=function(){i&&(i.disconnect(),i=null)},u=function(f){var v=e.onResize,g=f[0].target,p=g.getBoundingClientRect(),m=p.width,b=p.height,C=g.offsetWidth,x=g.offsetHeight,w=Math.floor(m),P=Math.floor(b);if(a.width!==w||a.height!==P||a.offsetWidth!==C||a.offsetHeight!==x){var S={width:w,height:P,offsetWidth:C,offsetHeight:x};pt(a,S),v&&Promise.resolve().then(function(){v(y(y({},S),{},{offsetWidth:C,offsetHeight:x}),g)})}},s=cn(),d=function(){var f=e.disabled;if(f){l();return}var v=Ra(s),g=v!==o;g&&(l(),o=v),!i&&v&&(i=new og(u),i.observe(v))};return Ge(function(){d()}),wn(function(){d()}),Sn(function(){l()}),Se(function(){return e.disabled},function(){d()},{flush:"post"}),function(){var c;return(c=r.default)===null||c===void 0?void 0:c.call(r)[0]}}});var m4=function(e){return setTimeout(e,16)},y4=function(e){return clearTimeout(e)};typeof window<"u"&&"requestAnimationFrame"in window&&(m4=function(e){return window.requestAnimationFrame(e)},y4=function(e){return window.cancelAnimationFrame(e)});var E1=0,dg=new Map;function b4(t){dg.delete(t)}function qe(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1;E1+=1;var n=E1;function r(a){if(a===0)b4(n),t();else{var o=m4(function(){r(a-1)});dg.set(n,o)}}return r(e),n}qe.cancel=function(t){var e=dg.get(t);return b4(e),y4(e)};function rh(t){var e,n=function(o){return function(){e=null,t.apply(void 0,Ie(o))}},r=function(){if(e==null){for(var o=arguments.length,i=new Array(o),l=0;lt.top-n)return"".concat(n+e.top,"px")}function _1(t,e,n){if(n!==void 0&&e.bottom=0)&&(n[a]=t[a]);return n}function He(t,e){if(t==null)return{};var n=FE(t,e),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(a=0;a=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}const w4={items_per_page:"/ page",jump_to:"Go to",jump_to_confirm:"confirm",page:"",prev_page:"Previous Page",next_page:"Next Page",prev_5:"Previous 5 Pages",next_5:"Next 5 Pages",prev_3:"Previous 3 Pages",next_3:"Next 3 Pages"};var LE={locale:"en_US",today:"Today",now:"Now",backToToday:"Back to today",ok:"Ok",clear:"Clear",month:"Month",year:"Year",timeSelect:"select time",dateSelect:"select date",weekSelect:"Choose a week",monthSelect:"Choose a month",yearSelect:"Choose a year",decadeSelect:"Choose a decade",yearFormat:"YYYY",dateFormat:"M/D/YYYY",dayFormat:"D",dateTimeFormat:"M/D/YYYY HH:mm:ss",monthBeforeYear:!0,previousMonth:"Previous month (PageUp)",nextMonth:"Next month (PageDown)",previousYear:"Last year (Control + left)",nextYear:"Next year (Control + right)",previousDecade:"Last decade",nextDecade:"Next decade",previousCentury:"Last century",nextCentury:"Next century"};const BE=LE;var jE={placeholder:"Select time",rangePlaceholder:["Start time","End time"]};const S4=jE;var VE={lang:y({placeholder:"Select date",yearPlaceholder:"Select year",quarterPlaceholder:"Select quarter",monthPlaceholder:"Select month",weekPlaceholder:"Select week",rangePlaceholder:["Start date","End date"],rangeYearPlaceholder:["Start year","End year"],rangeQuarterPlaceholder:["Start quarter","End quarter"],rangeMonthPlaceholder:["Start month","End month"],rangeWeekPlaceholder:["Start week","End week"]},BE),timePickerLocale:y({},S4)};const eu=VE;var Kn="${label} is not a valid ${type}",KE={locale:"en",Pagination:w4,DatePicker:eu,TimePicker:S4,Calendar:eu,global:{placeholder:"Please select"},Table:{filterTitle:"Filter menu",filterConfirm:"OK",filterReset:"Reset",filterEmptyText:"No filters",filterCheckall:"Select all items",filterSearchPlaceholder:"Search in filters",emptyText:"No data",selectAll:"Select current page",selectInvert:"Invert current page",selectNone:"Clear all data",selectionAll:"Select all data",sortTitle:"Sort",expand:"Expand row",collapse:"Collapse row",triggerDesc:"Click to sort descending",triggerAsc:"Click to sort ascending",cancelSort:"Click to cancel sorting"},Modal:{okText:"OK",cancelText:"Cancel",justOkText:"OK"},Popconfirm:{okText:"OK",cancelText:"Cancel"},Transfer:{titles:["",""],searchPlaceholder:"Search here",itemUnit:"item",itemsUnit:"items",remove:"Remove",selectCurrent:"Select current page",removeCurrent:"Remove current page",selectAll:"Select all data",removeAll:"Remove all data",selectInvert:"Invert current page"},Upload:{uploading:"Uploading...",removeFile:"Remove file",uploadError:"Upload error",previewFile:"Preview file",downloadFile:"Download file"},Empty:{description:"No Data"},Icon:{icon:"icon"},Text:{edit:"Edit",copy:"Copy",copied:"Copied",expand:"Expand"},PageHeader:{back:"Back"},Form:{optional:"(optional)",defaultValidateMessages:{default:"Field validation error for ${label}",required:"Please enter ${label}",enum:"${label} must be one of [${enum}]",whitespace:"${label} cannot be a blank character",date:{format:"${label} date format is invalid",parse:"${label} cannot be converted to a date",invalid:"${label} is an invalid date"},types:{string:Kn,method:Kn,array:Kn,object:Kn,number:Kn,date:Kn,boolean:Kn,integer:Kn,float:Kn,regexp:Kn,email:Kn,url:Kn,hex:Kn},string:{len:"${label} must be ${len} characters",min:"${label} must be at least ${min} characters",max:"${label} must be up to ${max} characters",range:"${label} must be between ${min}-${max} characters"},number:{len:"${label} must be equal to ${len}",min:"${label} must be minimum ${min}",max:"${label} must be maximum ${max}",range:"${label} must be between ${min}-${max}"},array:{len:"Must be ${len} ${label}",min:"At least ${min} ${label}",max:"At most ${max} ${label}",range:"The amount of ${label} must be between ${min}-${max}"},pattern:{mismatch:"${label} does not match the pattern ${pattern}"}}},Image:{preview:"Preview"}};const wr=KE,Vi=le({compatConfig:{MODE:3},name:"LocaleReceiver",props:{componentName:String,defaultLocale:{type:[Object,Function]},children:{type:Function}},setup:function(e,n){var r=n.slots,a=Ze("localeData",{}),o=L(function(){var l=e.componentName,u=l===void 0?"global":l,s=e.defaultLocale,d=s||wr[u||"global"],c=a.antLocale,f=u&&c?c[u]:{};return y(y({},typeof d=="function"?d():d),f||{})}),i=L(function(){var l=a.antLocale,u=l&&l.locale;return l&&l.exist&&!u?wr.locale:u});return function(){var l=e.children||r.default,u=a.antLocale;return l==null?void 0:l(o.value,i.value,u)}}});function zr(t,e,n){var r=Ze("localeData",{}),a=L(function(){var o=r.antLocale,i=tn(e)||wr[t||"global"],l=t&&o?o[t]:{};return y(y(y({},typeof i=="function"?i():i),l||{}),tn(n)||{})});return[a]}var P4=function(){var e=Re("empty",{}),n=e.getPrefixCls,r=n("empty-img-default");return h("svg",{class:r,width:"184",height:"152",viewBox:"0 0 184 152"},[h("g",{fill:"none","fill-rule":"evenodd"},[h("g",{transform:"translate(24 31.67)"},[h("ellipse",{class:"".concat(r,"-ellipse"),cx:"67.797",cy:"106.89",rx:"67.797",ry:"12.668"},null),h("path",{class:"".concat(r,"-path-1"),d:"M122.034 69.674L98.109 40.229c-1.148-1.386-2.826-2.225-4.593-2.225h-51.44c-1.766 0-3.444.839-4.592 2.225L13.56 69.674v15.383h108.475V69.674z"},null),h("path",{class:"".concat(r,"-path-2"),d:"M101.537 86.214L80.63 61.102c-1.001-1.207-2.507-1.867-4.048-1.867H31.724c-1.54 0-3.047.66-4.048 1.867L6.769 86.214v13.792h94.768V86.214z",transform:"translate(13.56)"},null),h("path",{class:"".concat(r,"-path-3"),d:"M33.83 0h67.933a4 4 0 0 1 4 4v93.344a4 4 0 0 1-4 4H33.83a4 4 0 0 1-4-4V4a4 4 0 0 1 4-4z"},null),h("path",{class:"".concat(r,"-path-4"),d:"M42.678 9.953h50.237a2 2 0 0 1 2 2V36.91a2 2 0 0 1-2 2H42.678a2 2 0 0 1-2-2V11.953a2 2 0 0 1 2-2zM42.94 49.767h49.713a2.262 2.262 0 1 1 0 4.524H42.94a2.262 2.262 0 0 1 0-4.524zM42.94 61.53h49.713a2.262 2.262 0 1 1 0 4.525H42.94a2.262 2.262 0 0 1 0-4.525zM121.813 105.032c-.775 3.071-3.497 5.36-6.735 5.36H20.515c-3.238 0-5.96-2.29-6.734-5.36a7.309 7.309 0 0 1-.222-1.79V69.675h26.318c2.907 0 5.25 2.448 5.25 5.42v.04c0 2.971 2.37 5.37 5.277 5.37h34.785c2.907 0 5.277-2.421 5.277-5.393V75.1c0-2.972 2.343-5.426 5.25-5.426h26.318v33.569c0 .617-.077 1.216-.221 1.789z"},null)]),h("path",{class:"".concat(r,"-path-5"),d:"M149.121 33.292l-6.83 2.65a1 1 0 0 1-1.317-1.23l1.937-6.207c-2.589-2.944-4.109-6.534-4.109-10.408C138.802 8.102 148.92 0 161.402 0 173.881 0 184 8.102 184 18.097c0 9.995-10.118 18.097-22.599 18.097-4.528 0-8.744-1.066-12.28-2.902z"},null),h("g",{class:"".concat(r,"-g"),transform:"translate(149.65 15.383)"},[h("ellipse",{cx:"20.654",cy:"3.167",rx:"2.849",ry:"2.815"},null),h("path",{d:"M5.698 5.63H0L2.898.704zM9.259.704h4.985V5.63H9.259z"},null)])])])};P4.PRESENTED_IMAGE_DEFAULT=!0;const HE=P4;var k4=function(){var e=Re("empty",{}),n=e.getPrefixCls,r=n("empty-img-simple");return h("svg",{class:r,width:"64",height:"41",viewBox:"0 0 64 41"},[h("g",{transform:"translate(0 1)",fill:"none","fill-rule":"evenodd"},[h("ellipse",{class:"".concat(r,"-ellipse"),fill:"#F5F5F5",cx:"32",cy:"33",rx:"32",ry:"7"},null),h("g",{class:"".concat(r,"-g"),"fill-rule":"nonzero",stroke:"#D9D9D9"},[h("path",{d:"M55 12.76L44.854 1.258C44.367.474 43.656 0 42.907 0H21.093c-.749 0-1.46.474-1.947 1.257L9 12.761V22h46v-9.24z"},null),h("path",{d:"M41.613 15.931c0-1.605.994-2.93 2.227-2.931H55v18.137C55 33.26 53.68 35 52.05 35h-40.1C10.32 35 9 33.259 9 31.137V13h11.16c1.233 0 2.227 1.323 2.227 2.928v.022c0 1.605 1.005 2.901 2.237 2.901h14.752c1.232 0 2.237-1.308 2.237-2.913v-.007z",fill:"#FAFAFA",class:"".concat(r,"-path")},null)])])])};k4.PRESENTED_IMAGE_SIMPLE=!0;const zE=k4;function A1(t,e){for(var n=0;n=0||(a[n]=t[n]);return a}function R1(t){return((e=t)!=null&&typeof e=="object"&&Array.isArray(e)===!1)==1&&Object.prototype.toString.call(t)==="[object Object]";var e}var M4=Object.prototype,I4=M4.toString,WE=M4.hasOwnProperty,_4=/^\s*function (\w+)/;function D1(t){var e,n=(e=t==null?void 0:t.type)!==null&&e!==void 0?e:t;if(n){var r=n.toString().match(_4);return r?r[1]:""}return""}var No=function(t){var e,n;return R1(t)!==!1&&typeof(e=t.constructor)=="function"&&R1(n=e.prototype)!==!1&&n.hasOwnProperty("isPrototypeOf")!==!1},UE=function(t){return t},Mn=UE,tu=function(t,e){return WE.call(t,e)},YE=Number.isInteger||function(t){return typeof t=="number"&&isFinite(t)&&Math.floor(t)===t},Oi=Array.isArray||function(t){return I4.call(t)==="[object Array]"},Ti=function(t){return I4.call(t)==="[object Function]"},fc=function(t){return No(t)&&tu(t,"_vueTypes_name")},N4=function(t){return No(t)&&(tu(t,"type")||["_vueTypes_name","validator","default","required"].some(function(e){return tu(t,e)}))};function fg(t,e){return Object.defineProperty(t.bind(e),"__original",{value:t})}function Fo(t,e,n){var r;n===void 0&&(n=!1);var a=!0,o="";r=No(t)?t:{type:t};var i=fc(r)?r._vueTypes_name+" - ":"";if(N4(r)&&r.type!==null){if(r.type===void 0||r.type===!0||!r.required&&e===void 0)return a;Oi(r.type)?(a=r.type.some(function(c){return Fo(c,e,!0)===!0}),o=r.type.map(function(c){return D1(c)}).join(" or ")):a=(o=D1(r))==="Array"?Oi(e):o==="Object"?No(e):o==="String"||o==="Number"||o==="Boolean"||o==="Function"?function(c){if(c==null)return"";var f=c.constructor.toString().match(_4);return f?f[1]:""}(e)===o:e instanceof r.type}if(!a){var l=i+'value "'+e+'" should be of type "'+o+'"';return n===!1?(Mn(l),!1):l}if(tu(r,"validator")&&Ti(r.validator)){var u=Mn,s=[];if(Mn=function(c){s.push(c)},a=r.validator(e),Mn=u,!a){var d=(s.length>1?"* ":"")+s.join(` +* `);return s.length=0,n===!1?(Mn(d),a):d}}return a}function Qn(t,e){var n=Object.defineProperties(e,{_vueTypes_name:{value:t,writable:!0},isRequired:{get:function(){return this.required=!0,this}},def:{value:function(a){return a!==void 0||this.default?Ti(a)||Fo(this,a,!0)===!0?(this.default=Oi(a)?function(){return[].concat(a)}:No(a)?function(){return Object.assign({},a)}:a,this):(Mn(this._vueTypes_name+' - invalid default value: "'+a+'"'),this):this}}}),r=n.validator;return Ti(r)&&(n.validator=fg(r,n)),n}function Hr(t,e){var n=Qn(t,e);return Object.defineProperty(n,"validate",{value:function(r){return Ti(this.validator)&&Mn(this._vueTypes_name+` - calling .validate() will overwrite the current custom validator function. Validator info: +`+JSON.stringify(this)),this.validator=fg(r,this),this}})}function F1(t,e,n){var r,a,o=(r=e,a={},Object.getOwnPropertyNames(r).forEach(function(c){a[c]=Object.getOwnPropertyDescriptor(r,c)}),Object.defineProperties({},a));if(o._vueTypes_name=t,!No(n))return o;var i,l,u=n.validator,s=E4(n,["validator"]);if(Ti(u)){var d=o.validator;d&&(d=(l=(i=d).__original)!==null&&l!==void 0?l:i),o.validator=fg(d?function(c){return d.call(this,c)&&u.call(this,c)}:u,o)}return Object.assign(o,s)}function fd(t){return t.replace(/^(?!\s*$)/gm," ")}var GE=function(){return Hr("any",{})},qE=function(){return Hr("function",{type:Function})},XE=function(){return Hr("boolean",{type:Boolean})},QE=function(){return Hr("string",{type:String})},ZE=function(){return Hr("number",{type:Number})},JE=function(){return Hr("array",{type:Array})},eM=function(){return Hr("object",{type:Object})},tM=function(){return Qn("integer",{type:Number,validator:function(t){return YE(t)}})},nM=function(){return Qn("symbol",{validator:function(t){return typeof t=="symbol"}})};function rM(t,e){if(e===void 0&&(e="custom validation failed"),typeof t!="function")throw new TypeError("[VueTypes error]: You must provide a function as argument");return Qn(t.name||"<>",{validator:function(n){var r=t(n);return r||Mn(this._vueTypes_name+" - "+e),r}})}function aM(t){if(!Oi(t))throw new TypeError("[VueTypes error]: You must provide an array as argument.");var e='oneOf - value should be one of "'+t.join('", "')+'".',n=t.reduce(function(r,a){if(a!=null){var o=a.constructor;r.indexOf(o)===-1&&r.push(o)}return r},[]);return Qn("oneOf",{type:n.length>0?n:void 0,validator:function(r){var a=t.indexOf(r)!==-1;return a||Mn(e),a}})}function oM(t){if(!Oi(t))throw new TypeError("[VueTypes error]: You must provide an array as argument");for(var e=!1,n=[],r=0;r0&&n.some(function(u){return i.indexOf(u)===-1})){var l=n.filter(function(u){return i.indexOf(u)===-1});return Mn(l.length===1?'shape - required property "'+l[0]+'" is not defined.':'shape - required properties "'+l.join('", "')+'" are not defined.'),!1}return i.every(function(u){if(e.indexOf(u)===-1)return o._vueTypes_isLoose===!0||(Mn('shape - shape definition does not include a "'+u+'" property. Allowed keys: "'+e.join('", "')+'".'),!1);var s=Fo(t[u],a[u],!0);return typeof s=="string"&&Mn('shape - "'+u+`" property validation error: + `+fd(s)),s===!0})}});return Object.defineProperty(r,"_vueTypes_isLoose",{writable:!0,value:!1}),Object.defineProperty(r,"loose",{get:function(){return this._vueTypes_isLoose=!0,this}}),r}var Rr=function(){function t(){}return t.extend=function(e){var n=this;if(Oi(e))return e.forEach(function(c){return n.extend(c)}),this;var r=e.name,a=e.validate,o=a!==void 0&&a,i=e.getter,l=i!==void 0&&i,u=E4(e,["name","validate","getter"]);if(tu(this,r))throw new TypeError('[VueTypes error]: Type "'+r+'" already defined');var s,d=u.type;return fc(d)?(delete u.type,Object.defineProperty(this,r,l?{get:function(){return F1(r,d,u)}}:{value:function(){var c,f=F1(r,d,u);return f.validator&&(f.validator=(c=f.validator).bind.apply(c,[f].concat([].slice.call(arguments)))),f}})):(s=l?{get:function(){var c=Object.assign({},u);return o?Hr(r,c):Qn(r,c)},enumerable:!0}:{value:function(){var c,f,v=Object.assign({},u);return c=o?Hr(r,v):Qn(r,v),v.validator&&(c.validator=(f=v.validator).bind.apply(f,[c].concat([].slice.call(arguments)))),c},enumerable:!0},Object.defineProperty(this,r,s))},O4(t,null,[{key:"any",get:function(){return GE()}},{key:"func",get:function(){return qE().def(this.defaults.func)}},{key:"bool",get:function(){return XE().def(this.defaults.bool)}},{key:"string",get:function(){return QE().def(this.defaults.string)}},{key:"number",get:function(){return ZE().def(this.defaults.number)}},{key:"array",get:function(){return JE().def(this.defaults.array)}},{key:"object",get:function(){return eM().def(this.defaults.object)}},{key:"integer",get:function(){return tM().def(this.defaults.integer)}},{key:"symbol",get:function(){return nM()}}]),t}();function $4(t){var e;return t===void 0&&(t={func:function(){},bool:!0,string:"",number:0,array:function(){return[]},object:function(){return{}},integer:0}),(e=function(n){function r(){return n.apply(this,arguments)||this}return T4(r,n),O4(r,null,[{key:"sensibleDefaults",get:function(){return ks({},this.defaults)},set:function(a){this.defaults=a!==!1?ks({},a!==!0?a:t):{}}}]),r}(Rr)).defaults=ks({},t),e}Rr.defaults={},Rr.custom=rM,Rr.oneOf=aM,Rr.instanceOf=lM,Rr.oneOfType=oM,Rr.arrayOf=iM,Rr.objectOf=uM,Rr.shape=sM,Rr.utils={validate:function(t,e){return Fo(e,t,!0)===!0},toType:function(t,e,n){return n===void 0&&(n=!1),n?Hr(t,e):Qn(t,e)}};(function(t){function e(){return t.apply(this,arguments)||this}return T4(e,t),e})($4());var A4=$4({func:void 0,bool:void 0,string:void 0,number:void 0,array:void 0,object:void 0,integer:void 0});A4.extend([{name:"looseBool",getter:!0,type:Boolean,default:void 0},{name:"style",getter:!0,type:[String,Object],default:void 0},{name:"VueNode",getter:!0,type:null}]);function R4(t){return t.default=void 0,t}const G=A4;var cM=["image","description","imageStyle","class"],D4=h(HE,null,null),F4=h(zE,null,null),Ki=function(e,n){var r,a=n.slots,o=a===void 0?{}:a,i=n.attrs,l=Re("empty",e),u=l.direction,s=l.prefixCls,d=s.value,c=y(y({},e),i),f=c.image,v=f===void 0?D4:f,g=c.description,p=g===void 0?((r=o.description)===null||r===void 0?void 0:r.call(o))||void 0:g,m=c.imageStyle,b=c.class,C=b===void 0?"":b,x=He(c,cM);return h(Vi,{componentName:"Empty",children:function(P){var S,k=typeof p<"u"?p:P.description,T=typeof k=="string"?k:"empty",O=null;return typeof v=="string"?O=h("img",{alt:T,src:v},null):O=v,h("div",y({class:ce(d,C,(S={},A(S,"".concat(d,"-normal"),v===F4),A(S,"".concat(d,"-rtl"),u.value==="rtl"),S))},x),[h("div",{class:"".concat(d,"-image"),style:m},[O]),k&&h("p",{class:"".concat(d,"-description")},[k]),o.default&&h("div",{class:"".concat(d,"-footer")},[qt(o.default())])])}},null)};Ki.displayName="AEmpty";Ki.PRESENTED_IMAGE_DEFAULT=D4;Ki.PRESENTED_IMAGE_SIMPLE=F4;Ki.inheritAttrs=!1;Ki.props={prefixCls:String,image:G.any,description:G.any,imageStyle:{type:Object,default:void 0}};const $a=Wt(Ki);var dM=function(e){var n=Re("empty",e),r=n.prefixCls,a=function(i){switch(i){case"Table":case"List":return h($a,{image:$a.PRESENTED_IMAGE_SIMPLE},null);case"Select":case"TreeSelect":case"Cascader":case"Transfer":case"Mentions":return h($a,{image:$a.PRESENTED_IMAGE_SIMPLE,class:"".concat(r.value,"-small")},null);default:return h($a,null,null)}};return a(e.componentName)};function L4(t){return h(dM,{componentName:t},null)}var L1={};function fM(t,e){}function vM(t,e){}function B4(t,e,n){!e&&!L1[n]&&(t(!1,n),L1[n]=!0)}function j4(t,e){B4(fM,t,e)}function hM(t,e){B4(vM,t,e)}const Zt=function(t,e){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"";j4(t,"[antdv: ".concat(e,"] ").concat(n))};var ah="internalMark",Os=le({compatConfig:{MODE:3},name:"ALocaleProvider",props:{locale:{type:Object},ANT_MARK__:String},setup:function(e,n){var r=n.slots;Zt(e.ANT_MARK__===ah,"LocaleProvider","`LocaleProvider` is deprecated. Please use `locale` with `ConfigProvider` instead");var a=xt({antLocale:y(y({},e.locale),{},{exist:!0}),ANT_MARK__:ah});return at("localeData",a),Se(function(){return e.locale},function(){a.antLocale=y(y({},e.locale),{},{exist:!0})},{immediate:!0}),function(){var o;return(o=r.default)===null||o===void 0?void 0:o.call(r)}}});Os.install=function(t){return t.component(Os.name,Os),t};const V4=Wt(Os);Vt("bottomLeft","bottomRight","topLeft","topRight");var pM=function(e){return e!==void 0&&(e==="topLeft"||e==="topRight")?"slide-down":"slide-up"},Ga=function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=y(e?{name:e,appear:!0,enterFromClass:"".concat(e,"-enter ").concat(e,"-enter-prepare"),enterActiveClass:"".concat(e,"-enter ").concat(e,"-enter-prepare"),enterToClass:"".concat(e,"-enter ").concat(e,"-enter-active"),leaveFromClass:" ".concat(e,"-leave"),leaveActiveClass:"".concat(e,"-leave ").concat(e,"-leave-active"),leaveToClass:"".concat(e,"-leave ").concat(e,"-leave-active")}:{css:!1},n);return r},vg=function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=y(e?{name:e,appear:!0,appearActiveClass:"".concat(e),appearToClass:"".concat(e,"-appear ").concat(e,"-appear-active"),enterFromClass:"".concat(e,"-appear ").concat(e,"-enter ").concat(e,"-appear-prepare ").concat(e,"-enter-prepare"),enterActiveClass:"".concat(e),enterToClass:"".concat(e,"-enter ").concat(e,"-appear ").concat(e,"-appear-active ").concat(e,"-enter-active"),leaveActiveClass:"".concat(e," ").concat(e,"-leave"),leaveToClass:"".concat(e,"-leave-active")}:{css:!1},n);return r},Sr=function(e,n,r){return r!==void 0?r:"".concat(e,"-").concat(n)};const gM=le({name:"Notice",inheritAttrs:!1,props:["prefixCls","duration","updateMark","noticeKey","closeIcon","closable","props","onClick","onClose","holder","visible"],setup:function(e,n){var r=n.attrs,a=n.slots,o,i=!1,l=L(function(){return e.duration===void 0?4.5:e.duration}),u=function(){l.value&&!i&&(o=setTimeout(function(){d()},l.value*1e3))},s=function(){o&&(clearTimeout(o),o=null)},d=function(v){v&&v.stopPropagation(),s();var g=e.onClose,p=e.noticeKey;g&&g(p)},c=function(){s(),u()};return Ge(function(){u()}),Sn(function(){i=!0,s()}),Se([l,function(){return e.updateMark},function(){return e.visible}],function(f,v){var g=Te(f,3),p=g[0],m=g[1],b=g[2],C=Te(v,3),x=C[0],w=C[1],P=C[2];(p!==x||m!==w||b!==P&&P)&&c()},{flush:"post"}),function(){var f,v,g=e.prefixCls,p=e.closable,m=e.closeIcon,b=m===void 0?(f=a.closeIcon)===null||f===void 0?void 0:f.call(a):m,C=e.onClick,x=e.holder,w=r.class,P=r.style,S="".concat(g,"-notice"),k=Object.keys(r).reduce(function(O,N){return(N.substr(0,5)==="data-"||N.substr(0,5)==="aria-"||N==="role")&&(O[N]=r[N]),O},{}),T=h("div",y({class:ce(S,w,A({},"".concat(S,"-closable"),p)),style:P,onMouseenter:s,onMouseleave:u,onClick:C},k),[h("div",{class:"".concat(S,"-content")},[(v=a.default)===null||v===void 0?void 0:v.call(a)]),p?h("a",{tabindex:0,onClick:d,class:"".concat(S,"-close")},[b||h("span",{class:"".concat(S,"-close-x")},null)]):null]);return x?h(eg,{to:x},{default:function(){return T}}):T}}});var mM=["name","getContainer","appContext","prefixCls","rootPrefixCls","transitionName","hasTransitionName"],B1=0,yM=Date.now();function j1(){var t=B1;return B1+=1,"rcNotification_".concat(yM,"_").concat(t)}var oh=le({name:"Notification",inheritAttrs:!1,props:["prefixCls","transitionName","animation","maxCount","closeIcon"],setup:function(e,n){var r=n.attrs,a=n.expose,o=n.slots,i=new Map,l=Q([]),u=L(function(){var c=e.prefixCls,f=e.animation,v=f===void 0?"fade":f,g=e.transitionName;return!g&&v&&(g="".concat(c,"-").concat(v)),vg(g)}),s=function(f,v){var g=f.key||j1(),p=y(y({},f),{},{key:g}),m=e.maxCount,b=l.value.map(function(x){return x.notice.key}).indexOf(g),C=l.value.concat();b!==-1?C.splice(b,1,{notice:p,holderCallback:v}):(m&&l.value.length>=m&&(p.key=C[0].notice.key,p.updateMark=j1(),p.userPassKey=g,C.shift()),C.push({notice:p,holderCallback:v})),l.value=C},d=function(f){l.value=l.value.filter(function(v){var g=v.notice,p=g.key,m=g.userPassKey,b=m||p;return b!==f})};return a({add:s,remove:d,notices:l}),function(){var c,f,v=e.prefixCls,g=e.closeIcon,p=g===void 0?(c=o.closeIcon)===null||c===void 0?void 0:c.call(o,{prefixCls:v}):g,m=l.value.map(function(C,x){var w=C.notice,P=C.holderCallback,S=x===l.value.length-1?w.updateMark:void 0,k=w.key,T=w.userPassKey,O=w.content,N=y(y(y({prefixCls:v,closeIcon:typeof p=="function"?p({prefixCls:v}):p},w),w.props),{},{key:k,noticeKey:T||k,updateMark:S,onClose:function(I){var E;d(I),(E=w.onClose)===null||E===void 0||E.call(w)},onClick:w.onClick});return P?h("div",{key:k,class:"".concat(v,"-hook-holder"),ref:function(I){typeof k>"u"||(I?(i.set(k,I),P(I,N)):i.delete(k))}},null):h(gM,N,{default:function(){return[typeof O=="function"?O({prefixCls:v}):O]}})}),b=(f={},A(f,v,1),A(f,r.class,!!r.class),f);return h("div",{class:b,style:r.style||{top:"65px",left:"50%"}},[h(rg,y({tag:"div"},u.value),{default:function(){return[m]}})])}}});oh.newInstance=function(e,n){var r=e||{},a=r.name,o=a===void 0?"notification":a,i=r.getContainer,l=r.appContext,u=r.prefixCls,s=r.rootPrefixCls,d=r.transitionName,c=r.hasTransitionName,f=He(r,mM),v=document.createElement("div");if(i){var g=i();g.appendChild(v)}else document.body.appendChild(v);var p=le({compatConfig:{MODE:3},name:"NotificationWrapper",setup:function(C,x){var w=x.attrs,P=Q();return Ge(function(){n({notice:function(k){var T;(T=P.value)===null||T===void 0||T.add(k)},removeNotice:function(k){var T;(T=P.value)===null||T===void 0||T.remove(k)},destroy:function(){sc(null,v),v.parentNode&&v.parentNode.removeChild(v)},component:P})}),function(){var S=Dn,k=S.getPrefixCls(o,u),T=S.getRootPrefixCls(s,k),O=c?d:"".concat(T,"-").concat(d);return h(Ng,y(y({},S),{},{notUpdateGlobalConfig:!0,prefixCls:T}),{default:function(){return[h(oh,y(y({ref:P},w),{},{prefixCls:k,transitionName:O}),null)]}})}}}),m=h(p,f);m.appContext=l||m.appContext,sc(m,v)};const K4=oh;var bM={icon:{tag:"svg",attrs:{viewBox:"0 0 1024 1024",focusable:"false"},children:[{tag:"path",attrs:{d:"M988 548c-19.9 0-36-16.1-36-36 0-59.4-11.6-117-34.6-171.3a440.45 440.45 0 00-94.3-139.9 437.71 437.71 0 00-139.9-94.3C629 83.6 571.4 72 512 72c-19.9 0-36-16.1-36-36s16.1-36 36-36c69.1 0 136.2 13.5 199.3 40.3C772.3 66 827 103 874 150c47 47 83.9 101.8 109.7 162.7 26.7 63.1 40.2 130.2 40.2 199.3.1 19.9-16 36-35.9 36z"}}]},name:"loading",theme:"outlined"};const CM=bM;function bn(t,e){xM(t)&&(t="100%");var n=wM(t);return t=e===360?t:Math.min(e,Math.max(0,parseFloat(t))),n&&(t=parseInt(String(t*e),10)/100),Math.abs(t-e)<1e-6?1:(e===360?t=(t<0?t%e+e:t%e)/parseFloat(String(e)):t=t%e/parseFloat(String(e)),t)}function Uu(t){return Math.min(1,Math.max(0,t))}function xM(t){return typeof t=="string"&&t.indexOf(".")!==-1&&parseFloat(t)===1}function wM(t){return typeof t=="string"&&t.indexOf("%")!==-1}function H4(t){return t=parseFloat(t),(isNaN(t)||t<0||t>1)&&(t=1),t}function Yu(t){return t<=1?"".concat(Number(t)*100,"%"):t}function wo(t){return t.length===1?"0"+t:String(t)}function SM(t,e,n){return{r:bn(t,255)*255,g:bn(e,255)*255,b:bn(n,255)*255}}function V1(t,e,n){t=bn(t,255),e=bn(e,255),n=bn(n,255);var r=Math.max(t,e,n),a=Math.min(t,e,n),o=0,i=0,l=(r+a)/2;if(r===a)i=0,o=0;else{var u=r-a;switch(i=l>.5?u/(2-r-a):u/(r+a),r){case t:o=(e-n)/u+(e1&&(n-=1),n<1/6?t+(e-t)*(6*n):n<1/2?e:n<2/3?t+(e-t)*(2/3-n)*6:t}function PM(t,e,n){var r,a,o;if(t=bn(t,360),e=bn(e,100),n=bn(n,100),e===0)a=n,o=n,r=n;else{var i=n<.5?n*(1+e):n+e-n*e,l=2*n-i;r=Ef(l,i,t+1/3),a=Ef(l,i,t),o=Ef(l,i,t-1/3)}return{r:r*255,g:a*255,b:o*255}}function ih(t,e,n){t=bn(t,255),e=bn(e,255),n=bn(n,255);var r=Math.max(t,e,n),a=Math.min(t,e,n),o=0,i=r,l=r-a,u=r===0?0:l/r;if(r===a)o=0;else{switch(r){case t:o=(e-n)/l+(e>16,g:(t&65280)>>8,b:t&255}}var uh={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",goldenrod:"#daa520",gold:"#ffd700",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavenderblush:"#fff0f5",lavender:"#e6e6fa",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"};function ei(t){var e={r:0,g:0,b:0},n=1,r=null,a=null,o=null,i=!1,l=!1;return typeof t=="string"&&(t=_M(t)),typeof t=="object"&&(Qr(t.r)&&Qr(t.g)&&Qr(t.b)?(e=SM(t.r,t.g,t.b),i=!0,l=String(t.r).substr(-1)==="%"?"prgb":"rgb"):Qr(t.h)&&Qr(t.s)&&Qr(t.v)?(r=Yu(t.s),a=Yu(t.v),e=kM(t.h,r,a),i=!0,l="hsv"):Qr(t.h)&&Qr(t.s)&&Qr(t.l)&&(r=Yu(t.s),o=Yu(t.l),e=PM(t.h,r,o),i=!0,l="hsl"),Object.prototype.hasOwnProperty.call(t,"a")&&(n=t.a)),n=H4(n),{ok:i,format:t.format||l,r:Math.min(255,Math.max(e.r,0)),g:Math.min(255,Math.max(e.g,0)),b:Math.min(255,Math.max(e.b,0)),a:n}}var MM="[-\\+]?\\d+%?",IM="[-\\+]?\\d*\\.\\d+%?",Da="(?:".concat(IM,")|(?:").concat(MM,")"),Mf="[\\s|\\(]+(".concat(Da,")[,|\\s]+(").concat(Da,")[,|\\s]+(").concat(Da,")\\s*\\)?"),If="[\\s|\\(]+(".concat(Da,")[,|\\s]+(").concat(Da,")[,|\\s]+(").concat(Da,")[,|\\s]+(").concat(Da,")\\s*\\)?"),hr={CSS_UNIT:new RegExp(Da),rgb:new RegExp("rgb"+Mf),rgba:new RegExp("rgba"+If),hsl:new RegExp("hsl"+Mf),hsla:new RegExp("hsla"+If),hsv:new RegExp("hsv"+Mf),hsva:new RegExp("hsva"+If),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/};function _M(t){if(t=t.trim().toLowerCase(),t.length===0)return!1;var e=!1;if(uh[t])t=uh[t],e=!0;else if(t==="transparent")return{r:0,g:0,b:0,a:0,format:"name"};var n=hr.rgb.exec(t);return n?{r:n[1],g:n[2],b:n[3]}:(n=hr.rgba.exec(t),n?{r:n[1],g:n[2],b:n[3],a:n[4]}:(n=hr.hsl.exec(t),n?{h:n[1],s:n[2],l:n[3]}:(n=hr.hsla.exec(t),n?{h:n[1],s:n[2],l:n[3],a:n[4]}:(n=hr.hsv.exec(t),n?{h:n[1],s:n[2],v:n[3]}:(n=hr.hsva.exec(t),n?{h:n[1],s:n[2],v:n[3],a:n[4]}:(n=hr.hex8.exec(t),n?{r:Wn(n[1]),g:Wn(n[2]),b:Wn(n[3]),a:K1(n[4]),format:e?"name":"hex8"}:(n=hr.hex6.exec(t),n?{r:Wn(n[1]),g:Wn(n[2]),b:Wn(n[3]),format:e?"name":"hex"}:(n=hr.hex4.exec(t),n?{r:Wn(n[1]+n[1]),g:Wn(n[2]+n[2]),b:Wn(n[3]+n[3]),a:K1(n[4]+n[4]),format:e?"name":"hex8"}:(n=hr.hex3.exec(t),n?{r:Wn(n[1]+n[1]),g:Wn(n[2]+n[2]),b:Wn(n[3]+n[3]),format:e?"name":"hex"}:!1)))))))))}function Qr(t){return!!hr.CSS_UNIT.exec(String(t))}var _f=function(){function t(e,n){e===void 0&&(e=""),n===void 0&&(n={});var r;if(e instanceof t)return e;typeof e=="number"&&(e=EM(e)),this.originalInput=e;var a=ei(e);this.originalInput=e,this.r=a.r,this.g=a.g,this.b=a.b,this.a=a.a,this.roundA=Math.round(100*this.a)/100,this.format=(r=n.format)!==null&&r!==void 0?r:a.format,this.gradientType=n.gradientType,this.r<1&&(this.r=Math.round(this.r)),this.g<1&&(this.g=Math.round(this.g)),this.b<1&&(this.b=Math.round(this.b)),this.isValid=a.ok}return t.prototype.isDark=function(){return this.getBrightness()<128},t.prototype.isLight=function(){return!this.isDark()},t.prototype.getBrightness=function(){var e=this.toRgb();return(e.r*299+e.g*587+e.b*114)/1e3},t.prototype.getLuminance=function(){var e=this.toRgb(),n,r,a,o=e.r/255,i=e.g/255,l=e.b/255;return o<=.03928?n=o/12.92:n=Math.pow((o+.055)/1.055,2.4),i<=.03928?r=i/12.92:r=Math.pow((i+.055)/1.055,2.4),l<=.03928?a=l/12.92:a=Math.pow((l+.055)/1.055,2.4),.2126*n+.7152*r+.0722*a},t.prototype.getAlpha=function(){return this.a},t.prototype.setAlpha=function(e){return this.a=H4(e),this.roundA=Math.round(100*this.a)/100,this},t.prototype.isMonochrome=function(){var e=this.toHsl().s;return e===0},t.prototype.toHsv=function(){var e=ih(this.r,this.g,this.b);return{h:e.h*360,s:e.s,v:e.v,a:this.a}},t.prototype.toHsvString=function(){var e=ih(this.r,this.g,this.b),n=Math.round(e.h*360),r=Math.round(e.s*100),a=Math.round(e.v*100);return this.a===1?"hsv(".concat(n,", ").concat(r,"%, ").concat(a,"%)"):"hsva(".concat(n,", ").concat(r,"%, ").concat(a,"%, ").concat(this.roundA,")")},t.prototype.toHsl=function(){var e=V1(this.r,this.g,this.b);return{h:e.h*360,s:e.s,l:e.l,a:this.a}},t.prototype.toHslString=function(){var e=V1(this.r,this.g,this.b),n=Math.round(e.h*360),r=Math.round(e.s*100),a=Math.round(e.l*100);return this.a===1?"hsl(".concat(n,", ").concat(r,"%, ").concat(a,"%)"):"hsla(".concat(n,", ").concat(r,"%, ").concat(a,"%, ").concat(this.roundA,")")},t.prototype.toHex=function(e){return e===void 0&&(e=!1),lh(this.r,this.g,this.b,e)},t.prototype.toHexString=function(e){return e===void 0&&(e=!1),"#"+this.toHex(e)},t.prototype.toHex8=function(e){return e===void 0&&(e=!1),OM(this.r,this.g,this.b,this.a,e)},t.prototype.toHex8String=function(e){return e===void 0&&(e=!1),"#"+this.toHex8(e)},t.prototype.toHexShortString=function(e){return e===void 0&&(e=!1),this.a===1?this.toHexString(e):this.toHex8String(e)},t.prototype.toRgb=function(){return{r:Math.round(this.r),g:Math.round(this.g),b:Math.round(this.b),a:this.a}},t.prototype.toRgbString=function(){var e=Math.round(this.r),n=Math.round(this.g),r=Math.round(this.b);return this.a===1?"rgb(".concat(e,", ").concat(n,", ").concat(r,")"):"rgba(".concat(e,", ").concat(n,", ").concat(r,", ").concat(this.roundA,")")},t.prototype.toPercentageRgb=function(){var e=function(n){return"".concat(Math.round(bn(n,255)*100),"%")};return{r:e(this.r),g:e(this.g),b:e(this.b),a:this.a}},t.prototype.toPercentageRgbString=function(){var e=function(n){return Math.round(bn(n,255)*100)};return this.a===1?"rgb(".concat(e(this.r),"%, ").concat(e(this.g),"%, ").concat(e(this.b),"%)"):"rgba(".concat(e(this.r),"%, ").concat(e(this.g),"%, ").concat(e(this.b),"%, ").concat(this.roundA,")")},t.prototype.toName=function(){if(this.a===0)return"transparent";if(this.a<1)return!1;for(var e="#"+lh(this.r,this.g,this.b,!1),n=0,r=Object.entries(uh);n=0,o=!n&&a&&(e.startsWith("hex")||e==="name");return o?e==="name"&&this.a===0?this.toName():this.toRgbString():(e==="rgb"&&(r=this.toRgbString()),e==="prgb"&&(r=this.toPercentageRgbString()),(e==="hex"||e==="hex6")&&(r=this.toHexString()),e==="hex3"&&(r=this.toHexString(!0)),e==="hex4"&&(r=this.toHex8String(!0)),e==="hex8"&&(r=this.toHex8String()),e==="name"&&(r=this.toName()),e==="hsl"&&(r=this.toHslString()),e==="hsv"&&(r=this.toHsvString()),r||this.toHexString())},t.prototype.toNumber=function(){return(Math.round(this.r)<<16)+(Math.round(this.g)<<8)+Math.round(this.b)},t.prototype.clone=function(){return new t(this.toString())},t.prototype.lighten=function(e){e===void 0&&(e=10);var n=this.toHsl();return n.l+=e/100,n.l=Uu(n.l),new t(n)},t.prototype.brighten=function(e){e===void 0&&(e=10);var n=this.toRgb();return n.r=Math.max(0,Math.min(255,n.r-Math.round(255*-(e/100)))),n.g=Math.max(0,Math.min(255,n.g-Math.round(255*-(e/100)))),n.b=Math.max(0,Math.min(255,n.b-Math.round(255*-(e/100)))),new t(n)},t.prototype.darken=function(e){e===void 0&&(e=10);var n=this.toHsl();return n.l-=e/100,n.l=Uu(n.l),new t(n)},t.prototype.tint=function(e){return e===void 0&&(e=10),this.mix("white",e)},t.prototype.shade=function(e){return e===void 0&&(e=10),this.mix("black",e)},t.prototype.desaturate=function(e){e===void 0&&(e=10);var n=this.toHsl();return n.s-=e/100,n.s=Uu(n.s),new t(n)},t.prototype.saturate=function(e){e===void 0&&(e=10);var n=this.toHsl();return n.s+=e/100,n.s=Uu(n.s),new t(n)},t.prototype.greyscale=function(){return this.desaturate(100)},t.prototype.spin=function(e){var n=this.toHsl(),r=(n.h+e)%360;return n.h=r<0?360+r:r,new t(n)},t.prototype.mix=function(e,n){n===void 0&&(n=50);var r=this.toRgb(),a=new t(e).toRgb(),o=n/100,i={r:(a.r-r.r)*o+r.r,g:(a.g-r.g)*o+r.g,b:(a.b-r.b)*o+r.b,a:(a.a-r.a)*o+r.a};return new t(i)},t.prototype.analogous=function(e,n){e===void 0&&(e=6),n===void 0&&(n=30);var r=this.toHsl(),a=360/n,o=[this];for(r.h=(r.h-(a*e>>1)+720)%360;--e;)r.h=(r.h+a)%360,o.push(new t(r));return o},t.prototype.complement=function(){var e=this.toHsl();return e.h=(e.h+180)%360,new t(e)},t.prototype.monochromatic=function(e){e===void 0&&(e=6);for(var n=this.toHsv(),r=n.h,a=n.s,o=n.v,i=[],l=1/e;e--;)i.push(new t({h:r,s:a,v:o})),o=(o+l)%1;return i},t.prototype.splitcomplement=function(){var e=this.toHsl(),n=e.h;return[this,new t({h:(n+72)%360,s:e.s,l:e.l}),new t({h:(n+216)%360,s:e.s,l:e.l})]},t.prototype.onBackground=function(e){var n=this.toRgb(),r=new t(e).toRgb(),a=n.a+r.a*(1-n.a);return new t({r:(n.r*n.a+r.r*r.a*(1-n.a))/a,g:(n.g*n.a+r.g*r.a*(1-n.a))/a,b:(n.b*n.a+r.b*r.a*(1-n.a))/a,a})},t.prototype.triad=function(){return this.polyad(3)},t.prototype.tetrad=function(){return this.polyad(4)},t.prototype.polyad=function(e){for(var n=this.toHsl(),r=n.h,a=[this],o=360/e,i=1;i=60&&Math.round(t.h)<=240?r=n?Math.round(t.h)-Gu*e:Math.round(t.h)+Gu*e:r=n?Math.round(t.h)+Gu*e:Math.round(t.h)-Gu*e,r<0?r+=360:r>=360&&(r-=360),r}function U1(t,e,n){if(t.h===0&&t.s===0)return t.s;var r;return n?r=t.s-H1*e:e===W4?r=t.s+H1:r=t.s+NM*e,r>1&&(r=1),n&&e===z4&&r>.1&&(r=.1),r<.06&&(r=.06),Number(r.toFixed(2))}function Y1(t,e,n){var r;return n?r=t.v+$M*e:r=t.v-AM*e,r>1&&(r=1),Number(r.toFixed(2))}function nu(t){for(var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=[],r=ei(t),a=z4;a>0;a-=1){var o=z1(r),i=qu(ei({h:W1(o,a,!0),s:U1(o,a,!0),v:Y1(o,a,!0)}));n.push(i)}n.push(qu(r));for(var l=1;l<=W4;l+=1){var u=z1(r),s=qu(ei({h:W1(u,l),s:U1(u,l),v:Y1(u,l)}));n.push(s)}return e.theme==="dark"?RM.map(function(d){var c=d.index,f=d.opacity,v=qu(DM(ei(e.backgroundColor||"#141414"),ei(n[c]),f*100));return v}):n}var vi={red:"#F5222D",volcano:"#FA541C",orange:"#FA8C16",gold:"#FAAD14",yellow:"#FADB14",lime:"#A0D911",green:"#52C41A",cyan:"#13C2C2",blue:"#1890FF",geekblue:"#2F54EB",purple:"#722ED1",magenta:"#EB2F96",grey:"#666666"},Nf={},$f={};Object.keys(vi).forEach(function(t){Nf[t]=nu(vi[t]),Nf[t].primary=Nf[t][5],$f[t]=nu(vi[t],{theme:"dark",backgroundColor:"#141414"}),$f[t].primary=$f[t][5]});var G1=[],il=[],FM="insert-css: You need to provide a CSS string. Usage: insertCss(cssString[, options]).";function LM(){var t=document.createElement("style");return t.setAttribute("type","text/css"),t}function BM(t,e){if(e=e||{},t===void 0)throw new Error(FM);var n=e.prepend===!0?"prepend":"append",r=e.container!==void 0?e.container:document.querySelector("head"),a=G1.indexOf(r);a===-1&&(a=G1.push(r)-1,il[a]={});var o;return il[a]!==void 0&&il[a][n]!==void 0?o=il[a][n]:(o=il[a][n]=LM(),n==="prepend"?r.insertBefore(o,r.childNodes[0]):r.appendChild(o)),t.charCodeAt(0)===65279&&(t=t.substr(1,t.length)),o.styleSheet?o.styleSheet.cssText+=t:o.textContent+=t,o}function q1(t){for(var e=1;e * { + line-height: 1; +} + +.anticon svg { + display: inline-block; +} + +.anticon::before { + display: none; +} + +.anticon .anticon-icon { + display: block; +} + +.anticon[tabindex] { + cursor: pointer; +} + +.anticon-spin::before, +.anticon-spin { + display: inline-block; + -webkit-animation: loadingCircle 1s infinite linear; + animation: loadingCircle 1s infinite linear; +} + +@-webkit-keyframes loadingCircle { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} + +@keyframes loadingCircle { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +`,Q1=!1,KM=function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:VM;nt(function(){Q1||(typeof window<"u"&&window.document&&window.document.documentElement&&BM(e,{prepend:!0}),Q1=!0)})},HM=["icon","primaryColor","secondaryColor"];function zM(t,e){if(t==null)return{};var n=WM(t,e),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);for(a=0;a=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function WM(t,e){if(t==null)return{};var n={},r=Object.keys(t),a,o;for(o=0;o=0)&&(n[a]=t[a]);return n}function Ts(t){for(var e=1;et.length)&&(e=t.length);for(var n=0,r=new Array(e);nt.length)&&(e=t.length);for(var n=0,r=new Array(e);n=0)&&Object.prototype.propertyIsEnumerable.call(t,r)&&(n[r]=t[r])}return n}function uI(t,e){if(t==null)return{};var n={},r=Object.keys(t),a,o;for(o=0;o=0)&&(n[a]=t[a]);return n}G4("#1890ff");var zi=function(e,n){var r,a=eb({},e,n.attrs),o=a.class,i=a.icon,l=a.spin,u=a.rotate,s=a.tabindex,d=a.twoToneColor,c=a.onClick,f=lI(a,tI),v=(r={anticon:!0},ch(r,"anticon-".concat(i.name),!!i.name),ch(r,o,o),r),g=l===""||l||i.name==="loading"?"anticon-spin":"",p=s;p===void 0&&c&&(p=-1,f.tabindex=p);var m=u?{msTransform:"rotate(".concat(u,"deg)"),transform:"rotate(".concat(u,"deg)")}:void 0,b=Y4(d),C=nI(b,2),x=C[0],w=C[1];return h("span",eb({role:"img","aria-label":i.name},f,{onClick:c,class:v}),[h(hg,{class:g,icon:i,primaryColor:x,secondaryColor:w,style:m},null)])};zi.props={spin:Boolean,rotate:Number,icon:Object,twoToneColor:String};zi.displayName="AntdIcon";zi.inheritAttrs=!1;zi.getTwoToneColor=eI;zi.setTwoToneColor=G4;const st=zi;function tb(t){for(var e=1;e=0;--Y){var K=this.tryEntries[Y],W=K.completion;if(K.tryLoc==="root")return U("end");if(K.tryLoc<=this.prev){var X=i.call(K,"catchLoc"),z=i.call(K,"finallyLoc");if(X&&z){if(this.prev=0;--U){var Y=this.tryEntries[U];if(Y.tryLoc<=this.prev&&i.call(Y,"finallyLoc")&&this.prev=0;--B){var U=this.tryEntries[B];if(U.finallyLoc===V)return this.complete(U.completion,U.afterLoc),D(U),x}},catch:function(V){for(var B=this.tryEntries.length-1;B>=0;--B){var U=this.tryEntries[B];if(U.tryLoc===V){var Y=U.completion;if(Y.type==="throw"){var K=Y.arg;D(U)}return K}}throw new Error("illegal catch attempt")},delegateYield:function(V,B,U){return this.delegate={iterator:_(V),resultName:B,nextLoc:U},this.method==="next"&&(this.arg=r),x}},a}t.exports=n,t.exports.__esModule=!0,t.exports.default=t.exports})(a3);var _I=a3.exports,Es=_I(),NI=Es;try{regeneratorRuntime=Es}catch{typeof globalThis=="object"?globalThis.regeneratorRuntime=Es:Function("r","regeneratorRuntime = r")(Es)}const Bn=ma(NI);var $I={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M699 353h-46.9c-10.2 0-19.9 4.9-25.9 13.3L469 584.3l-71.2-98.8c-6-8.3-15.6-13.3-25.9-13.3H325c-6.5 0-10.3 7.4-6.5 12.7l124.6 172.8a31.8 31.8 0 0051.7 0l210.6-292c3.9-5.3.1-12.7-6.4-12.7z"}},{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"}}]},name:"check-circle",theme:"outlined"};const AI=$I;function lb(t){for(var e=1;e1&&arguments[1]!==void 0?arguments[1]:l3,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:u3,r;switch(t){case"topLeft":r={left:"0px",top:e,bottom:"auto"};break;case"topRight":r={right:"0px",top:e,bottom:"auto"};break;case"bottomLeft":r={left:"0px",top:"auto",bottom:n};break;default:r={right:"0px",top:"auto",bottom:n};break}return r}function XI(t,e){var n=t.prefixCls,r=t.placement,a=r===void 0?s3:r,o=t.getContainer,i=o===void 0?c3:o,l=t.top,u=t.bottom,s=t.closeIcon,d=s===void 0?d3:s,c=t.appContext,f=c_(),v=f.getPrefixCls,g=v("notification",n||dh),p="".concat(g,"-").concat(a,"-").concat(fh),m=mo[p];if(m){Promise.resolve(m).then(function(C){e(C)});return}var b=ce("".concat(g,"-").concat(a),A({},"".concat(g,"-rtl"),fh===!0));K4.newInstance({name:"notification",prefixCls:n||dh,class:b,style:qI(a,l,u),appContext:c,getContainer:i,closeIcon:function(x){var w=x.prefixCls,P=h("span",{class:"".concat(w,"-close-x")},[gl(d,{},h(Wr,{class:"".concat(w,"-close-icon")},null))]);return P},maxCount:f3,hasTransitionName:!0},function(C){mo[p]=C,e(C)})}var QI={success:wg,info:Pg,error:Og,warning:vd};function ZI(t){var e=t.icon,n=t.type,r=t.description,a=t.message,o=t.btn,i=t.duration===void 0?i3:t.duration;XI(t,function(l){l.notice({content:function(s){var d=s.prefixCls,c="".concat(d,"-notice"),f=null;if(e)f=function(){return h("span",{class:"".concat(c,"-icon")},[gl(e)])};else if(n){var v=QI[n];f=function(){return h(v,{class:"".concat(c,"-icon ").concat(c,"-icon-").concat(n)},null)}}return h("div",{class:f?"".concat(c,"-with-icon"):""},[f&&f(),h("div",{class:"".concat(c,"-message")},[!r&&f?h("span",{class:"".concat(c,"-message-single-line-auto-margin")},null):null,gl(a)]),h("div",{class:"".concat(c,"-description")},[gl(r)]),o?h("span",{class:"".concat(c,"-btn")},[gl(o)]):null])},duration:i,closable:!0,onClose:t.onClose,onClick:t.onClick,key:t.key,style:t.style||{},class:t.class})})}var ru={open:ZI,close:function(e){Object.keys(mo).forEach(function(n){return Promise.resolve(mo[n]).then(function(r){r.removeNotice(e)})})},config:GI,destroy:function(){Object.keys(mo).forEach(function(e){Promise.resolve(mo[e]).then(function(n){n.destroy()}),delete mo[e]})}},JI=["success","info","warning","error"];JI.forEach(function(t){ru[t]=function(e){return ru.open(y(y({},e),{},{type:t}))}});ru.warn=ru.warning;const Mg=ru;function Bo(){return!!(typeof window<"u"&&window.document&&window.document.createElement)}var e_="vc-util-key";function v3(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},e=t.mark;return e?e.startsWith("data-")?e:"data-".concat(e):e_}function Ig(t){if(t.attachTo)return t.attachTo;var e=document.querySelector("head");return e||document.body}function fb(t){var e,n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(!Bo())return null;var r=document.createElement("style");if((e=n.csp)!==null&&e!==void 0&&e.nonce){var a;r.nonce=(a=n.csp)===null||a===void 0?void 0:a.nonce}r.innerHTML=t;var o=Ig(n),i=o.firstChild;return n.prepend&&o.prepend?o.prepend(r):n.prepend&&i?o.insertBefore(r,i):o.appendChild(r),r}var vh=new Map;function t_(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=Ig(e);return Array.from(vh.get(n).children).find(function(r){return r.tagName==="STYLE"&&r.getAttribute(v3(e))===t})}function n_(t,e){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},r=Ig(n);if(!vh.has(r)){var a=fb("",n),o=a.parentNode;vh.set(r,o),o.removeChild(a)}var i=t_(e,n);if(i){var l,u;if((l=n.csp)!==null&&l!==void 0&&l.nonce&&i.nonce!==((u=n.csp)===null||u===void 0?void 0:u.nonce)){var s;i.nonce=(s=n.csp)===null||s===void 0?void 0:s.nonce}return i.innerHTML!==t&&(i.innerHTML=t),i}var d=fb(t,n);return d.setAttribute(v3(n),e),d}const Pt=function(t,e,n){j4(t,"[ant-design-vue: ".concat(e,"] ").concat(n))};var r_="-ant-".concat(Date.now(),"-").concat(Math.random());function a_(t,e){var n={},r=function(d,c){var f=d.clone();return f=(c==null?void 0:c(f))||f,f.toRgbString()},a=function(d,c){var f=new _f(d),v=nu(f.toRgbString());n["".concat(c,"-color")]=r(f),n["".concat(c,"-color-disabled")]=v[1],n["".concat(c,"-color-hover")]=v[4],n["".concat(c,"-color-active")]=v[6],n["".concat(c,"-color-outline")]=f.clone().setAlpha(.2).toRgbString(),n["".concat(c,"-color-deprecated-bg")]=v[1],n["".concat(c,"-color-deprecated-border")]=v[3]};if(e.primaryColor){a(e.primaryColor,"primary");var o=new _f(e.primaryColor),i=nu(o.toRgbString());i.forEach(function(s,d){n["primary-".concat(d+1)]=s}),n["primary-color-deprecated-l-35"]=r(o,function(s){return s.lighten(35)}),n["primary-color-deprecated-l-20"]=r(o,function(s){return s.lighten(20)}),n["primary-color-deprecated-t-20"]=r(o,function(s){return s.tint(20)}),n["primary-color-deprecated-t-50"]=r(o,function(s){return s.tint(50)}),n["primary-color-deprecated-f-12"]=r(o,function(s){return s.setAlpha(s.getAlpha()*.12)});var l=new _f(i[0]);n["primary-color-active-deprecated-f-30"]=r(l,function(s){return s.setAlpha(s.getAlpha()*.3)}),n["primary-color-active-deprecated-d-02"]=r(l,function(s){return s.darken(2)})}e.successColor&&a(e.successColor,"success"),e.warningColor&&a(e.warningColor,"warning"),e.errorColor&&a(e.errorColor,"error"),e.infoColor&&a(e.infoColor,"info");var u=Object.keys(n).map(function(s){return"--".concat(t,"-").concat(s,": ").concat(n[s],";")});Bo()?n_(` + :root { + `.concat(u.join(` +`),` + } + `),"".concat(r_,"-dynamic-theme")):Pt(!1,"ConfigProvider","SSR do not support dynamic theme with css variables.")}var h3=Symbol("GlobalFormContextKey"),o_=function(e){at(h3,e)},i_=function(){return Ze(h3,{validateMessages:L(function(){})})},l_=function(){return{getTargetContainer:{type:Function},getPopupContainer:{type:Function},prefixCls:String,getPrefixCls:{type:Function},renderEmpty:{type:Function},transformCellText:{type:Function},csp:{type:Object,default:void 0},input:{type:Object},autoInsertSpaceInButton:{type:Boolean,default:void 0},locale:{type:Object,default:void 0},pageHeader:{type:Object},componentSize:{type:String},direction:{type:String},space:{type:Object},virtual:{type:Boolean,default:void 0},dropdownMatchSelectWidth:{type:[Number,Boolean],default:!0},form:{type:Object,default:void 0},notUpdateGlobalConfig:Boolean}},u_="ant";function hi(){return Dn.prefixCls||u_}var hh=xt({}),p3=xt({}),Dn=xt({});Je(function(){pt(Dn,hh,p3),Dn.prefixCls=hi(),Dn.getPrefixCls=function(t,e){return e||(t?"".concat(Dn.prefixCls,"-").concat(t):Dn.prefixCls)},Dn.getRootPrefixCls=function(t,e){return t||(Dn.prefixCls?Dn.prefixCls:e&&e.includes("-")?e.replace(/^(.*)-[^-]*$/,"$1"):hi())}});var Af,s_=function(e){Af&&Af(),Af=Je(function(){pt(p3,xt(e)),pt(Dn,xt(e))}),e.theme&&a_(hi(),e.theme)},c_=function(){return{getPrefixCls:function(n,r){return r||(n?"".concat(hi(),"-").concat(n):hi())},getRootPrefixCls:function(n,r){return n||(Dn.prefixCls?Dn.prefixCls:r&&r.includes("-")?r.replace(/^(.*)-[^-]*$/,"$1"):hi())}}},Il=le({compatConfig:{MODE:3},name:"AConfigProvider",inheritAttrs:!1,props:l_(),setup:function(e,n){var r=n.slots,a=function(c,f){var v=e.prefixCls,g=v===void 0?"ant":v;return f||(c?"".concat(g,"-").concat(c):g)},o=function(c){var f=e.renderEmpty||r.renderEmpty||L4;return f(c)},i=function(c,f){var v=e.prefixCls;if(f)return f;var g=v||a("");return c?"".concat(g,"-").concat(c):g},l=xt(y(y({},e),{},{getPrefixCls:i,renderEmpty:o}));Object.keys(e).forEach(function(d){Se(function(){return e[d]},function(){l[d]=e[d]})}),e.notUpdateGlobalConfig||(pt(hh,l),Se(l,function(){pt(hh,l)}));var u=L(function(){var d={};if(e.locale){var c,f;d=((c=e.locale.Form)===null||c===void 0?void 0:c.defaultValidateMessages)||((f=wr.Form)===null||f===void 0?void 0:f.defaultValidateMessages)||{}}return e.form&&e.form.validateMessages&&(d=y(y({},d),e.form.validateMessages)),d});o_({validateMessages:u}),at("configProvider",l);var s=function(c){var f;return h(V4,{locale:e.locale||c,ANT_MARK__:ah},{default:function(){return[(f=r.default)===null||f===void 0?void 0:f.call(r)]}})};return Je(function(){e.direction&&(Cg.config({rtl:e.direction==="rtl"}),Mg.config({rtl:e.direction==="rtl"}))}),function(){return h(Vi,{children:function(c,f,v){return s(v)}},null)}}}),_g=xt({getPrefixCls:function(e,n){return n||(e?"ant-".concat(e):"ant")},renderEmpty:L4,direction:"ltr"});Il.config=s_;Il.install=function(t){t.component(Il.name,Il)};const Ng=Il,Re=function(t,e){var n=Ze("configProvider",_g),r=L(function(){return n.getPrefixCls(t,e.prefixCls)}),a=L(function(){var C;return(C=e.direction)!==null&&C!==void 0?C:n.direction}),o=L(function(){return n.getPrefixCls()}),i=L(function(){return n.autoInsertSpaceInButton}),l=L(function(){return n.renderEmpty}),u=L(function(){return n.space}),s=L(function(){return n.pageHeader}),d=L(function(){return n.form}),c=L(function(){return e.getTargetContainer||n.getTargetContainer}),f=L(function(){return e.getPopupContainer||n.getPopupContainer}),v=L(function(){var C;return(C=e.dropdownMatchSelectWidth)!==null&&C!==void 0?C:n.dropdownMatchSelectWidth}),g=L(function(){return(e.virtual===void 0?n.virtual!==!1:e.virtual!==!1)&&v.value!==!1}),p=L(function(){return e.size||n.componentSize}),m=L(function(){var C;return e.autocomplete||((C=n.input)===null||C===void 0?void 0:C.autocomplete)}),b=L(function(){return n.csp});return{configProvider:n,prefixCls:r,direction:a,size:p,getTargetContainer:c,getPopupContainer:f,space:u,pageHeader:s,form:d,autoInsertSpaceInButton:i,renderEmpty:l,virtual:g,dropdownMatchSelectWidth:v,rootPrefixCls:o,getPrefixCls:n.getPrefixCls,autocomplete:m,csp:b}};function it(t,e){for(var n=pt({},t),r=0;r"u")return 0;var n=e?"scrollTop":"scrollLeft",r=0;if(ph(t)?r=t[e?"pageYOffset":"pageXOffset"]:t instanceof Document?r=t.documentElement[n]:t&&(r=t[n]),t&&!ph(t)&&typeof r!="number"){var a;r=(a=(t.ownerDocument||t).documentElement)===null||a===void 0?void 0:a[n]}return r}function h_(t,e,n,r){var a=n-e;return t/=r/2,t<1?a/2*t*t*t+e:a/2*((t-=2)*t*t+2)+e}function Ag(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=e.getContainer,r=n===void 0?function(){return window}:n,a=e.callback,o=e.duration,i=o===void 0?450:o,l=r(),u=$g(l,!0),s=Date.now(),d=function c(){var f=Date.now(),v=f-s,g=h_(v>i?i:v,u,t,i);ph(l)?l.scrollTo(window.pageXOffset,g):l instanceof HTMLDocument||l.constructor.name==="HTMLDocument"?l.documentElement.scrollTop=g:l.scrollTop=g,v0&&arguments[0]!==void 0?arguments[0]:0,k=arguments.length>1&&arguments[1]!==void 0?arguments[1]:5,T=[],O=p.value();if(v.links.forEach(function($){var I=hb.exec($.toString());if(I){var E=document.getElementById(I[1]);if(E){var F=vb(E,O);F$.top?I:$});return N.link}return""},b=function(S){var k=e.getCurrentAnchor;g.value!==S&&(g.value=typeof k=="function"?k():S,r("change",S))},C=function(S){var k=e.offsetTop,T=e.targetOffset;b(S);var O=p.value(),N=$g(O,!0),$=hb.exec(S);if($){var I=document.getElementById($[1]);if(I){var E=vb(I,O),F=N+E;F-=T!==void 0?T:k||0,v.animating=!0,Ag(F,{callback:function(){v.animating=!1},getContainer:p.value})}}};i({scrollTo:C});var x=function(){if(!v.animating){var S=e.offsetTop,k=e.bounds,T=e.targetOffset,O=m(T!==void 0?T:S||0,k);b(O)}},w=function(){var S=f.value.getElementsByClassName("".concat(u.value,"-link-title-active"))[0];S&&(c.value.style.top="".concat(S.offsetTop+S.clientHeight/2-4.5,"px"))};return m_({registerLink:function(S){v.links.includes(S)||v.links.push(S)},unregisterLink:function(S){var k=v.links.indexOf(S);k!==-1&&v.links.splice(k,1)},activeLink:g,scrollTo:C,handleClick:function(S,k){r("click",S,k)}}),Ge(function(){nt(function(){var P=p.value();v.scrollContainer=P,v.scrollEvent=Dt(v.scrollContainer,"scroll",x),x()})}),ut(function(){v.scrollEvent&&v.scrollEvent.remove()}),wn(function(){if(v.scrollEvent){var P=p.value();v.scrollContainer!==P&&(v.scrollContainer=P,v.scrollEvent.remove(),v.scrollEvent=Dt(v.scrollContainer,"scroll",x),x())}w()}),function(){var P,S=e.offsetTop,k=e.affix,T=e.showInkInFixed,O=u.value,N=ce("".concat(O,"-ink-ball"),{visible:g.value}),$=ce(e.wrapperClass,"".concat(O,"-wrapper"),A({},"".concat(O,"-rtl"),d.value==="rtl")),I=ce(O,A({},"".concat(O,"-fixed"),!k&&!T)),E=y({maxHeight:S?"calc(100vh - ".concat(S,"px)"):"100vh"},e.wrapperStyle),F=h("div",{class:$,style:E,ref:f},[h("div",{class:I},[h("div",{class:"".concat(O,"-ink")},[h("span",{class:N,ref:c},null)]),(P=o.default)===null||P===void 0?void 0:P.call(o)])]);return k?h(g3,y(y({},a),{},{offsetTop:S,target:p.value}),{default:function(){return[F]}}):F}}});var C_=function(){return{prefixCls:String,href:String,title:G.any,target:String}};const y3=le({compatConfig:{MODE:3},name:"AAnchorLink",props:ct(C_(),{href:"#"}),slots:["title"],setup:function(e,n){var r=n.slots,a=null,o=g_(),i=o.handleClick,l=o.scrollTo,u=o.unregisterLink,s=o.registerLink,d=o.activeLink,c=Re("anchor",e),f=c.prefixCls,v=function(p){var m=e.href;i(p,{title:a,href:m}),l(m)};return Se(function(){return e.href},function(g,p){nt(function(){u(p),s(g)})}),Ge(function(){s(e.href)}),ut(function(){u(e.href)}),function(){var g,p=e.href,m=e.target,b=f.value,C=$t(r,e,"title");a=C;var x=d.value===p,w=ce("".concat(b,"-link"),A({},"".concat(b,"-link-active"),x)),P=ce("".concat(b,"-link-title"),A({},"".concat(b,"-link-title-active"),x));return h("div",{class:w},[h("a",{class:P,href:p,title:typeof C=="string"?C:"",target:m,onClick:v},[C]),(g=r.default)===null||g===void 0?void 0:g.call(r)])}}});yo.Link=y3;yo.install=function(t){return t.component(yo.name,yo),t.component(yo.Link.name,yo.Link),t};function Rg(t){return u4(t)||c4(t)||dd(t)||s4()}function pb(t,e){var n=t.key,r;return"value"in t&&(r=t.value),n??(r!==void 0?r:"rc-index-key-".concat(e))}function b3(t,e){var n=t||{},r=n.label,a=n.value,o=n.options;return{label:r||(e?"children":"label"),value:a||"value",options:o||"options"}}function x_(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=e.fieldNames,r=e.childrenAsData,a=[],o=b3(n,!1),i=o.label,l=o.value,u=o.options;function s(d,c){d.forEach(function(f){var v=f[i];if(c||!(u in f)){var g=f[l];a.push({key:pb(f,a.length),groupOption:c,data:f,label:v,value:g})}else{var p=v;p===void 0&&r&&(p=f.label),a.push({key:pb(f,a.length),group:!0,data:f,label:p}),s(f[u],!0)}})}return s(t,!1),a}function gh(t){var e=y({},t);return"props"in e||Object.defineProperty(e,"props",{get:function(){return e}}),e}function w_(t,e){if(!e||!e.length)return null;var n=!1;function r(o,i){var l=Rg(i),u=l[0],s=l.slice(1);if(!u)return[o];var d=o.split(u);return n=n||d.length>1,d.reduce(function(c,f){return[].concat(Ie(c),Ie(r(f,s)))},[]).filter(function(c){return c})}var a=r(t,e);return n?a:null}function bo(t,e){return t?t.contains(e):!1}var C3=["moz","ms","webkit"];function S_(){var t=0;return function(e){var n=new Date().getTime(),r=Math.max(0,16-(n-t)),a=window.setTimeout(function(){e(n+r)},r);return t=n+r,a}}function P_(){if(typeof window>"u")return function(){};if(window.requestAnimationFrame)return window.requestAnimationFrame.bind(window);var t=C3.filter(function(e){return"".concat(e,"RequestAnimationFrame")in window})[0];return t?window["".concat(t,"RequestAnimationFrame")]:S_()}function k_(t){if(typeof window>"u")return null;if(window.cancelAnimationFrame)return window.cancelAnimationFrame(t);var e=C3.filter(function(n){return"".concat(n,"CancelAnimationFrame")in window||"".concat(n,"CancelRequestAnimationFrame")in window})[0];return e?(window["".concat(e,"CancelAnimationFrame")]||window["".concat(e,"CancelRequestAnimationFrame")]).call(this,t):clearTimeout(t)}var gb=P_(),O_=function(e){return k_(e.id)},T_=function(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,r=Date.now();function a(){Date.now()-r>=n?e.call():o.id=gb(a)}var o={id:gb(a)};return o},Dg={visible:Boolean,prefixCls:String,zIndex:Number,destroyPopupOnHide:Boolean,forceRender:Boolean,animation:[String,Object],transitionName:String,stretch:{type:String},align:{type:Object},point:{type:Object},getRootDomNode:{type:Function},getClassNameFromAlign:{type:Function},onMouseenter:{type:Function},onMouseleave:{type:Function},onMousedown:{type:Function},onTouchstart:{type:Function}},E_=y(y({},Dg),{},{mobile:{type:Object}}),M_=y(y({},Dg),{},{mask:Boolean,mobile:{type:Object},maskAnimation:String,maskTransitionName:String});function x3(t){var e=t.prefixCls,n=t.animation,r=t.transitionName;return n?{name:"".concat(e,"-").concat(n)}:r?{name:r}:{}}function w3(t){var e=t.prefixCls,n=t.visible,r=t.zIndex,a=t.mask,o=t.maskAnimation,i=t.maskTransitionName;if(!a)return null;var l={};return(i||o)&&(l=x3({prefixCls:e,transitionName:i,animation:o})),h(Nn,y({appear:!0},l),{default:function(){return[gn(h("div",{style:{zIndex:r},class:"".concat(e,"-mask")},null),[[CT("if"),n]])]}})}w3.displayName="Mask";const I_=le({compatConfig:{MODE:3},name:"MobilePopupInner",inheritAttrs:!1,props:E_,emits:["mouseenter","mouseleave","mousedown","touchstart","align"],setup:function(e,n){var r=n.expose,a=n.slots,o=Q();return r({forceAlign:function(){},getElement:function(){return o.value}}),function(){var i,l=e.zIndex,u=e.visible,s=e.prefixCls,d=e.mobile,c=d===void 0?{}:d,f=c.popupClassName,v=c.popupStyle,g=c.popupMotion,p=g===void 0?{}:g,m=c.popupRender,b=y({zIndex:l},v),C=Et((i=a.default)===null||i===void 0?void 0:i.call(a));C.length>1&&(C=h("div",{class:"".concat(s,"-content")},[C])),m&&(C=m(C));var x=ce(s,f);return h(Nn,y({ref:o},p),{default:function(){return[u?h("div",{class:x,style:b},[C]):null]}})}}});var mb=["measure","align",null,"motion"];const __=function(t,e){var n=Q(null),r=Q(),a=Q(!1);function o(u){a.value||(n.value=u)}function i(){qe.cancel(r.value)}function l(u){i(),r.value=qe(function(){var s=n.value;switch(n.value){case"align":s="motion";break;case"motion":s="stable";break}o(s),u==null||u()})}return Se(t,function(){o("measure")},{immediate:!0,flush:"post"}),Ge(function(){Se(n,function(){switch(n.value){case"measure":e();break}n.value&&(r.value=qe(Lo(Bn.mark(function u(){var s,d;return Bn.wrap(function(f){for(;;)switch(f.prev=f.next){case 0:s=mb.indexOf(n.value),d=mb[s+1],d&&s!==-1&&o(d);case 3:case"end":return f.stop()}},u)}))))},{immediate:!0,flush:"post"})}),ut(function(){a.value=!0,i()}),[n,l]},N_=function(t){var e=Q({width:0,height:0});function n(a){e.value={width:a.offsetWidth,height:a.offsetHeight}}var r=L(function(){var a={};if(t.value){var o=e.value,i=o.width,l=o.height;t.value.indexOf("height")!==-1&&l?a.height="".concat(l,"px"):t.value.indexOf("minHeight")!==-1&&l&&(a.minHeight="".concat(l,"px")),t.value.indexOf("width")!==-1&&i?a.width="".concat(i,"px"):t.value.indexOf("minWidth")!==-1&&i&&(a.minWidth="".concat(i,"px"))}return a});return[r,n]};function yb(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(t,a).enumerable})),n.push.apply(n,r)}return n}function bb(t){for(var e=1;e=0&&n.left>=0&&n.bottom>n.top&&n.right>n.left?n:null}function tN(t,e,n,r){var a=yt.clone(t),o={width:e.width,height:e.height};return r.adjustX&&a.left=n.left&&a.left+o.width>n.right&&(o.width-=a.left+o.width-n.right),r.adjustX&&a.left+o.width>n.right&&(a.left=Math.max(n.right-o.width,n.left)),r.adjustY&&a.top=n.top&&a.top+o.height>n.bottom&&(o.height-=a.top+o.height-n.bottom),r.adjustY&&a.top+o.height>n.bottom&&(a.top=Math.max(n.bottom-o.height,n.top)),yt.mix(a,o)}function jg(t){var e,n,r;if(!yt.isWindow(t)&&t.nodeType!==9)e=yt.offset(t),n=yt.outerWidth(t),r=yt.outerHeight(t);else{var a=yt.getWindow(t);e={left:yt.getWindowScrollLeft(a),top:yt.getWindowScrollTop(a)},n=yt.viewportWidth(a),r=yt.viewportHeight(a)}return e.width=n,e.height=r,e}function Tb(t,e){var n=e.charAt(0),r=e.charAt(1),a=t.width,o=t.height,i=t.left,l=t.top;return n==="c"?l+=o/2:n==="b"&&(l+=o),r==="c"?i+=a/2:r==="r"&&(i+=a),{left:i,top:l}}function Zu(t,e,n,r,a){var o=Tb(e,n[1]),i=Tb(t,n[0]),l=[i.left-o.left,i.top-o.top];return{left:Math.round(t.left-l[0]+r[0]-a[0]),top:Math.round(t.top-l[1]+r[1]-a[1])}}function Eb(t,e,n){return t.leftn.right}function Mb(t,e,n){return t.topn.bottom}function nN(t,e,n){return t.left>n.right||t.left+e.widthn.bottom||t.top+e.height=n.right||r.top>=n.bottom}function Vg(t,e,n){var r=n.target||e,a=jg(r),o=!aN(r,n.overflow&&n.overflow.alwaysByViewport);return I3(t,a,n,o)}Vg.__getOffsetParent=Ch;Vg.__getVisibleRectForElement=Bg;function oN(t,e,n){var r,a,o=yt.getDocument(t),i=o.defaultView||o.parentWindow,l=yt.getWindowScrollLeft(i),u=yt.getWindowScrollTop(i),s=yt.viewportWidth(i),d=yt.viewportHeight(i);"pageX"in e?r=e.pageX:r=l+e.clientX,"pageY"in e?a=e.pageY:a=u+e.clientY;var c={left:r,top:a,width:0,height:0},f=r>=0&&r<=l+s&&a>=0&&a<=u+d,v=[n.points[0],"cc"];return I3(t,c,bb(bb({},n),{},{points:v}),f)}function Ct(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1,a=t;if(Array.isArray(t)&&(a=qt(t)[0]),!a)return null;var o=Cn(a,e,r);return o.props=n?y(y({},o.props),e):o.props,Zt(Fe(o.props.class)!=="object","class must be string"),o}function iN(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;return t.map(function(r){return Ct(r,e,n)})}function _l(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(Array.isArray(t))return t.map(function(o){return _l(o,e,n,r)});var a=Ct(t,e,n,r);return Array.isArray(a.children)&&(a.children=_l(a.children)),a}const Kg=function(t){if(!t)return!1;if(t.offsetParent)return!0;if(t.getBBox){var e=t.getBBox();if(e.width||e.height)return!0}if(t.getBoundingClientRect){var n=t.getBoundingClientRect();if(n.width||n.height)return!0}return!1};function lN(t,e){return t===e?!0:!t||!e?!1:"pageX"in e&&"pageY"in e?t.pageX===e.pageX&&t.pageY===e.pageY:"clientX"in e&&"clientY"in e?t.clientX===e.clientX&&t.clientY===e.clientY:!1}function uN(t,e){t!==document.activeElement&&bo(e,t)&&typeof t.focus=="function"&&t.focus()}function Nb(t,e){var n=null,r=null;function a(i){var l=Te(i,1),u=l[0].target;if(document.documentElement.contains(u)){var s=u.getBoundingClientRect(),d=s.width,c=s.height,f=Math.floor(d),v=Math.floor(c);(n!==f||r!==v)&&Promise.resolve().then(function(){e({width:f,height:v})}),n=f,r=v}}var o=new og(a);return t&&o.observe(t),function(){o.disconnect()}}const sN=function(t,e){var n=!1,r=null;function a(){clearTimeout(r)}function o(i){if(!n||i===!0){if(t()===!1)return;n=!0,a(),r=setTimeout(function(){n=!1},e.value)}else a(),r=setTimeout(function(){n=!1,o()},e.value)}return[o,function(){n=!1,a()}]};function cN(){this.__data__=[],this.size=0}function Hg(t,e){return t===e||t!==t&&e!==e}function pd(t,e){for(var n=t.length;n--;)if(Hg(t[n][0],e))return n;return-1}var dN=Array.prototype,fN=dN.splice;function vN(t){var e=this.__data__,n=pd(e,t);if(n<0)return!1;var r=e.length-1;return n==r?e.pop():fN.call(e,n,1),--this.size,!0}function hN(t){var e=this.__data__,n=pd(e,t);return n<0?void 0:e[n][1]}function pN(t){return pd(this.__data__,t)>-1}function gN(t,e){var n=this.__data__,r=pd(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this}function ya(t){var e=-1,n=t==null?0:t.length;for(this.clear();++el))return!1;var s=o.get(t),d=o.get(e);if(s&&d)return s==e&&d==t;var c=-1,f=!0,v=n&c$?new Ei:void 0;for(o.set(t,e),o.set(e,t);++c-1&&t%1==0&&t-1&&t%1==0&&t<=H$}var z$="[object Arguments]",W$="[object Array]",U$="[object Boolean]",Y$="[object Date]",G$="[object Error]",q$="[object Function]",X$="[object Map]",Q$="[object Number]",Z$="[object Object]",J$="[object RegExp]",eA="[object Set]",tA="[object String]",nA="[object WeakMap]",rA="[object ArrayBuffer]",aA="[object DataView]",oA="[object Float32Array]",iA="[object Float64Array]",lA="[object Int8Array]",uA="[object Int16Array]",sA="[object Int32Array]",cA="[object Uint8Array]",dA="[object Uint8ClampedArray]",fA="[object Uint16Array]",vA="[object Uint32Array]",Kt={};Kt[oA]=Kt[iA]=Kt[lA]=Kt[uA]=Kt[sA]=Kt[cA]=Kt[dA]=Kt[fA]=Kt[vA]=!0;Kt[z$]=Kt[W$]=Kt[rA]=Kt[U$]=Kt[aA]=Kt[Y$]=Kt[G$]=Kt[q$]=Kt[X$]=Kt[Q$]=Kt[Z$]=Kt[J$]=Kt[eA]=Kt[tA]=Kt[nA]=!1;function hA(t){return xr(t)&&qg(t.length)&&!!Kt[Ya(t)]}function md(t){return function(e){return t(e)}}var F3=typeof exports=="object"&&exports&&!exports.nodeType&&exports,Nl=F3&&typeof module=="object"&&module&&!module.nodeType&&module,pA=Nl&&Nl.exports===F3,Vf=pA&&d4.process,gA=function(){try{var t=Nl&&Nl.require&&Nl.require("util").types;return t||Vf&&Vf.binding&&Vf.binding("util")}catch{}}();const Mi=gA;var Bb=Mi&&Mi.isTypedArray,mA=Bb?md(Bb):hA;const L3=mA;var yA=Object.prototype,bA=yA.hasOwnProperty;function B3(t,e){var n=fr(t),r=!n&&Yg(t),a=!n&&!r&&mc(t),o=!n&&!r&&!a&&L3(t),i=n||r||a||o,l=i?N$(t.length,String):[],u=l.length;for(var s in t)(e||bA.call(t,s))&&!(i&&(s=="length"||a&&(s=="offset"||s=="parent")||o&&(s=="buffer"||s=="byteLength"||s=="byteOffset")||Gg(s,u)))&&l.push(s);return l}var CA=Object.prototype;function Xg(t){var e=t&&t.constructor,n=typeof e=="function"&&e.prototype||CA;return t===n}var xA=v4(Object.keys,Object);const wA=xA;var SA=Object.prototype,PA=SA.hasOwnProperty;function kA(t){if(!Xg(t))return wA(t);var e=[];for(var n in Object(t))PA.call(t,n)&&n!="constructor"&&e.push(n);return e}function Su(t){return t!=null&&qg(t.length)&&!_3(t)}function Wi(t){return Su(t)?B3(t):kA(t)}function xh(t){return $3(t,Wi,Ug)}var OA=1,TA=Object.prototype,EA=TA.hasOwnProperty;function MA(t,e,n,r,a,o){var i=n&OA,l=xh(t),u=l.length,s=xh(e),d=s.length;if(u!=d&&!i)return!1;for(var c=u;c--;){var f=l[c];if(!(i?f in e:EA.call(e,f)))return!1}var v=o.get(t),g=o.get(e);if(v&&g)return v==e&&g==t;var p=!0;o.set(t,e),o.set(e,t);for(var m=i;++c1&&(Y=h("div",{class:"".concat(F,"-content")},[Y]));var K=ce(F,a.class,u.value),W=g.value||!e.visible,X=W?Ga(T.value.name,T.value):{};return h(Nn,y(y({ref:l},X),{},{onBeforeEnter:O}),{default:function(){return!j||e.visible?gn(h(zA,{target:P(),key:"popup",ref:i,monitorWindowResize:!0,disabled:N.value,align:E,onAlign:k},{default:function(){return h("div",y(y({class:K,onMouseenter:D,onMouseleave:R,onMousedown:x1(V,["capture"])},A({},nn?"onTouchstartPassive":"onTouchstart",x1(M,["capture"]))),{},{style:U}),[Y])}}),[[Tr,g.value]]):null}})}}}),UA=le({compatConfig:{MODE:3},name:"Popup",inheritAttrs:!1,props:M_,setup:function(e,n){var r=n.attrs,a=n.slots,o=n.expose,i=Q(!1),l=Q(!1),u=Q();return Se([function(){return e.visible},function(){return e.mobile}],function(){i.value=e.visible,e.visible&&e.mobile&&(l.value=!0)},{immediate:!0,flush:"post"}),o({forceAlign:function(){var d;(d=u.value)===null||d===void 0||d.forceAlign()},getElement:function(){var d;return(d=u.value)===null||d===void 0?void 0:d.getElement()}}),function(){var s=y(y(y({},e),r),{},{visible:i.value}),d=l.value?h(I_,y(y({},s),{},{mobile:e.mobile,ref:u}),{default:a.default}):h(WA,y(y({},s),{},{ref:u}),{default:a.default});return h("div",null,[h(w3,s,null),d])}}});function YA(t,e,n){return n?t[0]===e[0]:t[0]===e[0]&&t[1]===e[1]}function Xb(t,e,n){var r=t[e]||{};return y(y({},r),n)}function GA(t,e,n,r){for(var a=n.points,o=Object.keys(t),i=0;i0&&arguments[0]!==void 0?arguments[0]:{},n=arguments.length>1?arguments[1]:void 0,r=typeof e=="function"?e(this.$data,this.$props):e;if(this.getDerivedStateFromProps){var a=this.getDerivedStateFromProps(p4(this),y(y({},this.$data),r));if(a===null)return;r=y(y({},r),a||{})}pt(this.$data,r),this._.isMounted&&this.$forceUpdate(),nt(function(){n&&n()})},__emit:function(){var e=[].slice.call(arguments,0),n=e[0];n="on".concat(n[0].toUpperCase()).concat(n.substring(1));var r=this.$props[n]||this.$attrs[n];if(e.length&&r)if(Array.isArray(r))for(var a=0,o=r.length;a1&&arguments[1]!==void 0?arguments[1]:{inTriggerContext:!0};at(K3,{inTriggerContext:n.inTriggerContext,shouldRender:L(function(){var r=e||{},a=r.sPopupVisible,o=r.popupRef,i=r.forceRender,l=r.autoDestroy,u=!1;return(a||o||i)&&(u=!0),!a&&l&&(u=!1),u})})},XA=function(){Qg({},{inTriggerContext:!1});var e=Ze(K3,{shouldRender:L(function(){return!1}),inTriggerContext:!1});return{shouldRender:L(function(){return e.shouldRender.value||e.inTriggerContext===!1})}};const kh=le({compatConfig:{MODE:3},name:"Portal",inheritAttrs:!1,props:{getContainer:G.func.isRequired,didUpdate:Function},setup:function(e,n){var r=n.slots,a=!0,o,i=XA(),l=i.shouldRender;ld(function(){a=!1,l.value&&(o=e.getContainer())});var u=Se(l,function(){l.value&&!o&&(o=e.getContainer()),o&&u()});return wn(function(){nt(function(){if(l.value){var s;(s=e.didUpdate)===null||s===void 0||s.call(e,e)}})}),ut(function(){o&&o.parentNode&&o.parentNode.removeChild(o)}),function(){if(!l.value)return null;if(a){var s;return(s=r.default)===null||s===void 0?void 0:s.call(r)}return o?h(eg,{to:o},r):null}}});function Qb(){}function QA(){return""}function ZA(t){return t?t.ownerDocument:window.document}var JA=["onClick","onMousedown","onTouchstart","onMouseenter","onMouseleave","onFocus","onBlur","onContextmenu"];const Ui=le({compatConfig:{MODE:3},name:"Trigger",mixins:[Ko],inheritAttrs:!1,props:{action:G.oneOfType([G.string,G.arrayOf(G.string)]).def([]),showAction:G.any.def([]),hideAction:G.any.def([]),getPopupClassNameFromAlign:G.any.def(QA),onPopupVisibleChange:Function,afterPopupVisibleChange:G.func.def(Qb),popup:G.any,popupStyle:{type:Object,default:void 0},prefixCls:G.string.def("rc-trigger-popup"),popupClassName:G.string.def(""),popupPlacement:String,builtinPlacements:G.object,popupTransitionName:String,popupAnimation:G.any,mouseEnterDelay:G.number.def(0),mouseLeaveDelay:G.number.def(.1),zIndex:Number,focusDelay:G.number.def(0),blurDelay:G.number.def(.15),getPopupContainer:Function,getDocument:G.func.def(ZA),forceRender:{type:Boolean,default:void 0},destroyPopupOnHide:{type:Boolean,default:!1},mask:{type:Boolean,default:!1},maskClosable:{type:Boolean,default:!0},popupAlign:G.object.def(function(){return{}}),popupVisible:{type:Boolean,default:void 0},defaultPopupVisible:{type:Boolean,default:!1},maskTransitionName:String,maskAnimation:String,stretch:String,alignPoint:{type:Boolean,default:void 0},autoDestroy:{type:Boolean,default:!1},mobile:Object,getTriggerDOMNode:Function,tryPopPortal:Boolean},setup:function(e){var n=L(function(){var u=e.popupPlacement,s=e.popupAlign,d=e.builtinPlacements;return u&&d?Xb(d,u,s):s}),r=qA(e.tryPopPortal),a=r.setPortal,o=r.popPortal,i=Q(null),l=function(s){i.value=s};return{popPortal:o,setPortal:a,vcTriggerContext:Ze("vcTriggerContext",{}),popupRef:i,setPopupRef:l,triggerRef:Q(null),align:n,focusTime:null,clickOutsideHandler:null,contextmenuOutsideHandler1:null,contextmenuOutsideHandler2:null,touchOutsideHandler:null,attachId:null,delayTimer:null,hasPopupMouseDown:!1,preClickTime:null,preTouchTime:null,mouseDownTimeout:null,childOriginEvents:{}}},data:function(){var e=this,n,r=this.$props,a;return this.popupVisible!==void 0?a=!!r.popupVisible:a=!!r.defaultPopupVisible,JA.forEach(function(o){e["fire".concat(o)]=function(i){e.fireEvents(o,i)}}),(n=this.setPortal)===null||n===void 0||n.call(this,h(kh,{key:"portal",getContainer:this.getContainer,didUpdate:this.handlePortalUpdate},{default:this.getComponent})),{prevPopupVisible:a,sPopupVisible:a,point:null}},watch:{popupVisible:function(e){e!==void 0&&(this.prevPopupVisible=this.sPopupVisible,this.sPopupVisible=e)}},created:function(){at("vcTriggerContext",{onPopupMouseDown:this.onPopupMouseDown}),Qg(this)},deactivated:function(){this.setPopupVisible(!1)},mounted:function(){var e=this;this.$nextTick(function(){e.updatedCal()})},updated:function(){var e=this;this.$nextTick(function(){e.updatedCal()})},beforeUnmount:function(){this.clearDelayTimer(),this.clearOutsideHandler(),clearTimeout(this.mouseDownTimeout),qe.cancel(this.attachId)},methods:{updatedCal:function(){var e=this.$props,n=this.$data;if(n.sPopupVisible){var r;!this.clickOutsideHandler&&(this.isClickToHide()||this.isContextmenuToShow())&&(r=e.getDocument(this.getRootDomNode()),this.clickOutsideHandler=Dt(r,"mousedown",this.onDocumentClick)),this.touchOutsideHandler||(r=r||e.getDocument(this.getRootDomNode()),this.touchOutsideHandler=Dt(r,"touchstart",this.onDocumentClick,nn?{passive:!1}:!1)),!this.contextmenuOutsideHandler1&&this.isContextmenuToShow()&&(r=r||e.getDocument(this.getRootDomNode()),this.contextmenuOutsideHandler1=Dt(r,"scroll",this.onContextmenuClose)),!this.contextmenuOutsideHandler2&&this.isContextmenuToShow()&&(this.contextmenuOutsideHandler2=Dt(window,"blur",this.onContextmenuClose))}else this.clearOutsideHandler()},onMouseenter:function(e){var n=this.$props.mouseEnterDelay;this.fireEvents("onMouseenter",e),this.delaySetPopupVisible(!0,n,n?null:e)},onMouseMove:function(e){this.fireEvents("onMousemove",e),this.setPoint(e)},onMouseleave:function(e){this.fireEvents("onMouseleave",e),this.delaySetPopupVisible(!1,this.$props.mouseLeaveDelay)},onPopupMouseenter:function(){this.clearDelayTimer()},onPopupMouseleave:function(e){var n;e&&e.relatedTarget&&!e.relatedTarget.setTimeout&&bo((n=this.popupRef)===null||n===void 0?void 0:n.getElement(),e.relatedTarget)||this.delaySetPopupVisible(!1,this.$props.mouseLeaveDelay)},onFocus:function(e){this.fireEvents("onFocus",e),this.clearDelayTimer(),this.isFocusToShow()&&(this.focusTime=Date.now(),this.delaySetPopupVisible(!0,this.$props.focusDelay))},onMousedown:function(e){this.fireEvents("onMousedown",e),this.preClickTime=Date.now()},onTouchstart:function(e){this.fireEvents("onTouchstart",e),this.preTouchTime=Date.now()},onBlur:function(e){bo(e.target,e.relatedTarget||document.activeElement)||(this.fireEvents("onBlur",e),this.clearDelayTimer(),this.isBlurToHide()&&this.delaySetPopupVisible(!1,this.$props.blurDelay))},onContextmenu:function(e){e.preventDefault(),this.fireEvents("onContextmenu",e),this.setPopupVisible(!0,e)},onContextmenuClose:function(){this.isContextmenuToShow()&&this.close()},onClick:function(e){if(this.fireEvents("onClick",e),this.focusTime){var n;if(this.preClickTime&&this.preTouchTime?n=Math.min(this.preClickTime,this.preTouchTime):this.preClickTime?n=this.preClickTime:this.preTouchTime&&(n=this.preTouchTime),Math.abs(n-this.focusTime)<20)return;this.focusTime=0}this.preClickTime=0,this.preTouchTime=0,this.isClickToShow()&&(this.isClickToHide()||this.isBlurToHide())&&e&&e.preventDefault&&e.preventDefault(),e&&e.domEvent&&e.domEvent.preventDefault();var r=!this.$data.sPopupVisible;(this.isClickToHide()&&!r||r&&this.isClickToShow())&&this.setPopupVisible(!this.$data.sPopupVisible,e)},onPopupMouseDown:function(){var e=this,n=this.vcTriggerContext,r=n===void 0?{}:n;this.hasPopupMouseDown=!0,clearTimeout(this.mouseDownTimeout),this.mouseDownTimeout=setTimeout(function(){e.hasPopupMouseDown=!1},0),r.onPopupMouseDown&&r.onPopupMouseDown.apply(r,arguments)},onDocumentClick:function(e){if(!(this.$props.mask&&!this.$props.maskClosable)){var n=e.target,r=this.getRootDomNode(),a=this.getPopupDomNode();(!bo(r,n)||this.isContextMenuOnly())&&!bo(a,n)&&!this.hasPopupMouseDown&&this.delaySetPopupVisible(!1,.1)}},getPopupDomNode:function(){var e;return((e=this.popupRef)===null||e===void 0?void 0:e.getElement())||null},getRootDomNode:function(){var e=this.$props.getTriggerDOMNode;if(e){var n=Ra(this.triggerRef);return Ra(e(n))}try{var r=Ra(this.triggerRef);if(r)return r}catch{}return Ra(this)},handleGetPopupClassFromAlign:function(e){var n=[],r=this.$props,a=r.popupPlacement,o=r.builtinPlacements,i=r.prefixCls,l=r.alignPoint,u=r.getPopupClassNameFromAlign;return a&&o&&n.push(GA(o,i,e,l)),u&&n.push(u(e)),n.join(" ")},getPopupAlign:function(){var e=this.$props,n=e.popupPlacement,r=e.popupAlign,a=e.builtinPlacements;return n&&a?Xb(a,n,r):r},getComponent:function(){var e=this,n={};this.isMouseEnterToShow()&&(n.onMouseenter=this.onPopupMouseenter),this.isMouseLeaveToHide()&&(n.onMouseleave=this.onPopupMouseleave),n.onMousedown=this.onPopupMouseDown,n[nn?"onTouchstartPassive":"onTouchstart"]=this.onPopupMouseDown;var r=this.handleGetPopupClassFromAlign,a=this.getRootDomNode,o=this.getContainer,i=this.$attrs,l=this.$props,u=l.prefixCls,s=l.destroyPopupOnHide,d=l.popupClassName,c=l.popupAnimation,f=l.popupTransitionName,v=l.popupStyle,g=l.mask,p=l.maskAnimation,m=l.maskTransitionName,b=l.zIndex,C=l.stretch,x=l.alignPoint,w=l.mobile,P=l.forceRender,S=this.$data,k=S.sPopupVisible,T=S.point,O=y(y({prefixCls:u,destroyPopupOnHide:s,visible:k,point:x?T:null,align:this.align,animation:c,getClassNameFromAlign:r,stretch:C,getRootDomNode:a,mask:g,zIndex:b,transitionName:f,maskAnimation:p,maskTransitionName:m,getContainer:o,class:d,style:v,onAlign:i.onPopupAlign||Qb},n),{},{ref:this.setPopupRef,mobile:w,forceRender:P});return h(UA,O,{default:this.$slots.popup||function(){return cg(e,"popup")}})},attachParent:function(e){var n=this;qe.cancel(this.attachId);var r=this.$props,a=r.getPopupContainer,o=r.getDocument,i=this.getRootDomNode(),l;a?(i||a.length===0)&&(l=a(i)):l=o(this.getRootDomNode()).body,l?l.appendChild(e):this.attachId=qe(function(){n.attachParent(e)})},getContainer:function(){var e=this.$props,n=e.getDocument,r=n(this.getRootDomNode()).createElement("div");return r.style.position="absolute",r.style.top="0",r.style.left="0",r.style.width="100%",this.attachParent(r),r},setPopupVisible:function(e,n){var r=this.alignPoint,a=this.sPopupVisible,o=this.onPopupVisibleChange;this.clearDelayTimer(),a!==e&&(la(this,"popupVisible")||this.setState({sPopupVisible:e,prevPopupVisible:a}),o&&o(e)),r&&n&&e&&this.setPoint(n)},setPoint:function(e){var n=this.$props.alignPoint;!n||!e||this.setState({point:{pageX:e.pageX,pageY:e.pageY}})},handlePortalUpdate:function(){this.prevPopupVisible!==this.sPopupVisible&&this.afterPopupVisibleChange(this.sPopupVisible)},delaySetPopupVisible:function(e,n,r){var a=this,o=n*1e3;if(this.clearDelayTimer(),o){var i=r?{pageX:r.pageX,pageY:r.pageY}:null;this.delayTimer=T_(function(){a.setPopupVisible(e,i),a.clearDelayTimer()},o)}else this.setPopupVisible(e,r)},clearDelayTimer:function(){this.delayTimer&&(O_(this.delayTimer),this.delayTimer=null)},clearOutsideHandler:function(){this.clickOutsideHandler&&(this.clickOutsideHandler.remove(),this.clickOutsideHandler=null),this.contextmenuOutsideHandler1&&(this.contextmenuOutsideHandler1.remove(),this.contextmenuOutsideHandler1=null),this.contextmenuOutsideHandler2&&(this.contextmenuOutsideHandler2.remove(),this.contextmenuOutsideHandler2=null),this.touchOutsideHandler&&(this.touchOutsideHandler.remove(),this.touchOutsideHandler=null)},createTwoChains:function(e){var n=function(){},r=T1(this);return this.childOriginEvents[e]&&r[e]?this["fire".concat(e)]:(n=this.childOriginEvents[e]||r[e]||n,n)},isClickToShow:function(){var e=this.$props,n=e.action,r=e.showAction;return n.indexOf("click")!==-1||r.indexOf("click")!==-1},isContextMenuOnly:function(){var e=this.$props.action;return e==="contextmenu"||e.length===1&&e[0]==="contextmenu"},isContextmenuToShow:function(){var e=this.$props,n=e.action,r=e.showAction;return n.indexOf("contextmenu")!==-1||r.indexOf("contextmenu")!==-1},isClickToHide:function(){var e=this.$props,n=e.action,r=e.hideAction;return n.indexOf("click")!==-1||r.indexOf("click")!==-1},isMouseEnterToShow:function(){var e=this.$props,n=e.action,r=e.showAction;return n.indexOf("hover")!==-1||r.indexOf("mouseenter")!==-1},isMouseLeaveToHide:function(){var e=this.$props,n=e.action,r=e.hideAction;return n.indexOf("hover")!==-1||r.indexOf("mouseleave")!==-1},isFocusToShow:function(){var e=this.$props,n=e.action,r=e.showAction;return n.indexOf("focus")!==-1||r.indexOf("focus")!==-1},isBlurToHide:function(){var e=this.$props,n=e.action,r=e.hideAction;return n.indexOf("focus")!==-1||r.indexOf("blur")!==-1},forcePopupAlign:function(){if(this.$data.sPopupVisible){var e;(e=this.popupRef)===null||e===void 0||e.forceAlign()}},fireEvents:function(e,n){this.childOriginEvents[e]&&this.childOriginEvents[e](n);var r=this.$props[e]||this.$attrs[e];r&&r(n)},close:function(){this.setPopupVisible(!1)}},render:function(){var e=this,n=this.$attrs,r=qt(yu(this)),a=this.$props.alignPoint,o=r[0];this.childOriginEvents=T1(o);var i={key:"trigger"};this.isContextmenuToShow()?i.onContextmenu=this.onContextmenu:i.onContextmenu=this.createTwoChains("onContextmenu"),this.isClickToHide()||this.isClickToShow()?(i.onClick=this.onClick,i.onMousedown=this.onMousedown,i[nn?"onTouchstartPassive":"onTouchstart"]=this.onTouchstart):(i.onClick=this.createTwoChains("onClick"),i.onMousedown=this.createTwoChains("onMousedown"),i[nn?"onTouchstartPassive":"onTouchstart"]=this.createTwoChains("onTouchstart")),this.isMouseEnterToShow()?(i.onMouseenter=this.onMouseenter,a&&(i.onMousemove=this.onMouseMove)):i.onMouseenter=this.createTwoChains("onMouseenter"),this.isMouseLeaveToHide()?i.onMouseleave=this.onMouseleave:i.onMouseleave=this.createTwoChains("onMouseleave"),this.isFocusToShow()||this.isBlurToHide()?(i.onFocus=this.onFocus,i.onBlur=this.onBlur):(i.onFocus=this.createTwoChains("onFocus"),i.onBlur=function(d){d&&(!d.relatedTarget||!bo(d.target,d.relatedTarget))&&e.createTwoChains("onBlur")(d)});var l=ce(o&&o.props&&o.props.class,n.class);l&&(i.class=l);var u=Ct(o,y(y({},i),{},{ref:"triggerRef"}),!0,!0);if(this.popPortal)return u;var s=h(kh,{key:"portal",getContainer:this.getContainer,didUpdate:this.handlePortalUpdate},{default:this.getComponent});return h(et,null,[s,u])}});var e9=["empty"],t9=function(e){var n=e===!0?0:1;return{bottomLeft:{points:["tl","bl"],offset:[0,4],overflow:{adjustX:n,adjustY:1}},bottomRight:{points:["tr","br"],offset:[0,4],overflow:{adjustX:n,adjustY:1}},topLeft:{points:["bl","tl"],offset:[0,-4],overflow:{adjustX:n,adjustY:1}},topRight:{points:["br","tr"],offset:[0,-4],overflow:{adjustX:n,adjustY:1}}}},n9=le({name:"SelectTrigger",inheritAttrs:!1,props:{dropdownAlign:Object,visible:{type:Boolean,default:void 0},disabled:{type:Boolean,default:void 0},dropdownClassName:String,dropdownStyle:G.object,placement:String,empty:{type:Boolean,default:void 0},prefixCls:String,popupClassName:String,animation:String,transitionName:String,getPopupContainer:Function,dropdownRender:Function,containerWidth:Number,dropdownMatchSelectWidth:G.oneOfType([Number,Boolean]).def(!0),popupElement:G.any,direction:String,getTriggerDOMNode:Function,onPopupVisibleChange:Function,onPopupMouseEnter:Function},setup:function(e,n){var r=n.slots,a=n.attrs,o=n.expose,i=L(function(){var u=e.dropdownMatchSelectWidth;return t9(u)}),l=Q();return o({getPopupElement:function(){return l.value}}),function(){var u=y(y({},e),a),s=u.empty,d=s===void 0?!1:s,c=He(u,e9),f=c.visible,v=c.dropdownAlign,g=c.prefixCls,p=c.popupElement,m=c.dropdownClassName,b=c.dropdownStyle,C=c.direction,x=C===void 0?"ltr":C,w=c.placement,P=c.dropdownMatchSelectWidth,S=c.containerWidth,k=c.dropdownRender,T=c.animation,O=c.transitionName,N=c.getPopupContainer,$=c.getTriggerDOMNode,I=c.onPopupVisibleChange,E=c.onPopupMouseEnter,F="".concat(g,"-dropdown"),j=p;k&&(j=k({menuNode:p,props:e}));var D=T?"".concat(F,"-").concat(T):O,R=y({minWidth:"".concat(S,"px")},b);return typeof P=="number"?R.width="".concat(P,"px"):P&&(R.width="".concat(S,"px")),h(Ui,y(y({},e),{},{showAction:I?["click"]:[],hideAction:I?["click"]:[],popupPlacement:w||(x==="rtl"?"bottomRight":"bottomLeft"),builtinPlacements:i.value,prefixCls:F,popupTransitionName:D,popupAlign:v,popupVisible:f,getPopupContainer:N,popupClassName:ce(m,A({},"".concat(F,"-empty"),d)),popupStyle:R,getTriggerDOMNode:$,onPopupVisibleChange:I}),{default:r.default,popup:function(){return h("div",{ref:l,onMouseenter:E},[j])}})}}});const r9=n9;var ht={MAC_ENTER:3,BACKSPACE:8,TAB:9,NUM_CENTER:12,ENTER:13,SHIFT:16,CTRL:17,ALT:18,PAUSE:19,CAPS_LOCK:20,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,PRINT_SCREEN:44,INSERT:45,DELETE:46,ZERO:48,ONE:49,TWO:50,THREE:51,FOUR:52,FIVE:53,SIX:54,SEVEN:55,EIGHT:56,NINE:57,QUESTION_MARK:63,A:65,B:66,C:67,D:68,E:69,F:70,G:71,H:72,I:73,J:74,K:75,L:76,M:77,N:78,O:79,P:80,Q:81,R:82,S:83,T:84,U:85,V:86,W:87,X:88,Y:89,Z:90,META:91,WIN_KEY_RIGHT:92,CONTEXT_MENU:93,NUM_ZERO:96,NUM_ONE:97,NUM_TWO:98,NUM_THREE:99,NUM_FOUR:100,NUM_FIVE:101,NUM_SIX:102,NUM_SEVEN:103,NUM_EIGHT:104,NUM_NINE:105,NUM_MULTIPLY:106,NUM_PLUS:107,NUM_MINUS:109,NUM_PERIOD:110,NUM_DIVISION:111,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,NUMLOCK:144,SEMICOLON:186,DASH:189,EQUALS:187,COMMA:188,PERIOD:190,SLASH:191,APOSTROPHE:192,SINGLE_QUOTE:222,OPEN_SQUARE_BRACKET:219,BACKSLASH:220,CLOSE_SQUARE_BRACKET:221,WIN_KEY:224,MAC_FF_META:224,WIN_IME:229,isTextModifyingKeyEvent:function(e){var n=e.keyCode;if(e.altKey&&!e.ctrlKey||e.metaKey||n>=ht.F1&&n<=ht.F12)return!1;switch(n){case ht.ALT:case ht.CAPS_LOCK:case ht.CONTEXT_MENU:case ht.CTRL:case ht.DOWN:case ht.END:case ht.ESC:case ht.HOME:case ht.INSERT:case ht.LEFT:case ht.MAC_FF_META:case ht.META:case ht.NUMLOCK:case ht.NUM_CENTER:case ht.PAGE_DOWN:case ht.PAGE_UP:case ht.PAUSE:case ht.PRINT_SCREEN:case ht.RIGHT:case ht.SHIFT:case ht.UP:case ht.WIN_KEY:case ht.WIN_KEY_RIGHT:return!1;default:return!0}},isCharacterKey:function(e){if(e>=ht.ZERO&&e<=ht.NINE||e>=ht.NUM_ZERO&&e<=ht.NUM_MULTIPLY||e>=ht.A&&e<=ht.Z||window.navigator.userAgent.indexOf("WebKit")!==-1&&e===0)return!0;switch(e){case ht.SPACE:case ht.QUESTION_MARK:case ht.NUM_PLUS:case ht.NUM_MINUS:case ht.NUM_PERIOD:case ht.NUM_DIVISION:case ht.SEMICOLON:case ht.DASH:case ht.EQUALS:case ht.COMMA:case ht.PERIOD:case ht.SLASH:case ht.APOSTROPHE:case ht.SINGLE_QUOTE:case ht.OPEN_SQUARE_BRACKET:case ht.BACKSLASH:case ht.CLOSE_SQUARE_BRACKET:return!0;default:return!1}}};const Ee=ht;var Cd=function(e,n){var r,a=n.slots,o=e.class,i=e.customizeIcon,l=e.customizeIconProps,u=e.onMousedown,s=e.onClick,d;return typeof i=="function"?d=i(l):d=i,h("span",{class:o,onMousedown:function(f){f.preventDefault(),u&&u(f)},style:{userSelect:"none",WebkitUserSelect:"none"},unselectable:"on",onClick:s,"aria-hidden":!0},[d!==void 0?d:h("span",{class:o.split(/\s+/).map(function(c){return"".concat(c,"-icon")})},[(r=a.default)===null||r===void 0?void 0:r.call(a)])])};Cd.inheritAttrs=!1;Cd.displayName="TransBtn";Cd.props={class:String,customizeIcon:G.any,customizeIconProps:G.any,onMousedown:Function,onClick:Function};const yc=Cd;function a9(t){t.target.composing=!0}function Zb(t){t.target.composing&&(t.target.composing=!1,o9(t.target,"input"))}function o9(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function Kf(t,e,n,r){t.addEventListener(e,n,r)}var i9={created:function(e,n){(!n.modifiers||!n.modifiers.lazy)&&(Kf(e,"compositionstart",a9),Kf(e,"compositionend",Zb),Kf(e,"change",Zb))}};const Yi=i9;var l9={inputRef:G.any,prefixCls:String,id:String,inputElement:G.VueNode,disabled:{type:Boolean,default:void 0},autofocus:{type:Boolean,default:void 0},autocomplete:String,editable:{type:Boolean,default:void 0},activeDescendantId:String,value:String,open:{type:Boolean,default:void 0},tabindex:G.oneOfType([G.number,G.string]),attrs:G.object,onKeydown:{type:Function},onMousedown:{type:Function},onChange:{type:Function},onPaste:{type:Function},onCompositionstart:{type:Function},onCompositionend:{type:Function},onFocus:{type:Function},onBlur:{type:Function}},u9=le({compatConfig:{MODE:3},name:"Input",inheritAttrs:!1,props:l9,setup:function(e){var n=null,r=Ze("VCSelectContainerEvent");return function(){var a,o,i=e.prefixCls,l=e.id,u=e.inputElement,s=e.disabled,d=e.tabindex,c=e.autofocus,f=e.autocomplete,v=e.editable,g=e.activeDescendantId,p=e.value,m=e.onKeydown,b=e.onMousedown,C=e.onChange,x=e.onPaste,w=e.onCompositionstart,P=e.onCompositionend,S=e.onFocus,k=e.onBlur,T=e.open,O=e.inputRef,N=e.attrs,$=u||gn(h("input",null,null),[[Yi]]),I=$.props||{},E=I.onKeydown,F=I.onInput,j=I.onFocus,D=I.onBlur,R=I.onMousedown,_=I.onCompositionstart,M=I.onCompositionend,V=I.style;return $=Ct($,pt(y(y(y({type:"search"},I),{},{id:l,ref:O,disabled:s,tabindex:d,autocomplete:f||"off",autofocus:c,class:ce("".concat(i,"-selection-search-input"),(a=$)===null||a===void 0||(o=a.props)===null||o===void 0?void 0:o.class),role:"combobox","aria-expanded":T,"aria-haspopup":"listbox","aria-owns":"".concat(l,"_list"),"aria-autocomplete":"list","aria-controls":"".concat(l,"_list"),"aria-activedescendant":g},N),{},{value:v?p:"",readonly:!v,unselectable:v?null:"on",style:y(y({},V),{},{opacity:v?null:0}),onKeydown:function(U){m(U),E&&E(U)},onMousedown:function(U){b(U),R&&R(U)},onInput:function(U){C(U),F&&F(U)},onCompositionstart:function(U){w(U),_&&_(U)},onCompositionend:function(U){P(U),M&&M(U)},onPaste:x,onFocus:function(){clearTimeout(n),j&&j(arguments.length<=0?void 0:arguments[0]),S&&S(arguments.length<=0?void 0:arguments[0]),r==null||r.focus(arguments.length<=0?void 0:arguments[0])},onBlur:function(){for(var U=arguments.length,Y=new Array(U),K=0;K